diff --git a/staff/assets/icon/pen-01-MB-view-details.svg b/staff/assets/icon/pen-01-MB-view-details.svg new file mode 100644 index 000000000..daf206c2c --- /dev/null +++ b/staff/assets/icon/pen-01-MB-view-details.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/staff/assets/icon/toast-failure.svg b/staff/assets/icon/toast-failure.svg new file mode 100644 index 000000000..9406ccecb --- /dev/null +++ b/staff/assets/icon/toast-failure.svg @@ -0,0 +1,3 @@ + + + diff --git a/staff/assets/icon/toast-info.svg b/staff/assets/icon/toast-info.svg new file mode 100644 index 000000000..8fb72ba1d --- /dev/null +++ b/staff/assets/icon/toast-info.svg @@ -0,0 +1,3 @@ + + + diff --git a/staff/assets/icon/toast-success.svg b/staff/assets/icon/toast-success.svg new file mode 100644 index 000000000..a86cb8814 --- /dev/null +++ b/staff/assets/icon/toast-success.svg @@ -0,0 +1,3 @@ + + + diff --git a/staff/assets/icon/toast-warning.svg b/staff/assets/icon/toast-warning.svg new file mode 100644 index 000000000..65e22ea66 --- /dev/null +++ b/staff/assets/icon/toast-warning.svg @@ -0,0 +1,4 @@ + + + + diff --git a/staff/assets/maps/atlanta/level_08.svg b/staff/assets/maps/atlanta/level_08.svg index 02d06351d..d32be8346 100644 --- a/staff/assets/maps/atlanta/level_08.svg +++ b/staff/assets/maps/atlanta/level_08.svg @@ -90,9 +90,9 @@ c-1.4-2.7-0.4-6,2.3-7.4l0,0l2.6-1.5c2-1.1,4.5-0.4,5.7,1.6l0,0L496.5,492.2L496.5,492.2z"/> - + - + - + - + - + - + - + - + - + - + @@ -307,9 +307,9 @@ L1120.1,194.5z"/> - + - + @@ -370,9 +370,9 @@ L1203.4,146.7z"/> - + - + @@ -463,7 +463,7 @@ l-2.9,0.7c-2.2,0.5-4.4-0.9-5-3.1l0,0C91.6,903.5,91.4,903.1,91.4,903.1z"/> - + - + - + @@ -539,9 +539,9 @@ - + - + @@ -599,9 +599,9 @@ L1314.7,815.1z"/> - + - + @@ -660,9 +660,9 @@ - + - + @@ -720,9 +720,9 @@ - + - + @@ -782,9 +782,9 @@ L1043.9,971.7z"/> - + - + @@ -831,9 +831,9 @@ - + - + @@ -1134,9 +1134,9 @@ c-1.7-2.4-1.2-5.8,1.3-7.6l0,0l2.4-1.8c1.8-1.4,4.4-1,5.8,0.8l0,0L133.5,872.6L133.5,872.6z"/> - + - + - + - + @@ -1647,11 +1647,11 @@ c2.9-1.6,6.5-0.8,8.3,2l1.8,2.7c1.4,2.2,0.8,5.1-1.4,6.5l0,0C784.9,471.1,784.8,471.1,784.7,471.1L784.7,471.1z"/> - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + c0.3-0.6,0.9-1.3,1.8-1.9c0.8-0.6,1.4-1,1.6-1.3c0.4-0.4,0.6-0.8,0.6-1.3C346.1,980.3,346,979.9,345.8,979.7L345.8,979.7z"/> @@ -3467,8 +3506,47 @@ C495.3,885.4,495.5,884.9,495.8,884.5L495.8,884.5z M497.2,889.3c0.2,0.1,0.4,0.2,0.6,0.2c0.4,0,0.7-0.1,1.1-0.3 c0.3-0.2,0.5-0.6,0.5-1.2v-0.7c-0.1,0.1-0.2,0.1-0.3,0.2c-0.1,0-0.3,0.1-0.5,0.1l-0.4,0.1c-0.4,0.1-0.7,0.2-0.8,0.2 c-0.3,0.2-0.4,0.4-0.4,0.8C496.9,889,497,889.2,497.2,889.3L497.2,889.3z"/> - + + + + + + + + + + @@ -3637,14 +3715,14 @@ s0.6,0.4,0.9,0.4c0.3,0,0.5-0.1,0.7-0.2S1018,352,1018.1,351.7L1018.1,351.7z M1018.1,350.1c0-0.5-0.1-0.8-0.4-1.1 s-0.5-0.4-0.9-0.4s-0.7,0.1-0.9,0.4s-0.3,0.6-0.3,1.1H1018.1z"/> + c-0.3-0.2-0.5-0.3-0.8-0.3c-0.2,0-0.4,0.1-0.6,0.2s-0.3,0.4-0.4,0.7s-0.1,1-0.1,2.1L1022.7,353.7L1022.7,353.7z"/> + M1031.1,350.6c0,0.6,0.1,1.1,0.4,1.4s0.7,0.5,1.1,0.5c0.4,0,0.8-0.2,1.1-0.5c0.3-0.3,0.4-0.8,0.4-1.4s-0.1-1.1-0.4-1.4 + s-0.7-0.5-1.1-0.5c-0.4,0-0.8,0.2-1.1,0.5C1031.2,349.5,1031.1,350,1031.1,350.6z"/> @@ -3672,7 +3750,7 @@ c0.8,0,1.5,0.3,1.9,0.8c0.4,0.4,0.6,0.9,0.6,1.4c0,0.8-0.4,1.4-1.2,1.8c0.5,0.1,0.9,0.3,1.2,0.7s0.4,0.8,0.4,1.3 c0,0.8-0.3,1.4-0.8,1.9s-1.2,0.8-2.1,0.8c-0.8,0-1.4-0.2-1.9-0.7S1012.5,377,1012.4,376.2L1012.4,376.2z"/> - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + @@ -3954,7 +4052,7 @@ c0.3,0.3,0.6,0.4,1,0.4c0.2,0,0.5-0.1,0.7-0.2C1573.8,335.8,1573.9,335.5,1574.1,335.2z M1571.5,333.9h2.6c0-0.7-0.6-1.3-1.3-1.4 c-0.4,0-0.7,0.1-0.9,0.4C1571.6,333.2,1571.5,333.5,1571.5,333.9L1571.5,333.9L1571.5,333.9z"/> - + - + - + + s0.2,0.4,0.2,0.6l-0.7,0.1c0-0.2-0.1-0.4-0.3-0.5S527.2,61,527,61c-0.2,0-0.5,0-0.7,0.2c-0.1,0.1-0.2,0.2-0.2,0.4 + c0,0.1,0,0.2,0.1,0.2c0.1,0.1,0.2,0.1,0.3,0.2c0.1,0,0.3,0.1,0.6,0.2c0.3,0.1,0.7,0.2,1,0.3c0.2,0.1,0.3,0.2,0.5,0.4 + c0.1,0.2,0.2,0.4,0.2,0.6c0,0.2-0.1,0.5-0.2,0.6c-0.1,0.2-0.3,0.4-0.6,0.5s-0.6,0.2-0.9,0.2c-0.4,0-0.9-0.1-1.2-0.3 + C525.9,64.2,525.7,63.9,525.6,63.5z"/> @@ -512,7 +513,7 @@ - + @@ -549,7 +550,7 @@ c0-0.3-0.1-0.5-0.3-0.8s-0.5-0.4-0.9-0.4c-0.3,0-0.6,0.1-0.8,0.3C625.9,382.4,625.8,382.8,625.8,383.1z"/> + c-0.3,0-0.5,0.1-0.8,0.3c-0.2,0.3-0.4,0.7-0.3,1.1v2.2h-0.6V385.5z"/> + c0.3,0.1,0.6,0.3,0.8,0.6c0.2,0.2,0.3,0.5,0.4,0.8c0.1,0.4,0.1,0.9,0.1,1.3v4.4H99z"/> @@ -816,7 +817,7 @@ @@ -848,7 +849,7 @@ + c0.3,0.1,0.6,0.3,0.8,0.6c0.2,0.2,0.3,0.5,0.4,0.8c0.1,0.4,0.1,0.9,0.1,1.3v4.4H90.5z"/> @@ -1087,9 +1088,8 @@ c-0.1-0.2-0.2-0.3-0.3-0.5c-0.2-0.1-0.4-0.2-0.6-0.1c-0.3,0-0.6,0.1-0.8,0.2c-0.2,0.2-0.4,0.4-0.5,0.7c-0.1,0.5-0.2,1-0.2,1.5v3.5 h-1.9L622.9,171.9z"/> + c0,0.5-0.1,1.1-0.3,1.6c-0.2,0.4-0.5,0.7-0.9,1c-0.3,0.2-0.7,0.4-1,0.5c-0.7,0.1-1.4,0.2-2.1,0.1h-1.3v3.8h-2V193.2z M584.2,184.9 + v2.8h1.1c0.5,0,1.1,0,1.6-0.2s0.9-0.7,0.9-1.3c0-0.3-0.1-0.7-0.3-0.9s-0.5-0.4-0.8-0.4c-0.5-0.1-1-0.1-1.5-0.1L584.2,184.9z"/> + c0.1-0.3,0.2-0.7,0.2-1.2v-4.1h2v7.5h-1.9v-1.2H314.7z"/> + c0.1-0.3,0.2-0.7,0.2-1.2v-4.1h2v7.5h-1.9v-1.2H352.8z"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + c0.4-0.3,0.9-0.5,1.5-0.5c0.8,0,1.4,0.2,1.9,0.6c0.5,0.4,0.7,1.1,0.7,2v5h-2V417c0-0.4-0.1-0.7-0.2-0.9 + C80,415.7,79.6,415.5,79.1,415.5z"/> + + c0.4-0.3,0.8-0.5,1.4-0.5c0,0,0.1,0,0.1,0c0,0,0.1,0,0.2,0v2c-0.1,0-0.2,0-0.3,0C96.6,415.8,96.5,415.8,96.5,415.8z"/> + c-0.4,0-0.7,0.1-0.9,0.2c-0.2,0.1-0.3,0.3-0.3,0.5c0,0.2,0.1,0.4,0.3,0.5c0.2,0.1,0.9,0.3,2,0.5c0.8,0.2,1.4,0.5,1.7,0.8 + c0.4,0.4,0.6,0.8,0.6,1.4c0,0.7-0.3,1.3-0.8,1.8c-0.6,0.5-1.4,0.7-2.6,0.7c-1.2,0-2-0.2-2.6-0.7c-0.6-0.5-0.8-1.1-0.8-1.9h2 + c0,0.3,0.1,0.6,0.3,0.7c0.2,0.3,0.7,0.4,1.3,0.4c0.4,0,0.7-0.1,0.9-0.2s0.3-0.3,0.3-0.5c0-0.2-0.1-0.4-0.3-0.5s-0.9-0.3-2-0.6 + c-0.8-0.2-1.4-0.5-1.8-0.8c-0.3-0.3-0.5-0.8-0.5-1.3c0-0.7,0.3-1.3,0.8-1.8c0.5-0.5,1.3-0.7,2.3-0.7 + C109.8,413.8,110.5,414,111.1,414.4z"/> - + - + c0.4-0.3,0.9-0.5,1.5-0.5c0.8,0,1.4,0.2,1.9,0.6c0.5,0.4,0.7,1.1,0.7,2v5h-2V445c0-0.4-0.1-0.7-0.2-0.9 + C71.4,443.7,71.1,443.5,70.5,443.5z"/> + + l-1.9-8.5c0,0.2,0,0.5,0,0.8c0,0.4,0,0.6,0,0.8V449.6z"/> - - - + + - - + - + c0.1-0.3,0.2-0.7,0.2-1.2v-4.1h2v7.5h-1.9V462.5z"/> + + c-0.2,0.1-0.3,0.3-0.3,0.5c0,0.2,0.1,0.4,0.3,0.5c0.2,0.1,0.9,0.3,2,0.5c0.8,0.2,1.4,0.5,1.7,0.8c0.4,0.4,0.6,0.8,0.6,1.4 + c0,0.7-0.3,1.3-0.8,1.8c-0.6,0.5-1.4,0.7-2.6,0.7c-1.2,0-2-0.2-2.6-0.7c-0.6-0.5-0.8-1.1-0.8-1.9h2c0,0.3,0.1,0.6,0.3,0.7 + c0.2,0.3,0.7,0.4,1.3,0.4c0.4,0,0.7-0.1,0.9-0.2s0.3-0.3,0.3-0.5c0-0.2-0.1-0.4-0.3-0.5s-0.9-0.3-2-0.6c-0.8-0.2-1.4-0.5-1.8-0.8 + c-0.3-0.3-0.5-0.8-0.5-1.3c0-0.7,0.3-1.3,0.8-1.8c0.5-0.5,1.3-0.7,2.3-0.7C96.9,455.9,97.7,456.1,98.3,456.5z"/> - + - - + s0.2,0.7,0.2,1.1c0,0.5-0.1,1-0.4,1.4c-0.2,0.5-0.6,0.8-1.2,1c0.5,0.2,0.8,0.5,1,0.8c0.2,0.3,0.3,0.9,0.3,1.6v0.7 + c0,0.5,0,0.8,0.1,0.9c0.1,0.3,0.2,0.5,0.4,0.6v0.3H76c-0.1-0.2-0.1-0.4-0.1-0.5c-0.1-0.3-0.1-0.6-0.1-0.9l0-0.9 + c0-0.6-0.1-1.1-0.4-1.3S74.8,473.7,74.2,473.7z M75.5,471.8c0.4-0.2,0.6-0.6,0.6-1.1c0-0.6-0.2-1-0.6-1.2c-0.2-0.1-0.6-0.2-1-0.2 + H72v2.7h2.4C74.9,472,75.2,471.9,75.5,471.8z"/> + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + c0.2-0.4,0.5-0.7,0.7-0.8c0.4-0.3,0.9-0.4,1.5-0.4c0.6,0,1,0.1,1.4,0.4c0.3,0.2,0.5,0.5,0.6,0.9c0.3-0.4,0.6-0.8,1-1 + c0.4-0.2,0.8-0.3,1.3-0.3c0.3,0,0.7,0.1,1,0.2c0.3,0.1,0.6,0.4,0.9,0.7c0.2,0.3,0.4,0.6,0.4,1c0,0.3,0.1,0.6,0.1,1.1l0,4.7h-2 + v-4.8c0-0.3,0-0.5-0.1-0.7c-0.2-0.3-0.5-0.5-1-0.5c-0.5,0-0.9,0.2-1.1,0.7c-0.1,0.2-0.2,0.5-0.2,0.9v4.4h-2v-4.4 + C101.3,472.7,101.3,472.4,101.2,472.2z"/> diff --git a/staff/assets/maps/copenhagen/level_00.svg b/staff/assets/maps/copenhagen/level_00.svg index 6fe03efe2..bb1376cbb 100644 --- a/staff/assets/maps/copenhagen/level_00.svg +++ b/staff/assets/maps/copenhagen/level_00.svg @@ -1,1696 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Copenhagen-Basement-EDIT \ No newline at end of file diff --git a/staff/assets/maps/copenhagen/level_02.svg b/staff/assets/maps/copenhagen/level_02.svg index c90f86fb7..87e61325c 100644 --- a/staff/assets/maps/copenhagen/level_02.svg +++ b/staff/assets/maps/copenhagen/level_02.svg @@ -152,7 +152,7 @@ c-3.5,0.4-6,3.5-5.8,7l0.2,3.6c0.1,2.7,2.5,4.8,5.2,4.6h0.1l0,0L119.4,215.7z"/> - + @@ -169,7 +169,7 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + - + - + - + - + - + - - + + - - + + + + + + + - - + + + + + + + + + + - - + + - + - + - - - + + + - - + + - + + C965.6,210,965.2,209.8,964.7,209.8z"/> - + + - + - - + c-0.5,0-0.8,0.1-1,0.2c-0.2,0.1-0.3,0.3-0.3,0.5c0,0.2,0.1,0.4,0.3,0.5c0.2,0.1,0.9,0.3,2.2,0.6c0.8,0.2,1.4,0.5,1.9,0.9 + c0.4,0.4,0.6,0.9,0.6,1.5c0,0.8-0.3,1.4-0.9,1.9c-0.6,0.5-1.5,0.7-2.7,0.7c-1.2,0-2.2-0.3-2.8-0.8s-0.9-1.2-0.9-2h2.1 + c0,0.4,0.1,0.6,0.3,0.8c0.3,0.3,0.7,0.4,1.4,0.4c0.4,0,0.7-0.1,1-0.2c0.2-0.1,0.4-0.3,0.4-0.5c0-0.2-0.1-0.4-0.3-0.5 + c-0.2-0.1-0.9-0.3-2.2-0.6c-0.9-0.2-1.5-0.5-1.9-0.8c-0.4-0.3-0.6-0.8-0.6-1.4c0-0.7,0.3-1.4,0.9-1.9s1.4-0.8,2.4-0.8 + C2014.3,485.5,2015.1,485.7,2015.7,486.1z"/> + + + c-0.1,0-0.3,0-0.5,0v-1.7l0.3,0c0.2,0,0.4,0,0.6,0c0.2,0,0.3-0.1,0.5-0.2c0.1-0.1,0.2-0.3,0.3-0.5c0.1-0.3,0.1-0.4,0.1-0.5 + l-2.9-8.3h2.3L2016.3,506.5z"/> diff --git a/staff/assets/maps/copenhagen/level_03.svg b/staff/assets/maps/copenhagen/level_03.svg index 5a1f3245a..0e446e5ca 100644 --- a/staff/assets/maps/copenhagen/level_03.svg +++ b/staff/assets/maps/copenhagen/level_03.svg @@ -1,5 +1,5 @@ - + diff --git a/staff/assets/maps/houston/level_22.svg b/staff/assets/maps/houston/level_22.svg index bd882050d..da2b54b32 100644 --- a/staff/assets/maps/houston/level_22.svg +++ b/staff/assets/maps/houston/level_22.svg @@ -1,7 +1,7 @@ + viewBox="0 0 1129.1 414.8" style="enable-background:new 0 0 1129.1 414.8;" xml:space="preserve"> - - - - - + + + + + - + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + c0.2-0.1,0.5-0.2,0.8-0.2c0.2,0,0.4,0,0.6,0.1s0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.3,0.2,0.6c0,0.1,0,0.4,0,0.6v2.8h-1.1v-2.8 + c0-0.2,0-0.3-0.1-0.4c-0.1-0.2-0.3-0.3-0.6-0.3s-0.5,0.1-0.7,0.4c-0.1,0.1-0.1,0.3-0.1,0.5v2.6h-1.2V379 + C760.8,379,760.8,378.9,760.7,378.7z"/> + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - + + - + - + - + - - - + + + - + - + - + - + s-0.4,0.1-0.5,0.2C714.4,96.9,714.3,97.1,714.3,97.3L714.3,97.3z"/> + - + diff --git a/staff/assets/maps/houston/level_23.svg b/staff/assets/maps/houston/level_23.svg index f4ed5d0c5..b0854bd6a 100644 --- a/staff/assets/maps/houston/level_23.svg +++ b/staff/assets/maps/houston/level_23.svg @@ -1,7 +1,7 @@ + viewBox="0 0 1129.1 414.8" style="enable-background:new 0 0 1129.1 414.8;" xml:space="preserve"> - - - - - + + + + + - + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - + + + - - + + - - - - - - - + + + + + + + - + - + - - - + + + + c0,1-0.8,1.9-1.8,2c-0.1,0-0.1,0-0.2,0c-0.6,0-1.1-0.2-1.5-0.7c-0.4-0.6-0.5-1.4-0.5-2.1c-0.1-0.8,0.1-1.6,0.5-2.3 + c0.3-0.5,0.9-0.8,1.5-0.7L383.7,331.3z M382.7,335.2c0,0.3,0.1,0.5,0.2,0.7s0.4,0.3,0.6,0.3s0.5-0.1,0.6-0.3 + c0.2-0.2,0.2-0.5,0.2-0.8s-0.1-0.5-0.2-0.7c-0.3-0.3-0.8-0.4-1.2-0.1c0,0,0,0-0.1,0.1C382.8,334.7,382.7,334.9,382.7,335.2 + L382.7,335.2z"/> - - - + + - + - + - + - + - - - + + + + + + + + + + + + + + + + + + + + - + - - - + c-0.1-0.1-0.3-0.2-0.5-0.2c-0.1,0-0.2,0-0.3,0c-0.1,0-0.1,0-0.2,0v-0.8c0.1,0,0.1,0,0.2,0s0.2,0,0.3,0 + C485.2,323.2,485.5,322.9,485.4,322.5C485.4,322.6,485.4,322.5,485.4,322.5L485.4,322.5z"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + + + - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/staff/assets/maps/lagos/level_06.svg b/staff/assets/maps/lagos/level_06.svg index a7a0950e6..41b92a457 100644 --- a/staff/assets/maps/lagos/level_06.svg +++ b/staff/assets/maps/lagos/level_06.svg @@ -16,21 +16,21 @@ .st10{fill:#9CAFB8;} .st11{fill:none;stroke:#7A8F94;stroke-width:1.393;stroke-linecap:round;stroke-miterlimit:10;} .st12{fill:none;stroke:#9CAFB8;stroke-width:2;stroke-miterlimit:10;} - .st13{fill:#4E9FB9;stroke:#4A90A0;stroke-width:0.291;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:3.9994;} + .st13{fill:#4E9FB9;stroke:#4A90A0;stroke-width:0.291;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:3.9996;} .st14{opacity:0.15;fill:#0D5577;enable-background:new ;} .st15{fill:#1E7E9B;} .st16{fill:#7DCFE2;stroke:#53C5F1;stroke-width:0.734;stroke-linecap:round;stroke-linejoin:round;} - .st17{fill:#4FAFC6;stroke:#5798A3;stroke-width:0.587;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:3.9994;} + .st17{fill:#4FAFC6;stroke:#5798A3;stroke-width:0.587;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:3.9996;} .st18{opacity:0.1;fill:#353C3D;enable-background:new ;} .st19{fill:#4FAFC6;stroke:#5798A3;stroke-width:0.587;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;} .st20{opacity:0.4;fill:#4196B1;enable-background:new ;} .st21{fill:none;stroke:#7A8F94;stroke-linecap:round;stroke-miterlimit:10;} .st22{opacity:5.000000e-02;fill:#030303;enable-background:new ;} .st23{fill:#F4F4F4;} - .st24{fill:#4E9FB9;stroke:#4A90A0;stroke-width:0.291;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0003;} - .st25{fill:#4FAFC6;stroke:#5798A3;stroke-width:0.587;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0003;} - .st26{fill:#4E9FB9;stroke:#4A90A0;stroke-width:0.291;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:3.9997;} - .st27{fill:#4FAFC6;stroke:#5798A3;stroke-width:0.587;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:3.9997;} + .st24{fill:#4E9FB9;stroke:#4A90A0;stroke-width:0.291;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0002;} + .st25{fill:#4FAFC6;stroke:#5798A3;stroke-width:0.587;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0002;} + .st26{fill:#4E9FB9;stroke:#4A90A0;stroke-width:0.291;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:3.9998;} + .st27{fill:#4FAFC6;stroke:#5798A3;stroke-width:0.587;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:3.9998;} .st28{opacity:0.15;fill:#010101;enable-background:new ;} .st29{fill:#596068;} .st30{fill:#7A8E93;stroke:#758589;stroke-width:0.256;stroke-miterlimit:10;} @@ -45,8 +45,8 @@ .st39{fill:#F8FAFB;} .st40{fill:#BBBEBF;} .st41{fill:none;stroke:#7A8F94;stroke-width:2;stroke-linecap:round;stroke-miterlimit:10;} - .st42{fill:#4E9FB9;stroke:#4A90A0;stroke-width:0.2911;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0005;} - .st43{fill:#4FAFC6;stroke:#5798A3;stroke-width:0.5872;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0005;} + .st42{fill:#4E9FB9;stroke:#4A90A0;stroke-width:0.2911;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0007;} + .st43{fill:#4FAFC6;stroke:#5798A3;stroke-width:0.5872;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0007;} .st44{opacity:0.65;fill:#575757;enable-background:new ;} .st45{fill:none;stroke:#EFEFF0;stroke-width:4.061;stroke-miterlimit:10;} .st46{fill:none;stroke:#ECF1F1;stroke-width:7;stroke-miterlimit:10;} @@ -585,7 +585,7 @@ - + @@ -594,19 +594,20 @@ c-0.2,0.7-0.6,1.4-1.1,1.9L454.6,154.9z"/> - - + + + - + - + - + - + @@ -615,7 +616,7 @@ - + @@ -625,13 +626,13 @@ - + - + - + @@ -667,11 +668,11 @@ c-1-1.2-0.9-3,0.3-4l1.2-1.1C618.7,227.3,620,227.4,620.8,228.3L620.8,228.3L620.8,228.3z"/> - + - + - + - + @@ -843,17 +844,15 @@ c-0.4,0.8-0.9,1.6-1.7,2.1L464.7,262.9z"/> - - - - + + + c0.9-0.5,2.5,0.7,3.6,2.6s1.3,3.9,0.4,4.5c-0.1,0-0.2,0.1-0.3,0.1C466.9,259.9,466.1,260.8,464.8,261.6z"/> - + - + @@ -863,14 +862,14 @@ - + - + - + @@ -948,7 +947,7 @@ - + @@ -958,18 +957,18 @@ - + - + - + - + @@ -978,14 +977,14 @@ L108.1,116.4z"/> - + - + - + @@ -1385,7 +1384,7 @@ - + @@ -1395,19 +1394,19 @@ - + - + - + - + @@ -1416,14 +1415,13 @@ c-0.3-0.7-0.4-1.5-0.2-2.2L6.1,105.2z"/> - - - + + - - + + @@ -1432,12 +1430,12 @@ c-0.7,0.3-1.5,0.4-2.2,0.2L21.3,98.6z"/> - - + + - + @@ -1448,11 +1446,10 @@ - - + - + @@ -1462,32 +1459,32 @@ - - + - + - - - - + c-0.1,0-0.4,0-0.9,0h-1v1.7C207.9,118.7,207.8,118.7,207.8,118.7z"/> + + + + - - + - - - + + + - + + c0-0.3,0-0.6-0.1-0.9c0-0.1-0.1-0.2-0.2-0.3c-0.1-0.1-0.2-0.1-0.4-0.1s-0.4,0.1-0.5,0.2c-0.2,0.1-0.3,0.3-0.3,0.4 + c-0.1,0.3-0.1,0.6-0.1,1v2.3H400v-4.7H399.8z"/> + c-0.3,0-0.6-0.1-0.9,0H804.3z"/> - + c0.1-0.1,0.2-0.2,0.3-0.4c0-0.2,0.1-0.4,0-0.6v-0.2H811.6z"/> + + c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.3,0.2,0.5c0.1,0.3,0.1,0.6,0.1,0.8L824.7,171.4z"/> - + - - - + c0.3,0,0.6-0.1,0.8-0.4s0.3-0.5,0.3-0.9c0-0.3-0.1-0.6-0.2-0.9S818,186,817.6,186z"/> - - - - - - - - diff --git a/staff/assets/maps/munich/level_1.svg b/staff/assets/maps/munich/level_1.svg index 83d1e68b8..223b19ea8 100644 --- a/staff/assets/maps/munich/level_1.svg +++ b/staff/assets/maps/munich/level_1.svg @@ -19,7 +19,7 @@ .st13{fill:none;stroke:#7A8F94;stroke-width:0.561;stroke-linecap:round;stroke-miterlimit:10;} .st14{fill:#7A8F94;} .st15{fill:none;stroke:#FFFFFF;stroke-width:4;stroke-miterlimit:10;} - .st16{fill:none;stroke:#FFFFFF;stroke-width:4.0007;stroke-miterlimit:10.0007;} + .st16{fill:none;stroke:#FFFFFF;stroke-width:4.0004;stroke-miterlimit:10.0004;} .st17{fill:none;stroke:#FFFFFF;stroke-width:6;stroke-miterlimit:10;} .st18{fill:#EBF1F2;} .st19{fill:#767E80;} @@ -72,6 +72,8 @@ c0,0-18.8,9.5-30.6,10.1s-26.3-8.2-26.3-8.2L513,966.2v-16.9l4.6-15.5l12.4-19.2L529.8,905.1z"/> + + @@ -89,60 +91,189 @@ "/> - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + C122.7,816.6,122.4,816.7,122,816.7z M122.4,815.9c0.1-0.1,0.2-0.2,0.2-0.4c0-0.2-0.1-0.3-0.2-0.4c-0.1-0.1-0.3-0.1-0.4-0.1h-0.7 + v1.1h0.7C122.1,816.1,122.3,816,122.4,815.9z"/> - + - - - - - + c-0.1,0.1-0.1,0.2-0.2,0.3c-0.1,0.1-0.3,0.2-0.6,0.2c-0.4,0-0.7-0.1-0.9-0.4c-0.2-0.3-0.3-0.6-0.3-1c0-0.4,0.1-0.8,0.3-1.1 + c0.2-0.3,0.5-0.4,0.9-0.4c0.1,0,0.3,0,0.4,0.1c0.2,0.1,0.3,0.2,0.4,0.4v-0.4h0.7v2.7c0,0.4-0.1,0.6-0.2,0.8 + c-0.2,0.3-0.6,0.5-1.2,0.5c-0.4,0-0.7-0.1-0.9-0.2c-0.2-0.1-0.4-0.4-0.4-0.6h0.8C135.4,818.5,135.4,818.6,135.5,818.6z + M135.4,817.1c0.1,0.2,0.3,0.4,0.5,0.4c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.2-0.3,0.2-0.6c0-0.3-0.1-0.5-0.2-0.6 + c-0.1-0.1-0.3-0.2-0.5-0.2c-0.3,0-0.4,0.1-0.5,0.4c-0.1,0.1-0.1,0.3-0.1,0.5C135.3,816.9,135.3,817,135.4,817.1z"/> + + + + + - - + c0,0.1,0,0.2,0,0.2s0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0,0,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.3,0.1-0.5,0.1c-0.3,0-0.5-0.1-0.6-0.2c-0.2-0.1-0.2-0.4-0.2-0.6c0-0.3,0.1-0.6,0.4-0.8c0.1-0.1,0.4-0.1,0.6-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.2c-0.1,0-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1 + c-0.1,0.1-0.1,0.2-0.1,0.3h-0.7C130.6,738,130.7,737.8,130.8,737.6z M131.4,739.6c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.4-0.1 + c0.1-0.1,0.2-0.3,0.2-0.5v-0.3c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.3,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C131.3,739.4,131.3,739.5,131.4,739.6z"/> + + + c0.1-0.1,0.3-0.2,0.5-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C141.2,738,141.1,738,141,738C141.1,738,141,738,141,738z"/> - + - - + + c-0.2,0-0.4,0.1-0.5,0.2c-0.1,0.2-0.2,0.4-0.2,0.7c0,0.3,0.1,0.5,0.2,0.7c0.1,0.2,0.3,0.2,0.5,0.2s0.4-0.1,0.5-0.2 + c0.1-0.2,0.2-0.4,0.2-0.7c0-0.3-0.1-0.5-0.2-0.7C130.8,743.2,130.6,743.1,130.4,743.1z"/> - - + + - - - + + + + c-0.2-0.1-0.3-0.3-0.4-0.4c-0.1-0.1-0.1-0.3-0.1-0.4c0-0.3,0.1-0.5,0.3-0.7c0.2-0.2,0.5-0.3,0.9-0.3c0.4,0,0.7,0.1,0.9,0.3 + c0.2,0.2,0.3,0.4,0.3,0.7c0,0.1,0,0.3-0.1,0.4c-0.1,0.1-0.2,0.3-0.4,0.4c0.2,0.1,0.3,0.2,0.4,0.4c0.1,0.2,0.1,0.4,0.1,0.6 + c0,0.3-0.1,0.6-0.4,0.8s-0.6,0.3-1,0.3S133.6,750.7,133.4,750.5z M133.8,749.7c0,0.2,0,0.3,0.1,0.4c0.1,0.1,0.2,0.2,0.4,0.2 + c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.1-0.2,0.1-0.4c0-0.2,0-0.3-0.1-0.4s-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1 + S133.8,749.5,133.8,749.7z M134,748.4c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.3-0.1c0.1-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.3-0.1-0.3 + c-0.1-0.1-0.2-0.1-0.3-0.1c-0.1,0-0.3,0-0.3,0.1s-0.1,0.2-0.1,0.3C133.9,748.2,133.9,748.3,134,748.4z"/> + C119.5,682.1,119.2,682.2,118.7,682.2z M119.1,681.4c0.1-0.1,0.2-0.2,0.2-0.4c0-0.2-0.1-0.3-0.2-0.4c-0.1-0.1-0.3-0.1-0.4-0.1 + h-0.7v1.1h0.7C118.9,681.6,119,681.5,119.1,681.4z"/> - - - + + + - - + c-0.1,0-0.2,0.1-0.4,0.1c-0.4,0-0.7-0.2-0.8-0.5c-0.1-0.2-0.1-0.4-0.1-0.7v-1.7h0.8v1.7c0,0.2,0,0.3,0.1,0.4 + c0.1,0.1,0.2,0.2,0.4,0.2c0.3,0,0.4-0.1,0.5-0.3c0-0.1,0.1-0.3,0.1-0.4v-1.5h0.7v2.8h-0.7V688.5z M127.9,685h0.7v0.6h-0.7V685z + M128.9,685h0.7v0.6h-0.7V685z"/> + - + + c0.1-0.1,0.3-0.2,0.5-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C141.2,686.8,141.1,686.8,141,686.8C141.1,686.8,141,686.8,141,686.8z"/> - - - - + + + + + C101.8,643.6,101.5,643.7,101,643.7z M101.4,642.9c0.1-0.1,0.2-0.2,0.2-0.4c0-0.2-0.1-0.3-0.2-0.4c-0.1-0.1-0.3-0.1-0.4-0.1h-0.7 + v1.1h0.7C101.1,643.1,101.3,643,101.4,642.9z"/> + c0.1,0.1,0.2,0.2,0.4,0.2c0.3,0,0.4-0.1,0.5-0.3c0-0.1,0.1-0.3,0.1-0.4v-1.5h0.7v2.8h-0.7V644.7z M118,641.2h0.7v0.6H118V641.2z + M119,641.2h0.7v0.6H119V641.2z"/> - + + c0.1,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.1,0.2,0.1,0.3S128.4,643.2,128.4,643.4z"/> - + + c0.1-0.1,0.3-0.2,0.5-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C136.9,643,136.8,643,136.7,643C136.7,643,136.7,643,136.7,643z"/> - + + c0.1-0.1,0.3-0.2,0.5-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C152.8,643,152.8,643,152.6,643C152.7,643,152.7,643,152.6,643z"/> + c0,0.1,0,0.2,0,0.2c0,0,0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0,0,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.3,0.1-0.5,0.1c-0.3,0-0.5-0.1-0.6-0.2c-0.2-0.1-0.2-0.4-0.2-0.6c0-0.3,0.1-0.6,0.4-0.8c0.1-0.1,0.4-0.1,0.6-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.2c-0.1,0-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1 + c-0.1,0.1-0.1,0.2-0.1,0.3h-0.7C153.2,642.9,153.3,642.7,153.4,642.6z M153.9,644.6c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.4-0.1 + c0.1-0.1,0.2-0.3,0.2-0.5v-0.3c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.3,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C153.8,644.4,153.9,644.5,153.9,644.6z"/> + c0.2-0.1,0.3-0.2,0.6-0.2c0.3,0,0.5,0.1,0.7,0.2s0.3,0.4,0.3,0.8v1.9H158v-1.7c0-0.1,0-0.3-0.1-0.3 + C157.9,642.9,157.8,642.8,157.6,642.8z"/> + c-0.2-0.3-0.3-0.6-0.3-1c0-0.5,0.1-0.9,0.3-1.1c0.2-0.3,0.5-0.4,0.9-0.4c0.2,0,0.3,0,0.5,0.1s0.2,0.2,0.3,0.3v-1.3H162.1z + M160.1,643.7c0,0.3,0.1,0.5,0.2,0.6c0.1,0.2,0.3,0.2,0.5,0.2c0.2,0,0.4-0.1,0.5-0.2c0.1-0.2,0.2-0.4,0.2-0.6 + c0-0.3-0.1-0.6-0.3-0.7c-0.1-0.1-0.2-0.1-0.4-0.1c-0.2,0-0.4,0.1-0.5,0.2C160.1,643.3,160.1,643.5,160.1,643.7z"/> - - - - - - + + + + + - + c0.3-0.4,0.8-0.6,1.4-0.6c0.5,0,0.9,0.1,1.2,0.4c0.3,0.2,0.5,0.6,0.5,0.9h-0.8c-0.1-0.3-0.2-0.4-0.4-0.5c-0.1-0.1-0.3-0.1-0.4-0.1 + c-0.3,0-0.6,0.1-0.8,0.3s-0.3,0.6-0.3,1c0,0.5,0.1,0.8,0.3,1c0.2,0.2,0.5,0.3,0.7,0.3c0.3,0,0.5-0.1,0.7-0.2s0.3-0.4,0.3-0.6h-0.9 + v-0.6h1.6v2.1h-0.5l-0.1-0.5C130.3,650.1,130.2,650.2,130,650.3z"/> + + c-0.1,0.1-0.1,0.2-0.2,0.3c-0.1,0.1-0.3,0.2-0.6,0.2c-0.4,0-0.7-0.1-0.9-0.4c-0.2-0.3-0.3-0.6-0.3-1c0-0.4,0.1-0.8,0.3-1.1 + c0.2-0.3,0.5-0.4,0.9-0.4c0.1,0,0.3,0,0.4,0.1c0.2,0.1,0.3,0.2,0.4,0.4v-0.4h0.7v2.7c0,0.4-0.1,0.6-0.2,0.8 + c-0.2,0.3-0.6,0.5-1.2,0.5c-0.4,0-0.7-0.1-0.9-0.2c-0.2-0.1-0.4-0.4-0.4-0.6h0.8C135.7,650.8,135.8,650.9,135.8,650.9z + M135.7,649.5c0.1,0.2,0.3,0.4,0.5,0.4c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.2-0.3,0.2-0.6c0-0.3-0.1-0.5-0.2-0.6 + c-0.1-0.1-0.3-0.2-0.5-0.2c-0.3,0-0.4,0.1-0.5,0.4c-0.1,0.1-0.1,0.3-0.1,0.5C135.6,649.2,135.6,649.3,135.7,649.5z"/> - + c-0.1,0.1-0.1,0.2-0.2,0.3c-0.1,0.1-0.3,0.2-0.6,0.2c-0.4,0-0.7-0.1-0.9-0.4c-0.2-0.3-0.3-0.6-0.3-1c0-0.4,0.1-0.8,0.3-1.1 + c0.2-0.3,0.5-0.4,0.9-0.4c0.1,0,0.3,0,0.4,0.1c0.2,0.1,0.3,0.2,0.4,0.4v-0.4h0.7v2.7c0,0.4-0.1,0.6-0.2,0.8 + c-0.2,0.3-0.6,0.5-1.2,0.5c-0.4,0-0.7-0.1-0.9-0.2c-0.2-0.1-0.4-0.4-0.4-0.6h0.8C139,650.8,139,650.9,139.1,650.9z M138.9,649.5 + c0.1,0.2,0.3,0.4,0.5,0.4c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.2-0.3,0.2-0.6c0-0.3-0.1-0.5-0.2-0.6c-0.1-0.1-0.3-0.2-0.5-0.2 + c-0.3,0-0.4,0.1-0.5,0.4c-0.1,0.1-0.1,0.3-0.1,0.5C138.9,649.2,138.9,649.3,138.9,649.5z"/> + - + - + - - + + - - - - + c0.1-0.2,0.2-0.3,0.3-0.4c0.1-0.1,0.3-0.2,0.5-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C164.7,648.3,164.6,648.3,164.5,648.3 + C164.5,648.3,164.5,648.3,164.5,648.3z"/> + + + + + C223.6,637.1,223.3,637.2,222.9,637.2z M223.2,636.4c0.1-0.1,0.2-0.2,0.2-0.4c0-0.2-0.1-0.3-0.2-0.4c-0.1-0.1-0.3-0.1-0.4-0.1 + h-0.7v1.1h0.7C223,636.6,223.1,636.5,223.2,636.4z"/> - + + c0-0.6,0.2-1.1,0.5-1.5c0.3-0.4,0.8-0.6,1.4-0.6c0.5,0,0.9,0.1,1.2,0.4c0.3,0.2,0.5,0.6,0.5,0.9h-0.8c-0.1-0.3-0.2-0.4-0.4-0.5 + c-0.1-0.1-0.3-0.1-0.4-0.1c-0.3,0-0.6,0.1-0.8,0.3s-0.3,0.6-0.3,1c0,0.5,0.1,0.8,0.3,1c0.2,0.2,0.5,0.3,0.7,0.3 + c0.3,0,0.5-0.1,0.7-0.2s0.3-0.4,0.3-0.6H238v-0.6h1.6v2.1H239l-0.1-0.5C238.8,638.3,238.7,638.4,238.5,638.5z"/> - + - - - + c-0.2,0-0.4,0.1-0.5,0.2c-0.1,0.2-0.2,0.4-0.2,0.7c0,0.3,0.1,0.5,0.2,0.7c0.1,0.2,0.3,0.2,0.5,0.2s0.4-0.1,0.5-0.2 + c0.1-0.2,0.2-0.4,0.2-0.7c0-0.3-0.1-0.5-0.2-0.7C244,636.4,243.8,636.3,243.6,636.3z"/> + + + + c0,0.1,0,0.2,0,0.2c0,0,0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0,0,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.3,0.1-0.5,0.1c-0.3,0-0.5-0.1-0.6-0.2c-0.2-0.1-0.2-0.4-0.2-0.6c0-0.3,0.1-0.6,0.4-0.8c0.1-0.1,0.4-0.1,0.6-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.2c-0.1,0-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1 + c-0.1,0.1-0.1,0.2-0.1,0.3h-0.7C256.1,636.4,256.2,636.2,256.3,636.1z M256.9,638.1c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.4-0.1 + c0.1-0.1,0.2-0.3,0.2-0.5v-0.3c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.3,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C256.8,637.9,256.8,638,256.9,638.1z"/> - + @@ -468,12 +613,12 @@ - - + @@ -481,260 +626,267 @@ - - - + c0.2-0.2,0.3-0.6,0.3-1c0-0.4-0.1-0.8-0.3-1c-0.2-0.2-0.4-0.4-0.8-0.4c-0.3,0-0.6,0.1-0.8,0.4s-0.3,0.6-0.3,1c0,0.4,0.1,0.8,0.3,1 + s0.4,0.3,0.8,0.3C234.4,648.6,234.7,648.5,234.9,648.3z"/> + + + - + - - - - + + + + + c0,0.1,0,0.2,0,0.2c0,0,0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0,0,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.3,0.1-0.5,0.1c-0.3,0-0.5-0.1-0.6-0.2c-0.2-0.1-0.2-0.4-0.2-0.6c0-0.3,0.1-0.6,0.4-0.8c0.1-0.1,0.4-0.1,0.6-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.2c-0.1,0-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1 + c-0.1,0.1-0.1,0.2-0.1,0.3h-0.7C239.3,652.4,239.4,652.2,239.5,652z M240.1,654c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.4-0.1 + c0.1-0.1,0.2-0.3,0.2-0.5v-0.3c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.3,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C240,653.8,240,653.9,240.1,654z"/> - + c0.1-0.2,0.2-0.3,0.3-0.4c0.1-0.1,0.3-0.2,0.5-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C246,652.4,246,652.4,245.9,652.4 + C245.9,652.4,245.9,652.4,245.9,652.4z"/> + - - - - - - - - - + + + + + + + + + + C226.8,607.7,226.4,607.8,226,607.8z M226.4,607c0.1-0.1,0.2-0.2,0.2-0.4c0-0.2-0.1-0.3-0.2-0.4c-0.1-0.1-0.3-0.1-0.4-0.1h-0.7 + v1.1h0.7C226.1,607.1,226.3,607.1,226.4,607z"/> - + - + - + - - + - + - - - - - + + + + + + c0-0.7,0.2-1.4,0.7-2.1c0.3-0.5,0.5-0.8,0.7-0.9h-1.9l0-0.7h2.7v0.6C246.7,611.4,246.5,611.6,246.3,611.9z"/> + C108.7,605.2,108.4,605.3,108,605.3z M108.3,604.5c0.1-0.1,0.2-0.2,0.2-0.4c0-0.2-0.1-0.3-0.2-0.4c-0.1-0.1-0.3-0.1-0.4-0.1h-0.7 + v1.1h0.7C108.1,604.6,108.2,604.6,108.3,604.5z"/> - + - + - + - + - - + + c-0.2,0-0.4,0.1-0.5,0.2c-0.1,0.2-0.2,0.4-0.2,0.7c0,0.3,0.1,0.5,0.2,0.7c0.1,0.2,0.3,0.2,0.5,0.2s0.4-0.1,0.5-0.2 + c0.1-0.2,0.2-0.4,0.2-0.7c0-0.3-0.1-0.5-0.2-0.7C147.1,604.4,146.9,604.4,146.7,604.4z"/> - + h-0.4v-0.5h0.4v-0.2c0-0.3,0.1-0.5,0.2-0.6c0.1-0.2,0.4-0.3,0.8-0.3c0,0,0.1,0,0.1,0C152,602.8,152,602.8,152.1,602.8z"/> + - + - + - - + - - - + - - + + - + c-0.2-0.3-0.3-0.6-0.3-1c0-0.5,0.1-0.9,0.3-1.1c0.2-0.3,0.5-0.4,0.9-0.4c0.2,0,0.3,0,0.5,0.1s0.2,0.2,0.3,0.3v-1.3H140.2z + M138.2,610.6c0,0.3,0.1,0.5,0.2,0.6c0.1,0.2,0.3,0.2,0.5,0.2c0.2,0,0.4-0.1,0.5-0.2c0.1-0.2,0.2-0.4,0.2-0.6 + c0-0.3-0.1-0.6-0.3-0.7c-0.1-0.1-0.2-0.1-0.4-0.1c-0.2,0-0.4,0.1-0.5,0.2C138.2,610.1,138.2,610.3,138.2,610.6z"/> + + c-0.2-0.3-0.3-0.6-0.3-1.1v-0.1h0.8v0.1c0,0.3,0,0.5,0.1,0.6c0.1,0.1,0.2,0.2,0.4,0.2c0.2,0,0.3-0.1,0.4-0.2 + C149.9,611.1,149.9,611,149.9,610.8z"/> - + + c-0.2-0.3-0.3-0.6-0.3-1c0-0.5,0.1-0.9,0.3-1.1c0.2-0.3,0.5-0.4,0.9-0.4c0.2,0,0.3,0,0.5,0.1s0.2,0.2,0.3,0.3v-1.3H163.5z + M161.5,610.6c0,0.3,0.1,0.5,0.2,0.6c0.1,0.2,0.3,0.2,0.5,0.2c0.2,0,0.4-0.1,0.5-0.2c0.1-0.2,0.2-0.4,0.2-0.6 + c0-0.3-0.1-0.6-0.3-0.7c-0.1-0.1-0.2-0.1-0.4-0.1c-0.2,0-0.4,0.1-0.5,0.2C161.5,610.1,161.5,610.3,161.5,610.6z"/> - - - - - + c0,0.1,0,0.2,0,0.2c0,0,0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0,0,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.3,0.1-0.5,0.1c-0.3,0-0.5-0.1-0.6-0.2c-0.2-0.1-0.2-0.4-0.2-0.6c0-0.3,0.1-0.6,0.4-0.8c0.1-0.1,0.4-0.1,0.6-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.2c-0.1,0-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1 + c-0.1,0.1-0.1,0.2-0.1,0.3h-0.7C164.1,609.8,164.1,609.6,164.3,609.4z M164.8,611.4c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.4-0.1 + c0.1-0.1,0.2-0.3,0.2-0.5v-0.3c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.3,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C164.7,611.3,164.7,611.4,164.8,611.4z"/> + + + + + + C98.4,569.8,98.1,569.9,97.7,569.9z M98.1,569.1c0.1-0.1,0.2-0.2,0.2-0.4c0-0.2-0.1-0.3-0.2-0.4c-0.1-0.1-0.3-0.1-0.4-0.1h-0.7 + v1.1h0.7C97.8,569.3,97.9,569.2,98.1,569.1z"/> - + - - + + - + - + + c0,0-0.1,0-0.2,0v-0.6l0.1,0c0.1,0,0.1,0,0.2,0s0.1,0,0.2-0.1c0,0,0.1-0.1,0.1-0.2s0.1-0.2,0-0.2l-1-3h0.8L131.3,570.6z"/> - + c0,0.2,0,0.3,0,0.4c0,0.1,0.1,0.2,0.1,0.2v0.1h-0.9c0-0.1,0-0.2-0.1-0.2c0-0.1,0-0.2,0-0.3l0-0.4c0-0.2,0-0.4-0.1-0.5 + C137.7,569.8,137.6,569.8,137.3,569.8z M137.8,569.1c0.2-0.1,0.2-0.2,0.2-0.4c0-0.2-0.1-0.4-0.2-0.5c-0.1,0-0.2-0.1-0.4-0.1h-0.9 + v1h0.9C137.6,569.2,137.7,569.1,137.8,569.1z"/> - + + c-0.1,0-0.2,0.1-0.4,0.1c-0.4,0-0.7-0.2-0.8-0.5c-0.1-0.2-0.1-0.4-0.1-0.7v-1.7h0.8v1.7c0,0.2,0,0.3,0.1,0.4 + c0.1,0.1,0.2,0.2,0.4,0.2c0.3,0,0.4-0.1,0.5-0.3c0-0.1,0.1-0.3,0.1-0.4v-1.5h0.7v2.8h-0.7V570.9z"/> - - + - + - - - - + c0.1-0.1,0.3-0.2,0.5-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C168.6,569.2,168.5,569.2,168.4,569.2 + C168.4,569.2,168.4,569.2,168.4,569.2z"/> + + + + + h-0.8l-0.7-3.2c0,0.1,0,0.2,0,0.3c0,0.1,0,0.2,0,0.3V310.1z"/> - - + + c0,0.1-0.1,0.3-0.1,0.5c0,0.2,0,0.4,0.1,0.5c0.1,0.2,0.3,0.4,0.5,0.4c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.2,0.1-0.4h0.8 + c0,0.2-0.1,0.4-0.2,0.6c-0.2,0.3-0.6,0.5-1,0.5s-0.8-0.1-1-0.4c-0.2-0.3-0.3-0.6-0.3-1.1c0-0.5,0.1-0.9,0.4-1.1 + c0.2-0.3,0.6-0.4,1-0.4c0.4,0,0.6,0.1,0.9,0.2S129.2,307.9,129.2,308.3z"/> - + + c0.1-0.1,0.3-0.2,0.5-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C137.2,308,137.2,308,137.1,308C137.1,308,137.1,308,137.1,308z"/> - - + + - + - - - - + + + + - + - - + - - - + c0,0.1,0,0.2,0,0.2c0,0,0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0,0,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.3,0.1-0.5,0.1c-0.3,0-0.5-0.1-0.6-0.2c-0.2-0.1-0.2-0.4-0.2-0.6c0-0.3,0.1-0.6,0.4-0.8c0.1-0.1,0.4-0.1,0.6-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.2c-0.1,0-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1 + c-0.1,0.1-0.1,0.2-0.1,0.3h-0.7C306.3,436.3,306.4,436.1,306.5,435.9z M306.7,434.5h0.7v0.6h-0.7V434.5z M307.1,437.9 + c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.2-0.3,0.2-0.5V437c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.2,0.1l-0.2,0 + c-0.2,0-0.3,0.1-0.3,0.1c-0.1,0.1-0.2,0.2-0.2,0.3C307,437.7,307,437.8,307.1,437.9z M307.8,434.5h0.7v0.6h-0.7V434.5z"/> + + + + c0.1-0.2,0.2-0.3,0.3-0.4c0.1-0.1,0.3-0.2,0.5-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C318.9,436.3,318.9,436.3,318.8,436.3 + C318.8,436.3,318.8,436.3,318.8,436.3z"/> - + c0.1,0,0.3-0.1,0.3-0.2c0.1-0.1,0.1-0.2,0.1-0.4h-0.4v-0.8h0.8v0.7C319.9,438.4,319.9,438.6,319.8,438.7z"/> + - - - - + + + + c0.1,0,0.3,0,0.3-0.1c0.1,0,0.1-0.1,0.1-0.2c0-0.1,0-0.1-0.1-0.2s-0.3-0.1-0.8-0.2c-0.3-0.1-0.5-0.2-0.7-0.3 + c-0.1-0.1-0.2-0.3-0.2-0.5c0-0.3,0.1-0.5,0.3-0.7s0.5-0.3,0.9-0.3C312.7,440.8,313,440.9,313.3,441z"/> - + c0,0.1-0.1,0.3-0.1,0.5c0,0.2,0,0.4,0.1,0.5c0.1,0.2,0.3,0.4,0.5,0.4c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.2,0.1-0.4h0.8 + c0,0.2-0.1,0.4-0.2,0.6c-0.2,0.3-0.6,0.5-1,0.5s-0.8-0.1-1-0.4c-0.2-0.3-0.3-0.6-0.3-1.1c0-0.5,0.1-0.9,0.4-1.1 + c0.2-0.3,0.6-0.4,1-0.4c0.4,0,0.6,0.1,0.9,0.2S316.7,441.5,316.7,441.9z"/> + + c0,0.1,0,0.2,0,0.2c0,0,0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0,0,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.3,0.1-0.5,0.1c-0.3,0-0.5-0.1-0.6-0.2c-0.2-0.1-0.2-0.4-0.2-0.6c0-0.3,0.1-0.6,0.4-0.8c0.1-0.1,0.4-0.1,0.6-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.2c-0.1,0-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1 + c-0.1,0.1-0.1,0.2-0.1,0.3h-0.7C301.9,446.9,302,446.7,302.1,446.5z M302.7,448.5c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.4-0.1 + c0.1-0.1,0.2-0.3,0.2-0.5v-0.3c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.3,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C302.6,448.4,302.6,448.5,302.7,448.5z"/> - - + + + c0,0.1,0,0.2,0,0.2c0,0,0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0,0,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.3,0.1-0.5,0.1c-0.3,0-0.5-0.1-0.6-0.2c-0.2-0.1-0.2-0.4-0.2-0.6c0-0.3,0.1-0.6,0.4-0.8c0.1-0.1,0.4-0.1,0.6-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.2c-0.1,0-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1 + c-0.1,0.1-0.1,0.2-0.1,0.3h-0.7C313.4,446.9,313.5,446.7,313.6,446.5z M314.2,448.5c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.4-0.1 + c0.1-0.1,0.2-0.3,0.2-0.5v-0.3c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.3,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C314.1,448.4,314.1,448.5,314.2,448.5z"/> @@ -966,38 +1125,41 @@ C321.4,446.8,321.3,446.8,321.1,446.8z"/> - + - + c0,0.1,0,0.2,0,0.2c0,0,0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0,0,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.3,0.1-0.5,0.1c-0.3,0-0.5-0.1-0.6-0.2c-0.2-0.1-0.2-0.4-0.2-0.6c0-0.3,0.1-0.6,0.4-0.8c0.1-0.1,0.4-0.1,0.6-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.2c-0.1,0-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1 + c-0.1,0.1-0.1,0.2-0.1,0.3h-0.7C308.1,452.2,308.2,452,308.3,451.8z M308.9,453.8c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.4-0.1 + c0.1-0.1,0.2-0.3,0.2-0.5V453c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.3,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C308.8,453.7,308.8,453.8,308.9,453.8z"/> + c0.1-0.2,0.2-0.3,0.3-0.4c0.1-0.1,0.3-0.2,0.5-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C312.8,452.2,312.7,452.2,312.6,452.2 + C312.6,452.2,312.6,452.2,312.6,452.2z"/> - + - - + + @@ -1005,244 +1167,256 @@ - + + c0.1-0.1,0.3-0.2,0.5-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C369.8,436,369.8,436,369.6,436C369.7,436,369.7,436,369.6,436z"/> - + + c0.1-0.1,0.3-0.2,0.5-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C378.1,436,378,436,377.9,436C378,436,377.9,436,377.9,436z"/> - - + c0,0.1-0.1,0.3-0.1,0.5c0,0.2,0,0.4,0.1,0.5c0.1,0.2,0.3,0.4,0.5,0.4c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.2,0.1-0.4h0.8 + c0,0.2-0.1,0.4-0.2,0.6c-0.2,0.3-0.6,0.5-1,0.5s-0.8-0.1-1-0.4c-0.2-0.3-0.3-0.6-0.3-1.1c0-0.5,0.1-0.9,0.4-1.1 + c0.2-0.3,0.6-0.4,1-0.4c0.4,0,0.6,0.1,0.9,0.2S360.4,441.2,360.5,441.6z"/> + - + + c0,0.1,0,0.2,0,0.2c0,0,0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0,0,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.3,0.1-0.5,0.1c-0.3,0-0.5-0.1-0.6-0.2c-0.2-0.1-0.2-0.4-0.2-0.6c0-0.3,0.1-0.6,0.4-0.8c0.1-0.1,0.4-0.1,0.6-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.2c-0.1,0-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1 + c-0.1,0.1-0.1,0.2-0.1,0.3h-0.7C372.1,441.3,372.2,441.1,372.3,440.9z M372.9,442.9c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.4-0.1 + c0.1-0.1,0.2-0.3,0.2-0.5V442c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.3,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C372.8,442.7,372.8,442.8,372.9,442.9z"/> - - + c0,0.1-0.1,0.3-0.1,0.5c0,0.2,0,0.4,0.1,0.5c0.1,0.2,0.3,0.4,0.5,0.4c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.2,0.1-0.4h0.8 + c0,0.2-0.1,0.4-0.2,0.6c-0.2,0.3-0.6,0.5-1,0.5s-0.8-0.1-1-0.4c-0.2-0.3-0.3-0.6-0.3-1.1c0-0.5,0.1-0.9,0.4-1.1 + c0.2-0.3,0.6-0.4,1-0.4c0.4,0,0.6,0.1,0.9,0.2S377.6,441.2,377.6,441.6z"/> + + - + - - + + c-0.1,0.1-0.2,0.3-0.2,0.5c0,0.2,0.1,0.4,0.2,0.5s0.2,0.2,0.4,0.2c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.1-0.3,0.1-0.5 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.2-0.2-0.4-0.2C371,446.9,370.9,446.9,370.8,447z"/> - + c0.1-0.1,0.3-0.2,0.5-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C446.4,436,446.4,436,446.3,436C446.3,436,446.3,436,446.3,436z"/> - - - + c0,0.1,0,0.2,0,0.2c0,0,0.1,0.1,0.1,0.1v0.1H443c0-0.1,0-0.1,0-0.2c0,0,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.3,0.1-0.5,0.1c-0.3,0-0.5-0.1-0.6-0.2c-0.2-0.1-0.2-0.4-0.2-0.6c0-0.3,0.1-0.6,0.4-0.8c0.1-0.1,0.4-0.1,0.6-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.2s-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.1,0.2-0.1,0.3 + h-0.7C441.2,441.3,441.3,441.1,441.4,440.9z M442,442.9c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.4-0.1s0.2-0.3,0.2-0.5V442 + c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.3,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C441.9,442.7,441.9,442.8,442,442.9z"/> + + - - + + - - + - - - - + + - + - - + - + - + - - + + - + - - - - + c0.1-0.2,0.2-0.3,0.3-0.4c0.1-0.1,0.3-0.2,0.5-0.2c0,0,0,0,0,0s0,0,0.1,0v0.8C690.4,741.8,690.4,741.8,690.3,741.8 + C690.3,741.8,690.3,741.8,690.3,741.8z"/> + + + + - + + c-0.1,0.1-0.1,0.2-0.2,0.3c-0.1,0.1-0.3,0.2-0.6,0.2c-0.4,0-0.7-0.1-0.9-0.4c-0.2-0.3-0.3-0.6-0.3-1c0-0.4,0.1-0.8,0.3-1.1 + c0.2-0.3,0.5-0.4,0.9-0.4c0.1,0,0.3,0,0.4,0.1c0.2,0.1,0.3,0.2,0.4,0.4v-0.4h0.7v2.7c0,0.4-0.1,0.6-0.2,0.8 + c-0.2,0.3-0.6,0.5-1.2,0.5c-0.4,0-0.7-0.1-0.9-0.2s-0.4-0.4-0.4-0.6h0.8C687.9,815.1,687.9,815.2,688,815.2z M687.8,813.8 + c0.1,0.2,0.3,0.4,0.5,0.4c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.2-0.3,0.2-0.6c0-0.3-0.1-0.5-0.2-0.6c-0.1-0.1-0.3-0.2-0.5-0.2 + c-0.3,0-0.4,0.1-0.5,0.4c-0.1,0.1-0.1,0.3-0.1,0.5C687.7,813.5,687.8,813.7,687.8,813.8z"/> @@ -1251,137 +1425,149 @@ + c0.3,0,0.4-0.1,0.5-0.3c0-0.1,0.1-0.3,0.1-0.4v-1.5h0.7v2.8h-0.7V819.7z"/> - + c0.1-0.1,0.3-0.1,0.5-0.1c0.4,0,0.7,0.1,0.9,0.4c0.2,0.3,0.3,0.6,0.3,1c0,0.4-0.1,0.8-0.3,1.1C686,820,685.7,820.1,685.3,820.1z + M685.7,818.7c0-0.2,0-0.4-0.1-0.5c-0.1-0.2-0.3-0.4-0.5-0.4c-0.3,0-0.5,0.1-0.6,0.4c-0.1,0.1-0.1,0.3-0.1,0.5 + c0,0.2,0.1,0.4,0.2,0.6s0.3,0.2,0.5,0.2c0.2,0,0.3-0.1,0.4-0.2C685.7,819.1,685.7,818.9,685.7,818.7z"/> + - - - - - - - + + + + + + + - + - + + c-0.2,0-0.4,0.1-0.5,0.2c-0.1,0.2-0.2,0.4-0.2,0.7c0,0.3,0.1,0.5,0.2,0.7c0.1,0.2,0.3,0.2,0.5,0.2c0.2,0,0.4-0.1,0.5-0.2 + c0.1-0.2,0.2-0.4,0.2-0.7c0-0.3-0.1-0.5-0.2-0.7C566.5,769.7,566.3,769.6,566.1,769.6z"/> + c0.1-0.1,0.3-0.2,0.5-0.2c0,0,0,0,0,0s0,0,0.1,0v0.8C569.6,769.8,569.6,769.8,569.5,769.8C569.5,769.8,569.5,769.8,569.5,769.8z" + /> + C574,770.5,573.7,770.5,573.3,770.5z M573.7,769.8c0.1-0.1,0.2-0.2,0.2-0.4c0-0.2-0.1-0.3-0.2-0.4c-0.1-0.1-0.3-0.1-0.4-0.1h-0.7 + v1.1h0.7C573.4,769.9,573.6,769.8,573.7,769.8z"/> + c0,0.1,0,0.2,0,0.2c0,0,0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0,0,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.3,0.1-0.5,0.1c-0.3,0-0.5-0.1-0.6-0.2c-0.2-0.1-0.2-0.4-0.2-0.6c0-0.3,0.1-0.6,0.4-0.8c0.1-0.1,0.4-0.1,0.6-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.2s-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.1,0.2-0.1,0.3 + H575C575.1,769.8,575.1,769.6,575.3,769.4z M575.8,771.4c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.4-0.1s0.2-0.3,0.2-0.5v-0.3 + c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.3,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C575.7,771.2,575.7,771.3,575.8,771.4z"/> - - - + - - - + c0.1-0.2,0.2-0.3,0.3-0.4c0.1-0.1,0.3-0.2,0.5-0.2c0,0,0,0,0,0s0,0,0.1,0v0.8C589.7,769.8,589.7,769.8,589.6,769.8 + C589.6,769.8,589.6,769.8,589.6,769.8z"/> + + + + c-0.3,0-0.6-0.1-0.8-0.3c-0.2-0.2-0.3-0.5-0.3-0.9c0-0.4,0.1-0.7,0.3-1s0.5-0.4,0.9-0.4c0.6,0,1,0.3,1.2,0.8 + c0.1,0.3,0.2,0.7,0.2,1.1c0,0.5-0.1,0.8-0.2,1.1C572.5,777.1,572.1,777.3,571.5,777.3z M571.2,774.2c-0.1,0.1-0.2,0.3-0.2,0.6 + c0,0.2,0,0.4,0.1,0.5c0.1,0.1,0.2,0.2,0.4,0.2c0.1,0,0.2,0,0.3-0.1c0.2-0.1,0.3-0.3,0.3-0.6c0-0.2,0-0.4-0.1-0.5 + c-0.1-0.1-0.2-0.2-0.4-0.2C571.4,774.1,571.3,774.1,571.2,774.2z"/> - + - - + + + s-0.2,0.3-0.2,0.6v1.5h-0.7V943h0.7v1.4c0.1-0.2,0.2-0.3,0.4-0.3c0.1-0.1,0.3-0.1,0.4-0.1c0.2,0,0.3,0,0.5,0.1s0.3,0.2,0.4,0.3 + c0.1,0.1,0.1,0.2,0.1,0.3C473.6,944.7,473.6,944.9,473.6,945.2z"/> - - - - + + + + @@ -1389,521 +1575,76 @@ + c0,0.1,0,0.2,0,0.2c0,0,0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0,0,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.3,0.1-0.5,0.1c-0.3,0-0.5-0.1-0.6-0.2c-0.2-0.1-0.2-0.4-0.2-0.6c0-0.3,0.1-0.6,0.4-0.8c0.1-0.1,0.4-0.1,0.6-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.2c-0.1,0-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1 + c-0.1,0.1-0.1,0.2-0.1,0.3h-0.7C436.6,1053,436.7,1052.8,436.8,1052.7z M437.3,1054.7c0.1,0.1,0.2,0.1,0.3,0.1 + c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.2-0.3,0.2-0.5v-0.3c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.3,0.1 + c-0.1,0.1-0.2,0.2-0.2,0.3C437.2,1054.5,437.3,1054.6,437.3,1054.7z"/> - + c0,0.1-0.1,0.3-0.1,0.5c0,0.2,0,0.4,0.1,0.5c0.1,0.2,0.3,0.4,0.5,0.4c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.2,0.1-0.4h0.8 + c0,0.2-0.1,0.4-0.2,0.6c-0.2,0.3-0.6,0.5-1,0.5s-0.8-0.1-1-0.4c-0.2-0.3-0.3-0.6-0.3-1.1c0-0.5,0.1-0.9,0.4-1.1 + c0.2-0.3,0.6-0.4,1-0.4c0.4,0,0.6,0.1,0.9,0.2S442.1,1053,442.1,1053.4z"/> + - + c0.1,0.2,0.3,0.4,0.5,0.4c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.2-0.3,0.2-0.6c0-0.3-0.1-0.5-0.2-0.6c-0.1-0.1-0.3-0.2-0.5-0.2 + c-0.3,0-0.4,0.1-0.5,0.4c-0.1,0.1-0.1,0.3-0.1,0.5C451.2,1054,451.2,1054.1,451.2,1054.2z"/> + + c0.1-0.2,0.2-0.3,0.3-0.4c0.1-0.1,0.3-0.2,0.5-0.2c0,0,0,0,0,0s0,0,0.1,0v0.8C458.4,1053.1,458.3,1053.1,458.2,1053.1 + C458.2,1053.1,458.2,1053.1,458.2,1053.1z"/> - - - + c0,0.1,0.1,0.2,0.1,0.2v0.1h-0.9c0-0.1,0-0.2-0.1-0.2c0-0.1,0-0.2,0-0.3l0-0.4c0-0.2,0-0.4-0.1-0.5 + C440.9,1059.1,440.8,1059,440.5,1059z M441,1058.3c0.2-0.1,0.2-0.2,0.2-0.4c0-0.2-0.1-0.4-0.2-0.5c-0.1,0-0.2-0.1-0.4-0.1h-0.9v1 + h0.9C440.8,1058.4,440.9,1058.4,441,1058.3z"/> + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -2082,114 +1823,6 @@ c2,0.1,3.5,1.6,3.5,3.6l0.1,2c0,1.5-1.2,2.8-2.7,2.8L135.8,1034.8z"/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -2305,6 +1938,60 @@ c0.1-2,1.6-3.5,3.6-3.5l2-0.1c1.5,0,2.8,1.2,2.8,2.7L312.3,549.3z"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2546,6 +2233,100 @@ c-2-0.1-3.5-1.6-3.5-3.6l-0.1-2c0-1.5,1.2-2.8,2.7-2.8L556.9,646.7z"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2847,6 +2628,33 @@ c-2-0.1-3.5-1.6-3.5-3.6l-0.1-2c0-1.5,1.2-2.8,2.7-2.8L264.8,279.4z"/> + + + + + + + + + + + + + + + + + + + @@ -2983,25 +2791,25 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -3092,7 +2900,7 @@ - + - - - - - - + - - - - + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H469.7z + M468.9,975.6c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H468.9z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6H474c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H476z + M473.8,973.1h0.9l0.5,0.8h-0.6L473.8,973.1z M475.3,975.6c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2 + c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H475.3z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C481.5,975.1,481.4,975.1,481.3,975.1 + C481.3,975.1,481.3,975.1,481.3,975.1z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H484.6z + M483.8,975.6c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H483.8z"/> - + - + + c-0.1,0.1-0.1,0.3-0.1,0.6c0,0.2,0,0.4,0.1,0.5c0.1,0.3,0.3,0.4,0.5,0.4c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.2,0.1-0.4h0.8 + c0,0.2-0.1,0.5-0.3,0.7c-0.2,0.3-0.6,0.5-1.1,0.5s-0.8-0.1-1.1-0.4c-0.2-0.3-0.3-0.7-0.3-1.1c0-0.5,0.1-0.9,0.4-1.2 + c0.3-0.3,0.6-0.4,1-0.4c0.4,0,0.7,0.1,0.9,0.3S459.5,980.7,459.5,981.1z"/> + c-0.1,0.1-0.2,0.3-0.2,0.6v1.6H460V979h0.8v1.4c0.1-0.2,0.2-0.3,0.4-0.4s0.3-0.1,0.5-0.1c0.2,0,0.4,0,0.5,0.1 + c0.2,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.1,0.2,0.2,0.3S462.8,981,462.8,981.3z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H469.6z + M468.8,981.3c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H468.8z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H477.8z + M477,981.3c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H477z"/> - + + c0,0.3,0.1,0.5,0.2,0.6c0.1,0.2,0.3,0.3,0.5,0.3c0.2,0,0.4-0.1,0.5-0.2C482.6,982.1,482.6,981.9,482.6,981.6z"/> - + c0,0.1,0,0.2,0,0.2c0,0,0.1,0.1,0.1,0.1v0.1h-0.9c0-0.1,0-0.1,0-0.2c0-0.1,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.4,0.1-0.6,0.1c-0.3,0-0.5-0.1-0.7-0.2c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.4,0.1-0.6,0.4-0.8c0.2-0.1,0.4-0.2,0.7-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.3c-0.1,0-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1 + c-0.1,0.1-0.1,0.2-0.1,0.3h-0.8C483.9,980.8,484,980.6,484.1,980.4z M484.7,982.5c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.5-0.1 + c0.1-0.1,0.2-0.3,0.2-0.5v-0.3c0,0-0.1,0.1-0.2,0.1c-0.1,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.4,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C484.6,982.4,484.6,982.4,484.7,982.5z"/> + + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H493.2z + M492.5,981.3c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H492.5z"/> - + + c0.1-0.2,0.1-0.6,0.1-1.1c0-0.5,0-0.8-0.1-1.1c-0.1-0.2-0.2-0.3-0.5-0.3s-0.4,0.1-0.5,0.3c-0.1,0.2-0.1,0.6-0.1,1.1 + c0,0.5,0,0.8,0.1,1.1c0.1,0.2,0.2,0.4,0.5,0.4S470,988.1,470.1,987.8z"/> - + c0.1-0.2,0.1-0.6,0.1-1.1c0-0.5,0-0.8-0.1-1.1c-0.1-0.2-0.2-0.3-0.5-0.3s-0.4,0.1-0.5,0.3c-0.1,0.2-0.1,0.6-0.1,1.1 + c0,0.5,0,0.8,0.1,1.1c0.1,0.2,0.2,0.4,0.5,0.4S473.1,988.1,473.2,987.8z"/> + + c0.1,0.3,0.3,0.6,0.5,1.1H367z"/> + c-0.1,0.1-0.2,0.2-0.3,0.2c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.2-0.1,0.5-0.2,0.7c-0.1,0.1-0.2,0.2-0.3,0.3 + c-0.1,0.1-0.3,0.2-0.5,0.2S370.2,974.8,370,974.8z M370.4,972.2c0.1-0.1,0.2-0.2,0.2-0.4c0-0.2-0.1-0.3-0.2-0.4 + c-0.1,0-0.3-0.1-0.5-0.1h-0.9v0.9h1C370.1,972.3,370.3,972.3,370.4,972.2z M370,973h-1v1.1h1c0.2,0,0.3,0,0.4-0.1 + c0.2-0.1,0.3-0.3,0.3-0.5c0-0.2-0.1-0.4-0.3-0.4C370.3,973,370.1,973,370,973z"/> - + - + + c-0.1,0.1-0.1,0.3-0.1,0.6c0,0.2,0,0.4,0.1,0.5c0.1,0.3,0.3,0.4,0.5,0.4c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.2,0.1-0.4h0.8 + c0,0.2-0.1,0.5-0.3,0.7c-0.2,0.3-0.6,0.5-1.1,0.5s-0.8-0.1-1.1-0.4c-0.2-0.3-0.3-0.7-0.3-1.1c0-0.5,0.1-0.9,0.4-1.2 + c0.3-0.3,0.6-0.4,1-0.4c0.4,0,0.7,0.1,0.9,0.3S392.7,972.4,392.7,972.9z"/> + c-0.1,0.1-0.2,0.3-0.2,0.6v1.6h-0.8v-4.1h0.8v1.4c0.1-0.2,0.2-0.3,0.4-0.4s0.3-0.1,0.5-0.1c0.2,0,0.4,0,0.5,0.1 + c0.2,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.1,0.2,0.2,0.3S396,972.8,396,973z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H400.9z + M400.1,973c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H400.1z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C403.2,972.5,403.1,972.5,403,972.5C403.1,972.5,403,972.5,403,972.5z"/> + c-0.1,0.1-0.2,0.2-0.3,0.2c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.2-0.1,0.5-0.2,0.7c-0.1,0.1-0.2,0.2-0.3,0.3 + c-0.1,0.1-0.3,0.2-0.5,0.2S373.2,980.5,373,980.5z M373.4,977.9c0.1-0.1,0.2-0.2,0.2-0.4c0-0.2-0.1-0.3-0.2-0.4 + c-0.1,0-0.3-0.1-0.5-0.1h-0.9v0.9h1C373.1,978,373.3,978,373.4,977.9z M373,978.7h-1v1.1h1c0.2,0,0.3,0,0.4-0.1 + c0.2-0.1,0.3-0.3,0.3-0.5c0-0.2-0.1-0.4-0.3-0.4C373.3,978.7,373.1,978.7,373,978.7z"/> - + + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H385.6z + M384.8,978.7c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H384.8z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C387.9,978.2,387.8,978.2,387.7,978.2 + C387.8,978.2,387.7,978.2,387.7,978.2z"/> + c-0.1,0.1-0.1,0.3-0.1,0.6c0,0.2,0,0.4,0.1,0.5c0.1,0.3,0.3,0.4,0.5,0.4c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.2,0.1-0.4h0.8 + c0,0.2-0.1,0.5-0.3,0.7c-0.2,0.3-0.6,0.5-1.1,0.5s-0.8-0.1-1.1-0.4c-0.2-0.3-0.3-0.7-0.3-1.1c0-0.5,0.1-0.9,0.4-1.2 + c0.3-0.3,0.6-0.4,1-0.4c0.4,0,0.7,0.1,0.9,0.3S391,978.1,391,978.5z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H397.3z + M396.5,978.7c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H396.5z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C399.6,978.2,399.5,978.2,399.4,978.2 + C399.5,978.2,399.4,978.2,399.4,978.2z"/> + c0.1-0.2,0.1-0.6,0.1-1.1c0-0.5,0-0.8-0.1-1.1c-0.1-0.2-0.2-0.3-0.5-0.3s-0.4,0.1-0.5,0.3c-0.1,0.2-0.1,0.6-0.1,1.1 + c0,0.5,0,0.8,0.1,1.1c0.1,0.2,0.2,0.4,0.5,0.4S384,985.5,384.1,985.2z"/> + c0.1-0.2,0.1-0.6,0.1-1.1c0-0.5,0-0.8-0.1-1.1c-0.1-0.2-0.2-0.3-0.5-0.3s-0.4,0.1-0.5,0.3c-0.1,0.2-0.1,0.6-0.1,1.1 + c0,0.5,0,0.8,0.1,1.1c0.1,0.2,0.2,0.4,0.5,0.4S387.2,985.5,387.2,985.2z"/> + c-0.2,0.1-0.2,0.3-0.2,0.6c0,0.2,0.1,0.4,0.2,0.5c0.1,0.1,0.3,0.2,0.4,0.2c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.2-0.3,0.2-0.5 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2C389.8,984.2,389.7,984.2,389.6,984.3z"/> + c-0.1,0.1-0.2,0.2-0.3,0.2c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.2-0.1,0.5-0.2,0.7c-0.1,0.1-0.2,0.2-0.3,0.3 + c-0.1,0.1-0.3,0.2-0.5,0.2S307.3,862,307.1,862z M307.5,859.4c0.1-0.1,0.2-0.2,0.2-0.4c0-0.2-0.1-0.3-0.2-0.4 + c-0.1,0-0.3-0.1-0.5-0.1h-0.9v0.9h1C307.2,859.5,307.4,859.5,307.5,859.4z M307.1,860.2h-1v1.1h1c0.2,0,0.3,0,0.4-0.1 + c0.2-0.1,0.3-0.3,0.3-0.5c0-0.2-0.1-0.4-0.3-0.4C307.4,860.2,307.3,860.2,307.1,860.2z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H311.9z + M311.1,860.2c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H311.1z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C314.1,859.7,314.1,859.7,313.9,859.7C314,859.7,314,859.7,313.9,859.7z" + /> - + c0,0.1,0,0.2,0,0.2c0,0,0.1,0.1,0.1,0.1v0.1h-0.9c0-0.1,0-0.1,0-0.2c0-0.1,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.4,0.1-0.6,0.1c-0.3,0-0.5-0.1-0.7-0.2c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.4,0.1-0.6,0.4-0.8c0.2-0.1,0.4-0.2,0.7-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.3c-0.1,0-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1 + c-0.1,0.1-0.1,0.2-0.1,0.3H318C318,859.7,318.1,859.5,318.2,859.3z M318.8,861.4c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.5-0.1 + c0.1-0.1,0.2-0.3,0.2-0.5v-0.3c0,0-0.1,0.1-0.2,0.1c-0.1,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.4,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C318.7,861.3,318.7,861.4,318.8,861.4z"/> + + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H327.3z + M326.5,860.2c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H326.5z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C329.6,859.7,329.5,859.7,329.4,859.7 + C329.5,859.7,329.4,859.7,329.4,859.7z"/> - + - + + c0,0.1,0,0.2,0,0.2c0,0,0.1,0.1,0.1,0.1v0.1H317c0-0.1,0-0.1,0-0.2c0-0.1,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.4,0.1-0.6,0.1c-0.3,0-0.5-0.1-0.7-0.2c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.4,0.1-0.6,0.4-0.8c0.2-0.1,0.4-0.2,0.7-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.3c-0.1,0-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1 + c-0.1,0.1-0.1,0.2-0.1,0.3h-0.8C315.2,865.4,315.2,865.2,315.4,865z M316,867.1c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.5-0.1 + c0.1-0.1,0.2-0.3,0.2-0.5v-0.3c0,0-0.1,0.1-0.2,0.1c-0.1,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.4,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C315.9,867,315.9,867,316,867.1z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H324.2z + M323.4,865.9c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H323.4z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C326.4,865.4,326.4,865.4,326.3,865.4 + C326.3,865.4,326.3,865.4,326.3,865.4z"/> + s0.9,0.2,1.1,0.5c0.2,0.4,0.3,0.9,0.3,1.5c0,0.7-0.1,1.2-0.3,1.5C314.2,873.3,313.8,873.5,313.3,873.5z M313.8,872.4 + c0.1-0.2,0.1-0.6,0.1-1.1c0-0.5,0-0.8-0.1-1.1c-0.1-0.2-0.2-0.3-0.5-0.3s-0.4,0.1-0.5,0.3c-0.1,0.2-0.1,0.6-0.1,1.1 + c0,0.5,0,0.8,0.1,1.1c0.1,0.2,0.2,0.4,0.5,0.4S313.7,872.7,313.8,872.4z"/> + c0.1-0.2,0.1-0.6,0.1-1.1c0-0.5,0-0.8-0.1-1.1c-0.1-0.2-0.2-0.3-0.5-0.3s-0.4,0.1-0.5,0.3c-0.1,0.2-0.1,0.6-0.1,1.1 + c0,0.5,0,0.8,0.1,1.1c0.1,0.2,0.2,0.4,0.5,0.4S316.9,872.7,316.9,872.4z"/> + c0-0.7,0.3-1.5,0.7-2.2c0.3-0.5,0.5-0.8,0.7-1h-2l0-0.7h2.8v0.6C320.9,870.1,320.8,870.3,320.6,870.6z"/> + c0.1,0.3,0.3,0.6,0.5,1.1H111.9z"/> + c-0.1,0.1-0.2,0.2-0.3,0.2c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.2-0.1,0.5-0.2,0.7c-0.1,0.1-0.2,0.2-0.3,0.3 + c-0.1,0.1-0.3,0.2-0.5,0.2S115,721.1,114.8,721.1z M115.2,718.5c0.1-0.1,0.2-0.2,0.2-0.4c0-0.2-0.1-0.3-0.2-0.4 + c-0.1,0-0.3-0.1-0.5-0.1h-0.9v0.9h1C115,718.6,115.1,718.6,115.2,718.5z M114.8,719.3h-1v1.1h1c0.2,0,0.3,0,0.4-0.1 + c0.2-0.1,0.3-0.3,0.3-0.5c0-0.2-0.1-0.4-0.3-0.4C115.1,719.3,115,719.3,114.8,719.3z"/> @@ -372,332 +375,345 @@ - - + c0.1,0.2,0.2,0.2,0.4,0.2c0.3,0,0.5-0.1,0.6-0.3c0.1-0.1,0.1-0.3,0.1-0.5v-1.6h0.8v3h-0.8V720.7z"/> + + + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H144.3z + M143.5,719.3c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H143.5z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C146.6,718.8,146.5,718.8,146.4,718.8 + C146.4,718.8,146.4,718.8,146.4,718.8z"/> - - + + s-0.4-0.7-0.4-1.1c0-0.4,0.1-0.8,0.4-1.1c0.3-0.3,0.6-0.5,1.2-0.5C120.8,723.6,121.2,723.8,121.5,724.1z M120.3,724.3 + c-0.2,0-0.4,0.1-0.5,0.2c-0.1,0.2-0.2,0.4-0.2,0.7c0,0.3,0.1,0.5,0.2,0.7c0.1,0.2,0.3,0.2,0.5,0.2c0.2,0,0.4-0.1,0.5-0.2 + c0.1-0.2,0.2-0.4,0.2-0.7c0-0.3-0.1-0.5-0.2-0.7C120.7,724.4,120.5,724.3,120.3,724.3z"/> + v-0.6l0.1,0c0.1,0,0.2,0,0.2,0c0.1,0,0.1,0,0.2-0.1c0,0,0.1-0.1,0.1-0.2c0-0.1,0.1-0.2,0-0.2l-1.1-3.2h0.9L123.6,726z"/> + c0,0.1,0,0.2,0,0.2c0,0,0.1,0.1,0.1,0.1v0.1h-0.9c0-0.1,0-0.1,0-0.2c0-0.1,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.4,0.1-0.6,0.1c-0.3,0-0.5-0.1-0.7-0.2c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.4,0.1-0.6,0.4-0.8c0.2-0.1,0.4-0.2,0.7-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.3c-0.1,0-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1 + c-0.1,0.1-0.1,0.2-0.1,0.3h-0.8C125.5,724.4,125.6,724.2,125.7,724.1z M126.3,726.2c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.5-0.1 + c0.1-0.1,0.2-0.3,0.2-0.5v-0.3c0,0-0.1,0.1-0.2,0.1c-0.1,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.4,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C126.2,726,126.2,726.1,126.3,726.2z"/> + c0.4-0.3,0.8-0.5,1.3-0.5c0.5,0,1,0.2,1.3,0.5c0.4,0.4,0.6,0.9,0.6,1.6c0,0.4,0,0.7-0.1,0.9c-0.1,0.2-0.2,0.4-0.3,0.6l0.5,0.4 + l-0.4,0.5l-0.5-0.5C133.4,726.7,133.2,726.7,133.1,726.8z M133,726l-0.4-0.4l0.4-0.5l0.4,0.4c0.1-0.1,0.1-0.2,0.1-0.3 + c0-0.2,0.1-0.3,0.1-0.5c0-0.5-0.1-0.8-0.3-1.1c-0.2-0.2-0.5-0.4-0.8-0.4c-0.3,0-0.6,0.1-0.8,0.4s-0.3,0.6-0.3,1.1 + c0,0.6,0.1,1,0.4,1.2c0.2,0.2,0.4,0.2,0.7,0.2c0.1,0,0.2,0,0.3,0C132.8,726.1,132.9,726.1,133,726z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C141.8,724.5,141.7,724.5,141.6,724.5 + C141.7,724.5,141.6,724.5,141.6,724.5z"/> + s-0.4-0.7-0.4-1.1c0-0.4,0.1-0.8,0.4-1.1c0.3-0.3,0.6-0.5,1.2-0.5C144.2,723.6,144.6,723.8,144.8,724.1z M143.6,724.3 + c-0.2,0-0.4,0.1-0.5,0.2c-0.1,0.2-0.2,0.4-0.2,0.7c0,0.3,0.1,0.5,0.2,0.7c0.1,0.2,0.3,0.2,0.5,0.2c0.2,0,0.4-0.1,0.5-0.2 + c0.1-0.2,0.2-0.4,0.2-0.7c0-0.3-0.1-0.5-0.2-0.7C144.1,724.4,143.9,724.3,143.6,724.3z"/> + c0.1,0.3,0.3,0.4,0.6,0.4c0.2,0,0.3-0.1,0.5-0.2c0.1-0.1,0.2-0.4,0.2-0.7c0-0.3-0.1-0.5-0.2-0.7c-0.1-0.2-0.3-0.2-0.5-0.2 + c-0.3,0-0.5,0.1-0.6,0.4c-0.1,0.1-0.1,0.3-0.1,0.5C146.4,725.4,146.4,725.6,146.5,725.7z"/> + c0-0.1,0-0.1,0-0.2h0.7V732.4z"/> + c0.1-0.2,0.1-0.6,0.1-1.1c0-0.5,0-0.8-0.1-1.1c-0.1-0.2-0.2-0.3-0.5-0.3s-0.4,0.1-0.5,0.3c-0.1,0.2-0.1,0.6-0.1,1.1 + c0,0.5,0,0.8,0.1,1.1c0.1,0.2,0.2,0.4,0.5,0.4S131.3,731.8,131.3,731.5z"/> + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2C133.9,730.5,133.8,730.5,133.7,730.6z"/> + c0.1,0.3,0.3,0.6,0.5,1.1H115.7z"/> + c-0.1,0.1-0.2,0.2-0.3,0.2c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.2-0.1,0.5-0.2,0.7c-0.1,0.1-0.2,0.2-0.3,0.3 + c-0.1,0.1-0.3,0.2-0.5,0.2S118.9,635.6,118.7,635.6z M119.1,633c0.1-0.1,0.2-0.2,0.2-0.4c0-0.2-0.1-0.3-0.2-0.4 + c-0.1,0-0.3-0.1-0.5-0.1h-0.9v0.9h1C118.8,633.1,119,633.1,119.1,633z M118.6,633.8h-1v1.1h1c0.2,0,0.3,0,0.4-0.1 + c0.2-0.1,0.3-0.3,0.3-0.5c0-0.2-0.1-0.4-0.3-0.4C119,633.8,118.8,633.8,118.6,633.8z"/> - + + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H140.5z + M139.7,633.8c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H139.7z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C142.7,633.3,142.7,633.3,142.5,633.3 + C142.6,633.3,142.6,633.3,142.5,633.3z"/> - + - + + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H138.6z + M137.8,639.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H137.8z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C140.8,639,140.8,639,140.7,639C140.7,639,140.7,639,140.7,639z"/> + c0-0.1,0-0.1,0-0.2h0.7V647z"/> + c0.1-0.2,0.1-0.6,0.1-1.1c0-0.5,0-0.8-0.1-1.1c-0.1-0.2-0.2-0.3-0.5-0.3s-0.4,0.1-0.5,0.3c-0.1,0.2-0.1,0.6-0.1,1.1 + c0,0.5,0,0.8,0.1,1.1c0.1,0.2,0.2,0.4,0.5,0.4S131.3,646.3,131.3,646z"/> - - - - + c-0.2-0.1-0.3-0.3-0.4-0.4c-0.1-0.2-0.1-0.3-0.1-0.4c0-0.3,0.1-0.5,0.3-0.7s0.5-0.3,0.9-0.3s0.7,0.1,0.9,0.3 + c0.2,0.2,0.3,0.5,0.3,0.7c0,0.1,0,0.3-0.1,0.4c-0.1,0.2-0.2,0.3-0.4,0.4c0.2,0.1,0.3,0.3,0.4,0.4c0.1,0.2,0.1,0.4,0.1,0.6 + c0,0.3-0.1,0.6-0.4,0.9c-0.2,0.2-0.6,0.4-1,0.4S133.2,646.9,133,646.7z M133.4,645.8c0,0.2,0.1,0.4,0.2,0.5s0.2,0.2,0.4,0.2 + c0.2,0,0.3-0.1,0.4-0.2s0.2-0.3,0.2-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.2-0.2-0.4-0.2s-0.3,0.1-0.4,0.2 + C133.5,645.4,133.4,645.6,133.4,645.8z M133.6,644.4c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.2,0.1-0.4 + c0-0.2,0-0.3-0.1-0.4c-0.1-0.1-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.1,0.2-0.1,0.4 + C133.5,644.2,133.5,644.3,133.6,644.4z"/> + + + + - + - + + v-0.6l0.1,0c0.1,0,0.2,0,0.2,0c0.1,0,0.1,0,0.2-0.1c0,0,0.1-0.1,0.1-0.2c0-0.1,0.1-0.2,0-0.2l-1.1-3.2h0.9L139.5,572z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6H142c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H144z + M143.2,571c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H143.2z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C146.2,570.5,146.2,570.5,146.1,570.5 + C146.1,570.5,146.1,570.5,146.1,570.5z"/> - - + + s-0.4-0.7-0.4-1.1c0-0.4,0.1-0.8,0.4-1.1c0.3-0.3,0.6-0.5,1.2-0.5C122.1,575.4,122.5,575.5,122.7,575.8z M121.6,576 + c-0.2,0-0.4,0.1-0.5,0.2c-0.1,0.2-0.2,0.4-0.2,0.7c0,0.3,0.1,0.5,0.2,0.7c0.1,0.2,0.3,0.2,0.5,0.2c0.2,0,0.4-0.1,0.5-0.2 + c0.1-0.2,0.2-0.4,0.2-0.7c0-0.3-0.1-0.5-0.2-0.7C122,576.1,121.8,576,121.6,576z"/> - + + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H131.6z + M130.8,576.7c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H130.8z"/> - + + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C140.8,576.2,140.8,576.2,140.6,576.2 + C140.7,576.2,140.7,576.2,140.6,576.2z"/> + c0.1,0.2,0.2,0.2,0.4,0.2c0.3,0,0.5-0.1,0.6-0.3c0.1-0.1,0.1-0.3,0.1-0.5v-1.6h0.8v3h-0.8V578.1z"/> + c0.3-0.3,0.6-0.4,1-0.4c0.4,0,0.7,0.1,0.9,0.3S147.4,576.1,147.4,576.5z"/> + c0-0.1,0-0.1,0-0.2h0.7V584.2z"/> + c0-0.1,0-0.1,0-0.2h0.7V584.2z"/> + c0.1-0.2,0.1-0.6,0.1-1.1c0-0.5,0-0.8-0.1-1.1c-0.1-0.2-0.2-0.3-0.5-0.3s-0.4,0.1-0.5,0.3c-0.1,0.2-0.1,0.6-0.1,1.1 + c0,0.5,0,0.8,0.1,1.1c0.1,0.2,0.2,0.4,0.5,0.4S134.3,583.5,134.3,583.2z"/> - - + h-0.7V523.3z M135.7,525c-0.2,0-0.4,0.1-0.5,0.2c-0.1,0.2-0.2,0.4-0.2,0.7c0,0.3,0.1,0.5,0.2,0.7c0.1,0.2,0.3,0.2,0.5,0.2 + c0.2,0,0.4-0.1,0.5-0.2c0.1-0.2,0.2-0.4,0.2-0.7c0-0.3-0.1-0.5-0.2-0.7C136.1,525.1,135.9,525,135.7,525z M135.9,523.3h0.7v0.7 + h-0.7V523.3z"/> + s-0.4-0.7-0.4-1.1c0-0.5,0.1-0.9,0.4-1.2c0.2-0.3,0.6-0.4,1-0.4c0.2,0,0.3,0,0.5,0.1c0.1,0.1,0.3,0.2,0.3,0.3v-1.4H140.6z + M138.4,526c0,0.3,0.1,0.5,0.2,0.7c0.1,0.2,0.3,0.3,0.5,0.3s0.4-0.1,0.5-0.2c0.1-0.2,0.2-0.4,0.2-0.6c0-0.4-0.1-0.6-0.3-0.8 + c-0.1-0.1-0.2-0.1-0.4-0.1c-0.2,0-0.4,0.1-0.5,0.3C138.5,525.5,138.4,525.7,138.4,526z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H143.9z + M143.1,525.6c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H143.1z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C146.1,525.2,146.1,525.2,146,525.2C146,525.2,146,525.2,146,525.2z"/> - + + c-0.1,0.1-0.2,0.3-0.2,0.6v1.6h-0.8v-4.1h0.8v1.4c0.1-0.2,0.2-0.3,0.4-0.4s0.3-0.1,0.5-0.1c0.2,0,0.4,0,0.5,0.1 + c0.2,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.1,0.2,0.2,0.3S129.2,531.1,129.2,531.4z"/> - - + + c0.2-0.1,0.3-0.1,0.5-0.1c0.1,0,0.3,0,0.4,0.1c0.1,0.1,0.2,0.1,0.4,0.3c0.1,0.1,0.1,0.2,0.2,0.4c0,0.1,0,0.2,0,0.4l0,1.9h-0.8 + v-1.9c0-0.1,0-0.2-0.1-0.3c-0.1-0.1-0.2-0.2-0.4-0.2c-0.2,0-0.4,0.1-0.5,0.3c0,0.1-0.1,0.2-0.1,0.3v1.8h-0.8v-1.8 + C138.4,531.2,138.3,531,138.3,530.9z"/> - + c0,0.1,0,0.2,0,0.2c0,0,0.1,0.1,0.1,0.1v0.1H125c0-0.1,0-0.1,0-0.2c0-0.1,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.4,0.1-0.6,0.1c-0.3,0-0.5-0.1-0.7-0.2c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.4,0.1-0.6,0.4-0.8c0.2-0.1,0.4-0.2,0.7-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.3c-0.1,0-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1 + c-0.1,0.1-0.1,0.2-0.1,0.3h-0.8C123.1,536.5,123.2,536.3,123.3,536.1z M123.9,538.2c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.5-0.1 + c0.1-0.1,0.2-0.3,0.2-0.5v-0.3c0,0-0.1,0.1-0.2,0.1c-0.1,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.4,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C123.8,538.1,123.8,538.2,123.9,538.2z"/> + + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C135,536.5,134.9,536.5,134.8,536.5C134.9,536.5,134.8,536.5,134.8,536.5z + "/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H138.1z + M137.3,537c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H137.3z"/> - + + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H144.7z + M143.9,537c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H143.9z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C147,536.5,146.9,536.5,146.8,536.5C146.9,536.5,146.8,536.5,146.8,536.5z + "/> + c0-0.1,0-0.1,0-0.2h0.7V544.5z"/> - + c0-0.1,0-0.1,0-0.2h0.7V544.5z"/> + - @@ -708,187 +724,192 @@ c-0.1,0.1-0.2,0.2-0.2,0.3c-0.2,0.1-0.4,0.2-0.6,0.2c-0.4,0-0.7-0.1-0.9-0.4c-0.2-0.3-0.3-0.6-0.3-1.1c0-0.4,0.1-0.8,0.3-1.1 s0.5-0.5,1-0.5c0.2,0,0.3,0,0.4,0.1c0.2,0.1,0.3,0.2,0.5,0.4v-0.4h0.8v2.9c0,0.4-0.1,0.7-0.2,0.9c-0.2,0.3-0.7,0.5-1.3,0.5 c-0.4,0-0.7-0.1-0.9-0.2c-0.2-0.2-0.4-0.4-0.4-0.7h0.9C240.4,527.9,240.5,528,240.5,528z M240.4,526.4c0.1,0.3,0.3,0.4,0.6,0.4 - c0.2,0,0.3-0.1,0.5-0.2c0.1-0.1,0.2-0.4,0.2-0.7s-0.1-0.5-0.2-0.7c-0.1-0.2-0.3-0.2-0.5-0.2c-0.3,0-0.5,0.1-0.6,0.4 + c0.2,0,0.3-0.1,0.5-0.2c0.1-0.1,0.2-0.4,0.2-0.7c0-0.3-0.1-0.5-0.2-0.7c-0.1-0.2-0.3-0.2-0.5-0.2c-0.3,0-0.5,0.1-0.6,0.4 c-0.1,0.1-0.1,0.3-0.1,0.5C240.3,526.1,240.3,526.3,240.4,526.4z"/> - + + c-0.1,0.1-0.2,0.3-0.2,0.6v1.6h-0.8v-4.1h0.8v1.4c0.1-0.2,0.2-0.3,0.4-0.4s0.3-0.1,0.5-0.1c0.2,0,0.4,0,0.5,0.1 + c0.2,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.1,0.2,0.2,0.3S260,525.4,260,525.7z"/> - + s-0.4-0.7-0.4-1.1c0-0.4,0.1-0.8,0.4-1.1c0.3-0.3,0.6-0.5,1.2-0.5C262.7,524.3,263,524.5,263.3,524.8z M262.1,525 + c-0.2,0-0.4,0.1-0.5,0.2c-0.1,0.2-0.2,0.4-0.2,0.7c0,0.3,0.1,0.5,0.2,0.7c0.1,0.2,0.3,0.2,0.5,0.2c0.2,0,0.4-0.1,0.5-0.2 + c0.1-0.2,0.2-0.4,0.2-0.7c0-0.3-0.1-0.5-0.2-0.7C262.5,525.1,262.4,525,262.1,525z"/> + + c0,0.1,0,0.2,0,0.2c0,0,0.1,0.1,0.1,0.1v0.1h-0.9c0-0.1,0-0.1,0-0.2c0-0.1,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.4,0.1-0.6,0.1c-0.3,0-0.5-0.1-0.7-0.2c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.4,0.1-0.6,0.4-0.8c0.2-0.1,0.4-0.2,0.7-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.3c-0.1,0-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1 + c-0.1,0.1-0.1,0.2-0.1,0.3H267C267,525.2,267.1,524.9,267.2,524.8z M267.8,526.9c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.5-0.1 + c0.1-0.1,0.2-0.3,0.2-0.5V526c0,0-0.1,0.1-0.2,0.1c-0.1,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.4,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C267.7,526.7,267.7,526.8,267.8,526.9z"/> - + - + - + c0.1,0.2,0.2,0.2,0.4,0.2c0.3,0,0.5-0.1,0.6-0.3c0.1-0.1,0.1-0.3,0.1-0.5v-1.6h0.8v3h-0.8V532.7z"/> + - + c0.3-0.3,0.6-0.4,1-0.4c0.4,0,0.7,0.1,0.9,0.3S250.7,530.8,250.8,531.2z"/> + + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H258.9z + M258.2,531.3c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H258.2z"/> + l-0.4-0.1c-0.4-0.1-0.7-0.2-0.9-0.3c-0.3-0.2-0.4-0.5-0.4-0.9c0-0.4,0.1-0.7,0.4-0.9c0.3-0.2,0.7-0.4,1.2-0.4 + c0.4,0,0.8,0.1,1.1,0.3c0.3,0.2,0.5,0.6,0.5,1h-0.8c0-0.2-0.1-0.4-0.3-0.5c-0.1-0.1-0.3-0.1-0.5-0.1c-0.2,0-0.4,0-0.5,0.1 + c-0.1,0.1-0.2,0.2-0.2,0.4c0,0.1,0.1,0.3,0.2,0.3c0.1,0,0.3,0.1,0.5,0.2l0.7,0.2c0.3,0.1,0.5,0.2,0.7,0.3c0.2,0.2,0.4,0.5,0.4,0.8 + c0,0.4-0.1,0.7-0.4,0.9c-0.3,0.2-0.7,0.4-1.2,0.4c-0.5,0-1-0.1-1.3-0.4c-0.3-0.2-0.5-0.6-0.5-1h0.8c0,0.2,0.1,0.3,0.2,0.4 + C228.8,538.1,229.1,538.2,229.4,538.2z"/> - + c0.3-0.3,0.6-0.4,1-0.4c0.4,0,0.7,0.1,0.9,0.3S234.2,536.4,234.3,536.9z"/> + - + + c-0.2,0.3-0.6,0.4-1.1,0.4c0,0-0.1,0-0.1,0c-0.1,0-0.1,0-0.2,0v-0.6c0,0,0.1,0,0.1,0c0,0,0.1,0,0.1,0c0.3,0,0.5-0.1,0.6-0.3 + c0.1-0.1,0.1-0.3,0.1-0.4c0-0.3-0.1-0.5-0.3-0.6c-0.1-0.1-0.3-0.1-0.6-0.1V536.3z"/> - + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H249.4z + M248.6,537c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H248.6z"/> + + c0,0.1,0,0.2,0,0.2c0,0,0.1,0.1,0.1,0.1v0.1h-0.9c0-0.1,0-0.1,0-0.2c0-0.1,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.4,0.1-0.6,0.1c-0.3,0-0.5-0.1-0.7-0.2c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.4,0.1-0.6,0.4-0.8c0.2-0.1,0.4-0.2,0.7-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.3c-0.1,0-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1 + c-0.1,0.1-0.1,0.2-0.1,0.3h-0.8C265.2,536.5,265.3,536.3,265.4,536.1z M266,538.2c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.5-0.1 + c0.1-0.1,0.2-0.3,0.2-0.5v-0.3c0,0-0.1,0.1-0.2,0.1c-0.1,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.4,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C265.9,538.1,265.9,538.2,266,538.2z"/> - + + c0-0.1,0-0.1,0-0.2h0.7V544.5z"/> - + + c-0.2,0.3-0.6,0.4-1.1,0.4c-0.4,0-0.7-0.1-0.9-0.3c-0.2-0.2-0.4-0.5-0.4-0.9h0.8c0,0.2,0.1,0.3,0.2,0.4s0.2,0.1,0.4,0.1 + c0.2,0,0.3-0.1,0.4-0.2s0.2-0.3,0.2-0.5c0-0.2,0-0.4-0.1-0.5C250.9,542.6,250.8,542.5,250.6,542.5z"/> - + h-0.8l-0.8-3.4c0,0.1,0,0.2,0,0.3c0,0.1,0,0.3,0,0.3V485.7z"/> - - + c-0.3,0-0.6,0.1-0.7,0.4c-0.2,0.3-0.3,0.6-0.3,1.1s0.1,0.8,0.3,1c0.2,0.2,0.4,0.3,0.7,0.3c0.3,0,0.5-0.1,0.7-0.3 + c0.1-0.1,0.2-0.3,0.2-0.5h0.8C248.1,484.7,247.9,485.1,247.6,485.4z"/> + + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H254.8z + M254.1,483.9c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H254.1z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C257.1,483.4,257.1,483.4,256.9,483.4C257,483.4,257,483.4,256.9,483.4z" + /> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H263.7z + M262.9,483.9c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H262.9z"/> - + c0,0-0.1,0-0.2,0v-0.6l0.1,0c0.1,0,0.2,0,0.2,0c0.1,0,0.1,0,0.2-0.1c0,0,0.1-0.1,0.1-0.2c0-0.1,0.1-0.2,0-0.2l-1.1-3.2h0.9 + L265.5,484.9z"/> + - - + + + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H267.3z + M266.5,489.6c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H266.5z"/> + c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.1,0.1-0.1,0.2c0,0.1,0,0.2,0.1,0.2c0.1,0,0.4,0.1,0.8,0.2c0.3,0.1,0.5,0.2,0.7,0.3 + c0.2,0.2,0.2,0.3,0.2,0.6c0,0.3-0.1,0.5-0.3,0.7s-0.6,0.3-1,0.3c-0.5,0-0.8-0.1-1.1-0.3s-0.3-0.5-0.3-0.8h0.8 + c0,0.1,0.1,0.2,0.1,0.3c0.1,0.1,0.3,0.2,0.5,0.2c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2c0-0.1,0-0.2-0.1-0.2 + c-0.1,0-0.3-0.1-0.8-0.2c-0.3-0.1-0.6-0.2-0.7-0.3c-0.1-0.1-0.2-0.3-0.2-0.5c0-0.3,0.1-0.5,0.3-0.7c0.2-0.2,0.5-0.3,0.9-0.3 + C269.4,488.3,269.7,488.3,269.9,488.5z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H273.6z + M272.8,489.6c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H272.8z"/> - + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C275.9,489.1,275.8,489.1,275.7,489.1 + C275.7,489.1,275.7,489.1,275.7,489.1z"/> + + l-0.4-0.1c-0.4-0.1-0.7-0.2-0.9-0.3c-0.3-0.2-0.4-0.5-0.4-0.9c0-0.4,0.1-0.7,0.4-0.9c0.3-0.2,0.7-0.4,1.2-0.4 + c0.4,0,0.8,0.1,1.1,0.3c0.3,0.2,0.5,0.6,0.5,1h-0.8c0-0.2-0.1-0.4-0.3-0.5c-0.1-0.1-0.3-0.1-0.5-0.1c-0.2,0-0.4,0-0.5,0.1 + c-0.1,0.1-0.2,0.2-0.2,0.4c0,0.1,0.1,0.3,0.2,0.3c0.1,0,0.3,0.1,0.5,0.2l0.7,0.2c0.3,0.1,0.5,0.2,0.7,0.3c0.2,0.2,0.4,0.5,0.4,0.8 + c0,0.4-0.1,0.7-0.4,0.9c-0.3,0.2-0.7,0.4-1.2,0.4c-0.5,0-1-0.1-1.3-0.4c-0.3-0.2-0.5-0.6-0.5-1h0.8c0,0.2,0.1,0.3,0.2,0.4 + C238.4,496.4,238.6,496.5,239,496.5z"/> - + c0.3-0.3,0.6-0.4,1-0.4c0.4,0,0.7,0.1,0.9,0.3S243.8,494.7,243.8,495.1z"/> + + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H253.6z + M252.8,495.2c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H252.8z"/> + v-0.6h0.4v-0.2c0-0.3,0.1-0.5,0.2-0.7c0.1-0.2,0.4-0.3,0.8-0.3c0,0,0.1,0,0.1,0C255.5,492.9,255.5,492.9,255.6,492.9z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H258.6z + M257.9,495.2c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H257.9z"/> - + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C260.9,494.8,260.9,494.8,260.7,494.8 + C260.8,494.8,260.8,494.8,260.7,494.8z"/> + + c0-0.1,0-0.1,0-0.2h0.7V502.7z"/> + c0.1-0.2,0.1-0.6,0.1-1.1c0-0.5,0-0.8-0.1-1.1c-0.1-0.2-0.2-0.3-0.5-0.3s-0.4,0.1-0.5,0.3c-0.1,0.2-0.1,0.6-0.1,1.1 + c0,0.5,0,0.8,0.1,1.1c0.1,0.2,0.2,0.4,0.5,0.4S247.9,502.1,247.9,501.8z"/> + c0.3-0.5,0.5-0.8,0.7-1h-2l0-0.7h2.8v0.6C251.9,499.5,251.8,499.7,251.6,500z"/> - - + + + c0.2-0.1,0.3-0.1,0.5-0.1c0.1,0,0.3,0,0.4,0.1c0.1,0.1,0.2,0.1,0.4,0.3c0.1,0.1,0.1,0.2,0.2,0.4c0,0.1,0,0.2,0,0.4l0,1.9h-0.8 + v-1.9c0-0.1,0-0.2-0.1-0.3c-0.1-0.1-0.2-0.2-0.4-0.2c-0.2,0-0.4,0.1-0.5,0.3c0,0.1-0.1,0.2-0.1,0.3v1.8h-0.8v-1.8 + C731.1,631,731.1,630.9,731.1,630.8z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H730.4z + M729.6,636.9c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H729.6z"/> - - + + - + c0.1-0.2,0.1-0.6,0.1-1.1c0-0.5,0-0.8-0.1-1.1c-0.1-0.2-0.2-0.3-0.5-0.3s-0.4,0.1-0.5,0.3c-0.1,0.2-0.1,0.6-0.1,1.1 + c0,0.5,0,0.8,0.1,1.1c0.1,0.2,0.2,0.4,0.5,0.4S729.1,643.7,729.1,643.4z"/> + - - + + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H732.5z + M731.7,719.8c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H731.7z"/> - - + + c0.1-0.2,0.1-0.6,0.1-1.1c0-0.5,0-0.8-0.1-1.1c-0.1-0.2-0.2-0.3-0.5-0.3s-0.4,0.1-0.5,0.3c-0.1,0.2-0.1,0.6-0.1,1.1 + c0,0.5,0,0.8,0.1,1.1c0.1,0.2,0.2,0.4,0.5,0.4S734.1,726.7,734.2,726.4z"/> + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2C736.7,725.4,736.6,725.4,736.5,725.5z"/> + l-0.4-0.1c-0.4-0.1-0.7-0.2-0.9-0.3c-0.3-0.2-0.4-0.5-0.4-0.9c0-0.4,0.1-0.7,0.4-0.9c0.3-0.2,0.7-0.4,1.2-0.4 + c0.4,0,0.8,0.1,1.1,0.3c0.3,0.2,0.5,0.6,0.5,1H597c0-0.2-0.1-0.4-0.3-0.5c-0.1-0.1-0.3-0.1-0.5-0.1c-0.2,0-0.4,0-0.5,0.1 + c-0.1,0.1-0.2,0.2-0.2,0.4c0,0.1,0.1,0.3,0.2,0.3c0.1,0,0.3,0.1,0.5,0.2l0.7,0.2c0.3,0.1,0.5,0.2,0.7,0.3c0.2,0.2,0.4,0.5,0.4,0.8 + c0,0.4-0.1,0.7-0.4,0.9c-0.3,0.2-0.7,0.4-1.2,0.4c-0.5,0-1-0.1-1.3-0.4c-0.3-0.2-0.5-0.6-0.5-1h0.8c0,0.2,0.1,0.3,0.2,0.4 + C595.7,677.3,595.9,677.4,596.2,677.4z"/> - - - + + + + c0.2-0.1,0.3-0.1,0.5-0.1c0.1,0,0.3,0,0.4,0.1c0.1,0.1,0.2,0.1,0.4,0.3c0.1,0.1,0.1,0.2,0.2,0.4c0,0.1,0,0.2,0,0.4l0,1.9h-0.8 + v-1.9c0-0.1,0-0.2-0.1-0.3c-0.1-0.1-0.2-0.2-0.4-0.2c-0.2,0-0.4,0.1-0.5,0.3c0,0.1-0.1,0.2-0.1,0.3v1.8h-0.8v-1.8 + C610.3,676,610.3,675.9,610.3,675.8z"/> - + c0.3-0.3,0.6-0.4,1-0.4c0.4,0,0.7,0.1,0.9,0.3S619.3,675.6,619.4,676.1z"/> + + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6H624c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H626z + M625.2,676.2c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H625.2z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C628.3,675.7,628.2,675.7,628.1,675.7 + C628.1,675.7,628.1,675.7,628.1,675.7z"/> - + + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H603.4z + M602.7,681.9c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H602.7z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C605.7,681.4,605.7,681.4,605.5,681.4 + C605.6,681.4,605.5,681.4,605.5,681.4z"/> - + c0.2,0,0.3-0.1,0.4-0.2s0.1-0.2,0.1-0.4h-0.5v-0.8h0.9v0.7C606.7,683.7,606.7,683.8,606.7,684z"/> + + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H623.6z + M622.8,681.9c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H622.8z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H633.4z + M632.6,681.9c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H632.6z"/> - + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C635.7,681.4,635.6,681.4,635.5,681.4 + C635.6,681.4,635.5,681.4,635.5,681.4z"/> + - + c0.1-0.2,0.1-0.6,0.1-1.1c0-0.5,0-0.8-0.1-1.1c-0.1-0.2-0.2-0.3-0.5-0.3s-0.4,0.1-0.5,0.3c-0.1,0.2-0.1,0.6-0.1,1.1 + c0,0.5,0,0.8,0.1,1.1c0.1,0.2,0.2,0.4,0.5,0.4S611,688.7,611,688.4z"/> + - - - - + + + - - - - - - - - - - - - + + + + + + + + + + + + - + - - - - - - - + + + + + + + - - + + + - - + - - - + + + + s0.4-0.2,0.7-0.2c0.4,0,0.7,0.1,0.9,0.3s0.3,0.4,0.4,0.8h-0.8c0-0.1,0-0.1-0.1-0.2c-0.1-0.1-0.2-0.2-0.4-0.2 + c-0.3,0-0.4,0.1-0.5,0.4c-0.1,0.2-0.1,0.4-0.1,0.7c0.1-0.1,0.2-0.2,0.3-0.3C133.7,496.4,133.9,496.4,134,496.4z M133.5,497.2 + c-0.2,0.1-0.2,0.3-0.2,0.6c0,0.2,0.1,0.4,0.2,0.5c0.1,0.1,0.3,0.2,0.4,0.2c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.2-0.3,0.2-0.5 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2C133.7,497,133.6,497.1,133.5,497.2z"/> - + c0.1,0.3,0.3,0.6,0.5,1.1H368.6z"/> + + l-0.4-0.1c-0.4-0.1-0.7-0.2-0.9-0.3c-0.3-0.2-0.4-0.5-0.4-0.9c0-0.4,0.1-0.7,0.4-0.9c0.3-0.2,0.7-0.4,1.2-0.4 + c0.4,0,0.8,0.1,1.1,0.3c0.3,0.2,0.5,0.6,0.5,1h-0.8c0-0.2-0.1-0.4-0.3-0.5c-0.1-0.1-0.3-0.1-0.5-0.1c-0.2,0-0.4,0-0.5,0.1 + c-0.1,0.1-0.2,0.2-0.2,0.4c0,0.1,0.1,0.3,0.2,0.3c0.1,0,0.3,0.1,0.5,0.2l0.7,0.2c0.3,0.1,0.5,0.2,0.7,0.3c0.2,0.2,0.4,0.5,0.4,0.8 + c0,0.4-0.1,0.7-0.4,0.9c-0.3,0.2-0.7,0.4-1.2,0.4c-0.5,0-1-0.1-1.3-0.4c-0.3-0.2-0.5-0.6-0.5-1h0.8c0,0.2,0.1,0.3,0.2,0.4 + C378.2,304.8,378.4,304.9,378.8,304.9z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H390.9z + M390.1,303.7c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H390.1z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H404.1z + M403.3,303.7c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H403.3z"/> - - + + - + + c-0.3,0-0.6,0.1-0.8,0.4c-0.2,0.2-0.3,0.6-0.3,1.1c0,0.5,0.1,0.9,0.3,1.1c0.2,0.2,0.5,0.3,0.8,0.3c0.3,0,0.5-0.1,0.7-0.2 + c0.2-0.2,0.3-0.4,0.3-0.7h-0.9V309h1.7v2.2h-0.6l-0.1-0.5C387.8,310.9,387.7,311,387.5,311.1z"/> - - + + + c0,0.3,0.1,0.5,0.2,0.6c0.1,0.2,0.3,0.3,0.5,0.3c0.2,0,0.4-0.1,0.5-0.2C397.1,310.2,397.1,310,397.1,309.7z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H401.1z + M400.3,309.4c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H400.3z"/> + c0.1-0.3,0.4-0.6,0.8-0.9c0.4-0.3,0.6-0.4,0.7-0.6c0.2-0.2,0.2-0.4,0.2-0.6C383.4,313.9,383.4,313.8,383.3,313.7z"/> + c0.1-0.3,0.4-0.6,0.8-0.9c0.4-0.3,0.6-0.4,0.7-0.6c0.2-0.2,0.2-0.4,0.2-0.6C386.6,313.9,386.5,313.8,386.4,313.7z"/> + c0.1-0.2,0.1-0.6,0.1-1.1c0-0.5,0-0.8-0.1-1.1c-0.1-0.2-0.2-0.3-0.5-0.3s-0.4,0.1-0.5,0.3c-0.1,0.2-0.1,0.6-0.1,1.1 + c0,0.5,0,0.8,0.1,1.1c0.1,0.2,0.2,0.4,0.5,0.4S389.6,316.2,389.6,315.9z"/> + s0.4-0.2,0.7-0.2c0.4,0,0.7,0.1,0.9,0.3s0.3,0.4,0.4,0.8h-0.8c0-0.1,0-0.1-0.1-0.2c-0.1-0.1-0.2-0.2-0.4-0.2 + c-0.3,0-0.4,0.1-0.5,0.4c-0.1,0.2-0.1,0.4-0.1,0.7c0.1-0.1,0.2-0.2,0.3-0.3C392.2,314.3,392.3,314.2,392.5,314.2z M392,315 + c-0.2,0.1-0.2,0.3-0.2,0.6c0,0.2,0.1,0.4,0.2,0.5c0.1,0.1,0.3,0.2,0.4,0.2c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.2-0.3,0.2-0.5 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2C392.2,314.9,392.1,314.9,392,315z"/> - + c0.1,0.3,0.3,0.6,0.5,1.1H449.5z"/> + - + c0.2-0.2,0.3-0.6,0.3-1.1c0-0.5-0.1-0.8-0.3-1.1c-0.2-0.2-0.5-0.4-0.8-0.4c-0.3,0-0.6,0.1-0.8,0.4c-0.2,0.2-0.3,0.6-0.3,1.1 + s0.1,0.8,0.3,1.1c0.2,0.2,0.5,0.4,0.8,0.4C460.3,300,460.6,299.9,460.8,299.6z"/> - - + + + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C474.9,298.3,474.9,298.3,474.8,298.3 + C474.8,298.3,474.8,298.3,474.8,298.3z"/> - + + c-0.1,0.1-0.1,0.3-0.1,0.6c0,0.2,0,0.4,0.1,0.5c0.1,0.3,0.3,0.4,0.5,0.4c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.2,0.1-0.4h0.8 + c0,0.2-0.1,0.5-0.3,0.7c-0.2,0.3-0.6,0.5-1.1,0.5s-0.8-0.1-1.1-0.4c-0.2-0.3-0.3-0.7-0.3-1.1c0-0.5,0.1-0.9,0.4-1.2 + c0.3-0.3,0.6-0.4,1-0.4c0.4,0,0.7,0.1,0.9,0.3S484.3,298.2,484.4,298.7z"/> - - + c0,0-0.1,0-0.2,0v-0.6l0.1,0c0.1,0,0.2,0,0.2,0c0.1,0,0.1,0,0.2-0.1c0,0,0.1-0.1,0.1-0.2c0-0.1,0.1-0.2,0-0.2l-1.1-3.2h0.9 + L489.3,299.8z"/> + + - - + + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.1,0,0.3,0,0.6h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.1,0.1-0.2H475.6z + M474.8,304.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H474.8z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C477.8,304,477.8,304,477.7,304C477.7,304,477.7,304,477.7,304z"/> - - + c-0.1,0.1-0.1,0.3-0.1,0.6c0,0.2,0,0.4,0.1,0.5c0.1,0.3,0.3,0.4,0.5,0.4c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.2,0.1-0.4h0.8 + c0,0.2-0.1,0.5-0.3,0.7c-0.2,0.3-0.6,0.5-1.1,0.5s-0.8-0.1-1.1-0.4c-0.2-0.3-0.3-0.7-0.3-1.1c0-0.5,0.1-0.9,0.4-1.2 + c0.3-0.3,0.6-0.4,1-0.4c0.4,0,0.7,0.1,0.9,0.3S484.1,303.9,484.1,304.3z"/> + + - - - + + - + - - + + + c0.1-0.3,0.4-0.6,0.8-0.9c0.4-0.3,0.6-0.4,0.7-0.6c0.2-0.2,0.2-0.4,0.2-0.6C465.9,314.7,465.9,314.5,465.8,314.4z"/> + c0.1-0.3,0.4-0.6,0.8-0.9c0.4-0.3,0.6-0.4,0.7-0.6c0.2-0.2,0.2-0.4,0.2-0.6C469.1,314.7,469.1,314.5,469,314.4z"/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + c0.1-0.2,0.1-0.6,0.1-1.1c0-0.5,0-0.8-0.1-1.1c-0.1-0.2-0.2-0.3-0.5-0.3s-0.4,0.1-0.5,0.3c-0.1,0.2-0.1,0.6-0.1,1.1 + c0,0.5,0,0.8,0.1,1.1c0.1,0.2,0.2,0.4,0.5,0.4S472.1,317,472.2,316.7z"/> + @@ -2431,6 +1917,57 @@ c0.1-2.4,1.9-4.2,4.4-4.2l2.4-0.1c1.8,0,3.4,1.5,3.4,3.3H324.3z"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3343,6 +3117,33 @@ c0.1-2.4,1.9-4.1,4.2-4.1l2.4-0.1c1.8,0,3.3,1.4,3.3,3.2L724.7,785.9z"/> + + + + + + + + + + + + + + + + + + + @@ -3370,6 +3171,33 @@ c-2.4-0.1-4.2-1.9-4.2-4.4l-0.1-2.4C719.6,912.6,721.1,911,722.9,910.9L722.9,910.9z"/> + + + + + + + + + + + + + + + + + + + - + diff --git a/staff/assets/maps/munich/level_3.svg b/staff/assets/maps/munich/level_3.svg index acc9ca6cd..c46bf8596 100644 --- a/staff/assets/maps/munich/level_3.svg +++ b/staff/assets/maps/munich/level_3.svg @@ -19,7 +19,7 @@ .st13{fill:#7A8F94;} .st14{fill:none;stroke:#FFFFFF;stroke-width:8;stroke-miterlimit:10;} .st15{fill:none;stroke:#FFFFFF;stroke-width:4;stroke-miterlimit:10;} - .st16{fill:none;stroke:#FFFFFF;stroke-width:4;stroke-miterlimit:9.9994;} + .st16{fill:none;stroke:#FFFFFF;stroke-width:4;stroke-miterlimit:9.9995;} .st17{fill:#EBF1F2;} .st18{fill:#767E80;} .st19{fill:none;stroke:#7A8E93;stroke-width:0.5;stroke-miterlimit:10;} @@ -86,13 +86,10 @@ - - - @@ -106,16 +103,15 @@ - + c0.1,0.3,0.3,0.6,0.5,1.1H478.4z"/> + c0.2-0.1,0.3-0.3,0.3-0.5c0-0.2-0.1-0.4-0.3-0.4C481.6,842.9,481.5,842.9,481.3,842.9z"/> @@ -125,43 +121,44 @@ - + - - + - - + + c0.2,0.2,0.4,0.5,0.4,0.8c0,0.1,0,0.2-0.1,0.3c-0.1,0.2-0.2,0.3-0.4,0.4c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6 + c0,0.3-0.1,0.7-0.3,0.9c-0.2,0.3-0.6,0.4-1.1,0.4c0,0-0.1,0-0.1,0c-0.1,0-0.1,0-0.2,0v-0.6c0,0,0.1,0,0.1,0c0,0,0.1,0,0.1,0 + c0.3,0,0.5-0.1,0.6-0.3c0.1-0.1,0.1-0.3,0.1-0.4c0-0.3-0.1-0.5-0.3-0.6c-0.1-0.1-0.3-0.1-0.6-0.1V847.8z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.2,0,0.5,0,0.7,0.1s0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.1,0,0.3,0,0.6 + h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H503.1z M502.4,848.5 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H502.4z"/> + c0-0.5,0-0.8-0.1-1.1s-0.2-0.3-0.5-0.3s-0.4,0.1-0.5,0.3s-0.1,0.6-0.1,1.1c0,0.5,0,0.8,0.1,1.1s0.2,0.4,0.5,0.4 + S492.1,855.3,492.2,855.1z"/> + c0-0.5,0-0.8-0.1-1.1s-0.2-0.3-0.5-0.3s-0.4,0.1-0.5,0.3s-0.1,0.6-0.1,1.1c0,0.5,0,0.8,0.1,1.1s0.2,0.4,0.5,0.4 + S495.2,855.3,495.3,855.1z"/> + c0-0.1,0-0.1,0-0.2h0.7V856z"/> + c0.1,0.3,0.3,0.6,0.5,1.1H286.3z"/> + c0.2-0.1,0.3-0.3,0.3-0.5c0-0.2-0.1-0.4-0.3-0.4C289.6,838.5,289.4,838.5,289.3,838.5z"/> - + - + + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C312.1,838,312.1,838,312,838C312,838,312,838,312,838z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.2,0,0.5,0,0.7,0.1s0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.1,0,0.3,0,0.6 + H316c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H318z M317.3,838.5 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H317.3z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C320.3,838,320.2,838,320.1,838C320.2,838,320.1,838,320.1,838z"/> - - + + c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.1,0.1-0.1,0.2c0,0.1,0,0.2,0.1,0.2c0.1,0,0.3,0.1,0.8,0.2c0.3,0.1,0.5,0.2,0.7,0.3 + c0.2,0.2,0.2,0.3,0.2,0.6c0,0.3-0.1,0.5-0.3,0.7c-0.2,0.2-0.6,0.3-1,0.3c-0.5,0-0.8-0.1-1-0.3c-0.2-0.2-0.3-0.5-0.3-0.8h0.8 + c0,0.1,0.1,0.2,0.1,0.3c0.1,0.1,0.3,0.2,0.5,0.2c0.2,0,0.3,0,0.4-0.1s0.1-0.1,0.1-0.2c0-0.1,0-0.2-0.1-0.2s-0.3-0.1-0.8-0.2 + c-0.3-0.1-0.6-0.2-0.7-0.3c-0.1-0.1-0.2-0.3-0.2-0.5c0-0.3,0.1-0.5,0.3-0.7c0.2-0.2,0.5-0.3,0.9-0.3 + C302.8,842.9,303.1,842.9,303.3,843.1z"/> + c-0.1,0.1-0.1,0.3-0.1,0.6c0,0.2,0,0.4,0.1,0.5c0.1,0.2,0.3,0.4,0.5,0.4c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.2,0.1-0.4h0.8 + c0,0.2-0.1,0.5-0.3,0.7c-0.2,0.3-0.6,0.5-1.1,0.5s-0.8-0.1-1.1-0.4c-0.2-0.3-0.3-0.7-0.3-1.1c0-0.5,0.1-0.9,0.4-1.2 + c0.3-0.3,0.6-0.4,1-0.4c0.4,0,0.7,0.1,0.9,0.3C306.8,843.3,306.9,843.6,307,844z"/> + s-0.2,0.3-0.2,0.6v1.6h-0.8v-4h0.8v1.4c0.1-0.2,0.2-0.3,0.4-0.4c0.1-0.1,0.3-0.1,0.5-0.1c0.2,0,0.4,0,0.5,0.1 + c0.2,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.1,0.2,0.2,0.3C310.2,843.7,310.2,843.9,310.2,844.2z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.2,0,0.5,0,0.7,0.1s0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.1,0,0.3,0,0.6 + h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H313.5z M312.8,844.1 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H312.8z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C315.8,843.7,315.8,843.7,315.6,843.7 + C315.7,843.7,315.6,843.7,315.6,843.7z"/> - + + c0,0.1,0,0.2,0,0.2c0,0,0.1,0.1,0.1,0.1v0.1h-0.9c0-0.1,0-0.1,0-0.2c0-0.1,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.4,0.1-0.6,0.1c-0.3,0-0.5-0.1-0.7-0.2c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.4,0.1-0.6,0.4-0.8c0.2-0.1,0.4-0.2,0.7-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.3c-0.1,0-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1 + c-0.1,0.1-0.1,0.2-0.1,0.3h-0.8C302.7,849.3,302.8,849.1,302.9,848.9z M303.5,851c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.5-0.1 + c0.1-0.1,0.2-0.3,0.2-0.5v-0.3c0,0-0.1,0.1-0.2,0.1c-0.1,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.4,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C303.4,850.9,303.4,851,303.5,851z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.2,0,0.5,0,0.7,0.1s0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.1,0,0.3,0,0.6 + h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H308.5z M307.8,849.8 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H307.8z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.2,0,0.5,0,0.7,0.1s0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.1,0,0.3,0,0.6 + h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H311.7z M310.9,849.8 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H310.9z"/> + c-0.2-0.3-0.4-0.6-0.4-1.1c0-0.5,0.1-0.9,0.4-1.2c0.2-0.3,0.6-0.4,0.9-0.4c0.2,0,0.3,0,0.5,0.1s0.3,0.2,0.3,0.3v-1.4H315z + M312.9,850.1c0,0.3,0.1,0.5,0.2,0.7c0.1,0.2,0.3,0.3,0.5,0.3c0.2,0,0.4-0.1,0.5-0.2c0.1-0.2,0.2-0.4,0.2-0.6 + c0-0.4-0.1-0.6-0.3-0.8c-0.1-0.1-0.2-0.1-0.4-0.1c-0.2,0-0.4,0.1-0.5,0.3C312.9,849.6,312.9,849.8,312.9,850.1z"/> + c0.2,0.4,0.3,0.9,0.3,1.5s-0.1,1.2-0.3,1.5C302.7,857.1,302.3,857.3,301.8,857.3z M302.3,856.3c0.1-0.2,0.1-0.6,0.1-1.1 + c0-0.5,0-0.8-0.1-1.1s-0.2-0.3-0.5-0.3s-0.4,0.1-0.5,0.3s-0.1,0.6-0.1,1.1c0,0.5,0,0.8,0.1,1.1s0.2,0.4,0.5,0.4 + S302.2,856.6,302.3,856.3z"/> + c0-0.5,0-0.8-0.1-1.1s-0.2-0.3-0.5-0.3s-0.4,0.1-0.5,0.3s-0.1,0.6-0.1,1.1c0,0.5,0,0.8,0.1,1.1s0.2,0.4,0.5,0.4 + S305.3,856.6,305.4,856.3z"/> + c0-0.7,0.3-1.5,0.7-2.2c0.3-0.5,0.5-0.8,0.7-1h-2l0-0.7h2.8v0.6C309.4,854,309.2,854.2,309,854.5z"/> - + - - + + - + s-0.2,0.3-0.2,0.6v1.6h-0.8v-4h0.8v1.4c0.1-0.2,0.2-0.3,0.4-0.4c0.1-0.1,0.3-0.1,0.5-0.1c0.2,0,0.4,0,0.5,0.1 + c0.2,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.1,0.2,0.2,0.3C113.2,790.7,113.2,790.9,113.2,791.1z"/> + - - + c-0.3-0.3-0.4-0.7-0.4-1.1c0-0.4,0.1-0.8,0.4-1.1c0.3-0.3,0.6-0.5,1.2-0.5C132.3,789.8,132.7,790,133,790.3z M131.8,790.5 + c-0.2,0-0.4,0.1-0.5,0.2c-0.1,0.2-0.2,0.4-0.2,0.7c0,0.3,0.1,0.5,0.2,0.7c0.1,0.2,0.3,0.2,0.5,0.2s0.4-0.1,0.5-0.2 + c0.1-0.2,0.2-0.4,0.2-0.7c0-0.3-0.1-0.5-0.2-0.7C132.2,790.5,132.1,790.5,131.8,790.5z"/> + + c0.3-0.3,0.6-0.4,1-0.4c0.4,0,0.7,0.1,0.9,0.3C137.9,790.2,138,790.5,138.1,791z"/> + c0-0.1,0-0.1,0-0.2h0.7V798.5z"/> - + + c-0.2,0.1-0.2,0.3-0.2,0.6c0,0.2,0.1,0.4,0.2,0.5c0.1,0.1,0.3,0.2,0.4,0.2c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.2-0.3,0.2-0.5 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2C125.2,796.6,125,796.6,124.9,796.7z"/> - + + c0,0.1,0,0.2,0,0.2c0,0,0.1,0.1,0.1,0.1v0.1h-0.9c0-0.1,0-0.1,0-0.2c0-0.1,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.4,0.1-0.6,0.1c-0.3,0-0.5-0.1-0.7-0.2c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.4,0.1-0.6,0.4-0.8c0.2-0.1,0.4-0.2,0.7-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.3c-0.1,0-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1 + c-0.1,0.1-0.1,0.2-0.1,0.3h-0.8C105.5,704.2,105.6,704,105.8,703.8z M105.9,702.4h0.7v0.7h-0.7V702.4z M106.3,705.9 + c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.5-0.1c0.1-0.1,0.2-0.3,0.2-0.5V705c0,0-0.1,0.1-0.2,0.1c-0.1,0-0.1,0-0.2,0.1l-0.2,0 + c-0.2,0-0.3,0.1-0.4,0.1c-0.1,0.1-0.2,0.2-0.2,0.3C106.2,705.8,106.3,705.9,106.3,705.9z M107.1,702.4h0.7v0.7h-0.7V702.4z"/> + c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.1,0.1-0.1,0.2c0,0.1,0,0.2,0.1,0.2c0.1,0,0.3,0.1,0.8,0.2c0.3,0.1,0.5,0.2,0.7,0.3 + c0.2,0.2,0.2,0.3,0.2,0.6c0,0.3-0.1,0.5-0.3,0.7c-0.2,0.2-0.6,0.3-1,0.3c-0.5,0-0.8-0.1-1-0.3c-0.2-0.2-0.3-0.5-0.3-0.8h0.8 + c0,0.1,0.1,0.2,0.1,0.3c0.1,0.1,0.3,0.2,0.5,0.2c0.2,0,0.3,0,0.4-0.1s0.1-0.1,0.1-0.2c0-0.1,0-0.2-0.1-0.2s-0.3-0.1-0.8-0.2 + c-0.3-0.1-0.6-0.2-0.7-0.3c-0.1-0.1-0.2-0.3-0.2-0.5c0-0.3,0.1-0.5,0.3-0.7c0.2-0.2,0.5-0.3,0.9-0.3 + C110.3,703.4,110.6,703.5,110.8,703.6z"/> + c-0.1,0.1-0.1,0.1-0.1,0.2c0,0.1,0,0.2,0.1,0.2c0.1,0,0.3,0.1,0.8,0.2c0.3,0.1,0.5,0.2,0.7,0.3c0.2,0.2,0.2,0.3,0.2,0.6 + c0,0.3-0.1,0.5-0.3,0.7c-0.2,0.2-0.6,0.3-1,0.3c-0.5,0-0.8-0.1-1-0.3c-0.2-0.2-0.3-0.5-0.3-0.8h0.8c0,0.1,0.1,0.2,0.1,0.3 + c0.1,0.1,0.3,0.2,0.5,0.2c0.2,0,0.3,0,0.4-0.1s0.1-0.1,0.1-0.2c0-0.1,0-0.2-0.1-0.2s-0.3-0.1-0.8-0.2c-0.3-0.1-0.6-0.2-0.7-0.3 + c-0.1-0.1-0.2-0.3-0.2-0.5c0-0.3,0.1-0.5,0.3-0.7c0.2-0.2,0.5-0.3,0.9-0.3C113.4,703.4,113.7,703.5,114,703.6z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.2,0,0.5,0,0.7,0.1s0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.1,0,0.3,0,0.6 + h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H117.6z M116.8,704.7 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H116.8z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C119.9,704.2,119.8,704.2,119.7,704.2 + C119.8,704.2,119.7,704.2,119.7,704.2z"/> - + - - - + c-0.2-0.3-0.4-0.6-0.4-1.1c0-0.5,0.1-0.9,0.4-1.2c0.2-0.3,0.6-0.4,0.9-0.4c0.2,0,0.3,0,0.5,0.1s0.3,0.2,0.3,0.3v-1.4H139.3z + M137.2,705c0,0.3,0.1,0.5,0.2,0.7c0.1,0.2,0.3,0.3,0.5,0.3c0.2,0,0.4-0.1,0.5-0.2c0.1-0.2,0.2-0.4,0.2-0.6c0-0.4-0.1-0.6-0.3-0.8 + c-0.1-0.1-0.2-0.1-0.4-0.1c-0.2,0-0.4,0.1-0.5,0.3C137.3,704.5,137.2,704.8,137.2,705z"/> + + + c0-0.1,0-0.1,0-0.2h0.7V712.1z"/> + c0-0.5,0-0.8-0.1-1.1s-0.2-0.3-0.5-0.3s-0.4,0.1-0.5,0.3s-0.1,0.6-0.1,1.1c0,0.5,0,0.8,0.1,1.1s0.2,0.4,0.5,0.4 + S122.5,711.5,122.6,711.2z"/> + c0.1-0.1,0.2-0.3,0.2-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.2-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2S124.7,710.8,124.7,711z + M124.9,709.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.2,0.1-0.4c0-0.2,0-0.3-0.1-0.4 + c-0.1-0.1-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.1,0.2-0.1,0.4C124.8,709.4,124.8,709.5,124.9,709.6z"/> - + - + + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.2,0,0.5,0,0.7,0.1s0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.1,0,0.3,0,0.6 + h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H111.1z M110.4,620.5 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H110.4z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C113.4,620,113.3,620,113.2,620C113.3,620,113.2,620,113.2,620z"/> - + + c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.1,0.1-0.1,0.2c0,0.1,0,0.2,0.1,0.2c0.1,0,0.3,0.1,0.8,0.2c0.3,0.1,0.5,0.2,0.7,0.3 + c0.2,0.2,0.2,0.3,0.2,0.6c0,0.3-0.1,0.5-0.3,0.7c-0.2,0.2-0.6,0.3-1,0.3c-0.5,0-0.8-0.1-1-0.3c-0.2-0.2-0.3-0.5-0.3-0.8h0.8 + c0,0.1,0.1,0.2,0.1,0.3c0.1,0.1,0.3,0.2,0.5,0.2c0.2,0,0.3,0,0.4-0.1s0.1-0.1,0.1-0.2c0-0.1,0-0.2-0.1-0.2s-0.3-0.1-0.8-0.2 + c-0.3-0.1-0.6-0.2-0.7-0.3c-0.1-0.1-0.2-0.3-0.2-0.5c0-0.3,0.1-0.5,0.3-0.7c0.2-0.2,0.5-0.3,0.9-0.3 + C128.3,619.2,128.6,619.3,128.8,619.4z"/> - + c0.3-0.3,0.6-0.4,1-0.4c0.4,0,0.7,0.1,0.9,0.3C132.3,619.6,132.5,619.9,132.5,620.4z"/> + - + + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C152.6,620,152.6,620,152.4,620C152.5,620,152.4,620,152.4,620z"/> - + + c0-0.1,0-0.1,0-0.2h0.7V627.9z"/> + c0.2,0.4,0.3,0.9,0.3,1.5s-0.1,1.2-0.3,1.5C126,627.9,125.6,628,125.1,628z M125.6,627c0.1-0.2,0.1-0.6,0.1-1.1 + c0-0.5,0-0.8-0.1-1.1s-0.2-0.3-0.5-0.3s-0.4,0.1-0.5,0.3s-0.1,0.6-0.1,1.1c0,0.5,0,0.8,0.1,1.1s0.2,0.4,0.5,0.4 + S125.5,627.3,125.6,627z"/> - - - + + c-0.1,0.1-0.1,0.3-0.1,0.6c0,0.2,0,0.4,0.1,0.5c0.1,0.2,0.3,0.4,0.5,0.4c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.2,0.1-0.4h0.8 + c0,0.2-0.1,0.5-0.3,0.7c-0.2,0.3-0.6,0.5-1.1,0.5s-0.8-0.1-1.1-0.4c-0.2-0.3-0.3-0.7-0.3-1.1c0-0.5,0.1-0.9,0.4-1.2 + c0.3-0.3,0.6-0.4,1-0.4c0.4,0,0.7,0.1,0.9,0.3C119.4,553.3,119.6,553.6,119.6,554z"/> + s-0.2,0.3-0.2,0.6v1.6h-0.8v-4h0.8v1.4c0.1-0.2,0.2-0.3,0.4-0.4c0.1-0.1,0.3-0.1,0.5-0.1c0.2,0,0.4,0,0.5,0.1 + c0.2,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.1,0.2,0.2,0.3C122.8,553.7,122.9,553.9,122.9,554.2z"/> + c-0.2-0.3-0.4-0.6-0.4-1.1c0-0.5,0.1-0.9,0.4-1.2c0.2-0.3,0.6-0.4,0.9-0.4c0.2,0,0.3,0,0.5,0.1s0.3,0.2,0.3,0.3v-1.4H132.9z + M130.8,554.4c0,0.3,0.1,0.5,0.2,0.7c0.1,0.2,0.3,0.3,0.5,0.3c0.2,0,0.4-0.1,0.5-0.2c0.1-0.2,0.2-0.4,0.2-0.6 + c0-0.4-0.1-0.6-0.3-0.8c-0.1-0.1-0.2-0.1-0.4-0.1c-0.2,0-0.4,0.1-0.5,0.3C130.8,554,130.8,554.2,130.8,554.4z"/> - + - + + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C96.8,559.3,96.7,559.3,96.6,559.3C96.7,559.3,96.6,559.3,96.6,559.3z"/> - + - + - - + + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.2,0,0.5,0,0.7,0.1s0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.1,0,0.3,0,0.6 + h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H120.9z M120.1,559.8 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H120.1z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C131.3,559.3,131.2,559.3,131.1,559.3 + C131.2,559.3,131.1,559.3,131.1,559.3z"/> - + - - + + - + - + + c0-0.1,0-0.1,0-0.2h0.7V567.2z"/> + c0.1-0.3,0.4-0.5,0.8-0.8c0.4-0.3,0.6-0.4,0.7-0.6c0.2-0.2,0.2-0.4,0.2-0.6C125.7,564.3,125.6,564.1,125.5,564z"/> - - + - + - + c-0.1,0.1-0.1,0.3-0.1,0.6c0,0.2,0,0.4,0.1,0.5c0.1,0.2,0.3,0.4,0.5,0.4c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.2,0.1-0.4h0.8 + c0,0.2-0.1,0.5-0.3,0.7c-0.2,0.3-0.6,0.5-1.1,0.5s-0.8-0.1-1.1-0.4c-0.2-0.3-0.3-0.7-0.3-1.1c0-0.5,0.1-0.9,0.4-1.2 + c0.3-0.3,0.6-0.4,1-0.4c0.4,0,0.7,0.1,0.9,0.3C126.6,516.2,126.8,516.5,126.8,517z"/> + - + - + - + c0-0.1,0-0.1,0-0.2h0.7V524.5z"/> + - + - - + - - + + + c0.2-0.1,0.3-0.3,0.3-0.5c0-0.2-0.1-0.4-0.3-0.4C125,471.9,124.8,471.9,124.6,471.9z"/> - - + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C153,471.4,152.9,471.4,152.8,471.4C152.8,471.4,152.8,471.4,152.8,471.4z + "/> - + c0.2,0,0.3-0.1,0.3-0.2s0.1-0.2,0.1-0.4h-0.5v-0.8h0.8v0.7C154,473.7,154,473.8,153.9,474z"/> + - + - - + + + h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H106.9z M106.1,477.5 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H106.1z"/> + c-0.1,0.1-0.1,0.3-0.1,0.5c0,0.3,0.1,0.5,0.2,0.6c0.1,0.2,0.3,0.3,0.5,0.3c0.2,0,0.4-0.1,0.5-0.2C112.9,478.4,113,478.2,113,477.9 + z"/> + h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H116.9z M116.1,477.5 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H116.1z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C119.2,477.1,119.1,477.1,119,477.1C119.1,477.1,119,477.1,119,477.1z"/> - + + h-0.8l-0.8-3.4c0,0.1,0,0.2,0,0.3s0,0.3,0,0.3V479.3z"/> - - - - - + + + + + c-0.2,0.1-0.2,0.3-0.2,0.6c0,0.2,0.1,0.4,0.2,0.5c0.1,0.1,0.3,0.2,0.4,0.2c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.2-0.3,0.2-0.5 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2C125,483,124.9,483.1,124.8,483.1z"/> - + - + - - + + + h-0.8l-0.8-3.4c0,0.1,0,0.2,0,0.3s0,0.3,0,0.3V424.9z"/> - - + + + h-0.8l-0.8-3.4c0,0.1,0,0.2,0,0.3s0,0.3,0,0.3V430.5z"/> - + + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C94.3,428.3,94.2,428.3,94.1,428.3C94.2,428.3,94.1,428.3,94.1,428.3z"/> - + c-0.1,0.1-0.1,0.3-0.1,0.6c0,0.2,0,0.4,0.1,0.5c0.1,0.2,0.3,0.4,0.5,0.4c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.2,0.1-0.4h0.8 + c0,0.2-0.1,0.5-0.3,0.7c-0.2,0.3-0.6,0.5-1.1,0.5s-0.8-0.1-1.1-0.4c-0.2-0.3-0.3-0.7-0.3-1.1c0-0.5,0.1-0.9,0.4-1.2 + c0.3-0.3,0.6-0.4,1-0.4c0.4,0,0.7,0.1,0.9,0.3C97.2,427.9,97.3,428.2,97.4,428.6z"/> + - + + l-0.4-0.1c-0.4-0.1-0.7-0.2-0.9-0.3c-0.3-0.2-0.4-0.5-0.4-0.9c0-0.4,0.1-0.7,0.4-0.9c0.3-0.2,0.7-0.4,1.2-0.4 + c0.4,0,0.8,0.1,1.1,0.3c0.3,0.2,0.5,0.6,0.5,1h-0.8c0-0.2-0.1-0.4-0.3-0.5c-0.1-0.1-0.3-0.1-0.5-0.1c-0.2,0-0.4,0-0.5,0.1 + c-0.1,0.1-0.2,0.2-0.2,0.4c0,0.1,0.1,0.3,0.2,0.3c0.1,0,0.3,0.1,0.5,0.2l0.7,0.2c0.3,0.1,0.5,0.2,0.7,0.3c0.2,0.2,0.4,0.5,0.4,0.8 + c0,0.4-0.1,0.7-0.4,0.9c-0.3,0.2-0.7,0.4-1.2,0.4c-0.5,0-0.9-0.1-1.2-0.4c-0.3-0.2-0.5-0.6-0.5-1h0.8c0,0.2,0.1,0.3,0.2,0.4 + C107,429.9,107.3,430,107.6,430z"/> - + c-0.1,0.1-0.1,0.3-0.1,0.6c0,0.2,0,0.4,0.1,0.5c0.1,0.2,0.3,0.4,0.5,0.4c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.2,0.1-0.4h0.8 + c0,0.2-0.1,0.5-0.3,0.7c-0.2,0.3-0.6,0.5-1.1,0.5s-0.8-0.1-1.1-0.4c-0.2-0.3-0.3-0.7-0.3-1.1c0-0.5,0.1-0.9,0.4-1.2 + c0.3-0.3,0.6-0.4,1-0.4c0.4,0,0.7,0.1,0.9,0.3C122.3,427.9,122.4,428.2,122.5,428.6z"/> + + c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.1,0.1-0.1,0.2c0,0.1,0,0.2,0.1,0.2c0.1,0,0.3,0.1,0.8,0.2c0.3,0.1,0.5,0.2,0.7,0.3 + c0.2,0.2,0.2,0.3,0.2,0.6c0,0.3-0.1,0.5-0.3,0.7c-0.2,0.2-0.6,0.3-1,0.3c-0.5,0-0.8-0.1-1-0.3c-0.2-0.2-0.3-0.5-0.3-0.8h0.8 + c0,0.1,0.1,0.2,0.1,0.3c0.1,0.1,0.3,0.2,0.5,0.2c0.2,0,0.3,0,0.4-0.1s0.1-0.1,0.1-0.2c0-0.1,0-0.2-0.1-0.2s-0.3-0.1-0.8-0.2 + c-0.3-0.1-0.6-0.2-0.7-0.3c-0.1-0.1-0.2-0.3-0.2-0.5c0-0.3,0.1-0.5,0.3-0.7c0.2-0.2,0.5-0.3,0.9-0.3 + C128,427.5,128.3,427.5,128.5,427.7z"/> - - + c-0.3,0-0.6,0.1-0.7,0.4c-0.2,0.2-0.3,0.6-0.3,1.1c0,0.5,0.1,0.8,0.3,1c0.2,0.2,0.4,0.3,0.7,0.3c0.3,0,0.5-0.1,0.7-0.3 + c0.1-0.1,0.2-0.3,0.2-0.5h0.8C142.4,429.6,142.2,430,141.9,430.2z"/> + + c-0.2-0.3-0.4-0.6-0.4-1.1c0-0.5,0.1-0.9,0.4-1.2c0.2-0.3,0.6-0.4,0.9-0.4c0.2,0,0.3,0,0.5,0.1s0.3,0.2,0.3,0.3v-1.4H158.7z + M156.5,429.1c0,0.3,0.1,0.5,0.2,0.7c0.1,0.2,0.3,0.3,0.5,0.3c0.2,0,0.4-0.1,0.5-0.2c0.1-0.2,0.2-0.4,0.2-0.6 + c0-0.4-0.1-0.6-0.3-0.8c-0.1-0.1-0.2-0.1-0.4-0.1c-0.2,0-0.4,0.1-0.5,0.3C156.6,428.6,156.5,428.8,156.5,429.1z"/> - + c-0.1,0.1-0.1,0.3-0.1,0.6c0,0.2,0,0.4,0.1,0.5c0.1,0.2,0.3,0.4,0.5,0.4c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.2,0.1-0.4h0.8 + c0,0.2-0.1,0.5-0.3,0.7c-0.2,0.3-0.6,0.5-1.1,0.5s-0.8-0.1-1.1-0.4c-0.2-0.3-0.3-0.7-0.3-1.1c0-0.5,0.1-0.9,0.4-1.2 + c0.3-0.3,0.6-0.4,1-0.4c0.4,0,0.7,0.1,0.9,0.3C112.7,433.5,112.9,433.8,112.9,434.3z"/> + - - + c-0.2-0.3-0.4-0.6-0.4-1.1c0-0.5,0.1-0.9,0.4-1.2c0.2-0.3,0.6-0.4,0.9-0.4c0.2,0,0.3,0,0.5,0.1s0.3,0.2,0.3,0.3v-1.4H126.2z + M124.1,434.7c0,0.3,0.1,0.5,0.2,0.7c0.1,0.2,0.3,0.3,0.5,0.3c0.2,0,0.4-0.1,0.5-0.2c0.1-0.2,0.2-0.4,0.2-0.6 + c0-0.4-0.1-0.6-0.3-0.8c-0.1-0.1-0.2-0.1-0.4-0.1c-0.2,0-0.4,0.1-0.5,0.3C124.1,434.2,124.1,434.4,124.1,434.7z"/> + + + c0.1-0.1,0.3-0.1,0.5-0.1c0.4,0,0.7,0.1,0.9,0.4c0.2,0.3,0.3,0.7,0.3,1.1c0,0.5-0.1,0.9-0.3,1.2 + C136.2,436.1,135.8,436.3,135.4,436.3z M135.9,434.7c0-0.2,0-0.4-0.1-0.5c-0.1-0.3-0.3-0.4-0.6-0.4c-0.3,0-0.5,0.1-0.6,0.4 + c-0.1,0.1-0.1,0.3-0.1,0.5c0,0.3,0.1,0.5,0.2,0.6c0.1,0.2,0.3,0.3,0.5,0.3c0.2,0,0.4-0.1,0.5-0.2 + C135.8,435.2,135.9,435,135.9,434.7z"/> - - - - + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C142.1,433.9,142,433.9,141.9,433.9C142,433.9,141.9,433.9,141.9,433.9z" + /> + + + + - - + c0.2-0.1,0.3-0.3,0.3-0.5c0-0.2-0.1-0.4-0.3-0.4C109.7,350.4,109.6,350.4,109.4,350.4z"/> + + c-0.2-0.3-0.4-0.6-0.4-1.1c0-0.5,0.1-0.9,0.4-1.2c0.2-0.3,0.6-0.4,0.9-0.4c0.2,0,0.3,0,0.5,0.1s0.3,0.2,0.3,0.3v-1.4H117.7z + M115.6,350.7c0,0.3,0.1,0.5,0.2,0.7c0.1,0.2,0.3,0.3,0.5,0.3c0.2,0,0.4-0.1,0.5-0.2c0.1-0.2,0.2-0.4,0.2-0.6 + c0-0.4-0.1-0.6-0.3-0.8c-0.1-0.1-0.2-0.1-0.4-0.1c-0.2,0-0.4,0.1-0.5,0.3C115.7,350.3,115.6,350.5,115.6,350.7z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.2,0,0.5,0,0.7,0.1s0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.1,0,0.3,0,0.6 + H119c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H121z M120.2,350.4 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H120.2z"/> + c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.1,0.1-0.1,0.2c0,0.1,0,0.2,0.1,0.2c0.1,0,0.3,0.1,0.8,0.2c0.3,0.1,0.5,0.2,0.7,0.3 + c0.2,0.2,0.2,0.3,0.2,0.6c0,0.3-0.1,0.5-0.3,0.7c-0.2,0.2-0.6,0.3-1,0.3c-0.5,0-0.8-0.1-1-0.3c-0.2-0.2-0.3-0.5-0.3-0.8h0.8 + c0,0.1,0.1,0.2,0.1,0.3c0.1,0.1,0.3,0.2,0.5,0.2c0.2,0,0.3,0,0.4-0.1s0.1-0.1,0.1-0.2c0-0.1,0-0.2-0.1-0.2s-0.3-0.1-0.8-0.2 + c-0.3-0.1-0.6-0.2-0.7-0.3c-0.1-0.1-0.2-0.3-0.2-0.5c0-0.3,0.1-0.5,0.3-0.7c0.2-0.2,0.5-0.3,0.9-0.3 + C126.6,349.1,126.9,349.2,127.1,349.3z"/> - + - + c0.1-0.3,0.4-0.5,0.8-0.8c0.4-0.3,0.6-0.4,0.7-0.6c0.2-0.2,0.2-0.4,0.2-0.6C119.6,354.9,119.5,354.8,119.4,354.7z"/> + + c0.2,0.4,0.3,0.9,0.3,1.5s-0.1,1.2-0.3,1.5C126.2,357.8,125.8,358,125.3,358z M125.8,356.9c0.1-0.2,0.1-0.6,0.1-1.1 + c0-0.5,0-0.8-0.1-1.1s-0.2-0.3-0.5-0.3s-0.4,0.1-0.5,0.3s-0.1,0.6-0.1,1.1c0,0.5,0,0.8,0.1,1.1s0.2,0.4,0.5,0.4 + S125.7,357.2,125.8,356.9z"/> - + + c0.2-0.1,0.3-0.3,0.3-0.5c0-0.2-0.1-0.4-0.3-0.4C362.7,291.3,362.5,291.3,362.4,291.3z"/> - + h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H383.2z M382.4,291.2 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H382.4z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C385.5,290.8,385.4,290.8,385.3,290.8 + C385.3,290.8,385.3,290.8,385.3,290.8z"/> - + c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.1,0.1-0.1,0.2c0,0.1,0,0.2,0.1,0.2c0.1,0,0.3,0.1,0.8,0.2c0.3,0.1,0.5,0.2,0.7,0.3 + c0.2,0.2,0.2,0.3,0.2,0.6c0,0.3-0.1,0.5-0.3,0.7c-0.2,0.2-0.6,0.3-1,0.3c-0.5,0-0.8-0.1-1-0.3c-0.2-0.2-0.3-0.5-0.3-0.8h0.8 + c0,0.1,0.1,0.2,0.1,0.3c0.1,0.1,0.3,0.2,0.5,0.2c0.2,0,0.3,0,0.4-0.1s0.1-0.1,0.1-0.2c0-0.1,0-0.2-0.1-0.2s-0.3-0.1-0.8-0.2 + c-0.3-0.1-0.6-0.2-0.7-0.3c-0.1-0.1-0.2-0.3-0.2-0.5c0-0.3,0.1-0.5,0.3-0.7c0.2-0.2,0.5-0.3,0.9-0.3 + C390.6,290,390.9,290,391.2,290.2z"/> + + c-0.1,0.2-0.3,0.3-0.6,0.5l-0.3,0.2c-0.2,0.1-0.3,0.2-0.4,0.3s-0.1,0.1-0.2,0.2h1.7v0.7h-2.7c0-0.3,0.1-0.5,0.2-0.8 + c0.1-0.3,0.4-0.5,0.8-0.8c0.4-0.3,0.6-0.4,0.7-0.6c0.2-0.2,0.2-0.4,0.2-0.6C374,295.8,374,295.6,373.9,295.5z"/> - + + c-0.2,0.1-0.2,0.3-0.2,0.6c0,0.2,0.1,0.4,0.2,0.5c0.1,0.1,0.3,0.2,0.4,0.2c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.2-0.3,0.2-0.5 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2C379.6,296.7,379.5,296.8,379.4,296.9z"/> - + + c0.2-0.1,0.3-0.3,0.3-0.5c0-0.2-0.1-0.4-0.3-0.4C432.3,291.3,432.2,291.3,432,291.3z"/> - + c-0.1,0.1-0.1,0.3-0.1,0.6c0,0.2,0,0.4,0.1,0.5c0.1,0.2,0.3,0.4,0.5,0.4c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.2,0.1-0.4h0.8 + c0,0.2-0.1,0.5-0.3,0.7c-0.2,0.3-0.6,0.5-1.1,0.5s-0.8-0.1-1.1-0.4c-0.2-0.3-0.3-0.7-0.3-1.1c0-0.5,0.1-0.9,0.4-1.2 + c0.3-0.3,0.6-0.4,1-0.4c0.4,0,0.7,0.1,0.9,0.3C449.8,290.4,449.9,290.7,449.9,291.1z"/> + + h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H458.1z M457.3,291.2 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H457.3z"/> + s-0.1,0-0.2,0v-0.6l0.1,0c0.1,0,0.2,0,0.2,0c0.1,0,0.1,0,0.2-0.1c0,0,0.1-0.1,0.1-0.2c0-0.1,0.1-0.2,0-0.2l-1.1-3.1h0.9 + L459.9,292.3z"/> + h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H464.3z M463.6,291.2 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H463.6z"/> - - + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C466.6,290.8,466.6,290.8,466.4,290.8 + C466.5,290.8,466.4,290.8,466.4,290.8z"/> + + - - + + h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H489.4z M488.7,291.2 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H488.7z"/> - + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C491.7,290.8,491.7,290.8,491.5,290.8 + C491.6,290.8,491.5,290.8,491.5,290.8z"/> + + c0.1-0.3,0.4-0.5,0.8-0.8c0.4-0.3,0.6-0.4,0.7-0.6c0.2-0.2,0.2-0.4,0.2-0.6C458.8,295.8,458.8,295.6,458.7,295.5z"/> - + + + + + + + + + + + + + + + + + + + + + + + + + + - - + - + c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.1,0.1-0.1,0.2c0,0.1,0,0.2,0.1,0.2c0.1,0,0.3,0.1,0.8,0.2c0.3,0.1,0.5,0.2,0.7,0.3 + c0.2,0.2,0.2,0.3,0.2,0.6c0,0.3-0.1,0.5-0.3,0.7c-0.2,0.2-0.6,0.3-1,0.3c-0.5,0-0.8-0.1-1-0.3c-0.2-0.2-0.3-0.5-0.3-0.8h0.8 + c0,0.1,0.1,0.2,0.1,0.3c0.1,0.1,0.3,0.2,0.5,0.2c0.2,0,0.3,0,0.4-0.1s0.1-0.1,0.1-0.2c0-0.1,0-0.2-0.1-0.2s-0.3-0.1-0.8-0.2 + c-0.3-0.1-0.6-0.2-0.7-0.3c-0.1-0.1-0.2-0.3-0.2-0.5c0-0.3,0.1-0.5,0.3-0.7c0.2-0.2,0.5-0.3,0.9-0.3 + C377.7,958.1,378,958.2,378.2,958.3z"/> + + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C382.9,958.9,382.8,958.9,382.7,958.9 + C382.7,958.9,382.7,958.9,382.7,958.9z"/> + M389.1,960.2c0.1,0.3,0.3,0.4,0.6,0.4c0.2,0,0.3-0.1,0.5-0.2c0.1-0.1,0.2-0.4,0.2-0.7c0-0.3-0.1-0.5-0.2-0.7 + c-0.1-0.1-0.3-0.2-0.5-0.2c-0.3,0-0.5,0.1-0.6,0.4c-0.1,0.1-0.1,0.3-0.1,0.5C389,959.9,389,960,389.1,960.2z"/> - - + + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C375.5,964.6,375.5,964.6,375.3,964.6 + C375.4,964.6,375.3,964.6,375.3,964.6z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.2,0,0.5,0,0.7,0.1s0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.1,0,0.3,0,0.6 + h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H378.6z M377.8,965 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H377.8z"/> @@ -1218,189 +1334,199 @@ c-0.1,0.1-0.2,0.2-0.2,0.3c-0.2,0.1-0.4,0.2-0.6,0.2c-0.4,0-0.7-0.1-0.9-0.4s-0.3-0.6-0.3-1.1c0-0.4,0.1-0.8,0.3-1.1 c0.2-0.3,0.5-0.5,0.9-0.5c0.2,0,0.3,0,0.4,0.1c0.2,0.1,0.3,0.2,0.5,0.4v-0.4h0.8v2.8c0,0.4-0.1,0.7-0.2,0.9 c-0.2,0.3-0.7,0.5-1.3,0.5c-0.4,0-0.7-0.1-0.9-0.2c-0.2-0.2-0.4-0.4-0.4-0.7h0.9C383.4,967.3,383.4,967.3,383.4,967.4z - M383.3,965.8c0.1,0.3,0.3,0.4,0.6,0.4c0.2,0,0.3-0.1,0.5-0.2c0.1-0.1,0.2-0.4,0.2-0.7s-0.1-0.5-0.2-0.7c-0.1-0.1-0.3-0.2-0.5-0.2 - c-0.3,0-0.5,0.1-0.6,0.4c-0.1,0.1-0.1,0.3-0.1,0.5C383.2,965.5,383.2,965.7,383.3,965.8z"/> + M383.3,965.8c0.1,0.3,0.3,0.4,0.6,0.4c0.2,0,0.3-0.1,0.5-0.2c0.1-0.1,0.2-0.4,0.2-0.7c0-0.3-0.1-0.5-0.2-0.7 + c-0.1-0.1-0.3-0.2-0.5-0.2c-0.3,0-0.5,0.1-0.6,0.4c-0.1,0.1-0.1,0.3-0.1,0.5C383.2,965.5,383.2,965.7,383.3,965.8z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.2,0,0.5,0,0.7,0.1s0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.1,0,0.3,0,0.6 + h-2.1c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H388.6z M387.8,965 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H387.8z"/> + c0-0.5,0-0.8-0.1-1.1s-0.2-0.3-0.5-0.3s-0.4,0.1-0.5,0.3s-0.1,0.6-0.1,1.1c0,0.5,0,0.8,0.1,1.1s0.2,0.4,0.5,0.4 + S373.5,971.8,373.6,971.6z"/> - + + c-0.2,0.1-0.2,0.3-0.2,0.6c0,0.2,0.1,0.4,0.2,0.5c0.1,0.1,0.3,0.2,0.4,0.2c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.2-0.3,0.2-0.5 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2C379.3,970.5,379.1,970.6,379,970.6z"/> - + + c0.2-0.1,0.3-0.3,0.3-0.5c0-0.2-0.1-0.4-0.3-0.4C695.1,622.7,695,622.7,694.8,622.7z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C700.2,622.2,700.2,622.2,700.1,622.2 + C700.1,622.2,700.1,622.2,700.1,622.2z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C712.2,622.2,712.1,622.2,712,622.2C712,622.2,712,622.2,712,622.2z"/> - + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C728,622.2,727.9,622.2,727.8,622.2C727.8,622.2,727.8,622.2,727.8,622.2z + "/> + - + + c0.2-0.3,0.5-0.5,0.9-0.5c0.2,0,0.3,0,0.4,0.1c0.2,0.1,0.3,0.2,0.5,0.4v-0.4h0.8v2.8c0,0.4-0.1,0.7-0.2,0.9 + c-0.2,0.3-0.7,0.5-1.3,0.5c-0.4,0-0.7-0.1-0.9-0.2c-0.2-0.2-0.4-0.4-0.4-0.7h0.9C738,624.9,738,625,738.1,625z M738,623.5 + c0.1,0.3,0.3,0.4,0.6,0.4c0.2,0,0.3-0.1,0.5-0.2c0.1-0.1,0.2-0.4,0.2-0.7c0-0.3-0.1-0.5-0.2-0.7c-0.1-0.1-0.3-0.2-0.5-0.2 + c-0.3,0-0.5,0.1-0.6,0.4c-0.1,0.1-0.1,0.3-0.1,0.5C737.9,623.2,737.9,623.3,738,623.5z"/> - + - + c0-0.5,0-0.8-0.1-1.1s-0.2-0.3-0.5-0.3s-0.4,0.1-0.5,0.3s-0.1,0.6-0.1,1.1c0,0.5,0,0.8,0.1,1.1s0.2,0.4,0.5,0.4 + S717.6,629.5,717.7,629.2z"/> + + c0.1,0.3,0.3,0.6,0.5,1.1H693.2z"/> + c-0.1,0.1-0.2,0.2-0.3,0.2c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.2-0.1,0.5-0.2,0.6c-0.1,0.1-0.2,0.2-0.3,0.3 + c-0.1,0.1-0.3,0.2-0.5,0.2C696.5,704,696.4,704,696.1,704z M696.5,701.4c0.1-0.1,0.2-0.2,0.2-0.4c0-0.2-0.1-0.3-0.2-0.4 + c-0.1,0-0.3-0.1-0.5-0.1h-0.9v0.9h1C696.3,701.5,696.4,701.5,696.5,701.4z M696.1,702.2h-1v1.1h1c0.2,0,0.3,0,0.4-0.1 + c0.2-0.1,0.3-0.3,0.3-0.5c0-0.2-0.1-0.4-0.3-0.4C696.4,702.2,696.3,702.2,696.1,702.2z"/> - - + l-0.4-0.1c-0.4-0.1-0.7-0.2-0.9-0.3c-0.3-0.2-0.4-0.5-0.4-0.9c0-0.4,0.1-0.7,0.4-0.9c0.3-0.2,0.7-0.4,1.2-0.4 + c0.4,0,0.8,0.1,1.1,0.3c0.3,0.2,0.5,0.6,0.5,1h-0.8c0-0.2-0.1-0.4-0.3-0.5c-0.1-0.1-0.3-0.1-0.5-0.1c-0.2,0-0.4,0-0.5,0.1 + c-0.1,0.1-0.2,0.2-0.2,0.4c0,0.1,0.1,0.3,0.2,0.3c0.1,0,0.3,0.1,0.5,0.2l0.7,0.2c0.3,0.1,0.5,0.2,0.7,0.3c0.2,0.2,0.4,0.5,0.4,0.8 + c0,0.4-0.1,0.7-0.4,0.9c-0.3,0.2-0.7,0.4-1.2,0.4c-0.5,0-0.9-0.1-1.2-0.4c-0.3-0.2-0.5-0.6-0.5-1h0.8c0,0.2,0.1,0.3,0.2,0.4 + C709,703.3,709.2,703.4,709.6,703.4z"/> + - + c-0.5,0-0.9-0.2-1.2-0.5c-0.3-0.3-0.4-0.7-0.4-1.1c0-0.4,0.1-0.8,0.4-1.1c0.3-0.3,0.6-0.5,1.2-0.5 + C715.5,700.9,715.9,701.1,716.2,701.4z M714.1,699.9h0.7v0.7h-0.7V699.9z M715,701.6c-0.2,0-0.4,0.1-0.5,0.2 + c-0.1,0.2-0.2,0.4-0.2,0.7c0,0.3,0.1,0.5,0.2,0.7c0.1,0.2,0.3,0.2,0.5,0.2s0.4-0.1,0.5-0.2c0.1-0.2,0.2-0.4,0.2-0.7 + c0-0.3-0.1-0.5-0.2-0.7C715.4,701.6,715.2,701.6,715,701.6z M715.2,699.9h0.7v0.7h-0.7V699.9z"/> + + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C725.4,701.7,725.3,701.7,725.2,701.7 + C725.3,701.7,725.2,701.7,725.2,701.7z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C744.6,701.7,744.6,701.7,744.4,701.7 + C744.5,701.7,744.5,701.7,744.4,701.7z"/> - + - + + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2C724.7,707.7,724.5,707.7,724.4,707.8z"/> + c0.1,0.3,0.3,0.6,0.5,1.1H582.3z"/> + c0.2-0.1,0.3-0.3,0.3-0.5c0-0.2-0.1-0.4-0.3-0.4C585.5,661.8,585.4,661.8,585.2,661.8z"/> @@ -1408,148 +1534,155 @@ c0.1,0.2,0.1,0.5,0.1,0.7c0,0.5-0.1,1-0.3,1.4C593.7,663.3,593.3,663.6,592.6,663.6z M593.3,660.6c-0.1-0.2-0.4-0.3-0.8-0.3h-0.8 v2.7h0.8c0.4,0,0.7-0.2,0.8-0.6c0.1-0.2,0.1-0.5,0.1-0.8C593.5,661.1,593.4,660.8,593.3,660.6z"/> - + v-0.6h0.4v-0.2c0-0.3,0.1-0.5,0.2-0.7c0.1-0.2,0.4-0.3,0.8-0.3c0,0,0.1,0,0.1,0C608.1,659.5,608.2,659.5,608.2,659.5z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C613.5,661.3,613.5,661.3,613.4,661.3 + C613.4,661.3,613.4,661.3,613.4,661.3z"/> - + l-0.4-0.1c-0.4-0.1-0.7-0.2-0.9-0.3c-0.3-0.2-0.4-0.5-0.4-0.9c0-0.4,0.1-0.7,0.4-0.9c0.3-0.2,0.7-0.4,1.2-0.4 + c0.4,0,0.8,0.1,1.1,0.3c0.3,0.2,0.5,0.6,0.5,1H572c0-0.2-0.1-0.4-0.3-0.5c-0.1-0.1-0.3-0.1-0.5-0.1c-0.2,0-0.4,0-0.5,0.1 + c-0.1,0.1-0.2,0.2-0.2,0.4c0,0.1,0.1,0.3,0.2,0.3c0.1,0,0.3,0.1,0.5,0.2l0.7,0.2c0.3,0.1,0.5,0.2,0.7,0.3c0.2,0.2,0.4,0.5,0.4,0.8 + c0,0.4-0.1,0.7-0.4,0.9c-0.3,0.2-0.7,0.4-1.2,0.4c-0.5,0-0.9-0.1-1.2-0.4c-0.3-0.2-0.5-0.6-0.5-1h0.8c0,0.2,0.1,0.3,0.2,0.4 + C570.7,668.6,571,668.6,571.3,668.6z"/> - + c0.3-0.3,0.6-0.4,1-0.4c0.4,0,0.7,0.1,0.9,0.3C576,666.6,576.1,666.9,576.1,667.3z"/> + - + - - - + v-0.6h0.4v-0.2c0-0.3,0.1-0.5,0.2-0.7c0.1-0.2,0.4-0.3,0.8-0.3c0,0,0.1,0,0.1,0C588,665.1,588.1,665.1,588.1,665.1z"/> + + + - + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C614.1,667,614.1,667,613.9,667C614,667,614,667,613.9,667z"/> - - + + - + c0.3-0.3,0.6-0.4,1-0.4c0.4,0,0.7,0.1,0.9,0.3C623.6,666.6,623.8,666.9,623.8,667.3z"/> + - + - + - + h-0.8l-0.8-3.4c0,0.1,0,0.2,0,0.3s0,0.3,0,0.3V513.5z"/> + s-0.1,0-0.2,0v-0.6l0.1,0c0.1,0,0.2,0,0.2,0c0.1,0,0.1,0,0.2-0.1c0,0,0.1-0.1,0.1-0.2c0-0.1,0.1-0.2,0-0.2l-1.1-3.1h0.9 + L229.6,512.7z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C236.4,511.3,236.3,511.3,236.2,511.3 + C236.3,511.3,236.2,511.3,236.2,511.3z"/> - + c0.3-0.3,0.6-0.4,1-0.4c0.4,0,0.7,0.1,0.9,0.3C253.1,510.9,253.2,511.2,253.3,511.6z"/> + + s-0.1,0-0.2,0v-0.6l0.1,0c0.1,0,0.2,0,0.2,0c0.1,0,0.1,0,0.2-0.1c0,0,0.1-0.1,0.1-0.2c0-0.1,0.1-0.2,0-0.2l-1.1-3.1h0.9 + L262.9,512.7z"/> - - + c-0.3,0-0.6,0.1-0.7,0.4c-0.2,0.2-0.3,0.6-0.3,1.1c0,0.5,0.1,0.8,0.3,1c0.2,0.2,0.4,0.3,0.7,0.3c0.3,0,0.5-0.1,0.7-0.3 + c0.1-0.1,0.2-0.3,0.2-0.5h0.8C224.1,518.2,223.9,518.6,223.6,518.9z"/> + + c0.3-0.3,0.6-0.4,1-0.4c0.4,0,0.7,0.1,0.9,0.3C235.6,516.5,235.7,516.8,235.8,517.3z"/> - - + + - + + c0.2-0.1,0.3-0.3,0.3-0.5c0-0.2-0.1-0.4-0.3-0.4C240.9,523.1,240.7,523,240.6,523z"/> + c0.1,0.2,0.2,0.2,0.4,0.2c0.3,0,0.5-0.1,0.6-0.3c0.1-0.1,0.1-0.3,0.1-0.5v-1.6h0.8v3h-0.8V524.4z M243.2,520.7h0.7v0.7h-0.7V520.7 + z M244.3,520.7h0.7v0.7h-0.7V520.7z"/> @@ -1647,467 +1781,172 @@ C253,522.5,252.8,522.4,252.6,522.4z"/> + c0.2-0.3,0.5-0.5,0.9-0.5c0.2,0,0.3,0,0.4,0.1c0.2,0.1,0.3,0.2,0.5,0.4v-0.4h0.8v2.8c0,0.4-0.1,0.7-0.2,0.9 + c-0.2,0.3-0.7,0.5-1.3,0.5c-0.4,0-0.7-0.1-0.9-0.2c-0.2-0.2-0.4-0.4-0.4-0.7h0.9C255.4,525.2,255.5,525.3,255.5,525.3z + M255.4,523.8c0.1,0.3,0.3,0.4,0.6,0.4c0.2,0,0.3-0.1,0.5-0.2c0.1-0.1,0.2-0.4,0.2-0.7c0-0.3-0.1-0.5-0.2-0.7 + c-0.1-0.1-0.3-0.2-0.5-0.2c-0.3,0-0.5,0.1-0.6,0.4c-0.1,0.1-0.1,0.3-0.1,0.5C255.3,523.5,255.3,523.7,255.4,523.8z"/> + c0-0.1,0-0.1,0-0.2h0.7V530.5z"/> - + + c-0.2,0.3-0.6,0.4-1.1,0.4c-0.4,0-0.7-0.1-0.9-0.3s-0.4-0.5-0.4-0.9h0.8c0,0.2,0.1,0.3,0.2,0.4s0.2,0.1,0.4,0.1 + c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.2-0.3,0.2-0.5c0-0.2,0-0.4-0.1-0.5C239.8,528.5,239.7,528.5,239.5,528.5z"/> - - - + + c-0.1,0.1-0.1,0.3-0.1,0.5c0,0.3,0.1,0.6,0.3,0.7c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.4-0.1,0.5-0.3 + C224,473.7,224.1,473.4,224.1,473.2z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C238.7,472.4,238.7,472.4,238.6,472.4 + C238.6,472.4,238.6,472.4,238.6,472.4z"/> - + - - + - + - + - + c-0.2-0.3-0.4-0.6-0.4-1.1c0-0.5,0.1-0.9,0.4-1.2c0.2-0.3,0.6-0.4,0.9-0.4c0.2,0,0.3,0,0.5,0.1s0.3,0.2,0.3,0.3v-1.4H222.6z + M220.5,478.8c0,0.3,0.1,0.5,0.2,0.7c0.1,0.2,0.3,0.3,0.5,0.3c0.2,0,0.4-0.1,0.5-0.2c0.1-0.2,0.2-0.4,0.2-0.6 + c0-0.4-0.1-0.6-0.3-0.8c-0.1-0.1-0.2-0.1-0.4-0.1c-0.2,0-0.4,0.1-0.5,0.3C220.5,478.3,220.5,478.6,220.5,478.8z"/> + - + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C228.4,478,228.4,478,228.3,478C228.3,478,228.3,478,228.3,478z"/> + - + + c0.4-0.4,0.8-0.6,1.4-0.6c0.5,0,0.9,0.1,1.2,0.4c0.3,0.3,0.5,0.6,0.5,1h-0.8c-0.1-0.3-0.2-0.5-0.5-0.6c-0.1-0.1-0.3-0.1-0.5-0.1 + c-0.3,0-0.6,0.1-0.8,0.4c-0.2,0.2-0.3,0.6-0.3,1.1c0,0.5,0.1,0.9,0.3,1.1c0.2,0.2,0.5,0.3,0.8,0.3c0.3,0,0.5-0.1,0.7-0.2 + c0.2-0.2,0.3-0.4,0.3-0.6h-0.9v-0.7h1.7v2.2H243l-0.1-0.5C242.7,480,242.6,480.1,242.5,480.2z"/> - + - + c0.1-0.1,0.3-0.1,0.5-0.1c0.4,0,0.7,0.1,0.9,0.4c0.2,0.3,0.3,0.7,0.3,1.1c0,0.5-0.1,0.9-0.3,1.2 + C254.5,480.2,254.2,480.4,253.8,480.4z M254.2,478.8c0-0.2,0-0.4-0.1-0.5c-0.1-0.3-0.3-0.4-0.6-0.4c-0.3,0-0.5,0.1-0.6,0.4 + c-0.1,0.1-0.1,0.3-0.1,0.5c0,0.3,0.1,0.5,0.2,0.6c0.1,0.2,0.3,0.3,0.5,0.3c0.2,0,0.4-0.1,0.5-0.2 + C254.1,479.3,254.2,479.1,254.2,478.8z"/> + + c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.1,0.1-0.1,0.2c0,0.1,0,0.2,0.1,0.2c0.1,0,0.3,0.1,0.8,0.2c0.3,0.1,0.5,0.2,0.7,0.3 + c0.2,0.2,0.2,0.3,0.2,0.6c0,0.3-0.1,0.5-0.3,0.7c-0.2,0.2-0.6,0.3-1,0.3c-0.5,0-0.8-0.1-1-0.3c-0.2-0.2-0.3-0.5-0.3-0.8h0.8 + c0,0.1,0.1,0.2,0.1,0.3c0.1,0.1,0.3,0.2,0.5,0.2c0.2,0,0.3,0,0.4-0.1s0.1-0.1,0.1-0.2c0-0.1,0-0.2-0.1-0.2s-0.3-0.1-0.8-0.2 + c-0.3-0.1-0.6-0.2-0.7-0.3c-0.1-0.1-0.2-0.3-0.2-0.5c0-0.3,0.1-0.5,0.3-0.7c0.2-0.2,0.5-0.3,0.9-0.3 + C260.6,477.2,260.9,477.3,261.1,477.4z"/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - + c0-0.2,0-0.3-0.1-0.4c-0.1-0.1-0.2-0.1-0.4-0.1C229.9,482.6,229.7,482.6,229.7,482.7z"/> + + + @@ -2467,6 +2306,57 @@ c0.1-2.4,1.9-4.2,4.4-4.2l2.4-0.1c1.8,0,3.4,1.5,3.4,3.3H312.8z"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2866,6 +2783,33 @@ c0.1-2.4,1.9-4.2,4.4-4.2l2.4-0.1c1.8,0,3.4,1.5,3.4,3.3L313.5,400z"/> + + + + + + + + + + + + + + + + + + + @@ -3251,6 +3195,138 @@ c-2.4-0.1-4.2-1.9-4.2-4.4l-0.1-2.4C584.1,517.8,585.6,516.2,587.4,516.1L587.4,516.1z"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3278,6 +3354,33 @@ c-2.4-0.1-4.2-1.9-4.2-4.4l-0.1-2.4C708.1,897.5,709.6,895.9,711.4,895.8L711.4,895.8z"/> + + + + + + + + + + + + + + + + + + + @@ -3571,7 +3674,7 @@ - + @@ -3658,7 +3761,7 @@ - + - + diff --git a/staff/assets/maps/munich/level_5.svg b/staff/assets/maps/munich/level_5.svg index fd706e3f0..086cf3451 100644 --- a/staff/assets/maps/munich/level_5.svg +++ b/staff/assets/maps/munich/level_5.svg @@ -21,7 +21,7 @@ .st15{fill:none;stroke:#7A8F94;stroke-width:0.561;stroke-linecap:round;stroke-miterlimit:10;} .st16{fill:none;stroke:#FFFFFF;stroke-width:8;stroke-miterlimit:10;} .st17{fill:none;stroke:#FFFFFF;stroke-width:4;stroke-miterlimit:10;} - .st18{fill:none;stroke:#FFFFFF;stroke-width:4;stroke-miterlimit:9.999;} + .st18{fill:none;stroke:#FFFFFF;stroke-width:4;stroke-miterlimit:9.9991;} .st19{fill:#EBF1F2;} .st20{fill:#767E80;} .st21{fill:none;stroke:#7A8E93;stroke-width:0.5;stroke-miterlimit:10;} @@ -80,9 +80,6 @@ - - - @@ -136,7 +133,7 @@ c0,0.1-0.1,0.3-0.1,0.6v1.6H646v-4.3H646.8z"/> + l0.8-0.5v1.1h0.7V508.6z"/> - + - + - + - - + + M129.8,801.9c0.1,0.2,0.3,0.4,0.5,0.4c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.2-0.3,0.2-0.6c0-0.3-0.1-0.5-0.2-0.6 + c-0.1-0.1-0.3-0.2-0.4-0.2c-0.3,0-0.4,0.1-0.5,0.4c-0.1,0.1-0.1,0.3-0.1,0.5C129.7,801.6,129.7,801.7,129.8,801.9z"/> - + - - + - + - + - - - + c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2,0-0.3-0.1-0.5S114.3,811.4,114.1,811.4z"/> + + + c-0.5,0-0.8-0.2-1-0.6c-0.2-0.3-0.3-0.7-0.3-1.2c0-0.3,0-0.5,0-0.7c0-0.3,0.1-0.6,0.2-0.8c0.1-0.2,0.2-0.3,0.4-0.4 + c0.2-0.1,0.4-0.2,0.6-0.2c0.3,0,0.6,0.1,0.8,0.3s0.3,0.4,0.3,0.7h-0.7c0-0.1,0-0.1-0.1-0.2c-0.1-0.1-0.2-0.2-0.4-0.2 + c-0.2,0-0.4,0.1-0.5,0.4c-0.1,0.1-0.1,0.4-0.1,0.6c0.1-0.1,0.2-0.2,0.3-0.2C122.7,810.9,122.8,810.8,123,810.8z M122.5,811.5 + c-0.1,0.1-0.2,0.3-0.2,0.5c0,0.2,0.1,0.4,0.2,0.5c0.1,0.1,0.2,0.2,0.4,0.2c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.1-0.3,0.1-0.5 + c0-0.2-0.1-0.4-0.2-0.5s-0.2-0.2-0.4-0.2C122.7,811.4,122.6,811.5,122.5,811.5z"/> - - - - - + + M128.2,713.7c0-0.2-0.1-0.3-0.2-0.4c-0.1-0.1-0.2-0.1-0.4-0.1c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.2-0.2,0.4H128.2z"/> - + + c0.1-0.2,0.2-0.3,0.3-0.4c0.1-0.1,0.3-0.2,0.5-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.7C136.8,713.3,136.8,713.3,136.7,713.3 + C136.7,713.3,136.7,713.3,136.7,713.3z"/> - + - - + + - + - + - - - + c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2,0-0.3-0.1-0.5S113.5,724,113.3,724z"/> + + + c-0.2-0.1-0.3-0.2-0.3-0.4c-0.1-0.1-0.1-0.3-0.1-0.4c0-0.3,0.1-0.5,0.3-0.7s0.5-0.3,0.9-0.3c0.4,0,0.7,0.1,0.9,0.3 + s0.3,0.4,0.3,0.7c0,0.1,0,0.2-0.1,0.4s-0.2,0.3-0.3,0.4c0.2,0.1,0.3,0.2,0.4,0.4s0.1,0.4,0.1,0.6c0,0.3-0.1,0.6-0.3,0.8 + c-0.2,0.2-0.6,0.3-1,0.3S121.3,725.8,121.1,725.6z M121.5,724.8c0,0.2,0,0.3,0.1,0.4c0.1,0.1,0.2,0.2,0.4,0.2 + c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.1-0.2,0.1-0.4c0-0.2,0-0.3-0.1-0.4s-0.2-0.1-0.4-0.1s-0.3,0-0.4,0.1 + C121.5,724.4,121.5,724.6,121.5,724.8z M121.7,723.5c0.1,0.1,0.2,0.1,0.3,0.1c0.1,0,0.3,0,0.3-0.1c0.1-0.1,0.1-0.2,0.1-0.3 + c0-0.1,0-0.3-0.1-0.3c-0.1-0.1-0.2-0.1-0.3-0.1c-0.1,0-0.3,0-0.3,0.1c-0.1,0.1-0.1,0.2-0.1,0.3 + C121.6,723.3,121.6,723.4,121.7,723.5z"/> - - - - + + - + c0,0.1,0,0.2,0,0.2c0,0,0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0,0,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.3,0.3 + c-0.2,0.1-0.3,0.1-0.5,0.1c-0.3,0-0.5-0.1-0.6-0.2c-0.2-0.1-0.2-0.3-0.2-0.6c0-0.3,0.1-0.6,0.4-0.7c0.1-0.1,0.4-0.1,0.6-0.2 + l0.2,0c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.2c-0.1,0-0.2-0.1-0.3-0.1c-0.2,0-0.3,0-0.4,0.1 + c-0.1,0.1-0.1,0.1-0.1,0.3h-0.7C114.1,630.6,114.2,630.4,114.3,630.3z M114.8,632.2c0.1,0.1,0.2,0.1,0.2,0.1c0.2,0,0.3,0,0.4-0.1 + s0.2-0.3,0.2-0.5v-0.3c0,0-0.1,0.1-0.1,0.1s-0.1,0-0.2,0l-0.2,0c-0.2,0-0.3,0.1-0.3,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C114.7,632.1,114.8,632.2,114.8,632.2z"/> + - + c0.1-0.1,0.3-0.1,0.5-0.1c0.4,0,0.7,0.1,0.9,0.4c0.2,0.3,0.3,0.6,0.3,1c0,0.4-0.1,0.8-0.3,1.1 + C127.1,632.7,126.8,632.8,126.4,632.8z M126.8,631.4c0-0.2,0-0.4-0.1-0.5c-0.1-0.2-0.3-0.4-0.5-0.4c-0.3,0-0.4,0.1-0.5,0.4 + c-0.1,0.1-0.1,0.3-0.1,0.5c0,0.2,0.1,0.4,0.2,0.6s0.3,0.2,0.5,0.2c0.2,0,0.3-0.1,0.4-0.2C126.8,631.9,126.8,631.7,126.8,631.4z" + /> + + c0.1-0.2,0.2-0.3,0.3-0.4c0.1-0.1,0.3-0.2,0.5-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.7C132.9,630.7,132.8,630.7,132.7,630.7 + C132.7,630.7,132.7,630.7,132.7,630.7z"/> - + - + c0,0.1,0,0.2,0,0.2c0,0,0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0,0,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.3,0.3 + c-0.2,0.1-0.3,0.1-0.5,0.1c-0.3,0-0.5-0.1-0.6-0.2c-0.2-0.1-0.2-0.3-0.2-0.6c0-0.3,0.1-0.6,0.4-0.7c0.1-0.1,0.4-0.1,0.6-0.2 + l0.2,0c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.2c-0.1,0-0.2-0.1-0.3-0.1c-0.2,0-0.3,0-0.4,0.1 + c-0.1,0.1-0.1,0.1-0.1,0.3h-0.7C114.6,635.9,114.6,635.7,114.8,635.5z M115.3,637.5c0.1,0.1,0.2,0.1,0.2,0.1c0.2,0,0.3,0,0.4-0.1 + s0.2-0.3,0.2-0.5v-0.3c0,0-0.1,0.1-0.1,0.1s-0.1,0-0.2,0l-0.2,0c-0.2,0-0.3,0.1-0.3,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C115.2,637.3,115.2,637.4,115.3,637.5z"/> + - + c0.1-0.2,0.2-0.3,0.3-0.4c0.1-0.1,0.3-0.2,0.5-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.7C122,635.9,122,635.9,121.9,635.9 + C121.9,635.9,121.9,635.9,121.9,635.9z"/> + - + - - - - + c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2,0-0.3-0.1-0.5S114,641.4,113.8,641.4z"/> + + + - + - - + + + c0.1-0.2,0.2-0.3,0.3-0.4c0.1-0.1,0.3-0.2,0.5-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.7C124.6,567.4,124.6,567.4,124.5,567.4 + C124.5,567.4,124.5,567.4,124.5,567.4z"/> - + M127.2,568.6c0.1,0.2,0.3,0.4,0.5,0.4c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.2-0.3,0.2-0.6c0-0.3-0.1-0.5-0.2-0.6 + c-0.1-0.1-0.3-0.2-0.4-0.2c-0.3,0-0.4,0.1-0.5,0.4c-0.1,0.1-0.1,0.3-0.1,0.5C127.1,568.3,127.2,568.4,127.2,568.6z"/> + c-0.1,0.1-0.2,0.1-0.3,0.2c0.2,0.1,0.3,0.2,0.4,0.3c0.1,0.2,0.1,0.3,0.1,0.5c0,0.2-0.1,0.4-0.2,0.6c-0.1,0.1-0.2,0.2-0.3,0.3 + c-0.1,0.1-0.3,0.2-0.4,0.2S100,574.7,99.8,574.7z M100.1,572.3c0.1-0.1,0.2-0.2,0.2-0.3c0-0.2-0.1-0.3-0.2-0.3 + c-0.1,0-0.3-0.1-0.4-0.1h-0.8v0.8h0.9C99.9,572.4,100,572.4,100.1,572.3z M99.8,573.1h-0.9v1h0.9c0.2,0,0.3,0,0.4-0.1 + c0.2-0.1,0.2-0.2,0.2-0.5c0-0.2-0.1-0.3-0.2-0.4C100,573.1,99.9,573.1,99.8,573.1z"/> - + + c-0.1,0-0.2,0.1-0.4,0.1c-0.4,0-0.7-0.1-0.8-0.4c-0.1-0.2-0.1-0.4-0.1-0.7v-1.7h0.7v1.7c0,0.2,0,0.3,0.1,0.4 + c0.1,0.1,0.2,0.2,0.4,0.2c0.2,0,0.4-0.1,0.5-0.3c0-0.1,0.1-0.3,0.1-0.4v-1.5h0.7v2.8h-0.7V574.3z M109.4,570.9h0.7v0.6h-0.7 + V570.9z M110.4,570.9h0.7v0.6h-0.7V570.9z"/> - - + + + c0,0.1,0,0.2,0,0.2c0,0,0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0,0,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.3,0.3 + c-0.2,0.1-0.3,0.1-0.5,0.1c-0.3,0-0.5-0.1-0.6-0.2c-0.2-0.1-0.2-0.3-0.2-0.6c0-0.3,0.1-0.6,0.4-0.7c0.1-0.1,0.4-0.1,0.6-0.2 + l0.2,0c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.2c-0.1,0-0.2-0.1-0.3-0.1c-0.2,0-0.3,0-0.4,0.1 + c-0.1,0.1-0.1,0.1-0.1,0.3h-0.7C129.5,572.6,129.6,572.4,129.7,572.2z M130.2,574.2c0.1,0.1,0.2,0.1,0.2,0.1c0.2,0,0.3,0,0.4-0.1 + s0.2-0.3,0.2-0.5v-0.3c0,0-0.1,0.1-0.1,0.1s-0.1,0-0.2,0l-0.2,0c-0.2,0-0.3,0.1-0.3,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C130.1,574,130.2,574.1,130.2,574.2z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0.3,0,0.5,0.1,0.7,0.2s0.3,0.4,0.3,0.7v1.9h-0.7V573c0-0.1,0-0.3-0.1-0.3 + C134.1,572.5,134,572.5,133.8,572.5z"/> - + - - - + + + + c-0.1,0.1-0.3,0.3-0.5,0.5l-0.3,0.2c-0.2,0.1-0.3,0.2-0.4,0.3c-0.1,0.1-0.1,0.1-0.2,0.2h1.6v0.6H121c0-0.3,0.1-0.5,0.2-0.7 + c0.1-0.2,0.3-0.5,0.7-0.8c0.3-0.2,0.6-0.4,0.6-0.5c0.2-0.2,0.2-0.3,0.2-0.5C122.8,577.2,122.8,577.1,122.7,577z"/> - + - + - + - + c-0.3,0.2-0.6,0.3-1.1,0.3c-0.5,0-0.9-0.1-1.2-0.3s-0.4-0.5-0.4-0.9h0.7c0,0.2,0.1,0.3,0.1,0.4C116.5,503,116.7,503.1,117,503.1z + "/> - + c0,0.1-0.1,0.3-0.1,0.5c0,0.2,0,0.4,0.1,0.5c0.1,0.2,0.2,0.3,0.5,0.3c0.2,0,0.3,0,0.4-0.1s0.1-0.2,0.1-0.4h0.7 + c0,0.2-0.1,0.4-0.2,0.6c-0.2,0.3-0.6,0.5-1,0.5c-0.4,0-0.8-0.1-1-0.4c-0.2-0.3-0.3-0.6-0.3-1c0-0.5,0.1-0.8,0.3-1.1 + c0.2-0.3,0.6-0.4,1-0.4c0.3,0,0.6,0.1,0.9,0.2S121.4,501.4,121.5,501.8z"/> + - + - + c-0.2-0.3-0.3-0.6-0.3-1c0-0.5,0.1-0.8,0.3-1.1c0.2-0.3,0.5-0.4,0.9-0.4c0.2,0,0.3,0,0.4,0.1s0.2,0.2,0.3,0.3v-1.3H135.2z + M133.3,502.2c0,0.3,0.1,0.5,0.2,0.6c0.1,0.2,0.3,0.2,0.5,0.2c0.2,0,0.4-0.1,0.5-0.2c0.1-0.2,0.2-0.4,0.2-0.6 + c0-0.3-0.1-0.6-0.3-0.7c-0.1-0.1-0.2-0.1-0.4-0.1c-0.2,0-0.4,0.1-0.5,0.2C133.3,501.8,133.3,502,133.3,502.2z"/> + + c0.1-0.2,0.2-0.3,0.3-0.4c0.1-0.1,0.3-0.2,0.5-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.7C140.4,501.5,140.3,501.5,140.2,501.5 + C140.2,501.5,140.2,501.5,140.2,501.5z"/> - + - - + c0,0.1,0,0.2,0,0.2c0,0,0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0,0,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.3,0.3 + c-0.2,0.1-0.3,0.1-0.5,0.1c-0.3,0-0.5-0.1-0.6-0.2c-0.2-0.1-0.2-0.3-0.2-0.6c0-0.3,0.1-0.6,0.4-0.7c0.1-0.1,0.4-0.1,0.6-0.2 + l0.2,0c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.2c-0.1,0-0.2-0.1-0.3-0.1c-0.2,0-0.3,0-0.4,0.1 + c-0.1,0.1-0.1,0.1-0.1,0.3h-0.7C94.4,506.7,94.5,506.5,94.6,506.3z M95.1,508.3c0.1,0.1,0.2,0.1,0.2,0.1c0.2,0,0.3,0,0.4-0.1 + s0.2-0.3,0.2-0.5v-0.3c0,0-0.1,0.1-0.1,0.1s-0.1,0-0.2,0l-0.2,0c-0.2,0-0.3,0.1-0.3,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C95,508.1,95.1,508.2,95.1,508.3z"/> + + + c0.1-0.2,0.2-0.3,0.3-0.4c0.1-0.1,0.3-0.2,0.5-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.7C104.8,506.7,104.7,506.7,104.6,506.7 + C104.6,506.7,104.6,506.7,104.6,506.7z"/> - + - + c-0.3,0.2-0.6,0.3-1.1,0.3c-0.5,0-0.9-0.1-1.2-0.3s-0.4-0.5-0.4-0.9h0.7c0,0.2,0.1,0.3,0.1,0.4 + C116,508.2,116.2,508.3,116.5,508.3z"/> - + c0,0.2,0,0.4,0.1,0.5c0.1,0.2,0.2,0.3,0.5,0.3c0.2,0,0.3,0,0.4-0.1s0.1-0.2,0.1-0.4h0.7c0,0.2-0.1,0.4-0.2,0.6 + c-0.2,0.3-0.6,0.5-1,0.5c-0.4,0-0.8-0.1-1-0.4c-0.2-0.3-0.3-0.6-0.3-1c0-0.5,0.1-0.8,0.3-1.1c0.2-0.3,0.6-0.4,1-0.4 + c0.3,0,0.6,0.1,0.9,0.2S120.9,506.6,121,507z"/> + - - - + + + + M132.7,507.2c0-0.2-0.1-0.3-0.2-0.4c-0.1-0.1-0.2-0.1-0.4-0.1c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.2-0.2,0.4H132.7z"/> - + - + M145.4,507.2c0-0.2-0.1-0.3-0.2-0.4c-0.1-0.1-0.2-0.1-0.4-0.1c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.2-0.2,0.4H145.4z"/> - + - - - + c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2,0-0.3-0.1-0.5S113.1,512.2,112.9,512.2z"/> + + + - + - - + + c0.1-0.1,0.3-0.2,0.6-0.2c0.3,0,0.5,0.1,0.7,0.2s0.3,0.4,0.3,0.7v1.9h-0.7v-1.7c0-0.1,0-0.3-0.1-0.3 + C128.3,440.7,128.2,440.7,128,440.7z"/> + M130.5,441.9c0.1,0.2,0.3,0.4,0.5,0.4c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.2-0.3,0.2-0.6c0-0.3-0.1-0.5-0.2-0.6 + c-0.1-0.1-0.3-0.2-0.4-0.2c-0.3,0-0.4,0.1-0.5,0.4c-0.1,0.1-0.1,0.3-0.1,0.5C130.4,441.7,130.5,441.8,130.5,441.9z"/> @@ -676,237 +705,67 @@ + c-0.1,0-0.2,0.1-0.4,0.1c-0.4,0-0.7-0.1-0.8-0.4c-0.1-0.2-0.1-0.4-0.1-0.7v-1.7h0.7v1.7c0,0.2,0,0.3,0.1,0.4 + c0.1,0.1,0.2,0.2,0.4,0.2c0.2,0,0.4-0.1,0.5-0.3c0-0.1,0.1-0.3,0.1-0.4v-1.5h0.7v2.8h-0.7V447.7z"/> - + c0.1-0.1,0.3-0.1,0.5-0.1c0.4,0,0.7,0.1,0.9,0.4c0.2,0.3,0.3,0.6,0.3,1c0,0.4-0.1,0.8-0.3,1.1C122.8,448,122.5,448.2,122.1,448.2 + z M122.5,446.8c0-0.2,0-0.4-0.1-0.5c-0.1-0.2-0.3-0.4-0.5-0.4c-0.3,0-0.4,0.1-0.5,0.4c-0.1,0.1-0.1,0.3-0.1,0.5 + c0,0.2,0.1,0.4,0.2,0.6s0.3,0.2,0.5,0.2c0.2,0,0.3-0.1,0.4-0.2C122.5,447.2,122.5,447,122.5,446.8z"/> + + c0.1-0.1,0.3-0.2,0.5-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.7C128.3,446,128.2,446,128.1,446C128.1,446,128.1,446,128.1,446z"/> - + - + c0,0.1,0,0.2,0,0.2c0,0,0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0,0,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.3,0.3 + c-0.2,0.1-0.3,0.1-0.5,0.1c-0.3,0-0.5-0.1-0.6-0.2c-0.2-0.1-0.2-0.3-0.2-0.6c0-0.3,0.1-0.6,0.4-0.7c0.1-0.1,0.4-0.1,0.6-0.2 + l0.2,0c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.2c-0.1,0-0.2-0.1-0.3-0.1c-0.2,0-0.3,0-0.4,0.1 + c-0.1,0.1-0.1,0.1-0.1,0.3h-0.7C113.7,451.2,113.8,451,113.9,450.9z M114.4,452.8c0.1,0.1,0.2,0.1,0.2,0.1c0.2,0,0.3,0,0.4-0.1 + s0.2-0.3,0.2-0.5V452c0,0-0.1,0.1-0.1,0.1s-0.1,0-0.2,0l-0.2,0c-0.2,0-0.3,0.1-0.3,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C114.3,452.7,114.4,452.8,114.4,452.8z"/> + + c0,0.1,0,0.2,0,0.2c0,0,0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0,0,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.3,0.3 + c-0.2,0.1-0.3,0.1-0.5,0.1c-0.3,0-0.5-0.1-0.6-0.2c-0.2-0.1-0.2-0.3-0.2-0.6c0-0.3,0.1-0.6,0.4-0.7c0.1-0.1,0.4-0.1,0.6-0.2 + l0.2,0c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.2c-0.1,0-0.2-0.1-0.3-0.1c-0.2,0-0.3,0-0.4,0.1 + c-0.1,0.1-0.1,0.1-0.1,0.3h-0.7C124.4,451.2,124.5,451,124.6,450.9z M125.2,452.8c0.1,0.1,0.2,0.1,0.2,0.1c0.2,0,0.3,0,0.4-0.1 + s0.2-0.3,0.2-0.5V452c0,0-0.1,0.1-0.1,0.1s-0.1,0-0.2,0l-0.2,0c-0.2,0-0.3,0.1-0.3,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C125.1,452.7,125.1,452.8,125.2,452.8z"/> - - - + s-0.5,0.4-1,0.4c-0.4,0-0.6-0.1-0.9-0.3c-0.2-0.2-0.4-0.5-0.4-0.8h0.7c0,0.2,0.1,0.3,0.2,0.4c0.1,0.1,0.2,0.1,0.4,0.1 + c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2,0-0.3-0.1-0.5S114,456.7,113.8,456.7z"/> + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + c-0.1,0.1-0.2,0.3-0.2,0.5c0,0.2,0.1,0.4,0.2,0.5c0.1,0.1,0.2,0.2,0.4,0.2c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.1-0.3,0.1-0.5 + c0-0.2-0.1-0.4-0.2-0.5s-0.2-0.2-0.4-0.2C122.2,456.7,122.1,456.8,122,456.8z"/> @@ -1215,6 +1074,60 @@ c-2.4-0.1-4.1-1.9-4.1-4.2l-0.1-2.4c0-1.8,1.4-3.3,3.2-3.3L242.3,104.4z"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1574,6 +1487,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -1630,7 +1651,7 @@ - + - - - - + + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.2,0,0.5,0,0.7,0.1s0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.1,0,0.3,0,0.6h-2 + c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H113z M112.2,863.7 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.2-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H112.2z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C115.2,863.2,115.2,863.2,115,863.2C115.1,863.2,115.1,863.2,115,863.2z" + /> + c-0.2,0-0.4,0.1-0.5,0.2s-0.2,0.4-0.2,0.7c0,0.3,0.1,0.5,0.2,0.7s0.3,0.2,0.5,0.2c0.2,0,0.4-0.1,0.5-0.2s0.2-0.4,0.2-0.7 + c0-0.3-0.1-0.5-0.2-0.7S117.3,863.1,117,863.1z"/> - + - + c0,0.1,0,0.2,0,0.3c0,0.1,0,0.2,0,0.3V871z"/> - + - + M95.7,868.6c-0.2,0-0.4,0.1-0.5,0.2s-0.2,0.4-0.2,0.7c0,0.3,0.1,0.5,0.2,0.7s0.3,0.2,0.5,0.2c0.2,0,0.4-0.1,0.5-0.2 + s0.2-0.4,0.2-0.7c0-0.3-0.1-0.5-0.2-0.7S95.9,868.6,95.7,868.6z M95.9,867h0.7v0.6h-0.7V867z"/> + - - + c-0.2,0-0.4,0.1-0.5,0.2s-0.2,0.4-0.2,0.7c0,0.3,0.1,0.5,0.2,0.7s0.3,0.2,0.5,0.2c0.2,0,0.4-0.1,0.5-0.2s0.2-0.4,0.2-0.7 + c0-0.3-0.1-0.5-0.2-0.7S101.2,868.6,100.9,868.6z"/> + + - + c-0.2,0-0.4,0.1-0.5,0.2s-0.2,0.4-0.2,0.7c0,0.3,0.1,0.5,0.2,0.7s0.3,0.2,0.5,0.2c0.2,0,0.4-0.1,0.5-0.2s0.2-0.4,0.2-0.7 + c0-0.3-0.1-0.5-0.2-0.7S108.3,868.6,108,868.6z"/> + @@ -148,156 +148,162 @@ + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.2,0,0.5,0,0.7,0.1s0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.1,0,0.3,0,0.6h-2 + c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H126.9z M126.1,869.3 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.2-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H126.1z"/> - - - + c-0.1,0.1-0.1,0.3-0.1,0.5c0,0.2,0,0.4,0.1,0.5c0.1,0.2,0.3,0.4,0.5,0.4c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.2,0.1-0.4h0.8 + c0,0.2-0.1,0.5-0.3,0.7c-0.2,0.3-0.6,0.5-1.1,0.5c-0.5,0-0.8-0.1-1.1-0.4c-0.2-0.3-0.3-0.7-0.3-1.1c0-0.5,0.1-0.9,0.4-1.2 + c0.2-0.3,0.6-0.4,1-0.4c0.4,0,0.7,0.1,0.9,0.2C134.5,868.4,134.6,868.7,134.7,869.1z"/> + + + c0,0.1,0,0.2,0,0.2s0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0-0.1,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.4,0.1-0.6,0.1c-0.3,0-0.5-0.1-0.7-0.2c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.4,0.1-0.6,0.4-0.8c0.2-0.1,0.4-0.2,0.7-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.3s-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.1,0.2-0.1,0.3 + h-0.7C143.5,868.8,143.5,868.6,143.7,868.4z M144.3,870.5c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.5-0.1c0.1-0.1,0.2-0.3,0.2-0.5 + v-0.3c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.4,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C144.1,870.3,144.2,870.4,144.3,870.5z"/> - + c-0.2,0.1-0.2,0.3-0.2,0.6c0,0.2,0.1,0.4,0.2,0.5c0.1,0.1,0.3,0.2,0.4,0.2c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.1-0.3,0.1-0.5 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2C112.4,874.7,112.3,874.7,112.2,874.8z"/> + c0-0.1,0-0.1,0-0.2h0.6V876.6z"/> + c0-0.5,0-0.8-0.1-1.1s-0.2-0.3-0.5-0.3c-0.2,0-0.4,0.1-0.5,0.3c-0.1,0.2-0.1,0.6-0.1,1.1c0,0.5,0,0.8,0.1,1 + c0.1,0.2,0.2,0.4,0.5,0.4C119,876.1,119.1,876,119.2,875.7z"/> + c0.1-0.3,0.4-0.5,0.8-0.8c0.4-0.3,0.6-0.4,0.7-0.5c0.2-0.2,0.2-0.4,0.2-0.6C122.4,873.7,122.3,873.6,122.2,873.5z"/> - + + c-0.1,0.2-0.3,0.3-0.6,0.5l-0.3,0.2c-0.2,0.1-0.3,0.2-0.4,0.3s-0.1,0.1-0.2,0.2h1.7v0.7H81c0-0.3,0.1-0.5,0.2-0.8 + c0.1-0.3,0.4-0.5,0.8-0.8c0.4-0.3,0.6-0.4,0.7-0.5c0.2-0.2,0.2-0.4,0.2-0.6C82.9,785.1,82.9,785,82.8,784.9z"/> + c-0.1,0.1-0.2,0.2-0.3,0.2c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.2-0.1,0.5-0.2,0.6c-0.1,0.1-0.2,0.2-0.3,0.3 + c-0.1,0.1-0.3,0.2-0.5,0.2S86.4,788,86.2,788z M86.6,785.5c0.1-0.1,0.2-0.2,0.2-0.4c0-0.2-0.1-0.3-0.2-0.4c-0.1,0-0.3-0.1-0.5-0.1 + h-0.9v0.9h1C86.4,785.6,86.5,785.5,86.6,785.5z M86.2,786.2h-1v1.1h1c0.2,0,0.3,0,0.4-0.1c0.2-0.1,0.3-0.3,0.3-0.5 + c0-0.2-0.1-0.4-0.3-0.4C86.5,786.3,86.4,786.2,86.2,786.2z"/> + c0,0.1,0,0.2,0,0.3c0,0.1,0,0.2,0,0.3V788z"/> - + + c-0.2,0-0.4,0.1-0.5,0.2s-0.2,0.4-0.2,0.7c0,0.3,0.1,0.5,0.2,0.7s0.3,0.2,0.5,0.2c0.2,0,0.4-0.1,0.5-0.2s0.2-0.4,0.2-0.7 + c0-0.3-0.1-0.5-0.2-0.7S104.8,785.6,104.5,785.6z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.2,0,0.5,0,0.7,0.1s0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.1,0,0.3,0,0.6h-2 + c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H119.1z M118.3,786.2 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.2-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H118.3z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C121.3,785.8,121.2,785.8,121.1,785.8 + C121.2,785.8,121.1,785.8,121.1,785.8z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.2,0,0.5,0,0.7,0.1s0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.1,0,0.3,0,0.6h-2 + c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H124.3z M123.6,786.2 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.2-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H123.6z"/> - + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C126.5,785.8,126.5,785.8,126.4,785.8 + C126.4,785.8,126.4,785.8,126.4,785.8z"/> + - - + l-0.4-0.1c-0.4-0.1-0.7-0.2-0.9-0.3c-0.3-0.2-0.4-0.5-0.4-0.9c0-0.4,0.1-0.7,0.4-0.9c0.3-0.2,0.6-0.4,1.2-0.4 + c0.4,0,0.8,0.1,1.1,0.3s0.5,0.5,0.5,1h-0.8c0-0.2-0.1-0.4-0.3-0.5c-0.1-0.1-0.3-0.1-0.5-0.1c-0.2,0-0.4,0-0.5,0.1 + c-0.1,0.1-0.2,0.2-0.2,0.4c0,0.1,0.1,0.2,0.2,0.3c0.1,0,0.3,0.1,0.5,0.2l0.7,0.2c0.3,0.1,0.5,0.2,0.7,0.3c0.2,0.2,0.4,0.5,0.4,0.8 + c0,0.4-0.1,0.7-0.4,0.9s-0.7,0.4-1.2,0.4c-0.5,0-0.9-0.1-1.2-0.4c-0.3-0.2-0.4-0.6-0.4-1h0.8c0,0.2,0.1,0.3,0.1,0.4 + C143.1,787.3,143.3,787.4,143.6,787.4z"/> + + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.2,0,0.5,0,0.7,0.1s0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.1,0,0.3,0,0.6h-2 + c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H150.2z M149.5,786.2 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.2-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H149.5z"/> - + c-0.2,0.1-0.2,0.3-0.2,0.6c0,0.2,0.1,0.4,0.2,0.5c0.1,0.1,0.3,0.2,0.4,0.2c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.1-0.3,0.1-0.5 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2C112.4,791.6,112.3,791.7,112.2,791.8z"/> + c0-0.1,0-0.1,0-0.2h0.6V793.6z"/> + c0-0.5,0-0.8-0.1-1.1s-0.2-0.3-0.5-0.3c-0.2,0-0.4,0.1-0.5,0.3c-0.1,0.2-0.1,0.6-0.1,1.1c0,0.5,0,0.8,0.1,1 + c0.1,0.2,0.2,0.4,0.5,0.4C119,793,119.1,792.9,119.2,792.7z"/> + c0.1,0.3,0.3,0.6,0.5,1.1H94.1z"/> + c-0.1,0.1-0.2,0.2-0.3,0.2c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.2-0.1,0.5-0.2,0.6c-0.1,0.1-0.2,0.2-0.3,0.3 + c-0.1,0.1-0.3,0.2-0.5,0.2S97.2,707.3,97,707.3z M97.4,704.8c0.1-0.1,0.2-0.2,0.2-0.4c0-0.2-0.1-0.3-0.2-0.4 + c-0.1,0-0.3-0.1-0.5-0.1H96v0.9h1C97.2,704.9,97.3,704.8,97.4,704.8z M97,705.5h-1v1.1h1c0.2,0,0.3,0,0.4-0.1 + c0.2-0.1,0.3-0.3,0.3-0.5c0-0.2-0.1-0.4-0.3-0.4C97.3,705.6,97.2,705.5,97,705.5z"/> @@ -305,404 +311,425 @@ + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.2,0,0.5,0,0.7,0.1s0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.1,0,0.3,0,0.6h-2 + c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H122.4z M121.7,705.5 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.2-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H121.7z"/> + c0.1-0.1,0.3-0.1,0.5-0.1c0.4,0,0.7,0.1,0.9,0.4c0.2,0.3,0.3,0.6,0.3,1.1c0,0.5-0.1,0.8-0.3,1.1 + C125.3,707.2,125,707.4,124.6,707.4z M125,705.9c0-0.2,0-0.4-0.1-0.5c-0.1-0.3-0.3-0.4-0.6-0.4c-0.3,0-0.5,0.1-0.6,0.4 + c-0.1,0.1-0.1,0.3-0.1,0.5c0,0.3,0.1,0.5,0.2,0.6s0.3,0.2,0.5,0.2c0.2,0,0.4-0.1,0.5-0.2C125,706.3,125,706.1,125,705.9z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C128,705.1,128,705.1,127.9,705.1C127.9,705.1,127.9,705.1,127.9,705.1z" + /> + c0,0.1,0,0.2,0,0.2s0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0-0.1,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.4,0.1-0.6,0.1c-0.3,0-0.5-0.1-0.7-0.2c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.4,0.1-0.6,0.4-0.8c0.2-0.1,0.4-0.2,0.7-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.3s-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.1,0.2-0.1,0.3 + h-0.7C128.5,705,128.5,704.8,128.7,704.7z M129.2,706.7c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.5-0.1c0.1-0.1,0.2-0.3,0.2-0.5 + v-0.3c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.4,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C129.1,706.6,129.2,706.7,129.2,706.7z"/> - + c0-0.5,0.1-0.9,0.3-1.2s0.5-0.4,0.9-0.4c0.2,0,0.3,0,0.5,0.1c0.1,0.1,0.3,0.2,0.3,0.3v-1.4H137.8z M135.7,705.8 + c0,0.3,0.1,0.5,0.2,0.7c0.1,0.2,0.3,0.2,0.5,0.2c0.2,0,0.4-0.1,0.5-0.2c0.1-0.2,0.2-0.4,0.2-0.6c0-0.4-0.1-0.6-0.3-0.8 + c-0.1-0.1-0.2-0.1-0.4-0.1c-0.2,0-0.4,0.1-0.5,0.3C135.7,705.4,135.7,705.6,135.7,705.8z"/> + - + - + + c-0.2,0-0.4,0.1-0.5,0.2s-0.2,0.4-0.2,0.7c0,0.3,0.1,0.5,0.2,0.7s0.3,0.2,0.5,0.2c0.2,0,0.4-0.1,0.5-0.2s0.2-0.4,0.2-0.7 + c0-0.3-0.1-0.5-0.2-0.7S99.6,710.5,99.4,710.5z"/> - + s-0.1,0.1-0.1,0.2c0,0.1,0,0.2,0.1,0.2c0.1,0,0.3,0.1,0.8,0.2c0.3,0.1,0.5,0.2,0.7,0.3c0.2,0.1,0.2,0.3,0.2,0.6 + c0,0.3-0.1,0.5-0.3,0.7c-0.2,0.2-0.6,0.3-1,0.3c-0.5,0-0.8-0.1-1-0.3c-0.2-0.2-0.3-0.4-0.3-0.8h0.8c0,0.1,0.1,0.2,0.1,0.3 + c0.1,0.1,0.3,0.2,0.5,0.2c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2c0-0.1,0-0.2-0.1-0.2c-0.1,0-0.3-0.1-0.8-0.2 + c-0.3-0.1-0.6-0.2-0.7-0.3c-0.1-0.1-0.2-0.3-0.2-0.5c0-0.3,0.1-0.5,0.3-0.7c0.2-0.2,0.5-0.3,0.9-0.3 + C106.1,709.8,106.4,709.9,106.6,710z"/> + - + c0,0.1,0,0.2,0,0.2s0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0-0.1,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.4,0.1-0.6,0.1c-0.3,0-0.5-0.1-0.7-0.2c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.4,0.1-0.6,0.4-0.8c0.2-0.1,0.4-0.2,0.7-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.3s-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.1,0.2-0.1,0.3 + H111C111,710.6,111,710.4,111.2,710.2z M111.8,712.3c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.5-0.1c0.1-0.1,0.2-0.3,0.2-0.5v-0.3 + c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.4,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C111.6,712.2,111.7,712.3,111.8,712.3z"/> + - + + c0.2-0.3,0.5-0.5,0.9-0.5c0.1,0,0.3,0,0.4,0.1c0.2,0.1,0.3,0.2,0.5,0.4v-0.4h0.8v2.8c0,0.4-0.1,0.7-0.2,0.9 + c-0.2,0.3-0.6,0.5-1.3,0.5c-0.4,0-0.7-0.1-0.9-0.2s-0.4-0.4-0.4-0.7h0.8C134.1,713.3,134.1,713.4,134.2,713.4z M134.1,711.9 + c0.1,0.2,0.3,0.4,0.6,0.4c0.2,0,0.3-0.1,0.5-0.2s0.2-0.4,0.2-0.7c0-0.3-0.1-0.5-0.2-0.6c-0.1-0.1-0.3-0.2-0.5-0.2 + c-0.3,0-0.5,0.1-0.6,0.4c-0.1,0.1-0.1,0.3-0.1,0.5C134,711.6,134,711.7,134.1,711.9z"/> + c-0.2,0-0.4,0.1-0.5,0.2s-0.2,0.4-0.2,0.7c0,0.3,0.1,0.5,0.2,0.7s0.3,0.2,0.5,0.2c0.2,0,0.4-0.1,0.5-0.2s0.2-0.4,0.2-0.7 + c0-0.3-0.1-0.5-0.2-0.7S141.7,710.5,141.5,710.5z"/> - + + c-0.2,0.1-0.2,0.3-0.2,0.6c0,0.2,0.1,0.4,0.2,0.5c0.1,0.1,0.3,0.2,0.4,0.2c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.1-0.3,0.1-0.5 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2C112.4,716.5,112.3,716.5,112.2,716.6z"/> + c0-0.1,0-0.1,0-0.2h0.6V718.4z"/> - + + c-0.2,0.1-0.2,0.3-0.2,0.6c0,0.2,0.1,0.4,0.2,0.5c0.1,0.1,0.3,0.2,0.4,0.2c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.1-0.3,0.1-0.5 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2C121.7,716.5,121.6,716.5,121.5,716.6z"/> - + + c-0.1,0.1-0.2,0.3-0.2,0.6v1.6h-0.8v-4h0.8v1.4c0.1-0.2,0.2-0.3,0.4-0.4s0.3-0.1,0.5-0.1c0.2,0,0.3,0,0.5,0.1 + c0.1,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.1,0.2,0.1,0.3S92.1,619.2,92.1,619.5z"/> + c0,0.1,0,0.2,0,0.2s0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0-0.1,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.4,0.1-0.6,0.1c-0.3,0-0.5-0.1-0.7-0.2c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.4,0.1-0.6,0.4-0.8c0.2-0.1,0.4-0.2,0.7-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.3s-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.1,0.2-0.1,0.3 + h-0.7C92.7,618.9,92.8,618.7,92.9,618.6z M93.5,620.6c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.5-0.1c0.1-0.1,0.2-0.3,0.2-0.5v-0.3 + c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.4,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C93.4,620.5,93.4,620.6,93.5,620.6z"/> + c-0.1,0.1-0.2,0.3-0.2,0.6v1.6h-0.8v-4h0.8v1.4c0.1-0.2,0.2-0.3,0.4-0.4s0.3-0.1,0.5-0.1c0.2,0,0.3,0,0.5,0.1 + c0.1,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.1,0.2,0.1,0.3S100.1,619.2,100.1,619.5z"/> + c0,0.1,0,0.2,0,0.2s0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0-0.1,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.4,0.1-0.6,0.1c-0.3,0-0.5-0.1-0.7-0.2c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.4,0.1-0.6,0.4-0.8c0.2-0.1,0.4-0.2,0.7-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.3s-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.1,0.2-0.1,0.3 + h-0.7C100.7,618.9,100.8,618.7,100.9,618.6z M101.5,620.6c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.5-0.1c0.1-0.1,0.2-0.3,0.2-0.5 + v-0.3c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.4,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C101.4,620.5,101.4,620.6,101.5,620.6z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.2,0,0.5,0,0.7,0.1s0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.1,0,0.3,0,0.6h-2 + c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H116.4z M115.6,619.4 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.2-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H115.6z"/> - + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C118.6,619,118.6,619,118.4,618.9C118.5,619,118.4,618.9,118.4,618.9z"/> + + c0,0.1,0,0.2,0,0.2s0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0-0.1,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.4,0.1-0.6,0.1c-0.3,0-0.5-0.1-0.7-0.2c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.4,0.1-0.6,0.4-0.8c0.2-0.1,0.4-0.2,0.7-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.3s-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.1,0.2-0.1,0.3 + H132C132,618.9,132.1,618.7,132.2,618.6z M132.8,620.6c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.5-0.1c0.1-0.1,0.2-0.3,0.2-0.5v-0.3 + c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.4,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C132.7,620.5,132.7,620.6,132.8,620.6z"/> - + - + + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C149.6,619,149.5,619,149.4,618.9C149.5,619,149.4,618.9,149.4,618.9z"/> - + + c-0.2,0.1-0.2,0.3-0.2,0.6c0,0.2,0.1,0.4,0.2,0.5c0.1,0.1,0.3,0.2,0.4,0.2c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.1-0.3,0.1-0.5 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2C112.4,624.8,112.3,624.9,112.2,625z"/> + c0-0.1,0-0.1,0-0.2h0.6V626.8z"/> + c0-0.5,0-0.8-0.1-1.1s-0.2-0.3-0.5-0.3c-0.2,0-0.4,0.1-0.5,0.3c-0.1,0.2-0.1,0.6-0.1,1.1c0,0.5,0,0.8,0.1,1 + c0.1,0.2,0.2,0.4,0.5,0.4C119,626.2,119.1,626.1,119.2,625.9z"/> + s0.3-0.1,0.4-0.2c0.1-0.1,0.2-0.3,0.2-0.5c0-0.2-0.1-0.4-0.2-0.5s-0.2-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2 + S121.3,625.4,121.3,625.6z M121.5,624.3c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.2,0.1-0.4 + c0-0.2,0-0.3-0.1-0.4c-0.1-0.1-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1s-0.1,0.2-0.1,0.4C121.3,624.1,121.4,624.2,121.5,624.3z"/> + c0.1,0.3,0.3,0.6,0.5,1.1H87.6z"/> + c-0.1,0.1-0.2,0.2-0.3,0.2c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.2-0.1,0.5-0.2,0.6c-0.1,0.1-0.2,0.2-0.3,0.3 + c-0.1,0.1-0.3,0.2-0.5,0.2S90.7,545.9,90.5,545.9z M90.9,543.4c0.1-0.1,0.2-0.2,0.2-0.4c0-0.2-0.1-0.3-0.2-0.4 + c-0.1,0-0.3-0.1-0.5-0.1h-0.9v0.9h1C90.7,543.5,90.8,543.4,90.9,543.4z M90.5,544.1h-1v1.1h1c0.2,0,0.3,0,0.4-0.1 + c0.2-0.1,0.3-0.3,0.3-0.5c0-0.2-0.1-0.4-0.3-0.4C90.8,544.2,90.7,544.1,90.5,544.1z"/> - + + c-0.1,0.1-0.2,0.2-0.3,0.2c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.2-0.1,0.5-0.2,0.6c-0.1,0.1-0.2,0.2-0.3,0.3 + c-0.1,0.1-0.3,0.2-0.5,0.2S105,545.9,104.7,545.9z M105.1,543.4c0.1-0.1,0.2-0.2,0.2-0.4c0-0.2-0.1-0.3-0.2-0.4 + c-0.1,0-0.3-0.1-0.5-0.1h-0.9v0.9h1C104.9,543.5,105,543.4,105.1,543.4z M104.7,544.1h-1v1.1h1c0.2,0,0.3,0,0.4-0.1 + c0.2-0.1,0.3-0.3,0.3-0.5c0-0.2-0.1-0.4-0.3-0.4C105,544.2,104.9,544.1,104.7,544.1z"/> + c0-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.6-0.4,1-0.4c0.2,0,0.5,0,0.7,0.1s0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.1,0,0.3,0,0.6h-2 + c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H111z M110.2,544.1 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.2-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H110.2z"/> + c-0.2,0-0.3,0-0.4,0.1s-0.1,0.1-0.1,0.2c0,0.1,0,0.2,0.1,0.2c0.1,0,0.3,0.1,0.8,0.2c0.3,0.1,0.5,0.2,0.7,0.3 + c0.2,0.1,0.2,0.3,0.2,0.6c0,0.3-0.1,0.5-0.3,0.7c-0.2,0.2-0.6,0.3-1,0.3c-0.5,0-0.8-0.1-1-0.3c-0.2-0.2-0.3-0.4-0.3-0.8h0.8 + c0,0.1,0.1,0.2,0.1,0.3c0.1,0.1,0.3,0.2,0.5,0.2c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2c0-0.1,0-0.2-0.1-0.2 + c-0.1,0-0.3-0.1-0.8-0.2c-0.3-0.1-0.6-0.2-0.7-0.3c-0.1-0.1-0.2-0.3-0.2-0.5c0-0.3,0.1-0.5,0.3-0.7c0.2-0.2,0.5-0.3,0.9-0.3 + C113,542.9,113.3,542.9,113.6,543.1z"/> + c-0.2,0-0.4,0.1-0.5,0.2s-0.2,0.4-0.2,0.7c0,0.3,0.1,0.5,0.2,0.7s0.3,0.2,0.5,0.2c0.2,0,0.4-0.1,0.5-0.2s0.2-0.4,0.2-0.7 + c0-0.3-0.1-0.5-0.2-0.7S119.6,543.5,119.4,543.5z"/> - - + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C123.1,543.7,123.1,543.7,122.9,543.7C123,543.7,122.9,543.7,122.9,543.7z + "/> + + + c-0.1,0.1-0.2,0.2-0.3,0.2c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.2-0.1,0.5-0.2,0.6c-0.1,0.1-0.2,0.2-0.3,0.3 + c-0.1,0.1-0.3,0.2-0.5,0.2S130.6,545.9,130.4,545.9z M130.8,543.4c0.1-0.1,0.2-0.2,0.2-0.4c0-0.2-0.1-0.3-0.2-0.4 + c-0.1,0-0.3-0.1-0.5-0.1h-0.9v0.9h1C130.6,543.5,130.7,543.4,130.8,543.4z M130.4,544.1h-1v1.1h1c0.2,0,0.3,0,0.4-0.1 + c0.2-0.1,0.3-0.3,0.3-0.5c0-0.2-0.1-0.4-0.3-0.4C130.7,544.2,130.6,544.1,130.4,544.1z"/> + V541.8z M141,543.5c-0.2,0-0.4,0.1-0.5,0.2s-0.2,0.4-0.2,0.7c0,0.3,0.1,0.5,0.2,0.7s0.3,0.2,0.5,0.2c0.2,0,0.4-0.1,0.5-0.2 + s0.2-0.4,0.2-0.7c0-0.3-0.1-0.5-0.2-0.7S141.2,543.5,141,543.5z M141.2,541.8h0.7v0.6h-0.7V541.8z"/> - + - + c-0.2,0.1-0.2,0.3-0.2,0.6c0,0.2,0.1,0.4,0.2,0.5c0.1,0.1,0.3,0.2,0.4,0.2c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.1-0.3,0.1-0.5 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2C112.6,549.5,112.4,549.6,112.3,549.7z"/> + c0-0.1,0-0.1,0-0.2h0.6V551.5z"/> + c0-0.1,0-0.1,0-0.2h0.6V551.5z"/> + c0-0.5,0-0.8-0.1-1.1s-0.2-0.3-0.5-0.3c-0.2,0-0.4,0.1-0.5,0.3c-0.1,0.2-0.1,0.6-0.1,1.1c0,0.5,0,0.8,0.1,1 + c0.1,0.2,0.2,0.4,0.5,0.4C121.9,550.9,122.1,550.8,122.1,550.6z"/> - - + + l-0.4-0.1c-0.4-0.1-0.7-0.2-0.9-0.3c-0.3-0.2-0.4-0.5-0.4-0.9c0-0.4,0.1-0.7,0.4-0.9c0.3-0.2,0.6-0.4,1.2-0.4 + c0.4,0,0.8,0.1,1.1,0.3s0.5,0.5,0.5,1h-0.8c0-0.2-0.1-0.4-0.3-0.5c-0.1-0.1-0.3-0.1-0.5-0.1c-0.2,0-0.4,0-0.5,0.1 + c-0.1,0.1-0.2,0.2-0.2,0.4c0,0.1,0.1,0.2,0.2,0.3c0.1,0,0.3,0.1,0.5,0.2l0.7,0.2c0.3,0.1,0.5,0.2,0.7,0.3c0.2,0.2,0.4,0.5,0.4,0.8 + c0,0.4-0.1,0.7-0.4,0.9s-0.7,0.4-1.2,0.4c-0.5,0-0.9-0.1-1.2-0.4c-0.3-0.2-0.4-0.6-0.4-1h0.8c0,0.2,0.1,0.3,0.1,0.4 + C105.9,479.9,106.1,480,106.4,480z"/> + c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H111.2z M110.4,478.8 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.2-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H110.4z"/> - - + + + c-0.3,0-0.5,0.1-0.7,0.4s-0.3,0.6-0.3,1c0,0.5,0.1,0.8,0.3,1c0.2,0.2,0.4,0.3,0.7,0.3c0.3,0,0.5-0.1,0.7-0.3 + c0.1-0.1,0.2-0.3,0.2-0.5h0.8C130.9,479.7,130.7,480,130.4,480.3z"/> - - + c0,0.1,0,0.2,0,0.2s0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0-0.1,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.4,0.1-0.6,0.1c-0.3,0-0.5-0.1-0.7-0.2c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.4,0.1-0.6,0.4-0.8c0.2-0.1,0.4-0.2,0.7-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.3s-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.1,0.2-0.1,0.3 + H133C133,478.3,133.1,478.1,133.2,478z M133.8,480c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.5-0.1c0.1-0.1,0.2-0.3,0.2-0.5v-0.3 + c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.4,0.1c-0.1,0.1-0.2,0.2-0.2,0.3C133.7,479.9,133.7,480,133.8,480 + z"/> + + + c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H145.2z M144.4,478.8 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.2-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H144.4z"/> + c0.2,0,0.3-0.1,0.3-0.2c0.1-0.1,0.1-0.2,0.1-0.4h-0.5v-0.8h0.8v0.7C150,480.6,150,480.7,149.9,480.9z"/> - + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C110.1,483.9,110.1,483.9,110,483.9C110,483.9,110,483.9,110,483.9z"/> + c0,0.1,0,0.2,0,0.2s0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0-0.1,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.4,0.1-0.6,0.1c-0.3,0-0.5-0.1-0.7-0.2c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.4,0.1-0.6,0.4-0.8c0.2-0.1,0.4-0.2,0.7-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.3s-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.1,0.2-0.1,0.3 + h-0.7C110.5,483.9,110.6,483.7,110.7,483.5z M111.3,485.6c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.5-0.1c0.1-0.1,0.2-0.3,0.2-0.5 + v-0.3c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.4,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C111.2,485.5,111.2,485.6,111.3,485.6z"/> - + + h-0.4v-0.5h0.4V483c0-0.3,0.1-0.5,0.2-0.7c0.1-0.2,0.4-0.3,0.8-0.3c0,0,0.1,0,0.1,0C132,482.1,132.1,482.1,132.1,482.1z"/> + v-0.5h0.4V483c0-0.3,0.1-0.5,0.2-0.7c0.1-0.2,0.4-0.3,0.8-0.3c0,0,0.1,0,0.1,0C133.9,482.1,133.9,482.1,134,482.1z"/> + c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H138.5z M137.8,484.4 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.2-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H137.8z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C140.8,483.9,140.7,483.9,140.6,483.9 + C140.7,483.9,140.6,483.9,140.6,483.9z"/> - - - - + + + + c0.1-0.3,0.4-0.5,0.8-0.8c0.4-0.3,0.6-0.4,0.7-0.5c0.2-0.2,0.2-0.4,0.2-0.6C121.9,488.9,121.9,488.7,121.8,488.6z"/> - @@ -711,36 +738,40 @@ + c0,0.1,0,0.2,0,0.2s0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0-0.1,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.4,0.1-0.6,0.1c-0.3,0-0.5-0.1-0.7-0.2c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.4,0.1-0.6,0.4-0.8c0.2-0.1,0.4-0.2,0.7-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.3s-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.1,0.2-0.1,0.3 + h-0.7C108.6,438.5,108.7,438.3,108.8,438.2z M109.4,440.2c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.5-0.1c0.1-0.1,0.2-0.3,0.2-0.5 + v-0.3c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.4,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C109.3,440.1,109.3,440.2,109.4,440.2z"/> + c0,0.1,0,0.2,0,0.2s0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0-0.1,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.4,0.1-0.6,0.1c-0.3,0-0.5-0.1-0.7-0.2c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.4,0.1-0.6,0.4-0.8c0.2-0.1,0.4-0.2,0.7-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.3s-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.1,0.2-0.1,0.3 + h-0.7C117.9,438.5,118,438.3,118.1,438.2z M118.7,440.2c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.5-0.1c0.1-0.1,0.2-0.3,0.2-0.5 + v-0.3c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.4,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C118.6,440.1,118.6,440.2,118.7,440.2z"/> + c0.2,0,0.3-0.1,0.3-0.2c0.1-0.1,0.1-0.2,0.1-0.4h-0.5V440h0.8v0.7C121.9,440.8,121.9,440.9,121.9,441.1z"/> - + l-0.4-0.1c-0.4-0.1-0.7-0.2-0.9-0.3c-0.3-0.2-0.4-0.5-0.4-0.9c0-0.4,0.1-0.7,0.4-0.9c0.3-0.2,0.6-0.4,1.2-0.4 + c0.4,0,0.8,0.1,1.1,0.3s0.5,0.5,0.5,1h-0.8c0-0.2-0.1-0.4-0.3-0.5c-0.1-0.1-0.3-0.1-0.5-0.1c-0.2,0-0.4,0-0.5,0.1 + c-0.1,0.1-0.2,0.2-0.2,0.4c0,0.1,0.1,0.2,0.2,0.3c0.1,0,0.3,0.1,0.5,0.2l0.7,0.2c0.3,0.1,0.5,0.2,0.7,0.3c0.2,0.2,0.4,0.5,0.4,0.8 + c0,0.4-0.1,0.7-0.4,0.9s-0.7,0.4-1.2,0.4c-0.5,0-0.9-0.1-1.2-0.4c-0.3-0.2-0.4-0.6-0.4-1h0.8c0,0.2,0.1,0.3,0.1,0.4 + C132.3,440.1,132.5,440.2,132.8,440.2z"/> + + c0,0.1,0,0.2,0,0.2s0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0-0.1,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.4,0.1-0.6,0.1c-0.3,0-0.5-0.1-0.7-0.2c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.4,0.1-0.6,0.4-0.8c0.2-0.1,0.4-0.2,0.7-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.3s-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.1,0.2-0.1,0.3 + h-0.7C136.8,438.5,136.9,438.3,137,438.2z M137.6,440.2c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.5-0.1c0.1-0.1,0.2-0.3,0.2-0.5 + v-0.3c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.4,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C137.5,440.1,137.5,440.2,137.6,440.2z"/> @@ -752,312 +783,150 @@ c-0.3,0-0.5,0.1-0.6,0.4c-0.1,0.1-0.1,0.3-0.1,0.5C144,439.5,144.1,439.7,144.1,439.8z"/> + c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H149.3z M148.6,439 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.2-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H148.6z"/> - + + c0,0.1,0,0.2,0,0.2s0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0-0.1,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.4,0.1-0.6,0.1c-0.3,0-0.5-0.1-0.7-0.2c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.4,0.1-0.6,0.4-0.8c0.2-0.1,0.4-0.2,0.7-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.3s-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.1,0.2-0.1,0.3 + h-0.7C98.5,444.1,98.5,443.9,98.7,443.7z M99.2,445.8c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.5-0.1c0.1-0.1,0.2-0.3,0.2-0.5v-0.3 + c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.4,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C99.1,445.7,99.2,445.8,99.2,445.8z"/> + c-0.2,0-0.3,0-0.4,0.1s-0.1,0.1-0.1,0.2c0,0.1,0,0.2,0.1,0.2c0.1,0,0.3,0.1,0.8,0.2c0.3,0.1,0.5,0.2,0.7,0.3 + c0.2,0.1,0.2,0.3,0.2,0.6c0,0.3-0.1,0.5-0.3,0.7c-0.2,0.2-0.6,0.3-1,0.3c-0.5,0-0.8-0.1-1-0.3c-0.2-0.2-0.3-0.4-0.3-0.8h0.8 + c0,0.1,0.1,0.2,0.1,0.3c0.1,0.1,0.3,0.2,0.5,0.2c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2c0-0.1,0-0.2-0.1-0.2 + c-0.1,0-0.3-0.1-0.8-0.2c-0.3-0.1-0.6-0.2-0.7-0.3c-0.1-0.1-0.2-0.3-0.2-0.5c0-0.3,0.1-0.5,0.3-0.7c0.2-0.2,0.5-0.3,0.9-0.3 + C104.7,443.3,105,443.4,105.2,443.5z"/> + c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H108.8z M108.1,444.6 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.2-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H108.1z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C111.1,444.1,111,444.1,110.9,444.1C110.9,444.1,110.9,444.1,110.9,444.1z + "/> + c0.1,0.2,0.2,0.2,0.4,0.2c0.3,0,0.4-0.1,0.5-0.3c0.1-0.1,0.1-0.3,0.1-0.5v-1.6h0.8v3h-0.8V446z M124.7,442.3h0.7v0.6h-0.7V442.3z + M125.8,442.3h0.7v0.6h-0.7V442.3z"/> - + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C129.3,444.1,129.3,444.1,129.2,444.1 + C129.2,444.1,129.2,444.1,129.2,444.1z"/> + - + c-0.1,0.1-0.1,0.3-0.1,0.5c0,0.2,0,0.4,0.1,0.5c0.1,0.2,0.3,0.4,0.5,0.4c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.1-0.2,0.1-0.4h0.8 + c0,0.2-0.1,0.5-0.3,0.7c-0.2,0.3-0.6,0.5-1.1,0.5c-0.5,0-0.8-0.1-1.1-0.4c-0.2-0.3-0.3-0.7-0.3-1.1c0-0.5,0.1-0.9,0.4-1.2 + c0.2-0.3,0.6-0.4,1-0.4c0.4,0,0.7,0.1,0.9,0.2C135.3,443.8,135.4,444,135.5,444.5z"/> + + c0,0.1,0,0.2,0,0.2s0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0-0.1,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.4,0.1-0.6,0.1c-0.3,0-0.5-0.1-0.7-0.2c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.4,0.1-0.6,0.4-0.8c0.2-0.1,0.4-0.2,0.7-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.3s-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.1,0.2-0.1,0.3 + h-0.7C140.9,444.1,141,443.9,141.1,443.7z M141.7,445.8c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.5-0.1c0.1-0.1,0.2-0.3,0.2-0.5 + v-0.3c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.4,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C141.6,445.7,141.6,445.8,141.7,445.8z"/> - - - + c-0.2,0.1-0.2,0.3-0.2,0.6c0,0.2,0.1,0.4,0.2,0.5c0.1,0.1,0.3,0.2,0.4,0.2c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.1-0.3,0.1-0.5 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2C113.1,450,112.9,450,112.8,450.1z"/> + + + l-0.4-0.1c-0.4-0.1-0.7-0.2-0.9-0.3c-0.3-0.2-0.4-0.5-0.4-0.9c0-0.4,0.1-0.7,0.4-0.9c0.3-0.2,0.6-0.4,1.2-0.4 + c0.4,0,0.8,0.1,1.1,0.3s0.5,0.5,0.5,1h-0.8c0-0.2-0.1-0.4-0.3-0.5c-0.1-0.1-0.3-0.1-0.5-0.1c-0.2,0-0.4,0-0.5,0.1 + c-0.1,0.1-0.2,0.2-0.2,0.4c0,0.1,0.1,0.2,0.2,0.3c0.1,0,0.3,0.1,0.5,0.2l0.7,0.2c0.3,0.1,0.5,0.2,0.7,0.3c0.2,0.2,0.4,0.5,0.4,0.8 + c0,0.4-0.1,0.7-0.4,0.9s-0.7,0.4-1.2,0.4c-0.5,0-0.9-0.1-1.2-0.4c-0.3-0.2-0.4-0.6-0.4-1h0.8c0,0.2,0.1,0.3,0.1,0.4 + C218.9,377.5,219.1,377.6,219.5,377.6z"/> + l-0.4-0.1c-0.4-0.1-0.7-0.2-0.9-0.3c-0.3-0.2-0.4-0.5-0.4-0.9c0-0.4,0.1-0.7,0.4-0.9c0.3-0.2,0.6-0.4,1.2-0.4 + c0.4,0,0.8,0.1,1.1,0.3s0.5,0.5,0.5,1H227c0-0.2-0.1-0.4-0.3-0.5c-0.1-0.1-0.3-0.1-0.5-0.1c-0.2,0-0.4,0-0.5,0.1 + c-0.1,0.1-0.2,0.2-0.2,0.4c0,0.1,0.1,0.2,0.2,0.3c0.1,0,0.3,0.1,0.5,0.2l0.7,0.2c0.3,0.1,0.5,0.2,0.7,0.3c0.2,0.2,0.4,0.5,0.4,0.8 + c0,0.4-0.1,0.7-0.4,0.9s-0.7,0.4-1.2,0.4c-0.5,0-0.9-0.1-1.2-0.4c-0.3-0.2-0.4-0.6-0.4-1h0.8c0,0.2,0.1,0.3,0.1,0.4 + C225.7,377.5,225.9,377.6,226.3,377.6z"/> + c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H232.6z M231.8,376.4 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.2-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H231.8z"/> + c0,0.3,0.1,0.5,0.3,0.6c0.1,0.1,0.2,0.1,0.4,0.1c0.2,0,0.3,0,0.4-0.1c0.1,0,0.1-0.1,0.1-0.2H237.2z M236.4,376.4 + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.2-0.2-0.4-0.2c-0.2,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.2,0.3-0.2,0.5H236.4z"/> + c0.1-0.1,0.3-0.2,0.6-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.8C239.4,375.9,239.4,375.9,239.3,375.9 + C239.3,375.9,239.3,375.9,239.3,375.9z"/> - + + c0,0.1,0,0.2,0,0.2s0.1,0.1,0.1,0.1v0.1h-0.8c0-0.1,0-0.1,0-0.2c0-0.1,0-0.1,0-0.2c-0.1,0.1-0.2,0.2-0.4,0.3 + c-0.2,0.1-0.4,0.1-0.6,0.1c-0.3,0-0.5-0.1-0.7-0.2c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.4,0.1-0.6,0.4-0.8c0.2-0.1,0.4-0.2,0.7-0.2l0.3,0 + c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2-0.1-0.3s-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.1,0.2-0.1,0.3 + h-0.7C253.8,375.9,253.9,375.7,254,375.5z M254.6,377.6c0.1,0.1,0.2,0.1,0.3,0.1c0.2,0,0.3,0,0.5-0.1c0.1-0.1,0.2-0.3,0.2-0.5 + v-0.3c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.2,0.1l-0.2,0c-0.2,0-0.3,0.1-0.4,0.1c-0.1,0.1-0.2,0.2-0.2,0.3 + C254.4,377.5,254.5,377.5,254.6,377.6z"/> - + + c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.4-0.2C234,381.8,233.9,381.8,233.8,381.9z"/> + c0-0.5,0-0.8-0.1-1.1s-0.2-0.3-0.5-0.3c-0.2,0-0.4,0.1-0.5,0.3c-0.1,0.2-0.1,0.6-0.1,1.1c0,0.5,0,0.8,0.1,1 + c0.1,0.2,0.2,0.4,0.5,0.4C240.6,383.2,240.7,383.1,240.8,382.8z"/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1307,6 +1176,60 @@ c2.4,0.1,4.2,1.9,4.2,4.4l0.1,2.4C256.7,525.1,255.2,526.7,253.4,526.8L253.4,526.8z"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1503,6 +1426,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + - - + + + c0.2-0.1,0.4-0.2,0.7-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0v0.9c-0.1,0-0.1,0-0.1,0C90.1,411.2,90,411.2,90,411.2z"/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + @@ -1414,7 +1297,7 @@ - + @@ -1718,7 +1601,7 @@ - + - + @@ -2310,6 +2193,24 @@ s0.1,0.3,0.1,0.5s-0.1,0.4-0.2,0.5c-0.1,0.2-0.3,0.3-0.5,0.4s-0.4,0.1-0.7,0.1c-0.4,0-0.7-0.1-1-0.3 C232.8,750.2,232.7,749.9,232.6,749.6z"/> + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + - + - + - - - - - - - - - - - - - - - - - - diff --git a/staff/assets/maps/prague/level_09.svg b/staff/assets/maps/prague/level_09.svg index f75e58119..59995a7c7 100644 --- a/staff/assets/maps/prague/level_09.svg +++ b/staff/assets/maps/prague/level_09.svg @@ -36,12 +36,12 @@ .st30{fill:#7A8F94;stroke:#75868A;stroke-width:0.12;stroke-miterlimit:10;} .st31{opacity:5.000000e-02;fill:#030303;enable-background:new ;} .st32{fill:#F4F4F4;} - .st33{fill:#9BAEB8;stroke:#93A6AD;stroke-width:8.298428e-02;stroke-miterlimit:9.998;} + .st33{fill:#9BAEB8;stroke:#93A6AD;stroke-width:8.298820e-02;stroke-miterlimit:9.9985;} .st34{fill:#7A8F94;stroke:#75868A;stroke-width:8.000000e-02;stroke-miterlimit:10;} - .st35{fill:#9BAEB8;stroke:#93A6AD;stroke-width:7.998564e-02;stroke-miterlimit:9.9983;} + .st35{fill:#9BAEB8;stroke:#93A6AD;stroke-width:7.998922e-02;stroke-miterlimit:9.9987;} .st36{fill:#9BAEB8;stroke:#93A6AD;stroke-width:8.000000e-02;stroke-miterlimit:10;} - .st37{fill:#7A8F94;stroke:#75868A;stroke-width:7.998564e-02;stroke-miterlimit:9.9983;} - .st38{fill:#7A8F94;stroke:#75868A;stroke-width:7.798601e-02;stroke-miterlimit:9.9983;} + .st37{fill:#7A8F94;stroke:#75868A;stroke-width:7.998922e-02;stroke-miterlimit:9.9987;} + .st38{fill:#7A8F94;stroke:#75868A;stroke-width:7.798950e-02;stroke-miterlimit:9.9987;} .st39{fill:#7A8F94;stroke:#75868A;stroke-width:8.200000e-02;stroke-miterlimit:10;} .st40{fill:none;stroke:#7E8A8F;stroke-width:0.818;stroke-linecap:round;stroke-miterlimit:10;} .st41{fill:#E4E7EA;} @@ -366,9 +366,9 @@ - + - + @@ -433,9 +433,9 @@ - + - + @@ -502,9 +502,9 @@ - + - + @@ -568,9 +568,9 @@ - + - + @@ -633,9 +633,9 @@ - + - + @@ -700,9 +700,9 @@ - + - + @@ -768,9 +768,9 @@ - + - + @@ -834,9 +834,9 @@ - + - + @@ -901,9 +901,9 @@ - + - + @@ -968,9 +968,9 @@ - + - + @@ -1035,9 +1035,9 @@ - + - + @@ -1103,9 +1103,9 @@ - + - + @@ -1497,9 +1497,9 @@ - + - + @@ -1565,9 +1565,9 @@ - + - + @@ -1634,9 +1634,9 @@ - + - + @@ -1704,9 +1704,9 @@ - + - + @@ -1776,9 +1776,9 @@ - + - + @@ -1983,7 +1983,7 @@ - + @@ -2027,7 +2027,7 @@ - + @@ -2107,7 +2107,7 @@ - + @@ -2146,7 +2146,7 @@ - + @@ -2990,36 +2990,36 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -4029,9 +4029,9 @@ c0-0.2-0.1-0.3-0.1-0.5v-1.5H347v-0.3h0.3v-0.6l0.4-0.3v0.9h0.4v0.3h-0.4v1.5c0,0.1,0,0.2,0,0.2s0,0.1,0.1,0.1h0.1 C348,257.6,348.1,257.5,348.2,257.5z"/> + c-0.2-0.3-0.3-0.6-0.3-1c0-0.3,0-0.5,0.1-0.7c0.1-0.2,0.2-0.4,0.4-0.5c0.2-0.1,0.4-0.2,0.6-0.2s0.5,0.1,0.7,0.2 + c0.2,0.2,0.3,0.4,0.3,0.6l-0.4,0.1c0-0.2-0.1-0.3-0.2-0.4c-0.1-0.1-0.2-0.1-0.4-0.1c-0.2,0-0.4,0.1-0.5,0.2 + c-0.2,0.2-0.2,0.5-0.2,0.8s0,0.5,0.2,0.8c0.1,0.2,0.3,0.2,0.5,0.2s0.3-0.1,0.4-0.2C350.2,257.3,350.3,257.2,350.3,257z"/> @@ -6588,243 +6588,210 @@ + + + + + + + + + + + + + - - - - - - - - - + + + + + + + - - - - - - + c-0.1,0.1-0.2,0.3-0.2,0.5h-1.3C1246.7,680.9,1246.8,680.5,1247,680.2z M1248,683.7c0.1,0.1,0.3,0.2,0.4,0.2 + c0.3,0,0.5-0.1,0.8-0.2c0.2-0.2,0.4-0.5,0.4-0.9v-0.5c-0.1,0.1-0.2,0.1-0.2,0.1c-0.1,0-0.2,0.1-0.3,0.1l-0.3,0.1 + c-0.3,0-0.5,0.1-0.6,0.2c-0.2,0.1-0.3,0.3-0.3,0.6C1247.8,683.5,1247.9,683.6,1248,683.7z"/> + + + + + - - - - - - - - - + + + + + + + - - - - - - + c-0.1,0.1-0.2,0.3-0.2,0.5h-1.3C1320.8,424.8,1320.9,424.4,1321.1,424.1z M1322.1,427.6c0.1,0.1,0.3,0.2,0.4,0.2 + c0.3,0,0.5-0.1,0.8-0.2c0.2-0.2,0.4-0.5,0.4-0.9v-0.5c-0.1,0.1-0.2,0.1-0.2,0.1c-0.1,0-0.2,0.1-0.3,0.1l-0.3,0.1 + c-0.3,0-0.5,0.1-0.6,0.2c-0.2,0.1-0.3,0.3-0.3,0.6C1321.9,427.4,1322,427.5,1322.1,427.6z"/> + + + + + - - - - - - - - - - - - - - - + + + + - - - - - - - - - - - + + + - - - - - - + c-0.1,0.1-0.2,0.3-0.2,0.5h-1.3C1298.5,280.4,1298.6,280,1298.9,279.8z M1299.8,283.3c0.1,0.1,0.3,0.2,0.4,0.2 + c0.3,0,0.5-0.1,0.8-0.2c0.2-0.2,0.4-0.5,0.4-0.9v-0.5c-0.1,0.1-0.2,0.1-0.2,0.1c-0.1,0-0.2,0.1-0.3,0.1l-0.3,0.1 + c-0.3,0-0.5,0.1-0.6,0.2c-0.2,0.1-0.3,0.3-0.3,0.6C1299.6,283,1299.7,283.2,1299.8,283.3z"/> + + + + + diff --git a/staff/assets/maps/prague/level_10.svg b/staff/assets/maps/prague/level_10.svg index e7baafc42..b9460cde0 100644 --- a/staff/assets/maps/prague/level_10.svg +++ b/staff/assets/maps/prague/level_10.svg @@ -48,11 +48,11 @@ .st42{fill:#7A8F94;stroke:#75868A;stroke-width:0.114;stroke-miterlimit:10;} .st43{fill:#9BAEB8;stroke:#93A6AD;stroke-width:0.134;stroke-miterlimit:10;} .st44{fill:#7A8F94;stroke:#75868A;stroke-width:8.300000e-02;stroke-miterlimit:10;} - .st45{fill:#9BAEB8;stroke:#93A6AD;stroke-width:8.501413e-02;stroke-miterlimit:10.0046;} - .st46{fill:#9BAEB8;stroke:#93A6AD;stroke-width:8.301380e-02;stroke-miterlimit:10.0046;} + .st45{fill:#9BAEB8;stroke:#93A6AD;stroke-width:8.501061e-02;stroke-miterlimit:10.0042;} + .st46{fill:#9BAEB8;stroke:#93A6AD;stroke-width:8.301035e-02;stroke-miterlimit:10.0042;} .st47{fill:#9BAEB8;stroke:#93A6AD;stroke-width:8.300000e-02;stroke-miterlimit:10;} - .st48{fill:#7A8F94;stroke:#75868A;stroke-width:8.301380e-02;stroke-miterlimit:10.0046;} - .st49{fill:#7A8F94;stroke:#75868A;stroke-width:8.101348e-02;stroke-miterlimit:10.0046;} + .st48{fill:#7A8F94;stroke:#75868A;stroke-width:8.301035e-02;stroke-miterlimit:10.0042;} + .st49{fill:#7A8F94;stroke:#75868A;stroke-width:8.101012e-02;stroke-miterlimit:10.0042;} .st50{fill:#7A8F94;stroke:#75868A;stroke-width:8.500000e-02;stroke-miterlimit:10;} .st51{fill:none;stroke:#7E8A8F;stroke-width:0.588;stroke-linecap:round;stroke-miterlimit:10;} .st52{opacity:0.65;fill:#575757;enable-background:new ;} @@ -319,9 +319,9 @@ - + - + @@ -383,9 +383,9 @@ - + - + @@ -450,9 +450,9 @@ - + - + @@ -518,9 +518,9 @@ - + - + @@ -587,9 +587,9 @@ - + - + @@ -653,9 +653,9 @@ - + - + @@ -720,9 +720,9 @@ - + - + @@ -786,9 +786,9 @@ - + - + @@ -852,9 +852,9 @@ - + - + @@ -918,9 +918,9 @@ - + - + @@ -985,9 +985,9 @@ - + - + @@ -1101,7 +1101,7 @@ l0,0l0.2-53.1C839.4,287.8,839.6,287.5,839.9,287.3z"/> - + @@ -1140,7 +1140,7 @@ - + @@ -1348,13 +1348,13 @@ - + - + - + - + - + - + - + - + - + @@ -1503,7 +1503,7 @@ - + @@ -1542,7 +1542,7 @@ c0.2,0.2,0.1,0.6-0.2,1l0,0L405,560C404.7,560.3,404.2,560.5,404,560.4L404,560.4z"/> - + @@ -1582,9 +1582,9 @@ - + - + @@ -1650,7 +1650,7 @@ - + @@ -1715,9 +1715,9 @@ - + - + @@ -1872,7 +1872,7 @@ - + @@ -1912,7 +1912,7 @@ c0.3,0.2,0.2,0.6-0.1,1l0,0l-29.3,44.3C208.8,234.2,208.4,234.4,208,234.3z"/> - + @@ -2085,9 +2085,9 @@ - + - + @@ -2150,9 +2150,9 @@ - + - + @@ -2214,7 +2214,7 @@ - + @@ -2361,9 +2361,9 @@ - + - + @@ -2882,7 +2882,7 @@ c0.1-0.2,0.6-0.2,1,0.1l0,0l42.5,31.8C1260.5,343.4,1260.7,343.7,1260.6,344z"/> - + @@ -3016,9 +3016,9 @@ - + - + @@ -3080,9 +3080,9 @@ z"/> - + - + @@ -3194,12 +3194,12 @@ - + - + @@ -3455,7 +3455,7 @@ - + @@ -3490,7 +3490,7 @@ - + @@ -3500,30 +3500,30 @@ - + - + - + - + - + - + - + - + - - - - - - - - - + + + + + + + + - - - - - - + c-0.3,0-0.5,0.1-0.6,0.2c-0.2,0.1-0.3,0.3-0.3,0.5C1145.7,556.7,1145.7,556.9,1145.8,557z"/> + + + + + - - - - - - - - - + + + + + + + + - - - - - - + c0.2,0,0.4-0.1,0.5-0.1c0.2-0.1,0.3-0.2,0.3-0.4c0-0.2-0.1-0.3-0.2-0.4s-0.3-0.1-0.6-0.1c-0.3,0-0.5,0.1-0.6,0.2s-0.2,0.3-0.2,0.5 + h-1.2C1120.2,499.7,1120.4,499.3,1120.6,499z M1121.5,502.5c0.1,0.1,0.3,0.1,0.4,0.1c0.3,0,0.5-0.1,0.8-0.2 + c0.2-0.2,0.4-0.5,0.4-0.9V501c-0.1,0.1-0.2,0.1-0.2,0.1c-0.1,0-0.2,0.1-0.3,0.1l-0.3,0.1c-0.3,0-0.5,0.1-0.6,0.2 + c-0.2,0.1-0.3,0.3-0.3,0.5C1121.3,502.2,1121.4,502.4,1121.5,502.5z"/> + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/staff/assets/maps/sao_paulo/level_23.svg b/staff/assets/maps/sao_paulo/level_23.svg index 20c6b5e49..eee6f3fa2 100644 --- a/staff/assets/maps/sao_paulo/level_23.svg +++ b/staff/assets/maps/sao_paulo/level_23.svg @@ -29,7 +29,7 @@ .st23{opacity:0.4;fill:#4196B1;enable-background:new ;} .st24{fill:#E2E8E8;} .st25{opacity:3.000000e-02;fill:#030303;enable-background:new ;} - .st26{fill:#83D8EF;stroke:#53C5F1;stroke-width:0.799;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:3.9997;} + .st26{fill:#83D8EF;stroke:#53C5F1;stroke-width:0.799;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:3.9998;} .st27{fill:#83D8EF;stroke:#53C5F1;stroke-width:0.799;stroke-linecap:round;stroke-linejoin:round;} .st28{fill:#7DCFE2;} .st29{fill:#7A8E93;} @@ -39,8 +39,8 @@ .st33{fill:#94D1D3;stroke:#8AC1C1;stroke-miterlimit:10;} .st34{fill:#4FAFC6;stroke:#5798A3;stroke-width:0.931;stroke-linecap:round;stroke-linejoin:round;} .st35{fill:#7DCFE2;stroke:#53C5F1;stroke-width:1.164;stroke-linecap:round;stroke-linejoin:round;} - .st36{fill:#83D8EF;stroke:#53C5F1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0011;} - .st37{fill:#4E9FB9;stroke:#4A90A0;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0011;} + .st36{fill:#83D8EF;stroke:#53C5F1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.001;} + .st37{fill:#4E9FB9;stroke:#4A90A0;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.001;} .st38{fill:none;stroke:#53C5F1;stroke-linecap:round;stroke-linejoin:round;} .st39{fill:#B2EDEB;stroke:#A3D8D4;stroke-miterlimit:10;} .st40{fill:#1E7E9B;} @@ -48,7 +48,7 @@ .st42{fill:#4E9FB9;stroke:#4A90A0;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round;} .st43{opacity:0.1;fill:#353C3D;enable-background:new ;} .st44{fill:#EDF6F7;} - .st45{fill:#4E9FB9;stroke:#4A90A0;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:3.9989;} + .st45{fill:#4E9FB9;stroke:#4A90A0;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:3.999;} .st46{fill:#95C6C4;} .st47{fill:#97AFAD;} .st48{fill:#7DC6A0;} @@ -75,7 +75,7 @@ .st69{fill:none;stroke:#7A8D92;stroke-width:0.885;stroke-miterlimit:10;} .st70{fill:none;stroke:#7E8A8F;stroke-width:0.869;stroke-miterlimit:10;} .st71{fill:none;stroke:#7A8D92;stroke-width:0.872;stroke-miterlimit:10;} - .st72{fill:none;stroke:#7A8D92;stroke-width:0.872;stroke-miterlimit:9.9968;} + .st72{fill:none;stroke:#7A8D92;stroke-width:0.872;stroke-miterlimit:9.997;} - + - + - + @@ -1039,9 +1039,9 @@ - + - + - + - + - + - + - + - + - + @@ -1315,9 +1315,9 @@ - + - + @@ -1332,16 +1332,16 @@ - + - + - + - + @@ -1351,9 +1351,9 @@ - + - + @@ -1363,9 +1363,9 @@ - + - + @@ -1385,9 +1385,9 @@ - + - + @@ -1432,13 +1432,13 @@ - + - + - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + @@ -624,7 +624,7 @@ - + - + - + - + - + - + - + @@ -729,7 +729,7 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2560,9 +2560,8 @@ c-0.2,0-0.3,0-0.5,0.1s-0.2,0.2-0.3,0.4s-0.1,0.5-0.1,0.9v2h-1.1L611.9,232.3L611.9,232.3z"/> - + - @@ -2679,56 +2678,56 @@ - - + + - - + - + c0.3-0.2,0.7-0.4,1.1-0.4c0,0,0.1,0,0.1,0c0,0,0.1,0,0.1,0v1.6c-0.1,0-0.2,0-0.3,0C1294.1,411.3,1294.1,411.3,1294,411.3z"/> + + c0.1-0.2,0.2-0.5,0.2-0.9v-3.3h1.6v6h-1.5V415z"/> - + - - + + c0.3-0.2,0.7-0.4,1.1-0.4c0,0,0.1,0,0.1,0c0,0,0.1,0,0.1,0v1.6c-0.1,0-0.2,0-0.3,0C1273.9,422.5,1273.8,422.5,1273.7,422.5z"/> - + - + + c0.2,0.6,0.5,1.3,1,2.1H1271.5z"/> - + c0-1.4,0.5-2.9,1.4-4.4c0.6-1,1.1-1.6,1.4-2h-4l0-1.4h5.6v1.2C1278.5,431.9,1278.2,432.3,1277.8,432.9z"/> + - + @@ -3786,71 +3785,123 @@ C341.3,395.1,341,395.5,340.8,395.8z"/> - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/staff/assets/maps/washington_dc/level_11.svg b/staff/assets/maps/washington_dc/level_11.svg index 24d4916b8..8b53cf217 100644 --- a/staff/assets/maps/washington_dc/level_11.svg +++ b/staff/assets/maps/washington_dc/level_11.svg @@ -39,7 +39,7 @@ .st33{fill:#7A8E93;} .st34{fill:#E5E8EA;} .st35{fill:#1E7E9B;} - .st36{fill:#94D1D3;stroke:#8AC1C1;stroke-width:1;stroke-miterlimit:10.0028;} + .st36{fill:#94D1D3;stroke:#8AC1C1;stroke-width:1;stroke-miterlimit:10.0024;} .st37{opacity:0.4;fill:#4BA9BF;enable-background:new ;} .st38{fill:#4E9CAF;stroke:#4A90A0;stroke-width:0.46;stroke-linecap:round;stroke-linejoin:round;} .st39{fill:#4E9FB9;stroke:#4A90A0;stroke-width:0.46;stroke-linecap:round;stroke-linejoin:round;} @@ -2115,7 +2115,7 @@ - + @@ -2970,6 +2970,62 @@ h1.1c0.4,0,0.9,0,1.3-0.1c0.2-0.1,0.3-0.2,0.4-0.3c0.1-0.2,0.2-0.3,0.1-0.5c0-0.2-0.1-0.4-0.2-0.6s-0.3-0.3-0.5-0.3h-2.2 L461.8,1113.2L461.8,1113.2L461.8,1113.2z"/> + + + + + + + + + + + + + + + + + + + + + + + @@ -3602,6 +3658,66 @@ + + + + + + + + + + + + + + + + + + + + + @@ -5339,6 +5455,50 @@ c0.2-0.2,0.3-0.5,0.4-0.9h1.5C1764.2,917.6,1763.8,918.2,1763.3,918.7z"/> + + + + + + + + + + + + + + + + + + + + + @@ -6494,35 +6654,82 @@ /> + + + + + + + + + + + + + + + + + + + + + c0-0.1,0.1-0.2,0.1-0.3h1.2V1097z"/> + c0-0.1,0.1-0.2,0.1-0.3h1.2V1097z"/> + c0.4,0.7,0.6,1.6,0.6,2.8c0,1.2-0.2,2.2-0.6,2.8S1386.4,1097.2,1385.5,1097.2z M1386.3,1095.3c0.1-0.4,0.2-1.1,0.2-1.9 + c0-0.9-0.1-1.6-0.2-2c-0.1-0.4-0.4-0.6-0.8-0.6s-0.7,0.2-0.9,0.6c-0.1,0.4-0.2,1.1-0.2,2c0,0.8,0.1,1.5,0.2,2 + c0.1,0.5,0.4,0.7,0.9,0.7S1386.2,1095.8,1386.3,1095.3z"/> - + + h-1.5l-1.4-6.3c0,0.1,0,0.3,0,0.6c0,0.3,0,0.5,0,0.6V1107.4z"/> @@ -6532,43 +6739,44 @@ + c0-0.1,0.1-0.2,0.1-0.3h1.2V1097.8z"/> + c0-0.1,0.1-0.2,0.1-0.3h1.2V1097.8z"/> + c0-0.1,0.1-0.2,0.1-0.3h1.2V1097.8z"/> - + + c0.3-0.2,0.5-0.5,0.5-0.9c0-0.4-0.2-0.7-0.5-0.8C244.6,1105,244.3,1104.9,244,1104.9z"/> - + - + + c0,0.4-0.1,0.8-0.3,1.1c-0.2,0.3-0.5,0.5-0.9,0.8l1.1,1.3c0.1-0.2,0.2-0.4,0.3-0.6c0.1-0.2,0.1-0.4,0.1-0.7h1.3 + c0,0.5-0.1,0.9-0.3,1.4c-0.1,0.3-0.3,0.6-0.5,0.9l1.4,1.6h-1.8l-0.5-0.6c-0.3,0.2-0.5,0.4-0.7,0.5 + C247.7,1118.8,247.3,1118.9,246.8,1118.9z M246.7,1115.4c-0.4,0.2-0.6,0.5-0.7,0.6c-0.1,0.2-0.2,0.4-0.2,0.6 + c0,0.2,0.1,0.5,0.3,0.7c0.2,0.2,0.5,0.3,0.8,0.3c0.2,0,0.5-0.1,0.7-0.2c0.2-0.1,0.4-0.2,0.5-0.4L246.7,1115.4z M246.6,1112.9 + c0,0.1,0,0.3,0.1,0.4c0.1,0.1,0.2,0.3,0.4,0.5c0.2-0.1,0.3-0.3,0.4-0.4c0.2-0.2,0.3-0.4,0.3-0.6c0-0.2-0.1-0.3-0.2-0.4 + s-0.3-0.2-0.5-0.2c-0.1,0-0.2,0-0.4,0.1C246.7,1112.5,246.6,1112.7,246.6,1112.9z"/> + h-1.5l-1.4-6.3c0,0.1,0,0.3,0,0.6c0,0.3,0,0.5,0,0.6V1118.7z"/> @@ -6577,287 +6785,51 @@ + c0-0.1,0.1-0.2,0.1-0.3h1.2V563.1z"/> + c0-0.1,0.1-0.2,0.1-0.3h1.2V563.1z"/> - + + c0-1.3,0.5-2.7,1.3-4.1c0.5-0.9,1-1.5,1.3-1.9h-3.7l0-1.3h5.2v1.1C2124.8,557.2,2124.5,557.5,2124.1,558.1z"/> + c0.1,0.4,0.1,0.8,0.1,1.2c0,1-0.2,1.8-0.6,2.5C2089.3,573.1,2088.4,573.5,2087.3,573.5z M2088.4,567.9c-0.2-0.4-0.7-0.6-1.4-0.6 + h-1.4v4.9h1.4c0.7,0,1.3-0.4,1.6-1.1c0.2-0.4,0.2-0.9,0.2-1.4C2088.8,568.9,2088.7,568.4,2088.4,567.9z"/> - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -6961,7 +6933,7 @@ - + @@ -7173,28 +7145,28 @@ - + - + - + - + - + - + - + - + - + - + @@ -7268,7 +7240,7 @@ c0,0.8-0.6,1.4-1.4,1.5H1012.5z M1012.5,911.5c-0.5,0-0.9,0.4-0.9,0.9v1.9c0.1,0.5,0.4,0.8,0.9,0.8h10.4c0.5-0.1,0.8-0.4,0.8-0.9 v-1.9c-0.1-0.5-0.4-0.8-0.9-0.8H1012.5z"/> - + @@ -7514,7 +7486,7 @@ 1346.7,548.8 1346.7,546.6 1343.1,546.6 1343.1,546 1347.3,546 1347.3,548.2 1349.6,548.2 1349.6,550.5 1351.9,550.5 1351.9,552.8 1354.1,552.8 "/> - + @@ -7928,7 +7900,7 @@ 1028.6,1070.2 1026.4,1070.2 1026.4,1067.9 1022.7,1067.9 1022.7,1067.3 1027,1067.3 1027,1069.6 1029.2,1069.6 1029.2,1071.8 1031.5,1071.8 1031.5,1074.1 1033.8,1074.1 "/> - + diff --git a/staff/main-es2015.js b/staff/main-es2015.js index 0b329354f..f186428ae 100644 --- a/staff/main-es2015.js +++ b/staff/main-es2015.js @@ -1913,6 +1913,7 @@ const environment_service_1 = __webpack_require__(/*! ../../../environment/src/l const store_1 = __webpack_require__(/*! @ngrx/store */ "../../node_modules/@ngrx/store/__ivy_ngcc__/fesm2015/ngrx-store.js"); const user_actions_1 = __webpack_require__(/*! ../../../user/src/lib/user.actions */ "../../libs/user/src/lib/user.actions.ts"); const operators_2 = __webpack_require__(/*! rxjs/operators */ "../../node_modules/rxjs/_esm2015/operators/index.js"); +const custom_snackbar_component_service_1 = __webpack_require__(/*! ../../../ui/src/lib/custom-snackbar-component/custom-snackbar-component.service */ "../../libs/ui/src/lib/custom-snackbar-component/custom-snackbar-component.service.ts"); const i0 = __webpack_require__(/*! @angular/core */ "../../node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); const i1 = __webpack_require__(/*! @ngrx/store */ "../../node_modules/@ngrx/store/__ivy_ngcc__/fesm2015/ngrx-store.js"); const i2 = __webpack_require__(/*! @acaprojects/ngx-heap-io */ "../../node_modules/@acaprojects/ngx-heap-io/__ivy_ngcc__/fesm2015/acaprojects-ngx-heap-io.js"); @@ -1922,8 +1923,9 @@ const i5 = __webpack_require__(/*! ./hotkeys.service */ "../../libs/data-common/ const i6 = __webpack_require__(/*! @placeos/composer */ "../../node_modules/@placeos/composer/__ivy_ngcc__/fesm2015/placeos-composer.js"); const i7 = __webpack_require__(/*! @angular/material/snack-bar */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/snack-bar.js"); const i8 = __webpack_require__(/*! ../../../environment/src/lib/environment.service */ "../../libs/environment/src/lib/environment.service.ts"); +const i9 = __webpack_require__(/*! ../../../ui/src/lib/custom-snackbar-component/custom-snackbar-component.service */ "../../libs/ui/src/lib/custom-snackbar-component/custom-snackbar-component.service.ts"); class ApplicationService extends base_1.BaseClass { - constructor(store, analytics, _app_ref, _zone, _title, _settings, _hotkeys, _composer, _snackbar, _environment) { + constructor(store, analytics, _app_ref, _zone, _title, _settings, _hotkeys, _composer, _snackbar, _environment, snack) { super(); this.store = store; this.analytics = analytics; @@ -1935,6 +1937,7 @@ class ApplicationService extends base_1.BaseClass { this._composer = _composer; this._snackbar = _snackbar; this._environment = _environment; + this.snack = snack; /** Map of state variables for Service */ this._subjects = {}; /** Map of observables for state variables */ @@ -2012,18 +2015,28 @@ class ApplicationService extends base_1.BaseClass { class: 'material-icons', content: 'info' }) { - const snackbar_ref = this._snackbar.open(message, action, { - panelClass: [type], - duration: 5000 - }); - this.subscription('snackbar_close', snackbar_ref.afterDismissed().subscribe(() => { - this.unsub('snackbar_close'); - this.unsub('notify'); - })); - if (action) { - on_action = on_action || (() => snackbar_ref.dismiss()); - this.subscription('notify', snackbar_ref.onAction().subscribe(() => on_action())); - } + this.openSnack(message, type); + // const snackbar_ref = this._snackbar.open(message, action, { + // panelClass: [type], + // duration: 5000 + // }); + // this.subscription( + // 'snackbar_close', + // snackbar_ref.afterDismissed().subscribe(() => { + // this.unsub('snackbar_close'); + // this.unsub('notify'); + // }) + // ); + // if (action) { + // on_action = on_action || (() => snackbar_ref.dismiss()); + // this.subscription( + // 'notify', + // snackbar_ref.onAction().subscribe(() => on_action()) + // ); + // } + } + openSnack(message, type) { + this.snack.openSnackBar(message, type, 5000); } /** * Create success notification popup @@ -2205,14 +2218,14 @@ class ApplicationService extends base_1.BaseClass { } } exports.ApplicationService = ApplicationService; -ApplicationService.ɵfac = function ApplicationService_Factory(t) { return new (t || ApplicationService)(i0.ɵɵinject(i1.Store), i0.ɵɵinject(i2.HeapIoService), i0.ɵɵinject(i0.ApplicationRef), i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i3.Title), i0.ɵɵinject(i4.SettingsService), i0.ɵɵinject(i5.HotkeysService), i0.ɵɵinject(i6.ComposerService), i0.ɵɵinject(i7.MatSnackBar), i0.ɵɵinject(i8.EnvironmentService)); }; +ApplicationService.ɵfac = function ApplicationService_Factory(t) { return new (t || ApplicationService)(i0.ɵɵinject(i1.Store), i0.ɵɵinject(i2.HeapIoService), i0.ɵɵinject(i0.ApplicationRef), i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i3.Title), i0.ɵɵinject(i4.SettingsService), i0.ɵɵinject(i5.HotkeysService), i0.ɵɵinject(i6.ComposerService), i0.ɵɵinject(i7.MatSnackBar), i0.ɵɵinject(i8.EnvironmentService), i0.ɵɵinject(i9.SnackBarService)); }; ApplicationService.ɵprov = i0.ɵɵdefineInjectable({ token: ApplicationService, factory: ApplicationService.ɵfac, providedIn: 'root' }); /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(ApplicationService, [{ type: core_1.Injectable, args: [{ providedIn: 'root' }] - }], function () { return [{ type: i1.Store }, { type: i2.HeapIoService }, { type: i0.ApplicationRef }, { type: i0.NgZone }, { type: i3.Title }, { type: i4.SettingsService }, { type: i5.HotkeysService }, { type: i6.ComposerService }, { type: i7.MatSnackBar }, { type: i8.EnvironmentService }]; }, null); })(); + }], function () { return [{ type: i1.Store }, { type: i2.HeapIoService }, { type: i0.ApplicationRef }, { type: i0.NgZone }, { type: i3.Title }, { type: i4.SettingsService }, { type: i5.HotkeysService }, { type: i6.ComposerService }, { type: i7.MatSnackBar }, { type: i8.EnvironmentService }, { type: i9.SnackBarService }]; }, null); })(); /***/ }), @@ -3208,6 +3221,7 @@ exports.roomFormDataToQuery = (data) => { capacity_max: exports.roomMaxCapacityToValue((_b = data === null || data === void 0 ? void 0 : data.roomSize) === null || _b === void 0 ? void 0 : _b.value), is_recurrent: data === null || data === void 0 ? void 0 : data.is_recurrent, is_multiroom: data === null || data === void 0 ? void 0 : data.is_multiroom, + merged: data === null || data === void 0 ? void 0 : data.merged, recurrence_period: data === null || data === void 0 ? void 0 : data.recurrence_period, recurrence_interval: data === null || data === void 0 ? void 0 : data.recurrence_interval, recurrence_endTz: data === null || data === void 0 ? void 0 : data.recurrence_endTz, @@ -4281,6 +4295,10 @@ class Booking extends base_api_class_1.BaseDataClass { this.booker_concierge = raw_data.booker_concierge; this.level_zone = raw_data.level_zone; this.opt_out = raw_data.opt_out; + /** + * + */ + this.merged = (raw_data === null || raw_data === void 0 ? void 0 : raw_data.merged) || null; /** * Multiroom fields */ @@ -5061,6 +5079,7 @@ function generateBookingForm(booking, use_fields, isConcierge = false, manualTim expected_attendees: new forms_1.FormControl(booking.expected_attendees), company: new forms_1.FormControl(booking.company), is_multiroom: new forms_1.FormControl(booking.is_multiroom), + merged: new forms_1.FormControl({ value: booking === null || booking === void 0 ? void 0 : booking.merged, disabled: true }), catering: new forms_1.FormControl(booking.cateringOrders.map((order) => new catering_order_class_1.CateringOrder(Object.assign(Object.assign({}, order), { booking_date: booking.startDateTz.ms, booking_timezone: booking.timezone })))), all_day: new forms_1.FormControl(!!booking.all_day), has_catering: new forms_1.FormControl(!!booking.has_catering), @@ -6014,6 +6033,7 @@ class CateringItem { this.order_anytime = !!data.order_anytime; this.image_path = data.image_path || ''; this.admin_only = data.admin_only; + this.restricted_from = data.restricted_from || 0; this.catering_type = data.catering_type; this.must_select = (_a = data.must_select) !== null && _a !== void 0 ? _a : 0; this._amount = data._amount || data.amount || 0; @@ -7354,6 +7374,20 @@ class OrganisationService extends base_service_1.BaseAPIService { }; })]; } + /** + * The function will generate filter options, excluding London. London has its own set of options as per the request. + * The filter options pertain to a subset of room type options managed by the room admin module. + * @returns filterOptions: filter options for day view space type filter + */ + getRoomFilterOptionsPerLocation() { + let internalSubSet = this.getRoomTypeSubsetDDOptions('internal_room_types'); + if (this.building.name.toLowerCase().includes('london')) { + internalSubSet = internalSubSet.filter(e => !e.value.includes('meeting') && !e.value.includes('partner')); + } + const filterOptions = []; + internalSubSet.forEach(el => filterOptions.push({ name: el.display, id: el.value })); + return filterOptions; + } } exports.OrganisationService = OrganisationService; OrganisationService.ɵfac = function OrganisationService_Factory(t) { return new (t || OrganisationService)(i0.ɵɵinject(i1.ComposerService), i0.ɵɵinject(i2.ApplicationService), i0.ɵɵinject(i3.UsersService), i0.ɵɵinject(i4.SettingsService)); }; @@ -8071,6 +8105,8 @@ class Report { } } timeConverter(UNIX_timestamp) { + if (!UNIX_timestamp) + return ''; let a = new Date(UNIX_timestamp * 1000); let months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; let year = a.getFullYear(); @@ -8078,7 +8114,7 @@ class Report { let date = a.getDate(); let hour = ((a.getHours() + 11) % 12 + 1); let suffix = a.getHours() >= 12 ? "PM" : "AM"; - let min = a.getMinutes(); + let min = a.getMinutes() === 0 ? '00' : a.getMinutes(); let time = date + ' ' + month + ' ' + year + ' - ' + hour + ':' + min + ' ' + suffix; return time; } @@ -8165,10 +8201,7 @@ class Report { if (booking.cancelled_by) { booking.cancelled_by = this.formatCancelledBy(booking.cancelled_by); } - if (booking.isCancelled) { - booking.cancelled_at_epoch = new Date(booking.cancelled_at_epoch * 1000).toLocaleString(); - } - booking.cancelled_date = booking.cancelled_at_epoch; + booking.cancelled_date = this.timeConverter(booking.cancelled_at_epoch); } catch (e) { } const remove_fields = [ @@ -8679,7 +8712,7 @@ class Space extends base_api_class_1.BaseDataClass { * Works in conjunction with available_until. * * If a room is bookable that only means you can make a booking but not when. - * Available indicates that is is available to be booked durring the queried times. + * Available indicates that it is available to be booked durring the queried times. */ get available() { var _a, _b; @@ -9097,7 +9130,7 @@ faker.seed(2560); let SERVICE; /* istanbul ignore file */ function generateMockOrganisationService() { - return Object.assign({ levelWithID: jest.fn(), listen: jest.fn(), loadOrganisation: jest.fn(), initialised: rxjs_1.of(true), building: new organisation_1.Building(generateMockBuilding({ id: 'bld-01' })), loadBuildingsWithOrg: jest.fn(), getOrganizationFiltersByRoomType: jest.fn(), getRoomTypeSubsetDDOptions: jest.fn() }, generateMockDataService('OrganisationService')); + return Object.assign({ levelWithID: jest.fn(), listen: jest.fn(), loadOrganisation: jest.fn(), initialised: rxjs_1.of(true), building: new organisation_1.Building(generateMockBuilding({ id: 'bld-01' })), loadBuildingsWithOrg: jest.fn(), getOrganizationFiltersByRoomType: jest.fn(), getRoomTypeSubsetDDOptions: jest.fn(), getRoomFilterOptionsPerLocation: jest.fn() }, generateMockDataService('OrganisationService')); } exports.generateMockOrganisationService = generateMockOrganisationService; exports.generateMockSpacesService = () => (Object.assign({ available: jest.fn() }, generateMockDataService('SpacesService'))); @@ -10489,15 +10522,15 @@ Object.defineProperty(exports, "__esModule", { value: true }); /* tslint:disable */ exports.VERSION = { "dirty": false, - "raw": "803aaeb6f", - "hash": "803aaeb6f", + "raw": "f71e31100", + "hash": "f71e31100", "distance": null, "tag": null, "semver": null, - "suffix": "803aaeb6f", + "suffix": "f71e31100", "semverString": null, "version": "0.0.0", - "time": 1728876842279 + "time": 1730271155891 }; /* tslint:enable */ @@ -10557,18 +10590,21 @@ const i5 = __webpack_require__(/*! @angular/material/button */ "../../node_modul const i6 = __webpack_require__(/*! ../../../../legacy-ui/src/lib/icon/icon.component */ "../../libs/legacy-ui/src/lib/icon/icon.component.ts"); const i7 = __webpack_require__(/*! @angular/material/tooltip */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/tooltip.js"); const i8 = __webpack_require__(/*! @angular/material/progress-spinner */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/progress-spinner.js"); +const _c0 = ["attendeesListRef"]; +const _c1 = ["locationsListRef"]; +const _c2 = ["cateringListRef"]; function BookingConfirmComponent_mat_dialog_content_0_span_8_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span"); i0.ɵɵtext(1, "Confirmed!"); i0.ɵɵelementEnd(); } } function BookingConfirmComponent_mat_dialog_content_0_span_9_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "span", 30); + i0.ɵɵelementStart(0, "span", 33); i0.ɵɵtext(1, "Requested!"); i0.ɵɵelementEnd(); } } function BookingConfirmComponent_mat_dialog_content_0_div_10_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 31); + i0.ɵɵelementStart(0, "div", 34); i0.ɵɵtext(1, "Please await confirmation of room"); i0.ɵɵelementEnd(); } } @@ -10588,9 +10624,9 @@ function BookingConfirmComponent_mat_dialog_content_0_div_25_span_3_Template(rf, i0.ɵɵelementEnd(); } } function BookingConfirmComponent_mat_dialog_content_0_div_25_div_7_Template(rf, ctx) { if (rf & 1) { - const _r31 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div", 33); - i0.ɵɵlistener("click", function BookingConfirmComponent_mat_dialog_content_0_div_25_div_7_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r31); const ctx_r30 = i0.ɵɵnextContext(3); return ctx_r30.openConflictsModal(); }); + const _r34 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div", 36); + i0.ɵɵlistener("click", function BookingConfirmComponent_mat_dialog_content_0_div_25_div_7_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r34); const ctx_r33 = i0.ɵɵnextContext(3); return ctx_r33.openConflictsModal(); }); i0.ɵɵtext(1, " Conflicts "); i0.ɵɵelementEnd(); } } @@ -10604,7 +10640,7 @@ function BookingConfirmComponent_mat_dialog_content_0_div_25_Template(rf, ctx) { i0.ɵɵelementStart(5, "div", 12); i0.ɵɵtext(6); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(7, BookingConfirmComponent_mat_dialog_content_0_div_25_div_7_Template, 2, 0, "div", 32); + i0.ɵɵtemplate(7, BookingConfirmComponent_mat_dialog_content_0_div_25_div_7_Template, 2, 0, "div", 35); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r11 = i0.ɵɵnextContext(2); @@ -10625,201 +10661,201 @@ function BookingConfirmComponent_mat_dialog_content_0_span_36_Template(rf, ctx) i0.ɵɵtext(1, "*"); i0.ɵɵelementEnd(); } } -function BookingConfirmComponent_mat_dialog_content_0_div_40_div_3_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 37); +function BookingConfirmComponent_mat_dialog_content_0_div_41_div_3_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 40); i0.ɵɵtext(1, " Notes "); i0.ɵɵelementEnd(); } if (rf & 2) { - const item_r32 = i0.ɵɵnextContext().$implicit; - const ctx_r33 = i0.ɵɵnextContext(2); - i0.ɵɵproperty("matTooltip", ctx_r33.equipment_notes[item_r32.email]); + const item_r35 = i0.ɵɵnextContext().$implicit; + const ctx_r36 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("matTooltip", ctx_r36.equipment_notes[item_r35.email]); } } -function BookingConfirmComponent_mat_dialog_content_0_div_40_div_4_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 37); +function BookingConfirmComponent_mat_dialog_content_0_div_41_div_4_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 40); i0.ɵɵtext(1, " Code "); i0.ɵɵelementEnd(); } if (rf & 2) { - const item_r32 = i0.ɵɵnextContext().$implicit; - const ctx_r34 = i0.ɵɵnextContext(2); - i0.ɵɵproperty("matTooltip", (ctx_r34.equipment_codes[item_r32.email] ? "Equipment ~ " + ctx_r34.equipment_codes[item_r32.email] : "") + (ctx_r34.catering_codes[item_r32.email] && ctx_r34.equipment_codes[item_r32.email] ? "\n" : "") + (ctx_r34.catering_codes[item_r32.email] ? "Catering ~ " + ctx_r34.catering_codes[item_r32.email] : "")); + const item_r35 = i0.ɵɵnextContext().$implicit; + const ctx_r37 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("matTooltip", (ctx_r37.equipment_codes[item_r35.email] ? "Equipment ~ " + ctx_r37.equipment_codes[item_r35.email] : "") + (ctx_r37.catering_codes[item_r35.email] && ctx_r37.equipment_codes[item_r35.email] ? "\n" : "") + (ctx_r37.catering_codes[item_r35.email] ? "Catering ~ " + ctx_r37.catering_codes[item_r35.email] : "")); } } -function BookingConfirmComponent_mat_dialog_content_0_div_40_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 34); - i0.ɵɵelementStart(1, "div", 35); +function BookingConfirmComponent_mat_dialog_content_0_div_41_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 37); + i0.ɵɵelementStart(1, "div", 38); i0.ɵɵtext(2); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(3, BookingConfirmComponent_mat_dialog_content_0_div_40_div_3_Template, 2, 1, "div", 36); - i0.ɵɵtemplate(4, BookingConfirmComponent_mat_dialog_content_0_div_40_div_4_Template, 2, 1, "div", 36); + i0.ɵɵtemplate(3, BookingConfirmComponent_mat_dialog_content_0_div_41_div_3_Template, 2, 1, "div", 39); + i0.ɵɵtemplate(4, BookingConfirmComponent_mat_dialog_content_0_div_41_div_4_Template, 2, 1, "div", 39); i0.ɵɵelementEnd(); } if (rf & 2) { - const item_r32 = ctx.$implicit; - const ctx_r14 = i0.ɵɵnextContext(2); + const item_r35 = ctx.$implicit; + const ctx_r15 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); - i0.ɵɵproperty("title", item_r32 == null ? null : item_r32.name); + i0.ɵɵproperty("title", item_r35 == null ? null : item_r35.name); i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate(item_r32 == null ? null : item_r32.local_name); + i0.ɵɵtextInterpolate(item_r35 == null ? null : item_r35.local_name); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx_r14.equipment_notes[item_r32.email]); + i0.ɵɵproperty("ngIf", ctx_r15.equipment_notes[item_r35.email]); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx_r14.equipment_codes[item_r32.email]); + i0.ɵɵproperty("ngIf", ctx_r15.equipment_codes[item_r35.email]); } } -function BookingConfirmComponent_mat_dialog_content_0_div_41_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 34); +function BookingConfirmComponent_mat_dialog_content_0_div_42_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 37); i0.ɵɵtext(1, "No Locations"); i0.ɵɵelementEnd(); } } -function BookingConfirmComponent_mat_dialog_content_0_button_42_Template(rf, ctx) { if (rf & 1) { - const _r38 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "button", 38); - i0.ɵɵlistener("click", function BookingConfirmComponent_mat_dialog_content_0_button_42_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r38); const ctx_r37 = i0.ɵɵnextContext(2); return ctx_r37.show_locations = !ctx_r37.show_locations; }); +function BookingConfirmComponent_mat_dialog_content_0_button_43_Template(rf, ctx) { if (rf & 1) { + const _r41 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "button", 41); + i0.ɵɵlistener("click", function BookingConfirmComponent_mat_dialog_content_0_button_43_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r41); const ctx_r40 = i0.ɵɵnextContext(2); return ctx_r40.toggleList("locations"); }); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r16 = i0.ɵɵnextContext(2); + const ctx_r17 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate1(" ", ctx_r16.show_locations ? "Hide" : "Show more", " Locations "); + i0.ɵɵtextInterpolate1(" ", ctx_r17.show_locations ? "Hide" : "Show more", " Locations "); } } -function BookingConfirmComponent_mat_dialog_content_0_span_46_Template(rf, ctx) { if (rf & 1) { +function BookingConfirmComponent_mat_dialog_content_0_span_47_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span"); i0.ɵɵtext(1, "*"); i0.ɵɵelementEnd(); } } -function BookingConfirmComponent_mat_dialog_content_0_div_50_span_3_Template(rf, ctx) { if (rf & 1) { +function BookingConfirmComponent_mat_dialog_content_0_div_51_span_3_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span"); i0.ɵɵtext(1, "*"); i0.ɵɵelementEnd(); } } -function BookingConfirmComponent_mat_dialog_content_0_div_50_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 21); +function BookingConfirmComponent_mat_dialog_content_0_div_51_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 22); i0.ɵɵelementStart(1, "label"); i0.ɵɵtext(2, "Booked by"); - i0.ɵɵtemplate(3, BookingConfirmComponent_mat_dialog_content_0_div_50_span_3_Template, 2, 0, "span", 1); + i0.ɵɵtemplate(3, BookingConfirmComponent_mat_dialog_content_0_div_51_span_3_Template, 2, 0, "span", 1); i0.ɵɵtext(4, ":"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(5, "div", 39); + i0.ɵɵelementStart(5, "div", 42); i0.ɵɵtext(6); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r18 = i0.ɵɵnextContext(2); + const ctx_r19 = i0.ɵɵnextContext(2); i0.ɵɵadvance(3); - i0.ɵɵproperty("ngIf", ctx_r18.changes.organiser); + i0.ɵɵproperty("ngIf", ctx_r19.changes.organiser); i0.ɵɵadvance(2); - i0.ɵɵproperty("title", "Booked By: " + ctx_r18.bookingDetails.bookedBy.value); + i0.ɵɵproperty("title", "Booked By: " + ctx_r19.bookingDetails.bookedBy.value); i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate1(" ", ctx_r18.bookingDetails.bookedBy.value, " "); + i0.ɵɵtextInterpolate1(" ", ctx_r19.bookingDetails.bookedBy.value, " "); } } -function BookingConfirmComponent_mat_dialog_content_0_span_54_Template(rf, ctx) { if (rf & 1) { +function BookingConfirmComponent_mat_dialog_content_0_span_55_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span"); i0.ɵɵtext(1, "*"); i0.ɵɵelementEnd(); } } -function BookingConfirmComponent_mat_dialog_content_0_span_57_Template(rf, ctx) { if (rf & 1) { +function BookingConfirmComponent_mat_dialog_content_0_span_58_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span"); i0.ɵɵtext(1, ""); i0.ɵɵelementEnd(); } } -function BookingConfirmComponent_mat_dialog_content_0_div_59_div_4_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 43); - i0.ɵɵelementStart(1, "a", 44); +function BookingConfirmComponent_mat_dialog_content_0_div_61_div_4_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 46); + i0.ɵɵelementStart(1, "a", 47); i0.ɵɵtext(2); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const item_r40 = i0.ɵɵnextContext().$implicit; - const ctx_r41 = i0.ɵɵnextContext(2); + const item_r43 = i0.ɵɵnextContext().$implicit; + const ctx_r44 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); - i0.ɵɵproperty("href", "mailto:" + item_r40.email + "?subject=" + ctx_r41.booking.title, i0.ɵɵsanitizeUrl); + i0.ɵɵproperty("href", "mailto:" + item_r43.email + "?subject=" + ctx_r44.booking.title, i0.ɵɵsanitizeUrl); i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate(item_r40.email); + i0.ɵɵtextInterpolate(item_r43.email); } } -function BookingConfirmComponent_mat_dialog_content_0_div_59_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 40); +function BookingConfirmComponent_mat_dialog_content_0_div_61_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 43); i0.ɵɵelementStart(1, "div", 8); - i0.ɵɵelementStart(2, "div", 41); + i0.ɵɵelementStart(2, "div", 44); i0.ɵɵtext(3); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(4, BookingConfirmComponent_mat_dialog_content_0_div_59_div_4_Template, 3, 2, "div", 42); + i0.ɵɵtemplate(4, BookingConfirmComponent_mat_dialog_content_0_div_61_div_4_Template, 3, 2, "div", 45); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const item_r40 = ctx.$implicit; - i0.ɵɵproperty("title", (item_r40 == null ? null : item_r40.name) + ((item_r40 == null ? null : item_r40.email) ? "\n" + item_r40.email : "")); + const item_r43 = ctx.$implicit; + i0.ɵɵproperty("title", (item_r43 == null ? null : item_r43.name) + ((item_r43 == null ? null : item_r43.email) ? "\n" + item_r43.email : "")); i0.ɵɵadvance(3); - i0.ɵɵtextInterpolate(item_r40.name); + i0.ɵɵtextInterpolate(item_r43.name); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", item_r40.email); + i0.ɵɵproperty("ngIf", item_r43.email); } } -function BookingConfirmComponent_mat_dialog_content_0_button_60_Template(rf, ctx) { if (rf & 1) { - const _r44 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "button", 38); - i0.ɵɵlistener("click", function BookingConfirmComponent_mat_dialog_content_0_button_60_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r44); const ctx_r43 = i0.ɵɵnextContext(2); return ctx_r43.show_attendees = !ctx_r43.show_attendees; }); +function BookingConfirmComponent_mat_dialog_content_0_button_62_Template(rf, ctx) { if (rf & 1) { + const _r47 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "button", 41); + i0.ɵɵlistener("click", function BookingConfirmComponent_mat_dialog_content_0_button_62_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r47); const ctx_r46 = i0.ɵɵnextContext(2); return ctx_r46.toggleList("attendees"); }); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r22 = i0.ɵɵnextContext(2); + const ctx_r24 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate1(" ", ctx_r22.show_attendees ? "Hide" : "Show", " Attendees "); + i0.ɵɵtextInterpolate1(" ", ctx_r24.show_attendees ? "Hide" : "Show", " Attendees "); } } -function BookingConfirmComponent_mat_dialog_content_0_span_65_span_2_Template(rf, ctx) { if (rf & 1) { +function BookingConfirmComponent_mat_dialog_content_0_span_67_span_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span"); i0.ɵɵtext(1, ", "); i0.ɵɵelementEnd(); } } -function BookingConfirmComponent_mat_dialog_content_0_span_65_Template(rf, ctx) { if (rf & 1) { +function BookingConfirmComponent_mat_dialog_content_0_span_67_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span"); i0.ɵɵtext(1); - i0.ɵɵtemplate(2, BookingConfirmComponent_mat_dialog_content_0_span_65_span_2_Template, 2, 0, "span", 1); + i0.ɵɵtemplate(2, BookingConfirmComponent_mat_dialog_content_0_span_67_span_2_Template, 2, 0, "span", 1); i0.ɵɵelementEnd(); } if (rf & 2) { - const item_r45 = ctx.$implicit; - const isLast_r46 = ctx.last; + const item_r48 = ctx.$implicit; + const isLast_r49 = ctx.last; i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate(item_r45 || ""); + i0.ɵɵtextInterpolate(item_r48 || ""); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", !isLast_r46); + i0.ɵɵproperty("ngIf", !isLast_r49); } } -function BookingConfirmComponent_mat_dialog_content_0_span_69_Template(rf, ctx) { if (rf & 1) { +function BookingConfirmComponent_mat_dialog_content_0_span_71_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span"); i0.ɵɵtext(1, "*"); i0.ɵɵelementEnd(); } } -function BookingConfirmComponent_mat_dialog_content_0_span_75_Template(rf, ctx) { if (rf & 1) { +function BookingConfirmComponent_mat_dialog_content_0_span_77_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span"); i0.ɵɵtext(1, "*"); i0.ɵɵelementEnd(); } } -function BookingConfirmComponent_mat_dialog_content_0_div_79_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 34); +function BookingConfirmComponent_mat_dialog_content_0_div_82_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 37); i0.ɵɵelementStart(1, "div", 8); - i0.ɵɵelementStart(2, "div", 41); + i0.ɵɵelementStart(2, "div", 44); i0.ɵɵtext(3); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(4, "div", 43); + i0.ɵɵelementStart(4, "div", 46); i0.ɵɵtext(5); i0.ɵɵpipe(6, "currency"); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const order_r48 = ctx.$implicit; + const order_r51 = ctx.$implicit; i0.ɵɵadvance(3); - i0.ɵɵtextInterpolate(order_r48.location || ""); + i0.ɵɵtextInterpolate(order_r51.location || ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate3(" ", order_r48.item_count, " item", order_r48.item_count === 1 ? "" : "", " | ", i0.ɵɵpipeBind2(6, 4, order_r48.total / 100, order_r48.symbol), " "); + i0.ɵɵtextInterpolate3(" ", order_r51.item_count, " item", order_r51.item_count === 1 ? "" : "", " | ", i0.ɵɵpipeBind2(6, 4, order_r51.total / 100, order_r51.symbol), " "); } } -function BookingConfirmComponent_mat_dialog_content_0_button_80_Template(rf, ctx) { if (rf & 1) { - const _r50 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "button", 38); - i0.ɵɵlistener("click", function BookingConfirmComponent_mat_dialog_content_0_button_80_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r50); const ctx_r49 = i0.ɵɵnextContext(2); return ctx_r49.show_orders = !ctx_r49.show_orders; }); +function BookingConfirmComponent_mat_dialog_content_0_button_83_Template(rf, ctx) { if (rf & 1) { + const _r53 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "button", 41); + i0.ɵɵlistener("click", function BookingConfirmComponent_mat_dialog_content_0_button_83_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r53); const ctx_r52 = i0.ɵɵnextContext(2); return ctx_r52.toggleList("catering"); }); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r27 = i0.ɵɵnextContext(2); + const ctx_r30 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate1(" ", ctx_r27.show_orders ? "Hide" : "Show", " Catering orders "); + i0.ɵɵtextInterpolate1(" ", ctx_r30.show_orders ? "Hide" : "Show", " Catering orders "); } } -const _c0 = function () { return { type: "icon", class: "material-icons", content: "close" }; }; +const _c3 = function () { return { type: "icon", class: "material-icons", content: "close" }; }; function BookingConfirmComponent_mat_dialog_content_0_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "mat-dialog-content"); i0.ɵɵelementStart(1, "main"); @@ -10873,65 +10909,65 @@ function BookingConfirmComponent_mat_dialog_content_0_Template(rf, ctx) { if (rf i0.ɵɵtext(37, ":"); i0.ɵɵelementEnd(); i0.ɵɵelementStart(38, "div", 12); - i0.ɵɵelementStart(39, "div", 17); - i0.ɵɵtemplate(40, BookingConfirmComponent_mat_dialog_content_0_div_40_Template, 5, 4, "div", 18); - i0.ɵɵtemplate(41, BookingConfirmComponent_mat_dialog_content_0_div_41_Template, 2, 0, "div", 19); + i0.ɵɵelementStart(39, "div", 17, 18); + i0.ɵɵtemplate(41, BookingConfirmComponent_mat_dialog_content_0_div_41_Template, 5, 4, "div", 19); + i0.ɵɵtemplate(42, BookingConfirmComponent_mat_dialog_content_0_div_42_Template, 2, 0, "div", 20); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(42, BookingConfirmComponent_mat_dialog_content_0_button_42_Template, 2, 1, "button", 20); + i0.ɵɵtemplate(43, BookingConfirmComponent_mat_dialog_content_0_button_43_Template, 2, 1, "button", 21); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(43, "div", 21); - i0.ɵɵelementStart(44, "label"); - i0.ɵɵtext(45, "Host"); - i0.ɵɵtemplate(46, BookingConfirmComponent_mat_dialog_content_0_span_46_Template, 2, 0, "span", 1); - i0.ɵɵtext(47, ":"); + i0.ɵɵelementStart(44, "div", 22); + i0.ɵɵelementStart(45, "label"); + i0.ɵɵtext(46, "Host"); + i0.ɵɵtemplate(47, BookingConfirmComponent_mat_dialog_content_0_span_47_Template, 2, 0, "span", 1); + i0.ɵɵtext(48, ":"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(48, "div", 12); - i0.ɵɵtext(49); + i0.ɵɵelementStart(49, "div", 12); + i0.ɵɵtext(50); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(50, BookingConfirmComponent_mat_dialog_content_0_div_50_Template, 7, 3, "div", 22); - i0.ɵɵelementStart(51, "div", 23); - i0.ɵɵelementStart(52, "label"); - i0.ɵɵtext(53); - i0.ɵɵtemplate(54, BookingConfirmComponent_mat_dialog_content_0_span_54_Template, 2, 0, "span", 1); - i0.ɵɵtext(55, ":"); + i0.ɵɵtemplate(51, BookingConfirmComponent_mat_dialog_content_0_div_51_Template, 7, 3, "div", 23); + i0.ɵɵelementStart(52, "div", 24); + i0.ɵɵelementStart(53, "label"); + i0.ɵɵtext(54); + i0.ɵɵtemplate(55, BookingConfirmComponent_mat_dialog_content_0_span_55_Template, 2, 0, "span", 1); + i0.ɵɵtext(56, ":"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(56, "div", 12); - i0.ɵɵtemplate(57, BookingConfirmComponent_mat_dialog_content_0_span_57_Template, 2, 0, "span", 1); - i0.ɵɵelementStart(58, "div", 17); - i0.ɵɵtemplate(59, BookingConfirmComponent_mat_dialog_content_0_div_59_Template, 5, 3, "div", 24); + i0.ɵɵelementStart(57, "div", 12); + i0.ɵɵtemplate(58, BookingConfirmComponent_mat_dialog_content_0_span_58_Template, 2, 0, "span", 1); + i0.ɵɵelementStart(59, "div", 17, 25); + i0.ɵɵtemplate(61, BookingConfirmComponent_mat_dialog_content_0_div_61_Template, 5, 3, "div", 26); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(60, BookingConfirmComponent_mat_dialog_content_0_button_60_Template, 2, 1, "button", 20); + i0.ɵɵtemplate(62, BookingConfirmComponent_mat_dialog_content_0_button_62_Template, 2, 1, "button", 21); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(61, "div", 25); - i0.ɵɵelementStart(62, "label"); - i0.ɵɵtext(63); + i0.ɵɵelementStart(63, "div", 27); + i0.ɵɵelementStart(64, "label"); + i0.ɵɵtext(65); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(64, "div", 12); - i0.ɵɵtemplate(65, BookingConfirmComponent_mat_dialog_content_0_span_65_Template, 3, 2, "span", 26); + i0.ɵɵelementStart(66, "div", 12); + i0.ɵɵtemplate(67, BookingConfirmComponent_mat_dialog_content_0_span_67_Template, 3, 2, "span", 28); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(66, "div", 27); - i0.ɵɵelementStart(67, "label"); - i0.ɵɵtext(68, "Notes"); - i0.ɵɵtemplate(69, BookingConfirmComponent_mat_dialog_content_0_span_69_Template, 2, 0, "span", 1); - i0.ɵɵtext(70, ":"); + i0.ɵɵelementStart(68, "div", 29); + i0.ɵɵelementStart(69, "label"); + i0.ɵɵtext(70, "Notes"); + i0.ɵɵtemplate(71, BookingConfirmComponent_mat_dialog_content_0_span_71_Template, 2, 0, "span", 1); + i0.ɵɵtext(72, ":"); i0.ɵɵelementEnd(); - i0.ɵɵelement(71, "div", 28); + i0.ɵɵelement(73, "div", 30); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(72, "div", 29); - i0.ɵɵelementStart(73, "label"); - i0.ɵɵtext(74); - i0.ɵɵtemplate(75, BookingConfirmComponent_mat_dialog_content_0_span_75_Template, 2, 0, "span", 1); - i0.ɵɵtext(76, ":"); + i0.ɵɵelementStart(74, "div", 31); + i0.ɵɵelementStart(75, "label"); + i0.ɵɵtext(76); + i0.ɵɵtemplate(77, BookingConfirmComponent_mat_dialog_content_0_span_77_Template, 2, 0, "span", 1); + i0.ɵɵtext(78, ":"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(77, "div", 12); - i0.ɵɵelementStart(78, "div", 17); - i0.ɵɵtemplate(79, BookingConfirmComponent_mat_dialog_content_0_div_79_Template, 7, 7, "div", 18); + i0.ɵɵelementStart(79, "div", 12); + i0.ɵɵelementStart(80, "div", 17, 32); + i0.ɵɵtemplate(82, BookingConfirmComponent_mat_dialog_content_0_div_82_Template, 7, 7, "div", 19); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(80, BookingConfirmComponent_mat_dialog_content_0_button_80_Template, 2, 1, "button", 20); + i0.ɵɵtemplate(83, BookingConfirmComponent_mat_dialog_content_0_button_83_Template, 2, 1, "button", 21); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); @@ -10939,7 +10975,7 @@ function BookingConfirmComponent_mat_dialog_content_0_Template(rf, ctx) { if (rf } if (rf & 2) { const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵadvance(3); - i0.ɵɵproperty("icon", i0.ɵɵpureFunction0(39, _c0)); + i0.ɵɵproperty("icon", i0.ɵɵpureFunction0(33, _c3)); i0.ɵɵadvance(2); i0.ɵɵproperty("src", ctx_r0.success ? ctx_r0.is_request ? "assets/img/requested.svg" : "assets/img/confirmed.svg" : "assets/img/edit.svg", i0.ɵɵsanitizeUrl); i0.ɵɵadvance(3); @@ -10966,9 +11002,7 @@ function BookingConfirmComponent_mat_dialog_content_0_Template(rf, ctx) { if (rf i0.ɵɵtextInterpolate1("Locations(", ctx_r0.spaces.length || "0", ")"); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx_r0.changes.location); - i0.ɵɵadvance(3); - i0.ɵɵclassProp("shown", ctx_r0.show_locations); - i0.ɵɵadvance(1); + i0.ɵɵadvance(5); i0.ɵɵproperty("ngForOf", ctx_r0.spaces); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", !ctx_r0.spaces.length); @@ -10986,12 +11020,10 @@ function BookingConfirmComponent_mat_dialog_content_0_Template(rf, ctx) { if (rf i0.ɵɵproperty("ngIf", ctx_r0.changes.attendees); i0.ɵɵadvance(3); i0.ɵɵproperty("ngIf", !ctx_r0.attendees || !ctx_r0.attendees.length); - i0.ɵɵadvance(1); - i0.ɵɵclassProp("shown", ctx_r0.show_attendees); - i0.ɵɵadvance(1); + i0.ɵɵadvance(3); i0.ɵɵproperty("ngForOf", ctx_r0.attendees); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx_r0.attendees.length > 5); + i0.ɵɵproperty("ngIf", ctx_r0.attendees.length > 2); i0.ɵɵadvance(3); i0.ɵɵtextInterpolate1("Company(", ctx_r0.booking.company.length, "):"); i0.ɵɵadvance(2); @@ -11004,30 +11036,28 @@ function BookingConfirmComponent_mat_dialog_content_0_Template(rf, ctx) { if (rf i0.ɵɵtextInterpolate1("Catering Orders(", ctx_r0.catering.length || "0", ")"); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx_r0.changes.catering); - i0.ɵɵadvance(3); - i0.ɵɵclassProp("shown", ctx_r0.show_orders); - i0.ɵɵadvance(1); + i0.ɵɵadvance(5); i0.ɵɵproperty("ngForOf", ctx_r0.catering); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx_r0.catering.length > 5); + i0.ɵɵproperty("ngIf", ctx_r0.catering.length > 2); } } function BookingConfirmComponent_mat_dialog_actions_1_ng_container_2_Template(rf, ctx) { if (rf & 1) { - const _r53 = i0.ɵɵgetCurrentView(); + const _r56 = i0.ɵɵgetCurrentView(); i0.ɵɵelementContainerStart(0); - i0.ɵɵelementStart(1, "button", 45); + i0.ɵɵelementStart(1, "button", 48); i0.ɵɵtext(2, "Edit"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(3, "button", 46); - i0.ɵɵlistener("click", function BookingConfirmComponent_mat_dialog_actions_1_ng_container_2_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r53); const ctx_r52 = i0.ɵɵnextContext(2); return ctx_r52.saveChanges(); }); + i0.ɵɵelementStart(3, "button", 49); + i0.ɵɵlistener("click", function BookingConfirmComponent_mat_dialog_actions_1_ng_container_2_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r56); const ctx_r55 = i0.ɵɵnextContext(2); return ctx_r55.saveChanges(); }); i0.ɵɵtext(4, "Save"); i0.ɵɵelementEnd(); i0.ɵɵelementContainerEnd(); } if (rf & 2) { - const ctx_r51 = i0.ɵɵnextContext(2); + const ctx_r54 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); - i0.ɵɵproperty("disabled", ctx_r51.lastMomentConflict); + i0.ɵɵproperty("disabled", ctx_r54.lastMomentConflict); i0.ɵɵadvance(2); - i0.ɵɵproperty("disabled", ctx_r51.lastMomentConflict); + i0.ɵɵproperty("disabled", ctx_r54.lastMomentConflict); } } function BookingConfirmComponent_mat_dialog_actions_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "mat-dialog-actions"); @@ -11043,9 +11073,9 @@ function BookingConfirmComponent_mat_dialog_actions_1_Template(rf, ctx) { if (rf } } function BookingConfirmComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "main"); - i0.ɵɵelementStart(1, "div", 47); - i0.ɵɵelementStart(2, "div", 48); - i0.ɵɵelement(3, "mat-spinner", 49); + i0.ɵɵelementStart(1, "div", 50); + i0.ɵɵelementStart(2, "div", 51); + i0.ɵɵelement(3, "mat-spinner", 52); i0.ɵɵelementEnd(); i0.ɵɵelementStart(4, "div", 8); i0.ɵɵtext(5); @@ -11058,25 +11088,25 @@ function BookingConfirmComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵtextInterpolate1(" ", ctx_r3.loading, " "); } } function BookingConfirmComponent_ng_template_4_button_0_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "button", 51); + i0.ɵɵelementStart(0, "button", 54); i0.ɵɵtext(1, "Close"); i0.ɵɵelementEnd(); } } function BookingConfirmComponent_ng_template_4_ng_container_1_Template(rf, ctx) { if (rf & 1) { - const _r57 = i0.ɵɵgetCurrentView(); + const _r60 = i0.ɵɵgetCurrentView(); i0.ɵɵelementContainerStart(0); - i0.ɵɵelementStart(1, "button", 52); - i0.ɵɵlistener("click", function BookingConfirmComponent_ng_template_4_ng_container_1_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r57); const ctx_r56 = i0.ɵɵnextContext(2); return ctx_r56.newBooking(); }); + i0.ɵɵelementStart(1, "button", 55); + i0.ɵɵlistener("click", function BookingConfirmComponent_ng_template_4_ng_container_1_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r60); const ctx_r59 = i0.ɵɵnextContext(2); return ctx_r59.newBooking(); }); i0.ɵɵtext(2, "New Booking"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(3, "a", 53); - i0.ɵɵlistener("click", function BookingConfirmComponent_ng_template_4_ng_container_1_Template_a_click_3_listener() { i0.ɵɵrestoreView(_r57); const ctx_r58 = i0.ɵɵnextContext(2); return ctx_r58.toSchedule(); }); + i0.ɵɵelementStart(3, "a", 56); + i0.ɵɵlistener("click", function BookingConfirmComponent_ng_template_4_ng_container_1_Template_a_click_3_listener() { i0.ɵɵrestoreView(_r60); const ctx_r61 = i0.ɵɵnextContext(2); return ctx_r61.toSchedule(); }); i0.ɵɵtext(4, "My Day"); i0.ɵɵelementEnd(); i0.ɵɵelementContainerEnd(); } } function BookingConfirmComponent_ng_template_4_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵtemplate(0, BookingConfirmComponent_ng_template_4_button_0_Template, 2, 0, "button", 50); + i0.ɵɵtemplate(0, BookingConfirmComponent_ng_template_4_button_0_Template, 2, 0, "button", 53); i0.ɵɵtemplate(1, BookingConfirmComponent_ng_template_4_ng_container_1_Template, 5, 0, "ng-container", 1); } if (rf & 2) { const ctx_r5 = i0.ɵɵnextContext(); @@ -11085,7 +11115,7 @@ function BookingConfirmComponent_ng_template_4_Template(rf, ctx) { if (rf & 1) { i0.ɵɵproperty("ngIf", !ctx_r5.settings.concierge); } } class BookingConfirmComponent extends base_1.BaseDirective { - constructor(_service, _users, _org, _bookings, _booking_state_service, _spaces, _router, _dialog, _dialog_ref, _data, settings, closeDialogService) { + constructor(_service, _users, _org, _bookings, _booking_state_service, _spaces, _router, _dialog, _dialog_ref, _data, settings, closeDialogService, renderer) { super(); this._service = _service; this._users = _users; @@ -11099,8 +11129,11 @@ class BookingConfirmComponent extends base_1.BaseDirective { this._data = _data; this.settings = settings; this.closeDialogService = closeDialogService; + this.renderer = renderer; /** Emitter for user actions on the modal */ this.event = new core_1.EventEmitter(); + /** Whether to show all attendees */ + this.show_attendees = false; this.lastMomentConflict = false; this.booking.time_changed = this.old_booking && @@ -11235,7 +11268,6 @@ class BookingConfirmComponent extends base_1.BaseDirective { this.loading = 'Checking availability of selected spaces'; this._dialog_ref.disableClose = true; this.checkSpaceAvailability().then(() => { - var _a, _b; this.loading = 'Processing booking request...'; // Change the unchanged settings to the selected room const newEmail = this.booking.space.email; @@ -11255,14 +11287,36 @@ class BookingConfirmComponent extends base_1.BaseDirective { }); const buffer = {}; this.booking.multi_rooms.map(room => room.email).forEach(elem => buffer[elem] = 900); - // if notes or catering exist? add 15 min buffer setup and breakdown to booking - const has_note_buffer = (this.booking.notes && ((_a = this.booking.notes) === null || _a === void 0 ? void 0 : _a.length)) || (this.booking.catering && ((_b = this.booking.catering) === null || _b === void 0 ? void 0 : _b.length)) ? - buffer : null; // 900 seconds = 15 min - if (has_note_buffer) { - this.booking.setup = has_note_buffer; - this.booking.breakdown = has_note_buffer; - this.booking.room_setup = has_note_buffer; - this.booking.room_breakdown = has_note_buffer; + // // if no setup or breakdown time already added and notes or catering exist? add 15 min buffer setup and breakdown to booking + // if(this.booking.setup === null || this.booking.breakdown === null){ + // const has_note_buffer = (this.booking.notes && this.booking.notes?.length) || (this.booking.catering && this.booking.catering?.length) ? + // buffer : null; // 900 seconds = 15 min + // if (has_note_buffer) { + // this.booking.setup = has_note_buffer; + // this.booking.breakdown = has_note_buffer; + // this.booking.room_setup = has_note_buffer; + // this.booking.room_breakdown = has_note_buffer; + // } + // } + // if no setup time already added and notes or catering exist? add 15 min buffer setup time to booking + if (this.booking.setup === null || this.booking.setup === undefined) { + const has_note_buffer = (this.booking.notes && this.booking.notes.length) || + (this.booking.catering && this.booking.catering.length) ? + buffer : null; // 900 seconds = 15 min + if (has_note_buffer) { + this.booking.setup = has_note_buffer; + this.booking.room_setup = has_note_buffer; + } + } + // if no breakdown time already added and notes or catering exist? add 15 min buffer breakdown time to booking + if (this.booking.breakdown === null || this.booking.breakdown === undefined) { + const has_note_buffer = (this.booking.notes && this.booking.notes.length) || + (this.booking.catering && this.booking.catering.length) ? + buffer : null; // 900 seconds = 15 min + if (has_note_buffer) { + this.booking.breakdown = has_note_buffer; + this.booking.room_breakdown = has_note_buffer; + } } this._bookings.save(this.booking, this._data.action === data_common_1.SeriesAction.EDIT).then((bkn) => tslib_1.__awaiter(this, void 0, void 0, function* () { this.loading = null; @@ -11405,11 +11459,49 @@ class BookingConfirmComponent extends base_1.BaseDirective { }); return text; } + toggleList(listType) { + if (listType === 'attendees') { + this.show_attendees ? this.collapseList(this.attendeesListRef) : this.expandList(this.attendeesListRef); + this.show_attendees = !this.show_attendees; + } + else if (listType === 'locations') { + this.show_locations ? this.collapseList(this.locationsListRef) : this.expandList(this.locationsListRef); + this.show_locations = !this.show_locations; + } + else if (listType === 'catering') { + this.show_orders ? this.collapseList(this.cateringListRef) : this.expandList(this.cateringListRef); + this.show_orders = !this.show_orders; + } + } + expandList(listRef) { + const listElement = listRef.nativeElement; + const listItems = listElement.getElementsByClassName('list-item'); + let totalHeight = 0; + for (let i = 0; i < listItems.length; i++) { + totalHeight += listItems[i].offsetHeight; + } + this.renderer.setStyle(listElement, 'max-height', `${totalHeight}px`); + this.renderer.addClass(listElement, 'shown'); + } + collapseList(listRef) { + const listElement = listRef.nativeElement; + this.renderer.setStyle(listElement, 'max-height', '4.5em'); + this.renderer.removeClass(listElement, 'shown'); + } } exports.BookingConfirmComponent = BookingConfirmComponent; -BookingConfirmComponent.ɵfac = function BookingConfirmComponent_Factory(t) { return new (t || BookingConfirmComponent)(i0.ɵɵdirectiveInject(i1.ApplicationService), i0.ɵɵdirectiveInject(i1.UsersService), i0.ɵɵdirectiveInject(i1.OrganisationService), i0.ɵɵdirectiveInject(i1.BookingsService), i0.ɵɵdirectiveInject(i1.BookingStateService), i0.ɵɵdirectiveInject(i1.SpacesService), i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(i3.MatDialog), i0.ɵɵdirectiveInject(i3.MatDialogRef), i0.ɵɵdirectiveInject(dialog_1.MAT_DIALOG_DATA), i0.ɵɵdirectiveInject(i1.SettingsService), i0.ɵɵdirectiveInject(i1.CloseDialogService)); }; -BookingConfirmComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BookingConfirmComponent, selectors: [["a-booking-confirm-modal"]], outputs: { event: "event" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 6, vars: 3, consts: [[4, "ngIf", "ngIfElse"], [4, "ngIf"], ["load_state", ""], ["success_actions", ""], ["name", "close", "mat-icon-button", "", "mat-dialog-close", ""], [3, "icon"], [1, "details"], [3, "src"], [1, "text"], ["class", "request", 4, "ngIf"], ["class", "info", 4, "ngIf"], ["name", "title", 1, "field"], [1, "value"], ["name", "when", 1, "field"], ["class", "field", "name", "when", 4, "ngIf"], ["name", "duration", 1, "field"], ["name", "location", 1, "field", "multi"], [1, "list"], ["class", "list-item", 4, "ngFor", "ngForOf"], ["class", "list-item", 4, "ngIf"], ["class", "show", 3, "click", 4, "ngIf"], ["name", "host", 1, "field"], ["class", "field", "name", "host", 4, "ngIf"], ["name", "attendees", 1, "field"], ["class", "list-item", 3, "title", 4, "ngFor", "ngForOf"], ["name", "company", 1, "field"], [4, "ngFor", "ngForOf"], ["name", "notes", 1, "field"], [1, "value", 3, "innerHTML"], ["name", "catering", 1, "field"], [1, "request"], [1, "info"], ["class", "tooltip", 3, "click", 4, "ngIf"], [1, "tooltip", 3, "click"], [1, "list-item"], [1, "text", 3, "title"], ["class", "tooltip", 3, "matTooltip", 4, "ngIf"], [1, "tooltip", 3, "matTooltip"], [1, "show", 3, "click"], [1, "value", 3, "title"], [1, "list-item", 3, "title"], [1, "name"], ["class", "email", 4, "ngIf"], [1, "email"], [3, "href"], ["mat-button", "", "mat-dialog-close", "", 1, "inverse", 3, "disabled"], ["mat-button", "", "name", "save", 3, "disabled", "click"], [1, "info-block", "center"], [1, "icon"], ["diameter", "32"], ["mat-button", "", "mat-dialog-close", "", 4, "ngIf"], ["mat-button", "", "mat-dialog-close", ""], ["mat-button", "", "name", "new", 1, "inverse", 3, "click"], ["button", "", "mat-button", "", "mat-dialog-close", "", 3, "click"]], template: function BookingConfirmComponent_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵtemplate(0, BookingConfirmComponent_mat_dialog_content_0_Template, 81, 40, "mat-dialog-content", 0); +BookingConfirmComponent.ɵfac = function BookingConfirmComponent_Factory(t) { return new (t || BookingConfirmComponent)(i0.ɵɵdirectiveInject(i1.ApplicationService), i0.ɵɵdirectiveInject(i1.UsersService), i0.ɵɵdirectiveInject(i1.OrganisationService), i0.ɵɵdirectiveInject(i1.BookingsService), i0.ɵɵdirectiveInject(i1.BookingStateService), i0.ɵɵdirectiveInject(i1.SpacesService), i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(i3.MatDialog), i0.ɵɵdirectiveInject(i3.MatDialogRef), i0.ɵɵdirectiveInject(dialog_1.MAT_DIALOG_DATA), i0.ɵɵdirectiveInject(i1.SettingsService), i0.ɵɵdirectiveInject(i1.CloseDialogService), i0.ɵɵdirectiveInject(i0.Renderer2)); }; +BookingConfirmComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BookingConfirmComponent, selectors: [["a-booking-confirm-modal"]], viewQuery: function BookingConfirmComponent_Query(rf, ctx) { if (rf & 1) { + i0.ɵɵviewQuery(_c0, true); + i0.ɵɵviewQuery(_c1, true); + i0.ɵɵviewQuery(_c2, true); + } if (rf & 2) { + var _t; + i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.attendeesListRef = _t.first); + i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.locationsListRef = _t.first); + i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.cateringListRef = _t.first); + } }, outputs: { event: "event" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 6, vars: 3, consts: [[4, "ngIf", "ngIfElse"], [4, "ngIf"], ["load_state", ""], ["success_actions", ""], ["name", "close", "mat-icon-button", "", "mat-dialog-close", ""], [3, "icon"], [1, "details"], [3, "src"], [1, "text"], ["class", "request", 4, "ngIf"], ["class", "info", 4, "ngIf"], ["name", "title", 1, "field"], [1, "value"], ["name", "when", 1, "field"], ["class", "field", "name", "when", 4, "ngIf"], ["name", "duration", 1, "field"], ["name", "location", 1, "field", "multi"], [1, "list"], ["locationsListRef", ""], ["class", "list-item", 4, "ngFor", "ngForOf"], ["class", "list-item", 4, "ngIf"], ["class", "show", 3, "click", 4, "ngIf"], ["name", "host", 1, "field"], ["class", "field", "name", "host", 4, "ngIf"], ["name", "attendees", 1, "field"], ["attendeesListRef", ""], ["class", "list-item", 3, "title", 4, "ngFor", "ngForOf"], ["name", "company", 1, "field"], [4, "ngFor", "ngForOf"], ["name", "notes", 1, "field"], [1, "value", 3, "innerHTML"], ["name", "catering", 1, "field"], ["cateringListRef", ""], [1, "request"], [1, "info"], ["class", "tooltip", 3, "click", 4, "ngIf"], [1, "tooltip", 3, "click"], [1, "list-item"], [1, "text", 3, "title"], ["class", "tooltip", 3, "matTooltip", 4, "ngIf"], [1, "tooltip", 3, "matTooltip"], [1, "show", 3, "click"], [1, "value", 3, "title"], [1, "list-item", 3, "title"], [1, "name"], ["class", "email", 4, "ngIf"], [1, "email"], [3, "href"], ["mat-button", "", "mat-dialog-close", "", 1, "inverse", 3, "disabled"], ["mat-button", "", "name", "save", 3, "disabled", "click"], [1, "info-block", "center"], [1, "icon"], ["diameter", "32"], ["mat-button", "", "mat-dialog-close", "", 4, "ngIf"], ["mat-button", "", "mat-dialog-close", ""], ["mat-button", "", "name", "new", 1, "inverse", 3, "click"], ["button", "", "mat-button", "", "mat-dialog-close", "", 3, "click"]], template: function BookingConfirmComponent_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵtemplate(0, BookingConfirmComponent_mat_dialog_content_0_Template, 84, 34, "mat-dialog-content", 0); i0.ɵɵtemplate(1, BookingConfirmComponent_mat_dialog_actions_1_Template, 3, 2, "mat-dialog-actions", 1); i0.ɵɵtemplate(2, BookingConfirmComponent_ng_template_2_Template, 6, 1, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor); i0.ɵɵtemplate(4, BookingConfirmComponent_ng_template_4_Template, 2, 2, "ng-template", null, 3, i0.ɵɵtemplateRefExtractor); @@ -11418,7 +11510,7 @@ BookingConfirmComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BookingConfirmCom i0.ɵɵproperty("ngIf", !ctx.loading)("ngIfElse", _r2); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", !ctx.loading); - } }, directives: [i4.NgIf, i3.MatDialogContent, i5.MatButton, i3.MatDialogClose, i6.IconComponent, i4.NgForOf, i7.MatTooltip, i3.MatDialogActions, i8.MatSpinner, i5.MatAnchor], pipes: [i4.CurrencyPipe], styles: ["main[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n flex-direction: column;\n padding: 1em;\n min-height: 24em;\n width: 32em;\n max-width: 100%;\n}\n.details[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n margin-bottom: 1em;\n}\n.details[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n height: 6em;\n}\n.details[_ngcontent-%COMP%] .text[_ngcontent-%COMP%] {\n margin-top: 1em;\n font-weight: 400;\n font-size: 1.2em;\n}\n.details[_ngcontent-%COMP%] .info[_ngcontent-%COMP%] {\n font-size: 0.8em;\n color: #ffb300;\n text-align: center;\n}\n.text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: #43a047;\n}\n.text[_ngcontent-%COMP%] .request[_ngcontent-%COMP%] {\n color: #ffb300;\n}\n.tooltip[_ngcontent-%COMP%] {\n font-size: 0.65em;\n color: #1937ea;\n margin: 0.5em;\n text-decoration: underline;\n}\nmat-dialog-actions[_ngcontent-%COMP%] {\n border-top: 1px solid #ccc;\n}\nfooter[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n}\nfooter[_ngcontent-%COMP%] button[_ngcontent-%COMP%], footer[_ngcontent-%COMP%] a[button][_ngcontent-%COMP%] {\n min-width: 8em;\n}\nfooter[_ngcontent-%COMP%] a[_ngcontent-%COMP%] {\n color: #fff;\n}\n.icon[_ngcontent-%COMP%] {\n height: 1.2em;\n width: 1.2em;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 2em;\n}\n.content[_ngcontent-%COMP%] {\n width: 16rem;\n text-align: center;\n font-size: 0.8em;\n}\napp-icon[_ngcontent-%COMP%] {\n transition: font-size 200ms;\n}\n.close[_ngcontent-%COMP%] {\n font-size: 1em;\n cursor: pointer;\n}\n.close[_ngcontent-%COMP%]:hover app-icon[_ngcontent-%COMP%] {\n font-size: 0.8em;\n}\nbutton[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 0 0.25em;\n}\n.field[_ngcontent-%COMP%] {\n display: flex;\n padding: 0.25em 0.25em 0.5em;\n width: 100%;\n border-radius: 4px;\n}\n.field[_ngcontent-%COMP%]:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .field[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .field[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n}\nlabel[_ngcontent-%COMP%] {\n width: 8em;\n margin-top: 0.25em;\n margin-right: 1em;\n font-weight: bold;\n font-size: 0.8em;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n label[_ngcontent-%COMP%] {\n width: 100%;\n margin-bottom: 0.5em;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n label[_ngcontent-%COMP%] {\n width: 100%;\n margin-bottom: 0.5em;\n }\n}\n.value[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 50%;\n padding: 0 0.5em;\n}\n.value[_ngcontent-%COMP%] .show[_ngcontent-%COMP%] {\n font-size: 0.8em;\n background: none;\n border: none;\n outline: none;\n text-decoration: underline;\n cursor: pointer;\n}\n.value[_ngcontent-%COMP%] .show[_ngcontent-%COMP%]:hover {\n color: #1937ea;\n}\n.list[_ngcontent-%COMP%] {\n max-height: 4em;\n overflow: hidden;\n margin-left: -0.5em;\n transition: max-height 0.8s ease-in-out;\n}\n.list.shown[_ngcontent-%COMP%] {\n max-height: 100em;\n}\n.list-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 0.25em 0.5em;\n border-radius: 8px;\n width: 100%;\n}\n.list-item[_ngcontent-%COMP%]:nth-child(2n) {\n background-color: rgba(0, 0, 0, 0.05);\n}\n.list-item[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] {\n height: 8px;\n width: 8px;\n border-radius: 100%;\n background-color: #43a047;\n margin: 0.5em 0.5em 0.5em 0;\n}\n.list-item[_ngcontent-%COMP%] .text[_ngcontent-%COMP%] {\n margin-right: 1em;\n flex: 1;\n min-width: 50%;\n}\n.email[_ngcontent-%COMP%] {\n font-size: 0.6em;\n}\na[_ngcontent-%COMP%] {\n color: inherit;\n}\n[name=close][_ngcontent-%COMP%] {\n position: absolute;\n top: 0.5em;\n right: 0.5em;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL2xlZ2FjeS1vdmVybGF5cy9zcmMvbGliL2Jvb2tpbmctY29uZmlybS9ib29raW5nLWNvbmZpcm0uY29tcG9uZW50LnNjc3MiLCJsaWJzL2xlZ2FjeS1vdmVybGF5cy9zcmMvbGliL2Jvb2tpbmctY29uZmlybS9ib29raW5nLWNvbmZpcm0uY29tcG9uZW50LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQTFEQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDNUNBOztzQkFBQTtBQ1ZBO0VBQ0ksa0JBQUE7RUFDQSxhQUFBO0VBQ0EsbUJBQUE7RUFDQSxzQkFBQTtFQUNBLFlBQUE7RUFDQSxnQkFBQTtFQUNBLFdBQUE7RUFDQSxlQUFBO0FDd0JKO0FEckJBO0VBQ0ksYUFBQTtFQUNBLG1CQUFBO0VBQ0EsdUJBQUE7RUFDQSxzQkFBQTtFQUNBLGtCQUFBO0FDd0JKO0FEdEJJO0VBQ0ksV0FBQTtBQ3dCUjtBRHJCSTtFQUNJLGVBQUE7RUFDQSxnQkFBQTtFQUNBLGdCQUFBO0FDdUJSO0FEcEJJO0VBQ0ksZ0JBQUE7RUFDQSxjRmRFO0VFZUYsa0JBQUE7QUNzQlI7QURqQkk7RUFDSSxjRjFCRTtBRzhDVjtBRGpCSTtFQUNJLGNGekJFO0FHNENWO0FEZkE7RUFDSSxpQkFBQTtFQUNBLGNGdkJZO0VFd0JaLGFBQUE7RUFDQSwwQkFBQTtBQ2tCSjtBRGZBO0VBQ0ksMEJBQUE7QUNrQko7QURmQTtFQUNJLGFBQUE7RUFDQSxtQkFBQTtFQUNBLHVCQUFBO0VBQ0EsV0FBQTtBQ2tCSjtBRGpCSTs7RUFFSSxjQUFBO0FDbUJSO0FEaEJJO0VBQ0ksV0FBQTtBQ2tCUjtBRGRBO0VBQ0ksYUFBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EsbUJBQUE7RUFDQSx1QkFBQTtFQUNBLGNBQUE7QUNpQko7QURkQTtFQUNJLFlBQUE7RUFDQSxrQkFBQTtFQUNBLGdCQUFBO0FDaUJKO0FEZkE7RUFDSSwyQkFBQTtBQ2tCSjtBRGZBO0VBQ0ksY0FBQTtFQUNBLGVBQUE7QUNrQko7QURmUTtFQUNJLGdCQUFBO0FDaUJaO0FEWkE7RUFDSSxhQUFBO0VBQ0EsbUJBQUE7RUFDQSx1QkFBQTtFQUNBLGdCQUFBO0FDZUo7QURaQTtFQUNJLGFBQUE7RUFDQSw0QkFBQTtFQUNBLFdBQUE7RUFDQSxrQkFBQTtBQ2VKO0FEYkk7RUFDSSxxQ0FBQTtBQ2VSO0FGakhRO0VDMkZSO0lBV1EsZUFBQTtFQ2VOO0FBQ0Y7QUZuSFE7RUN3RlI7SUFXUSxlQUFBO0VDb0JOO0FBQ0Y7QURqQkE7RUFDSSxVQUFBO0VBQ0Esa0JBQUE7RUFDQSxpQkFBQTtFQUNBLGlCQUFBO0VBQ0EsZ0JBQUE7QUNvQko7QUZuSVE7RUMwR1I7SUFPUSxXQUFBO0lBQ0Esb0JBQUE7RUNzQk47QUFDRjtBRnRJUTtFQ3VHUjtJQU9RLFdBQUE7SUFDQSxvQkFBQTtFQzRCTjtBQUNGO0FEekJBO0VBQ0ksT0FBQTtFQUNBLGNBQUE7RUFDQSxnQkFBQTtBQzRCSjtBRDFCSTtFQUNJLGdCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtFQUNBLDBCQUFBO0VBQ0EsZUFBQTtBQzRCUjtBRDFCUTtFQUNJLGNGNUhJO0FHd0poQjtBRHZCQTtFQUNJLGVBQUE7RUFDQSxnQkFBQTtFQUNBLG1CQUFBO0VBQ0EsdUNBQUE7QUMwQko7QUR4Qkk7RUFDSSxpQkFBQTtBQzBCUjtBRHRCQTtFQUNJLGFBQUE7RUFDQSxtQkFBQTtFQUNBLHFCQUFBO0VBQ0Esa0JBQUE7RUFDQSxXQUFBO0FDeUJKO0FEdkJJO0VBQ0kscUNBQUE7QUN5QlI7QUR0Qkk7RUFDSSxXQUFBO0VBQ0EsVUFBQTtFQUNBLG1CQUFBO0VBQ0EseUJGeEtFO0VFeUtGLDJCQUFBO0FDd0JSO0FEckJJO0VBQ0ksaUJBQUE7RUFDQSxPQUFBO0VBQ0EsY0FBQTtBQ3VCUjtBRG5CQTtFQUNJLGdCQUFBO0FDc0JKO0FEbkJBO0VBQ0ksY0FBQTtBQ3NCSjtBRG5CQTtFQUNJLGtCQUFBO0VBQ0EsVUFBQTtFQUNBLFlBQUE7QUNzQkoiLCJmaWxlIjoibGlicy9sZWdhY3ktb3ZlcmxheXMvc3JjL2xpYi9ib29raW5nLWNvbmZpcm0vYm9va2luZy1jb25maXJtLmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kY29sb3ItYnJhbmQtZWxlY3RyaWMtYmx1ZTogIzIyNTFmZjtcbiRjb2xvci1icmFuZC1kZWVwLWJsdWU6ICMwNTFjMmM7XG4kY29sb3ItYnJhbmQtY3lhbjogIzAwYTlmNDtcblxuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRmb250LWRhcms6ICMwMDA7XG4kZm9udC1saWdodDogI2ZmZjtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG4kZ3JlZW4xOiAjMjE5NjUzO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvbG9yLXByaW1hcnk6ICMxOTM3ZWE7XG4kY29sb3ItcHJpbWFyeS1saWdodDogbGlnaHRlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuJGNvbG9yLXByaW1hcnktZGFyazogZGFya2VuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG5cbiRjb2xvci1zZWNvbmRhcnk6ICM0Mjg1RjQ7XG4kY29sb3Itc2Vjb25kYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcbiRjb2xvci1zZWNvbmRhcnktZGFyazogZGFya2VuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcblxuJGJhY2tncm91bmQ6ICNmMGYwZjA7XG4kZm9vdGVyLWJhY2s6ICMyNjMyMzg7XG4kaGVhZGVyLWJhY2s6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzA1MUMyQywgIzA1MUMyQyA0MCUsICMwQjI0NTMgNjAlLCAjMUY0MEU2IDEwMCUpO1xuXG4kY29sb3ItdGVybmFyeTogIzA1MWMyYztcblxuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG5cbiRmb250LXN0YWNrOiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcblxuJGhlYWRpbmctZm9udDogXCJMYXJpc2hNY0tpbnNleVwiLCAnR2VvcmdpYScsIHNlcmlmO1xuJGZvbnQ6ICRmb250LXN0YWNrO1xuXG4kZm9udC1mYW1pbHktcHJpbWFyeTogXCJNY0tpbnNleSBTYW5zXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQ2FsaWJyaSwgQ29yYmVsLCBIZWx2ZXRpY2EsIFJvYm90bywgRHJvaWQsIHNhbnMtc2VyaWY7XG4kZm9udC1mYW1pbHktc2Vjb25kYXJ5OiBcIkJvd2VyXCIsIEdlb3JnaWEsIFwiVGltZXMgTmV3IFJvbWFuXCIgc2VyaWY7XG5cbiRiYXNlLXNpemU6IDE2cHg7XG4kdGFibGV0LXNpemU6IDE2cHg7XG4kbW9iaWxlLXNpemU6IDE2cHg7XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kYnJlYWstbW9iaWxlOiA0NTBweDtcbiRicmVhay10YWJsZXQ6IDgwMHB4O1xuJGJyZWFrLWxhcHRvcDogMTAyNHB4O1xuXG4kYnJlYWstbGFuZHNjYXBlLW1vYmlsZTogODAwcHg7XG4kYnJlYWstbGFuZHNjYXBlLXRhYmxldDogMTA0OHB4O1xuJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3A6IDEyODBweDtcbiIsIkBpbXBvcnQgJy4vdmFyaWFibGVzJztcblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5AbWl4aW4gYm94LXNoYWRvdygkY29sb3I6ICMwMDAsICRkZXB0aDogMSkge1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCAxcHggKiAoJGRlcHRoIC0gMSkgcmdiYSgjMDAwLCAuMiksXG4gICAgICAgICAgICAgICAgMCAxcHggMXB4IDAgcmdiYSgjMDAwLCAuMTQpLFxuICAgICAgICAgICAgICAgIDAgMnB4IDFweCAtMXB4IHJnYmEoIzAwMCwgLjEyKTtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbkBtaXhpbiByZXNwb25kLXRvKCRtZWRpYSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSAgQGVsc2UgaWYgJG1lZGlhID09IGxhdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfUBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJcbkBpbXBvcnQgJy4uL3ZhcmlhYmxlcyc7XG5AaW1wb3J0ICcuLi9taXhpbnMnO1xuXG5tYWluIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgcGFkZGluZzogMWVtO1xuICAgIG1pbi1oZWlnaHQ6IDI0ZW07XG4gICAgd2lkdGg6IDMyZW07XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xufVxuXG4uZGV0YWlscyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgbWFyZ2luLWJvdHRvbTogMWVtO1xuXG4gICAgaW1nIHtcbiAgICAgICAgaGVpZ2h0OiA2ZW07XG4gICAgfVxuXG4gICAgLnRleHQge1xuICAgICAgICBtYXJnaW4tdG9wOiAxZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yZW07XG4gICAgfVxuXG4gICAgLmluZm8ge1xuICAgICAgICBmb250LXNpemU6IC44ZW07XG4gICAgICAgIGNvbG9yOiAkcGVuZGluZztcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIH1cbn1cblxuLnRleHQge1xuICAgIHNwYW4ge1xuICAgICAgICBjb2xvcjogJHN1Y2Nlc3M7XG4gICAgfVxuXG4gICAgLnJlcXVlc3Qge1xuICAgICAgICBjb2xvcjogJHBlbmRpbmc7XG4gICAgfVxufVxuXG4udG9vbHRpcCB7XG4gICAgZm9udC1zaXplOiAuNjVlbTtcbiAgICBjb2xvcjogJGNvbG9yLXByaW1hcnk7XG4gICAgbWFyZ2luOiAuNWVtO1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG5tYXQtZGlhbG9nLWFjdGlvbnMge1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjY2NjO1xufVxuXG5mb290ZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBidXR0b24sXG4gICAgYVtidXR0b25dIHtcbiAgICAgICAgbWluLXdpZHRoOiA4ZW07XG4gICAgfVxuXG4gICAgYSB7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgIH1cbn1cblxuLmljb24ge1xuICAgIGhlaWdodDogMS4yZW07XG4gICAgd2lkdGg6IDEuMmVtO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBmb250LXNpemU6IDJlbTtcbn1cblxuLmNvbnRlbnQge1xuICAgIHdpZHRoOiAxNnJlbTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1zaXplOiAuOGVtO1xufVxuYXBwLWljb24ge1xuICAgIHRyYW5zaXRpb246IGZvbnQtc2l6ZSAyMDBtcztcbn1cblxuLmNsb3NlIHtcbiAgICBmb250LXNpemU6IDFlbTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgICAgYXBwLWljb24ge1xuICAgICAgICAgICAgZm9udC1zaXplOiAuOGVtO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5idXR0b24ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBtYXJnaW46IDAgLjI1ZW07XG59XG5cbi5maWVsZCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwYWRkaW5nOiAuMjVlbSAuMjVlbSAuNWVtO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcblxuICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCMwMDAsIC4wNSk7XG4gICAgfVxuXG4gICAgQGluY2x1ZGUgcmVzcG9uZC10byhtb2JpbGUpIHtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgIH1cbn1cblxubGFiZWwge1xuICAgIHdpZHRoOiA4ZW07XG4gICAgbWFyZ2luLXRvcDogLjI1ZW07XG4gICAgbWFyZ2luLXJpZ2h0OiAxZW07XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgZm9udC1zaXplOiAuOGVtO1xuICAgIEBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAuNWVtO1xuICAgIH1cbn1cblxuLnZhbHVlIHtcbiAgICBmbGV4OiAxO1xuICAgIG1pbi13aWR0aDogNTAlO1xuICAgIHBhZGRpbmc6IDAgLjVlbTtcblxuICAgIC5zaG93IHtcbiAgICAgICAgZm9udC1zaXplOiAuOGVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICBjb2xvcjogJGNvbG9yLXByaW1hcnk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5saXN0IHtcbiAgICBtYXgtaGVpZ2h0OiA0ZW07XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBtYXJnaW4tbGVmdDogLS41ZW07XG4gICAgdHJhbnNpdGlvbjogbWF4LWhlaWdodCAwLjhzIGVhc2UtaW4tb3V0O1xuXG4gICAgJi5zaG93biB7XG4gICAgICAgIG1heC1oZWlnaHQ6IDEwMGVtO1xuICAgIH1cbn1cblxuLmxpc3QtaXRlbSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHBhZGRpbmc6IC4yNWVtIC41ZW07XG4gICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgJjpudGgtY2hpbGQoMm4pIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgjMDAwLCAuMDUpO1xuICAgIH1cblxuICAgIC5zdGF0dXMge1xuICAgICAgICBoZWlnaHQ6IDhweDtcbiAgICAgICAgd2lkdGg6IDhweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHN1Y2Nlc3M7XG4gICAgICAgIG1hcmdpbjogLjVlbSAuNWVtIC41ZW0gMDtcbiAgICB9XG5cbiAgICAudGV4dCB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMWVtO1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBtaW4td2lkdGg6IDUwJTtcbiAgICB9XG59XG5cbi5lbWFpbCB7XG4gICAgZm9udC1zaXplOiAuNmVtO1xufVxuXG5hIHtcbiAgICBjb2xvcjogaW5oZXJpdDtcbn1cblxuW25hbWU9XCJjbG9zZVwiXSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogLjVlbTtcbiAgICByaWdodDogLjVlbTtcbn1cblxuIiwiLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5tYWluIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBwYWRkaW5nOiAxZW07XG4gIG1pbi1oZWlnaHQ6IDI0ZW07XG4gIHdpZHRoOiAzMmVtO1xuICBtYXgtd2lkdGg6IDEwMCU7XG59XG5cbi5kZXRhaWxzIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1hcmdpbi1ib3R0b206IDFlbTtcbn1cbi5kZXRhaWxzIGltZyB7XG4gIGhlaWdodDogNmVtO1xufVxuLmRldGFpbHMgLnRleHQge1xuICBtYXJnaW4tdG9wOiAxZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtc2l6ZTogMS4yZW07XG59XG4uZGV0YWlscyAuaW5mbyB7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG4gIGNvbG9yOiAjZmZiMzAwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi50ZXh0IHNwYW4ge1xuICBjb2xvcjogIzQzYTA0Nztcbn1cbi50ZXh0IC5yZXF1ZXN0IHtcbiAgY29sb3I6ICNmZmIzMDA7XG59XG5cbi50b29sdGlwIHtcbiAgZm9udC1zaXplOiAwLjY1ZW07XG4gIGNvbG9yOiAjMTkzN2VhO1xuICBtYXJnaW46IDAuNWVtO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxubWF0LWRpYWxvZy1hY3Rpb25zIHtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNjY2M7XG59XG5cbmZvb3RlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB3aWR0aDogMTAwJTtcbn1cbmZvb3RlciBidXR0b24sXG5mb290ZXIgYVtidXR0b25dIHtcbiAgbWluLXdpZHRoOiA4ZW07XG59XG5mb290ZXIgYSB7XG4gIGNvbG9yOiAjZmZmO1xufVxuXG4uaWNvbiB7XG4gIGhlaWdodDogMS4yZW07XG4gIHdpZHRoOiAxLjJlbTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMmVtO1xufVxuXG4uY29udGVudCB7XG4gIHdpZHRoOiAxNnJlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXNpemU6IDAuOGVtO1xufVxuXG5hcHAtaWNvbiB7XG4gIHRyYW5zaXRpb246IGZvbnQtc2l6ZSAyMDBtcztcbn1cblxuLmNsb3NlIHtcbiAgZm9udC1zaXplOiAxZW07XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jbG9zZTpob3ZlciBhcHAtaWNvbiB7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG59XG5cbmJ1dHRvbiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW46IDAgMC4yNWVtO1xufVxuXG4uZmllbGQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nOiAwLjI1ZW0gMC4yNWVtIDAuNWVtO1xuICB3aWR0aDogMTAwJTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuLmZpZWxkOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5maWVsZCB7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmZpZWxkIHtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIH1cbn1cblxubGFiZWwge1xuICB3aWR0aDogOGVtO1xuICBtYXJnaW4tdG9wOiAwLjI1ZW07XG4gIG1hcmdpbi1yaWdodDogMWVtO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgZm9udC1zaXplOiAwLjhlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIGxhYmVsIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIGxhYmVsIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTtcbiAgfVxufVxuXG4udmFsdWUge1xuICBmbGV4OiAxO1xuICBtaW4td2lkdGg6IDUwJTtcbiAgcGFkZGluZzogMCAwLjVlbTtcbn1cbi52YWx1ZSAuc2hvdyB7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIGJvcmRlcjogbm9uZTtcbiAgb3V0bGluZTogbm9uZTtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi52YWx1ZSAuc2hvdzpob3ZlciB7XG4gIGNvbG9yOiAjMTkzN2VhO1xufVxuXG4ubGlzdCB7XG4gIG1heC1oZWlnaHQ6IDRlbTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgbWFyZ2luLWxlZnQ6IC0wLjVlbTtcbiAgdHJhbnNpdGlvbjogbWF4LWhlaWdodCAwLjhzIGVhc2UtaW4tb3V0O1xufVxuLmxpc3Quc2hvd24ge1xuICBtYXgtaGVpZ2h0OiAxMDBlbTtcbn1cblxuLmxpc3QtaXRlbSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDAuMjVlbSAwLjVlbTtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICB3aWR0aDogMTAwJTtcbn1cbi5saXN0LWl0ZW06bnRoLWNoaWxkKDJuKSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG59XG4ubGlzdC1pdGVtIC5zdGF0dXMge1xuICBoZWlnaHQ6IDhweDtcbiAgd2lkdGg6IDhweDtcbiAgYm9yZGVyLXJhZGl1czogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQzYTA0NztcbiAgbWFyZ2luOiAwLjVlbSAwLjVlbSAwLjVlbSAwO1xufVxuLmxpc3QtaXRlbSAudGV4dCB7XG4gIG1hcmdpbi1yaWdodDogMWVtO1xuICBmbGV4OiAxO1xuICBtaW4td2lkdGg6IDUwJTtcbn1cblxuLmVtYWlsIHtcbiAgZm9udC1zaXplOiAwLjZlbTtcbn1cblxuYSB7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuXG5bbmFtZT1jbG9zZV0ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMC41ZW07XG4gIHJpZ2h0OiAwLjVlbTtcbn0iXX0= */"] }); + } }, directives: [i4.NgIf, i3.MatDialogContent, i5.MatButton, i3.MatDialogClose, i6.IconComponent, i4.NgForOf, i7.MatTooltip, i3.MatDialogActions, i8.MatSpinner, i5.MatAnchor], pipes: [i4.CurrencyPipe], styles: ["main[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n flex-direction: column;\n padding: 1em;\n min-height: 24em;\n width: 32em;\n max-width: 100%;\n}\n.details[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n margin-bottom: 1em;\n}\n.details[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n height: 6em;\n}\n.details[_ngcontent-%COMP%] .text[_ngcontent-%COMP%] {\n margin-top: 1em;\n font-weight: 400;\n font-size: 1.2em;\n}\n.details[_ngcontent-%COMP%] .info[_ngcontent-%COMP%] {\n font-size: 0.8em;\n color: #ffb300;\n text-align: center;\n}\n.text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: #43a047;\n}\n.text[_ngcontent-%COMP%] .request[_ngcontent-%COMP%] {\n color: #ffb300;\n}\n.tooltip[_ngcontent-%COMP%] {\n font-size: 0.65em;\n color: #1937ea;\n margin: 0.5em;\n text-decoration: underline;\n}\nmat-dialog-actions[_ngcontent-%COMP%] {\n border-top: 1px solid #ccc;\n}\nfooter[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n}\nfooter[_ngcontent-%COMP%] button[_ngcontent-%COMP%], footer[_ngcontent-%COMP%] a[button][_ngcontent-%COMP%] {\n min-width: 8em;\n}\nfooter[_ngcontent-%COMP%] a[_ngcontent-%COMP%] {\n color: #fff;\n}\n.icon[_ngcontent-%COMP%] {\n height: 1.2em;\n width: 1.2em;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 2em;\n}\n.content[_ngcontent-%COMP%] {\n width: 16rem;\n text-align: center;\n font-size: 0.8em;\n}\napp-icon[_ngcontent-%COMP%] {\n transition: font-size 200ms;\n}\n.close[_ngcontent-%COMP%] {\n font-size: 1em;\n cursor: pointer;\n}\n.close[_ngcontent-%COMP%]:hover app-icon[_ngcontent-%COMP%] {\n font-size: 0.8em;\n}\nbutton[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 0 0.25em;\n}\n.field[_ngcontent-%COMP%] {\n display: flex;\n padding: 0.25em 0.25em 0.5em;\n width: 100%;\n border-radius: 4px;\n}\n.field[_ngcontent-%COMP%]:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .field[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .field[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n}\nlabel[_ngcontent-%COMP%] {\n width: 8em;\n margin-top: 0.25em;\n margin-right: 1em;\n font-weight: bold;\n font-size: 0.8em;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n label[_ngcontent-%COMP%] {\n width: 100%;\n margin-bottom: 0.5em;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n label[_ngcontent-%COMP%] {\n width: 100%;\n margin-bottom: 0.5em;\n }\n}\n.value[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 50%;\n padding: 0 0.5em;\n}\n.value[_ngcontent-%COMP%] .show[_ngcontent-%COMP%] {\n font-size: 0.8em;\n background: none;\n border: none;\n outline: none;\n text-decoration: underline;\n cursor: pointer;\n}\n.value[_ngcontent-%COMP%] .show[_ngcontent-%COMP%]:hover {\n color: #1937ea;\n}\n.list[_ngcontent-%COMP%] {\n max-height: 4.5em;\n overflow: hidden;\n margin-left: -0.5em;\n transition: max-height 0.8s ease-in-out;\n}\n.list-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 0.25em 0.5em;\n border-radius: 8px;\n width: 100%;\n}\n.list-item[_ngcontent-%COMP%]:nth-child(2n) {\n background-color: rgba(0, 0, 0, 0.05);\n}\n.list-item[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] {\n height: 8px;\n width: 8px;\n border-radius: 100%;\n background-color: #43a047;\n margin: 0.5em 0.5em 0.5em 0;\n}\n.list-item[_ngcontent-%COMP%] .text[_ngcontent-%COMP%] {\n margin-right: 1em;\n flex: 1;\n min-width: 50%;\n}\n.email[_ngcontent-%COMP%] {\n font-size: 0.6em;\n}\na[_ngcontent-%COMP%] {\n color: inherit;\n}\n[name=close][_ngcontent-%COMP%] {\n position: absolute;\n top: 0.5em;\n right: 0.5em;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL2xlZ2FjeS1vdmVybGF5cy9zcmMvbGliL2Jvb2tpbmctY29uZmlybS9ib29raW5nLWNvbmZpcm0uY29tcG9uZW50LnNjc3MiLCJsaWJzL2xlZ2FjeS1vdmVybGF5cy9zcmMvbGliL2Jvb2tpbmctY29uZmlybS9ib29raW5nLWNvbmZpcm0uY29tcG9uZW50LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQTFEQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDNUNBOztzQkFBQTtBQ1ZBO0VBQ0ksa0JBQUE7RUFDQSxhQUFBO0VBQ0EsbUJBQUE7RUFDQSxzQkFBQTtFQUNBLFlBQUE7RUFDQSxnQkFBQTtFQUNBLFdBQUE7RUFDQSxlQUFBO0FDd0JKO0FEckJBO0VBQ0ksYUFBQTtFQUNBLG1CQUFBO0VBQ0EsdUJBQUE7RUFDQSxzQkFBQTtFQUNBLGtCQUFBO0FDd0JKO0FEdEJJO0VBQ0ksV0FBQTtBQ3dCUjtBRHJCSTtFQUNJLGVBQUE7RUFDQSxnQkFBQTtFQUNBLGdCQUFBO0FDdUJSO0FEcEJJO0VBQ0ksZ0JBQUE7RUFDQSxjRmRFO0VFZUYsa0JBQUE7QUNzQlI7QURqQkk7RUFDSSxjRjFCRTtBRzhDVjtBRGpCSTtFQUNJLGNGekJFO0FHNENWO0FEZkE7RUFDSSxpQkFBQTtFQUNBLGNGdkJZO0VFd0JaLGFBQUE7RUFDQSwwQkFBQTtBQ2tCSjtBRGZBO0VBQ0ksMEJBQUE7QUNrQko7QURmQTtFQUNJLGFBQUE7RUFDQSxtQkFBQTtFQUNBLHVCQUFBO0VBQ0EsV0FBQTtBQ2tCSjtBRGpCSTs7RUFFSSxjQUFBO0FDbUJSO0FEaEJJO0VBQ0ksV0FBQTtBQ2tCUjtBRGRBO0VBQ0ksYUFBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EsbUJBQUE7RUFDQSx1QkFBQTtFQUNBLGNBQUE7QUNpQko7QURkQTtFQUNJLFlBQUE7RUFDQSxrQkFBQTtFQUNBLGdCQUFBO0FDaUJKO0FEZkE7RUFDSSwyQkFBQTtBQ2tCSjtBRGZBO0VBQ0ksY0FBQTtFQUNBLGVBQUE7QUNrQko7QURmUTtFQUNJLGdCQUFBO0FDaUJaO0FEWkE7RUFDSSxhQUFBO0VBQ0EsbUJBQUE7RUFDQSx1QkFBQTtFQUNBLGdCQUFBO0FDZUo7QURaQTtFQUNJLGFBQUE7RUFDQSw0QkFBQTtFQUNBLFdBQUE7RUFDQSxrQkFBQTtBQ2VKO0FEYkk7RUFDSSxxQ0FBQTtBQ2VSO0FGakhRO0VDMkZSO0lBV1EsZUFBQTtFQ2VOO0FBQ0Y7QUZuSFE7RUN3RlI7SUFXUSxlQUFBO0VDb0JOO0FBQ0Y7QURqQkE7RUFDSSxVQUFBO0VBQ0Esa0JBQUE7RUFDQSxpQkFBQTtFQUNBLGlCQUFBO0VBQ0EsZ0JBQUE7QUNvQko7QUZuSVE7RUMwR1I7SUFPUSxXQUFBO0lBQ0Esb0JBQUE7RUNzQk47QUFDRjtBRnRJUTtFQ3VHUjtJQU9RLFdBQUE7SUFDQSxvQkFBQTtFQzRCTjtBQUNGO0FEekJBO0VBQ0ksT0FBQTtFQUNBLGNBQUE7RUFDQSxnQkFBQTtBQzRCSjtBRDFCSTtFQUNJLGdCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtFQUNBLDBCQUFBO0VBQ0EsZUFBQTtBQzRCUjtBRDFCUTtFQUNJLGNGNUhJO0FHd0poQjtBRHZCQTtFQUNJLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxtQkFBQTtFQUNBLHVDQUFBO0FDMEJKO0FEdEJBO0VBQ0ksYUFBQTtFQUNBLG1CQUFBO0VBQ0EscUJBQUE7RUFDQSxrQkFBQTtFQUNBLFdBQUE7QUN5Qko7QUR2Qkk7RUFDSSxxQ0FBQTtBQ3lCUjtBRHRCSTtFQUNJLFdBQUE7RUFDQSxVQUFBO0VBQ0EsbUJBQUE7RUFDQSx5QkZyS0U7RUVzS0YsMkJBQUE7QUN3QlI7QURyQkk7RUFDSSxpQkFBQTtFQUNBLE9BQUE7RUFDQSxjQUFBO0FDdUJSO0FEbkJBO0VBQ0ksZ0JBQUE7QUNzQko7QURuQkE7RUFDSSxjQUFBO0FDc0JKO0FEbkJBO0VBQ0ksa0JBQUE7RUFDQSxVQUFBO0VBQ0EsWUFBQTtBQ3NCSiIsImZpbGUiOiJsaWJzL2xlZ2FjeS1vdmVybGF5cy9zcmMvbGliL2Jvb2tpbmctY29uZmlybS9ib29raW5nLWNvbmZpcm0uY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRjb2xvci1icmFuZC1lbGVjdHJpYy1ibHVlOiAjMjI1MWZmO1xuJGNvbG9yLWJyYW5kLWRlZXAtYmx1ZTogIzA1MWMyYztcbiRjb2xvci1icmFuZC1jeWFuOiAjMDBhOWY0O1xuXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGZvbnQtZGFyazogIzAwMDtcbiRmb250LWxpZ2h0OiAjZmZmO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcbiRncmVlbjE6ICMyMTk2NTM7XG5cbiRwZW5kaW5nOiAjZmZiMzAwO1xuJHBlbmRpbmctbGlnaHQ6IGxpZ2h0ZW4oJHBlbmRpbmcsIDEwKTtcbiRwZW5kaW5nLWRhcms6IGRhcmtlbigkcGVuZGluZywgMTApO1xuXG4kZXJyb3I6ICNlNTM5MzU7XG4kZXJyb3ItbGlnaHQ6IGxpZ2h0ZW4oJGVycm9yLCAxMCk7XG4kZXJyb3ItZGFyazogZGFya2VuKCRlcnJvciwgMTApO1xuXG4kY29sb3ItcHJpbWFyeTogIzE5MzdlYTtcbiRjb2xvci1wcmltYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG4kY29sb3ItcHJpbWFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcblxuJGNvbG9yLXNlY29uZGFyeTogIzQyODVGNDtcbiRjb2xvci1zZWNvbmRhcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuJGNvbG9yLXNlY29uZGFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuXG4kYmFja2dyb3VuZDogI2YwZjBmMDtcbiRmb290ZXItYmFjazogIzI2MzIzODtcbiRoZWFkZXItYmFjazogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMDUxQzJDLCAjMDUxQzJDIDQwJSwgIzBCMjQ1MyA2MCUsICMxRjQwRTYgMTAwJSk7XG5cbiRjb2xvci10ZXJuYXJ5OiAjMDUxYzJjO1xuXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cblxuJGZvbnQtc3RhY2s6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuXG4kaGVhZGluZy1mb250OiBcIkxhcmlzaE1jS2luc2V5XCIsICdHZW9yZ2lhJywgc2VyaWY7XG4kZm9udDogJGZvbnQtc3RhY2s7XG5cbiRmb250LWZhbWlseS1wcmltYXJ5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbiRmb250LWZhbWlseS1zZWNvbmRhcnk6IFwiQm93ZXJcIiwgR2VvcmdpYSwgXCJUaW1lcyBOZXcgUm9tYW5cIiBzZXJpZjtcblxuJGJhc2Utc2l6ZTogMTZweDtcbiR0YWJsZXQtc2l6ZTogMTZweDtcbiRtb2JpbGUtc2l6ZTogMTZweDtcblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbiRicmVhay1tb2JpbGU6IDQ1MHB4O1xuJGJyZWFrLXRhYmxldDogODAwcHg7XG4kYnJlYWstbGFwdG9wOiAxMDI0cHg7XG5cbiRicmVhay1sYW5kc2NhcGUtbW9iaWxlOiA4MDBweDtcbiRicmVhay1sYW5kc2NhcGUtdGFibGV0OiAxMDQ4cHg7XG4kYnJlYWstbGFuZHNjYXBlLWxhcHRvcDogMTI4MHB4O1xuIiwiQGltcG9ydCAnLi92YXJpYWJsZXMnO1xuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbkBtaXhpbiBib3gtc2hhZG93KCRjb2xvcjogIzAwMCwgJGRlcHRoOiAxKSB7XG4gICAgYm94LXNoYWRvdzogMCAxcHggM3B4IDFweCAqICgkZGVwdGggLSAxKSByZ2JhKCMwMDAsIC4yKSxcbiAgICAgICAgICAgICAgICAwIDFweCAxcHggMCByZ2JhKCMwMDAsIC4xNCksXG4gICAgICAgICAgICAgICAgMCAycHggMXB4IC0xcHggcmdiYSgjMDAwLCAuMTIpO1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuQG1peGluIHJlc3BvbmQtdG8oJG1lZGlhKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9ICBAZWxzZSBpZiAkbWVkaWEgPT0gbGF0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9QGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIlxuQGltcG9ydCAnLi4vdmFyaWFibGVzJztcbkBpbXBvcnQgJy4uL21peGlucyc7XG5cbm1haW4ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBwYWRkaW5nOiAxZW07XG4gICAgbWluLWhlaWdodDogMjRlbTtcbiAgICB3aWR0aDogMzJlbTtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG59XG5cbi5kZXRhaWxzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBtYXJnaW4tYm90dG9tOiAxZW07XG5cbiAgICBpbWcge1xuICAgICAgICBoZWlnaHQ6IDZlbTtcbiAgICB9XG5cbiAgICAudGV4dCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDFlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgZm9udC1zaXplOiAxLjJlbTtcbiAgICB9XG5cbiAgICAuaW5mbyB7XG4gICAgICAgIGZvbnQtc2l6ZTogLjhlbTtcbiAgICAgICAgY29sb3I6ICRwZW5kaW5nO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgfVxufVxuXG4udGV4dCB7XG4gICAgc3BhbiB7XG4gICAgICAgIGNvbG9yOiAkc3VjY2VzcztcbiAgICB9XG5cbiAgICAucmVxdWVzdCB7XG4gICAgICAgIGNvbG9yOiAkcGVuZGluZztcbiAgICB9XG59XG5cbi50b29sdGlwIHtcbiAgICBmb250LXNpemU6IC42NWVtO1xuICAgIGNvbG9yOiAkY29sb3ItcHJpbWFyeTtcbiAgICBtYXJnaW46IC41ZW07XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbm1hdC1kaWFsb2ctYWN0aW9ucyB7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNjY2M7XG59XG5cbmZvb3RlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJ1dHRvbixcbiAgICBhW2J1dHRvbl0ge1xuICAgICAgICBtaW4td2lkdGg6IDhlbTtcbiAgICB9XG5cbiAgICBhIHtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgfVxufVxuXG4uaWNvbiB7XG4gICAgaGVpZ2h0OiAxLjJlbTtcbiAgICB3aWR0aDogMS4yZW07XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGZvbnQtc2l6ZTogMmVtO1xufVxuXG4uY29udGVudCB7XG4gICAgd2lkdGg6IDE2cmVtO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LXNpemU6IC44ZW07XG59XG5hcHAtaWNvbiB7XG4gICAgdHJhbnNpdGlvbjogZm9udC1zaXplIDIwMG1zO1xufVxuXG4uY2xvc2Uge1xuICAgIGZvbnQtc2l6ZTogMWVtO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICY6aG92ZXIge1xuICAgICAgICBhcHAtaWNvbiB7XG4gICAgICAgICAgICBmb250LXNpemU6IC44ZW07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmJ1dHRvbiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIG1hcmdpbjogMCAuMjVlbTtcbn1cblxuLmZpZWxkIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBhZGRpbmc6IC4yNWVtIC4yNWVtIC41ZW07XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuXG4gICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoIzAwMCwgLjA1KTtcbiAgICB9XG5cbiAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgfVxufVxuXG5sYWJlbCB7XG4gICAgd2lkdGg6IDhlbTtcbiAgICBtYXJnaW4tdG9wOiAuMjVlbTtcbiAgICBtYXJnaW4tcmlnaHQ6IDFlbTtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBmb250LXNpemU6IC44ZW07XG4gICAgQGluY2x1ZGUgcmVzcG9uZC10byhtb2JpbGUpIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IC41ZW07XG4gICAgfVxufVxuXG4udmFsdWUge1xuICAgIGZsZXg6IDE7XG4gICAgbWluLXdpZHRoOiA1MCU7XG4gICAgcGFkZGluZzogMCAuNWVtO1xuXG4gICAgLnNob3cge1xuICAgICAgICBmb250LXNpemU6IC44ZW07XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIGNvbG9yOiAkY29sb3ItcHJpbWFyeTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmxpc3Qge1xuICAgIG1heC1oZWlnaHQ6IDQuNWVtO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgbWFyZ2luLWxlZnQ6IC0uNWVtO1xuICAgIHRyYW5zaXRpb246IG1heC1oZWlnaHQgMC44cyBlYXNlLWluLW91dDtcblxufVxuXG4ubGlzdC1pdGVtIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgcGFkZGluZzogLjI1ZW0gLjVlbTtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICAmOm50aC1jaGlsZCgybikge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCMwMDAsIC4wNSk7XG4gICAgfVxuXG4gICAgLnN0YXR1cyB7XG4gICAgICAgIGhlaWdodDogOHB4O1xuICAgICAgICB3aWR0aDogOHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc3VjY2VzcztcbiAgICAgICAgbWFyZ2luOiAuNWVtIC41ZW0gLjVlbSAwO1xuICAgIH1cblxuICAgIC50ZXh0IHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxZW07XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIG1pbi13aWR0aDogNTAlO1xuICAgIH1cbn1cblxuLmVtYWlsIHtcbiAgICBmb250LXNpemU6IC42ZW07XG59XG5cbmEge1xuICAgIGNvbG9yOiBpbmhlcml0O1xufVxuXG5bbmFtZT1cImNsb3NlXCJdIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAuNWVtO1xuICAgIHJpZ2h0OiAuNWVtO1xufVxuXG4iLCIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbm1haW4ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHBhZGRpbmc6IDFlbTtcbiAgbWluLWhlaWdodDogMjRlbTtcbiAgd2lkdGg6IDMyZW07XG4gIG1heC13aWR0aDogMTAwJTtcbn1cblxuLmRldGFpbHMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgbWFyZ2luLWJvdHRvbTogMWVtO1xufVxuLmRldGFpbHMgaW1nIHtcbiAgaGVpZ2h0OiA2ZW07XG59XG4uZGV0YWlscyAudGV4dCB7XG4gIG1hcmdpbi10b3A6IDFlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgZm9udC1zaXplOiAxLjJlbTtcbn1cbi5kZXRhaWxzIC5pbmZvIHtcbiAgZm9udC1zaXplOiAwLjhlbTtcbiAgY29sb3I6ICNmZmIzMDA7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLnRleHQgc3BhbiB7XG4gIGNvbG9yOiAjNDNhMDQ3O1xufVxuLnRleHQgLnJlcXVlc3Qge1xuICBjb2xvcjogI2ZmYjMwMDtcbn1cblxuLnRvb2x0aXAge1xuICBmb250LXNpemU6IDAuNjVlbTtcbiAgY29sb3I6ICMxOTM3ZWE7XG4gIG1hcmdpbjogMC41ZW07XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG5tYXQtZGlhbG9nLWFjdGlvbnMge1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2NjYztcbn1cblxuZm9vdGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHdpZHRoOiAxMDAlO1xufVxuZm9vdGVyIGJ1dHRvbixcbmZvb3RlciBhW2J1dHRvbl0ge1xuICBtaW4td2lkdGg6IDhlbTtcbn1cbmZvb3RlciBhIHtcbiAgY29sb3I6ICNmZmY7XG59XG5cbi5pY29uIHtcbiAgaGVpZ2h0OiAxLjJlbTtcbiAgd2lkdGg6IDEuMmVtO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZm9udC1zaXplOiAyZW07XG59XG5cbi5jb250ZW50IHtcbiAgd2lkdGg6IDE2cmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG59XG5cbmFwcC1pY29uIHtcbiAgdHJhbnNpdGlvbjogZm9udC1zaXplIDIwMG1zO1xufVxuXG4uY2xvc2Uge1xuICBmb250LXNpemU6IDFlbTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNsb3NlOmhvdmVyIGFwcC1pY29uIHtcbiAgZm9udC1zaXplOiAwLjhlbTtcbn1cblxuYnV0dG9uIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG1hcmdpbjogMCAwLjI1ZW07XG59XG5cbi5maWVsZCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmc6IDAuMjVlbSAwLjI1ZW0gMC41ZW07XG4gIHdpZHRoOiAxMDAlO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG4uZmllbGQ6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmZpZWxkIHtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuZmllbGQge1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgfVxufVxuXG5sYWJlbCB7XG4gIHdpZHRoOiA4ZW07XG4gIG1hcmdpbi10b3A6IDAuMjVlbTtcbiAgbWFyZ2luLXJpZ2h0OiAxZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBmb250LXNpemU6IDAuOGVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgbGFiZWwge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206IDAuNWVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgbGFiZWwge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206IDAuNWVtO1xuICB9XG59XG5cbi52YWx1ZSB7XG4gIGZsZXg6IDE7XG4gIG1pbi13aWR0aDogNTAlO1xuICBwYWRkaW5nOiAwIDAuNWVtO1xufVxuLnZhbHVlIC5zaG93IHtcbiAgZm9udC1zaXplOiAwLjhlbTtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgYm9yZGVyOiBub25lO1xuICBvdXRsaW5lOiBub25lO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLnZhbHVlIC5zaG93OmhvdmVyIHtcbiAgY29sb3I6ICMxOTM3ZWE7XG59XG5cbi5saXN0IHtcbiAgbWF4LWhlaWdodDogNC41ZW07XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIG1hcmdpbi1sZWZ0OiAtMC41ZW07XG4gIHRyYW5zaXRpb246IG1heC1oZWlnaHQgMC44cyBlYXNlLWluLW91dDtcbn1cblxuLmxpc3QtaXRlbSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDAuMjVlbSAwLjVlbTtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICB3aWR0aDogMTAwJTtcbn1cbi5saXN0LWl0ZW06bnRoLWNoaWxkKDJuKSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG59XG4ubGlzdC1pdGVtIC5zdGF0dXMge1xuICBoZWlnaHQ6IDhweDtcbiAgd2lkdGg6IDhweDtcbiAgYm9yZGVyLXJhZGl1czogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQzYTA0NztcbiAgbWFyZ2luOiAwLjVlbSAwLjVlbSAwLjVlbSAwO1xufVxuLmxpc3QtaXRlbSAudGV4dCB7XG4gIG1hcmdpbi1yaWdodDogMWVtO1xuICBmbGV4OiAxO1xuICBtaW4td2lkdGg6IDUwJTtcbn1cblxuLmVtYWlsIHtcbiAgZm9udC1zaXplOiAwLjZlbTtcbn1cblxuYSB7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuXG5bbmFtZT1jbG9zZV0ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMC41ZW07XG4gIHJpZ2h0OiAwLjVlbTtcbn0iXX0= */"] }); /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(BookingConfirmComponent, [{ type: core_1.Component, args: [{ @@ -11429,8 +11521,17 @@ BookingConfirmComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BookingConfirmCom }], function () { return [{ type: i1.ApplicationService }, { type: i1.UsersService }, { type: i1.OrganisationService }, { type: i1.BookingsService }, { type: i1.BookingStateService }, { type: i1.SpacesService }, { type: i2.Router }, { type: i3.MatDialog }, { type: i3.MatDialogRef }, { type: undefined, decorators: [{ type: core_1.Inject, args: [dialog_1.MAT_DIALOG_DATA] - }] }, { type: i1.SettingsService }, { type: i1.CloseDialogService }]; }, { event: [{ + }] }, { type: i1.SettingsService }, { type: i1.CloseDialogService }, { type: i0.Renderer2 }]; }, { event: [{ type: core_1.Output + }], attendeesListRef: [{ + type: core_1.ViewChild, + args: ['attendeesListRef'] + }], locationsListRef: [{ + type: core_1.ViewChild, + args: ['locationsListRef'] + }], cateringListRef: [{ + type: core_1.ViewChild, + args: ['cateringListRef'] }] }); })(); @@ -11462,20 +11563,20 @@ const i2 = __webpack_require__(/*! @angular/material/dialog */ "../../node_modul const i3 = __webpack_require__(/*! @angular/common */ "../../node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js"); const i4 = __webpack_require__(/*! @angular/forms */ "../../node_modules/@angular/forms/__ivy_ngcc__/fesm2015/forms.js"); const i5 = __webpack_require__(/*! @angular/material/slide-toggle */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/slide-toggle.js"); -const i6 = __webpack_require__(/*! ../../../../legacy-ui/src/lib/custom-fields/action-field/action-field.component */ "../../libs/legacy-ui/src/lib/custom-fields/action-field/action-field.component.ts"); -const i7 = __webpack_require__(/*! @angular/material/form-field */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/form-field.js"); -const i8 = __webpack_require__(/*! @angular/material/input */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/input.js"); -const i9 = __webpack_require__(/*! ../../../../ui/src/lib/date-tz-date-picker/date-tz-date-picker.component */ "../../libs/ui/src/lib/date-tz-date-picker/date-tz-date-picker.component.ts"); -const i10 = __webpack_require__(/*! ../../../../ui/src/lib/date-tz-time-field/date-tz-time-field.component */ "../../libs/ui/src/lib/date-tz-time-field/date-tz-time-field.component.ts"); -const i11 = __webpack_require__(/*! ../../../../ui/src/lib/date-tz-duration-field/date-tz-duration-field.component */ "../../libs/ui/src/lib/date-tz-duration-field/date-tz-duration-field.component.ts"); -const i12 = __webpack_require__(/*! ../../../../ui/src/lib/recurrence-booking-form/recurrence-booking-form.component */ "../../libs/ui/src/lib/recurrence-booking-form/recurrence-booking-form.component.ts"); -const i13 = __webpack_require__(/*! ../../../../legacy-ui/src/lib/custom-fields/user-search-field/user-search-field.component */ "../../libs/legacy-ui/src/lib/custom-fields/user-search-field/user-search-field.component.ts"); -const i14 = __webpack_require__(/*! @angular/material/select */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/select.js"); -const i15 = __webpack_require__(/*! @angular/material/core */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/core.js"); -const i16 = __webpack_require__(/*! ../../../../legacy-ui/src/lib/custom-fields/user-list-field/user-list-field.component */ "../../libs/legacy-ui/src/lib/custom-fields/user-list-field/user-list-field.component.ts"); -const i17 = __webpack_require__(/*! @angular/material/chips */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/chips.js"); -const i18 = __webpack_require__(/*! @angular/material/button */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/button.js"); -const i19 = __webpack_require__(/*! @angular/material/checkbox */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/checkbox.js"); +const i6 = __webpack_require__(/*! @angular/material/checkbox */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/checkbox.js"); +const i7 = __webpack_require__(/*! ../../../../legacy-ui/src/lib/custom-fields/action-field/action-field.component */ "../../libs/legacy-ui/src/lib/custom-fields/action-field/action-field.component.ts"); +const i8 = __webpack_require__(/*! @angular/material/form-field */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/form-field.js"); +const i9 = __webpack_require__(/*! @angular/material/input */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/input.js"); +const i10 = __webpack_require__(/*! ../../../../ui/src/lib/date-tz-date-picker/date-tz-date-picker.component */ "../../libs/ui/src/lib/date-tz-date-picker/date-tz-date-picker.component.ts"); +const i11 = __webpack_require__(/*! ../../../../ui/src/lib/date-tz-time-field/date-tz-time-field.component */ "../../libs/ui/src/lib/date-tz-time-field/date-tz-time-field.component.ts"); +const i12 = __webpack_require__(/*! ../../../../ui/src/lib/date-tz-duration-field/date-tz-duration-field.component */ "../../libs/ui/src/lib/date-tz-duration-field/date-tz-duration-field.component.ts"); +const i13 = __webpack_require__(/*! ../../../../ui/src/lib/recurrence-booking-form/recurrence-booking-form.component */ "../../libs/ui/src/lib/recurrence-booking-form/recurrence-booking-form.component.ts"); +const i14 = __webpack_require__(/*! ../../../../legacy-ui/src/lib/custom-fields/user-search-field/user-search-field.component */ "../../libs/legacy-ui/src/lib/custom-fields/user-search-field/user-search-field.component.ts"); +const i15 = __webpack_require__(/*! @angular/material/select */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/select.js"); +const i16 = __webpack_require__(/*! @angular/material/core */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/core.js"); +const i17 = __webpack_require__(/*! ../../../../legacy-ui/src/lib/custom-fields/user-list-field/user-list-field.component */ "../../libs/legacy-ui/src/lib/custom-fields/user-list-field/user-list-field.component.ts"); +const i18 = __webpack_require__(/*! @angular/material/chips */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/chips.js"); +const i19 = __webpack_require__(/*! @angular/material/button */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/button.js"); const i20 = __webpack_require__(/*! @tinymce/tinymce-angular */ "../../node_modules/@tinymce/tinymce-angular/__ivy_ngcc__/fesm2015/tinymce-tinymce-angular.js"); var I18N_0; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) { @@ -11489,13 +11590,13 @@ else { I18N_0 = $localize `:Booking form spaces label␟b67e4d71a44718cb934643ded8b95053411bd7a0␟7905820152903471489:Spaces: `; } function BookingFormComponent_div_0_div_1_Template(rf, ctx) { if (rf & 1) { - const _r16 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div", 21); - i0.ɵɵelementStart(1, "label", 22); + const _r17 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div", 26); + i0.ɵɵelementStart(1, "label", 27); i0.ɵɵi18n(2, I18N_0); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(3, "an-action-field", 23); - i0.ɵɵlistener("onAction", function BookingFormComponent_div_0_div_1_Template_an_action_field_onAction_3_listener() { i0.ɵɵrestoreView(_r16); const ctx_r15 = i0.ɵɵnextContext(2); return ctx_r15.openSpacesModal(); }); + i0.ɵɵelementStart(3, "an-action-field", 28); + i0.ɵɵlistener("onAction", function BookingFormComponent_div_0_div_1_Template_an_action_field_onAction_3_listener() { i0.ɵɵrestoreView(_r17); const ctx_r16 = i0.ɵɵnextContext(2); return ctx_r16.openSpacesModal(); }); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { @@ -11539,25 +11640,25 @@ function BookingFormComponent_div_0_div_2_mat_error_7_Template(rf, ctx) { if (rf i0.ɵɵi18n(1, I18N_7); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r17 = i0.ɵɵnextContext(3); + const ctx_r18 = i0.ɵɵnextContext(3); i0.ɵɵadvance(1); - i0.ɵɵi18nExp((ctx_r17.form == null ? null : ctx_r17.form.get("title").errors) && (ctx_r17.form == null ? null : ctx_r17.form.get("title").hasError("pattern")) ? "Some special characters (^=`~!@#$%*{};:'_\",.<>) are not allowed" : "Title is required"); + i0.ɵɵi18nExp((ctx_r18.form == null ? null : ctx_r18.form.get("title").errors) && (ctx_r18.form == null ? null : ctx_r18.form.get("title").hasError("pattern")) ? "Some special characters (^=`~!@#$%*{};:'_\",.<>) are not allowed" : "Title is required"); i0.ɵɵi18nApply(1); } } function BookingFormComponent_div_0_div_2_Template(rf, ctx) { if (rf & 1) { - const _r19 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div", 24); - i0.ɵɵelementStart(1, "label", 25); + const _r20 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div", 29); + i0.ɵɵelementStart(1, "label", 30); i0.ɵɵi18nStart(2, I18N_2); i0.ɵɵelement(3, "span"); i0.ɵɵi18nEnd(); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(4, "mat-form-field", 26); - i0.ɵɵelementStart(5, "input", 27); + i0.ɵɵelementStart(4, "mat-form-field", 31); + i0.ɵɵelementStart(5, "input", 32); i0.ɵɵi18nAttributes(6, _c6); - i0.ɵɵlistener("blur", function BookingFormComponent_div_0_div_2_Template_input_blur_5_listener() { i0.ɵɵrestoreView(_r19); const ctx_r18 = i0.ɵɵnextContext(2); return ctx_r18.trim("title"); }); + i0.ɵɵlistener("blur", function BookingFormComponent_div_0_div_2_Template_input_blur_5_listener() { i0.ɵɵrestoreView(_r20); const ctx_r19 = i0.ɵɵnextContext(2); return ctx_r19.trim("title"); }); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(7, BookingFormComponent_div_0_div_2_mat_error_7_Template, 2, 1, "mat-error", 28); + i0.ɵɵtemplate(7, BookingFormComponent_div_0_div_2_mat_error_7_Template, 2, 1, "mat-error", 33); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { @@ -11579,29 +11680,29 @@ else { I18N_9 = $localize `:Booking form date label␟9525ffe90586e28313b43904fa020a1ee1e434f6␟6735318627194228061:Date: `; } function BookingFormComponent_div_0_div_3_div_1_div_4_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 35); + i0.ɵɵelementStart(0, "div", 40); i0.ɵɵtext(1, " Date and time must be in the future "); i0.ɵɵelementEnd(); } } function BookingFormComponent_div_0_div_3_div_1_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 31); - i0.ɵɵelementStart(1, "label", 32); + i0.ɵɵelementStart(0, "div", 36); + i0.ɵɵelementStart(1, "label", 37); i0.ɵɵi18n(2, I18N_9); i0.ɵɵelementEnd(); - i0.ɵɵelement(3, "date-tz-date-picker", 33); - i0.ɵɵtemplate(4, BookingFormComponent_div_0_div_3_div_1_div_4_Template, 2, 0, "div", 34); + i0.ɵɵelement(3, "date-tz-date-picker", 38); + i0.ɵɵtemplate(4, BookingFormComponent_div_0_div_3_div_1_div_4_Template, 2, 0, "div", 39); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r20 = i0.ɵɵnextContext(3); + const ctx_r21 = i0.ɵɵnextContext(3); i0.ɵɵadvance(3); - i0.ɵɵclassProp("full-width", ctx_r20.form.controls.action.value === "booking_clone"); - i0.ɵɵproperty("error", ctx_r20.form.controls.dateTz.touched && ctx_r20.form.controls.dateTz.invalid && ctx_r20.form.controls.dateTz.errors.date)("fromDateTz", ctx_r20.fromDateTz)("untilDateTz", ctx_r20.isConcierge ? ctx_r20.untilDateTz : null)("invalid", ctx_r20.form.controls.dateTz.invalid)("can_pick_today", false); + i0.ɵɵclassProp("full-width", ctx_r21.form.controls.action.value === "booking_clone"); + i0.ɵɵproperty("error", ctx_r21.form.controls.dateTz.touched && ctx_r21.form.controls.dateTz.invalid && ctx_r21.form.controls.dateTz.errors.date)("fromDateTz", ctx_r21.fromDateTz)("untilDateTz", ctx_r21.isConcierge ? ctx_r21.untilDateTz : null)("invalid", ctx_r21.form.controls.dateTz.invalid)("can_pick_today", false); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx_r20.form.controls.dateTz.touched && ctx_r20.form.controls.dateTz.invalid && ctx_r20.form.controls.dateTz.errors.date); + i0.ɵɵproperty("ngIf", ctx_r21.form.controls.dateTz.touched && ctx_r21.form.controls.dateTz.invalid && ctx_r21.form.controls.dateTz.errors.date); } } function BookingFormComponent_div_0_div_3_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 29); - i0.ɵɵtemplate(1, BookingFormComponent_div_0_div_3_div_1_Template, 5, 8, "div", 30); + i0.ɵɵelementStart(0, "div", 34); + i0.ɵɵtemplate(1, BookingFormComponent_div_0_div_3_div_1_Template, 5, 8, "div", 35); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r3 = i0.ɵɵnextContext(2); @@ -11620,21 +11721,21 @@ else { I18N_11 = $localize `:Booking form start time label␟8eeedc4b2f9bf50b7d65ba32d83b13ccd3ca131a␟258590540423134508:Start Time: `; } function BookingFormComponent_div_0_div_5_div_4_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 35); + i0.ɵɵelementStart(0, "div", 40); i0.ɵɵtext(1, " Date and time must be in the future "); i0.ɵɵelementEnd(); } } const _c13 = function () { return { standalone: true }; }; function BookingFormComponent_div_0_div_5_Template(rf, ctx) { if (rf & 1) { - const _r24 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div", 36); - i0.ɵɵelementStart(1, "label", 37); + const _r25 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div", 41); + i0.ɵɵelementStart(1, "label", 42); i0.ɵɵi18n(2, I18N_11); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(3, "date-tz-time-field", 38); - i0.ɵɵlistener("ngModelChange", function BookingFormComponent_div_0_div_5_Template_date_tz_time_field_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r23 = i0.ɵɵnextContext(2); return ctx_r23.form.controls.dateTz.setValue($event); }); + i0.ɵɵelementStart(3, "date-tz-time-field", 43); + i0.ɵɵlistener("ngModelChange", function BookingFormComponent_div_0_div_5_Template_date_tz_time_field_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r25); const ctx_r24 = i0.ɵɵnextContext(2); return ctx_r24.form.controls.dateTz.setValue($event); }); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(4, BookingFormComponent_div_0_div_5_div_4_Template, 2, 0, "div", 34); + i0.ɵɵtemplate(4, BookingFormComponent_div_0_div_5_div_4_Template, 2, 0, "div", 39); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r4 = i0.ɵɵnextContext(2); @@ -11655,19 +11756,19 @@ else { I18N_14 = $localize `:Booking form duration label␟b9f856180c49aebb377b33216619f4d9835f875e␟569785428576811345:Duration: `; } function BookingFormComponent_div_0_div_6_div_5_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 35); + i0.ɵɵelementStart(0, "div", 40); i0.ɵɵtext(1, " Duration is invalid. End time must be in the future "); i0.ɵɵelementEnd(); } } function BookingFormComponent_div_0_div_6_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 39); - i0.ɵɵelementStart(1, "div", 40); - i0.ɵɵelementStart(2, "label", 41); + i0.ɵɵelementStart(0, "div", 44); + i0.ɵɵelementStart(1, "div", 45); + i0.ɵɵelementStart(2, "label", 46); i0.ɵɵi18n(3, I18N_14); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); - i0.ɵɵelement(4, "date-tz-duration-field", 42); - i0.ɵɵtemplate(5, BookingFormComponent_div_0_div_6_div_5_Template, 2, 0, "div", 34); + i0.ɵɵelement(4, "date-tz-duration-field", 47); + i0.ɵɵtemplate(5, BookingFormComponent_div_0_div_6_div_5_Template, 2, 0, "div", 39); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r5 = i0.ɵɵnextContext(2); @@ -11676,8 +11777,8 @@ function BookingFormComponent_div_0_div_6_Template(rf, ctx) { if (rf & 1) { i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx_r5.form.controls.duration.touched && ctx_r5.form.controls.duration.invalid); } } -function BookingFormComponent_div_0_div_7_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 43); +function BookingFormComponent_div_0_div_8_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 48); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { @@ -11685,11 +11786,16 @@ function BookingFormComponent_div_0_div_7_Template(rf, ctx) { if (rf & 1) { i0.ɵɵadvance(1); i0.ɵɵtextInterpolate2(" Please be aware that this booking starts at ", ctx_r6.localStart, " and ends at ", ctx_r6.localEnd, " in your local timezone. "); } } -function BookingFormComponent_div_0_recurrence_booking_form_15_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelement(0, "recurrence-booking-form", 44); +function BookingFormComponent_div_0_div_9_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 49); + i0.ɵɵtext(1, " Warning: Changing the booking time outside of catering hours will drop your catering order. "); + i0.ɵɵelementEnd(); +} } +function BookingFormComponent_div_0_recurrence_booking_form_22_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelement(0, "recurrence-booking-form", 50); } if (rf & 2) { - const ctx_r7 = i0.ɵɵnextContext(2); - i0.ɵɵproperty("form", ctx_r7.form); + const ctx_r8 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("form", ctx_r8.form); } } var I18N_16; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) { @@ -11702,46 +11808,46 @@ if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) { else { I18N_16 = $localize `:Booking form organiser label␟6d30be09dfac40ef0698474c6aaeeb22a1c8d856␟6531032616724249294:Host: `; } -function BookingFormComponent_div_0_div_16_a_user_search_field_3_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelement(0, "a-user-search-field", 49); +function BookingFormComponent_div_0_div_23_a_user_search_field_3_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelement(0, "a-user-search-field", 55); } } -function BookingFormComponent_div_0_div_16_mat_form_field_4_mat_option_2_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "mat-option", 52); +function BookingFormComponent_div_0_div_23_mat_form_field_4_mat_option_2_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "mat-option", 58); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { - const user_r29 = ctx.$implicit; - i0.ɵɵproperty("value", user_r29); + const user_r30 = ctx.$implicit; + i0.ɵɵproperty("value", user_r30); i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate1(" ", user_r29.name || user_r29.email, " "); + i0.ɵɵtextInterpolate1(" ", user_r30.name || user_r30.email, " "); } } -function BookingFormComponent_div_0_div_16_mat_form_field_4_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "mat-form-field", 26); - i0.ɵɵelementStart(1, "mat-select", 50); - i0.ɵɵtemplate(2, BookingFormComponent_div_0_div_16_mat_form_field_4_mat_option_2_Template, 2, 2, "mat-option", 51); +function BookingFormComponent_div_0_div_23_mat_form_field_4_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "mat-form-field", 31); + i0.ɵɵelementStart(1, "mat-select", 56); + i0.ɵɵtemplate(2, BookingFormComponent_div_0_div_23_mat_form_field_4_mat_option_2_Template, 2, 2, "mat-option", 57); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r27 = i0.ɵɵnextContext(3); + const ctx_r28 = i0.ɵɵnextContext(3); i0.ɵɵadvance(1); - i0.ɵɵproperty("placeholder", ctx_r27.form.controls.organiser.value.name || ctx_r27.form.controls.organiser.value.email); + i0.ɵɵproperty("placeholder", ctx_r28.form.controls.organiser.value.name || ctx_r28.form.controls.organiser.value.email); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngForOf", ctx_r27.user_list); + i0.ɵɵproperty("ngForOf", ctx_r28.user_list); } } -function BookingFormComponent_div_0_div_16_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 45); - i0.ɵɵelementStart(1, "label", 46); +function BookingFormComponent_div_0_div_23_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 51); + i0.ɵɵelementStart(1, "label", 52); i0.ɵɵi18n(2, I18N_16); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(3, BookingFormComponent_div_0_div_16_a_user_search_field_3_Template, 1, 0, "a-user-search-field", 47); - i0.ɵɵtemplate(4, BookingFormComponent_div_0_div_16_mat_form_field_4_Template, 3, 2, "mat-form-field", 48); + i0.ɵɵtemplate(3, BookingFormComponent_div_0_div_23_a_user_search_field_3_Template, 1, 0, "a-user-search-field", 53); + i0.ɵɵtemplate(4, BookingFormComponent_div_0_div_23_mat_form_field_4_Template, 3, 2, "mat-form-field", 54); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r8 = i0.ɵɵnextContext(2); + const ctx_r9 = i0.ɵɵnextContext(2); i0.ɵɵadvance(3); - i0.ɵɵproperty("ngIf", ctx_r8.isConcierge); + i0.ɵɵproperty("ngIf", ctx_r9.isConcierge); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", !ctx_r8.isConcierge); + i0.ɵɵproperty("ngIf", !ctx_r9.isConcierge); } } var I18N_18; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) { @@ -11765,31 +11871,31 @@ if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) { else { I18N_20 = $localize `:Booking form attendee name error␟519d687d21b43e581eb0bd99c30ee187efd624df␟4210464801449945551: ${"\uFFFD0\uFFFD"}:INTERPOLATION: `; } -function BookingFormComponent_div_0_div_17_mat_error_4_Template(rf, ctx) { if (rf & 1) { +function BookingFormComponent_div_0_div_24_mat_error_4_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "mat-error"); i0.ɵɵi18n(1, I18N_20); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r30 = i0.ɵɵnextContext(3); + const ctx_r31 = i0.ɵɵnextContext(3); i0.ɵɵadvance(1); - i0.ɵɵi18nExp(ctx_r30.form == null ? null : ctx_r30.form.get("attendees").errors == null ? null : ctx_r30.form.get("attendees").errors.customError); + i0.ɵɵi18nExp(ctx_r31.form == null ? null : ctx_r31.form.get("attendees").errors == null ? null : ctx_r31.form.get("attendees").errors.customError); i0.ɵɵi18nApply(1); } } -function BookingFormComponent_div_0_div_17_Template(rf, ctx) { if (rf & 1) { - const _r32 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div", 53); - i0.ɵɵelementStart(1, "label", 54); +function BookingFormComponent_div_0_div_24_Template(rf, ctx) { if (rf & 1) { + const _r33 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div", 59); + i0.ɵɵelementStart(1, "label", 60); i0.ɵɵi18n(2, I18N_18); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(3, "a-user-list-field", 55); - i0.ɵɵlistener("newUser", function BookingFormComponent_div_0_div_17_Template_a_user_list_field_newUser_3_listener() { i0.ɵɵrestoreView(_r32); const ctx_r31 = i0.ɵɵnextContext(2); return ctx_r31.openNewUserModal(); }); + i0.ɵɵelementStart(3, "a-user-list-field", 61); + i0.ɵɵlistener("newUser", function BookingFormComponent_div_0_div_24_Template_a_user_list_field_newUser_3_listener() { i0.ɵɵrestoreView(_r33); const ctx_r32 = i0.ɵɵnextContext(2); return ctx_r32.openNewUserModal(); }); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(4, BookingFormComponent_div_0_div_17_mat_error_4_Template, 2, 1, "mat-error", 28); + i0.ɵɵtemplate(4, BookingFormComponent_div_0_div_24_mat_error_4_Template, 2, 1, "mat-error", 33); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r9 = i0.ɵɵnextContext(2); + const ctx_r10 = i0.ɵɵnextContext(2); i0.ɵɵadvance(4); - i0.ɵɵproperty("ngIf", ctx_r9.form.controls.attendees.invalid); + i0.ɵɵproperty("ngIf", ctx_r10.form.controls.attendees.invalid); } } var I18N_22; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) { @@ -11822,65 +11928,65 @@ if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) { else { I18N_27 = $localize `:Booking form company name error␟89f10cbee6cae2a7628550a002d1968e18789cbe␟8421203528362149732: ${"\uFFFD0\uFFFD"}:INTERPOLATION: `; } -function BookingFormComponent_div_0_div_18_mat_error_9_Template(rf, ctx) { if (rf & 1) { +function BookingFormComponent_div_0_div_25_mat_error_9_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "mat-error"); i0.ɵɵi18n(1, I18N_27); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r34 = i0.ɵɵnextContext(3); + const ctx_r35 = i0.ɵɵnextContext(3); i0.ɵɵadvance(1); - i0.ɵɵi18nExp((ctx_r34.form == null ? null : ctx_r34.form.get("company").errors) && (ctx_r34.form == null ? null : ctx_r34.form.get("company").hasError("pattern")) ? "Some special characters (^=`~@#$%*{};:_\",.<>) are not allowed" : ""); + i0.ɵɵi18nExp((ctx_r35.form == null ? null : ctx_r35.form.get("company").errors) && (ctx_r35.form == null ? null : ctx_r35.form.get("company").hasError("pattern")) ? "Some special characters (^=`~@#$%*{};:_\",.<>) are not allowed" : ""); i0.ɵɵi18nApply(1); } } -function BookingFormComponent_div_0_div_18_mat_chip_14_Template(rf, ctx) { if (rf & 1) { - const _r39 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "mat-chip", 66); - i0.ɵɵlistener("removed", function BookingFormComponent_div_0_div_18_mat_chip_14_Template_mat_chip_removed_0_listener() { i0.ɵɵrestoreView(_r39); const selected_r37 = ctx.$implicit; const ctx_r38 = i0.ɵɵnextContext(3); return ctx_r38.removeOption(selected_r37); }); +function BookingFormComponent_div_0_div_25_mat_chip_14_Template(rf, ctx) { if (rf & 1) { + const _r40 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "mat-chip", 72); + i0.ɵɵlistener("removed", function BookingFormComponent_div_0_div_25_mat_chip_14_Template_mat_chip_removed_0_listener() { i0.ɵɵrestoreView(_r40); const selected_r38 = ctx.$implicit; const ctx_r39 = i0.ɵɵnextContext(3); return ctx_r39.removeOption(selected_r38); }); i0.ɵɵtext(1); - i0.ɵɵelementStart(2, "div", 67); + i0.ɵɵelementStart(2, "div", 73); i0.ɵɵtext(3, "\u2716"); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const selected_r37 = ctx.$implicit; + const selected_r38 = ctx.$implicit; i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate1(" ", selected_r37, " "); + i0.ɵɵtextInterpolate1(" ", selected_r38, " "); } } -function BookingFormComponent_div_0_div_18_Template(rf, ctx) { if (rf & 1) { - const _r41 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div", 56); - i0.ɵɵelementStart(1, "label", 57); +function BookingFormComponent_div_0_div_25_Template(rf, ctx) { if (rf & 1) { + const _r42 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div", 62); + i0.ɵɵelementStart(1, "label", 63); i0.ɵɵi18n(2, I18N_22); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(3, "div", 58); - i0.ɵɵelementStart(4, "mat-form-field", 59); - i0.ɵɵelementStart(5, "div", 60); - i0.ɵɵelementStart(6, "input", 61, 62); + i0.ɵɵelementStart(3, "div", 64); + i0.ɵɵelementStart(4, "mat-form-field", 65); + i0.ɵɵelementStart(5, "div", 66); + i0.ɵɵelementStart(6, "input", 67, 68); i0.ɵɵi18nAttributes(8, _c26); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(9, BookingFormComponent_div_0_div_18_mat_error_9_Template, 2, 1, "mat-error", 28); + i0.ɵɵtemplate(9, BookingFormComponent_div_0_div_25_mat_error_9_Template, 2, 1, "mat-error", 33); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(10, "button", 63); - i0.ɵɵlistener("click", function BookingFormComponent_div_0_div_18_Template_button_click_10_listener($event) { i0.ɵɵrestoreView(_r41); const _r33 = i0.ɵɵreference(7); const ctx_r40 = i0.ɵɵnextContext(2); ctx_r40.addCompany($event, _r33.value); return _r33.value = ""; }); + i0.ɵɵelementStart(10, "button", 69); + i0.ɵɵlistener("click", function BookingFormComponent_div_0_div_25_Template_button_click_10_listener($event) { i0.ɵɵrestoreView(_r42); const _r34 = i0.ɵɵreference(7); const ctx_r41 = i0.ɵɵnextContext(2); ctx_r41.addCompany($event, _r34.value); return _r34.value = ""; }); i0.ɵɵtext(11, "Add"); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(12, "mat-chip-list", null, 64); - i0.ɵɵtemplate(14, BookingFormComponent_div_0_div_18_mat_chip_14_Template, 4, 1, "mat-chip", 65); + i0.ɵɵelementStart(12, "mat-chip-list", null, 70); + i0.ɵɵtemplate(14, BookingFormComponent_div_0_div_25_mat_chip_14_Template, 4, 1, "mat-chip", 71); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const _r35 = i0.ɵɵreference(13); - const ctx_r10 = i0.ɵɵnextContext(2); + const _r36 = i0.ɵɵreference(13); + const ctx_r11 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); - i0.ɵɵclassProp("error", ctx_r10.form.controls.company.invalid && ctx_r10.form.controls.company.touched); + i0.ɵɵclassProp("error", ctx_r11.form.controls.company.invalid && ctx_r11.form.controls.company.touched); i0.ɵɵadvance(5); - i0.ɵɵproperty("matChipInputFor", _r35); + i0.ɵɵproperty("matChipInputFor", _r36); i0.ɵɵadvance(3); - i0.ɵɵproperty("ngIf", ctx_r10.form.controls.company.invalid); + i0.ɵɵproperty("ngIf", ctx_r11.form.controls.company.invalid); i0.ɵɵadvance(5); - i0.ɵɵproperty("ngForOf", ctx_r10.chipOptions); + i0.ɵɵproperty("ngForOf", ctx_r11.chipOptions); } } var I18N_29; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) { @@ -11893,31 +11999,31 @@ if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) { else { I18N_29 = $localize `:Booking form booking type label␟f4ef91167d8cde0c44b5f1816c04514bfddab4ef␟5451072315426622181:Booking Type: `; } -function BookingFormComponent_div_0_div_19_mat_option_5_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "mat-option", 52); +function BookingFormComponent_div_0_div_26_mat_option_5_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "mat-option", 58); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { - const type_r43 = ctx.$implicit; - i0.ɵɵproperty("value", type_r43.id); + const type_r44 = ctx.$implicit; + i0.ɵɵproperty("value", type_r44.id); i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate1(" ", type_r43.name, " "); + i0.ɵɵtextInterpolate1(" ", type_r44.name, " "); } } -function BookingFormComponent_div_0_div_19_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 68); - i0.ɵɵelementStart(1, "label", 69); +function BookingFormComponent_div_0_div_26_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 74); + i0.ɵɵelementStart(1, "label", 75); i0.ɵɵi18n(2, I18N_29); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(3, "mat-form-field", 26); - i0.ɵɵelementStart(4, "mat-select", 70); - i0.ɵɵtemplate(5, BookingFormComponent_div_0_div_19_mat_option_5_Template, 2, 2, "mat-option", 51); + i0.ɵɵelementStart(3, "mat-form-field", 31); + i0.ɵɵelementStart(4, "mat-select", 76); + i0.ɵɵtemplate(5, BookingFormComponent_div_0_div_26_mat_option_5_Template, 2, 2, "mat-option", 57); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r11 = i0.ɵɵnextContext(2); + const ctx_r12 = i0.ɵɵnextContext(2); i0.ɵɵadvance(5); - i0.ɵɵproperty("ngForOf", ctx_r11.booking_types); + i0.ɵɵproperty("ngForOf", ctx_r12.booking_types); } } var I18N_31; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) { @@ -11930,9 +12036,9 @@ if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) { else { I18N_31 = $localize `:Booking form need space label␟d26f4050e8c582703608037601ad1697ab87680b␟1978394059748124340:Need a meeting space? `; } -function BookingFormComponent_div_0_div_20_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 71); - i0.ɵɵelementStart(1, "mat-checkbox", 72); +function BookingFormComponent_div_0_div_27_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 77); + i0.ɵɵelementStart(1, "mat-checkbox", 78); i0.ɵɵi18n(2, I18N_31); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); @@ -11948,9 +12054,9 @@ if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) { else { I18N_33 = $localize `:Booking form need catering label␟699b6c70e53bdd2307d045e794b9c6b34f7a231d␟7411992491467264678: Need catering? `; } -function BookingFormComponent_div_0_div_21_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 73); - i0.ɵɵelementStart(1, "mat-checkbox", 74); +function BookingFormComponent_div_0_div_28_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 79); + i0.ɵɵelementStart(1, "mat-checkbox", 80); i0.ɵɵi18n(2, I18N_33); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); @@ -11975,34 +12081,34 @@ else { I18N_37 = $localize `:␟1d7196648206ad98de33b135cb624c3262bc9682␟9064615467372810718:Meeting Description`; } const _c39 = ["placeholder", I18N_37]; -function BookingFormComponent_div_0_div_22_mat_form_field_3_Template(rf, ctx) { if (rf & 1) { - const _r48 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "mat-form-field", 79); - i0.ɵɵelementStart(1, "textarea", 80); +function BookingFormComponent_div_0_div_29_mat_form_field_3_Template(rf, ctx) { if (rf & 1) { + const _r49 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "mat-form-field", 85); + i0.ɵɵelementStart(1, "textarea", 86); i0.ɵɵi18nAttributes(2, _c39); - i0.ɵɵlistener("blur", function BookingFormComponent_div_0_div_22_mat_form_field_3_Template_textarea_blur_1_listener() { i0.ɵɵrestoreView(_r48); const ctx_r47 = i0.ɵɵnextContext(3); return ctx_r47.trim("body"); }); + i0.ɵɵlistener("blur", function BookingFormComponent_div_0_div_29_mat_form_field_3_Template_textarea_blur_1_listener() { i0.ɵɵrestoreView(_r49); const ctx_r48 = i0.ɵɵnextContext(3); return ctx_r48.trim("body"); }); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } } -function BookingFormComponent_div_0_div_22_ng_template_4_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelement(0, "editor", 81); +function BookingFormComponent_div_0_div_29_ng_template_4_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelement(0, "editor", 87); } } -function BookingFormComponent_div_0_div_22_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 75); - i0.ɵɵelementStart(1, "label", 76); +function BookingFormComponent_div_0_div_29_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 81); + i0.ɵɵelementStart(1, "label", 82); i0.ɵɵi18n(2, I18N_35); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(3, BookingFormComponent_div_0_div_22_mat_form_field_3_Template, 3, 0, "mat-form-field", 77); - i0.ɵɵtemplate(4, BookingFormComponent_div_0_div_22_ng_template_4_Template, 1, 0, "ng-template", null, 78, i0.ɵɵtemplateRefExtractor); + i0.ɵɵtemplate(3, BookingFormComponent_div_0_div_29_mat_form_field_3_Template, 3, 0, "mat-form-field", 83); + i0.ɵɵtemplate(4, BookingFormComponent_div_0_div_29_ng_template_4_Template, 1, 0, "ng-template", null, 84, i0.ɵɵtemplateRefExtractor); i0.ɵɵelementEnd(); } if (rf & 2) { - const _r45 = i0.ɵɵreference(5); - const ctx_r14 = i0.ɵɵnextContext(2); + const _r46 = i0.ɵɵreference(5); + const ctx_r15 = i0.ɵɵnextContext(2); i0.ɵɵadvance(3); - i0.ɵɵproperty("ngIf", !ctx_r14.use_html)("ngIfElse", _r45); + i0.ɵɵproperty("ngIf", !ctx_r15.use_html)("ngIfElse", _r46); } } function BookingFormComponent_div_0_Template(rf, ctx) { if (rf & 1) { - const _r50 = i0.ɵɵgetCurrentView(); + const _r51 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "div", 1); i0.ɵɵtemplate(1, BookingFormComponent_div_0_div_1_Template, 4, 1, "div", 2); i0.ɵɵtemplate(2, BookingFormComponent_div_0_div_2_Template, 8, 3, "div", 3); @@ -12010,37 +12116,50 @@ function BookingFormComponent_div_0_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(4, "div", 5); i0.ɵɵtemplate(5, BookingFormComponent_div_0_div_5_Template, 5, 10, "div", 6); i0.ɵɵtemplate(6, BookingFormComponent_div_0_div_6_Template, 6, 4, "div", 7); - i0.ɵɵtemplate(7, BookingFormComponent_div_0_div_7_Template, 2, 2, "div", 8); + i0.ɵɵelementStart(7, "div", 8); + i0.ɵɵtemplate(8, BookingFormComponent_div_0_div_8_Template, 2, 2, "div", 9); + i0.ɵɵtemplate(9, BookingFormComponent_div_0_div_9_Template, 2, 0, "div", 10); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(8, "div", 9); - i0.ɵɵelementStart(9, "div", 10); - i0.ɵɵelementStart(10, "mat-slide-toggle", 11); - i0.ɵɵlistener("change", function BookingFormComponent_div_0_Template_mat_slide_toggle_change_10_listener() { i0.ɵɵrestoreView(_r50); const ctx_r49 = i0.ɵɵnextContext(); return ctx_r49.onToggleChange("is_recurrent"); }); - i0.ɵɵtext(11, "Recurring booking"); i0.ɵɵelementEnd(); + i0.ɵɵelementStart(10, "div", 11); + i0.ɵɵelementStart(11, "div", 12); + i0.ɵɵelementStart(12, "mat-slide-toggle", 13); + i0.ɵɵlistener("change", function BookingFormComponent_div_0_Template_mat_slide_toggle_change_12_listener() { i0.ɵɵrestoreView(_r51); const ctx_r50 = i0.ɵɵnextContext(); return ctx_r50.onToggleChange("is_recurrent"); }); + i0.ɵɵtext(13, "Recurring booking"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(12, "div", 10); - i0.ɵɵelementStart(13, "mat-slide-toggle", 12); - i0.ɵɵlistener("change", function BookingFormComponent_div_0_Template_mat_slide_toggle_change_13_listener() { i0.ɵɵrestoreView(_r50); const ctx_r51 = i0.ɵɵnextContext(); return ctx_r51.onToggleChange("is_multiroom"); }); - i0.ɵɵtext(14, "Multiroom"); i0.ɵɵelementEnd(); + i0.ɵɵelementStart(14, "div", 12); + i0.ɵɵelementStart(15, "mat-slide-toggle", 14); + i0.ɵɵlistener("change", function BookingFormComponent_div_0_Template_mat_slide_toggle_change_15_listener() { i0.ɵɵrestoreView(_r51); const ctx_r52 = i0.ɵɵnextContext(); return ctx_r52.onToggleChange("is_multiroom", ctx_r52.form.controls == null ? null : ctx_r52.form.controls.is_multiroom == null ? null : ctx_r52.form.controls.is_multiroom.value); }); + i0.ɵɵtext(16, "Multiroom"); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(15, BookingFormComponent_div_0_recurrence_booking_form_15_Template, 1, 1, "recurrence-booking-form", 13); - i0.ɵɵtemplate(16, BookingFormComponent_div_0_div_16_Template, 5, 2, "div", 14); - i0.ɵɵtemplate(17, BookingFormComponent_div_0_div_17_Template, 5, 1, "div", 15); - i0.ɵɵtemplate(18, BookingFormComponent_div_0_div_18_Template, 15, 5, "div", 16); - i0.ɵɵtemplate(19, BookingFormComponent_div_0_div_19_Template, 6, 1, "div", 17); - i0.ɵɵtemplate(20, BookingFormComponent_div_0_div_20_Template, 3, 0, "div", 18); - i0.ɵɵtemplate(21, BookingFormComponent_div_0_div_21_Template, 3, 0, "div", 19); - i0.ɵɵtemplate(22, BookingFormComponent_div_0_div_22_Template, 6, 2, "div", 20); + i0.ɵɵelementStart(17, "div", 12); + i0.ɵɵelementStart(18, "mat-checkbox", 15); + i0.ɵɵlistener("click", function BookingFormComponent_div_0_Template_mat_checkbox_click_18_listener($event) { i0.ɵɵrestoreView(_r51); return $event.stopPropagation(); }); + i0.ɵɵelementStart(19, "div", 16); + i0.ɵɵelementStart(20, "div", 17); + i0.ɵɵtext(21, "Merged"); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵtemplate(22, BookingFormComponent_div_0_recurrence_booking_form_22_Template, 1, 1, "recurrence-booking-form", 18); + i0.ɵɵtemplate(23, BookingFormComponent_div_0_div_23_Template, 5, 2, "div", 19); + i0.ɵɵtemplate(24, BookingFormComponent_div_0_div_24_Template, 5, 1, "div", 20); + i0.ɵɵtemplate(25, BookingFormComponent_div_0_div_25_Template, 15, 5, "div", 21); + i0.ɵɵtemplate(26, BookingFormComponent_div_0_div_26_Template, 6, 1, "div", 22); + i0.ɵɵtemplate(27, BookingFormComponent_div_0_div_27_Template, 3, 0, "div", 23); + i0.ɵɵtemplate(28, BookingFormComponent_div_0_div_28_Template, 3, 0, "div", 24); + i0.ɵɵtemplate(29, BookingFormComponent_div_0_div_29_Template, 6, 2, "div", 25); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r0 = i0.ɵɵnextContext(); var tmp_3_0 = null; const currVal_3 = !((tmp_3_0 = ctx_r0.form.get("is_recurrent")) == null ? null : tmp_3_0.value); - var tmp_9_0 = null; - const currVal_9 = (tmp_9_0 = ctx_r0.form.get("is_recurrent")) == null ? null : tmp_9_0.value; + var tmp_10_0 = null; + const currVal_10 = (tmp_10_0 = ctx_r0.form.get("is_recurrent")) == null ? null : tmp_10_0.value; i0.ɵɵproperty("formGroup", ctx_r0.form); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx_r0.form.value.id && ctx_r0.form.controls.space_list && !ctx_r0.isSeriesAction && !ctx_r0.form.controls.is_multiroom.value); @@ -12052,14 +12171,16 @@ function BookingFormComponent_div_0_Template(rf, ctx) { if (rf & 1) { i0.ɵɵproperty("ngIf", ctx_r0.form.controls.dateTz); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx_r0.form.controls.duration); - i0.ɵɵadvance(1); + i0.ɵɵadvance(2); i0.ɵɵproperty("ngIf", ctx_r0.localStart && ctx_r0.localEnd); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r0.showTimeCateringWarning); i0.ɵɵadvance(3); i0.ɵɵproperty("checked", ctx_r0.form.controls.is_recurrent.value && !ctx_r0.form.controls.is_multiroom.value); i0.ɵɵadvance(3); - i0.ɵɵproperty("checked", ctx_r0.form.controls.is_multiroom.value && !ctx_r0.form.controls.is_recurrent.value); - i0.ɵɵadvance(2); - i0.ɵɵproperty("ngIf", currVal_9); + i0.ɵɵproperty("checked", (ctx_r0.form.controls.is_multiroom == null ? null : ctx_r0.form.controls.is_multiroom.value) && !(ctx_r0.form.controls.is_recurrent == null ? null : ctx_r0.form.controls.is_recurrent.value)); + i0.ɵɵadvance(7); + i0.ɵɵproperty("ngIf", currVal_10); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx_r0.form.controls.organiser); i0.ɵɵadvance(1); @@ -12095,6 +12216,7 @@ class BookingFormComponent extends base_1.BaseDirective { this.localEnd = ""; // Define an array to store selected company options this.chipOptions = []; + this.showTimeCateringWarning = false; this.isConcierge = this.settingsService.concierge; } ngOnInit() { @@ -12145,6 +12267,19 @@ class BookingFormComponent extends base_1.BaseDirective { if (((_a = this.form.controls.id) === null || _a === void 0 ? void 0 : _a.value) && !((_b = this.form.controls.action) === null || _b === void 0 ? void 0 : _b.value)) { this.form.controls.is_recurrent.setValue(false); } + // Subscribe to changes in dateTz, duration, and has_catering + this.subscription('dateTz_changes', this.form.controls.dateTz.valueChanges.subscribe(() => { + this.checkTimeCateringWarning(); + })); + this.subscription('duration_changes', this.form.controls.duration.valueChanges.subscribe(() => { + this.checkTimeCateringWarning(); + })); + // No need to subscribe to catering_changes since we're now handling has_catering + this.subscription('has_catering_changes', this.form.controls.has_catering.valueChanges.subscribe(() => { + this.checkTimeCateringWarning(); + })); + // Initial check + this.checkTimeCateringWarning(); } /** * @@ -12288,29 +12423,70 @@ class BookingFormComponent extends base_1.BaseDirective { get isSeriesAction() { return this.form.value.action === data_common_1.SeriesAction.CLONE || this.form.value.action === data_common_1.SeriesAction.EDIT; } - onToggleChange(toggledControlName) { - var _a, _b, _c, _d; + onToggleChange(toggledControlName, is_multiroom) { + var _a, _b, _c, _d, _e, _f, _g, _h; if (toggledControlName === 'is_recurrent') { // If the is_recurrent toggle is being activated, deactivate is_multiroom if ((_a = this.form.controls.is_recurrent) === null || _a === void 0 ? void 0 : _a.value) { (_b = this.form.controls.is_multiroom) === null || _b === void 0 ? void 0 : _b.setValue(false); + (_c = this.form.controls.merged) === null || _c === void 0 ? void 0 : _c.setValue(false); + (_d = this.form.get('merged')) === null || _d === void 0 ? void 0 : _d.disable(); } } else if (toggledControlName === 'is_multiroom') { // If the is_multiroom toggle is being activated, deactivate is_recurrent - if ((_c = this.form.controls.is_multiroom) === null || _c === void 0 ? void 0 : _c.value) { - (_d = this.form.controls.is_recurrent) === null || _d === void 0 ? void 0 : _d.setValue(false); + if ((_e = this.form.controls.is_multiroom) === null || _e === void 0 ? void 0 : _e.value) { + (_f = this.form.controls.is_recurrent) === null || _f === void 0 ? void 0 : _f.setValue(false); + } + if (is_multiroom) { + this.form.get('merged').setValue(false); + (_g = this.form.get('merged')) === null || _g === void 0 ? void 0 : _g.enable(); + } + else { + this.form.get('merged').setValue(false); + (_h = this.form.get('merged')) === null || _h === void 0 ? void 0 : _h.disable(); } } } + checkTimeCateringWarning() { + var _a, _b; + const dateTz = this.form.controls.dateTz.value; + const duration = this.form.controls.duration.value; + const hasCatering = (_a = this.form.controls.has_catering) === null || _a === void 0 ? void 0 : _a.value; + const cateringOrders = (_b = this.form.controls.catering) === null || _b === void 0 ? void 0 : _b.value; + if (dateTz && duration && hasCatering && cateringOrders && cateringOrders.length > 0) { + // Create DateTime object for the start time + const startDateTime = luxon_1.DateTime.fromISO(dateTz.date, { zone: dateTz.building_tz }); + // Calculate the end time + const endDateTime = startDateTime.plus({ minutes: duration }); + // Get the date part of the startDateTime + const bookingDate = startDateTime.startOf('day'); + // Define 7 am and 8 pm on the booking date + const dayStartAt7am = bookingDate.set({ hour: 7 }); + const dayEndAt8pm = bookingDate.set({ hour: 20 }); + // Check if booking ends before or at 7 am, or starts at or after 8 pm + if (endDateTime <= dayStartAt7am || startDateTime >= dayEndAt8pm) { + // Booking is outside of catering hours and has catering selected + this.showTimeCateringWarning = true; + } + else { + this.showTimeCateringWarning = false; + } + } + else { + this.showTimeCateringWarning = false; + } + // Inform Angular that the component needs to be checked + this.cdRef.markForCheck(); + } } exports.BookingFormComponent = BookingFormComponent; BookingFormComponent.ɵfac = function BookingFormComponent_Factory(t) { return new (t || BookingFormComponent)(i0.ɵɵdirectiveInject(i1.ApplicationService), i0.ɵɵdirectiveInject(i1.UsersService), i0.ɵɵdirectiveInject(i2.MatDialog), i0.ɵɵdirectiveInject(i1.SettingsService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; -BookingFormComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BookingFormComponent, selectors: [["a-booking-form"]], inputs: { form: "form" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [["class", "booking-form", 3, "formGroup", 4, "ngIf"], [1, "booking-form", 3, "formGroup"], ["class", "field", 4, "ngIf"], ["class", "field", "name", "title", 4, "ngIf"], ["class", "group date", 4, "ngIf"], [1, "group", "time"], ["class", "field", "name", "start-time", 4, "ngIf"], ["class", "field", "name", "duration", 4, "ngIf"], ["class", "coachmark", 4, "ngIf"], [1, "field", "toggle-row"], [1, "recurrence-siwch"], ["labelPosition", "after", "name", "recurrence", "formControlName", "is_recurrent", 1, "mck-slide-toggle", 3, "checked", "change"], ["labelPosition", "after", "name", "multiroom", "formControlName", "is_multiroom", 1, "mck-slide-toggle", 3, "checked", "change"], [3, "form", 4, "ngIf"], ["class", "field", "name", "organiser", 4, "ngIf"], ["class", "field", "name", "attendees", 4, "ngIf"], ["class", "field company-name", "name", "company", 4, "ngIf"], ["class", "field", "name", "booking-type", 4, "ngIf"], ["class", "field", "name", "need-space", 4, "ngIf"], ["class", "field", "name", "has-catering", 4, "ngIf"], ["class", "field", "name", "body", 4, "ngIf"], [1, "field"], ["for", "spaces"], ["name", "spaces", 3, "placeholder", "onAction"], ["name", "title", 1, "field"], ["for", "title"], ["appearance", "outline"], ["matInput", "", "name", "title", "formControlName", "title", 3, "blur", 6, "placeholder"], [4, "ngIf"], [1, "group", "date"], ["class", "date-field", "name", "date", 4, "ngIf"], ["name", "date", 1, "date-field"], ["for", "date"], ["name", "date", "formControlName", "dateTz", 1, "time-inputs", 3, "error", "fromDateTz", "untilDateTz", "invalid", "can_pick_today"], ["class", "error info", 4, "ngIf"], [1, "error", "info"], ["name", "start-time", 1, "field"], ["for", "start-time"], ["name", "start-time", 1, "time-inputs", 3, "required", "fromDateTz", "startFromDateTz", "all_day", "ngModel", "disabled", "ngModelOptions", "show_current", "ngModelChange"], ["name", "duration", 1, "field"], [1, "label-group"], ["for", "duration"], ["name", "duration", "formControlName", "duration", 1, "time-inputs", 3, "startDateTz", "required", "all_day"], [1, "coachmark"], [3, "form"], ["name", "organiser", 1, "field"], ["for", "organiser"], ["name", "organiser", "formControlName", "organiser", 4, "ngIf"], ["appearance", "outline", 4, "ngIf"], ["name", "organiser", "formControlName", "organiser"], ["name", "organiser", "formControlName", "organiser", 3, "placeholder"], [3, "value", 4, "ngFor", "ngForOf"], [3, "value"], ["name", "attendees", 1, "field"], ["for", "attendees"], ["name", "attendees", "formControlName", "attendees", 3, "newUser"], ["name", "company", 1, "field", "company-name"], ["for", "company"], [1, "input-with-button"], ["appearance", "outline", 1, "mat-form-field-container"], [1, "chip-input-wrapper"], ["matInput", "", "name", "company", 3, "matChipInputFor", 6, "placeholder"], ["company", ""], ["mat-button", "", 1, "input-button", 3, "click"], ["chipList", ""], ["removable", "", "class", "mat-chip", 3, "removed", 4, "ngFor", "ngForOf"], ["removable", "", 1, "mat-chip", 3, "removed"], ["matChipRemove", "", 1, "mck-close-icon"], ["name", "booking-type", 1, "field"], ["for", "booking-type"], ["name", "booking-type", "formControlName", "booking_type"], ["name", "need-space", 1, "field"], ["formControlName", "needs_space"], ["name", "has-catering", 1, "field"], ["name", "catering", "formControlName", "has_catering"], ["name", "body", 1, "field"], ["for", "body"], ["name", "body", "appearance", "outline", 4, "ngIf", "ngIfElse"], ["html_editor", ""], ["name", "body", "appearance", "outline"], ["matInput", "", "name", "description", "formControlName", "body", 3, "blur", 6, "placeholder"], ["formControlName", "body"]], template: function BookingFormComponent_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵtemplate(0, BookingFormComponent_div_0_Template, 23, 17, "div", 0); +BookingFormComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BookingFormComponent, selectors: [["a-booking-form"]], inputs: { form: "form" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [["class", "booking-form", 3, "formGroup", 4, "ngIf"], [1, "booking-form", 3, "formGroup"], ["class", "field", 4, "ngIf"], ["class", "field", "name", "title", 4, "ngIf"], ["class", "group date", 4, "ngIf"], [1, "group", "time"], ["class", "field", "name", "start-time", 4, "ngIf"], ["class", "field", "name", "duration", 4, "ngIf"], [1, "warnings-container"], ["class", "coachmark", 4, "ngIf"], ["class", "coachmark warning", 4, "ngIf"], [1, "field", "toggle-row"], [1, "recurrence-siwch"], ["labelPosition", "after", "name", "recurrence", "formControlName", "is_recurrent", 1, "mck-slide-toggle", 3, "checked", "change"], ["labelPosition", "after", "name", "multiroom", "formControlName", "is_multiroom", 1, "mck-slide-toggle", 3, "checked", "change"], ["formControlName", "merged", 3, "click"], [1, "key"], [1, "text"], [3, "form", 4, "ngIf"], ["class", "field", "name", "organiser", 4, "ngIf"], ["class", "field", "name", "attendees", 4, "ngIf"], ["class", "field company-name", "name", "company", 4, "ngIf"], ["class", "field", "name", "booking-type", 4, "ngIf"], ["class", "field", "name", "need-space", 4, "ngIf"], ["class", "field", "name", "has-catering", 4, "ngIf"], ["class", "field", "name", "body", 4, "ngIf"], [1, "field"], ["for", "spaces"], ["name", "spaces", 3, "placeholder", "onAction"], ["name", "title", 1, "field"], ["for", "title"], ["appearance", "outline"], ["matInput", "", "name", "title", "formControlName", "title", 3, "blur", 6, "placeholder"], [4, "ngIf"], [1, "group", "date"], ["class", "date-field", "name", "date", 4, "ngIf"], ["name", "date", 1, "date-field"], ["for", "date"], ["name", "date", "formControlName", "dateTz", 1, "time-inputs", 3, "error", "fromDateTz", "untilDateTz", "invalid", "can_pick_today"], ["class", "error info", 4, "ngIf"], [1, "error", "info"], ["name", "start-time", 1, "field"], ["for", "start-time"], ["name", "start-time", 1, "time-inputs", 3, "required", "fromDateTz", "startFromDateTz", "all_day", "ngModel", "disabled", "ngModelOptions", "show_current", "ngModelChange"], ["name", "duration", 1, "field"], [1, "label-group"], ["for", "duration"], ["name", "duration", "formControlName", "duration", 1, "time-inputs", 3, "startDateTz", "required", "all_day"], [1, "coachmark"], [1, "coachmark", "warning"], [3, "form"], ["name", "organiser", 1, "field"], ["for", "organiser"], ["name", "organiser", "formControlName", "organiser", 4, "ngIf"], ["appearance", "outline", 4, "ngIf"], ["name", "organiser", "formControlName", "organiser"], ["name", "organiser", "formControlName", "organiser", 3, "placeholder"], [3, "value", 4, "ngFor", "ngForOf"], [3, "value"], ["name", "attendees", 1, "field"], ["for", "attendees"], ["name", "attendees", "formControlName", "attendees", 3, "newUser"], ["name", "company", 1, "field", "company-name"], ["for", "company"], [1, "input-with-button"], ["appearance", "outline", 1, "mat-form-field-container"], [1, "chip-input-wrapper"], ["matInput", "", "name", "company", 3, "matChipInputFor", 6, "placeholder"], ["company", ""], ["mat-button", "", 1, "input-button", 3, "click"], ["chipList", ""], ["removable", "", "class", "mat-chip", 3, "removed", 4, "ngFor", "ngForOf"], ["removable", "", 1, "mat-chip", 3, "removed"], ["matChipRemove", "", 1, "mck-close-icon"], ["name", "booking-type", 1, "field"], ["for", "booking-type"], ["name", "booking-type", "formControlName", "booking_type"], ["name", "need-space", 1, "field"], ["formControlName", "needs_space"], ["name", "has-catering", 1, "field"], ["name", "catering", "formControlName", "has_catering"], ["name", "body", 1, "field"], ["for", "body"], ["name", "body", "appearance", "outline", 4, "ngIf", "ngIfElse"], ["html_editor", ""], ["name", "body", "appearance", "outline"], ["matInput", "", "name", "description", "formControlName", "body", 3, "blur", 6, "placeholder"], ["formControlName", "body"]], template: function BookingFormComponent_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵtemplate(0, BookingFormComponent_div_0_Template, 30, 18, "div", 0); } if (rf & 2) { i0.ɵɵproperty("ngIf", ctx.form); - } }, directives: [i3.NgIf, i4.NgControlStatusGroup, i4.FormGroupDirective, i5.MatSlideToggle, i4.NgControlStatus, i4.FormControlName, i6.ActionFieldComponent, i7.MatFormField, i8.MatInput, i4.DefaultValueAccessor, i7.MatError, i9.DateTzDatePickerComponent, i10.DateTzTimeFieldComponent, i4.RequiredValidator, i4.NgModel, i11.DateTzDurationFieldComponent, i12.RecurringBookingForm, i13.UserSearchFieldComponent, i14.MatSelect, i3.NgForOf, i15.MatOption, i16.UserListFieldComponent, i17.MatChipInput, i18.MatButton, i17.MatChipList, i17.MatChip, i17.MatChipRemove, i19.MatCheckbox, i20.EditorComponent], styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\nlabel[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-top: 1.25em;\n margin-right: 1em;\n font-weight: bold;\n font-size: 0.8em;\n width: 100%;\n margin-top: 0;\n margin-bottom: 0.5em;\n}\nlabel[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: #ffb300;\n}\nlabel.error[_ngcontent-%COMP%] {\n color: #e53935;\n}\n.field[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n}\n.info[_ngcontent-%COMP%] {\n font-size: 0.7em;\n color: #e53935;\n font-weight: 400;\n margin-left: 1em;\n}\n.label-group[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n width: 100%;\n}\n.label-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n min-width: 1px;\n flex: 1;\n}\n.label-group[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] {\n font-size: 0.8em;\n min-width: 9em;\n flex: 0;\n margin: 0;\n}\nmat-form-field[_ngcontent-%COMP%], a-date-field[_ngcontent-%COMP%], an-action-field[_ngcontent-%COMP%], editor[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 50%;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n mat-form-field[_ngcontent-%COMP%], a-date-field[_ngcontent-%COMP%], an-action-field[_ngcontent-%COMP%], editor[_ngcontent-%COMP%] {\n min-width: 16em;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n mat-form-field[_ngcontent-%COMP%], a-date-field[_ngcontent-%COMP%], an-action-field[_ngcontent-%COMP%], editor[_ngcontent-%COMP%] {\n min-width: 16em;\n }\n}\na-date-field.full-width[_ngcontent-%COMP%] {\n flex: 0 0 100%;\n}\na-date-field[_ngcontent-%COMP%] + .error.info[_ngcontent-%COMP%] {\n margin-top: -1em;\n}\nmat-checkbox[_ngcontent-%COMP%] {\n margin-bottom: 1em;\n}\n.group[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n}\n.group[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] {\n min-width: 17em;\n flex: 1;\n margin: 0.5em;\n}\n.group[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]:first-child {\n margin-left: 0;\n}\n.group[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]:last-child {\n margin-right: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .group[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .group[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n.group[_ngcontent-%COMP%] .coachmark[_ngcontent-%COMP%] {\n position: relative;\n top: -20px;\n left: -6px;\n}\n.recurrence-siwch[_ngcontent-%COMP%] {\n margin-bottom: 0.5em;\n}\n.recurrence-siwch[_ngcontent-%COMP%] .mat-slide-toggle-content {\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif !important;\n color: #333333;\n}\n.time-inputs[_ngcontent-%COMP%], .time-inputs-calendar[_ngcontent-%COMP%] {\n flex: 1;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .time-inputs[_ngcontent-%COMP%], .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 176px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .time-inputs[_ngcontent-%COMP%], .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 176px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-bottom: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-bottom: 1rem;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-bottom: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-bottom: 1rem;\n }\n}\n.date-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n}\n.mat-form-field-wrapper[_ngcontent-%COMP%] {\n width: 100%;\n}\n.company-name[_ngcontent-%COMP%] {\n flex-direction: column;\n margin-bottom: 20px;\n}\n.company-name[_ngcontent-%COMP%] .mat-form-field-container[_ngcontent-%COMP%] {\n display: flow;\n max-width: 90%;\n}\n.company-name[_ngcontent-%COMP%] .mat-form-field-container[_ngcontent-%COMP%] .mat-form-field-wrapper[_ngcontent-%COMP%] {\n padding-bottom: 0em;\n}\n.company-name[_ngcontent-%COMP%] .mat-chip.mat-standard-chip.mat-primary[_ngcontent-%COMP%] {\n border-radius: 20px;\n background-color: #333333;\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-family: \"McKinsey Sans\";\n color: #fff;\n font-size: 0.75rem;\n}\n.company-name[_ngcontent-%COMP%] .mat-chip.mat-standard-chip.mat-primary[_ngcontent-%COMP%] .mck-close-icon[_ngcontent-%COMP%] {\n display: flex;\n align-items: end;\n color: #fff;\n opacity: 1;\n}\n.mat-form-field-wrapper[_ngcontent-%COMP%] .mat-form-field-appearance-outline[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n padding: 1.5em 0 1em 0;\n}\n.chip-input-wrapper[_ngcontent-%COMP%] {\n display: flex;\n}\n.input-with-button[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n}\n.input-with-button[_ngcontent-%COMP%] .input-button[_ngcontent-%COMP%] {\n max-height: 54px;\n}\n.toggle-row[_ngcontent-%COMP%] {\n gap: 20px;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvdmFycy5zY3NzIiwibGlicy9sZWdhY3ktb3ZlcmxheXMvc3JjL2xpYi9ib29raW5nLWZvcm0vYm9va2luZy1mb3JtLmNvbXBvbmVudC5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy91aS9zcmMvbGliL21peGlucy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktb3ZlcmxheXMvc3JjL2xpYi9ib29raW5nLWZvcm0vYm9va2luZy1mb3JtLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzswQkFBQTtBQVFBOzswQkFBQTtBQWtDQTs7Y0FBQTtBQWdCQTs7c0JBQUE7QUExREE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQzVDQTs7c0JBQUE7QUM2QkE7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDa0NsQjtBRDhEQTs7c0JBQUE7QUVrT0E7OztFQUFBO0FDL1RBO0VBQ0ksZUFBQTtFQUNBLGtCQUFBO0VBQ0EsaUJBQUE7RUFDQSxpQkFBQTtFQUNBLGdCQUFBO0VBRUksV0FBQTtFQUNBLGFBQUE7RUFDQSxvQkFBQTtBRndDUjtBRXJDSTtFQUNJLGNIYUU7QUMwQlY7QUVwQ0k7RUFDSSxjSGFBO0FDeUJSO0FFbENBO0VBQ0ksYUFBQTtFQUdJLGVBQUE7QUZtQ1I7QUUvQkE7RUFDSSxnQkFBQTtFQUNBLGNBQUE7RUFDQSxnQkFBQTtFQUNBLGdCQUFBO0FGa0NKO0FFL0JBO0VBQ0ksYUFBQTtFQUNBLG1CQUFBO0VBQ0EsV0FBQTtBRmtDSjtBRWhDSTtFQUNJLGNBQUE7RUFDQSxPQUFBO0FGa0NSO0FFL0JJO0VBQ0ksZ0JBQUE7RUFDQSxjQUFBO0VBQ0EsT0FBQTtFQUNBLFNBQUE7QUZpQ1I7QUU3QkE7Ozs7RUFJSSxPQUFBO0VBQ0EsY0FBQTtBRmdDSjtBRjVFUTtFSXVDUjs7OztJQVFRLGVBQUE7RUZvQ047QUFDRjtBRmpGUTtFSW9DUjs7OztJQVFRLGVBQUE7RUY0Q047QUFDRjtBRXhDQTtFQUNJLGNBQUE7QUYyQ0o7QUV4Q0E7RUFDSSxnQkFBQTtBRjJDSjtBRXZDQTtFQUNJLGtCQUFBO0FGMENKO0FFdENBO0VBQ0ksYUFBQTtFQUNBLGVBQUE7QUZ5Q0o7QUV4Q0k7RUFDSSxlQUFBO0VBQ0EsT0FBQTtFQUNBLGFBQUE7QUYwQ1I7QUV6Q1E7RUFDSSxjQUFBO0FGMkNaO0FFekNRO0VBQ0ksZUFBQTtBRjJDWjtBRnhIUTtFSXFFSjtJQVlRLFNBQUE7RUYyQ1Y7QUFDRjtBRjFIUTtFSWtFSjtJQVlRLFNBQUE7RUZnRFY7QUFDRjtBRTlDSTtFQUNJLGtCQUFBO0VBQ0EsVUFBQTtFQUNBLFVBQUE7QUZnRFI7QUU1Q0E7RUFDSSxvQkFBQTtBRitDSjtBRTdDUTtFQUNJLGdIQUFBO0VBQ0EsY0FBQTtBRitDWjtBRXpDQTtFQUNJLE9BQUE7QUY0Q0o7QUNsS1k7RUNxSFo7SUFHUSxnQkFBQTtFRjhDTjtBQUNGO0FDdktZO0VDcUhaO0lBR1EsZ0JBQUE7RUZtRE47QUFDRjtBQ3hLWTtFQ3VIUjtJQUdRLGVBQUE7SUFDQSxtQkgzRUk7RUM2SGQ7QUFDRjtBQzlLWTtFQ3VIUjtJQUdRLGVBQUE7SUFDQSxtQkgzRUk7RUNtSWQ7QUFDRjtBQzNLUTtFQzhHSjtJQU9RLGVBQUE7SUFDQSxtQkgvRUk7RUN5SWQ7QUFDRjtBQ2pMUTtFQzhHSjtJQU9RLGVBQUE7SUFDQSxtQkgvRUk7RUMrSWQ7QUFDRjtBRTVEQTtFQUNJLGNBQUE7QUYrREo7QUU1REE7RUFDSSxXQUFBO0FGK0RKO0FFNURBO0VBQ0ksc0JBQUE7RUFDQSxtQkFBQTtBRitESjtBRTdESTtFQUNJLGFBQUE7RUFDQSxjQUFBO0FGK0RSO0FFN0RRO0VBQ0ksbUJBQUE7QUYrRFo7QUU1REk7RUFDSSxtQkFBQTtFQUNBLHlCQUFBO0VBQ0Esb0JBQUE7RUFDQSx1QkFBQTtFQUNBLG9CQUFBO0VBQ0EsNEJBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7QUY4RFI7QUU1RFE7RUFDSSxhQUFBO0VBQ0EsZ0JBQUE7RUFDQSxXQUFBO0VBQ0EsVUFBQTtBRjhEWjtBRXpEQTtFQUNJLHNCQUFBO0FGNERKO0FFekRBO0VBQ0ksYUFBQTtBRjRESjtBRXpEQTtFQUNJLGFBQUE7RUFDQSxtQkFBQTtFQUNBLDhCQUFBO0FGNERKO0FFMURJO0VBQ0ksZ0JBQUE7QUY0RFI7QUV4REE7RUFDSSxTQUFBO0FGMkRKIiwiZmlsZSI6ImxpYnMvbGVnYWN5LW92ZXJsYXlzL3NyYy9saWIvYm9va2luZy1mb3JtL2Jvb2tpbmctZm9ybS5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGNvbG9yLWJyYW5kLWVsZWN0cmljLWJsdWU6ICMyMjUxZmY7XG4kY29sb3ItYnJhbmQtZGVlcC1ibHVlOiAjMDUxYzJjO1xuJGNvbG9yLWJyYW5kLWN5YW46ICMwMGE5ZjQ7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kZm9udC1kYXJrOiAjMDAwO1xuJGZvbnQtbGlnaHQ6ICNmZmY7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuJGdyZWVuMTogIzIxOTY1MztcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2xvci1wcmltYXJ5OiAjMTkzN2VhO1xuJGNvbG9yLXByaW1hcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcbiRjb2xvci1wcmltYXJ5LWRhcms6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuXG4kY29sb3Itc2Vjb25kYXJ5OiAjNDI4NUY0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodDogbGlnaHRlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG4kY29sb3Itc2Vjb25kYXJ5LWRhcms6IGRhcmtlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG5cbiRiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuJGZvb3Rlci1iYWNrOiAjMjYzMjM4O1xuJGhlYWRlci1iYWNrOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNTFDMkMsICMwNTFDMkMgNDAlLCAjMEIyNDUzIDYwJSwgIzFGNDBFNiAxMDAlKTtcblxuJGNvbG9yLXRlcm5hcnk6ICMwNTFjMmM7XG5cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuXG4kZm9udC1zdGFjazogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiRoZWFkaW5nLWZvbnQ6IFwiTGFyaXNoTWNLaW5zZXlcIiwgJ0dlb3JnaWEnLCBzZXJpZjtcbiRmb250OiAkZm9udC1zdGFjaztcblxuJGZvbnQtZmFtaWx5LXByaW1hcnk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LXNlY29uZGFyeTogXCJCb3dlclwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiIHNlcmlmO1xuXG4kYmFzZS1zaXplOiAxNnB4O1xuJHRhYmxldC1zaXplOiAxNnB4O1xuJG1vYmlsZS1zaXplOiAxNnB4O1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGJyZWFrLW1vYmlsZTogNDUwcHg7XG4kYnJlYWstdGFibGV0OiA4MDBweDtcbiRicmVhay1sYXB0b3A6IDEwMjRweDtcblxuJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGU6IDgwMHB4O1xuJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQ6IDEwNDhweDtcbiRicmVhay1sYW5kc2NhcGUtbGFwdG9wOiAxMjgwcHg7XG4iLCJAaW1wb3J0ICcuL3ZhcmlhYmxlcyc7XG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuQG1peGluIGJveC1zaGFkb3coJGNvbG9yOiAjMDAwLCAkZGVwdGg6IDEpIHtcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMXB4ICogKCRkZXB0aCAtIDEpIHJnYmEoIzAwMCwgLjIpLFxuICAgICAgICAgICAgICAgIDAgMXB4IDFweCAwIHJnYmEoIzAwMCwgLjE0KSxcbiAgICAgICAgICAgICAgICAwIDJweCAxcHggLTFweCByZ2JhKCMwMDAsIC4xMik7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG5AbWl4aW4gcmVzcG9uZC10bygkbWVkaWEpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gIEBlbHNlIGlmICRtZWRpYSA9PSBsYXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1AZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiJHByaW1hcnk6ICMxRjQwRTY7XG4kZm9ybS1sYWJlbDogIzA1MUMyQztcbiRzZWNvbmRhcnktbGFiZWw6ICM3Njc2NzY7XG4kYm9yZGVyOiAjQjNCM0IzO1xuJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ6ICNEMEQwRDA7XG4kY2hpcC1jb2xvcjogIzMzMzMzMztcbiRwbGFjZWhvbGRlci1jb2xvcjogIzdGN0Y3RjtcbiRiYWNrZ3JvdW5kLWNvbG9yOiAjRjBGMEYwO1xuJHBhZ2UtYmFja2dyb3VuZC1jb2xvcjogI0Y4RjlGQTtcbiRzZWxlY3RlZC1vcHRpb246ICNFNkU2RTY7XG4kY29sb3ItYnJhbmQteWVsbG93OiAjZmZkMDQ4O1xuJGxpZ2h0LXllbGxvdzogI2ZmZjNjZTtcbiRjb2FjaG1hcmstdGV4dDogIzZmNGQwMDtcbiRlcnJvci1jb2xvcjogI0UxMkU0MDtcbiRuby1maWx0ZXJzLWNvbG9yOiAjQkNCQ0JDO1xuJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yOiAjRjRGNEY0O1xuJHByaW1hcnktaGlnaGxpZ2h0OiAjMjI1MUZGO1xuJHNjcm9sbGJhci1jb2xvcjogIzc1NzU3NTtcblxuJGF2YWlsYWJsZS1jb2xvcjogIzVEOUQ1MjtcbiRhdmFpbGFibGUtYnktcmVxdWVzdC1jb2xvcjogI0Y1QjUzRjtcbiRpbi11c2UtY29sb3I6ICNENDQ4M0U7XG4kbm90LWJvb2thYmxlLWNvbG9yOiAjQ0NDQ0NDO1xuXG4kbW9kYWwtYm9keS1oZWFkaW5nOiAjNEQ0RDREO1xuJGFsZXJ0LW92ZXJsYXktYmc6IHJnYmEoNSwgMjgsIDQ0LCAwLjg1KTtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG5cbiRwZW5kaW5nOiAjZmZiMzAwO1xuJHBlbmRpbmctbGlnaHQ6IGxpZ2h0ZW4oJHBlbmRpbmcsIDEwKTtcbiRwZW5kaW5nLWRhcms6IGRhcmtlbigkcGVuZGluZywgMTApO1xuXG4kZXJyb3I6ICNlNTM5MzU7XG4kZXJyb3ItbGlnaHQ6IGxpZ2h0ZW4oJGVycm9yLCAxMCk7XG4kZXJyb3ItZGFyazogZGFya2VuKCRlcnJvciwgMTApO1xuXG4kY29hY2htYXJrLWJnOiAjRUJFQkY2O1xuJGNvYWNobWFyay1kYXJrLXRleHQ6ICMxQjFCMTk7XG4kZXJyb3ItdGV4dDogI2ZmZjtcblxuLyoqXG4gKiBTcGFjaW5nXG4gKi9cblxuLy8gNHB4XG4kc3BhY2luZy1zbWFsbGVzdDogMC4yNXJlbTtcblxuLy8gOHB4XG4kc3BhY2luZy14eHNtYWxsOiAwLjVyZW07XG5cbi8vIDEycHhcbiRzcGFjaW5nLXhzbWFsbDogMC43NXJlbTtcblxuLy8gMTZweFxuJHNwYWNpbmctc21hbGw6IDFyZW07XG5cbi8vIDIwcHhcbiRzcGFjaW5nLXNtYWxsLW1lZGl1bTogMS4yNXJlbTtcblxuLy8gMjRweFxuJHNwYWNpbmctbWVkaXVtOiAxLjVyZW07XG5cbi8vIDI4cHhcbiRzcGFjaW5nLW1lZGl1bS1sYXJnZTogMS43NXJlbTtcblxuLy8gMzJweFxuJHNwYWNpbmctbGFyZ2U6IDJyZW07XG5cbi8vIDQ4cHhcbiRzcGFjaW5nLXhsYXJnZTogM3JlbTtcblxuLy8gNjRweFxuJHNwYWNpbmcteHhsYXJnZTogNHJlbTtcblxuLy8gOTZweFxuJHNwYWNpbmctbGFyZ2VzdDogNnJlbTtcblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbiRkZXZpY2UtbW9iaWxlLXNpemU6IDQ1MHB4O1xuJGRldmljZS10YWJsZXQtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhcHRvcC1zaXplOiAxMDI0cHg7XG5cbiRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplOiAxMDQ4cHg7XG4kZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZTogMTI4MHB4O1xuXG5cbjpleHBvcnQge1xuICAgIHByaW1hcnk6ICRwcmltYXJ5O1xuICAgIHNlY29uZGFyeUxhYmVsOiAkc2Vjb25kYXJ5LWxhYmVsO1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuJGljb24tc21hbGw6IDE2cHg7XG4kaWNvbi1tZWRpdW06IDI0cHg7XG4kaWNvbi1sYXJnZTogMzJweDtcbiRpY29uLXhsYXJnZTogNDhweDtcbiIsIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG5sYWJlbCB7XG4gIG1pbi13aWR0aDogMTAwJTtcbiAgbWFyZ2luLXRvcDogMS4yNWVtO1xuICBtYXJnaW4tcmlnaHQ6IDFlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAwLjVlbTtcbn1cbmxhYmVsIHNwYW4ge1xuICBjb2xvcjogI2ZmYjMwMDtcbn1cbmxhYmVsLmVycm9yIHtcbiAgY29sb3I6ICNlNTM5MzU7XG59XG5cbi5maWVsZCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbn1cblxuLmluZm8ge1xuICBmb250LXNpemU6IDAuN2VtO1xuICBjb2xvcjogI2U1MzkzNTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbWFyZ2luLWxlZnQ6IDFlbTtcbn1cblxuLmxhYmVsLWdyb3VwIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgd2lkdGg6IDEwMCU7XG59XG4ubGFiZWwtZ3JvdXAgbGFiZWwge1xuICBtaW4td2lkdGg6IDFweDtcbiAgZmxleDogMTtcbn1cbi5sYWJlbC1ncm91cCBtYXQtY2hlY2tib3gge1xuICBmb250LXNpemU6IDAuOGVtO1xuICBtaW4td2lkdGg6IDllbTtcbiAgZmxleDogMDtcbiAgbWFyZ2luOiAwO1xufVxuXG5tYXQtZm9ybS1maWVsZCxcbmEtZGF0ZS1maWVsZCxcbmFuLWFjdGlvbi1maWVsZCxcbmVkaXRvciB7XG4gIGZsZXg6IDE7XG4gIG1pbi13aWR0aDogNTAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgbWF0LWZvcm0tZmllbGQsXG5hLWRhdGUtZmllbGQsXG5hbi1hY3Rpb24tZmllbGQsXG5lZGl0b3Ige1xuICAgIG1pbi13aWR0aDogMTZlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIG1hdC1mb3JtLWZpZWxkLFxuYS1kYXRlLWZpZWxkLFxuYW4tYWN0aW9uLWZpZWxkLFxuZWRpdG9yIHtcbiAgICBtaW4td2lkdGg6IDE2ZW07XG4gIH1cbn1cblxuYS1kYXRlLWZpZWxkLmZ1bGwtd2lkdGgge1xuICBmbGV4OiAwIDAgMTAwJTtcbn1cblxuYS1kYXRlLWZpZWxkICsgLmVycm9yLmluZm8ge1xuICBtYXJnaW4tdG9wOiAtMWVtO1xufVxuXG5tYXQtY2hlY2tib3gge1xuICBtYXJnaW4tYm90dG9tOiAxZW07XG59XG5cbi5ncm91cCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbn1cbi5ncm91cCA+ICoge1xuICBtaW4td2lkdGg6IDE3ZW07XG4gIGZsZXg6IDE7XG4gIG1hcmdpbjogMC41ZW07XG59XG4uZ3JvdXAgPiAqOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLWxlZnQ6IDA7XG59XG4uZ3JvdXAgPiAqOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tcmlnaHQ6IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuZ3JvdXAgPiAqIHtcbiAgICBtYXJnaW46IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuZ3JvdXAgPiAqIHtcbiAgICBtYXJnaW46IDA7XG4gIH1cbn1cbi5ncm91cCAuY29hY2htYXJrIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IC0yMHB4O1xuICBsZWZ0OiAtNnB4O1xufVxuXG4ucmVjdXJyZW5jZS1zaXdjaCB7XG4gIG1hcmdpbi1ib3R0b206IDAuNWVtO1xufVxuLnJlY3VycmVuY2Utc2l3Y2ggOjpuZy1kZWVwIC5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnQge1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQ2FsaWJyaSwgQ29yYmVsLCBIZWx2ZXRpY2EsIFJvYm90bywgRHJvaWQsIHNhbnMtc2VyaWYgIWltcG9ydGFudDtcbiAgY29sb3I6ICMzMzMzMzM7XG59XG5cbi50aW1lLWlucHV0cywgLnRpbWUtaW5wdXRzLWNhbGVuZGFyIHtcbiAgZmxleDogMTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC50aW1lLWlucHV0cywgLnRpbWUtaW5wdXRzLWNhbGVuZGFyIHtcbiAgICBtaW4td2lkdGg6IDE3NnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLnRpbWUtaW5wdXRzLCAudGltZS1pbnB1dHMtY2FsZW5kYXIge1xuICAgIG1pbi13aWR0aDogMTc2cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC50aW1lLWlucHV0cy1jYWxlbmRhciB7XG4gICAgbWluLXdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206IDFyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAudGltZS1pbnB1dHMtY2FsZW5kYXIge1xuICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC50aW1lLWlucHV0cy1jYWxlbmRhciB7XG4gICAgbWluLXdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206IDFyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkgYW5kIChtYXgtd2lkdGg6IDEwNDhweCkge1xuICAudGltZS1pbnB1dHMtY2FsZW5kYXIge1xuICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuICB9XG59XG5cbi5kYXRlLWZpZWxkIGxhYmVsIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5jb21wYW55LW5hbWUge1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuLmNvbXBhbnktbmFtZSAubWF0LWZvcm0tZmllbGQtY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxvdztcbiAgbWF4LXdpZHRoOiA5MCU7XG59XG4uY29tcGFueS1uYW1lIC5tYXQtZm9ybS1maWVsZC1jb250YWluZXIgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICBwYWRkaW5nLWJvdHRvbTogMGVtO1xufVxuLmNvbXBhbnktbmFtZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LXByaW1hcnkge1xuICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzMzMzO1xuICBwYWRkaW5nLXRvcDogMC4yNXJlbTtcbiAgcGFkZGluZy1ib3R0b206IDAuMjVyZW07XG4gIHBhZGRpbmctbGVmdDogMC41cmVtO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGNvbG9yOiAjZmZmO1xuICBmb250LXNpemU6IDAuNzVyZW07XG59XG4uY29tcGFueS1uYW1lIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtcHJpbWFyeSAubWNrLWNsb3NlLWljb24ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZW5kO1xuICBjb2xvcjogI2ZmZjtcbiAgb3BhY2l0eTogMTtcbn1cblxuLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICBwYWRkaW5nOiAxLjVlbSAwIDFlbSAwO1xufVxuXG4uY2hpcC1pbnB1dC13cmFwcGVyIHtcbiAgZGlzcGxheTogZmxleDtcbn1cblxuLmlucHV0LXdpdGgtYnV0dG9uIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuLmlucHV0LXdpdGgtYnV0dG9uIC5pbnB1dC1idXR0b24ge1xuICBtYXgtaGVpZ2h0OiA1NHB4O1xufVxuXG4udG9nZ2xlLXJvdyB7XG4gIGdhcDogMjBweDtcbn0iLCJAaW1wb3J0IFwidmFyc1wiO1xuXG5AbWl4aW4gcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkc2l6ZSwgJHF1YWxpZmllcikge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQGlmICgkcXVhbGlmaWVyID09IG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2UgaWYgKCRxdWFsaWZpZXIgPT0gbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1heC13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuQG1peGluIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkbWluLCAkbWF4KSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyB0aGlzIGlzIGEgY29weSBvZiByZXNwb25kLXRvLiB3ZSBkb24ndCB3YW50IHRvIHByZXNlcnZlIHRoYXQgbWV0aG9kIHNpbmNlIHRoZSBicmVha3BvaW50cyBtYXkgZGl2ZXJnZSBmcm9tIHRoZSBvbGQgVUkuXG5AbWl4aW4gaXMtc2NyZWVuLXNpemUoJG1lZGlhOiBhbGwsICRvcmllbnRhdGlvbjogbm9uZSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5cbkBtaXhpbiBwYWdlLXBhZGRpbmcge1xuICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctc21hbGw7XG4gICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctc21hbGw7XG59XG5cbi8vIEZvbnQgTWl4aW5zXG4kZm9udC1tY2tpbnNleS1zYW5zOiBcIk1jS2luc2V5IFNhbnNcIjtcbiRmb250LXRoZWluaGFyZHQ6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuJGZvbnQtYm93ZXI6IFwiQm93ZXJcIjtcblxuQG1peGluIGJvd2VyLWJvbGQge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1ib3dlcjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gbWNraW5zZXktc2FucyB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIGRpc3BsYXktMSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNHJlbTsgLy8gNjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODc7IC8vIDc2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTIge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTMge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2MHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNCB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDNyZW07IC8vIDQ4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNjY7IC8vIDU2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjRweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMwcHhcbiAgICBsaW5lLWhlaWdodDogMS44MzM7IC8vIDM0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY0MjsgLy8gNDBweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0xIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNDhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNzVyZW07IC8vIDQ0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA1MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0yIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjExMTsgLy8gNDRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDQ4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTMge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMjI7IC8vIDQ0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTUge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTYge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTU7IC8vIDI4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBib2R5LWRlZmF1bHQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjZweFxuICAgIH1cbn1cblxuLy8vIERvZXNudCBleGlzdCBpbiBNRFMuXG5AbWl4aW4gYm9keS10aW55IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTsgLy8gMTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDIwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBmb3JtLWxhYmVsIHtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC10aGVpbmhhcmR0O1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBjb2xvcjogJHBsYWNlaG9sZGVyLWNvbG9yO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG59XG5cbkBtaXhpbiBjaGlwLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gY2hlY2tib3gtbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICBjb2xvcjogYmxhY2s7XG59XG5cbi8vIGJvcmRlcnNcblxuQG1peGluIG1jay1jaGVja2JveC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stdGhpbi1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYm9yZGVyLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQtbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlci1saWdodDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cblxuLy8gZnVuY3Rpb25zXG5cbi8qKlxuICogTWFrZXMgdGV4dCBoYXZlIG1heGltdW0gbGluZXMgd2l0aCBlbGxpcHNpcy4gV29ya3Mgb24gbW9zdCBtb2Rlcm4gYnJvd3NlcnMgZXhjZXB0XG4gKiBvZiBGaXJlZm94Li5cbiAqL1xuQG1peGluIG1heC1saW5lcygkY291bnQpIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIC13ZWJraXQtbGluZS1jbGFtcDogJGNvdW50O1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG59XG5cbi8vIGltYWdlc1xuQG1peGluIG1jay1pY29uKCR3aWR0aCwgJGFzc2V0LCAkaGVpZ2h0OiAkd2lkdGgsICAkYXNzZXRQYXRoOiBcImxpYnMvdWkvc3JjL2xpYi9pY29uc1wiLCkge1xuICAgIHdpZHRoOiAkd2lkdGg7XG4gICAgaGVpZ2h0OiAkaGVpZ2h0O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiN7JGFzc2V0UGF0aH0vI3skYXNzZXR9XCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbn1cblxuXG5AbWl4aW4gbWNrLXNtYWxsLWljb24oJG1vYmlsZS1hc3NldCwgJGRlc2t0b3AtYXNzZXQ6ICRtb2JpbGUtYXNzZXQpIHtcbiAgICBAaW5jbHVkZSBtY2staWNvbigxNnB4LCAkYXNzZXQ6ICRtb2JpbGUtYXNzZXQpO1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBAaW5jbHVkZSBtY2staWNvbigyNHB4LCAkYXNzZXQ6ICRkZXNrdG9wLWFzc2V0KTtcbiAgICB9XG59XG5cbi8vIHNrZWxldG9uXG5AbWl4aW4gc2tlbGV0b24tYmcge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1pbWFnZS1zaXplIHtcbiAgICB3aWR0aDogODFweDtcbiAgICBoZWlnaHQ6IDgycHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAyMTlweDtcbiAgICAgICAgaGVpZ2h0OiAxMTlweDtcbiAgICB9XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1zdGF0dXMtc2l6ZSB7XG4gICAgd2lkdGg6IDExN3B4O1xuICAgIGhlaWdodDogNzhweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDExN3B4O1xuICAgICAgICBoZWlnaHQ6IDc4cHg7XG4gICAgfVxufVxuIiwiXG5AaW1wb3J0ICdsaWJzL2xlZ2FjeS11aS9zcmMvbGliL3N0eWxlcy92YXJpYWJsZXMnO1xuQGltcG9ydCAnbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zJztcbkBpbXBvcnQgXCJsaWJzL3VpL3NyYy9saWIvbWl4aW5zXCI7XG5cbmxhYmVsIHtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLXRvcDogMS4yNWVtO1xuICAgIG1hcmdpbi1yaWdodDogMWVtO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGZvbnQtc2l6ZTogLjhlbTtcbiAgICAvLyBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogLjVlbTtcbiAgICAvLyB9XG5cbiAgICBzcGFuIHtcbiAgICAgICAgY29sb3I6ICRwZW5kaW5nO1xuICAgIH1cblxuICAgICYuZXJyb3Ige1xuICAgICAgICBjb2xvcjogJGVycm9yO1xuICAgIH1cbn1cblxuLmZpZWxkIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuXG4gICAgLy8gQGluY2x1ZGUgcmVzcG9uZC10byhtb2JpbGUpIHtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgIC8vIH1cbn1cblxuLmluZm8ge1xuICAgIGZvbnQtc2l6ZTogMC43ZW07XG4gICAgY29sb3I6ICNlNTM5MzU7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBtYXJnaW4tbGVmdDogMWVtO1xufVxuXG4ubGFiZWwtZ3JvdXAge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgIGxhYmVsIHtcbiAgICAgICAgbWluLXdpZHRoOiAxcHg7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgfVxuXG4gICAgbWF0LWNoZWNrYm94IHtcbiAgICAgICAgZm9udC1zaXplOiAuOGVtO1xuICAgICAgICBtaW4td2lkdGg6IDllbTtcbiAgICAgICAgZmxleDogMDtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbn1cblxubWF0LWZvcm0tZmllbGQsXG5hLWRhdGUtZmllbGQsXG5hbi1hY3Rpb24tZmllbGQsXG5lZGl0b3Ige1xuICAgIGZsZXg6IDE7XG4gICAgbWluLXdpZHRoOiA1MCU7XG5cbiAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgICBtaW4td2lkdGg6IDE2ZW07XG4gICAgfVxufVxuXG5cbmEtZGF0ZS1maWVsZC5mdWxsLXdpZHRoIHtcbiAgICBmbGV4OiAwIDAgMTAwJTtcbn1cblxuYS1kYXRlLWZpZWxkICsgLmVycm9yLmluZm8ge1xuICAgIG1hcmdpbi10b3A6IC0xZW07XG59XG5cblxubWF0LWNoZWNrYm94IHtcbiAgICBtYXJnaW4tYm90dG9tOiAxZW07XG59XG5cblxuLmdyb3VwIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICA+ICoge1xuICAgICAgICBtaW4td2lkdGg6IDE3ZW07XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIG1hcmdpbjogLjVlbTtcbiAgICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgICAgfVxuICAgICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgQGluY2x1ZGUgcmVzcG9uZC10byhtb2JpbGUpIHtcbiAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAuY29hY2htYXJrIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB0b3A6IC0yMHB4O1xuICAgICAgICBsZWZ0OiAtNnB4O1xuICAgIH1cbn1cblxuLnJlY3VycmVuY2Utc2l3Y2h7XG4gICAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gICAgOjpuZy1kZWVwIHtcbiAgICAgICAgLm1hdC1zbGlkZS10b2dnbGUtY29udGVudHtcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktcHJpbWFyeSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgY29sb3I6ICMzMzMzMzM7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuLnRpbWUtaW5wdXRzIHtcbiAgICBmbGV4OiAxO1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgbWluLXdpZHRoOiAxNzZweDtcbiAgICB9XG5cbiAgICAmLWNhbGVuZGFyIHtcbiAgICAgICAgQGV4dGVuZCAudGltZS1pbnB1dHM7XG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgbWluLXdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogJHNwYWNpbmctc21hbGw7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUodGFibGV0KSB7XG4gICAgICAgICAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy1zbWFsbDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmRhdGUtZmllbGQgbGFiZWx7XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgICB3aWR0aDogMTAwJTtcbn1cblxuLmNvbXBhbnktbmFtZXtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG5cbiAgICAubWF0LWZvcm0tZmllbGQtY29udGFpbmVye1xuICAgICAgICBkaXNwbGF5OiBmbG93O1xuICAgICAgICBtYXgtd2lkdGg6IDkwJTtcblxuICAgICAgICAubWF0LWZvcm0tZmllbGQtd3JhcHBlciB7XG4gICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMGVtO1xuICAgICAgICB9ICAgICAgICBcbiAgICB9XG4gICAgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1wcmltYXJ5e1xuICAgICAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzMzMzO1xuICAgICAgICBwYWRkaW5nLXRvcDogMC4yNXJlbTtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDAuMjVyZW07XG4gICAgICAgIHBhZGRpbmctbGVmdDogMC41cmVtO1xuICAgICAgICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgXG4gICAgICAgIC5tY2stY2xvc2UtaWNvbntcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogZW5kO1xuICAgICAgICAgICAgY29sb3I6I2ZmZjtcbiAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5tYXQtZm9ybS1maWVsZC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWluZml4e1xuICAgIHBhZGRpbmc6IDEuNWVtIDAgMWVtIDA7XG59XG5cbi5jaGlwLWlucHV0LXdyYXBwZXJ7XG4gICAgZGlzcGxheTogZmxleDtcbn1cblxuLmlucHV0LXdpdGgtYnV0dG9ue1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgICAuaW5wdXQtYnV0dG9ue1xuICAgICAgICBtYXgtaGVpZ2h0OiA1NHB4O1xuICAgIH1cbn1cblxuLnRvZ2dsZS1yb3d7XG4gICAgZ2FwOiAyMHB4O1xufSJdfQ== */"], changeDetection: 0 }); + } }, directives: [i3.NgIf, i4.NgControlStatusGroup, i4.FormGroupDirective, i5.MatSlideToggle, i4.NgControlStatus, i4.FormControlName, i6.MatCheckbox, i7.ActionFieldComponent, i8.MatFormField, i9.MatInput, i4.DefaultValueAccessor, i8.MatError, i10.DateTzDatePickerComponent, i11.DateTzTimeFieldComponent, i4.RequiredValidator, i4.NgModel, i12.DateTzDurationFieldComponent, i13.RecurringBookingForm, i14.UserSearchFieldComponent, i15.MatSelect, i3.NgForOf, i16.MatOption, i17.UserListFieldComponent, i18.MatChipInput, i19.MatButton, i18.MatChipList, i18.MatChip, i18.MatChipRemove, i20.EditorComponent], styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\nlabel[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-top: 1.25em;\n margin-right: 1em;\n font-weight: bold;\n font-size: 0.8em;\n width: 100%;\n margin-top: 0;\n margin-bottom: 0.5em;\n}\nlabel[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: #ffb300;\n}\nlabel.error[_ngcontent-%COMP%] {\n color: #e53935;\n}\n.field[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n}\n.warnings-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n.info[_ngcontent-%COMP%] {\n font-size: 0.7em;\n color: #e53935;\n font-weight: 400;\n margin-left: 1em;\n}\n.label-group[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n width: 100%;\n}\n.label-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n min-width: 1px;\n flex: 1;\n}\n.label-group[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] {\n font-size: 0.8em;\n min-width: 9em;\n flex: 0;\n margin: 0;\n}\nmat-form-field[_ngcontent-%COMP%], a-date-field[_ngcontent-%COMP%], an-action-field[_ngcontent-%COMP%], editor[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 50%;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n mat-form-field[_ngcontent-%COMP%], a-date-field[_ngcontent-%COMP%], an-action-field[_ngcontent-%COMP%], editor[_ngcontent-%COMP%] {\n min-width: 16em;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n mat-form-field[_ngcontent-%COMP%], a-date-field[_ngcontent-%COMP%], an-action-field[_ngcontent-%COMP%], editor[_ngcontent-%COMP%] {\n min-width: 16em;\n }\n}\na-date-field.full-width[_ngcontent-%COMP%] {\n flex: 0 0 100%;\n}\na-date-field[_ngcontent-%COMP%] + .error.info[_ngcontent-%COMP%] {\n margin-top: -1em;\n}\nmat-checkbox[_ngcontent-%COMP%] {\n margin-bottom: 1em;\n}\n.group[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n}\n.group[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] {\n min-width: 17em;\n flex: 1;\n margin: 0.5em;\n}\n.group[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]:first-child {\n margin-left: 0;\n}\n.group[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]:last-child {\n margin-right: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .group[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .group[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n.group[_ngcontent-%COMP%] .coachmark[_ngcontent-%COMP%] {\n position: relative;\n top: -20px;\n left: -6px;\n}\n.group[_ngcontent-%COMP%] .coachmark.warning[_ngcontent-%COMP%] {\n color: #e53935;\n}\n.recurrence-siwch[_ngcontent-%COMP%] {\n margin-bottom: 0.5em;\n}\n.recurrence-siwch[_ngcontent-%COMP%] .mat-slide-toggle-content {\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif !important;\n color: #333333;\n}\n.recurrence-siwch[_ngcontent-%COMP%] .mat-checkbox-layout {\n display: flex;\n}\n.recurrence-siwch[_ngcontent-%COMP%] .key[_ngcontent-%COMP%] {\n display: flex;\n height: 23px;\n padding-bottom: 3px;\n}\n.recurrence-siwch[_ngcontent-%COMP%] .key[_ngcontent-%COMP%] .text[_ngcontent-%COMP%] {\n display: flex;\n place-items: center;\n}\n.time-inputs[_ngcontent-%COMP%], .time-inputs-calendar[_ngcontent-%COMP%] {\n flex: 1;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .time-inputs[_ngcontent-%COMP%], .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 176px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .time-inputs[_ngcontent-%COMP%], .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 176px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-bottom: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-bottom: 1rem;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-bottom: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-bottom: 1rem;\n }\n}\n.date-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n}\n.mat-form-field-wrapper[_ngcontent-%COMP%] {\n width: 100%;\n}\n.company-name[_ngcontent-%COMP%] {\n flex-direction: column;\n margin-bottom: 20px;\n}\n.company-name[_ngcontent-%COMP%] .mat-form-field-container[_ngcontent-%COMP%] {\n display: flow;\n max-width: 90%;\n}\n.company-name[_ngcontent-%COMP%] .mat-form-field-container[_ngcontent-%COMP%] .mat-form-field-wrapper[_ngcontent-%COMP%] {\n padding-bottom: 0em;\n}\n.company-name[_ngcontent-%COMP%] .mat-chip.mat-standard-chip.mat-primary[_ngcontent-%COMP%] {\n border-radius: 20px;\n background-color: #333333;\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-family: \"McKinsey Sans\";\n color: #fff;\n font-size: 0.75rem;\n}\n.company-name[_ngcontent-%COMP%] .mat-chip.mat-standard-chip.mat-primary[_ngcontent-%COMP%] .mck-close-icon[_ngcontent-%COMP%] {\n display: flex;\n align-items: end;\n color: #fff;\n opacity: 1;\n}\n.mat-form-field-wrapper[_ngcontent-%COMP%] .mat-form-field-appearance-outline[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n padding: 1.5em 0 1em 0;\n}\n.chip-input-wrapper[_ngcontent-%COMP%] {\n display: flex;\n}\n.input-with-button[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n}\n.input-with-button[_ngcontent-%COMP%] .input-button[_ngcontent-%COMP%] {\n max-height: 54px;\n}\n.toggle-row[_ngcontent-%COMP%] {\n gap: 20px;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvdmFycy5zY3NzIiwibGlicy9sZWdhY3ktb3ZlcmxheXMvc3JjL2xpYi9ib29raW5nLWZvcm0vYm9va2luZy1mb3JtLmNvbXBvbmVudC5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy91aS9zcmMvbGliL21peGlucy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktb3ZlcmxheXMvc3JjL2xpYi9ib29raW5nLWZvcm0vYm9va2luZy1mb3JtLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzswQkFBQTtBQVFBOzswQkFBQTtBQWtDQTs7Y0FBQTtBQWdCQTs7c0JBQUE7QUExREE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQzVDQTs7c0JBQUE7QUM2QkE7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDa0NsQjtBRDhEQTs7c0JBQUE7QUVrT0E7OztFQUFBO0FDL1RBO0VBQ0ksZUFBQTtFQUNBLGtCQUFBO0VBQ0EsaUJBQUE7RUFDQSxpQkFBQTtFQUNBLGdCQUFBO0VBRUksV0FBQTtFQUNBLGFBQUE7RUFDQSxvQkFBQTtBRndDUjtBRXJDSTtFQUNJLGNIYUU7QUMwQlY7QUVwQ0k7RUFDSSxjSGFBO0FDeUJSO0FFbENBO0VBQ0ksYUFBQTtFQUdJLGVBQUE7QUZtQ1I7QUUvQkE7RUFDSSxhQUFBO0VBQ0Esc0JBQUE7RUFDQSxTQUFBO0FGa0NKO0FFL0JBO0VBQ0ksZ0JBQUE7RUFDQSxjQUFBO0VBQ0EsZ0JBQUE7RUFDQSxnQkFBQTtBRmtDSjtBRS9CQTtFQUNJLGFBQUE7RUFDQSxtQkFBQTtFQUNBLFdBQUE7QUZrQ0o7QUVoQ0k7RUFDSSxjQUFBO0VBQ0EsT0FBQTtBRmtDUjtBRS9CSTtFQUNJLGdCQUFBO0VBQ0EsY0FBQTtFQUNBLE9BQUE7RUFDQSxTQUFBO0FGaUNSO0FFN0JBOzs7O0VBSUksT0FBQTtFQUNBLGNBQUE7QUZnQ0o7QUZsRlE7RUk2Q1I7Ozs7SUFRUSxlQUFBO0VGb0NOO0FBQ0Y7QUZ2RlE7RUkwQ1I7Ozs7SUFRUSxlQUFBO0VGNENOO0FBQ0Y7QUV4Q0E7RUFDSSxjQUFBO0FGMkNKO0FFeENBO0VBQ0ksZ0JBQUE7QUYyQ0o7QUV2Q0E7RUFDSSxrQkFBQTtBRjBDSjtBRXRDQTtFQUNJLGFBQUE7RUFDQSxlQUFBO0FGeUNKO0FFeENJO0VBQ0ksZUFBQTtFQUNBLE9BQUE7RUFDQSxhQUFBO0FGMENSO0FFekNRO0VBQ0ksY0FBQTtBRjJDWjtBRXpDUTtFQUNJLGVBQUE7QUYyQ1o7QUY5SFE7RUkyRUo7SUFZUSxTQUFBO0VGMkNWO0FBQ0Y7QUZoSVE7RUl3RUo7SUFZUSxTQUFBO0VGZ0RWO0FBQ0Y7QUU5Q0k7RUFDSSxrQkFBQTtFQUNBLFVBQUE7RUFDQSxVQUFBO0FGZ0RSO0FFOUNRO0VBQ0ksY0FBQTtBRmdEWjtBRTNDQTtFQUNJLG9CQUFBO0FGOENKO0FFNUNRO0VBQ0ksZ0hBQUE7RUFDQSxjQUFBO0FGOENaO0FFNUNRO0VBQ0ksYUFBQTtBRjhDWjtBRTFDSTtFQUNJLGFBQUE7RUFDQSxZQUFBO0VBQ0EsbUJBQUE7QUY0Q1I7QUUzQ1E7RUFDSSxhQUFBO0VBQ0EsbUJBQUE7QUY2Q1o7QUV2Q0E7RUFDSSxPQUFBO0FGMENKO0FDdkxZO0VDNElaO0lBR1EsZ0JBQUE7RUY0Q047QUFDRjtBQzVMWTtFQzRJWjtJQUdRLGdCQUFBO0VGaUROO0FBQ0Y7QUM3TFk7RUM4SVI7SUFHUSxlQUFBO0lBQ0EsbUJIbEdJO0VDa0pkO0FBQ0Y7QUNuTVk7RUM4SVI7SUFHUSxlQUFBO0lBQ0EsbUJIbEdJO0VDd0pkO0FBQ0Y7QUNoTVE7RUNxSUo7SUFPUSxlQUFBO0lBQ0EsbUJIdEdJO0VDOEpkO0FBQ0Y7QUN0TVE7RUNxSUo7SUFPUSxlQUFBO0lBQ0EsbUJIdEdJO0VDb0tkO0FBQ0Y7QUUxREE7RUFDSSxjQUFBO0FGNkRKO0FFMURBO0VBQ0ksV0FBQTtBRjZESjtBRTFEQTtFQUNJLHNCQUFBO0VBQ0EsbUJBQUE7QUY2REo7QUUzREk7RUFDSSxhQUFBO0VBQ0EsY0FBQTtBRjZEUjtBRTNEUTtFQUNJLG1CQUFBO0FGNkRaO0FFMURJO0VBQ0ksbUJBQUE7RUFDQSx5QkFBQTtFQUNBLG9CQUFBO0VBQ0EsdUJBQUE7RUFDQSxvQkFBQTtFQUNBLDRCQUFBO0VBQ0EsV0FBQTtFQUNBLGtCQUFBO0FGNERSO0FFMURRO0VBQ0ksYUFBQTtFQUNBLGdCQUFBO0VBQ0EsV0FBQTtFQUNBLFVBQUE7QUY0RFo7QUV2REE7RUFDSSxzQkFBQTtBRjBESjtBRXZEQTtFQUNJLGFBQUE7QUYwREo7QUV2REE7RUFDSSxhQUFBO0VBQ0EsbUJBQUE7RUFDQSw4QkFBQTtBRjBESjtBRXhESTtFQUNJLGdCQUFBO0FGMERSO0FFdERBO0VBQ0ksU0FBQTtBRnlESiIsImZpbGUiOiJsaWJzL2xlZ2FjeS1vdmVybGF5cy9zcmMvbGliL2Jvb2tpbmctZm9ybS9ib29raW5nLWZvcm0uY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRjb2xvci1icmFuZC1lbGVjdHJpYy1ibHVlOiAjMjI1MWZmO1xuJGNvbG9yLWJyYW5kLWRlZXAtYmx1ZTogIzA1MWMyYztcbiRjb2xvci1icmFuZC1jeWFuOiAjMDBhOWY0O1xuXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGZvbnQtZGFyazogIzAwMDtcbiRmb250LWxpZ2h0OiAjZmZmO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcbiRncmVlbjE6ICMyMTk2NTM7XG5cbiRwZW5kaW5nOiAjZmZiMzAwO1xuJHBlbmRpbmctbGlnaHQ6IGxpZ2h0ZW4oJHBlbmRpbmcsIDEwKTtcbiRwZW5kaW5nLWRhcms6IGRhcmtlbigkcGVuZGluZywgMTApO1xuXG4kZXJyb3I6ICNlNTM5MzU7XG4kZXJyb3ItbGlnaHQ6IGxpZ2h0ZW4oJGVycm9yLCAxMCk7XG4kZXJyb3ItZGFyazogZGFya2VuKCRlcnJvciwgMTApO1xuXG4kY29sb3ItcHJpbWFyeTogIzE5MzdlYTtcbiRjb2xvci1wcmltYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG4kY29sb3ItcHJpbWFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcblxuJGNvbG9yLXNlY29uZGFyeTogIzQyODVGNDtcbiRjb2xvci1zZWNvbmRhcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuJGNvbG9yLXNlY29uZGFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuXG4kYmFja2dyb3VuZDogI2YwZjBmMDtcbiRmb290ZXItYmFjazogIzI2MzIzODtcbiRoZWFkZXItYmFjazogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMDUxQzJDLCAjMDUxQzJDIDQwJSwgIzBCMjQ1MyA2MCUsICMxRjQwRTYgMTAwJSk7XG5cbiRjb2xvci10ZXJuYXJ5OiAjMDUxYzJjO1xuXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cblxuJGZvbnQtc3RhY2s6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuXG4kaGVhZGluZy1mb250OiBcIkxhcmlzaE1jS2luc2V5XCIsICdHZW9yZ2lhJywgc2VyaWY7XG4kZm9udDogJGZvbnQtc3RhY2s7XG5cbiRmb250LWZhbWlseS1wcmltYXJ5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbiRmb250LWZhbWlseS1zZWNvbmRhcnk6IFwiQm93ZXJcIiwgR2VvcmdpYSwgXCJUaW1lcyBOZXcgUm9tYW5cIiBzZXJpZjtcblxuJGJhc2Utc2l6ZTogMTZweDtcbiR0YWJsZXQtc2l6ZTogMTZweDtcbiRtb2JpbGUtc2l6ZTogMTZweDtcblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbiRicmVhay1tb2JpbGU6IDQ1MHB4O1xuJGJyZWFrLXRhYmxldDogODAwcHg7XG4kYnJlYWstbGFwdG9wOiAxMDI0cHg7XG5cbiRicmVhay1sYW5kc2NhcGUtbW9iaWxlOiA4MDBweDtcbiRicmVhay1sYW5kc2NhcGUtdGFibGV0OiAxMDQ4cHg7XG4kYnJlYWstbGFuZHNjYXBlLWxhcHRvcDogMTI4MHB4O1xuIiwiQGltcG9ydCAnLi92YXJpYWJsZXMnO1xuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbkBtaXhpbiBib3gtc2hhZG93KCRjb2xvcjogIzAwMCwgJGRlcHRoOiAxKSB7XG4gICAgYm94LXNoYWRvdzogMCAxcHggM3B4IDFweCAqICgkZGVwdGggLSAxKSByZ2JhKCMwMDAsIC4yKSxcbiAgICAgICAgICAgICAgICAwIDFweCAxcHggMCByZ2JhKCMwMDAsIC4xNCksXG4gICAgICAgICAgICAgICAgMCAycHggMXB4IC0xcHggcmdiYSgjMDAwLCAuMTIpO1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuQG1peGluIHJlc3BvbmQtdG8oJG1lZGlhKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9ICBAZWxzZSBpZiAkbWVkaWEgPT0gbGF0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9QGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIiRwcmltYXJ5OiAjMUY0MEU2O1xuJGZvcm0tbGFiZWw6ICMwNTFDMkM7XG4kc2Vjb25kYXJ5LWxhYmVsOiAjNzY3Njc2O1xuJGJvcmRlcjogI0IzQjNCMztcbiRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkOiAjRDBEMEQwO1xuJGNoaXAtY29sb3I6ICMzMzMzMzM7XG4kcGxhY2Vob2xkZXItY29sb3I6ICM3RjdGN0Y7XG4kYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDtcbiRwYWdlLWJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4kc2VsZWN0ZWQtb3B0aW9uOiAjRTZFNkU2O1xuJGNvbG9yLWJyYW5kLXllbGxvdzogI2ZmZDA0ODtcbiRsaWdodC15ZWxsb3c6ICNmZmYzY2U7XG4kY29hY2htYXJrLXRleHQ6ICM2ZjRkMDA7XG4kZXJyb3ItY29sb3I6ICNFMTJFNDA7XG4kbm8tZmlsdGVycy1jb2xvcjogI0JDQkNCQztcbiRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjogI0Y0RjRGNDtcbiRwcmltYXJ5LWhpZ2hsaWdodDogIzIyNTFGRjtcbiRzY3JvbGxiYXItY29sb3I6ICM3NTc1NzU7XG5cbiRhdmFpbGFibGUtY29sb3I6ICM1RDlENTI7XG4kYXZhaWxhYmxlLWJ5LXJlcXVlc3QtY29sb3I6ICNGNUI1M0Y7XG4kaW4tdXNlLWNvbG9yOiAjRDQ0ODNFO1xuJG5vdC1ib29rYWJsZS1jb2xvcjogI0NDQ0NDQztcblxuJG1vZGFsLWJvZHktaGVhZGluZzogIzRENEQ0RDtcbiRhbGVydC1vdmVybGF5LWJnOiByZ2JhKDUsIDI4LCA0NCwgMC44NSk7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvYWNobWFyay1iZzogI0VCRUJGNjtcbiRjb2FjaG1hcmstZGFyay10ZXh0OiAjMUIxQjE5O1xuJGVycm9yLXRleHQ6ICNmZmY7XG5cbi8qKlxuICogU3BhY2luZ1xuICovXG5cbi8vIDRweFxuJHNwYWNpbmctc21hbGxlc3Q6IDAuMjVyZW07XG5cbi8vIDhweFxuJHNwYWNpbmcteHhzbWFsbDogMC41cmVtO1xuXG4vLyAxMnB4XG4kc3BhY2luZy14c21hbGw6IDAuNzVyZW07XG5cbi8vIDE2cHhcbiRzcGFjaW5nLXNtYWxsOiAxcmVtO1xuXG4vLyAyMHB4XG4kc3BhY2luZy1zbWFsbC1tZWRpdW06IDEuMjVyZW07XG5cbi8vIDI0cHhcbiRzcGFjaW5nLW1lZGl1bTogMS41cmVtO1xuXG4vLyAyOHB4XG4kc3BhY2luZy1tZWRpdW0tbGFyZ2U6IDEuNzVyZW07XG5cbi8vIDMycHhcbiRzcGFjaW5nLWxhcmdlOiAycmVtO1xuXG4vLyA0OHB4XG4kc3BhY2luZy14bGFyZ2U6IDNyZW07XG5cbi8vIDY0cHhcbiRzcGFjaW5nLXh4bGFyZ2U6IDRyZW07XG5cbi8vIDk2cHhcbiRzcGFjaW5nLWxhcmdlc3Q6IDZyZW07XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kZGV2aWNlLW1vYmlsZS1zaXplOiA0NTBweDtcbiRkZXZpY2UtdGFibGV0LXNpemU6IDgwMHB4O1xuJGRldmljZS1sYXB0b3Atc2l6ZTogMTAyNHB4O1xuXG4kZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZTogMTA0OHB4O1xuJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemU6IDEyODBweDtcblxuXG46ZXhwb3J0IHtcbiAgICBwcmltYXJ5OiAkcHJpbWFyeTtcbiAgICBzZWNvbmRhcnlMYWJlbDogJHNlY29uZGFyeS1sYWJlbDtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbiRpY29uLXNtYWxsOiAxNnB4O1xuJGljb24tbWVkaXVtOiAyNHB4O1xuJGljb24tbGFyZ2U6IDMycHg7XG4kaWNvbi14bGFyZ2U6IDQ4cHg7XG4iLCIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qKlxuICogU3BhY2luZ1xuICovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbjpleHBvcnQge1xuICBwcmltYXJ5OiAjMUY0MEU2O1xuICBzZWNvbmRhcnlMYWJlbDogIzc2NzY3Njtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qKlxuICogTWFrZXMgdGV4dCBoYXZlIG1heGltdW0gbGluZXMgd2l0aCBlbGxpcHNpcy4gV29ya3Mgb24gbW9zdCBtb2Rlcm4gYnJvd3NlcnMgZXhjZXB0XG4gKiBvZiBGaXJlZm94Li5cbiAqL1xubGFiZWwge1xuICBtaW4td2lkdGg6IDEwMCU7XG4gIG1hcmdpbi10b3A6IDEuMjVlbTtcbiAgbWFyZ2luLXJpZ2h0OiAxZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBmb250LXNpemU6IDAuOGVtO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG59XG5sYWJlbCBzcGFuIHtcbiAgY29sb3I6ICNmZmIzMDA7XG59XG5sYWJlbC5lcnJvciB7XG4gIGNvbG9yOiAjZTUzOTM1O1xufVxuXG4uZmllbGQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG59XG5cbi53YXJuaW5ncy1jb250YWluZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDEwcHg7XG59XG5cbi5pbmZvIHtcbiAgZm9udC1zaXplOiAwLjdlbTtcbiAgY29sb3I6ICNlNTM5MzU7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIG1hcmdpbi1sZWZ0OiAxZW07XG59XG5cbi5sYWJlbC1ncm91cCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHdpZHRoOiAxMDAlO1xufVxuLmxhYmVsLWdyb3VwIGxhYmVsIHtcbiAgbWluLXdpZHRoOiAxcHg7XG4gIGZsZXg6IDE7XG59XG4ubGFiZWwtZ3JvdXAgbWF0LWNoZWNrYm94IHtcbiAgZm9udC1zaXplOiAwLjhlbTtcbiAgbWluLXdpZHRoOiA5ZW07XG4gIGZsZXg6IDA7XG4gIG1hcmdpbjogMDtcbn1cblxubWF0LWZvcm0tZmllbGQsXG5hLWRhdGUtZmllbGQsXG5hbi1hY3Rpb24tZmllbGQsXG5lZGl0b3Ige1xuICBmbGV4OiAxO1xuICBtaW4td2lkdGg6IDUwJTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIG1hdC1mb3JtLWZpZWxkLFxuYS1kYXRlLWZpZWxkLFxuYW4tYWN0aW9uLWZpZWxkLFxuZWRpdG9yIHtcbiAgICBtaW4td2lkdGg6IDE2ZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICBtYXQtZm9ybS1maWVsZCxcbmEtZGF0ZS1maWVsZCxcbmFuLWFjdGlvbi1maWVsZCxcbmVkaXRvciB7XG4gICAgbWluLXdpZHRoOiAxNmVtO1xuICB9XG59XG5cbmEtZGF0ZS1maWVsZC5mdWxsLXdpZHRoIHtcbiAgZmxleDogMCAwIDEwMCU7XG59XG5cbmEtZGF0ZS1maWVsZCArIC5lcnJvci5pbmZvIHtcbiAgbWFyZ2luLXRvcDogLTFlbTtcbn1cblxubWF0LWNoZWNrYm94IHtcbiAgbWFyZ2luLWJvdHRvbTogMWVtO1xufVxuXG4uZ3JvdXAge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG59XG4uZ3JvdXAgPiAqIHtcbiAgbWluLXdpZHRoOiAxN2VtO1xuICBmbGV4OiAxO1xuICBtYXJnaW46IDAuNWVtO1xufVxuLmdyb3VwID4gKjpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLmdyb3VwID4gKjpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLXJpZ2h0OiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmdyb3VwID4gKiB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmdyb3VwID4gKiB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG4uZ3JvdXAgLmNvYWNobWFyayB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAtMjBweDtcbiAgbGVmdDogLTZweDtcbn1cbi5ncm91cCAuY29hY2htYXJrLndhcm5pbmcge1xuICBjb2xvcjogI2U1MzkzNTtcbn1cblxuLnJlY3VycmVuY2Utc2l3Y2gge1xuICBtYXJnaW4tYm90dG9tOiAwLjVlbTtcbn1cbi5yZWN1cnJlbmNlLXNpd2NoIDo6bmctZGVlcCAubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50IHtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmICFpbXBvcnRhbnQ7XG4gIGNvbG9yOiAjMzMzMzMzO1xufVxuLnJlY3VycmVuY2Utc2l3Y2ggOjpuZy1kZWVwIC5tYXQtY2hlY2tib3gtbGF5b3V0IHtcbiAgZGlzcGxheTogZmxleDtcbn1cbi5yZWN1cnJlbmNlLXNpd2NoIC5rZXkge1xuICBkaXNwbGF5OiBmbGV4O1xuICBoZWlnaHQ6IDIzcHg7XG4gIHBhZGRpbmctYm90dG9tOiAzcHg7XG59XG4ucmVjdXJyZW5jZS1zaXdjaCAua2V5IC50ZXh0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcbn1cblxuLnRpbWUtaW5wdXRzLCAudGltZS1pbnB1dHMtY2FsZW5kYXIge1xuICBmbGV4OiAxO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLnRpbWUtaW5wdXRzLCAudGltZS1pbnB1dHMtY2FsZW5kYXIge1xuICAgIG1pbi13aWR0aDogMTc2cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAudGltZS1pbnB1dHMsIC50aW1lLWlucHV0cy1jYWxlbmRhciB7XG4gICAgbWluLXdpZHRoOiAxNzZweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLnRpbWUtaW5wdXRzLWNhbGVuZGFyIHtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC50aW1lLWlucHV0cy1jYWxlbmRhciB7XG4gICAgbWluLXdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206IDFyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLnRpbWUtaW5wdXRzLWNhbGVuZGFyIHtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSBhbmQgKG1heC13aWR0aDogMTA0OHB4KSB7XG4gIC50aW1lLWlucHV0cy1jYWxlbmRhciB7XG4gICAgbWluLXdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206IDFyZW07XG4gIH1cbn1cblxuLmRhdGUtZmllbGQgbGFiZWwge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICB3aWR0aDogMTAwJTtcbn1cblxuLmNvbXBhbnktbmFtZSB7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG59XG4uY29tcGFueS1uYW1lIC5tYXQtZm9ybS1maWVsZC1jb250YWluZXIge1xuICBkaXNwbGF5OiBmbG93O1xuICBtYXgtd2lkdGg6IDkwJTtcbn1cbi5jb21wYW55LW5hbWUgLm1hdC1mb3JtLWZpZWxkLWNvbnRhaW5lciAubWF0LWZvcm0tZmllbGQtd3JhcHBlciB7XG4gIHBhZGRpbmctYm90dG9tOiAwZW07XG59XG4uY29tcGFueS1uYW1lIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtcHJpbWFyeSB7XG4gIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzMzMzM7XG4gIHBhZGRpbmctdG9wOiAwLjI1cmVtO1xuICBwYWRkaW5nLWJvdHRvbTogMC4yNXJlbTtcbiAgcGFkZGluZy1sZWZ0OiAwLjVyZW07XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtc2l6ZTogMC43NXJlbTtcbn1cbi5jb21wYW55LW5hbWUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1wcmltYXJ5IC5tY2stY2xvc2UtaWNvbiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBlbmQ7XG4gIGNvbG9yOiAjZmZmO1xuICBvcGFjaXR5OiAxO1xufVxuXG4ubWF0LWZvcm0tZmllbGQtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gIHBhZGRpbmc6IDEuNWVtIDAgMWVtIDA7XG59XG5cbi5jaGlwLWlucHV0LXdyYXBwZXIge1xuICBkaXNwbGF5OiBmbGV4O1xufVxuXG4uaW5wdXQtd2l0aC1idXR0b24ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG59XG4uaW5wdXQtd2l0aC1idXR0b24gLmlucHV0LWJ1dHRvbiB7XG4gIG1heC1oZWlnaHQ6IDU0cHg7XG59XG5cbi50b2dnbGUtcm93IHtcbiAgZ2FwOiAyMHB4O1xufSIsIkBpbXBvcnQgXCJ2YXJzXCI7XG5cbkBtaXhpbiBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRzaXplLCAkcXVhbGlmaWVyKSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAaWYgKCRxdWFsaWZpZXIgPT0gbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSBpZiAoJHF1YWxpZmllciA9PSBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWF4LXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5AbWl4aW4gYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRtaW4sICRtYXgpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkbWluKSBhbmQgKG1heC13aWR0aDogJG1heCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIHRoaXMgaXMgYSBjb3B5IG9mIHJlc3BvbmQtdG8uIHdlIGRvbid0IHdhbnQgdG8gcHJlc2VydmUgdGhhdCBtZXRob2Qgc2luY2UgdGhlIGJyZWFrcG9pbnRzIG1heSBkaXZlcmdlIGZyb20gdGhlIG9sZCBVSS5cbkBtaXhpbiBpcy1zY3JlZW4tc2l6ZSgkbWVkaWE6IGFsbCwgJG9yaWVudGF0aW9uOiBub25lKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cblxuQG1peGluIHBhZ2UtcGFkZGluZyB7XG4gICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbDtcbn1cblxuLy8gRm9udCBNaXhpbnNcbiRmb250LW1ja2luc2V5LXNhbnM6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuJGZvbnQtdGhlaW5oYXJkdDogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4kZm9udC1ib3dlcjogXCJCb3dlclwiO1xuXG5AbWl4aW4gYm93ZXItYm9sZCB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWJvd2VyO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBtY2tpbnNleS1zYW5zIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gZGlzcGxheS0xIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiA0cmVtOyAvLyA2NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4NzsgLy8gNzZweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMiB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDYwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS00IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogM3JlbTsgLy8gNDhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE2NjsgLy8gNTZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS01IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjgzMzsgLy8gMzRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjQyOyAvLyA0MHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS03IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyOHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTEge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA0OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi43NXJlbTsgLy8gNDRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDUycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTIge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTExOyAvLyA0NHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNDhweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMyB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIyMjsgLy8gNDRweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjg4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1NTsgLy8gMjhweFxuICAgIH1cbn1cblxuQG1peGluIGJvZHktZGVmYXVsdCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNnB4XG4gICAgfVxufVxuXG4vLy8gRG9lc250IGV4aXN0IGluIE1EUy5cbkBtaXhpbiBib2R5LXRpbnkge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtOyAvLyAxMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjRweFxuICAgIH1cbn1cblxuQG1peGluIGZvcm0tbGFiZWwge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LXRoZWluaGFyZHQ7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGNvbG9yOiAkcGxhY2Vob2xkZXItY29sb3I7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbn1cblxuQG1peGluIGNoaXAtbGFiZWwge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBjaGVja2JveC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGNvbG9yOiBibGFjaztcbn1cblxuLy8gYm9yZGVyc1xuXG5AbWl4aW4gbWNrLWNoZWNrYm94LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay10aGluLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXItbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBib3JkZXItY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudC1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuXG4vLyBmdW5jdGlvbnNcblxuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG5AbWl4aW4gbWF4LWxpbmVzKCRjb3VudCkge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiAkY291bnQ7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbn1cblxuLy8gaW1hZ2VzXG5AbWl4aW4gbWNrLWljb24oJHdpZHRoLCAkYXNzZXQsICRoZWlnaHQ6ICR3aWR0aCwgICRhc3NldFBhdGg6IFwibGlicy91aS9zcmMvbGliL2ljb25zXCIsKSB7XG4gICAgd2lkdGg6ICR3aWR0aDtcbiAgICBoZWlnaHQ6ICRoZWlnaHQ7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiI3skYXNzZXRQYXRofS8jeyRhc3NldH1cIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuXG5cbkBtaXhpbiBtY2stc21hbGwtaWNvbigkbW9iaWxlLWFzc2V0LCAkZGVza3RvcC1hc3NldDogJG1vYmlsZS1hc3NldCkge1xuICAgIEBpbmNsdWRlIG1jay1pY29uKDE2cHgsICRhc3NldDogJG1vYmlsZS1hc3NldCk7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICRhc3NldDogJGRlc2t0b3AtYXNzZXQpO1xuICAgIH1cbn1cblxuLy8gc2tlbGV0b25cbkBtaXhpbiBza2VsZXRvbi1iZyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWltYWdlLXNpemUge1xuICAgIHdpZHRoOiA4MXB4O1xuICAgIGhlaWdodDogODJweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDIxOXB4O1xuICAgICAgICBoZWlnaHQ6IDExOXB4O1xuICAgIH1cbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLXN0YXR1cy1zaXplIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMTE3cHg7XG4gICAgICAgIGhlaWdodDogNzhweDtcbiAgICB9XG59XG4iLCJcbkBpbXBvcnQgJ2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcyc7XG5AaW1wb3J0ICdsaWJzL2xlZ2FjeS11aS9zcmMvbGliL3N0eWxlcy9taXhpbnMnO1xuQGltcG9ydCBcImxpYnMvdWkvc3JjL2xpYi9taXhpbnNcIjtcblxubGFiZWwge1xuICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tdG9wOiAxLjI1ZW07XG4gICAgbWFyZ2luLXJpZ2h0OiAxZW07XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgZm9udC1zaXplOiAuOGVtO1xuICAgIC8vIEBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAuNWVtO1xuICAgIC8vIH1cblxuICAgIHNwYW4ge1xuICAgICAgICBjb2xvcjogJHBlbmRpbmc7XG4gICAgfVxuXG4gICAgJi5lcnJvciB7XG4gICAgICAgIGNvbG9yOiAkZXJyb3I7XG4gICAgfVxufVxuXG4uZmllbGQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG5cbiAgICAvLyBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgLy8gfVxufVxuXG4ud2FybmluZ3MtY29udGFpbmVye1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDEwcHg7XG59XG5cbi5pbmZvIHtcbiAgICBmb250LXNpemU6IDAuN2VtO1xuICAgIGNvbG9yOiAjZTUzOTM1O1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgbWFyZ2luLWxlZnQ6IDFlbTtcbn1cblxuLmxhYmVsLWdyb3VwIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICBsYWJlbCB7XG4gICAgICAgIG1pbi13aWR0aDogMXB4O1xuICAgICAgICBmbGV4OiAxO1xuICAgIH1cblxuICAgIG1hdC1jaGVja2JveCB7XG4gICAgICAgIGZvbnQtc2l6ZTogLjhlbTtcbiAgICAgICAgbWluLXdpZHRoOiA5ZW07XG4gICAgICAgIGZsZXg6IDA7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICB9XG59XG5cbm1hdC1mb3JtLWZpZWxkLFxuYS1kYXRlLWZpZWxkLFxuYW4tYWN0aW9uLWZpZWxkLFxuZWRpdG9yIHtcbiAgICBmbGV4OiAxO1xuICAgIG1pbi13aWR0aDogNTAlO1xuXG4gICAgQGluY2x1ZGUgcmVzcG9uZC10byhtb2JpbGUpIHtcbiAgICAgICAgbWluLXdpZHRoOiAxNmVtO1xuICAgIH1cbn1cblxuXG5hLWRhdGUtZmllbGQuZnVsbC13aWR0aCB7XG4gICAgZmxleDogMCAwIDEwMCU7XG59XG5cbmEtZGF0ZS1maWVsZCArIC5lcnJvci5pbmZvIHtcbiAgICBtYXJnaW4tdG9wOiAtMWVtO1xufVxuXG5cbm1hdC1jaGVja2JveCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMWVtO1xufVxuXG5cbi5ncm91cCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgPiAqIHtcbiAgICAgICAgbWluLXdpZHRoOiAxN2VtO1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBtYXJnaW46IC41ZW07XG4gICAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICAgIH1cbiAgICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIEBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLmNvYWNobWFyayB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgdG9wOiAtMjBweDtcbiAgICAgICAgbGVmdDogLTZweDtcblxuICAgICAgICAmLndhcm5pbmcge1xuICAgICAgICAgICAgY29sb3I6I2U1MzkzNVxuICAgICAgICB9XG4gICAgfVxufVxuXG4ucmVjdXJyZW5jZS1zaXdjaHtcbiAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTtcbiAgICA6Om5nLWRlZXAge1xuICAgICAgICAubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50e1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1wcmltYXJ5ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgICAgfVxuICAgICAgICAubWF0LWNoZWNrYm94LWxheW91dCB7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuXG4gICAgICAgIH1cbiAgICB9XG4gICAgLmtleSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGhlaWdodDogMjNweDtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDNweDtcbiAgICAgICAgLnRleHQge1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuLnRpbWUtaW5wdXRzIHtcbiAgICBmbGV4OiAxO1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgbWluLXdpZHRoOiAxNzZweDtcbiAgICB9XG5cbiAgICAmLWNhbGVuZGFyIHtcbiAgICAgICAgQGV4dGVuZCAudGltZS1pbnB1dHM7XG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgbWluLXdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogJHNwYWNpbmctc21hbGw7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUodGFibGV0KSB7XG4gICAgICAgICAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy1zbWFsbDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmRhdGUtZmllbGQgbGFiZWx7XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgICB3aWR0aDogMTAwJTtcbn1cblxuLmNvbXBhbnktbmFtZXtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG5cbiAgICAubWF0LWZvcm0tZmllbGQtY29udGFpbmVye1xuICAgICAgICBkaXNwbGF5OiBmbG93O1xuICAgICAgICBtYXgtd2lkdGg6IDkwJTtcblxuICAgICAgICAubWF0LWZvcm0tZmllbGQtd3JhcHBlciB7XG4gICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMGVtO1xuICAgICAgICB9ICAgICAgICBcbiAgICB9XG4gICAgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1wcmltYXJ5e1xuICAgICAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzMzMzO1xuICAgICAgICBwYWRkaW5nLXRvcDogMC4yNXJlbTtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDAuMjVyZW07XG4gICAgICAgIHBhZGRpbmctbGVmdDogMC41cmVtO1xuICAgICAgICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgXG4gICAgICAgIC5tY2stY2xvc2UtaWNvbntcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogZW5kO1xuICAgICAgICAgICAgY29sb3I6I2ZmZjtcbiAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5tYXQtZm9ybS1maWVsZC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWluZml4e1xuICAgIHBhZGRpbmc6IDEuNWVtIDAgMWVtIDA7XG59XG5cbi5jaGlwLWlucHV0LXdyYXBwZXJ7XG4gICAgZGlzcGxheTogZmxleDtcbn1cblxuLmlucHV0LXdpdGgtYnV0dG9ue1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgICAuaW5wdXQtYnV0dG9ue1xuICAgICAgICBtYXgtaGVpZ2h0OiA1NHB4O1xuICAgIH1cbn1cblxuLnRvZ2dsZS1yb3d7XG4gICAgZ2FwOiAyMHB4O1xufSJdfQ== */"], changeDetection: 0 }); /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(BookingFormComponent, [{ type: core_1.Component, args: [{ @@ -12978,7 +13154,7 @@ ConfirmModalComponent.ɵcmp = i0.ɵɵdefineComponent({ type: ConfirmModalCompone i0.ɵɵproperty("ngIf", !ctx.loading)("ngIfElse", _r2); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", !ctx.loading); - } }, directives: [i1.MatDialogTitle, i1.MatDialogContent, i2.NgIf, i3.IconComponent, i1.MatDialogActions, i4.MatButton, i1.MatDialogClose, i5.MatSpinner], styles: [".body[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n flex-direction: column;\n padding: 1em;\n}\napp-icon[_ngcontent-%COMP%] {\n font-size: 3em;\n}\n.content[_ngcontent-%COMP%] {\n min-width: 16rem;\n max-width: 24rem;\n text-align: center;\n font-size: 0.8em;\n}\nfooter[_ngcontent-%COMP%] {\n width: 100%;\n text-align: center;\n}\nmat-dialog-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n min-width: 8em;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktb3ZlcmxheXMvc3JjL2xpYi9jb25maXJtLW1vZGFsL2NvbmZpcm0tbW9kYWwuY29tcG9uZW50LnNjc3MiLCJsaWJzL2xlZ2FjeS1vdmVybGF5cy9zcmMvbGliL2NvbmZpcm0tbW9kYWwvY29uZmlybS1tb2RhbC5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDdkRBO0VBQ0ksYUFBQTtFQUNBLG1CQUFBO0VBQ0Esc0JBQUE7RUFDQSxZQUFBO0FDVUo7QURQQTtFQUNJLGNBQUE7QUNVSjtBRFBBO0VBQ0ksZ0JBQUE7RUFDQSxnQkFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7QUNVSjtBRFBBO0VBQ0ksV0FBQTtFQUNBLGtCQUFBO0FDVUo7QUROSTtFQUNJLGNBQUE7QUNTUiIsImZpbGUiOiJsaWJzL2xlZ2FjeS1vdmVybGF5cy9zcmMvbGliL2NvbmZpcm0tbW9kYWwvY29uZmlybS1tb2RhbC5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGNvbG9yLWJyYW5kLWVsZWN0cmljLWJsdWU6ICMyMjUxZmY7XG4kY29sb3ItYnJhbmQtZGVlcC1ibHVlOiAjMDUxYzJjO1xuJGNvbG9yLWJyYW5kLWN5YW46ICMwMGE5ZjQ7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kZm9udC1kYXJrOiAjMDAwO1xuJGZvbnQtbGlnaHQ6ICNmZmY7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuJGdyZWVuMTogIzIxOTY1MztcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2xvci1wcmltYXJ5OiAjMTkzN2VhO1xuJGNvbG9yLXByaW1hcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcbiRjb2xvci1wcmltYXJ5LWRhcms6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuXG4kY29sb3Itc2Vjb25kYXJ5OiAjNDI4NUY0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodDogbGlnaHRlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG4kY29sb3Itc2Vjb25kYXJ5LWRhcms6IGRhcmtlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG5cbiRiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuJGZvb3Rlci1iYWNrOiAjMjYzMjM4O1xuJGhlYWRlci1iYWNrOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNTFDMkMsICMwNTFDMkMgNDAlLCAjMEIyNDUzIDYwJSwgIzFGNDBFNiAxMDAlKTtcblxuJGNvbG9yLXRlcm5hcnk6ICMwNTFjMmM7XG5cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuXG4kZm9udC1zdGFjazogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiRoZWFkaW5nLWZvbnQ6IFwiTGFyaXNoTWNLaW5zZXlcIiwgJ0dlb3JnaWEnLCBzZXJpZjtcbiRmb250OiAkZm9udC1zdGFjaztcblxuJGZvbnQtZmFtaWx5LXByaW1hcnk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LXNlY29uZGFyeTogXCJCb3dlclwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiIHNlcmlmO1xuXG4kYmFzZS1zaXplOiAxNnB4O1xuJHRhYmxldC1zaXplOiAxNnB4O1xuJG1vYmlsZS1zaXplOiAxNnB4O1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGJyZWFrLW1vYmlsZTogNDUwcHg7XG4kYnJlYWstdGFibGV0OiA4MDBweDtcbiRicmVhay1sYXB0b3A6IDEwMjRweDtcblxuJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGU6IDgwMHB4O1xuJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQ6IDEwNDhweDtcbiRicmVhay1sYW5kc2NhcGUtbGFwdG9wOiAxMjgwcHg7XG4iLCJcbkBpbXBvcnQgJ2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcyc7XG5cbi5ib2R5IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBwYWRkaW5nOiAxZW07XG59XG5cbmFwcC1pY29uIHtcbiAgICBmb250LXNpemU6IDNlbTtcbn1cblxuLmNvbnRlbnQge1xuICAgIG1pbi13aWR0aDogMTZyZW07XG4gICAgbWF4LXdpZHRoOiAyNHJlbTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1zaXplOiAuOGVtO1xufVxuXG5mb290ZXIge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxubWF0LWRpYWxvZy1hY3Rpb25zIHtcbiAgICBidXR0b24ge1xuICAgICAgICBtaW4td2lkdGg6IDhlbTtcbiAgICB9XG59XG4iLCIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4uYm9keSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHBhZGRpbmc6IDFlbTtcbn1cblxuYXBwLWljb24ge1xuICBmb250LXNpemU6IDNlbTtcbn1cblxuLmNvbnRlbnQge1xuICBtaW4td2lkdGg6IDE2cmVtO1xuICBtYXgtd2lkdGg6IDI0cmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG59XG5cbmZvb3RlciB7XG4gIHdpZHRoOiAxMDAlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbm1hdC1kaWFsb2ctYWN0aW9ucyBidXR0b24ge1xuICBtaW4td2lkdGg6IDhlbTtcbn0iXX0= */"] }); + } }, directives: [i1.MatDialogTitle, i1.MatDialogContent, i2.NgIf, i3.IconComponent, i1.MatDialogActions, i4.MatButton, i1.MatDialogClose, i5.MatSpinner], styles: [".body[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n flex-direction: column;\n padding: 1em;\n}\napp-icon[_ngcontent-%COMP%] {\n font-size: 3em;\n}\n.content[_ngcontent-%COMP%] {\n min-width: 16rem;\n max-width: 24rem;\n text-align: center;\n font-size: 0.8em;\n}\nfooter[_ngcontent-%COMP%] {\n width: 100%;\n text-align: center;\n}\nspan.warning[_ngcontent-%COMP%] {\n color: #d32f2f !important;\n}\nmat-dialog-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n min-width: 8em;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktb3ZlcmxheXMvc3JjL2xpYi9jb25maXJtLW1vZGFsL2NvbmZpcm0tbW9kYWwuY29tcG9uZW50LnNjc3MiLCJsaWJzL2xlZ2FjeS1vdmVybGF5cy9zcmMvbGliL2NvbmZpcm0tbW9kYWwvY29uZmlybS1tb2RhbC5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDdkRBO0VBQ0ksYUFBQTtFQUNBLG1CQUFBO0VBQ0Esc0JBQUE7RUFDQSxZQUFBO0FDVUo7QURQQTtFQUNJLGNBQUE7QUNVSjtBRFBBO0VBQ0ksZ0JBQUE7RUFDQSxnQkFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7QUNVSjtBRFBBO0VBQ0ksV0FBQTtFQUNBLGtCQUFBO0FDVUo7QURQQTtFQUNJLHlCQUFBO0FDVUo7QUROSTtFQUNJLGNBQUE7QUNTUiIsImZpbGUiOiJsaWJzL2xlZ2FjeS1vdmVybGF5cy9zcmMvbGliL2NvbmZpcm0tbW9kYWwvY29uZmlybS1tb2RhbC5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGNvbG9yLWJyYW5kLWVsZWN0cmljLWJsdWU6ICMyMjUxZmY7XG4kY29sb3ItYnJhbmQtZGVlcC1ibHVlOiAjMDUxYzJjO1xuJGNvbG9yLWJyYW5kLWN5YW46ICMwMGE5ZjQ7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kZm9udC1kYXJrOiAjMDAwO1xuJGZvbnQtbGlnaHQ6ICNmZmY7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuJGdyZWVuMTogIzIxOTY1MztcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2xvci1wcmltYXJ5OiAjMTkzN2VhO1xuJGNvbG9yLXByaW1hcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcbiRjb2xvci1wcmltYXJ5LWRhcms6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuXG4kY29sb3Itc2Vjb25kYXJ5OiAjNDI4NUY0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodDogbGlnaHRlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG4kY29sb3Itc2Vjb25kYXJ5LWRhcms6IGRhcmtlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG5cbiRiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuJGZvb3Rlci1iYWNrOiAjMjYzMjM4O1xuJGhlYWRlci1iYWNrOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNTFDMkMsICMwNTFDMkMgNDAlLCAjMEIyNDUzIDYwJSwgIzFGNDBFNiAxMDAlKTtcblxuJGNvbG9yLXRlcm5hcnk6ICMwNTFjMmM7XG5cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuXG4kZm9udC1zdGFjazogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiRoZWFkaW5nLWZvbnQ6IFwiTGFyaXNoTWNLaW5zZXlcIiwgJ0dlb3JnaWEnLCBzZXJpZjtcbiRmb250OiAkZm9udC1zdGFjaztcblxuJGZvbnQtZmFtaWx5LXByaW1hcnk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LXNlY29uZGFyeTogXCJCb3dlclwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiIHNlcmlmO1xuXG4kYmFzZS1zaXplOiAxNnB4O1xuJHRhYmxldC1zaXplOiAxNnB4O1xuJG1vYmlsZS1zaXplOiAxNnB4O1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGJyZWFrLW1vYmlsZTogNDUwcHg7XG4kYnJlYWstdGFibGV0OiA4MDBweDtcbiRicmVhay1sYXB0b3A6IDEwMjRweDtcblxuJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGU6IDgwMHB4O1xuJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQ6IDEwNDhweDtcbiRicmVhay1sYW5kc2NhcGUtbGFwdG9wOiAxMjgwcHg7XG4iLCJcbkBpbXBvcnQgJ2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcyc7XG5cbi5ib2R5IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBwYWRkaW5nOiAxZW07XG59XG5cbmFwcC1pY29uIHtcbiAgICBmb250LXNpemU6IDNlbTtcbn1cblxuLmNvbnRlbnQge1xuICAgIG1pbi13aWR0aDogMTZyZW07XG4gICAgbWF4LXdpZHRoOiAyNHJlbTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1zaXplOiAuOGVtO1xufVxuXG5mb290ZXIge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuc3Bhbi53YXJuaW5ne1xuICAgIGNvbG9yOiByZ2IoMjExLCA0NywgNDcpIWltcG9ydGFudDtcbn1cblxubWF0LWRpYWxvZy1hY3Rpb25zIHtcbiAgICBidXR0b24ge1xuICAgICAgICBtaW4td2lkdGg6IDhlbTtcbiAgICB9XG59XG4iLCIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4uYm9keSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHBhZGRpbmc6IDFlbTtcbn1cblxuYXBwLWljb24ge1xuICBmb250LXNpemU6IDNlbTtcbn1cblxuLmNvbnRlbnQge1xuICBtaW4td2lkdGg6IDE2cmVtO1xuICBtYXgtd2lkdGg6IDI0cmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG59XG5cbmZvb3RlciB7XG4gIHdpZHRoOiAxMDAlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbnNwYW4ud2FybmluZyB7XG4gIGNvbG9yOiAjZDMyZjJmICFpbXBvcnRhbnQ7XG59XG5cbm1hdC1kaWFsb2ctYWN0aW9ucyBidXR0b24ge1xuICBtaW4td2lkdGg6IDhlbTtcbn0iXX0= */"] }); /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(ConfirmModalComponent, [{ type: core_1.Component, args: [{ @@ -15406,11 +15582,16 @@ class CngSearchBarComponent { if (value) { this.search.emit(value); } + else { + this.clearSearch(); + } } // Method to clear the search input and reset related configurations - clearSearch(box) { + clearSearch(box = null) { this.searchStr = ''; - box.value = ''; + if (box) { + box.value = ''; + } this.config.showSrchWarning = false; this.config.totalFoundItem = 0; this.search.emit(''); @@ -18291,6 +18472,7 @@ exports.roomQueryOptionsToSpaceAvailabilityOptions = (options) => ({ /** Fields to include recurrence in the availability search */ is_recurrent: options === null || options === void 0 ? void 0 : options.is_recurrent, is_multiroom: options === null || options === void 0 ? void 0 : options.is_multiroom, + merged: options === null || options === void 0 ? void 0 : options.merged, recurrence_period: options === null || options === void 0 ? void 0 : options.recurrence_period, recurrence_interval: options === null || options === void 0 ? void 0 : options.recurrence_interval, recurrence_endTz: options === null || options === void 0 ? void 0 : options.recurrence_endTz, @@ -18473,6 +18655,7 @@ tslib_1.__exportStar(__webpack_require__(/*! ./lib/aca-date-picker/aca-date-pick tslib_1.__exportStar(__webpack_require__(/*! ./lib/conflict-alert-modal/conflict-alert-modal.component */ "../../libs/ui/src/lib/conflict-alert-modal/conflict-alert-modal.component.ts"), exports); tslib_1.__exportStar(__webpack_require__(/*! ./lib/tooltip/tooltip.enums */ "../../libs/ui/src/lib/tooltip/tooltip.enums.ts"), exports); tslib_1.__exportStar(__webpack_require__(/*! ./lib/zoom-warning-modal/components/zoom-warning/zoom-warning.component */ "../../libs/ui/src/lib/zoom-warning-modal/components/zoom-warning/zoom-warning.component.ts"), exports); +tslib_1.__exportStar(__webpack_require__(/*! ./lib/catering-drop-modal/components/catering-drop/catering-drop-modal.component */ "../../libs/ui/src/lib/catering-drop-modal/components/catering-drop/catering-drop-modal.component.ts"), exports); /***/ }), @@ -20033,6 +20216,74 @@ BaseTemplateComponent.ɵdir = i0.ɵɵdefineDirective({ type: BaseTemplateCompone } }, features: [i0.ɵɵInheritDefinitionFeature] }); +/***/ }), + +/***/ "../../libs/ui/src/lib/catering-drop-modal/components/catering-drop/catering-drop-modal.component.ts": +/*!***********************************************************************************************************************************************************!*\ + !*** /home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/catering-drop-modal/components/catering-drop/catering-drop-modal.component.ts ***! + \***********************************************************************************************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const core_1 = __webpack_require__(/*! @angular/core */ "../../node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); +const dialog_1 = __webpack_require__(/*! @angular/material/dialog */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/dialog.js"); +const i0 = __webpack_require__(/*! @angular/core */ "../../node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); +const i1 = __webpack_require__(/*! @angular/material/dialog */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/dialog.js"); +const i2 = __webpack_require__(/*! @angular/material/button */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/button.js"); +class CateringDropComponent { + constructor(dialogRef) { + this.dialogRef = dialogRef; + } + onConfirm() { + this.dialogRef.close(true); + } + onCancel() { + this.dialogRef.close(false); + } +} +exports.CateringDropComponent = CateringDropComponent; +CateringDropComponent.ɵfac = function CateringDropComponent_Factory(t) { return new (t || CateringDropComponent)(i0.ɵɵdirectiveInject(i1.MatDialogRef)); }; +CateringDropComponent.ɵcmp = i0.ɵɵdefineComponent({ type: CateringDropComponent, selectors: [["catering-drop-modal"]], decls: 14, vars: 0, consts: [[1, "body"], [1, "content"], ["mat-button", "", 1, "outline", 3, "click"], ["mat-button", "", 3, "click"]], template: function CateringDropComponent_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "header"); + i0.ɵɵelementStart(1, "h3"); + i0.ɵɵtext(2, "Catering conflict"); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(3, "mat-dialog-content"); + i0.ɵɵelementStart(4, "div", 0); + i0.ɵɵelementStart(5, "div", 1); + i0.ɵɵelementStart(6, "p"); + i0.ɵɵtext(7, "Proceed without catering?"); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(8, "mat-dialog-actions"); + i0.ɵɵelementStart(9, "footer"); + i0.ɵɵelementStart(10, "button", 2); + i0.ɵɵlistener("click", function CateringDropComponent_Template_button_click_10_listener() { return ctx.onCancel(); }); + i0.ɵɵtext(11, "Go Back"); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(12, "button", 3); + i0.ɵɵlistener("click", function CateringDropComponent_Template_button_click_12_listener() { return ctx.onConfirm(); }); + i0.ɵɵtext(13, "Yes"); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + } }, directives: [i1.MatDialogContent, i1.MatDialogActions, i2.MatButton], styles: [".body[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n flex-direction: column;\n padding: 1em;\n}\n\n.content[_ngcontent-%COMP%] {\n min-width: 16rem;\n max-width: 24rem;\n text-align: center;\n font-size: 0.8em;\n}\n\nfooter[_ngcontent-%COMP%] {\n width: 100%;\n text-align: center;\n}\n\nmat-dialog-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n min-width: 8em;\n}\n\n.outline[_ngcontent-%COMP%] {\n background-color: #fff;\n color: #1937ea;\n border: 1px solid #2251FF;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9jYXRlcmluZy1kcm9wLW1vZGFsL2NvbXBvbmVudHMvY2F0ZXJpbmctZHJvcC9jYXRlcmluZy1kcm9wLW1vZGFsLmNvbXBvbmVudC5zY3NzIiwibGlicy91aS9zcmMvbGliL2NhdGVyaW5nLWRyb3AtbW9kYWwvY29tcG9uZW50cy9jYXRlcmluZy1kcm9wL2NhdGVyaW5nLWRyb3AtbW9kYWwuY29tcG9uZW50LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0E7RUFDSSxhQUFBO0VBQ0EsbUJBQUE7RUFDQSxzQkFBQTtFQUNBLFlBQUE7QUNBSjs7QURHQTtFQUNJLGdCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxrQkFBQTtFQUNBLGdCQUFBO0FDQUo7O0FER0E7RUFDSSxXQUFBO0VBQ0Esa0JBQUE7QUNBSjs7QURJSTtFQUNJLGNBQUE7QUNEUjs7QURLQTtFQUNJLHNCQUFBO0VBQ0EsY0FBQTtFQUNBLHlCQUFBO0FDRkoiLCJmaWxlIjoibGlicy91aS9zcmMvbGliL2NhdGVyaW5nLWRyb3AtbW9kYWwvY29tcG9uZW50cy9jYXRlcmluZy1kcm9wL2NhdGVyaW5nLWRyb3AtbW9kYWwuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyJcbi5ib2R5IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBwYWRkaW5nOiAxZW07XG59XG5cbi5jb250ZW50IHtcbiAgICBtaW4td2lkdGg6IDE2cmVtO1xuICAgIG1heC13aWR0aDogMjRyZW07XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtc2l6ZTogLjhlbTtcbn1cblxuZm9vdGVyIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbm1hdC1kaWFsb2ctYWN0aW9ucyB7XG4gICAgYnV0dG9uIHtcbiAgICAgICAgbWluLXdpZHRoOiA4ZW07XG4gICAgfVxufVxuXG4ub3V0bGluZXtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgIGNvbG9yOiAjMTkzN2VhO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICMyMjUxRkY7XG59IiwiLmJvZHkge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBwYWRkaW5nOiAxZW07XG59XG5cbi5jb250ZW50IHtcbiAgbWluLXdpZHRoOiAxNnJlbTtcbiAgbWF4LXdpZHRoOiAyNHJlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXNpemU6IDAuOGVtO1xufVxuXG5mb290ZXIge1xuICB3aWR0aDogMTAwJTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5tYXQtZGlhbG9nLWFjdGlvbnMgYnV0dG9uIHtcbiAgbWluLXdpZHRoOiA4ZW07XG59XG5cbi5vdXRsaW5lIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgY29sb3I6ICMxOTM3ZWE7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMyMjUxRkY7XG59Il19 */"] }); +/*@__PURE__*/ (function () { i0.ɵsetClassMetadata(CateringDropComponent, [{ + type: core_1.Component, + args: [{ + selector: 'catering-drop-modal', + templateUrl: './catering-drop-modal.component.html', + styleUrls: ['./catering-drop-modal.component.scss'] + }] + }], function () { return [{ type: i1.MatDialogRef }]; }, null); })(); + + /***/ }), /***/ "../../libs/ui/src/lib/cng-select/cng-select-options.component.ts": @@ -20706,6 +20957,144 @@ ConflictsModalComponent.ɵcmp = i0.ɵɵdefineComponent({ type: ConflictsModalCom }] }); })(); +/***/ }), + +/***/ "../../libs/ui/src/lib/custom-snackbar-component/custom-snackbar-component.component.ts": +/*!**********************************************************************************************************************************************!*\ + !*** /home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/custom-snackbar-component/custom-snackbar-component.component.ts ***! + \**********************************************************************************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const core_1 = __webpack_require__(/*! @angular/core */ "../../node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); +const snack_bar_1 = __webpack_require__(/*! @angular/material/snack-bar */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/snack-bar.js"); +const i0 = __webpack_require__(/*! @angular/core */ "../../node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); +class CustomSnackbarComponent { + constructor(data) { + this.data = data; + } + ngOnInit() { } + get getIcon() { + switch (this.data.snackType) { + case 'success': + return { + type: this.data.snackType, + iconPath: 'assets/icon/toast-success.svg', + }; + case 'error': + return { + type: this.data.snackType, + iconPath: 'assets/icon/toast-failure.svg', + }; + case 'warn': + return { + type: this.data.snackType, + iconPath: 'assets/icon/toast-warning.svg', + }; + case 'info': + return { + type: this.data.snackType, + iconPath: 'assets/icon/toast-info.svg', + }; + default: + return { type: 'info', iconPath: 'assets/icon/toast-info.svg' }; + } + } + closeSnackbar() { + this.data.snackBar.dismiss(); + } +} +exports.CustomSnackbarComponent = CustomSnackbarComponent; +CustomSnackbarComponent.ɵfac = function CustomSnackbarComponent_Factory(t) { return new (t || CustomSnackbarComponent)(i0.ɵɵdirectiveInject(snack_bar_1.MAT_SNACK_BAR_DATA)); }; +CustomSnackbarComponent.ɵcmp = i0.ɵɵdefineComponent({ type: CustomSnackbarComponent, selectors: [["custom-snackbar"]], decls: 10, vars: 6, consts: [[1, "snack-container-message"], [3, "src", "alt"], [1, "snack-container-icon", "icon"], [1, "fas", "material-icons", "close", 3, "click"]], template: function CustomSnackbarComponent_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div"); + i0.ɵɵelementStart(1, "div", 0); + i0.ɵɵelementStart(2, "div"); + i0.ɵɵelement(3, "img", 1); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(4, "div"); + i0.ɵɵelementStart(5, "span"); + i0.ɵɵtext(6); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(7, "div", 2); + i0.ɵɵelementStart(8, "div", 3); + i0.ɵɵlistener("click", function CustomSnackbarComponent_Template_div_click_8_listener() { return ctx.closeSnackbar(); }); + i0.ɵɵtext(9, "close"); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + } if (rf & 2) { + i0.ɵɵclassMapInterpolate1("snack-container box-", ctx.getIcon.type, ""); + i0.ɵɵadvance(3); + i0.ɵɵpropertyInterpolate1("alt", "", ctx.getIcon.type, " icon"); + i0.ɵɵproperty("src", ctx.getIcon.iconPath, i0.ɵɵsanitizeUrl); + i0.ɵɵadvance(3); + i0.ɵɵtextInterpolate(ctx.data.message); + } }, styles: [".snack-container[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.material-icons[_ngcontent-%COMP%] {\n font-size: 1.5em;\n}\n\n.snack-container-message[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n align-items: center;\n width: 100%;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9jdXN0b20tc25hY2tiYXItY29tcG9uZW50L2N1c3RvbS1zbmFja2Jhci1jb21wb25lbnQuY29tcG9uZW50LnNjc3MiLCJsaWJzL3VpL3NyYy9saWIvY3VzdG9tLXNuYWNrYmFyLWNvbXBvbmVudC9jdXN0b20tc25hY2tiYXItY29tcG9uZW50LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0ksYUFBQTtFQUNBLDhCQUFBO0VBQ0EsbUJBQUE7QUNDSjs7QURFQTtFQUNJLGdCQUFBO0FDQ0o7O0FERUE7RUFDSSxhQUFBO0VBQ0EsU0FBQTtFQUNBLG1CQUFBO0VBQ0EsV0FBQTtBQ0NKIiwiZmlsZSI6ImxpYnMvdWkvc3JjL2xpYi9jdXN0b20tc25hY2tiYXItY29tcG9uZW50L2N1c3RvbS1zbmFja2Jhci1jb21wb25lbnQuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuc25hY2stY29udGFpbmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4ubWF0ZXJpYWwtaWNvbnMge1xuICAgIGZvbnQtc2l6ZTogMS41ZW07XG59XG5cbi5zbmFjay1jb250YWluZXItbWVzc2FnZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBnYXA6IDEwcHg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB3aWR0aDogMTAwJTtcbn0iLCIuc25hY2stY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4ubWF0ZXJpYWwtaWNvbnMge1xuICBmb250LXNpemU6IDEuNWVtO1xufVxuXG4uc25hY2stY29udGFpbmVyLW1lc3NhZ2Uge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDEwcHg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHdpZHRoOiAxMDAlO1xufSJdfQ== */"] }); +/*@__PURE__*/ (function () { i0.ɵsetClassMetadata(CustomSnackbarComponent, [{ + type: core_1.Component, + args: [{ + selector: 'custom-snackbar', + templateUrl: './custom-snackbar-component.component.html', + styleUrls: ['./custom-snackbar-component.component.scss'], + }] + }], function () { return [{ type: undefined, decorators: [{ + type: core_1.Inject, + args: [snack_bar_1.MAT_SNACK_BAR_DATA] + }] }]; }, null); })(); + + +/***/ }), + +/***/ "../../libs/ui/src/lib/custom-snackbar-component/custom-snackbar-component.service.ts": +/*!********************************************************************************************************************************************!*\ + !*** /home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/custom-snackbar-component/custom-snackbar-component.service.ts ***! + \********************************************************************************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const core_1 = __webpack_require__(/*! @angular/core */ "../../node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); +const snack_bar_1 = __webpack_require__(/*! @angular/material/snack-bar */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/snack-bar.js"); +const custom_snackbar_component_component_1 = __webpack_require__(/*! ./custom-snackbar-component.component */ "../../libs/ui/src/lib/custom-snackbar-component/custom-snackbar-component.component.ts"); +const i0 = __webpack_require__(/*! @angular/core */ "../../node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); +const i1 = __webpack_require__(/*! @angular/material/snack-bar */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/snack-bar.js"); +class SnackBarService { + constructor(snackBar) { + this.snackBar = snackBar; + } + openSnackBar(message, type, duration, verticalPosition, horizontalPosition) { + const _snackType = type !== undefined ? type : 'success'; + this.snackBar.openFromComponent(custom_snackbar_component_component_1.CustomSnackbarComponent, { + duration: duration || 4000, + horizontalPosition: horizontalPosition || 'end', + verticalPosition: verticalPosition || 'top', + data: { + message: message, + snackType: _snackType, + snackBar: this.snackBar, + }, + }); + } +} +exports.SnackBarService = SnackBarService; +SnackBarService.ɵfac = function SnackBarService_Factory(t) { return new (t || SnackBarService)(i0.ɵɵinject(i1.MatSnackBar)); }; +SnackBarService.ɵprov = i0.ɵɵdefineInjectable({ token: SnackBarService, factory: SnackBarService.ɵfac, providedIn: 'root' }); +/*@__PURE__*/ (function () { i0.ɵsetClassMetadata(SnackBarService, [{ + type: core_1.Injectable, + args: [{ + providedIn: 'root', + }] + }], function () { return [{ type: i1.MatSnackBar }]; }, null); })(); + + /***/ }), /***/ "../../libs/ui/src/lib/date-tz-calendar-widget/date-tz-calendar-widget.component.ts": @@ -23118,7 +23507,7 @@ exports.ModalButtonRowComponent = ModalButtonRowComponent; ModalButtonRowComponent.ɵfac = function ModalButtonRowComponent_Factory(t) { return new (t || ModalButtonRowComponent)(i0.ɵɵdirectiveInject(i0.ViewContainerRef)); }; ModalButtonRowComponent.ɵcmp = i0.ɵɵdefineComponent({ type: ModalButtonRowComponent, selectors: [["mck-modal-button-row"]], inputs: { primaryLabel: "primaryLabel", primaryDisabled: "primaryDisabled", secondaryLabel: "secondaryLabel", disableFixed: "disableFixed", secondaryDisabled: "secondaryDisabled", smallButtons: "smallButtons" }, outputs: { primarySubmit: "primarySubmit", secondarySubmit: "secondarySubmit" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 0, consts: [[1, "button-wrapper"], ["spacerClass", "mck-spacer-content-expand-mobile mck-spacer-content-divider", "size", "1px", 3, "autoSize"], [1, "mck-row", "mck-center", "button-row"], ["mat-stroked-button", "", "class", "mck-secondary-button mck-modal-secondary-button", "type", "submit", 3, "disabled", "click", 4, "ngIf"], ["mat-button", "", "class", "mck-primary-button mck-modal-primary-button", "type", "submit", 3, "disabled", "click", 4, "ngIf"], ["mat-stroked-button", "", "type", "submit", 1, "mck-secondary-button", "mck-modal-secondary-button", 3, "disabled", "click"], ["mat-button", "", "type", "submit", 1, "mck-primary-button", "mck-modal-primary-button", 3, "disabled", "click"]], template: function ModalButtonRowComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵtemplate(0, ModalButtonRowComponent_ng_template_0_Template, 5, 7, "ng-template"); - } }, directives: [i1.SpacerComponent, i2.NgIf, i3.MatButton], styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n.mck-inherit-font[_ngcontent-%COMP%] {\n font: inherit;\n}\n.mck-content-expand[_ngcontent-%COMP%], .mck-content-page[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n}\n.mck-content-expand-width[_ngcontent-%COMP%] {\n width: 100%;\n}\n.mck-content-expand-height[_ngcontent-%COMP%] {\n height: 100%;\n}\n.mck-content-with-footer-height[_ngcontent-%COMP%] {\n height: calc(100vh - 58px);\n}\n.mck-content-full-height[_ngcontent-%COMP%], .mck-content-page-container[_ngcontent-%COMP%] {\n height: 100vh;\n}\n.mck-content-page[_ngcontent-%COMP%] {\n background: #F8F9FA;\n}\n.mck-content-body[_ngcontent-%COMP%] {\n width: 100%;\n display: block;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-content-body[_ngcontent-%COMP%] {\n max-width: 1024px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-content-body[_ngcontent-%COMP%] {\n max-width: 1024px;\n }\n}\n.mck-content-group[_ngcontent-%COMP%] {\n padding-left: 1rem;\n padding-right: 1rem;\n width: 100%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-content-group[_ngcontent-%COMP%] {\n max-width: 759px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-content-group[_ngcontent-%COMP%] {\n max-width: 759px;\n }\n}\n.mck-shadow[_ngcontent-%COMP%] {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n}\n.mck-flex-1[_ngcontent-%COMP%] {\n flex: 1;\n}\n.mck-row[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .mck-row-flow[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n}\n.mck-row.mck-center-justify[_ngcontent-%COMP%], .mck-center-justify.mck-row-flow[_ngcontent-%COMP%], .mck-row.mck-center[_ngcontent-%COMP%], .mck-row.mck-button.mat-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .mck-center.mck-row-flow[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: center;\n}\n.mck-row.mck-center-align[_ngcontent-%COMP%], .mck-center-align.mck-row-flow[_ngcontent-%COMP%], .mck-row.mck-center[_ngcontent-%COMP%], .mck-row.mck-button.mat-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .mck-center.mck-row-flow[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n align-items: center;\n}\n.mck-row.mck-stretch[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mck-stretch.mat-form-field-infix[_ngcontent-%COMP%], .mck-stretch.mck-row-flow[_ngcontent-%COMP%] {\n align-items: stretch;\n}\n.mck-row-flow[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n}\n.mck-row.mck-scroll[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mck-scroll.mat-form-field-infix[_ngcontent-%COMP%], .mck-scroll.mck-row-flow[_ngcontent-%COMP%] {\n overflow-x: scroll;\n}\n.mck-column[_ngcontent-%COMP%], .button-wrapper[_ngcontent-%COMP%], .mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n.mck-column.mck-center[_ngcontent-%COMP%], .mck-center.button-wrapper[_ngcontent-%COMP%], .mck-column.mck-button.mat-button[_ngcontent-%COMP%], .mck-button.mat-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mck-stroked-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mck-warning-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mck-secondary-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-button.mck-primary-button[_ngcontent-%COMP%], .mat-button.mck-primary-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mck-stroked-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mck-warning-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mck-secondary-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mat-stroked-button.mck-primary-button.button-wrapper[_ngcontent-%COMP%], .mck-center.mck-button.mat-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-button[_ngcontent-%COMP%], .mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-button.mat-stroked-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-center.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mck-column.mat-form-field-infix[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.button-wrapper[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mck-button.mat-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: center;\n align-items: center;\n}\n.mck-column.mck-space-between[_ngcontent-%COMP%], .mck-space-between.button-wrapper[_ngcontent-%COMP%], .mck-space-between.mck-button.mat-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-space-between.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: space-between;\n}\n.mck-column.mck-stretch[_ngcontent-%COMP%], .mck-stretch.button-wrapper[_ngcontent-%COMP%], .mck-stretch.mck-button.mat-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-stretch.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n align-items: stretch;\n}\n.mck-column.mck-scroll[_ngcontent-%COMP%], .mck-scroll.button-wrapper[_ngcontent-%COMP%], .mck-scroll.mck-button.mat-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-scroll.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n overflow-y: scroll;\n overflow-y: overlay;\n}\n.mck-column.mck-flex-end[_ngcontent-%COMP%], .mck-flex-end.button-wrapper[_ngcontent-%COMP%], .mck-flex-end.mck-button.mat-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-flex-end.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: flex-end;\n}\n.mck-overflow[_ngcontent-%COMP%] {\n overflow: auto;\n}\n.mck-bordered[_ngcontent-%COMP%], .mck-input[_ngcontent-%COMP%] {\n border-radius: 0;\n border: 1px solid #B3B3B3;\n}\n.mck-bordered[_ngcontent-%COMP%]:hover, .mck-input[_ngcontent-%COMP%]:hover {\n border-color: #464646;\n}\n.mck-bordered[_ngcontent-%COMP%]:focus, .mck-input[_ngcontent-%COMP%]:focus {\n border-color: #1F40E6;\n}\n.mck-bordered[disabled=true][_ngcontent-%COMP%], .mck-input[disabled=true][_ngcontent-%COMP%] {\n pointer-events: none;\n border-color: #f0f0f0;\n color: #ccc;\n}\n.mck-date-display[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n height: 43px;\n padding: 1rem 0.5rem;\n transition: border 200ms, box-shadow 200ms;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-form-field-wrapper[_ngcontent-%COMP%] {\n padding-bottom: 0.5rem;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] {\n min-width: auto !important;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n width: 100%;\n padding-top: 0.7rem !important;\n padding-bottom: 0.5rem !important;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] {\n min-height: 2.7rem;\n color: rgba(0, 0, 0, 0.27);\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n margin-top: 2px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-flex[_ngcontent-%COMP%] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-flex[_ngcontent-%COMP%] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 2rem;\n min-height: 2rem;\n }\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 2rem;\n min-height: 2rem;\n }\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field.mat-s[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-select[_ngcontent-%COMP%] {\n margin-top: 0.2rem;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-select[_ngcontent-%COMP%] .mat-select-arrow[_ngcontent-%COMP%] {\n visibility: hidden;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-select[_ngcontent-%COMP%] .mat-select-value[_ngcontent-%COMP%] > .mat-select-value-text[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 400;\n font-family: \"McKinsey Sans\";\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #B3B3B3;\n border-width: 1px;\n border-radius: 0;\n}\n.mck-form-input[_ngcontent-%COMP%] .available[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .available[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .available[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #3aa537;\n}\n.mck-form-input[_ngcontent-%COMP%] .booked[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .booked[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .booked[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #e12e41;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline-thick[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline-thick[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline-thick[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #1F40E6;\n border-width: 1px;\n border-radius: 0;\n}\n.mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-wrapper[_ngcontent-%COMP%] {\n padding-bottom: 0;\n}\n.mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #E12E40;\n}\n.mck-form-input[_ngcontent-%COMP%] mck-close-icon.mat-chip-remove.mat-chip-remove[_ngcontent-%COMP%] {\n opacity: 1;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-label[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 400;\n text-align: left;\n margin-bottom: 0.5rem;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-radio-button[_ngcontent-%COMP%] {\n margin-right: 1rem;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-radio-label-content[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-radio-outer-circle[_ngcontent-%COMP%] {\n border-color: #1F40E6 !important;\n border-width: 1px !important;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-radio-inner-circle[_ngcontent-%COMP%] {\n background-color: #1F40E6 !important;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-radio-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-radio-group[_ngcontent-%COMP%] > mat-radio-button[_ngcontent-%COMP%]:last-child {\n margin-right: 0;\n}\n.mck-form-input-container[_ngcontent-%COMP%] > .mck-form-input[_ngcontent-%COMP%], .mck-form-input-container[_ngcontent-%COMP%] > mck-select[_ngcontent-%COMP%] {\n margin-bottom: 0.5rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-form-input-container[_ngcontent-%COMP%] > .mck-form-input[_ngcontent-%COMP%], .mck-form-input-container[_ngcontent-%COMP%] > mck-select[_ngcontent-%COMP%] {\n margin-bottom: 1.75rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-form-input-container[_ngcontent-%COMP%] > .mck-form-input[_ngcontent-%COMP%], .mck-form-input-container[_ngcontent-%COMP%] > mck-select[_ngcontent-%COMP%] {\n margin-bottom: 1.75rem;\n }\n}\n.mck-form-input-container[_ngcontent-%COMP%] .mck-radio-select[_ngcontent-%COMP%] {\n margin-bottom: 1rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-form-input-container[_ngcontent-%COMP%] .mck-radio-select[_ngcontent-%COMP%] {\n margin-bottom: 1.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-form-input-container[_ngcontent-%COMP%] .mck-radio-select[_ngcontent-%COMP%] {\n margin-bottom: 1.5rem;\n }\n}\n.mck-form-input[_ngcontent-%COMP%] mat-chip.mat-standard-chip.mat-standard-chip[_ngcontent-%COMP%] {\n border-radius: 3px;\n min-height: 1.5rem;\n background-color: #333333;\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 0.75rem;\n line-height: 1.5rem;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input[_ngcontent-%COMP%] mat-chip.mat-standard-chip.mat-standard-chip[_ngcontent-%COMP%] {\n line-height: inherit;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input[_ngcontent-%COMP%] mat-chip.mat-standard-chip.mat-standard-chip[_ngcontent-%COMP%] {\n line-height: inherit;\n }\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox.mat-checkbox.mat-checkbox[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] {\n background-color: #D0D0D0;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n color: #B3B3B3;\n}\n.mck-borderless[_ngcontent-%COMP%] {\n border: none;\n}\n.mck-borderless[_ngcontent-%COMP%]:hover, .mck-borderless[_ngcontent-%COMP%]:focus, .mck-borderless[_ngcontent-%COMP%]:disabled {\n border: none;\n}\n.mck-select-panel[_ngcontent-%COMP%] {\n margin-top: 0 !important;\n border-radius: unset !important;\n margin-top: 35px !important;\n margin-left: 5px;\n}\n.mck-select-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] {\n padding-left: 0;\n padding-right: 0;\n}\n.mck-select-panel[_ngcontent-%COMP%] mat-option.mat-option-text[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-select-panel.mck-margin-top[_ngcontent-%COMP%] {\n margin-top: 1.5rem !important;\n}\n.mck-checkbox-panel.mat-autocomplete-panel.mat-autocomplete-panel[_ngcontent-%COMP%] {\n top: -10px;\n max-height: 278px;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option.mck-truncated[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] {\n padding-left: 0;\n padding-right: 0;\n line-height: 24px;\n height: unset;\n min-height: 36px;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n flex: 1;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n text-align: left;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option.mck-checkbox-group-header[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option.mck-checkbox-group-child[_ngcontent-%COMP%] {\n margin-left: 2rem;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] label.mat-checkbox-layout[_ngcontent-%COMP%] {\n width: 100%;\n padding-left: 16px;\n padding-right: 16px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] label.mat-checkbox-layout[_ngcontent-%COMP%] {\n padding-left: 2px;\n padding-right: 2px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] label.mat-checkbox-layout[_ngcontent-%COMP%] {\n padding-left: 2px;\n padding-right: 2px;\n }\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] div.mat-checkbox-frame.mat-checkbox-frame[_ngcontent-%COMP%] {\n border: 1px solid #B3B3B3;\n border-radius: 0;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox.mat-checkbox-checked[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background[_ngcontent-%COMP%] {\n background-color: #D0D0D0;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n color: #B3B3B3;\n text-align: left;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] .mat-checkbox-inner-container[_ngcontent-%COMP%] {\n width: 1.25rem;\n height: 1.25rem;\n}\n.mck-select-option-selected[_ngcontent-%COMP%] {\n font-weight: 500;\n font-family: \"McKinsey Sans\";\n color: black;\n background-color: #E6E6E6;\n}\n.mck-select-option-selected[_ngcontent-%COMP%] .mck-spacer-content[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n margin-right: 0.75rem;\n}\n.mck-select-option-unselected[_ngcontent-%COMP%] {\n font-weight: 400;\n font-family: \"McKinsey Sans\";\n}\n.mck-select-option-unselected.mck-ignore-disabled[_ngcontent-%COMP%] {\n color: black;\n}\n.mck-select-option-unselected[_ngcontent-%COMP%] .mck-spacer-content[_ngcontent-%COMP%] {\n visibility: hidden;\n margin-right: 0.75rem;\n}\n.mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n height: 40px;\n border-radius: 0;\n border: none;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n }\n}\n.mck-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: normal;\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n }\n}\n.mck-button.mat-button.mat-button.mck-short[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button[_ngcontent-%COMP%] {\n height: 32px;\n min-width: 83px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-short[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-short[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%] {\n height: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%] {\n height: 40px;\n }\n}\n.mck-button.mat-button.mat-button.mck-square[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-square[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n min-width: 32px;\n padding: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-square[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-square[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-square[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-square[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n }\n}\n.mck-primary-button.mat-button.mat-button[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n}\n.mck-primary-button.mat-button.mat-button[disabled][_ngcontent-%COMP%], .mck-primary-button.mat-button.mat-button.disabled[_ngcontent-%COMP%] {\n background-color: #D0D0D0;\n color: #757575;\n cursor: not-allowed;\n}\n.mck-primary-button.mat-button.mat-button[disabled][_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-primary-button.mat-button.mat-button.disabled[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: #757575;\n}\n.mck-primary-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: white;\n}\n.mck-secondary-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] {\n border: 1px solid #D0D0D0;\n border-radius: 0;\n border: 1px solid #2251FF;\n color: #2251FF;\n}\n.mck-secondary-button.mat-stroked-button.mat-stroked-button[disabled][_ngcontent-%COMP%], .mck-secondary-button.mat-stroked-button.mat-stroked-button.disabled[_ngcontent-%COMP%] {\n border: 1px solid #D0D0D0;\n color: #333333;\n cursor: not-allowed;\n}\n.mck-secondary-button.mat-button.mat-button[_ngcontent-%COMP%] {\n background-color: white;\n}\n.mck-secondary-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: #333333;\n}\n.mck-warning-button.mat-button.mat-button[_ngcontent-%COMP%] {\n background-color: #ffd048;\n}\n.mck-warning-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: black;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] {\n border: 2px solid #B3B3B3;\n border-radius: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding-left: 1.75rem;\n padding-right: 1.75rem;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%] {\n height: 32px;\n min-width: 83px;\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-primary[_ngcontent-%COMP%] {\n border-width: 1px;\n border-color: #1F40E6;\n color: #1F40E6;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-thin-border-light[_ngcontent-%COMP%] {\n border-color: #D0D0D0;\n border-width: 1px;\n}\n.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: normal;\n color: #1F40E6;\n}\n.mck-toggle-button[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n border: 1px solid #B3B3B3;\n border-color: #D0D0D0;\n min-width: 59px;\n background-color: white;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-toggle-button[_ngcontent-%COMP%] {\n min-width: 132px;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-toggle-button[_ngcontent-%COMP%] {\n min-width: 132px;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n }\n}\n.mck-toggle-button-selected[_ngcontent-%COMP%] {\n color: #1F40E6;\n}\n.mck-date-picker[_ngcontent-%COMP%] {\n width: 100% !important;\n height: 100% !important;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-date-picker[_ngcontent-%COMP%] {\n max-width: 23rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-date-picker[_ngcontent-%COMP%] {\n max-width: 23rem;\n }\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n color: #051C2C;\n margin-top: 1.25rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] {\n width: 2.375rem;\n height: 2rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] > .icon.icon[_ngcontent-%COMP%] {\n width: 1rem;\n height: 1rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] > .next.next[_ngcontent-%COMP%] {\n background-image: url('arrow-forward.svg');\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] > .previous.previous[_ngcontent-%COMP%] {\n background-image: url('arrow-backward.svg');\n}\n.mck-date-picker[_ngcontent-%COMP%] > .month[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .week[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n color: #767676;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date[_ngcontent-%COMP%] > .dot[_ngcontent-%COMP%] {\n display: none;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date.disabled[_ngcontent-%COMP%] {\n background-color: transparent;\n border-radius: 0;\n color: #767676;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date.active[_ngcontent-%COMP%] {\n border-radius: 0;\n background-color: #1F40E6;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date.non-month[_ngcontent-%COMP%] {\n color: #767676;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-spacer-content-expand-mobile[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-spacer-content-expand-mobile[_ngcontent-%COMP%] {\n display: none;\n }\n}\n.mck-spacer-content-divider[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n border-radius: 0;\n border-top: 1px solid #E6E6E6;\n border-bottom: 1px solid #E6E6E6;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] {\n background-color: #F0F0F0;\n border-bottom: none;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n background-image: url('chevron-close.svg');\n background-size: contain;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-close-large.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-close-large.svg');\n background-size: contain;\n }\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] {\n padding-left: 0;\n padding-right: 0;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 0.75rem;\n line-height: 1.4;\n padding-left: 1rem;\n padding-right: 1rem;\n text-align: left;\n color: black;\n font-weight: normal;\n padding-bottom: 0.5rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-size: 1rem;\n line-height: 1.6;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-size: 1rem;\n line-height: 1.6;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n }\n}\n.mck-expansion-panel[_ngcontent-%COMP%] mat-expansion-panel-header[_ngcontent-%COMP%] {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.mck-expansion-panel[_ngcontent-%COMP%] mat-expansion-panel-header[_ngcontent-%COMP%] > span.mat-content[_ngcontent-%COMP%] {\n align-items: center;\n}\n.mck-expansion-panel[_ngcontent-%COMP%] mat-panel-title[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n color: black;\n font-weight: normal;\n}\n.mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n background-image: url('chevron-open.svg');\n background-size: contain;\n transform: rotate(0deg);\n transition: transform 0.5s ease;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-open-large.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-open-large.svg');\n background-size: contain;\n }\n}\n.mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon.expanded[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n}\n.mck-icon-fill-open[_ngcontent-%COMP%] {\n fill: #1F40E6;\n}\n.mck-icon-fill-close[_ngcontent-%COMP%] {\n fill: #767676;\n}\n.mck-icon-fill-black[_ngcontent-%COMP%] {\n fill: black;\n stroke: black;\n}\n.mck-icon-fill-white[_ngcontent-%COMP%] {\n fill: white;\n stroke: white;\n}\n.mck-icon-fill-gray[_ngcontent-%COMP%] {\n fill: #333333;\n stroke: #333333;\n}\n.mck-min[_ngcontent-%COMP%] {\n max-width: 581px !important;\n width: 80vw;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-min[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-min[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-min[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-min[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-noexpand[_ngcontent-%COMP%] {\n max-width: 581px !important;\n width: 80vw !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-noexpand[_ngcontent-%COMP%] {\n width: calc(100vw - 32px) !important;\n max-height: 100vh;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-noexpand[_ngcontent-%COMP%] {\n width: calc(100vw - 32px) !important;\n max-height: 100vh;\n }\n}\n.mck-modal[_ngcontent-%COMP%] {\n max-width: 800px !important;\n width: 80vw;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-mini[_ngcontent-%COMP%] {\n max-width: 580px !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-mini[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-mini[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-mini[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-mini[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-survey[_ngcontent-%COMP%] {\n max-width: 691px !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-survey[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-survey[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-wide[_ngcontent-%COMP%] {\n max-width: 1024px !important;\n width: 100vw;\n height: 95vh;\n max-height: 100vh;\n}\n.mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] {\n background-color: #F8F9FA;\n padding: 0 !important;\n overflow: hidden;\n}\n.mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] {\n position: relative;\n right: 32px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-wide-manage-booking[_ngcontent-%COMP%] {\n max-width: 1024px !important;\n width: 100vw;\n max-height: 95vh;\n}\n.mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] {\n background-color: #F8F9FA;\n padding: 0 !important;\n overflow: hidden;\n}\n.mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] {\n position: relative;\n right: 32px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-alert[_ngcontent-%COMP%] {\n max-width: 100vw !important;\n width: 100vw;\n margin-left: 1rem;\n margin-right: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-alert[_ngcontent-%COMP%] {\n max-width: 100vw !important;\n width: 100vw;\n margin-left: 1rem;\n margin-right: 1rem;\n }\n}\n.mck-alert-backdrop[_ngcontent-%COMP%] {\n background: rgba(5, 28, 44, 0.85);\n}\n.mck-slide-toggle.mat-slide-toggle.mat-checked[_ngcontent-%COMP%]:not(.mat-disabled) .mat-slide-toggle-bar.mat-slide-toggle-bar[_ngcontent-%COMP%] {\n background-color: #2251FF;\n}\n.mck-slide-toggle.mat-slide-toggle.mat-checked[_ngcontent-%COMP%]:not(.mat-disabled) .mat-slide-toggle-thumb.mat-slide-toggle-thumb[_ngcontent-%COMP%] {\n background-color: white;\n}\n.mck-slide-toggle.mat-slide-toggle[_ngcontent-%COMP%] {\n height: auto;\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-content.mat-slide-toggle-content[_ngcontent-%COMP%] {\n flex: 1;\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n white-space: normal;\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-thumb.mat-slide-toggle-thumb[_ngcontent-%COMP%] {\n width: 14px;\n height: 14px;\n transform: translate(50%, 50%);\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-thumb-container.mat-slide-toggle-thumb-container[_ngcontent-%COMP%] {\n top: -4px;\n left: -4px;\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-bar.mat-slide-toggle-bar[_ngcontent-%COMP%] {\n height: 20px;\n background-color: #D0D0D0;\n border-radius: 20px;\n}\n.mck-skeleton[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n}\n.mck-skeleton-checkbox[_ngcontent-%COMP%] {\n float: left;\n}\n.mck-skeleton-checkbox[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 20px;\n height: 20px;\n margin-bottom: 0;\n}\n.mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 100vw;\n margin-bottom: 0;\n max-width: 215px;\n}\n.mck-skeleton-image[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 81px;\n height: 82px;\n margin-bottom: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-skeleton-image[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 219px;\n height: 119px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-skeleton-image[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 219px;\n height: 119px;\n }\n}\n.mck-skeleton-status[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 117px;\n height: 78px;\n margin-top: 10px;\n margin-bottom: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-skeleton-status[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 117px;\n height: 78px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-skeleton-status[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 117px;\n height: 78px;\n }\n}\n.mck-skeleton-line-1[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 23px;\n max-width: 176px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-1[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 219px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-1[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 219px;\n }\n}\n.mck-skeleton-line-2[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 165px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-2[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-2[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n.mck-skeleton-line-3[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 147px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-3[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-3[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n.mck-skeleton-line-30p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 30%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-30p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 30%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-30p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 30%;\n }\n}\n.mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-45p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 45%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-45p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 45%;\n margin-right: 45%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-45p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 45%;\n margin-right: 45%;\n }\n}\n.mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-50p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 50%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-50p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 50%;\n margin-right: 45%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-50p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 50%;\n margin-right: 45%;\n }\n}\n.mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-60p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 60%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-60p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 60%;\n margin-right: 35%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-60p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 60%;\n margin-right: 35%;\n }\n}\n.mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-70p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 70%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-70p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 70%;\n margin-right: 25%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-70p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 70%;\n margin-right: 25%;\n }\n}\n.mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-80p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 80%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-80p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 80%;\n margin-right: 15%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-80p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 80%;\n margin-right: 15%;\n }\n}\n.mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-90p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 90%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-90p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 90%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-90p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 90%;\n }\n}\n.mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-load-more[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n width: calc(100vw - (2 * 1rem));\n height: 40px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-load-more[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 320px;\n height: 50px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-load-more[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 320px;\n height: 50px;\n }\n}\n.mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n width: calc(100vw - (2 * 1rem));\n height: 40px;\n max-width: none;\n width: 100%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: none;\n width: 100%;\n height: 50px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: none;\n width: 100%;\n height: 50px;\n }\n}\n.mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 124px;\n margin-bottom: 4px;\n}\n.mck-heading-5[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 1.5rem;\n line-height: 1.333;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-heading-5[_ngcontent-%COMP%] {\n font-size: 1.75rem;\n line-height: 1.142;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-heading-5[_ngcontent-%COMP%] {\n font-size: 1.75rem;\n line-height: 1.142;\n }\n}\nngx-mat-select-search[_ngcontent-%COMP%] .mat-select-search-no-entries-found[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\nngx-mat-select-search[_ngcontent-%COMP%] .mat-select-search-input[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\nngx-mat-select-search[_ngcontent-%COMP%] button.mat-button.mat-select-search-clear[_ngcontent-%COMP%] {\n background-color: transparent;\n border: none;\n color: black;\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 16px;\n height: 18px;\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n height: 1.5rem;\n border: 4px solid rgba(0, 0, 0, 0);\n background-clip: padding-box;\n border-radius: 8px;\n background-color: #757575;\n -webkit-box-shadow: inset -1px -1px 0px rgba(0, 0, 0, 0.05), inset 1px 1px 0px rgba(0, 0, 0, 0.05);\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar-button {\n width: 0;\n height: 0;\n display: none;\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar-corner {\n background-color: transparent;\n}\nheader[_ngcontent-%COMP%] {\n z-index: 2;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mb-block[_ngcontent-%COMP%] {\n display: block;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mb-block[_ngcontent-%COMP%] {\n display: block;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mb-bottom[_ngcontent-%COMP%] {\n padding-bottom: 110px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mb-bottom[_ngcontent-%COMP%] {\n padding-bottom: 110px;\n }\n}\n.map-filters-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n top: 5px;\n}\n.map-filters-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] {\n height: 48px;\n background-color: white;\n}\n.map-filters-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n padding-top: 0.5rem !important;\n}\n.office-level-row[_ngcontent-%COMP%] .mat-select-placeholder[_ngcontent-%COMP%] {\n color: #333333;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .office-level-row[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .office-level-row[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 45px !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .office-level-row[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .office-level-row[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 45px !important;\n }\n}\n.office-level-row[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n display: block;\n top: 0 !important;\n width: 44px !important;\n right: -11px !important;\n background: transparent !important;\n border-width: 0 0 0 1px;\n border-color: #c6c6c6;\n border-style: solid;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .office-level-row[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 1px) !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .office-level-row[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 1px) !important;\n }\n}\n.office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n background: #F0F0F0 !important;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 2px) !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 2px) !important;\n }\n}\n.office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-chevron[_ngcontent-%COMP%] {\n opacity: 0.5;\n margin-left: 10px;\n}\n.office-level-row[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .office-level-row[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .map-controls[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .map-controls[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n display: flex !important;\n width: 100% !important;\n justify-content: space-between !important;\n}\n.booking-form-container[_ngcontent-%COMP%] {\n overflow-y: auto;\n max-height: calc(100vh - 345px);\n}\n.booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-label[_ngcontent-%COMP%], .booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] .mat-radio-label-content[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\" !important;\n color: #333333;\n}\n.booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::-moz-placeholder {\n font-family: \"McKinsey Sans\";\n color: #B3B3B3;\n}\n.booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:-ms-input-placeholder {\n font-family: \"McKinsey Sans\";\n color: #B3B3B3;\n}\n.booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%], .booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder {\n font-family: \"McKinsey Sans\";\n color: #B3B3B3;\n}\n.button-wrapper[_ngcontent-%COMP%] {\n flex-basis: 100%;\n justify-content: end;\n background-color: white;\n z-index: 2;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .button-wrapper[_ngcontent-%COMP%] {\n bottom: -0.5rem;\n position: sticky;\n padding-top: 1.75rem;\n padding-bottom: 1.75rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .button-wrapper[_ngcontent-%COMP%] {\n bottom: -0.5rem;\n position: sticky;\n padding-top: 1.75rem;\n padding-bottom: 1.75rem;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .button-wrapper.has-fixed[_ngcontent-%COMP%] {\n z-index: 2;\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .button-wrapper.has-fixed[_ngcontent-%COMP%] {\n z-index: 2;\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n }\n}\n.button-wrapper-spacer[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .button-wrapper[_ngcontent-%COMP%] > .button-row[_ngcontent-%COMP%] {\n padding: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .button-wrapper[_ngcontent-%COMP%] > .button-row[_ngcontent-%COMP%] {\n padding: 1rem;\n }\n}\n.mck-modal-primary-button[_ngcontent-%COMP%] {\n flex: 1;\n width: 100%;\n margin: 0 0.75rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-modal-primary-button[_ngcontent-%COMP%] {\n max-width: 320px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-modal-primary-button[_ngcontent-%COMP%] {\n max-width: 320px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-primary-button[_ngcontent-%COMP%] {\n max-width: 100% !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-primary-button[_ngcontent-%COMP%] {\n max-width: 100% !important;\n }\n}\n.mck-modal-secondary-button[_ngcontent-%COMP%] {\n flex: 1;\n width: 100%;\n margin: 0 0.75rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-modal-secondary-button[_ngcontent-%COMP%] {\n max-width: 320px;\n margin-right: 0 0.75rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-modal-secondary-button[_ngcontent-%COMP%] {\n max-width: 320px;\n margin-right: 0 0.75rem;\n }\n}\n.small-buttons[_ngcontent-%COMP%] .mck-modal-primary-button[_ngcontent-%COMP%] {\n flex: 1;\n width: 100%;\n margin: 0 0.75rem;\n max-width: 134px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .small-buttons[_ngcontent-%COMP%] .mck-modal-primary-button[_ngcontent-%COMP%] {\n max-width: 100% !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .small-buttons[_ngcontent-%COMP%] .mck-modal-primary-button[_ngcontent-%COMP%] {\n max-width: 100% !important;\n }\n}\n.small-buttons[_ngcontent-%COMP%] .mck-modal-secondary-button[_ngcontent-%COMP%] {\n flex: 1;\n width: 100%;\n margin: 0 0.75rem;\n max-width: 134px;\n margin-right: 0 0.75rem;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .small-buttons[_ngcontent-%COMP%] .mck-modal-secondary-button[_ngcontent-%COMP%] {\n max-width: 100% !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .small-buttons[_ngcontent-%COMP%] .mck-modal-secondary-button[_ngcontent-%COMP%] {\n max-width: 100% !important;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJsaWJzL3VpL3NyYy9saWIvbW9kYWwtYnV0dG9uLXJvdy9tb2RhbC1idXR0b24tcm93LmNvbXBvbmVudC5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy91aS9zcmMvbGliL21peGlucy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2Uvbm9kZV9tb2R1bGVzL0Bhbmd1bGFyL21hdGVyaWFsL190aGVtaW5nLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvc3R5bGVzLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvbW9kYWwtYnV0dG9uLXJvdy9tb2RhbC1idXR0b24tcm93LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTJDQTs7RUFBQTtBQXFDQTs7c0JBQUE7QUFhQTtFQUNJLGdCQTlGTTtFQStGTix1QkE3RmM7QUNPbEI7QUR5RkE7O3NCQUFBO0FFa09BOzs7RUFBQTtBRnpSQTs7RUFBQTtBQXFDQTs7c0JBQUE7QUFhQTtFQUNJLGdCQTlGTTtFQStGTix1QkE3RmM7QUN5QmxCO0FEdUVBOztzQkFBQTtBR216Q0Esa0NBQUE7QUF1aURBLDJDQUFBO0FBd0NBLHFCQUFBO0FDOTlGUTtFQUVJLGFBQUE7QUg2Qlo7QUd4QlE7RUFDSSxXQUFBO0VBQ0EsWUFBQTtBSDBCWjtBR3hCWTtFQUNJLFdBQUE7QUgwQmhCO0FHdkJZO0VBQ0ksWUFBQTtBSHlCaEI7QUdyQlE7RUFDSSww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QSx5QkZ6VmM7QUNrcUNsQjtBRzVIUTtFQUNJLFdBQUE7QUg4SFo7QUc3SFk7RUYvc0JSLHlCRnpWYztFSTBpQ0YsV0FBQTtFQUNBLFlBQUE7RUFDQSxnQkFBQTtBSCtIaEI7QUczSFE7RUZ2dEJKLHlCRnpWYztFSWtqQ04sWUFBQTtFQUNBLGdCQUFBO0VBQ0EsZ0JBQUE7QUg2SFo7QUcxSFE7RUY5dEJKLHlCRnpWYztFRTZWZCxXQUFBO0VBQ0EsWUFBQTtFRTR0QlEsZ0JBQUE7QUg2SFo7QUMzckNZO0VFMmpDSjtJRnR0QkEsWUFBQTtJQUNBLGFBQUE7RUQwMUJOO0FBQ0Y7QUNqc0NZO0VFMmpDSjtJRnR0QkEsWUFBQTtJQUNBLGFBQUE7RURnMkJOO0FBQ0Y7QUd0SVE7RUZwdUJKLHlCRnpWYztFRXVXZCxZQUFBO0VBQ0EsWUFBQTtFRXd0QlEsZ0JBQUE7RUFDQSxnQkFBQTtBSHlJWjtBQzlzQ1k7RUVpa0NKO0lGbHRCQSxZQUFBO0lBQ0EsWUFBQTtFRG0yQk47QUFDRjtBQ3B0Q1k7RUVpa0NKO0lGbHRCQSxZQUFBO0lBQ0EsWUFBQTtFRHkyQk47QUFDRjtBR2xKUTtFRjN1QkoseUJGelZjO0VJc2tDTixZQUFBO0VBQ0EsZ0JBQUE7QUhvSlo7QUMvdENZO0VFd2tDSjtJQU1RLGdCQUFBO0VIcUpkO0FBQ0Y7QUNwdUNZO0VFd2tDSjtJQU1RLGdCQUFBO0VIMEpkO0FBQ0Y7QUd2SlE7RUZydkJKLHlCRnpWYztFSWdsQ04sWUFBQTtFQUNBLGdCQUFBO0FIeUpaO0FDOXVDWTtFRWtsQ0o7SUFNUSxnQkFBQTtFSDBKZDtBQUNGO0FDbnZDWTtFRWtsQ0o7SUFNUSxnQkFBQTtFSCtKZDtBQUNGO0FHNUpRO0VGL3ZCSix5QkZ6VmM7RUkwbENOLFlBQUE7RUFDQSxnQkFBQTtBSDhKWjtBQzd2Q1k7RUU0bENKO0lBTVEsZ0JBQUE7RUgrSmQ7QUFDRjtBQ2x3Q1k7RUU0bENKO0lBTVEsZ0JBQUE7RUhvS2Q7QUFDRjtBR2hLWTtFRjF3QlIseUJGelZjO0VJcW1DRixZQUFBO0VBQ0EsY0FBQTtBSGtLaEI7QUM1d0NZO0VFdW1DQTtJQUtRLGNBQUE7RUhvS2xCO0FBQ0Y7QUNqeENZO0VFdW1DQTtJQUtRLGNBQUE7RUh5S2xCO0FBQ0Y7QUd0S2dCO0VBQ0ksWUFBQTtFQUNBLGtCQUFBO0FId0twQjtBR2xLWTtFRjN4QlIseUJGelZjO0VJc25DRixZQUFBO0VBQ0EsY0FBQTtBSG9LaEI7QUMveENZO0VFd25DQTtJQUtRLGNBQUE7SUFDQSxpQkFBQTtFSHNLbEI7QUFDRjtBQ3J5Q1k7RUV3bkNBO0lBS1EsY0FBQTtJQUNBLGlCQUFBO0VINEtsQjtBQUNGO0FHektnQjtFQUNJLFlBQUE7RUFDQSxrQkFBQTtBSDJLcEI7QUdyS1k7RUY3eUJSLHlCRnpWYztFSXdvQ0YsWUFBQTtFQUNBLGNBQUE7QUh1S2hCO0FDcHpDWTtFRTBvQ0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUh5S2xCO0FBQ0Y7QUMxekNZO0VFMG9DQTtJQUtRLGNBQUE7SUFDQSxpQkFBQTtFSCtLbEI7QUFDRjtBRzVLZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUg4S3BCO0FHMUtnQjtFQUNJLFlBQUE7RUFDQSxrQkFBQTtBSDRLcEI7QUd0S1k7RUZyMEJSLHlCRnpWYztFSWdxQ0YsWUFBQTtFQUNBLGNBQUE7QUh3S2hCO0FDNzBDWTtFRWtxQ0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUgwS2xCO0FBQ0Y7QUNuMUNZO0VFa3FDQTtJQUtRLGNBQUE7SUFDQSxpQkFBQTtFSGdMbEI7QUFDRjtBRzdLZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUgrS3BCO0FHM0tnQjtFQUNJLFlBQUE7RUFDQSxrQkFBQTtBSDZLcEI7QUd2S1k7RUY3MUJSLHlCRnpWYztFSXdyQ0YsWUFBQTtFQUNBLGNBQUE7QUh5S2hCO0FDdDJDWTtFRTByQ0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUgyS2xCO0FBQ0Y7QUM1MkNZO0VFMHJDQTtJQUtRLGNBQUE7SUFDQSxpQkFBQTtFSGlMbEI7QUFDRjtBRzlLZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUhnTHBCO0FHNUtnQjtFQUNJLFlBQUE7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T0FBQTtFQUNBLFdBQUE7RUFDQSxpQkFBQTtBSjRwREo7QUMvckRZO0VHZ0NaO0lBS1EsZ0JBQUE7RUo4cEROO0FBQ0Y7QUNwc0RZO0VHZ0NaO0lBS1EsZ0JBQUE7RUptcUROO0FBQ0Y7QUNyc0RZO0VHNEJaO0lBU1EsMEJBQUE7RUpvcUROO0FBQ0Y7QUMxc0RZO0VHNEJaO0lBU1EsMEJBQUE7RUp5cUROO0FBQ0Y7QUl0cURBO0VBQ0ksT0FBQTtFQUNBLFdBQUE7RUFDQSxpQkFBQTtBSnlxREo7QUN6dERZO0VHNkNaO0lBS1EsZ0JBQUE7SUFDQSx1QkFBQTtFSjJxRE47QUFDRjtBQy90RFk7RUc2Q1o7SUFLUSxnQkFBQTtJQUNBLHVCQUFBO0VKaXJETjtBQUNGO0FJNXFESTtFQUNJLE9BQUE7RUFDQSxXQUFBO0VBQ0EsaUJBQUE7RUFDQSxnQkFBQTtBSitxRFI7QUN4dURZO0VHcURSO0lBT1EsMEJBQUE7RUpnckRWO0FBQ0Y7QUM3dURZO0VHcURSO0lBT1EsMEJBQUE7RUpxckRWO0FBQ0Y7QUlsckRJO0VBQ0ksT0FBQTtFQUNBLFdBQUE7RUFDQSxpQkFBQTtFQUNBLGdCQUFBO0VBQ0EsdUJBQUE7QUpvckRSO0FDenZEWTtFR2dFUjtJQVFRLDBCQUFBO0VKcXJEVjtBQUNGO0FDOXZEWTtFR2dFUjtJQVFRLDBCQUFBO0VKMHJEVjtBQUNGIiwiZmlsZSI6ImxpYnMvdWkvc3JjL2xpYi9tb2RhbC1idXR0b24tcm93L21vZGFsLWJ1dHRvbi1yb3cuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIkcHJpbWFyeTogIzFGNDBFNjtcbiRmb3JtLWxhYmVsOiAjMDUxQzJDO1xuJHNlY29uZGFyeS1sYWJlbDogIzc2NzY3NjtcbiRib3JkZXI6ICNCM0IzQjM7XG4kYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDogI0QwRDBEMDtcbiRjaGlwLWNvbG9yOiAjMzMzMzMzO1xuJHBsYWNlaG9sZGVyLWNvbG9yOiAjN0Y3RjdGO1xuJGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4kcGFnZS1iYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuJHNlbGVjdGVkLW9wdGlvbjogI0U2RTZFNjtcbiRjb2xvci1icmFuZC15ZWxsb3c6ICNmZmQwNDg7XG4kbGlnaHQteWVsbG93OiAjZmZmM2NlO1xuJGNvYWNobWFyay10ZXh0OiAjNmY0ZDAwO1xuJGVycm9yLWNvbG9yOiAjRTEyRTQwO1xuJG5vLWZpbHRlcnMtY29sb3I6ICNCQ0JDQkM7XG4kcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I6ICNGNEY0RjQ7XG4kcHJpbWFyeS1oaWdobGlnaHQ6ICMyMjUxRkY7XG4kc2Nyb2xsYmFyLWNvbG9yOiAjNzU3NTc1O1xuXG4kYXZhaWxhYmxlLWNvbG9yOiAjNUQ5RDUyO1xuJGF2YWlsYWJsZS1ieS1yZXF1ZXN0LWNvbG9yOiAjRjVCNTNGO1xuJGluLXVzZS1jb2xvcjogI0Q0NDgzRTtcbiRub3QtYm9va2FibGUtY29sb3I6ICNDQ0NDQ0M7XG5cbiRtb2RhbC1ib2R5LWhlYWRpbmc6ICM0RDRENEQ7XG4kYWxlcnQtb3ZlcmxheS1iZzogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2FjaG1hcmstYmc6ICNFQkVCRjY7XG4kY29hY2htYXJrLWRhcmstdGV4dDogIzFCMUIxOTtcbiRlcnJvci10ZXh0OiAjZmZmO1xuXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuXG4vLyA0cHhcbiRzcGFjaW5nLXNtYWxsZXN0OiAwLjI1cmVtO1xuXG4vLyA4cHhcbiRzcGFjaW5nLXh4c21hbGw6IDAuNXJlbTtcblxuLy8gMTJweFxuJHNwYWNpbmcteHNtYWxsOiAwLjc1cmVtO1xuXG4vLyAxNnB4XG4kc3BhY2luZy1zbWFsbDogMXJlbTtcblxuLy8gMjBweFxuJHNwYWNpbmctc21hbGwtbWVkaXVtOiAxLjI1cmVtO1xuXG4vLyAyNHB4XG4kc3BhY2luZy1tZWRpdW06IDEuNXJlbTtcblxuLy8gMjhweFxuJHNwYWNpbmctbWVkaXVtLWxhcmdlOiAxLjc1cmVtO1xuXG4vLyAzMnB4XG4kc3BhY2luZy1sYXJnZTogMnJlbTtcblxuLy8gNDhweFxuJHNwYWNpbmcteGxhcmdlOiAzcmVtO1xuXG4vLyA2NHB4XG4kc3BhY2luZy14eGxhcmdlOiA0cmVtO1xuXG4vLyA5NnB4XG4kc3BhY2luZy1sYXJnZXN0OiA2cmVtO1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGRldmljZS1tb2JpbGUtc2l6ZTogNDUwcHg7XG4kZGV2aWNlLXRhYmxldC1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFwdG9wLXNpemU6IDEwMjRweDtcblxuJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemU6IDgwMHB4O1xuJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemU6IDEwNDhweDtcbiRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplOiAxMjgwcHg7XG5cblxuOmV4cG9ydCB7XG4gICAgcHJpbWFyeTogJHByaW1hcnk7XG4gICAgc2Vjb25kYXJ5TGFiZWw6ICRzZWNvbmRhcnktbGFiZWw7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4kaWNvbi1zbWFsbDogMTZweDtcbiRpY29uLW1lZGl1bTogMjRweDtcbiRpY29uLWxhcmdlOiAzMnB4O1xuJGljb24teGxhcmdlOiA0OHB4O1xuIiwiLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKiBUaGVtZSBmb3IgdGhlIHJpcHBsZSBlbGVtZW50cy4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF0ZXJpYWwvbm8tcHJlZml4ZXMgKi9cbi8qIHN0eWxlbGludC1lbmFibGUgKi9cbi5tY2staW5oZXJpdC1mb250IHtcbiAgZm9udDogaW5oZXJpdDtcbn1cbi5tY2stY29udGVudC1leHBhbmQsIC5tY2stY29udGVudC1wYWdlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbn1cbi5tY2stY29udGVudC1leHBhbmQtd2lkdGgge1xuICB3aWR0aDogMTAwJTtcbn1cbi5tY2stY29udGVudC1leHBhbmQtaGVpZ2h0IHtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLm1jay1jb250ZW50LXdpdGgtZm9vdGVyLWhlaWdodCB7XG4gIGhlaWdodDogY2FsYygxMDB2aCAtIDU4cHgpO1xufVxuLm1jay1jb250ZW50LWZ1bGwtaGVpZ2h0LCAubWNrLWNvbnRlbnQtcGFnZS1jb250YWluZXIge1xuICBoZWlnaHQ6IDEwMHZoO1xufVxuLm1jay1jb250ZW50LXBhZ2Uge1xuICBiYWNrZ3JvdW5kOiAjRjhGOUZBO1xufVxuLm1jay1jb250ZW50LWJvZHkge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWNvbnRlbnQtYm9keSB7XG4gICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWNvbnRlbnQtYm9keSB7XG4gICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIH1cbn1cbi5tY2stY29udGVudC1ncm91cCB7XG4gIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcbiAgd2lkdGg6IDEwMCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWNvbnRlbnQtZ3JvdXAge1xuICAgIG1heC13aWR0aDogNzU5cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWNvbnRlbnQtZ3JvdXAge1xuICAgIG1heC13aWR0aDogNzU5cHg7XG4gIH1cbn1cbi5tY2stc2hhZG93IHtcbiAgYm94LXNoYWRvdzogMHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtcbn1cbi5tY2stZmxleC0xIHtcbiAgZmxleDogMTtcbn1cbi5tY2stcm93LCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4LCAubWNrLXJvdy1mbG93IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbn1cbi5tY2stcm93Lm1jay1jZW50ZXItanVzdGlmeSwgLm1jay1jZW50ZXItanVzdGlmeS5tY2stcm93LWZsb3csIC5tY2stcm93Lm1jay1jZW50ZXIsIC5tY2stcm93Lm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1yb3cubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93Lm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXJvdy5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXJvdy5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1yb3cubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1yb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1jZW50ZXItc3VmZml4IC5tYXQtZm9ybS1maWVsZC1pbmZpeCwgLm1jay1jZW50ZXIubWNrLXJvdy1mbG93LCAubWNrLXJvdy1mbG93Lm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuLm1jay1yb3cubWNrLWNlbnRlci1hbGlnbiwgLm1jay1jZW50ZXItYWxpZ24ubWNrLXJvdy1mbG93LCAubWNrLXJvdy5tY2stY2VudGVyLCAubWNrLXJvdy5tY2stYnV0dG9uLm1hdC1idXR0b24sIC5tY2stcm93Lm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1yb3cubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1yb3cubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stcm93Lm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXJvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stY2VudGVyLm1jay1yb3ctZmxvdywgLm1jay1yb3ctZmxvdy5tY2stYnV0dG9uLm1hdC1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24ge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLm1jay1yb3cubWNrLXN0cmV0Y2gsIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWNrLXN0cmV0Y2gubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stc3RyZXRjaC5tY2stcm93LWZsb3cge1xuICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbn1cbi5tY2stcm93LWZsb3cge1xuICBmbGV4LXdyYXA6IHdyYXA7XG59XG4ubWNrLXJvdy5tY2stc2Nyb2xsLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1jay1zY3JvbGwubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stc2Nyb2xsLm1jay1yb3ctZmxvdyB7XG4gIG92ZXJmbG93LXg6IHNjcm9sbDtcbn1cbi5tY2stY29sdW1uLCAuYnV0dG9uLXdyYXBwZXIsIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuLm1jay1jb2x1bW4ubWNrLWNlbnRlciwgLm1jay1jZW50ZXIuYnV0dG9uLXdyYXBwZXIsIC5tY2stY29sdW1uLm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LWJ1dHRvbi5idXR0b24td3JhcHBlciwgLm1jay1jb2x1bW4ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbi5idXR0b24td3JhcHBlciwgLm1jay1jb2x1bW4ubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbi5idXR0b24td3JhcHBlciwgLm1jay1jb2x1bW4ubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24uYnV0dG9uLXdyYXBwZXIsIC5tY2stY29sdW1uLm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24uYnV0dG9uLXdyYXBwZXIsIC5tY2stY29sdW1uLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24uYnV0dG9uLXdyYXBwZXIsIC5tY2stY29sdW1uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLmJ1dHRvbi13cmFwcGVyLCAubWNrLWNvbHVtbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbi5idXR0b24td3JhcHBlciwgLm1jay1jb2x1bW4ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLmJ1dHRvbi13cmFwcGVyLCAubWNrLWNvbHVtbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbi5idXR0b24td3JhcHBlciwgLm1jay1jZW50ZXIubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWNrLWNlbnRlci5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1jZW50ZXIubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stY2VudGVyLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stY2VudGVyLm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1jZW50ZXIubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stY2VudGVyLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stY2VudGVyLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stY2VudGVyLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1jZW50ZXIubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1jay1jb2x1bW4ubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXguYnV0dG9uLXdyYXBwZXIsIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1jZW50ZXItc3VmZml4IC5tYXQtZm9ybS1maWVsZC1pbmZpeC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1jZW50ZXItc3VmZml4IC5tYXQtZm9ybS1maWVsZC1pbmZpeC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4ubWNrLWNvbHVtbi5tY2stc3BhY2UtYmV0d2VlbiwgLm1jay1zcGFjZS1iZXR3ZWVuLmJ1dHRvbi13cmFwcGVyLCAubWNrLXNwYWNlLWJldHdlZW4ubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWNrLXNwYWNlLWJldHdlZW4ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stc3BhY2UtYmV0d2Vlbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1zcGFjZS1iZXR3ZWVuLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stc3BhY2UtYmV0d2Vlbi5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1zcGFjZS1iZXR3ZWVuLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLXNwYWNlLWJldHdlZW4ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1zcGFjZS1iZXR3ZWVuLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stc3BhY2UtYmV0d2Vlbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stc3BhY2UtYmV0d2Vlbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuLm1jay1jb2x1bW4ubWNrLXN0cmV0Y2gsIC5tY2stc3RyZXRjaC5idXR0b24td3JhcHBlciwgLm1jay1zdHJldGNoLm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1zdHJldGNoLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXN0cmV0Y2gubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stc3RyZXRjaC5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXN0cmV0Y2gubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stc3RyZXRjaC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1jay1zdHJldGNoLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stc3RyZXRjaC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXN0cmV0Y2gubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXN0cmV0Y2gubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xufVxuLm1jay1jb2x1bW4ubWNrLXNjcm9sbCwgLm1jay1zY3JvbGwuYnV0dG9uLXdyYXBwZXIsIC5tY2stc2Nyb2xsLm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1zY3JvbGwubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stc2Nyb2xsLm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXNjcm9sbC5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXNjcm9sbC5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1zY3JvbGwubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stc2Nyb2xsLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stc2Nyb2xsLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stc2Nyb2xsLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1zY3JvbGwubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgb3ZlcmZsb3cteTogb3ZlcmxheTtcbn1cbi5tY2stY29sdW1uLm1jay1mbGV4LWVuZCwgLm1jay1mbGV4LWVuZC5idXR0b24td3JhcHBlciwgLm1jay1mbGV4LWVuZC5tY2stYnV0dG9uLm1hdC1idXR0b24sIC5tY2stZmxleC1lbmQubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stZmxleC1lbmQubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stZmxleC1lbmQubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1mbGV4LWVuZC5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1mbGV4LWVuZC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1jay1mbGV4LWVuZC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLWZsZXgtZW5kLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stZmxleC1lbmQubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLWZsZXgtZW5kLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24ge1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xufVxuLm1jay1vdmVyZmxvdyB7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLm1jay1ib3JkZXJlZCwgLm1jay1pbnB1dCB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNCM0IzQjM7XG59XG4ubWNrLWJvcmRlcmVkOmhvdmVyLCAubWNrLWlucHV0OmhvdmVyIHtcbiAgYm9yZGVyLWNvbG9yOiAjNDY0NjQ2O1xufVxuLm1jay1ib3JkZXJlZDpmb2N1cywgLm1jay1pbnB1dDpmb2N1cyB7XG4gIGJvcmRlci1jb2xvcjogIzFGNDBFNjtcbn1cbi5tY2stYm9yZGVyZWRbZGlzYWJsZWQ9dHJ1ZV0sIC5tY2staW5wdXRbZGlzYWJsZWQ9dHJ1ZV0ge1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgYm9yZGVyLWNvbG9yOiAjZjBmMGYwO1xuICBjb2xvcjogI2NjYztcbn1cbi5tY2stZGF0ZS1kaXNwbGF5IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiA0M3B4O1xuICBwYWRkaW5nOiAxcmVtIDAuNXJlbTtcbiAgdHJhbnNpdGlvbjogYm9yZGVyIDIwMG1zLCBib3gtc2hhZG93IDIwMG1zO1xufVxuLm1jay1mb3JtLWlucHV0IC5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgcGFkZGluZy1ib3R0b206IDAuNXJlbTtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCB7XG4gIG1pbi13aWR0aDogYXV0byAhaW1wb3J0YW50O1xufVxuLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nLXRvcDogMC43cmVtICFpbXBvcnRhbnQ7XG4gIHBhZGRpbmctYm90dG9tOiAwLjVyZW0gIWltcG9ydGFudDtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gIG1pbi1oZWlnaHQ6IDIuN3JlbTtcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNyk7XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24gLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgbWFyZ2luLXRvcDogMnB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1zZWxlY3QtZHJvcGRvd24tYnV0dG9uIC5tYXQtZm9ybS1maWVsZC1mbGV4IHtcbiAgICBwYWRkaW5nLWxlZnQ6IDAuNXJlbTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24gLm1hdC1mb3JtLWZpZWxkLWZsZXgge1xuICAgIHBhZGRpbmctbGVmdDogMC41cmVtO1xuICAgIHBhZGRpbmctcmlnaHQ6IDAuNXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1zZWxlY3QtZHJvcGRvd24tYnV0dG9uIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24gLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICBoZWlnaHQ6IDJyZW07XG4gICAgbWluLWhlaWdodDogMnJlbTtcbiAgfVxuICAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24gLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stc2VsZWN0LWRyb3Bkb3duLWJ1dHRvbiAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgIGhlaWdodDogMnJlbTtcbiAgICBtaW4taGVpZ2h0OiAycmVtO1xuICB9XG4gIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stc2VsZWN0LWRyb3Bkb3duLWJ1dHRvbiAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7XG4gICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcbiAgfVxufVxuLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1hdC1zIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuLm1jay1mb3JtLWlucHV0IG1hdC1zZWxlY3Qge1xuICBtYXJnaW4tdG9wOiAwLjJyZW07XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LXNlbGVjdCAubWF0LXNlbGVjdC1hcnJvdyB7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtc2VsZWN0IC5tYXQtc2VsZWN0LXZhbHVlID4gLm1hdC1zZWxlY3QtdmFsdWUtdGV4dCA+IHNwYW4ge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbi5tY2stZm9ybS1pbnB1dCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Lm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsIC5tY2stZm9ybS1pbnB1dCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcCwgLm1jay1mb3JtLWlucHV0IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kIHtcbiAgYm9yZGVyLWNvbG9yOiAjQjNCM0IzO1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cbi5tY2stZm9ybS1pbnB1dCAuYXZhaWxhYmxlIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCwgLm1jay1mb3JtLWlucHV0IC5hdmFpbGFibGUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsIC5tY2stZm9ybS1pbnB1dCAuYXZhaWxhYmxlIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kIHtcbiAgYm9yZGVyLWNvbG9yOiAjM2FhNTM3O1xufVxuLm1jay1mb3JtLWlucHV0IC5ib29rZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LCAubWNrLWZvcm0taW5wdXQgLmJvb2tlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcCwgLm1jay1mb3JtLWlucHV0IC5ib29rZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICBib3JkZXItY29sb3I6ICNlMTJlNDE7XG59XG4ubWNrLWZvcm0taW5wdXQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LCAubWNrLWZvcm0taW5wdXQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsIC5tY2stZm9ybS1pbnB1dCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gIGJvcmRlci1jb2xvcjogIzFGNDBFNjtcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4ubWNrLWZvcm0taW5wdXQgPiBtYXQtZm9ybS1maWVsZC5tY2stZXJyb3IgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICBwYWRkaW5nLWJvdHRvbTogMDtcbn1cbi5tY2stZm9ybS1pbnB1dCA+IG1hdC1mb3JtLWZpZWxkLm1jay1lcnJvciAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Lm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsIC5tY2stZm9ybS1pbnB1dCA+IG1hdC1mb3JtLWZpZWxkLm1jay1lcnJvciAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcCwgLm1jay1mb3JtLWlucHV0ID4gbWF0LWZvcm0tZmllbGQubWNrLWVycm9yIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kIHtcbiAgYm9yZGVyLWNvbG9yOiAjRTEyRTQwO1xufVxuLm1jay1mb3JtLWlucHV0IG1jay1jbG9zZS1pY29uLm1hdC1jaGlwLXJlbW92ZS5tYXQtY2hpcC1yZW1vdmUge1xuICBvcGFjaXR5OiAxO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtbGFiZWwge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtcmFkaW8tYnV0dG9uIHtcbiAgbWFyZ2luLXJpZ2h0OiAxcmVtO1xufVxuLm1jay1mb3JtLWlucHV0IC5tYXQtcmFkaW8tbGFiZWwtY29udGVudCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbi5tY2stZm9ybS1pbnB1dCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSB7XG4gIGJvcmRlci1jb2xvcjogIzFGNDBFNiAhaW1wb3J0YW50O1xuICBib3JkZXItd2lkdGg6IDFweCAhaW1wb3J0YW50O1xufVxuLm1jay1mb3JtLWlucHV0IC5tYXQtcmFkaW8taW5uZXItY2lyY2xlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFGNDBFNiAhaW1wb3J0YW50O1xufVxuLm1jay1mb3JtLWlucHV0IG1hdC1yYWRpby1ncm91cCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGZsZXgtd3JhcDogd3JhcDtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtcmFkaW8tZ3JvdXAgPiBtYXQtcmFkaW8tYnV0dG9uOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tcmlnaHQ6IDA7XG59XG4ubWNrLWZvcm0taW5wdXQtY29udGFpbmVyID4gLm1jay1mb3JtLWlucHV0LCAubWNrLWZvcm0taW5wdXQtY29udGFpbmVyID4gbWNrLXNlbGVjdCB7XG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stZm9ybS1pbnB1dC1jb250YWluZXIgPiAubWNrLWZvcm0taW5wdXQsIC5tY2stZm9ybS1pbnB1dC1jb250YWluZXIgPiBtY2stc2VsZWN0IHtcbiAgICBtYXJnaW4tYm90dG9tOiAxLjc1cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogMTA0OHB4KSB7XG4gIC5tY2stZm9ybS1pbnB1dC1jb250YWluZXIgPiAubWNrLWZvcm0taW5wdXQsIC5tY2stZm9ybS1pbnB1dC1jb250YWluZXIgPiBtY2stc2VsZWN0IHtcbiAgICBtYXJnaW4tYm90dG9tOiAxLjc1cmVtO1xuICB9XG59XG4ubWNrLWZvcm0taW5wdXQtY29udGFpbmVyIC5tY2stcmFkaW8tc2VsZWN0IHtcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stZm9ybS1pbnB1dC1jb250YWluZXIgLm1jay1yYWRpby1zZWxlY3Qge1xuICAgIG1hcmdpbi1ib3R0b206IDEuNXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDEwNDhweCkge1xuICAubWNrLWZvcm0taW5wdXQtY29udGFpbmVyIC5tY2stcmFkaW8tc2VsZWN0IHtcbiAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG4gIH1cbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcCB7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgbWluLWhlaWdodDogMS41cmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzMzMzO1xuICBwYWRkaW5nLXRvcDogMC4yNXJlbTtcbiAgcGFkZGluZy1ib3R0b206IDAuMjVyZW07XG4gIHBhZGRpbmctbGVmdDogMC41cmVtO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLWZvcm0taW5wdXQgbWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LXN0YW5kYXJkLWNoaXAge1xuICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1mb3JtLWlucHV0IG1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwIHtcbiAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgfVxufVxuLm1jay1mb3JtLWlucHV0IG1hdC1jaGVja2JveC5tYXQtY2hlY2tib3gubWF0LWNoZWNrYm94IHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogMzAwO1xuICBjb2xvcjogYmxhY2s7XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWNoZWNrYm94IGRpdi5tYXQtY2hlY2tib3gtYmFja2dyb3VuZC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxRjQwRTY7XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWNoZWNrYm94IGRpdi5tYXQtY2hlY2tib3gtYmFja2dyb3VuZC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZC5tY2stY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWRpc2FibGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0QwRDBEMDtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtY2hlY2tib3gubWNrLWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1kaXNhYmxlZCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgY29sb3I6IGJsYWNrO1xuICBjb2xvcjogI0IzQjNCMztcbn1cbi5tY2stYm9yZGVybGVzcyB7XG4gIGJvcmRlcjogbm9uZTtcbn1cbi5tY2stYm9yZGVybGVzczpob3ZlciwgLm1jay1ib3JkZXJsZXNzOmZvY3VzLCAubWNrLWJvcmRlcmxlc3M6ZGlzYWJsZWQge1xuICBib3JkZXI6IG5vbmU7XG59XG4ubWNrLXNlbGVjdC1wYW5lbCB7XG4gIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDtcbiAgYm9yZGVyLXJhZGl1czogdW5zZXQgIWltcG9ydGFudDtcbiAgbWFyZ2luLXRvcDogMzVweCAhaW1wb3J0YW50O1xuICBtYXJnaW4tbGVmdDogNXB4O1xufVxuLm1jay1zZWxlY3QtcGFuZWwgbWF0LW9wdGlvbiB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgcGFkZGluZy1yaWdodDogMDtcbn1cbi5tY2stc2VsZWN0LXBhbmVsIG1hdC1vcHRpb24ubWF0LW9wdGlvbi10ZXh0IHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuLm1jay1zZWxlY3QtcGFuZWwubWNrLW1hcmdpbi10b3Age1xuICBtYXJnaW4tdG9wOiAxLjVyZW0gIWltcG9ydGFudDtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwubWF0LWF1dG9jb21wbGV0ZS1wYW5lbC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIHtcbiAgdG9wOiAtMTBweDtcbiAgbWF4LWhlaWdodDogMjc4cHg7XG59XG4ubWNrLWNoZWNrYm94LXBhbmVsIG1hdC1vcHRpb24ubWNrLXRydW5jYXRlZCAubWF0LWNoZWNrYm94LWxhYmVsLm1hdC1jaGVja2JveC1sYWJlbCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICAtd2Via2l0LWxpbmUtY2xhbXA6IDI7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG59XG4ubWNrLWNoZWNrYm94LXBhbmVsIG1hdC1vcHRpb24ge1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIHBhZGRpbmctcmlnaHQ6IDA7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBoZWlnaHQ6IHVuc2V0O1xuICBtaW4taGVpZ2h0OiAzNnB4O1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIC5tYXQtY2hlY2tib3gtbGFiZWwubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgZmxleDogMTtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiAubWF0LWNoZWNrYm94LWxhYmVsLm1hdC1jaGVja2JveC1sYWJlbCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgY29sb3I6IGJsYWNrO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uLm1jay1jaGVja2JveC1ncm91cC1oZWFkZXIgLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICBmb250LXdlaWdodDogNTAwO1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uLm1jay1jaGVja2JveC1ncm91cC1jaGlsZCB7XG4gIG1hcmdpbi1sZWZ0OiAycmVtO1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIG1hdC1jaGVja2JveCBsYWJlbC5tYXQtY2hlY2tib3gtbGF5b3V0IHtcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmctbGVmdDogMTZweDtcbiAgcGFkZGluZy1yaWdodDogMTZweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiBtYXQtY2hlY2tib3ggbGFiZWwubWF0LWNoZWNrYm94LWxheW91dCB7XG4gICAgcGFkZGluZy1sZWZ0OiAycHg7XG4gICAgcGFkZGluZy1yaWdodDogMnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIG1hdC1jaGVja2JveCBsYWJlbC5tYXQtY2hlY2tib3gtbGF5b3V0IHtcbiAgICBwYWRkaW5nLWxlZnQ6IDJweDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAycHg7XG4gIH1cbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiBtYXQtY2hlY2tib3ggZGl2Lm1hdC1jaGVja2JveC1mcmFtZS5tYXQtY2hlY2tib3gtZnJhbWUge1xuICBib3JkZXI6IDFweCBzb2xpZCAjQjNCM0IzO1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIG1hdC1jaGVja2JveC5tYXQtY2hlY2tib3gtY2hlY2tlZCBkaXYubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMUY0MEU2O1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIG1hdC1jaGVja2JveC5tY2stY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWRpc2FibGVkIGRpdi5tYXQtY2hlY2tib3gtYmFja2dyb3VuZC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNEMEQwRDA7XG59XG4ubWNrLWNoZWNrYm94LXBhbmVsIG1hdC1vcHRpb24gbWF0LWNoZWNrYm94Lm1jay1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtZGlzYWJsZWQgLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIGNvbG9yOiBibGFjaztcbiAgY29sb3I6ICNCM0IzQjM7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG4ubWNrLWNoZWNrYm94LXBhbmVsIG1hdC1vcHRpb24gbWF0LWNoZWNrYm94IC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyIHtcbiAgd2lkdGg6IDEuMjVyZW07XG4gIGhlaWdodDogMS4yNXJlbTtcbn1cbi5tY2stc2VsZWN0LW9wdGlvbi1zZWxlY3RlZCB7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgY29sb3I6IGJsYWNrO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xufVxuLm1jay1zZWxlY3Qtb3B0aW9uLXNlbGVjdGVkIC5tY2stc3BhY2VyLWNvbnRlbnQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMUY0MEU2O1xuICBtYXJnaW4tcmlnaHQ6IDAuNzVyZW07XG59XG4ubWNrLXNlbGVjdC1vcHRpb24tdW5zZWxlY3RlZCB7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbi5tY2stc2VsZWN0LW9wdGlvbi11bnNlbGVjdGVkLm1jay1pZ25vcmUtZGlzYWJsZWQge1xuICBjb2xvcjogYmxhY2s7XG59XG4ubWNrLXNlbGVjdC1vcHRpb24tdW5zZWxlY3RlZCAubWNrLXNwYWNlci1jb250ZW50IHtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICBtYXJnaW4tcmlnaHQ6IDAuNzVyZW07XG59XG4ubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgaGVpZ2h0OiA0MHB4O1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBib3JkZXI6IG5vbmU7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24ge1xuICAgIGhlaWdodDogNDhweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24ge1xuICAgIGhlaWdodDogNDhweDtcbiAgfVxufVxuLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBwYWRkaW5nLWxlZnQ6IDAuMjVyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDAuMjVyZW07XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgfVxufVxuLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydCwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0LCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stcHJpbWFyeS1idXR0b24ge1xuICBoZWlnaHQ6IDMycHg7XG4gIG1pbi13aWR0aDogODNweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydCwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgbWluLXdpZHRoOiAxNTVweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydCwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgbWluLXdpZHRoOiAxNTVweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0LCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0LCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0LCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0LCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICB9XG59XG4ubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZSwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2stcHJpbWFyeS1idXR0b24ge1xuICBoZWlnaHQ6IDMycHg7XG4gIHdpZHRoOiAzMnB4O1xuICBtaW4td2lkdGg6IDMycHg7XG4gIHBhZGRpbmc6IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZSwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2stcHJpbWFyeS1idXR0b24ge1xuICAgIHdpZHRoOiA0MHB4O1xuICAgIGhlaWdodDogNDBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZS5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZSwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgd2lkdGg6IDQwcHg7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICB9XG59XG4ubWNrLXByaW1hcnktYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxRjQwRTY7XG59XG4ubWNrLXByaW1hcnktYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbltkaXNhYmxlZF0sIC5tY2stcHJpbWFyeS1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLmRpc2FibGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0QwRDBEMDtcbiAgY29sb3I6ICM3NTc1NzU7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG4ubWNrLXByaW1hcnktYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbltkaXNhYmxlZF0gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1jay1wcmltYXJ5LWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24uZGlzYWJsZWQgPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gIGNvbG9yOiAjNzU3NTc1O1xufVxuLm1jay1wcmltYXJ5LWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gIGNvbG9yOiB3aGl0ZTtcbn1cbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgYm9yZGVyOiAxcHggc29saWQgIzIyNTFGRjtcbiAgY29sb3I6ICMyMjUxRkY7XG59XG4ubWNrLXNlY29uZGFyeS1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbltkaXNhYmxlZF0sIC5tY2stc2Vjb25kYXJ5LWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLmRpc2FibGVkIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgY29sb3I6ICMzMzMzMzM7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG4ubWNrLXNlY29uZGFyeS1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG59XG4ubWNrLXNlY29uZGFyeS1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICBjb2xvcjogIzMzMzMzMztcbn1cbi5tY2std2FybmluZy1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZDA0ODtcbn1cbi5tY2std2FybmluZy1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICBjb2xvcjogYmxhY2s7XG59XG4ubWNrLXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ge1xuICBib3JkZXI6IDJweCBzb2xpZCAjQjNCM0IzO1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgcGFkZGluZy1sZWZ0OiAxLjc1cmVtO1xuICBwYWRkaW5nLXJpZ2h0OiAxLjc1cmVtO1xufVxuLm1jay1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydCB7XG4gIGhlaWdodDogMzJweDtcbiAgbWluLXdpZHRoOiA4M3B4O1xuICBwYWRkaW5nLWxlZnQ6IDAuMjVyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDAuMjVyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0IHtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgbWluLXdpZHRoOiAxNTVweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQge1xuICAgIGhlaWdodDogNDhweDtcbiAgICBtaW4td2lkdGg6IDE1NXB4O1xuICB9XG59XG4ubWNrLXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnkge1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLWNvbG9yOiAjMUY0MEU2O1xuICBjb2xvcjogIzFGNDBFNjtcbn1cbi5tY2stc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stdGhpbi1ib3JkZXItbGlnaHQge1xuICBib3JkZXItY29sb3I6ICNEMEQwRDA7XG4gIGJvcmRlci13aWR0aDogMXB4O1xufVxuLm1jay1zdHJva2VkLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBjb2xvcjogIzFGNDBFNjtcbn1cbi5tY2stdG9nZ2xlLWJ1dHRvbiB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgYm9yZGVyOiAxcHggc29saWQgI0IzQjNCMztcbiAgYm9yZGVyLWNvbG9yOiAjRDBEMEQwO1xuICBtaW4td2lkdGg6IDU5cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay10b2dnbGUtYnV0dG9uIHtcbiAgICBtaW4td2lkdGg6IDEzMnB4O1xuICAgIHBhZGRpbmctdG9wOiAwLjVyZW07XG4gICAgcGFkZGluZy1ib3R0b206IDAuNXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stdG9nZ2xlLWJ1dHRvbiB7XG4gICAgbWluLXdpZHRoOiAxMzJweDtcbiAgICBwYWRkaW5nLXRvcDogMC41cmVtO1xuICAgIHBhZGRpbmctYm90dG9tOiAwLjVyZW07XG4gIH1cbn1cbi5tY2stdG9nZ2xlLWJ1dHRvbi1zZWxlY3RlZCB7XG4gIGNvbG9yOiAjMUY0MEU2O1xufVxuLm1jay1kYXRlLXBpY2tlciB7XG4gIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1kYXRlLXBpY2tlciB7XG4gICAgbWF4LXdpZHRoOiAyM3JlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stZGF0ZS1waWNrZXIge1xuICAgIG1heC13aWR0aDogMjNyZW07XG4gIH1cbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAuaGVhZGVyLmhlYWRlciB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6ICMwNTFDMkM7XG4gIG1hcmdpbi10b3A6IDEuMjVyZW07XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmhlYWRlci5oZWFkZXIgPiAuYXJyb3cuYXJyb3cge1xuICB3aWR0aDogMi4zNzVyZW07XG4gIGhlaWdodDogMnJlbTtcbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAuaGVhZGVyLmhlYWRlciA+IC5hcnJvdy5hcnJvdyA+IC5pY29uLmljb24ge1xuICB3aWR0aDogMXJlbTtcbiAgaGVpZ2h0OiAxcmVtO1xufVxuLm1jay1kYXRlLXBpY2tlciA+IC5oZWFkZXIuaGVhZGVyID4gLmFycm93LmFycm93ID4gLm5leHQubmV4dCB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9hcnJvdy1mb3J3YXJkLnN2Z1wiKTtcbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAuaGVhZGVyLmhlYWRlciA+IC5hcnJvdy5hcnJvdyA+IC5wcmV2aW91cy5wcmV2aW91cyB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9hcnJvdy1iYWNrd2FyZC5zdmdcIik7XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLm1vbnRoIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuLm1jay1kYXRlLXBpY2tlciA+IC53ZWVrIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogNTAwO1xuICBjb2xvcjogIzc2NzY3Njtcbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAuYm9keSB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAuYm9keSA+IGRpdiA+IGRpdi5kYXRlID4gLmRvdCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmJvZHkgPiBkaXYgPiBkaXYuZGF0ZS5kaXNhYmxlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBjb2xvcjogIzc2NzY3Njtcbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAuYm9keSA+IGRpdiA+IGRpdi5kYXRlLmFjdGl2ZSB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxRjQwRTY7XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmJvZHkgPiBkaXYgPiBkaXYuZGF0ZS5ub24tbW9udGgge1xuICBjb2xvcjogIzc2NzY3Njtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stc3BhY2VyLWNvbnRlbnQtY29sbGFwc2UtdGFibGV0IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1zcGFjZXItY29udGVudC1jb2xsYXBzZS10YWJsZXQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1zcGFjZXItY29udGVudC1jb2xsYXBzZS10YWJsZXQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkgYW5kIChtYXgtd2lkdGg6IDEwNDhweCkge1xuICAubWNrLXNwYWNlci1jb250ZW50LWNvbGxhcHNlLXRhYmxldCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1zcGFjZXItY29udGVudC1leHBhbmQtbW9iaWxlIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1zcGFjZXItY29udGVudC1leHBhbmQtbW9iaWxlIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4ubWNrLXNwYWNlci1jb250ZW50LWRpdmlkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xufVxuLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsIHtcbiAgYm94LXNoYWRvdzogMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI0U2RTZFNjtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNFNkU2RTY7XG59XG4ubWNrLWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWNrLWV4cGFuZGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDtcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tY2stZXhwYW5kZWQgLm1jay1jb2xsYXBzZS1pY29uIHtcbiAgd2lkdGg6IDI0cHg7XG4gIGhlaWdodDogMjRweDtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwibGlicy91aS9zcmMvbGliL2ljb25zL2NoZXZyb24tY2xvc2Uuc3ZnXCIpO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWNrLWV4cGFuZGVkIC5tY2stY29sbGFwc2UtaWNvbiB7XG4gICAgd2lkdGg6IDQ4cHg7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9jaGV2cm9uLWNsb3NlLWxhcmdlLnN2Z1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWNrLWV4cGFuZGVkIC5tY2stY29sbGFwc2UtaWNvbiB7XG4gICAgd2lkdGg6IDQ4cHg7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9jaGV2cm9uLWNsb3NlLWxhcmdlLnN2Z1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIH1cbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1ib2R5IHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xufVxuLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWJvZHkgPiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ge1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgY29sb3I6IGJsYWNrO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBwYWRkaW5nLWJvdHRvbTogMC41cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWJvZHkgPiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ge1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS42O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWJvZHkgPiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ge1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS42O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtYm9keSA+IC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbi5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtYm9keSA+IC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbi5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIH1cbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsIG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIHtcbiAgcGFkZGluZy1sZWZ0OiAxcmVtO1xuICBwYWRkaW5nLXJpZ2h0OiAxcmVtO1xufVxuLm1jay1leHBhbnNpb24tcGFuZWwgbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgPiBzcGFuLm1hdC1jb250ZW50IHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsIG1hdC1wYW5lbC10aXRsZSB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgY29sb3I6IGJsYWNrO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xufVxuLm1jay1leHBhbnNpb24tcGFuZWwgLm1jay1jb2xsYXBzZS1pY29uIHtcbiAgd2lkdGg6IDI0cHg7XG4gIGhlaWdodDogMjRweDtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwibGlicy91aS9zcmMvbGliL2ljb25zL2NoZXZyb24tb3Blbi5zdmdcIik7XG4gIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbiAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjVzIGVhc2U7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWV4cGFuc2lvbi1wYW5lbCAubWNrLWNvbGxhcHNlLWljb24ge1xuICAgIHdpZHRoOiA0OHB4O1xuICAgIGhlaWdodDogNDhweDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvY2hldnJvbi1vcGVuLWxhcmdlLnN2Z1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWV4cGFuc2lvbi1wYW5lbCAubWNrLWNvbGxhcHNlLWljb24ge1xuICAgIHdpZHRoOiA0OHB4O1xuICAgIGhlaWdodDogNDhweDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvY2hldnJvbi1vcGVuLWxhcmdlLnN2Z1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIH1cbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsIC5tY2stY29sbGFwc2UtaWNvbi5leHBhbmRlZCB7XG4gIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG59XG4ubWNrLWljb24tZmlsbC1vcGVuIHtcbiAgZmlsbDogIzFGNDBFNjtcbn1cbi5tY2staWNvbi1maWxsLWNsb3NlIHtcbiAgZmlsbDogIzc2NzY3Njtcbn1cbi5tY2staWNvbi1maWxsLWJsYWNrIHtcbiAgZmlsbDogYmxhY2s7XG4gIHN0cm9rZTogYmxhY2s7XG59XG4ubWNrLWljb24tZmlsbC13aGl0ZSB7XG4gIGZpbGw6IHdoaXRlO1xuICBzdHJva2U6IHdoaXRlO1xufVxuLm1jay1pY29uLWZpbGwtZ3JheSB7XG4gIGZpbGw6ICMzMzMzMzM7XG4gIHN0cm9rZTogIzMzMzMzMztcbn1cbi5tY2stbWluIHtcbiAgbWF4LXdpZHRoOiA1ODFweCAhaW1wb3J0YW50O1xuICB3aWR0aDogODB2dztcbiAgbWF4LWhlaWdodDogMTAwdmg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLW1pbiB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1pbiAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbWluIHtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICB9XG4gIC5tY2stbWluIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG4ubWNrLW5vZXhwYW5kIHtcbiAgbWF4LXdpZHRoOiA1ODFweCAhaW1wb3J0YW50O1xuICB3aWR0aDogODB2dyAhaW1wb3J0YW50O1xuICBtYXgtaGVpZ2h0OiAxMDB2aDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stbm9leHBhbmQge1xuICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gMzJweCkgIWltcG9ydGFudDtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbm9leHBhbmQge1xuICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gMzJweCkgIWltcG9ydGFudDtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxufVxuLm1jay1tb2RhbCB7XG4gIG1heC13aWR0aDogODAwcHggIWltcG9ydGFudDtcbiAgd2lkdGg6IDgwdnc7XG4gIG1heC1oZWlnaHQ6IDEwMHZoO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1tb2RhbCB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1tb2RhbCB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG4ubWNrLW1vZGFsLW1pbmkge1xuICBtYXgtd2lkdGg6IDU4MHB4ICFpbXBvcnRhbnQ7XG4gIG1heC1oZWlnaHQ6IDEwMHZoO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1tb2RhbC1taW5pIHtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICB9XG4gIC5tY2stbW9kYWwtbWluaSAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwtbWluaSB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsLW1pbmkgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi5tY2stbW9kYWwtc3VydmV5IHtcbiAgbWF4LXdpZHRoOiA2OTFweCAhaW1wb3J0YW50O1xuICBtYXgtaGVpZ2h0OiAxMDB2aDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stbW9kYWwtc3VydmV5IC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1tb2RhbC1zdXJ2ZXkgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi5tY2stbW9kYWwtd2lkZSB7XG4gIG1heC13aWR0aDogMTAyNHB4ICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiAxMDB2dztcbiAgaGVpZ2h0OiA5NXZoO1xuICBtYXgtaGVpZ2h0OiAxMDB2aDtcbn1cbi5tY2stbW9kYWwtd2lkZSAubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0Y4RjlGQTtcbiAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm1jay1tb2RhbC13aWRlIC5tYXQtZGlhbG9nLWNvbnRlbnQgLm1hdC1pY29uLWJ1dHRvbltuYW1lPUNsb3NlQnV0dG9uXSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcmlnaHQ6IDMycHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLW1vZGFsLXdpZGUgLm1hdC1kaWFsb2ctY29udGVudCAubWF0LWljb24tYnV0dG9uW25hbWU9Q2xvc2VCdXR0b25dIC5jbG9zZS1pbWFnZSB7XG4gICAgaGVpZ2h0OiAzMnB4O1xuICAgIHdpZHRoOiAzMnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1tb2RhbC13aWRlIC5tYXQtZGlhbG9nLWNvbnRlbnQgLm1hdC1pY29uLWJ1dHRvbltuYW1lPUNsb3NlQnV0dG9uXSAuY2xvc2UtaW1hZ2Uge1xuICAgIGhlaWdodDogMzJweDtcbiAgICB3aWR0aDogMzJweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1tb2RhbC13aWRlIHtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICB9XG4gIC5tY2stbW9kYWwtd2lkZSAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwtd2lkZSB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsLXdpZGUgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi5tY2stbW9kYWwtd2lkZS1tYW5hZ2UtYm9va2luZyB7XG4gIG1heC13aWR0aDogMTAyNHB4ICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiAxMDB2dztcbiAgbWF4LWhlaWdodDogOTV2aDtcbn1cbi5tY2stbW9kYWwtd2lkZS1tYW5hZ2UtYm9va2luZyAubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0Y4RjlGQTtcbiAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm1jay1tb2RhbC13aWRlLW1hbmFnZS1ib29raW5nIC5tYXQtZGlhbG9nLWNvbnRlbnQgLm1hdC1pY29uLWJ1dHRvbltuYW1lPUNsb3NlQnV0dG9uXSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcmlnaHQ6IDMycHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLW1vZGFsLXdpZGUtbWFuYWdlLWJvb2tpbmcgLm1hdC1kaWFsb2ctY29udGVudCAubWF0LWljb24tYnV0dG9uW25hbWU9Q2xvc2VCdXR0b25dIC5jbG9zZS1pbWFnZSB7XG4gICAgaGVpZ2h0OiAzMnB4O1xuICAgIHdpZHRoOiAzMnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1tb2RhbC13aWRlLW1hbmFnZS1ib29raW5nIC5tYXQtZGlhbG9nLWNvbnRlbnQgLm1hdC1pY29uLWJ1dHRvbltuYW1lPUNsb3NlQnV0dG9uXSAuY2xvc2UtaW1hZ2Uge1xuICAgIGhlaWdodDogMzJweDtcbiAgICB3aWR0aDogMzJweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1tb2RhbC13aWRlLW1hbmFnZS1ib29raW5nIHtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICB9XG4gIC5tY2stbW9kYWwtd2lkZS1tYW5hZ2UtYm9va2luZyAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwtd2lkZS1tYW5hZ2UtYm9va2luZyB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsLXdpZGUtbWFuYWdlLWJvb2tpbmcgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stYWxlcnQge1xuICAgIG1heC13aWR0aDogMTAwdncgIWltcG9ydGFudDtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgbWFyZ2luLWxlZnQ6IDFyZW07XG4gICAgbWFyZ2luLXJpZ2h0OiAxcmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1hbGVydCB7XG4gICAgbWF4LXdpZHRoOiAxMDB2dyAhaW1wb3J0YW50O1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBtYXJnaW4tbGVmdDogMXJlbTtcbiAgICBtYXJnaW4tcmlnaHQ6IDFyZW07XG4gIH1cbn1cbi5tY2stYWxlcnQtYmFja2Ryb3Age1xuICBiYWNrZ3JvdW5kOiByZ2JhKDUsIDI4LCA0NCwgMC44NSk7XG59XG4ubWNrLXNsaWRlLXRvZ2dsZS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkOm5vdCgubWF0LWRpc2FibGVkKSAubWF0LXNsaWRlLXRvZ2dsZS1iYXIubWF0LXNsaWRlLXRvZ2dsZS1iYXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjI1MUZGO1xufVxuLm1jay1zbGlkZS10b2dnbGUubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIubWF0LXNsaWRlLXRvZ2dsZS10aHVtYiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xufVxuLm1jay1zbGlkZS10b2dnbGUubWF0LXNsaWRlLXRvZ2dsZSB7XG4gIGhlaWdodDogYXV0bztcbn1cbi5tY2stc2xpZGUtdG9nZ2xlIC5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnQubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50IHtcbiAgZmxleDogMTtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgLXdlYmtpdC1saW5lLWNsYW1wOiAyO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xufVxuLm1jay1zbGlkZS10b2dnbGUgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIubWF0LXNsaWRlLXRvZ2dsZS10aHVtYiB7XG4gIHdpZHRoOiAxNHB4O1xuICBoZWlnaHQ6IDE0cHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDUwJSwgNTAlKTtcbn1cbi5tY2stc2xpZGUtdG9nZ2xlIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLWNvbnRhaW5lci5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLWNvbnRhaW5lciB7XG4gIHRvcDogLTRweDtcbiAgbGVmdDogLTRweDtcbn1cbi5tY2stc2xpZGUtdG9nZ2xlIC5tYXQtc2xpZGUtdG9nZ2xlLWJhci5tYXQtc2xpZGUtdG9nZ2xlLWJhciB7XG4gIGhlaWdodDogMjBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0QwRDBEMDtcbiAgYm9yZGVyLXJhZGl1czogMjBweDtcbn1cbi5tY2stc2tlbGV0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xufVxuLm1jay1za2VsZXRvbi1jaGVja2JveCB7XG4gIGZsb2F0OiBsZWZ0O1xufVxuLm1jay1za2VsZXRvbi1jaGVja2JveCA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgd2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMjBweDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbi5tY2stc2tlbGV0b24taGVhZGVyID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICB3aWR0aDogMTAwdnc7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIG1heC13aWR0aDogMjE1cHg7XG59XG4ubWNrLXNrZWxldG9uLWltYWdlID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICB3aWR0aDogODFweDtcbiAgaGVpZ2h0OiA4MnB4O1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogODAwcHgpIHtcbiAgLm1jay1za2VsZXRvbi1pbWFnZSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICB3aWR0aDogMjE5cHg7XG4gICAgaGVpZ2h0OiAxMTlweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDEwNDhweCkge1xuICAubWNrLXNrZWxldG9uLWltYWdlID4gLmxvYWRlci5sb2FkZXIge1xuICAgIHdpZHRoOiAyMTlweDtcbiAgICBoZWlnaHQ6IDExOXB4O1xuICB9XG59XG4ubWNrLXNrZWxldG9uLXN0YXR1cyA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgd2lkdGg6IDExN3B4O1xuICBoZWlnaHQ6IDc4cHg7XG4gIG1hcmdpbi10b3A6IDEwcHg7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA4MDBweCkge1xuICAubWNrLXNrZWxldG9uLXN0YXR1cyA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogMTA0OHB4KSB7XG4gIC5tY2stc2tlbGV0b24tc3RhdHVzID4gLmxvYWRlci5sb2FkZXIge1xuICAgIHdpZHRoOiAxMTdweDtcbiAgICBoZWlnaHQ6IDc4cHg7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS0xID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDIzcHg7XG4gIG1heC13aWR0aDogMTc2cHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtMSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDIxOXB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTEgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAyMTlweDtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTIgPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIGhlaWdodDogMThweDtcbiAgbWF4LXdpZHRoOiAxNjVweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS0yID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogMTg5cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtMiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDE4OXB4O1xuICB9XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtMyA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgaGVpZ2h0OiAxOHB4O1xuICBtYXgtd2lkdGg6IDE0N3B4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTMgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAxODlweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS0zID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogMTg5cHg7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS0zMHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTMwcC10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogMzAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTMwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtMzBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAzMCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtMzBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS0zMHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDMwJTtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTMwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS0zMHAtdGhpbi10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDE2cHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbi5tY2stc2tlbGV0b24tbGluZS00NXAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTQ1cC10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogNDUlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTQ1cCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNDVwLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA0NSU7XG4gICAgbWFyZ2luLXJpZ2h0OiA0NSU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtNDVwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS00NXAtdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDQ1JTtcbiAgICBtYXJnaW4tcmlnaHQ6IDQ1JTtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTQ1cC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS00NXAtdGhpbi10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDE2cHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbi5tY2stc2tlbGV0b24tbGluZS01MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTUwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIGhlaWdodDogMThweDtcbiAgbWF4LXdpZHRoOiA1MCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtNTBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogNTAlO1xuICAgIG1hcmdpbi1yaWdodDogNDUlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTUwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTUwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDUwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDQ1JTtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTUwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpbi10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpY2stdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpbi10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaWNrLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDMycHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbi5tY2stc2tlbGV0b24tbGluZS02MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTYwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIGhlaWdodDogMThweDtcbiAgbWF4LXdpZHRoOiA2MCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtNjBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogNjAlO1xuICAgIG1hcmdpbi1yaWdodDogMzUlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTYwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTYwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDYwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDM1JTtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTYwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpbi10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpY2stdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpbi10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaWNrLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDMycHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbi5tY2stc2tlbGV0b24tbGluZS03MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTcwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIGhlaWdodDogMThweDtcbiAgbWF4LXdpZHRoOiA3MCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtNzBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogNzAlO1xuICAgIG1hcmdpbi1yaWdodDogMjUlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTcwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTcwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDcwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDI1JTtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTcwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpbi10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpY2stdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpbi10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaWNrLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDMycHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbi5tY2stc2tlbGV0b24tbGluZS04MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTgwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIGhlaWdodDogMThweDtcbiAgbWF4LXdpZHRoOiA4MCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtODBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogODAlO1xuICAgIG1hcmdpbi1yaWdodDogMTUlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTgwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTgwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDgwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDE1JTtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTgwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpbi10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpY2stdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpbi10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaWNrLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDMycHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbi5tY2stc2tlbGV0b24tbGluZS05MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTkwcC10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogOTAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTkwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtOTBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA5MCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtOTBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS05MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDkwJTtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTkwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS05MHAtdGhpbi10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDE2cHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbi5tY2stc2tlbGV0b24tbG9hZC1tb3JlID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBtYXJnaW4tdG9wOiAwLjVyZW07XG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbiAgd2lkdGg6IGNhbGMoMTAwdncgLSAoMiAqIDFyZW0pKTtcbiAgaGVpZ2h0OiA0MHB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1sb2FkLW1vcmUgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAzMjBweDtcbiAgICBoZWlnaHQ6IDUwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXNrZWxldG9uLWxvYWQtbW9yZSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDMyMHB4O1xuICAgIGhlaWdodDogNTBweDtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1sb2FkLW1vcmUtMTAwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWhlYWRlciA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLXJvb20tYXZhaWxhYmlsaXR5ID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBtYXJnaW4tdG9wOiAwLjVyZW07XG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbiAgd2lkdGg6IGNhbGMoMTAwdncgLSAoMiAqIDFyZW0pKTtcbiAgaGVpZ2h0OiA0MHB4O1xuICBtYXgtd2lkdGg6IG5vbmU7XG4gIHdpZHRoOiAxMDAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1sb2FkLW1vcmUtMTAwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWhlYWRlciA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLXJvb20tYXZhaWxhYmlsaXR5ID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDUwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXNrZWxldG9uLWxvYWQtbW9yZS0xMDBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24taGVhZGVyID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tcm9vbS1hdmFpbGFiaWxpdHkgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiBub25lO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogNTBweDtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1sb2FkLW1vcmUtMTAwcCA+IC5sb2FkZXIubG9hZGVyLXJvb20tYXZhaWxhYmlsaXR5ID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24taGVhZGVyID4gLmxvYWRlci5sb2FkZXItcm9vbS1hdmFpbGFiaWxpdHkgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1yb29tLWF2YWlsYWJpbGl0eSA+IC5sb2FkZXIubG9hZGVyLXJvb20tYXZhaWxhYmlsaXR5ID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDEyNHB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG5cbi5tY2staGVhZGluZy01IHtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1zaXplOiAxLjVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjMzMztcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2staGVhZGluZy01IHtcbiAgICBmb250LXNpemU6IDEuNzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMTQyO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1oZWFkaW5nLTUge1xuICAgIGZvbnQtc2l6ZTogMS43NXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xNDI7XG4gIH1cbn1cblxubmd4LW1hdC1zZWxlY3Qtc2VhcmNoIC5tYXQtc2VsZWN0LXNlYXJjaC1uby1lbnRyaWVzLWZvdW5kIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxubmd4LW1hdC1zZWxlY3Qtc2VhcmNoIC5tYXQtc2VsZWN0LXNlYXJjaC1pbnB1dCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbm5neC1tYXQtc2VsZWN0LXNlYXJjaCBidXR0b24ubWF0LWJ1dHRvbi5tYXQtc2VsZWN0LXNlYXJjaC1jbGVhciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IG5vbmU7XG4gIGNvbG9yOiBibGFjaztcbn1cblxuOjotd2Via2l0LXNjcm9sbGJhciB7XG4gIHdpZHRoOiAxNnB4O1xuICBoZWlnaHQ6IDE4cHg7XG59XG5cbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICBoZWlnaHQ6IDEuNXJlbTtcbiAgYm9yZGVyOiA0cHggc29saWQgcmdiYSgwLCAwLCAwLCAwKTtcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzU3NTc1O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IC0xcHggLTFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjA1KSwgaW5zZXQgMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cblxuOjotd2Via2l0LXNjcm9sbGJhci1idXR0b24ge1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBkaXNwbGF5OiBub25lO1xufVxuXG46Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG5oZWFkZXIge1xuICB6LWluZGV4OiAyO1xufVxuXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWItYmxvY2sge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1iLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWItYm90dG9tIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTEwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWItYm90dG9tIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTEwcHg7XG4gIH1cbn1cblxuLm1hcC1maWx0ZXJzLWNvbnRhaW5lciAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgdG9wOiA1cHg7XG59XG4ubWFwLWZpbHRlcnMtY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gIGhlaWdodDogNDhweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG59XG4ubWFwLWZpbHRlcnMtY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICBwYWRkaW5nLXRvcDogMC41cmVtICFpbXBvcnRhbnQ7XG59XG5cbi5vZmZpY2UtbGV2ZWwtcm93IC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVyIHtcbiAgY29sb3I6ICMzMzMzMzM7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5vZmZpY2UtbGV2ZWwtcm93IC5sZWdlbmQtY29udGFpbmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAub2ZmaWNlLWxldmVsLXJvdyAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgIGhlaWdodDogNDVweCAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm9mZmljZS1sZXZlbC1yb3cgLmxlZ2VuZC1jb250YWluZXIgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsIC5vZmZpY2UtbGV2ZWwtcm93IC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgaGVpZ2h0OiA0NXB4ICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi5vZmZpY2UtbGV2ZWwtcm93IC5zZWxlY3QtZGl2aWRlciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB0b3A6IDAgIWltcG9ydGFudDtcbiAgd2lkdGg6IDQ0cHggIWltcG9ydGFudDtcbiAgcmlnaHQ6IC0xMXB4ICFpbXBvcnRhbnQ7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gIGJvcmRlci13aWR0aDogMCAwIDAgMXB4O1xuICBib3JkZXItY29sb3I6ICNjNmM2YzY7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAub2ZmaWNlLWxldmVsLXJvdyAuc2VsZWN0LWRpdmlkZXIge1xuICAgIGhlaWdodDogY2FsYygxMDAlIC0gMXB4KSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm9mZmljZS1sZXZlbC1yb3cgLnNlbGVjdC1kaXZpZGVyIHtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDFweCkgIWltcG9ydGFudDtcbiAgfVxufVxuLm9mZmljZS1sZXZlbC1yb3cgLmRpc2FibGVkIC5zZWxlY3QtZGl2aWRlciB7XG4gIGJhY2tncm91bmQ6ICNGMEYwRjAgIWltcG9ydGFudDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5vZmZpY2UtbGV2ZWwtcm93IC5kaXNhYmxlZCAuc2VsZWN0LWRpdmlkZXIge1xuICAgIGhlaWdodDogY2FsYygxMDAlIC0gMnB4KSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm9mZmljZS1sZXZlbC1yb3cgLmRpc2FibGVkIC5zZWxlY3QtZGl2aWRlciB7XG4gICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAycHgpICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi5vZmZpY2UtbGV2ZWwtcm93IC5kaXNhYmxlZCAuc2VsZWN0LWNoZXZyb24ge1xuICBvcGFjaXR5OiAwLjU7XG4gIG1hcmdpbi1sZWZ0OiAxMHB4O1xufVxuXG4ub2ZmaWNlLWxldmVsLXJvdyAubGVnZW5kLWNvbnRhaW5lciAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwgLm9mZmljZS1sZXZlbC1yb3cgLm1hdC1mb3JtLWZpZWxkLWluZml4LCAubWFwLWNvbnRyb2xzIC5sZWdlbmQtY29udGFpbmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAubWFwLWNvbnRyb2xzIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcbiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnQ7XG59XG5cbi5ib29raW5nLWZvcm0tY29udGFpbmVyIHtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDM0NXB4KTtcbn1cblxuLmJvb2tpbmctZm9ybS1jb250YWluZXIgLm1jay1mb3JtLWlucHV0IG1hdC1sYWJlbCwgLmJvb2tpbmctZm9ybS1jb250YWluZXIgLm1jay1mb3JtLWlucHV0IC5tYXQtcmFkaW8tbGFiZWwtY29udGVudCB7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIiAhaW1wb3J0YW50O1xuICBjb2xvcjogIzMzMzMzMztcbn1cbi5ib29raW5nLWZvcm0tY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dCBpbnB1dCwgLmJvb2tpbmctZm9ybS1jb250YWluZXIgLm1jay1mb3JtLWlucHV0IGlucHV0OjpwbGFjZWhvbGRlciB7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgY29sb3I6ICNCM0IzQjM7XG59XG5cbi5idXR0b24td3JhcHBlciB7XG4gIGZsZXgtYmFzaXM6IDEwMCU7XG4gIGp1c3RpZnktY29udGVudDogZW5kO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgei1pbmRleDogMjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5idXR0b24td3JhcHBlciB7XG4gICAgYm90dG9tOiAtMC41cmVtO1xuICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgcGFkZGluZy10b3A6IDEuNzVyZW07XG4gICAgcGFkZGluZy1ib3R0b206IDEuNzVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAuYnV0dG9uLXdyYXBwZXIge1xuICAgIGJvdHRvbTogLTAuNXJlbTtcbiAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgIHBhZGRpbmctdG9wOiAxLjc1cmVtO1xuICAgIHBhZGRpbmctYm90dG9tOiAxLjc1cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYnV0dG9uLXdyYXBwZXIuaGFzLWZpeGVkIHtcbiAgICB6LWluZGV4OiAyO1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5idXR0b24td3JhcHBlci5oYXMtZml4ZWQge1xuICAgIHotaW5kZXg6IDI7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuICB9XG59XG4uYnV0dG9uLXdyYXBwZXItc3BhY2VyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5idXR0b24td3JhcHBlciA+IC5idXR0b24tcm93IHtcbiAgICBwYWRkaW5nOiAxcmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJ1dHRvbi13cmFwcGVyID4gLmJ1dHRvbi1yb3cge1xuICAgIHBhZGRpbmc6IDFyZW07XG4gIH1cbn1cblxuLm1jay1tb2RhbC1wcmltYXJ5LWJ1dHRvbiB7XG4gIGZsZXg6IDE7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW46IDAgMC43NXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwtcHJpbWFyeS1idXR0b24ge1xuICAgIG1heC13aWR0aDogMzIwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAxMDQ4cHgpIHtcbiAgLm1jay1tb2RhbC1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgbWF4LXdpZHRoOiAzMjBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1tb2RhbC1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLW1vZGFsLXByaW1hcnktYnV0dG9uIHtcbiAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgfVxufVxuXG4ubWNrLW1vZGFsLXNlY29uZGFyeS1idXR0b24ge1xuICBmbGV4OiAxO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwIDAuNzVyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA4MDBweCkge1xuICAubWNrLW1vZGFsLXNlY29uZGFyeS1idXR0b24ge1xuICAgIG1heC13aWR0aDogMzIwcHg7XG4gICAgbWFyZ2luLXJpZ2h0OiAwIDAuNzVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAxMDQ4cHgpIHtcbiAgLm1jay1tb2RhbC1zZWNvbmRhcnktYnV0dG9uIHtcbiAgICBtYXgtd2lkdGg6IDMyMHB4O1xuICAgIG1hcmdpbi1yaWdodDogMCAwLjc1cmVtO1xuICB9XG59XG5cbi5zbWFsbC1idXR0b25zIC5tY2stbW9kYWwtcHJpbWFyeS1idXR0b24ge1xuICBmbGV4OiAxO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwIDAuNzVyZW07XG4gIG1heC13aWR0aDogMTM0cHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuc21hbGwtYnV0dG9ucyAubWNrLW1vZGFsLXByaW1hcnktYnV0dG9uIHtcbiAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5zbWFsbC1idXR0b25zIC5tY2stbW9kYWwtcHJpbWFyeS1idXR0b24ge1xuICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICB9XG59XG4uc21hbGwtYnV0dG9ucyAubWNrLW1vZGFsLXNlY29uZGFyeS1idXR0b24ge1xuICBmbGV4OiAxO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwIDAuNzVyZW07XG4gIG1heC13aWR0aDogMTM0cHg7XG4gIG1hcmdpbi1yaWdodDogMCAwLjc1cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLnNtYWxsLWJ1dHRvbnMgLm1jay1tb2RhbC1zZWNvbmRhcnktYnV0dG9uIHtcbiAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5zbWFsbC1idXR0b25zIC5tY2stbW9kYWwtc2Vjb25kYXJ5LWJ1dHRvbiB7XG4gICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gIH1cbn0iLCJAaW1wb3J0IFwidmFyc1wiO1xuXG5AbWl4aW4gcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkc2l6ZSwgJHF1YWxpZmllcikge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQGlmICgkcXVhbGlmaWVyID09IG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2UgaWYgKCRxdWFsaWZpZXIgPT0gbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1heC13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuQG1peGluIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkbWluLCAkbWF4KSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyB0aGlzIGlzIGEgY29weSBvZiByZXNwb25kLXRvLiB3ZSBkb24ndCB3YW50IHRvIHByZXNlcnZlIHRoYXQgbWV0aG9kIHNpbmNlIHRoZSBicmVha3BvaW50cyBtYXkgZGl2ZXJnZSBmcm9tIHRoZSBvbGQgVUkuXG5AbWl4aW4gaXMtc2NyZWVuLXNpemUoJG1lZGlhOiBhbGwsICRvcmllbnRhdGlvbjogbm9uZSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5cbkBtaXhpbiBwYWdlLXBhZGRpbmcge1xuICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctc21hbGw7XG4gICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctc21hbGw7XG59XG5cbi8vIEZvbnQgTWl4aW5zXG4kZm9udC1tY2tpbnNleS1zYW5zOiBcIk1jS2luc2V5IFNhbnNcIjtcbiRmb250LXRoZWluaGFyZHQ6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuJGZvbnQtYm93ZXI6IFwiQm93ZXJcIjtcblxuQG1peGluIGJvd2VyLWJvbGQge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1ib3dlcjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gbWNraW5zZXktc2FucyB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIGRpc3BsYXktMSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNHJlbTsgLy8gNjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODc7IC8vIDc2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTIge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTMge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2MHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNCB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDNyZW07IC8vIDQ4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNjY7IC8vIDU2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjRweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMwcHhcbiAgICBsaW5lLWhlaWdodDogMS44MzM7IC8vIDM0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY0MjsgLy8gNDBweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0xIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNDhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNzVyZW07IC8vIDQ0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA1MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0yIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjExMTsgLy8gNDRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDQ4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTMge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMjI7IC8vIDQ0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTUge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTYge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTU7IC8vIDI4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBib2R5LWRlZmF1bHQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjZweFxuICAgIH1cbn1cblxuLy8vIERvZXNudCBleGlzdCBpbiBNRFMuXG5AbWl4aW4gYm9keS10aW55IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTsgLy8gMTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDIwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBmb3JtLWxhYmVsIHtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC10aGVpbmhhcmR0O1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBjb2xvcjogJHBsYWNlaG9sZGVyLWNvbG9yO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG59XG5cbkBtaXhpbiBjaGlwLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gY2hlY2tib3gtbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICBjb2xvcjogYmxhY2s7XG59XG5cbi8vIGJvcmRlcnNcblxuQG1peGluIG1jay1jaGVja2JveC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stdGhpbi1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYm9yZGVyLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQtbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlci1saWdodDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cblxuLy8gZnVuY3Rpb25zXG5cbi8qKlxuICogTWFrZXMgdGV4dCBoYXZlIG1heGltdW0gbGluZXMgd2l0aCBlbGxpcHNpcy4gV29ya3Mgb24gbW9zdCBtb2Rlcm4gYnJvd3NlcnMgZXhjZXB0XG4gKiBvZiBGaXJlZm94Li5cbiAqL1xuQG1peGluIG1heC1saW5lcygkY291bnQpIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIC13ZWJraXQtbGluZS1jbGFtcDogJGNvdW50O1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG59XG5cbi8vIGltYWdlc1xuQG1peGluIG1jay1pY29uKCR3aWR0aCwgJGFzc2V0LCAkaGVpZ2h0OiAkd2lkdGgsICAkYXNzZXRQYXRoOiBcImxpYnMvdWkvc3JjL2xpYi9pY29uc1wiLCkge1xuICAgIHdpZHRoOiAkd2lkdGg7XG4gICAgaGVpZ2h0OiAkaGVpZ2h0O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiN7JGFzc2V0UGF0aH0vI3skYXNzZXR9XCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbn1cblxuXG5AbWl4aW4gbWNrLXNtYWxsLWljb24oJG1vYmlsZS1hc3NldCwgJGRlc2t0b3AtYXNzZXQ6ICRtb2JpbGUtYXNzZXQpIHtcbiAgICBAaW5jbHVkZSBtY2staWNvbigxNnB4LCAkYXNzZXQ6ICRtb2JpbGUtYXNzZXQpO1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBAaW5jbHVkZSBtY2staWNvbigyNHB4LCAkYXNzZXQ6ICRkZXNrdG9wLWFzc2V0KTtcbiAgICB9XG59XG5cbi8vIHNrZWxldG9uXG5AbWl4aW4gc2tlbGV0b24tYmcge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1pbWFnZS1zaXplIHtcbiAgICB3aWR0aDogODFweDtcbiAgICBoZWlnaHQ6IDgycHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAyMTlweDtcbiAgICAgICAgaGVpZ2h0OiAxMTlweDtcbiAgICB9XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1zdGF0dXMtc2l6ZSB7XG4gICAgd2lkdGg6IDExN3B4O1xuICAgIGhlaWdodDogNzhweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDExN3B4O1xuICAgICAgICBoZWlnaHQ6IDc4cHg7XG4gICAgfVxufVxuIiwiLy8gSW1wb3J0IGFsbCB0aGUgdGhlbWluZyBmdW5jdGlvbmFsaXR5LlxuLy8gV2Ugd2FudCBvdmVybGF5cyB0byBhbHdheXMgYXBwZWFyIG92ZXIgdXNlciBjb250ZW50LCBzbyBzZXQgYSBiYXNlbGluZVxuLy8gdmVyeSBoaWdoIHotaW5kZXggZm9yIHRoZSBvdmVybGF5IGNvbnRhaW5lciwgd2hpY2ggaXMgd2hlcmUgd2UgY3JlYXRlIHRoZSBuZXdcbi8vIHN0YWNraW5nIGNvbnRleHQgZm9yIGFsbCBvdmVybGF5cy5cbiRjZGstei1pbmRleC1vdmVybGF5LWNvbnRhaW5lcjogMTAwMCAhZGVmYXVsdDtcbiRjZGstei1pbmRleC1vdmVybGF5OiAxMDAwICFkZWZhdWx0O1xuJGNkay16LWluZGV4LW92ZXJsYXktYmFja2Ryb3A6IDEwMDAgIWRlZmF1bHQ7XG5cbi8vIEJhY2tncm91bmQgY29sb3IgZm9yIGFsbCBvZiB0aGUgYmFja2Ryb3BzXG4kY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcC1iYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMzIpICFkZWZhdWx0O1xuXG4vLyBEZWZhdWx0IGJhY2tkcm9wIGFuaW1hdGlvbiBpcyBiYXNlZCBvbiB0aGUgTWF0ZXJpYWwgRGVzaWduIHN3aWZ0LWVhc2Utb3V0LlxuJGJhY2tkcm9wLWFuaW1hdGlvbi1kdXJhdGlvbjogNDAwbXMgIWRlZmF1bHQ7XG4kYmFja2Ryb3AtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSkgIWRlZmF1bHQ7XG5cblxuQG1peGluIGNkay1vdmVybGF5KCkge1xuICAuY2RrLW92ZXJsYXktY29udGFpbmVyLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXIge1xuICAgIC8vIERpc2FibGUgZXZlbnRzIGZyb20gYmVpbmcgY2FwdHVyZWQgb24gdGhlIG92ZXJsYXkgY29udGFpbmVyLlxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuXG4gICAgLy8gVGhlIGNvbnRhaW5lciBzaG91bGQgYmUgdGhlIHNpemUgb2YgdGhlIHZpZXdwb3J0LlxuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuXG4gIC8vIFRoZSBvdmVybGF5LWNvbnRhaW5lciBpcyBhbiBpbnZpc2libGUgZWxlbWVudCB3aGljaCBjb250YWlucyBhbGwgaW5kaXZpZHVhbCBvdmVybGF5cy5cbiAgLmNkay1vdmVybGF5LWNvbnRhaW5lciB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHotaW5kZXg6ICRjZGstei1pbmRleC1vdmVybGF5LWNvbnRhaW5lcjtcblxuICAgICY6ZW1wdHkge1xuICAgICAgLy8gSGlkZSB0aGUgZWxlbWVudCB3aGVuIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgY2hpbGQgbm9kZXMuIFRoaXMgZG9lc24ndFxuICAgICAgLy8gaW5jbHVkZSBvdmVybGF5cyB0aGF0IGhhdmUgYmVlbiBkZXRhY2hlZCwgcmF0aGVyIHRoYW4gZGlzcG9zZWQuXG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdlIHVzZSBhbiBleHRyYSB3cmFwcGVyIGVsZW1lbnQgaW4gb3JkZXIgdG8gdXNlIG1ha2UgdGhlIG92ZXJsYXkgaXRzZWxmIGEgZmxleCBpdGVtLlxuICAvLyBUaGlzIG1ha2VzIGNlbnRlcmluZyB0aGUgb3ZlcmxheSBlYXN5IHdpdGhvdXQgcnVubmluZyBpbnRvIHRoZSBzdWJwaXhlbCByZW5kZXJpbmdcbiAgLy8gcHJvYmxlbXMgdGllZCB0byB1c2luZyBgdHJhbnNmb3JtYCBhbmQgd2l0aG91dCBpbnRlcmZlcmluZyB3aXRoIHRoZSBvdGhlciBwb3NpdGlvblxuICAvLyBzdHJhdGVnaWVzLlxuICAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHotaW5kZXg6ICRjZGstei1pbmRleC1vdmVybGF5O1xuICB9XG5cbiAgLy8gQSBzaW5nbGUgb3ZlcmxheSBwYW5lLlxuICAuY2RrLW92ZXJsYXktcGFuZSB7XG4gICAgLy8gTm90ZTogaXQncyBpbXBvcnRhbnQgZm9yIHRoaXMgb25lIHRvIHN0YXJ0IG9mZiBgYWJzb2x1dGVgLFxuICAgIC8vIGluIG9yZGVyIGZvciB1cyB0byBiZSBhYmxlIHRvIG1lYXN1cmUgaXQgY29ycmVjdGx5LlxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIHotaW5kZXg6ICRjZGstei1pbmRleC1vdmVybGF5O1xuXG4gICAgLy8gRm9yIGNvbm5lY3RlZC1wb3NpdGlvbiBvdmVybGF5cywgd2Ugc2V0IGBkaXNwbGF5OiBmbGV4YCBpblxuICAgIC8vIG9yZGVyIHRvIGZvcmNlIGBtYXgtd2lkdGhgIGFuZCBgbWF4LWhlaWdodGAgdG8gdGFrZSBlZmZlY3QuXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgbWF4LWhlaWdodDogMTAwJTtcbiAgfVxuXG4gIC5jZGstb3ZlcmxheS1iYWNrZHJvcCB7XG4gICAgLy8gVE9ETyhqZWxib3Vybik6IHJldXNlIHNpZGVuYXYgZnVsbHNjcmVlbiBtaXhpbi5cbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuXG4gICAgei1pbmRleDogJGNkay16LWluZGV4LW92ZXJsYXktYmFja2Ryb3A7XG4gICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5ICRiYWNrZHJvcC1hbmltYXRpb24tZHVyYXRpb24gJGJhY2tkcm9wLWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb247XG4gICAgb3BhY2l0eTogMDtcblxuICAgICYuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyB7XG4gICAgICBvcGFjaXR5OiAxO1xuXG4gICAgICAvLyBJbiBoaWdoIGNvbnRyYXN0IG1vZGUgdGhlIHJnYmEgYmFja2dyb3VuZCB3aWxsIGJlY29tZSBzb2xpZCBzbyB3ZSBuZWVkIHRvIGZhbGwgYmFja1xuICAgICAgLy8gdG8gbWFraW5nIGl0IG9wYXF1ZSB1c2luZyBgb3BhY2l0eWAuIE5vdGUgdGhhdCB3ZSBjYW4ndCB1c2UgdGhlIGBjZGstaGlnaC1jb250cmFzdGBcbiAgICAgIC8vIG1peGluLCBiZWNhdXNlIHdlIGNhbid0IG5vcm1hbGl6ZSB0aGUgaW1wb3J0IHBhdGggdG8gdGhlIF9hMTF5LnNjc3MgYm90aCBmb3IgdGhlXG4gICAgICAvLyBzb3VyY2UgYW5kIHdoZW4gdGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkLiBTZWUgIzEwOTA4LlxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpIHtcbiAgICAgICAgb3BhY2l0eTogMC42O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wIHtcbiAgICBiYWNrZ3JvdW5kOiAkY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcC1iYWNrZ3JvdW5kO1xuICB9XG5cbiAgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wIHtcbiAgICAvLyBOb3RlOiBhcyBvZiBGaXJlZm94IDU3LCBoYXZpbmcgdGhlIGJhY2tkcm9wIGJlIGBiYWNrZ3JvdW5kOiBub25lYCB3aWxsIHByZXZlbnQgaXQgZnJvbVxuICAgIC8vIGNhcHR1cmluZyB0aGUgdXNlcidzIG1vdXNlIHNjcm9sbCBldmVudHMuIFNpbmNlIHdlIGFsc28gY2FuJ3QgdXNlIHNvbWV0aGluZyBsaWtlXG4gICAgLy8gYHJnYmEoMCwgMCwgMCwgMClgLCB3ZSB3b3JrIGFyb3VuZCB0aGUgaW5jb25zaXN0ZW5jeSBieSBub3Qgc2V0dGluZyB0aGUgYmFja2dyb3VuZCBhdFxuICAgIC8vIGFsbCBhbmQgdXNpbmcgYG9wYWNpdHlgIHRvIG1ha2UgdGhlIGVsZW1lbnQgdHJhbnNwYXJlbnQuXG4gICAgJiwgJi5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIHtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICB9XG5cbiAgLy8gT3ZlcmxheSBwYXJlbnQgZWxlbWVudCB1c2VkIHdpdGggdGhlIGNvbm5lY3RlZCBwb3NpdGlvbiBzdHJhdGVneS4gVXNlZCB0byBjb25zdHJhaW4gdGhlXG4gIC8vIG92ZXJsYXkgZWxlbWVudCdzIHNpemUgdG8gZml0IHdpdGhpbiB0aGUgdmlld3BvcnQuXG4gIC5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogJGNkay16LWluZGV4LW92ZXJsYXk7XG5cbiAgICAvLyBXZSB1c2UgYGRpc3BsYXk6IGZsZXhgIG9uIHRoaXMgZWxlbWVudCBleGNsdXNpdmVseSBmb3IgY2VudGVyaW5nIGNvbm5lY3RlZCBvdmVybGF5cy5cbiAgICAvLyBXaGVuICpub3QqIGNlbnRlcmluZywgYSB0b3AvbGVmdC9ib3R0b20vcmlnaHQgd2lsbCBiZSBzZXQgd2hpY2ggb3ZlcnJpZGVzIHRoZSBub3JtYWxcbiAgICAvLyBmbGV4IGxheW91dC5cbiAgICBkaXNwbGF5OiBmbGV4O1xuXG4gICAgLy8gV2UgdXNlIHRoZSBgY29sdW1uYCBkaXJlY3Rpb24gaGVyZSB0byBhdm9pZCBzb21lIGZsZXhib3ggaXNzdWVzIGluIEVkZ2VcbiAgICAvLyB3aGVuIHVzaW5nIHRoZSBcImdyb3cgYWZ0ZXIgb3BlblwiIG9wdGlvbnMuXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuICAgIC8vIEFkZCBzb21lIGRpbWVuc2lvbnMgc28gdGhlIGVsZW1lbnQgaGFzIGFuIGBpbm5lclRleHRgIHdoaWNoIHNvbWUgcGVvcGxlIGRlcGVuZCBvbiBpbiB0ZXN0cy5cbiAgICBtaW4td2lkdGg6IDFweDtcbiAgICBtaW4taGVpZ2h0OiAxcHg7XG4gIH1cblxuICAvLyBVc2VkIHdoZW4gZGlzYWJsaW5nIGdsb2JhbCBzY3JvbGxpbmcuXG4gIC5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG5cbiAgICAvLyBOZWNlc3NhcnkgZm9yIHRoZSBjb250ZW50IG5vdCB0byBsb3NlIGl0cyB3aWR0aC4gTm90ZSB0aGF0IHdlJ3JlIHVzaW5nIDEwMCUsIGluc3RlYWQgb2ZcbiAgICAvLyAxMDB2dywgYmVjYXVzZSAxMDB2dyBpbmNsdWRlcyB0aGUgd2lkdGggcGx1cyB0aGUgc2Nyb2xsYmFyLCB3aGVyZWFzIDEwMCUgaXMgdGhlIHdpZHRoXG4gICAgLy8gdGhhdCB0aGUgZWxlbWVudCBoYWQgYmVmb3JlIHdlIG1hZGUgaXQgYGZpeGVkYC5cbiAgICB3aWR0aDogMTAwJTtcblxuICAgIC8vIE5vdGU6IHRoaXMgd2lsbCBhbHdheXMgYWRkIGEgc2Nyb2xsYmFyIHRvIHdoYXRldmVyIGVsZW1lbnQgaXQgaXMgb24sIHdoaWNoIGNhblxuICAgIC8vIHBvdGVudGlhbGx5IHJlc3VsdCBpbiBkb3VibGUgc2Nyb2xsYmFycy4gSXQgc2hvdWxkbid0IGJlIGFuIGlzc3VlLCBiZWNhdXNlIHdlIHdvbid0XG4gICAgLy8gYmxvY2sgc2Nyb2xsaW5nIG9uIGEgcGFnZSB0aGF0IGRvZXNuJ3QgaGF2ZSBhIHNjcm9sbGJhciBpbiB0aGUgZmlyc3QgcGxhY2UuXG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICB9XG59XG5cbkBtaXhpbiBjZGstYTExeSB7XG4gIC5jZGstdmlzdWFsbHktaGlkZGVuIHtcbiAgICBib3JkZXI6IDA7XG4gICAgY2xpcDogcmVjdCgwIDAgMCAwKTtcbiAgICBoZWlnaHQ6IDFweDtcbiAgICBtYXJnaW46IC0xcHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwYWRkaW5nOiAwO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMXB4O1xuXG4gICAgLy8gQXZvaWQgYnJvd3NlcnMgcmVuZGVyaW5nIHRoZSBmb2N1cyByaW5nIGluIHNvbWUgY2FzZXMuXG4gICAgb3V0bGluZTogMDtcblxuICAgIC8vIEF2b2lkIHNvbWUgY2FzZXMgd2hlcmUgdGhlIGJyb3dzZXIgd2lsbCBzdGlsbCByZW5kZXIgdGhlIG5hdGl2ZSBjb250cm9scyAoc2VlICM5MDQ5KS5cbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xuICB9XG59XG5cbi8vLyBFbWl0cyB0aGUgbWl4aW4ncyBjb250ZW50IG5lc3RlZCB1bmRlciBgJHNlbGVjdG9yLWNvbnRleHRgIGlmIGAkc2VsZWN0b3ItY29udGV4dGBcbi8vLyBpcyBub24tZW1wdHkuXG4vLy8gQHBhcmFtIHNlbGVjdG9yLWNvbnRleHQgVGhlIHNlbGVjdG9yIHVuZGVyIHdoaWNoIHRvIG5lc3QgdGhlIG1peGluJ3MgY29udGVudC5cbkBtaXhpbiBfY2RrLW9wdGlvbmFsbHktbmVzdC1jb250ZW50KCRzZWxlY3Rvci1jb250ZXh0KSB7XG4gIEBpZiAoJHNlbGVjdG9yLWNvbnRleHQgPT0gJycpIHtcbiAgICBAY29udGVudDtcbiAgfVxuICBAZWxzZSB7XG4gICAgI3skc2VsZWN0b3ItY29udGV4dH0ge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9XG59XG5cbi8vLyBBcHBsaWVzIHN0eWxlcyBmb3IgdXNlcnMgaW4gaGlnaCBjb250cmFzdCBtb2RlLiBOb3RlIHRoYXQgdGhpcyBvbmx5IGFwcGxpZXNcbi8vLyB0byBNaWNyb3NvZnQgYnJvd3NlcnMuIENocm9tZSBjYW4gYmUgaW5jbHVkZWQgYnkgY2hlY2tpbmcgZm9yIHRoZSBgaHRtbFtoY11gXG4vLy8gYXR0cmlidXRlLCBob3dldmVyIENocm9tZSBoYW5kbGVzIGhpZ2ggY29udHJhc3QgZGlmZmVyZW50bHkuXG4vLy9cbi8vLyBAcGFyYW0gdGFyZ2V0IFdoaWNoIGtpbmQgb2YgaGlnaCBjb250cmFzdCBzZXR0aW5nIHRvIHRhcmdldC4gRGVmYXVsdHMgdG8gYGFjdGl2ZWAsIGNhbiBiZVxuLy8vICAgIGB3aGl0ZS1vbi1ibGFja2Agb3IgYGJsYWNrLW9uLXdoaXRlYC5cbi8vLyBAcGFyYW0gZW5jYXBzdWxhdGlvbiBXaGV0aGVyIHRvIGVtaXQgc3R5bGVzIGZvciB2aWV3IGVuY2Fwc3VsYXRpb24uIFZhbHVlcyBhcmU6XG4vLy8gICAgICogYG9uYCAtIHdvcmtzIGZvciBgRW11bGF0ZWRgLCBgTmF0aXZlYCwgYW5kIGBTaGFkb3dEb21gXG4vLy8gICAgICogYG9mZmAgLSB3b3JrcyBmb3IgYE5vbmVgXG4vLy8gICAgICogYGFueWAgLSB3b3JrcyBmb3IgYWxsIGVuY2Fwc3VsYXRpb24gbW9kZXMgYnkgZW1pdHRpbmcgdGhlIENTUyB0d2ljZSAoZGVmYXVsdCkuXG5AbWl4aW4gY2RrLWhpZ2gtY29udHJhc3QoJHRhcmdldDogYWN0aXZlLCAkZW5jYXBzdWxhdGlvbjogJ2FueScpIHtcbiAgQGlmICgkdGFyZ2V0ICE9ICdhY3RpdmUnIGFuZCAkdGFyZ2V0ICE9ICdibGFjay1vbi13aGl0ZScgYW5kICR0YXJnZXQgIT0gJ3doaXRlLW9uLWJsYWNrJykge1xuICAgIEBlcnJvciAnVW5rbm93biBjZGstaGlnaC1jb250cmFzdCB2YWx1ZSBcIiN7JHRhcmdldH1cIiBwcm92aWRlZC4gJyArXG4gICAgICAgICAgICdBbGxvd2VkIHZhbHVlcyBhcmUgXCJhY3RpdmVcIiwgXCJibGFjay1vbi13aGl0ZVwiLCBhbmQgXCJ3aGl0ZS1vbi1ibGFja1wiJztcbiAgfVxuXG4gIEBpZiAoJGVuY2Fwc3VsYXRpb24gIT0gJ29uJyBhbmQgJGVuY2Fwc3VsYXRpb24gIT0gJ29mZicgYW5kICRlbmNhcHN1bGF0aW9uICE9ICdhbnknKSB7XG4gICAgQGVycm9yICdVbmtub3duIGNkay1oaWdoLWNvbnRyYXN0IGVuY2Fwc3VsYXRpb24gXCIjeyRlbmNhcHN1bGF0aW9ufVwiIHByb3ZpZGVkLiAnICtcbiAgICAgICAgICAgJ0FsbG93ZWQgdmFsdWVzIGFyZSBcIm9uXCIsIFwib2ZmXCIsIGFuZCBcImFueVwiJztcbiAgfVxuXG4gIC8vIElmIHRoZSBzZWxlY3RvciBjb250ZXh0IGhhcyBtdWx0aXBsZSBwYXJ0cywgc3VjaCBhcyBgLnNlY3Rpb24sIC5yZWdpb25gLCBqdXN0IGRvaW5nXG4gIC8vIGAuY2RrLWhpZ2gtY29udHJhc3QteHh4ICN7Jn1gIHdpbGwgb25seSBhcHBseSB0aGUgcGFyZW50IHNlbGVjdG9yIHRvIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZVxuICAvLyBjb250ZXh0LiBXZSBhZGRyZXNzIHRoaXMgYnkgbmVzdGluZyB0aGUgc2VsZWN0b3IgY29udGV4dCB1bmRlciAuY2RrLWhpZ2gtY29udHJhc3QuXG4gIEBhdC1yb290IHtcbiAgICAkc2VsZWN0b3ItY29udGV4dDogI3smfTtcblxuICAgIEBpZiAoJGVuY2Fwc3VsYXRpb24gIT0gJ29uJykge1xuICAgICAgLmNkay1oaWdoLWNvbnRyYXN0LSN7JHRhcmdldH0ge1xuICAgICAgICBAaW5jbHVkZSBfY2RrLW9wdGlvbmFsbHktbmVzdC1jb250ZW50KCRzZWxlY3Rvci1jb250ZXh0KSB7XG4gICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBAaWYgKCRlbmNhcHN1bGF0aW9uICE9ICdvZmYnKSB7XG4gICAgICAuY2RrLWhpZ2gtY29udHJhc3QtI3skdGFyZ2V0fSA6aG9zdCB7XG4gICAgICAgIEBpbmNsdWRlIF9jZGstb3B0aW9uYWxseS1uZXN0LWNvbnRlbnQoJHNlbGVjdG9yLWNvbnRleHQpIHtcbiAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBDb3JlIHN0eWxlcyB0aGF0IGVuYWJsZSBtb25pdG9yaW5nIGF1dG9maWxsIHN0YXRlIG9mIHRleHQgZmllbGRzLlxuQG1peGluIGNkay10ZXh0LWZpZWxkIHtcbiAgLy8gS2V5ZnJhbWVzIHRoYXQgYXBwbHkgbm8gc3R5bGVzLCBidXQgYWxsb3cgdXMgdG8gbW9uaXRvciB3aGVuIGFuIHRleHQgZmllbGQgYmVjb21lcyBhdXRvZmlsbGVkXG4gIC8vIGJ5IHdhdGNoaW5nIGZvciB0aGUgYW5pbWF0aW9uIGV2ZW50cyB0aGF0IGFyZSBmaXJlZCB3aGVuIHRoZXkgc3RhcnQuIE5vdGU6IHRoZSAvKiEqLyBjb21tZW50IGlzXG4gIC8vIG5lZWRlZCB0byBwcmV2ZW50IExpYlNhc3MgZnJvbSBzdHJpcHBpbmcgdGhlIGtleWZyYW1lcyBvdXQuXG4gIC8vIEJhc2VkIG9uOiBodHRwczovL21lZGl1bS5jb20vQGJydW5uL2RldGVjdGluZy1hdXRvZmlsbGVkLWZpZWxkcy1pbi1qYXZhc2NyaXB0LWFlZDU5OGQyNWRhN1xuICBAa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IHsvKiEqL31cbiAgQGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgey8qISovfVxuXG4gIC5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWQ6LXdlYmtpdC1hdXRvZmlsbCB7XG4gICAgLy8gU2luY2UgQ2hyb21lIDgwIHdlIG5lZWQgYSAxbXMgZGVsYXksIG9yIHRoZSBhbmltYXRpb25zdGFydCBldmVudCB3b24ndCBmaXJlLlxuICAgIGFuaW1hdGlvbjogY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zO1xuICB9XG5cbiAgLmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDpub3QoOi13ZWJraXQtYXV0b2ZpbGwpIHtcbiAgICAvLyBTaW5jZSBDaHJvbWUgODAgd2UgbmVlZCBhIDFtcyBkZWxheSwgb3IgdGhlIGFuaW1hdGlvbnN0YXJ0IGV2ZW50IHdvbid0IGZpcmUuXG4gICAgYW5pbWF0aW9uOiBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zO1xuICB9XG5cbiAgLy8gUmVtb3ZlIHRoZSByZXNpemUgaGFuZGxlIG9uIGF1dG9zaXppbmcgdGV4dGFyZWFzLCBiZWNhdXNlIHdoYXRldmVyIGhlaWdodFxuICAvLyB0aGUgdXNlciByZXNpemVkIHRvIHdpbGwgYmUgb3ZlcndyaXR0ZW4gb25jZSB0aGV5IHN0YXJ0IHR5cGluZyBhZ2Fpbi5cbiAgdGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplIHtcbiAgICByZXNpemU6IG5vbmU7XG4gIH1cblxuICAvLyBUaGlzIGNsYXNzIGlzIHRlbXBvcmFyaWx5IGFwcGxpZWQgdG8gdGhlIHRleHRhcmVhIHdoZW4gaXQgaXMgYmVpbmcgbWVhc3VyZWQuIEl0IGlzIGltbWVkaWF0ZWx5XG4gIC8vIHJlbW92ZWQgd2hlbiBtZWFzdXJpbmcgaXMgY29tcGxldGUuIFdlIHVzZSBgIWltcG9ydGFudGAgcnVsZXMgaGVyZSB0byBtYWtlIHN1cmUgdXNlci1zcGVjaWZpZWRcbiAgLy8gcnVsZXMgZG8gbm90IGludGVyZmVyZSB3aXRoIHRoZSBtZWFzdXJlbWVudC5cbiAgdGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZyB7XG4gICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xuICAgIC8vIEhhdmluZyAycHggdG9wIGFuZCBib3R0b20gcGFkZGluZyBzZWVtcyB0byBmaXggYSBidWcgd2hlcmUgQ2hyb21lIGdldHMgYW4gaW5jb3JyZWN0XG4gICAgLy8gbWVhc3VyZW1lbnQuIFdlIGp1c3QgaGF2ZSB0byBhY2NvdW50IGZvciBpdCBsYXRlciBhbmQgc3VidHJhY3QgaXQgb2ZmIHRoZSBmaW5hbCByZXN1bHQuXG4gICAgcGFkZGluZzogMnB4IDAgIWltcG9ydGFudDtcbiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveCAhaW1wb3J0YW50O1xuICB9XG59XG5cbi8vIFVzZWQgdG8gZ2VuZXJhdGUgVUlEcyBmb3Iga2V5ZnJhbWVzIHVzZWQgdG8gY2hhbmdlIHRoZSB0ZXh0IGZpZWxkIGF1dG9maWxsIHN0eWxlcy5cbiRjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci1mcmFtZS1jb3VudDogMDtcblxuLy8gTWl4aW4gdXNlZCB0byBhcHBseSBjdXN0b20gYmFja2dyb3VuZCBhbmQgZm9yZWdyb3VuZCBjb2xvcnMgdG8gYW4gYXV0b2ZpbGxlZCB0ZXh0IGZpZWxkLlxuLy8gQmFzZWQgb246IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI3ODE1NDkvXG4vLyByZW1vdmluZy1pbnB1dC1iYWNrZ3JvdW5kLWNvbG91ci1mb3ItY2hyb21lLWF1dG9jb21wbGV0ZSNhbnN3ZXItMzc0MzIyNjBcbkBtaXhpbiBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvcigkYmFja2dyb3VuZCwgJGZvcmVncm91bmQ6JycpIHtcbiAgQGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci0jeyRjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci1mcmFtZS1jb3VudH0ge1xuICAgIHRvIHtcbiAgICAgIGJhY2tncm91bmQ6ICRiYWNrZ3JvdW5kO1xuICAgICAgQGlmICRmb3JlZ3JvdW5kICE9ICcnIHsgY29sb3I6ICRmb3JlZ3JvdW5kOyB9XG4gICAgfVxuICB9XG5cbiAgJjotd2Via2l0LWF1dG9maWxsIHtcbiAgICBhbmltYXRpb246IGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLSN7JGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLWZyYW1lLWNvdW50fSBib3RoO1xuICB9XG5cbiAgJi5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWQ6LXdlYmtpdC1hdXRvZmlsbCB7XG4gICAgLy8gU2luY2UgQ2hyb21lIDgwIHdlIG5lZWQgYSAxbXMgZGVsYXkgZm9yIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0LCBvciB0aGUgYW5pbWF0aW9uc3RhcnRcbiAgICAvLyBldmVudCB3b24ndCBmaXJlLlxuICAgIGFuaW1hdGlvbjogY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zLFxuICAgICAgICAgICAgICAgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItI3skY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItZnJhbWUtY291bnR9IGJvdGg7XG4gIH1cblxuICAkY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItZnJhbWUtY291bnQ6XG4gICAgICAkY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItZnJhbWUtY291bnQgKyAxICFnbG9iYWw7XG59XG5cblxuLy8gQ29yZSBzdHlsZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBhcHBseSBtYXRlcmlhbCBkZXNpZ24gdHJlYXRtZW50cyB0byBhbnkgZWxlbWVudC5cbi8vIE1lZGlhIHF1ZXJpZXNcbi8vIFRPRE8oam9zZXBocGVycm90dCk6IENoYW5nZSAkbWF0LXhzbWFsbCBhbmQgJG1hdC1zbWFsbCB1c2FnZXMgdG8gcmVseSBvbiBCcmVha3BvaW50T2JzZXJ2ZXIsXG4kbWF0LXhzbWFsbDogJ21heC13aWR0aDogNTk5cHgnO1xuJG1hdC1zbWFsbDogJ21heC13aWR0aDogOTU5cHgnO1xuXG4vLyBUT0RPOiBSZXZpc2l0IGFsbCB6LWluZGljZXMgYmVmb3JlIGJldGFcbi8vIHotaW5kZXggbWFzdGVyIGxpc3RcblxuJHotaW5kZXgtZmFiOiAyMCAhZGVmYXVsdDtcbiR6LWluZGV4LWRyYXdlcjogMTAwICFkZWZhdWx0O1xuXG4vLyBHbG9iYWwgY29uc3RhbnRzXG4kcGk6IDMuMTQxNTkyNjU7XG5cbi8vIFBhZGRpbmcgYmV0d2VlbiBpbnB1dCB0b2dnbGVzIGFuZCB0aGVpciBsYWJlbHNcbiRtYXQtdG9nZ2xlLXBhZGRpbmc6IDhweCAhZGVmYXVsdDtcbi8vIFdpZHRoIGFuZCBoZWlnaHQgb2YgaW5wdXQgdG9nZ2xlc1xuJG1hdC10b2dnbGUtc2l6ZTogMjBweCAhZGVmYXVsdDtcblxuLy8gRWFzaW5nIEN1cnZlc1xuLy8gVE9ETyhqZWxib3Vybik6IGFsbCBvZiB0aGVzZSBuZWVkIHRvIGJlIHJldmlzaXRlZFxuXG4vLyBUaGUgZGVmYXVsdCBhbmltYXRpb24gY3VydmVzIHVzZWQgYnkgbWF0ZXJpYWwgZGVzaWduLlxuJG1hdC1saW5lYXItb3V0LXNsb3ctaW4tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpICFkZWZhdWx0O1xuJG1hdC1mYXN0LW91dC1zbG93LWluLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSAhZGVmYXVsdDtcbiRtYXQtZmFzdC1vdXQtbGluZWFyLWluLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMSwgMSkgIWRlZmF1bHQ7XG5cbiRlYXNlLWluLW91dC1jdXJ2ZS1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpICFkZWZhdWx0O1xuXG4kc3dpZnQtZWFzZS1vdXQtZHVyYXRpb246IDQwMG1zICFkZWZhdWx0O1xuJHN3aWZ0LWVhc2Utb3V0LXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSkgIWRlZmF1bHQ7XG4kc3dpZnQtZWFzZS1vdXQ6IGFsbCAkc3dpZnQtZWFzZS1vdXQtZHVyYXRpb24gJHN3aWZ0LWVhc2Utb3V0LXRpbWluZy1mdW5jdGlvbiAhZGVmYXVsdDtcblxuJHN3aWZ0LWVhc2UtaW4tZHVyYXRpb246IDMwMG1zICFkZWZhdWx0O1xuJHN3aWZ0LWVhc2UtaW4tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC41NSwgMCwgMC41NSwgMC4yKSAhZGVmYXVsdDtcbiRzd2lmdC1lYXNlLWluOiBhbGwgJHN3aWZ0LWVhc2UtaW4tZHVyYXRpb24gJHN3aWZ0LWVhc2UtaW4tdGltaW5nLWZ1bmN0aW9uICFkZWZhdWx0O1xuXG4kc3dpZnQtZWFzZS1pbi1vdXQtZHVyYXRpb246IDUwMG1zICFkZWZhdWx0O1xuJHN3aWZ0LWVhc2UtaW4tb3V0LXRpbWluZy1mdW5jdGlvbjogJGVhc2UtaW4tb3V0LWN1cnZlLWZ1bmN0aW9uICFkZWZhdWx0O1xuJHN3aWZ0LWVhc2UtaW4tb3V0OiBhbGwgJHN3aWZ0LWVhc2UtaW4tb3V0LWR1cmF0aW9uICRzd2lmdC1lYXNlLWluLW91dC10aW1pbmctZnVuY3Rpb24gIWRlZmF1bHQ7XG5cbiRzd2lmdC1saW5lYXItZHVyYXRpb246IDgwbXMgIWRlZmF1bHQ7XG4kc3dpZnQtbGluZWFyLXRpbWluZy1mdW5jdGlvbjogbGluZWFyICFkZWZhdWx0O1xuJHN3aWZ0LWxpbmVhcjogYWxsICRzd2lmdC1saW5lYXItZHVyYXRpb24gJHN3aWZ0LWxpbmVhci10aW1pbmctZnVuY3Rpb24gIWRlZmF1bHQ7XG5cblxuXG4vLyBBIGNvbGxlY3Rpb24gb2YgbWl4aW5zIGFuZCBDU1MgY2xhc3NlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGFwcGx5IGVsZXZhdGlvbiB0byBhIG1hdGVyaWFsXG4vLyBlbGVtZW50LlxuLy8gU2VlOiBodHRwczovL21hdGVyaWFsLmlvL2Rlc2lnbi9lbnZpcm9ubWVudC9lbGV2YXRpb24uaHRtbFxuLy8gRXhhbXBsZXM6XG4vL1xuLy9cbi8vIC5tYXQtZm9vIHtcbi8vICAgQGluY2x1ZGUgJG1hdC1lbGV2YXRpb24oMik7XG4vL1xuLy8gICAmOmFjdGl2ZSB7XG4vLyAgICAgQGluY2x1ZGUgJG1hdC1lbGV2YXRpb24oOCk7XG4vLyAgIH1cbi8vIH1cbi8vXG4vLyA8ZGl2IGlkPVwiZXh0ZXJuYWwtY2FyZFwiIGNsYXNzPVwibWF0LWVsZXZhdGlvbi16MlwiPjxwPlNvbWUgY29udGVudDwvcD48L2Rpdj5cbi8vXG4vLyBGb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIGRlc2lnbiBiZWhpbmQgaG93IGVsZXZhdGlvbiBpcyBpbXBsZW1lbnRlZCwgc2VlIHRoZSBkZXNpZ24gZG9jIGF0XG4vLyBodHRwczovL2dvby5nbC9LcTBrOVouXG5cbi8vIENvbG9ycyBmb3IgdW1icmEsIHBlbnVtYnJhLCBhbmQgYW1iaWVudCBzaGFkb3dzLiBBcyBkZXNjcmliZWQgaW4gdGhlIGRlc2lnbiBkb2MsIGVhY2ggZWxldmF0aW9uXG4vLyBsZXZlbCBpcyBjcmVhdGVkIHVzaW5nIGEgc2V0IG9mIDMgc2hhZG93IHZhbHVlcywgb25lIGZvciB1bWJyYSAodGhlIHNoYWRvdyByZXByZXNlbnRpbmcgdGhlXG4vLyBzcGFjZSBjb21wbGV0ZWx5IG9ic2N1cmVkIGJ5IGFuIG9iamVjdCByZWxhdGl2ZSB0byBpdHMgbGlnaHQgc291cmNlKSwgb25lIGZvciBwZW51bWJyYSAodGhlXG4vLyBzcGFjZSBwYXJ0aWFsbHkgb2JzY3VyZWQgYnkgYW4gb2JqZWN0KSwgYW5kIG9uZSBmb3IgYW1iaWVudCAodGhlIHNwYWNlIHdoaWNoIGNvbnRhaW5zIHRoZSBvYmplY3Rcbi8vIGl0c2VsZikuIEZvciBhIGZ1cnRoZXIgZXhwbGFuYXRpb24gb2YgdGhlc2UgdGVybXMgYW5kIHRoZWlyIG1lYW5pbmdzLCBzZWVcbi8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VtYnJhLF9wZW51bWJyYV9hbmRfYW50dW1icmEuXG5cbi8vIE1hcHMgZm9yIHRoZSBkaWZmZXJlbnQgc2hhZG93IHNldHMgYW5kIHRoZWlyIHZhbHVlcyB3aXRoaW4gZWFjaCB6LXNwYWNlLiBUaGVzZSB2YWx1ZXMgd2VyZVxuLy8gY3JlYXRlZCBieSB0YWtpbmcgYSBmZXcgcmVmZXJlbmNlIHNoYWRvdyBzZXRzIGNyZWF0ZWQgYnkgR29vZ2xlJ3MgRGVzaWduZXJzIGFuZCBpbnRlcnBvbGF0aW5nXG4vLyBhbGwgb2YgdGhlIHZhbHVlcyBiZXR3ZWVuIHRoZW0uXG5cbkBmdW5jdGlvbiBfZ2V0LXVtYnJhLW1hcCgkY29sb3IsICRvcGFjaXR5KSB7XG4gICRzaGFkb3ctY29sb3I6IGlmKHR5cGUtb2YoJGNvbG9yKSA9PSBjb2xvciwgcmdiYSgkY29sb3IsICRvcGFjaXR5ICogMC4yKSwgJGNvbG9yKTtcblxuICBAcmV0dXJuIChcbiAgICAwOiAnMHB4IDBweCAwcHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE6ICcwcHggMnB4IDFweCAtMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDI6ICcwcHggM3B4IDFweCAtMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDM6ICcwcHggM3B4IDNweCAtMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDQ6ICcwcHggMnB4IDRweCAtMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDU6ICcwcHggM3B4IDVweCAtMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDY6ICcwcHggM3B4IDVweCAtMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDc6ICcwcHggNHB4IDVweCAtMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDg6ICcwcHggNXB4IDVweCAtM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDk6ICcwcHggNXB4IDZweCAtM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEwOiAnMHB4IDZweCA2cHggLTNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMTogJzBweCA2cHggN3B4IC00cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTI6ICcwcHggN3B4IDhweCAtNHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEzOiAnMHB4IDdweCA4cHggLTRweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNDogJzBweCA3cHggOXB4IC00cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTU6ICcwcHggOHB4IDlweCAtNXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE2OiAnMHB4IDhweCAxMHB4IC01cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTc6ICcwcHggOHB4IDExcHggLTVweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxODogJzBweCA5cHggMTFweCAtNXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE5OiAnMHB4IDlweCAxMnB4IC02cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjA6ICcwcHggMTBweCAxM3B4IC02cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjE6ICcwcHggMTBweCAxM3B4IC02cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjI6ICcwcHggMTBweCAxNHB4IC02cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjM6ICcwcHggMTFweCAxNHB4IC03cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjQ6ICcwcHggMTFweCAxNXB4IC03cHggI3skc2hhZG93LWNvbG9yfSdcbiAgKTtcbn1cblxuQGZ1bmN0aW9uIF9nZXQtcGVudW1icmEtbWFwKCRjb2xvciwgJG9wYWNpdHkpIHtcbiAgJHNoYWRvdy1jb2xvcjogaWYodHlwZS1vZigkY29sb3IpID09IGNvbG9yLCByZ2JhKCRjb2xvciwgJG9wYWNpdHkgKiAwLjE0KSwgJGNvbG9yKTtcblxuICBAcmV0dXJuIChcbiAgICAwOiAnMHB4IDBweCAwcHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE6ICcwcHggMXB4IDFweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjogJzBweCAycHggMnB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAzOiAnMHB4IDNweCA0cHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDQ6ICcwcHggNHB4IDVweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNTogJzBweCA1cHggOHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA2OiAnMHB4IDZweCAxMHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA3OiAnMHB4IDdweCAxMHB4IDFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA4OiAnMHB4IDhweCAxMHB4IDFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA5OiAnMHB4IDlweCAxMnB4IDFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMDogJzBweCAxMHB4IDE0cHggMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDExOiAnMHB4IDExcHggMTVweCAxcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTI6ICcwcHggMTJweCAxN3B4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMzogJzBweCAxM3B4IDE5cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE0OiAnMHB4IDE0cHggMjFweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTU6ICcwcHggMTVweCAyMnB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNjogJzBweCAxNnB4IDI0cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE3OiAnMHB4IDE3cHggMjZweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTg6ICcwcHggMThweCAyOHB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxOTogJzBweCAxOXB4IDI5cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIwOiAnMHB4IDIwcHggMzFweCAzcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjE6ICcwcHggMjFweCAzM3B4IDNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMjogJzBweCAyMnB4IDM1cHggM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIzOiAnMHB4IDIzcHggMzZweCAzcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjQ6ICcwcHggMjRweCAzOHB4IDNweCAjeyRzaGFkb3ctY29sb3J9J1xuICApO1xufVxuXG5AZnVuY3Rpb24gX2dldC1hbWJpZW50LW1hcCgkY29sb3IsICRvcGFjaXR5KSB7XG4gICRzaGFkb3ctY29sb3I6IGlmKHR5cGUtb2YoJGNvbG9yKSA9PSBjb2xvciwgcmdiYSgkY29sb3IsICRvcGFjaXR5ICogMC4xMiksICRjb2xvcik7XG5cbiAgQHJldHVybiAoXG4gICAgMDogJzBweCAwcHggMHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxOiAnMHB4IDFweCAzcHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDI6ICcwcHggMXB4IDVweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMzogJzBweCAxcHggOHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA0OiAnMHB4IDFweCAxMHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA1OiAnMHB4IDFweCAxNHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA2OiAnMHB4IDFweCAxOHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA3OiAnMHB4IDJweCAxNnB4IDFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA4OiAnMHB4IDNweCAxNHB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA5OiAnMHB4IDNweCAxNnB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMDogJzBweCA0cHggMThweCAzcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTE6ICcwcHggNHB4IDIwcHggM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEyOiAnMHB4IDVweCAyMnB4IDRweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMzogJzBweCA1cHggMjRweCA0cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTQ6ICcwcHggNXB4IDI2cHggNHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE1OiAnMHB4IDZweCAyOHB4IDVweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNjogJzBweCA2cHggMzBweCA1cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTc6ICcwcHggNnB4IDMycHggNXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE4OiAnMHB4IDdweCAzNHB4IDZweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxOTogJzBweCA3cHggMzZweCA2cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjA6ICcwcHggOHB4IDM4cHggN3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIxOiAnMHB4IDhweCA0MHB4IDdweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMjogJzBweCA4cHggNDJweCA3cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjM6ICcwcHggOXB4IDQ0cHggOHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDI0OiAnMHB4IDlweCA0NnB4IDhweCAjeyRzaGFkb3ctY29sb3J9J1xuICApO1xufVxuXG4vLyBUaGUgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgZWxldmF0aW9uIHRyYW5zaXRpb25zLlxuJG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi1kdXJhdGlvbjogMjgwbXMgIWRlZmF1bHQ7XG5cbi8vIFRoZSBkZWZhdWx0IGVhc2luZyB2YWx1ZSBmb3IgZWxldmF0aW9uIHRyYW5zaXRpb25zLlxuJG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ICRtYXQtZmFzdC1vdXQtc2xvdy1pbi10aW1pbmctZnVuY3Rpb247XG5cbi8vIFRoZSBkZWZhdWx0IGNvbG9yIGZvciBlbGV2YXRpb24gc2hhZG93cy5cbiRtYXQtZWxldmF0aW9uLWNvbG9yOiBibGFjayAhZGVmYXVsdDtcblxuLy8gVGhlIGRlZmF1bHQgb3BhY2l0eSBzY2FsaW5nIHZhbHVlIGZvciBlbGV2YXRpb24gc2hhZG93cy5cbiRtYXQtZWxldmF0aW9uLW9wYWNpdHk6IDEgIWRlZmF1bHQ7XG5cbi8vIFByZWZpeCBmb3IgZWxldmF0aW9uLXJlbGF0ZWQgc2VsZWN0b3JzLlxuJF9tYXQtZWxldmF0aW9uLXByZWZpeDogJ21hdC1lbGV2YXRpb24teic7XG5cbi8vIEFwcGxpZXMgdGhlIGNvcnJlY3QgY3NzIHJ1bGVzIHRvIGFuIGVsZW1lbnQgdG8gZ2l2ZSBpdCB0aGUgZWxldmF0aW9uIHNwZWNpZmllZCBieSAkelZhbHVlLlxuLy8gVGhlICR6VmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDI0LlxuQG1peGluIG1hdC1lbGV2YXRpb24oJHpWYWx1ZSwgJGNvbG9yOiAkbWF0LWVsZXZhdGlvbi1jb2xvciwgJG9wYWNpdHk6ICRtYXQtZWxldmF0aW9uLW9wYWNpdHkpIHtcbiAgQGlmIHR5cGUtb2YoJHpWYWx1ZSkgIT0gbnVtYmVyIG9yIG5vdCB1bml0bGVzcygkelZhbHVlKSB7XG4gICAgQGVycm9yICckelZhbHVlIG11c3QgYmUgYSB1bml0bGVzcyBudW1iZXInO1xuICB9XG4gIEBpZiAkelZhbHVlIDwgMCBvciAkelZhbHVlID4gMjQge1xuICAgIEBlcnJvciAnJHpWYWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjQnO1xuICB9XG5cbiAgYm94LXNoYWRvdzogI3ttYXAtZ2V0KF9nZXQtdW1icmEtbWFwKCRjb2xvciwgJG9wYWNpdHkpLCAkelZhbHVlKX0sXG4gICAgICAgICAgICAgICN7bWFwLWdldChfZ2V0LXBlbnVtYnJhLW1hcCgkY29sb3IsICRvcGFjaXR5KSwgJHpWYWx1ZSl9LFxuICAgICAgICAgICAgICAje21hcC1nZXQoX2dldC1hbWJpZW50LW1hcCgkY29sb3IsICRvcGFjaXR5KSwgJHpWYWx1ZSl9O1xufVxuXG5AbWl4aW4gX21hdC10aGVtZS1lbGV2YXRpb24oJHpWYWx1ZSwgJHRoZW1lLCAkb3BhY2l0eTogJG1hdC1lbGV2YXRpb24tb3BhY2l0eSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkZWxldmF0aW9uLWNvbG9yOiBtYXAtZ2V0KCRmb3JlZ3JvdW5kLCBlbGV2YXRpb24pO1xuICAkZWxldmF0aW9uLWNvbG9yLW9yLWRlZmF1bHQ6IGlmKCRlbGV2YXRpb24tY29sb3IgPT0gbnVsbCwgJG1hdC1lbGV2YXRpb24tY29sb3IsICRlbGV2YXRpb24tY29sb3IpO1xuXG4gIEBpbmNsdWRlIG1hdC1lbGV2YXRpb24oJHpWYWx1ZSwgJGVsZXZhdGlvbi1jb2xvci1vci1kZWZhdWx0LCAkb3BhY2l0eSk7XG59XG5cbi8vIEFwcGxpZXMgdGhlIGVsZXZhdGlvbiB0byBhbiBlbGVtZW50IGluIGEgbWFubmVyIHRoYXQgYWxsb3dzXG4vLyBjb25zdW1lcnMgdG8gb3ZlcnJpZGUgaXQgdmlhIHRoZSBNYXRlcmlhbCBlbGV2YXRpb24gY2xhc3Nlcy5cbkBtaXhpbiBtYXQtb3ZlcnJpZGFibGUtZWxldmF0aW9uKFxuICAgICR6VmFsdWUsXG4gICAgJGNvbG9yOiAkbWF0LWVsZXZhdGlvbi1jb2xvcixcbiAgICAkb3BhY2l0eTogJG1hdC1lbGV2YXRpb24tb3BhY2l0eSkge1xuICAmOm5vdChbY2xhc3MqPScjeyRfbWF0LWVsZXZhdGlvbi1wcmVmaXh9J10pIHtcbiAgICBAaW5jbHVkZSBtYXQtZWxldmF0aW9uKCR6VmFsdWUsICRjb2xvciwgJG9wYWNpdHkpO1xuICB9XG59XG5cbkBtaXhpbiBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigkelZhbHVlLCAkdGhlbWUsICRvcGFjaXR5OiAkbWF0LWVsZXZhdGlvbi1vcGFjaXR5KSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRlbGV2YXRpb24tY29sb3I6IG1hcC1nZXQoJGZvcmVncm91bmQsIGVsZXZhdGlvbik7XG4gICRlbGV2YXRpb24tY29sb3Itb3ItZGVmYXVsdDogaWYoJGVsZXZhdGlvbi1jb2xvciA9PSBudWxsLCAkbWF0LWVsZXZhdGlvbi1jb2xvciwgJGVsZXZhdGlvbi1jb2xvcik7XG5cbiAgQGluY2x1ZGUgbWF0LW92ZXJyaWRhYmxlLWVsZXZhdGlvbigkelZhbHVlLCAkZWxldmF0aW9uLWNvbG9yLW9yLWRlZmF1bHQsICRvcGFjaXR5KTtcbn1cblxuLy8gUmV0dXJucyBhIHN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBmb3IgYSB0cmFuc2l0aW9uIHByb3BlcnR5IGZvciBlbGV2YXRpb24uXG4vLyBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgaXMgdXNlZnVsIGluIHNpdHVhdGlvbnMgd2hlcmUgYSBjb21wb25lbnQgbmVlZHMgdG8gdHJhbnNpdGlvblxuLy8gbW9yZSB0aGFuIG9uZSBwcm9wZXJ0eS5cbi8vXG4vLyAuZm9vIHtcbi8vICAgdHJhbnNpdGlvbjogbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLXByb3BlcnR5LXZhbHVlKCksIG9wYWNpdHkgMTAwbXMgZWFzZTtcbi8vIH1cbkBmdW5jdGlvbiBtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tcHJvcGVydHktdmFsdWUoXG4gICAgJGR1cmF0aW9uOiAkbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLWR1cmF0aW9uLFxuICAgICRlYXNpbmc6ICRtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSB7XG4gIEByZXR1cm4gYm94LXNoYWRvdyAjeyRkdXJhdGlvbn0gI3skZWFzaW5nfTtcbn1cblxuLy8gQXBwbGllcyB0aGUgY29ycmVjdCBjc3MgcnVsZXMgbmVlZGVkIHRvIGhhdmUgYW4gZWxlbWVudCB0cmFuc2l0aW9uIGJldHdlZW4gZWxldmF0aW9ucy5cbi8vIFRoaXMgbWl4aW4gc2hvdWxkIGJlIGFwcGxpZWQgdG8gZWxlbWVudHMgd2hvc2UgZWxldmF0aW9uIHZhbHVlcyB3aWxsIGNoYW5nZSBkZXBlbmRpbmcgb24gdGhlaXJcbi8vIGNvbnRleHQgKGUuZy4gd2hlbiBhY3RpdmUgb3IgZGlzYWJsZWQpLlxuLy9cbi8vIE5PVEUodHJhdmlza2F1Zm1hbik6IEJvdGggdGhpcyBtaXhpbiBhbmQgdGhlIGFib3ZlIGZ1bmN0aW9uIHVzZSBkZWZhdWx0IHBhcmFtZXRlcnMgc28gdGhleSBjYW5cbi8vIGJlIHVzZWQgaW4gdGhlIHNhbWUgd2F5IGJ5IGNsaWVudHMuXG5AbWl4aW4gbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uKFxuICAgICRkdXJhdGlvbjogJG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi1kdXJhdGlvbixcbiAgICAkZWFzaW5nOiAkbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikge1xuICB0cmFuc2l0aW9uOiBtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tcHJvcGVydHktdmFsdWUoJGR1cmF0aW9uLCAkZWFzaW5nKTtcbn1cblxuLy8gQ29sb3IgcGFsZXR0ZXMgZnJvbSB0aGUgTWF0ZXJpYWwgRGVzaWduIHNwZWMuXG4vLyBTZWUgaHR0cHM6Ly9tYXRlcmlhbC5pby9kZXNpZ24vY29sb3IvXG4vL1xuLy8gQ29udHJhc3QgY29sb3JzIGFyZSBoYXJkLWNvZGVkIGJlY2F1c2UgaXQgaXMgdG9vIGRpZmZpY3VsdCAocHJvYmFibHkgaW1wb3NzaWJsZSkgdG9cbi8vIGNhbGN1bGF0ZSB0aGVtLiBUaGVzZSBjb250cmFzdCBjb2xvcnMgYXJlIHB1bGxlZCBmcm9tIHRoZSBwdWJsaWMgTWF0ZXJpYWwgRGVzaWduIHNwZWMgc3dhdGNoZXMuXG4vLyBXaGlsZSB0aGUgY29udHJhc3QgY29sb3JzIGluIHRoZSBzcGVjIGFyZSBub3QgcHJlc2NyaXB0aXZlLCB3ZSB1c2UgdGhlbSBmb3IgY29udmVuaWVuY2UuXG5cblxuLy8gQGRlcHJlY2F0ZWQgcmVuYW1lZCB0byAkZGFyay1wcmltYXJ5LXRleHQuXG4vLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wXG4kYmxhY2stODctb3BhY2l0eTogcmdiYShibGFjaywgMC44Nyk7XG4vLyBAZGVwcmVjYXRlZCByZW5hbWVkIHRvICRsaWdodC1wcmltYXJ5LXRleHQuXG4vLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wXG4kd2hpdGUtODctb3BhY2l0eTogcmdiYSh3aGl0ZSwgMC44Nyk7XG4vLyBAZGVwcmVjYXRlZCB1c2UgJGRhcmstW3NlY29uZGFyeS10ZXh0LGRpc2FibGVkLXRleHQsZGl2aWRlcnMsZm9jdXNlZF0gaW5zdGVhZC5cbi8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjBcbiRibGFjay0xMi1vcGFjaXR5OiByZ2JhKGJsYWNrLCAwLjEyKTtcbi8vIEBkZXByZWNhdGVkIHVzZSAkbGlnaHQtW3NlY29uZGFyeS10ZXh0LGRpc2FibGVkLXRleHQsZGl2aWRlcnMsZm9jdXNlZF0gaW5zdGVhZC5cbi8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjBcbiR3aGl0ZS0xMi1vcGFjaXR5OiByZ2JhKHdoaXRlLCAwLjEyKTtcbi8vIEBkZXByZWNhdGVkIHVzZSAkZGFyay1bc2Vjb25kYXJ5LXRleHQsZGlzYWJsZWQtdGV4dCxkaXZpZGVycyxmb2N1c2VkXSBpbnN0ZWFkLlxuLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMFxuJGJsYWNrLTYtb3BhY2l0eTogcmdiYShibGFjaywgMC4wNik7XG4vLyBAZGVwcmVjYXRlZCB1c2UgJGxpZ2h0LVtzZWNvbmRhcnktdGV4dCxkaXNhYmxlZC10ZXh0LGRpdmlkZXJzLGZvY3VzZWRdIGluc3RlYWQuXG4vLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wXG4kd2hpdGUtNi1vcGFjaXR5OiByZ2JhKHdoaXRlLCAwLjA2KTtcblxuJGRhcmstcHJpbWFyeS10ZXh0OiByZ2JhKGJsYWNrLCAwLjg3KTtcbiRkYXJrLXNlY29uZGFyeS10ZXh0OiByZ2JhKGJsYWNrLCAwLjU0KTtcbiRkYXJrLWRpc2FibGVkLXRleHQ6IHJnYmEoYmxhY2ssIDAuMzgpO1xuJGRhcmstZGl2aWRlcnM6IHJnYmEoYmxhY2ssIDAuMTIpO1xuJGRhcmstZm9jdXNlZDogcmdiYShibGFjaywgMC4xMik7XG4kbGlnaHQtcHJpbWFyeS10ZXh0OiB3aGl0ZTtcbiRsaWdodC1zZWNvbmRhcnktdGV4dDogcmdiYSh3aGl0ZSwgMC43KTtcbiRsaWdodC1kaXNhYmxlZC10ZXh0OiByZ2JhKHdoaXRlLCAwLjUpO1xuJGxpZ2h0LWRpdmlkZXJzOiByZ2JhKHdoaXRlLCAwLjEyKTtcbiRsaWdodC1mb2N1c2VkOiByZ2JhKHdoaXRlLCAwLjEyKTtcblxuJG1hdC1yZWQ6IChcbiAgNTA6ICNmZmViZWUsXG4gIDEwMDogI2ZmY2RkMixcbiAgMjAwOiAjZWY5YTlhLFxuICAzMDA6ICNlNTczNzMsXG4gIDQwMDogI2VmNTM1MCxcbiAgNTAwOiAjZjQ0MzM2LFxuICA2MDA6ICNlNTM5MzUsXG4gIDcwMDogI2QzMmYyZixcbiAgODAwOiAjYzYyODI4LFxuICA5MDA6ICNiNzFjMWMsXG4gIEExMDA6ICNmZjhhODAsXG4gIEEyMDA6ICNmZjUyNTIsXG4gIEE0MDA6ICNmZjE3NDQsXG4gIEE3MDA6ICNkNTAwMDAsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1waW5rOiAoXG4gIDUwOiAjZmNlNGVjLFxuICAxMDA6ICNmOGJiZDAsXG4gIDIwMDogI2Y0OGZiMSxcbiAgMzAwOiAjZjA2MjkyLFxuICA0MDA6ICNlYzQwN2EsXG4gIDUwMDogI2U5MWU2MyxcbiAgNjAwOiAjZDgxYjYwLFxuICA3MDA6ICNjMjE4NWIsXG4gIDgwMDogI2FkMTQ1NyxcbiAgOTAwOiAjODgwZTRmLFxuICBBMTAwOiAjZmY4MGFiLFxuICBBMjAwOiAjZmY0MDgxLFxuICBBNDAwOiAjZjUwMDU3LFxuICBBNzAwOiAjYzUxMTYyLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtcHVycGxlOiAoXG4gIDUwOiAjZjNlNWY1LFxuICAxMDA6ICNlMWJlZTcsXG4gIDIwMDogI2NlOTNkOCxcbiAgMzAwOiAjYmE2OGM4LFxuICA0MDA6ICNhYjQ3YmMsXG4gIDUwMDogIzljMjdiMCxcbiAgNjAwOiAjOGUyNGFhLFxuICA3MDA6ICM3YjFmYTIsXG4gIDgwMDogIzZhMWI5YSxcbiAgOTAwOiAjNGExNDhjLFxuICBBMTAwOiAjZWE4MGZjLFxuICBBMjAwOiAjZTA0MGZiLFxuICBBNDAwOiAjZDUwMGY5LFxuICBBNzAwOiAjYWEwMGZmLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1kZWVwLXB1cnBsZTogKFxuICA1MDogI2VkZTdmNixcbiAgMTAwOiAjZDFjNGU5LFxuICAyMDA6ICNiMzlkZGIsXG4gIDMwMDogIzk1NzVjZCxcbiAgNDAwOiAjN2U1N2MyLFxuICA1MDA6ICM2NzNhYjcsXG4gIDYwMDogIzVlMzViMSxcbiAgNzAwOiAjNTEyZGE4LFxuICA4MDA6ICM0NTI3YTAsXG4gIDkwMDogIzMxMWI5MixcbiAgQTEwMDogI2IzODhmZixcbiAgQTIwMDogIzdjNGRmZixcbiAgQTQwMDogIzY1MWZmZixcbiAgQTcwMDogIzYyMDBlYSxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtaW5kaWdvOiAoXG4gIDUwOiAjZThlYWY2LFxuICAxMDA6ICNjNWNhZTksXG4gIDIwMDogIzlmYThkYSxcbiAgMzAwOiAjNzk4NmNiLFxuICA0MDA6ICM1YzZiYzAsXG4gIDUwMDogIzNmNTFiNSxcbiAgNjAwOiAjMzk0OWFiLFxuICA3MDA6ICMzMDNmOWYsXG4gIDgwMDogIzI4MzU5MyxcbiAgOTAwOiAjMWEyMzdlLFxuICBBMTAwOiAjOGM5ZWZmLFxuICBBMjAwOiAjNTM2ZGZlLFxuICBBNDAwOiAjM2Q1YWZlLFxuICBBNzAwOiAjMzA0ZmZlLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1ibHVlOiAoXG4gIDUwOiAjZTNmMmZkLFxuICAxMDA6ICNiYmRlZmIsXG4gIDIwMDogIzkwY2FmOSxcbiAgMzAwOiAjNjRiNWY2LFxuICA0MDA6ICM0MmE1ZjUsXG4gIDUwMDogIzIxOTZmMyxcbiAgNjAwOiAjMWU4OGU1LFxuICA3MDA6ICMxOTc2ZDIsXG4gIDgwMDogIzE1NjVjMCxcbiAgOTAwOiAjMGQ0N2ExLFxuICBBMTAwOiAjODJiMWZmLFxuICBBMjAwOiAjNDQ4YWZmLFxuICBBNDAwOiAjMjk3OWZmLFxuICBBNzAwOiAjMjk2MmZmLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtbGlnaHQtYmx1ZTogKFxuICA1MDogI2UxZjVmZSxcbiAgMTAwOiAjYjNlNWZjLFxuICAyMDA6ICM4MWQ0ZmEsXG4gIDMwMDogIzRmYzNmNyxcbiAgNDAwOiAjMjliNmY2LFxuICA1MDA6ICMwM2E5ZjQsXG4gIDYwMDogIzAzOWJlNSxcbiAgNzAwOiAjMDI4OGQxLFxuICA4MDA6ICMwMjc3YmQsXG4gIDkwMDogIzAxNTc5YixcbiAgQTEwMDogIzgwZDhmZixcbiAgQTIwMDogIzQwYzRmZixcbiAgQTQwMDogIzAwYjBmZixcbiAgQTcwMDogIzAwOTFlYSxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1jeWFuOiAoXG4gIDUwOiAjZTBmN2ZhLFxuICAxMDA6ICNiMmViZjIsXG4gIDIwMDogIzgwZGVlYSxcbiAgMzAwOiAjNGRkMGUxLFxuICA0MDA6ICMyNmM2ZGEsXG4gIDUwMDogIzAwYmNkNCxcbiAgNjAwOiAjMDBhY2MxLFxuICA3MDA6ICMwMDk3YTcsXG4gIDgwMDogIzAwODM4ZixcbiAgOTAwOiAjMDA2MDY0LFxuICBBMTAwOiAjODRmZmZmLFxuICBBMjAwOiAjMThmZmZmLFxuICBBNDAwOiAjMDBlNWZmLFxuICBBNzAwOiAjMDBiOGQ0LFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtdGVhbDogKFxuICA1MDogI2UwZjJmMSxcbiAgMTAwOiAjYjJkZmRiLFxuICAyMDA6ICM4MGNiYzQsXG4gIDMwMDogIzRkYjZhYyxcbiAgNDAwOiAjMjZhNjlhLFxuICA1MDA6ICMwMDk2ODgsXG4gIDYwMDogIzAwODk3YixcbiAgNzAwOiAjMDA3OTZiLFxuICA4MDA6ICMwMDY5NWMsXG4gIDkwMDogIzAwNGQ0MCxcbiAgQTEwMDogI2E3ZmZlYixcbiAgQTIwMDogIzY0ZmZkYSxcbiAgQTQwMDogIzFkZTliNixcbiAgQTcwMDogIzAwYmZhNSxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWdyZWVuOiAoXG4gIDUwOiAjZThmNWU5LFxuICAxMDA6ICNjOGU2YzksXG4gIDIwMDogI2E1ZDZhNyxcbiAgMzAwOiAjODFjNzg0LFxuICA0MDA6ICM2NmJiNmEsXG4gIDUwMDogIzRjYWY1MCxcbiAgNjAwOiAjNDNhMDQ3LFxuICA3MDA6ICMzODhlM2MsXG4gIDgwMDogIzJlN2QzMixcbiAgOTAwOiAjMWI1ZTIwLFxuICBBMTAwOiAjYjlmNmNhLFxuICBBMjAwOiAjNjlmMGFlLFxuICBBNDAwOiAjMDBlNjc2LFxuICBBNzAwOiAjMDBjODUzLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1saWdodC1ncmVlbjogKFxuICA1MDogI2YxZjhlOSxcbiAgMTAwOiAjZGNlZGM4LFxuICAyMDA6ICNjNWUxYTUsXG4gIDMwMDogI2FlZDU4MSxcbiAgNDAwOiAjOWNjYzY1LFxuICA1MDA6ICM4YmMzNGEsXG4gIDYwMDogIzdjYjM0MixcbiAgNzAwOiAjNjg5ZjM4LFxuICA4MDA6ICM1NThiMmYsXG4gIDkwMDogIzMzNjkxZSxcbiAgQTEwMDogI2NjZmY5MCxcbiAgQTIwMDogI2IyZmY1OSxcbiAgQTQwMDogIzc2ZmYwMyxcbiAgQTcwMDogIzY0ZGQxNyxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1saW1lOiAoXG4gIDUwOiAjZjlmYmU3LFxuICAxMDA6ICNmMGY0YzMsXG4gIDIwMDogI2U2ZWU5YyxcbiAgMzAwOiAjZGNlNzc1LFxuICA0MDA6ICNkNGUxNTcsXG4gIDUwMDogI2NkZGMzOSxcbiAgNjAwOiAjYzBjYTMzLFxuICA3MDA6ICNhZmI0MmIsXG4gIDgwMDogIzllOWQyNCxcbiAgOTAwOiAjODI3NzE3LFxuICBBMTAwOiAjZjRmZjgxLFxuICBBMjAwOiAjZWVmZjQxLFxuICBBNDAwOiAjYzZmZjAwLFxuICBBNzAwOiAjYWVlYTAwLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC15ZWxsb3c6IChcbiAgNTA6ICNmZmZkZTcsXG4gIDEwMDogI2ZmZjljNCxcbiAgMjAwOiAjZmZmNTlkLFxuICAzMDA6ICNmZmYxNzYsXG4gIDQwMDogI2ZmZWU1OCxcbiAgNTAwOiAjZmZlYjNiLFxuICA2MDA6ICNmZGQ4MzUsXG4gIDcwMDogI2ZiYzAyZCxcbiAgODAwOiAjZjlhODI1LFxuICA5MDA6ICNmNTdmMTcsXG4gIEExMDA6ICNmZmZmOGQsXG4gIEEyMDA6ICNmZmZmMDAsXG4gIEE0MDA6ICNmZmVhMDAsXG4gIEE3MDA6ICNmZmQ2MDAsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtYW1iZXI6IChcbiAgNTA6ICNmZmY4ZTEsXG4gIDEwMDogI2ZmZWNiMyxcbiAgMjAwOiAjZmZlMDgyLFxuICAzMDA6ICNmZmQ1NGYsXG4gIDQwMDogI2ZmY2EyOCxcbiAgNTAwOiAjZmZjMTA3LFxuICA2MDA6ICNmZmIzMDAsXG4gIDcwMDogI2ZmYTAwMCxcbiAgODAwOiAjZmY4ZjAwLFxuICA5MDA6ICNmZjZmMDAsXG4gIEExMDA6ICNmZmU1N2YsXG4gIEEyMDA6ICNmZmQ3NDAsXG4gIEE0MDA6ICNmZmM0MDAsXG4gIEE3MDA6ICNmZmFiMDAsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtb3JhbmdlOiAoXG4gIDUwOiAjZmZmM2UwLFxuICAxMDA6ICNmZmUwYjIsXG4gIDIwMDogI2ZmY2M4MCxcbiAgMzAwOiAjZmZiNzRkLFxuICA0MDA6ICNmZmE3MjYsXG4gIDUwMDogI2ZmOTgwMCxcbiAgNjAwOiAjZmI4YzAwLFxuICA3MDA6ICNmNTdjMDAsXG4gIDgwMDogI2VmNmMwMCxcbiAgOTAwOiAjZTY1MTAwLFxuICBBMTAwOiAjZmZkMTgwLFxuICBBMjAwOiAjZmZhYjQwLFxuICBBNDAwOiAjZmY5MTAwLFxuICBBNzAwOiAjZmY2ZDAwLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiBibGFjayxcbiAgKVxuKTtcblxuJG1hdC1kZWVwLW9yYW5nZTogKFxuICA1MDogI2ZiZTllNyxcbiAgMTAwOiAjZmZjY2JjLFxuICAyMDA6ICNmZmFiOTEsXG4gIDMwMDogI2ZmOGE2NSxcbiAgNDAwOiAjZmY3MDQzLFxuICA1MDA6ICNmZjU3MjIsXG4gIDYwMDogI2Y0NTExZSxcbiAgNzAwOiAjZTY0YTE5LFxuICA4MDA6ICNkODQzMTUsXG4gIDkwMDogI2JmMzYwYyxcbiAgQTEwMDogI2ZmOWU4MCxcbiAgQTIwMDogI2ZmNmU0MCxcbiAgQTQwMDogI2ZmM2QwMCxcbiAgQTcwMDogI2RkMmMwMCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtYnJvd246IChcbiAgNTA6ICNlZmViZTksXG4gIDEwMDogI2Q3Y2NjOCxcbiAgMjAwOiAjYmNhYWE0LFxuICAzMDA6ICNhMTg4N2YsXG4gIDQwMDogIzhkNmU2MyxcbiAgNTAwOiAjNzk1NTQ4LFxuICA2MDA6ICM2ZDRjNDEsXG4gIDcwMDogIzVkNDAzNyxcbiAgODAwOiAjNGUzNDJlLFxuICA5MDA6ICMzZTI3MjMsXG4gIEExMDA6ICNkN2NjYzgsXG4gIEEyMDA6ICNiY2FhYTQsXG4gIEE0MDA6ICM4ZDZlNjMsXG4gIEE3MDA6ICM1ZDQwMzcsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtZ3JleTogKFxuICA1MDogI2ZhZmFmYSxcbiAgMTAwOiAjZjVmNWY1LFxuICAyMDA6ICNlZWVlZWUsXG4gIDMwMDogI2UwZTBlMCxcbiAgNDAwOiAjYmRiZGJkLFxuICA1MDA6ICM5ZTllOWUsXG4gIDYwMDogIzc1NzU3NSxcbiAgNzAwOiAjNjE2MTYxLFxuICA4MDA6ICM0MjQyNDIsXG4gIDkwMDogIzIxMjEyMSxcbiAgQTEwMDogI2ZmZmZmZixcbiAgQTIwMDogI2VlZWVlZSxcbiAgQTQwMDogI2JkYmRiZCxcbiAgQTcwMDogIzYxNjE2MSxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4vLyBBbGlhcyBmb3IgYWx0ZXJuYXRlIHNwZWxsaW5nLlxuJG1hdC1ncmF5OiAkbWF0LWdyZXk7XG5cbiRtYXQtYmx1ZS1ncmV5OiAoXG4gIDUwOiAjZWNlZmYxLFxuICAxMDA6ICNjZmQ4ZGMsXG4gIDIwMDogI2IwYmVjNSxcbiAgMzAwOiAjOTBhNGFlLFxuICA0MDA6ICM3ODkwOWMsXG4gIDUwMDogIzYwN2Q4YixcbiAgNjAwOiAjNTQ2ZTdhLFxuICA3MDA6ICM0NTVhNjQsXG4gIDgwMDogIzM3NDc0ZixcbiAgOTAwOiAjMjYzMjM4LFxuICBBMTAwOiAjY2ZkOGRjLFxuICBBMjAwOiAjYjBiZWM1LFxuICBBNDAwOiAjNzg5MDljLFxuICBBNzAwOiAjNDU1YTY0LFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbi8vIEFsaWFzIGZvciBhbHRlcm5hdGUgc3BlbGxpbmcuXG4kbWF0LWJsdWUtZ3JheTogJG1hdC1ibHVlLWdyZXk7XG5cblxuLy8gQmFja2dyb3VuZCBwYWxldHRlIGZvciBsaWdodCB0aGVtZXMuXG4kbWF0LWxpZ2h0LXRoZW1lLWJhY2tncm91bmQ6IChcbiAgc3RhdHVzLWJhcjogbWFwX2dldCgkbWF0LWdyZXksIDMwMCksXG4gIGFwcC1iYXI6ICAgIG1hcF9nZXQoJG1hdC1ncmV5LCAxMDApLFxuICBiYWNrZ3JvdW5kOiBtYXBfZ2V0KCRtYXQtZ3JleSwgNTApLFxuICBob3ZlcjogICAgICByZ2JhKGJsYWNrLCAwLjA0KSwgLy8gVE9ETyhrYXJhKTogY2hlY2sgc3R5bGUgd2l0aCBNYXRlcmlhbCBEZXNpZ24gVVhcbiAgY2FyZDogICAgICAgd2hpdGUsXG4gIGRpYWxvZzogICAgIHdoaXRlLFxuICBkaXNhYmxlZC1idXR0b246IHJnYmEoYmxhY2ssIDAuMTIpLFxuICByYWlzZWQtYnV0dG9uOiB3aGl0ZSxcbiAgZm9jdXNlZC1idXR0b246ICRkYXJrLWZvY3VzZWQsXG4gIHNlbGVjdGVkLWJ1dHRvbjogbWFwX2dldCgkbWF0LWdyZXksIDMwMCksXG4gIHNlbGVjdGVkLWRpc2FibGVkLWJ1dHRvbjogbWFwX2dldCgkbWF0LWdyZXksIDQwMCksXG4gIGRpc2FibGVkLWJ1dHRvbi10b2dnbGU6IG1hcF9nZXQoJG1hdC1ncmV5LCAyMDApLFxuICB1bnNlbGVjdGVkLWNoaXA6IG1hcF9nZXQoJG1hdC1ncmV5LCAzMDApLFxuICBkaXNhYmxlZC1saXN0LW9wdGlvbjogbWFwX2dldCgkbWF0LWdyZXksIDIwMCksXG4gIHRvb2x0aXA6IG1hcF9nZXQoJG1hdC1ncmV5LCA3MDApLFxuKTtcblxuLy8gQmFja2dyb3VuZCBwYWxldHRlIGZvciBkYXJrIHRoZW1lcy5cbiRtYXQtZGFyay10aGVtZS1iYWNrZ3JvdW5kOiAoXG4gIHN0YXR1cy1iYXI6IGJsYWNrLFxuICBhcHAtYmFyOiAgICBtYXBfZ2V0KCRtYXQtZ3JleSwgOTAwKSxcbiAgYmFja2dyb3VuZDogIzMwMzAzMCxcbiAgaG92ZXI6ICAgICAgcmdiYSh3aGl0ZSwgMC4wNCksIC8vIFRPRE8oa2FyYSk6IGNoZWNrIHN0eWxlIHdpdGggTWF0ZXJpYWwgRGVzaWduIFVYXG4gIGNhcmQ6ICAgICAgIG1hcF9nZXQoJG1hdC1ncmV5LCA4MDApLFxuICBkaWFsb2c6ICAgICBtYXBfZ2V0KCRtYXQtZ3JleSwgODAwKSxcbiAgZGlzYWJsZWQtYnV0dG9uOiByZ2JhKHdoaXRlLCAwLjEyKSxcbiAgcmFpc2VkLWJ1dHRvbjogbWFwLWdldCgkbWF0LWdyZXksIDgwMCksXG4gIGZvY3VzZWQtYnV0dG9uOiAkbGlnaHQtZm9jdXNlZCxcbiAgc2VsZWN0ZWQtYnV0dG9uOiBtYXBfZ2V0KCRtYXQtZ3JleSwgOTAwKSxcbiAgc2VsZWN0ZWQtZGlzYWJsZWQtYnV0dG9uOiBtYXBfZ2V0KCRtYXQtZ3JleSwgODAwKSxcbiAgZGlzYWJsZWQtYnV0dG9uLXRvZ2dsZTogYmxhY2ssXG4gIHVuc2VsZWN0ZWQtY2hpcDogbWFwX2dldCgkbWF0LWdyZXksIDcwMCksXG4gIGRpc2FibGVkLWxpc3Qtb3B0aW9uOiBibGFjayxcbiAgdG9vbHRpcDogbWFwX2dldCgkbWF0LWdyZXksIDcwMCksXG4pO1xuXG4vLyBGb3JlZ3JvdW5kIHBhbGV0dGUgZm9yIGxpZ2h0IHRoZW1lcy5cbiRtYXQtbGlnaHQtdGhlbWUtZm9yZWdyb3VuZDogKFxuICBiYXNlOiAgICAgICAgICAgICAgYmxhY2ssXG4gIGRpdmlkZXI6ICAgICAgICAgICAkZGFyay1kaXZpZGVycyxcbiAgZGl2aWRlcnM6ICAgICAgICAgICRkYXJrLWRpdmlkZXJzLFxuICBkaXNhYmxlZDogICAgICAgICAgJGRhcmstZGlzYWJsZWQtdGV4dCxcbiAgZGlzYWJsZWQtYnV0dG9uOiAgIHJnYmEoYmxhY2ssIDAuMjYpLFxuICBkaXNhYmxlZC10ZXh0OiAgICAgJGRhcmstZGlzYWJsZWQtdGV4dCxcbiAgZWxldmF0aW9uOiAgICAgICAgIGJsYWNrLFxuICBoaW50LXRleHQ6ICAgICAgICAgJGRhcmstZGlzYWJsZWQtdGV4dCxcbiAgc2Vjb25kYXJ5LXRleHQ6ICAgICRkYXJrLXNlY29uZGFyeS10ZXh0LFxuICBpY29uOiAgICAgICAgICAgICAgcmdiYShibGFjaywgMC41NCksXG4gIGljb25zOiAgICAgICAgICAgICByZ2JhKGJsYWNrLCAwLjU0KSxcbiAgdGV4dDogICAgICAgICAgICAgIHJnYmEoYmxhY2ssIDAuODcpLFxuICBzbGlkZXItbWluOiAgICAgICAgcmdiYShibGFjaywgMC44NyksXG4gIHNsaWRlci1vZmY6ICAgICAgICByZ2JhKGJsYWNrLCAwLjI2KSxcbiAgc2xpZGVyLW9mZi1hY3RpdmU6IHJnYmEoYmxhY2ssIDAuMzgpLFxuKTtcblxuLy8gRm9yZWdyb3VuZCBwYWxldHRlIGZvciBkYXJrIHRoZW1lcy5cbiRtYXQtZGFyay10aGVtZS1mb3JlZ3JvdW5kOiAoXG4gIGJhc2U6ICAgICAgICAgICAgICB3aGl0ZSxcbiAgZGl2aWRlcjogICAgICAgICAgICRsaWdodC1kaXZpZGVycyxcbiAgZGl2aWRlcnM6ICAgICAgICAgICRsaWdodC1kaXZpZGVycyxcbiAgZGlzYWJsZWQ6ICAgICAgICAgICRsaWdodC1kaXNhYmxlZC10ZXh0LFxuICBkaXNhYmxlZC1idXR0b246ICAgcmdiYSh3aGl0ZSwgMC4zKSxcbiAgZGlzYWJsZWQtdGV4dDogICAgICRsaWdodC1kaXNhYmxlZC10ZXh0LFxuICBlbGV2YXRpb246ICAgICAgICAgYmxhY2ssXG4gIGhpbnQtdGV4dDogICAgICAgICAkbGlnaHQtZGlzYWJsZWQtdGV4dCxcbiAgc2Vjb25kYXJ5LXRleHQ6ICAgICRsaWdodC1zZWNvbmRhcnktdGV4dCxcbiAgaWNvbjogICAgICAgICAgICAgIHdoaXRlLFxuICBpY29uczogICAgICAgICAgICAgd2hpdGUsXG4gIHRleHQ6ICAgICAgICAgICAgICB3aGl0ZSxcbiAgc2xpZGVyLW1pbjogICAgICAgIHdoaXRlLFxuICBzbGlkZXItb2ZmOiAgICAgICAgcmdiYSh3aGl0ZSwgMC4zKSxcbiAgc2xpZGVyLW9mZi1hY3RpdmU6IHJnYmEod2hpdGUsIDAuMyksXG4pO1xuXG5cblxuLy8gRm9yIGEgZ2l2ZW4gaHVlIGluIGEgcGFsZXR0ZSwgcmV0dXJuIHRoZSBjb250cmFzdCBjb2xvciBmcm9tIHRoZSBtYXAgb2YgY29udHJhc3QgcGFsZXR0ZXMuXG4vLyBAcGFyYW0gJGNvbG9yLW1hcFxuLy8gQHBhcmFtICRodWVcbkBmdW5jdGlvbiBtYXQtY29udHJhc3QoJHBhbGV0dGUsICRodWUpIHtcbiAgQHJldHVybiBtYXAtZ2V0KG1hcC1nZXQoJHBhbGV0dGUsIGNvbnRyYXN0KSwgJGh1ZSk7XG59XG5cblxuLy8gQ3JlYXRlcyBhIG1hcCBvZiBodWVzIHRvIGNvbG9ycyBmb3IgYSB0aGVtZS4gVGhpcyBpcyB1c2VkIHRvIGRlZmluZSBhIHRoZW1lIHBhbGV0dGUgaW4gdGVybXNcbi8vIG9mIHRoZSBNYXRlcmlhbCBEZXNpZ24gaHVlcy5cbi8vIEBwYXJhbSAkY29sb3ItbWFwXG4vLyBAcGFyYW0gJHByaW1hcnlcbi8vIEBwYXJhbSAkbGlnaHRlclxuQGZ1bmN0aW9uIG1hdC1wYWxldHRlKCRiYXNlLXBhbGV0dGUsICRkZWZhdWx0OiA1MDAsICRsaWdodGVyOiAxMDAsICRkYXJrZXI6IDcwMCwgJHRleHQ6ICRkZWZhdWx0KSB7XG4gICRyZXN1bHQ6IG1hcF9tZXJnZSgkYmFzZS1wYWxldHRlLCAoXG4gICAgZGVmYXVsdDogbWFwLWdldCgkYmFzZS1wYWxldHRlLCAkZGVmYXVsdCksXG4gICAgbGlnaHRlcjogbWFwLWdldCgkYmFzZS1wYWxldHRlLCAkbGlnaHRlciksXG4gICAgZGFya2VyOiBtYXAtZ2V0KCRiYXNlLXBhbGV0dGUsICRkYXJrZXIpLFxuICAgIHRleHQ6IG1hcC1nZXQoJGJhc2UtcGFsZXR0ZSwgJHRleHQpLFxuXG4gICAgZGVmYXVsdC1jb250cmFzdDogbWF0LWNvbnRyYXN0KCRiYXNlLXBhbGV0dGUsICRkZWZhdWx0KSxcbiAgICBsaWdodGVyLWNvbnRyYXN0OiBtYXQtY29udHJhc3QoJGJhc2UtcGFsZXR0ZSwgJGxpZ2h0ZXIpLFxuICAgIGRhcmtlci1jb250cmFzdDogbWF0LWNvbnRyYXN0KCRiYXNlLXBhbGV0dGUsICRkYXJrZXIpXG4gICkpO1xuXG4gIC8vIEZvciBlYWNoIGh1ZSBpbiB0aGUgcGFsZXR0ZSwgYWRkIGEgXCItY29udHJhc3RcIiBjb2xvciB0byB0aGUgbWFwLlxuICBAZWFjaCAkaHVlLCAkY29sb3IgaW4gJGJhc2UtcGFsZXR0ZSB7XG4gICAgJHJlc3VsdDogbWFwX21lcmdlKCRyZXN1bHQsIChcbiAgICAgICcjeyRodWV9LWNvbnRyYXN0JzogbWF0LWNvbnRyYXN0KCRiYXNlLXBhbGV0dGUsICRodWUpXG4gICAgKSk7XG4gIH1cblxuICBAcmV0dXJuICRyZXN1bHQ7XG59XG5cblxuLy8gR2V0cyBhIGNvbG9yIGZyb20gYSB0aGVtZSBwYWxldHRlICh0aGUgb3V0cHV0IG9mIG1hdC1wYWxldHRlKS5cbi8vIFRoZSBodWUgY2FuIGJlIG9uZSBvZiB0aGUgc3RhbmRhcmQgdmFsdWVzICg1MDAsIEE0MDAsIGV0Yy4pLCBvbmUgb2YgdGhlIHRocmVlIHByZWNvbmZpZ3VyZWRcbi8vIGh1ZXMgKGRlZmF1bHQsIGxpZ2h0ZXIsIGRhcmtlciksIG9yIGFueSBvZiB0aGUgYWZvcmVtZW50aW9uZWQgcHJlZml4ZWQgd2l0aCBcIi1jb250cmFzdFwiLlxuLy9cbi8vIEBwYXJhbSAkY29sb3ItbWFwIFRoZSB0aGVtZSBwYWxldHRlIChvdXRwdXQgb2YgbWF0LXBhbGV0dGUpLlxuLy8gQHBhcmFtICRodWUgVGhlIGh1ZSBmcm9tIHRoZSBwYWxldHRlIHRvIHVzZS4gSWYgdGhpcyBpcyBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMSwgaXQgd2lsbFxuLy8gICAgIGJlIHRyZWF0ZWQgYXMgb3BhY2l0eS5cbi8vIEBwYXJhbSAkb3BhY2l0eSBUaGUgYWxwaGEgY2hhbm5lbCB2YWx1ZSBmb3IgdGhlIGNvbG9yLlxuQGZ1bmN0aW9uIG1hdC1jb2xvcigkcGFsZXR0ZSwgJGh1ZTogZGVmYXVsdCwgJG9wYWNpdHk6IG51bGwpIHtcbiAgLy8gSWYgaHVlS2V5IGlzIGEgbnVtYmVyIGJldHdlZW4gemVybyBhbmQgb25lLCB0aGVuIGl0IGFjdHVhbGx5IGNvbnRhaW5zIGFuXG4gIC8vIG9wYWNpdHkgdmFsdWUsIHNvIHJlY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlIGRlZmF1bHQgaHVlIGFuZCB0aGF0IGdpdmVuIG9wYWNpdHkuXG4gIEBpZiB0eXBlLW9mKCRodWUpID09IG51bWJlciBhbmQgJGh1ZSA+PSAwIGFuZCAkaHVlIDw9IDEge1xuICAgIEByZXR1cm4gbWF0LWNvbG9yKCRwYWxldHRlLCBkZWZhdWx0LCAkaHVlKTtcbiAgfVxuXG4gICRjb2xvcjogbWFwLWdldCgkcGFsZXR0ZSwgJGh1ZSk7XG5cbiAgQGlmICh0eXBlLW9mKCRjb2xvcikgIT0gY29sb3IpIHtcbiAgICAvLyBJZiB0aGUgJGNvbG9yIHJlc29sdmVkIHRvIHNvbWV0aGluZyBkaWZmZXJlbnQgZnJvbSBhIGNvbG9yIChlLmcuIGEgQ1NTIHZhcmlhYmxlKSxcbiAgICAvLyB3ZSBjYW4ndCBhcHBseSB0aGUgb3BhY2l0eSBhbnl3YXkgc28gd2UgcmV0dXJuIHRoZSB2YWx1ZSBhcyBpcywgb3RoZXJ3aXNlIFNhc3MgY2FuXG4gICAgLy8gdGhyb3cgYW4gZXJyb3Igb3Igb3V0cHV0IHNvbWV0aGluZyBpbnZhbGlkLlxuICAgIEByZXR1cm4gJGNvbG9yO1xuICB9XG5cbiAgQHJldHVybiByZ2JhKCRjb2xvciwgaWYoJG9wYWNpdHkgPT0gbnVsbCwgb3BhY2l0eSgkY29sb3IpLCAkb3BhY2l0eSkpO1xufVxuXG5cbi8vIENyZWF0ZXMgYSBjb250YWluZXIgb2JqZWN0IGZvciBhIGxpZ2h0IHRoZW1lIHRvIGJlIGdpdmVuIHRvIGluZGl2aWR1YWwgY29tcG9uZW50IHRoZW1lIG1peGlucy5cbkBmdW5jdGlvbiBtYXQtbGlnaHQtdGhlbWUoJHByaW1hcnksICRhY2NlbnQsICR3YXJuOiBtYXQtcGFsZXR0ZSgkbWF0LXJlZCkpIHtcbiAgQHJldHVybiAoXG4gICAgcHJpbWFyeTogJHByaW1hcnksXG4gICAgYWNjZW50OiAkYWNjZW50LFxuICAgIHdhcm46ICR3YXJuLFxuICAgIGlzLWRhcms6IGZhbHNlLFxuICAgIGZvcmVncm91bmQ6ICRtYXQtbGlnaHQtdGhlbWUtZm9yZWdyb3VuZCxcbiAgICBiYWNrZ3JvdW5kOiAkbWF0LWxpZ2h0LXRoZW1lLWJhY2tncm91bmQsXG4gICk7XG59XG5cblxuLy8gQ3JlYXRlcyBhIGNvbnRhaW5lciBvYmplY3QgZm9yIGEgZGFyayB0aGVtZSB0byBiZSBnaXZlbiB0byBpbmRpdmlkdWFsIGNvbXBvbmVudCB0aGVtZSBtaXhpbnMuXG5AZnVuY3Rpb24gbWF0LWRhcmstdGhlbWUoJHByaW1hcnksICRhY2NlbnQsICR3YXJuOiBtYXQtcGFsZXR0ZSgkbWF0LXJlZCkpIHtcbiAgQHJldHVybiAoXG4gICAgcHJpbWFyeTogJHByaW1hcnksXG4gICAgYWNjZW50OiAkYWNjZW50LFxuICAgIHdhcm46ICR3YXJuLFxuICAgIGlzLWRhcms6IHRydWUsXG4gICAgZm9yZWdyb3VuZDogJG1hdC1kYXJrLXRoZW1lLWZvcmVncm91bmQsXG4gICAgYmFja2dyb3VuZDogJG1hdC1kYXJrLXRoZW1lLWJhY2tncm91bmQsXG4gICk7XG59XG5cblxuXG4kbWF0LXJpcHBsZS1jb2xvci1vcGFjaXR5OiAwLjE7XG5cbkBtaXhpbiBtYXQtcmlwcGxlKCkge1xuXG4gIC8vIFRoZSBob3N0IGVsZW1lbnQgb2YgYW4gbWF0LXJpcHBsZSBkaXJlY3RpdmUgc2hvdWxkIGFsd2F5cyBoYXZlIGEgcG9zaXRpb24gb2YgXCJhYnNvbHV0ZVwiIG9yXG4gIC8vIFwicmVsYXRpdmVcIiBzbyB0aGF0IHRoZSByaXBwbGVzIGluc2lkZSBhcmUgY29ycmVjdGx5IHBvc2l0aW9uZWQgcmVsYXRpdmVseSB0byB0aGUgY29udGFpbmVyLlxuICAubWF0LXJpcHBsZSB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgIC8vIEJ5IGRlZmF1bHQsIGV2ZXJ5IHJpcHBsZSBjb250YWluZXIgc2hvdWxkIGhhdmUgcG9zaXRpb246IHJlbGF0aXZlIGluIGZhdm9yIG9mIGNyZWF0aW5nIGFuXG4gICAgLy8gZWFzeSBBUEkgZm9yIGRldmVsb3BlcnMgdXNpbmcgdGhlIE1hdFJpcHBsZSBkaXJlY3RpdmUuXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgLy8gUHJvbW90ZSBjb250YWluZXJzIHRoYXQgaGF2ZSByaXBwbGVzIHRvIGEgbmV3IGxheWVyLiBXZSB3YW50IHRvIHRhcmdldCBgOm5vdCg6ZW1wdHkpYCxcbiAgICAvLyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgYWxsIHJpcHBsZSBjb250YWluZXJzIHRvIGhhdmUgdGhlaXIgb3duIGxheWVyIHNpbmNlIHRoZXkncmUgdXNlZCBpbiBhXG4gICAgLy8gbG90IG9mIHBsYWNlcyBhbmQgdGhlIGxheWVyIGlzIG9ubHkgcmVsZXZhbnQgd2hpbGUgYW5pbWF0aW5nLiBOb3RlIHRoYXQgaWRlYWxseSB3ZSdkIHVzZVxuICAgIC8vIHRoZSBgY29udGFpbmAgcHJvcGVydHkgaGVyZSAoc2VlICMxMzE3NSksIGJlY2F1c2UgYDplbXB0eWAgY2FuIGJlIGJyb2tlbiBieSBoYXZpbmcgZXh0cmFcbiAgICAvLyB0ZXh0IGluc2lkZSB0aGUgZWxlbWVudCwgYnV0IGl0IGlzbid0IHZlcnkgd2VsbCBzdXBwb3J0ZWQgeWV0LlxuICAgICY6bm90KDplbXB0eSkge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkIHtcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgfVxuXG4gIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5cbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5LCB0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XG5cbiAgICAvLyBJbiBoaWdoIGNvbnRyYXN0IG1vZGUgdGhlIHJpcHBsZSBpcyBvcGFxdWUsIGNhdXNpbmcgaXQgdG8gb2JzdHJ1Y3QgdGhlIGNvbnRlbnQuXG4gICAgQGluY2x1ZGUgY2RrLWhpZ2gtY29udHJhc3QoYWN0aXZlLCBvZmYpIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG59XG5cbi8qIFRoZW1lIGZvciB0aGUgcmlwcGxlIGVsZW1lbnRzLiovXG5AbWl4aW4gbWF0LXJpcHBsZS10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcF9nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQtYmFzZTogbWFwX2dldCgkZm9yZWdyb3VuZCwgYmFzZSk7XG5cbiAgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgLy8gSWYgdGhlIHJpcHBsZSBjb2xvciBpcyByZXNvbHZlcyB0byBhIGNvbG9yICp0eXBlKiwgd2UgY2FuIHVzZSBpdCBkaXJlY3RseSwgb3RoZXJ3aXNlXG4gICAgLy8gKGUuZy4gaXQgcmVzb2x2ZXMgdG8gYSBDU1MgdmFyaWFibGUpIHdlIGZhbGwgYmFjayB0byB1c2luZyB0aGUgY29sb3IgYW5kIHNldHRpbmcgYW4gb3BhY2l0eS5cbiAgICBAaWYgKHR5cGUtb2YoJGZvcmVncm91bmQtYmFzZSkgPT0gY29sb3IpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoJGZvcmVncm91bmQtYmFzZSwgJG1hdC1yaXBwbGUtY29sb3Itb3BhY2l0eSk7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRmb3JlZ3JvdW5kLWJhc2U7XG4gICAgICBvcGFjaXR5OiAkbWF0LXJpcHBsZS1jb2xvci1vcGFjaXR5O1xuICAgIH1cbiAgfVxufVxuXG5cblxuLy8gVXRpbGl0eSBmb3IgZmV0Y2hpbmcgYSBuZXN0ZWQgdmFsdWUgZnJvbSBhIHR5cG9ncmFwaHkgY29uZmlnLlxuQGZ1bmN0aW9uIF9tYXQtZ2V0LXR5cGUtdmFsdWUoJGNvbmZpZywgJGxldmVsLCAkbmFtZSkge1xuICBAcmV0dXJuIG1hcC1nZXQobWFwLWdldCgkY29uZmlnLCAkbGV2ZWwpLCAkbmFtZSk7XG59XG5cbi8vIEdldHMgdGhlIGZvbnQgc2l6ZSBmb3IgYSBsZXZlbCBpbnNpZGUgYSB0eXBvZ3JhcGh5IGNvbmZpZy5cbkBmdW5jdGlvbiBtYXQtZm9udC1zaXplKCRjb25maWcsICRsZXZlbCkge1xuICBAcmV0dXJuIF9tYXQtZ2V0LXR5cGUtdmFsdWUoJGNvbmZpZywgJGxldmVsLCBmb250LXNpemUpO1xufVxuXG4vLyBHZXRzIHRoZSBsaW5lIGhlaWdodCBmb3IgYSBsZXZlbCBpbnNpZGUgYSB0eXBvZ3JhcGh5IGNvbmZpZy5cbkBmdW5jdGlvbiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgJGxldmVsKSB7XG4gIEByZXR1cm4gX21hdC1nZXQtdHlwZS12YWx1ZSgkY29uZmlnLCAkbGV2ZWwsIGxpbmUtaGVpZ2h0KTtcbn1cblxuLy8gR2V0cyB0aGUgZm9udCB3ZWlnaHQgZm9yIGEgbGV2ZWwgaW5zaWRlIGEgdHlwb2dyYXBoeSBjb25maWcuXG5AZnVuY3Rpb24gbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsICRsZXZlbCkge1xuICBAcmV0dXJuIF9tYXQtZ2V0LXR5cGUtdmFsdWUoJGNvbmZpZywgJGxldmVsLCBmb250LXdlaWdodCk7XG59XG5cbi8vIEdldHMgdGhlIGxldHRlciBzcGFjaW5nIGZvciBhIGxldmVsIGluc2lkZSBhIHR5cG9ncmFwaHkgY29uZmlnLlxuQGZ1bmN0aW9uIG1hdC1sZXR0ZXItc3BhY2luZygkY29uZmlnLCAkbGV2ZWwpIHtcbiAgQHJldHVybiBfbWF0LWdldC10eXBlLXZhbHVlKCRjb25maWcsICRsZXZlbCwgbGV0dGVyLXNwYWNpbmcpO1xufVxuXG4vLyBHZXRzIHRoZSBmb250LWZhbWlseSBmcm9tIGEgdHlwb2dyYXBoeSBjb25maWcgYW5kIHJlbW92ZXMgdGhlIHF1b3RlcyBhcm91bmQgaXQuXG5AZnVuY3Rpb24gbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsICRsZXZlbDogbnVsbCkge1xuICAkZm9udC1mYW1pbHk6IG1hcC1nZXQoJGNvbmZpZywgZm9udC1mYW1pbHkpO1xuXG4gIEBpZiAkbGV2ZWwgIT0gbnVsbCB7XG4gICAgJGZvbnQtZmFtaWx5OiBfbWF0LWdldC10eXBlLXZhbHVlKCRjb25maWcsICRsZXZlbCwgZm9udC1mYW1pbHkpO1xuICB9XG5cbiAgLy8gR3VhcmQgYWdhaW5zdCB1bnF1b3Rpbmcgbm9uLXN0cmluZyB2YWx1ZXMsIGJlY2F1c2UgaXQncyBkZXByZWNhdGVkLlxuICBAcmV0dXJuIGlmKHR5cGUtb2YoJGZvbnQtZmFtaWx5KSA9PSBzdHJpbmcsIHVucXVvdGUoJGZvbnQtZmFtaWx5KSwgJGZvbnQtZmFtaWx5KTtcbn1cblxuLy8gT3V0cHV0cyB0aGUgc2hvcnRoYW5kIGBmb250YCBDU1MgcHJvcGVydHksIGJhc2VkIG9uIGEgc2V0IG9mIHR5cG9ncmFwaHkgdmFsdWVzLiBGYWxscyBiYWNrIHRvXG4vLyB0aGUgaW5kaXZpZHVhbCBwcm9wZXJ0aWVzIGlmIGEgdmFsdWUgdGhhdCBpc24ndCBhbGxvd2VkIGluIHRoZSBzaG9ydGhhbmQgaXMgcGFzc2VkIGluLlxuQG1peGluIG1hdC10eXBvZ3JhcGh5LWZvbnQtc2hvcnRoYW5kKCRmb250LXNpemUsICRmb250LXdlaWdodCwgJGxpbmUtaGVpZ2h0LCAkZm9udC1mYW1pbHkpIHtcbiAgLy8gSWYgYW55IG9mIHRoZSB2YWx1ZXMgYXJlIHNldCB0byBgaW5oZXJpdGAsIHdlIGNhbid0IHVzZSB0aGUgc2hvcnRoYW5kXG4gIC8vIHNvIHdlIGZhbGwgYmFjayB0byBwYXNzaW5nIGluIHRoZSBpbmRpdmlkdWFsIHByb3BlcnRpZXMuXG4gIEBpZiAoJGZvbnQtc2l6ZSA9PSBpbmhlcml0IG9yXG4gICAgICAgJGZvbnQtd2VpZ2h0ID09IGluaGVyaXQgb3JcbiAgICAgICAkbGluZS1oZWlnaHQgPT0gaW5oZXJpdCBvclxuICAgICAgICRmb250LWZhbWlseSA9PSBpbmhlcml0IG9yXG4gICAgICAgJGZvbnQtc2l6ZSA9PSBudWxsIG9yXG4gICAgICAgJGZvbnQtd2VpZ2h0ID09IG51bGwgb3JcbiAgICAgICAkbGluZS1oZWlnaHQgPT0gbnVsbCBvclxuICAgICAgICRmb250LWZhbWlseSA9PSBudWxsKSB7XG5cbiAgICBmb250LXNpemU6ICRmb250LXNpemU7XG4gICAgZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodDtcbiAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0O1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHk7XG4gIH1cbiAgQGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZSB1c2UgdGhlIHNob3J0aGFuZCBgZm9udGAsIGJlY2F1c2UgaXQncyB0aGUgbGVhc3QgYW1vdW50IG9mIGJ5dGVzLiBOb3RlXG4gICAgLy8gdGhhdCB3ZSBuZWVkIHRvIHVzZSBpbnRlcnBvbGF0aW9uIGZvciBgZm9udC1zaXplL2xpbmUtaGVpZ2h0YCBpbiBvcmRlciB0byBwcmV2ZW50XG4gICAgLy8gU2FzcyBmcm9tIGRpdmlkaW5nIHRoZSB0d28gdmFsdWVzLlxuICAgIGZvbnQ6ICRmb250LXdlaWdodCAjeyRmb250LXNpemV9LyN7JGxpbmUtaGVpZ2h0fSAkZm9udC1mYW1pbHk7XG4gIH1cbn1cblxuLy8gQ29udmVydHMgYSB0eXBvZ3JhcGh5IGxldmVsIGludG8gQ1NTIHN0eWxlcy5cbkBtaXhpbiBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgJGxldmVsKSB7XG4gICRmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgJGxldmVsKTtcbiAgJGZvbnQtd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgJGxldmVsKTtcbiAgJGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgJGxldmVsKTtcbiAgJGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgJGxldmVsKTtcblxuICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1mb250LXNob3J0aGFuZCgkZm9udC1zaXplLCAkZm9udC13ZWlnaHQsICRsaW5lLWhlaWdodCwgJGZvbnQtZmFtaWx5KTtcbiAgbGV0dGVyLXNwYWNpbmc6IG1hdC1sZXR0ZXItc3BhY2luZygkY29uZmlnLCAkbGV2ZWwpO1xufVxuXG5cbkBtaXhpbiBtYXQtb3B0aW9uLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcblxuICAubWF0LW9wdGlvbiB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgICAmOmhvdmVyOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCksXG4gICAgJjpmb2N1czpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIpO1xuICAgIH1cblxuICAgIC8vIEluIG11bHRpcGxlIG1vZGUgdGhlcmUgaXMgYSBjaGVja2JveCB0byBzaG93IHRoYXQgdGhlIG9wdGlvbiBpcyBzZWxlY3RlZC5cbiAgICAmLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3Zlcik7XG4gICAgfVxuXG4gICAgJi5tYXQtYWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIpO1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgfVxuXG4gICAgJi5tYXQtb3B0aW9uLWRpc2FibGVkIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGhpbnQtdGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1wcmltYXJ5IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtYWNjZW50IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIHRleHQpO1xuICB9XG5cbiAgLm1hdC13YXJuIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LW9wdGlvbi10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1vcHRpb24ge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBzdWJoZWFkaW5nLTIpO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtb3B0Z3JvdXAtdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1vcHRncm91cC1sYWJlbCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1vcHRncm91cC1kaXNhYmxlZCAubWF0LW9wdGdyb3VwLWxhYmVsIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBoaW50LXRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtb3B0Z3JvdXAtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtb3B0Z3JvdXAtbGFiZWwge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBib2R5LTIpO1xuICB9XG59XG5cblxuXG5AbWl4aW4gbWF0LXBzZXVkby1jaGVja2JveC10aGVtZSgkdGhlbWUpIHtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG5cbiAgLy8gTk9URSh0cmF2aXNrYXVmbWFuKTogV2hpbGUgdGhlIHNwZWMgY2FsbHMgZm9yIHRyYW5zbHVjZW50IGJsYWNrcy93aGl0ZXMgZm9yIGRpc2FibGVkIGNvbG9ycyxcbiAgLy8gdGhpcyBkb2VzIG5vdCB3b3JrIHdlbGwgd2l0aCBlbGVtZW50cyBsYXllcmVkIG9uIHRvcCBvZiBvbmUgYW5vdGhlci4gVG8gZ2V0IGFyb3VuZCB0aGlzIHdlXG4gIC8vIGJsZW5kIHRoZSBjb2xvcnMgdG9nZXRoZXIgYmFzZWQgb24gdGhlIGJhc2UgY29sb3IgYW5kIHRoZSB0aGVtZSBiYWNrZ3JvdW5kLlxuICAkd2hpdGUtMzBwY3Qtb3BhY2l0eS1vbi1kYXJrOiAjNjg2ODY4O1xuICAkYmxhY2stMjZwY3Qtb3BhY2l0eS1vbi1saWdodDogI2IwYjBiMDtcbiAgJGRpc2FibGVkLWNvbG9yOiBpZigkaXMtZGFyay10aGVtZSwgJHdoaXRlLTMwcGN0LW9wYWNpdHktb24tZGFyaywgJGJsYWNrLTI2cGN0LW9wYWNpdHktb24tbGlnaHQpO1xuICAkY29sb3JlZC1ib3gtc2VsZWN0b3I6ICcubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlJztcblxuICAubWF0LXBzZXVkby1jaGVja2JveCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCksIHNlY29uZGFyeS10ZXh0KTtcblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGJhY2tncm91bmQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkIHtcbiAgICBjb2xvcjogJGRpc2FibGVkLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsXG4gIC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IobWFwLWdldCgkdGhlbWUsIHByaW1hcnkpKTtcbiAgfVxuXG4gIC8vIERlZmF1bHQgdG8gdGhlIGFjY2VudCBjb2xvci4gTm90ZSB0aGF0IHRoZSBwc2V1ZG8gY2hlY2tib3hlcyBhcmUgbWVhbnQgdG8gaW5oZXJpdCB0aGVcbiAgLy8gdGhlbWUgZnJvbSB0aGVpciBwYXJlbnQsIHJhdGhlciB0aGFuIGltcGxlbWVudGluZyB0aGVpciBvd24gdGhlbWluZywgd2hpY2ggaXMgd2h5IHdlXG4gIC8vIGRvbid0IGF0dGFjaCB0byB0aGUgYG1hdC0qYCBjbGFzc2VzLiBBbHNvIG5vdGUgdGhhdCB0aGlzIG5lZWRzIHRvIGJlIGJlbG93IGAubWF0LXByaW1hcnlgXG4gIC8vIGluIG9yZGVyIHRvIGFsbG93IGZvciB0aGUgY29sb3IgdG8gYmUgb3ZlcndyaXR0ZW4gaWYgdGhlIGNoZWNrYm94IGlzIGluc2lkZSBhIHBhcmVudCB0aGF0XG4gIC8vIGhhcyBgbWF0LWFjY2VudGAgYW5kIGlzIHBsYWNlZCBpbnNpZGUgYW5vdGhlciBwYXJlbnQgdGhhdCBoYXMgYG1hdC1wcmltYXJ5YC5cbiAgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxcbiAgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSxcbiAgLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxcbiAgLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpKTtcbiAgfVxuXG4gIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLFxuICAubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKG1hcC1nZXQoJHRoZW1lLCB3YXJuKSk7XG4gIH1cblxuICAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLFxuICAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlIHtcbiAgICAmLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQge1xuICAgICAgYmFja2dyb3VuZDogJGRpc2FibGVkLWNvbG9yO1xuICAgIH1cbiAgfVxufVxuXG5cblxuLy8gUmVwcmVzZW50cyBhIHR5cG9ncmFwaHkgbGV2ZWwgZnJvbSB0aGUgTWF0ZXJpYWwgZGVzaWduIHNwZWMuXG5AZnVuY3Rpb24gbWF0LXR5cG9ncmFwaHktbGV2ZWwoXG4gICRmb250LXNpemUsXG4gICRsaW5lLWhlaWdodDogJGZvbnQtc2l6ZSxcbiAgJGZvbnQtd2VpZ2h0OiA0MDAsXG4gICRmb250LWZhbWlseTogbnVsbCxcbiAgJGxldHRlci1zcGFjaW5nOiBub3JtYWwpIHtcblxuICBAcmV0dXJuIChcbiAgICBmb250LXNpemU6ICRmb250LXNpemUsXG4gICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodCxcbiAgICBmb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LFxuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHksXG4gICAgbGV0dGVyLXNwYWNpbmc6ICRsZXR0ZXItc3BhY2luZ1xuICApO1xufVxuXG4vLyBSZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiB0eXBvZ3JhcGh5IGxldmVscy5cbi8vIERlZmF1bHRzIGNvbWUgZnJvbSBodHRwczovL21hdGVyaWFsLmlvL2d1aWRlbGluZXMvc3R5bGUvdHlwb2dyYXBoeS5odG1sXG4vLyBOb3RlOiBUaGUgc3BlYyBkb2Vzbid0IG1lbnRpb24gbGV0dGVyIHNwYWNpbmcuIFRoZSB2YWx1ZXMgaGVyZSBjb21lIGZyb21cbi8vIGV5ZWJhbGxpbmcgaXQgdW50aWwgaXQgbG9va2VkIGV4YWN0bHkgbGlrZSB0aGUgc3BlYyBleGFtcGxlcy5cbkBmdW5jdGlvbiBtYXQtdHlwb2dyYXBoeS1jb25maWcoXG4gICRmb250LWZhbWlseTogICAnUm9ib3RvLCBcIkhlbHZldGljYSBOZXVlXCIsIHNhbnMtc2VyaWYnLFxuICAkZGlzcGxheS00OiAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMTEycHgsIDExMnB4LCAzMDAsICRsZXR0ZXItc3BhY2luZzogLTAuMDVlbSksXG4gICRkaXNwbGF5LTM6ICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCg1NnB4LCA1NnB4LCA0MDAsICRsZXR0ZXItc3BhY2luZzogLTAuMDJlbSksXG4gICRkaXNwbGF5LTI6ICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCg0NXB4LCA0OHB4LCA0MDAsICRsZXR0ZXItc3BhY2luZzogLTAuMDA1ZW0pLFxuICAkZGlzcGxheS0xOiAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMzRweCwgNDBweCwgNDAwKSxcbiAgJGhlYWRsaW5lOiAgICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDI0cHgsIDMycHgsIDQwMCksXG4gICR0aXRsZTogICAgICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgyMHB4LCAzMnB4LCA1MDApLFxuICAkc3ViaGVhZGluZy0yOiAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMTZweCwgMjhweCwgNDAwKSxcbiAgJHN1YmhlYWRpbmctMTogIG1hdC10eXBvZ3JhcGh5LWxldmVsKDE1cHgsIDI0cHgsIDQwMCksXG4gICRib2R5LTI6ICAgICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgxNHB4LCAyNHB4LCA1MDApLFxuICAkYm9keS0xOiAgICAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMTRweCwgMjBweCwgNDAwKSxcbiAgJGNhcHRpb246ICAgICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDEycHgsIDIwcHgsIDQwMCksXG4gICRidXR0b246ICAgICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgxNHB4LCAxNHB4LCA1MDApLFxuICAvLyBMaW5lLWhlaWdodCBtdXN0IGJlIHVuaXQtbGVzcyBmcmFjdGlvbiBvZiB0aGUgZm9udC1zaXplLlxuICAkaW5wdXQ6ICAgICAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoaW5oZXJpdCwgMS4xMjUsIDQwMClcbikge1xuXG4gIC8vIERlY2xhcmUgYW4gaW5pdGlhbCBtYXAgd2l0aCBhbGwgb2YgdGhlIGxldmVscy5cbiAgJGNvbmZpZzogKFxuICAgIGRpc3BsYXktNDogICAgICAkZGlzcGxheS00LFxuICAgIGRpc3BsYXktMzogICAgICAkZGlzcGxheS0zLFxuICAgIGRpc3BsYXktMjogICAgICAkZGlzcGxheS0yLFxuICAgIGRpc3BsYXktMTogICAgICAkZGlzcGxheS0xLFxuICAgIGhlYWRsaW5lOiAgICAgICAkaGVhZGxpbmUsXG4gICAgdGl0bGU6ICAgICAgICAgICR0aXRsZSxcbiAgICBzdWJoZWFkaW5nLTI6ICAgJHN1YmhlYWRpbmctMixcbiAgICBzdWJoZWFkaW5nLTE6ICAgJHN1YmhlYWRpbmctMSxcbiAgICBib2R5LTI6ICAgICAgICAgJGJvZHktMixcbiAgICBib2R5LTE6ICAgICAgICAgJGJvZHktMSxcbiAgICBjYXB0aW9uOiAgICAgICAgJGNhcHRpb24sXG4gICAgYnV0dG9uOiAgICAgICAgICRidXR0b24sXG4gICAgaW5wdXQ6ICAgICAgICAgICRpbnB1dCxcbiAgKTtcblxuICAvLyBMb29wIHRocm91Z2ggdGhlIGxldmVscyBhbmQgc2V0IHRoZSBgZm9udC1mYW1pbHlgIG9mIHRoZSBvbmVzIHRoYXQgZG9uJ3QgaGF2ZSBvbmUgdG8gdGhlIGJhc2UuXG4gIC8vIE5vdGUgdGhhdCBTYXNzIGNhbid0IG1vZGlmeSBtYXBzIGluIHBsYWNlLCB3aGljaCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gbWVyZ2UgYW5kIHJlLWFzc2lnbi5cbiAgQGVhY2ggJGtleSwgJGxldmVsIGluICRjb25maWcge1xuICAgIEBpZiBtYXAtZ2V0KCRsZXZlbCwgZm9udC1mYW1pbHkpID09IG51bGwge1xuICAgICAgJG5ldy1sZXZlbDogbWFwLW1lcmdlKCRsZXZlbCwgKGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHkpKTtcbiAgICAgICRjb25maWc6IG1hcC1tZXJnZSgkY29uZmlnLCAoJGtleTogJG5ldy1sZXZlbCkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCB0aGUgYmFzZSBmb250IGZhbWlseSB0byB0aGUgY29uZmlnLlxuICBAcmV0dXJuIG1hcC1tZXJnZSgkY29uZmlnLCAoZm9udC1mYW1pbHk6ICRmb250LWZhbWlseSkpO1xufVxuXG4vLyBBZGRzIHRoZSBiYXNlIHR5cG9ncmFwaHkgc3R5bGVzLCBiYXNlZCBvbiBhIGNvbmZpZy5cbkBtaXhpbiBtYXQtYmFzZS10eXBvZ3JhcGh5KCRjb25maWcsICRzZWxlY3RvcjogJy5tYXQtdHlwb2dyYXBoeScpIHtcbiAgLm1hdC1oMSwgLm1hdC1oZWFkbGluZSwgI3skc2VsZWN0b3J9IGgxIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgaGVhZGxpbmUpO1xuICAgIG1hcmdpbjogMCAwIDE2cHg7XG4gIH1cblxuICAubWF0LWgyLCAubWF0LXRpdGxlLCAjeyRzZWxlY3Rvcn0gaDIge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCB0aXRsZSk7XG4gICAgbWFyZ2luOiAwIDAgMTZweDtcbiAgfVxuXG4gIC5tYXQtaDMsIC5tYXQtc3ViaGVhZGluZy0yLCAjeyRzZWxlY3Rvcn0gaDMge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBzdWJoZWFkaW5nLTIpO1xuICAgIG1hcmdpbjogMCAwIDE2cHg7XG4gIH1cblxuICAubWF0LWg0LCAubWF0LXN1YmhlYWRpbmctMSwgI3skc2VsZWN0b3J9IGg0IHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgc3ViaGVhZGluZy0xKTtcbiAgICBtYXJnaW46IDAgMCAxNnB4O1xuICB9XG5cbiAgLy8gTm90ZTogdGhlIHNwZWMgZG9lc24ndCBoYXZlIGFueXRoaW5nIHRoYXQgd291bGQgY29ycmVzcG9uZCB0byBoNSBhbmQgaDYsIGJ1dCB3ZSBhZGQgdGhlc2UgZm9yXG4gIC8vIGNvbnNpc3RlbmN5LiBUaGUgZm9udCBzaXplcyBjb21lIGZyb20gdGhlIENocm9tZSB1c2VyIGFnZW50IHN0eWxlcyB3aGljaCBoYXZlIGg1IGF0IDAuODNlbVxuICAvLyBhbmQgaDYgYXQgMC42N2VtLlxuICAubWF0LWg1LCAjeyRzZWxlY3Rvcn0gaDUge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWZvbnQtc2hvcnRoYW5kKFxuICAgICAgIC8vIGNhbGMgaXMgdXNlZCBoZXJlIHRvIHN1cHBvcnQgY3NzIHZhcmlhYmxlc1xuICAgICAgY2FsYygje21hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKX0gKiAwLjgzKSxcbiAgICAgIG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTEpLFxuICAgICAgbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGJvZHktMSksXG4gICAgICBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgYm9keS0xKVxuICAgICk7XG5cbiAgICBtYXJnaW46IDAgMCAxMnB4O1xuICB9XG5cbiAgLm1hdC1oNiwgI3skc2VsZWN0b3J9IGg2IHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1mb250LXNob3J0aGFuZChcbiAgICAgICAvLyBjYWxjIGlzIHVzZWQgaGVyZSB0byBzdXBwb3J0IGNzcyB2YXJpYWJsZXNcbiAgICAgIGNhbGMoI3ttYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSl9ICogMC42NyksXG4gICAgICBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0xKSxcbiAgICAgIG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBib2R5LTEpLFxuICAgICAgbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGJvZHktMSlcbiAgICApO1xuXG4gICAgbWFyZ2luOiAwIDAgMTJweDtcbiAgfVxuXG4gIC5tYXQtYm9keS1zdHJvbmcsIC5tYXQtYm9keS0yIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgYm9keS0yKTtcbiAgfVxuXG4gIC5tYXQtYm9keSwgLm1hdC1ib2R5LTEsICN7JHNlbGVjdG9yfSB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGJvZHktMSk7XG5cbiAgICBwIHtcbiAgICAgIG1hcmdpbjogMCAwIDEycHg7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbWFsbCwgLm1hdC1jYXB0aW9uIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgY2FwdGlvbik7XG4gIH1cblxuICAubWF0LWRpc3BsYXktNCwgI3skc2VsZWN0b3J9IC5tYXQtZGlzcGxheS00IHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgZGlzcGxheS00KTtcbiAgICBtYXJnaW46IDAgMCA1NnB4O1xuICB9XG5cbiAgLm1hdC1kaXNwbGF5LTMsICN7JHNlbGVjdG9yfSAubWF0LWRpc3BsYXktMyB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGRpc3BsYXktMyk7XG4gICAgbWFyZ2luOiAwIDAgNjRweDtcbiAgfVxuXG4gIC5tYXQtZGlzcGxheS0yLCAjeyRzZWxlY3Rvcn0gLm1hdC1kaXNwbGF5LTIge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBkaXNwbGF5LTIpO1xuICAgIG1hcmdpbjogMCAwIDY0cHg7XG4gIH1cblxuICAubWF0LWRpc3BsYXktMSwgI3skc2VsZWN0b3J9IC5tYXQtZGlzcGxheS0xIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgZGlzcGxheS0xKTtcbiAgICBtYXJnaW46IDAgMCA2NHB4O1xuICB9XG59XG5cblxuXG5cbkBtaXhpbiBtYXQtYXV0b2NvbXBsZXRlLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuXG4gIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbig0LCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgICAvLyBTZWxlY3RlZCBvcHRpb25zIGluIGF1dG9jb21wbGV0ZXMgc2hvdWxkIG5vdCBiZSBncmF5LCBidXQgd2VcbiAgICAvLyBvbmx5IHdhbnQgdG8gb3ZlcnJpZGUgdGhlIGJhY2tncm91bmQgZm9yIHNlbGVjdGVkIG9wdGlvbnMgaWZcbiAgICAvLyB0aGV5IGFyZSAqbm90KiBpbiBob3ZlciBvciBmb2N1cyBzdGF0ZS4gVGhpcyBjaGFuZ2UgaGFzIHRvIGJlXG4gICAgLy8gbWFkZSBoZXJlIGJlY2F1c2UgYmFzZSBvcHRpb24gc3R5bGVzIGFyZSBzaGFyZWQgYmV0d2VlbiB0aGVcbiAgICAvLyBhdXRvY29tcGxldGUgYW5kIHRoZSBzZWxlY3QuXG4gICAgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcikge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcblxuICAgICAgJjpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpIHtcbiAgICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbn1cblxuQG1peGluIG1hdC1hdXRvY29tcGxldGUtdHlwb2dyYXBoeSgkY29uZmlnKSB7IH1cblxuLy8gVGhpcyBjb250YWlucyBhbGwgb2YgdGhlIHN0eWxlcyBmb3IgdGhlIGJhZGdlXG4vLyByYXRoZXIgdGhhbiBqdXN0IHRoZSBjb2xvci90aGVtZSBiZWNhdXNlIG9mXG4vLyBubyBzdHlsZSBzaGVldCBzdXBwb3J0IGZvciBkaXJlY3RpdmVzLlxuXG5cblxuXG5cbiRtYXQtYmFkZ2UtZm9udC1zaXplOiAxMnB4O1xuJG1hdC1iYWRnZS1mb250LXdlaWdodDogNjAwO1xuJG1hdC1iYWRnZS1kZWZhdWx0LXNpemU6IDIycHggIWRlZmF1bHQ7XG4kbWF0LWJhZGdlLXNtYWxsLXNpemU6ICRtYXQtYmFkZ2UtZGVmYXVsdC1zaXplIC0gNjtcbiRtYXQtYmFkZ2UtbGFyZ2Utc2l6ZTogJG1hdC1iYWRnZS1kZWZhdWx0LXNpemUgKyA2O1xuXG4vLyBNaXhpbiBmb3IgYnVpbGRpbmcgb2Zmc2V0IGdpdmVuIGRpZmZlcmVudCBzaXplc1xuQG1peGluIF9tYXQtYmFkZ2Utc2l6ZSgkc2l6ZSkge1xuICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgIHdpZHRoOiAkc2l6ZTtcbiAgICBoZWlnaHQ6ICRzaXplO1xuICAgIGxpbmUtaGVpZ2h0OiAkc2l6ZTtcbiAgfVxuXG4gICYubWF0LWJhZGdlLWFib3ZlIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgdG9wOiAtJHNpemUgLyAyO1xuICAgIH1cbiAgfVxuXG4gICYubWF0LWJhZGdlLWJlbG93IHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgYm90dG9tOiAtJHNpemUgLyAyO1xuICAgIH1cbiAgfVxuXG4gICYubWF0LWJhZGdlLWJlZm9yZSB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIGxlZnQ6IC0kc2l6ZTtcbiAgICB9XG4gIH1cblxuICBbZGlyPSdydGwnXSAmLm1hdC1iYWRnZS1iZWZvcmUge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICBsZWZ0OiBhdXRvO1xuICAgICAgcmlnaHQ6IC0kc2l6ZTtcbiAgICB9XG4gIH1cblxuICAmLm1hdC1iYWRnZS1hZnRlciB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIHJpZ2h0OiAtJHNpemU7XG4gICAgfVxuICB9XG5cbiAgW2Rpcj0ncnRsJ10gJi5tYXQtYmFkZ2UtYWZ0ZXIge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICByaWdodDogYXV0bztcbiAgICAgIGxlZnQ6IC0kc2l6ZTtcbiAgICB9XG4gIH1cblxuICAmLm1hdC1iYWRnZS1vdmVybGFwIHtcbiAgICAmLm1hdC1iYWRnZS1iZWZvcmUge1xuICAgICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgICAgbGVmdDogLSRzaXplIC8gMjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBbZGlyPSdydGwnXSAmLm1hdC1iYWRnZS1iZWZvcmUge1xuICAgICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgICAgbGVmdDogYXV0bztcbiAgICAgICAgcmlnaHQ6IC0kc2l6ZSAvIDI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5tYXQtYmFkZ2UtYWZ0ZXIge1xuICAgICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgICAgcmlnaHQ6IC0kc2l6ZSAvIDI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgW2Rpcj0ncnRsJ10gJi5tYXQtYmFkZ2UtYWZ0ZXIge1xuICAgICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgICAgcmlnaHQ6IGF1dG87XG4gICAgICAgIGxlZnQ6IC0kc2l6ZSAvIDI7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtYmFkZ2UtdGhlbWUoJHRoZW1lKSB7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgZGVmYXVsdC1jb250cmFzdCk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRwcmltYXJ5KTtcblxuICAgIEBpbmNsdWRlIGNkay1oaWdoLWNvbnRyYXN0KGFjdGl2ZSwgb2ZmKSB7XG4gICAgICBvdXRsaW5lOiBzb2xpZCAxcHg7XG4gICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYmFkZ2UtYWNjZW50IHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRhY2NlbnQpO1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJhZGdlLXdhcm4ge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkd2Fybik7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1iYWRnZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG5cbiAgLm1hdC1iYWRnZS1oaWRkZW4ge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYmFkZ2UtZGlzYWJsZWQge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICAkYXBwLWJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2JhY2tncm91bmQnKTtcbiAgICAgICRiYWRnZS1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC1idXR0b24pO1xuXG4gICAgICAvLyBUaGUgZGlzYWJsZWQgY29sb3IgdXN1YWxseSBoYXMgc29tZSBraW5kIG9mIG9wYWNpdHksIGJ1dCBiZWNhdXNlIHRoZSBiYWRnZSBpcyBvdmVybGF5ZWRcbiAgICAgIC8vIG9uIHRvcCBvZiBzb21ldGhpbmcgZWxzZSwgaXQgd29uJ3QgbG9vayBnb29kIGlmIGl0J3Mgb3BhcXVlLiBJZiBpdCBpcyBhIGNvbG9yICp0eXBlKixcbiAgICAgIC8vIHdlIGNvbnZlcnQgaXQgaW50byBhIHNvbGlkIGNvbG9yIGJ5IHRha2luZyB0aGUgb3BhY2l0eSBmcm9tIHRoZSByZ2JhIHZhbHVlIGFuZCB1c2luZ1xuICAgICAgLy8gdGhlIHZhbHVlIHRvIGRldGVybWluZSB0aGUgcGVyY2VudGFnZSBvZiB0aGUgYmFja2dyb3VuZCB0byBwdXQgaW50byBmb3JlZ3JvdW5kIHdoZW5cbiAgICAgIC8vIG1peGluZyB0aGUgY29sb3JzIHRvZ2V0aGVyLlxuICAgICAgQGlmICh0eXBlLW9mKCRiYWRnZS1jb2xvcikgPT0gY29sb3IgYW5kIHR5cGUtb2YoJGFwcC1iYWNrZ3JvdW5kKSA9PSBjb2xvcikge1xuICAgICAgICAkYmFkZ2Utb3BhY2l0eTogb3BhY2l0eSgkYmFkZ2UtY29sb3IpO1xuICAgICAgICBiYWNrZ3JvdW5kOiBtaXgoJGFwcC1iYWNrZ3JvdW5kLCByZ2JhKCRiYWRnZS1jb2xvciwgMSksICgxIC0gJGJhZGdlLW9wYWNpdHkpICogMTAwJSk7XG4gICAgICB9XG4gICAgICBAZWxzZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRiYWRnZS1jb2xvcjtcbiAgICAgIH1cblxuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDIwMG1zIGVhc2UtaW4tb3V0O1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC42KTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIH1cblxuICAubmctYW5pbWF0ZS1kaXNhYmxlZCAubWF0LWJhZGdlLWNvbnRlbnQsXG4gIC5tYXQtYmFkZ2UtY29udGVudC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSB7XG4gICAgdHJhbnNpdGlvbjogbm9uZTtcbiAgfVxuXG4gIC8vIFRoZSBhY3RpdmUgY2xhc3MgaXMgYWRkZWQgYWZ0ZXIgdGhlIGVsZW1lbnQgaXMgYWRkZWRcbiAgLy8gc28gaXQgY2FuIGFuaW1hdGUgc2NhbGUgdG8gZGVmYXVsdFxuICAubWF0LWJhZGdlLWNvbnRlbnQubWF0LWJhZGdlLWFjdGl2ZSB7XG4gICAgLy8gU2NhbGUgdG8gYG5vbmVgIGluc3RlYWQgb2YgYDFgIHRvIGF2b2lkIGJsdXJyeSB0ZXh0IGluIHNvbWUgYnJvd3NlcnMuXG4gICAgdHJhbnNmb3JtOiBub25lO1xuICB9XG5cbiAgLm1hdC1iYWRnZS1zbWFsbCB7XG4gICAgQGluY2x1ZGUgX21hdC1iYWRnZS1zaXplKCRtYXQtYmFkZ2Utc21hbGwtc2l6ZSk7XG4gIH1cbiAgLm1hdC1iYWRnZS1tZWRpdW0ge1xuICAgIEBpbmNsdWRlIF9tYXQtYmFkZ2Utc2l6ZSgkbWF0LWJhZGdlLWRlZmF1bHQtc2l6ZSk7XG4gIH1cbiAgLm1hdC1iYWRnZS1sYXJnZSB7XG4gICAgQGluY2x1ZGUgX21hdC1iYWRnZS1zaXplKCRtYXQtYmFkZ2UtbGFyZ2Utc2l6ZSk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1iYWRnZS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICBmb250LXdlaWdodDogJG1hdC1iYWRnZS1mb250LXdlaWdodDtcbiAgICBmb250LXNpemU6ICRtYXQtYmFkZ2UtZm9udC1zaXplO1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgLy8gU2V0IHRoZSBmb250IHNpemUgdG8gNzUlIG9mIHRoZSBvcmlnaW5hbC5cbiAgICBmb250LXNpemU6ICRtYXQtYmFkZ2UtZm9udC1zaXplICogMC43NTtcbiAgfVxuXG4gIC5tYXQtYmFkZ2UtbGFyZ2UgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICBmb250LXNpemU6ICRtYXQtYmFkZ2UtZm9udC1zaXplICogMjtcbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtYm90dG9tLXNoZWV0LXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lciB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oMTYsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBkaWFsb2cpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtYm90dG9tLXNoZWV0LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXIge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBib2R5LTEpO1xuICB9XG59XG5cblxuXG5cblxuJF9tYXQtYnV0dG9uLXJpcHBsZS1vcGFjaXR5OiAwLjE7XG5cbi8vIEFwcGxpZXMgYSBmb2N1cyBzdHlsZSB0byBhbiBtYXQtYnV0dG9uIGVsZW1lbnQgZm9yIGVhY2ggb2YgdGhlIHN1cHBvcnRlZCBwYWxldHRlcy5cbkBtaXhpbiBfbWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LWNvbG9yKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcblxuICAmLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG4gIH1cblxuICAmLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQpO1xuICB9XG5cbiAgJi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHdhcm4pO1xuICB9XG5cbiAgJltkaXNhYmxlZF0gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIH1cbn1cblxuLy8gQXBwbGllcyB0aGUgYmFja2dyb3VuZCBjb2xvciBmb3IgYSByaXBwbGUuIElmIHRoZSB2YWx1ZSBwcm92aWRlZCBpcyBub3QgYSBTYXNzIGNvbG9yLFxuLy8gd2UgYXNzdW1lIHRoYXQgd2UndmUgYmVlbiBnaXZlbiBhIENTUyB2YXJpYWJsZS4gU2luY2Ugd2UgY2FuJ3QgcGVyZm9ybSBhbHBoYS1ibGVuZGluZ1xuLy8gb24gYSBDU1MgdmFyaWFibGUsIHdlIGluc3RlYWQgYWRkIHRoZSBvcGFjaXR5IGRpcmVjdGx5IHRvIHRoZSByaXBwbGUgZWxlbWVudC5cbkBtaXhpbiBfbWF0LWJ1dHRvbi1yaXBwbGUtYmFja2dyb3VuZCgkcGFsZXR0ZSwgJGh1ZSwgJG9wYWNpdHkpIHtcbiAgJGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgJGh1ZSwgJG9wYWNpdHkpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1jb2xvcjtcbiAgQGlmICh0eXBlLW9mKCRiYWNrZ3JvdW5kLWNvbG9yKSAhPSBjb2xvcikge1xuICAgIG9wYWNpdHk6ICRvcGFjaXR5O1xuICB9XG59XG5cbkBtaXhpbiBfbWF0LWJ1dHRvbi1yaXBwbGUtY29sb3IoJHRoZW1lLCAkaHVlLCAkb3BhY2l0eTogJF9tYXQtYnV0dG9uLXJpcHBsZS1vcGFjaXR5KSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuXG4gICYubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tcmlwcGxlLWJhY2tncm91bmQoJHByaW1hcnksICRodWUsICRvcGFjaXR5KTtcbiAgfVxuXG4gICYubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi1yaXBwbGUtYmFja2dyb3VuZCgkYWNjZW50LCAkaHVlLCAkb3BhY2l0eSk7XG4gIH1cblxuICAmLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLXJpcHBsZS1iYWNrZ3JvdW5kKCR3YXJuLCAkaHVlLCAkb3BhY2l0eSk7XG4gIH1cbn1cblxuLy8gQXBwbGllcyBhIHByb3BlcnR5IHRvIGFuIG1hdC1idXR0b24gZWxlbWVudCBmb3IgZWFjaCBvZiB0aGUgc3VwcG9ydGVkIHBhbGV0dGVzLlxuQG1peGluIF9tYXQtYnV0dG9uLXRoZW1lLXByb3BlcnR5KCR0aGVtZSwgJHByb3BlcnR5LCAkaHVlKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gICYubWF0LXByaW1hcnkge1xuICAgICN7JHByb3BlcnR5fTogbWF0LWNvbG9yKCRwcmltYXJ5LCAkaHVlKTtcbiAgfVxuICAmLm1hdC1hY2NlbnQge1xuICAgICN7JHByb3BlcnR5fTogbWF0LWNvbG9yKCRhY2NlbnQsICRodWUpO1xuICB9XG4gICYubWF0LXdhcm4ge1xuICAgICN7JHByb3BlcnR5fTogbWF0LWNvbG9yKCR3YXJuLCAkaHVlKTtcbiAgfVxuXG4gICYubWF0LXByaW1hcnksICYubWF0LWFjY2VudCwgJi5tYXQtd2FybiwgJltkaXNhYmxlZF0ge1xuICAgICZbZGlzYWJsZWRdIHtcbiAgICAgICRwYWxldHRlOiBpZigkcHJvcGVydHkgPT0gJ2NvbG9yJywgJGZvcmVncm91bmQsICRiYWNrZ3JvdW5kKTtcbiAgICAgICN7JHByb3BlcnR5fTogbWF0LWNvbG9yKCRwYWxldHRlLCBkaXNhYmxlZC1idXR0b24pO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWJ1dHRvbi10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1idXR0b24sIC5tYXQtaWNvbi1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ge1xuICAgIC8vIEJ1dHRvbnMgd2l0aG91dCBhIGJhY2tncm91bmQgY29sb3Igc2hvdWxkIGluaGVyaXQgdGhlIGZvbnQgY29sb3IuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvXG4gICAgLy8gZW5zdXJlIHRoYXQgdGhlIGJ1dHRvbiBpcyByZWFkYWJsZSBvbiBjdXN0b20gYmFja2dyb3VuZCBjb2xvcnMuIEl0J3Mgd3JvbmcgdG8gYWx3YXlzIGFzc3VtZVxuICAgIC8vIHRoYXQgdGhvc2UgYnV0dG9ucyBhcmUgYWx3YXlzIHBsYWNlZCBpbnNpZGUgb2YgY29udGFpbmVycyB3aXRoIHRoZSBkZWZhdWx0IGJhY2tncm91bmRcbiAgICAvLyBjb2xvciBvZiB0aGUgdGhlbWUgKGUuZy4gdGhlbWVkIHRvb2xiYXJzKS5cbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblxuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLXRoZW1lLXByb3BlcnR5KCR0aGVtZSwgJ2NvbG9yJywgdGV4dCk7XG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tZm9jdXMtb3ZlcmxheS1jb2xvcigkdGhlbWUpO1xuXG4gICAgLy8gU2V0dXAgdGhlIHJpcHBsZSBjb2xvciB0byBiZSBiYXNlZCBvbiB0aGUgdGV4dCBjb2xvci4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHJpcHBsZXNcbiAgICAvLyBhcmUgbWF0Y2hpbmcgd2l0aCB0aGUgY3VycmVudCB0aGVtZSBwYWxldHRlIGFuZCBhcmUgaW4gY29udHJhc3QgdG8gdGhlIGJhY2tncm91bmQgY29sb3JcbiAgICAvLyAoZS5nIGluIHRoZW1lZCB0b29sYmFycykuXG4gICAgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgICBvcGFjaXR5OiAkX21hdC1idXR0b24tcmlwcGxlLW9wYWNpdHk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Q29sb3I7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSB7XG4gICAgYmFja2dyb3VuZDogbWFwX2dldCgkZm9yZWdyb3VuZCwgYmFzZSk7XG4gIH1cblxuICAvLyBOb3RlOiB0aGlzIG5lZWRzIGEgYml0IGV4dHJhIHNwZWNpZmljaXR5LCBiZWNhdXNlIHdlJ3JlIG5vdCBndWFyYW50ZWVkIHRoZSBpbmNsdXNpb25cbiAgLy8gb3JkZXIgb2YgdGhlIHRoZW1lIHN0eWxlcyBhbmQgdGhlIGJ1dHRvbiByZXNldCBtYXkgZW5kIHVwIHJlc2V0dGluZyB0aGlzIGFzIHdlbGwuXG4gIC5tYXQtc3Ryb2tlZC1idXR0b246bm90KFtkaXNhYmxlZF0pIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cblxuICAubWF0LWZsYXQtYnV0dG9uLCAubWF0LXJhaXNlZC1idXR0b24sIC5tYXQtZmFiLCAubWF0LW1pbmktZmFiIHtcbiAgICAvLyBEZWZhdWx0IGZvbnQgYW5kIGJhY2tncm91bmQgY29sb3Igd2hlbiBub3QgdXNpbmcgYW55IGNvbG9yIHBhbGV0dGUuXG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCByYWlzZWQtYnV0dG9uKTtcblxuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLXRoZW1lLXByb3BlcnR5KCR0aGVtZSwgJ2NvbG9yJywgZGVmYXVsdC1jb250cmFzdCk7XG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tdGhlbWUtcHJvcGVydHkoJHRoZW1lLCAnYmFja2dyb3VuZC1jb2xvcicsIGRlZmF1bHQpO1xuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLXJpcHBsZS1jb2xvcigkdGhlbWUsIGRlZmF1bHQtY29udHJhc3QpO1xuICB9XG5cbiAgLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1hdC1mbGF0LWJ1dHRvbiB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMCwgJHRoZW1lKTtcbiAgfVxuXG4gIC5tYXQtcmFpc2VkLWJ1dHRvbiB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMiwgJHRoZW1lKTtcblxuICAgICY6bm90KFtkaXNhYmxlZF0pOmFjdGl2ZSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbig4LCAkdGhlbWUpO1xuICAgIH1cblxuICAgICZbZGlzYWJsZWRdIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDAsICR0aGVtZSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1mYWIsIC5tYXQtbWluaS1mYWIge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDYsICR0aGVtZSk7XG5cbiAgICAmOm5vdChbZGlzYWJsZWRdKTphY3RpdmUge1xuICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMTIsICR0aGVtZSk7XG4gICAgfVxuXG4gICAgJltkaXNhYmxlZF0ge1xuICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMCwgJHRoZW1lKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1idXR0b24tdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtYnV0dG9uLCAubWF0LXJhaXNlZC1idXR0b24sIC5tYXQtaWNvbi1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24sXG4gIC5tYXQtZmxhdC1idXR0b24sIC5tYXQtZmFiLCAubWF0LW1pbmktZmFiIHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBidXR0b24pO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBidXR0b24pO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYnV0dG9uKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtYnV0dG9uLXRvZ2dsZS10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGRpdmlkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUsXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cCB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oMiwgJHRoZW1lKTtcbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQsXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIHtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBoaW50LXRleHQpO1xuXG4gICAgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBmb2N1c2VkLWJ1dHRvbik7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG5cbiAgICAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGZvY3VzZWQtYnV0dG9uLCAxKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUgKyAubWF0LWJ1dHRvbi10b2dnbGUge1xuICAgIGJvcmRlci1sZWZ0OiBzb2xpZCAxcHggJGRpdmlkZXItY29sb3I7XG4gIH1cblxuICBbZGlyPSdydGwnXSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUgKyAubWF0LWJ1dHRvbi10b2dnbGUge1xuICAgIGJvcmRlci1sZWZ0OiBub25lO1xuICAgIGJvcmRlci1yaWdodDogc29saWQgMXB4ICRkaXZpZGVyLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwge1xuICAgIC5tYXQtYnV0dG9uLXRvZ2dsZSArIC5tYXQtYnV0dG9uLXRvZ2dsZSB7XG4gICAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICAgIGJvcmRlci1yaWdodDogbm9uZTtcbiAgICAgIGJvcmRlci10b3A6IHNvbGlkIDFweCAkZGl2aWRlci1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBzZWxlY3RlZC1idXR0b24pO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcblxuICAgICYubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLWJ1dHRvbik7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBkaXNhYmxlZC1idXR0b24tdG9nZ2xlKTtcblxuICAgICYubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICAgIH1cblxuICAgICYubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIHNlbGVjdGVkLWRpc2FibGVkLWJ1dHRvbik7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCxcbiAgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQge1xuICAgIGJvcmRlcjogc29saWQgMXB4ICRkaXZpZGVyLWNvbG9yO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtYnV0dG9uLXRvZ2dsZS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1idXR0b24tdG9nZ2xlIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG59XG5cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtY2FyZC10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWNhcmQge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDEsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAgIC8vIE5lZWRzIGV4dHJhIHNwZWNpZmljaXR5IHRvIGJlIGFibGUgdG8gb3ZlcnJpZGUgdGhlIGVsZXZhdGlvbiBzZWxlY3RvcnMuXG4gICAgJi5tYXQtY2FyZC1mbGF0IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDAsICR0aGVtZSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1jYXJkLXN1YnRpdGxlIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1jYXJkLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWNhcmQge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LWNhcmQtdGl0bGUge1xuICAgIGZvbnQ6IHtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgaGVhZGxpbmUpO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgdGl0bGUpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtY2FyZC1oZWFkZXIgLm1hdC1jYXJkLXRpdGxlIHtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgdGl0bGUpO1xuICB9XG5cbiAgLm1hdC1jYXJkLXN1YnRpdGxlLFxuICAubWF0LWNhcmQtY29udGVudCB7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSk7XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LWNoZWNrYm94LXRoZW1lKCR0aGVtZSkge1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuXG4gIC8vIFRoZSBjb2xvciBvZiB0aGUgY2hlY2tib3gncyBjaGVja21hcmsgLyBtaXhlZG1hcmsuXG4gICRjaGVja2JveC1tYXJrLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGJhY2tncm91bmQpO1xuXG4gIC8vIE5PVEUodHJhdmlza2F1Zm1hbik6IFdoaWxlIHRoZSBzcGVjIGNhbGxzIGZvciB0cmFuc2x1Y2VudCBibGFja3Mvd2hpdGVzIGZvciBkaXNhYmxlZCBjb2xvcnMsXG4gIC8vIHRoaXMgZG9lcyBub3Qgd29yayB3ZWxsIHdpdGggZWxlbWVudHMgbGF5ZXJlZCBvbiB0b3Agb2Ygb25lIGFub3RoZXIuIFRvIGdldCBhcm91bmQgdGhpcyB3ZVxuICAvLyBibGVuZCB0aGUgY29sb3JzIHRvZ2V0aGVyIGJhc2VkIG9uIHRoZSBiYXNlIGNvbG9yIGFuZCB0aGUgdGhlbWUgYmFja2dyb3VuZC5cbiAgJHdoaXRlLTMwcGN0LW9wYWNpdHktb24tZGFyazogIzY4Njg2ODtcbiAgJGJsYWNrLTI2cGN0LW9wYWNpdHktb24tbGlnaHQ6ICNiMGIwYjA7XG4gICRkaXNhYmxlZC1jb2xvcjogaWYoJGlzLWRhcmstdGhlbWUsICR3aGl0ZS0zMHBjdC1vcGFjaXR5LW9uLWRhcmssICRibGFjay0yNnBjdC1vcGFjaXR5LW9uLWxpZ2h0KTtcblxuICAubWF0LWNoZWNrYm94LWZyYW1lIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1jaGVja2JveC1jaGVja21hcmsge1xuICAgIGZpbGw6ICRjaGVja2JveC1tYXJrLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aCB7XG4gICAgLy8gIWltcG9ydGFudCBpcyBuZWVkZWQgaGVyZSBiZWNhdXNlIGEgc3Ryb2tlIG11c3QgYmUgc2V0IGFzIGFuXG4gICAgLy8gYXR0cmlidXRlIG9uIHRoZSBTVkcgaW4gb3JkZXIgZm9yIGxpbmUgYW5pbWF0aW9uIHRvIHdvcmsgcHJvcGVybHkuXG4gICAgc3Ryb2tlOiAkY2hlY2tib3gtbWFyay1jb2xvciAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm1hdC1jaGVja2JveC1taXhlZG1hcmsge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRjaGVja2JveC1tYXJrLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLCAubWF0LWNoZWNrYm94LWNoZWNrZWQge1xuICAgICYubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiAubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCR3YXJuKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWNoZWNrYm94LWRpc2FibGVkIHtcbiAgICAmLm1hdC1jaGVja2JveC1jaGVja2VkLFxuICAgICYubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUge1xuICAgICAgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGRpc2FibGVkLWNvbG9yO1xuICAgICAgfVxuICAgIH1cblxuICAgICY6bm90KC5tYXQtY2hlY2tib3gtY2hlY2tlZCkge1xuICAgICAgLm1hdC1jaGVja2JveC1mcmFtZSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJGRpc2FibGVkLWNvbG9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN3aXRjaCB0aGlzIHRvIGEgc29saWQgY29sb3Igc2luY2Ugd2UncmUgdXNpbmcgYG9wYWNpdHlgXG4gIC8vIHRvIGNvbnRyb2wgaG93IG9wYXF1ZSB0aGUgcmlwcGxlIHNob3VsZCBiZS5cbiAgLm1hdC1jaGVja2JveCAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXBfZ2V0KG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKSwgYmFzZSk7XG4gIH1cblxuICAubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLFxuICAubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkge1xuICAgICYubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJHByaW1hcnkpO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYWNjZW50KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCR3YXJuKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1jaGVja2JveC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1jaGVja2JveCB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC8vIFRPRE8oa2FyYSk6IFJlbW92ZSB0aGlzIHN0eWxlIHdoZW4gZml4aW5nIHZlcnRpY2FsIGJhc2VsaW5lXG4gIC5tYXQtY2hlY2tib3gtbGF5b3V0IC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICAgIGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgYm9keS0yKTtcbiAgfVxufVxuXG5cblxuXG5cblxuJG1hdC1jaGlwLXJlbW92ZS1mb250LXNpemU6IDE4cHg7XG5cbkBtaXhpbiBtYXQtY2hpcHMtY29sb3IoJGZvcmVncm91bmQsICRiYWNrZ3JvdW5kKSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kO1xuICBjb2xvcjogJGZvcmVncm91bmQ7XG5cbiAgLm1hdC1jaGlwLXJlbW92ZSB7XG4gICAgY29sb3I6ICRmb3JlZ3JvdW5kO1xuICAgIG9wYWNpdHk6IDAuNDtcbiAgfVxufVxuXG5cbi8vIEFwcGxpZXMgdGhlIGJhY2tncm91bmQgY29sb3IgZm9yIGEgcmlwcGxlIGVsZW1lbnQuXG4vLyBJZiB0aGUgY29sb3IgdmFsdWUgcHJvdmlkZWQgaXMgbm90IGEgU2FzcyBjb2xvcixcbi8vIHdlIGFzc3VtZSB0aGF0IHdlJ3ZlIGJlZW4gZ2l2ZW4gYSBDU1MgdmFyaWFibGUuXG4vLyBTaW5jZSB3ZSBjYW4ndCBwZXJmb3JtIGFscGhhLWJsZW5kaW5nIG9uIGEgQ1NTIHZhcmlhYmxlLFxuLy8gd2UgaW5zdGVhZCBhZGQgdGhlIG9wYWNpdHkgZGlyZWN0bHkgdG8gdGhlIHJpcHBsZSBlbGVtZW50LlxuQG1peGluIF9tYXQtY2hpcHMtcmlwcGxlLWJhY2tncm91bmQoJHBhbGV0dGUsICRkZWZhdWx0LWNvbnRyYXN0LCAkb3BhY2l0eSkge1xuICAkYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCAkZGVmYXVsdC1jb250cmFzdCwgJG9wYWNpdHkpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1jb2xvcjtcbiAgQGlmICh0eXBlLW9mKCRiYWNrZ3JvdW5kLWNvbG9yKSAhPSBjb2xvcikge1xuICAgIG9wYWNpdHk6ICRvcGFjaXR5O1xuICB9XG59XG5cbkBtaXhpbiBtYXQtY2hpcHMtdGhlbWUtY29sb3IoJHBhbGV0dGUpIHtcbiAgQGluY2x1ZGUgbWF0LWNoaXBzLWNvbG9yKG1hdC1jb2xvcigkcGFsZXR0ZSwgZGVmYXVsdC1jb250cmFzdCksIG1hdC1jb2xvcigkcGFsZXR0ZSkpO1xuXG4gIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgQGluY2x1ZGUgX21hdC1jaGlwcy1yaXBwbGUtYmFja2dyb3VuZCgkcGFsZXR0ZSwgZGVmYXVsdC1jb250cmFzdCwgMC4xKTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWNoaXBzLXRoZW1lKCR0aGVtZSkge1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAkdW5zZWxlY3RlZC1iYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIHVuc2VsZWN0ZWQtY2hpcCk7XG4gICR1bnNlbGVjdGVkLWZvcmVncm91bmQ6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwIHtcbiAgICBAaW5jbHVkZSBtYXQtY2hpcHMtY29sb3IoJHVuc2VsZWN0ZWQtZm9yZWdyb3VuZCwgJHVuc2VsZWN0ZWQtYmFja2dyb3VuZCk7XG5cbiAgICAmOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpIHtcbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oMywgJHRoZW1lKTtcbiAgICAgIH1cblxuICAgICAgLm1hdC1jaGlwLXJlbW92ZTpob3ZlciB7XG4gICAgICAgIG9wYWNpdHk6IDAuNTQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5tYXQtY2hpcC1kaXNhYmxlZCB7XG4gICAgICBvcGFjaXR5OiAwLjQ7XG4gICAgfVxuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZDogbWFwX2dldCgkZm9yZWdyb3VuZCwgYmFzZSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkIHtcbiAgICAmLm1hdC1wcmltYXJ5IHtcbiAgICAgIEBpbmNsdWRlIG1hdC1jaGlwcy10aGVtZS1jb2xvcigkcHJpbWFyeSk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBAaW5jbHVkZSBtYXQtY2hpcHMtdGhlbWUtY29sb3IoJHdhcm4pO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICBAaW5jbHVkZSBtYXQtY2hpcHMtdGhlbWUtY29sb3IoJGFjY2VudCk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtY2hpcHMtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtY2hpcCB7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMik7XG4gICAgZm9udC13ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTIpO1xuXG4gICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb24sXG4gICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbiB7XG4gICAgICBmb250LXNpemU6ICRtYXQtY2hpcC1yZW1vdmUtZm9udC1zaXplO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtdGFibGUtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC10YWJsZSB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnY2FyZCcpO1xuICB9XG5cbiAgLm1hdC10YWJsZSB0aGVhZCwgLm1hdC10YWJsZSB0Ym9keSwgLm1hdC10YWJsZSB0Zm9vdCxcbiAgbWF0LWhlYWRlci1yb3csIG1hdC1yb3csIG1hdC1mb290ZXItcm93LFxuICBbbWF0LWhlYWRlci1yb3ddLCBbbWF0LXJvd10sIFttYXQtZm9vdGVyLXJvd10sXG4gIC5tYXQtdGFibGUtc3RpY2t5IHtcbiAgICBiYWNrZ3JvdW5kOiBpbmhlcml0O1xuICB9XG5cbiAgbWF0LXJvdywgbWF0LWhlYWRlci1yb3csIG1hdC1mb290ZXItcm93LFxuICB0aC5tYXQtaGVhZGVyLWNlbGwsIHRkLm1hdC1jZWxsLCB0ZC5tYXQtZm9vdGVyLWNlbGwge1xuICAgIGJvcmRlci1ib3R0b20tY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cblxuICAubWF0LWhlYWRlci1jZWxsIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LWNlbGwsIC5tYXQtZm9vdGVyLWNlbGwge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtdGFibGUtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtdGFibGUge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LWhlYWRlci1jZWxsIHtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbik7XG4gICAgZm9udC13ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTIpO1xuICB9XG5cbiAgLm1hdC1jZWxsLCAubWF0LWZvb3Rlci1jZWxsIHtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKTtcbiAgfVxufVxuXG5cblxuXG5cblxuXG4kbWF0LWRhdGVwaWNrZXItc2VsZWN0ZWQtdG9kYXktYm94LXNoYWRvdy13aWR0aDogMXB4O1xuJG1hdC1kYXRlcGlja2VyLXNlbGVjdGVkLWZhZGUtYW1vdW50OiAwLjY7XG4kbWF0LWRhdGVwaWNrZXItdG9kYXktZmFkZS1hbW91bnQ6IDAuMjtcbiRtYXQtY2FsZW5kYXItYm9keS1mb250LXNpemU6IDEzcHggIWRlZmF1bHQ7XG4kbWF0LWNhbGVuZGFyLXdlZWtkYXktdGFibGUtZm9udC1zaXplOiAxMXB4ICFkZWZhdWx0O1xuXG5AbWl4aW4gX21hdC1kYXRlcGlja2VyLWNvbG9yKCRwYWxldHRlKSB7XG4gIC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCA+IC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCB7XG4gICAgJGJhY2tncm91bmQ6IG1hdC1jb2xvcigkcGFsZXR0ZSk7XG5cbiAgICBAaWYgKHR5cGUtb2YoJGJhY2tncm91bmQpID09IGNvbG9yKSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBmYWRlLW91dCgkYmFja2dyb3VuZCwgJG1hdC1kYXRlcGlja2VyLXNlbGVjdGVkLWZhZGUtYW1vdW50KTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgLy8gSWYgd2UgY291bGRuJ3QgcmVzb2x2ZSB0byBiYWNrZ3JvdW5kIHRvIGEgY29sb3IgKGUuZy4gaXQncyBhIENTUyB2YXJpYWJsZSksXG4gICAgICAvLyBmYWxsIGJhY2sgdG8gZmFkaW5nIHRoZSBjb250ZW50IG91dCB2aWEgYG9wYWNpdHlgLlxuICAgICAgb3BhY2l0eTogJG1hdC1kYXRlcGlja2VyLXRvZGF5LWZhZGUtYW1vdW50O1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCB7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgJG1hdC1kYXRlcGlja2VyLXNlbGVjdGVkLXRvZGF5LWJveC1zaGFkb3ctd2lkdGhcbiAgICAgICAgICAgICAgICBtYXQtY29sb3IoJHBhbGV0dGUsIGRlZmF1bHQtY29udHJhc3QpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtZGF0ZXBpY2tlci10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcblxuICAubWF0LWNhbGVuZGFyLWFycm93IHtcbiAgICBib3JkZXItdG9wLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGljb24pO1xuICB9XG5cbiAgLy8gVGhlIHByZXYvbmV4dCBidXR0b25zIG5lZWQgYSBiaXQgbW9yZSBzcGVjaWZpY2l0eSB0b1xuICAvLyBhdm9pZCBiZWluZyBvdmVyd3JpdHRlbiBieSB0aGUgLm1hdC1pY29uLWJ1dHRvbi5cbiAgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZSxcbiAgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1uZXh0LWJ1dHRvbixcbiAgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1wcmV2aW91cy1idXR0b24ge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGljb24pO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGhpbnQtdGV4dCk7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlci1kaXZpZGVyOjphZnRlciB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS1sYWJlbCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCA+IC5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCkge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXIsXG4gIC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlLFxuICAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlIHtcbiAgICAmID4gLm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCkge1xuICAgIC8vIE5vdGU6IHRob3VnaCBpdCdzIG5vdCB0ZXh0LCB0aGUgYm9yZGVyIGlzIGEgaGludCBhYm91dCB0aGUgZmFjdCB0aGF0IHRoaXMgaXMgdG9kYXkncyBkYXRlLFxuICAgIC8vIHNvIHdlIHVzZSB0aGUgaGludCBjb2xvci5cbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaGludC10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCA+IC5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKSB7XG4gICAgJGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGhpbnQtdGV4dCk7XG5cbiAgICBAaWYgKHR5cGUtb2YoJGNvbG9yKSA9PSBjb2xvcikge1xuICAgICAgYm9yZGVyLWNvbG9yOiBmYWRlLW91dCgkY29sb3IsICRtYXQtZGF0ZXBpY2tlci10b2RheS1mYWRlLWFtb3VudCk7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIC8vIElmIHRoZSBjb2xvciBkaWRuJ3QgcmVzb2x2ZSB0byBhIGNvbG9yIHZhbHVlLCBidXQgc29tZXRoaW5nIGxpa2UgYSBDU1MgdmFyaWFibGUsIHdlIGNhbid0XG4gICAgICAvLyBmYWRlIGl0IG91dCBzbyB3ZSBmYWxsIGJhY2sgdG8gcmVkdWNpbmcgdGhlIGVsZW1lbnQgb3BhY2l0eS4gTm90ZSB0aGF0IHdlIGRvbid0IHVzZSB0aGVcbiAgICAgIC8vICRtYXQtZGF0ZXBpY2tlci10b2RheS1mYWRlLWFtb3VudCwgYmVjYXVzZSBoaW50IHRleHQgdXN1YWxseSBoYXMgc29tZSBvcGFjaXR5IGFwcGxpZWRcbiAgICAgIC8vIHRvIGl0IGFscmVhZHkgYW5kIHdlIGRvbid0IHdhbnQgdGhlbSB0byBzdGFjayBvbiB0b3Agb2YgZWFjaCBvdGhlci5cbiAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICB9XG4gIH1cblxuICBAaW5jbHVkZSBfbWF0LWRhdGVwaWNrZXItY29sb3IobWFwLWdldCgkdGhlbWUsIHByaW1hcnkpKTtcblxuICAubWF0LWRhdGVwaWNrZXItY29udGVudCB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oNCwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gICAgJi5tYXQtYWNjZW50IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtZGF0ZXBpY2tlci1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KSk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBAaW5jbHVkZSBfbWF0LWRhdGVwaWNrZXItY29sb3IobWFwLWdldCgkdGhlbWUsIHdhcm4pKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWRhdGVwaWNrZXItY29udGVudC10b3VjaCB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oMCwgJHRoZW1lKTtcbiAgfVxuXG4gIC5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KSwgdGV4dCk7XG5cbiAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KSwgdGV4dCk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKG1hcC1nZXQoJHRoZW1lLCB3YXJuKSwgdGV4dCk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtZGF0ZXBpY2tlci10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1jYWxlbmRhciB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keSB7XG4gICAgZm9udC1zaXplOiAkbWF0LWNhbGVuZGFyLWJvZHktZm9udC1zaXplO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsLFxuICAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b24ge1xuICAgIGZvbnQ6IHtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYnV0dG9uKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJ1dHRvbik7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIgdGgge1xuICAgIGZvbnQ6IHtcbiAgICAgIHNpemU6ICRtYXQtY2FsZW5kYXItd2Vla2RheS10YWJsZS1mb250LXNpemU7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTEpO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LWRpYWxvZy10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDI0LCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZGlhbG9nKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWRpYWxvZy10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1kaWFsb2ctdGl0bGUge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCB0aXRsZSk7XG4gIH1cbn1cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtZXhwYW5zaW9uLXBhbmVsLXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtZXhwYW5zaW9uLXBhbmVsIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigyLCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cblxuICAubWF0LWFjdGlvbi1yb3cge1xuICAgIGJvcmRlci10b3AtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cblxuICAubWF0LWV4cGFuc2lvbi1wYW5lbCB7XG4gICAgJiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQsXG4gICAgJiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZCxcbiAgICAmOm5vdCgubWF0LWV4cGFuZGVkKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXIge1xuICAgICAgJjpub3QoW2FyaWEtZGlzYWJsZWQ9J3RydWUnXSkge1xuICAgICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBEaXNhYmxlIHRoZSBob3ZlciBvbiB0b3VjaCBkZXZpY2VzIHNpbmNlIGl0IGNhbiBhcHBlYXIgbGlrZSBpdCBpcyBzdHVjay4gV2UgY2FuJ3QgdXNlXG4gIC8vIGBAbWVkaWEgKGhvdmVyKWAgYWJvdmUsIGJlY2F1c2UgdGhlIGRlc2t0b3Agc3VwcG9ydCBicm93c2VyIHN1cHBvcnQgaXNuJ3QgZ3JlYXQuXG4gIEBtZWRpYSAoaG92ZXI6IG5vbmUpIHtcbiAgICAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCk6bm90KFthcmlhLWRpc2FibGVkPSd0cnVlJ10pXG4gICAgICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG5cbiAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLFxuICAubWF0LWV4cGFuc2lvbi1pbmRpY2F0b3I6OmFmdGVyIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD0ndHJ1ZSddIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC1idXR0b24pO1xuXG4gICAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlLFxuICAgIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiB7XG4gICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1leHBhbnNpb24tcGFuZWwtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgc3ViaGVhZGluZy0xKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgc3ViaGVhZGluZy0xKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIHN1YmhlYWRpbmctMSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudCB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGJvZHktMSk7XG4gIH1cbn1cblxuXG5cblxuLy8gVGhpcyBtaXhpbiB3aWxsIGVuc3VyZSB0aGF0IGxpbmVzIHRoYXQgb3ZlcmZsb3cgdGhlIGNvbnRhaW5lciB3aWxsIGhpZGUgdGhlIG92ZXJmbG93IGFuZFxuLy8gdHJ1bmNhdGUgbmVhdGx5IHdpdGggYW4gZWxsaXBzaXMuXG5AbWl4aW4gbWF0LXRydW5jYXRlLWxpbmUoKSB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG4vLyBNaXhpbiB0byBwcm92aWRlIGFsbCBtYXQtbGluZSBzdHlsZXMsIGNoYW5naW5nIHNlY29uZGFyeSBmb250IHNpemUgYmFzZWQgb24gd2hldGhlciB0aGUgbGlzdFxuLy8gaXMgaW4gZGVuc2UgbW9kZS5cbkBtaXhpbiBtYXQtbGluZS1iYXNlKCRzZWNvbmRhcnktZm9udC1zaXplKSB7XG4gIC5tYXQtbGluZSB7XG4gICAgQGluY2x1ZGUgbWF0LXRydW5jYXRlLWxpbmUoKTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXG4gICAgLy8gYWxsIGxpbmVzIGJ1dCB0aGUgdG9wIGxpbmUgc2hvdWxkIGhhdmUgc21hbGxlciB0ZXh0XG4gICAgJjpudGgtY2hpbGQobisyKSB7XG4gICAgICBmb250LXNpemU6ICRzZWNvbmRhcnktZm9udC1zaXplO1xuICAgIH1cbiAgfVxufVxuXG4vLyBUaGlzIG1peGluIG5vcm1hbGl6ZXMgZGVmYXVsdCBlbGVtZW50IHN0eWxlcywgZS5nLiBmb250IHdlaWdodCBmb3IgaGVhZGluZyB0ZXh0LlxuQG1peGluIG1hdC1ub3JtYWxpemUtdGV4dCgpIHtcbiAgJiA+ICoge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xuICB9XG59XG5cbi8vIFRoaXMgbWl4aW4gcHJvdmlkZXMgYmFzZSBzdHlsZXMgZm9yIHRoZSB3cmFwcGVyIGFyb3VuZCBtYXQtbGluZSBlbGVtZW50cyBpbiBhIGxpc3QuXG5AbWl4aW4gbWF0LWxpbmUtd3JhcHBlci1iYXNlKCkge1xuICBAaW5jbHVkZSBtYXQtbm9ybWFsaXplLXRleHQoKTtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB3aWR0aDogMTAwJTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAvLyBNdXN0IHJlbW92ZSB3cmFwcGVyIHdoZW4gbGluZXMgYXJlIGVtcHR5IG9yIGl0IHRha2VzIHVwIGhvcml6b250YWxcbiAgLy8gc3BhY2UgYW5kIHB1c2hlcyBvdGhlciBlbGVtZW50cyB0byB0aGUgcmlnaHQuXG4gICY6ZW1wdHkge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuXG5cbi8vIEluY2x1ZGUgdGhpcyBlbXB0eSBtaXhpbiBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgb3RoZXIgY29tcG9uZW50cy5cbkBtaXhpbiBtYXQtZ3JpZC1saXN0LXRoZW1lKCR0aGVtZSkgeyB9XG5cbkBtaXhpbiBtYXQtZ3JpZC1saXN0LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWdyaWQtdGlsZS1oZWFkZXIsXG4gIC5tYXQtZ3JpZC10aWxlLWZvb3RlciB7XG4gICAgQGluY2x1ZGUgbWF0LWxpbmUtYmFzZShtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pKTtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKTtcbiAgfVxufVxuXG5cblxuXG4vLyBJbmNsdWRlIHRoaXMgZW1wdHkgbWl4aW4gZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIG90aGVyIGNvbXBvbmVudHMuXG5AbWl4aW4gbWF0LWljb24tdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtaWNvbiB7XG4gICAgJi5tYXQtcHJpbWFyeSB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCB0ZXh0KTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCB0ZXh0KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWljb24tdHlwb2dyYXBoeSgkY29uZmlnKSB7IH1cblxuXG5cblxuXG4vLyBSZW5kZXJzIGEgZ3JhZGllbnQgZm9yIHNob3dpbmcgdGhlIGRhc2hlZCBsaW5lIHdoZW4gdGhlIGlucHV0IGlzIGRpc2FibGVkLlxuLy8gVW5saWtlIHVzaW5nIGEgYm9yZGVyLCBhIGdyYWRpZW50IGFsbG93cyB1cyB0byBhZGp1c3QgdGhlIHNwYWNpbmcgb2YgdGhlIGRvdHRlZCBsaW5lXG4vLyB0byBtYXRjaCB0aGUgTWF0ZXJpYWwgRGVzaWduIHNwZWMuXG5AbWl4aW4gbWF0LWNvbnRyb2wtZGlzYWJsZWQtdW5kZXJsaW5lKCRjb2xvcikge1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICRjb2xvciAwJSwgJGNvbG9yIDMzJSwgdHJhbnNwYXJlbnQgMCUpO1xuICBiYWNrZ3JvdW5kLXNpemU6IDRweCAxMDAlO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7XG59XG5cbi8vIEZpZ3VyZXMgb3V0IHRoZSBjb2xvciBvZiB0aGUgcGxhY2Vob2xkZXIgZm9yIGEgZm9ybSBjb250cm9sLlxuLy8gVXNlZCBwcmltYXJpbHkgdG8gcHJldmVudCB0aGUgdmFyaW91cyBmb3JtIGNvbnRyb2xzIGZyb21cbi8vIGJlY29taW5nIG91dCBvZiBzeW5jIHNpbmNlIHRoZXNlIGNvbG9ycyBhcmVuJ3QgaW4gYSBwYWxldHRlLlxuQGZ1bmN0aW9uIF9tYXQtY29udHJvbC1wbGFjZWhvbGRlci1jb2xvcigkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcbiAgQHJldHVybiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0LCBpZigkaXMtZGFyay10aGVtZSwgMC41LCAwLjQyKSk7XG59XG5cblxuLyogc3R5bGVsaW50LWRpc2FibGUgbWF0ZXJpYWwvbm8tcHJlZml4ZXMgKi9cbkBtaXhpbiB1c2VyLXNlbGVjdCgkdmFsdWUpIHtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogJHZhbHVlO1xuICAtbW96LXVzZXItc2VsZWN0OiAkdmFsdWU7XG4gIC1tcy11c2VyLXNlbGVjdDogJHZhbHVlO1xuICB1c2VyLXNlbGVjdDogJHZhbHVlO1xufVxuXG5AbWl4aW4gaW5wdXQtcGxhY2Vob2xkZXIge1xuICAmOjpwbGFjZWhvbGRlciB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cblxuICAmOjotbW96LXBsYWNlaG9sZGVyIHtcbiAgICBAY29udGVudDtcbiAgfVxuXG4gICY6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIEBjb250ZW50O1xuICB9XG5cbiAgJjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIEBjb250ZW50O1xuICB9XG59XG5cbkBtaXhpbiBjdXJzb3ItZ3JhYiB7XG4gIGN1cnNvcjogLXdlYmtpdC1ncmFiO1xuICBjdXJzb3I6IGdyYWI7XG59XG5cbkBtaXhpbiBjdXJzb3ItZ3JhYmJpbmcge1xuICBjdXJzb3I6IC13ZWJraXQtZ3JhYmJpbmc7XG4gIGN1cnNvcjogZ3JhYmJpbmc7XG59XG5cbkBtaXhpbiBiYWNrZmFjZS12aXNpYmlsaXR5KCR2YWx1ZSkge1xuICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6ICR2YWx1ZTtcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogJHZhbHVlO1xufVxuLyogc3R5bGVsaW50LWVuYWJsZSAqL1xuXG5cblxuQG1peGluIG1hdC1pbnB1dC10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlciB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1pbnB1dC1lbGVtZW50OmRpc2FibGVkLFxuICAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVyIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtaW5wdXQtZWxlbWVudCB7XG4gICAgY2FyZXQtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgdGV4dCk7XG5cbiAgICBAaW5jbHVkZSBpbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgICBjb2xvcjogX21hdC1jb250cm9sLXBsYWNlaG9sZGVyLWNvbG9yKCR0aGVtZSk7XG4gICAgfVxuXG4gICAgLy8gT24gZGFyayB0aGVtZXMgd2Ugc2V0IHRoZSBuYXRpdmUgYHNlbGVjdGAgY29sb3IgdG8gc29tZSBzaGFkZSBvZiB3aGl0ZSxcbiAgICAvLyBob3dldmVyIHRoZSBjb2xvciBwcm9wYWdhdGVzIHRvIGFsbCBvZiB0aGUgYG9wdGlvbmAgZWxlbWVudHMsIHdoaWNoIGFyZVxuICAgIC8vIGFsd2F5cyBvbiBhIHdoaXRlIGJhY2tncm91bmQgaW5zaWRlIHRoZSBkcm9wZG93biwgY2F1c2luZyB0aGVtIHRvIGJsZW5kIGluLlxuICAgIC8vIFNpbmNlIHdlIGNhbid0IGNoYW5nZSBiYWNrZ3JvdW5kIG9mIHRoZSBkcm9wZG93biwgd2UgbmVlZCB0byBleHBsaWNpdGx5XG4gICAgLy8gcmVzZXQgdGhlIGNvbG9yIG9mIHRoZSBvcHRpb25zIHRvIHNvbWV0aGluZyBkYXJrLlxuICAgIEBpZiAobWFwLWdldCgkdGhlbWUsIGlzLWRhcmspKSB7XG4gICAgICBvcHRpb24ge1xuICAgICAgICBjb2xvcjogJGRhcmstcHJpbWFyeS10ZXh0O1xuICAgICAgfVxuXG4gICAgICBvcHRpb246ZGlzYWJsZWQge1xuICAgICAgICBjb2xvcjogJGRhcmstZGlzYWJsZWQtdGV4dDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubWF0LWFjY2VudCAubWF0LWlucHV0LWVsZW1lbnQge1xuICAgIGNhcmV0LWNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgdGV4dCk7XG4gIH1cblxuICAubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50LFxuICAubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWlucHV0LWVsZW1lbnQge1xuICAgIGNhcmV0LWNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVyIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWlucHV0LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAvLyBUaGUgdW5pdC1sZXNzIGxpbmUtaGVpZ2h0IGZyb20gdGhlIGZvbnQgY29uZmlnLlxuICAkbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBpbnB1dCk7XG5cbiAgLy8gVGhlIGFtb3VudCBvZiBzcGFjZSBiZXR3ZWVuIHRoZSB0b3Agb2YgdGhlIGxpbmUgYW5kIHRoZSB0b3Agb2YgdGhlIGFjdHVhbCB0ZXh0XG4gIC8vIChhcyBhIGZyYWN0aW9uIG9mIHRoZSBmb250LXNpemUpLlxuICAkbGluZS1zcGFjaW5nOiAoJGxpbmUtaGVpZ2h0IC0gMSkgLyAyO1xuXG4gIC8vIDxpbnB1dD4gZWxlbWVudHMgc2VlbSB0byBoYXZlIHRoZWlyIGhlaWdodCBzZXQgc2xpZ2h0bHkgdG9vIGxhcmdlIG9uIFNhZmFyaSBjYXVzaW5nIHRoZSB0ZXh0IHRvXG4gIC8vIGJlIG1pc2FsaWduZWQgdy5yLnQuIHRoZSBwbGFjZWhvbGRlci4gQWRkaW5nIHRoaXMgbWFyZ2luIGNvcnJlY3RzIGl0LlxuICBpbnB1dC5tYXQtaW5wdXQtZWxlbWVudCB7XG4gICAgbWFyZ2luLXRvcDogLSRsaW5lLXNwYWNpbmcgKiAxZW07XG4gIH1cbn1cblxuXG5cblxuXG5cblxuQG1peGluIG1hdC1saXN0LXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtbGlzdC1iYXNlIHtcbiAgICAubWF0LWxpc3QtaXRlbSB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICB9XG5cbiAgICAubWF0LWxpc3Qtb3B0aW9uIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIH1cblxuICAgIC5tYXQtc3ViaGVhZGVyIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgICB9XG4gIH1cblxuICAubWF0LWxpc3QtaXRlbS1kaXNhYmxlZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBkaXNhYmxlZC1saXN0LW9wdGlvbik7XG4gIH1cblxuICAubWF0LWxpc3Qtb3B0aW9uLFxuICAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLFxuICAubWF0LWFjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIHtcbiAgICAmOmhvdmVyLCAmOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2hvdmVyJyk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb24ge1xuICAgICYsICY6aG92ZXIsICY6Zm9jdXMge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3ZlciwgMC4xMik7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtbGlzdC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgJGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG5cbiAgLm1hdC1saXN0LWl0ZW0ge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHk7XG4gIH1cblxuICAubWF0LWxpc3Qtb3B0aW9uIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5O1xuICB9XG5cbiAgLy8gRGVmYXVsdCBsaXN0XG4gIC5tYXQtbGlzdC1iYXNlIHtcbiAgICAubWF0LWxpc3QtaXRlbSB7XG4gICAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgc3ViaGVhZGluZy0yKTtcbiAgICAgIEBpbmNsdWRlIG1hdC1saW5lLWJhc2UobWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpKTtcbiAgICB9XG5cbiAgICAubWF0LWxpc3Qtb3B0aW9uIHtcbiAgICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBzdWJoZWFkaW5nLTIpO1xuICAgICAgQGluY2x1ZGUgbWF0LWxpbmUtYmFzZShtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSkpO1xuICAgIH1cblxuICAgIC5tYXQtc3ViaGVhZGVyIHtcbiAgICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgYm9keS0yKTtcbiAgICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTIpO1xuICAgICAgZm9udC13ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIERlbnNlIGxpc3RcbiAgLm1hdC1saXN0LWJhc2VbZGVuc2VdIHtcbiAgICAubWF0LWxpc3QtaXRlbSB7XG4gICAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbik7XG4gICAgICBAaW5jbHVkZSBtYXQtbGluZS1iYXNlKG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbikpO1xuICAgIH1cblxuICAgIC5tYXQtbGlzdC1vcHRpb24ge1xuICAgICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pO1xuICAgICAgQGluY2x1ZGUgbWF0LWxpbmUtYmFzZShtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pKTtcbiAgICB9XG5cbiAgICAubWF0LXN1YmhlYWRlciB7XG4gICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5O1xuICAgICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pO1xuICAgICAgZm9udC13ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTIpO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LW1lbnUtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1tZW51LXBhbmVsIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbig0LCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2NhcmQnKTtcbiAgfVxuXG4gIC5tYXQtbWVudS1pdGVtIHtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCAndGV4dCcpO1xuXG4gICAgJltkaXNhYmxlZF0ge1xuICAgICAgJiwgJjo6YWZ0ZXIge1xuICAgICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCAnZGlzYWJsZWQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubWF0LW1lbnUtaXRlbSAubWF0LWljb24tbm8tY29sb3IsXG4gIC5tYXQtbWVudS1pdGVtLXN1Ym1lbnUtdHJpZ2dlcjo6YWZ0ZXIge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsICdpY29uJyk7XG4gIH1cblxuICAubWF0LW1lbnUtaXRlbTpob3ZlcixcbiAgLm1hdC1tZW51LWl0ZW0uY2RrLXByb2dyYW0tZm9jdXNlZCxcbiAgLm1hdC1tZW51LWl0ZW0uY2RrLWtleWJvYXJkLWZvY3VzZWQsXG4gIC5tYXQtbWVudS1pdGVtLWhpZ2hsaWdodGVkIHtcbiAgICAmOm5vdChbZGlzYWJsZWRdKSB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdob3ZlcicpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LW1lbnUtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtbWVudS1pdGVtIHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBib2R5LTEpO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0xKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtcGFnaW5hdG9yLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuXG4gIC5tYXQtcGFnaW5hdG9yIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdjYXJkJyk7XG4gIH1cblxuICAubWF0LXBhZ2luYXRvcixcbiAgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXIge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtcGFnaW5hdG9yLWRlY3JlbWVudCxcbiAgLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50IHtcbiAgICBib3JkZXItdG9wOiAycHggc29saWQgbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCAnaWNvbicpO1xuICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkIG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgJ2ljb24nKTtcbiAgfVxuXG4gIC5tYXQtcGFnaW5hdG9yLWZpcnN0LFxuICAubWF0LXBhZ2luYXRvci1sYXN0IHtcbiAgICBib3JkZXItdG9wOiAycHggc29saWQgbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCAnaWNvbicpO1xuICB9XG5cbiAgLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0ge1xuICAgIC5tYXQtcGFnaW5hdG9yLWRlY3JlbWVudCxcbiAgICAubWF0LXBhZ2luYXRvci1pbmNyZW1lbnQsXG4gICAgLm1hdC1wYWdpbmF0b3ItZmlyc3QsXG4gICAgLm1hdC1wYWdpbmF0b3ItbGFzdCB7XG4gICAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgJ2Rpc2FibGVkJyk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtcGFnaW5hdG9yLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXBhZ2luYXRvcixcbiAgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXIge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGNhcHRpb24pO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LXByb2dyZXNzLWJhci10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG5cbiAgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZCB7XG4gICAgZmlsbDogbWF0LWNvbG9yKCRwcmltYXJ5LCBsaWdodGVyKTtcbiAgfVxuXG4gIC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCBsaWdodGVyKTtcbiAgfVxuXG4gIC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnkpO1xuICB9XG5cbiAgLm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCB7XG4gICAgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZCB7XG4gICAgICBmaWxsOiBtYXQtY29sb3IoJGFjY2VudCwgbGlnaHRlcik7XG4gICAgfVxuXG4gICAgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCBsaWdodGVyKTtcbiAgICB9XG5cbiAgICAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4ge1xuICAgIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmQge1xuICAgICAgZmlsbDogbWF0LWNvbG9yKCR3YXJuLCBsaWdodGVyKTtcbiAgICB9XG5cbiAgICAubWF0LXByb2dyZXNzLWJhci1idWZmZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCR3YXJuLCBsaWdodGVyKTtcbiAgICB9XG5cbiAgICAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHdhcm4pO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXByb2dyZXNzLWJhci10eXBvZ3JhcGh5KCRjb25maWcpIHsgfVxuXG5cblxuXG5cblxuQG1peGluIG1hdC1wcm9ncmVzcy1zcGlubmVyLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcblxuICAubWF0LXByb2dyZXNzLXNwaW5uZXIsIC5tYXQtc3Bpbm5lciB7XG4gICAgY2lyY2xlIHtcbiAgICAgIHN0cm9rZTogbWF0LWNvbG9yKCRwcmltYXJ5KTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQgY2lyY2xlIHtcbiAgICAgIHN0cm9rZTogbWF0LWNvbG9yKCRhY2NlbnQpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4gY2lyY2xlIHtcbiAgICAgIHN0cm9rZTogbWF0LWNvbG9yKCR3YXJuKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1wcm9ncmVzcy1zcGlubmVyLXR5cG9ncmFwaHkoJGNvbmZpZykgeyB9XG5cblxuXG5cblxuQG1peGluIF9tYXQtcmFkaW8tY29sb3IoJHBhbGV0dGUpIHtcbiAgJi5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUpO1xuICB9XG5cbiAgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsXG4gIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUpLFxuICAmLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsXG4gICY6YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1yYWRpby10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1yYWRpby1vdXRlci1jaXJjbGUge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LXJhZGlvLWJ1dHRvbiB7XG4gICAgJi5tYXQtcHJpbWFyeSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXJhZGlvLWNvbG9yKCRwcmltYXJ5KTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgQGluY2x1ZGUgX21hdC1yYWRpby1jb2xvcigkYWNjZW50KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtcmFkaW8tY29sb3IoJHdhcm4pO1xuICAgIH1cblxuICAgIC8vIFRoaXMgbmVlZHMgZXh0cmEgc3BlY2lmaWNpdHksIGJlY2F1c2UgdGhlIGNsYXNzZXMgYWJvdmUgYXJlIGNvbWJpbmVkXG4gICAgLy8gKGUuZy4gYC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnRgKSB3aGljaCBpbmNyZWFzZXMgdGhlaXIgc3BlY2lmaWNpdHkgYSBsb3QuXG4gICAgLy8gVE9ETzogY29uc2lkZXIgbWFraW5nIHRoZSBzZWxlY3RvcnMgaW50byBkZXNjZW5kYW50cyAoYC5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLWJ1dHRvbmApLlxuICAgICYubWF0LXJhZGlvLWRpc2FibGVkIHtcbiAgICAgICYubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGUsXG4gICAgICAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZCk7XG4gICAgICB9XG5cbiAgICAgIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQsXG4gICAgICAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQpO1xuICAgICAgfVxuXG4gICAgICAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnQge1xuICAgICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3dpdGNoIHRoaXMgdG8gYSBzb2xpZCBjb2xvciBzaW5jZSB3ZSdyZSB1c2luZyBgb3BhY2l0eWBcbiAgICAvLyB0byBjb250cm9sIGhvdyBvcGFxdWUgdGhlIHJpcHBsZSBzaG91bGQgYmUuXG4gICAgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXBfZ2V0KCRmb3JlZ3JvdW5kLCBiYXNlKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1yYWRpby10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1yYWRpby1idXR0b24ge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cbn1cblxuXG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LXNlbGVjdC10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG5cbiAgLm1hdC1zZWxlY3QtdmFsdWUge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG5cbiAgLm1hdC1zZWxlY3QtcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiBfbWF0LWNvbnRyb2wtcGxhY2Vob2xkZXItY29sb3IoJHRoZW1lKTtcbiAgfVxuXG4gIC5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LXZhbHVlIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LXNlbGVjdC1wYW5lbCB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbig0LCAkdGhlbWUpO1xuXG4gICAgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSkge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3ZlciwgMC4xMik7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkIHtcbiAgICAmLm1hdC1mb2N1c2VkIHtcbiAgICAgICYubWF0LXByaW1hcnkgLm1hdC1zZWxlY3QtYXJyb3cge1xuICAgICAgICBjb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCB0ZXh0KTtcbiAgICAgIH1cblxuICAgICAgJi5tYXQtYWNjZW50IC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICAgICAgY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCB0ZXh0KTtcbiAgICAgIH1cblxuICAgICAgJi5tYXQtd2FybiAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtaW52YWxpZCAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgICB9XG5cbiAgICAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNlbGVjdC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLy8gVGhlIHVuaXQtbGVzcyBsaW5lLWhlaWdodCBmcm9tIHRoZSBmb250IGNvbmZpZy5cbiAgJGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgaW5wdXQpO1xuXG4gIC5tYXQtc2VsZWN0IHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC1zZWxlY3QtdHJpZ2dlciB7XG4gICAgaGVpZ2h0OiAkbGluZS1oZWlnaHQgKiAxZW07XG4gIH1cbn1cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtc2lkZW5hdi10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgJGRyYXdlci1iYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGRpYWxvZyk7XG4gICRkcmF3ZXItY29udGFpbmVyLWJhY2tncm91bmQtY29sb3I6ICBtYXQtY29sb3IoJGJhY2tncm91bmQsIGJhY2tncm91bmQpO1xuICAkZHJhd2VyLXB1c2gtYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBkaWFsb2cpO1xuICAkZHJhd2VyLXNpZGUtYm9yZGVyOiBzb2xpZCAxcHggbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcblxuICAubWF0LWRyYXdlci1jb250YWluZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRkcmF3ZXItY29udGFpbmVyLWJhY2tncm91bmQtY29sb3I7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cblxuICAubWF0LWRyYXdlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGRyYXdlci1iYWNrZ3JvdW5kLWNvbG9yO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gICAgJi5tYXQtZHJhd2VyLXB1c2gge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGRyYXdlci1wdXNoLWJhY2tncm91bmQtY29sb3I7XG4gICAgfVxuXG4gICAgJjpub3QoLm1hdC1kcmF3ZXItc2lkZSkge1xuICAgICAgLy8gVGhlIGVsZXZhdGlvbiBvZiB6LTE2IGlzIG5vdGVkIGluIHRoZSBkZXNpZ24gc3BlY2lmaWNhdGlvbnMuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9tYXRlcmlhbC5pby9kZXNpZ24vY29tcG9uZW50cy9uYXZpZ2F0aW9uLWRyYXdlci5odG1sXG4gICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigxNiwgJHRoZW1lKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWRyYXdlci1zaWRlIHtcbiAgICBib3JkZXItcmlnaHQ6ICRkcmF3ZXItc2lkZS1ib3JkZXI7XG5cbiAgICAmLm1hdC1kcmF3ZXItZW5kIHtcbiAgICAgIGJvcmRlci1sZWZ0OiAkZHJhd2VyLXNpZGUtYm9yZGVyO1xuICAgICAgYm9yZGVyLXJpZ2h0OiBub25lO1xuICAgIH1cbiAgfVxuXG4gIFtkaXI9J3J0bCddIC5tYXQtZHJhd2VyLXNpZGUge1xuICAgIGJvcmRlci1sZWZ0OiAkZHJhd2VyLXNpZGUtYm9yZGVyO1xuICAgIGJvcmRlci1yaWdodDogbm9uZTtcblxuICAgICYubWF0LWRyYXdlci1lbmQge1xuICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gICAgICBib3JkZXItcmlnaHQ6ICRkcmF3ZXItc2lkZS1ib3JkZXI7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1kcmF3ZXItYmFja2Ryb3AubWF0LWRyYXdlci1zaG93biB7XG4gICAgJG9wYWNpdHk6IDAuNjtcbiAgICAkYmFja2Ryb3AtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCwgJG9wYWNpdHkpO1xuXG4gICAgQGlmICh0eXBlLW9mKCRiYWNrZHJvcC1jb2xvcikgPT0gY29sb3IpIHtcbiAgICAgIC8vIFdlIHVzZSBpbnZlcnQoKSBoZXJlIHRvIGhhdmUgdGhlIGRhcmtlbiB0aGUgYmFja2dyb3VuZCBjb2xvciBleHBlY3RlZCB0byBiZSB1c2VkLiBJZiB0aGVcbiAgICAgIC8vIGJhY2tncm91bmQgaXMgbGlnaHQsIHdlIHVzZSBhIGRhcmsgYmFja2Ryb3AuIElmIHRoZSBiYWNrZ3JvdW5kIGlzIGRhcmssXG4gICAgICAvLyB3ZSB1c2UgYSBsaWdodCBiYWNrZHJvcC5cbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGludmVydCgkYmFja2Ryb3AtY29sb3IpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICAvLyBJZiB3ZSBjb3VsZG4ndCByZXNvbHZlIHRoZSBiYWNrZHJvcCBjb2xvciB0byBhIGNvbG9yIHZhbHVlLCBmYWxsIGJhY2sgdG8gdXNpbmdcbiAgICAgIC8vIGBvcGFjaXR5YCB0byBtYWtlIGl0IG9wYXF1ZSBzaW5jZSBpdHMgZW5kIHZhbHVlIGNvdWxkIGJlIGEgc29saWQgY29sb3IuXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2Ryb3AtY29sb3I7XG4gICAgICBvcGFjaXR5OiAkb3BhY2l0eTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1zaWRlbmF2LXR5cG9ncmFwaHkoJGNvbmZpZykgeyB9XG5cblxuXG5cblxuXG5AbWl4aW4gX21hdC1zbGlkZS10b2dnbGUtY2hlY2tlZCgkcGFsZXR0ZSwgJHRodW1iLWNoZWNrZWQtaHVlKSB7XG4gICYubWF0LWNoZWNrZWQge1xuICAgIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgJHRodW1iLWNoZWNrZWQtaHVlKTtcbiAgICB9XG5cbiAgICAubWF0LXNsaWRlLXRvZ2dsZS1iYXIge1xuICAgICAgLy8gT3BhY2l0eSBpcyBkZXRlcm1pbmVkIGZyb20gdGhlIHNwZWNzIGZvciB0aGUgc2VsZWN0aW9uIGNvbnRyb2xzLlxuICAgICAgLy8gU2VlOiBodHRwczovL21hdGVyaWFsLmlvL2Rlc2lnbi9jb21wb25lbnRzL3NlbGVjdGlvbi1jb250cm9scy5odG1sI3NwZWNzXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsICR0aHVtYi1jaGVja2VkLWh1ZSwgMC41NCk7XG4gICAgfVxuXG4gICAgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgICAvLyBTZXQgbm8gb3BhY2l0eSBmb3IgdGhlIHJpcHBsZXMgYmVjYXVzZSB0aGUgcmlwcGxlIG9wYWNpdHkgd2lsbCBiZSBhZGp1c3RlZCBkeW5hbWljYWxseVxuICAgICAgLy8gYmFzZWQgb24gdGhlIHR5cGUgb2YgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc2xpZGUtdG9nZ2xlIChlLmcuIGZvciBob3ZlciwgZm9jdXMpXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsICR0aHVtYi1jaGVja2VkLWh1ZSk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtc2xpZGUtdG9nZ2xlLXRoZW1lKCR0aGVtZSkge1xuICAkaXMtZGFyazogbWFwX2dldCgkdGhlbWUsIGlzLWRhcmspO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAvLyBDb2xvciBodWVzIGFyZSBiYXNlZCBvbiB0aGUgc3BlY3Mgd2hpY2ggYnJpZWZseSBzaG93IHRoZSBodWVzIHRoYXQgYXJlIGFwcGxpZWQgdG8gYSBzd2l0Y2guXG4gIC8vIFRoZSAyMDE4IHNwZWNzIG5vIGxvbmdlciBkZXNjcmliZSBob3cgZGFyayBzd2l0Y2hlcyBzaG91bGQgbG9vayBsaWtlLiBEdWUgdG8gdGhlIGxhY2sgb2ZcbiAgLy8gaW5mb3JtYXRpb24gZm9yIGRhcmsgdGhlbWVkIHN3aXRjaGVzLCB3ZSBwYXJ0aWFsbHkga2VlcCB0aGUgb2xkIGJlaGF2aW9yIHRoYXQgaXMgYmFzZWQgb25cbiAgLy8gdGhlIHByZXZpb3VzIHNwZWNpZmljYXRpb25zLiBGb3IgdGhlIGNoZWNrZWQgY29sb3Igd2UgYWx3YXlzIHVzZSB0aGUgYGRlZmF1bHRgIGh1ZSBiZWNhdXNlXG4gIC8vIHRoYXQgZm9sbG93cyBNREMgYW5kIGFsc28gbWFrZXMgaXQgZWFzaWVyIGZvciBwZW9wbGUgdG8gY3JlYXRlIGEgY3VzdG9tIHRoZW1lIHdpdGhvdXQgbmVlZGluZ1xuICAvLyB0byBzcGVjaWZ5IGVhY2ggaHVlIGluZGl2aWR1YWxseS5cbiAgJHRodW1iLXVuY2hlY2tlZC1odWU6IGlmKCRpcy1kYXJrLCA0MDAsIDUwKTtcbiAgJHRodW1iLWNoZWNrZWQtaHVlOiBkZWZhdWx0O1xuXG4gICRiYXItdW5jaGVja2VkLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkKTtcbiAgJHJpcHBsZS11bmNoZWNrZWQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgYmFzZSk7XG5cbiAgLm1hdC1zbGlkZS10b2dnbGUge1xuICAgIEBpbmNsdWRlIF9tYXQtc2xpZGUtdG9nZ2xlLWNoZWNrZWQoJGFjY2VudCwgJHRodW1iLWNoZWNrZWQtaHVlKTtcblxuICAgICYubWF0LXByaW1hcnkge1xuICAgICAgQGluY2x1ZGUgX21hdC1zbGlkZS10b2dnbGUtY2hlY2tlZCgkcHJpbWFyeSwgJHRodW1iLWNoZWNrZWQtaHVlKTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtc2xpZGUtdG9nZ2xlLWNoZWNrZWQoJHdhcm4sICR0aHVtYi1jaGVja2VkLWh1ZSk7XG4gICAgfVxuXG4gICAgJjpub3QoLm1hdC1jaGVja2VkKSAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAgIC8vIFNldCBubyBvcGFjaXR5IGZvciB0aGUgcmlwcGxlcyBiZWNhdXNlIHRoZSByaXBwbGUgb3BhY2l0eSB3aWxsIGJlIGFkanVzdGVkIGR5bmFtaWNhbGx5XG4gICAgICAvLyBiYXNlZCBvbiB0aGUgdHlwZSBvZiBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzbGlkZS10b2dnbGUgKGUuZy4gZm9yIGhvdmVyLCBmb2N1cylcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRyaXBwbGUtdW5jaGVja2VkLWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigxLCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkbWF0LWdyZXksICR0aHVtYi11bmNoZWNrZWQtaHVlKTtcbiAgfVxuXG4gIC5tYXQtc2xpZGUtdG9nZ2xlLWJhciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGJhci11bmNoZWNrZWQtY29sb3I7XG4gIH1cbn1cblxuQG1peGluIG1hdC1zbGlkZS10b2dnbGUtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnQge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gX21hdC1zbGlkZXItaW5uZXItY29udGVudC10aGVtZSgkcGFsZXR0ZSkge1xuICAubWF0LXNsaWRlci10cmFjay1maWxsLFxuICAubWF0LXNsaWRlci10aHVtYixcbiAgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSk7XG4gIH1cblxuICAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0IHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNsaWRlci10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgJG1hdC1zbGlkZXItb2ZmLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNsaWRlci1vZmYpO1xuICAkbWF0LXNsaWRlci1vZmYtZm9jdXNlZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzbGlkZXItb2ZmLWFjdGl2ZSk7XG4gICRtYXQtc2xpZGVyLWRpc2FibGVkLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNsaWRlci1vZmYpO1xuICAkbWF0LXNsaWRlci1sYWJlbGVkLW1pbi12YWx1ZS10aHVtYi1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzbGlkZXItbWluKTtcbiAgJG1hdC1zbGlkZXItbGFiZWxlZC1taW4tdmFsdWUtdGh1bWItbGFiZWwtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2xpZGVyLW9mZik7XG4gICRtYXQtc2xpZGVyLXRpY2stb3BhY2l0eTogMC43O1xuICAkbWF0LXNsaWRlci10aWNrLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGJhc2UsICRtYXQtc2xpZGVyLXRpY2stb3BhY2l0eSk7XG4gICRtYXQtc2xpZGVyLXRpY2stc2l6ZTogMnB4O1xuXG4gIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRtYXQtc2xpZGVyLW9mZi1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtcHJpbWFyeSB7XG4gICAgQGluY2x1ZGUgX21hdC1zbGlkZXItaW5uZXItY29udGVudC10aGVtZSgkcHJpbWFyeSk7XG4gIH1cblxuICAubWF0LWFjY2VudCB7XG4gICAgQGluY2x1ZGUgX21hdC1zbGlkZXItaW5uZXItY29udGVudC10aGVtZSgkYWNjZW50KTtcbiAgfVxuXG4gIC5tYXQtd2FybiB7XG4gICAgQGluY2x1ZGUgX21hdC1zbGlkZXItaW5uZXItY29udGVudC10aGVtZSgkd2Fybik7XG4gIH1cblxuICAubWF0LXNsaWRlci1mb2N1cy1yaW5nIHtcbiAgICAkb3BhY2l0eTogMC4yO1xuICAgICRjb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIGRlZmF1bHQsICRvcGFjaXR5KTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3I7XG5cbiAgICAvLyBgbWF0LWNvbG9yYCB1c2VzIGByZ2JhYCBmb3IgdGhlIG9wYWNpdHkgd2hpY2ggd29uJ3Qgd29yayB3aXRoXG4gICAgLy8gQ1NTIHZhcmlhYmxlcyBzbyB3ZSBuZWVkIHRvIHVzZSBgb3BhY2l0eWAgYXMgYSBmYWxsYmFjay5cbiAgICBAaWYgKHR5cGUtb2YoJGNvbG9yKSAhPSBjb2xvcikge1xuICAgICAgb3BhY2l0eTogJG9wYWNpdHk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbGlkZXI6aG92ZXIsXG4gIC5jZGstZm9jdXNlZCB7XG4gICAgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbWF0LXNsaWRlci1vZmYtZm9jdXNlZC1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAubWF0LXNsaWRlci1kaXNhYmxlZCB7XG4gICAgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCxcbiAgICAubWF0LXNsaWRlci10cmFjay1maWxsLFxuICAgIC5tYXQtc2xpZGVyLXRodW1iIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRtYXQtc2xpZGVyLWRpc2FibGVkLWNvbG9yO1xuICAgIH1cblxuICAgICY6aG92ZXIge1xuICAgICAgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRtYXQtc2xpZGVyLWRpc2FibGVkLWNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2xpZGVyLW1pbi12YWx1ZSB7XG4gICAgLm1hdC1zbGlkZXItZm9jdXMtcmluZyB7XG4gICAgICAkb3BhY2l0eTogMC4xMjtcbiAgICAgICRjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBiYXNlLCAkb3BhY2l0eSk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3I7XG5cbiAgICAgIC8vIGBtYXQtY29sb3JgIHVzZXMgYHJnYmFgIGZvciB0aGUgb3BhY2l0eSB3aGljaCB3b24ndCB3b3JrIHdpdGhcbiAgICAgIC8vIENTUyB2YXJpYWJsZXMgc28gd2UgbmVlZCB0byB1c2UgYG9wYWNpdHlgIGFzIGEgZmFsbGJhY2suXG4gICAgICBAaWYgKHR5cGUtb2YoJGNvbG9yKSAhPSBjb2xvcikge1xuICAgICAgICBvcGFjaXR5OiAkb3BhY2l0eTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyB7XG4gICAgICAubWF0LXNsaWRlci10aHVtYixcbiAgICAgIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG1hdC1zbGlkZXItbGFiZWxlZC1taW4tdmFsdWUtdGh1bWItY29sb3I7XG4gICAgICB9XG5cbiAgICAgICYuY2RrLWZvY3VzZWQge1xuICAgICAgICAubWF0LXNsaWRlci10aHVtYixcbiAgICAgICAgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRtYXQtc2xpZGVyLWxhYmVsZWQtbWluLXZhbHVlLXRodW1iLWxhYmVsLWNvbG9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykge1xuICAgICAgLm1hdC1zbGlkZXItdGh1bWIge1xuICAgICAgICBib3JkZXItY29sb3I6ICRtYXQtc2xpZGVyLW9mZi1jb2xvcjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXIsXG4gICAgICAmLmNkay1mb2N1c2VkIHtcbiAgICAgICAgLm1hdC1zbGlkZXItdGh1bWIge1xuICAgICAgICAgIGJvcmRlci1jb2xvcjogJG1hdC1zbGlkZXItb2ZmLWZvY3VzZWQtY29sb3I7XG4gICAgICAgIH1cblxuICAgICAgICAmLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWIge1xuICAgICAgICAgIGJvcmRlci1jb2xvcjogJG1hdC1zbGlkZXItZGlzYWJsZWQtY29sb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubWF0LXNsaWRlci1oYXMtdGlja3MgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXIge1xuICAgIGJvcmRlci1jb2xvcjogJG1hdC1zbGlkZXItdGljay1jb2xvcjtcblxuICAgIC8vIGBtYXQtY29sb3JgIHVzZXMgYHJnYmFgIGZvciB0aGUgb3BhY2l0eSB3aGljaCB3b24ndCB3b3JrIHdpdGhcbiAgICAvLyBDU1MgdmFyaWFibGVzIHNvIHdlIG5lZWQgdG8gdXNlIGBvcGFjaXR5YCBhcyBhIGZhbGxiYWNrLlxuICAgIEBpZiAodHlwZS1vZigkbWF0LXNsaWRlci10aWNrLWNvbG9yKSAhPSBjb2xvcikge1xuICAgICAgb3BhY2l0eTogJG1hdC1zbGlkZXItdGljay1vcGFjaXR5O1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGlja3Mge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICRtYXQtc2xpZGVyLXRpY2stY29sb3IsXG4gICAgICAgICRtYXQtc2xpZGVyLXRpY2stY29sb3IgJG1hdC1zbGlkZXItdGljay1zaXplLCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCk7XG4gICAgLy8gRmlyZWZveCBkb2Vzbid0IGRyYXcgdGhlIGdyYWRpZW50IGNvcnJlY3RseSB3aXRoICd0byByaWdodCdcbiAgICAvLyAoc2VlIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTQzMTkpLlxuICAgIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgwLjAwMDFkZWcsICRtYXQtc2xpZGVyLXRpY2stY29sb3IsXG4gICAgICAgICRtYXQtc2xpZGVyLXRpY2stY29sb3IgJG1hdC1zbGlkZXItdGljay1zaXplLCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCk7XG5cbiAgICAvLyBgbWF0LWNvbG9yYCB1c2VzIGByZ2JhYCBmb3IgdGhlIG9wYWNpdHkgd2hpY2ggd29uJ3Qgd29yayB3aXRoXG4gICAgLy8gQ1NTIHZhcmlhYmxlcyBzbyB3ZSBuZWVkIHRvIHVzZSBgb3BhY2l0eWAgYXMgYSBmYWxsYmFjay5cbiAgICBAaWYgKHR5cGUtb2YoJG1hdC1zbGlkZXItdGljay1jb2xvcikgIT0gY29sb3IpIHtcbiAgICAgIG9wYWNpdHk6ICRtYXQtc2xpZGVyLXRpY2stb3BhY2l0eTtcbiAgICB9XG4gIH1cblxuICAubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrcyB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICRtYXQtc2xpZGVyLXRpY2stY29sb3IsXG4gICAgICAgICRtYXQtc2xpZGVyLXRpY2stY29sb3IgJG1hdC1zbGlkZXItdGljay1zaXplLCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCk7XG5cbiAgICAvLyBgbWF0LWNvbG9yYCB1c2VzIGByZ2JhYCBmb3IgdGhlIG9wYWNpdHkgd2hpY2ggd29uJ3Qgd29yayB3aXRoXG4gICAgLy8gQ1NTIHZhcmlhYmxlcyBzbyB3ZSBuZWVkIHRvIHVzZSBgb3BhY2l0eWAgYXMgYSBmYWxsYmFjay5cbiAgICBAaWYgKHR5cGUtb2YoJG1hdC1zbGlkZXItdGljay1jb2xvcikgIT0gY29sb3IpIHtcbiAgICAgIG9wYWNpdHk6ICRtYXQtc2xpZGVyLXRpY2stb3BhY2l0eTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1zbGlkZXItdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHQge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMik7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuQG1peGluIG1hdC1zdGVwcGVyLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuXG4gIC5tYXQtc3RlcC1oZWFkZXIge1xuICAgICYuY2RrLWtleWJvYXJkLWZvY3VzZWQsXG4gICAgJi5jZGstcHJvZ3JhbS1mb2N1c2VkLFxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3Zlcik7XG4gICAgfVxuXG4gICAgLy8gT24gdG91Y2ggZGV2aWNlcyB0aGUgOmhvdmVyIHN0YXRlIHdpbGwgbGluZ2VyIG9uIHRoZSBlbGVtZW50IGFmdGVyIGEgdGFwLlxuICAgIC8vIFJlc2V0IGl0IHZpYSBgQG1lZGlhYCBhZnRlciB0aGUgZGVjbGFyYXRpb24sIGJlY2F1c2UgdGhlIG1lZGlhIHF1ZXJ5IGlzbid0XG4gICAgLy8gc3VwcG9ydGVkIGJ5IGFsbCBicm93c2VycyB5ZXQuXG4gICAgQG1lZGlhIChob3Zlcjogbm9uZSkge1xuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLm1hdC1zdGVwLWxhYmVsLFxuICAgIC5tYXQtc3RlcC1vcHRpb25hbCB7XG4gICAgICAvLyBUT0RPKGpvc2VwaHBlcnJvdHQpOiBVcGRhdGUgdG8gdXNpbmcgYSBjb3JyZWN0ZWQgZGlzYWJsZWQtdGV4dCBjb250cmFzdFxuICAgICAgLy8gaW5zdGVhZCBvZiBzZWNvbmRhcnktdGV4dC5cbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgICB9XG5cbiAgICAubWF0LXN0ZXAtaWNvbiB7XG4gICAgICAvLyBUT0RPKGpvc2VwaHBlcnJvdHQpOiBVcGRhdGUgdG8gdXNpbmcgYSBjb3JyZWN0ZWQgZGlzYWJsZWQtdGV4dCBjb250cmFzdFxuICAgICAgLy8gaW5zdGVhZCBvZiBzZWNvbmRhcnktdGV4dC5cbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgZGVmYXVsdC1jb250cmFzdCk7XG4gICAgfVxuXG4gICAgLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsXG4gICAgLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSxcbiAgICAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgICB9XG5cbiAgICAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lcnJvciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICAgIH1cblxuICAgIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1hY3RpdmUge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgfVxuXG4gICAgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWVycm9yIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLCAubWF0LXN0ZXBwZXItdmVydGljYWwge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gIH1cblxuICAubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3JlIHtcbiAgICBib3JkZXItbGVmdC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxuXG4gIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3JlLFxuICAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLFxuICAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5lIHtcbiAgICBib3JkZXItdG9wLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtc3RlcHBlci10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1zdGVwcGVyLXZlcnRpY2FsLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbCB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtc3RlcC1sYWJlbCB7XG4gICAgZm9udDoge1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0xKTtcbiAgICB9O1xuICB9XG5cbiAgLm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvciB7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgfVxuXG4gIC5tYXQtc3RlcC1sYWJlbC1lcnJvciB7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMik7XG4gIH1cblxuICAubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWQge1xuICAgIGZvbnQ6IHtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0yKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMik7XG4gICAgfTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNvcnQtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1zb3J0LWhlYWRlci1hcnJvdyB7XG4gICAgJHRhYmxlLWJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2NhcmQnKTtcbiAgICAkdGV4dC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG5cbiAgICAvLyBCZWNhdXNlIHRoZSBhcnJvdyBpcyBtYWRlIHVwIG9mIG11bHRpcGxlIGVsZW1lbnRzIHRoYXQgYXJlIHN0YWNrZWQgb24gdG9wIG9mIGVhY2ggb3RoZXIsXG4gICAgLy8gd2UgY2FuJ3QgdXNlIHRoZSBzZW1pLXRyYXNwYXJlbnQgY29sb3IgZnJvbSB0aGUgdGhlbWUgZGlyZWN0bHkuIElmIHRoZSB2YWx1ZSBpcyBhIGNvbG9yXG4gICAgLy8gKnR5cGUqLCB3ZSBjb252ZXJ0IGl0IGludG8gYSBzb2xpZCBjb2xvciBieSB0YWtpbmcgdGhlIG9wYWNpdHkgZnJvbSB0aGUgcmdiYSB2YWx1ZSBhbmRcbiAgICAvLyB1c2luZyB0aGUgdmFsdWUgdG8gZGV0ZXJtaW5lIHRoZSBwZXJjZW50YWdlIG9mIHRoZSBiYWNrZ3JvdW5kIHRvIHB1dCBpbnRvIGZvcmVncm91bmRcbiAgICAvLyB3aGVuIG1peGluZyB0aGUgY29sb3JzIHRvZ2V0aGVyLiBPdGhlcndpc2UsIGlmIGl0IHJlc29sdmVzIHRvIHNvbWV0aGluZyBkaWZmZXJlbnRcbiAgICAvLyAoZS5nLiBpdCByZXNvbHZlcyB0byBhIENTUyB2YXJpYWJsZSksIHdlIHVzZSB0aGUgY29sb3IgZGlyZWN0bHkuXG4gICAgQGlmICh0eXBlLW9mKCR0YWJsZS1iYWNrZ3JvdW5kKSA9PSBjb2xvciBhbmQgdHlwZS1vZigkdGV4dC1jb2xvcikgPT0gY29sb3IpIHtcbiAgICAgICR0ZXh0LW9wYWNpdHk6IG9wYWNpdHkoJHRleHQtY29sb3IpO1xuICAgICAgY29sb3I6IG1peCgkdGFibGUtYmFja2dyb3VuZCwgcmdiYSgkdGV4dC1jb2xvciwgMSksICgxIC0gJHRleHQtb3BhY2l0eSkgKiAxMDAlKTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgY29sb3I6ICR0ZXh0LWNvbG9yO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNvcnQtdHlwb2dyYXBoeSgkY29uZmlnKSB7IH1cblxuXG5cblxuXG5AbWl4aW4gbWF0LXRhYnMtdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkaGVhZGVyLWJvcmRlcjogMXB4IHNvbGlkIG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG5cbiAgLm1hdC10YWItbmF2LWJhcixcbiAgLm1hdC10YWItaGVhZGVyIHtcbiAgICBib3JkZXItYm90dG9tOiAkaGVhZGVyLWJvcmRlcjtcbiAgfVxuXG4gIC5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciB7XG4gICAgLm1hdC10YWItbmF2LWJhcixcbiAgICAubWF0LXRhYi1oZWFkZXIge1xuICAgICAgYm9yZGVyLXRvcDogJGhlYWRlci1ib3JkZXI7XG4gICAgICBib3JkZXItYm90dG9tOiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtdGFiLWxhYmVsLCAubWF0LXRhYi1saW5rIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAgICYubWF0LXRhYi1kaXNhYmxlZCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgICB9XG4gIH1cblxuICAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cblxuICAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gIH1cblxuICAvLyBSZW1vdmUgaGVhZGVyIGJvcmRlciB3aGVuIHRoZXJlIGlzIGEgYmFja2dyb3VuZCBjb2xvclxuICAubWF0LXRhYi1ncm91cFtjbGFzcyo9J21hdC1iYWNrZ3JvdW5kLSddIC5tYXQtdGFiLWhlYWRlcixcbiAgLm1hdC10YWItbmF2LWJhcltjbGFzcyo9J21hdC1iYWNrZ3JvdW5kLSddIHtcbiAgICBib3JkZXItYm90dG9tOiBub25lO1xuICAgIGJvcmRlci10b3A6IG5vbmU7XG4gIH1cblxuICAubWF0LXRhYi1ncm91cCwgLm1hdC10YWItbmF2LWJhciB7XG4gICAgJHRoZW1lLWNvbG9yczogKFxuICAgICAgcHJpbWFyeTogJHByaW1hcnksXG4gICAgICBhY2NlbnQ6ICRhY2NlbnQsXG4gICAgICB3YXJuOiAkd2FyblxuICAgICk7XG5cbiAgICBAZWFjaCAkbmFtZSwgJGNvbG9yIGluICR0aGVtZS1jb2xvcnMge1xuICAgICAgLy8gU2V0IHRoZSBmb3JlZ3JvdW5kIGNvbG9yIG9mIHRoZSB0YWJzXG4gICAgICAmLm1hdC0jeyRuYW1lfSB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtdGFiLWxhYmVsLWZvY3VzKCRjb2xvcik7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtaW5rLWJhcigkY29sb3IpO1xuXG4gICAgICAgIC8vIE92ZXJyaWRlIGluayBiYXIgd2hlbiBiYWNrZ3JvdW5kIGNvbG9yIGlzIHRoZSBzYW1lXG4gICAgICAgICYubWF0LWJhY2tncm91bmQtI3skbmFtZX0ge1xuICAgICAgICAgIEBpbmNsdWRlIF9tYXQtaW5rLWJhcigkY29sb3IsIGRlZmF1bHQtY29udHJhc3QpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGVhY2ggJG5hbWUsICRjb2xvciBpbiAkdGhlbWUtY29sb3JzIHtcbiAgICAgIC8vIFNldCBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSB0YWJzIGFuZCBvdmVycmlkZSBmb2N1cyBjb2xvclxuICAgICAgJi5tYXQtYmFja2dyb3VuZC0jeyRuYW1lfSB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtdGFiLWxhYmVsLWZvY3VzKCRjb2xvcik7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtdGFicy1iYWNrZ3JvdW5kKCRjb2xvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBfbWF0LWluay1iYXIoJGNvbG9yLCAkaHVlOiBkZWZhdWx0KSB7XG4gIC5tYXQtaW5rLWJhciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRjb2xvciwgJGh1ZSk7XG4gIH1cbn1cblxuQG1peGluIF9tYXQtdGFiLWxhYmVsLWZvY3VzKCR0YWItZm9jdXMtY29sb3IpIHtcbiAgLm1hdC10YWItbGFiZWwsXG4gIC5tYXQtdGFiLWxpbmsge1xuICAgICYuY2RrLWtleWJvYXJkLWZvY3VzZWQsXG4gICAgJi5jZGstcHJvZ3JhbS1mb2N1c2VkIHtcbiAgICAgICY6bm90KC5tYXQtdGFiLWRpc2FibGVkKSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkdGFiLWZvY3VzLWNvbG9yLCBsaWdodGVyLCAwLjMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gX21hdC10YWJzLWJhY2tncm91bmQoJGJhY2tncm91bmQtY29sb3IpIHtcbiAgLy8gU2V0IGJhY2tncm91bmQgY29sb3IgZm9yIHRoZSB0YWIgZ3JvdXBcbiAgLm1hdC10YWItaGVhZGVyLCAubWF0LXRhYi1saW5rcywgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24ge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZC1jb2xvcik7XG4gIH1cblxuICAvLyBTZXQgbGFiZWxzIHRvIGNvbnRyYXN0IGFnYWluc3QgYmFja2dyb3VuZFxuICAubWF0LXRhYi1sYWJlbCwgLm1hdC10YWItbGluayB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZC1jb2xvciwgZGVmYXVsdC1jb250cmFzdCk7XG5cbiAgICAmLm1hdC10YWItZGlzYWJsZWQge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZC1jb2xvciwgZGVmYXVsdC1jb250cmFzdCwgMC40KTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXQgcGFnaW5hdGlvbiBjaGV2cm9ucyB0byBjb250cmFzdCBiYWNrZ3JvdW5kXG4gIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24ge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLWNvbG9yLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgfVxuXG4gIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24ge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLWNvbG9yLCBkZWZhdWx0LWNvbnRyYXN0LCAwLjQpO1xuICB9XG5cbiAgLy8gU2V0IHJpcHBsZXMgY29sb3IgdG8gYmUgdGhlIGNvbnRyYXN0IGNvbG9yIG9mIHRoZSBuZXcgYmFja2dyb3VuZC4gT3RoZXJ3aXNlIHRoZSByaXBwbGVcbiAgLy8gY29sb3Igd2lsbCBiZSBiYXNlZCBvbiB0aGUgYXBwIGJhY2tncm91bmQgY29sb3IuXG4gIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZC1jb2xvciwgZGVmYXVsdC1jb250cmFzdCwgMC4xMik7XG4gIH1cbn1cblxuQG1peGluIG1hdC10YWJzLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXRhYi1ncm91cCB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtdGFiLWxhYmVsLCAubWF0LXRhYi1saW5rIHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBidXR0b24pO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBidXR0b24pO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYnV0dG9uKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cbkBtaXhpbiBfbWF0LXRvb2xiYXItY29sb3IoJHBhbGV0dGUpIHtcbiAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRwYWxldHRlKTtcbiAgY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgZGVmYXVsdC1jb250cmFzdCk7XG59XG5cbkBtaXhpbiBfbWF0LXRvb2xiYXItZm9ybS1maWVsZC1vdmVycmlkZXMge1xuICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lLFxuICAubWF0LWZvcm0tZmllbGQtcmlwcGxlLFxuICAubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLFxuICAubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLFxuICAubWF0LXNlbGVjdC12YWx1ZSxcbiAgLm1hdC1zZWxlY3QtYXJyb3csXG4gIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgY29sb3I6IGluaGVyaXQ7XG4gIH1cblxuICAubWF0LWlucHV0LWVsZW1lbnQge1xuICAgIGNhcmV0LWNvbG9yOiBjdXJyZW50Q29sb3I7XG4gIH1cbn1cblxuQG1peGluIG1hdC10b29sYmFyLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LXRvb2xiYXIge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgYXBwLWJhcik7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgICAmLm1hdC1wcmltYXJ5IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdG9vbGJhci1jb2xvcigkcHJpbWFyeSk7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdG9vbGJhci1jb2xvcigkYWNjZW50KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdG9vbGJhci1jb2xvcigkd2Fybik7XG4gICAgfVxuXG4gICAgQGluY2x1ZGUgX21hdC10b29sYmFyLWZvcm0tZmllbGQtb3ZlcnJpZGVzO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtdG9vbGJhci10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC10b29sYmFyLFxuICAubWF0LXRvb2xiYXIgaDEsXG4gIC5tYXQtdG9vbGJhciBoMixcbiAgLm1hdC10b29sYmFyIGgzLFxuICAubWF0LXRvb2xiYXIgaDQsXG4gIC5tYXQtdG9vbGJhciBoNSxcbiAgLm1hdC10b29sYmFyIGg2IHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgdGl0bGUpO1xuICAgIG1hcmdpbjogMDtcbiAgfVxufVxuXG5cblxuXG5cbiRtYXQtdG9vbHRpcC10YXJnZXQtaGVpZ2h0OiAyMnB4O1xuJG1hdC10b29sdGlwLWZvbnQtc2l6ZTogMTBweDtcbiRtYXQtdG9vbHRpcC12ZXJ0aWNhbC1wYWRkaW5nOiAoJG1hdC10b29sdGlwLXRhcmdldC1oZWlnaHQgLSAkbWF0LXRvb2x0aXAtZm9udC1zaXplKSAvIDI7XG5cbiRtYXQtdG9vbHRpcC1oYW5kc2V0LXRhcmdldC1oZWlnaHQ6IDMwcHg7XG4kbWF0LXRvb2x0aXAtaGFuZHNldC1mb250LXNpemU6IDE0cHg7XG4kbWF0LXRvb2x0aXAtaGFuZHNldC12ZXJ0aWNhbC1wYWRkaW5nOlxuICAgICgkbWF0LXRvb2x0aXAtaGFuZHNldC10YXJnZXQtaGVpZ2h0IC0gJG1hdC10b29sdGlwLWhhbmRzZXQtZm9udC1zaXplKSAvIDI7XG5cbkBtaXhpbiBtYXQtdG9vbHRpcC10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcblxuICAubWF0LXRvb2x0aXAge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgdG9vbHRpcCwgMC45KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXRvb2x0aXAtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtdG9vbHRpcCB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgICBmb250LXNpemU6ICRtYXQtdG9vbHRpcC1mb250LXNpemU7XG4gICAgcGFkZGluZy10b3A6ICRtYXQtdG9vbHRpcC12ZXJ0aWNhbC1wYWRkaW5nO1xuICAgIHBhZGRpbmctYm90dG9tOiAkbWF0LXRvb2x0aXAtdmVydGljYWwtcGFkZGluZztcbiAgfVxuXG4gIC5tYXQtdG9vbHRpcC1oYW5kc2V0IHtcbiAgICBmb250LXNpemU6ICRtYXQtdG9vbHRpcC1oYW5kc2V0LWZvbnQtc2l6ZTtcbiAgICBwYWRkaW5nLXRvcDogJG1hdC10b29sdGlwLWhhbmRzZXQtdmVydGljYWwtcGFkZGluZztcbiAgICBwYWRkaW5nLWJvdHRvbTogJG1hdC10b29sdGlwLWhhbmRzZXQtdmVydGljYWwtcGFkZGluZztcbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtc25hY2stYmFyLXRoZW1lKCR0aGVtZSkge1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcblxuICAubWF0LXNuYWNrLWJhci1jb250YWluZXIge1xuICAgIC8vIFVzZSB0aGUgcHJpbWFyeSB0ZXh0IG9uIHRoZSBkYXJrIHRoZW1lLCBldmVuIHRob3VnaCB0aGUgbGlnaHRlciBvbmUgdXNlc1xuICAgIC8vIGEgc2Vjb25kYXJ5LCBiZWNhdXNlIHRoZSBjb250cmFzdCBvbiB0aGUgbGlnaHQgcHJpbWFyeSB0ZXh0IGlzIHBvb3IuXG4gICAgY29sb3I6IGlmKCRpcy1kYXJrLXRoZW1lLCAkZGFyay1wcmltYXJ5LXRleHQsICRsaWdodC1zZWNvbmRhcnktdGV4dCk7XG4gICAgYmFja2dyb3VuZDogaWYoJGlzLWRhcmstdGhlbWUsIG1hcC1nZXQoJG1hdC1ncmV5LCA1MCksICMzMjMyMzIpO1xuXG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oNiwgJHRoZW1lKTtcbiAgfVxuXG4gIC5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbiB7XG4gICAgY29sb3I6IGlmKCRpcy1kYXJrLXRoZW1lLCBpbmhlcml0LCBtYXQtY29sb3IoJGFjY2VudCwgdGV4dCkpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtc25hY2stYmFyLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXNpbXBsZS1zbmFja2JhciB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgYm9keS0xKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKTtcbiAgICB9XG4gIH1cblxuICAubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb24ge1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogaW5oZXJpdDtcbiAgICAgIHNpemU6IGluaGVyaXQ7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBidXR0b24pO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8vIFRoZW1lIHN0eWxlcyB0aGF0IG9ubHkgYXBwbHkgdG8gdGhlIGZpbGwgYXBwZWFyYW5jZSBvZiB0aGUgZm9ybS1maWVsZC5cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLWZpbGwtdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG5cbiAgJGZpbGwtYmFja2dyb3VuZDogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBiYXNlLCBpZigkaXMtZGFyay10aGVtZSwgMC4xLCAwLjA0KSk7XG4gICRmaWxsLWRpc2FibGVkLWJhY2tncm91bmQ6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgYmFzZSwgaWYoJGlzLWRhcmstdGhlbWUsIDAuMDUsIDAuMDIpKTtcbiAgJHVuZGVybGluZS1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyLCBpZigkaXMtZGFyay10aGVtZSwgMC41LCAwLjQyKSk7XG4gICRsYWJlbC1kaXNhYmxlZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcblxuICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIHtcbiAgICAubWF0LWZvcm0tZmllbGQtZmxleCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZmlsbC1iYWNrZ3JvdW5kO1xuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWZsZXgge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGZpbGwtZGlzYWJsZWQtYmFja2dyb3VuZDtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1jb2xvcjtcbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIHtcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIGNvbG9yOiAkbGFiZWwtZGlzYWJsZWQtY29sb3I7XG4gICAgICB9XG5cbiAgICAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBVc2VkIHRvIG1ha2UgaW5zdGFuY2VzIG9mIHRoZSBfbWF0LWZvcm0tZmllbGQtbGFiZWwtZmxvYXRpbmcgbWl4aW4gbmVnbGlnaWJseSBkaWZmZXJlbnQsXG4vLyBhbmQgcHJldmVudCBHb29nbGUncyBDU1MgT3B0aW1pemVyIGZyb20gY29sbGFwc2luZyB0aGUgZGVjbGFyYXRpb25zLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHNvbWVcbi8vIG9mIHRoZSBzZWxlY3RvcnMgY29udGFpbiBwc2V1ZG8tY2xhc3NlcyBub3QgcmVjb2duaXplZCBpbiBhbGwgYnJvd3NlcnMuIElmIGEgYnJvd3NlciBlbmNvdW50ZXJzXG4vLyBhbiB1bmtub3duIHBzZXVkby1jbGFzcyBpdCB3aWxsIGRpc2NhcmQgdGhlIGVudGlyZSBydWxlIHNldC5cbiRtYXQtZm9ybS1maWVsZC1maWxsLWRlZHVwZTogMDtcblxuLy8gQXBwbGllcyBhIGZsb2F0aW5nIGxhYmVsIGFib3ZlIHRoZSBmb3JtIGZpZWxkIGNvbnRyb2wgaXRzZWxmLlxuQG1peGluIF9tYXQtZm9ybS1maWVsZC1maWxsLWxhYmVsLWZsb2F0aW5nKCRmb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kaW5maXgtbWFyZ2luLXRvcCAtICRpbmZpeC1wYWRkaW5nICsgJG1hdC1mb3JtLWZpZWxkLWZpbGwtZGVkdXBlKVxuICAgICAgICAgICAgIHNjYWxlKCRmb250LXNjYWxlKTtcbiAgd2lkdGg6IDEwMCUgLyAkZm9udC1zY2FsZSArICRtYXQtZm9ybS1maWVsZC1maWxsLWRlZHVwZTtcblxuICAkbWF0LWZvcm0tZmllbGQtZmlsbC1kZWR1cGU6ICRtYXQtZm9ybS1maWVsZC1maWxsLWRlZHVwZSArIDAuMDAwMDEgIWdsb2JhbDtcbn1cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLWZpbGwtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC8vIFRoZSB1bml0LWxlc3MgbGluZS1oZWlnaHQgZnJvbSB0aGUgZm9udCBjb25maWcuXG4gICRsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGlucHV0KTtcbiAgLy8gVGhlIGFtb3VudCB0byBzY2FsZSB0aGUgZm9udCBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsIGFuZCBzdWJzY3JpcHQuXG4gICRzdWJzY3JpcHQtZm9udC1zY2FsZTogMC43NTtcbiAgLy8gVGhlIHBhZGRpbmcgb24gdG9wIG9mIHRoZSBpbmZpeC5cbiAgJGluZml4LXBhZGRpbmctdG9wOiAwLjI1ZW07XG4gIC8vIFRoZSBwYWRkaW5nIGJlbG93IHRoZSBpbmZpeC5cbiAgJGluZml4LXBhZGRpbmctYm90dG9tOiAwLjc1ZW07XG4gIC8vIFRoZSBtYXJnaW4gYXBwbGllZCB0byB0aGUgZm9ybS1maWVsZC1pbmZpeCB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgZmxvYXRpbmcgbGFiZWwuXG4gICRpbmZpeC1tYXJnaW4tdG9wOiAxZW0gKiAkbGluZS1oZWlnaHQgKiAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG4gIC8vIFRoZSBhbW91bnQgd2Ugb2Zmc2V0IHRoZSBsYWJlbCBmcm9tIHRoZSBpbnB1dCB0ZXh0IGluIHRoZSBmaWxsIGFwcGVhcmFuY2UuXG4gICRmaWxsLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0OiAtMC41ZW07XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgIHBhZGRpbmc6ICRpbmZpeC1wYWRkaW5nLXRvcCAwICRpbmZpeC1wYWRkaW5nLWJvdHRvbSAwO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICB0b3A6ICRpbmZpeC1tYXJnaW4tdG9wICsgJGluZml4LXBhZGRpbmctdG9wO1xuICAgICAgbWFyZ2luLXRvcDogJGZpbGwtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQ7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQge1xuICAgICAgJi5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLFxuICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtZmlsbC1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLXRvcCArICRmaWxsLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0LFxuICAgICAgICAgICAgICAgICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2VydmVyLXNpZGUgcmVuZGVyZWQgbWF0SW5wdXQgd2l0aCBhIGxhYmVsIGF0dHJpYnV0ZSBidXQgbGFiZWwgbm90IHNob3duXG4gICAgICAvLyAodXNlZCBhcyBhIHB1cmUgQ1NTIHN0YW5kLWluIGZvciBtYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQpLlxuICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1maWxsLWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmctdG9wICsgJGZpbGwtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQsXG4gICAgICAgICAgICAgICAgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuXG4vLyBUaGVtZSBzdHlsZXMgdGhhdCBvbmx5IGFwcGx5IHRvIHRoZSBsZWdhY3kgYXBwZWFyYW5jZSBvZiB0aGUgZm9ybS1maWVsZC5cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcblxuICAkbGFiZWwtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICAkdW5kZXJsaW5lLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjcsIDAuNDIpKTtcblxuICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kge1xuICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICBjb2xvcjogJGxhYmVsLWNvbG9yO1xuICAgIH1cblxuICAgIC5tYXQtaGludCB7XG4gICAgICBjb2xvcjogJGxhYmVsLWNvbG9yO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1jb2xvcjtcbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUge1xuICAgICAgQGluY2x1ZGUgbWF0LWNvbnRyb2wtZGlzYWJsZWQtdW5kZXJsaW5lKCR1bmRlcmxpbmUtY29sb3IpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBVc2VkIHRvIG1ha2UgaW5zdGFuY2VzIG9mIHRoZSBfbWF0LWZvcm0tZmllbGQtbGFiZWwtZmxvYXRpbmcgbWl4aW4gbmVnbGlnaWJseSBkaWZmZXJlbnQsXG4vLyBhbmQgcHJldmVudCBHb29nbGUncyBDU1MgT3B0aW1pemVyIGZyb20gY29sbGFwc2luZyB0aGUgZGVjbGFyYXRpb25zLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHNvbWVcbi8vIG9mIHRoZSBzZWxlY3RvcnMgY29udGFpbiBwc2V1ZG8tY2xhc3NlcyBub3QgcmVjb2duaXplZCBpbiBhbGwgYnJvd3NlcnMuIElmIGEgYnJvd3NlciBlbmNvdW50ZXJzXG4vLyBhbiB1bmtub3duIHBzZXVkby1jbGFzcyBpdCB3aWxsIGRpc2NhcmQgdGhlIGVudGlyZSBydWxlIHNldC5cbiRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlOiAwO1xuXG4vLyBBcHBsaWVzIGEgZmxvYXRpbmcgbGFiZWwgYWJvdmUgdGhlIGZvcm0gZmllbGQgY29udHJvbCBpdHNlbGYuXG5AbWl4aW4gX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZygkZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKSB7XG4gIC8vIFdlIHVzZSBwZXJzcGVjdGl2ZSB0byBmaXggdGhlIHRleHQgYmx1cnJpbmVzcyBhcyBkZXNjcmliZWQgaGVyZTpcbiAgLy8gaHR0cDovL3d3dy51c2VyYWdlbnRtYW4uY29tL2Jsb2cvMjAxNC8wNS8wNC9maXhpbmctdHlwb2dyYXBoeS1pbnNpZGUtb2YtMi1kLWNzcy10cmFuc2Zvcm1zL1xuICAvLyBUaGlzIHJlc3VsdHMgaW4gYSBzbWFsbCBqaXR0ZXIgYWZ0ZXIgdGhlIGxhYmVsIGZsb2F0cyBvbiBGaXJlZm94LCB3aGljaCB0aGVcbiAgLy8gdHJhbnNsYXRlWiBmaXhlcy5cbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kaW5maXgtbWFyZ2luLXRvcCAtICRpbmZpeC1wYWRkaW5nKSBzY2FsZSgkZm9udC1zY2FsZSkgcGVyc3BlY3RpdmUoMTAwcHgpXG4gIHRyYW5zbGF0ZVooMC4wMDFweCArICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlKTtcbiAgLy8gVGhlIHRyaWNrcyBhYm92ZSB1c2VkIHRvIHNtb290aCBvdXQgdGhlIGFuaW1hdGlvbiBvbiBjaHJvbWUgYW5kIGZpcmVmb3ggYWN0dWFsbHkgbWFrZSB0aGluZ3NcbiAgLy8gd29yc2Ugb24gSUUsIHNvIHdlIGRvbid0IGluY2x1ZGUgdGhlbSBpbiB0aGUgSUUgdmVyc2lvbi5cbiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtJGluZml4LW1hcmdpbi10b3AgLSAkaW5maXgtcGFkZGluZyArICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlKVxuICAgICAgICAgICAgICAgICAgc2NhbGUoJGZvbnQtc2NhbGUpO1xuXG4gIHdpZHRoOiAxMDAlIC8gJGZvbnQtc2NhbGUgKyAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZTtcblxuICAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZTogJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGUgKyAwLjAwMDAxICFnbG9iYWw7XG59XG5cbi8vIFNhbWUgYXMgbWl4aW4gYWJvdmUsIGJ1dCBvbWl0cyB0aGUgdHJhbnNsYXRlWiBmb3IgcHJpbnRpbmcgcHVycG9zZXMuXG5AbWl4aW4gX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZy1wcmludCgkZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKSB7XG4gIC8vIFRoaXMgcmVzdWx0cyBpbiBhIHNtYWxsIGppdHRlciBhZnRlciB0aGUgbGFiZWwgZmxvYXRzIG9uIEZpcmVmb3gsIHdoaWNoIHRoZVxuICAvLyB0cmFuc2xhdGVaIGZpeGVzLlxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRpbmZpeC1tYXJnaW4tdG9wIC0gJGluZml4LXBhZGRpbmcgKyAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZSlcbiAgICAgICAgICAgICAgICAgIHNjYWxlKCRmb250LXNjYWxlKTtcbiAgLy8gVGhlIHRyaWNrcyBhYm92ZSB1c2VkIHRvIHNtb290aCBvdXQgdGhlIGFuaW1hdGlvbiBvbiBjaHJvbWUgYW5kIGZpcmVmb3ggYWN0dWFsbHkgbWFrZSB0aGluZ3NcbiAgLy8gd29yc2Ugb24gSUUsIHNvIHdlIGRvbid0IGluY2x1ZGUgdGhlbSBpbiB0aGUgSUUgdmVyc2lvbi5cbiAgJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGU6ICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlICsgMC4wMDAwMSAhZ2xvYmFsO1xufVxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtbGVnYWN5LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAvLyBUaGUgdW5pdC1sZXNzIGxpbmUtaGVpZ2h0IGZyb20gdGhlIGZvbnQgY29uZmlnLlxuICAkbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBpbnB1dCk7XG4gIC8vIFRoZSBhbW91bnQgdG8gc2NhbGUgdGhlIGZvbnQgZm9yIHRoZSBmbG9hdGluZyBsYWJlbCBhbmQgc3Vic2NyaXB0LlxuICAkc3Vic2NyaXB0LWZvbnQtc2NhbGU6IDAuNzU7XG4gIC8vIFRoZSBhbW91bnQgb2Ygc3BhY2UgYmV0d2VlbiB0aGUgdG9wIG9mIHRoZSBsaW5lIGFuZCB0aGUgdG9wIG9mIHRoZSBhY3R1YWwgdGV4dFxuICAvLyAoYXMgYSBmcmFjdGlvbiBvZiB0aGUgZm9udC1zaXplKS5cbiAgJGxpbmUtc3BhY2luZzogKCRsaW5lLWhlaWdodCAtIDEpIC8gMjtcbiAgLy8gVGhlIHBhZGRpbmcgb24gdGhlIGluZml4LiBNb2NrcyBzaG93IGhhbGYgb2YgdGhlIHRleHQgc2l6ZSwgYnV0IHNlZW0gdG8gbWVhc3VyZSBmcm9tIHRoZSBlZGdlXG4gIC8vIG9mIHRoZSB0ZXh0IGl0c2VsZiwgbm90IHRoZSBlZGdlIG9mIHRoZSBsaW5lOyB0aGVyZWZvcmUgd2Ugc3VidHJhY3Qgb2ZmIHRoZSBsaW5lIHNwYWNpbmcuXG4gICRpbmZpeC1wYWRkaW5nOiAwLjVlbSAtICRsaW5lLXNwYWNpbmc7XG4gIC8vIFRoZSBtYXJnaW4gYXBwbGllZCB0byB0aGUgZm9ybS1maWVsZC1pbmZpeCB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgZmxvYXRpbmcgbGFiZWwuXG4gICRpbmZpeC1tYXJnaW4tdG9wOiAxZW0gKiAkbGluZS1oZWlnaHQgKiAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG4gIC8vIFRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBib3R0b20gb2YgdGhlIC5tYXQtZm9ybS1maWVsZC1mbGV4IGFyZWEgYW5kIHRoZSBzdWJzY3JpcHQgd3JhcHBlci5cbiAgLy8gTW9ja3Mgc2hvdyBoYWxmIG9mIHRoZSB0ZXh0IHNpemUsIGJ1dCB0aGlzIG1hcmdpbiBpcyBhcHBsaWVkIHRvIGFuIGVsZW1lbnQgd2l0aCB0aGUgc3Vic2NyaXB0XG4gIC8vIHRleHQgZm9udCBzaXplLCBzbyB3ZSBuZWVkIHRvIGRpdmlkZSBieSB0aGUgc2NhbGUgZmFjdG9yIHRvIG1ha2UgaXQgaGFsZiBvZiB0aGUgb3JpZ2luYWwgdGV4dFxuICAvLyBzaXplLiBXZSBhZ2FpbiBuZWVkIHRvIHN1YnRyYWN0IG9mZiB0aGUgbGluZSBzcGFjaW5nIHNpbmNlIHRoZSBtb2NrcyBtZWFzdXJlIHRvIHRoZSBlZGdlIG9mIHRoZVxuICAvLyB0ZXh0LCBub3QgdGhlICBlZGdlIG9mIHRoZSBsaW5lLlxuICAkc3Vic2NyaXB0LW1hcmdpbi10b3A6IDAuNWVtIC8gJHN1YnNjcmlwdC1mb250LXNjYWxlIC0gKCRsaW5lLXNwYWNpbmcgKiAyKTtcbiAgLy8gVGhlIHBhZGRpbmcgYXBwbGllZCB0byB0aGUgZm9ybS1maWVsZC13cmFwcGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBzdWJzY3JpcHQsIHNpbmNlIGl0J3NcbiAgLy8gYWJzb2x1dGVseSBwb3NpdGlvbmVkLiBUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgdGhlIHN1YnNjcmlwdCdzIG1hcmdpbiBhbmQgbGluZS1oZWlnaHQsIGJ1dCB3ZVxuICAvLyBuZWVkIHRvIG11bHRpcGx5IGJ5IHRoZSBzdWJzY3JpcHQgZm9udCBzY2FsZSBmYWN0b3Igc2luY2UgdGhlIHdyYXBwZXIgaGFzIGEgbGFyZ2VyIGZvbnQgc2l6ZS5cbiAgJHdyYXBwZXItcGFkZGluZy1ib3R0b206ICgkc3Vic2NyaXB0LW1hcmdpbi10b3AgKyAkbGluZS1oZWlnaHQpICogJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICAgICAgcGFkZGluZy1ib3R0b206ICR3cmFwcGVyLXBhZGRpbmctYm90dG9tO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICBwYWRkaW5nOiAkaW5maXgtcGFkZGluZyAwO1xuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IHtcbiAgICAgICYubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCxcbiAgICAgIC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjAgd2lsbCByZWx5IG9uIEF1dG9maWxsTW9uaXRvciBpbnN0ZWFkLlxuICAgICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXG4gICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2VydmVyLXNpZGUgcmVuZGVyZWQgbWF0SW5wdXQgd2l0aCBhIGxhYmVsIGF0dHJpYnV0ZSBidXQgbGFiZWwgbm90IHNob3duXG4gICAgICAvLyAodXNlZCBhcyBhIHB1cmUgQ1NTIHN0YW5kLWluIGZvciBtYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQpLlxuICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICB0b3A6ICRpbmZpeC1tYXJnaW4tdG9wICsgJGluZml4LXBhZGRpbmc7XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSB7XG4gICAgICAvLyBXZSB3YW50IHRoZSB1bmRlcmxpbmUgdG8gc3RhcnQgYXQgdGhlIGVuZCBvZiB0aGUgY29udGVudCBib3gsIG5vdCB0aGUgcGFkZGluZyBib3gsXG4gICAgICAvLyBzbyB3ZSBtb3ZlIGl0IHVwIGJ5IHRoZSBwYWRkaW5nIGFtb3VudC5cbiAgICAgIGJvdHRvbTogJHdyYXBwZXItcGFkZGluZy1ib3R0b207XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyIHtcbiAgICAgIG1hcmdpbi10b3A6ICRzdWJzY3JpcHQtbWFyZ2luLXRvcDtcblxuICAgICAgLy8gV2Ugd2FudCB0aGUgc3Vic2NyaXB0IHRvIHN0YXJ0IGF0IHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgYm94LCBub3QgdGhlIHBhZGRpbmcgYm94LFxuICAgICAgLy8gc28gd2UgbW92ZSBpdCB1cCBieSB0aGUgcGFkZGluZyBhbW91bnQgKGFkanVzdGVkIGZvciB0aGUgc21hbGxlciBmb250IHNpemUpO1xuICAgICAgdG9wOiBjYWxjKDEwMCUgLSAjeyR3cmFwcGVyLXBhZGRpbmctYm90dG9tIC8gJHN1YnNjcmlwdC1mb250LXNjYWxlfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gdHJhbnNsYXRlWiBjYXVzZXMgdGhlIGxhYmVsIHRvIG5vdCBhcHBlYXIgd2hpbGUgcHJpbnRpbmcsIHNvIHdlIG92ZXJyaWRlIGl0IHRvIG5vdFxuICAvLyBhcHBseSB0cmFuc2xhdGVaIHdoaWxlIHByaW50aW5nXG4gIEBtZWRpYSBwcmludCB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IHtcbiAgICAgICYubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IHtcbiAgICAgICAgJi5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLFxuICAgICAgICAubWF0LWlucHV0LXNlcnZlcjpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZy1wcmludChcbiAgICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjAgd2lsbCByZWx5IG9uIEF1dG9maWxsTW9uaXRvciBpbnN0ZWFkLlxuICAgICAgICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJcbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nLXByaW50KFxuICAgICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2VydmVyLXNpZGUgcmVuZGVyZWQgbWF0SW5wdXQgd2l0aCBhIGxhYmVsIGF0dHJpYnV0ZSBidXQgbGFiZWwgbm90IHNob3duXG4gICAgICAgIC8vICh1c2VkIGFzIGEgcHVyZSBDU1Mgc3RhbmQtaW4gZm9yIG1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCkuXG4gICAgICAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXG4gICAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZy1wcmludChcbiAgICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuXG4vLyBUaGVtZSBzdHlsZXMgdGhhdCBvbmx5IGFwcGx5IHRvIHRoZSBvdXRsaW5lIGFwcGVhcmFuY2Ugb2YgdGhlIGZvcm0tZmllbGQuXG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcblxuICAkbGFiZWwtZGlzYWJsZWQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gICRvdXRsaW5lLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjMsIDAuMTIpKTtcbiAgJG91dGxpbmUtY29sb3ItaG92ZXI6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlciwgaWYoJGlzLWRhcmstdGhlbWUsIDEsIDAuODcpKTtcbiAgJG91dGxpbmUtY29sb3ItcHJpbWFyeTogbWF0LWNvbG9yKCRwcmltYXJ5KTtcbiAgJG91dGxpbmUtY29sb3ItYWNjZW50OiBtYXQtY29sb3IoJGFjY2VudCk7XG4gICRvdXRsaW5lLWNvbG9yLXdhcm46IG1hdC1jb2xvcigkd2Fybik7XG4gICRvdXRsaW5lLWNvbG9yLWRpc2FibGVkOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjE1LCAwLjA2KSk7XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICAgICAgY29sb3I6ICRvdXRsaW5lLWNvbG9yO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIHtcbiAgICAgIGNvbG9yOiAkb3V0bGluZS1jb2xvci1ob3ZlcjtcbiAgICB9XG5cbiAgICAmLm1hdC1mb2N1c2VkIHtcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIHtcbiAgICAgICAgY29sb3I6ICRvdXRsaW5lLWNvbG9yLXByaW1hcnk7XG4gICAgICB9XG5cbiAgICAgICYubWF0LWFjY2VudCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayB7XG4gICAgICAgIGNvbG9yOiAkb3V0bGluZS1jb2xvci1hY2NlbnQ7XG4gICAgICB9XG5cbiAgICAgICYubWF0LXdhcm4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sge1xuICAgICAgICBjb2xvcjogJG91dGxpbmUtY29sb3Itd2FybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDbGFzcyByZXBlYXRlZCBzbyB0aGF0IHJ1bGUgaXMgc3BlY2lmaWMgZW5vdWdoIHRvIG92ZXJyaWRlIGZvY3VzZWQgYWNjZW50IGNvbG9yIGNhc2UuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1pbnZhbGlkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQge1xuICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sge1xuICAgICAgICBjb2xvcjogJG91dGxpbmUtY29sb3Itd2FybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIHtcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIGNvbG9yOiAkbGFiZWwtZGlzYWJsZWQtY29sb3I7XG4gICAgICB9XG5cbiAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lIHtcbiAgICAgICAgY29sb3I6ICRvdXRsaW5lLWNvbG9yLWRpc2FibGVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBVc2VkIHRvIG1ha2UgaW5zdGFuY2VzIG9mIHRoZSBfbWF0LWZvcm0tZmllbGQtbGFiZWwtZmxvYXRpbmcgbWl4aW4gbmVnbGlnaWJseSBkaWZmZXJlbnQsXG4vLyBhbmQgcHJldmVudCBHb29nbGUncyBDU1MgT3B0aW1pemVyIGZyb20gY29sbGFwc2luZyB0aGUgZGVjbGFyYXRpb25zLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHNvbWVcbi8vIG9mIHRoZSBzZWxlY3RvcnMgY29udGFpbiBwc2V1ZG8tY2xhc3NlcyBub3QgcmVjb2duaXplZCBpbiBhbGwgYnJvd3NlcnMuIElmIGEgYnJvd3NlciBlbmNvdW50ZXJzXG4vLyBhbiB1bmtub3duIHBzZXVkby1jbGFzcyBpdCB3aWxsIGRpc2NhcmQgdGhlIGVudGlyZSBydWxlIHNldC5cbiRtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWRlZHVwZTogMDtcblxuLy8gQXBwbGllcyBhIGZsb2F0aW5nIGxhYmVsIGFib3ZlIHRoZSBmb3JtIGZpZWxkIGNvbnRyb2wgaXRzZWxmLlxuQG1peGluIF9tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWxhYmVsLWZsb2F0aW5nKCRmb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kaW5maXgtbWFyZ2luLXRvcCAtICRpbmZpeC1wYWRkaW5nICsgJG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZGVkdXBlKVxuICBzY2FsZSgkZm9udC1zY2FsZSk7XG4gIHdpZHRoOiAxMDAlIC8gJGZvbnQtc2NhbGUgKyAkbWF0LWZvcm0tZmllbGQtb3V0bGluZS1kZWR1cGU7XG5cbiAgJG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZGVkdXBlOiAkbWF0LWZvcm0tZmllbGQtb3V0bGluZS1kZWR1cGUgKyAwLjAwMDAxICFnbG9iYWw7XG59XG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1vdXRsaW5lLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAvLyBUaGUgdW5pdC1sZXNzIGxpbmUtaGVpZ2h0IGZyb20gdGhlIGZvbnQgY29uZmlnLlxuICAkbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBpbnB1dCk7XG4gIC8vIFRoZSBhbW91bnQgdG8gc2NhbGUgdGhlIGZvbnQgZm9yIHRoZSBmbG9hdGluZyBsYWJlbCBhbmQgc3Vic2NyaXB0LlxuICAkc3Vic2NyaXB0LWZvbnQtc2NhbGU6IDAuNzU7XG4gIC8vIFRoZSBwYWRkaW5nIGFib3ZlIGFuZCBiZWxvdyB0aGUgaW5maXguXG4gICRpbmZpeC1wYWRkaW5nOiAxZW07XG4gIC8vIFRoZSBtYXJnaW4gYXBwbGllZCB0byB0aGUgZm9ybS1maWVsZC1pbmZpeCB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgZmxvYXRpbmcgbGFiZWwuXG4gICRpbmZpeC1tYXJnaW4tdG9wOiAxZW0gKiAkbGluZS1oZWlnaHQgKiAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG4gIC8vIFRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBib3R0b20gb2YgdGhlIC5tYXQtZm9ybS1maWVsZC1mbGV4IGFyZWEgYW5kIHRoZSBzdWJzY3JpcHQgd3JhcHBlci5cbiAgLy8gTW9ja3Mgc2hvdyBoYWxmIG9mIHRoZSB0ZXh0IHNpemUsIGJ1dCB0aGlzIG1hcmdpbiBpcyBhcHBsaWVkIHRvIGFuIGVsZW1lbnQgd2l0aCB0aGUgc3Vic2NyaXB0XG4gIC8vIHRleHQgZm9udCBzaXplLCBzbyB3ZSBuZWVkIHRvIGRpdmlkZSBieSB0aGUgc2NhbGUgZmFjdG9yIHRvIG1ha2UgaXQgaGFsZiBvZiB0aGUgb3JpZ2luYWwgdGV4dFxuICAvLyBzaXplLlxuICAkc3Vic2NyaXB0LW1hcmdpbi10b3A6IDAuNWVtIC8gJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuICAvLyBUaGUgcGFkZGluZyBhcHBsaWVkIHRvIHRoZSBmb3JtLWZpZWxkLXdyYXBwZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIHN1YnNjcmlwdCwgc2luY2UgaXQnc1xuICAvLyBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQuIFRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgc3Vic2NyaXB0J3MgbWFyZ2luIGFuZCBsaW5lLWhlaWdodCwgYnV0IHdlXG4gIC8vIG5lZWQgdG8gbXVsdGlwbHkgYnkgdGhlIHN1YnNjcmlwdCBmb250IHNjYWxlIGZhY3RvciBzaW5jZSB0aGUgd3JhcHBlciBoYXMgYSBsYXJnZXIgZm9udCBzaXplLlxuICAkd3JhcHBlci1wYWRkaW5nLWJvdHRvbTogKCRzdWJzY3JpcHQtbWFyZ2luLXRvcCArICRsaW5lLWhlaWdodCkgKiAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG4gIC8vIFRoZSBhbW91bnQgd2Ugb2Zmc2V0IHRoZSBsYWJlbCBmcm9tIHRoZSBpbnB1dCB0ZXh0IGluIHRoZSBvdXRsaW5lIGFwcGVhcmFuY2UuXG4gICRvdXRsaW5lLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0OiAtMC4yNWVtO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUge1xuICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICBwYWRkaW5nOiAkaW5maXgtcGFkZGluZyAwICRpbmZpeC1wYWRkaW5nIDA7XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgIHRvcDogJGluZml4LW1hcmdpbi10b3AgKyAkaW5maXgtcGFkZGluZztcbiAgICAgIG1hcmdpbi10b3A6ICRvdXRsaW5lLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0O1xuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IHtcbiAgICAgICYubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCxcbiAgICAgIC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLW91dGxpbmUtbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZyArICRvdXRsaW5lLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0LFxuICAgICAgICAgICAgICAgICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2VydmVyLXNpZGUgcmVuZGVyZWQgbWF0SW5wdXQgd2l0aCBhIGxhYmVsIGF0dHJpYnV0ZSBidXQgbGFiZWwgbm90IHNob3duXG4gICAgICAvLyAodXNlZCBhcyBhIHB1cmUgQ1NTIHN0YW5kLWluIGZvciBtYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQpLlxuICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcgKyAkb3V0bGluZS1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldCxcbiAgICAgICAgICAgICAgICAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5cbi8vIFRoZW1lIHN0eWxlcyB0aGF0IG9ubHkgYXBwbHkgdG8gdGhlIHN0YW5kYXJkIGFwcGVhcmFuY2Ugb2YgdGhlIGZvcm0tZmllbGQuXG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1zdGFuZGFyZC10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcblxuICAkdW5kZXJsaW5lLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjcsIDAuNDIpKTtcblxuICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yO1xuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSB7XG4gICAgICBAaW5jbHVkZSBtYXQtY29udHJvbC1kaXNhYmxlZC11bmRlcmxpbmUoJHVuZGVybGluZS1jb2xvcik7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1zdGFuZGFyZC10eXBvZ3JhcGh5KCRjb25maWcpIHt9XG5cblxuLy8gVGhlbWUgc3R5bGVzIHRoYXQgYXBwbHkgdG8gYWxsIGFwcGVhcmFuY2VzIG9mIHRoZSBmb3JtLWZpZWxkLlxuQG1peGluIG1hdC1mb3JtLWZpZWxkLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcblxuICAvLyBMYWJlbCBjb2xvcnMuIFJlcXVpcmVkIGlzIHVzZWQgZm9yIHRoZSBgKmAgc3RhciBzaG93biBpbiB0aGUgbGFiZWwuXG4gICRsYWJlbC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCwgaWYoJGlzLWRhcmstdGhlbWUsIDAuNywgMC42KSk7XG4gICRmb2N1c2VkLWxhYmVsLWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIHRleHQpO1xuICAkcmVxdWlyZWQtbGFiZWwtY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCB0ZXh0KTtcblxuICAvLyBVbmRlcmxpbmUgY29sb3JzLlxuICAkdW5kZXJsaW5lLWNvbG9yLWJhc2U6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlciwgaWYoJGlzLWRhcmstdGhlbWUsIDEsIDAuODcpKTtcbiAgJHVuZGVybGluZS1jb2xvci1hY2NlbnQ6IG1hdC1jb2xvcigkYWNjZW50LCB0ZXh0KTtcbiAgJHVuZGVybGluZS1jb2xvci13YXJuOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICAkdW5kZXJsaW5lLWZvY3VzZWQtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgdGV4dCk7XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICBjb2xvcjogJGxhYmVsLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1oaW50IHtcbiAgICBjb2xvcjogJGxhYmVsLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgY29sb3I6ICRmb2N1c2VkLWxhYmVsLWNvbG9yO1xuXG4gICAgJi5tYXQtYWNjZW50IHtcbiAgICAgIGNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLWFjY2VudDtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIGNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLXdhcm47XG4gICAgfVxuICB9XG5cbiAgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXIge1xuICAgIGNvbG9yOiAkcmVxdWlyZWQtbGFiZWwtY29sb3I7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtcmlwcGxlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLWJhc2U7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQge1xuICAgIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1mb2N1c2VkLWNvbG9yO1xuXG4gICAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLWFjY2VudDtcbiAgICAgIH1cblxuICAgICAgJi5tYXQtd2FybiB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtY29sb3Itd2FybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpIHtcbiAgICAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVyIHtcbiAgICAgIGNvbG9yOiAkdW5kZXJsaW5lLWZvY3VzZWQtY29sb3I7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXIge1xuICAgICAgY29sb3I6ICR1bmRlcmxpbmUtY29sb3ItYWNjZW50O1xuICAgIH1cblxuICAgICYubWF0LXdhcm4gLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlciB7XG4gICAgICBjb2xvcjogJHVuZGVybGluZS1jb2xvci13YXJuO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN0eWxpbmcgZm9yIHRoZSBlcnJvciBzdGF0ZSBvZiB0aGUgZm9ybSBmaWVsZC4gTm90ZSB0aGF0IHdoaWxlIHRoZSBzYW1lIGNhbiBiZVxuICAvLyBhY2hpZXZlZCB3aXRoIHRoZSBuZy0qIGNsYXNzZXMsIHdlIHVzZSB0aGlzIGFwcHJvYWNoIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IHRoZSBzYW1lXG4gIC8vIGxvZ2ljIGlzIHVzZWQgdG8gc3R5bGUgdGhlIGVycm9yIHN0YXRlIGFuZCB0byBzaG93IHRoZSBlcnJvciBtZXNzYWdlcy5cbiAgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQge1xuICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICBjb2xvcjogJHVuZGVybGluZS1jb2xvci13YXJuO1xuXG4gICAgICAmLm1hdC1hY2NlbnQsXG4gICAgICAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2VyIHtcbiAgICAgICAgY29sb3I6ICR1bmRlcmxpbmUtY29sb3Itd2FybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtcmlwcGxlLFxuICAgIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLXdhcm47XG4gICAgfVxuICB9XG5cbiAgLm1hdC1lcnJvciB7XG4gICAgY29sb3I6ICR1bmRlcmxpbmUtY29sb3Itd2FybjtcbiAgfVxuXG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1zdGFuZGFyZC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1maWxsLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhlbWUoJHRoZW1lKTtcbn1cblxuLy8gVXNlZCB0byBtYWtlIGluc3RhbmNlcyBvZiB0aGUgX21hdC1mb3JtLWZpZWxkLWxhYmVsLWZsb2F0aW5nIG1peGluIG5lZ2xpZ2libHkgZGlmZmVyZW50LFxuLy8gYW5kIHByZXZlbnQgR29vZ2xlJ3MgQ1NTIE9wdGltaXplciBmcm9tIGNvbGxhcHNpbmcgdGhlIGRlY2xhcmF0aW9ucy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBzb21lXG4vLyBvZiB0aGUgc2VsZWN0b3JzIGNvbnRhaW4gcHNldWRvLWNsYXNzZXMgbm90IHJlY29nbml6ZWQgaW4gYWxsIGJyb3dzZXJzLiBJZiBhIGJyb3dzZXIgZW5jb3VudGVyc1xuLy8gYW4gdW5rbm93biBwc2V1ZG8tY2xhc3MgaXQgd2lsbCBkaXNjYXJkIHRoZSBlbnRpcmUgcnVsZSBzZXQuXG4kbWF0LWZvcm0tZmllbGQtZGVkdXBlOiAwO1xuXG4vLyBBcHBsaWVzIGEgZmxvYXRpbmcgbGFiZWwgYWJvdmUgdGhlIGZvcm0gZmllbGQgY29udHJvbCBpdHNlbGYuXG5AbWl4aW4gX21hdC1mb3JtLWZpZWxkLWxhYmVsLWZsb2F0aW5nKCRmb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kaW5maXgtbWFyZ2luLXRvcCAtICRpbmZpeC1wYWRkaW5nICsgJG1hdC1mb3JtLWZpZWxkLWRlZHVwZSlcbiAgICAgICAgICAgICBzY2FsZSgkZm9udC1zY2FsZSk7XG4gIHdpZHRoOiAxMDAlIC8gJGZvbnQtc2NhbGUgKyAkbWF0LWZvcm0tZmllbGQtZGVkdXBlO1xuXG4gICRtYXQtZm9ybS1maWVsZC1kZWR1cGU6ICRtYXQtZm9ybS1maWVsZC1kZWR1cGUgKyAwLjAwMDAxICFnbG9iYWw7XG59XG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLy8gVGhlIHVuaXQtbGVzcyBsaW5lLWhlaWdodCBmcm9tIHRoZSBmb250IGNvbmZpZy5cbiAgJGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgaW5wdXQpO1xuXG4gIC8vIFRoZSBhbW91bnQgdG8gc2NhbGUgdGhlIGZvbnQgZm9yIHRoZSBmbG9hdGluZyBsYWJlbCBhbmQgc3Vic2NyaXB0LlxuICAkc3Vic2NyaXB0LWZvbnQtc2NhbGU6IDAuNzU7XG4gIC8vIFRoZSBhbW91bnQgdG8gc2NhbGUgdGhlIGZvbnQgZm9yIHRoZSBwcmVmaXggYW5kIHN1ZmZpeCBpY29ucy5cbiAgJHByZWZpeC1zdWZmaXgtaWNvbi1mb250LXNjYWxlOiAxLjU7XG5cbiAgLy8gVGhlIHBhZGRpbmcgb24gdGhlIGluZml4LiBNb2NrcyBzaG93IGhhbGYgb2YgdGhlIHRleHQgc2l6ZS5cbiAgJGluZml4LXBhZGRpbmc6IDAuNWVtO1xuICAvLyBUaGUgbWFyZ2luIGFwcGxpZWQgdG8gdGhlIGZvcm0tZmllbGQtaW5maXggdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsLlxuICAkaW5maXgtbWFyZ2luLXRvcDogMWVtICogJGxpbmUtaGVpZ2h0ICogJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuICAvLyBGb250IHNpemUgdG8gdXNlIGZvciB0aGUgbGFiZWwgYW5kIHN1YnNjcmlwdCB0ZXh0LlxuICAkc3Vic2NyaXB0LWZvbnQtc2l6ZTogJHN1YnNjcmlwdC1mb250LXNjYWxlICogMTAwJTtcbiAgLy8gRm9udCBzaXplIHRvIHVzZSBmb3IgdGhlIGZvciB0aGUgcHJlZml4IGFuZCBzdWZmaXggaWNvbnMuXG4gICRwcmVmaXgtc3VmZml4LWljb24tZm9udC1zaXplOiAkcHJlZml4LXN1ZmZpeC1pY29uLWZvbnQtc2NhbGUgKiAxMDAlO1xuICAvLyBUaGUgc3BhY2UgYmV0d2VlbiB0aGUgYm90dG9tIG9mIHRoZSAubWF0LWZvcm0tZmllbGQtZmxleCBhcmVhIGFuZCB0aGUgc3Vic2NyaXB0IHdyYXBwZXIuXG4gIC8vIE1vY2tzIHNob3cgaGFsZiBvZiB0aGUgdGV4dCBzaXplLCBidXQgdGhpcyBtYXJnaW4gaXMgYXBwbGllZCB0byBhbiBlbGVtZW50IHdpdGggdGhlIHN1YnNjcmlwdFxuICAvLyB0ZXh0IGZvbnQgc2l6ZSwgc28gd2UgbmVlZCB0byBkaXZpZGUgYnkgdGhlIHNjYWxlIGZhY3RvciB0byBtYWtlIGl0IGhhbGYgb2YgdGhlIG9yaWdpbmFsIHRleHRcbiAgLy8gc2l6ZS5cbiAgJHN1YnNjcmlwdC1tYXJnaW4tdG9wOiAwLjVlbSAvICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcbiAgLy8gVGhlIHBhZGRpbmcgYXBwbGllZCB0byB0aGUgZm9ybS1maWVsZC13cmFwcGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBzdWJzY3JpcHQsIHNpbmNlIGl0J3NcbiAgLy8gYWJzb2x1dGVseSBwb3NpdGlvbmVkLiBUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgdGhlIHN1YnNjcmlwdCdzIG1hcmdpbiBhbmQgbGluZS1oZWlnaHQsIGJ1dCB3ZVxuICAvLyBuZWVkIHRvIG11bHRpcGx5IGJ5IHRoZSBzdWJzY3JpcHQgZm9udCBzY2FsZSBmYWN0b3Igc2luY2UgdGhlIHdyYXBwZXIgaGFzIGEgbGFyZ2VyIGZvbnQgc2l6ZS5cbiAgJHdyYXBwZXItcGFkZGluZy1ib3R0b206ICgkc3Vic2NyaXB0LW1hcmdpbi10b3AgKyAkbGluZS1oZWlnaHQpICogJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuXG4gIC5tYXQtZm9ybS1maWVsZCB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGlucHV0KTtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogJHdyYXBwZXItcGFkZGluZy1ib3R0b207XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtcHJlZml4LFxuICAubWF0LWZvcm0tZmllbGQtc3VmZml4IHtcbiAgICAvLyBBbGxvdyBpY29ucyBpbiBhIHByZWZpeCBvciBzdWZmaXggdG8gYWRhcHQgdG8gdGhlIGNvcnJlY3Qgc2l6ZS5cbiAgICAubWF0LWljb24ge1xuICAgICAgZm9udC1zaXplOiAkcHJlZml4LXN1ZmZpeC1pY29uLWZvbnQtc2l6ZTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQ7XG4gICAgfVxuXG4gICAgLy8gQWxsb3cgaWNvbiBidXR0b25zIGluIGEgcHJlZml4IG9yIHN1ZmZpeCB0byBhZGFwdCB0byB0aGUgY29ycmVjdCBzaXplLlxuICAgIC5tYXQtaWNvbi1idXR0b24ge1xuICAgICAgaGVpZ2h0OiAkcHJlZml4LXN1ZmZpeC1pY29uLWZvbnQtc2NhbGUgKiAxZW07XG4gICAgICB3aWR0aDogJHByZWZpeC1zdWZmaXgtaWNvbi1mb250LXNjYWxlICogMWVtO1xuXG4gICAgICAubWF0LWljb24ge1xuICAgICAgICBoZWlnaHQ6ICRsaW5lLWhlaWdodCAqIDFlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgIHBhZGRpbmc6ICRpbmZpeC1wYWRkaW5nIDA7XG4gICAgLy8gVGhyb3dzIG9mZiB0aGUgYmFzZWxpbmUgaWYgd2UgZG8gaXQgYXMgYSByZWFsIG1hcmdpbiwgc28gd2UgZG8gaXQgYXMgYSBib3JkZXIgaW5zdGVhZC5cbiAgICBib3JkZXItdG9wOiAkaW5maXgtbWFyZ2luLXRvcCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQge1xuICAgICYubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCxcbiAgICAubWF0LWlucHV0LXNlcnZlcjpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICB9XG5cbiAgICAvLyBTZXJ2ZXItc2lkZSByZW5kZXJlZCBtYXRJbnB1dCB3aXRoIGEgbGFiZWwgYXR0cmlidXRlIGJ1dCBsYWJlbCBub3Qgc2hvd25cbiAgICAvLyAodXNlZCBhcyBhIHB1cmUgQ1NTIHN0YW5kLWluIGZvciBtYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQpLlxuICAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXG4gICAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciB7XG4gICAgdG9wOiAtJGluZml4LW1hcmdpbi10b3A7XG4gICAgcGFkZGluZy10b3A6ICRpbmZpeC1tYXJnaW4tdG9wO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICB0b3A6ICRpbmZpeC1tYXJnaW4tdG9wICsgJGluZml4LXBhZGRpbmc7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIHtcbiAgICAvLyBXZSB3YW50IHRoZSB1bmRlcmxpbmUgdG8gc3RhcnQgYXQgdGhlIGVuZCBvZiB0aGUgY29udGVudCBib3gsIG5vdCB0aGUgcGFkZGluZyBib3gsXG4gICAgLy8gc28gd2UgbW92ZSBpdCB1cCBieSB0aGUgcGFkZGluZyBhbW91bnQuXG4gICAgYm90dG9tOiAkd3JhcHBlci1wYWRkaW5nLWJvdHRvbTtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlciB7XG4gICAgZm9udC1zaXplOiAkc3Vic2NyaXB0LWZvbnQtc2l6ZTtcbiAgICBtYXJnaW4tdG9wOiAkc3Vic2NyaXB0LW1hcmdpbi10b3A7XG5cbiAgICAvLyBXZSB3YW50IHRoZSBzdWJzY3JpcHQgdG8gc3RhcnQgYXQgdGhlIGVuZCBvZiB0aGUgY29udGVudCBib3gsIG5vdCB0aGUgcGFkZGluZyBib3gsXG4gICAgLy8gc28gd2UgbW92ZSBpdCB1cCBieSB0aGUgcGFkZGluZyBhbW91bnQgKGFkanVzdGVkIGZvciB0aGUgc21hbGxlciBmb250IHNpemUpO1xuICAgIHRvcDogY2FsYygxMDAlIC0gI3skd3JhcHBlci1wYWRkaW5nLWJvdHRvbSAvICRzdWJzY3JpcHQtZm9udC1zY2FsZX0pO1xuICB9XG5cbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtbGVnYWN5LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLXN0YW5kYXJkLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLWZpbGwtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtb3V0bGluZS10eXBvZ3JhcGh5KCRjb25maWcpO1xufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtdHJlZS10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LXRyZWUge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2NhcmQnKTtcbiAgfVxuXG4gIC5tYXQtdHJlZS1ub2RlLFxuICAubWF0LW5lc3RlZC10cmVlLW5vZGUge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtdHJlZS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC10cmVlIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC10cmVlLW5vZGUsXG4gIC5tYXQtbmVzdGVkLXRyZWUtbm9kZSB7XG4gICAgZm9udC13ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTEpO1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpO1xuICB9XG59XG5cblxuXG4vLyBJbmNsdWRlcyBhbGwgb2YgdGhlIHR5cG9ncmFwaGljIHN0eWxlcy5cbkBtaXhpbiBhbmd1bGFyLW1hdGVyaWFsLXR5cG9ncmFwaHkoJGNvbmZpZzogbnVsbCkge1xuICBAaWYgJGNvbmZpZyA9PSBudWxsIHtcbiAgICAkY29uZmlnOiBtYXQtdHlwb2dyYXBoeS1jb25maWcoKTtcbiAgfVxuXG4gIEBpbmNsdWRlIG1hdC1iYWRnZS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtYmFzZS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtYXV0b2NvbXBsZXRlLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1ib3R0b20tc2hlZXQtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWJ1dHRvbi10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtYnV0dG9uLXRvZ2dsZS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtY2FyZC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtY2hlY2tib3gtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWNoaXBzLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC10YWJsZS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZGF0ZXBpY2tlci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZGlhbG9nLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1leHBhbnNpb24tcGFuZWwtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWdyaWQtbGlzdC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtaWNvbi10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtaW5wdXQtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LW1lbnUtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXBhZ2luYXRvci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtcHJvZ3Jlc3MtYmFyLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1wcm9ncmVzcy1zcGlubmVyLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1yYWRpby10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtc2VsZWN0LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1zaWRlbmF2LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1zbGlkZS10b2dnbGUtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXNsaWRlci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtc3RlcHBlci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtc29ydC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtdGFicy10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtdG9vbGJhci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtdG9vbHRpcC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtbGlzdC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtb3B0aW9uLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1vcHRncm91cC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtc25hY2stYmFyLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC10cmVlLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG59XG5cblxuLy8gTWl4aW4gdGhhdCByZW5kZXJzIGFsbCBvZiB0aGUgY29yZSBzdHlsZXMgdGhhdCBhcmUgbm90IHRoZW1lLWRlcGVuZGVudC5cbkBtaXhpbiBtYXQtY29yZSgkdHlwb2dyYXBoeS1jb25maWc6IG51bGwpIHtcbiAgQGluY2x1ZGUgYW5ndWxhci1tYXRlcmlhbC10eXBvZ3JhcGh5KCR0eXBvZ3JhcGh5LWNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1yaXBwbGUoKTtcbiAgQGluY2x1ZGUgY2RrLWExMXkoKTtcbiAgQGluY2x1ZGUgY2RrLW92ZXJsYXkoKTtcbiAgQGluY2x1ZGUgY2RrLXRleHQtZmllbGQoKTtcbn1cblxuLy8gTWl4aW4gdGhhdCByZW5kZXJzIGFsbCBvZiB0aGUgY29yZSBzdHlsZXMgdGhhdCBkZXBlbmQgb24gdGhlIHRoZW1lLlxuQG1peGluIG1hdC1jb3JlLXRoZW1lKCR0aGVtZSkge1xuICBAaW5jbHVkZSBtYXQtcmlwcGxlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1vcHRpb24tdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LW9wdGdyb3VwLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1wc2V1ZG8tY2hlY2tib3gtdGhlbWUoJHRoZW1lKTtcblxuICAvLyBQcm92aWRlcyBleHRlcm5hbCBDU1MgY2xhc3NlcyBmb3IgZWFjaCBlbGV2YXRpb24gdmFsdWUuIEVhY2ggQ1NTIGNsYXNzIGlzIGZvcm1hdHRlZCBhc1xuICAvLyBgbWF0LWVsZXZhdGlvbi16JHpWYWx1ZWAgd2hlcmUgYCR6VmFsdWVgIGNvcnJlc3BvbmRzIHRvIHRoZSB6LXNwYWNlIHRvIHdoaWNoIHRoZSBlbGVtZW50IGlzXG4gIC8vIGVsZXZhdGVkLlxuICBAZm9yICR6VmFsdWUgZnJvbSAwIHRocm91Z2ggMjQge1xuICAgIC4jeyRfbWF0LWVsZXZhdGlvbi1wcmVmaXh9I3skelZhbHVlfSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigkelZhbHVlLCAkdGhlbWUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdyYXBwZXIgZWxlbWVudCB0aGF0IHByb3ZpZGVzIHRoZSB0aGVtZSBiYWNrZ3JvdW5kIHdoZW4gdGhlIHVzZXIncyBjb250ZW50IGlzbid0XG4gIC8vIGluc2lkZSBvZiBhIGBtYXQtc2lkZW5hdi1jb250YWluZXJgLiBOb3RlIHRoYXQgd2UgbmVlZCB0byBleGNsdWRlIHRoZSBhbXBlcnNhbmRcbiAgLy8gc2VsZWN0b3IgaW4gY2FzZSB0aGUgbWl4aW4gaXMgaW5jbHVkZWQgYXQgdGhlIHRvcCBsZXZlbC5cbiAgLm1hdC1hcHAtYmFja2dyb3VuZCN7aWYoJiwgJywgJi5tYXQtYXBwLWJhY2tncm91bmQnLCAnJyl9IHtcbiAgICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAgICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGJhY2tncm91bmQpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG5cbiAgLy8gTWFya2VyIHRoYXQgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgdXNlciBoYXMgYWRkZWQgYSB0aGVtZSB0byB0aGVpciBwYWdlLlxuICBAYXQtcm9vdCB7XG4gICAgLm1hdC10aGVtZS1sb2FkZWQtbWFya2VyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtZGl2aWRlci10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWRpdmlkZXIge1xuICAgIGJvcmRlci10b3AtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cblxuICAubWF0LWRpdmlkZXItdmVydGljYWwge1xuICAgIGJvcmRlci1yaWdodC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxufVxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vLyBDcmVhdGUgYSB0aGVtZS5cbkBtaXhpbiBhbmd1bGFyLW1hdGVyaWFsLXRoZW1lKCR0aGVtZSkge1xuICBAaW5jbHVkZSBtYXQtY29yZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtYXV0b2NvbXBsZXRlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1iYWRnZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtYm90dG9tLXNoZWV0LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1idXR0b24tdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWJ1dHRvbi10b2dnbGUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWNhcmQtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWNoZWNrYm94LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1jaGlwcy10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtdGFibGUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWRhdGVwaWNrZXItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWRpYWxvZy10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZGl2aWRlci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZXhwYW5zaW9uLXBhbmVsLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1ncmlkLWxpc3QtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWljb24tdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWlucHV0LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1saXN0LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1tZW51LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1wYWdpbmF0b3ItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXByb2dyZXNzLWJhci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtcmFkaW8tdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXNlbGVjdC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtc2lkZW5hdi10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtc2xpZGUtdG9nZ2xlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1zbGlkZXItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXN0ZXBwZXItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXNvcnQtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXRhYnMtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXRvb2xiYXItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXRvb2x0aXAtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXRyZWUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXNuYWNrLWJhci10aGVtZSgkdGhlbWUpO1xufVxuIiwiQGltcG9ydCBcIm1peGluc1wiO1xuQGltcG9ydCBcInZhcnNcIjtcbkBpbXBvcnQgXCJ+QGFuZ3VsYXIvbWF0ZXJpYWwvdGhlbWluZ1wiO1xuXG4ubWNrIHtcbiAgICAmLWluaGVyaXQge1xuICAgICAgICAmLWZvbnQge1xuICAgICAgICAgICAgLy8gcGF0Y2hlcyBnbG9iYWwgZm9udCBzdHlsaW5nIGRvbmUgYnkgbGVnYWN5IHVpXG4gICAgICAgICAgICBmb250OiBpbmhlcml0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1jb250ZW50IHtcbiAgICAgICAgJi1leHBhbmQge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG5cbiAgICAgICAgICAgICYtd2lkdGgge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLWhlaWdodCB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi13aXRoLWZvb3Rlci1oZWlnaHQge1xuICAgICAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNThweCk7XG4gICAgICAgIH1cblxuICAgICAgICAmLWZ1bGwtaGVpZ2h0IHtcbiAgICAgICAgICAgIGhlaWdodDogMTAwdmg7XG4gICAgICAgIH1cblxuICAgICAgICAmLXBhZ2Uge1xuICAgICAgICAgICAgQGV4dGVuZCAubWNrLWNvbnRlbnQtZXhwYW5kO1xuICAgICAgICAgICAgYmFja2dyb3VuZDogJHBhZ2UtYmFja2dyb3VuZC1jb2xvcjtcblxuICAgICAgICAgICAgJi1jb250YWluZXIge1xuICAgICAgICAgICAgICAgIEBleHRlbmQgLm1jay1jb250ZW50LWZ1bGwtaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1ib2R5IHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWdyb3VwIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHBhZ2UtcGFkZGluZztcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA3NTlweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtc2hhZG93IHtcbiAgICAgICAgQGluY2x1ZGUgbWF0LWVsZXZhdGlvbigxKTtcbiAgICB9XG5cbiAgICAmLWZsZXgtMSB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgfVxuXG4gICAgJi1yb3cge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuXG4gICAgICAgICYubWNrLWNlbnRlciB7XG4gICAgICAgICAgICAmLWp1c3RpZnkge1xuICAgICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLWFsaWduIHtcbiAgICAgICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAZXh0ZW5kIC5tY2stY2VudGVyLWp1c3RpZnk7XG4gICAgICAgICAgICBAZXh0ZW5kIC5tY2stY2VudGVyLWFsaWduO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5tY2stc3RyZXRjaCB7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICAgICAgfVxuXG4gICAgICAgICYtZmxvdyB7XG4gICAgICAgICAgICBAZXh0ZW5kIC5tY2stcm93O1xuICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5tY2stc2Nyb2xsIHtcbiAgICAgICAgICAgIG92ZXJmbG93LXg6IHNjcm9sbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtY29sdW1uIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuICAgICAgICAmLm1jay1jZW50ZXIge1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5tY2stc3BhY2UtYmV0d2VlbiB7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIH1cblxuICAgICAgICAmLm1jay1zdHJldGNoIHtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5tY2stc2Nyb2xsIHtcbiAgICAgICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgICAgICAgICAgIG92ZXJmbG93LXk6IG92ZXJsYXk7XG4gICAgICAgIH1cblxuICAgICAgICAmLm1jay1mbGV4LWVuZCB7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1vdmVyZmxvdyB7XG4gICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgIH1cblxuICAgICYtYm9yZGVyZWQsICYtaW5wdXQge1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xuXG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjNDY0NjQ2O1xuICAgICAgICB9XG5cbiAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgICBib3JkZXItY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICB9XG5cbiAgICAgICAgJltkaXNhYmxlZD1cInRydWVcIl0ge1xuICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgICAgICBib3JkZXItY29sb3I6ICNmMGYwZjA7XG4gICAgICAgICAgICBjb2xvcjogI2NjYztcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtZGF0ZS1kaXNwbGF5IHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiA0M3B4O1xuICAgICAgICBwYWRkaW5nOiAkc3BhY2luZy1zbWFsbCAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICB0cmFuc2l0aW9uOiBib3JkZXIgMjAwbXMsIGJveC1zaGFkb3cgMjAwbXM7XG4gICAgfVxuXG4gICAgJi1mb3JtLWlucHV0IHtcblxuICAgICAgICAubWF0LWZvcm0tZmllbGQtd3JhcHBlciB7XG4gICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1mb3JtLWZpZWxkIHtcbiAgICAgICAgICAgIG1pbi13aWR0aDogYXV0byAhaW1wb3J0YW50O1xuXG4gICAgICAgICAgICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgIHBhZGRpbmctdG9wOiAwLjdyZW0gIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogJHNwYWNpbmcteHhzbWFsbCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gICAgICAgICAgICAgICAgbWluLWhlaWdodDogMi43cmVtO1xuICAgICAgICAgICAgICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLm1jay1jZW50ZXItc3VmZml4IHtcbiAgICAgICAgICAgICAgICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgICAgICAgICAgICAgICBAZXh0ZW5kIC5tY2stcm93O1xuICAgICAgICAgICAgICAgICAgICBAZXh0ZW5kIC5tY2stY2VudGVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5tY2stc2VsZWN0LWRyb3Bkb3duLWJ1dHRvbiB7XG4gICAgICAgICAgICAgICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMnB4O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1mbGV4IHtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAycmVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWluLWhlaWdodDogMnJlbTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1mb3JtLWZpZWxkLm1hdC1zIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgbWF0LXNlbGVjdCB7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAwLjJyZW07XG5cbiAgICAgICAgICAgIC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYgLm1hdC1zZWxlY3QtdmFsdWUgPiAubWF0LXNlbGVjdC12YWx1ZS10ZXh0ID4gc3BhbiB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICAgICAgICAgIC8vIGNvbG9yOiAjMzMzMzMzICFpbXBvcnRhbnQ7IC8vUi0tLSBibG9ja3MgZGlzYWJsZWQgc3RhdGUgY29sb3JcbiAgICAgICAgICAgICAgICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCxcbiAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsXG4gICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICRib3JkZXI7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5hdmFpbGFibGUge1xuICAgICAgICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICAgICAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LFxuICAgICAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsXG4gICAgICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzNhYTUzNztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAuYm9va2VkIHtcbiAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lIHtcbiAgICAgICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCxcbiAgICAgICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLFxuICAgICAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNlMTJlNDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sge1xuICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Lm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsXG4gICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLFxuICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgICAgICAgICBib3JkZXItd2lkdGg6IDFweDtcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgPiBtYXQtZm9ybS1maWVsZC5tY2stZXJyb3Ige1xuICAgICAgICAgICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgIC8vIGxlc3MganVtcGluZyBmb3IgZXJyb3IgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICAgICAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LFxuICAgICAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsXG4gICAgICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogJGVycm9yLWNvbG9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG1jay1jbG9zZS1pY29uLm1hdC1jaGlwLXJlbW92ZS5tYXQtY2hpcC1yZW1vdmUge1xuICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgbWF0LWxhYmVsIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgIH1cblxuICAgICAgICBtYXQtcmFkaW8tYnV0dG9uIHtcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHNwYWNpbmctc21hbGw7XG4gICAgICAgIH1cblxuICAgICAgICAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnQge1xuICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIH1cblxuICAgICAgICAubWF0LXJhZGlvIHtcbiAgICAgICAgICAgICYtb3V0ZXItY2lyY2xlIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICRwcmltYXJ5ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAxcHggIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi1pbm5lci1jaXJjbGUge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBtYXQtcmFkaW8tZ3JvdXAge1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG5cbiAgICAgICAgICAgICYgPiBtYXQtcmFkaW8tYnV0dG9uOmxhc3QtY2hpbGQge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtY29udGFpbmVyIHtcbiAgICAgICAgICAgID4gLm1jay1mb3JtLWlucHV0LCA+IG1jay1zZWxlY3Qge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nLXh4c21hbGw7XG5cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nLW1lZGl1bS1sYXJnZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tY2stcmFkaW8tc2VsZWN0IHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy1zbWFsbDtcblxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogJHNwYWNpbmctbWVkaXVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwIHtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDEuNXJlbTtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjaGlwLWNvbG9yO1xuICAgICAgICAgICAgcGFkZGluZy10b3A6ICRzcGFjaW5nLXNtYWxsZXN0O1xuICAgICAgICAgICAgcGFkZGluZy1ib3R0b206ICRzcGFjaW5nLXNtYWxsZXN0O1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICAgICAgQGluY2x1ZGUgY2hpcC1sYWJlbDtcbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbWF0LWNoZWNrYm94IHtcbiAgICAgICAgICAgICYubWF0LWNoZWNrYm94Lm1hdC1jaGVja2JveCB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgY2hlY2tib3gtbGFiZWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRpdi5tYXQtY2hlY2tib3gtYmFja2dyb3VuZC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnk7XG5cbiAgICAgICAgICAgICAgICAmLm1jay1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtZGlzYWJsZWQge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYubWNrLWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1kaXNhYmxlZCB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgY2hlY2tib3gtbGFiZWw7XG4gICAgICAgICAgICAgICAgY29sb3I6ICRib3JkZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWJvcmRlcmxlc3Mge1xuICAgICAgICBib3JkZXI6IG5vbmU7XG5cbiAgICAgICAgJjpob3ZlciwgJjpmb2N1cywgJjpkaXNhYmxlZCB7XG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXNlbGVjdC1wYW5lbCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdW5zZXQgIWltcG9ydGFudDtcbiAgICAgICAgbWFyZ2luLXRvcDogMzVweCAhaW1wb3J0YW50O1xuICAgICAgICBtYXJnaW4tbGVmdDogNXB4O1xuXG4gICAgICAgIG1hdC1vcHRpb24ge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMDtcblxuICAgICAgICAgICAgJi5tYXQtb3B0aW9uLXRleHQge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYubWNrLW1hcmdpbi10b3Age1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogJHNwYWNpbmctbWVkaXVtICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWNoZWNrYm94LXBhbmVsIHtcbiAgICAgICAgJi5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsLm1hdC1hdXRvY29tcGxldGUtcGFuZWwge1xuICAgICAgICAgICAgdG9wOiAtMTBweDtcbiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDI3OHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgbWF0LW9wdGlvbi5tY2stdHJ1bmNhdGVkIHtcbiAgICAgICAgICAgICYgLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIG1heC1saW5lcygyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1vcHRpb24ge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICAgICAgICAgICAgaGVpZ2h0OiB1bnNldDtcbiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDM2cHg7XG5cbiAgICAgICAgICAgICYgLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICAgICAgICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYgLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGNoZWNrYm94LWxhYmVsO1xuICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYubWNrLWNoZWNrYm94LWdyb3VwLWhlYWRlciB7XG4gICAgICAgICAgICAgICAgJiAubWF0LWNoZWNrYm94LWxhYmVsLm1hdC1jaGVja2JveC1sYWJlbCB7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLm1jay1jaGVja2JveC1ncm91cC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6ICRzcGFjaW5nLWxhcmdlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtYXQtY2hlY2tib3gge1xuICAgICAgICAgICAgICAgIGxhYmVsLm1hdC1jaGVja2JveC1sYXlvdXQge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMnB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMnB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZGl2Lm1hdC1jaGVja2JveC1mcmFtZS5tYXQtY2hlY2tib3gtZnJhbWUge1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBtY2stY2hlY2tib3gtYm9yZGVyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICYubWF0LWNoZWNrYm94LWNoZWNrZWQge1xuICAgICAgICAgICAgICAgICAgICBkaXYubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmLm1jay1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtZGlzYWJsZWQge1xuICAgICAgICAgICAgICAgICAgICBkaXYubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmLm1jay1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtZGlzYWJsZWQge1xuICAgICAgICAgICAgICAgICAgICAmIC5tYXQtY2hlY2tib3gtbGFiZWwubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGNoZWNrYm94LWxhYmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICRib3JkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXIge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJHNwYWNpbmctc21hbGwtbWVkaXVtO1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICRzcGFjaW5nLXNtYWxsLW1lZGl1bTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXNlbGVjdC1vcHRpb24ge1xuICAgICAgICAmLXNlbGVjdGVkIHtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICAgICAgICAgIGNvbG9yOiBibGFjaztcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG5cbiAgICAgICAgICAgIC5tY2stc3BhY2VyLWNvbnRlbnQge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHNwYWNpbmcteHNtYWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi11bnNlbGVjdGVkIHtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcblxuICAgICAgICAgICAgJi5tY2staWdub3JlLWRpc2FibGVkIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tY2stc3BhY2VyLWNvbnRlbnQge1xuICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6ICRzcGFjaW5nLXhzbWFsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtYnV0dG9uIHtcbiAgICAgICAgJi5tYXQtYnV0dG9uLm1hdC1idXR0b24sICYubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiB7XG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICAgICAgQGV4dGVuZCAubWNrLWNvbHVtbjtcbiAgICAgICAgICAgIEBleHRlbmQgLm1jay1jZW50ZXI7XG4gICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcblxuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbGVzdDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbGVzdDtcbiAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcblxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5tY2stc2hvcnQge1xuICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDgzcHg7XG5cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiAxNTVweDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBzb21lIGNhc2VzIGJ1dHRvbnMgaW4gZGVza3RvcCBhcmUgNDAgdnMgNDhweFxuICAgICAgICAgICAgICAgICYubWNrLXNob3J0LWhlaWdodCB7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogNDBweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5tY2stc3F1YXJlIHtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDMycHg7XG4gICAgICAgICAgICAgICAgbWluLXdpZHRoOiAzMnB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7XG5cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiA0MHB4O1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgICAgIEBleHRlbmQgLm1jay1idXR0b247XG5cbiAgICAgICAgJi5tYXQtYnV0dG9uLm1hdC1idXR0b24ge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnk7XG5cbiAgICAgICAgICAgICZbZGlzYWJsZWRdLCAmLmRpc2FibGVkIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzc1NzU3NTtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuXG4gICAgICAgICAgICAgICAgJiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICM3NTc1NzU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtc2Vjb25kYXJ5LWJ1dHRvbiB7XG4gICAgICAgIEBleHRlbmQgLm1jay1idXR0b247XG5cbiAgICAgICAgJi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIG1jay10aGluLWJ1dHRvbi1ib3JkZXI7XG4gICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjMjI1MUZGO1xuICAgICAgICAgICAgY29sb3I6ICMyMjUxRkY7XG4gICAgICAgICAgICAmW2Rpc2FibGVkXSwgJi5kaXNhYmxlZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgICAgICAgICAgICAgY29sb3I6ICMzMzMzMzM7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYubWF0LWJ1dHRvbi5tYXQtYnV0dG9uIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuXG4gICAgICAgICAgICAmID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkY2hpcC1jb2xvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtd2FybmluZy1idXR0b24ge1xuICAgICAgICBAZXh0ZW5kIC5tY2stYnV0dG9uO1xuXG4gICAgICAgICYubWF0LWJ1dHRvbi5tYXQtYnV0dG9uIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci1icmFuZC15ZWxsb3c7XG5cbiAgICAgICAgICAgICYgPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6IGJsYWNrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1zdHJva2VkLWJ1dHRvbiB7XG4gICAgICAgIEBleHRlbmQgLm1jay1idXR0b247XG5cbiAgICAgICAgJi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIG1jay1idXR0b24tYm9yZGVyO1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctbWVkaXVtLWxhcmdlO1xuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctbWVkaXVtLWxhcmdlO1xuXG4gICAgICAgICAgICAmLm1jay1zaG9ydCB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgICAgICAgICAgIG1pbi13aWR0aDogODNweDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsZXN0O1xuICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsZXN0O1xuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMTU1cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBwcmltYXJ5IGNvbG9yc1xuICAgICAgICAgICAgJi5tY2stcHJpbWFyeSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgICAgICAgICBjb2xvcjogJHByaW1hcnk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYubWNrLXRoaW4tYm9yZGVyLWxpZ2h0IHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMXB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICAgICAgY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi10b2dnbGUtYnV0dG9uIHtcbiAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgICAgICBib3JkZXItY29sb3I6ICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgICAgICBtaW4td2lkdGg6IDU5cHg7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgIG1pbi13aWR0aDogMTMycHg7XG4gICAgICAgICAgICBwYWRkaW5nLXRvcDogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgJi1zZWxlY3RlZCB7XG4gICAgICAgICAgICBjb2xvcjogJHByaW1hcnk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWRhdGUtcGlja2VyIHtcbiAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgICAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7XG5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAyM3JlbTtcbiAgICAgICAgfVxuXG4gICAgICAgICYgPiAuaGVhZGVyLmhlYWRlciB7XG4gICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgICAgIGNvbG9yOiAkZm9ybS1sYWJlbDtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6ICRzcGFjaW5nLXNtYWxsLW1lZGl1bTtcblxuICAgICAgICAgICAgJiA+IC5hcnJvdy5hcnJvdyB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDIuMzc1cmVtO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMnJlbTtcblxuICAgICAgICAgICAgICAgICYgPiAuaWNvbi5pY29uIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDFyZW07XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMXJlbTtcbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICYgPiAubmV4dC5uZXh0IHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdsaWJzL3VpL3NyYy9saWIvaWNvbnMvYXJyb3ctZm9yd2FyZC5zdmcnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmID4gLnByZXZpb3VzLnByZXZpb3VzIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdsaWJzL3VpL3NyYy9saWIvaWNvbnMvYXJyb3ctYmFja3dhcmQuc3ZnJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgfVxuXG4gICAgICAgICYgPiAubW9udGgge1xuICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgIH1cblxuICAgICAgICAmID4gLndlZWsge1xuICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICBjb2xvcjogJHNlY29uZGFyeS1sYWJlbDtcbiAgICAgICAgfVxuXG4gICAgICAgICYgPiAuYm9keSB7XG4gICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuXG4gICAgICAgICAgICAmID4gZGl2ID4gZGl2LmRhdGUge1xuICAgICAgICAgICAgICAgICYgPiAuZG90IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmLmRpc2FibGVkIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAkc2Vjb25kYXJ5LWxhYmVsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICYuYWN0aXZlIHtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJi5ub24tbW9udGgge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJHNlY29uZGFyeS1sYWJlbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXNwYWNlci1jb250ZW50IHtcbiAgICAgICAgJi1jb2xsYXBzZS10YWJsZXQge1xuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKHRhYmxldCkge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWV4cGFuZC1tb2JpbGUge1xuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWRpdmlkZXIge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtZXhwYW5zaW9uLXBhbmVsIHtcbiAgICAgICAgJi5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwge1xuICAgICAgICAgICAgQGluY2x1ZGUgbWF0LWVsZXZhdGlvbigwKTtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHNlbGVjdGVkLW9wdGlvbjtcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkc2VsZWN0ZWQtb3B0aW9uO1xuXG4gICAgICAgICAgICAmLm1jay1leHBhbmRlZCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY29sb3I7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcblxuICAgICAgICAgICAgICAgICYgLm1jay1jb2xsYXBzZS1pY29uIHtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oMjRweCwgJ2NoZXZyb24tY2xvc2Uuc3ZnJyk7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDQ4cHgsICdjaGV2cm9uLWNsb3NlLWxhcmdlLnN2ZycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWF0LWV4cGFuc2lvbi1wYW5lbC1ib2R5IHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMDtcblxuICAgICAgICAgICAgICAgICYgPiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ge1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBib2R5LXRpbnk7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctc21hbGw7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiBibGFjaztcbiAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJiBtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciB7XG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctc21hbGw7XG5cbiAgICAgICAgICAgICYgPiBzcGFuLm1hdC1jb250ZW50IHtcbiAgICAgICAgICAgICAgICAvLyBjZW50ZXIgdGV4dCBhbmQgaWNvbnNcbiAgICAgICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJiBtYXQtcGFuZWwtdGl0bGUge1xuICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICB9XG5cbiAgICAgICAgLm1jay1jb2xsYXBzZS1pY29uIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICdjaGV2cm9uLW9wZW4uc3ZnJyk7XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oNDhweCwgJ2NoZXZyb24tb3Blbi1sYXJnZS5zdmcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNXMgZWFzZTtcbiAgICAgICAgICAgICYuZXhwYW5kZWQge1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWljb24tZmlsbC1vcGVuIHtcbiAgICAgICAgZmlsbDogJHByaW1hcnk7XG4gICAgfVxuXG4gICAgJi1pY29uLWZpbGwtY2xvc2Uge1xuICAgICAgICBmaWxsOiAkc2Vjb25kYXJ5LWxhYmVsO1xuICAgIH1cblxuICAgICYtaWNvbi1maWxsLWJsYWNrIHtcbiAgICAgICAgZmlsbDogYmxhY2s7XG4gICAgICAgIHN0cm9rZTogYmxhY2s7XG4gICAgfVxuXG4gICAgJi1pY29uLWZpbGwtd2hpdGUge1xuICAgICAgICBmaWxsOiB3aGl0ZTtcbiAgICAgICAgc3Ryb2tlOiB3aGl0ZTtcbiAgICB9XG5cbiAgICAmLWljb24tZmlsbC1ncmF5IHtcbiAgICAgICAgZmlsbDogIzMzMzMzMztcbiAgICAgICAgc3Ryb2tlOiAjMzMzMzMzO1xuICAgIH1cblxuICAgICYtbWluIHtcbiAgICAgICAgbWF4LXdpZHRoOiA1ODFweCAhaW1wb3J0YW50O1xuICAgICAgICB3aWR0aDogODB2dztcbiAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgbW9kYWwgaW50byBhIG1vcmUgJ2Z1bGwtc2NyZWVuJyBhcHBlYXJhbmNlIG9uIG1vYmlsZS5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICB3aWR0aDogMTAwdnc7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcblxuICAgICAgICAgICAgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLW5vZXhwYW5kIHtcbiAgICAgICAgbWF4LXdpZHRoOiA1ODFweCAhaW1wb3J0YW50O1xuICAgICAgICB3aWR0aDogODB2dyAhaW1wb3J0YW50O1xuICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBtb2RhbCBpbnRvIGEgbW9yZSAnZnVsbC1zY3JlZW4nIGFwcGVhcmFuY2Ugb24gbW9iaWxlLlxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gMzJweCkgIWltcG9ydGFudDtcbiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1tb2RhbCB7XG4gICAgICAgIG1heC13aWR0aDogODAwcHggIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDgwdnc7XG4gICAgICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIG1vZGFsIGludG8gYSBtb3JlICdmdWxsLXNjcmVlbicgYXBwZWFyYW5jZSBvbiBtb2JpbGUuXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG5cbiAgICAgICAgICAgIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1tb2RhbC1taW5pIHtcbiAgICAgICAgbWF4LXdpZHRoOiA1ODBweCAhaW1wb3J0YW50O1xuICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBtb2RhbCBpbnRvIGEgbW9yZSAnZnVsbC1zY3JlZW4nIGFwcGVhcmFuY2Ugb24gbW9iaWxlLlxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDB2dztcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuXG4gICAgICAgICAgICAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtbW9kYWwtc3VydmV5IHtcbiAgICAgICAgbWF4LXdpZHRoOiA2OTFweCAhaW1wb3J0YW50O1xuICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBtb2RhbCBpbnRvIGEgbW9yZSAnZnVsbC1zY3JlZW4nIGFwcGVhcmFuY2Ugb24gbW9iaWxlLlxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1tb2RhbC13aWRlIHtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDI0cHggIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgICBoZWlnaHQ6IDk1dmg7XG4gICAgICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICAgICAgICAubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4gICAgICAgICAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgLm1hdC1pY29uLWJ1dHRvbltuYW1lPVwiQ2xvc2VCdXR0b25cIl0ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICByaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLmNsb3NlLWltYWdlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMnB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgbW9kYWwgaW50byBhIG1vcmUgJ2Z1bGwtc2NyZWVuJyBhcHBlYXJhbmNlIG9uIG1vYmlsZS5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICB3aWR0aDogMTAwdnc7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgICAgIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICAmLW1vZGFsLXdpZGUtbWFuYWdlLWJvb2tpbmcge1xuICAgICAgICBtYXgtd2lkdGg6IDEwMjRweCAhaW1wb3J0YW50O1xuICAgICAgICB3aWR0aDogMTAwdnc7XG4gICAgICAgIC8vIGhlaWdodDogOTV2aDtcbiAgICAgICAgbWF4LWhlaWdodDogOTV2aDtcbiAgICAgICAgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuICAgICAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgIC5tYXQtaWNvbi1idXR0b25bbmFtZT1cIkNsb3NlQnV0dG9uXCJdIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgcmlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIC5jbG9zZS1pbWFnZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMzJweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIG1vZGFsIGludG8gYSBtb3JlICdmdWxsLXNjcmVlbicgYXBwZWFyYW5jZSBvbiBtb2JpbGUuXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgICAgICAgICAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgJi1hbGVydCB7XG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDB2dyAhaW1wb3J0YW50O1xuICAgICAgICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAkc3BhY2luZy1zbWFsbDtcbiAgICAgICAgfVxuXG4gICAgICAgICYtYmFja2Ryb3Age1xuICAgICAgICAgICAgYmFja2dyb3VuZDogJGFsZXJ0LW92ZXJsYXktYmc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXNsaWRlLXRvZ2dsZSB7XG4gICAgICAgICYubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkge1xuICAgICAgICAgICAgJiAubWF0LXNsaWRlLXRvZ2dsZS1iYXIubWF0LXNsaWRlLXRvZ2dsZS1iYXIge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5LWhpZ2hsaWdodDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJiAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYubWF0LXNsaWRlLXRvZ2dsZSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICAgIH1cblxuICAgICAgICAubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudCB7XG4gICAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgICBAaW5jbHVkZSBtYXgtbGluZXMoMik7XG4gICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICAgICAgICB9XG5cbiAgICAgICAgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIubWF0LXNsaWRlLXRvZ2dsZS10aHVtYiB7XG4gICAgICAgICAgICB3aWR0aDogMTRweDtcbiAgICAgICAgICAgIGhlaWdodDogMTRweDtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDUwJSwgNTAlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLWNvbnRhaW5lci5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLWNvbnRhaW5lciB7XG4gICAgICAgICAgICB0b3A6IC00cHg7XG4gICAgICAgICAgICBsZWZ0OiAtNHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLm1hdC1zbGlkZS10b2dnbGUtYmFyLm1hdC1zbGlkZS10b2dnbGUtYmFyIHtcbiAgICAgICAgICAgIGhlaWdodDogMjBweDtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMjBweDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtc2tlbGV0b24ge1xuICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcblxuICAgICAgICAmLWNoZWNrYm94IHtcbiAgICAgICAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDIwcHg7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAyMHB4O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWhlYWRlciA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgICAgIG1heC13aWR0aDogMjE1cHg7XG4gICAgICAgIH1cblxuICAgICAgICAmLWltYWdlID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICBAaW5jbHVkZSBwbGFjZWhvbGRlci1pbWFnZS1zaXplO1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgfVxuXG4gICAgICAgICYtc3RhdHVzID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICBAaW5jbHVkZSBwbGFjZWhvbGRlci1zdGF0dXMtc2l6ZTtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgJi1saW5lLTEgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgIGhlaWdodDogMjNweDtcbiAgICAgICAgICAgIG1heC13aWR0aDogMTc2cHg7XG5cbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDIxOXB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1saW5lLTIgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgIGhlaWdodDogMThweDtcbiAgICAgICAgICAgIG1heC13aWR0aDogMTY1cHg7XG5cbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDE4OXB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1saW5lLTMgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgIGhlaWdodDogMThweDtcbiAgICAgICAgICAgIG1heC13aWR0aDogMTQ3cHg7XG5cbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDE4OXB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1saW5lLTMwcCwgJi1saW5lLTMwcC10aGluIHtcbiAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMThweDtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDMwJTtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1heC13aWR0aDogMzAlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYtdGhpbiB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS00NXAsICYtbGluZS00NXAtdGhpbiB7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA0NSU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDQ1JTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiA0NSU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGluIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1saW5lLTUwcCwgJi1saW5lLTUwcC10aGluLCAmLWxpbmUtNTBwLXRoaWNrIHtcbiAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMThweDtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDUwJTtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1heC13aWR0aDogNTAlO1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDQ1JTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLXRoaW4ge1xuICAgICAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLXRoaWNrIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1saW5lLTYwcCwgJi1saW5lLTYwcC10aGluLCAmLWxpbmUtNjBwLXRoaWNrIHtcbiAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMThweDtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDYwJTtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1heC13aWR0aDogNjAlO1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDM1JTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLXRoaW4ge1xuICAgICAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLXRoaWNrIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1saW5lLTcwcCwgJi1saW5lLTcwcC10aGluLCAmLWxpbmUtNzBwLXRoaWNrIHtcbiAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMThweDtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDcwJTtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1heC13aWR0aDogNzAlO1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDI1JTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLXRoaW4ge1xuICAgICAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLXRoaWNrIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1saW5lLTgwcCwgJi1saW5lLTgwcC10aGluLCAmLWxpbmUtODBwLXRoaWNrIHtcbiAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMThweDtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDgwJTtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1heC13aWR0aDogODAlO1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDE1JTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLXRoaW4ge1xuICAgICAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLXRoaWNrIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1saW5lLTkwcCwgJi1saW5lLTkwcC10aGluIHtcbiAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMThweDtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDkwJTtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1heC13aWR0aDogOTAlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYtdGhpbiB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbG9hZC1tb3JlID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gKDIgKiAjeyRzcGFjaW5nLXNtYWxsfSkpO1xuICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAzMjBweDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDUwcHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWxvYWQtbW9yZS0xMDBwLCAmLWhlYWRlciwgJi1yb29tLWF2YWlsYWJpbGl0eSB7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgICAgICAgICAgd2lkdGg6IGNhbGMoMTAwdncgLSAoMiAqICN7JHNwYWNpbmctc21hbGx9KSk7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogbm9uZTtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1heC13aWR0aDogbm9uZTtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogNTBweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJi1yb29tLWF2YWlsYWJpbGl0eSB7XG4gICAgICAgICAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMjRweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG5cbiAgICB9XG59XG5cblxuLm1jayB7XG4gICAgJi1oZWFkaW5nLTUge1xuICAgICAgICBAaW5jbHVkZSBoZWFkaW5nLTU7XG4gICAgfVxufVxuXG5uZ3gtbWF0LXNlbGVjdC1zZWFyY2gge1xuICAgIC5tYXQtc2VsZWN0LXNlYXJjaC1uby1lbnRyaWVzLWZvdW5kIHtcbiAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICB9XG5cbiAgICAubWF0LXNlbGVjdC1zZWFyY2gtaW5wdXQge1xuICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIH1cblxuICAgIGJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1zZWxlY3Qtc2VhcmNoLWNsZWFyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgY29sb3I6IGJsYWNrO1xuICAgIH1cbn1cblxuOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgd2lkdGg6IDE2cHg7XG4gICAgaGVpZ2h0OiAxOHB4O1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgaGVpZ2h0OiAkc3BhY2luZy1tZWRpdW07XG4gICAgYm9yZGVyOiA0cHggc29saWQgcmdiYSgwLCAwLCAwLCAwKTtcbiAgICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2Nyb2xsYmFyLWNvbG9yO1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgLTFweCAtMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMDUpLCBpbnNldCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xufVxuOjotd2Via2l0LXNjcm9sbGJhci1idXR0b24ge1xuICAgIHdpZHRoOiAwO1xuICAgIGhlaWdodDogMDtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuaGVhZGVyIHtcbiAgICB6LWluZGV4OiAyO1xufVxuLm1iLWJsb2NrIHtcbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxufVxuLm1iLWJvdHRvbSB7XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAxMTBweDtcbiAgICB9XG59XG5cbi5tYXAtZmlsdGVycy1jb250YWluZXIgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkIHtcbiAgICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgICB0b3A6IDVweDtcbiAgICB9XG4gICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7XG4gICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgICAgcGFkZGluZy10b3A6ICRzcGFjaW5nLXh4c21hbGwgIWltcG9ydGFudDtcbiAgICB9XG59XG5cbi5vZmZpY2UtbGV2ZWwtcm93e1xuXG4gICAgLm1hdC1zZWxlY3QtcGxhY2Vob2xkZXJ7XG4gICAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICB9XG5cbiAgICAubGVnZW5kLWNvbnRhaW5lciAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICBoZWlnaHQ6IDQ1cHggIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5zZWxlY3QtZGl2aWRlcntcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHRvcDogMCAhaW1wb3J0YW50O1xuICAgICAgICB3aWR0aDogNDRweCAhaW1wb3J0YW50O1xuICAgICAgICByaWdodDogLTExcHggIWltcG9ydGFudDtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICAgICAgYm9yZGVyLXdpZHRoOiAwIDAgMCAxcHg7XG4gICAgICAgIGJvcmRlci1jb2xvcjogI2M2YzZjNjtcbiAgICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAxcHgpICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuZGlzYWJsZWR7XG4gICAgICAgIC5zZWxlY3QtZGl2aWRlcntcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGMEYwRjAgIWltcG9ydGFudDtcbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDJweCkgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAuc2VsZWN0LWNoZXZyb257XG4gICAgICAgICAgICBvcGFjaXR5OiAwLjU7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogMTBweDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLm9mZmljZS1sZXZlbC1yb3csIC5tYXAtY29udHJvbHN7XG4gICAgLmxlZ2VuZC1jb250YWluZXIgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnQ7XG4gICAgfVxufVxuXG4uYm9va2luZy1mb3JtLWNvbnRhaW5lciB7XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMzQ1cHgpO1xufVxuLmJvb2tpbmctZm9ybS1jb250YWluZXIgLm1jay1mb3JtLWlucHV0e1xuXG4gICAgbWF0LXNlbGVjdCB7XG4gICAgICAgICYgLm1hdC1zZWxlY3QtdmFsdWUgPiAubWF0LXNlbGVjdC12YWx1ZS10ZXh0ID4gc3BhbiB7XG4gICAgICAgICAgICAvLyBjb2xvcjogIzA1MWMyYyAhaW1wb3J0YW50OyAvL1ItLS0gYmxvY2tzIGRpc2FibGVkIHN0YXRlIGNvbG9yXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtYXQtbGFiZWwsIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudCB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zICFpbXBvcnRhbnQ7XG4gICAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgIH1cblxuICAgIGlucHV0LCBpbnB1dDo6cGxhY2Vob2xkZXJ7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgICAgICBjb2xvcjogI0IzQjNCMztcbiAgICB9XG59IiwiQGltcG9ydCBcIi4uL3N0eWxlc1wiO1xuXG4uYnV0dG9uLXdyYXBwZXIge1xuICAgIEBleHRlbmQgLm1jay1jb2x1bW47XG4gICAgZmxleC1iYXNpczogMTAwJTtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGVuZDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICB6LWluZGV4OiAyO1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgYm90dG9tOiAtMC41cmVtO1xuICAgICAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgICAgICBwYWRkaW5nLXRvcDogJHNwYWNpbmctbWVkaXVtLWxhcmdlO1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogJHNwYWNpbmctbWVkaXVtLWxhcmdlO1xuICAgIH1cblxuICAgICYuaGFzLWZpeGVkIHtcbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICB6LWluZGV4OiAyO1xuICAgICAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICB9ICAgICAgICBcbiAgICB9XG5cbiAgICAmLXNwYWNlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG4gICAgfVxuXG4gICAgJiA+IC5idXR0b24tcm93IHtcbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAvLyBtb2JpbGUgaXMgc3R1Y2sgdG8gdGhlIGJvdHRvbSBvZiBzY3JlZW4sIHNvIHdlIG5lZWQgdG8gYWRkIHBhZGRpbmcgYXJvdW5kIGl0LlxuICAgICAgICAgICAgcGFkZGluZzogJHNwYWNpbmctc21hbGw7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5tY2stbW9kYWwtcHJpbWFyeS1idXR0b24ge1xuICAgIGZsZXg6IDE7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luOiAwICRzcGFjaW5nLXhzbWFsbDtcbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIG1heC13aWR0aDogMzIwcHg7XG4gICAgfVxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICAgIH1cbn1cblxuLm1jay1tb2RhbC1zZWNvbmRhcnktYnV0dG9uIHtcbiAgICBmbGV4OiAxO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbjogMCAkc3BhY2luZy14c21hbGw7XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICBtYXgtd2lkdGg6IDMyMHB4O1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDAgJHNwYWNpbmcteHNtYWxsO1xuICAgIH1cbn1cblxuXG4uc21hbGwtYnV0dG9ucyB7XG4gICAgLm1jay1tb2RhbC1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtYXJnaW46IDAgJHNwYWNpbmcteHNtYWxsO1xuICAgICAgICBtYXgtd2lkdGg6IDEzNHB4O1xuICAgIFxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIC5tY2stbW9kYWwtc2Vjb25kYXJ5LWJ1dHRvbiB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtYXJnaW46IDAgJHNwYWNpbmcteHNtYWxsO1xuICAgICAgICBtYXgtd2lkdGg6IDEzNHB4O1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDAgJHNwYWNpbmcteHNtYWxsO1xuICAgICAgICAgICAgXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICB9XG59Il19 */"] }); + } }, directives: [i1.SpacerComponent, i2.NgIf, i3.MatButton], styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n.mck-inherit-font[_ngcontent-%COMP%] {\n font: inherit;\n}\n.mck-content-expand[_ngcontent-%COMP%], .mck-content-page[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n}\n.mck-content-expand-width[_ngcontent-%COMP%] {\n width: 100%;\n}\n.mck-content-expand-height[_ngcontent-%COMP%] {\n height: 100%;\n}\n.mck-content-with-footer-height[_ngcontent-%COMP%] {\n height: calc(100vh - 58px);\n}\n.mck-content-full-height[_ngcontent-%COMP%], .mck-content-page-container[_ngcontent-%COMP%] {\n height: 100vh;\n}\n.mck-content-page[_ngcontent-%COMP%] {\n background: #F8F9FA;\n}\n.mck-content-body[_ngcontent-%COMP%] {\n width: 100%;\n display: block;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-content-body[_ngcontent-%COMP%] {\n max-width: 1024px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-content-body[_ngcontent-%COMP%] {\n max-width: 1024px;\n }\n}\n.mck-content-group[_ngcontent-%COMP%] {\n padding-left: 1rem;\n padding-right: 1rem;\n width: 100%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-content-group[_ngcontent-%COMP%] {\n max-width: 759px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-content-group[_ngcontent-%COMP%] {\n max-width: 759px;\n }\n}\n.mck-shadow[_ngcontent-%COMP%] {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n}\n.mck-flex-1[_ngcontent-%COMP%] {\n flex: 1;\n}\n.mck-row[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .mck-row-flow[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n}\n.mck-row.mck-center-justify[_ngcontent-%COMP%], .mck-center-justify.mck-row-flow[_ngcontent-%COMP%], .mck-row.mck-center[_ngcontent-%COMP%], .mck-row.mck-button.mat-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .mck-center.mck-row-flow[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: center;\n}\n.mck-row.mck-center-align[_ngcontent-%COMP%], .mck-center-align.mck-row-flow[_ngcontent-%COMP%], .mck-row.mck-center[_ngcontent-%COMP%], .mck-row.mck-button.mat-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .mck-center.mck-row-flow[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n align-items: center;\n}\n.mck-row.mck-stretch[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mck-stretch.mat-form-field-infix[_ngcontent-%COMP%], .mck-stretch.mck-row-flow[_ngcontent-%COMP%] {\n align-items: stretch;\n}\n.mck-row-flow[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n}\n.mck-row.mck-scroll[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mck-scroll.mat-form-field-infix[_ngcontent-%COMP%], .mck-scroll.mck-row-flow[_ngcontent-%COMP%] {\n overflow-x: scroll;\n}\n.mck-column[_ngcontent-%COMP%], .button-wrapper[_ngcontent-%COMP%], .mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n.mck-column.mck-center[_ngcontent-%COMP%], .mck-center.button-wrapper[_ngcontent-%COMP%], .mck-column.mck-button.mat-button[_ngcontent-%COMP%], .mck-button.mat-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mck-stroked-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mck-warning-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mck-secondary-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-button.mck-primary-button[_ngcontent-%COMP%], .mat-button.mck-primary-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mck-stroked-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mck-warning-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mck-secondary-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mat-stroked-button.mck-primary-button.button-wrapper[_ngcontent-%COMP%], .mck-center.mck-button.mat-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-button[_ngcontent-%COMP%], .mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-button.mat-stroked-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-center.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mck-column.mat-form-field-infix[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.button-wrapper[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mck-button.mat-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: center;\n align-items: center;\n}\n.mck-column.mck-space-between[_ngcontent-%COMP%], .mck-space-between.button-wrapper[_ngcontent-%COMP%], .mck-space-between.mck-button.mat-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-space-between.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: space-between;\n}\n.mck-column.mck-stretch[_ngcontent-%COMP%], .mck-stretch.button-wrapper[_ngcontent-%COMP%], .mck-stretch.mck-button.mat-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-stretch.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n align-items: stretch;\n}\n.mck-column.mck-scroll[_ngcontent-%COMP%], .mck-scroll.button-wrapper[_ngcontent-%COMP%], .mck-scroll.mck-button.mat-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-scroll.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n overflow-y: scroll;\n overflow-y: overlay;\n}\n.mck-column.mck-flex-end[_ngcontent-%COMP%], .mck-flex-end.button-wrapper[_ngcontent-%COMP%], .mck-flex-end.mck-button.mat-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-flex-end.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: flex-end;\n}\n.mck-overflow[_ngcontent-%COMP%] {\n overflow: auto;\n}\n.mck-bordered[_ngcontent-%COMP%], .mck-input[_ngcontent-%COMP%] {\n border-radius: 0;\n border: 1px solid #B3B3B3;\n}\n.mck-bordered[_ngcontent-%COMP%]:hover, .mck-input[_ngcontent-%COMP%]:hover {\n border-color: #464646;\n}\n.mck-bordered[_ngcontent-%COMP%]:focus, .mck-input[_ngcontent-%COMP%]:focus {\n border-color: #1F40E6;\n}\n.mck-bordered[disabled=true][_ngcontent-%COMP%], .mck-input[disabled=true][_ngcontent-%COMP%] {\n pointer-events: none;\n border-color: #f0f0f0;\n color: #ccc;\n}\n.mck-date-display[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n height: 43px;\n padding: 1rem 0.5rem;\n transition: border 200ms, box-shadow 200ms;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-form-field-wrapper[_ngcontent-%COMP%] {\n padding-bottom: 0.5rem;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] {\n min-width: auto !important;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n width: 100%;\n padding-top: 0.7rem !important;\n padding-bottom: 0.5rem !important;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] {\n min-height: 2.7rem;\n color: rgba(0, 0, 0, 0.27);\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n margin-top: 2px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-flex[_ngcontent-%COMP%] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-flex[_ngcontent-%COMP%] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 2rem;\n min-height: 2rem;\n }\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 2rem;\n min-height: 2rem;\n }\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field.mat-s[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-select[_ngcontent-%COMP%] {\n margin-top: 0.2rem;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-select[_ngcontent-%COMP%] .mat-select-arrow[_ngcontent-%COMP%] {\n visibility: hidden;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-select[_ngcontent-%COMP%] .mat-select-value[_ngcontent-%COMP%] > .mat-select-value-text[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 400;\n font-family: \"McKinsey Sans\";\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #B3B3B3;\n border-width: 1px;\n border-radius: 0;\n}\n.mck-form-input[_ngcontent-%COMP%] .available[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .available[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .available[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #3aa537;\n}\n.mck-form-input[_ngcontent-%COMP%] .booked[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .booked[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .booked[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #e12e41;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline-thick[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline-thick[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline-thick[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #1F40E6;\n border-width: 1px;\n border-radius: 0;\n}\n.mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-wrapper[_ngcontent-%COMP%] {\n padding-bottom: 0;\n}\n.mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #E12E40;\n}\n.mck-form-input[_ngcontent-%COMP%] mck-close-icon.mat-chip-remove.mat-chip-remove[_ngcontent-%COMP%] {\n opacity: 1;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-label[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 400;\n text-align: left;\n margin-bottom: 0.5rem;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-radio-button[_ngcontent-%COMP%] {\n margin-right: 1rem;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-radio-label-content[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-radio-outer-circle[_ngcontent-%COMP%] {\n border-color: #1F40E6 !important;\n border-width: 1px !important;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-radio-inner-circle[_ngcontent-%COMP%] {\n background-color: #1F40E6 !important;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-radio-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-radio-group[_ngcontent-%COMP%] > mat-radio-button[_ngcontent-%COMP%]:last-child {\n margin-right: 0;\n}\n.mck-form-input-container[_ngcontent-%COMP%] > .mck-form-input[_ngcontent-%COMP%], .mck-form-input-container[_ngcontent-%COMP%] > mck-select[_ngcontent-%COMP%] {\n margin-bottom: 0.5rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-form-input-container[_ngcontent-%COMP%] > .mck-form-input[_ngcontent-%COMP%], .mck-form-input-container[_ngcontent-%COMP%] > mck-select[_ngcontent-%COMP%] {\n margin-bottom: 1.75rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-form-input-container[_ngcontent-%COMP%] > .mck-form-input[_ngcontent-%COMP%], .mck-form-input-container[_ngcontent-%COMP%] > mck-select[_ngcontent-%COMP%] {\n margin-bottom: 1.75rem;\n }\n}\n.mck-form-input-container[_ngcontent-%COMP%] .mck-radio-select[_ngcontent-%COMP%] {\n margin-bottom: 1rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-form-input-container[_ngcontent-%COMP%] .mck-radio-select[_ngcontent-%COMP%] {\n margin-bottom: 1.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-form-input-container[_ngcontent-%COMP%] .mck-radio-select[_ngcontent-%COMP%] {\n margin-bottom: 1.5rem;\n }\n}\n.mck-form-input[_ngcontent-%COMP%] mat-chip.mat-standard-chip.mat-standard-chip[_ngcontent-%COMP%] {\n border-radius: 3px;\n min-height: 1.5rem;\n background-color: #333333;\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 0.75rem;\n line-height: 1.5rem;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input[_ngcontent-%COMP%] mat-chip.mat-standard-chip.mat-standard-chip[_ngcontent-%COMP%] {\n line-height: inherit;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input[_ngcontent-%COMP%] mat-chip.mat-standard-chip.mat-standard-chip[_ngcontent-%COMP%] {\n line-height: inherit;\n }\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox.mat-checkbox.mat-checkbox[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] {\n background-color: #D0D0D0;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n color: #B3B3B3;\n}\n.mck-borderless[_ngcontent-%COMP%] {\n border: none;\n}\n.mck-borderless[_ngcontent-%COMP%]:hover, .mck-borderless[_ngcontent-%COMP%]:focus, .mck-borderless[_ngcontent-%COMP%]:disabled {\n border: none;\n}\n.mck-select-panel[_ngcontent-%COMP%] {\n margin-top: 0 !important;\n border-radius: unset !important;\n margin-top: 35px !important;\n margin-left: 5px;\n}\n.mck-select-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] {\n padding-left: 0;\n padding-right: 0;\n}\n.mck-select-panel[_ngcontent-%COMP%] mat-option.mat-option-text[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-select-panel.mck-margin-top[_ngcontent-%COMP%] {\n margin-top: 1.5rem !important;\n}\n.mck-checkbox-panel.mat-autocomplete-panel.mat-autocomplete-panel[_ngcontent-%COMP%] {\n top: -10px;\n max-height: 278px;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option.mck-truncated[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] {\n padding-left: 0;\n padding-right: 0;\n line-height: 24px;\n height: unset;\n min-height: 36px;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n flex: 1;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n text-align: left;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option.mck-checkbox-group-header[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option.mck-checkbox-group-child[_ngcontent-%COMP%] {\n margin-left: 2rem;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] label.mat-checkbox-layout[_ngcontent-%COMP%] {\n width: 100%;\n padding-left: 16px;\n padding-right: 16px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] label.mat-checkbox-layout[_ngcontent-%COMP%] {\n padding-left: 2px;\n padding-right: 2px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] label.mat-checkbox-layout[_ngcontent-%COMP%] {\n padding-left: 2px;\n padding-right: 2px;\n }\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] div.mat-checkbox-frame.mat-checkbox-frame[_ngcontent-%COMP%] {\n border: 1px solid #B3B3B3;\n border-radius: 0;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox.mat-checkbox-checked[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background[_ngcontent-%COMP%] {\n background-color: #D0D0D0;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n color: #B3B3B3;\n text-align: left;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] .mat-checkbox-inner-container[_ngcontent-%COMP%] {\n width: 1.25rem;\n height: 1.25rem;\n}\n.mck-select-option-selected[_ngcontent-%COMP%] {\n font-weight: 500;\n font-family: \"McKinsey Sans\";\n color: black;\n background-color: #E6E6E6;\n}\n.mck-select-option-selected[_ngcontent-%COMP%] .mck-spacer-content[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n margin-right: 0.75rem;\n}\n.mck-select-option-unselected[_ngcontent-%COMP%] {\n font-weight: 400;\n font-family: \"McKinsey Sans\";\n}\n.mck-select-option-unselected.mck-ignore-disabled[_ngcontent-%COMP%] {\n color: black;\n}\n.mck-select-option-unselected[_ngcontent-%COMP%] .mck-spacer-content[_ngcontent-%COMP%] {\n visibility: hidden;\n margin-right: 0.75rem;\n}\n.mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n height: 40px;\n border-radius: 0;\n border: none;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n }\n}\n.mck-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: normal;\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n }\n}\n.mck-button.mat-button.mat-button.mck-short[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button[_ngcontent-%COMP%] {\n height: 32px;\n min-width: 83px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-short[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-short[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%] {\n height: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%] {\n height: 40px;\n }\n}\n.mck-button.mat-button.mat-button.mck-square[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-square[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n min-width: 32px;\n padding: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-square[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-square[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-square[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-square[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n }\n}\n.mck-primary-button.mat-button.mat-button[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n}\n.mck-primary-button.mat-button.mat-button[disabled][_ngcontent-%COMP%], .mck-primary-button.mat-button.mat-button.disabled[_ngcontent-%COMP%] {\n background-color: #D0D0D0;\n color: #757575;\n cursor: not-allowed;\n}\n.mck-primary-button.mat-button.mat-button[disabled][_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-primary-button.mat-button.mat-button.disabled[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: #757575;\n}\n.mck-primary-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: white;\n}\n.mck-secondary-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] {\n border: 1px solid #D0D0D0;\n border-radius: 0;\n border: 1px solid #2251FF;\n color: #2251FF;\n}\n.mck-secondary-button.mat-stroked-button.mat-stroked-button[disabled][_ngcontent-%COMP%], .mck-secondary-button.mat-stroked-button.mat-stroked-button.disabled[_ngcontent-%COMP%] {\n border: 1px solid #D0D0D0;\n color: #333333;\n cursor: not-allowed;\n}\n.mck-secondary-button.mat-button.mat-button[_ngcontent-%COMP%] {\n background-color: white;\n}\n.mck-secondary-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: #333333;\n}\n.mck-warning-button.mat-button.mat-button[_ngcontent-%COMP%] {\n background-color: #ffd048;\n}\n.mck-warning-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: black;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] {\n border: 2px solid #B3B3B3;\n border-radius: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding-left: 1.75rem;\n padding-right: 1.75rem;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%] {\n height: 32px;\n min-width: 83px;\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-primary[_ngcontent-%COMP%] {\n border-width: 1px;\n border-color: #1F40E6;\n color: #1F40E6;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-thin-border-light[_ngcontent-%COMP%] {\n border-color: #D0D0D0;\n border-width: 1px;\n}\n.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: normal;\n color: #1F40E6;\n}\n.mck-toggle-button[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n border: 1px solid #B3B3B3;\n border-color: #D0D0D0;\n min-width: 59px;\n background-color: white;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-toggle-button[_ngcontent-%COMP%] {\n min-width: 132px;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-toggle-button[_ngcontent-%COMP%] {\n min-width: 132px;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n }\n}\n.mck-toggle-button-selected[_ngcontent-%COMP%] {\n color: #1F40E6;\n}\n.mck-date-picker[_ngcontent-%COMP%] {\n width: 100% !important;\n height: 100% !important;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-date-picker[_ngcontent-%COMP%] {\n max-width: 23rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-date-picker[_ngcontent-%COMP%] {\n max-width: 23rem;\n }\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n color: #051C2C;\n margin-top: 1.25rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] {\n width: 2.375rem;\n height: 2rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] > .icon.icon[_ngcontent-%COMP%] {\n width: 1rem;\n height: 1rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] > .next.next[_ngcontent-%COMP%] {\n background-image: url('arrow-forward.svg');\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] > .previous.previous[_ngcontent-%COMP%] {\n background-image: url('arrow-backward.svg');\n}\n.mck-date-picker[_ngcontent-%COMP%] > .month[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .week[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n color: #767676;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date[_ngcontent-%COMP%] > .dot[_ngcontent-%COMP%] {\n display: none;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date.disabled[_ngcontent-%COMP%] {\n background-color: transparent;\n border-radius: 0;\n color: #767676;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date.active[_ngcontent-%COMP%] {\n border-radius: 0;\n background-color: #1F40E6;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date.non-month[_ngcontent-%COMP%] {\n color: #767676;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-spacer-content-expand-mobile[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-spacer-content-expand-mobile[_ngcontent-%COMP%] {\n display: none;\n }\n}\n.mck-spacer-content-divider[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n border-radius: 0;\n border-top: 1px solid #E6E6E6;\n border-bottom: 1px solid #E6E6E6;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] {\n background-color: #F0F0F0;\n border-bottom: none;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n background-image: url('chevron-close.svg');\n background-size: contain;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-close-large.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-close-large.svg');\n background-size: contain;\n }\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] {\n padding-left: 0;\n padding-right: 0;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 0.75rem;\n line-height: 1.4;\n padding-left: 1rem;\n padding-right: 1rem;\n text-align: left;\n color: black;\n font-weight: normal;\n padding-bottom: 0.5rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-size: 1rem;\n line-height: 1.6;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-size: 1rem;\n line-height: 1.6;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n }\n}\n.mck-expansion-panel[_ngcontent-%COMP%] mat-expansion-panel-header[_ngcontent-%COMP%] {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.mck-expansion-panel[_ngcontent-%COMP%] mat-expansion-panel-header[_ngcontent-%COMP%] > span.mat-content[_ngcontent-%COMP%] {\n align-items: center;\n}\n.mck-expansion-panel[_ngcontent-%COMP%] mat-panel-title[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n color: black;\n font-weight: normal;\n}\n.mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n background-image: url('chevron-open.svg');\n background-size: contain;\n transform: rotate(0deg);\n transition: transform 0.5s ease;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-open-large.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-open-large.svg');\n background-size: contain;\n }\n}\n.mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon.expanded[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n}\n.mck-icon-fill-open[_ngcontent-%COMP%] {\n fill: #1F40E6;\n}\n.mck-icon-fill-close[_ngcontent-%COMP%] {\n fill: #767676;\n}\n.mck-icon-fill-black[_ngcontent-%COMP%] {\n fill: black;\n stroke: black;\n}\n.mck-icon-fill-white[_ngcontent-%COMP%] {\n fill: white;\n stroke: white;\n}\n.mck-icon-fill-gray[_ngcontent-%COMP%] {\n fill: #333333;\n stroke: #333333;\n}\n.mck-min[_ngcontent-%COMP%] {\n max-width: 581px !important;\n width: 80vw;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-min[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-min[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-min[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-min[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-noexpand[_ngcontent-%COMP%] {\n max-width: 581px !important;\n width: 80vw !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-noexpand[_ngcontent-%COMP%] {\n width: calc(100vw - 32px) !important;\n max-height: 100vh;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-noexpand[_ngcontent-%COMP%] {\n width: calc(100vw - 32px) !important;\n max-height: 100vh;\n }\n}\n.mck-modal[_ngcontent-%COMP%] {\n max-width: 800px !important;\n width: 80vw;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-mini[_ngcontent-%COMP%] {\n max-width: 580px !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-mini[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-mini[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-mini[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-mini[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-survey[_ngcontent-%COMP%] {\n max-width: 691px !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-survey[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-survey[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-wide[_ngcontent-%COMP%] {\n max-width: 1024px !important;\n width: 100vw;\n height: 95vh;\n max-height: 100vh;\n}\n.mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] {\n background-color: #F8F9FA;\n padding: 0 !important;\n overflow: hidden;\n}\n.mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] {\n position: relative;\n right: 32px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-wide-manage-booking[_ngcontent-%COMP%] {\n max-width: 1250px !important;\n width: 100vw;\n max-height: 95vh;\n}\n.mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] {\n background-color: #F8F9FA;\n padding: 0 !important;\n overflow: hidden;\n}\n.mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] {\n position: relative;\n right: 32px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-alert[_ngcontent-%COMP%] {\n max-width: 100vw !important;\n width: 100vw;\n margin-left: 1rem;\n margin-right: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-alert[_ngcontent-%COMP%] {\n max-width: 100vw !important;\n width: 100vw;\n margin-left: 1rem;\n margin-right: 1rem;\n }\n}\n.mck-alert-backdrop[_ngcontent-%COMP%] {\n background: rgba(5, 28, 44, 0.85);\n}\n.mck-slide-toggle.mat-slide-toggle.mat-checked[_ngcontent-%COMP%]:not(.mat-disabled) .mat-slide-toggle-bar.mat-slide-toggle-bar[_ngcontent-%COMP%] {\n background-color: #2251FF;\n}\n.mck-slide-toggle.mat-slide-toggle.mat-checked[_ngcontent-%COMP%]:not(.mat-disabled) .mat-slide-toggle-thumb.mat-slide-toggle-thumb[_ngcontent-%COMP%] {\n background-color: white;\n}\n.mck-slide-toggle.mat-slide-toggle[_ngcontent-%COMP%] {\n height: auto;\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-content.mat-slide-toggle-content[_ngcontent-%COMP%] {\n flex: 1;\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n white-space: normal;\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-thumb.mat-slide-toggle-thumb[_ngcontent-%COMP%] {\n width: 14px;\n height: 14px;\n transform: translate(50%, 50%);\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-thumb-container.mat-slide-toggle-thumb-container[_ngcontent-%COMP%] {\n top: -4px;\n left: -4px;\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-bar.mat-slide-toggle-bar[_ngcontent-%COMP%] {\n height: 20px;\n background-color: #D0D0D0;\n border-radius: 20px;\n}\n.mck-skeleton[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n}\n.mck-skeleton-checkbox[_ngcontent-%COMP%] {\n float: left;\n}\n.mck-skeleton-checkbox[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 20px;\n height: 20px;\n margin-bottom: 0;\n}\n.mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 100vw;\n margin-bottom: 0;\n max-width: 215px;\n}\n.mck-skeleton-image[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 81px;\n height: 82px;\n margin-bottom: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-skeleton-image[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 219px;\n height: 119px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-skeleton-image[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 219px;\n height: 119px;\n }\n}\n.mck-skeleton-status[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 117px;\n height: 78px;\n margin-top: 10px;\n margin-bottom: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-skeleton-status[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 117px;\n height: 78px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-skeleton-status[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 117px;\n height: 78px;\n }\n}\n.mck-skeleton-line-1[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 23px;\n max-width: 176px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-1[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 219px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-1[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 219px;\n }\n}\n.mck-skeleton-line-2[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 165px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-2[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-2[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n.mck-skeleton-line-3[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 147px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-3[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-3[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n.mck-skeleton-line-30p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 30%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-30p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 30%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-30p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 30%;\n }\n}\n.mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-45p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 45%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-45p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 45%;\n margin-right: 45%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-45p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 45%;\n margin-right: 45%;\n }\n}\n.mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-50p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 50%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-50p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 50%;\n margin-right: 45%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-50p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 50%;\n margin-right: 45%;\n }\n}\n.mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-60p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 60%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-60p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 60%;\n margin-right: 35%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-60p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 60%;\n margin-right: 35%;\n }\n}\n.mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-70p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 70%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-70p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 70%;\n margin-right: 25%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-70p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 70%;\n margin-right: 25%;\n }\n}\n.mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-80p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 80%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-80p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 80%;\n margin-right: 15%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-80p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 80%;\n margin-right: 15%;\n }\n}\n.mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-90p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 90%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-90p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 90%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-90p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 90%;\n }\n}\n.mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-load-more[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n width: calc(100vw - (2 * 1rem));\n height: 40px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-load-more[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 320px;\n height: 50px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-load-more[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 320px;\n height: 50px;\n }\n}\n.mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n width: calc(100vw - (2 * 1rem));\n height: 40px;\n max-width: none;\n width: 100%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: none;\n width: 100%;\n height: 50px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: none;\n width: 100%;\n height: 50px;\n }\n}\n.mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 124px;\n margin-bottom: 4px;\n}\n.mck-heading-5[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 1.5rem;\n line-height: 1.333;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-heading-5[_ngcontent-%COMP%] {\n font-size: 1.75rem;\n line-height: 1.142;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-heading-5[_ngcontent-%COMP%] {\n font-size: 1.75rem;\n line-height: 1.142;\n }\n}\nngx-mat-select-search[_ngcontent-%COMP%] .mat-select-search-no-entries-found[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\nngx-mat-select-search[_ngcontent-%COMP%] .mat-select-search-input[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\nngx-mat-select-search[_ngcontent-%COMP%] button.mat-button.mat-select-search-clear[_ngcontent-%COMP%] {\n background-color: transparent;\n border: none;\n color: black;\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 16px;\n height: 18px;\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n height: 1.5rem;\n border: 4px solid rgba(0, 0, 0, 0);\n background-clip: padding-box;\n border-radius: 8px;\n background-color: #757575;\n -webkit-box-shadow: inset -1px -1px 0px rgba(0, 0, 0, 0.05), inset 1px 1px 0px rgba(0, 0, 0, 0.05);\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar-button {\n width: 0;\n height: 0;\n display: none;\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar-corner {\n background-color: transparent;\n}\nheader[_ngcontent-%COMP%] {\n z-index: 2;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mb-block[_ngcontent-%COMP%] {\n display: block;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mb-block[_ngcontent-%COMP%] {\n display: block;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mb-bottom[_ngcontent-%COMP%] {\n padding-bottom: 110px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mb-bottom[_ngcontent-%COMP%] {\n padding-bottom: 110px;\n }\n}\n.map-filters-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n top: 5px;\n}\n.map-filters-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] {\n height: 48px;\n background-color: white;\n}\n.map-filters-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n padding-top: 0.5rem !important;\n}\n.office-level-row[_ngcontent-%COMP%] .mat-select-placeholder[_ngcontent-%COMP%] {\n color: #333333;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .office-level-row[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .office-level-row[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 45px !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .office-level-row[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .office-level-row[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 45px !important;\n }\n}\n.office-level-row[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n display: block;\n top: 0 !important;\n width: 44px !important;\n right: -11px !important;\n background: transparent !important;\n border-width: 0 0 0 1px;\n border-color: #c6c6c6;\n border-style: solid;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .office-level-row[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 1px) !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .office-level-row[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 1px) !important;\n }\n}\n.office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n background: #F0F0F0 !important;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 2px) !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 2px) !important;\n }\n}\n.office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-chevron[_ngcontent-%COMP%] {\n opacity: 0.5;\n margin-left: 10px;\n}\n.office-level-row[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .office-level-row[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .map-controls[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .map-controls[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n display: flex !important;\n width: 100% !important;\n justify-content: space-between !important;\n}\n.booking-form-container[_ngcontent-%COMP%] {\n overflow-y: auto;\n max-height: calc(100vh - 310px);\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-form-container[_ngcontent-%COMP%] {\n max-height: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-form-container[_ngcontent-%COMP%] {\n max-height: none;\n }\n}\n.booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-label[_ngcontent-%COMP%], .booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] .mat-radio-label-content[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\" !important;\n color: #333333;\n}\n.booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::-moz-placeholder {\n font-family: \"McKinsey Sans\";\n color: #B3B3B3;\n}\n.booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:-ms-input-placeholder {\n font-family: \"McKinsey Sans\";\n color: #B3B3B3;\n}\n.booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%], .booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder {\n font-family: \"McKinsey Sans\";\n color: #B3B3B3;\n}\n.button-wrapper[_ngcontent-%COMP%] {\n flex-basis: 100%;\n justify-content: end;\n background-color: white;\n z-index: 2;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .button-wrapper[_ngcontent-%COMP%] {\n bottom: -0.5rem;\n position: sticky;\n padding-top: 1.75rem;\n padding-bottom: 1.75rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .button-wrapper[_ngcontent-%COMP%] {\n bottom: -0.5rem;\n position: sticky;\n padding-top: 1.75rem;\n padding-bottom: 1.75rem;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .button-wrapper.has-fixed[_ngcontent-%COMP%] {\n z-index: 2;\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .button-wrapper.has-fixed[_ngcontent-%COMP%] {\n z-index: 2;\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n }\n}\n.button-wrapper-spacer[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .button-wrapper[_ngcontent-%COMP%] > .button-row[_ngcontent-%COMP%] {\n padding: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .button-wrapper[_ngcontent-%COMP%] > .button-row[_ngcontent-%COMP%] {\n padding: 1rem;\n }\n}\n.mck-modal-primary-button[_ngcontent-%COMP%] {\n flex: 1;\n width: 100%;\n margin: 0 0.75rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-modal-primary-button[_ngcontent-%COMP%] {\n max-width: 320px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-modal-primary-button[_ngcontent-%COMP%] {\n max-width: 320px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-primary-button[_ngcontent-%COMP%] {\n max-width: 100% !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-primary-button[_ngcontent-%COMP%] {\n max-width: 100% !important;\n }\n}\n.mck-modal-secondary-button[_ngcontent-%COMP%] {\n flex: 1;\n width: 100%;\n margin: 0 0.75rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-modal-secondary-button[_ngcontent-%COMP%] {\n max-width: 320px;\n margin-right: 0 0.75rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-modal-secondary-button[_ngcontent-%COMP%] {\n max-width: 320px;\n margin-right: 0 0.75rem;\n }\n}\n.small-buttons[_ngcontent-%COMP%] .mck-modal-primary-button[_ngcontent-%COMP%] {\n flex: 1;\n width: 100%;\n margin: 0 0.75rem;\n max-width: 134px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .small-buttons[_ngcontent-%COMP%] .mck-modal-primary-button[_ngcontent-%COMP%] {\n max-width: 100% !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .small-buttons[_ngcontent-%COMP%] .mck-modal-primary-button[_ngcontent-%COMP%] {\n max-width: 100% !important;\n }\n}\n.small-buttons[_ngcontent-%COMP%] .mck-modal-secondary-button[_ngcontent-%COMP%] {\n flex: 1;\n width: 100%;\n margin: 0 0.75rem;\n max-width: 134px;\n margin-right: 0 0.75rem;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .small-buttons[_ngcontent-%COMP%] .mck-modal-secondary-button[_ngcontent-%COMP%] {\n max-width: 100% !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .small-buttons[_ngcontent-%COMP%] .mck-modal-secondary-button[_ngcontent-%COMP%] {\n max-width: 100% !important;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJsaWJzL3VpL3NyYy9saWIvbW9kYWwtYnV0dG9uLXJvdy9tb2RhbC1idXR0b24tcm93LmNvbXBvbmVudC5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy91aS9zcmMvbGliL21peGlucy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2Uvbm9kZV9tb2R1bGVzL0Bhbmd1bGFyL21hdGVyaWFsL190aGVtaW5nLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvc3R5bGVzLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvbW9kYWwtYnV0dG9uLXJvdy9tb2RhbC1idXR0b24tcm93LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTJDQTs7RUFBQTtBQXFDQTs7c0JBQUE7QUFhQTtFQUNJLGdCQTlGTTtFQStGTix1QkE3RmM7QUNPbEI7QUR5RkE7O3NCQUFBO0FFa09BOzs7RUFBQTtBRnpSQTs7RUFBQTtBQXFDQTs7c0JBQUE7QUFhQTtFQUNJLGdCQTlGTTtFQStGTix1QkE3RmM7QUN5QmxCO0FEdUVBOztzQkFBQTtBR216Q0Esa0NBQUE7QUF1aURBLDJDQUFBO0FBd0NBLHFCQUFBO0FDOTlGUTtFQUVJLGFBQUE7QUg2Qlo7QUd4QlE7RUFDSSxXQUFBO0VBQ0EsWUFBQTtBSDBCWjtBR3hCWTtFQUNJLFdBQUE7QUgwQmhCO0FHdkJZO0VBQ0ksWUFBQTtBSHlCaEI7QUdyQlE7RUFDSSww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QSx5QkZ6VmM7QUNrcUNsQjtBRzFIUTtFQUNJLFdBQUE7QUg0SFo7QUczSFk7RUZqdEJSLHlCRnpWYztFSTRpQ0YsV0FBQTtFQUNBLFlBQUE7RUFDQSxnQkFBQTtBSDZIaEI7QUd6SFE7RUZ6dEJKLHlCRnpWYztFSW9qQ04sWUFBQTtFQUNBLGdCQUFBO0VBQ0EsZ0JBQUE7QUgySFo7QUd4SFE7RUZodUJKLHlCRnpWYztFRTZWZCxXQUFBO0VBQ0EsWUFBQTtFRTh0QlEsZ0JBQUE7QUgySFo7QUMzckNZO0VFNmpDSjtJRnh0QkEsWUFBQTtJQUNBLGFBQUE7RUQwMUJOO0FBQ0Y7QUNqc0NZO0VFNmpDSjtJRnh0QkEsWUFBQTtJQUNBLGFBQUE7RURnMkJOO0FBQ0Y7QUdwSVE7RUZ0dUJKLHlCRnpWYztFRXVXZCxZQUFBO0VBQ0EsWUFBQTtFRTB0QlEsZ0JBQUE7RUFDQSxnQkFBQTtBSHVJWjtBQzlzQ1k7RUVta0NKO0lGcHRCQSxZQUFBO0lBQ0EsWUFBQTtFRG0yQk47QUFDRjtBQ3B0Q1k7RUVta0NKO0lGcHRCQSxZQUFBO0lBQ0EsWUFBQTtFRHkyQk47QUFDRjtBR2hKUTtFRjd1QkoseUJGelZjO0VJd2tDTixZQUFBO0VBQ0EsZ0JBQUE7QUhrSlo7QUMvdENZO0VFMGtDSjtJQU1RLGdCQUFBO0VIbUpkO0FBQ0Y7QUNwdUNZO0VFMGtDSjtJQU1RLGdCQUFBO0VId0pkO0FBQ0Y7QUdySlE7RUZ2dkJKLHlCRnpWYztFSWtsQ04sWUFBQTtFQUNBLGdCQUFBO0FIdUpaO0FDOXVDWTtFRW9sQ0o7SUFNUSxnQkFBQTtFSHdKZDtBQUNGO0FDbnZDWTtFRW9sQ0o7SUFNUSxnQkFBQTtFSDZKZDtBQUNGO0FHMUpRO0VGandCSix5QkZ6VmM7RUk0bENOLFlBQUE7RUFDQSxnQkFBQTtBSDRKWjtBQzd2Q1k7RUU4bENKO0lBTVEsZ0JBQUE7RUg2SmQ7QUFDRjtBQ2x3Q1k7RUU4bENKO0lBTVEsZ0JBQUE7RUhrS2Q7QUFDRjtBRzlKWTtFRjV3QlIseUJGelZjO0VJdW1DRixZQUFBO0VBQ0EsY0FBQTtBSGdLaEI7QUM1d0NZO0VFeW1DQTtJQUtRLGNBQUE7RUhrS2xCO0FBQ0Y7QUNqeENZO0VFeW1DQTtJQUtRLGNBQUE7RUh1S2xCO0FBQ0Y7QUdwS2dCO0VBQ0ksWUFBQTtFQUNBLGtCQUFBO0FIc0twQjtBR2hLWTtFRjd4QlIseUJGelZjO0VJd25DRixZQUFBO0VBQ0EsY0FBQTtBSGtLaEI7QUMveENZO0VFMG5DQTtJQUtRLGNBQUE7SUFDQSxpQkFBQTtFSG9LbEI7QUFDRjtBQ3J5Q1k7RUUwbkNBO0lBS1EsY0FBQTtJQUNBLGlCQUFBO0VIMEtsQjtBQUNGO0FHdktnQjtFQUNJLFlBQUE7RUFDQSxrQkFBQTtBSHlLcEI7QUduS1k7RUYveUJSLHlCRnpWYztFSTBvQ0YsWUFBQTtFQUNBLGNBQUE7QUhxS2hCO0FDcHpDWTtFRTRvQ0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUh1S2xCO0FBQ0Y7QUMxekNZO0VFNG9DQTtJQUtRLGNBQUE7SUFDQSxpQkFBQTtFSDZLbEI7QUFDRjtBRzFLZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUg0S3BCO0FHeEtnQjtFQUNJLFlBQUE7RUFDQSxrQkFBQTtBSDBLcEI7QUdwS1k7RUZ2MEJSLHlCRnpWYztFSWtxQ0YsWUFBQTtFQUNBLGNBQUE7QUhzS2hCO0FDNzBDWTtFRW9xQ0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUh3S2xCO0FBQ0Y7QUNuMUNZO0VFb3FDQTtJQUtRLGNBQUE7SUFDQSxpQkFBQTtFSDhLbEI7QUFDRjtBRzNLZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUg2S3BCO0FHektnQjtFQUNJLFlBQUE7RUFDQSxrQkFBQTtBSDJLcEI7QUdyS1k7RUYvMUJSLHlCRnpWYztFSTByQ0YsWUFBQTtFQUNBLGNBQUE7QUh1S2hCO0FDdDJDWTtFRTRyQ0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUh5S2xCO0FBQ0Y7QUM1MkNZO0VFNHJDQTtJQUtRLGNBQUE7SUFDQSxpQkFBQTtFSCtLbEI7QUFDRjtBRzVLZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUg4S3BCO0FHMUtnQjtFQUNJLFlBQUE7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O0lBR1EsYUx5Qkk7RUN5b0RkO0FBQ0Y7QUMxckRZO0VHb0JSO0lBR1EsYUx5Qkk7RUM4b0RkO0FBQ0Y7QUlucURBO0VBQ0ksT0FBQTtFQUNBLFdBQUE7RUFDQSxpQkFBQTtBSnNxREo7QUN6c0RZO0VHZ0NaO0lBS1EsZ0JBQUE7RUp3cUROO0FBQ0Y7QUM5c0RZO0VHZ0NaO0lBS1EsZ0JBQUE7RUo2cUROO0FBQ0Y7QUMvc0RZO0VHNEJaO0lBU1EsMEJBQUE7RUo4cUROO0FBQ0Y7QUNwdERZO0VHNEJaO0lBU1EsMEJBQUE7RUptckROO0FBQ0Y7QUlockRBO0VBQ0ksT0FBQTtFQUNBLFdBQUE7RUFDQSxpQkFBQTtBSm1yREo7QUNudURZO0VHNkNaO0lBS1EsZ0JBQUE7SUFDQSx1QkFBQTtFSnFyRE47QUFDRjtBQ3p1RFk7RUc2Q1o7SUFLUSxnQkFBQTtJQUNBLHVCQUFBO0VKMnJETjtBQUNGO0FJdHJESTtFQUNJLE9BQUE7RUFDQSxXQUFBO0VBQ0EsaUJBQUE7RUFDQSxnQkFBQTtBSnlyRFI7QUNsdkRZO0VHcURSO0lBT1EsMEJBQUE7RUowckRWO0FBQ0Y7QUN2dkRZO0VHcURSO0lBT1EsMEJBQUE7RUorckRWO0FBQ0Y7QUk1ckRJO0VBQ0ksT0FBQTtFQUNBLFdBQUE7RUFDQSxpQkFBQTtFQUNBLGdCQUFBO0VBQ0EsdUJBQUE7QUo4ckRSO0FDbndEWTtFR2dFUjtJQVFRLDBCQUFBO0VKK3JEVjtBQUNGO0FDeHdEWTtFR2dFUjtJQVFRLDBCQUFBO0VKb3NEVjtBQUNGIiwiZmlsZSI6ImxpYnMvdWkvc3JjL2xpYi9tb2RhbC1idXR0b24tcm93L21vZGFsLWJ1dHRvbi1yb3cuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIkcHJpbWFyeTogIzFGNDBFNjtcbiRmb3JtLWxhYmVsOiAjMDUxQzJDO1xuJHNlY29uZGFyeS1sYWJlbDogIzc2NzY3NjtcbiRib3JkZXI6ICNCM0IzQjM7XG4kYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDogI0QwRDBEMDtcbiRjaGlwLWNvbG9yOiAjMzMzMzMzO1xuJHBsYWNlaG9sZGVyLWNvbG9yOiAjN0Y3RjdGO1xuJGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4kcGFnZS1iYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuJHNlbGVjdGVkLW9wdGlvbjogI0U2RTZFNjtcbiRjb2xvci1icmFuZC15ZWxsb3c6ICNmZmQwNDg7XG4kbGlnaHQteWVsbG93OiAjZmZmM2NlO1xuJGNvYWNobWFyay10ZXh0OiAjNmY0ZDAwO1xuJGVycm9yLWNvbG9yOiAjRTEyRTQwO1xuJG5vLWZpbHRlcnMtY29sb3I6ICNCQ0JDQkM7XG4kcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I6ICNGNEY0RjQ7XG4kcHJpbWFyeS1oaWdobGlnaHQ6ICMyMjUxRkY7XG4kc2Nyb2xsYmFyLWNvbG9yOiAjNzU3NTc1O1xuXG4kYXZhaWxhYmxlLWNvbG9yOiAjNUQ5RDUyO1xuJGF2YWlsYWJsZS1ieS1yZXF1ZXN0LWNvbG9yOiAjRjVCNTNGO1xuJGluLXVzZS1jb2xvcjogI0Q0NDgzRTtcbiRub3QtYm9va2FibGUtY29sb3I6ICNDQ0NDQ0M7XG5cbiRtb2RhbC1ib2R5LWhlYWRpbmc6ICM0RDRENEQ7XG4kYWxlcnQtb3ZlcmxheS1iZzogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2FjaG1hcmstYmc6ICNFQkVCRjY7XG4kY29hY2htYXJrLWRhcmstdGV4dDogIzFCMUIxOTtcbiRlcnJvci10ZXh0OiAjZmZmO1xuXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuXG4vLyA0cHhcbiRzcGFjaW5nLXNtYWxsZXN0OiAwLjI1cmVtO1xuXG4vLyA4cHhcbiRzcGFjaW5nLXh4c21hbGw6IDAuNXJlbTtcblxuLy8gMTJweFxuJHNwYWNpbmcteHNtYWxsOiAwLjc1cmVtO1xuXG4vLyAxNnB4XG4kc3BhY2luZy1zbWFsbDogMXJlbTtcblxuLy8gMjBweFxuJHNwYWNpbmctc21hbGwtbWVkaXVtOiAxLjI1cmVtO1xuXG4vLyAyNHB4XG4kc3BhY2luZy1tZWRpdW06IDEuNXJlbTtcblxuLy8gMjhweFxuJHNwYWNpbmctbWVkaXVtLWxhcmdlOiAxLjc1cmVtO1xuXG4vLyAzMnB4XG4kc3BhY2luZy1sYXJnZTogMnJlbTtcblxuLy8gNDhweFxuJHNwYWNpbmcteGxhcmdlOiAzcmVtO1xuXG4vLyA2NHB4XG4kc3BhY2luZy14eGxhcmdlOiA0cmVtO1xuXG4vLyA5NnB4XG4kc3BhY2luZy1sYXJnZXN0OiA2cmVtO1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGRldmljZS1tb2JpbGUtc2l6ZTogNDUwcHg7XG4kZGV2aWNlLXRhYmxldC1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFwdG9wLXNpemU6IDEwMjRweDtcblxuJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemU6IDgwMHB4O1xuJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemU6IDEwNDhweDtcbiRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplOiAxMjgwcHg7XG5cblxuOmV4cG9ydCB7XG4gICAgcHJpbWFyeTogJHByaW1hcnk7XG4gICAgc2Vjb25kYXJ5TGFiZWw6ICRzZWNvbmRhcnktbGFiZWw7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4kaWNvbi1zbWFsbDogMTZweDtcbiRpY29uLW1lZGl1bTogMjRweDtcbiRpY29uLWxhcmdlOiAzMnB4O1xuJGljb24teGxhcmdlOiA0OHB4O1xuIiwiLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKiBUaGVtZSBmb3IgdGhlIHJpcHBsZSBlbGVtZW50cy4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF0ZXJpYWwvbm8tcHJlZml4ZXMgKi9cbi8qIHN0eWxlbGludC1lbmFibGUgKi9cbi5tY2staW5oZXJpdC1mb250IHtcbiAgZm9udDogaW5oZXJpdDtcbn1cbi5tY2stY29udGVudC1leHBhbmQsIC5tY2stY29udGVudC1wYWdlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbn1cbi5tY2stY29udGVudC1leHBhbmQtd2lkdGgge1xuICB3aWR0aDogMTAwJTtcbn1cbi5tY2stY29udGVudC1leHBhbmQtaGVpZ2h0IHtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLm1jay1jb250ZW50LXdpdGgtZm9vdGVyLWhlaWdodCB7XG4gIGhlaWdodDogY2FsYygxMDB2aCAtIDU4cHgpO1xufVxuLm1jay1jb250ZW50LWZ1bGwtaGVpZ2h0LCAubWNrLWNvbnRlbnQtcGFnZS1jb250YWluZXIge1xuICBoZWlnaHQ6IDEwMHZoO1xufVxuLm1jay1jb250ZW50LXBhZ2Uge1xuICBiYWNrZ3JvdW5kOiAjRjhGOUZBO1xufVxuLm1jay1jb250ZW50LWJvZHkge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWNvbnRlbnQtYm9keSB7XG4gICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWNvbnRlbnQtYm9keSB7XG4gICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIH1cbn1cbi5tY2stY29udGVudC1ncm91cCB7XG4gIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcbiAgd2lkdGg6IDEwMCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWNvbnRlbnQtZ3JvdXAge1xuICAgIG1heC13aWR0aDogNzU5cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWNvbnRlbnQtZ3JvdXAge1xuICAgIG1heC13aWR0aDogNzU5cHg7XG4gIH1cbn1cbi5tY2stc2hhZG93IHtcbiAgYm94LXNoYWRvdzogMHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtcbn1cbi5tY2stZmxleC0xIHtcbiAgZmxleDogMTtcbn1cbi5tY2stcm93LCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4LCAubWNrLXJvdy1mbG93IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbn1cbi5tY2stcm93Lm1jay1jZW50ZXItanVzdGlmeSwgLm1jay1jZW50ZXItanVzdGlmeS5tY2stcm93LWZsb3csIC5tY2stcm93Lm1jay1jZW50ZXIsIC5tY2stcm93Lm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1yb3cubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93Lm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXJvdy5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXJvdy5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1yb3cubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1yb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1jZW50ZXItc3VmZml4IC5tYXQtZm9ybS1maWVsZC1pbmZpeCwgLm1jay1jZW50ZXIubWNrLXJvdy1mbG93LCAubWNrLXJvdy1mbG93Lm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuLm1jay1yb3cubWNrLWNlbnRlci1hbGlnbiwgLm1jay1jZW50ZXItYWxpZ24ubWNrLXJvdy1mbG93LCAubWNrLXJvdy5tY2stY2VudGVyLCAubWNrLXJvdy5tY2stYnV0dG9uLm1hdC1idXR0b24sIC5tY2stcm93Lm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1yb3cubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1yb3cubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stcm93Lm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXJvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stY2VudGVyLm1jay1yb3ctZmxvdywgLm1jay1yb3ctZmxvdy5tY2stYnV0dG9uLm1hdC1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24ge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLm1jay1yb3cubWNrLXN0cmV0Y2gsIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWNrLXN0cmV0Y2gubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stc3RyZXRjaC5tY2stcm93LWZsb3cge1xuICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbn1cbi5tY2stcm93LWZsb3cge1xuICBmbGV4LXdyYXA6IHdyYXA7XG59XG4ubWNrLXJvdy5tY2stc2Nyb2xsLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1jay1zY3JvbGwubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stc2Nyb2xsLm1jay1yb3ctZmxvdyB7XG4gIG92ZXJmbG93LXg6IHNjcm9sbDtcbn1cbi5tY2stY29sdW1uLCAuYnV0dG9uLXdyYXBwZXIsIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuLm1jay1jb2x1bW4ubWNrLWNlbnRlciwgLm1jay1jZW50ZXIuYnV0dG9uLXdyYXBwZXIsIC5tY2stY29sdW1uLm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LWJ1dHRvbi5idXR0b24td3JhcHBlciwgLm1jay1jb2x1bW4ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbi5idXR0b24td3JhcHBlciwgLm1jay1jb2x1bW4ubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbi5idXR0b24td3JhcHBlciwgLm1jay1jb2x1bW4ubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24uYnV0dG9uLXdyYXBwZXIsIC5tY2stY29sdW1uLm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24uYnV0dG9uLXdyYXBwZXIsIC5tY2stY29sdW1uLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24uYnV0dG9uLXdyYXBwZXIsIC5tY2stY29sdW1uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLmJ1dHRvbi13cmFwcGVyLCAubWNrLWNvbHVtbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbi5idXR0b24td3JhcHBlciwgLm1jay1jb2x1bW4ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLmJ1dHRvbi13cmFwcGVyLCAubWNrLWNvbHVtbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbi5idXR0b24td3JhcHBlciwgLm1jay1jZW50ZXIubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWNrLWNlbnRlci5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1jZW50ZXIubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stY2VudGVyLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stY2VudGVyLm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1jZW50ZXIubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stY2VudGVyLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stY2VudGVyLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stY2VudGVyLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1jZW50ZXIubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1jay1jb2x1bW4ubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXguYnV0dG9uLXdyYXBwZXIsIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1jZW50ZXItc3VmZml4IC5tYXQtZm9ybS1maWVsZC1pbmZpeC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1jZW50ZXItc3VmZml4IC5tYXQtZm9ybS1maWVsZC1pbmZpeC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4ubWNrLWNvbHVtbi5tY2stc3BhY2UtYmV0d2VlbiwgLm1jay1zcGFjZS1iZXR3ZWVuLmJ1dHRvbi13cmFwcGVyLCAubWNrLXNwYWNlLWJldHdlZW4ubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWNrLXNwYWNlLWJldHdlZW4ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stc3BhY2UtYmV0d2Vlbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1zcGFjZS1iZXR3ZWVuLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stc3BhY2UtYmV0d2Vlbi5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1zcGFjZS1iZXR3ZWVuLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLXNwYWNlLWJldHdlZW4ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1zcGFjZS1iZXR3ZWVuLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stc3BhY2UtYmV0d2Vlbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stc3BhY2UtYmV0d2Vlbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuLm1jay1jb2x1bW4ubWNrLXN0cmV0Y2gsIC5tY2stc3RyZXRjaC5idXR0b24td3JhcHBlciwgLm1jay1zdHJldGNoLm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1zdHJldGNoLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXN0cmV0Y2gubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stc3RyZXRjaC5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXN0cmV0Y2gubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stc3RyZXRjaC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1jay1zdHJldGNoLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stc3RyZXRjaC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXN0cmV0Y2gubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXN0cmV0Y2gubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xufVxuLm1jay1jb2x1bW4ubWNrLXNjcm9sbCwgLm1jay1zY3JvbGwuYnV0dG9uLXdyYXBwZXIsIC5tY2stc2Nyb2xsLm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1zY3JvbGwubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stc2Nyb2xsLm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXNjcm9sbC5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXNjcm9sbC5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1zY3JvbGwubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stc2Nyb2xsLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stc2Nyb2xsLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stc2Nyb2xsLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1zY3JvbGwubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgb3ZlcmZsb3cteTogb3ZlcmxheTtcbn1cbi5tY2stY29sdW1uLm1jay1mbGV4LWVuZCwgLm1jay1mbGV4LWVuZC5idXR0b24td3JhcHBlciwgLm1jay1mbGV4LWVuZC5tY2stYnV0dG9uLm1hdC1idXR0b24sIC5tY2stZmxleC1lbmQubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stZmxleC1lbmQubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stZmxleC1lbmQubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1mbGV4LWVuZC5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1mbGV4LWVuZC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1jay1mbGV4LWVuZC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLWZsZXgtZW5kLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stZmxleC1lbmQubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLWZsZXgtZW5kLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24ge1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xufVxuLm1jay1vdmVyZmxvdyB7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLm1jay1ib3JkZXJlZCwgLm1jay1pbnB1dCB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNCM0IzQjM7XG59XG4ubWNrLWJvcmRlcmVkOmhvdmVyLCAubWNrLWlucHV0OmhvdmVyIHtcbiAgYm9yZGVyLWNvbG9yOiAjNDY0NjQ2O1xufVxuLm1jay1ib3JkZXJlZDpmb2N1cywgLm1jay1pbnB1dDpmb2N1cyB7XG4gIGJvcmRlci1jb2xvcjogIzFGNDBFNjtcbn1cbi5tY2stYm9yZGVyZWRbZGlzYWJsZWQ9dHJ1ZV0sIC5tY2staW5wdXRbZGlzYWJsZWQ9dHJ1ZV0ge1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgYm9yZGVyLWNvbG9yOiAjZjBmMGYwO1xuICBjb2xvcjogI2NjYztcbn1cbi5tY2stZGF0ZS1kaXNwbGF5IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiA0M3B4O1xuICBwYWRkaW5nOiAxcmVtIDAuNXJlbTtcbiAgdHJhbnNpdGlvbjogYm9yZGVyIDIwMG1zLCBib3gtc2hhZG93IDIwMG1zO1xufVxuLm1jay1mb3JtLWlucHV0IC5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgcGFkZGluZy1ib3R0b206IDAuNXJlbTtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCB7XG4gIG1pbi13aWR0aDogYXV0byAhaW1wb3J0YW50O1xufVxuLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nLXRvcDogMC43cmVtICFpbXBvcnRhbnQ7XG4gIHBhZGRpbmctYm90dG9tOiAwLjVyZW0gIWltcG9ydGFudDtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gIG1pbi1oZWlnaHQ6IDIuN3JlbTtcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNyk7XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24gLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgbWFyZ2luLXRvcDogMnB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1zZWxlY3QtZHJvcGRvd24tYnV0dG9uIC5tYXQtZm9ybS1maWVsZC1mbGV4IHtcbiAgICBwYWRkaW5nLWxlZnQ6IDAuNXJlbTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24gLm1hdC1mb3JtLWZpZWxkLWZsZXgge1xuICAgIHBhZGRpbmctbGVmdDogMC41cmVtO1xuICAgIHBhZGRpbmctcmlnaHQ6IDAuNXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1zZWxlY3QtZHJvcGRvd24tYnV0dG9uIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24gLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICBoZWlnaHQ6IDJyZW07XG4gICAgbWluLWhlaWdodDogMnJlbTtcbiAgfVxuICAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24gLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stc2VsZWN0LWRyb3Bkb3duLWJ1dHRvbiAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgIGhlaWdodDogMnJlbTtcbiAgICBtaW4taGVpZ2h0OiAycmVtO1xuICB9XG4gIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stc2VsZWN0LWRyb3Bkb3duLWJ1dHRvbiAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7XG4gICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcbiAgfVxufVxuLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1hdC1zIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuLm1jay1mb3JtLWlucHV0IG1hdC1zZWxlY3Qge1xuICBtYXJnaW4tdG9wOiAwLjJyZW07XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LXNlbGVjdCAubWF0LXNlbGVjdC1hcnJvdyB7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtc2VsZWN0IC5tYXQtc2VsZWN0LXZhbHVlID4gLm1hdC1zZWxlY3QtdmFsdWUtdGV4dCA+IHNwYW4ge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbi5tY2stZm9ybS1pbnB1dCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Lm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsIC5tY2stZm9ybS1pbnB1dCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcCwgLm1jay1mb3JtLWlucHV0IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kIHtcbiAgYm9yZGVyLWNvbG9yOiAjQjNCM0IzO1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cbi5tY2stZm9ybS1pbnB1dCAuYXZhaWxhYmxlIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCwgLm1jay1mb3JtLWlucHV0IC5hdmFpbGFibGUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsIC5tY2stZm9ybS1pbnB1dCAuYXZhaWxhYmxlIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kIHtcbiAgYm9yZGVyLWNvbG9yOiAjM2FhNTM3O1xufVxuLm1jay1mb3JtLWlucHV0IC5ib29rZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LCAubWNrLWZvcm0taW5wdXQgLmJvb2tlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcCwgLm1jay1mb3JtLWlucHV0IC5ib29rZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICBib3JkZXItY29sb3I6ICNlMTJlNDE7XG59XG4ubWNrLWZvcm0taW5wdXQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LCAubWNrLWZvcm0taW5wdXQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsIC5tY2stZm9ybS1pbnB1dCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gIGJvcmRlci1jb2xvcjogIzFGNDBFNjtcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4ubWNrLWZvcm0taW5wdXQgPiBtYXQtZm9ybS1maWVsZC5tY2stZXJyb3IgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICBwYWRkaW5nLWJvdHRvbTogMDtcbn1cbi5tY2stZm9ybS1pbnB1dCA+IG1hdC1mb3JtLWZpZWxkLm1jay1lcnJvciAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Lm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsIC5tY2stZm9ybS1pbnB1dCA+IG1hdC1mb3JtLWZpZWxkLm1jay1lcnJvciAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcCwgLm1jay1mb3JtLWlucHV0ID4gbWF0LWZvcm0tZmllbGQubWNrLWVycm9yIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kIHtcbiAgYm9yZGVyLWNvbG9yOiAjRTEyRTQwO1xufVxuLm1jay1mb3JtLWlucHV0IG1jay1jbG9zZS1pY29uLm1hdC1jaGlwLXJlbW92ZS5tYXQtY2hpcC1yZW1vdmUge1xuICBvcGFjaXR5OiAxO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtbGFiZWwge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtcmFkaW8tYnV0dG9uIHtcbiAgbWFyZ2luLXJpZ2h0OiAxcmVtO1xufVxuLm1jay1mb3JtLWlucHV0IC5tYXQtcmFkaW8tbGFiZWwtY29udGVudCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbi5tY2stZm9ybS1pbnB1dCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSB7XG4gIGJvcmRlci1jb2xvcjogIzFGNDBFNiAhaW1wb3J0YW50O1xuICBib3JkZXItd2lkdGg6IDFweCAhaW1wb3J0YW50O1xufVxuLm1jay1mb3JtLWlucHV0IC5tYXQtcmFkaW8taW5uZXItY2lyY2xlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFGNDBFNiAhaW1wb3J0YW50O1xufVxuLm1jay1mb3JtLWlucHV0IG1hdC1yYWRpby1ncm91cCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGZsZXgtd3JhcDogd3JhcDtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtcmFkaW8tZ3JvdXAgPiBtYXQtcmFkaW8tYnV0dG9uOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tcmlnaHQ6IDA7XG59XG4ubWNrLWZvcm0taW5wdXQtY29udGFpbmVyID4gLm1jay1mb3JtLWlucHV0LCAubWNrLWZvcm0taW5wdXQtY29udGFpbmVyID4gbWNrLXNlbGVjdCB7XG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stZm9ybS1pbnB1dC1jb250YWluZXIgPiAubWNrLWZvcm0taW5wdXQsIC5tY2stZm9ybS1pbnB1dC1jb250YWluZXIgPiBtY2stc2VsZWN0IHtcbiAgICBtYXJnaW4tYm90dG9tOiAxLjc1cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogMTA0OHB4KSB7XG4gIC5tY2stZm9ybS1pbnB1dC1jb250YWluZXIgPiAubWNrLWZvcm0taW5wdXQsIC5tY2stZm9ybS1pbnB1dC1jb250YWluZXIgPiBtY2stc2VsZWN0IHtcbiAgICBtYXJnaW4tYm90dG9tOiAxLjc1cmVtO1xuICB9XG59XG4ubWNrLWZvcm0taW5wdXQtY29udGFpbmVyIC5tY2stcmFkaW8tc2VsZWN0IHtcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stZm9ybS1pbnB1dC1jb250YWluZXIgLm1jay1yYWRpby1zZWxlY3Qge1xuICAgIG1hcmdpbi1ib3R0b206IDEuNXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDEwNDhweCkge1xuICAubWNrLWZvcm0taW5wdXQtY29udGFpbmVyIC5tY2stcmFkaW8tc2VsZWN0IHtcbiAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG4gIH1cbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcCB7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgbWluLWhlaWdodDogMS41cmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzMzMzO1xuICBwYWRkaW5nLXRvcDogMC4yNXJlbTtcbiAgcGFkZGluZy1ib3R0b206IDAuMjVyZW07XG4gIHBhZGRpbmctbGVmdDogMC41cmVtO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLWZvcm0taW5wdXQgbWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LXN0YW5kYXJkLWNoaXAge1xuICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1mb3JtLWlucHV0IG1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwIHtcbiAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgfVxufVxuLm1jay1mb3JtLWlucHV0IG1hdC1jaGVja2JveC5tYXQtY2hlY2tib3gubWF0LWNoZWNrYm94IHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogMzAwO1xuICBjb2xvcjogYmxhY2s7XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWNoZWNrYm94IGRpdi5tYXQtY2hlY2tib3gtYmFja2dyb3VuZC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxRjQwRTY7XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWNoZWNrYm94IGRpdi5tYXQtY2hlY2tib3gtYmFja2dyb3VuZC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZC5tY2stY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWRpc2FibGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0QwRDBEMDtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtY2hlY2tib3gubWNrLWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1kaXNhYmxlZCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgY29sb3I6IGJsYWNrO1xuICBjb2xvcjogI0IzQjNCMztcbn1cbi5tY2stYm9yZGVybGVzcyB7XG4gIGJvcmRlcjogbm9uZTtcbn1cbi5tY2stYm9yZGVybGVzczpob3ZlciwgLm1jay1ib3JkZXJsZXNzOmZvY3VzLCAubWNrLWJvcmRlcmxlc3M6ZGlzYWJsZWQge1xuICBib3JkZXI6IG5vbmU7XG59XG4ubWNrLXNlbGVjdC1wYW5lbCB7XG4gIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDtcbiAgYm9yZGVyLXJhZGl1czogdW5zZXQgIWltcG9ydGFudDtcbiAgbWFyZ2luLXRvcDogMzVweCAhaW1wb3J0YW50O1xuICBtYXJnaW4tbGVmdDogNXB4O1xufVxuLm1jay1zZWxlY3QtcGFuZWwgbWF0LW9wdGlvbiB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgcGFkZGluZy1yaWdodDogMDtcbn1cbi5tY2stc2VsZWN0LXBhbmVsIG1hdC1vcHRpb24ubWF0LW9wdGlvbi10ZXh0IHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuLm1jay1zZWxlY3QtcGFuZWwubWNrLW1hcmdpbi10b3Age1xuICBtYXJnaW4tdG9wOiAxLjVyZW0gIWltcG9ydGFudDtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwubWF0LWF1dG9jb21wbGV0ZS1wYW5lbC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIHtcbiAgdG9wOiAtMTBweDtcbiAgbWF4LWhlaWdodDogMjc4cHg7XG59XG4ubWNrLWNoZWNrYm94LXBhbmVsIG1hdC1vcHRpb24ubWNrLXRydW5jYXRlZCAubWF0LWNoZWNrYm94LWxhYmVsLm1hdC1jaGVja2JveC1sYWJlbCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICAtd2Via2l0LWxpbmUtY2xhbXA6IDI7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG59XG4ubWNrLWNoZWNrYm94LXBhbmVsIG1hdC1vcHRpb24ge1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIHBhZGRpbmctcmlnaHQ6IDA7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBoZWlnaHQ6IHVuc2V0O1xuICBtaW4taGVpZ2h0OiAzNnB4O1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIC5tYXQtY2hlY2tib3gtbGFiZWwubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgZmxleDogMTtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiAubWF0LWNoZWNrYm94LWxhYmVsLm1hdC1jaGVja2JveC1sYWJlbCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgY29sb3I6IGJsYWNrO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uLm1jay1jaGVja2JveC1ncm91cC1oZWFkZXIgLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICBmb250LXdlaWdodDogNTAwO1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uLm1jay1jaGVja2JveC1ncm91cC1jaGlsZCB7XG4gIG1hcmdpbi1sZWZ0OiAycmVtO1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIG1hdC1jaGVja2JveCBsYWJlbC5tYXQtY2hlY2tib3gtbGF5b3V0IHtcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmctbGVmdDogMTZweDtcbiAgcGFkZGluZy1yaWdodDogMTZweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiBtYXQtY2hlY2tib3ggbGFiZWwubWF0LWNoZWNrYm94LWxheW91dCB7XG4gICAgcGFkZGluZy1sZWZ0OiAycHg7XG4gICAgcGFkZGluZy1yaWdodDogMnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIG1hdC1jaGVja2JveCBsYWJlbC5tYXQtY2hlY2tib3gtbGF5b3V0IHtcbiAgICBwYWRkaW5nLWxlZnQ6IDJweDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAycHg7XG4gIH1cbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiBtYXQtY2hlY2tib3ggZGl2Lm1hdC1jaGVja2JveC1mcmFtZS5tYXQtY2hlY2tib3gtZnJhbWUge1xuICBib3JkZXI6IDFweCBzb2xpZCAjQjNCM0IzO1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIG1hdC1jaGVja2JveC5tYXQtY2hlY2tib3gtY2hlY2tlZCBkaXYubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMUY0MEU2O1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIG1hdC1jaGVja2JveC5tY2stY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWRpc2FibGVkIGRpdi5tYXQtY2hlY2tib3gtYmFja2dyb3VuZC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNEMEQwRDA7XG59XG4ubWNrLWNoZWNrYm94LXBhbmVsIG1hdC1vcHRpb24gbWF0LWNoZWNrYm94Lm1jay1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtZGlzYWJsZWQgLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIGNvbG9yOiBibGFjaztcbiAgY29sb3I6ICNCM0IzQjM7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG4ubWNrLWNoZWNrYm94LXBhbmVsIG1hdC1vcHRpb24gbWF0LWNoZWNrYm94IC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyIHtcbiAgd2lkdGg6IDEuMjVyZW07XG4gIGhlaWdodDogMS4yNXJlbTtcbn1cbi5tY2stc2VsZWN0LW9wdGlvbi1zZWxlY3RlZCB7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgY29sb3I6IGJsYWNrO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xufVxuLm1jay1zZWxlY3Qtb3B0aW9uLXNlbGVjdGVkIC5tY2stc3BhY2VyLWNvbnRlbnQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMUY0MEU2O1xuICBtYXJnaW4tcmlnaHQ6IDAuNzVyZW07XG59XG4ubWNrLXNlbGVjdC1vcHRpb24tdW5zZWxlY3RlZCB7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbi5tY2stc2VsZWN0LW9wdGlvbi11bnNlbGVjdGVkLm1jay1pZ25vcmUtZGlzYWJsZWQge1xuICBjb2xvcjogYmxhY2s7XG59XG4ubWNrLXNlbGVjdC1vcHRpb24tdW5zZWxlY3RlZCAubWNrLXNwYWNlci1jb250ZW50IHtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICBtYXJnaW4tcmlnaHQ6IDAuNzVyZW07XG59XG4ubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgaGVpZ2h0OiA0MHB4O1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBib3JkZXI6IG5vbmU7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24ge1xuICAgIGhlaWdodDogNDhweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24ge1xuICAgIGhlaWdodDogNDhweDtcbiAgfVxufVxuLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBwYWRkaW5nLWxlZnQ6IDAuMjVyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDAuMjVyZW07XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgfVxufVxuLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydCwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0LCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stcHJpbWFyeS1idXR0b24ge1xuICBoZWlnaHQ6IDMycHg7XG4gIG1pbi13aWR0aDogODNweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydCwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgbWluLXdpZHRoOiAxNTVweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydCwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgbWluLXdpZHRoOiAxNTVweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0LCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0LCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0LCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0LCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICB9XG59XG4ubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZSwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2stcHJpbWFyeS1idXR0b24ge1xuICBoZWlnaHQ6IDMycHg7XG4gIHdpZHRoOiAzMnB4O1xuICBtaW4td2lkdGg6IDMycHg7XG4gIHBhZGRpbmc6IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZSwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2stcHJpbWFyeS1idXR0b24ge1xuICAgIHdpZHRoOiA0MHB4O1xuICAgIGhlaWdodDogNDBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZS5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZSwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgd2lkdGg6IDQwcHg7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICB9XG59XG4ubWNrLXByaW1hcnktYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxRjQwRTY7XG59XG4ubWNrLXByaW1hcnktYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbltkaXNhYmxlZF0sIC5tY2stcHJpbWFyeS1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLmRpc2FibGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0QwRDBEMDtcbiAgY29sb3I6ICM3NTc1NzU7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG4ubWNrLXByaW1hcnktYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbltkaXNhYmxlZF0gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1jay1wcmltYXJ5LWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24uZGlzYWJsZWQgPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gIGNvbG9yOiAjNzU3NTc1O1xufVxuLm1jay1wcmltYXJ5LWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gIGNvbG9yOiB3aGl0ZTtcbn1cbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgYm9yZGVyOiAxcHggc29saWQgIzIyNTFGRjtcbiAgY29sb3I6ICMyMjUxRkY7XG59XG4ubWNrLXNlY29uZGFyeS1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbltkaXNhYmxlZF0sIC5tY2stc2Vjb25kYXJ5LWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLmRpc2FibGVkIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgY29sb3I6ICMzMzMzMzM7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG4ubWNrLXNlY29uZGFyeS1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG59XG4ubWNrLXNlY29uZGFyeS1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICBjb2xvcjogIzMzMzMzMztcbn1cbi5tY2std2FybmluZy1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZDA0ODtcbn1cbi5tY2std2FybmluZy1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICBjb2xvcjogYmxhY2s7XG59XG4ubWNrLXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ge1xuICBib3JkZXI6IDJweCBzb2xpZCAjQjNCM0IzO1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgcGFkZGluZy1sZWZ0OiAxLjc1cmVtO1xuICBwYWRkaW5nLXJpZ2h0OiAxLjc1cmVtO1xufVxuLm1jay1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydCB7XG4gIGhlaWdodDogMzJweDtcbiAgbWluLXdpZHRoOiA4M3B4O1xuICBwYWRkaW5nLWxlZnQ6IDAuMjVyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDAuMjVyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0IHtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgbWluLXdpZHRoOiAxNTVweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQge1xuICAgIGhlaWdodDogNDhweDtcbiAgICBtaW4td2lkdGg6IDE1NXB4O1xuICB9XG59XG4ubWNrLXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnkge1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLWNvbG9yOiAjMUY0MEU2O1xuICBjb2xvcjogIzFGNDBFNjtcbn1cbi5tY2stc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stdGhpbi1ib3JkZXItbGlnaHQge1xuICBib3JkZXItY29sb3I6ICNEMEQwRDA7XG4gIGJvcmRlci13aWR0aDogMXB4O1xufVxuLm1jay1zdHJva2VkLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBjb2xvcjogIzFGNDBFNjtcbn1cbi5tY2stdG9nZ2xlLWJ1dHRvbiB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgYm9yZGVyOiAxcHggc29saWQgI0IzQjNCMztcbiAgYm9yZGVyLWNvbG9yOiAjRDBEMEQwO1xuICBtaW4td2lkdGg6IDU5cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay10b2dnbGUtYnV0dG9uIHtcbiAgICBtaW4td2lkdGg6IDEzMnB4O1xuICAgIHBhZGRpbmctdG9wOiAwLjVyZW07XG4gICAgcGFkZGluZy1ib3R0b206IDAuNXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stdG9nZ2xlLWJ1dHRvbiB7XG4gICAgbWluLXdpZHRoOiAxMzJweDtcbiAgICBwYWRkaW5nLXRvcDogMC41cmVtO1xuICAgIHBhZGRpbmctYm90dG9tOiAwLjVyZW07XG4gIH1cbn1cbi5tY2stdG9nZ2xlLWJ1dHRvbi1zZWxlY3RlZCB7XG4gIGNvbG9yOiAjMUY0MEU2O1xufVxuLm1jay1kYXRlLXBpY2tlciB7XG4gIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1kYXRlLXBpY2tlciB7XG4gICAgbWF4LXdpZHRoOiAyM3JlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stZGF0ZS1waWNrZXIge1xuICAgIG1heC13aWR0aDogMjNyZW07XG4gIH1cbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAuaGVhZGVyLmhlYWRlciB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6ICMwNTFDMkM7XG4gIG1hcmdpbi10b3A6IDEuMjVyZW07XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmhlYWRlci5oZWFkZXIgPiAuYXJyb3cuYXJyb3cge1xuICB3aWR0aDogMi4zNzVyZW07XG4gIGhlaWdodDogMnJlbTtcbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAuaGVhZGVyLmhlYWRlciA+IC5hcnJvdy5hcnJvdyA+IC5pY29uLmljb24ge1xuICB3aWR0aDogMXJlbTtcbiAgaGVpZ2h0OiAxcmVtO1xufVxuLm1jay1kYXRlLXBpY2tlciA+IC5oZWFkZXIuaGVhZGVyID4gLmFycm93LmFycm93ID4gLm5leHQubmV4dCB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9hcnJvdy1mb3J3YXJkLnN2Z1wiKTtcbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAuaGVhZGVyLmhlYWRlciA+IC5hcnJvdy5hcnJvdyA+IC5wcmV2aW91cy5wcmV2aW91cyB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9hcnJvdy1iYWNrd2FyZC5zdmdcIik7XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLm1vbnRoIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuLm1jay1kYXRlLXBpY2tlciA+IC53ZWVrIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogNTAwO1xuICBjb2xvcjogIzc2NzY3Njtcbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAuYm9keSB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAuYm9keSA+IGRpdiA+IGRpdi5kYXRlID4gLmRvdCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmJvZHkgPiBkaXYgPiBkaXYuZGF0ZS5kaXNhYmxlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBjb2xvcjogIzc2NzY3Njtcbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAuYm9keSA+IGRpdiA+IGRpdi5kYXRlLmFjdGl2ZSB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxRjQwRTY7XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmJvZHkgPiBkaXYgPiBkaXYuZGF0ZS5ub24tbW9udGgge1xuICBjb2xvcjogIzc2NzY3Njtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stc3BhY2VyLWNvbnRlbnQtY29sbGFwc2UtdGFibGV0IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1zcGFjZXItY29udGVudC1jb2xsYXBzZS10YWJsZXQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1zcGFjZXItY29udGVudC1jb2xsYXBzZS10YWJsZXQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkgYW5kIChtYXgtd2lkdGg6IDEwNDhweCkge1xuICAubWNrLXNwYWNlci1jb250ZW50LWNvbGxhcHNlLXRhYmxldCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1zcGFjZXItY29udGVudC1leHBhbmQtbW9iaWxlIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1zcGFjZXItY29udGVudC1leHBhbmQtbW9iaWxlIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4ubWNrLXNwYWNlci1jb250ZW50LWRpdmlkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xufVxuLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsIHtcbiAgYm94LXNoYWRvdzogMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI0U2RTZFNjtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNFNkU2RTY7XG59XG4ubWNrLWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWNrLWV4cGFuZGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDtcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tY2stZXhwYW5kZWQgLm1jay1jb2xsYXBzZS1pY29uIHtcbiAgd2lkdGg6IDI0cHg7XG4gIGhlaWdodDogMjRweDtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwibGlicy91aS9zcmMvbGliL2ljb25zL2NoZXZyb24tY2xvc2Uuc3ZnXCIpO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWNrLWV4cGFuZGVkIC5tY2stY29sbGFwc2UtaWNvbiB7XG4gICAgd2lkdGg6IDQ4cHg7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9jaGV2cm9uLWNsb3NlLWxhcmdlLnN2Z1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWNrLWV4cGFuZGVkIC5tY2stY29sbGFwc2UtaWNvbiB7XG4gICAgd2lkdGg6IDQ4cHg7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9jaGV2cm9uLWNsb3NlLWxhcmdlLnN2Z1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIH1cbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1ib2R5IHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xufVxuLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWJvZHkgPiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ge1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgY29sb3I6IGJsYWNrO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBwYWRkaW5nLWJvdHRvbTogMC41cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWJvZHkgPiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ge1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS42O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWJvZHkgPiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ge1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS42O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtYm9keSA+IC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbi5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtYm9keSA+IC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbi5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIH1cbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsIG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIHtcbiAgcGFkZGluZy1sZWZ0OiAxcmVtO1xuICBwYWRkaW5nLXJpZ2h0OiAxcmVtO1xufVxuLm1jay1leHBhbnNpb24tcGFuZWwgbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgPiBzcGFuLm1hdC1jb250ZW50IHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsIG1hdC1wYW5lbC10aXRsZSB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgY29sb3I6IGJsYWNrO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xufVxuLm1jay1leHBhbnNpb24tcGFuZWwgLm1jay1jb2xsYXBzZS1pY29uIHtcbiAgd2lkdGg6IDI0cHg7XG4gIGhlaWdodDogMjRweDtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwibGlicy91aS9zcmMvbGliL2ljb25zL2NoZXZyb24tb3Blbi5zdmdcIik7XG4gIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbiAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjVzIGVhc2U7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWV4cGFuc2lvbi1wYW5lbCAubWNrLWNvbGxhcHNlLWljb24ge1xuICAgIHdpZHRoOiA0OHB4O1xuICAgIGhlaWdodDogNDhweDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvY2hldnJvbi1vcGVuLWxhcmdlLnN2Z1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWV4cGFuc2lvbi1wYW5lbCAubWNrLWNvbGxhcHNlLWljb24ge1xuICAgIHdpZHRoOiA0OHB4O1xuICAgIGhlaWdodDogNDhweDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvY2hldnJvbi1vcGVuLWxhcmdlLnN2Z1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIH1cbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsIC5tY2stY29sbGFwc2UtaWNvbi5leHBhbmRlZCB7XG4gIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG59XG4ubWNrLWljb24tZmlsbC1vcGVuIHtcbiAgZmlsbDogIzFGNDBFNjtcbn1cbi5tY2staWNvbi1maWxsLWNsb3NlIHtcbiAgZmlsbDogIzc2NzY3Njtcbn1cbi5tY2staWNvbi1maWxsLWJsYWNrIHtcbiAgZmlsbDogYmxhY2s7XG4gIHN0cm9rZTogYmxhY2s7XG59XG4ubWNrLWljb24tZmlsbC13aGl0ZSB7XG4gIGZpbGw6IHdoaXRlO1xuICBzdHJva2U6IHdoaXRlO1xufVxuLm1jay1pY29uLWZpbGwtZ3JheSB7XG4gIGZpbGw6ICMzMzMzMzM7XG4gIHN0cm9rZTogIzMzMzMzMztcbn1cbi5tY2stbWluIHtcbiAgbWF4LXdpZHRoOiA1ODFweCAhaW1wb3J0YW50O1xuICB3aWR0aDogODB2dztcbiAgbWF4LWhlaWdodDogMTAwdmg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLW1pbiB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1pbiAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbWluIHtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICB9XG4gIC5tY2stbWluIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG4ubWNrLW5vZXhwYW5kIHtcbiAgbWF4LXdpZHRoOiA1ODFweCAhaW1wb3J0YW50O1xuICB3aWR0aDogODB2dyAhaW1wb3J0YW50O1xuICBtYXgtaGVpZ2h0OiAxMDB2aDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stbm9leHBhbmQge1xuICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gMzJweCkgIWltcG9ydGFudDtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbm9leHBhbmQge1xuICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gMzJweCkgIWltcG9ydGFudDtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxufVxuLm1jay1tb2RhbCB7XG4gIG1heC13aWR0aDogODAwcHggIWltcG9ydGFudDtcbiAgd2lkdGg6IDgwdnc7XG4gIG1heC1oZWlnaHQ6IDEwMHZoO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1tb2RhbCB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1tb2RhbCB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG4ubWNrLW1vZGFsLW1pbmkge1xuICBtYXgtd2lkdGg6IDU4MHB4ICFpbXBvcnRhbnQ7XG4gIG1heC1oZWlnaHQ6IDEwMHZoO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1tb2RhbC1taW5pIHtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICB9XG4gIC5tY2stbW9kYWwtbWluaSAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwtbWluaSB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsLW1pbmkgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi5tY2stbW9kYWwtc3VydmV5IHtcbiAgbWF4LXdpZHRoOiA2OTFweCAhaW1wb3J0YW50O1xuICBtYXgtaGVpZ2h0OiAxMDB2aDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stbW9kYWwtc3VydmV5IC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1tb2RhbC1zdXJ2ZXkgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi5tY2stbW9kYWwtd2lkZSB7XG4gIG1heC13aWR0aDogMTAyNHB4ICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiAxMDB2dztcbiAgaGVpZ2h0OiA5NXZoO1xuICBtYXgtaGVpZ2h0OiAxMDB2aDtcbn1cbi5tY2stbW9kYWwtd2lkZSAubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0Y4RjlGQTtcbiAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm1jay1tb2RhbC13aWRlIC5tYXQtZGlhbG9nLWNvbnRlbnQgLm1hdC1pY29uLWJ1dHRvbltuYW1lPUNsb3NlQnV0dG9uXSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcmlnaHQ6IDMycHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLW1vZGFsLXdpZGUgLm1hdC1kaWFsb2ctY29udGVudCAubWF0LWljb24tYnV0dG9uW25hbWU9Q2xvc2VCdXR0b25dIC5jbG9zZS1pbWFnZSB7XG4gICAgaGVpZ2h0OiAzMnB4O1xuICAgIHdpZHRoOiAzMnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1tb2RhbC13aWRlIC5tYXQtZGlhbG9nLWNvbnRlbnQgLm1hdC1pY29uLWJ1dHRvbltuYW1lPUNsb3NlQnV0dG9uXSAuY2xvc2UtaW1hZ2Uge1xuICAgIGhlaWdodDogMzJweDtcbiAgICB3aWR0aDogMzJweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1tb2RhbC13aWRlIHtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICB9XG4gIC5tY2stbW9kYWwtd2lkZSAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwtd2lkZSB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsLXdpZGUgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi5tY2stbW9kYWwtd2lkZS1tYW5hZ2UtYm9va2luZyB7XG4gIG1heC13aWR0aDogMTI1MHB4ICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiAxMDB2dztcbiAgbWF4LWhlaWdodDogOTV2aDtcbn1cbi5tY2stbW9kYWwtd2lkZS1tYW5hZ2UtYm9va2luZyAubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0Y4RjlGQTtcbiAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm1jay1tb2RhbC13aWRlLW1hbmFnZS1ib29raW5nIC5tYXQtZGlhbG9nLWNvbnRlbnQgLm1hdC1pY29uLWJ1dHRvbltuYW1lPUNsb3NlQnV0dG9uXSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcmlnaHQ6IDMycHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLW1vZGFsLXdpZGUtbWFuYWdlLWJvb2tpbmcgLm1hdC1kaWFsb2ctY29udGVudCAubWF0LWljb24tYnV0dG9uW25hbWU9Q2xvc2VCdXR0b25dIC5jbG9zZS1pbWFnZSB7XG4gICAgaGVpZ2h0OiAzMnB4O1xuICAgIHdpZHRoOiAzMnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1tb2RhbC13aWRlLW1hbmFnZS1ib29raW5nIC5tYXQtZGlhbG9nLWNvbnRlbnQgLm1hdC1pY29uLWJ1dHRvbltuYW1lPUNsb3NlQnV0dG9uXSAuY2xvc2UtaW1hZ2Uge1xuICAgIGhlaWdodDogMzJweDtcbiAgICB3aWR0aDogMzJweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1tb2RhbC13aWRlLW1hbmFnZS1ib29raW5nIHtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICB9XG4gIC5tY2stbW9kYWwtd2lkZS1tYW5hZ2UtYm9va2luZyAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwtd2lkZS1tYW5hZ2UtYm9va2luZyB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsLXdpZGUtbWFuYWdlLWJvb2tpbmcgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stYWxlcnQge1xuICAgIG1heC13aWR0aDogMTAwdncgIWltcG9ydGFudDtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgbWFyZ2luLWxlZnQ6IDFyZW07XG4gICAgbWFyZ2luLXJpZ2h0OiAxcmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1hbGVydCB7XG4gICAgbWF4LXdpZHRoOiAxMDB2dyAhaW1wb3J0YW50O1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBtYXJnaW4tbGVmdDogMXJlbTtcbiAgICBtYXJnaW4tcmlnaHQ6IDFyZW07XG4gIH1cbn1cbi5tY2stYWxlcnQtYmFja2Ryb3Age1xuICBiYWNrZ3JvdW5kOiByZ2JhKDUsIDI4LCA0NCwgMC44NSk7XG59XG4ubWNrLXNsaWRlLXRvZ2dsZS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkOm5vdCgubWF0LWRpc2FibGVkKSAubWF0LXNsaWRlLXRvZ2dsZS1iYXIubWF0LXNsaWRlLXRvZ2dsZS1iYXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjI1MUZGO1xufVxuLm1jay1zbGlkZS10b2dnbGUubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIubWF0LXNsaWRlLXRvZ2dsZS10aHVtYiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xufVxuLm1jay1zbGlkZS10b2dnbGUubWF0LXNsaWRlLXRvZ2dsZSB7XG4gIGhlaWdodDogYXV0bztcbn1cbi5tY2stc2xpZGUtdG9nZ2xlIC5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnQubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50IHtcbiAgZmxleDogMTtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgLXdlYmtpdC1saW5lLWNsYW1wOiAyO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xufVxuLm1jay1zbGlkZS10b2dnbGUgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIubWF0LXNsaWRlLXRvZ2dsZS10aHVtYiB7XG4gIHdpZHRoOiAxNHB4O1xuICBoZWlnaHQ6IDE0cHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDUwJSwgNTAlKTtcbn1cbi5tY2stc2xpZGUtdG9nZ2xlIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLWNvbnRhaW5lci5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLWNvbnRhaW5lciB7XG4gIHRvcDogLTRweDtcbiAgbGVmdDogLTRweDtcbn1cbi5tY2stc2xpZGUtdG9nZ2xlIC5tYXQtc2xpZGUtdG9nZ2xlLWJhci5tYXQtc2xpZGUtdG9nZ2xlLWJhciB7XG4gIGhlaWdodDogMjBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0QwRDBEMDtcbiAgYm9yZGVyLXJhZGl1czogMjBweDtcbn1cbi5tY2stc2tlbGV0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xufVxuLm1jay1za2VsZXRvbi1jaGVja2JveCB7XG4gIGZsb2F0OiBsZWZ0O1xufVxuLm1jay1za2VsZXRvbi1jaGVja2JveCA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgd2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMjBweDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbi5tY2stc2tlbGV0b24taGVhZGVyID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICB3aWR0aDogMTAwdnc7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIG1heC13aWR0aDogMjE1cHg7XG59XG4ubWNrLXNrZWxldG9uLWltYWdlID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICB3aWR0aDogODFweDtcbiAgaGVpZ2h0OiA4MnB4O1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogODAwcHgpIHtcbiAgLm1jay1za2VsZXRvbi1pbWFnZSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICB3aWR0aDogMjE5cHg7XG4gICAgaGVpZ2h0OiAxMTlweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDEwNDhweCkge1xuICAubWNrLXNrZWxldG9uLWltYWdlID4gLmxvYWRlci5sb2FkZXIge1xuICAgIHdpZHRoOiAyMTlweDtcbiAgICBoZWlnaHQ6IDExOXB4O1xuICB9XG59XG4ubWNrLXNrZWxldG9uLXN0YXR1cyA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgd2lkdGg6IDExN3B4O1xuICBoZWlnaHQ6IDc4cHg7XG4gIG1hcmdpbi10b3A6IDEwcHg7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA4MDBweCkge1xuICAubWNrLXNrZWxldG9uLXN0YXR1cyA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogMTA0OHB4KSB7XG4gIC5tY2stc2tlbGV0b24tc3RhdHVzID4gLmxvYWRlci5sb2FkZXIge1xuICAgIHdpZHRoOiAxMTdweDtcbiAgICBoZWlnaHQ6IDc4cHg7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS0xID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDIzcHg7XG4gIG1heC13aWR0aDogMTc2cHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtMSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDIxOXB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTEgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAyMTlweDtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTIgPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIGhlaWdodDogMThweDtcbiAgbWF4LXdpZHRoOiAxNjVweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS0yID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogMTg5cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtMiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDE4OXB4O1xuICB9XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtMyA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgaGVpZ2h0OiAxOHB4O1xuICBtYXgtd2lkdGg6IDE0N3B4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTMgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAxODlweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS0zID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogMTg5cHg7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS0zMHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTMwcC10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogMzAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTMwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtMzBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAzMCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtMzBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS0zMHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDMwJTtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTMwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS0zMHAtdGhpbi10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDE2cHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbi5tY2stc2tlbGV0b24tbGluZS00NXAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTQ1cC10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogNDUlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTQ1cCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNDVwLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA0NSU7XG4gICAgbWFyZ2luLXJpZ2h0OiA0NSU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtNDVwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS00NXAtdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDQ1JTtcbiAgICBtYXJnaW4tcmlnaHQ6IDQ1JTtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTQ1cC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS00NXAtdGhpbi10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDE2cHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbi5tY2stc2tlbGV0b24tbGluZS01MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTUwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIGhlaWdodDogMThweDtcbiAgbWF4LXdpZHRoOiA1MCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtNTBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogNTAlO1xuICAgIG1hcmdpbi1yaWdodDogNDUlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTUwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTUwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDUwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDQ1JTtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTUwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpbi10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpY2stdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpbi10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaWNrLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDMycHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbi5tY2stc2tlbGV0b24tbGluZS02MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTYwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIGhlaWdodDogMThweDtcbiAgbWF4LXdpZHRoOiA2MCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtNjBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogNjAlO1xuICAgIG1hcmdpbi1yaWdodDogMzUlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTYwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTYwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDYwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDM1JTtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTYwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpbi10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpY2stdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpbi10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaWNrLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDMycHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbi5tY2stc2tlbGV0b24tbGluZS03MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTcwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIGhlaWdodDogMThweDtcbiAgbWF4LXdpZHRoOiA3MCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtNzBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogNzAlO1xuICAgIG1hcmdpbi1yaWdodDogMjUlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTcwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTcwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDcwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDI1JTtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTcwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpbi10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpY2stdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpbi10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaWNrLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDMycHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbi5tY2stc2tlbGV0b24tbGluZS04MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTgwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIGhlaWdodDogMThweDtcbiAgbWF4LXdpZHRoOiA4MCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtODBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogODAlO1xuICAgIG1hcmdpbi1yaWdodDogMTUlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTgwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTgwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDgwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDE1JTtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTgwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpbi10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpY2stdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpbi10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaWNrLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDMycHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbi5tY2stc2tlbGV0b24tbGluZS05MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTkwcC10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogOTAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTkwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtOTBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA5MCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtOTBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS05MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDkwJTtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTkwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS05MHAtdGhpbi10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDE2cHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbi5tY2stc2tlbGV0b24tbG9hZC1tb3JlID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBtYXJnaW4tdG9wOiAwLjVyZW07XG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbiAgd2lkdGg6IGNhbGMoMTAwdncgLSAoMiAqIDFyZW0pKTtcbiAgaGVpZ2h0OiA0MHB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1sb2FkLW1vcmUgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAzMjBweDtcbiAgICBoZWlnaHQ6IDUwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXNrZWxldG9uLWxvYWQtbW9yZSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDMyMHB4O1xuICAgIGhlaWdodDogNTBweDtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1sb2FkLW1vcmUtMTAwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWhlYWRlciA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLXJvb20tYXZhaWxhYmlsaXR5ID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBtYXJnaW4tdG9wOiAwLjVyZW07XG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbiAgd2lkdGg6IGNhbGMoMTAwdncgLSAoMiAqIDFyZW0pKTtcbiAgaGVpZ2h0OiA0MHB4O1xuICBtYXgtd2lkdGg6IG5vbmU7XG4gIHdpZHRoOiAxMDAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1sb2FkLW1vcmUtMTAwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWhlYWRlciA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLXJvb20tYXZhaWxhYmlsaXR5ID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDUwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXNrZWxldG9uLWxvYWQtbW9yZS0xMDBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24taGVhZGVyID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tcm9vbS1hdmFpbGFiaWxpdHkgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiBub25lO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogNTBweDtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1sb2FkLW1vcmUtMTAwcCA+IC5sb2FkZXIubG9hZGVyLXJvb20tYXZhaWxhYmlsaXR5ID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24taGVhZGVyID4gLmxvYWRlci5sb2FkZXItcm9vbS1hdmFpbGFiaWxpdHkgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1yb29tLWF2YWlsYWJpbGl0eSA+IC5sb2FkZXIubG9hZGVyLXJvb20tYXZhaWxhYmlsaXR5ID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDEyNHB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG5cbi5tY2staGVhZGluZy01IHtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1zaXplOiAxLjVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjMzMztcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2staGVhZGluZy01IHtcbiAgICBmb250LXNpemU6IDEuNzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMTQyO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1oZWFkaW5nLTUge1xuICAgIGZvbnQtc2l6ZTogMS43NXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xNDI7XG4gIH1cbn1cblxubmd4LW1hdC1zZWxlY3Qtc2VhcmNoIC5tYXQtc2VsZWN0LXNlYXJjaC1uby1lbnRyaWVzLWZvdW5kIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxubmd4LW1hdC1zZWxlY3Qtc2VhcmNoIC5tYXQtc2VsZWN0LXNlYXJjaC1pbnB1dCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbm5neC1tYXQtc2VsZWN0LXNlYXJjaCBidXR0b24ubWF0LWJ1dHRvbi5tYXQtc2VsZWN0LXNlYXJjaC1jbGVhciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IG5vbmU7XG4gIGNvbG9yOiBibGFjaztcbn1cblxuOjotd2Via2l0LXNjcm9sbGJhciB7XG4gIHdpZHRoOiAxNnB4O1xuICBoZWlnaHQ6IDE4cHg7XG59XG5cbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICBoZWlnaHQ6IDEuNXJlbTtcbiAgYm9yZGVyOiA0cHggc29saWQgcmdiYSgwLCAwLCAwLCAwKTtcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzU3NTc1O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IC0xcHggLTFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjA1KSwgaW5zZXQgMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cblxuOjotd2Via2l0LXNjcm9sbGJhci1idXR0b24ge1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBkaXNwbGF5OiBub25lO1xufVxuXG46Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG5oZWFkZXIge1xuICB6LWluZGV4OiAyO1xufVxuXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWItYmxvY2sge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1iLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWItYm90dG9tIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTEwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWItYm90dG9tIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTEwcHg7XG4gIH1cbn1cblxuLm1hcC1maWx0ZXJzLWNvbnRhaW5lciAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgdG9wOiA1cHg7XG59XG4ubWFwLWZpbHRlcnMtY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gIGhlaWdodDogNDhweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG59XG4ubWFwLWZpbHRlcnMtY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICBwYWRkaW5nLXRvcDogMC41cmVtICFpbXBvcnRhbnQ7XG59XG5cbi5vZmZpY2UtbGV2ZWwtcm93IC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVyIHtcbiAgY29sb3I6ICMzMzMzMzM7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5vZmZpY2UtbGV2ZWwtcm93IC5sZWdlbmQtY29udGFpbmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAub2ZmaWNlLWxldmVsLXJvdyAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgIGhlaWdodDogNDVweCAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm9mZmljZS1sZXZlbC1yb3cgLmxlZ2VuZC1jb250YWluZXIgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsIC5vZmZpY2UtbGV2ZWwtcm93IC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgaGVpZ2h0OiA0NXB4ICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi5vZmZpY2UtbGV2ZWwtcm93IC5zZWxlY3QtZGl2aWRlciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB0b3A6IDAgIWltcG9ydGFudDtcbiAgd2lkdGg6IDQ0cHggIWltcG9ydGFudDtcbiAgcmlnaHQ6IC0xMXB4ICFpbXBvcnRhbnQ7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gIGJvcmRlci13aWR0aDogMCAwIDAgMXB4O1xuICBib3JkZXItY29sb3I6ICNjNmM2YzY7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAub2ZmaWNlLWxldmVsLXJvdyAuc2VsZWN0LWRpdmlkZXIge1xuICAgIGhlaWdodDogY2FsYygxMDAlIC0gMXB4KSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm9mZmljZS1sZXZlbC1yb3cgLnNlbGVjdC1kaXZpZGVyIHtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDFweCkgIWltcG9ydGFudDtcbiAgfVxufVxuLm9mZmljZS1sZXZlbC1yb3cgLmRpc2FibGVkIC5zZWxlY3QtZGl2aWRlciB7XG4gIGJhY2tncm91bmQ6ICNGMEYwRjAgIWltcG9ydGFudDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5vZmZpY2UtbGV2ZWwtcm93IC5kaXNhYmxlZCAuc2VsZWN0LWRpdmlkZXIge1xuICAgIGhlaWdodDogY2FsYygxMDAlIC0gMnB4KSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm9mZmljZS1sZXZlbC1yb3cgLmRpc2FibGVkIC5zZWxlY3QtZGl2aWRlciB7XG4gICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAycHgpICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi5vZmZpY2UtbGV2ZWwtcm93IC5kaXNhYmxlZCAuc2VsZWN0LWNoZXZyb24ge1xuICBvcGFjaXR5OiAwLjU7XG4gIG1hcmdpbi1sZWZ0OiAxMHB4O1xufVxuXG4ub2ZmaWNlLWxldmVsLXJvdyAubGVnZW5kLWNvbnRhaW5lciAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwgLm9mZmljZS1sZXZlbC1yb3cgLm1hdC1mb3JtLWZpZWxkLWluZml4LCAubWFwLWNvbnRyb2xzIC5sZWdlbmQtY29udGFpbmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAubWFwLWNvbnRyb2xzIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcbiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnQ7XG59XG5cbi5ib29raW5nLWZvcm0tY29udGFpbmVyIHtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDMxMHB4KTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWZvcm0tY29udGFpbmVyIHtcbiAgICBtYXgtaGVpZ2h0OiBub25lO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctZm9ybS1jb250YWluZXIge1xuICAgIG1heC1oZWlnaHQ6IG5vbmU7XG4gIH1cbn1cblxuLmJvb2tpbmctZm9ybS1jb250YWluZXIgLm1jay1mb3JtLWlucHV0IG1hdC1sYWJlbCwgLmJvb2tpbmctZm9ybS1jb250YWluZXIgLm1jay1mb3JtLWlucHV0IC5tYXQtcmFkaW8tbGFiZWwtY29udGVudCB7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIiAhaW1wb3J0YW50O1xuICBjb2xvcjogIzMzMzMzMztcbn1cbi5ib29raW5nLWZvcm0tY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dCBpbnB1dCwgLmJvb2tpbmctZm9ybS1jb250YWluZXIgLm1jay1mb3JtLWlucHV0IGlucHV0OjpwbGFjZWhvbGRlciB7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgY29sb3I6ICNCM0IzQjM7XG59XG5cbi5idXR0b24td3JhcHBlciB7XG4gIGZsZXgtYmFzaXM6IDEwMCU7XG4gIGp1c3RpZnktY29udGVudDogZW5kO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgei1pbmRleDogMjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5idXR0b24td3JhcHBlciB7XG4gICAgYm90dG9tOiAtMC41cmVtO1xuICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgcGFkZGluZy10b3A6IDEuNzVyZW07XG4gICAgcGFkZGluZy1ib3R0b206IDEuNzVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAuYnV0dG9uLXdyYXBwZXIge1xuICAgIGJvdHRvbTogLTAuNXJlbTtcbiAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgIHBhZGRpbmctdG9wOiAxLjc1cmVtO1xuICAgIHBhZGRpbmctYm90dG9tOiAxLjc1cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYnV0dG9uLXdyYXBwZXIuaGFzLWZpeGVkIHtcbiAgICB6LWluZGV4OiAyO1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5idXR0b24td3JhcHBlci5oYXMtZml4ZWQge1xuICAgIHotaW5kZXg6IDI7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuICB9XG59XG4uYnV0dG9uLXdyYXBwZXItc3BhY2VyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5idXR0b24td3JhcHBlciA+IC5idXR0b24tcm93IHtcbiAgICBwYWRkaW5nOiAxcmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJ1dHRvbi13cmFwcGVyID4gLmJ1dHRvbi1yb3cge1xuICAgIHBhZGRpbmc6IDFyZW07XG4gIH1cbn1cblxuLm1jay1tb2RhbC1wcmltYXJ5LWJ1dHRvbiB7XG4gIGZsZXg6IDE7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW46IDAgMC43NXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwtcHJpbWFyeS1idXR0b24ge1xuICAgIG1heC13aWR0aDogMzIwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAxMDQ4cHgpIHtcbiAgLm1jay1tb2RhbC1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgbWF4LXdpZHRoOiAzMjBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1tb2RhbC1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLW1vZGFsLXByaW1hcnktYnV0dG9uIHtcbiAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgfVxufVxuXG4ubWNrLW1vZGFsLXNlY29uZGFyeS1idXR0b24ge1xuICBmbGV4OiAxO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwIDAuNzVyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA4MDBweCkge1xuICAubWNrLW1vZGFsLXNlY29uZGFyeS1idXR0b24ge1xuICAgIG1heC13aWR0aDogMzIwcHg7XG4gICAgbWFyZ2luLXJpZ2h0OiAwIDAuNzVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAxMDQ4cHgpIHtcbiAgLm1jay1tb2RhbC1zZWNvbmRhcnktYnV0dG9uIHtcbiAgICBtYXgtd2lkdGg6IDMyMHB4O1xuICAgIG1hcmdpbi1yaWdodDogMCAwLjc1cmVtO1xuICB9XG59XG5cbi5zbWFsbC1idXR0b25zIC5tY2stbW9kYWwtcHJpbWFyeS1idXR0b24ge1xuICBmbGV4OiAxO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwIDAuNzVyZW07XG4gIG1heC13aWR0aDogMTM0cHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuc21hbGwtYnV0dG9ucyAubWNrLW1vZGFsLXByaW1hcnktYnV0dG9uIHtcbiAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5zbWFsbC1idXR0b25zIC5tY2stbW9kYWwtcHJpbWFyeS1idXR0b24ge1xuICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICB9XG59XG4uc21hbGwtYnV0dG9ucyAubWNrLW1vZGFsLXNlY29uZGFyeS1idXR0b24ge1xuICBmbGV4OiAxO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwIDAuNzVyZW07XG4gIG1heC13aWR0aDogMTM0cHg7XG4gIG1hcmdpbi1yaWdodDogMCAwLjc1cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLnNtYWxsLWJ1dHRvbnMgLm1jay1tb2RhbC1zZWNvbmRhcnktYnV0dG9uIHtcbiAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5zbWFsbC1idXR0b25zIC5tY2stbW9kYWwtc2Vjb25kYXJ5LWJ1dHRvbiB7XG4gICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gIH1cbn0iLCJAaW1wb3J0IFwidmFyc1wiO1xuXG5AbWl4aW4gcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkc2l6ZSwgJHF1YWxpZmllcikge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQGlmICgkcXVhbGlmaWVyID09IG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2UgaWYgKCRxdWFsaWZpZXIgPT0gbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1heC13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuQG1peGluIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkbWluLCAkbWF4KSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyB0aGlzIGlzIGEgY29weSBvZiByZXNwb25kLXRvLiB3ZSBkb24ndCB3YW50IHRvIHByZXNlcnZlIHRoYXQgbWV0aG9kIHNpbmNlIHRoZSBicmVha3BvaW50cyBtYXkgZGl2ZXJnZSBmcm9tIHRoZSBvbGQgVUkuXG5AbWl4aW4gaXMtc2NyZWVuLXNpemUoJG1lZGlhOiBhbGwsICRvcmllbnRhdGlvbjogbm9uZSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5cbkBtaXhpbiBwYWdlLXBhZGRpbmcge1xuICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctc21hbGw7XG4gICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctc21hbGw7XG59XG5cbi8vIEZvbnQgTWl4aW5zXG4kZm9udC1tY2tpbnNleS1zYW5zOiBcIk1jS2luc2V5IFNhbnNcIjtcbiRmb250LXRoZWluaGFyZHQ6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuJGZvbnQtYm93ZXI6IFwiQm93ZXJcIjtcblxuQG1peGluIGJvd2VyLWJvbGQge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1ib3dlcjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gbWNraW5zZXktc2FucyB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIGRpc3BsYXktMSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNHJlbTsgLy8gNjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODc7IC8vIDc2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTIge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTMge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2MHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNCB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDNyZW07IC8vIDQ4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNjY7IC8vIDU2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjRweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMwcHhcbiAgICBsaW5lLWhlaWdodDogMS44MzM7IC8vIDM0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY0MjsgLy8gNDBweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0xIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNDhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNzVyZW07IC8vIDQ0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA1MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0yIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjExMTsgLy8gNDRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDQ4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTMge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMjI7IC8vIDQ0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTUge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTYge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTU7IC8vIDI4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBib2R5LWRlZmF1bHQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjZweFxuICAgIH1cbn1cblxuLy8vIERvZXNudCBleGlzdCBpbiBNRFMuXG5AbWl4aW4gYm9keS10aW55IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTsgLy8gMTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDIwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBmb3JtLWxhYmVsIHtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC10aGVpbmhhcmR0O1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBjb2xvcjogJHBsYWNlaG9sZGVyLWNvbG9yO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG59XG5cbkBtaXhpbiBjaGlwLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gY2hlY2tib3gtbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICBjb2xvcjogYmxhY2s7XG59XG5cbi8vIGJvcmRlcnNcblxuQG1peGluIG1jay1jaGVja2JveC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stdGhpbi1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYm9yZGVyLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQtbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlci1saWdodDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cblxuLy8gZnVuY3Rpb25zXG5cbi8qKlxuICogTWFrZXMgdGV4dCBoYXZlIG1heGltdW0gbGluZXMgd2l0aCBlbGxpcHNpcy4gV29ya3Mgb24gbW9zdCBtb2Rlcm4gYnJvd3NlcnMgZXhjZXB0XG4gKiBvZiBGaXJlZm94Li5cbiAqL1xuQG1peGluIG1heC1saW5lcygkY291bnQpIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIC13ZWJraXQtbGluZS1jbGFtcDogJGNvdW50O1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG59XG5cbi8vIGltYWdlc1xuQG1peGluIG1jay1pY29uKCR3aWR0aCwgJGFzc2V0LCAkaGVpZ2h0OiAkd2lkdGgsICAkYXNzZXRQYXRoOiBcImxpYnMvdWkvc3JjL2xpYi9pY29uc1wiLCkge1xuICAgIHdpZHRoOiAkd2lkdGg7XG4gICAgaGVpZ2h0OiAkaGVpZ2h0O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiN7JGFzc2V0UGF0aH0vI3skYXNzZXR9XCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbn1cblxuXG5AbWl4aW4gbWNrLXNtYWxsLWljb24oJG1vYmlsZS1hc3NldCwgJGRlc2t0b3AtYXNzZXQ6ICRtb2JpbGUtYXNzZXQpIHtcbiAgICBAaW5jbHVkZSBtY2staWNvbigxNnB4LCAkYXNzZXQ6ICRtb2JpbGUtYXNzZXQpO1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBAaW5jbHVkZSBtY2staWNvbigyNHB4LCAkYXNzZXQ6ICRkZXNrdG9wLWFzc2V0KTtcbiAgICB9XG59XG5cbi8vIHNrZWxldG9uXG5AbWl4aW4gc2tlbGV0b24tYmcge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1pbWFnZS1zaXplIHtcbiAgICB3aWR0aDogODFweDtcbiAgICBoZWlnaHQ6IDgycHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAyMTlweDtcbiAgICAgICAgaGVpZ2h0OiAxMTlweDtcbiAgICB9XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1zdGF0dXMtc2l6ZSB7XG4gICAgd2lkdGg6IDExN3B4O1xuICAgIGhlaWdodDogNzhweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDExN3B4O1xuICAgICAgICBoZWlnaHQ6IDc4cHg7XG4gICAgfVxufVxuIiwiLy8gSW1wb3J0IGFsbCB0aGUgdGhlbWluZyBmdW5jdGlvbmFsaXR5LlxuLy8gV2Ugd2FudCBvdmVybGF5cyB0byBhbHdheXMgYXBwZWFyIG92ZXIgdXNlciBjb250ZW50LCBzbyBzZXQgYSBiYXNlbGluZVxuLy8gdmVyeSBoaWdoIHotaW5kZXggZm9yIHRoZSBvdmVybGF5IGNvbnRhaW5lciwgd2hpY2ggaXMgd2hlcmUgd2UgY3JlYXRlIHRoZSBuZXdcbi8vIHN0YWNraW5nIGNvbnRleHQgZm9yIGFsbCBvdmVybGF5cy5cbiRjZGstei1pbmRleC1vdmVybGF5LWNvbnRhaW5lcjogMTAwMCAhZGVmYXVsdDtcbiRjZGstei1pbmRleC1vdmVybGF5OiAxMDAwICFkZWZhdWx0O1xuJGNkay16LWluZGV4LW92ZXJsYXktYmFja2Ryb3A6IDEwMDAgIWRlZmF1bHQ7XG5cbi8vIEJhY2tncm91bmQgY29sb3IgZm9yIGFsbCBvZiB0aGUgYmFja2Ryb3BzXG4kY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcC1iYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMzIpICFkZWZhdWx0O1xuXG4vLyBEZWZhdWx0IGJhY2tkcm9wIGFuaW1hdGlvbiBpcyBiYXNlZCBvbiB0aGUgTWF0ZXJpYWwgRGVzaWduIHN3aWZ0LWVhc2Utb3V0LlxuJGJhY2tkcm9wLWFuaW1hdGlvbi1kdXJhdGlvbjogNDAwbXMgIWRlZmF1bHQ7XG4kYmFja2Ryb3AtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSkgIWRlZmF1bHQ7XG5cblxuQG1peGluIGNkay1vdmVybGF5KCkge1xuICAuY2RrLW92ZXJsYXktY29udGFpbmVyLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXIge1xuICAgIC8vIERpc2FibGUgZXZlbnRzIGZyb20gYmVpbmcgY2FwdHVyZWQgb24gdGhlIG92ZXJsYXkgY29udGFpbmVyLlxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuXG4gICAgLy8gVGhlIGNvbnRhaW5lciBzaG91bGQgYmUgdGhlIHNpemUgb2YgdGhlIHZpZXdwb3J0LlxuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuXG4gIC8vIFRoZSBvdmVybGF5LWNvbnRhaW5lciBpcyBhbiBpbnZpc2libGUgZWxlbWVudCB3aGljaCBjb250YWlucyBhbGwgaW5kaXZpZHVhbCBvdmVybGF5cy5cbiAgLmNkay1vdmVybGF5LWNvbnRhaW5lciB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHotaW5kZXg6ICRjZGstei1pbmRleC1vdmVybGF5LWNvbnRhaW5lcjtcblxuICAgICY6ZW1wdHkge1xuICAgICAgLy8gSGlkZSB0aGUgZWxlbWVudCB3aGVuIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgY2hpbGQgbm9kZXMuIFRoaXMgZG9lc24ndFxuICAgICAgLy8gaW5jbHVkZSBvdmVybGF5cyB0aGF0IGhhdmUgYmVlbiBkZXRhY2hlZCwgcmF0aGVyIHRoYW4gZGlzcG9zZWQuXG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdlIHVzZSBhbiBleHRyYSB3cmFwcGVyIGVsZW1lbnQgaW4gb3JkZXIgdG8gdXNlIG1ha2UgdGhlIG92ZXJsYXkgaXRzZWxmIGEgZmxleCBpdGVtLlxuICAvLyBUaGlzIG1ha2VzIGNlbnRlcmluZyB0aGUgb3ZlcmxheSBlYXN5IHdpdGhvdXQgcnVubmluZyBpbnRvIHRoZSBzdWJwaXhlbCByZW5kZXJpbmdcbiAgLy8gcHJvYmxlbXMgdGllZCB0byB1c2luZyBgdHJhbnNmb3JtYCBhbmQgd2l0aG91dCBpbnRlcmZlcmluZyB3aXRoIHRoZSBvdGhlciBwb3NpdGlvblxuICAvLyBzdHJhdGVnaWVzLlxuICAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHotaW5kZXg6ICRjZGstei1pbmRleC1vdmVybGF5O1xuICB9XG5cbiAgLy8gQSBzaW5nbGUgb3ZlcmxheSBwYW5lLlxuICAuY2RrLW92ZXJsYXktcGFuZSB7XG4gICAgLy8gTm90ZTogaXQncyBpbXBvcnRhbnQgZm9yIHRoaXMgb25lIHRvIHN0YXJ0IG9mZiBgYWJzb2x1dGVgLFxuICAgIC8vIGluIG9yZGVyIGZvciB1cyB0byBiZSBhYmxlIHRvIG1lYXN1cmUgaXQgY29ycmVjdGx5LlxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIHotaW5kZXg6ICRjZGstei1pbmRleC1vdmVybGF5O1xuXG4gICAgLy8gRm9yIGNvbm5lY3RlZC1wb3NpdGlvbiBvdmVybGF5cywgd2Ugc2V0IGBkaXNwbGF5OiBmbGV4YCBpblxuICAgIC8vIG9yZGVyIHRvIGZvcmNlIGBtYXgtd2lkdGhgIGFuZCBgbWF4LWhlaWdodGAgdG8gdGFrZSBlZmZlY3QuXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgbWF4LWhlaWdodDogMTAwJTtcbiAgfVxuXG4gIC5jZGstb3ZlcmxheS1iYWNrZHJvcCB7XG4gICAgLy8gVE9ETyhqZWxib3Vybik6IHJldXNlIHNpZGVuYXYgZnVsbHNjcmVlbiBtaXhpbi5cbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuXG4gICAgei1pbmRleDogJGNkay16LWluZGV4LW92ZXJsYXktYmFja2Ryb3A7XG4gICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5ICRiYWNrZHJvcC1hbmltYXRpb24tZHVyYXRpb24gJGJhY2tkcm9wLWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb247XG4gICAgb3BhY2l0eTogMDtcblxuICAgICYuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyB7XG4gICAgICBvcGFjaXR5OiAxO1xuXG4gICAgICAvLyBJbiBoaWdoIGNvbnRyYXN0IG1vZGUgdGhlIHJnYmEgYmFja2dyb3VuZCB3aWxsIGJlY29tZSBzb2xpZCBzbyB3ZSBuZWVkIHRvIGZhbGwgYmFja1xuICAgICAgLy8gdG8gbWFraW5nIGl0IG9wYXF1ZSB1c2luZyBgb3BhY2l0eWAuIE5vdGUgdGhhdCB3ZSBjYW4ndCB1c2UgdGhlIGBjZGstaGlnaC1jb250cmFzdGBcbiAgICAgIC8vIG1peGluLCBiZWNhdXNlIHdlIGNhbid0IG5vcm1hbGl6ZSB0aGUgaW1wb3J0IHBhdGggdG8gdGhlIF9hMTF5LnNjc3MgYm90aCBmb3IgdGhlXG4gICAgICAvLyBzb3VyY2UgYW5kIHdoZW4gdGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkLiBTZWUgIzEwOTA4LlxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpIHtcbiAgICAgICAgb3BhY2l0eTogMC42O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wIHtcbiAgICBiYWNrZ3JvdW5kOiAkY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcC1iYWNrZ3JvdW5kO1xuICB9XG5cbiAgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wIHtcbiAgICAvLyBOb3RlOiBhcyBvZiBGaXJlZm94IDU3LCBoYXZpbmcgdGhlIGJhY2tkcm9wIGJlIGBiYWNrZ3JvdW5kOiBub25lYCB3aWxsIHByZXZlbnQgaXQgZnJvbVxuICAgIC8vIGNhcHR1cmluZyB0aGUgdXNlcidzIG1vdXNlIHNjcm9sbCBldmVudHMuIFNpbmNlIHdlIGFsc28gY2FuJ3QgdXNlIHNvbWV0aGluZyBsaWtlXG4gICAgLy8gYHJnYmEoMCwgMCwgMCwgMClgLCB3ZSB3b3JrIGFyb3VuZCB0aGUgaW5jb25zaXN0ZW5jeSBieSBub3Qgc2V0dGluZyB0aGUgYmFja2dyb3VuZCBhdFxuICAgIC8vIGFsbCBhbmQgdXNpbmcgYG9wYWNpdHlgIHRvIG1ha2UgdGhlIGVsZW1lbnQgdHJhbnNwYXJlbnQuXG4gICAgJiwgJi5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIHtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICB9XG5cbiAgLy8gT3ZlcmxheSBwYXJlbnQgZWxlbWVudCB1c2VkIHdpdGggdGhlIGNvbm5lY3RlZCBwb3NpdGlvbiBzdHJhdGVneS4gVXNlZCB0byBjb25zdHJhaW4gdGhlXG4gIC8vIG92ZXJsYXkgZWxlbWVudCdzIHNpemUgdG8gZml0IHdpdGhpbiB0aGUgdmlld3BvcnQuXG4gIC5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogJGNkay16LWluZGV4LW92ZXJsYXk7XG5cbiAgICAvLyBXZSB1c2UgYGRpc3BsYXk6IGZsZXhgIG9uIHRoaXMgZWxlbWVudCBleGNsdXNpdmVseSBmb3IgY2VudGVyaW5nIGNvbm5lY3RlZCBvdmVybGF5cy5cbiAgICAvLyBXaGVuICpub3QqIGNlbnRlcmluZywgYSB0b3AvbGVmdC9ib3R0b20vcmlnaHQgd2lsbCBiZSBzZXQgd2hpY2ggb3ZlcnJpZGVzIHRoZSBub3JtYWxcbiAgICAvLyBmbGV4IGxheW91dC5cbiAgICBkaXNwbGF5OiBmbGV4O1xuXG4gICAgLy8gV2UgdXNlIHRoZSBgY29sdW1uYCBkaXJlY3Rpb24gaGVyZSB0byBhdm9pZCBzb21lIGZsZXhib3ggaXNzdWVzIGluIEVkZ2VcbiAgICAvLyB3aGVuIHVzaW5nIHRoZSBcImdyb3cgYWZ0ZXIgb3BlblwiIG9wdGlvbnMuXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuICAgIC8vIEFkZCBzb21lIGRpbWVuc2lvbnMgc28gdGhlIGVsZW1lbnQgaGFzIGFuIGBpbm5lclRleHRgIHdoaWNoIHNvbWUgcGVvcGxlIGRlcGVuZCBvbiBpbiB0ZXN0cy5cbiAgICBtaW4td2lkdGg6IDFweDtcbiAgICBtaW4taGVpZ2h0OiAxcHg7XG4gIH1cblxuICAvLyBVc2VkIHdoZW4gZGlzYWJsaW5nIGdsb2JhbCBzY3JvbGxpbmcuXG4gIC5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG5cbiAgICAvLyBOZWNlc3NhcnkgZm9yIHRoZSBjb250ZW50IG5vdCB0byBsb3NlIGl0cyB3aWR0aC4gTm90ZSB0aGF0IHdlJ3JlIHVzaW5nIDEwMCUsIGluc3RlYWQgb2ZcbiAgICAvLyAxMDB2dywgYmVjYXVzZSAxMDB2dyBpbmNsdWRlcyB0aGUgd2lkdGggcGx1cyB0aGUgc2Nyb2xsYmFyLCB3aGVyZWFzIDEwMCUgaXMgdGhlIHdpZHRoXG4gICAgLy8gdGhhdCB0aGUgZWxlbWVudCBoYWQgYmVmb3JlIHdlIG1hZGUgaXQgYGZpeGVkYC5cbiAgICB3aWR0aDogMTAwJTtcblxuICAgIC8vIE5vdGU6IHRoaXMgd2lsbCBhbHdheXMgYWRkIGEgc2Nyb2xsYmFyIHRvIHdoYXRldmVyIGVsZW1lbnQgaXQgaXMgb24sIHdoaWNoIGNhblxuICAgIC8vIHBvdGVudGlhbGx5IHJlc3VsdCBpbiBkb3VibGUgc2Nyb2xsYmFycy4gSXQgc2hvdWxkbid0IGJlIGFuIGlzc3VlLCBiZWNhdXNlIHdlIHdvbid0XG4gICAgLy8gYmxvY2sgc2Nyb2xsaW5nIG9uIGEgcGFnZSB0aGF0IGRvZXNuJ3QgaGF2ZSBhIHNjcm9sbGJhciBpbiB0aGUgZmlyc3QgcGxhY2UuXG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICB9XG59XG5cbkBtaXhpbiBjZGstYTExeSB7XG4gIC5jZGstdmlzdWFsbHktaGlkZGVuIHtcbiAgICBib3JkZXI6IDA7XG4gICAgY2xpcDogcmVjdCgwIDAgMCAwKTtcbiAgICBoZWlnaHQ6IDFweDtcbiAgICBtYXJnaW46IC0xcHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwYWRkaW5nOiAwO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMXB4O1xuXG4gICAgLy8gQXZvaWQgYnJvd3NlcnMgcmVuZGVyaW5nIHRoZSBmb2N1cyByaW5nIGluIHNvbWUgY2FzZXMuXG4gICAgb3V0bGluZTogMDtcblxuICAgIC8vIEF2b2lkIHNvbWUgY2FzZXMgd2hlcmUgdGhlIGJyb3dzZXIgd2lsbCBzdGlsbCByZW5kZXIgdGhlIG5hdGl2ZSBjb250cm9scyAoc2VlICM5MDQ5KS5cbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xuICB9XG59XG5cbi8vLyBFbWl0cyB0aGUgbWl4aW4ncyBjb250ZW50IG5lc3RlZCB1bmRlciBgJHNlbGVjdG9yLWNvbnRleHRgIGlmIGAkc2VsZWN0b3ItY29udGV4dGBcbi8vLyBpcyBub24tZW1wdHkuXG4vLy8gQHBhcmFtIHNlbGVjdG9yLWNvbnRleHQgVGhlIHNlbGVjdG9yIHVuZGVyIHdoaWNoIHRvIG5lc3QgdGhlIG1peGluJ3MgY29udGVudC5cbkBtaXhpbiBfY2RrLW9wdGlvbmFsbHktbmVzdC1jb250ZW50KCRzZWxlY3Rvci1jb250ZXh0KSB7XG4gIEBpZiAoJHNlbGVjdG9yLWNvbnRleHQgPT0gJycpIHtcbiAgICBAY29udGVudDtcbiAgfVxuICBAZWxzZSB7XG4gICAgI3skc2VsZWN0b3ItY29udGV4dH0ge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9XG59XG5cbi8vLyBBcHBsaWVzIHN0eWxlcyBmb3IgdXNlcnMgaW4gaGlnaCBjb250cmFzdCBtb2RlLiBOb3RlIHRoYXQgdGhpcyBvbmx5IGFwcGxpZXNcbi8vLyB0byBNaWNyb3NvZnQgYnJvd3NlcnMuIENocm9tZSBjYW4gYmUgaW5jbHVkZWQgYnkgY2hlY2tpbmcgZm9yIHRoZSBgaHRtbFtoY11gXG4vLy8gYXR0cmlidXRlLCBob3dldmVyIENocm9tZSBoYW5kbGVzIGhpZ2ggY29udHJhc3QgZGlmZmVyZW50bHkuXG4vLy9cbi8vLyBAcGFyYW0gdGFyZ2V0IFdoaWNoIGtpbmQgb2YgaGlnaCBjb250cmFzdCBzZXR0aW5nIHRvIHRhcmdldC4gRGVmYXVsdHMgdG8gYGFjdGl2ZWAsIGNhbiBiZVxuLy8vICAgIGB3aGl0ZS1vbi1ibGFja2Agb3IgYGJsYWNrLW9uLXdoaXRlYC5cbi8vLyBAcGFyYW0gZW5jYXBzdWxhdGlvbiBXaGV0aGVyIHRvIGVtaXQgc3R5bGVzIGZvciB2aWV3IGVuY2Fwc3VsYXRpb24uIFZhbHVlcyBhcmU6XG4vLy8gICAgICogYG9uYCAtIHdvcmtzIGZvciBgRW11bGF0ZWRgLCBgTmF0aXZlYCwgYW5kIGBTaGFkb3dEb21gXG4vLy8gICAgICogYG9mZmAgLSB3b3JrcyBmb3IgYE5vbmVgXG4vLy8gICAgICogYGFueWAgLSB3b3JrcyBmb3IgYWxsIGVuY2Fwc3VsYXRpb24gbW9kZXMgYnkgZW1pdHRpbmcgdGhlIENTUyB0d2ljZSAoZGVmYXVsdCkuXG5AbWl4aW4gY2RrLWhpZ2gtY29udHJhc3QoJHRhcmdldDogYWN0aXZlLCAkZW5jYXBzdWxhdGlvbjogJ2FueScpIHtcbiAgQGlmICgkdGFyZ2V0ICE9ICdhY3RpdmUnIGFuZCAkdGFyZ2V0ICE9ICdibGFjay1vbi13aGl0ZScgYW5kICR0YXJnZXQgIT0gJ3doaXRlLW9uLWJsYWNrJykge1xuICAgIEBlcnJvciAnVW5rbm93biBjZGstaGlnaC1jb250cmFzdCB2YWx1ZSBcIiN7JHRhcmdldH1cIiBwcm92aWRlZC4gJyArXG4gICAgICAgICAgICdBbGxvd2VkIHZhbHVlcyBhcmUgXCJhY3RpdmVcIiwgXCJibGFjay1vbi13aGl0ZVwiLCBhbmQgXCJ3aGl0ZS1vbi1ibGFja1wiJztcbiAgfVxuXG4gIEBpZiAoJGVuY2Fwc3VsYXRpb24gIT0gJ29uJyBhbmQgJGVuY2Fwc3VsYXRpb24gIT0gJ29mZicgYW5kICRlbmNhcHN1bGF0aW9uICE9ICdhbnknKSB7XG4gICAgQGVycm9yICdVbmtub3duIGNkay1oaWdoLWNvbnRyYXN0IGVuY2Fwc3VsYXRpb24gXCIjeyRlbmNhcHN1bGF0aW9ufVwiIHByb3ZpZGVkLiAnICtcbiAgICAgICAgICAgJ0FsbG93ZWQgdmFsdWVzIGFyZSBcIm9uXCIsIFwib2ZmXCIsIGFuZCBcImFueVwiJztcbiAgfVxuXG4gIC8vIElmIHRoZSBzZWxlY3RvciBjb250ZXh0IGhhcyBtdWx0aXBsZSBwYXJ0cywgc3VjaCBhcyBgLnNlY3Rpb24sIC5yZWdpb25gLCBqdXN0IGRvaW5nXG4gIC8vIGAuY2RrLWhpZ2gtY29udHJhc3QteHh4ICN7Jn1gIHdpbGwgb25seSBhcHBseSB0aGUgcGFyZW50IHNlbGVjdG9yIHRvIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZVxuICAvLyBjb250ZXh0LiBXZSBhZGRyZXNzIHRoaXMgYnkgbmVzdGluZyB0aGUgc2VsZWN0b3IgY29udGV4dCB1bmRlciAuY2RrLWhpZ2gtY29udHJhc3QuXG4gIEBhdC1yb290IHtcbiAgICAkc2VsZWN0b3ItY29udGV4dDogI3smfTtcblxuICAgIEBpZiAoJGVuY2Fwc3VsYXRpb24gIT0gJ29uJykge1xuICAgICAgLmNkay1oaWdoLWNvbnRyYXN0LSN7JHRhcmdldH0ge1xuICAgICAgICBAaW5jbHVkZSBfY2RrLW9wdGlvbmFsbHktbmVzdC1jb250ZW50KCRzZWxlY3Rvci1jb250ZXh0KSB7XG4gICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBAaWYgKCRlbmNhcHN1bGF0aW9uICE9ICdvZmYnKSB7XG4gICAgICAuY2RrLWhpZ2gtY29udHJhc3QtI3skdGFyZ2V0fSA6aG9zdCB7XG4gICAgICAgIEBpbmNsdWRlIF9jZGstb3B0aW9uYWxseS1uZXN0LWNvbnRlbnQoJHNlbGVjdG9yLWNvbnRleHQpIHtcbiAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBDb3JlIHN0eWxlcyB0aGF0IGVuYWJsZSBtb25pdG9yaW5nIGF1dG9maWxsIHN0YXRlIG9mIHRleHQgZmllbGRzLlxuQG1peGluIGNkay10ZXh0LWZpZWxkIHtcbiAgLy8gS2V5ZnJhbWVzIHRoYXQgYXBwbHkgbm8gc3R5bGVzLCBidXQgYWxsb3cgdXMgdG8gbW9uaXRvciB3aGVuIGFuIHRleHQgZmllbGQgYmVjb21lcyBhdXRvZmlsbGVkXG4gIC8vIGJ5IHdhdGNoaW5nIGZvciB0aGUgYW5pbWF0aW9uIGV2ZW50cyB0aGF0IGFyZSBmaXJlZCB3aGVuIHRoZXkgc3RhcnQuIE5vdGU6IHRoZSAvKiEqLyBjb21tZW50IGlzXG4gIC8vIG5lZWRlZCB0byBwcmV2ZW50IExpYlNhc3MgZnJvbSBzdHJpcHBpbmcgdGhlIGtleWZyYW1lcyBvdXQuXG4gIC8vIEJhc2VkIG9uOiBodHRwczovL21lZGl1bS5jb20vQGJydW5uL2RldGVjdGluZy1hdXRvZmlsbGVkLWZpZWxkcy1pbi1qYXZhc2NyaXB0LWFlZDU5OGQyNWRhN1xuICBAa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IHsvKiEqL31cbiAgQGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgey8qISovfVxuXG4gIC5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWQ6LXdlYmtpdC1hdXRvZmlsbCB7XG4gICAgLy8gU2luY2UgQ2hyb21lIDgwIHdlIG5lZWQgYSAxbXMgZGVsYXksIG9yIHRoZSBhbmltYXRpb25zdGFydCBldmVudCB3b24ndCBmaXJlLlxuICAgIGFuaW1hdGlvbjogY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zO1xuICB9XG5cbiAgLmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDpub3QoOi13ZWJraXQtYXV0b2ZpbGwpIHtcbiAgICAvLyBTaW5jZSBDaHJvbWUgODAgd2UgbmVlZCBhIDFtcyBkZWxheSwgb3IgdGhlIGFuaW1hdGlvbnN0YXJ0IGV2ZW50IHdvbid0IGZpcmUuXG4gICAgYW5pbWF0aW9uOiBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zO1xuICB9XG5cbiAgLy8gUmVtb3ZlIHRoZSByZXNpemUgaGFuZGxlIG9uIGF1dG9zaXppbmcgdGV4dGFyZWFzLCBiZWNhdXNlIHdoYXRldmVyIGhlaWdodFxuICAvLyB0aGUgdXNlciByZXNpemVkIHRvIHdpbGwgYmUgb3ZlcndyaXR0ZW4gb25jZSB0aGV5IHN0YXJ0IHR5cGluZyBhZ2Fpbi5cbiAgdGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplIHtcbiAgICByZXNpemU6IG5vbmU7XG4gIH1cblxuICAvLyBUaGlzIGNsYXNzIGlzIHRlbXBvcmFyaWx5IGFwcGxpZWQgdG8gdGhlIHRleHRhcmVhIHdoZW4gaXQgaXMgYmVpbmcgbWVhc3VyZWQuIEl0IGlzIGltbWVkaWF0ZWx5XG4gIC8vIHJlbW92ZWQgd2hlbiBtZWFzdXJpbmcgaXMgY29tcGxldGUuIFdlIHVzZSBgIWltcG9ydGFudGAgcnVsZXMgaGVyZSB0byBtYWtlIHN1cmUgdXNlci1zcGVjaWZpZWRcbiAgLy8gcnVsZXMgZG8gbm90IGludGVyZmVyZSB3aXRoIHRoZSBtZWFzdXJlbWVudC5cbiAgdGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZyB7XG4gICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xuICAgIC8vIEhhdmluZyAycHggdG9wIGFuZCBib3R0b20gcGFkZGluZyBzZWVtcyB0byBmaXggYSBidWcgd2hlcmUgQ2hyb21lIGdldHMgYW4gaW5jb3JyZWN0XG4gICAgLy8gbWVhc3VyZW1lbnQuIFdlIGp1c3QgaGF2ZSB0byBhY2NvdW50IGZvciBpdCBsYXRlciBhbmQgc3VidHJhY3QgaXQgb2ZmIHRoZSBmaW5hbCByZXN1bHQuXG4gICAgcGFkZGluZzogMnB4IDAgIWltcG9ydGFudDtcbiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveCAhaW1wb3J0YW50O1xuICB9XG59XG5cbi8vIFVzZWQgdG8gZ2VuZXJhdGUgVUlEcyBmb3Iga2V5ZnJhbWVzIHVzZWQgdG8gY2hhbmdlIHRoZSB0ZXh0IGZpZWxkIGF1dG9maWxsIHN0eWxlcy5cbiRjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci1mcmFtZS1jb3VudDogMDtcblxuLy8gTWl4aW4gdXNlZCB0byBhcHBseSBjdXN0b20gYmFja2dyb3VuZCBhbmQgZm9yZWdyb3VuZCBjb2xvcnMgdG8gYW4gYXV0b2ZpbGxlZCB0ZXh0IGZpZWxkLlxuLy8gQmFzZWQgb246IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI3ODE1NDkvXG4vLyByZW1vdmluZy1pbnB1dC1iYWNrZ3JvdW5kLWNvbG91ci1mb3ItY2hyb21lLWF1dG9jb21wbGV0ZSNhbnN3ZXItMzc0MzIyNjBcbkBtaXhpbiBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvcigkYmFja2dyb3VuZCwgJGZvcmVncm91bmQ6JycpIHtcbiAgQGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci0jeyRjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci1mcmFtZS1jb3VudH0ge1xuICAgIHRvIHtcbiAgICAgIGJhY2tncm91bmQ6ICRiYWNrZ3JvdW5kO1xuICAgICAgQGlmICRmb3JlZ3JvdW5kICE9ICcnIHsgY29sb3I6ICRmb3JlZ3JvdW5kOyB9XG4gICAgfVxuICB9XG5cbiAgJjotd2Via2l0LWF1dG9maWxsIHtcbiAgICBhbmltYXRpb246IGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLSN7JGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLWZyYW1lLWNvdW50fSBib3RoO1xuICB9XG5cbiAgJi5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWQ6LXdlYmtpdC1hdXRvZmlsbCB7XG4gICAgLy8gU2luY2UgQ2hyb21lIDgwIHdlIG5lZWQgYSAxbXMgZGVsYXkgZm9yIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0LCBvciB0aGUgYW5pbWF0aW9uc3RhcnRcbiAgICAvLyBldmVudCB3b24ndCBmaXJlLlxuICAgIGFuaW1hdGlvbjogY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zLFxuICAgICAgICAgICAgICAgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItI3skY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItZnJhbWUtY291bnR9IGJvdGg7XG4gIH1cblxuICAkY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItZnJhbWUtY291bnQ6XG4gICAgICAkY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItZnJhbWUtY291bnQgKyAxICFnbG9iYWw7XG59XG5cblxuLy8gQ29yZSBzdHlsZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBhcHBseSBtYXRlcmlhbCBkZXNpZ24gdHJlYXRtZW50cyB0byBhbnkgZWxlbWVudC5cbi8vIE1lZGlhIHF1ZXJpZXNcbi8vIFRPRE8oam9zZXBocGVycm90dCk6IENoYW5nZSAkbWF0LXhzbWFsbCBhbmQgJG1hdC1zbWFsbCB1c2FnZXMgdG8gcmVseSBvbiBCcmVha3BvaW50T2JzZXJ2ZXIsXG4kbWF0LXhzbWFsbDogJ21heC13aWR0aDogNTk5cHgnO1xuJG1hdC1zbWFsbDogJ21heC13aWR0aDogOTU5cHgnO1xuXG4vLyBUT0RPOiBSZXZpc2l0IGFsbCB6LWluZGljZXMgYmVmb3JlIGJldGFcbi8vIHotaW5kZXggbWFzdGVyIGxpc3RcblxuJHotaW5kZXgtZmFiOiAyMCAhZGVmYXVsdDtcbiR6LWluZGV4LWRyYXdlcjogMTAwICFkZWZhdWx0O1xuXG4vLyBHbG9iYWwgY29uc3RhbnRzXG4kcGk6IDMuMTQxNTkyNjU7XG5cbi8vIFBhZGRpbmcgYmV0d2VlbiBpbnB1dCB0b2dnbGVzIGFuZCB0aGVpciBsYWJlbHNcbiRtYXQtdG9nZ2xlLXBhZGRpbmc6IDhweCAhZGVmYXVsdDtcbi8vIFdpZHRoIGFuZCBoZWlnaHQgb2YgaW5wdXQgdG9nZ2xlc1xuJG1hdC10b2dnbGUtc2l6ZTogMjBweCAhZGVmYXVsdDtcblxuLy8gRWFzaW5nIEN1cnZlc1xuLy8gVE9ETyhqZWxib3Vybik6IGFsbCBvZiB0aGVzZSBuZWVkIHRvIGJlIHJldmlzaXRlZFxuXG4vLyBUaGUgZGVmYXVsdCBhbmltYXRpb24gY3VydmVzIHVzZWQgYnkgbWF0ZXJpYWwgZGVzaWduLlxuJG1hdC1saW5lYXItb3V0LXNsb3ctaW4tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpICFkZWZhdWx0O1xuJG1hdC1mYXN0LW91dC1zbG93LWluLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSAhZGVmYXVsdDtcbiRtYXQtZmFzdC1vdXQtbGluZWFyLWluLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMSwgMSkgIWRlZmF1bHQ7XG5cbiRlYXNlLWluLW91dC1jdXJ2ZS1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpICFkZWZhdWx0O1xuXG4kc3dpZnQtZWFzZS1vdXQtZHVyYXRpb246IDQwMG1zICFkZWZhdWx0O1xuJHN3aWZ0LWVhc2Utb3V0LXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSkgIWRlZmF1bHQ7XG4kc3dpZnQtZWFzZS1vdXQ6IGFsbCAkc3dpZnQtZWFzZS1vdXQtZHVyYXRpb24gJHN3aWZ0LWVhc2Utb3V0LXRpbWluZy1mdW5jdGlvbiAhZGVmYXVsdDtcblxuJHN3aWZ0LWVhc2UtaW4tZHVyYXRpb246IDMwMG1zICFkZWZhdWx0O1xuJHN3aWZ0LWVhc2UtaW4tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC41NSwgMCwgMC41NSwgMC4yKSAhZGVmYXVsdDtcbiRzd2lmdC1lYXNlLWluOiBhbGwgJHN3aWZ0LWVhc2UtaW4tZHVyYXRpb24gJHN3aWZ0LWVhc2UtaW4tdGltaW5nLWZ1bmN0aW9uICFkZWZhdWx0O1xuXG4kc3dpZnQtZWFzZS1pbi1vdXQtZHVyYXRpb246IDUwMG1zICFkZWZhdWx0O1xuJHN3aWZ0LWVhc2UtaW4tb3V0LXRpbWluZy1mdW5jdGlvbjogJGVhc2UtaW4tb3V0LWN1cnZlLWZ1bmN0aW9uICFkZWZhdWx0O1xuJHN3aWZ0LWVhc2UtaW4tb3V0OiBhbGwgJHN3aWZ0LWVhc2UtaW4tb3V0LWR1cmF0aW9uICRzd2lmdC1lYXNlLWluLW91dC10aW1pbmctZnVuY3Rpb24gIWRlZmF1bHQ7XG5cbiRzd2lmdC1saW5lYXItZHVyYXRpb246IDgwbXMgIWRlZmF1bHQ7XG4kc3dpZnQtbGluZWFyLXRpbWluZy1mdW5jdGlvbjogbGluZWFyICFkZWZhdWx0O1xuJHN3aWZ0LWxpbmVhcjogYWxsICRzd2lmdC1saW5lYXItZHVyYXRpb24gJHN3aWZ0LWxpbmVhci10aW1pbmctZnVuY3Rpb24gIWRlZmF1bHQ7XG5cblxuXG4vLyBBIGNvbGxlY3Rpb24gb2YgbWl4aW5zIGFuZCBDU1MgY2xhc3NlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGFwcGx5IGVsZXZhdGlvbiB0byBhIG1hdGVyaWFsXG4vLyBlbGVtZW50LlxuLy8gU2VlOiBodHRwczovL21hdGVyaWFsLmlvL2Rlc2lnbi9lbnZpcm9ubWVudC9lbGV2YXRpb24uaHRtbFxuLy8gRXhhbXBsZXM6XG4vL1xuLy9cbi8vIC5tYXQtZm9vIHtcbi8vICAgQGluY2x1ZGUgJG1hdC1lbGV2YXRpb24oMik7XG4vL1xuLy8gICAmOmFjdGl2ZSB7XG4vLyAgICAgQGluY2x1ZGUgJG1hdC1lbGV2YXRpb24oOCk7XG4vLyAgIH1cbi8vIH1cbi8vXG4vLyA8ZGl2IGlkPVwiZXh0ZXJuYWwtY2FyZFwiIGNsYXNzPVwibWF0LWVsZXZhdGlvbi16MlwiPjxwPlNvbWUgY29udGVudDwvcD48L2Rpdj5cbi8vXG4vLyBGb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIGRlc2lnbiBiZWhpbmQgaG93IGVsZXZhdGlvbiBpcyBpbXBsZW1lbnRlZCwgc2VlIHRoZSBkZXNpZ24gZG9jIGF0XG4vLyBodHRwczovL2dvby5nbC9LcTBrOVouXG5cbi8vIENvbG9ycyBmb3IgdW1icmEsIHBlbnVtYnJhLCBhbmQgYW1iaWVudCBzaGFkb3dzLiBBcyBkZXNjcmliZWQgaW4gdGhlIGRlc2lnbiBkb2MsIGVhY2ggZWxldmF0aW9uXG4vLyBsZXZlbCBpcyBjcmVhdGVkIHVzaW5nIGEgc2V0IG9mIDMgc2hhZG93IHZhbHVlcywgb25lIGZvciB1bWJyYSAodGhlIHNoYWRvdyByZXByZXNlbnRpbmcgdGhlXG4vLyBzcGFjZSBjb21wbGV0ZWx5IG9ic2N1cmVkIGJ5IGFuIG9iamVjdCByZWxhdGl2ZSB0byBpdHMgbGlnaHQgc291cmNlKSwgb25lIGZvciBwZW51bWJyYSAodGhlXG4vLyBzcGFjZSBwYXJ0aWFsbHkgb2JzY3VyZWQgYnkgYW4gb2JqZWN0KSwgYW5kIG9uZSBmb3IgYW1iaWVudCAodGhlIHNwYWNlIHdoaWNoIGNvbnRhaW5zIHRoZSBvYmplY3Rcbi8vIGl0c2VsZikuIEZvciBhIGZ1cnRoZXIgZXhwbGFuYXRpb24gb2YgdGhlc2UgdGVybXMgYW5kIHRoZWlyIG1lYW5pbmdzLCBzZWVcbi8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VtYnJhLF9wZW51bWJyYV9hbmRfYW50dW1icmEuXG5cbi8vIE1hcHMgZm9yIHRoZSBkaWZmZXJlbnQgc2hhZG93IHNldHMgYW5kIHRoZWlyIHZhbHVlcyB3aXRoaW4gZWFjaCB6LXNwYWNlLiBUaGVzZSB2YWx1ZXMgd2VyZVxuLy8gY3JlYXRlZCBieSB0YWtpbmcgYSBmZXcgcmVmZXJlbmNlIHNoYWRvdyBzZXRzIGNyZWF0ZWQgYnkgR29vZ2xlJ3MgRGVzaWduZXJzIGFuZCBpbnRlcnBvbGF0aW5nXG4vLyBhbGwgb2YgdGhlIHZhbHVlcyBiZXR3ZWVuIHRoZW0uXG5cbkBmdW5jdGlvbiBfZ2V0LXVtYnJhLW1hcCgkY29sb3IsICRvcGFjaXR5KSB7XG4gICRzaGFkb3ctY29sb3I6IGlmKHR5cGUtb2YoJGNvbG9yKSA9PSBjb2xvciwgcmdiYSgkY29sb3IsICRvcGFjaXR5ICogMC4yKSwgJGNvbG9yKTtcblxuICBAcmV0dXJuIChcbiAgICAwOiAnMHB4IDBweCAwcHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE6ICcwcHggMnB4IDFweCAtMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDI6ICcwcHggM3B4IDFweCAtMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDM6ICcwcHggM3B4IDNweCAtMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDQ6ICcwcHggMnB4IDRweCAtMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDU6ICcwcHggM3B4IDVweCAtMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDY6ICcwcHggM3B4IDVweCAtMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDc6ICcwcHggNHB4IDVweCAtMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDg6ICcwcHggNXB4IDVweCAtM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDk6ICcwcHggNXB4IDZweCAtM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEwOiAnMHB4IDZweCA2cHggLTNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMTogJzBweCA2cHggN3B4IC00cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTI6ICcwcHggN3B4IDhweCAtNHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEzOiAnMHB4IDdweCA4cHggLTRweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNDogJzBweCA3cHggOXB4IC00cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTU6ICcwcHggOHB4IDlweCAtNXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE2OiAnMHB4IDhweCAxMHB4IC01cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTc6ICcwcHggOHB4IDExcHggLTVweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxODogJzBweCA5cHggMTFweCAtNXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE5OiAnMHB4IDlweCAxMnB4IC02cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjA6ICcwcHggMTBweCAxM3B4IC02cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjE6ICcwcHggMTBweCAxM3B4IC02cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjI6ICcwcHggMTBweCAxNHB4IC02cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjM6ICcwcHggMTFweCAxNHB4IC03cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjQ6ICcwcHggMTFweCAxNXB4IC03cHggI3skc2hhZG93LWNvbG9yfSdcbiAgKTtcbn1cblxuQGZ1bmN0aW9uIF9nZXQtcGVudW1icmEtbWFwKCRjb2xvciwgJG9wYWNpdHkpIHtcbiAgJHNoYWRvdy1jb2xvcjogaWYodHlwZS1vZigkY29sb3IpID09IGNvbG9yLCByZ2JhKCRjb2xvciwgJG9wYWNpdHkgKiAwLjE0KSwgJGNvbG9yKTtcblxuICBAcmV0dXJuIChcbiAgICAwOiAnMHB4IDBweCAwcHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE6ICcwcHggMXB4IDFweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjogJzBweCAycHggMnB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAzOiAnMHB4IDNweCA0cHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDQ6ICcwcHggNHB4IDVweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNTogJzBweCA1cHggOHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA2OiAnMHB4IDZweCAxMHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA3OiAnMHB4IDdweCAxMHB4IDFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA4OiAnMHB4IDhweCAxMHB4IDFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA5OiAnMHB4IDlweCAxMnB4IDFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMDogJzBweCAxMHB4IDE0cHggMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDExOiAnMHB4IDExcHggMTVweCAxcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTI6ICcwcHggMTJweCAxN3B4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMzogJzBweCAxM3B4IDE5cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE0OiAnMHB4IDE0cHggMjFweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTU6ICcwcHggMTVweCAyMnB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNjogJzBweCAxNnB4IDI0cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE3OiAnMHB4IDE3cHggMjZweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTg6ICcwcHggMThweCAyOHB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxOTogJzBweCAxOXB4IDI5cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIwOiAnMHB4IDIwcHggMzFweCAzcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjE6ICcwcHggMjFweCAzM3B4IDNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMjogJzBweCAyMnB4IDM1cHggM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIzOiAnMHB4IDIzcHggMzZweCAzcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjQ6ICcwcHggMjRweCAzOHB4IDNweCAjeyRzaGFkb3ctY29sb3J9J1xuICApO1xufVxuXG5AZnVuY3Rpb24gX2dldC1hbWJpZW50LW1hcCgkY29sb3IsICRvcGFjaXR5KSB7XG4gICRzaGFkb3ctY29sb3I6IGlmKHR5cGUtb2YoJGNvbG9yKSA9PSBjb2xvciwgcmdiYSgkY29sb3IsICRvcGFjaXR5ICogMC4xMiksICRjb2xvcik7XG5cbiAgQHJldHVybiAoXG4gICAgMDogJzBweCAwcHggMHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxOiAnMHB4IDFweCAzcHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDI6ICcwcHggMXB4IDVweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMzogJzBweCAxcHggOHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA0OiAnMHB4IDFweCAxMHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA1OiAnMHB4IDFweCAxNHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA2OiAnMHB4IDFweCAxOHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA3OiAnMHB4IDJweCAxNnB4IDFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA4OiAnMHB4IDNweCAxNHB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA5OiAnMHB4IDNweCAxNnB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMDogJzBweCA0cHggMThweCAzcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTE6ICcwcHggNHB4IDIwcHggM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEyOiAnMHB4IDVweCAyMnB4IDRweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMzogJzBweCA1cHggMjRweCA0cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTQ6ICcwcHggNXB4IDI2cHggNHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE1OiAnMHB4IDZweCAyOHB4IDVweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNjogJzBweCA2cHggMzBweCA1cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTc6ICcwcHggNnB4IDMycHggNXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE4OiAnMHB4IDdweCAzNHB4IDZweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxOTogJzBweCA3cHggMzZweCA2cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjA6ICcwcHggOHB4IDM4cHggN3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIxOiAnMHB4IDhweCA0MHB4IDdweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMjogJzBweCA4cHggNDJweCA3cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjM6ICcwcHggOXB4IDQ0cHggOHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDI0OiAnMHB4IDlweCA0NnB4IDhweCAjeyRzaGFkb3ctY29sb3J9J1xuICApO1xufVxuXG4vLyBUaGUgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgZWxldmF0aW9uIHRyYW5zaXRpb25zLlxuJG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi1kdXJhdGlvbjogMjgwbXMgIWRlZmF1bHQ7XG5cbi8vIFRoZSBkZWZhdWx0IGVhc2luZyB2YWx1ZSBmb3IgZWxldmF0aW9uIHRyYW5zaXRpb25zLlxuJG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ICRtYXQtZmFzdC1vdXQtc2xvdy1pbi10aW1pbmctZnVuY3Rpb247XG5cbi8vIFRoZSBkZWZhdWx0IGNvbG9yIGZvciBlbGV2YXRpb24gc2hhZG93cy5cbiRtYXQtZWxldmF0aW9uLWNvbG9yOiBibGFjayAhZGVmYXVsdDtcblxuLy8gVGhlIGRlZmF1bHQgb3BhY2l0eSBzY2FsaW5nIHZhbHVlIGZvciBlbGV2YXRpb24gc2hhZG93cy5cbiRtYXQtZWxldmF0aW9uLW9wYWNpdHk6IDEgIWRlZmF1bHQ7XG5cbi8vIFByZWZpeCBmb3IgZWxldmF0aW9uLXJlbGF0ZWQgc2VsZWN0b3JzLlxuJF9tYXQtZWxldmF0aW9uLXByZWZpeDogJ21hdC1lbGV2YXRpb24teic7XG5cbi8vIEFwcGxpZXMgdGhlIGNvcnJlY3QgY3NzIHJ1bGVzIHRvIGFuIGVsZW1lbnQgdG8gZ2l2ZSBpdCB0aGUgZWxldmF0aW9uIHNwZWNpZmllZCBieSAkelZhbHVlLlxuLy8gVGhlICR6VmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDI0LlxuQG1peGluIG1hdC1lbGV2YXRpb24oJHpWYWx1ZSwgJGNvbG9yOiAkbWF0LWVsZXZhdGlvbi1jb2xvciwgJG9wYWNpdHk6ICRtYXQtZWxldmF0aW9uLW9wYWNpdHkpIHtcbiAgQGlmIHR5cGUtb2YoJHpWYWx1ZSkgIT0gbnVtYmVyIG9yIG5vdCB1bml0bGVzcygkelZhbHVlKSB7XG4gICAgQGVycm9yICckelZhbHVlIG11c3QgYmUgYSB1bml0bGVzcyBudW1iZXInO1xuICB9XG4gIEBpZiAkelZhbHVlIDwgMCBvciAkelZhbHVlID4gMjQge1xuICAgIEBlcnJvciAnJHpWYWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjQnO1xuICB9XG5cbiAgYm94LXNoYWRvdzogI3ttYXAtZ2V0KF9nZXQtdW1icmEtbWFwKCRjb2xvciwgJG9wYWNpdHkpLCAkelZhbHVlKX0sXG4gICAgICAgICAgICAgICN7bWFwLWdldChfZ2V0LXBlbnVtYnJhLW1hcCgkY29sb3IsICRvcGFjaXR5KSwgJHpWYWx1ZSl9LFxuICAgICAgICAgICAgICAje21hcC1nZXQoX2dldC1hbWJpZW50LW1hcCgkY29sb3IsICRvcGFjaXR5KSwgJHpWYWx1ZSl9O1xufVxuXG5AbWl4aW4gX21hdC10aGVtZS1lbGV2YXRpb24oJHpWYWx1ZSwgJHRoZW1lLCAkb3BhY2l0eTogJG1hdC1lbGV2YXRpb24tb3BhY2l0eSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkZWxldmF0aW9uLWNvbG9yOiBtYXAtZ2V0KCRmb3JlZ3JvdW5kLCBlbGV2YXRpb24pO1xuICAkZWxldmF0aW9uLWNvbG9yLW9yLWRlZmF1bHQ6IGlmKCRlbGV2YXRpb24tY29sb3IgPT0gbnVsbCwgJG1hdC1lbGV2YXRpb24tY29sb3IsICRlbGV2YXRpb24tY29sb3IpO1xuXG4gIEBpbmNsdWRlIG1hdC1lbGV2YXRpb24oJHpWYWx1ZSwgJGVsZXZhdGlvbi1jb2xvci1vci1kZWZhdWx0LCAkb3BhY2l0eSk7XG59XG5cbi8vIEFwcGxpZXMgdGhlIGVsZXZhdGlvbiB0byBhbiBlbGVtZW50IGluIGEgbWFubmVyIHRoYXQgYWxsb3dzXG4vLyBjb25zdW1lcnMgdG8gb3ZlcnJpZGUgaXQgdmlhIHRoZSBNYXRlcmlhbCBlbGV2YXRpb24gY2xhc3Nlcy5cbkBtaXhpbiBtYXQtb3ZlcnJpZGFibGUtZWxldmF0aW9uKFxuICAgICR6VmFsdWUsXG4gICAgJGNvbG9yOiAkbWF0LWVsZXZhdGlvbi1jb2xvcixcbiAgICAkb3BhY2l0eTogJG1hdC1lbGV2YXRpb24tb3BhY2l0eSkge1xuICAmOm5vdChbY2xhc3MqPScjeyRfbWF0LWVsZXZhdGlvbi1wcmVmaXh9J10pIHtcbiAgICBAaW5jbHVkZSBtYXQtZWxldmF0aW9uKCR6VmFsdWUsICRjb2xvciwgJG9wYWNpdHkpO1xuICB9XG59XG5cbkBtaXhpbiBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigkelZhbHVlLCAkdGhlbWUsICRvcGFjaXR5OiAkbWF0LWVsZXZhdGlvbi1vcGFjaXR5KSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRlbGV2YXRpb24tY29sb3I6IG1hcC1nZXQoJGZvcmVncm91bmQsIGVsZXZhdGlvbik7XG4gICRlbGV2YXRpb24tY29sb3Itb3ItZGVmYXVsdDogaWYoJGVsZXZhdGlvbi1jb2xvciA9PSBudWxsLCAkbWF0LWVsZXZhdGlvbi1jb2xvciwgJGVsZXZhdGlvbi1jb2xvcik7XG5cbiAgQGluY2x1ZGUgbWF0LW92ZXJyaWRhYmxlLWVsZXZhdGlvbigkelZhbHVlLCAkZWxldmF0aW9uLWNvbG9yLW9yLWRlZmF1bHQsICRvcGFjaXR5KTtcbn1cblxuLy8gUmV0dXJucyBhIHN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBmb3IgYSB0cmFuc2l0aW9uIHByb3BlcnR5IGZvciBlbGV2YXRpb24uXG4vLyBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgaXMgdXNlZnVsIGluIHNpdHVhdGlvbnMgd2hlcmUgYSBjb21wb25lbnQgbmVlZHMgdG8gdHJhbnNpdGlvblxuLy8gbW9yZSB0aGFuIG9uZSBwcm9wZXJ0eS5cbi8vXG4vLyAuZm9vIHtcbi8vICAgdHJhbnNpdGlvbjogbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLXByb3BlcnR5LXZhbHVlKCksIG9wYWNpdHkgMTAwbXMgZWFzZTtcbi8vIH1cbkBmdW5jdGlvbiBtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tcHJvcGVydHktdmFsdWUoXG4gICAgJGR1cmF0aW9uOiAkbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLWR1cmF0aW9uLFxuICAgICRlYXNpbmc6ICRtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSB7XG4gIEByZXR1cm4gYm94LXNoYWRvdyAjeyRkdXJhdGlvbn0gI3skZWFzaW5nfTtcbn1cblxuLy8gQXBwbGllcyB0aGUgY29ycmVjdCBjc3MgcnVsZXMgbmVlZGVkIHRvIGhhdmUgYW4gZWxlbWVudCB0cmFuc2l0aW9uIGJldHdlZW4gZWxldmF0aW9ucy5cbi8vIFRoaXMgbWl4aW4gc2hvdWxkIGJlIGFwcGxpZWQgdG8gZWxlbWVudHMgd2hvc2UgZWxldmF0aW9uIHZhbHVlcyB3aWxsIGNoYW5nZSBkZXBlbmRpbmcgb24gdGhlaXJcbi8vIGNvbnRleHQgKGUuZy4gd2hlbiBhY3RpdmUgb3IgZGlzYWJsZWQpLlxuLy9cbi8vIE5PVEUodHJhdmlza2F1Zm1hbik6IEJvdGggdGhpcyBtaXhpbiBhbmQgdGhlIGFib3ZlIGZ1bmN0aW9uIHVzZSBkZWZhdWx0IHBhcmFtZXRlcnMgc28gdGhleSBjYW5cbi8vIGJlIHVzZWQgaW4gdGhlIHNhbWUgd2F5IGJ5IGNsaWVudHMuXG5AbWl4aW4gbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uKFxuICAgICRkdXJhdGlvbjogJG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi1kdXJhdGlvbixcbiAgICAkZWFzaW5nOiAkbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikge1xuICB0cmFuc2l0aW9uOiBtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tcHJvcGVydHktdmFsdWUoJGR1cmF0aW9uLCAkZWFzaW5nKTtcbn1cblxuLy8gQ29sb3IgcGFsZXR0ZXMgZnJvbSB0aGUgTWF0ZXJpYWwgRGVzaWduIHNwZWMuXG4vLyBTZWUgaHR0cHM6Ly9tYXRlcmlhbC5pby9kZXNpZ24vY29sb3IvXG4vL1xuLy8gQ29udHJhc3QgY29sb3JzIGFyZSBoYXJkLWNvZGVkIGJlY2F1c2UgaXQgaXMgdG9vIGRpZmZpY3VsdCAocHJvYmFibHkgaW1wb3NzaWJsZSkgdG9cbi8vIGNhbGN1bGF0ZSB0aGVtLiBUaGVzZSBjb250cmFzdCBjb2xvcnMgYXJlIHB1bGxlZCBmcm9tIHRoZSBwdWJsaWMgTWF0ZXJpYWwgRGVzaWduIHNwZWMgc3dhdGNoZXMuXG4vLyBXaGlsZSB0aGUgY29udHJhc3QgY29sb3JzIGluIHRoZSBzcGVjIGFyZSBub3QgcHJlc2NyaXB0aXZlLCB3ZSB1c2UgdGhlbSBmb3IgY29udmVuaWVuY2UuXG5cblxuLy8gQGRlcHJlY2F0ZWQgcmVuYW1lZCB0byAkZGFyay1wcmltYXJ5LXRleHQuXG4vLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wXG4kYmxhY2stODctb3BhY2l0eTogcmdiYShibGFjaywgMC44Nyk7XG4vLyBAZGVwcmVjYXRlZCByZW5hbWVkIHRvICRsaWdodC1wcmltYXJ5LXRleHQuXG4vLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wXG4kd2hpdGUtODctb3BhY2l0eTogcmdiYSh3aGl0ZSwgMC44Nyk7XG4vLyBAZGVwcmVjYXRlZCB1c2UgJGRhcmstW3NlY29uZGFyeS10ZXh0LGRpc2FibGVkLXRleHQsZGl2aWRlcnMsZm9jdXNlZF0gaW5zdGVhZC5cbi8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjBcbiRibGFjay0xMi1vcGFjaXR5OiByZ2JhKGJsYWNrLCAwLjEyKTtcbi8vIEBkZXByZWNhdGVkIHVzZSAkbGlnaHQtW3NlY29uZGFyeS10ZXh0LGRpc2FibGVkLXRleHQsZGl2aWRlcnMsZm9jdXNlZF0gaW5zdGVhZC5cbi8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjBcbiR3aGl0ZS0xMi1vcGFjaXR5OiByZ2JhKHdoaXRlLCAwLjEyKTtcbi8vIEBkZXByZWNhdGVkIHVzZSAkZGFyay1bc2Vjb25kYXJ5LXRleHQsZGlzYWJsZWQtdGV4dCxkaXZpZGVycyxmb2N1c2VkXSBpbnN0ZWFkLlxuLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMFxuJGJsYWNrLTYtb3BhY2l0eTogcmdiYShibGFjaywgMC4wNik7XG4vLyBAZGVwcmVjYXRlZCB1c2UgJGxpZ2h0LVtzZWNvbmRhcnktdGV4dCxkaXNhYmxlZC10ZXh0LGRpdmlkZXJzLGZvY3VzZWRdIGluc3RlYWQuXG4vLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wXG4kd2hpdGUtNi1vcGFjaXR5OiByZ2JhKHdoaXRlLCAwLjA2KTtcblxuJGRhcmstcHJpbWFyeS10ZXh0OiByZ2JhKGJsYWNrLCAwLjg3KTtcbiRkYXJrLXNlY29uZGFyeS10ZXh0OiByZ2JhKGJsYWNrLCAwLjU0KTtcbiRkYXJrLWRpc2FibGVkLXRleHQ6IHJnYmEoYmxhY2ssIDAuMzgpO1xuJGRhcmstZGl2aWRlcnM6IHJnYmEoYmxhY2ssIDAuMTIpO1xuJGRhcmstZm9jdXNlZDogcmdiYShibGFjaywgMC4xMik7XG4kbGlnaHQtcHJpbWFyeS10ZXh0OiB3aGl0ZTtcbiRsaWdodC1zZWNvbmRhcnktdGV4dDogcmdiYSh3aGl0ZSwgMC43KTtcbiRsaWdodC1kaXNhYmxlZC10ZXh0OiByZ2JhKHdoaXRlLCAwLjUpO1xuJGxpZ2h0LWRpdmlkZXJzOiByZ2JhKHdoaXRlLCAwLjEyKTtcbiRsaWdodC1mb2N1c2VkOiByZ2JhKHdoaXRlLCAwLjEyKTtcblxuJG1hdC1yZWQ6IChcbiAgNTA6ICNmZmViZWUsXG4gIDEwMDogI2ZmY2RkMixcbiAgMjAwOiAjZWY5YTlhLFxuICAzMDA6ICNlNTczNzMsXG4gIDQwMDogI2VmNTM1MCxcbiAgNTAwOiAjZjQ0MzM2LFxuICA2MDA6ICNlNTM5MzUsXG4gIDcwMDogI2QzMmYyZixcbiAgODAwOiAjYzYyODI4LFxuICA5MDA6ICNiNzFjMWMsXG4gIEExMDA6ICNmZjhhODAsXG4gIEEyMDA6ICNmZjUyNTIsXG4gIEE0MDA6ICNmZjE3NDQsXG4gIEE3MDA6ICNkNTAwMDAsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1waW5rOiAoXG4gIDUwOiAjZmNlNGVjLFxuICAxMDA6ICNmOGJiZDAsXG4gIDIwMDogI2Y0OGZiMSxcbiAgMzAwOiAjZjA2MjkyLFxuICA0MDA6ICNlYzQwN2EsXG4gIDUwMDogI2U5MWU2MyxcbiAgNjAwOiAjZDgxYjYwLFxuICA3MDA6ICNjMjE4NWIsXG4gIDgwMDogI2FkMTQ1NyxcbiAgOTAwOiAjODgwZTRmLFxuICBBMTAwOiAjZmY4MGFiLFxuICBBMjAwOiAjZmY0MDgxLFxuICBBNDAwOiAjZjUwMDU3LFxuICBBNzAwOiAjYzUxMTYyLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtcHVycGxlOiAoXG4gIDUwOiAjZjNlNWY1LFxuICAxMDA6ICNlMWJlZTcsXG4gIDIwMDogI2NlOTNkOCxcbiAgMzAwOiAjYmE2OGM4LFxuICA0MDA6ICNhYjQ3YmMsXG4gIDUwMDogIzljMjdiMCxcbiAgNjAwOiAjOGUyNGFhLFxuICA3MDA6ICM3YjFmYTIsXG4gIDgwMDogIzZhMWI5YSxcbiAgOTAwOiAjNGExNDhjLFxuICBBMTAwOiAjZWE4MGZjLFxuICBBMjAwOiAjZTA0MGZiLFxuICBBNDAwOiAjZDUwMGY5LFxuICBBNzAwOiAjYWEwMGZmLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1kZWVwLXB1cnBsZTogKFxuICA1MDogI2VkZTdmNixcbiAgMTAwOiAjZDFjNGU5LFxuICAyMDA6ICNiMzlkZGIsXG4gIDMwMDogIzk1NzVjZCxcbiAgNDAwOiAjN2U1N2MyLFxuICA1MDA6ICM2NzNhYjcsXG4gIDYwMDogIzVlMzViMSxcbiAgNzAwOiAjNTEyZGE4LFxuICA4MDA6ICM0NTI3YTAsXG4gIDkwMDogIzMxMWI5MixcbiAgQTEwMDogI2IzODhmZixcbiAgQTIwMDogIzdjNGRmZixcbiAgQTQwMDogIzY1MWZmZixcbiAgQTcwMDogIzYyMDBlYSxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtaW5kaWdvOiAoXG4gIDUwOiAjZThlYWY2LFxuICAxMDA6ICNjNWNhZTksXG4gIDIwMDogIzlmYThkYSxcbiAgMzAwOiAjNzk4NmNiLFxuICA0MDA6ICM1YzZiYzAsXG4gIDUwMDogIzNmNTFiNSxcbiAgNjAwOiAjMzk0OWFiLFxuICA3MDA6ICMzMDNmOWYsXG4gIDgwMDogIzI4MzU5MyxcbiAgOTAwOiAjMWEyMzdlLFxuICBBMTAwOiAjOGM5ZWZmLFxuICBBMjAwOiAjNTM2ZGZlLFxuICBBNDAwOiAjM2Q1YWZlLFxuICBBNzAwOiAjMzA0ZmZlLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1ibHVlOiAoXG4gIDUwOiAjZTNmMmZkLFxuICAxMDA6ICNiYmRlZmIsXG4gIDIwMDogIzkwY2FmOSxcbiAgMzAwOiAjNjRiNWY2LFxuICA0MDA6ICM0MmE1ZjUsXG4gIDUwMDogIzIxOTZmMyxcbiAgNjAwOiAjMWU4OGU1LFxuICA3MDA6ICMxOTc2ZDIsXG4gIDgwMDogIzE1NjVjMCxcbiAgOTAwOiAjMGQ0N2ExLFxuICBBMTAwOiAjODJiMWZmLFxuICBBMjAwOiAjNDQ4YWZmLFxuICBBNDAwOiAjMjk3OWZmLFxuICBBNzAwOiAjMjk2MmZmLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtbGlnaHQtYmx1ZTogKFxuICA1MDogI2UxZjVmZSxcbiAgMTAwOiAjYjNlNWZjLFxuICAyMDA6ICM4MWQ0ZmEsXG4gIDMwMDogIzRmYzNmNyxcbiAgNDAwOiAjMjliNmY2LFxuICA1MDA6ICMwM2E5ZjQsXG4gIDYwMDogIzAzOWJlNSxcbiAgNzAwOiAjMDI4OGQxLFxuICA4MDA6ICMwMjc3YmQsXG4gIDkwMDogIzAxNTc5YixcbiAgQTEwMDogIzgwZDhmZixcbiAgQTIwMDogIzQwYzRmZixcbiAgQTQwMDogIzAwYjBmZixcbiAgQTcwMDogIzAwOTFlYSxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1jeWFuOiAoXG4gIDUwOiAjZTBmN2ZhLFxuICAxMDA6ICNiMmViZjIsXG4gIDIwMDogIzgwZGVlYSxcbiAgMzAwOiAjNGRkMGUxLFxuICA0MDA6ICMyNmM2ZGEsXG4gIDUwMDogIzAwYmNkNCxcbiAgNjAwOiAjMDBhY2MxLFxuICA3MDA6ICMwMDk3YTcsXG4gIDgwMDogIzAwODM4ZixcbiAgOTAwOiAjMDA2MDY0LFxuICBBMTAwOiAjODRmZmZmLFxuICBBMjAwOiAjMThmZmZmLFxuICBBNDAwOiAjMDBlNWZmLFxuICBBNzAwOiAjMDBiOGQ0LFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtdGVhbDogKFxuICA1MDogI2UwZjJmMSxcbiAgMTAwOiAjYjJkZmRiLFxuICAyMDA6ICM4MGNiYzQsXG4gIDMwMDogIzRkYjZhYyxcbiAgNDAwOiAjMjZhNjlhLFxuICA1MDA6ICMwMDk2ODgsXG4gIDYwMDogIzAwODk3YixcbiAgNzAwOiAjMDA3OTZiLFxuICA4MDA6ICMwMDY5NWMsXG4gIDkwMDogIzAwNGQ0MCxcbiAgQTEwMDogI2E3ZmZlYixcbiAgQTIwMDogIzY0ZmZkYSxcbiAgQTQwMDogIzFkZTliNixcbiAgQTcwMDogIzAwYmZhNSxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWdyZWVuOiAoXG4gIDUwOiAjZThmNWU5LFxuICAxMDA6ICNjOGU2YzksXG4gIDIwMDogI2E1ZDZhNyxcbiAgMzAwOiAjODFjNzg0LFxuICA0MDA6ICM2NmJiNmEsXG4gIDUwMDogIzRjYWY1MCxcbiAgNjAwOiAjNDNhMDQ3LFxuICA3MDA6ICMzODhlM2MsXG4gIDgwMDogIzJlN2QzMixcbiAgOTAwOiAjMWI1ZTIwLFxuICBBMTAwOiAjYjlmNmNhLFxuICBBMjAwOiAjNjlmMGFlLFxuICBBNDAwOiAjMDBlNjc2LFxuICBBNzAwOiAjMDBjODUzLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1saWdodC1ncmVlbjogKFxuICA1MDogI2YxZjhlOSxcbiAgMTAwOiAjZGNlZGM4LFxuICAyMDA6ICNjNWUxYTUsXG4gIDMwMDogI2FlZDU4MSxcbiAgNDAwOiAjOWNjYzY1LFxuICA1MDA6ICM4YmMzNGEsXG4gIDYwMDogIzdjYjM0MixcbiAgNzAwOiAjNjg5ZjM4LFxuICA4MDA6ICM1NThiMmYsXG4gIDkwMDogIzMzNjkxZSxcbiAgQTEwMDogI2NjZmY5MCxcbiAgQTIwMDogI2IyZmY1OSxcbiAgQTQwMDogIzc2ZmYwMyxcbiAgQTcwMDogIzY0ZGQxNyxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1saW1lOiAoXG4gIDUwOiAjZjlmYmU3LFxuICAxMDA6ICNmMGY0YzMsXG4gIDIwMDogI2U2ZWU5YyxcbiAgMzAwOiAjZGNlNzc1LFxuICA0MDA6ICNkNGUxNTcsXG4gIDUwMDogI2NkZGMzOSxcbiAgNjAwOiAjYzBjYTMzLFxuICA3MDA6ICNhZmI0MmIsXG4gIDgwMDogIzllOWQyNCxcbiAgOTAwOiAjODI3NzE3LFxuICBBMTAwOiAjZjRmZjgxLFxuICBBMjAwOiAjZWVmZjQxLFxuICBBNDAwOiAjYzZmZjAwLFxuICBBNzAwOiAjYWVlYTAwLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC15ZWxsb3c6IChcbiAgNTA6ICNmZmZkZTcsXG4gIDEwMDogI2ZmZjljNCxcbiAgMjAwOiAjZmZmNTlkLFxuICAzMDA6ICNmZmYxNzYsXG4gIDQwMDogI2ZmZWU1OCxcbiAgNTAwOiAjZmZlYjNiLFxuICA2MDA6ICNmZGQ4MzUsXG4gIDcwMDogI2ZiYzAyZCxcbiAgODAwOiAjZjlhODI1LFxuICA5MDA6ICNmNTdmMTcsXG4gIEExMDA6ICNmZmZmOGQsXG4gIEEyMDA6ICNmZmZmMDAsXG4gIEE0MDA6ICNmZmVhMDAsXG4gIEE3MDA6ICNmZmQ2MDAsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtYW1iZXI6IChcbiAgNTA6ICNmZmY4ZTEsXG4gIDEwMDogI2ZmZWNiMyxcbiAgMjAwOiAjZmZlMDgyLFxuICAzMDA6ICNmZmQ1NGYsXG4gIDQwMDogI2ZmY2EyOCxcbiAgNTAwOiAjZmZjMTA3LFxuICA2MDA6ICNmZmIzMDAsXG4gIDcwMDogI2ZmYTAwMCxcbiAgODAwOiAjZmY4ZjAwLFxuICA5MDA6ICNmZjZmMDAsXG4gIEExMDA6ICNmZmU1N2YsXG4gIEEyMDA6ICNmZmQ3NDAsXG4gIEE0MDA6ICNmZmM0MDAsXG4gIEE3MDA6ICNmZmFiMDAsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtb3JhbmdlOiAoXG4gIDUwOiAjZmZmM2UwLFxuICAxMDA6ICNmZmUwYjIsXG4gIDIwMDogI2ZmY2M4MCxcbiAgMzAwOiAjZmZiNzRkLFxuICA0MDA6ICNmZmE3MjYsXG4gIDUwMDogI2ZmOTgwMCxcbiAgNjAwOiAjZmI4YzAwLFxuICA3MDA6ICNmNTdjMDAsXG4gIDgwMDogI2VmNmMwMCxcbiAgOTAwOiAjZTY1MTAwLFxuICBBMTAwOiAjZmZkMTgwLFxuICBBMjAwOiAjZmZhYjQwLFxuICBBNDAwOiAjZmY5MTAwLFxuICBBNzAwOiAjZmY2ZDAwLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiBibGFjayxcbiAgKVxuKTtcblxuJG1hdC1kZWVwLW9yYW5nZTogKFxuICA1MDogI2ZiZTllNyxcbiAgMTAwOiAjZmZjY2JjLFxuICAyMDA6ICNmZmFiOTEsXG4gIDMwMDogI2ZmOGE2NSxcbiAgNDAwOiAjZmY3MDQzLFxuICA1MDA6ICNmZjU3MjIsXG4gIDYwMDogI2Y0NTExZSxcbiAgNzAwOiAjZTY0YTE5LFxuICA4MDA6ICNkODQzMTUsXG4gIDkwMDogI2JmMzYwYyxcbiAgQTEwMDogI2ZmOWU4MCxcbiAgQTIwMDogI2ZmNmU0MCxcbiAgQTQwMDogI2ZmM2QwMCxcbiAgQTcwMDogI2RkMmMwMCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtYnJvd246IChcbiAgNTA6ICNlZmViZTksXG4gIDEwMDogI2Q3Y2NjOCxcbiAgMjAwOiAjYmNhYWE0LFxuICAzMDA6ICNhMTg4N2YsXG4gIDQwMDogIzhkNmU2MyxcbiAgNTAwOiAjNzk1NTQ4LFxuICA2MDA6ICM2ZDRjNDEsXG4gIDcwMDogIzVkNDAzNyxcbiAgODAwOiAjNGUzNDJlLFxuICA5MDA6ICMzZTI3MjMsXG4gIEExMDA6ICNkN2NjYzgsXG4gIEEyMDA6ICNiY2FhYTQsXG4gIEE0MDA6ICM4ZDZlNjMsXG4gIEE3MDA6ICM1ZDQwMzcsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtZ3JleTogKFxuICA1MDogI2ZhZmFmYSxcbiAgMTAwOiAjZjVmNWY1LFxuICAyMDA6ICNlZWVlZWUsXG4gIDMwMDogI2UwZTBlMCxcbiAgNDAwOiAjYmRiZGJkLFxuICA1MDA6ICM5ZTllOWUsXG4gIDYwMDogIzc1NzU3NSxcbiAgNzAwOiAjNjE2MTYxLFxuICA4MDA6ICM0MjQyNDIsXG4gIDkwMDogIzIxMjEyMSxcbiAgQTEwMDogI2ZmZmZmZixcbiAgQTIwMDogI2VlZWVlZSxcbiAgQTQwMDogI2JkYmRiZCxcbiAgQTcwMDogIzYxNjE2MSxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4vLyBBbGlhcyBmb3IgYWx0ZXJuYXRlIHNwZWxsaW5nLlxuJG1hdC1ncmF5OiAkbWF0LWdyZXk7XG5cbiRtYXQtYmx1ZS1ncmV5OiAoXG4gIDUwOiAjZWNlZmYxLFxuICAxMDA6ICNjZmQ4ZGMsXG4gIDIwMDogI2IwYmVjNSxcbiAgMzAwOiAjOTBhNGFlLFxuICA0MDA6ICM3ODkwOWMsXG4gIDUwMDogIzYwN2Q4YixcbiAgNjAwOiAjNTQ2ZTdhLFxuICA3MDA6ICM0NTVhNjQsXG4gIDgwMDogIzM3NDc0ZixcbiAgOTAwOiAjMjYzMjM4LFxuICBBMTAwOiAjY2ZkOGRjLFxuICBBMjAwOiAjYjBiZWM1LFxuICBBNDAwOiAjNzg5MDljLFxuICBBNzAwOiAjNDU1YTY0LFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbi8vIEFsaWFzIGZvciBhbHRlcm5hdGUgc3BlbGxpbmcuXG4kbWF0LWJsdWUtZ3JheTogJG1hdC1ibHVlLWdyZXk7XG5cblxuLy8gQmFja2dyb3VuZCBwYWxldHRlIGZvciBsaWdodCB0aGVtZXMuXG4kbWF0LWxpZ2h0LXRoZW1lLWJhY2tncm91bmQ6IChcbiAgc3RhdHVzLWJhcjogbWFwX2dldCgkbWF0LWdyZXksIDMwMCksXG4gIGFwcC1iYXI6ICAgIG1hcF9nZXQoJG1hdC1ncmV5LCAxMDApLFxuICBiYWNrZ3JvdW5kOiBtYXBfZ2V0KCRtYXQtZ3JleSwgNTApLFxuICBob3ZlcjogICAgICByZ2JhKGJsYWNrLCAwLjA0KSwgLy8gVE9ETyhrYXJhKTogY2hlY2sgc3R5bGUgd2l0aCBNYXRlcmlhbCBEZXNpZ24gVVhcbiAgY2FyZDogICAgICAgd2hpdGUsXG4gIGRpYWxvZzogICAgIHdoaXRlLFxuICBkaXNhYmxlZC1idXR0b246IHJnYmEoYmxhY2ssIDAuMTIpLFxuICByYWlzZWQtYnV0dG9uOiB3aGl0ZSxcbiAgZm9jdXNlZC1idXR0b246ICRkYXJrLWZvY3VzZWQsXG4gIHNlbGVjdGVkLWJ1dHRvbjogbWFwX2dldCgkbWF0LWdyZXksIDMwMCksXG4gIHNlbGVjdGVkLWRpc2FibGVkLWJ1dHRvbjogbWFwX2dldCgkbWF0LWdyZXksIDQwMCksXG4gIGRpc2FibGVkLWJ1dHRvbi10b2dnbGU6IG1hcF9nZXQoJG1hdC1ncmV5LCAyMDApLFxuICB1bnNlbGVjdGVkLWNoaXA6IG1hcF9nZXQoJG1hdC1ncmV5LCAzMDApLFxuICBkaXNhYmxlZC1saXN0LW9wdGlvbjogbWFwX2dldCgkbWF0LWdyZXksIDIwMCksXG4gIHRvb2x0aXA6IG1hcF9nZXQoJG1hdC1ncmV5LCA3MDApLFxuKTtcblxuLy8gQmFja2dyb3VuZCBwYWxldHRlIGZvciBkYXJrIHRoZW1lcy5cbiRtYXQtZGFyay10aGVtZS1iYWNrZ3JvdW5kOiAoXG4gIHN0YXR1cy1iYXI6IGJsYWNrLFxuICBhcHAtYmFyOiAgICBtYXBfZ2V0KCRtYXQtZ3JleSwgOTAwKSxcbiAgYmFja2dyb3VuZDogIzMwMzAzMCxcbiAgaG92ZXI6ICAgICAgcmdiYSh3aGl0ZSwgMC4wNCksIC8vIFRPRE8oa2FyYSk6IGNoZWNrIHN0eWxlIHdpdGggTWF0ZXJpYWwgRGVzaWduIFVYXG4gIGNhcmQ6ICAgICAgIG1hcF9nZXQoJG1hdC1ncmV5LCA4MDApLFxuICBkaWFsb2c6ICAgICBtYXBfZ2V0KCRtYXQtZ3JleSwgODAwKSxcbiAgZGlzYWJsZWQtYnV0dG9uOiByZ2JhKHdoaXRlLCAwLjEyKSxcbiAgcmFpc2VkLWJ1dHRvbjogbWFwLWdldCgkbWF0LWdyZXksIDgwMCksXG4gIGZvY3VzZWQtYnV0dG9uOiAkbGlnaHQtZm9jdXNlZCxcbiAgc2VsZWN0ZWQtYnV0dG9uOiBtYXBfZ2V0KCRtYXQtZ3JleSwgOTAwKSxcbiAgc2VsZWN0ZWQtZGlzYWJsZWQtYnV0dG9uOiBtYXBfZ2V0KCRtYXQtZ3JleSwgODAwKSxcbiAgZGlzYWJsZWQtYnV0dG9uLXRvZ2dsZTogYmxhY2ssXG4gIHVuc2VsZWN0ZWQtY2hpcDogbWFwX2dldCgkbWF0LWdyZXksIDcwMCksXG4gIGRpc2FibGVkLWxpc3Qtb3B0aW9uOiBibGFjayxcbiAgdG9vbHRpcDogbWFwX2dldCgkbWF0LWdyZXksIDcwMCksXG4pO1xuXG4vLyBGb3JlZ3JvdW5kIHBhbGV0dGUgZm9yIGxpZ2h0IHRoZW1lcy5cbiRtYXQtbGlnaHQtdGhlbWUtZm9yZWdyb3VuZDogKFxuICBiYXNlOiAgICAgICAgICAgICAgYmxhY2ssXG4gIGRpdmlkZXI6ICAgICAgICAgICAkZGFyay1kaXZpZGVycyxcbiAgZGl2aWRlcnM6ICAgICAgICAgICRkYXJrLWRpdmlkZXJzLFxuICBkaXNhYmxlZDogICAgICAgICAgJGRhcmstZGlzYWJsZWQtdGV4dCxcbiAgZGlzYWJsZWQtYnV0dG9uOiAgIHJnYmEoYmxhY2ssIDAuMjYpLFxuICBkaXNhYmxlZC10ZXh0OiAgICAgJGRhcmstZGlzYWJsZWQtdGV4dCxcbiAgZWxldmF0aW9uOiAgICAgICAgIGJsYWNrLFxuICBoaW50LXRleHQ6ICAgICAgICAgJGRhcmstZGlzYWJsZWQtdGV4dCxcbiAgc2Vjb25kYXJ5LXRleHQ6ICAgICRkYXJrLXNlY29uZGFyeS10ZXh0LFxuICBpY29uOiAgICAgICAgICAgICAgcmdiYShibGFjaywgMC41NCksXG4gIGljb25zOiAgICAgICAgICAgICByZ2JhKGJsYWNrLCAwLjU0KSxcbiAgdGV4dDogICAgICAgICAgICAgIHJnYmEoYmxhY2ssIDAuODcpLFxuICBzbGlkZXItbWluOiAgICAgICAgcmdiYShibGFjaywgMC44NyksXG4gIHNsaWRlci1vZmY6ICAgICAgICByZ2JhKGJsYWNrLCAwLjI2KSxcbiAgc2xpZGVyLW9mZi1hY3RpdmU6IHJnYmEoYmxhY2ssIDAuMzgpLFxuKTtcblxuLy8gRm9yZWdyb3VuZCBwYWxldHRlIGZvciBkYXJrIHRoZW1lcy5cbiRtYXQtZGFyay10aGVtZS1mb3JlZ3JvdW5kOiAoXG4gIGJhc2U6ICAgICAgICAgICAgICB3aGl0ZSxcbiAgZGl2aWRlcjogICAgICAgICAgICRsaWdodC1kaXZpZGVycyxcbiAgZGl2aWRlcnM6ICAgICAgICAgICRsaWdodC1kaXZpZGVycyxcbiAgZGlzYWJsZWQ6ICAgICAgICAgICRsaWdodC1kaXNhYmxlZC10ZXh0LFxuICBkaXNhYmxlZC1idXR0b246ICAgcmdiYSh3aGl0ZSwgMC4zKSxcbiAgZGlzYWJsZWQtdGV4dDogICAgICRsaWdodC1kaXNhYmxlZC10ZXh0LFxuICBlbGV2YXRpb246ICAgICAgICAgYmxhY2ssXG4gIGhpbnQtdGV4dDogICAgICAgICAkbGlnaHQtZGlzYWJsZWQtdGV4dCxcbiAgc2Vjb25kYXJ5LXRleHQ6ICAgICRsaWdodC1zZWNvbmRhcnktdGV4dCxcbiAgaWNvbjogICAgICAgICAgICAgIHdoaXRlLFxuICBpY29uczogICAgICAgICAgICAgd2hpdGUsXG4gIHRleHQ6ICAgICAgICAgICAgICB3aGl0ZSxcbiAgc2xpZGVyLW1pbjogICAgICAgIHdoaXRlLFxuICBzbGlkZXItb2ZmOiAgICAgICAgcmdiYSh3aGl0ZSwgMC4zKSxcbiAgc2xpZGVyLW9mZi1hY3RpdmU6IHJnYmEod2hpdGUsIDAuMyksXG4pO1xuXG5cblxuLy8gRm9yIGEgZ2l2ZW4gaHVlIGluIGEgcGFsZXR0ZSwgcmV0dXJuIHRoZSBjb250cmFzdCBjb2xvciBmcm9tIHRoZSBtYXAgb2YgY29udHJhc3QgcGFsZXR0ZXMuXG4vLyBAcGFyYW0gJGNvbG9yLW1hcFxuLy8gQHBhcmFtICRodWVcbkBmdW5jdGlvbiBtYXQtY29udHJhc3QoJHBhbGV0dGUsICRodWUpIHtcbiAgQHJldHVybiBtYXAtZ2V0KG1hcC1nZXQoJHBhbGV0dGUsIGNvbnRyYXN0KSwgJGh1ZSk7XG59XG5cblxuLy8gQ3JlYXRlcyBhIG1hcCBvZiBodWVzIHRvIGNvbG9ycyBmb3IgYSB0aGVtZS4gVGhpcyBpcyB1c2VkIHRvIGRlZmluZSBhIHRoZW1lIHBhbGV0dGUgaW4gdGVybXNcbi8vIG9mIHRoZSBNYXRlcmlhbCBEZXNpZ24gaHVlcy5cbi8vIEBwYXJhbSAkY29sb3ItbWFwXG4vLyBAcGFyYW0gJHByaW1hcnlcbi8vIEBwYXJhbSAkbGlnaHRlclxuQGZ1bmN0aW9uIG1hdC1wYWxldHRlKCRiYXNlLXBhbGV0dGUsICRkZWZhdWx0OiA1MDAsICRsaWdodGVyOiAxMDAsICRkYXJrZXI6IDcwMCwgJHRleHQ6ICRkZWZhdWx0KSB7XG4gICRyZXN1bHQ6IG1hcF9tZXJnZSgkYmFzZS1wYWxldHRlLCAoXG4gICAgZGVmYXVsdDogbWFwLWdldCgkYmFzZS1wYWxldHRlLCAkZGVmYXVsdCksXG4gICAgbGlnaHRlcjogbWFwLWdldCgkYmFzZS1wYWxldHRlLCAkbGlnaHRlciksXG4gICAgZGFya2VyOiBtYXAtZ2V0KCRiYXNlLXBhbGV0dGUsICRkYXJrZXIpLFxuICAgIHRleHQ6IG1hcC1nZXQoJGJhc2UtcGFsZXR0ZSwgJHRleHQpLFxuXG4gICAgZGVmYXVsdC1jb250cmFzdDogbWF0LWNvbnRyYXN0KCRiYXNlLXBhbGV0dGUsICRkZWZhdWx0KSxcbiAgICBsaWdodGVyLWNvbnRyYXN0OiBtYXQtY29udHJhc3QoJGJhc2UtcGFsZXR0ZSwgJGxpZ2h0ZXIpLFxuICAgIGRhcmtlci1jb250cmFzdDogbWF0LWNvbnRyYXN0KCRiYXNlLXBhbGV0dGUsICRkYXJrZXIpXG4gICkpO1xuXG4gIC8vIEZvciBlYWNoIGh1ZSBpbiB0aGUgcGFsZXR0ZSwgYWRkIGEgXCItY29udHJhc3RcIiBjb2xvciB0byB0aGUgbWFwLlxuICBAZWFjaCAkaHVlLCAkY29sb3IgaW4gJGJhc2UtcGFsZXR0ZSB7XG4gICAgJHJlc3VsdDogbWFwX21lcmdlKCRyZXN1bHQsIChcbiAgICAgICcjeyRodWV9LWNvbnRyYXN0JzogbWF0LWNvbnRyYXN0KCRiYXNlLXBhbGV0dGUsICRodWUpXG4gICAgKSk7XG4gIH1cblxuICBAcmV0dXJuICRyZXN1bHQ7XG59XG5cblxuLy8gR2V0cyBhIGNvbG9yIGZyb20gYSB0aGVtZSBwYWxldHRlICh0aGUgb3V0cHV0IG9mIG1hdC1wYWxldHRlKS5cbi8vIFRoZSBodWUgY2FuIGJlIG9uZSBvZiB0aGUgc3RhbmRhcmQgdmFsdWVzICg1MDAsIEE0MDAsIGV0Yy4pLCBvbmUgb2YgdGhlIHRocmVlIHByZWNvbmZpZ3VyZWRcbi8vIGh1ZXMgKGRlZmF1bHQsIGxpZ2h0ZXIsIGRhcmtlciksIG9yIGFueSBvZiB0aGUgYWZvcmVtZW50aW9uZWQgcHJlZml4ZWQgd2l0aCBcIi1jb250cmFzdFwiLlxuLy9cbi8vIEBwYXJhbSAkY29sb3ItbWFwIFRoZSB0aGVtZSBwYWxldHRlIChvdXRwdXQgb2YgbWF0LXBhbGV0dGUpLlxuLy8gQHBhcmFtICRodWUgVGhlIGh1ZSBmcm9tIHRoZSBwYWxldHRlIHRvIHVzZS4gSWYgdGhpcyBpcyBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMSwgaXQgd2lsbFxuLy8gICAgIGJlIHRyZWF0ZWQgYXMgb3BhY2l0eS5cbi8vIEBwYXJhbSAkb3BhY2l0eSBUaGUgYWxwaGEgY2hhbm5lbCB2YWx1ZSBmb3IgdGhlIGNvbG9yLlxuQGZ1bmN0aW9uIG1hdC1jb2xvcigkcGFsZXR0ZSwgJGh1ZTogZGVmYXVsdCwgJG9wYWNpdHk6IG51bGwpIHtcbiAgLy8gSWYgaHVlS2V5IGlzIGEgbnVtYmVyIGJldHdlZW4gemVybyBhbmQgb25lLCB0aGVuIGl0IGFjdHVhbGx5IGNvbnRhaW5zIGFuXG4gIC8vIG9wYWNpdHkgdmFsdWUsIHNvIHJlY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlIGRlZmF1bHQgaHVlIGFuZCB0aGF0IGdpdmVuIG9wYWNpdHkuXG4gIEBpZiB0eXBlLW9mKCRodWUpID09IG51bWJlciBhbmQgJGh1ZSA+PSAwIGFuZCAkaHVlIDw9IDEge1xuICAgIEByZXR1cm4gbWF0LWNvbG9yKCRwYWxldHRlLCBkZWZhdWx0LCAkaHVlKTtcbiAgfVxuXG4gICRjb2xvcjogbWFwLWdldCgkcGFsZXR0ZSwgJGh1ZSk7XG5cbiAgQGlmICh0eXBlLW9mKCRjb2xvcikgIT0gY29sb3IpIHtcbiAgICAvLyBJZiB0aGUgJGNvbG9yIHJlc29sdmVkIHRvIHNvbWV0aGluZyBkaWZmZXJlbnQgZnJvbSBhIGNvbG9yIChlLmcuIGEgQ1NTIHZhcmlhYmxlKSxcbiAgICAvLyB3ZSBjYW4ndCBhcHBseSB0aGUgb3BhY2l0eSBhbnl3YXkgc28gd2UgcmV0dXJuIHRoZSB2YWx1ZSBhcyBpcywgb3RoZXJ3aXNlIFNhc3MgY2FuXG4gICAgLy8gdGhyb3cgYW4gZXJyb3Igb3Igb3V0cHV0IHNvbWV0aGluZyBpbnZhbGlkLlxuICAgIEByZXR1cm4gJGNvbG9yO1xuICB9XG5cbiAgQHJldHVybiByZ2JhKCRjb2xvciwgaWYoJG9wYWNpdHkgPT0gbnVsbCwgb3BhY2l0eSgkY29sb3IpLCAkb3BhY2l0eSkpO1xufVxuXG5cbi8vIENyZWF0ZXMgYSBjb250YWluZXIgb2JqZWN0IGZvciBhIGxpZ2h0IHRoZW1lIHRvIGJlIGdpdmVuIHRvIGluZGl2aWR1YWwgY29tcG9uZW50IHRoZW1lIG1peGlucy5cbkBmdW5jdGlvbiBtYXQtbGlnaHQtdGhlbWUoJHByaW1hcnksICRhY2NlbnQsICR3YXJuOiBtYXQtcGFsZXR0ZSgkbWF0LXJlZCkpIHtcbiAgQHJldHVybiAoXG4gICAgcHJpbWFyeTogJHByaW1hcnksXG4gICAgYWNjZW50OiAkYWNjZW50LFxuICAgIHdhcm46ICR3YXJuLFxuICAgIGlzLWRhcms6IGZhbHNlLFxuICAgIGZvcmVncm91bmQ6ICRtYXQtbGlnaHQtdGhlbWUtZm9yZWdyb3VuZCxcbiAgICBiYWNrZ3JvdW5kOiAkbWF0LWxpZ2h0LXRoZW1lLWJhY2tncm91bmQsXG4gICk7XG59XG5cblxuLy8gQ3JlYXRlcyBhIGNvbnRhaW5lciBvYmplY3QgZm9yIGEgZGFyayB0aGVtZSB0byBiZSBnaXZlbiB0byBpbmRpdmlkdWFsIGNvbXBvbmVudCB0aGVtZSBtaXhpbnMuXG5AZnVuY3Rpb24gbWF0LWRhcmstdGhlbWUoJHByaW1hcnksICRhY2NlbnQsICR3YXJuOiBtYXQtcGFsZXR0ZSgkbWF0LXJlZCkpIHtcbiAgQHJldHVybiAoXG4gICAgcHJpbWFyeTogJHByaW1hcnksXG4gICAgYWNjZW50OiAkYWNjZW50LFxuICAgIHdhcm46ICR3YXJuLFxuICAgIGlzLWRhcms6IHRydWUsXG4gICAgZm9yZWdyb3VuZDogJG1hdC1kYXJrLXRoZW1lLWZvcmVncm91bmQsXG4gICAgYmFja2dyb3VuZDogJG1hdC1kYXJrLXRoZW1lLWJhY2tncm91bmQsXG4gICk7XG59XG5cblxuXG4kbWF0LXJpcHBsZS1jb2xvci1vcGFjaXR5OiAwLjE7XG5cbkBtaXhpbiBtYXQtcmlwcGxlKCkge1xuXG4gIC8vIFRoZSBob3N0IGVsZW1lbnQgb2YgYW4gbWF0LXJpcHBsZSBkaXJlY3RpdmUgc2hvdWxkIGFsd2F5cyBoYXZlIGEgcG9zaXRpb24gb2YgXCJhYnNvbHV0ZVwiIG9yXG4gIC8vIFwicmVsYXRpdmVcIiBzbyB0aGF0IHRoZSByaXBwbGVzIGluc2lkZSBhcmUgY29ycmVjdGx5IHBvc2l0aW9uZWQgcmVsYXRpdmVseSB0byB0aGUgY29udGFpbmVyLlxuICAubWF0LXJpcHBsZSB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgIC8vIEJ5IGRlZmF1bHQsIGV2ZXJ5IHJpcHBsZSBjb250YWluZXIgc2hvdWxkIGhhdmUgcG9zaXRpb246IHJlbGF0aXZlIGluIGZhdm9yIG9mIGNyZWF0aW5nIGFuXG4gICAgLy8gZWFzeSBBUEkgZm9yIGRldmVsb3BlcnMgdXNpbmcgdGhlIE1hdFJpcHBsZSBkaXJlY3RpdmUuXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgLy8gUHJvbW90ZSBjb250YWluZXJzIHRoYXQgaGF2ZSByaXBwbGVzIHRvIGEgbmV3IGxheWVyLiBXZSB3YW50IHRvIHRhcmdldCBgOm5vdCg6ZW1wdHkpYCxcbiAgICAvLyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgYWxsIHJpcHBsZSBjb250YWluZXJzIHRvIGhhdmUgdGhlaXIgb3duIGxheWVyIHNpbmNlIHRoZXkncmUgdXNlZCBpbiBhXG4gICAgLy8gbG90IG9mIHBsYWNlcyBhbmQgdGhlIGxheWVyIGlzIG9ubHkgcmVsZXZhbnQgd2hpbGUgYW5pbWF0aW5nLiBOb3RlIHRoYXQgaWRlYWxseSB3ZSdkIHVzZVxuICAgIC8vIHRoZSBgY29udGFpbmAgcHJvcGVydHkgaGVyZSAoc2VlICMxMzE3NSksIGJlY2F1c2UgYDplbXB0eWAgY2FuIGJlIGJyb2tlbiBieSBoYXZpbmcgZXh0cmFcbiAgICAvLyB0ZXh0IGluc2lkZSB0aGUgZWxlbWVudCwgYnV0IGl0IGlzbid0IHZlcnkgd2VsbCBzdXBwb3J0ZWQgeWV0LlxuICAgICY6bm90KDplbXB0eSkge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkIHtcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgfVxuXG4gIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5cbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5LCB0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XG5cbiAgICAvLyBJbiBoaWdoIGNvbnRyYXN0IG1vZGUgdGhlIHJpcHBsZSBpcyBvcGFxdWUsIGNhdXNpbmcgaXQgdG8gb2JzdHJ1Y3QgdGhlIGNvbnRlbnQuXG4gICAgQGluY2x1ZGUgY2RrLWhpZ2gtY29udHJhc3QoYWN0aXZlLCBvZmYpIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG59XG5cbi8qIFRoZW1lIGZvciB0aGUgcmlwcGxlIGVsZW1lbnRzLiovXG5AbWl4aW4gbWF0LXJpcHBsZS10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcF9nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQtYmFzZTogbWFwX2dldCgkZm9yZWdyb3VuZCwgYmFzZSk7XG5cbiAgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgLy8gSWYgdGhlIHJpcHBsZSBjb2xvciBpcyByZXNvbHZlcyB0byBhIGNvbG9yICp0eXBlKiwgd2UgY2FuIHVzZSBpdCBkaXJlY3RseSwgb3RoZXJ3aXNlXG4gICAgLy8gKGUuZy4gaXQgcmVzb2x2ZXMgdG8gYSBDU1MgdmFyaWFibGUpIHdlIGZhbGwgYmFjayB0byB1c2luZyB0aGUgY29sb3IgYW5kIHNldHRpbmcgYW4gb3BhY2l0eS5cbiAgICBAaWYgKHR5cGUtb2YoJGZvcmVncm91bmQtYmFzZSkgPT0gY29sb3IpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoJGZvcmVncm91bmQtYmFzZSwgJG1hdC1yaXBwbGUtY29sb3Itb3BhY2l0eSk7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRmb3JlZ3JvdW5kLWJhc2U7XG4gICAgICBvcGFjaXR5OiAkbWF0LXJpcHBsZS1jb2xvci1vcGFjaXR5O1xuICAgIH1cbiAgfVxufVxuXG5cblxuLy8gVXRpbGl0eSBmb3IgZmV0Y2hpbmcgYSBuZXN0ZWQgdmFsdWUgZnJvbSBhIHR5cG9ncmFwaHkgY29uZmlnLlxuQGZ1bmN0aW9uIF9tYXQtZ2V0LXR5cGUtdmFsdWUoJGNvbmZpZywgJGxldmVsLCAkbmFtZSkge1xuICBAcmV0dXJuIG1hcC1nZXQobWFwLWdldCgkY29uZmlnLCAkbGV2ZWwpLCAkbmFtZSk7XG59XG5cbi8vIEdldHMgdGhlIGZvbnQgc2l6ZSBmb3IgYSBsZXZlbCBpbnNpZGUgYSB0eXBvZ3JhcGh5IGNvbmZpZy5cbkBmdW5jdGlvbiBtYXQtZm9udC1zaXplKCRjb25maWcsICRsZXZlbCkge1xuICBAcmV0dXJuIF9tYXQtZ2V0LXR5cGUtdmFsdWUoJGNvbmZpZywgJGxldmVsLCBmb250LXNpemUpO1xufVxuXG4vLyBHZXRzIHRoZSBsaW5lIGhlaWdodCBmb3IgYSBsZXZlbCBpbnNpZGUgYSB0eXBvZ3JhcGh5IGNvbmZpZy5cbkBmdW5jdGlvbiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgJGxldmVsKSB7XG4gIEByZXR1cm4gX21hdC1nZXQtdHlwZS12YWx1ZSgkY29uZmlnLCAkbGV2ZWwsIGxpbmUtaGVpZ2h0KTtcbn1cblxuLy8gR2V0cyB0aGUgZm9udCB3ZWlnaHQgZm9yIGEgbGV2ZWwgaW5zaWRlIGEgdHlwb2dyYXBoeSBjb25maWcuXG5AZnVuY3Rpb24gbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsICRsZXZlbCkge1xuICBAcmV0dXJuIF9tYXQtZ2V0LXR5cGUtdmFsdWUoJGNvbmZpZywgJGxldmVsLCBmb250LXdlaWdodCk7XG59XG5cbi8vIEdldHMgdGhlIGxldHRlciBzcGFjaW5nIGZvciBhIGxldmVsIGluc2lkZSBhIHR5cG9ncmFwaHkgY29uZmlnLlxuQGZ1bmN0aW9uIG1hdC1sZXR0ZXItc3BhY2luZygkY29uZmlnLCAkbGV2ZWwpIHtcbiAgQHJldHVybiBfbWF0LWdldC10eXBlLXZhbHVlKCRjb25maWcsICRsZXZlbCwgbGV0dGVyLXNwYWNpbmcpO1xufVxuXG4vLyBHZXRzIHRoZSBmb250LWZhbWlseSBmcm9tIGEgdHlwb2dyYXBoeSBjb25maWcgYW5kIHJlbW92ZXMgdGhlIHF1b3RlcyBhcm91bmQgaXQuXG5AZnVuY3Rpb24gbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsICRsZXZlbDogbnVsbCkge1xuICAkZm9udC1mYW1pbHk6IG1hcC1nZXQoJGNvbmZpZywgZm9udC1mYW1pbHkpO1xuXG4gIEBpZiAkbGV2ZWwgIT0gbnVsbCB7XG4gICAgJGZvbnQtZmFtaWx5OiBfbWF0LWdldC10eXBlLXZhbHVlKCRjb25maWcsICRsZXZlbCwgZm9udC1mYW1pbHkpO1xuICB9XG5cbiAgLy8gR3VhcmQgYWdhaW5zdCB1bnF1b3Rpbmcgbm9uLXN0cmluZyB2YWx1ZXMsIGJlY2F1c2UgaXQncyBkZXByZWNhdGVkLlxuICBAcmV0dXJuIGlmKHR5cGUtb2YoJGZvbnQtZmFtaWx5KSA9PSBzdHJpbmcsIHVucXVvdGUoJGZvbnQtZmFtaWx5KSwgJGZvbnQtZmFtaWx5KTtcbn1cblxuLy8gT3V0cHV0cyB0aGUgc2hvcnRoYW5kIGBmb250YCBDU1MgcHJvcGVydHksIGJhc2VkIG9uIGEgc2V0IG9mIHR5cG9ncmFwaHkgdmFsdWVzLiBGYWxscyBiYWNrIHRvXG4vLyB0aGUgaW5kaXZpZHVhbCBwcm9wZXJ0aWVzIGlmIGEgdmFsdWUgdGhhdCBpc24ndCBhbGxvd2VkIGluIHRoZSBzaG9ydGhhbmQgaXMgcGFzc2VkIGluLlxuQG1peGluIG1hdC10eXBvZ3JhcGh5LWZvbnQtc2hvcnRoYW5kKCRmb250LXNpemUsICRmb250LXdlaWdodCwgJGxpbmUtaGVpZ2h0LCAkZm9udC1mYW1pbHkpIHtcbiAgLy8gSWYgYW55IG9mIHRoZSB2YWx1ZXMgYXJlIHNldCB0byBgaW5oZXJpdGAsIHdlIGNhbid0IHVzZSB0aGUgc2hvcnRoYW5kXG4gIC8vIHNvIHdlIGZhbGwgYmFjayB0byBwYXNzaW5nIGluIHRoZSBpbmRpdmlkdWFsIHByb3BlcnRpZXMuXG4gIEBpZiAoJGZvbnQtc2l6ZSA9PSBpbmhlcml0IG9yXG4gICAgICAgJGZvbnQtd2VpZ2h0ID09IGluaGVyaXQgb3JcbiAgICAgICAkbGluZS1oZWlnaHQgPT0gaW5oZXJpdCBvclxuICAgICAgICRmb250LWZhbWlseSA9PSBpbmhlcml0IG9yXG4gICAgICAgJGZvbnQtc2l6ZSA9PSBudWxsIG9yXG4gICAgICAgJGZvbnQtd2VpZ2h0ID09IG51bGwgb3JcbiAgICAgICAkbGluZS1oZWlnaHQgPT0gbnVsbCBvclxuICAgICAgICRmb250LWZhbWlseSA9PSBudWxsKSB7XG5cbiAgICBmb250LXNpemU6ICRmb250LXNpemU7XG4gICAgZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodDtcbiAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0O1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHk7XG4gIH1cbiAgQGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZSB1c2UgdGhlIHNob3J0aGFuZCBgZm9udGAsIGJlY2F1c2UgaXQncyB0aGUgbGVhc3QgYW1vdW50IG9mIGJ5dGVzLiBOb3RlXG4gICAgLy8gdGhhdCB3ZSBuZWVkIHRvIHVzZSBpbnRlcnBvbGF0aW9uIGZvciBgZm9udC1zaXplL2xpbmUtaGVpZ2h0YCBpbiBvcmRlciB0byBwcmV2ZW50XG4gICAgLy8gU2FzcyBmcm9tIGRpdmlkaW5nIHRoZSB0d28gdmFsdWVzLlxuICAgIGZvbnQ6ICRmb250LXdlaWdodCAjeyRmb250LXNpemV9LyN7JGxpbmUtaGVpZ2h0fSAkZm9udC1mYW1pbHk7XG4gIH1cbn1cblxuLy8gQ29udmVydHMgYSB0eXBvZ3JhcGh5IGxldmVsIGludG8gQ1NTIHN0eWxlcy5cbkBtaXhpbiBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgJGxldmVsKSB7XG4gICRmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgJGxldmVsKTtcbiAgJGZvbnQtd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgJGxldmVsKTtcbiAgJGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgJGxldmVsKTtcbiAgJGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgJGxldmVsKTtcblxuICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1mb250LXNob3J0aGFuZCgkZm9udC1zaXplLCAkZm9udC13ZWlnaHQsICRsaW5lLWhlaWdodCwgJGZvbnQtZmFtaWx5KTtcbiAgbGV0dGVyLXNwYWNpbmc6IG1hdC1sZXR0ZXItc3BhY2luZygkY29uZmlnLCAkbGV2ZWwpO1xufVxuXG5cbkBtaXhpbiBtYXQtb3B0aW9uLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcblxuICAubWF0LW9wdGlvbiB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgICAmOmhvdmVyOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCksXG4gICAgJjpmb2N1czpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIpO1xuICAgIH1cblxuICAgIC8vIEluIG11bHRpcGxlIG1vZGUgdGhlcmUgaXMgYSBjaGVja2JveCB0byBzaG93IHRoYXQgdGhlIG9wdGlvbiBpcyBzZWxlY3RlZC5cbiAgICAmLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3Zlcik7XG4gICAgfVxuXG4gICAgJi5tYXQtYWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIpO1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgfVxuXG4gICAgJi5tYXQtb3B0aW9uLWRpc2FibGVkIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGhpbnQtdGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1wcmltYXJ5IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtYWNjZW50IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIHRleHQpO1xuICB9XG5cbiAgLm1hdC13YXJuIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LW9wdGlvbi10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1vcHRpb24ge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBzdWJoZWFkaW5nLTIpO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtb3B0Z3JvdXAtdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1vcHRncm91cC1sYWJlbCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1vcHRncm91cC1kaXNhYmxlZCAubWF0LW9wdGdyb3VwLWxhYmVsIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBoaW50LXRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtb3B0Z3JvdXAtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtb3B0Z3JvdXAtbGFiZWwge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBib2R5LTIpO1xuICB9XG59XG5cblxuXG5AbWl4aW4gbWF0LXBzZXVkby1jaGVja2JveC10aGVtZSgkdGhlbWUpIHtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG5cbiAgLy8gTk9URSh0cmF2aXNrYXVmbWFuKTogV2hpbGUgdGhlIHNwZWMgY2FsbHMgZm9yIHRyYW5zbHVjZW50IGJsYWNrcy93aGl0ZXMgZm9yIGRpc2FibGVkIGNvbG9ycyxcbiAgLy8gdGhpcyBkb2VzIG5vdCB3b3JrIHdlbGwgd2l0aCBlbGVtZW50cyBsYXllcmVkIG9uIHRvcCBvZiBvbmUgYW5vdGhlci4gVG8gZ2V0IGFyb3VuZCB0aGlzIHdlXG4gIC8vIGJsZW5kIHRoZSBjb2xvcnMgdG9nZXRoZXIgYmFzZWQgb24gdGhlIGJhc2UgY29sb3IgYW5kIHRoZSB0aGVtZSBiYWNrZ3JvdW5kLlxuICAkd2hpdGUtMzBwY3Qtb3BhY2l0eS1vbi1kYXJrOiAjNjg2ODY4O1xuICAkYmxhY2stMjZwY3Qtb3BhY2l0eS1vbi1saWdodDogI2IwYjBiMDtcbiAgJGRpc2FibGVkLWNvbG9yOiBpZigkaXMtZGFyay10aGVtZSwgJHdoaXRlLTMwcGN0LW9wYWNpdHktb24tZGFyaywgJGJsYWNrLTI2cGN0LW9wYWNpdHktb24tbGlnaHQpO1xuICAkY29sb3JlZC1ib3gtc2VsZWN0b3I6ICcubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlJztcblxuICAubWF0LXBzZXVkby1jaGVja2JveCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCksIHNlY29uZGFyeS10ZXh0KTtcblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGJhY2tncm91bmQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkIHtcbiAgICBjb2xvcjogJGRpc2FibGVkLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsXG4gIC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IobWFwLWdldCgkdGhlbWUsIHByaW1hcnkpKTtcbiAgfVxuXG4gIC8vIERlZmF1bHQgdG8gdGhlIGFjY2VudCBjb2xvci4gTm90ZSB0aGF0IHRoZSBwc2V1ZG8gY2hlY2tib3hlcyBhcmUgbWVhbnQgdG8gaW5oZXJpdCB0aGVcbiAgLy8gdGhlbWUgZnJvbSB0aGVpciBwYXJlbnQsIHJhdGhlciB0aGFuIGltcGxlbWVudGluZyB0aGVpciBvd24gdGhlbWluZywgd2hpY2ggaXMgd2h5IHdlXG4gIC8vIGRvbid0IGF0dGFjaCB0byB0aGUgYG1hdC0qYCBjbGFzc2VzLiBBbHNvIG5vdGUgdGhhdCB0aGlzIG5lZWRzIHRvIGJlIGJlbG93IGAubWF0LXByaW1hcnlgXG4gIC8vIGluIG9yZGVyIHRvIGFsbG93IGZvciB0aGUgY29sb3IgdG8gYmUgb3ZlcndyaXR0ZW4gaWYgdGhlIGNoZWNrYm94IGlzIGluc2lkZSBhIHBhcmVudCB0aGF0XG4gIC8vIGhhcyBgbWF0LWFjY2VudGAgYW5kIGlzIHBsYWNlZCBpbnNpZGUgYW5vdGhlciBwYXJlbnQgdGhhdCBoYXMgYG1hdC1wcmltYXJ5YC5cbiAgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxcbiAgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSxcbiAgLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxcbiAgLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpKTtcbiAgfVxuXG4gIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLFxuICAubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKG1hcC1nZXQoJHRoZW1lLCB3YXJuKSk7XG4gIH1cblxuICAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLFxuICAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlIHtcbiAgICAmLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQge1xuICAgICAgYmFja2dyb3VuZDogJGRpc2FibGVkLWNvbG9yO1xuICAgIH1cbiAgfVxufVxuXG5cblxuLy8gUmVwcmVzZW50cyBhIHR5cG9ncmFwaHkgbGV2ZWwgZnJvbSB0aGUgTWF0ZXJpYWwgZGVzaWduIHNwZWMuXG5AZnVuY3Rpb24gbWF0LXR5cG9ncmFwaHktbGV2ZWwoXG4gICRmb250LXNpemUsXG4gICRsaW5lLWhlaWdodDogJGZvbnQtc2l6ZSxcbiAgJGZvbnQtd2VpZ2h0OiA0MDAsXG4gICRmb250LWZhbWlseTogbnVsbCxcbiAgJGxldHRlci1zcGFjaW5nOiBub3JtYWwpIHtcblxuICBAcmV0dXJuIChcbiAgICBmb250LXNpemU6ICRmb250LXNpemUsXG4gICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodCxcbiAgICBmb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LFxuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHksXG4gICAgbGV0dGVyLXNwYWNpbmc6ICRsZXR0ZXItc3BhY2luZ1xuICApO1xufVxuXG4vLyBSZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiB0eXBvZ3JhcGh5IGxldmVscy5cbi8vIERlZmF1bHRzIGNvbWUgZnJvbSBodHRwczovL21hdGVyaWFsLmlvL2d1aWRlbGluZXMvc3R5bGUvdHlwb2dyYXBoeS5odG1sXG4vLyBOb3RlOiBUaGUgc3BlYyBkb2Vzbid0IG1lbnRpb24gbGV0dGVyIHNwYWNpbmcuIFRoZSB2YWx1ZXMgaGVyZSBjb21lIGZyb21cbi8vIGV5ZWJhbGxpbmcgaXQgdW50aWwgaXQgbG9va2VkIGV4YWN0bHkgbGlrZSB0aGUgc3BlYyBleGFtcGxlcy5cbkBmdW5jdGlvbiBtYXQtdHlwb2dyYXBoeS1jb25maWcoXG4gICRmb250LWZhbWlseTogICAnUm9ib3RvLCBcIkhlbHZldGljYSBOZXVlXCIsIHNhbnMtc2VyaWYnLFxuICAkZGlzcGxheS00OiAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMTEycHgsIDExMnB4LCAzMDAsICRsZXR0ZXItc3BhY2luZzogLTAuMDVlbSksXG4gICRkaXNwbGF5LTM6ICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCg1NnB4LCA1NnB4LCA0MDAsICRsZXR0ZXItc3BhY2luZzogLTAuMDJlbSksXG4gICRkaXNwbGF5LTI6ICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCg0NXB4LCA0OHB4LCA0MDAsICRsZXR0ZXItc3BhY2luZzogLTAuMDA1ZW0pLFxuICAkZGlzcGxheS0xOiAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMzRweCwgNDBweCwgNDAwKSxcbiAgJGhlYWRsaW5lOiAgICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDI0cHgsIDMycHgsIDQwMCksXG4gICR0aXRsZTogICAgICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgyMHB4LCAzMnB4LCA1MDApLFxuICAkc3ViaGVhZGluZy0yOiAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMTZweCwgMjhweCwgNDAwKSxcbiAgJHN1YmhlYWRpbmctMTogIG1hdC10eXBvZ3JhcGh5LWxldmVsKDE1cHgsIDI0cHgsIDQwMCksXG4gICRib2R5LTI6ICAgICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgxNHB4LCAyNHB4LCA1MDApLFxuICAkYm9keS0xOiAgICAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMTRweCwgMjBweCwgNDAwKSxcbiAgJGNhcHRpb246ICAgICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDEycHgsIDIwcHgsIDQwMCksXG4gICRidXR0b246ICAgICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgxNHB4LCAxNHB4LCA1MDApLFxuICAvLyBMaW5lLWhlaWdodCBtdXN0IGJlIHVuaXQtbGVzcyBmcmFjdGlvbiBvZiB0aGUgZm9udC1zaXplLlxuICAkaW5wdXQ6ICAgICAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoaW5oZXJpdCwgMS4xMjUsIDQwMClcbikge1xuXG4gIC8vIERlY2xhcmUgYW4gaW5pdGlhbCBtYXAgd2l0aCBhbGwgb2YgdGhlIGxldmVscy5cbiAgJGNvbmZpZzogKFxuICAgIGRpc3BsYXktNDogICAgICAkZGlzcGxheS00LFxuICAgIGRpc3BsYXktMzogICAgICAkZGlzcGxheS0zLFxuICAgIGRpc3BsYXktMjogICAgICAkZGlzcGxheS0yLFxuICAgIGRpc3BsYXktMTogICAgICAkZGlzcGxheS0xLFxuICAgIGhlYWRsaW5lOiAgICAgICAkaGVhZGxpbmUsXG4gICAgdGl0bGU6ICAgICAgICAgICR0aXRsZSxcbiAgICBzdWJoZWFkaW5nLTI6ICAgJHN1YmhlYWRpbmctMixcbiAgICBzdWJoZWFkaW5nLTE6ICAgJHN1YmhlYWRpbmctMSxcbiAgICBib2R5LTI6ICAgICAgICAgJGJvZHktMixcbiAgICBib2R5LTE6ICAgICAgICAgJGJvZHktMSxcbiAgICBjYXB0aW9uOiAgICAgICAgJGNhcHRpb24sXG4gICAgYnV0dG9uOiAgICAgICAgICRidXR0b24sXG4gICAgaW5wdXQ6ICAgICAgICAgICRpbnB1dCxcbiAgKTtcblxuICAvLyBMb29wIHRocm91Z2ggdGhlIGxldmVscyBhbmQgc2V0IHRoZSBgZm9udC1mYW1pbHlgIG9mIHRoZSBvbmVzIHRoYXQgZG9uJ3QgaGF2ZSBvbmUgdG8gdGhlIGJhc2UuXG4gIC8vIE5vdGUgdGhhdCBTYXNzIGNhbid0IG1vZGlmeSBtYXBzIGluIHBsYWNlLCB3aGljaCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gbWVyZ2UgYW5kIHJlLWFzc2lnbi5cbiAgQGVhY2ggJGtleSwgJGxldmVsIGluICRjb25maWcge1xuICAgIEBpZiBtYXAtZ2V0KCRsZXZlbCwgZm9udC1mYW1pbHkpID09IG51bGwge1xuICAgICAgJG5ldy1sZXZlbDogbWFwLW1lcmdlKCRsZXZlbCwgKGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHkpKTtcbiAgICAgICRjb25maWc6IG1hcC1tZXJnZSgkY29uZmlnLCAoJGtleTogJG5ldy1sZXZlbCkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCB0aGUgYmFzZSBmb250IGZhbWlseSB0byB0aGUgY29uZmlnLlxuICBAcmV0dXJuIG1hcC1tZXJnZSgkY29uZmlnLCAoZm9udC1mYW1pbHk6ICRmb250LWZhbWlseSkpO1xufVxuXG4vLyBBZGRzIHRoZSBiYXNlIHR5cG9ncmFwaHkgc3R5bGVzLCBiYXNlZCBvbiBhIGNvbmZpZy5cbkBtaXhpbiBtYXQtYmFzZS10eXBvZ3JhcGh5KCRjb25maWcsICRzZWxlY3RvcjogJy5tYXQtdHlwb2dyYXBoeScpIHtcbiAgLm1hdC1oMSwgLm1hdC1oZWFkbGluZSwgI3skc2VsZWN0b3J9IGgxIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgaGVhZGxpbmUpO1xuICAgIG1hcmdpbjogMCAwIDE2cHg7XG4gIH1cblxuICAubWF0LWgyLCAubWF0LXRpdGxlLCAjeyRzZWxlY3Rvcn0gaDIge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCB0aXRsZSk7XG4gICAgbWFyZ2luOiAwIDAgMTZweDtcbiAgfVxuXG4gIC5tYXQtaDMsIC5tYXQtc3ViaGVhZGluZy0yLCAjeyRzZWxlY3Rvcn0gaDMge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBzdWJoZWFkaW5nLTIpO1xuICAgIG1hcmdpbjogMCAwIDE2cHg7XG4gIH1cblxuICAubWF0LWg0LCAubWF0LXN1YmhlYWRpbmctMSwgI3skc2VsZWN0b3J9IGg0IHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgc3ViaGVhZGluZy0xKTtcbiAgICBtYXJnaW46IDAgMCAxNnB4O1xuICB9XG5cbiAgLy8gTm90ZTogdGhlIHNwZWMgZG9lc24ndCBoYXZlIGFueXRoaW5nIHRoYXQgd291bGQgY29ycmVzcG9uZCB0byBoNSBhbmQgaDYsIGJ1dCB3ZSBhZGQgdGhlc2UgZm9yXG4gIC8vIGNvbnNpc3RlbmN5LiBUaGUgZm9udCBzaXplcyBjb21lIGZyb20gdGhlIENocm9tZSB1c2VyIGFnZW50IHN0eWxlcyB3aGljaCBoYXZlIGg1IGF0IDAuODNlbVxuICAvLyBhbmQgaDYgYXQgMC42N2VtLlxuICAubWF0LWg1LCAjeyRzZWxlY3Rvcn0gaDUge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWZvbnQtc2hvcnRoYW5kKFxuICAgICAgIC8vIGNhbGMgaXMgdXNlZCBoZXJlIHRvIHN1cHBvcnQgY3NzIHZhcmlhYmxlc1xuICAgICAgY2FsYygje21hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKX0gKiAwLjgzKSxcbiAgICAgIG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTEpLFxuICAgICAgbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGJvZHktMSksXG4gICAgICBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgYm9keS0xKVxuICAgICk7XG5cbiAgICBtYXJnaW46IDAgMCAxMnB4O1xuICB9XG5cbiAgLm1hdC1oNiwgI3skc2VsZWN0b3J9IGg2IHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1mb250LXNob3J0aGFuZChcbiAgICAgICAvLyBjYWxjIGlzIHVzZWQgaGVyZSB0byBzdXBwb3J0IGNzcyB2YXJpYWJsZXNcbiAgICAgIGNhbGMoI3ttYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSl9ICogMC42NyksXG4gICAgICBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0xKSxcbiAgICAgIG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBib2R5LTEpLFxuICAgICAgbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGJvZHktMSlcbiAgICApO1xuXG4gICAgbWFyZ2luOiAwIDAgMTJweDtcbiAgfVxuXG4gIC5tYXQtYm9keS1zdHJvbmcsIC5tYXQtYm9keS0yIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgYm9keS0yKTtcbiAgfVxuXG4gIC5tYXQtYm9keSwgLm1hdC1ib2R5LTEsICN7JHNlbGVjdG9yfSB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGJvZHktMSk7XG5cbiAgICBwIHtcbiAgICAgIG1hcmdpbjogMCAwIDEycHg7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbWFsbCwgLm1hdC1jYXB0aW9uIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgY2FwdGlvbik7XG4gIH1cblxuICAubWF0LWRpc3BsYXktNCwgI3skc2VsZWN0b3J9IC5tYXQtZGlzcGxheS00IHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgZGlzcGxheS00KTtcbiAgICBtYXJnaW46IDAgMCA1NnB4O1xuICB9XG5cbiAgLm1hdC1kaXNwbGF5LTMsICN7JHNlbGVjdG9yfSAubWF0LWRpc3BsYXktMyB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGRpc3BsYXktMyk7XG4gICAgbWFyZ2luOiAwIDAgNjRweDtcbiAgfVxuXG4gIC5tYXQtZGlzcGxheS0yLCAjeyRzZWxlY3Rvcn0gLm1hdC1kaXNwbGF5LTIge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBkaXNwbGF5LTIpO1xuICAgIG1hcmdpbjogMCAwIDY0cHg7XG4gIH1cblxuICAubWF0LWRpc3BsYXktMSwgI3skc2VsZWN0b3J9IC5tYXQtZGlzcGxheS0xIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgZGlzcGxheS0xKTtcbiAgICBtYXJnaW46IDAgMCA2NHB4O1xuICB9XG59XG5cblxuXG5cbkBtaXhpbiBtYXQtYXV0b2NvbXBsZXRlLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuXG4gIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbig0LCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgICAvLyBTZWxlY3RlZCBvcHRpb25zIGluIGF1dG9jb21wbGV0ZXMgc2hvdWxkIG5vdCBiZSBncmF5LCBidXQgd2VcbiAgICAvLyBvbmx5IHdhbnQgdG8gb3ZlcnJpZGUgdGhlIGJhY2tncm91bmQgZm9yIHNlbGVjdGVkIG9wdGlvbnMgaWZcbiAgICAvLyB0aGV5IGFyZSAqbm90KiBpbiBob3ZlciBvciBmb2N1cyBzdGF0ZS4gVGhpcyBjaGFuZ2UgaGFzIHRvIGJlXG4gICAgLy8gbWFkZSBoZXJlIGJlY2F1c2UgYmFzZSBvcHRpb24gc3R5bGVzIGFyZSBzaGFyZWQgYmV0d2VlbiB0aGVcbiAgICAvLyBhdXRvY29tcGxldGUgYW5kIHRoZSBzZWxlY3QuXG4gICAgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcikge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcblxuICAgICAgJjpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpIHtcbiAgICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbn1cblxuQG1peGluIG1hdC1hdXRvY29tcGxldGUtdHlwb2dyYXBoeSgkY29uZmlnKSB7IH1cblxuLy8gVGhpcyBjb250YWlucyBhbGwgb2YgdGhlIHN0eWxlcyBmb3IgdGhlIGJhZGdlXG4vLyByYXRoZXIgdGhhbiBqdXN0IHRoZSBjb2xvci90aGVtZSBiZWNhdXNlIG9mXG4vLyBubyBzdHlsZSBzaGVldCBzdXBwb3J0IGZvciBkaXJlY3RpdmVzLlxuXG5cblxuXG5cbiRtYXQtYmFkZ2UtZm9udC1zaXplOiAxMnB4O1xuJG1hdC1iYWRnZS1mb250LXdlaWdodDogNjAwO1xuJG1hdC1iYWRnZS1kZWZhdWx0LXNpemU6IDIycHggIWRlZmF1bHQ7XG4kbWF0LWJhZGdlLXNtYWxsLXNpemU6ICRtYXQtYmFkZ2UtZGVmYXVsdC1zaXplIC0gNjtcbiRtYXQtYmFkZ2UtbGFyZ2Utc2l6ZTogJG1hdC1iYWRnZS1kZWZhdWx0LXNpemUgKyA2O1xuXG4vLyBNaXhpbiBmb3IgYnVpbGRpbmcgb2Zmc2V0IGdpdmVuIGRpZmZlcmVudCBzaXplc1xuQG1peGluIF9tYXQtYmFkZ2Utc2l6ZSgkc2l6ZSkge1xuICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgIHdpZHRoOiAkc2l6ZTtcbiAgICBoZWlnaHQ6ICRzaXplO1xuICAgIGxpbmUtaGVpZ2h0OiAkc2l6ZTtcbiAgfVxuXG4gICYubWF0LWJhZGdlLWFib3ZlIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgdG9wOiAtJHNpemUgLyAyO1xuICAgIH1cbiAgfVxuXG4gICYubWF0LWJhZGdlLWJlbG93IHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgYm90dG9tOiAtJHNpemUgLyAyO1xuICAgIH1cbiAgfVxuXG4gICYubWF0LWJhZGdlLWJlZm9yZSB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIGxlZnQ6IC0kc2l6ZTtcbiAgICB9XG4gIH1cblxuICBbZGlyPSdydGwnXSAmLm1hdC1iYWRnZS1iZWZvcmUge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICBsZWZ0OiBhdXRvO1xuICAgICAgcmlnaHQ6IC0kc2l6ZTtcbiAgICB9XG4gIH1cblxuICAmLm1hdC1iYWRnZS1hZnRlciB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIHJpZ2h0OiAtJHNpemU7XG4gICAgfVxuICB9XG5cbiAgW2Rpcj0ncnRsJ10gJi5tYXQtYmFkZ2UtYWZ0ZXIge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICByaWdodDogYXV0bztcbiAgICAgIGxlZnQ6IC0kc2l6ZTtcbiAgICB9XG4gIH1cblxuICAmLm1hdC1iYWRnZS1vdmVybGFwIHtcbiAgICAmLm1hdC1iYWRnZS1iZWZvcmUge1xuICAgICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgICAgbGVmdDogLSRzaXplIC8gMjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBbZGlyPSdydGwnXSAmLm1hdC1iYWRnZS1iZWZvcmUge1xuICAgICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgICAgbGVmdDogYXV0bztcbiAgICAgICAgcmlnaHQ6IC0kc2l6ZSAvIDI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5tYXQtYmFkZ2UtYWZ0ZXIge1xuICAgICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgICAgcmlnaHQ6IC0kc2l6ZSAvIDI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgW2Rpcj0ncnRsJ10gJi5tYXQtYmFkZ2UtYWZ0ZXIge1xuICAgICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgICAgcmlnaHQ6IGF1dG87XG4gICAgICAgIGxlZnQ6IC0kc2l6ZSAvIDI7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtYmFkZ2UtdGhlbWUoJHRoZW1lKSB7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgZGVmYXVsdC1jb250cmFzdCk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRwcmltYXJ5KTtcblxuICAgIEBpbmNsdWRlIGNkay1oaWdoLWNvbnRyYXN0KGFjdGl2ZSwgb2ZmKSB7XG4gICAgICBvdXRsaW5lOiBzb2xpZCAxcHg7XG4gICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYmFkZ2UtYWNjZW50IHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRhY2NlbnQpO1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJhZGdlLXdhcm4ge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkd2Fybik7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1iYWRnZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG5cbiAgLm1hdC1iYWRnZS1oaWRkZW4ge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYmFkZ2UtZGlzYWJsZWQge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICAkYXBwLWJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2JhY2tncm91bmQnKTtcbiAgICAgICRiYWRnZS1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC1idXR0b24pO1xuXG4gICAgICAvLyBUaGUgZGlzYWJsZWQgY29sb3IgdXN1YWxseSBoYXMgc29tZSBraW5kIG9mIG9wYWNpdHksIGJ1dCBiZWNhdXNlIHRoZSBiYWRnZSBpcyBvdmVybGF5ZWRcbiAgICAgIC8vIG9uIHRvcCBvZiBzb21ldGhpbmcgZWxzZSwgaXQgd29uJ3QgbG9vayBnb29kIGlmIGl0J3Mgb3BhcXVlLiBJZiBpdCBpcyBhIGNvbG9yICp0eXBlKixcbiAgICAgIC8vIHdlIGNvbnZlcnQgaXQgaW50byBhIHNvbGlkIGNvbG9yIGJ5IHRha2luZyB0aGUgb3BhY2l0eSBmcm9tIHRoZSByZ2JhIHZhbHVlIGFuZCB1c2luZ1xuICAgICAgLy8gdGhlIHZhbHVlIHRvIGRldGVybWluZSB0aGUgcGVyY2VudGFnZSBvZiB0aGUgYmFja2dyb3VuZCB0byBwdXQgaW50byBmb3JlZ3JvdW5kIHdoZW5cbiAgICAgIC8vIG1peGluZyB0aGUgY29sb3JzIHRvZ2V0aGVyLlxuICAgICAgQGlmICh0eXBlLW9mKCRiYWRnZS1jb2xvcikgPT0gY29sb3IgYW5kIHR5cGUtb2YoJGFwcC1iYWNrZ3JvdW5kKSA9PSBjb2xvcikge1xuICAgICAgICAkYmFkZ2Utb3BhY2l0eTogb3BhY2l0eSgkYmFkZ2UtY29sb3IpO1xuICAgICAgICBiYWNrZ3JvdW5kOiBtaXgoJGFwcC1iYWNrZ3JvdW5kLCByZ2JhKCRiYWRnZS1jb2xvciwgMSksICgxIC0gJGJhZGdlLW9wYWNpdHkpICogMTAwJSk7XG4gICAgICB9XG4gICAgICBAZWxzZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRiYWRnZS1jb2xvcjtcbiAgICAgIH1cblxuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDIwMG1zIGVhc2UtaW4tb3V0O1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC42KTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIH1cblxuICAubmctYW5pbWF0ZS1kaXNhYmxlZCAubWF0LWJhZGdlLWNvbnRlbnQsXG4gIC5tYXQtYmFkZ2UtY29udGVudC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSB7XG4gICAgdHJhbnNpdGlvbjogbm9uZTtcbiAgfVxuXG4gIC8vIFRoZSBhY3RpdmUgY2xhc3MgaXMgYWRkZWQgYWZ0ZXIgdGhlIGVsZW1lbnQgaXMgYWRkZWRcbiAgLy8gc28gaXQgY2FuIGFuaW1hdGUgc2NhbGUgdG8gZGVmYXVsdFxuICAubWF0LWJhZGdlLWNvbnRlbnQubWF0LWJhZGdlLWFjdGl2ZSB7XG4gICAgLy8gU2NhbGUgdG8gYG5vbmVgIGluc3RlYWQgb2YgYDFgIHRvIGF2b2lkIGJsdXJyeSB0ZXh0IGluIHNvbWUgYnJvd3NlcnMuXG4gICAgdHJhbnNmb3JtOiBub25lO1xuICB9XG5cbiAgLm1hdC1iYWRnZS1zbWFsbCB7XG4gICAgQGluY2x1ZGUgX21hdC1iYWRnZS1zaXplKCRtYXQtYmFkZ2Utc21hbGwtc2l6ZSk7XG4gIH1cbiAgLm1hdC1iYWRnZS1tZWRpdW0ge1xuICAgIEBpbmNsdWRlIF9tYXQtYmFkZ2Utc2l6ZSgkbWF0LWJhZGdlLWRlZmF1bHQtc2l6ZSk7XG4gIH1cbiAgLm1hdC1iYWRnZS1sYXJnZSB7XG4gICAgQGluY2x1ZGUgX21hdC1iYWRnZS1zaXplKCRtYXQtYmFkZ2UtbGFyZ2Utc2l6ZSk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1iYWRnZS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICBmb250LXdlaWdodDogJG1hdC1iYWRnZS1mb250LXdlaWdodDtcbiAgICBmb250LXNpemU6ICRtYXQtYmFkZ2UtZm9udC1zaXplO1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgLy8gU2V0IHRoZSBmb250IHNpemUgdG8gNzUlIG9mIHRoZSBvcmlnaW5hbC5cbiAgICBmb250LXNpemU6ICRtYXQtYmFkZ2UtZm9udC1zaXplICogMC43NTtcbiAgfVxuXG4gIC5tYXQtYmFkZ2UtbGFyZ2UgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICBmb250LXNpemU6ICRtYXQtYmFkZ2UtZm9udC1zaXplICogMjtcbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtYm90dG9tLXNoZWV0LXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lciB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oMTYsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBkaWFsb2cpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtYm90dG9tLXNoZWV0LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXIge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBib2R5LTEpO1xuICB9XG59XG5cblxuXG5cblxuJF9tYXQtYnV0dG9uLXJpcHBsZS1vcGFjaXR5OiAwLjE7XG5cbi8vIEFwcGxpZXMgYSBmb2N1cyBzdHlsZSB0byBhbiBtYXQtYnV0dG9uIGVsZW1lbnQgZm9yIGVhY2ggb2YgdGhlIHN1cHBvcnRlZCBwYWxldHRlcy5cbkBtaXhpbiBfbWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LWNvbG9yKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcblxuICAmLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG4gIH1cblxuICAmLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQpO1xuICB9XG5cbiAgJi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHdhcm4pO1xuICB9XG5cbiAgJltkaXNhYmxlZF0gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIH1cbn1cblxuLy8gQXBwbGllcyB0aGUgYmFja2dyb3VuZCBjb2xvciBmb3IgYSByaXBwbGUuIElmIHRoZSB2YWx1ZSBwcm92aWRlZCBpcyBub3QgYSBTYXNzIGNvbG9yLFxuLy8gd2UgYXNzdW1lIHRoYXQgd2UndmUgYmVlbiBnaXZlbiBhIENTUyB2YXJpYWJsZS4gU2luY2Ugd2UgY2FuJ3QgcGVyZm9ybSBhbHBoYS1ibGVuZGluZ1xuLy8gb24gYSBDU1MgdmFyaWFibGUsIHdlIGluc3RlYWQgYWRkIHRoZSBvcGFjaXR5IGRpcmVjdGx5IHRvIHRoZSByaXBwbGUgZWxlbWVudC5cbkBtaXhpbiBfbWF0LWJ1dHRvbi1yaXBwbGUtYmFja2dyb3VuZCgkcGFsZXR0ZSwgJGh1ZSwgJG9wYWNpdHkpIHtcbiAgJGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgJGh1ZSwgJG9wYWNpdHkpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1jb2xvcjtcbiAgQGlmICh0eXBlLW9mKCRiYWNrZ3JvdW5kLWNvbG9yKSAhPSBjb2xvcikge1xuICAgIG9wYWNpdHk6ICRvcGFjaXR5O1xuICB9XG59XG5cbkBtaXhpbiBfbWF0LWJ1dHRvbi1yaXBwbGUtY29sb3IoJHRoZW1lLCAkaHVlLCAkb3BhY2l0eTogJF9tYXQtYnV0dG9uLXJpcHBsZS1vcGFjaXR5KSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuXG4gICYubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tcmlwcGxlLWJhY2tncm91bmQoJHByaW1hcnksICRodWUsICRvcGFjaXR5KTtcbiAgfVxuXG4gICYubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi1yaXBwbGUtYmFja2dyb3VuZCgkYWNjZW50LCAkaHVlLCAkb3BhY2l0eSk7XG4gIH1cblxuICAmLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLXJpcHBsZS1iYWNrZ3JvdW5kKCR3YXJuLCAkaHVlLCAkb3BhY2l0eSk7XG4gIH1cbn1cblxuLy8gQXBwbGllcyBhIHByb3BlcnR5IHRvIGFuIG1hdC1idXR0b24gZWxlbWVudCBmb3IgZWFjaCBvZiB0aGUgc3VwcG9ydGVkIHBhbGV0dGVzLlxuQG1peGluIF9tYXQtYnV0dG9uLXRoZW1lLXByb3BlcnR5KCR0aGVtZSwgJHByb3BlcnR5LCAkaHVlKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gICYubWF0LXByaW1hcnkge1xuICAgICN7JHByb3BlcnR5fTogbWF0LWNvbG9yKCRwcmltYXJ5LCAkaHVlKTtcbiAgfVxuICAmLm1hdC1hY2NlbnQge1xuICAgICN7JHByb3BlcnR5fTogbWF0LWNvbG9yKCRhY2NlbnQsICRodWUpO1xuICB9XG4gICYubWF0LXdhcm4ge1xuICAgICN7JHByb3BlcnR5fTogbWF0LWNvbG9yKCR3YXJuLCAkaHVlKTtcbiAgfVxuXG4gICYubWF0LXByaW1hcnksICYubWF0LWFjY2VudCwgJi5tYXQtd2FybiwgJltkaXNhYmxlZF0ge1xuICAgICZbZGlzYWJsZWRdIHtcbiAgICAgICRwYWxldHRlOiBpZigkcHJvcGVydHkgPT0gJ2NvbG9yJywgJGZvcmVncm91bmQsICRiYWNrZ3JvdW5kKTtcbiAgICAgICN7JHByb3BlcnR5fTogbWF0LWNvbG9yKCRwYWxldHRlLCBkaXNhYmxlZC1idXR0b24pO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWJ1dHRvbi10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1idXR0b24sIC5tYXQtaWNvbi1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ge1xuICAgIC8vIEJ1dHRvbnMgd2l0aG91dCBhIGJhY2tncm91bmQgY29sb3Igc2hvdWxkIGluaGVyaXQgdGhlIGZvbnQgY29sb3IuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvXG4gICAgLy8gZW5zdXJlIHRoYXQgdGhlIGJ1dHRvbiBpcyByZWFkYWJsZSBvbiBjdXN0b20gYmFja2dyb3VuZCBjb2xvcnMuIEl0J3Mgd3JvbmcgdG8gYWx3YXlzIGFzc3VtZVxuICAgIC8vIHRoYXQgdGhvc2UgYnV0dG9ucyBhcmUgYWx3YXlzIHBsYWNlZCBpbnNpZGUgb2YgY29udGFpbmVycyB3aXRoIHRoZSBkZWZhdWx0IGJhY2tncm91bmRcbiAgICAvLyBjb2xvciBvZiB0aGUgdGhlbWUgKGUuZy4gdGhlbWVkIHRvb2xiYXJzKS5cbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblxuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLXRoZW1lLXByb3BlcnR5KCR0aGVtZSwgJ2NvbG9yJywgdGV4dCk7XG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tZm9jdXMtb3ZlcmxheS1jb2xvcigkdGhlbWUpO1xuXG4gICAgLy8gU2V0dXAgdGhlIHJpcHBsZSBjb2xvciB0byBiZSBiYXNlZCBvbiB0aGUgdGV4dCBjb2xvci4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHJpcHBsZXNcbiAgICAvLyBhcmUgbWF0Y2hpbmcgd2l0aCB0aGUgY3VycmVudCB0aGVtZSBwYWxldHRlIGFuZCBhcmUgaW4gY29udHJhc3QgdG8gdGhlIGJhY2tncm91bmQgY29sb3JcbiAgICAvLyAoZS5nIGluIHRoZW1lZCB0b29sYmFycykuXG4gICAgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgICBvcGFjaXR5OiAkX21hdC1idXR0b24tcmlwcGxlLW9wYWNpdHk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Q29sb3I7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSB7XG4gICAgYmFja2dyb3VuZDogbWFwX2dldCgkZm9yZWdyb3VuZCwgYmFzZSk7XG4gIH1cblxuICAvLyBOb3RlOiB0aGlzIG5lZWRzIGEgYml0IGV4dHJhIHNwZWNpZmljaXR5LCBiZWNhdXNlIHdlJ3JlIG5vdCBndWFyYW50ZWVkIHRoZSBpbmNsdXNpb25cbiAgLy8gb3JkZXIgb2YgdGhlIHRoZW1lIHN0eWxlcyBhbmQgdGhlIGJ1dHRvbiByZXNldCBtYXkgZW5kIHVwIHJlc2V0dGluZyB0aGlzIGFzIHdlbGwuXG4gIC5tYXQtc3Ryb2tlZC1idXR0b246bm90KFtkaXNhYmxlZF0pIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cblxuICAubWF0LWZsYXQtYnV0dG9uLCAubWF0LXJhaXNlZC1idXR0b24sIC5tYXQtZmFiLCAubWF0LW1pbmktZmFiIHtcbiAgICAvLyBEZWZhdWx0IGZvbnQgYW5kIGJhY2tncm91bmQgY29sb3Igd2hlbiBub3QgdXNpbmcgYW55IGNvbG9yIHBhbGV0dGUuXG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCByYWlzZWQtYnV0dG9uKTtcblxuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLXRoZW1lLXByb3BlcnR5KCR0aGVtZSwgJ2NvbG9yJywgZGVmYXVsdC1jb250cmFzdCk7XG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tdGhlbWUtcHJvcGVydHkoJHRoZW1lLCAnYmFja2dyb3VuZC1jb2xvcicsIGRlZmF1bHQpO1xuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLXJpcHBsZS1jb2xvcigkdGhlbWUsIGRlZmF1bHQtY29udHJhc3QpO1xuICB9XG5cbiAgLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1hdC1mbGF0LWJ1dHRvbiB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMCwgJHRoZW1lKTtcbiAgfVxuXG4gIC5tYXQtcmFpc2VkLWJ1dHRvbiB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMiwgJHRoZW1lKTtcblxuICAgICY6bm90KFtkaXNhYmxlZF0pOmFjdGl2ZSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbig4LCAkdGhlbWUpO1xuICAgIH1cblxuICAgICZbZGlzYWJsZWRdIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDAsICR0aGVtZSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1mYWIsIC5tYXQtbWluaS1mYWIge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDYsICR0aGVtZSk7XG5cbiAgICAmOm5vdChbZGlzYWJsZWRdKTphY3RpdmUge1xuICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMTIsICR0aGVtZSk7XG4gICAgfVxuXG4gICAgJltkaXNhYmxlZF0ge1xuICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMCwgJHRoZW1lKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1idXR0b24tdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtYnV0dG9uLCAubWF0LXJhaXNlZC1idXR0b24sIC5tYXQtaWNvbi1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24sXG4gIC5tYXQtZmxhdC1idXR0b24sIC5tYXQtZmFiLCAubWF0LW1pbmktZmFiIHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBidXR0b24pO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBidXR0b24pO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYnV0dG9uKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtYnV0dG9uLXRvZ2dsZS10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGRpdmlkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUsXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cCB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oMiwgJHRoZW1lKTtcbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQsXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIHtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBoaW50LXRleHQpO1xuXG4gICAgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBmb2N1c2VkLWJ1dHRvbik7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG5cbiAgICAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGZvY3VzZWQtYnV0dG9uLCAxKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUgKyAubWF0LWJ1dHRvbi10b2dnbGUge1xuICAgIGJvcmRlci1sZWZ0OiBzb2xpZCAxcHggJGRpdmlkZXItY29sb3I7XG4gIH1cblxuICBbZGlyPSdydGwnXSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUgKyAubWF0LWJ1dHRvbi10b2dnbGUge1xuICAgIGJvcmRlci1sZWZ0OiBub25lO1xuICAgIGJvcmRlci1yaWdodDogc29saWQgMXB4ICRkaXZpZGVyLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwge1xuICAgIC5tYXQtYnV0dG9uLXRvZ2dsZSArIC5tYXQtYnV0dG9uLXRvZ2dsZSB7XG4gICAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICAgIGJvcmRlci1yaWdodDogbm9uZTtcbiAgICAgIGJvcmRlci10b3A6IHNvbGlkIDFweCAkZGl2aWRlci1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBzZWxlY3RlZC1idXR0b24pO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcblxuICAgICYubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLWJ1dHRvbik7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBkaXNhYmxlZC1idXR0b24tdG9nZ2xlKTtcblxuICAgICYubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICAgIH1cblxuICAgICYubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIHNlbGVjdGVkLWRpc2FibGVkLWJ1dHRvbik7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCxcbiAgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQge1xuICAgIGJvcmRlcjogc29saWQgMXB4ICRkaXZpZGVyLWNvbG9yO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtYnV0dG9uLXRvZ2dsZS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1idXR0b24tdG9nZ2xlIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG59XG5cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtY2FyZC10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWNhcmQge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDEsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAgIC8vIE5lZWRzIGV4dHJhIHNwZWNpZmljaXR5IHRvIGJlIGFibGUgdG8gb3ZlcnJpZGUgdGhlIGVsZXZhdGlvbiBzZWxlY3RvcnMuXG4gICAgJi5tYXQtY2FyZC1mbGF0IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDAsICR0aGVtZSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1jYXJkLXN1YnRpdGxlIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1jYXJkLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWNhcmQge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LWNhcmQtdGl0bGUge1xuICAgIGZvbnQ6IHtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgaGVhZGxpbmUpO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgdGl0bGUpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtY2FyZC1oZWFkZXIgLm1hdC1jYXJkLXRpdGxlIHtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgdGl0bGUpO1xuICB9XG5cbiAgLm1hdC1jYXJkLXN1YnRpdGxlLFxuICAubWF0LWNhcmQtY29udGVudCB7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSk7XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LWNoZWNrYm94LXRoZW1lKCR0aGVtZSkge1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuXG4gIC8vIFRoZSBjb2xvciBvZiB0aGUgY2hlY2tib3gncyBjaGVja21hcmsgLyBtaXhlZG1hcmsuXG4gICRjaGVja2JveC1tYXJrLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGJhY2tncm91bmQpO1xuXG4gIC8vIE5PVEUodHJhdmlza2F1Zm1hbik6IFdoaWxlIHRoZSBzcGVjIGNhbGxzIGZvciB0cmFuc2x1Y2VudCBibGFja3Mvd2hpdGVzIGZvciBkaXNhYmxlZCBjb2xvcnMsXG4gIC8vIHRoaXMgZG9lcyBub3Qgd29yayB3ZWxsIHdpdGggZWxlbWVudHMgbGF5ZXJlZCBvbiB0b3Agb2Ygb25lIGFub3RoZXIuIFRvIGdldCBhcm91bmQgdGhpcyB3ZVxuICAvLyBibGVuZCB0aGUgY29sb3JzIHRvZ2V0aGVyIGJhc2VkIG9uIHRoZSBiYXNlIGNvbG9yIGFuZCB0aGUgdGhlbWUgYmFja2dyb3VuZC5cbiAgJHdoaXRlLTMwcGN0LW9wYWNpdHktb24tZGFyazogIzY4Njg2ODtcbiAgJGJsYWNrLTI2cGN0LW9wYWNpdHktb24tbGlnaHQ6ICNiMGIwYjA7XG4gICRkaXNhYmxlZC1jb2xvcjogaWYoJGlzLWRhcmstdGhlbWUsICR3aGl0ZS0zMHBjdC1vcGFjaXR5LW9uLWRhcmssICRibGFjay0yNnBjdC1vcGFjaXR5LW9uLWxpZ2h0KTtcblxuICAubWF0LWNoZWNrYm94LWZyYW1lIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1jaGVja2JveC1jaGVja21hcmsge1xuICAgIGZpbGw6ICRjaGVja2JveC1tYXJrLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aCB7XG4gICAgLy8gIWltcG9ydGFudCBpcyBuZWVkZWQgaGVyZSBiZWNhdXNlIGEgc3Ryb2tlIG11c3QgYmUgc2V0IGFzIGFuXG4gICAgLy8gYXR0cmlidXRlIG9uIHRoZSBTVkcgaW4gb3JkZXIgZm9yIGxpbmUgYW5pbWF0aW9uIHRvIHdvcmsgcHJvcGVybHkuXG4gICAgc3Ryb2tlOiAkY2hlY2tib3gtbWFyay1jb2xvciAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm1hdC1jaGVja2JveC1taXhlZG1hcmsge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRjaGVja2JveC1tYXJrLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLCAubWF0LWNoZWNrYm94LWNoZWNrZWQge1xuICAgICYubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiAubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCR3YXJuKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWNoZWNrYm94LWRpc2FibGVkIHtcbiAgICAmLm1hdC1jaGVja2JveC1jaGVja2VkLFxuICAgICYubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUge1xuICAgICAgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGRpc2FibGVkLWNvbG9yO1xuICAgICAgfVxuICAgIH1cblxuICAgICY6bm90KC5tYXQtY2hlY2tib3gtY2hlY2tlZCkge1xuICAgICAgLm1hdC1jaGVja2JveC1mcmFtZSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJGRpc2FibGVkLWNvbG9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN3aXRjaCB0aGlzIHRvIGEgc29saWQgY29sb3Igc2luY2Ugd2UncmUgdXNpbmcgYG9wYWNpdHlgXG4gIC8vIHRvIGNvbnRyb2wgaG93IG9wYXF1ZSB0aGUgcmlwcGxlIHNob3VsZCBiZS5cbiAgLm1hdC1jaGVja2JveCAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXBfZ2V0KG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKSwgYmFzZSk7XG4gIH1cblxuICAubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLFxuICAubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkge1xuICAgICYubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJHByaW1hcnkpO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYWNjZW50KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCR3YXJuKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1jaGVja2JveC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1jaGVja2JveCB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC8vIFRPRE8oa2FyYSk6IFJlbW92ZSB0aGlzIHN0eWxlIHdoZW4gZml4aW5nIHZlcnRpY2FsIGJhc2VsaW5lXG4gIC5tYXQtY2hlY2tib3gtbGF5b3V0IC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICAgIGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgYm9keS0yKTtcbiAgfVxufVxuXG5cblxuXG5cblxuJG1hdC1jaGlwLXJlbW92ZS1mb250LXNpemU6IDE4cHg7XG5cbkBtaXhpbiBtYXQtY2hpcHMtY29sb3IoJGZvcmVncm91bmQsICRiYWNrZ3JvdW5kKSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kO1xuICBjb2xvcjogJGZvcmVncm91bmQ7XG5cbiAgLm1hdC1jaGlwLXJlbW92ZSB7XG4gICAgY29sb3I6ICRmb3JlZ3JvdW5kO1xuICAgIG9wYWNpdHk6IDAuNDtcbiAgfVxufVxuXG5cbi8vIEFwcGxpZXMgdGhlIGJhY2tncm91bmQgY29sb3IgZm9yIGEgcmlwcGxlIGVsZW1lbnQuXG4vLyBJZiB0aGUgY29sb3IgdmFsdWUgcHJvdmlkZWQgaXMgbm90IGEgU2FzcyBjb2xvcixcbi8vIHdlIGFzc3VtZSB0aGF0IHdlJ3ZlIGJlZW4gZ2l2ZW4gYSBDU1MgdmFyaWFibGUuXG4vLyBTaW5jZSB3ZSBjYW4ndCBwZXJmb3JtIGFscGhhLWJsZW5kaW5nIG9uIGEgQ1NTIHZhcmlhYmxlLFxuLy8gd2UgaW5zdGVhZCBhZGQgdGhlIG9wYWNpdHkgZGlyZWN0bHkgdG8gdGhlIHJpcHBsZSBlbGVtZW50LlxuQG1peGluIF9tYXQtY2hpcHMtcmlwcGxlLWJhY2tncm91bmQoJHBhbGV0dGUsICRkZWZhdWx0LWNvbnRyYXN0LCAkb3BhY2l0eSkge1xuICAkYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCAkZGVmYXVsdC1jb250cmFzdCwgJG9wYWNpdHkpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1jb2xvcjtcbiAgQGlmICh0eXBlLW9mKCRiYWNrZ3JvdW5kLWNvbG9yKSAhPSBjb2xvcikge1xuICAgIG9wYWNpdHk6ICRvcGFjaXR5O1xuICB9XG59XG5cbkBtaXhpbiBtYXQtY2hpcHMtdGhlbWUtY29sb3IoJHBhbGV0dGUpIHtcbiAgQGluY2x1ZGUgbWF0LWNoaXBzLWNvbG9yKG1hdC1jb2xvcigkcGFsZXR0ZSwgZGVmYXVsdC1jb250cmFzdCksIG1hdC1jb2xvcigkcGFsZXR0ZSkpO1xuXG4gIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgQGluY2x1ZGUgX21hdC1jaGlwcy1yaXBwbGUtYmFja2dyb3VuZCgkcGFsZXR0ZSwgZGVmYXVsdC1jb250cmFzdCwgMC4xKTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWNoaXBzLXRoZW1lKCR0aGVtZSkge1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAkdW5zZWxlY3RlZC1iYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIHVuc2VsZWN0ZWQtY2hpcCk7XG4gICR1bnNlbGVjdGVkLWZvcmVncm91bmQ6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwIHtcbiAgICBAaW5jbHVkZSBtYXQtY2hpcHMtY29sb3IoJHVuc2VsZWN0ZWQtZm9yZWdyb3VuZCwgJHVuc2VsZWN0ZWQtYmFja2dyb3VuZCk7XG5cbiAgICAmOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpIHtcbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oMywgJHRoZW1lKTtcbiAgICAgIH1cblxuICAgICAgLm1hdC1jaGlwLXJlbW92ZTpob3ZlciB7XG4gICAgICAgIG9wYWNpdHk6IDAuNTQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5tYXQtY2hpcC1kaXNhYmxlZCB7XG4gICAgICBvcGFjaXR5OiAwLjQ7XG4gICAgfVxuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZDogbWFwX2dldCgkZm9yZWdyb3VuZCwgYmFzZSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkIHtcbiAgICAmLm1hdC1wcmltYXJ5IHtcbiAgICAgIEBpbmNsdWRlIG1hdC1jaGlwcy10aGVtZS1jb2xvcigkcHJpbWFyeSk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBAaW5jbHVkZSBtYXQtY2hpcHMtdGhlbWUtY29sb3IoJHdhcm4pO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICBAaW5jbHVkZSBtYXQtY2hpcHMtdGhlbWUtY29sb3IoJGFjY2VudCk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtY2hpcHMtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtY2hpcCB7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMik7XG4gICAgZm9udC13ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTIpO1xuXG4gICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb24sXG4gICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbiB7XG4gICAgICBmb250LXNpemU6ICRtYXQtY2hpcC1yZW1vdmUtZm9udC1zaXplO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtdGFibGUtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC10YWJsZSB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnY2FyZCcpO1xuICB9XG5cbiAgLm1hdC10YWJsZSB0aGVhZCwgLm1hdC10YWJsZSB0Ym9keSwgLm1hdC10YWJsZSB0Zm9vdCxcbiAgbWF0LWhlYWRlci1yb3csIG1hdC1yb3csIG1hdC1mb290ZXItcm93LFxuICBbbWF0LWhlYWRlci1yb3ddLCBbbWF0LXJvd10sIFttYXQtZm9vdGVyLXJvd10sXG4gIC5tYXQtdGFibGUtc3RpY2t5IHtcbiAgICBiYWNrZ3JvdW5kOiBpbmhlcml0O1xuICB9XG5cbiAgbWF0LXJvdywgbWF0LWhlYWRlci1yb3csIG1hdC1mb290ZXItcm93LFxuICB0aC5tYXQtaGVhZGVyLWNlbGwsIHRkLm1hdC1jZWxsLCB0ZC5tYXQtZm9vdGVyLWNlbGwge1xuICAgIGJvcmRlci1ib3R0b20tY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cblxuICAubWF0LWhlYWRlci1jZWxsIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LWNlbGwsIC5tYXQtZm9vdGVyLWNlbGwge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtdGFibGUtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtdGFibGUge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LWhlYWRlci1jZWxsIHtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbik7XG4gICAgZm9udC13ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTIpO1xuICB9XG5cbiAgLm1hdC1jZWxsLCAubWF0LWZvb3Rlci1jZWxsIHtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKTtcbiAgfVxufVxuXG5cblxuXG5cblxuXG4kbWF0LWRhdGVwaWNrZXItc2VsZWN0ZWQtdG9kYXktYm94LXNoYWRvdy13aWR0aDogMXB4O1xuJG1hdC1kYXRlcGlja2VyLXNlbGVjdGVkLWZhZGUtYW1vdW50OiAwLjY7XG4kbWF0LWRhdGVwaWNrZXItdG9kYXktZmFkZS1hbW91bnQ6IDAuMjtcbiRtYXQtY2FsZW5kYXItYm9keS1mb250LXNpemU6IDEzcHggIWRlZmF1bHQ7XG4kbWF0LWNhbGVuZGFyLXdlZWtkYXktdGFibGUtZm9udC1zaXplOiAxMXB4ICFkZWZhdWx0O1xuXG5AbWl4aW4gX21hdC1kYXRlcGlja2VyLWNvbG9yKCRwYWxldHRlKSB7XG4gIC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCA+IC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCB7XG4gICAgJGJhY2tncm91bmQ6IG1hdC1jb2xvcigkcGFsZXR0ZSk7XG5cbiAgICBAaWYgKHR5cGUtb2YoJGJhY2tncm91bmQpID09IGNvbG9yKSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBmYWRlLW91dCgkYmFja2dyb3VuZCwgJG1hdC1kYXRlcGlja2VyLXNlbGVjdGVkLWZhZGUtYW1vdW50KTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgLy8gSWYgd2UgY291bGRuJ3QgcmVzb2x2ZSB0byBiYWNrZ3JvdW5kIHRvIGEgY29sb3IgKGUuZy4gaXQncyBhIENTUyB2YXJpYWJsZSksXG4gICAgICAvLyBmYWxsIGJhY2sgdG8gZmFkaW5nIHRoZSBjb250ZW50IG91dCB2aWEgYG9wYWNpdHlgLlxuICAgICAgb3BhY2l0eTogJG1hdC1kYXRlcGlja2VyLXRvZGF5LWZhZGUtYW1vdW50O1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCB7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgJG1hdC1kYXRlcGlja2VyLXNlbGVjdGVkLXRvZGF5LWJveC1zaGFkb3ctd2lkdGhcbiAgICAgICAgICAgICAgICBtYXQtY29sb3IoJHBhbGV0dGUsIGRlZmF1bHQtY29udHJhc3QpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtZGF0ZXBpY2tlci10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcblxuICAubWF0LWNhbGVuZGFyLWFycm93IHtcbiAgICBib3JkZXItdG9wLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGljb24pO1xuICB9XG5cbiAgLy8gVGhlIHByZXYvbmV4dCBidXR0b25zIG5lZWQgYSBiaXQgbW9yZSBzcGVjaWZpY2l0eSB0b1xuICAvLyBhdm9pZCBiZWluZyBvdmVyd3JpdHRlbiBieSB0aGUgLm1hdC1pY29uLWJ1dHRvbi5cbiAgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZSxcbiAgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1uZXh0LWJ1dHRvbixcbiAgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1wcmV2aW91cy1idXR0b24ge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGljb24pO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGhpbnQtdGV4dCk7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlci1kaXZpZGVyOjphZnRlciB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS1sYWJlbCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCA+IC5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCkge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXIsXG4gIC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlLFxuICAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlIHtcbiAgICAmID4gLm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCkge1xuICAgIC8vIE5vdGU6IHRob3VnaCBpdCdzIG5vdCB0ZXh0LCB0aGUgYm9yZGVyIGlzIGEgaGludCBhYm91dCB0aGUgZmFjdCB0aGF0IHRoaXMgaXMgdG9kYXkncyBkYXRlLFxuICAgIC8vIHNvIHdlIHVzZSB0aGUgaGludCBjb2xvci5cbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaGludC10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCA+IC5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKSB7XG4gICAgJGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGhpbnQtdGV4dCk7XG5cbiAgICBAaWYgKHR5cGUtb2YoJGNvbG9yKSA9PSBjb2xvcikge1xuICAgICAgYm9yZGVyLWNvbG9yOiBmYWRlLW91dCgkY29sb3IsICRtYXQtZGF0ZXBpY2tlci10b2RheS1mYWRlLWFtb3VudCk7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIC8vIElmIHRoZSBjb2xvciBkaWRuJ3QgcmVzb2x2ZSB0byBhIGNvbG9yIHZhbHVlLCBidXQgc29tZXRoaW5nIGxpa2UgYSBDU1MgdmFyaWFibGUsIHdlIGNhbid0XG4gICAgICAvLyBmYWRlIGl0IG91dCBzbyB3ZSBmYWxsIGJhY2sgdG8gcmVkdWNpbmcgdGhlIGVsZW1lbnQgb3BhY2l0eS4gTm90ZSB0aGF0IHdlIGRvbid0IHVzZSB0aGVcbiAgICAgIC8vICRtYXQtZGF0ZXBpY2tlci10b2RheS1mYWRlLWFtb3VudCwgYmVjYXVzZSBoaW50IHRleHQgdXN1YWxseSBoYXMgc29tZSBvcGFjaXR5IGFwcGxpZWRcbiAgICAgIC8vIHRvIGl0IGFscmVhZHkgYW5kIHdlIGRvbid0IHdhbnQgdGhlbSB0byBzdGFjayBvbiB0b3Agb2YgZWFjaCBvdGhlci5cbiAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICB9XG4gIH1cblxuICBAaW5jbHVkZSBfbWF0LWRhdGVwaWNrZXItY29sb3IobWFwLWdldCgkdGhlbWUsIHByaW1hcnkpKTtcblxuICAubWF0LWRhdGVwaWNrZXItY29udGVudCB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oNCwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gICAgJi5tYXQtYWNjZW50IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtZGF0ZXBpY2tlci1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KSk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBAaW5jbHVkZSBfbWF0LWRhdGVwaWNrZXItY29sb3IobWFwLWdldCgkdGhlbWUsIHdhcm4pKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWRhdGVwaWNrZXItY29udGVudC10b3VjaCB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oMCwgJHRoZW1lKTtcbiAgfVxuXG4gIC5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KSwgdGV4dCk7XG5cbiAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KSwgdGV4dCk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKG1hcC1nZXQoJHRoZW1lLCB3YXJuKSwgdGV4dCk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtZGF0ZXBpY2tlci10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1jYWxlbmRhciB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keSB7XG4gICAgZm9udC1zaXplOiAkbWF0LWNhbGVuZGFyLWJvZHktZm9udC1zaXplO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsLFxuICAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b24ge1xuICAgIGZvbnQ6IHtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYnV0dG9uKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJ1dHRvbik7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIgdGgge1xuICAgIGZvbnQ6IHtcbiAgICAgIHNpemU6ICRtYXQtY2FsZW5kYXItd2Vla2RheS10YWJsZS1mb250LXNpemU7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTEpO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LWRpYWxvZy10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDI0LCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZGlhbG9nKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWRpYWxvZy10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1kaWFsb2ctdGl0bGUge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCB0aXRsZSk7XG4gIH1cbn1cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtZXhwYW5zaW9uLXBhbmVsLXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtZXhwYW5zaW9uLXBhbmVsIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigyLCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cblxuICAubWF0LWFjdGlvbi1yb3cge1xuICAgIGJvcmRlci10b3AtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cblxuICAubWF0LWV4cGFuc2lvbi1wYW5lbCB7XG4gICAgJiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQsXG4gICAgJiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZCxcbiAgICAmOm5vdCgubWF0LWV4cGFuZGVkKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXIge1xuICAgICAgJjpub3QoW2FyaWEtZGlzYWJsZWQ9J3RydWUnXSkge1xuICAgICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBEaXNhYmxlIHRoZSBob3ZlciBvbiB0b3VjaCBkZXZpY2VzIHNpbmNlIGl0IGNhbiBhcHBlYXIgbGlrZSBpdCBpcyBzdHVjay4gV2UgY2FuJ3QgdXNlXG4gIC8vIGBAbWVkaWEgKGhvdmVyKWAgYWJvdmUsIGJlY2F1c2UgdGhlIGRlc2t0b3Agc3VwcG9ydCBicm93c2VyIHN1cHBvcnQgaXNuJ3QgZ3JlYXQuXG4gIEBtZWRpYSAoaG92ZXI6IG5vbmUpIHtcbiAgICAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCk6bm90KFthcmlhLWRpc2FibGVkPSd0cnVlJ10pXG4gICAgICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG5cbiAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLFxuICAubWF0LWV4cGFuc2lvbi1pbmRpY2F0b3I6OmFmdGVyIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD0ndHJ1ZSddIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC1idXR0b24pO1xuXG4gICAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlLFxuICAgIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiB7XG4gICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1leHBhbnNpb24tcGFuZWwtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgc3ViaGVhZGluZy0xKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgc3ViaGVhZGluZy0xKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIHN1YmhlYWRpbmctMSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudCB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGJvZHktMSk7XG4gIH1cbn1cblxuXG5cblxuLy8gVGhpcyBtaXhpbiB3aWxsIGVuc3VyZSB0aGF0IGxpbmVzIHRoYXQgb3ZlcmZsb3cgdGhlIGNvbnRhaW5lciB3aWxsIGhpZGUgdGhlIG92ZXJmbG93IGFuZFxuLy8gdHJ1bmNhdGUgbmVhdGx5IHdpdGggYW4gZWxsaXBzaXMuXG5AbWl4aW4gbWF0LXRydW5jYXRlLWxpbmUoKSB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG4vLyBNaXhpbiB0byBwcm92aWRlIGFsbCBtYXQtbGluZSBzdHlsZXMsIGNoYW5naW5nIHNlY29uZGFyeSBmb250IHNpemUgYmFzZWQgb24gd2hldGhlciB0aGUgbGlzdFxuLy8gaXMgaW4gZGVuc2UgbW9kZS5cbkBtaXhpbiBtYXQtbGluZS1iYXNlKCRzZWNvbmRhcnktZm9udC1zaXplKSB7XG4gIC5tYXQtbGluZSB7XG4gICAgQGluY2x1ZGUgbWF0LXRydW5jYXRlLWxpbmUoKTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXG4gICAgLy8gYWxsIGxpbmVzIGJ1dCB0aGUgdG9wIGxpbmUgc2hvdWxkIGhhdmUgc21hbGxlciB0ZXh0XG4gICAgJjpudGgtY2hpbGQobisyKSB7XG4gICAgICBmb250LXNpemU6ICRzZWNvbmRhcnktZm9udC1zaXplO1xuICAgIH1cbiAgfVxufVxuXG4vLyBUaGlzIG1peGluIG5vcm1hbGl6ZXMgZGVmYXVsdCBlbGVtZW50IHN0eWxlcywgZS5nLiBmb250IHdlaWdodCBmb3IgaGVhZGluZyB0ZXh0LlxuQG1peGluIG1hdC1ub3JtYWxpemUtdGV4dCgpIHtcbiAgJiA+ICoge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xuICB9XG59XG5cbi8vIFRoaXMgbWl4aW4gcHJvdmlkZXMgYmFzZSBzdHlsZXMgZm9yIHRoZSB3cmFwcGVyIGFyb3VuZCBtYXQtbGluZSBlbGVtZW50cyBpbiBhIGxpc3QuXG5AbWl4aW4gbWF0LWxpbmUtd3JhcHBlci1iYXNlKCkge1xuICBAaW5jbHVkZSBtYXQtbm9ybWFsaXplLXRleHQoKTtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB3aWR0aDogMTAwJTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAvLyBNdXN0IHJlbW92ZSB3cmFwcGVyIHdoZW4gbGluZXMgYXJlIGVtcHR5IG9yIGl0IHRha2VzIHVwIGhvcml6b250YWxcbiAgLy8gc3BhY2UgYW5kIHB1c2hlcyBvdGhlciBlbGVtZW50cyB0byB0aGUgcmlnaHQuXG4gICY6ZW1wdHkge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuXG5cbi8vIEluY2x1ZGUgdGhpcyBlbXB0eSBtaXhpbiBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgb3RoZXIgY29tcG9uZW50cy5cbkBtaXhpbiBtYXQtZ3JpZC1saXN0LXRoZW1lKCR0aGVtZSkgeyB9XG5cbkBtaXhpbiBtYXQtZ3JpZC1saXN0LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWdyaWQtdGlsZS1oZWFkZXIsXG4gIC5tYXQtZ3JpZC10aWxlLWZvb3RlciB7XG4gICAgQGluY2x1ZGUgbWF0LWxpbmUtYmFzZShtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pKTtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKTtcbiAgfVxufVxuXG5cblxuXG4vLyBJbmNsdWRlIHRoaXMgZW1wdHkgbWl4aW4gZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIG90aGVyIGNvbXBvbmVudHMuXG5AbWl4aW4gbWF0LWljb24tdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtaWNvbiB7XG4gICAgJi5tYXQtcHJpbWFyeSB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCB0ZXh0KTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCB0ZXh0KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWljb24tdHlwb2dyYXBoeSgkY29uZmlnKSB7IH1cblxuXG5cblxuXG4vLyBSZW5kZXJzIGEgZ3JhZGllbnQgZm9yIHNob3dpbmcgdGhlIGRhc2hlZCBsaW5lIHdoZW4gdGhlIGlucHV0IGlzIGRpc2FibGVkLlxuLy8gVW5saWtlIHVzaW5nIGEgYm9yZGVyLCBhIGdyYWRpZW50IGFsbG93cyB1cyB0byBhZGp1c3QgdGhlIHNwYWNpbmcgb2YgdGhlIGRvdHRlZCBsaW5lXG4vLyB0byBtYXRjaCB0aGUgTWF0ZXJpYWwgRGVzaWduIHNwZWMuXG5AbWl4aW4gbWF0LWNvbnRyb2wtZGlzYWJsZWQtdW5kZXJsaW5lKCRjb2xvcikge1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICRjb2xvciAwJSwgJGNvbG9yIDMzJSwgdHJhbnNwYXJlbnQgMCUpO1xuICBiYWNrZ3JvdW5kLXNpemU6IDRweCAxMDAlO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7XG59XG5cbi8vIEZpZ3VyZXMgb3V0IHRoZSBjb2xvciBvZiB0aGUgcGxhY2Vob2xkZXIgZm9yIGEgZm9ybSBjb250cm9sLlxuLy8gVXNlZCBwcmltYXJpbHkgdG8gcHJldmVudCB0aGUgdmFyaW91cyBmb3JtIGNvbnRyb2xzIGZyb21cbi8vIGJlY29taW5nIG91dCBvZiBzeW5jIHNpbmNlIHRoZXNlIGNvbG9ycyBhcmVuJ3QgaW4gYSBwYWxldHRlLlxuQGZ1bmN0aW9uIF9tYXQtY29udHJvbC1wbGFjZWhvbGRlci1jb2xvcigkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcbiAgQHJldHVybiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0LCBpZigkaXMtZGFyay10aGVtZSwgMC41LCAwLjQyKSk7XG59XG5cblxuLyogc3R5bGVsaW50LWRpc2FibGUgbWF0ZXJpYWwvbm8tcHJlZml4ZXMgKi9cbkBtaXhpbiB1c2VyLXNlbGVjdCgkdmFsdWUpIHtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogJHZhbHVlO1xuICAtbW96LXVzZXItc2VsZWN0OiAkdmFsdWU7XG4gIC1tcy11c2VyLXNlbGVjdDogJHZhbHVlO1xuICB1c2VyLXNlbGVjdDogJHZhbHVlO1xufVxuXG5AbWl4aW4gaW5wdXQtcGxhY2Vob2xkZXIge1xuICAmOjpwbGFjZWhvbGRlciB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cblxuICAmOjotbW96LXBsYWNlaG9sZGVyIHtcbiAgICBAY29udGVudDtcbiAgfVxuXG4gICY6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIEBjb250ZW50O1xuICB9XG5cbiAgJjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIEBjb250ZW50O1xuICB9XG59XG5cbkBtaXhpbiBjdXJzb3ItZ3JhYiB7XG4gIGN1cnNvcjogLXdlYmtpdC1ncmFiO1xuICBjdXJzb3I6IGdyYWI7XG59XG5cbkBtaXhpbiBjdXJzb3ItZ3JhYmJpbmcge1xuICBjdXJzb3I6IC13ZWJraXQtZ3JhYmJpbmc7XG4gIGN1cnNvcjogZ3JhYmJpbmc7XG59XG5cbkBtaXhpbiBiYWNrZmFjZS12aXNpYmlsaXR5KCR2YWx1ZSkge1xuICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6ICR2YWx1ZTtcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogJHZhbHVlO1xufVxuLyogc3R5bGVsaW50LWVuYWJsZSAqL1xuXG5cblxuQG1peGluIG1hdC1pbnB1dC10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlciB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1pbnB1dC1lbGVtZW50OmRpc2FibGVkLFxuICAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVyIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtaW5wdXQtZWxlbWVudCB7XG4gICAgY2FyZXQtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgdGV4dCk7XG5cbiAgICBAaW5jbHVkZSBpbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgICBjb2xvcjogX21hdC1jb250cm9sLXBsYWNlaG9sZGVyLWNvbG9yKCR0aGVtZSk7XG4gICAgfVxuXG4gICAgLy8gT24gZGFyayB0aGVtZXMgd2Ugc2V0IHRoZSBuYXRpdmUgYHNlbGVjdGAgY29sb3IgdG8gc29tZSBzaGFkZSBvZiB3aGl0ZSxcbiAgICAvLyBob3dldmVyIHRoZSBjb2xvciBwcm9wYWdhdGVzIHRvIGFsbCBvZiB0aGUgYG9wdGlvbmAgZWxlbWVudHMsIHdoaWNoIGFyZVxuICAgIC8vIGFsd2F5cyBvbiBhIHdoaXRlIGJhY2tncm91bmQgaW5zaWRlIHRoZSBkcm9wZG93biwgY2F1c2luZyB0aGVtIHRvIGJsZW5kIGluLlxuICAgIC8vIFNpbmNlIHdlIGNhbid0IGNoYW5nZSBiYWNrZ3JvdW5kIG9mIHRoZSBkcm9wZG93biwgd2UgbmVlZCB0byBleHBsaWNpdGx5XG4gICAgLy8gcmVzZXQgdGhlIGNvbG9yIG9mIHRoZSBvcHRpb25zIHRvIHNvbWV0aGluZyBkYXJrLlxuICAgIEBpZiAobWFwLWdldCgkdGhlbWUsIGlzLWRhcmspKSB7XG4gICAgICBvcHRpb24ge1xuICAgICAgICBjb2xvcjogJGRhcmstcHJpbWFyeS10ZXh0O1xuICAgICAgfVxuXG4gICAgICBvcHRpb246ZGlzYWJsZWQge1xuICAgICAgICBjb2xvcjogJGRhcmstZGlzYWJsZWQtdGV4dDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubWF0LWFjY2VudCAubWF0LWlucHV0LWVsZW1lbnQge1xuICAgIGNhcmV0LWNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgdGV4dCk7XG4gIH1cblxuICAubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50LFxuICAubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWlucHV0LWVsZW1lbnQge1xuICAgIGNhcmV0LWNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVyIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWlucHV0LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAvLyBUaGUgdW5pdC1sZXNzIGxpbmUtaGVpZ2h0IGZyb20gdGhlIGZvbnQgY29uZmlnLlxuICAkbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBpbnB1dCk7XG5cbiAgLy8gVGhlIGFtb3VudCBvZiBzcGFjZSBiZXR3ZWVuIHRoZSB0b3Agb2YgdGhlIGxpbmUgYW5kIHRoZSB0b3Agb2YgdGhlIGFjdHVhbCB0ZXh0XG4gIC8vIChhcyBhIGZyYWN0aW9uIG9mIHRoZSBmb250LXNpemUpLlxuICAkbGluZS1zcGFjaW5nOiAoJGxpbmUtaGVpZ2h0IC0gMSkgLyAyO1xuXG4gIC8vIDxpbnB1dD4gZWxlbWVudHMgc2VlbSB0byBoYXZlIHRoZWlyIGhlaWdodCBzZXQgc2xpZ2h0bHkgdG9vIGxhcmdlIG9uIFNhZmFyaSBjYXVzaW5nIHRoZSB0ZXh0IHRvXG4gIC8vIGJlIG1pc2FsaWduZWQgdy5yLnQuIHRoZSBwbGFjZWhvbGRlci4gQWRkaW5nIHRoaXMgbWFyZ2luIGNvcnJlY3RzIGl0LlxuICBpbnB1dC5tYXQtaW5wdXQtZWxlbWVudCB7XG4gICAgbWFyZ2luLXRvcDogLSRsaW5lLXNwYWNpbmcgKiAxZW07XG4gIH1cbn1cblxuXG5cblxuXG5cblxuQG1peGluIG1hdC1saXN0LXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtbGlzdC1iYXNlIHtcbiAgICAubWF0LWxpc3QtaXRlbSB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICB9XG5cbiAgICAubWF0LWxpc3Qtb3B0aW9uIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIH1cblxuICAgIC5tYXQtc3ViaGVhZGVyIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgICB9XG4gIH1cblxuICAubWF0LWxpc3QtaXRlbS1kaXNhYmxlZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBkaXNhYmxlZC1saXN0LW9wdGlvbik7XG4gIH1cblxuICAubWF0LWxpc3Qtb3B0aW9uLFxuICAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLFxuICAubWF0LWFjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIHtcbiAgICAmOmhvdmVyLCAmOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2hvdmVyJyk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb24ge1xuICAgICYsICY6aG92ZXIsICY6Zm9jdXMge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3ZlciwgMC4xMik7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtbGlzdC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgJGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG5cbiAgLm1hdC1saXN0LWl0ZW0ge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHk7XG4gIH1cblxuICAubWF0LWxpc3Qtb3B0aW9uIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5O1xuICB9XG5cbiAgLy8gRGVmYXVsdCBsaXN0XG4gIC5tYXQtbGlzdC1iYXNlIHtcbiAgICAubWF0LWxpc3QtaXRlbSB7XG4gICAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgc3ViaGVhZGluZy0yKTtcbiAgICAgIEBpbmNsdWRlIG1hdC1saW5lLWJhc2UobWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpKTtcbiAgICB9XG5cbiAgICAubWF0LWxpc3Qtb3B0aW9uIHtcbiAgICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBzdWJoZWFkaW5nLTIpO1xuICAgICAgQGluY2x1ZGUgbWF0LWxpbmUtYmFzZShtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSkpO1xuICAgIH1cblxuICAgIC5tYXQtc3ViaGVhZGVyIHtcbiAgICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgYm9keS0yKTtcbiAgICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTIpO1xuICAgICAgZm9udC13ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIERlbnNlIGxpc3RcbiAgLm1hdC1saXN0LWJhc2VbZGVuc2VdIHtcbiAgICAubWF0LWxpc3QtaXRlbSB7XG4gICAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbik7XG4gICAgICBAaW5jbHVkZSBtYXQtbGluZS1iYXNlKG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbikpO1xuICAgIH1cblxuICAgIC5tYXQtbGlzdC1vcHRpb24ge1xuICAgICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pO1xuICAgICAgQGluY2x1ZGUgbWF0LWxpbmUtYmFzZShtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pKTtcbiAgICB9XG5cbiAgICAubWF0LXN1YmhlYWRlciB7XG4gICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5O1xuICAgICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pO1xuICAgICAgZm9udC13ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTIpO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LW1lbnUtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1tZW51LXBhbmVsIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbig0LCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2NhcmQnKTtcbiAgfVxuXG4gIC5tYXQtbWVudS1pdGVtIHtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCAndGV4dCcpO1xuXG4gICAgJltkaXNhYmxlZF0ge1xuICAgICAgJiwgJjo6YWZ0ZXIge1xuICAgICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCAnZGlzYWJsZWQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubWF0LW1lbnUtaXRlbSAubWF0LWljb24tbm8tY29sb3IsXG4gIC5tYXQtbWVudS1pdGVtLXN1Ym1lbnUtdHJpZ2dlcjo6YWZ0ZXIge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsICdpY29uJyk7XG4gIH1cblxuICAubWF0LW1lbnUtaXRlbTpob3ZlcixcbiAgLm1hdC1tZW51LWl0ZW0uY2RrLXByb2dyYW0tZm9jdXNlZCxcbiAgLm1hdC1tZW51LWl0ZW0uY2RrLWtleWJvYXJkLWZvY3VzZWQsXG4gIC5tYXQtbWVudS1pdGVtLWhpZ2hsaWdodGVkIHtcbiAgICAmOm5vdChbZGlzYWJsZWRdKSB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdob3ZlcicpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LW1lbnUtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtbWVudS1pdGVtIHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBib2R5LTEpO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0xKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtcGFnaW5hdG9yLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuXG4gIC5tYXQtcGFnaW5hdG9yIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdjYXJkJyk7XG4gIH1cblxuICAubWF0LXBhZ2luYXRvcixcbiAgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXIge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtcGFnaW5hdG9yLWRlY3JlbWVudCxcbiAgLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50IHtcbiAgICBib3JkZXItdG9wOiAycHggc29saWQgbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCAnaWNvbicpO1xuICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkIG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgJ2ljb24nKTtcbiAgfVxuXG4gIC5tYXQtcGFnaW5hdG9yLWZpcnN0LFxuICAubWF0LXBhZ2luYXRvci1sYXN0IHtcbiAgICBib3JkZXItdG9wOiAycHggc29saWQgbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCAnaWNvbicpO1xuICB9XG5cbiAgLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0ge1xuICAgIC5tYXQtcGFnaW5hdG9yLWRlY3JlbWVudCxcbiAgICAubWF0LXBhZ2luYXRvci1pbmNyZW1lbnQsXG4gICAgLm1hdC1wYWdpbmF0b3ItZmlyc3QsXG4gICAgLm1hdC1wYWdpbmF0b3ItbGFzdCB7XG4gICAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgJ2Rpc2FibGVkJyk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtcGFnaW5hdG9yLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXBhZ2luYXRvcixcbiAgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXIge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGNhcHRpb24pO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LXByb2dyZXNzLWJhci10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG5cbiAgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZCB7XG4gICAgZmlsbDogbWF0LWNvbG9yKCRwcmltYXJ5LCBsaWdodGVyKTtcbiAgfVxuXG4gIC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCBsaWdodGVyKTtcbiAgfVxuXG4gIC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnkpO1xuICB9XG5cbiAgLm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCB7XG4gICAgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZCB7XG4gICAgICBmaWxsOiBtYXQtY29sb3IoJGFjY2VudCwgbGlnaHRlcik7XG4gICAgfVxuXG4gICAgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCBsaWdodGVyKTtcbiAgICB9XG5cbiAgICAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4ge1xuICAgIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmQge1xuICAgICAgZmlsbDogbWF0LWNvbG9yKCR3YXJuLCBsaWdodGVyKTtcbiAgICB9XG5cbiAgICAubWF0LXByb2dyZXNzLWJhci1idWZmZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCR3YXJuLCBsaWdodGVyKTtcbiAgICB9XG5cbiAgICAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHdhcm4pO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXByb2dyZXNzLWJhci10eXBvZ3JhcGh5KCRjb25maWcpIHsgfVxuXG5cblxuXG5cblxuQG1peGluIG1hdC1wcm9ncmVzcy1zcGlubmVyLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcblxuICAubWF0LXByb2dyZXNzLXNwaW5uZXIsIC5tYXQtc3Bpbm5lciB7XG4gICAgY2lyY2xlIHtcbiAgICAgIHN0cm9rZTogbWF0LWNvbG9yKCRwcmltYXJ5KTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQgY2lyY2xlIHtcbiAgICAgIHN0cm9rZTogbWF0LWNvbG9yKCRhY2NlbnQpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4gY2lyY2xlIHtcbiAgICAgIHN0cm9rZTogbWF0LWNvbG9yKCR3YXJuKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1wcm9ncmVzcy1zcGlubmVyLXR5cG9ncmFwaHkoJGNvbmZpZykgeyB9XG5cblxuXG5cblxuQG1peGluIF9tYXQtcmFkaW8tY29sb3IoJHBhbGV0dGUpIHtcbiAgJi5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUpO1xuICB9XG5cbiAgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsXG4gIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUpLFxuICAmLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsXG4gICY6YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1yYWRpby10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1yYWRpby1vdXRlci1jaXJjbGUge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LXJhZGlvLWJ1dHRvbiB7XG4gICAgJi5tYXQtcHJpbWFyeSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXJhZGlvLWNvbG9yKCRwcmltYXJ5KTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgQGluY2x1ZGUgX21hdC1yYWRpby1jb2xvcigkYWNjZW50KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtcmFkaW8tY29sb3IoJHdhcm4pO1xuICAgIH1cblxuICAgIC8vIFRoaXMgbmVlZHMgZXh0cmEgc3BlY2lmaWNpdHksIGJlY2F1c2UgdGhlIGNsYXNzZXMgYWJvdmUgYXJlIGNvbWJpbmVkXG4gICAgLy8gKGUuZy4gYC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnRgKSB3aGljaCBpbmNyZWFzZXMgdGhlaXIgc3BlY2lmaWNpdHkgYSBsb3QuXG4gICAgLy8gVE9ETzogY29uc2lkZXIgbWFraW5nIHRoZSBzZWxlY3RvcnMgaW50byBkZXNjZW5kYW50cyAoYC5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLWJ1dHRvbmApLlxuICAgICYubWF0LXJhZGlvLWRpc2FibGVkIHtcbiAgICAgICYubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGUsXG4gICAgICAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZCk7XG4gICAgICB9XG5cbiAgICAgIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQsXG4gICAgICAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQpO1xuICAgICAgfVxuXG4gICAgICAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnQge1xuICAgICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3dpdGNoIHRoaXMgdG8gYSBzb2xpZCBjb2xvciBzaW5jZSB3ZSdyZSB1c2luZyBgb3BhY2l0eWBcbiAgICAvLyB0byBjb250cm9sIGhvdyBvcGFxdWUgdGhlIHJpcHBsZSBzaG91bGQgYmUuXG4gICAgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXBfZ2V0KCRmb3JlZ3JvdW5kLCBiYXNlKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1yYWRpby10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1yYWRpby1idXR0b24ge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cbn1cblxuXG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LXNlbGVjdC10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG5cbiAgLm1hdC1zZWxlY3QtdmFsdWUge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG5cbiAgLm1hdC1zZWxlY3QtcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiBfbWF0LWNvbnRyb2wtcGxhY2Vob2xkZXItY29sb3IoJHRoZW1lKTtcbiAgfVxuXG4gIC5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LXZhbHVlIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LXNlbGVjdC1wYW5lbCB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbig0LCAkdGhlbWUpO1xuXG4gICAgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSkge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3ZlciwgMC4xMik7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkIHtcbiAgICAmLm1hdC1mb2N1c2VkIHtcbiAgICAgICYubWF0LXByaW1hcnkgLm1hdC1zZWxlY3QtYXJyb3cge1xuICAgICAgICBjb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCB0ZXh0KTtcbiAgICAgIH1cblxuICAgICAgJi5tYXQtYWNjZW50IC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICAgICAgY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCB0ZXh0KTtcbiAgICAgIH1cblxuICAgICAgJi5tYXQtd2FybiAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtaW52YWxpZCAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgICB9XG5cbiAgICAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNlbGVjdC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLy8gVGhlIHVuaXQtbGVzcyBsaW5lLWhlaWdodCBmcm9tIHRoZSBmb250IGNvbmZpZy5cbiAgJGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgaW5wdXQpO1xuXG4gIC5tYXQtc2VsZWN0IHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC1zZWxlY3QtdHJpZ2dlciB7XG4gICAgaGVpZ2h0OiAkbGluZS1oZWlnaHQgKiAxZW07XG4gIH1cbn1cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtc2lkZW5hdi10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgJGRyYXdlci1iYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGRpYWxvZyk7XG4gICRkcmF3ZXItY29udGFpbmVyLWJhY2tncm91bmQtY29sb3I6ICBtYXQtY29sb3IoJGJhY2tncm91bmQsIGJhY2tncm91bmQpO1xuICAkZHJhd2VyLXB1c2gtYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBkaWFsb2cpO1xuICAkZHJhd2VyLXNpZGUtYm9yZGVyOiBzb2xpZCAxcHggbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcblxuICAubWF0LWRyYXdlci1jb250YWluZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRkcmF3ZXItY29udGFpbmVyLWJhY2tncm91bmQtY29sb3I7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cblxuICAubWF0LWRyYXdlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGRyYXdlci1iYWNrZ3JvdW5kLWNvbG9yO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gICAgJi5tYXQtZHJhd2VyLXB1c2gge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGRyYXdlci1wdXNoLWJhY2tncm91bmQtY29sb3I7XG4gICAgfVxuXG4gICAgJjpub3QoLm1hdC1kcmF3ZXItc2lkZSkge1xuICAgICAgLy8gVGhlIGVsZXZhdGlvbiBvZiB6LTE2IGlzIG5vdGVkIGluIHRoZSBkZXNpZ24gc3BlY2lmaWNhdGlvbnMuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9tYXRlcmlhbC5pby9kZXNpZ24vY29tcG9uZW50cy9uYXZpZ2F0aW9uLWRyYXdlci5odG1sXG4gICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigxNiwgJHRoZW1lKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWRyYXdlci1zaWRlIHtcbiAgICBib3JkZXItcmlnaHQ6ICRkcmF3ZXItc2lkZS1ib3JkZXI7XG5cbiAgICAmLm1hdC1kcmF3ZXItZW5kIHtcbiAgICAgIGJvcmRlci1sZWZ0OiAkZHJhd2VyLXNpZGUtYm9yZGVyO1xuICAgICAgYm9yZGVyLXJpZ2h0OiBub25lO1xuICAgIH1cbiAgfVxuXG4gIFtkaXI9J3J0bCddIC5tYXQtZHJhd2VyLXNpZGUge1xuICAgIGJvcmRlci1sZWZ0OiAkZHJhd2VyLXNpZGUtYm9yZGVyO1xuICAgIGJvcmRlci1yaWdodDogbm9uZTtcblxuICAgICYubWF0LWRyYXdlci1lbmQge1xuICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gICAgICBib3JkZXItcmlnaHQ6ICRkcmF3ZXItc2lkZS1ib3JkZXI7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1kcmF3ZXItYmFja2Ryb3AubWF0LWRyYXdlci1zaG93biB7XG4gICAgJG9wYWNpdHk6IDAuNjtcbiAgICAkYmFja2Ryb3AtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCwgJG9wYWNpdHkpO1xuXG4gICAgQGlmICh0eXBlLW9mKCRiYWNrZHJvcC1jb2xvcikgPT0gY29sb3IpIHtcbiAgICAgIC8vIFdlIHVzZSBpbnZlcnQoKSBoZXJlIHRvIGhhdmUgdGhlIGRhcmtlbiB0aGUgYmFja2dyb3VuZCBjb2xvciBleHBlY3RlZCB0byBiZSB1c2VkLiBJZiB0aGVcbiAgICAgIC8vIGJhY2tncm91bmQgaXMgbGlnaHQsIHdlIHVzZSBhIGRhcmsgYmFja2Ryb3AuIElmIHRoZSBiYWNrZ3JvdW5kIGlzIGRhcmssXG4gICAgICAvLyB3ZSB1c2UgYSBsaWdodCBiYWNrZHJvcC5cbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGludmVydCgkYmFja2Ryb3AtY29sb3IpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICAvLyBJZiB3ZSBjb3VsZG4ndCByZXNvbHZlIHRoZSBiYWNrZHJvcCBjb2xvciB0byBhIGNvbG9yIHZhbHVlLCBmYWxsIGJhY2sgdG8gdXNpbmdcbiAgICAgIC8vIGBvcGFjaXR5YCB0byBtYWtlIGl0IG9wYXF1ZSBzaW5jZSBpdHMgZW5kIHZhbHVlIGNvdWxkIGJlIGEgc29saWQgY29sb3IuXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2Ryb3AtY29sb3I7XG4gICAgICBvcGFjaXR5OiAkb3BhY2l0eTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1zaWRlbmF2LXR5cG9ncmFwaHkoJGNvbmZpZykgeyB9XG5cblxuXG5cblxuXG5AbWl4aW4gX21hdC1zbGlkZS10b2dnbGUtY2hlY2tlZCgkcGFsZXR0ZSwgJHRodW1iLWNoZWNrZWQtaHVlKSB7XG4gICYubWF0LWNoZWNrZWQge1xuICAgIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgJHRodW1iLWNoZWNrZWQtaHVlKTtcbiAgICB9XG5cbiAgICAubWF0LXNsaWRlLXRvZ2dsZS1iYXIge1xuICAgICAgLy8gT3BhY2l0eSBpcyBkZXRlcm1pbmVkIGZyb20gdGhlIHNwZWNzIGZvciB0aGUgc2VsZWN0aW9uIGNvbnRyb2xzLlxuICAgICAgLy8gU2VlOiBodHRwczovL21hdGVyaWFsLmlvL2Rlc2lnbi9jb21wb25lbnRzL3NlbGVjdGlvbi1jb250cm9scy5odG1sI3NwZWNzXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsICR0aHVtYi1jaGVja2VkLWh1ZSwgMC41NCk7XG4gICAgfVxuXG4gICAgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgICAvLyBTZXQgbm8gb3BhY2l0eSBmb3IgdGhlIHJpcHBsZXMgYmVjYXVzZSB0aGUgcmlwcGxlIG9wYWNpdHkgd2lsbCBiZSBhZGp1c3RlZCBkeW5hbWljYWxseVxuICAgICAgLy8gYmFzZWQgb24gdGhlIHR5cGUgb2YgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc2xpZGUtdG9nZ2xlIChlLmcuIGZvciBob3ZlciwgZm9jdXMpXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsICR0aHVtYi1jaGVja2VkLWh1ZSk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtc2xpZGUtdG9nZ2xlLXRoZW1lKCR0aGVtZSkge1xuICAkaXMtZGFyazogbWFwX2dldCgkdGhlbWUsIGlzLWRhcmspO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAvLyBDb2xvciBodWVzIGFyZSBiYXNlZCBvbiB0aGUgc3BlY3Mgd2hpY2ggYnJpZWZseSBzaG93IHRoZSBodWVzIHRoYXQgYXJlIGFwcGxpZWQgdG8gYSBzd2l0Y2guXG4gIC8vIFRoZSAyMDE4IHNwZWNzIG5vIGxvbmdlciBkZXNjcmliZSBob3cgZGFyayBzd2l0Y2hlcyBzaG91bGQgbG9vayBsaWtlLiBEdWUgdG8gdGhlIGxhY2sgb2ZcbiAgLy8gaW5mb3JtYXRpb24gZm9yIGRhcmsgdGhlbWVkIHN3aXRjaGVzLCB3ZSBwYXJ0aWFsbHkga2VlcCB0aGUgb2xkIGJlaGF2aW9yIHRoYXQgaXMgYmFzZWQgb25cbiAgLy8gdGhlIHByZXZpb3VzIHNwZWNpZmljYXRpb25zLiBGb3IgdGhlIGNoZWNrZWQgY29sb3Igd2UgYWx3YXlzIHVzZSB0aGUgYGRlZmF1bHRgIGh1ZSBiZWNhdXNlXG4gIC8vIHRoYXQgZm9sbG93cyBNREMgYW5kIGFsc28gbWFrZXMgaXQgZWFzaWVyIGZvciBwZW9wbGUgdG8gY3JlYXRlIGEgY3VzdG9tIHRoZW1lIHdpdGhvdXQgbmVlZGluZ1xuICAvLyB0byBzcGVjaWZ5IGVhY2ggaHVlIGluZGl2aWR1YWxseS5cbiAgJHRodW1iLXVuY2hlY2tlZC1odWU6IGlmKCRpcy1kYXJrLCA0MDAsIDUwKTtcbiAgJHRodW1iLWNoZWNrZWQtaHVlOiBkZWZhdWx0O1xuXG4gICRiYXItdW5jaGVja2VkLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkKTtcbiAgJHJpcHBsZS11bmNoZWNrZWQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgYmFzZSk7XG5cbiAgLm1hdC1zbGlkZS10b2dnbGUge1xuICAgIEBpbmNsdWRlIF9tYXQtc2xpZGUtdG9nZ2xlLWNoZWNrZWQoJGFjY2VudCwgJHRodW1iLWNoZWNrZWQtaHVlKTtcblxuICAgICYubWF0LXByaW1hcnkge1xuICAgICAgQGluY2x1ZGUgX21hdC1zbGlkZS10b2dnbGUtY2hlY2tlZCgkcHJpbWFyeSwgJHRodW1iLWNoZWNrZWQtaHVlKTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtc2xpZGUtdG9nZ2xlLWNoZWNrZWQoJHdhcm4sICR0aHVtYi1jaGVja2VkLWh1ZSk7XG4gICAgfVxuXG4gICAgJjpub3QoLm1hdC1jaGVja2VkKSAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAgIC8vIFNldCBubyBvcGFjaXR5IGZvciB0aGUgcmlwcGxlcyBiZWNhdXNlIHRoZSByaXBwbGUgb3BhY2l0eSB3aWxsIGJlIGFkanVzdGVkIGR5bmFtaWNhbGx5XG4gICAgICAvLyBiYXNlZCBvbiB0aGUgdHlwZSBvZiBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzbGlkZS10b2dnbGUgKGUuZy4gZm9yIGhvdmVyLCBmb2N1cylcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRyaXBwbGUtdW5jaGVja2VkLWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigxLCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkbWF0LWdyZXksICR0aHVtYi11bmNoZWNrZWQtaHVlKTtcbiAgfVxuXG4gIC5tYXQtc2xpZGUtdG9nZ2xlLWJhciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGJhci11bmNoZWNrZWQtY29sb3I7XG4gIH1cbn1cblxuQG1peGluIG1hdC1zbGlkZS10b2dnbGUtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnQge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gX21hdC1zbGlkZXItaW5uZXItY29udGVudC10aGVtZSgkcGFsZXR0ZSkge1xuICAubWF0LXNsaWRlci10cmFjay1maWxsLFxuICAubWF0LXNsaWRlci10aHVtYixcbiAgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSk7XG4gIH1cblxuICAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0IHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNsaWRlci10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgJG1hdC1zbGlkZXItb2ZmLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNsaWRlci1vZmYpO1xuICAkbWF0LXNsaWRlci1vZmYtZm9jdXNlZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzbGlkZXItb2ZmLWFjdGl2ZSk7XG4gICRtYXQtc2xpZGVyLWRpc2FibGVkLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNsaWRlci1vZmYpO1xuICAkbWF0LXNsaWRlci1sYWJlbGVkLW1pbi12YWx1ZS10aHVtYi1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzbGlkZXItbWluKTtcbiAgJG1hdC1zbGlkZXItbGFiZWxlZC1taW4tdmFsdWUtdGh1bWItbGFiZWwtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2xpZGVyLW9mZik7XG4gICRtYXQtc2xpZGVyLXRpY2stb3BhY2l0eTogMC43O1xuICAkbWF0LXNsaWRlci10aWNrLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGJhc2UsICRtYXQtc2xpZGVyLXRpY2stb3BhY2l0eSk7XG4gICRtYXQtc2xpZGVyLXRpY2stc2l6ZTogMnB4O1xuXG4gIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRtYXQtc2xpZGVyLW9mZi1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtcHJpbWFyeSB7XG4gICAgQGluY2x1ZGUgX21hdC1zbGlkZXItaW5uZXItY29udGVudC10aGVtZSgkcHJpbWFyeSk7XG4gIH1cblxuICAubWF0LWFjY2VudCB7XG4gICAgQGluY2x1ZGUgX21hdC1zbGlkZXItaW5uZXItY29udGVudC10aGVtZSgkYWNjZW50KTtcbiAgfVxuXG4gIC5tYXQtd2FybiB7XG4gICAgQGluY2x1ZGUgX21hdC1zbGlkZXItaW5uZXItY29udGVudC10aGVtZSgkd2Fybik7XG4gIH1cblxuICAubWF0LXNsaWRlci1mb2N1cy1yaW5nIHtcbiAgICAkb3BhY2l0eTogMC4yO1xuICAgICRjb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIGRlZmF1bHQsICRvcGFjaXR5KTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3I7XG5cbiAgICAvLyBgbWF0LWNvbG9yYCB1c2VzIGByZ2JhYCBmb3IgdGhlIG9wYWNpdHkgd2hpY2ggd29uJ3Qgd29yayB3aXRoXG4gICAgLy8gQ1NTIHZhcmlhYmxlcyBzbyB3ZSBuZWVkIHRvIHVzZSBgb3BhY2l0eWAgYXMgYSBmYWxsYmFjay5cbiAgICBAaWYgKHR5cGUtb2YoJGNvbG9yKSAhPSBjb2xvcikge1xuICAgICAgb3BhY2l0eTogJG9wYWNpdHk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbGlkZXI6aG92ZXIsXG4gIC5jZGstZm9jdXNlZCB7XG4gICAgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbWF0LXNsaWRlci1vZmYtZm9jdXNlZC1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAubWF0LXNsaWRlci1kaXNhYmxlZCB7XG4gICAgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCxcbiAgICAubWF0LXNsaWRlci10cmFjay1maWxsLFxuICAgIC5tYXQtc2xpZGVyLXRodW1iIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRtYXQtc2xpZGVyLWRpc2FibGVkLWNvbG9yO1xuICAgIH1cblxuICAgICY6aG92ZXIge1xuICAgICAgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRtYXQtc2xpZGVyLWRpc2FibGVkLWNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2xpZGVyLW1pbi12YWx1ZSB7XG4gICAgLm1hdC1zbGlkZXItZm9jdXMtcmluZyB7XG4gICAgICAkb3BhY2l0eTogMC4xMjtcbiAgICAgICRjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBiYXNlLCAkb3BhY2l0eSk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3I7XG5cbiAgICAgIC8vIGBtYXQtY29sb3JgIHVzZXMgYHJnYmFgIGZvciB0aGUgb3BhY2l0eSB3aGljaCB3b24ndCB3b3JrIHdpdGhcbiAgICAgIC8vIENTUyB2YXJpYWJsZXMgc28gd2UgbmVlZCB0byB1c2UgYG9wYWNpdHlgIGFzIGEgZmFsbGJhY2suXG4gICAgICBAaWYgKHR5cGUtb2YoJGNvbG9yKSAhPSBjb2xvcikge1xuICAgICAgICBvcGFjaXR5OiAkb3BhY2l0eTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyB7XG4gICAgICAubWF0LXNsaWRlci10aHVtYixcbiAgICAgIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG1hdC1zbGlkZXItbGFiZWxlZC1taW4tdmFsdWUtdGh1bWItY29sb3I7XG4gICAgICB9XG5cbiAgICAgICYuY2RrLWZvY3VzZWQge1xuICAgICAgICAubWF0LXNsaWRlci10aHVtYixcbiAgICAgICAgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRtYXQtc2xpZGVyLWxhYmVsZWQtbWluLXZhbHVlLXRodW1iLWxhYmVsLWNvbG9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykge1xuICAgICAgLm1hdC1zbGlkZXItdGh1bWIge1xuICAgICAgICBib3JkZXItY29sb3I6ICRtYXQtc2xpZGVyLW9mZi1jb2xvcjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXIsXG4gICAgICAmLmNkay1mb2N1c2VkIHtcbiAgICAgICAgLm1hdC1zbGlkZXItdGh1bWIge1xuICAgICAgICAgIGJvcmRlci1jb2xvcjogJG1hdC1zbGlkZXItb2ZmLWZvY3VzZWQtY29sb3I7XG4gICAgICAgIH1cblxuICAgICAgICAmLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWIge1xuICAgICAgICAgIGJvcmRlci1jb2xvcjogJG1hdC1zbGlkZXItZGlzYWJsZWQtY29sb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubWF0LXNsaWRlci1oYXMtdGlja3MgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXIge1xuICAgIGJvcmRlci1jb2xvcjogJG1hdC1zbGlkZXItdGljay1jb2xvcjtcblxuICAgIC8vIGBtYXQtY29sb3JgIHVzZXMgYHJnYmFgIGZvciB0aGUgb3BhY2l0eSB3aGljaCB3b24ndCB3b3JrIHdpdGhcbiAgICAvLyBDU1MgdmFyaWFibGVzIHNvIHdlIG5lZWQgdG8gdXNlIGBvcGFjaXR5YCBhcyBhIGZhbGxiYWNrLlxuICAgIEBpZiAodHlwZS1vZigkbWF0LXNsaWRlci10aWNrLWNvbG9yKSAhPSBjb2xvcikge1xuICAgICAgb3BhY2l0eTogJG1hdC1zbGlkZXItdGljay1vcGFjaXR5O1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGlja3Mge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICRtYXQtc2xpZGVyLXRpY2stY29sb3IsXG4gICAgICAgICRtYXQtc2xpZGVyLXRpY2stY29sb3IgJG1hdC1zbGlkZXItdGljay1zaXplLCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCk7XG4gICAgLy8gRmlyZWZveCBkb2Vzbid0IGRyYXcgdGhlIGdyYWRpZW50IGNvcnJlY3RseSB3aXRoICd0byByaWdodCdcbiAgICAvLyAoc2VlIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTQzMTkpLlxuICAgIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgwLjAwMDFkZWcsICRtYXQtc2xpZGVyLXRpY2stY29sb3IsXG4gICAgICAgICRtYXQtc2xpZGVyLXRpY2stY29sb3IgJG1hdC1zbGlkZXItdGljay1zaXplLCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCk7XG5cbiAgICAvLyBgbWF0LWNvbG9yYCB1c2VzIGByZ2JhYCBmb3IgdGhlIG9wYWNpdHkgd2hpY2ggd29uJ3Qgd29yayB3aXRoXG4gICAgLy8gQ1NTIHZhcmlhYmxlcyBzbyB3ZSBuZWVkIHRvIHVzZSBgb3BhY2l0eWAgYXMgYSBmYWxsYmFjay5cbiAgICBAaWYgKHR5cGUtb2YoJG1hdC1zbGlkZXItdGljay1jb2xvcikgIT0gY29sb3IpIHtcbiAgICAgIG9wYWNpdHk6ICRtYXQtc2xpZGVyLXRpY2stb3BhY2l0eTtcbiAgICB9XG4gIH1cblxuICAubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrcyB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICRtYXQtc2xpZGVyLXRpY2stY29sb3IsXG4gICAgICAgICRtYXQtc2xpZGVyLXRpY2stY29sb3IgJG1hdC1zbGlkZXItdGljay1zaXplLCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCk7XG5cbiAgICAvLyBgbWF0LWNvbG9yYCB1c2VzIGByZ2JhYCBmb3IgdGhlIG9wYWNpdHkgd2hpY2ggd29uJ3Qgd29yayB3aXRoXG4gICAgLy8gQ1NTIHZhcmlhYmxlcyBzbyB3ZSBuZWVkIHRvIHVzZSBgb3BhY2l0eWAgYXMgYSBmYWxsYmFjay5cbiAgICBAaWYgKHR5cGUtb2YoJG1hdC1zbGlkZXItdGljay1jb2xvcikgIT0gY29sb3IpIHtcbiAgICAgIG9wYWNpdHk6ICRtYXQtc2xpZGVyLXRpY2stb3BhY2l0eTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1zbGlkZXItdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHQge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMik7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuQG1peGluIG1hdC1zdGVwcGVyLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuXG4gIC5tYXQtc3RlcC1oZWFkZXIge1xuICAgICYuY2RrLWtleWJvYXJkLWZvY3VzZWQsXG4gICAgJi5jZGstcHJvZ3JhbS1mb2N1c2VkLFxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3Zlcik7XG4gICAgfVxuXG4gICAgLy8gT24gdG91Y2ggZGV2aWNlcyB0aGUgOmhvdmVyIHN0YXRlIHdpbGwgbGluZ2VyIG9uIHRoZSBlbGVtZW50IGFmdGVyIGEgdGFwLlxuICAgIC8vIFJlc2V0IGl0IHZpYSBgQG1lZGlhYCBhZnRlciB0aGUgZGVjbGFyYXRpb24sIGJlY2F1c2UgdGhlIG1lZGlhIHF1ZXJ5IGlzbid0XG4gICAgLy8gc3VwcG9ydGVkIGJ5IGFsbCBicm93c2VycyB5ZXQuXG4gICAgQG1lZGlhIChob3Zlcjogbm9uZSkge1xuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLm1hdC1zdGVwLWxhYmVsLFxuICAgIC5tYXQtc3RlcC1vcHRpb25hbCB7XG4gICAgICAvLyBUT0RPKGpvc2VwaHBlcnJvdHQpOiBVcGRhdGUgdG8gdXNpbmcgYSBjb3JyZWN0ZWQgZGlzYWJsZWQtdGV4dCBjb250cmFzdFxuICAgICAgLy8gaW5zdGVhZCBvZiBzZWNvbmRhcnktdGV4dC5cbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgICB9XG5cbiAgICAubWF0LXN0ZXAtaWNvbiB7XG4gICAgICAvLyBUT0RPKGpvc2VwaHBlcnJvdHQpOiBVcGRhdGUgdG8gdXNpbmcgYSBjb3JyZWN0ZWQgZGlzYWJsZWQtdGV4dCBjb250cmFzdFxuICAgICAgLy8gaW5zdGVhZCBvZiBzZWNvbmRhcnktdGV4dC5cbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgZGVmYXVsdC1jb250cmFzdCk7XG4gICAgfVxuXG4gICAgLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsXG4gICAgLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSxcbiAgICAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgICB9XG5cbiAgICAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lcnJvciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICAgIH1cblxuICAgIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1hY3RpdmUge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgfVxuXG4gICAgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWVycm9yIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLCAubWF0LXN0ZXBwZXItdmVydGljYWwge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gIH1cblxuICAubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3JlIHtcbiAgICBib3JkZXItbGVmdC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxuXG4gIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3JlLFxuICAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLFxuICAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5lIHtcbiAgICBib3JkZXItdG9wLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtc3RlcHBlci10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1zdGVwcGVyLXZlcnRpY2FsLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbCB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtc3RlcC1sYWJlbCB7XG4gICAgZm9udDoge1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0xKTtcbiAgICB9O1xuICB9XG5cbiAgLm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvciB7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgfVxuXG4gIC5tYXQtc3RlcC1sYWJlbC1lcnJvciB7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMik7XG4gIH1cblxuICAubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWQge1xuICAgIGZvbnQ6IHtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0yKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMik7XG4gICAgfTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNvcnQtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1zb3J0LWhlYWRlci1hcnJvdyB7XG4gICAgJHRhYmxlLWJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2NhcmQnKTtcbiAgICAkdGV4dC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG5cbiAgICAvLyBCZWNhdXNlIHRoZSBhcnJvdyBpcyBtYWRlIHVwIG9mIG11bHRpcGxlIGVsZW1lbnRzIHRoYXQgYXJlIHN0YWNrZWQgb24gdG9wIG9mIGVhY2ggb3RoZXIsXG4gICAgLy8gd2UgY2FuJ3QgdXNlIHRoZSBzZW1pLXRyYXNwYXJlbnQgY29sb3IgZnJvbSB0aGUgdGhlbWUgZGlyZWN0bHkuIElmIHRoZSB2YWx1ZSBpcyBhIGNvbG9yXG4gICAgLy8gKnR5cGUqLCB3ZSBjb252ZXJ0IGl0IGludG8gYSBzb2xpZCBjb2xvciBieSB0YWtpbmcgdGhlIG9wYWNpdHkgZnJvbSB0aGUgcmdiYSB2YWx1ZSBhbmRcbiAgICAvLyB1c2luZyB0aGUgdmFsdWUgdG8gZGV0ZXJtaW5lIHRoZSBwZXJjZW50YWdlIG9mIHRoZSBiYWNrZ3JvdW5kIHRvIHB1dCBpbnRvIGZvcmVncm91bmRcbiAgICAvLyB3aGVuIG1peGluZyB0aGUgY29sb3JzIHRvZ2V0aGVyLiBPdGhlcndpc2UsIGlmIGl0IHJlc29sdmVzIHRvIHNvbWV0aGluZyBkaWZmZXJlbnRcbiAgICAvLyAoZS5nLiBpdCByZXNvbHZlcyB0byBhIENTUyB2YXJpYWJsZSksIHdlIHVzZSB0aGUgY29sb3IgZGlyZWN0bHkuXG4gICAgQGlmICh0eXBlLW9mKCR0YWJsZS1iYWNrZ3JvdW5kKSA9PSBjb2xvciBhbmQgdHlwZS1vZigkdGV4dC1jb2xvcikgPT0gY29sb3IpIHtcbiAgICAgICR0ZXh0LW9wYWNpdHk6IG9wYWNpdHkoJHRleHQtY29sb3IpO1xuICAgICAgY29sb3I6IG1peCgkdGFibGUtYmFja2dyb3VuZCwgcmdiYSgkdGV4dC1jb2xvciwgMSksICgxIC0gJHRleHQtb3BhY2l0eSkgKiAxMDAlKTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgY29sb3I6ICR0ZXh0LWNvbG9yO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNvcnQtdHlwb2dyYXBoeSgkY29uZmlnKSB7IH1cblxuXG5cblxuXG5AbWl4aW4gbWF0LXRhYnMtdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkaGVhZGVyLWJvcmRlcjogMXB4IHNvbGlkIG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG5cbiAgLm1hdC10YWItbmF2LWJhcixcbiAgLm1hdC10YWItaGVhZGVyIHtcbiAgICBib3JkZXItYm90dG9tOiAkaGVhZGVyLWJvcmRlcjtcbiAgfVxuXG4gIC5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciB7XG4gICAgLm1hdC10YWItbmF2LWJhcixcbiAgICAubWF0LXRhYi1oZWFkZXIge1xuICAgICAgYm9yZGVyLXRvcDogJGhlYWRlci1ib3JkZXI7XG4gICAgICBib3JkZXItYm90dG9tOiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtdGFiLWxhYmVsLCAubWF0LXRhYi1saW5rIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAgICYubWF0LXRhYi1kaXNhYmxlZCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgICB9XG4gIH1cblxuICAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cblxuICAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gIH1cblxuICAvLyBSZW1vdmUgaGVhZGVyIGJvcmRlciB3aGVuIHRoZXJlIGlzIGEgYmFja2dyb3VuZCBjb2xvclxuICAubWF0LXRhYi1ncm91cFtjbGFzcyo9J21hdC1iYWNrZ3JvdW5kLSddIC5tYXQtdGFiLWhlYWRlcixcbiAgLm1hdC10YWItbmF2LWJhcltjbGFzcyo9J21hdC1iYWNrZ3JvdW5kLSddIHtcbiAgICBib3JkZXItYm90dG9tOiBub25lO1xuICAgIGJvcmRlci10b3A6IG5vbmU7XG4gIH1cblxuICAubWF0LXRhYi1ncm91cCwgLm1hdC10YWItbmF2LWJhciB7XG4gICAgJHRoZW1lLWNvbG9yczogKFxuICAgICAgcHJpbWFyeTogJHByaW1hcnksXG4gICAgICBhY2NlbnQ6ICRhY2NlbnQsXG4gICAgICB3YXJuOiAkd2FyblxuICAgICk7XG5cbiAgICBAZWFjaCAkbmFtZSwgJGNvbG9yIGluICR0aGVtZS1jb2xvcnMge1xuICAgICAgLy8gU2V0IHRoZSBmb3JlZ3JvdW5kIGNvbG9yIG9mIHRoZSB0YWJzXG4gICAgICAmLm1hdC0jeyRuYW1lfSB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtdGFiLWxhYmVsLWZvY3VzKCRjb2xvcik7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtaW5rLWJhcigkY29sb3IpO1xuXG4gICAgICAgIC8vIE92ZXJyaWRlIGluayBiYXIgd2hlbiBiYWNrZ3JvdW5kIGNvbG9yIGlzIHRoZSBzYW1lXG4gICAgICAgICYubWF0LWJhY2tncm91bmQtI3skbmFtZX0ge1xuICAgICAgICAgIEBpbmNsdWRlIF9tYXQtaW5rLWJhcigkY29sb3IsIGRlZmF1bHQtY29udHJhc3QpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGVhY2ggJG5hbWUsICRjb2xvciBpbiAkdGhlbWUtY29sb3JzIHtcbiAgICAgIC8vIFNldCBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSB0YWJzIGFuZCBvdmVycmlkZSBmb2N1cyBjb2xvclxuICAgICAgJi5tYXQtYmFja2dyb3VuZC0jeyRuYW1lfSB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtdGFiLWxhYmVsLWZvY3VzKCRjb2xvcik7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtdGFicy1iYWNrZ3JvdW5kKCRjb2xvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBfbWF0LWluay1iYXIoJGNvbG9yLCAkaHVlOiBkZWZhdWx0KSB7XG4gIC5tYXQtaW5rLWJhciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRjb2xvciwgJGh1ZSk7XG4gIH1cbn1cblxuQG1peGluIF9tYXQtdGFiLWxhYmVsLWZvY3VzKCR0YWItZm9jdXMtY29sb3IpIHtcbiAgLm1hdC10YWItbGFiZWwsXG4gIC5tYXQtdGFiLWxpbmsge1xuICAgICYuY2RrLWtleWJvYXJkLWZvY3VzZWQsXG4gICAgJi5jZGstcHJvZ3JhbS1mb2N1c2VkIHtcbiAgICAgICY6bm90KC5tYXQtdGFiLWRpc2FibGVkKSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkdGFiLWZvY3VzLWNvbG9yLCBsaWdodGVyLCAwLjMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gX21hdC10YWJzLWJhY2tncm91bmQoJGJhY2tncm91bmQtY29sb3IpIHtcbiAgLy8gU2V0IGJhY2tncm91bmQgY29sb3IgZm9yIHRoZSB0YWIgZ3JvdXBcbiAgLm1hdC10YWItaGVhZGVyLCAubWF0LXRhYi1saW5rcywgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24ge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZC1jb2xvcik7XG4gIH1cblxuICAvLyBTZXQgbGFiZWxzIHRvIGNvbnRyYXN0IGFnYWluc3QgYmFja2dyb3VuZFxuICAubWF0LXRhYi1sYWJlbCwgLm1hdC10YWItbGluayB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZC1jb2xvciwgZGVmYXVsdC1jb250cmFzdCk7XG5cbiAgICAmLm1hdC10YWItZGlzYWJsZWQge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZC1jb2xvciwgZGVmYXVsdC1jb250cmFzdCwgMC40KTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXQgcGFnaW5hdGlvbiBjaGV2cm9ucyB0byBjb250cmFzdCBiYWNrZ3JvdW5kXG4gIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24ge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLWNvbG9yLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgfVxuXG4gIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24ge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLWNvbG9yLCBkZWZhdWx0LWNvbnRyYXN0LCAwLjQpO1xuICB9XG5cbiAgLy8gU2V0IHJpcHBsZXMgY29sb3IgdG8gYmUgdGhlIGNvbnRyYXN0IGNvbG9yIG9mIHRoZSBuZXcgYmFja2dyb3VuZC4gT3RoZXJ3aXNlIHRoZSByaXBwbGVcbiAgLy8gY29sb3Igd2lsbCBiZSBiYXNlZCBvbiB0aGUgYXBwIGJhY2tncm91bmQgY29sb3IuXG4gIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZC1jb2xvciwgZGVmYXVsdC1jb250cmFzdCwgMC4xMik7XG4gIH1cbn1cblxuQG1peGluIG1hdC10YWJzLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXRhYi1ncm91cCB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtdGFiLWxhYmVsLCAubWF0LXRhYi1saW5rIHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBidXR0b24pO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBidXR0b24pO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYnV0dG9uKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cbkBtaXhpbiBfbWF0LXRvb2xiYXItY29sb3IoJHBhbGV0dGUpIHtcbiAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRwYWxldHRlKTtcbiAgY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgZGVmYXVsdC1jb250cmFzdCk7XG59XG5cbkBtaXhpbiBfbWF0LXRvb2xiYXItZm9ybS1maWVsZC1vdmVycmlkZXMge1xuICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lLFxuICAubWF0LWZvcm0tZmllbGQtcmlwcGxlLFxuICAubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLFxuICAubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLFxuICAubWF0LXNlbGVjdC12YWx1ZSxcbiAgLm1hdC1zZWxlY3QtYXJyb3csXG4gIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgY29sb3I6IGluaGVyaXQ7XG4gIH1cblxuICAubWF0LWlucHV0LWVsZW1lbnQge1xuICAgIGNhcmV0LWNvbG9yOiBjdXJyZW50Q29sb3I7XG4gIH1cbn1cblxuQG1peGluIG1hdC10b29sYmFyLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LXRvb2xiYXIge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgYXBwLWJhcik7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgICAmLm1hdC1wcmltYXJ5IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdG9vbGJhci1jb2xvcigkcHJpbWFyeSk7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdG9vbGJhci1jb2xvcigkYWNjZW50KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdG9vbGJhci1jb2xvcigkd2Fybik7XG4gICAgfVxuXG4gICAgQGluY2x1ZGUgX21hdC10b29sYmFyLWZvcm0tZmllbGQtb3ZlcnJpZGVzO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtdG9vbGJhci10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC10b29sYmFyLFxuICAubWF0LXRvb2xiYXIgaDEsXG4gIC5tYXQtdG9vbGJhciBoMixcbiAgLm1hdC10b29sYmFyIGgzLFxuICAubWF0LXRvb2xiYXIgaDQsXG4gIC5tYXQtdG9vbGJhciBoNSxcbiAgLm1hdC10b29sYmFyIGg2IHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgdGl0bGUpO1xuICAgIG1hcmdpbjogMDtcbiAgfVxufVxuXG5cblxuXG5cbiRtYXQtdG9vbHRpcC10YXJnZXQtaGVpZ2h0OiAyMnB4O1xuJG1hdC10b29sdGlwLWZvbnQtc2l6ZTogMTBweDtcbiRtYXQtdG9vbHRpcC12ZXJ0aWNhbC1wYWRkaW5nOiAoJG1hdC10b29sdGlwLXRhcmdldC1oZWlnaHQgLSAkbWF0LXRvb2x0aXAtZm9udC1zaXplKSAvIDI7XG5cbiRtYXQtdG9vbHRpcC1oYW5kc2V0LXRhcmdldC1oZWlnaHQ6IDMwcHg7XG4kbWF0LXRvb2x0aXAtaGFuZHNldC1mb250LXNpemU6IDE0cHg7XG4kbWF0LXRvb2x0aXAtaGFuZHNldC12ZXJ0aWNhbC1wYWRkaW5nOlxuICAgICgkbWF0LXRvb2x0aXAtaGFuZHNldC10YXJnZXQtaGVpZ2h0IC0gJG1hdC10b29sdGlwLWhhbmRzZXQtZm9udC1zaXplKSAvIDI7XG5cbkBtaXhpbiBtYXQtdG9vbHRpcC10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcblxuICAubWF0LXRvb2x0aXAge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgdG9vbHRpcCwgMC45KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXRvb2x0aXAtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtdG9vbHRpcCB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgICBmb250LXNpemU6ICRtYXQtdG9vbHRpcC1mb250LXNpemU7XG4gICAgcGFkZGluZy10b3A6ICRtYXQtdG9vbHRpcC12ZXJ0aWNhbC1wYWRkaW5nO1xuICAgIHBhZGRpbmctYm90dG9tOiAkbWF0LXRvb2x0aXAtdmVydGljYWwtcGFkZGluZztcbiAgfVxuXG4gIC5tYXQtdG9vbHRpcC1oYW5kc2V0IHtcbiAgICBmb250LXNpemU6ICRtYXQtdG9vbHRpcC1oYW5kc2V0LWZvbnQtc2l6ZTtcbiAgICBwYWRkaW5nLXRvcDogJG1hdC10b29sdGlwLWhhbmRzZXQtdmVydGljYWwtcGFkZGluZztcbiAgICBwYWRkaW5nLWJvdHRvbTogJG1hdC10b29sdGlwLWhhbmRzZXQtdmVydGljYWwtcGFkZGluZztcbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtc25hY2stYmFyLXRoZW1lKCR0aGVtZSkge1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcblxuICAubWF0LXNuYWNrLWJhci1jb250YWluZXIge1xuICAgIC8vIFVzZSB0aGUgcHJpbWFyeSB0ZXh0IG9uIHRoZSBkYXJrIHRoZW1lLCBldmVuIHRob3VnaCB0aGUgbGlnaHRlciBvbmUgdXNlc1xuICAgIC8vIGEgc2Vjb25kYXJ5LCBiZWNhdXNlIHRoZSBjb250cmFzdCBvbiB0aGUgbGlnaHQgcHJpbWFyeSB0ZXh0IGlzIHBvb3IuXG4gICAgY29sb3I6IGlmKCRpcy1kYXJrLXRoZW1lLCAkZGFyay1wcmltYXJ5LXRleHQsICRsaWdodC1zZWNvbmRhcnktdGV4dCk7XG4gICAgYmFja2dyb3VuZDogaWYoJGlzLWRhcmstdGhlbWUsIG1hcC1nZXQoJG1hdC1ncmV5LCA1MCksICMzMjMyMzIpO1xuXG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oNiwgJHRoZW1lKTtcbiAgfVxuXG4gIC5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbiB7XG4gICAgY29sb3I6IGlmKCRpcy1kYXJrLXRoZW1lLCBpbmhlcml0LCBtYXQtY29sb3IoJGFjY2VudCwgdGV4dCkpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtc25hY2stYmFyLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXNpbXBsZS1zbmFja2JhciB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgYm9keS0xKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKTtcbiAgICB9XG4gIH1cblxuICAubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb24ge1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogaW5oZXJpdDtcbiAgICAgIHNpemU6IGluaGVyaXQ7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBidXR0b24pO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8vIFRoZW1lIHN0eWxlcyB0aGF0IG9ubHkgYXBwbHkgdG8gdGhlIGZpbGwgYXBwZWFyYW5jZSBvZiB0aGUgZm9ybS1maWVsZC5cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLWZpbGwtdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG5cbiAgJGZpbGwtYmFja2dyb3VuZDogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBiYXNlLCBpZigkaXMtZGFyay10aGVtZSwgMC4xLCAwLjA0KSk7XG4gICRmaWxsLWRpc2FibGVkLWJhY2tncm91bmQ6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgYmFzZSwgaWYoJGlzLWRhcmstdGhlbWUsIDAuMDUsIDAuMDIpKTtcbiAgJHVuZGVybGluZS1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyLCBpZigkaXMtZGFyay10aGVtZSwgMC41LCAwLjQyKSk7XG4gICRsYWJlbC1kaXNhYmxlZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcblxuICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIHtcbiAgICAubWF0LWZvcm0tZmllbGQtZmxleCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZmlsbC1iYWNrZ3JvdW5kO1xuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWZsZXgge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGZpbGwtZGlzYWJsZWQtYmFja2dyb3VuZDtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1jb2xvcjtcbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIHtcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIGNvbG9yOiAkbGFiZWwtZGlzYWJsZWQtY29sb3I7XG4gICAgICB9XG5cbiAgICAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBVc2VkIHRvIG1ha2UgaW5zdGFuY2VzIG9mIHRoZSBfbWF0LWZvcm0tZmllbGQtbGFiZWwtZmxvYXRpbmcgbWl4aW4gbmVnbGlnaWJseSBkaWZmZXJlbnQsXG4vLyBhbmQgcHJldmVudCBHb29nbGUncyBDU1MgT3B0aW1pemVyIGZyb20gY29sbGFwc2luZyB0aGUgZGVjbGFyYXRpb25zLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHNvbWVcbi8vIG9mIHRoZSBzZWxlY3RvcnMgY29udGFpbiBwc2V1ZG8tY2xhc3NlcyBub3QgcmVjb2duaXplZCBpbiBhbGwgYnJvd3NlcnMuIElmIGEgYnJvd3NlciBlbmNvdW50ZXJzXG4vLyBhbiB1bmtub3duIHBzZXVkby1jbGFzcyBpdCB3aWxsIGRpc2NhcmQgdGhlIGVudGlyZSBydWxlIHNldC5cbiRtYXQtZm9ybS1maWVsZC1maWxsLWRlZHVwZTogMDtcblxuLy8gQXBwbGllcyBhIGZsb2F0aW5nIGxhYmVsIGFib3ZlIHRoZSBmb3JtIGZpZWxkIGNvbnRyb2wgaXRzZWxmLlxuQG1peGluIF9tYXQtZm9ybS1maWVsZC1maWxsLWxhYmVsLWZsb2F0aW5nKCRmb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kaW5maXgtbWFyZ2luLXRvcCAtICRpbmZpeC1wYWRkaW5nICsgJG1hdC1mb3JtLWZpZWxkLWZpbGwtZGVkdXBlKVxuICAgICAgICAgICAgIHNjYWxlKCRmb250LXNjYWxlKTtcbiAgd2lkdGg6IDEwMCUgLyAkZm9udC1zY2FsZSArICRtYXQtZm9ybS1maWVsZC1maWxsLWRlZHVwZTtcblxuICAkbWF0LWZvcm0tZmllbGQtZmlsbC1kZWR1cGU6ICRtYXQtZm9ybS1maWVsZC1maWxsLWRlZHVwZSArIDAuMDAwMDEgIWdsb2JhbDtcbn1cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLWZpbGwtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC8vIFRoZSB1bml0LWxlc3MgbGluZS1oZWlnaHQgZnJvbSB0aGUgZm9udCBjb25maWcuXG4gICRsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGlucHV0KTtcbiAgLy8gVGhlIGFtb3VudCB0byBzY2FsZSB0aGUgZm9udCBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsIGFuZCBzdWJzY3JpcHQuXG4gICRzdWJzY3JpcHQtZm9udC1zY2FsZTogMC43NTtcbiAgLy8gVGhlIHBhZGRpbmcgb24gdG9wIG9mIHRoZSBpbmZpeC5cbiAgJGluZml4LXBhZGRpbmctdG9wOiAwLjI1ZW07XG4gIC8vIFRoZSBwYWRkaW5nIGJlbG93IHRoZSBpbmZpeC5cbiAgJGluZml4LXBhZGRpbmctYm90dG9tOiAwLjc1ZW07XG4gIC8vIFRoZSBtYXJnaW4gYXBwbGllZCB0byB0aGUgZm9ybS1maWVsZC1pbmZpeCB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgZmxvYXRpbmcgbGFiZWwuXG4gICRpbmZpeC1tYXJnaW4tdG9wOiAxZW0gKiAkbGluZS1oZWlnaHQgKiAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG4gIC8vIFRoZSBhbW91bnQgd2Ugb2Zmc2V0IHRoZSBsYWJlbCBmcm9tIHRoZSBpbnB1dCB0ZXh0IGluIHRoZSBmaWxsIGFwcGVhcmFuY2UuXG4gICRmaWxsLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0OiAtMC41ZW07XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgIHBhZGRpbmc6ICRpbmZpeC1wYWRkaW5nLXRvcCAwICRpbmZpeC1wYWRkaW5nLWJvdHRvbSAwO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICB0b3A6ICRpbmZpeC1tYXJnaW4tdG9wICsgJGluZml4LXBhZGRpbmctdG9wO1xuICAgICAgbWFyZ2luLXRvcDogJGZpbGwtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQ7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQge1xuICAgICAgJi5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLFxuICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtZmlsbC1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLXRvcCArICRmaWxsLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0LFxuICAgICAgICAgICAgICAgICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2VydmVyLXNpZGUgcmVuZGVyZWQgbWF0SW5wdXQgd2l0aCBhIGxhYmVsIGF0dHJpYnV0ZSBidXQgbGFiZWwgbm90IHNob3duXG4gICAgICAvLyAodXNlZCBhcyBhIHB1cmUgQ1NTIHN0YW5kLWluIGZvciBtYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQpLlxuICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1maWxsLWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmctdG9wICsgJGZpbGwtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQsXG4gICAgICAgICAgICAgICAgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuXG4vLyBUaGVtZSBzdHlsZXMgdGhhdCBvbmx5IGFwcGx5IHRvIHRoZSBsZWdhY3kgYXBwZWFyYW5jZSBvZiB0aGUgZm9ybS1maWVsZC5cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcblxuICAkbGFiZWwtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICAkdW5kZXJsaW5lLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjcsIDAuNDIpKTtcblxuICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kge1xuICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICBjb2xvcjogJGxhYmVsLWNvbG9yO1xuICAgIH1cblxuICAgIC5tYXQtaGludCB7XG4gICAgICBjb2xvcjogJGxhYmVsLWNvbG9yO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1jb2xvcjtcbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUge1xuICAgICAgQGluY2x1ZGUgbWF0LWNvbnRyb2wtZGlzYWJsZWQtdW5kZXJsaW5lKCR1bmRlcmxpbmUtY29sb3IpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBVc2VkIHRvIG1ha2UgaW5zdGFuY2VzIG9mIHRoZSBfbWF0LWZvcm0tZmllbGQtbGFiZWwtZmxvYXRpbmcgbWl4aW4gbmVnbGlnaWJseSBkaWZmZXJlbnQsXG4vLyBhbmQgcHJldmVudCBHb29nbGUncyBDU1MgT3B0aW1pemVyIGZyb20gY29sbGFwc2luZyB0aGUgZGVjbGFyYXRpb25zLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHNvbWVcbi8vIG9mIHRoZSBzZWxlY3RvcnMgY29udGFpbiBwc2V1ZG8tY2xhc3NlcyBub3QgcmVjb2duaXplZCBpbiBhbGwgYnJvd3NlcnMuIElmIGEgYnJvd3NlciBlbmNvdW50ZXJzXG4vLyBhbiB1bmtub3duIHBzZXVkby1jbGFzcyBpdCB3aWxsIGRpc2NhcmQgdGhlIGVudGlyZSBydWxlIHNldC5cbiRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlOiAwO1xuXG4vLyBBcHBsaWVzIGEgZmxvYXRpbmcgbGFiZWwgYWJvdmUgdGhlIGZvcm0gZmllbGQgY29udHJvbCBpdHNlbGYuXG5AbWl4aW4gX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZygkZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKSB7XG4gIC8vIFdlIHVzZSBwZXJzcGVjdGl2ZSB0byBmaXggdGhlIHRleHQgYmx1cnJpbmVzcyBhcyBkZXNjcmliZWQgaGVyZTpcbiAgLy8gaHR0cDovL3d3dy51c2VyYWdlbnRtYW4uY29tL2Jsb2cvMjAxNC8wNS8wNC9maXhpbmctdHlwb2dyYXBoeS1pbnNpZGUtb2YtMi1kLWNzcy10cmFuc2Zvcm1zL1xuICAvLyBUaGlzIHJlc3VsdHMgaW4gYSBzbWFsbCBqaXR0ZXIgYWZ0ZXIgdGhlIGxhYmVsIGZsb2F0cyBvbiBGaXJlZm94LCB3aGljaCB0aGVcbiAgLy8gdHJhbnNsYXRlWiBmaXhlcy5cbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kaW5maXgtbWFyZ2luLXRvcCAtICRpbmZpeC1wYWRkaW5nKSBzY2FsZSgkZm9udC1zY2FsZSkgcGVyc3BlY3RpdmUoMTAwcHgpXG4gIHRyYW5zbGF0ZVooMC4wMDFweCArICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlKTtcbiAgLy8gVGhlIHRyaWNrcyBhYm92ZSB1c2VkIHRvIHNtb290aCBvdXQgdGhlIGFuaW1hdGlvbiBvbiBjaHJvbWUgYW5kIGZpcmVmb3ggYWN0dWFsbHkgbWFrZSB0aGluZ3NcbiAgLy8gd29yc2Ugb24gSUUsIHNvIHdlIGRvbid0IGluY2x1ZGUgdGhlbSBpbiB0aGUgSUUgdmVyc2lvbi5cbiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtJGluZml4LW1hcmdpbi10b3AgLSAkaW5maXgtcGFkZGluZyArICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlKVxuICAgICAgICAgICAgICAgICAgc2NhbGUoJGZvbnQtc2NhbGUpO1xuXG4gIHdpZHRoOiAxMDAlIC8gJGZvbnQtc2NhbGUgKyAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZTtcblxuICAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZTogJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGUgKyAwLjAwMDAxICFnbG9iYWw7XG59XG5cbi8vIFNhbWUgYXMgbWl4aW4gYWJvdmUsIGJ1dCBvbWl0cyB0aGUgdHJhbnNsYXRlWiBmb3IgcHJpbnRpbmcgcHVycG9zZXMuXG5AbWl4aW4gX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZy1wcmludCgkZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKSB7XG4gIC8vIFRoaXMgcmVzdWx0cyBpbiBhIHNtYWxsIGppdHRlciBhZnRlciB0aGUgbGFiZWwgZmxvYXRzIG9uIEZpcmVmb3gsIHdoaWNoIHRoZVxuICAvLyB0cmFuc2xhdGVaIGZpeGVzLlxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRpbmZpeC1tYXJnaW4tdG9wIC0gJGluZml4LXBhZGRpbmcgKyAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZSlcbiAgICAgICAgICAgICAgICAgIHNjYWxlKCRmb250LXNjYWxlKTtcbiAgLy8gVGhlIHRyaWNrcyBhYm92ZSB1c2VkIHRvIHNtb290aCBvdXQgdGhlIGFuaW1hdGlvbiBvbiBjaHJvbWUgYW5kIGZpcmVmb3ggYWN0dWFsbHkgbWFrZSB0aGluZ3NcbiAgLy8gd29yc2Ugb24gSUUsIHNvIHdlIGRvbid0IGluY2x1ZGUgdGhlbSBpbiB0aGUgSUUgdmVyc2lvbi5cbiAgJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGU6ICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlICsgMC4wMDAwMSAhZ2xvYmFsO1xufVxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtbGVnYWN5LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAvLyBUaGUgdW5pdC1sZXNzIGxpbmUtaGVpZ2h0IGZyb20gdGhlIGZvbnQgY29uZmlnLlxuICAkbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBpbnB1dCk7XG4gIC8vIFRoZSBhbW91bnQgdG8gc2NhbGUgdGhlIGZvbnQgZm9yIHRoZSBmbG9hdGluZyBsYWJlbCBhbmQgc3Vic2NyaXB0LlxuICAkc3Vic2NyaXB0LWZvbnQtc2NhbGU6IDAuNzU7XG4gIC8vIFRoZSBhbW91bnQgb2Ygc3BhY2UgYmV0d2VlbiB0aGUgdG9wIG9mIHRoZSBsaW5lIGFuZCB0aGUgdG9wIG9mIHRoZSBhY3R1YWwgdGV4dFxuICAvLyAoYXMgYSBmcmFjdGlvbiBvZiB0aGUgZm9udC1zaXplKS5cbiAgJGxpbmUtc3BhY2luZzogKCRsaW5lLWhlaWdodCAtIDEpIC8gMjtcbiAgLy8gVGhlIHBhZGRpbmcgb24gdGhlIGluZml4LiBNb2NrcyBzaG93IGhhbGYgb2YgdGhlIHRleHQgc2l6ZSwgYnV0IHNlZW0gdG8gbWVhc3VyZSBmcm9tIHRoZSBlZGdlXG4gIC8vIG9mIHRoZSB0ZXh0IGl0c2VsZiwgbm90IHRoZSBlZGdlIG9mIHRoZSBsaW5lOyB0aGVyZWZvcmUgd2Ugc3VidHJhY3Qgb2ZmIHRoZSBsaW5lIHNwYWNpbmcuXG4gICRpbmZpeC1wYWRkaW5nOiAwLjVlbSAtICRsaW5lLXNwYWNpbmc7XG4gIC8vIFRoZSBtYXJnaW4gYXBwbGllZCB0byB0aGUgZm9ybS1maWVsZC1pbmZpeCB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgZmxvYXRpbmcgbGFiZWwuXG4gICRpbmZpeC1tYXJnaW4tdG9wOiAxZW0gKiAkbGluZS1oZWlnaHQgKiAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG4gIC8vIFRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBib3R0b20gb2YgdGhlIC5tYXQtZm9ybS1maWVsZC1mbGV4IGFyZWEgYW5kIHRoZSBzdWJzY3JpcHQgd3JhcHBlci5cbiAgLy8gTW9ja3Mgc2hvdyBoYWxmIG9mIHRoZSB0ZXh0IHNpemUsIGJ1dCB0aGlzIG1hcmdpbiBpcyBhcHBsaWVkIHRvIGFuIGVsZW1lbnQgd2l0aCB0aGUgc3Vic2NyaXB0XG4gIC8vIHRleHQgZm9udCBzaXplLCBzbyB3ZSBuZWVkIHRvIGRpdmlkZSBieSB0aGUgc2NhbGUgZmFjdG9yIHRvIG1ha2UgaXQgaGFsZiBvZiB0aGUgb3JpZ2luYWwgdGV4dFxuICAvLyBzaXplLiBXZSBhZ2FpbiBuZWVkIHRvIHN1YnRyYWN0IG9mZiB0aGUgbGluZSBzcGFjaW5nIHNpbmNlIHRoZSBtb2NrcyBtZWFzdXJlIHRvIHRoZSBlZGdlIG9mIHRoZVxuICAvLyB0ZXh0LCBub3QgdGhlICBlZGdlIG9mIHRoZSBsaW5lLlxuICAkc3Vic2NyaXB0LW1hcmdpbi10b3A6IDAuNWVtIC8gJHN1YnNjcmlwdC1mb250LXNjYWxlIC0gKCRsaW5lLXNwYWNpbmcgKiAyKTtcbiAgLy8gVGhlIHBhZGRpbmcgYXBwbGllZCB0byB0aGUgZm9ybS1maWVsZC13cmFwcGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBzdWJzY3JpcHQsIHNpbmNlIGl0J3NcbiAgLy8gYWJzb2x1dGVseSBwb3NpdGlvbmVkLiBUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgdGhlIHN1YnNjcmlwdCdzIG1hcmdpbiBhbmQgbGluZS1oZWlnaHQsIGJ1dCB3ZVxuICAvLyBuZWVkIHRvIG11bHRpcGx5IGJ5IHRoZSBzdWJzY3JpcHQgZm9udCBzY2FsZSBmYWN0b3Igc2luY2UgdGhlIHdyYXBwZXIgaGFzIGEgbGFyZ2VyIGZvbnQgc2l6ZS5cbiAgJHdyYXBwZXItcGFkZGluZy1ib3R0b206ICgkc3Vic2NyaXB0LW1hcmdpbi10b3AgKyAkbGluZS1oZWlnaHQpICogJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICAgICAgcGFkZGluZy1ib3R0b206ICR3cmFwcGVyLXBhZGRpbmctYm90dG9tO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICBwYWRkaW5nOiAkaW5maXgtcGFkZGluZyAwO1xuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IHtcbiAgICAgICYubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCxcbiAgICAgIC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjAgd2lsbCByZWx5IG9uIEF1dG9maWxsTW9uaXRvciBpbnN0ZWFkLlxuICAgICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXG4gICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2VydmVyLXNpZGUgcmVuZGVyZWQgbWF0SW5wdXQgd2l0aCBhIGxhYmVsIGF0dHJpYnV0ZSBidXQgbGFiZWwgbm90IHNob3duXG4gICAgICAvLyAodXNlZCBhcyBhIHB1cmUgQ1NTIHN0YW5kLWluIGZvciBtYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQpLlxuICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICB0b3A6ICRpbmZpeC1tYXJnaW4tdG9wICsgJGluZml4LXBhZGRpbmc7XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSB7XG4gICAgICAvLyBXZSB3YW50IHRoZSB1bmRlcmxpbmUgdG8gc3RhcnQgYXQgdGhlIGVuZCBvZiB0aGUgY29udGVudCBib3gsIG5vdCB0aGUgcGFkZGluZyBib3gsXG4gICAgICAvLyBzbyB3ZSBtb3ZlIGl0IHVwIGJ5IHRoZSBwYWRkaW5nIGFtb3VudC5cbiAgICAgIGJvdHRvbTogJHdyYXBwZXItcGFkZGluZy1ib3R0b207XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyIHtcbiAgICAgIG1hcmdpbi10b3A6ICRzdWJzY3JpcHQtbWFyZ2luLXRvcDtcblxuICAgICAgLy8gV2Ugd2FudCB0aGUgc3Vic2NyaXB0IHRvIHN0YXJ0IGF0IHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgYm94LCBub3QgdGhlIHBhZGRpbmcgYm94LFxuICAgICAgLy8gc28gd2UgbW92ZSBpdCB1cCBieSB0aGUgcGFkZGluZyBhbW91bnQgKGFkanVzdGVkIGZvciB0aGUgc21hbGxlciBmb250IHNpemUpO1xuICAgICAgdG9wOiBjYWxjKDEwMCUgLSAjeyR3cmFwcGVyLXBhZGRpbmctYm90dG9tIC8gJHN1YnNjcmlwdC1mb250LXNjYWxlfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gdHJhbnNsYXRlWiBjYXVzZXMgdGhlIGxhYmVsIHRvIG5vdCBhcHBlYXIgd2hpbGUgcHJpbnRpbmcsIHNvIHdlIG92ZXJyaWRlIGl0IHRvIG5vdFxuICAvLyBhcHBseSB0cmFuc2xhdGVaIHdoaWxlIHByaW50aW5nXG4gIEBtZWRpYSBwcmludCB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IHtcbiAgICAgICYubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IHtcbiAgICAgICAgJi5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLFxuICAgICAgICAubWF0LWlucHV0LXNlcnZlcjpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZy1wcmludChcbiAgICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjAgd2lsbCByZWx5IG9uIEF1dG9maWxsTW9uaXRvciBpbnN0ZWFkLlxuICAgICAgICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJcbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nLXByaW50KFxuICAgICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2VydmVyLXNpZGUgcmVuZGVyZWQgbWF0SW5wdXQgd2l0aCBhIGxhYmVsIGF0dHJpYnV0ZSBidXQgbGFiZWwgbm90IHNob3duXG4gICAgICAgIC8vICh1c2VkIGFzIGEgcHVyZSBDU1Mgc3RhbmQtaW4gZm9yIG1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCkuXG4gICAgICAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXG4gICAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZy1wcmludChcbiAgICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuXG4vLyBUaGVtZSBzdHlsZXMgdGhhdCBvbmx5IGFwcGx5IHRvIHRoZSBvdXRsaW5lIGFwcGVhcmFuY2Ugb2YgdGhlIGZvcm0tZmllbGQuXG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcblxuICAkbGFiZWwtZGlzYWJsZWQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gICRvdXRsaW5lLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjMsIDAuMTIpKTtcbiAgJG91dGxpbmUtY29sb3ItaG92ZXI6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlciwgaWYoJGlzLWRhcmstdGhlbWUsIDEsIDAuODcpKTtcbiAgJG91dGxpbmUtY29sb3ItcHJpbWFyeTogbWF0LWNvbG9yKCRwcmltYXJ5KTtcbiAgJG91dGxpbmUtY29sb3ItYWNjZW50OiBtYXQtY29sb3IoJGFjY2VudCk7XG4gICRvdXRsaW5lLWNvbG9yLXdhcm46IG1hdC1jb2xvcigkd2Fybik7XG4gICRvdXRsaW5lLWNvbG9yLWRpc2FibGVkOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjE1LCAwLjA2KSk7XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICAgICAgY29sb3I6ICRvdXRsaW5lLWNvbG9yO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIHtcbiAgICAgIGNvbG9yOiAkb3V0bGluZS1jb2xvci1ob3ZlcjtcbiAgICB9XG5cbiAgICAmLm1hdC1mb2N1c2VkIHtcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIHtcbiAgICAgICAgY29sb3I6ICRvdXRsaW5lLWNvbG9yLXByaW1hcnk7XG4gICAgICB9XG5cbiAgICAgICYubWF0LWFjY2VudCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayB7XG4gICAgICAgIGNvbG9yOiAkb3V0bGluZS1jb2xvci1hY2NlbnQ7XG4gICAgICB9XG5cbiAgICAgICYubWF0LXdhcm4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sge1xuICAgICAgICBjb2xvcjogJG91dGxpbmUtY29sb3Itd2FybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDbGFzcyByZXBlYXRlZCBzbyB0aGF0IHJ1bGUgaXMgc3BlY2lmaWMgZW5vdWdoIHRvIG92ZXJyaWRlIGZvY3VzZWQgYWNjZW50IGNvbG9yIGNhc2UuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1pbnZhbGlkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQge1xuICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sge1xuICAgICAgICBjb2xvcjogJG91dGxpbmUtY29sb3Itd2FybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIHtcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIGNvbG9yOiAkbGFiZWwtZGlzYWJsZWQtY29sb3I7XG4gICAgICB9XG5cbiAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lIHtcbiAgICAgICAgY29sb3I6ICRvdXRsaW5lLWNvbG9yLWRpc2FibGVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBVc2VkIHRvIG1ha2UgaW5zdGFuY2VzIG9mIHRoZSBfbWF0LWZvcm0tZmllbGQtbGFiZWwtZmxvYXRpbmcgbWl4aW4gbmVnbGlnaWJseSBkaWZmZXJlbnQsXG4vLyBhbmQgcHJldmVudCBHb29nbGUncyBDU1MgT3B0aW1pemVyIGZyb20gY29sbGFwc2luZyB0aGUgZGVjbGFyYXRpb25zLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHNvbWVcbi8vIG9mIHRoZSBzZWxlY3RvcnMgY29udGFpbiBwc2V1ZG8tY2xhc3NlcyBub3QgcmVjb2duaXplZCBpbiBhbGwgYnJvd3NlcnMuIElmIGEgYnJvd3NlciBlbmNvdW50ZXJzXG4vLyBhbiB1bmtub3duIHBzZXVkby1jbGFzcyBpdCB3aWxsIGRpc2NhcmQgdGhlIGVudGlyZSBydWxlIHNldC5cbiRtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWRlZHVwZTogMDtcblxuLy8gQXBwbGllcyBhIGZsb2F0aW5nIGxhYmVsIGFib3ZlIHRoZSBmb3JtIGZpZWxkIGNvbnRyb2wgaXRzZWxmLlxuQG1peGluIF9tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWxhYmVsLWZsb2F0aW5nKCRmb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kaW5maXgtbWFyZ2luLXRvcCAtICRpbmZpeC1wYWRkaW5nICsgJG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZGVkdXBlKVxuICBzY2FsZSgkZm9udC1zY2FsZSk7XG4gIHdpZHRoOiAxMDAlIC8gJGZvbnQtc2NhbGUgKyAkbWF0LWZvcm0tZmllbGQtb3V0bGluZS1kZWR1cGU7XG5cbiAgJG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZGVkdXBlOiAkbWF0LWZvcm0tZmllbGQtb3V0bGluZS1kZWR1cGUgKyAwLjAwMDAxICFnbG9iYWw7XG59XG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1vdXRsaW5lLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAvLyBUaGUgdW5pdC1sZXNzIGxpbmUtaGVpZ2h0IGZyb20gdGhlIGZvbnQgY29uZmlnLlxuICAkbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBpbnB1dCk7XG4gIC8vIFRoZSBhbW91bnQgdG8gc2NhbGUgdGhlIGZvbnQgZm9yIHRoZSBmbG9hdGluZyBsYWJlbCBhbmQgc3Vic2NyaXB0LlxuICAkc3Vic2NyaXB0LWZvbnQtc2NhbGU6IDAuNzU7XG4gIC8vIFRoZSBwYWRkaW5nIGFib3ZlIGFuZCBiZWxvdyB0aGUgaW5maXguXG4gICRpbmZpeC1wYWRkaW5nOiAxZW07XG4gIC8vIFRoZSBtYXJnaW4gYXBwbGllZCB0byB0aGUgZm9ybS1maWVsZC1pbmZpeCB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgZmxvYXRpbmcgbGFiZWwuXG4gICRpbmZpeC1tYXJnaW4tdG9wOiAxZW0gKiAkbGluZS1oZWlnaHQgKiAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG4gIC8vIFRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBib3R0b20gb2YgdGhlIC5tYXQtZm9ybS1maWVsZC1mbGV4IGFyZWEgYW5kIHRoZSBzdWJzY3JpcHQgd3JhcHBlci5cbiAgLy8gTW9ja3Mgc2hvdyBoYWxmIG9mIHRoZSB0ZXh0IHNpemUsIGJ1dCB0aGlzIG1hcmdpbiBpcyBhcHBsaWVkIHRvIGFuIGVsZW1lbnQgd2l0aCB0aGUgc3Vic2NyaXB0XG4gIC8vIHRleHQgZm9udCBzaXplLCBzbyB3ZSBuZWVkIHRvIGRpdmlkZSBieSB0aGUgc2NhbGUgZmFjdG9yIHRvIG1ha2UgaXQgaGFsZiBvZiB0aGUgb3JpZ2luYWwgdGV4dFxuICAvLyBzaXplLlxuICAkc3Vic2NyaXB0LW1hcmdpbi10b3A6IDAuNWVtIC8gJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuICAvLyBUaGUgcGFkZGluZyBhcHBsaWVkIHRvIHRoZSBmb3JtLWZpZWxkLXdyYXBwZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIHN1YnNjcmlwdCwgc2luY2UgaXQnc1xuICAvLyBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQuIFRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgc3Vic2NyaXB0J3MgbWFyZ2luIGFuZCBsaW5lLWhlaWdodCwgYnV0IHdlXG4gIC8vIG5lZWQgdG8gbXVsdGlwbHkgYnkgdGhlIHN1YnNjcmlwdCBmb250IHNjYWxlIGZhY3RvciBzaW5jZSB0aGUgd3JhcHBlciBoYXMgYSBsYXJnZXIgZm9udCBzaXplLlxuICAkd3JhcHBlci1wYWRkaW5nLWJvdHRvbTogKCRzdWJzY3JpcHQtbWFyZ2luLXRvcCArICRsaW5lLWhlaWdodCkgKiAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG4gIC8vIFRoZSBhbW91bnQgd2Ugb2Zmc2V0IHRoZSBsYWJlbCBmcm9tIHRoZSBpbnB1dCB0ZXh0IGluIHRoZSBvdXRsaW5lIGFwcGVhcmFuY2UuXG4gICRvdXRsaW5lLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0OiAtMC4yNWVtO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUge1xuICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICBwYWRkaW5nOiAkaW5maXgtcGFkZGluZyAwICRpbmZpeC1wYWRkaW5nIDA7XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgIHRvcDogJGluZml4LW1hcmdpbi10b3AgKyAkaW5maXgtcGFkZGluZztcbiAgICAgIG1hcmdpbi10b3A6ICRvdXRsaW5lLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0O1xuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IHtcbiAgICAgICYubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCxcbiAgICAgIC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLW91dGxpbmUtbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZyArICRvdXRsaW5lLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0LFxuICAgICAgICAgICAgICAgICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2VydmVyLXNpZGUgcmVuZGVyZWQgbWF0SW5wdXQgd2l0aCBhIGxhYmVsIGF0dHJpYnV0ZSBidXQgbGFiZWwgbm90IHNob3duXG4gICAgICAvLyAodXNlZCBhcyBhIHB1cmUgQ1NTIHN0YW5kLWluIGZvciBtYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQpLlxuICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcgKyAkb3V0bGluZS1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldCxcbiAgICAgICAgICAgICAgICAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5cbi8vIFRoZW1lIHN0eWxlcyB0aGF0IG9ubHkgYXBwbHkgdG8gdGhlIHN0YW5kYXJkIGFwcGVhcmFuY2Ugb2YgdGhlIGZvcm0tZmllbGQuXG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1zdGFuZGFyZC10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcblxuICAkdW5kZXJsaW5lLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjcsIDAuNDIpKTtcblxuICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yO1xuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSB7XG4gICAgICBAaW5jbHVkZSBtYXQtY29udHJvbC1kaXNhYmxlZC11bmRlcmxpbmUoJHVuZGVybGluZS1jb2xvcik7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1zdGFuZGFyZC10eXBvZ3JhcGh5KCRjb25maWcpIHt9XG5cblxuLy8gVGhlbWUgc3R5bGVzIHRoYXQgYXBwbHkgdG8gYWxsIGFwcGVhcmFuY2VzIG9mIHRoZSBmb3JtLWZpZWxkLlxuQG1peGluIG1hdC1mb3JtLWZpZWxkLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcblxuICAvLyBMYWJlbCBjb2xvcnMuIFJlcXVpcmVkIGlzIHVzZWQgZm9yIHRoZSBgKmAgc3RhciBzaG93biBpbiB0aGUgbGFiZWwuXG4gICRsYWJlbC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCwgaWYoJGlzLWRhcmstdGhlbWUsIDAuNywgMC42KSk7XG4gICRmb2N1c2VkLWxhYmVsLWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIHRleHQpO1xuICAkcmVxdWlyZWQtbGFiZWwtY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCB0ZXh0KTtcblxuICAvLyBVbmRlcmxpbmUgY29sb3JzLlxuICAkdW5kZXJsaW5lLWNvbG9yLWJhc2U6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlciwgaWYoJGlzLWRhcmstdGhlbWUsIDEsIDAuODcpKTtcbiAgJHVuZGVybGluZS1jb2xvci1hY2NlbnQ6IG1hdC1jb2xvcigkYWNjZW50LCB0ZXh0KTtcbiAgJHVuZGVybGluZS1jb2xvci13YXJuOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICAkdW5kZXJsaW5lLWZvY3VzZWQtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgdGV4dCk7XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICBjb2xvcjogJGxhYmVsLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1oaW50IHtcbiAgICBjb2xvcjogJGxhYmVsLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgY29sb3I6ICRmb2N1c2VkLWxhYmVsLWNvbG9yO1xuXG4gICAgJi5tYXQtYWNjZW50IHtcbiAgICAgIGNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLWFjY2VudDtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIGNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLXdhcm47XG4gICAgfVxuICB9XG5cbiAgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXIge1xuICAgIGNvbG9yOiAkcmVxdWlyZWQtbGFiZWwtY29sb3I7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtcmlwcGxlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLWJhc2U7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQge1xuICAgIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1mb2N1c2VkLWNvbG9yO1xuXG4gICAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLWFjY2VudDtcbiAgICAgIH1cblxuICAgICAgJi5tYXQtd2FybiB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtY29sb3Itd2FybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpIHtcbiAgICAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVyIHtcbiAgICAgIGNvbG9yOiAkdW5kZXJsaW5lLWZvY3VzZWQtY29sb3I7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXIge1xuICAgICAgY29sb3I6ICR1bmRlcmxpbmUtY29sb3ItYWNjZW50O1xuICAgIH1cblxuICAgICYubWF0LXdhcm4gLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlciB7XG4gICAgICBjb2xvcjogJHVuZGVybGluZS1jb2xvci13YXJuO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN0eWxpbmcgZm9yIHRoZSBlcnJvciBzdGF0ZSBvZiB0aGUgZm9ybSBmaWVsZC4gTm90ZSB0aGF0IHdoaWxlIHRoZSBzYW1lIGNhbiBiZVxuICAvLyBhY2hpZXZlZCB3aXRoIHRoZSBuZy0qIGNsYXNzZXMsIHdlIHVzZSB0aGlzIGFwcHJvYWNoIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IHRoZSBzYW1lXG4gIC8vIGxvZ2ljIGlzIHVzZWQgdG8gc3R5bGUgdGhlIGVycm9yIHN0YXRlIGFuZCB0byBzaG93IHRoZSBlcnJvciBtZXNzYWdlcy5cbiAgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQge1xuICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICBjb2xvcjogJHVuZGVybGluZS1jb2xvci13YXJuO1xuXG4gICAgICAmLm1hdC1hY2NlbnQsXG4gICAgICAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2VyIHtcbiAgICAgICAgY29sb3I6ICR1bmRlcmxpbmUtY29sb3Itd2FybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtcmlwcGxlLFxuICAgIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLXdhcm47XG4gICAgfVxuICB9XG5cbiAgLm1hdC1lcnJvciB7XG4gICAgY29sb3I6ICR1bmRlcmxpbmUtY29sb3Itd2FybjtcbiAgfVxuXG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1zdGFuZGFyZC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1maWxsLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhlbWUoJHRoZW1lKTtcbn1cblxuLy8gVXNlZCB0byBtYWtlIGluc3RhbmNlcyBvZiB0aGUgX21hdC1mb3JtLWZpZWxkLWxhYmVsLWZsb2F0aW5nIG1peGluIG5lZ2xpZ2libHkgZGlmZmVyZW50LFxuLy8gYW5kIHByZXZlbnQgR29vZ2xlJ3MgQ1NTIE9wdGltaXplciBmcm9tIGNvbGxhcHNpbmcgdGhlIGRlY2xhcmF0aW9ucy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBzb21lXG4vLyBvZiB0aGUgc2VsZWN0b3JzIGNvbnRhaW4gcHNldWRvLWNsYXNzZXMgbm90IHJlY29nbml6ZWQgaW4gYWxsIGJyb3dzZXJzLiBJZiBhIGJyb3dzZXIgZW5jb3VudGVyc1xuLy8gYW4gdW5rbm93biBwc2V1ZG8tY2xhc3MgaXQgd2lsbCBkaXNjYXJkIHRoZSBlbnRpcmUgcnVsZSBzZXQuXG4kbWF0LWZvcm0tZmllbGQtZGVkdXBlOiAwO1xuXG4vLyBBcHBsaWVzIGEgZmxvYXRpbmcgbGFiZWwgYWJvdmUgdGhlIGZvcm0gZmllbGQgY29udHJvbCBpdHNlbGYuXG5AbWl4aW4gX21hdC1mb3JtLWZpZWxkLWxhYmVsLWZsb2F0aW5nKCRmb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kaW5maXgtbWFyZ2luLXRvcCAtICRpbmZpeC1wYWRkaW5nICsgJG1hdC1mb3JtLWZpZWxkLWRlZHVwZSlcbiAgICAgICAgICAgICBzY2FsZSgkZm9udC1zY2FsZSk7XG4gIHdpZHRoOiAxMDAlIC8gJGZvbnQtc2NhbGUgKyAkbWF0LWZvcm0tZmllbGQtZGVkdXBlO1xuXG4gICRtYXQtZm9ybS1maWVsZC1kZWR1cGU6ICRtYXQtZm9ybS1maWVsZC1kZWR1cGUgKyAwLjAwMDAxICFnbG9iYWw7XG59XG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLy8gVGhlIHVuaXQtbGVzcyBsaW5lLWhlaWdodCBmcm9tIHRoZSBmb250IGNvbmZpZy5cbiAgJGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgaW5wdXQpO1xuXG4gIC8vIFRoZSBhbW91bnQgdG8gc2NhbGUgdGhlIGZvbnQgZm9yIHRoZSBmbG9hdGluZyBsYWJlbCBhbmQgc3Vic2NyaXB0LlxuICAkc3Vic2NyaXB0LWZvbnQtc2NhbGU6IDAuNzU7XG4gIC8vIFRoZSBhbW91bnQgdG8gc2NhbGUgdGhlIGZvbnQgZm9yIHRoZSBwcmVmaXggYW5kIHN1ZmZpeCBpY29ucy5cbiAgJHByZWZpeC1zdWZmaXgtaWNvbi1mb250LXNjYWxlOiAxLjU7XG5cbiAgLy8gVGhlIHBhZGRpbmcgb24gdGhlIGluZml4LiBNb2NrcyBzaG93IGhhbGYgb2YgdGhlIHRleHQgc2l6ZS5cbiAgJGluZml4LXBhZGRpbmc6IDAuNWVtO1xuICAvLyBUaGUgbWFyZ2luIGFwcGxpZWQgdG8gdGhlIGZvcm0tZmllbGQtaW5maXggdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsLlxuICAkaW5maXgtbWFyZ2luLXRvcDogMWVtICogJGxpbmUtaGVpZ2h0ICogJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuICAvLyBGb250IHNpemUgdG8gdXNlIGZvciB0aGUgbGFiZWwgYW5kIHN1YnNjcmlwdCB0ZXh0LlxuICAkc3Vic2NyaXB0LWZvbnQtc2l6ZTogJHN1YnNjcmlwdC1mb250LXNjYWxlICogMTAwJTtcbiAgLy8gRm9udCBzaXplIHRvIHVzZSBmb3IgdGhlIGZvciB0aGUgcHJlZml4IGFuZCBzdWZmaXggaWNvbnMuXG4gICRwcmVmaXgtc3VmZml4LWljb24tZm9udC1zaXplOiAkcHJlZml4LXN1ZmZpeC1pY29uLWZvbnQtc2NhbGUgKiAxMDAlO1xuICAvLyBUaGUgc3BhY2UgYmV0d2VlbiB0aGUgYm90dG9tIG9mIHRoZSAubWF0LWZvcm0tZmllbGQtZmxleCBhcmVhIGFuZCB0aGUgc3Vic2NyaXB0IHdyYXBwZXIuXG4gIC8vIE1vY2tzIHNob3cgaGFsZiBvZiB0aGUgdGV4dCBzaXplLCBidXQgdGhpcyBtYXJnaW4gaXMgYXBwbGllZCB0byBhbiBlbGVtZW50IHdpdGggdGhlIHN1YnNjcmlwdFxuICAvLyB0ZXh0IGZvbnQgc2l6ZSwgc28gd2UgbmVlZCB0byBkaXZpZGUgYnkgdGhlIHNjYWxlIGZhY3RvciB0byBtYWtlIGl0IGhhbGYgb2YgdGhlIG9yaWdpbmFsIHRleHRcbiAgLy8gc2l6ZS5cbiAgJHN1YnNjcmlwdC1tYXJnaW4tdG9wOiAwLjVlbSAvICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcbiAgLy8gVGhlIHBhZGRpbmcgYXBwbGllZCB0byB0aGUgZm9ybS1maWVsZC13cmFwcGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBzdWJzY3JpcHQsIHNpbmNlIGl0J3NcbiAgLy8gYWJzb2x1dGVseSBwb3NpdGlvbmVkLiBUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgdGhlIHN1YnNjcmlwdCdzIG1hcmdpbiBhbmQgbGluZS1oZWlnaHQsIGJ1dCB3ZVxuICAvLyBuZWVkIHRvIG11bHRpcGx5IGJ5IHRoZSBzdWJzY3JpcHQgZm9udCBzY2FsZSBmYWN0b3Igc2luY2UgdGhlIHdyYXBwZXIgaGFzIGEgbGFyZ2VyIGZvbnQgc2l6ZS5cbiAgJHdyYXBwZXItcGFkZGluZy1ib3R0b206ICgkc3Vic2NyaXB0LW1hcmdpbi10b3AgKyAkbGluZS1oZWlnaHQpICogJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuXG4gIC5tYXQtZm9ybS1maWVsZCB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGlucHV0KTtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogJHdyYXBwZXItcGFkZGluZy1ib3R0b207XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtcHJlZml4LFxuICAubWF0LWZvcm0tZmllbGQtc3VmZml4IHtcbiAgICAvLyBBbGxvdyBpY29ucyBpbiBhIHByZWZpeCBvciBzdWZmaXggdG8gYWRhcHQgdG8gdGhlIGNvcnJlY3Qgc2l6ZS5cbiAgICAubWF0LWljb24ge1xuICAgICAgZm9udC1zaXplOiAkcHJlZml4LXN1ZmZpeC1pY29uLWZvbnQtc2l6ZTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQ7XG4gICAgfVxuXG4gICAgLy8gQWxsb3cgaWNvbiBidXR0b25zIGluIGEgcHJlZml4IG9yIHN1ZmZpeCB0byBhZGFwdCB0byB0aGUgY29ycmVjdCBzaXplLlxuICAgIC5tYXQtaWNvbi1idXR0b24ge1xuICAgICAgaGVpZ2h0OiAkcHJlZml4LXN1ZmZpeC1pY29uLWZvbnQtc2NhbGUgKiAxZW07XG4gICAgICB3aWR0aDogJHByZWZpeC1zdWZmaXgtaWNvbi1mb250LXNjYWxlICogMWVtO1xuXG4gICAgICAubWF0LWljb24ge1xuICAgICAgICBoZWlnaHQ6ICRsaW5lLWhlaWdodCAqIDFlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgIHBhZGRpbmc6ICRpbmZpeC1wYWRkaW5nIDA7XG4gICAgLy8gVGhyb3dzIG9mZiB0aGUgYmFzZWxpbmUgaWYgd2UgZG8gaXQgYXMgYSByZWFsIG1hcmdpbiwgc28gd2UgZG8gaXQgYXMgYSBib3JkZXIgaW5zdGVhZC5cbiAgICBib3JkZXItdG9wOiAkaW5maXgtbWFyZ2luLXRvcCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQge1xuICAgICYubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCxcbiAgICAubWF0LWlucHV0LXNlcnZlcjpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICB9XG5cbiAgICAvLyBTZXJ2ZXItc2lkZSByZW5kZXJlZCBtYXRJbnB1dCB3aXRoIGEgbGFiZWwgYXR0cmlidXRlIGJ1dCBsYWJlbCBub3Qgc2hvd25cbiAgICAvLyAodXNlZCBhcyBhIHB1cmUgQ1NTIHN0YW5kLWluIGZvciBtYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQpLlxuICAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXG4gICAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciB7XG4gICAgdG9wOiAtJGluZml4LW1hcmdpbi10b3A7XG4gICAgcGFkZGluZy10b3A6ICRpbmZpeC1tYXJnaW4tdG9wO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICB0b3A6ICRpbmZpeC1tYXJnaW4tdG9wICsgJGluZml4LXBhZGRpbmc7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIHtcbiAgICAvLyBXZSB3YW50IHRoZSB1bmRlcmxpbmUgdG8gc3RhcnQgYXQgdGhlIGVuZCBvZiB0aGUgY29udGVudCBib3gsIG5vdCB0aGUgcGFkZGluZyBib3gsXG4gICAgLy8gc28gd2UgbW92ZSBpdCB1cCBieSB0aGUgcGFkZGluZyBhbW91bnQuXG4gICAgYm90dG9tOiAkd3JhcHBlci1wYWRkaW5nLWJvdHRvbTtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlciB7XG4gICAgZm9udC1zaXplOiAkc3Vic2NyaXB0LWZvbnQtc2l6ZTtcbiAgICBtYXJnaW4tdG9wOiAkc3Vic2NyaXB0LW1hcmdpbi10b3A7XG5cbiAgICAvLyBXZSB3YW50IHRoZSBzdWJzY3JpcHQgdG8gc3RhcnQgYXQgdGhlIGVuZCBvZiB0aGUgY29udGVudCBib3gsIG5vdCB0aGUgcGFkZGluZyBib3gsXG4gICAgLy8gc28gd2UgbW92ZSBpdCB1cCBieSB0aGUgcGFkZGluZyBhbW91bnQgKGFkanVzdGVkIGZvciB0aGUgc21hbGxlciBmb250IHNpemUpO1xuICAgIHRvcDogY2FsYygxMDAlIC0gI3skd3JhcHBlci1wYWRkaW5nLWJvdHRvbSAvICRzdWJzY3JpcHQtZm9udC1zY2FsZX0pO1xuICB9XG5cbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtbGVnYWN5LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLXN0YW5kYXJkLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLWZpbGwtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtb3V0bGluZS10eXBvZ3JhcGh5KCRjb25maWcpO1xufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtdHJlZS10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LXRyZWUge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2NhcmQnKTtcbiAgfVxuXG4gIC5tYXQtdHJlZS1ub2RlLFxuICAubWF0LW5lc3RlZC10cmVlLW5vZGUge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtdHJlZS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC10cmVlIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC10cmVlLW5vZGUsXG4gIC5tYXQtbmVzdGVkLXRyZWUtbm9kZSB7XG4gICAgZm9udC13ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTEpO1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpO1xuICB9XG59XG5cblxuXG4vLyBJbmNsdWRlcyBhbGwgb2YgdGhlIHR5cG9ncmFwaGljIHN0eWxlcy5cbkBtaXhpbiBhbmd1bGFyLW1hdGVyaWFsLXR5cG9ncmFwaHkoJGNvbmZpZzogbnVsbCkge1xuICBAaWYgJGNvbmZpZyA9PSBudWxsIHtcbiAgICAkY29uZmlnOiBtYXQtdHlwb2dyYXBoeS1jb25maWcoKTtcbiAgfVxuXG4gIEBpbmNsdWRlIG1hdC1iYWRnZS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtYmFzZS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtYXV0b2NvbXBsZXRlLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1ib3R0b20tc2hlZXQtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWJ1dHRvbi10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtYnV0dG9uLXRvZ2dsZS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtY2FyZC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtY2hlY2tib3gtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWNoaXBzLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC10YWJsZS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZGF0ZXBpY2tlci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZGlhbG9nLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1leHBhbnNpb24tcGFuZWwtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWdyaWQtbGlzdC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtaWNvbi10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtaW5wdXQtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LW1lbnUtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXBhZ2luYXRvci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtcHJvZ3Jlc3MtYmFyLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1wcm9ncmVzcy1zcGlubmVyLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1yYWRpby10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtc2VsZWN0LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1zaWRlbmF2LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1zbGlkZS10b2dnbGUtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXNsaWRlci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtc3RlcHBlci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtc29ydC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtdGFicy10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtdG9vbGJhci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtdG9vbHRpcC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtbGlzdC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtb3B0aW9uLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1vcHRncm91cC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtc25hY2stYmFyLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC10cmVlLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG59XG5cblxuLy8gTWl4aW4gdGhhdCByZW5kZXJzIGFsbCBvZiB0aGUgY29yZSBzdHlsZXMgdGhhdCBhcmUgbm90IHRoZW1lLWRlcGVuZGVudC5cbkBtaXhpbiBtYXQtY29yZSgkdHlwb2dyYXBoeS1jb25maWc6IG51bGwpIHtcbiAgQGluY2x1ZGUgYW5ndWxhci1tYXRlcmlhbC10eXBvZ3JhcGh5KCR0eXBvZ3JhcGh5LWNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1yaXBwbGUoKTtcbiAgQGluY2x1ZGUgY2RrLWExMXkoKTtcbiAgQGluY2x1ZGUgY2RrLW92ZXJsYXkoKTtcbiAgQGluY2x1ZGUgY2RrLXRleHQtZmllbGQoKTtcbn1cblxuLy8gTWl4aW4gdGhhdCByZW5kZXJzIGFsbCBvZiB0aGUgY29yZSBzdHlsZXMgdGhhdCBkZXBlbmQgb24gdGhlIHRoZW1lLlxuQG1peGluIG1hdC1jb3JlLXRoZW1lKCR0aGVtZSkge1xuICBAaW5jbHVkZSBtYXQtcmlwcGxlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1vcHRpb24tdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LW9wdGdyb3VwLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1wc2V1ZG8tY2hlY2tib3gtdGhlbWUoJHRoZW1lKTtcblxuICAvLyBQcm92aWRlcyBleHRlcm5hbCBDU1MgY2xhc3NlcyBmb3IgZWFjaCBlbGV2YXRpb24gdmFsdWUuIEVhY2ggQ1NTIGNsYXNzIGlzIGZvcm1hdHRlZCBhc1xuICAvLyBgbWF0LWVsZXZhdGlvbi16JHpWYWx1ZWAgd2hlcmUgYCR6VmFsdWVgIGNvcnJlc3BvbmRzIHRvIHRoZSB6LXNwYWNlIHRvIHdoaWNoIHRoZSBlbGVtZW50IGlzXG4gIC8vIGVsZXZhdGVkLlxuICBAZm9yICR6VmFsdWUgZnJvbSAwIHRocm91Z2ggMjQge1xuICAgIC4jeyRfbWF0LWVsZXZhdGlvbi1wcmVmaXh9I3skelZhbHVlfSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigkelZhbHVlLCAkdGhlbWUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdyYXBwZXIgZWxlbWVudCB0aGF0IHByb3ZpZGVzIHRoZSB0aGVtZSBiYWNrZ3JvdW5kIHdoZW4gdGhlIHVzZXIncyBjb250ZW50IGlzbid0XG4gIC8vIGluc2lkZSBvZiBhIGBtYXQtc2lkZW5hdi1jb250YWluZXJgLiBOb3RlIHRoYXQgd2UgbmVlZCB0byBleGNsdWRlIHRoZSBhbXBlcnNhbmRcbiAgLy8gc2VsZWN0b3IgaW4gY2FzZSB0aGUgbWl4aW4gaXMgaW5jbHVkZWQgYXQgdGhlIHRvcCBsZXZlbC5cbiAgLm1hdC1hcHAtYmFja2dyb3VuZCN7aWYoJiwgJywgJi5tYXQtYXBwLWJhY2tncm91bmQnLCAnJyl9IHtcbiAgICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAgICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGJhY2tncm91bmQpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG5cbiAgLy8gTWFya2VyIHRoYXQgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgdXNlciBoYXMgYWRkZWQgYSB0aGVtZSB0byB0aGVpciBwYWdlLlxuICBAYXQtcm9vdCB7XG4gICAgLm1hdC10aGVtZS1sb2FkZWQtbWFya2VyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtZGl2aWRlci10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWRpdmlkZXIge1xuICAgIGJvcmRlci10b3AtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cblxuICAubWF0LWRpdmlkZXItdmVydGljYWwge1xuICAgIGJvcmRlci1yaWdodC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxufVxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vLyBDcmVhdGUgYSB0aGVtZS5cbkBtaXhpbiBhbmd1bGFyLW1hdGVyaWFsLXRoZW1lKCR0aGVtZSkge1xuICBAaW5jbHVkZSBtYXQtY29yZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtYXV0b2NvbXBsZXRlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1iYWRnZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtYm90dG9tLXNoZWV0LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1idXR0b24tdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWJ1dHRvbi10b2dnbGUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWNhcmQtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWNoZWNrYm94LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1jaGlwcy10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtdGFibGUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWRhdGVwaWNrZXItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWRpYWxvZy10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZGl2aWRlci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZXhwYW5zaW9uLXBhbmVsLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1ncmlkLWxpc3QtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWljb24tdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWlucHV0LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1saXN0LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1tZW51LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1wYWdpbmF0b3ItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXByb2dyZXNzLWJhci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtcmFkaW8tdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXNlbGVjdC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtc2lkZW5hdi10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtc2xpZGUtdG9nZ2xlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1zbGlkZXItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXN0ZXBwZXItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXNvcnQtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXRhYnMtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXRvb2xiYXItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXRvb2x0aXAtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXRyZWUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXNuYWNrLWJhci10aGVtZSgkdGhlbWUpO1xufVxuIiwiQGltcG9ydCBcIm1peGluc1wiO1xuQGltcG9ydCBcInZhcnNcIjtcbkBpbXBvcnQgXCJ+QGFuZ3VsYXIvbWF0ZXJpYWwvdGhlbWluZ1wiO1xuXG4ubWNrIHtcbiAgICAmLWluaGVyaXQge1xuICAgICAgICAmLWZvbnQge1xuICAgICAgICAgICAgLy8gcGF0Y2hlcyBnbG9iYWwgZm9udCBzdHlsaW5nIGRvbmUgYnkgbGVnYWN5IHVpXG4gICAgICAgICAgICBmb250OiBpbmhlcml0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1jb250ZW50IHtcbiAgICAgICAgJi1leHBhbmQge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG5cbiAgICAgICAgICAgICYtd2lkdGgge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLWhlaWdodCB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi13aXRoLWZvb3Rlci1oZWlnaHQge1xuICAgICAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNThweCk7XG4gICAgICAgIH1cblxuICAgICAgICAmLWZ1bGwtaGVpZ2h0IHtcbiAgICAgICAgICAgIGhlaWdodDogMTAwdmg7XG4gICAgICAgIH1cblxuICAgICAgICAmLXBhZ2Uge1xuICAgICAgICAgICAgQGV4dGVuZCAubWNrLWNvbnRlbnQtZXhwYW5kO1xuICAgICAgICAgICAgYmFja2dyb3VuZDogJHBhZ2UtYmFja2dyb3VuZC1jb2xvcjtcblxuICAgICAgICAgICAgJi1jb250YWluZXIge1xuICAgICAgICAgICAgICAgIEBleHRlbmQgLm1jay1jb250ZW50LWZ1bGwtaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1ib2R5IHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWdyb3VwIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHBhZ2UtcGFkZGluZztcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA3NTlweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtc2hhZG93IHtcbiAgICAgICAgQGluY2x1ZGUgbWF0LWVsZXZhdGlvbigxKTtcbiAgICB9XG5cbiAgICAmLWZsZXgtMSB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgfVxuXG4gICAgJi1yb3cge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuXG4gICAgICAgICYubWNrLWNlbnRlciB7XG4gICAgICAgICAgICAmLWp1c3RpZnkge1xuICAgICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLWFsaWduIHtcbiAgICAgICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAZXh0ZW5kIC5tY2stY2VudGVyLWp1c3RpZnk7XG4gICAgICAgICAgICBAZXh0ZW5kIC5tY2stY2VudGVyLWFsaWduO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5tY2stc3RyZXRjaCB7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICAgICAgfVxuXG4gICAgICAgICYtZmxvdyB7XG4gICAgICAgICAgICBAZXh0ZW5kIC5tY2stcm93O1xuICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5tY2stc2Nyb2xsIHtcbiAgICAgICAgICAgIG92ZXJmbG93LXg6IHNjcm9sbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtY29sdW1uIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuICAgICAgICAmLm1jay1jZW50ZXIge1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5tY2stc3BhY2UtYmV0d2VlbiB7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIH1cblxuICAgICAgICAmLm1jay1zdHJldGNoIHtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5tY2stc2Nyb2xsIHtcbiAgICAgICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgICAgICAgICAgIG92ZXJmbG93LXk6IG92ZXJsYXk7XG4gICAgICAgIH1cblxuICAgICAgICAmLm1jay1mbGV4LWVuZCB7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1vdmVyZmxvdyB7XG4gICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgIH1cblxuICAgICYtYm9yZGVyZWQsICYtaW5wdXQge1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xuXG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjNDY0NjQ2O1xuICAgICAgICB9XG5cbiAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgICBib3JkZXItY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICB9XG5cbiAgICAgICAgJltkaXNhYmxlZD1cInRydWVcIl0ge1xuICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgICAgICBib3JkZXItY29sb3I6ICNmMGYwZjA7XG4gICAgICAgICAgICBjb2xvcjogI2NjYztcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtZGF0ZS1kaXNwbGF5IHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiA0M3B4O1xuICAgICAgICBwYWRkaW5nOiAkc3BhY2luZy1zbWFsbCAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICB0cmFuc2l0aW9uOiBib3JkZXIgMjAwbXMsIGJveC1zaGFkb3cgMjAwbXM7XG4gICAgfVxuXG4gICAgJi1mb3JtLWlucHV0IHtcblxuICAgICAgICAubWF0LWZvcm0tZmllbGQtd3JhcHBlciB7XG4gICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1mb3JtLWZpZWxkIHtcbiAgICAgICAgICAgIG1pbi13aWR0aDogYXV0byAhaW1wb3J0YW50O1xuXG4gICAgICAgICAgICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgIHBhZGRpbmctdG9wOiAwLjdyZW0gIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogJHNwYWNpbmcteHhzbWFsbCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gICAgICAgICAgICAgICAgbWluLWhlaWdodDogMi43cmVtO1xuICAgICAgICAgICAgICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLm1jay1jZW50ZXItc3VmZml4IHtcbiAgICAgICAgICAgICAgICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgICAgICAgICAgICAgICBAZXh0ZW5kIC5tY2stcm93O1xuICAgICAgICAgICAgICAgICAgICBAZXh0ZW5kIC5tY2stY2VudGVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5tY2stc2VsZWN0LWRyb3Bkb3duLWJ1dHRvbiB7XG4gICAgICAgICAgICAgICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMnB4O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1mbGV4IHtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAycmVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWluLWhlaWdodDogMnJlbTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1mb3JtLWZpZWxkLm1hdC1zIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgbWF0LXNlbGVjdCB7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAwLjJyZW07XG5cbiAgICAgICAgICAgIC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYgLm1hdC1zZWxlY3QtdmFsdWUgPiAubWF0LXNlbGVjdC12YWx1ZS10ZXh0ID4gc3BhbiB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICAgICAgICAgIC8vIGNvbG9yOiAjMzMzMzMzICFpbXBvcnRhbnQ7IC8vUi0tLSBibG9ja3MgZGlzYWJsZWQgc3RhdGUgY29sb3JcbiAgICAgICAgICAgICAgICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCxcbiAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsXG4gICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICRib3JkZXI7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5hdmFpbGFibGUge1xuICAgICAgICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICAgICAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LFxuICAgICAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsXG4gICAgICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzNhYTUzNztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAuYm9va2VkIHtcbiAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lIHtcbiAgICAgICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCxcbiAgICAgICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLFxuICAgICAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNlMTJlNDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sge1xuICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Lm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsXG4gICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLFxuICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgICAgICAgICBib3JkZXItd2lkdGg6IDFweDtcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgPiBtYXQtZm9ybS1maWVsZC5tY2stZXJyb3Ige1xuICAgICAgICAgICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgIC8vIGxlc3MganVtcGluZyBmb3IgZXJyb3IgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICAgICAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LFxuICAgICAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsXG4gICAgICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogJGVycm9yLWNvbG9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG1jay1jbG9zZS1pY29uLm1hdC1jaGlwLXJlbW92ZS5tYXQtY2hpcC1yZW1vdmUge1xuICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgbWF0LWxhYmVsIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgIH1cblxuICAgICAgICBtYXQtcmFkaW8tYnV0dG9uIHtcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHNwYWNpbmctc21hbGw7XG4gICAgICAgIH1cblxuICAgICAgICAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnQge1xuICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIH1cblxuICAgICAgICAubWF0LXJhZGlvIHtcbiAgICAgICAgICAgICYtb3V0ZXItY2lyY2xlIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICRwcmltYXJ5ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAxcHggIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi1pbm5lci1jaXJjbGUge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBtYXQtcmFkaW8tZ3JvdXAge1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG5cbiAgICAgICAgICAgICYgPiBtYXQtcmFkaW8tYnV0dG9uOmxhc3QtY2hpbGQge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtY29udGFpbmVyIHtcbiAgICAgICAgICAgID4gLm1jay1mb3JtLWlucHV0LCA+IG1jay1zZWxlY3Qge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nLXh4c21hbGw7XG5cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nLW1lZGl1bS1sYXJnZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tY2stcmFkaW8tc2VsZWN0IHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy1zbWFsbDtcblxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogJHNwYWNpbmctbWVkaXVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwIHtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDEuNXJlbTtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjaGlwLWNvbG9yO1xuICAgICAgICAgICAgcGFkZGluZy10b3A6ICRzcGFjaW5nLXNtYWxsZXN0O1xuICAgICAgICAgICAgcGFkZGluZy1ib3R0b206ICRzcGFjaW5nLXNtYWxsZXN0O1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICAgICAgQGluY2x1ZGUgY2hpcC1sYWJlbDtcbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbWF0LWNoZWNrYm94IHtcbiAgICAgICAgICAgICYubWF0LWNoZWNrYm94Lm1hdC1jaGVja2JveCB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgY2hlY2tib3gtbGFiZWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRpdi5tYXQtY2hlY2tib3gtYmFja2dyb3VuZC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnk7XG5cbiAgICAgICAgICAgICAgICAmLm1jay1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtZGlzYWJsZWQge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYubWNrLWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1kaXNhYmxlZCB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgY2hlY2tib3gtbGFiZWw7XG4gICAgICAgICAgICAgICAgY29sb3I6ICRib3JkZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWJvcmRlcmxlc3Mge1xuICAgICAgICBib3JkZXI6IG5vbmU7XG5cbiAgICAgICAgJjpob3ZlciwgJjpmb2N1cywgJjpkaXNhYmxlZCB7XG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXNlbGVjdC1wYW5lbCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdW5zZXQgIWltcG9ydGFudDtcbiAgICAgICAgbWFyZ2luLXRvcDogMzVweCAhaW1wb3J0YW50O1xuICAgICAgICBtYXJnaW4tbGVmdDogNXB4O1xuXG4gICAgICAgIG1hdC1vcHRpb24ge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMDtcblxuICAgICAgICAgICAgJi5tYXQtb3B0aW9uLXRleHQge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYubWNrLW1hcmdpbi10b3Age1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogJHNwYWNpbmctbWVkaXVtICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWNoZWNrYm94LXBhbmVsIHtcbiAgICAgICAgJi5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsLm1hdC1hdXRvY29tcGxldGUtcGFuZWwge1xuICAgICAgICAgICAgdG9wOiAtMTBweDtcbiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDI3OHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgbWF0LW9wdGlvbi5tY2stdHJ1bmNhdGVkIHtcbiAgICAgICAgICAgICYgLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIG1heC1saW5lcygyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1vcHRpb24ge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICAgICAgICAgICAgaGVpZ2h0OiB1bnNldDtcbiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDM2cHg7XG5cbiAgICAgICAgICAgICYgLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICAgICAgICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYgLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGNoZWNrYm94LWxhYmVsO1xuICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYubWNrLWNoZWNrYm94LWdyb3VwLWhlYWRlciB7XG4gICAgICAgICAgICAgICAgJiAubWF0LWNoZWNrYm94LWxhYmVsLm1hdC1jaGVja2JveC1sYWJlbCB7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLm1jay1jaGVja2JveC1ncm91cC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6ICRzcGFjaW5nLWxhcmdlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtYXQtY2hlY2tib3gge1xuICAgICAgICAgICAgICAgIGxhYmVsLm1hdC1jaGVja2JveC1sYXlvdXQge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMnB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMnB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZGl2Lm1hdC1jaGVja2JveC1mcmFtZS5tYXQtY2hlY2tib3gtZnJhbWUge1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBtY2stY2hlY2tib3gtYm9yZGVyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICYubWF0LWNoZWNrYm94LWNoZWNrZWQge1xuICAgICAgICAgICAgICAgICAgICBkaXYubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmLm1jay1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtZGlzYWJsZWQge1xuICAgICAgICAgICAgICAgICAgICBkaXYubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmLm1jay1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtZGlzYWJsZWQge1xuICAgICAgICAgICAgICAgICAgICAmIC5tYXQtY2hlY2tib3gtbGFiZWwubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGNoZWNrYm94LWxhYmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICRib3JkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXIge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJHNwYWNpbmctc21hbGwtbWVkaXVtO1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICRzcGFjaW5nLXNtYWxsLW1lZGl1bTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXNlbGVjdC1vcHRpb24ge1xuICAgICAgICAmLXNlbGVjdGVkIHtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICAgICAgICAgIGNvbG9yOiBibGFjaztcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG5cbiAgICAgICAgICAgIC5tY2stc3BhY2VyLWNvbnRlbnQge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHNwYWNpbmcteHNtYWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi11bnNlbGVjdGVkIHtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcblxuICAgICAgICAgICAgJi5tY2staWdub3JlLWRpc2FibGVkIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tY2stc3BhY2VyLWNvbnRlbnQge1xuICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6ICRzcGFjaW5nLXhzbWFsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtYnV0dG9uIHtcbiAgICAgICAgJi5tYXQtYnV0dG9uLm1hdC1idXR0b24sICYubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiB7XG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICAgICAgQGV4dGVuZCAubWNrLWNvbHVtbjtcbiAgICAgICAgICAgIEBleHRlbmQgLm1jay1jZW50ZXI7XG4gICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcblxuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbGVzdDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbGVzdDtcbiAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcblxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5tY2stc2hvcnQge1xuICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDgzcHg7XG5cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiAxNTVweDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBzb21lIGNhc2VzIGJ1dHRvbnMgaW4gZGVza3RvcCBhcmUgNDAgdnMgNDhweFxuICAgICAgICAgICAgICAgICYubWNrLXNob3J0LWhlaWdodCB7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogNDBweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5tY2stc3F1YXJlIHtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDMycHg7XG4gICAgICAgICAgICAgICAgbWluLXdpZHRoOiAzMnB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7XG5cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiA0MHB4O1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgICAgIEBleHRlbmQgLm1jay1idXR0b247XG5cbiAgICAgICAgJi5tYXQtYnV0dG9uLm1hdC1idXR0b24ge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnk7XG5cbiAgICAgICAgICAgICZbZGlzYWJsZWRdLCAmLmRpc2FibGVkIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzc1NzU3NTtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuXG4gICAgICAgICAgICAgICAgJiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICM3NTc1NzU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtc2Vjb25kYXJ5LWJ1dHRvbiB7XG4gICAgICAgIEBleHRlbmQgLm1jay1idXR0b247XG5cbiAgICAgICAgJi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIG1jay10aGluLWJ1dHRvbi1ib3JkZXI7XG4gICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjMjI1MUZGO1xuICAgICAgICAgICAgY29sb3I6ICMyMjUxRkY7XG4gICAgICAgICAgICAmW2Rpc2FibGVkXSwgJi5kaXNhYmxlZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgICAgICAgICAgICAgY29sb3I6ICMzMzMzMzM7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYubWF0LWJ1dHRvbi5tYXQtYnV0dG9uIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuXG4gICAgICAgICAgICAmID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkY2hpcC1jb2xvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtd2FybmluZy1idXR0b24ge1xuICAgICAgICBAZXh0ZW5kIC5tY2stYnV0dG9uO1xuXG4gICAgICAgICYubWF0LWJ1dHRvbi5tYXQtYnV0dG9uIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci1icmFuZC15ZWxsb3c7XG5cbiAgICAgICAgICAgICYgPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6IGJsYWNrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1zdHJva2VkLWJ1dHRvbiB7XG4gICAgICAgIEBleHRlbmQgLm1jay1idXR0b247XG5cbiAgICAgICAgJi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIG1jay1idXR0b24tYm9yZGVyO1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctbWVkaXVtLWxhcmdlO1xuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctbWVkaXVtLWxhcmdlO1xuXG4gICAgICAgICAgICAmLm1jay1zaG9ydCB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgICAgICAgICAgIG1pbi13aWR0aDogODNweDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsZXN0O1xuICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsZXN0O1xuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMTU1cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBwcmltYXJ5IGNvbG9yc1xuICAgICAgICAgICAgJi5tY2stcHJpbWFyeSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgICAgICAgICBjb2xvcjogJHByaW1hcnk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYubWNrLXRoaW4tYm9yZGVyLWxpZ2h0IHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMXB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICAgICAgY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi10b2dnbGUtYnV0dG9uIHtcbiAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgICAgICBib3JkZXItY29sb3I6ICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgICAgICBtaW4td2lkdGg6IDU5cHg7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgIG1pbi13aWR0aDogMTMycHg7XG4gICAgICAgICAgICBwYWRkaW5nLXRvcDogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgJi1zZWxlY3RlZCB7XG4gICAgICAgICAgICBjb2xvcjogJHByaW1hcnk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWRhdGUtcGlja2VyIHtcbiAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgICAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7XG5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAyM3JlbTtcbiAgICAgICAgfVxuXG4gICAgICAgICYgPiAuaGVhZGVyLmhlYWRlciB7XG4gICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgICAgIGNvbG9yOiAkZm9ybS1sYWJlbDtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6ICRzcGFjaW5nLXNtYWxsLW1lZGl1bTtcblxuICAgICAgICAgICAgJiA+IC5hcnJvdy5hcnJvdyB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDIuMzc1cmVtO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMnJlbTtcblxuICAgICAgICAgICAgICAgICYgPiAuaWNvbi5pY29uIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDFyZW07XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMXJlbTtcbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICYgPiAubmV4dC5uZXh0IHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdsaWJzL3VpL3NyYy9saWIvaWNvbnMvYXJyb3ctZm9yd2FyZC5zdmcnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmID4gLnByZXZpb3VzLnByZXZpb3VzIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdsaWJzL3VpL3NyYy9saWIvaWNvbnMvYXJyb3ctYmFja3dhcmQuc3ZnJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgfVxuXG4gICAgICAgICYgPiAubW9udGgge1xuICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgIH1cblxuICAgICAgICAmID4gLndlZWsge1xuICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICBjb2xvcjogJHNlY29uZGFyeS1sYWJlbDtcbiAgICAgICAgfVxuXG4gICAgICAgICYgPiAuYm9keSB7XG4gICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuXG4gICAgICAgICAgICAmID4gZGl2ID4gZGl2LmRhdGUge1xuICAgICAgICAgICAgICAgICYgPiAuZG90IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmLmRpc2FibGVkIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAkc2Vjb25kYXJ5LWxhYmVsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICYuYWN0aXZlIHtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJi5ub24tbW9udGgge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJHNlY29uZGFyeS1sYWJlbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXNwYWNlci1jb250ZW50IHtcbiAgICAgICAgJi1jb2xsYXBzZS10YWJsZXQge1xuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKHRhYmxldCkge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWV4cGFuZC1tb2JpbGUge1xuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWRpdmlkZXIge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtZXhwYW5zaW9uLXBhbmVsIHtcbiAgICAgICAgJi5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwge1xuICAgICAgICAgICAgQGluY2x1ZGUgbWF0LWVsZXZhdGlvbigwKTtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHNlbGVjdGVkLW9wdGlvbjtcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkc2VsZWN0ZWQtb3B0aW9uO1xuXG4gICAgICAgICAgICAmLm1jay1leHBhbmRlZCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY29sb3I7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcblxuICAgICAgICAgICAgICAgICYgLm1jay1jb2xsYXBzZS1pY29uIHtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oMjRweCwgJ2NoZXZyb24tY2xvc2Uuc3ZnJyk7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDQ4cHgsICdjaGV2cm9uLWNsb3NlLWxhcmdlLnN2ZycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWF0LWV4cGFuc2lvbi1wYW5lbC1ib2R5IHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMDtcblxuICAgICAgICAgICAgICAgICYgPiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ge1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBib2R5LXRpbnk7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctc21hbGw7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiBibGFjaztcbiAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJiBtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciB7XG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctc21hbGw7XG5cbiAgICAgICAgICAgICYgPiBzcGFuLm1hdC1jb250ZW50IHtcbiAgICAgICAgICAgICAgICAvLyBjZW50ZXIgdGV4dCBhbmQgaWNvbnNcbiAgICAgICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJiBtYXQtcGFuZWwtdGl0bGUge1xuICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICB9XG5cbiAgICAgICAgLm1jay1jb2xsYXBzZS1pY29uIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICdjaGV2cm9uLW9wZW4uc3ZnJyk7XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oNDhweCwgJ2NoZXZyb24tb3Blbi1sYXJnZS5zdmcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNXMgZWFzZTtcbiAgICAgICAgICAgICYuZXhwYW5kZWQge1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWljb24tZmlsbC1vcGVuIHtcbiAgICAgICAgZmlsbDogJHByaW1hcnk7XG4gICAgfVxuXG4gICAgJi1pY29uLWZpbGwtY2xvc2Uge1xuICAgICAgICBmaWxsOiAkc2Vjb25kYXJ5LWxhYmVsO1xuICAgIH1cblxuICAgICYtaWNvbi1maWxsLWJsYWNrIHtcbiAgICAgICAgZmlsbDogYmxhY2s7XG4gICAgICAgIHN0cm9rZTogYmxhY2s7XG4gICAgfVxuXG4gICAgJi1pY29uLWZpbGwtd2hpdGUge1xuICAgICAgICBmaWxsOiB3aGl0ZTtcbiAgICAgICAgc3Ryb2tlOiB3aGl0ZTtcbiAgICB9XG5cbiAgICAmLWljb24tZmlsbC1ncmF5IHtcbiAgICAgICAgZmlsbDogIzMzMzMzMztcbiAgICAgICAgc3Ryb2tlOiAjMzMzMzMzO1xuICAgIH1cblxuICAgICYtbWluIHtcbiAgICAgICAgbWF4LXdpZHRoOiA1ODFweCAhaW1wb3J0YW50O1xuICAgICAgICB3aWR0aDogODB2dztcbiAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgbW9kYWwgaW50byBhIG1vcmUgJ2Z1bGwtc2NyZWVuJyBhcHBlYXJhbmNlIG9uIG1vYmlsZS5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICB3aWR0aDogMTAwdnc7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcblxuICAgICAgICAgICAgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLW5vZXhwYW5kIHtcbiAgICAgICAgbWF4LXdpZHRoOiA1ODFweCAhaW1wb3J0YW50O1xuICAgICAgICB3aWR0aDogODB2dyAhaW1wb3J0YW50O1xuICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBtb2RhbCBpbnRvIGEgbW9yZSAnZnVsbC1zY3JlZW4nIGFwcGVhcmFuY2Ugb24gbW9iaWxlLlxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gMzJweCkgIWltcG9ydGFudDtcbiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1tb2RhbCB7XG4gICAgICAgIG1heC13aWR0aDogODAwcHggIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDgwdnc7XG4gICAgICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIG1vZGFsIGludG8gYSBtb3JlICdmdWxsLXNjcmVlbicgYXBwZWFyYW5jZSBvbiBtb2JpbGUuXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG5cbiAgICAgICAgICAgIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1tb2RhbC1taW5pIHtcbiAgICAgICAgbWF4LXdpZHRoOiA1ODBweCAhaW1wb3J0YW50O1xuICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBtb2RhbCBpbnRvIGEgbW9yZSAnZnVsbC1zY3JlZW4nIGFwcGVhcmFuY2Ugb24gbW9iaWxlLlxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDB2dztcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuXG4gICAgICAgICAgICAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtbW9kYWwtc3VydmV5IHtcbiAgICAgICAgbWF4LXdpZHRoOiA2OTFweCAhaW1wb3J0YW50O1xuICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBtb2RhbCBpbnRvIGEgbW9yZSAnZnVsbC1zY3JlZW4nIGFwcGVhcmFuY2Ugb24gbW9iaWxlLlxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1tb2RhbC13aWRlIHtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDI0cHggIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgICBoZWlnaHQ6IDk1dmg7XG4gICAgICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICAgICAgICAubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4gICAgICAgICAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgLm1hdC1pY29uLWJ1dHRvbltuYW1lPVwiQ2xvc2VCdXR0b25cIl0ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICByaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLmNsb3NlLWltYWdlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMnB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgbW9kYWwgaW50byBhIG1vcmUgJ2Z1bGwtc2NyZWVuJyBhcHBlYXJhbmNlIG9uIG1vYmlsZS5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICB3aWR0aDogMTAwdnc7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgICAgIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICAmLW1vZGFsLXdpZGUtbWFuYWdlLWJvb2tpbmcge1xuICAgICAgICBtYXgtd2lkdGg6IDEyNTBweCAhaW1wb3J0YW50O1xuICAgICAgICB3aWR0aDogMTAwdnc7XG4gICAgICAgIC8vIGhlaWdodDogOTV2aDtcbiAgICAgICAgbWF4LWhlaWdodDogOTV2aDtcbiAgICAgICAgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuICAgICAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgIC8vIG92ZXJmbG93LXk6IGhpZGRlbiAhaW1wb3J0YW50O1xuXG4gICAgICAgICAgICAubWF0LWljb24tYnV0dG9uW25hbWU9XCJDbG9zZUJ1dHRvblwiXSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIHJpZ2h0OiAzMnB4O1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAuY2xvc2UtaW1hZ2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMycHg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBtb2RhbCBpbnRvIGEgbW9yZSAnZnVsbC1zY3JlZW4nIGFwcGVhcmFuY2Ugb24gbW9iaWxlLlxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDB2dztcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICAgICAgICAgICAgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgICYtYWxlcnQge1xuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIG1heC13aWR0aDogMTAwdncgIWltcG9ydGFudDtcbiAgICAgICAgICAgIHdpZHRoOiAxMDB2dztcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHNwYWNpbmctc21hbGw7XG4gICAgICAgIH1cblxuICAgICAgICAmLWJhY2tkcm9wIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICRhbGVydC1vdmVybGF5LWJnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1zbGlkZS10b2dnbGUge1xuICAgICAgICAmLm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQ6bm90KC5tYXQtZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICYgLm1hdC1zbGlkZS10b2dnbGUtYmFyLm1hdC1zbGlkZS10b2dnbGUtYmFyIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeS1oaWdobGlnaHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIubWF0LXNsaWRlLXRvZ2dsZS10aHVtYiB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLm1hdC1zbGlkZS10b2dnbGUge1xuICAgICAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICB9XG5cbiAgICAgICAgLm1hdC1zbGlkZS10b2dnbGUtY29udGVudC5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnQge1xuICAgICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICAgICAgQGluY2x1ZGUgbWF4LWxpbmVzKDIpO1xuICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIge1xuICAgICAgICAgICAgd2lkdGg6IDE0cHg7XG4gICAgICAgICAgICBoZWlnaHQ6IDE0cHg7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg1MCUsIDUwJSk7XG4gICAgICAgIH1cblxuICAgICAgICAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXIubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXIge1xuICAgICAgICAgICAgdG9wOiAtNHB4O1xuICAgICAgICAgICAgbGVmdDogLTRweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5tYXQtc2xpZGUtdG9nZ2xlLWJhci5tYXQtc2xpZGUtdG9nZ2xlLWJhciB7XG4gICAgICAgICAgICBoZWlnaHQ6IDIwcHg7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXNrZWxldG9uIHtcbiAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG5cbiAgICAgICAgJi1jaGVja2JveCB7XG4gICAgICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgICAgICAgICAgIGhlaWdodDogMjBweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1oZWFkZXIgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgIHdpZHRoOiAxMDB2dztcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDIxNXB4O1xuICAgICAgICB9XG5cbiAgICAgICAgJi1pbWFnZSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgQGluY2x1ZGUgcGxhY2Vob2xkZXItaW1hZ2Utc2l6ZTtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgIH1cblxuICAgICAgICAmLXN0YXR1cyA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgQGluY2x1ZGUgcGxhY2Vob2xkZXItc3RhdHVzLXNpemU7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS0xID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICBoZWlnaHQ6IDIzcHg7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDE3NnB4O1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAyMTlweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS0yID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDE2NXB4O1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAxODlweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS0zID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDE0N3B4O1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAxODlweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS0zMHAsICYtbGluZS0zMHAtdGhpbiB7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAzMCU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDMwJTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLXRoaW4ge1xuICAgICAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWxpbmUtNDVwLCAmLWxpbmUtNDVwLXRoaW4ge1xuICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogNDUlO1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA0NSU7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNDUlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYtdGhpbiB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS01MHAsICYtbGluZS01MHAtdGhpbiwgJi1saW5lLTUwcC10aGljayB7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA1MCU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDUwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiA0NSU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGluIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGljayB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS02MHAsICYtbGluZS02MHAtdGhpbiwgJi1saW5lLTYwcC10aGljayB7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA2MCU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDYwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAzNSU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGluIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGljayB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS03MHAsICYtbGluZS03MHAtdGhpbiwgJi1saW5lLTcwcC10aGljayB7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA3MCU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDcwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAyNSU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGluIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGljayB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS04MHAsICYtbGluZS04MHAtdGhpbiwgJi1saW5lLTgwcC10aGljayB7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA4MCU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDgwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNSU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGluIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGljayB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS05MHAsICYtbGluZS05MHAtdGhpbiB7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA5MCU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDkwJTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLXRoaW4ge1xuICAgICAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWxvYWQtbW9yZSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgICAgICB3aWR0aDogY2FsYygxMDB2dyAtICgyICogI3skc3BhY2luZy1zbWFsbH0pKTtcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcblxuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMzIwcHg7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA1MHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1sb2FkLW1vcmUtMTAwcCwgJi1oZWFkZXIsICYtcm9vbS1hdmFpbGFiaWxpdHkge1xuICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICAgICAgICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gKDIgKiAjeyRzcGFjaW5nLXNtYWxsfSkpO1xuICAgICAgICAgICAgICAgIGhlaWdodDogNDBweDtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IG5vbmU7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IG5vbmU7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDUwcHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICYtcm9vbS1hdmFpbGFiaWxpdHkge1xuICAgICAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTI0cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuXG4gICAgfVxufVxuXG5cbi5tY2sge1xuICAgICYtaGVhZGluZy01IHtcbiAgICAgICAgQGluY2x1ZGUgaGVhZGluZy01O1xuICAgIH1cbn1cblxubmd4LW1hdC1zZWxlY3Qtc2VhcmNoIHtcbiAgICAubWF0LXNlbGVjdC1zZWFyY2gtbm8tZW50cmllcy1mb3VuZCB7XG4gICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgfVxuXG4gICAgLm1hdC1zZWxlY3Qtc2VhcmNoLWlucHV0IHtcbiAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICB9XG5cbiAgICBidXR0b24ubWF0LWJ1dHRvbi5tYXQtc2VsZWN0LXNlYXJjaC1jbGVhciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIGNvbG9yOiBibGFjaztcbiAgICB9XG59XG5cbjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgIHdpZHRoOiAxNnB4O1xuICAgIGhlaWdodDogMThweDtcbn1cbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICAgIGhlaWdodDogJHNwYWNpbmctbWVkaXVtO1xuICAgIGJvcmRlcjogNHB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMCk7XG4gICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHNjcm9sbGJhci1jb2xvcjtcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IC0xcHggLTFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjA1KSwgaW5zZXQgMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cbjo6LXdlYmtpdC1zY3JvbGxiYXItYnV0dG9uIHtcbiAgICB3aWR0aDogMDtcbiAgICBoZWlnaHQ6IDA7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cbjo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cbmhlYWRlciB7XG4gICAgei1pbmRleDogMjtcbn1cbi5tYi1ibG9jayB7XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbn1cbi5tYi1ib3R0b20ge1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTEwcHg7XG4gICAgfVxufVxuXG4ubWFwLWZpbHRlcnMtY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgICAgdG9wOiA1cHg7XG4gICAgfVxuICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le1xuICAgICAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICAgIHBhZGRpbmctdG9wOiAkc3BhY2luZy14eHNtYWxsICFpbXBvcnRhbnQ7XG4gICAgfVxufVxuXG4ub2ZmaWNlLWxldmVsLXJvd3tcblxuICAgIC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye1xuICAgICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgfVxuXG4gICAgLmxlZ2VuZC1jb250YWluZXIgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgaGVpZ2h0OiA0NXB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuc2VsZWN0LWRpdmlkZXJ7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB0b3A6IDAgIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDQ0cHggIWltcG9ydGFudDtcbiAgICAgICAgcmlnaHQ6IC0xMXB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICAgIGJvcmRlci13aWR0aDogMCAwIDAgMXB4O1xuICAgICAgICBib3JkZXItY29sb3I6ICNjNmM2YzY7XG4gICAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gMXB4KSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmRpc2FibGVke1xuICAgICAgICAuc2VsZWN0LWRpdmlkZXJ7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjBGMEYwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAycHgpICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLnNlbGVjdC1jaGV2cm9ue1xuICAgICAgICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5vZmZpY2UtbGV2ZWwtcm93LCAubWFwLWNvbnRyb2xze1xuICAgIC5sZWdlbmQtY29udGFpbmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XG4gICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50O1xuICAgIH1cbn1cblxuLmJvb2tpbmctZm9ybS1jb250YWluZXIge1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDMxMHB4KTtcbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgbWF4LWhlaWdodDogbm9uZTtcbiAgICB9XG59XG4uYm9va2luZy1mb3JtLWNvbnRhaW5lciAubWNrLWZvcm0taW5wdXR7XG5cbiAgICBtYXQtc2VsZWN0IHtcbiAgICAgICAgJiAubWF0LXNlbGVjdC12YWx1ZSA+IC5tYXQtc2VsZWN0LXZhbHVlLXRleHQgPiBzcGFuIHtcbiAgICAgICAgICAgIC8vIGNvbG9yOiAjMDUxYzJjICFpbXBvcnRhbnQ7IC8vUi0tLSBibG9ja3MgZGlzYWJsZWQgc3RhdGUgY29sb3JcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG1hdC1sYWJlbCwgLm1hdC1yYWRpby1sYWJlbC1jb250ZW50IHtcbiAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnMgIWltcG9ydGFudDtcbiAgICAgICAgY29sb3I6ICMzMzMzMzM7XG4gICAgfVxuXG4gICAgaW5wdXQsIGlucHV0OjpwbGFjZWhvbGRlcntcbiAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgICAgIGNvbG9yOiAjQjNCM0IzO1xuICAgIH1cbn0iLCJAaW1wb3J0IFwiLi4vc3R5bGVzXCI7XG5cbi5idXR0b24td3JhcHBlciB7XG4gICAgQGV4dGVuZCAubWNrLWNvbHVtbjtcbiAgICBmbGV4LWJhc2lzOiAxMDAlO1xuICAgIGp1c3RpZnktY29udGVudDogZW5kO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIHotaW5kZXg6IDI7XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBib3R0b206IC0wLjVyZW07XG4gICAgICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgICAgIHBhZGRpbmctdG9wOiAkc3BhY2luZy1tZWRpdW0tbGFyZ2U7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAkc3BhY2luZy1tZWRpdW0tbGFyZ2U7XG4gICAgfVxuXG4gICAgJi5oYXMtZml4ZWQge1xuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIHotaW5kZXg6IDI7XG4gICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIH0gICAgICAgIFxuICAgIH1cblxuICAgICYtc3BhY2VyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbiAgICB9XG5cbiAgICAmID4gLmJ1dHRvbi1yb3cge1xuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIC8vIG1vYmlsZSBpcyBzdHVjayB0byB0aGUgYm90dG9tIG9mIHNjcmVlbiwgc28gd2UgbmVlZCB0byBhZGQgcGFkZGluZyBhcm91bmQgaXQuXG4gICAgICAgICAgICBwYWRkaW5nOiAkc3BhY2luZy1zbWFsbDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLm1jay1tb2RhbC1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgZmxleDogMTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW46IDAgJHNwYWNpbmcteHNtYWxsO1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgbWF4LXdpZHRoOiAzMjBweDtcbiAgICB9XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgfVxufVxuXG4ubWNrLW1vZGFsLXNlY29uZGFyeS1idXR0b24ge1xuICAgIGZsZXg6IDE7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luOiAwICRzcGFjaW5nLXhzbWFsbDtcbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIG1heC13aWR0aDogMzIwcHg7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMCAkc3BhY2luZy14c21hbGw7XG4gICAgfVxufVxuXG5cbi5zbWFsbC1idXR0b25zIHtcbiAgICAubWNrLW1vZGFsLXByaW1hcnktYnV0dG9uIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1hcmdpbjogMCAkc3BhY2luZy14c21hbGw7XG4gICAgICAgIG1heC13aWR0aDogMTM0cHg7XG4gICAgXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLm1jay1tb2RhbC1zZWNvbmRhcnktYnV0dG9uIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1hcmdpbjogMCAkc3BhY2luZy14c21hbGw7XG4gICAgICAgIG1heC13aWR0aDogMTM0cHg7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMCAkc3BhY2luZy14c21hbGw7XG4gICAgICAgICAgICBcbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgIH1cbn0iXX0= */"] }); /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(ModalButtonRowComponent, [{ type: core_1.Component, args: [{ @@ -23242,7 +23631,7 @@ ModalComponent.ɵcmp = i0.ɵɵdefineComponent({ type: ModalComponent, selectors: i0.ɵɵproperty("ngIf", ctx.shouldClose); i0.ɵɵadvance(2); i0.ɵɵproperty("ngIf", ctx.header); - } }, directives: [i1.MatDialogContent, i2.NgIf, i3.MatButton], styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n.modal-header[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 2.25rem;\n line-height: 1.111;\n text-align: left;\n -webkit-margin-before: 0;\n margin-block-start: 0;\n -webkit-margin-after: 0;\n margin-block-end: 0;\n margin-bottom: 1.5rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .modal-header[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n line-height: 1.181;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .modal-header[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n line-height: 1.181;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .modal-header[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 2.25rem;\n line-height: 1.111;\n text-align: center;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (orientation: portrait) and (min-width: 451px) {\n .modal-header[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n line-height: 1.181;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (orientation: landscape) and (min-width: 801px) {\n .modal-header[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n line-height: 1.181;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .modal-header[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 2.25rem;\n line-height: 1.111;\n text-align: center;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (orientation: portrait) and (min-width: 451px) {\n .modal-header[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n line-height: 1.181;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (orientation: landscape) and (min-width: 801px) {\n .modal-header[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n line-height: 1.181;\n }\n}\n.modal-container.mat-dialog-content.mat-dialog-content[_ngcontent-%COMP%] {\n padding: 0 1rem 1rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .modal-container.mat-dialog-content.mat-dialog-content[_ngcontent-%COMP%] {\n padding: 0 3rem 0;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .modal-container.mat-dialog-content.mat-dialog-content[_ngcontent-%COMP%] {\n padding: 0 3rem 0;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .modal-container.mat-dialog-content.mat-dialog-content[_ngcontent-%COMP%] {\n max-height: calc(100vh - 58px);\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .modal-container.mat-dialog-content.mat-dialog-content[_ngcontent-%COMP%] {\n max-height: calc(100vh - 58px);\n }\n}\n.modal-top[_ngcontent-%COMP%] {\n background-color: white;\n left: 0;\n right: 0;\n top: 0;\n z-index: 3;\n position: sticky;\n padding-top: 1rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .modal-top[_ngcontent-%COMP%] {\n padding-top: 1.75rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .modal-top[_ngcontent-%COMP%] {\n padding-top: 1.75rem;\n }\n}\n.close-image[_ngcontent-%COMP%] {\n background-repeat: no-repeat;\n cursor: pointer;\n width: 16px;\n height: 16px;\n background-image: url('modal-close.svg');\n background-size: contain;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .close-image[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n background-image: url('modal-close-desktop.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .close-image[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n background-image: url('modal-close-desktop.svg');\n background-size: contain;\n }\n}\n.mat-icon-button[_ngcontent-%COMP%]:hover .mat-button-focus-overlay[_ngcontent-%COMP%] {\n opacity: 0.12 !important;\n}\n.button-row[_ngcontent-%COMP%] {\n height: 30px;\n}\n.button-row[_ngcontent-%COMP%] .mat-icon-button[_ngcontent-%COMP%] {\n position: absolute;\n right: 10px;\n top: 10px;\n}\n.button-row[_ngcontent-%COMP%] .mat-icon-button[_ngcontent-%COMP%]:hover {\n background-color: rgba(0, 0, 0, 0.12);\n}\n.button-row[_ngcontent-%COMP%] .mat-icon-button[_ngcontent-%COMP%]:hover .mat-button-focus-overlay[_ngcontent-%COMP%] {\n opacity: 0.12 !important;\n}\n.modal-container[_ngcontent-%COMP%] .mck-row[_ngcontent-%COMP%] {\n justify-content: end;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJsaWJzL3VpL3NyYy9saWIvbW9kYWwvbW9kYWwuY29tcG9uZW50LnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvbW9kYWwvbW9kYWwuY29tcG9uZW50LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMkNBOztFQUFBO0FBcUNBOztzQkFBQTtBQWFBO0VBQ0ksZ0JBOUZNO0VBK0ZOLHVCQTdGYztBQ09sQjtBRHlGQTs7c0JBQUE7QUVrT0E7OztFQUFBO0FDbFVBO0VEZ0dJLDRCQVppQjtFQWFqQixrQkFBQTtFQUNBLGtCQUFBO0VBa0ZBLGtCQUFBO0VBQ0Esa0JBQUE7RUM5S0EsZ0JBQUE7RUFDQSx3QkFBQTtVQUFBLHFCQUFBO0VBQ0EsdUJBQUE7VUFBQSxtQkFBQTtFQUVBLHFCSGtEYTtBQ25DakI7QUN2Qlk7RUNIWjtJRHdMUSxpQkFBQTtJQUNBLGtCQUFBO0VEMUpOO0FBQ0Y7QUM3Qlk7RUNIWjtJRHdMUSxpQkFBQTtJQUNBLGtCQUFBO0VEcEpOO0FBQ0Y7QUNuQ1k7RUNIWjtJRGdHSSw0QkFaaUI7SUFhakIsa0JBQUE7SUFDQSxrQkFBQTtJQWtGQSxrQkFBQTtJQUNBLGtCQUFBO0lDakxJLGtCQUFBO0VGMkNOO0FBQ0Y7QUM3Q1k7RUNIWjtJRHdMUSxpQkFBQTtJQUNBLGtCQUFBO0VEcElOO0FBQ0Y7QUNuRFk7RUNIWjtJRHdMUSxpQkFBQTtJQUNBLGtCQUFBO0VEOUhOO0FBQ0Y7QUN6RFk7RUNIWjtJRGdHSSw0QkFaaUI7SUFhakIsa0JBQUE7SUFDQSxrQkFBQTtJQWtGQSxrQkFBQTtJQUNBLGtCQUFBO0lDakxJLGtCQUFBO0VGaUVOO0FBQ0Y7QUNuRVk7RUNIWjtJRHdMUSxpQkFBQTtJQUNBLGtCQUFBO0VEOUdOO0FBQ0Y7QUN6RVk7RUNIWjtJRHdMUSxpQkFBQTtJQUNBLGtCQUFBO0VEeEdOO0FBQ0Y7QUVwRUE7RUFDSSxvQkFBQTtBRnVFSjtBQ25GWTtFQ1daO0lBR1EsaUJBQUE7RUZ5RU47QUFDRjtBQ3hGWTtFQ1daO0lBR1EsaUJBQUE7RUY4RU47QUFDRjtBQ3pGWTtFQ09aO0lBTVEsOEJBQUE7RUZnRk47QUFDRjtBQzlGWTtFQ09aO0lBTVEsOEJBQUE7RUZxRk47QUFDRjtBRWxGQTtFQUNJLHVCQUFBO0VBQ0EsT0FBQTtFQUNBLFFBQUE7RUFDQSxNQUFBO0VBQ0EsVUFBQTtFQUNBLGdCQUFBO0VBRUEsaUJIdUJZO0FDNkRoQjtBQ2pIWTtFQ3FCWjtJQVVRLG9CSDhCZTtFQ3dEckI7QUFDRjtBQ3RIWTtFQ3FCWjtJQVVRLG9CSDhCZTtFQzZEckI7QUFDRjtBRXhGQTtFQUNJLDRCQUFBO0VBQ0EsZUFBQTtFRHVTQSxXRjVPUztFRTZPVCxZRjdPUztFRThPVCx3Q0FBQTtFQUNBLHdCQUFBO0FEM01KO0FDcElZO0VDbUNaO0lEeVNJLFdGM09VO0lFNE9WLFlGNU9VO0lFNk9WLGdEQUFBO0lBQ0Esd0JBQUE7RURwTUY7QUFDRjtBQzVJWTtFQ21DWjtJRHlTSSxXRjNPVTtJRTRPVixZRjVPVTtJRTZPVixnREFBQTtJQUNBLHdCQUFBO0VENUxGO0FBQ0Y7QUV2R0c7RUFDSyx3QkFBQTtBRjBHUjtBRXRHQTtFQUNJLFlBQUE7QUZ5R0o7QUV4R0k7RUFDSSxrQkFBQTtFQUNBLFdBQUE7RUFDQSxTQUFBO0FGMEdSO0FFeEdJO0VBQ0kscUNBQUE7QUYwR1I7QUV6R1E7RUFDTSx3QkFBQTtBRjJHZDtBRXJHQTtFQUNJLG9CQUFBO0FGd0dKIiwiZmlsZSI6ImxpYnMvdWkvc3JjL2xpYi9tb2RhbC9tb2RhbC5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIiRwcmltYXJ5OiAjMUY0MEU2O1xuJGZvcm0tbGFiZWw6ICMwNTFDMkM7XG4kc2Vjb25kYXJ5LWxhYmVsOiAjNzY3Njc2O1xuJGJvcmRlcjogI0IzQjNCMztcbiRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkOiAjRDBEMEQwO1xuJGNoaXAtY29sb3I6ICMzMzMzMzM7XG4kcGxhY2Vob2xkZXItY29sb3I6ICM3RjdGN0Y7XG4kYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDtcbiRwYWdlLWJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4kc2VsZWN0ZWQtb3B0aW9uOiAjRTZFNkU2O1xuJGNvbG9yLWJyYW5kLXllbGxvdzogI2ZmZDA0ODtcbiRsaWdodC15ZWxsb3c6ICNmZmYzY2U7XG4kY29hY2htYXJrLXRleHQ6ICM2ZjRkMDA7XG4kZXJyb3ItY29sb3I6ICNFMTJFNDA7XG4kbm8tZmlsdGVycy1jb2xvcjogI0JDQkNCQztcbiRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjogI0Y0RjRGNDtcbiRwcmltYXJ5LWhpZ2hsaWdodDogIzIyNTFGRjtcbiRzY3JvbGxiYXItY29sb3I6ICM3NTc1NzU7XG5cbiRhdmFpbGFibGUtY29sb3I6ICM1RDlENTI7XG4kYXZhaWxhYmxlLWJ5LXJlcXVlc3QtY29sb3I6ICNGNUI1M0Y7XG4kaW4tdXNlLWNvbG9yOiAjRDQ0ODNFO1xuJG5vdC1ib29rYWJsZS1jb2xvcjogI0NDQ0NDQztcblxuJG1vZGFsLWJvZHktaGVhZGluZzogIzRENEQ0RDtcbiRhbGVydC1vdmVybGF5LWJnOiByZ2JhKDUsIDI4LCA0NCwgMC44NSk7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvYWNobWFyay1iZzogI0VCRUJGNjtcbiRjb2FjaG1hcmstZGFyay10ZXh0OiAjMUIxQjE5O1xuJGVycm9yLXRleHQ6ICNmZmY7XG5cbi8qKlxuICogU3BhY2luZ1xuICovXG5cbi8vIDRweFxuJHNwYWNpbmctc21hbGxlc3Q6IDAuMjVyZW07XG5cbi8vIDhweFxuJHNwYWNpbmcteHhzbWFsbDogMC41cmVtO1xuXG4vLyAxMnB4XG4kc3BhY2luZy14c21hbGw6IDAuNzVyZW07XG5cbi8vIDE2cHhcbiRzcGFjaW5nLXNtYWxsOiAxcmVtO1xuXG4vLyAyMHB4XG4kc3BhY2luZy1zbWFsbC1tZWRpdW06IDEuMjVyZW07XG5cbi8vIDI0cHhcbiRzcGFjaW5nLW1lZGl1bTogMS41cmVtO1xuXG4vLyAyOHB4XG4kc3BhY2luZy1tZWRpdW0tbGFyZ2U6IDEuNzVyZW07XG5cbi8vIDMycHhcbiRzcGFjaW5nLWxhcmdlOiAycmVtO1xuXG4vLyA0OHB4XG4kc3BhY2luZy14bGFyZ2U6IDNyZW07XG5cbi8vIDY0cHhcbiRzcGFjaW5nLXh4bGFyZ2U6IDRyZW07XG5cbi8vIDk2cHhcbiRzcGFjaW5nLWxhcmdlc3Q6IDZyZW07XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kZGV2aWNlLW1vYmlsZS1zaXplOiA0NTBweDtcbiRkZXZpY2UtdGFibGV0LXNpemU6IDgwMHB4O1xuJGRldmljZS1sYXB0b3Atc2l6ZTogMTAyNHB4O1xuXG4kZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZTogMTA0OHB4O1xuJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemU6IDEyODBweDtcblxuXG46ZXhwb3J0IHtcbiAgICBwcmltYXJ5OiAkcHJpbWFyeTtcbiAgICBzZWNvbmRhcnlMYWJlbDogJHNlY29uZGFyeS1sYWJlbDtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbiRpY29uLXNtYWxsOiAxNnB4O1xuJGljb24tbWVkaXVtOiAyNHB4O1xuJGljb24tbGFyZ2U6IDMycHg7XG4kaWNvbi14bGFyZ2U6IDQ4cHg7XG4iLCIvKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbi5tb2RhbC1oZWFkZXIge1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXNpemU6IDIuMjVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjExMTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgbWFyZ2luLWJsb2NrLXN0YXJ0OiAwO1xuICBtYXJnaW4tYmxvY2stZW5kOiAwO1xuICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubW9kYWwtaGVhZGVyIHtcbiAgICBmb250LXNpemU6IDIuNXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xODE7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubW9kYWwtaGVhZGVyIHtcbiAgICBmb250LXNpemU6IDIuNXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xODE7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tb2RhbC1oZWFkZXIge1xuICAgIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtc2l6ZTogMi4yNXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xMTE7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubW9kYWwtaGVhZGVyIHtcbiAgICBmb250LXNpemU6IDIuNXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xODE7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubW9kYWwtaGVhZGVyIHtcbiAgICBmb250LXNpemU6IDIuNXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xODE7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubW9kYWwtaGVhZGVyIHtcbiAgICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LXNpemU6IDIuMjVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMTExO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tb2RhbC1oZWFkZXIge1xuICAgIGZvbnQtc2l6ZTogMi41cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubW9kYWwtaGVhZGVyIHtcbiAgICBmb250LXNpemU6IDIuNXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xODE7XG4gIH1cbn1cblxuLm1vZGFsLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRlbnQubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgcGFkZGluZzogMCAxcmVtIDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubW9kYWwtY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGVudC5tYXQtZGlhbG9nLWNvbnRlbnQge1xuICAgIHBhZGRpbmc6IDAgM3JlbSAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1vZGFsLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRlbnQubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwIDNyZW0gMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1vZGFsLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRlbnQubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNThweCk7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubW9kYWwtY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGVudC5tYXQtZGlhbG9nLWNvbnRlbnQge1xuICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSA1OHB4KTtcbiAgfVxufVxuXG4ubW9kYWwtdG9wIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICB0b3A6IDA7XG4gIHotaW5kZXg6IDM7XG4gIHBvc2l0aW9uOiBzdGlja3k7XG4gIHBhZGRpbmctdG9wOiAxcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1vZGFsLXRvcCB7XG4gICAgcGFkZGluZy10b3A6IDEuNzVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubW9kYWwtdG9wIHtcbiAgICBwYWRkaW5nLXRvcDogMS43NXJlbTtcbiAgfVxufVxuXG4uY2xvc2UtaW1hZ2Uge1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHdpZHRoOiAxNnB4O1xuICBoZWlnaHQ6IDE2cHg7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9tb2RhbC1jbG9zZS5zdmdcIik7XG4gIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5jbG9zZS1pbWFnZSB7XG4gICAgd2lkdGg6IDI0cHg7XG4gICAgaGVpZ2h0OiAyNHB4O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9tb2RhbC1jbG9zZS1kZXNrdG9wLnN2Z1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAuY2xvc2UtaW1hZ2Uge1xuICAgIHdpZHRoOiAyNHB4O1xuICAgIGhlaWdodDogMjRweDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvbW9kYWwtY2xvc2UtZGVza3RvcC5zdmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICB9XG59XG5cbi5tYXQtaWNvbi1idXR0b246aG92ZXIgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSB7XG4gIG9wYWNpdHk6IDAuMTIgIWltcG9ydGFudDtcbn1cblxuLmJ1dHRvbi1yb3cge1xuICBoZWlnaHQ6IDMwcHg7XG59XG4uYnV0dG9uLXJvdyAubWF0LWljb24tYnV0dG9uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMTBweDtcbiAgdG9wOiAxMHB4O1xufVxuLmJ1dHRvbi1yb3cgLm1hdC1pY29uLWJ1dHRvbjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xMik7XG59XG4uYnV0dG9uLXJvdyAubWF0LWljb24tYnV0dG9uOmhvdmVyIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkge1xuICBvcGFjaXR5OiAwLjEyICFpbXBvcnRhbnQ7XG59XG5cbi5tb2RhbC1jb250YWluZXIgLm1jay1yb3cge1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGVuZDtcbn0iLCJAaW1wb3J0IFwidmFyc1wiO1xuXG5AbWl4aW4gcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkc2l6ZSwgJHF1YWxpZmllcikge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQGlmICgkcXVhbGlmaWVyID09IG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2UgaWYgKCRxdWFsaWZpZXIgPT0gbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1heC13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuQG1peGluIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkbWluLCAkbWF4KSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyB0aGlzIGlzIGEgY29weSBvZiByZXNwb25kLXRvLiB3ZSBkb24ndCB3YW50IHRvIHByZXNlcnZlIHRoYXQgbWV0aG9kIHNpbmNlIHRoZSBicmVha3BvaW50cyBtYXkgZGl2ZXJnZSBmcm9tIHRoZSBvbGQgVUkuXG5AbWl4aW4gaXMtc2NyZWVuLXNpemUoJG1lZGlhOiBhbGwsICRvcmllbnRhdGlvbjogbm9uZSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5cbkBtaXhpbiBwYWdlLXBhZGRpbmcge1xuICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctc21hbGw7XG4gICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctc21hbGw7XG59XG5cbi8vIEZvbnQgTWl4aW5zXG4kZm9udC1tY2tpbnNleS1zYW5zOiBcIk1jS2luc2V5IFNhbnNcIjtcbiRmb250LXRoZWluaGFyZHQ6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuJGZvbnQtYm93ZXI6IFwiQm93ZXJcIjtcblxuQG1peGluIGJvd2VyLWJvbGQge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1ib3dlcjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gbWNraW5zZXktc2FucyB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIGRpc3BsYXktMSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNHJlbTsgLy8gNjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODc7IC8vIDc2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTIge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTMge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2MHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNCB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDNyZW07IC8vIDQ4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNjY7IC8vIDU2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjRweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMwcHhcbiAgICBsaW5lLWhlaWdodDogMS44MzM7IC8vIDM0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY0MjsgLy8gNDBweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0xIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNDhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNzVyZW07IC8vIDQ0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA1MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0yIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjExMTsgLy8gNDRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDQ4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTMge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMjI7IC8vIDQ0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTUge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTYge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTU7IC8vIDI4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBib2R5LWRlZmF1bHQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjZweFxuICAgIH1cbn1cblxuLy8vIERvZXNudCBleGlzdCBpbiBNRFMuXG5AbWl4aW4gYm9keS10aW55IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTsgLy8gMTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDIwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBmb3JtLWxhYmVsIHtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC10aGVpbmhhcmR0O1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBjb2xvcjogJHBsYWNlaG9sZGVyLWNvbG9yO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG59XG5cbkBtaXhpbiBjaGlwLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gY2hlY2tib3gtbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICBjb2xvcjogYmxhY2s7XG59XG5cbi8vIGJvcmRlcnNcblxuQG1peGluIG1jay1jaGVja2JveC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stdGhpbi1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYm9yZGVyLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQtbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlci1saWdodDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cblxuLy8gZnVuY3Rpb25zXG5cbi8qKlxuICogTWFrZXMgdGV4dCBoYXZlIG1heGltdW0gbGluZXMgd2l0aCBlbGxpcHNpcy4gV29ya3Mgb24gbW9zdCBtb2Rlcm4gYnJvd3NlcnMgZXhjZXB0XG4gKiBvZiBGaXJlZm94Li5cbiAqL1xuQG1peGluIG1heC1saW5lcygkY291bnQpIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIC13ZWJraXQtbGluZS1jbGFtcDogJGNvdW50O1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG59XG5cbi8vIGltYWdlc1xuQG1peGluIG1jay1pY29uKCR3aWR0aCwgJGFzc2V0LCAkaGVpZ2h0OiAkd2lkdGgsICAkYXNzZXRQYXRoOiBcImxpYnMvdWkvc3JjL2xpYi9pY29uc1wiLCkge1xuICAgIHdpZHRoOiAkd2lkdGg7XG4gICAgaGVpZ2h0OiAkaGVpZ2h0O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiN7JGFzc2V0UGF0aH0vI3skYXNzZXR9XCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbn1cblxuXG5AbWl4aW4gbWNrLXNtYWxsLWljb24oJG1vYmlsZS1hc3NldCwgJGRlc2t0b3AtYXNzZXQ6ICRtb2JpbGUtYXNzZXQpIHtcbiAgICBAaW5jbHVkZSBtY2staWNvbigxNnB4LCAkYXNzZXQ6ICRtb2JpbGUtYXNzZXQpO1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBAaW5jbHVkZSBtY2staWNvbigyNHB4LCAkYXNzZXQ6ICRkZXNrdG9wLWFzc2V0KTtcbiAgICB9XG59XG5cbi8vIHNrZWxldG9uXG5AbWl4aW4gc2tlbGV0b24tYmcge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1pbWFnZS1zaXplIHtcbiAgICB3aWR0aDogODFweDtcbiAgICBoZWlnaHQ6IDgycHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAyMTlweDtcbiAgICAgICAgaGVpZ2h0OiAxMTlweDtcbiAgICB9XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1zdGF0dXMtc2l6ZSB7XG4gICAgd2lkdGg6IDExN3B4O1xuICAgIGhlaWdodDogNzhweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDExN3B4O1xuICAgICAgICBoZWlnaHQ6IDc4cHg7XG4gICAgfVxufVxuIiwiQGltcG9ydCBcIi4uL21peGluc1wiO1xuXG4ubW9kYWwtaGVhZGVyIHtcbiAgICBAaW5jbHVkZSBoZWFkaW5nLTI7XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBAaW5jbHVkZSBoZWFkaW5nLTI7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG5cbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIG1hcmdpbi1ibG9jay1zdGFydDogMDtcbiAgICBtYXJnaW4tYmxvY2stZW5kOiAwO1xuXG4gICAgbWFyZ2luLWJvdHRvbTogJHNwYWNpbmctbWVkaXVtO1xufVxuXG4ubW9kYWwtY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGVudC5tYXQtZGlhbG9nLWNvbnRlbnQge1xuICAgIHBhZGRpbmc6IDAgJHNwYWNpbmctc21hbGwgJHNwYWNpbmctc21hbGw7XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBwYWRkaW5nOiAwICRzcGFjaW5nLXhsYXJnZSAwO1xuICAgIH1cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDU4cHgpO1xuICAgIH1cbn1cblxuLm1vZGFsLXRvcCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICB0b3A6IDA7XG4gICAgei1pbmRleDogMztcbiAgICBwb3NpdGlvbjogc3RpY2t5O1xuXG4gICAgcGFkZGluZy10b3A6ICRzcGFjaW5nLXNtYWxsO1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgcGFkZGluZy10b3A6ICRzcGFjaW5nLW1lZGl1bS1sYXJnZTtcbiAgICB9XG59XG5cbi5jbG9zZS1pbWFnZSB7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgQGluY2x1ZGUgbWNrLWljb24oJGljb24tc21hbGwsICdtb2RhbC1jbG9zZS5zdmcnKTtcbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIEBpbmNsdWRlIG1jay1pY29uKCRpY29uLW1lZGl1bSwgJ21vZGFsLWNsb3NlLWRlc2t0b3Auc3ZnJyk7XG4gICAgfVxufVxuXG4ubWF0LWljb24tYnV0dG9uOmhvdmVyIHtcbiAgIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkge1xuICAgICAgICBvcGFjaXR5OiAwLjEyICFpbXBvcnRhbnQ7XG4gICAgfVxufVxuXG4uYnV0dG9uLXJvdyB7XG4gICAgaGVpZ2h0OiAzMHB4O1xuICAgIC5tYXQtaWNvbi1idXR0b24gIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogMTBweDtcbiAgICAgICAgdG9wOiAxMHB4O1xuICAgIH1cbiAgICAubWF0LWljb24tYnV0dG9uOmhvdmVyICB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwwLDAsIDAuMTIpO1xuICAgICAgICAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5IHtcbiAgICAgICAgICAgICAgb3BhY2l0eTogMC4xMiAhaW1wb3J0YW50O1xuXG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5tb2RhbC1jb250YWluZXIgLm1jay1yb3d7XG4gICAganVzdGlmeS1jb250ZW50OiBlbmQ7XG59XG5cbiJdfQ== */"] }); + } }, directives: [i1.MatDialogContent, i2.NgIf, i3.MatButton], styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n.modal-header[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 2.25rem;\n line-height: 1.111;\n text-align: left;\n -webkit-margin-before: 0;\n margin-block-start: 0;\n -webkit-margin-after: 0;\n margin-block-end: 0;\n margin-bottom: 1.5rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .modal-header[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n line-height: 1.181;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .modal-header[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n line-height: 1.181;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .modal-header[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 2.25rem;\n line-height: 1.111;\n text-align: center;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (orientation: portrait) and (min-width: 451px) {\n .modal-header[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n line-height: 1.181;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (orientation: landscape) and (min-width: 801px) {\n .modal-header[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n line-height: 1.181;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .modal-header[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 2.25rem;\n line-height: 1.111;\n text-align: center;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (orientation: portrait) and (min-width: 451px) {\n .modal-header[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n line-height: 1.181;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (orientation: landscape) and (min-width: 801px) {\n .modal-header[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n line-height: 1.181;\n }\n}\n.modal-container.mat-dialog-content.mat-dialog-content[_ngcontent-%COMP%] {\n padding: 0 1rem 1rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .modal-container.mat-dialog-content.mat-dialog-content[_ngcontent-%COMP%] {\n padding: 0 3rem 0;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .modal-container.mat-dialog-content.mat-dialog-content[_ngcontent-%COMP%] {\n padding: 0 3rem 0;\n }\n}\n.modal-top[_ngcontent-%COMP%] {\n background-color: white;\n left: 0;\n right: 0;\n top: 0;\n z-index: 3;\n position: sticky;\n padding-top: 1rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .modal-top[_ngcontent-%COMP%] {\n padding-top: 1.75rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .modal-top[_ngcontent-%COMP%] {\n padding-top: 1.75rem;\n }\n}\n.close-image[_ngcontent-%COMP%] {\n background-repeat: no-repeat;\n cursor: pointer;\n width: 16px;\n height: 16px;\n background-image: url('modal-close.svg');\n background-size: contain;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .close-image[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n background-image: url('modal-close-desktop.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .close-image[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n background-image: url('modal-close-desktop.svg');\n background-size: contain;\n }\n}\n.mat-icon-button[_ngcontent-%COMP%]:hover .mat-button-focus-overlay[_ngcontent-%COMP%] {\n opacity: 0.12 !important;\n}\n.button-row[_ngcontent-%COMP%] {\n height: 30px;\n}\n.button-row[_ngcontent-%COMP%] .mat-icon-button[_ngcontent-%COMP%] {\n position: absolute;\n right: 10px;\n top: 10px;\n}\n.button-row[_ngcontent-%COMP%] .mat-icon-button[_ngcontent-%COMP%]:hover {\n background-color: rgba(0, 0, 0, 0.12);\n}\n.button-row[_ngcontent-%COMP%] .mat-icon-button[_ngcontent-%COMP%]:hover .mat-button-focus-overlay[_ngcontent-%COMP%] {\n opacity: 0.12 !important;\n}\n.modal-container[_ngcontent-%COMP%] .mck-row[_ngcontent-%COMP%] {\n justify-content: end;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJsaWJzL3VpL3NyYy9saWIvbW9kYWwvbW9kYWwuY29tcG9uZW50LnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvbW9kYWwvbW9kYWwuY29tcG9uZW50LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMkNBOztFQUFBO0FBcUNBOztzQkFBQTtBQWFBO0VBQ0ksZ0JBOUZNO0VBK0ZOLHVCQTdGYztBQ09sQjtBRHlGQTs7c0JBQUE7QUVrT0E7OztFQUFBO0FDbFVBO0VEZ0dJLDRCQVppQjtFQWFqQixrQkFBQTtFQUNBLGtCQUFBO0VBa0ZBLGtCQUFBO0VBQ0Esa0JBQUE7RUM5S0EsZ0JBQUE7RUFDQSx3QkFBQTtVQUFBLHFCQUFBO0VBQ0EsdUJBQUE7VUFBQSxtQkFBQTtFQUVBLHFCSGtEYTtBQ25DakI7QUN2Qlk7RUNIWjtJRHdMUSxpQkFBQTtJQUNBLGtCQUFBO0VEMUpOO0FBQ0Y7QUM3Qlk7RUNIWjtJRHdMUSxpQkFBQTtJQUNBLGtCQUFBO0VEcEpOO0FBQ0Y7QUNuQ1k7RUNIWjtJRGdHSSw0QkFaaUI7SUFhakIsa0JBQUE7SUFDQSxrQkFBQTtJQWtGQSxrQkFBQTtJQUNBLGtCQUFBO0lDakxJLGtCQUFBO0VGMkNOO0FBQ0Y7QUM3Q1k7RUNIWjtJRHdMUSxpQkFBQTtJQUNBLGtCQUFBO0VEcElOO0FBQ0Y7QUNuRFk7RUNIWjtJRHdMUSxpQkFBQTtJQUNBLGtCQUFBO0VEOUhOO0FBQ0Y7QUN6RFk7RUNIWjtJRGdHSSw0QkFaaUI7SUFhakIsa0JBQUE7SUFDQSxrQkFBQTtJQWtGQSxrQkFBQTtJQUNBLGtCQUFBO0lDakxJLGtCQUFBO0VGaUVOO0FBQ0Y7QUNuRVk7RUNIWjtJRHdMUSxpQkFBQTtJQUNBLGtCQUFBO0VEOUdOO0FBQ0Y7QUN6RVk7RUNIWjtJRHdMUSxpQkFBQTtJQUNBLGtCQUFBO0VEeEdOO0FBQ0Y7QUVwRUE7RUFDSSxvQkFBQTtBRnVFSjtBQ25GWTtFQ1daO0lBR1EsaUJBQUE7RUZ5RU47QUFDRjtBQ3hGWTtFQ1daO0lBR1EsaUJBQUE7RUY4RU47QUFDRjtBRXhFQTtFQUNJLHVCQUFBO0VBQ0EsT0FBQTtFQUNBLFFBQUE7RUFDQSxNQUFBO0VBQ0EsVUFBQTtFQUNBLGdCQUFBO0VBRUEsaUJIdUJZO0FDa0RoQjtBQ3RHWTtFQ3FCWjtJQVVRLG9CSDhCZTtFQzZDckI7QUFDRjtBQzNHWTtFQ3FCWjtJQVVRLG9CSDhCZTtFQ2tEckI7QUFDRjtBRTdFQTtFQUNJLDRCQUFBO0VBQ0EsZUFBQTtFRHVTQSxXRjVPUztFRTZPVCxZRjdPUztFRThPVCx3Q0FBQTtFQUNBLHdCQUFBO0FEdE5KO0FDekhZO0VDbUNaO0lEeVNJLFdGM09VO0lFNE9WLFlGNU9VO0lFNk9WLGdEQUFBO0lBQ0Esd0JBQUE7RUQvTUY7QUFDRjtBQ2pJWTtFQ21DWjtJRHlTSSxXRjNPVTtJRTRPVixZRjVPVTtJRTZPVixnREFBQTtJQUNBLHdCQUFBO0VEdk1GO0FBQ0Y7QUU1Rkc7RUFDSyx3QkFBQTtBRitGUjtBRTNGQTtFQUNJLFlBQUE7QUY4Rko7QUU3Rkk7RUFDSSxrQkFBQTtFQUNBLFdBQUE7RUFDQSxTQUFBO0FGK0ZSO0FFN0ZJO0VBQ0kscUNBQUE7QUYrRlI7QUU5RlE7RUFDTSx3QkFBQTtBRmdHZDtBRTFGQTtFQUNJLG9CQUFBO0FGNkZKIiwiZmlsZSI6ImxpYnMvdWkvc3JjL2xpYi9tb2RhbC9tb2RhbC5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIiRwcmltYXJ5OiAjMUY0MEU2O1xuJGZvcm0tbGFiZWw6ICMwNTFDMkM7XG4kc2Vjb25kYXJ5LWxhYmVsOiAjNzY3Njc2O1xuJGJvcmRlcjogI0IzQjNCMztcbiRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkOiAjRDBEMEQwO1xuJGNoaXAtY29sb3I6ICMzMzMzMzM7XG4kcGxhY2Vob2xkZXItY29sb3I6ICM3RjdGN0Y7XG4kYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDtcbiRwYWdlLWJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4kc2VsZWN0ZWQtb3B0aW9uOiAjRTZFNkU2O1xuJGNvbG9yLWJyYW5kLXllbGxvdzogI2ZmZDA0ODtcbiRsaWdodC15ZWxsb3c6ICNmZmYzY2U7XG4kY29hY2htYXJrLXRleHQ6ICM2ZjRkMDA7XG4kZXJyb3ItY29sb3I6ICNFMTJFNDA7XG4kbm8tZmlsdGVycy1jb2xvcjogI0JDQkNCQztcbiRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjogI0Y0RjRGNDtcbiRwcmltYXJ5LWhpZ2hsaWdodDogIzIyNTFGRjtcbiRzY3JvbGxiYXItY29sb3I6ICM3NTc1NzU7XG5cbiRhdmFpbGFibGUtY29sb3I6ICM1RDlENTI7XG4kYXZhaWxhYmxlLWJ5LXJlcXVlc3QtY29sb3I6ICNGNUI1M0Y7XG4kaW4tdXNlLWNvbG9yOiAjRDQ0ODNFO1xuJG5vdC1ib29rYWJsZS1jb2xvcjogI0NDQ0NDQztcblxuJG1vZGFsLWJvZHktaGVhZGluZzogIzRENEQ0RDtcbiRhbGVydC1vdmVybGF5LWJnOiByZ2JhKDUsIDI4LCA0NCwgMC44NSk7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvYWNobWFyay1iZzogI0VCRUJGNjtcbiRjb2FjaG1hcmstZGFyay10ZXh0OiAjMUIxQjE5O1xuJGVycm9yLXRleHQ6ICNmZmY7XG5cbi8qKlxuICogU3BhY2luZ1xuICovXG5cbi8vIDRweFxuJHNwYWNpbmctc21hbGxlc3Q6IDAuMjVyZW07XG5cbi8vIDhweFxuJHNwYWNpbmcteHhzbWFsbDogMC41cmVtO1xuXG4vLyAxMnB4XG4kc3BhY2luZy14c21hbGw6IDAuNzVyZW07XG5cbi8vIDE2cHhcbiRzcGFjaW5nLXNtYWxsOiAxcmVtO1xuXG4vLyAyMHB4XG4kc3BhY2luZy1zbWFsbC1tZWRpdW06IDEuMjVyZW07XG5cbi8vIDI0cHhcbiRzcGFjaW5nLW1lZGl1bTogMS41cmVtO1xuXG4vLyAyOHB4XG4kc3BhY2luZy1tZWRpdW0tbGFyZ2U6IDEuNzVyZW07XG5cbi8vIDMycHhcbiRzcGFjaW5nLWxhcmdlOiAycmVtO1xuXG4vLyA0OHB4XG4kc3BhY2luZy14bGFyZ2U6IDNyZW07XG5cbi8vIDY0cHhcbiRzcGFjaW5nLXh4bGFyZ2U6IDRyZW07XG5cbi8vIDk2cHhcbiRzcGFjaW5nLWxhcmdlc3Q6IDZyZW07XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kZGV2aWNlLW1vYmlsZS1zaXplOiA0NTBweDtcbiRkZXZpY2UtdGFibGV0LXNpemU6IDgwMHB4O1xuJGRldmljZS1sYXB0b3Atc2l6ZTogMTAyNHB4O1xuXG4kZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZTogMTA0OHB4O1xuJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemU6IDEyODBweDtcblxuXG46ZXhwb3J0IHtcbiAgICBwcmltYXJ5OiAkcHJpbWFyeTtcbiAgICBzZWNvbmRhcnlMYWJlbDogJHNlY29uZGFyeS1sYWJlbDtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbiRpY29uLXNtYWxsOiAxNnB4O1xuJGljb24tbWVkaXVtOiAyNHB4O1xuJGljb24tbGFyZ2U6IDMycHg7XG4kaWNvbi14bGFyZ2U6IDQ4cHg7XG4iLCIvKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbi5tb2RhbC1oZWFkZXIge1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXNpemU6IDIuMjVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjExMTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgbWFyZ2luLWJsb2NrLXN0YXJ0OiAwO1xuICBtYXJnaW4tYmxvY2stZW5kOiAwO1xuICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubW9kYWwtaGVhZGVyIHtcbiAgICBmb250LXNpemU6IDIuNXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xODE7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubW9kYWwtaGVhZGVyIHtcbiAgICBmb250LXNpemU6IDIuNXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xODE7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tb2RhbC1oZWFkZXIge1xuICAgIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtc2l6ZTogMi4yNXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xMTE7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubW9kYWwtaGVhZGVyIHtcbiAgICBmb250LXNpemU6IDIuNXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xODE7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubW9kYWwtaGVhZGVyIHtcbiAgICBmb250LXNpemU6IDIuNXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xODE7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubW9kYWwtaGVhZGVyIHtcbiAgICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LXNpemU6IDIuMjVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMTExO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tb2RhbC1oZWFkZXIge1xuICAgIGZvbnQtc2l6ZTogMi41cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubW9kYWwtaGVhZGVyIHtcbiAgICBmb250LXNpemU6IDIuNXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xODE7XG4gIH1cbn1cblxuLm1vZGFsLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRlbnQubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgcGFkZGluZzogMCAxcmVtIDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubW9kYWwtY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGVudC5tYXQtZGlhbG9nLWNvbnRlbnQge1xuICAgIHBhZGRpbmc6IDAgM3JlbSAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1vZGFsLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRlbnQubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwIDNyZW0gMDtcbiAgfVxufVxuLm1vZGFsLXRvcCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgdG9wOiAwO1xuICB6LWluZGV4OiAzO1xuICBwb3NpdGlvbjogc3RpY2t5O1xuICBwYWRkaW5nLXRvcDogMXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tb2RhbC10b3Age1xuICAgIHBhZGRpbmctdG9wOiAxLjc1cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1vZGFsLXRvcCB7XG4gICAgcGFkZGluZy10b3A6IDEuNzVyZW07XG4gIH1cbn1cblxuLmNsb3NlLWltYWdlIHtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB3aWR0aDogMTZweDtcbiAgaGVpZ2h0OiAxNnB4O1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvbW9kYWwtY2xvc2Uuc3ZnXCIpO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAuY2xvc2UtaW1hZ2Uge1xuICAgIHdpZHRoOiAyNHB4O1xuICAgIGhlaWdodDogMjRweDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvbW9kYWwtY2xvc2UtZGVza3RvcC5zdmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLmNsb3NlLWltYWdlIHtcbiAgICB3aWR0aDogMjRweDtcbiAgICBoZWlnaHQ6IDI0cHg7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwibGlicy91aS9zcmMvbGliL2ljb25zL21vZGFsLWNsb3NlLWRlc2t0b3Auc3ZnXCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbiAgfVxufVxuXG4ubWF0LWljb24tYnV0dG9uOmhvdmVyIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkge1xuICBvcGFjaXR5OiAwLjEyICFpbXBvcnRhbnQ7XG59XG5cbi5idXR0b24tcm93IHtcbiAgaGVpZ2h0OiAzMHB4O1xufVxuLmJ1dHRvbi1yb3cgLm1hdC1pY29uLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDEwcHg7XG4gIHRvcDogMTBweDtcbn1cbi5idXR0b24tcm93IC5tYXQtaWNvbi1idXR0b246aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMTIpO1xufVxuLmJ1dHRvbi1yb3cgLm1hdC1pY29uLWJ1dHRvbjpob3ZlciAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5IHtcbiAgb3BhY2l0eTogMC4xMiAhaW1wb3J0YW50O1xufVxuXG4ubW9kYWwtY29udGFpbmVyIC5tY2stcm93IHtcbiAganVzdGlmeS1jb250ZW50OiBlbmQ7XG59IiwiQGltcG9ydCBcInZhcnNcIjtcblxuQG1peGluIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJHNpemUsICRxdWFsaWZpZXIpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBpZiAoJHF1YWxpZmllciA9PSBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIGlmICgkcXVhbGlmaWVyID09IG1heC13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtYXgtd2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBtaXhpbiBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJG1pbiwgJG1heCkge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gdGhpcyBpcyBhIGNvcHkgb2YgcmVzcG9uZC10by4gd2UgZG9uJ3Qgd2FudCB0byBwcmVzZXJ2ZSB0aGF0IG1ldGhvZCBzaW5jZSB0aGUgYnJlYWtwb2ludHMgbWF5IGRpdmVyZ2UgZnJvbSB0aGUgb2xkIFVJLlxuQG1peGluIGlzLXNjcmVlbi1zaXplKCRtZWRpYTogYWxsLCAkb3JpZW50YXRpb246IG5vbmUpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuXG5AbWl4aW4gcGFnZS1wYWRkaW5nIHtcbiAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xufVxuXG4vLyBGb250IE1peGluc1xuJGZvbnQtbWNraW5zZXktc2FuczogXCJNY0tpbnNleSBTYW5zXCI7XG4kZm9udC10aGVpbmhhcmR0OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiRmb250LWJvd2VyOiBcIkJvd2VyXCI7XG5cbkBtaXhpbiBib3dlci1ib2xkIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtYm93ZXI7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIG1ja2luc2V5LXNhbnMge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBkaXNwbGF5LTEge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDRyZW07IC8vIDY0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTg3OyAvLyA3NnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0yIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0zIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTQge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzcmVtOyAvLyA0OHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTY2OyAvLyA1NnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDY0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTUge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuODMzOyAvLyAzNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42NDI7IC8vIDQwcHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTcge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDQ4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjc1cmVtOyAvLyA0NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNTJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICBsaW5lLWhlaWdodDogMS4xMTE7IC8vIDQ0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA0OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0zIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjIyOyAvLyA0NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy00IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy01IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyODhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy02IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTU1OyAvLyAyOHB4XG4gICAgfVxufVxuXG5AbWl4aW4gYm9keS1kZWZhdWx0IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI2cHhcbiAgICB9XG59XG5cbi8vLyBEb2VzbnQgZXhpc3QgaW4gTURTLlxuQG1peGluIGJvZHktdGlueSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07IC8vIDEycHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyMHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZm9ybS1sYWJlbCB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LWZhbWlseTogJGZvbnQtdGhlaW5oYXJkdDtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgY29sb3I6ICRwbGFjZWhvbGRlci1jb2xvcjtcbiAgICBmb250LXdlaWdodDogMzAwO1xufVxuXG5AbWl4aW4gY2hpcC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIGNoZWNrYm94LWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgY29sb3I6IGJsYWNrO1xufVxuXG4vLyBib3JkZXJzXG5cbkBtaXhpbiBtY2stY2hlY2tib3gtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAycHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLXRoaW4tYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlci1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJvcmRlci1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50LWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXItbGlnaHQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5cbi8vIGZ1bmN0aW9uc1xuXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbkBtaXhpbiBtYXgtbGluZXMoJGNvdW50KSB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAtd2Via2l0LWxpbmUtY2xhbXA6ICRjb3VudDtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuXG4vLyBpbWFnZXNcbkBtaXhpbiBtY2staWNvbigkd2lkdGgsICRhc3NldCwgJGhlaWdodDogJHdpZHRoLCAgJGFzc2V0UGF0aDogXCJsaWJzL3VpL3NyYy9saWIvaWNvbnNcIiwpIHtcbiAgICB3aWR0aDogJHdpZHRoO1xuICAgIGhlaWdodDogJGhlaWdodDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIjeyRhc3NldFBhdGh9LyN7JGFzc2V0fVwiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG59XG5cblxuQG1peGluIG1jay1zbWFsbC1pY29uKCRtb2JpbGUtYXNzZXQsICRkZXNrdG9wLWFzc2V0OiAkbW9iaWxlLWFzc2V0KSB7XG4gICAgQGluY2x1ZGUgbWNrLWljb24oMTZweCwgJGFzc2V0OiAkbW9iaWxlLWFzc2V0KTtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oMjRweCwgJGFzc2V0OiAkZGVza3RvcC1hc3NldCk7XG4gICAgfVxufVxuXG4vLyBza2VsZXRvblxuQG1peGluIHNrZWxldG9uLWJnIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItaW1hZ2Utc2l6ZSB7XG4gICAgd2lkdGg6IDgxcHg7XG4gICAgaGVpZ2h0OiA4MnB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMjE5cHg7XG4gICAgICAgIGhlaWdodDogMTE5cHg7XG4gICAgfVxufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItc3RhdHVzLXNpemUge1xuICAgIHdpZHRoOiAxMTdweDtcbiAgICBoZWlnaHQ6IDc4cHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAxMTdweDtcbiAgICAgICAgaGVpZ2h0OiA3OHB4O1xuICAgIH1cbn1cbiIsIkBpbXBvcnQgXCIuLi9taXhpbnNcIjtcblxuLm1vZGFsLWhlYWRlciB7XG4gICAgQGluY2x1ZGUgaGVhZGluZy0yO1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgQGluY2x1ZGUgaGVhZGluZy0yO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgfVxuXG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBtYXJnaW4tYmxvY2stc3RhcnQ6IDA7XG4gICAgbWFyZ2luLWJsb2NrLWVuZDogMDtcblxuICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nLW1lZGl1bTtcbn1cblxuLm1vZGFsLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRlbnQubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwICRzcGFjaW5nLXNtYWxsICRzcGFjaW5nLXNtYWxsO1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgcGFkZGluZzogMCAkc3BhY2luZy14bGFyZ2UgMDtcbiAgICB9XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgIC8vIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSA1OHB4KTtcbiAgICB9XG59XG5cbi5tb2RhbC10b3Age1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgdG9wOiAwO1xuICAgIHotaW5kZXg6IDM7XG4gICAgcG9zaXRpb246IHN0aWNreTtcblxuICAgIHBhZGRpbmctdG9wOiAkc3BhY2luZy1zbWFsbDtcbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIHBhZGRpbmctdG9wOiAkc3BhY2luZy1tZWRpdW0tbGFyZ2U7XG4gICAgfVxufVxuXG4uY2xvc2UtaW1hZ2Uge1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIEBpbmNsdWRlIG1jay1pY29uKCRpY29uLXNtYWxsLCAnbW9kYWwtY2xvc2Uuc3ZnJyk7XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBAaW5jbHVkZSBtY2staWNvbigkaWNvbi1tZWRpdW0sICdtb2RhbC1jbG9zZS1kZXNrdG9wLnN2ZycpO1xuICAgIH1cbn1cblxuLm1hdC1pY29uLWJ1dHRvbjpob3ZlciB7XG4gICAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5IHtcbiAgICAgICAgb3BhY2l0eTogMC4xMiAhaW1wb3J0YW50O1xuICAgIH1cbn1cblxuLmJ1dHRvbi1yb3cge1xuICAgIGhlaWdodDogMzBweDtcbiAgICAubWF0LWljb24tYnV0dG9uICB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgcmlnaHQ6IDEwcHg7XG4gICAgICAgIHRvcDogMTBweDtcbiAgICB9XG4gICAgLm1hdC1pY29uLWJ1dHRvbjpob3ZlciAge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsMCwwLCAwLjEyKTtcbiAgICAgICAgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSB7XG4gICAgICAgICAgICAgIG9wYWNpdHk6IDAuMTIgIWltcG9ydGFudDtcblxuICAgICAgICB9XG4gICAgfVxufVxuXG4ubW9kYWwtY29udGFpbmVyIC5tY2stcm93e1xuICAgIGp1c3RpZnktY29udGVudDogZW5kO1xufVxuXG4iXX0= */"] }); /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(ModalComponent, [{ type: core_1.Component, args: [{ @@ -25376,7 +25765,7 @@ const core_1 = __webpack_require__(/*! @angular/core */ "../../node_modules/@ang const tooltip_enums_1 = __webpack_require__(/*! ./tooltip.enums */ "../../libs/ui/src/lib/tooltip/tooltip.enums.ts"); const i0 = __webpack_require__(/*! @angular/core */ "../../node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); const i1 = __webpack_require__(/*! @angular/common */ "../../node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js"); -function TooltipComponent_div_1_Template(rf, ctx) { if (rf & 1) { +function TooltipComponent_div_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div"); i0.ɵɵtext(1); i0.ɵɵelementEnd(); @@ -25399,17 +25788,19 @@ class TooltipComponent { } exports.TooltipComponent = TooltipComponent; TooltipComponent.ɵfac = function TooltipComponent_Factory(t) { return new (t || TooltipComponent)(); }; -TooltipComponent.ɵcmp = i0.ɵɵdefineComponent({ type: TooltipComponent, selectors: [["app-tooltip"]], decls: 2, vars: 11, consts: [[1, "tooltip", 3, "ngClass"], [4, "ngFor", "ngForOf"]], template: function TooltipComponent_Template(rf, ctx) { if (rf & 1) { +TooltipComponent.ɵcmp = i0.ɵɵdefineComponent({ type: TooltipComponent, selectors: [["app-tooltip"]], decls: 3, vars: 11, consts: [[1, "tooltip", 3, "ngClass"], [1, "tooltip-inner-box"], [4, "ngFor", "ngForOf"]], template: function TooltipComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 0); - i0.ɵɵtemplate(1, TooltipComponent_div_1_Template, 2, 1, "div", 1); + i0.ɵɵelementStart(1, "div", 1); + i0.ɵɵtemplate(2, TooltipComponent_div_2_Template, 2, 1, "div", 2); + i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { i0.ɵɵstyleProp("left", ctx.left + "px")("top", ctx.top + "px"); i0.ɵɵclassProp("tooltip--visible", ctx.visible); i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(8, _c0, "tooltip--" + ctx.position, "tooltip--" + ctx.theme)); - i0.ɵɵadvance(1); + i0.ɵɵadvance(2); i0.ɵɵproperty("ngForOf", ctx.tooltip); - } }, directives: [i1.NgClass, i1.NgForOf], styles: [".tooltip[_ngcontent-%COMP%] {\n position: fixed;\n background-color: black;\n border-radius: 4px;\n color: #ffffff;\n font-family: Arial;\n padding: 3px 6px;\n font-size: 13px;\n opacity: 0;\n}\n.tooltip[_ngcontent-%COMP%]::before {\n content: \"\";\n width: 0;\n height: 0;\n position: absolute;\n}\n.tooltip--visible[_ngcontent-%COMP%] {\n opacity: 1;\n transition: opacity 300ms;\n}\n.tooltip--light[_ngcontent-%COMP%] {\n background-color: white;\n color: black;\n}\n.tooltip--light[_ngcontent-%COMP%]::before {\n border: 5px solid white;\n}\n.tooltip--dark[_ngcontent-%COMP%] {\n background-color: black;\n color: white;\n}\n.tooltip--dark[_ngcontent-%COMP%]::before {\n border: 5px solid black;\n}\n.tooltip--below[_ngcontent-%COMP%] {\n transform: translateX(-50%);\n margin-top: 7px;\n}\n.tooltip--below[_ngcontent-%COMP%]::before {\n border-left-color: transparent;\n border-right-color: transparent;\n border-top: none;\n left: calc(50% - 5px);\n top: -5px;\n}\n.tooltip--above[_ngcontent-%COMP%] {\n transform: translate(-50%, -100%);\n margin-bottom: 7px;\n}\n.tooltip--above[_ngcontent-%COMP%]::before {\n border-left-color: transparent;\n border-right-color: transparent;\n border-bottom: none;\n left: calc(50% - 5px);\n bottom: -5px;\n}\n.tooltip--left[_ngcontent-%COMP%] {\n transform: translate(calc(-100% - 7px), -50%);\n}\n.tooltip--left[_ngcontent-%COMP%]::before {\n border-top-color: transparent;\n border-bottom-color: transparent;\n border-right: none;\n right: -5px;\n top: calc(50% - 5px);\n}\n.tooltip--right[_ngcontent-%COMP%] {\n transform: translateY(-50%);\n margin-left: 7px;\n}\n.tooltip--right[_ngcontent-%COMP%]::before {\n border-top-color: transparent;\n border-bottom-color: transparent;\n border-left: none;\n left: -5px;\n top: calc(50% - 5px);\n}\n.tooltip--dynamic[_ngcontent-%COMP%] {\n margin-left: 20px;\n}\n.tooltip--dynamic[_ngcontent-%COMP%]::before {\n display: none;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi90b29sdGlwL3Rvb2x0aXAuY29tcG9uZW50LnNjc3MiLCJsaWJzL3VpL3NyYy9saWIvdG9vbHRpcC90b29sdGlwLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ1EsZUFBQTtFQUNBLHVCQUFBO0VBQ0Esa0JBQUE7RUFDQSxjQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLGVBQUE7RUFDQSxVQUFBO0FDQ1I7QURDUTtFQUNFLFdBQUE7RUFDQSxRQUFBO0VBQ0EsU0FBQTtFQUNBLGtCQUFBO0FDQ1Y7QURFUTtFQUNFLFVBQUE7RUFDQSx5QkFBQTtBQ0FWO0FER1E7RUFDRSx1QkFBQTtFQUNBLFlBQUE7QUNEVjtBREdVO0VBQ0UsdUJBQUE7QUNEWjtBREtRO0VBQ0UsdUJBQUE7RUFDQSxZQUFBO0FDSFY7QURLVTtFQUNFLHVCQUFBO0FDSFo7QURPUTtFQUNFLDJCQUFBO0VBQ0EsZUFBQTtBQ0xWO0FET1U7RUFDRSw4QkFBQTtFQUNBLCtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxxQkFBQTtFQUNBLFNBQUE7QUNMWjtBRFNRO0VBQ0UsaUNBQUE7RUFDQSxrQkFBQTtBQ1BWO0FEU1U7RUFDRSw4QkFBQTtFQUNBLCtCQUFBO0VBQ0EsbUJBQUE7RUFDQSxxQkFBQTtFQUNBLFlBQUE7QUNQWjtBRFdRO0VBQ0UsNkNBQUE7QUNUVjtBRFdVO0VBQ0UsNkJBQUE7RUFDQSxnQ0FBQTtFQUNBLGtCQUFBO0VBQ0EsV0FBQTtFQUNBLG9CQUFBO0FDVFo7QURhUTtFQUNFLDJCQUFBO0VBQ0EsZ0JBQUE7QUNYVjtBRGFVO0VBQ0UsNkJBQUE7RUFDQSxnQ0FBQTtFQUNBLGlCQUFBO0VBQ0EsVUFBQTtFQUNBLG9CQUFBO0FDWFo7QURlUTtFQUNFLGlCQUFBO0FDYlY7QURlVTtFQUNFLGFBQUE7QUNiWiIsImZpbGUiOiJsaWJzL3VpL3NyYy9saWIvdG9vbHRpcC90b29sdGlwLmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLnRvb2x0aXAge1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgICAgICBmb250LWZhbWlseTogQXJpYWw7XG4gICAgICAgIHBhZGRpbmc6IDNweCA2cHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgIFxuICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgIHdpZHRoOiAwO1xuICAgICAgICAgIGhlaWdodDogMDtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIH1cbiAgICAgIFxuICAgICAgICAmLS12aXNpYmxlIHtcbiAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMzAwbXM7XG4gICAgICAgIH1cbiAgICAgIFxuICAgICAgICAmLS1saWdodCB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgICAgY29sb3I6IGJsYWNrO1xuICAgICAgXG4gICAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICAgIGJvcmRlcjogNXB4IHNvbGlkIHdoaXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXG4gICAgICAgICYtLWRhcmsge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xuICAgICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgIFxuICAgICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgICBib3JkZXI6IDVweCBzb2xpZCBibGFjaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIFxuICAgICAgICAmLS1iZWxvdyB7XG4gICAgICAgICAgdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgICAgICAgbWFyZ2luLXRvcDogN3B4O1xuICAgICAgXG4gICAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgICBib3JkZXItdG9wOiBub25lO1xuICAgICAgICAgICAgbGVmdDogY2FsYyg1MCUgLSA1cHgpO1xuICAgICAgICAgICAgdG9wOiAtNXB4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXG4gICAgICAgICYtLWFib3ZlIHtcbiAgICAgICAgICB0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC0xMDAlKTtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiA3cHg7XG4gICAgICBcbiAgICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgICAgYm9yZGVyLWxlZnQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG4gICAgICAgICAgICBsZWZ0OiBjYWxjKDUwJSAtIDVweCk7XG4gICAgICAgICAgICBib3R0b206IC01cHg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBcbiAgICAgICAgJi0tbGVmdCB7XG4gICAgICAgICAgdHJhbnNmb3JtOnRyYW5zbGF0ZShjYWxjKC0xMDAlIC0gN3B4KSwgLTUwJSk7XG4gICAgICBcbiAgICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgIGJvcmRlci1yaWdodDogbm9uZTtcbiAgICAgICAgICAgIHJpZ2h0OiAtNXB4O1xuICAgICAgICAgICAgdG9wOiBjYWxjKDUwJSAtIDVweCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBcbiAgICAgICAgJi0tcmlnaHQge1xuICAgICAgICAgIHRyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiA3cHg7XG4gICAgICBcbiAgICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgIGJvcmRlci1sZWZ0OiBub25lO1xuICAgICAgICAgICAgbGVmdDogLTVweDtcbiAgICAgICAgICAgIHRvcDogY2FsYyg1MCUgLSA1cHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXG4gICAgICAgICYtLWR5bmFtaWMge1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAyMHB4O1xuICAgICAgXG4gICAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAiLCIudG9vbHRpcCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgY29sb3I6ICNmZmZmZmY7XG4gIGZvbnQtZmFtaWx5OiBBcmlhbDtcbiAgcGFkZGluZzogM3B4IDZweDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBvcGFjaXR5OiAwO1xufVxuLnRvb2x0aXA6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbn1cbi50b29sdGlwLS12aXNpYmxlIHtcbiAgb3BhY2l0eTogMTtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAzMDBtcztcbn1cbi50b29sdGlwLS1saWdodCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBjb2xvcjogYmxhY2s7XG59XG4udG9vbHRpcC0tbGlnaHQ6OmJlZm9yZSB7XG4gIGJvcmRlcjogNXB4IHNvbGlkIHdoaXRlO1xufVxuLnRvb2x0aXAtLWRhcmsge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjaztcbiAgY29sb3I6IHdoaXRlO1xufVxuLnRvb2x0aXAtLWRhcms6OmJlZm9yZSB7XG4gIGJvcmRlcjogNXB4IHNvbGlkIGJsYWNrO1xufVxuLnRvb2x0aXAtLWJlbG93IHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICBtYXJnaW4tdG9wOiA3cHg7XG59XG4udG9vbHRpcC0tYmVsb3c6OmJlZm9yZSB7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXRvcDogbm9uZTtcbiAgbGVmdDogY2FsYyg1MCUgLSA1cHgpO1xuICB0b3A6IC01cHg7XG59XG4udG9vbHRpcC0tYWJvdmUge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtMTAwJSk7XG4gIG1hcmdpbi1ib3R0b206IDdweDtcbn1cbi50b29sdGlwLS1hYm92ZTo6YmVmb3JlIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItYm90dG9tOiBub25lO1xuICBsZWZ0OiBjYWxjKDUwJSAtIDVweCk7XG4gIGJvdHRvbTogLTVweDtcbn1cbi50b29sdGlwLS1sZWZ0IHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoY2FsYygtMTAwJSAtIDdweCksIC01MCUpO1xufVxuLnRvb2x0aXAtLWxlZnQ6OmJlZm9yZSB7XG4gIGJvcmRlci10b3AtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJpZ2h0OiBub25lO1xuICByaWdodDogLTVweDtcbiAgdG9wOiBjYWxjKDUwJSAtIDVweCk7XG59XG4udG9vbHRpcC0tcmlnaHQge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIG1hcmdpbi1sZWZ0OiA3cHg7XG59XG4udG9vbHRpcC0tcmlnaHQ6OmJlZm9yZSB7XG4gIGJvcmRlci10b3AtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gIGxlZnQ6IC01cHg7XG4gIHRvcDogY2FsYyg1MCUgLSA1cHgpO1xufVxuLnRvb2x0aXAtLWR5bmFtaWMge1xuICBtYXJnaW4tbGVmdDogMjBweDtcbn1cbi50b29sdGlwLS1keW5hbWljOjpiZWZvcmUge1xuICBkaXNwbGF5OiBub25lO1xufSJdfQ== */"] }); + } }, directives: [i1.NgClass, i1.NgForOf], styles: [".tooltip[_ngcontent-%COMP%] {\n position: fixed;\n background-color: black;\n border-radius: 4px;\n color: #ffffff;\n font-family: Arial;\n padding: 3px 6px;\n font-size: 13px;\n opacity: 0;\n}\n.tooltip[_ngcontent-%COMP%]::before {\n content: \"\";\n width: 0;\n height: 0;\n position: absolute;\n}\n.tooltip--visible[_ngcontent-%COMP%] {\n opacity: 1;\n transition: opacity 300ms;\n}\n.tooltip--light[_ngcontent-%COMP%] {\n background-color: white;\n color: black;\n}\n.tooltip--light[_ngcontent-%COMP%]::before {\n border: 5px solid white;\n}\n.tooltip--dark[_ngcontent-%COMP%] {\n background-color: black;\n color: white;\n}\n.tooltip--dark[_ngcontent-%COMP%]::before {\n border: 5px solid black;\n}\n.tooltip--below[_ngcontent-%COMP%] {\n transform: translateX(-50%);\n margin-top: 7px;\n}\n.tooltip--below[_ngcontent-%COMP%]::before {\n border-left-color: transparent;\n border-right-color: transparent;\n border-top: none;\n left: calc(50% - 5px);\n top: -5px;\n}\n.tooltip--above[_ngcontent-%COMP%] {\n transform: translate(-50%, -100%);\n margin-bottom: 7px;\n}\n.tooltip--above[_ngcontent-%COMP%]::before {\n border-left-color: transparent;\n border-right-color: transparent;\n border-bottom: none;\n left: calc(50% - 5px);\n bottom: -5px;\n}\n.tooltip--left[_ngcontent-%COMP%] {\n transform: translate(calc(-100% - 7px), -50%);\n}\n.tooltip--left[_ngcontent-%COMP%]::before {\n border-top-color: transparent;\n border-bottom-color: transparent;\n border-right: none;\n right: -5px;\n top: calc(50% - 5px);\n}\n.tooltip--right[_ngcontent-%COMP%] {\n transform: translateY(-50%);\n margin-left: 7px;\n}\n.tooltip--right[_ngcontent-%COMP%]::before {\n border-top-color: transparent;\n border-bottom-color: transparent;\n border-left: none;\n left: -5px;\n top: calc(50% - 5px);\n}\n.tooltip--dynamic[_ngcontent-%COMP%] {\n margin-left: 20px;\n}\n.tooltip--dynamic[_ngcontent-%COMP%]::before {\n display: none;\n}\n.tooltip[_ngcontent-%COMP%] .tooltip-inner-box[_ngcontent-%COMP%] {\n max-height: 100px;\n overflow-y: auto;\n width: 85px;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi90b29sdGlwL3Rvb2x0aXAuY29tcG9uZW50LnNjc3MiLCJsaWJzL3VpL3NyYy9saWIvdG9vbHRpcC90b29sdGlwLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ1EsZUFBQTtFQUNBLHVCQUFBO0VBQ0Esa0JBQUE7RUFDQSxjQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLGVBQUE7RUFDQSxVQUFBO0FDQ1I7QURDUTtFQUNFLFdBQUE7RUFDQSxRQUFBO0VBQ0EsU0FBQTtFQUNBLGtCQUFBO0FDQ1Y7QURFUTtFQUNFLFVBQUE7RUFDQSx5QkFBQTtBQ0FWO0FER1E7RUFDRSx1QkFBQTtFQUNBLFlBQUE7QUNEVjtBREdVO0VBQ0UsdUJBQUE7QUNEWjtBREtRO0VBQ0UsdUJBQUE7RUFDQSxZQUFBO0FDSFY7QURLVTtFQUNFLHVCQUFBO0FDSFo7QURPUTtFQUNFLDJCQUFBO0VBQ0EsZUFBQTtBQ0xWO0FET1U7RUFDRSw4QkFBQTtFQUNBLCtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxxQkFBQTtFQUNBLFNBQUE7QUNMWjtBRFNRO0VBQ0UsaUNBQUE7RUFDQSxrQkFBQTtBQ1BWO0FEU1U7RUFDRSw4QkFBQTtFQUNBLCtCQUFBO0VBQ0EsbUJBQUE7RUFDQSxxQkFBQTtFQUNBLFlBQUE7QUNQWjtBRFdRO0VBQ0UsNkNBQUE7QUNUVjtBRFdVO0VBQ0UsNkJBQUE7RUFDQSxnQ0FBQTtFQUNBLGtCQUFBO0VBQ0EsV0FBQTtFQUNBLG9CQUFBO0FDVFo7QURhUTtFQUNFLDJCQUFBO0VBQ0EsZ0JBQUE7QUNYVjtBRGFVO0VBQ0UsNkJBQUE7RUFDQSxnQ0FBQTtFQUNBLGlCQUFBO0VBQ0EsVUFBQTtFQUNBLG9CQUFBO0FDWFo7QURlUTtFQUNFLGlCQUFBO0FDYlY7QURlVTtFQUNFLGFBQUE7QUNiWjtBRGlCUTtFQUNFLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxXQUFBO0FDZlYiLCJmaWxlIjoibGlicy91aS9zcmMvbGliL3Rvb2x0aXAvdG9vbHRpcC5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi50b29sdGlwIHtcbiAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjaztcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgICAgZm9udC1mYW1pbHk6IEFyaWFsO1xuICAgICAgICBwYWRkaW5nOiAzcHggNnB4O1xuICAgICAgICBmb250LXNpemU6IDEzcHg7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICBcbiAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICB3aWR0aDogMDtcbiAgICAgICAgICBoZWlnaHQ6IDA7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB9XG4gICAgICBcbiAgICAgICAgJi0tdmlzaWJsZSB7XG4gICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDMwMG1zO1xuICAgICAgICB9XG4gICAgICBcbiAgICAgICAgJi0tbGlnaHQge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICAgIGNvbG9yOiBibGFjaztcbiAgICAgIFxuICAgICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgICBib3JkZXI6IDVweCBzb2xpZCB3aGl0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIFxuICAgICAgICAmLS1kYXJrIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjaztcbiAgICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICBcbiAgICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgICAgYm9yZGVyOiA1cHggc29saWQgYmxhY2s7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBcbiAgICAgICAgJi0tYmVsb3cge1xuICAgICAgICAgIHRyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgICAgIG1hcmdpbi10b3A6IDdweDtcbiAgICAgIFxuICAgICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgYm9yZGVyLXRvcDogbm9uZTtcbiAgICAgICAgICAgIGxlZnQ6IGNhbGMoNTAlIC0gNXB4KTtcbiAgICAgICAgICAgIHRvcDogLTVweDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIFxuICAgICAgICAmLS1hYm92ZSB7XG4gICAgICAgICAgdHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtMTAwJSk7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogN3B4O1xuICAgICAgXG4gICAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgICBib3JkZXItYm90dG9tOiBub25lO1xuICAgICAgICAgICAgbGVmdDogY2FsYyg1MCUgLSA1cHgpO1xuICAgICAgICAgICAgYm90dG9tOiAtNXB4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXG4gICAgICAgICYtLWxlZnQge1xuICAgICAgICAgIHRyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYygtMTAwJSAtIDdweCksIC01MCUpO1xuICAgICAgXG4gICAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICAgIGJvcmRlci10b3AtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgICBib3JkZXItcmlnaHQ6IG5vbmU7XG4gICAgICAgICAgICByaWdodDogLTVweDtcbiAgICAgICAgICAgIHRvcDogY2FsYyg1MCUgLSA1cHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXG4gICAgICAgICYtLXJpZ2h0IHtcbiAgICAgICAgICB0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogN3B4O1xuICAgICAgXG4gICAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICAgIGJvcmRlci10b3AtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICAgICAgICAgIGxlZnQ6IC01cHg7XG4gICAgICAgICAgICB0b3A6IGNhbGMoNTAlIC0gNXB4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIFxuICAgICAgICAmLS1keW5hbWljIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogMjBweDtcbiAgICAgIFxuICAgICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC50b29sdGlwLWlubmVyLWJveCB7XG4gICAgICAgICAgbWF4LWhlaWdodDogMTAwcHg7XG4gICAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgICAgICB3aWR0aDogODVweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgIiwiLnRvb2x0aXAge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICBmb250LWZhbWlseTogQXJpYWw7XG4gIHBhZGRpbmc6IDNweCA2cHg7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgb3BhY2l0eTogMDtcbn1cbi50b29sdGlwOjpiZWZvcmUge1xuICBjb250ZW50OiBcIlwiO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG59XG4udG9vbHRpcC0tdmlzaWJsZSB7XG4gIG9wYWNpdHk6IDE7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMzAwbXM7XG59XG4udG9vbHRpcC0tbGlnaHQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgY29sb3I6IGJsYWNrO1xufVxuLnRvb2x0aXAtLWxpZ2h0OjpiZWZvcmUge1xuICBib3JkZXI6IDVweCBzb2xpZCB3aGl0ZTtcbn1cbi50b29sdGlwLS1kYXJrIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG4gIGNvbG9yOiB3aGl0ZTtcbn1cbi50b29sdGlwLS1kYXJrOjpiZWZvcmUge1xuICBib3JkZXI6IDVweCBzb2xpZCBibGFjaztcbn1cbi50b29sdGlwLS1iZWxvdyB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgbWFyZ2luLXRvcDogN3B4O1xufVxuLnRvb2x0aXAtLWJlbG93OjpiZWZvcmUge1xuICBib3JkZXItbGVmdC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1yaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci10b3A6IG5vbmU7XG4gIGxlZnQ6IGNhbGMoNTAlIC0gNXB4KTtcbiAgdG9wOiAtNXB4O1xufVxuLnRvb2x0aXAtLWFib3ZlIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTEwMCUpO1xuICBtYXJnaW4tYm90dG9tOiA3cHg7XG59XG4udG9vbHRpcC0tYWJvdmU6OmJlZm9yZSB7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbiAgbGVmdDogY2FsYyg1MCUgLSA1cHgpO1xuICBib3R0b206IC01cHg7XG59XG4udG9vbHRpcC0tbGVmdCB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKGNhbGMoLTEwMCUgLSA3cHgpLCAtNTAlKTtcbn1cbi50b29sdGlwLS1sZWZ0OjpiZWZvcmUge1xuICBib3JkZXItdG9wLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1yaWdodDogbm9uZTtcbiAgcmlnaHQ6IC01cHg7XG4gIHRvcDogY2FsYyg1MCUgLSA1cHgpO1xufVxuLnRvb2x0aXAtLXJpZ2h0IHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICBtYXJnaW4tbGVmdDogN3B4O1xufVxuLnRvb2x0aXAtLXJpZ2h0OjpiZWZvcmUge1xuICBib3JkZXItdG9wLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1sZWZ0OiBub25lO1xuICBsZWZ0OiAtNXB4O1xuICB0b3A6IGNhbGMoNTAlIC0gNXB4KTtcbn1cbi50b29sdGlwLS1keW5hbWljIHtcbiAgbWFyZ2luLWxlZnQ6IDIwcHg7XG59XG4udG9vbHRpcC0tZHluYW1pYzo6YmVmb3JlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi50b29sdGlwIC50b29sdGlwLWlubmVyLWJveCB7XG4gIG1heC1oZWlnaHQ6IDEwMHB4O1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICB3aWR0aDogODVweDtcbn0iXX0= */"] }); /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(TooltipComponent, [{ type: core_1.Component, args: [{ @@ -25714,6 +26105,8 @@ const cng_select_options_component_1 = __webpack_require__(/*! ./cng-select/cng- const tooltip_component_1 = __webpack_require__(/*! ./tooltip/tooltip.component */ "../../libs/ui/src/lib/tooltip/tooltip.component.ts"); const tooltip_directive_1 = __webpack_require__(/*! ./tooltip/tooltip.directive */ "../../libs/ui/src/lib/tooltip/tooltip.directive.ts"); const zoom_warning_component_1 = __webpack_require__(/*! ./zoom-warning-modal/components/zoom-warning/zoom-warning.component */ "../../libs/ui/src/lib/zoom-warning-modal/components/zoom-warning/zoom-warning.component.ts"); +const custom_snackbar_component_component_1 = __webpack_require__(/*! ./custom-snackbar-component/custom-snackbar-component.component */ "../../libs/ui/src/lib/custom-snackbar-component/custom-snackbar-component.component.ts"); +const catering_drop_modal_component_1 = __webpack_require__(/*! ./catering-drop-modal/components/catering-drop/catering-drop-modal.component */ "../../libs/ui/src/lib/catering-drop-modal/components/catering-drop/catering-drop-modal.component.ts"); const i0 = __webpack_require__(/*! @angular/core */ "../../node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); exports.MATERIAL_MODULES = [ button_1.MatButtonModule, @@ -25745,7 +26138,9 @@ UiModule.ɵinj = i0.ɵɵdefineInjector({ factory: function UiModule_Factory(t) { ...exports.MATERIAL_MODULES, forms_1.ReactiveFormsModule, forms_1.FormsModule, - ngx_mat_select_search_1.NgxMatSelectSearchModule, ngx_skeleton_loader_1.NgxSkeletonLoaderModule], + ngx_mat_select_search_1.NgxMatSelectSearchModule, + ngx_skeleton_loader_1.NgxSkeletonLoaderModule, + snack_bar_1.MatSnackBarModule], forms_1.ReactiveFormsModule, forms_1.FormsModule] }); (function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(UiModule, { declarations: [auto_complete_chip_select_item_component_1.AutoCompleteChipSelectItemComponent, @@ -25790,7 +26185,9 @@ UiModule.ɵinj = i0.ɵɵdefineInjector({ factory: function UiModule_Factory(t) { cng_select_options_component_1.CngSelectOptionsComponent, tooltip_component_1.TooltipComponent, tooltip_directive_1.TooltipDirective, - zoom_warning_component_1.ZoomWarningComponent], imports: [common_1.CommonModule, + zoom_warning_component_1.ZoomWarningComponent, + custom_snackbar_component_component_1.CustomSnackbarComponent, + catering_drop_modal_component_1.CateringDropComponent], imports: [common_1.CommonModule, button_1.MatButtonModule, snack_bar_1.MatSnackBarModule, dialog_1.MatDialogModule, @@ -25813,7 +26210,9 @@ UiModule.ɵinj = i0.ɵɵdefineInjector({ factory: function UiModule_Factory(t) { overlay_1.OverlayModule, forms_1.ReactiveFormsModule, forms_1.FormsModule, - ngx_mat_select_search_1.NgxMatSelectSearchModule, ngx_skeleton_loader_1.NgxSkeletonLoaderModule], exports: [auto_complete_chip_select_item_component_1.AutoCompleteChipSelectItemComponent, + ngx_mat_select_search_1.NgxMatSelectSearchModule, + ngx_skeleton_loader_1.NgxSkeletonLoaderModule, + snack_bar_1.MatSnackBarModule], exports: [auto_complete_chip_select_item_component_1.AutoCompleteChipSelectItemComponent, auto_complete_select_option_component_1.AutoCompleteSelectOptionComponent, aca_date_picker_component_1.AcaDatePickerComponent, mck_date_picker_component_1.MckDatePickerComponent, @@ -25847,7 +26246,8 @@ UiModule.ɵinj = i0.ɵɵdefineInjector({ factory: function UiModule_Factory(t) { conflicts_modal_component_1.ConflictsModalComponent, override_changes_modal_component_1.OverrideChangesModalComponent, conflict_alert_modal_component_1.ConflictAlertModalComponent, - cng_select_component_1.CngSelectComponent, dropdown_trigger_for_directive_1.DropdownTriggerForDirective, + cng_select_component_1.CngSelectComponent, + dropdown_trigger_for_directive_1.DropdownTriggerForDirective, cng_select_options_component_1.CngSelectOptionsComponent, tooltip_component_1.TooltipComponent, tooltip_directive_1.TooltipDirective, @@ -25859,7 +26259,9 @@ UiModule.ɵinj = i0.ɵɵdefineInjector({ factory: function UiModule_Factory(t) { ...exports.MATERIAL_MODULES, forms_1.ReactiveFormsModule, forms_1.FormsModule, - ngx_mat_select_search_1.NgxMatSelectSearchModule, ngx_skeleton_loader_1.NgxSkeletonLoaderModule], + ngx_mat_select_search_1.NgxMatSelectSearchModule, + ngx_skeleton_loader_1.NgxSkeletonLoaderModule, + snack_bar_1.MatSnackBarModule], declarations: [ auto_complete_chip_select_item_component_1.AutoCompleteChipSelectItemComponent, auto_complete_select_option_component_1.AutoCompleteSelectOptionComponent, @@ -25903,7 +26305,9 @@ UiModule.ɵinj = i0.ɵɵdefineInjector({ factory: function UiModule_Factory(t) { cng_select_options_component_1.CngSelectOptionsComponent, tooltip_component_1.TooltipComponent, tooltip_directive_1.TooltipDirective, - zoom_warning_component_1.ZoomWarningComponent + zoom_warning_component_1.ZoomWarningComponent, + custom_snackbar_component_component_1.CustomSnackbarComponent, + catering_drop_modal_component_1.CateringDropComponent ], exports: [ auto_complete_chip_select_item_component_1.AutoCompleteChipSelectItemComponent, @@ -25940,11 +26344,16 @@ UiModule.ɵinj = i0.ɵɵdefineInjector({ factory: function UiModule_Factory(t) { conflicts_modal_component_1.ConflictsModalComponent, override_changes_modal_component_1.OverrideChangesModalComponent, conflict_alert_modal_component_1.ConflictAlertModalComponent, - cng_select_component_1.CngSelectComponent, dropdown_trigger_for_directive_1.DropdownTriggerForDirective, + cng_select_component_1.CngSelectComponent, + dropdown_trigger_for_directive_1.DropdownTriggerForDirective, cng_select_options_component_1.CngSelectOptionsComponent, tooltip_component_1.TooltipComponent, tooltip_directive_1.TooltipDirective, - zoom_warning_component_1.ZoomWarningComponent + zoom_warning_component_1.ZoomWarningComponent, + ], + entryComponents: [ + custom_snackbar_component_component_1.CustomSnackbarComponent, + catering_drop_modal_component_1.CateringDropComponent ] }] }], null, null); })(); @@ -26472,7 +26881,7 @@ AppComponent.ɵcmp = i0.ɵɵdefineComponent({ type: AppComponent, selectors: [[" i0.ɵɵelementStart(0, "div", 0); i0.ɵɵelement(1, "router-outlet"); i0.ɵɵelementEnd(); - } }, directives: [i2.RouterOutlet], styles: ["/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n@font-face {\n font-family: 'Material Icons';\n font-style: normal;\n font-weight: 400;\n src: url(MaterialIcons-Regular.eot); /* For IE6-8 */\n src: local('Material Icons'),\n local('MaterialIcons-Regular'),\n url(MaterialIcons-Regular.woff2) format('woff2'),\n url(MaterialIcons-Regular.woff) format('woff'),\n url(MaterialIcons-Regular.ttf) format('truetype');\n}\n.material-icons {\n font-family: 'Material Icons';\n font-weight: normal;\n font-style: normal;\n font-size: 24px; /* Preferred icon size */\n display: inline-block;\n line-height: 1;\n text-transform: none;\n letter-spacing: normal;\n word-wrap: normal;\n white-space: nowrap;\n direction: ltr;\n\n /* Support for all WebKit browsers. */\n -webkit-font-smoothing: antialiased;\n /* Support for Safari and Chrome. */\n text-rendering: optimizeLegibility;\n\n /* Support for Firefox. */\n -moz-osx-font-smoothing: grayscale;\n\n /* Support for IE. */\n font-feature-settings: 'liga';\n}\n@font-face {\n font-family: 'Custom-Icons';\n src: url('Custom-Icons.eot?lqqb85');\n src: url('Custom-Icons.eot?lqqb85#iefix') format('embedded-opentype'),\n url('Custom-Icons.woff2?lqqb85') format('woff2'),\n url('Custom-Icons.ttf?lqqb85') format('truetype'),\n url('Custom-Icons.woff?lqqb85') format('woff'),\n url('Custom-Icons.svg?lqqb85#Custom-Icons') format('svg');\n font-weight: normal;\n font-style: normal;\n}\n[class^=\"custom-\"], [class*=\" custom-\"] {\n /* use !important to prevent issues with browser extensions that change fonts */\n font-family: 'Custom-Icons' !important;\n speak: none;\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n line-height: 1;\n\n /* Better Font Rendering =========== */\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.custom-zones:before {\n content: \"\\e90d\";\n}\n.custom-schedule:before {\n content: \"\\e902\";\n}\n.custom-tick:before {\n content: \"\\e904\";\n}\n.custom-Microphone:before {\n content: \"\\e90c\";\n}\n.custom-book:before {\n content: \"\\e903\";\n}\n.custom-desk:before {\n content: \"\\e905\";\n}\n.custom-spaces:before {\n content: \"\\e906\";\n}\n.custom-private:before {\n content: \"\\e907\";\n}\n.custom-not-found:before {\n content: \"\\e908\";\n}\n/* .custom-dropdown:before {\n content: \"\\e909\";\n} */\n.custom-catering:before {\n content: \"\\e90a\";\n}\n.custom-add-attendee:before {\n content: \"\\e90b\";\n}\n.custom-new-event:before {\n content: \"\\e901\";\n}\n.custom-add-user:before {\n content: \"\\e900\";\n}\n/* McKinsey Larish - Regular - Latin */\n@font-face {\n font-family: 'LarishMcKinsey';\n font-style: normal;\n font-weight: 400;\n src: url('Larish_McKinsey_Regular.eot'); /* IE9 Compat Modes */\n src: local('LarishMcKinsey'), local('LarishMcKinseyRegular'),\n url('Larish_McKinsey_Regular.eot?#iefix') format('embedded-opentype'), \n url('Larish_McKinsey_Regular.woff2') format('woff2'), \n url('Larish_McKinsey_Regular.woff') format('woff'), \n url('Larish_McKinsey_Regular.ttf') format('truetype'), \n url('Larish_McKinsey_Regular.svg#LarishMcKinseyRegular') format('svg'); /* Legacy iOS */\n}\n/* McKinsey Larish - Semi-bold - Latin */\n@font-face {\n font-family: 'LarishMcKinsey';\n font-style: normal;\n font-weight: 500;\n src: url('Larish_McKinsey_Semibold.eot'); /* IE9 Compat Modes */\n src: local('LarishMcKinsey'), local('LarishMcKinseySemibold'),\n url('Larish_McKinsey_Semibold.eot?#iefix') format('embedded-opentype'), \n url('Larish_McKinsey_Semibold.woff2') format('woff2'), \n url('Larish_McKinsey_Semibold.woff') format('woff'), \n url('Larish_McKinsey_Semibold.ttf') format('truetype'), \n url('Larish_McKinsey_Semibold.svg#LarishMcKinseySemibold') format('svg'); /* Legacy iOS */\n}\n/* Theinhardt - Light - Latin */\n@font-face {\n font-family: 'Theinhardt';\n font-style: normal;\n font-weight: 300;\n src: local('Theinhardt'),\n url('TheinhardtTT-Light.ttf') format('truetype'), /* Safari, Android, iOS */\n}\n/* Theinhardt - Light Italic - Latin */\n@font-face {\n font-family: 'Theinhardt';\n font-style: italic;\n font-weight: 300;\n src: local('Theinhardt'),\n url('TheinhardtTT-LightItalic.ttf') format('truetype'), /* Safari, Android, iOS */\n}\n/* Theinhardt - Regular - Latin */\n@font-face {\n font-family: 'Theinhardt';\n font-style: normal;\n font-weight: 400;\n src: local('Theinhardt'),\n url('TheinhardtTT-Regular.ttf') format('truetype'), /* Safari, Android, iOS */\n}\n/* Theinhardt - Italic - Latin */\n@font-face {\n font-family: 'Theinhardt';\n font-style: italic;\n font-weight: 400;\n src: local('Theinhardt'),\n url('TheinhardtTT-Italic.ttf') format('truetype'), /* Safari, Android, iOS */\n}\n/* Theinhardt - Medium - Latin */\n@font-face {\n font-family: 'Theinhardt';\n font-style: normal;\n font-weight: 500;\n src: local('Theinhardt'),\n url('TheinhardtTT-Medium.ttf') format('truetype'), /* Safari, Android, iOS */\n}\n/* Theinhardt - Medium Italic - Latin */\n@font-face {\n font-family: 'Theinhardt';\n font-style: italic;\n font-weight: 500;\n src: local('Theinhardt'),\n url('TheinhardtTT-MediumItalic.ttf') format('truetype'), /* Safari, Android, iOS */\n}\n@font-face {\n font-display: swap;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n font-weight: normal;\n src: url('McKinseySans-Regular.woff')\n}\n@font-face {\n font-display: swap;\n font-family: \"McKinsey Sans\";\n font-style: italic;\n font-weight: normal;\n src: url('McKinseySans-Italic.woff')\n}\n@font-face {\n font-display: swap;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n font-weight: 500;\n src: url('McKinseySans-Medium.woff')\n}\n@font-face {\n font-display: swap;\n font-family: \"McKinsey Sans\";\n font-style: italic;\n font-weight: 500;\n src: url('McKinseySans-MediumItalic.woff')\n}\n@font-face {\n font-display: swap;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n font-weight: 400;\n src: local('McKinsey-Sans'),\n url('McKinseySans-Light.woff')\n}\n@font-face {\n font-display: swap;\n font-family: \"McKinsey Sans\";\n font-style: italic;\n font-weight: 400;\n src: url('McKinseySans-LightItalic.woff')\n}\n@font-face {\n font-display: swap;\n font-family: \"Bower\";\n font-style: normal;\n font-weight: bold;\n src: url('Bower-Bold.woff')\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n html,\nbody {\n font-size: 16px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n html,\nbody {\n font-size: 16px;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n html,\nbody {\n font-size: 16px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n html,\nbody {\n font-size: 16px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n html,\nbody {\n font-size: 16px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n html,\nbody {\n font-size: 16px;\n }\n}\n* {\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n box-sizing: border-box;\n}\n.material-icons {\n font-size: 1em;\n}\nspan.highlight {\n color: #1937ea;\n}\n/*=======================*\\\n|| Font size styles ||\n\\*=======================*/\n.fs-small {\n font-size: 0.8rem;\n}\n.fs-normal {\n font-size: 1rem;\n}\n.fs-big {\n font-size: 1.2rem;\n}\n.fs-large {\n font-size: 1.5rem;\n}\n/*==============*\\\n|| Media Styles ||\n\\*==============*/\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mobile-only,\n.mobile {\n display: none !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mobile-only,\n.mobile {\n display: none !important;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .not-desktop,\n.mobile,\n.mobile-only {\n display: none !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .not-desktop,\n.mobile,\n.mobile-only {\n display: none !important;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .desktop,\n.desktop-only,\n.not-tablet,\n.mobile,\n.mobile-only {\n display: none !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .desktop,\n.desktop-only,\n.not-tablet,\n.mobile,\n.mobile-only {\n display: none !important;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .desktop-only,\n.desktop,\n.mobile-hide,\n.not-mobile {\n display: none !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .desktop-only,\n.desktop,\n.mobile-hide,\n.not-mobile {\n display: none !important;\n }\n}\n/*========================*\\\n|| Application styles ||\n\\*========================*/\n.info-block {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n margin: 0.5em;\n width: 100%;\n}\n.info-block .icon {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 1.2em;\n width: 1.2em;\n font-size: 2em;\n}\n.info-block .icon a-spinner {\n font-size: 0.25em;\n}\n.info-block .text {\n margin: 0.5em 0 0;\n}\n/*=====================*\\\n|| TinyMCE overrides ||\n\\*=====================*/\ndiv.tox-silver-sink {\n z-index: 9999;\n}\ndiv.tox-silver-sink .tox-notification {\n display: none;\n}\ndiv.tox-editor-container .tox-menubar button:first-child {\n display: none;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n div.tox-tinymce {\n min-height: 20em;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n div.tox-tinymce {\n min-height: 20em;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCJub2RlX21vZHVsZXMvbWF0ZXJpYWwtZGVzaWduLWljb25zL2ljb25mb250L21hdGVyaWFsLWljb25zLmNzcyIsImFwcHMvc3RhZmYvc3JjL2ZvbnRzL2ljb25zL3N0eWxlLmNzcyIsImxpYnMvdWkvc3JjL2xpYi9mb250cy9mb250cy5jc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvc3R5bGVzL2FwcC5jb21wb25lbnQuc2NzcyIsImFwcHMvc3RhZmYvc3JjL2FwcC9zdHlsZXMvYXBwLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzswQkFBQTtBQVFBOzswQkFBQTtBQWtDQTs7Y0FBQTtBQWdCQTs7c0JBQUE7QUM1Q0E7O3NCQUFBO0FDZEE7RUFDRSw2QkFBNkI7RUFDN0Isa0JBQWtCO0VBQ2xCLGdCQUFnQjtFQUNoQixtQ0FBbUMsRUFBRSxjQUFjO0VBQ25EOzs7O3dEQUlzRDtBQUN4RDtBQUVBO0VBQ0UsNkJBQTZCO0VBQzdCLG1CQUFtQjtFQUNuQixrQkFBa0I7RUFDbEIsZUFBZSxHQUFHLHdCQUF3QjtFQUMxQyxxQkFBcUI7RUFDckIsY0FBYztFQUNkLG9CQUFvQjtFQUNwQixzQkFBc0I7RUFDdEIsaUJBQWlCO0VBQ2pCLG1CQUFtQjtFQUNuQixjQUFjOztFQUVkLHFDQUFxQztFQUNyQyxtQ0FBbUM7RUFDbkMsbUNBQW1DO0VBQ25DLGtDQUFrQzs7RUFFbEMseUJBQXlC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Q0ksaUJBQUE7QUMyRFo7QUR2REk7RUFDSSxpQkFBQTtBQ3lEUjtBRHJEQTs7d0JBQUE7QUFJQTtFQUNJLGFBQUE7QUN1REo7QURyREk7RUFDSSxhQUFBO0FDdURSO0FEakRRO0VBQ0ksYUFBQTtBQ29EWjtBTHRLUTtFSXVIUjtJQUVRLGdCQUFBO0VDa0ROO0FBQ0Y7QUx6S1E7RUlvSFI7SUFFUSxnQkFBQTtFQ3VETjtBQUNGIiwiZmlsZSI6ImFwcHMvc3RhZmYvc3JjL2FwcC9zdHlsZXMvYXBwLmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kY29sb3ItYnJhbmQtZWxlY3RyaWMtYmx1ZTogIzIyNTFmZjtcbiRjb2xvci1icmFuZC1kZWVwLWJsdWU6ICMwNTFjMmM7XG4kY29sb3ItYnJhbmQtY3lhbjogIzAwYTlmNDtcblxuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRmb250LWRhcms6ICMwMDA7XG4kZm9udC1saWdodDogI2ZmZjtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG4kZ3JlZW4xOiAjMjE5NjUzO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvbG9yLXByaW1hcnk6ICMxOTM3ZWE7XG4kY29sb3ItcHJpbWFyeS1saWdodDogbGlnaHRlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuJGNvbG9yLXByaW1hcnktZGFyazogZGFya2VuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG5cbiRjb2xvci1zZWNvbmRhcnk6ICM0Mjg1RjQ7XG4kY29sb3Itc2Vjb25kYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcbiRjb2xvci1zZWNvbmRhcnktZGFyazogZGFya2VuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcblxuJGJhY2tncm91bmQ6ICNmMGYwZjA7XG4kZm9vdGVyLWJhY2s6ICMyNjMyMzg7XG4kaGVhZGVyLWJhY2s6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzA1MUMyQywgIzA1MUMyQyA0MCUsICMwQjI0NTMgNjAlLCAjMUY0MEU2IDEwMCUpO1xuXG4kY29sb3ItdGVybmFyeTogIzA1MWMyYztcblxuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG5cbiRmb250LXN0YWNrOiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcblxuJGhlYWRpbmctZm9udDogXCJMYXJpc2hNY0tpbnNleVwiLCAnR2VvcmdpYScsIHNlcmlmO1xuJGZvbnQ6ICRmb250LXN0YWNrO1xuXG4kZm9udC1mYW1pbHktcHJpbWFyeTogXCJNY0tpbnNleSBTYW5zXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQ2FsaWJyaSwgQ29yYmVsLCBIZWx2ZXRpY2EsIFJvYm90bywgRHJvaWQsIHNhbnMtc2VyaWY7XG4kZm9udC1mYW1pbHktc2Vjb25kYXJ5OiBcIkJvd2VyXCIsIEdlb3JnaWEsIFwiVGltZXMgTmV3IFJvbWFuXCIgc2VyaWY7XG5cbiRiYXNlLXNpemU6IDE2cHg7XG4kdGFibGV0LXNpemU6IDE2cHg7XG4kbW9iaWxlLXNpemU6IDE2cHg7XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kYnJlYWstbW9iaWxlOiA0NTBweDtcbiRicmVhay10YWJsZXQ6IDgwMHB4O1xuJGJyZWFrLWxhcHRvcDogMTAyNHB4O1xuXG4kYnJlYWstbGFuZHNjYXBlLW1vYmlsZTogODAwcHg7XG4kYnJlYWstbGFuZHNjYXBlLXRhYmxldDogMTA0OHB4O1xuJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3A6IDEyODBweDtcbiIsIkBpbXBvcnQgJy4vdmFyaWFibGVzJztcblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5AbWl4aW4gYm94LXNoYWRvdygkY29sb3I6ICMwMDAsICRkZXB0aDogMSkge1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCAxcHggKiAoJGRlcHRoIC0gMSkgcmdiYSgjMDAwLCAuMiksXG4gICAgICAgICAgICAgICAgMCAxcHggMXB4IDAgcmdiYSgjMDAwLCAuMTQpLFxuICAgICAgICAgICAgICAgIDAgMnB4IDFweCAtMXB4IHJnYmEoIzAwMCwgLjEyKTtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbkBtaXhpbiByZXNwb25kLXRvKCRtZWRpYSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSAgQGVsc2UgaWYgJG1lZGlhID09IGxhdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfUBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJAZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdNYXRlcmlhbCBJY29ucyc7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgc3JjOiB1cmwoTWF0ZXJpYWxJY29ucy1SZWd1bGFyLmVvdCk7IC8qIEZvciBJRTYtOCAqL1xuICBzcmM6IGxvY2FsKCdNYXRlcmlhbCBJY29ucycpLFxuICAgICAgIGxvY2FsKCdNYXRlcmlhbEljb25zLVJlZ3VsYXInKSxcbiAgICAgICB1cmwoTWF0ZXJpYWxJY29ucy1SZWd1bGFyLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyksXG4gICAgICAgdXJsKE1hdGVyaWFsSWNvbnMtUmVndWxhci53b2ZmKSBmb3JtYXQoJ3dvZmYnKSxcbiAgICAgICB1cmwoTWF0ZXJpYWxJY29ucy1SZWd1bGFyLnR0ZikgZm9ybWF0KCd0cnVldHlwZScpO1xufVxuXG4ubWF0ZXJpYWwtaWNvbnMge1xuICBmb250LWZhbWlseTogJ01hdGVyaWFsIEljb25zJztcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXNpemU6IDI0cHg7ICAvKiBQcmVmZXJyZWQgaWNvbiBzaXplICovXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xuICB3b3JkLXdyYXA6IG5vcm1hbDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgZGlyZWN0aW9uOiBsdHI7XG5cbiAgLyogU3VwcG9ydCBmb3IgYWxsIFdlYktpdCBicm93c2Vycy4gKi9cbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIC8qIFN1cHBvcnQgZm9yIFNhZmFyaSBhbmQgQ2hyb21lLiAqL1xuICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5O1xuXG4gIC8qIFN1cHBvcnQgZm9yIEZpcmVmb3guICovXG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG5cbiAgLyogU3VwcG9ydCBmb3IgSUUuICovXG4gIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2xpZ2EnO1xufVxuIiwiQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnQ3VzdG9tLUljb25zJztcbiAgc3JjOiAgdXJsKCdmb250cy9DdXN0b20tSWNvbnMuZW90P2xxcWI4NScpO1xuICBzcmM6ICB1cmwoJ2ZvbnRzL0N1c3RvbS1JY29ucy5lb3Q/bHFxYjg1I2llZml4JykgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLFxuICAgIHVybCgnZm9udHMvQ3VzdG9tLUljb25zLndvZmYyP2xxcWI4NScpIGZvcm1hdCgnd29mZjInKSxcbiAgICB1cmwoJ2ZvbnRzL0N1c3RvbS1JY29ucy50dGY/bHFxYjg1JykgZm9ybWF0KCd0cnVldHlwZScpLFxuICAgIHVybCgnZm9udHMvQ3VzdG9tLUljb25zLndvZmY/bHFxYjg1JykgZm9ybWF0KCd3b2ZmJyksXG4gICAgdXJsKCdmb250cy9DdXN0b20tSWNvbnMuc3ZnP2xxcWI4NSNDdXN0b20tSWNvbnMnKSBmb3JtYXQoJ3N2ZycpO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG59XG5cbltjbGFzc149XCJjdXN0b20tXCJdLCBbY2xhc3MqPVwiIGN1c3RvbS1cIl0ge1xuICAvKiB1c2UgIWltcG9ydGFudCB0byBwcmV2ZW50IGlzc3VlcyB3aXRoIGJyb3dzZXIgZXh0ZW5zaW9ucyB0aGF0IGNoYW5nZSBmb250cyAqL1xuICBmb250LWZhbWlseTogJ0N1c3RvbS1JY29ucycgIWltcG9ydGFudDtcbiAgc3BlYWs6IG5vbmU7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC12YXJpYW50OiBub3JtYWw7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICBsaW5lLWhlaWdodDogMTtcblxuICAvKiBCZXR0ZXIgRm9udCBSZW5kZXJpbmcgPT09PT09PT09PT0gKi9cbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG59XG5cbi5jdXN0b20tem9uZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGU5MGRcIjtcbn1cbi5jdXN0b20tc2NoZWR1bGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGU5MDJcIjtcbn1cbi5jdXN0b20tdGljazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTkwNFwiO1xufVxuLmN1c3RvbS1NaWNyb3Bob25lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlOTBjXCI7XG59XG4uY3VzdG9tLWJvb2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGU5MDNcIjtcbn1cbi5jdXN0b20tZGVzazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTkwNVwiO1xufVxuLmN1c3RvbS1zcGFjZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGU5MDZcIjtcbn1cbi5jdXN0b20tcHJpdmF0ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTkwN1wiO1xufVxuLmN1c3RvbS1ub3QtZm91bmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGU5MDhcIjtcbn1cbi8qIC5jdXN0b20tZHJvcGRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGU5MDlcIjtcbn0gKi9cbi5jdXN0b20tY2F0ZXJpbmc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGU5MGFcIjtcbn1cbi5jdXN0b20tYWRkLWF0dGVuZGVlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlOTBiXCI7XG59XG4uY3VzdG9tLW5ldy1ldmVudDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTkwMVwiO1xufVxuLmN1c3RvbS1hZGQtdXNlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTkwMFwiO1xufVxuIiwiLyogTWNLaW5zZXkgTGFyaXNoIC0gUmVndWxhciAtIExhdGluICovXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ0xhcmlzaE1jS2luc2V5JztcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBzcmM6IHVybCgnbGlicy91aS9zcmMvbGliL2ZvbnRzL21ja2luc2V5X2xhcmlzaC9MYXJpc2hfTWNLaW5zZXlfUmVndWxhci5lb3QnKTsgLyogSUU5IENvbXBhdCBNb2RlcyAqL1xuICAgIHNyYzogbG9jYWwoJ0xhcmlzaE1jS2luc2V5JyksIGxvY2FsKCdMYXJpc2hNY0tpbnNleVJlZ3VsYXInKSxcbiAgICB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy9tY2tpbnNleV9sYXJpc2gvTGFyaXNoX01jS2luc2V5X1JlZ3VsYXIuZW90PyNpZWZpeCcpIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSwgLyogSUU2LUlFOCAqL1xuICAgIHVybCgnbGlicy91aS9zcmMvbGliL2ZvbnRzL21ja2luc2V5X2xhcmlzaC9MYXJpc2hfTWNLaW5zZXlfUmVndWxhci53b2ZmMicpIGZvcm1hdCgnd29mZjInKSwgLyogU3VwZXIgTW9kZXJuIEJyb3dzZXJzICovXG4gICAgdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXlfbGFyaXNoL0xhcmlzaF9NY0tpbnNleV9SZWd1bGFyLndvZmYnKSBmb3JtYXQoJ3dvZmYnKSwgLyogTW9kZXJuIEJyb3dzZXJzICovXG4gICAgdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXlfbGFyaXNoL0xhcmlzaF9NY0tpbnNleV9SZWd1bGFyLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKSwgLyogU2FmYXJpLCBBbmRyb2lkLCBpT1MgKi9cbiAgICB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy9tY2tpbnNleV9sYXJpc2gvTGFyaXNoX01jS2luc2V5X1JlZ3VsYXIuc3ZnI0xhcmlzaE1jS2luc2V5UmVndWxhcicpIGZvcm1hdCgnc3ZnJyk7IC8qIExlZ2FjeSBpT1MgKi9cbn1cblxuLyogTWNLaW5zZXkgTGFyaXNoIC0gU2VtaS1ib2xkIC0gTGF0aW4gKi9cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnTGFyaXNoTWNLaW5zZXknO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIHNyYzogdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXlfbGFyaXNoL0xhcmlzaF9NY0tpbnNleV9TZW1pYm9sZC5lb3QnKTsgLyogSUU5IENvbXBhdCBNb2RlcyAqL1xuICAgIHNyYzogbG9jYWwoJ0xhcmlzaE1jS2luc2V5JyksIGxvY2FsKCdMYXJpc2hNY0tpbnNleVNlbWlib2xkJyksXG4gICAgdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXlfbGFyaXNoL0xhcmlzaF9NY0tpbnNleV9TZW1pYm9sZC5lb3Q/I2llZml4JykgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLCAvKiBJRTYtSUU4ICovXG4gICAgdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXlfbGFyaXNoL0xhcmlzaF9NY0tpbnNleV9TZW1pYm9sZC53b2ZmMicpIGZvcm1hdCgnd29mZjInKSwgLyogU3VwZXIgTW9kZXJuIEJyb3dzZXJzICovXG4gICAgdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXlfbGFyaXNoL0xhcmlzaF9NY0tpbnNleV9TZW1pYm9sZC53b2ZmJykgZm9ybWF0KCd3b2ZmJyksIC8qIE1vZGVybiBCcm93c2VycyAqL1xuICAgIHVybCgnbGlicy91aS9zcmMvbGliL2ZvbnRzL21ja2luc2V5X2xhcmlzaC9MYXJpc2hfTWNLaW5zZXlfU2VtaWJvbGQudHRmJykgZm9ybWF0KCd0cnVldHlwZScpLCAvKiBTYWZhcmksIEFuZHJvaWQsIGlPUyAqL1xuICAgIHVybCgnbGlicy91aS9zcmMvbGliL2ZvbnRzL21ja2luc2V5X2xhcmlzaC9MYXJpc2hfTWNLaW5zZXlfU2VtaWJvbGQuc3ZnI0xhcmlzaE1jS2luc2V5U2VtaWJvbGQnKSBmb3JtYXQoJ3N2ZycpOyAvKiBMZWdhY3kgaU9TICovXG59XG5cbi8qIFRoZWluaGFyZHQgLSBMaWdodCAtIExhdGluICovXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ1RoZWluaGFyZHQnO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIHNyYzogbG9jYWwoJ1RoZWluaGFyZHQnKSxcbiAgICB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy90aGVpbmhhcmR0L1RoZWluaGFyZHRUVC1MaWdodC50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyksIC8qIFNhZmFyaSwgQW5kcm9pZCwgaU9TICovXG59XG5cbi8qIFRoZWluaGFyZHQgLSBMaWdodCBJdGFsaWMgLSBMYXRpbiAqL1xuQGZvbnQtZmFjZSB7XG4gICAgZm9udC1mYW1pbHk6ICdUaGVpbmhhcmR0JztcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICBzcmM6IGxvY2FsKCdUaGVpbmhhcmR0JyksXG4gICAgdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvdGhlaW5oYXJkdC9UaGVpbmhhcmR0VFQtTGlnaHRJdGFsaWMudHRmJykgZm9ybWF0KCd0cnVldHlwZScpLCAvKiBTYWZhcmksIEFuZHJvaWQsIGlPUyAqL1xufVxuXG4vKiBUaGVpbmhhcmR0IC0gUmVndWxhciAtIExhdGluICovXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ1RoZWluaGFyZHQnO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIHNyYzogbG9jYWwoJ1RoZWluaGFyZHQnKSxcbiAgICB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy90aGVpbmhhcmR0L1RoZWluaGFyZHRUVC1SZWd1bGFyLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKSwgLyogU2FmYXJpLCBBbmRyb2lkLCBpT1MgKi9cbn1cblxuLyogVGhlaW5oYXJkdCAtIEl0YWxpYyAtIExhdGluICovXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ1RoZWluaGFyZHQnO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIHNyYzogbG9jYWwoJ1RoZWluaGFyZHQnKSxcbiAgICB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy90aGVpbmhhcmR0L1RoZWluaGFyZHRUVC1JdGFsaWMudHRmJykgZm9ybWF0KCd0cnVldHlwZScpLCAvKiBTYWZhcmksIEFuZHJvaWQsIGlPUyAqL1xufVxuXG4vKiBUaGVpbmhhcmR0IC0gTWVkaXVtIC0gTGF0aW4gKi9cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnVGhlaW5oYXJkdCc7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgc3JjOiBsb2NhbCgnVGhlaW5oYXJkdCcpLFxuICAgIHVybCgnbGlicy91aS9zcmMvbGliL2ZvbnRzL3RoZWluaGFyZHQvVGhlaW5oYXJkdFRULU1lZGl1bS50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyksIC8qIFNhZmFyaSwgQW5kcm9pZCwgaU9TICovXG59XG5cbi8qIFRoZWluaGFyZHQgLSBNZWRpdW0gSXRhbGljIC0gTGF0aW4gKi9cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnVGhlaW5oYXJkdCc7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgc3JjOiBsb2NhbCgnVGhlaW5oYXJkdCcpLFxuICAgIHVybCgnbGlicy91aS9zcmMvbGliL2ZvbnRzL3RoZWluaGFyZHQvVGhlaW5oYXJkdFRULU1lZGl1bUl0YWxpYy50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyksIC8qIFNhZmFyaSwgQW5kcm9pZCwgaU9TICovXG59XG5cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZGlzcGxheTogc3dhcDtcbiAgICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgc3JjOiB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy9tY2tpbnNleS1zYW5zL01jS2luc2V5U2Fucy1SZWd1bGFyLndvZmYnKVxufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG4gICAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIHNyYzogdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXktc2Fucy9NY0tpbnNleVNhbnMtSXRhbGljLndvZmYnKVxufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG4gICAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIHNyYzogdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXktc2Fucy9NY0tpbnNleVNhbnMtTWVkaXVtLndvZmYnKVxufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG4gICAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIHNyYzogdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXktc2Fucy9NY0tpbnNleVNhbnMtTWVkaXVtSXRhbGljLndvZmYnKVxufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG4gICAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIHNyYzogbG9jYWwoJ01jS2luc2V5LVNhbnMnKSxcbiAgICB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy9tY2tpbnNleS1zYW5zL01jS2luc2V5U2Fucy1MaWdodC53b2ZmJylcbn1cblxuQGZvbnQtZmFjZSB7XG4gICAgZm9udC1kaXNwbGF5OiBzd2FwO1xuICAgIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBzcmM6IHVybCgnbGlicy91aS9zcmMvbGliL2ZvbnRzL21ja2luc2V5LXNhbnMvTWNLaW5zZXlTYW5zLUxpZ2h0SXRhbGljLndvZmYnKVxufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG4gICAgZm9udC1mYW1pbHk6IFwiQm93ZXJcIjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgc3JjOiB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy9ib3dlci9Cb3dlci1Cb2xkLndvZmYnKVxufVxuIiwiQGltcG9ydCAnbWl4aW5zJztcbkBpbXBvcnQgXCJ+bWF0ZXJpYWwtZGVzaWduLWljb25zL2ljb25mb250L21hdGVyaWFsLWljb25zLmNzc1wiO1xuQGltcG9ydCAnLi4vLi4vZm9udHMvaWNvbnMvc3R5bGUuY3NzJztcbkBpbXBvcnQgJy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvc3JjL2xpYi9mb250cy9mb250cy5jc3MnO1xuXG5odG1sLFxuYm9keSB7XG4gICAgQGluY2x1ZGUgcmVzcG9uZC10byhkZXNrdG9wKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogJGJhc2Utc2l6ZTtcbiAgICB9XG4gICAgQGluY2x1ZGUgcmVzcG9uZC10byh0YWJsZXQpIHtcbiAgICAgICAgZm9udC1zaXplOiAkdGFibGV0LXNpemU7XG4gICAgfVxuICAgIEBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogJG1vYmlsZS1zaXplO1xuICAgIH1cbn1cblxuKiB7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1wcmltYXJ5O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi5tYXRlcmlhbC1pY29ucyB7XG4gICAgZm9udC1zaXplOiAxZW07XG59XG5cbnNwYW4uaGlnaGxpZ2h0IHtcbiAgICBjb2xvcjogJGNvbG9yLXByaW1hcnk7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgIEZvbnQgc2l6ZSBzdHlsZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4uZnMge1xuICAgICYtc21hbGwge1xuICAgICAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICB9XG4gICAgJi1ub3JtYWwge1xuICAgICAgICBmb250LXNpemU6IDFyZW07XG4gICAgfVxuICAgICYtYmlnIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjJyZW07XG4gICAgfVxuICAgICYtbGFyZ2Uge1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTtcbiAgICB9XG59XG5cbi8qPT09PT09PT09PT09PT0qXFxcbnx8IE1lZGlhIFN0eWxlcyB8fFxuXFwqPT09PT09PT09PT09PT0qL1xuXG5AaW5jbHVkZSByZXNwb25kLXRvKG5vdC1tb2JpbGUpIHtcbiAgICAubW9iaWxlLW9ubHksXG4gICAgLm1vYmlsZSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG59XG5cbkBpbmNsdWRlIHJlc3BvbmQtdG8oZGVza3RvcCkge1xuICAgIC5ub3QtZGVza3RvcCxcbiAgICAubW9iaWxlLFxuICAgIC5tb2JpbGUtb25seSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG59XG5cbkBpbmNsdWRlIHJlc3BvbmQtdG8odGFibGV0KSB7XG4gICAgLmRlc2t0b3AsXG4gICAgLmRlc2t0b3Atb25seSxcbiAgICAubm90LXRhYmxldCxcbiAgICAubW9iaWxlLFxuICAgIC5tb2JpbGUtb25seSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG59XG5cbkBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgLmRlc2t0b3Atb25seSxcbiAgICAuZGVza3RvcCxcbiAgICAubW9iaWxlLWhpZGUsXG4gICAgLm5vdC1tb2JpbGUge1xuICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxufVxuXG4vKj09PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBBcHBsaWNhdGlvbiBzdHlsZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuLmluZm8tYmxvY2sge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIG1hcmdpbjogLjVlbTtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgIC5pY29uIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGhlaWdodDogMS4yZW07XG4gICAgICAgIHdpZHRoOiAxLjJlbTtcbiAgICAgICAgZm9udC1zaXplOiAyZW07XG5cbiAgICAgICAgYS1zcGlubmVyIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogLjI1ZW07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAudGV4dCB7XG4gICAgICAgIG1hcmdpbjogLjVlbSAwIDA7XG4gICAgfVxufVxuXG4vKj09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIFRpbnlNQ0Ugb3ZlcnJpZGVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09Ki9cblxuZGl2LnRveC1zaWx2ZXItc2luayB7XG4gICAgei1pbmRleDogOTk5OTtcblxuICAgIC50b3gtbm90aWZpY2F0aW9uIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG59XG5cbmRpdi50b3gtZWRpdG9yLWNvbnRhaW5lciB7XG4gICAgLnRveC1tZW51YmFyIHtcbiAgICAgICAgYnV0dG9uOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmRpdi50b3gtdGlueW1jZSB7XG4gICAgQGluY2x1ZGUgcmVzcG9uZC10byhtb2JpbGUpIHtcbiAgICAgICAgbWluLWhlaWdodDogMjBlbTtcbiAgICB9XG59XG4iLCIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbkBpbXBvcnQgXCJ+bWF0ZXJpYWwtZGVzaWduLWljb25zL2ljb25mb250L21hdGVyaWFsLWljb25zLmNzc1wiO1xuQGltcG9ydCAnLi4vLi4vZm9udHMvaWNvbnMvc3R5bGUuY3NzJztcbkBpbXBvcnQgJy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvc3JjL2xpYi9mb250cy9mb250cy5jc3MnO1xuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogODAwcHgpIHtcbiAgaHRtbCxcbmJvZHkge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDEwNDhweCkge1xuICBodG1sLFxuYm9keSB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIGh0bWwsXG5ib2R5IHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkgYW5kIChtYXgtd2lkdGg6IDEwNDhweCkge1xuICBodG1sLFxuYm9keSB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICBodG1sLFxuYm9keSB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgaHRtbCxcbmJvZHkge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgfVxufVxuXG4qIHtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLm1hdGVyaWFsLWljb25zIHtcbiAgZm9udC1zaXplOiAxZW07XG59XG5cbnNwYW4uaGlnaGxpZ2h0IHtcbiAgY29sb3I6ICMxOTM3ZWE7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgIEZvbnQgc2l6ZSBzdHlsZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLmZzLXNtYWxsIHtcbiAgZm9udC1zaXplOiAwLjhyZW07XG59XG4uZnMtbm9ybWFsIHtcbiAgZm9udC1zaXplOiAxcmVtO1xufVxuLmZzLWJpZyB7XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xufVxuLmZzLWxhcmdlIHtcbiAgZm9udC1zaXplOiAxLjVyZW07XG59XG5cbi8qPT09PT09PT09PT09PT0qXFxcbnx8IE1lZGlhIFN0eWxlcyB8fFxuXFwqPT09PT09PT09PT09PT0qL1xuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1vYmlsZS1vbmx5LFxuLm1vYmlsZSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1vYmlsZS1vbmx5LFxuLm1vYmlsZSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA4MDBweCkge1xuICAubm90LWRlc2t0b3AsXG4ubW9iaWxlLFxuLm1vYmlsZS1vbmx5IHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAxMDQ4cHgpIHtcbiAgLm5vdC1kZXNrdG9wLFxuLm1vYmlsZSxcbi5tb2JpbGUtb25seSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5kZXNrdG9wLFxuLmRlc2t0b3Atb25seSxcbi5ub3QtdGFibGV0LFxuLm1vYmlsZSxcbi5tb2JpbGUtb25seSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDQ4cHgpIHtcbiAgLmRlc2t0b3AsXG4uZGVza3RvcC1vbmx5LFxuLm5vdC10YWJsZXQsXG4ubW9iaWxlLFxuLm1vYmlsZS1vbmx5IHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5kZXNrdG9wLW9ubHksXG4uZGVza3RvcCxcbi5tb2JpbGUtaGlkZSxcbi5ub3QtbW9iaWxlIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuZGVza3RvcC1vbmx5LFxuLmRlc2t0b3AsXG4ubW9iaWxlLWhpZGUsXG4ubm90LW1vYmlsZSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG4vKj09PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBBcHBsaWNhdGlvbiBzdHlsZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT09Ki9cbi5pbmZvLWJsb2NrIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1hcmdpbjogMC41ZW07XG4gIHdpZHRoOiAxMDAlO1xufVxuLmluZm8tYmxvY2sgLmljb24ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgaGVpZ2h0OiAxLjJlbTtcbiAgd2lkdGg6IDEuMmVtO1xuICBmb250LXNpemU6IDJlbTtcbn1cbi5pbmZvLWJsb2NrIC5pY29uIGEtc3Bpbm5lciB7XG4gIGZvbnQtc2l6ZTogMC4yNWVtO1xufVxuLmluZm8tYmxvY2sgLnRleHQge1xuICBtYXJnaW46IDAuNWVtIDAgMDtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBUaW55TUNFIG92ZXJyaWRlcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PSovXG5kaXYudG94LXNpbHZlci1zaW5rIHtcbiAgei1pbmRleDogOTk5OTtcbn1cbmRpdi50b3gtc2lsdmVyLXNpbmsgLnRveC1ub3RpZmljYXRpb24ge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG5kaXYudG94LWVkaXRvci1jb250YWluZXIgLnRveC1tZW51YmFyIGJ1dHRvbjpmaXJzdC1jaGlsZCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIGRpdi50b3gtdGlueW1jZSB7XG4gICAgbWluLWhlaWdodDogMjBlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIGRpdi50b3gtdGlueW1jZSB7XG4gICAgbWluLWhlaWdodDogMjBlbTtcbiAgfVxufSJdfQ== */", "/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n.dropdown[widget] {\n border-radius: 4px;\n}\n.dropdown[widget].fill {\n width: 100%;\n}\n.dropdown-list[widget] {\n border-radius: 4px;\n}\n.spinner svg {\n width: 100%;\n}\nbutton.mat-button,\na[button] {\n background-color: #1937ea;\n border: 1px solid #1937ea;\n color: #fff;\n}\nbutton.mat-button.inverse,\na[button].inverse {\n background-color: #fff;\n color: #1937ea;\n}\nbutton.mat-button.success,\na[button].success {\n background-color: #43a047;\n border-color: #43a047;\n}\nbutton.mat-button[disabled],\na[button][disabled] {\n background-color: #CCC;\n pointer-events: none;\n border-color: #AAA;\n}\n.mat-icon-button {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 2em;\n width: 2em;\n font-size: 1em;\n}\n.mat-icon-button .mat-button-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.mat-icon-button app-icon {\n font-size: 1.5em;\n}\n.dropdown[widget].default {\n width: 9.5em;\n}\n.dynamic-field[widget] .details {\n min-width: 100%;\n}\n.dynamic-field[widget] label {\n margin-left: 0;\n}\n.dynamic-field[widget] .control {\n min-width: 10em;\n}\n.overlay-backdrop {\n background-color: rgba(0, 0, 0, 0.6);\n}\nmat-dialog-container.mat-dialog-container {\n padding: 0;\n overflow: visible;\n border-radius: 0;\n}\nmat-dialog-container.mat-dialog-container .mat-dialog-actions {\n margin: 0 auto;\n}\nmat-dialog-container.mat-dialog-container .mat-dialog-content {\n margin: 0;\n padding: 0;\n max-height: 95vh;\n}\nmat-dialog-container.mat-dialog-container .mat-dialog-content.package-options {\n max-height: 85vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n mat-dialog-container.mat-dialog-container .mat-dialog-content {\n max-height: 100vh;\n width: 100vw;\n height: 100%;\n }\n mat-dialog-container.mat-dialog-container .mat-dialog-content.cancel-dialog-content, mat-dialog-container.mat-dialog-container .mat-dialog-content.booking-duration-content {\n height: auto;\n width: auto;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n mat-dialog-container.mat-dialog-container .mat-dialog-content {\n max-height: 100vh;\n width: 100vw;\n height: 100%;\n }\n mat-dialog-container.mat-dialog-container .mat-dialog-content.cancel-dialog-content, mat-dialog-container.mat-dialog-container .mat-dialog-content.booking-duration-content {\n height: auto;\n width: auto;\n }\n}\nmat-dialog-container.mat-dialog-container header {\n display: flex;\n align-items: center;\n padding: 0.5em 1em;\n width: 100%;\n background-color: #051c2c;\n color: #fff;\n}\nmat-dialog-container.mat-dialog-container header h1, mat-dialog-container.mat-dialog-container header h2, mat-dialog-container.mat-dialog-container header h3, mat-dialog-container.mat-dialog-container header h4 {\n flex: 1;\n min-width: 50%;\n}\nmat-dialog-container.mat-dialog-container header > * {\n margin: 0;\n}\nmat-dialog-container.mat-dialog-container .body {\n padding: 1em;\n pointer-events: auto;\n overflow: hidden auto;\n}\nmat-form-field.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick {\n color: #1937ea;\n}\nmat-form-field.map .mat-form-field-wrapper {\n padding: 0;\n}\nmat-form-field.map .mat-form-field-outline {\n background-color: #fff;\n box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12);\n border-radius: 4px;\n}\nmat-form-field.desk .mat-form-field-flex {\n background-color: #fff;\n padding: 0.3em;\n}\nmat-form-field.rounded .mat-form-field-outline-start {\n border-radius: 2em 0 0 2em;\n min-width: 2em;\n}\nmat-form-field.rounded .mat-form-field-outline-end {\n border-radius: 0 2em 2em 0;\n}\n.mat-form-field-infix {\n border-top: none;\n}\n.mat-select-panel .mat-option.mat-selected:not(.mat-option-disabled) {\n color: #1937ea;\n}\nmat-select .mat-select-trigger .mat-select-arrow-wrapper {\n transform: none;\n}\n.mat-simple-snackbar button.mat-button {\n background: none;\n border: none;\n}\n.mat-snack-bar-container.success {\n background-color: #43a047;\n color: #fff;\n}\n.mat-snack-bar-container.warn {\n background-color: #ffb300;\n color: #fff;\n}\n.mat-snack-bar-container.error {\n background-color: #e53935;\n color: #fff;\n}\n.mat-snack-bar-container.info {\n background-color: #4285F4;\n color: #fff;\n}\n.mat-chip.mat-standard-chip.mat-primary {\n background-color: #1937ea;\n color: #fff;\n}\n.mat-chip.mat-standard-chip.mat-accent {\n background-color: #ffb300;\n}\n.mat-spinner circle {\n stroke: #1937ea;\n}\n.mat-progress-bar-fill::after {\n background-color: #1937ea;\n}\n.mat-tooltip {\n white-space: pre-line;\n}\ndiv.mat-menu-panel {\n max-width: calc(100vw - 1em);\n max-height: 65vh;\n}\ndiv.mat-menu-panel.dark-mode {\n background-color: #363636;\n}\nmat-radio-button .mat-radio-label-content {\n white-space: initial;\n}\nmat-checkbox .mat-checkbox-label-content {\n white-space: initial;\n}\ndiv.mat-select-panel {\n max-width: 90vw;\n}\na-map svg text {\n pointer-events: none;\n}\na-map .zooming [id^=chair] {\n display: none;\n}\n.map-outlet {\n position: absolute !important;\n}\nlabel.mat-checkbox-layout, label.mat-radio-label {\n white-space: normal;\n}\n/*\n Flex box layout common classes\n*/\n.flex-row {\n height: 100%;\n flex-direction: row;\n box-sizing: border-box;\n display: flex;\n place-content: center flex-start;\n align-items: center;\n}\n.flex-column {\n height: 100%;\n flex-direction: column;\n box-sizing: border-box;\n display: flex;\n place-content: stretch flex-start;\n align-items: stretch;\n max-width: 100%;\n}\n.flex-center {\n display: flex;\n place-content: center;\n align-items: center;\n}\n.flex-row-end {\n place-content: center flex-end;\n}\n.flex-grow {\n flex: 1;\n}\n.flex-space-between {\n place-content: space-between;\n}\n/*\n ^^^ Flex box layout common classes ^^^\n*/\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvc3R5bGVzL2N1c3RvbS1lbGVtZW50LnN0eWxlcy5zY3NzIiwiYXBwcy9zdGFmZi9zcmMvYXBwL3N0eWxlcy9jdXN0b20tZWxlbWVudC5zdHlsZXMuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FBMURBOzswQkFBQTtBQVFBOzswQkFBQTtBQWtDQTs7Y0FBQTtBQWdCQTs7c0JBQUE7QUM1Q0E7O3NCQUFBO0FDWEE7RUFDSSxrQkFBQTtBQ3lCSjtBRHZCSTtFQUNJLFdBQUE7QUN5QlI7QURyQkE7RUFDSSxrQkFBQTtBQ3dCSjtBRHBCSTtFQUNJLFdBQUE7QUN1QlI7QURuQkE7O0VBRUkseUJGS1k7RUVKWix5QkFBQTtFQUNBLFdGWlM7QUdrQ2I7QURwQkk7O0VBQ0ksc0JBQUE7RUFDQSxjRkRRO0FHd0JoQjtBRHBCSTs7RUFDSSx5QkZsQkU7RUVtQkYscUJGbkJFO0FHMENWO0FEcEJJOztFQUNJLHNCQUFBO0VBQ0Esb0JBQUE7RUFDQSxrQkFBQTtBQ3VCUjtBRG5CQTtFQUNJLGFBQUE7RUFDQSxtQkFBQTtFQUNBLHVCQUFBO0VBQ0EsV0FBQTtFQUNBLFVBQUE7RUFDQSxjQUFBO0FDc0JKO0FEcEJJO0VBQ0ksYUFBQTtFQUNBLG1CQUFBO0VBQ0EsdUJBQUE7QUNzQlI7QURuQkk7RUFDSSxnQkFBQTtBQ3FCUjtBRGhCSTtFQUNJLFlBQUE7QUNtQlI7QURkSTtFQUNJLGVBQUE7QUNpQlI7QURkSTtFQUNJLGNBQUE7QUNnQlI7QURiSTtFQUNJLGVBQUE7QUNlUjtBRFhBO0VBQ0ksb0NBQUE7QUNjSjtBRFhBO0VBQ0ksVUFBQTtFQUNBLGlCQUFBO0VBQ0EsZ0JBQUE7QUNjSjtBRFpJO0VBQ0ksY0FBQTtBQ2NSO0FEWEk7RUFDSSxTQUFBO0VBQ0EsVUFBQTtFQUNBLGdCQUFBO0FDYVI7QURaUTtFQUNJLGdCQUFBO0FDY1o7QUYvRlE7RUM0RUo7SUFRUSxpQkFBQTtJQUNBLFlBQUE7SUFDQSxZQUFBO0VDZVY7RURkVTtJQUNJLFlBQUE7SUFDQSxXQUFBO0VDZ0JkO0FBQ0Y7QUZ2R1E7RUN5RUo7SUFRUSxpQkFBQTtJQUNBLFlBQUE7SUFDQSxZQUFBO0VDMEJWO0VEekJVO0lBQ0ksWUFBQTtJQUNBLFdBQUE7RUMyQmQ7QUFDRjtBRHZCSTtFQUNJLGFBQUE7RUFDQSxtQkFBQTtFQUNBLGtCQUFBO0VBQ0EsV0FBQTtFQUNBLHlCRi9FUTtFRWdGUixXRjNHSztBR29JYjtBRHZCUTtFQUNJLE9BQUE7RUFDQSxjQUFBO0FDeUJaO0FEdEJRO0VBQ0ksU0FBQTtBQ3dCWjtBRHBCSTtFQUNJLFlBQUE7RUFDQSxvQkFBQTtFQUNBLHFCQUFBO0FDc0JSO0FEaEJRO0VBQ0ksY0ZsSEk7QUdxSWhCO0FEZFE7RUFDSSxVQUFBO0FDZ0JaO0FEYlE7RUFDSSxzQkFBQTtFRC9JUixpSEFBQTtFQ2lKUSxrQkFBQTtBQ2VaO0FEVlE7RUFDSSxzQkFBQTtFQUNBLGNBQUE7QUNZWjtBRFBRO0VBQ0ksMEJBQUE7RUFDQSxjQUFBO0FDU1o7QURQUTtFQUNJLDBCQUFBO0FDU1o7QURIQTtFQUNJLGdCQUFBO0FDTUo7QURBWTtFQUNJLGNGN0pBO0FHZ0toQjtBREtRO0VBQ0ksZUFBQTtBQ0ZaO0FEUUk7RUFDSSxnQkFBQTtFQUNBLFlBQUE7QUNMUjtBRFVJO0VBQ0kseUJGak1FO0VFa01GLFdBQUE7QUNQUjtBRFNJO0VBQ0kseUJGaE1FO0VFaU1GLFdBQUE7QUNQUjtBRFNJO0VBQ0kseUJGaE1BO0VFaU1BLFdBQUE7QUNQUjtBRFNJO0VBQ0kseUJGNUxVO0VFNkxWLFdBQUE7QUNQUjtBRFlJO0VBQ0kseUJGdk1RO0VFd01SLFdBQUE7QUNUUjtBRFdJO0VBQ0kseUJGbk5FO0FHME1WO0FEY0k7RUFDSSxlRmpOUTtBR3NNaEI7QURnQkk7RUFDSSx5QkZ2TlE7QUcwTWhCO0FEaUJBO0VBQ0kscUJBQUE7QUNkSjtBRGlCQTtFQUNJLDRCQUFBO0VBQ0EsZ0JBQUE7QUNkSjtBRGdCSTtFQUNJLHlCQUFBO0FDZFI7QURtQkk7RUFDSSxvQkFBQTtBQ2hCUjtBRHFCSTtFQUNJLG9CQUFBO0FDbEJSO0FEc0JBO0VBQ0ksZUFBQTtBQ25CSjtBRHdCUTtFQUNJLG9CQUFBO0FDckJaO0FEMEJRO0VBQ0ksYUFBQTtBQ3hCWjtBRDZCQTtFQUNJLDZCQUFBO0FDMUJKO0FEOEJJO0VBRUksbUJBQUE7QUM1QlI7QURrQ0E7O0NBQUE7QUFHQTtFQUNJLFlBQUE7RUFDQSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0EsYUFBQTtFQUNBLGdDQUFBO0VBQ0EsbUJBQUE7QUMvQko7QURrQ0E7RUFDSSxZQUFBO0VBQ0Esc0JBQUE7RUFDQSxzQkFBQTtFQUNBLGFBQUE7RUFDQSxpQ0FBQTtFQUNBLG9CQUFBO0VBQ0EsZUFBQTtBQy9CSjtBRGtDQTtFQUNJLGFBQUE7RUFDQSxxQkFBQTtFQUNBLG1CQUFBO0FDL0JKO0FEa0NBO0VBQ0ksOEJBQUE7QUMvQko7QURrQ0E7RUFDSSxPQUFBO0FDL0JKO0FEa0NBO0VBQ0ksNEJBQUE7QUMvQko7QURpQ0E7O0NBQUEiLCJmaWxlIjoiYXBwcy9zdGFmZi9zcmMvYXBwL3N0eWxlcy9jdXN0b20tZWxlbWVudC5zdHlsZXMuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGNvbG9yLWJyYW5kLWVsZWN0cmljLWJsdWU6ICMyMjUxZmY7XG4kY29sb3ItYnJhbmQtZGVlcC1ibHVlOiAjMDUxYzJjO1xuJGNvbG9yLWJyYW5kLWN5YW46ICMwMGE5ZjQ7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kZm9udC1kYXJrOiAjMDAwO1xuJGZvbnQtbGlnaHQ6ICNmZmY7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuJGdyZWVuMTogIzIxOTY1MztcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2xvci1wcmltYXJ5OiAjMTkzN2VhO1xuJGNvbG9yLXByaW1hcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcbiRjb2xvci1wcmltYXJ5LWRhcms6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuXG4kY29sb3Itc2Vjb25kYXJ5OiAjNDI4NUY0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodDogbGlnaHRlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG4kY29sb3Itc2Vjb25kYXJ5LWRhcms6IGRhcmtlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG5cbiRiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuJGZvb3Rlci1iYWNrOiAjMjYzMjM4O1xuJGhlYWRlci1iYWNrOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNTFDMkMsICMwNTFDMkMgNDAlLCAjMEIyNDUzIDYwJSwgIzFGNDBFNiAxMDAlKTtcblxuJGNvbG9yLXRlcm5hcnk6ICMwNTFjMmM7XG5cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuXG4kZm9udC1zdGFjazogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiRoZWFkaW5nLWZvbnQ6IFwiTGFyaXNoTWNLaW5zZXlcIiwgJ0dlb3JnaWEnLCBzZXJpZjtcbiRmb250OiAkZm9udC1zdGFjaztcblxuJGZvbnQtZmFtaWx5LXByaW1hcnk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LXNlY29uZGFyeTogXCJCb3dlclwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiIHNlcmlmO1xuXG4kYmFzZS1zaXplOiAxNnB4O1xuJHRhYmxldC1zaXplOiAxNnB4O1xuJG1vYmlsZS1zaXplOiAxNnB4O1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGJyZWFrLW1vYmlsZTogNDUwcHg7XG4kYnJlYWstdGFibGV0OiA4MDBweDtcbiRicmVhay1sYXB0b3A6IDEwMjRweDtcblxuJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGU6IDgwMHB4O1xuJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQ6IDEwNDhweDtcbiRicmVhay1sYW5kc2NhcGUtbGFwdG9wOiAxMjgwcHg7XG4iLCJAaW1wb3J0ICcuL3ZhcmlhYmxlcyc7XG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuQG1peGluIGJveC1zaGFkb3coJGNvbG9yOiAjMDAwLCAkZGVwdGg6IDEpIHtcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMXB4ICogKCRkZXB0aCAtIDEpIHJnYmEoIzAwMCwgLjIpLFxuICAgICAgICAgICAgICAgIDAgMXB4IDFweCAwIHJnYmEoIzAwMCwgLjE0KSxcbiAgICAgICAgICAgICAgICAwIDJweCAxcHggLTFweCByZ2JhKCMwMDAsIC4xMik7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG5AbWl4aW4gcmVzcG9uZC10bygkbWVkaWEpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gIEBlbHNlIGlmICRtZWRpYSA9PSBsYXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1AZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQGltcG9ydCAndmFyaWFibGVzJztcbkBpbXBvcnQgJ21peGlucyc7XG5cbi5kcm9wZG93blt3aWRnZXRdIHtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG5cbiAgICAmLmZpbGwge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG59XG5cbi5kcm9wZG93bi1saXN0W3dpZGdldF0ge1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cblxuLnNwaW5uZXIge1xuICAgIHN2ZyB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbn1cblxuYnV0dG9uLm1hdC1idXR0b24sXG5hW2J1dHRvbl0ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci1wcmltYXJ5O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRjb2xvci1wcmltYXJ5O1xuICAgIGNvbG9yOiAkZm9udC1saWdodDtcblxuICAgICYuaW52ZXJzZSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItcHJpbWFyeTtcbiAgICB9XG5cbiAgICAmLnN1Y2Nlc3Mge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc3VjY2VzcztcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkc3VjY2VzcztcbiAgICB9XG5cbiAgICAmW2Rpc2FibGVkXSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNDQ0M7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICBib3JkZXItY29sb3I6ICNBQUE7XG4gICAgfVxufVxuXG4ubWF0LWljb24tYnV0dG9uIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgaGVpZ2h0OiAyZW07XG4gICAgd2lkdGg6IDJlbTtcbiAgICBmb250LXNpemU6IDFlbTtcblxuICAgIC5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICB9XG5cbiAgICBhcHAtaWNvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41ZW07XG4gICAgfVxufVxuXG4uZHJvcGRvd25bd2lkZ2V0XSB7XG4gICAgJi5kZWZhdWx0IHtcbiAgICAgICAgd2lkdGg6IDkuNWVtO1xuICAgIH1cbn1cblxuLmR5bmFtaWMtZmllbGRbd2lkZ2V0XSB7XG4gICAgLmRldGFpbHMge1xuICAgICAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgfVxuXG4gICAgbGFiZWwge1xuICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICB9XG5cbiAgICAuY29udHJvbCB7XG4gICAgICAgIG1pbi13aWR0aDogMTBlbTtcbiAgICB9XG59XG5cbi5vdmVybGF5LWJhY2tkcm9wIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCMwMDAsIDAuNik7XG59XG5cbm1hdC1kaWFsb2ctY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG5cbiAgICAubWF0LWRpYWxvZy1hY3Rpb25zIHtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgfVxuXG4gICAgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgbWF4LWhlaWdodDogOTV2aDtcbiAgICAgICAgJi5wYWNrYWdlLW9wdGlvbnMge1xuICAgICAgICAgICAgbWF4LWhlaWdodDogODV2aDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgICAgICAgICB3aWR0aDogMTAwdnc7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICAmLmNhbmNlbC1kaWFsb2ctY29udGVudCwgJi5ib29raW5nLWR1cmF0aW9uLWNvbnRlbnQge1xuICAgICAgICAgICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgICAgICAgICB3aWR0aDogYXV0bztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhlYWRlciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIHBhZGRpbmc6IC41ZW0gMWVtO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXRlcm5hcnk7XG4gICAgICAgIGNvbG9yOiAkZm9udC1saWdodDtcblxuICAgICAgICBoMSwgaDIsIGgzLCBoNCB7XG4gICAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgICAgbWluLXdpZHRoOiA1MCU7XG4gICAgICAgIH1cblxuICAgICAgICA+ICoge1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmJvZHkge1xuICAgICAgICBwYWRkaW5nOiAxZW07XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuIGF1dG87XG4gICAgfVxufVxuXG5tYXQtZm9ybS1maWVsZCB7XG4gICAgJi5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQge1xuICAgICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayB7XG4gICAgICAgICAgICBjb2xvcjogJGNvbG9yLXByaW1hcnk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLm1hcCB7XG4gICAgICAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIH1cblxuICAgICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgICAgICAgICAgQGluY2x1ZGUgYm94LXNoYWRvdztcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYuZGVzayB7XG4gICAgICAgIC5tYXQtZm9ybS1maWVsZC1mbGV4IHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgICAgICAgICBwYWRkaW5nOiAwLjNlbVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi5yb3VuZGVkIHtcbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQge1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMmVtIDAgMCAyZW07XG4gICAgICAgICAgICBtaW4td2lkdGg6IDJlbTtcbiAgICAgICAgfVxuICAgICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAyZW0gMmVtIDA7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICBib3JkZXItdG9wOiBub25lO1xufVxuXG4ubWF0LXNlbGVjdC1wYW5lbCB7XG4gICAgLm1hdC1vcHRpb24ge1xuICAgICAgICAmLm1hdC1zZWxlY3RlZCB7XG4gICAgICAgICAgICAmOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkY29sb3ItcHJpbWFyeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxubWF0LXNlbGVjdCB7XG4gICAgLm1hdC1zZWxlY3QtdHJpZ2dlciB7XG4gICAgICAgIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXIge1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBub25lO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4ubWF0LXNpbXBsZS1zbmFja2JhciB7XG4gICAgYnV0dG9uLm1hdC1idXR0b24ge1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgfVxufVxuXG4ubWF0LXNuYWNrLWJhci1jb250YWluZXIge1xuICAgICYuc3VjY2VzcyB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzdWNjZXNzO1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICB9XG4gICAgJi53YXJuIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHBlbmRpbmc7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgIH1cbiAgICAmLmVycm9yIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGVycm9yO1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICB9XG4gICAgJi5pbmZvIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXNlY29uZGFyeTtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgfVxufVxuXG4ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAge1xuICAgICYubWF0LXByaW1hcnkge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3ItcHJpbWFyeTtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgfVxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwZW5kaW5nO1xuICAgIH1cbn1cblxuLm1hdC1zcGlubmVyIHtcbiAgICBjaXJjbGUge1xuICAgICAgICBzdHJva2U6ICRjb2xvci1wcmltYXJ5O1xuICAgIH1cbn1cblxuLm1hdC1wcm9ncmVzcy1iYXItZmlsbCB7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3ItcHJpbWFyeTtcbiAgICB9XG59XG5cbi5tYXQtdG9vbHRpcCB7XG4gICAgd2hpdGUtc3BhY2U6IHByZS1saW5lO1xufVxuXG5kaXYubWF0LW1lbnUtcGFuZWwge1xuICAgIG1heC13aWR0aDogY2FsYygxMDB2dyAtIDFlbSk7XG4gICAgbWF4LWhlaWdodDogNjV2aDtcblxuICAgICYuZGFyay1tb2RlIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzM2MzYzNjtcbiAgICB9XG59XG5cbm1hdC1yYWRpby1idXR0b24ge1xuICAgIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudCB7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBpbml0aWFsO1xuICAgIH1cbn1cblxubWF0LWNoZWNrYm94IHtcbiAgICAubWF0LWNoZWNrYm94LWxhYmVsLWNvbnRlbnQge1xuICAgICAgICB3aGl0ZS1zcGFjZTogaW5pdGlhbDtcbiAgICB9XG59XG5cbmRpdi5tYXQtc2VsZWN0LXBhbmVsIHtcbiAgICBtYXgtd2lkdGg6IDkwdnc7XG59XG5cbmEtbWFwIHtcbiAgICBzdmcge1xuICAgICAgICB0ZXh0IHtcbiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLnpvb21pbmcge1xuICAgICAgICBbaWRePVwiY2hhaXJcIl0ge1xuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLm1hcC1vdXRsZXQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O1xufVxuXG5sYWJlbCB7XG4gICAgJi5tYXQtY2hlY2tib3gtbGF5b3V0LFxuICAgICYubWF0LXJhZGlvLWxhYmVsIHtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgICB9XG59XG5cblxuXG4vKlxuICAgIEZsZXggYm94IGxheW91dCBjb21tb24gY2xhc3Nlc1xuKi9cbi5mbGV4LXJvdyB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBsYWNlLWNvbnRlbnQ6IGNlbnRlciBmbGV4LXN0YXJ0O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbn1cbi5mbGV4LWNvbHVtbiB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBsYWNlLWNvbnRlbnQ6IHN0cmV0Y2ggZmxleC1zdGFydDtcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG59XG5cbi5mbGV4LWNlbnRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwbGFjZS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLmZsZXgtcm93LWVuZCB7XG4gICAgcGxhY2UtY29udGVudDogY2VudGVyIGZsZXgtZW5kO1xufVxuXG4uZmxleC1ncm93IHtcbiAgICBmbGV4OiAxO1xufVxuXG4uZmxleC1zcGFjZS1iZXR3ZWVuIHtcbiAgICBwbGFjZS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuLypcbiAgIF5eXiBGbGV4IGJveCBsYXlvdXQgY29tbW9uIGNsYXNzZXMgXl5eXG4qLyIsIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLmRyb3Bkb3duW3dpZGdldF0ge1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG4uZHJvcGRvd25bd2lkZ2V0XS5maWxsIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5kcm9wZG93bi1saXN0W3dpZGdldF0ge1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG5cbi5zcGlubmVyIHN2ZyB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG5idXR0b24ubWF0LWJ1dHRvbixcbmFbYnV0dG9uXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxOTM3ZWE7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMxOTM3ZWE7XG4gIGNvbG9yOiAjZmZmO1xufVxuYnV0dG9uLm1hdC1idXR0b24uaW52ZXJzZSxcbmFbYnV0dG9uXS5pbnZlcnNlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgY29sb3I6ICMxOTM3ZWE7XG59XG5idXR0b24ubWF0LWJ1dHRvbi5zdWNjZXNzLFxuYVtidXR0b25dLnN1Y2Nlc3Mge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDNhMDQ3O1xuICBib3JkZXItY29sb3I6ICM0M2EwNDc7XG59XG5idXR0b24ubWF0LWJ1dHRvbltkaXNhYmxlZF0sXG5hW2J1dHRvbl1bZGlzYWJsZWRdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0NDQztcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIGJvcmRlci1jb2xvcjogI0FBQTtcbn1cblxuLm1hdC1pY29uLWJ1dHRvbiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBoZWlnaHQ6IDJlbTtcbiAgd2lkdGg6IDJlbTtcbiAgZm9udC1zaXplOiAxZW07XG59XG4ubWF0LWljb24tYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cbi5tYXQtaWNvbi1idXR0b24gYXBwLWljb24ge1xuICBmb250LXNpemU6IDEuNWVtO1xufVxuXG4uZHJvcGRvd25bd2lkZ2V0XS5kZWZhdWx0IHtcbiAgd2lkdGg6IDkuNWVtO1xufVxuXG4uZHluYW1pYy1maWVsZFt3aWRnZXRdIC5kZXRhaWxzIHtcbiAgbWluLXdpZHRoOiAxMDAlO1xufVxuLmR5bmFtaWMtZmllbGRbd2lkZ2V0XSBsYWJlbCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLmR5bmFtaWMtZmllbGRbd2lkZ2V0XSAuY29udHJvbCB7XG4gIG1pbi13aWR0aDogMTBlbTtcbn1cblxuLm92ZXJsYXktYmFja2Ryb3Age1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNik7XG59XG5cbm1hdC1kaWFsb2ctY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgcGFkZGluZzogMDtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG5tYXQtZGlhbG9nLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRhaW5lciAubWF0LWRpYWxvZy1hY3Rpb25zIHtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG5tYXQtZGlhbG9nLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRhaW5lciAubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBtYXgtaGVpZ2h0OiA5NXZoO1xufVxubWF0LWRpYWxvZy1jb250YWluZXIubWF0LWRpYWxvZy1jb250YWluZXIgLm1hdC1kaWFsb2ctY29udGVudC5wYWNrYWdlLW9wdGlvbnMge1xuICBtYXgtaGVpZ2h0OiA4NXZoO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgbWF0LWRpYWxvZy1jb250YWluZXIubWF0LWRpYWxvZy1jb250YWluZXIgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgfVxuICBtYXQtZGlhbG9nLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRhaW5lciAubWF0LWRpYWxvZy1jb250ZW50LmNhbmNlbC1kaWFsb2ctY29udGVudCwgbWF0LWRpYWxvZy1jb250YWluZXIubWF0LWRpYWxvZy1jb250YWluZXIgLm1hdC1kaWFsb2ctY29udGVudC5ib29raW5nLWR1cmF0aW9uLWNvbnRlbnQge1xuICAgIGhlaWdodDogYXV0bztcbiAgICB3aWR0aDogYXV0bztcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIG1hdC1kaWFsb2ctY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGFpbmVyIC5tYXQtZGlhbG9nLWNvbnRlbnQge1xuICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gIH1cbiAgbWF0LWRpYWxvZy1jb250YWluZXIubWF0LWRpYWxvZy1jb250YWluZXIgLm1hdC1kaWFsb2ctY29udGVudC5jYW5jZWwtZGlhbG9nLWNvbnRlbnQsIG1hdC1kaWFsb2ctY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGFpbmVyIC5tYXQtZGlhbG9nLWNvbnRlbnQuYm9va2luZy1kdXJhdGlvbi1jb250ZW50IHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgd2lkdGg6IGF1dG87XG4gIH1cbn1cbm1hdC1kaWFsb2ctY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGFpbmVyIGhlYWRlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDAuNWVtIDFlbTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwNTFjMmM7XG4gIGNvbG9yOiAjZmZmO1xufVxubWF0LWRpYWxvZy1jb250YWluZXIubWF0LWRpYWxvZy1jb250YWluZXIgaGVhZGVyIGgxLCBtYXQtZGlhbG9nLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRhaW5lciBoZWFkZXIgaDIsIG1hdC1kaWFsb2ctY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGFpbmVyIGhlYWRlciBoMywgbWF0LWRpYWxvZy1jb250YWluZXIubWF0LWRpYWxvZy1jb250YWluZXIgaGVhZGVyIGg0IHtcbiAgZmxleDogMTtcbiAgbWluLXdpZHRoOiA1MCU7XG59XG5tYXQtZGlhbG9nLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRhaW5lciBoZWFkZXIgPiAqIHtcbiAgbWFyZ2luOiAwO1xufVxubWF0LWRpYWxvZy1jb250YWluZXIubWF0LWRpYWxvZy1jb250YWluZXIgLmJvZHkge1xuICBwYWRkaW5nOiAxZW07XG4gIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICBvdmVyZmxvdzogaGlkZGVuIGF1dG87XG59XG5cbm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayB7XG4gIGNvbG9yOiAjMTkzN2VhO1xufVxubWF0LWZvcm0tZmllbGQubWFwIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgcGFkZGluZzogMDtcbn1cbm1hdC1mb3JtLWZpZWxkLm1hcCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJveC1zaGFkb3c6IDAgMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwIDFweCAxcHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG5tYXQtZm9ybS1maWVsZC5kZXNrIC5tYXQtZm9ybS1maWVsZC1mbGV4IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgcGFkZGluZzogMC4zZW07XG59XG5tYXQtZm9ybS1maWVsZC5yb3VuZGVkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0IHtcbiAgYm9yZGVyLXJhZGl1czogMmVtIDAgMCAyZW07XG4gIG1pbi13aWR0aDogMmVtO1xufVxubWF0LWZvcm0tZmllbGQucm91bmRlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICBib3JkZXItcmFkaXVzOiAwIDJlbSAyZW0gMDtcbn1cblxuLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgYm9yZGVyLXRvcDogbm9uZTtcbn1cblxuLm1hdC1zZWxlY3QtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICBjb2xvcjogIzE5MzdlYTtcbn1cblxubWF0LXNlbGVjdCAubWF0LXNlbGVjdC10cmlnZ2VyIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXIge1xuICB0cmFuc2Zvcm06IG5vbmU7XG59XG5cbi5tYXQtc2ltcGxlLXNuYWNrYmFyIGJ1dHRvbi5tYXQtYnV0dG9uIHtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgYm9yZGVyOiBub25lO1xufVxuXG4ubWF0LXNuYWNrLWJhci1jb250YWluZXIuc3VjY2VzcyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0M2EwNDc7XG4gIGNvbG9yOiAjZmZmO1xufVxuLm1hdC1zbmFjay1iYXItY29udGFpbmVyLndhcm4ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZiMzAwO1xuICBjb2xvcjogI2ZmZjtcbn1cbi5tYXQtc25hY2stYmFyLWNvbnRhaW5lci5lcnJvciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlNTM5MzU7XG4gIGNvbG9yOiAjZmZmO1xufVxuLm1hdC1zbmFjay1iYXItY29udGFpbmVyLmluZm8ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDI4NUY0O1xuICBjb2xvcjogI2ZmZjtcbn1cblxuLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1wcmltYXJ5IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE5MzdlYTtcbiAgY29sb3I6ICNmZmY7XG59XG4ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWFjY2VudCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmIzMDA7XG59XG5cbi5tYXQtc3Bpbm5lciBjaXJjbGUge1xuICBzdHJva2U6ICMxOTM3ZWE7XG59XG5cbi5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE5MzdlYTtcbn1cblxuLm1hdC10b29sdGlwIHtcbiAgd2hpdGUtc3BhY2U6IHByZS1saW5lO1xufVxuXG5kaXYubWF0LW1lbnUtcGFuZWwge1xuICBtYXgtd2lkdGg6IGNhbGMoMTAwdncgLSAxZW0pO1xuICBtYXgtaGVpZ2h0OiA2NXZoO1xufVxuZGl2Lm1hdC1tZW51LXBhbmVsLmRhcmstbW9kZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzNjM2MzY7XG59XG5cbm1hdC1yYWRpby1idXR0b24gLm1hdC1yYWRpby1sYWJlbC1jb250ZW50IHtcbiAgd2hpdGUtc3BhY2U6IGluaXRpYWw7XG59XG5cbm1hdC1jaGVja2JveCAubWF0LWNoZWNrYm94LWxhYmVsLWNvbnRlbnQge1xuICB3aGl0ZS1zcGFjZTogaW5pdGlhbDtcbn1cblxuZGl2Lm1hdC1zZWxlY3QtcGFuZWwge1xuICBtYXgtd2lkdGg6IDkwdnc7XG59XG5cbmEtbWFwIHN2ZyB0ZXh0IHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5hLW1hcCAuem9vbWluZyBbaWRePWNoYWlyXSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5tYXAtb3V0bGV0IHtcbiAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XG59XG5cbmxhYmVsLm1hdC1jaGVja2JveC1sYXlvdXQsIGxhYmVsLm1hdC1yYWRpby1sYWJlbCB7XG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG59XG5cbi8qXG4gICAgRmxleCBib3ggbGF5b3V0IGNvbW1vbiBjbGFzc2VzXG4qL1xuLmZsZXgtcm93IHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBkaXNwbGF5OiBmbGV4O1xuICBwbGFjZS1jb250ZW50OiBjZW50ZXIgZmxleC1zdGFydDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLmZsZXgtY29sdW1uIHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBkaXNwbGF5OiBmbGV4O1xuICBwbGFjZS1jb250ZW50OiBzdHJldGNoIGZsZXgtc3RhcnQ7XG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICBtYXgtd2lkdGg6IDEwMCU7XG59XG5cbi5mbGV4LWNlbnRlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBsYWNlLWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLmZsZXgtcm93LWVuZCB7XG4gIHBsYWNlLWNvbnRlbnQ6IGNlbnRlciBmbGV4LWVuZDtcbn1cblxuLmZsZXgtZ3JvdyB7XG4gIGZsZXg6IDE7XG59XG5cbi5mbGV4LXNwYWNlLWJldHdlZW4ge1xuICBwbGFjZS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuXG4vKlxuICAgXl5eIEZsZXggYm94IGxheW91dCBjb21tb24gY2xhc3NlcyBeXl5cbiovIl19 */", "/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\ninput,\ntextarea {\n -webkit-user-select: text;\n -moz-user-select: text;\n user-select: text;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvYXBwcy9zdGFmZi9zcmMvYXBwL3N0eWxlcy9uYXRpdmUtZWxlbWVudC5zdHlsZXMuc2NzcyIsImFwcHMvc3RhZmYvc3JjL2FwcC9zdHlsZXMvbmF0aXZlLWVsZW1lbnQuc3R5bGVzLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQ3ZEQTs7RUFFSSx5QkFBQTtLQUFBLHNCQUFBO1VBQUEsaUJBQUE7QUNVSiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvc3R5bGVzL25hdGl2ZS1lbGVtZW50LnN0eWxlcy5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kY29sb3ItYnJhbmQtZWxlY3RyaWMtYmx1ZTogIzIyNTFmZjtcbiRjb2xvci1icmFuZC1kZWVwLWJsdWU6ICMwNTFjMmM7XG4kY29sb3ItYnJhbmQtY3lhbjogIzAwYTlmNDtcblxuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRmb250LWRhcms6ICMwMDA7XG4kZm9udC1saWdodDogI2ZmZjtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG4kZ3JlZW4xOiAjMjE5NjUzO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvbG9yLXByaW1hcnk6ICMxOTM3ZWE7XG4kY29sb3ItcHJpbWFyeS1saWdodDogbGlnaHRlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuJGNvbG9yLXByaW1hcnktZGFyazogZGFya2VuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG5cbiRjb2xvci1zZWNvbmRhcnk6ICM0Mjg1RjQ7XG4kY29sb3Itc2Vjb25kYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcbiRjb2xvci1zZWNvbmRhcnktZGFyazogZGFya2VuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcblxuJGJhY2tncm91bmQ6ICNmMGYwZjA7XG4kZm9vdGVyLWJhY2s6ICMyNjMyMzg7XG4kaGVhZGVyLWJhY2s6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzA1MUMyQywgIzA1MUMyQyA0MCUsICMwQjI0NTMgNjAlLCAjMUY0MEU2IDEwMCUpO1xuXG4kY29sb3ItdGVybmFyeTogIzA1MWMyYztcblxuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG5cbiRmb250LXN0YWNrOiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcblxuJGhlYWRpbmctZm9udDogXCJMYXJpc2hNY0tpbnNleVwiLCAnR2VvcmdpYScsIHNlcmlmO1xuJGZvbnQ6ICRmb250LXN0YWNrO1xuXG4kZm9udC1mYW1pbHktcHJpbWFyeTogXCJNY0tpbnNleSBTYW5zXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQ2FsaWJyaSwgQ29yYmVsLCBIZWx2ZXRpY2EsIFJvYm90bywgRHJvaWQsIHNhbnMtc2VyaWY7XG4kZm9udC1mYW1pbHktc2Vjb25kYXJ5OiBcIkJvd2VyXCIsIEdlb3JnaWEsIFwiVGltZXMgTmV3IFJvbWFuXCIgc2VyaWY7XG5cbiRiYXNlLXNpemU6IDE2cHg7XG4kdGFibGV0LXNpemU6IDE2cHg7XG4kbW9iaWxlLXNpemU6IDE2cHg7XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kYnJlYWstbW9iaWxlOiA0NTBweDtcbiRicmVhay10YWJsZXQ6IDgwMHB4O1xuJGJyZWFrLWxhcHRvcDogMTAyNHB4O1xuXG4kYnJlYWstbGFuZHNjYXBlLW1vYmlsZTogODAwcHg7XG4kYnJlYWstbGFuZHNjYXBlLXRhYmxldDogMTA0OHB4O1xuJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3A6IDEyODBweDtcbiIsIlxuQGltcG9ydCAndmFyaWFibGVzJztcblxuaW5wdXQsXG50ZXh0YXJlYSB7XG4gICAgdXNlci1zZWxlY3Q6IHRleHQ7XG59XG4iLCIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5pbnB1dCxcbnRleHRhcmVhIHtcbiAgdXNlci1zZWxlY3Q6IHRleHQ7XG59Il19 */"], encapsulation: 2 }); + } }, directives: [i2.RouterOutlet], styles: ["/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n@font-face {\n font-family: 'Material Icons';\n font-style: normal;\n font-weight: 400;\n src: url(MaterialIcons-Regular.eot); /* For IE6-8 */\n src: local('Material Icons'),\n local('MaterialIcons-Regular'),\n url(MaterialIcons-Regular.woff2) format('woff2'),\n url(MaterialIcons-Regular.woff) format('woff'),\n url(MaterialIcons-Regular.ttf) format('truetype');\n}\n.material-icons {\n font-family: 'Material Icons';\n font-weight: normal;\n font-style: normal;\n font-size: 24px; /* Preferred icon size */\n display: inline-block;\n line-height: 1;\n text-transform: none;\n letter-spacing: normal;\n word-wrap: normal;\n white-space: nowrap;\n direction: ltr;\n\n /* Support for all WebKit browsers. */\n -webkit-font-smoothing: antialiased;\n /* Support for Safari and Chrome. */\n text-rendering: optimizeLegibility;\n\n /* Support for Firefox. */\n -moz-osx-font-smoothing: grayscale;\n\n /* Support for IE. */\n font-feature-settings: 'liga';\n}\n@font-face {\n font-family: 'Custom-Icons';\n src: url('Custom-Icons.eot?lqqb85');\n src: url('Custom-Icons.eot?lqqb85#iefix') format('embedded-opentype'),\n url('Custom-Icons.woff2?lqqb85') format('woff2'),\n url('Custom-Icons.ttf?lqqb85') format('truetype'),\n url('Custom-Icons.woff?lqqb85') format('woff'),\n url('Custom-Icons.svg?lqqb85#Custom-Icons') format('svg');\n font-weight: normal;\n font-style: normal;\n}\n[class^=\"custom-\"], [class*=\" custom-\"] {\n /* use !important to prevent issues with browser extensions that change fonts */\n font-family: 'Custom-Icons' !important;\n speak: none;\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n line-height: 1;\n\n /* Better Font Rendering =========== */\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.custom-zones:before {\n content: \"\\e90d\";\n}\n.custom-schedule:before {\n content: \"\\e902\";\n}\n.custom-tick:before {\n content: \"\\e904\";\n}\n.custom-Microphone:before {\n content: \"\\e90c\";\n}\n.custom-book:before {\n content: \"\\e903\";\n}\n.custom-desk:before {\n content: \"\\e905\";\n}\n.custom-spaces:before {\n content: \"\\e906\";\n}\n.custom-private:before {\n content: \"\\e907\";\n}\n.custom-not-found:before {\n content: \"\\e908\";\n}\n/* .custom-dropdown:before {\n content: \"\\e909\";\n} */\n.custom-catering:before {\n content: \"\\e90a\";\n}\n.custom-add-attendee:before {\n content: \"\\e90b\";\n}\n.custom-new-event:before {\n content: \"\\e901\";\n}\n.custom-add-user:before {\n content: \"\\e900\";\n}\n/* McKinsey Larish - Regular - Latin */\n@font-face {\n font-family: 'LarishMcKinsey';\n font-style: normal;\n font-weight: 400;\n src: url('Larish_McKinsey_Regular.eot'); /* IE9 Compat Modes */\n src: local('LarishMcKinsey'), local('LarishMcKinseyRegular'),\n url('Larish_McKinsey_Regular.eot?#iefix') format('embedded-opentype'), \n url('Larish_McKinsey_Regular.woff2') format('woff2'), \n url('Larish_McKinsey_Regular.woff') format('woff'), \n url('Larish_McKinsey_Regular.ttf') format('truetype'), \n url('Larish_McKinsey_Regular.svg#LarishMcKinseyRegular') format('svg'); /* Legacy iOS */\n}\n/* McKinsey Larish - Semi-bold - Latin */\n@font-face {\n font-family: 'LarishMcKinsey';\n font-style: normal;\n font-weight: 500;\n src: url('Larish_McKinsey_Semibold.eot'); /* IE9 Compat Modes */\n src: local('LarishMcKinsey'), local('LarishMcKinseySemibold'),\n url('Larish_McKinsey_Semibold.eot?#iefix') format('embedded-opentype'), \n url('Larish_McKinsey_Semibold.woff2') format('woff2'), \n url('Larish_McKinsey_Semibold.woff') format('woff'), \n url('Larish_McKinsey_Semibold.ttf') format('truetype'), \n url('Larish_McKinsey_Semibold.svg#LarishMcKinseySemibold') format('svg'); /* Legacy iOS */\n}\n/* Theinhardt - Light - Latin */\n@font-face {\n font-family: 'Theinhardt';\n font-style: normal;\n font-weight: 300;\n src: local('Theinhardt'),\n url('TheinhardtTT-Light.ttf') format('truetype'), /* Safari, Android, iOS */\n}\n/* Theinhardt - Light Italic - Latin */\n@font-face {\n font-family: 'Theinhardt';\n font-style: italic;\n font-weight: 300;\n src: local('Theinhardt'),\n url('TheinhardtTT-LightItalic.ttf') format('truetype'), /* Safari, Android, iOS */\n}\n/* Theinhardt - Regular - Latin */\n@font-face {\n font-family: 'Theinhardt';\n font-style: normal;\n font-weight: 400;\n src: local('Theinhardt'),\n url('TheinhardtTT-Regular.ttf') format('truetype'), /* Safari, Android, iOS */\n}\n/* Theinhardt - Italic - Latin */\n@font-face {\n font-family: 'Theinhardt';\n font-style: italic;\n font-weight: 400;\n src: local('Theinhardt'),\n url('TheinhardtTT-Italic.ttf') format('truetype'), /* Safari, Android, iOS */\n}\n/* Theinhardt - Medium - Latin */\n@font-face {\n font-family: 'Theinhardt';\n font-style: normal;\n font-weight: 500;\n src: local('Theinhardt'),\n url('TheinhardtTT-Medium.ttf') format('truetype'), /* Safari, Android, iOS */\n}\n/* Theinhardt - Medium Italic - Latin */\n@font-face {\n font-family: 'Theinhardt';\n font-style: italic;\n font-weight: 500;\n src: local('Theinhardt'),\n url('TheinhardtTT-MediumItalic.ttf') format('truetype'), /* Safari, Android, iOS */\n}\n@font-face {\n font-display: swap;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n font-weight: normal;\n src: url('McKinseySans-Regular.woff')\n}\n@font-face {\n font-display: swap;\n font-family: \"McKinsey Sans\";\n font-style: italic;\n font-weight: normal;\n src: url('McKinseySans-Italic.woff')\n}\n@font-face {\n font-display: swap;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n font-weight: 500;\n src: url('McKinseySans-Medium.woff')\n}\n@font-face {\n font-display: swap;\n font-family: \"McKinsey Sans\";\n font-style: italic;\n font-weight: 500;\n src: url('McKinseySans-MediumItalic.woff')\n}\n@font-face {\n font-display: swap;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n font-weight: 400;\n src: local('McKinsey-Sans'),\n url('McKinseySans-Light.woff')\n}\n@font-face {\n font-display: swap;\n font-family: \"McKinsey Sans\";\n font-style: italic;\n font-weight: 400;\n src: url('McKinseySans-LightItalic.woff')\n}\n@font-face {\n font-display: swap;\n font-family: \"Bower\";\n font-style: normal;\n font-weight: bold;\n src: url('Bower-Bold.woff')\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n html,\nbody {\n font-size: 16px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n html,\nbody {\n font-size: 16px;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n html,\nbody {\n font-size: 16px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n html,\nbody {\n font-size: 16px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n html,\nbody {\n font-size: 16px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n html,\nbody {\n font-size: 16px;\n }\n}\n* {\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n box-sizing: border-box;\n}\n.material-icons {\n font-size: 1em;\n}\nspan.highlight {\n color: #1937ea;\n}\n/*=======================*\\\n|| Font size styles ||\n\\*=======================*/\n.fs-small {\n font-size: 0.8rem;\n}\n.fs-normal {\n font-size: 1rem;\n}\n.fs-big {\n font-size: 1.2rem;\n}\n.fs-large {\n font-size: 1.5rem;\n}\n/*==============*\\\n|| Media Styles ||\n\\*==============*/\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mobile-only,\n.mobile {\n display: none !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mobile-only,\n.mobile {\n display: none !important;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .not-desktop,\n.mobile,\n.mobile-only {\n display: none !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .not-desktop,\n.mobile,\n.mobile-only {\n display: none !important;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .desktop,\n.desktop-only,\n.not-tablet,\n.mobile,\n.mobile-only {\n display: none !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .desktop,\n.desktop-only,\n.not-tablet,\n.mobile,\n.mobile-only {\n display: none !important;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .desktop-only,\n.desktop,\n.mobile-hide,\n.not-mobile {\n display: none !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .desktop-only,\n.desktop,\n.mobile-hide,\n.not-mobile {\n display: none !important;\n }\n}\n/*========================*\\\n|| Application styles ||\n\\*========================*/\n.info-block {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n margin: 0.5em;\n width: 100%;\n}\n.info-block .icon {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 1.2em;\n width: 1.2em;\n font-size: 2em;\n}\n.info-block .icon a-spinner {\n font-size: 0.25em;\n}\n.info-block .text {\n margin: 0.5em 0 0;\n}\n/*=====================*\\\n|| TinyMCE overrides ||\n\\*=====================*/\ndiv.tox-silver-sink {\n z-index: 9999;\n}\ndiv.tox-silver-sink .tox-notification {\n display: none;\n}\ndiv.tox-editor-container .tox-menubar button:first-child {\n display: none;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n div.tox-tinymce {\n min-height: 20em;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n div.tox-tinymce {\n min-height: 20em;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCJub2RlX21vZHVsZXMvbWF0ZXJpYWwtZGVzaWduLWljb25zL2ljb25mb250L21hdGVyaWFsLWljb25zLmNzcyIsImFwcHMvc3RhZmYvc3JjL2ZvbnRzL2ljb25zL3N0eWxlLmNzcyIsImxpYnMvdWkvc3JjL2xpYi9mb250cy9mb250cy5jc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvc3R5bGVzL2FwcC5jb21wb25lbnQuc2NzcyIsImFwcHMvc3RhZmYvc3JjL2FwcC9zdHlsZXMvYXBwLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzswQkFBQTtBQVFBOzswQkFBQTtBQWtDQTs7Y0FBQTtBQWdCQTs7c0JBQUE7QUM1Q0E7O3NCQUFBO0FDZEE7RUFDRSw2QkFBNkI7RUFDN0Isa0JBQWtCO0VBQ2xCLGdCQUFnQjtFQUNoQixtQ0FBbUMsRUFBRSxjQUFjO0VBQ25EOzs7O3dEQUlzRDtBQUN4RDtBQUVBO0VBQ0UsNkJBQTZCO0VBQzdCLG1CQUFtQjtFQUNuQixrQkFBa0I7RUFDbEIsZUFBZSxHQUFHLHdCQUF3QjtFQUMxQyxxQkFBcUI7RUFDckIsY0FBYztFQUNkLG9CQUFvQjtFQUNwQixzQkFBc0I7RUFDdEIsaUJBQWlCO0VBQ2pCLG1CQUFtQjtFQUNuQixjQUFjOztFQUVkLHFDQUFxQztFQUNyQyxtQ0FBbUM7RUFDbkMsbUNBQW1DO0VBQ25DLGtDQUFrQzs7RUFFbEMseUJBQXlC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Q0ksaUJBQUE7QUMyRFo7QUR2REk7RUFDSSxpQkFBQTtBQ3lEUjtBRHJEQTs7d0JBQUE7QUFJQTtFQUNJLGFBQUE7QUN1REo7QURyREk7RUFDSSxhQUFBO0FDdURSO0FEakRRO0VBQ0ksYUFBQTtBQ29EWjtBTHRLUTtFSXVIUjtJQUVRLGdCQUFBO0VDa0ROO0FBQ0Y7QUx6S1E7RUlvSFI7SUFFUSxnQkFBQTtFQ3VETjtBQUNGIiwiZmlsZSI6ImFwcHMvc3RhZmYvc3JjL2FwcC9zdHlsZXMvYXBwLmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kY29sb3ItYnJhbmQtZWxlY3RyaWMtYmx1ZTogIzIyNTFmZjtcbiRjb2xvci1icmFuZC1kZWVwLWJsdWU6ICMwNTFjMmM7XG4kY29sb3ItYnJhbmQtY3lhbjogIzAwYTlmNDtcblxuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRmb250LWRhcms6ICMwMDA7XG4kZm9udC1saWdodDogI2ZmZjtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG4kZ3JlZW4xOiAjMjE5NjUzO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvbG9yLXByaW1hcnk6ICMxOTM3ZWE7XG4kY29sb3ItcHJpbWFyeS1saWdodDogbGlnaHRlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuJGNvbG9yLXByaW1hcnktZGFyazogZGFya2VuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG5cbiRjb2xvci1zZWNvbmRhcnk6ICM0Mjg1RjQ7XG4kY29sb3Itc2Vjb25kYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcbiRjb2xvci1zZWNvbmRhcnktZGFyazogZGFya2VuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcblxuJGJhY2tncm91bmQ6ICNmMGYwZjA7XG4kZm9vdGVyLWJhY2s6ICMyNjMyMzg7XG4kaGVhZGVyLWJhY2s6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzA1MUMyQywgIzA1MUMyQyA0MCUsICMwQjI0NTMgNjAlLCAjMUY0MEU2IDEwMCUpO1xuXG4kY29sb3ItdGVybmFyeTogIzA1MWMyYztcblxuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG5cbiRmb250LXN0YWNrOiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcblxuJGhlYWRpbmctZm9udDogXCJMYXJpc2hNY0tpbnNleVwiLCAnR2VvcmdpYScsIHNlcmlmO1xuJGZvbnQ6ICRmb250LXN0YWNrO1xuXG4kZm9udC1mYW1pbHktcHJpbWFyeTogXCJNY0tpbnNleSBTYW5zXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQ2FsaWJyaSwgQ29yYmVsLCBIZWx2ZXRpY2EsIFJvYm90bywgRHJvaWQsIHNhbnMtc2VyaWY7XG4kZm9udC1mYW1pbHktc2Vjb25kYXJ5OiBcIkJvd2VyXCIsIEdlb3JnaWEsIFwiVGltZXMgTmV3IFJvbWFuXCIgc2VyaWY7XG5cbiRiYXNlLXNpemU6IDE2cHg7XG4kdGFibGV0LXNpemU6IDE2cHg7XG4kbW9iaWxlLXNpemU6IDE2cHg7XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kYnJlYWstbW9iaWxlOiA0NTBweDtcbiRicmVhay10YWJsZXQ6IDgwMHB4O1xuJGJyZWFrLWxhcHRvcDogMTAyNHB4O1xuXG4kYnJlYWstbGFuZHNjYXBlLW1vYmlsZTogODAwcHg7XG4kYnJlYWstbGFuZHNjYXBlLXRhYmxldDogMTA0OHB4O1xuJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3A6IDEyODBweDtcbiIsIkBpbXBvcnQgJy4vdmFyaWFibGVzJztcblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5AbWl4aW4gYm94LXNoYWRvdygkY29sb3I6ICMwMDAsICRkZXB0aDogMSkge1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCAxcHggKiAoJGRlcHRoIC0gMSkgcmdiYSgjMDAwLCAuMiksXG4gICAgICAgICAgICAgICAgMCAxcHggMXB4IDAgcmdiYSgjMDAwLCAuMTQpLFxuICAgICAgICAgICAgICAgIDAgMnB4IDFweCAtMXB4IHJnYmEoIzAwMCwgLjEyKTtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbkBtaXhpbiByZXNwb25kLXRvKCRtZWRpYSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSAgQGVsc2UgaWYgJG1lZGlhID09IGxhdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfUBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJAZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdNYXRlcmlhbCBJY29ucyc7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgc3JjOiB1cmwoTWF0ZXJpYWxJY29ucy1SZWd1bGFyLmVvdCk7IC8qIEZvciBJRTYtOCAqL1xuICBzcmM6IGxvY2FsKCdNYXRlcmlhbCBJY29ucycpLFxuICAgICAgIGxvY2FsKCdNYXRlcmlhbEljb25zLVJlZ3VsYXInKSxcbiAgICAgICB1cmwoTWF0ZXJpYWxJY29ucy1SZWd1bGFyLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyksXG4gICAgICAgdXJsKE1hdGVyaWFsSWNvbnMtUmVndWxhci53b2ZmKSBmb3JtYXQoJ3dvZmYnKSxcbiAgICAgICB1cmwoTWF0ZXJpYWxJY29ucy1SZWd1bGFyLnR0ZikgZm9ybWF0KCd0cnVldHlwZScpO1xufVxuXG4ubWF0ZXJpYWwtaWNvbnMge1xuICBmb250LWZhbWlseTogJ01hdGVyaWFsIEljb25zJztcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXNpemU6IDI0cHg7ICAvKiBQcmVmZXJyZWQgaWNvbiBzaXplICovXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xuICB3b3JkLXdyYXA6IG5vcm1hbDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgZGlyZWN0aW9uOiBsdHI7XG5cbiAgLyogU3VwcG9ydCBmb3IgYWxsIFdlYktpdCBicm93c2Vycy4gKi9cbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIC8qIFN1cHBvcnQgZm9yIFNhZmFyaSBhbmQgQ2hyb21lLiAqL1xuICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5O1xuXG4gIC8qIFN1cHBvcnQgZm9yIEZpcmVmb3guICovXG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG5cbiAgLyogU3VwcG9ydCBmb3IgSUUuICovXG4gIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2xpZ2EnO1xufVxuIiwiQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnQ3VzdG9tLUljb25zJztcbiAgc3JjOiAgdXJsKCdmb250cy9DdXN0b20tSWNvbnMuZW90P2xxcWI4NScpO1xuICBzcmM6ICB1cmwoJ2ZvbnRzL0N1c3RvbS1JY29ucy5lb3Q/bHFxYjg1I2llZml4JykgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLFxuICAgIHVybCgnZm9udHMvQ3VzdG9tLUljb25zLndvZmYyP2xxcWI4NScpIGZvcm1hdCgnd29mZjInKSxcbiAgICB1cmwoJ2ZvbnRzL0N1c3RvbS1JY29ucy50dGY/bHFxYjg1JykgZm9ybWF0KCd0cnVldHlwZScpLFxuICAgIHVybCgnZm9udHMvQ3VzdG9tLUljb25zLndvZmY/bHFxYjg1JykgZm9ybWF0KCd3b2ZmJyksXG4gICAgdXJsKCdmb250cy9DdXN0b20tSWNvbnMuc3ZnP2xxcWI4NSNDdXN0b20tSWNvbnMnKSBmb3JtYXQoJ3N2ZycpO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG59XG5cbltjbGFzc149XCJjdXN0b20tXCJdLCBbY2xhc3MqPVwiIGN1c3RvbS1cIl0ge1xuICAvKiB1c2UgIWltcG9ydGFudCB0byBwcmV2ZW50IGlzc3VlcyB3aXRoIGJyb3dzZXIgZXh0ZW5zaW9ucyB0aGF0IGNoYW5nZSBmb250cyAqL1xuICBmb250LWZhbWlseTogJ0N1c3RvbS1JY29ucycgIWltcG9ydGFudDtcbiAgc3BlYWs6IG5vbmU7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC12YXJpYW50OiBub3JtYWw7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICBsaW5lLWhlaWdodDogMTtcblxuICAvKiBCZXR0ZXIgRm9udCBSZW5kZXJpbmcgPT09PT09PT09PT0gKi9cbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG59XG5cbi5jdXN0b20tem9uZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGU5MGRcIjtcbn1cbi5jdXN0b20tc2NoZWR1bGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGU5MDJcIjtcbn1cbi5jdXN0b20tdGljazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTkwNFwiO1xufVxuLmN1c3RvbS1NaWNyb3Bob25lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlOTBjXCI7XG59XG4uY3VzdG9tLWJvb2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGU5MDNcIjtcbn1cbi5jdXN0b20tZGVzazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTkwNVwiO1xufVxuLmN1c3RvbS1zcGFjZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGU5MDZcIjtcbn1cbi5jdXN0b20tcHJpdmF0ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTkwN1wiO1xufVxuLmN1c3RvbS1ub3QtZm91bmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGU5MDhcIjtcbn1cbi8qIC5jdXN0b20tZHJvcGRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGU5MDlcIjtcbn0gKi9cbi5jdXN0b20tY2F0ZXJpbmc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGU5MGFcIjtcbn1cbi5jdXN0b20tYWRkLWF0dGVuZGVlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlOTBiXCI7XG59XG4uY3VzdG9tLW5ldy1ldmVudDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTkwMVwiO1xufVxuLmN1c3RvbS1hZGQtdXNlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTkwMFwiO1xufVxuIiwiLyogTWNLaW5zZXkgTGFyaXNoIC0gUmVndWxhciAtIExhdGluICovXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ0xhcmlzaE1jS2luc2V5JztcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBzcmM6IHVybCgnbGlicy91aS9zcmMvbGliL2ZvbnRzL21ja2luc2V5X2xhcmlzaC9MYXJpc2hfTWNLaW5zZXlfUmVndWxhci5lb3QnKTsgLyogSUU5IENvbXBhdCBNb2RlcyAqL1xuICAgIHNyYzogbG9jYWwoJ0xhcmlzaE1jS2luc2V5JyksIGxvY2FsKCdMYXJpc2hNY0tpbnNleVJlZ3VsYXInKSxcbiAgICB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy9tY2tpbnNleV9sYXJpc2gvTGFyaXNoX01jS2luc2V5X1JlZ3VsYXIuZW90PyNpZWZpeCcpIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSwgLyogSUU2LUlFOCAqL1xuICAgIHVybCgnbGlicy91aS9zcmMvbGliL2ZvbnRzL21ja2luc2V5X2xhcmlzaC9MYXJpc2hfTWNLaW5zZXlfUmVndWxhci53b2ZmMicpIGZvcm1hdCgnd29mZjInKSwgLyogU3VwZXIgTW9kZXJuIEJyb3dzZXJzICovXG4gICAgdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXlfbGFyaXNoL0xhcmlzaF9NY0tpbnNleV9SZWd1bGFyLndvZmYnKSBmb3JtYXQoJ3dvZmYnKSwgLyogTW9kZXJuIEJyb3dzZXJzICovXG4gICAgdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXlfbGFyaXNoL0xhcmlzaF9NY0tpbnNleV9SZWd1bGFyLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKSwgLyogU2FmYXJpLCBBbmRyb2lkLCBpT1MgKi9cbiAgICB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy9tY2tpbnNleV9sYXJpc2gvTGFyaXNoX01jS2luc2V5X1JlZ3VsYXIuc3ZnI0xhcmlzaE1jS2luc2V5UmVndWxhcicpIGZvcm1hdCgnc3ZnJyk7IC8qIExlZ2FjeSBpT1MgKi9cbn1cblxuLyogTWNLaW5zZXkgTGFyaXNoIC0gU2VtaS1ib2xkIC0gTGF0aW4gKi9cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnTGFyaXNoTWNLaW5zZXknO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIHNyYzogdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXlfbGFyaXNoL0xhcmlzaF9NY0tpbnNleV9TZW1pYm9sZC5lb3QnKTsgLyogSUU5IENvbXBhdCBNb2RlcyAqL1xuICAgIHNyYzogbG9jYWwoJ0xhcmlzaE1jS2luc2V5JyksIGxvY2FsKCdMYXJpc2hNY0tpbnNleVNlbWlib2xkJyksXG4gICAgdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXlfbGFyaXNoL0xhcmlzaF9NY0tpbnNleV9TZW1pYm9sZC5lb3Q/I2llZml4JykgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLCAvKiBJRTYtSUU4ICovXG4gICAgdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXlfbGFyaXNoL0xhcmlzaF9NY0tpbnNleV9TZW1pYm9sZC53b2ZmMicpIGZvcm1hdCgnd29mZjInKSwgLyogU3VwZXIgTW9kZXJuIEJyb3dzZXJzICovXG4gICAgdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXlfbGFyaXNoL0xhcmlzaF9NY0tpbnNleV9TZW1pYm9sZC53b2ZmJykgZm9ybWF0KCd3b2ZmJyksIC8qIE1vZGVybiBCcm93c2VycyAqL1xuICAgIHVybCgnbGlicy91aS9zcmMvbGliL2ZvbnRzL21ja2luc2V5X2xhcmlzaC9MYXJpc2hfTWNLaW5zZXlfU2VtaWJvbGQudHRmJykgZm9ybWF0KCd0cnVldHlwZScpLCAvKiBTYWZhcmksIEFuZHJvaWQsIGlPUyAqL1xuICAgIHVybCgnbGlicy91aS9zcmMvbGliL2ZvbnRzL21ja2luc2V5X2xhcmlzaC9MYXJpc2hfTWNLaW5zZXlfU2VtaWJvbGQuc3ZnI0xhcmlzaE1jS2luc2V5U2VtaWJvbGQnKSBmb3JtYXQoJ3N2ZycpOyAvKiBMZWdhY3kgaU9TICovXG59XG5cbi8qIFRoZWluaGFyZHQgLSBMaWdodCAtIExhdGluICovXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ1RoZWluaGFyZHQnO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIHNyYzogbG9jYWwoJ1RoZWluaGFyZHQnKSxcbiAgICB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy90aGVpbmhhcmR0L1RoZWluaGFyZHRUVC1MaWdodC50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyksIC8qIFNhZmFyaSwgQW5kcm9pZCwgaU9TICovXG59XG5cbi8qIFRoZWluaGFyZHQgLSBMaWdodCBJdGFsaWMgLSBMYXRpbiAqL1xuQGZvbnQtZmFjZSB7XG4gICAgZm9udC1mYW1pbHk6ICdUaGVpbmhhcmR0JztcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICBzcmM6IGxvY2FsKCdUaGVpbmhhcmR0JyksXG4gICAgdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvdGhlaW5oYXJkdC9UaGVpbmhhcmR0VFQtTGlnaHRJdGFsaWMudHRmJykgZm9ybWF0KCd0cnVldHlwZScpLCAvKiBTYWZhcmksIEFuZHJvaWQsIGlPUyAqL1xufVxuXG4vKiBUaGVpbmhhcmR0IC0gUmVndWxhciAtIExhdGluICovXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ1RoZWluaGFyZHQnO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIHNyYzogbG9jYWwoJ1RoZWluaGFyZHQnKSxcbiAgICB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy90aGVpbmhhcmR0L1RoZWluaGFyZHRUVC1SZWd1bGFyLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKSwgLyogU2FmYXJpLCBBbmRyb2lkLCBpT1MgKi9cbn1cblxuLyogVGhlaW5oYXJkdCAtIEl0YWxpYyAtIExhdGluICovXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ1RoZWluaGFyZHQnO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIHNyYzogbG9jYWwoJ1RoZWluaGFyZHQnKSxcbiAgICB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy90aGVpbmhhcmR0L1RoZWluaGFyZHRUVC1JdGFsaWMudHRmJykgZm9ybWF0KCd0cnVldHlwZScpLCAvKiBTYWZhcmksIEFuZHJvaWQsIGlPUyAqL1xufVxuXG4vKiBUaGVpbmhhcmR0IC0gTWVkaXVtIC0gTGF0aW4gKi9cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnVGhlaW5oYXJkdCc7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgc3JjOiBsb2NhbCgnVGhlaW5oYXJkdCcpLFxuICAgIHVybCgnbGlicy91aS9zcmMvbGliL2ZvbnRzL3RoZWluaGFyZHQvVGhlaW5oYXJkdFRULU1lZGl1bS50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyksIC8qIFNhZmFyaSwgQW5kcm9pZCwgaU9TICovXG59XG5cbi8qIFRoZWluaGFyZHQgLSBNZWRpdW0gSXRhbGljIC0gTGF0aW4gKi9cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnVGhlaW5oYXJkdCc7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgc3JjOiBsb2NhbCgnVGhlaW5oYXJkdCcpLFxuICAgIHVybCgnbGlicy91aS9zcmMvbGliL2ZvbnRzL3RoZWluaGFyZHQvVGhlaW5oYXJkdFRULU1lZGl1bUl0YWxpYy50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyksIC8qIFNhZmFyaSwgQW5kcm9pZCwgaU9TICovXG59XG5cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZGlzcGxheTogc3dhcDtcbiAgICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgc3JjOiB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy9tY2tpbnNleS1zYW5zL01jS2luc2V5U2Fucy1SZWd1bGFyLndvZmYnKVxufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG4gICAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIHNyYzogdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXktc2Fucy9NY0tpbnNleVNhbnMtSXRhbGljLndvZmYnKVxufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG4gICAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIHNyYzogdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXktc2Fucy9NY0tpbnNleVNhbnMtTWVkaXVtLndvZmYnKVxufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG4gICAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIHNyYzogdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXktc2Fucy9NY0tpbnNleVNhbnMtTWVkaXVtSXRhbGljLndvZmYnKVxufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG4gICAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIHNyYzogbG9jYWwoJ01jS2luc2V5LVNhbnMnKSxcbiAgICB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy9tY2tpbnNleS1zYW5zL01jS2luc2V5U2Fucy1MaWdodC53b2ZmJylcbn1cblxuQGZvbnQtZmFjZSB7XG4gICAgZm9udC1kaXNwbGF5OiBzd2FwO1xuICAgIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBzcmM6IHVybCgnbGlicy91aS9zcmMvbGliL2ZvbnRzL21ja2luc2V5LXNhbnMvTWNLaW5zZXlTYW5zLUxpZ2h0SXRhbGljLndvZmYnKVxufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG4gICAgZm9udC1mYW1pbHk6IFwiQm93ZXJcIjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgc3JjOiB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy9ib3dlci9Cb3dlci1Cb2xkLndvZmYnKVxufVxuIiwiQGltcG9ydCAnbWl4aW5zJztcbkBpbXBvcnQgXCJ+bWF0ZXJpYWwtZGVzaWduLWljb25zL2ljb25mb250L21hdGVyaWFsLWljb25zLmNzc1wiO1xuQGltcG9ydCAnLi4vLi4vZm9udHMvaWNvbnMvc3R5bGUuY3NzJztcbkBpbXBvcnQgJy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvc3JjL2xpYi9mb250cy9mb250cy5jc3MnO1xuXG5odG1sLFxuYm9keSB7XG4gICAgQGluY2x1ZGUgcmVzcG9uZC10byhkZXNrdG9wKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogJGJhc2Utc2l6ZTtcbiAgICB9XG4gICAgQGluY2x1ZGUgcmVzcG9uZC10byh0YWJsZXQpIHtcbiAgICAgICAgZm9udC1zaXplOiAkdGFibGV0LXNpemU7XG4gICAgfVxuICAgIEBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogJG1vYmlsZS1zaXplO1xuICAgIH1cbn1cblxuKiB7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1wcmltYXJ5O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi5tYXRlcmlhbC1pY29ucyB7XG4gICAgZm9udC1zaXplOiAxZW07XG59XG5cbnNwYW4uaGlnaGxpZ2h0IHtcbiAgICBjb2xvcjogJGNvbG9yLXByaW1hcnk7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgIEZvbnQgc2l6ZSBzdHlsZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4uZnMge1xuICAgICYtc21hbGwge1xuICAgICAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICB9XG4gICAgJi1ub3JtYWwge1xuICAgICAgICBmb250LXNpemU6IDFyZW07XG4gICAgfVxuICAgICYtYmlnIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjJyZW07XG4gICAgfVxuICAgICYtbGFyZ2Uge1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTtcbiAgICB9XG59XG5cbi8qPT09PT09PT09PT09PT0qXFxcbnx8IE1lZGlhIFN0eWxlcyB8fFxuXFwqPT09PT09PT09PT09PT0qL1xuXG5AaW5jbHVkZSByZXNwb25kLXRvKG5vdC1tb2JpbGUpIHtcbiAgICAubW9iaWxlLW9ubHksXG4gICAgLm1vYmlsZSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG59XG5cbkBpbmNsdWRlIHJlc3BvbmQtdG8oZGVza3RvcCkge1xuICAgIC5ub3QtZGVza3RvcCxcbiAgICAubW9iaWxlLFxuICAgIC5tb2JpbGUtb25seSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG59XG5cbkBpbmNsdWRlIHJlc3BvbmQtdG8odGFibGV0KSB7XG4gICAgLmRlc2t0b3AsXG4gICAgLmRlc2t0b3Atb25seSxcbiAgICAubm90LXRhYmxldCxcbiAgICAubW9iaWxlLFxuICAgIC5tb2JpbGUtb25seSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG59XG5cbkBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgLmRlc2t0b3Atb25seSxcbiAgICAuZGVza3RvcCxcbiAgICAubW9iaWxlLWhpZGUsXG4gICAgLm5vdC1tb2JpbGUge1xuICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxufVxuXG4vKj09PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBBcHBsaWNhdGlvbiBzdHlsZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuLmluZm8tYmxvY2sge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIG1hcmdpbjogLjVlbTtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgIC5pY29uIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGhlaWdodDogMS4yZW07XG4gICAgICAgIHdpZHRoOiAxLjJlbTtcbiAgICAgICAgZm9udC1zaXplOiAyZW07XG5cbiAgICAgICAgYS1zcGlubmVyIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogLjI1ZW07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAudGV4dCB7XG4gICAgICAgIG1hcmdpbjogLjVlbSAwIDA7XG4gICAgfVxufVxuXG4vKj09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIFRpbnlNQ0Ugb3ZlcnJpZGVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09Ki9cblxuZGl2LnRveC1zaWx2ZXItc2luayB7XG4gICAgei1pbmRleDogOTk5OTtcblxuICAgIC50b3gtbm90aWZpY2F0aW9uIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG59XG5cbmRpdi50b3gtZWRpdG9yLWNvbnRhaW5lciB7XG4gICAgLnRveC1tZW51YmFyIHtcbiAgICAgICAgYnV0dG9uOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmRpdi50b3gtdGlueW1jZSB7XG4gICAgQGluY2x1ZGUgcmVzcG9uZC10byhtb2JpbGUpIHtcbiAgICAgICAgbWluLWhlaWdodDogMjBlbTtcbiAgICB9XG59XG4iLCIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbkBpbXBvcnQgXCJ+bWF0ZXJpYWwtZGVzaWduLWljb25zL2ljb25mb250L21hdGVyaWFsLWljb25zLmNzc1wiO1xuQGltcG9ydCAnLi4vLi4vZm9udHMvaWNvbnMvc3R5bGUuY3NzJztcbkBpbXBvcnQgJy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvc3JjL2xpYi9mb250cy9mb250cy5jc3MnO1xuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogODAwcHgpIHtcbiAgaHRtbCxcbmJvZHkge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDEwNDhweCkge1xuICBodG1sLFxuYm9keSB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIGh0bWwsXG5ib2R5IHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkgYW5kIChtYXgtd2lkdGg6IDEwNDhweCkge1xuICBodG1sLFxuYm9keSB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICBodG1sLFxuYm9keSB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgaHRtbCxcbmJvZHkge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgfVxufVxuXG4qIHtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLm1hdGVyaWFsLWljb25zIHtcbiAgZm9udC1zaXplOiAxZW07XG59XG5cbnNwYW4uaGlnaGxpZ2h0IHtcbiAgY29sb3I6ICMxOTM3ZWE7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgIEZvbnQgc2l6ZSBzdHlsZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLmZzLXNtYWxsIHtcbiAgZm9udC1zaXplOiAwLjhyZW07XG59XG4uZnMtbm9ybWFsIHtcbiAgZm9udC1zaXplOiAxcmVtO1xufVxuLmZzLWJpZyB7XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xufVxuLmZzLWxhcmdlIHtcbiAgZm9udC1zaXplOiAxLjVyZW07XG59XG5cbi8qPT09PT09PT09PT09PT0qXFxcbnx8IE1lZGlhIFN0eWxlcyB8fFxuXFwqPT09PT09PT09PT09PT0qL1xuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1vYmlsZS1vbmx5LFxuLm1vYmlsZSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1vYmlsZS1vbmx5LFxuLm1vYmlsZSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA4MDBweCkge1xuICAubm90LWRlc2t0b3AsXG4ubW9iaWxlLFxuLm1vYmlsZS1vbmx5IHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAxMDQ4cHgpIHtcbiAgLm5vdC1kZXNrdG9wLFxuLm1vYmlsZSxcbi5tb2JpbGUtb25seSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5kZXNrdG9wLFxuLmRlc2t0b3Atb25seSxcbi5ub3QtdGFibGV0LFxuLm1vYmlsZSxcbi5tb2JpbGUtb25seSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDQ4cHgpIHtcbiAgLmRlc2t0b3AsXG4uZGVza3RvcC1vbmx5LFxuLm5vdC10YWJsZXQsXG4ubW9iaWxlLFxuLm1vYmlsZS1vbmx5IHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5kZXNrdG9wLW9ubHksXG4uZGVza3RvcCxcbi5tb2JpbGUtaGlkZSxcbi5ub3QtbW9iaWxlIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuZGVza3RvcC1vbmx5LFxuLmRlc2t0b3AsXG4ubW9iaWxlLWhpZGUsXG4ubm90LW1vYmlsZSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG4vKj09PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBBcHBsaWNhdGlvbiBzdHlsZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT09Ki9cbi5pbmZvLWJsb2NrIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1hcmdpbjogMC41ZW07XG4gIHdpZHRoOiAxMDAlO1xufVxuLmluZm8tYmxvY2sgLmljb24ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgaGVpZ2h0OiAxLjJlbTtcbiAgd2lkdGg6IDEuMmVtO1xuICBmb250LXNpemU6IDJlbTtcbn1cbi5pbmZvLWJsb2NrIC5pY29uIGEtc3Bpbm5lciB7XG4gIGZvbnQtc2l6ZTogMC4yNWVtO1xufVxuLmluZm8tYmxvY2sgLnRleHQge1xuICBtYXJnaW46IDAuNWVtIDAgMDtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBUaW55TUNFIG92ZXJyaWRlcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PSovXG5kaXYudG94LXNpbHZlci1zaW5rIHtcbiAgei1pbmRleDogOTk5OTtcbn1cbmRpdi50b3gtc2lsdmVyLXNpbmsgLnRveC1ub3RpZmljYXRpb24ge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG5kaXYudG94LWVkaXRvci1jb250YWluZXIgLnRveC1tZW51YmFyIGJ1dHRvbjpmaXJzdC1jaGlsZCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIGRpdi50b3gtdGlueW1jZSB7XG4gICAgbWluLWhlaWdodDogMjBlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIGRpdi50b3gtdGlueW1jZSB7XG4gICAgbWluLWhlaWdodDogMjBlbTtcbiAgfVxufSJdfQ== */", "/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n.dropdown[widget] {\n border-radius: 4px;\n}\n.dropdown[widget].fill {\n width: 100%;\n}\n.dropdown-list[widget] {\n border-radius: 4px;\n}\n.spinner svg {\n width: 100%;\n}\nbutton.mat-button,\na[button] {\n background-color: #1937ea;\n border: 1px solid #1937ea;\n color: #fff;\n}\nbutton.mat-button.inverse,\na[button].inverse {\n background-color: #fff;\n color: #1937ea;\n}\nbutton.mat-button.success,\na[button].success {\n background-color: #43a047;\n border-color: #43a047;\n}\nbutton.mat-button[disabled],\na[button][disabled] {\n background-color: #CCC;\n pointer-events: none;\n border-color: #AAA;\n}\n.mat-icon-button {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 2em;\n width: 2em;\n font-size: 1em;\n}\n.mat-icon-button .mat-button-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.mat-icon-button app-icon {\n font-size: 1.5em;\n}\n.dropdown[widget].default {\n width: 9.5em;\n}\n.dynamic-field[widget] .details {\n min-width: 100%;\n}\n.dynamic-field[widget] label {\n margin-left: 0;\n}\n.dynamic-field[widget] .control {\n min-width: 10em;\n}\n.overlay-backdrop {\n background-color: rgba(0, 0, 0, 0.6);\n}\nmat-dialog-container.mat-dialog-container {\n padding: 0;\n overflow: visible;\n border-radius: 0;\n}\nmat-dialog-container.mat-dialog-container .mat-dialog-actions {\n margin: 0 auto;\n}\nmat-dialog-container.mat-dialog-container .mat-dialog-content {\n margin: 0;\n padding: 0;\n max-height: 93vh;\n}\nmat-dialog-container.mat-dialog-container .mat-dialog-content.package-options {\n max-height: 85vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n mat-dialog-container.mat-dialog-container .mat-dialog-content {\n max-height: 100vh;\n width: 100vw;\n height: 100%;\n }\n mat-dialog-container.mat-dialog-container .mat-dialog-content.cancel-dialog-content, mat-dialog-container.mat-dialog-container .mat-dialog-content.booking-duration-content {\n height: auto;\n width: auto;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n mat-dialog-container.mat-dialog-container .mat-dialog-content {\n max-height: 100vh;\n width: 100vw;\n height: 100%;\n }\n mat-dialog-container.mat-dialog-container .mat-dialog-content.cancel-dialog-content, mat-dialog-container.mat-dialog-container .mat-dialog-content.booking-duration-content {\n height: auto;\n width: auto;\n }\n}\nmat-dialog-container.mat-dialog-container header {\n display: flex;\n align-items: center;\n padding: 0.5em 1em;\n width: 100%;\n background-color: #051c2c;\n color: #fff;\n}\nmat-dialog-container.mat-dialog-container header h1, mat-dialog-container.mat-dialog-container header h2, mat-dialog-container.mat-dialog-container header h3, mat-dialog-container.mat-dialog-container header h4 {\n flex: 1;\n min-width: 50%;\n}\nmat-dialog-container.mat-dialog-container header > * {\n margin: 0;\n}\nmat-dialog-container.mat-dialog-container .body {\n padding: 1em;\n pointer-events: auto;\n overflow: hidden auto;\n}\nmat-form-field.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick {\n color: #1937ea;\n}\nmat-form-field.map .mat-form-field-wrapper {\n padding: 0;\n}\nmat-form-field.map .mat-form-field-outline {\n background-color: #fff;\n box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12);\n border-radius: 4px;\n}\nmat-form-field.desk .mat-form-field-flex {\n background-color: #fff;\n padding: 0.3em;\n}\nmat-form-field.rounded .mat-form-field-outline-start {\n border-radius: 2em 0 0 2em;\n min-width: 2em;\n}\nmat-form-field.rounded .mat-form-field-outline-end {\n border-radius: 0 2em 2em 0;\n}\n.mat-form-field-infix {\n border-top: none;\n}\n.mat-select-panel .mat-option.mat-selected:not(.mat-option-disabled) {\n color: #1937ea;\n}\nmat-select .mat-select-trigger .mat-select-arrow-wrapper {\n transform: none;\n}\n.mat-simple-snackbar button.mat-button {\n background: none;\n border: none;\n}\n.mat-snack-bar-container.success {\n background-color: #43a047;\n color: #fff;\n}\n.mat-snack-bar-container.warn {\n background-color: #ffb300;\n color: #fff;\n}\n.mat-snack-bar-container.error {\n background-color: #e53935;\n color: #fff;\n}\n.mat-snack-bar-container.info {\n background-color: #4285F4;\n color: #fff;\n}\n.mat-chip.mat-standard-chip.mat-primary {\n background-color: #1937ea;\n color: #fff;\n}\n.mat-chip.mat-standard-chip.mat-accent {\n background-color: #ffb300;\n}\n.mat-spinner circle {\n stroke: #1937ea;\n}\n.mat-progress-bar-fill::after {\n background-color: #1937ea;\n}\n.mat-tooltip {\n white-space: pre-line;\n}\ndiv.mat-menu-panel {\n max-width: calc(100vw - 1em);\n max-height: 65vh;\n}\ndiv.mat-menu-panel.dark-mode {\n background-color: #363636;\n}\nmat-radio-button .mat-radio-label-content {\n white-space: initial;\n}\nmat-checkbox .mat-checkbox-label-content {\n white-space: initial;\n}\ndiv.mat-select-panel {\n max-width: 90vw;\n}\na-map svg text {\n pointer-events: none;\n}\na-map .zooming [id^=chair] {\n display: none;\n}\n.map-outlet {\n position: absolute !important;\n}\nlabel.mat-checkbox-layout, label.mat-radio-label {\n white-space: normal;\n}\n.tag .multiroom {\n border-radius: 4px;\n padding: 2px 13px;\n max-height: 24px;\n background-color: #FFD048;\n}\n.tag .merged {\n background-color: #d32f2f;\n color: #FFFFFF !important;\n}\n/*\n Flex box layout common classes\n*/\n.flex-row {\n height: 100%;\n flex-direction: row;\n box-sizing: border-box;\n display: flex;\n place-content: center flex-start;\n align-items: center;\n}\n.flex-column {\n height: 100%;\n flex-direction: column;\n box-sizing: border-box;\n display: flex;\n place-content: stretch flex-start;\n align-items: stretch;\n max-width: 100%;\n}\n.flex-center {\n display: flex;\n place-content: center;\n align-items: center;\n}\n.flex-row-end {\n place-content: center flex-end;\n}\n.flex-grow {\n flex: 1;\n}\n.flex-space-between {\n place-content: space-between;\n}\n/*\n ^^^ Flex box layout common classes ^^^\n*/\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvc3R5bGVzL2N1c3RvbS1lbGVtZW50LnN0eWxlcy5zY3NzIiwiYXBwcy9zdGFmZi9zcmMvYXBwL3N0eWxlcy9jdXN0b20tZWxlbWVudC5zdHlsZXMuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FBMURBOzswQkFBQTtBQVFBOzswQkFBQTtBQWtDQTs7Y0FBQTtBQWdCQTs7c0JBQUE7QUM1Q0E7O3NCQUFBO0FDWEE7RUFDSSxrQkFBQTtBQ3lCSjtBRHZCSTtFQUNJLFdBQUE7QUN5QlI7QURyQkE7RUFDSSxrQkFBQTtBQ3dCSjtBRHBCSTtFQUNJLFdBQUE7QUN1QlI7QURuQkE7O0VBRUkseUJGS1k7RUVKWix5QkFBQTtFQUNBLFdGWlM7QUdrQ2I7QURwQkk7O0VBQ0ksc0JBQUE7RUFDQSxjRkRRO0FHd0JoQjtBRHBCSTs7RUFDSSx5QkZsQkU7RUVtQkYscUJGbkJFO0FHMENWO0FEcEJJOztFQUNJLHNCQUFBO0VBQ0Esb0JBQUE7RUFDQSxrQkFBQTtBQ3VCUjtBRG5CQTtFQUNJLGFBQUE7RUFDQSxtQkFBQTtFQUNBLHVCQUFBO0VBQ0EsV0FBQTtFQUNBLFVBQUE7RUFDQSxjQUFBO0FDc0JKO0FEcEJJO0VBQ0ksYUFBQTtFQUNBLG1CQUFBO0VBQ0EsdUJBQUE7QUNzQlI7QURuQkk7RUFDSSxnQkFBQTtBQ3FCUjtBRGhCSTtFQUNJLFlBQUE7QUNtQlI7QURkSTtFQUNJLGVBQUE7QUNpQlI7QURkSTtFQUNJLGNBQUE7QUNnQlI7QURiSTtFQUNJLGVBQUE7QUNlUjtBRFhBO0VBQ0ksb0NBQUE7QUNjSjtBRFhBO0VBQ0ksVUFBQTtFQUNBLGlCQUFBO0VBQ0EsZ0JBQUE7QUNjSjtBRFpJO0VBQ0ksY0FBQTtBQ2NSO0FEWEk7RUFDSSxTQUFBO0VBQ0EsVUFBQTtFQUNBLGdCQUFBO0FDYVI7QURaUTtFQUNJLGdCQUFBO0FDY1o7QUYvRlE7RUM0RUo7SUFRUSxpQkFBQTtJQUNBLFlBQUE7SUFDQSxZQUFBO0VDZVY7RURkVTtJQUNJLFlBQUE7SUFDQSxXQUFBO0VDZ0JkO0FBQ0Y7QUZ2R1E7RUN5RUo7SUFRUSxpQkFBQTtJQUNBLFlBQUE7SUFDQSxZQUFBO0VDMEJWO0VEekJVO0lBQ0ksWUFBQTtJQUNBLFdBQUE7RUMyQmQ7QUFDRjtBRHZCSTtFQUNJLGFBQUE7RUFDQSxtQkFBQTtFQUNBLGtCQUFBO0VBQ0EsV0FBQTtFQUNBLHlCRi9FUTtFRWdGUixXRjNHSztBR29JYjtBRHZCUTtFQUNJLE9BQUE7RUFDQSxjQUFBO0FDeUJaO0FEdEJRO0VBQ0ksU0FBQTtBQ3dCWjtBRHBCSTtFQUNJLFlBQUE7RUFDQSxvQkFBQTtFQUNBLHFCQUFBO0FDc0JSO0FEaEJRO0VBQ0ksY0ZsSEk7QUdxSWhCO0FEZFE7RUFDSSxVQUFBO0FDZ0JaO0FEYlE7RUFDSSxzQkFBQTtFRC9JUixpSEFBQTtFQ2lKUSxrQkFBQTtBQ2VaO0FEVlE7RUFDSSxzQkFBQTtFQUNBLGNBQUE7QUNZWjtBRFBRO0VBQ0ksMEJBQUE7RUFDQSxjQUFBO0FDU1o7QURQUTtFQUNJLDBCQUFBO0FDU1o7QURIQTtFQUNJLGdCQUFBO0FDTUo7QURBWTtFQUNJLGNGN0pBO0FHZ0toQjtBREtRO0VBQ0ksZUFBQTtBQ0ZaO0FEUUk7RUFDSSxnQkFBQTtFQUNBLFlBQUE7QUNMUjtBRFVJO0VBQ0kseUJGak1FO0VFa01GLFdBQUE7QUNQUjtBRFNJO0VBQ0kseUJGaE1FO0VFaU1GLFdBQUE7QUNQUjtBRFNJO0VBQ0kseUJGaE1BO0VFaU1BLFdBQUE7QUNQUjtBRFNJO0VBQ0kseUJGNUxVO0VFNkxWLFdBQUE7QUNQUjtBRFlJO0VBQ0kseUJGdk1RO0VFd01SLFdBQUE7QUNUUjtBRFdJO0VBQ0kseUJGbk5FO0FHME1WO0FEY0k7RUFDSSxlRmpOUTtBR3NNaEI7QURnQkk7RUFDSSx5QkZ2TlE7QUcwTWhCO0FEaUJBO0VBQ0kscUJBQUE7QUNkSjtBRGlCQTtFQUNJLDRCQUFBO0VBQ0EsZ0JBQUE7QUNkSjtBRGdCSTtFQUNJLHlCQUFBO0FDZFI7QURtQkk7RUFDSSxvQkFBQTtBQ2hCUjtBRHFCSTtFQUNJLG9CQUFBO0FDbEJSO0FEc0JBO0VBQ0ksZUFBQTtBQ25CSjtBRHdCUTtFQUNJLG9CQUFBO0FDckJaO0FEMEJRO0VBQ0ksYUFBQTtBQ3hCWjtBRDZCQTtFQUNJLDZCQUFBO0FDMUJKO0FEOEJJO0VBRUksbUJBQUE7QUM1QlI7QURrQ0k7RUFDSSxrQkFBQTtFQUNBLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSx5QkFBQTtBQy9CUjtBRGtDSTtFQUNJLHlCQUFBO0VBQ0EseUJBQUE7QUNoQ1I7QURzQ0E7O0NBQUE7QUFHQTtFQUNJLFlBQUE7RUFDQSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0EsYUFBQTtFQUNBLGdDQUFBO0VBQ0EsbUJBQUE7QUNuQ0o7QURzQ0E7RUFDSSxZQUFBO0VBQ0Esc0JBQUE7RUFDQSxzQkFBQTtFQUNBLGFBQUE7RUFDQSxpQ0FBQTtFQUNBLG9CQUFBO0VBQ0EsZUFBQTtBQ25DSjtBRHNDQTtFQUNJLGFBQUE7RUFDQSxxQkFBQTtFQUNBLG1CQUFBO0FDbkNKO0FEc0NBO0VBQ0ksOEJBQUE7QUNuQ0o7QURzQ0E7RUFDSSxPQUFBO0FDbkNKO0FEc0NBO0VBQ0ksNEJBQUE7QUNuQ0o7QURxQ0E7O0NBQUEiLCJmaWxlIjoiYXBwcy9zdGFmZi9zcmMvYXBwL3N0eWxlcy9jdXN0b20tZWxlbWVudC5zdHlsZXMuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGNvbG9yLWJyYW5kLWVsZWN0cmljLWJsdWU6ICMyMjUxZmY7XG4kY29sb3ItYnJhbmQtZGVlcC1ibHVlOiAjMDUxYzJjO1xuJGNvbG9yLWJyYW5kLWN5YW46ICMwMGE5ZjQ7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kZm9udC1kYXJrOiAjMDAwO1xuJGZvbnQtbGlnaHQ6ICNmZmY7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuJGdyZWVuMTogIzIxOTY1MztcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2xvci1wcmltYXJ5OiAjMTkzN2VhO1xuJGNvbG9yLXByaW1hcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcbiRjb2xvci1wcmltYXJ5LWRhcms6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuXG4kY29sb3Itc2Vjb25kYXJ5OiAjNDI4NUY0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodDogbGlnaHRlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG4kY29sb3Itc2Vjb25kYXJ5LWRhcms6IGRhcmtlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG5cbiRiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuJGZvb3Rlci1iYWNrOiAjMjYzMjM4O1xuJGhlYWRlci1iYWNrOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNTFDMkMsICMwNTFDMkMgNDAlLCAjMEIyNDUzIDYwJSwgIzFGNDBFNiAxMDAlKTtcblxuJGNvbG9yLXRlcm5hcnk6ICMwNTFjMmM7XG5cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuXG4kZm9udC1zdGFjazogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiRoZWFkaW5nLWZvbnQ6IFwiTGFyaXNoTWNLaW5zZXlcIiwgJ0dlb3JnaWEnLCBzZXJpZjtcbiRmb250OiAkZm9udC1zdGFjaztcblxuJGZvbnQtZmFtaWx5LXByaW1hcnk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LXNlY29uZGFyeTogXCJCb3dlclwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiIHNlcmlmO1xuXG4kYmFzZS1zaXplOiAxNnB4O1xuJHRhYmxldC1zaXplOiAxNnB4O1xuJG1vYmlsZS1zaXplOiAxNnB4O1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGJyZWFrLW1vYmlsZTogNDUwcHg7XG4kYnJlYWstdGFibGV0OiA4MDBweDtcbiRicmVhay1sYXB0b3A6IDEwMjRweDtcblxuJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGU6IDgwMHB4O1xuJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQ6IDEwNDhweDtcbiRicmVhay1sYW5kc2NhcGUtbGFwdG9wOiAxMjgwcHg7XG4iLCJAaW1wb3J0ICcuL3ZhcmlhYmxlcyc7XG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuQG1peGluIGJveC1zaGFkb3coJGNvbG9yOiAjMDAwLCAkZGVwdGg6IDEpIHtcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMXB4ICogKCRkZXB0aCAtIDEpIHJnYmEoIzAwMCwgLjIpLFxuICAgICAgICAgICAgICAgIDAgMXB4IDFweCAwIHJnYmEoIzAwMCwgLjE0KSxcbiAgICAgICAgICAgICAgICAwIDJweCAxcHggLTFweCByZ2JhKCMwMDAsIC4xMik7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG5AbWl4aW4gcmVzcG9uZC10bygkbWVkaWEpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gIEBlbHNlIGlmICRtZWRpYSA9PSBsYXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1AZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQGltcG9ydCAndmFyaWFibGVzJztcbkBpbXBvcnQgJ21peGlucyc7XG5cbi5kcm9wZG93blt3aWRnZXRdIHtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG5cbiAgICAmLmZpbGwge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG59XG5cbi5kcm9wZG93bi1saXN0W3dpZGdldF0ge1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cblxuLnNwaW5uZXIge1xuICAgIHN2ZyB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbn1cblxuYnV0dG9uLm1hdC1idXR0b24sXG5hW2J1dHRvbl0ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci1wcmltYXJ5O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRjb2xvci1wcmltYXJ5O1xuICAgIGNvbG9yOiAkZm9udC1saWdodDtcblxuICAgICYuaW52ZXJzZSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItcHJpbWFyeTtcbiAgICB9XG5cbiAgICAmLnN1Y2Nlc3Mge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc3VjY2VzcztcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkc3VjY2VzcztcbiAgICB9XG5cbiAgICAmW2Rpc2FibGVkXSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNDQ0M7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICBib3JkZXItY29sb3I6ICNBQUE7XG4gICAgfVxufVxuXG4ubWF0LWljb24tYnV0dG9uIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgaGVpZ2h0OiAyZW07XG4gICAgd2lkdGg6IDJlbTtcbiAgICBmb250LXNpemU6IDFlbTtcblxuICAgIC5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICB9XG5cbiAgICBhcHAtaWNvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41ZW07XG4gICAgfVxufVxuXG4uZHJvcGRvd25bd2lkZ2V0XSB7XG4gICAgJi5kZWZhdWx0IHtcbiAgICAgICAgd2lkdGg6IDkuNWVtO1xuICAgIH1cbn1cblxuLmR5bmFtaWMtZmllbGRbd2lkZ2V0XSB7XG4gICAgLmRldGFpbHMge1xuICAgICAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgfVxuXG4gICAgbGFiZWwge1xuICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICB9XG5cbiAgICAuY29udHJvbCB7XG4gICAgICAgIG1pbi13aWR0aDogMTBlbTtcbiAgICB9XG59XG5cbi5vdmVybGF5LWJhY2tkcm9wIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCMwMDAsIDAuNik7XG59XG5cbm1hdC1kaWFsb2ctY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG5cbiAgICAubWF0LWRpYWxvZy1hY3Rpb25zIHtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgfVxuXG4gICAgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgbWF4LWhlaWdodDogOTN2aDtcbiAgICAgICAgJi5wYWNrYWdlLW9wdGlvbnMge1xuICAgICAgICAgICAgbWF4LWhlaWdodDogODV2aDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgICAgICAgICB3aWR0aDogMTAwdnc7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICAmLmNhbmNlbC1kaWFsb2ctY29udGVudCwgJi5ib29raW5nLWR1cmF0aW9uLWNvbnRlbnQge1xuICAgICAgICAgICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgICAgICAgICB3aWR0aDogYXV0bztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhlYWRlciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIHBhZGRpbmc6IC41ZW0gMWVtO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXRlcm5hcnk7XG4gICAgICAgIGNvbG9yOiAkZm9udC1saWdodDtcblxuICAgICAgICBoMSwgaDIsIGgzLCBoNCB7XG4gICAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgICAgbWluLXdpZHRoOiA1MCU7XG4gICAgICAgIH1cblxuICAgICAgICA+ICoge1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmJvZHkge1xuICAgICAgICBwYWRkaW5nOiAxZW07XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuIGF1dG87XG4gICAgfVxufVxuXG5tYXQtZm9ybS1maWVsZCB7XG4gICAgJi5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQge1xuICAgICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayB7XG4gICAgICAgICAgICBjb2xvcjogJGNvbG9yLXByaW1hcnk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLm1hcCB7XG4gICAgICAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIH1cblxuICAgICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgICAgICAgICAgQGluY2x1ZGUgYm94LXNoYWRvdztcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYuZGVzayB7XG4gICAgICAgIC5tYXQtZm9ybS1maWVsZC1mbGV4IHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgICAgICAgICBwYWRkaW5nOiAwLjNlbVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi5yb3VuZGVkIHtcbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQge1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMmVtIDAgMCAyZW07XG4gICAgICAgICAgICBtaW4td2lkdGg6IDJlbTtcbiAgICAgICAgfVxuICAgICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAyZW0gMmVtIDA7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICBib3JkZXItdG9wOiBub25lO1xufVxuXG4ubWF0LXNlbGVjdC1wYW5lbCB7XG4gICAgLm1hdC1vcHRpb24ge1xuICAgICAgICAmLm1hdC1zZWxlY3RlZCB7XG4gICAgICAgICAgICAmOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkY29sb3ItcHJpbWFyeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxubWF0LXNlbGVjdCB7XG4gICAgLm1hdC1zZWxlY3QtdHJpZ2dlciB7XG4gICAgICAgIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXIge1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBub25lO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4ubWF0LXNpbXBsZS1zbmFja2JhciB7XG4gICAgYnV0dG9uLm1hdC1idXR0b24ge1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgfVxufVxuXG4ubWF0LXNuYWNrLWJhci1jb250YWluZXIge1xuICAgICYuc3VjY2VzcyB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzdWNjZXNzO1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICB9XG4gICAgJi53YXJuIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHBlbmRpbmc7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgIH1cbiAgICAmLmVycm9yIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGVycm9yO1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICB9XG4gICAgJi5pbmZvIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXNlY29uZGFyeTtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgfVxufVxuXG4ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAge1xuICAgICYubWF0LXByaW1hcnkge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3ItcHJpbWFyeTtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgfVxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwZW5kaW5nO1xuICAgIH1cbn1cblxuLm1hdC1zcGlubmVyIHtcbiAgICBjaXJjbGUge1xuICAgICAgICBzdHJva2U6ICRjb2xvci1wcmltYXJ5O1xuICAgIH1cbn1cblxuLm1hdC1wcm9ncmVzcy1iYXItZmlsbCB7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3ItcHJpbWFyeTtcbiAgICB9XG59XG5cbi5tYXQtdG9vbHRpcCB7XG4gICAgd2hpdGUtc3BhY2U6IHByZS1saW5lO1xufVxuXG5kaXYubWF0LW1lbnUtcGFuZWwge1xuICAgIG1heC13aWR0aDogY2FsYygxMDB2dyAtIDFlbSk7XG4gICAgbWF4LWhlaWdodDogNjV2aDtcblxuICAgICYuZGFyay1tb2RlIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzM2MzYzNjtcbiAgICB9XG59XG5cbm1hdC1yYWRpby1idXR0b24ge1xuICAgIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudCB7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBpbml0aWFsO1xuICAgIH1cbn1cblxubWF0LWNoZWNrYm94IHtcbiAgICAubWF0LWNoZWNrYm94LWxhYmVsLWNvbnRlbnQge1xuICAgICAgICB3aGl0ZS1zcGFjZTogaW5pdGlhbDtcbiAgICB9XG59XG5cbmRpdi5tYXQtc2VsZWN0LXBhbmVsIHtcbiAgICBtYXgtd2lkdGg6IDkwdnc7XG59XG5cbmEtbWFwIHtcbiAgICBzdmcge1xuICAgICAgICB0ZXh0IHtcbiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLnpvb21pbmcge1xuICAgICAgICBbaWRePVwiY2hhaXJcIl0ge1xuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLm1hcC1vdXRsZXQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O1xufVxuXG5sYWJlbCB7XG4gICAgJi5tYXQtY2hlY2tib3gtbGF5b3V0LFxuICAgICYubWF0LXJhZGlvLWxhYmVsIHtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgICB9XG59XG5cbi50YWd7XG4gICAgXG4gICAgLm11bHRpcm9vbSB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgcGFkZGluZzogMnB4IDEzcHg7XG4gICAgICAgIG1heC1oZWlnaHQ6IDI0cHg7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkQwNDg7XG4gICAgICAgIFxuICAgIH1cbiAgICAubWVyZ2VkIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2QzMmYyZjtcbiAgICAgICAgY29sb3I6ICNGRkZGRkYgIWltcG9ydGFudDtcbiAgICB9XG59XG5cblxuXG4vKlxuICAgIEZsZXggYm94IGxheW91dCBjb21tb24gY2xhc3Nlc1xuKi9cbi5mbGV4LXJvdyB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBsYWNlLWNvbnRlbnQ6IGNlbnRlciBmbGV4LXN0YXJ0O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbn1cbi5mbGV4LWNvbHVtbiB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBsYWNlLWNvbnRlbnQ6IHN0cmV0Y2ggZmxleC1zdGFydDtcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG59XG5cbi5mbGV4LWNlbnRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwbGFjZS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLmZsZXgtcm93LWVuZCB7XG4gICAgcGxhY2UtY29udGVudDogY2VudGVyIGZsZXgtZW5kO1xufVxuXG4uZmxleC1ncm93IHtcbiAgICBmbGV4OiAxO1xufVxuXG4uZmxleC1zcGFjZS1iZXR3ZWVuIHtcbiAgICBwbGFjZS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuLypcbiAgIF5eXiBGbGV4IGJveCBsYXlvdXQgY29tbW9uIGNsYXNzZXMgXl5eXG4qLyIsIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLmRyb3Bkb3duW3dpZGdldF0ge1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG4uZHJvcGRvd25bd2lkZ2V0XS5maWxsIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5kcm9wZG93bi1saXN0W3dpZGdldF0ge1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG5cbi5zcGlubmVyIHN2ZyB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG5idXR0b24ubWF0LWJ1dHRvbixcbmFbYnV0dG9uXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxOTM3ZWE7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMxOTM3ZWE7XG4gIGNvbG9yOiAjZmZmO1xufVxuYnV0dG9uLm1hdC1idXR0b24uaW52ZXJzZSxcbmFbYnV0dG9uXS5pbnZlcnNlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgY29sb3I6ICMxOTM3ZWE7XG59XG5idXR0b24ubWF0LWJ1dHRvbi5zdWNjZXNzLFxuYVtidXR0b25dLnN1Y2Nlc3Mge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDNhMDQ3O1xuICBib3JkZXItY29sb3I6ICM0M2EwNDc7XG59XG5idXR0b24ubWF0LWJ1dHRvbltkaXNhYmxlZF0sXG5hW2J1dHRvbl1bZGlzYWJsZWRdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0NDQztcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIGJvcmRlci1jb2xvcjogI0FBQTtcbn1cblxuLm1hdC1pY29uLWJ1dHRvbiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBoZWlnaHQ6IDJlbTtcbiAgd2lkdGg6IDJlbTtcbiAgZm9udC1zaXplOiAxZW07XG59XG4ubWF0LWljb24tYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cbi5tYXQtaWNvbi1idXR0b24gYXBwLWljb24ge1xuICBmb250LXNpemU6IDEuNWVtO1xufVxuXG4uZHJvcGRvd25bd2lkZ2V0XS5kZWZhdWx0IHtcbiAgd2lkdGg6IDkuNWVtO1xufVxuXG4uZHluYW1pYy1maWVsZFt3aWRnZXRdIC5kZXRhaWxzIHtcbiAgbWluLXdpZHRoOiAxMDAlO1xufVxuLmR5bmFtaWMtZmllbGRbd2lkZ2V0XSBsYWJlbCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLmR5bmFtaWMtZmllbGRbd2lkZ2V0XSAuY29udHJvbCB7XG4gIG1pbi13aWR0aDogMTBlbTtcbn1cblxuLm92ZXJsYXktYmFja2Ryb3Age1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNik7XG59XG5cbm1hdC1kaWFsb2ctY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgcGFkZGluZzogMDtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG5tYXQtZGlhbG9nLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRhaW5lciAubWF0LWRpYWxvZy1hY3Rpb25zIHtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG5tYXQtZGlhbG9nLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRhaW5lciAubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBtYXgtaGVpZ2h0OiA5M3ZoO1xufVxubWF0LWRpYWxvZy1jb250YWluZXIubWF0LWRpYWxvZy1jb250YWluZXIgLm1hdC1kaWFsb2ctY29udGVudC5wYWNrYWdlLW9wdGlvbnMge1xuICBtYXgtaGVpZ2h0OiA4NXZoO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgbWF0LWRpYWxvZy1jb250YWluZXIubWF0LWRpYWxvZy1jb250YWluZXIgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgfVxuICBtYXQtZGlhbG9nLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRhaW5lciAubWF0LWRpYWxvZy1jb250ZW50LmNhbmNlbC1kaWFsb2ctY29udGVudCwgbWF0LWRpYWxvZy1jb250YWluZXIubWF0LWRpYWxvZy1jb250YWluZXIgLm1hdC1kaWFsb2ctY29udGVudC5ib29raW5nLWR1cmF0aW9uLWNvbnRlbnQge1xuICAgIGhlaWdodDogYXV0bztcbiAgICB3aWR0aDogYXV0bztcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIG1hdC1kaWFsb2ctY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGFpbmVyIC5tYXQtZGlhbG9nLWNvbnRlbnQge1xuICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gIH1cbiAgbWF0LWRpYWxvZy1jb250YWluZXIubWF0LWRpYWxvZy1jb250YWluZXIgLm1hdC1kaWFsb2ctY29udGVudC5jYW5jZWwtZGlhbG9nLWNvbnRlbnQsIG1hdC1kaWFsb2ctY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGFpbmVyIC5tYXQtZGlhbG9nLWNvbnRlbnQuYm9va2luZy1kdXJhdGlvbi1jb250ZW50IHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgd2lkdGg6IGF1dG87XG4gIH1cbn1cbm1hdC1kaWFsb2ctY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGFpbmVyIGhlYWRlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDAuNWVtIDFlbTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwNTFjMmM7XG4gIGNvbG9yOiAjZmZmO1xufVxubWF0LWRpYWxvZy1jb250YWluZXIubWF0LWRpYWxvZy1jb250YWluZXIgaGVhZGVyIGgxLCBtYXQtZGlhbG9nLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRhaW5lciBoZWFkZXIgaDIsIG1hdC1kaWFsb2ctY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGFpbmVyIGhlYWRlciBoMywgbWF0LWRpYWxvZy1jb250YWluZXIubWF0LWRpYWxvZy1jb250YWluZXIgaGVhZGVyIGg0IHtcbiAgZmxleDogMTtcbiAgbWluLXdpZHRoOiA1MCU7XG59XG5tYXQtZGlhbG9nLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRhaW5lciBoZWFkZXIgPiAqIHtcbiAgbWFyZ2luOiAwO1xufVxubWF0LWRpYWxvZy1jb250YWluZXIubWF0LWRpYWxvZy1jb250YWluZXIgLmJvZHkge1xuICBwYWRkaW5nOiAxZW07XG4gIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICBvdmVyZmxvdzogaGlkZGVuIGF1dG87XG59XG5cbm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayB7XG4gIGNvbG9yOiAjMTkzN2VhO1xufVxubWF0LWZvcm0tZmllbGQubWFwIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgcGFkZGluZzogMDtcbn1cbm1hdC1mb3JtLWZpZWxkLm1hcCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJveC1zaGFkb3c6IDAgMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwIDFweCAxcHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG5tYXQtZm9ybS1maWVsZC5kZXNrIC5tYXQtZm9ybS1maWVsZC1mbGV4IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgcGFkZGluZzogMC4zZW07XG59XG5tYXQtZm9ybS1maWVsZC5yb3VuZGVkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0IHtcbiAgYm9yZGVyLXJhZGl1czogMmVtIDAgMCAyZW07XG4gIG1pbi13aWR0aDogMmVtO1xufVxubWF0LWZvcm0tZmllbGQucm91bmRlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICBib3JkZXItcmFkaXVzOiAwIDJlbSAyZW0gMDtcbn1cblxuLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgYm9yZGVyLXRvcDogbm9uZTtcbn1cblxuLm1hdC1zZWxlY3QtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICBjb2xvcjogIzE5MzdlYTtcbn1cblxubWF0LXNlbGVjdCAubWF0LXNlbGVjdC10cmlnZ2VyIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXIge1xuICB0cmFuc2Zvcm06IG5vbmU7XG59XG5cbi5tYXQtc2ltcGxlLXNuYWNrYmFyIGJ1dHRvbi5tYXQtYnV0dG9uIHtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgYm9yZGVyOiBub25lO1xufVxuXG4ubWF0LXNuYWNrLWJhci1jb250YWluZXIuc3VjY2VzcyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0M2EwNDc7XG4gIGNvbG9yOiAjZmZmO1xufVxuLm1hdC1zbmFjay1iYXItY29udGFpbmVyLndhcm4ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZiMzAwO1xuICBjb2xvcjogI2ZmZjtcbn1cbi5tYXQtc25hY2stYmFyLWNvbnRhaW5lci5lcnJvciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlNTM5MzU7XG4gIGNvbG9yOiAjZmZmO1xufVxuLm1hdC1zbmFjay1iYXItY29udGFpbmVyLmluZm8ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDI4NUY0O1xuICBjb2xvcjogI2ZmZjtcbn1cblxuLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1wcmltYXJ5IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE5MzdlYTtcbiAgY29sb3I6ICNmZmY7XG59XG4ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWFjY2VudCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmIzMDA7XG59XG5cbi5tYXQtc3Bpbm5lciBjaXJjbGUge1xuICBzdHJva2U6ICMxOTM3ZWE7XG59XG5cbi5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE5MzdlYTtcbn1cblxuLm1hdC10b29sdGlwIHtcbiAgd2hpdGUtc3BhY2U6IHByZS1saW5lO1xufVxuXG5kaXYubWF0LW1lbnUtcGFuZWwge1xuICBtYXgtd2lkdGg6IGNhbGMoMTAwdncgLSAxZW0pO1xuICBtYXgtaGVpZ2h0OiA2NXZoO1xufVxuZGl2Lm1hdC1tZW51LXBhbmVsLmRhcmstbW9kZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzNjM2MzY7XG59XG5cbm1hdC1yYWRpby1idXR0b24gLm1hdC1yYWRpby1sYWJlbC1jb250ZW50IHtcbiAgd2hpdGUtc3BhY2U6IGluaXRpYWw7XG59XG5cbm1hdC1jaGVja2JveCAubWF0LWNoZWNrYm94LWxhYmVsLWNvbnRlbnQge1xuICB3aGl0ZS1zcGFjZTogaW5pdGlhbDtcbn1cblxuZGl2Lm1hdC1zZWxlY3QtcGFuZWwge1xuICBtYXgtd2lkdGg6IDkwdnc7XG59XG5cbmEtbWFwIHN2ZyB0ZXh0IHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5hLW1hcCAuem9vbWluZyBbaWRePWNoYWlyXSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5tYXAtb3V0bGV0IHtcbiAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XG59XG5cbmxhYmVsLm1hdC1jaGVja2JveC1sYXlvdXQsIGxhYmVsLm1hdC1yYWRpby1sYWJlbCB7XG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG59XG5cbi50YWcgLm11bHRpcm9vbSB7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgcGFkZGluZzogMnB4IDEzcHg7XG4gIG1heC1oZWlnaHQ6IDI0cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGRkQwNDg7XG59XG4udGFnIC5tZXJnZWQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDMyZjJmO1xuICBjb2xvcjogI0ZGRkZGRiAhaW1wb3J0YW50O1xufVxuXG4vKlxuICAgIEZsZXggYm94IGxheW91dCBjb21tb24gY2xhc3Nlc1xuKi9cbi5mbGV4LXJvdyB7XG4gIGhlaWdodDogMTAwJTtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgcGxhY2UtY29udGVudDogY2VudGVyIGZsZXgtc3RhcnQ7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5mbGV4LWNvbHVtbiB7XG4gIGhlaWdodDogMTAwJTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgcGxhY2UtY29udGVudDogc3RyZXRjaCBmbGV4LXN0YXJ0O1xuICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgbWF4LXdpZHRoOiAxMDAlO1xufVxuXG4uZmxleC1jZW50ZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBwbGFjZS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5mbGV4LXJvdy1lbmQge1xuICBwbGFjZS1jb250ZW50OiBjZW50ZXIgZmxleC1lbmQ7XG59XG5cbi5mbGV4LWdyb3cge1xuICBmbGV4OiAxO1xufVxuXG4uZmxleC1zcGFjZS1iZXR3ZWVuIHtcbiAgcGxhY2UtY29udGVudDogc3BhY2UtYmV0d2Vlbjtcbn1cblxuLypcbiAgIF5eXiBGbGV4IGJveCBsYXlvdXQgY29tbW9uIGNsYXNzZXMgXl5eXG4qLyJdfQ== */", "/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\ninput,\ntextarea {\n -webkit-user-select: text;\n -moz-user-select: text;\n user-select: text;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvYXBwcy9zdGFmZi9zcmMvYXBwL3N0eWxlcy9uYXRpdmUtZWxlbWVudC5zdHlsZXMuc2NzcyIsImFwcHMvc3RhZmYvc3JjL2FwcC9zdHlsZXMvbmF0aXZlLWVsZW1lbnQuc3R5bGVzLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQ3ZEQTs7RUFFSSx5QkFBQTtLQUFBLHNCQUFBO1VBQUEsaUJBQUE7QUNVSiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvc3R5bGVzL25hdGl2ZS1lbGVtZW50LnN0eWxlcy5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kY29sb3ItYnJhbmQtZWxlY3RyaWMtYmx1ZTogIzIyNTFmZjtcbiRjb2xvci1icmFuZC1kZWVwLWJsdWU6ICMwNTFjMmM7XG4kY29sb3ItYnJhbmQtY3lhbjogIzAwYTlmNDtcblxuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRmb250LWRhcms6ICMwMDA7XG4kZm9udC1saWdodDogI2ZmZjtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG4kZ3JlZW4xOiAjMjE5NjUzO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvbG9yLXByaW1hcnk6ICMxOTM3ZWE7XG4kY29sb3ItcHJpbWFyeS1saWdodDogbGlnaHRlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuJGNvbG9yLXByaW1hcnktZGFyazogZGFya2VuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG5cbiRjb2xvci1zZWNvbmRhcnk6ICM0Mjg1RjQ7XG4kY29sb3Itc2Vjb25kYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcbiRjb2xvci1zZWNvbmRhcnktZGFyazogZGFya2VuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcblxuJGJhY2tncm91bmQ6ICNmMGYwZjA7XG4kZm9vdGVyLWJhY2s6ICMyNjMyMzg7XG4kaGVhZGVyLWJhY2s6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzA1MUMyQywgIzA1MUMyQyA0MCUsICMwQjI0NTMgNjAlLCAjMUY0MEU2IDEwMCUpO1xuXG4kY29sb3ItdGVybmFyeTogIzA1MWMyYztcblxuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG5cbiRmb250LXN0YWNrOiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcblxuJGhlYWRpbmctZm9udDogXCJMYXJpc2hNY0tpbnNleVwiLCAnR2VvcmdpYScsIHNlcmlmO1xuJGZvbnQ6ICRmb250LXN0YWNrO1xuXG4kZm9udC1mYW1pbHktcHJpbWFyeTogXCJNY0tpbnNleSBTYW5zXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQ2FsaWJyaSwgQ29yYmVsLCBIZWx2ZXRpY2EsIFJvYm90bywgRHJvaWQsIHNhbnMtc2VyaWY7XG4kZm9udC1mYW1pbHktc2Vjb25kYXJ5OiBcIkJvd2VyXCIsIEdlb3JnaWEsIFwiVGltZXMgTmV3IFJvbWFuXCIgc2VyaWY7XG5cbiRiYXNlLXNpemU6IDE2cHg7XG4kdGFibGV0LXNpemU6IDE2cHg7XG4kbW9iaWxlLXNpemU6IDE2cHg7XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kYnJlYWstbW9iaWxlOiA0NTBweDtcbiRicmVhay10YWJsZXQ6IDgwMHB4O1xuJGJyZWFrLWxhcHRvcDogMTAyNHB4O1xuXG4kYnJlYWstbGFuZHNjYXBlLW1vYmlsZTogODAwcHg7XG4kYnJlYWstbGFuZHNjYXBlLXRhYmxldDogMTA0OHB4O1xuJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3A6IDEyODBweDtcbiIsIlxuQGltcG9ydCAndmFyaWFibGVzJztcblxuaW5wdXQsXG50ZXh0YXJlYSB7XG4gICAgdXNlci1zZWxlY3Q6IHRleHQ7XG59XG4iLCIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5pbnB1dCxcbnRleHRhcmVhIHtcbiAgdXNlci1zZWxlY3Q6IHRleHQ7XG59Il19 */"], encapsulation: 2 }); /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(AppComponent, [{ type: core_1.Component, args: [{ @@ -28881,14 +29290,16 @@ const base_1 = __webpack_require__(/*! @mckinsey-converge/base */ "../../libs/ba const urls_1 = __webpack_require__(/*! ../../utilities/urls */ "./src/app/utilities/urls.ts"); const store_1 = __webpack_require__(/*! @ngrx/store */ "../../node_modules/@ngrx/store/__ivy_ngcc__/fesm2015/ngrx-store.js"); const data_common_1 = __webpack_require__(/*! @mckinsey-converge/data-common */ "../../libs/data-common/src/index.ts"); +const date_tz_1 = __webpack_require__(/*! @mckinsey-converge/date-tz */ "../../libs/date-tz/src/index.ts"); const i0 = __webpack_require__(/*! @angular/core */ "../../node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); const i1 = __webpack_require__(/*! @ngrx/store */ "../../node_modules/@ngrx/store/__ivy_ngcc__/fesm2015/ngrx-store.js"); const i2 = __webpack_require__(/*! @angular/router */ "../../node_modules/@angular/router/__ivy_ngcc__/fesm2015/router.js"); const i3 = __webpack_require__(/*! @angular/common */ "../../node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js"); const i4 = __webpack_require__(/*! ../../components/topbar-header/topbar-header.component */ "./src/app/components/topbar-header/topbar-header.component.ts"); const i5 = __webpack_require__(/*! ngx-skeleton-loader */ "../../node_modules/ngx-skeleton-loader/__ivy_ngcc__/fesm2015/ngx-skeleton-loader.js"); -const i6 = __webpack_require__(/*! @angular/material/button */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/button.js"); -const i7 = __webpack_require__(/*! ../catering/order-table/order-table.component */ "./src/app/booking/catering/order-table/order-table.component.ts"); +const i6 = __webpack_require__(/*! ../../../../../../libs/ui/src/lib/tooltip/tooltip.directive */ "../../libs/ui/src/lib/tooltip/tooltip.directive.ts"); +const i7 = __webpack_require__(/*! @angular/material/button */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/button.js"); +const i8 = __webpack_require__(/*! ../catering/order-table/order-table.component */ "./src/app/booking/catering/order-table/order-table.component.ts"); function BookingConfirmationComponent_div_0_header_1_Template(rf, ctx) { if (rf & 1) { const _r16 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "header", 14); @@ -28976,10 +29387,10 @@ function BookingConfirmationComponent_div_0_ng_container_12_div_1_Template(rf, c i0.ɵɵadvance(2); i0.ɵɵtextInterpolate2("", ctx_r19.data == null ? null : ctx_r19.data.typeString, " meeting (", ctx_r19.data == null ? null : ctx_r19.data.durationString, ")"); } } -function BookingConfirmationComponent_div_0_ng_container_12_div_2_span_4_Template(rf, ctx) { if (rf & 1) { +function BookingConfirmationComponent_div_0_ng_container_12_div_2_span_5_Template(rf, ctx) { if (rf & 1) { const _r24 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "span", 23); - i0.ɵɵlistener("click", function BookingConfirmationComponent_div_0_ng_container_12_div_2_span_4_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r24); const ctx_r23 = i0.ɵɵnextContext(4); return ctx_r23.data == null ? null : ctx_r23.data.openRecurrenceConflictsModal(ctx_r23.booking == null ? null : ctx_r23.booking.room); }); + i0.ɵɵelementStart(0, "span", 24); + i0.ɵɵlistener("click", function BookingConfirmationComponent_div_0_ng_container_12_div_2_span_5_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r24); const ctx_r23 = i0.ɵɵnextContext(4); return ctx_r23.data == null ? null : ctx_r23.data.openRecurrenceConflictsModal(ctx_r23.booking == null ? null : ctx_r23.booking.room); }); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { @@ -28991,31 +29402,35 @@ function BookingConfirmationComponent_div_0_ng_container_12_div_2_span_4_Templat function BookingConfirmationComponent_div_0_ng_container_12_div_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 10); i0.ɵɵelementStart(1, "div", 21); - i0.ɵɵtext(2); - i0.ɵɵpipe(3, "titlecase"); - i0.ɵɵtemplate(4, BookingConfirmationComponent_div_0_ng_container_12_div_2_span_4_Template, 2, 1, "span", 22); + i0.ɵɵelementStart(2, "span", 22); + i0.ɵɵtext(3); + i0.ɵɵpipe(4, "titlecase"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(5, "div"); - i0.ɵɵtext(6); + i0.ɵɵtemplate(5, BookingConfirmationComponent_div_0_ng_container_12_div_2_span_5_Template, 2, 1, "span", 23); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(7, "div"); - i0.ɵɵtext(8); + i0.ɵɵelementStart(6, "div"); + i0.ɵɵtext(7); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(9, "div"); - i0.ɵɵtext(10); + i0.ɵɵelementStart(8, "div"); + i0.ɵɵtext(9); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(11, "div"); - i0.ɵɵtext(12); + i0.ɵɵelementStart(10, "div"); + i0.ɵɵtext(11); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(12, "div"); + i0.ɵɵtext(13); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r20 = i0.ɵɵnextContext(3); - var tmp_1_0 = null; - const currVal_1 = ctx_r20.data == null ? null : (tmp_1_0 = ctx_r20.data.isConflictWithOccurences()) == null ? null : tmp_1_0.is_conflict; + var tmp_2_0 = null; + const currVal_2 = ctx_r20.data == null ? null : (tmp_2_0 = ctx_r20.data.isConflictWithOccurences()) == null ? null : tmp_2_0.is_conflict; i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("", (ctx_r20.booking == null ? null : ctx_r20.booking.recurrence_period) === "list" ? "Specific dates" : i0.ɵɵpipeBind1(3, 7, ctx_r20.booking == null ? null : ctx_r20.booking.recurrence_period), " "); + i0.ɵɵproperty("tooltip", ctx_r20.getTooltipText()); + i0.ɵɵadvance(1); + i0.ɵɵtextInterpolate1(" ", (ctx_r20.booking == null ? null : ctx_r20.booking.recurrence_period) === "list" ? "Specific dates" : i0.ɵɵpipeBind1(4, 8, ctx_r20.booking == null ? null : ctx_r20.booking.recurrence_period), " "); i0.ɵɵadvance(2); - i0.ɵɵproperty("ngIf", currVal_1); + i0.ɵɵproperty("ngIf", currVal_2); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate1("Start date: ", ctx_r20.data == null ? null : ctx_r20.data.dateString, ""); i0.ɵɵadvance(2); @@ -29028,7 +29443,7 @@ function BookingConfirmationComponent_div_0_ng_container_12_div_2_Template(rf, c function BookingConfirmationComponent_div_0_ng_container_12_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); i0.ɵɵtemplate(1, BookingConfirmationComponent_div_0_ng_container_12_div_1_Template, 8, 5, "div", 18); - i0.ɵɵtemplate(2, BookingConfirmationComponent_div_0_ng_container_12_div_2_Template, 13, 9, "div", 18); + i0.ɵɵtemplate(2, BookingConfirmationComponent_div_0_ng_container_12_div_2_Template, 14, 10, "div", 18); i0.ɵɵelementContainerEnd(); } if (rf & 2) { const ctx_r5 = i0.ɵɵnextContext(2); @@ -29039,18 +29454,18 @@ function BookingConfirmationComponent_div_0_ng_container_12_Template(rf, ctx) { } } function BookingConfirmationComponent_div_0_ng_container_13_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); - i0.ɵɵelementStart(1, "div", 24); + i0.ɵɵelementStart(1, "div", 25); i0.ɵɵelementStart(2, "div"); - i0.ɵɵelement(3, "ngx-skeleton-loader", 25); + i0.ɵɵelement(3, "ngx-skeleton-loader", 26); i0.ɵɵelementEnd(); i0.ɵɵelementStart(4, "div"); - i0.ɵɵelement(5, "ngx-skeleton-loader", 26); + i0.ɵɵelement(5, "ngx-skeleton-loader", 27); i0.ɵɵelementEnd(); - i0.ɵɵelement(6, "div", 27); + i0.ɵɵelement(6, "div", 28); i0.ɵɵelementStart(7, "div"); - i0.ɵɵelement(8, "ngx-skeleton-loader", 28); - i0.ɵɵelement(9, "ngx-skeleton-loader", 29); - i0.ɵɵelement(10, "ngx-skeleton-loader", 28); + i0.ɵɵelement(8, "ngx-skeleton-loader", 29); + i0.ɵɵelement(9, "ngx-skeleton-loader", 30); + i0.ɵɵelement(10, "ngx-skeleton-loader", 29); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); i0.ɵɵelementContainerEnd(); @@ -29078,17 +29493,17 @@ function BookingConfirmationComponent_div_0_ng_container_15_Template(rf, ctx) { } } function BookingConfirmationComponent_div_0_ng_container_16_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); - i0.ɵɵelement(1, "div", 30); - i0.ɵɵelement(2, "ngx-skeleton-loader", 29); - i0.ɵɵelement(3, "ngx-skeleton-loader", 28); - i0.ɵɵelement(4, "ngx-skeleton-loader", 28); - i0.ɵɵelement(5, "ngx-skeleton-loader", 28); + i0.ɵɵelement(1, "div", 31); + i0.ɵɵelement(2, "ngx-skeleton-loader", 30); + i0.ɵɵelement(3, "ngx-skeleton-loader", 29); + i0.ɵɵelement(4, "ngx-skeleton-loader", 29); + i0.ɵɵelement(5, "ngx-skeleton-loader", 29); i0.ɵɵelementContainerEnd(); } } function BookingConfirmationComponent_div_0_ng_container_18_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); i0.ɵɵelementStart(1, "div"); - i0.ɵɵelement(2, "img", 31); + i0.ɵɵelement(2, "img", 32); i0.ɵɵelementStart(3, "p"); i0.ɵɵtext(4); i0.ɵɵelementEnd(); @@ -29104,9 +29519,9 @@ function BookingConfirmationComponent_div_0_ng_container_18_Template(rf, ctx) { function BookingConfirmationComponent_div_0_ng_container_19_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); i0.ɵɵelementStart(1, "div"); - i0.ɵɵelement(2, "ngx-skeleton-loader", 25); + i0.ɵɵelement(2, "ngx-skeleton-loader", 26); i0.ɵɵelementStart(3, "p"); - i0.ɵɵelement(4, "ngx-skeleton-loader", 25); + i0.ɵɵelement(4, "ngx-skeleton-loader", 26); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); i0.ɵɵelementContainerEnd(); @@ -29185,42 +29600,42 @@ function BookingConfirmationComponent_div_0_div_21_ng_container_2_Template(rf, c function BookingConfirmationComponent_div_0_div_21_ng_container_3_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); i0.ɵɵelementStart(1, "p"); - i0.ɵɵelement(2, "ngx-skeleton-loader", 28); + i0.ɵɵelement(2, "ngx-skeleton-loader", 29); i0.ɵɵelementEnd(); i0.ɵɵelementStart(3, "p"); - i0.ɵɵelement(4, "ngx-skeleton-loader", 28); + i0.ɵɵelement(4, "ngx-skeleton-loader", 29); i0.ɵɵelementEnd(); i0.ɵɵelementStart(5, "p"); - i0.ɵɵelement(6, "ngx-skeleton-loader", 28); + i0.ɵɵelement(6, "ngx-skeleton-loader", 29); i0.ɵɵelementEnd(); i0.ɵɵelementStart(7, "p"); - i0.ɵɵelement(8, "ngx-skeleton-loader", 26); + i0.ɵɵelement(8, "ngx-skeleton-loader", 27); i0.ɵɵelementEnd(); i0.ɵɵelementStart(9, "p"); - i0.ɵɵelement(10, "ngx-skeleton-loader", 26); + i0.ɵɵelement(10, "ngx-skeleton-loader", 27); i0.ɵɵelementEnd(); i0.ɵɵelementStart(11, "p"); - i0.ɵɵelement(12, "ngx-skeleton-loader", 28); - i0.ɵɵelement(13, "ngx-skeleton-loader", 29); - i0.ɵɵelement(14, "ngx-skeleton-loader", 26); + i0.ɵɵelement(12, "ngx-skeleton-loader", 29); + i0.ɵɵelement(13, "ngx-skeleton-loader", 30); + i0.ɵɵelement(14, "ngx-skeleton-loader", 27); i0.ɵɵelementEnd(); i0.ɵɵelementContainerEnd(); } } function BookingConfirmationComponent_div_0_div_21_div_4_Template(rf, ctx) { if (rf & 1) { const _r32 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div", 34); + i0.ɵɵelementStart(0, "div", 35); i0.ɵɵelementStart(1, "div"); i0.ɵɵelementStart(2, "h2"); - i0.ɵɵelement(3, "img", 35); + i0.ɵɵelement(3, "img", 36); i0.ɵɵtext(4, " Catering is available for this meeting room"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(5, "button", 36); + i0.ɵɵelementStart(5, "button", 37); i0.ɵɵlistener("click", function BookingConfirmationComponent_div_0_div_21_div_4_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r32); const ctx_r31 = i0.ɵɵnextContext(3); return ctx_r31.startCatering(); }); i0.ɵɵelementStart(6, "span"); i0.ɵɵtext(7, "Add catering"); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); - i0.ɵɵelement(8, "catering-order-table", 37); + i0.ɵɵelement(8, "catering-order-table", 38); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { @@ -29232,19 +29647,19 @@ function BookingConfirmationComponent_div_0_div_21_div_4_Template(rf, ctx) { if i0.ɵɵproperty("booking", ctx_r27.booking); } } function BookingConfirmationComponent_div_0_div_21_div_5_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 38); + i0.ɵɵelementStart(0, "div", 39); i0.ɵɵelementStart(1, "div"); - i0.ɵɵelement(2, "ngx-skeleton-loader", 39); + i0.ɵɵelement(2, "ngx-skeleton-loader", 40); i0.ɵɵelementStart(3, "h2"); - i0.ɵɵelement(4, "ngx-skeleton-loader", 40); + i0.ɵɵelement(4, "ngx-skeleton-loader", 41); i0.ɵɵelementEnd(); i0.ɵɵelementStart(5, "h2"); - i0.ɵɵelement(6, "ngx-skeleton-loader", 40); + i0.ɵɵelement(6, "ngx-skeleton-loader", 41); i0.ɵɵelementEnd(); i0.ɵɵelementStart(7, "p"); i0.ɵɵtext(8, "\u00A0"); i0.ɵɵelementEnd(); - i0.ɵɵelement(9, "ngx-skeleton-loader", 41); + i0.ɵɵelement(9, "ngx-skeleton-loader", 42); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } } @@ -29254,8 +29669,8 @@ function BookingConfirmationComponent_div_0_div_21_Template(rf, ctx) { if (rf & i0.ɵɵtemplate(2, BookingConfirmationComponent_div_0_div_21_ng_container_2_Template, 23, 7, "ng-container", 8); i0.ɵɵtemplate(3, BookingConfirmationComponent_div_0_div_21_ng_container_3_Template, 15, 0, "ng-container", 8); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(4, BookingConfirmationComponent_div_0_div_21_div_4_Template, 9, 4, "div", 32); - i0.ɵɵtemplate(5, BookingConfirmationComponent_div_0_div_21_div_5_Template, 10, 0, "div", 33); + i0.ɵɵtemplate(4, BookingConfirmationComponent_div_0_div_21_div_4_Template, 9, 4, "div", 33); + i0.ɵɵtemplate(5, BookingConfirmationComponent_div_0_div_21_div_5_Template, 10, 0, "div", 34); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r11 = i0.ɵɵnextContext(2); @@ -29269,7 +29684,7 @@ function BookingConfirmationComponent_div_0_div_21_Template(rf, ctx) { if (rf & i0.ɵɵproperty("ngIf", !ctx_r11.hasData()); } } function BookingConfirmationComponent_div_0_div_22_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 42); + i0.ɵɵelementStart(0, "div", 43); i0.ɵɵelementStart(1, "h2"); i0.ɵɵtext(2, "Ooops - we're sorry!"); i0.ɵɵelementEnd(); @@ -29285,7 +29700,7 @@ function BookingConfirmationComponent_div_0_ng_container_24_Template(rf, ctx) { const _r34 = i0.ɵɵgetCurrentView(); i0.ɵɵelementContainerStart(0); i0.ɵɵelementStart(1, "div"); - i0.ɵɵelementStart(2, "button", 43); + i0.ɵɵelementStart(2, "button", 44); i0.ɵɵlistener("click", function BookingConfirmationComponent_div_0_ng_container_24_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r34); const ctx_r33 = i0.ɵɵnextContext(2); return ctx_r33.returnHome(); }); i0.ɵɵtext(3); i0.ɵɵelementEnd(); @@ -29298,11 +29713,13 @@ function BookingConfirmationComponent_div_0_ng_container_24_Template(rf, ctx) { } } function BookingConfirmationComponent_div_0_ng_container_25_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); - i0.ɵɵelementStart(1, "div", 24); - i0.ɵɵelement(2, "ngx-skeleton-loader", 44); + i0.ɵɵelementStart(1, "div", 25); + i0.ɵɵelement(2, "ngx-skeleton-loader", 45); i0.ɵɵelementEnd(); i0.ɵɵelementContainerEnd(); } } +const _c0 = function (a0) { return { "fixed": a0 }; }; +const _c1 = function (a0) { return { "padding-100": a0 }; }; function BookingConfirmationComponent_div_0_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 1); i0.ɵɵtemplate(1, BookingConfirmationComponent_div_0_header_1_Template, 2, 3, "header", 2); @@ -29345,8 +29762,12 @@ function BookingConfirmationComponent_div_0_Template(rf, ctx) { if (rf & 1) { } if (rf & 2) { const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx_r0.hasData()); - i0.ɵɵadvance(5); + i0.ɵɵproperty("ngIf", ctx_r0.hasData() && !ctx_r0.placeIntoModal); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(25, _c0, !ctx_r0.placeIntoModal)); + i0.ɵɵadvance(3); + i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(27, _c1, !ctx_r0.placeIntoModal)); + i0.ɵɵadvance(1); i0.ɵɵclassProp("skeleton", !ctx_r0.hasData()); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx_r0.hasData()); @@ -29392,6 +29813,11 @@ class BookingConfirmationComponent extends base_1.BaseDirective { this._router = _router; /** The theme to use **/ this.mode = TopBarHeaderMode.Light; + /** + * placeIntoModal: Input decorator indecate as a flag to adapt component design into a dialog modal + * (by hiding header and adjusting height so that fit into a modal) + */ + this.placeIntoModal = false; /** Emitter for close events */ this.callback = new core_1.EventEmitter(); } @@ -29463,7 +29889,7 @@ class BookingConfirmationComponent extends base_1.BaseDirective { } returnHome() { return tslib_1.__awaiter(this, void 0, void 0, function* () { - if (this.modal) { + if (this.modal || this.placeIntoModal) { this.confirmed = false; this.loading = false; this.callback.emit(); @@ -29495,21 +29921,29 @@ class BookingConfirmationComponent extends base_1.BaseDirective { var _a; return ((_a = this.data) === null || _a === void 0 ? void 0 : _a.status.text.toLowerCase()) === 'unavailable'; } + getTooltipText() { + var _a; + return (_a = this.data.booking.occurrence_details) === null || _a === void 0 ? void 0 : _a.filter(ocurrence => ocurrence.id !== this.data.booking.id).map((item) => { + let date = item.start_epoch * 1000; + let specificDates = new date_tz_1.DateTZ({ date, is_local_tz: false, building_tz: this.data.booking.timezone }); + return base_1.shorterBuildingDateFormatString(specificDates).slice(3); + }); + } } exports.BookingConfirmationComponent = BookingConfirmationComponent; BookingConfirmationComponent.ɵfac = function BookingConfirmationComponent_Factory(t) { return new (t || BookingConfirmationComponent)(i0.ɵɵdirectiveInject(i1.Store), i0.ɵɵdirectiveInject(i2.Router)); }; -BookingConfirmationComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BookingConfirmationComponent, selectors: [["booking-confirmation"]], inputs: { mode: "mode", confirmed: "confirmed", loading: "loading", modal: "modal", data: ["dataForConfirmation", "data"] }, outputs: { callback: "callback" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [["class", "booking-confirmation mck-row", 4, "ngIf"], [1, "booking-confirmation", "mck-row"], ["class", "header", 4, "ngIf"], [1, "confirm-wrapper"], [1, "mck-column", "mck-center", "results-container", "mck-scroll"], [1, "mck-column", "mck-scroll", "mck-content-expand-width"], [1, "content", "mck-column", "mck-center", "mck-content-body"], [1, "section"], [4, "ngIf"], ["class", "title", 4, "ngIf"], [1, "booking-data"], [1, "details"], ["class", "unavailable-details", 4, "ngIf"], [1, "footer", "mck-column", "mck-center"], [1, "header"], [3, "mode", "backModal", "noSurvey", "closeCallback"], [1, "mck-skeleton-line-1", "header"], [1, "title"], ["class", "booking-data", 4, "ngIf"], ["class", "pb", 4, "ngIf"], [1, "pb"], [1, "rec-details-period"], [3, "click", 4, "ngIf"], [3, "click"], [1, "skeleton"], [1, "mck-skeleton-line-1"], [1, "mck-skeleton-line-50p-thin"], [1, "gap-a"], [1, "mck-skeleton-line-60p-thin"], [1, "mck-skeleton-line-90p-thin"], [1, "gap-b"], [3, "src"], ["class", "catering", 3, "skeleton", 4, "ngIf"], ["class", "catering skeleton", 4, "ngIf"], [1, "catering"], ["src", "assets/icon/catering.svg"], ["mat-stroked-button", "", "color", "primary", 1, "mck-stroked-button", "mck-short", "mck-column", "mck-center", "mck-primary", 3, "disabled", "click"], [3, "booking"], [1, "catering", "skeleton"], [1, "mck-skeleton-checkbox"], [1, "mck-skeleton-line-70p-thin"], [1, "mck-skeleton-load-more-100p"], [1, "unavailable-details"], ["mat-button", "", "color", "primary", 1, "mck-primary-button", 3, "click"], [1, "mck-skeleton-load-more"]], template: function BookingConfirmationComponent_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵtemplate(0, BookingConfirmationComponent_div_0_Template, 26, 23, "div", 0); +BookingConfirmationComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BookingConfirmationComponent, selectors: [["booking-confirmation"]], inputs: { mode: "mode", confirmed: "confirmed", loading: "loading", modal: "modal", placeIntoModal: "placeIntoModal", data: ["dataForConfirmation", "data"] }, outputs: { callback: "callback" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [["class", "booking-confirmation mck-row", 4, "ngIf"], [1, "booking-confirmation", "mck-row"], ["class", "header", 4, "ngIf"], [1, "confirm-wrapper", 3, "ngClass"], [1, "mck-column", "mck-center", "results-container", "mck-scroll"], [1, "mck-column", "mck-scroll", "mck-content-expand-width"], [1, "content", "mck-column", "mck-center", "mck-content-body", 3, "ngClass"], [1, "section"], [4, "ngIf"], ["class", "title", 4, "ngIf"], [1, "booking-data"], [1, "details"], ["class", "unavailable-details", 4, "ngIf"], [1, "footer", "mck-column", "mck-center"], [1, "header"], [3, "mode", "backModal", "noSurvey", "closeCallback"], [1, "mck-skeleton-line-1", "header"], [1, "title"], ["class", "booking-data", 4, "ngIf"], ["class", "pb", 4, "ngIf"], [1, "pb"], [1, "rec-details-period"], ["trigger", "click", 3, "tooltip"], [3, "click", 4, "ngIf"], [3, "click"], [1, "skeleton"], [1, "mck-skeleton-line-1"], [1, "mck-skeleton-line-50p-thin"], [1, "gap-a"], [1, "mck-skeleton-line-60p-thin"], [1, "mck-skeleton-line-90p-thin"], [1, "gap-b"], [3, "src"], ["class", "catering", 3, "skeleton", 4, "ngIf"], ["class", "catering skeleton", 4, "ngIf"], [1, "catering"], ["src", "assets/icon/catering.svg"], ["mat-stroked-button", "", "color", "primary", 1, "mck-stroked-button", "mck-short", "mck-column", "mck-center", "mck-primary", 3, "disabled", "click"], [3, "booking"], [1, "catering", "skeleton"], [1, "mck-skeleton-checkbox"], [1, "mck-skeleton-line-70p-thin"], [1, "mck-skeleton-load-more-100p"], [1, "unavailable-details"], ["mat-button", "", "color", "primary", 1, "mck-primary-button", 3, "click"], [1, "mck-skeleton-load-more"]], template: function BookingConfirmationComponent_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵtemplate(0, BookingConfirmationComponent_div_0_Template, 26, 29, "div", 0); } if (rf & 2) { i0.ɵɵproperty("ngIf", ctx.confirmed || ctx.loading); - } }, directives: [i3.NgIf, i4.TopbarHeaderComponent, i5.NgxSkeletonLoaderComponent, i6.MatButton, i7.OrderTableComponent], pipes: [i3.TitleCasePipe], styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\n\n\n.booking-confirmation[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n display: block;\n z-index: 10;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n padding: 0;\n}\n.confirm-wrapper[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n z-index: 4;\n background-color: #f0f0f0;\n overflow: hidden;\n border: 1px solid #a19f9f;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .gap-a[_ngcontent-%COMP%] {\n height: 14px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .gap-b[_ngcontent-%COMP%] {\n height: 40px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .content[_ngcontent-%COMP%] {\n margin: 0 auto 100px auto;\n padding: 1px 20px 0 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .content[_ngcontent-%COMP%] {\n margin: 0 auto 82px auto;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .content[_ngcontent-%COMP%] {\n margin: 0 auto 82px auto;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .content[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 100%;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] {\n padding: 26px;\n padding-top: 100px;\n font-size: 18px;\n font-weight: 400;\n font-size: 16px;\n color: #333333;\n background-color: #e6e6e6;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section.skeleton[_ngcontent-%COMP%] {\n padding-top: 40px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section.skeleton[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n filter: brightness(95%);\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 32px;\n font-weight: 400;\n margin: 20px 0 20PX 0;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 24px;\n padding-top: 15px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 24px;\n padding-top: 15px;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 500;\n margin: 0;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background-color: #ffffff;\n display: flex;\n flex-wrap: wrap;\n margin: 0 auto;\n box-shadow: 0px 2px 4px rgba(5, 28, 44, 0.2), 0px 0px 1px rgba(5, 28, 44, 0.2);\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex-wrap: wrap-reverse;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex-wrap: wrap-reverse;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .pb[_ngcontent-%COMP%] {\n padding-bottom: 10px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n padding: 20px;\n flex: 3.4;\n line-height: 24px;\n padding-bottom: 15px;\n min-width: 200px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: block;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: block;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .title[_ngcontent-%COMP%] {\n width: 100%;\n flex: none;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .title[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] {\n flex: 1;\n font-size: 18px;\n font-weight: 500;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status.skeleton[_ngcontent-%COMP%] {\n background: #f8f8f8;\n color: #f8f8f8;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n text-align: center;\n margin: auto;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin-bottom: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin-top: 0;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 30px;\n margin-right: 10px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin-top: 0;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 30px;\n margin-right: 10px;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n width: 100%;\n display: block;\n color: #333333;\n margin: 0 0 20px 0;\n font-weight: 400;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] .booking-data[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n font-size: 18px;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] .booking-data[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] .booking-data[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] .booking-data[_ngcontent-%COMP%]:nth-child(2n) {\n margin-bottom: 10px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] .booking-data[_ngcontent-%COMP%] .rec-details-period[_ngcontent-%COMP%] {\n cursor: pointer;\n text-decoration: underline;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] {\n padding-top: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] {\n padding-top: 0;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding: 10px 40px 30px;\n border: 1px solid #e6e6e6;\n background-color: white;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details.skeleton[_ngcontent-%COMP%] {\n padding-top: 30px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details.skeleton[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 9px 0;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details.skeleton[_ngcontent-%COMP%] p[_ngcontent-%COMP%] .loader[_ngcontent-%COMP%] {\n margin-bottom: 5px !important;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 100%;\n max-width: 1024px;\n margin: 0 auto;\n display: flex;\n flex-wrap: wrap;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-weight: 400;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] {\n margin-top: 20px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding: 25px 35px;\n border: 1px solid #E6E6E6;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div.skeleton[_ngcontent-%COMP%] {\n margin-top: 0;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n margin-left: 26px;\n width: 306px;\n position: relative;\n margin-top: 0;\n font-weight: 500;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n position: absolute;\n left: -30px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n width: 100%;\n margin: 0 auto;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] span[_ngcontent-%COMP%], .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] .plus[_ngcontent-%COMP%] {\n color: #1F40E6;\n font-size: 16px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] .plus[_ngcontent-%COMP%] {\n font-size: 26px;\n font-weight: 300;\n position: relative;\n top: 2px;\n padding-left: 3px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%] {\n color: rgba(0, 0, 0, 0.26) !important;\n border: 1px solid #D0D0D0;\n cursor: not-allowed;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%] .mat-button-wrapper[_ngcontent-%COMP%] {\n color: rgba(0, 0, 0, 0.26) !important;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%] .mat-button-wrapper[_ngcontent-%COMP%], .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: rgba(0, 0, 0, 0.26);\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%] .mat-button-wrapper[_ngcontent-%COMP%] span[_ngcontent-%COMP%], .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%] span[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: rgba(0, 0, 0, 0.26);\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering.skeleton[_ngcontent-%COMP%] {\n margin-top: 0;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering.skeleton[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin-bottom: 0px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding: 10px 0;\n margin-bottom: 100px;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .booking-data[_ngcontent-%COMP%] {\n padding: 0 26px;\n min-width: 100%;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] {\n width: 100%;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding: 25px 26px;\n border: none;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 18px;\n width: 100%;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding: 10px 0;\n margin-bottom: 100px;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .booking-data[_ngcontent-%COMP%] {\n padding: 0 26px;\n min-width: 100%;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] {\n width: 100%;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding: 25px 26px;\n border: none;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 18px;\n width: 100%;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .unavailable-details[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n width: 100%;\n font-family: \"McKinsey Sans\";\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .unavailable-details[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n width: 100%;\n font-weight: 500;\n color: #333333;\n font-size: 20px;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .unavailable-details[_ngcontent-%COMP%] {\n padding: 0 26px;\n min-width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .unavailable-details[_ngcontent-%COMP%] {\n padding: 0 26px;\n min-width: 100%;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] {\n position: absolute;\n bottom: 0;\n left: 0;\n padding: 24px 16px;\n border: 1px solid #e6e6e6;\n height: 96px;\n width: 100%;\n background-color: white;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 100%;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%], .confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] .skeleton[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n width: 383px;\n margin: 0 auto;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%], .confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] .skeleton[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%], .confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] .skeleton[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .mck-content-body[_ngcontent-%COMP%] {\n height: calc(100vh - 80px);\n overflow-y: scroll;\n top: 0;\n left: 0;\n padding: 100px 0;\n box-sizing: border-box;\n display: block;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .mck-content-body[_ngcontent-%COMP%] {\n position: fixed;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .mck-content-body[_ngcontent-%COMP%] {\n position: fixed;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNvbmZpcm1hdGlvbi9ib29raW5nLWNvbmZpcm1hdGlvbi5jb21wb25lbnQuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9taXhpbnMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNvbmZpcm1hdGlvbi9ib29raW5nLWNvbmZpcm1hdGlvbi5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNwVUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQzVDQTs7c0JBQUE7QUNWSTtFQUNJLGNBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7RUFDQSxNQUFBO0VBQ0EsT0FBQTtFQUNBLFdBQUE7RUFDQSxVQUFBO0FKOEJSO0FJM0JBO0VBQ0ksZUFBQTtFQUNBLE1BQUE7RUFD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V0FBQTtFSmdHdEI7QUFDRjtBSTFGWTtFQUNJLFdBQUE7RUFDQSw0QkgxTUs7QURzU3JCO0FJMUZZO0VBQ0ksV0FBQTtFQUNBLGdCQUFBO0VBQ0EsY0FBQTtFQUNBLGVBQUE7RUFDQSw0QkhqTks7QUQ2U3JCO0FDMVhZO0VHb1JKO0lBY1EsZUFBQTtJQUNBLGVBQUE7RUo0RmQ7QUFDRjtBQ2hZWTtFR29SSjtJQWNRLGVBQUE7SUFDQSxlQUFBO0VKa0dkO0FBQ0Y7QUk5Rkk7RUFDSSxrQkFBQTtFQUNBLFNBQUE7RUFDQSxPQUFBO0VBQ0Esa0JBQUE7RUFDQSx5QkFBQTtFQUNBLFlBQUE7RUFDQSxXQUFBO0VBQ0EsdUJBQUE7QUpnR1I7QUkvRlE7RUFDSSxXQUFBO0FKaUdaO0FJOUZRO0VBQ0kscUdGNVFVO0VFNlFWLFlBQUE7RUFDQSxjQUFBO0FKZ0daO0FHN1lRO0VDMFNBO0lBS1EsV0FBQTtFSmtHZDtBQUNGO0FHL1lRO0VDdVNBO0lBS1EsV0FBQTtFSnVHZDtBQUNGO0FJbkdJO0VBQ0ksMEJBQUE7RUFDQSxrQkFBQTtFQUNBLE1BQUE7RUFDQSxPQUFBO0VBQ0EsZ0JBQUE7RUFDQSxzQkFBQTtFQUNBLGNBQUE7QUpxR1I7QUMzYVk7RUd5VUo7SUFDSSxlQUFBO0VKcUdWO0FBQ0Y7QUNoYlk7RUd5VUo7SUFDSSxlQUFBO0VKMEdWO0FBQ0YiLCJmaWxlIjoiYXBwcy9zdGFmZi9zcmMvYXBwL2Jvb2tpbmcvYm9va2luZy1jb25maXJtYXRpb24vYm9va2luZy1jb25maXJtYXRpb24uY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIkcHJpbWFyeTogIzFGNDBFNjtcbiRmb3JtLWxhYmVsOiAjMDUxQzJDO1xuJHNlY29uZGFyeS1sYWJlbDogIzc2NzY3NjtcbiRib3JkZXI6ICNCM0IzQjM7XG4kYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDogI0QwRDBEMDtcbiRjaGlwLWNvbG9yOiAjMzMzMzMzO1xuJHBsYWNlaG9sZGVyLWNvbG9yOiAjN0Y3RjdGO1xuJGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4kcGFnZS1iYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuJHNlbGVjdGVkLW9wdGlvbjogI0U2RTZFNjtcbiRjb2xvci1icmFuZC15ZWxsb3c6ICNmZmQwNDg7XG4kbGlnaHQteWVsbG93OiAjZmZmM2NlO1xuJGNvYWNobWFyay10ZXh0OiAjNmY0ZDAwO1xuJGVycm9yLWNvbG9yOiAjRTEyRTQwO1xuJG5vLWZpbHRlcnMtY29sb3I6ICNCQ0JDQkM7XG4kcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I6ICNGNEY0RjQ7XG4kcHJpbWFyeS1oaWdobGlnaHQ6ICMyMjUxRkY7XG4kc2Nyb2xsYmFyLWNvbG9yOiAjNzU3NTc1O1xuXG4kYXZhaWxhYmxlLWNvbG9yOiAjNUQ5RDUyO1xuJGF2YWlsYWJsZS1ieS1yZXF1ZXN0LWNvbG9yOiAjRjVCNTNGO1xuJGluLXVzZS1jb2xvcjogI0Q0NDgzRTtcbiRub3QtYm9va2FibGUtY29sb3I6ICNDQ0NDQ0M7XG5cbiRtb2RhbC1ib2R5LWhlYWRpbmc6ICM0RDRENEQ7XG4kYWxlcnQtb3ZlcmxheS1iZzogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2FjaG1hcmstYmc6ICNFQkVCRjY7XG4kY29hY2htYXJrLWRhcmstdGV4dDogIzFCMUIxOTtcbiRlcnJvci10ZXh0OiAjZmZmO1xuXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuXG4vLyA0cHhcbiRzcGFjaW5nLXNtYWxsZXN0OiAwLjI1cmVtO1xuXG4vLyA4cHhcbiRzcGFjaW5nLXh4c21hbGw6IDAuNXJlbTtcblxuLy8gMTJweFxuJHNwYWNpbmcteHNtYWxsOiAwLjc1cmVtO1xuXG4vLyAxNnB4XG4kc3BhY2luZy1zbWFsbDogMXJlbTtcblxuLy8gMjBweFxuJHNwYWNpbmctc21hbGwtbWVkaXVtOiAxLjI1cmVtO1xuXG4vLyAyNHB4XG4kc3BhY2luZy1tZWRpdW06IDEuNXJlbTtcblxuLy8gMjhweFxuJHNwYWNpbmctbWVkaXVtLWxhcmdlOiAxLjc1cmVtO1xuXG4vLyAzMnB4XG4kc3BhY2luZy1sYXJnZTogMnJlbTtcblxuLy8gNDhweFxuJHNwYWNpbmcteGxhcmdlOiAzcmVtO1xuXG4vLyA2NHB4XG4kc3BhY2luZy14eGxhcmdlOiA0cmVtO1xuXG4vLyA5NnB4XG4kc3BhY2luZy1sYXJnZXN0OiA2cmVtO1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGRldmljZS1tb2JpbGUtc2l6ZTogNDUwcHg7XG4kZGV2aWNlLXRhYmxldC1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFwdG9wLXNpemU6IDEwMjRweDtcblxuJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemU6IDgwMHB4O1xuJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemU6IDEwNDhweDtcbiRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplOiAxMjgwcHg7XG5cblxuOmV4cG9ydCB7XG4gICAgcHJpbWFyeTogJHByaW1hcnk7XG4gICAgc2Vjb25kYXJ5TGFiZWw6ICRzZWNvbmRhcnktbGFiZWw7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4kaWNvbi1zbWFsbDogMTZweDtcbiRpY29uLW1lZGl1bTogMjRweDtcbiRpY29uLWxhcmdlOiAzMnB4O1xuJGljb24teGxhcmdlOiA0OHB4O1xuIiwiLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi5ib29raW5nLWNvbmZpcm1hdGlvbiAuaGVhZGVyIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHotaW5kZXg6IDEwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDA7XG59XG5cbi5jb25maXJtLXdyYXBwZXIge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbiAgei1pbmRleDogNDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYm9yZGVyOiAxcHggc29saWQgI2ExOWY5Zjtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmdhcC1hIHtcbiAgaGVpZ2h0OiAxNHB4O1xufVxuLmNvbmZpcm0td3JhcHBlciAuZ2FwLWIge1xuICBoZWlnaHQ6IDQwcHg7XG59XG4uY29uZmlybS13cmFwcGVyIC5jb250ZW50IHtcbiAgbWFyZ2luOiAwIGF1dG8gMTAwcHggYXV0bztcbiAgcGFkZGluZzogMXB4IDIwcHggMCAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuY29udGVudCB7XG4gICAgbWFyZ2luOiAwIGF1dG8gODJweCBhdXRvO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuY29udGVudCB7XG4gICAgbWFyZ2luOiAwIGF1dG8gODJweCBhdXRvO1xuICB9XG59XG4uY29uZmlybS13cmFwcGVyIC5jb250ZW50ID4gZGl2IHtcbiAgd2lkdGg6IDEwMCU7XG59XG4uY29uZmlybS13cmFwcGVyIC5zZWN0aW9uIHtcbiAgcGFkZGluZzogMjZweDtcbiAgcGFkZGluZy10b3A6IDEwMHB4O1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgY29sb3I6ICMzMzMzMzM7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlNmU2ZTY7XG59XG4uY29uZmlybS13cmFwcGVyIC5zZWN0aW9uLnNrZWxldG9uIHtcbiAgcGFkZGluZy10b3A6IDQwcHg7XG59XG4uY29uZmlybS13cmFwcGVyIC5zZWN0aW9uLnNrZWxldG9uIC5oZWFkZXIge1xuICBmaWx0ZXI6IGJyaWdodG5lc3MoOTUlKTtcbn1cbi5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gaDEge1xuICBmb250LXNpemU6IDMycHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIG1hcmdpbjogMjBweCAwIDIwUFggMDtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiBoMSB7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIHBhZGRpbmctdG9wOiAxNXB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiBoMSB7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIHBhZGRpbmctdG9wOiAxNXB4O1xuICB9XG59XG4uY29uZmlybS13cmFwcGVyIC5zZWN0aW9uIGgyIHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBtYXJnaW46IDA7XG59XG4uY29uZmlybS13cmFwcGVyIC5zZWN0aW9uID4gZGl2IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBtYXJnaW46IDAgYXV0bztcbiAgYm94LXNoYWRvdzogMHB4IDJweCA0cHggcmdiYSg1LCAyOCwgNDQsIDAuMiksIDBweCAwcHggMXB4IHJnYmEoNSwgMjgsIDQ0LCAwLjIpO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiA+IGRpdiB7XG4gICAgZmxleC13cmFwOiB3cmFwLXJldmVyc2U7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuY29uZmlybS13cmFwcGVyIC5zZWN0aW9uID4gZGl2IHtcbiAgICBmbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTtcbiAgfVxufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiA+IGRpdiAucGIge1xuICBwYWRkaW5nLWJvdHRvbTogMTBweDtcbn1cbi5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgPiBkaXYge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIHBhZGRpbmc6IDIwcHg7XG4gIGZsZXg6IDMuNDtcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gIHBhZGRpbmctYm90dG9tOiAxNXB4O1xuICBtaW4td2lkdGg6IDIwMHB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiA+IGRpdiA+IGRpdiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuY29uZmlybS13cmFwcGVyIC5zZWN0aW9uID4gZGl2ID4gZGl2IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiA+IGRpdiA+IGRpdiA+IGRpdiB7XG4gIGZsZXg6IDE7XG59XG4uY29uZmlybS13cmFwcGVyIC5zZWN0aW9uID4gZGl2ID4gZGl2IC50aXRsZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBmbGV4OiBub25lO1xufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiA+IGRpdiA+IGRpdiAudGl0bGUgaDIge1xuICBmb250LXdlaWdodDogNTAwO1xufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiA+IGRpdiAuc3RhdHVzIHtcbiAgZmxleDogMTtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBmb250LXdlaWdodDogNTAwO1xufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiA+IGRpdiAuc3RhdHVzLnNrZWxldG9uIHtcbiAgYmFja2dyb3VuZDogI2Y4ZjhmODtcbiAgY29sb3I6ICNmOGY4Zjg7XG59XG4uY29uZmlybS13cmFwcGVyIC5zZWN0aW9uID4gZGl2IC5zdGF0dXMgPiBkaXYge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG1hcmdpbjogYXV0bztcbn1cbi5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgLnN0YXR1cyA+IGRpdiBwIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgLnN0YXR1cyA+IGRpdiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB9XG4gIC5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgLnN0YXR1cyA+IGRpdiBwIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICB9XG4gIC5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgLnN0YXR1cyA+IGRpdiBpbWcge1xuICAgIHdpZHRoOiAzMHB4O1xuICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgLnN0YXR1cyA+IGRpdiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB9XG4gIC5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgLnN0YXR1cyA+IGRpdiBwIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICB9XG4gIC5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgLnN0YXR1cyA+IGRpdiBpbWcge1xuICAgIHdpZHRoOiAzMHB4O1xuICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgfVxufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiA+IGRpdiBoMiB7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgY29sb3I6ICMzMzMzMzM7XG4gIG1hcmdpbjogMCAwIDIwcHggMDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbi5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gLmJvb2tpbmctZGF0YSA+IGRpdiB7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiAuYm9va2luZy1kYXRhID4gZGl2IHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuY29uZmlybS13cmFwcGVyIC5zZWN0aW9uIC5ib29raW5nLWRhdGEgPiBkaXYge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgfVxufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiAuYm9va2luZy1kYXRhOm50aC1jaGlsZCgybikge1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiAuYm9va2luZy1kYXRhIC5yZWMtZGV0YWlscy1wZXJpb2Qge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiB7XG4gICAgcGFkZGluZy10b3A6IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuY29uZmlybS13cmFwcGVyIC5zZWN0aW9uIHtcbiAgICBwYWRkaW5nLXRvcDogMDtcbiAgfVxufVxuLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyB7XG4gIHBhZGRpbmc6IDEwcHggNDBweCAzMHB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTZlNmU2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMuc2tlbGV0b24ge1xuICBwYWRkaW5nLXRvcDogMzBweDtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMuc2tlbGV0b24gcCB7XG4gIG1hcmdpbjogOXB4IDA7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzLnNrZWxldG9uIHAgLmxvYWRlciB7XG4gIG1hcmdpbi1ib3R0b206IDVweCAhaW1wb3J0YW50O1xufVxuLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyA+IGRpdiB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMjRweDtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgPiBkaXYgPiBkaXYge1xuICBmbGV4OiAxO1xufVxuLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyBsYWJlbCB7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyB7XG4gIG1hcmdpbi10b3A6IDIwcHg7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiB7XG4gIHBhZGRpbmc6IDI1cHggMzVweDtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2LnNrZWxldG9uIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2IGgyIHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBtYXJnaW4tbGVmdDogMjZweDtcbiAgd2lkdGg6IDMwNnB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi10b3A6IDA7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2IGgyIGltZyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogLTMwcHg7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiBidXR0b24ge1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiBidXR0b24gc3BhbiwgLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAuY2F0ZXJpbmcgPiBkaXYgYnV0dG9uIC5wbHVzIHtcbiAgY29sb3I6ICMxRjQwRTY7XG4gIGZvbnQtc2l6ZTogMTZweDtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2IGJ1dHRvbiAucGx1cyB7XG4gIGZvbnQtc2l6ZTogMjZweDtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IDJweDtcbiAgcGFkZGluZy1sZWZ0OiAzcHg7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiBidXR0b25bZGlzYWJsZWRdIHtcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNikgIWltcG9ydGFudDtcbiAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2IGJ1dHRvbltkaXNhYmxlZF0gLm1hdC1idXR0b24td3JhcHBlciB7XG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjYpICFpbXBvcnRhbnQ7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiBidXR0b25bZGlzYWJsZWRdIC5tYXQtYnV0dG9uLXdyYXBwZXIsIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2IGJ1dHRvbltkaXNhYmxlZF0gc3BhbiB7XG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjYpO1xufVxuLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAuY2F0ZXJpbmcgPiBkaXYgYnV0dG9uW2Rpc2FibGVkXSAubWF0LWJ1dHRvbi13cmFwcGVyIHNwYW4sIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2IGJ1dHRvbltkaXNhYmxlZF0gc3BhbiBzcGFuIHtcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNik7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZy5za2VsZXRvbiB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZy5za2VsZXRvbiBoMiB7XG4gIG1hcmdpbi1ib3R0b206IDBweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMge1xuICAgIHBhZGRpbmc6IDEwcHggMDtcbiAgICBtYXJnaW4tYm90dG9tOiAxMDBweDtcbiAgfVxuICAuY29uZmlybS13cmFwcGVyIC5kZXRhaWxzID4gZGl2IC5ib29raW5nLWRhdGEge1xuICAgIHBhZGRpbmc6IDAgMjZweDtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gIH1cbiAgLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAuY2F0ZXJpbmcge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2IHtcbiAgICBwYWRkaW5nOiAyNXB4IDI2cHg7XG4gICAgYm9yZGVyOiBub25lO1xuICB9XG4gIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2IGgyIHtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbiAgLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAuY2F0ZXJpbmcgPiBkaXYgYnV0dG9uIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMge1xuICAgIHBhZGRpbmc6IDEwcHggMDtcbiAgICBtYXJnaW4tYm90dG9tOiAxMDBweDtcbiAgfVxuICAuY29uZmlybS13cmFwcGVyIC5kZXRhaWxzID4gZGl2IC5ib29raW5nLWRhdGEge1xuICAgIHBhZGRpbmc6IDAgMjZweDtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gIH1cbiAgLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAuY2F0ZXJpbmcge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2IHtcbiAgICBwYWRkaW5nOiAyNXB4IDI2cHg7XG4gICAgYm9yZGVyOiBub25lO1xuICB9XG4gIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2IGgyIHtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbiAgLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAuY2F0ZXJpbmcgPiBkaXYgYnV0dG9uIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAudW5hdmFpbGFibGUtZGV0YWlscyBwIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLnVuYXZhaWxhYmxlLWRldGFpbHMgaDIge1xuICB3aWR0aDogMTAwJTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6ICMzMzMzMzM7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAudW5hdmFpbGFibGUtZGV0YWlscyB7XG4gICAgcGFkZGluZzogMCAyNnB4O1xuICAgIG1pbi13aWR0aDogMTAwJTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLnVuYXZhaWxhYmxlLWRldGFpbHMge1xuICAgIHBhZGRpbmc6IDAgMjZweDtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gIH1cbn1cbi5jb25maXJtLXdyYXBwZXIgLmZvb3RlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICBwYWRkaW5nOiAyNHB4IDE2cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNmU2ZTY7XG4gIGhlaWdodDogOTZweDtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xufVxuLmNvbmZpcm0td3JhcHBlciAuZm9vdGVyID4gZGl2IHtcbiAgd2lkdGg6IDEwMCU7XG59XG4uY29uZmlybS13cmFwcGVyIC5mb290ZXIgYnV0dG9uLCAuY29uZmlybS13cmFwcGVyIC5mb290ZXIgLnNrZWxldG9uIHtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuICB3aWR0aDogMzgzcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuZm9vdGVyIGJ1dHRvbiwgLmNvbmZpcm0td3JhcHBlciAuZm9vdGVyIC5za2VsZXRvbiB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuY29uZmlybS13cmFwcGVyIC5mb290ZXIgYnV0dG9uLCAuY29uZmlybS13cmFwcGVyIC5mb290ZXIgLnNrZWxldG9uIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuLmNvbmZpcm0td3JhcHBlciAubWNrLWNvbnRlbnQtYm9keSB7XG4gIGhlaWdodDogY2FsYygxMDB2aCAtIDgwcHgpO1xuICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgcGFkZGluZzogMTAwcHggMDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuY29uZmlybS13cmFwcGVyIC5tY2stY29udGVudC1ib2R5IHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuY29uZmlybS13cmFwcGVyIC5tY2stY29udGVudC1ib2R5IHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gIH1cbn0iLCJAaW1wb3J0IFwidmFyc1wiO1xuXG5AbWl4aW4gcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkc2l6ZSwgJHF1YWxpZmllcikge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQGlmICgkcXVhbGlmaWVyID09IG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2UgaWYgKCRxdWFsaWZpZXIgPT0gbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1heC13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuQG1peGluIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkbWluLCAkbWF4KSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyB0aGlzIGlzIGEgY29weSBvZiByZXNwb25kLXRvLiB3ZSBkb24ndCB3YW50IHRvIHByZXNlcnZlIHRoYXQgbWV0aG9kIHNpbmNlIHRoZSBicmVha3BvaW50cyBtYXkgZGl2ZXJnZSBmcm9tIHRoZSBvbGQgVUkuXG5AbWl4aW4gaXMtc2NyZWVuLXNpemUoJG1lZGlhOiBhbGwsICRvcmllbnRhdGlvbjogbm9uZSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5cbkBtaXhpbiBwYWdlLXBhZGRpbmcge1xuICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctc21hbGw7XG4gICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctc21hbGw7XG59XG5cbi8vIEZvbnQgTWl4aW5zXG4kZm9udC1tY2tpbnNleS1zYW5zOiBcIk1jS2luc2V5IFNhbnNcIjtcbiRmb250LXRoZWluaGFyZHQ6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuJGZvbnQtYm93ZXI6IFwiQm93ZXJcIjtcblxuQG1peGluIGJvd2VyLWJvbGQge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1ib3dlcjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gbWNraW5zZXktc2FucyB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIGRpc3BsYXktMSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNHJlbTsgLy8gNjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODc7IC8vIDc2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTIge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTMge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2MHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNCB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDNyZW07IC8vIDQ4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNjY7IC8vIDU2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjRweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMwcHhcbiAgICBsaW5lLWhlaWdodDogMS44MzM7IC8vIDM0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY0MjsgLy8gNDBweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0xIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNDhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNzVyZW07IC8vIDQ0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA1MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0yIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjExMTsgLy8gNDRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDQ4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTMge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMjI7IC8vIDQ0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTUge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTYge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTU7IC8vIDI4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBib2R5LWRlZmF1bHQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjZweFxuICAgIH1cbn1cblxuLy8vIERvZXNudCBleGlzdCBpbiBNRFMuXG5AbWl4aW4gYm9keS10aW55IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTsgLy8gMTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDIwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBmb3JtLWxhYmVsIHtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC10aGVpbmhhcmR0O1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBjb2xvcjogJHBsYWNlaG9sZGVyLWNvbG9yO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG59XG5cbkBtaXhpbiBjaGlwLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gY2hlY2tib3gtbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICBjb2xvcjogYmxhY2s7XG59XG5cbi8vIGJvcmRlcnNcblxuQG1peGluIG1jay1jaGVja2JveC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stdGhpbi1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYm9yZGVyLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQtbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlci1saWdodDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cblxuLy8gZnVuY3Rpb25zXG5cbi8qKlxuICogTWFrZXMgdGV4dCBoYXZlIG1heGltdW0gbGluZXMgd2l0aCBlbGxpcHNpcy4gV29ya3Mgb24gbW9zdCBtb2Rlcm4gYnJvd3NlcnMgZXhjZXB0XG4gKiBvZiBGaXJlZm94Li5cbiAqL1xuQG1peGluIG1heC1saW5lcygkY291bnQpIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIC13ZWJraXQtbGluZS1jbGFtcDogJGNvdW50O1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG59XG5cbi8vIGltYWdlc1xuQG1peGluIG1jay1pY29uKCR3aWR0aCwgJGFzc2V0LCAkaGVpZ2h0OiAkd2lkdGgsICAkYXNzZXRQYXRoOiBcImxpYnMvdWkvc3JjL2xpYi9pY29uc1wiLCkge1xuICAgIHdpZHRoOiAkd2lkdGg7XG4gICAgaGVpZ2h0OiAkaGVpZ2h0O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiN7JGFzc2V0UGF0aH0vI3skYXNzZXR9XCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbn1cblxuXG5AbWl4aW4gbWNrLXNtYWxsLWljb24oJG1vYmlsZS1hc3NldCwgJGRlc2t0b3AtYXNzZXQ6ICRtb2JpbGUtYXNzZXQpIHtcbiAgICBAaW5jbHVkZSBtY2staWNvbigxNnB4LCAkYXNzZXQ6ICRtb2JpbGUtYXNzZXQpO1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBAaW5jbHVkZSBtY2staWNvbigyNHB4LCAkYXNzZXQ6ICRkZXNrdG9wLWFzc2V0KTtcbiAgICB9XG59XG5cbi8vIHNrZWxldG9uXG5AbWl4aW4gc2tlbGV0b24tYmcge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1pbWFnZS1zaXplIHtcbiAgICB3aWR0aDogODFweDtcbiAgICBoZWlnaHQ6IDgycHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAyMTlweDtcbiAgICAgICAgaGVpZ2h0OiAxMTlweDtcbiAgICB9XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1zdGF0dXMtc2l6ZSB7XG4gICAgd2lkdGg6IDExN3B4O1xuICAgIGhlaWdodDogNzhweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDExN3B4O1xuICAgICAgICBoZWlnaHQ6IDc4cHg7XG4gICAgfVxufVxuIiwiLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kY29sb3ItYnJhbmQtZWxlY3RyaWMtYmx1ZTogIzIyNTFmZjtcbiRjb2xvci1icmFuZC1kZWVwLWJsdWU6ICMwNTFjMmM7XG4kY29sb3ItYnJhbmQtY3lhbjogIzAwYTlmNDtcblxuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRmb250LWRhcms6ICMwMDA7XG4kZm9udC1saWdodDogI2ZmZjtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG4kZ3JlZW4xOiAjMjE5NjUzO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvbG9yLXByaW1hcnk6ICMxOTM3ZWE7XG4kY29sb3ItcHJpbWFyeS1saWdodDogbGlnaHRlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuJGNvbG9yLXByaW1hcnktZGFyazogZGFya2VuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG5cbiRjb2xvci1zZWNvbmRhcnk6ICM0Mjg1RjQ7XG4kY29sb3Itc2Vjb25kYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcbiRjb2xvci1zZWNvbmRhcnktZGFyazogZGFya2VuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcblxuJGJhY2tncm91bmQ6ICNmMGYwZjA7XG4kZm9vdGVyLWJhY2s6ICMyNjMyMzg7XG4kaGVhZGVyLWJhY2s6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzA1MUMyQywgIzA1MUMyQyA0MCUsICMwQjI0NTMgNjAlLCAjMUY0MEU2IDEwMCUpO1xuXG4kY29sb3ItdGVybmFyeTogIzA1MWMyYztcblxuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG5cbiRmb250LXN0YWNrOiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcblxuJGhlYWRpbmctZm9udDogXCJMYXJpc2hNY0tpbnNleVwiLCAnR2VvcmdpYScsIHNlcmlmO1xuJGZvbnQ6ICRmb250LXN0YWNrO1xuXG4kZm9udC1mYW1pbHktcHJpbWFyeTogXCJNY0tpbnNleSBTYW5zXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQ2FsaWJyaSwgQ29yYmVsLCBIZWx2ZXRpY2EsIFJvYm90bywgRHJvaWQsIHNhbnMtc2VyaWY7XG4kZm9udC1mYW1pbHktc2Vjb25kYXJ5OiBcIkJvd2VyXCIsIEdlb3JnaWEsIFwiVGltZXMgTmV3IFJvbWFuXCIgc2VyaWY7XG5cbiRiYXNlLXNpemU6IDE2cHg7XG4kdGFibGV0LXNpemU6IDE2cHg7XG4kbW9iaWxlLXNpemU6IDE2cHg7XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kYnJlYWstbW9iaWxlOiA0NTBweDtcbiRicmVhay10YWJsZXQ6IDgwMHB4O1xuJGJyZWFrLWxhcHRvcDogMTAyNHB4O1xuXG4kYnJlYWstbGFuZHNjYXBlLW1vYmlsZTogODAwcHg7XG4kYnJlYWstbGFuZHNjYXBlLXRhYmxldDogMTA0OHB4O1xuJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3A6IDEyODBweDtcbiIsIkBpbXBvcnQgJy4vdmFyaWFibGVzJztcblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5AbWl4aW4gYm94LXNoYWRvdygkY29sb3I6ICMwMDAsICRkZXB0aDogMSkge1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCAxcHggKiAoJGRlcHRoIC0gMSkgcmdiYSgjMDAwLCAuMiksXG4gICAgICAgICAgICAgICAgMCAxcHggMXB4IDAgcmdiYSgjMDAwLCAuMTQpLFxuICAgICAgICAgICAgICAgIDAgMnB4IDFweCAtMXB4IHJnYmEoIzAwMCwgLjEyKTtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbkBtaXhpbiByZXNwb25kLXRvKCRtZWRpYSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSAgQGVsc2UgaWYgJG1lZGlhID09IGxhdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfUBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJAaW1wb3J0ICdsaWJzL3VpL3NyYy9saWIvbWl4aW5zJztcbkBpbXBvcnQgJ21peGlucyc7XG5cbi5ib29raW5nLWNvbmZpcm1hdGlvbiB7XG4gICAgLmhlYWRlciB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB6LWluZGV4OiAxMDtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgIH0gIFxufVxuLmNvbmZpcm0td3JhcHBlciB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICB6LWluZGV4OiA0O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjYTE5ZjlmO1xuXG4gICAgLmdhcCB7XG4gICAgICAgICYtYSB7XG4gICAgICAgICAgICBoZWlnaHQ6IDE0cHg7XG4gICAgICAgIH1cbiAgICAgICAgJi1iIHtcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5jb250ZW50IHtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG8gMTAwcHggYXV0bztcbiAgICAgICAgcGFkZGluZzogMXB4IDIwcHggMCAwO1xuICAgICAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG8gODJweCBhdXRvO1xuICAgICAgICB9XG4gICAgICAgID4gZGl2IHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLnNlY3Rpb24ge1xuICAgICAgICBwYWRkaW5nOiAyNnB4O1xuICAgICAgICBwYWRkaW5nLXRvcDogMTAwcHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjtcbiAgICAgICAgJi5za2VsZXRvbiB7XG4gICAgICAgICAgICBwYWRkaW5nLXRvcDogNDBweDtcbiAgICAgICAgICAgIC5oZWFkZXIge1xuICAgICAgICAgICAgICAgIGZpbHRlcjogYnJpZ2h0bmVzcyg5NSUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGgxIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMzJweDtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgICBtYXJnaW46IDIwcHggMCAyMFBYIDA7XG4gICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtc3RhY2s7XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDI0cHg7XG4gICAgICAgICAgICAgICAgcGFkZGluZy10b3A6IDE1cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaDIge1xuICAgICAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgfVxuICAgICAgICA+IGRpdiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgICAgICAgYm94LXNoYWRvdzogMHB4IDJweCA0cHggcmdiYSg1LCAyOCwgNDQsIDAuMiksIDBweCAwcHggMXB4IHJnYmEoNSwgMjgsIDQ0LCAwLjIpO1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLnBiIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTBweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgID4gZGl2IHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAyMHB4O1xuICAgICAgICAgICAgICAgIGZsZXg6IDMuNDtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMjRweDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTVweDtcbiAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDIwMHB4O1xuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgID4gZGl2IHtcbiAgICAgICAgICAgICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLnRpdGxlIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgIGZsZXg6IG5vbmU7XG5cbiAgICAgICAgICAgICAgICAgICAgaDJ7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLnN0YXR1cyB7XG4gICAgICAgICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgICAgICAgICAmLnNrZWxldG9uIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2Y4ZjhmODtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICNmOGY4Zjg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID4gZGl2IHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IGF1dG87XG4gICAgICAgICAgICAgICAgICAgIHAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaW1ne1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGgyIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgICAgICAgICAgICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5ib29raW5nLWRhdGF7IFxuICAgICAgICAgICAgPmRpdiB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktcHJpbWFyeTtcblxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmOm50aC1jaGlsZCgybikge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAucmVjLWRldGFpbHMtcGVyaW9kIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgcGFkZGluZy10b3A6IDA7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC5kZXRhaWxzIHtcbiAgICAgICAgcGFkZGluZzogMTBweCA0MHB4IDMwcHg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlNmU2ZTY7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICAmLnNrZWxldG9uIHtcbiAgICAgICAgICAgIHBhZGRpbmctdG9wOiAzMHB4O1xuICAgICAgICAgICAgcCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiA5cHggMDtcbiAgICAgICAgICAgICAgICAubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgID4gZGl2IHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gICAgICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICAgICAgICA+IGRpdiB7XG4gICAgICAgICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsYWJlbCB7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICB9XG4gICAgICAgIC5jYXRlcmluZyB7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAyMHB4O1xuICAgICAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDI1cHggMzVweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICAgICAgICAgICAgICAgICYuc2tlbGV0b24ge1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoMiB7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDI2cHg7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMDZweDtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LXByaW1hcnk7XG4gICAgICAgICAgICAgICAgICAgIGltZyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiAtMzBweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBidXR0b24ge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICAgICAgICAgIHNwYW4sIC5wbHVzIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAucGx1cyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDI2cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogMzAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiAycHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDNweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAmW2Rpc2FibGVkXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI2KSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI2KSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hdC1idXR0b24td3JhcHBlciwgc3BhbiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhbiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYuc2tlbGV0b24ge1xuICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgICAgICAgICAgaDIge1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwcHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICBwYWRkaW5nOiAxMHB4IDA7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMDBweDtcblxuICAgICAgICAgICAgPiBkaXYgLmJvb2tpbmctZGF0YXsgXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAgMjZweDtcbiAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuY2F0ZXJpbmcge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgID4gZGl2IHtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMjVweCAyNnB4O1xuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IG5vbmU7XG5cbiAgICAgICAgICAgICAgICAgICAgaDIge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlOyAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC51bmF2YWlsYWJsZS1kZXRhaWxze1xuICAgICAgICAgICAgcCB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoMiB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAgMjZweDtcbiAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuZm9vdGVyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHBhZGRpbmc6IDI0cHggMTZweDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2U2ZTZlNjtcbiAgICAgICAgaGVpZ2h0OiA5NnB4O1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgID4gZGl2IHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG4gICAgICAgXG4gICAgICAgIGJ1dHRvbiwgLnNrZWxldG9uIHtcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktcHJpbWFyeTtcbiAgICAgICAgICAgIHdpZHRoOiAzODNweDtcbiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgICAgICAgQGluY2x1ZGUgcmVzcG9uZC10byhtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5tY2stY29udGVudC1ib2R5e1xuICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwdmggLSA4MHB4KTtcbiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHBhZGRpbmc6IDEwMHB4IDA7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgLm1jay1jb250ZW50LWJvZHl7XG4gICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG59XG4iXX0= */"] }); + } }, directives: [i3.NgIf, i3.NgClass, i4.TopbarHeaderComponent, i5.NgxSkeletonLoaderComponent, i6.TooltipDirective, i7.MatButton, i8.OrderTableComponent], pipes: [i3.TitleCasePipe], styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\n\n\n.booking-confirmation[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n display: block;\n z-index: 10;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n padding: 0;\n}\n.confirm-wrapper[_ngcontent-%COMP%] {\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n z-index: 4;\n background-color: #f0f0f0;\n overflow: hidden;\n border: 1px solid #a19f9f;\n}\n.confirm-wrapper.fixed[_ngcontent-%COMP%] {\n position: fixed;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .gap-a[_ngcontent-%COMP%] {\n height: 14px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .gap-b[_ngcontent-%COMP%] {\n height: 40px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .content[_ngcontent-%COMP%] {\n margin: 0 auto 100px auto;\n padding: 1px 20px 0 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .content[_ngcontent-%COMP%] {\n margin: 0 auto 82px auto;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .content[_ngcontent-%COMP%] {\n margin: 0 auto 82px auto;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .content[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 100%;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] {\n padding: 26px;\n padding-top: 100px;\n font-size: 18px;\n font-weight: 400;\n font-size: 16px;\n color: #333333;\n background-color: #e6e6e6;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section.skeleton[_ngcontent-%COMP%] {\n padding-top: 40px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section.skeleton[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n filter: brightness(95%);\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 32px;\n font-weight: 400;\n margin: 20px 0 20PX 0;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 24px;\n padding-top: 15px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 24px;\n padding-top: 15px;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 500;\n margin: 0;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background-color: #ffffff;\n display: flex;\n flex-wrap: wrap;\n margin: 0 auto;\n box-shadow: 0px 2px 4px rgba(5, 28, 44, 0.2), 0px 0px 1px rgba(5, 28, 44, 0.2);\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex-wrap: wrap-reverse;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex-wrap: wrap-reverse;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .pb[_ngcontent-%COMP%] {\n padding-bottom: 10px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n padding: 20px;\n flex: 3.4;\n line-height: 24px;\n padding-bottom: 15px;\n min-width: 200px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: block;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: block;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .title[_ngcontent-%COMP%] {\n width: 100%;\n flex: none;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .title[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] {\n flex: 1;\n font-size: 18px;\n font-weight: 500;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status.skeleton[_ngcontent-%COMP%] {\n background: #f8f8f8;\n color: #f8f8f8;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n text-align: center;\n margin: auto;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin-bottom: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin-top: 0;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 30px;\n margin-right: 10px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin-top: 0;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 30px;\n margin-right: 10px;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n width: 100%;\n display: block;\n color: #333333;\n margin: 0 0 20px 0;\n font-weight: 400;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] .booking-data[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n font-size: 18px;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] .booking-data[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] .booking-data[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] .booking-data[_ngcontent-%COMP%]:nth-child(2n) {\n margin-bottom: 10px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] .booking-data[_ngcontent-%COMP%] .rec-details-period[_ngcontent-%COMP%] {\n cursor: pointer;\n text-decoration: underline;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] {\n padding-top: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] {\n padding-top: 0;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding: 10px 40px 30px;\n border: 1px solid #e6e6e6;\n background-color: white;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details.skeleton[_ngcontent-%COMP%] {\n padding-top: 30px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details.skeleton[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 9px 0;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details.skeleton[_ngcontent-%COMP%] p[_ngcontent-%COMP%] .loader[_ngcontent-%COMP%] {\n margin-bottom: 5px !important;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 100%;\n max-width: 1024px;\n margin: 0 auto;\n display: flex;\n flex-wrap: wrap;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-weight: 400;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] {\n margin-top: 20px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding: 25px 35px;\n border: 1px solid #E6E6E6;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div.skeleton[_ngcontent-%COMP%] {\n margin-top: 0;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n margin-left: 26px;\n width: 306px;\n position: relative;\n margin-top: 0;\n font-weight: 500;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n position: absolute;\n left: -30px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n width: 100%;\n margin: 0 auto;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] span[_ngcontent-%COMP%], .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] .plus[_ngcontent-%COMP%] {\n color: #1F40E6;\n font-size: 16px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] .plus[_ngcontent-%COMP%] {\n font-size: 26px;\n font-weight: 300;\n position: relative;\n top: 2px;\n padding-left: 3px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%] {\n color: rgba(0, 0, 0, 0.26) !important;\n border: 1px solid #D0D0D0;\n cursor: not-allowed;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%] .mat-button-wrapper[_ngcontent-%COMP%] {\n color: rgba(0, 0, 0, 0.26) !important;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%] .mat-button-wrapper[_ngcontent-%COMP%], .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: rgba(0, 0, 0, 0.26);\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%] .mat-button-wrapper[_ngcontent-%COMP%] span[_ngcontent-%COMP%], .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%] span[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: rgba(0, 0, 0, 0.26);\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering.skeleton[_ngcontent-%COMP%] {\n margin-top: 0;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering.skeleton[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin-bottom: 0px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding: 10px 0;\n margin-bottom: 100px;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .booking-data[_ngcontent-%COMP%] {\n padding: 0 26px;\n min-width: 100%;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] {\n width: 100%;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding: 25px 26px;\n border: none;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 18px;\n width: 100%;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding: 10px 0;\n margin-bottom: 100px;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .booking-data[_ngcontent-%COMP%] {\n padding: 0 26px;\n min-width: 100%;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] {\n width: 100%;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding: 25px 26px;\n border: none;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 18px;\n width: 100%;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .unavailable-details[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n width: 100%;\n font-family: \"McKinsey Sans\";\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .unavailable-details[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n width: 100%;\n font-weight: 500;\n color: #333333;\n font-size: 20px;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .unavailable-details[_ngcontent-%COMP%] {\n padding: 0 26px;\n min-width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .unavailable-details[_ngcontent-%COMP%] {\n padding: 0 26px;\n min-width: 100%;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] {\n position: absolute;\n bottom: 0;\n left: 0;\n padding: 24px 16px;\n border: 1px solid #e6e6e6;\n height: 96px;\n width: 100%;\n background-color: white;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 100%;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%], .confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] .skeleton[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n width: 383px;\n margin: 0 auto;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%], .confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] .skeleton[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%], .confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] .skeleton[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .mck-content-body[_ngcontent-%COMP%] {\n overflow-y: scroll;\n top: 0;\n left: 0;\n box-sizing: border-box;\n display: block;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .mck-content-body.padding-100[_ngcontent-%COMP%] {\n padding: 100px 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .mck-content-body[_ngcontent-%COMP%] {\n position: fixed;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .mck-content-body[_ngcontent-%COMP%] {\n position: fixed;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNvbmZpcm1hdGlvbi9ib29raW5nLWNvbmZpcm1hdGlvbi5jb21wb25lbnQuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9taXhpbnMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNvbmZpcm1hdGlvbi9ib29raW5nLWNvbmZpcm1hdGlvbi5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNwVUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQzVDQTs7c0JBQUE7QUNWSTtFQUNJLGNBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7RUFDQSxNQUFBO0VBQ0EsT0FBQTtFQUNBLFdBQUE7RUFDQSxVQUFBO0FKOEJSO0FJM0JBO0VBRUksTUFBQTtFQUNBLE9BQUE7RUFDQSxZQUFBO0VBQ0EsV0FBQTtFQUNBLFVBQUE7RUFDQSx5QkFBQTtFQUNBLGdCQUFBO0VBQ0EseUJBQUE7QUo2Qko7QUk1Qkk7RUFDSSxlQUFBO0FKOEJSO0FJMUJRO0VBQ0ksWUFBQTtBSjRCWjtBSTFCUTtFQUNJLFlBQUE7QUo0Qlo7QUl4Qkk7RUFDSSx5QkFBQTtFQUNBLHFCQUFBO0FKMEJSO0FHN0NRO0VDaUJKO0lBSVEsd0JBQUE7RUo0QlY7QUFDRjtBRy9DUTtFQ2NKO0lBSVEsd0JBQUE7RUppQ1Y7QUFDRjtBSWhDUTtFQUNJLFdBQUE7QUprQ1o7QUk5Qkk7RUFDSSxhQUFBO0VBQ0Esa0JBQUE7RUFDQSxlQUFBO0VBQ0EsZ0JBQUE7RUFDQSxlQUFBO0VBQ0EsY0FBQTtFQUNBLHlCQUFBO0FKZ0NSO0FJL0JRO0VBQ0ksaUJBQUE7QUppQ1o7QUloQ1k7RUFDSSx1QkFBQTtBSmtDaEI7QUkvQlE7RUFDSSxlQUFBO0VBQ0EsZ0JBQUE7RUFDQSxxQkFBQTtFQUNBLDhERnBCQztBRnFEYjtBQzFGWTtFR3FESjtJQU1RLGVBQUE7SUFDQSxpQkFBQTtFSm1DZDtBQUNGO0FDaEdZO0VHcURKO0lBTVEsZUFBQTtJQUNBLGlCQUFBO0VKeUNkO0FBQ0Y7QUl2Q1E7RUFDSSxlQUFBO0VBQ0EsZ0JBQUE7RUFDQSxTQUFBO0FKeUNaO0FJdkNRO0VBQ0kseUJBQUE7RUFDQSxhQUFBO0VBQ0EsZUFBQTtFQUNBLGNBQUE7RUFDQSw4RUFBQTtBSnlDWjtBQ2xIWTtFR29FSjtJQVFRLHVCQUFBO0VKMENkO0FBQ0Y7QUN2SFk7RUdvRUo7SUFRUSx1QkFBQTtFSitDZDtBQUNGO0FJN0NZO0VBQ0ksb0JBQUE7QUorQ2hCO0FJN0NZO0VBQ0ksYUFBQTtFQUNBLGVBQUE7RUFDQSxhQUFBO0VBQ0EsU0FBQTtFQUNBLGlCQUFBO0VBQ0Esb0JBQUE7RUFDQSxnQkFBQTtBSitDaEI7QUN4SVk7RUdrRkE7SUFVUSxjQUFBO0VKZ0RsQjtBQUNGO0FDN0lZO0VHa0ZBO0lBVVEsY0FBQTtFSnFEbEI7QUFDRjtBSW5EZ0I7RUFDSSxPQUFBO0FKcURwQjtBSW5EZ0I7RUFDSSxXQUFBO0VBQ0EsVUFBQTtBSnFEcEI7QUluRG9CO0VBQ0ksZ0JBQUE7QUpxRHhCO0FJakRZO0VBQ0ksT0FBQTtFQUNBLGVBQUE7RUFDQSxnQkFBQTtBSm1EaEI7QUlsRGdCO0VBQ0ksbUJBQUE7RUFDQSxjQUFBO0FKb0RwQjtBSWxEZ0I7RUFDSSxrQkFBQTtFQUNBLFlBQUE7QUpvRHBCO0FJbkRvQjtFQUNJLGdCQUFBO0FKcUR4QjtBQzVLWTtFR21ISTtJQU9RLGFBQUE7SUFDQSxtQkFBQTtFSnNEdEI7RUlyRHNCO0lBQ0ksYUFBQTtFSnVEMUI7RUlyRHNCO0lBQ0ksV0FBQTtJQUNBLGtCQUFBO0VKdUQxQjtBQUNGO0FDekxZO0VHbUhJO0lBT1EsYUFBQTtJQUNBLG1CQUFBO0VKbUV0QjtFSWxFc0I7SUFDSSxhQUFBO0VKb0UxQjtFSWxFc0I7SUFDSSxXQUFBO0lBQ0Esa0JBQUE7RUpvRTFCO0FBQ0Y7QUloRVk7RUFDSSxXQUFBO0VBQ0EsY0FBQTtFQUNBLGNBQUE7RUFDQSxrQkFBQTtFQUNBLGdCQUFBO0FKa0VoQjtBSTdEWTtFQUNJLGVBQUE7RUFDQSxxR0Z4R007QUZ1S3RCO0FDak5ZO0VHZ0pBO0lBS1EsZUFBQTtFSmdFbEI7QUFDRjtBQ3ROWTtFR2dKQTtJQUtRLGVBQUE7RUpxRWxCO0FBQ0Y7QUlsRVk7RUFDSSxtQkFBQTtBSm9FaEI7QUlsRVk7RUFDSSxlQUFBO0VBQ0EsMEJBQUE7QUpvRWhCO0FDbE9ZO0VHdUNSO0lBNEhRLGNBQUE7RUptRVY7QUFDRjtBQ3ZPWTtFR3VDUjtJQTRIUSxjQUFBO0VKd0VWO0FBQ0Y7QUlwRUk7RUFDSSx1QkFBQTtFQUNBLHlCQUFBO0VBQ0EsdUJBQUE7QUpzRVI7QUlyRVE7RUFDSSxpQkFBQTtBSnVFWjtBSXRFWTtFQUNJLGFBQUE7QUp3RWhCO0FJdkVnQjtFQUNJLDZCQUFBO0FKeUVwQjtBSXJFUTtFQUNJLFdBQUE7RUFDQSxpQkFBQTtFQUNBLGNBQUE7RUFDQSxhQUFBO0VBQ0EsZUFBQTtBSnVFWjtBSXRFWTtFQUNJLE9BQUE7QUp3RWhCO0FJckVRO0VBQ0ksZ0JBQUE7QUp1RVo7QUlyRVE7RUFDSSxnQkFBQTtBSnVFWjtBSXRFWTtFQUNJLGtCQUFBO0VBQ0EseUJBQUE7QUp3RWhCO0FJdkVnQjtFQUNJLGFBQUE7QUp5RXBCO0FJdkVnQjtFQUNJLGVBQUE7RUFDQSxpQkFBQTtFQUNBLFlBQUE7RUFDQSxrQkFBQTtFQUNBLGFBQUE7RUFDQSxnQkFBQTtFQUNBLHFHRnZLRTtBRmdQdEI7QUl4RW9CO0VBQ0ksa0JBQUE7RUFDQSxXQUFBO0FKMEV4QjtBSXZFZ0I7RUFDSSxXQUFBO0VBQ0EsY0FBQTtBSnlFcEI7QUl4RW9CO0VBQ0ksY0xwT2Q7RUtxT2MsZUFBQTtBSjBFeEI7QUl4RW9CO0VBQ0ksZUFBQTtFQUNBLGdCQUFBO0VBQ0Esa0JBQUE7RUFDQSxRQUFBO0VBQ0EsaUJBQUE7QUowRXhCO0FJeEVvQjtFQUNJLHFDQUFBO0VBQ0EseUJBQUE7RUFDQSxtQkFBQTtBSjBFeEI7QUl6RXdCO0VBQ0kscUNBQUE7QUoyRTVCO0FJekV3QjtFQUNJLDBCQUFBO0FKMkU1QjtBSTFFNEI7RUFDSSwwQkFBQTtBSjRFaEM7QUl0RVk7RUFDSSxhQUFBO0FKd0VoQjtBSXZFZ0I7RUFDSSxrQkFBQTtBSnlFcEI7QUNqVVk7RUd3S1I7SUFzRlEsZUFBQTtJQUNBLG9CQUFBO0VKdUVWO0VJckVVO0lBQ1EsZUFBQTtJQUNBLGVBQUE7RUp1RWxCO0VJcEVVO0lBQ0ksV0FBQTtFSnNFZDtFSXJFYztJQUNJLGtCQUFBO0lBQ0EsWUFBQTtFSnVFbEI7RUlyRWtCO0lBQ0ksZUFBQTtJQUNBLFdBQUE7RUp1RXRCO0VJckVrQjtJQUNJLFdBQUE7RUp1RXRCO0FBQ0Y7QUN6Vlk7RUd3S1I7SUFzRlEsZUFBQTtJQUNBLG9CQUFBO0VKK0ZWO0VJN0ZVO0lBQ1EsZUFBQTtJQUNBLGVBQUE7RUorRmxCO0VJNUZVO0lBQ0ksV0FBQTtFSjhGZDtFSTdGYztJQUNJLGtCQUFBO0lBQ0EsWUFBQTtFSitGbEI7RUk3RmtCO0lBQ0ksZUFBQTtJQUNBLFdBQUE7RUorRnRCO0VJN0ZrQjtJQUNJLFdBQUE7RUorRnRCO0FBQ0Y7QUl6Rlk7RUFDSSxXQUFBO0VBQ0EsNEJIN01LO0FEd1NyQjtBSXpGWTtFQUNJLFdBQUE7RUFDQSxnQkFBQTtFQUNBLGNBQUE7RUFDQSxlQUFBO0VBQ0EsNEJIcE5LO0FEK1NyQjtBQzVYWTtFR3VSSjtJQWNRLGVBQUE7SUFDQSxlQUFBO0VKMkZkO0FBQ0Y7QUNsWVk7RUd1Uko7SUFjUSxlQUFBO0lBQ0EsZUFBQTtFSmlHZDtBQUNGO0FJN0ZJO0VBQ0ksa0JBQUE7RUFDQSxTQUFBO0VBQ0EsT0FBQTtFQUNBLGtCQUFBO0VBQ0EseUJBQUE7RUFDQSxZQUFBO0VBQ0EsV0FBQTtFQUNBLHVCQUFBO0FKK0ZSO0FJOUZRO0VBQ0ksV0FBQTtBSmdHWjtBSTdGUTtFQUNJLHFHRi9RVTtFRWdSVixZQUFBO0VBQ0EsY0FBQTtBSitGWjtBRy9ZUTtFQzZTQTtJQUtRLFdBQUE7RUppR2Q7QUFDRjtBR2paUTtFQzBTQTtJQUtRLFdBQUE7RUpzR2Q7QUFDRjtBSWxHSTtFQUVJLGtCQUFBO0VBQ0EsTUFBQTtFQUNBLE9BQUE7RUFFQSxzQkFBQTtFQUNBLGNBQUE7QUprR1I7QUlqR1E7RUFDSSxnQkFBQTtBSm1HWjtBQzlhWTtFRytVSjtJQUNJLGVBQUE7RUprR1Y7QUFDRjtBQ25iWTtFRytVSjtJQUNJLGVBQUE7RUp1R1Y7QUFDRiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNvbmZpcm1hdGlvbi9ib29raW5nLWNvbmZpcm1hdGlvbi5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIiRwcmltYXJ5OiAjMUY0MEU2O1xuJGZvcm0tbGFiZWw6ICMwNTFDMkM7XG4kc2Vjb25kYXJ5LWxhYmVsOiAjNzY3Njc2O1xuJGJvcmRlcjogI0IzQjNCMztcbiRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkOiAjRDBEMEQwO1xuJGNoaXAtY29sb3I6ICMzMzMzMzM7XG4kcGxhY2Vob2xkZXItY29sb3I6ICM3RjdGN0Y7XG4kYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDtcbiRwYWdlLWJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4kc2VsZWN0ZWQtb3B0aW9uOiAjRTZFNkU2O1xuJGNvbG9yLWJyYW5kLXllbGxvdzogI2ZmZDA0ODtcbiRsaWdodC15ZWxsb3c6ICNmZmYzY2U7XG4kY29hY2htYXJrLXRleHQ6ICM2ZjRkMDA7XG4kZXJyb3ItY29sb3I6ICNFMTJFNDA7XG4kbm8tZmlsdGVycy1jb2xvcjogI0JDQkNCQztcbiRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjogI0Y0RjRGNDtcbiRwcmltYXJ5LWhpZ2hsaWdodDogIzIyNTFGRjtcbiRzY3JvbGxiYXItY29sb3I6ICM3NTc1NzU7XG5cbiRhdmFpbGFibGUtY29sb3I6ICM1RDlENTI7XG4kYXZhaWxhYmxlLWJ5LXJlcXVlc3QtY29sb3I6ICNGNUI1M0Y7XG4kaW4tdXNlLWNvbG9yOiAjRDQ0ODNFO1xuJG5vdC1ib29rYWJsZS1jb2xvcjogI0NDQ0NDQztcblxuJG1vZGFsLWJvZHktaGVhZGluZzogIzRENEQ0RDtcbiRhbGVydC1vdmVybGF5LWJnOiByZ2JhKDUsIDI4LCA0NCwgMC44NSk7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvYWNobWFyay1iZzogI0VCRUJGNjtcbiRjb2FjaG1hcmstZGFyay10ZXh0OiAjMUIxQjE5O1xuJGVycm9yLXRleHQ6ICNmZmY7XG5cbi8qKlxuICogU3BhY2luZ1xuICovXG5cbi8vIDRweFxuJHNwYWNpbmctc21hbGxlc3Q6IDAuMjVyZW07XG5cbi8vIDhweFxuJHNwYWNpbmcteHhzbWFsbDogMC41cmVtO1xuXG4vLyAxMnB4XG4kc3BhY2luZy14c21hbGw6IDAuNzVyZW07XG5cbi8vIDE2cHhcbiRzcGFjaW5nLXNtYWxsOiAxcmVtO1xuXG4vLyAyMHB4XG4kc3BhY2luZy1zbWFsbC1tZWRpdW06IDEuMjVyZW07XG5cbi8vIDI0cHhcbiRzcGFjaW5nLW1lZGl1bTogMS41cmVtO1xuXG4vLyAyOHB4XG4kc3BhY2luZy1tZWRpdW0tbGFyZ2U6IDEuNzVyZW07XG5cbi8vIDMycHhcbiRzcGFjaW5nLWxhcmdlOiAycmVtO1xuXG4vLyA0OHB4XG4kc3BhY2luZy14bGFyZ2U6IDNyZW07XG5cbi8vIDY0cHhcbiRzcGFjaW5nLXh4bGFyZ2U6IDRyZW07XG5cbi8vIDk2cHhcbiRzcGFjaW5nLWxhcmdlc3Q6IDZyZW07XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kZGV2aWNlLW1vYmlsZS1zaXplOiA0NTBweDtcbiRkZXZpY2UtdGFibGV0LXNpemU6IDgwMHB4O1xuJGRldmljZS1sYXB0b3Atc2l6ZTogMTAyNHB4O1xuXG4kZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZTogMTA0OHB4O1xuJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemU6IDEyODBweDtcblxuXG46ZXhwb3J0IHtcbiAgICBwcmltYXJ5OiAkcHJpbWFyeTtcbiAgICBzZWNvbmRhcnlMYWJlbDogJHNlY29uZGFyeS1sYWJlbDtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbiRpY29uLXNtYWxsOiAxNnB4O1xuJGljb24tbWVkaXVtOiAyNHB4O1xuJGljb24tbGFyZ2U6IDMycHg7XG4kaWNvbi14bGFyZ2U6IDQ4cHg7XG4iLCIvKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLmJvb2tpbmctY29uZmlybWF0aW9uIC5oZWFkZXIge1xuICBkaXNwbGF5OiBibG9jaztcbiAgei1pbmRleDogMTA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMDtcbn1cblxuLmNvbmZpcm0td3JhcHBlciB7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbiAgei1pbmRleDogNDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYm9yZGVyOiAxcHggc29saWQgI2ExOWY5Zjtcbn1cbi5jb25maXJtLXdyYXBwZXIuZml4ZWQge1xuICBwb3NpdGlvbjogZml4ZWQ7XG59XG4uY29uZmlybS13cmFwcGVyIC5nYXAtYSB7XG4gIGhlaWdodDogMTRweDtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmdhcC1iIHtcbiAgaGVpZ2h0OiA0MHB4O1xufVxuLmNvbmZpcm0td3JhcHBlciAuY29udGVudCB7XG4gIG1hcmdpbjogMCBhdXRvIDEwMHB4IGF1dG87XG4gIHBhZGRpbmc6IDFweCAyMHB4IDAgMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLmNvbnRlbnQge1xuICAgIG1hcmdpbjogMCBhdXRvIDgycHggYXV0bztcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLmNvbnRlbnQge1xuICAgIG1hcmdpbjogMCBhdXRvIDgycHggYXV0bztcbiAgfVxufVxuLmNvbmZpcm0td3JhcHBlciAuY29udGVudCA+IGRpdiB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiB7XG4gIHBhZGRpbmc6IDI2cHg7XG4gIHBhZGRpbmctdG9wOiAxMDBweDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2O1xufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbi5za2VsZXRvbiB7XG4gIHBhZGRpbmctdG9wOiA0MHB4O1xufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbi5za2VsZXRvbiAuaGVhZGVyIHtcbiAgZmlsdGVyOiBicmlnaHRuZXNzKDk1JSk7XG59XG4uY29uZmlybS13cmFwcGVyIC5zZWN0aW9uIGgxIHtcbiAgZm9udC1zaXplOiAzMnB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBtYXJnaW46IDIwcHggMCAyMFBYIDA7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gaDEge1xuICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICBwYWRkaW5nLXRvcDogMTVweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gaDEge1xuICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICBwYWRkaW5nLXRvcDogMTVweDtcbiAgfVxufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiBoMiB7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgbWFyZ2luOiAwO1xufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiA+IGRpdiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGJveC1zaGFkb3c6IDBweCAycHggNHB4IHJnYmEoNSwgMjgsIDQ0LCAwLjIpLCAwcHggMHB4IDFweCByZ2JhKDUsIDI4LCA0NCwgMC4yKTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYge1xuICAgIGZsZXgtd3JhcDogd3JhcC1yZXZlcnNlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiA+IGRpdiB7XG4gICAgZmxleC13cmFwOiB3cmFwLXJldmVyc2U7XG4gIH1cbn1cbi5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgLnBiIHtcbiAgcGFkZGluZy1ib3R0b206IDEwcHg7XG59XG4uY29uZmlybS13cmFwcGVyIC5zZWN0aW9uID4gZGl2ID4gZGl2IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBwYWRkaW5nOiAyMHB4O1xuICBmbGV4OiAzLjQ7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMTVweDtcbiAgbWluLXdpZHRoOiAyMDBweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgPiBkaXYge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiA+IGRpdiA+IGRpdiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cbi5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgPiBkaXYgPiBkaXYge1xuICBmbGV4OiAxO1xufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiA+IGRpdiA+IGRpdiAudGl0bGUge1xuICB3aWR0aDogMTAwJTtcbiAgZmxleDogbm9uZTtcbn1cbi5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgPiBkaXYgLnRpdGxlIGgyIHtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbi5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgLnN0YXR1cyB7XG4gIGZsZXg6IDE7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbi5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgLnN0YXR1cy5za2VsZXRvbiB7XG4gIGJhY2tncm91bmQ6ICNmOGY4Zjg7XG4gIGNvbG9yOiAjZjhmOGY4O1xufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiA+IGRpdiAuc3RhdHVzID4gZGl2IHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXJnaW46IGF1dG87XG59XG4uY29uZmlybS13cmFwcGVyIC5zZWN0aW9uID4gZGl2IC5zdGF0dXMgPiBkaXYgcCB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuY29uZmlybS13cmFwcGVyIC5zZWN0aW9uID4gZGl2IC5zdGF0dXMgPiBkaXYge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgfVxuICAuY29uZmlybS13cmFwcGVyIC5zZWN0aW9uID4gZGl2IC5zdGF0dXMgPiBkaXYgcCB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgfVxuICAuY29uZmlybS13cmFwcGVyIC5zZWN0aW9uID4gZGl2IC5zdGF0dXMgPiBkaXYgaW1nIHtcbiAgICB3aWR0aDogMzBweDtcbiAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuY29uZmlybS13cmFwcGVyIC5zZWN0aW9uID4gZGl2IC5zdGF0dXMgPiBkaXYge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgfVxuICAuY29uZmlybS13cmFwcGVyIC5zZWN0aW9uID4gZGl2IC5zdGF0dXMgPiBkaXYgcCB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgfVxuICAuY29uZmlybS13cmFwcGVyIC5zZWN0aW9uID4gZGl2IC5zdGF0dXMgPiBkaXYgaW1nIHtcbiAgICB3aWR0aDogMzBweDtcbiAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gIH1cbn1cbi5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgaDIge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG59XG4uY29uZmlybS13cmFwcGVyIC5zZWN0aW9uIC5ib29raW5nLWRhdGEgPiBkaXYge1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gLmJvb2tpbmctZGF0YSA+IGRpdiB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiAuYm9va2luZy1kYXRhID4gZGl2IHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gIH1cbn1cbi5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gLmJvb2tpbmctZGF0YTpudGgtY2hpbGQoMm4pIHtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cbi5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gLmJvb2tpbmctZGF0YSAucmVjLWRldGFpbHMtcGVyaW9kIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24ge1xuICAgIHBhZGRpbmctdG9wOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiB7XG4gICAgcGFkZGluZy10b3A6IDA7XG4gIH1cbn1cbi5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMge1xuICBwYWRkaW5nOiAxMHB4IDQwcHggMzBweDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U2ZTZlNjtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzLnNrZWxldG9uIHtcbiAgcGFkZGluZy10b3A6IDMwcHg7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzLnNrZWxldG9uIHAge1xuICBtYXJnaW46IDlweCAwO1xufVxuLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscy5za2VsZXRvbiBwIC5sb2FkZXIge1xuICBtYXJnaW4tYm90dG9tOiA1cHggIWltcG9ydGFudDtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgPiBkaXYge1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzID4gZGl2ID4gZGl2IHtcbiAgZmxleDogMTtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgbGFiZWwge1xuICBmb250LXdlaWdodDogNDAwO1xufVxuLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAuY2F0ZXJpbmcge1xuICBtYXJnaW4tdG9wOiAyMHB4O1xufVxuLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAuY2F0ZXJpbmcgPiBkaXYge1xuICBwYWRkaW5nOiAyNXB4IDM1cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdi5za2VsZXRvbiB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiBoMiB7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgbWFyZ2luLWxlZnQ6IDI2cHg7XG4gIHdpZHRoOiAzMDZweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tdG9wOiAwO1xuICBmb250LXdlaWdodDogNTAwO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQ2FsaWJyaSwgQ29yYmVsLCBIZWx2ZXRpY2EsIFJvYm90bywgRHJvaWQsIHNhbnMtc2VyaWY7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiBoMiBpbWcge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IC0zMHB4O1xufVxuLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAuY2F0ZXJpbmcgPiBkaXYgYnV0dG9uIHtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAuY2F0ZXJpbmcgPiBkaXYgYnV0dG9uIHNwYW4sIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2IGJ1dHRvbiAucGx1cyB7XG4gIGNvbG9yOiAjMUY0MEU2O1xuICBmb250LXNpemU6IDE2cHg7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiBidXR0b24gLnBsdXMge1xuICBmb250LXNpemU6IDI2cHg7XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAycHg7XG4gIHBhZGRpbmctbGVmdDogM3B4O1xufVxuLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAuY2F0ZXJpbmcgPiBkaXYgYnV0dG9uW2Rpc2FibGVkXSB7XG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjYpICFpbXBvcnRhbnQ7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiBidXR0b25bZGlzYWJsZWRdIC5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI2KSAhaW1wb3J0YW50O1xufVxuLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAuY2F0ZXJpbmcgPiBkaXYgYnV0dG9uW2Rpc2FibGVkXSAubWF0LWJ1dHRvbi13cmFwcGVyLCAuY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiBidXR0b25bZGlzYWJsZWRdIHNwYW4ge1xuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI2KTtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2IGJ1dHRvbltkaXNhYmxlZF0gLm1hdC1idXR0b24td3JhcHBlciBzcGFuLCAuY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiBidXR0b25bZGlzYWJsZWRdIHNwYW4gc3BhbiB7XG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjYpO1xufVxuLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAuY2F0ZXJpbmcuc2tlbGV0b24ge1xuICBtYXJnaW4tdG9wOiAwO1xufVxuLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAuY2F0ZXJpbmcuc2tlbGV0b24gaDIge1xuICBtYXJnaW4tYm90dG9tOiAwcHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIHtcbiAgICBwYWRkaW5nOiAxMHB4IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMTAwcHg7XG4gIH1cbiAgLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyA+IGRpdiAuYm9va2luZy1kYXRhIHtcbiAgICBwYWRkaW5nOiAwIDI2cHg7XG4gICAgbWluLXdpZHRoOiAxMDAlO1xuICB9XG4gIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAuY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiB7XG4gICAgcGFkZGluZzogMjVweCAyNnB4O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgfVxuICAuY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiBoMiB7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2IGJ1dHRvbiB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIHtcbiAgICBwYWRkaW5nOiAxMHB4IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMTAwcHg7XG4gIH1cbiAgLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyA+IGRpdiAuYm9va2luZy1kYXRhIHtcbiAgICBwYWRkaW5nOiAwIDI2cHg7XG4gICAgbWluLXdpZHRoOiAxMDAlO1xuICB9XG4gIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAuY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiB7XG4gICAgcGFkZGluZzogMjVweCAyNnB4O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgfVxuICAuY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiBoMiB7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2IGJ1dHRvbiB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbi5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLnVuYXZhaWxhYmxlLWRldGFpbHMgcCB7XG4gIHdpZHRoOiAxMDAlO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC51bmF2YWlsYWJsZS1kZXRhaWxzIGgyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBmb250LXNpemU6IDIwcHg7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLnVuYXZhaWxhYmxlLWRldGFpbHMge1xuICAgIHBhZGRpbmc6IDAgMjZweDtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC51bmF2YWlsYWJsZS1kZXRhaWxzIHtcbiAgICBwYWRkaW5nOiAwIDI2cHg7XG4gICAgbWluLXdpZHRoOiAxMDAlO1xuICB9XG59XG4uY29uZmlybS13cmFwcGVyIC5mb290ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgcGFkZGluZzogMjRweCAxNnB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTZlNmU2O1xuICBoZWlnaHQ6IDk2cHg7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmZvb3RlciA+IGRpdiB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLmNvbmZpcm0td3JhcHBlciAuZm9vdGVyIGJ1dHRvbiwgLmNvbmZpcm0td3JhcHBlciAuZm9vdGVyIC5za2VsZXRvbiB7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbiAgd2lkdGg6IDM4M3B4O1xuICBtYXJnaW46IDAgYXV0bztcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLmZvb3RlciBidXR0b24sIC5jb25maXJtLXdyYXBwZXIgLmZvb3RlciAuc2tlbGV0b24ge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuZm9vdGVyIGJ1dHRvbiwgLmNvbmZpcm0td3JhcHBlciAuZm9vdGVyIC5za2VsZXRvbiB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbi5jb25maXJtLXdyYXBwZXIgLm1jay1jb250ZW50LWJvZHkge1xuICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4uY29uZmlybS13cmFwcGVyIC5tY2stY29udGVudC1ib2R5LnBhZGRpbmctMTAwIHtcbiAgcGFkZGluZzogMTAwcHggMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLm1jay1jb250ZW50LWJvZHkge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLm1jay1jb250ZW50LWJvZHkge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgfVxufSIsIkBpbXBvcnQgXCJ2YXJzXCI7XG5cbkBtaXhpbiBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRzaXplLCAkcXVhbGlmaWVyKSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAaWYgKCRxdWFsaWZpZXIgPT0gbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSBpZiAoJHF1YWxpZmllciA9PSBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWF4LXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5AbWl4aW4gYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRtaW4sICRtYXgpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkbWluKSBhbmQgKG1heC13aWR0aDogJG1heCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIHRoaXMgaXMgYSBjb3B5IG9mIHJlc3BvbmQtdG8uIHdlIGRvbid0IHdhbnQgdG8gcHJlc2VydmUgdGhhdCBtZXRob2Qgc2luY2UgdGhlIGJyZWFrcG9pbnRzIG1heSBkaXZlcmdlIGZyb20gdGhlIG9sZCBVSS5cbkBtaXhpbiBpcy1zY3JlZW4tc2l6ZSgkbWVkaWE6IGFsbCwgJG9yaWVudGF0aW9uOiBub25lKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cblxuQG1peGluIHBhZ2UtcGFkZGluZyB7XG4gICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbDtcbn1cblxuLy8gRm9udCBNaXhpbnNcbiRmb250LW1ja2luc2V5LXNhbnM6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuJGZvbnQtdGhlaW5oYXJkdDogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4kZm9udC1ib3dlcjogXCJCb3dlclwiO1xuXG5AbWl4aW4gYm93ZXItYm9sZCB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWJvd2VyO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBtY2tpbnNleS1zYW5zIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gZGlzcGxheS0xIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiA0cmVtOyAvLyA2NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4NzsgLy8gNzZweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMiB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDYwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS00IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogM3JlbTsgLy8gNDhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE2NjsgLy8gNTZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS01IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjgzMzsgLy8gMzRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjQyOyAvLyA0MHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS03IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyOHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTEge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA0OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi43NXJlbTsgLy8gNDRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDUycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTIge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTExOyAvLyA0NHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNDhweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMyB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIyMjsgLy8gNDRweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjg4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1NTsgLy8gMjhweFxuICAgIH1cbn1cblxuQG1peGluIGJvZHktZGVmYXVsdCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNnB4XG4gICAgfVxufVxuXG4vLy8gRG9lc250IGV4aXN0IGluIE1EUy5cbkBtaXhpbiBib2R5LXRpbnkge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtOyAvLyAxMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjRweFxuICAgIH1cbn1cblxuQG1peGluIGZvcm0tbGFiZWwge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LXRoZWluaGFyZHQ7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGNvbG9yOiAkcGxhY2Vob2xkZXItY29sb3I7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbn1cblxuQG1peGluIGNoaXAtbGFiZWwge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBjaGVja2JveC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGNvbG9yOiBibGFjaztcbn1cblxuLy8gYm9yZGVyc1xuXG5AbWl4aW4gbWNrLWNoZWNrYm94LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay10aGluLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXItbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBib3JkZXItY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudC1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuXG4vLyBmdW5jdGlvbnNcblxuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG5AbWl4aW4gbWF4LWxpbmVzKCRjb3VudCkge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiAkY291bnQ7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbn1cblxuLy8gaW1hZ2VzXG5AbWl4aW4gbWNrLWljb24oJHdpZHRoLCAkYXNzZXQsICRoZWlnaHQ6ICR3aWR0aCwgICRhc3NldFBhdGg6IFwibGlicy91aS9zcmMvbGliL2ljb25zXCIsKSB7XG4gICAgd2lkdGg6ICR3aWR0aDtcbiAgICBoZWlnaHQ6ICRoZWlnaHQ7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiI3skYXNzZXRQYXRofS8jeyRhc3NldH1cIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuXG5cbkBtaXhpbiBtY2stc21hbGwtaWNvbigkbW9iaWxlLWFzc2V0LCAkZGVza3RvcC1hc3NldDogJG1vYmlsZS1hc3NldCkge1xuICAgIEBpbmNsdWRlIG1jay1pY29uKDE2cHgsICRhc3NldDogJG1vYmlsZS1hc3NldCk7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICRhc3NldDogJGRlc2t0b3AtYXNzZXQpO1xuICAgIH1cbn1cblxuLy8gc2tlbGV0b25cbkBtaXhpbiBza2VsZXRvbi1iZyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWltYWdlLXNpemUge1xuICAgIHdpZHRoOiA4MXB4O1xuICAgIGhlaWdodDogODJweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDIxOXB4O1xuICAgICAgICBoZWlnaHQ6IDExOXB4O1xuICAgIH1cbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLXN0YXR1cy1zaXplIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMTE3cHg7XG4gICAgICAgIGhlaWdodDogNzhweDtcbiAgICB9XG59XG4iLCIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRjb2xvci1icmFuZC1lbGVjdHJpYy1ibHVlOiAjMjI1MWZmO1xuJGNvbG9yLWJyYW5kLWRlZXAtYmx1ZTogIzA1MWMyYztcbiRjb2xvci1icmFuZC1jeWFuOiAjMDBhOWY0O1xuXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGZvbnQtZGFyazogIzAwMDtcbiRmb250LWxpZ2h0OiAjZmZmO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcbiRncmVlbjE6ICMyMTk2NTM7XG5cbiRwZW5kaW5nOiAjZmZiMzAwO1xuJHBlbmRpbmctbGlnaHQ6IGxpZ2h0ZW4oJHBlbmRpbmcsIDEwKTtcbiRwZW5kaW5nLWRhcms6IGRhcmtlbigkcGVuZGluZywgMTApO1xuXG4kZXJyb3I6ICNlNTM5MzU7XG4kZXJyb3ItbGlnaHQ6IGxpZ2h0ZW4oJGVycm9yLCAxMCk7XG4kZXJyb3ItZGFyazogZGFya2VuKCRlcnJvciwgMTApO1xuXG4kY29sb3ItcHJpbWFyeTogIzE5MzdlYTtcbiRjb2xvci1wcmltYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG4kY29sb3ItcHJpbWFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcblxuJGNvbG9yLXNlY29uZGFyeTogIzQyODVGNDtcbiRjb2xvci1zZWNvbmRhcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuJGNvbG9yLXNlY29uZGFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuXG4kYmFja2dyb3VuZDogI2YwZjBmMDtcbiRmb290ZXItYmFjazogIzI2MzIzODtcbiRoZWFkZXItYmFjazogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMDUxQzJDLCAjMDUxQzJDIDQwJSwgIzBCMjQ1MyA2MCUsICMxRjQwRTYgMTAwJSk7XG5cbiRjb2xvci10ZXJuYXJ5OiAjMDUxYzJjO1xuXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cblxuJGZvbnQtc3RhY2s6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuXG4kaGVhZGluZy1mb250OiBcIkxhcmlzaE1jS2luc2V5XCIsICdHZW9yZ2lhJywgc2VyaWY7XG4kZm9udDogJGZvbnQtc3RhY2s7XG5cbiRmb250LWZhbWlseS1wcmltYXJ5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbiRmb250LWZhbWlseS1zZWNvbmRhcnk6IFwiQm93ZXJcIiwgR2VvcmdpYSwgXCJUaW1lcyBOZXcgUm9tYW5cIiBzZXJpZjtcblxuJGJhc2Utc2l6ZTogMTZweDtcbiR0YWJsZXQtc2l6ZTogMTZweDtcbiRtb2JpbGUtc2l6ZTogMTZweDtcblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbiRicmVhay1tb2JpbGU6IDQ1MHB4O1xuJGJyZWFrLXRhYmxldDogODAwcHg7XG4kYnJlYWstbGFwdG9wOiAxMDI0cHg7XG5cbiRicmVhay1sYW5kc2NhcGUtbW9iaWxlOiA4MDBweDtcbiRicmVhay1sYW5kc2NhcGUtdGFibGV0OiAxMDQ4cHg7XG4kYnJlYWstbGFuZHNjYXBlLWxhcHRvcDogMTI4MHB4O1xuIiwiQGltcG9ydCAnLi92YXJpYWJsZXMnO1xuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbkBtaXhpbiBib3gtc2hhZG93KCRjb2xvcjogIzAwMCwgJGRlcHRoOiAxKSB7XG4gICAgYm94LXNoYWRvdzogMCAxcHggM3B4IDFweCAqICgkZGVwdGggLSAxKSByZ2JhKCMwMDAsIC4yKSxcbiAgICAgICAgICAgICAgICAwIDFweCAxcHggMCByZ2JhKCMwMDAsIC4xNCksXG4gICAgICAgICAgICAgICAgMCAycHggMXB4IC0xcHggcmdiYSgjMDAwLCAuMTIpO1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuQG1peGluIHJlc3BvbmQtdG8oJG1lZGlhKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9ICBAZWxzZSBpZiAkbWVkaWEgPT0gbGF0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9QGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIkBpbXBvcnQgJ2xpYnMvdWkvc3JjL2xpYi9taXhpbnMnO1xuQGltcG9ydCAnbWl4aW5zJztcblxuLmJvb2tpbmctY29uZmlybWF0aW9uIHtcbiAgICAuaGVhZGVyIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHotaW5kZXg6IDEwO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgfSAgXG59XG4uY29uZmlybS13cmFwcGVyIHtcbiAgICAvLyBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHotaW5kZXg6IDQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNhMTlmOWY7XG4gICAgJi5maXhlZCB7XG4gICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB9XG5cbiAgICAuZ2FwIHtcbiAgICAgICAgJi1hIHtcbiAgICAgICAgICAgIGhlaWdodDogMTRweDtcbiAgICAgICAgfVxuICAgICAgICAmLWIge1xuICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmNvbnRlbnQge1xuICAgICAgICBtYXJnaW46IDAgYXV0byAxMDBweCBhdXRvO1xuICAgICAgICBwYWRkaW5nOiAxcHggMjBweCAwIDA7XG4gICAgICAgIEBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgICAgICAgICBtYXJnaW46IDAgYXV0byA4MnB4IGF1dG87XG4gICAgICAgIH1cbiAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuc2VjdGlvbiB7XG4gICAgICAgIHBhZGRpbmc6IDI2cHg7XG4gICAgICAgIHBhZGRpbmctdG9wOiAxMDBweDtcbiAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2O1xuICAgICAgICAmLnNrZWxldG9uIHtcbiAgICAgICAgICAgIHBhZGRpbmctdG9wOiA0MHB4O1xuICAgICAgICAgICAgLmhlYWRlciB7XG4gICAgICAgICAgICAgICAgZmlsdGVyOiBicmlnaHRuZXNzKDk1JSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaDEge1xuICAgICAgICAgICAgZm9udC1zaXplOiAzMnB4O1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgICAgIG1hcmdpbjogMjBweCAwIDIwUFggMDtcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1zdGFjaztcbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLXRvcDogMTVweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBoMiB7XG4gICAgICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICB9XG4gICAgICAgID4gZGl2IHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICBib3gtc2hhZG93OiAwcHggMnB4IDRweCByZ2JhKDUsIDI4LCA0NCwgMC4yKSwgMHB4IDBweCAxcHggcmdiYSg1LCAyOCwgNDQsIDAuMik7XG5cbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcC1yZXZlcnNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucGIge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICAgICAgICAgICAgZmxleDogMy40O1xuICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAxNXB4O1xuICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMjAwcHg7XG5cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAudGl0bGUge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICAgICAgZmxleDogbm9uZTtcblxuICAgICAgICAgICAgICAgICAgICBoMntcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAuc3RhdHVzIHtcbiAgICAgICAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgICAgICYuc2tlbGV0b24ge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZjhmOGY4O1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogI2Y4ZjhmODtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogYXV0bztcbiAgICAgICAgICAgICAgICAgICAgcCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICBwe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpbWd7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMwcHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OyAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaDIge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMCAwIDIwcHggMDtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLmJvb2tpbmctZGF0YXsgXG4gICAgICAgICAgICA+ZGl2IHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1wcmltYXJ5O1xuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICY6bnRoLWNoaWxkKDJuKSB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC5yZWMtZGV0YWlscy1wZXJpb2Qge1xuICAgICAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICBwYWRkaW5nLXRvcDogMDtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLmRldGFpbHMge1xuICAgICAgICBwYWRkaW5nOiAxMHB4IDQwcHggMzBweDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2U2ZTZlNjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgICYuc2tlbGV0b24ge1xuICAgICAgICAgICAgcGFkZGluZy10b3A6IDMwcHg7XG4gICAgICAgICAgICBwIHtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDlweCAwO1xuICAgICAgICAgICAgICAgIC5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHggIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDEwMjRweDtcbiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgICAgID4gZGl2IHtcbiAgICAgICAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxhYmVsIHtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgIH1cbiAgICAgICAgLmNhdGVyaW5nIHtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgICAgICAgICA+IGRpdiB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMjVweCAzNXB4O1xuICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gICAgICAgICAgICAgICAgJi5za2VsZXRvbiB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGgyIHtcbiAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogMjZweDtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMwNnB4O1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktcHJpbWFyeTtcbiAgICAgICAgICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IC0zMHB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgICAgICAgICAgICAgICAgc3BhbiwgLnBsdXMge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC5wbHVzIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjZweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3A6IDJweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogM3B4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICZbZGlzYWJsZWRdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjYpICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRDBEMEQwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjYpICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAubWF0LWJ1dHRvbi13cmFwcGVyLCBzcGFuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi5za2VsZXRvbiB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgICAgICAgICBoMiB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDBweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHggMDtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwMHB4O1xuXG4gICAgICAgICAgICA+IGRpdiAuYm9va2luZy1kYXRheyBcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMCAyNnB4O1xuICAgICAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5jYXRlcmluZyB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAyNXB4IDI2cHg7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcblxuICAgICAgICAgICAgICAgICAgICBoMiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBidXR0b24ge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7ICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLnVuYXZhaWxhYmxlLWRldGFpbHN7XG4gICAgICAgICAgICBwIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGgyIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMCAyNnB4O1xuICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5mb290ZXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcGFkZGluZzogMjRweCAxNnB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZTZlNmU2O1xuICAgICAgICBoZWlnaHQ6IDk2cHg7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cbiAgICAgICBcbiAgICAgICAgYnV0dG9uLCAuc2tlbGV0b24ge1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1wcmltYXJ5O1xuICAgICAgICAgICAgd2lkdGg6IDM4M3B4O1xuICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLm1jay1jb250ZW50LWJvZHl7XG4gICAgICAgIC8vIGhlaWdodDogY2FsYygxMDB2aCAtIDgwcHgpO1xuICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgLy8gcGFkZGluZzogMTAwcHggMDtcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICYucGFkZGluZy0xMDAge1xuICAgICAgICAgICAgcGFkZGluZzogMTAwcHggMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgLm1jay1jb250ZW50LWJvZHl7XG4gICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG59XG4iXX0= */"] }); /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(BookingConfirmationComponent, [{ type: core_1.Component, args: [{ selector: 'booking-confirmation', template: `
-
+
-
+
-
+

{{ data?.isEditSeries || (booking.is_recurrent && booking.recurrence_type === 'master') ? 'Recurring Series' : 'Booking' }} {{data?.status.title}}

@@ -29535,21 +29969,24 @@ BookingConfirmationComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BookingConfi

Room is no longer available for your chosen date and time

-
-
Status: {{data?.status.text}}
-
Date: {{data?.dateString}}
-
Time: {{data?.timeString}}
-
{{data?.typeString}} meeting ({{data?.durationString}})
-
-
-
{{booking?.recurrence_period === 'list' ? 'Specific dates' : booking?.recurrence_period | titlecase}} - - Conflicts({{data?.isConflictWithOccurences()?.total_Conflicts}}) -
-
Start date: {{data?.dateString}}
-
End date: {{data?.endDateString}}
-
Time: {{data?.timeString}}
-
{{data?.type}} meeting ({{data?.durationString}})
-
+
+
Status: {{data?.status.text}}
+
Date: {{data?.dateString}}
+
Time: {{data?.timeString}}
+
{{data?.typeString}} meeting ({{data?.durationString}})
+
+
+
+ + {{booking?.recurrence_period === 'list' ? 'Specific dates' : booking?.recurrence_period | titlecase}} + + - Conflicts({{data?.isConflictWithOccurences()?.total_Conflicts}}) +
+
Start date: {{data?.dateString}}
+
End date: {{data?.endDateString}}
+
Time: {{data?.timeString}}
+
{{data?.type}} meeting ({{data?.durationString}})
+
@@ -29683,6 +30120,8 @@ BookingConfirmationComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BookingConfi type: core_1.Input }], modal: [{ type: core_1.Input + }], placeIntoModal: [{ + type: core_1.Input }], data: [{ type: core_1.Input, args: ['dataForConfirmation'] @@ -29710,19 +30149,19 @@ const operators_1 = __webpack_require__(/*! rxjs/operators */ "../../node_module const booking_form_base_component_1 = __webpack_require__(/*! ./booking-form-base.component */ "./src/app/booking/booking-create/booking-form-base.component.ts"); const i0 = __webpack_require__(/*! @angular/core */ "../../node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); const i1 = __webpack_require__(/*! @angular/common */ "../../node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js"); -const i2 = __webpack_require__(/*! ../room-booking-details-form/room-booking-details-form.component */ "./src/app/booking/room-booking-details-form/room-booking-details-form.component.ts"); -const i3 = __webpack_require__(/*! ../booking-confirmation/booking-confirmation.component */ "./src/app/booking/booking-confirmation/booking-confirmation.component.ts"); -const i4 = __webpack_require__(/*! ../../components/topbar-header/topbar-header.component */ "./src/app/components/topbar-header/topbar-header.component.ts"); +const i2 = __webpack_require__(/*! ../booking-confirmation/booking-confirmation.component */ "./src/app/booking/booking-confirmation/booking-confirmation.component.ts"); +const i3 = __webpack_require__(/*! ../../components/topbar-header/topbar-header.component */ "./src/app/components/topbar-header/topbar-header.component.ts"); +const i4 = __webpack_require__(/*! ../room-booking-details-form/room-booking-details-form.component */ "./src/app/booking/room-booking-details-form/room-booking-details-form.component.ts"); const i5 = __webpack_require__(/*! @angular/material/button */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/button.js"); function BookingCreateComponent_div_1_Template(rf, ctx) { if (rf & 1) { - const _r8 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div", 16); - i0.ɵɵelement(1, "img", 17); - i0.ɵɵelementStart(2, "p", 18); + const _r5 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div", 6); + i0.ɵɵelement(1, "img", 7); + i0.ɵɵelementStart(2, "p", 8); i0.ɵɵtext(3); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(4, "img", 19); - i0.ɵɵlistener("click", function BookingCreateComponent_div_1_Template_img_click_4_listener() { i0.ɵɵrestoreView(_r8); const ctx_r7 = i0.ɵɵnextContext(); return ctx_r7.hideWarningBanner(); }); + i0.ɵɵelementStart(4, "img", 9); + i0.ɵɵlistener("click", function BookingCreateComponent_div_1_Template_img_click_4_listener() { i0.ɵɵrestoreView(_r5); const ctx_r4 = i0.ɵɵnextContext(); return ctx_r4.hideWarningBanner(); }); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { @@ -29730,22 +30169,34 @@ function BookingCreateComponent_div_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵadvance(3); i0.ɵɵtextInterpolate(ctx_r0.warningMessage); } } -function BookingCreateComponent_a_topbar_header_3_Template(rf, ctx) { if (rf & 1) { - const _r10 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "a-topbar-header", 20); - i0.ɵɵlistener("closeCallback", function BookingCreateComponent_a_topbar_header_3_Template_a_topbar_header_closeCallback_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r9 = i0.ɵɵnextContext(); return ctx_r9.discardChanges(); }); +function BookingCreateComponent_div_2_a_topbar_header_1_Template(rf, ctx) { if (rf & 1) { + const _r9 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "a-topbar-header", 13); + i0.ɵɵlistener("closeCallback", function BookingCreateComponent_div_2_a_topbar_header_1_Template_a_topbar_header_closeCallback_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r8 = i0.ɵɵnextContext(2); return ctx_r8.discardChanges(); }); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r1 = i0.ɵɵnextContext(); - i0.ɵɵproperty("mode", ctx_r1.TopBarHeaderMode.Light)("modal", true)("noSurvey", true); + const ctx_r6 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("mode", ctx_r6.TopBarHeaderMode.Light)("modal", true)("noSurvey", true); } } -function BookingCreateComponent_a_topbar_header_4_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelement(0, "a-topbar-header", 21); +function BookingCreateComponent_div_2_a_topbar_header_2_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelement(0, "a-topbar-header", 14); } if (rf & 2) { - const ctx_r2 = i0.ɵɵnextContext(); - i0.ɵɵproperty("mode", ctx_r2.TopBarHeaderMode.Light)("back", ctx_r2.backRoute); + const ctx_r7 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("mode", ctx_r7.TopBarHeaderMode.Light)("back", ctx_r7.backRoute); } } -function BookingCreateComponent_div_19_Template(rf, ctx) { if (rf & 1) { +function BookingCreateComponent_div_2_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 10); + i0.ɵɵtemplate(1, BookingCreateComponent_div_2_a_topbar_header_1_Template, 1, 3, "a-topbar-header", 11); + i0.ɵɵtemplate(2, BookingCreateComponent_div_2_a_topbar_header_2_Template, 1, 2, "a-topbar-header", 12); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r1 = i0.ɵɵnextContext(); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r1.modal); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", !ctx_r1.modal); +} } +function BookingCreateComponent_div_3_div_14_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div"); i0.ɵɵelementStart(1, "div"); i0.ɵɵtext(2); @@ -29758,32 +30209,32 @@ function BookingCreateComponent_div_19_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r3 = i0.ɵɵnextContext(); + const ctx_r10 = i0.ɵɵnextContext(2); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Date: ", ctx_r3.dateString, ""); + i0.ɵɵtextInterpolate1("Date: ", ctx_r10.dateString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Time: ", ctx_r3.timeString, ""); + i0.ɵɵtextInterpolate1("Time: ", ctx_r10.timeString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate2("", ctx_r3.type, " meeting (", ctx_r3.durationString, ")"); + i0.ɵɵtextInterpolate2("", ctx_r10.type, " meeting (", ctx_r10.durationString, ")"); } } -function BookingCreateComponent_div_20_span_4_Template(rf, ctx) { if (rf & 1) { - const _r13 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "span", 24); - i0.ɵɵlistener("click", function BookingCreateComponent_div_20_span_4_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r12 = i0.ɵɵnextContext(2); return ctx_r12.openRecurrenceConflictsModal(ctx_r12.booking == null ? null : ctx_r12.booking.room); }); +function BookingCreateComponent_div_3_div_15_span_4_Template(rf, ctx) { if (rf & 1) { + const _r14 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "span", 25); + i0.ɵɵlistener("click", function BookingCreateComponent_div_3_div_15_span_4_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r13 = i0.ɵɵnextContext(3); return ctx_r13.openRecurrenceConflictsModal(ctx_r13.booking == null ? null : ctx_r13.booking.room); }); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r11 = i0.ɵɵnextContext(2); + const ctx_r12 = i0.ɵɵnextContext(3); var tmp_0_0 = null; i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate1(" - Conflicts(", (tmp_0_0 = ctx_r11.isConflictWithOccurences()) == null ? null : tmp_0_0.total_Conflicts, ") "); + i0.ɵɵtextInterpolate1(" - Conflicts(", (tmp_0_0 = ctx_r12.isConflictWithOccurences()) == null ? null : tmp_0_0.total_Conflicts, ") "); } } -function BookingCreateComponent_div_20_Template(rf, ctx) { if (rf & 1) { +function BookingCreateComponent_div_3_div_15_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div"); - i0.ɵɵelementStart(1, "div", 22); + i0.ɵɵelementStart(1, "div", 23); i0.ɵɵtext(2); i0.ɵɵpipe(3, "titlecase"); - i0.ɵɵtemplate(4, BookingCreateComponent_div_20_span_4_Template, 2, 1, "span", 23); + i0.ɵɵtemplate(4, BookingCreateComponent_div_3_div_15_span_4_Template, 2, 1, "span", 24); i0.ɵɵelementEnd(); i0.ɵɵelementStart(5, "div"); i0.ɵɵtext(6); @@ -29799,63 +30250,140 @@ function BookingCreateComponent_div_20_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r4 = i0.ɵɵnextContext(); + const ctx_r11 = i0.ɵɵnextContext(2); var tmp_1_0 = null; - const currVal_1 = (tmp_1_0 = ctx_r4.isConflictWithOccurences()) == null ? null : tmp_1_0.is_conflict; + const currVal_1 = (tmp_1_0 = ctx_r11.isConflictWithOccurences()) == null ? null : tmp_1_0.is_conflict; i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("", (ctx_r4.data == null ? null : ctx_r4.data.value == null ? null : ctx_r4.data.value.recurrence_period) === "list" ? "Specific dates" : i0.ɵɵpipeBind1(3, 7, ctx_r4.data == null ? null : ctx_r4.data.value == null ? null : ctx_r4.data.value.recurrence_period), " "); + i0.ɵɵtextInterpolate1("", (ctx_r11.data == null ? null : ctx_r11.data.value == null ? null : ctx_r11.data.value.recurrence_period) === "list" ? "Specific dates" : i0.ɵɵpipeBind1(3, 7, ctx_r11.data == null ? null : ctx_r11.data.value == null ? null : ctx_r11.data.value.recurrence_period), " "); i0.ɵɵadvance(2); i0.ɵɵproperty("ngIf", currVal_1); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Start date: ", ctx_r4.dateString, ""); + i0.ɵɵtextInterpolate1("Start date: ", ctx_r11.dateString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("End date: ", ctx_r4.endDateString, ""); + i0.ɵɵtextInterpolate1("End date: ", ctx_r11.endDateString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Time: ", ctx_r4.timeString, ""); + i0.ɵɵtextInterpolate1("Time: ", ctx_r11.timeString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate2("", ctx_r4.type, " meeting (", ctx_r4.durationString, ")"); + i0.ɵɵtextInterpolate2("", ctx_r11.type, " meeting (", ctx_r11.durationString, ")"); } } -function BookingCreateComponent_div_30_Template(rf, ctx) { if (rf & 1) { - const _r15 = i0.ɵɵgetCurrentView(); +function BookingCreateComponent_div_3_Template(rf, ctx) { if (rf & 1) { + const _r16 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div", 15); + i0.ɵɵelementStart(1, "div", 16); + i0.ɵɵelementStart(2, "div", 17); + i0.ɵɵelementStart(3, "div", 18); + i0.ɵɵelementStart(4, "div"); + i0.ɵɵelementStart(5, "h1"); + i0.ɵɵtext(6); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(7, "div", 19); + i0.ɵɵelementStart(8, "div"); + i0.ɵɵelementStart(9, "app-room-booking-details-form", 20); + i0.ɵɵlistener("submitForm", function BookingCreateComponent_div_3_Template_app_room_booking_details_form_submitForm_9_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r15 = i0.ɵɵnextContext(); return ctx_r15.submitForm($event); })("validateForm", function BookingCreateComponent_div_3_Template_app_room_booking_details_form_validateForm_9_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r17 = i0.ɵɵnextContext(); return ctx_r17.validateForm($event); }); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(10, "div", 21); + i0.ɵɵelementStart(11, "div"); + i0.ɵɵelementStart(12, "h2"); + i0.ɵɵtext(13); + i0.ɵɵelementEnd(); + i0.ɵɵtemplate(14, BookingCreateComponent_div_3_div_14_Template, 7, 4, "div", 22); + i0.ɵɵtemplate(15, BookingCreateComponent_div_3_div_15_Template, 13, 9, "div", 22); + i0.ɵɵelementStart(16, "div"); + i0.ɵɵelementStart(17, "div"); + i0.ɵɵtext(18); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(19, "div"); + i0.ɵɵtext(20); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(21, "div"); + i0.ɵɵtext(22); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r2 = i0.ɵɵnextContext(); + i0.ɵɵadvance(6); + i0.ɵɵtextInterpolate1("Book ", ctx_r2.booking == null ? null : ctx_r2.booking.space == null ? null : ctx_r2.booking.space.local_name, ""); + i0.ɵɵadvance(3); + i0.ɵɵproperty("booking", ctx_r2.booking)("triggerSubmit", ctx_r2.submitTimestamp); + i0.ɵɵadvance(4); + i0.ɵɵtextInterpolate1("", (ctx_r2.data == null ? null : ctx_r2.data.value == null ? null : ctx_r2.data.value.is_recurrent) ? "Recurring" : "Room", " Booking Details"); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", !(ctx_r2.data == null ? null : ctx_r2.data.value == null ? null : ctx_r2.data.value.is_recurrent)); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r2.data == null ? null : ctx_r2.data.value == null ? null : ctx_r2.data.value.is_recurrent); + i0.ɵɵadvance(3); + i0.ɵɵtextInterpolate2("Address: ", ctx_r2.building == null ? null : ctx_r2.building.address, ", ", ctx_r2.building == null ? null : ctx_r2.building.city, ""); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate1("Room: ", ctx_r2.booking == null ? null : ctx_r2.booking.space == null ? null : ctx_r2.booking.space.local_name, ""); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate1("Capacity: ", ctx_r2.booking == null ? null : ctx_r2.booking.space == null ? null : ctx_r2.booking.space.capacity, ""); +} } +function BookingCreateComponent_div_4_div_2_Template(rf, ctx) { if (rf & 1) { + const _r21 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "div"); - i0.ɵɵelementStart(1, "button", 25); - i0.ɵɵlistener("click", function BookingCreateComponent_div_30_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r15); const ctx_r14 = i0.ɵɵnextContext(); return ctx_r14.goToBackRoute(); }); + i0.ɵɵelementStart(1, "button", 28); + i0.ɵɵlistener("click", function BookingCreateComponent_div_4_div_2_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r21); const ctx_r20 = i0.ɵɵnextContext(2); return ctx_r20.goToBackRoute(); }); i0.ɵɵtext(2, "Back"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(3, "button", 26); - i0.ɵɵlistener("click", function BookingCreateComponent_div_30_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r15); const ctx_r16 = i0.ɵɵnextContext(); return ctx_r16.createBooking(); }); + i0.ɵɵelementStart(3, "button", 29); + i0.ɵɵlistener("click", function BookingCreateComponent_div_4_div_2_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r21); const ctx_r22 = i0.ɵɵnextContext(2); return ctx_r22.createBooking(); }); i0.ɵɵtext(4); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r5 = i0.ɵɵnextContext(); + const ctx_r18 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); - i0.ɵɵproperty("disabled", ctx_r5.loading); + i0.ɵɵproperty("disabled", ctx_r18.loading); i0.ɵɵadvance(2); - i0.ɵɵclassProp("disabled", ctx_r5.invalidForm); - i0.ɵɵproperty("disabled", ctx_r5.loading || ctx_r5.invalidForm); + i0.ɵɵclassProp("disabled", ctx_r18.invalidForm); + i0.ɵɵproperty("disabled", ctx_r18.loading || ctx_r18.invalidForm); i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate2("", ctx_r5.isEditSeries ? "Update" : "Create", " Booking", ctx_r5.is_request ? " Request" : "", ""); + i0.ɵɵtextInterpolate2("", ctx_r18.isEditSeries ? "Update" : "Create", " Booking", ctx_r18.is_request ? " Request" : "", ""); } } -function BookingCreateComponent_div_31_Template(rf, ctx) { if (rf & 1) { - const _r18 = i0.ɵɵgetCurrentView(); +function BookingCreateComponent_div_4_div_3_Template(rf, ctx) { if (rf & 1) { + const _r24 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "div"); - i0.ɵɵelementStart(1, "button", 25); - i0.ɵɵlistener("click", function BookingCreateComponent_div_31_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r18); const ctx_r17 = i0.ɵɵnextContext(); return ctx_r17.discardChanges(); }); + i0.ɵɵelementStart(1, "button", 28); + i0.ɵɵlistener("click", function BookingCreateComponent_div_4_div_3_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r24); const ctx_r23 = i0.ɵɵnextContext(2); return ctx_r23.discardChanges(); }); i0.ɵɵtext(2, "Back"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(3, "button", 26); - i0.ɵɵlistener("click", function BookingCreateComponent_div_31_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r18); const ctx_r19 = i0.ɵɵnextContext(); return ctx_r19.createBooking(); }); + i0.ɵɵelementStart(3, "button", 29); + i0.ɵɵlistener("click", function BookingCreateComponent_div_4_div_3_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r24); const ctx_r25 = i0.ɵɵnextContext(2); return ctx_r25.createBooking(); }); i0.ɵɵtext(4, "Update Booking"); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r6 = i0.ɵɵnextContext(); + const ctx_r19 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); - i0.ɵɵproperty("disabled", ctx_r6.loading); + i0.ɵɵproperty("disabled", ctx_r19.loading); + i0.ɵɵadvance(2); + i0.ɵɵclassProp("disabled", ctx_r19.invalidForm); + i0.ɵɵproperty("disabled", ctx_r19.loading || ctx_r19.invalidForm); +} } +const _c0 = function (a0) { return { "fixed": a0 }; }; +function BookingCreateComponent_div_4_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 26); + i0.ɵɵelementStart(1, "div", 27); + i0.ɵɵtemplate(2, BookingCreateComponent_div_4_div_2_Template, 5, 6, "div", 22); + i0.ɵɵtemplate(3, BookingCreateComponent_div_4_div_3_Template, 5, 4, "div", 22); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r3 = i0.ɵɵnextContext(); + i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3, _c0, !ctx_r3.placeIntoModal)); i0.ɵɵadvance(2); - i0.ɵɵclassProp("disabled", ctx_r6.invalidForm); - i0.ɵɵproperty("disabled", ctx_r6.loading || ctx_r6.invalidForm); + i0.ɵɵproperty("ngIf", !ctx_r3.modal && !ctx_r3.placeIntoModal); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r3.placeIntoModal); } } class BookingCreateComponent extends booking_form_base_component_1.BookingFormBaseComponent { ngOnInit() { @@ -29911,94 +30439,29 @@ class BookingCreateComponent extends booking_form_base_component_1.BookingFormBa } exports.BookingCreateComponent = BookingCreateComponent; BookingCreateComponent.ɵfac = function BookingCreateComponent_Factory(t) { return ɵBookingCreateComponent_BaseFactory(t || BookingCreateComponent); }; -BookingCreateComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BookingCreateComponent, selectors: [["app-booking-create"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 33, vars: 21, consts: [[1, "mck-column", "mck-content-expand", "mck-content-page-container", "booking-form-base-container"], ["class", "fixed warning banner", 4, "ngIf"], [1, "header"], [3, "mode", "modal", "noSurvey", "closeCallback", 4, "ngIf"], [3, "mode", "back", 4, "ngIf"], [1, "mck-column", "mck-center", "results-container", "mck-scroll"], [1, "mck-column", "mck-scroll", "mck-content-expand-width"], [1, "booking-content", "mck-column", "mck-center", "mck-content-body"], [1, "details"], [1, "section"], [3, "booking", "triggerSubmit", "submitForm", "validateForm"], [1, "section", "bottom"], [4, "ngIf"], [1, "bottom-panel"], [1, "buttons"], [3, "confirmed", "loading", "modal", "dataForConfirmation", "callback"], [1, "fixed", "warning", "banner"], ["src", "assets/icon/booking_cancelled.svg"], [1, "banner-text"], ["src", "assets/icon/close-red.svg", 3, "click"], [3, "mode", "modal", "noSurvey", "closeCallback"], [3, "mode", "back"], [1, "rec-details-period"], [3, "click", 4, "ngIf"], [3, "click"], ["mat-button", "", "color", "secondary", 1, "mck-secondary-button", 3, "disabled", "click"], ["mat-button", "", "color", "primary", 1, "mck-primary-button", 3, "disabled", "click"]], template: function BookingCreateComponent_Template(rf, ctx) { if (rf & 1) { +BookingCreateComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BookingCreateComponent, selectors: [["app-booking-create"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 6, vars: 13, consts: [[1, "mck-column", "mck-content-expand", "mck-content-page-container", "booking-form-base-container"], ["class", "fixed warning banner", 4, "ngIf"], ["class", "header", 4, "ngIf"], ["class", "mck-column mck-center results-container mck-scroll", 4, "ngIf"], ["class", "bottom-panel", 3, "ngClass", 4, "ngIf"], [3, "confirmed", "loading", "placeIntoModal", "modal", "dataForConfirmation", "callback"], [1, "fixed", "warning", "banner"], ["src", "assets/icon/booking_cancelled.svg"], [1, "banner-text"], ["src", "assets/icon/close-red.svg", 3, "click"], [1, "header"], [3, "mode", "modal", "noSurvey", "closeCallback", 4, "ngIf"], [3, "mode", "back", 4, "ngIf"], [3, "mode", "modal", "noSurvey", "closeCallback"], [3, "mode", "back"], [1, "mck-column", "mck-center", "results-container", "mck-scroll"], [1, "mck-column", "mck-scroll", "mck-content-expand-width"], [1, "booking-content", "mck-column", "mck-center", "mck-content-body"], [1, "details"], [1, "section"], [3, "booking", "triggerSubmit", "submitForm", "validateForm"], [1, "section", "bottom"], [4, "ngIf"], [1, "rec-details-period"], [3, "click", 4, "ngIf"], [3, "click"], [1, "bottom-panel", 3, "ngClass"], [1, "buttons"], ["mat-button", "", "color", "secondary", 1, "mck-secondary-button", 3, "disabled", "click"], ["mat-button", "", "color", "primary", 1, "mck-primary-button", 3, "disabled", "click"]], template: function BookingCreateComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 0); i0.ɵɵtemplate(1, BookingCreateComponent_div_1_Template, 5, 1, "div", 1); - i0.ɵɵelementStart(2, "div", 2); - i0.ɵɵtemplate(3, BookingCreateComponent_a_topbar_header_3_Template, 1, 3, "a-topbar-header", 3); - i0.ɵɵtemplate(4, BookingCreateComponent_a_topbar_header_4_Template, 1, 2, "a-topbar-header", 4); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(5, "div", 5); - i0.ɵɵelementStart(6, "div", 6); - i0.ɵɵelementStart(7, "div", 7); - i0.ɵɵelementStart(8, "div", 8); - i0.ɵɵelementStart(9, "div"); - i0.ɵɵelementStart(10, "h1"); - i0.ɵɵtext(11); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(12, "div", 9); - i0.ɵɵelementStart(13, "div"); - i0.ɵɵelementStart(14, "app-room-booking-details-form", 10); - i0.ɵɵlistener("submitForm", function BookingCreateComponent_Template_app_room_booking_details_form_submitForm_14_listener($event) { return ctx.submitForm($event); })("validateForm", function BookingCreateComponent_Template_app_room_booking_details_form_validateForm_14_listener($event) { return ctx.validateForm($event); }); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(15, "div", 11); - i0.ɵɵelementStart(16, "div"); - i0.ɵɵelementStart(17, "h2"); - i0.ɵɵtext(18); - i0.ɵɵelementEnd(); - i0.ɵɵtemplate(19, BookingCreateComponent_div_19_Template, 7, 4, "div", 12); - i0.ɵɵtemplate(20, BookingCreateComponent_div_20_Template, 13, 9, "div", 12); - i0.ɵɵelementStart(21, "div"); - i0.ɵɵelementStart(22, "div"); - i0.ɵɵtext(23); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(24, "div"); - i0.ɵɵtext(25); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(26, "div"); - i0.ɵɵtext(27); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(28, "div", 13); - i0.ɵɵelementStart(29, "div", 14); - i0.ɵɵtemplate(30, BookingCreateComponent_div_30_Template, 5, 6, "div", 12); - i0.ɵɵtemplate(31, BookingCreateComponent_div_31_Template, 5, 4, "div", 12); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(32, "booking-confirmation", 15); - i0.ɵɵlistener("callback", function BookingCreateComponent_Template_booking_confirmation_callback_32_listener() { return ctx.callback(); }); + i0.ɵɵtemplate(2, BookingCreateComponent_div_2_Template, 3, 2, "div", 2); + i0.ɵɵtemplate(3, BookingCreateComponent_div_3_Template, 23, 10, "div", 3); + i0.ɵɵtemplate(4, BookingCreateComponent_div_4_Template, 4, 5, "div", 4); + i0.ɵɵelementStart(5, "booking-confirmation", 5); + i0.ɵɵlistener("callback", function BookingCreateComponent_Template_booking_confirmation_callback_5_listener() { return ctx.callback(); }); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - i0.ɵɵclassProp("fullpage-modal", ctx.modal); + i0.ɵɵclassProp("fullpage-modal", ctx.modal)("limit-height", ctx.placeIntoModal); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.showWarningBanner); - i0.ɵɵadvance(2); - i0.ɵɵproperty("ngIf", ctx.modal); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", !ctx.modal); - i0.ɵɵadvance(7); - i0.ɵɵtextInterpolate1("Book ", ctx.booking == null ? null : ctx.booking.space == null ? null : ctx.booking.space.local_name, ""); - i0.ɵɵadvance(3); - i0.ɵɵproperty("booking", ctx.booking)("triggerSubmit", ctx.submitTimestamp); - i0.ɵɵadvance(4); - i0.ɵɵtextInterpolate1("", (ctx.data == null ? null : ctx.data.value == null ? null : ctx.data.value.is_recurrent) ? "Recurring" : "Room", " Booking Details"); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", !(ctx.data == null ? null : ctx.data.value == null ? null : ctx.data.value.is_recurrent)); + i0.ɵɵproperty("ngIf", !ctx.placeIntoModal); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.data == null ? null : ctx.data.value == null ? null : ctx.data.value.is_recurrent); - i0.ɵɵadvance(3); - i0.ɵɵtextInterpolate2("Address: ", ctx.building == null ? null : ctx.building.address, ", ", ctx.building == null ? null : ctx.building.city, ""); - i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Room: ", ctx.booking == null ? null : ctx.booking.space == null ? null : ctx.booking.space.local_name, ""); - i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Capacity: ", ctx.booking == null ? null : ctx.booking.space == null ? null : ctx.booking.space.capacity, ""); - i0.ɵɵadvance(3); - i0.ɵɵproperty("ngIf", !ctx.modal); + i0.ɵɵproperty("ngIf", !ctx.confirmed && !ctx.loading); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.modal); + i0.ɵɵproperty("ngIf", !ctx.confirmed && !ctx.loading); i0.ɵɵadvance(1); - i0.ɵɵproperty("confirmed", ctx.confirmed)("loading", ctx.loading)("modal", ctx.modal)("dataForConfirmation", ctx.dataForConfirmation); - } }, directives: [i1.NgIf, i2.RoomBookingDetailsFormComponent, i3.BookingConfirmationComponent, i4.TopbarHeaderComponent, i5.MatButton], pipes: [i1.TitleCasePipe], styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\n\n\n\n\n\n\n.loading[_ngcontent-%COMP%] {\n background-color: rgba(255, 255, 255, 0.5);\n padding: 3em;\n}\n.booking-content[_ngcontent-%COMP%] {\n margin: 0 auto 0 auto;\n padding: 1px 20px 120px 0;\n}\n.booking-content[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 100%;\n}\n.booking-content.open[_ngcontent-%COMP%] {\n margin: 0 auto 280px auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n border: 1px solid #E6E6E6;\n background-color: white;\n padding: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 1024px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 32px;\n margin: 10px 0 40px;\n font-weight: 500;\n width: 100%;\n text-align: center;\n font-family: \"Bower\";\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-size: 16px;\n padding: 4px 0 20px 0;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n padding: 0 18px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 400;\n font-size: 16px;\n color: #333333;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 400;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n max-width: 671px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n line-height: 24px;\n padding-bottom: 15px;\n min-width: 200px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n width: 100%;\n display: block;\n color: #333333;\n margin: 0 0 20px 0;\n font-weight: 500;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n padding: 28px 20px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] .rec-details-period[_ngcontent-%COMP%] {\n cursor: pointer;\n text-decoration: underline;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background-color: white;\n padding: 20px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0px 0px 100px 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0px 0px 100px 0;\n }\n}\n.bottom-panel[_ngcontent-%COMP%] {\n position: fixed;\n bottom: 0;\n width: 100%;\n min-height: 80px;\n background-color: white;\n border: 1px solid #E6E6E6;\n z-index: 2;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 24px 16px;\n border: 1px solid #E6E6E6;\n width: 100%;\n max-width: none;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 880px;\n margin: 0 auto;\n display: flex;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex: 1;\n height: 48px;\n font-size: 16px;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 5px;\n border: 1px solid #D0D0D0;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 5px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9taXhpbnMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNwVUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQTFEQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDNUNBOztzQkFBQTtBQ1BBO0VBQ0UsMENBQUE7RUFDQSxZQUFBO0FKdUNGO0FJckNBO0VBQ0UscUJBQUE7RUFDQSx5QkFBQTtBSndDRjtBSXZDRTtFQUNFLFdBQUE7QUp5Q0o7QUl2Q0U7RUFDRSx5QkFBQTtBSnlDSjtBSXZDRTtFQUNFLHlCQUFBO0VBQ0EsdUJBQUE7RUFDQSxVQUFBO0FKeUNKO0FHNUNRO0VDQU47SUFLSSxvQkFBQTtFSjJDSjtBQUNGO0FHOUNRO0VDSE47SUFLSSxvQkFBQTtFSmdESjtBQUNGO0FJL0NJO0VBQ0UsaUJBQUE7RUFDQSxjQUFBO0FKaUROO0FJL0NJO0VBQ0UsZUFBQTtFQUNBLG1CQUFBO0VBQ0EsZ0JBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7RUFDQSxvQkFBQTtBSmlETjtBSS9DSTtFQUNFLGNBQUE7RUFDQSxlQUFBO0VBQ0EscUJBQUE7QUppRE47QUloRE07RUFDRSxlQUFBO0FKa0RSO0FJL0NJO0VBQ0UsZUFBQTtFQUNBLGdCQUFBO0VBQ0EsZUFBQTtFQUNBLGNBQUE7QUppRE47QUloRE07RUFDRSxlQUFBO0VBQ0EsZ0JBQUE7QUprRFI7QUloRE07RUFDRSxhQUFBO0VBQ0EsZUFBQTtFQUNBLGdCQUFBO0VBQ0EsY0FBQTtBSmtEUjtBSWpEUTtFQUNFLE9BQUE7RUFDQSxpQkFBQTtFQUNBLG9CQUFBO0VBQ0EsZ0JBQUE7QUptRFY7QUlqRFE7RUFDRSxXQUFBO0VBQ0EsY0FBQTtFQUNBLGNBQUE7RUFDQSxrQkFBQTtFQUNBLGdCQUFBO0VBQ0EscUdGdEJZO0FGeUV0QjtBQ25IWTtFRzBESjtJQVFJLGVBQUE7RUpxRFY7QUFDRjtBQ3hIWTtFRzBESjtJQVFJLGVBQUE7RUowRFY7QUFDRjtBSXZETTtFQUNFLHlCQUFBO0VBQ0Esa0JBQUE7QUp5RFI7QUl4RFE7RUFDRSxlQUFBO0VBQ0EsMEJBQUE7QUowRFY7QUNySVk7RUdzRU47SUFRSSxxQkFBQTtFSjJEUjtBQUNGO0FDMUlZO0VHc0VOO0lBUUkscUJBQUE7RUpnRVI7QUFDRjtBSS9EUTtFQUNFLHVCQUFBO0VBQ0EsYUFBQTtBSmlFVjtBQ25KWTtFR3FGQTtJQUNFLGlCQUFBO0VKaUVaO0FBQ0Y7QUN4Slk7RUdxRkE7SUFDRSxpQkFBQTtFSnNFWjtBQUNGO0FDN0pZO0VHRVo7SUE2Rkksd0JBQUE7RUprRUY7QUFDRjtBQ2xLWTtFR0VaO0lBNkZJLHdCQUFBO0VKdUVGO0FBQ0Y7QUlyRUE7RUFDRSxlQUFBO0VBQ0EsU0FBQTtFQUNBLFdBQUE7RUFDQSxnQkFBQTtFQUNBLHVCQUFBO0VBQ0EseUJBQUE7RUFDQSxVQUFBO0FKd0VGO0FJdEVFO0VBQ0Usa0JBQUE7RUFDQSx5QkFBQTtFQUNBLFdBQUE7RUFDQSxlQUFBO0FKd0VKO0FJdEVJO0VBQ0UsZ0JBQUE7RUFDQSxjQUFBO0VBQ0EsYUFBQTtBSndFTjtBSXZFTTtFQUNFLE9BQUE7RUFDQSxZQUFBO0VBQ0EsZUFBQTtBSnlFUjtBSXZFTTtFQUNFLGlCQUFBO0VBQ0EseUJBQUE7QUp5RVI7QUl2RU07RUFDRSxnQkFBQTtBSnlFUjtBQ3hNWTtFRzJHVjtJQXdCSSxlQUFBO0VKeUVKO0VJdkVNO0lBQ0UsY0FBQTtFSnlFUjtFSXZFTTtJQUNFLGlCQUFBO0VKeUVSO0VJdkVNO0lBQ0UsZ0JBQUE7RUp5RVI7QUFDRjtBQ3ROWTtFRzJHVjtJQXdCSSxlQUFBO0VKdUZKO0VJckZNO0lBQ0UsY0FBQTtFSnVGUjtFSXJGTTtJQUNFLGlCQUFBO0VKdUZSO0VJckZNO0lBQ0UsZ0JBQUE7RUp1RlI7QUFDRjtBQ3BPWTtFR3dKUjtJQUNFLFlBQUE7RUpnRko7RUkvRUk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUppRk47QUFDRjtBQzlPWTtFR3dKUjtJQUNFLFlBQUE7RUp5Rko7RUl4Rkk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUowRk47QUFDRiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIiRwcmltYXJ5OiAjMUY0MEU2O1xuJGZvcm0tbGFiZWw6ICMwNTFDMkM7XG4kc2Vjb25kYXJ5LWxhYmVsOiAjNzY3Njc2O1xuJGJvcmRlcjogI0IzQjNCMztcbiRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkOiAjRDBEMEQwO1xuJGNoaXAtY29sb3I6ICMzMzMzMzM7XG4kcGxhY2Vob2xkZXItY29sb3I6ICM3RjdGN0Y7XG4kYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDtcbiRwYWdlLWJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4kc2VsZWN0ZWQtb3B0aW9uOiAjRTZFNkU2O1xuJGNvbG9yLWJyYW5kLXllbGxvdzogI2ZmZDA0ODtcbiRsaWdodC15ZWxsb3c6ICNmZmYzY2U7XG4kY29hY2htYXJrLXRleHQ6ICM2ZjRkMDA7XG4kZXJyb3ItY29sb3I6ICNFMTJFNDA7XG4kbm8tZmlsdGVycy1jb2xvcjogI0JDQkNCQztcbiRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjogI0Y0RjRGNDtcbiRwcmltYXJ5LWhpZ2hsaWdodDogIzIyNTFGRjtcbiRzY3JvbGxiYXItY29sb3I6ICM3NTc1NzU7XG5cbiRhdmFpbGFibGUtY29sb3I6ICM1RDlENTI7XG4kYXZhaWxhYmxlLWJ5LXJlcXVlc3QtY29sb3I6ICNGNUI1M0Y7XG4kaW4tdXNlLWNvbG9yOiAjRDQ0ODNFO1xuJG5vdC1ib29rYWJsZS1jb2xvcjogI0NDQ0NDQztcblxuJG1vZGFsLWJvZHktaGVhZGluZzogIzRENEQ0RDtcbiRhbGVydC1vdmVybGF5LWJnOiByZ2JhKDUsIDI4LCA0NCwgMC44NSk7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvYWNobWFyay1iZzogI0VCRUJGNjtcbiRjb2FjaG1hcmstZGFyay10ZXh0OiAjMUIxQjE5O1xuJGVycm9yLXRleHQ6ICNmZmY7XG5cbi8qKlxuICogU3BhY2luZ1xuICovXG5cbi8vIDRweFxuJHNwYWNpbmctc21hbGxlc3Q6IDAuMjVyZW07XG5cbi8vIDhweFxuJHNwYWNpbmcteHhzbWFsbDogMC41cmVtO1xuXG4vLyAxMnB4XG4kc3BhY2luZy14c21hbGw6IDAuNzVyZW07XG5cbi8vIDE2cHhcbiRzcGFjaW5nLXNtYWxsOiAxcmVtO1xuXG4vLyAyMHB4XG4kc3BhY2luZy1zbWFsbC1tZWRpdW06IDEuMjVyZW07XG5cbi8vIDI0cHhcbiRzcGFjaW5nLW1lZGl1bTogMS41cmVtO1xuXG4vLyAyOHB4XG4kc3BhY2luZy1tZWRpdW0tbGFyZ2U6IDEuNzVyZW07XG5cbi8vIDMycHhcbiRzcGFjaW5nLWxhcmdlOiAycmVtO1xuXG4vLyA0OHB4XG4kc3BhY2luZy14bGFyZ2U6IDNyZW07XG5cbi8vIDY0cHhcbiRzcGFjaW5nLXh4bGFyZ2U6IDRyZW07XG5cbi8vIDk2cHhcbiRzcGFjaW5nLWxhcmdlc3Q6IDZyZW07XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kZGV2aWNlLW1vYmlsZS1zaXplOiA0NTBweDtcbiRkZXZpY2UtdGFibGV0LXNpemU6IDgwMHB4O1xuJGRldmljZS1sYXB0b3Atc2l6ZTogMTAyNHB4O1xuXG4kZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZTogMTA0OHB4O1xuJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemU6IDEyODBweDtcblxuXG46ZXhwb3J0IHtcbiAgICBwcmltYXJ5OiAkcHJpbWFyeTtcbiAgICBzZWNvbmRhcnlMYWJlbDogJHNlY29uZGFyeS1sYWJlbDtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbiRpY29uLXNtYWxsOiAxNnB4O1xuJGljb24tbWVkaXVtOiAyNHB4O1xuJGljb24tbGFyZ2U6IDMycHg7XG4kaWNvbi14bGFyZ2U6IDQ4cHg7XG4iLCIvKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLmxvYWRpbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gIHBhZGRpbmc6IDNlbTtcbn1cblxuLmJvb2tpbmctY29udGVudCB7XG4gIG1hcmdpbjogMCBhdXRvIDAgYXV0bztcbiAgcGFkZGluZzogMXB4IDIwcHggMTIwcHggMDtcbn1cbi5ib29raW5nLWNvbnRlbnQgPiBkaXYge1xuICB3aWR0aDogMTAwJTtcbn1cbi5ib29raW5nLWNvbnRlbnQub3BlbiB7XG4gIG1hcmdpbjogMCBhdXRvIDI4MHB4IGF1dG87XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogNDBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMge1xuICAgIHBhZGRpbmctYm90dG9tOiA0MHB4O1xuICB9XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzID4gZGl2IHtcbiAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyBoMSB7XG4gIGZvbnQtc2l6ZTogMzJweDtcbiAgbWFyZ2luOiAxMHB4IDAgNDBweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgd2lkdGg6IDEwMCU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiQm93ZXJcIjtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgbGFiZWwge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZm9udC1zaXplOiAxNnB4O1xuICBwYWRkaW5nOiA0cHggMCAyMHB4IDA7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIGxhYmVsIHNwYW4ge1xuICBwYWRkaW5nOiAwIDE4cHg7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uIHtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGNvbG9yOiAjMzMzMzMzO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiBoMSB7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIG1heC13aWR0aDogNjcxcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiA+IGRpdiB7XG4gIGZsZXg6IDE7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMTVweDtcbiAgbWluLXdpZHRoOiAyMDBweDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYgaDIge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYgaDIge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYgaDIge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgfVxufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBwYWRkaW5nOiAyOHB4IDIwcHg7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSAucmVjLWRldGFpbHMtcGVyaW9kIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSB7XG4gICAgcGFkZGluZy1ib3R0b206IDEwMHB4O1xuICB9XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSA+IGRpdiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBwYWRkaW5nOiAyMHB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20gPiBkaXYgPiBkaXYge1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20gPiBkaXYgPiBkaXYge1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwcHggMHB4IDEwMHB4IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwcHggMHB4IDEwMHB4IDA7XG4gIH1cbn1cblxuLmJvdHRvbS1wYW5lbCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogODBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gIHotaW5kZXg6IDI7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zIHtcbiAgcGFkZGluZzogMjRweCAxNnB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiBub25lO1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiB7XG4gIG1heC13aWR0aDogODgwcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBkaXNwbGF5OiBmbGV4O1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b24ge1xuICBmbGV4OiAxO1xuICBoZWlnaHQ6IDQ4cHg7XG4gIGZvbnQtc2l6ZTogMTZweDtcbn1cbi5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gIG1hcmdpbi1yaWdodDogNXB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjRDBEMEQwO1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgbWFyZ2luLWxlZnQ6IDVweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMge1xuICAgIHBhZGRpbmc6IDE2cHggMDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbiB7XG4gICAgbWFyZ2luOiAwIDE2cHg7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMikge1xuICAgIG1hcmdpbi1sZWZ0OiA4cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm90dG9tLXBhbmVsIC5idXR0b25zIHtcbiAgICBwYWRkaW5nOiAxNnB4IDA7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b24ge1xuICAgIG1hcmdpbjogMCAxNnB4O1xuICB9XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gICAgbWFyZ2luLXJpZ2h0OiA4cHg7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgICBtYXJnaW4tbGVmdDogOHB4O1xuICB9XG59XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCwgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCAuZGV0YWlscywgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCAuZGV0YWlscyB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCwgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCAuZGV0YWlscywgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCAuZGV0YWlscyB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxufSIsIkBpbXBvcnQgXCJ2YXJzXCI7XG5cbkBtaXhpbiBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRzaXplLCAkcXVhbGlmaWVyKSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAaWYgKCRxdWFsaWZpZXIgPT0gbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSBpZiAoJHF1YWxpZmllciA9PSBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWF4LXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5AbWl4aW4gYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRtaW4sICRtYXgpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkbWluKSBhbmQgKG1heC13aWR0aDogJG1heCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIHRoaXMgaXMgYSBjb3B5IG9mIHJlc3BvbmQtdG8uIHdlIGRvbid0IHdhbnQgdG8gcHJlc2VydmUgdGhhdCBtZXRob2Qgc2luY2UgdGhlIGJyZWFrcG9pbnRzIG1heSBkaXZlcmdlIGZyb20gdGhlIG9sZCBVSS5cbkBtaXhpbiBpcy1zY3JlZW4tc2l6ZSgkbWVkaWE6IGFsbCwgJG9yaWVudGF0aW9uOiBub25lKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cblxuQG1peGluIHBhZ2UtcGFkZGluZyB7XG4gICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbDtcbn1cblxuLy8gRm9udCBNaXhpbnNcbiRmb250LW1ja2luc2V5LXNhbnM6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuJGZvbnQtdGhlaW5oYXJkdDogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4kZm9udC1ib3dlcjogXCJCb3dlclwiO1xuXG5AbWl4aW4gYm93ZXItYm9sZCB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWJvd2VyO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBtY2tpbnNleS1zYW5zIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gZGlzcGxheS0xIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiA0cmVtOyAvLyA2NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4NzsgLy8gNzZweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMiB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDYwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS00IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogM3JlbTsgLy8gNDhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE2NjsgLy8gNTZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS01IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjgzMzsgLy8gMzRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjQyOyAvLyA0MHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS03IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyOHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTEge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA0OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi43NXJlbTsgLy8gNDRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDUycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTIge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTExOyAvLyA0NHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNDhweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMyB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIyMjsgLy8gNDRweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjg4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1NTsgLy8gMjhweFxuICAgIH1cbn1cblxuQG1peGluIGJvZHktZGVmYXVsdCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNnB4XG4gICAgfVxufVxuXG4vLy8gRG9lc250IGV4aXN0IGluIE1EUy5cbkBtaXhpbiBib2R5LXRpbnkge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtOyAvLyAxMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjRweFxuICAgIH1cbn1cblxuQG1peGluIGZvcm0tbGFiZWwge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LXRoZWluaGFyZHQ7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGNvbG9yOiAkcGxhY2Vob2xkZXItY29sb3I7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbn1cblxuQG1peGluIGNoaXAtbGFiZWwge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBjaGVja2JveC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGNvbG9yOiBibGFjaztcbn1cblxuLy8gYm9yZGVyc1xuXG5AbWl4aW4gbWNrLWNoZWNrYm94LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay10aGluLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXItbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBib3JkZXItY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudC1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuXG4vLyBmdW5jdGlvbnNcblxuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG5AbWl4aW4gbWF4LWxpbmVzKCRjb3VudCkge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiAkY291bnQ7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbn1cblxuLy8gaW1hZ2VzXG5AbWl4aW4gbWNrLWljb24oJHdpZHRoLCAkYXNzZXQsICRoZWlnaHQ6ICR3aWR0aCwgICRhc3NldFBhdGg6IFwibGlicy91aS9zcmMvbGliL2ljb25zXCIsKSB7XG4gICAgd2lkdGg6ICR3aWR0aDtcbiAgICBoZWlnaHQ6ICRoZWlnaHQ7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiI3skYXNzZXRQYXRofS8jeyRhc3NldH1cIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuXG5cbkBtaXhpbiBtY2stc21hbGwtaWNvbigkbW9iaWxlLWFzc2V0LCAkZGVza3RvcC1hc3NldDogJG1vYmlsZS1hc3NldCkge1xuICAgIEBpbmNsdWRlIG1jay1pY29uKDE2cHgsICRhc3NldDogJG1vYmlsZS1hc3NldCk7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICRhc3NldDogJGRlc2t0b3AtYXNzZXQpO1xuICAgIH1cbn1cblxuLy8gc2tlbGV0b25cbkBtaXhpbiBza2VsZXRvbi1iZyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWltYWdlLXNpemUge1xuICAgIHdpZHRoOiA4MXB4O1xuICAgIGhlaWdodDogODJweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDIxOXB4O1xuICAgICAgICBoZWlnaHQ6IDExOXB4O1xuICAgIH1cbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLXN0YXR1cy1zaXplIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMTE3cHg7XG4gICAgICAgIGhlaWdodDogNzhweDtcbiAgICB9XG59XG4iLCIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRjb2xvci1icmFuZC1lbGVjdHJpYy1ibHVlOiAjMjI1MWZmO1xuJGNvbG9yLWJyYW5kLWRlZXAtYmx1ZTogIzA1MWMyYztcbiRjb2xvci1icmFuZC1jeWFuOiAjMDBhOWY0O1xuXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGZvbnQtZGFyazogIzAwMDtcbiRmb250LWxpZ2h0OiAjZmZmO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcbiRncmVlbjE6ICMyMTk2NTM7XG5cbiRwZW5kaW5nOiAjZmZiMzAwO1xuJHBlbmRpbmctbGlnaHQ6IGxpZ2h0ZW4oJHBlbmRpbmcsIDEwKTtcbiRwZW5kaW5nLWRhcms6IGRhcmtlbigkcGVuZGluZywgMTApO1xuXG4kZXJyb3I6ICNlNTM5MzU7XG4kZXJyb3ItbGlnaHQ6IGxpZ2h0ZW4oJGVycm9yLCAxMCk7XG4kZXJyb3ItZGFyazogZGFya2VuKCRlcnJvciwgMTApO1xuXG4kY29sb3ItcHJpbWFyeTogIzE5MzdlYTtcbiRjb2xvci1wcmltYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG4kY29sb3ItcHJpbWFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcblxuJGNvbG9yLXNlY29uZGFyeTogIzQyODVGNDtcbiRjb2xvci1zZWNvbmRhcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuJGNvbG9yLXNlY29uZGFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuXG4kYmFja2dyb3VuZDogI2YwZjBmMDtcbiRmb290ZXItYmFjazogIzI2MzIzODtcbiRoZWFkZXItYmFjazogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMDUxQzJDLCAjMDUxQzJDIDQwJSwgIzBCMjQ1MyA2MCUsICMxRjQwRTYgMTAwJSk7XG5cbiRjb2xvci10ZXJuYXJ5OiAjMDUxYzJjO1xuXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cblxuJGZvbnQtc3RhY2s6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuXG4kaGVhZGluZy1mb250OiBcIkxhcmlzaE1jS2luc2V5XCIsICdHZW9yZ2lhJywgc2VyaWY7XG4kZm9udDogJGZvbnQtc3RhY2s7XG5cbiRmb250LWZhbWlseS1wcmltYXJ5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbiRmb250LWZhbWlseS1zZWNvbmRhcnk6IFwiQm93ZXJcIiwgR2VvcmdpYSwgXCJUaW1lcyBOZXcgUm9tYW5cIiBzZXJpZjtcblxuJGJhc2Utc2l6ZTogMTZweDtcbiR0YWJsZXQtc2l6ZTogMTZweDtcbiRtb2JpbGUtc2l6ZTogMTZweDtcblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbiRicmVhay1tb2JpbGU6IDQ1MHB4O1xuJGJyZWFrLXRhYmxldDogODAwcHg7XG4kYnJlYWstbGFwdG9wOiAxMDI0cHg7XG5cbiRicmVhay1sYW5kc2NhcGUtbW9iaWxlOiA4MDBweDtcbiRicmVhay1sYW5kc2NhcGUtdGFibGV0OiAxMDQ4cHg7XG4kYnJlYWstbGFuZHNjYXBlLWxhcHRvcDogMTI4MHB4O1xuIiwiQGltcG9ydCAnLi92YXJpYWJsZXMnO1xuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbkBtaXhpbiBib3gtc2hhZG93KCRjb2xvcjogIzAwMCwgJGRlcHRoOiAxKSB7XG4gICAgYm94LXNoYWRvdzogMCAxcHggM3B4IDFweCAqICgkZGVwdGggLSAxKSByZ2JhKCMwMDAsIC4yKSxcbiAgICAgICAgICAgICAgICAwIDFweCAxcHggMCByZ2JhKCMwMDAsIC4xNCksXG4gICAgICAgICAgICAgICAgMCAycHggMXB4IC0xcHggcmdiYSgjMDAwLCAuMTIpO1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuQG1peGluIHJlc3BvbmQtdG8oJG1lZGlhKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9ICBAZWxzZSBpZiAkbWVkaWEgPT0gbGF0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9QGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIkBpbXBvcnQgXCJsaWJzL3VpL3NyYy9saWIvbWl4aW5zXCI7XG5AaW1wb3J0ICd2YXJpYWJsZXMnO1xuQGltcG9ydCAnbWl4aW5zJztcblxuXG5cblxuLmxvYWRpbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCNmZmZmZmYsIDAuNSk7XG4gIHBhZGRpbmc6IDNlbTtcbn1cbi5ib29raW5nLWNvbnRlbnQge1xuICBtYXJnaW46IDAgYXV0byAwIGF1dG87XG4gIHBhZGRpbmc6IDFweCAyMHB4IDEyMHB4IDA7XG4gID5kaXYge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gICYub3BlbiB7XG4gICAgbWFyZ2luOiAwIGF1dG8gMjgwcHggYXV0bztcbiAgfVxuICAuZGV0YWlscyB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIEBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNDBweDtcbiAgICB9XG4gICAgPmRpdiB7XG4gICAgICBtYXgtd2lkdGg6IDEwMjRweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIH1cbiAgICBoMSB7XG4gICAgICBmb250LXNpemU6IDMycHg7XG4gICAgICBtYXJnaW46IDEwcHggMCA0MHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgZm9udC1mYW1pbHk6ICdCb3dlcic7XG4gICAgfVxuICAgIGxhYmVsIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgcGFkZGluZzogNHB4IDAgMjBweCAwO1xuICAgICAgc3BhbiB7XG4gICAgICAgIHBhZGRpbmc6IDAgMThweDtcbiAgICAgIH1cbiAgICB9XG4gICAgLnNlY3Rpb24ge1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgICAgaDEge1xuICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICB9XG4gICAgICA+ZGl2IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBtYXgtd2lkdGg6IDY3MXB4O1xuICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgICAgPmRpdiB7XG4gICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICBsaW5lLWhlaWdodDogMjRweDtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTVweDtcbiAgICAgICAgICBtaW4td2lkdGg6IDIwMHB4O1xuICAgICAgICB9XG4gICAgICAgIGgyIHtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgICAgICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LXByaW1hcnk7XG4gICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgICAgfVxuICAgICAgICB9ICAgICAgIFxuICAgICAgfVxuICAgICAgJi5ib3R0b20ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICAgICAgICBwYWRkaW5nOiAyOHB4IDIwcHg7XG4gICAgICAgIC5yZWMtZGV0YWlscy1wZXJpb2Qge1xuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG4gICAgICAgIH1cbiAgICAgICAgPmRpdiB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgICAgcGFkZGluZzogMjBweDtcblxuICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgPiBkaXZ7XG4gICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgIHBhZGRpbmc6IDBweCAwcHggMTAwcHggMDtcbiAgfVxufVxuLmJvdHRvbS1wYW5lbCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogODBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gIHotaW5kZXg6IDI7XG4gIFxuICAuYnV0dG9ucyB7XG4gICAgcGFkZGluZzogMjRweCAxNnB4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiBub25lO1xuXG4gICAgPmRpdiB7XG4gICAgICBtYXgtd2lkdGg6IDg4MHB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYnV0dG9uIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgaGVpZ2h0OiA0OHB4O1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICB9XG4gICAgICBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gICAgICB9XG4gICAgICBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgIH1cbiAgICB9XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICBwYWRkaW5nOiAxNnB4IDA7XG4gICAgICA+ZGl2IHtcbiAgICAgICAgYnV0dG9uIHtcbiAgICAgICAgICBtYXJnaW46IDAgMTZweDtcbiAgICAgICAgfVxuICAgICAgICBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgICAgICAgfVxuICAgICAgICBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogOHB4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lcntcblxuICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcblxuICAgIC5ib29raW5nLWNvbnRlbnQsIC5tY2stc2Nyb2xse1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgLmRldGFpbHN7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgICAgfVxuICAgIH1cblxuICB9XG59Il19 */"] }); + i0.ɵɵproperty("confirmed", ctx.confirmed)("loading", ctx.loading)("placeIntoModal", ctx.placeIntoModal)("modal", ctx.modal)("dataForConfirmation", ctx.dataForConfirmation); + } }, directives: [i1.NgIf, i2.BookingConfirmationComponent, i3.TopbarHeaderComponent, i4.RoomBookingDetailsFormComponent, i1.NgClass, i5.MatButton], pipes: [i1.TitleCasePipe], styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\n\n\n\n\n\n\n.loading[_ngcontent-%COMP%] {\n background-color: rgba(255, 255, 255, 0.5);\n padding: 3em;\n}\n.booking-content[_ngcontent-%COMP%] {\n margin: 0 auto 0 auto;\n padding: 1px 0px 120px 0;\n}\n.booking-content[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 100%;\n}\n.booking-content.open[_ngcontent-%COMP%] {\n margin: 0 auto 280px auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n border: 1px solid #E6E6E6;\n background-color: white;\n padding: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 1024px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 32px;\n margin: 10px 0 40px;\n font-weight: 500;\n width: 100%;\n text-align: center;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-size: 16px;\n padding: 4px 0 20px 0;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n padding: 0 18px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 400;\n font-size: 16px;\n color: #333333;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 400;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n max-width: 671px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n line-height: 24px;\n padding-bottom: 15px;\n min-width: 200px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n width: 100%;\n display: block;\n color: #333333;\n margin: 0 0 20px 0;\n font-weight: 500;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n padding: 28px 20px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] .rec-details-period[_ngcontent-%COMP%] {\n cursor: pointer;\n text-decoration: underline;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background-color: white;\n padding: 20px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0 0 0 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0 0 0 0;\n }\n}\n.bottom-panel[_ngcontent-%COMP%] {\n position: absolute;\n bottom: 0;\n width: 100%;\n min-height: 80px;\n background-color: white;\n border: 1px solid #E6E6E6;\n z-index: 2;\n flex-direction: row;\n display: flex;\n align-items: center;\n}\n.bottom-panel.fixed[_ngcontent-%COMP%] {\n position: fixed !important;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n width: 100%;\n max-width: none;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 880px;\n margin: 0 auto;\n display: flex;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex: 1;\n height: 48px;\n font-size: 16px;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 5px;\n border: 1px solid #D0D0D0;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 5px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n.booking-form-base-container.limit-height[_ngcontent-%COMP%] {\n height: 84vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-form-base-container.limit-height[_ngcontent-%COMP%] {\n height: 95vh;\n max-height: 886px;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-form-base-container.limit-height[_ngcontent-%COMP%] {\n height: 95vh;\n max-height: 886px;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9taXhpbnMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNwVUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQTFEQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDNUNBOztzQkFBQTtBQ1BBO0VBQ0UsMENBQUE7RUFDQSxZQUFBO0FKdUNGO0FJckNBO0VBQ0UscUJBQUE7RUFDQSx3QkFBQTtBSndDRjtBSXZDRTtFQUNFLFdBQUE7QUp5Q0o7QUl2Q0U7RUFDRSx5QkFBQTtBSnlDSjtBSXZDRTtFQUNFLHlCQUFBO0VBQ0EsdUJBQUE7RUFDQSxVQUFBO0FKeUNKO0FHNUNRO0VDQU47SUFLSSxvQkFBQTtFSjJDSjtBQUNGO0FHOUNRO0VDSE47SUFLSSxvQkFBQTtFSmdESjtBQUNGO0FJL0NJO0VBQ0UsaUJBQUE7RUFDQSxjQUFBO0FKaUROO0FJL0NJO0VBQ0UsZUFBQTtFQUNBLG1CQUFBO0VBQ0EsZ0JBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7QUppRE47QUk5Q0k7RUFDRSxjQUFBO0VBQ0EsZUFBQTtFQUNBLHFCQUFBO0FKZ0ROO0FJL0NNO0VBQ0UsZUFBQTtBSmlEUjtBSTlDSTtFQUNFLGVBQUE7RUFDQSxnQkFBQTtFQUNBLGVBQUE7RUFDQSxjQUFBO0FKZ0ROO0FJL0NNO0VBQ0UsZUFBQTtFQUNBLGdCQUFBO0FKaURSO0FJL0NNO0VBQ0UsYUFBQTtFQUNBLGVBQUE7RUFDQSxnQkFBQTtFQUNBLGNBQUE7QUppRFI7QUloRFE7RUFDRSxPQUFBO0VBQ0EsaUJBQUE7RUFDQSxvQkFBQTtFQUNBLGdCQUFBO0FKa0RWO0FJaERRO0VBQ0UsV0FBQTtFQUNBLGNBQUE7RUFDQSxjQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLHFHRnRCWTtBRndFdEI7QUNsSFk7RUcwREo7SUFRSSxlQUFBO0VKb0RWO0FBQ0Y7QUN2SFk7RUcwREo7SUFRSSxlQUFBO0VKeURWO0FBQ0Y7QUl0RE07RUFDRSx5QkFBQTtFQUNBLGtCQUFBO0FKd0RSO0FJdkRRO0VBQ0UsZUFBQTtFQUNBLDBCQUFBO0FKeURWO0FDcElZO0VHc0VOO0lBUUkscUJBQUE7RUowRFI7QUFDRjtBQ3pJWTtFR3NFTjtJQVFJLHFCQUFBO0VKK0RSO0FBQ0Y7QUk5RFE7RUFDRSx1QkFBQTtFQUNBLGFBQUE7QUpnRVY7QUNsSlk7RUdxRkE7SUFDRSxpQkFBQTtFSmdFWjtBQUNGO0FDdkpZO0VHcUZBO0lBQ0UsaUJBQUE7RUpxRVo7QUFDRjtBQzVKWTtFR0VaO0lBNkZJLGdCQUFBO0VKaUVGO0FBQ0Y7QUNqS1k7RUdFWjtJQTZGSSxnQkFBQTtFSnNFRjtBQUNGO0FJcEVBO0VBQ0Usa0JBQUE7RUFDQSxTQUFBO0VBQ0EsV0FBQTtFQUNBLGdCQUFBO0VBQ0EsdUJBQUE7RUFDQSx5QkFBQTtFQUNBLFVBQUE7RUFDQSxtQkFBQTtFQUNBLGFBQUE7RUFDQSxtQkFBQTtBSnVFRjtBSXJFRTtFQUNFLDBCQUFBO0FKdUVKO0FJcEVFO0VBR0UsV0FBQTtFQUNBLGVBQUE7QUpvRUo7QUlsRUk7RUFDRSxnQkFBQTtFQUNBLGNBQUE7RUFDQSxhQUFBO0FKb0VOO0FJbkVNO0VBQ0UsT0FBQTtFQUNBLFlBQUE7RUFDQSxlQUFBO0FKcUVSO0FJbkVNO0VBQ0UsaUJBQUE7RUFDQSx5QkFBQTtBSnFFUjtBSW5FTTtFQUNFLGdCQUFBO0FKcUVSO0FDM01ZO0VHa0hWO0lBd0JJLGVBQUE7RUpxRUo7RUluRU07SUFDRSxjQUFBO0VKcUVSO0VJbkVNO0lBQ0UsaUJBQUE7RUpxRVI7RUluRU07SUFDRSxnQkFBQTtFSnFFUjtBQUNGO0FDek5ZO0VHa0hWO0lBd0JJLGVBQUE7RUptRko7RUlqRk07SUFDRSxjQUFBO0VKbUZSO0VJakZNO0lBQ0UsaUJBQUE7RUptRlI7RUlqRk07SUFDRSxnQkFBQTtFSm1GUjtBQUNGO0FJMUVFO0VBRUUsWUFBQTtBSjRFSjtBQzNPWTtFR29LUjtJQUNFLFlBQUE7SUFDQSxpQkFBQTtFSjBFSjtFSXZFRTtJQUNFLFlBQUE7RUp5RUo7RUl4RUk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUowRU47QUFDRjtBQ3hQWTtFR29LUjtJQUNFLFlBQUE7SUFDQSxpQkFBQTtFSnVGSjtFSXBGRTtJQUNFLFlBQUE7RUpzRko7RUlyRkk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUp1Rk47QUFDRiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIiRwcmltYXJ5OiAjMUY0MEU2O1xuJGZvcm0tbGFiZWw6ICMwNTFDMkM7XG4kc2Vjb25kYXJ5LWxhYmVsOiAjNzY3Njc2O1xuJGJvcmRlcjogI0IzQjNCMztcbiRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkOiAjRDBEMEQwO1xuJGNoaXAtY29sb3I6ICMzMzMzMzM7XG4kcGxhY2Vob2xkZXItY29sb3I6ICM3RjdGN0Y7XG4kYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDtcbiRwYWdlLWJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4kc2VsZWN0ZWQtb3B0aW9uOiAjRTZFNkU2O1xuJGNvbG9yLWJyYW5kLXllbGxvdzogI2ZmZDA0ODtcbiRsaWdodC15ZWxsb3c6ICNmZmYzY2U7XG4kY29hY2htYXJrLXRleHQ6ICM2ZjRkMDA7XG4kZXJyb3ItY29sb3I6ICNFMTJFNDA7XG4kbm8tZmlsdGVycy1jb2xvcjogI0JDQkNCQztcbiRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjogI0Y0RjRGNDtcbiRwcmltYXJ5LWhpZ2hsaWdodDogIzIyNTFGRjtcbiRzY3JvbGxiYXItY29sb3I6ICM3NTc1NzU7XG5cbiRhdmFpbGFibGUtY29sb3I6ICM1RDlENTI7XG4kYXZhaWxhYmxlLWJ5LXJlcXVlc3QtY29sb3I6ICNGNUI1M0Y7XG4kaW4tdXNlLWNvbG9yOiAjRDQ0ODNFO1xuJG5vdC1ib29rYWJsZS1jb2xvcjogI0NDQ0NDQztcblxuJG1vZGFsLWJvZHktaGVhZGluZzogIzRENEQ0RDtcbiRhbGVydC1vdmVybGF5LWJnOiByZ2JhKDUsIDI4LCA0NCwgMC44NSk7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvYWNobWFyay1iZzogI0VCRUJGNjtcbiRjb2FjaG1hcmstZGFyay10ZXh0OiAjMUIxQjE5O1xuJGVycm9yLXRleHQ6ICNmZmY7XG5cbi8qKlxuICogU3BhY2luZ1xuICovXG5cbi8vIDRweFxuJHNwYWNpbmctc21hbGxlc3Q6IDAuMjVyZW07XG5cbi8vIDhweFxuJHNwYWNpbmcteHhzbWFsbDogMC41cmVtO1xuXG4vLyAxMnB4XG4kc3BhY2luZy14c21hbGw6IDAuNzVyZW07XG5cbi8vIDE2cHhcbiRzcGFjaW5nLXNtYWxsOiAxcmVtO1xuXG4vLyAyMHB4XG4kc3BhY2luZy1zbWFsbC1tZWRpdW06IDEuMjVyZW07XG5cbi8vIDI0cHhcbiRzcGFjaW5nLW1lZGl1bTogMS41cmVtO1xuXG4vLyAyOHB4XG4kc3BhY2luZy1tZWRpdW0tbGFyZ2U6IDEuNzVyZW07XG5cbi8vIDMycHhcbiRzcGFjaW5nLWxhcmdlOiAycmVtO1xuXG4vLyA0OHB4XG4kc3BhY2luZy14bGFyZ2U6IDNyZW07XG5cbi8vIDY0cHhcbiRzcGFjaW5nLXh4bGFyZ2U6IDRyZW07XG5cbi8vIDk2cHhcbiRzcGFjaW5nLWxhcmdlc3Q6IDZyZW07XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kZGV2aWNlLW1vYmlsZS1zaXplOiA0NTBweDtcbiRkZXZpY2UtdGFibGV0LXNpemU6IDgwMHB4O1xuJGRldmljZS1sYXB0b3Atc2l6ZTogMTAyNHB4O1xuXG4kZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZTogMTA0OHB4O1xuJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemU6IDEyODBweDtcblxuXG46ZXhwb3J0IHtcbiAgICBwcmltYXJ5OiAkcHJpbWFyeTtcbiAgICBzZWNvbmRhcnlMYWJlbDogJHNlY29uZGFyeS1sYWJlbDtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbiRpY29uLXNtYWxsOiAxNnB4O1xuJGljb24tbWVkaXVtOiAyNHB4O1xuJGljb24tbGFyZ2U6IDMycHg7XG4kaWNvbi14bGFyZ2U6IDQ4cHg7XG4iLCIvKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLmxvYWRpbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gIHBhZGRpbmc6IDNlbTtcbn1cblxuLmJvb2tpbmctY29udGVudCB7XG4gIG1hcmdpbjogMCBhdXRvIDAgYXV0bztcbiAgcGFkZGluZzogMXB4IDBweCAxMjBweCAwO1xufVxuLmJvb2tpbmctY29udGVudCA+IGRpdiB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLmJvb2tpbmctY29udGVudC5vcGVuIHtcbiAgbWFyZ2luOiAwIGF1dG8gMjgwcHggYXV0bztcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMge1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcGFkZGluZzogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMge1xuICAgIHBhZGRpbmctYm90dG9tOiA0MHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyB7XG4gICAgcGFkZGluZy1ib3R0b206IDQwcHg7XG4gIH1cbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgPiBkaXYge1xuICBtYXgtd2lkdGg6IDEwMjRweDtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIGgxIHtcbiAgZm9udC1zaXplOiAzMnB4O1xuICBtYXJnaW46IDEwcHggMCA0MHB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICB3aWR0aDogMTAwJTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyBsYWJlbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXNpemU6IDE2cHg7XG4gIHBhZGRpbmc6IDRweCAwIDIwcHggMDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgbGFiZWwgc3BhbiB7XG4gIHBhZGRpbmc6IDAgMThweDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24ge1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgY29sb3I6ICMzMzMzMzM7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uIGgxIHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBmb250LXdlaWdodDogNDAwO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgbWF4LXdpZHRoOiA2NzFweDtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uID4gZGl2ID4gZGl2IHtcbiAgZmxleDogMTtcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gIHBhZGRpbmctYm90dG9tOiAxNXB4O1xuICBtaW4td2lkdGg6IDIwMHB4O1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiBoMiB7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgY29sb3I6ICMzMzMzMzM7XG4gIG1hcmdpbjogMCAwIDIwcHggMDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiBoMiB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiBoMiB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICB9XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIHBhZGRpbmc6IDI4cHggMjBweDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tIC5yZWMtZGV0YWlscy1wZXJpb2Qge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20ge1xuICAgIHBhZGRpbmctYm90dG9tOiAxMDBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG4gIH1cbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tID4gZGl2IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDIwcHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSA+IGRpdiA+IGRpdiB7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSA+IGRpdiA+IGRpdiB7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQge1xuICAgIHBhZGRpbmc6IDAgMCAwIDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwIDAgMCAwO1xuICB9XG59XG5cbi5ib3R0b20tcGFuZWwge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDgwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICB6LWluZGV4OiAyO1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLmJvdHRvbS1wYW5lbC5maXhlZCB7XG4gIHBvc2l0aW9uOiBmaXhlZCAhaW1wb3J0YW50O1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IG5vbmU7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IHtcbiAgbWF4LXdpZHRoOiA4ODBweDtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGRpc3BsYXk6IGZsZXg7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbiB7XG4gIGZsZXg6IDE7XG4gIGhlaWdodDogNDhweDtcbiAgZm9udC1zaXplOiAxNnB4O1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMikge1xuICBtYXJnaW4tbGVmdDogNXB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyB7XG4gICAgcGFkZGluZzogMTZweCAwO1xuICB9XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uIHtcbiAgICBtYXJnaW46IDAgMTZweDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMSkge1xuICAgIG1hcmdpbi1yaWdodDogOHB4O1xuICB9XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uOm50aC1jaGlsZCgyKSB7XG4gICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMge1xuICAgIHBhZGRpbmc6IDE2cHggMDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbiB7XG4gICAgbWFyZ2luOiAwIDE2cHg7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMikge1xuICAgIG1hcmdpbi1sZWZ0OiA4cHg7XG4gIH1cbn1cblxuLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lci5saW1pdC1oZWlnaHQge1xuICBoZWlnaHQ6IDg0dmg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1mb3JtLWJhc2UtY29udGFpbmVyLmxpbWl0LWhlaWdodCB7XG4gICAgaGVpZ2h0OiA5NXZoO1xuICAgIG1heC1oZWlnaHQ6IDg4NnB4O1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCwgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCAuZGV0YWlscywgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCAuZGV0YWlscyB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIubGltaXQtaGVpZ2h0IHtcbiAgICBoZWlnaHQ6IDk1dmg7XG4gICAgbWF4LWhlaWdodDogODg2cHg7XG4gIH1cbiAgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAuYm9va2luZy1jb250ZW50LCAuYm9va2luZy1mb3JtLWJhc2UtY29udGFpbmVyIC5tY2stc2Nyb2xsIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gIH1cbiAgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzLCAuYm9va2luZy1mb3JtLWJhc2UtY29udGFpbmVyIC5tY2stc2Nyb2xsIC5kZXRhaWxzIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICB9XG59IiwiQGltcG9ydCBcInZhcnNcIjtcblxuQG1peGluIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJHNpemUsICRxdWFsaWZpZXIpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBpZiAoJHF1YWxpZmllciA9PSBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIGlmICgkcXVhbGlmaWVyID09IG1heC13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtYXgtd2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBtaXhpbiBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJG1pbiwgJG1heCkge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gdGhpcyBpcyBhIGNvcHkgb2YgcmVzcG9uZC10by4gd2UgZG9uJ3Qgd2FudCB0byBwcmVzZXJ2ZSB0aGF0IG1ldGhvZCBzaW5jZSB0aGUgYnJlYWtwb2ludHMgbWF5IGRpdmVyZ2UgZnJvbSB0aGUgb2xkIFVJLlxuQG1peGluIGlzLXNjcmVlbi1zaXplKCRtZWRpYTogYWxsLCAkb3JpZW50YXRpb246IG5vbmUpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuXG5AbWl4aW4gcGFnZS1wYWRkaW5nIHtcbiAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xufVxuXG4vLyBGb250IE1peGluc1xuJGZvbnQtbWNraW5zZXktc2FuczogXCJNY0tpbnNleSBTYW5zXCI7XG4kZm9udC10aGVpbmhhcmR0OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiRmb250LWJvd2VyOiBcIkJvd2VyXCI7XG5cbkBtaXhpbiBib3dlci1ib2xkIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtYm93ZXI7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIG1ja2luc2V5LXNhbnMge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBkaXNwbGF5LTEge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDRyZW07IC8vIDY0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTg3OyAvLyA3NnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0yIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0zIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTQge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzcmVtOyAvLyA0OHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTY2OyAvLyA1NnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDY0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTUge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuODMzOyAvLyAzNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42NDI7IC8vIDQwcHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTcge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDQ4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjc1cmVtOyAvLyA0NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNTJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICBsaW5lLWhlaWdodDogMS4xMTE7IC8vIDQ0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA0OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0zIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjIyOyAvLyA0NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy00IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy01IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyODhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy02IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTU1OyAvLyAyOHB4XG4gICAgfVxufVxuXG5AbWl4aW4gYm9keS1kZWZhdWx0IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI2cHhcbiAgICB9XG59XG5cbi8vLyBEb2VzbnQgZXhpc3QgaW4gTURTLlxuQG1peGluIGJvZHktdGlueSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07IC8vIDEycHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyMHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZm9ybS1sYWJlbCB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LWZhbWlseTogJGZvbnQtdGhlaW5oYXJkdDtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgY29sb3I6ICRwbGFjZWhvbGRlci1jb2xvcjtcbiAgICBmb250LXdlaWdodDogMzAwO1xufVxuXG5AbWl4aW4gY2hpcC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIGNoZWNrYm94LWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgY29sb3I6IGJsYWNrO1xufVxuXG4vLyBib3JkZXJzXG5cbkBtaXhpbiBtY2stY2hlY2tib3gtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAycHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLXRoaW4tYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlci1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJvcmRlci1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50LWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXItbGlnaHQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5cbi8vIGZ1bmN0aW9uc1xuXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbkBtaXhpbiBtYXgtbGluZXMoJGNvdW50KSB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAtd2Via2l0LWxpbmUtY2xhbXA6ICRjb3VudDtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuXG4vLyBpbWFnZXNcbkBtaXhpbiBtY2staWNvbigkd2lkdGgsICRhc3NldCwgJGhlaWdodDogJHdpZHRoLCAgJGFzc2V0UGF0aDogXCJsaWJzL3VpL3NyYy9saWIvaWNvbnNcIiwpIHtcbiAgICB3aWR0aDogJHdpZHRoO1xuICAgIGhlaWdodDogJGhlaWdodDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIjeyRhc3NldFBhdGh9LyN7JGFzc2V0fVwiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG59XG5cblxuQG1peGluIG1jay1zbWFsbC1pY29uKCRtb2JpbGUtYXNzZXQsICRkZXNrdG9wLWFzc2V0OiAkbW9iaWxlLWFzc2V0KSB7XG4gICAgQGluY2x1ZGUgbWNrLWljb24oMTZweCwgJGFzc2V0OiAkbW9iaWxlLWFzc2V0KTtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oMjRweCwgJGFzc2V0OiAkZGVza3RvcC1hc3NldCk7XG4gICAgfVxufVxuXG4vLyBza2VsZXRvblxuQG1peGluIHNrZWxldG9uLWJnIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItaW1hZ2Utc2l6ZSB7XG4gICAgd2lkdGg6IDgxcHg7XG4gICAgaGVpZ2h0OiA4MnB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMjE5cHg7XG4gICAgICAgIGhlaWdodDogMTE5cHg7XG4gICAgfVxufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItc3RhdHVzLXNpemUge1xuICAgIHdpZHRoOiAxMTdweDtcbiAgICBoZWlnaHQ6IDc4cHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAxMTdweDtcbiAgICAgICAgaGVpZ2h0OiA3OHB4O1xuICAgIH1cbn1cbiIsIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGNvbG9yLWJyYW5kLWVsZWN0cmljLWJsdWU6ICMyMjUxZmY7XG4kY29sb3ItYnJhbmQtZGVlcC1ibHVlOiAjMDUxYzJjO1xuJGNvbG9yLWJyYW5kLWN5YW46ICMwMGE5ZjQ7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kZm9udC1kYXJrOiAjMDAwO1xuJGZvbnQtbGlnaHQ6ICNmZmY7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuJGdyZWVuMTogIzIxOTY1MztcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2xvci1wcmltYXJ5OiAjMTkzN2VhO1xuJGNvbG9yLXByaW1hcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcbiRjb2xvci1wcmltYXJ5LWRhcms6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuXG4kY29sb3Itc2Vjb25kYXJ5OiAjNDI4NUY0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodDogbGlnaHRlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG4kY29sb3Itc2Vjb25kYXJ5LWRhcms6IGRhcmtlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG5cbiRiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuJGZvb3Rlci1iYWNrOiAjMjYzMjM4O1xuJGhlYWRlci1iYWNrOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNTFDMkMsICMwNTFDMkMgNDAlLCAjMEIyNDUzIDYwJSwgIzFGNDBFNiAxMDAlKTtcblxuJGNvbG9yLXRlcm5hcnk6ICMwNTFjMmM7XG5cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuXG4kZm9udC1zdGFjazogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiRoZWFkaW5nLWZvbnQ6IFwiTGFyaXNoTWNLaW5zZXlcIiwgJ0dlb3JnaWEnLCBzZXJpZjtcbiRmb250OiAkZm9udC1zdGFjaztcblxuJGZvbnQtZmFtaWx5LXByaW1hcnk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LXNlY29uZGFyeTogXCJCb3dlclwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiIHNlcmlmO1xuXG4kYmFzZS1zaXplOiAxNnB4O1xuJHRhYmxldC1zaXplOiAxNnB4O1xuJG1vYmlsZS1zaXplOiAxNnB4O1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGJyZWFrLW1vYmlsZTogNDUwcHg7XG4kYnJlYWstdGFibGV0OiA4MDBweDtcbiRicmVhay1sYXB0b3A6IDEwMjRweDtcblxuJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGU6IDgwMHB4O1xuJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQ6IDEwNDhweDtcbiRicmVhay1sYW5kc2NhcGUtbGFwdG9wOiAxMjgwcHg7XG4iLCJAaW1wb3J0ICcuL3ZhcmlhYmxlcyc7XG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuQG1peGluIGJveC1zaGFkb3coJGNvbG9yOiAjMDAwLCAkZGVwdGg6IDEpIHtcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMXB4ICogKCRkZXB0aCAtIDEpIHJnYmEoIzAwMCwgLjIpLFxuICAgICAgICAgICAgICAgIDAgMXB4IDFweCAwIHJnYmEoIzAwMCwgLjE0KSxcbiAgICAgICAgICAgICAgICAwIDJweCAxcHggLTFweCByZ2JhKCMwMDAsIC4xMik7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG5AbWl4aW4gcmVzcG9uZC10bygkbWVkaWEpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gIEBlbHNlIGlmICRtZWRpYSA9PSBsYXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1AZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQGltcG9ydCBcImxpYnMvdWkvc3JjL2xpYi9taXhpbnNcIjtcbkBpbXBvcnQgJ3ZhcmlhYmxlcyc7XG5AaW1wb3J0ICdtaXhpbnMnO1xuXG5cblxuXG4ubG9hZGluZyB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoI2ZmZmZmZiwgMC41KTtcbiAgcGFkZGluZzogM2VtO1xufVxuLmJvb2tpbmctY29udGVudCB7XG4gIG1hcmdpbjogMCBhdXRvIDAgYXV0bztcbiAgcGFkZGluZzogMXB4IDBweCAxMjBweCAwO1xuICA+ZGl2IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAmLm9wZW4ge1xuICAgIG1hcmdpbjogMCBhdXRvIDI4MHB4IGF1dG87XG4gIH1cbiAgLmRldGFpbHMge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgcGFkZGluZzogMDtcbiAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgcGFkZGluZy1ib3R0b206IDQwcHg7XG4gICAgfVxuICAgID5kaXYge1xuICAgICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICB9XG4gICAgaDEge1xuICAgICAgZm9udC1zaXplOiAzMnB4O1xuICAgICAgbWFyZ2luOiAxMHB4IDAgNDBweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIC8vIGZvbnQtZmFtaWx5OiAnQm93ZXInO1xuICAgIH1cbiAgICBsYWJlbCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIHBhZGRpbmc6IDRweCAwIDIwcHggMDtcbiAgICAgIHNwYW4ge1xuICAgICAgICBwYWRkaW5nOiAwIDE4cHg7XG4gICAgICB9XG4gICAgfVxuICAgIC5zZWN0aW9uIHtcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgIGgxIHtcbiAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgfVxuICAgICAgPmRpdiB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgbWF4LXdpZHRoOiA2NzFweDtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgID5kaXYge1xuICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDE1cHg7XG4gICAgICAgICAgbWluLXdpZHRoOiAyMDBweDtcbiAgICAgICAgfVxuICAgICAgICBoMiB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgY29sb3I6ICMzMzMzMzM7XG4gICAgICAgICAgbWFyZ2luOiAwIDAgMjBweCAwO1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1wcmltYXJ5O1xuICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICAgIH1cbiAgICAgICAgfSAgICAgICBcbiAgICAgIH1cbiAgICAgICYuYm90dG9tIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgICAgICAgcGFkZGluZzogMjhweCAyMHB4O1xuICAgICAgICAucmVjLWRldGFpbHMtcGVyaW9kIHtcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDEwMHB4O1xuICAgICAgICB9XG4gICAgICAgID5kaXYge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICAgIHBhZGRpbmc6IDIwcHg7XG5cbiAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgID4gZGl2e1xuICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICBwYWRkaW5nOiAwIDAgMCAwO1xuICB9XG59XG4uYm90dG9tLXBhbmVsIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiA4MHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgei1pbmRleDogMjtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAmLmZpeGVkIHtcbiAgICBwb3NpdGlvbjogZml4ZWQgIWltcG9ydGFudDtcbiAgfVxuICBcbiAgLmJ1dHRvbnMge1xuICAgIC8vIHBhZGRpbmc6IDI0cHggMTZweDtcbiAgICAvLyBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1heC13aWR0aDogbm9uZTtcblxuICAgID5kaXYge1xuICAgICAgbWF4LXdpZHRoOiA4ODBweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGJ1dHRvbiB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgfVxuICAgICAgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogNXB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRDBEMEQwO1xuICAgICAgfVxuICAgICAgYnV0dG9uOm50aC1jaGlsZCgyKSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gICAgICB9XG4gICAgfVxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgcGFkZGluZzogMTZweCAwO1xuICAgICAgPmRpdiB7XG4gICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgbWFyZ2luOiAwIDE2cHg7XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiA4cHg7XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9uOm50aC1jaGlsZCgyKSB7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cbi5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXJ7XG5cbiAgJi5saW1pdC1oZWlnaHQge1xuICAgIC8vIG1heC1oZWlnaHQ6IDg0MnB4O1xuICAgIGhlaWdodDogODR2aDtcbiAgICAvLyBtYXgtaGVpZ2h0OiA5M3ZoO1xuICB9XG5cbiAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgJi5saW1pdC1oZWlnaHQge1xuICAgICAgaGVpZ2h0OiA5NXZoO1xuICAgICAgbWF4LWhlaWdodDogODg2cHg7XG4gICAgfVxuXG4gICAgLmJvb2tpbmctY29udGVudCwgLm1jay1zY3JvbGx7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAuZGV0YWlsc3tcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cbn0iXX0= */"] }); const ɵBookingCreateComponent_BaseFactory = i0.ɵɵgetInheritedFactory(BookingCreateComponent); /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(BookingCreateComponent, [{ type: core_1.Component, @@ -30071,7 +30534,7 @@ BookingEditWrapperComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BookingEditWr i0.ɵɵproperty("ngIf", !ctx.loading); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.loading); - } }, directives: [i2.NgIf, i3.BookingEditComponent, i4.NgxSkeletonLoaderComponent], styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\n\n\n\n\n\n\n.loading[_ngcontent-%COMP%] {\n background-color: rgba(255, 255, 255, 0.5);\n padding: 3em;\n}\n.booking-content[_ngcontent-%COMP%] {\n margin: 0 auto 0 auto;\n padding: 1px 20px 120px 0;\n}\n.booking-content[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 100%;\n}\n.booking-content.open[_ngcontent-%COMP%] {\n margin: 0 auto 280px auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n border: 1px solid #E6E6E6;\n background-color: white;\n padding: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 1024px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 32px;\n margin: 10px 0 40px;\n font-weight: 500;\n width: 100%;\n text-align: center;\n font-family: \"Bower\";\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-size: 16px;\n padding: 4px 0 20px 0;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n padding: 0 18px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 400;\n font-size: 16px;\n color: #333333;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 400;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n max-width: 671px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n line-height: 24px;\n padding-bottom: 15px;\n min-width: 200px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n width: 100%;\n display: block;\n color: #333333;\n margin: 0 0 20px 0;\n font-weight: 500;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n padding: 28px 20px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] .rec-details-period[_ngcontent-%COMP%] {\n cursor: pointer;\n text-decoration: underline;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background-color: white;\n padding: 20px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0px 0px 100px 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0px 0px 100px 0;\n }\n}\n.bottom-panel[_ngcontent-%COMP%] {\n position: fixed;\n bottom: 0;\n width: 100%;\n min-height: 80px;\n background-color: white;\n border: 1px solid #E6E6E6;\n z-index: 2;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 24px 16px;\n border: 1px solid #E6E6E6;\n width: 100%;\n max-width: none;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 880px;\n margin: 0 auto;\n display: flex;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex: 1;\n height: 48px;\n font-size: 16px;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 5px;\n border: 1px solid #D0D0D0;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 5px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9taXhpbnMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNwVUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQTFEQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDNUNBOztzQkFBQTtBQ1BBO0VBQ0UsMENBQUE7RUFDQSxZQUFBO0FKdUNGO0FJckNBO0VBQ0UscUJBQUE7RUFDQSx5QkFBQTtBSndDRjtBSXZDRTtFQUNFLFdBQUE7QUp5Q0o7QUl2Q0U7RUFDRSx5QkFBQTtBSnlDSjtBSXZDRTtFQUNFLHlCQUFBO0VBQ0EsdUJBQUE7RUFDQSxVQUFBO0FKeUNKO0FHNUNRO0VDQU47SUFLSSxvQkFBQTtFSjJDSjtBQUNGO0FHOUNRO0VDSE47SUFLSSxvQkFBQTtFSmdESjtBQUNGO0FJL0NJO0VBQ0UsaUJBQUE7RUFDQSxjQUFBO0FKaUROO0FJL0NJO0VBQ0UsZUFBQTtFQUNBLG1CQUFBO0VBQ0EsZ0JBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7RUFDQSxvQkFBQTtBSmlETjtBSS9DSTtFQUNFLGNBQUE7RUFDQSxlQUFBO0VBQ0EscUJBQUE7QUppRE47QUloRE07RUFDRSxlQUFBO0FKa0RSO0FJL0NJO0VBQ0UsZUFBQTtFQUNBLGdCQUFBO0VBQ0EsZUFBQTtFQUNBLGNBQUE7QUppRE47QUloRE07RUFDRSxlQUFBO0VBQ0EsZ0JBQUE7QUprRFI7QUloRE07RUFDRSxhQUFBO0VBQ0EsZUFBQTtFQUNBLGdCQUFBO0VBQ0EsY0FBQTtBSmtEUjtBSWpEUTtFQUNFLE9BQUE7RUFDQSxpQkFBQTtFQUNBLG9CQUFBO0VBQ0EsZ0JBQUE7QUptRFY7QUlqRFE7RUFDRSxXQUFBO0VBQ0EsY0FBQTtFQUNBLGNBQUE7RUFDQSxrQkFBQTtFQUNBLGdCQUFBO0VBQ0EscUdGdEJZO0FGeUV0QjtBQ25IWTtFRzBESjtJQVFJLGVBQUE7RUpxRFY7QUFDRjtBQ3hIWTtFRzBESjtJQVFJLGVBQUE7RUowRFY7QUFDRjtBSXZETTtFQUNFLHlCQUFBO0VBQ0Esa0JBQUE7QUp5RFI7QUl4RFE7RUFDRSxlQUFBO0VBQ0EsMEJBQUE7QUowRFY7QUNySVk7RUdzRU47SUFRSSxxQkFBQTtFSjJEUjtBQUNGO0FDMUlZO0VHc0VOO0lBUUkscUJBQUE7RUpnRVI7QUFDRjtBSS9EUTtFQUNFLHVCQUFBO0VBQ0EsYUFBQTtBSmlFVjtBQ25KWTtFR3FGQTtJQUNFLGlCQUFBO0VKaUVaO0FBQ0Y7QUN4Slk7RUdxRkE7SUFDRSxpQkFBQTtFSnNFWjtBQUNGO0FDN0pZO0VHRVo7SUE2Rkksd0JBQUE7RUprRUY7QUFDRjtBQ2xLWTtFR0VaO0lBNkZJLHdCQUFBO0VKdUVGO0FBQ0Y7QUlyRUE7RUFDRSxlQUFBO0VBQ0EsU0FBQTtFQUNBLFdBQUE7RUFDQSxnQkFBQTtFQUNBLHVCQUFBO0VBQ0EseUJBQUE7RUFDQSxVQUFBO0FKd0VGO0FJdEVFO0VBQ0Usa0JBQUE7RUFDQSx5QkFBQTtFQUNBLFdBQUE7RUFDQSxlQUFBO0FKd0VKO0FJdEVJO0VBQ0UsZ0JBQUE7RUFDQSxjQUFBO0VBQ0EsYUFBQTtBSndFTjtBSXZFTTtFQUNFLE9BQUE7RUFDQSxZQUFBO0VBQ0EsZUFBQTtBSnlFUjtBSXZFTTtFQUNFLGlCQUFBO0VBQ0EseUJBQUE7QUp5RVI7QUl2RU07RUFDRSxnQkFBQTtBSnlFUjtBQ3hNWTtFRzJHVjtJQXdCSSxlQUFBO0VKeUVKO0VJdkVNO0lBQ0UsY0FBQTtFSnlFUjtFSXZFTTtJQUNFLGlCQUFBO0VKeUVSO0VJdkVNO0lBQ0UsZ0JBQUE7RUp5RVI7QUFDRjtBQ3ROWTtFRzJHVjtJQXdCSSxlQUFBO0VKdUZKO0VJckZNO0lBQ0UsY0FBQTtFSnVGUjtFSXJGTTtJQUNFLGlCQUFBO0VKdUZSO0VJckZNO0lBQ0UsZ0JBQUE7RUp1RlI7QUFDRjtBQ3BPWTtFR3dKUjtJQUNFLFlBQUE7RUpnRko7RUkvRUk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUppRk47QUFDRjtBQzlPWTtFR3dKUjtJQUNFLFlBQUE7RUp5Rko7RUl4Rkk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUowRk47QUFDRiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIiRwcmltYXJ5OiAjMUY0MEU2O1xuJGZvcm0tbGFiZWw6ICMwNTFDMkM7XG4kc2Vjb25kYXJ5LWxhYmVsOiAjNzY3Njc2O1xuJGJvcmRlcjogI0IzQjNCMztcbiRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkOiAjRDBEMEQwO1xuJGNoaXAtY29sb3I6ICMzMzMzMzM7XG4kcGxhY2Vob2xkZXItY29sb3I6ICM3RjdGN0Y7XG4kYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDtcbiRwYWdlLWJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4kc2VsZWN0ZWQtb3B0aW9uOiAjRTZFNkU2O1xuJGNvbG9yLWJyYW5kLXllbGxvdzogI2ZmZDA0ODtcbiRsaWdodC15ZWxsb3c6ICNmZmYzY2U7XG4kY29hY2htYXJrLXRleHQ6ICM2ZjRkMDA7XG4kZXJyb3ItY29sb3I6ICNFMTJFNDA7XG4kbm8tZmlsdGVycy1jb2xvcjogI0JDQkNCQztcbiRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjogI0Y0RjRGNDtcbiRwcmltYXJ5LWhpZ2hsaWdodDogIzIyNTFGRjtcbiRzY3JvbGxiYXItY29sb3I6ICM3NTc1NzU7XG5cbiRhdmFpbGFibGUtY29sb3I6ICM1RDlENTI7XG4kYXZhaWxhYmxlLWJ5LXJlcXVlc3QtY29sb3I6ICNGNUI1M0Y7XG4kaW4tdXNlLWNvbG9yOiAjRDQ0ODNFO1xuJG5vdC1ib29rYWJsZS1jb2xvcjogI0NDQ0NDQztcblxuJG1vZGFsLWJvZHktaGVhZGluZzogIzRENEQ0RDtcbiRhbGVydC1vdmVybGF5LWJnOiByZ2JhKDUsIDI4LCA0NCwgMC44NSk7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvYWNobWFyay1iZzogI0VCRUJGNjtcbiRjb2FjaG1hcmstZGFyay10ZXh0OiAjMUIxQjE5O1xuJGVycm9yLXRleHQ6ICNmZmY7XG5cbi8qKlxuICogU3BhY2luZ1xuICovXG5cbi8vIDRweFxuJHNwYWNpbmctc21hbGxlc3Q6IDAuMjVyZW07XG5cbi8vIDhweFxuJHNwYWNpbmcteHhzbWFsbDogMC41cmVtO1xuXG4vLyAxMnB4XG4kc3BhY2luZy14c21hbGw6IDAuNzVyZW07XG5cbi8vIDE2cHhcbiRzcGFjaW5nLXNtYWxsOiAxcmVtO1xuXG4vLyAyMHB4XG4kc3BhY2luZy1zbWFsbC1tZWRpdW06IDEuMjVyZW07XG5cbi8vIDI0cHhcbiRzcGFjaW5nLW1lZGl1bTogMS41cmVtO1xuXG4vLyAyOHB4XG4kc3BhY2luZy1tZWRpdW0tbGFyZ2U6IDEuNzVyZW07XG5cbi8vIDMycHhcbiRzcGFjaW5nLWxhcmdlOiAycmVtO1xuXG4vLyA0OHB4XG4kc3BhY2luZy14bGFyZ2U6IDNyZW07XG5cbi8vIDY0cHhcbiRzcGFjaW5nLXh4bGFyZ2U6IDRyZW07XG5cbi8vIDk2cHhcbiRzcGFjaW5nLWxhcmdlc3Q6IDZyZW07XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kZGV2aWNlLW1vYmlsZS1zaXplOiA0NTBweDtcbiRkZXZpY2UtdGFibGV0LXNpemU6IDgwMHB4O1xuJGRldmljZS1sYXB0b3Atc2l6ZTogMTAyNHB4O1xuXG4kZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZTogMTA0OHB4O1xuJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemU6IDEyODBweDtcblxuXG46ZXhwb3J0IHtcbiAgICBwcmltYXJ5OiAkcHJpbWFyeTtcbiAgICBzZWNvbmRhcnlMYWJlbDogJHNlY29uZGFyeS1sYWJlbDtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbiRpY29uLXNtYWxsOiAxNnB4O1xuJGljb24tbWVkaXVtOiAyNHB4O1xuJGljb24tbGFyZ2U6IDMycHg7XG4kaWNvbi14bGFyZ2U6IDQ4cHg7XG4iLCIvKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLmxvYWRpbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gIHBhZGRpbmc6IDNlbTtcbn1cblxuLmJvb2tpbmctY29udGVudCB7XG4gIG1hcmdpbjogMCBhdXRvIDAgYXV0bztcbiAgcGFkZGluZzogMXB4IDIwcHggMTIwcHggMDtcbn1cbi5ib29raW5nLWNvbnRlbnQgPiBkaXYge1xuICB3aWR0aDogMTAwJTtcbn1cbi5ib29raW5nLWNvbnRlbnQub3BlbiB7XG4gIG1hcmdpbjogMCBhdXRvIDI4MHB4IGF1dG87XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogNDBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMge1xuICAgIHBhZGRpbmctYm90dG9tOiA0MHB4O1xuICB9XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzID4gZGl2IHtcbiAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyBoMSB7XG4gIGZvbnQtc2l6ZTogMzJweDtcbiAgbWFyZ2luOiAxMHB4IDAgNDBweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgd2lkdGg6IDEwMCU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiQm93ZXJcIjtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgbGFiZWwge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZm9udC1zaXplOiAxNnB4O1xuICBwYWRkaW5nOiA0cHggMCAyMHB4IDA7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIGxhYmVsIHNwYW4ge1xuICBwYWRkaW5nOiAwIDE4cHg7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uIHtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGNvbG9yOiAjMzMzMzMzO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiBoMSB7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIG1heC13aWR0aDogNjcxcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiA+IGRpdiB7XG4gIGZsZXg6IDE7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMTVweDtcbiAgbWluLXdpZHRoOiAyMDBweDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYgaDIge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYgaDIge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYgaDIge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgfVxufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBwYWRkaW5nOiAyOHB4IDIwcHg7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSAucmVjLWRldGFpbHMtcGVyaW9kIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSB7XG4gICAgcGFkZGluZy1ib3R0b206IDEwMHB4O1xuICB9XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSA+IGRpdiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBwYWRkaW5nOiAyMHB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20gPiBkaXYgPiBkaXYge1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20gPiBkaXYgPiBkaXYge1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwcHggMHB4IDEwMHB4IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwcHggMHB4IDEwMHB4IDA7XG4gIH1cbn1cblxuLmJvdHRvbS1wYW5lbCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogODBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gIHotaW5kZXg6IDI7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zIHtcbiAgcGFkZGluZzogMjRweCAxNnB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiBub25lO1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiB7XG4gIG1heC13aWR0aDogODgwcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBkaXNwbGF5OiBmbGV4O1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b24ge1xuICBmbGV4OiAxO1xuICBoZWlnaHQ6IDQ4cHg7XG4gIGZvbnQtc2l6ZTogMTZweDtcbn1cbi5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gIG1hcmdpbi1yaWdodDogNXB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjRDBEMEQwO1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgbWFyZ2luLWxlZnQ6IDVweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMge1xuICAgIHBhZGRpbmc6IDE2cHggMDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbiB7XG4gICAgbWFyZ2luOiAwIDE2cHg7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMikge1xuICAgIG1hcmdpbi1sZWZ0OiA4cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm90dG9tLXBhbmVsIC5idXR0b25zIHtcbiAgICBwYWRkaW5nOiAxNnB4IDA7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b24ge1xuICAgIG1hcmdpbjogMCAxNnB4O1xuICB9XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gICAgbWFyZ2luLXJpZ2h0OiA4cHg7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgICBtYXJnaW4tbGVmdDogOHB4O1xuICB9XG59XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCwgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCAuZGV0YWlscywgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCAuZGV0YWlscyB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCwgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCAuZGV0YWlscywgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCAuZGV0YWlscyB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxufSIsIkBpbXBvcnQgXCJ2YXJzXCI7XG5cbkBtaXhpbiBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRzaXplLCAkcXVhbGlmaWVyKSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAaWYgKCRxdWFsaWZpZXIgPT0gbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSBpZiAoJHF1YWxpZmllciA9PSBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWF4LXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5AbWl4aW4gYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRtaW4sICRtYXgpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkbWluKSBhbmQgKG1heC13aWR0aDogJG1heCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIHRoaXMgaXMgYSBjb3B5IG9mIHJlc3BvbmQtdG8uIHdlIGRvbid0IHdhbnQgdG8gcHJlc2VydmUgdGhhdCBtZXRob2Qgc2luY2UgdGhlIGJyZWFrcG9pbnRzIG1heSBkaXZlcmdlIGZyb20gdGhlIG9sZCBVSS5cbkBtaXhpbiBpcy1zY3JlZW4tc2l6ZSgkbWVkaWE6IGFsbCwgJG9yaWVudGF0aW9uOiBub25lKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cblxuQG1peGluIHBhZ2UtcGFkZGluZyB7XG4gICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbDtcbn1cblxuLy8gRm9udCBNaXhpbnNcbiRmb250LW1ja2luc2V5LXNhbnM6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuJGZvbnQtdGhlaW5oYXJkdDogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4kZm9udC1ib3dlcjogXCJCb3dlclwiO1xuXG5AbWl4aW4gYm93ZXItYm9sZCB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWJvd2VyO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBtY2tpbnNleS1zYW5zIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gZGlzcGxheS0xIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiA0cmVtOyAvLyA2NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4NzsgLy8gNzZweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMiB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDYwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS00IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogM3JlbTsgLy8gNDhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE2NjsgLy8gNTZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS01IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjgzMzsgLy8gMzRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjQyOyAvLyA0MHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS03IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyOHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTEge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA0OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi43NXJlbTsgLy8gNDRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDUycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTIge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTExOyAvLyA0NHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNDhweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMyB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIyMjsgLy8gNDRweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjg4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1NTsgLy8gMjhweFxuICAgIH1cbn1cblxuQG1peGluIGJvZHktZGVmYXVsdCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNnB4XG4gICAgfVxufVxuXG4vLy8gRG9lc250IGV4aXN0IGluIE1EUy5cbkBtaXhpbiBib2R5LXRpbnkge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtOyAvLyAxMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjRweFxuICAgIH1cbn1cblxuQG1peGluIGZvcm0tbGFiZWwge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LXRoZWluaGFyZHQ7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGNvbG9yOiAkcGxhY2Vob2xkZXItY29sb3I7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbn1cblxuQG1peGluIGNoaXAtbGFiZWwge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBjaGVja2JveC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGNvbG9yOiBibGFjaztcbn1cblxuLy8gYm9yZGVyc1xuXG5AbWl4aW4gbWNrLWNoZWNrYm94LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay10aGluLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXItbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBib3JkZXItY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudC1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuXG4vLyBmdW5jdGlvbnNcblxuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG5AbWl4aW4gbWF4LWxpbmVzKCRjb3VudCkge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiAkY291bnQ7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbn1cblxuLy8gaW1hZ2VzXG5AbWl4aW4gbWNrLWljb24oJHdpZHRoLCAkYXNzZXQsICRoZWlnaHQ6ICR3aWR0aCwgICRhc3NldFBhdGg6IFwibGlicy91aS9zcmMvbGliL2ljb25zXCIsKSB7XG4gICAgd2lkdGg6ICR3aWR0aDtcbiAgICBoZWlnaHQ6ICRoZWlnaHQ7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiI3skYXNzZXRQYXRofS8jeyRhc3NldH1cIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuXG5cbkBtaXhpbiBtY2stc21hbGwtaWNvbigkbW9iaWxlLWFzc2V0LCAkZGVza3RvcC1hc3NldDogJG1vYmlsZS1hc3NldCkge1xuICAgIEBpbmNsdWRlIG1jay1pY29uKDE2cHgsICRhc3NldDogJG1vYmlsZS1hc3NldCk7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICRhc3NldDogJGRlc2t0b3AtYXNzZXQpO1xuICAgIH1cbn1cblxuLy8gc2tlbGV0b25cbkBtaXhpbiBza2VsZXRvbi1iZyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWltYWdlLXNpemUge1xuICAgIHdpZHRoOiA4MXB4O1xuICAgIGhlaWdodDogODJweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDIxOXB4O1xuICAgICAgICBoZWlnaHQ6IDExOXB4O1xuICAgIH1cbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLXN0YXR1cy1zaXplIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMTE3cHg7XG4gICAgICAgIGhlaWdodDogNzhweDtcbiAgICB9XG59XG4iLCIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRjb2xvci1icmFuZC1lbGVjdHJpYy1ibHVlOiAjMjI1MWZmO1xuJGNvbG9yLWJyYW5kLWRlZXAtYmx1ZTogIzA1MWMyYztcbiRjb2xvci1icmFuZC1jeWFuOiAjMDBhOWY0O1xuXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGZvbnQtZGFyazogIzAwMDtcbiRmb250LWxpZ2h0OiAjZmZmO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcbiRncmVlbjE6ICMyMTk2NTM7XG5cbiRwZW5kaW5nOiAjZmZiMzAwO1xuJHBlbmRpbmctbGlnaHQ6IGxpZ2h0ZW4oJHBlbmRpbmcsIDEwKTtcbiRwZW5kaW5nLWRhcms6IGRhcmtlbigkcGVuZGluZywgMTApO1xuXG4kZXJyb3I6ICNlNTM5MzU7XG4kZXJyb3ItbGlnaHQ6IGxpZ2h0ZW4oJGVycm9yLCAxMCk7XG4kZXJyb3ItZGFyazogZGFya2VuKCRlcnJvciwgMTApO1xuXG4kY29sb3ItcHJpbWFyeTogIzE5MzdlYTtcbiRjb2xvci1wcmltYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG4kY29sb3ItcHJpbWFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcblxuJGNvbG9yLXNlY29uZGFyeTogIzQyODVGNDtcbiRjb2xvci1zZWNvbmRhcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuJGNvbG9yLXNlY29uZGFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuXG4kYmFja2dyb3VuZDogI2YwZjBmMDtcbiRmb290ZXItYmFjazogIzI2MzIzODtcbiRoZWFkZXItYmFjazogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMDUxQzJDLCAjMDUxQzJDIDQwJSwgIzBCMjQ1MyA2MCUsICMxRjQwRTYgMTAwJSk7XG5cbiRjb2xvci10ZXJuYXJ5OiAjMDUxYzJjO1xuXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cblxuJGZvbnQtc3RhY2s6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuXG4kaGVhZGluZy1mb250OiBcIkxhcmlzaE1jS2luc2V5XCIsICdHZW9yZ2lhJywgc2VyaWY7XG4kZm9udDogJGZvbnQtc3RhY2s7XG5cbiRmb250LWZhbWlseS1wcmltYXJ5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbiRmb250LWZhbWlseS1zZWNvbmRhcnk6IFwiQm93ZXJcIiwgR2VvcmdpYSwgXCJUaW1lcyBOZXcgUm9tYW5cIiBzZXJpZjtcblxuJGJhc2Utc2l6ZTogMTZweDtcbiR0YWJsZXQtc2l6ZTogMTZweDtcbiRtb2JpbGUtc2l6ZTogMTZweDtcblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbiRicmVhay1tb2JpbGU6IDQ1MHB4O1xuJGJyZWFrLXRhYmxldDogODAwcHg7XG4kYnJlYWstbGFwdG9wOiAxMDI0cHg7XG5cbiRicmVhay1sYW5kc2NhcGUtbW9iaWxlOiA4MDBweDtcbiRicmVhay1sYW5kc2NhcGUtdGFibGV0OiAxMDQ4cHg7XG4kYnJlYWstbGFuZHNjYXBlLWxhcHRvcDogMTI4MHB4O1xuIiwiQGltcG9ydCAnLi92YXJpYWJsZXMnO1xuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbkBtaXhpbiBib3gtc2hhZG93KCRjb2xvcjogIzAwMCwgJGRlcHRoOiAxKSB7XG4gICAgYm94LXNoYWRvdzogMCAxcHggM3B4IDFweCAqICgkZGVwdGggLSAxKSByZ2JhKCMwMDAsIC4yKSxcbiAgICAgICAgICAgICAgICAwIDFweCAxcHggMCByZ2JhKCMwMDAsIC4xNCksXG4gICAgICAgICAgICAgICAgMCAycHggMXB4IC0xcHggcmdiYSgjMDAwLCAuMTIpO1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuQG1peGluIHJlc3BvbmQtdG8oJG1lZGlhKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9ICBAZWxzZSBpZiAkbWVkaWEgPT0gbGF0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9QGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIkBpbXBvcnQgXCJsaWJzL3VpL3NyYy9saWIvbWl4aW5zXCI7XG5AaW1wb3J0ICd2YXJpYWJsZXMnO1xuQGltcG9ydCAnbWl4aW5zJztcblxuXG5cblxuLmxvYWRpbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCNmZmZmZmYsIDAuNSk7XG4gIHBhZGRpbmc6IDNlbTtcbn1cbi5ib29raW5nLWNvbnRlbnQge1xuICBtYXJnaW46IDAgYXV0byAwIGF1dG87XG4gIHBhZGRpbmc6IDFweCAyMHB4IDEyMHB4IDA7XG4gID5kaXYge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gICYub3BlbiB7XG4gICAgbWFyZ2luOiAwIGF1dG8gMjgwcHggYXV0bztcbiAgfVxuICAuZGV0YWlscyB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIEBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNDBweDtcbiAgICB9XG4gICAgPmRpdiB7XG4gICAgICBtYXgtd2lkdGg6IDEwMjRweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIH1cbiAgICBoMSB7XG4gICAgICBmb250LXNpemU6IDMycHg7XG4gICAgICBtYXJnaW46IDEwcHggMCA0MHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgZm9udC1mYW1pbHk6ICdCb3dlcic7XG4gICAgfVxuICAgIGxhYmVsIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgcGFkZGluZzogNHB4IDAgMjBweCAwO1xuICAgICAgc3BhbiB7XG4gICAgICAgIHBhZGRpbmc6IDAgMThweDtcbiAgICAgIH1cbiAgICB9XG4gICAgLnNlY3Rpb24ge1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgICAgaDEge1xuICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICB9XG4gICAgICA+ZGl2IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBtYXgtd2lkdGg6IDY3MXB4O1xuICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgICAgPmRpdiB7XG4gICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICBsaW5lLWhlaWdodDogMjRweDtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTVweDtcbiAgICAgICAgICBtaW4td2lkdGg6IDIwMHB4O1xuICAgICAgICB9XG4gICAgICAgIGgyIHtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgICAgICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LXByaW1hcnk7XG4gICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgICAgfVxuICAgICAgICB9ICAgICAgIFxuICAgICAgfVxuICAgICAgJi5ib3R0b20ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICAgICAgICBwYWRkaW5nOiAyOHB4IDIwcHg7XG4gICAgICAgIC5yZWMtZGV0YWlscy1wZXJpb2Qge1xuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG4gICAgICAgIH1cbiAgICAgICAgPmRpdiB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgICAgcGFkZGluZzogMjBweDtcblxuICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgPiBkaXZ7XG4gICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgIHBhZGRpbmc6IDBweCAwcHggMTAwcHggMDtcbiAgfVxufVxuLmJvdHRvbS1wYW5lbCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogODBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gIHotaW5kZXg6IDI7XG4gIFxuICAuYnV0dG9ucyB7XG4gICAgcGFkZGluZzogMjRweCAxNnB4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiBub25lO1xuXG4gICAgPmRpdiB7XG4gICAgICBtYXgtd2lkdGg6IDg4MHB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYnV0dG9uIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgaGVpZ2h0OiA0OHB4O1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICB9XG4gICAgICBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gICAgICB9XG4gICAgICBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgIH1cbiAgICB9XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICBwYWRkaW5nOiAxNnB4IDA7XG4gICAgICA+ZGl2IHtcbiAgICAgICAgYnV0dG9uIHtcbiAgICAgICAgICBtYXJnaW46IDAgMTZweDtcbiAgICAgICAgfVxuICAgICAgICBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgICAgICAgfVxuICAgICAgICBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogOHB4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lcntcblxuICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcblxuICAgIC5ib29raW5nLWNvbnRlbnQsIC5tY2stc2Nyb2xse1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgLmRldGFpbHN7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgICAgfVxuICAgIH1cblxuICB9XG59Il19 */"] }); + } }, directives: [i2.NgIf, i3.BookingEditComponent, i4.NgxSkeletonLoaderComponent], styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\n\n\n\n\n\n\n.loading[_ngcontent-%COMP%] {\n background-color: rgba(255, 255, 255, 0.5);\n padding: 3em;\n}\n.booking-content[_ngcontent-%COMP%] {\n margin: 0 auto 0 auto;\n padding: 1px 0px 120px 0;\n}\n.booking-content[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 100%;\n}\n.booking-content.open[_ngcontent-%COMP%] {\n margin: 0 auto 280px auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n border: 1px solid #E6E6E6;\n background-color: white;\n padding: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 1024px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 32px;\n margin: 10px 0 40px;\n font-weight: 500;\n width: 100%;\n text-align: center;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-size: 16px;\n padding: 4px 0 20px 0;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n padding: 0 18px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 400;\n font-size: 16px;\n color: #333333;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 400;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n max-width: 671px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n line-height: 24px;\n padding-bottom: 15px;\n min-width: 200px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n width: 100%;\n display: block;\n color: #333333;\n margin: 0 0 20px 0;\n font-weight: 500;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n padding: 28px 20px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] .rec-details-period[_ngcontent-%COMP%] {\n cursor: pointer;\n text-decoration: underline;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background-color: white;\n padding: 20px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0 0 0 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0 0 0 0;\n }\n}\n.bottom-panel[_ngcontent-%COMP%] {\n position: absolute;\n bottom: 0;\n width: 100%;\n min-height: 80px;\n background-color: white;\n border: 1px solid #E6E6E6;\n z-index: 2;\n flex-direction: row;\n display: flex;\n align-items: center;\n}\n.bottom-panel.fixed[_ngcontent-%COMP%] {\n position: fixed !important;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n width: 100%;\n max-width: none;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 880px;\n margin: 0 auto;\n display: flex;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex: 1;\n height: 48px;\n font-size: 16px;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 5px;\n border: 1px solid #D0D0D0;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 5px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n.booking-form-base-container.limit-height[_ngcontent-%COMP%] {\n height: 84vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-form-base-container.limit-height[_ngcontent-%COMP%] {\n height: 95vh;\n max-height: 886px;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-form-base-container.limit-height[_ngcontent-%COMP%] {\n height: 95vh;\n max-height: 886px;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9taXhpbnMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNwVUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQTFEQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDNUNBOztzQkFBQTtBQ1BBO0VBQ0UsMENBQUE7RUFDQSxZQUFBO0FKdUNGO0FJckNBO0VBQ0UscUJBQUE7RUFDQSx3QkFBQTtBSndDRjtBSXZDRTtFQUNFLFdBQUE7QUp5Q0o7QUl2Q0U7RUFDRSx5QkFBQTtBSnlDSjtBSXZDRTtFQUNFLHlCQUFBO0VBQ0EsdUJBQUE7RUFDQSxVQUFBO0FKeUNKO0FHNUNRO0VDQU47SUFLSSxvQkFBQTtFSjJDSjtBQUNGO0FHOUNRO0VDSE47SUFLSSxvQkFBQTtFSmdESjtBQUNGO0FJL0NJO0VBQ0UsaUJBQUE7RUFDQSxjQUFBO0FKaUROO0FJL0NJO0VBQ0UsZUFBQTtFQUNBLG1CQUFBO0VBQ0EsZ0JBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7QUppRE47QUk5Q0k7RUFDRSxjQUFBO0VBQ0EsZUFBQTtFQUNBLHFCQUFBO0FKZ0ROO0FJL0NNO0VBQ0UsZUFBQTtBSmlEUjtBSTlDSTtFQUNFLGVBQUE7RUFDQSxnQkFBQTtFQUNBLGVBQUE7RUFDQSxjQUFBO0FKZ0ROO0FJL0NNO0VBQ0UsZUFBQTtFQUNBLGdCQUFBO0FKaURSO0FJL0NNO0VBQ0UsYUFBQTtFQUNBLGVBQUE7RUFDQSxnQkFBQTtFQUNBLGNBQUE7QUppRFI7QUloRFE7RUFDRSxPQUFBO0VBQ0EsaUJBQUE7RUFDQSxvQkFBQTtFQUNBLGdCQUFBO0FKa0RWO0FJaERRO0VBQ0UsV0FBQTtFQUNBLGNBQUE7RUFDQSxjQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLHFHRnRCWTtBRndFdEI7QUNsSFk7RUcwREo7SUFRSSxlQUFBO0VKb0RWO0FBQ0Y7QUN2SFk7RUcwREo7SUFRSSxlQUFBO0VKeURWO0FBQ0Y7QUl0RE07RUFDRSx5QkFBQTtFQUNBLGtCQUFBO0FKd0RSO0FJdkRRO0VBQ0UsZUFBQTtFQUNBLDBCQUFBO0FKeURWO0FDcElZO0VHc0VOO0lBUUkscUJBQUE7RUowRFI7QUFDRjtBQ3pJWTtFR3NFTjtJQVFJLHFCQUFBO0VKK0RSO0FBQ0Y7QUk5RFE7RUFDRSx1QkFBQTtFQUNBLGFBQUE7QUpnRVY7QUNsSlk7RUdxRkE7SUFDRSxpQkFBQTtFSmdFWjtBQUNGO0FDdkpZO0VHcUZBO0lBQ0UsaUJBQUE7RUpxRVo7QUFDRjtBQzVKWTtFR0VaO0lBNkZJLGdCQUFBO0VKaUVGO0FBQ0Y7QUNqS1k7RUdFWjtJQTZGSSxnQkFBQTtFSnNFRjtBQUNGO0FJcEVBO0VBQ0Usa0JBQUE7RUFDQSxTQUFBO0VBQ0EsV0FBQTtFQUNBLGdCQUFBO0VBQ0EsdUJBQUE7RUFDQSx5QkFBQTtFQUNBLFVBQUE7RUFDQSxtQkFBQTtFQUNBLGFBQUE7RUFDQSxtQkFBQTtBSnVFRjtBSXJFRTtFQUNFLDBCQUFBO0FKdUVKO0FJcEVFO0VBR0UsV0FBQTtFQUNBLGVBQUE7QUpvRUo7QUlsRUk7RUFDRSxnQkFBQTtFQUNBLGNBQUE7RUFDQSxhQUFBO0FKb0VOO0FJbkVNO0VBQ0UsT0FBQTtFQUNBLFlBQUE7RUFDQSxlQUFBO0FKcUVSO0FJbkVNO0VBQ0UsaUJBQUE7RUFDQSx5QkFBQTtBSnFFUjtBSW5FTTtFQUNFLGdCQUFBO0FKcUVSO0FDM01ZO0VHa0hWO0lBd0JJLGVBQUE7RUpxRUo7RUluRU07SUFDRSxjQUFBO0VKcUVSO0VJbkVNO0lBQ0UsaUJBQUE7RUpxRVI7RUluRU07SUFDRSxnQkFBQTtFSnFFUjtBQUNGO0FDek5ZO0VHa0hWO0lBd0JJLGVBQUE7RUptRko7RUlqRk07SUFDRSxjQUFBO0VKbUZSO0VJakZNO0lBQ0UsaUJBQUE7RUptRlI7RUlqRk07SUFDRSxnQkFBQTtFSm1GUjtBQUNGO0FJMUVFO0VBRUUsWUFBQTtBSjRFSjtBQzNPWTtFR29LUjtJQUNFLFlBQUE7SUFDQSxpQkFBQTtFSjBFSjtFSXZFRTtJQUNFLFlBQUE7RUp5RUo7RUl4RUk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUowRU47QUFDRjtBQ3hQWTtFR29LUjtJQUNFLFlBQUE7SUFDQSxpQkFBQTtFSnVGSjtFSXBGRTtJQUNFLFlBQUE7RUpzRko7RUlyRkk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUp1Rk47QUFDRiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIiRwcmltYXJ5OiAjMUY0MEU2O1xuJGZvcm0tbGFiZWw6ICMwNTFDMkM7XG4kc2Vjb25kYXJ5LWxhYmVsOiAjNzY3Njc2O1xuJGJvcmRlcjogI0IzQjNCMztcbiRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkOiAjRDBEMEQwO1xuJGNoaXAtY29sb3I6ICMzMzMzMzM7XG4kcGxhY2Vob2xkZXItY29sb3I6ICM3RjdGN0Y7XG4kYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDtcbiRwYWdlLWJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4kc2VsZWN0ZWQtb3B0aW9uOiAjRTZFNkU2O1xuJGNvbG9yLWJyYW5kLXllbGxvdzogI2ZmZDA0ODtcbiRsaWdodC15ZWxsb3c6ICNmZmYzY2U7XG4kY29hY2htYXJrLXRleHQ6ICM2ZjRkMDA7XG4kZXJyb3ItY29sb3I6ICNFMTJFNDA7XG4kbm8tZmlsdGVycy1jb2xvcjogI0JDQkNCQztcbiRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjogI0Y0RjRGNDtcbiRwcmltYXJ5LWhpZ2hsaWdodDogIzIyNTFGRjtcbiRzY3JvbGxiYXItY29sb3I6ICM3NTc1NzU7XG5cbiRhdmFpbGFibGUtY29sb3I6ICM1RDlENTI7XG4kYXZhaWxhYmxlLWJ5LXJlcXVlc3QtY29sb3I6ICNGNUI1M0Y7XG4kaW4tdXNlLWNvbG9yOiAjRDQ0ODNFO1xuJG5vdC1ib29rYWJsZS1jb2xvcjogI0NDQ0NDQztcblxuJG1vZGFsLWJvZHktaGVhZGluZzogIzRENEQ0RDtcbiRhbGVydC1vdmVybGF5LWJnOiByZ2JhKDUsIDI4LCA0NCwgMC44NSk7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvYWNobWFyay1iZzogI0VCRUJGNjtcbiRjb2FjaG1hcmstZGFyay10ZXh0OiAjMUIxQjE5O1xuJGVycm9yLXRleHQ6ICNmZmY7XG5cbi8qKlxuICogU3BhY2luZ1xuICovXG5cbi8vIDRweFxuJHNwYWNpbmctc21hbGxlc3Q6IDAuMjVyZW07XG5cbi8vIDhweFxuJHNwYWNpbmcteHhzbWFsbDogMC41cmVtO1xuXG4vLyAxMnB4XG4kc3BhY2luZy14c21hbGw6IDAuNzVyZW07XG5cbi8vIDE2cHhcbiRzcGFjaW5nLXNtYWxsOiAxcmVtO1xuXG4vLyAyMHB4XG4kc3BhY2luZy1zbWFsbC1tZWRpdW06IDEuMjVyZW07XG5cbi8vIDI0cHhcbiRzcGFjaW5nLW1lZGl1bTogMS41cmVtO1xuXG4vLyAyOHB4XG4kc3BhY2luZy1tZWRpdW0tbGFyZ2U6IDEuNzVyZW07XG5cbi8vIDMycHhcbiRzcGFjaW5nLWxhcmdlOiAycmVtO1xuXG4vLyA0OHB4XG4kc3BhY2luZy14bGFyZ2U6IDNyZW07XG5cbi8vIDY0cHhcbiRzcGFjaW5nLXh4bGFyZ2U6IDRyZW07XG5cbi8vIDk2cHhcbiRzcGFjaW5nLWxhcmdlc3Q6IDZyZW07XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kZGV2aWNlLW1vYmlsZS1zaXplOiA0NTBweDtcbiRkZXZpY2UtdGFibGV0LXNpemU6IDgwMHB4O1xuJGRldmljZS1sYXB0b3Atc2l6ZTogMTAyNHB4O1xuXG4kZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZTogMTA0OHB4O1xuJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemU6IDEyODBweDtcblxuXG46ZXhwb3J0IHtcbiAgICBwcmltYXJ5OiAkcHJpbWFyeTtcbiAgICBzZWNvbmRhcnlMYWJlbDogJHNlY29uZGFyeS1sYWJlbDtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbiRpY29uLXNtYWxsOiAxNnB4O1xuJGljb24tbWVkaXVtOiAyNHB4O1xuJGljb24tbGFyZ2U6IDMycHg7XG4kaWNvbi14bGFyZ2U6IDQ4cHg7XG4iLCIvKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLmxvYWRpbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gIHBhZGRpbmc6IDNlbTtcbn1cblxuLmJvb2tpbmctY29udGVudCB7XG4gIG1hcmdpbjogMCBhdXRvIDAgYXV0bztcbiAgcGFkZGluZzogMXB4IDBweCAxMjBweCAwO1xufVxuLmJvb2tpbmctY29udGVudCA+IGRpdiB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLmJvb2tpbmctY29udGVudC5vcGVuIHtcbiAgbWFyZ2luOiAwIGF1dG8gMjgwcHggYXV0bztcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMge1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcGFkZGluZzogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMge1xuICAgIHBhZGRpbmctYm90dG9tOiA0MHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyB7XG4gICAgcGFkZGluZy1ib3R0b206IDQwcHg7XG4gIH1cbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgPiBkaXYge1xuICBtYXgtd2lkdGg6IDEwMjRweDtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIGgxIHtcbiAgZm9udC1zaXplOiAzMnB4O1xuICBtYXJnaW46IDEwcHggMCA0MHB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICB3aWR0aDogMTAwJTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyBsYWJlbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXNpemU6IDE2cHg7XG4gIHBhZGRpbmc6IDRweCAwIDIwcHggMDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgbGFiZWwgc3BhbiB7XG4gIHBhZGRpbmc6IDAgMThweDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24ge1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgY29sb3I6ICMzMzMzMzM7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uIGgxIHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBmb250LXdlaWdodDogNDAwO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgbWF4LXdpZHRoOiA2NzFweDtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uID4gZGl2ID4gZGl2IHtcbiAgZmxleDogMTtcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gIHBhZGRpbmctYm90dG9tOiAxNXB4O1xuICBtaW4td2lkdGg6IDIwMHB4O1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiBoMiB7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgY29sb3I6ICMzMzMzMzM7XG4gIG1hcmdpbjogMCAwIDIwcHggMDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiBoMiB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiBoMiB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICB9XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIHBhZGRpbmc6IDI4cHggMjBweDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tIC5yZWMtZGV0YWlscy1wZXJpb2Qge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20ge1xuICAgIHBhZGRpbmctYm90dG9tOiAxMDBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG4gIH1cbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tID4gZGl2IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDIwcHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSA+IGRpdiA+IGRpdiB7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSA+IGRpdiA+IGRpdiB7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQge1xuICAgIHBhZGRpbmc6IDAgMCAwIDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwIDAgMCAwO1xuICB9XG59XG5cbi5ib3R0b20tcGFuZWwge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDgwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICB6LWluZGV4OiAyO1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLmJvdHRvbS1wYW5lbC5maXhlZCB7XG4gIHBvc2l0aW9uOiBmaXhlZCAhaW1wb3J0YW50O1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IG5vbmU7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IHtcbiAgbWF4LXdpZHRoOiA4ODBweDtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGRpc3BsYXk6IGZsZXg7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbiB7XG4gIGZsZXg6IDE7XG4gIGhlaWdodDogNDhweDtcbiAgZm9udC1zaXplOiAxNnB4O1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMikge1xuICBtYXJnaW4tbGVmdDogNXB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyB7XG4gICAgcGFkZGluZzogMTZweCAwO1xuICB9XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uIHtcbiAgICBtYXJnaW46IDAgMTZweDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMSkge1xuICAgIG1hcmdpbi1yaWdodDogOHB4O1xuICB9XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uOm50aC1jaGlsZCgyKSB7XG4gICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMge1xuICAgIHBhZGRpbmc6IDE2cHggMDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbiB7XG4gICAgbWFyZ2luOiAwIDE2cHg7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMikge1xuICAgIG1hcmdpbi1sZWZ0OiA4cHg7XG4gIH1cbn1cblxuLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lci5saW1pdC1oZWlnaHQge1xuICBoZWlnaHQ6IDg0dmg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1mb3JtLWJhc2UtY29udGFpbmVyLmxpbWl0LWhlaWdodCB7XG4gICAgaGVpZ2h0OiA5NXZoO1xuICAgIG1heC1oZWlnaHQ6IDg4NnB4O1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCwgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCAuZGV0YWlscywgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCAuZGV0YWlscyB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIubGltaXQtaGVpZ2h0IHtcbiAgICBoZWlnaHQ6IDk1dmg7XG4gICAgbWF4LWhlaWdodDogODg2cHg7XG4gIH1cbiAgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAuYm9va2luZy1jb250ZW50LCAuYm9va2luZy1mb3JtLWJhc2UtY29udGFpbmVyIC5tY2stc2Nyb2xsIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gIH1cbiAgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzLCAuYm9va2luZy1mb3JtLWJhc2UtY29udGFpbmVyIC5tY2stc2Nyb2xsIC5kZXRhaWxzIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICB9XG59IiwiQGltcG9ydCBcInZhcnNcIjtcblxuQG1peGluIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJHNpemUsICRxdWFsaWZpZXIpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBpZiAoJHF1YWxpZmllciA9PSBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIGlmICgkcXVhbGlmaWVyID09IG1heC13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtYXgtd2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBtaXhpbiBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJG1pbiwgJG1heCkge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gdGhpcyBpcyBhIGNvcHkgb2YgcmVzcG9uZC10by4gd2UgZG9uJ3Qgd2FudCB0byBwcmVzZXJ2ZSB0aGF0IG1ldGhvZCBzaW5jZSB0aGUgYnJlYWtwb2ludHMgbWF5IGRpdmVyZ2UgZnJvbSB0aGUgb2xkIFVJLlxuQG1peGluIGlzLXNjcmVlbi1zaXplKCRtZWRpYTogYWxsLCAkb3JpZW50YXRpb246IG5vbmUpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuXG5AbWl4aW4gcGFnZS1wYWRkaW5nIHtcbiAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xufVxuXG4vLyBGb250IE1peGluc1xuJGZvbnQtbWNraW5zZXktc2FuczogXCJNY0tpbnNleSBTYW5zXCI7XG4kZm9udC10aGVpbmhhcmR0OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiRmb250LWJvd2VyOiBcIkJvd2VyXCI7XG5cbkBtaXhpbiBib3dlci1ib2xkIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtYm93ZXI7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIG1ja2luc2V5LXNhbnMge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBkaXNwbGF5LTEge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDRyZW07IC8vIDY0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTg3OyAvLyA3NnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0yIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0zIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTQge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzcmVtOyAvLyA0OHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTY2OyAvLyA1NnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDY0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTUge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuODMzOyAvLyAzNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42NDI7IC8vIDQwcHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTcge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDQ4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjc1cmVtOyAvLyA0NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNTJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICBsaW5lLWhlaWdodDogMS4xMTE7IC8vIDQ0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA0OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0zIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjIyOyAvLyA0NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy00IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy01IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyODhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy02IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTU1OyAvLyAyOHB4XG4gICAgfVxufVxuXG5AbWl4aW4gYm9keS1kZWZhdWx0IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI2cHhcbiAgICB9XG59XG5cbi8vLyBEb2VzbnQgZXhpc3QgaW4gTURTLlxuQG1peGluIGJvZHktdGlueSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07IC8vIDEycHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyMHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZm9ybS1sYWJlbCB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LWZhbWlseTogJGZvbnQtdGhlaW5oYXJkdDtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgY29sb3I6ICRwbGFjZWhvbGRlci1jb2xvcjtcbiAgICBmb250LXdlaWdodDogMzAwO1xufVxuXG5AbWl4aW4gY2hpcC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIGNoZWNrYm94LWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgY29sb3I6IGJsYWNrO1xufVxuXG4vLyBib3JkZXJzXG5cbkBtaXhpbiBtY2stY2hlY2tib3gtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAycHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLXRoaW4tYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlci1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJvcmRlci1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50LWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXItbGlnaHQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5cbi8vIGZ1bmN0aW9uc1xuXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbkBtaXhpbiBtYXgtbGluZXMoJGNvdW50KSB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAtd2Via2l0LWxpbmUtY2xhbXA6ICRjb3VudDtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuXG4vLyBpbWFnZXNcbkBtaXhpbiBtY2staWNvbigkd2lkdGgsICRhc3NldCwgJGhlaWdodDogJHdpZHRoLCAgJGFzc2V0UGF0aDogXCJsaWJzL3VpL3NyYy9saWIvaWNvbnNcIiwpIHtcbiAgICB3aWR0aDogJHdpZHRoO1xuICAgIGhlaWdodDogJGhlaWdodDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIjeyRhc3NldFBhdGh9LyN7JGFzc2V0fVwiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG59XG5cblxuQG1peGluIG1jay1zbWFsbC1pY29uKCRtb2JpbGUtYXNzZXQsICRkZXNrdG9wLWFzc2V0OiAkbW9iaWxlLWFzc2V0KSB7XG4gICAgQGluY2x1ZGUgbWNrLWljb24oMTZweCwgJGFzc2V0OiAkbW9iaWxlLWFzc2V0KTtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oMjRweCwgJGFzc2V0OiAkZGVza3RvcC1hc3NldCk7XG4gICAgfVxufVxuXG4vLyBza2VsZXRvblxuQG1peGluIHNrZWxldG9uLWJnIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItaW1hZ2Utc2l6ZSB7XG4gICAgd2lkdGg6IDgxcHg7XG4gICAgaGVpZ2h0OiA4MnB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMjE5cHg7XG4gICAgICAgIGhlaWdodDogMTE5cHg7XG4gICAgfVxufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItc3RhdHVzLXNpemUge1xuICAgIHdpZHRoOiAxMTdweDtcbiAgICBoZWlnaHQ6IDc4cHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAxMTdweDtcbiAgICAgICAgaGVpZ2h0OiA3OHB4O1xuICAgIH1cbn1cbiIsIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGNvbG9yLWJyYW5kLWVsZWN0cmljLWJsdWU6ICMyMjUxZmY7XG4kY29sb3ItYnJhbmQtZGVlcC1ibHVlOiAjMDUxYzJjO1xuJGNvbG9yLWJyYW5kLWN5YW46ICMwMGE5ZjQ7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kZm9udC1kYXJrOiAjMDAwO1xuJGZvbnQtbGlnaHQ6ICNmZmY7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuJGdyZWVuMTogIzIxOTY1MztcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2xvci1wcmltYXJ5OiAjMTkzN2VhO1xuJGNvbG9yLXByaW1hcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcbiRjb2xvci1wcmltYXJ5LWRhcms6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuXG4kY29sb3Itc2Vjb25kYXJ5OiAjNDI4NUY0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodDogbGlnaHRlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG4kY29sb3Itc2Vjb25kYXJ5LWRhcms6IGRhcmtlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG5cbiRiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuJGZvb3Rlci1iYWNrOiAjMjYzMjM4O1xuJGhlYWRlci1iYWNrOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNTFDMkMsICMwNTFDMkMgNDAlLCAjMEIyNDUzIDYwJSwgIzFGNDBFNiAxMDAlKTtcblxuJGNvbG9yLXRlcm5hcnk6ICMwNTFjMmM7XG5cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuXG4kZm9udC1zdGFjazogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiRoZWFkaW5nLWZvbnQ6IFwiTGFyaXNoTWNLaW5zZXlcIiwgJ0dlb3JnaWEnLCBzZXJpZjtcbiRmb250OiAkZm9udC1zdGFjaztcblxuJGZvbnQtZmFtaWx5LXByaW1hcnk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LXNlY29uZGFyeTogXCJCb3dlclwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiIHNlcmlmO1xuXG4kYmFzZS1zaXplOiAxNnB4O1xuJHRhYmxldC1zaXplOiAxNnB4O1xuJG1vYmlsZS1zaXplOiAxNnB4O1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGJyZWFrLW1vYmlsZTogNDUwcHg7XG4kYnJlYWstdGFibGV0OiA4MDBweDtcbiRicmVhay1sYXB0b3A6IDEwMjRweDtcblxuJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGU6IDgwMHB4O1xuJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQ6IDEwNDhweDtcbiRicmVhay1sYW5kc2NhcGUtbGFwdG9wOiAxMjgwcHg7XG4iLCJAaW1wb3J0ICcuL3ZhcmlhYmxlcyc7XG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuQG1peGluIGJveC1zaGFkb3coJGNvbG9yOiAjMDAwLCAkZGVwdGg6IDEpIHtcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMXB4ICogKCRkZXB0aCAtIDEpIHJnYmEoIzAwMCwgLjIpLFxuICAgICAgICAgICAgICAgIDAgMXB4IDFweCAwIHJnYmEoIzAwMCwgLjE0KSxcbiAgICAgICAgICAgICAgICAwIDJweCAxcHggLTFweCByZ2JhKCMwMDAsIC4xMik7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG5AbWl4aW4gcmVzcG9uZC10bygkbWVkaWEpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gIEBlbHNlIGlmICRtZWRpYSA9PSBsYXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1AZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQGltcG9ydCBcImxpYnMvdWkvc3JjL2xpYi9taXhpbnNcIjtcbkBpbXBvcnQgJ3ZhcmlhYmxlcyc7XG5AaW1wb3J0ICdtaXhpbnMnO1xuXG5cblxuXG4ubG9hZGluZyB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoI2ZmZmZmZiwgMC41KTtcbiAgcGFkZGluZzogM2VtO1xufVxuLmJvb2tpbmctY29udGVudCB7XG4gIG1hcmdpbjogMCBhdXRvIDAgYXV0bztcbiAgcGFkZGluZzogMXB4IDBweCAxMjBweCAwO1xuICA+ZGl2IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAmLm9wZW4ge1xuICAgIG1hcmdpbjogMCBhdXRvIDI4MHB4IGF1dG87XG4gIH1cbiAgLmRldGFpbHMge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgcGFkZGluZzogMDtcbiAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgcGFkZGluZy1ib3R0b206IDQwcHg7XG4gICAgfVxuICAgID5kaXYge1xuICAgICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICB9XG4gICAgaDEge1xuICAgICAgZm9udC1zaXplOiAzMnB4O1xuICAgICAgbWFyZ2luOiAxMHB4IDAgNDBweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIC8vIGZvbnQtZmFtaWx5OiAnQm93ZXInO1xuICAgIH1cbiAgICBsYWJlbCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIHBhZGRpbmc6IDRweCAwIDIwcHggMDtcbiAgICAgIHNwYW4ge1xuICAgICAgICBwYWRkaW5nOiAwIDE4cHg7XG4gICAgICB9XG4gICAgfVxuICAgIC5zZWN0aW9uIHtcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgIGgxIHtcbiAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgfVxuICAgICAgPmRpdiB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgbWF4LXdpZHRoOiA2NzFweDtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgID5kaXYge1xuICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDE1cHg7XG4gICAgICAgICAgbWluLXdpZHRoOiAyMDBweDtcbiAgICAgICAgfVxuICAgICAgICBoMiB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgY29sb3I6ICMzMzMzMzM7XG4gICAgICAgICAgbWFyZ2luOiAwIDAgMjBweCAwO1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1wcmltYXJ5O1xuICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICAgIH1cbiAgICAgICAgfSAgICAgICBcbiAgICAgIH1cbiAgICAgICYuYm90dG9tIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgICAgICAgcGFkZGluZzogMjhweCAyMHB4O1xuICAgICAgICAucmVjLWRldGFpbHMtcGVyaW9kIHtcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDEwMHB4O1xuICAgICAgICB9XG4gICAgICAgID5kaXYge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICAgIHBhZGRpbmc6IDIwcHg7XG5cbiAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgID4gZGl2e1xuICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICBwYWRkaW5nOiAwIDAgMCAwO1xuICB9XG59XG4uYm90dG9tLXBhbmVsIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiA4MHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgei1pbmRleDogMjtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAmLmZpeGVkIHtcbiAgICBwb3NpdGlvbjogZml4ZWQgIWltcG9ydGFudDtcbiAgfVxuICBcbiAgLmJ1dHRvbnMge1xuICAgIC8vIHBhZGRpbmc6IDI0cHggMTZweDtcbiAgICAvLyBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1heC13aWR0aDogbm9uZTtcblxuICAgID5kaXYge1xuICAgICAgbWF4LXdpZHRoOiA4ODBweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGJ1dHRvbiB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgfVxuICAgICAgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogNXB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRDBEMEQwO1xuICAgICAgfVxuICAgICAgYnV0dG9uOm50aC1jaGlsZCgyKSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gICAgICB9XG4gICAgfVxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgcGFkZGluZzogMTZweCAwO1xuICAgICAgPmRpdiB7XG4gICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgbWFyZ2luOiAwIDE2cHg7XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiA4cHg7XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9uOm50aC1jaGlsZCgyKSB7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cbi5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXJ7XG5cbiAgJi5saW1pdC1oZWlnaHQge1xuICAgIC8vIG1heC1oZWlnaHQ6IDg0MnB4O1xuICAgIGhlaWdodDogODR2aDtcbiAgICAvLyBtYXgtaGVpZ2h0OiA5M3ZoO1xuICB9XG5cbiAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgJi5saW1pdC1oZWlnaHQge1xuICAgICAgaGVpZ2h0OiA5NXZoO1xuICAgICAgbWF4LWhlaWdodDogODg2cHg7XG4gICAgfVxuXG4gICAgLmJvb2tpbmctY29udGVudCwgLm1jay1zY3JvbGx7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAuZGV0YWlsc3tcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cbn0iXX0= */"] }); /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(BookingEditWrapperComponent, [{ type: core_1.Component, args: [{ @@ -30109,19 +30572,19 @@ const booking_form_base_component_1 = __webpack_require__(/*! ./booking-form-bas const cloneDeep = __webpack_require__(/*! lodash/cloneDeep */ "../../node_modules/lodash/cloneDeep.js"); const i0 = __webpack_require__(/*! @angular/core */ "../../node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); const i1 = __webpack_require__(/*! @angular/common */ "../../node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js"); -const i2 = __webpack_require__(/*! ../room-booking-details-form/room-booking-details-form.component */ "./src/app/booking/room-booking-details-form/room-booking-details-form.component.ts"); -const i3 = __webpack_require__(/*! ../booking-confirmation/booking-confirmation.component */ "./src/app/booking/booking-confirmation/booking-confirmation.component.ts"); -const i4 = __webpack_require__(/*! ../../components/topbar-header/topbar-header.component */ "./src/app/components/topbar-header/topbar-header.component.ts"); +const i2 = __webpack_require__(/*! ../booking-confirmation/booking-confirmation.component */ "./src/app/booking/booking-confirmation/booking-confirmation.component.ts"); +const i3 = __webpack_require__(/*! ../../components/topbar-header/topbar-header.component */ "./src/app/components/topbar-header/topbar-header.component.ts"); +const i4 = __webpack_require__(/*! ../room-booking-details-form/room-booking-details-form.component */ "./src/app/booking/room-booking-details-form/room-booking-details-form.component.ts"); const i5 = __webpack_require__(/*! @angular/material/button */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/button.js"); function BookingEditComponent_div_1_Template(rf, ctx) { if (rf & 1) { - const _r8 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div", 16); - i0.ɵɵelement(1, "img", 17); - i0.ɵɵelementStart(2, "p", 18); + const _r5 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div", 6); + i0.ɵɵelement(1, "img", 7); + i0.ɵɵelementStart(2, "p", 8); i0.ɵɵtext(3); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(4, "img", 19); - i0.ɵɵlistener("click", function BookingEditComponent_div_1_Template_img_click_4_listener() { i0.ɵɵrestoreView(_r8); const ctx_r7 = i0.ɵɵnextContext(); return ctx_r7.hideWarningBanner(); }); + i0.ɵɵelementStart(4, "img", 9); + i0.ɵɵlistener("click", function BookingEditComponent_div_1_Template_img_click_4_listener() { i0.ɵɵrestoreView(_r5); const ctx_r4 = i0.ɵɵnextContext(); return ctx_r4.hideWarningBanner(); }); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { @@ -30129,22 +30592,34 @@ function BookingEditComponent_div_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵadvance(3); i0.ɵɵtextInterpolate(ctx_r0.warningMessage); } } -function BookingEditComponent_a_topbar_header_3_Template(rf, ctx) { if (rf & 1) { - const _r10 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "a-topbar-header", 20); - i0.ɵɵlistener("closeCallback", function BookingEditComponent_a_topbar_header_3_Template_a_topbar_header_closeCallback_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r9 = i0.ɵɵnextContext(); return ctx_r9.discardChanges(); }); +function BookingEditComponent_div_2_a_topbar_header_1_Template(rf, ctx) { if (rf & 1) { + const _r9 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "a-topbar-header", 13); + i0.ɵɵlistener("closeCallback", function BookingEditComponent_div_2_a_topbar_header_1_Template_a_topbar_header_closeCallback_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r8 = i0.ɵɵnextContext(2); return ctx_r8.discardChanges(); }); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r1 = i0.ɵɵnextContext(); - i0.ɵɵproperty("mode", ctx_r1.TopBarHeaderMode.Light)("modal", true)("noSurvey", true); + const ctx_r6 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("mode", ctx_r6.TopBarHeaderMode.Light)("modal", true)("noSurvey", true); } } -function BookingEditComponent_a_topbar_header_4_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelement(0, "a-topbar-header", 21); +function BookingEditComponent_div_2_a_topbar_header_2_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelement(0, "a-topbar-header", 14); } if (rf & 2) { - const ctx_r2 = i0.ɵɵnextContext(); - i0.ɵɵproperty("mode", ctx_r2.TopBarHeaderMode.Light)("back", ctx_r2.backRoute); + const ctx_r7 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("mode", ctx_r7.TopBarHeaderMode.Light)("back", ctx_r7.backRoute); +} } +function BookingEditComponent_div_2_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 10); + i0.ɵɵtemplate(1, BookingEditComponent_div_2_a_topbar_header_1_Template, 1, 3, "a-topbar-header", 11); + i0.ɵɵtemplate(2, BookingEditComponent_div_2_a_topbar_header_2_Template, 1, 2, "a-topbar-header", 12); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r1 = i0.ɵɵnextContext(); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r1.modal); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", !ctx_r1.modal); } } -function BookingEditComponent_div_19_Template(rf, ctx) { if (rf & 1) { +function BookingEditComponent_div_3_div_14_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div"); i0.ɵɵelementStart(1, "div"); i0.ɵɵtext(2); @@ -30157,32 +30632,32 @@ function BookingEditComponent_div_19_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r3 = i0.ɵɵnextContext(); + const ctx_r10 = i0.ɵɵnextContext(2); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Date: ", ctx_r3.dateString, ""); + i0.ɵɵtextInterpolate1("Date: ", ctx_r10.dateString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Time: ", ctx_r3.timeString, ""); + i0.ɵɵtextInterpolate1("Time: ", ctx_r10.timeString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate2("", ctx_r3.type, " meeting (", ctx_r3.durationString, ")"); + i0.ɵɵtextInterpolate2("", ctx_r10.type, " meeting (", ctx_r10.durationString, ")"); } } -function BookingEditComponent_div_20_span_4_Template(rf, ctx) { if (rf & 1) { - const _r13 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "span", 24); - i0.ɵɵlistener("click", function BookingEditComponent_div_20_span_4_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r12 = i0.ɵɵnextContext(2); return ctx_r12.openRecurrenceConflictsModal(ctx_r12.booking == null ? null : ctx_r12.booking.room); }); +function BookingEditComponent_div_3_div_15_span_4_Template(rf, ctx) { if (rf & 1) { + const _r14 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "span", 25); + i0.ɵɵlistener("click", function BookingEditComponent_div_3_div_15_span_4_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r13 = i0.ɵɵnextContext(3); return ctx_r13.openRecurrenceConflictsModal(ctx_r13.booking == null ? null : ctx_r13.booking.room); }); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r11 = i0.ɵɵnextContext(2); + const ctx_r12 = i0.ɵɵnextContext(3); var tmp_0_0 = null; i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate1(" - Conflicts(", (tmp_0_0 = ctx_r11.isConflictWithOccurences()) == null ? null : tmp_0_0.total_Conflicts, ") "); + i0.ɵɵtextInterpolate1(" - Conflicts(", (tmp_0_0 = ctx_r12.isConflictWithOccurences()) == null ? null : tmp_0_0.total_Conflicts, ") "); } } -function BookingEditComponent_div_20_Template(rf, ctx) { if (rf & 1) { +function BookingEditComponent_div_3_div_15_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div"); - i0.ɵɵelementStart(1, "div", 22); + i0.ɵɵelementStart(1, "div", 23); i0.ɵɵtext(2); i0.ɵɵpipe(3, "titlecase"); - i0.ɵɵtemplate(4, BookingEditComponent_div_20_span_4_Template, 2, 1, "span", 23); + i0.ɵɵtemplate(4, BookingEditComponent_div_3_div_15_span_4_Template, 2, 1, "span", 24); i0.ɵɵelementEnd(); i0.ɵɵelementStart(5, "div"); i0.ɵɵtext(6); @@ -30198,68 +30673,150 @@ function BookingEditComponent_div_20_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r4 = i0.ɵɵnextContext(); + const ctx_r11 = i0.ɵɵnextContext(2); var tmp_1_0 = null; - const currVal_1 = (tmp_1_0 = ctx_r4.isConflictWithOccurences()) == null ? null : tmp_1_0.is_conflict; + const currVal_1 = (tmp_1_0 = ctx_r11.isConflictWithOccurences()) == null ? null : tmp_1_0.is_conflict; i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("", (ctx_r4.data == null ? null : ctx_r4.data.value == null ? null : ctx_r4.data.value.recurrence_period) === "list" ? "Specific dates" : i0.ɵɵpipeBind1(3, 7, ctx_r4.data == null ? null : ctx_r4.data.value == null ? null : ctx_r4.data.value.recurrence_period), " "); + i0.ɵɵtextInterpolate1("", (ctx_r11.data == null ? null : ctx_r11.data.value == null ? null : ctx_r11.data.value.recurrence_period) === "list" ? "Specific dates" : i0.ɵɵpipeBind1(3, 7, ctx_r11.data == null ? null : ctx_r11.data.value == null ? null : ctx_r11.data.value.recurrence_period), " "); i0.ɵɵadvance(2); i0.ɵɵproperty("ngIf", currVal_1); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Start date: ", ctx_r4.dateString, ""); + i0.ɵɵtextInterpolate1("Start date: ", ctx_r11.dateString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("End date: ", ctx_r4.endDateString, ""); + i0.ɵɵtextInterpolate1("End date: ", ctx_r11.endDateString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Time: ", ctx_r4.timeString, ""); + i0.ɵɵtextInterpolate1("Time: ", ctx_r11.timeString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate2("", ctx_r4.type, " meeting (", ctx_r4.durationString, ")"); + i0.ɵɵtextInterpolate2("", ctx_r11.type, " meeting (", ctx_r11.durationString, ")"); } } -function BookingEditComponent_div_30_Template(rf, ctx) { if (rf & 1) { - const _r15 = i0.ɵɵgetCurrentView(); +function BookingEditComponent_div_3_Template(rf, ctx) { if (rf & 1) { + const _r16 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div", 15); + i0.ɵɵelementStart(1, "div", 16); + i0.ɵɵelementStart(2, "div", 17); + i0.ɵɵelementStart(3, "div", 18); + i0.ɵɵelementStart(4, "div"); + i0.ɵɵelementStart(5, "h1"); + i0.ɵɵtext(6); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(7, "div", 19); + i0.ɵɵelementStart(8, "div"); + i0.ɵɵelementStart(9, "app-room-booking-details-form", 20); + i0.ɵɵlistener("submitForm", function BookingEditComponent_div_3_Template_app_room_booking_details_form_submitForm_9_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r15 = i0.ɵɵnextContext(); return ctx_r15.submitForm($event); })("validateForm", function BookingEditComponent_div_3_Template_app_room_booking_details_form_validateForm_9_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r17 = i0.ɵɵnextContext(); return ctx_r17.validateForm($event); }); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(10, "div", 21); + i0.ɵɵelementStart(11, "div"); + i0.ɵɵelementStart(12, "h2"); + i0.ɵɵtext(13); + i0.ɵɵelementEnd(); + i0.ɵɵtemplate(14, BookingEditComponent_div_3_div_14_Template, 7, 4, "div", 22); + i0.ɵɵtemplate(15, BookingEditComponent_div_3_div_15_Template, 13, 9, "div", 22); + i0.ɵɵelementStart(16, "div"); + i0.ɵɵelementStart(17, "div"); + i0.ɵɵtext(18); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(19, "div"); + i0.ɵɵtext(20); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(21, "div"); + i0.ɵɵtext(22); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r2 = i0.ɵɵnextContext(); + i0.ɵɵadvance(6); + i0.ɵɵtextInterpolate1("Book ", ctx_r2.booking == null ? null : ctx_r2.booking.space == null ? null : ctx_r2.booking.space.local_name, ""); + i0.ɵɵadvance(3); + i0.ɵɵproperty("booking", ctx_r2.booking)("triggerSubmit", ctx_r2.submitTimestamp); + i0.ɵɵadvance(4); + i0.ɵɵtextInterpolate1("", (ctx_r2.data == null ? null : ctx_r2.data.value == null ? null : ctx_r2.data.value.is_recurrent) ? "Recurring" : "Room", " Booking Details"); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", !(ctx_r2.data == null ? null : ctx_r2.data.value == null ? null : ctx_r2.data.value.is_recurrent)); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r2.data == null ? null : ctx_r2.data.value == null ? null : ctx_r2.data.value.is_recurrent); + i0.ɵɵadvance(3); + i0.ɵɵtextInterpolate2("Address: ", ctx_r2.building == null ? null : ctx_r2.building.address, ", ", ctx_r2.building == null ? null : ctx_r2.building.city, ""); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate1("Room: ", ctx_r2.booking == null ? null : ctx_r2.booking.space == null ? null : ctx_r2.booking.space.local_name, ""); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate1("Capacity: ", ctx_r2.booking == null ? null : ctx_r2.booking.space == null ? null : ctx_r2.booking.space.capacity, ""); +} } +function BookingEditComponent_div_4_div_2_Template(rf, ctx) { if (rf & 1) { + const _r21 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "div"); - i0.ɵɵelementStart(1, "button", 25); - i0.ɵɵlistener("click", function BookingEditComponent_div_30_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r15); const ctx_r14 = i0.ɵɵnextContext(); return ctx_r14.goToBackRoute(); }); + i0.ɵɵelementStart(1, "button", 28); + i0.ɵɵlistener("click", function BookingEditComponent_div_4_div_2_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r21); const ctx_r20 = i0.ɵɵnextContext(2); return ctx_r20.goToBackRoute(); }); i0.ɵɵtext(2, "Back"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(3, "button", 26); - i0.ɵɵlistener("click", function BookingEditComponent_div_30_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r15); const ctx_r16 = i0.ɵɵnextContext(); return ctx_r16.createBooking(); }); + i0.ɵɵelementStart(3, "button", 29); + i0.ɵɵlistener("click", function BookingEditComponent_div_4_div_2_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r21); const ctx_r22 = i0.ɵɵnextContext(2); return ctx_r22.createBooking(); }); i0.ɵɵtext(4); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r5 = i0.ɵɵnextContext(); + const ctx_r18 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); - i0.ɵɵproperty("disabled", ctx_r5.loading); + i0.ɵɵproperty("disabled", ctx_r18.loading); i0.ɵɵadvance(2); - i0.ɵɵclassProp("disabled", ctx_r5.invalidForm); - i0.ɵɵproperty("disabled", ctx_r5.loading || ctx_r5.invalidForm); + i0.ɵɵclassProp("disabled", ctx_r18.invalidForm); + i0.ɵɵproperty("disabled", ctx_r18.loading || ctx_r18.invalidForm); i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate2("", ctx_r5.isEditSeries ? "Update" : "Create", " Booking", ctx_r5.is_request ? " Request" : "", ""); + i0.ɵɵtextInterpolate2("", ctx_r18.isEditSeries ? "Update" : "Create", " Booking", ctx_r18.is_request ? " Request" : "", ""); } } -function BookingEditComponent_div_31_Template(rf, ctx) { if (rf & 1) { - const _r18 = i0.ɵɵgetCurrentView(); +function BookingEditComponent_div_4_div_3_Template(rf, ctx) { if (rf & 1) { + const _r24 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "div"); - i0.ɵɵelementStart(1, "button", 25); - i0.ɵɵlistener("click", function BookingEditComponent_div_31_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r18); const ctx_r17 = i0.ɵɵnextContext(); return ctx_r17.discardChanges(); }); + i0.ɵɵelementStart(1, "button", 28); + i0.ɵɵlistener("click", function BookingEditComponent_div_4_div_3_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r24); const ctx_r23 = i0.ɵɵnextContext(2); return ctx_r23.discardChanges(); }); i0.ɵɵtext(2, "Back"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(3, "button", 26); - i0.ɵɵlistener("click", function BookingEditComponent_div_31_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r18); const ctx_r19 = i0.ɵɵnextContext(); return ctx_r19.createBooking(); }); + i0.ɵɵelementStart(3, "button", 29); + i0.ɵɵlistener("click", function BookingEditComponent_div_4_div_3_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r24); const ctx_r25 = i0.ɵɵnextContext(2); return ctx_r25.createBooking(); }); i0.ɵɵtext(4, "Update Booking"); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r6 = i0.ɵɵnextContext(); + const ctx_r19 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); - i0.ɵɵproperty("disabled", ctx_r6.loading); + i0.ɵɵproperty("disabled", ctx_r19.loading); i0.ɵɵadvance(2); - i0.ɵɵclassProp("disabled", ctx_r6.invalidForm); - i0.ɵɵproperty("disabled", ctx_r6.loading || ctx_r6.invalidForm); + i0.ɵɵclassProp("disabled", ctx_r19.invalidForm); + i0.ɵɵproperty("disabled", ctx_r19.loading || ctx_r19.invalidForm); +} } +const _c0 = function (a0) { return { "fixed": a0 }; }; +function BookingEditComponent_div_4_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 26); + i0.ɵɵelementStart(1, "div", 27); + i0.ɵɵtemplate(2, BookingEditComponent_div_4_div_2_Template, 5, 6, "div", 22); + i0.ɵɵtemplate(3, BookingEditComponent_div_4_div_3_Template, 5, 4, "div", 22); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r3 = i0.ɵɵnextContext(); + i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3, _c0, !ctx_r3.placeIntoModal)); + i0.ɵɵadvance(2); + i0.ɵɵproperty("ngIf", !ctx_r3.modal && !ctx_r3.placeIntoModal); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r3.placeIntoModal); } } class BookingEditComponent extends booking_form_base_component_1.BookingFormBaseComponent { constructor() { super(...arguments); this.updateCallback = new core_1.EventEmitter(); + /** + * placeIntoModal: Input decorator indecate as a flag to adapt component design into a dialog modal + * (by hiding header and adjusting height so that fit into a modal) + */ + this.placeIntoModal = false; } ngOnInit() { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5; @@ -30271,7 +30828,7 @@ class BookingEditComponent extends booking_form_base_component_1.BookingFormBase this.isEditSeries = next.action === data_common_1.SeriesAction.EDIT; } })); - this.modal = !this.isEditSeries; + this.modal = !this.isEditSeries && !this.placeIntoModal; this.roomEmail = this.booking.space.email; const attendees = (((_c = (_b = (_a = this.data) === null || _a === void 0 ? void 0 : _a.value) === null || _b === void 0 ? void 0 : _b.attendees) === null || _c === void 0 ? void 0 : _c.length) && ((_f = (_e = (_d = this.data) === null || _d === void 0 ? void 0 : _d.value) === null || _e === void 0 ? void 0 : _e.attendees[0]) === null || _f === void 0 ? void 0 : _f.meta)) ? this.data.value.attendees @@ -30414,94 +30971,29 @@ class BookingEditComponent extends booking_form_base_component_1.BookingFormBase } exports.BookingEditComponent = BookingEditComponent; BookingEditComponent.ɵfac = function BookingEditComponent_Factory(t) { return ɵBookingEditComponent_BaseFactory(t || BookingEditComponent); }; -BookingEditComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BookingEditComponent, selectors: [["app-booking-edit"]], inputs: { booking: "booking" }, outputs: { updateCallback: "updateCallback" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 33, vars: 21, consts: [[1, "mck-column", "mck-content-expand", "mck-content-page-container", "booking-form-base-container"], ["class", "fixed warning banner", 4, "ngIf"], [1, "header"], [3, "mode", "modal", "noSurvey", "closeCallback", 4, "ngIf"], [3, "mode", "back", 4, "ngIf"], [1, "mck-column", "mck-center", "results-container", "mck-scroll"], [1, "mck-column", "mck-scroll", "mck-content-expand-width"], [1, "booking-content", "mck-column", "mck-center", "mck-content-body"], [1, "details"], [1, "section"], [3, "booking", "triggerSubmit", "submitForm", "validateForm"], [1, "section", "bottom"], [4, "ngIf"], [1, "bottom-panel"], [1, "buttons"], [3, "confirmed", "loading", "modal", "dataForConfirmation", "callback"], [1, "fixed", "warning", "banner"], ["src", "assets/icon/booking_cancelled.svg"], [1, "banner-text"], ["src", "assets/icon/close-red.svg", 3, "click"], [3, "mode", "modal", "noSurvey", "closeCallback"], [3, "mode", "back"], [1, "rec-details-period"], [3, "click", 4, "ngIf"], [3, "click"], ["mat-button", "", "color", "secondary", 1, "mck-secondary-button", 3, "disabled", "click"], ["mat-button", "", "color", "primary", 1, "mck-primary-button", 3, "disabled", "click"]], template: function BookingEditComponent_Template(rf, ctx) { if (rf & 1) { +BookingEditComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BookingEditComponent, selectors: [["app-booking-edit"]], inputs: { booking: "booking", placeIntoModal: "placeIntoModal" }, outputs: { updateCallback: "updateCallback" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 6, vars: 13, consts: [[1, "mck-column", "mck-content-expand", "mck-content-page-container", "booking-form-base-container"], ["class", "fixed warning banner", 4, "ngIf"], ["class", "header", 4, "ngIf"], ["class", "mck-column mck-center results-container mck-scroll", 4, "ngIf"], ["class", "bottom-panel", 3, "ngClass", 4, "ngIf"], [3, "confirmed", "loading", "placeIntoModal", "modal", "dataForConfirmation", "callback"], [1, "fixed", "warning", "banner"], ["src", "assets/icon/booking_cancelled.svg"], [1, "banner-text"], ["src", "assets/icon/close-red.svg", 3, "click"], [1, "header"], [3, "mode", "modal", "noSurvey", "closeCallback", 4, "ngIf"], [3, "mode", "back", 4, "ngIf"], [3, "mode", "modal", "noSurvey", "closeCallback"], [3, "mode", "back"], [1, "mck-column", "mck-center", "results-container", "mck-scroll"], [1, "mck-column", "mck-scroll", "mck-content-expand-width"], [1, "booking-content", "mck-column", "mck-center", "mck-content-body"], [1, "details"], [1, "section"], [3, "booking", "triggerSubmit", "submitForm", "validateForm"], [1, "section", "bottom"], [4, "ngIf"], [1, "rec-details-period"], [3, "click", 4, "ngIf"], [3, "click"], [1, "bottom-panel", 3, "ngClass"], [1, "buttons"], ["mat-button", "", "color", "secondary", 1, "mck-secondary-button", 3, "disabled", "click"], ["mat-button", "", "color", "primary", 1, "mck-primary-button", 3, "disabled", "click"]], template: function BookingEditComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 0); i0.ɵɵtemplate(1, BookingEditComponent_div_1_Template, 5, 1, "div", 1); - i0.ɵɵelementStart(2, "div", 2); - i0.ɵɵtemplate(3, BookingEditComponent_a_topbar_header_3_Template, 1, 3, "a-topbar-header", 3); - i0.ɵɵtemplate(4, BookingEditComponent_a_topbar_header_4_Template, 1, 2, "a-topbar-header", 4); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(5, "div", 5); - i0.ɵɵelementStart(6, "div", 6); - i0.ɵɵelementStart(7, "div", 7); - i0.ɵɵelementStart(8, "div", 8); - i0.ɵɵelementStart(9, "div"); - i0.ɵɵelementStart(10, "h1"); - i0.ɵɵtext(11); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(12, "div", 9); - i0.ɵɵelementStart(13, "div"); - i0.ɵɵelementStart(14, "app-room-booking-details-form", 10); - i0.ɵɵlistener("submitForm", function BookingEditComponent_Template_app_room_booking_details_form_submitForm_14_listener($event) { return ctx.submitForm($event); })("validateForm", function BookingEditComponent_Template_app_room_booking_details_form_validateForm_14_listener($event) { return ctx.validateForm($event); }); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(15, "div", 11); - i0.ɵɵelementStart(16, "div"); - i0.ɵɵelementStart(17, "h2"); - i0.ɵɵtext(18); - i0.ɵɵelementEnd(); - i0.ɵɵtemplate(19, BookingEditComponent_div_19_Template, 7, 4, "div", 12); - i0.ɵɵtemplate(20, BookingEditComponent_div_20_Template, 13, 9, "div", 12); - i0.ɵɵelementStart(21, "div"); - i0.ɵɵelementStart(22, "div"); - i0.ɵɵtext(23); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(24, "div"); - i0.ɵɵtext(25); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(26, "div"); - i0.ɵɵtext(27); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(28, "div", 13); - i0.ɵɵelementStart(29, "div", 14); - i0.ɵɵtemplate(30, BookingEditComponent_div_30_Template, 5, 6, "div", 12); - i0.ɵɵtemplate(31, BookingEditComponent_div_31_Template, 5, 4, "div", 12); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(32, "booking-confirmation", 15); - i0.ɵɵlistener("callback", function BookingEditComponent_Template_booking_confirmation_callback_32_listener() { return ctx.callback(); }); + i0.ɵɵtemplate(2, BookingEditComponent_div_2_Template, 3, 2, "div", 2); + i0.ɵɵtemplate(3, BookingEditComponent_div_3_Template, 23, 10, "div", 3); + i0.ɵɵtemplate(4, BookingEditComponent_div_4_Template, 4, 5, "div", 4); + i0.ɵɵelementStart(5, "booking-confirmation", 5); + i0.ɵɵlistener("callback", function BookingEditComponent_Template_booking_confirmation_callback_5_listener() { return ctx.callback(); }); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - i0.ɵɵclassProp("fullpage-modal", ctx.modal); + i0.ɵɵclassProp("fullpage-modal", ctx.modal)("limit-height", ctx.placeIntoModal); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.showWarningBanner); - i0.ɵɵadvance(2); - i0.ɵɵproperty("ngIf", ctx.modal); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", !ctx.modal); - i0.ɵɵadvance(7); - i0.ɵɵtextInterpolate1("Book ", ctx.booking == null ? null : ctx.booking.space == null ? null : ctx.booking.space.local_name, ""); - i0.ɵɵadvance(3); - i0.ɵɵproperty("booking", ctx.booking)("triggerSubmit", ctx.submitTimestamp); - i0.ɵɵadvance(4); - i0.ɵɵtextInterpolate1("", (ctx.data == null ? null : ctx.data.value == null ? null : ctx.data.value.is_recurrent) ? "Recurring" : "Room", " Booking Details"); + i0.ɵɵproperty("ngIf", !ctx.placeIntoModal); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", !(ctx.data == null ? null : ctx.data.value == null ? null : ctx.data.value.is_recurrent)); + i0.ɵɵproperty("ngIf", !ctx.confirmed && !ctx.loading); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.data == null ? null : ctx.data.value == null ? null : ctx.data.value.is_recurrent); - i0.ɵɵadvance(3); - i0.ɵɵtextInterpolate2("Address: ", ctx.building == null ? null : ctx.building.address, ", ", ctx.building == null ? null : ctx.building.city, ""); - i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Room: ", ctx.booking == null ? null : ctx.booking.space == null ? null : ctx.booking.space.local_name, ""); - i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Capacity: ", ctx.booking == null ? null : ctx.booking.space == null ? null : ctx.booking.space.capacity, ""); - i0.ɵɵadvance(3); - i0.ɵɵproperty("ngIf", !ctx.modal); + i0.ɵɵproperty("ngIf", !ctx.confirmed && !ctx.loading); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.modal); - i0.ɵɵadvance(1); - i0.ɵɵproperty("confirmed", ctx.confirmed)("loading", ctx.loading)("modal", ctx.modal)("dataForConfirmation", ctx.dataForConfirmation); - } }, directives: [i1.NgIf, i2.RoomBookingDetailsFormComponent, i3.BookingConfirmationComponent, i4.TopbarHeaderComponent, i5.MatButton], pipes: [i1.TitleCasePipe], styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\n\n\n\n\n\n\n.loading[_ngcontent-%COMP%] {\n background-color: rgba(255, 255, 255, 0.5);\n padding: 3em;\n}\n.booking-content[_ngcontent-%COMP%] {\n margin: 0 auto 0 auto;\n padding: 1px 20px 120px 0;\n}\n.booking-content[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 100%;\n}\n.booking-content.open[_ngcontent-%COMP%] {\n margin: 0 auto 280px auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n border: 1px solid #E6E6E6;\n background-color: white;\n padding: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 1024px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 32px;\n margin: 10px 0 40px;\n font-weight: 500;\n width: 100%;\n text-align: center;\n font-family: \"Bower\";\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-size: 16px;\n padding: 4px 0 20px 0;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n padding: 0 18px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 400;\n font-size: 16px;\n color: #333333;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 400;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n max-width: 671px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n line-height: 24px;\n padding-bottom: 15px;\n min-width: 200px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n width: 100%;\n display: block;\n color: #333333;\n margin: 0 0 20px 0;\n font-weight: 500;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n padding: 28px 20px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] .rec-details-period[_ngcontent-%COMP%] {\n cursor: pointer;\n text-decoration: underline;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background-color: white;\n padding: 20px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0px 0px 100px 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0px 0px 100px 0;\n }\n}\n.bottom-panel[_ngcontent-%COMP%] {\n position: fixed;\n bottom: 0;\n width: 100%;\n min-height: 80px;\n background-color: white;\n border: 1px solid #E6E6E6;\n z-index: 2;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 24px 16px;\n border: 1px solid #E6E6E6;\n width: 100%;\n max-width: none;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 880px;\n margin: 0 auto;\n display: flex;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex: 1;\n height: 48px;\n font-size: 16px;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 5px;\n border: 1px solid #D0D0D0;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 5px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9taXhpbnMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNwVUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQTFEQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDNUNBOztzQkFBQTtBQ1BBO0VBQ0UsMENBQUE7RUFDQSxZQUFBO0FKdUNGO0FJckNBO0VBQ0UscUJBQUE7RUFDQSx5QkFBQTtBSndDRjtBSXZDRTtFQUNFLFdBQUE7QUp5Q0o7QUl2Q0U7RUFDRSx5QkFBQTtBSnlDSjtBSXZDRTtFQUNFLHlCQUFBO0VBQ0EsdUJBQUE7RUFDQSxVQUFBO0FKeUNKO0FHNUNRO0VDQU47SUFLSSxvQkFBQTtFSjJDSjtBQUNGO0FHOUNRO0VDSE47SUFLSSxvQkFBQTtFSmdESjtBQUNGO0FJL0NJO0VBQ0UsaUJBQUE7RUFDQSxjQUFBO0FKaUROO0FJL0NJO0VBQ0UsZUFBQTtFQUNBLG1CQUFBO0VBQ0EsZ0JBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7RUFDQSxvQkFBQTtBSmlETjtBSS9DSTtFQUNFLGNBQUE7RUFDQSxlQUFBO0VBQ0EscUJBQUE7QUppRE47QUloRE07RUFDRSxlQUFBO0FKa0RSO0FJL0NJO0VBQ0UsZUFBQTtFQUNBLGdCQUFBO0VBQ0EsZUFBQTtFQUNBLGNBQUE7QUppRE47QUloRE07RUFDRSxlQUFBO0VBQ0EsZ0JBQUE7QUprRFI7QUloRE07RUFDRSxhQUFBO0VBQ0EsZUFBQTtFQUNBLGdCQUFBO0VBQ0EsY0FBQTtBSmtEUjtBSWpEUTtFQUNFLE9BQUE7RUFDQSxpQkFBQTtFQUNBLG9CQUFBO0VBQ0EsZ0JBQUE7QUptRFY7QUlqRFE7RUFDRSxXQUFBO0VBQ0EsY0FBQTtFQUNBLGNBQUE7RUFDQSxrQkFBQTtFQUNBLGdCQUFBO0VBQ0EscUdGdEJZO0FGeUV0QjtBQ25IWTtFRzBESjtJQVFJLGVBQUE7RUpxRFY7QUFDRjtBQ3hIWTtFRzBESjtJQVFJLGVBQUE7RUowRFY7QUFDRjtBSXZETTtFQUNFLHlCQUFBO0VBQ0Esa0JBQUE7QUp5RFI7QUl4RFE7RUFDRSxlQUFBO0VBQ0EsMEJBQUE7QUowRFY7QUNySVk7RUdzRU47SUFRSSxxQkFBQTtFSjJEUjtBQUNGO0FDMUlZO0VHc0VOO0lBUUkscUJBQUE7RUpnRVI7QUFDRjtBSS9EUTtFQUNFLHVCQUFBO0VBQ0EsYUFBQTtBSmlFVjtBQ25KWTtFR3FGQTtJQUNFLGlCQUFBO0VKaUVaO0FBQ0Y7QUN4Slk7RUdxRkE7SUFDRSxpQkFBQTtFSnNFWjtBQUNGO0FDN0pZO0VHRVo7SUE2Rkksd0JBQUE7RUprRUY7QUFDRjtBQ2xLWTtFR0VaO0lBNkZJLHdCQUFBO0VKdUVGO0FBQ0Y7QUlyRUE7RUFDRSxlQUFBO0VBQ0EsU0FBQTtFQUNBLFdBQUE7RUFDQSxnQkFBQTtFQUNBLHVCQUFBO0VBQ0EseUJBQUE7RUFDQSxVQUFBO0FKd0VGO0FJdEVFO0VBQ0Usa0JBQUE7RUFDQSx5QkFBQTtFQUNBLFdBQUE7RUFDQSxlQUFBO0FKd0VKO0FJdEVJO0VBQ0UsZ0JBQUE7RUFDQSxjQUFBO0VBQ0EsYUFBQTtBSndFTjtBSXZFTTtFQUNFLE9BQUE7RUFDQSxZQUFBO0VBQ0EsZUFBQTtBSnlFUjtBSXZFTTtFQUNFLGlCQUFBO0VBQ0EseUJBQUE7QUp5RVI7QUl2RU07RUFDRSxnQkFBQTtBSnlFUjtBQ3hNWTtFRzJHVjtJQXdCSSxlQUFBO0VKeUVKO0VJdkVNO0lBQ0UsY0FBQTtFSnlFUjtFSXZFTTtJQUNFLGlCQUFBO0VKeUVSO0VJdkVNO0lBQ0UsZ0JBQUE7RUp5RVI7QUFDRjtBQ3ROWTtFRzJHVjtJQXdCSSxlQUFBO0VKdUZKO0VJckZNO0lBQ0UsY0FBQTtFSnVGUjtFSXJGTTtJQUNFLGlCQUFBO0VKdUZSO0VJckZNO0lBQ0UsZ0JBQUE7RUp1RlI7QUFDRjtBQ3BPWTtFR3dKUjtJQUNFLFlBQUE7RUpnRko7RUkvRUk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUppRk47QUFDRjtBQzlPWTtFR3dKUjtJQUNFLFlBQUE7RUp5Rko7RUl4Rkk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUowRk47QUFDRiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIiRwcmltYXJ5OiAjMUY0MEU2O1xuJGZvcm0tbGFiZWw6ICMwNTFDMkM7XG4kc2Vjb25kYXJ5LWxhYmVsOiAjNzY3Njc2O1xuJGJvcmRlcjogI0IzQjNCMztcbiRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkOiAjRDBEMEQwO1xuJGNoaXAtY29sb3I6ICMzMzMzMzM7XG4kcGxhY2Vob2xkZXItY29sb3I6ICM3RjdGN0Y7XG4kYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDtcbiRwYWdlLWJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4kc2VsZWN0ZWQtb3B0aW9uOiAjRTZFNkU2O1xuJGNvbG9yLWJyYW5kLXllbGxvdzogI2ZmZDA0ODtcbiRsaWdodC15ZWxsb3c6ICNmZmYzY2U7XG4kY29hY2htYXJrLXRleHQ6ICM2ZjRkMDA7XG4kZXJyb3ItY29sb3I6ICNFMTJFNDA7XG4kbm8tZmlsdGVycy1jb2xvcjogI0JDQkNCQztcbiRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjogI0Y0RjRGNDtcbiRwcmltYXJ5LWhpZ2hsaWdodDogIzIyNTFGRjtcbiRzY3JvbGxiYXItY29sb3I6ICM3NTc1NzU7XG5cbiRhdmFpbGFibGUtY29sb3I6ICM1RDlENTI7XG4kYXZhaWxhYmxlLWJ5LXJlcXVlc3QtY29sb3I6ICNGNUI1M0Y7XG4kaW4tdXNlLWNvbG9yOiAjRDQ0ODNFO1xuJG5vdC1ib29rYWJsZS1jb2xvcjogI0NDQ0NDQztcblxuJG1vZGFsLWJvZHktaGVhZGluZzogIzRENEQ0RDtcbiRhbGVydC1vdmVybGF5LWJnOiByZ2JhKDUsIDI4LCA0NCwgMC44NSk7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvYWNobWFyay1iZzogI0VCRUJGNjtcbiRjb2FjaG1hcmstZGFyay10ZXh0OiAjMUIxQjE5O1xuJGVycm9yLXRleHQ6ICNmZmY7XG5cbi8qKlxuICogU3BhY2luZ1xuICovXG5cbi8vIDRweFxuJHNwYWNpbmctc21hbGxlc3Q6IDAuMjVyZW07XG5cbi8vIDhweFxuJHNwYWNpbmcteHhzbWFsbDogMC41cmVtO1xuXG4vLyAxMnB4XG4kc3BhY2luZy14c21hbGw6IDAuNzVyZW07XG5cbi8vIDE2cHhcbiRzcGFjaW5nLXNtYWxsOiAxcmVtO1xuXG4vLyAyMHB4XG4kc3BhY2luZy1zbWFsbC1tZWRpdW06IDEuMjVyZW07XG5cbi8vIDI0cHhcbiRzcGFjaW5nLW1lZGl1bTogMS41cmVtO1xuXG4vLyAyOHB4XG4kc3BhY2luZy1tZWRpdW0tbGFyZ2U6IDEuNzVyZW07XG5cbi8vIDMycHhcbiRzcGFjaW5nLWxhcmdlOiAycmVtO1xuXG4vLyA0OHB4XG4kc3BhY2luZy14bGFyZ2U6IDNyZW07XG5cbi8vIDY0cHhcbiRzcGFjaW5nLXh4bGFyZ2U6IDRyZW07XG5cbi8vIDk2cHhcbiRzcGFjaW5nLWxhcmdlc3Q6IDZyZW07XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kZGV2aWNlLW1vYmlsZS1zaXplOiA0NTBweDtcbiRkZXZpY2UtdGFibGV0LXNpemU6IDgwMHB4O1xuJGRldmljZS1sYXB0b3Atc2l6ZTogMTAyNHB4O1xuXG4kZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZTogMTA0OHB4O1xuJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemU6IDEyODBweDtcblxuXG46ZXhwb3J0IHtcbiAgICBwcmltYXJ5OiAkcHJpbWFyeTtcbiAgICBzZWNvbmRhcnlMYWJlbDogJHNlY29uZGFyeS1sYWJlbDtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbiRpY29uLXNtYWxsOiAxNnB4O1xuJGljb24tbWVkaXVtOiAyNHB4O1xuJGljb24tbGFyZ2U6IDMycHg7XG4kaWNvbi14bGFyZ2U6IDQ4cHg7XG4iLCIvKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLmxvYWRpbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gIHBhZGRpbmc6IDNlbTtcbn1cblxuLmJvb2tpbmctY29udGVudCB7XG4gIG1hcmdpbjogMCBhdXRvIDAgYXV0bztcbiAgcGFkZGluZzogMXB4IDIwcHggMTIwcHggMDtcbn1cbi5ib29raW5nLWNvbnRlbnQgPiBkaXYge1xuICB3aWR0aDogMTAwJTtcbn1cbi5ib29raW5nLWNvbnRlbnQub3BlbiB7XG4gIG1hcmdpbjogMCBhdXRvIDI4MHB4IGF1dG87XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogNDBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMge1xuICAgIHBhZGRpbmctYm90dG9tOiA0MHB4O1xuICB9XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzID4gZGl2IHtcbiAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyBoMSB7XG4gIGZvbnQtc2l6ZTogMzJweDtcbiAgbWFyZ2luOiAxMHB4IDAgNDBweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgd2lkdGg6IDEwMCU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiQm93ZXJcIjtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgbGFiZWwge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZm9udC1zaXplOiAxNnB4O1xuICBwYWRkaW5nOiA0cHggMCAyMHB4IDA7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIGxhYmVsIHNwYW4ge1xuICBwYWRkaW5nOiAwIDE4cHg7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uIHtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGNvbG9yOiAjMzMzMzMzO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiBoMSB7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIG1heC13aWR0aDogNjcxcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiA+IGRpdiB7XG4gIGZsZXg6IDE7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMTVweDtcbiAgbWluLXdpZHRoOiAyMDBweDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYgaDIge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYgaDIge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYgaDIge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgfVxufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBwYWRkaW5nOiAyOHB4IDIwcHg7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSAucmVjLWRldGFpbHMtcGVyaW9kIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSB7XG4gICAgcGFkZGluZy1ib3R0b206IDEwMHB4O1xuICB9XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSA+IGRpdiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBwYWRkaW5nOiAyMHB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20gPiBkaXYgPiBkaXYge1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20gPiBkaXYgPiBkaXYge1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwcHggMHB4IDEwMHB4IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwcHggMHB4IDEwMHB4IDA7XG4gIH1cbn1cblxuLmJvdHRvbS1wYW5lbCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogODBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gIHotaW5kZXg6IDI7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zIHtcbiAgcGFkZGluZzogMjRweCAxNnB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiBub25lO1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiB7XG4gIG1heC13aWR0aDogODgwcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBkaXNwbGF5OiBmbGV4O1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b24ge1xuICBmbGV4OiAxO1xuICBoZWlnaHQ6IDQ4cHg7XG4gIGZvbnQtc2l6ZTogMTZweDtcbn1cbi5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gIG1hcmdpbi1yaWdodDogNXB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjRDBEMEQwO1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgbWFyZ2luLWxlZnQ6IDVweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMge1xuICAgIHBhZGRpbmc6IDE2cHggMDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbiB7XG4gICAgbWFyZ2luOiAwIDE2cHg7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMikge1xuICAgIG1hcmdpbi1sZWZ0OiA4cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm90dG9tLXBhbmVsIC5idXR0b25zIHtcbiAgICBwYWRkaW5nOiAxNnB4IDA7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b24ge1xuICAgIG1hcmdpbjogMCAxNnB4O1xuICB9XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gICAgbWFyZ2luLXJpZ2h0OiA4cHg7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgICBtYXJnaW4tbGVmdDogOHB4O1xuICB9XG59XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCwgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCAuZGV0YWlscywgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCAuZGV0YWlscyB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCwgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCAuZGV0YWlscywgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCAuZGV0YWlscyB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxufSIsIkBpbXBvcnQgXCJ2YXJzXCI7XG5cbkBtaXhpbiBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRzaXplLCAkcXVhbGlmaWVyKSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAaWYgKCRxdWFsaWZpZXIgPT0gbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSBpZiAoJHF1YWxpZmllciA9PSBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWF4LXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5AbWl4aW4gYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRtaW4sICRtYXgpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkbWluKSBhbmQgKG1heC13aWR0aDogJG1heCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIHRoaXMgaXMgYSBjb3B5IG9mIHJlc3BvbmQtdG8uIHdlIGRvbid0IHdhbnQgdG8gcHJlc2VydmUgdGhhdCBtZXRob2Qgc2luY2UgdGhlIGJyZWFrcG9pbnRzIG1heSBkaXZlcmdlIGZyb20gdGhlIG9sZCBVSS5cbkBtaXhpbiBpcy1zY3JlZW4tc2l6ZSgkbWVkaWE6IGFsbCwgJG9yaWVudGF0aW9uOiBub25lKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cblxuQG1peGluIHBhZ2UtcGFkZGluZyB7XG4gICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbDtcbn1cblxuLy8gRm9udCBNaXhpbnNcbiRmb250LW1ja2luc2V5LXNhbnM6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuJGZvbnQtdGhlaW5oYXJkdDogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4kZm9udC1ib3dlcjogXCJCb3dlclwiO1xuXG5AbWl4aW4gYm93ZXItYm9sZCB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWJvd2VyO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBtY2tpbnNleS1zYW5zIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gZGlzcGxheS0xIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiA0cmVtOyAvLyA2NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4NzsgLy8gNzZweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMiB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDYwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS00IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogM3JlbTsgLy8gNDhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE2NjsgLy8gNTZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS01IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjgzMzsgLy8gMzRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjQyOyAvLyA0MHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS03IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyOHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTEge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA0OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi43NXJlbTsgLy8gNDRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDUycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTIge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTExOyAvLyA0NHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNDhweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMyB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIyMjsgLy8gNDRweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjg4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1NTsgLy8gMjhweFxuICAgIH1cbn1cblxuQG1peGluIGJvZHktZGVmYXVsdCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNnB4XG4gICAgfVxufVxuXG4vLy8gRG9lc250IGV4aXN0IGluIE1EUy5cbkBtaXhpbiBib2R5LXRpbnkge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtOyAvLyAxMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjRweFxuICAgIH1cbn1cblxuQG1peGluIGZvcm0tbGFiZWwge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LXRoZWluaGFyZHQ7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGNvbG9yOiAkcGxhY2Vob2xkZXItY29sb3I7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbn1cblxuQG1peGluIGNoaXAtbGFiZWwge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBjaGVja2JveC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGNvbG9yOiBibGFjaztcbn1cblxuLy8gYm9yZGVyc1xuXG5AbWl4aW4gbWNrLWNoZWNrYm94LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay10aGluLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXItbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBib3JkZXItY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudC1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuXG4vLyBmdW5jdGlvbnNcblxuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG5AbWl4aW4gbWF4LWxpbmVzKCRjb3VudCkge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiAkY291bnQ7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbn1cblxuLy8gaW1hZ2VzXG5AbWl4aW4gbWNrLWljb24oJHdpZHRoLCAkYXNzZXQsICRoZWlnaHQ6ICR3aWR0aCwgICRhc3NldFBhdGg6IFwibGlicy91aS9zcmMvbGliL2ljb25zXCIsKSB7XG4gICAgd2lkdGg6ICR3aWR0aDtcbiAgICBoZWlnaHQ6ICRoZWlnaHQ7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiI3skYXNzZXRQYXRofS8jeyRhc3NldH1cIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuXG5cbkBtaXhpbiBtY2stc21hbGwtaWNvbigkbW9iaWxlLWFzc2V0LCAkZGVza3RvcC1hc3NldDogJG1vYmlsZS1hc3NldCkge1xuICAgIEBpbmNsdWRlIG1jay1pY29uKDE2cHgsICRhc3NldDogJG1vYmlsZS1hc3NldCk7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICRhc3NldDogJGRlc2t0b3AtYXNzZXQpO1xuICAgIH1cbn1cblxuLy8gc2tlbGV0b25cbkBtaXhpbiBza2VsZXRvbi1iZyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWltYWdlLXNpemUge1xuICAgIHdpZHRoOiA4MXB4O1xuICAgIGhlaWdodDogODJweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDIxOXB4O1xuICAgICAgICBoZWlnaHQ6IDExOXB4O1xuICAgIH1cbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLXN0YXR1cy1zaXplIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMTE3cHg7XG4gICAgICAgIGhlaWdodDogNzhweDtcbiAgICB9XG59XG4iLCIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRjb2xvci1icmFuZC1lbGVjdHJpYy1ibHVlOiAjMjI1MWZmO1xuJGNvbG9yLWJyYW5kLWRlZXAtYmx1ZTogIzA1MWMyYztcbiRjb2xvci1icmFuZC1jeWFuOiAjMDBhOWY0O1xuXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGZvbnQtZGFyazogIzAwMDtcbiRmb250LWxpZ2h0OiAjZmZmO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcbiRncmVlbjE6ICMyMTk2NTM7XG5cbiRwZW5kaW5nOiAjZmZiMzAwO1xuJHBlbmRpbmctbGlnaHQ6IGxpZ2h0ZW4oJHBlbmRpbmcsIDEwKTtcbiRwZW5kaW5nLWRhcms6IGRhcmtlbigkcGVuZGluZywgMTApO1xuXG4kZXJyb3I6ICNlNTM5MzU7XG4kZXJyb3ItbGlnaHQ6IGxpZ2h0ZW4oJGVycm9yLCAxMCk7XG4kZXJyb3ItZGFyazogZGFya2VuKCRlcnJvciwgMTApO1xuXG4kY29sb3ItcHJpbWFyeTogIzE5MzdlYTtcbiRjb2xvci1wcmltYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG4kY29sb3ItcHJpbWFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcblxuJGNvbG9yLXNlY29uZGFyeTogIzQyODVGNDtcbiRjb2xvci1zZWNvbmRhcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuJGNvbG9yLXNlY29uZGFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuXG4kYmFja2dyb3VuZDogI2YwZjBmMDtcbiRmb290ZXItYmFjazogIzI2MzIzODtcbiRoZWFkZXItYmFjazogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMDUxQzJDLCAjMDUxQzJDIDQwJSwgIzBCMjQ1MyA2MCUsICMxRjQwRTYgMTAwJSk7XG5cbiRjb2xvci10ZXJuYXJ5OiAjMDUxYzJjO1xuXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cblxuJGZvbnQtc3RhY2s6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuXG4kaGVhZGluZy1mb250OiBcIkxhcmlzaE1jS2luc2V5XCIsICdHZW9yZ2lhJywgc2VyaWY7XG4kZm9udDogJGZvbnQtc3RhY2s7XG5cbiRmb250LWZhbWlseS1wcmltYXJ5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbiRmb250LWZhbWlseS1zZWNvbmRhcnk6IFwiQm93ZXJcIiwgR2VvcmdpYSwgXCJUaW1lcyBOZXcgUm9tYW5cIiBzZXJpZjtcblxuJGJhc2Utc2l6ZTogMTZweDtcbiR0YWJsZXQtc2l6ZTogMTZweDtcbiRtb2JpbGUtc2l6ZTogMTZweDtcblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbiRicmVhay1tb2JpbGU6IDQ1MHB4O1xuJGJyZWFrLXRhYmxldDogODAwcHg7XG4kYnJlYWstbGFwdG9wOiAxMDI0cHg7XG5cbiRicmVhay1sYW5kc2NhcGUtbW9iaWxlOiA4MDBweDtcbiRicmVhay1sYW5kc2NhcGUtdGFibGV0OiAxMDQ4cHg7XG4kYnJlYWstbGFuZHNjYXBlLWxhcHRvcDogMTI4MHB4O1xuIiwiQGltcG9ydCAnLi92YXJpYWJsZXMnO1xuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbkBtaXhpbiBib3gtc2hhZG93KCRjb2xvcjogIzAwMCwgJGRlcHRoOiAxKSB7XG4gICAgYm94LXNoYWRvdzogMCAxcHggM3B4IDFweCAqICgkZGVwdGggLSAxKSByZ2JhKCMwMDAsIC4yKSxcbiAgICAgICAgICAgICAgICAwIDFweCAxcHggMCByZ2JhKCMwMDAsIC4xNCksXG4gICAgICAgICAgICAgICAgMCAycHggMXB4IC0xcHggcmdiYSgjMDAwLCAuMTIpO1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuQG1peGluIHJlc3BvbmQtdG8oJG1lZGlhKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9ICBAZWxzZSBpZiAkbWVkaWEgPT0gbGF0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9QGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIkBpbXBvcnQgXCJsaWJzL3VpL3NyYy9saWIvbWl4aW5zXCI7XG5AaW1wb3J0ICd2YXJpYWJsZXMnO1xuQGltcG9ydCAnbWl4aW5zJztcblxuXG5cblxuLmxvYWRpbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCNmZmZmZmYsIDAuNSk7XG4gIHBhZGRpbmc6IDNlbTtcbn1cbi5ib29raW5nLWNvbnRlbnQge1xuICBtYXJnaW46IDAgYXV0byAwIGF1dG87XG4gIHBhZGRpbmc6IDFweCAyMHB4IDEyMHB4IDA7XG4gID5kaXYge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gICYub3BlbiB7XG4gICAgbWFyZ2luOiAwIGF1dG8gMjgwcHggYXV0bztcbiAgfVxuICAuZGV0YWlscyB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIEBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNDBweDtcbiAgICB9XG4gICAgPmRpdiB7XG4gICAgICBtYXgtd2lkdGg6IDEwMjRweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIH1cbiAgICBoMSB7XG4gICAgICBmb250LXNpemU6IDMycHg7XG4gICAgICBtYXJnaW46IDEwcHggMCA0MHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgZm9udC1mYW1pbHk6ICdCb3dlcic7XG4gICAgfVxuICAgIGxhYmVsIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgcGFkZGluZzogNHB4IDAgMjBweCAwO1xuICAgICAgc3BhbiB7XG4gICAgICAgIHBhZGRpbmc6IDAgMThweDtcbiAgICAgIH1cbiAgICB9XG4gICAgLnNlY3Rpb24ge1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgICAgaDEge1xuICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICB9XG4gICAgICA+ZGl2IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBtYXgtd2lkdGg6IDY3MXB4O1xuICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgICAgPmRpdiB7XG4gICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICBsaW5lLWhlaWdodDogMjRweDtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTVweDtcbiAgICAgICAgICBtaW4td2lkdGg6IDIwMHB4O1xuICAgICAgICB9XG4gICAgICAgIGgyIHtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgICAgICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LXByaW1hcnk7XG4gICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgICAgfVxuICAgICAgICB9ICAgICAgIFxuICAgICAgfVxuICAgICAgJi5ib3R0b20ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICAgICAgICBwYWRkaW5nOiAyOHB4IDIwcHg7XG4gICAgICAgIC5yZWMtZGV0YWlscy1wZXJpb2Qge1xuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG4gICAgICAgIH1cbiAgICAgICAgPmRpdiB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgICAgcGFkZGluZzogMjBweDtcblxuICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgPiBkaXZ7XG4gICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgIHBhZGRpbmc6IDBweCAwcHggMTAwcHggMDtcbiAgfVxufVxuLmJvdHRvbS1wYW5lbCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogODBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gIHotaW5kZXg6IDI7XG4gIFxuICAuYnV0dG9ucyB7XG4gICAgcGFkZGluZzogMjRweCAxNnB4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiBub25lO1xuXG4gICAgPmRpdiB7XG4gICAgICBtYXgtd2lkdGg6IDg4MHB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYnV0dG9uIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgaGVpZ2h0OiA0OHB4O1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICB9XG4gICAgICBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gICAgICB9XG4gICAgICBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgIH1cbiAgICB9XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICBwYWRkaW5nOiAxNnB4IDA7XG4gICAgICA+ZGl2IHtcbiAgICAgICAgYnV0dG9uIHtcbiAgICAgICAgICBtYXJnaW46IDAgMTZweDtcbiAgICAgICAgfVxuICAgICAgICBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgICAgICAgfVxuICAgICAgICBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogOHB4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lcntcblxuICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcblxuICAgIC5ib29raW5nLWNvbnRlbnQsIC5tY2stc2Nyb2xse1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgLmRldGFpbHN7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgICAgfVxuICAgIH1cblxuICB9XG59Il19 */"] }); + i0.ɵɵproperty("confirmed", ctx.confirmed)("loading", ctx.loading)("placeIntoModal", ctx.placeIntoModal)("modal", ctx.modal)("dataForConfirmation", ctx.dataForConfirmation); + } }, directives: [i1.NgIf, i2.BookingConfirmationComponent, i3.TopbarHeaderComponent, i4.RoomBookingDetailsFormComponent, i1.NgClass, i5.MatButton], pipes: [i1.TitleCasePipe], styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\n\n\n\n\n\n\n.loading[_ngcontent-%COMP%] {\n background-color: rgba(255, 255, 255, 0.5);\n padding: 3em;\n}\n.booking-content[_ngcontent-%COMP%] {\n margin: 0 auto 0 auto;\n padding: 1px 0px 120px 0;\n}\n.booking-content[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 100%;\n}\n.booking-content.open[_ngcontent-%COMP%] {\n margin: 0 auto 280px auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n border: 1px solid #E6E6E6;\n background-color: white;\n padding: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 1024px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 32px;\n margin: 10px 0 40px;\n font-weight: 500;\n width: 100%;\n text-align: center;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-size: 16px;\n padding: 4px 0 20px 0;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n padding: 0 18px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 400;\n font-size: 16px;\n color: #333333;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 400;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n max-width: 671px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n line-height: 24px;\n padding-bottom: 15px;\n min-width: 200px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n width: 100%;\n display: block;\n color: #333333;\n margin: 0 0 20px 0;\n font-weight: 500;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n padding: 28px 20px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] .rec-details-period[_ngcontent-%COMP%] {\n cursor: pointer;\n text-decoration: underline;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background-color: white;\n padding: 20px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0 0 0 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0 0 0 0;\n }\n}\n.bottom-panel[_ngcontent-%COMP%] {\n position: absolute;\n bottom: 0;\n width: 100%;\n min-height: 80px;\n background-color: white;\n border: 1px solid #E6E6E6;\n z-index: 2;\n flex-direction: row;\n display: flex;\n align-items: center;\n}\n.bottom-panel.fixed[_ngcontent-%COMP%] {\n position: fixed !important;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n width: 100%;\n max-width: none;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 880px;\n margin: 0 auto;\n display: flex;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex: 1;\n height: 48px;\n font-size: 16px;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 5px;\n border: 1px solid #D0D0D0;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 5px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n.booking-form-base-container.limit-height[_ngcontent-%COMP%] {\n height: 84vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-form-base-container.limit-height[_ngcontent-%COMP%] {\n height: 95vh;\n max-height: 886px;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-form-base-container.limit-height[_ngcontent-%COMP%] {\n height: 95vh;\n max-height: 886px;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9taXhpbnMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNwVUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQTFEQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDNUNBOztzQkFBQTtBQ1BBO0VBQ0UsMENBQUE7RUFDQSxZQUFBO0FKdUNGO0FJckNBO0VBQ0UscUJBQUE7RUFDQSx3QkFBQTtBSndDRjtBSXZDRTtFQUNFLFdBQUE7QUp5Q0o7QUl2Q0U7RUFDRSx5QkFBQTtBSnlDSjtBSXZDRTtFQUNFLHlCQUFBO0VBQ0EsdUJBQUE7RUFDQSxVQUFBO0FKeUNKO0FHNUNRO0VDQU47SUFLSSxvQkFBQTtFSjJDSjtBQUNGO0FHOUNRO0VDSE47SUFLSSxvQkFBQTtFSmdESjtBQUNGO0FJL0NJO0VBQ0UsaUJBQUE7RUFDQSxjQUFBO0FKaUROO0FJL0NJO0VBQ0UsZUFBQTtFQUNBLG1CQUFBO0VBQ0EsZ0JBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7QUppRE47QUk5Q0k7RUFDRSxjQUFBO0VBQ0EsZUFBQTtFQUNBLHFCQUFBO0FKZ0ROO0FJL0NNO0VBQ0UsZUFBQTtBSmlEUjtBSTlDSTtFQUNFLGVBQUE7RUFDQSxnQkFBQTtFQUNBLGVBQUE7RUFDQSxjQUFBO0FKZ0ROO0FJL0NNO0VBQ0UsZUFBQTtFQUNBLGdCQUFBO0FKaURSO0FJL0NNO0VBQ0UsYUFBQTtFQUNBLGVBQUE7RUFDQSxnQkFBQTtFQUNBLGNBQUE7QUppRFI7QUloRFE7RUFDRSxPQUFBO0VBQ0EsaUJBQUE7RUFDQSxvQkFBQTtFQUNBLGdCQUFBO0FKa0RWO0FJaERRO0VBQ0UsV0FBQTtFQUNBLGNBQUE7RUFDQSxjQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLHFHRnRCWTtBRndFdEI7QUNsSFk7RUcwREo7SUFRSSxlQUFBO0VKb0RWO0FBQ0Y7QUN2SFk7RUcwREo7SUFRSSxlQUFBO0VKeURWO0FBQ0Y7QUl0RE07RUFDRSx5QkFBQTtFQUNBLGtCQUFBO0FKd0RSO0FJdkRRO0VBQ0UsZUFBQTtFQUNBLDBCQUFBO0FKeURWO0FDcElZO0VHc0VOO0lBUUkscUJBQUE7RUowRFI7QUFDRjtBQ3pJWTtFR3NFTjtJQVFJLHFCQUFBO0VKK0RSO0FBQ0Y7QUk5RFE7RUFDRSx1QkFBQTtFQUNBLGFBQUE7QUpnRVY7QUNsSlk7RUdxRkE7SUFDRSxpQkFBQTtFSmdFWjtBQUNGO0FDdkpZO0VHcUZBO0lBQ0UsaUJBQUE7RUpxRVo7QUFDRjtBQzVKWTtFR0VaO0lBNkZJLGdCQUFBO0VKaUVGO0FBQ0Y7QUNqS1k7RUdFWjtJQTZGSSxnQkFBQTtFSnNFRjtBQUNGO0FJcEVBO0VBQ0Usa0JBQUE7RUFDQSxTQUFBO0VBQ0EsV0FBQTtFQUNBLGdCQUFBO0VBQ0EsdUJBQUE7RUFDQSx5QkFBQTtFQUNBLFVBQUE7RUFDQSxtQkFBQTtFQUNBLGFBQUE7RUFDQSxtQkFBQTtBSnVFRjtBSXJFRTtFQUNFLDBCQUFBO0FKdUVKO0FJcEVFO0VBR0UsV0FBQTtFQUNBLGVBQUE7QUpvRUo7QUlsRUk7RUFDRSxnQkFBQTtFQUNBLGNBQUE7RUFDQSxhQUFBO0FKb0VOO0FJbkVNO0VBQ0UsT0FBQTtFQUNBLFlBQUE7RUFDQSxlQUFBO0FKcUVSO0FJbkVNO0VBQ0UsaUJBQUE7RUFDQSx5QkFBQTtBSnFFUjtBSW5FTTtFQUNFLGdCQUFBO0FKcUVSO0FDM01ZO0VHa0hWO0lBd0JJLGVBQUE7RUpxRUo7RUluRU07SUFDRSxjQUFBO0VKcUVSO0VJbkVNO0lBQ0UsaUJBQUE7RUpxRVI7RUluRU07SUFDRSxnQkFBQTtFSnFFUjtBQUNGO0FDek5ZO0VHa0hWO0lBd0JJLGVBQUE7RUptRko7RUlqRk07SUFDRSxjQUFBO0VKbUZSO0VJakZNO0lBQ0UsaUJBQUE7RUptRlI7RUlqRk07SUFDRSxnQkFBQTtFSm1GUjtBQUNGO0FJMUVFO0VBRUUsWUFBQTtBSjRFSjtBQzNPWTtFR29LUjtJQUNFLFlBQUE7SUFDQSxpQkFBQTtFSjBFSjtFSXZFRTtJQUNFLFlBQUE7RUp5RUo7RUl4RUk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUowRU47QUFDRjtBQ3hQWTtFR29LUjtJQUNFLFlBQUE7SUFDQSxpQkFBQTtFSnVGSjtFSXBGRTtJQUNFLFlBQUE7RUpzRko7RUlyRkk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUp1Rk47QUFDRiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIiRwcmltYXJ5OiAjMUY0MEU2O1xuJGZvcm0tbGFiZWw6ICMwNTFDMkM7XG4kc2Vjb25kYXJ5LWxhYmVsOiAjNzY3Njc2O1xuJGJvcmRlcjogI0IzQjNCMztcbiRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkOiAjRDBEMEQwO1xuJGNoaXAtY29sb3I6ICMzMzMzMzM7XG4kcGxhY2Vob2xkZXItY29sb3I6ICM3RjdGN0Y7XG4kYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDtcbiRwYWdlLWJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4kc2VsZWN0ZWQtb3B0aW9uOiAjRTZFNkU2O1xuJGNvbG9yLWJyYW5kLXllbGxvdzogI2ZmZDA0ODtcbiRsaWdodC15ZWxsb3c6ICNmZmYzY2U7XG4kY29hY2htYXJrLXRleHQ6ICM2ZjRkMDA7XG4kZXJyb3ItY29sb3I6ICNFMTJFNDA7XG4kbm8tZmlsdGVycy1jb2xvcjogI0JDQkNCQztcbiRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjogI0Y0RjRGNDtcbiRwcmltYXJ5LWhpZ2hsaWdodDogIzIyNTFGRjtcbiRzY3JvbGxiYXItY29sb3I6ICM3NTc1NzU7XG5cbiRhdmFpbGFibGUtY29sb3I6ICM1RDlENTI7XG4kYXZhaWxhYmxlLWJ5LXJlcXVlc3QtY29sb3I6ICNGNUI1M0Y7XG4kaW4tdXNlLWNvbG9yOiAjRDQ0ODNFO1xuJG5vdC1ib29rYWJsZS1jb2xvcjogI0NDQ0NDQztcblxuJG1vZGFsLWJvZHktaGVhZGluZzogIzRENEQ0RDtcbiRhbGVydC1vdmVybGF5LWJnOiByZ2JhKDUsIDI4LCA0NCwgMC44NSk7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvYWNobWFyay1iZzogI0VCRUJGNjtcbiRjb2FjaG1hcmstZGFyay10ZXh0OiAjMUIxQjE5O1xuJGVycm9yLXRleHQ6ICNmZmY7XG5cbi8qKlxuICogU3BhY2luZ1xuICovXG5cbi8vIDRweFxuJHNwYWNpbmctc21hbGxlc3Q6IDAuMjVyZW07XG5cbi8vIDhweFxuJHNwYWNpbmcteHhzbWFsbDogMC41cmVtO1xuXG4vLyAxMnB4XG4kc3BhY2luZy14c21hbGw6IDAuNzVyZW07XG5cbi8vIDE2cHhcbiRzcGFjaW5nLXNtYWxsOiAxcmVtO1xuXG4vLyAyMHB4XG4kc3BhY2luZy1zbWFsbC1tZWRpdW06IDEuMjVyZW07XG5cbi8vIDI0cHhcbiRzcGFjaW5nLW1lZGl1bTogMS41cmVtO1xuXG4vLyAyOHB4XG4kc3BhY2luZy1tZWRpdW0tbGFyZ2U6IDEuNzVyZW07XG5cbi8vIDMycHhcbiRzcGFjaW5nLWxhcmdlOiAycmVtO1xuXG4vLyA0OHB4XG4kc3BhY2luZy14bGFyZ2U6IDNyZW07XG5cbi8vIDY0cHhcbiRzcGFjaW5nLXh4bGFyZ2U6IDRyZW07XG5cbi8vIDk2cHhcbiRzcGFjaW5nLWxhcmdlc3Q6IDZyZW07XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kZGV2aWNlLW1vYmlsZS1zaXplOiA0NTBweDtcbiRkZXZpY2UtdGFibGV0LXNpemU6IDgwMHB4O1xuJGRldmljZS1sYXB0b3Atc2l6ZTogMTAyNHB4O1xuXG4kZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZTogMTA0OHB4O1xuJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemU6IDEyODBweDtcblxuXG46ZXhwb3J0IHtcbiAgICBwcmltYXJ5OiAkcHJpbWFyeTtcbiAgICBzZWNvbmRhcnlMYWJlbDogJHNlY29uZGFyeS1sYWJlbDtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbiRpY29uLXNtYWxsOiAxNnB4O1xuJGljb24tbWVkaXVtOiAyNHB4O1xuJGljb24tbGFyZ2U6IDMycHg7XG4kaWNvbi14bGFyZ2U6IDQ4cHg7XG4iLCIvKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLmxvYWRpbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gIHBhZGRpbmc6IDNlbTtcbn1cblxuLmJvb2tpbmctY29udGVudCB7XG4gIG1hcmdpbjogMCBhdXRvIDAgYXV0bztcbiAgcGFkZGluZzogMXB4IDBweCAxMjBweCAwO1xufVxuLmJvb2tpbmctY29udGVudCA+IGRpdiB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLmJvb2tpbmctY29udGVudC5vcGVuIHtcbiAgbWFyZ2luOiAwIGF1dG8gMjgwcHggYXV0bztcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMge1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcGFkZGluZzogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMge1xuICAgIHBhZGRpbmctYm90dG9tOiA0MHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyB7XG4gICAgcGFkZGluZy1ib3R0b206IDQwcHg7XG4gIH1cbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgPiBkaXYge1xuICBtYXgtd2lkdGg6IDEwMjRweDtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIGgxIHtcbiAgZm9udC1zaXplOiAzMnB4O1xuICBtYXJnaW46IDEwcHggMCA0MHB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICB3aWR0aDogMTAwJTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyBsYWJlbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXNpemU6IDE2cHg7XG4gIHBhZGRpbmc6IDRweCAwIDIwcHggMDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgbGFiZWwgc3BhbiB7XG4gIHBhZGRpbmc6IDAgMThweDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24ge1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgY29sb3I6ICMzMzMzMzM7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uIGgxIHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBmb250LXdlaWdodDogNDAwO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgbWF4LXdpZHRoOiA2NzFweDtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uID4gZGl2ID4gZGl2IHtcbiAgZmxleDogMTtcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gIHBhZGRpbmctYm90dG9tOiAxNXB4O1xuICBtaW4td2lkdGg6IDIwMHB4O1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiBoMiB7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgY29sb3I6ICMzMzMzMzM7XG4gIG1hcmdpbjogMCAwIDIwcHggMDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiBoMiB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiBoMiB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICB9XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIHBhZGRpbmc6IDI4cHggMjBweDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tIC5yZWMtZGV0YWlscy1wZXJpb2Qge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20ge1xuICAgIHBhZGRpbmctYm90dG9tOiAxMDBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG4gIH1cbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tID4gZGl2IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDIwcHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSA+IGRpdiA+IGRpdiB7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSA+IGRpdiA+IGRpdiB7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQge1xuICAgIHBhZGRpbmc6IDAgMCAwIDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwIDAgMCAwO1xuICB9XG59XG5cbi5ib3R0b20tcGFuZWwge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDgwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICB6LWluZGV4OiAyO1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLmJvdHRvbS1wYW5lbC5maXhlZCB7XG4gIHBvc2l0aW9uOiBmaXhlZCAhaW1wb3J0YW50O1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IG5vbmU7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IHtcbiAgbWF4LXdpZHRoOiA4ODBweDtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGRpc3BsYXk6IGZsZXg7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbiB7XG4gIGZsZXg6IDE7XG4gIGhlaWdodDogNDhweDtcbiAgZm9udC1zaXplOiAxNnB4O1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMikge1xuICBtYXJnaW4tbGVmdDogNXB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyB7XG4gICAgcGFkZGluZzogMTZweCAwO1xuICB9XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uIHtcbiAgICBtYXJnaW46IDAgMTZweDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMSkge1xuICAgIG1hcmdpbi1yaWdodDogOHB4O1xuICB9XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uOm50aC1jaGlsZCgyKSB7XG4gICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMge1xuICAgIHBhZGRpbmc6IDE2cHggMDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbiB7XG4gICAgbWFyZ2luOiAwIDE2cHg7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMikge1xuICAgIG1hcmdpbi1sZWZ0OiA4cHg7XG4gIH1cbn1cblxuLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lci5saW1pdC1oZWlnaHQge1xuICBoZWlnaHQ6IDg0dmg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1mb3JtLWJhc2UtY29udGFpbmVyLmxpbWl0LWhlaWdodCB7XG4gICAgaGVpZ2h0OiA5NXZoO1xuICAgIG1heC1oZWlnaHQ6IDg4NnB4O1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCwgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCAuZGV0YWlscywgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCAuZGV0YWlscyB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIubGltaXQtaGVpZ2h0IHtcbiAgICBoZWlnaHQ6IDk1dmg7XG4gICAgbWF4LWhlaWdodDogODg2cHg7XG4gIH1cbiAgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAuYm9va2luZy1jb250ZW50LCAuYm9va2luZy1mb3JtLWJhc2UtY29udGFpbmVyIC5tY2stc2Nyb2xsIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gIH1cbiAgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzLCAuYm9va2luZy1mb3JtLWJhc2UtY29udGFpbmVyIC5tY2stc2Nyb2xsIC5kZXRhaWxzIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICB9XG59IiwiQGltcG9ydCBcInZhcnNcIjtcblxuQG1peGluIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJHNpemUsICRxdWFsaWZpZXIpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBpZiAoJHF1YWxpZmllciA9PSBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIGlmICgkcXVhbGlmaWVyID09IG1heC13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtYXgtd2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBtaXhpbiBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJG1pbiwgJG1heCkge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gdGhpcyBpcyBhIGNvcHkgb2YgcmVzcG9uZC10by4gd2UgZG9uJ3Qgd2FudCB0byBwcmVzZXJ2ZSB0aGF0IG1ldGhvZCBzaW5jZSB0aGUgYnJlYWtwb2ludHMgbWF5IGRpdmVyZ2UgZnJvbSB0aGUgb2xkIFVJLlxuQG1peGluIGlzLXNjcmVlbi1zaXplKCRtZWRpYTogYWxsLCAkb3JpZW50YXRpb246IG5vbmUpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuXG5AbWl4aW4gcGFnZS1wYWRkaW5nIHtcbiAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xufVxuXG4vLyBGb250IE1peGluc1xuJGZvbnQtbWNraW5zZXktc2FuczogXCJNY0tpbnNleSBTYW5zXCI7XG4kZm9udC10aGVpbmhhcmR0OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiRmb250LWJvd2VyOiBcIkJvd2VyXCI7XG5cbkBtaXhpbiBib3dlci1ib2xkIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtYm93ZXI7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIG1ja2luc2V5LXNhbnMge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBkaXNwbGF5LTEge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDRyZW07IC8vIDY0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTg3OyAvLyA3NnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0yIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0zIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTQge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzcmVtOyAvLyA0OHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTY2OyAvLyA1NnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDY0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTUge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuODMzOyAvLyAzNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42NDI7IC8vIDQwcHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTcge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDQ4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjc1cmVtOyAvLyA0NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNTJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICBsaW5lLWhlaWdodDogMS4xMTE7IC8vIDQ0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA0OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0zIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjIyOyAvLyA0NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy00IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy01IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyODhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy02IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTU1OyAvLyAyOHB4XG4gICAgfVxufVxuXG5AbWl4aW4gYm9keS1kZWZhdWx0IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI2cHhcbiAgICB9XG59XG5cbi8vLyBEb2VzbnQgZXhpc3QgaW4gTURTLlxuQG1peGluIGJvZHktdGlueSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07IC8vIDEycHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyMHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZm9ybS1sYWJlbCB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LWZhbWlseTogJGZvbnQtdGhlaW5oYXJkdDtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgY29sb3I6ICRwbGFjZWhvbGRlci1jb2xvcjtcbiAgICBmb250LXdlaWdodDogMzAwO1xufVxuXG5AbWl4aW4gY2hpcC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIGNoZWNrYm94LWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgY29sb3I6IGJsYWNrO1xufVxuXG4vLyBib3JkZXJzXG5cbkBtaXhpbiBtY2stY2hlY2tib3gtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAycHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLXRoaW4tYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlci1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJvcmRlci1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50LWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXItbGlnaHQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5cbi8vIGZ1bmN0aW9uc1xuXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbkBtaXhpbiBtYXgtbGluZXMoJGNvdW50KSB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAtd2Via2l0LWxpbmUtY2xhbXA6ICRjb3VudDtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuXG4vLyBpbWFnZXNcbkBtaXhpbiBtY2staWNvbigkd2lkdGgsICRhc3NldCwgJGhlaWdodDogJHdpZHRoLCAgJGFzc2V0UGF0aDogXCJsaWJzL3VpL3NyYy9saWIvaWNvbnNcIiwpIHtcbiAgICB3aWR0aDogJHdpZHRoO1xuICAgIGhlaWdodDogJGhlaWdodDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIjeyRhc3NldFBhdGh9LyN7JGFzc2V0fVwiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG59XG5cblxuQG1peGluIG1jay1zbWFsbC1pY29uKCRtb2JpbGUtYXNzZXQsICRkZXNrdG9wLWFzc2V0OiAkbW9iaWxlLWFzc2V0KSB7XG4gICAgQGluY2x1ZGUgbWNrLWljb24oMTZweCwgJGFzc2V0OiAkbW9iaWxlLWFzc2V0KTtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oMjRweCwgJGFzc2V0OiAkZGVza3RvcC1hc3NldCk7XG4gICAgfVxufVxuXG4vLyBza2VsZXRvblxuQG1peGluIHNrZWxldG9uLWJnIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItaW1hZ2Utc2l6ZSB7XG4gICAgd2lkdGg6IDgxcHg7XG4gICAgaGVpZ2h0OiA4MnB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMjE5cHg7XG4gICAgICAgIGhlaWdodDogMTE5cHg7XG4gICAgfVxufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItc3RhdHVzLXNpemUge1xuICAgIHdpZHRoOiAxMTdweDtcbiAgICBoZWlnaHQ6IDc4cHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAxMTdweDtcbiAgICAgICAgaGVpZ2h0OiA3OHB4O1xuICAgIH1cbn1cbiIsIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGNvbG9yLWJyYW5kLWVsZWN0cmljLWJsdWU6ICMyMjUxZmY7XG4kY29sb3ItYnJhbmQtZGVlcC1ibHVlOiAjMDUxYzJjO1xuJGNvbG9yLWJyYW5kLWN5YW46ICMwMGE5ZjQ7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kZm9udC1kYXJrOiAjMDAwO1xuJGZvbnQtbGlnaHQ6ICNmZmY7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuJGdyZWVuMTogIzIxOTY1MztcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2xvci1wcmltYXJ5OiAjMTkzN2VhO1xuJGNvbG9yLXByaW1hcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcbiRjb2xvci1wcmltYXJ5LWRhcms6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuXG4kY29sb3Itc2Vjb25kYXJ5OiAjNDI4NUY0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodDogbGlnaHRlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG4kY29sb3Itc2Vjb25kYXJ5LWRhcms6IGRhcmtlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG5cbiRiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuJGZvb3Rlci1iYWNrOiAjMjYzMjM4O1xuJGhlYWRlci1iYWNrOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNTFDMkMsICMwNTFDMkMgNDAlLCAjMEIyNDUzIDYwJSwgIzFGNDBFNiAxMDAlKTtcblxuJGNvbG9yLXRlcm5hcnk6ICMwNTFjMmM7XG5cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuXG4kZm9udC1zdGFjazogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiRoZWFkaW5nLWZvbnQ6IFwiTGFyaXNoTWNLaW5zZXlcIiwgJ0dlb3JnaWEnLCBzZXJpZjtcbiRmb250OiAkZm9udC1zdGFjaztcblxuJGZvbnQtZmFtaWx5LXByaW1hcnk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LXNlY29uZGFyeTogXCJCb3dlclwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiIHNlcmlmO1xuXG4kYmFzZS1zaXplOiAxNnB4O1xuJHRhYmxldC1zaXplOiAxNnB4O1xuJG1vYmlsZS1zaXplOiAxNnB4O1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGJyZWFrLW1vYmlsZTogNDUwcHg7XG4kYnJlYWstdGFibGV0OiA4MDBweDtcbiRicmVhay1sYXB0b3A6IDEwMjRweDtcblxuJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGU6IDgwMHB4O1xuJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQ6IDEwNDhweDtcbiRicmVhay1sYW5kc2NhcGUtbGFwdG9wOiAxMjgwcHg7XG4iLCJAaW1wb3J0ICcuL3ZhcmlhYmxlcyc7XG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuQG1peGluIGJveC1zaGFkb3coJGNvbG9yOiAjMDAwLCAkZGVwdGg6IDEpIHtcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMXB4ICogKCRkZXB0aCAtIDEpIHJnYmEoIzAwMCwgLjIpLFxuICAgICAgICAgICAgICAgIDAgMXB4IDFweCAwIHJnYmEoIzAwMCwgLjE0KSxcbiAgICAgICAgICAgICAgICAwIDJweCAxcHggLTFweCByZ2JhKCMwMDAsIC4xMik7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG5AbWl4aW4gcmVzcG9uZC10bygkbWVkaWEpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gIEBlbHNlIGlmICRtZWRpYSA9PSBsYXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1AZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQGltcG9ydCBcImxpYnMvdWkvc3JjL2xpYi9taXhpbnNcIjtcbkBpbXBvcnQgJ3ZhcmlhYmxlcyc7XG5AaW1wb3J0ICdtaXhpbnMnO1xuXG5cblxuXG4ubG9hZGluZyB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoI2ZmZmZmZiwgMC41KTtcbiAgcGFkZGluZzogM2VtO1xufVxuLmJvb2tpbmctY29udGVudCB7XG4gIG1hcmdpbjogMCBhdXRvIDAgYXV0bztcbiAgcGFkZGluZzogMXB4IDBweCAxMjBweCAwO1xuICA+ZGl2IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAmLm9wZW4ge1xuICAgIG1hcmdpbjogMCBhdXRvIDI4MHB4IGF1dG87XG4gIH1cbiAgLmRldGFpbHMge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgcGFkZGluZzogMDtcbiAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgcGFkZGluZy1ib3R0b206IDQwcHg7XG4gICAgfVxuICAgID5kaXYge1xuICAgICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICB9XG4gICAgaDEge1xuICAgICAgZm9udC1zaXplOiAzMnB4O1xuICAgICAgbWFyZ2luOiAxMHB4IDAgNDBweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIC8vIGZvbnQtZmFtaWx5OiAnQm93ZXInO1xuICAgIH1cbiAgICBsYWJlbCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIHBhZGRpbmc6IDRweCAwIDIwcHggMDtcbiAgICAgIHNwYW4ge1xuICAgICAgICBwYWRkaW5nOiAwIDE4cHg7XG4gICAgICB9XG4gICAgfVxuICAgIC5zZWN0aW9uIHtcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgIGgxIHtcbiAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgfVxuICAgICAgPmRpdiB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgbWF4LXdpZHRoOiA2NzFweDtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgID5kaXYge1xuICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDE1cHg7XG4gICAgICAgICAgbWluLXdpZHRoOiAyMDBweDtcbiAgICAgICAgfVxuICAgICAgICBoMiB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgY29sb3I6ICMzMzMzMzM7XG4gICAgICAgICAgbWFyZ2luOiAwIDAgMjBweCAwO1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1wcmltYXJ5O1xuICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICAgIH1cbiAgICAgICAgfSAgICAgICBcbiAgICAgIH1cbiAgICAgICYuYm90dG9tIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgICAgICAgcGFkZGluZzogMjhweCAyMHB4O1xuICAgICAgICAucmVjLWRldGFpbHMtcGVyaW9kIHtcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDEwMHB4O1xuICAgICAgICB9XG4gICAgICAgID5kaXYge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICAgIHBhZGRpbmc6IDIwcHg7XG5cbiAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgID4gZGl2e1xuICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICBwYWRkaW5nOiAwIDAgMCAwO1xuICB9XG59XG4uYm90dG9tLXBhbmVsIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiA4MHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgei1pbmRleDogMjtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAmLmZpeGVkIHtcbiAgICBwb3NpdGlvbjogZml4ZWQgIWltcG9ydGFudDtcbiAgfVxuICBcbiAgLmJ1dHRvbnMge1xuICAgIC8vIHBhZGRpbmc6IDI0cHggMTZweDtcbiAgICAvLyBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1heC13aWR0aDogbm9uZTtcblxuICAgID5kaXYge1xuICAgICAgbWF4LXdpZHRoOiA4ODBweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGJ1dHRvbiB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgfVxuICAgICAgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogNXB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRDBEMEQwO1xuICAgICAgfVxuICAgICAgYnV0dG9uOm50aC1jaGlsZCgyKSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gICAgICB9XG4gICAgfVxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgcGFkZGluZzogMTZweCAwO1xuICAgICAgPmRpdiB7XG4gICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgbWFyZ2luOiAwIDE2cHg7XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiA4cHg7XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9uOm50aC1jaGlsZCgyKSB7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cbi5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXJ7XG5cbiAgJi5saW1pdC1oZWlnaHQge1xuICAgIC8vIG1heC1oZWlnaHQ6IDg0MnB4O1xuICAgIGhlaWdodDogODR2aDtcbiAgICAvLyBtYXgtaGVpZ2h0OiA5M3ZoO1xuICB9XG5cbiAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgJi5saW1pdC1oZWlnaHQge1xuICAgICAgaGVpZ2h0OiA5NXZoO1xuICAgICAgbWF4LWhlaWdodDogODg2cHg7XG4gICAgfVxuXG4gICAgLmJvb2tpbmctY29udGVudCwgLm1jay1zY3JvbGx7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAuZGV0YWlsc3tcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cbn0iXX0= */"] }); const ɵBookingEditComponent_BaseFactory = i0.ɵɵgetInheritedFactory(BookingEditComponent); /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(BookingEditComponent, [{ type: core_1.Component, @@ -30514,6 +31006,8 @@ const ɵBookingEditComponent_BaseFactory = i0.ɵɵgetInheritedFactory(BookingEdi type: core_1.Input }], updateCallback: [{ type: core_1.Output + }], placeIntoModal: [{ + type: core_1.Input }] }); })(); @@ -30548,19 +31042,19 @@ const i2 = __webpack_require__(/*! @ngrx/store */ "../../node_modules/@ngrx/stor const i3 = __webpack_require__(/*! @angular/router */ "../../node_modules/@angular/router/__ivy_ngcc__/fesm2015/router.js"); const i4 = __webpack_require__(/*! @angular/material/dialog */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/dialog.js"); const i5 = __webpack_require__(/*! @angular/common */ "../../node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js"); -const i6 = __webpack_require__(/*! ../room-booking-details-form/room-booking-details-form.component */ "./src/app/booking/room-booking-details-form/room-booking-details-form.component.ts"); -const i7 = __webpack_require__(/*! ../booking-confirmation/booking-confirmation.component */ "./src/app/booking/booking-confirmation/booking-confirmation.component.ts"); -const i8 = __webpack_require__(/*! ../../components/topbar-header/topbar-header.component */ "./src/app/components/topbar-header/topbar-header.component.ts"); +const i6 = __webpack_require__(/*! ../booking-confirmation/booking-confirmation.component */ "./src/app/booking/booking-confirmation/booking-confirmation.component.ts"); +const i7 = __webpack_require__(/*! ../../components/topbar-header/topbar-header.component */ "./src/app/components/topbar-header/topbar-header.component.ts"); +const i8 = __webpack_require__(/*! ../room-booking-details-form/room-booking-details-form.component */ "./src/app/booking/room-booking-details-form/room-booking-details-form.component.ts"); const i9 = __webpack_require__(/*! @angular/material/button */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/button.js"); function BookingFormBaseComponent_div_1_Template(rf, ctx) { if (rf & 1) { - const _r8 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div", 16); - i0.ɵɵelement(1, "img", 17); - i0.ɵɵelementStart(2, "p", 18); + const _r5 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div", 6); + i0.ɵɵelement(1, "img", 7); + i0.ɵɵelementStart(2, "p", 8); i0.ɵɵtext(3); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(4, "img", 19); - i0.ɵɵlistener("click", function BookingFormBaseComponent_div_1_Template_img_click_4_listener() { i0.ɵɵrestoreView(_r8); const ctx_r7 = i0.ɵɵnextContext(); return ctx_r7.hideWarningBanner(); }); + i0.ɵɵelementStart(4, "img", 9); + i0.ɵɵlistener("click", function BookingFormBaseComponent_div_1_Template_img_click_4_listener() { i0.ɵɵrestoreView(_r5); const ctx_r4 = i0.ɵɵnextContext(); return ctx_r4.hideWarningBanner(); }); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { @@ -30568,22 +31062,34 @@ function BookingFormBaseComponent_div_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵadvance(3); i0.ɵɵtextInterpolate(ctx_r0.warningMessage); } } -function BookingFormBaseComponent_a_topbar_header_3_Template(rf, ctx) { if (rf & 1) { - const _r10 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "a-topbar-header", 20); - i0.ɵɵlistener("closeCallback", function BookingFormBaseComponent_a_topbar_header_3_Template_a_topbar_header_closeCallback_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r9 = i0.ɵɵnextContext(); return ctx_r9.discardChanges(); }); +function BookingFormBaseComponent_div_2_a_topbar_header_1_Template(rf, ctx) { if (rf & 1) { + const _r9 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "a-topbar-header", 13); + i0.ɵɵlistener("closeCallback", function BookingFormBaseComponent_div_2_a_topbar_header_1_Template_a_topbar_header_closeCallback_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r8 = i0.ɵɵnextContext(2); return ctx_r8.discardChanges(); }); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r1 = i0.ɵɵnextContext(); - i0.ɵɵproperty("mode", ctx_r1.TopBarHeaderMode.Light)("modal", true)("noSurvey", true); + const ctx_r6 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("mode", ctx_r6.TopBarHeaderMode.Light)("modal", true)("noSurvey", true); } } -function BookingFormBaseComponent_a_topbar_header_4_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelement(0, "a-topbar-header", 21); +function BookingFormBaseComponent_div_2_a_topbar_header_2_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelement(0, "a-topbar-header", 14); } if (rf & 2) { - const ctx_r2 = i0.ɵɵnextContext(); - i0.ɵɵproperty("mode", ctx_r2.TopBarHeaderMode.Light)("back", ctx_r2.backRoute); + const ctx_r7 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("mode", ctx_r7.TopBarHeaderMode.Light)("back", ctx_r7.backRoute); +} } +function BookingFormBaseComponent_div_2_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 10); + i0.ɵɵtemplate(1, BookingFormBaseComponent_div_2_a_topbar_header_1_Template, 1, 3, "a-topbar-header", 11); + i0.ɵɵtemplate(2, BookingFormBaseComponent_div_2_a_topbar_header_2_Template, 1, 2, "a-topbar-header", 12); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r1 = i0.ɵɵnextContext(); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r1.modal); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", !ctx_r1.modal); } } -function BookingFormBaseComponent_div_19_Template(rf, ctx) { if (rf & 1) { +function BookingFormBaseComponent_div_3_div_14_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div"); i0.ɵɵelementStart(1, "div"); i0.ɵɵtext(2); @@ -30596,32 +31102,32 @@ function BookingFormBaseComponent_div_19_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r3 = i0.ɵɵnextContext(); + const ctx_r10 = i0.ɵɵnextContext(2); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Date: ", ctx_r3.dateString, ""); + i0.ɵɵtextInterpolate1("Date: ", ctx_r10.dateString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Time: ", ctx_r3.timeString, ""); + i0.ɵɵtextInterpolate1("Time: ", ctx_r10.timeString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate2("", ctx_r3.type, " meeting (", ctx_r3.durationString, ")"); + i0.ɵɵtextInterpolate2("", ctx_r10.type, " meeting (", ctx_r10.durationString, ")"); } } -function BookingFormBaseComponent_div_20_span_4_Template(rf, ctx) { if (rf & 1) { - const _r13 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "span", 24); - i0.ɵɵlistener("click", function BookingFormBaseComponent_div_20_span_4_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r12 = i0.ɵɵnextContext(2); return ctx_r12.openRecurrenceConflictsModal(ctx_r12.booking == null ? null : ctx_r12.booking.room); }); +function BookingFormBaseComponent_div_3_div_15_span_4_Template(rf, ctx) { if (rf & 1) { + const _r14 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "span", 25); + i0.ɵɵlistener("click", function BookingFormBaseComponent_div_3_div_15_span_4_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r13 = i0.ɵɵnextContext(3); return ctx_r13.openRecurrenceConflictsModal(ctx_r13.booking == null ? null : ctx_r13.booking.room); }); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r11 = i0.ɵɵnextContext(2); + const ctx_r12 = i0.ɵɵnextContext(3); var tmp_0_0 = null; i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate1(" - Conflicts(", (tmp_0_0 = ctx_r11.isConflictWithOccurences()) == null ? null : tmp_0_0.total_Conflicts, ") "); + i0.ɵɵtextInterpolate1(" - Conflicts(", (tmp_0_0 = ctx_r12.isConflictWithOccurences()) == null ? null : tmp_0_0.total_Conflicts, ") "); } } -function BookingFormBaseComponent_div_20_Template(rf, ctx) { if (rf & 1) { +function BookingFormBaseComponent_div_3_div_15_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div"); - i0.ɵɵelementStart(1, "div", 22); + i0.ɵɵelementStart(1, "div", 23); i0.ɵɵtext(2); i0.ɵɵpipe(3, "titlecase"); - i0.ɵɵtemplate(4, BookingFormBaseComponent_div_20_span_4_Template, 2, 1, "span", 23); + i0.ɵɵtemplate(4, BookingFormBaseComponent_div_3_div_15_span_4_Template, 2, 1, "span", 24); i0.ɵɵelementEnd(); i0.ɵɵelementStart(5, "div"); i0.ɵɵtext(6); @@ -30637,63 +31143,140 @@ function BookingFormBaseComponent_div_20_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r4 = i0.ɵɵnextContext(); + const ctx_r11 = i0.ɵɵnextContext(2); var tmp_1_0 = null; - const currVal_1 = (tmp_1_0 = ctx_r4.isConflictWithOccurences()) == null ? null : tmp_1_0.is_conflict; + const currVal_1 = (tmp_1_0 = ctx_r11.isConflictWithOccurences()) == null ? null : tmp_1_0.is_conflict; i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("", (ctx_r4.data == null ? null : ctx_r4.data.value == null ? null : ctx_r4.data.value.recurrence_period) === "list" ? "Specific dates" : i0.ɵɵpipeBind1(3, 7, ctx_r4.data == null ? null : ctx_r4.data.value == null ? null : ctx_r4.data.value.recurrence_period), " "); + i0.ɵɵtextInterpolate1("", (ctx_r11.data == null ? null : ctx_r11.data.value == null ? null : ctx_r11.data.value.recurrence_period) === "list" ? "Specific dates" : i0.ɵɵpipeBind1(3, 7, ctx_r11.data == null ? null : ctx_r11.data.value == null ? null : ctx_r11.data.value.recurrence_period), " "); i0.ɵɵadvance(2); i0.ɵɵproperty("ngIf", currVal_1); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Start date: ", ctx_r4.dateString, ""); + i0.ɵɵtextInterpolate1("Start date: ", ctx_r11.dateString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("End date: ", ctx_r4.endDateString, ""); + i0.ɵɵtextInterpolate1("End date: ", ctx_r11.endDateString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Time: ", ctx_r4.timeString, ""); + i0.ɵɵtextInterpolate1("Time: ", ctx_r11.timeString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate2("", ctx_r4.type, " meeting (", ctx_r4.durationString, ")"); + i0.ɵɵtextInterpolate2("", ctx_r11.type, " meeting (", ctx_r11.durationString, ")"); } } -function BookingFormBaseComponent_div_30_Template(rf, ctx) { if (rf & 1) { - const _r15 = i0.ɵɵgetCurrentView(); +function BookingFormBaseComponent_div_3_Template(rf, ctx) { if (rf & 1) { + const _r16 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div", 15); + i0.ɵɵelementStart(1, "div", 16); + i0.ɵɵelementStart(2, "div", 17); + i0.ɵɵelementStart(3, "div", 18); + i0.ɵɵelementStart(4, "div"); + i0.ɵɵelementStart(5, "h1"); + i0.ɵɵtext(6); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(7, "div", 19); + i0.ɵɵelementStart(8, "div"); + i0.ɵɵelementStart(9, "app-room-booking-details-form", 20); + i0.ɵɵlistener("submitForm", function BookingFormBaseComponent_div_3_Template_app_room_booking_details_form_submitForm_9_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r15 = i0.ɵɵnextContext(); return ctx_r15.submitForm($event); })("validateForm", function BookingFormBaseComponent_div_3_Template_app_room_booking_details_form_validateForm_9_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r17 = i0.ɵɵnextContext(); return ctx_r17.validateForm($event); }); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(10, "div", 21); + i0.ɵɵelementStart(11, "div"); + i0.ɵɵelementStart(12, "h2"); + i0.ɵɵtext(13); + i0.ɵɵelementEnd(); + i0.ɵɵtemplate(14, BookingFormBaseComponent_div_3_div_14_Template, 7, 4, "div", 22); + i0.ɵɵtemplate(15, BookingFormBaseComponent_div_3_div_15_Template, 13, 9, "div", 22); + i0.ɵɵelementStart(16, "div"); + i0.ɵɵelementStart(17, "div"); + i0.ɵɵtext(18); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(19, "div"); + i0.ɵɵtext(20); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(21, "div"); + i0.ɵɵtext(22); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r2 = i0.ɵɵnextContext(); + i0.ɵɵadvance(6); + i0.ɵɵtextInterpolate1("Book ", ctx_r2.booking == null ? null : ctx_r2.booking.space == null ? null : ctx_r2.booking.space.local_name, ""); + i0.ɵɵadvance(3); + i0.ɵɵproperty("booking", ctx_r2.booking)("triggerSubmit", ctx_r2.submitTimestamp); + i0.ɵɵadvance(4); + i0.ɵɵtextInterpolate1("", (ctx_r2.data == null ? null : ctx_r2.data.value == null ? null : ctx_r2.data.value.is_recurrent) ? "Recurring" : "Room", " Booking Details"); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", !(ctx_r2.data == null ? null : ctx_r2.data.value == null ? null : ctx_r2.data.value.is_recurrent)); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r2.data == null ? null : ctx_r2.data.value == null ? null : ctx_r2.data.value.is_recurrent); + i0.ɵɵadvance(3); + i0.ɵɵtextInterpolate2("Address: ", ctx_r2.building == null ? null : ctx_r2.building.address, ", ", ctx_r2.building == null ? null : ctx_r2.building.city, ""); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate1("Room: ", ctx_r2.booking == null ? null : ctx_r2.booking.space == null ? null : ctx_r2.booking.space.local_name, ""); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate1("Capacity: ", ctx_r2.booking == null ? null : ctx_r2.booking.space == null ? null : ctx_r2.booking.space.capacity, ""); +} } +function BookingFormBaseComponent_div_4_div_2_Template(rf, ctx) { if (rf & 1) { + const _r21 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "div"); - i0.ɵɵelementStart(1, "button", 25); - i0.ɵɵlistener("click", function BookingFormBaseComponent_div_30_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r15); const ctx_r14 = i0.ɵɵnextContext(); return ctx_r14.goToBackRoute(); }); + i0.ɵɵelementStart(1, "button", 28); + i0.ɵɵlistener("click", function BookingFormBaseComponent_div_4_div_2_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r21); const ctx_r20 = i0.ɵɵnextContext(2); return ctx_r20.goToBackRoute(); }); i0.ɵɵtext(2, "Back"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(3, "button", 26); - i0.ɵɵlistener("click", function BookingFormBaseComponent_div_30_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r15); const ctx_r16 = i0.ɵɵnextContext(); return ctx_r16.createBooking(); }); + i0.ɵɵelementStart(3, "button", 29); + i0.ɵɵlistener("click", function BookingFormBaseComponent_div_4_div_2_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r21); const ctx_r22 = i0.ɵɵnextContext(2); return ctx_r22.createBooking(); }); i0.ɵɵtext(4); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r5 = i0.ɵɵnextContext(); + const ctx_r18 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); - i0.ɵɵproperty("disabled", ctx_r5.loading); + i0.ɵɵproperty("disabled", ctx_r18.loading); i0.ɵɵadvance(2); - i0.ɵɵclassProp("disabled", ctx_r5.invalidForm); - i0.ɵɵproperty("disabled", ctx_r5.loading || ctx_r5.invalidForm); + i0.ɵɵclassProp("disabled", ctx_r18.invalidForm); + i0.ɵɵproperty("disabled", ctx_r18.loading || ctx_r18.invalidForm); i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate2("", ctx_r5.isEditSeries ? "Update" : "Create", " Booking", ctx_r5.is_request ? " Request" : "", ""); + i0.ɵɵtextInterpolate2("", ctx_r18.isEditSeries ? "Update" : "Create", " Booking", ctx_r18.is_request ? " Request" : "", ""); } } -function BookingFormBaseComponent_div_31_Template(rf, ctx) { if (rf & 1) { - const _r18 = i0.ɵɵgetCurrentView(); +function BookingFormBaseComponent_div_4_div_3_Template(rf, ctx) { if (rf & 1) { + const _r24 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "div"); - i0.ɵɵelementStart(1, "button", 25); - i0.ɵɵlistener("click", function BookingFormBaseComponent_div_31_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r18); const ctx_r17 = i0.ɵɵnextContext(); return ctx_r17.discardChanges(); }); + i0.ɵɵelementStart(1, "button", 28); + i0.ɵɵlistener("click", function BookingFormBaseComponent_div_4_div_3_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r24); const ctx_r23 = i0.ɵɵnextContext(2); return ctx_r23.discardChanges(); }); i0.ɵɵtext(2, "Back"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(3, "button", 26); - i0.ɵɵlistener("click", function BookingFormBaseComponent_div_31_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r18); const ctx_r19 = i0.ɵɵnextContext(); return ctx_r19.createBooking(); }); + i0.ɵɵelementStart(3, "button", 29); + i0.ɵɵlistener("click", function BookingFormBaseComponent_div_4_div_3_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r24); const ctx_r25 = i0.ɵɵnextContext(2); return ctx_r25.createBooking(); }); i0.ɵɵtext(4, "Update Booking"); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r6 = i0.ɵɵnextContext(); + const ctx_r19 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); - i0.ɵɵproperty("disabled", ctx_r6.loading); + i0.ɵɵproperty("disabled", ctx_r19.loading); i0.ɵɵadvance(2); - i0.ɵɵclassProp("disabled", ctx_r6.invalidForm); - i0.ɵɵproperty("disabled", ctx_r6.loading || ctx_r6.invalidForm); + i0.ɵɵclassProp("disabled", ctx_r19.invalidForm); + i0.ɵɵproperty("disabled", ctx_r19.loading || ctx_r19.invalidForm); +} } +const _c0 = function (a0) { return { "fixed": a0 }; }; +function BookingFormBaseComponent_div_4_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 26); + i0.ɵɵelementStart(1, "div", 27); + i0.ɵɵtemplate(2, BookingFormBaseComponent_div_4_div_2_Template, 5, 6, "div", 22); + i0.ɵɵtemplate(3, BookingFormBaseComponent_div_4_div_3_Template, 5, 4, "div", 22); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r3 = i0.ɵɵnextContext(); + i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3, _c0, !ctx_r3.placeIntoModal)); + i0.ɵɵadvance(2); + i0.ɵɵproperty("ngIf", !ctx_r3.modal && !ctx_r3.placeIntoModal); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r3.placeIntoModal); } } class BookingFormBaseComponent extends base_1.BaseDirective { constructor(_service, store, router, _bookings_service, _booking_state_service, _spaces, _cateringNotesService, dialog, _users) { @@ -30713,10 +31296,17 @@ class BookingFormBaseComponent extends base_1.BaseDirective { queryParams: {} }; this.closeCallback = new core_1.EventEmitter(); + /** + * placeIntoModal: Input decorator indecate as a flag to adapt component design into a dialog modal + * (by hiding header and adjusting height so that fit into a modal) + */ + this.placeIntoModal = false; // Eliminate selectedRoom (room building capacity ) this.modal = false; this.data = new rxjs_1.BehaviorSubject(undefined); this.confirmed = false; + /** Display loading template */ + this.loading = false; this.booking = new data_common_1.Booking({}); this.invalidForm = true; this.showWarningBanner = false; @@ -31041,7 +31631,7 @@ class BookingFormBaseComponent extends base_1.BaseDirective { totalConflicts += Math.max(room.totalOccurrences - room.availableOccurrences, 0); }); } - else if (this.booking.room) { + if (this.booking.room) { totalConflicts = ((_b = (_a = this === null || this === void 0 ? void 0 : this.booking) === null || _a === void 0 ? void 0 : _a.room) === null || _b === void 0 ? void 0 : _b.totalOccurrences) - ((_d = (_c = this === null || this === void 0 ? void 0 : this.booking) === null || _c === void 0 ? void 0 : _c.room) === null || _d === void 0 ? void 0 : _d.availableOccurrences); } @@ -31113,94 +31703,29 @@ class BookingFormBaseComponent extends base_1.BaseDirective { } exports.BookingFormBaseComponent = BookingFormBaseComponent; BookingFormBaseComponent.ɵfac = function BookingFormBaseComponent_Factory(t) { return new (t || BookingFormBaseComponent)(i0.ɵɵdirectiveInject(i1.ApplicationService), i0.ɵɵdirectiveInject(i2.Store), i0.ɵɵdirectiveInject(i3.Router), i0.ɵɵdirectiveInject(i1.BookingsService), i0.ɵɵdirectiveInject(i1.BookingStateService), i0.ɵɵdirectiveInject(i1.SpacesService), i0.ɵɵdirectiveInject(i1.CateringNotesService), i0.ɵɵdirectiveInject(i4.MatDialog), i0.ɵɵdirectiveInject(i1.UsersService)); }; -BookingFormBaseComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BookingFormBaseComponent, selectors: [["app-booking-base"]], outputs: { closeCallback: "closeCallback" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 33, vars: 21, consts: [[1, "mck-column", "mck-content-expand", "mck-content-page-container", "booking-form-base-container"], ["class", "fixed warning banner", 4, "ngIf"], [1, "header"], [3, "mode", "modal", "noSurvey", "closeCallback", 4, "ngIf"], [3, "mode", "back", 4, "ngIf"], [1, "mck-column", "mck-center", "results-container", "mck-scroll"], [1, "mck-column", "mck-scroll", "mck-content-expand-width"], [1, "booking-content", "mck-column", "mck-center", "mck-content-body"], [1, "details"], [1, "section"], [3, "booking", "triggerSubmit", "submitForm", "validateForm"], [1, "section", "bottom"], [4, "ngIf"], [1, "bottom-panel"], [1, "buttons"], [3, "confirmed", "loading", "modal", "dataForConfirmation", "callback"], [1, "fixed", "warning", "banner"], ["src", "assets/icon/booking_cancelled.svg"], [1, "banner-text"], ["src", "assets/icon/close-red.svg", 3, "click"], [3, "mode", "modal", "noSurvey", "closeCallback"], [3, "mode", "back"], [1, "rec-details-period"], [3, "click", 4, "ngIf"], [3, "click"], ["mat-button", "", "color", "secondary", 1, "mck-secondary-button", 3, "disabled", "click"], ["mat-button", "", "color", "primary", 1, "mck-primary-button", 3, "disabled", "click"]], template: function BookingFormBaseComponent_Template(rf, ctx) { if (rf & 1) { +BookingFormBaseComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BookingFormBaseComponent, selectors: [["app-booking-base"]], outputs: { closeCallback: "closeCallback" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 6, vars: 13, consts: [[1, "mck-column", "mck-content-expand", "mck-content-page-container", "booking-form-base-container"], ["class", "fixed warning banner", 4, "ngIf"], ["class", "header", 4, "ngIf"], ["class", "mck-column mck-center results-container mck-scroll", 4, "ngIf"], ["class", "bottom-panel", 3, "ngClass", 4, "ngIf"], [3, "confirmed", "loading", "placeIntoModal", "modal", "dataForConfirmation", "callback"], [1, "fixed", "warning", "banner"], ["src", "assets/icon/booking_cancelled.svg"], [1, "banner-text"], ["src", "assets/icon/close-red.svg", 3, "click"], [1, "header"], [3, "mode", "modal", "noSurvey", "closeCallback", 4, "ngIf"], [3, "mode", "back", 4, "ngIf"], [3, "mode", "modal", "noSurvey", "closeCallback"], [3, "mode", "back"], [1, "mck-column", "mck-center", "results-container", "mck-scroll"], [1, "mck-column", "mck-scroll", "mck-content-expand-width"], [1, "booking-content", "mck-column", "mck-center", "mck-content-body"], [1, "details"], [1, "section"], [3, "booking", "triggerSubmit", "submitForm", "validateForm"], [1, "section", "bottom"], [4, "ngIf"], [1, "rec-details-period"], [3, "click", 4, "ngIf"], [3, "click"], [1, "bottom-panel", 3, "ngClass"], [1, "buttons"], ["mat-button", "", "color", "secondary", 1, "mck-secondary-button", 3, "disabled", "click"], ["mat-button", "", "color", "primary", 1, "mck-primary-button", 3, "disabled", "click"]], template: function BookingFormBaseComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 0); i0.ɵɵtemplate(1, BookingFormBaseComponent_div_1_Template, 5, 1, "div", 1); - i0.ɵɵelementStart(2, "div", 2); - i0.ɵɵtemplate(3, BookingFormBaseComponent_a_topbar_header_3_Template, 1, 3, "a-topbar-header", 3); - i0.ɵɵtemplate(4, BookingFormBaseComponent_a_topbar_header_4_Template, 1, 2, "a-topbar-header", 4); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(5, "div", 5); - i0.ɵɵelementStart(6, "div", 6); - i0.ɵɵelementStart(7, "div", 7); - i0.ɵɵelementStart(8, "div", 8); - i0.ɵɵelementStart(9, "div"); - i0.ɵɵelementStart(10, "h1"); - i0.ɵɵtext(11); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(12, "div", 9); - i0.ɵɵelementStart(13, "div"); - i0.ɵɵelementStart(14, "app-room-booking-details-form", 10); - i0.ɵɵlistener("submitForm", function BookingFormBaseComponent_Template_app_room_booking_details_form_submitForm_14_listener($event) { return ctx.submitForm($event); })("validateForm", function BookingFormBaseComponent_Template_app_room_booking_details_form_validateForm_14_listener($event) { return ctx.validateForm($event); }); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(15, "div", 11); - i0.ɵɵelementStart(16, "div"); - i0.ɵɵelementStart(17, "h2"); - i0.ɵɵtext(18); - i0.ɵɵelementEnd(); - i0.ɵɵtemplate(19, BookingFormBaseComponent_div_19_Template, 7, 4, "div", 12); - i0.ɵɵtemplate(20, BookingFormBaseComponent_div_20_Template, 13, 9, "div", 12); - i0.ɵɵelementStart(21, "div"); - i0.ɵɵelementStart(22, "div"); - i0.ɵɵtext(23); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(24, "div"); - i0.ɵɵtext(25); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(26, "div"); - i0.ɵɵtext(27); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(28, "div", 13); - i0.ɵɵelementStart(29, "div", 14); - i0.ɵɵtemplate(30, BookingFormBaseComponent_div_30_Template, 5, 6, "div", 12); - i0.ɵɵtemplate(31, BookingFormBaseComponent_div_31_Template, 5, 4, "div", 12); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(32, "booking-confirmation", 15); - i0.ɵɵlistener("callback", function BookingFormBaseComponent_Template_booking_confirmation_callback_32_listener() { return ctx.callback(); }); + i0.ɵɵtemplate(2, BookingFormBaseComponent_div_2_Template, 3, 2, "div", 2); + i0.ɵɵtemplate(3, BookingFormBaseComponent_div_3_Template, 23, 10, "div", 3); + i0.ɵɵtemplate(4, BookingFormBaseComponent_div_4_Template, 4, 5, "div", 4); + i0.ɵɵelementStart(5, "booking-confirmation", 5); + i0.ɵɵlistener("callback", function BookingFormBaseComponent_Template_booking_confirmation_callback_5_listener() { return ctx.callback(); }); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - i0.ɵɵclassProp("fullpage-modal", ctx.modal); + i0.ɵɵclassProp("fullpage-modal", ctx.modal)("limit-height", ctx.placeIntoModal); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.showWarningBanner); - i0.ɵɵadvance(2); - i0.ɵɵproperty("ngIf", ctx.modal); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", !ctx.modal); - i0.ɵɵadvance(7); - i0.ɵɵtextInterpolate1("Book ", ctx.booking == null ? null : ctx.booking.space == null ? null : ctx.booking.space.local_name, ""); - i0.ɵɵadvance(3); - i0.ɵɵproperty("booking", ctx.booking)("triggerSubmit", ctx.submitTimestamp); - i0.ɵɵadvance(4); - i0.ɵɵtextInterpolate1("", (ctx.data == null ? null : ctx.data.value == null ? null : ctx.data.value.is_recurrent) ? "Recurring" : "Room", " Booking Details"); + i0.ɵɵproperty("ngIf", !ctx.placeIntoModal); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", !(ctx.data == null ? null : ctx.data.value == null ? null : ctx.data.value.is_recurrent)); + i0.ɵɵproperty("ngIf", !ctx.confirmed && !ctx.loading); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.data == null ? null : ctx.data.value == null ? null : ctx.data.value.is_recurrent); - i0.ɵɵadvance(3); - i0.ɵɵtextInterpolate2("Address: ", ctx.building == null ? null : ctx.building.address, ", ", ctx.building == null ? null : ctx.building.city, ""); - i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Room: ", ctx.booking == null ? null : ctx.booking.space == null ? null : ctx.booking.space.local_name, ""); - i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Capacity: ", ctx.booking == null ? null : ctx.booking.space == null ? null : ctx.booking.space.capacity, ""); - i0.ɵɵadvance(3); - i0.ɵɵproperty("ngIf", !ctx.modal); + i0.ɵɵproperty("ngIf", !ctx.confirmed && !ctx.loading); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.modal); - i0.ɵɵadvance(1); - i0.ɵɵproperty("confirmed", ctx.confirmed)("loading", ctx.loading)("modal", ctx.modal)("dataForConfirmation", ctx.dataForConfirmation); - } }, directives: [i5.NgIf, i6.RoomBookingDetailsFormComponent, i7.BookingConfirmationComponent, i8.TopbarHeaderComponent, i9.MatButton], pipes: [i5.TitleCasePipe], styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\n\n\n\n\n\n\n.loading[_ngcontent-%COMP%] {\n background-color: rgba(255, 255, 255, 0.5);\n padding: 3em;\n}\n.booking-content[_ngcontent-%COMP%] {\n margin: 0 auto 0 auto;\n padding: 1px 20px 120px 0;\n}\n.booking-content[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 100%;\n}\n.booking-content.open[_ngcontent-%COMP%] {\n margin: 0 auto 280px auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n border: 1px solid #E6E6E6;\n background-color: white;\n padding: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 1024px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 32px;\n margin: 10px 0 40px;\n font-weight: 500;\n width: 100%;\n text-align: center;\n font-family: \"Bower\";\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-size: 16px;\n padding: 4px 0 20px 0;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n padding: 0 18px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 400;\n font-size: 16px;\n color: #333333;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 400;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n max-width: 671px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n line-height: 24px;\n padding-bottom: 15px;\n min-width: 200px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n width: 100%;\n display: block;\n color: #333333;\n margin: 0 0 20px 0;\n font-weight: 500;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n padding: 28px 20px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] .rec-details-period[_ngcontent-%COMP%] {\n cursor: pointer;\n text-decoration: underline;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background-color: white;\n padding: 20px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0px 0px 100px 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0px 0px 100px 0;\n }\n}\n.bottom-panel[_ngcontent-%COMP%] {\n position: fixed;\n bottom: 0;\n width: 100%;\n min-height: 80px;\n background-color: white;\n border: 1px solid #E6E6E6;\n z-index: 2;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 24px 16px;\n border: 1px solid #E6E6E6;\n width: 100%;\n max-width: none;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 880px;\n margin: 0 auto;\n display: flex;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex: 1;\n height: 48px;\n font-size: 16px;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 5px;\n border: 1px solid #D0D0D0;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 5px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9taXhpbnMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNwVUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQTFEQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDNUNBOztzQkFBQTtBQ1BBO0VBQ0UsMENBQUE7RUFDQSxZQUFBO0FKdUNGO0FJckNBO0VBQ0UscUJBQUE7RUFDQSx5QkFBQTtBSndDRjtBSXZDRTtFQUNFLFdBQUE7QUp5Q0o7QUl2Q0U7RUFDRSx5QkFBQTtBSnlDSjtBSXZDRTtFQUNFLHlCQUFBO0VBQ0EsdUJBQUE7RUFDQSxVQUFBO0FKeUNKO0FHNUNRO0VDQU47SUFLSSxvQkFBQTtFSjJDSjtBQUNGO0FHOUNRO0VDSE47SUFLSSxvQkFBQTtFSmdESjtBQUNGO0FJL0NJO0VBQ0UsaUJBQUE7RUFDQSxjQUFBO0FKaUROO0FJL0NJO0VBQ0UsZUFBQTtFQUNBLG1CQUFBO0VBQ0EsZ0JBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7RUFDQSxvQkFBQTtBSmlETjtBSS9DSTtFQUNFLGNBQUE7RUFDQSxlQUFBO0VBQ0EscUJBQUE7QUppRE47QUloRE07RUFDRSxlQUFBO0FKa0RSO0FJL0NJO0VBQ0UsZUFBQTtFQUNBLGdCQUFBO0VBQ0EsZUFBQTtFQUNBLGNBQUE7QUppRE47QUloRE07RUFDRSxlQUFBO0VBQ0EsZ0JBQUE7QUprRFI7QUloRE07RUFDRSxhQUFBO0VBQ0EsZUFBQTtFQUNBLGdCQUFBO0VBQ0EsY0FBQTtBSmtEUjtBSWpEUTtFQUNFLE9BQUE7RUFDQSxpQkFBQTtFQUNBLG9CQUFBO0VBQ0EsZ0JBQUE7QUptRFY7QUlqRFE7RUFDRSxXQUFBO0VBQ0EsY0FBQTtFQUNBLGNBQUE7RUFDQSxrQkFBQTtFQUNBLGdCQUFBO0VBQ0EscUdGdEJZO0FGeUV0QjtBQ25IWTtFRzBESjtJQVFJLGVBQUE7RUpxRFY7QUFDRjtBQ3hIWTtFRzBESjtJQVFJLGVBQUE7RUowRFY7QUFDRjtBSXZETTtFQUNFLHlCQUFBO0VBQ0Esa0JBQUE7QUp5RFI7QUl4RFE7RUFDRSxlQUFBO0VBQ0EsMEJBQUE7QUowRFY7QUNySVk7RUdzRU47SUFRSSxxQkFBQTtFSjJEUjtBQUNGO0FDMUlZO0VHc0VOO0lBUUkscUJBQUE7RUpnRVI7QUFDRjtBSS9EUTtFQUNFLHVCQUFBO0VBQ0EsYUFBQTtBSmlFVjtBQ25KWTtFR3FGQTtJQUNFLGlCQUFBO0VKaUVaO0FBQ0Y7QUN4Slk7RUdxRkE7SUFDRSxpQkFBQTtFSnNFWjtBQUNGO0FDN0pZO0VHRVo7SUE2Rkksd0JBQUE7RUprRUY7QUFDRjtBQ2xLWTtFR0VaO0lBNkZJLHdCQUFBO0VKdUVGO0FBQ0Y7QUlyRUE7RUFDRSxlQUFBO0VBQ0EsU0FBQTtFQUNBLFdBQUE7RUFDQSxnQkFBQTtFQUNBLHVCQUFBO0VBQ0EseUJBQUE7RUFDQSxVQUFBO0FKd0VGO0FJdEVFO0VBQ0Usa0JBQUE7RUFDQSx5QkFBQTtFQUNBLFdBQUE7RUFDQSxlQUFBO0FKd0VKO0FJdEVJO0VBQ0UsZ0JBQUE7RUFDQSxjQUFBO0VBQ0EsYUFBQTtBSndFTjtBSXZFTTtFQUNFLE9BQUE7RUFDQSxZQUFBO0VBQ0EsZUFBQTtBSnlFUjtBSXZFTTtFQUNFLGlCQUFBO0VBQ0EseUJBQUE7QUp5RVI7QUl2RU07RUFDRSxnQkFBQTtBSnlFUjtBQ3hNWTtFRzJHVjtJQXdCSSxlQUFBO0VKeUVKO0VJdkVNO0lBQ0UsY0FBQTtFSnlFUjtFSXZFTTtJQUNFLGlCQUFBO0VKeUVSO0VJdkVNO0lBQ0UsZ0JBQUE7RUp5RVI7QUFDRjtBQ3ROWTtFRzJHVjtJQXdCSSxlQUFBO0VKdUZKO0VJckZNO0lBQ0UsY0FBQTtFSnVGUjtFSXJGTTtJQUNFLGlCQUFBO0VKdUZSO0VJckZNO0lBQ0UsZ0JBQUE7RUp1RlI7QUFDRjtBQ3BPWTtFR3dKUjtJQUNFLFlBQUE7RUpnRko7RUkvRUk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUppRk47QUFDRjtBQzlPWTtFR3dKUjtJQUNFLFlBQUE7RUp5Rko7RUl4Rkk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUowRk47QUFDRiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIiRwcmltYXJ5OiAjMUY0MEU2O1xuJGZvcm0tbGFiZWw6ICMwNTFDMkM7XG4kc2Vjb25kYXJ5LWxhYmVsOiAjNzY3Njc2O1xuJGJvcmRlcjogI0IzQjNCMztcbiRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkOiAjRDBEMEQwO1xuJGNoaXAtY29sb3I6ICMzMzMzMzM7XG4kcGxhY2Vob2xkZXItY29sb3I6ICM3RjdGN0Y7XG4kYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDtcbiRwYWdlLWJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4kc2VsZWN0ZWQtb3B0aW9uOiAjRTZFNkU2O1xuJGNvbG9yLWJyYW5kLXllbGxvdzogI2ZmZDA0ODtcbiRsaWdodC15ZWxsb3c6ICNmZmYzY2U7XG4kY29hY2htYXJrLXRleHQ6ICM2ZjRkMDA7XG4kZXJyb3ItY29sb3I6ICNFMTJFNDA7XG4kbm8tZmlsdGVycy1jb2xvcjogI0JDQkNCQztcbiRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjogI0Y0RjRGNDtcbiRwcmltYXJ5LWhpZ2hsaWdodDogIzIyNTFGRjtcbiRzY3JvbGxiYXItY29sb3I6ICM3NTc1NzU7XG5cbiRhdmFpbGFibGUtY29sb3I6ICM1RDlENTI7XG4kYXZhaWxhYmxlLWJ5LXJlcXVlc3QtY29sb3I6ICNGNUI1M0Y7XG4kaW4tdXNlLWNvbG9yOiAjRDQ0ODNFO1xuJG5vdC1ib29rYWJsZS1jb2xvcjogI0NDQ0NDQztcblxuJG1vZGFsLWJvZHktaGVhZGluZzogIzRENEQ0RDtcbiRhbGVydC1vdmVybGF5LWJnOiByZ2JhKDUsIDI4LCA0NCwgMC44NSk7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvYWNobWFyay1iZzogI0VCRUJGNjtcbiRjb2FjaG1hcmstZGFyay10ZXh0OiAjMUIxQjE5O1xuJGVycm9yLXRleHQ6ICNmZmY7XG5cbi8qKlxuICogU3BhY2luZ1xuICovXG5cbi8vIDRweFxuJHNwYWNpbmctc21hbGxlc3Q6IDAuMjVyZW07XG5cbi8vIDhweFxuJHNwYWNpbmcteHhzbWFsbDogMC41cmVtO1xuXG4vLyAxMnB4XG4kc3BhY2luZy14c21hbGw6IDAuNzVyZW07XG5cbi8vIDE2cHhcbiRzcGFjaW5nLXNtYWxsOiAxcmVtO1xuXG4vLyAyMHB4XG4kc3BhY2luZy1zbWFsbC1tZWRpdW06IDEuMjVyZW07XG5cbi8vIDI0cHhcbiRzcGFjaW5nLW1lZGl1bTogMS41cmVtO1xuXG4vLyAyOHB4XG4kc3BhY2luZy1tZWRpdW0tbGFyZ2U6IDEuNzVyZW07XG5cbi8vIDMycHhcbiRzcGFjaW5nLWxhcmdlOiAycmVtO1xuXG4vLyA0OHB4XG4kc3BhY2luZy14bGFyZ2U6IDNyZW07XG5cbi8vIDY0cHhcbiRzcGFjaW5nLXh4bGFyZ2U6IDRyZW07XG5cbi8vIDk2cHhcbiRzcGFjaW5nLWxhcmdlc3Q6IDZyZW07XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kZGV2aWNlLW1vYmlsZS1zaXplOiA0NTBweDtcbiRkZXZpY2UtdGFibGV0LXNpemU6IDgwMHB4O1xuJGRldmljZS1sYXB0b3Atc2l6ZTogMTAyNHB4O1xuXG4kZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZTogMTA0OHB4O1xuJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemU6IDEyODBweDtcblxuXG46ZXhwb3J0IHtcbiAgICBwcmltYXJ5OiAkcHJpbWFyeTtcbiAgICBzZWNvbmRhcnlMYWJlbDogJHNlY29uZGFyeS1sYWJlbDtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbiRpY29uLXNtYWxsOiAxNnB4O1xuJGljb24tbWVkaXVtOiAyNHB4O1xuJGljb24tbGFyZ2U6IDMycHg7XG4kaWNvbi14bGFyZ2U6IDQ4cHg7XG4iLCIvKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLmxvYWRpbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gIHBhZGRpbmc6IDNlbTtcbn1cblxuLmJvb2tpbmctY29udGVudCB7XG4gIG1hcmdpbjogMCBhdXRvIDAgYXV0bztcbiAgcGFkZGluZzogMXB4IDIwcHggMTIwcHggMDtcbn1cbi5ib29raW5nLWNvbnRlbnQgPiBkaXYge1xuICB3aWR0aDogMTAwJTtcbn1cbi5ib29raW5nLWNvbnRlbnQub3BlbiB7XG4gIG1hcmdpbjogMCBhdXRvIDI4MHB4IGF1dG87XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogNDBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMge1xuICAgIHBhZGRpbmctYm90dG9tOiA0MHB4O1xuICB9XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzID4gZGl2IHtcbiAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyBoMSB7XG4gIGZvbnQtc2l6ZTogMzJweDtcbiAgbWFyZ2luOiAxMHB4IDAgNDBweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgd2lkdGg6IDEwMCU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiQm93ZXJcIjtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgbGFiZWwge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZm9udC1zaXplOiAxNnB4O1xuICBwYWRkaW5nOiA0cHggMCAyMHB4IDA7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIGxhYmVsIHNwYW4ge1xuICBwYWRkaW5nOiAwIDE4cHg7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uIHtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGNvbG9yOiAjMzMzMzMzO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiBoMSB7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIG1heC13aWR0aDogNjcxcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiA+IGRpdiB7XG4gIGZsZXg6IDE7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMTVweDtcbiAgbWluLXdpZHRoOiAyMDBweDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYgaDIge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYgaDIge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYgaDIge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgfVxufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBwYWRkaW5nOiAyOHB4IDIwcHg7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSAucmVjLWRldGFpbHMtcGVyaW9kIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSB7XG4gICAgcGFkZGluZy1ib3R0b206IDEwMHB4O1xuICB9XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSA+IGRpdiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBwYWRkaW5nOiAyMHB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20gPiBkaXYgPiBkaXYge1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20gPiBkaXYgPiBkaXYge1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwcHggMHB4IDEwMHB4IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwcHggMHB4IDEwMHB4IDA7XG4gIH1cbn1cblxuLmJvdHRvbS1wYW5lbCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogODBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gIHotaW5kZXg6IDI7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zIHtcbiAgcGFkZGluZzogMjRweCAxNnB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiBub25lO1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiB7XG4gIG1heC13aWR0aDogODgwcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBkaXNwbGF5OiBmbGV4O1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b24ge1xuICBmbGV4OiAxO1xuICBoZWlnaHQ6IDQ4cHg7XG4gIGZvbnQtc2l6ZTogMTZweDtcbn1cbi5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gIG1hcmdpbi1yaWdodDogNXB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjRDBEMEQwO1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgbWFyZ2luLWxlZnQ6IDVweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMge1xuICAgIHBhZGRpbmc6IDE2cHggMDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbiB7XG4gICAgbWFyZ2luOiAwIDE2cHg7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMikge1xuICAgIG1hcmdpbi1sZWZ0OiA4cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm90dG9tLXBhbmVsIC5idXR0b25zIHtcbiAgICBwYWRkaW5nOiAxNnB4IDA7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b24ge1xuICAgIG1hcmdpbjogMCAxNnB4O1xuICB9XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gICAgbWFyZ2luLXJpZ2h0OiA4cHg7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgICBtYXJnaW4tbGVmdDogOHB4O1xuICB9XG59XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCwgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCAuZGV0YWlscywgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCAuZGV0YWlscyB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCwgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCAuZGV0YWlscywgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCAuZGV0YWlscyB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxufSIsIkBpbXBvcnQgXCJ2YXJzXCI7XG5cbkBtaXhpbiBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRzaXplLCAkcXVhbGlmaWVyKSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAaWYgKCRxdWFsaWZpZXIgPT0gbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSBpZiAoJHF1YWxpZmllciA9PSBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWF4LXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5AbWl4aW4gYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRtaW4sICRtYXgpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkbWluKSBhbmQgKG1heC13aWR0aDogJG1heCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIHRoaXMgaXMgYSBjb3B5IG9mIHJlc3BvbmQtdG8uIHdlIGRvbid0IHdhbnQgdG8gcHJlc2VydmUgdGhhdCBtZXRob2Qgc2luY2UgdGhlIGJyZWFrcG9pbnRzIG1heSBkaXZlcmdlIGZyb20gdGhlIG9sZCBVSS5cbkBtaXhpbiBpcy1zY3JlZW4tc2l6ZSgkbWVkaWE6IGFsbCwgJG9yaWVudGF0aW9uOiBub25lKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cblxuQG1peGluIHBhZ2UtcGFkZGluZyB7XG4gICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbDtcbn1cblxuLy8gRm9udCBNaXhpbnNcbiRmb250LW1ja2luc2V5LXNhbnM6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuJGZvbnQtdGhlaW5oYXJkdDogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4kZm9udC1ib3dlcjogXCJCb3dlclwiO1xuXG5AbWl4aW4gYm93ZXItYm9sZCB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWJvd2VyO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBtY2tpbnNleS1zYW5zIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gZGlzcGxheS0xIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiA0cmVtOyAvLyA2NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4NzsgLy8gNzZweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMiB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDYwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS00IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogM3JlbTsgLy8gNDhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE2NjsgLy8gNTZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS01IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjgzMzsgLy8gMzRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjQyOyAvLyA0MHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS03IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyOHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTEge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA0OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi43NXJlbTsgLy8gNDRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDUycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTIge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTExOyAvLyA0NHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNDhweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMyB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIyMjsgLy8gNDRweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjg4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1NTsgLy8gMjhweFxuICAgIH1cbn1cblxuQG1peGluIGJvZHktZGVmYXVsdCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNnB4XG4gICAgfVxufVxuXG4vLy8gRG9lc250IGV4aXN0IGluIE1EUy5cbkBtaXhpbiBib2R5LXRpbnkge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtOyAvLyAxMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjRweFxuICAgIH1cbn1cblxuQG1peGluIGZvcm0tbGFiZWwge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LXRoZWluaGFyZHQ7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGNvbG9yOiAkcGxhY2Vob2xkZXItY29sb3I7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbn1cblxuQG1peGluIGNoaXAtbGFiZWwge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBjaGVja2JveC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGNvbG9yOiBibGFjaztcbn1cblxuLy8gYm9yZGVyc1xuXG5AbWl4aW4gbWNrLWNoZWNrYm94LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay10aGluLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXItbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBib3JkZXItY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudC1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuXG4vLyBmdW5jdGlvbnNcblxuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG5AbWl4aW4gbWF4LWxpbmVzKCRjb3VudCkge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiAkY291bnQ7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbn1cblxuLy8gaW1hZ2VzXG5AbWl4aW4gbWNrLWljb24oJHdpZHRoLCAkYXNzZXQsICRoZWlnaHQ6ICR3aWR0aCwgICRhc3NldFBhdGg6IFwibGlicy91aS9zcmMvbGliL2ljb25zXCIsKSB7XG4gICAgd2lkdGg6ICR3aWR0aDtcbiAgICBoZWlnaHQ6ICRoZWlnaHQ7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiI3skYXNzZXRQYXRofS8jeyRhc3NldH1cIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuXG5cbkBtaXhpbiBtY2stc21hbGwtaWNvbigkbW9iaWxlLWFzc2V0LCAkZGVza3RvcC1hc3NldDogJG1vYmlsZS1hc3NldCkge1xuICAgIEBpbmNsdWRlIG1jay1pY29uKDE2cHgsICRhc3NldDogJG1vYmlsZS1hc3NldCk7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICRhc3NldDogJGRlc2t0b3AtYXNzZXQpO1xuICAgIH1cbn1cblxuLy8gc2tlbGV0b25cbkBtaXhpbiBza2VsZXRvbi1iZyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWltYWdlLXNpemUge1xuICAgIHdpZHRoOiA4MXB4O1xuICAgIGhlaWdodDogODJweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDIxOXB4O1xuICAgICAgICBoZWlnaHQ6IDExOXB4O1xuICAgIH1cbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLXN0YXR1cy1zaXplIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMTE3cHg7XG4gICAgICAgIGhlaWdodDogNzhweDtcbiAgICB9XG59XG4iLCIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRjb2xvci1icmFuZC1lbGVjdHJpYy1ibHVlOiAjMjI1MWZmO1xuJGNvbG9yLWJyYW5kLWRlZXAtYmx1ZTogIzA1MWMyYztcbiRjb2xvci1icmFuZC1jeWFuOiAjMDBhOWY0O1xuXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGZvbnQtZGFyazogIzAwMDtcbiRmb250LWxpZ2h0OiAjZmZmO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcbiRncmVlbjE6ICMyMTk2NTM7XG5cbiRwZW5kaW5nOiAjZmZiMzAwO1xuJHBlbmRpbmctbGlnaHQ6IGxpZ2h0ZW4oJHBlbmRpbmcsIDEwKTtcbiRwZW5kaW5nLWRhcms6IGRhcmtlbigkcGVuZGluZywgMTApO1xuXG4kZXJyb3I6ICNlNTM5MzU7XG4kZXJyb3ItbGlnaHQ6IGxpZ2h0ZW4oJGVycm9yLCAxMCk7XG4kZXJyb3ItZGFyazogZGFya2VuKCRlcnJvciwgMTApO1xuXG4kY29sb3ItcHJpbWFyeTogIzE5MzdlYTtcbiRjb2xvci1wcmltYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG4kY29sb3ItcHJpbWFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcblxuJGNvbG9yLXNlY29uZGFyeTogIzQyODVGNDtcbiRjb2xvci1zZWNvbmRhcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuJGNvbG9yLXNlY29uZGFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuXG4kYmFja2dyb3VuZDogI2YwZjBmMDtcbiRmb290ZXItYmFjazogIzI2MzIzODtcbiRoZWFkZXItYmFjazogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMDUxQzJDLCAjMDUxQzJDIDQwJSwgIzBCMjQ1MyA2MCUsICMxRjQwRTYgMTAwJSk7XG5cbiRjb2xvci10ZXJuYXJ5OiAjMDUxYzJjO1xuXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cblxuJGZvbnQtc3RhY2s6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuXG4kaGVhZGluZy1mb250OiBcIkxhcmlzaE1jS2luc2V5XCIsICdHZW9yZ2lhJywgc2VyaWY7XG4kZm9udDogJGZvbnQtc3RhY2s7XG5cbiRmb250LWZhbWlseS1wcmltYXJ5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbiRmb250LWZhbWlseS1zZWNvbmRhcnk6IFwiQm93ZXJcIiwgR2VvcmdpYSwgXCJUaW1lcyBOZXcgUm9tYW5cIiBzZXJpZjtcblxuJGJhc2Utc2l6ZTogMTZweDtcbiR0YWJsZXQtc2l6ZTogMTZweDtcbiRtb2JpbGUtc2l6ZTogMTZweDtcblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbiRicmVhay1tb2JpbGU6IDQ1MHB4O1xuJGJyZWFrLXRhYmxldDogODAwcHg7XG4kYnJlYWstbGFwdG9wOiAxMDI0cHg7XG5cbiRicmVhay1sYW5kc2NhcGUtbW9iaWxlOiA4MDBweDtcbiRicmVhay1sYW5kc2NhcGUtdGFibGV0OiAxMDQ4cHg7XG4kYnJlYWstbGFuZHNjYXBlLWxhcHRvcDogMTI4MHB4O1xuIiwiQGltcG9ydCAnLi92YXJpYWJsZXMnO1xuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbkBtaXhpbiBib3gtc2hhZG93KCRjb2xvcjogIzAwMCwgJGRlcHRoOiAxKSB7XG4gICAgYm94LXNoYWRvdzogMCAxcHggM3B4IDFweCAqICgkZGVwdGggLSAxKSByZ2JhKCMwMDAsIC4yKSxcbiAgICAgICAgICAgICAgICAwIDFweCAxcHggMCByZ2JhKCMwMDAsIC4xNCksXG4gICAgICAgICAgICAgICAgMCAycHggMXB4IC0xcHggcmdiYSgjMDAwLCAuMTIpO1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuQG1peGluIHJlc3BvbmQtdG8oJG1lZGlhKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9ICBAZWxzZSBpZiAkbWVkaWEgPT0gbGF0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9QGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIkBpbXBvcnQgXCJsaWJzL3VpL3NyYy9saWIvbWl4aW5zXCI7XG5AaW1wb3J0ICd2YXJpYWJsZXMnO1xuQGltcG9ydCAnbWl4aW5zJztcblxuXG5cblxuLmxvYWRpbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCNmZmZmZmYsIDAuNSk7XG4gIHBhZGRpbmc6IDNlbTtcbn1cbi5ib29raW5nLWNvbnRlbnQge1xuICBtYXJnaW46IDAgYXV0byAwIGF1dG87XG4gIHBhZGRpbmc6IDFweCAyMHB4IDEyMHB4IDA7XG4gID5kaXYge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gICYub3BlbiB7XG4gICAgbWFyZ2luOiAwIGF1dG8gMjgwcHggYXV0bztcbiAgfVxuICAuZGV0YWlscyB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIEBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNDBweDtcbiAgICB9XG4gICAgPmRpdiB7XG4gICAgICBtYXgtd2lkdGg6IDEwMjRweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIH1cbiAgICBoMSB7XG4gICAgICBmb250LXNpemU6IDMycHg7XG4gICAgICBtYXJnaW46IDEwcHggMCA0MHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgZm9udC1mYW1pbHk6ICdCb3dlcic7XG4gICAgfVxuICAgIGxhYmVsIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgcGFkZGluZzogNHB4IDAgMjBweCAwO1xuICAgICAgc3BhbiB7XG4gICAgICAgIHBhZGRpbmc6IDAgMThweDtcbiAgICAgIH1cbiAgICB9XG4gICAgLnNlY3Rpb24ge1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgICAgaDEge1xuICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICB9XG4gICAgICA+ZGl2IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBtYXgtd2lkdGg6IDY3MXB4O1xuICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgICAgPmRpdiB7XG4gICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICBsaW5lLWhlaWdodDogMjRweDtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTVweDtcbiAgICAgICAgICBtaW4td2lkdGg6IDIwMHB4O1xuICAgICAgICB9XG4gICAgICAgIGgyIHtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgICAgICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LXByaW1hcnk7XG4gICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgICAgfVxuICAgICAgICB9ICAgICAgIFxuICAgICAgfVxuICAgICAgJi5ib3R0b20ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICAgICAgICBwYWRkaW5nOiAyOHB4IDIwcHg7XG4gICAgICAgIC5yZWMtZGV0YWlscy1wZXJpb2Qge1xuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG4gICAgICAgIH1cbiAgICAgICAgPmRpdiB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgICAgcGFkZGluZzogMjBweDtcblxuICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgPiBkaXZ7XG4gICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgIHBhZGRpbmc6IDBweCAwcHggMTAwcHggMDtcbiAgfVxufVxuLmJvdHRvbS1wYW5lbCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogODBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gIHotaW5kZXg6IDI7XG4gIFxuICAuYnV0dG9ucyB7XG4gICAgcGFkZGluZzogMjRweCAxNnB4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiBub25lO1xuXG4gICAgPmRpdiB7XG4gICAgICBtYXgtd2lkdGg6IDg4MHB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYnV0dG9uIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgaGVpZ2h0OiA0OHB4O1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICB9XG4gICAgICBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gICAgICB9XG4gICAgICBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgIH1cbiAgICB9XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICBwYWRkaW5nOiAxNnB4IDA7XG4gICAgICA+ZGl2IHtcbiAgICAgICAgYnV0dG9uIHtcbiAgICAgICAgICBtYXJnaW46IDAgMTZweDtcbiAgICAgICAgfVxuICAgICAgICBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgICAgICAgfVxuICAgICAgICBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogOHB4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lcntcblxuICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcblxuICAgIC5ib29raW5nLWNvbnRlbnQsIC5tY2stc2Nyb2xse1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgLmRldGFpbHN7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgICAgfVxuICAgIH1cblxuICB9XG59Il19 */"] }); + i0.ɵɵproperty("confirmed", ctx.confirmed)("loading", ctx.loading)("placeIntoModal", ctx.placeIntoModal)("modal", ctx.modal)("dataForConfirmation", ctx.dataForConfirmation); + } }, directives: [i5.NgIf, i6.BookingConfirmationComponent, i7.TopbarHeaderComponent, i8.RoomBookingDetailsFormComponent, i5.NgClass, i9.MatButton], pipes: [i5.TitleCasePipe], styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\n\n\n\n\n\n\n.loading[_ngcontent-%COMP%] {\n background-color: rgba(255, 255, 255, 0.5);\n padding: 3em;\n}\n.booking-content[_ngcontent-%COMP%] {\n margin: 0 auto 0 auto;\n padding: 1px 0px 120px 0;\n}\n.booking-content[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 100%;\n}\n.booking-content.open[_ngcontent-%COMP%] {\n margin: 0 auto 280px auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n border: 1px solid #E6E6E6;\n background-color: white;\n padding: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 1024px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 32px;\n margin: 10px 0 40px;\n font-weight: 500;\n width: 100%;\n text-align: center;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-size: 16px;\n padding: 4px 0 20px 0;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n padding: 0 18px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 400;\n font-size: 16px;\n color: #333333;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 400;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n max-width: 671px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n line-height: 24px;\n padding-bottom: 15px;\n min-width: 200px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n width: 100%;\n display: block;\n color: #333333;\n margin: 0 0 20px 0;\n font-weight: 500;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n padding: 28px 20px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] .rec-details-period[_ngcontent-%COMP%] {\n cursor: pointer;\n text-decoration: underline;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background-color: white;\n padding: 20px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0 0 0 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0 0 0 0;\n }\n}\n.bottom-panel[_ngcontent-%COMP%] {\n position: absolute;\n bottom: 0;\n width: 100%;\n min-height: 80px;\n background-color: white;\n border: 1px solid #E6E6E6;\n z-index: 2;\n flex-direction: row;\n display: flex;\n align-items: center;\n}\n.bottom-panel.fixed[_ngcontent-%COMP%] {\n position: fixed !important;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n width: 100%;\n max-width: none;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 880px;\n margin: 0 auto;\n display: flex;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex: 1;\n height: 48px;\n font-size: 16px;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 5px;\n border: 1px solid #D0D0D0;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 5px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n.booking-form-base-container.limit-height[_ngcontent-%COMP%] {\n height: 84vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-form-base-container.limit-height[_ngcontent-%COMP%] {\n height: 95vh;\n max-height: 886px;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-form-base-container.limit-height[_ngcontent-%COMP%] {\n height: 95vh;\n max-height: 886px;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9taXhpbnMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNwVUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQTFEQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDNUNBOztzQkFBQTtBQ1BBO0VBQ0UsMENBQUE7RUFDQSxZQUFBO0FKdUNGO0FJckNBO0VBQ0UscUJBQUE7RUFDQSx3QkFBQTtBSndDRjtBSXZDRTtFQUNFLFdBQUE7QUp5Q0o7QUl2Q0U7RUFDRSx5QkFBQTtBSnlDSjtBSXZDRTtFQUNFLHlCQUFBO0VBQ0EsdUJBQUE7RUFDQSxVQUFBO0FKeUNKO0FHNUNRO0VDQU47SUFLSSxvQkFBQTtFSjJDSjtBQUNGO0FHOUNRO0VDSE47SUFLSSxvQkFBQTtFSmdESjtBQUNGO0FJL0NJO0VBQ0UsaUJBQUE7RUFDQSxjQUFBO0FKaUROO0FJL0NJO0VBQ0UsZUFBQTtFQUNBLG1CQUFBO0VBQ0EsZ0JBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7QUppRE47QUk5Q0k7RUFDRSxjQUFBO0VBQ0EsZUFBQTtFQUNBLHFCQUFBO0FKZ0ROO0FJL0NNO0VBQ0UsZUFBQTtBSmlEUjtBSTlDSTtFQUNFLGVBQUE7RUFDQSxnQkFBQTtFQUNBLGVBQUE7RUFDQSxjQUFBO0FKZ0ROO0FJL0NNO0VBQ0UsZUFBQTtFQUNBLGdCQUFBO0FKaURSO0FJL0NNO0VBQ0UsYUFBQTtFQUNBLGVBQUE7RUFDQSxnQkFBQTtFQUNBLGNBQUE7QUppRFI7QUloRFE7RUFDRSxPQUFBO0VBQ0EsaUJBQUE7RUFDQSxvQkFBQTtFQUNBLGdCQUFBO0FKa0RWO0FJaERRO0VBQ0UsV0FBQTtFQUNBLGNBQUE7RUFDQSxjQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLHFHRnRCWTtBRndFdEI7QUNsSFk7RUcwREo7SUFRSSxlQUFBO0VKb0RWO0FBQ0Y7QUN2SFk7RUcwREo7SUFRSSxlQUFBO0VKeURWO0FBQ0Y7QUl0RE07RUFDRSx5QkFBQTtFQUNBLGtCQUFBO0FKd0RSO0FJdkRRO0VBQ0UsZUFBQTtFQUNBLDBCQUFBO0FKeURWO0FDcElZO0VHc0VOO0lBUUkscUJBQUE7RUowRFI7QUFDRjtBQ3pJWTtFR3NFTjtJQVFJLHFCQUFBO0VKK0RSO0FBQ0Y7QUk5RFE7RUFDRSx1QkFBQTtFQUNBLGFBQUE7QUpnRVY7QUNsSlk7RUdxRkE7SUFDRSxpQkFBQTtFSmdFWjtBQUNGO0FDdkpZO0VHcUZBO0lBQ0UsaUJBQUE7RUpxRVo7QUFDRjtBQzVKWTtFR0VaO0lBNkZJLGdCQUFBO0VKaUVGO0FBQ0Y7QUNqS1k7RUdFWjtJQTZGSSxnQkFBQTtFSnNFRjtBQUNGO0FJcEVBO0VBQ0Usa0JBQUE7RUFDQSxTQUFBO0VBQ0EsV0FBQTtFQUNBLGdCQUFBO0VBQ0EsdUJBQUE7RUFDQSx5QkFBQTtFQUNBLFVBQUE7RUFDQSxtQkFBQTtFQUNBLGFBQUE7RUFDQSxtQkFBQTtBSnVFRjtBSXJFRTtFQUNFLDBCQUFBO0FKdUVKO0FJcEVFO0VBR0UsV0FBQTtFQUNBLGVBQUE7QUpvRUo7QUlsRUk7RUFDRSxnQkFBQTtFQUNBLGNBQUE7RUFDQSxhQUFBO0FKb0VOO0FJbkVNO0VBQ0UsT0FBQTtFQUNBLFlBQUE7RUFDQSxlQUFBO0FKcUVSO0FJbkVNO0VBQ0UsaUJBQUE7RUFDQSx5QkFBQTtBSnFFUjtBSW5FTTtFQUNFLGdCQUFBO0FKcUVSO0FDM01ZO0VHa0hWO0lBd0JJLGVBQUE7RUpxRUo7RUluRU07SUFDRSxjQUFBO0VKcUVSO0VJbkVNO0lBQ0UsaUJBQUE7RUpxRVI7RUluRU07SUFDRSxnQkFBQTtFSnFFUjtBQUNGO0FDek5ZO0VHa0hWO0lBd0JJLGVBQUE7RUptRko7RUlqRk07SUFDRSxjQUFBO0VKbUZSO0VJakZNO0lBQ0UsaUJBQUE7RUptRlI7RUlqRk07SUFDRSxnQkFBQTtFSm1GUjtBQUNGO0FJMUVFO0VBRUUsWUFBQTtBSjRFSjtBQzNPWTtFR29LUjtJQUNFLFlBQUE7SUFDQSxpQkFBQTtFSjBFSjtFSXZFRTtJQUNFLFlBQUE7RUp5RUo7RUl4RUk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUowRU47QUFDRjtBQ3hQWTtFR29LUjtJQUNFLFlBQUE7SUFDQSxpQkFBQTtFSnVGSjtFSXBGRTtJQUNFLFlBQUE7RUpzRko7RUlyRkk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUp1Rk47QUFDRiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIiRwcmltYXJ5OiAjMUY0MEU2O1xuJGZvcm0tbGFiZWw6ICMwNTFDMkM7XG4kc2Vjb25kYXJ5LWxhYmVsOiAjNzY3Njc2O1xuJGJvcmRlcjogI0IzQjNCMztcbiRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkOiAjRDBEMEQwO1xuJGNoaXAtY29sb3I6ICMzMzMzMzM7XG4kcGxhY2Vob2xkZXItY29sb3I6ICM3RjdGN0Y7XG4kYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDtcbiRwYWdlLWJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4kc2VsZWN0ZWQtb3B0aW9uOiAjRTZFNkU2O1xuJGNvbG9yLWJyYW5kLXllbGxvdzogI2ZmZDA0ODtcbiRsaWdodC15ZWxsb3c6ICNmZmYzY2U7XG4kY29hY2htYXJrLXRleHQ6ICM2ZjRkMDA7XG4kZXJyb3ItY29sb3I6ICNFMTJFNDA7XG4kbm8tZmlsdGVycy1jb2xvcjogI0JDQkNCQztcbiRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjogI0Y0RjRGNDtcbiRwcmltYXJ5LWhpZ2hsaWdodDogIzIyNTFGRjtcbiRzY3JvbGxiYXItY29sb3I6ICM3NTc1NzU7XG5cbiRhdmFpbGFibGUtY29sb3I6ICM1RDlENTI7XG4kYXZhaWxhYmxlLWJ5LXJlcXVlc3QtY29sb3I6ICNGNUI1M0Y7XG4kaW4tdXNlLWNvbG9yOiAjRDQ0ODNFO1xuJG5vdC1ib29rYWJsZS1jb2xvcjogI0NDQ0NDQztcblxuJG1vZGFsLWJvZHktaGVhZGluZzogIzRENEQ0RDtcbiRhbGVydC1vdmVybGF5LWJnOiByZ2JhKDUsIDI4LCA0NCwgMC44NSk7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvYWNobWFyay1iZzogI0VCRUJGNjtcbiRjb2FjaG1hcmstZGFyay10ZXh0OiAjMUIxQjE5O1xuJGVycm9yLXRleHQ6ICNmZmY7XG5cbi8qKlxuICogU3BhY2luZ1xuICovXG5cbi8vIDRweFxuJHNwYWNpbmctc21hbGxlc3Q6IDAuMjVyZW07XG5cbi8vIDhweFxuJHNwYWNpbmcteHhzbWFsbDogMC41cmVtO1xuXG4vLyAxMnB4XG4kc3BhY2luZy14c21hbGw6IDAuNzVyZW07XG5cbi8vIDE2cHhcbiRzcGFjaW5nLXNtYWxsOiAxcmVtO1xuXG4vLyAyMHB4XG4kc3BhY2luZy1zbWFsbC1tZWRpdW06IDEuMjVyZW07XG5cbi8vIDI0cHhcbiRzcGFjaW5nLW1lZGl1bTogMS41cmVtO1xuXG4vLyAyOHB4XG4kc3BhY2luZy1tZWRpdW0tbGFyZ2U6IDEuNzVyZW07XG5cbi8vIDMycHhcbiRzcGFjaW5nLWxhcmdlOiAycmVtO1xuXG4vLyA0OHB4XG4kc3BhY2luZy14bGFyZ2U6IDNyZW07XG5cbi8vIDY0cHhcbiRzcGFjaW5nLXh4bGFyZ2U6IDRyZW07XG5cbi8vIDk2cHhcbiRzcGFjaW5nLWxhcmdlc3Q6IDZyZW07XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kZGV2aWNlLW1vYmlsZS1zaXplOiA0NTBweDtcbiRkZXZpY2UtdGFibGV0LXNpemU6IDgwMHB4O1xuJGRldmljZS1sYXB0b3Atc2l6ZTogMTAyNHB4O1xuXG4kZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZTogMTA0OHB4O1xuJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemU6IDEyODBweDtcblxuXG46ZXhwb3J0IHtcbiAgICBwcmltYXJ5OiAkcHJpbWFyeTtcbiAgICBzZWNvbmRhcnlMYWJlbDogJHNlY29uZGFyeS1sYWJlbDtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbiRpY29uLXNtYWxsOiAxNnB4O1xuJGljb24tbWVkaXVtOiAyNHB4O1xuJGljb24tbGFyZ2U6IDMycHg7XG4kaWNvbi14bGFyZ2U6IDQ4cHg7XG4iLCIvKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLmxvYWRpbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gIHBhZGRpbmc6IDNlbTtcbn1cblxuLmJvb2tpbmctY29udGVudCB7XG4gIG1hcmdpbjogMCBhdXRvIDAgYXV0bztcbiAgcGFkZGluZzogMXB4IDBweCAxMjBweCAwO1xufVxuLmJvb2tpbmctY29udGVudCA+IGRpdiB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLmJvb2tpbmctY29udGVudC5vcGVuIHtcbiAgbWFyZ2luOiAwIGF1dG8gMjgwcHggYXV0bztcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMge1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcGFkZGluZzogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMge1xuICAgIHBhZGRpbmctYm90dG9tOiA0MHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyB7XG4gICAgcGFkZGluZy1ib3R0b206IDQwcHg7XG4gIH1cbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgPiBkaXYge1xuICBtYXgtd2lkdGg6IDEwMjRweDtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIGgxIHtcbiAgZm9udC1zaXplOiAzMnB4O1xuICBtYXJnaW46IDEwcHggMCA0MHB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICB3aWR0aDogMTAwJTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyBsYWJlbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXNpemU6IDE2cHg7XG4gIHBhZGRpbmc6IDRweCAwIDIwcHggMDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgbGFiZWwgc3BhbiB7XG4gIHBhZGRpbmc6IDAgMThweDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24ge1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgY29sb3I6ICMzMzMzMzM7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uIGgxIHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBmb250LXdlaWdodDogNDAwO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgbWF4LXdpZHRoOiA2NzFweDtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uID4gZGl2ID4gZGl2IHtcbiAgZmxleDogMTtcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gIHBhZGRpbmctYm90dG9tOiAxNXB4O1xuICBtaW4td2lkdGg6IDIwMHB4O1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiBoMiB7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgY29sb3I6ICMzMzMzMzM7XG4gIG1hcmdpbjogMCAwIDIwcHggMDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiBoMiB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiBoMiB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICB9XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIHBhZGRpbmc6IDI4cHggMjBweDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tIC5yZWMtZGV0YWlscy1wZXJpb2Qge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20ge1xuICAgIHBhZGRpbmctYm90dG9tOiAxMDBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG4gIH1cbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tID4gZGl2IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDIwcHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSA+IGRpdiA+IGRpdiB7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSA+IGRpdiA+IGRpdiB7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQge1xuICAgIHBhZGRpbmc6IDAgMCAwIDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwIDAgMCAwO1xuICB9XG59XG5cbi5ib3R0b20tcGFuZWwge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDgwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICB6LWluZGV4OiAyO1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLmJvdHRvbS1wYW5lbC5maXhlZCB7XG4gIHBvc2l0aW9uOiBmaXhlZCAhaW1wb3J0YW50O1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IG5vbmU7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IHtcbiAgbWF4LXdpZHRoOiA4ODBweDtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGRpc3BsYXk6IGZsZXg7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbiB7XG4gIGZsZXg6IDE7XG4gIGhlaWdodDogNDhweDtcbiAgZm9udC1zaXplOiAxNnB4O1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMikge1xuICBtYXJnaW4tbGVmdDogNXB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyB7XG4gICAgcGFkZGluZzogMTZweCAwO1xuICB9XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uIHtcbiAgICBtYXJnaW46IDAgMTZweDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMSkge1xuICAgIG1hcmdpbi1yaWdodDogOHB4O1xuICB9XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uOm50aC1jaGlsZCgyKSB7XG4gICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMge1xuICAgIHBhZGRpbmc6IDE2cHggMDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbiB7XG4gICAgbWFyZ2luOiAwIDE2cHg7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMikge1xuICAgIG1hcmdpbi1sZWZ0OiA4cHg7XG4gIH1cbn1cblxuLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lci5saW1pdC1oZWlnaHQge1xuICBoZWlnaHQ6IDg0dmg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1mb3JtLWJhc2UtY29udGFpbmVyLmxpbWl0LWhlaWdodCB7XG4gICAgaGVpZ2h0OiA5NXZoO1xuICAgIG1heC1oZWlnaHQ6IDg4NnB4O1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCwgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCAuZGV0YWlscywgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCAuZGV0YWlscyB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIubGltaXQtaGVpZ2h0IHtcbiAgICBoZWlnaHQ6IDk1dmg7XG4gICAgbWF4LWhlaWdodDogODg2cHg7XG4gIH1cbiAgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAuYm9va2luZy1jb250ZW50LCAuYm9va2luZy1mb3JtLWJhc2UtY29udGFpbmVyIC5tY2stc2Nyb2xsIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gIH1cbiAgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzLCAuYm9va2luZy1mb3JtLWJhc2UtY29udGFpbmVyIC5tY2stc2Nyb2xsIC5kZXRhaWxzIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICB9XG59IiwiQGltcG9ydCBcInZhcnNcIjtcblxuQG1peGluIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJHNpemUsICRxdWFsaWZpZXIpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBpZiAoJHF1YWxpZmllciA9PSBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIGlmICgkcXVhbGlmaWVyID09IG1heC13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtYXgtd2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBtaXhpbiBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJG1pbiwgJG1heCkge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gdGhpcyBpcyBhIGNvcHkgb2YgcmVzcG9uZC10by4gd2UgZG9uJ3Qgd2FudCB0byBwcmVzZXJ2ZSB0aGF0IG1ldGhvZCBzaW5jZSB0aGUgYnJlYWtwb2ludHMgbWF5IGRpdmVyZ2UgZnJvbSB0aGUgb2xkIFVJLlxuQG1peGluIGlzLXNjcmVlbi1zaXplKCRtZWRpYTogYWxsLCAkb3JpZW50YXRpb246IG5vbmUpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuXG5AbWl4aW4gcGFnZS1wYWRkaW5nIHtcbiAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xufVxuXG4vLyBGb250IE1peGluc1xuJGZvbnQtbWNraW5zZXktc2FuczogXCJNY0tpbnNleSBTYW5zXCI7XG4kZm9udC10aGVpbmhhcmR0OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiRmb250LWJvd2VyOiBcIkJvd2VyXCI7XG5cbkBtaXhpbiBib3dlci1ib2xkIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtYm93ZXI7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIG1ja2luc2V5LXNhbnMge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBkaXNwbGF5LTEge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDRyZW07IC8vIDY0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTg3OyAvLyA3NnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0yIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0zIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTQge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzcmVtOyAvLyA0OHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTY2OyAvLyA1NnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDY0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTUge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuODMzOyAvLyAzNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42NDI7IC8vIDQwcHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTcge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDQ4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjc1cmVtOyAvLyA0NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNTJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICBsaW5lLWhlaWdodDogMS4xMTE7IC8vIDQ0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA0OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0zIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjIyOyAvLyA0NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy00IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy01IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyODhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy02IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTU1OyAvLyAyOHB4XG4gICAgfVxufVxuXG5AbWl4aW4gYm9keS1kZWZhdWx0IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI2cHhcbiAgICB9XG59XG5cbi8vLyBEb2VzbnQgZXhpc3QgaW4gTURTLlxuQG1peGluIGJvZHktdGlueSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07IC8vIDEycHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyMHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZm9ybS1sYWJlbCB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LWZhbWlseTogJGZvbnQtdGhlaW5oYXJkdDtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgY29sb3I6ICRwbGFjZWhvbGRlci1jb2xvcjtcbiAgICBmb250LXdlaWdodDogMzAwO1xufVxuXG5AbWl4aW4gY2hpcC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIGNoZWNrYm94LWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgY29sb3I6IGJsYWNrO1xufVxuXG4vLyBib3JkZXJzXG5cbkBtaXhpbiBtY2stY2hlY2tib3gtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAycHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLXRoaW4tYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlci1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJvcmRlci1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50LWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXItbGlnaHQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5cbi8vIGZ1bmN0aW9uc1xuXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbkBtaXhpbiBtYXgtbGluZXMoJGNvdW50KSB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAtd2Via2l0LWxpbmUtY2xhbXA6ICRjb3VudDtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuXG4vLyBpbWFnZXNcbkBtaXhpbiBtY2staWNvbigkd2lkdGgsICRhc3NldCwgJGhlaWdodDogJHdpZHRoLCAgJGFzc2V0UGF0aDogXCJsaWJzL3VpL3NyYy9saWIvaWNvbnNcIiwpIHtcbiAgICB3aWR0aDogJHdpZHRoO1xuICAgIGhlaWdodDogJGhlaWdodDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIjeyRhc3NldFBhdGh9LyN7JGFzc2V0fVwiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG59XG5cblxuQG1peGluIG1jay1zbWFsbC1pY29uKCRtb2JpbGUtYXNzZXQsICRkZXNrdG9wLWFzc2V0OiAkbW9iaWxlLWFzc2V0KSB7XG4gICAgQGluY2x1ZGUgbWNrLWljb24oMTZweCwgJGFzc2V0OiAkbW9iaWxlLWFzc2V0KTtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oMjRweCwgJGFzc2V0OiAkZGVza3RvcC1hc3NldCk7XG4gICAgfVxufVxuXG4vLyBza2VsZXRvblxuQG1peGluIHNrZWxldG9uLWJnIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItaW1hZ2Utc2l6ZSB7XG4gICAgd2lkdGg6IDgxcHg7XG4gICAgaGVpZ2h0OiA4MnB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMjE5cHg7XG4gICAgICAgIGhlaWdodDogMTE5cHg7XG4gICAgfVxufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItc3RhdHVzLXNpemUge1xuICAgIHdpZHRoOiAxMTdweDtcbiAgICBoZWlnaHQ6IDc4cHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAxMTdweDtcbiAgICAgICAgaGVpZ2h0OiA3OHB4O1xuICAgIH1cbn1cbiIsIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGNvbG9yLWJyYW5kLWVsZWN0cmljLWJsdWU6ICMyMjUxZmY7XG4kY29sb3ItYnJhbmQtZGVlcC1ibHVlOiAjMDUxYzJjO1xuJGNvbG9yLWJyYW5kLWN5YW46ICMwMGE5ZjQ7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kZm9udC1kYXJrOiAjMDAwO1xuJGZvbnQtbGlnaHQ6ICNmZmY7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuJGdyZWVuMTogIzIxOTY1MztcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2xvci1wcmltYXJ5OiAjMTkzN2VhO1xuJGNvbG9yLXByaW1hcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcbiRjb2xvci1wcmltYXJ5LWRhcms6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuXG4kY29sb3Itc2Vjb25kYXJ5OiAjNDI4NUY0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodDogbGlnaHRlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG4kY29sb3Itc2Vjb25kYXJ5LWRhcms6IGRhcmtlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG5cbiRiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuJGZvb3Rlci1iYWNrOiAjMjYzMjM4O1xuJGhlYWRlci1iYWNrOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNTFDMkMsICMwNTFDMkMgNDAlLCAjMEIyNDUzIDYwJSwgIzFGNDBFNiAxMDAlKTtcblxuJGNvbG9yLXRlcm5hcnk6ICMwNTFjMmM7XG5cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuXG4kZm9udC1zdGFjazogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiRoZWFkaW5nLWZvbnQ6IFwiTGFyaXNoTWNLaW5zZXlcIiwgJ0dlb3JnaWEnLCBzZXJpZjtcbiRmb250OiAkZm9udC1zdGFjaztcblxuJGZvbnQtZmFtaWx5LXByaW1hcnk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LXNlY29uZGFyeTogXCJCb3dlclwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiIHNlcmlmO1xuXG4kYmFzZS1zaXplOiAxNnB4O1xuJHRhYmxldC1zaXplOiAxNnB4O1xuJG1vYmlsZS1zaXplOiAxNnB4O1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGJyZWFrLW1vYmlsZTogNDUwcHg7XG4kYnJlYWstdGFibGV0OiA4MDBweDtcbiRicmVhay1sYXB0b3A6IDEwMjRweDtcblxuJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGU6IDgwMHB4O1xuJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQ6IDEwNDhweDtcbiRicmVhay1sYW5kc2NhcGUtbGFwdG9wOiAxMjgwcHg7XG4iLCJAaW1wb3J0ICcuL3ZhcmlhYmxlcyc7XG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuQG1peGluIGJveC1zaGFkb3coJGNvbG9yOiAjMDAwLCAkZGVwdGg6IDEpIHtcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMXB4ICogKCRkZXB0aCAtIDEpIHJnYmEoIzAwMCwgLjIpLFxuICAgICAgICAgICAgICAgIDAgMXB4IDFweCAwIHJnYmEoIzAwMCwgLjE0KSxcbiAgICAgICAgICAgICAgICAwIDJweCAxcHggLTFweCByZ2JhKCMwMDAsIC4xMik7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG5AbWl4aW4gcmVzcG9uZC10bygkbWVkaWEpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gIEBlbHNlIGlmICRtZWRpYSA9PSBsYXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1AZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQGltcG9ydCBcImxpYnMvdWkvc3JjL2xpYi9taXhpbnNcIjtcbkBpbXBvcnQgJ3ZhcmlhYmxlcyc7XG5AaW1wb3J0ICdtaXhpbnMnO1xuXG5cblxuXG4ubG9hZGluZyB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoI2ZmZmZmZiwgMC41KTtcbiAgcGFkZGluZzogM2VtO1xufVxuLmJvb2tpbmctY29udGVudCB7XG4gIG1hcmdpbjogMCBhdXRvIDAgYXV0bztcbiAgcGFkZGluZzogMXB4IDBweCAxMjBweCAwO1xuICA+ZGl2IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAmLm9wZW4ge1xuICAgIG1hcmdpbjogMCBhdXRvIDI4MHB4IGF1dG87XG4gIH1cbiAgLmRldGFpbHMge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgcGFkZGluZzogMDtcbiAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgcGFkZGluZy1ib3R0b206IDQwcHg7XG4gICAgfVxuICAgID5kaXYge1xuICAgICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICB9XG4gICAgaDEge1xuICAgICAgZm9udC1zaXplOiAzMnB4O1xuICAgICAgbWFyZ2luOiAxMHB4IDAgNDBweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIC8vIGZvbnQtZmFtaWx5OiAnQm93ZXInO1xuICAgIH1cbiAgICBsYWJlbCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIHBhZGRpbmc6IDRweCAwIDIwcHggMDtcbiAgICAgIHNwYW4ge1xuICAgICAgICBwYWRkaW5nOiAwIDE4cHg7XG4gICAgICB9XG4gICAgfVxuICAgIC5zZWN0aW9uIHtcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgIGgxIHtcbiAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgfVxuICAgICAgPmRpdiB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgbWF4LXdpZHRoOiA2NzFweDtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgID5kaXYge1xuICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDE1cHg7XG4gICAgICAgICAgbWluLXdpZHRoOiAyMDBweDtcbiAgICAgICAgfVxuICAgICAgICBoMiB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgY29sb3I6ICMzMzMzMzM7XG4gICAgICAgICAgbWFyZ2luOiAwIDAgMjBweCAwO1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1wcmltYXJ5O1xuICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICAgIH1cbiAgICAgICAgfSAgICAgICBcbiAgICAgIH1cbiAgICAgICYuYm90dG9tIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgICAgICAgcGFkZGluZzogMjhweCAyMHB4O1xuICAgICAgICAucmVjLWRldGFpbHMtcGVyaW9kIHtcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDEwMHB4O1xuICAgICAgICB9XG4gICAgICAgID5kaXYge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICAgIHBhZGRpbmc6IDIwcHg7XG5cbiAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgID4gZGl2e1xuICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICBwYWRkaW5nOiAwIDAgMCAwO1xuICB9XG59XG4uYm90dG9tLXBhbmVsIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiA4MHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgei1pbmRleDogMjtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAmLmZpeGVkIHtcbiAgICBwb3NpdGlvbjogZml4ZWQgIWltcG9ydGFudDtcbiAgfVxuICBcbiAgLmJ1dHRvbnMge1xuICAgIC8vIHBhZGRpbmc6IDI0cHggMTZweDtcbiAgICAvLyBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1heC13aWR0aDogbm9uZTtcblxuICAgID5kaXYge1xuICAgICAgbWF4LXdpZHRoOiA4ODBweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGJ1dHRvbiB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgfVxuICAgICAgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogNXB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRDBEMEQwO1xuICAgICAgfVxuICAgICAgYnV0dG9uOm50aC1jaGlsZCgyKSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gICAgICB9XG4gICAgfVxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgcGFkZGluZzogMTZweCAwO1xuICAgICAgPmRpdiB7XG4gICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgbWFyZ2luOiAwIDE2cHg7XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiA4cHg7XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9uOm50aC1jaGlsZCgyKSB7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cbi5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXJ7XG5cbiAgJi5saW1pdC1oZWlnaHQge1xuICAgIC8vIG1heC1oZWlnaHQ6IDg0MnB4O1xuICAgIGhlaWdodDogODR2aDtcbiAgICAvLyBtYXgtaGVpZ2h0OiA5M3ZoO1xuICB9XG5cbiAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgJi5saW1pdC1oZWlnaHQge1xuICAgICAgaGVpZ2h0OiA5NXZoO1xuICAgICAgbWF4LWhlaWdodDogODg2cHg7XG4gICAgfVxuXG4gICAgLmJvb2tpbmctY29udGVudCwgLm1jay1zY3JvbGx7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAuZGV0YWlsc3tcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cbn0iXX0= */"] }); /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(BookingFormBaseComponent, [{ type: core_1.Component, args: [{ @@ -31258,150 +31783,150 @@ const i8 = __webpack_require__(/*! ngx-skeleton-loader */ "../../node_modules/ng const i9 = __webpack_require__(/*! ../room-location-preview/room-location-preview.component */ "./src/app/booking/room-location-preview/room-location-preview.component.ts"); const i10 = __webpack_require__(/*! ../catering/order-table/order-table.component */ "./src/app/booking/catering/order-table/order-table.component.ts"); const i11 = __webpack_require__(/*! ../../../../../../libs/ui/src/lib/modal-button-row/modal-button-row.component */ "../../libs/ui/src/lib/modal-button-row/modal-button-row.component.ts"); -const i12 = __webpack_require__(/*! ../room-availability-preview/room-availability-preview.component */ "./src/app/booking/room-availability-preview/room-availability-preview.component.ts"); -const i13 = __webpack_require__(/*! ../booking-create/booking-edit.component */ "./src/app/booking/booking-create/booking-edit.component.ts"); +const i12 = __webpack_require__(/*! ../booking-create/booking-edit.component */ "./src/app/booking/booking-create/booking-edit.component.ts"); +const i13 = __webpack_require__(/*! ../room-availability-preview/room-availability-preview.component */ "./src/app/booking/room-availability-preview/room-availability-preview.component.ts"); const i14 = __webpack_require__(/*! ../catering/catering.component */ "./src/app/booking/catering/catering.component.ts"); -function BookingDetailsModalComponent_div_1_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 20); +function BookingDetailsModalComponent_div_1_div_1_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 26); i0.ɵɵtext(1, "\u00A0"); i0.ɵɵelementEnd(); } } -function BookingDetailsModalComponent_div_2_Template(rf, ctx) { if (rf & 1) { - const _r22 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div", 21); - i0.ɵɵelement(1, "img", 22); - i0.ɵɵelementStart(2, "p", 23); +function BookingDetailsModalComponent_div_1_div_2_Template(rf, ctx) { if (rf & 1) { + const _r24 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div", 27); + i0.ɵɵelement(1, "img", 28); + i0.ɵɵelementStart(2, "p", 29); i0.ɵɵtext(3, "Your booking date and/or time was successfully updated"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(4, "img", 24); - i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_2_Template_img_click_4_listener() { i0.ɵɵrestoreView(_r22); const ctx_r21 = i0.ɵɵnextContext(); return ctx_r21.hideInfoBanner(); }); + i0.ɵɵelementStart(4, "img", 30); + i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_1_div_2_Template_img_click_4_listener() { i0.ɵɵrestoreView(_r24); const ctx_r23 = i0.ɵɵnextContext(2); return ctx_r23.hideInfoBanner(); }); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } } -function BookingDetailsModalComponent_div_3_Template(rf, ctx) { if (rf & 1) { - const _r24 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div", 25); - i0.ɵɵelement(1, "img", 26); - i0.ɵɵelementStart(2, "p", 23); +function BookingDetailsModalComponent_div_1_div_3_Template(rf, ctx) { if (rf & 1) { + const _r26 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div", 31); + i0.ɵɵelement(1, "img", 32); + i0.ɵɵelementStart(2, "p", 29); i0.ɵɵtext(3); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(4, "img", 27); - i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_3_Template_img_click_4_listener() { i0.ɵɵrestoreView(_r24); const ctx_r23 = i0.ɵɵnextContext(); return ctx_r23.hideWarningBanner(); }); + i0.ɵɵelementStart(4, "img", 33); + i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_1_div_3_Template_img_click_4_listener() { i0.ɵɵrestoreView(_r26); const ctx_r25 = i0.ɵɵnextContext(2); return ctx_r25.hideWarningBanner(); }); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r2 = i0.ɵɵnextContext(); + const ctx_r6 = i0.ɵɵnextContext(2); i0.ɵɵadvance(3); - i0.ɵɵtextInterpolate(ctx_r2.warningMessage); + i0.ɵɵtextInterpolate(ctx_r6.warningMessage); } } -function BookingDetailsModalComponent_div_6_ng_template_9_Template(rf, ctx) { if (rf & 1) { +function BookingDetailsModalComponent_div_1_div_6_ng_template_9_Template(rf, ctx) { if (rf & 1) { i0.ɵɵtext(0); } if (rf & 2) { - const ctx_r25 = i0.ɵɵnextContext(2); - i0.ɵɵtextInterpolate3(" This is one occurrence in a recurring series which occurs every ", ctx_r25.recurrence_interval > 1 ? ctx_r25.recurrence_interval + " Days" : "Day", " effective ", ctx_r25._data == null ? null : ctx_r25._data.master_booking == null ? null : ctx_r25._data.master_booking.dateString, " until ", ctx_r25._data == null ? null : ctx_r25._data.master_booking == null ? null : ctx_r25._data.master_booking.endDateString, ". "); + const ctx_r27 = i0.ɵɵnextContext(3); + i0.ɵɵtextInterpolate3(" This is one occurrence in a recurring series which occurs every ", ctx_r27.recurrence_interval > 1 ? ctx_r27.recurrence_interval + " Days" : "Day", " effective ", ctx_r27._data == null ? null : ctx_r27._data.master_booking == null ? null : ctx_r27._data.master_booking.dateString, " until ", ctx_r27._data == null ? null : ctx_r27._data.master_booking == null ? null : ctx_r27._data.master_booking.endDateString, ". "); } } -function BookingDetailsModalComponent_div_6_ng_template_10_Template(rf, ctx) { if (rf & 1) { +function BookingDetailsModalComponent_div_1_div_6_ng_template_10_Template(rf, ctx) { if (rf & 1) { i0.ɵɵtext(0); } if (rf & 2) { - const ctx_r26 = i0.ɵɵnextContext(2); - i0.ɵɵtextInterpolate3(" This is one occurrence in a recurring series which occurs every ", ctx_r26.recurrence_interval > 1 ? ctx_r26.recurrence_interval + " Weeks" : "Week", " effective ", ctx_r26._data == null ? null : ctx_r26._data.master_booking == null ? null : ctx_r26._data.master_booking.dateString, " until ", ctx_r26._data == null ? null : ctx_r26._data.master_booking == null ? null : ctx_r26._data.master_booking.endDateString, ". "); + const ctx_r28 = i0.ɵɵnextContext(3); + i0.ɵɵtextInterpolate3(" This is one occurrence in a recurring series which occurs every ", ctx_r28.recurrence_interval > 1 ? ctx_r28.recurrence_interval + " Weeks" : "Week", " effective ", ctx_r28._data == null ? null : ctx_r28._data.master_booking == null ? null : ctx_r28._data.master_booking.dateString, " until ", ctx_r28._data == null ? null : ctx_r28._data.master_booking == null ? null : ctx_r28._data.master_booking.endDateString, ". "); } } -function BookingDetailsModalComponent_div_6_ng_template_11_Template(rf, ctx) { if (rf & 1) { +function BookingDetailsModalComponent_div_1_div_6_ng_template_11_Template(rf, ctx) { if (rf & 1) { i0.ɵɵtext(0); } if (rf & 2) { - const ctx_r27 = i0.ɵɵnextContext(2); - i0.ɵɵtextInterpolate3(" This is one occurrence in a recurring series which occurs every ", ctx_r27.recurrence_interval > 1 ? ctx_r27.recurrence_interval + " Months" : "Month", " effective ", ctx_r27._data == null ? null : ctx_r27._data.master_booking == null ? null : ctx_r27._data.master_booking.dateString, " until ", ctx_r27._data == null ? null : ctx_r27._data.master_booking == null ? null : ctx_r27._data.master_booking.endDateString, ". "); + const ctx_r29 = i0.ɵɵnextContext(3); + i0.ɵɵtextInterpolate3(" This is one occurrence in a recurring series which occurs every ", ctx_r29.recurrence_interval > 1 ? ctx_r29.recurrence_interval + " Months" : "Month", " effective ", ctx_r29._data == null ? null : ctx_r29._data.master_booking == null ? null : ctx_r29._data.master_booking.dateString, " until ", ctx_r29._data == null ? null : ctx_r29._data.master_booking == null ? null : ctx_r29._data.master_booking.endDateString, ". "); } } -function BookingDetailsModalComponent_div_6_ng_template_12_div_4_div_3_Template(rf, ctx) { if (rf & 1) { +function BookingDetailsModalComponent_div_1_div_6_ng_template_12_div_4_div_3_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div"); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { - const occurrence_r34 = ctx.$implicit; + const occurrence_r36 = ctx.$implicit; i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate(occurrence_r34.dateTz.formatDate("dd MMM yyyy")); + i0.ɵɵtextInterpolate(occurrence_r36.dateTz.formatDate("dd MMM yyyy")); } } -function BookingDetailsModalComponent_div_6_ng_template_12_div_4_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 43); - i0.ɵɵelement(1, "div", 44); - i0.ɵɵelementStart(2, "div", 45); - i0.ɵɵtemplate(3, BookingDetailsModalComponent_div_6_ng_template_12_div_4_div_3_Template, 2, 1, "div", 46); +function BookingDetailsModalComponent_div_1_div_6_ng_template_12_div_4_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 49); + i0.ɵɵelement(1, "div", 50); + i0.ɵɵelementStart(2, "div", 51); + i0.ɵɵtemplate(3, BookingDetailsModalComponent_div_1_div_6_ng_template_12_div_4_div_3_Template, 2, 1, "div", 52); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r32 = i0.ɵɵnextContext(3); + const ctx_r34 = i0.ɵɵnextContext(4); i0.ɵɵadvance(3); - i0.ɵɵproperty("ngForOf", ctx_r32.occurrence_details); + i0.ɵɵproperty("ngForOf", ctx_r34.occurrence_details); } } -function BookingDetailsModalComponent_div_6_ng_template_12_Template(rf, ctx) { if (rf & 1) { - const _r36 = i0.ɵɵgetCurrentView(); +function BookingDetailsModalComponent_div_1_div_6_ng_template_12_Template(rf, ctx) { if (rf & 1) { + const _r38 = i0.ɵɵgetCurrentView(); i0.ɵɵtext(0, " This is one occurrence in a recurring series which occurs on "); - i0.ɵɵelementStart(1, "span", 41); - i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_6_ng_template_12_Template_span_click_1_listener() { i0.ɵɵrestoreView(_r36); const ctx_r35 = i0.ɵɵnextContext(2); return ctx_r35.toggleSpecificDates(); }); + i0.ɵɵelementStart(1, "span", 47); + i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_1_div_6_ng_template_12_Template_span_click_1_listener() { i0.ɵɵrestoreView(_r38); const ctx_r37 = i0.ɵɵnextContext(3); return ctx_r37.toggleSpecificDates(); }); i0.ɵɵtext(2, "Specific Dates"); i0.ɵɵelementEnd(); i0.ɵɵtext(3); - i0.ɵɵtemplate(4, BookingDetailsModalComponent_div_6_ng_template_12_div_4_Template, 4, 1, "div", 42); + i0.ɵɵtemplate(4, BookingDetailsModalComponent_div_1_div_6_ng_template_12_div_4_Template, 4, 1, "div", 48); } if (rf & 2) { - const ctx_r28 = i0.ɵɵnextContext(2); + const ctx_r30 = i0.ɵɵnextContext(3); i0.ɵɵadvance(3); - i0.ɵɵtextInterpolate2(" effective ", ctx_r28._data == null ? null : ctx_r28._data.master_booking == null ? null : ctx_r28._data.master_booking.dateString, " until ", ctx_r28._data == null ? null : ctx_r28._data.master_booking == null ? null : ctx_r28._data.master_booking.endDateString, " "); + i0.ɵɵtextInterpolate2(" effective ", ctx_r30._data == null ? null : ctx_r30._data.master_booking == null ? null : ctx_r30._data.master_booking.dateString, " until ", ctx_r30._data == null ? null : ctx_r30._data.master_booking == null ? null : ctx_r30._data.master_booking.endDateString, " "); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx_r28.specific_dates); + i0.ɵɵproperty("ngIf", ctx_r30.specific_dates); } } -function BookingDetailsModalComponent_div_6_button_14_Template(rf, ctx) { if (rf & 1) { - const _r38 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "button", 47); - i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_6_button_14_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r38); const ctx_r37 = i0.ɵɵnextContext(2); return ctx_r37.editRecurringSeries(); }); +function BookingDetailsModalComponent_div_1_div_6_button_14_Template(rf, ctx) { if (rf & 1) { + const _r40 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "button", 53); + i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_1_div_6_button_14_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r40); const ctx_r39 = i0.ɵɵnextContext(3); return ctx_r39.editRecurringSeries(); }); i0.ɵɵtext(1, " Edit series "); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r29 = i0.ɵɵnextContext(2); - i0.ɵɵproperty("disabled", ctx_r29.disableSeriesEditButton); + const ctx_r31 = i0.ɵɵnextContext(3); + i0.ɵɵproperty("disabled", ctx_r31.disableSeriesEditButton); } } -function BookingDetailsModalComponent_div_6_button_15_Template(rf, ctx) { if (rf & 1) { - const _r40 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "button", 48); - i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_6_button_15_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r40); const ctx_r39 = i0.ɵɵnextContext(2); return ctx_r39.cancelBooking({ series: true }); }); +function BookingDetailsModalComponent_div_1_div_6_button_15_Template(rf, ctx) { if (rf & 1) { + const _r42 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "button", 54); + i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_1_div_6_button_15_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r42); const ctx_r41 = i0.ɵɵnextContext(3); return ctx_r41.cancelBooking({ series: true }); }); i0.ɵɵtext(1, " Cancel series "); i0.ɵɵelementEnd(); } } -function BookingDetailsModalComponent_div_6_ngx_skeleton_loader_16_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelement(0, "ngx-skeleton-loader", 49); +function BookingDetailsModalComponent_div_1_div_6_ngx_skeleton_loader_16_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelement(0, "ngx-skeleton-loader", 55); } } -function BookingDetailsModalComponent_div_6_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 28); - i0.ɵɵelementStart(1, "div", 29); - i0.ɵɵelementStart(2, "div", 30); - i0.ɵɵelement(3, "img", 31); - i0.ɵɵelementStart(4, "span", 32); +function BookingDetailsModalComponent_div_1_div_6_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 34); + i0.ɵɵelementStart(1, "div", 35); + i0.ɵɵelementStart(2, "div", 36); + i0.ɵɵelement(3, "img", 37); + i0.ɵɵelementStart(4, "span", 38); i0.ɵɵtext(5); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(6, "div", 33); - i0.ɵɵelement(7, "img", 34); - i0.ɵɵelementStart(8, "div", 35); - i0.ɵɵtemplate(9, BookingDetailsModalComponent_div_6_ng_template_9_Template, 1, 3, "ng-template", 36); - i0.ɵɵtemplate(10, BookingDetailsModalComponent_div_6_ng_template_10_Template, 1, 3, "ng-template", 36); - i0.ɵɵtemplate(11, BookingDetailsModalComponent_div_6_ng_template_11_Template, 1, 3, "ng-template", 36); - i0.ɵɵtemplate(12, BookingDetailsModalComponent_div_6_ng_template_12_Template, 5, 3, "ng-template", 37); + i0.ɵɵelementStart(6, "div", 39); + i0.ɵɵelement(7, "img", 40); + i0.ɵɵelementStart(8, "div", 41); + i0.ɵɵtemplate(9, BookingDetailsModalComponent_div_1_div_6_ng_template_9_Template, 1, 3, "ng-template", 42); + i0.ɵɵtemplate(10, BookingDetailsModalComponent_div_1_div_6_ng_template_10_Template, 1, 3, "ng-template", 42); + i0.ɵɵtemplate(11, BookingDetailsModalComponent_div_1_div_6_ng_template_11_Template, 1, 3, "ng-template", 42); + i0.ɵɵtemplate(12, BookingDetailsModalComponent_div_1_div_6_ng_template_12_Template, 5, 3, "ng-template", 43); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(13, "div", 38); - i0.ɵɵtemplate(14, BookingDetailsModalComponent_div_6_button_14_Template, 2, 1, "button", 39); - i0.ɵɵtemplate(15, BookingDetailsModalComponent_div_6_button_15_Template, 2, 0, "button", 40); - i0.ɵɵtemplate(16, BookingDetailsModalComponent_div_6_ngx_skeleton_loader_16_Template, 1, 0, "ngx-skeleton-loader", 13); + i0.ɵɵelementStart(13, "div", 44); + i0.ɵɵtemplate(14, BookingDetailsModalComponent_div_1_div_6_button_14_Template, 2, 1, "button", 45); + i0.ɵɵtemplate(15, BookingDetailsModalComponent_div_1_div_6_button_15_Template, 2, 0, "button", 46); + i0.ɵɵtemplate(16, BookingDetailsModalComponent_div_1_div_6_ngx_skeleton_loader_16_Template, 1, 0, "ngx-skeleton-loader", 17); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r3 = i0.ɵɵnextContext(); + const ctx_r7 = i0.ɵɵnextContext(2); i0.ɵɵadvance(3); - i0.ɵɵproperty("src", ctx_r3.statusImage, i0.ɵɵsanitizeUrl); + i0.ɵɵproperty("src", ctx_r7.statusImage, i0.ɵɵsanitizeUrl); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1(" Recurring booking status: ", ctx_r3.statusText, " "); + i0.ɵɵtextInterpolate1(" Recurring booking status: ", ctx_r7.statusText, " "); i0.ɵɵadvance(3); - i0.ɵɵproperty("ngSwitch", ctx_r3.recurrence_period); + i0.ɵɵproperty("ngSwitch", ctx_r7.recurrence_period); i0.ɵɵadvance(1); i0.ɵɵproperty("ngSwitchCase", "daily"); i0.ɵɵadvance(1); @@ -31409,17 +31934,17 @@ function BookingDetailsModalComponent_div_6_Template(rf, ctx) { if (rf & 1) { i0.ɵɵadvance(1); i0.ɵɵproperty("ngSwitchCase", "monthly"); i0.ɵɵadvance(3); - i0.ɵɵproperty("ngIf", !ctx_r3.loading && !ctx_r3.disableCancelButton); + i0.ɵɵproperty("ngIf", !ctx_r7.loading && !ctx_r7.disableCancelButton); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", !ctx_r3.loading); + i0.ɵɵproperty("ngIf", !ctx_r7.loading); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx_r3.loading); + i0.ɵɵproperty("ngIf", ctx_r7.loading); } } -function BookingDetailsModalComponent_div_7_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 50); - i0.ɵɵelementStart(1, "div", 51); +function BookingDetailsModalComponent_div_1_div_7_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 56); + i0.ɵɵelementStart(1, "div", 57); i0.ɵɵelementStart(2, "p"); - i0.ɵɵelement(3, "img", 31); + i0.ɵɵelement(3, "img", 37); i0.ɵɵtext(4); i0.ɵɵelementEnd(); i0.ɵɵelementStart(5, "span"); @@ -31428,18 +31953,18 @@ function BookingDetailsModalComponent_div_7_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r4 = i0.ɵɵnextContext(); - i0.ɵɵproperty("ngClass", ctx_r4.status); + const ctx_r8 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("ngClass", ctx_r8.status); i0.ɵɵadvance(3); - i0.ɵɵproperty("src", ctx_r4.statusImage, i0.ɵɵsanitizeUrl); + i0.ɵɵproperty("src", ctx_r8.statusImage, i0.ɵɵsanitizeUrl); i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate1(" Booking ", ctx_r4.statusText.toLowerCase(), ""); + i0.ɵɵtextInterpolate(ctx_r8.statusText); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1(" ", ctx_r4.timeString, " "); + i0.ɵɵtextInterpolate1(" ", ctx_r8.timeString, " "); } } -function BookingDetailsModalComponent_div_8_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 52); - i0.ɵɵelement(1, "img", 53); +function BookingDetailsModalComponent_div_1_div_8_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 58); + i0.ɵɵelement(1, "img", 59); i0.ɵɵelementStart(2, "div"); i0.ɵɵelementStart(3, "p"); i0.ɵɵtext(4, "This is a multiroom booking. To request edits, please contact your local backoffice team."); @@ -31447,349 +31972,474 @@ function BookingDetailsModalComponent_div_8_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } } -function BookingDetailsModalComponent_div_9_Template(rf, ctx) { if (rf & 1) { +function BookingDetailsModalComponent_div_1_div_9_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div"); i0.ɵɵelementStart(1, "div"); - i0.ɵɵelement(2, "ngx-skeleton-loader", 54); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); -} } -function BookingDetailsModalComponent_h1_13_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "h1"); - i0.ɵɵtext(1); + i0.ɵɵelement(2, "ngx-skeleton-loader", 60); i0.ɵɵelementEnd(); -} if (rf & 2) { - const ctx_r7 = i0.ɵɵnextContext(); - i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate1("Booking Status: ", ctx_r7.statusText, ""); -} } -function BookingDetailsModalComponent_h1_14_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "h1"); - i0.ɵɵelement(1, "ngx-skeleton-loader", 55); i0.ɵɵelementEnd(); } } -function BookingDetailsModalComponent_a_17_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "a", 56); +function BookingDetailsModalComponent_div_1_a_21_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "a", 61); i0.ɵɵtext(1, " Contact front of house"); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r9 = i0.ɵɵnextContext(); - i0.ɵɵproperty("href", ctx_r9.emailURL, i0.ɵɵsanitizeUrl); + const ctx_r11 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("href", ctx_r11.emailURL, i0.ɵɵsanitizeUrl); } } -function BookingDetailsModalComponent_ngx_skeleton_loader_18_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelement(0, "ngx-skeleton-loader", 49); +function BookingDetailsModalComponent_div_1_ngx_skeleton_loader_22_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelement(0, "ngx-skeleton-loader", 55); } } -function BookingDetailsModalComponent_button_20_Template(rf, ctx) { if (rf & 1) { - const _r42 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "button", 57); - i0.ɵɵlistener("click", function BookingDetailsModalComponent_button_20_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r42); const ctx_r41 = i0.ɵɵnextContext(); return ctx_r41.cancelBooking(); }); +function BookingDetailsModalComponent_div_1_button_24_Template(rf, ctx) { if (rf & 1) { + const _r44 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "button", 62); + i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_1_button_24_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r44); const ctx_r43 = i0.ɵɵnextContext(2); return ctx_r43.cancelBooking(); }); i0.ɵɵtext(1, " Cancel booking"); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r11 = i0.ɵɵnextContext(); - i0.ɵɵproperty("disabled", ctx_r11.isMultiroomBooking); -} } -function BookingDetailsModalComponent_ngx_skeleton_loader_21_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelement(0, "ngx-skeleton-loader", 49); + const ctx_r13 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("disabled", ctx_r13.isMultiroomBooking); } } -function BookingDetailsModalComponent_div_24_div_19_Template(rf, ctx) { if (rf & 1) { - const _r45 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div"); - i0.ɵɵelementStart(1, "input", 62); - i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_24_div_19_Template_input_click_1_listener() { i0.ɵɵrestoreView(_r45); const ctx_r44 = i0.ɵɵnextContext(2); return ctx_r44.expandLocation(); }); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); +function BookingDetailsModalComponent_div_1_ngx_skeleton_loader_25_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelement(0, "ngx-skeleton-loader", 55); } } -function BookingDetailsModalComponent_div_24_Template(rf, ctx) { if (rf & 1) { - const _r47 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div"); - i0.ɵɵelementStart(1, "h2"); - i0.ɵɵelement(2, "img", 58); - i0.ɵɵtext(3); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(4, "p"); - i0.ɵɵtext(5); - i0.ɵɵelement(6, "br"); - i0.ɵɵtext(7); - i0.ɵɵelement(8, "br"); - i0.ɵɵtext(9); +function BookingDetailsModalComponent_div_1_div_28_Template(rf, ctx) { if (rf & 1) { + const _r46 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div", 63); + i0.ɵɵelementStart(1, "div", 64); + i0.ɵɵelementStart(2, "div", 65); + i0.ɵɵelementStart(3, "h2"); + i0.ɵɵtext(4, " Schedule "); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(10, "button", 59); - i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_24_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r47); const ctx_r46 = i0.ɵɵnextContext(); return ctx_r46.toggleEditView(); }); - i0.ɵɵtext(11, " Edit date or time "); + i0.ɵɵelementStart(5, "button", 66); + i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_1_div_28_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r46); const ctx_r45 = i0.ɵɵnextContext(2); return ctx_r45.toggleEditView(); }); + i0.ɵɵelement(6, "img", 67); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(12, "p"); - i0.ɵɵtext(13); - i0.ɵɵelement(14, "br"); - i0.ɵɵtext(15); - i0.ɵɵelement(16, "br"); - i0.ɵɵtext(17); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(18, "div", 60); - i0.ɵɵtemplate(19, BookingDetailsModalComponent_div_24_div_19_Template, 2, 0, "div", 9); - i0.ɵɵelementStart(20, "room-location-preview", 61); - i0.ɵɵlistener("handleExpand", function BookingDetailsModalComponent_div_24_Template_room_location_preview_handleExpand_20_listener() { i0.ɵɵrestoreView(_r47); const ctx_r48 = i0.ɵɵnextContext(); return ctx_r48.handleClose(false); }); + i0.ɵɵelementStart(7, "p"); + i0.ɵɵtext(8); + i0.ɵɵelement(9, "br"); + i0.ɵɵtext(10); + i0.ɵɵelement(11, "br"); + i0.ɵɵtext(12); i0.ɵɵelementEnd(); + i0.ɵɵelementStart(13, "button", 68); + i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_1_div_28_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r46); const ctx_r47 = i0.ɵɵnextContext(2); return ctx_r47.extendBooking(); }); + i0.ɵɵtext(14); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(21, "button", 59); - i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_24_Template_button_click_21_listener() { i0.ɵɵrestoreView(_r47); const ctx_r49 = i0.ɵɵnextContext(); return ctx_r49.extendBooking(); }); - i0.ɵɵtext(22); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r13 = i0.ɵɵnextContext(); - i0.ɵɵadvance(3); - i0.ɵɵtextInterpolate1(" ", ctx_r13.title, " "); - i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1(" Date: ", ctx_r13.dateString, ""); - i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1(" Time: ", ctx_r13.timeString, ""); - i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate2(" ", ctx_r13.type, " meeting (", ctx_r13.durationString, ") "); - i0.ɵɵadvance(1); - i0.ɵɵproperty("disabled", ctx_r13.disableEditTimeButton || ctx_r13.isMultiroomBooking); + const ctx_r15 = i0.ɵɵnextContext(2); + i0.ɵɵadvance(5); + i0.ɵɵproperty("disabled", ctx_r15.disableEditTimeButton || ctx_r15.isMultiroomBooking); i0.ɵɵadvance(3); - i0.ɵɵtextInterpolate1(" Address: ", ctx_r13.roomLocation, ""); - i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1(" Room: ", ctx_r13.roomName, ""); + i0.ɵɵtextInterpolate1(" Date: ", ctx_r15.dateString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1(" Capacity: ", ctx_r13.capacity, " "); + i0.ɵɵtextInterpolate1(" Time: ", ctx_r15.timeString, ""); i0.ɵɵadvance(2); - i0.ɵɵproperty("ngIf", !ctx_r13.expandedLocation); - i0.ɵɵadvance(1); - i0.ɵɵproperty("mapUrl", ctx_r13.mapUrl)("focus", ctx_r13.focusedRoom)("expanded", ctx_r13.expandedLocation)("building", ctx_r13._data.booking.room.building)("level", ctx_r13._data.booking.room.level)("space", ctx_r13._data.booking.room)("mode", ctx_r13.TopBarHeaderMode.Light); + i0.ɵɵtextInterpolate2(" ", ctx_r15.type, " meeting (", ctx_r15.durationString, ") "); i0.ɵɵadvance(1); - i0.ɵɵproperty("disabled", ctx_r13.extendableMaximum === 0 || ctx_r13.isMultiroomBooking); + i0.ɵɵproperty("disabled", ctx_r15.extendableMaximum === 0 || ctx_r15.isMultiroomBooking); i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate1(" ", ctx_r13.checkingExtendable ? "Checking availability..." : "Extend booking duration", " "); + i0.ɵɵtextInterpolate1(" ", ctx_r15.checkingExtendable ? "Checking availability..." : "Extend booking duration", " "); } } -function BookingDetailsModalComponent_div_25_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div"); +function BookingDetailsModalComponent_div_1_div_29_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 63); i0.ɵɵelementStart(1, "h2"); - i0.ɵɵelement(2, "ngx-skeleton-loader", 63); + i0.ɵɵelement(2, "ngx-skeleton-loader", 69); i0.ɵɵelementEnd(); i0.ɵɵelementStart(3, "p"); - i0.ɵɵelement(4, "ngx-skeleton-loader", 64); - i0.ɵɵelement(5, "ngx-skeleton-loader", 64); - i0.ɵɵelement(6, "ngx-skeleton-loader", 65); + i0.ɵɵelement(4, "ngx-skeleton-loader", 70); + i0.ɵɵelement(5, "ngx-skeleton-loader", 70); + i0.ɵɵelement(6, "ngx-skeleton-loader", 71); i0.ɵɵelementEnd(); - i0.ɵɵelement(7, "ngx-skeleton-loader", 55); - i0.ɵɵelement(8, "ngx-skeleton-loader", 66); - i0.ɵɵelementStart(9, "p"); - i0.ɵɵelement(10, "ngx-skeleton-loader", 67); - i0.ɵɵelement(11, "ngx-skeleton-loader", 65); - i0.ɵɵelement(12, "ngx-skeleton-loader", 65); - i0.ɵɵelementEnd(); - i0.ɵɵelement(13, "ngx-skeleton-loader", 68); - i0.ɵɵelement(14, "ngx-skeleton-loader", 69); i0.ɵɵelementEnd(); } } -function BookingDetailsModalComponent_div_26_p_13_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "p"); - i0.ɵɵelementStart(1, "strong"); +function BookingDetailsModalComponent_div_1_div_30_div_20_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div"); + i0.ɵɵelementStart(1, "span", 75); i0.ɵɵtext(2, "Company:"); i0.ɵɵelementEnd(); i0.ɵɵtext(3); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r50 = i0.ɵɵnextContext(2); + const ctx_r48 = i0.ɵɵnextContext(3); i0.ɵɵadvance(3); - i0.ɵɵtextInterpolate1(" ", ctx_r50.companyString, ""); + i0.ɵɵtextInterpolate1(" \u00A0 ", ctx_r48.companyString, ""); } } -function BookingDetailsModalComponent_div_26_p_26_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "p"); - i0.ɵɵtext(1, "Email notification for this booking has been opt out. "); +function BookingDetailsModalComponent_div_1_div_30_div_33_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div"); + i0.ɵɵelementStart(1, "span", 75); + i0.ɵɵtext(2, "Email notification for this booking has been opt out."); + i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } } -function BookingDetailsModalComponent_div_26_div_29_Template(rf, ctx) { if (rf & 1) { - const _r54 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div"); - i0.ɵɵelementStart(1, "h2"); - i0.ɵɵelement(2, "img", 71); - i0.ɵɵtext(3, " Catering "); +function BookingDetailsModalComponent_div_1_div_30_Template(rf, ctx) { if (rf & 1) { + const _r51 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div", 72); + i0.ɵɵelementStart(1, "div", 64); + i0.ɵɵelementStart(2, "div", 65); + i0.ɵɵelementStart(3, "h2"); + i0.ɵɵtext(4, " Meeting "); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(4, "h3"); - i0.ɵɵtext(5, "Catering available for this room"); + i0.ɵɵelementStart(5, "button", 73); + i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_1_div_30_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r51); const ctx_r50 = i0.ɵɵnextContext(2); return ctx_r50.toggleUpdateView(); }); + i0.ɵɵelement(6, "img", 67); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(6, "button", 57); - i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_26_div_29_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r54); const ctx_r53 = i0.ɵɵnextContext(2); return ctx_r53.addCatering(); }); - i0.ɵɵtext(7, " Add catering "); i0.ɵɵelementEnd(); - i0.ɵɵelement(8, "catering-order-table", 72); + i0.ɵɵelementStart(7, "div", 74); + i0.ɵɵelementStart(8, "div"); + i0.ɵɵelementStart(9, "span", 75); + i0.ɵɵtext(10, "Meeting title:"); i0.ɵɵelementEnd(); -} if (rf & 2) { - const ctx_r52 = i0.ɵɵnextContext(2); - i0.ɵɵadvance(6); - i0.ɵɵproperty("disabled", ctx_r52.disableCateringButton || ctx_r52.isMultiroomBooking); - i0.ɵɵadvance(2); - i0.ɵɵproperty("booking", ctx_r52._data == null ? null : ctx_r52._data.booking); -} } -function BookingDetailsModalComponent_div_26_Template(rf, ctx) { if (rf & 1) { - const _r56 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div", 16); - i0.ɵɵelementStart(1, "div"); - i0.ɵɵelementStart(2, "h2"); - i0.ɵɵelement(3, "img", 70); - i0.ɵɵtext(4, " Booking Details "); + i0.ɵɵtext(11); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(5, "p"); - i0.ɵɵelementStart(6, "strong"); - i0.ɵɵtext(7, "Host:"); + i0.ɵɵelementStart(12, "div"); + i0.ɵɵelementStart(13, "span", 75); + i0.ɵɵtext(14, "Host:"); i0.ɵɵelementEnd(); - i0.ɵɵtext(8); + i0.ɵɵtext(15); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(9, "p"); - i0.ɵɵelementStart(10, "strong"); - i0.ɵɵtext(11, "Attendees:"); + i0.ɵɵelementStart(16, "div"); + i0.ɵɵelementStart(17, "span", 75); + i0.ɵɵtext(18, "Attendees:"); i0.ɵɵelementEnd(); - i0.ɵɵtext(12); + i0.ɵɵtext(19); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(13, BookingDetailsModalComponent_div_26_p_13_Template, 4, 1, "p", 9); - i0.ɵɵelementStart(14, "p"); - i0.ɵɵelementStart(15, "strong"); - i0.ɵɵtext(16, "Charge code:"); + i0.ɵɵtemplate(20, BookingDetailsModalComponent_div_1_div_30_div_20_Template, 4, 1, "div", 1); + i0.ɵɵelementStart(21, "div"); + i0.ɵɵelementStart(22, "span", 75); + i0.ɵɵtext(23, "Charge code:"); i0.ɵɵelementEnd(); - i0.ɵɵtext(17); + i0.ɵɵtext(24); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(18, "p"); - i0.ɵɵelementStart(19, "strong"); - i0.ɵɵtext(20, "Headcount estimate:"); + i0.ɵɵelementStart(25, "div"); + i0.ɵɵelementStart(26, "span", 75); + i0.ɵɵtext(27, "Headcount estimate:"); i0.ɵɵelementEnd(); - i0.ɵɵtext(21); + i0.ɵɵtext(28); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(22, "p"); - i0.ɵɵelementStart(23, "strong"); - i0.ɵɵtext(24, "Additional requirements:"); + i0.ɵɵelementStart(29, "div"); + i0.ɵɵelementStart(30, "span", 75); + i0.ɵɵtext(31, "Additional requirements:"); i0.ɵɵelementEnd(); - i0.ɵɵtext(25); + i0.ɵɵtext(32); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(26, BookingDetailsModalComponent_div_26_p_26_Template, 2, 0, "p", 9); - i0.ɵɵelementStart(27, "button", 57); - i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_26_Template_button_click_27_listener() { i0.ɵɵrestoreView(_r56); const ctx_r55 = i0.ɵɵnextContext(); return ctx_r55.toggleUpdateView(); }); - i0.ɵɵtext(28, " Update details "); + i0.ɵɵtemplate(33, BookingDetailsModalComponent_div_1_div_30_div_33_Template, 3, 0, "div", 1); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(29, BookingDetailsModalComponent_div_26_div_29_Template, 9, 2, "div", 9); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r15 = i0.ɵɵnextContext(); - i0.ɵɵadvance(8); - i0.ɵɵtextInterpolate1(" ", ctx_r15.host, ""); + const ctx_r17 = i0.ɵɵnextContext(2); + i0.ɵɵadvance(5); + i0.ɵɵproperty("disabled", ctx_r17.disableUpdateDetailsButton || ctx_r17.isMultiroomBooking); + i0.ɵɵadvance(6); + i0.ɵɵtextInterpolate1(" \u00A0 ", ctx_r17.title, ""); i0.ɵɵadvance(4); - i0.ɵɵtextInterpolate1(" ", ctx_r15.attendeesString, ""); + i0.ɵɵtextInterpolate1(" \u00A0 ", ctx_r17.host, ""); + i0.ɵɵadvance(4); + i0.ɵɵtextInterpolate1(" \u00A0 ", ctx_r17.attendeesString, " "); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx_r15.companyString); + i0.ɵɵproperty("ngIf", ctx_r17.companyString); i0.ɵɵadvance(4); - i0.ɵɵtextInterpolate1(" ", ctx_r15.chargeCode, ""); + i0.ɵɵtextInterpolate1(" \u00A0 ", ctx_r17.chargeCode, ""); i0.ɵɵadvance(4); - i0.ɵɵtextInterpolate1(" ", ctx_r15.headcount, ""); + i0.ɵɵtextInterpolate1(" \u00A0 ", ctx_r17.headcount, ""); i0.ɵɵadvance(4); - i0.ɵɵtextInterpolate1(" ", ctx_r15.requirements, ""); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx_r15.opt_out); + i0.ɵɵtextInterpolate1(" \u00A0 ", ctx_r17.requirements, ""); i0.ɵɵadvance(1); - i0.ɵɵproperty("disabled", ctx_r15.disableUpdateDetailsButton || ctx_r15.isMultiroomBooking); - i0.ɵɵadvance(2); - i0.ɵɵproperty("ngIf", ctx_r15.roomHasCatering); + i0.ɵɵproperty("ngIf", ctx_r17.opt_out); } } -function BookingDetailsModalComponent_div_27_div_10_Template(rf, ctx) { if (rf & 1) { +function BookingDetailsModalComponent_div_1_div_31_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div"); - i0.ɵɵelementStart(1, "h2"); - i0.ɵɵelement(2, "ngx-skeleton-loader", 69); + i0.ɵɵelementStart(1, "div"); + i0.ɵɵelementStart(2, "h2"); + i0.ɵɵelement(3, "ngx-skeleton-loader", 76); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(3, "h3"); - i0.ɵɵelement(4, "ngx-skeleton-loader", 63); + i0.ɵɵelement(4, "ngx-skeleton-loader", 77); + i0.ɵɵelement(5, "ngx-skeleton-loader", 70); + i0.ɵɵelement(6, "ngx-skeleton-loader", 71); + i0.ɵɵelement(7, "ngx-skeleton-loader", 78); + i0.ɵɵelement(8, "ngx-skeleton-loader", 77); + i0.ɵɵelement(9, "ngx-skeleton-loader", 71); i0.ɵɵelementEnd(); - i0.ɵɵelement(5, "ngx-skeleton-loader", 65); i0.ɵɵelementEnd(); } } -function BookingDetailsModalComponent_div_27_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 16); +function BookingDetailsModalComponent_div_1_div_33_div_2_Template(rf, ctx) { if (rf & 1) { + const _r54 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div"); + i0.ɵɵelementStart(1, "input", 81); + i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_1_div_33_div_2_Template_input_click_1_listener() { i0.ɵɵrestoreView(_r54); const ctx_r53 = i0.ɵɵnextContext(3); return ctx_r53.expandLocation(); }); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} } +function BookingDetailsModalComponent_div_1_div_33_Template(rf, ctx) { if (rf & 1) { + const _r56 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div", 79); i0.ɵɵelementStart(1, "div"); + i0.ɵɵtemplate(2, BookingDetailsModalComponent_div_1_div_33_div_2_Template, 2, 0, "div", 1); + i0.ɵɵelementStart(3, "room-location-preview", 80); + i0.ɵɵlistener("handleExpand", function BookingDetailsModalComponent_div_1_div_33_Template_room_location_preview_handleExpand_3_listener() { i0.ɵɵrestoreView(_r56); const ctx_r55 = i0.ɵɵnextContext(2); return ctx_r55.handleClose(false); }); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r19 = i0.ɵɵnextContext(2); + i0.ɵɵadvance(2); + i0.ɵɵproperty("ngIf", !ctx_r19.expandedLocation); + i0.ɵɵadvance(1); + i0.ɵɵproperty("mapUrl", ctx_r19.mapUrl)("focus", ctx_r19.focusedRoom)("expanded", ctx_r19.expandedLocation)("building", ctx_r19._data.booking.room.building)("level", ctx_r19._data.booking.room.level)("space", ctx_r19._data.booking.room)("mode", ctx_r19.TopBarHeaderMode.Light); +} } +function BookingDetailsModalComponent_div_1_div_34_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div"); + i0.ɵɵelement(1, "ngx-skeleton-loader", 82); + i0.ɵɵelement(2, "ngx-skeleton-loader", 83); + i0.ɵɵelementStart(3, "p"); + i0.ɵɵelement(4, "ngx-skeleton-loader", 84); + i0.ɵɵelement(5, "ngx-skeleton-loader", 71); + i0.ɵɵelement(6, "ngx-skeleton-loader", 71); + i0.ɵɵelementEnd(); + i0.ɵɵelement(7, "ngx-skeleton-loader", 85); + i0.ɵɵelement(8, "ngx-skeleton-loader", 76); + i0.ɵɵelementEnd(); +} } +function BookingDetailsModalComponent_div_1_div_35_div_1_Template(rf, ctx) { if (rf & 1) { + const _r60 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div"); + i0.ɵɵelementStart(1, "div", 65); i0.ɵɵelementStart(2, "h2"); - i0.ɵɵelement(3, "ngx-skeleton-loader", 69); + i0.ɵɵtext(3, " Catering "); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(4, "button", 73); + i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_1_div_35_div_1_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r60); const ctx_r59 = i0.ɵɵnextContext(3); return ctx_r59.addCatering(); }); + i0.ɵɵelement(5, "img", 67); i0.ɵɵelementEnd(); - i0.ɵɵelement(4, "ngx-skeleton-loader", 73); - i0.ɵɵelement(5, "ngx-skeleton-loader", 64); - i0.ɵɵelement(6, "ngx-skeleton-loader", 65); - i0.ɵɵelement(7, "ngx-skeleton-loader", 74); - i0.ɵɵelement(8, "ngx-skeleton-loader", 73); - i0.ɵɵelement(9, "ngx-skeleton-loader", 65); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(10, BookingDetailsModalComponent_div_27_div_10_Template, 6, 0, "div", 9); + i0.ɵɵelementStart(6, "span"); + i0.ɵɵtext(7, "Catering available for this room"); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(8, "div", 87); + i0.ɵɵelement(9, "catering-order-table", 88); + i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r16 = i0.ɵɵnextContext(); - i0.ɵɵadvance(10); - i0.ɵɵproperty("ngIf", ctx_r16.roomHasCatering); + const ctx_r57 = i0.ɵɵnextContext(3); + i0.ɵɵadvance(4); + i0.ɵɵproperty("disabled", ctx_r57.disableCateringButton || ctx_r57.isMultiroomBooking); + i0.ɵɵadvance(5); + i0.ɵɵproperty("booking", ctx_r57._data == null ? null : ctx_r57._data.booking); } } -function BookingDetailsModalComponent_div_28_mck_modal_button_row_2_Template(rf, ctx) { if (rf & 1) { - const _r61 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "mck-modal-button-row", 78); - i0.ɵɵlistener("primarySubmit", function BookingDetailsModalComponent_div_28_mck_modal_button_row_2_Template_mck_modal_button_row_primarySubmit_0_listener() { i0.ɵɵrestoreView(_r61); const ctx_r60 = i0.ɵɵnextContext(2); return ctx_r60.close(); }); +function BookingDetailsModalComponent_div_1_div_35_div_2_div_1_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div"); + i0.ɵɵelementStart(1, "h2"); + i0.ɵɵelement(2, "ngx-skeleton-loader", 76); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(3, "h3"); + i0.ɵɵelement(4, "ngx-skeleton-loader", 69); + i0.ɵɵelementEnd(); + i0.ɵɵelement(5, "ngx-skeleton-loader", 71); i0.ɵɵelementEnd(); } } -function BookingDetailsModalComponent_div_28_ngx_skeleton_loader_3_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelement(0, "ngx-skeleton-loader", 55); +function BookingDetailsModalComponent_div_1_div_35_div_2_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div"); + i0.ɵɵtemplate(1, BookingDetailsModalComponent_div_1_div_35_div_2_div_1_Template, 6, 0, "div", 1); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r58 = i0.ɵɵnextContext(3); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", !ctx_r58.roomHasCatering); } } -function BookingDetailsModalComponent_div_28_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 75); +function BookingDetailsModalComponent_div_1_div_35_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 86); + i0.ɵɵtemplate(1, BookingDetailsModalComponent_div_1_div_35_div_1_Template, 10, 2, "div", 1); + i0.ɵɵtemplate(2, BookingDetailsModalComponent_div_1_div_35_div_2_Template, 2, 1, "div", 1); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r21 = i0.ɵɵnextContext(2); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", !ctx_r21.loading); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r21.loading); +} } +function BookingDetailsModalComponent_div_1_div_36_mck_modal_button_row_2_Template(rf, ctx) { if (rf & 1) { + const _r65 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "mck-modal-button-row", 92); + i0.ɵɵlistener("primarySubmit", function BookingDetailsModalComponent_div_1_div_36_mck_modal_button_row_2_Template_mck_modal_button_row_primarySubmit_0_listener() { i0.ɵɵrestoreView(_r65); const ctx_r64 = i0.ɵɵnextContext(3); return ctx_r64.close(); }); + i0.ɵɵelementEnd(); +} } +function BookingDetailsModalComponent_div_1_div_36_ngx_skeleton_loader_3_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelement(0, "ngx-skeleton-loader", 82); +} } +function BookingDetailsModalComponent_div_1_div_36_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 89); i0.ɵɵelementStart(1, "mat-dialog-actions"); - i0.ɵɵtemplate(2, BookingDetailsModalComponent_div_28_mck_modal_button_row_2_Template, 1, 0, "mck-modal-button-row", 76); - i0.ɵɵtemplate(3, BookingDetailsModalComponent_div_28_ngx_skeleton_loader_3_Template, 1, 0, "ngx-skeleton-loader", 77); + i0.ɵɵtemplate(2, BookingDetailsModalComponent_div_1_div_36_mck_modal_button_row_2_Template, 1, 0, "mck-modal-button-row", 90); + i0.ɵɵtemplate(3, BookingDetailsModalComponent_div_1_div_36_ngx_skeleton_loader_3_Template, 1, 0, "ngx-skeleton-loader", 91); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r17 = i0.ɵɵnextContext(); + const ctx_r22 = i0.ɵɵnextContext(2); i0.ɵɵadvance(2); - i0.ɵɵproperty("ngIf", !ctx_r17.loading); + i0.ɵɵproperty("ngIf", !ctx_r22.loading); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx_r17.loading); + i0.ɵɵproperty("ngIf", ctx_r22.loading); } } -function BookingDetailsModalComponent_room_availability_preview_29_Template(rf, ctx) { if (rf & 1) { - const _r63 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "room-availability-preview", 79); - i0.ɵɵlistener("handleExpand", function BookingDetailsModalComponent_room_availability_preview_29_Template_room_availability_preview_handleExpand_0_listener() { i0.ɵɵrestoreView(_r63); const ctx_r62 = i0.ɵɵnextContext(); return ctx_r62.handleClose(true); })("updateCalendarWeekView", function BookingDetailsModalComponent_room_availability_preview_29_Template_room_availability_preview_updateCalendarWeekView_0_listener($event) { i0.ɵɵrestoreView(_r63); const ctx_r64 = i0.ɵɵnextContext(); return ctx_r64.updateCalendarWeekView($event); })("confirmChanges", function BookingDetailsModalComponent_room_availability_preview_29_Template_room_availability_preview_confirmChanges_0_listener($event) { i0.ɵɵrestoreView(_r63); const ctx_r65 = i0.ɵɵnextContext(); return ctx_r65.confirmChanges($event); }); +function BookingDetailsModalComponent_div_1_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div"); + i0.ɵɵtemplate(1, BookingDetailsModalComponent_div_1_div_1_Template, 2, 0, "div", 2); + i0.ɵɵtemplate(2, BookingDetailsModalComponent_div_1_div_2_Template, 5, 0, "div", 3); + i0.ɵɵtemplate(3, BookingDetailsModalComponent_div_1_div_3_Template, 5, 1, "div", 4); + i0.ɵɵelementStart(4, "mck-modal", 5); + i0.ɵɵelementStart(5, "div", 6); + i0.ɵɵtemplate(6, BookingDetailsModalComponent_div_1_div_6_Template, 17, 9, "div", 7); + i0.ɵɵtemplate(7, BookingDetailsModalComponent_div_1_div_7_Template, 7, 4, "div", 8); + i0.ɵɵtemplate(8, BookingDetailsModalComponent_div_1_div_8_Template, 5, 0, "div", 9); + i0.ɵɵtemplate(9, BookingDetailsModalComponent_div_1_div_9_Template, 3, 0, "div", 1); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(10, "div", 10); + i0.ɵɵelementStart(11, "div", 11); + i0.ɵɵelementStart(12, "div", 12); + i0.ɵɵelementStart(13, "div", 13); + i0.ɵɵtext(14); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(15, "div", 14); + i0.ɵɵtext(16); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(17, "div", 14); + i0.ɵɵtext(18); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(19, "div", 15); + i0.ɵɵelementStart(20, "div"); + i0.ɵɵtemplate(21, BookingDetailsModalComponent_div_1_a_21_Template, 2, 1, "a", 16); + i0.ɵɵtemplate(22, BookingDetailsModalComponent_div_1_ngx_skeleton_loader_22_Template, 1, 0, "ngx-skeleton-loader", 17); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(23, "div"); + i0.ɵɵtemplate(24, BookingDetailsModalComponent_div_1_button_24_Template, 2, 1, "button", 18); + i0.ɵɵtemplate(25, BookingDetailsModalComponent_div_1_ngx_skeleton_loader_25_Template, 1, 0, "ngx-skeleton-loader", 17); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(26, "div", 19); + i0.ɵɵelementStart(27, "div", 20); + i0.ɵɵtemplate(28, BookingDetailsModalComponent_div_1_div_28_Template, 15, 7, "div", 21); + i0.ɵɵtemplate(29, BookingDetailsModalComponent_div_1_div_29_Template, 7, 0, "div", 21); + i0.ɵɵtemplate(30, BookingDetailsModalComponent_div_1_div_30_Template, 34, 9, "div", 22); + i0.ɵɵtemplate(31, BookingDetailsModalComponent_div_1_div_31_Template, 10, 0, "div", 1); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(32, "div", 20); + i0.ɵɵtemplate(33, BookingDetailsModalComponent_div_1_div_33_Template, 4, 8, "div", 23); + i0.ɵɵtemplate(34, BookingDetailsModalComponent_div_1_div_34_Template, 9, 0, "div", 1); + i0.ɵɵtemplate(35, BookingDetailsModalComponent_div_1_div_35_Template, 3, 2, "div", 24); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵtemplate(36, BookingDetailsModalComponent_div_1_div_36_Template, 4, 2, "div", 25); + i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r18 = i0.ɵɵnextContext(); - i0.ɵɵproperty("dateTz", ctx_r18._data == null ? null : ctx_r18._data.booking == null ? null : ctx_r18._data.booking.startDateTz)("alternativeWeekStartDateTz", ctx_r18.alternativeWeekStartDateTz)("duration", ctx_r18._data == null ? null : ctx_r18._data.booking == null ? null : ctx_r18._data.booking.duration)("currentBooking", ctx_r18._data.booking)("bookings", ctx_r18.byIdResults.value)("bookingId", ctx_r18._data == null ? null : ctx_r18._data.booking == null ? null : ctx_r18._data.booking.id)("building", ctx_r18._data.booking.room.building)("level", ctx_r18._data == null ? null : ctx_r18._data.booking == null ? null : ctx_r18._data.booking.space == null ? null : ctx_r18._data.booking.space.level)("space", ctx_r18._data == null ? null : ctx_r18._data.booking == null ? null : ctx_r18._data.booking.space)("expanded", ctx_r18.expandedAvailability)("currentUser", ctx_r18.currentUser); + const ctx_r0 = i0.ɵɵnextContext(); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r0._data.hasLoaderUrl); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r0.showInfoBanner); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r0.showWarningBanner); + i0.ɵɵadvance(3); + i0.ɵɵproperty("ngIf", ctx_r0.isRecurrentBooking && !ctx_r0.disableCancelButton); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", !ctx_r0.loading); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r0.isMultiroomBooking); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r0.loading); + i0.ɵɵadvance(5); + i0.ɵɵtextInterpolate1(" ", ctx_r0.roomName, " "); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate1(" ", ctx_r0.roomLocation, " "); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate1(" Capacity: ", ctx_r0.capacity, " "); + i0.ɵɵadvance(3); + i0.ɵɵproperty("ngIf", !ctx_r0.loading); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r0.loading); + i0.ɵɵadvance(2); + i0.ɵɵproperty("ngIf", !ctx_r0.loading && !ctx_r0.disableCancelButton); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r0.loading); + i0.ɵɵadvance(3); + i0.ɵɵproperty("ngIf", !ctx_r0.loading); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r0.loading); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", !ctx_r0.loading); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r0.loading); + i0.ɵɵadvance(2); + i0.ɵɵproperty("ngIf", !ctx_r0.loading); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r0.loading); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r0.roomHasCatering); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", !ctx_r0.expandedAvailability); } } -function BookingDetailsModalComponent_div_30_app_booking_edit_1_Template(rf, ctx) { if (rf & 1) { +function BookingDetailsModalComponent_div_2_app_booking_edit_3_Template(rf, ctx) { if (rf & 1) { const _r69 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "app-booking-edit", 81); - i0.ɵɵlistener("closeCallback", function BookingDetailsModalComponent_div_30_app_booking_edit_1_Template_app_booking_edit_closeCallback_0_listener($event) { i0.ɵɵrestoreView(_r69); const ctx_r68 = i0.ɵɵnextContext(2); return ctx_r68.toggleUpdateView($event); })("updateCallback", function BookingDetailsModalComponent_div_30_app_booking_edit_1_Template_app_booking_edit_updateCallback_0_listener($event) { i0.ɵɵrestoreView(_r69); const ctx_r70 = i0.ɵɵnextContext(2); return ctx_r70.updateBookingState($event); }); + i0.ɵɵelementStart(0, "app-booking-edit", 94); + i0.ɵɵlistener("closeCallback", function BookingDetailsModalComponent_div_2_app_booking_edit_3_Template_app_booking_edit_closeCallback_0_listener($event) { i0.ɵɵrestoreView(_r69); const ctx_r68 = i0.ɵɵnextContext(2); return ctx_r68.toggleUpdateView($event); })("updateCallback", function BookingDetailsModalComponent_div_2_app_booking_edit_3_Template_app_booking_edit_updateCallback_0_listener($event) { i0.ɵɵrestoreView(_r69); const ctx_r70 = i0.ɵɵnextContext(2); return ctx_r70.updateBookingState($event); }); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r66 = i0.ɵɵnextContext(2); - i0.ɵɵproperty("booking", ctx_r66._data == null ? null : ctx_r66._data.booking); + i0.ɵɵproperty("booking", ctx_r66._data == null ? null : ctx_r66._data.booking)("placeIntoModal", true); } } -function BookingDetailsModalComponent_div_30_ngx_skeleton_loader_2_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelement(0, "ngx-skeleton-loader", 49); +function BookingDetailsModalComponent_div_2_ngx_skeleton_loader_4_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelement(0, "ngx-skeleton-loader", 55); } } -function BookingDetailsModalComponent_div_30_Template(rf, ctx) { if (rf & 1) { +function BookingDetailsModalComponent_div_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div"); - i0.ɵɵtemplate(1, BookingDetailsModalComponent_div_30_app_booking_edit_1_Template, 1, 1, "app-booking-edit", 80); - i0.ɵɵtemplate(2, BookingDetailsModalComponent_div_30_ngx_skeleton_loader_2_Template, 1, 0, "ngx-skeleton-loader", 13); + i0.ɵɵelementStart(1, "mck-modal"); + i0.ɵɵelementStart(2, "div"); + i0.ɵɵtemplate(3, BookingDetailsModalComponent_div_2_app_booking_edit_3_Template, 1, 2, "app-booking-edit", 93); + i0.ɵɵtemplate(4, BookingDetailsModalComponent_div_2_ngx_skeleton_loader_4_Template, 1, 0, "ngx-skeleton-loader", 17); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r19 = i0.ɵɵnextContext(); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", !ctx_r19.loading); + const ctx_r1 = i0.ɵɵnextContext(); + i0.ɵɵadvance(3); + i0.ɵɵproperty("ngIf", !ctx_r1.loading); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx_r19.loading); + i0.ɵɵproperty("ngIf", ctx_r1.loading); } } -function BookingDetailsModalComponent_div_31_Template(rf, ctx) { if (rf & 1) { +function BookingDetailsModalComponent_div_3_Template(rf, ctx) { if (rf & 1) { const _r72 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "div"); - i0.ɵɵelementStart(1, "booking-catering", 82); - i0.ɵɵlistener("event", function BookingDetailsModalComponent_div_31_Template_booking_catering_event_1_listener($event) { i0.ɵɵrestoreView(_r72); const ctx_r71 = i0.ɵɵnextContext(); return ctx_r71.saveBookingWithCatering($event); })("showCatering", function BookingDetailsModalComponent_div_31_Template_booking_catering_showCatering_1_listener() { i0.ɵɵrestoreView(_r72); const ctx_r73 = i0.ɵɵnextContext(); return ctx_r73.addCatering(); }); + i0.ɵɵelementStart(1, "room-availability-preview", 95); + i0.ɵɵlistener("handleExpand", function BookingDetailsModalComponent_div_3_Template_room_availability_preview_handleExpand_1_listener() { i0.ɵɵrestoreView(_r72); const ctx_r71 = i0.ɵɵnextContext(); return ctx_r71.handleClose(true); })("updateCalendarWeekView", function BookingDetailsModalComponent_div_3_Template_room_availability_preview_updateCalendarWeekView_1_listener($event) { i0.ɵɵrestoreView(_r72); const ctx_r73 = i0.ɵɵnextContext(); return ctx_r73.updateCalendarWeekView($event); })("confirmChanges", function BookingDetailsModalComponent_div_3_Template_room_availability_preview_confirmChanges_1_listener($event) { i0.ɵɵrestoreView(_r72); const ctx_r74 = i0.ɵɵnextContext(); return ctx_r74.confirmChanges($event); }); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r20 = i0.ɵɵnextContext(); + const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵadvance(1); - i0.ɵɵproperty("form", ctx_r20.form)("isOccurence", true)("booking", ctx_r20._data == null ? null : ctx_r20._data.booking); + i0.ɵɵproperty("dateTz", ctx_r2._data == null ? null : ctx_r2._data.booking == null ? null : ctx_r2._data.booking.startDateTz)("alternativeWeekStartDateTz", ctx_r2.alternativeWeekStartDateTz)("duration", ctx_r2._data == null ? null : ctx_r2._data.booking == null ? null : ctx_r2._data.booking.duration)("currentBooking", ctx_r2._data.booking)("bookings", ctx_r2.byIdResults.value)("bookingId", ctx_r2._data == null ? null : ctx_r2._data.booking == null ? null : ctx_r2._data.booking.id)("building", ctx_r2._data.booking.room.building)("level", ctx_r2._data == null ? null : ctx_r2._data.booking == null ? null : ctx_r2._data.booking.space == null ? null : ctx_r2._data.booking.space.level)("space", ctx_r2._data == null ? null : ctx_r2._data.booking == null ? null : ctx_r2._data.booking.space)("expanded", ctx_r2.expandedAvailability)("currentUser", ctx_r2.currentUser)("placeIntoModal", true); +} } +function BookingDetailsModalComponent_div_4_Template(rf, ctx) { if (rf & 1) { + const _r76 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div"); + i0.ɵɵelementStart(1, "mck-modal"); + i0.ɵɵelementStart(2, "div"); + i0.ɵɵelementStart(3, "booking-catering", 96); + i0.ɵɵlistener("event", function BookingDetailsModalComponent_div_4_Template_booking_catering_event_3_listener($event) { i0.ɵɵrestoreView(_r76); const ctx_r75 = i0.ɵɵnextContext(); return ctx_r75.saveBookingWithCatering($event); })("showCatering", function BookingDetailsModalComponent_div_4_Template_booking_catering_showCatering_3_listener() { i0.ɵɵrestoreView(_r76); const ctx_r77 = i0.ɵɵnextContext(); return ctx_r77.addCatering(); }); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r3 = i0.ɵɵnextContext(); + i0.ɵɵadvance(3); + i0.ɵɵproperty("form", ctx_r3.form)("isOccurence", true)("booking", ctx_r3._data == null ? null : ctx_r3._data.booking)("placeIntoModal", true); } } const EMPTY_ARRAY = []; class BookingDetailsModalComponent extends base_1.BaseDirective { @@ -31902,6 +32552,7 @@ class BookingDetailsModalComponent extends base_1.BaseDirective { !this.showDetails && this.dispatchToGetFloorCurrentStatus(this._data.booking); })); } + // public get isCateringAdded() get disableCateringButton() { var _a; switch (this.status) { @@ -32438,414 +33089,28 @@ class BookingDetailsModalComponent extends base_1.BaseDirective { } exports.BookingDetailsModalComponent = BookingDetailsModalComponent; BookingDetailsModalComponent.ɵfac = function BookingDetailsModalComponent_Factory(t) { return new (t || BookingDetailsModalComponent)(i0.ɵɵdirectiveInject(i1.Router), i0.ɵɵdirectiveInject(i1.ActivatedRoute), i0.ɵɵdirectiveInject(dialog_2.MAT_DIALOG_DATA), i0.ɵɵdirectiveInject(i2.MatDialogRef), i0.ɵɵdirectiveInject(i3.Store), i0.ɵɵdirectiveInject(i4.BookingsService), i0.ɵɵdirectiveInject(i4.ApplicationService), i0.ɵɵdirectiveInject(i4.SpacesService), i0.ɵɵdirectiveInject(i2.MatDialog)); }; -BookingDetailsModalComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BookingDetailsModalComponent, selectors: [["app-booking-details-modal"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 32, vars: 25, consts: [[1, "booking-details"], ["class", "modal_mask", 4, "ngIf"], ["class", "fixed info banner", 4, "ngIf"], ["class", "fixed warning banner", 4, "ngIf"], ["header", ""], [1, "header"], ["class", "reccuring-banner", 4, "ngIf"], ["class", "status", 3, "ngClass", 4, "ngIf"], ["class", "blue-banner", 4, "ngIf"], [4, "ngIf"], [1, "detail-body"], [1, "status-cta-block"], ["type", "button", "mat-stroked-button", "", "class", "mck-secondary-button mck-modal-secondary-button", "target", "email", 3, "href", 4, "ngIf"], ["class", "mck-skeleton-load-more-100p", 4, "ngIf"], ["mat-stroked-button", "", "class", "mck-secondary-button mck-modal-secondary-button", 3, "disabled", "click", 4, "ngIf"], [1, "v-panels"], [1, "v-panel"], ["class", "v-panel", 4, "ngIf"], ["class", "booking-details-modal-actions", 4, "ngIf"], [3, "dateTz", "alternativeWeekStartDateTz", "duration", "currentBooking", "bookings", "bookingId", "building", "level", "space", "expanded", "currentUser", "handleExpand", "updateCalendarWeekView", "confirmChanges", 4, "ngIf"], [1, "modal_mask"], [1, "fixed", "info", "banner"], ["src", "assets/icon/info-bg-blue.svg"], [1, "banner-text"], ["src", "assets/icon/close-blue.svg", 3, "click"], [1, "fixed", "warning", "banner"], ["src", "assets/icon/booking_cancelled.svg"], ["src", "assets/icon/close-red.svg", 3, "click"], [1, "reccuring-banner"], [1, "flex-column", "status-info"], [1, "flex-row", "status-head"], [3, "src"], [1, "recurring-status"], [1, "flex-row"], ["src", "assets/icon/recurring-data-icon.svg", 1, "recurring-info-icon"], [1, "banner-info-txt", 3, "ngSwitch"], [3, "ngSwitchCase"], ["ngSwitchDefault", ""], [1, "flex-column"], ["mat-stroked-button", "", "class", "mck-secondary-button mck-modal-secondary-button edit-recrring-cta", 3, "disabled", "click", 4, "ngIf"], ["mat-stroked-button", "", "class", "mck-secondary-button mck-modal-secondary-button", 3, "click", 4, "ngIf"], [1, "spcific-date-toggle", 3, "click"], ["class", "hint", 4, "ngIf"], [1, "hint"], [1, "triangle"], [1, "hint-wrapper"], [4, "ngFor", "ngForOf"], ["mat-stroked-button", "", 1, "mck-secondary-button", "mck-modal-secondary-button", "edit-recrring-cta", 3, "disabled", "click"], ["mat-stroked-button", "", 1, "mck-secondary-button", "mck-modal-secondary-button", 3, "click"], [1, "mck-skeleton-load-more-100p"], [1, "status", 3, "ngClass"], [1, "flex-row", "flex-space-between"], [1, "blue-banner"], ["src", "assets/icon/info-icon.svg"], [1, "mck-skeleton-header"], [1, "mck-skeleton-load-more"], ["type", "button", "mat-stroked-button", "", "target", "email", 1, "mck-secondary-button", "mck-modal-secondary-button", 3, "href"], ["mat-stroked-button", "", 1, "mck-secondary-button", "mck-modal-secondary-button", 3, "disabled", "click"], ["src", "assets/icon/location-pin.svg"], ["mat-stroked-button", "", 1, "mck-secondary-button", "mck-modal-secondary-button", "cancel-button", 3, "disabled", "click"], [1, "room-map"], ["viewMode", "booking_preview", 3, "mapUrl", "focus", "expanded", "building", "level", "space", "mode", "handleExpand"], ["type", "image", "src", "assets/icon/expand-button.svg", 1, "zoom", 3, "click"], [1, "mck-skeleton-line-70p-thick"], [1, "mck-skeleton-line-70p-thin"], [1, "mck-skeleton-line-50p-thin"], [1, "mck-skeleton-line-80p-thin"], [1, "mck-skeleton-line-30p-thin"], [1, "mck-skeleton-room-availability"], [1, "mck-skeleton-line-50p-thick"], ["src", "assets/icon/details-note.svg"], ["src", "assets/icon/catering.svg"], [3, "booking"], [1, "mck-skeleton-line-45p-thin"], [1, "mck-skeleton-line-60p-thin"], [1, "booking-details-modal-actions"], ["primaryLabel", "Close", 3, "primarySubmit", 4, "ngIf"], ["class", "mck-skeleton-load-more", 4, "ngIf"], ["primaryLabel", "Close", 3, "primarySubmit"], [3, "dateTz", "alternativeWeekStartDateTz", "duration", "currentBooking", "bookings", "bookingId", "building", "level", "space", "expanded", "currentUser", "handleExpand", "updateCalendarWeekView", "confirmChanges"], [3, "booking", "closeCallback", "updateCallback", 4, "ngIf"], [3, "booking", "closeCallback", "updateCallback"], [3, "form", "isOccurence", "booking", "event", "showCatering"]], template: function BookingDetailsModalComponent_Template(rf, ctx) { if (rf & 1) { +BookingDetailsModalComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BookingDetailsModalComponent, selectors: [["app-booking-details-modal"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 5, vars: 4, consts: [[1, "booking-details"], [4, "ngIf"], ["class", "modal_mask", 4, "ngIf"], ["class", "fixed info banner", 4, "ngIf"], ["class", "fixed warning banner", 4, "ngIf"], ["header", ""], [1, "header"], ["class", "reccuring-banner", 4, "ngIf"], ["class", "status", 3, "ngClass", 4, "ngIf"], ["class", "blue-banner", 4, "ngIf"], [1, "detail-body", "flex-column"], [1, "flex-row", "room-cta-block"], [1, "flex-column", "room-address"], [1, "name"], [1, "address-details"], [1, "flex-row", "cta-block"], ["type", "button", "mat-stroked-button", "", "class", "mck-secondary-button mck-modal-secondary-button", "target", "email", 3, "href", 4, "ngIf"], ["class", "mck-skeleton-load-more-100p", 4, "ngIf"], ["mat-stroked-button", "", "class", "mck-secondary-button mck-modal-secondary-button", 3, "disabled", "click", 4, "ngIf"], [1, "v-panels"], [1, "v-panel"], ["class", "schedule", 4, "ngIf"], ["class", "meeting-box", 4, "ngIf"], ["class", "room-map", 4, "ngIf"], ["class", "room-has-catering", 4, "ngIf"], ["class", "booking-details-modal-actions", 4, "ngIf"], [1, "modal_mask"], [1, "fixed", "info", "banner"], ["src", "assets/icon/info-bg-blue.svg"], [1, "banner-text"], ["src", "assets/icon/close-blue.svg", 3, "click"], [1, "fixed", "warning", "banner"], ["src", "assets/icon/booking_cancelled.svg"], ["src", "assets/icon/close-red.svg", 3, "click"], [1, "reccuring-banner"], [1, "flex-column", "status-info"], [1, "flex-row", "status-head"], [3, "src"], [1, "recurring-status"], [1, "flex-row"], ["src", "assets/icon/recurring-data-icon.svg", 1, "recurring-info-icon"], [1, "banner-info-txt", 3, "ngSwitch"], [3, "ngSwitchCase"], ["ngSwitchDefault", ""], [1, "flex-column"], ["mat-stroked-button", "", "class", "mck-secondary-button mck-modal-secondary-button edit-recrring-cta", 3, "disabled", "click", 4, "ngIf"], ["mat-stroked-button", "", "class", "mck-secondary-button mck-modal-secondary-button", 3, "click", 4, "ngIf"], [1, "spcific-date-toggle", 3, "click"], ["class", "hint", 4, "ngIf"], [1, "hint"], [1, "triangle"], [1, "hint-wrapper"], [4, "ngFor", "ngForOf"], ["mat-stroked-button", "", 1, "mck-secondary-button", "mck-modal-secondary-button", "edit-recrring-cta", 3, "disabled", "click"], ["mat-stroked-button", "", 1, "mck-secondary-button", "mck-modal-secondary-button", 3, "click"], [1, "mck-skeleton-load-more-100p"], [1, "status", 3, "ngClass"], [1, "flex-row", "flex-space-between"], [1, "blue-banner"], ["src", "assets/icon/info-icon.svg"], [1, "mck-skeleton-header"], ["type", "button", "mat-stroked-button", "", "target", "email", 1, "mck-secondary-button", "mck-modal-secondary-button", 3, "href"], ["mat-stroked-button", "", 1, "mck-secondary-button", "mck-modal-secondary-button", 3, "disabled", "click"], [1, "schedule"], [1, "flex-column", "box"], [1, "flex-row", "height-58"], ["mat-stroked-button", "", 1, "mck-secondary-button", "mck-modal-secondary-button", "cancel-button", 3, "disabled", "click"], ["src", "assets/icon/pen-01-MB-view-details.svg"], ["mat-stroked-button", "", 1, "mck-secondary-button", "mck-modal-secondary-button", "cancel-button", "cta", 3, "disabled", "click"], [1, "mck-skeleton-line-70p-thick"], [1, "mck-skeleton-line-70p-thin"], [1, "mck-skeleton-line-50p-thin"], [1, "meeting-box"], ["mat-stroked-button", "", 1, "mck-secondary-button", "mck-modal-secondary-button", "flex-row-end", 3, "disabled", "click"], [1, "flex-column", "content"], [1, "mv-label"], [1, "mck-skeleton-line-50p-thick"], [1, "mck-skeleton-line-45p-thin"], [1, "mck-skeleton-line-60p-thin"], [1, "room-map"], ["viewMode", "booking_preview", 3, "mapUrl", "focus", "expanded", "building", "level", "space", "mode", "handleExpand"], ["type", "image", "src", "assets/icon/expand-button.svg", 1, "zoom", 3, "click"], [1, "mck-skeleton-load-more"], [1, "mck-skeleton-line-80p-thin"], [1, "mck-skeleton-line-30p-thin"], [1, "mck-skeleton-room-availability"], [1, "room-has-catering"], [1, "catering-table"], [3, "booking"], [1, "booking-details-modal-actions"], ["primaryLabel", "Close", 3, "primarySubmit", 4, "ngIf"], ["class", "mck-skeleton-load-more", 4, "ngIf"], ["primaryLabel", "Close", 3, "primarySubmit"], [3, "booking", "placeIntoModal", "closeCallback", "updateCallback", 4, "ngIf"], [3, "booking", "placeIntoModal", "closeCallback", "updateCallback"], [3, "dateTz", "alternativeWeekStartDateTz", "duration", "currentBooking", "bookings", "bookingId", "building", "level", "space", "expanded", "currentUser", "placeIntoModal", "handleExpand", "updateCalendarWeekView", "confirmChanges"], [3, "form", "isOccurence", "booking", "placeIntoModal", "event", "showCatering"]], template: function BookingDetailsModalComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 0); - i0.ɵɵtemplate(1, BookingDetailsModalComponent_div_1_Template, 2, 0, "div", 1); - i0.ɵɵtemplate(2, BookingDetailsModalComponent_div_2_Template, 5, 0, "div", 2); - i0.ɵɵtemplate(3, BookingDetailsModalComponent_div_3_Template, 5, 1, "div", 3); - i0.ɵɵelementStart(4, "mck-modal", 4); - i0.ɵɵelementStart(5, "div", 5); - i0.ɵɵtemplate(6, BookingDetailsModalComponent_div_6_Template, 17, 9, "div", 6); - i0.ɵɵtemplate(7, BookingDetailsModalComponent_div_7_Template, 7, 4, "div", 7); - i0.ɵɵtemplate(8, BookingDetailsModalComponent_div_8_Template, 5, 0, "div", 8); - i0.ɵɵtemplate(9, BookingDetailsModalComponent_div_9_Template, 3, 0, "div", 9); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(10, "div", 10); - i0.ɵɵelementStart(11, "div", 11); - i0.ɵɵelementStart(12, "div"); - i0.ɵɵtemplate(13, BookingDetailsModalComponent_h1_13_Template, 2, 1, "h1", 9); - i0.ɵɵtemplate(14, BookingDetailsModalComponent_h1_14_Template, 2, 0, "h1", 9); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(15, "div"); - i0.ɵɵelementStart(16, "div"); - i0.ɵɵtemplate(17, BookingDetailsModalComponent_a_17_Template, 2, 1, "a", 12); - i0.ɵɵtemplate(18, BookingDetailsModalComponent_ngx_skeleton_loader_18_Template, 1, 0, "ngx-skeleton-loader", 13); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(19, "div"); - i0.ɵɵtemplate(20, BookingDetailsModalComponent_button_20_Template, 2, 1, "button", 14); - i0.ɵɵtemplate(21, BookingDetailsModalComponent_ngx_skeleton_loader_21_Template, 1, 0, "ngx-skeleton-loader", 13); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(22, "div", 15); - i0.ɵɵelementStart(23, "div", 16); - i0.ɵɵtemplate(24, BookingDetailsModalComponent_div_24_Template, 23, 19, "div", 9); - i0.ɵɵtemplate(25, BookingDetailsModalComponent_div_25_Template, 15, 0, "div", 9); + i0.ɵɵtemplate(1, BookingDetailsModalComponent_div_1_Template, 37, 22, "div", 1); + i0.ɵɵtemplate(2, BookingDetailsModalComponent_div_2_Template, 5, 2, "div", 1); + i0.ɵɵtemplate(3, BookingDetailsModalComponent_div_3_Template, 2, 12, "div", 1); + i0.ɵɵtemplate(4, BookingDetailsModalComponent_div_4_Template, 4, 4, "div", 1); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(26, BookingDetailsModalComponent_div_26_Template, 30, 9, "div", 17); - i0.ɵɵtemplate(27, BookingDetailsModalComponent_div_27_Template, 11, 1, "div", 17); - i0.ɵɵelementEnd(); - i0.ɵɵtemplate(28, BookingDetailsModalComponent_div_28_Template, 4, 2, "div", 18); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵtemplate(29, BookingDetailsModalComponent_room_availability_preview_29_Template, 1, 11, "room-availability-preview", 19); - i0.ɵɵtemplate(30, BookingDetailsModalComponent_div_30_Template, 3, 2, "div", 9); - i0.ɵɵtemplate(31, BookingDetailsModalComponent_div_31_Template, 2, 3, "div", 9); } if (rf & 2) { i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx._data.hasLoaderUrl); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.showInfoBanner); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.showWarningBanner); - i0.ɵɵadvance(2); - i0.ɵɵclassProp("is-recurring-body", ctx.isRecurrentBooking && !ctx.disableCancelButton); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.isRecurrentBooking && !ctx.disableCancelButton); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", !ctx.loading); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.isMultiroomBooking); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.loading); - i0.ɵɵadvance(1); - i0.ɵɵclassProp("is-recurring-body", ctx.isRecurrentBooking && !ctx.disableCancelButton); - i0.ɵɵadvance(3); - i0.ɵɵproperty("ngIf", !ctx.loading); + i0.ɵɵproperty("ngIf", !ctx.showDetails && !ctx.expandedAvailability && !ctx.showCatering); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.loading); - i0.ɵɵadvance(3); - i0.ɵɵproperty("ngIf", !ctx.loading); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.loading); - i0.ɵɵadvance(2); - i0.ɵɵproperty("ngIf", !ctx.loading && !ctx.disableCancelButton); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.loading); - i0.ɵɵadvance(3); - i0.ɵɵproperty("ngIf", !ctx.loading); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.loading); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", !ctx.loading); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.loading); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", !ctx.expandedAvailability); + i0.ɵɵproperty("ngIf", ctx.showDetails); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.expandedAvailability); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.showDetails); - i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.showCatering); - } }, directives: [i5.NgIf, i6.ModalComponent, i5.NgSwitch, i5.NgSwitchCase, i5.NgSwitchDefault, i5.NgForOf, i7.MatButton, i8.NgxSkeletonLoaderComponent, i5.NgClass, i7.MatAnchor, i9.RoomLocationPreviewComponent, i10.OrderTableComponent, i2.MatDialogActions, i11.ModalButtonRowComponent, i12.RoomAvailabilityPreviewComponent, i13.BookingEditComponent, i14.BookingCateringComponent], styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n[_nghost-%COMP%] .mat-dialog-content {\n background-color: #F8F9FA;\n overflow-y: auto;\n}\n.booking-details[_ngcontent-%COMP%] {\n position: relative;\n top: 0;\n left: 0;\n}\n.booking-details[_ngcontent-%COMP%] mck-modal[_ngcontent-%COMP%] {\n max-width: 1024px !important;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n width: 100%;\n background-color: white;\n padding: 0px 56px 20px 56px;\n border-bottom: 1px solid #E6E6E6;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n padding: 0px 0 0 0;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n padding: 0px 0 0 0;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n padding: 0px 0 0 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n padding: 0px 0 0 0;\n }\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] {\n width: 100%;\n height: 56px;\n padding: 16px 25px 16px 25px;\n justify-content: flex-start;\n font-size: 16px;\n font-weight: 500;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 24px;\n margin-right: 14px;\n vertical-align: middle;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n min-height: 125px;\n padding: 15px 25px;\n color: #000000;\n flex-direction: row;\n box-sizing: border-box;\n display: flex;\n place-content: center flex-start;\n align-items: flex-start;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] {\n flex-direction: column;\n box-sizing: border-box;\n display: flex;\n place-content: stretch flex-start;\n align-items: stretch;\n max-width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] {\n flex-direction: column;\n box-sizing: border-box;\n display: flex;\n place-content: stretch flex-start;\n align-items: stretch;\n max-width: 100%;\n }\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 24px;\n margin-right: 14px;\n vertical-align: middle;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] {\n margin-right: 100px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] {\n margin-right: 0px;\n margin-bottom: 15px;\n }\n .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .recurring-info-icon[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] {\n margin-right: 0px;\n margin-bottom: 15px;\n }\n .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .recurring-info-icon[_ngcontent-%COMP%] {\n display: none;\n }\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-head[_ngcontent-%COMP%] {\n margin-bottom: 15px;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-head[_ngcontent-%COMP%] .recurring-status[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 500;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-head[_ngcontent-%COMP%] {\n min-height: 35px;\n align-items: start;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-head[_ngcontent-%COMP%] {\n min-height: 35px;\n align-items: start;\n }\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .edit-recrring-cta[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] {\n position: relative;\n font-size: 18px;\n font-weight: 400;\n line-height: 22px;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .spcific-date-toggle[_ngcontent-%COMP%] {\n text-decoration: underline;\n cursor: pointer;\n font-weight: 500;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n width: 140px;\n background-color: black;\n color: white;\n position: absolute;\n padding: 10px;\n top: 28px;\n z-index: 2;\n font-size: calc(1em - 2px);\n font-weight: 400;\n right: 0;\n box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.2);\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n width: 100%;\n position: relative;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n width: 100%;\n position: relative;\n }\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] .triangle[_ngcontent-%COMP%] {\n position: absolute;\n top: -6px;\n left: 64px;\n width: 12px;\n height: 12px;\n background-color: black;\n transform: rotate(45deg);\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint-wrapper[_ngcontent-%COMP%] {\n max-height: 106px;\n overflow: hidden;\n overflow-y: scroll;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint-wrapper[_ngcontent-%COMP%] div[_ngcontent-%COMP%] {\n padding: 0.2em 0;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint-wrapper[_ngcontent-%COMP%] div[_ngcontent-%COMP%]:first-child {\n padding-bottom: 0;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint-wrapper[_ngcontent-%COMP%] div[_ngcontent-%COMP%]:last-child {\n padding-bottom: 0;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .blue-banner[_ngcontent-%COMP%] {\n background: #E6ECFF;\n padding: 16px;\n display: flex;\n font-weight: 500;\n align-items: flex-start;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .blue-banner[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 24px;\n margin-right: 14px;\n vertical-align: middle;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .blue-banner[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: #1E32E6;\n font-size: 16px;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] {\n background-color: transparent;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 801px) and (max-width: 1024px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] {\n margin: 0;\n height: calc(100vh + 56px);\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1049px) and (max-width: 1280px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] {\n margin: 0;\n height: calc(100vh + 56px);\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] {\n margin: 0;\n height: calc(100vh - 181px);\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] {\n margin: 0;\n height: calc(100vh - 181px);\n }\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n border-bottom: 1px solid #E6E6E6;\n padding: 16px 55px;\n background: white;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] {\n padding: 16px 16px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] {\n padding: 16px 16px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] {\n padding: 16px 16px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] {\n padding: 16px 16px;\n }\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n color: #222222;\n font-family: \"Bower\";\n font-size: 24px;\n margin: 10px 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n text-align: center;\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n text-align: center;\n width: 100%;\n }\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background-color: white;\n flex: 1;\n display: flex;\n flex-wrap: wrap;\n min-width: 300px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n min-width: 100%;\n }\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n min-width: calc(100% - 32px);\n padding-left: 0 !important;\n margin-left: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n min-width: 100%;\n }\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n min-width: calc(100% - 32px);\n padding-left: 0 !important;\n margin-left: 0;\n }\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n margin: 0;\n padding-left: 20px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding: 5px 0;\n margin: 0;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding: 5px 0;\n margin: 0;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding: 5px 0;\n margin: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding: 5px 0;\n margin: 0;\n }\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2) button[_ngcontent-%COMP%] {\n color: #E12E40;\n border: 1px solid #E12E40;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%], .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] a[_ngcontent-%COMP%] {\n flex: 1;\n width: 202px;\n min-width: 202px;\n color: #2251FF;\n border: 1px solid #2251FF;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%], .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] a[disabled][_ngcontent-%COMP%] {\n color: #757575;\n background: #D0D0D0;\n border: 1px solid #D0D0D0;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] > span[_ngcontent-%COMP%], .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] a[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%], .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] a[_ngcontent-%COMP%] {\n min-width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%], .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] a[_ngcontent-%COMP%] {\n min-width: 100%;\n }\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n margin: 16px 55px;\n min-width: 300px;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n width: 202px;\n color: #2251FF;\n border: 1px solid #2251FF;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n min-width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n min-width: 100%;\n }\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%] {\n color: #757575;\n background: #D0D0D0;\n border: 1px solid #D0D0D0;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .requirements[_ngcontent-%COMP%] {\n color: #2251FF;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(1) {\n margin: 16px 10px 0 10px;\n }\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(2) {\n margin: 16px 10px;\n }\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(1) {\n margin: 16px 10px 0 10px;\n }\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(2) {\n margin: 16px 10px;\n }\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] {\n min-width: calc(100% - 32px);\n }\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(1) {\n margin: 16px 10px 0 10px;\n }\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(2) {\n margin: 16px 10px;\n }\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n margin-bottom: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] {\n min-width: calc(100% - 32px);\n }\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(1) {\n margin: 16px 10px 0 10px;\n }\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(2) {\n margin: 16px 10px;\n }\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n margin-bottom: 0;\n }\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background-color: white;\n padding: 20px;\n padding-bottom: 26px;\n border: 1px solid #E6E6E6;\n flex: 1;\n margin-bottom: 20px;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-size: 18px;\n line-height: 28px;\n margin: 14px 0px;\n font-weight: 400;\n color: #333;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] p[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 10px;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 10px;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 500;\n margin-bottom: 0;\n color: #000;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n height: 32px;\n vertical-align: middle;\n margin: 0 4px 4px 0;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 500;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .room-map[_ngcontent-%COMP%] {\n position: relative;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .room-map[_ngcontent-%COMP%] .zoom[_ngcontent-%COMP%] {\n position: absolute;\n right: 20px;\n top: 20px;\n z-index: 1;\n}\n.booking-details-modal-actions[_ngcontent-%COMP%] {\n left: 0;\n bottom: 0;\n width: 100%;\n background-color: white;\n border-top: 1px solid #E6E6E6;\n position: relative;\n max-height: 121px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details-modal-actions[_ngcontent-%COMP%] {\n height: 16px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details-modal-actions[_ngcontent-%COMP%] {\n height: 16px;\n }\n}\n.booking-details-modal-actions[_ngcontent-%COMP%] .mat-dialog-actions[_ngcontent-%COMP%] {\n max-width: 220px;\n margin: 0 auto;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details-modal-actions[_ngcontent-%COMP%] .mat-dialog-actions[_ngcontent-%COMP%] {\n padding: 5px 0;\n height: 20px;\n max-height: 20px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details-modal-actions[_ngcontent-%COMP%] .mat-dialog-actions[_ngcontent-%COMP%] {\n padding: 5px 0;\n height: 20px;\n max-height: 20px;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWRldGFpbHMtbW9kYWwvYm9va2luZy1kZXRhaWxzLW1vZGFsLmNvbXBvbmVudC5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy91aS9zcmMvbGliL21peGlucy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvYXBwcy9zdGFmZi9zcmMvYXBwL2Jvb2tpbmcvYm9va2luZy1kZXRhaWxzLW1vZGFsL2Jvb2tpbmctZGV0YWlscy1tb2RhbC5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNoVVE7RUFDSSx5QkFBQTtFQUNBLGdCQUFBO0FGZVo7QUVUQTtFQUNJLGtCQUFBO0VBQ0EsTUFBQTtFQUNBLE9BQUE7QUZZSjtBRVhJO0VBQ0ksNEJBQUE7QUZhUjtBRVhJO0VBS0ksV0FBQTtFQUVBLHVCQUFBO0VBQ0EsMkJBQUE7RUFDQSxnQ0FBQTtBRlFSO0FDbEJRO0VDQ0o7SUFXUSxrQkFBQTtFRlVWO0FBQ0Y7QUN2QlE7RUNDSjtJQVdRLGtCQUFBO0VGZVY7QUFDRjtBQ3JDWTtFQ1VSO0lBZVEsa0JBQUE7RUZnQlY7QUFDRjtBQzFDWTtFQ1VSO0lBZVEsa0JBQUE7RUZxQlY7QUFDRjtBRWRRO0VBQ0ksV0FBQTtFQUNBLFlBQUE7RUFDQSw0QkFBQTtFQUNBLDJCQUFBO0VBQ0EsZUFBQTtFQUNBLGdCQUFBO0FGZ0JaO0FFZGdCO0VBQ0ksV0FBQTtF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Q0EsV0FBQTtBRjZIcEI7QUU1SG9CO0VBQ0ksZ0JBQUE7QUY4SHhCO0FFM0hnQjtFQUNJLGtCQUFBO0FGNkhwQjtBRTNIZ0I7RUFDSSxpQkFBQTtBRjZIcEI7QUUzSGdCO0VBQ0ksZUFBQTtFQUNBLGdCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxXQUFBO0FGNkhwQjtBRTVIb0I7RUFDSSxZQUFBO0VBQ0Esc0JBQUE7RUFDQSxtQkFBQTtBRjhIeEI7QUUzSGdCO0VBQ0ksZUFBQTtFQUNBLGdCQUFBO0FGNkhwQjtBRTNIZ0I7RUFDSSxrQkFBQTtBRjZIcEI7QUU1SG9CO0VBQ0ksa0JBQUE7RUFDQSxXQUFBO0VBQ0EsU0FBQTtFQUNBLFVBQUE7QUY4SHhCO0FFdEhBO0VBRUksT0FBQTtFQUNBLFNBQUE7RUFDQSxXQUFBO0VBQ0EsdUJBQUE7RUFDQSw2QkFBQTtFQUVBLGtCQUFBO0VBQ0EsaUJBQUE7QUZ1SEo7QUMzaEJZO0VDMlpaO0lBWU8sWUFBQTtFRndITDtBQUNGO0FDaGlCWTtFQzJaWjtJQVlPLFlBQUE7RUY2SEw7QUFDRjtBRTVISTtFQUNJLGdCQUFBO0VBQ0EsY0FBQTtBRjhIUjtBQ3ppQlk7RUN5YVI7SUFJUSxjQUFBO0lBQ0EsWUFBQTtJQUNBLGdCQUFBO0VGZ0lWO0FBQ0Y7QUNoakJZO0VDeWFSO0lBSVEsY0FBQTtJQUNBLFlBQUE7SUFDQSxnQkFBQTtFRnVJVjtBQUNGIiwiZmlsZSI6ImFwcHMvc3RhZmYvc3JjL2FwcC9ib29raW5nL2Jvb2tpbmctZGV0YWlscy1tb2RhbC9ib29raW5nLWRldGFpbHMtbW9kYWwuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIkcHJpbWFyeTogIzFGNDBFNjtcbiRmb3JtLWxhYmVsOiAjMDUxQzJDO1xuJHNlY29uZGFyeS1sYWJlbDogIzc2NzY3NjtcbiRib3JkZXI6ICNCM0IzQjM7XG4kYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDogI0QwRDBEMDtcbiRjaGlwLWNvbG9yOiAjMzMzMzMzO1xuJHBsYWNlaG9sZGVyLWNvbG9yOiAjN0Y3RjdGO1xuJGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4kcGFnZS1iYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuJHNlbGVjdGVkLW9wdGlvbjogI0U2RTZFNjtcbiRjb2xvci1icmFuZC15ZWxsb3c6ICNmZmQwNDg7XG4kbGlnaHQteWVsbG93OiAjZmZmM2NlO1xuJGNvYWNobWFyay10ZXh0OiAjNmY0ZDAwO1xuJGVycm9yLWNvbG9yOiAjRTEyRTQwO1xuJG5vLWZpbHRlcnMtY29sb3I6ICNCQ0JDQkM7XG4kcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I6ICNGNEY0RjQ7XG4kcHJpbWFyeS1oaWdobGlnaHQ6ICMyMjUxRkY7XG4kc2Nyb2xsYmFyLWNvbG9yOiAjNzU3NTc1O1xuXG4kYXZhaWxhYmxlLWNvbG9yOiAjNUQ5RDUyO1xuJGF2YWlsYWJsZS1ieS1yZXF1ZXN0LWNvbG9yOiAjRjVCNTNGO1xuJGluLXVzZS1jb2xvcjogI0Q0NDgzRTtcbiRub3QtYm9va2FibGUtY29sb3I6ICNDQ0NDQ0M7XG5cbiRtb2RhbC1ib2R5LWhlYWRpbmc6ICM0RDRENEQ7XG4kYWxlcnQtb3ZlcmxheS1iZzogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2FjaG1hcmstYmc6ICNFQkVCRjY7XG4kY29hY2htYXJrLWRhcmstdGV4dDogIzFCMUIxOTtcbiRlcnJvci10ZXh0OiAjZmZmO1xuXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuXG4vLyA0cHhcbiRzcGFjaW5nLXNtYWxsZXN0OiAwLjI1cmVtO1xuXG4vLyA4cHhcbiRzcGFjaW5nLXh4c21hbGw6IDAuNXJlbTtcblxuLy8gMTJweFxuJHNwYWNpbmcteHNtYWxsOiAwLjc1cmVtO1xuXG4vLyAxNnB4XG4kc3BhY2luZy1zbWFsbDogMXJlbTtcblxuLy8gMjBweFxuJHNwYWNpbmctc21hbGwtbWVkaXVtOiAxLjI1cmVtO1xuXG4vLyAyNHB4XG4kc3BhY2luZy1tZWRpdW06IDEuNXJlbTtcblxuLy8gMjhweFxuJHNwYWNpbmctbWVkaXVtLWxhcmdlOiAxLjc1cmVtO1xuXG4vLyAzMnB4XG4kc3BhY2luZy1sYXJnZTogMnJlbTtcblxuLy8gNDhweFxuJHNwYWNpbmcteGxhcmdlOiAzcmVtO1xuXG4vLyA2NHB4XG4kc3BhY2luZy14eGxhcmdlOiA0cmVtO1xuXG4vLyA5NnB4XG4kc3BhY2luZy1sYXJnZXN0OiA2cmVtO1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGRldmljZS1tb2JpbGUtc2l6ZTogNDUwcHg7XG4kZGV2aWNlLXRhYmxldC1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFwdG9wLXNpemU6IDEwMjRweDtcblxuJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemU6IDgwMHB4O1xuJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemU6IDEwNDhweDtcbiRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplOiAxMjgwcHg7XG5cblxuOmV4cG9ydCB7XG4gICAgcHJpbWFyeTogJHByaW1hcnk7XG4gICAgc2Vjb25kYXJ5TGFiZWw6ICRzZWNvbmRhcnktbGFiZWw7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4kaWNvbi1zbWFsbDogMTZweDtcbiRpY29uLW1lZGl1bTogMjRweDtcbiRpY29uLWxhcmdlOiAzMnB4O1xuJGljb24teGxhcmdlOiA0OHB4O1xuIiwiLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG46aG9zdCA6Om5nLWRlZXAgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG5cbi5ib29raW5nLWRldGFpbHMge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbn1cbi5ib29raW5nLWRldGFpbHMgbWNrLW1vZGFsIHtcbiAgbWF4LXdpZHRoOiAxMDI0cHggIWltcG9ydGFudDtcbn1cbi5ib29raW5nLWRldGFpbHMgLmhlYWRlciB7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcGFkZGluZzogMHB4IDU2cHggMjBweCA1NnB4O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0U2RTZFNjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIHtcbiAgICBwYWRkaW5nOiAwcHggMCAwIDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkgYW5kIChtYXgtd2lkdGg6IDEwNDhweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIge1xuICAgIHBhZGRpbmc6IDBweCAwIDAgMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIHtcbiAgICBwYWRkaW5nOiAwcHggMCAwIDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIge1xuICAgIHBhZGRpbmc6IDBweCAwIDAgMDtcbiAgfVxufVxuLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5zdGF0dXMge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiA1NnB4O1xuICBwYWRkaW5nOiAxNnB4IDI1cHggMTZweCAyNXB4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbi5ib29raW5nLWRldGFpbHMgLmhlYWRlciAuc3RhdHVzID4gZGl2IGltZyB7XG4gIHdpZHRoOiAyNHB4O1xuICBtYXJnaW4tcmlnaHQ6IDE0cHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnN0YXR1cyA+IGRpdiBwIHtcbiAgbWFyZ2luOiAwO1xufVxuLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgbWluLWhlaWdodDogMTI1cHg7XG4gIHBhZGRpbmc6IDE1cHggMjVweDtcbiAgY29sb3I6ICMwMDAwMDA7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBsYWNlLWNvbnRlbnQ6IGNlbnRlciBmbGV4LXN0YXJ0O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWRldGFpbHMgLmhlYWRlciAucmVjY3VyaW5nLWJhbm5lciB7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgcGxhY2UtY29udGVudDogc3RyZXRjaCBmbGV4LXN0YXJ0O1xuICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWRldGFpbHMgLmhlYWRlciAucmVjY3VyaW5nLWJhbm5lciB7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgcGxhY2UtY29udGVudDogc3RyZXRjaCBmbGV4LXN0YXJ0O1xuICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgfVxufVxuLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIGltZyB7XG4gIHdpZHRoOiAyNHB4O1xuICBtYXJnaW4tcmlnaHQ6IDE0cHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1pbmZvIHtcbiAgbWFyZ2luLXJpZ2h0OiAxMDBweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWRldGFpbHMgLmhlYWRlciAucmVjY3VyaW5nLWJhbm5lciAuc3RhdHVzLWluZm8ge1xuICAgIG1hcmdpbi1yaWdodDogMHB4O1xuICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gIH1cbiAgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIC5zdGF0dXMtaW5mbyAucmVjdXJyaW5nLWluZm8taWNvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWRldGFpbHMgLmhlYWRlciAucmVjY3VyaW5nLWJhbm5lciAuc3RhdHVzLWluZm8ge1xuICAgIG1hcmdpbi1yaWdodDogMHB4O1xuICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gIH1cbiAgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIC5zdGF0dXMtaW5mbyAucmVjdXJyaW5nLWluZm8taWNvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIC5zdGF0dXMtaGVhZCB7XG4gIG1hcmdpbi1ib3R0b206IDE1cHg7XG59XG4uYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1oZWFkIC5yZWN1cnJpbmctc3RhdHVzIHtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBmb250LXdlaWdodDogNTAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIC5zdGF0dXMtaGVhZCB7XG4gICAgbWluLWhlaWdodDogMzVweDtcbiAgICBhbGlnbi1pdGVtczogc3RhcnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1oZWFkIHtcbiAgICBtaW4taGVpZ2h0OiAzNXB4O1xuICAgIGFsaWduLWl0ZW1zOiBzdGFydDtcbiAgfVxufVxuLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIC5lZGl0LXJlY3JyaW5nLWN0YSB7XG4gIG1hcmdpbi1ib3R0b206IDE2cHg7XG59XG4uYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLmJhbm5lci1pbmZvLXR4dCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBsaW5lLWhlaWdodDogMjJweDtcbn1cbi5ib29raW5nLWRldGFpbHMgLmhlYWRlciAucmVjY3VyaW5nLWJhbm5lciAuYmFubmVyLWluZm8tdHh0IC5zcGNpZmljLWRhdGUtdG9nZ2xlIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbi5ib29raW5nLWRldGFpbHMgLmhlYWRlciAucmVjY3VyaW5nLWJhbm5lciAuYmFubmVyLWluZm8tdHh0IC5oaW50IHtcbiAgd2lkdGg6IDE0MHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjaztcbiAgY29sb3I6IHdoaXRlO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHBhZGRpbmc6IDEwcHg7XG4gIHRvcDogMjhweDtcbiAgei1pbmRleDogMjtcbiAgZm9udC1zaXplOiBjYWxjKDFlbSAtIDJweCk7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIHJpZ2h0OiAwO1xuICBib3gtc2hhZG93OiAwcHggMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMik7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLmJhbm5lci1pbmZvLXR4dCAuaGludCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIC5iYW5uZXItaW5mby10eHQgLmhpbnQge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxufVxuLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIC5iYW5uZXItaW5mby10eHQgLmhpbnQgLnRyaWFuZ2xlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IC02cHg7XG4gIGxlZnQ6IDY0cHg7XG4gIHdpZHRoOiAxMnB4O1xuICBoZWlnaHQ6IDEycHg7XG4gIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xuICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG59XG4uYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLmJhbm5lci1pbmZvLXR4dCAuaGludC13cmFwcGVyIHtcbiAgbWF4LWhlaWdodDogMTA2cHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcbn1cbi5ib29raW5nLWRldGFpbHMgLmhlYWRlciAucmVjY3VyaW5nLWJhbm5lciAuYmFubmVyLWluZm8tdHh0IC5oaW50LXdyYXBwZXIgZGl2IHtcbiAgcGFkZGluZzogMC4yZW0gMDtcbn1cbi5ib29raW5nLWRldGFpbHMgLmhlYWRlciAucmVjY3VyaW5nLWJhbm5lciAuYmFubmVyLWluZm8tdHh0IC5oaW50LXdyYXBwZXIgZGl2OmZpcnN0LWNoaWxkIHtcbiAgcGFkZGluZy1ib3R0b206IDA7XG59XG4uYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLmJhbm5lci1pbmZvLXR4dCAuaGludC13cmFwcGVyIGRpdjpsYXN0LWNoaWxkIHtcbiAgcGFkZGluZy1ib3R0b206IDA7XG59XG4uYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLmJsdWUtYmFubmVyIHtcbiAgYmFja2dyb3VuZDogI0U2RUNGRjtcbiAgcGFkZGluZzogMTZweDtcbiAgZGlzcGxheTogZmxleDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG59XG4uYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLmJsdWUtYmFubmVyIGltZyB7XG4gIHdpZHRoOiAyNHB4O1xuICBtYXJnaW4tcmlnaHQ6IDE0cHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLmJsdWUtYmFubmVyID4gZGl2IHAge1xuICBtYXJnaW46IDA7XG4gIGNvbG9yOiAjMUUzMkU2O1xuICBmb250LXNpemU6IDE2cHg7XG59XG4uYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDQ4cHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkge1xuICAgIG1hcmdpbjogMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogODAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkge1xuICAgIG1hcmdpbjogMDtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwdmggKyA1NnB4KTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDEwNDlweCkgYW5kIChtYXgtd2lkdGg6IDEyODBweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSB7XG4gICAgbWFyZ2luOiAwO1xuICAgIGhlaWdodDogY2FsYygxMDB2aCArIDU2cHgpO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSB7XG4gICAgbWFyZ2luOiAwO1xuICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDE4MXB4KTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IHtcbiAgICBtYXJnaW46IDA7XG4gICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMTgxcHgpO1xuICB9XG59XG4uYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAuc3RhdHVzLWN0YS1ibG9jayB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNFNkU2RTY7XG4gIHBhZGRpbmc6IDE2cHggNTVweDtcbiAgYmFja2dyb3VuZDogd2hpdGU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5zdGF0dXMtY3RhLWJsb2NrIHtcbiAgICBwYWRkaW5nOiAxNnB4IDE2cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkgYW5kIChtYXgtd2lkdGg6IDEwNDhweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAuc3RhdHVzLWN0YS1ibG9jayB7XG4gICAgcGFkZGluZzogMTZweCAxNnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAuc3RhdHVzLWN0YS1ibG9jayB7XG4gICAgcGFkZGluZzogMTZweCAxNnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnN0YXR1cy1jdGEtYmxvY2sge1xuICAgIHBhZGRpbmc6IDE2cHggMTZweDtcbiAgfVxufVxuLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnN0YXR1cy1jdGEtYmxvY2sgaDEge1xuICBjb2xvcjogIzIyMjIyMjtcbiAgZm9udC1mYW1pbHk6IFwiQm93ZXJcIjtcbiAgZm9udC1zaXplOiAyNHB4O1xuICBtYXJnaW46IDEwcHggMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnN0YXR1cy1jdGEtYmxvY2sgaDEge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDQ4cHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnN0YXR1cy1jdGEtYmxvY2sgaDEge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAuc3RhdHVzLWN0YS1ibG9jayBoMSB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnN0YXR1cy1jdGEtYmxvY2sgaDEge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnN0YXR1cy1jdGEtYmxvY2sgPiBkaXYge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgZmxleDogMTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBtaW4td2lkdGg6IDMwMHB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnN0YXR1cy1jdGEtYmxvY2sgPiBkaXYge1xuICAgIG1pbi13aWR0aDogMTAwJTtcbiAgfVxuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAuc3RhdHVzLWN0YS1ibG9jayA+IGRpdiA+IGRpdiB7XG4gICAgbWluLXdpZHRoOiBjYWxjKDEwMCUgLSAzMnB4KTtcbiAgICBwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5zdGF0dXMtY3RhLWJsb2NrID4gZGl2IHtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gIH1cbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnN0YXR1cy1jdGEtYmxvY2sgPiBkaXYgPiBkaXYge1xuICAgIG1pbi13aWR0aDogY2FsYygxMDAlIC0gMzJweCk7XG4gICAgcGFkZGluZy1sZWZ0OiAwICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gIH1cbn1cbi5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5zdGF0dXMtY3RhLWJsb2NrID4gZGl2ID4gZGl2IHtcbiAgZmxleDogMTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5zdGF0dXMtY3RhLWJsb2NrID4gZGl2ID4gZGl2IHtcbiAgICBwYWRkaW5nOiA1cHggMDtcbiAgICBtYXJnaW46IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkgYW5kIChtYXgtd2lkdGg6IDEwNDhweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAuc3RhdHVzLWN0YS1ibG9jayA+IGRpdiA+IGRpdiB7XG4gICAgcGFkZGluZzogNXB4IDA7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAuc3RhdHVzLWN0YS1ibG9jayA+IGRpdiA+IGRpdiB7XG4gICAgcGFkZGluZzogNXB4IDA7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnN0YXR1cy1jdGEtYmxvY2sgPiBkaXYgPiBkaXYge1xuICAgIHBhZGRpbmc6IDVweCAwO1xuICAgIG1hcmdpbjogMDtcbiAgfVxufVxuLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnN0YXR1cy1jdGEtYmxvY2sgPiBkaXYgPiBkaXY6bnRoLWNoaWxkKDIpIGJ1dHRvbiB7XG4gIGNvbG9yOiAjRTEyRTQwO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTEyRTQwO1xufVxuLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnN0YXR1cy1jdGEtYmxvY2sgPiBkaXYgPiBkaXYgYnV0dG9uLCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAuc3RhdHVzLWN0YS1ibG9jayA+IGRpdiA+IGRpdiBhIHtcbiAgZmxleDogMTtcbiAgd2lkdGg6IDIwMnB4O1xuICBtaW4td2lkdGg6IDIwMnB4O1xuICBjb2xvcjogIzIyNTFGRjtcbiAgYm9yZGVyOiAxcHggc29saWQgIzIyNTFGRjtcbn1cbi5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5zdGF0dXMtY3RhLWJsb2NrID4gZGl2ID4gZGl2IGJ1dHRvbltkaXNhYmxlZF0sIC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5zdGF0dXMtY3RhLWJsb2NrID4gZGl2ID4gZGl2IGFbZGlzYWJsZWRdIHtcbiAgY29sb3I6ICM3NTc1NzU7XG4gIGJhY2tncm91bmQ6ICNEMEQwRDA7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG59XG4uYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAuc3RhdHVzLWN0YS1ibG9jayA+IGRpdiA+IGRpdiBidXR0b24gPiBzcGFuLCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAuc3RhdHVzLWN0YS1ibG9jayA+IGRpdiA+IGRpdiBhID4gc3BhbiB7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5zdGF0dXMtY3RhLWJsb2NrID4gZGl2ID4gZGl2IGJ1dHRvbiwgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnN0YXR1cy1jdGEtYmxvY2sgPiBkaXYgPiBkaXYgYSB7XG4gICAgbWluLXdpZHRoOiAxMDAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnN0YXR1cy1jdGEtYmxvY2sgPiBkaXYgPiBkaXYgYnV0dG9uLCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAuc3RhdHVzLWN0YS1ibG9jayA+IGRpdiA+IGRpdiBhIHtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gIH1cbn1cbi5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGZsZXgtd3JhcDogd3JhcDtcbn1cbi5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCB7XG4gIGZsZXg6IDE7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1hcmdpbjogMTZweCA1NXB4O1xuICBtaW4td2lkdGg6IDMwMHB4O1xufVxuLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsIGJ1dHRvbiB7XG4gIHdpZHRoOiAyMDJweDtcbiAgY29sb3I6ICMyMjUxRkY7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMyMjUxRkY7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgYnV0dG9uIHtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgYnV0dG9uIHtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gIH1cbn1cbi5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCBidXR0b25bZGlzYWJsZWRdIHtcbiAgY29sb3I6ICM3NTc1NzU7XG4gIGJhY2tncm91bmQ6ICNEMEQwRDA7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG59XG4uYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgLnJlcXVpcmVtZW50cyB7XG4gIGNvbG9yOiAjMjI1MUZGO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWw6bnRoLWNoaWxkKDEpIHtcbiAgICBtYXJnaW46IDE2cHggMTBweCAwIDEwcHg7XG4gIH1cbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsOm50aC1jaGlsZCgyKSB7XG4gICAgbWFyZ2luOiAxNnB4IDEwcHg7XG4gIH1cbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsID4gZGl2IHtcbiAgICBtYXJnaW46IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkgYW5kIChtYXgtd2lkdGg6IDEwNDhweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWw6bnRoLWNoaWxkKDEpIHtcbiAgICBtYXJnaW46IDE2cHggMTBweCAwIDEwcHg7XG4gIH1cbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsOm50aC1jaGlsZCgyKSB7XG4gICAgbWFyZ2luOiAxNnB4IDEwcHg7XG4gIH1cbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsID4gZGl2IHtcbiAgICBtYXJnaW46IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCB7XG4gICAgbWluLXdpZHRoOiBjYWxjKDEwMCUgLSAzMnB4KTtcbiAgfVxuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWw6bnRoLWNoaWxkKDEpIHtcbiAgICBtYXJnaW46IDE2cHggMTBweCAwIDEwcHg7XG4gIH1cbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsOm50aC1jaGlsZCgyKSB7XG4gICAgbWFyZ2luOiAxNnB4IDEwcHg7XG4gIH1cbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsID4gZGl2IHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsIHtcbiAgICBtaW4td2lkdGg6IGNhbGMoMTAwJSAtIDMycHgpO1xuICB9XG4gIC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbDpudGgtY2hpbGQoMSkge1xuICAgIG1hcmdpbjogMTZweCAxMHB4IDAgMTBweDtcbiAgfVxuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWw6bnRoLWNoaWxkKDIpIHtcbiAgICBtYXJnaW46IDE2cHggMTBweDtcbiAgfVxuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgPiBkaXYge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbn1cbi5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCA+IGRpdiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBwYWRkaW5nOiAyMHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMjZweDtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgZmxleDogMTtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cbi5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCBwIHtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAyOHB4O1xuICBtYXJnaW46IDE0cHggMHB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBjb2xvcjogIzMzMztcbn1cbi5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCBwIHN0cm9uZyB7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG4uYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWw6bnRoLWNoaWxkKDEpIHtcbiAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xufVxuLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsOm50aC1jaGlsZCgyKSB7XG4gIG1hcmdpbi1sZWZ0OiAxMHB4O1xufVxuLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsIGgyIHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBjb2xvcjogIzAwMDtcbn1cbi5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCBoMiBpbWcge1xuICBoZWlnaHQ6IDMycHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIG1hcmdpbjogMCA0cHggNHB4IDA7XG59XG4uYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgaDMge1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG4uYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgLnJvb20tbWFwIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsIC5yb29tLW1hcCAuem9vbSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDIwcHg7XG4gIHRvcDogMjBweDtcbiAgei1pbmRleDogMTtcbn1cblxuLmJvb2tpbmctZGV0YWlscy1tb2RhbC1hY3Rpb25zIHtcbiAgbGVmdDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjRTZFNkU2O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1heC1oZWlnaHQ6IDEyMXB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscy1tb2RhbC1hY3Rpb25zIHtcbiAgICBoZWlnaHQ6IDE2cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1kZXRhaWxzLW1vZGFsLWFjdGlvbnMge1xuICAgIGhlaWdodDogMTZweDtcbiAgfVxufVxuLmJvb2tpbmctZGV0YWlscy1tb2RhbC1hY3Rpb25zIC5tYXQtZGlhbG9nLWFjdGlvbnMge1xuICBtYXgtd2lkdGg6IDIyMHB4O1xuICBtYXJnaW46IDAgYXV0bztcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWRldGFpbHMtbW9kYWwtYWN0aW9ucyAubWF0LWRpYWxvZy1hY3Rpb25zIHtcbiAgICBwYWRkaW5nOiA1cHggMDtcbiAgICBoZWlnaHQ6IDIwcHg7XG4gICAgbWF4LWhlaWdodDogMjBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWRldGFpbHMtbW9kYWwtYWN0aW9ucyAubWF0LWRpYWxvZy1hY3Rpb25zIHtcbiAgICBwYWRkaW5nOiA1cHggMDtcbiAgICBoZWlnaHQ6IDIwcHg7XG4gICAgbWF4LWhlaWdodDogMjBweDtcbiAgfVxufSIsIkBpbXBvcnQgXCJ2YXJzXCI7XG5cbkBtaXhpbiBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRzaXplLCAkcXVhbGlmaWVyKSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAaWYgKCRxdWFsaWZpZXIgPT0gbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSBpZiAoJHF1YWxpZmllciA9PSBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWF4LXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5AbWl4aW4gYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRtaW4sICRtYXgpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkbWluKSBhbmQgKG1heC13aWR0aDogJG1heCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIHRoaXMgaXMgYSBjb3B5IG9mIHJlc3BvbmQtdG8uIHdlIGRvbid0IHdhbnQgdG8gcHJlc2VydmUgdGhhdCBtZXRob2Qgc2luY2UgdGhlIGJyZWFrcG9pbnRzIG1heSBkaXZlcmdlIGZyb20gdGhlIG9sZCBVSS5cbkBtaXhpbiBpcy1zY3JlZW4tc2l6ZSgkbWVkaWE6IGFsbCwgJG9yaWVudGF0aW9uOiBub25lKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cblxuQG1peGluIHBhZ2UtcGFkZGluZyB7XG4gICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbDtcbn1cblxuLy8gRm9udCBNaXhpbnNcbiRmb250LW1ja2luc2V5LXNhbnM6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuJGZvbnQtdGhlaW5oYXJkdDogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4kZm9udC1ib3dlcjogXCJCb3dlclwiO1xuXG5AbWl4aW4gYm93ZXItYm9sZCB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWJvd2VyO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBtY2tpbnNleS1zYW5zIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gZGlzcGxheS0xIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiA0cmVtOyAvLyA2NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4NzsgLy8gNzZweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMiB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDYwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS00IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogM3JlbTsgLy8gNDhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE2NjsgLy8gNTZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS01IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjgzMzsgLy8gMzRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjQyOyAvLyA0MHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS03IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyOHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTEge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA0OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi43NXJlbTsgLy8gNDRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDUycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTIge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTExOyAvLyA0NHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNDhweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMyB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIyMjsgLy8gNDRweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjg4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1NTsgLy8gMjhweFxuICAgIH1cbn1cblxuQG1peGluIGJvZHktZGVmYXVsdCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNnB4XG4gICAgfVxufVxuXG4vLy8gRG9lc250IGV4aXN0IGluIE1EUy5cbkBtaXhpbiBib2R5LXRpbnkge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtOyAvLyAxMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjRweFxuICAgIH1cbn1cblxuQG1peGluIGZvcm0tbGFiZWwge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LXRoZWluaGFyZHQ7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGNvbG9yOiAkcGxhY2Vob2xkZXItY29sb3I7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbn1cblxuQG1peGluIGNoaXAtbGFiZWwge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBjaGVja2JveC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGNvbG9yOiBibGFjaztcbn1cblxuLy8gYm9yZGVyc1xuXG5AbWl4aW4gbWNrLWNoZWNrYm94LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay10aGluLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXItbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBib3JkZXItY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudC1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuXG4vLyBmdW5jdGlvbnNcblxuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG5AbWl4aW4gbWF4LWxpbmVzKCRjb3VudCkge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiAkY291bnQ7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbn1cblxuLy8gaW1hZ2VzXG5AbWl4aW4gbWNrLWljb24oJHdpZHRoLCAkYXNzZXQsICRoZWlnaHQ6ICR3aWR0aCwgICRhc3NldFBhdGg6IFwibGlicy91aS9zcmMvbGliL2ljb25zXCIsKSB7XG4gICAgd2lkdGg6ICR3aWR0aDtcbiAgICBoZWlnaHQ6ICRoZWlnaHQ7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiI3skYXNzZXRQYXRofS8jeyRhc3NldH1cIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuXG5cbkBtaXhpbiBtY2stc21hbGwtaWNvbigkbW9iaWxlLWFzc2V0LCAkZGVza3RvcC1hc3NldDogJG1vYmlsZS1hc3NldCkge1xuICAgIEBpbmNsdWRlIG1jay1pY29uKDE2cHgsICRhc3NldDogJG1vYmlsZS1hc3NldCk7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICRhc3NldDogJGRlc2t0b3AtYXNzZXQpO1xuICAgIH1cbn1cblxuLy8gc2tlbGV0b25cbkBtaXhpbiBza2VsZXRvbi1iZyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWltYWdlLXNpemUge1xuICAgIHdpZHRoOiA4MXB4O1xuICAgIGhlaWdodDogODJweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDIxOXB4O1xuICAgICAgICBoZWlnaHQ6IDExOXB4O1xuICAgIH1cbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLXN0YXR1cy1zaXplIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMTE3cHg7XG4gICAgICAgIGhlaWdodDogNzhweDtcbiAgICB9XG59XG4iLCJAaW1wb3J0IFwibGlicy91aS9zcmMvbGliL21peGluc1wiO1xuXG46aG9zdCB7XG4gICAgOjpuZy1kZWVwIHtcbiAgICAgICAgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuICAgICAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG4uYm9va2luZy1kZXRhaWxzIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgbWNrLW1vZGFsIHtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDI0cHggIWltcG9ydGFudDtcbiAgICB9XG4gICAgLmhlYWRlciB7XG4gICAgICAgIC8vIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgLy8gei1pbmRleDogMjtcbiAgICAgICAgLy8gdG9wOiAwO1xuICAgICAgICAvLyBsZWZ0OiAwO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgLy8gaGVpZ2h0OiAxNzFweDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgIHBhZGRpbmc6IDBweCA1NnB4IDIwcHggNTZweDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNFNkU2RTY7XG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKHRhYmxldCkge1xuICAgICAgICAgICAgcGFkZGluZzogMHB4IDAgMCAwO1xuICAgICAgICAgICAgLy8gaGVpZ2h0OiAxMzhweDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDBweCAwIDAgMDtcbiAgICAgICAgICAgIC8vIGhlaWdodDogMTM4cHg7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAmLmlzLXJlY3VycmluZy1ib2R5IHtcbiAgICAgICAgLy8gICAgIGhlaWdodDogMjE3cHg7XG4gICAgICAgIC8vIH1cblxuICAgICAgICAuc3RhdHVzIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgaGVpZ2h0OiA1NnB4O1xuICAgICAgICAgICAgcGFkZGluZzogMTZweCAyNXB4IDE2cHggMjVweDtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICA+IGRpdiB7XG4gICAgICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDI0cHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMTRweDtcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcCB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAucmVjY3VyaW5nLWJhbm5lciB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICAgICAgICAgICAgbWluLWhlaWdodDogMTI1cHg7XG4gICAgICAgICAgICBwYWRkaW5nOiAxNXB4IDI1cHg7XG4gICAgICAgICAgICBjb2xvcjogIzAwMDAwMDtcblxuICAgICAgICAgICAgLy8gQGV4dGVuZCAuZmxleC1yb3c7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBwbGFjZS1jb250ZW50OiBjZW50ZXIgZmxleC1zdGFydDtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAvLyBAZXh0ZW5kIC5mbGV4LWNvbHVtblxuICAgICAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIHBsYWNlLWNvbnRlbnQ6IHN0cmV0Y2ggZmxleC1zdGFydDtcbiAgICAgICAgICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGltZyB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDI0cHg7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNHB4O1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAuc3RhdHVzLWluZm8ge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMTAwcHg7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMHB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xuICAgICAgICAgICAgICAgICAgICAucmVjdXJyaW5nLWluZm8taWNvbntcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAuc3RhdHVzLWhlYWQge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gICAgICAgICAgICAgICAgLnJlY3VycmluZy1zdGF0dXMge1xuICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtaW4taGVpZ2h0OiAzNXB4O1xuICAgICAgICAgICAgICAgICAgICBhbGlnbi1pdGVtczogc3RhcnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5lZGl0LXJlY3JyaW5nLWN0YSB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJhbm5lci1pbmZvLXR4dCB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuXHRcdFx0XHRcdFx0XHRcdGxpbmUtaGVpZ2h0OiAyMnB4O1xuXG5cdFx0XHRcdFx0XHRcdFx0LnNwY2lmaWMtZGF0ZS10b2dnbGUge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJzb3I6IHBvaW50ZXI7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb250LXdlaWdodDogNTAwO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuICAgICAgICAgICAgICAgIC5oaW50IHtcbiAgICAgICAgICAgICAgICAgICAgJHdpZHRoOiAxNDBweDtcbiAgICAgICAgICAgICAgICAgICAgJHRyaWFuZ2xlX3dpZHRoOiAxMnB4O1xuXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAkd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMTBweDtcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAyOHB4O1xuICAgICAgICAgICAgICAgICAgICB6LWluZGV4OiAyO1xuICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IGNhbGMoMWVtIC0gMnB4KTtcbiAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IDBweCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcblxuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC50cmlhbmdsZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3A6IC02cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiAoJHdpZHRoIC0gJHRyaWFuZ2xlX3dpZHRoKS8yO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICR0cmlhbmdsZV93aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJHRyaWFuZ2xlX3dpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAmLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF4LWhlaWdodDogMTA2cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXYge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAuMmVtIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgLmJsdWUtYmFubmVyIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNFNkVDRkY7XG4gICAgICAgICAgICBwYWRkaW5nOiAxNnB4O1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcblxuICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMjRweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDE0cHg7XG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPmRpdiB7XG4gICAgICAgICAgICAgICAgcCB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjowO1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogIzFFMzJFNjtcbiAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC5kZXRhaWwtYm9keSB7XG4gICAgICAgIC8vIHBhZGRpbmc6IDEwNHB4IDAgMTIycHggMDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgIC8vIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgICAgICAgLy8gaGVpZ2h0OiBjYWxjKDEwMHZoICsgNTZweCk7XG5cbiAgICAgICAgLy8gJi5pcy1yZWN1cnJpbmctYm9keSB7XG4gICAgICAgIC8vICAgICAvLyBwYWRkaW5nLXRvcDogMTYwcHg7XG4gICAgICAgIC8vICAgICBoZWlnaHQ6IGNhbGMoMTAwdmggKyAzMDBweCk7XG4gICAgICAgIC8vIH1cblxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZSh0YWJsZXQpIHtcbiAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgIC8vIHBhZGRpbmc6IDBweCAwIDEwNnB4IDA7XG5cbiAgICAgICAgICAgIC8vICYuaXMtcmVjdXJyaW5nLWJvZHkge1xuICAgICAgICAgICAgLy8gICAgIC8vIHBhZGRpbmctdG9wOiAxNTJweDtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShsYXB0b3ApIHtcbiAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgIC8vIHBhZGRpbmc6IDBweCAwIDEwNnB4IDA7XG4gICAgICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwdmggKyA1NnB4KTtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgIC8vIHBhZGRpbmc6IDBweCAwIDgwcHggMDtcbiAgICAgICAgICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDE4MXB4KTtcblxuICAgICAgICAgICAgLy8gJi5pcy1yZWN1cnJpbmctYm9keSB7XG4gICAgICAgICAgICAvLyAgICAgLy8gcGFkZGluZy10b3A6IDE3MHB4O1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICB9XG5cbiAgICAgICAgLnN0YXR1cy1jdGEtYmxvY2sge1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRTZFNkU2O1xuICAgICAgICAgICAgcGFkZGluZzogMTZweCA1NXB4O1xuICAgICAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZSh0YWJsZXQpIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNnB4IDE2cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNnB4IDE2cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoMSB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICMyMjIyMjI7XG4gICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LWJvd2VyO1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDEwcHggMDtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZSh0YWJsZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgID5kaXYge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICAgICAgICAgICAgbWluLXdpZHRoOiAzMDBweDtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgICAgICA+ZGl2IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbi13aWR0aDogY2FsYygxMDAlIC0gMzJweCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID5kaXYge1xuICAgICAgICAgICAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMjBweDtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUodGFibGV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiA1cHggMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDVweCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICY6bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICRlcnJvci1jb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAkZXJyb3ItY29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uLCBhIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMjAycHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDIwMnB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IzIyNTFGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMyMjUxRkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAmW2Rpc2FibGVkXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICM3NTc1NzU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI0QwRDBEMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRDBEMEQwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPnNwYW4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC52LXBhbmVscyB7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDtcblxuICAgICAgICAgICAgLnYtcGFuZWwge1xuICAgICAgICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMTZweCA1NXB4O1xuICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMzAwcHg7XG5cbiAgICAgICAgICAgICAgICBidXR0b24ge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMjAycHg7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiMyMjUxRkY7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMyMjUxRkY7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICZbZGlzYWJsZWRdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjNzU3NTc1O1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI0QwRDBEMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAucmVxdWlyZW1lbnRzIHtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IzIyNTFGRjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUodGFibGV0KSB7XG4gICAgICAgICAgICAgICAgICAgICY6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMTZweCAxMHB4IDAgMTBweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAmOm50aC1jaGlsZCgyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDE2cHggMTBweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA+ZGl2IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiBjYWxjKDEwMCUgLSAgMzJweCk7XG4gICAgICAgICAgICAgICAgICAgICY6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMTZweCAxMHB4IDAgMTBweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAmOm50aC1jaGlsZCgyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDE2cHggMTBweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA+ZGl2IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMjBweDtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDI2cHg7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gICAgICAgICAgICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHAge1xuICAgICAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMjhweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxNHB4IDBweDtcbiAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICMzMzM7XG4gICAgICAgICAgICAgICAgICAgIHN0cm9uZyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICY6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAmOm50aC1jaGlsZCgyKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoMiB7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICMwMDA7XG4gICAgICAgICAgICAgICAgICAgIGltZyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwIDRweCA0cHggMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoMyB7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLnJvb20tbWFwIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgICAgICAuem9vbSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodDogMjBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogMjBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5ib29raW5nLWRldGFpbHMtbW9kYWwtYWN0aW9ucyB7XG4gICAgLy8gcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjRTZFNkU2O1xuICAgIC8vIHotaW5kZXg6IDE7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyBcbiAgICBtYXgtaGVpZ2h0OiAxMjFweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgIGhlaWdodDogMTZweDtcbiAgICB9XG4gICAgLm1hdC1kaWFsb2ctYWN0aW9ucyB7XG4gICAgICAgIG1heC13aWR0aDogMjIwcHg7XG4gICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDVweCAwO1xuICAgICAgICAgICAgaGVpZ2h0OiAyMHB4O1xuICAgICAgICAgICAgbWF4LWhlaWdodDogMjBweDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuIl19 */"] }); + } }, directives: [i5.NgIf, i6.ModalComponent, i5.NgSwitch, i5.NgSwitchCase, i5.NgSwitchDefault, i5.NgForOf, i7.MatButton, i8.NgxSkeletonLoaderComponent, i5.NgClass, i7.MatAnchor, i9.RoomLocationPreviewComponent, i10.OrderTableComponent, i2.MatDialogActions, i11.ModalButtonRowComponent, i12.BookingEditComponent, i13.RoomAvailabilityPreviewComponent, i14.BookingCateringComponent], styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n[_nghost-%COMP%] .mat-dialog-content {\n background-color: #F8F9FA;\n overflow-y: auto;\n}\n[_nghost-%COMP%] .mv-label[_ngcontent-%COMP%] {\n color: #757575;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] {\n position: relative;\n top: 0;\n left: 0;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] mck-modal[_ngcontent-%COMP%] {\n max-width: 1024px !important;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n width: 100%;\n background-color: white;\n padding: 0px 56px 20px 56px;\n border-bottom: 1px solid #E6E6E6;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n padding: 0px 0 0 0;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n padding: 0px 0 0 0;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n padding: 0px 0 0 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n padding: 0px 0 0 0;\n }\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n min-height: 125px;\n padding: 15px 25px;\n color: #000000;\n flex-direction: row;\n box-sizing: border-box;\n display: flex;\n place-content: center flex-start;\n align-items: flex-start;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] {\n flex-direction: column;\n box-sizing: border-box;\n display: flex;\n place-content: stretch flex-start;\n align-items: stretch;\n max-width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] {\n flex-direction: column;\n box-sizing: border-box;\n display: flex;\n place-content: stretch flex-start;\n align-items: stretch;\n max-width: 100%;\n }\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 24px;\n margin-right: 14px;\n vertical-align: middle;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .edit-recrring-cta[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] {\n margin-right: 100px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] {\n margin-right: 0px;\n margin-bottom: 15px;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .recurring-info-icon[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] {\n margin-right: 0px;\n margin-bottom: 15px;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .recurring-info-icon[_ngcontent-%COMP%] {\n display: none;\n }\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .status-head[_ngcontent-%COMP%] {\n margin-bottom: 15px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .status-head[_ngcontent-%COMP%] .recurring-status[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 500;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .status-head[_ngcontent-%COMP%] {\n margin-bottom: 0px;\n min-height: 35px;\n align-items: start;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .status-head[_ngcontent-%COMP%] {\n margin-bottom: 0px;\n min-height: 35px;\n align-items: start;\n }\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] {\n position: relative;\n font-size: 18px;\n font-weight: 400;\n line-height: 22px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .spcific-date-toggle[_ngcontent-%COMP%] {\n text-decoration: underline;\n cursor: pointer;\n font-weight: 500;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n width: 140px;\n background-color: black;\n color: white;\n position: absolute;\n padding: 10px;\n top: 28px;\n z-index: 2;\n font-size: calc(1em - 2px);\n font-weight: 400;\n right: 0;\n box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.2);\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n width: 100%;\n position: relative;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n width: 100%;\n position: relative;\n }\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] .triangle[_ngcontent-%COMP%] {\n position: absolute;\n top: -6px;\n left: 64px;\n width: 12px;\n height: 12px;\n background-color: black;\n transform: rotate(45deg);\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint-wrapper[_ngcontent-%COMP%] {\n max-height: 106px;\n overflow: hidden;\n overflow-y: scroll;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint-wrapper[_ngcontent-%COMP%] div[_ngcontent-%COMP%] {\n padding: 0.2em 0;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint-wrapper[_ngcontent-%COMP%] div[_ngcontent-%COMP%]:first-child {\n padding-bottom: 0;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint-wrapper[_ngcontent-%COMP%] div[_ngcontent-%COMP%]:last-child {\n padding-bottom: 0;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] {\n width: 100%;\n height: 56px;\n padding: 16px 25px 16px 25px;\n justify-content: flex-start;\n font-size: 16px;\n font-weight: 500;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 24px;\n margin-right: 14px;\n vertical-align: middle;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] {\n font-size: 14px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] {\n font-size: 14px;\n }\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .blue-banner[_ngcontent-%COMP%] {\n background: #E6ECFF;\n padding: 16px;\n display: flex;\n font-weight: 500;\n align-items: center;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .blue-banner[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 24px;\n margin-right: 14px;\n vertical-align: middle;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .blue-banner[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: #1E32E6;\n font-size: 16px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] {\n background-color: transparent;\n \n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 801px) and (max-width: 1024px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] {\n margin: 0;\n max-height: calc(100vh + 56px);\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1049px) and (max-width: 1280px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] {\n margin: 0;\n max-height: calc(100vh + 56px);\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] {\n padding: 0px 55px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] .cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 21px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] .cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2) button[_ngcontent-%COMP%] {\n color: #E12E40;\n border: 1px solid #E12E40;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] .cta-block[_ngcontent-%COMP%] button[_ngcontent-%COMP%], [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] .cta-block[_ngcontent-%COMP%] a[_ngcontent-%COMP%] {\n flex: 1;\n width: 202px;\n min-width: 202px;\n color: #2251FF;\n border: 1px solid #2251FF;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] .cta-block[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%], [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] .cta-block[_ngcontent-%COMP%] a[disabled][_ngcontent-%COMP%] {\n color: #757575;\n background: #D0D0D0;\n border: 1px solid #D0D0D0;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] .cta-block[_ngcontent-%COMP%] button[_ngcontent-%COMP%] > span[_ngcontent-%COMP%], [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] .cta-block[_ngcontent-%COMP%] a[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] .cta-block[_ngcontent-%COMP%] button[_ngcontent-%COMP%], [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] .cta-block[_ngcontent-%COMP%] a[_ngcontent-%COMP%] {\n width: 185px;\n min-width: 185px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] .cta-block[_ngcontent-%COMP%] button[_ngcontent-%COMP%], [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] .cta-block[_ngcontent-%COMP%] a[_ngcontent-%COMP%] {\n width: 185px;\n min-width: 185px;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] .cta-block[_ngcontent-%COMP%] {\n place-content: stretch flex-end;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] .cta-block[_ngcontent-%COMP%] {\n place-content: stretch flex-end;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] {\n padding: 0px 10px;\n height: 100%;\n flex-direction: column;\n box-sizing: border-box;\n display: flex;\n place-content: stretch flex-start;\n align-items: stretch;\n max-width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] {\n padding: 0px 10px;\n height: 100%;\n flex-direction: column;\n box-sizing: border-box;\n display: flex;\n place-content: stretch flex-start;\n align-items: stretch;\n max-width: 100%;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] {\n padding: 0px 10px;\n height: 100%;\n flex-direction: column;\n box-sizing: border-box;\n display: flex;\n place-content: stretch flex-start;\n align-items: stretch;\n max-width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] {\n padding: 0px 10px;\n height: 100%;\n flex-direction: column;\n box-sizing: border-box;\n display: flex;\n place-content: stretch flex-start;\n align-items: stretch;\n max-width: 100%;\n }\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-address[_ngcontent-%COMP%] {\n max-height: 110px;\n padding: 0px 20px;\n flex: 1 1 auto;\n margin-bottom: 20px;\n margin-top: 16px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-address[_ngcontent-%COMP%] .name[_ngcontent-%COMP%] {\n font-weight: 700;\n font-size: 42px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-address[_ngcontent-%COMP%] .address-details[_ngcontent-%COMP%] {\n font-size: 18px;\n line-height: 18px;\n padding-top: 4px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-address[_ngcontent-%COMP%] {\n padding: unset;\n margin-left: 15px;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-address[_ngcontent-%COMP%] .name[_ngcontent-%COMP%] {\n font-weight: 500;\n font-size: 28px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-address[_ngcontent-%COMP%] {\n padding: unset;\n margin-left: 15px;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-address[_ngcontent-%COMP%] .name[_ngcontent-%COMP%] {\n font-weight: 500;\n font-size: 28px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-address[_ngcontent-%COMP%] {\n padding: unset;\n margin-left: 15px;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-address[_ngcontent-%COMP%] .name[_ngcontent-%COMP%] {\n font-weight: 500;\n font-size: 28px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-address[_ngcontent-%COMP%] {\n padding: unset;\n margin-left: 15px;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-address[_ngcontent-%COMP%] .name[_ngcontent-%COMP%] {\n font-weight: 500;\n font-size: 28px;\n }\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n margin-bottom: 50px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n margin: 16px 55px;\n min-width: 300px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .schedule[_ngcontent-%COMP%] {\n height: 100px;\n max-height: 270px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .box[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin-bottom: 14px !important;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .box[_ngcontent-%COMP%] .content[_ngcontent-%COMP%] {\n font-size: 18px;\n line-height: 28px;\n margin: 1px 0px;\n font-weight: 400;\n color: #333;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .box[_ngcontent-%COMP%] .content[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .height-58[_ngcontent-%COMP%] {\n height: 58px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .height-58[_ngcontent-%COMP%] > h2[_ngcontent-%COMP%]:first-of-type {\n flex: 1 1 auto;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n color: #2251FF;\n display: flex;\n border: none;\n border-radius: 50%;\n width: 53px;\n height: 52px;\n padding: unset;\n min-width: unset;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] button.cta[_ngcontent-%COMP%] {\n border-radius: inherit;\n width: 202px;\n color: #2251FF;\n border: 1px solid #2251FF;\n height: 48px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] button.cta[disabled][_ngcontent-%COMP%] {\n background: #D0D0D0;\n border: 1px solid #D0D0D0;\n opacity: 1;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] button[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 24px;\n vertical-align: middle;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%] {\n color: #757575;\n opacity: 0.5;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .meeting-box[_ngcontent-%COMP%] {\n max-height: 300px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .meeting-box[_ngcontent-%COMP%] .content[_ngcontent-%COMP%] {\n max-height: 180px;\n overflow-y: auto;\n margin-top: 15px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .room-map[_ngcontent-%COMP%] {\n position: relative;\n height: 271px;\n flex: none;\n padding: inherit;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .room-map[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n position: relative;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .room-map[_ngcontent-%COMP%] .zoom[_ngcontent-%COMP%] {\n position: absolute;\n right: 20px;\n top: 20px;\n z-index: 1;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .room-has-catering[_ngcontent-%COMP%] {\n flex: none;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .room-has-catering[_ngcontent-%COMP%] .catering-table[_ngcontent-%COMP%] {\n max-height: 258px;\n overflow-y: auto;\n margin-top: 14px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .room-has-catering[_ngcontent-%COMP%] .catering-table[_ngcontent-%COMP%] {\n max-height: none;\n overflow-y: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .room-has-catering[_ngcontent-%COMP%] .catering-table[_ngcontent-%COMP%] {\n max-height: none;\n overflow-y: none;\n }\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .requirements[_ngcontent-%COMP%] {\n color: #2251FF;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(1) {\n margin: 16px 10px 0 10px;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(2) {\n margin: 16px 10px;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(1) {\n margin: 16px 10px 0 10px;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(2) {\n margin: 16px 10px;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] {\n min-width: calc(100% - 32px);\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(1) {\n margin: 16px 10px 0 10px;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(2) {\n margin: 16px 10px;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n margin-bottom: 0;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .meeting-box[_ngcontent-%COMP%] {\n max-height: none;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .meeting-box[_ngcontent-%COMP%] .content[_ngcontent-%COMP%] {\n max-height: none;\n overflow-y: none;\n margin-top: 15px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] {\n min-width: calc(100% - 32px);\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(1) {\n margin: 16px 10px 0 10px;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(2) {\n margin: 16px 10px;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n margin-bottom: 0;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .meeting-box[_ngcontent-%COMP%] {\n max-height: none;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .meeting-box[_ngcontent-%COMP%] .content[_ngcontent-%COMP%] {\n max-height: none;\n overflow-y: none;\n margin-top: 15px;\n }\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background-color: white;\n padding: 6px 11px 26px 20px;\n border: 1px solid #E6E6E6;\n flex: 1;\n margin-bottom: 20px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-size: 18px;\n line-height: 28px;\n margin: 15px 0px 14px 0px;\n font-weight: 400;\n color: #333;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] p[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 10px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 10px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 500;\n color: #000;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n height: 32px;\n vertical-align: middle;\n margin: 0 4px 4px 0;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 500;\n}\n[_nghost-%COMP%] .booking-details-modal-actions[_ngcontent-%COMP%] {\n left: 0;\n bottom: 0;\n width: 100%;\n background-color: white;\n border-top: 1px solid #E6E6E6;\n position: relative;\n max-height: 121px;\n display: flex;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .booking-details-modal-actions[_ngcontent-%COMP%] {\n height: 16px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details-modal-actions[_ngcontent-%COMP%] {\n height: 16px;\n }\n}\n[_nghost-%COMP%] .booking-details-modal-actions[_ngcontent-%COMP%] .mat-dialog-actions[_ngcontent-%COMP%] {\n max-width: 220px;\n margin: 0 auto;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .booking-details-modal-actions[_ngcontent-%COMP%] .mat-dialog-actions[_ngcontent-%COMP%] {\n padding: 5px 0;\n height: 20px;\n max-height: 20px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details-modal-actions[_ngcontent-%COMP%] .mat-dialog-actions[_ngcontent-%COMP%] {\n padding: 5px 0;\n height: 20px;\n max-height: 20px;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWRldGFpbHMtbW9kYWwvYm9va2luZy1kZXRhaWxzLW1vZGFsLmNvbXBvbmVudC5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy91aS9zcmMvbGliL21peGlucy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvYXBwcy9zdGFmZi9zcmMvYXBwL2Jvb2tpbmcvYm9va2luZy1kZXRhaWxzLW1vZGFsL2Jvb2tpbmctZGV0YWlscy1tb2RhbC5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNoVVE7RUFDSSx5QkFBQTtFQUNBLGdCQUFBO0FGZVo7QUVUSTtFQUNJLGNBQUE7QUZXUjtBRURJO0VBQ0ksa0JBQUE7RUFDQSxNQUFBO0VBQ0EsT0FBQTtBRkdSO0FFRFE7RUFDSSw0QkFBQTtBRkdaO0FFRFE7RUFDSSxXQUFBO0VBQ0EsdUJBQUE7RUFDQSwyQkFBQTtFQUNBLGdDQUFBO0FGR1o7QUNwQlE7RUNhQTtJQU1RLGtCQUFBO0VGS2Q7QUFDRjtBQ3pCUTtFQ2FBO0lBTVEsa0JBQUE7RUZVZDtBQUNGO0FDdkNZO0VDc0JKO0lBU1Esa0JBQUE7RUZZZDtBQUNGO0FDNUNZO0VDc0JKO0lBU1Esa0JBQUE7RUZpQmQ7QUFDRjtBRVhZO0VBQ0kseUJBQUE7RUFDQSxpQkFBQTtFQUNBLGtCQUFBO0VBQ0EsY0FBQTtFQUdBLG1CQUFBO0VBQ0Esc0JBQUE7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ZmYvc3JjL2FwcC9ib29raW5nL2Jvb2tpbmctZGV0YWlscy1tb2RhbC9ib29raW5nLWRldGFpbHMtbW9kYWwuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIkcHJpbWFyeTogIzFGNDBFNjtcbiRmb3JtLWxhYmVsOiAjMDUxQzJDO1xuJHNlY29uZGFyeS1sYWJlbDogIzc2NzY3NjtcbiRib3JkZXI6ICNCM0IzQjM7XG4kYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDogI0QwRDBEMDtcbiRjaGlwLWNvbG9yOiAjMzMzMzMzO1xuJHBsYWNlaG9sZGVyLWNvbG9yOiAjN0Y3RjdGO1xuJGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4kcGFnZS1iYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuJHNlbGVjdGVkLW9wdGlvbjogI0U2RTZFNjtcbiRjb2xvci1icmFuZC15ZWxsb3c6ICNmZmQwNDg7XG4kbGlnaHQteWVsbG93OiAjZmZmM2NlO1xuJGNvYWNobWFyay10ZXh0OiAjNmY0ZDAwO1xuJGVycm9yLWNvbG9yOiAjRTEyRTQwO1xuJG5vLWZpbHRlcnMtY29sb3I6ICNCQ0JDQkM7XG4kcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I6ICNGNEY0RjQ7XG4kcHJpbWFyeS1oaWdobGlnaHQ6ICMyMjUxRkY7XG4kc2Nyb2xsYmFyLWNvbG9yOiAjNzU3NTc1O1xuXG4kYXZhaWxhYmxlLWNvbG9yOiAjNUQ5RDUyO1xuJGF2YWlsYWJsZS1ieS1yZXF1ZXN0LWNvbG9yOiAjRjVCNTNGO1xuJGluLXVzZS1jb2xvcjogI0Q0NDgzRTtcbiRub3QtYm9va2FibGUtY29sb3I6ICNDQ0NDQ0M7XG5cbiRtb2RhbC1ib2R5LWhlYWRpbmc6ICM0RDRENEQ7XG4kYWxlcnQtb3ZlcmxheS1iZzogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2FjaG1hcmstYmc6ICNFQkVCRjY7XG4kY29hY2htYXJrLWRhcmstdGV4dDogIzFCMUIxOTtcbiRlcnJvci10ZXh0OiAjZmZmO1xuXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuXG4vLyA0cHhcbiRzcGFjaW5nLXNtYWxsZXN0OiAwLjI1cmVtO1xuXG4vLyA4cHhcbiRzcGFjaW5nLXh4c21hbGw6IDAuNXJlbTtcblxuLy8gMTJweFxuJHNwYWNpbmcteHNtYWxsOiAwLjc1cmVtO1xuXG4vLyAxNnB4XG4kc3BhY2luZy1zbWFsbDogMXJlbTtcblxuLy8gMjBweFxuJHNwYWNpbmctc21hbGwtbWVkaXVtOiAxLjI1cmVtO1xuXG4vLyAyNHB4XG4kc3BhY2luZy1tZWRpdW06IDEuNXJlbTtcblxuLy8gMjhweFxuJHNwYWNpbmctbWVkaXVtLWxhcmdlOiAxLjc1cmVtO1xuXG4vLyAzMnB4XG4kc3BhY2luZy1sYXJnZTogMnJlbTtcblxuLy8gNDhweFxuJHNwYWNpbmcteGxhcmdlOiAzcmVtO1xuXG4vLyA2NHB4XG4kc3BhY2luZy14eGxhcmdlOiA0cmVtO1xuXG4vLyA5NnB4XG4kc3BhY2luZy1sYXJnZXN0OiA2cmVtO1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGRldmljZS1tb2JpbGUtc2l6ZTogNDUwcHg7XG4kZGV2aWNlLXRhYmxldC1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFwdG9wLXNpemU6IDEwMjRweDtcblxuJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemU6IDgwMHB4O1xuJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemU6IDEwNDhweDtcbiRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplOiAxMjgwcHg7XG5cblxuOmV4cG9ydCB7XG4gICAgcHJpbWFyeTogJHByaW1hcnk7XG4gICAgc2Vjb25kYXJ5TGFiZWw6ICRzZWNvbmRhcnktbGFiZWw7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4kaWNvbi1zbWFsbDogMTZweDtcbiRpY29uLW1lZGl1bTogMjRweDtcbiRpY29uLWxhcmdlOiAzMnB4O1xuJGljb24teGxhcmdlOiA0OHB4O1xuIiwiLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG46aG9zdCA6Om5nLWRlZXAgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG46aG9zdCAubXYtbGFiZWwge1xuICBjb2xvcjogIzc1NzU3NTtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgbWNrLW1vZGFsIHtcbiAgbWF4LXdpZHRoOiAxMDI0cHggIWltcG9ydGFudDtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmhlYWRlciB7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcGFkZGluZzogMHB4IDU2cHggMjBweCA1NnB4O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0U2RTZFNjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIHtcbiAgICBwYWRkaW5nOiAwcHggMCAwIDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkgYW5kIChtYXgtd2lkdGg6IDEwNDhweCkge1xuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIge1xuICAgIHBhZGRpbmc6IDBweCAwIDAgMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIHtcbiAgICBwYWRkaW5nOiAwcHggMCAwIDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIge1xuICAgIHBhZGRpbmc6IDBweCAwIDAgMDtcbiAgfVxufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgbWluLWhlaWdodDogMTI1cHg7XG4gIHBhZGRpbmc6IDE1cHggMjVweDtcbiAgY29sb3I6ICMwMDAwMDA7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBsYWNlLWNvbnRlbnQ6IGNlbnRlciBmbGV4LXN0YXJ0O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmhlYWRlciAucmVjY3VyaW5nLWJhbm5lciB7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgcGxhY2UtY29udGVudDogc3RyZXRjaCBmbGV4LXN0YXJ0O1xuICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmhlYWRlciAucmVjY3VyaW5nLWJhbm5lciB7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgcGxhY2UtY29udGVudDogc3RyZXRjaCBmbGV4LXN0YXJ0O1xuICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgfVxufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIGltZyB7XG4gIHdpZHRoOiAyNHB4O1xuICBtYXJnaW4tcmlnaHQ6IDE0cHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLmVkaXQtcmVjcnJpbmctY3RhIHtcbiAgbWFyZ2luLWJvdHRvbTogMTZweDtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmhlYWRlciAucmVjY3VyaW5nLWJhbm5lciAuc3RhdHVzLWluZm8ge1xuICBtYXJnaW4tcmlnaHQ6IDEwMHB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIC5zdGF0dXMtaW5mbyB7XG4gICAgbWFyZ2luLXJpZ2h0OiAwcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTVweDtcbiAgfVxuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1pbmZvIC5yZWN1cnJpbmctaW5mby1pY29uIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIC5zdGF0dXMtaW5mbyB7XG4gICAgbWFyZ2luLXJpZ2h0OiAwcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTVweDtcbiAgfVxuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1pbmZvIC5yZWN1cnJpbmctaW5mby1pY29uIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1pbmZvIC5zdGF0dXMtaGVhZCB7XG4gIG1hcmdpbi1ib3R0b206IDE1cHg7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1pbmZvIC5zdGF0dXMtaGVhZCAucmVjdXJyaW5nLXN0YXR1cyB7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmhlYWRlciAucmVjY3VyaW5nLWJhbm5lciAuc3RhdHVzLWluZm8gLnN0YXR1cy1oZWFkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwcHg7XG4gICAgbWluLWhlaWdodDogMzVweDtcbiAgICBhbGlnbi1pdGVtczogc3RhcnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1pbmZvIC5zdGF0dXMtaGVhZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMHB4O1xuICAgIG1pbi1oZWlnaHQ6IDM1cHg7XG4gICAgYWxpZ24taXRlbXM6IHN0YXJ0O1xuICB9XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1pbmZvIC5iYW5uZXItaW5mby10eHQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGluZS1oZWlnaHQ6IDIycHg7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1pbmZvIC5iYW5uZXItaW5mby10eHQgLnNwY2lmaWMtZGF0ZS10b2dnbGUge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIC5zdGF0dXMtaW5mbyAuYmFubmVyLWluZm8tdHh0IC5oaW50IHtcbiAgd2lkdGg6IDE0MHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjaztcbiAgY29sb3I6IHdoaXRlO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHBhZGRpbmc6IDEwcHg7XG4gIHRvcDogMjhweDtcbiAgei1pbmRleDogMjtcbiAgZm9udC1zaXplOiBjYWxjKDFlbSAtIDJweCk7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIHJpZ2h0OiAwO1xuICBib3gtc2hhZG93OiAwcHggMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMik7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1pbmZvIC5iYW5uZXItaW5mby10eHQgLmhpbnQge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmhlYWRlciAucmVjY3VyaW5nLWJhbm5lciAuc3RhdHVzLWluZm8gLmJhbm5lci1pbmZvLXR4dCAuaGludCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1pbmZvIC5iYW5uZXItaW5mby10eHQgLmhpbnQgLnRyaWFuZ2xlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IC02cHg7XG4gIGxlZnQ6IDY0cHg7XG4gIHdpZHRoOiAxMnB4O1xuICBoZWlnaHQ6IDEycHg7XG4gIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xuICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1pbmZvIC5iYW5uZXItaW5mby10eHQgLmhpbnQtd3JhcHBlciB7XG4gIG1heC1oZWlnaHQ6IDEwNnB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBvdmVyZmxvdy15OiBzY3JvbGw7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1pbmZvIC5iYW5uZXItaW5mby10eHQgLmhpbnQtd3JhcHBlciBkaXYge1xuICBwYWRkaW5nOiAwLjJlbSAwO1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIC5zdGF0dXMtaW5mbyAuYmFubmVyLWluZm8tdHh0IC5oaW50LXdyYXBwZXIgZGl2OmZpcnN0LWNoaWxkIHtcbiAgcGFkZGluZy1ib3R0b206IDA7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1pbmZvIC5iYW5uZXItaW5mby10eHQgLmhpbnQtd3JhcHBlciBkaXY6bGFzdC1jaGlsZCB7XG4gIHBhZGRpbmctYm90dG9tOiAwO1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5zdGF0dXMge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiA1NnB4O1xuICBwYWRkaW5nOiAxNnB4IDI1cHggMTZweCAyNXB4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmhlYWRlciAuc3RhdHVzID4gZGl2IGltZyB7XG4gIHdpZHRoOiAyNHB4O1xuICBtYXJnaW4tcmlnaHQ6IDE0cHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnN0YXR1cyA+IGRpdiBwIHtcbiAgbWFyZ2luOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5zdGF0dXMge1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmhlYWRlciAuc3RhdHVzIHtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gIH1cbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmhlYWRlciAuYmx1ZS1iYW5uZXIge1xuICBiYWNrZ3JvdW5kOiAjRTZFQ0ZGO1xuICBwYWRkaW5nOiAxNnB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5ibHVlLWJhbm5lciBpbWcge1xuICB3aWR0aDogMjRweDtcbiAgbWFyZ2luLXJpZ2h0OiAxNHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5ibHVlLWJhbm5lciA+IGRpdiBwIHtcbiAgbWFyZ2luOiAwO1xuICBjb2xvcjogIzFFMzJFNjtcbiAgZm9udC1zaXplOiAxNnB4O1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgLyogLnN0YXR1cy1jdGEtYmxvY2sge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRTZFNkU2O1xuICAgICAgICAgIHBhZGRpbmc6IDE2cHggNTVweDtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZSh0YWJsZXQpIHtcbiAgICAgICAgICAgICAgcGFkZGluZzogMTZweCAxNnB4O1xuICAgICAgICAgIH1cbiAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgcGFkZGluZzogMTZweCAxNnB4O1xuICAgICAgICAgIH1cbiAgICAgICAgICBoMSB7XG4gICAgICAgICAgICAgIGNvbG9yOiAjMjIyMjIyO1xuICAgICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtYm93ZXI7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICAgICAgICAgICAgbWFyZ2luOiAxMHB4IDA7XG4gICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKHRhYmxldCkge1xuICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICA+ZGl2IHtcbiAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgICAgICAgbWluLXdpZHRoOiAzMDBweDtcbiAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgICA+ZGl2IHtcbiAgICAgICAgICAgICAgICAgICAgICBtaW4td2lkdGg6IGNhbGMoMTAwJSAtIDMycHgpO1xuICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgID5kaXYge1xuICAgICAgICAgICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMjBweDtcbiAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKHRhYmxldCkge1xuICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDVweCAwO1xuICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDVweCAwO1xuICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICY6bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICBidXR0b24ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJGVycm9yLWNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAkZXJyb3ItY29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnV0dG9uLCBhIHtcbiAgICAgICAgICAgICAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAyMDJweDtcbiAgICAgICAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDIwMnB4O1xuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiMyMjUxRkY7XG4gICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzIyNTFGRjtcbiAgICAgICAgICAgICAgICAgICAgICAmW2Rpc2FibGVkXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjNzU3NTc1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRDBEMEQwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRDBEMEQwO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA+c3BhbiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH0qL1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDQ4cHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkge1xuICAgIG1hcmdpbjogMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogODAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkge1xuICAgIG1hcmdpbjogMDtcbiAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoICsgNTZweCk7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAxMDQ5cHgpIGFuZCAobWF4LXdpZHRoOiAxMjgwcHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkge1xuICAgIG1hcmdpbjogMDtcbiAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoICsgNTZweCk7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IHtcbiAgICBtYXJnaW46IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAucm9vbS1jdGEtYmxvY2sge1xuICBwYWRkaW5nOiAwcHggNTVweDtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5yb29tLWN0YS1ibG9jayAuY3RhLWJsb2NrID4gZGl2Om50aC1jaGlsZCgyKSB7XG4gIG1hcmdpbi1sZWZ0OiAyMXB4O1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnJvb20tY3RhLWJsb2NrIC5jdGEtYmxvY2sgPiBkaXY6bnRoLWNoaWxkKDIpIGJ1dHRvbiB7XG4gIGNvbG9yOiAjRTEyRTQwO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTEyRTQwO1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnJvb20tY3RhLWJsb2NrIC5jdGEtYmxvY2sgYnV0dG9uLCA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAucm9vbS1jdGEtYmxvY2sgLmN0YS1ibG9jayBhIHtcbiAgZmxleDogMTtcbiAgd2lkdGg6IDIwMnB4O1xuICBtaW4td2lkdGg6IDIwMnB4O1xuICBjb2xvcjogIzIyNTFGRjtcbiAgYm9yZGVyOiAxcHggc29saWQgIzIyNTFGRjtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5yb29tLWN0YS1ibG9jayAuY3RhLWJsb2NrIGJ1dHRvbltkaXNhYmxlZF0sIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5yb29tLWN0YS1ibG9jayAuY3RhLWJsb2NrIGFbZGlzYWJsZWRdIHtcbiAgY29sb3I6ICM3NTc1NzU7XG4gIGJhY2tncm91bmQ6ICNEMEQwRDA7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAucm9vbS1jdGEtYmxvY2sgLmN0YS1ibG9jayBidXR0b24gPiBzcGFuLCA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAucm9vbS1jdGEtYmxvY2sgLmN0YS1ibG9jayBhID4gc3BhbiB7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5yb29tLWN0YS1ibG9jayAuY3RhLWJsb2NrIGJ1dHRvbiwgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnJvb20tY3RhLWJsb2NrIC5jdGEtYmxvY2sgYSB7XG4gICAgd2lkdGg6IDE4NXB4O1xuICAgIG1pbi13aWR0aDogMTg1cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAucm9vbS1jdGEtYmxvY2sgLmN0YS1ibG9jayBidXR0b24sIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5yb29tLWN0YS1ibG9jayAuY3RhLWJsb2NrIGEge1xuICAgIHdpZHRoOiAxODVweDtcbiAgICBtaW4td2lkdGg6IDE4NXB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5yb29tLWN0YS1ibG9jayAuY3RhLWJsb2NrIHtcbiAgICBwbGFjZS1jb250ZW50OiBzdHJldGNoIGZsZXgtZW5kO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDQ4cHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnJvb20tY3RhLWJsb2NrIC5jdGEtYmxvY2sge1xuICAgIHBsYWNlLWNvbnRlbnQ6IHN0cmV0Y2ggZmxleC1lbmQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5yb29tLWN0YS1ibG9jayB7XG4gICAgcGFkZGluZzogMHB4IDEwcHg7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBsYWNlLWNvbnRlbnQ6IHN0cmV0Y2ggZmxleC1zdGFydDtcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAucm9vbS1jdGEtYmxvY2sge1xuICAgIHBhZGRpbmc6IDBweCAxMHB4O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwbGFjZS1jb250ZW50OiBzdHJldGNoIGZsZXgtc3RhcnQ7XG4gICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5yb29tLWN0YS1ibG9jayB7XG4gICAgcGFkZGluZzogMHB4IDEwcHg7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBsYWNlLWNvbnRlbnQ6IHN0cmV0Y2ggZmxleC1zdGFydDtcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkgYW5kIChtYXgtd2lkdGg6IDEwNDhweCkge1xuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAucm9vbS1jdGEtYmxvY2sge1xuICAgIHBhZGRpbmc6IDBweCAxMHB4O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwbGFjZS1jb250ZW50OiBzdHJldGNoIGZsZXgtc3RhcnQ7XG4gICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICB9XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAucm9vbS1hZGRyZXNzIHtcbiAgbWF4LWhlaWdodDogMTEwcHg7XG4gIHBhZGRpbmc6IDBweCAyMHB4O1xuICBmbGV4OiAxIDEgYXV0bztcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgbWFyZ2luLXRvcDogMTZweDtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5yb29tLWFkZHJlc3MgLm5hbWUge1xuICBmb250LXdlaWdodDogNzAwO1xuICBmb250LXNpemU6IDQycHg7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAucm9vbS1hZGRyZXNzIC5hZGRyZXNzLWRldGFpbHMge1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAxOHB4O1xuICBwYWRkaW5nLXRvcDogNHB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAucm9vbS1hZGRyZXNzIHtcbiAgICBwYWRkaW5nOiB1bnNldDtcbiAgICBtYXJnaW4tbGVmdDogMTVweDtcbiAgfVxuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAucm9vbS1hZGRyZXNzIC5uYW1lIHtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIGZvbnQtc2l6ZTogMjhweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSBhbmQgKG1heC13aWR0aDogMTA0OHB4KSB7XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5yb29tLWFkZHJlc3Mge1xuICAgIHBhZGRpbmc6IHVuc2V0O1xuICAgIG1hcmdpbi1sZWZ0OiAxNXB4O1xuICB9XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5yb29tLWFkZHJlc3MgLm5hbWUge1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgZm9udC1zaXplOiAyOHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAucm9vbS1hZGRyZXNzIHtcbiAgICBwYWRkaW5nOiB1bnNldDtcbiAgICBtYXJnaW4tbGVmdDogMTVweDtcbiAgfVxuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAucm9vbS1hZGRyZXNzIC5uYW1lIHtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIGZvbnQtc2l6ZTogMjhweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5yb29tLWFkZHJlc3Mge1xuICAgIHBhZGRpbmc6IHVuc2V0O1xuICAgIG1hcmdpbi1sZWZ0OiAxNXB4O1xuICB9XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5yb29tLWFkZHJlc3MgLm5hbWUge1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgZm9udC1zaXplOiAyOHB4O1xuICB9XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIG1hcmdpbi1ib3R0b206IDUwcHg7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwge1xuICBmbGV4OiAxO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBtYXJnaW46IDE2cHggNTVweDtcbiAgbWluLXdpZHRoOiAzMDBweDtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCAuc2NoZWR1bGUge1xuICBoZWlnaHQ6IDEwMHB4O1xuICBtYXgtaGVpZ2h0OiAyNzBweDtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCAuYm94IGgyIHtcbiAgbWFyZ2luLWJvdHRvbTogMTRweCAhaW1wb3J0YW50O1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsIC5ib3ggLmNvbnRlbnQge1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAyOHB4O1xuICBtYXJnaW46IDFweCAwcHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGNvbG9yOiAjMzMzO1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsIC5ib3ggLmNvbnRlbnQgPiBkaXYge1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCAuaGVpZ2h0LTU4IHtcbiAgaGVpZ2h0OiA1OHB4O1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsIC5oZWlnaHQtNTggPiBoMjpmaXJzdC1vZi10eXBlIHtcbiAgZmxleDogMSAxIGF1dG87XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgYnV0dG9uIHtcbiAgY29sb3I6ICMyMjUxRkY7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGJvcmRlcjogbm9uZTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICB3aWR0aDogNTNweDtcbiAgaGVpZ2h0OiA1MnB4O1xuICBwYWRkaW5nOiB1bnNldDtcbiAgbWluLXdpZHRoOiB1bnNldDtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCBidXR0b24uY3RhIHtcbiAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDtcbiAgd2lkdGg6IDIwMnB4O1xuICBjb2xvcjogIzIyNTFGRjtcbiAgYm9yZGVyOiAxcHggc29saWQgIzIyNTFGRjtcbiAgaGVpZ2h0OiA0OHB4O1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsIGJ1dHRvbi5jdGFbZGlzYWJsZWRdIHtcbiAgYmFja2dyb3VuZDogI0QwRDBEMDtcbiAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgb3BhY2l0eTogMTtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCBidXR0b24gaW1nIHtcbiAgd2lkdGg6IDI0cHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgYnV0dG9uW2Rpc2FibGVkXSB7XG4gIGNvbG9yOiAjNzU3NTc1O1xuICBvcGFjaXR5OiAwLjU7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgLm1lZXRpbmctYm94IHtcbiAgbWF4LWhlaWdodDogMzAwcHg7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgLm1lZXRpbmctYm94IC5jb250ZW50IHtcbiAgbWF4LWhlaWdodDogMTgwcHg7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIG1hcmdpbi10b3A6IDE1cHg7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgLnJvb20tbWFwIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IDI3MXB4O1xuICBmbGV4OiBub25lO1xuICBwYWRkaW5nOiBpbmhlcml0O1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsIC5yb29tLW1hcCA+IGRpdiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCAucm9vbS1tYXAgLnpvb20ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAyMHB4O1xuICB0b3A6IDIwcHg7XG4gIHotaW5kZXg6IDE7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgLnJvb20taGFzLWNhdGVyaW5nIHtcbiAgZmxleDogbm9uZTtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCAucm9vbS1oYXMtY2F0ZXJpbmcgLmNhdGVyaW5nLXRhYmxlIHtcbiAgbWF4LWhlaWdodDogMjU4cHg7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIG1hcmdpbi10b3A6IDE0cHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgLnJvb20taGFzLWNhdGVyaW5nIC5jYXRlcmluZy10YWJsZSB7XG4gICAgbWF4LWhlaWdodDogbm9uZTtcbiAgICBvdmVyZmxvdy15OiBub25lO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsIC5yb29tLWhhcy1jYXRlcmluZyAuY2F0ZXJpbmctdGFibGUge1xuICAgIG1heC1oZWlnaHQ6IG5vbmU7XG4gICAgb3ZlcmZsb3cteTogbm9uZTtcbiAgfVxufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsIC5yZXF1aXJlbWVudHMge1xuICBjb2xvcjogIzIyNTFGRjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsOm50aC1jaGlsZCgxKSB7XG4gICAgbWFyZ2luOiAxNnB4IDEwcHggMCAxMHB4O1xuICB9XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbDpudGgtY2hpbGQoMikge1xuICAgIG1hcmdpbjogMTZweCAxMHB4O1xuICB9XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCA+IGRpdiB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDQ4cHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsOm50aC1jaGlsZCgxKSB7XG4gICAgbWFyZ2luOiAxNnB4IDEwcHggMCAxMHB4O1xuICB9XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbDpudGgtY2hpbGQoMikge1xuICAgIG1hcmdpbjogMTZweCAxMHB4O1xuICB9XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCA+IGRpdiB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwge1xuICAgIG1pbi13aWR0aDogY2FsYygxMDAlIC0gMzJweCk7XG4gIH1cbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsOm50aC1jaGlsZCgxKSB7XG4gICAgbWFyZ2luOiAxNnB4IDEwcHggMCAxMHB4O1xuICB9XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbDpudGgtY2hpbGQoMikge1xuICAgIG1hcmdpbjogMTZweCAxMHB4O1xuICB9XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCA+IGRpdiB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgLm1lZXRpbmctYm94IHtcbiAgICBtYXgtaGVpZ2h0OiBub25lO1xuICB9XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCAubWVldGluZy1ib3ggLmNvbnRlbnQge1xuICAgIG1heC1oZWlnaHQ6IG5vbmU7XG4gICAgb3ZlcmZsb3cteTogbm9uZTtcbiAgICBtYXJnaW4tdG9wOiAxNXB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsIHtcbiAgICBtaW4td2lkdGg6IGNhbGMoMTAwJSAtIDMycHgpO1xuICB9XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbDpudGgtY2hpbGQoMSkge1xuICAgIG1hcmdpbjogMTZweCAxMHB4IDAgMTBweDtcbiAgfVxuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWw6bnRoLWNoaWxkKDIpIHtcbiAgICBtYXJnaW46IDE2cHggMTBweDtcbiAgfVxuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgPiBkaXYge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsIC5tZWV0aW5nLWJveCB7XG4gICAgbWF4LWhlaWdodDogbm9uZTtcbiAgfVxuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgLm1lZXRpbmctYm94IC5jb250ZW50IHtcbiAgICBtYXgtaGVpZ2h0OiBub25lO1xuICAgIG92ZXJmbG93LXk6IG5vbmU7XG4gICAgbWFyZ2luLXRvcDogMTVweDtcbiAgfVxufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsID4gZGl2IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDZweCAxMXB4IDI2cHggMjBweDtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgZmxleDogMTtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCBwIHtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAyOHB4O1xuICBtYXJnaW46IDE1cHggMHB4IDE0cHggMHB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBjb2xvcjogIzMzMztcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCBwIHN0cm9uZyB7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWw6bnRoLWNoaWxkKDEpIHtcbiAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsOm50aC1jaGlsZCgyKSB7XG4gIG1hcmdpbi1sZWZ0OiAxMHB4O1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsIGgyIHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBjb2xvcjogIzAwMDtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCBoMiBpbWcge1xuICBoZWlnaHQ6IDMycHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIG1hcmdpbjogMCA0cHggNHB4IDA7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgaDMge1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzLW1vZGFsLWFjdGlvbnMge1xuICBsZWZ0OiAwO1xuICBib3R0b206IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNFNkU2RTY7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWF4LWhlaWdodDogMTIxcHg7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzLW1vZGFsLWFjdGlvbnMge1xuICAgIGhlaWdodDogMTZweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMtbW9kYWwtYWN0aW9ucyB7XG4gICAgaGVpZ2h0OiAxNnB4O1xuICB9XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzLW1vZGFsLWFjdGlvbnMgLm1hdC1kaWFsb2ctYWN0aW9ucyB7XG4gIG1heC13aWR0aDogMjIwcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscy1tb2RhbC1hY3Rpb25zIC5tYXQtZGlhbG9nLWFjdGlvbnMge1xuICAgIHBhZGRpbmc6IDVweCAwO1xuICAgIGhlaWdodDogMjBweDtcbiAgICBtYXgtaGVpZ2h0OiAyMHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscy1tb2RhbC1hY3Rpb25zIC5tYXQtZGlhbG9nLWFjdGlvbnMge1xuICAgIHBhZGRpbmc6IDVweCAwO1xuICAgIGhlaWdodDogMjBweDtcbiAgICBtYXgtaGVpZ2h0OiAyMHB4O1xuICB9XG59IiwiQGltcG9ydCBcInZhcnNcIjtcblxuQG1peGluIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJHNpemUsICRxdWFsaWZpZXIpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBpZiAoJHF1YWxpZmllciA9PSBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIGlmICgkcXVhbGlmaWVyID09IG1heC13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtYXgtd2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBtaXhpbiBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJG1pbiwgJG1heCkge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gdGhpcyBpcyBhIGNvcHkgb2YgcmVzcG9uZC10by4gd2UgZG9uJ3Qgd2FudCB0byBwcmVzZXJ2ZSB0aGF0IG1ldGhvZCBzaW5jZSB0aGUgYnJlYWtwb2ludHMgbWF5IGRpdmVyZ2UgZnJvbSB0aGUgb2xkIFVJLlxuQG1peGluIGlzLXNjcmVlbi1zaXplKCRtZWRpYTogYWxsLCAkb3JpZW50YXRpb246IG5vbmUpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuXG5AbWl4aW4gcGFnZS1wYWRkaW5nIHtcbiAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xufVxuXG4vLyBGb250IE1peGluc1xuJGZvbnQtbWNraW5zZXktc2FuczogXCJNY0tpbnNleSBTYW5zXCI7XG4kZm9udC10aGVpbmhhcmR0OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiRmb250LWJvd2VyOiBcIkJvd2VyXCI7XG5cbkBtaXhpbiBib3dlci1ib2xkIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtYm93ZXI7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIG1ja2luc2V5LXNhbnMge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBkaXNwbGF5LTEge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDRyZW07IC8vIDY0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTg3OyAvLyA3NnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0yIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0zIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTQge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzcmVtOyAvLyA0OHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTY2OyAvLyA1NnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDY0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTUge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuODMzOyAvLyAzNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42NDI7IC8vIDQwcHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTcge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDQ4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjc1cmVtOyAvLyA0NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNTJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICBsaW5lLWhlaWdodDogMS4xMTE7IC8vIDQ0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA0OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0zIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjIyOyAvLyA0NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy00IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy01IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyODhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy02IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTU1OyAvLyAyOHB4XG4gICAgfVxufVxuXG5AbWl4aW4gYm9keS1kZWZhdWx0IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI2cHhcbiAgICB9XG59XG5cbi8vLyBEb2VzbnQgZXhpc3QgaW4gTURTLlxuQG1peGluIGJvZHktdGlueSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07IC8vIDEycHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyMHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZm9ybS1sYWJlbCB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LWZhbWlseTogJGZvbnQtdGhlaW5oYXJkdDtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgY29sb3I6ICRwbGFjZWhvbGRlci1jb2xvcjtcbiAgICBmb250LXdlaWdodDogMzAwO1xufVxuXG5AbWl4aW4gY2hpcC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIGNoZWNrYm94LWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgY29sb3I6IGJsYWNrO1xufVxuXG4vLyBib3JkZXJzXG5cbkBtaXhpbiBtY2stY2hlY2tib3gtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAycHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLXRoaW4tYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlci1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJvcmRlci1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50LWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXItbGlnaHQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5cbi8vIGZ1bmN0aW9uc1xuXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbkBtaXhpbiBtYXgtbGluZXMoJGNvdW50KSB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAtd2Via2l0LWxpbmUtY2xhbXA6ICRjb3VudDtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuXG4vLyBpbWFnZXNcbkBtaXhpbiBtY2staWNvbigkd2lkdGgsICRhc3NldCwgJGhlaWdodDogJHdpZHRoLCAgJGFzc2V0UGF0aDogXCJsaWJzL3VpL3NyYy9saWIvaWNvbnNcIiwpIHtcbiAgICB3aWR0aDogJHdpZHRoO1xuICAgIGhlaWdodDogJGhlaWdodDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIjeyRhc3NldFBhdGh9LyN7JGFzc2V0fVwiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG59XG5cblxuQG1peGluIG1jay1zbWFsbC1pY29uKCRtb2JpbGUtYXNzZXQsICRkZXNrdG9wLWFzc2V0OiAkbW9iaWxlLWFzc2V0KSB7XG4gICAgQGluY2x1ZGUgbWNrLWljb24oMTZweCwgJGFzc2V0OiAkbW9iaWxlLWFzc2V0KTtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oMjRweCwgJGFzc2V0OiAkZGVza3RvcC1hc3NldCk7XG4gICAgfVxufVxuXG4vLyBza2VsZXRvblxuQG1peGluIHNrZWxldG9uLWJnIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItaW1hZ2Utc2l6ZSB7XG4gICAgd2lkdGg6IDgxcHg7XG4gICAgaGVpZ2h0OiA4MnB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMjE5cHg7XG4gICAgICAgIGhlaWdodDogMTE5cHg7XG4gICAgfVxufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItc3RhdHVzLXNpemUge1xuICAgIHdpZHRoOiAxMTdweDtcbiAgICBoZWlnaHQ6IDc4cHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAxMTdweDtcbiAgICAgICAgaGVpZ2h0OiA3OHB4O1xuICAgIH1cbn1cbiIsIkBpbXBvcnQgXCJsaWJzL3VpL3NyYy9saWIvbWl4aW5zXCI7XG5cbjpob3N0IHtcbiAgICA6Om5nLWRlZXAge1xuICAgICAgICAubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4gICAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgXG5cbiAgICAubXYtbGFiZWx7XG4gICAgICAgIGNvbG9yOiAjNzU3NTc1O1xuXG4gICAgfVxuXG4gICAgXG5cbiAgICBcblxuXG5cbiAgICAuYm9va2luZy1kZXRhaWxzIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIFxuICAgICAgICBtY2stbW9kYWwge1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDI0cHggIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgICAgICAuaGVhZGVyIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgICAgICBwYWRkaW5nOiAwcHggNTZweCAyMHB4IDU2cHg7XG4gICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0U2RTZFNjtcbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKHRhYmxldCkge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDBweCAwIDAgMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDBweCAwIDAgMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gJi5pcy1yZWN1cnJpbmctYm9keSB7XG4gICAgICAgICAgICAvLyAgICAgaGVpZ2h0OiAyMTdweDtcbiAgICAgICAgICAgIC8vIH1cblxuICAgICAgICAgICAgLnJlY2N1cmluZy1iYW5uZXIge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gICAgICAgICAgICAgICAgbWluLWhlaWdodDogMTI1cHg7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMTVweCAyNXB4O1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMDAwMDAwO1xuXG4gICAgICAgICAgICAgICAgLy8gQGV4dGVuZCAuZmxleC1yb3c7XG4gICAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICAgICAgcGxhY2UtY29udGVudDogY2VudGVyIGZsZXgtc3RhcnQ7XG4gICAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG5cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQGV4dGVuZCAuZmxleC1jb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgcGxhY2UtY29udGVudDogc3RyZXRjaCBmbGV4LXN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICAgICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGltZyB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAyNHB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDE0cHg7XG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC5lZGl0LXJlY3JyaW5nLWN0YSB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLnN0YXR1cy1pbmZvIHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMDBweDtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAucmVjdXJyaW5nLWluZm8taWNvbntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLnN0YXR1cy1oZWFkIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAucmVjdXJyaW5nLXN0YXR1cyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwcHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluLWhlaWdodDogMzVweDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbi1pdGVtczogc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLmJhbm5lci1pbmZvLXR4dCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC5zcGNpZmljLWRhdGUtdG9nZ2xlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAuaGludCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdpZHRoOiAxNDBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHJpYW5nbGVfd2lkdGg6IDEycHg7XG4gICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAkd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogMjhweDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6LWluZGV4OiAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogY2FsYygxZW0gLSAycHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94LXNoYWRvdzogMHB4IDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjIpO1xuICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRyaWFuZ2xlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IC02cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6ICgkd2lkdGggLSAkdHJpYW5nbGVfd2lkdGgpLzI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAkdHJpYW5nbGVfd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJHRyaWFuZ2xlX3dpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJi13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4LWhlaWdodDogMTA2cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLjJlbSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuc3RhdHVzIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDU2cHg7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMTZweCAyNXB4IDE2cHggMjVweDtcbiAgICAgICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgICAgICAgICBpbWcge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDI0cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDE0cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIFxuXG4gICAgICAgICAgICAuYmx1ZS1iYW5uZXIge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNFNkVDRkY7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMTZweDtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICAgICAgLy8gYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAgICAgICAgICAgICAgIGltZyB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAyNHB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDE0cHg7XG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPmRpdiB7XG4gICAgICAgICAgICAgICAgICAgIHAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOjA7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogIzFFMzJFNjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDtcblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IC8vIGhlYWRlclxuXG5cbiAgICAgICAgLmRldGFpbC1ib2R5IHtcbiAgICAgICAgICAgIC8vIHBhZGRpbmc6IDEwNHB4IDAgMTIycHggMDtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgLy8gb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgICAgICAgICAgLy8gaGVpZ2h0OiBjYWxjKDEwMHZoICsgNTZweCk7XG5cbiAgICAgICAgICAgIC8vICYuaXMtcmVjdXJyaW5nLWJvZHkge1xuICAgICAgICAgICAgLy8gICAgIC8vIHBhZGRpbmctdG9wOiAxNjBweDtcbiAgICAgICAgICAgIC8vICAgICBoZWlnaHQ6IGNhbGMoMTAwdmggKyAzMDBweCk7XG4gICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKHRhYmxldCkge1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICAvLyBwYWRkaW5nOiAwcHggMCAxMDZweCAwO1xuXG4gICAgICAgICAgICAgICAgLy8gJi5pcy1yZWN1cnJpbmctYm9keSB7XG4gICAgICAgICAgICAgICAgLy8gICAgIC8vIHBhZGRpbmctdG9wOiAxNTJweDtcbiAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShsYXB0b3ApIHtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICAgICAgLy8gcGFkZGluZzogMHB4IDAgMTA2cHggMDtcbiAgICAgICAgICAgICAgICAvLyBoZWlnaHQ6IGNhbGMoMTAwdmggKyA1NnB4KTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoICsgNTZweCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICAgICAgLy8gcGFkZGluZzogMHB4IDAgODBweCAwO1xuICAgICAgICAgICAgICAgIC8vIGhlaWdodDogY2FsYygxMDB2aCAtIDE4MXB4KTtcbiAgICAgICAgICAgICAgICAvLyBvdmVyZmxvdzogYXV0bztcbiAgICAgICAgICAgICAgICAvLyAmLmlzLXJlY3VycmluZy1ib2R5IHtcbiAgICAgICAgICAgICAgICAvLyAgICAgLy8gcGFkZGluZy10b3A6IDE3MHB4O1xuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAucm9vbS1jdGEtYmxvY2sge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDBweCA1NXB4O1xuICAgICAgICAgICAgICAgIC5jdGEtYmxvY2sge1xuICAgICAgICAgICAgICAgICAgICA+ZGl2Om50aC1jaGlsZCgyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDoyMXB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJGVycm9yLWNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICRlcnJvci1jb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uLCBhIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMjAycHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDIwMnB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IzIyNTFGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMyMjUxRkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAmW2Rpc2FibGVkXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICM3NTc1NzU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI0QwRDBEMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRDBEMEQwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9wYWNpdHk6IDAuNztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5zcGFuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1pbi13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTg1cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiAxODVweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKHRhYmxldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2UtY29udGVudDogc3RyZXRjaCBmbGV4LWVuZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwcHggMTBweDtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgICAgICBwbGFjZS1jb250ZW50OiBzdHJldGNoIGZsZXgtc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUodGFibGV0KSB7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDBweCAxMHB4O1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlLWNvbnRlbnQ6IHN0cmV0Y2ggZmxleC1zdGFydDtcbiAgICAgICAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gICAgICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5yb29tLWFkZHJlc3Mge1xuICAgICAgICAgICAgICAgIG1heC1oZWlnaHQ6IDExMHB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDBweCAyMHB4O1xuICAgICAgICAgICAgICAgIGZsZXg6IDEgMSBhdXRvO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgICAgICAgICAgICAgLy8gbWFyZ2luOiAxNnB4IDU1cHggMHB4IDU1cHg7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMTZweDtcbiAgICAgICAgICAgICAgICAubmFtZSB7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogNDJweDtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAuYWRkcmVzcy1kZXRhaWxzIHtcbiAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMThweDtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZy10b3A6IDRweDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZSh0YWJsZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogdW5zZXQ7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxNXB4O1xuICAgICAgICAgICAgICAgICAgICAubmFtZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAyOHB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiB1bnNldDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDE1cHg7XG4gICAgICAgICAgICAgICAgICAgIC5uYW1lIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDI4cHg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC52LXBhbmVscyB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA1MHB4O1xuICAgICAgICAgICAgICAgIC52LXBhbmVsIHtcbiAgICAgICAgICAgICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxNnB4IDU1cHg7XG4gICAgICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMzAwcHg7XG5cbiAgICAgICAgICAgICAgICAgICAgLnNjaGVkdWxlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTAwcHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiAyNzBweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC5ib3h7XG4gICAgICAgICAgICAgICAgICAgICAgICBoMntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAuY29udGVudHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxcHggMHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICMzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPmRpdiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC5oZWlnaHQtNTgge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA1OHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgPmgyOmZpcnN0LW9mLXR5cGUge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXg6IDEgMSBhdXRvO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpZHRoOiAyMDJweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiMyMjUxRkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBib3JkZXI6IDFweCBzb2xpZCAjMjI1MUZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hcmdpbi1yaWdodDogMTNweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhlaWdodDogNzNweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpZHRoOiBhdXRvO1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDUzcHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDUycHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiB1bnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbi13aWR0aDogdW5zZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICYuY3Rhe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDIwMnB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjMjI1MUZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMyMjUxRkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0OHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICZbZGlzYWJsZWRdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI0QwRDBEMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGltZyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDI0cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICZbZGlzYWJsZWRdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogIzc1NzU3NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1pbi13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbWcge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB3aWR0aDogMjRweDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgbWFyZ2luLXJpZ2h0OiAxNHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAubWVldGluZy1ib3h7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiAzMDBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jb250ZW50IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiAxODBweDsgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAxNXB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLnJvb20tbWFwIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMjcxcHg7IFxuICAgICAgICAgICAgICAgICAgICAgICAgZmxleDogbm9uZTsgXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBpbmhlcml0O1xuICAgICAgICAgICAgICAgICAgICAgICAgPmRpdiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLnpvb20ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodDogMjBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IDIwcHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC5yb29tLWhhcy1jYXRlcmluZyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbGV4Om5vbmU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRlcmluZy10YWJsZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4LWhlaWdodDogMjU4cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAxNHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKHRhYmxldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4LWhlaWdodDogbm9uZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3cteTogbm9uZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAucmVxdWlyZW1lbnRzIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiMyMjUxRkY7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBcblxuXG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKHRhYmxldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJjpudGgtY2hpbGQoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMTZweCAxMHB4IDAgMTBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICY6bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDE2cHggMTBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5kaXYge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbi13aWR0aDogY2FsYygxMDAlIC0gIDMycHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJjpudGgtY2hpbGQoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMTZweCAxMHB4IDAgMTBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICY6bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDE2cHggMTBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5kaXYge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAubWVldGluZy1ib3h7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4LWhlaWdodDogbm9uZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY29udGVudCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heC1oZWlnaHQ6IG5vbmU7IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdy15OiBub25lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAxNXB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA+IGRpdiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDZweCAxMXB4IDI2cHggMjBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDE1cHggMHB4IDE0cHggMHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb25nIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICY6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAmOm50aC1jaGlsZCgyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogMTBweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBoMiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDAgNHB4IDRweCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGgzIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cblxuXG4gICAgICAgIC8qIC5zdGF0dXMtY3RhLWJsb2NrIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0U2RTZFNjtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNnB4IDU1cHg7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUodGFibGV0KSB7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDE2cHggMTZweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDE2cHggMTZweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaDEge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogIzIyMjIyMjtcbiAgICAgICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LWJvd2VyO1xuICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDI0cHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMTBweCAwO1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZSh0YWJsZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPmRpdiB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICAgICAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMzAwcHg7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgICAgICAgICAgPmRpdiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiBjYWxjKDEwMCUgLSAzMnB4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA+ZGl2IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZSh0YWJsZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiA1cHggMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiA1cHggMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAmOm50aC1jaGlsZCgyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICRlcnJvci1jb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJGVycm9yLWNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbiwgYSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMjAycHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiAyMDJweDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjojMjI1MUZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMyMjUxRkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJltkaXNhYmxlZF0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogIzc1NzU3NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI0QwRDBEMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPnNwYW4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9Ki9cblxuICAgICAgICAgICAgXG5cbiAgICAgICAgXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuYm9va2luZy1kZXRhaWxzLW1vZGFsLWFjdGlvbnMge1xuICAgICAgICAvLyBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI0U2RTZFNjtcbiAgICAgICAgLy8gei1pbmRleDogMTtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyBcbiAgICAgICAgbWF4LWhlaWdodDogMTIxcHg7XG5cbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgfVxuICAgICAgICAubWF0LWRpYWxvZy1hY3Rpb25zIHtcbiAgICAgICAgICAgIG1heC13aWR0aDogMjIwcHg7XG4gICAgICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDVweCAwO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMjBweDtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG59XG5cbiJdfQ== */"] }); /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(BookingDetailsModalComponent, [{ type: core_1.Component, args: [{ selector: 'app-booking-details-modal', - template: ` -
- - - - -
-
-
-
- - Recurring booking status: {{ statusText }} -
-
- - -
-
-
- - - -
-
- -
-
-

Booking {{ statusText.toLowerCase() }}

- {{timeString}} -
-
-
- -
-

This is a multiroom booking. To request edits, please contact your local backoffice team.

-
-
-
-
- -
-
-
-
-
-
-

Booking Status: {{statusText}}

-

- -

-
-
- -
- - -
-
-
-
-
-
-

- - {{title}} -

-

- Date: {{dateString}}
- Time: {{timeString}}
- {{type}} meeting ({{durationString}}) -

- - - -

- Address: {{roomLocation}}
- Room: {{roomName}}
- Capacity: {{capacity}} -

- -
-
- -
- - -
- - -
-
-

- -

-

- - - -

- - -

- - - -

- - -
-
-
-
-

- - Booking Details -

-

Host: {{host}}

-

Attendees: {{attendeesString}}

-

Company: {{companyString}}

-

Charge code: {{chargeCode}}

-

Headcount estimate: {{headcount}}

-

Additional requirements: {{requirements}}

-

Email notification for this booking has been opt out.

- - -
-
-

- - Catering -

-

Catering available for this room

- - - -
-
-
-
-

- -

- - - - - - -
-
-

- -

-

- -

- -
-
-
-
- - - - - -
-
- -
- - -
- - - -
- - -
-
- -
- `, + templateUrl: 'booking-details-modal.component.html', styleUrls: ['./booking-details-modal.component.scss'] }] }], function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: undefined, decorators: [{ @@ -33147,9 +33412,14 @@ function BookingResultItemComponent_ng_container_12_img_1_Template(rf, ctx) { if i0.ɵɵproperty("tooltip", i0.ɵɵpureFunction0(1, _c0)); } } function BookingResultItemComponent_ng_container_12_span_6_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "span", 29); - i0.ɵɵtext(1, " Multiroom "); + i0.ɵɵelementStart(0, "span", 25); + i0.ɵɵtext(1); i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r14 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("ngClass", ctx_r14.viewModel.booking.merged ? "merged" : "multiroom"); + i0.ɵɵadvance(1); + i0.ɵɵtextInterpolate1(" ", (ctx_r14.viewModel.booking == null ? null : ctx_r14.viewModel.booking.merged) ? "Merged" : "Multiroom", " "); } } function BookingResultItemComponent_ng_container_12_Template(rf, ctx) { if (rf & 1) { const _r16 = i0.ɵɵgetCurrentView(); @@ -33161,7 +33431,7 @@ function BookingResultItemComponent_ng_container_12_Template(rf, ctx) { if (rf & i0.ɵɵelementStart(4, "span", 25); i0.ɵɵtext(5); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(6, BookingResultItemComponent_ng_container_12_span_6_Template, 2, 0, "span", 26); + i0.ɵɵtemplate(6, BookingResultItemComponent_ng_container_12_span_6_Template, 2, 2, "span", 26); i0.ɵɵelementStart(7, "button", 27); i0.ɵɵlistener("click", function BookingResultItemComponent_ng_container_12_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r16); const ctx_r15 = i0.ɵɵnextContext(); return ctx_r15.bookingSelect.emit(ctx_r15.viewModel); }); i0.ɵɵtext(8, "View Details"); @@ -33182,31 +33452,31 @@ function BookingResultItemComponent_ng_container_12_Template(rf, ctx) { if (rf & } } function BookingResultItemComponent_ng_container_13_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); - i0.ɵɵelement(1, "ngx-skeleton-loader", 30); + i0.ɵɵelement(1, "ngx-skeleton-loader", 29); i0.ɵɵelementContainerEnd(); } } function BookingResultItemComponent_ng_container_15_span_13_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span"); - i0.ɵɵelement(1, "img", 36); + i0.ɵɵelement(1, "img", 35); i0.ɵɵtext(2, "Catered"); i0.ɵɵelementEnd(); } } function BookingResultItemComponent_ng_container_15_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); - i0.ɵɵelementStart(1, "span", 31); - i0.ɵɵelement(2, "img", 32); + i0.ɵɵelementStart(1, "span", 30); + i0.ɵɵelement(2, "img", 31); i0.ɵɵtext(3); i0.ɵɵelementEnd(); i0.ɵɵelementStart(4, "span"); - i0.ɵɵelement(5, "img", 33); + i0.ɵɵelement(5, "img", 32); i0.ɵɵtext(6); i0.ɵɵelementEnd(); i0.ɵɵelementStart(7, "span"); - i0.ɵɵelement(8, "img", 34); + i0.ɵɵelement(8, "img", 33); i0.ɵɵtext(9); i0.ɵɵelementEnd(); i0.ɵɵelementStart(10, "span"); - i0.ɵɵelement(11, "img", 35); + i0.ɵɵelement(11, "img", 34); i0.ɵɵtext(12); i0.ɵɵelementEnd(); i0.ɵɵtemplate(13, BookingResultItemComponent_ng_container_15_span_13_Template, 3, 0, "span", 0); @@ -33228,11 +33498,11 @@ function BookingResultItemComponent_ng_container_15_Template(rf, ctx) { if (rf & } } function BookingResultItemComponent_ng_container_16_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); - i0.ɵɵelement(1, "ngx-skeleton-loader", 37); - i0.ɵɵelement(2, "ngx-skeleton-loader", 38); - i0.ɵɵelement(3, "ngx-skeleton-loader", 37); - i0.ɵɵelement(4, "ngx-skeleton-loader", 30); - i0.ɵɵelement(5, "ngx-skeleton-loader", 30); + i0.ɵɵelement(1, "ngx-skeleton-loader", 36); + i0.ɵɵelement(2, "ngx-skeleton-loader", 37); + i0.ɵɵelement(3, "ngx-skeleton-loader", 36); + i0.ɵɵelement(4, "ngx-skeleton-loader", 29); + i0.ɵɵelement(5, "ngx-skeleton-loader", 29); i0.ɵɵelementContainerEnd(); } } class BookingResultItemComponent extends base_1.BaseDirective { @@ -33350,7 +33620,7 @@ class BookingResultItemComponent extends base_1.BaseDirective { } exports.BookingResultItemComponent = BookingResultItemComponent; BookingResultItemComponent.ɵfac = function BookingResultItemComponent_Factory(t) { return new (t || BookingResultItemComponent)(i0.ɵɵdirectiveInject(i1.Store), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; -BookingResultItemComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BookingResultItemComponent, selectors: [["app-booking-result-item"]], inputs: { viewModel: "viewModel", bookings: "bookings", list: "list", index: "index", small: "small" }, outputs: { bookingSelect: "bookingSelect" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 17, vars: 13, consts: [[4, "ngIf"], [1, "mck-row", "result-container"], [1, "result-row", "datetime"], [1, "card"], [1, "result-row", "status", 3, "ngClass"], ["class", "mck-skeleton-status", 4, "ngIf"], [1, "result-row", "panel"], ["class", "mobile-only-cta", 3, "click", 4, "ngIf"], [1, "result-row", "title"], [1, "result-row", "text"], [1, "status-block"], [1, "booking-tz-display"], ["class", "local-tz-display", 4, "ngIf"], [1, "local-tz-display"], [1, "mck-skeleton-line-80p"], [1, "mck-skeleton-line-2"], [1, "mck-skeleton-line-30p"], [1, "message"], [3, "src"], [1, "time"], [1, "mck-skeleton-status"], [1, "mobile-only-cta", 3, "click"], ["alt", "Right Arrow", "aria-label", "Details Arrow", 1, "right-arrow"], ["trigger", "hover", "position", "below", "class", "recurring-info-icon", "src", "assets/icon/recurring-data-icon.svg", 3, "tooltip", 4, "ngIf"], [1, "type-title"], [1, "type-text", 3, "ngClass"], ["class", "type-text multiroom", 4, "ngIf"], ["mat-ripple", "", 3, "click"], ["trigger", "hover", "position", "below", "src", "assets/icon/recurring-data-icon.svg", 1, "recurring-info-icon", 3, "tooltip"], [1, "type-text", "multiroom"], [1, "mck-skeleton-line-50p"], ["trigger", "hover", "position", "below", 3, "tooltip"], ["src", "assets/icon/room-icon.svg"], ["src", "assets/icon/location-icon.svg"], ["src", "assets/icon/host-icon.svg"], ["src", "assets/icon/attendees-icon.svg"], ["src", "assets/icon/catering-icon.svg"], [1, "mck-skeleton-line-3"], [1, "mck-skeleton-line-70p"]], template: function BookingResultItemComponent_Template(rf, ctx) { if (rf & 1) { +BookingResultItemComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BookingResultItemComponent, selectors: [["app-booking-result-item"]], inputs: { viewModel: "viewModel", bookings: "bookings", list: "list", index: "index", small: "small" }, outputs: { bookingSelect: "bookingSelect" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 17, vars: 13, consts: [[4, "ngIf"], [1, "mck-row", "result-container"], [1, "result-row", "datetime"], [1, "card"], [1, "result-row", "status", 3, "ngClass"], ["class", "mck-skeleton-status", 4, "ngIf"], [1, "result-row", "panel"], ["class", "mobile-only-cta", 3, "click", 4, "ngIf"], [1, "result-row", "title", "tag"], [1, "result-row", "text"], [1, "status-block"], [1, "booking-tz-display"], ["class", "local-tz-display", 4, "ngIf"], [1, "local-tz-display"], [1, "mck-skeleton-line-80p"], [1, "mck-skeleton-line-2"], [1, "mck-skeleton-line-30p"], [1, "message"], [3, "src"], [1, "time"], [1, "mck-skeleton-status"], [1, "mobile-only-cta", 3, "click"], ["alt", "Right Arrow", "aria-label", "Details Arrow", 1, "right-arrow"], ["trigger", "hover", "position", "below", "class", "recurring-info-icon", "src", "assets/icon/recurring-data-icon.svg", 3, "tooltip", 4, "ngIf"], [1, "type-title"], [1, "type-text", 3, "ngClass"], ["class", "type-text ", 3, "ngClass", 4, "ngIf"], ["mat-ripple", "", 3, "click"], ["trigger", "hover", "position", "below", "src", "assets/icon/recurring-data-icon.svg", 1, "recurring-info-icon", 3, "tooltip"], [1, "mck-skeleton-line-50p"], ["trigger", "hover", "position", "below", 3, "tooltip"], ["src", "assets/icon/room-icon.svg"], ["src", "assets/icon/location-icon.svg"], ["src", "assets/icon/host-icon.svg"], ["src", "assets/icon/attendees-icon.svg"], ["src", "assets/icon/catering-icon.svg"], [1, "mck-skeleton-line-3"], [1, "mck-skeleton-line-70p"]], template: function BookingResultItemComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵtemplate(0, BookingResultItemComponent_h3_0_Template, 4, 2, "h3", 0); i0.ɵɵelementStart(1, "div", 1); i0.ɵɵelementStart(2, "div", 2); @@ -33399,7 +33669,7 @@ BookingResultItemComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BookingResultI i0.ɵɵproperty("ngIf", ctx.hasData()); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", !ctx.hasData()); - } }, directives: [i2.NgIf, i2.NgClass, i3.NgxSkeletonLoaderComponent, i4.MatRipple, i5.TooltipDirective], styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\nh3[_ngcontent-%COMP%] {\n color: #000000;\n font-family: \"McKinsey Sans\";\n font-size: 24px;\n font-weight: 500;\n padding: 20px 0 0 0;\n margin: 0;\n}\nh3[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-weight: 100;\n}\n.result-container[_ngcontent-%COMP%] {\n width: 100%;\n padding: 0;\n display: block;\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n position: relative;\n}\n.result-container[_ngcontent-%COMP%] .card[_ngcontent-%COMP%]:hover {\n box-shadow: rgba(0, 0, 0, 0.2) 0px 2px 21px;\n transition: box-shadow 0.3s ease-in-out;\n cursor: pointer;\n}\n.result-container[_ngcontent-%COMP%] .result-row[_ngcontent-%COMP%] {\n width: 100%;\n padding: 0;\n position: relative;\n display: block;\n clear: both;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n font-weight: normal;\n font-size: 16px;\n line-height: 20px;\n}\n.result-container[_ngcontent-%COMP%] .result-row[_ngcontent-%COMP%] img.recurring-info-icon[_ngcontent-%COMP%] {\n width: 20px;\n margin-right: 14px;\n vertical-align: middle;\n}\n.result-container[_ngcontent-%COMP%] .result-row.datetime[_ngcontent-%COMP%] {\n padding: 15px 0;\n color: #000;\n font-size: 18px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.datetime[_ngcontent-%COMP%] .status-block[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n.result-container[_ngcontent-%COMP%] .result-row.datetime[_ngcontent-%COMP%] .status-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n}\n.result-container[_ngcontent-%COMP%] .result-row.datetime[_ngcontent-%COMP%] .status-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n.result-container[_ngcontent-%COMP%] .result-row.status[_ngcontent-%COMP%] {\n padding: 16px 18px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n position: relative;\n font-size: 16px;\n line-height: 24px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .message[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n}\n.result-container[_ngcontent-%COMP%] .result-row.status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .message[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 20px;\n vertical-align: sub;\n margin-right: 5px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .time[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n position: absolute;\n top: 0;\n right: 0;\n}\n.result-container[_ngcontent-%COMP%] .result-row.status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n min-width: 88px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.panel[_ngcontent-%COMP%] {\n padding: 20px 18px;\n background-color: white;\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2);\n}\n.result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] {\n color: #000;\n font-weight: 500;\n font-size: 18px;\n width: 100%;\n position: relative;\n line-height: 26px;\n display: flex;\n padding-right: 120px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-text[_ngcontent-%COMP%] {\n margin-left: 15px;\n border-radius: 4px;\n padding: 0 10px;\n font-family: \"McKinsey Sans\";\n font-size: 14px;\n color: #333333;\n max-height: 24px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-text.internal[_ngcontent-%COMP%] {\n background-color: #033B6F;\n color: white;\n}\n.result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-text.external[_ngcontent-%COMP%] {\n background-color: #FAA082;\n}\n.result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-text.partner[_ngcontent-%COMP%] {\n background-color: #39BDF3;\n}\n.result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-text.multiroom[_ngcontent-%COMP%] {\n background-color: #FFD048;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-text[_ngcontent-%COMP%] {\n position: absolute;\n right: 0;\n top: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-text[_ngcontent-%COMP%] {\n position: absolute;\n right: 0;\n top: 0;\n }\n}\n.result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n position: absolute;\n right: 0;\n top: -6px;\n display: block;\n color: #333333;\n border: 1px solid #D0D0D0;\n background-color: transparent;\n padding: 6px 10px;\n font-size: 16px;\n line-height: 24px;\n cursor: pointer;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] {\n padding-right: 10px;\n }\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-title[_ngcontent-%COMP%] {\n width: calc(100% - 75px);\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] {\n padding-right: 10px;\n }\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-title[_ngcontent-%COMP%] {\n width: calc(100% - 75px);\n }\n}\n.result-container[_ngcontent-%COMP%] .result-row.text[_ngcontent-%COMP%] {\n color: #333333;\n padding: 18px 10px 0 0;\n}\n.result-container[_ngcontent-%COMP%] .result-row.text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n display: inline-block;\n padding: 3px 12px;\n border-right: 1px solid #979797;\n}\n.result-container[_ngcontent-%COMP%] .result-row.text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n margin-right: 5px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.text[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:nth-child(1) {\n padding-left: 0;\n}\n.result-container[_ngcontent-%COMP%] .result-row.text[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:last-child {\n border-right: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .result-container[_ngcontent-%COMP%] .result-row.text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: block;\n clear: both;\n border: 0;\n padding: 3px 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .result-container[_ngcontent-%COMP%] .result-row.text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: block;\n clear: both;\n border: 0;\n padding: 3px 0;\n }\n}\n.result-container[_ngcontent-%COMP%] .result-row[_ngcontent-%COMP%] .mobile-only-cta[_ngcontent-%COMP%] {\n display: none;\n z-index: 2;\n position: absolute;\n right: 0;\n top: 0;\n width: 100%;\n height: 100%;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .result-container[_ngcontent-%COMP%] .result-row[_ngcontent-%COMP%] .mobile-only-cta[_ngcontent-%COMP%] {\n display: block;\n cursor: pointer;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .result-container[_ngcontent-%COMP%] .result-row[_ngcontent-%COMP%] .mobile-only-cta[_ngcontent-%COMP%] {\n display: block;\n cursor: pointer;\n }\n}\n.result-container[_ngcontent-%COMP%] .result-row[_ngcontent-%COMP%] .mobile-only-cta[_ngcontent-%COMP%] .right-arrow[_ngcontent-%COMP%] {\n position: absolute;\n right: 10px;\n top: 72px;\n}\n.right-arrow[_ngcontent-%COMP%] {\n width: 30px !important;\n height: 30px !important;\n width: 24px;\n height: 24px;\n background-image: url('arrow-right.svg');\n background-size: contain;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .right-arrow[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('arrow-right-large.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .right-arrow[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('arrow-right-large.svg');\n background-size: contain;\n }\n}\n.booking-tz-display[_ngcontent-%COMP%] {\n font-size: 1.25rem;\n}\n.local-tz-display[_ngcontent-%COMP%] {\n font-size: 1rem;\n color: #757575;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLXJlc3VsdC1pdGVtL2Jvb2tpbmctcmVzdWx0LWl0ZW0uY29tcG9uZW50LnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9ub2RlX21vZHVsZXMvQGFuZ3VsYXIvbWF0ZXJpYWwvX3RoZW1pbmcuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2FwcHMvc3RhZmYvc3JjL2FwcC9ib29raW5nL2Jvb2tpbmctcmVzdWx0LWl0ZW0vYm9va2luZy1yZXN1bHQtaXRlbS5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNpbENBLGtDQUFBO0FBdWlEQSwyQ0FBQTtBQXdDQSxxQkFBQTtBQ2wrRkE7RUFDSSxjQUFBO0VBQ0EsNEJGa0ZpQjtFRWpGakIsZUFBQTtFQUNBLGdCQUFBO0VBQ0EsbUJBQUE7RUFDQSxTQUFBO0FIb0JKO0FHbkJJO0VBQ0ksZ0JBQUE7QUhxQlI7QUdsQkE7RUFDSSxXQUFBO0VBQ0EsVUFBQTtFQUNBLGNBQUE7RUR5ZEYsd0hBQUE7RUN2ZEUsa0JBQUE7QUhxQko7QUdwQkk7RUFDSSwyQ0FBQTtFQUNBLHVDQUFBO0VBQ0EsZUFBQTtBSHNCUjtBR3BCSTtFQUNJLFdBQUE7RUFDQSxVQUFB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QUFBO0VBQ0EsdUJBQUE7RUZtSUEsV0YzT1U7RUU0T1YsWUY1T1U7RUU2T1Ysd0NBQUE7RUFDQSx3QkFBQTtBRDVFSjtBQ25RWTtFRXVNWjtJRnFJSSxXRnpPVTtJRTBPVixZRjFPVTtJRTJPViw4Q0FBQTtJQUNBLHdCQUFBO0VEckVGO0FBQ0Y7QUMzUVk7RUV1TVo7SUZxSUksV0Z6T1U7SUUwT1YsWUYxT1U7SUUyT1YsOENBQUE7SUFDQSx3QkFBQTtFRDdERjtBQUNGO0FHbkVBO0VBQ0ksa0JBQUE7QUhzRUo7QUduRUE7RUFDSSxlQUFBO0VBQ0EsY0FBQTtBSHNFSiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLXJlc3VsdC1pdGVtL2Jvb2tpbmctcmVzdWx0LWl0ZW0uY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIkcHJpbWFyeTogIzFGNDBFNjtcbiRmb3JtLWxhYmVsOiAjMDUxQzJDO1xuJHNlY29uZGFyeS1sYWJlbDogIzc2NzY3NjtcbiRib3JkZXI6ICNCM0IzQjM7XG4kYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDogI0QwRDBEMDtcbiRjaGlwLWNvbG9yOiAjMzMzMzMzO1xuJHBsYWNlaG9sZGVyLWNvbG9yOiAjN0Y3RjdGO1xuJGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4kcGFnZS1iYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuJHNlbGVjdGVkLW9wdGlvbjogI0U2RTZFNjtcbiRjb2xvci1icmFuZC15ZWxsb3c6ICNmZmQwNDg7XG4kbGlnaHQteWVsbG93OiAjZmZmM2NlO1xuJGNvYWNobWFyay10ZXh0OiAjNmY0ZDAwO1xuJGVycm9yLWNvbG9yOiAjRTEyRTQwO1xuJG5vLWZpbHRlcnMtY29sb3I6ICNCQ0JDQkM7XG4kcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I6ICNGNEY0RjQ7XG4kcHJpbWFyeS1oaWdobGlnaHQ6ICMyMjUxRkY7XG4kc2Nyb2xsYmFyLWNvbG9yOiAjNzU3NTc1O1xuXG4kYXZhaWxhYmxlLWNvbG9yOiAjNUQ5RDUyO1xuJGF2YWlsYWJsZS1ieS1yZXF1ZXN0LWNvbG9yOiAjRjVCNTNGO1xuJGluLXVzZS1jb2xvcjogI0Q0NDgzRTtcbiRub3QtYm9va2FibGUtY29sb3I6ICNDQ0NDQ0M7XG5cbiRtb2RhbC1ib2R5LWhlYWRpbmc6ICM0RDRENEQ7XG4kYWxlcnQtb3ZlcmxheS1iZzogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2FjaG1hcmstYmc6ICNFQkVCRjY7XG4kY29hY2htYXJrLWRhcmstdGV4dDogIzFCMUIxOTtcbiRlcnJvci10ZXh0OiAjZmZmO1xuXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuXG4vLyA0cHhcbiRzcGFjaW5nLXNtYWxsZXN0OiAwLjI1cmVtO1xuXG4vLyA4cHhcbiRzcGFjaW5nLXh4c21hbGw6IDAuNXJlbTtcblxuLy8gMTJweFxuJHNwYWNpbmcteHNtYWxsOiAwLjc1cmVtO1xuXG4vLyAxNnB4XG4kc3BhY2luZy1zbWFsbDogMXJlbTtcblxuLy8gMjBweFxuJHNwYWNpbmctc21hbGwtbWVkaXVtOiAxLjI1cmVtO1xuXG4vLyAyNHB4XG4kc3BhY2luZy1tZWRpdW06IDEuNXJlbTtcblxuLy8gMjhweFxuJHNwYWNpbmctbWVkaXVtLWxhcmdlOiAxLjc1cmVtO1xuXG4vLyAzMnB4XG4kc3BhY2luZy1sYXJnZTogMnJlbTtcblxuLy8gNDhweFxuJHNwYWNpbmcteGxhcmdlOiAzcmVtO1xuXG4vLyA2NHB4XG4kc3BhY2luZy14eGxhcmdlOiA0cmVtO1xuXG4vLyA5NnB4XG4kc3BhY2luZy1sYXJnZXN0OiA2cmVtO1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGRldmljZS1tb2JpbGUtc2l6ZTogNDUwcHg7XG4kZGV2aWNlLXRhYmxldC1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFwdG9wLXNpemU6IDEwMjRweDtcblxuJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemU6IDgwMHB4O1xuJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemU6IDEwNDhweDtcbiRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplOiAxMjgwcHg7XG5cblxuOmV4cG9ydCB7XG4gICAgcHJpbWFyeTogJHByaW1hcnk7XG4gICAgc2Vjb25kYXJ5TGFiZWw6ICRzZWNvbmRhcnktbGFiZWw7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4kaWNvbi1zbWFsbDogMTZweDtcbiRpY29uLW1lZGl1bTogMjRweDtcbiRpY29uLWxhcmdlOiAzMnB4O1xuJGljb24teGxhcmdlOiA0OHB4O1xuIiwiLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG4vKiBUaGVtZSBmb3IgdGhlIHJpcHBsZSBlbGVtZW50cy4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF0ZXJpYWwvbm8tcHJlZml4ZXMgKi9cbi8qIHN0eWxlbGludC1lbmFibGUgKi9cbmgzIHtcbiAgY29sb3I6ICMwMDAwMDA7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgZm9udC1zaXplOiAyNHB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBwYWRkaW5nOiAyMHB4IDAgMCAwO1xuICBtYXJnaW46IDA7XG59XG5oMyBzcGFuIHtcbiAgZm9udC13ZWlnaHQ6IDEwMDtcbn1cblxuLnJlc3VsdC1jb250YWluZXIge1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJveC1zaGFkb3c6IDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLnJlc3VsdC1jb250YWluZXIgLmNhcmQ6aG92ZXIge1xuICBib3gtc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMikgMHB4IDJweCAyMXB4O1xuICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuM3MgZWFzZS1pbi1vdXQ7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93IHtcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGNsZWFyOiBib3RoO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBsaW5lLWhlaWdodDogMjBweDtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93IGltZy5yZWN1cnJpbmctaW5mby1pY29uIHtcbiAgd2lkdGg6IDIwcHg7XG4gIG1hcmdpbi1yaWdodDogMTRweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LmRhdGV0aW1lIHtcbiAgcGFkZGluZzogMTVweCAwO1xuICBjb2xvcjogIzAwMDtcbiAgZm9udC1zaXplOiAxOHB4O1xufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cuZGF0ZXRpbWUgLnN0YXR1cy1ibG9jayB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LmRhdGV0aW1lIC5zdGF0dXMtYmxvY2sgPiBkaXYge1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy5kYXRldGltZSAuc3RhdHVzLWJsb2NrID4gZGl2IHNwYW4ge1xuICBmb250LXdlaWdodDogNTAwO1xufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cuc3RhdHVzIHtcbiAgcGFkZGluZzogMTZweCAxOHB4O1xufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cuc3RhdHVzID4gZGl2IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cuc3RhdHVzID4gZGl2IC5tZXNzYWdlIHtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cuc3RhdHVzID4gZGl2IC5tZXNzYWdlIGltZyB7XG4gIHdpZHRoOiAyMHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogc3ViO1xuICBtYXJnaW4tcmlnaHQ6IDVweDtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnN0YXR1cyA+IGRpdiAudGltZSB7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cuc3RhdHVzID4gZGl2IHAge1xuICBtYXJnaW46IDA7XG4gIG1pbi13aWR0aDogODhweDtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnBhbmVsIHtcbiAgcGFkZGluZzogMjBweCAxOHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm94LXNoYWRvdzogMHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMik7XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSB7XG4gIGNvbG9yOiAjMDAwO1xuICBmb250LXdlaWdodDogNTAwO1xuICBmb250LXNpemU6IDE4cHg7XG4gIHdpZHRoOiAxMDAlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGxpbmUtaGVpZ2h0OiAyNnB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nLXJpZ2h0OiAxMjBweDtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnRpdGxlIC50eXBlLXRleHQge1xuICBtYXJnaW4tbGVmdDogMTVweDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBwYWRkaW5nOiAwIDEwcHg7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBjb2xvcjogIzMzMzMzMztcbiAgbWF4LWhlaWdodDogMjRweDtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnRpdGxlIC50eXBlLXRleHQuaW50ZXJuYWwge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDMzQjZGO1xuICBjb2xvcjogd2hpdGU7XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSAudHlwZS10ZXh0LmV4dGVybmFsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0ZBQTA4Mjtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnRpdGxlIC50eXBlLXRleHQucGFydG5lciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzOUJERjM7XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSAudHlwZS10ZXh0Lm11bHRpcm9vbSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGRkQwNDg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSAudHlwZS10ZXh0IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IDA7XG4gICAgdG9wOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cudGl0bGUgLnR5cGUtdGV4dCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAwO1xuICAgIHRvcDogMDtcbiAgfVxufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cudGl0bGUgYnV0dG9uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMDtcbiAgdG9wOiAtNnB4O1xuICBkaXNwbGF5OiBibG9jaztcbiAgY29sb3I6ICMzMzMzMzM7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBwYWRkaW5nOiA2cHggMTBweDtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBsaW5lLWhlaWdodDogMjRweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSBidXR0b24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSBidXR0b24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnRpdGxlIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xuICB9XG4gIC5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnRpdGxlIC50eXBlLXRpdGxlIHtcbiAgICB3aWR0aDogY2FsYygxMDAlIC0gNzVweCk7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSB7XG4gICAgcGFkZGluZy1yaWdodDogMTBweDtcbiAgfVxuICAucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSAudHlwZS10aXRsZSB7XG4gICAgd2lkdGg6IGNhbGMoMTAwJSAtIDc1cHgpO1xuICB9XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50ZXh0IHtcbiAgY29sb3I6ICMzMzMzMzM7XG4gIHBhZGRpbmc6IDE4cHggMTBweCAwIDA7XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50ZXh0IHNwYW4ge1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogM3B4IDEycHg7XG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICM5Nzk3OTc7XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50ZXh0IHNwYW4gaW1nIHtcbiAgbWFyZ2luLXJpZ2h0OiA1cHg7XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50ZXh0IHNwYW46bnRoLWNoaWxkKDEpIHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cudGV4dCBzcGFuOmxhc3QtY2hpbGQge1xuICBib3JkZXItcmlnaHQ6IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50ZXh0IHNwYW4ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGNsZWFyOiBib3RoO1xuICAgIGJvcmRlcjogMDtcbiAgICBwYWRkaW5nOiAzcHggMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnRleHQgc3BhbiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgY2xlYXI6IGJvdGg7XG4gICAgYm9yZGVyOiAwO1xuICAgIHBhZGRpbmc6IDNweCAwO1xuICB9XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdyAubW9iaWxlLW9ubHktY3RhIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgei1pbmRleDogMjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMDtcbiAgdG9wOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cgLm1vYmlsZS1vbmx5LWN0YSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cgLm1vYmlsZS1vbmx5LWN0YSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdyAubW9iaWxlLW9ubHktY3RhIC5yaWdodC1hcnJvdyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDEwcHg7XG4gIHRvcDogNzJweDtcbn1cblxuLnJpZ2h0LWFycm93IHtcbiAgd2lkdGg6IDMwcHggIWltcG9ydGFudDtcbiAgaGVpZ2h0OiAzMHB4ICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiAyNHB4O1xuICBoZWlnaHQ6IDI0cHg7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9hcnJvdy1yaWdodC5zdmdcIik7XG4gIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5yaWdodC1hcnJvdyB7XG4gICAgd2lkdGg6IDQ4cHg7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9hcnJvdy1yaWdodC1sYXJnZS5zdmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLnJpZ2h0LWFycm93IHtcbiAgICB3aWR0aDogNDhweDtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwibGlicy91aS9zcmMvbGliL2ljb25zL2Fycm93LXJpZ2h0LWxhcmdlLnN2Z1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIH1cbn1cblxuLmJvb2tpbmctdHotZGlzcGxheSB7XG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcbn1cblxuLmxvY2FsLXR6LWRpc3BsYXkge1xuICBmb250LXNpemU6IDFyZW07XG4gIGNvbG9yOiAjNzU3NTc1O1xufSIsIkBpbXBvcnQgXCJ2YXJzXCI7XG5cbkBtaXhpbiBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRzaXplLCAkcXVhbGlmaWVyKSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAaWYgKCRxdWFsaWZpZXIgPT0gbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSBpZiAoJHF1YWxpZmllciA9PSBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWF4LXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5AbWl4aW4gYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRtaW4sICRtYXgpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkbWluKSBhbmQgKG1heC13aWR0aDogJG1heCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIHRoaXMgaXMgYSBjb3B5IG9mIHJlc3BvbmQtdG8uIHdlIGRvbid0IHdhbnQgdG8gcHJlc2VydmUgdGhhdCBtZXRob2Qgc2luY2UgdGhlIGJyZWFrcG9pbnRzIG1heSBkaXZlcmdlIGZyb20gdGhlIG9sZCBVSS5cbkBtaXhpbiBpcy1zY3JlZW4tc2l6ZSgkbWVkaWE6IGFsbCwgJG9yaWVudGF0aW9uOiBub25lKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cblxuQG1peGluIHBhZ2UtcGFkZGluZyB7XG4gICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbDtcbn1cblxuLy8gRm9udCBNaXhpbnNcbiRmb250LW1ja2luc2V5LXNhbnM6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuJGZvbnQtdGhlaW5oYXJkdDogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4kZm9udC1ib3dlcjogXCJCb3dlclwiO1xuXG5AbWl4aW4gYm93ZXItYm9sZCB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWJvd2VyO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBtY2tpbnNleS1zYW5zIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gZGlzcGxheS0xIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiA0cmVtOyAvLyA2NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4NzsgLy8gNzZweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMiB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDYwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS00IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogM3JlbTsgLy8gNDhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE2NjsgLy8gNTZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS01IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjgzMzsgLy8gMzRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjQyOyAvLyA0MHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS03IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyOHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTEge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA0OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi43NXJlbTsgLy8gNDRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDUycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTIge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTExOyAvLyA0NHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNDhweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMyB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIyMjsgLy8gNDRweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjg4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1NTsgLy8gMjhweFxuICAgIH1cbn1cblxuQG1peGluIGJvZHktZGVmYXVsdCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNnB4XG4gICAgfVxufVxuXG4vLy8gRG9lc250IGV4aXN0IGluIE1EUy5cbkBtaXhpbiBib2R5LXRpbnkge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtOyAvLyAxMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjRweFxuICAgIH1cbn1cblxuQG1peGluIGZvcm0tbGFiZWwge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LXRoZWluaGFyZHQ7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGNvbG9yOiAkcGxhY2Vob2xkZXItY29sb3I7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbn1cblxuQG1peGluIGNoaXAtbGFiZWwge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBjaGVja2JveC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGNvbG9yOiBibGFjaztcbn1cblxuLy8gYm9yZGVyc1xuXG5AbWl4aW4gbWNrLWNoZWNrYm94LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay10aGluLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXItbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBib3JkZXItY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudC1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuXG4vLyBmdW5jdGlvbnNcblxuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG5AbWl4aW4gbWF4LWxpbmVzKCRjb3VudCkge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiAkY291bnQ7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbn1cblxuLy8gaW1hZ2VzXG5AbWl4aW4gbWNrLWljb24oJHdpZHRoLCAkYXNzZXQsICRoZWlnaHQ6ICR3aWR0aCwgICRhc3NldFBhdGg6IFwibGlicy91aS9zcmMvbGliL2ljb25zXCIsKSB7XG4gICAgd2lkdGg6ICR3aWR0aDtcbiAgICBoZWlnaHQ6ICRoZWlnaHQ7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiI3skYXNzZXRQYXRofS8jeyRhc3NldH1cIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuXG5cbkBtaXhpbiBtY2stc21hbGwtaWNvbigkbW9iaWxlLWFzc2V0LCAkZGVza3RvcC1hc3NldDogJG1vYmlsZS1hc3NldCkge1xuICAgIEBpbmNsdWRlIG1jay1pY29uKDE2cHgsICRhc3NldDogJG1vYmlsZS1hc3NldCk7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICRhc3NldDogJGRlc2t0b3AtYXNzZXQpO1xuICAgIH1cbn1cblxuLy8gc2tlbGV0b25cbkBtaXhpbiBza2VsZXRvbi1iZyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWltYWdlLXNpemUge1xuICAgIHdpZHRoOiA4MXB4O1xuICAgIGhlaWdodDogODJweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDIxOXB4O1xuICAgICAgICBoZWlnaHQ6IDExOXB4O1xuICAgIH1cbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLXN0YXR1cy1zaXplIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMTE3cHg7XG4gICAgICAgIGhlaWdodDogNzhweDtcbiAgICB9XG59XG4iLCIvLyBJbXBvcnQgYWxsIHRoZSB0aGVtaW5nIGZ1bmN0aW9uYWxpdHkuXG4vLyBXZSB3YW50IG92ZXJsYXlzIHRvIGFsd2F5cyBhcHBlYXIgb3ZlciB1c2VyIGNvbnRlbnQsIHNvIHNldCBhIGJhc2VsaW5lXG4vLyB2ZXJ5IGhpZ2ggei1pbmRleCBmb3IgdGhlIG92ZXJsYXkgY29udGFpbmVyLCB3aGljaCBpcyB3aGVyZSB3ZSBjcmVhdGUgdGhlIG5ld1xuLy8gc3RhY2tpbmcgY29udGV4dCBmb3IgYWxsIG92ZXJsYXlzLlxuJGNkay16LWluZGV4LW92ZXJsYXktY29udGFpbmVyOiAxMDAwICFkZWZhdWx0O1xuJGNkay16LWluZGV4LW92ZXJsYXk6IDEwMDAgIWRlZmF1bHQ7XG4kY2RrLXotaW5kZXgtb3ZlcmxheS1iYWNrZHJvcDogMTAwMCAhZGVmYXVsdDtcblxuLy8gQmFja2dyb3VuZCBjb2xvciBmb3IgYWxsIG9mIHRoZSBiYWNrZHJvcHNcbiRjZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wLWJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4zMikgIWRlZmF1bHQ7XG5cbi8vIERlZmF1bHQgYmFja2Ryb3AgYW5pbWF0aW9uIGlzIGJhc2VkIG9uIHRoZSBNYXRlcmlhbCBEZXNpZ24gc3dpZnQtZWFzZS1vdXQuXG4kYmFja2Ryb3AtYW5pbWF0aW9uLWR1cmF0aW9uOiA0MDBtcyAhZGVmYXVsdDtcbiRiYWNrZHJvcC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSAhZGVmYXVsdDtcblxuXG5AbWl4aW4gY2RrLW92ZXJsYXkoKSB7XG4gIC5jZGstb3ZlcmxheS1jb250YWluZXIsIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlciB7XG4gICAgLy8gRGlzYWJsZSBldmVudHMgZnJvbSBiZWluZyBjYXB0dXJlZCBvbiB0aGUgb3ZlcmxheSBjb250YWluZXIuXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5cbiAgICAvLyBUaGUgY29udGFpbmVyIHNob3VsZCBiZSB0aGUgc2l6ZSBvZiB0aGUgdmlld3BvcnQuXG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG5cbiAgLy8gVGhlIG92ZXJsYXktY29udGFpbmVyIGlzIGFuIGludmlzaWJsZSBlbGVtZW50IHdoaWNoIGNvbnRhaW5zIGFsbCBpbmRpdmlkdWFsIG92ZXJsYXlzLlxuICAuY2RrLW92ZXJsYXktY29udGFpbmVyIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgei1pbmRleDogJGNkay16LWluZGV4LW92ZXJsYXktY29udGFpbmVyO1xuXG4gICAgJjplbXB0eSB7XG4gICAgICAvLyBIaWRlIHRoZSBlbGVtZW50IHdoZW4gaXQgZG9lc24ndCBoYXZlIGFueSBjaGlsZCBub2Rlcy4gVGhpcyBkb2Vzbid0XG4gICAgICAvLyBpbmNsdWRlIG92ZXJsYXlzIHRoYXQgaGF2ZSBiZWVuIGRldGFjaGVkLCByYXRoZXIgdGhhbiBkaXNwb3NlZC5cbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgLy8gV2UgdXNlIGFuIGV4dHJhIHdyYXBwZXIgZWxlbWVudCBpbiBvcmRlciB0byB1c2UgbWFrZSB0aGUgb3ZlcmxheSBpdHNlbGYgYSBmbGV4IGl0ZW0uXG4gIC8vIFRoaXMgbWFrZXMgY2VudGVyaW5nIHRoZSBvdmVybGF5IGVhc3kgd2l0aG91dCBydW5uaW5nIGludG8gdGhlIHN1YnBpeGVsIHJlbmRlcmluZ1xuICAvLyBwcm9ibGVtcyB0aWVkIHRvIHVzaW5nIGB0cmFuc2Zvcm1gIGFuZCB3aXRob3V0IGludGVyZmVyaW5nIHdpdGggdGhlIG90aGVyIHBvc2l0aW9uXG4gIC8vIHN0cmF0ZWdpZXMuXG4gIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogJGNkay16LWluZGV4LW92ZXJsYXk7XG4gIH1cblxuICAvLyBBIHNpbmdsZSBvdmVybGF5IHBhbmUuXG4gIC5jZGstb3ZlcmxheS1wYW5lIHtcbiAgICAvLyBOb3RlOiBpdCdzIGltcG9ydGFudCBmb3IgdGhpcyBvbmUgdG8gc3RhcnQgb2ZmIGBhYnNvbHV0ZWAsXG4gICAgLy8gaW4gb3JkZXIgZm9yIHVzIHRvIGJlIGFibGUgdG8gbWVhc3VyZSBpdCBjb3JyZWN0bHkuXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgei1pbmRleDogJGNkay16LWluZGV4LW92ZXJsYXk7XG5cbiAgICAvLyBGb3IgY29ubmVjdGVkLXBvc2l0aW9uIG92ZXJsYXlzLCB3ZSBzZXQgYGRpc3BsYXk6IGZsZXhgIGluXG4gICAgLy8gb3JkZXIgdG8gZm9yY2UgYG1heC13aWR0aGAgYW5kIGBtYXgtaGVpZ2h0YCB0byB0YWtlIGVmZmVjdC5cbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuICB9XG5cbiAgLmNkay1vdmVybGF5LWJhY2tkcm9wIHtcbiAgICAvLyBUT0RPKGplbGJvdXJuKTogcmV1c2Ugc2lkZW5hdiBmdWxsc2NyZWVuIG1peGluLlxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG5cbiAgICB6LWluZGV4OiAkY2RrLXotaW5kZXgtb3ZlcmxheS1iYWNrZHJvcDtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgJGJhY2tkcm9wLWFuaW1hdGlvbi1kdXJhdGlvbiAkYmFja2Ryb3AtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjtcbiAgICBvcGFjaXR5OiAwO1xuXG4gICAgJi5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIHtcbiAgICAgIG9wYWNpdHk6IDE7XG5cbiAgICAgIC8vIEluIGhpZ2ggY29udHJhc3QgbW9kZSB0aGUgcmdiYSBiYWNrZ3JvdW5kIHdpbGwgYmVjb21lIHNvbGlkIHNvIHdlIG5lZWQgdG8gZmFsbCBiYWNrXG4gICAgICAvLyB0byBtYWtpbmcgaXQgb3BhcXVlIHVzaW5nIGBvcGFjaXR5YC4gTm90ZSB0aGF0IHdlIGNhbid0IHVzZSB0aGUgYGNkay1oaWdoLWNvbnRyYXN0YFxuICAgICAgLy8gbWl4aW4sIGJlY2F1c2Ugd2UgY2FuJ3Qgbm9ybWFsaXplIHRoZSBpbXBvcnQgcGF0aCB0byB0aGUgX2ExMXkuc2NzcyBib3RoIGZvciB0aGVcbiAgICAgIC8vIHNvdXJjZSBhbmQgd2hlbiB0aGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQuIFNlZSAjMTA5MDguXG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSkge1xuICAgICAgICBvcGFjaXR5OiAwLjY7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3Age1xuICAgIGJhY2tncm91bmQ6ICRjZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wLWJhY2tncm91bmQ7XG4gIH1cblxuICAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3Age1xuICAgIC8vIE5vdGU6IGFzIG9mIEZpcmVmb3ggNTcsIGhhdmluZyB0aGUgYmFja2Ryb3AgYmUgYGJhY2tncm91bmQ6IG5vbmVgIHdpbGwgcHJldmVudCBpdCBmcm9tXG4gICAgLy8gY2FwdHVyaW5nIHRoZSB1c2VyJ3MgbW91c2Ugc2Nyb2xsIGV2ZW50cy4gU2luY2Ugd2UgYWxzbyBjYW4ndCB1c2Ugc29tZXRoaW5nIGxpa2VcbiAgICAvLyBgcmdiYSgwLCAwLCAwLCAwKWAsIHdlIHdvcmsgYXJvdW5kIHRoZSBpbmNvbnNpc3RlbmN5IGJ5IG5vdCBzZXR0aW5nIHRoZSBiYWNrZ3JvdW5kIGF0XG4gICAgLy8gYWxsIGFuZCB1c2luZyBgb3BhY2l0eWAgdG8gbWFrZSB0aGUgZWxlbWVudCB0cmFuc3BhcmVudC5cbiAgICAmLCAmLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmcge1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gIH1cblxuICAvLyBPdmVybGF5IHBhcmVudCBlbGVtZW50IHVzZWQgd2l0aCB0aGUgY29ubmVjdGVkIHBvc2l0aW9uIHN0cmF0ZWd5LiBVc2VkIHRvIGNvbnN0cmFpbiB0aGVcbiAgLy8gb3ZlcmxheSBlbGVtZW50J3Mgc2l6ZSB0byBmaXQgd2l0aGluIHRoZSB2aWV3cG9ydC5cbiAgLmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3gge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB6LWluZGV4OiAkY2RrLXotaW5kZXgtb3ZlcmxheTtcblxuICAgIC8vIFdlIHVzZSBgZGlzcGxheTogZmxleGAgb24gdGhpcyBlbGVtZW50IGV4Y2x1c2l2ZWx5IGZvciBjZW50ZXJpbmcgY29ubmVjdGVkIG92ZXJsYXlzLlxuICAgIC8vIFdoZW4gKm5vdCogY2VudGVyaW5nLCBhIHRvcC9sZWZ0L2JvdHRvbS9yaWdodCB3aWxsIGJlIHNldCB3aGljaCBvdmVycmlkZXMgdGhlIG5vcm1hbFxuICAgIC8vIGZsZXggbGF5b3V0LlxuICAgIGRpc3BsYXk6IGZsZXg7XG5cbiAgICAvLyBXZSB1c2UgdGhlIGBjb2x1bW5gIGRpcmVjdGlvbiBoZXJlIHRvIGF2b2lkIHNvbWUgZmxleGJveCBpc3N1ZXMgaW4gRWRnZVxuICAgIC8vIHdoZW4gdXNpbmcgdGhlIFwiZ3JvdyBhZnRlciBvcGVuXCIgb3B0aW9ucy5cbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG4gICAgLy8gQWRkIHNvbWUgZGltZW5zaW9ucyBzbyB0aGUgZWxlbWVudCBoYXMgYW4gYGlubmVyVGV4dGAgd2hpY2ggc29tZSBwZW9wbGUgZGVwZW5kIG9uIGluIHRlc3RzLlxuICAgIG1pbi13aWR0aDogMXB4O1xuICAgIG1pbi1oZWlnaHQ6IDFweDtcbiAgfVxuXG4gIC8vIFVzZWQgd2hlbiBkaXNhYmxpbmcgZ2xvYmFsIHNjcm9sbGluZy5cbiAgLmNkay1nbG9iYWwtc2Nyb2xsYmxvY2sge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcblxuICAgIC8vIE5lY2Vzc2FyeSBmb3IgdGhlIGNvbnRlbnQgbm90IHRvIGxvc2UgaXRzIHdpZHRoLiBOb3RlIHRoYXQgd2UncmUgdXNpbmcgMTAwJSwgaW5zdGVhZCBvZlxuICAgIC8vIDEwMHZ3LCBiZWNhdXNlIDEwMHZ3IGluY2x1ZGVzIHRoZSB3aWR0aCBwbHVzIHRoZSBzY3JvbGxiYXIsIHdoZXJlYXMgMTAwJSBpcyB0aGUgd2lkdGhcbiAgICAvLyB0aGF0IHRoZSBlbGVtZW50IGhhZCBiZWZvcmUgd2UgbWFkZSBpdCBgZml4ZWRgLlxuICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgLy8gTm90ZTogdGhpcyB3aWxsIGFsd2F5cyBhZGQgYSBzY3JvbGxiYXIgdG8gd2hhdGV2ZXIgZWxlbWVudCBpdCBpcyBvbiwgd2hpY2ggY2FuXG4gICAgLy8gcG90ZW50aWFsbHkgcmVzdWx0IGluIGRvdWJsZSBzY3JvbGxiYXJzLiBJdCBzaG91bGRuJ3QgYmUgYW4gaXNzdWUsIGJlY2F1c2Ugd2Ugd29uJ3RcbiAgICAvLyBibG9jayBzY3JvbGxpbmcgb24gYSBwYWdlIHRoYXQgZG9lc24ndCBoYXZlIGEgc2Nyb2xsYmFyIGluIHRoZSBmaXJzdCBwbGFjZS5cbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gIH1cbn1cblxuQG1peGluIGNkay1hMTF5IHtcbiAgLmNkay12aXN1YWxseS1oaWRkZW4ge1xuICAgIGJvcmRlcjogMDtcbiAgICBjbGlwOiByZWN0KDAgMCAwIDApO1xuICAgIGhlaWdodDogMXB4O1xuICAgIG1hcmdpbjogLTFweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHdpZHRoOiAxcHg7XG5cbiAgICAvLyBBdm9pZCBicm93c2VycyByZW5kZXJpbmcgdGhlIGZvY3VzIHJpbmcgaW4gc29tZSBjYXNlcy5cbiAgICBvdXRsaW5lOiAwO1xuXG4gICAgLy8gQXZvaWQgc29tZSBjYXNlcyB3aGVyZSB0aGUgYnJvd3NlciB3aWxsIHN0aWxsIHJlbmRlciB0aGUgbmF0aXZlIGNvbnRyb2xzIChzZWUgIzkwNDkpLlxuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7XG4gIH1cbn1cblxuLy8vIEVtaXRzIHRoZSBtaXhpbidzIGNvbnRlbnQgbmVzdGVkIHVuZGVyIGAkc2VsZWN0b3ItY29udGV4dGAgaWYgYCRzZWxlY3Rvci1jb250ZXh0YFxuLy8vIGlzIG5vbi1lbXB0eS5cbi8vLyBAcGFyYW0gc2VsZWN0b3ItY29udGV4dCBUaGUgc2VsZWN0b3IgdW5kZXIgd2hpY2ggdG8gbmVzdCB0aGUgbWl4aW4ncyBjb250ZW50LlxuQG1peGluIF9jZGstb3B0aW9uYWxseS1uZXN0LWNvbnRlbnQoJHNlbGVjdG9yLWNvbnRleHQpIHtcbiAgQGlmICgkc2VsZWN0b3ItY29udGV4dCA9PSAnJykge1xuICAgIEBjb250ZW50O1xuICB9XG4gIEBlbHNlIHtcbiAgICAjeyRzZWxlY3Rvci1jb250ZXh0fSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH1cbn1cblxuLy8vIEFwcGxpZXMgc3R5bGVzIGZvciB1c2VycyBpbiBoaWdoIGNvbnRyYXN0IG1vZGUuIE5vdGUgdGhhdCB0aGlzIG9ubHkgYXBwbGllc1xuLy8vIHRvIE1pY3Jvc29mdCBicm93c2Vycy4gQ2hyb21lIGNhbiBiZSBpbmNsdWRlZCBieSBjaGVja2luZyBmb3IgdGhlIGBodG1sW2hjXWBcbi8vLyBhdHRyaWJ1dGUsIGhvd2V2ZXIgQ2hyb21lIGhhbmRsZXMgaGlnaCBjb250cmFzdCBkaWZmZXJlbnRseS5cbi8vL1xuLy8vIEBwYXJhbSB0YXJnZXQgV2hpY2gga2luZCBvZiBoaWdoIGNvbnRyYXN0IHNldHRpbmcgdG8gdGFyZ2V0LiBEZWZhdWx0cyB0byBgYWN0aXZlYCwgY2FuIGJlXG4vLy8gICAgYHdoaXRlLW9uLWJsYWNrYCBvciBgYmxhY2stb24td2hpdGVgLlxuLy8vIEBwYXJhbSBlbmNhcHN1bGF0aW9uIFdoZXRoZXIgdG8gZW1pdCBzdHlsZXMgZm9yIHZpZXcgZW5jYXBzdWxhdGlvbi4gVmFsdWVzIGFyZTpcbi8vLyAgICAgKiBgb25gIC0gd29ya3MgZm9yIGBFbXVsYXRlZGAsIGBOYXRpdmVgLCBhbmQgYFNoYWRvd0RvbWBcbi8vLyAgICAgKiBgb2ZmYCAtIHdvcmtzIGZvciBgTm9uZWBcbi8vLyAgICAgKiBgYW55YCAtIHdvcmtzIGZvciBhbGwgZW5jYXBzdWxhdGlvbiBtb2RlcyBieSBlbWl0dGluZyB0aGUgQ1NTIHR3aWNlIChkZWZhdWx0KS5cbkBtaXhpbiBjZGstaGlnaC1jb250cmFzdCgkdGFyZ2V0OiBhY3RpdmUsICRlbmNhcHN1bGF0aW9uOiAnYW55Jykge1xuICBAaWYgKCR0YXJnZXQgIT0gJ2FjdGl2ZScgYW5kICR0YXJnZXQgIT0gJ2JsYWNrLW9uLXdoaXRlJyBhbmQgJHRhcmdldCAhPSAnd2hpdGUtb24tYmxhY2snKSB7XG4gICAgQGVycm9yICdVbmtub3duIGNkay1oaWdoLWNvbnRyYXN0IHZhbHVlIFwiI3skdGFyZ2V0fVwiIHByb3ZpZGVkLiAnICtcbiAgICAgICAgICAgJ0FsbG93ZWQgdmFsdWVzIGFyZSBcImFjdGl2ZVwiLCBcImJsYWNrLW9uLXdoaXRlXCIsIGFuZCBcIndoaXRlLW9uLWJsYWNrXCInO1xuICB9XG5cbiAgQGlmICgkZW5jYXBzdWxhdGlvbiAhPSAnb24nIGFuZCAkZW5jYXBzdWxhdGlvbiAhPSAnb2ZmJyBhbmQgJGVuY2Fwc3VsYXRpb24gIT0gJ2FueScpIHtcbiAgICBAZXJyb3IgJ1Vua25vd24gY2RrLWhpZ2gtY29udHJhc3QgZW5jYXBzdWxhdGlvbiBcIiN7JGVuY2Fwc3VsYXRpb259XCIgcHJvdmlkZWQuICcgK1xuICAgICAgICAgICAnQWxsb3dlZCB2YWx1ZXMgYXJlIFwib25cIiwgXCJvZmZcIiwgYW5kIFwiYW55XCInO1xuICB9XG5cbiAgLy8gSWYgdGhlIHNlbGVjdG9yIGNvbnRleHQgaGFzIG11bHRpcGxlIHBhcnRzLCBzdWNoIGFzIGAuc2VjdGlvbiwgLnJlZ2lvbmAsIGp1c3QgZG9pbmdcbiAgLy8gYC5jZGstaGlnaC1jb250cmFzdC14eHggI3smfWAgd2lsbCBvbmx5IGFwcGx5IHRoZSBwYXJlbnQgc2VsZWN0b3IgdG8gdGhlIGZpcnN0IHBhcnQgb2YgdGhlXG4gIC8vIGNvbnRleHQuIFdlIGFkZHJlc3MgdGhpcyBieSBuZXN0aW5nIHRoZSBzZWxlY3RvciBjb250ZXh0IHVuZGVyIC5jZGstaGlnaC1jb250cmFzdC5cbiAgQGF0LXJvb3Qge1xuICAgICRzZWxlY3Rvci1jb250ZXh0OiAjeyZ9O1xuXG4gICAgQGlmICgkZW5jYXBzdWxhdGlvbiAhPSAnb24nKSB7XG4gICAgICAuY2RrLWhpZ2gtY29udHJhc3QtI3skdGFyZ2V0fSB7XG4gICAgICAgIEBpbmNsdWRlIF9jZGstb3B0aW9uYWxseS1uZXN0LWNvbnRlbnQoJHNlbGVjdG9yLWNvbnRleHQpIHtcbiAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiAoJGVuY2Fwc3VsYXRpb24gIT0gJ29mZicpIHtcbiAgICAgIC5jZGstaGlnaC1jb250cmFzdC0jeyR0YXJnZXR9IDpob3N0IHtcbiAgICAgICAgQGluY2x1ZGUgX2Nkay1vcHRpb25hbGx5LW5lc3QtY29udGVudCgkc2VsZWN0b3ItY29udGV4dCkge1xuICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIENvcmUgc3R5bGVzIHRoYXQgZW5hYmxlIG1vbml0b3JpbmcgYXV0b2ZpbGwgc3RhdGUgb2YgdGV4dCBmaWVsZHMuXG5AbWl4aW4gY2RrLXRleHQtZmllbGQge1xuICAvLyBLZXlmcmFtZXMgdGhhdCBhcHBseSBubyBzdHlsZXMsIGJ1dCBhbGxvdyB1cyB0byBtb25pdG9yIHdoZW4gYW4gdGV4dCBmaWVsZCBiZWNvbWVzIGF1dG9maWxsZWRcbiAgLy8gYnkgd2F0Y2hpbmcgZm9yIHRoZSBhbmltYXRpb24gZXZlbnRzIHRoYXQgYXJlIGZpcmVkIHdoZW4gdGhleSBzdGFydC4gTm90ZTogdGhlIC8qISovIGNvbW1lbnQgaXNcbiAgLy8gbmVlZGVkIHRvIHByZXZlbnQgTGliU2FzcyBmcm9tIHN0cmlwcGluZyB0aGUga2V5ZnJhbWVzIG91dC5cbiAgLy8gQmFzZWQgb246IGh0dHBzOi8vbWVkaXVtLmNvbS9AYnJ1bm4vZGV0ZWN0aW5nLWF1dG9maWxsZWQtZmllbGRzLWluLWphdmFzY3JpcHQtYWVkNTk4ZDI1ZGE3XG4gIEBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgey8qISovfVxuICBAa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCB7LyohKi99XG5cbiAgLmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDotd2Via2l0LWF1dG9maWxsIHtcbiAgICAvLyBTaW5jZSBDaHJvbWUgODAgd2UgbmVlZCBhIDFtcyBkZWxheSwgb3IgdGhlIGFuaW1hdGlvbnN0YXJ0IGV2ZW50IHdvbid0IGZpcmUuXG4gICAgYW5pbWF0aW9uOiBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXM7XG4gIH1cblxuICAuY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCkge1xuICAgIC8vIFNpbmNlIENocm9tZSA4MCB3ZSBuZWVkIGEgMW1zIGRlbGF5LCBvciB0aGUgYW5pbWF0aW9uc3RhcnQgZXZlbnQgd29uJ3QgZmlyZS5cbiAgICBhbmltYXRpb246IGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXM7XG4gIH1cblxuICAvLyBSZW1vdmUgdGhlIHJlc2l6ZSBoYW5kbGUgb24gYXV0b3NpemluZyB0ZXh0YXJlYXMsIGJlY2F1c2Ugd2hhdGV2ZXIgaGVpZ2h0XG4gIC8vIHRoZSB1c2VyIHJlc2l6ZWQgdG8gd2lsbCBiZSBvdmVyd3JpdHRlbiBvbmNlIHRoZXkgc3RhcnQgdHlwaW5nIGFnYWluLlxuICB0ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUge1xuICAgIHJlc2l6ZTogbm9uZTtcbiAgfVxuXG4gIC8vIFRoaXMgY2xhc3MgaXMgdGVtcG9yYXJpbHkgYXBwbGllZCB0byB0aGUgdGV4dGFyZWEgd2hlbiBpdCBpcyBiZWluZyBtZWFzdXJlZC4gSXQgaXMgaW1tZWRpYXRlbHlcbiAgLy8gcmVtb3ZlZCB3aGVuIG1lYXN1cmluZyBpcyBjb21wbGV0ZS4gV2UgdXNlIGAhaW1wb3J0YW50YCBydWxlcyBoZXJlIHRvIG1ha2Ugc3VyZSB1c2VyLXNwZWNpZmllZFxuICAvLyBydWxlcyBkbyBub3QgaW50ZXJmZXJlIHdpdGggdGhlIG1lYXN1cmVtZW50LlxuICB0ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nIHtcbiAgICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDtcbiAgICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7XG4gICAgLy8gSGF2aW5nIDJweCB0b3AgYW5kIGJvdHRvbSBwYWRkaW5nIHNlZW1zIHRvIGZpeCBhIGJ1ZyB3aGVyZSBDaHJvbWUgZ2V0cyBhbiBpbmNvcnJlY3RcbiAgICAvLyBtZWFzdXJlbWVudC4gV2UganVzdCBoYXZlIHRvIGFjY291bnQgZm9yIGl0IGxhdGVyIGFuZCBzdWJ0cmFjdCBpdCBvZmYgdGhlIGZpbmFsIHJlc3VsdC5cbiAgICBwYWRkaW5nOiAycHggMCAhaW1wb3J0YW50O1xuICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLy8gVXNlZCB0byBnZW5lcmF0ZSBVSURzIGZvciBrZXlmcmFtZXMgdXNlZCB0byBjaGFuZ2UgdGhlIHRleHQgZmllbGQgYXV0b2ZpbGwgc3R5bGVzLlxuJGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLWZyYW1lLWNvdW50OiAwO1xuXG4vLyBNaXhpbiB1c2VkIHRvIGFwcGx5IGN1c3RvbSBiYWNrZ3JvdW5kIGFuZCBmb3JlZ3JvdW5kIGNvbG9ycyB0byBhbiBhdXRvZmlsbGVkIHRleHQgZmllbGQuXG4vLyBCYXNlZCBvbjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjc4MTU0OS9cbi8vIHJlbW92aW5nLWlucHV0LWJhY2tncm91bmQtY29sb3VyLWZvci1jaHJvbWUtYXV0b2NvbXBsZXRlI2Fuc3dlci0zNzQzMjI2MFxuQG1peGluIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yKCRiYWNrZ3JvdW5kLCAkZm9yZWdyb3VuZDonJykge1xuICBAa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLSN7JGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLWZyYW1lLWNvdW50fSB7XG4gICAgdG8ge1xuICAgICAgYmFja2dyb3VuZDogJGJhY2tncm91bmQ7XG4gICAgICBAaWYgJGZvcmVncm91bmQgIT0gJycgeyBjb2xvcjogJGZvcmVncm91bmQ7IH1cbiAgICB9XG4gIH1cblxuICAmOi13ZWJraXQtYXV0b2ZpbGwge1xuICAgIGFuaW1hdGlvbjogY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItI3skY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItZnJhbWUtY291bnR9IGJvdGg7XG4gIH1cblxuICAmLmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDotd2Via2l0LWF1dG9maWxsIHtcbiAgICAvLyBTaW5jZSBDaHJvbWUgODAgd2UgbmVlZCBhIDFtcyBkZWxheSBmb3IgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQsIG9yIHRoZSBhbmltYXRpb25zdGFydFxuICAgIC8vIGV2ZW50IHdvbid0IGZpcmUuXG4gICAgYW5pbWF0aW9uOiBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXMsXG4gICAgICAgICAgICAgICBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci0jeyRjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci1mcmFtZS1jb3VudH0gYm90aDtcbiAgfVxuXG4gICRjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci1mcmFtZS1jb3VudDpcbiAgICAgICRjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci1mcmFtZS1jb3VudCArIDEgIWdsb2JhbDtcbn1cblxuXG4vLyBDb3JlIHN0eWxlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGFwcGx5IG1hdGVyaWFsIGRlc2lnbiB0cmVhdG1lbnRzIHRvIGFueSBlbGVtZW50LlxuLy8gTWVkaWEgcXVlcmllc1xuLy8gVE9ETyhqb3NlcGhwZXJyb3R0KTogQ2hhbmdlICRtYXQteHNtYWxsIGFuZCAkbWF0LXNtYWxsIHVzYWdlcyB0byByZWx5IG9uIEJyZWFrcG9pbnRPYnNlcnZlcixcbiRtYXQteHNtYWxsOiAnbWF4LXdpZHRoOiA1OTlweCc7XG4kbWF0LXNtYWxsOiAnbWF4LXdpZHRoOiA5NTlweCc7XG5cbi8vIFRPRE86IFJldmlzaXQgYWxsIHotaW5kaWNlcyBiZWZvcmUgYmV0YVxuLy8gei1pbmRleCBtYXN0ZXIgbGlzdFxuXG4kei1pbmRleC1mYWI6IDIwICFkZWZhdWx0O1xuJHotaW5kZXgtZHJhd2VyOiAxMDAgIWRlZmF1bHQ7XG5cbi8vIEdsb2JhbCBjb25zdGFudHNcbiRwaTogMy4xNDE1OTI2NTtcblxuLy8gUGFkZGluZyBiZXR3ZWVuIGlucHV0IHRvZ2dsZXMgYW5kIHRoZWlyIGxhYmVsc1xuJG1hdC10b2dnbGUtcGFkZGluZzogOHB4ICFkZWZhdWx0O1xuLy8gV2lkdGggYW5kIGhlaWdodCBvZiBpbnB1dCB0b2dnbGVzXG4kbWF0LXRvZ2dsZS1zaXplOiAyMHB4ICFkZWZhdWx0O1xuXG4vLyBFYXNpbmcgQ3VydmVzXG4vLyBUT0RPKGplbGJvdXJuKTogYWxsIG9mIHRoZXNlIG5lZWQgdG8gYmUgcmV2aXNpdGVkXG5cbi8vIFRoZSBkZWZhdWx0IGFuaW1hdGlvbiBjdXJ2ZXMgdXNlZCBieSBtYXRlcmlhbCBkZXNpZ24uXG4kbWF0LWxpbmVhci1vdXQtc2xvdy1pbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSkgIWRlZmF1bHQ7XG4kbWF0LWZhc3Qtb3V0LXNsb3ctaW4tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpICFkZWZhdWx0O1xuJG1hdC1mYXN0LW91dC1saW5lYXItaW4tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAxLCAxKSAhZGVmYXVsdDtcblxuJGVhc2UtaW4tb3V0LWN1cnZlLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSkgIWRlZmF1bHQ7XG5cbiRzd2lmdC1lYXNlLW91dC1kdXJhdGlvbjogNDAwbXMgIWRlZmF1bHQ7XG4kc3dpZnQtZWFzZS1vdXQtdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSAhZGVmYXVsdDtcbiRzd2lmdC1lYXNlLW91dDogYWxsICRzd2lmdC1lYXNlLW91dC1kdXJhdGlvbiAkc3dpZnQtZWFzZS1vdXQtdGltaW5nLWZ1bmN0aW9uICFkZWZhdWx0O1xuXG4kc3dpZnQtZWFzZS1pbi1kdXJhdGlvbjogMzAwbXMgIWRlZmF1bHQ7XG4kc3dpZnQtZWFzZS1pbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjU1LCAwLCAwLjU1LCAwLjIpICFkZWZhdWx0O1xuJHN3aWZ0LWVhc2UtaW46IGFsbCAkc3dpZnQtZWFzZS1pbi1kdXJhdGlvbiAkc3dpZnQtZWFzZS1pbi10aW1pbmctZnVuY3Rpb24gIWRlZmF1bHQ7XG5cbiRzd2lmdC1lYXNlLWluLW91dC1kdXJhdGlvbjogNTAwbXMgIWRlZmF1bHQ7XG4kc3dpZnQtZWFzZS1pbi1vdXQtdGltaW5nLWZ1bmN0aW9uOiAkZWFzZS1pbi1vdXQtY3VydmUtZnVuY3Rpb24gIWRlZmF1bHQ7XG4kc3dpZnQtZWFzZS1pbi1vdXQ6IGFsbCAkc3dpZnQtZWFzZS1pbi1vdXQtZHVyYXRpb24gJHN3aWZ0LWVhc2UtaW4tb3V0LXRpbWluZy1mdW5jdGlvbiAhZGVmYXVsdDtcblxuJHN3aWZ0LWxpbmVhci1kdXJhdGlvbjogODBtcyAhZGVmYXVsdDtcbiRzd2lmdC1saW5lYXItdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXIgIWRlZmF1bHQ7XG4kc3dpZnQtbGluZWFyOiBhbGwgJHN3aWZ0LWxpbmVhci1kdXJhdGlvbiAkc3dpZnQtbGluZWFyLXRpbWluZy1mdW5jdGlvbiAhZGVmYXVsdDtcblxuXG5cbi8vIEEgY29sbGVjdGlvbiBvZiBtaXhpbnMgYW5kIENTUyBjbGFzc2VzIHRoYXQgY2FuIGJlIHVzZWQgdG8gYXBwbHkgZWxldmF0aW9uIHRvIGEgbWF0ZXJpYWxcbi8vIGVsZW1lbnQuXG4vLyBTZWU6IGh0dHBzOi8vbWF0ZXJpYWwuaW8vZGVzaWduL2Vudmlyb25tZW50L2VsZXZhdGlvbi5odG1sXG4vLyBFeGFtcGxlczpcbi8vXG4vL1xuLy8gLm1hdC1mb28ge1xuLy8gICBAaW5jbHVkZSAkbWF0LWVsZXZhdGlvbigyKTtcbi8vXG4vLyAgICY6YWN0aXZlIHtcbi8vICAgICBAaW5jbHVkZSAkbWF0LWVsZXZhdGlvbig4KTtcbi8vICAgfVxuLy8gfVxuLy9cbi8vIDxkaXYgaWQ9XCJleHRlcm5hbC1jYXJkXCIgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXoyXCI+PHA+U29tZSBjb250ZW50PC9wPjwvZGl2PlxuLy9cbi8vIEZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgZGVzaWduIGJlaGluZCBob3cgZWxldmF0aW9uIGlzIGltcGxlbWVudGVkLCBzZWUgdGhlIGRlc2lnbiBkb2MgYXRcbi8vIGh0dHBzOi8vZ29vLmdsL0txMGs5Wi5cblxuLy8gQ29sb3JzIGZvciB1bWJyYSwgcGVudW1icmEsIGFuZCBhbWJpZW50IHNoYWRvd3MuIEFzIGRlc2NyaWJlZCBpbiB0aGUgZGVzaWduIGRvYywgZWFjaCBlbGV2YXRpb25cbi8vIGxldmVsIGlzIGNyZWF0ZWQgdXNpbmcgYSBzZXQgb2YgMyBzaGFkb3cgdmFsdWVzLCBvbmUgZm9yIHVtYnJhICh0aGUgc2hhZG93IHJlcHJlc2VudGluZyB0aGVcbi8vIHNwYWNlIGNvbXBsZXRlbHkgb2JzY3VyZWQgYnkgYW4gb2JqZWN0IHJlbGF0aXZlIHRvIGl0cyBsaWdodCBzb3VyY2UpLCBvbmUgZm9yIHBlbnVtYnJhICh0aGVcbi8vIHNwYWNlIHBhcnRpYWxseSBvYnNjdXJlZCBieSBhbiBvYmplY3QpLCBhbmQgb25lIGZvciBhbWJpZW50ICh0aGUgc3BhY2Ugd2hpY2ggY29udGFpbnMgdGhlIG9iamVjdFxuLy8gaXRzZWxmKS4gRm9yIGEgZnVydGhlciBleHBsYW5hdGlvbiBvZiB0aGVzZSB0ZXJtcyBhbmQgdGhlaXIgbWVhbmluZ3MsIHNlZVxuLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVW1icmEsX3BlbnVtYnJhX2FuZF9hbnR1bWJyYS5cblxuLy8gTWFwcyBmb3IgdGhlIGRpZmZlcmVudCBzaGFkb3cgc2V0cyBhbmQgdGhlaXIgdmFsdWVzIHdpdGhpbiBlYWNoIHotc3BhY2UuIFRoZXNlIHZhbHVlcyB3ZXJlXG4vLyBjcmVhdGVkIGJ5IHRha2luZyBhIGZldyByZWZlcmVuY2Ugc2hhZG93IHNldHMgY3JlYXRlZCBieSBHb29nbGUncyBEZXNpZ25lcnMgYW5kIGludGVycG9sYXRpbmdcbi8vIGFsbCBvZiB0aGUgdmFsdWVzIGJldHdlZW4gdGhlbS5cblxuQGZ1bmN0aW9uIF9nZXQtdW1icmEtbWFwKCRjb2xvciwgJG9wYWNpdHkpIHtcbiAgJHNoYWRvdy1jb2xvcjogaWYodHlwZS1vZigkY29sb3IpID09IGNvbG9yLCByZ2JhKCRjb2xvciwgJG9wYWNpdHkgKiAwLjIpLCAkY29sb3IpO1xuXG4gIEByZXR1cm4gKFxuICAgIDA6ICcwcHggMHB4IDBweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTogJzBweCAycHggMXB4IC0xcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjogJzBweCAzcHggMXB4IC0ycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMzogJzBweCAzcHggM3B4IC0ycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNDogJzBweCAycHggNHB4IC0xcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNTogJzBweCAzcHggNXB4IC0xcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNjogJzBweCAzcHggNXB4IC0xcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNzogJzBweCA0cHggNXB4IC0ycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgODogJzBweCA1cHggNXB4IC0zcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgOTogJzBweCA1cHggNnB4IC0zcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTA6ICcwcHggNnB4IDZweCAtM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDExOiAnMHB4IDZweCA3cHggLTRweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMjogJzBweCA3cHggOHB4IC00cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTM6ICcwcHggN3B4IDhweCAtNHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE0OiAnMHB4IDdweCA5cHggLTRweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNTogJzBweCA4cHggOXB4IC01cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTY6ICcwcHggOHB4IDEwcHggLTVweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNzogJzBweCA4cHggMTFweCAtNXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE4OiAnMHB4IDlweCAxMXB4IC01cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTk6ICcwcHggOXB4IDEycHggLTZweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMDogJzBweCAxMHB4IDEzcHggLTZweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMTogJzBweCAxMHB4IDEzcHggLTZweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMjogJzBweCAxMHB4IDE0cHggLTZweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMzogJzBweCAxMXB4IDE0cHggLTdweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyNDogJzBweCAxMXB4IDE1cHggLTdweCAjeyRzaGFkb3ctY29sb3J9J1xuICApO1xufVxuXG5AZnVuY3Rpb24gX2dldC1wZW51bWJyYS1tYXAoJGNvbG9yLCAkb3BhY2l0eSkge1xuICAkc2hhZG93LWNvbG9yOiBpZih0eXBlLW9mKCRjb2xvcikgPT0gY29sb3IsIHJnYmEoJGNvbG9yLCAkb3BhY2l0eSAqIDAuMTQpLCAkY29sb3IpO1xuXG4gIEByZXR1cm4gKFxuICAgIDA6ICcwcHggMHB4IDBweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTogJzBweCAxcHggMXB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyOiAnMHB4IDJweCAycHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDM6ICcwcHggM3B4IDRweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNDogJzBweCA0cHggNXB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA1OiAnMHB4IDVweCA4cHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDY6ICcwcHggNnB4IDEwcHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDc6ICcwcHggN3B4IDEwcHggMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDg6ICcwcHggOHB4IDEwcHggMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDk6ICcwcHggOXB4IDEycHggMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEwOiAnMHB4IDEwcHggMTRweCAxcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTE6ICcwcHggMTFweCAxNXB4IDFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMjogJzBweCAxMnB4IDE3cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEzOiAnMHB4IDEzcHggMTlweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTQ6ICcwcHggMTRweCAyMXB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNTogJzBweCAxNXB4IDIycHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE2OiAnMHB4IDE2cHggMjRweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTc6ICcwcHggMTdweCAyNnB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxODogJzBweCAxOHB4IDI4cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE5OiAnMHB4IDE5cHggMjlweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjA6ICcwcHggMjBweCAzMXB4IDNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMTogJzBweCAyMXB4IDMzcHggM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIyOiAnMHB4IDIycHggMzVweCAzcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjM6ICcwcHggMjNweCAzNnB4IDNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyNDogJzBweCAyNHB4IDM4cHggM3B4ICN7JHNoYWRvdy1jb2xvcn0nXG4gICk7XG59XG5cbkBmdW5jdGlvbiBfZ2V0LWFtYmllbnQtbWFwKCRjb2xvciwgJG9wYWNpdHkpIHtcbiAgJHNoYWRvdy1jb2xvcjogaWYodHlwZS1vZigkY29sb3IpID09IGNvbG9yLCByZ2JhKCRjb2xvciwgJG9wYWNpdHkgKiAwLjEyKSwgJGNvbG9yKTtcblxuICBAcmV0dXJuIChcbiAgICAwOiAnMHB4IDBweCAwcHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE6ICcwcHggMXB4IDNweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjogJzBweCAxcHggNXB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAzOiAnMHB4IDFweCA4cHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDQ6ICcwcHggMXB4IDEwcHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDU6ICcwcHggMXB4IDE0cHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDY6ICcwcHggMXB4IDE4cHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDc6ICcwcHggMnB4IDE2cHggMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDg6ICcwcHggM3B4IDE0cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDk6ICcwcHggM3B4IDE2cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEwOiAnMHB4IDRweCAxOHB4IDNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMTogJzBweCA0cHggMjBweCAzcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTI6ICcwcHggNXB4IDIycHggNHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEzOiAnMHB4IDVweCAyNHB4IDRweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNDogJzBweCA1cHggMjZweCA0cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTU6ICcwcHggNnB4IDI4cHggNXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE2OiAnMHB4IDZweCAzMHB4IDVweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNzogJzBweCA2cHggMzJweCA1cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTg6ICcwcHggN3B4IDM0cHggNnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE5OiAnMHB4IDdweCAzNnB4IDZweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMDogJzBweCA4cHggMzhweCA3cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjE6ICcwcHggOHB4IDQwcHggN3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIyOiAnMHB4IDhweCA0MnB4IDdweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMzogJzBweCA5cHggNDRweCA4cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjQ6ICcwcHggOXB4IDQ2cHggOHB4ICN7JHNoYWRvdy1jb2xvcn0nXG4gICk7XG59XG5cbi8vIFRoZSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciBlbGV2YXRpb24gdHJhbnNpdGlvbnMuXG4kbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLWR1cmF0aW9uOiAyODBtcyAhZGVmYXVsdDtcblxuLy8gVGhlIGRlZmF1bHQgZWFzaW5nIHZhbHVlIGZvciBlbGV2YXRpb24gdHJhbnNpdGlvbnMuXG4kbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogJG1hdC1mYXN0LW91dC1zbG93LWluLXRpbWluZy1mdW5jdGlvbjtcblxuLy8gVGhlIGRlZmF1bHQgY29sb3IgZm9yIGVsZXZhdGlvbiBzaGFkb3dzLlxuJG1hdC1lbGV2YXRpb24tY29sb3I6IGJsYWNrICFkZWZhdWx0O1xuXG4vLyBUaGUgZGVmYXVsdCBvcGFjaXR5IHNjYWxpbmcgdmFsdWUgZm9yIGVsZXZhdGlvbiBzaGFkb3dzLlxuJG1hdC1lbGV2YXRpb24tb3BhY2l0eTogMSAhZGVmYXVsdDtcblxuLy8gUHJlZml4IGZvciBlbGV2YXRpb24tcmVsYXRlZCBzZWxlY3RvcnMuXG4kX21hdC1lbGV2YXRpb24tcHJlZml4OiAnbWF0LWVsZXZhdGlvbi16JztcblxuLy8gQXBwbGllcyB0aGUgY29ycmVjdCBjc3MgcnVsZXMgdG8gYW4gZWxlbWVudCB0byBnaXZlIGl0IHRoZSBlbGV2YXRpb24gc3BlY2lmaWVkIGJ5ICR6VmFsdWUuXG4vLyBUaGUgJHpWYWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjQuXG5AbWl4aW4gbWF0LWVsZXZhdGlvbigkelZhbHVlLCAkY29sb3I6ICRtYXQtZWxldmF0aW9uLWNvbG9yLCAkb3BhY2l0eTogJG1hdC1lbGV2YXRpb24tb3BhY2l0eSkge1xuICBAaWYgdHlwZS1vZigkelZhbHVlKSAhPSBudW1iZXIgb3Igbm90IHVuaXRsZXNzKCR6VmFsdWUpIHtcbiAgICBAZXJyb3IgJyR6VmFsdWUgbXVzdCBiZSBhIHVuaXRsZXNzIG51bWJlcic7XG4gIH1cbiAgQGlmICR6VmFsdWUgPCAwIG9yICR6VmFsdWUgPiAyNCB7XG4gICAgQGVycm9yICckelZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyNCc7XG4gIH1cblxuICBib3gtc2hhZG93OiAje21hcC1nZXQoX2dldC11bWJyYS1tYXAoJGNvbG9yLCAkb3BhY2l0eSksICR6VmFsdWUpfSxcbiAgICAgICAgICAgICAgI3ttYXAtZ2V0KF9nZXQtcGVudW1icmEtbWFwKCRjb2xvciwgJG9wYWNpdHkpLCAkelZhbHVlKX0sXG4gICAgICAgICAgICAgICN7bWFwLWdldChfZ2V0LWFtYmllbnQtbWFwKCRjb2xvciwgJG9wYWNpdHkpLCAkelZhbHVlKX07XG59XG5cbkBtaXhpbiBfbWF0LXRoZW1lLWVsZXZhdGlvbigkelZhbHVlLCAkdGhlbWUsICRvcGFjaXR5OiAkbWF0LWVsZXZhdGlvbi1vcGFjaXR5KSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRlbGV2YXRpb24tY29sb3I6IG1hcC1nZXQoJGZvcmVncm91bmQsIGVsZXZhdGlvbik7XG4gICRlbGV2YXRpb24tY29sb3Itb3ItZGVmYXVsdDogaWYoJGVsZXZhdGlvbi1jb2xvciA9PSBudWxsLCAkbWF0LWVsZXZhdGlvbi1jb2xvciwgJGVsZXZhdGlvbi1jb2xvcik7XG5cbiAgQGluY2x1ZGUgbWF0LWVsZXZhdGlvbigkelZhbHVlLCAkZWxldmF0aW9uLWNvbG9yLW9yLWRlZmF1bHQsICRvcGFjaXR5KTtcbn1cblxuLy8gQXBwbGllcyB0aGUgZWxldmF0aW9uIHRvIGFuIGVsZW1lbnQgaW4gYSBtYW5uZXIgdGhhdCBhbGxvd3Ncbi8vIGNvbnN1bWVycyB0byBvdmVycmlkZSBpdCB2aWEgdGhlIE1hdGVyaWFsIGVsZXZhdGlvbiBjbGFzc2VzLlxuQG1peGluIG1hdC1vdmVycmlkYWJsZS1lbGV2YXRpb24oXG4gICAgJHpWYWx1ZSxcbiAgICAkY29sb3I6ICRtYXQtZWxldmF0aW9uLWNvbG9yLFxuICAgICRvcGFjaXR5OiAkbWF0LWVsZXZhdGlvbi1vcGFjaXR5KSB7XG4gICY6bm90KFtjbGFzcyo9JyN7JF9tYXQtZWxldmF0aW9uLXByZWZpeH0nXSkge1xuICAgIEBpbmNsdWRlIG1hdC1lbGV2YXRpb24oJHpWYWx1ZSwgJGNvbG9yLCAkb3BhY2l0eSk7XG4gIH1cbn1cblxuQG1peGluIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKCR6VmFsdWUsICR0aGVtZSwgJG9wYWNpdHk6ICRtYXQtZWxldmF0aW9uLW9wYWNpdHkpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGVsZXZhdGlvbi1jb2xvcjogbWFwLWdldCgkZm9yZWdyb3VuZCwgZWxldmF0aW9uKTtcbiAgJGVsZXZhdGlvbi1jb2xvci1vci1kZWZhdWx0OiBpZigkZWxldmF0aW9uLWNvbG9yID09IG51bGwsICRtYXQtZWxldmF0aW9uLWNvbG9yLCAkZWxldmF0aW9uLWNvbG9yKTtcblxuICBAaW5jbHVkZSBtYXQtb3ZlcnJpZGFibGUtZWxldmF0aW9uKCR6VmFsdWUsICRlbGV2YXRpb24tY29sb3Itb3ItZGVmYXVsdCwgJG9wYWNpdHkpO1xufVxuXG4vLyBSZXR1cm5zIGEgc3RyaW5nIHRoYXQgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvciBhIHRyYW5zaXRpb24gcHJvcGVydHkgZm9yIGVsZXZhdGlvbi5cbi8vIENhbGxpbmcgdGhpcyBmdW5jdGlvbiBkaXJlY3RseSBpcyB1c2VmdWwgaW4gc2l0dWF0aW9ucyB3aGVyZSBhIGNvbXBvbmVudCBuZWVkcyB0byB0cmFuc2l0aW9uXG4vLyBtb3JlIHRoYW4gb25lIHByb3BlcnR5LlxuLy9cbi8vIC5mb28ge1xuLy8gICB0cmFuc2l0aW9uOiBtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tcHJvcGVydHktdmFsdWUoKSwgb3BhY2l0eSAxMDBtcyBlYXNlO1xuLy8gfVxuQGZ1bmN0aW9uIG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi1wcm9wZXJ0eS12YWx1ZShcbiAgICAkZHVyYXRpb246ICRtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tZHVyYXRpb24sXG4gICAgJGVhc2luZzogJG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pIHtcbiAgQHJldHVybiBib3gtc2hhZG93ICN7JGR1cmF0aW9ufSAjeyRlYXNpbmd9O1xufVxuXG4vLyBBcHBsaWVzIHRoZSBjb3JyZWN0IGNzcyBydWxlcyBuZWVkZWQgdG8gaGF2ZSBhbiBlbGVtZW50IHRyYW5zaXRpb24gYmV0d2VlbiBlbGV2YXRpb25zLlxuLy8gVGhpcyBtaXhpbiBzaG91bGQgYmUgYXBwbGllZCB0byBlbGVtZW50cyB3aG9zZSBlbGV2YXRpb24gdmFsdWVzIHdpbGwgY2hhbmdlIGRlcGVuZGluZyBvbiB0aGVpclxuLy8gY29udGV4dCAoZS5nLiB3aGVuIGFjdGl2ZSBvciBkaXNhYmxlZCkuXG4vL1xuLy8gTk9URSh0cmF2aXNrYXVmbWFuKTogQm90aCB0aGlzIG1peGluIGFuZCB0aGUgYWJvdmUgZnVuY3Rpb24gdXNlIGRlZmF1bHQgcGFyYW1ldGVycyBzbyB0aGV5IGNhblxuLy8gYmUgdXNlZCBpbiB0aGUgc2FtZSB3YXkgYnkgY2xpZW50cy5cbkBtaXhpbiBtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24oXG4gICAgJGR1cmF0aW9uOiAkbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLWR1cmF0aW9uLFxuICAgICRlYXNpbmc6ICRtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSB7XG4gIHRyYW5zaXRpb246IG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi1wcm9wZXJ0eS12YWx1ZSgkZHVyYXRpb24sICRlYXNpbmcpO1xufVxuXG4vLyBDb2xvciBwYWxldHRlcyBmcm9tIHRoZSBNYXRlcmlhbCBEZXNpZ24gc3BlYy5cbi8vIFNlZSBodHRwczovL21hdGVyaWFsLmlvL2Rlc2lnbi9jb2xvci9cbi8vXG4vLyBDb250cmFzdCBjb2xvcnMgYXJlIGhhcmQtY29kZWQgYmVjYXVzZSBpdCBpcyB0b28gZGlmZmljdWx0IChwcm9iYWJseSBpbXBvc3NpYmxlKSB0b1xuLy8gY2FsY3VsYXRlIHRoZW0uIFRoZXNlIGNvbnRyYXN0IGNvbG9ycyBhcmUgcHVsbGVkIGZyb20gdGhlIHB1YmxpYyBNYXRlcmlhbCBEZXNpZ24gc3BlYyBzd2F0Y2hlcy5cbi8vIFdoaWxlIHRoZSBjb250cmFzdCBjb2xvcnMgaW4gdGhlIHNwZWMgYXJlIG5vdCBwcmVzY3JpcHRpdmUsIHdlIHVzZSB0aGVtIGZvciBjb252ZW5pZW5jZS5cblxuXG4vLyBAZGVwcmVjYXRlZCByZW5hbWVkIHRvICRkYXJrLXByaW1hcnktdGV4dC5cbi8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjBcbiRibGFjay04Ny1vcGFjaXR5OiByZ2JhKGJsYWNrLCAwLjg3KTtcbi8vIEBkZXByZWNhdGVkIHJlbmFtZWQgdG8gJGxpZ2h0LXByaW1hcnktdGV4dC5cbi8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjBcbiR3aGl0ZS04Ny1vcGFjaXR5OiByZ2JhKHdoaXRlLCAwLjg3KTtcbi8vIEBkZXByZWNhdGVkIHVzZSAkZGFyay1bc2Vjb25kYXJ5LXRleHQsZGlzYWJsZWQtdGV4dCxkaXZpZGVycyxmb2N1c2VkXSBpbnN0ZWFkLlxuLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMFxuJGJsYWNrLTEyLW9wYWNpdHk6IHJnYmEoYmxhY2ssIDAuMTIpO1xuLy8gQGRlcHJlY2F0ZWQgdXNlICRsaWdodC1bc2Vjb25kYXJ5LXRleHQsZGlzYWJsZWQtdGV4dCxkaXZpZGVycyxmb2N1c2VkXSBpbnN0ZWFkLlxuLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMFxuJHdoaXRlLTEyLW9wYWNpdHk6IHJnYmEod2hpdGUsIDAuMTIpO1xuLy8gQGRlcHJlY2F0ZWQgdXNlICRkYXJrLVtzZWNvbmRhcnktdGV4dCxkaXNhYmxlZC10ZXh0LGRpdmlkZXJzLGZvY3VzZWRdIGluc3RlYWQuXG4vLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wXG4kYmxhY2stNi1vcGFjaXR5OiByZ2JhKGJsYWNrLCAwLjA2KTtcbi8vIEBkZXByZWNhdGVkIHVzZSAkbGlnaHQtW3NlY29uZGFyeS10ZXh0LGRpc2FibGVkLXRleHQsZGl2aWRlcnMsZm9jdXNlZF0gaW5zdGVhZC5cbi8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjBcbiR3aGl0ZS02LW9wYWNpdHk6IHJnYmEod2hpdGUsIDAuMDYpO1xuXG4kZGFyay1wcmltYXJ5LXRleHQ6IHJnYmEoYmxhY2ssIDAuODcpO1xuJGRhcmstc2Vjb25kYXJ5LXRleHQ6IHJnYmEoYmxhY2ssIDAuNTQpO1xuJGRhcmstZGlzYWJsZWQtdGV4dDogcmdiYShibGFjaywgMC4zOCk7XG4kZGFyay1kaXZpZGVyczogcmdiYShibGFjaywgMC4xMik7XG4kZGFyay1mb2N1c2VkOiByZ2JhKGJsYWNrLCAwLjEyKTtcbiRsaWdodC1wcmltYXJ5LXRleHQ6IHdoaXRlO1xuJGxpZ2h0LXNlY29uZGFyeS10ZXh0OiByZ2JhKHdoaXRlLCAwLjcpO1xuJGxpZ2h0LWRpc2FibGVkLXRleHQ6IHJnYmEod2hpdGUsIDAuNSk7XG4kbGlnaHQtZGl2aWRlcnM6IHJnYmEod2hpdGUsIDAuMTIpO1xuJGxpZ2h0LWZvY3VzZWQ6IHJnYmEod2hpdGUsIDAuMTIpO1xuXG4kbWF0LXJlZDogKFxuICA1MDogI2ZmZWJlZSxcbiAgMTAwOiAjZmZjZGQyLFxuICAyMDA6ICNlZjlhOWEsXG4gIDMwMDogI2U1NzM3MyxcbiAgNDAwOiAjZWY1MzUwLFxuICA1MDA6ICNmNDQzMzYsXG4gIDYwMDogI2U1MzkzNSxcbiAgNzAwOiAjZDMyZjJmLFxuICA4MDA6ICNjNjI4MjgsXG4gIDkwMDogI2I3MWMxYyxcbiAgQTEwMDogI2ZmOGE4MCxcbiAgQTIwMDogI2ZmNTI1MixcbiAgQTQwMDogI2ZmMTc0NCxcbiAgQTcwMDogI2Q1MDAwMCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LXBpbms6IChcbiAgNTA6ICNmY2U0ZWMsXG4gIDEwMDogI2Y4YmJkMCxcbiAgMjAwOiAjZjQ4ZmIxLFxuICAzMDA6ICNmMDYyOTIsXG4gIDQwMDogI2VjNDA3YSxcbiAgNTAwOiAjZTkxZTYzLFxuICA2MDA6ICNkODFiNjAsXG4gIDcwMDogI2MyMTg1YixcbiAgODAwOiAjYWQxNDU3LFxuICA5MDA6ICM4ODBlNGYsXG4gIEExMDA6ICNmZjgwYWIsXG4gIEEyMDA6ICNmZjQwODEsXG4gIEE0MDA6ICNmNTAwNTcsXG4gIEE3MDA6ICNjNTExNjIsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1wdXJwbGU6IChcbiAgNTA6ICNmM2U1ZjUsXG4gIDEwMDogI2UxYmVlNyxcbiAgMjAwOiAjY2U5M2Q4LFxuICAzMDA6ICNiYTY4YzgsXG4gIDQwMDogI2FiNDdiYyxcbiAgNTAwOiAjOWMyN2IwLFxuICA2MDA6ICM4ZTI0YWEsXG4gIDcwMDogIzdiMWZhMixcbiAgODAwOiAjNmExYjlhLFxuICA5MDA6ICM0YTE0OGMsXG4gIEExMDA6ICNlYTgwZmMsXG4gIEEyMDA6ICNlMDQwZmIsXG4gIEE0MDA6ICNkNTAwZjksXG4gIEE3MDA6ICNhYTAwZmYsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWRlZXAtcHVycGxlOiAoXG4gIDUwOiAjZWRlN2Y2LFxuICAxMDA6ICNkMWM0ZTksXG4gIDIwMDogI2IzOWRkYixcbiAgMzAwOiAjOTU3NWNkLFxuICA0MDA6ICM3ZTU3YzIsXG4gIDUwMDogIzY3M2FiNyxcbiAgNjAwOiAjNWUzNWIxLFxuICA3MDA6ICM1MTJkYTgsXG4gIDgwMDogIzQ1MjdhMCxcbiAgOTAwOiAjMzExYjkyLFxuICBBMTAwOiAjYjM4OGZmLFxuICBBMjAwOiAjN2M0ZGZmLFxuICBBNDAwOiAjNjUxZmZmLFxuICBBNzAwOiAjNjIwMGVhLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1pbmRpZ286IChcbiAgNTA6ICNlOGVhZjYsXG4gIDEwMDogI2M1Y2FlOSxcbiAgMjAwOiAjOWZhOGRhLFxuICAzMDA6ICM3OTg2Y2IsXG4gIDQwMDogIzVjNmJjMCxcbiAgNTAwOiAjM2Y1MWI1LFxuICA2MDA6ICMzOTQ5YWIsXG4gIDcwMDogIzMwM2Y5ZixcbiAgODAwOiAjMjgzNTkzLFxuICA5MDA6ICMxYTIzN2UsXG4gIEExMDA6ICM4YzllZmYsXG4gIEEyMDA6ICM1MzZkZmUsXG4gIEE0MDA6ICMzZDVhZmUsXG4gIEE3MDA6ICMzMDRmZmUsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWJsdWU6IChcbiAgNTA6ICNlM2YyZmQsXG4gIDEwMDogI2JiZGVmYixcbiAgMjAwOiAjOTBjYWY5LFxuICAzMDA6ICM2NGI1ZjYsXG4gIDQwMDogIzQyYTVmNSxcbiAgNTAwOiAjMjE5NmYzLFxuICA2MDA6ICMxZTg4ZTUsXG4gIDcwMDogIzE5NzZkMixcbiAgODAwOiAjMTU2NWMwLFxuICA5MDA6ICMwZDQ3YTEsXG4gIEExMDA6ICM4MmIxZmYsXG4gIEEyMDA6ICM0NDhhZmYsXG4gIEE0MDA6ICMyOTc5ZmYsXG4gIEE3MDA6ICMyOTYyZmYsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1saWdodC1ibHVlOiAoXG4gIDUwOiAjZTFmNWZlLFxuICAxMDA6ICNiM2U1ZmMsXG4gIDIwMDogIzgxZDRmYSxcbiAgMzAwOiAjNGZjM2Y3LFxuICA0MDA6ICMyOWI2ZjYsXG4gIDUwMDogIzAzYTlmNCxcbiAgNjAwOiAjMDM5YmU1LFxuICA3MDA6ICMwMjg4ZDEsXG4gIDgwMDogIzAyNzdiZCxcbiAgOTAwOiAjMDE1NzliLFxuICBBMTAwOiAjODBkOGZmLFxuICBBMjAwOiAjNDBjNGZmLFxuICBBNDAwOiAjMDBiMGZmLFxuICBBNzAwOiAjMDA5MWVhLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWN5YW46IChcbiAgNTA6ICNlMGY3ZmEsXG4gIDEwMDogI2IyZWJmMixcbiAgMjAwOiAjODBkZWVhLFxuICAzMDA6ICM0ZGQwZTEsXG4gIDQwMDogIzI2YzZkYSxcbiAgNTAwOiAjMDBiY2Q0LFxuICA2MDA6ICMwMGFjYzEsXG4gIDcwMDogIzAwOTdhNyxcbiAgODAwOiAjMDA4MzhmLFxuICA5MDA6ICMwMDYwNjQsXG4gIEExMDA6ICM4NGZmZmYsXG4gIEEyMDA6ICMxOGZmZmYsXG4gIEE0MDA6ICMwMGU1ZmYsXG4gIEE3MDA6ICMwMGI4ZDQsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC10ZWFsOiAoXG4gIDUwOiAjZTBmMmYxLFxuICAxMDA6ICNiMmRmZGIsXG4gIDIwMDogIzgwY2JjNCxcbiAgMzAwOiAjNGRiNmFjLFxuICA0MDA6ICMyNmE2OWEsXG4gIDUwMDogIzAwOTY4OCxcbiAgNjAwOiAjMDA4OTdiLFxuICA3MDA6ICMwMDc5NmIsXG4gIDgwMDogIzAwNjk1YyxcbiAgOTAwOiAjMDA0ZDQwLFxuICBBMTAwOiAjYTdmZmViLFxuICBBMjAwOiAjNjRmZmRhLFxuICBBNDAwOiAjMWRlOWI2LFxuICBBNzAwOiAjMDBiZmE1LFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtZ3JlZW46IChcbiAgNTA6ICNlOGY1ZTksXG4gIDEwMDogI2M4ZTZjOSxcbiAgMjAwOiAjYTVkNmE3LFxuICAzMDA6ICM4MWM3ODQsXG4gIDQwMDogIzY2YmI2YSxcbiAgNTAwOiAjNGNhZjUwLFxuICA2MDA6ICM0M2EwNDcsXG4gIDcwMDogIzM4OGUzYyxcbiAgODAwOiAjMmU3ZDMyLFxuICA5MDA6ICMxYjVlMjAsXG4gIEExMDA6ICNiOWY2Y2EsXG4gIEEyMDA6ICM2OWYwYWUsXG4gIEE0MDA6ICMwMGU2NzYsXG4gIEE3MDA6ICMwMGM4NTMsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWxpZ2h0LWdyZWVuOiAoXG4gIDUwOiAjZjFmOGU5LFxuICAxMDA6ICNkY2VkYzgsXG4gIDIwMDogI2M1ZTFhNSxcbiAgMzAwOiAjYWVkNTgxLFxuICA0MDA6ICM5Y2NjNjUsXG4gIDUwMDogIzhiYzM0YSxcbiAgNjAwOiAjN2NiMzQyLFxuICA3MDA6ICM2ODlmMzgsXG4gIDgwMDogIzU1OGIyZixcbiAgOTAwOiAjMzM2OTFlLFxuICBBMTAwOiAjY2NmZjkwLFxuICBBMjAwOiAjYjJmZjU5LFxuICBBNDAwOiAjNzZmZjAzLFxuICBBNzAwOiAjNjRkZDE3LFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWxpbWU6IChcbiAgNTA6ICNmOWZiZTcsXG4gIDEwMDogI2YwZjRjMyxcbiAgMjAwOiAjZTZlZTljLFxuICAzMDA6ICNkY2U3NzUsXG4gIDQwMDogI2Q0ZTE1NyxcbiAgNTAwOiAjY2RkYzM5LFxuICA2MDA6ICNjMGNhMzMsXG4gIDcwMDogI2FmYjQyYixcbiAgODAwOiAjOWU5ZDI0LFxuICA5MDA6ICM4Mjc3MTcsXG4gIEExMDA6ICNmNGZmODEsXG4gIEEyMDA6ICNlZWZmNDEsXG4gIEE0MDA6ICNjNmZmMDAsXG4gIEE3MDA6ICNhZWVhMDAsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LXllbGxvdzogKFxuICA1MDogI2ZmZmRlNyxcbiAgMTAwOiAjZmZmOWM0LFxuICAyMDA6ICNmZmY1OWQsXG4gIDMwMDogI2ZmZjE3NixcbiAgNDAwOiAjZmZlZTU4LFxuICA1MDA6ICNmZmViM2IsXG4gIDYwMDogI2ZkZDgzNSxcbiAgNzAwOiAjZmJjMDJkLFxuICA4MDA6ICNmOWE4MjUsXG4gIDkwMDogI2Y1N2YxNyxcbiAgQTEwMDogI2ZmZmY4ZCxcbiAgQTIwMDogI2ZmZmYwMCxcbiAgQTQwMDogI2ZmZWEwMCxcbiAgQTcwMDogI2ZmZDYwMCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1hbWJlcjogKFxuICA1MDogI2ZmZjhlMSxcbiAgMTAwOiAjZmZlY2IzLFxuICAyMDA6ICNmZmUwODIsXG4gIDMwMDogI2ZmZDU0ZixcbiAgNDAwOiAjZmZjYTI4LFxuICA1MDA6ICNmZmMxMDcsXG4gIDYwMDogI2ZmYjMwMCxcbiAgNzAwOiAjZmZhMDAwLFxuICA4MDA6ICNmZjhmMDAsXG4gIDkwMDogI2ZmNmYwMCxcbiAgQTEwMDogI2ZmZTU3ZixcbiAgQTIwMDogI2ZmZDc0MCxcbiAgQTQwMDogI2ZmYzQwMCxcbiAgQTcwMDogI2ZmYWIwMCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1vcmFuZ2U6IChcbiAgNTA6ICNmZmYzZTAsXG4gIDEwMDogI2ZmZTBiMixcbiAgMjAwOiAjZmZjYzgwLFxuICAzMDA6ICNmZmI3NGQsXG4gIDQwMDogI2ZmYTcyNixcbiAgNTAwOiAjZmY5ODAwLFxuICA2MDA6ICNmYjhjMDAsXG4gIDcwMDogI2Y1N2MwMCxcbiAgODAwOiAjZWY2YzAwLFxuICA5MDA6ICNlNjUxMDAsXG4gIEExMDA6ICNmZmQxODAsXG4gIEEyMDA6ICNmZmFiNDAsXG4gIEE0MDA6ICNmZjkxMDAsXG4gIEE3MDA6ICNmZjZkMDAsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6IGJsYWNrLFxuICApXG4pO1xuXG4kbWF0LWRlZXAtb3JhbmdlOiAoXG4gIDUwOiAjZmJlOWU3LFxuICAxMDA6ICNmZmNjYmMsXG4gIDIwMDogI2ZmYWI5MSxcbiAgMzAwOiAjZmY4YTY1LFxuICA0MDA6ICNmZjcwNDMsXG4gIDUwMDogI2ZmNTcyMixcbiAgNjAwOiAjZjQ1MTFlLFxuICA3MDA6ICNlNjRhMTksXG4gIDgwMDogI2Q4NDMxNSxcbiAgOTAwOiAjYmYzNjBjLFxuICBBMTAwOiAjZmY5ZTgwLFxuICBBMjAwOiAjZmY2ZTQwLFxuICBBNDAwOiAjZmYzZDAwLFxuICBBNzAwOiAjZGQyYzAwLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1icm93bjogKFxuICA1MDogI2VmZWJlOSxcbiAgMTAwOiAjZDdjY2M4LFxuICAyMDA6ICNiY2FhYTQsXG4gIDMwMDogI2ExODg3ZixcbiAgNDAwOiAjOGQ2ZTYzLFxuICA1MDA6ICM3OTU1NDgsXG4gIDYwMDogIzZkNGM0MSxcbiAgNzAwOiAjNWQ0MDM3LFxuICA4MDA6ICM0ZTM0MmUsXG4gIDkwMDogIzNlMjcyMyxcbiAgQTEwMDogI2Q3Y2NjOCxcbiAgQTIwMDogI2JjYWFhNCxcbiAgQTQwMDogIzhkNmU2MyxcbiAgQTcwMDogIzVkNDAzNyxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1ncmV5OiAoXG4gIDUwOiAjZmFmYWZhLFxuICAxMDA6ICNmNWY1ZjUsXG4gIDIwMDogI2VlZWVlZSxcbiAgMzAwOiAjZTBlMGUwLFxuICA0MDA6ICNiZGJkYmQsXG4gIDUwMDogIzllOWU5ZSxcbiAgNjAwOiAjNzU3NTc1LFxuICA3MDA6ICM2MTYxNjEsXG4gIDgwMDogIzQyNDI0MixcbiAgOTAwOiAjMjEyMTIxLFxuICBBMTAwOiAjZmZmZmZmLFxuICBBMjAwOiAjZWVlZWVlLFxuICBBNDAwOiAjYmRiZGJkLFxuICBBNzAwOiAjNjE2MTYxLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbi8vIEFsaWFzIGZvciBhbHRlcm5hdGUgc3BlbGxpbmcuXG4kbWF0LWdyYXk6ICRtYXQtZ3JleTtcblxuJG1hdC1ibHVlLWdyZXk6IChcbiAgNTA6ICNlY2VmZjEsXG4gIDEwMDogI2NmZDhkYyxcbiAgMjAwOiAjYjBiZWM1LFxuICAzMDA6ICM5MGE0YWUsXG4gIDQwMDogIzc4OTA5YyxcbiAgNTAwOiAjNjA3ZDhiLFxuICA2MDA6ICM1NDZlN2EsXG4gIDcwMDogIzQ1NWE2NCxcbiAgODAwOiAjMzc0NzRmLFxuICA5MDA6ICMyNjMyMzgsXG4gIEExMDA6ICNjZmQ4ZGMsXG4gIEEyMDA6ICNiMGJlYzUsXG4gIEE0MDA6ICM3ODkwOWMsXG4gIEE3MDA6ICM0NTVhNjQsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuLy8gQWxpYXMgZm9yIGFsdGVybmF0ZSBzcGVsbGluZy5cbiRtYXQtYmx1ZS1ncmF5OiAkbWF0LWJsdWUtZ3JleTtcblxuXG4vLyBCYWNrZ3JvdW5kIHBhbGV0dGUgZm9yIGxpZ2h0IHRoZW1lcy5cbiRtYXQtbGlnaHQtdGhlbWUtYmFja2dyb3VuZDogKFxuICBzdGF0dXMtYmFyOiBtYXBfZ2V0KCRtYXQtZ3JleSwgMzAwKSxcbiAgYXBwLWJhcjogICAgbWFwX2dldCgkbWF0LWdyZXksIDEwMCksXG4gIGJhY2tncm91bmQ6IG1hcF9nZXQoJG1hdC1ncmV5LCA1MCksXG4gIGhvdmVyOiAgICAgIHJnYmEoYmxhY2ssIDAuMDQpLCAvLyBUT0RPKGthcmEpOiBjaGVjayBzdHlsZSB3aXRoIE1hdGVyaWFsIERlc2lnbiBVWFxuICBjYXJkOiAgICAgICB3aGl0ZSxcbiAgZGlhbG9nOiAgICAgd2hpdGUsXG4gIGRpc2FibGVkLWJ1dHRvbjogcmdiYShibGFjaywgMC4xMiksXG4gIHJhaXNlZC1idXR0b246IHdoaXRlLFxuICBmb2N1c2VkLWJ1dHRvbjogJGRhcmstZm9jdXNlZCxcbiAgc2VsZWN0ZWQtYnV0dG9uOiBtYXBfZ2V0KCRtYXQtZ3JleSwgMzAwKSxcbiAgc2VsZWN0ZWQtZGlzYWJsZWQtYnV0dG9uOiBtYXBfZ2V0KCRtYXQtZ3JleSwgNDAwKSxcbiAgZGlzYWJsZWQtYnV0dG9uLXRvZ2dsZTogbWFwX2dldCgkbWF0LWdyZXksIDIwMCksXG4gIHVuc2VsZWN0ZWQtY2hpcDogbWFwX2dldCgkbWF0LWdyZXksIDMwMCksXG4gIGRpc2FibGVkLWxpc3Qtb3B0aW9uOiBtYXBfZ2V0KCRtYXQtZ3JleSwgMjAwKSxcbiAgdG9vbHRpcDogbWFwX2dldCgkbWF0LWdyZXksIDcwMCksXG4pO1xuXG4vLyBCYWNrZ3JvdW5kIHBhbGV0dGUgZm9yIGRhcmsgdGhlbWVzLlxuJG1hdC1kYXJrLXRoZW1lLWJhY2tncm91bmQ6IChcbiAgc3RhdHVzLWJhcjogYmxhY2ssXG4gIGFwcC1iYXI6ICAgIG1hcF9nZXQoJG1hdC1ncmV5LCA5MDApLFxuICBiYWNrZ3JvdW5kOiAjMzAzMDMwLFxuICBob3ZlcjogICAgICByZ2JhKHdoaXRlLCAwLjA0KSwgLy8gVE9ETyhrYXJhKTogY2hlY2sgc3R5bGUgd2l0aCBNYXRlcmlhbCBEZXNpZ24gVVhcbiAgY2FyZDogICAgICAgbWFwX2dldCgkbWF0LWdyZXksIDgwMCksXG4gIGRpYWxvZzogICAgIG1hcF9nZXQoJG1hdC1ncmV5LCA4MDApLFxuICBkaXNhYmxlZC1idXR0b246IHJnYmEod2hpdGUsIDAuMTIpLFxuICByYWlzZWQtYnV0dG9uOiBtYXAtZ2V0KCRtYXQtZ3JleSwgODAwKSxcbiAgZm9jdXNlZC1idXR0b246ICRsaWdodC1mb2N1c2VkLFxuICBzZWxlY3RlZC1idXR0b246IG1hcF9nZXQoJG1hdC1ncmV5LCA5MDApLFxuICBzZWxlY3RlZC1kaXNhYmxlZC1idXR0b246IG1hcF9nZXQoJG1hdC1ncmV5LCA4MDApLFxuICBkaXNhYmxlZC1idXR0b24tdG9nZ2xlOiBibGFjayxcbiAgdW5zZWxlY3RlZC1jaGlwOiBtYXBfZ2V0KCRtYXQtZ3JleSwgNzAwKSxcbiAgZGlzYWJsZWQtbGlzdC1vcHRpb246IGJsYWNrLFxuICB0b29sdGlwOiBtYXBfZ2V0KCRtYXQtZ3JleSwgNzAwKSxcbik7XG5cbi8vIEZvcmVncm91bmQgcGFsZXR0ZSBmb3IgbGlnaHQgdGhlbWVzLlxuJG1hdC1saWdodC10aGVtZS1mb3JlZ3JvdW5kOiAoXG4gIGJhc2U6ICAgICAgICAgICAgICBibGFjayxcbiAgZGl2aWRlcjogICAgICAgICAgICRkYXJrLWRpdmlkZXJzLFxuICBkaXZpZGVyczogICAgICAgICAgJGRhcmstZGl2aWRlcnMsXG4gIGRpc2FibGVkOiAgICAgICAgICAkZGFyay1kaXNhYmxlZC10ZXh0LFxuICBkaXNhYmxlZC1idXR0b246ICAgcmdiYShibGFjaywgMC4yNiksXG4gIGRpc2FibGVkLXRleHQ6ICAgICAkZGFyay1kaXNhYmxlZC10ZXh0LFxuICBlbGV2YXRpb246ICAgICAgICAgYmxhY2ssXG4gIGhpbnQtdGV4dDogICAgICAgICAkZGFyay1kaXNhYmxlZC10ZXh0LFxuICBzZWNvbmRhcnktdGV4dDogICAgJGRhcmstc2Vjb25kYXJ5LXRleHQsXG4gIGljb246ICAgICAgICAgICAgICByZ2JhKGJsYWNrLCAwLjU0KSxcbiAgaWNvbnM6ICAgICAgICAgICAgIHJnYmEoYmxhY2ssIDAuNTQpLFxuICB0ZXh0OiAgICAgICAgICAgICAgcmdiYShibGFjaywgMC44NyksXG4gIHNsaWRlci1taW46ICAgICAgICByZ2JhKGJsYWNrLCAwLjg3KSxcbiAgc2xpZGVyLW9mZjogICAgICAgIHJnYmEoYmxhY2ssIDAuMjYpLFxuICBzbGlkZXItb2ZmLWFjdGl2ZTogcmdiYShibGFjaywgMC4zOCksXG4pO1xuXG4vLyBGb3JlZ3JvdW5kIHBhbGV0dGUgZm9yIGRhcmsgdGhlbWVzLlxuJG1hdC1kYXJrLXRoZW1lLWZvcmVncm91bmQ6IChcbiAgYmFzZTogICAgICAgICAgICAgIHdoaXRlLFxuICBkaXZpZGVyOiAgICAgICAgICAgJGxpZ2h0LWRpdmlkZXJzLFxuICBkaXZpZGVyczogICAgICAgICAgJGxpZ2h0LWRpdmlkZXJzLFxuICBkaXNhYmxlZDogICAgICAgICAgJGxpZ2h0LWRpc2FibGVkLXRleHQsXG4gIGRpc2FibGVkLWJ1dHRvbjogICByZ2JhKHdoaXRlLCAwLjMpLFxuICBkaXNhYmxlZC10ZXh0OiAgICAgJGxpZ2h0LWRpc2FibGVkLXRleHQsXG4gIGVsZXZhdGlvbjogICAgICAgICBibGFjayxcbiAgaGludC10ZXh0OiAgICAgICAgICRsaWdodC1kaXNhYmxlZC10ZXh0LFxuICBzZWNvbmRhcnktdGV4dDogICAgJGxpZ2h0LXNlY29uZGFyeS10ZXh0LFxuICBpY29uOiAgICAgICAgICAgICAgd2hpdGUsXG4gIGljb25zOiAgICAgICAgICAgICB3aGl0ZSxcbiAgdGV4dDogICAgICAgICAgICAgIHdoaXRlLFxuICBzbGlkZXItbWluOiAgICAgICAgd2hpdGUsXG4gIHNsaWRlci1vZmY6ICAgICAgICByZ2JhKHdoaXRlLCAwLjMpLFxuICBzbGlkZXItb2ZmLWFjdGl2ZTogcmdiYSh3aGl0ZSwgMC4zKSxcbik7XG5cblxuXG4vLyBGb3IgYSBnaXZlbiBodWUgaW4gYSBwYWxldHRlLCByZXR1cm4gdGhlIGNvbnRyYXN0IGNvbG9yIGZyb20gdGhlIG1hcCBvZiBjb250cmFzdCBwYWxldHRlcy5cbi8vIEBwYXJhbSAkY29sb3ItbWFwXG4vLyBAcGFyYW0gJGh1ZVxuQGZ1bmN0aW9uIG1hdC1jb250cmFzdCgkcGFsZXR0ZSwgJGh1ZSkge1xuICBAcmV0dXJuIG1hcC1nZXQobWFwLWdldCgkcGFsZXR0ZSwgY29udHJhc3QpLCAkaHVlKTtcbn1cblxuXG4vLyBDcmVhdGVzIGEgbWFwIG9mIGh1ZXMgdG8gY29sb3JzIGZvciBhIHRoZW1lLiBUaGlzIGlzIHVzZWQgdG8gZGVmaW5lIGEgdGhlbWUgcGFsZXR0ZSBpbiB0ZXJtc1xuLy8gb2YgdGhlIE1hdGVyaWFsIERlc2lnbiBodWVzLlxuLy8gQHBhcmFtICRjb2xvci1tYXBcbi8vIEBwYXJhbSAkcHJpbWFyeVxuLy8gQHBhcmFtICRsaWdodGVyXG5AZnVuY3Rpb24gbWF0LXBhbGV0dGUoJGJhc2UtcGFsZXR0ZSwgJGRlZmF1bHQ6IDUwMCwgJGxpZ2h0ZXI6IDEwMCwgJGRhcmtlcjogNzAwLCAkdGV4dDogJGRlZmF1bHQpIHtcbiAgJHJlc3VsdDogbWFwX21lcmdlKCRiYXNlLXBhbGV0dGUsIChcbiAgICBkZWZhdWx0OiBtYXAtZ2V0KCRiYXNlLXBhbGV0dGUsICRkZWZhdWx0KSxcbiAgICBsaWdodGVyOiBtYXAtZ2V0KCRiYXNlLXBhbGV0dGUsICRsaWdodGVyKSxcbiAgICBkYXJrZXI6IG1hcC1nZXQoJGJhc2UtcGFsZXR0ZSwgJGRhcmtlciksXG4gICAgdGV4dDogbWFwLWdldCgkYmFzZS1wYWxldHRlLCAkdGV4dCksXG5cbiAgICBkZWZhdWx0LWNvbnRyYXN0OiBtYXQtY29udHJhc3QoJGJhc2UtcGFsZXR0ZSwgJGRlZmF1bHQpLFxuICAgIGxpZ2h0ZXItY29udHJhc3Q6IG1hdC1jb250cmFzdCgkYmFzZS1wYWxldHRlLCAkbGlnaHRlciksXG4gICAgZGFya2VyLWNvbnRyYXN0OiBtYXQtY29udHJhc3QoJGJhc2UtcGFsZXR0ZSwgJGRhcmtlcilcbiAgKSk7XG5cbiAgLy8gRm9yIGVhY2ggaHVlIGluIHRoZSBwYWxldHRlLCBhZGQgYSBcIi1jb250cmFzdFwiIGNvbG9yIHRvIHRoZSBtYXAuXG4gIEBlYWNoICRodWUsICRjb2xvciBpbiAkYmFzZS1wYWxldHRlIHtcbiAgICAkcmVzdWx0OiBtYXBfbWVyZ2UoJHJlc3VsdCwgKFxuICAgICAgJyN7JGh1ZX0tY29udHJhc3QnOiBtYXQtY29udHJhc3QoJGJhc2UtcGFsZXR0ZSwgJGh1ZSlcbiAgICApKTtcbiAgfVxuXG4gIEByZXR1cm4gJHJlc3VsdDtcbn1cblxuXG4vLyBHZXRzIGEgY29sb3IgZnJvbSBhIHRoZW1lIHBhbGV0dGUgKHRoZSBvdXRwdXQgb2YgbWF0LXBhbGV0dGUpLlxuLy8gVGhlIGh1ZSBjYW4gYmUgb25lIG9mIHRoZSBzdGFuZGFyZCB2YWx1ZXMgKDUwMCwgQTQwMCwgZXRjLiksIG9uZSBvZiB0aGUgdGhyZWUgcHJlY29uZmlndXJlZFxuLy8gaHVlcyAoZGVmYXVsdCwgbGlnaHRlciwgZGFya2VyKSwgb3IgYW55IG9mIHRoZSBhZm9yZW1lbnRpb25lZCBwcmVmaXhlZCB3aXRoIFwiLWNvbnRyYXN0XCIuXG4vL1xuLy8gQHBhcmFtICRjb2xvci1tYXAgVGhlIHRoZW1lIHBhbGV0dGUgKG91dHB1dCBvZiBtYXQtcGFsZXR0ZSkuXG4vLyBAcGFyYW0gJGh1ZSBUaGUgaHVlIGZyb20gdGhlIHBhbGV0dGUgdG8gdXNlLiBJZiB0aGlzIGlzIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLCBpdCB3aWxsXG4vLyAgICAgYmUgdHJlYXRlZCBhcyBvcGFjaXR5LlxuLy8gQHBhcmFtICRvcGFjaXR5IFRoZSBhbHBoYSBjaGFubmVsIHZhbHVlIGZvciB0aGUgY29sb3IuXG5AZnVuY3Rpb24gbWF0LWNvbG9yKCRwYWxldHRlLCAkaHVlOiBkZWZhdWx0LCAkb3BhY2l0eTogbnVsbCkge1xuICAvLyBJZiBodWVLZXkgaXMgYSBudW1iZXIgYmV0d2VlbiB6ZXJvIGFuZCBvbmUsIHRoZW4gaXQgYWN0dWFsbHkgY29udGFpbnMgYW5cbiAgLy8gb3BhY2l0eSB2YWx1ZSwgc28gcmVjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCB0aGUgZGVmYXVsdCBodWUgYW5kIHRoYXQgZ2l2ZW4gb3BhY2l0eS5cbiAgQGlmIHR5cGUtb2YoJGh1ZSkgPT0gbnVtYmVyIGFuZCAkaHVlID49IDAgYW5kICRodWUgPD0gMSB7XG4gICAgQHJldHVybiBtYXQtY29sb3IoJHBhbGV0dGUsIGRlZmF1bHQsICRodWUpO1xuICB9XG5cbiAgJGNvbG9yOiBtYXAtZ2V0KCRwYWxldHRlLCAkaHVlKTtcblxuICBAaWYgKHR5cGUtb2YoJGNvbG9yKSAhPSBjb2xvcikge1xuICAgIC8vIElmIHRoZSAkY29sb3IgcmVzb2x2ZWQgdG8gc29tZXRoaW5nIGRpZmZlcmVudCBmcm9tIGEgY29sb3IgKGUuZy4gYSBDU1MgdmFyaWFibGUpLFxuICAgIC8vIHdlIGNhbid0IGFwcGx5IHRoZSBvcGFjaXR5IGFueXdheSBzbyB3ZSByZXR1cm4gdGhlIHZhbHVlIGFzIGlzLCBvdGhlcndpc2UgU2FzcyBjYW5cbiAgICAvLyB0aHJvdyBhbiBlcnJvciBvciBvdXRwdXQgc29tZXRoaW5nIGludmFsaWQuXG4gICAgQHJldHVybiAkY29sb3I7XG4gIH1cblxuICBAcmV0dXJuIHJnYmEoJGNvbG9yLCBpZigkb3BhY2l0eSA9PSBudWxsLCBvcGFjaXR5KCRjb2xvciksICRvcGFjaXR5KSk7XG59XG5cblxuLy8gQ3JlYXRlcyBhIGNvbnRhaW5lciBvYmplY3QgZm9yIGEgbGlnaHQgdGhlbWUgdG8gYmUgZ2l2ZW4gdG8gaW5kaXZpZHVhbCBjb21wb25lbnQgdGhlbWUgbWl4aW5zLlxuQGZ1bmN0aW9uIG1hdC1saWdodC10aGVtZSgkcHJpbWFyeSwgJGFjY2VudCwgJHdhcm46IG1hdC1wYWxldHRlKCRtYXQtcmVkKSkge1xuICBAcmV0dXJuIChcbiAgICBwcmltYXJ5OiAkcHJpbWFyeSxcbiAgICBhY2NlbnQ6ICRhY2NlbnQsXG4gICAgd2FybjogJHdhcm4sXG4gICAgaXMtZGFyazogZmFsc2UsXG4gICAgZm9yZWdyb3VuZDogJG1hdC1saWdodC10aGVtZS1mb3JlZ3JvdW5kLFxuICAgIGJhY2tncm91bmQ6ICRtYXQtbGlnaHQtdGhlbWUtYmFja2dyb3VuZCxcbiAgKTtcbn1cblxuXG4vLyBDcmVhdGVzIGEgY29udGFpbmVyIG9iamVjdCBmb3IgYSBkYXJrIHRoZW1lIHRvIGJlIGdpdmVuIHRvIGluZGl2aWR1YWwgY29tcG9uZW50IHRoZW1lIG1peGlucy5cbkBmdW5jdGlvbiBtYXQtZGFyay10aGVtZSgkcHJpbWFyeSwgJGFjY2VudCwgJHdhcm46IG1hdC1wYWxldHRlKCRtYXQtcmVkKSkge1xuICBAcmV0dXJuIChcbiAgICBwcmltYXJ5OiAkcHJpbWFyeSxcbiAgICBhY2NlbnQ6ICRhY2NlbnQsXG4gICAgd2FybjogJHdhcm4sXG4gICAgaXMtZGFyazogdHJ1ZSxcbiAgICBmb3JlZ3JvdW5kOiAkbWF0LWRhcmstdGhlbWUtZm9yZWdyb3VuZCxcbiAgICBiYWNrZ3JvdW5kOiAkbWF0LWRhcmstdGhlbWUtYmFja2dyb3VuZCxcbiAgKTtcbn1cblxuXG5cbiRtYXQtcmlwcGxlLWNvbG9yLW9wYWNpdHk6IDAuMTtcblxuQG1peGluIG1hdC1yaXBwbGUoKSB7XG5cbiAgLy8gVGhlIGhvc3QgZWxlbWVudCBvZiBhbiBtYXQtcmlwcGxlIGRpcmVjdGl2ZSBzaG91bGQgYWx3YXlzIGhhdmUgYSBwb3NpdGlvbiBvZiBcImFic29sdXRlXCIgb3JcbiAgLy8gXCJyZWxhdGl2ZVwiIHNvIHRoYXQgdGhlIHJpcHBsZXMgaW5zaWRlIGFyZSBjb3JyZWN0bHkgcG9zaXRpb25lZCByZWxhdGl2ZWx5IHRvIHRoZSBjb250YWluZXIuXG4gIC5tYXQtcmlwcGxlIHtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgLy8gQnkgZGVmYXVsdCwgZXZlcnkgcmlwcGxlIGNvbnRhaW5lciBzaG91bGQgaGF2ZSBwb3NpdGlvbjogcmVsYXRpdmUgaW4gZmF2b3Igb2YgY3JlYXRpbmcgYW5cbiAgICAvLyBlYXN5IEFQSSBmb3IgZGV2ZWxvcGVycyB1c2luZyB0aGUgTWF0UmlwcGxlIGRpcmVjdGl2ZS5cbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAvLyBQcm9tb3RlIGNvbnRhaW5lcnMgdGhhdCBoYXZlIHJpcHBsZXMgdG8gYSBuZXcgbGF5ZXIuIFdlIHdhbnQgdG8gdGFyZ2V0IGA6bm90KDplbXB0eSlgLFxuICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCBhbGwgcmlwcGxlIGNvbnRhaW5lcnMgdG8gaGF2ZSB0aGVpciBvd24gbGF5ZXIgc2luY2UgdGhleSdyZSB1c2VkIGluIGFcbiAgICAvLyBsb3Qgb2YgcGxhY2VzIGFuZCB0aGUgbGF5ZXIgaXMgb25seSByZWxldmFudCB3aGlsZSBhbmltYXRpbmcuIE5vdGUgdGhhdCBpZGVhbGx5IHdlJ2QgdXNlXG4gICAgLy8gdGhlIGBjb250YWluYCBwcm9wZXJ0eSBoZXJlIChzZWUgIzEzMTc1KSwgYmVjYXVzZSBgOmVtcHR5YCBjYW4gYmUgYnJva2VuIGJ5IGhhdmluZyBleHRyYVxuICAgIC8vIHRleHQgaW5zaWRlIHRoZSBlbGVtZW50LCBidXQgaXQgaXNuJ3QgdmVyeSB3ZWxsIHN1cHBvcnRlZCB5ZXQuXG4gICAgJjpub3QoOmVtcHR5KSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWQge1xuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICB9XG5cbiAgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcblxuICAgIHRyYW5zaXRpb246IG9wYWNpdHksIHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwKTtcblxuICAgIC8vIEluIGhpZ2ggY29udHJhc3QgbW9kZSB0aGUgcmlwcGxlIGlzIG9wYXF1ZSwgY2F1c2luZyBpdCB0byBvYnN0cnVjdCB0aGUgY29udGVudC5cbiAgICBAaW5jbHVkZSBjZGstaGlnaC1jb250cmFzdChhY3RpdmUsIG9mZikge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cbn1cblxuLyogVGhlbWUgZm9yIHRoZSByaXBwbGUgZWxlbWVudHMuKi9cbkBtaXhpbiBtYXQtcmlwcGxlLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwX2dldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkZm9yZWdyb3VuZC1iYXNlOiBtYXBfZ2V0KCRmb3JlZ3JvdW5kLCBiYXNlKTtcblxuICAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAvLyBJZiB0aGUgcmlwcGxlIGNvbG9yIGlzIHJlc29sdmVzIHRvIGEgY29sb3IgKnR5cGUqLCB3ZSBjYW4gdXNlIGl0IGRpcmVjdGx5LCBvdGhlcndpc2VcbiAgICAvLyAoZS5nLiBpdCByZXNvbHZlcyB0byBhIENTUyB2YXJpYWJsZSkgd2UgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBjb2xvciBhbmQgc2V0dGluZyBhbiBvcGFjaXR5LlxuICAgIEBpZiAodHlwZS1vZigkZm9yZWdyb3VuZC1iYXNlKSA9PSBjb2xvcikge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgkZm9yZWdyb3VuZC1iYXNlLCAkbWF0LXJpcHBsZS1jb2xvci1vcGFjaXR5KTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGZvcmVncm91bmQtYmFzZTtcbiAgICAgIG9wYWNpdHk6ICRtYXQtcmlwcGxlLWNvbG9yLW9wYWNpdHk7XG4gICAgfVxuICB9XG59XG5cblxuXG4vLyBVdGlsaXR5IGZvciBmZXRjaGluZyBhIG5lc3RlZCB2YWx1ZSBmcm9tIGEgdHlwb2dyYXBoeSBjb25maWcuXG5AZnVuY3Rpb24gX21hdC1nZXQtdHlwZS12YWx1ZSgkY29uZmlnLCAkbGV2ZWwsICRuYW1lKSB7XG4gIEByZXR1cm4gbWFwLWdldChtYXAtZ2V0KCRjb25maWcsICRsZXZlbCksICRuYW1lKTtcbn1cblxuLy8gR2V0cyB0aGUgZm9udCBzaXplIGZvciBhIGxldmVsIGluc2lkZSBhIHR5cG9ncmFwaHkgY29uZmlnLlxuQGZ1bmN0aW9uIG1hdC1mb250LXNpemUoJGNvbmZpZywgJGxldmVsKSB7XG4gIEByZXR1cm4gX21hdC1nZXQtdHlwZS12YWx1ZSgkY29uZmlnLCAkbGV2ZWwsIGZvbnQtc2l6ZSk7XG59XG5cbi8vIEdldHMgdGhlIGxpbmUgaGVpZ2h0IGZvciBhIGxldmVsIGluc2lkZSBhIHR5cG9ncmFwaHkgY29uZmlnLlxuQGZ1bmN0aW9uIG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCAkbGV2ZWwpIHtcbiAgQHJldHVybiBfbWF0LWdldC10eXBlLXZhbHVlKCRjb25maWcsICRsZXZlbCwgbGluZS1oZWlnaHQpO1xufVxuXG4vLyBHZXRzIHRoZSBmb250IHdlaWdodCBmb3IgYSBsZXZlbCBpbnNpZGUgYSB0eXBvZ3JhcGh5IGNvbmZpZy5cbkBmdW5jdGlvbiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgJGxldmVsKSB7XG4gIEByZXR1cm4gX21hdC1nZXQtdHlwZS12YWx1ZSgkY29uZmlnLCAkbGV2ZWwsIGZvbnQtd2VpZ2h0KTtcbn1cblxuLy8gR2V0cyB0aGUgbGV0dGVyIHNwYWNpbmcgZm9yIGEgbGV2ZWwgaW5zaWRlIGEgdHlwb2dyYXBoeSBjb25maWcuXG5AZnVuY3Rpb24gbWF0LWxldHRlci1zcGFjaW5nKCRjb25maWcsICRsZXZlbCkge1xuICBAcmV0dXJuIF9tYXQtZ2V0LXR5cGUtdmFsdWUoJGNvbmZpZywgJGxldmVsLCBsZXR0ZXItc3BhY2luZyk7XG59XG5cbi8vIEdldHMgdGhlIGZvbnQtZmFtaWx5IGZyb20gYSB0eXBvZ3JhcGh5IGNvbmZpZyBhbmQgcmVtb3ZlcyB0aGUgcXVvdGVzIGFyb3VuZCBpdC5cbkBmdW5jdGlvbiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgJGxldmVsOiBudWxsKSB7XG4gICRmb250LWZhbWlseTogbWFwLWdldCgkY29uZmlnLCBmb250LWZhbWlseSk7XG5cbiAgQGlmICRsZXZlbCAhPSBudWxsIHtcbiAgICAkZm9udC1mYW1pbHk6IF9tYXQtZ2V0LXR5cGUtdmFsdWUoJGNvbmZpZywgJGxldmVsLCBmb250LWZhbWlseSk7XG4gIH1cblxuICAvLyBHdWFyZCBhZ2FpbnN0IHVucXVvdGluZyBub24tc3RyaW5nIHZhbHVlcywgYmVjYXVzZSBpdCdzIGRlcHJlY2F0ZWQuXG4gIEByZXR1cm4gaWYodHlwZS1vZigkZm9udC1mYW1pbHkpID09IHN0cmluZywgdW5xdW90ZSgkZm9udC1mYW1pbHkpLCAkZm9udC1mYW1pbHkpO1xufVxuXG4vLyBPdXRwdXRzIHRoZSBzaG9ydGhhbmQgYGZvbnRgIENTUyBwcm9wZXJ0eSwgYmFzZWQgb24gYSBzZXQgb2YgdHlwb2dyYXBoeSB2YWx1ZXMuIEZhbGxzIGJhY2sgdG9cbi8vIHRoZSBpbmRpdmlkdWFsIHByb3BlcnRpZXMgaWYgYSB2YWx1ZSB0aGF0IGlzbid0IGFsbG93ZWQgaW4gdGhlIHNob3J0aGFuZCBpcyBwYXNzZWQgaW4uXG5AbWl4aW4gbWF0LXR5cG9ncmFwaHktZm9udC1zaG9ydGhhbmQoJGZvbnQtc2l6ZSwgJGZvbnQtd2VpZ2h0LCAkbGluZS1oZWlnaHQsICRmb250LWZhbWlseSkge1xuICAvLyBJZiBhbnkgb2YgdGhlIHZhbHVlcyBhcmUgc2V0IHRvIGBpbmhlcml0YCwgd2UgY2FuJ3QgdXNlIHRoZSBzaG9ydGhhbmRcbiAgLy8gc28gd2UgZmFsbCBiYWNrIHRvIHBhc3NpbmcgaW4gdGhlIGluZGl2aWR1YWwgcHJvcGVydGllcy5cbiAgQGlmICgkZm9udC1zaXplID09IGluaGVyaXQgb3JcbiAgICAgICAkZm9udC13ZWlnaHQgPT0gaW5oZXJpdCBvclxuICAgICAgICRsaW5lLWhlaWdodCA9PSBpbmhlcml0IG9yXG4gICAgICAgJGZvbnQtZmFtaWx5ID09IGluaGVyaXQgb3JcbiAgICAgICAkZm9udC1zaXplID09IG51bGwgb3JcbiAgICAgICAkZm9udC13ZWlnaHQgPT0gbnVsbCBvclxuICAgICAgICRsaW5lLWhlaWdodCA9PSBudWxsIG9yXG4gICAgICAgJGZvbnQtZmFtaWx5ID09IG51bGwpIHtcblxuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZTtcbiAgICBmb250LXdlaWdodDogJGZvbnQtd2VpZ2h0O1xuICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQ7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseTtcbiAgfVxuICBAZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlIHVzZSB0aGUgc2hvcnRoYW5kIGBmb250YCwgYmVjYXVzZSBpdCdzIHRoZSBsZWFzdCBhbW91bnQgb2YgYnl0ZXMuIE5vdGVcbiAgICAvLyB0aGF0IHdlIG5lZWQgdG8gdXNlIGludGVycG9sYXRpb24gZm9yIGBmb250LXNpemUvbGluZS1oZWlnaHRgIGluIG9yZGVyIHRvIHByZXZlbnRcbiAgICAvLyBTYXNzIGZyb20gZGl2aWRpbmcgdGhlIHR3byB2YWx1ZXMuXG4gICAgZm9udDogJGZvbnQtd2VpZ2h0ICN7JGZvbnQtc2l6ZX0vI3skbGluZS1oZWlnaHR9ICRmb250LWZhbWlseTtcbiAgfVxufVxuXG4vLyBDb252ZXJ0cyBhIHR5cG9ncmFwaHkgbGV2ZWwgaW50byBDU1Mgc3R5bGVzLlxuQG1peGluIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCAkbGV2ZWwpIHtcbiAgJGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCAkbGV2ZWwpO1xuICAkZm9udC13ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCAkbGV2ZWwpO1xuICAkbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCAkbGV2ZWwpO1xuICAkZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCAkbGV2ZWwpO1xuXG4gIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWZvbnQtc2hvcnRoYW5kKCRmb250LXNpemUsICRmb250LXdlaWdodCwgJGxpbmUtaGVpZ2h0LCAkZm9udC1mYW1pbHkpO1xuICBsZXR0ZXItc3BhY2luZzogbWF0LWxldHRlci1zcGFjaW5nKCRjb25maWcsICRsZXZlbCk7XG59XG5cblxuQG1peGluIG1hdC1vcHRpb24tdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuXG4gIC5tYXQtb3B0aW9uIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAgICY6aG92ZXI6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSxcbiAgICAmOmZvY3VzOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3Zlcik7XG4gICAgfVxuXG4gICAgLy8gSW4gbXVsdGlwbGUgbW9kZSB0aGVyZSBpcyBhIGNoZWNrYm94IHRvIHNob3cgdGhhdCB0aGUgb3B0aW9uIGlzIHNlbGVjdGVkLlxuICAgICYubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSk6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyKTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY3RpdmUge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3Zlcik7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICB9XG5cbiAgICAmLm1hdC1vcHRpb24tZGlzYWJsZWQge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaGludC10ZXh0KTtcbiAgICB9XG4gIH1cblxuICAubWF0LXByaW1hcnkgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIHRleHQpO1xuICB9XG5cbiAgLm1hdC1hY2NlbnQgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgdGV4dCk7XG4gIH1cblxuICAubWF0LXdhcm4gLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtb3B0aW9uLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LW9wdGlvbiB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIHN1YmhlYWRpbmctMik7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuQG1peGluIG1hdC1vcHRncm91cC10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LW9wdGdyb3VwLWxhYmVsIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LW9wdGdyb3VwLWRpc2FibGVkIC5tYXQtb3B0Z3JvdXAtbGFiZWwge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGhpbnQtdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1vcHRncm91cC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1vcHRncm91cC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGJvZHktMik7XG4gIH1cbn1cblxuXG5cbkBtaXhpbiBtYXQtcHNldWRvLWNoZWNrYm94LXRoZW1lKCR0aGVtZSkge1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcblxuICAvLyBOT1RFKHRyYXZpc2thdWZtYW4pOiBXaGlsZSB0aGUgc3BlYyBjYWxscyBmb3IgdHJhbnNsdWNlbnQgYmxhY2tzL3doaXRlcyBmb3IgZGlzYWJsZWQgY29sb3JzLFxuICAvLyB0aGlzIGRvZXMgbm90IHdvcmsgd2VsbCB3aXRoIGVsZW1lbnRzIGxheWVyZWQgb24gdG9wIG9mIG9uZSBhbm90aGVyLiBUbyBnZXQgYXJvdW5kIHRoaXMgd2VcbiAgLy8gYmxlbmQgdGhlIGNvbG9ycyB0b2dldGhlciBiYXNlZCBvbiB0aGUgYmFzZSBjb2xvciBhbmQgdGhlIHRoZW1lIGJhY2tncm91bmQuXG4gICR3aGl0ZS0zMHBjdC1vcGFjaXR5LW9uLWRhcms6ICM2ODY4Njg7XG4gICRibGFjay0yNnBjdC1vcGFjaXR5LW9uLWxpZ2h0OiAjYjBiMGIwO1xuICAkZGlzYWJsZWQtY29sb3I6IGlmKCRpcy1kYXJrLXRoZW1lLCAkd2hpdGUtMzBwY3Qtb3BhY2l0eS1vbi1kYXJrLCAkYmxhY2stMjZwY3Qtb3BhY2l0eS1vbi1saWdodCk7XG4gICRjb2xvcmVkLWJveC1zZWxlY3RvcjogJy5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUnO1xuXG4gIC5tYXQtcHNldWRvLWNoZWNrYm94IHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKSwgc2Vjb25kYXJ5LXRleHQpO1xuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgYmFja2dyb3VuZCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQge1xuICAgIGNvbG9yOiAkZGlzYWJsZWQtY29sb3I7XG4gIH1cblxuICAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxcbiAgLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSkpO1xuICB9XG5cbiAgLy8gRGVmYXVsdCB0byB0aGUgYWNjZW50IGNvbG9yLiBOb3RlIHRoYXQgdGhlIHBzZXVkbyBjaGVja2JveGVzIGFyZSBtZWFudCB0byBpbmhlcml0IHRoZVxuICAvLyB0aGVtZSBmcm9tIHRoZWlyIHBhcmVudCwgcmF0aGVyIHRoYW4gaW1wbGVtZW50aW5nIHRoZWlyIG93biB0aGVtaW5nLCB3aGljaCBpcyB3aHkgd2VcbiAgLy8gZG9uJ3QgYXR0YWNoIHRvIHRoZSBgbWF0LSpgIGNsYXNzZXMuIEFsc28gbm90ZSB0aGF0IHRoaXMgbmVlZHMgdG8gYmUgYmVsb3cgYC5tYXQtcHJpbWFyeWBcbiAgLy8gaW4gb3JkZXIgdG8gYWxsb3cgZm9yIHRoZSBjb2xvciB0byBiZSBvdmVyd3JpdHRlbiBpZiB0aGUgY2hlY2tib3ggaXMgaW5zaWRlIGEgcGFyZW50IHRoYXRcbiAgLy8gaGFzIGBtYXQtYWNjZW50YCBhbmQgaXMgcGxhY2VkIGluc2lkZSBhbm90aGVyIHBhcmVudCB0aGF0IGhhcyBgbWF0LXByaW1hcnlgLlxuICAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLFxuICAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLFxuICAubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLFxuICAubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IobWFwLWdldCgkdGhlbWUsIGFjY2VudCkpO1xuICB9XG5cbiAgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsXG4gIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IobWFwLWdldCgkdGhlbWUsIHdhcm4pKTtcbiAgfVxuXG4gIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsXG4gIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUge1xuICAgICYubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZCB7XG4gICAgICBiYWNrZ3JvdW5kOiAkZGlzYWJsZWQtY29sb3I7XG4gICAgfVxuICB9XG59XG5cblxuXG4vLyBSZXByZXNlbnRzIGEgdHlwb2dyYXBoeSBsZXZlbCBmcm9tIHRoZSBNYXRlcmlhbCBkZXNpZ24gc3BlYy5cbkBmdW5jdGlvbiBtYXQtdHlwb2dyYXBoeS1sZXZlbChcbiAgJGZvbnQtc2l6ZSxcbiAgJGxpbmUtaGVpZ2h0OiAkZm9udC1zaXplLFxuICAkZm9udC13ZWlnaHQ6IDQwMCxcbiAgJGZvbnQtZmFtaWx5OiBudWxsLFxuICAkbGV0dGVyLXNwYWNpbmc6IG5vcm1hbCkge1xuXG4gIEByZXR1cm4gKFxuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZSxcbiAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LFxuICAgIGZvbnQtd2VpZ2h0OiAkZm9udC13ZWlnaHQsXG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseSxcbiAgICBsZXR0ZXItc3BhY2luZzogJGxldHRlci1zcGFjaW5nXG4gICk7XG59XG5cbi8vIFJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIHR5cG9ncmFwaHkgbGV2ZWxzLlxuLy8gRGVmYXVsdHMgY29tZSBmcm9tIGh0dHBzOi8vbWF0ZXJpYWwuaW8vZ3VpZGVsaW5lcy9zdHlsZS90eXBvZ3JhcGh5Lmh0bWxcbi8vIE5vdGU6IFRoZSBzcGVjIGRvZXNuJ3QgbWVudGlvbiBsZXR0ZXIgc3BhY2luZy4gVGhlIHZhbHVlcyBoZXJlIGNvbWUgZnJvbVxuLy8gZXllYmFsbGluZyBpdCB1bnRpbCBpdCBsb29rZWQgZXhhY3RseSBsaWtlIHRoZSBzcGVjIGV4YW1wbGVzLlxuQGZ1bmN0aW9uIG1hdC10eXBvZ3JhcGh5LWNvbmZpZyhcbiAgJGZvbnQtZmFtaWx5OiAgICdSb2JvdG8sIFwiSGVsdmV0aWNhIE5ldWVcIiwgc2Fucy1zZXJpZicsXG4gICRkaXNwbGF5LTQ6ICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgxMTJweCwgMTEycHgsIDMwMCwgJGxldHRlci1zcGFjaW5nOiAtMC4wNWVtKSxcbiAgJGRpc3BsYXktMzogICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDU2cHgsIDU2cHgsIDQwMCwgJGxldHRlci1zcGFjaW5nOiAtMC4wMmVtKSxcbiAgJGRpc3BsYXktMjogICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDQ1cHgsIDQ4cHgsIDQwMCwgJGxldHRlci1zcGFjaW5nOiAtMC4wMDVlbSksXG4gICRkaXNwbGF5LTE6ICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgzNHB4LCA0MHB4LCA0MDApLFxuICAkaGVhZGxpbmU6ICAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMjRweCwgMzJweCwgNDAwKSxcbiAgJHRpdGxlOiAgICAgICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDIwcHgsIDMycHgsIDUwMCksXG4gICRzdWJoZWFkaW5nLTI6ICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgxNnB4LCAyOHB4LCA0MDApLFxuICAkc3ViaGVhZGluZy0xOiAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMTVweCwgMjRweCwgNDAwKSxcbiAgJGJvZHktMjogICAgICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDE0cHgsIDI0cHgsIDUwMCksXG4gICRib2R5LTE6ICAgICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgxNHB4LCAyMHB4LCA0MDApLFxuICAkY2FwdGlvbjogICAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMTJweCwgMjBweCwgNDAwKSxcbiAgJGJ1dHRvbjogICAgICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDE0cHgsIDE0cHgsIDUwMCksXG4gIC8vIExpbmUtaGVpZ2h0IG11c3QgYmUgdW5pdC1sZXNzIGZyYWN0aW9uIG9mIHRoZSBmb250LXNpemUuXG4gICRpbnB1dDogICAgICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbChpbmhlcml0LCAxLjEyNSwgNDAwKVxuKSB7XG5cbiAgLy8gRGVjbGFyZSBhbiBpbml0aWFsIG1hcCB3aXRoIGFsbCBvZiB0aGUgbGV2ZWxzLlxuICAkY29uZmlnOiAoXG4gICAgZGlzcGxheS00OiAgICAgICRkaXNwbGF5LTQsXG4gICAgZGlzcGxheS0zOiAgICAgICRkaXNwbGF5LTMsXG4gICAgZGlzcGxheS0yOiAgICAgICRkaXNwbGF5LTIsXG4gICAgZGlzcGxheS0xOiAgICAgICRkaXNwbGF5LTEsXG4gICAgaGVhZGxpbmU6ICAgICAgICRoZWFkbGluZSxcbiAgICB0aXRsZTogICAgICAgICAgJHRpdGxlLFxuICAgIHN1YmhlYWRpbmctMjogICAkc3ViaGVhZGluZy0yLFxuICAgIHN1YmhlYWRpbmctMTogICAkc3ViaGVhZGluZy0xLFxuICAgIGJvZHktMjogICAgICAgICAkYm9keS0yLFxuICAgIGJvZHktMTogICAgICAgICAkYm9keS0xLFxuICAgIGNhcHRpb246ICAgICAgICAkY2FwdGlvbixcbiAgICBidXR0b246ICAgICAgICAgJGJ1dHRvbixcbiAgICBpbnB1dDogICAgICAgICAgJGlucHV0LFxuICApO1xuXG4gIC8vIExvb3AgdGhyb3VnaCB0aGUgbGV2ZWxzIGFuZCBzZXQgdGhlIGBmb250LWZhbWlseWAgb2YgdGhlIG9uZXMgdGhhdCBkb24ndCBoYXZlIG9uZSB0byB0aGUgYmFzZS5cbiAgLy8gTm90ZSB0aGF0IFNhc3MgY2FuJ3QgbW9kaWZ5IG1hcHMgaW4gcGxhY2UsIHdoaWNoIG1lYW5zIHRoYXQgd2UgbmVlZCB0byBtZXJnZSBhbmQgcmUtYXNzaWduLlxuICBAZWFjaCAka2V5LCAkbGV2ZWwgaW4gJGNvbmZpZyB7XG4gICAgQGlmIG1hcC1nZXQoJGxldmVsLCBmb250LWZhbWlseSkgPT0gbnVsbCB7XG4gICAgICAkbmV3LWxldmVsOiBtYXAtbWVyZ2UoJGxldmVsLCAoZm9udC1mYW1pbHk6ICRmb250LWZhbWlseSkpO1xuICAgICAgJGNvbmZpZzogbWFwLW1lcmdlKCRjb25maWcsICgka2V5OiAkbmV3LWxldmVsKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIHRoZSBiYXNlIGZvbnQgZmFtaWx5IHRvIHRoZSBjb25maWcuXG4gIEByZXR1cm4gbWFwLW1lcmdlKCRjb25maWcsIChmb250LWZhbWlseTogJGZvbnQtZmFtaWx5KSk7XG59XG5cbi8vIEFkZHMgdGhlIGJhc2UgdHlwb2dyYXBoeSBzdHlsZXMsIGJhc2VkIG9uIGEgY29uZmlnLlxuQG1peGluIG1hdC1iYXNlLXR5cG9ncmFwaHkoJGNvbmZpZywgJHNlbGVjdG9yOiAnLm1hdC10eXBvZ3JhcGh5Jykge1xuICAubWF0LWgxLCAubWF0LWhlYWRsaW5lLCAjeyRzZWxlY3Rvcn0gaDEge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBoZWFkbGluZSk7XG4gICAgbWFyZ2luOiAwIDAgMTZweDtcbiAgfVxuXG4gIC5tYXQtaDIsIC5tYXQtdGl0bGUsICN7JHNlbGVjdG9yfSBoMiB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIHRpdGxlKTtcbiAgICBtYXJnaW46IDAgMCAxNnB4O1xuICB9XG5cbiAgLm1hdC1oMywgLm1hdC1zdWJoZWFkaW5nLTIsICN7JHNlbGVjdG9yfSBoMyB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIHN1YmhlYWRpbmctMik7XG4gICAgbWFyZ2luOiAwIDAgMTZweDtcbiAgfVxuXG4gIC5tYXQtaDQsIC5tYXQtc3ViaGVhZGluZy0xLCAjeyRzZWxlY3Rvcn0gaDQge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBzdWJoZWFkaW5nLTEpO1xuICAgIG1hcmdpbjogMCAwIDE2cHg7XG4gIH1cblxuICAvLyBOb3RlOiB0aGUgc3BlYyBkb2Vzbid0IGhhdmUgYW55dGhpbmcgdGhhdCB3b3VsZCBjb3JyZXNwb25kIHRvIGg1IGFuZCBoNiwgYnV0IHdlIGFkZCB0aGVzZSBmb3JcbiAgLy8gY29uc2lzdGVuY3kuIFRoZSBmb250IHNpemVzIGNvbWUgZnJvbSB0aGUgQ2hyb21lIHVzZXIgYWdlbnQgc3R5bGVzIHdoaWNoIGhhdmUgaDUgYXQgMC44M2VtXG4gIC8vIGFuZCBoNiBhdCAwLjY3ZW0uXG4gIC5tYXQtaDUsICN7JHNlbGVjdG9yfSBoNSB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktZm9udC1zaG9ydGhhbmQoXG4gICAgICAgLy8gY2FsYyBpcyB1c2VkIGhlcmUgdG8gc3VwcG9ydCBjc3MgdmFyaWFibGVzXG4gICAgICBjYWxjKCN7bWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpfSAqIDAuODMpLFxuICAgICAgbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMSksXG4gICAgICBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgYm9keS0xKSxcbiAgICAgIG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBib2R5LTEpXG4gICAgKTtcblxuICAgIG1hcmdpbjogMCAwIDEycHg7XG4gIH1cblxuICAubWF0LWg2LCAjeyRzZWxlY3Rvcn0gaDYge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWZvbnQtc2hvcnRoYW5kKFxuICAgICAgIC8vIGNhbGMgaXMgdXNlZCBoZXJlIHRvIHN1cHBvcnQgY3NzIHZhcmlhYmxlc1xuICAgICAgY2FsYygje21hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKX0gKiAwLjY3KSxcbiAgICAgIG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTEpLFxuICAgICAgbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGJvZHktMSksXG4gICAgICBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgYm9keS0xKVxuICAgICk7XG5cbiAgICBtYXJnaW46IDAgMCAxMnB4O1xuICB9XG5cbiAgLm1hdC1ib2R5LXN0cm9uZywgLm1hdC1ib2R5LTIge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBib2R5LTIpO1xuICB9XG5cbiAgLm1hdC1ib2R5LCAubWF0LWJvZHktMSwgI3skc2VsZWN0b3J9IHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgYm9keS0xKTtcblxuICAgIHAge1xuICAgICAgbWFyZ2luOiAwIDAgMTJweDtcbiAgICB9XG4gIH1cblxuICAubWF0LXNtYWxsLCAubWF0LWNhcHRpb24ge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBjYXB0aW9uKTtcbiAgfVxuXG4gIC5tYXQtZGlzcGxheS00LCAjeyRzZWxlY3Rvcn0gLm1hdC1kaXNwbGF5LTQge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBkaXNwbGF5LTQpO1xuICAgIG1hcmdpbjogMCAwIDU2cHg7XG4gIH1cblxuICAubWF0LWRpc3BsYXktMywgI3skc2VsZWN0b3J9IC5tYXQtZGlzcGxheS0zIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgZGlzcGxheS0zKTtcbiAgICBtYXJnaW46IDAgMCA2NHB4O1xuICB9XG5cbiAgLm1hdC1kaXNwbGF5LTIsICN7JHNlbGVjdG9yfSAubWF0LWRpc3BsYXktMiB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGRpc3BsYXktMik7XG4gICAgbWFyZ2luOiAwIDAgNjRweDtcbiAgfVxuXG4gIC5tYXQtZGlzcGxheS0xLCAjeyRzZWxlY3Rvcn0gLm1hdC1kaXNwbGF5LTEge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBkaXNwbGF5LTEpO1xuICAgIG1hcmdpbjogMCAwIDY0cHg7XG4gIH1cbn1cblxuXG5cblxuQG1peGluIG1hdC1hdXRvY29tcGxldGUtdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG5cbiAgLm1hdC1hdXRvY29tcGxldGUtcGFuZWwge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDQsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAgIC8vIFNlbGVjdGVkIG9wdGlvbnMgaW4gYXV0b2NvbXBsZXRlcyBzaG91bGQgbm90IGJlIGdyYXksIGJ1dCB3ZVxuICAgIC8vIG9ubHkgd2FudCB0byBvdmVycmlkZSB0aGUgYmFja2dyb3VuZCBmb3Igc2VsZWN0ZWQgb3B0aW9ucyBpZlxuICAgIC8vIHRoZXkgYXJlICpub3QqIGluIGhvdmVyIG9yIGZvY3VzIHN0YXRlLiBUaGlzIGNoYW5nZSBoYXMgdG8gYmVcbiAgICAvLyBtYWRlIGhlcmUgYmVjYXVzZSBiYXNlIG9wdGlvbiBzdHlsZXMgYXJlIHNoYXJlZCBiZXR3ZWVuIHRoZVxuICAgIC8vIGF1dG9jb21wbGV0ZSBhbmQgdGhlIHNlbGVjdC5cbiAgICAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKSB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuXG4gICAgICAmOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICAgICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufVxuXG5AbWl4aW4gbWF0LWF1dG9jb21wbGV0ZS10eXBvZ3JhcGh5KCRjb25maWcpIHsgfVxuXG4vLyBUaGlzIGNvbnRhaW5zIGFsbCBvZiB0aGUgc3R5bGVzIGZvciB0aGUgYmFkZ2Vcbi8vIHJhdGhlciB0aGFuIGp1c3QgdGhlIGNvbG9yL3RoZW1lIGJlY2F1c2Ugb2Zcbi8vIG5vIHN0eWxlIHNoZWV0IHN1cHBvcnQgZm9yIGRpcmVjdGl2ZXMuXG5cblxuXG5cblxuJG1hdC1iYWRnZS1mb250LXNpemU6IDEycHg7XG4kbWF0LWJhZGdlLWZvbnQtd2VpZ2h0OiA2MDA7XG4kbWF0LWJhZGdlLWRlZmF1bHQtc2l6ZTogMjJweCAhZGVmYXVsdDtcbiRtYXQtYmFkZ2Utc21hbGwtc2l6ZTogJG1hdC1iYWRnZS1kZWZhdWx0LXNpemUgLSA2O1xuJG1hdC1iYWRnZS1sYXJnZS1zaXplOiAkbWF0LWJhZGdlLWRlZmF1bHQtc2l6ZSArIDY7XG5cbi8vIE1peGluIGZvciBidWlsZGluZyBvZmZzZXQgZ2l2ZW4gZGlmZmVyZW50IHNpemVzXG5AbWl4aW4gX21hdC1iYWRnZS1zaXplKCRzaXplKSB7XG4gIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgd2lkdGg6ICRzaXplO1xuICAgIGhlaWdodDogJHNpemU7XG4gICAgbGluZS1oZWlnaHQ6ICRzaXplO1xuICB9XG5cbiAgJi5tYXQtYmFkZ2UtYWJvdmUge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICB0b3A6IC0kc2l6ZSAvIDI7XG4gICAgfVxuICB9XG5cbiAgJi5tYXQtYmFkZ2UtYmVsb3cge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICBib3R0b206IC0kc2l6ZSAvIDI7XG4gICAgfVxuICB9XG5cbiAgJi5tYXQtYmFkZ2UtYmVmb3JlIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgbGVmdDogLSRzaXplO1xuICAgIH1cbiAgfVxuXG4gIFtkaXI9J3J0bCddICYubWF0LWJhZGdlLWJlZm9yZSB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIGxlZnQ6IGF1dG87XG4gICAgICByaWdodDogLSRzaXplO1xuICAgIH1cbiAgfVxuXG4gICYubWF0LWJhZGdlLWFmdGVyIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgcmlnaHQ6IC0kc2l6ZTtcbiAgICB9XG4gIH1cblxuICBbZGlyPSdydGwnXSAmLm1hdC1iYWRnZS1hZnRlciB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgbGVmdDogLSRzaXplO1xuICAgIH1cbiAgfVxuXG4gICYubWF0LWJhZGdlLW92ZXJsYXAge1xuICAgICYubWF0LWJhZGdlLWJlZm9yZSB7XG4gICAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgICBsZWZ0OiAtJHNpemUgLyAyO1xuICAgICAgfVxuICAgIH1cblxuICAgIFtkaXI9J3J0bCddICYubWF0LWJhZGdlLWJlZm9yZSB7XG4gICAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgICBsZWZ0OiBhdXRvO1xuICAgICAgICByaWdodDogLSRzaXplIC8gMjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLm1hdC1iYWRnZS1hZnRlciB7XG4gICAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgICByaWdodDogLSRzaXplIC8gMjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBbZGlyPSdydGwnXSAmLm1hdC1iYWRnZS1hZnRlciB7XG4gICAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgICByaWdodDogYXV0bztcbiAgICAgICAgbGVmdDogLSRzaXplIC8gMjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1iYWRnZS10aGVtZSgkdGhlbWUpIHtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJHByaW1hcnkpO1xuXG4gICAgQGluY2x1ZGUgY2RrLWhpZ2gtY29udHJhc3QoYWN0aXZlLCBvZmYpIHtcbiAgICAgIG91dGxpbmU6IHNvbGlkIDFweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1iYWRnZS1hY2NlbnQge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGFjY2VudCk7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIGRlZmF1bHQtY29udHJhc3QpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYmFkZ2Utd2FybiB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIGRlZmF1bHQtY29udHJhc3QpO1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCR3YXJuKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJhZGdlIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cblxuICAubWF0LWJhZGdlLWhpZGRlbiB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1iYWRnZS1kaXNhYmxlZCB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgICRhcHAtYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnYmFja2dyb3VuZCcpO1xuICAgICAgJGJhZGdlLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLWJ1dHRvbik7XG5cbiAgICAgIC8vIFRoZSBkaXNhYmxlZCBjb2xvciB1c3VhbGx5IGhhcyBzb21lIGtpbmQgb2Ygb3BhY2l0eSwgYnV0IGJlY2F1c2UgdGhlIGJhZGdlIGlzIG92ZXJsYXllZFxuICAgICAgLy8gb24gdG9wIG9mIHNvbWV0aGluZyBlbHNlLCBpdCB3b24ndCBsb29rIGdvb2QgaWYgaXQncyBvcGFxdWUuIElmIGl0IGlzIGEgY29sb3IgKnR5cGUqLFxuICAgICAgLy8gd2UgY29udmVydCBpdCBpbnRvIGEgc29saWQgY29sb3IgYnkgdGFraW5nIHRoZSBvcGFjaXR5IGZyb20gdGhlIHJnYmEgdmFsdWUgYW5kIHVzaW5nXG4gICAgICAvLyB0aGUgdmFsdWUgdG8gZGV0ZXJtaW5lIHRoZSBwZXJjZW50YWdlIG9mIHRoZSBiYWNrZ3JvdW5kIHRvIHB1dCBpbnRvIGZvcmVncm91bmQgd2hlblxuICAgICAgLy8gbWl4aW5nIHRoZSBjb2xvcnMgdG9nZXRoZXIuXG4gICAgICBAaWYgKHR5cGUtb2YoJGJhZGdlLWNvbG9yKSA9PSBjb2xvciBhbmQgdHlwZS1vZigkYXBwLWJhY2tncm91bmQpID09IGNvbG9yKSB7XG4gICAgICAgICRiYWRnZS1vcGFjaXR5OiBvcGFjaXR5KCRiYWRnZS1jb2xvcik7XG4gICAgICAgIGJhY2tncm91bmQ6IG1peCgkYXBwLWJhY2tncm91bmQsIHJnYmEoJGJhZGdlLWNvbG9yLCAxKSwgKDEgLSAkYmFkZ2Utb3BhY2l0eSkgKiAxMDAlKTtcbiAgICAgIH1cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGJhZGdlLWNvbG9yO1xuICAgICAgfVxuXG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjAwbXMgZWFzZS1pbi1vdXQ7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjYpO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgfVxuXG4gIC5uZy1hbmltYXRlLWRpc2FibGVkIC5tYXQtYmFkZ2UtY29udGVudCxcbiAgLm1hdC1iYWRnZS1jb250ZW50Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIHtcbiAgICB0cmFuc2l0aW9uOiBub25lO1xuICB9XG5cbiAgLy8gVGhlIGFjdGl2ZSBjbGFzcyBpcyBhZGRlZCBhZnRlciB0aGUgZWxlbWVudCBpcyBhZGRlZFxuICAvLyBzbyBpdCBjYW4gYW5pbWF0ZSBzY2FsZSB0byBkZWZhdWx0XG4gIC5tYXQtYmFkZ2UtY29udGVudC5tYXQtYmFkZ2UtYWN0aXZlIHtcbiAgICAvLyBTY2FsZSB0byBgbm9uZWAgaW5zdGVhZCBvZiBgMWAgdG8gYXZvaWQgYmx1cnJ5IHRleHQgaW4gc29tZSBicm93c2Vycy5cbiAgICB0cmFuc2Zvcm06IG5vbmU7XG4gIH1cblxuICAubWF0LWJhZGdlLXNtYWxsIHtcbiAgICBAaW5jbHVkZSBfbWF0LWJhZGdlLXNpemUoJG1hdC1iYWRnZS1zbWFsbC1zaXplKTtcbiAgfVxuICAubWF0LWJhZGdlLW1lZGl1bSB7XG4gICAgQGluY2x1ZGUgX21hdC1iYWRnZS1zaXplKCRtYXQtYmFkZ2UtZGVmYXVsdC1zaXplKTtcbiAgfVxuICAubWF0LWJhZGdlLWxhcmdlIHtcbiAgICBAaW5jbHVkZSBfbWF0LWJhZGdlLXNpemUoJG1hdC1iYWRnZS1sYXJnZS1zaXplKTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWJhZGdlLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgIGZvbnQtd2VpZ2h0OiAkbWF0LWJhZGdlLWZvbnQtd2VpZ2h0O1xuICAgIGZvbnQtc2l6ZTogJG1hdC1iYWRnZS1mb250LXNpemU7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtYmFkZ2Utc21hbGwgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAvLyBTZXQgdGhlIGZvbnQgc2l6ZSB0byA3NSUgb2YgdGhlIG9yaWdpbmFsLlxuICAgIGZvbnQtc2l6ZTogJG1hdC1iYWRnZS1mb250LXNpemUgKiAwLjc1O1xuICB9XG5cbiAgLm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgIGZvbnQtc2l6ZTogJG1hdC1iYWRnZS1mb250LXNpemUgKiAyO1xuICB9XG59XG5cblxuXG5cblxuQG1peGluIG1hdC1ib3R0b20tc2hlZXQtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigxNiwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGRpYWxvZyk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1ib3R0b20tc2hlZXQtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lciB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGJvZHktMSk7XG4gIH1cbn1cblxuXG5cblxuXG4kX21hdC1idXR0b24tcmlwcGxlLW9wYWNpdHk6IDAuMTtcblxuLy8gQXBwbGllcyBhIGZvY3VzIHN0eWxlIHRvIGFuIG1hdC1idXR0b24gZWxlbWVudCBmb3IgZWFjaCBvZiB0aGUgc3VwcG9ydGVkIHBhbGV0dGVzLlxuQG1peGluIF9tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXktY29sb3IoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuXG4gICYubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5KTtcbiAgfVxuXG4gICYubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCk7XG4gIH1cblxuICAmLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkd2Fybik7XG4gIH1cblxuICAmW2Rpc2FibGVkXSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxufVxuXG4vLyBBcHBsaWVzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGZvciBhIHJpcHBsZS4gSWYgdGhlIHZhbHVlIHByb3ZpZGVkIGlzIG5vdCBhIFNhc3MgY29sb3IsXG4vLyB3ZSBhc3N1bWUgdGhhdCB3ZSd2ZSBiZWVuIGdpdmVuIGEgQ1NTIHZhcmlhYmxlLiBTaW5jZSB3ZSBjYW4ndCBwZXJmb3JtIGFscGhhLWJsZW5kaW5nXG4vLyBvbiBhIENTUyB2YXJpYWJsZSwgd2UgaW5zdGVhZCBhZGQgdGhlIG9wYWNpdHkgZGlyZWN0bHkgdG8gdGhlIHJpcHBsZSBlbGVtZW50LlxuQG1peGluIF9tYXQtYnV0dG9uLXJpcHBsZS1iYWNrZ3JvdW5kKCRwYWxldHRlLCAkaHVlLCAkb3BhY2l0eSkge1xuICAkYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCAkaHVlLCAkb3BhY2l0eSk7XG4gIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWNvbG9yO1xuICBAaWYgKHR5cGUtb2YoJGJhY2tncm91bmQtY29sb3IpICE9IGNvbG9yKSB7XG4gICAgb3BhY2l0eTogJG9wYWNpdHk7XG4gIH1cbn1cblxuQG1peGluIF9tYXQtYnV0dG9uLXJpcHBsZS1jb2xvcigkdGhlbWUsICRodWUsICRvcGFjaXR5OiAkX21hdC1idXR0b24tcmlwcGxlLW9wYWNpdHkpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG5cbiAgJi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi1yaXBwbGUtYmFja2dyb3VuZCgkcHJpbWFyeSwgJGh1ZSwgJG9wYWNpdHkpO1xuICB9XG5cbiAgJi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLXJpcHBsZS1iYWNrZ3JvdW5kKCRhY2NlbnQsICRodWUsICRvcGFjaXR5KTtcbiAgfVxuXG4gICYubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tcmlwcGxlLWJhY2tncm91bmQoJHdhcm4sICRodWUsICRvcGFjaXR5KTtcbiAgfVxufVxuXG4vLyBBcHBsaWVzIGEgcHJvcGVydHkgdG8gYW4gbWF0LWJ1dHRvbiBlbGVtZW50IGZvciBlYWNoIG9mIHRoZSBzdXBwb3J0ZWQgcGFsZXR0ZXMuXG5AbWl4aW4gX21hdC1idXR0b24tdGhlbWUtcHJvcGVydHkoJHRoZW1lLCAkcHJvcGVydHksICRodWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgJi5tYXQtcHJpbWFyeSB7XG4gICAgI3skcHJvcGVydHl9OiBtYXQtY29sb3IoJHByaW1hcnksICRodWUpO1xuICB9XG4gICYubWF0LWFjY2VudCB7XG4gICAgI3skcHJvcGVydHl9OiBtYXQtY29sb3IoJGFjY2VudCwgJGh1ZSk7XG4gIH1cbiAgJi5tYXQtd2FybiB7XG4gICAgI3skcHJvcGVydHl9OiBtYXQtY29sb3IoJHdhcm4sICRodWUpO1xuICB9XG5cbiAgJi5tYXQtcHJpbWFyeSwgJi5tYXQtYWNjZW50LCAmLm1hdC13YXJuLCAmW2Rpc2FibGVkXSB7XG4gICAgJltkaXNhYmxlZF0ge1xuICAgICAgJHBhbGV0dGU6IGlmKCRwcm9wZXJ0eSA9PSAnY29sb3InLCAkZm9yZWdyb3VuZCwgJGJhY2tncm91bmQpO1xuICAgICAgI3skcHJvcGVydHl9OiBtYXQtY29sb3IoJHBhbGV0dGUsIGRpc2FibGVkLWJ1dHRvbik7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtYnV0dG9uLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWJ1dHRvbiwgLm1hdC1pY29uLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbiB7XG4gICAgLy8gQnV0dG9ucyB3aXRob3V0IGEgYmFja2dyb3VuZCBjb2xvciBzaG91bGQgaW5oZXJpdCB0aGUgZm9udCBjb2xvci4gVGhpcyBpcyBuZWNlc3NhcnkgdG9cbiAgICAvLyBlbnN1cmUgdGhhdCB0aGUgYnV0dG9uIGlzIHJlYWRhYmxlIG9uIGN1c3RvbSBiYWNrZ3JvdW5kIGNvbG9ycy4gSXQncyB3cm9uZyB0byBhbHdheXMgYXNzdW1lXG4gICAgLy8gdGhhdCB0aG9zZSBidXR0b25zIGFyZSBhbHdheXMgcGxhY2VkIGluc2lkZSBvZiBjb250YWluZXJzIHdpdGggdGhlIGRlZmF1bHQgYmFja2dyb3VuZFxuICAgIC8vIGNvbG9yIG9mIHRoZSB0aGVtZSAoZS5nLiB0aGVtZWQgdG9vbGJhcnMpLlxuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tdGhlbWUtcHJvcGVydHkoJHRoZW1lLCAnY29sb3InLCB0ZXh0KTtcbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LWNvbG9yKCR0aGVtZSk7XG5cbiAgICAvLyBTZXR1cCB0aGUgcmlwcGxlIGNvbG9yIHRvIGJlIGJhc2VkIG9uIHRoZSB0ZXh0IGNvbG9yLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgcmlwcGxlc1xuICAgIC8vIGFyZSBtYXRjaGluZyB3aXRoIHRoZSBjdXJyZW50IHRoZW1lIHBhbGV0dGUgYW5kIGFyZSBpbiBjb250cmFzdCB0byB0aGUgYmFja2dyb3VuZCBjb2xvclxuICAgIC8vIChlLmcgaW4gdGhlbWVkIHRvb2xiYXJzKS5cbiAgICAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAgIG9wYWNpdHk6ICRfbWF0LWJ1dHRvbi1yaXBwbGUtb3BhY2l0eTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGN1cnJlbnRDb2xvcjtcbiAgICB9XG4gIH1cblxuICAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5IHtcbiAgICBiYWNrZ3JvdW5kOiBtYXBfZ2V0KCRmb3JlZ3JvdW5kLCBiYXNlKTtcbiAgfVxuXG4gIC8vIE5vdGU6IHRoaXMgbmVlZHMgYSBiaXQgZXh0cmEgc3BlY2lmaWNpdHksIGJlY2F1c2Ugd2UncmUgbm90IGd1YXJhbnRlZWQgdGhlIGluY2x1c2lvblxuICAvLyBvcmRlciBvZiB0aGUgdGhlbWUgc3R5bGVzIGFuZCB0aGUgYnV0dG9uIHJlc2V0IG1heSBlbmQgdXAgcmVzZXR0aW5nIHRoaXMgYXMgd2VsbC5cbiAgLm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoW2Rpc2FibGVkXSkge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxuXG4gIC5tYXQtZmxhdC1idXR0b24sIC5tYXQtcmFpc2VkLWJ1dHRvbiwgLm1hdC1mYWIsIC5tYXQtbWluaS1mYWIge1xuICAgIC8vIERlZmF1bHQgZm9udCBhbmQgYmFja2dyb3VuZCBjb2xvciB3aGVuIG5vdCB1c2luZyBhbnkgY29sb3IgcGFsZXR0ZS5cbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIHJhaXNlZC1idXR0b24pO1xuXG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tdGhlbWUtcHJvcGVydHkoJHRoZW1lLCAnY29sb3InLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi10aGVtZS1wcm9wZXJ0eSgkdGhlbWUsICdiYWNrZ3JvdW5kLWNvbG9yJywgZGVmYXVsdCk7XG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tcmlwcGxlLWNvbG9yKCR0aGVtZSwgZGVmYXVsdC1jb250cmFzdCk7XG4gIH1cblxuICAubWF0LXN0cm9rZWQtYnV0dG9uLCAubWF0LWZsYXQtYnV0dG9uIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigwLCAkdGhlbWUpO1xuICB9XG5cbiAgLm1hdC1yYWlzZWQtYnV0dG9uIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigyLCAkdGhlbWUpO1xuXG4gICAgJjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDgsICR0aGVtZSk7XG4gICAgfVxuXG4gICAgJltkaXNhYmxlZF0ge1xuICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMCwgJHRoZW1lKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWZhYiwgLm1hdC1taW5pLWZhYiB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oNiwgJHRoZW1lKTtcblxuICAgICY6bm90KFtkaXNhYmxlZF0pOmFjdGl2ZSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigxMiwgJHRoZW1lKTtcbiAgICB9XG5cbiAgICAmW2Rpc2FibGVkXSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigwLCAkdGhlbWUpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWJ1dHRvbi10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1idXR0b24sIC5tYXQtcmFpc2VkLWJ1dHRvbiwgLm1hdC1pY29uLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbixcbiAgLm1hdC1mbGF0LWJ1dHRvbiwgLm1hdC1mYWIsIC5tYXQtbWluaS1mYWIge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGJ1dHRvbik7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJ1dHRvbik7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBidXR0b24pO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuQG1peGluIG1hdC1idXR0b24tdG9nZ2xlLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZGl2aWRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcblxuICAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSxcbiAgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigyLCAkdGhlbWUpO1xuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCxcbiAgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQge1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGhpbnQtdGV4dCk7XG5cbiAgICAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGZvY3VzZWQtYnV0dG9uKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcblxuICAgIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZm9jdXNlZC1idXR0b24sIDEpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSArIC5tYXQtYnV0dG9uLXRvZ2dsZSB7XG4gICAgYm9yZGVyLWxlZnQ6IHNvbGlkIDFweCAkZGl2aWRlci1jb2xvcjtcbiAgfVxuXG4gIFtkaXI9J3J0bCddIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSArIC5tYXQtYnV0dG9uLXRvZ2dsZSB7XG4gICAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gICAgYm9yZGVyLXJpZ2h0OiBzb2xpZCAxcHggJGRpdmlkZXItY29sb3I7XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbCB7XG4gICAgLm1hdC1idXR0b24tdG9nZ2xlICsgLm1hdC1idXR0b24tdG9nZ2xlIHtcbiAgICAgIGJvcmRlci1sZWZ0OiBub25lO1xuICAgICAgYm9yZGVyLXJpZ2h0OiBub25lO1xuICAgICAgYm9yZGVyLXRvcDogc29saWQgMXB4ICRkaXZpZGVyLWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIHNlbGVjdGVkLWJ1dHRvbik7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuXG4gICAgJi5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtYnV0dG9uKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGRpc2FibGVkLWJ1dHRvbi10b2dnbGUpO1xuXG4gICAgJi5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gICAgfVxuXG4gICAgJi5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgc2VsZWN0ZWQtZGlzYWJsZWQtYnV0dG9uKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLFxuICAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCB7XG4gICAgYm9yZGVyOiBzb2xpZCAxcHggJGRpdmlkZXItY29sb3I7XG4gIH1cbn1cblxuQG1peGluIG1hdC1idXR0b24tdG9nZ2xlLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWJ1dHRvbi10b2dnbGUge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cbn1cblxuXG5cblxuXG5cblxuQG1peGluIG1hdC1jYXJkLXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtY2FyZCB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMSwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gICAgLy8gTmVlZHMgZXh0cmEgc3BlY2lmaWNpdHkgdG8gYmUgYWJsZSB0byBvdmVycmlkZSB0aGUgZWxldmF0aW9uIHNlbGVjdG9ycy5cbiAgICAmLm1hdC1jYXJkLWZsYXQge1xuICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMCwgJHRoZW1lKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWNhcmQtc3VidGl0bGUge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWNhcmQtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtY2FyZCB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtY2FyZC10aXRsZSB7XG4gICAgZm9udDoge1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBoZWFkbGluZSk7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCB0aXRsZSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1jYXJkLWhlYWRlciAubWF0LWNhcmQtdGl0bGUge1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCB0aXRsZSk7XG4gIH1cblxuICAubWF0LWNhcmQtc3VidGl0bGUsXG4gIC5tYXQtY2FyZC1jb250ZW50IHtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKTtcbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtY2hlY2tib3gtdGhlbWUoJHRoZW1lKSB7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG5cbiAgLy8gVGhlIGNvbG9yIG9mIHRoZSBjaGVja2JveCdzIGNoZWNrbWFyayAvIG1peGVkbWFyay5cbiAgJGNoZWNrYm94LW1hcmstY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgYmFja2dyb3VuZCk7XG5cbiAgLy8gTk9URSh0cmF2aXNrYXVmbWFuKTogV2hpbGUgdGhlIHNwZWMgY2FsbHMgZm9yIHRyYW5zbHVjZW50IGJsYWNrcy93aGl0ZXMgZm9yIGRpc2FibGVkIGNvbG9ycyxcbiAgLy8gdGhpcyBkb2VzIG5vdCB3b3JrIHdlbGwgd2l0aCBlbGVtZW50cyBsYXllcmVkIG9uIHRvcCBvZiBvbmUgYW5vdGhlci4gVG8gZ2V0IGFyb3VuZCB0aGlzIHdlXG4gIC8vIGJsZW5kIHRoZSBjb2xvcnMgdG9nZXRoZXIgYmFzZWQgb24gdGhlIGJhc2UgY29sb3IgYW5kIHRoZSB0aGVtZSBiYWNrZ3JvdW5kLlxuICAkd2hpdGUtMzBwY3Qtb3BhY2l0eS1vbi1kYXJrOiAjNjg2ODY4O1xuICAkYmxhY2stMjZwY3Qtb3BhY2l0eS1vbi1saWdodDogI2IwYjBiMDtcbiAgJGRpc2FibGVkLWNvbG9yOiBpZigkaXMtZGFyay10aGVtZSwgJHdoaXRlLTMwcGN0LW9wYWNpdHktb24tZGFyaywgJGJsYWNrLTI2cGN0LW9wYWNpdHktb24tbGlnaHQpO1xuXG4gIC5tYXQtY2hlY2tib3gtZnJhbWUge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LWNoZWNrYm94LWNoZWNrbWFyayB7XG4gICAgZmlsbDogJGNoZWNrYm94LW1hcmstY29sb3I7XG4gIH1cblxuICAubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoIHtcbiAgICAvLyAhaW1wb3J0YW50IGlzIG5lZWRlZCBoZXJlIGJlY2F1c2UgYSBzdHJva2UgbXVzdCBiZSBzZXQgYXMgYW5cbiAgICAvLyBhdHRyaWJ1dGUgb24gdGhlIFNWRyBpbiBvcmRlciBmb3IgbGluZSBhbmltYXRpb24gdG8gd29yayBwcm9wZXJseS5cbiAgICBzdHJva2U6ICRjaGVja2JveC1tYXJrLWNvbG9yICFpbXBvcnRhbnQ7XG4gIH1cblxuICAubWF0LWNoZWNrYm94LW1peGVkbWFyayB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNoZWNrYm94LW1hcmstY29sb3I7XG4gIH1cblxuICAubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUsIC5tYXQtY2hlY2tib3gtY2hlY2tlZCB7XG4gICAgJi5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5KTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYWNjZW50KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHdhcm4pO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtY2hlY2tib3gtZGlzYWJsZWQge1xuICAgICYubWF0LWNoZWNrYm94LWNoZWNrZWQsXG4gICAgJi5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSB7XG4gICAgICAubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZGlzYWJsZWQtY29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjpub3QoLm1hdC1jaGVja2JveC1jaGVja2VkKSB7XG4gICAgICAubWF0LWNoZWNrYm94LWZyYW1lIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkZGlzYWJsZWQtY29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLm1hdC1jaGVja2JveC1sYWJlbCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU3dpdGNoIHRoaXMgdG8gYSBzb2xpZCBjb2xvciBzaW5jZSB3ZSdyZSB1c2luZyBgb3BhY2l0eWBcbiAgLy8gdG8gY29udHJvbCBob3cgb3BhcXVlIHRoZSByaXBwbGUgc2hvdWxkIGJlLlxuICAubWF0LWNoZWNrYm94IC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hcF9nZXQobWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpLCBiYXNlKTtcbiAgfVxuXG4gIC5tYXQtY2hlY2tib3gtY2hlY2tlZDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCksXG4gIC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKSB7XG4gICAgJi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRhY2NlbnQpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJHdhcm4pO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWNoZWNrYm94LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWNoZWNrYm94IHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLy8gVE9ETyhrYXJhKTogUmVtb3ZlIHRoaXMgc3R5bGUgd2hlbiBmaXhpbmcgdmVydGljYWwgYmFzZWxpbmVcbiAgLm1hdC1jaGVja2JveC1sYXlvdXQgLm1hdC1jaGVja2JveC1sYWJlbCB7XG4gICAgbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBib2R5LTIpO1xuICB9XG59XG5cblxuXG5cblxuXG4kbWF0LWNoaXAtcmVtb3ZlLWZvbnQtc2l6ZTogMThweDtcblxuQG1peGluIG1hdC1jaGlwcy1jb2xvcigkZm9yZWdyb3VuZCwgJGJhY2tncm91bmQpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQ7XG4gIGNvbG9yOiAkZm9yZWdyb3VuZDtcblxuICAubWF0LWNoaXAtcmVtb3ZlIHtcbiAgICBjb2xvcjogJGZvcmVncm91bmQ7XG4gICAgb3BhY2l0eTogMC40O1xuICB9XG59XG5cblxuLy8gQXBwbGllcyB0aGUgYmFja2dyb3VuZCBjb2xvciBmb3IgYSByaXBwbGUgZWxlbWVudC5cbi8vIElmIHRoZSBjb2xvciB2YWx1ZSBwcm92aWRlZCBpcyBub3QgYSBTYXNzIGNvbG9yLFxuLy8gd2UgYXNzdW1lIHRoYXQgd2UndmUgYmVlbiBnaXZlbiBhIENTUyB2YXJpYWJsZS5cbi8vIFNpbmNlIHdlIGNhbid0IHBlcmZvcm0gYWxwaGEtYmxlbmRpbmcgb24gYSBDU1MgdmFyaWFibGUsXG4vLyB3ZSBpbnN0ZWFkIGFkZCB0aGUgb3BhY2l0eSBkaXJlY3RseSB0byB0aGUgcmlwcGxlIGVsZW1lbnQuXG5AbWl4aW4gX21hdC1jaGlwcy1yaXBwbGUtYmFja2dyb3VuZCgkcGFsZXR0ZSwgJGRlZmF1bHQtY29udHJhc3QsICRvcGFjaXR5KSB7XG4gICRiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsICRkZWZhdWx0LWNvbnRyYXN0LCAkb3BhY2l0eSk7XG4gIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWNvbG9yO1xuICBAaWYgKHR5cGUtb2YoJGJhY2tncm91bmQtY29sb3IpICE9IGNvbG9yKSB7XG4gICAgb3BhY2l0eTogJG9wYWNpdHk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1jaGlwcy10aGVtZS1jb2xvcigkcGFsZXR0ZSkge1xuICBAaW5jbHVkZSBtYXQtY2hpcHMtY29sb3IobWF0LWNvbG9yKCRwYWxldHRlLCBkZWZhdWx0LWNvbnRyYXN0KSwgbWF0LWNvbG9yKCRwYWxldHRlKSk7XG5cbiAgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICBAaW5jbHVkZSBfbWF0LWNoaXBzLXJpcHBsZS1iYWNrZ3JvdW5kKCRwYWxldHRlLCBkZWZhdWx0LWNvbnRyYXN0LCAwLjEpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtY2hpcHMtdGhlbWUoJHRoZW1lKSB7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gICR1bnNlbGVjdGVkLWJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgdW5zZWxlY3RlZC1jaGlwKTtcbiAgJHVuc2VsZWN0ZWQtZm9yZWdyb3VuZDogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAge1xuICAgIEBpbmNsdWRlIG1hdC1jaGlwcy1jb2xvcigkdW5zZWxlY3RlZC1mb3JlZ3JvdW5kLCAkdW5zZWxlY3RlZC1iYWNrZ3JvdW5kKTtcblxuICAgICY6bm90KC5tYXQtY2hpcC1kaXNhYmxlZCkge1xuICAgICAgJjphY3RpdmUge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigzLCAkdGhlbWUpO1xuICAgICAgfVxuXG4gICAgICAubWF0LWNoaXAtcmVtb3ZlOmhvdmVyIHtcbiAgICAgICAgb3BhY2l0eTogMC41NDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLm1hdC1jaGlwLWRpc2FibGVkIHtcbiAgICAgIG9wYWNpdHk6IDAuNDtcbiAgICB9XG5cbiAgICAmOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXBfZ2V0KCRmb3JlZ3JvdW5kLCBiYXNlKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQge1xuICAgICYubWF0LXByaW1hcnkge1xuICAgICAgQGluY2x1ZGUgbWF0LWNoaXBzLXRoZW1lLWNvbG9yKCRwcmltYXJ5KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIEBpbmNsdWRlIG1hdC1jaGlwcy10aGVtZS1jb2xvcigkd2Fybik7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IHtcbiAgICAgIEBpbmNsdWRlIG1hdC1jaGlwcy10aGVtZS1jb2xvcigkYWNjZW50KTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1jaGlwcy10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1jaGlwIHtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0yKTtcbiAgICBmb250LXdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMik7XG5cbiAgICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbixcbiAgICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uIHtcbiAgICAgIGZvbnQtc2l6ZTogJG1hdC1jaGlwLXJlbW92ZS1mb250LXNpemU7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuQG1peGluIG1hdC10YWJsZS10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LXRhYmxlIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdjYXJkJyk7XG4gIH1cblxuICAubWF0LXRhYmxlIHRoZWFkLCAubWF0LXRhYmxlIHRib2R5LCAubWF0LXRhYmxlIHRmb290LFxuICBtYXQtaGVhZGVyLXJvdywgbWF0LXJvdywgbWF0LWZvb3Rlci1yb3csXG4gIFttYXQtaGVhZGVyLXJvd10sIFttYXQtcm93XSwgW21hdC1mb290ZXItcm93XSxcbiAgLm1hdC10YWJsZS1zdGlja3kge1xuICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7XG4gIH1cblxuICBtYXQtcm93LCBtYXQtaGVhZGVyLXJvdywgbWF0LWZvb3Rlci1yb3csXG4gIHRoLm1hdC1oZWFkZXItY2VsbCwgdGQubWF0LWNlbGwsIHRkLm1hdC1mb290ZXItY2VsbCB7XG4gICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxuXG4gIC5tYXQtaGVhZGVyLWNlbGwge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtY2VsbCwgLm1hdC1mb290ZXItY2VsbCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC10YWJsZS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC10YWJsZSB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtaGVhZGVyLWNlbGwge1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKTtcbiAgICBmb250LXdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMik7XG4gIH1cblxuICAubWF0LWNlbGwsIC5tYXQtZm9vdGVyLWNlbGwge1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpO1xuICB9XG59XG5cblxuXG5cblxuXG5cbiRtYXQtZGF0ZXBpY2tlci1zZWxlY3RlZC10b2RheS1ib3gtc2hhZG93LXdpZHRoOiAxcHg7XG4kbWF0LWRhdGVwaWNrZXItc2VsZWN0ZWQtZmFkZS1hbW91bnQ6IDAuNjtcbiRtYXQtZGF0ZXBpY2tlci10b2RheS1mYWRlLWFtb3VudDogMC4yO1xuJG1hdC1jYWxlbmRhci1ib2R5LWZvbnQtc2l6ZTogMTNweCAhZGVmYXVsdDtcbiRtYXQtY2FsZW5kYXItd2Vla2RheS10YWJsZS1mb250LXNpemU6IDExcHggIWRlZmF1bHQ7XG5cbkBtaXhpbiBfbWF0LWRhdGVwaWNrZXItY29sb3IoJHBhbGV0dGUpIHtcbiAgLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsIGRlZmF1bHQtY29udHJhc3QpO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkID4gLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkIHtcbiAgICAkYmFja2dyb3VuZDogbWF0LWNvbG9yKCRwYWxldHRlKTtcblxuICAgIEBpZiAodHlwZS1vZigkYmFja2dyb3VuZCkgPT0gY29sb3IpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGZhZGUtb3V0KCRiYWNrZ3JvdW5kLCAkbWF0LWRhdGVwaWNrZXItc2VsZWN0ZWQtZmFkZS1hbW91bnQpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICAvLyBJZiB3ZSBjb3VsZG4ndCByZXNvbHZlIHRvIGJhY2tncm91bmQgdG8gYSBjb2xvciAoZS5nLiBpdCdzIGEgQ1NTIHZhcmlhYmxlKSxcbiAgICAgIC8vIGZhbGwgYmFjayB0byBmYWRpbmcgdGhlIGNvbnRlbnQgb3V0IHZpYSBgb3BhY2l0eWAuXG4gICAgICBvcGFjaXR5OiAkbWF0LWRhdGVwaWNrZXItdG9kYXktZmFkZS1hbW91bnQ7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkIHtcbiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAkbWF0LWRhdGVwaWNrZXItc2VsZWN0ZWQtdG9kYXktYm94LXNoYWRvdy13aWR0aFxuICAgICAgICAgICAgICAgIG1hdC1jb2xvcigkcGFsZXR0ZSwgZGVmYXVsdC1jb250cmFzdCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1kYXRlcGlja2VyLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuXG4gIC5tYXQtY2FsZW5kYXItYXJyb3cge1xuICAgIGJvcmRlci10b3AtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaWNvbik7XG4gIH1cblxuICAvLyBUaGUgcHJldi9uZXh0IGJ1dHRvbnMgbmVlZCBhIGJpdCBtb3JlIHNwZWNpZmljaXR5IHRvXG4gIC8vIGF2b2lkIGJlaW5nIG92ZXJ3cml0dGVuIGJ5IHRoZSAubWF0LWljb24tYnV0dG9uLlxuICAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLFxuICAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLW5leHQtYnV0dG9uLFxuICAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLXByZXZpb3VzLWJ1dHRvbiB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaWNvbik7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlciB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaGludC10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyLWRpdmlkZXI6OmFmdGVyIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50IHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkID4gLm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3ZlcixcbiAgLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmUsXG4gIC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmUge1xuICAgICYgPiAubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKSB7XG4gICAgLy8gTm90ZTogdGhvdWdoIGl0J3Mgbm90IHRleHQsIHRoZSBib3JkZXIgaXMgYSBoaW50IGFib3V0IHRoZSBmYWN0IHRoYXQgdGhpcyBpcyB0b2RheSdzIGRhdGUsXG4gICAgLy8gc28gd2UgdXNlIHRoZSBoaW50IGNvbG9yLlxuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBoaW50LXRleHQpO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkID4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpIHtcbiAgICAkY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaGludC10ZXh0KTtcblxuICAgIEBpZiAodHlwZS1vZigkY29sb3IpID09IGNvbG9yKSB7XG4gICAgICBib3JkZXItY29sb3I6IGZhZGUtb3V0KCRjb2xvciwgJG1hdC1kYXRlcGlja2VyLXRvZGF5LWZhZGUtYW1vdW50KTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgLy8gSWYgdGhlIGNvbG9yIGRpZG4ndCByZXNvbHZlIHRvIGEgY29sb3IgdmFsdWUsIGJ1dCBzb21ldGhpbmcgbGlrZSBhIENTUyB2YXJpYWJsZSwgd2UgY2FuJ3RcbiAgICAgIC8vIGZhZGUgaXQgb3V0IHNvIHdlIGZhbGwgYmFjayB0byByZWR1Y2luZyB0aGUgZWxlbWVudCBvcGFjaXR5LiBOb3RlIHRoYXQgd2UgZG9uJ3QgdXNlIHRoZVxuICAgICAgLy8gJG1hdC1kYXRlcGlja2VyLXRvZGF5LWZhZGUtYW1vdW50LCBiZWNhdXNlIGhpbnQgdGV4dCB1c3VhbGx5IGhhcyBzb21lIG9wYWNpdHkgYXBwbGllZFxuICAgICAgLy8gdG8gaXQgYWxyZWFkeSBhbmQgd2UgZG9uJ3Qgd2FudCB0aGVtIHRvIHN0YWNrIG9uIHRvcCBvZiBlYWNoIG90aGVyLlxuICAgICAgb3BhY2l0eTogMC41O1xuICAgIH1cbiAgfVxuXG4gIEBpbmNsdWRlIF9tYXQtZGF0ZXBpY2tlci1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSkpO1xuXG4gIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbig0LCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgQGluY2x1ZGUgX21hdC1kYXRlcGlja2VyLWNvbG9yKG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpKTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtZGF0ZXBpY2tlci1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgd2FybikpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50LXRvdWNoIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigwLCAkdGhlbWUpO1xuICB9XG5cbiAgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUge1xuICAgIGNvbG9yOiBtYXQtY29sb3IobWFwLWdldCgkdGhlbWUsIHByaW1hcnkpLCB0ZXh0KTtcblxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpLCB0ZXh0KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IobWFwLWdldCgkdGhlbWUsIHdhcm4pLCB0ZXh0KTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1kYXRlcGlja2VyLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWNhbGVuZGFyIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5IHtcbiAgICBmb250LXNpemU6ICRtYXQtY2FsZW5kYXItYm9keS1mb250LXNpemU7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktbGFiZWwsXG4gIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbiB7XG4gICAgZm9udDoge1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBidXR0b24pO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYnV0dG9uKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlciB0aCB7XG4gICAgZm9udDoge1xuICAgICAgc2l6ZTogJG1hdC1jYWxlbmRhci13ZWVrZGF5LXRhYmxlLWZvbnQtc2l6ZTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMSk7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtZGlhbG9nLXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oMjQsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBkaWFsb2cpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtZGlhbG9nLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWRpYWxvZy10aXRsZSB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIHRpdGxlKTtcbiAgfVxufVxuXG5cblxuXG5cblxuQG1peGluIG1hdC1leHBhbnNpb24tcGFuZWwtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1leHBhbnNpb24tcGFuZWwge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDIsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtYWN0aW9uLXJvdyB7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxuXG4gIC5tYXQtZXhwYW5zaW9uLXBhbmVsIHtcbiAgICAmIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZCxcbiAgICAmIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkLFxuICAgICY6bm90KC5tYXQtZXhwYW5kZWQpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3ZlciB7XG4gICAgICAmOm5vdChbYXJpYS1kaXNhYmxlZD0ndHJ1ZSddKSB7XG4gICAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIERpc2FibGUgdGhlIGhvdmVyIG9uIHRvdWNoIGRldmljZXMgc2luY2UgaXQgY2FuIGFwcGVhciBsaWtlIGl0IGlzIHN0dWNrLiBXZSBjYW4ndCB1c2VcbiAgLy8gYEBtZWRpYSAoaG92ZXIpYCBhYm92ZSwgYmVjYXVzZSB0aGUgZGVza3RvcCBzdXBwb3J0IGJyb3dzZXIgc3VwcG9ydCBpc24ndCBncmVhdC5cbiAgQG1lZGlhIChob3Zlcjogbm9uZSkge1xuICAgIC5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKTpub3QoW2FyaWEtZGlzYWJsZWQ9J3RydWUnXSlcbiAgICAgIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cblxuICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sXG4gIC5tYXQtZXhwYW5zaW9uLWluZGljYXRvcjo6YWZ0ZXIge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPSd0cnVlJ10ge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLWJ1dHRvbik7XG5cbiAgICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUsXG4gICAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIHtcbiAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWV4cGFuc2lvbi1wYW5lbC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBzdWJoZWFkaW5nLTEpO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBzdWJoZWFkaW5nLTEpO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgc3ViaGVhZGluZy0xKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgYm9keS0xKTtcbiAgfVxufVxuXG5cblxuXG4vLyBUaGlzIG1peGluIHdpbGwgZW5zdXJlIHRoYXQgbGluZXMgdGhhdCBvdmVyZmxvdyB0aGUgY29udGFpbmVyIHdpbGwgaGlkZSB0aGUgb3ZlcmZsb3cgYW5kXG4vLyB0cnVuY2F0ZSBuZWF0bHkgd2l0aCBhbiBlbGxpcHNpcy5cbkBtaXhpbiBtYXQtdHJ1bmNhdGUtbGluZSgpIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbi8vIE1peGluIHRvIHByb3ZpZGUgYWxsIG1hdC1saW5lIHN0eWxlcywgY2hhbmdpbmcgc2Vjb25kYXJ5IGZvbnQgc2l6ZSBiYXNlZCBvbiB3aGV0aGVyIHRoZSBsaXN0XG4vLyBpcyBpbiBkZW5zZSBtb2RlLlxuQG1peGluIG1hdC1saW5lLWJhc2UoJHNlY29uZGFyeS1mb250LXNpemUpIHtcbiAgLm1hdC1saW5lIHtcbiAgICBAaW5jbHVkZSBtYXQtdHJ1bmNhdGUtbGluZSgpO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cbiAgICAvLyBhbGwgbGluZXMgYnV0IHRoZSB0b3AgbGluZSBzaG91bGQgaGF2ZSBzbWFsbGVyIHRleHRcbiAgICAmOm50aC1jaGlsZChuKzIpIHtcbiAgICAgIGZvbnQtc2l6ZTogJHNlY29uZGFyeS1mb250LXNpemU7XG4gICAgfVxuICB9XG59XG5cbi8vIFRoaXMgbWl4aW4gbm9ybWFsaXplcyBkZWZhdWx0IGVsZW1lbnQgc3R5bGVzLCBlLmcuIGZvbnQgd2VpZ2h0IGZvciBoZWFkaW5nIHRleHQuXG5AbWl4aW4gbWF0LW5vcm1hbGl6ZS10ZXh0KCkge1xuICAmID4gKiB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gIH1cbn1cblxuLy8gVGhpcyBtaXhpbiBwcm92aWRlcyBiYXNlIHN0eWxlcyBmb3IgdGhlIHdyYXBwZXIgYXJvdW5kIG1hdC1saW5lIGVsZW1lbnRzIGluIGEgbGlzdC5cbkBtaXhpbiBtYXQtbGluZS13cmFwcGVyLWJhc2UoKSB7XG4gIEBpbmNsdWRlIG1hdC1ub3JtYWxpemUtdGV4dCgpO1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHdpZHRoOiAxMDAlO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIC8vIE11c3QgcmVtb3ZlIHdyYXBwZXIgd2hlbiBsaW5lcyBhcmUgZW1wdHkgb3IgaXQgdGFrZXMgdXAgaG9yaXpvbnRhbFxuICAvLyBzcGFjZSBhbmQgcHVzaGVzIG90aGVyIGVsZW1lbnRzIHRvIHRoZSByaWdodC5cbiAgJjplbXB0eSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG5cblxuLy8gSW5jbHVkZSB0aGlzIGVtcHR5IG1peGluIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBvdGhlciBjb21wb25lbnRzLlxuQG1peGluIG1hdC1ncmlkLWxpc3QtdGhlbWUoJHRoZW1lKSB7IH1cblxuQG1peGluIG1hdC1ncmlkLWxpc3QtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtZ3JpZC10aWxlLWhlYWRlcixcbiAgLm1hdC1ncmlkLXRpbGUtZm9vdGVyIHtcbiAgICBAaW5jbHVkZSBtYXQtbGluZS1iYXNlKG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbikpO1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpO1xuICB9XG59XG5cblxuXG5cbi8vIEluY2x1ZGUgdGhpcyBlbXB0eSBtaXhpbiBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgb3RoZXIgY29tcG9uZW50cy5cbkBtaXhpbiBtYXQtaWNvbi10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1pY29uIHtcbiAgICAmLm1hdC1wcmltYXJ5IHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIHRleHQpO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIHRleHQpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtaWNvbi10eXBvZ3JhcGh5KCRjb25maWcpIHsgfVxuXG5cblxuXG5cbi8vIFJlbmRlcnMgYSBncmFkaWVudCBmb3Igc2hvd2luZyB0aGUgZGFzaGVkIGxpbmUgd2hlbiB0aGUgaW5wdXQgaXMgZGlzYWJsZWQuXG4vLyBVbmxpa2UgdXNpbmcgYSBib3JkZXIsIGEgZ3JhZGllbnQgYWxsb3dzIHVzIHRvIGFkanVzdCB0aGUgc3BhY2luZyBvZiB0aGUgZG90dGVkIGxpbmVcbi8vIHRvIG1hdGNoIHRoZSBNYXRlcmlhbCBEZXNpZ24gc3BlYy5cbkBtaXhpbiBtYXQtY29udHJvbC1kaXNhYmxlZC11bmRlcmxpbmUoJGNvbG9yKSB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgJGNvbG9yIDAlLCAkY29sb3IgMzMlLCB0cmFuc3BhcmVudCAwJSk7XG4gIGJhY2tncm91bmQtc2l6ZTogNHB4IDEwMCU7XG4gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcbn1cblxuLy8gRmlndXJlcyBvdXQgdGhlIGNvbG9yIG9mIHRoZSBwbGFjZWhvbGRlciBmb3IgYSBmb3JtIGNvbnRyb2wuXG4vLyBVc2VkIHByaW1hcmlseSB0byBwcmV2ZW50IHRoZSB2YXJpb3VzIGZvcm0gY29udHJvbHMgZnJvbVxuLy8gYmVjb21pbmcgb3V0IG9mIHN5bmMgc2luY2UgdGhlc2UgY29sb3JzIGFyZW4ndCBpbiBhIHBhbGV0dGUuXG5AZnVuY3Rpb24gX21hdC1jb250cm9sLXBsYWNlaG9sZGVyLWNvbG9yKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuICBAcmV0dXJuIG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjUsIDAuNDIpKTtcbn1cblxuXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXRlcmlhbC9uby1wcmVmaXhlcyAqL1xuQG1peGluIHVzZXItc2VsZWN0KCR2YWx1ZSkge1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiAkdmFsdWU7XG4gIC1tb3otdXNlci1zZWxlY3Q6ICR2YWx1ZTtcbiAgLW1zLXVzZXItc2VsZWN0OiAkdmFsdWU7XG4gIHVzZXItc2VsZWN0OiAkdmFsdWU7XG59XG5cbkBtaXhpbiBpbnB1dC1wbGFjZWhvbGRlciB7XG4gICY6OnBsYWNlaG9sZGVyIHtcbiAgICBAY29udGVudDtcbiAgfVxuXG4gICY6Oi1tb3otcGxhY2Vob2xkZXIge1xuICAgIEBjb250ZW50O1xuICB9XG5cbiAgJjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cblxuICAmOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cbn1cblxuQG1peGluIGN1cnNvci1ncmFiIHtcbiAgY3Vyc29yOiAtd2Via2l0LWdyYWI7XG4gIGN1cnNvcjogZ3JhYjtcbn1cblxuQG1peGluIGN1cnNvci1ncmFiYmluZyB7XG4gIGN1cnNvcjogLXdlYmtpdC1ncmFiYmluZztcbiAgY3Vyc29yOiBncmFiYmluZztcbn1cblxuQG1peGluIGJhY2tmYWNlLXZpc2liaWxpdHkoJHZhbHVlKSB7XG4gIC13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTogJHZhbHVlO1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiAkdmFsdWU7XG59XG4vKiBzdHlsZWxpbnQtZW5hYmxlICovXG5cblxuXG5AbWl4aW4gbWF0LWlucHV0LXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVyIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LWlucHV0LWVsZW1lbnQ6ZGlzYWJsZWQsXG4gIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXIge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICB9XG5cbiAgLm1hdC1pbnB1dC1lbGVtZW50IHtcbiAgICBjYXJldC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCB0ZXh0KTtcblxuICAgIEBpbmNsdWRlIGlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICAgIGNvbG9yOiBfbWF0LWNvbnRyb2wtcGxhY2Vob2xkZXItY29sb3IoJHRoZW1lKTtcbiAgICB9XG5cbiAgICAvLyBPbiBkYXJrIHRoZW1lcyB3ZSBzZXQgdGhlIG5hdGl2ZSBgc2VsZWN0YCBjb2xvciB0byBzb21lIHNoYWRlIG9mIHdoaXRlLFxuICAgIC8vIGhvd2V2ZXIgdGhlIGNvbG9yIHByb3BhZ2F0ZXMgdG8gYWxsIG9mIHRoZSBgb3B0aW9uYCBlbGVtZW50cywgd2hpY2ggYXJlXG4gICAgLy8gYWx3YXlzIG9uIGEgd2hpdGUgYmFja2dyb3VuZCBpbnNpZGUgdGhlIGRyb3Bkb3duLCBjYXVzaW5nIHRoZW0gdG8gYmxlbmQgaW4uXG4gICAgLy8gU2luY2Ugd2UgY2FuJ3QgY2hhbmdlIGJhY2tncm91bmQgb2YgdGhlIGRyb3Bkb3duLCB3ZSBuZWVkIHRvIGV4cGxpY2l0bHlcbiAgICAvLyByZXNldCB0aGUgY29sb3Igb2YgdGhlIG9wdGlvbnMgdG8gc29tZXRoaW5nIGRhcmsuXG4gICAgQGlmIChtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyaykpIHtcbiAgICAgIG9wdGlvbiB7XG4gICAgICAgIGNvbG9yOiAkZGFyay1wcmltYXJ5LXRleHQ7XG4gICAgICB9XG5cbiAgICAgIG9wdGlvbjpkaXNhYmxlZCB7XG4gICAgICAgIGNvbG9yOiAkZGFyay1kaXNhYmxlZC10ZXh0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5tYXQtYWNjZW50IC5tYXQtaW5wdXQtZWxlbWVudCB7XG4gICAgY2FyZXQtY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtd2FybiAubWF0LWlucHV0LWVsZW1lbnQsXG4gIC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudCB7XG4gICAgY2FyZXQtY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXIge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtaW5wdXQtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC8vIFRoZSB1bml0LWxlc3MgbGluZS1oZWlnaHQgZnJvbSB0aGUgZm9udCBjb25maWcuXG4gICRsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGlucHV0KTtcblxuICAvLyBUaGUgYW1vdW50IG9mIHNwYWNlIGJldHdlZW4gdGhlIHRvcCBvZiB0aGUgbGluZSBhbmQgdGhlIHRvcCBvZiB0aGUgYWN0dWFsIHRleHRcbiAgLy8gKGFzIGEgZnJhY3Rpb24gb2YgdGhlIGZvbnQtc2l6ZSkuXG4gICRsaW5lLXNwYWNpbmc6ICgkbGluZS1oZWlnaHQgLSAxKSAvIDI7XG5cbiAgLy8gPGlucHV0PiBlbGVtZW50cyBzZWVtIHRvIGhhdmUgdGhlaXIgaGVpZ2h0IHNldCBzbGlnaHRseSB0b28gbGFyZ2Ugb24gU2FmYXJpIGNhdXNpbmcgdGhlIHRleHQgdG9cbiAgLy8gYmUgbWlzYWxpZ25lZCB3LnIudC4gdGhlIHBsYWNlaG9sZGVyLiBBZGRpbmcgdGhpcyBtYXJnaW4gY29ycmVjdHMgaXQuXG4gIGlucHV0Lm1hdC1pbnB1dC1lbGVtZW50IHtcbiAgICBtYXJnaW4tdG9wOiAtJGxpbmUtc3BhY2luZyAqIDFlbTtcbiAgfVxufVxuXG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LWxpc3QtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1saXN0LWJhc2Uge1xuICAgIC5tYXQtbGlzdC1pdGVtIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIH1cblxuICAgIC5tYXQtbGlzdC1vcHRpb24ge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgfVxuXG4gICAgLm1hdC1zdWJoZWFkZXIge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtbGlzdC1pdGVtLWRpc2FibGVkIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGRpc2FibGVkLWxpc3Qtb3B0aW9uKTtcbiAgfVxuXG4gIC5tYXQtbGlzdC1vcHRpb24sXG4gIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0sXG4gIC5tYXQtYWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ge1xuICAgICY6aG92ZXIsICY6Zm9jdXMge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnaG92ZXInKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbiB7XG4gICAgJiwgJjpob3ZlciwgJjpmb2N1cyB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyLCAwLjEyKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1saXN0LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAkZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcblxuICAubWF0LWxpc3QtaXRlbSB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseTtcbiAgfVxuXG4gIC5tYXQtbGlzdC1vcHRpb24ge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHk7XG4gIH1cblxuICAvLyBEZWZhdWx0IGxpc3RcbiAgLm1hdC1saXN0LWJhc2Uge1xuICAgIC5tYXQtbGlzdC1pdGVtIHtcbiAgICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBzdWJoZWFkaW5nLTIpO1xuICAgICAgQGluY2x1ZGUgbWF0LWxpbmUtYmFzZShtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSkpO1xuICAgIH1cblxuICAgIC5tYXQtbGlzdC1vcHRpb24ge1xuICAgICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIHN1YmhlYWRpbmctMik7XG4gICAgICBAaW5jbHVkZSBtYXQtbGluZS1iYXNlKG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKSk7XG4gICAgfVxuXG4gICAgLm1hdC1zdWJoZWFkZXIge1xuICAgICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBib2R5LTIpO1xuICAgICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMik7XG4gICAgICBmb250LXdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMik7XG4gICAgfVxuICB9XG5cbiAgLy8gRGVuc2UgbGlzdFxuICAubWF0LWxpc3QtYmFzZVtkZW5zZV0ge1xuICAgIC5tYXQtbGlzdC1pdGVtIHtcbiAgICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKTtcbiAgICAgIEBpbmNsdWRlIG1hdC1saW5lLWJhc2UobWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKSk7XG4gICAgfVxuXG4gICAgLm1hdC1saXN0LW9wdGlvbiB7XG4gICAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbik7XG4gICAgICBAaW5jbHVkZSBtYXQtbGluZS1iYXNlKG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbikpO1xuICAgIH1cblxuICAgIC5tYXQtc3ViaGVhZGVyIHtcbiAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHk7XG4gICAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbik7XG4gICAgICBmb250LXdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMik7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtbWVudS10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LW1lbnUtcGFuZWwge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDQsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnY2FyZCcpO1xuICB9XG5cbiAgLm1hdC1tZW51LWl0ZW0ge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsICd0ZXh0Jyk7XG5cbiAgICAmW2Rpc2FibGVkXSB7XG4gICAgICAmLCAmOjphZnRlciB7XG4gICAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsICdkaXNhYmxlZCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbi1uby1jb2xvcixcbiAgLm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2VyOjphZnRlciB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgJ2ljb24nKTtcbiAgfVxuXG4gIC5tYXQtbWVudS1pdGVtOmhvdmVyLFxuICAubWF0LW1lbnUtaXRlbS5jZGstcHJvZ3JhbS1mb2N1c2VkLFxuICAubWF0LW1lbnUtaXRlbS5jZGsta2V5Ym9hcmQtZm9jdXNlZCxcbiAgLm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWQge1xuICAgICY6bm90KFtkaXNhYmxlZF0pIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2hvdmVyJyk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtbWVudS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1tZW51LWl0ZW0ge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGJvZHktMSk7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSk7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTEpO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuQG1peGluIG1hdC1wYWdpbmF0b3ItdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG5cbiAgLm1hdC1wYWdpbmF0b3Ige1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2NhcmQnKTtcbiAgfVxuXG4gIC5tYXQtcGFnaW5hdG9yLFxuICAubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlciB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LFxuICAubWF0LXBhZ2luYXRvci1pbmNyZW1lbnQge1xuICAgIGJvcmRlci10b3A6IDJweCBzb2xpZCBtYXQtY29sb3IoJGZvcmVncm91bmQsICdpY29uJyk7XG4gICAgYm9yZGVyLXJpZ2h0OiAycHggc29saWQgbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCAnaWNvbicpO1xuICB9XG5cbiAgLm1hdC1wYWdpbmF0b3ItZmlyc3QsXG4gIC5tYXQtcGFnaW5hdG9yLWxhc3Qge1xuICAgIGJvcmRlci10b3A6IDJweCBzb2xpZCBtYXQtY29sb3IoJGZvcmVncm91bmQsICdpY29uJyk7XG4gIH1cblxuICAubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSB7XG4gICAgLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LFxuICAgIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudCxcbiAgICAubWF0LXBhZ2luYXRvci1maXJzdCxcbiAgICAubWF0LXBhZ2luYXRvci1sYXN0IHtcbiAgICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCAnZGlzYWJsZWQnKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1wYWdpbmF0b3ItdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtcGFnaW5hdG9yLFxuICAubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlciB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgY2FwdGlvbik7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtcHJvZ3Jlc3MtYmFyLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcblxuICAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5kIHtcbiAgICBmaWxsOiBtYXQtY29sb3IoJHByaW1hcnksIGxpZ2h0ZXIpO1xuICB9XG5cbiAgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIGxpZ2h0ZXIpO1xuICB9XG5cbiAgLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG4gIH1cblxuICAubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IHtcbiAgICAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5kIHtcbiAgICAgIGZpbGw6IG1hdC1jb2xvcigkYWNjZW50LCBsaWdodGVyKTtcbiAgICB9XG5cbiAgICAubWF0LXByb2dyZXNzLWJhci1idWZmZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIGxpZ2h0ZXIpO1xuICAgIH1cblxuICAgIC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYWNjZW50KTtcbiAgICB9XG4gIH1cblxuICAubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiB7XG4gICAgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZCB7XG4gICAgICBmaWxsOiBtYXQtY29sb3IoJHdhcm4sIGxpZ2h0ZXIpO1xuICAgIH1cblxuICAgIC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIGxpZ2h0ZXIpO1xuICAgIH1cblxuICAgIC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkd2Fybik7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtcHJvZ3Jlc3MtYmFyLXR5cG9ncmFwaHkoJGNvbmZpZykgeyB9XG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LXByb2dyZXNzLXNwaW5uZXItdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuXG4gIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciwgLm1hdC1zcGlubmVyIHtcbiAgICBjaXJjbGUge1xuICAgICAgc3Ryb2tlOiBtYXQtY29sb3IoJHByaW1hcnkpO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCBjaXJjbGUge1xuICAgICAgc3Ryb2tlOiBtYXQtY29sb3IoJGFjY2VudCk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiBjaXJjbGUge1xuICAgICAgc3Ryb2tlOiBtYXQtY29sb3IoJHdhcm4pO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXByb2dyZXNzLXNwaW5uZXItdHlwb2dyYXBoeSgkY29uZmlnKSB7IH1cblxuXG5cblxuXG5AbWl4aW4gX21hdC1yYWRpby1jb2xvcigkcGFsZXR0ZSkge1xuICAmLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xlIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSk7XG4gIH1cblxuICAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSxcbiAgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksXG4gICYubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSxcbiAgJjphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlKTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXJhZGlvLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtcmFkaW8tYnV0dG9uIHtcbiAgICAmLm1hdC1wcmltYXJ5IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtcmFkaW8tY29sb3IoJHByaW1hcnkpO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXJhZGlvLWNvbG9yKCRhY2NlbnQpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgQGluY2x1ZGUgX21hdC1yYWRpby1jb2xvcigkd2Fybik7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBuZWVkcyBleHRyYSBzcGVjaWZpY2l0eSwgYmVjYXVzZSB0aGUgY2xhc3NlcyBhYm92ZSBhcmUgY29tYmluZWRcbiAgICAvLyAoZS5nLiBgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudGApIHdoaWNoIGluY3JlYXNlcyB0aGVpciBzcGVjaWZpY2l0eSBhIGxvdC5cbiAgICAvLyBUT0RPOiBjb25zaWRlciBtYWtpbmcgdGhlIHNlbGVjdG9ycyBpbnRvIGRlc2NlbmRhbnRzIChgLm1hdC1wcmltYXJ5IC5tYXQtcmFkaW8tYnV0dG9uYCkuXG4gICAgJi5tYXQtcmFkaW8tZGlzYWJsZWQge1xuICAgICAgJi5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSxcbiAgICAgIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xlIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkKTtcbiAgICAgIH1cblxuICAgICAgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudCxcbiAgICAgIC5tYXQtcmFkaW8taW5uZXItY2lyY2xlIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZCk7XG4gICAgICB9XG5cbiAgICAgIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudCB7XG4gICAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTd2l0Y2ggdGhpcyB0byBhIHNvbGlkIGNvbG9yIHNpbmNlIHdlJ3JlIHVzaW5nIGBvcGFjaXR5YFxuICAgIC8vIHRvIGNvbnRyb2wgaG93IG9wYXF1ZSB0aGUgcmlwcGxlIHNob3VsZCBiZS5cbiAgICAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hcF9nZXQoJGZvcmVncm91bmQsIGJhc2UpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXJhZGlvLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXJhZGlvLWJ1dHRvbiB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxufVxuXG5cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtc2VsZWN0LXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcblxuICAubWF0LXNlbGVjdC12YWx1ZSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cblxuICAubWF0LXNlbGVjdC1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6IF9tYXQtY29udHJvbC1wbGFjZWhvbGRlci1jb2xvcigkdGhlbWUpO1xuICB9XG5cbiAgLm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtdmFsdWUge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICB9XG5cbiAgLm1hdC1zZWxlY3QtYXJyb3cge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtc2VsZWN0LXBhbmVsIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDQsICR0aGVtZSk7XG5cbiAgICAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKSB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyLCAwLjEyKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQge1xuICAgICYubWF0LWZvY3VzZWQge1xuICAgICAgJi5tYXQtcHJpbWFyeSAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIHRleHQpO1xuICAgICAgfVxuXG4gICAgICAmLm1hdC1hY2NlbnQgLm1hdC1zZWxlY3QtYXJyb3cge1xuICAgICAgICBjb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIHRleHQpO1xuICAgICAgfVxuXG4gICAgICAmLm1hdC13YXJuIC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICAgICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1pbnZhbGlkIC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICAgIH1cblxuICAgIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtYXJyb3cge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtc2VsZWN0LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAvLyBUaGUgdW5pdC1sZXNzIGxpbmUtaGVpZ2h0IGZyb20gdGhlIGZvbnQgY29uZmlnLlxuICAkbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBpbnB1dCk7XG5cbiAgLm1hdC1zZWxlY3Qge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LXNlbGVjdC10cmlnZ2VyIHtcbiAgICBoZWlnaHQ6ICRsaW5lLWhlaWdodCAqIDFlbTtcbiAgfVxufVxuXG5cblxuXG5cblxuQG1peGluIG1hdC1zaWRlbmF2LXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAkZHJhd2VyLWJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZGlhbG9nKTtcbiAgJGRyYXdlci1jb250YWluZXItYmFja2dyb3VuZC1jb2xvcjogIG1hdC1jb2xvcigkYmFja2dyb3VuZCwgYmFja2dyb3VuZCk7XG4gICRkcmF3ZXItcHVzaC1iYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGRpYWxvZyk7XG4gICRkcmF3ZXItc2lkZS1ib3JkZXI6IHNvbGlkIDFweCBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuXG4gIC5tYXQtZHJhd2VyLWNvbnRhaW5lciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGRyYXdlci1jb250YWluZXItYmFja2dyb3VuZC1jb2xvcjtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtZHJhd2VyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZHJhd2VyLWJhY2tncm91bmQtY29sb3I7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgICAmLm1hdC1kcmF3ZXItcHVzaCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZHJhd2VyLXB1c2gtYmFja2dyb3VuZC1jb2xvcjtcbiAgICB9XG5cbiAgICAmOm5vdCgubWF0LWRyYXdlci1zaWRlKSB7XG4gICAgICAvLyBUaGUgZWxldmF0aW9uIG9mIHotMTYgaXMgbm90ZWQgaW4gdGhlIGRlc2lnbiBzcGVjaWZpY2F0aW9ucy5cbiAgICAgIC8vIFNlZSBodHRwczovL21hdGVyaWFsLmlvL2Rlc2lnbi9jb21wb25lbnRzL25hdmlnYXRpb24tZHJhd2VyLmh0bWxcbiAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDE2LCAkdGhlbWUpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZHJhd2VyLXNpZGUge1xuICAgIGJvcmRlci1yaWdodDogJGRyYXdlci1zaWRlLWJvcmRlcjtcblxuICAgICYubWF0LWRyYXdlci1lbmQge1xuICAgICAgYm9yZGVyLWxlZnQ6ICRkcmF3ZXItc2lkZS1ib3JkZXI7XG4gICAgICBib3JkZXItcmlnaHQ6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgW2Rpcj0ncnRsJ10gLm1hdC1kcmF3ZXItc2lkZSB7XG4gICAgYm9yZGVyLWxlZnQ6ICRkcmF3ZXItc2lkZS1ib3JkZXI7XG4gICAgYm9yZGVyLXJpZ2h0OiBub25lO1xuXG4gICAgJi5tYXQtZHJhd2VyLWVuZCB7XG4gICAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICAgIGJvcmRlci1yaWdodDogJGRyYXdlci1zaWRlLWJvcmRlcjtcbiAgICB9XG4gIH1cblxuICAubWF0LWRyYXdlci1iYWNrZHJvcC5tYXQtZHJhd2VyLXNob3duIHtcbiAgICAkb3BhY2l0eTogMC42O1xuICAgICRiYWNrZHJvcC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkLCAkb3BhY2l0eSk7XG5cbiAgICBAaWYgKHR5cGUtb2YoJGJhY2tkcm9wLWNvbG9yKSA9PSBjb2xvcikge1xuICAgICAgLy8gV2UgdXNlIGludmVydCgpIGhlcmUgdG8gaGF2ZSB0aGUgZGFya2VuIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGV4cGVjdGVkIHRvIGJlIHVzZWQuIElmIHRoZVxuICAgICAgLy8gYmFja2dyb3VuZCBpcyBsaWdodCwgd2UgdXNlIGEgZGFyayBiYWNrZHJvcC4gSWYgdGhlIGJhY2tncm91bmQgaXMgZGFyayxcbiAgICAgIC8vIHdlIHVzZSBhIGxpZ2h0IGJhY2tkcm9wLlxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW52ZXJ0KCRiYWNrZHJvcC1jb2xvcik7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIC8vIElmIHdlIGNvdWxkbid0IHJlc29sdmUgdGhlIGJhY2tkcm9wIGNvbG9yIHRvIGEgY29sb3IgdmFsdWUsIGZhbGwgYmFjayB0byB1c2luZ1xuICAgICAgLy8gYG9wYWNpdHlgIHRvIG1ha2UgaXQgb3BhcXVlIHNpbmNlIGl0cyBlbmQgdmFsdWUgY291bGQgYmUgYSBzb2xpZCBjb2xvci5cbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZHJvcC1jb2xvcjtcbiAgICAgIG9wYWNpdHk6ICRvcGFjaXR5O1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNpZGVuYXYtdHlwb2dyYXBoeSgkY29uZmlnKSB7IH1cblxuXG5cblxuXG5cbkBtaXhpbiBfbWF0LXNsaWRlLXRvZ2dsZS1jaGVja2VkKCRwYWxldHRlLCAkdGh1bWItY2hlY2tlZC1odWUpIHtcbiAgJi5tYXQtY2hlY2tlZCB7XG4gICAgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCAkdGh1bWItY2hlY2tlZC1odWUpO1xuICAgIH1cblxuICAgIC5tYXQtc2xpZGUtdG9nZ2xlLWJhciB7XG4gICAgICAvLyBPcGFjaXR5IGlzIGRldGVybWluZWQgZnJvbSB0aGUgc3BlY3MgZm9yIHRoZSBzZWxlY3Rpb24gY29udHJvbHMuXG4gICAgICAvLyBTZWU6IGh0dHBzOi8vbWF0ZXJpYWwuaW8vZGVzaWduL2NvbXBvbmVudHMvc2VsZWN0aW9uLWNvbnRyb2xzLmh0bWwjc3BlY3NcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgJHRodW1iLWNoZWNrZWQtaHVlLCAwLjU0KTtcbiAgICB9XG5cbiAgICAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAgIC8vIFNldCBubyBvcGFjaXR5IGZvciB0aGUgcmlwcGxlcyBiZWNhdXNlIHRoZSByaXBwbGUgb3BhY2l0eSB3aWxsIGJlIGFkanVzdGVkIGR5bmFtaWNhbGx5XG4gICAgICAvLyBiYXNlZCBvbiB0aGUgdHlwZSBvZiBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzbGlkZS10b2dnbGUgKGUuZy4gZm9yIGhvdmVyLCBmb2N1cylcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgJHRodW1iLWNoZWNrZWQtaHVlKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1zbGlkZS10b2dnbGUtdGhlbWUoJHRoZW1lKSB7XG4gICRpcy1kYXJrOiBtYXBfZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC8vIENvbG9yIGh1ZXMgYXJlIGJhc2VkIG9uIHRoZSBzcGVjcyB3aGljaCBicmllZmx5IHNob3cgdGhlIGh1ZXMgdGhhdCBhcmUgYXBwbGllZCB0byBhIHN3aXRjaC5cbiAgLy8gVGhlIDIwMTggc3BlY3Mgbm8gbG9uZ2VyIGRlc2NyaWJlIGhvdyBkYXJrIHN3aXRjaGVzIHNob3VsZCBsb29rIGxpa2UuIER1ZSB0byB0aGUgbGFjayBvZlxuICAvLyBpbmZvcm1hdGlvbiBmb3IgZGFyayB0aGVtZWQgc3dpdGNoZXMsIHdlIHBhcnRpYWxseSBrZWVwIHRoZSBvbGQgYmVoYXZpb3IgdGhhdCBpcyBiYXNlZCBvblxuICAvLyB0aGUgcHJldmlvdXMgc3BlY2lmaWNhdGlvbnMuIEZvciB0aGUgY2hlY2tlZCBjb2xvciB3ZSBhbHdheXMgdXNlIHRoZSBgZGVmYXVsdGAgaHVlIGJlY2F1c2VcbiAgLy8gdGhhdCBmb2xsb3dzIE1EQyBhbmQgYWxzbyBtYWtlcyBpdCBlYXNpZXIgZm9yIHBlb3BsZSB0byBjcmVhdGUgYSBjdXN0b20gdGhlbWUgd2l0aG91dCBuZWVkaW5nXG4gIC8vIHRvIHNwZWNpZnkgZWFjaCBodWUgaW5kaXZpZHVhbGx5LlxuICAkdGh1bWItdW5jaGVja2VkLWh1ZTogaWYoJGlzLWRhcmssIDQwMCwgNTApO1xuICAkdGh1bWItY2hlY2tlZC1odWU6IGRlZmF1bHQ7XG5cbiAgJGJhci11bmNoZWNrZWQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQpO1xuICAkcmlwcGxlLXVuY2hlY2tlZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBiYXNlKTtcblxuICAubWF0LXNsaWRlLXRvZ2dsZSB7XG4gICAgQGluY2x1ZGUgX21hdC1zbGlkZS10b2dnbGUtY2hlY2tlZCgkYWNjZW50LCAkdGh1bWItY2hlY2tlZC1odWUpO1xuXG4gICAgJi5tYXQtcHJpbWFyeSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXNsaWRlLXRvZ2dsZS1jaGVja2VkKCRwcmltYXJ5LCAkdGh1bWItY2hlY2tlZC1odWUpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgQGluY2x1ZGUgX21hdC1zbGlkZS10b2dnbGUtY2hlY2tlZCgkd2FybiwgJHRodW1iLWNoZWNrZWQtaHVlKTtcbiAgICB9XG5cbiAgICAmOm5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgICAgLy8gU2V0IG5vIG9wYWNpdHkgZm9yIHRoZSByaXBwbGVzIGJlY2F1c2UgdGhlIHJpcHBsZSBvcGFjaXR5IHdpbGwgYmUgYWRqdXN0ZWQgZHluYW1pY2FsbHlcbiAgICAgIC8vIGJhc2VkIG9uIHRoZSB0eXBlIG9mIGludGVyYWN0aW9uIHdpdGggdGhlIHNsaWRlLXRvZ2dsZSAoZS5nLiBmb3IgaG92ZXIsIGZvY3VzKVxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHJpcHBsZS11bmNoZWNrZWQtY29sb3I7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDEsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRtYXQtZ3JleSwgJHRodW1iLXVuY2hlY2tlZC1odWUpO1xuICB9XG5cbiAgLm1hdC1zbGlkZS10b2dnbGUtYmFyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFyLXVuY2hlY2tlZC1jb2xvcjtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNsaWRlLXRvZ2dsZS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1zbGlkZS10b2dnbGUtY29udGVudCB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBfbWF0LXNsaWRlci1pbm5lci1jb250ZW50LXRoZW1lKCRwYWxldHRlKSB7XG4gIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsXG4gIC5tYXQtc2xpZGVyLXRodW1iLFxuICAubWF0LXNsaWRlci10aHVtYi1sYWJlbCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlKTtcbiAgfVxuXG4gIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHQge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsIGRlZmF1bHQtY29udHJhc3QpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtc2xpZGVyLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAkbWF0LXNsaWRlci1vZmYtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2xpZGVyLW9mZik7XG4gICRtYXQtc2xpZGVyLW9mZi1mb2N1c2VkLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNsaWRlci1vZmYtYWN0aXZlKTtcbiAgJG1hdC1zbGlkZXItZGlzYWJsZWQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2xpZGVyLW9mZik7XG4gICRtYXQtc2xpZGVyLWxhYmVsZWQtbWluLXZhbHVlLXRodW1iLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNsaWRlci1taW4pO1xuICAkbWF0LXNsaWRlci1sYWJlbGVkLW1pbi12YWx1ZS10aHVtYi1sYWJlbC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzbGlkZXItb2ZmKTtcbiAgJG1hdC1zbGlkZXItdGljay1vcGFjaXR5OiAwLjc7XG4gICRtYXQtc2xpZGVyLXRpY2stY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgYmFzZSwgJG1hdC1zbGlkZXItdGljay1vcGFjaXR5KTtcbiAgJG1hdC1zbGlkZXItdGljay1zaXplOiAycHg7XG5cbiAgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJG1hdC1zbGlkZXItb2ZmLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1wcmltYXJ5IHtcbiAgICBAaW5jbHVkZSBfbWF0LXNsaWRlci1pbm5lci1jb250ZW50LXRoZW1lKCRwcmltYXJ5KTtcbiAgfVxuXG4gIC5tYXQtYWNjZW50IHtcbiAgICBAaW5jbHVkZSBfbWF0LXNsaWRlci1pbm5lci1jb250ZW50LXRoZW1lKCRhY2NlbnQpO1xuICB9XG5cbiAgLm1hdC13YXJuIHtcbiAgICBAaW5jbHVkZSBfbWF0LXNsaWRlci1pbm5lci1jb250ZW50LXRoZW1lKCR3YXJuKTtcbiAgfVxuXG4gIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmcge1xuICAgICRvcGFjaXR5OiAwLjI7XG4gICAgJGNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgZGVmYXVsdCwgJG9wYWNpdHkpO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvcjtcblxuICAgIC8vIGBtYXQtY29sb3JgIHVzZXMgYHJnYmFgIGZvciB0aGUgb3BhY2l0eSB3aGljaCB3b24ndCB3b3JrIHdpdGhcbiAgICAvLyBDU1MgdmFyaWFibGVzIHNvIHdlIG5lZWQgdG8gdXNlIGBvcGFjaXR5YCBhcyBhIGZhbGxiYWNrLlxuICAgIEBpZiAodHlwZS1vZigkY29sb3IpICE9IGNvbG9yKSB7XG4gICAgICBvcGFjaXR5OiAkb3BhY2l0eTtcbiAgICB9XG4gIH1cblxuICAubWF0LXNsaWRlcjpob3ZlcixcbiAgLmNkay1mb2N1c2VkIHtcbiAgICAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRtYXQtc2xpZGVyLW9mZi1mb2N1c2VkLWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2xpZGVyLWRpc2FibGVkIHtcbiAgICAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLFxuICAgIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsXG4gICAgLm1hdC1zbGlkZXItdGh1bWIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG1hdC1zbGlkZXItZGlzYWJsZWQtY29sb3I7XG4gICAgfVxuXG4gICAgJjpob3ZlciB7XG4gICAgICAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG1hdC1zbGlkZXItZGlzYWJsZWQtY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbGlkZXItbWluLXZhbHVlIHtcbiAgICAubWF0LXNsaWRlci1mb2N1cy1yaW5nIHtcbiAgICAgICRvcGFjaXR5OiAwLjEyO1xuICAgICAgJGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGJhc2UsICRvcGFjaXR5KTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvcjtcblxuICAgICAgLy8gYG1hdC1jb2xvcmAgdXNlcyBgcmdiYWAgZm9yIHRoZSBvcGFjaXR5IHdoaWNoIHdvbid0IHdvcmsgd2l0aFxuICAgICAgLy8gQ1NTIHZhcmlhYmxlcyBzbyB3ZSBuZWVkIHRvIHVzZSBgb3BhY2l0eWAgYXMgYSBmYWxsYmFjay5cbiAgICAgIEBpZiAodHlwZS1vZigkY29sb3IpICE9IGNvbG9yKSB7XG4gICAgICAgIG9wYWNpdHk6ICRvcGFjaXR5O1xuICAgICAgfVxuICAgIH1cblxuICAgICYubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIHtcbiAgICAgIC5tYXQtc2xpZGVyLXRodW1iLFxuICAgICAgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbWF0LXNsaWRlci1sYWJlbGVkLW1pbi12YWx1ZS10aHVtYi1jb2xvcjtcbiAgICAgIH1cblxuICAgICAgJi5jZGstZm9jdXNlZCB7XG4gICAgICAgIC5tYXQtc2xpZGVyLXRodW1iLFxuICAgICAgICAubWF0LXNsaWRlci10aHVtYi1sYWJlbCB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG1hdC1zbGlkZXItbGFiZWxlZC1taW4tdmFsdWUtdGh1bWItbGFiZWwtY29sb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKSB7XG4gICAgICAubWF0LXNsaWRlci10aHVtYiB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJG1hdC1zbGlkZXItb2ZmLWNvbG9yO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIH1cblxuICAgICAgJjpob3ZlcixcbiAgICAgICYuY2RrLWZvY3VzZWQge1xuICAgICAgICAubWF0LXNsaWRlci10aHVtYiB7XG4gICAgICAgICAgYm9yZGVyLWNvbG9yOiAkbWF0LXNsaWRlci1vZmYtZm9jdXNlZC1jb2xvcjtcbiAgICAgICAgfVxuXG4gICAgICAgICYubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYiB7XG4gICAgICAgICAgYm9yZGVyLWNvbG9yOiAkbWF0LXNsaWRlci1kaXNhYmxlZC1jb2xvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlciB7XG4gICAgYm9yZGVyLWNvbG9yOiAkbWF0LXNsaWRlci10aWNrLWNvbG9yO1xuXG4gICAgLy8gYG1hdC1jb2xvcmAgdXNlcyBgcmdiYWAgZm9yIHRoZSBvcGFjaXR5IHdoaWNoIHdvbid0IHdvcmsgd2l0aFxuICAgIC8vIENTUyB2YXJpYWJsZXMgc28gd2UgbmVlZCB0byB1c2UgYG9wYWNpdHlgIGFzIGEgZmFsbGJhY2suXG4gICAgQGlmICh0eXBlLW9mKCRtYXQtc2xpZGVyLXRpY2stY29sb3IpICE9IGNvbG9yKSB7XG4gICAgICBvcGFjaXR5OiAkbWF0LXNsaWRlci10aWNrLW9wYWNpdHk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrcyB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byByaWdodCwgJG1hdC1zbGlkZXItdGljay1jb2xvcixcbiAgICAgICAgJG1hdC1zbGlkZXItdGljay1jb2xvciAkbWF0LXNsaWRlci10aWNrLXNpemUsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KTtcbiAgICAvLyBGaXJlZm94IGRvZXNuJ3QgZHJhdyB0aGUgZ3JhZGllbnQgY29ycmVjdGx5IHdpdGggJ3RvIHJpZ2h0J1xuICAgIC8vIChzZWUgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxNDMxOSkuXG4gICAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1yZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDAuMDAwMWRlZywgJG1hdC1zbGlkZXItdGljay1jb2xvcixcbiAgICAgICAgJG1hdC1zbGlkZXItdGljay1jb2xvciAkbWF0LXNsaWRlci10aWNrLXNpemUsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KTtcblxuICAgIC8vIGBtYXQtY29sb3JgIHVzZXMgYHJnYmFgIGZvciB0aGUgb3BhY2l0eSB3aGljaCB3b24ndCB3b3JrIHdpdGhcbiAgICAvLyBDU1MgdmFyaWFibGVzIHNvIHdlIG5lZWQgdG8gdXNlIGBvcGFjaXR5YCBhcyBhIGZhbGxiYWNrLlxuICAgIEBpZiAodHlwZS1vZigkbWF0LXNsaWRlci10aWNrLWNvbG9yKSAhPSBjb2xvcikge1xuICAgICAgb3BhY2l0eTogJG1hdC1zbGlkZXItdGljay1vcGFjaXR5O1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRpY2tzIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgJG1hdC1zbGlkZXItdGljay1jb2xvcixcbiAgICAgICAgJG1hdC1zbGlkZXItdGljay1jb2xvciAkbWF0LXNsaWRlci10aWNrLXNpemUsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KTtcblxuICAgIC8vIGBtYXQtY29sb3JgIHVzZXMgYHJnYmFgIGZvciB0aGUgb3BhY2l0eSB3aGljaCB3b24ndCB3b3JrIHdpdGhcbiAgICAvLyBDU1MgdmFyaWFibGVzIHNvIHdlIG5lZWQgdG8gdXNlIGBvcGFjaXR5YCBhcyBhIGZhbGxiYWNrLlxuICAgIEBpZiAodHlwZS1vZigkbWF0LXNsaWRlci10aWNrLWNvbG9yKSAhPSBjb2xvcikge1xuICAgICAgb3BhY2l0eTogJG1hdC1zbGlkZXItdGljay1vcGFjaXR5O1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNsaWRlci10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dCB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0yKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LXN0ZXBwZXItdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG5cbiAgLm1hdC1zdGVwLWhlYWRlciB7XG4gICAgJi5jZGsta2V5Ym9hcmQtZm9jdXNlZCxcbiAgICAmLmNkay1wcm9ncmFtLWZvY3VzZWQsXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyKTtcbiAgICB9XG5cbiAgICAvLyBPbiB0b3VjaCBkZXZpY2VzIHRoZSA6aG92ZXIgc3RhdGUgd2lsbCBsaW5nZXIgb24gdGhlIGVsZW1lbnQgYWZ0ZXIgYSB0YXAuXG4gICAgLy8gUmVzZXQgaXQgdmlhIGBAbWVkaWFgIGFmdGVyIHRoZSBkZWNsYXJhdGlvbiwgYmVjYXVzZSB0aGUgbWVkaWEgcXVlcnkgaXNuJ3RcbiAgICAvLyBzdXBwb3J0ZWQgYnkgYWxsIGJyb3dzZXJzIHlldC5cbiAgICBAbWVkaWEgKGhvdmVyOiBub25lKSB7XG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAubWF0LXN0ZXAtbGFiZWwsXG4gICAgLm1hdC1zdGVwLW9wdGlvbmFsIHtcbiAgICAgIC8vIFRPRE8oam9zZXBocGVycm90dCk6IFVwZGF0ZSB0byB1c2luZyBhIGNvcnJlY3RlZCBkaXNhYmxlZC10ZXh0IGNvbnRyYXN0XG4gICAgICAvLyBpbnN0ZWFkIG9mIHNlY29uZGFyeS10ZXh0LlxuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICAgIH1cblxuICAgIC5tYXQtc3RlcC1pY29uIHtcbiAgICAgIC8vIFRPRE8oam9zZXBocGVycm90dCk6IFVwZGF0ZSB0byB1c2luZyBhIGNvcnJlY3RlZCBkaXNhYmxlZC10ZXh0IGNvbnRyYXN0XG4gICAgICAvLyBpbnN0ZWFkIG9mIHNlY29uZGFyeS10ZXh0LlxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgICB9XG5cbiAgICAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCxcbiAgICAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLFxuICAgIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5KTtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIGRlZmF1bHQtY29udHJhc3QpO1xuICAgIH1cblxuICAgIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVycm9yIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gICAgfVxuXG4gICAgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWFjdGl2ZSB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICB9XG5cbiAgICAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtZXJyb3Ige1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zdGVwcGVyLWhvcml6b250YWwsIC5tYXQtc3RlcHBlci12ZXJ0aWNhbCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgfVxuXG4gIC5tYXQtc3RlcHBlci12ZXJ0aWNhbC1saW5lOjpiZWZvcmUge1xuICAgIGJvcmRlci1sZWZ0LWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG5cbiAgLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjpiZWZvcmUsXG4gIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YWZ0ZXIsXG4gIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLWxpbmUge1xuICAgIGJvcmRlci10b3AtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cbn1cblxuQG1peGluIG1hdC1zdGVwcGVyLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXN0ZXBwZXItdmVydGljYWwsIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC1zdGVwLWxhYmVsIHtcbiAgICBmb250OiB7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSk7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTEpO1xuICAgIH07XG4gIH1cblxuICAubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yIHtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICB9XG5cbiAgLm1hdC1zdGVwLWxhYmVsLWVycm9yIHtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0yKTtcbiAgfVxuXG4gIC5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZCB7XG4gICAgZm9udDoge1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTIpO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0yKTtcbiAgICB9O1xuICB9XG59XG5cbkBtaXhpbiBtYXQtc29ydC10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LXNvcnQtaGVhZGVyLWFycm93IHtcbiAgICAkdGFibGUtYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnY2FyZCcpO1xuICAgICR0ZXh0LWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcblxuICAgIC8vIEJlY2F1c2UgdGhlIGFycm93IGlzIG1hZGUgdXAgb2YgbXVsdGlwbGUgZWxlbWVudHMgdGhhdCBhcmUgc3RhY2tlZCBvbiB0b3Agb2YgZWFjaCBvdGhlcixcbiAgICAvLyB3ZSBjYW4ndCB1c2UgdGhlIHNlbWktdHJhc3BhcmVudCBjb2xvciBmcm9tIHRoZSB0aGVtZSBkaXJlY3RseS4gSWYgdGhlIHZhbHVlIGlzIGEgY29sb3JcbiAgICAvLyAqdHlwZSosIHdlIGNvbnZlcnQgaXQgaW50byBhIHNvbGlkIGNvbG9yIGJ5IHRha2luZyB0aGUgb3BhY2l0eSBmcm9tIHRoZSByZ2JhIHZhbHVlIGFuZFxuICAgIC8vIHVzaW5nIHRoZSB2YWx1ZSB0byBkZXRlcm1pbmUgdGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIGJhY2tncm91bmQgdG8gcHV0IGludG8gZm9yZWdyb3VuZFxuICAgIC8vIHdoZW4gbWl4aW5nIHRoZSBjb2xvcnMgdG9nZXRoZXIuIE90aGVyd2lzZSwgaWYgaXQgcmVzb2x2ZXMgdG8gc29tZXRoaW5nIGRpZmZlcmVudFxuICAgIC8vIChlLmcuIGl0IHJlc29sdmVzIHRvIGEgQ1NTIHZhcmlhYmxlKSwgd2UgdXNlIHRoZSBjb2xvciBkaXJlY3RseS5cbiAgICBAaWYgKHR5cGUtb2YoJHRhYmxlLWJhY2tncm91bmQpID09IGNvbG9yIGFuZCB0eXBlLW9mKCR0ZXh0LWNvbG9yKSA9PSBjb2xvcikge1xuICAgICAgJHRleHQtb3BhY2l0eTogb3BhY2l0eSgkdGV4dC1jb2xvcik7XG4gICAgICBjb2xvcjogbWl4KCR0YWJsZS1iYWNrZ3JvdW5kLCByZ2JhKCR0ZXh0LWNvbG9yLCAxKSwgKDEgLSAkdGV4dC1vcGFjaXR5KSAqIDEwMCUpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICBjb2xvcjogJHRleHQtY29sb3I7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtc29ydC10eXBvZ3JhcGh5KCRjb25maWcpIHsgfVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtdGFicy10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRoZWFkZXItYm9yZGVyOiAxcHggc29saWQgbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcblxuICAubWF0LXRhYi1uYXYtYmFyLFxuICAubWF0LXRhYi1oZWFkZXIge1xuICAgIGJvcmRlci1ib3R0b206ICRoZWFkZXItYm9yZGVyO1xuICB9XG5cbiAgLm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIHtcbiAgICAubWF0LXRhYi1uYXYtYmFyLFxuICAgIC5tYXQtdGFiLWhlYWRlciB7XG4gICAgICBib3JkZXItdG9wOiAkaGVhZGVyLWJvcmRlcjtcbiAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgLm1hdC10YWItbGFiZWwsIC5tYXQtdGFiLWxpbmsge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gICAgJi5tYXQtdGFiLWRpc2FibGVkIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24ge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24ge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgfVxuXG4gIC8vIFJlbW92ZSBoZWFkZXIgYm9yZGVyIHdoZW4gdGhlcmUgaXMgYSBiYWNrZ3JvdW5kIGNvbG9yXG4gIC5tYXQtdGFiLWdyb3VwW2NsYXNzKj0nbWF0LWJhY2tncm91bmQtJ10gLm1hdC10YWItaGVhZGVyLFxuICAubWF0LXRhYi1uYXYtYmFyW2NsYXNzKj0nbWF0LWJhY2tncm91bmQtJ10ge1xuICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG4gICAgYm9yZGVyLXRvcDogbm9uZTtcbiAgfVxuXG4gIC5tYXQtdGFiLWdyb3VwLCAubWF0LXRhYi1uYXYtYmFyIHtcbiAgICAkdGhlbWUtY29sb3JzOiAoXG4gICAgICBwcmltYXJ5OiAkcHJpbWFyeSxcbiAgICAgIGFjY2VudDogJGFjY2VudCxcbiAgICAgIHdhcm46ICR3YXJuXG4gICAgKTtcblxuICAgIEBlYWNoICRuYW1lLCAkY29sb3IgaW4gJHRoZW1lLWNvbG9ycyB7XG4gICAgICAvLyBTZXQgdGhlIGZvcmVncm91bmQgY29sb3Igb2YgdGhlIHRhYnNcbiAgICAgICYubWF0LSN7JG5hbWV9IHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC10YWItbGFiZWwtZm9jdXMoJGNvbG9yKTtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1pbmstYmFyKCRjb2xvcik7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgaW5rIGJhciB3aGVuIGJhY2tncm91bmQgY29sb3IgaXMgdGhlIHNhbWVcbiAgICAgICAgJi5tYXQtYmFja2dyb3VuZC0jeyRuYW1lfSB7XG4gICAgICAgICAgQGluY2x1ZGUgX21hdC1pbmstYmFyKCRjb2xvciwgZGVmYXVsdC1jb250cmFzdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBAZWFjaCAkbmFtZSwgJGNvbG9yIGluICR0aGVtZS1jb2xvcnMge1xuICAgICAgLy8gU2V0IGJhY2tncm91bmQgY29sb3Igb2YgdGhlIHRhYnMgYW5kIG92ZXJyaWRlIGZvY3VzIGNvbG9yXG4gICAgICAmLm1hdC1iYWNrZ3JvdW5kLSN7JG5hbWV9IHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC10YWItbGFiZWwtZm9jdXMoJGNvbG9yKTtcbiAgICAgICAgQGluY2x1ZGUgX21hdC10YWJzLWJhY2tncm91bmQoJGNvbG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuQG1peGluIF9tYXQtaW5rLWJhcigkY29sb3IsICRodWU6IGRlZmF1bHQpIHtcbiAgLm1hdC1pbmstYmFyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGNvbG9yLCAkaHVlKTtcbiAgfVxufVxuXG5AbWl4aW4gX21hdC10YWItbGFiZWwtZm9jdXMoJHRhYi1mb2N1cy1jb2xvcikge1xuICAubWF0LXRhYi1sYWJlbCxcbiAgLm1hdC10YWItbGluayB7XG4gICAgJi5jZGsta2V5Ym9hcmQtZm9jdXNlZCxcbiAgICAmLmNkay1wcm9ncmFtLWZvY3VzZWQge1xuICAgICAgJjpub3QoLm1hdC10YWItZGlzYWJsZWQpIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCR0YWItZm9jdXMtY29sb3IsIGxpZ2h0ZXIsIDAuMyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBfbWF0LXRhYnMtYmFja2dyb3VuZCgkYmFja2dyb3VuZC1jb2xvcikge1xuICAvLyBTZXQgYmFja2dyb3VuZCBjb2xvciBmb3IgdGhlIHRhYiBncm91cFxuICAubWF0LXRhYi1oZWFkZXIsIC5tYXQtdGFiLWxpbmtzLCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLWNvbG9yKTtcbiAgfVxuXG4gIC8vIFNldCBsYWJlbHMgdG8gY29udHJhc3QgYWdhaW5zdCBiYWNrZ3JvdW5kXG4gIC5tYXQtdGFiLWxhYmVsLCAubWF0LXRhYi1saW5rIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLWNvbG9yLCBkZWZhdWx0LWNvbnRyYXN0KTtcblxuICAgICYubWF0LXRhYi1kaXNhYmxlZCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLWNvbG9yLCBkZWZhdWx0LWNvbnRyYXN0LCAwLjQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNldCBwYWdpbmF0aW9uIGNoZXZyb25zIHRvIGNvbnRyYXN0IGJhY2tncm91bmRcbiAgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQtY29sb3IsIGRlZmF1bHQtY29udHJhc3QpO1xuICB9XG5cbiAgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQtY29sb3IsIGRlZmF1bHQtY29udHJhc3QsIDAuNCk7XG4gIH1cblxuICAvLyBTZXQgcmlwcGxlcyBjb2xvciB0byBiZSB0aGUgY29udHJhc3QgY29sb3Igb2YgdGhlIG5ldyBiYWNrZ3JvdW5kLiBPdGhlcndpc2UgdGhlIHJpcHBsZVxuICAvLyBjb2xvciB3aWxsIGJlIGJhc2VkIG9uIHRoZSBhcHAgYmFja2dyb3VuZCBjb2xvci5cbiAgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLWNvbG9yLCBkZWZhdWx0LWNvbnRyYXN0LCAwLjEyKTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXRhYnMtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtdGFiLWdyb3VwIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC10YWItbGFiZWwsIC5tYXQtdGFiLWxpbmsge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGJ1dHRvbik7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJ1dHRvbik7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBidXR0b24pO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuQG1peGluIF9tYXQtdG9vbGJhci1jb2xvcigkcGFsZXR0ZSkge1xuICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJHBhbGV0dGUpO1xuICBjb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCBkZWZhdWx0LWNvbnRyYXN0KTtcbn1cblxuQG1peGluIF9tYXQtdG9vbGJhci1mb3JtLWZpZWxkLW92ZXJyaWRlcyB7XG4gIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUsXG4gIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsXG4gIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Q29sb3I7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtbGFiZWwsXG4gIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwsXG4gIC5tYXQtc2VsZWN0LXZhbHVlLFxuICAubWF0LXNlbGVjdC1hcnJvdyxcbiAgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgfVxuXG4gIC5tYXQtaW5wdXQtZWxlbWVudCB7XG4gICAgY2FyZXQtY29sb3I6IGN1cnJlbnRDb2xvcjtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXRvb2xiYXItdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtdG9vbGJhciB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBhcHAtYmFyKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAgICYubWF0LXByaW1hcnkge1xuICAgICAgQGluY2x1ZGUgX21hdC10b29sYmFyLWNvbG9yKCRwcmltYXJ5KTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgQGluY2x1ZGUgX21hdC10b29sYmFyLWNvbG9yKCRhY2NlbnQpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgQGluY2x1ZGUgX21hdC10b29sYmFyLWNvbG9yKCR3YXJuKTtcbiAgICB9XG5cbiAgICBAaW5jbHVkZSBfbWF0LXRvb2xiYXItZm9ybS1maWVsZC1vdmVycmlkZXM7XG4gIH1cbn1cblxuQG1peGluIG1hdC10b29sYmFyLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXRvb2xiYXIsXG4gIC5tYXQtdG9vbGJhciBoMSxcbiAgLm1hdC10b29sYmFyIGgyLFxuICAubWF0LXRvb2xiYXIgaDMsXG4gIC5tYXQtdG9vbGJhciBoNCxcbiAgLm1hdC10b29sYmFyIGg1LFxuICAubWF0LXRvb2xiYXIgaDYge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCB0aXRsZSk7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG5cblxuXG5cblxuJG1hdC10b29sdGlwLXRhcmdldC1oZWlnaHQ6IDIycHg7XG4kbWF0LXRvb2x0aXAtZm9udC1zaXplOiAxMHB4O1xuJG1hdC10b29sdGlwLXZlcnRpY2FsLXBhZGRpbmc6ICgkbWF0LXRvb2x0aXAtdGFyZ2V0LWhlaWdodCAtICRtYXQtdG9vbHRpcC1mb250LXNpemUpIC8gMjtcblxuJG1hdC10b29sdGlwLWhhbmRzZXQtdGFyZ2V0LWhlaWdodDogMzBweDtcbiRtYXQtdG9vbHRpcC1oYW5kc2V0LWZvbnQtc2l6ZTogMTRweDtcbiRtYXQtdG9vbHRpcC1oYW5kc2V0LXZlcnRpY2FsLXBhZGRpbmc6XG4gICAgKCRtYXQtdG9vbHRpcC1oYW5kc2V0LXRhcmdldC1oZWlnaHQgLSAkbWF0LXRvb2x0aXAtaGFuZHNldC1mb250LXNpemUpIC8gMjtcblxuQG1peGluIG1hdC10b29sdGlwLXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuXG4gIC5tYXQtdG9vbHRpcCB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCB0b29sdGlwLCAwLjkpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtdG9vbHRpcC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC10b29sdGlwIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICAgIGZvbnQtc2l6ZTogJG1hdC10b29sdGlwLWZvbnQtc2l6ZTtcbiAgICBwYWRkaW5nLXRvcDogJG1hdC10b29sdGlwLXZlcnRpY2FsLXBhZGRpbmc7XG4gICAgcGFkZGluZy1ib3R0b206ICRtYXQtdG9vbHRpcC12ZXJ0aWNhbC1wYWRkaW5nO1xuICB9XG5cbiAgLm1hdC10b29sdGlwLWhhbmRzZXQge1xuICAgIGZvbnQtc2l6ZTogJG1hdC10b29sdGlwLWhhbmRzZXQtZm9udC1zaXplO1xuICAgIHBhZGRpbmctdG9wOiAkbWF0LXRvb2x0aXAtaGFuZHNldC12ZXJ0aWNhbC1wYWRkaW5nO1xuICAgIHBhZGRpbmctYm90dG9tOiAkbWF0LXRvb2x0aXAtaGFuZHNldC12ZXJ0aWNhbC1wYWRkaW5nO1xuICB9XG59XG5cblxuXG5cblxuQG1peGluIG1hdC1zbmFjay1iYXItdGhlbWUoJHRoZW1lKSB7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuXG4gIC5tYXQtc25hY2stYmFyLWNvbnRhaW5lciB7XG4gICAgLy8gVXNlIHRoZSBwcmltYXJ5IHRleHQgb24gdGhlIGRhcmsgdGhlbWUsIGV2ZW4gdGhvdWdoIHRoZSBsaWdodGVyIG9uZSB1c2VzXG4gICAgLy8gYSBzZWNvbmRhcnksIGJlY2F1c2UgdGhlIGNvbnRyYXN0IG9uIHRoZSBsaWdodCBwcmltYXJ5IHRleHQgaXMgcG9vci5cbiAgICBjb2xvcjogaWYoJGlzLWRhcmstdGhlbWUsICRkYXJrLXByaW1hcnktdGV4dCwgJGxpZ2h0LXNlY29uZGFyeS10ZXh0KTtcbiAgICBiYWNrZ3JvdW5kOiBpZigkaXMtZGFyay10aGVtZSwgbWFwLWdldCgkbWF0LWdyZXksIDUwKSwgIzMyMzIzMik7XG5cbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbig2LCAkdGhlbWUpO1xuICB9XG5cbiAgLm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uIHtcbiAgICBjb2xvcjogaWYoJGlzLWRhcmstdGhlbWUsIGluaGVyaXQsIG1hdC1jb2xvcigkYWNjZW50LCB0ZXh0KSk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1zbmFjay1iYXItdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtc2ltcGxlLXNuYWNrYmFyIHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBib2R5LTEpO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbiB7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBpbmhlcml0O1xuICAgICAgc2l6ZTogaW5oZXJpdDtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJ1dHRvbik7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLy8gVGhlbWUgc3R5bGVzIHRoYXQgb25seSBhcHBseSB0byB0aGUgZmlsbCBhcHBlYXJhbmNlIG9mIHRoZSBmb3JtLWZpZWxkLlxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtZmlsbC10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcblxuICAkZmlsbC1iYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGJhc2UsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjEsIDAuMDQpKTtcbiAgJGZpbGwtZGlzYWJsZWQtYmFja2dyb3VuZDogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBiYXNlLCBpZigkaXMtZGFyay10aGVtZSwgMC4wNSwgMC4wMikpO1xuICAkdW5kZXJsaW5lLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjUsIDAuNDIpKTtcbiAgJGxhYmVsLWRpc2FibGVkLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwge1xuICAgIC5tYXQtZm9ybS1maWVsZC1mbGV4IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRmaWxsLWJhY2tncm91bmQ7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtZmxleCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZmlsbC1kaXNhYmxlZC1iYWNrZ3JvdW5kO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yO1xuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQge1xuICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgY29sb3I6ICRsYWJlbC1kaXNhYmxlZC1jb2xvcjtcbiAgICAgIH1cblxuICAgICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIFVzZWQgdG8gbWFrZSBpbnN0YW5jZXMgb2YgdGhlIF9tYXQtZm9ybS1maWVsZC1sYWJlbC1mbG9hdGluZyBtaXhpbiBuZWdsaWdpYmx5IGRpZmZlcmVudCxcbi8vIGFuZCBwcmV2ZW50IEdvb2dsZSdzIENTUyBPcHRpbWl6ZXIgZnJvbSBjb2xsYXBzaW5nIHRoZSBkZWNsYXJhdGlvbnMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugc29tZVxuLy8gb2YgdGhlIHNlbGVjdG9ycyBjb250YWluIHBzZXVkby1jbGFzc2VzIG5vdCByZWNvZ25pemVkIGluIGFsbCBicm93c2Vycy4gSWYgYSBicm93c2VyIGVuY291bnRlcnNcbi8vIGFuIHVua25vd24gcHNldWRvLWNsYXNzIGl0IHdpbGwgZGlzY2FyZCB0aGUgZW50aXJlIHJ1bGUgc2V0LlxuJG1hdC1mb3JtLWZpZWxkLWZpbGwtZGVkdXBlOiAwO1xuXG4vLyBBcHBsaWVzIGEgZmxvYXRpbmcgbGFiZWwgYWJvdmUgdGhlIGZvcm0gZmllbGQgY29udHJvbCBpdHNlbGYuXG5AbWl4aW4gX21hdC1mb3JtLWZpZWxkLWZpbGwtbGFiZWwtZmxvYXRpbmcoJGZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCkge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRpbmZpeC1tYXJnaW4tdG9wIC0gJGluZml4LXBhZGRpbmcgKyAkbWF0LWZvcm0tZmllbGQtZmlsbC1kZWR1cGUpXG4gICAgICAgICAgICAgc2NhbGUoJGZvbnQtc2NhbGUpO1xuICB3aWR0aDogMTAwJSAvICRmb250LXNjYWxlICsgJG1hdC1mb3JtLWZpZWxkLWZpbGwtZGVkdXBlO1xuXG4gICRtYXQtZm9ybS1maWVsZC1maWxsLWRlZHVwZTogJG1hdC1mb3JtLWZpZWxkLWZpbGwtZGVkdXBlICsgMC4wMDAwMSAhZ2xvYmFsO1xufVxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtZmlsbC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLy8gVGhlIHVuaXQtbGVzcyBsaW5lLWhlaWdodCBmcm9tIHRoZSBmb250IGNvbmZpZy5cbiAgJGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgaW5wdXQpO1xuICAvLyBUaGUgYW1vdW50IHRvIHNjYWxlIHRoZSBmb250IGZvciB0aGUgZmxvYXRpbmcgbGFiZWwgYW5kIHN1YnNjcmlwdC5cbiAgJHN1YnNjcmlwdC1mb250LXNjYWxlOiAwLjc1O1xuICAvLyBUaGUgcGFkZGluZyBvbiB0b3Agb2YgdGhlIGluZml4LlxuICAkaW5maXgtcGFkZGluZy10b3A6IDAuMjVlbTtcbiAgLy8gVGhlIHBhZGRpbmcgYmVsb3cgdGhlIGluZml4LlxuICAkaW5maXgtcGFkZGluZy1ib3R0b206IDAuNzVlbTtcbiAgLy8gVGhlIG1hcmdpbiBhcHBsaWVkIHRvIHRoZSBmb3JtLWZpZWxkLWluZml4IHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBmbG9hdGluZyBsYWJlbC5cbiAgJGluZml4LW1hcmdpbi10b3A6IDFlbSAqICRsaW5lLWhlaWdodCAqICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcbiAgLy8gVGhlIGFtb3VudCB3ZSBvZmZzZXQgdGhlIGxhYmVsIGZyb20gdGhlIGlucHV0IHRleHQgaW4gdGhlIGZpbGwgYXBwZWFyYW5jZS5cbiAgJGZpbGwtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQ6IC0wLjVlbTtcblxuICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIHtcbiAgICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgcGFkZGluZzogJGluZml4LXBhZGRpbmctdG9wIDAgJGluZml4LXBhZGRpbmctYm90dG9tIDA7XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgIHRvcDogJGluZml4LW1hcmdpbi10b3AgKyAkaW5maXgtcGFkZGluZy10b3A7XG4gICAgICBtYXJnaW4tdG9wOiAkZmlsbC1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldDtcbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCB7XG4gICAgICAmLm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsXG4gICAgICAubWF0LWlucHV0LXNlcnZlcjpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1maWxsLWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmctdG9wICsgJGZpbGwtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQsXG4gICAgICAgICAgICAgICAgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXJ2ZXItc2lkZSByZW5kZXJlZCBtYXRJbnB1dCB3aXRoIGEgbGFiZWwgYXR0cmlidXRlIGJ1dCBsYWJlbCBub3Qgc2hvd25cbiAgICAgIC8vICh1c2VkIGFzIGEgcHVyZSBDU1Mgc3RhbmQtaW4gZm9yIG1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCkuXG4gICAgICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlclxuICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWZpbGwtbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZy10b3AgKyAkZmlsbC1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldCxcbiAgICAgICAgICAgICAgICAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5cbi8vIFRoZW1lIHN0eWxlcyB0aGF0IG9ubHkgYXBwbHkgdG8gdGhlIGxlZ2FjeSBhcHBlYXJhbmNlIG9mIHRoZSBmb3JtLWZpZWxkLlxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtbGVnYWN5LXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuXG4gICRsYWJlbC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gICR1bmRlcmxpbmUtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlciwgaWYoJGlzLWRhcmstdGhlbWUsIDAuNywgMC40MikpO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgIGNvbG9yOiAkbGFiZWwtY29sb3I7XG4gICAgfVxuXG4gICAgLm1hdC1oaW50IHtcbiAgICAgIGNvbG9yOiAkbGFiZWwtY29sb3I7XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yO1xuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSB7XG4gICAgICBAaW5jbHVkZSBtYXQtY29udHJvbC1kaXNhYmxlZC11bmRlcmxpbmUoJHVuZGVybGluZS1jb2xvcik7XG4gICAgfVxuICB9XG59XG5cbi8vIFVzZWQgdG8gbWFrZSBpbnN0YW5jZXMgb2YgdGhlIF9tYXQtZm9ybS1maWVsZC1sYWJlbC1mbG9hdGluZyBtaXhpbiBuZWdsaWdpYmx5IGRpZmZlcmVudCxcbi8vIGFuZCBwcmV2ZW50IEdvb2dsZSdzIENTUyBPcHRpbWl6ZXIgZnJvbSBjb2xsYXBzaW5nIHRoZSBkZWNsYXJhdGlvbnMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugc29tZVxuLy8gb2YgdGhlIHNlbGVjdG9ycyBjb250YWluIHBzZXVkby1jbGFzc2VzIG5vdCByZWNvZ25pemVkIGluIGFsbCBicm93c2Vycy4gSWYgYSBicm93c2VyIGVuY291bnRlcnNcbi8vIGFuIHVua25vd24gcHNldWRvLWNsYXNzIGl0IHdpbGwgZGlzY2FyZCB0aGUgZW50aXJlIHJ1bGUgc2V0LlxuJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGU6IDA7XG5cbi8vIEFwcGxpZXMgYSBmbG9hdGluZyBsYWJlbCBhYm92ZSB0aGUgZm9ybSBmaWVsZCBjb250cm9sIGl0c2VsZi5cbkBtaXhpbiBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nKCRmb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApIHtcbiAgLy8gV2UgdXNlIHBlcnNwZWN0aXZlIHRvIGZpeCB0aGUgdGV4dCBibHVycmluZXNzIGFzIGRlc2NyaWJlZCBoZXJlOlxuICAvLyBodHRwOi8vd3d3LnVzZXJhZ2VudG1hbi5jb20vYmxvZy8yMDE0LzA1LzA0L2ZpeGluZy10eXBvZ3JhcGh5LWluc2lkZS1vZi0yLWQtY3NzLXRyYW5zZm9ybXMvXG4gIC8vIFRoaXMgcmVzdWx0cyBpbiBhIHNtYWxsIGppdHRlciBhZnRlciB0aGUgbGFiZWwgZmxvYXRzIG9uIEZpcmVmb3gsIHdoaWNoIHRoZVxuICAvLyB0cmFuc2xhdGVaIGZpeGVzLlxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRpbmZpeC1tYXJnaW4tdG9wIC0gJGluZml4LXBhZGRpbmcpIHNjYWxlKCRmb250LXNjYWxlKSBwZXJzcGVjdGl2ZSgxMDBweClcbiAgdHJhbnNsYXRlWigwLjAwMXB4ICsgJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGUpO1xuICAvLyBUaGUgdHJpY2tzIGFib3ZlIHVzZWQgdG8gc21vb3RoIG91dCB0aGUgYW5pbWF0aW9uIG9uIGNocm9tZSBhbmQgZmlyZWZveCBhY3R1YWxseSBtYWtlIHRoaW5nc1xuICAvLyB3b3JzZSBvbiBJRSwgc28gd2UgZG9uJ3QgaW5jbHVkZSB0aGVtIGluIHRoZSBJRSB2ZXJzaW9uLlxuICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kaW5maXgtbWFyZ2luLXRvcCAtICRpbmZpeC1wYWRkaW5nICsgJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGUpXG4gICAgICAgICAgICAgICAgICBzY2FsZSgkZm9udC1zY2FsZSk7XG5cbiAgd2lkdGg6IDEwMCUgLyAkZm9udC1zY2FsZSArICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlO1xuXG4gICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlOiAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZSArIDAuMDAwMDEgIWdsb2JhbDtcbn1cblxuLy8gU2FtZSBhcyBtaXhpbiBhYm92ZSwgYnV0IG9taXRzIHRoZSB0cmFuc2xhdGVaIGZvciBwcmludGluZyBwdXJwb3Nlcy5cbkBtaXhpbiBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nLXByaW50KCRmb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApIHtcbiAgLy8gVGhpcyByZXN1bHRzIGluIGEgc21hbGwgaml0dGVyIGFmdGVyIHRoZSBsYWJlbCBmbG9hdHMgb24gRmlyZWZveCwgd2hpY2ggdGhlXG4gIC8vIHRyYW5zbGF0ZVogZml4ZXMuXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtJGluZml4LW1hcmdpbi10b3AgLSAkaW5maXgtcGFkZGluZyArICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlKVxuICAgICAgICAgICAgICAgICAgc2NhbGUoJGZvbnQtc2NhbGUpO1xuICAvLyBUaGUgdHJpY2tzIGFib3ZlIHVzZWQgdG8gc21vb3RoIG91dCB0aGUgYW5pbWF0aW9uIG9uIGNocm9tZSBhbmQgZmlyZWZveCBhY3R1YWxseSBtYWtlIHRoaW5nc1xuICAvLyB3b3JzZSBvbiBJRSwgc28gd2UgZG9uJ3QgaW5jbHVkZSB0aGVtIGluIHRoZSBJRSB2ZXJzaW9uLlxuICAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZTogJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGUgKyAwLjAwMDAxICFnbG9iYWw7XG59XG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1sZWdhY3ktdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC8vIFRoZSB1bml0LWxlc3MgbGluZS1oZWlnaHQgZnJvbSB0aGUgZm9udCBjb25maWcuXG4gICRsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGlucHV0KTtcbiAgLy8gVGhlIGFtb3VudCB0byBzY2FsZSB0aGUgZm9udCBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsIGFuZCBzdWJzY3JpcHQuXG4gICRzdWJzY3JpcHQtZm9udC1zY2FsZTogMC43NTtcbiAgLy8gVGhlIGFtb3VudCBvZiBzcGFjZSBiZXR3ZWVuIHRoZSB0b3Agb2YgdGhlIGxpbmUgYW5kIHRoZSB0b3Agb2YgdGhlIGFjdHVhbCB0ZXh0XG4gIC8vIChhcyBhIGZyYWN0aW9uIG9mIHRoZSBmb250LXNpemUpLlxuICAkbGluZS1zcGFjaW5nOiAoJGxpbmUtaGVpZ2h0IC0gMSkgLyAyO1xuICAvLyBUaGUgcGFkZGluZyBvbiB0aGUgaW5maXguIE1vY2tzIHNob3cgaGFsZiBvZiB0aGUgdGV4dCBzaXplLCBidXQgc2VlbSB0byBtZWFzdXJlIGZyb20gdGhlIGVkZ2VcbiAgLy8gb2YgdGhlIHRleHQgaXRzZWxmLCBub3QgdGhlIGVkZ2Ugb2YgdGhlIGxpbmU7IHRoZXJlZm9yZSB3ZSBzdWJ0cmFjdCBvZmYgdGhlIGxpbmUgc3BhY2luZy5cbiAgJGluZml4LXBhZGRpbmc6IDAuNWVtIC0gJGxpbmUtc3BhY2luZztcbiAgLy8gVGhlIG1hcmdpbiBhcHBsaWVkIHRvIHRoZSBmb3JtLWZpZWxkLWluZml4IHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBmbG9hdGluZyBsYWJlbC5cbiAgJGluZml4LW1hcmdpbi10b3A6IDFlbSAqICRsaW5lLWhlaWdodCAqICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcbiAgLy8gVGhlIHNwYWNlIGJldHdlZW4gdGhlIGJvdHRvbSBvZiB0aGUgLm1hdC1mb3JtLWZpZWxkLWZsZXggYXJlYSBhbmQgdGhlIHN1YnNjcmlwdCB3cmFwcGVyLlxuICAvLyBNb2NrcyBzaG93IGhhbGYgb2YgdGhlIHRleHQgc2l6ZSwgYnV0IHRoaXMgbWFyZ2luIGlzIGFwcGxpZWQgdG8gYW4gZWxlbWVudCB3aXRoIHRoZSBzdWJzY3JpcHRcbiAgLy8gdGV4dCBmb250IHNpemUsIHNvIHdlIG5lZWQgdG8gZGl2aWRlIGJ5IHRoZSBzY2FsZSBmYWN0b3IgdG8gbWFrZSBpdCBoYWxmIG9mIHRoZSBvcmlnaW5hbCB0ZXh0XG4gIC8vIHNpemUuIFdlIGFnYWluIG5lZWQgdG8gc3VidHJhY3Qgb2ZmIHRoZSBsaW5lIHNwYWNpbmcgc2luY2UgdGhlIG1vY2tzIG1lYXN1cmUgdG8gdGhlIGVkZ2Ugb2YgdGhlXG4gIC8vIHRleHQsIG5vdCB0aGUgIGVkZ2Ugb2YgdGhlIGxpbmUuXG4gICRzdWJzY3JpcHQtbWFyZ2luLXRvcDogMC41ZW0gLyAkc3Vic2NyaXB0LWZvbnQtc2NhbGUgLSAoJGxpbmUtc3BhY2luZyAqIDIpO1xuICAvLyBUaGUgcGFkZGluZyBhcHBsaWVkIHRvIHRoZSBmb3JtLWZpZWxkLXdyYXBwZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIHN1YnNjcmlwdCwgc2luY2UgaXQnc1xuICAvLyBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQuIFRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgc3Vic2NyaXB0J3MgbWFyZ2luIGFuZCBsaW5lLWhlaWdodCwgYnV0IHdlXG4gIC8vIG5lZWQgdG8gbXVsdGlwbHkgYnkgdGhlIHN1YnNjcmlwdCBmb250IHNjYWxlIGZhY3RvciBzaW5jZSB0aGUgd3JhcHBlciBoYXMgYSBsYXJnZXIgZm9udCBzaXplLlxuICAkd3JhcHBlci1wYWRkaW5nLWJvdHRvbTogKCRzdWJzY3JpcHQtbWFyZ2luLXRvcCArICRsaW5lLWhlaWdodCkgKiAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IHtcbiAgICAubWF0LWZvcm0tZmllbGQtd3JhcHBlciB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogJHdyYXBwZXItcGFkZGluZy1ib3R0b207XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgIHBhZGRpbmc6ICRpbmZpeC1wYWRkaW5nIDA7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQge1xuICAgICAgJi5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLFxuICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgIH1cblxuICAgICAgLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMCB3aWxsIHJlbHkgb24gQXV0b2ZpbGxNb25pdG9yIGluc3RlYWQuXG4gICAgICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXJ2ZXItc2lkZSByZW5kZXJlZCBtYXRJbnB1dCB3aXRoIGEgbGFiZWwgYXR0cmlidXRlIGJ1dCBsYWJlbCBub3Qgc2hvd25cbiAgICAgIC8vICh1c2VkIGFzIGEgcHVyZSBDU1Mgc3RhbmQtaW4gZm9yIG1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCkuXG4gICAgICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlclxuICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgIHRvcDogJGluZml4LW1hcmdpbi10b3AgKyAkaW5maXgtcGFkZGluZztcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIHtcbiAgICAgIC8vIFdlIHdhbnQgdGhlIHVuZGVybGluZSB0byBzdGFydCBhdCB0aGUgZW5kIG9mIHRoZSBjb250ZW50IGJveCwgbm90IHRoZSBwYWRkaW5nIGJveCxcbiAgICAgIC8vIHNvIHdlIG1vdmUgaXQgdXAgYnkgdGhlIHBhZGRpbmcgYW1vdW50LlxuICAgICAgYm90dG9tOiAkd3JhcHBlci1wYWRkaW5nLWJvdHRvbTtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXIge1xuICAgICAgbWFyZ2luLXRvcDogJHN1YnNjcmlwdC1tYXJnaW4tdG9wO1xuXG4gICAgICAvLyBXZSB3YW50IHRoZSBzdWJzY3JpcHQgdG8gc3RhcnQgYXQgdGhlIGVuZCBvZiB0aGUgY29udGVudCBib3gsIG5vdCB0aGUgcGFkZGluZyBib3gsXG4gICAgICAvLyBzbyB3ZSBtb3ZlIGl0IHVwIGJ5IHRoZSBwYWRkaW5nIGFtb3VudCAoYWRqdXN0ZWQgZm9yIHRoZSBzbWFsbGVyIGZvbnQgc2l6ZSk7XG4gICAgICB0b3A6IGNhbGMoMTAwJSAtICN7JHdyYXBwZXItcGFkZGluZy1ib3R0b20gLyAkc3Vic2NyaXB0LWZvbnQtc2NhbGV9KTtcbiAgICB9XG4gIH1cblxuICAvLyB0cmFuc2xhdGVaIGNhdXNlcyB0aGUgbGFiZWwgdG8gbm90IGFwcGVhciB3aGlsZSBwcmludGluZywgc28gd2Ugb3ZlcnJpZGUgaXQgdG8gbm90XG4gIC8vIGFwcGx5IHRyYW5zbGF0ZVogd2hpbGUgcHJpbnRpbmdcbiAgQG1lZGlhIHByaW50IHtcbiAgICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kge1xuICAgICAgJi5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQge1xuICAgICAgICAmLm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsXG4gICAgICAgIC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nLXByaW50KFxuICAgICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMCB3aWxsIHJlbHkgb24gQXV0b2ZpbGxNb25pdG9yIGluc3RlYWQuXG4gICAgICAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlclxuICAgICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmctcHJpbnQoXG4gICAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXJ2ZXItc2lkZSByZW5kZXJlZCBtYXRJbnB1dCB3aXRoIGEgbGFiZWwgYXR0cmlidXRlIGJ1dCBsYWJlbCBub3Qgc2hvd25cbiAgICAgICAgLy8gKHVzZWQgYXMgYSBwdXJlIENTUyBzdGFuZC1pbiBmb3IgbWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0KS5cbiAgICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJcbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nLXByaW50KFxuICAgICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5cbi8vIFRoZW1lIHN0eWxlcyB0aGF0IG9ubHkgYXBwbHkgdG8gdGhlIG91dGxpbmUgYXBwZWFyYW5jZSBvZiB0aGUgZm9ybS1maWVsZC5cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuXG4gICRsYWJlbC1kaXNhYmxlZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgJG91dGxpbmUtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlciwgaWYoJGlzLWRhcmstdGhlbWUsIDAuMywgMC4xMikpO1xuICAkb3V0bGluZS1jb2xvci1ob3ZlcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyLCBpZigkaXMtZGFyay10aGVtZSwgMSwgMC44NykpO1xuICAkb3V0bGluZS1jb2xvci1wcmltYXJ5OiBtYXQtY29sb3IoJHByaW1hcnkpO1xuICAkb3V0bGluZS1jb2xvci1hY2NlbnQ6IG1hdC1jb2xvcigkYWNjZW50KTtcbiAgJG91dGxpbmUtY29sb3Itd2FybjogbWF0LWNvbG9yKCR3YXJuKTtcbiAgJG91dGxpbmUtY29sb3ItZGlzYWJsZWQ6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlciwgaWYoJGlzLWRhcmstdGhlbWUsIDAuMTUsIDAuMDYpKTtcblxuICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIHtcbiAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gICAgICBjb2xvcjogJG91dGxpbmUtY29sb3I7XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sge1xuICAgICAgY29sb3I6ICRvdXRsaW5lLWNvbG9yLWhvdmVyO1xuICAgIH1cblxuICAgICYubWF0LWZvY3VzZWQge1xuICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sge1xuICAgICAgICBjb2xvcjogJG91dGxpbmUtY29sb3ItcHJpbWFyeTtcbiAgICAgIH1cblxuICAgICAgJi5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIHtcbiAgICAgICAgY29sb3I6ICRvdXRsaW5lLWNvbG9yLWFjY2VudDtcbiAgICAgIH1cblxuICAgICAgJi5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayB7XG4gICAgICAgIGNvbG9yOiAkb3V0bGluZS1jb2xvci13YXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENsYXNzIHJlcGVhdGVkIHNvIHRoYXQgcnVsZSBpcyBzcGVjaWZpYyBlbm91Z2ggdG8gb3ZlcnJpZGUgZm9jdXNlZCBhY2NlbnQgY29sb3IgY2FzZS5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWludmFsaWQubWF0LWZvcm0tZmllbGQtaW52YWxpZCB7XG4gICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayB7XG4gICAgICAgIGNvbG9yOiAkb3V0bGluZS1jb2xvci13YXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQge1xuICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgY29sb3I6ICRsYWJlbC1kaXNhYmxlZC1jb2xvcjtcbiAgICAgIH1cblxuICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICAgICAgICBjb2xvcjogJG91dGxpbmUtY29sb3ItZGlzYWJsZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIFVzZWQgdG8gbWFrZSBpbnN0YW5jZXMgb2YgdGhlIF9tYXQtZm9ybS1maWVsZC1sYWJlbC1mbG9hdGluZyBtaXhpbiBuZWdsaWdpYmx5IGRpZmZlcmVudCxcbi8vIGFuZCBwcmV2ZW50IEdvb2dsZSdzIENTUyBPcHRpbWl6ZXIgZnJvbSBjb2xsYXBzaW5nIHRoZSBkZWNsYXJhdGlvbnMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugc29tZVxuLy8gb2YgdGhlIHNlbGVjdG9ycyBjb250YWluIHBzZXVkby1jbGFzc2VzIG5vdCByZWNvZ25pemVkIGluIGFsbCBicm93c2Vycy4gSWYgYSBicm93c2VyIGVuY291bnRlcnNcbi8vIGFuIHVua25vd24gcHNldWRvLWNsYXNzIGl0IHdpbGwgZGlzY2FyZCB0aGUgZW50aXJlIHJ1bGUgc2V0LlxuJG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZGVkdXBlOiAwO1xuXG4vLyBBcHBsaWVzIGEgZmxvYXRpbmcgbGFiZWwgYWJvdmUgdGhlIGZvcm0gZmllbGQgY29udHJvbCBpdHNlbGYuXG5AbWl4aW4gX21hdC1mb3JtLWZpZWxkLW91dGxpbmUtbGFiZWwtZmxvYXRpbmcoJGZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCkge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRpbmZpeC1tYXJnaW4tdG9wIC0gJGluZml4LXBhZGRpbmcgKyAkbWF0LWZvcm0tZmllbGQtb3V0bGluZS1kZWR1cGUpXG4gIHNjYWxlKCRmb250LXNjYWxlKTtcbiAgd2lkdGg6IDEwMCUgLyAkZm9udC1zY2FsZSArICRtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWRlZHVwZTtcblxuICAkbWF0LWZvcm0tZmllbGQtb3V0bGluZS1kZWR1cGU6ICRtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWRlZHVwZSArIDAuMDAwMDEgIWdsb2JhbDtcbn1cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC8vIFRoZSB1bml0LWxlc3MgbGluZS1oZWlnaHQgZnJvbSB0aGUgZm9udCBjb25maWcuXG4gICRsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGlucHV0KTtcbiAgLy8gVGhlIGFtb3VudCB0byBzY2FsZSB0aGUgZm9udCBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsIGFuZCBzdWJzY3JpcHQuXG4gICRzdWJzY3JpcHQtZm9udC1zY2FsZTogMC43NTtcbiAgLy8gVGhlIHBhZGRpbmcgYWJvdmUgYW5kIGJlbG93IHRoZSBpbmZpeC5cbiAgJGluZml4LXBhZGRpbmc6IDFlbTtcbiAgLy8gVGhlIG1hcmdpbiBhcHBsaWVkIHRvIHRoZSBmb3JtLWZpZWxkLWluZml4IHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBmbG9hdGluZyBsYWJlbC5cbiAgJGluZml4LW1hcmdpbi10b3A6IDFlbSAqICRsaW5lLWhlaWdodCAqICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcbiAgLy8gVGhlIHNwYWNlIGJldHdlZW4gdGhlIGJvdHRvbSBvZiB0aGUgLm1hdC1mb3JtLWZpZWxkLWZsZXggYXJlYSBhbmQgdGhlIHN1YnNjcmlwdCB3cmFwcGVyLlxuICAvLyBNb2NrcyBzaG93IGhhbGYgb2YgdGhlIHRleHQgc2l6ZSwgYnV0IHRoaXMgbWFyZ2luIGlzIGFwcGxpZWQgdG8gYW4gZWxlbWVudCB3aXRoIHRoZSBzdWJzY3JpcHRcbiAgLy8gdGV4dCBmb250IHNpemUsIHNvIHdlIG5lZWQgdG8gZGl2aWRlIGJ5IHRoZSBzY2FsZSBmYWN0b3IgdG8gbWFrZSBpdCBoYWxmIG9mIHRoZSBvcmlnaW5hbCB0ZXh0XG4gIC8vIHNpemUuXG4gICRzdWJzY3JpcHQtbWFyZ2luLXRvcDogMC41ZW0gLyAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG4gIC8vIFRoZSBwYWRkaW5nIGFwcGxpZWQgdG8gdGhlIGZvcm0tZmllbGQtd3JhcHBlciB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgc3Vic2NyaXB0LCBzaW5jZSBpdCdzXG4gIC8vIGFic29sdXRlbHkgcG9zaXRpb25lZC4gVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBzdWJzY3JpcHQncyBtYXJnaW4gYW5kIGxpbmUtaGVpZ2h0LCBidXQgd2VcbiAgLy8gbmVlZCB0byBtdWx0aXBseSBieSB0aGUgc3Vic2NyaXB0IGZvbnQgc2NhbGUgZmFjdG9yIHNpbmNlIHRoZSB3cmFwcGVyIGhhcyBhIGxhcmdlciBmb250IHNpemUuXG4gICR3cmFwcGVyLXBhZGRpbmctYm90dG9tOiAoJHN1YnNjcmlwdC1tYXJnaW4tdG9wICsgJGxpbmUtaGVpZ2h0KSAqICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcbiAgLy8gVGhlIGFtb3VudCB3ZSBvZmZzZXQgdGhlIGxhYmVsIGZyb20gdGhlIGlucHV0IHRleHQgaW4gdGhlIG91dGxpbmUgYXBwZWFyYW5jZS5cbiAgJG91dGxpbmUtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQ6IC0wLjI1ZW07XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgIHBhZGRpbmc6ICRpbmZpeC1wYWRkaW5nIDAgJGluZml4LXBhZGRpbmcgMDtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgdG9wOiAkaW5maXgtbWFyZ2luLXRvcCArICRpbmZpeC1wYWRkaW5nO1xuICAgICAgbWFyZ2luLXRvcDogJG91dGxpbmUtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQ7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQge1xuICAgICAgJi5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLFxuICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtb3V0bGluZS1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nICsgJG91dGxpbmUtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQsXG4gICAgICAgICAgICAgICAgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXJ2ZXItc2lkZSByZW5kZXJlZCBtYXRJbnB1dCB3aXRoIGEgbGFiZWwgYXR0cmlidXRlIGJ1dCBsYWJlbCBub3Qgc2hvd25cbiAgICAgIC8vICh1c2VkIGFzIGEgcHVyZSBDU1Mgc3RhbmQtaW4gZm9yIG1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCkuXG4gICAgICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlclxuICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLW91dGxpbmUtbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZyArICRvdXRsaW5lLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0LFxuICAgICAgICAgICAgICAgICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cblxuLy8gVGhlbWUgc3R5bGVzIHRoYXQgb25seSBhcHBseSB0byB0aGUgc3RhbmRhcmQgYXBwZWFyYW5jZSBvZiB0aGUgZm9ybS1maWVsZC5cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLXN0YW5kYXJkLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuXG4gICR1bmRlcmxpbmUtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlciwgaWYoJGlzLWRhcmstdGhlbWUsIDAuNywgMC40MikpO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIHtcbiAgICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtY29sb3I7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIHtcbiAgICAgIEBpbmNsdWRlIG1hdC1jb250cm9sLWRpc2FibGVkLXVuZGVybGluZSgkdW5kZXJsaW5lLWNvbG9yKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLXN0YW5kYXJkLXR5cG9ncmFwaHkoJGNvbmZpZykge31cblxuXG4vLyBUaGVtZSBzdHlsZXMgdGhhdCBhcHBseSB0byBhbGwgYXBwZWFyYW5jZXMgb2YgdGhlIGZvcm0tZmllbGQuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuXG4gIC8vIExhYmVsIGNvbG9ycy4gUmVxdWlyZWQgaXMgdXNlZCBmb3IgdGhlIGAqYCBzdGFyIHNob3duIGluIHRoZSBsYWJlbC5cbiAgJGxhYmVsLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0LCBpZigkaXMtZGFyay10aGVtZSwgMC43LCAwLjYpKTtcbiAgJGZvY3VzZWQtbGFiZWwtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgdGV4dCk7XG4gICRyZXF1aXJlZC1sYWJlbC1jb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIHRleHQpO1xuXG4gIC8vIFVuZGVybGluZSBjb2xvcnMuXG4gICR1bmRlcmxpbmUtY29sb3ItYmFzZTogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyLCBpZigkaXMtZGFyay10aGVtZSwgMSwgMC44NykpO1xuICAkdW5kZXJsaW5lLWNvbG9yLWFjY2VudDogbWF0LWNvbG9yKCRhY2NlbnQsIHRleHQpO1xuICAkdW5kZXJsaW5lLWNvbG9yLXdhcm46IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gICR1bmRlcmxpbmUtZm9jdXNlZC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCB0ZXh0KTtcblxuICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgIGNvbG9yOiAkbGFiZWwtY29sb3I7XG4gIH1cblxuICAubWF0LWhpbnQge1xuICAgIGNvbG9yOiAkbGFiZWwtY29sb3I7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICBjb2xvcjogJGZvY3VzZWQtbGFiZWwtY29sb3I7XG5cbiAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgY29sb3I6ICR1bmRlcmxpbmUtY29sb3ItYWNjZW50O1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgY29sb3I6ICR1bmRlcmxpbmUtY29sb3Itd2FybjtcbiAgICB9XG4gIH1cblxuICAubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlciB7XG4gICAgY29sb3I6ICRyZXF1aXJlZC1sYWJlbC1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtY29sb3ItYmFzZTtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWZvY3VzZWQtY29sb3I7XG5cbiAgICAgICYubWF0LWFjY2VudCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtY29sb3ItYWNjZW50O1xuICAgICAgfVxuXG4gICAgICAmLm1hdC13YXJuIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1jb2xvci13YXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkge1xuICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXIge1xuICAgICAgY29sb3I6ICR1bmRlcmxpbmUtZm9jdXNlZC1jb2xvcjtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlciB7XG4gICAgICBjb2xvcjogJHVuZGVybGluZS1jb2xvci1hY2NlbnQ7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVyIHtcbiAgICAgIGNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLXdhcm47XG4gICAgfVxuICB9XG5cbiAgLy8gU3R5bGluZyBmb3IgdGhlIGVycm9yIHN0YXRlIG9mIHRoZSBmb3JtIGZpZWxkLiBOb3RlIHRoYXQgd2hpbGUgdGhlIHNhbWUgY2FuIGJlXG4gIC8vIGFjaGlldmVkIHdpdGggdGhlIG5nLSogY2xhc3Nlcywgd2UgdXNlIHRoaXMgYXBwcm9hY2ggaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgdGhlIHNhbWVcbiAgLy8gbG9naWMgaXMgdXNlZCB0byBzdHlsZSB0aGUgZXJyb3Igc3RhdGUgYW5kIHRvIHNob3cgdGhlIGVycm9yIG1lc3NhZ2VzLlxuICAubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgIGNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLXdhcm47XG5cbiAgICAgICYubWF0LWFjY2VudCxcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXIge1xuICAgICAgICBjb2xvcjogJHVuZGVybGluZS1jb2xvci13YXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsXG4gICAgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtYWNjZW50IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtY29sb3Itd2FybjtcbiAgICB9XG4gIH1cblxuICAubWF0LWVycm9yIHtcbiAgICBjb2xvcjogJHVuZGVybGluZS1jb2xvci13YXJuO1xuICB9XG5cbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtbGVnYWN5LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLXN0YW5kYXJkLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLWZpbGwtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGVtZSgkdGhlbWUpO1xufVxuXG4vLyBVc2VkIHRvIG1ha2UgaW5zdGFuY2VzIG9mIHRoZSBfbWF0LWZvcm0tZmllbGQtbGFiZWwtZmxvYXRpbmcgbWl4aW4gbmVnbGlnaWJseSBkaWZmZXJlbnQsXG4vLyBhbmQgcHJldmVudCBHb29nbGUncyBDU1MgT3B0aW1pemVyIGZyb20gY29sbGFwc2luZyB0aGUgZGVjbGFyYXRpb25zLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHNvbWVcbi8vIG9mIHRoZSBzZWxlY3RvcnMgY29udGFpbiBwc2V1ZG8tY2xhc3NlcyBub3QgcmVjb2duaXplZCBpbiBhbGwgYnJvd3NlcnMuIElmIGEgYnJvd3NlciBlbmNvdW50ZXJzXG4vLyBhbiB1bmtub3duIHBzZXVkby1jbGFzcyBpdCB3aWxsIGRpc2NhcmQgdGhlIGVudGlyZSBydWxlIHNldC5cbiRtYXQtZm9ybS1maWVsZC1kZWR1cGU6IDA7XG5cbi8vIEFwcGxpZXMgYSBmbG9hdGluZyBsYWJlbCBhYm92ZSB0aGUgZm9ybSBmaWVsZCBjb250cm9sIGl0c2VsZi5cbkBtaXhpbiBfbWF0LWZvcm0tZmllbGQtbGFiZWwtZmxvYXRpbmcoJGZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCkge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRpbmZpeC1tYXJnaW4tdG9wIC0gJGluZml4LXBhZGRpbmcgKyAkbWF0LWZvcm0tZmllbGQtZGVkdXBlKVxuICAgICAgICAgICAgIHNjYWxlKCRmb250LXNjYWxlKTtcbiAgd2lkdGg6IDEwMCUgLyAkZm9udC1zY2FsZSArICRtYXQtZm9ybS1maWVsZC1kZWR1cGU7XG5cbiAgJG1hdC1mb3JtLWZpZWxkLWRlZHVwZTogJG1hdC1mb3JtLWZpZWxkLWRlZHVwZSArIDAuMDAwMDEgIWdsb2JhbDtcbn1cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAvLyBUaGUgdW5pdC1sZXNzIGxpbmUtaGVpZ2h0IGZyb20gdGhlIGZvbnQgY29uZmlnLlxuICAkbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBpbnB1dCk7XG5cbiAgLy8gVGhlIGFtb3VudCB0byBzY2FsZSB0aGUgZm9udCBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsIGFuZCBzdWJzY3JpcHQuXG4gICRzdWJzY3JpcHQtZm9udC1zY2FsZTogMC43NTtcbiAgLy8gVGhlIGFtb3VudCB0byBzY2FsZSB0aGUgZm9udCBmb3IgdGhlIHByZWZpeCBhbmQgc3VmZml4IGljb25zLlxuICAkcHJlZml4LXN1ZmZpeC1pY29uLWZvbnQtc2NhbGU6IDEuNTtcblxuICAvLyBUaGUgcGFkZGluZyBvbiB0aGUgaW5maXguIE1vY2tzIHNob3cgaGFsZiBvZiB0aGUgdGV4dCBzaXplLlxuICAkaW5maXgtcGFkZGluZzogMC41ZW07XG4gIC8vIFRoZSBtYXJnaW4gYXBwbGllZCB0byB0aGUgZm9ybS1maWVsZC1pbmZpeCB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgZmxvYXRpbmcgbGFiZWwuXG4gICRpbmZpeC1tYXJnaW4tdG9wOiAxZW0gKiAkbGluZS1oZWlnaHQgKiAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG4gIC8vIEZvbnQgc2l6ZSB0byB1c2UgZm9yIHRoZSBsYWJlbCBhbmQgc3Vic2NyaXB0IHRleHQuXG4gICRzdWJzY3JpcHQtZm9udC1zaXplOiAkc3Vic2NyaXB0LWZvbnQtc2NhbGUgKiAxMDAlO1xuICAvLyBGb250IHNpemUgdG8gdXNlIGZvciB0aGUgZm9yIHRoZSBwcmVmaXggYW5kIHN1ZmZpeCBpY29ucy5cbiAgJHByZWZpeC1zdWZmaXgtaWNvbi1mb250LXNpemU6ICRwcmVmaXgtc3VmZml4LWljb24tZm9udC1zY2FsZSAqIDEwMCU7XG4gIC8vIFRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBib3R0b20gb2YgdGhlIC5tYXQtZm9ybS1maWVsZC1mbGV4IGFyZWEgYW5kIHRoZSBzdWJzY3JpcHQgd3JhcHBlci5cbiAgLy8gTW9ja3Mgc2hvdyBoYWxmIG9mIHRoZSB0ZXh0IHNpemUsIGJ1dCB0aGlzIG1hcmdpbiBpcyBhcHBsaWVkIHRvIGFuIGVsZW1lbnQgd2l0aCB0aGUgc3Vic2NyaXB0XG4gIC8vIHRleHQgZm9udCBzaXplLCBzbyB3ZSBuZWVkIHRvIGRpdmlkZSBieSB0aGUgc2NhbGUgZmFjdG9yIHRvIG1ha2UgaXQgaGFsZiBvZiB0aGUgb3JpZ2luYWwgdGV4dFxuICAvLyBzaXplLlxuICAkc3Vic2NyaXB0LW1hcmdpbi10b3A6IDAuNWVtIC8gJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuICAvLyBUaGUgcGFkZGluZyBhcHBsaWVkIHRvIHRoZSBmb3JtLWZpZWxkLXdyYXBwZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIHN1YnNjcmlwdCwgc2luY2UgaXQnc1xuICAvLyBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQuIFRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgc3Vic2NyaXB0J3MgbWFyZ2luIGFuZCBsaW5lLWhlaWdodCwgYnV0IHdlXG4gIC8vIG5lZWQgdG8gbXVsdGlwbHkgYnkgdGhlIHN1YnNjcmlwdCBmb250IHNjYWxlIGZhY3RvciBzaW5jZSB0aGUgd3JhcHBlciBoYXMgYSBsYXJnZXIgZm9udCBzaXplLlxuICAkd3JhcHBlci1wYWRkaW5nLWJvdHRvbTogKCRzdWJzY3JpcHQtbWFyZ2luLXRvcCArICRsaW5lLWhlaWdodCkgKiAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG5cbiAgLm1hdC1mb3JtLWZpZWxkIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgaW5wdXQpO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICAgIHBhZGRpbmctYm90dG9tOiAkd3JhcHBlci1wYWRkaW5nLWJvdHRvbTtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1wcmVmaXgsXG4gIC5tYXQtZm9ybS1maWVsZC1zdWZmaXgge1xuICAgIC8vIEFsbG93IGljb25zIGluIGEgcHJlZml4IG9yIHN1ZmZpeCB0byBhZGFwdCB0byB0aGUgY29ycmVjdCBzaXplLlxuICAgIC5tYXQtaWNvbiB7XG4gICAgICBmb250LXNpemU6ICRwcmVmaXgtc3VmZml4LWljb24tZm9udC1zaXplO1xuICAgICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgICB9XG5cbiAgICAvLyBBbGxvdyBpY29uIGJ1dHRvbnMgaW4gYSBwcmVmaXggb3Igc3VmZml4IHRvIGFkYXB0IHRvIHRoZSBjb3JyZWN0IHNpemUuXG4gICAgLm1hdC1pY29uLWJ1dHRvbiB7XG4gICAgICBoZWlnaHQ6ICRwcmVmaXgtc3VmZml4LWljb24tZm9udC1zY2FsZSAqIDFlbTtcbiAgICAgIHdpZHRoOiAkcHJlZml4LXN1ZmZpeC1pY29uLWZvbnQtc2NhbGUgKiAxZW07XG5cbiAgICAgIC5tYXQtaWNvbiB7XG4gICAgICAgIGhlaWdodDogJGxpbmUtaGVpZ2h0ICogMWVtO1xuICAgICAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgcGFkZGluZzogJGluZml4LXBhZGRpbmcgMDtcbiAgICAvLyBUaHJvd3Mgb2ZmIHRoZSBiYXNlbGluZSBpZiB3ZSBkbyBpdCBhcyBhIHJlYWwgbWFyZ2luLCBzbyB3ZSBkbyBpdCBhcyBhIGJvcmRlciBpbnN0ZWFkLlxuICAgIGJvcmRlci10b3A6ICRpbmZpeC1tYXJnaW4tdG9wIHNvbGlkIHRyYW5zcGFyZW50O1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCB7XG4gICAgJi5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLFxuICAgIC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgIH1cblxuICAgIC8vIFNlcnZlci1zaWRlIHJlbmRlcmVkIG1hdElucHV0IHdpdGggYSBsYWJlbCBhdHRyaWJ1dGUgYnV0IGxhYmVsIG5vdCBzaG93blxuICAgIC8vICh1c2VkIGFzIGEgcHVyZSBDU1Mgc3RhbmQtaW4gZm9yIG1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCkuXG4gICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJcbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIHtcbiAgICB0b3A6IC0kaW5maXgtbWFyZ2luLXRvcDtcbiAgICBwYWRkaW5nLXRvcDogJGluZml4LW1hcmdpbi10b3A7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgIHRvcDogJGluZml4LW1hcmdpbi10b3AgKyAkaW5maXgtcGFkZGluZztcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUge1xuICAgIC8vIFdlIHdhbnQgdGhlIHVuZGVybGluZSB0byBzdGFydCBhdCB0aGUgZW5kIG9mIHRoZSBjb250ZW50IGJveCwgbm90IHRoZSBwYWRkaW5nIGJveCxcbiAgICAvLyBzbyB3ZSBtb3ZlIGl0IHVwIGJ5IHRoZSBwYWRkaW5nIGFtb3VudC5cbiAgICBib3R0b206ICR3cmFwcGVyLXBhZGRpbmctYm90dG9tO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyIHtcbiAgICBmb250LXNpemU6ICRzdWJzY3JpcHQtZm9udC1zaXplO1xuICAgIG1hcmdpbi10b3A6ICRzdWJzY3JpcHQtbWFyZ2luLXRvcDtcblxuICAgIC8vIFdlIHdhbnQgdGhlIHN1YnNjcmlwdCB0byBzdGFydCBhdCB0aGUgZW5kIG9mIHRoZSBjb250ZW50IGJveCwgbm90IHRoZSBwYWRkaW5nIGJveCxcbiAgICAvLyBzbyB3ZSBtb3ZlIGl0IHVwIGJ5IHRoZSBwYWRkaW5nIGFtb3VudCAoYWRqdXN0ZWQgZm9yIHRoZSBzbWFsbGVyIGZvbnQgc2l6ZSk7XG4gICAgdG9wOiBjYWxjKDEwMCUgLSAjeyR3cmFwcGVyLXBhZGRpbmctYm90dG9tIC8gJHN1YnNjcmlwdC1mb250LXNjYWxlfSk7XG4gIH1cblxuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1sZWdhY3ktdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtc3RhbmRhcmQtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtZmlsbC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1vdXRsaW5lLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG59XG5cblxuXG5cblxuQG1peGluIG1hdC10cmVlLXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtdHJlZSB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnY2FyZCcpO1xuICB9XG5cbiAgLm1hdC10cmVlLW5vZGUsXG4gIC5tYXQtbmVzdGVkLXRyZWUtbm9kZSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC10cmVlLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXRyZWUge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LXRyZWUtbm9kZSxcbiAgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlIHtcbiAgICBmb250LXdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMSk7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSk7XG4gIH1cbn1cblxuXG5cbi8vIEluY2x1ZGVzIGFsbCBvZiB0aGUgdHlwb2dyYXBoaWMgc3R5bGVzLlxuQG1peGluIGFuZ3VsYXItbWF0ZXJpYWwtdHlwb2dyYXBoeSgkY29uZmlnOiBudWxsKSB7XG4gIEBpZiAkY29uZmlnID09IG51bGwge1xuICAgICRjb25maWc6IG1hdC10eXBvZ3JhcGh5LWNvbmZpZygpO1xuICB9XG5cbiAgQGluY2x1ZGUgbWF0LWJhZGdlLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1iYXNlLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1hdXRvY29tcGxldGUtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWJvdHRvbS1zaGVldC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtYnV0dG9uLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1idXR0b24tdG9nZ2xlLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1jYXJkLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1jaGVja2JveC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtY2hpcHMtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXRhYmxlLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1kYXRlcGlja2VyLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1kaWFsb2ctdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWV4cGFuc2lvbi1wYW5lbC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZ3JpZC1saXN0LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1pY29uLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1pbnB1dC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtbWVudS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtcGFnaW5hdG9yLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1wcm9ncmVzcy1iYXItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXByb2dyZXNzLXNwaW5uZXItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXJhZGlvLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1zZWxlY3QtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXNpZGVuYXYtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXNsaWRlLXRvZ2dsZS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtc2xpZGVyLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1zdGVwcGVyLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1zb3J0LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC10YWJzLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC10b29sYmFyLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC10b29sdGlwLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1saXN0LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1vcHRpb24tdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LW9wdGdyb3VwLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1zbmFjay1iYXItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXRyZWUtdHlwb2dyYXBoeSgkY29uZmlnKTtcbn1cblxuXG4vLyBNaXhpbiB0aGF0IHJlbmRlcnMgYWxsIG9mIHRoZSBjb3JlIHN0eWxlcyB0aGF0IGFyZSBub3QgdGhlbWUtZGVwZW5kZW50LlxuQG1peGluIG1hdC1jb3JlKCR0eXBvZ3JhcGh5LWNvbmZpZzogbnVsbCkge1xuICBAaW5jbHVkZSBhbmd1bGFyLW1hdGVyaWFsLXR5cG9ncmFwaHkoJHR5cG9ncmFwaHktY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXJpcHBsZSgpO1xuICBAaW5jbHVkZSBjZGstYTExeSgpO1xuICBAaW5jbHVkZSBjZGstb3ZlcmxheSgpO1xuICBAaW5jbHVkZSBjZGstdGV4dC1maWVsZCgpO1xufVxuXG4vLyBNaXhpbiB0aGF0IHJlbmRlcnMgYWxsIG9mIHRoZSBjb3JlIHN0eWxlcyB0aGF0IGRlcGVuZCBvbiB0aGUgdGhlbWUuXG5AbWl4aW4gbWF0LWNvcmUtdGhlbWUoJHRoZW1lKSB7XG4gIEBpbmNsdWRlIG1hdC1yaXBwbGUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LW9wdGlvbi10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtb3B0Z3JvdXAtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXBzZXVkby1jaGVja2JveC10aGVtZSgkdGhlbWUpO1xuXG4gIC8vIFByb3ZpZGVzIGV4dGVybmFsIENTUyBjbGFzc2VzIGZvciBlYWNoIGVsZXZhdGlvbiB2YWx1ZS4gRWFjaCBDU1MgY2xhc3MgaXMgZm9ybWF0dGVkIGFzXG4gIC8vIGBtYXQtZWxldmF0aW9uLXokelZhbHVlYCB3aGVyZSBgJHpWYWx1ZWAgY29ycmVzcG9uZHMgdG8gdGhlIHotc3BhY2UgdG8gd2hpY2ggdGhlIGVsZW1lbnQgaXNcbiAgLy8gZWxldmF0ZWQuXG4gIEBmb3IgJHpWYWx1ZSBmcm9tIDAgdGhyb3VnaCAyNCB7XG4gICAgLiN7JF9tYXQtZWxldmF0aW9uLXByZWZpeH0jeyR6VmFsdWV9IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKCR6VmFsdWUsICR0aGVtZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gV3JhcHBlciBlbGVtZW50IHRoYXQgcHJvdmlkZXMgdGhlIHRoZW1lIGJhY2tncm91bmQgd2hlbiB0aGUgdXNlcidzIGNvbnRlbnQgaXNuJ3RcbiAgLy8gaW5zaWRlIG9mIGEgYG1hdC1zaWRlbmF2LWNvbnRhaW5lcmAuIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIGV4Y2x1ZGUgdGhlIGFtcGVyc2FuZFxuICAvLyBzZWxlY3RvciBpbiBjYXNlIHRoZSBtaXhpbiBpcyBpbmNsdWRlZCBhdCB0aGUgdG9wIGxldmVsLlxuICAubWF0LWFwcC1iYWNrZ3JvdW5kI3tpZigmLCAnLCAmLm1hdC1hcHAtYmFja2dyb3VuZCcsICcnKX0ge1xuICAgICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgYmFja2dyb3VuZCk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cblxuICAvLyBNYXJrZXIgdGhhdCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB1c2VyIGhhcyBhZGRlZCBhIHRoZW1lIHRvIHRoZWlyIHBhZ2UuXG4gIEBhdC1yb290IHtcbiAgICAubWF0LXRoZW1lLWxvYWRlZC1tYXJrZXIge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuQG1peGluIG1hdC1kaXZpZGVyLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtZGl2aWRlciB7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxuXG4gIC5tYXQtZGl2aWRlci12ZXJ0aWNhbCB7XG4gICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG59XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8vIENyZWF0ZSBhIHRoZW1lLlxuQG1peGluIGFuZ3VsYXItbWF0ZXJpYWwtdGhlbWUoJHRoZW1lKSB7XG4gIEBpbmNsdWRlIG1hdC1jb3JlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1hdXRvY29tcGxldGUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWJhZGdlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1ib3R0b20tc2hlZXQtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWJ1dHRvbi10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtYnV0dG9uLXRvZ2dsZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtY2FyZC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtY2hlY2tib3gtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWNoaXBzLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC10YWJsZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZGF0ZXBpY2tlci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZGlhbG9nLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1kaXZpZGVyLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1leHBhbnNpb24tcGFuZWwtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWdyaWQtbGlzdC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtaWNvbi10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtaW5wdXQtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWxpc3QtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LW1lbnUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXBhZ2luYXRvci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtcHJvZ3Jlc3MtYmFyLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1wcm9ncmVzcy1zcGlubmVyLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1yYWRpby10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtc2VsZWN0LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1zaWRlbmF2LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1zbGlkZS10b2dnbGUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXNsaWRlci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtc3RlcHBlci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtc29ydC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtdGFicy10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtdG9vbGJhci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtdG9vbHRpcC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtdHJlZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtc25hY2stYmFyLXRoZW1lKCR0aGVtZSk7XG59XG4iLCJAaW1wb3J0IFwibGlicy91aS9zcmMvbGliL21peGluc1wiO1xuQGltcG9ydCBcIn5AYW5ndWxhci9tYXRlcmlhbC90aGVtaW5nXCI7XG5oMyB7XG4gICAgY29sb3I6ICMwMDAwMDA7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgcGFkZGluZzogMjBweCAwIDAgMDtcbiAgICBtYXJnaW46IDA7XG4gICAgc3BhbiB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiAxMDA7XG4gICAgfVxufVxuLnJlc3VsdC1jb250YWluZXIge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgQGluY2x1ZGUgbWF0LWVsZXZhdGlvbigwKTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgLmNhcmQ6aG92ZXJ7XG4gICAgICAgIGJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4yKSAwcHggMnB4IDIxcHg7XG4gICAgICAgIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4zcyBlYXNlLWluLW91dDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIH1cbiAgICAucmVzdWx0LXJvdyB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBjbGVhcjogYm90aDtcbiAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICAgICAgXG4gICAgICAgIGltZy5yZWN1cnJpbmctaW5mby1pY29uIHtcbiAgICAgICAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNHB4O1xuICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgICAgfVxuXG4gICAgICAgICYuZGF0ZXRpbWUge1xuICAgICAgICAgICAgcGFkZGluZzogMTVweCAwO1xuICAgICAgICAgICAgY29sb3I6ICMwMDA7XG4gICAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICAuc3RhdHVzLWJsb2NrIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLnN0YXR1cy1ibG9jayA+IGRpdntcbiAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICAgICAgICAgICAgICBzcGFue1xuICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gICAgIFxuICAgICAgICB9XG5cbiAgICAgICAgJi5zdGF0dXMge1xuICAgICAgICAgICAgcGFkZGluZzogMTZweCAxOHB4O1xuICAgICAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgICAgICAgICAgICAgLm1lc3NhZ2Uge1xuICAgICAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICAgICAgICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IHN1YjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNXB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC50aW1lIHtcbiAgICAgICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgICAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcCB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiA4OHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYucGFuZWwge1xuICAgICAgICAgICAgcGFkZGluZzogMjBweCAxOHB4O1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgICAgICBib3gtc2hhZG93OiAwcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgICAgICAgfVxuXG4gICAgICAgICYudGl0bGUge1xuICAgICAgICAgICAgY29sb3I6ICMwMDA7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMjZweDtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxMjBweDtcbiAgICAgICAgICAgIC50eXBlLXRleHQge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxNXB4O1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwIDEwcHg7XG4gICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgICAgICAgICAgICAgIG1heC1oZWlnaHQ6IDI0cHg7XG4gICAgICAgICAgICAgICAgJi5pbnRlcm5hbCB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMzNCNkY7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJi5leHRlcm5hbCB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGQUEwODI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICYucGFydG5lciB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMzOUJERjM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICYubXVsdGlyb29te1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZEMDQ4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICAgICAgICAgIHRvcDogLTZweDtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRDBEMEQwO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDZweCAxMHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMjRweDtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICAgICAgfSAgICBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMTBweDtcbiAgICAgICAgICAgICAgICAudHlwZS10aXRsZXtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDc1cHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYudGV4dCB7XG4gICAgICAgICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgICAgICAgIHBhZGRpbmc6IDE4cHggMTBweCAwIDA7XG4gICAgICAgICAgICBzcGFuIHtcbiAgICAgICAgICAgICAgICBpbWcge1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDNweCAxMnB4O1xuICAgICAgICAgICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICM5Nzk3OTc7XG4gICAgICAgICAgICAgICAgJjpudGgtY2hpbGQoMSkge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1yaWdodDogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgICAgICBjbGVhcjogYm90aDtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAzcHggMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAubW9iaWxlLW9ubHktY3RhIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB6LWluZGV4OiAyO1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTsgICAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLnJpZ2h0LWFycm93IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgcmlnaHQ6IDEwcHg7XG4gICAgICAgICAgICAgICAgdG9wOiA3MnB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5cblxuLnJpZ2h0LWFycm93IHtcbiAgICB3aWR0aDogMzBweCAhaW1wb3J0YW50O1xuICAgIGhlaWdodDogMzBweCAhaW1wb3J0YW50O1xuICAgIEBpbmNsdWRlIG1jay1pY29uKCRpY29uLW1lZGl1bSwgJ2Fycm93LXJpZ2h0LnN2ZycpO1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oJGljb24teGxhcmdlLCAnYXJyb3ctcmlnaHQtbGFyZ2Uuc3ZnJyk7XG4gICAgfVxufVxuXG4uYm9va2luZy10ei1kaXNwbGF5IHtcbiAgICBmb250LXNpemU6IDEuMjVyZW07XG59XG5cbi5sb2NhbC10ei1kaXNwbGF5IHtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgY29sb3I6ICM3NTc1NzU7XG59XG4iXX0= */"], changeDetection: 0 }); + } }, directives: [i2.NgIf, i2.NgClass, i3.NgxSkeletonLoaderComponent, i4.MatRipple, i5.TooltipDirective], styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\nh3[_ngcontent-%COMP%] {\n color: #000000;\n font-family: \"McKinsey Sans\";\n font-size: 24px;\n font-weight: 500;\n padding: 20px 0 0 0;\n margin: 0;\n}\nh3[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-weight: 100;\n}\n.result-container[_ngcontent-%COMP%] {\n width: 100%;\n padding: 0;\n display: block;\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n position: relative;\n}\n.result-container[_ngcontent-%COMP%] .card[_ngcontent-%COMP%]:hover {\n box-shadow: rgba(0, 0, 0, 0.2) 0px 2px 21px;\n transition: box-shadow 0.3s ease-in-out;\n cursor: pointer;\n}\n.result-container[_ngcontent-%COMP%] .result-row[_ngcontent-%COMP%] {\n width: 100%;\n padding: 0;\n position: relative;\n display: block;\n clear: both;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n font-weight: normal;\n font-size: 16px;\n line-height: 20px;\n}\n.result-container[_ngcontent-%COMP%] .result-row[_ngcontent-%COMP%] img.recurring-info-icon[_ngcontent-%COMP%] {\n width: 20px;\n margin-right: 14px;\n vertical-align: middle;\n}\n.result-container[_ngcontent-%COMP%] .result-row.datetime[_ngcontent-%COMP%] {\n padding: 15px 0;\n color: #000;\n font-size: 18px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.datetime[_ngcontent-%COMP%] .status-block[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n.result-container[_ngcontent-%COMP%] .result-row.datetime[_ngcontent-%COMP%] .status-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n}\n.result-container[_ngcontent-%COMP%] .result-row.datetime[_ngcontent-%COMP%] .status-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n.result-container[_ngcontent-%COMP%] .result-row.status[_ngcontent-%COMP%] {\n padding: 16px 18px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n position: relative;\n font-size: 16px;\n line-height: 24px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .message[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n}\n.result-container[_ngcontent-%COMP%] .result-row.status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .message[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 20px;\n vertical-align: sub;\n margin-right: 5px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .time[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n position: absolute;\n top: 0;\n right: 0;\n}\n.result-container[_ngcontent-%COMP%] .result-row.status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n min-width: 88px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.panel[_ngcontent-%COMP%] {\n padding: 20px 18px;\n background-color: white;\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2);\n}\n.result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] {\n color: #000;\n font-weight: 500;\n font-size: 18px;\n width: 100%;\n position: relative;\n line-height: 26px;\n display: flex;\n padding-right: 120px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-text[_ngcontent-%COMP%] {\n margin-left: 15px;\n border-radius: 4px;\n padding: 0 10px;\n font-family: \"McKinsey Sans\";\n font-size: 14px;\n color: #333333;\n max-height: 24px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-text.internal[_ngcontent-%COMP%] {\n background-color: #033B6F;\n color: white;\n}\n.result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-text.external[_ngcontent-%COMP%] {\n background-color: #FAA082;\n}\n.result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-text.partner[_ngcontent-%COMP%] {\n background-color: #39BDF3;\n}\n.result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-text.multiroom[_ngcontent-%COMP%] {\n background-color: #FFD048;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-text[_ngcontent-%COMP%] {\n position: absolute;\n right: 0;\n top: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-text[_ngcontent-%COMP%] {\n position: absolute;\n right: 0;\n top: 0;\n }\n}\n.result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n position: absolute;\n right: 0;\n top: -6px;\n display: block;\n color: #333333;\n border: 1px solid #D0D0D0;\n background-color: transparent;\n padding: 6px 10px;\n font-size: 16px;\n line-height: 24px;\n cursor: pointer;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] {\n padding-right: 10px;\n }\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-title[_ngcontent-%COMP%] {\n width: calc(100% - 75px);\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] {\n padding-right: 10px;\n }\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-title[_ngcontent-%COMP%] {\n width: calc(100% - 75px);\n }\n}\n.result-container[_ngcontent-%COMP%] .result-row.text[_ngcontent-%COMP%] {\n color: #333333;\n padding: 18px 10px 0 0;\n}\n.result-container[_ngcontent-%COMP%] .result-row.text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n display: inline-block;\n padding: 3px 12px;\n border-right: 1px solid #979797;\n}\n.result-container[_ngcontent-%COMP%] .result-row.text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n margin-right: 5px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.text[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:nth-child(1) {\n padding-left: 0;\n}\n.result-container[_ngcontent-%COMP%] .result-row.text[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:last-child {\n border-right: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .result-container[_ngcontent-%COMP%] .result-row.text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: block;\n clear: both;\n border: 0;\n padding: 3px 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .result-container[_ngcontent-%COMP%] .result-row.text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: block;\n clear: both;\n border: 0;\n padding: 3px 0;\n }\n}\n.result-container[_ngcontent-%COMP%] .result-row[_ngcontent-%COMP%] .mobile-only-cta[_ngcontent-%COMP%] {\n display: none;\n z-index: 2;\n position: absolute;\n right: 0;\n top: 0;\n width: 100%;\n height: 100%;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .result-container[_ngcontent-%COMP%] .result-row[_ngcontent-%COMP%] .mobile-only-cta[_ngcontent-%COMP%] {\n display: block;\n cursor: pointer;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .result-container[_ngcontent-%COMP%] .result-row[_ngcontent-%COMP%] .mobile-only-cta[_ngcontent-%COMP%] {\n display: block;\n cursor: pointer;\n }\n}\n.result-container[_ngcontent-%COMP%] .result-row[_ngcontent-%COMP%] .mobile-only-cta[_ngcontent-%COMP%] .right-arrow[_ngcontent-%COMP%] {\n position: absolute;\n right: 10px;\n top: 72px;\n}\n.right-arrow[_ngcontent-%COMP%] {\n width: 30px !important;\n height: 30px !important;\n width: 24px;\n height: 24px;\n background-image: url('arrow-right.svg');\n background-size: contain;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .right-arrow[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('arrow-right-large.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .right-arrow[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('arrow-right-large.svg');\n background-size: contain;\n }\n}\n.booking-tz-display[_ngcontent-%COMP%] {\n font-size: 1.25rem;\n}\n.local-tz-display[_ngcontent-%COMP%] {\n font-size: 1rem;\n color: #757575;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLXJlc3VsdC1pdGVtL2Jvb2tpbmctcmVzdWx0LWl0ZW0uY29tcG9uZW50LnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9ub2RlX21vZHVsZXMvQGFuZ3VsYXIvbWF0ZXJpYWwvX3RoZW1pbmcuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2FwcHMvc3RhZmYvc3JjL2FwcC9ib29raW5nL2Jvb2tpbmctcmVzdWx0LWl0ZW0vYm9va2luZy1yZXN1bHQtaXRlbS5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNpbENBLGtDQUFBO0FBdWlEQSwyQ0FBQTtBQXdDQSxxQkFBQTtBQ2wrRkE7RUFDSSxjQUFBO0VBQ0EsNEJGa0ZpQjtFRWpGakIsZUFBQTtFQUNBLGdCQUFBO0VBQ0EsbUJBQUE7RUFDQSxTQUFBO0FIb0JKO0FHbkJJO0VBQ0ksZ0JBQUE7QUhxQlI7QUdsQkE7RUFDSSxXQUFBO0VBQ0EsVUFBQTtFQUNBLGNBQUE7RUR5ZEYsd0hBQUE7RUN2ZEUsa0JBQUE7QUhxQko7QUdwQkk7RUFDSSwyQ0FBQTtFQUNBLHVDQUFBO0VBQ0EsZUFBQTtBSHNCUjtBR3BCSTtFQUNJLFdBQUE7RUFDQSxVQUFB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QUFBO0VBQ0EsdUJBQUE7RUZnSUEsV0YzT1U7RUU0T1YsWUY1T1U7RUU2T1Ysd0NBQUE7RUFDQSx3QkFBQTtBRDVFSjtBQ25RWTtFRTBNWjtJRmtJSSxXRnpPVTtJRTBPVixZRjFPVTtJRTJPViw4Q0FBQTtJQUNBLHdCQUFBO0VEckVGO0FBQ0Y7QUMzUVk7RUUwTVo7SUZrSUksV0Z6T1U7SUUwT1YsWUYxT1U7SUUyT1YsOENBQUE7SUFDQSx3QkFBQTtFRDdERjtBQUNGO0FHaEVBO0VBQ0ksa0JBQUE7QUhtRUo7QUdoRUE7RUFDSSxlQUFBO0VBQ0EsY0FBQTtBSG1FSiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLXJlc3VsdC1pdGVtL2Jvb2tpbmctcmVzdWx0LWl0ZW0uY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIkcHJpbWFyeTogIzFGNDBFNjtcbiRmb3JtLWxhYmVsOiAjMDUxQzJDO1xuJHNlY29uZGFyeS1sYWJlbDogIzc2NzY3NjtcbiRib3JkZXI6ICNCM0IzQjM7XG4kYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDogI0QwRDBEMDtcbiRjaGlwLWNvbG9yOiAjMzMzMzMzO1xuJHBsYWNlaG9sZGVyLWNvbG9yOiAjN0Y3RjdGO1xuJGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4kcGFnZS1iYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuJHNlbGVjdGVkLW9wdGlvbjogI0U2RTZFNjtcbiRjb2xvci1icmFuZC15ZWxsb3c6ICNmZmQwNDg7XG4kbGlnaHQteWVsbG93OiAjZmZmM2NlO1xuJGNvYWNobWFyay10ZXh0OiAjNmY0ZDAwO1xuJGVycm9yLWNvbG9yOiAjRTEyRTQwO1xuJG5vLWZpbHRlcnMtY29sb3I6ICNCQ0JDQkM7XG4kcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I6ICNGNEY0RjQ7XG4kcHJpbWFyeS1oaWdobGlnaHQ6ICMyMjUxRkY7XG4kc2Nyb2xsYmFyLWNvbG9yOiAjNzU3NTc1O1xuXG4kYXZhaWxhYmxlLWNvbG9yOiAjNUQ5RDUyO1xuJGF2YWlsYWJsZS1ieS1yZXF1ZXN0LWNvbG9yOiAjRjVCNTNGO1xuJGluLXVzZS1jb2xvcjogI0Q0NDgzRTtcbiRub3QtYm9va2FibGUtY29sb3I6ICNDQ0NDQ0M7XG5cbiRtb2RhbC1ib2R5LWhlYWRpbmc6ICM0RDRENEQ7XG4kYWxlcnQtb3ZlcmxheS1iZzogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2FjaG1hcmstYmc6ICNFQkVCRjY7XG4kY29hY2htYXJrLWRhcmstdGV4dDogIzFCMUIxOTtcbiRlcnJvci10ZXh0OiAjZmZmO1xuXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuXG4vLyA0cHhcbiRzcGFjaW5nLXNtYWxsZXN0OiAwLjI1cmVtO1xuXG4vLyA4cHhcbiRzcGFjaW5nLXh4c21hbGw6IDAuNXJlbTtcblxuLy8gMTJweFxuJHNwYWNpbmcteHNtYWxsOiAwLjc1cmVtO1xuXG4vLyAxNnB4XG4kc3BhY2luZy1zbWFsbDogMXJlbTtcblxuLy8gMjBweFxuJHNwYWNpbmctc21hbGwtbWVkaXVtOiAxLjI1cmVtO1xuXG4vLyAyNHB4XG4kc3BhY2luZy1tZWRpdW06IDEuNXJlbTtcblxuLy8gMjhweFxuJHNwYWNpbmctbWVkaXVtLWxhcmdlOiAxLjc1cmVtO1xuXG4vLyAzMnB4XG4kc3BhY2luZy1sYXJnZTogMnJlbTtcblxuLy8gNDhweFxuJHNwYWNpbmcteGxhcmdlOiAzcmVtO1xuXG4vLyA2NHB4XG4kc3BhY2luZy14eGxhcmdlOiA0cmVtO1xuXG4vLyA5NnB4XG4kc3BhY2luZy1sYXJnZXN0OiA2cmVtO1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGRldmljZS1tb2JpbGUtc2l6ZTogNDUwcHg7XG4kZGV2aWNlLXRhYmxldC1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFwdG9wLXNpemU6IDEwMjRweDtcblxuJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemU6IDgwMHB4O1xuJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemU6IDEwNDhweDtcbiRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplOiAxMjgwcHg7XG5cblxuOmV4cG9ydCB7XG4gICAgcHJpbWFyeTogJHByaW1hcnk7XG4gICAgc2Vjb25kYXJ5TGFiZWw6ICRzZWNvbmRhcnktbGFiZWw7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4kaWNvbi1zbWFsbDogMTZweDtcbiRpY29uLW1lZGl1bTogMjRweDtcbiRpY29uLWxhcmdlOiAzMnB4O1xuJGljb24teGxhcmdlOiA0OHB4O1xuIiwiLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG4vKiBUaGVtZSBmb3IgdGhlIHJpcHBsZSBlbGVtZW50cy4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF0ZXJpYWwvbm8tcHJlZml4ZXMgKi9cbi8qIHN0eWxlbGludC1lbmFibGUgKi9cbmgzIHtcbiAgY29sb3I6ICMwMDAwMDA7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgZm9udC1zaXplOiAyNHB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBwYWRkaW5nOiAyMHB4IDAgMCAwO1xuICBtYXJnaW46IDA7XG59XG5oMyBzcGFuIHtcbiAgZm9udC13ZWlnaHQ6IDEwMDtcbn1cblxuLnJlc3VsdC1jb250YWluZXIge1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJveC1zaGFkb3c6IDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLnJlc3VsdC1jb250YWluZXIgLmNhcmQ6aG92ZXIge1xuICBib3gtc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMikgMHB4IDJweCAyMXB4O1xuICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuM3MgZWFzZS1pbi1vdXQ7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93IHtcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGNsZWFyOiBib3RoO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBsaW5lLWhlaWdodDogMjBweDtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93IGltZy5yZWN1cnJpbmctaW5mby1pY29uIHtcbiAgd2lkdGg6IDIwcHg7XG4gIG1hcmdpbi1yaWdodDogMTRweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LmRhdGV0aW1lIHtcbiAgcGFkZGluZzogMTVweCAwO1xuICBjb2xvcjogIzAwMDtcbiAgZm9udC1zaXplOiAxOHB4O1xufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cuZGF0ZXRpbWUgLnN0YXR1cy1ibG9jayB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LmRhdGV0aW1lIC5zdGF0dXMtYmxvY2sgPiBkaXYge1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy5kYXRldGltZSAuc3RhdHVzLWJsb2NrID4gZGl2IHNwYW4ge1xuICBmb250LXdlaWdodDogNTAwO1xufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cuc3RhdHVzIHtcbiAgcGFkZGluZzogMTZweCAxOHB4O1xufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cuc3RhdHVzID4gZGl2IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cuc3RhdHVzID4gZGl2IC5tZXNzYWdlIHtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cuc3RhdHVzID4gZGl2IC5tZXNzYWdlIGltZyB7XG4gIHdpZHRoOiAyMHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogc3ViO1xuICBtYXJnaW4tcmlnaHQ6IDVweDtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnN0YXR1cyA+IGRpdiAudGltZSB7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cuc3RhdHVzID4gZGl2IHAge1xuICBtYXJnaW46IDA7XG4gIG1pbi13aWR0aDogODhweDtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnBhbmVsIHtcbiAgcGFkZGluZzogMjBweCAxOHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm94LXNoYWRvdzogMHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMik7XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSB7XG4gIGNvbG9yOiAjMDAwO1xuICBmb250LXdlaWdodDogNTAwO1xuICBmb250LXNpemU6IDE4cHg7XG4gIHdpZHRoOiAxMDAlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGxpbmUtaGVpZ2h0OiAyNnB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nLXJpZ2h0OiAxMjBweDtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnRpdGxlIC50eXBlLXRleHQge1xuICBtYXJnaW4tbGVmdDogMTVweDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBwYWRkaW5nOiAwIDEwcHg7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBjb2xvcjogIzMzMzMzMztcbiAgbWF4LWhlaWdodDogMjRweDtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnRpdGxlIC50eXBlLXRleHQuaW50ZXJuYWwge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDMzQjZGO1xuICBjb2xvcjogd2hpdGU7XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSAudHlwZS10ZXh0LmV4dGVybmFsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0ZBQTA4Mjtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnRpdGxlIC50eXBlLXRleHQucGFydG5lciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzOUJERjM7XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSAudHlwZS10ZXh0Lm11bHRpcm9vbSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGRkQwNDg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSAudHlwZS10ZXh0IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IDA7XG4gICAgdG9wOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cudGl0bGUgLnR5cGUtdGV4dCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAwO1xuICAgIHRvcDogMDtcbiAgfVxufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cudGl0bGUgYnV0dG9uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMDtcbiAgdG9wOiAtNnB4O1xuICBkaXNwbGF5OiBibG9jaztcbiAgY29sb3I6ICMzMzMzMzM7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBwYWRkaW5nOiA2cHggMTBweDtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBsaW5lLWhlaWdodDogMjRweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSBidXR0b24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSBidXR0b24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnRpdGxlIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xuICB9XG4gIC5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnRpdGxlIC50eXBlLXRpdGxlIHtcbiAgICB3aWR0aDogY2FsYygxMDAlIC0gNzVweCk7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSB7XG4gICAgcGFkZGluZy1yaWdodDogMTBweDtcbiAgfVxuICAucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSAudHlwZS10aXRsZSB7XG4gICAgd2lkdGg6IGNhbGMoMTAwJSAtIDc1cHgpO1xuICB9XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50ZXh0IHtcbiAgY29sb3I6ICMzMzMzMzM7XG4gIHBhZGRpbmc6IDE4cHggMTBweCAwIDA7XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50ZXh0IHNwYW4ge1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogM3B4IDEycHg7XG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICM5Nzk3OTc7XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50ZXh0IHNwYW4gaW1nIHtcbiAgbWFyZ2luLXJpZ2h0OiA1cHg7XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50ZXh0IHNwYW46bnRoLWNoaWxkKDEpIHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cudGV4dCBzcGFuOmxhc3QtY2hpbGQge1xuICBib3JkZXItcmlnaHQ6IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50ZXh0IHNwYW4ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGNsZWFyOiBib3RoO1xuICAgIGJvcmRlcjogMDtcbiAgICBwYWRkaW5nOiAzcHggMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnRleHQgc3BhbiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgY2xlYXI6IGJvdGg7XG4gICAgYm9yZGVyOiAwO1xuICAgIHBhZGRpbmc6IDNweCAwO1xuICB9XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdyAubW9iaWxlLW9ubHktY3RhIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgei1pbmRleDogMjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMDtcbiAgdG9wOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cgLm1vYmlsZS1vbmx5LWN0YSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cgLm1vYmlsZS1vbmx5LWN0YSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdyAubW9iaWxlLW9ubHktY3RhIC5yaWdodC1hcnJvdyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDEwcHg7XG4gIHRvcDogNzJweDtcbn1cblxuLnJpZ2h0LWFycm93IHtcbiAgd2lkdGg6IDMwcHggIWltcG9ydGFudDtcbiAgaGVpZ2h0OiAzMHB4ICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiAyNHB4O1xuICBoZWlnaHQ6IDI0cHg7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9hcnJvdy1yaWdodC5zdmdcIik7XG4gIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5yaWdodC1hcnJvdyB7XG4gICAgd2lkdGg6IDQ4cHg7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9hcnJvdy1yaWdodC1sYXJnZS5zdmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLnJpZ2h0LWFycm93IHtcbiAgICB3aWR0aDogNDhweDtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwibGlicy91aS9zcmMvbGliL2ljb25zL2Fycm93LXJpZ2h0LWxhcmdlLnN2Z1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIH1cbn1cblxuLmJvb2tpbmctdHotZGlzcGxheSB7XG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcbn1cblxuLmxvY2FsLXR6LWRpc3BsYXkge1xuICBmb250LXNpemU6IDFyZW07XG4gIGNvbG9yOiAjNzU3NTc1O1xufSIsIkBpbXBvcnQgXCJ2YXJzXCI7XG5cbkBtaXhpbiBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRzaXplLCAkcXVhbGlmaWVyKSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAaWYgKCRxdWFsaWZpZXIgPT0gbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSBpZiAoJHF1YWxpZmllciA9PSBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWF4LXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5AbWl4aW4gYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRtaW4sICRtYXgpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkbWluKSBhbmQgKG1heC13aWR0aDogJG1heCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIHRoaXMgaXMgYSBjb3B5IG9mIHJlc3BvbmQtdG8uIHdlIGRvbid0IHdhbnQgdG8gcHJlc2VydmUgdGhhdCBtZXRob2Qgc2luY2UgdGhlIGJyZWFrcG9pbnRzIG1heSBkaXZlcmdlIGZyb20gdGhlIG9sZCBVSS5cbkBtaXhpbiBpcy1zY3JlZW4tc2l6ZSgkbWVkaWE6IGFsbCwgJG9yaWVudGF0aW9uOiBub25lKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cblxuQG1peGluIHBhZ2UtcGFkZGluZyB7XG4gICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbDtcbn1cblxuLy8gRm9udCBNaXhpbnNcbiRmb250LW1ja2luc2V5LXNhbnM6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuJGZvbnQtdGhlaW5oYXJkdDogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4kZm9udC1ib3dlcjogXCJCb3dlclwiO1xuXG5AbWl4aW4gYm93ZXItYm9sZCB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWJvd2VyO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBtY2tpbnNleS1zYW5zIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gZGlzcGxheS0xIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiA0cmVtOyAvLyA2NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4NzsgLy8gNzZweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMiB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDYwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS00IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogM3JlbTsgLy8gNDhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE2NjsgLy8gNTZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS01IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjgzMzsgLy8gMzRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjQyOyAvLyA0MHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS03IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyOHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTEge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA0OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi43NXJlbTsgLy8gNDRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDUycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTIge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTExOyAvLyA0NHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNDhweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMyB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIyMjsgLy8gNDRweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjg4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1NTsgLy8gMjhweFxuICAgIH1cbn1cblxuQG1peGluIGJvZHktZGVmYXVsdCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNnB4XG4gICAgfVxufVxuXG4vLy8gRG9lc250IGV4aXN0IGluIE1EUy5cbkBtaXhpbiBib2R5LXRpbnkge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtOyAvLyAxMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjRweFxuICAgIH1cbn1cblxuQG1peGluIGZvcm0tbGFiZWwge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LXRoZWluaGFyZHQ7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGNvbG9yOiAkcGxhY2Vob2xkZXItY29sb3I7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbn1cblxuQG1peGluIGNoaXAtbGFiZWwge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBjaGVja2JveC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGNvbG9yOiBibGFjaztcbn1cblxuLy8gYm9yZGVyc1xuXG5AbWl4aW4gbWNrLWNoZWNrYm94LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay10aGluLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXItbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBib3JkZXItY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudC1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuXG4vLyBmdW5jdGlvbnNcblxuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG5AbWl4aW4gbWF4LWxpbmVzKCRjb3VudCkge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiAkY291bnQ7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbn1cblxuLy8gaW1hZ2VzXG5AbWl4aW4gbWNrLWljb24oJHdpZHRoLCAkYXNzZXQsICRoZWlnaHQ6ICR3aWR0aCwgICRhc3NldFBhdGg6IFwibGlicy91aS9zcmMvbGliL2ljb25zXCIsKSB7XG4gICAgd2lkdGg6ICR3aWR0aDtcbiAgICBoZWlnaHQ6ICRoZWlnaHQ7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiI3skYXNzZXRQYXRofS8jeyRhc3NldH1cIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuXG5cbkBtaXhpbiBtY2stc21hbGwtaWNvbigkbW9iaWxlLWFzc2V0LCAkZGVza3RvcC1hc3NldDogJG1vYmlsZS1hc3NldCkge1xuICAgIEBpbmNsdWRlIG1jay1pY29uKDE2cHgsICRhc3NldDogJG1vYmlsZS1hc3NldCk7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICRhc3NldDogJGRlc2t0b3AtYXNzZXQpO1xuICAgIH1cbn1cblxuLy8gc2tlbGV0b25cbkBtaXhpbiBza2VsZXRvbi1iZyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWltYWdlLXNpemUge1xuICAgIHdpZHRoOiA4MXB4O1xuICAgIGhlaWdodDogODJweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDIxOXB4O1xuICAgICAgICBoZWlnaHQ6IDExOXB4O1xuICAgIH1cbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLXN0YXR1cy1zaXplIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMTE3cHg7XG4gICAgICAgIGhlaWdodDogNzhweDtcbiAgICB9XG59XG4iLCIvLyBJbXBvcnQgYWxsIHRoZSB0aGVtaW5nIGZ1bmN0aW9uYWxpdHkuXG4vLyBXZSB3YW50IG92ZXJsYXlzIHRvIGFsd2F5cyBhcHBlYXIgb3ZlciB1c2VyIGNvbnRlbnQsIHNvIHNldCBhIGJhc2VsaW5lXG4vLyB2ZXJ5IGhpZ2ggei1pbmRleCBmb3IgdGhlIG92ZXJsYXkgY29udGFpbmVyLCB3aGljaCBpcyB3aGVyZSB3ZSBjcmVhdGUgdGhlIG5ld1xuLy8gc3RhY2tpbmcgY29udGV4dCBmb3IgYWxsIG92ZXJsYXlzLlxuJGNkay16LWluZGV4LW92ZXJsYXktY29udGFpbmVyOiAxMDAwICFkZWZhdWx0O1xuJGNkay16LWluZGV4LW92ZXJsYXk6IDEwMDAgIWRlZmF1bHQ7XG4kY2RrLXotaW5kZXgtb3ZlcmxheS1iYWNrZHJvcDogMTAwMCAhZGVmYXVsdDtcblxuLy8gQmFja2dyb3VuZCBjb2xvciBmb3IgYWxsIG9mIHRoZSBiYWNrZHJvcHNcbiRjZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wLWJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4zMikgIWRlZmF1bHQ7XG5cbi8vIERlZmF1bHQgYmFja2Ryb3AgYW5pbWF0aW9uIGlzIGJhc2VkIG9uIHRoZSBNYXRlcmlhbCBEZXNpZ24gc3dpZnQtZWFzZS1vdXQuXG4kYmFja2Ryb3AtYW5pbWF0aW9uLWR1cmF0aW9uOiA0MDBtcyAhZGVmYXVsdDtcbiRiYWNrZHJvcC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSAhZGVmYXVsdDtcblxuXG5AbWl4aW4gY2RrLW92ZXJsYXkoKSB7XG4gIC5jZGstb3ZlcmxheS1jb250YWluZXIsIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlciB7XG4gICAgLy8gRGlzYWJsZSBldmVudHMgZnJvbSBiZWluZyBjYXB0dXJlZCBvbiB0aGUgb3ZlcmxheSBjb250YWluZXIuXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5cbiAgICAvLyBUaGUgY29udGFpbmVyIHNob3VsZCBiZSB0aGUgc2l6ZSBvZiB0aGUgdmlld3BvcnQuXG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG5cbiAgLy8gVGhlIG92ZXJsYXktY29udGFpbmVyIGlzIGFuIGludmlzaWJsZSBlbGVtZW50IHdoaWNoIGNvbnRhaW5zIGFsbCBpbmRpdmlkdWFsIG92ZXJsYXlzLlxuICAuY2RrLW92ZXJsYXktY29udGFpbmVyIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgei1pbmRleDogJGNkay16LWluZGV4LW92ZXJsYXktY29udGFpbmVyO1xuXG4gICAgJjplbXB0eSB7XG4gICAgICAvLyBIaWRlIHRoZSBlbGVtZW50IHdoZW4gaXQgZG9lc24ndCBoYXZlIGFueSBjaGlsZCBub2Rlcy4gVGhpcyBkb2Vzbid0XG4gICAgICAvLyBpbmNsdWRlIG92ZXJsYXlzIHRoYXQgaGF2ZSBiZWVuIGRldGFjaGVkLCByYXRoZXIgdGhhbiBkaXNwb3NlZC5cbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgLy8gV2UgdXNlIGFuIGV4dHJhIHdyYXBwZXIgZWxlbWVudCBpbiBvcmRlciB0byB1c2UgbWFrZSB0aGUgb3ZlcmxheSBpdHNlbGYgYSBmbGV4IGl0ZW0uXG4gIC8vIFRoaXMgbWFrZXMgY2VudGVyaW5nIHRoZSBvdmVybGF5IGVhc3kgd2l0aG91dCBydW5uaW5nIGludG8gdGhlIHN1YnBpeGVsIHJlbmRlcmluZ1xuICAvLyBwcm9ibGVtcyB0aWVkIHRvIHVzaW5nIGB0cmFuc2Zvcm1gIGFuZCB3aXRob3V0IGludGVyZmVyaW5nIHdpdGggdGhlIG90aGVyIHBvc2l0aW9uXG4gIC8vIHN0cmF0ZWdpZXMuXG4gIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogJGNkay16LWluZGV4LW92ZXJsYXk7XG4gIH1cblxuICAvLyBBIHNpbmdsZSBvdmVybGF5IHBhbmUuXG4gIC5jZGstb3ZlcmxheS1wYW5lIHtcbiAgICAvLyBOb3RlOiBpdCdzIGltcG9ydGFudCBmb3IgdGhpcyBvbmUgdG8gc3RhcnQgb2ZmIGBhYnNvbHV0ZWAsXG4gICAgLy8gaW4gb3JkZXIgZm9yIHVzIHRvIGJlIGFibGUgdG8gbWVhc3VyZSBpdCBjb3JyZWN0bHkuXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgei1pbmRleDogJGNkay16LWluZGV4LW92ZXJsYXk7XG5cbiAgICAvLyBGb3IgY29ubmVjdGVkLXBvc2l0aW9uIG92ZXJsYXlzLCB3ZSBzZXQgYGRpc3BsYXk6IGZsZXhgIGluXG4gICAgLy8gb3JkZXIgdG8gZm9yY2UgYG1heC13aWR0aGAgYW5kIGBtYXgtaGVpZ2h0YCB0byB0YWtlIGVmZmVjdC5cbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuICB9XG5cbiAgLmNkay1vdmVybGF5LWJhY2tkcm9wIHtcbiAgICAvLyBUT0RPKGplbGJvdXJuKTogcmV1c2Ugc2lkZW5hdiBmdWxsc2NyZWVuIG1peGluLlxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG5cbiAgICB6LWluZGV4OiAkY2RrLXotaW5kZXgtb3ZlcmxheS1iYWNrZHJvcDtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgJGJhY2tkcm9wLWFuaW1hdGlvbi1kdXJhdGlvbiAkYmFja2Ryb3AtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjtcbiAgICBvcGFjaXR5OiAwO1xuXG4gICAgJi5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIHtcbiAgICAgIG9wYWNpdHk6IDE7XG5cbiAgICAgIC8vIEluIGhpZ2ggY29udHJhc3QgbW9kZSB0aGUgcmdiYSBiYWNrZ3JvdW5kIHdpbGwgYmVjb21lIHNvbGlkIHNvIHdlIG5lZWQgdG8gZmFsbCBiYWNrXG4gICAgICAvLyB0byBtYWtpbmcgaXQgb3BhcXVlIHVzaW5nIGBvcGFjaXR5YC4gTm90ZSB0aGF0IHdlIGNhbid0IHVzZSB0aGUgYGNkay1oaWdoLWNvbnRyYXN0YFxuICAgICAgLy8gbWl4aW4sIGJlY2F1c2Ugd2UgY2FuJ3Qgbm9ybWFsaXplIHRoZSBpbXBvcnQgcGF0aCB0byB0aGUgX2ExMXkuc2NzcyBib3RoIGZvciB0aGVcbiAgICAgIC8vIHNvdXJjZSBhbmQgd2hlbiB0aGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQuIFNlZSAjMTA5MDguXG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSkge1xuICAgICAgICBvcGFjaXR5OiAwLjY7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3Age1xuICAgIGJhY2tncm91bmQ6ICRjZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wLWJhY2tncm91bmQ7XG4gIH1cblxuICAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3Age1xuICAgIC8vIE5vdGU6IGFzIG9mIEZpcmVmb3ggNTcsIGhhdmluZyB0aGUgYmFja2Ryb3AgYmUgYGJhY2tncm91bmQ6IG5vbmVgIHdpbGwgcHJldmVudCBpdCBmcm9tXG4gICAgLy8gY2FwdHVyaW5nIHRoZSB1c2VyJ3MgbW91c2Ugc2Nyb2xsIGV2ZW50cy4gU2luY2Ugd2UgYWxzbyBjYW4ndCB1c2Ugc29tZXRoaW5nIGxpa2VcbiAgICAvLyBgcmdiYSgwLCAwLCAwLCAwKWAsIHdlIHdvcmsgYXJvdW5kIHRoZSBpbmNvbnNpc3RlbmN5IGJ5IG5vdCBzZXR0aW5nIHRoZSBiYWNrZ3JvdW5kIGF0XG4gICAgLy8gYWxsIGFuZCB1c2luZyBgb3BhY2l0eWAgdG8gbWFrZSB0aGUgZWxlbWVudCB0cmFuc3BhcmVudC5cbiAgICAmLCAmLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmcge1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gIH1cblxuICAvLyBPdmVybGF5IHBhcmVudCBlbGVtZW50IHVzZWQgd2l0aCB0aGUgY29ubmVjdGVkIHBvc2l0aW9uIHN0cmF0ZWd5LiBVc2VkIHRvIGNvbnN0cmFpbiB0aGVcbiAgLy8gb3ZlcmxheSBlbGVtZW50J3Mgc2l6ZSB0byBmaXQgd2l0aGluIHRoZSB2aWV3cG9ydC5cbiAgLmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3gge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB6LWluZGV4OiAkY2RrLXotaW5kZXgtb3ZlcmxheTtcblxuICAgIC8vIFdlIHVzZSBgZGlzcGxheTogZmxleGAgb24gdGhpcyBlbGVtZW50IGV4Y2x1c2l2ZWx5IGZvciBjZW50ZXJpbmcgY29ubmVjdGVkIG92ZXJsYXlzLlxuICAgIC8vIFdoZW4gKm5vdCogY2VudGVyaW5nLCBhIHRvcC9sZWZ0L2JvdHRvbS9yaWdodCB3aWxsIGJlIHNldCB3aGljaCBvdmVycmlkZXMgdGhlIG5vcm1hbFxuICAgIC8vIGZsZXggbGF5b3V0LlxuICAgIGRpc3BsYXk6IGZsZXg7XG5cbiAgICAvLyBXZSB1c2UgdGhlIGBjb2x1bW5gIGRpcmVjdGlvbiBoZXJlIHRvIGF2b2lkIHNvbWUgZmxleGJveCBpc3N1ZXMgaW4gRWRnZVxuICAgIC8vIHdoZW4gdXNpbmcgdGhlIFwiZ3JvdyBhZnRlciBvcGVuXCIgb3B0aW9ucy5cbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG4gICAgLy8gQWRkIHNvbWUgZGltZW5zaW9ucyBzbyB0aGUgZWxlbWVudCBoYXMgYW4gYGlubmVyVGV4dGAgd2hpY2ggc29tZSBwZW9wbGUgZGVwZW5kIG9uIGluIHRlc3RzLlxuICAgIG1pbi13aWR0aDogMXB4O1xuICAgIG1pbi1oZWlnaHQ6IDFweDtcbiAgfVxuXG4gIC8vIFVzZWQgd2hlbiBkaXNhYmxpbmcgZ2xvYmFsIHNjcm9sbGluZy5cbiAgLmNkay1nbG9iYWwtc2Nyb2xsYmxvY2sge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcblxuICAgIC8vIE5lY2Vzc2FyeSBmb3IgdGhlIGNvbnRlbnQgbm90IHRvIGxvc2UgaXRzIHdpZHRoLiBOb3RlIHRoYXQgd2UncmUgdXNpbmcgMTAwJSwgaW5zdGVhZCBvZlxuICAgIC8vIDEwMHZ3LCBiZWNhdXNlIDEwMHZ3IGluY2x1ZGVzIHRoZSB3aWR0aCBwbHVzIHRoZSBzY3JvbGxiYXIsIHdoZXJlYXMgMTAwJSBpcyB0aGUgd2lkdGhcbiAgICAvLyB0aGF0IHRoZSBlbGVtZW50IGhhZCBiZWZvcmUgd2UgbWFkZSBpdCBgZml4ZWRgLlxuICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgLy8gTm90ZTogdGhpcyB3aWxsIGFsd2F5cyBhZGQgYSBzY3JvbGxiYXIgdG8gd2hhdGV2ZXIgZWxlbWVudCBpdCBpcyBvbiwgd2hpY2ggY2FuXG4gICAgLy8gcG90ZW50aWFsbHkgcmVzdWx0IGluIGRvdWJsZSBzY3JvbGxiYXJzLiBJdCBzaG91bGRuJ3QgYmUgYW4gaXNzdWUsIGJlY2F1c2Ugd2Ugd29uJ3RcbiAgICAvLyBibG9jayBzY3JvbGxpbmcgb24gYSBwYWdlIHRoYXQgZG9lc24ndCBoYXZlIGEgc2Nyb2xsYmFyIGluIHRoZSBmaXJzdCBwbGFjZS5cbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gIH1cbn1cblxuQG1peGluIGNkay1hMTF5IHtcbiAgLmNkay12aXN1YWxseS1oaWRkZW4ge1xuICAgIGJvcmRlcjogMDtcbiAgICBjbGlwOiByZWN0KDAgMCAwIDApO1xuICAgIGhlaWdodDogMXB4O1xuICAgIG1hcmdpbjogLTFweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHdpZHRoOiAxcHg7XG5cbiAgICAvLyBBdm9pZCBicm93c2VycyByZW5kZXJpbmcgdGhlIGZvY3VzIHJpbmcgaW4gc29tZSBjYXNlcy5cbiAgICBvdXRsaW5lOiAwO1xuXG4gICAgLy8gQXZvaWQgc29tZSBjYXNlcyB3aGVyZSB0aGUgYnJvd3NlciB3aWxsIHN0aWxsIHJlbmRlciB0aGUgbmF0aXZlIGNvbnRyb2xzIChzZWUgIzkwNDkpLlxuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7XG4gIH1cbn1cblxuLy8vIEVtaXRzIHRoZSBtaXhpbidzIGNvbnRlbnQgbmVzdGVkIHVuZGVyIGAkc2VsZWN0b3ItY29udGV4dGAgaWYgYCRzZWxlY3Rvci1jb250ZXh0YFxuLy8vIGlzIG5vbi1lbXB0eS5cbi8vLyBAcGFyYW0gc2VsZWN0b3ItY29udGV4dCBUaGUgc2VsZWN0b3IgdW5kZXIgd2hpY2ggdG8gbmVzdCB0aGUgbWl4aW4ncyBjb250ZW50LlxuQG1peGluIF9jZGstb3B0aW9uYWxseS1uZXN0LWNvbnRlbnQoJHNlbGVjdG9yLWNvbnRleHQpIHtcbiAgQGlmICgkc2VsZWN0b3ItY29udGV4dCA9PSAnJykge1xuICAgIEBjb250ZW50O1xuICB9XG4gIEBlbHNlIHtcbiAgICAjeyRzZWxlY3Rvci1jb250ZXh0fSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH1cbn1cblxuLy8vIEFwcGxpZXMgc3R5bGVzIGZvciB1c2VycyBpbiBoaWdoIGNvbnRyYXN0IG1vZGUuIE5vdGUgdGhhdCB0aGlzIG9ubHkgYXBwbGllc1xuLy8vIHRvIE1pY3Jvc29mdCBicm93c2Vycy4gQ2hyb21lIGNhbiBiZSBpbmNsdWRlZCBieSBjaGVja2luZyBmb3IgdGhlIGBodG1sW2hjXWBcbi8vLyBhdHRyaWJ1dGUsIGhvd2V2ZXIgQ2hyb21lIGhhbmRsZXMgaGlnaCBjb250cmFzdCBkaWZmZXJlbnRseS5cbi8vL1xuLy8vIEBwYXJhbSB0YXJnZXQgV2hpY2gga2luZCBvZiBoaWdoIGNvbnRyYXN0IHNldHRpbmcgdG8gdGFyZ2V0LiBEZWZhdWx0cyB0byBgYWN0aXZlYCwgY2FuIGJlXG4vLy8gICAgYHdoaXRlLW9uLWJsYWNrYCBvciBgYmxhY2stb24td2hpdGVgLlxuLy8vIEBwYXJhbSBlbmNhcHN1bGF0aW9uIFdoZXRoZXIgdG8gZW1pdCBzdHlsZXMgZm9yIHZpZXcgZW5jYXBzdWxhdGlvbi4gVmFsdWVzIGFyZTpcbi8vLyAgICAgKiBgb25gIC0gd29ya3MgZm9yIGBFbXVsYXRlZGAsIGBOYXRpdmVgLCBhbmQgYFNoYWRvd0RvbWBcbi8vLyAgICAgKiBgb2ZmYCAtIHdvcmtzIGZvciBgTm9uZWBcbi8vLyAgICAgKiBgYW55YCAtIHdvcmtzIGZvciBhbGwgZW5jYXBzdWxhdGlvbiBtb2RlcyBieSBlbWl0dGluZyB0aGUgQ1NTIHR3aWNlIChkZWZhdWx0KS5cbkBtaXhpbiBjZGstaGlnaC1jb250cmFzdCgkdGFyZ2V0OiBhY3RpdmUsICRlbmNhcHN1bGF0aW9uOiAnYW55Jykge1xuICBAaWYgKCR0YXJnZXQgIT0gJ2FjdGl2ZScgYW5kICR0YXJnZXQgIT0gJ2JsYWNrLW9uLXdoaXRlJyBhbmQgJHRhcmdldCAhPSAnd2hpdGUtb24tYmxhY2snKSB7XG4gICAgQGVycm9yICdVbmtub3duIGNkay1oaWdoLWNvbnRyYXN0IHZhbHVlIFwiI3skdGFyZ2V0fVwiIHByb3ZpZGVkLiAnICtcbiAgICAgICAgICAgJ0FsbG93ZWQgdmFsdWVzIGFyZSBcImFjdGl2ZVwiLCBcImJsYWNrLW9uLXdoaXRlXCIsIGFuZCBcIndoaXRlLW9uLWJsYWNrXCInO1xuICB9XG5cbiAgQGlmICgkZW5jYXBzdWxhdGlvbiAhPSAnb24nIGFuZCAkZW5jYXBzdWxhdGlvbiAhPSAnb2ZmJyBhbmQgJGVuY2Fwc3VsYXRpb24gIT0gJ2FueScpIHtcbiAgICBAZXJyb3IgJ1Vua25vd24gY2RrLWhpZ2gtY29udHJhc3QgZW5jYXBzdWxhdGlvbiBcIiN7JGVuY2Fwc3VsYXRpb259XCIgcHJvdmlkZWQuICcgK1xuICAgICAgICAgICAnQWxsb3dlZCB2YWx1ZXMgYXJlIFwib25cIiwgXCJvZmZcIiwgYW5kIFwiYW55XCInO1xuICB9XG5cbiAgLy8gSWYgdGhlIHNlbGVjdG9yIGNvbnRleHQgaGFzIG11bHRpcGxlIHBhcnRzLCBzdWNoIGFzIGAuc2VjdGlvbiwgLnJlZ2lvbmAsIGp1c3QgZG9pbmdcbiAgLy8gYC5jZGstaGlnaC1jb250cmFzdC14eHggI3smfWAgd2lsbCBvbmx5IGFwcGx5IHRoZSBwYXJlbnQgc2VsZWN0b3IgdG8gdGhlIGZpcnN0IHBhcnQgb2YgdGhlXG4gIC8vIGNvbnRleHQuIFdlIGFkZHJlc3MgdGhpcyBieSBuZXN0aW5nIHRoZSBzZWxlY3RvciBjb250ZXh0IHVuZGVyIC5jZGstaGlnaC1jb250cmFzdC5cbiAgQGF0LXJvb3Qge1xuICAgICRzZWxlY3Rvci1jb250ZXh0OiAjeyZ9O1xuXG4gICAgQGlmICgkZW5jYXBzdWxhdGlvbiAhPSAnb24nKSB7XG4gICAgICAuY2RrLWhpZ2gtY29udHJhc3QtI3skdGFyZ2V0fSB7XG4gICAgICAgIEBpbmNsdWRlIF9jZGstb3B0aW9uYWxseS1uZXN0LWNvbnRlbnQoJHNlbGVjdG9yLWNvbnRleHQpIHtcbiAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiAoJGVuY2Fwc3VsYXRpb24gIT0gJ29mZicpIHtcbiAgICAgIC5jZGstaGlnaC1jb250cmFzdC0jeyR0YXJnZXR9IDpob3N0IHtcbiAgICAgICAgQGluY2x1ZGUgX2Nkay1vcHRpb25hbGx5LW5lc3QtY29udGVudCgkc2VsZWN0b3ItY29udGV4dCkge1xuICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIENvcmUgc3R5bGVzIHRoYXQgZW5hYmxlIG1vbml0b3JpbmcgYXV0b2ZpbGwgc3RhdGUgb2YgdGV4dCBmaWVsZHMuXG5AbWl4aW4gY2RrLXRleHQtZmllbGQge1xuICAvLyBLZXlmcmFtZXMgdGhhdCBhcHBseSBubyBzdHlsZXMsIGJ1dCBhbGxvdyB1cyB0byBtb25pdG9yIHdoZW4gYW4gdGV4dCBmaWVsZCBiZWNvbWVzIGF1dG9maWxsZWRcbiAgLy8gYnkgd2F0Y2hpbmcgZm9yIHRoZSBhbmltYXRpb24gZXZlbnRzIHRoYXQgYXJlIGZpcmVkIHdoZW4gdGhleSBzdGFydC4gTm90ZTogdGhlIC8qISovIGNvbW1lbnQgaXNcbiAgLy8gbmVlZGVkIHRvIHByZXZlbnQgTGliU2FzcyBmcm9tIHN0cmlwcGluZyB0aGUga2V5ZnJhbWVzIG91dC5cbiAgLy8gQmFzZWQgb246IGh0dHBzOi8vbWVkaXVtLmNvbS9AYnJ1bm4vZGV0ZWN0aW5nLWF1dG9maWxsZWQtZmllbGRzLWluLWphdmFzY3JpcHQtYWVkNTk4ZDI1ZGE3XG4gIEBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgey8qISovfVxuICBAa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCB7LyohKi99XG5cbiAgLmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDotd2Via2l0LWF1dG9maWxsIHtcbiAgICAvLyBTaW5jZSBDaHJvbWUgODAgd2UgbmVlZCBhIDFtcyBkZWxheSwgb3IgdGhlIGFuaW1hdGlvbnN0YXJ0IGV2ZW50IHdvbid0IGZpcmUuXG4gICAgYW5pbWF0aW9uOiBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXM7XG4gIH1cblxuICAuY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCkge1xuICAgIC8vIFNpbmNlIENocm9tZSA4MCB3ZSBuZWVkIGEgMW1zIGRlbGF5LCBvciB0aGUgYW5pbWF0aW9uc3RhcnQgZXZlbnQgd29uJ3QgZmlyZS5cbiAgICBhbmltYXRpb246IGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXM7XG4gIH1cblxuICAvLyBSZW1vdmUgdGhlIHJlc2l6ZSBoYW5kbGUgb24gYXV0b3NpemluZyB0ZXh0YXJlYXMsIGJlY2F1c2Ugd2hhdGV2ZXIgaGVpZ2h0XG4gIC8vIHRoZSB1c2VyIHJlc2l6ZWQgdG8gd2lsbCBiZSBvdmVyd3JpdHRlbiBvbmNlIHRoZXkgc3RhcnQgdHlwaW5nIGFnYWluLlxuICB0ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUge1xuICAgIHJlc2l6ZTogbm9uZTtcbiAgfVxuXG4gIC8vIFRoaXMgY2xhc3MgaXMgdGVtcG9yYXJpbHkgYXBwbGllZCB0byB0aGUgdGV4dGFyZWEgd2hlbiBpdCBpcyBiZWluZyBtZWFzdXJlZC4gSXQgaXMgaW1tZWRpYXRlbHlcbiAgLy8gcmVtb3ZlZCB3aGVuIG1lYXN1cmluZyBpcyBjb21wbGV0ZS4gV2UgdXNlIGAhaW1wb3J0YW50YCBydWxlcyBoZXJlIHRvIG1ha2Ugc3VyZSB1c2VyLXNwZWNpZmllZFxuICAvLyBydWxlcyBkbyBub3QgaW50ZXJmZXJlIHdpdGggdGhlIG1lYXN1cmVtZW50LlxuICB0ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nIHtcbiAgICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDtcbiAgICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7XG4gICAgLy8gSGF2aW5nIDJweCB0b3AgYW5kIGJvdHRvbSBwYWRkaW5nIHNlZW1zIHRvIGZpeCBhIGJ1ZyB3aGVyZSBDaHJvbWUgZ2V0cyBhbiBpbmNvcnJlY3RcbiAgICAvLyBtZWFzdXJlbWVudC4gV2UganVzdCBoYXZlIHRvIGFjY291bnQgZm9yIGl0IGxhdGVyIGFuZCBzdWJ0cmFjdCBpdCBvZmYgdGhlIGZpbmFsIHJlc3VsdC5cbiAgICBwYWRkaW5nOiAycHggMCAhaW1wb3J0YW50O1xuICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLy8gVXNlZCB0byBnZW5lcmF0ZSBVSURzIGZvciBrZXlmcmFtZXMgdXNlZCB0byBjaGFuZ2UgdGhlIHRleHQgZmllbGQgYXV0b2ZpbGwgc3R5bGVzLlxuJGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLWZyYW1lLWNvdW50OiAwO1xuXG4vLyBNaXhpbiB1c2VkIHRvIGFwcGx5IGN1c3RvbSBiYWNrZ3JvdW5kIGFuZCBmb3JlZ3JvdW5kIGNvbG9ycyB0byBhbiBhdXRvZmlsbGVkIHRleHQgZmllbGQuXG4vLyBCYXNlZCBvbjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjc4MTU0OS9cbi8vIHJlbW92aW5nLWlucHV0LWJhY2tncm91bmQtY29sb3VyLWZvci1jaHJvbWUtYXV0b2NvbXBsZXRlI2Fuc3dlci0zNzQzMjI2MFxuQG1peGluIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yKCRiYWNrZ3JvdW5kLCAkZm9yZWdyb3VuZDonJykge1xuICBAa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLSN7JGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLWZyYW1lLWNvdW50fSB7XG4gICAgdG8ge1xuICAgICAgYmFja2dyb3VuZDogJGJhY2tncm91bmQ7XG4gICAgICBAaWYgJGZvcmVncm91bmQgIT0gJycgeyBjb2xvcjogJGZvcmVncm91bmQ7IH1cbiAgICB9XG4gIH1cblxuICAmOi13ZWJraXQtYXV0b2ZpbGwge1xuICAgIGFuaW1hdGlvbjogY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItI3skY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItZnJhbWUtY291bnR9IGJvdGg7XG4gIH1cblxuICAmLmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDotd2Via2l0LWF1dG9maWxsIHtcbiAgICAvLyBTaW5jZSBDaHJvbWUgODAgd2UgbmVlZCBhIDFtcyBkZWxheSBmb3IgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQsIG9yIHRoZSBhbmltYXRpb25zdGFydFxuICAgIC8vIGV2ZW50IHdvbid0IGZpcmUuXG4gICAgYW5pbWF0aW9uOiBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXMsXG4gICAgICAgICAgICAgICBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci0jeyRjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci1mcmFtZS1jb3VudH0gYm90aDtcbiAgfVxuXG4gICRjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci1mcmFtZS1jb3VudDpcbiAgICAgICRjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci1mcmFtZS1jb3VudCArIDEgIWdsb2JhbDtcbn1cblxuXG4vLyBDb3JlIHN0eWxlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGFwcGx5IG1hdGVyaWFsIGRlc2lnbiB0cmVhdG1lbnRzIHRvIGFueSBlbGVtZW50LlxuLy8gTWVkaWEgcXVlcmllc1xuLy8gVE9ETyhqb3NlcGhwZXJyb3R0KTogQ2hhbmdlICRtYXQteHNtYWxsIGFuZCAkbWF0LXNtYWxsIHVzYWdlcyB0byByZWx5IG9uIEJyZWFrcG9pbnRPYnNlcnZlcixcbiRtYXQteHNtYWxsOiAnbWF4LXdpZHRoOiA1OTlweCc7XG4kbWF0LXNtYWxsOiAnbWF4LXdpZHRoOiA5NTlweCc7XG5cbi8vIFRPRE86IFJldmlzaXQgYWxsIHotaW5kaWNlcyBiZWZvcmUgYmV0YVxuLy8gei1pbmRleCBtYXN0ZXIgbGlzdFxuXG4kei1pbmRleC1mYWI6IDIwICFkZWZhdWx0O1xuJHotaW5kZXgtZHJhd2VyOiAxMDAgIWRlZmF1bHQ7XG5cbi8vIEdsb2JhbCBjb25zdGFudHNcbiRwaTogMy4xNDE1OTI2NTtcblxuLy8gUGFkZGluZyBiZXR3ZWVuIGlucHV0IHRvZ2dsZXMgYW5kIHRoZWlyIGxhYmVsc1xuJG1hdC10b2dnbGUtcGFkZGluZzogOHB4ICFkZWZhdWx0O1xuLy8gV2lkdGggYW5kIGhlaWdodCBvZiBpbnB1dCB0b2dnbGVzXG4kbWF0LXRvZ2dsZS1zaXplOiAyMHB4ICFkZWZhdWx0O1xuXG4vLyBFYXNpbmcgQ3VydmVzXG4vLyBUT0RPKGplbGJvdXJuKTogYWxsIG9mIHRoZXNlIG5lZWQgdG8gYmUgcmV2aXNpdGVkXG5cbi8vIFRoZSBkZWZhdWx0IGFuaW1hdGlvbiBjdXJ2ZXMgdXNlZCBieSBtYXRlcmlhbCBkZXNpZ24uXG4kbWF0LWxpbmVhci1vdXQtc2xvdy1pbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSkgIWRlZmF1bHQ7XG4kbWF0LWZhc3Qtb3V0LXNsb3ctaW4tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpICFkZWZhdWx0O1xuJG1hdC1mYXN0LW91dC1saW5lYXItaW4tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAxLCAxKSAhZGVmYXVsdDtcblxuJGVhc2UtaW4tb3V0LWN1cnZlLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSkgIWRlZmF1bHQ7XG5cbiRzd2lmdC1lYXNlLW91dC1kdXJhdGlvbjogNDAwbXMgIWRlZmF1bHQ7XG4kc3dpZnQtZWFzZS1vdXQtdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSAhZGVmYXVsdDtcbiRzd2lmdC1lYXNlLW91dDogYWxsICRzd2lmdC1lYXNlLW91dC1kdXJhdGlvbiAkc3dpZnQtZWFzZS1vdXQtdGltaW5nLWZ1bmN0aW9uICFkZWZhdWx0O1xuXG4kc3dpZnQtZWFzZS1pbi1kdXJhdGlvbjogMzAwbXMgIWRlZmF1bHQ7XG4kc3dpZnQtZWFzZS1pbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjU1LCAwLCAwLjU1LCAwLjIpICFkZWZhdWx0O1xuJHN3aWZ0LWVhc2UtaW46IGFsbCAkc3dpZnQtZWFzZS1pbi1kdXJhdGlvbiAkc3dpZnQtZWFzZS1pbi10aW1pbmctZnVuY3Rpb24gIWRlZmF1bHQ7XG5cbiRzd2lmdC1lYXNlLWluLW91dC1kdXJhdGlvbjogNTAwbXMgIWRlZmF1bHQ7XG4kc3dpZnQtZWFzZS1pbi1vdXQtdGltaW5nLWZ1bmN0aW9uOiAkZWFzZS1pbi1vdXQtY3VydmUtZnVuY3Rpb24gIWRlZmF1bHQ7XG4kc3dpZnQtZWFzZS1pbi1vdXQ6IGFsbCAkc3dpZnQtZWFzZS1pbi1vdXQtZHVyYXRpb24gJHN3aWZ0LWVhc2UtaW4tb3V0LXRpbWluZy1mdW5jdGlvbiAhZGVmYXVsdDtcblxuJHN3aWZ0LWxpbmVhci1kdXJhdGlvbjogODBtcyAhZGVmYXVsdDtcbiRzd2lmdC1saW5lYXItdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXIgIWRlZmF1bHQ7XG4kc3dpZnQtbGluZWFyOiBhbGwgJHN3aWZ0LWxpbmVhci1kdXJhdGlvbiAkc3dpZnQtbGluZWFyLXRpbWluZy1mdW5jdGlvbiAhZGVmYXVsdDtcblxuXG5cbi8vIEEgY29sbGVjdGlvbiBvZiBtaXhpbnMgYW5kIENTUyBjbGFzc2VzIHRoYXQgY2FuIGJlIHVzZWQgdG8gYXBwbHkgZWxldmF0aW9uIHRvIGEgbWF0ZXJpYWxcbi8vIGVsZW1lbnQuXG4vLyBTZWU6IGh0dHBzOi8vbWF0ZXJpYWwuaW8vZGVzaWduL2Vudmlyb25tZW50L2VsZXZhdGlvbi5odG1sXG4vLyBFeGFtcGxlczpcbi8vXG4vL1xuLy8gLm1hdC1mb28ge1xuLy8gICBAaW5jbHVkZSAkbWF0LWVsZXZhdGlvbigyKTtcbi8vXG4vLyAgICY6YWN0aXZlIHtcbi8vICAgICBAaW5jbHVkZSAkbWF0LWVsZXZhdGlvbig4KTtcbi8vICAgfVxuLy8gfVxuLy9cbi8vIDxkaXYgaWQ9XCJleHRlcm5hbC1jYXJkXCIgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXoyXCI+PHA+U29tZSBjb250ZW50PC9wPjwvZGl2PlxuLy9cbi8vIEZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgZGVzaWduIGJlaGluZCBob3cgZWxldmF0aW9uIGlzIGltcGxlbWVudGVkLCBzZWUgdGhlIGRlc2lnbiBkb2MgYXRcbi8vIGh0dHBzOi8vZ29vLmdsL0txMGs5Wi5cblxuLy8gQ29sb3JzIGZvciB1bWJyYSwgcGVudW1icmEsIGFuZCBhbWJpZW50IHNoYWRvd3MuIEFzIGRlc2NyaWJlZCBpbiB0aGUgZGVzaWduIGRvYywgZWFjaCBlbGV2YXRpb25cbi8vIGxldmVsIGlzIGNyZWF0ZWQgdXNpbmcgYSBzZXQgb2YgMyBzaGFkb3cgdmFsdWVzLCBvbmUgZm9yIHVtYnJhICh0aGUgc2hhZG93IHJlcHJlc2VudGluZyB0aGVcbi8vIHNwYWNlIGNvbXBsZXRlbHkgb2JzY3VyZWQgYnkgYW4gb2JqZWN0IHJlbGF0aXZlIHRvIGl0cyBsaWdodCBzb3VyY2UpLCBvbmUgZm9yIHBlbnVtYnJhICh0aGVcbi8vIHNwYWNlIHBhcnRpYWxseSBvYnNjdXJlZCBieSBhbiBvYmplY3QpLCBhbmQgb25lIGZvciBhbWJpZW50ICh0aGUgc3BhY2Ugd2hpY2ggY29udGFpbnMgdGhlIG9iamVjdFxuLy8gaXRzZWxmKS4gRm9yIGEgZnVydGhlciBleHBsYW5hdGlvbiBvZiB0aGVzZSB0ZXJtcyBhbmQgdGhlaXIgbWVhbmluZ3MsIHNlZVxuLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVW1icmEsX3BlbnVtYnJhX2FuZF9hbnR1bWJyYS5cblxuLy8gTWFwcyBmb3IgdGhlIGRpZmZlcmVudCBzaGFkb3cgc2V0cyBhbmQgdGhlaXIgdmFsdWVzIHdpdGhpbiBlYWNoIHotc3BhY2UuIFRoZXNlIHZhbHVlcyB3ZXJlXG4vLyBjcmVhdGVkIGJ5IHRha2luZyBhIGZldyByZWZlcmVuY2Ugc2hhZG93IHNldHMgY3JlYXRlZCBieSBHb29nbGUncyBEZXNpZ25lcnMgYW5kIGludGVycG9sYXRpbmdcbi8vIGFsbCBvZiB0aGUgdmFsdWVzIGJldHdlZW4gdGhlbS5cblxuQGZ1bmN0aW9uIF9nZXQtdW1icmEtbWFwKCRjb2xvciwgJG9wYWNpdHkpIHtcbiAgJHNoYWRvdy1jb2xvcjogaWYodHlwZS1vZigkY29sb3IpID09IGNvbG9yLCByZ2JhKCRjb2xvciwgJG9wYWNpdHkgKiAwLjIpLCAkY29sb3IpO1xuXG4gIEByZXR1cm4gKFxuICAgIDA6ICcwcHggMHB4IDBweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTogJzBweCAycHggMXB4IC0xcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjogJzBweCAzcHggMXB4IC0ycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMzogJzBweCAzcHggM3B4IC0ycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNDogJzBweCAycHggNHB4IC0xcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNTogJzBweCAzcHggNXB4IC0xcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNjogJzBweCAzcHggNXB4IC0xcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNzogJzBweCA0cHggNXB4IC0ycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgODogJzBweCA1cHggNXB4IC0zcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgOTogJzBweCA1cHggNnB4IC0zcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTA6ICcwcHggNnB4IDZweCAtM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDExOiAnMHB4IDZweCA3cHggLTRweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMjogJzBweCA3cHggOHB4IC00cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTM6ICcwcHggN3B4IDhweCAtNHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE0OiAnMHB4IDdweCA5cHggLTRweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNTogJzBweCA4cHggOXB4IC01cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTY6ICcwcHggOHB4IDEwcHggLTVweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNzogJzBweCA4cHggMTFweCAtNXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE4OiAnMHB4IDlweCAxMXB4IC01cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTk6ICcwcHggOXB4IDEycHggLTZweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMDogJzBweCAxMHB4IDEzcHggLTZweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMTogJzBweCAxMHB4IDEzcHggLTZweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMjogJzBweCAxMHB4IDE0cHggLTZweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMzogJzBweCAxMXB4IDE0cHggLTdweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyNDogJzBweCAxMXB4IDE1cHggLTdweCAjeyRzaGFkb3ctY29sb3J9J1xuICApO1xufVxuXG5AZnVuY3Rpb24gX2dldC1wZW51bWJyYS1tYXAoJGNvbG9yLCAkb3BhY2l0eSkge1xuICAkc2hhZG93LWNvbG9yOiBpZih0eXBlLW9mKCRjb2xvcikgPT0gY29sb3IsIHJnYmEoJGNvbG9yLCAkb3BhY2l0eSAqIDAuMTQpLCAkY29sb3IpO1xuXG4gIEByZXR1cm4gKFxuICAgIDA6ICcwcHggMHB4IDBweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTogJzBweCAxcHggMXB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyOiAnMHB4IDJweCAycHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDM6ICcwcHggM3B4IDRweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNDogJzBweCA0cHggNXB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA1OiAnMHB4IDVweCA4cHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDY6ICcwcHggNnB4IDEwcHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDc6ICcwcHggN3B4IDEwcHggMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDg6ICcwcHggOHB4IDEwcHggMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDk6ICcwcHggOXB4IDEycHggMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEwOiAnMHB4IDEwcHggMTRweCAxcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTE6ICcwcHggMTFweCAxNXB4IDFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMjogJzBweCAxMnB4IDE3cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEzOiAnMHB4IDEzcHggMTlweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTQ6ICcwcHggMTRweCAyMXB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNTogJzBweCAxNXB4IDIycHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE2OiAnMHB4IDE2cHggMjRweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTc6ICcwcHggMTdweCAyNnB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxODogJzBweCAxOHB4IDI4cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE5OiAnMHB4IDE5cHggMjlweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjA6ICcwcHggMjBweCAzMXB4IDNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMTogJzBweCAyMXB4IDMzcHggM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIyOiAnMHB4IDIycHggMzVweCAzcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjM6ICcwcHggMjNweCAzNnB4IDNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyNDogJzBweCAyNHB4IDM4cHggM3B4ICN7JHNoYWRvdy1jb2xvcn0nXG4gICk7XG59XG5cbkBmdW5jdGlvbiBfZ2V0LWFtYmllbnQtbWFwKCRjb2xvciwgJG9wYWNpdHkpIHtcbiAgJHNoYWRvdy1jb2xvcjogaWYodHlwZS1vZigkY29sb3IpID09IGNvbG9yLCByZ2JhKCRjb2xvciwgJG9wYWNpdHkgKiAwLjEyKSwgJGNvbG9yKTtcblxuICBAcmV0dXJuIChcbiAgICAwOiAnMHB4IDBweCAwcHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE6ICcwcHggMXB4IDNweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjogJzBweCAxcHggNXB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAzOiAnMHB4IDFweCA4cHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDQ6ICcwcHggMXB4IDEwcHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDU6ICcwcHggMXB4IDE0cHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDY6ICcwcHggMXB4IDE4cHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDc6ICcwcHggMnB4IDE2cHggMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDg6ICcwcHggM3B4IDE0cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDk6ICcwcHggM3B4IDE2cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEwOiAnMHB4IDRweCAxOHB4IDNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMTogJzBweCA0cHggMjBweCAzcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTI6ICcwcHggNXB4IDIycHggNHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEzOiAnMHB4IDVweCAyNHB4IDRweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNDogJzBweCA1cHggMjZweCA0cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTU6ICcwcHggNnB4IDI4cHggNXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE2OiAnMHB4IDZweCAzMHB4IDVweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNzogJzBweCA2cHggMzJweCA1cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTg6ICcwcHggN3B4IDM0cHggNnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE5OiAnMHB4IDdweCAzNnB4IDZweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMDogJzBweCA4cHggMzhweCA3cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjE6ICcwcHggOHB4IDQwcHggN3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIyOiAnMHB4IDhweCA0MnB4IDdweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMzogJzBweCA5cHggNDRweCA4cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjQ6ICcwcHggOXB4IDQ2cHggOHB4ICN7JHNoYWRvdy1jb2xvcn0nXG4gICk7XG59XG5cbi8vIFRoZSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciBlbGV2YXRpb24gdHJhbnNpdGlvbnMuXG4kbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLWR1cmF0aW9uOiAyODBtcyAhZGVmYXVsdDtcblxuLy8gVGhlIGRlZmF1bHQgZWFzaW5nIHZhbHVlIGZvciBlbGV2YXRpb24gdHJhbnNpdGlvbnMuXG4kbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogJG1hdC1mYXN0LW91dC1zbG93LWluLXRpbWluZy1mdW5jdGlvbjtcblxuLy8gVGhlIGRlZmF1bHQgY29sb3IgZm9yIGVsZXZhdGlvbiBzaGFkb3dzLlxuJG1hdC1lbGV2YXRpb24tY29sb3I6IGJsYWNrICFkZWZhdWx0O1xuXG4vLyBUaGUgZGVmYXVsdCBvcGFjaXR5IHNjYWxpbmcgdmFsdWUgZm9yIGVsZXZhdGlvbiBzaGFkb3dzLlxuJG1hdC1lbGV2YXRpb24tb3BhY2l0eTogMSAhZGVmYXVsdDtcblxuLy8gUHJlZml4IGZvciBlbGV2YXRpb24tcmVsYXRlZCBzZWxlY3RvcnMuXG4kX21hdC1lbGV2YXRpb24tcHJlZml4OiAnbWF0LWVsZXZhdGlvbi16JztcblxuLy8gQXBwbGllcyB0aGUgY29ycmVjdCBjc3MgcnVsZXMgdG8gYW4gZWxlbWVudCB0byBnaXZlIGl0IHRoZSBlbGV2YXRpb24gc3BlY2lmaWVkIGJ5ICR6VmFsdWUuXG4vLyBUaGUgJHpWYWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjQuXG5AbWl4aW4gbWF0LWVsZXZhdGlvbigkelZhbHVlLCAkY29sb3I6ICRtYXQtZWxldmF0aW9uLWNvbG9yLCAkb3BhY2l0eTogJG1hdC1lbGV2YXRpb24tb3BhY2l0eSkge1xuICBAaWYgdHlwZS1vZigkelZhbHVlKSAhPSBudW1iZXIgb3Igbm90IHVuaXRsZXNzKCR6VmFsdWUpIHtcbiAgICBAZXJyb3IgJyR6VmFsdWUgbXVzdCBiZSBhIHVuaXRsZXNzIG51bWJlcic7XG4gIH1cbiAgQGlmICR6VmFsdWUgPCAwIG9yICR6VmFsdWUgPiAyNCB7XG4gICAgQGVycm9yICckelZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyNCc7XG4gIH1cblxuICBib3gtc2hhZG93OiAje21hcC1nZXQoX2dldC11bWJyYS1tYXAoJGNvbG9yLCAkb3BhY2l0eSksICR6VmFsdWUpfSxcbiAgICAgICAgICAgICAgI3ttYXAtZ2V0KF9nZXQtcGVudW1icmEtbWFwKCRjb2xvciwgJG9wYWNpdHkpLCAkelZhbHVlKX0sXG4gICAgICAgICAgICAgICN7bWFwLWdldChfZ2V0LWFtYmllbnQtbWFwKCRjb2xvciwgJG9wYWNpdHkpLCAkelZhbHVlKX07XG59XG5cbkBtaXhpbiBfbWF0LXRoZW1lLWVsZXZhdGlvbigkelZhbHVlLCAkdGhlbWUsICRvcGFjaXR5OiAkbWF0LWVsZXZhdGlvbi1vcGFjaXR5KSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRlbGV2YXRpb24tY29sb3I6IG1hcC1nZXQoJGZvcmVncm91bmQsIGVsZXZhdGlvbik7XG4gICRlbGV2YXRpb24tY29sb3Itb3ItZGVmYXVsdDogaWYoJGVsZXZhdGlvbi1jb2xvciA9PSBudWxsLCAkbWF0LWVsZXZhdGlvbi1jb2xvciwgJGVsZXZhdGlvbi1jb2xvcik7XG5cbiAgQGluY2x1ZGUgbWF0LWVsZXZhdGlvbigkelZhbHVlLCAkZWxldmF0aW9uLWNvbG9yLW9yLWRlZmF1bHQsICRvcGFjaXR5KTtcbn1cblxuLy8gQXBwbGllcyB0aGUgZWxldmF0aW9uIHRvIGFuIGVsZW1lbnQgaW4gYSBtYW5uZXIgdGhhdCBhbGxvd3Ncbi8vIGNvbnN1bWVycyB0byBvdmVycmlkZSBpdCB2aWEgdGhlIE1hdGVyaWFsIGVsZXZhdGlvbiBjbGFzc2VzLlxuQG1peGluIG1hdC1vdmVycmlkYWJsZS1lbGV2YXRpb24oXG4gICAgJHpWYWx1ZSxcbiAgICAkY29sb3I6ICRtYXQtZWxldmF0aW9uLWNvbG9yLFxuICAgICRvcGFjaXR5OiAkbWF0LWVsZXZhdGlvbi1vcGFjaXR5KSB7XG4gICY6bm90KFtjbGFzcyo9JyN7JF9tYXQtZWxldmF0aW9uLXByZWZpeH0nXSkge1xuICAgIEBpbmNsdWRlIG1hdC1lbGV2YXRpb24oJHpWYWx1ZSwgJGNvbG9yLCAkb3BhY2l0eSk7XG4gIH1cbn1cblxuQG1peGluIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKCR6VmFsdWUsICR0aGVtZSwgJG9wYWNpdHk6ICRtYXQtZWxldmF0aW9uLW9wYWNpdHkpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGVsZXZhdGlvbi1jb2xvcjogbWFwLWdldCgkZm9yZWdyb3VuZCwgZWxldmF0aW9uKTtcbiAgJGVsZXZhdGlvbi1jb2xvci1vci1kZWZhdWx0OiBpZigkZWxldmF0aW9uLWNvbG9yID09IG51bGwsICRtYXQtZWxldmF0aW9uLWNvbG9yLCAkZWxldmF0aW9uLWNvbG9yKTtcblxuICBAaW5jbHVkZSBtYXQtb3ZlcnJpZGFibGUtZWxldmF0aW9uKCR6VmFsdWUsICRlbGV2YXRpb24tY29sb3Itb3ItZGVmYXVsdCwgJG9wYWNpdHkpO1xufVxuXG4vLyBSZXR1cm5zIGEgc3RyaW5nIHRoYXQgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvciBhIHRyYW5zaXRpb24gcHJvcGVydHkgZm9yIGVsZXZhdGlvbi5cbi8vIENhbGxpbmcgdGhpcyBmdW5jdGlvbiBkaXJlY3RseSBpcyB1c2VmdWwgaW4gc2l0dWF0aW9ucyB3aGVyZSBhIGNvbXBvbmVudCBuZWVkcyB0byB0cmFuc2l0aW9uXG4vLyBtb3JlIHRoYW4gb25lIHByb3BlcnR5LlxuLy9cbi8vIC5mb28ge1xuLy8gICB0cmFuc2l0aW9uOiBtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tcHJvcGVydHktdmFsdWUoKSwgb3BhY2l0eSAxMDBtcyBlYXNlO1xuLy8gfVxuQGZ1bmN0aW9uIG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi1wcm9wZXJ0eS12YWx1ZShcbiAgICAkZHVyYXRpb246ICRtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tZHVyYXRpb24sXG4gICAgJGVhc2luZzogJG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pIHtcbiAgQHJldHVybiBib3gtc2hhZG93ICN7JGR1cmF0aW9ufSAjeyRlYXNpbmd9O1xufVxuXG4vLyBBcHBsaWVzIHRoZSBjb3JyZWN0IGNzcyBydWxlcyBuZWVkZWQgdG8gaGF2ZSBhbiBlbGVtZW50IHRyYW5zaXRpb24gYmV0d2VlbiBlbGV2YXRpb25zLlxuLy8gVGhpcyBtaXhpbiBzaG91bGQgYmUgYXBwbGllZCB0byBlbGVtZW50cyB3aG9zZSBlbGV2YXRpb24gdmFsdWVzIHdpbGwgY2hhbmdlIGRlcGVuZGluZyBvbiB0aGVpclxuLy8gY29udGV4dCAoZS5nLiB3aGVuIGFjdGl2ZSBvciBkaXNhYmxlZCkuXG4vL1xuLy8gTk9URSh0cmF2aXNrYXVmbWFuKTogQm90aCB0aGlzIG1peGluIGFuZCB0aGUgYWJvdmUgZnVuY3Rpb24gdXNlIGRlZmF1bHQgcGFyYW1ldGVycyBzbyB0aGV5IGNhblxuLy8gYmUgdXNlZCBpbiB0aGUgc2FtZSB3YXkgYnkgY2xpZW50cy5cbkBtaXhpbiBtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24oXG4gICAgJGR1cmF0aW9uOiAkbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLWR1cmF0aW9uLFxuICAgICRlYXNpbmc6ICRtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSB7XG4gIHRyYW5zaXRpb246IG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi1wcm9wZXJ0eS12YWx1ZSgkZHVyYXRpb24sICRlYXNpbmcpO1xufVxuXG4vLyBDb2xvciBwYWxldHRlcyBmcm9tIHRoZSBNYXRlcmlhbCBEZXNpZ24gc3BlYy5cbi8vIFNlZSBodHRwczovL21hdGVyaWFsLmlvL2Rlc2lnbi9jb2xvci9cbi8vXG4vLyBDb250cmFzdCBjb2xvcnMgYXJlIGhhcmQtY29kZWQgYmVjYXVzZSBpdCBpcyB0b28gZGlmZmljdWx0IChwcm9iYWJseSBpbXBvc3NpYmxlKSB0b1xuLy8gY2FsY3VsYXRlIHRoZW0uIFRoZXNlIGNvbnRyYXN0IGNvbG9ycyBhcmUgcHVsbGVkIGZyb20gdGhlIHB1YmxpYyBNYXRlcmlhbCBEZXNpZ24gc3BlYyBzd2F0Y2hlcy5cbi8vIFdoaWxlIHRoZSBjb250cmFzdCBjb2xvcnMgaW4gdGhlIHNwZWMgYXJlIG5vdCBwcmVzY3JpcHRpdmUsIHdlIHVzZSB0aGVtIGZvciBjb252ZW5pZW5jZS5cblxuXG4vLyBAZGVwcmVjYXRlZCByZW5hbWVkIHRvICRkYXJrLXByaW1hcnktdGV4dC5cbi8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjBcbiRibGFjay04Ny1vcGFjaXR5OiByZ2JhKGJsYWNrLCAwLjg3KTtcbi8vIEBkZXByZWNhdGVkIHJlbmFtZWQgdG8gJGxpZ2h0LXByaW1hcnktdGV4dC5cbi8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjBcbiR3aGl0ZS04Ny1vcGFjaXR5OiByZ2JhKHdoaXRlLCAwLjg3KTtcbi8vIEBkZXByZWNhdGVkIHVzZSAkZGFyay1bc2Vjb25kYXJ5LXRleHQsZGlzYWJsZWQtdGV4dCxkaXZpZGVycyxmb2N1c2VkXSBpbnN0ZWFkLlxuLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMFxuJGJsYWNrLTEyLW9wYWNpdHk6IHJnYmEoYmxhY2ssIDAuMTIpO1xuLy8gQGRlcHJlY2F0ZWQgdXNlICRsaWdodC1bc2Vjb25kYXJ5LXRleHQsZGlzYWJsZWQtdGV4dCxkaXZpZGVycyxmb2N1c2VkXSBpbnN0ZWFkLlxuLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMFxuJHdoaXRlLTEyLW9wYWNpdHk6IHJnYmEod2hpdGUsIDAuMTIpO1xuLy8gQGRlcHJlY2F0ZWQgdXNlICRkYXJrLVtzZWNvbmRhcnktdGV4dCxkaXNhYmxlZC10ZXh0LGRpdmlkZXJzLGZvY3VzZWRdIGluc3RlYWQuXG4vLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wXG4kYmxhY2stNi1vcGFjaXR5OiByZ2JhKGJsYWNrLCAwLjA2KTtcbi8vIEBkZXByZWNhdGVkIHVzZSAkbGlnaHQtW3NlY29uZGFyeS10ZXh0LGRpc2FibGVkLXRleHQsZGl2aWRlcnMsZm9jdXNlZF0gaW5zdGVhZC5cbi8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjBcbiR3aGl0ZS02LW9wYWNpdHk6IHJnYmEod2hpdGUsIDAuMDYpO1xuXG4kZGFyay1wcmltYXJ5LXRleHQ6IHJnYmEoYmxhY2ssIDAuODcpO1xuJGRhcmstc2Vjb25kYXJ5LXRleHQ6IHJnYmEoYmxhY2ssIDAuNTQpO1xuJGRhcmstZGlzYWJsZWQtdGV4dDogcmdiYShibGFjaywgMC4zOCk7XG4kZGFyay1kaXZpZGVyczogcmdiYShibGFjaywgMC4xMik7XG4kZGFyay1mb2N1c2VkOiByZ2JhKGJsYWNrLCAwLjEyKTtcbiRsaWdodC1wcmltYXJ5LXRleHQ6IHdoaXRlO1xuJGxpZ2h0LXNlY29uZGFyeS10ZXh0OiByZ2JhKHdoaXRlLCAwLjcpO1xuJGxpZ2h0LWRpc2FibGVkLXRleHQ6IHJnYmEod2hpdGUsIDAuNSk7XG4kbGlnaHQtZGl2aWRlcnM6IHJnYmEod2hpdGUsIDAuMTIpO1xuJGxpZ2h0LWZvY3VzZWQ6IHJnYmEod2hpdGUsIDAuMTIpO1xuXG4kbWF0LXJlZDogKFxuICA1MDogI2ZmZWJlZSxcbiAgMTAwOiAjZmZjZGQyLFxuICAyMDA6ICNlZjlhOWEsXG4gIDMwMDogI2U1NzM3MyxcbiAgNDAwOiAjZWY1MzUwLFxuICA1MDA6ICNmNDQzMzYsXG4gIDYwMDogI2U1MzkzNSxcbiAgNzAwOiAjZDMyZjJmLFxuICA4MDA6ICNjNjI4MjgsXG4gIDkwMDogI2I3MWMxYyxcbiAgQTEwMDogI2ZmOGE4MCxcbiAgQTIwMDogI2ZmNTI1MixcbiAgQTQwMDogI2ZmMTc0NCxcbiAgQTcwMDogI2Q1MDAwMCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LXBpbms6IChcbiAgNTA6ICNmY2U0ZWMsXG4gIDEwMDogI2Y4YmJkMCxcbiAgMjAwOiAjZjQ4ZmIxLFxuICAzMDA6ICNmMDYyOTIsXG4gIDQwMDogI2VjNDA3YSxcbiAgNTAwOiAjZTkxZTYzLFxuICA2MDA6ICNkODFiNjAsXG4gIDcwMDogI2MyMTg1YixcbiAgODAwOiAjYWQxNDU3LFxuICA5MDA6ICM4ODBlNGYsXG4gIEExMDA6ICNmZjgwYWIsXG4gIEEyMDA6ICNmZjQwODEsXG4gIEE0MDA6ICNmNTAwNTcsXG4gIEE3MDA6ICNjNTExNjIsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1wdXJwbGU6IChcbiAgNTA6ICNmM2U1ZjUsXG4gIDEwMDogI2UxYmVlNyxcbiAgMjAwOiAjY2U5M2Q4LFxuICAzMDA6ICNiYTY4YzgsXG4gIDQwMDogI2FiNDdiYyxcbiAgNTAwOiAjOWMyN2IwLFxuICA2MDA6ICM4ZTI0YWEsXG4gIDcwMDogIzdiMWZhMixcbiAgODAwOiAjNmExYjlhLFxuICA5MDA6ICM0YTE0OGMsXG4gIEExMDA6ICNlYTgwZmMsXG4gIEEyMDA6ICNlMDQwZmIsXG4gIEE0MDA6ICNkNTAwZjksXG4gIEE3MDA6ICNhYTAwZmYsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWRlZXAtcHVycGxlOiAoXG4gIDUwOiAjZWRlN2Y2LFxuICAxMDA6ICNkMWM0ZTksXG4gIDIwMDogI2IzOWRkYixcbiAgMzAwOiAjOTU3NWNkLFxuICA0MDA6ICM3ZTU3YzIsXG4gIDUwMDogIzY3M2FiNyxcbiAgNjAwOiAjNWUzNWIxLFxuICA3MDA6ICM1MTJkYTgsXG4gIDgwMDogIzQ1MjdhMCxcbiAgOTAwOiAjMzExYjkyLFxuICBBMTAwOiAjYjM4OGZmLFxuICBBMjAwOiAjN2M0ZGZmLFxuICBBNDAwOiAjNjUxZmZmLFxuICBBNzAwOiAjNjIwMGVhLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1pbmRpZ286IChcbiAgNTA6ICNlOGVhZjYsXG4gIDEwMDogI2M1Y2FlOSxcbiAgMjAwOiAjOWZhOGRhLFxuICAzMDA6ICM3OTg2Y2IsXG4gIDQwMDogIzVjNmJjMCxcbiAgNTAwOiAjM2Y1MWI1LFxuICA2MDA6ICMzOTQ5YWIsXG4gIDcwMDogIzMwM2Y5ZixcbiAgODAwOiAjMjgzNTkzLFxuICA5MDA6ICMxYTIzN2UsXG4gIEExMDA6ICM4YzllZmYsXG4gIEEyMDA6ICM1MzZkZmUsXG4gIEE0MDA6ICMzZDVhZmUsXG4gIEE3MDA6ICMzMDRmZmUsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWJsdWU6IChcbiAgNTA6ICNlM2YyZmQsXG4gIDEwMDogI2JiZGVmYixcbiAgMjAwOiAjOTBjYWY5LFxuICAzMDA6ICM2NGI1ZjYsXG4gIDQwMDogIzQyYTVmNSxcbiAgNTAwOiAjMjE5NmYzLFxuICA2MDA6ICMxZTg4ZTUsXG4gIDcwMDogIzE5NzZkMixcbiAgODAwOiAjMTU2NWMwLFxuICA5MDA6ICMwZDQ3YTEsXG4gIEExMDA6ICM4MmIxZmYsXG4gIEEyMDA6ICM0NDhhZmYsXG4gIEE0MDA6ICMyOTc5ZmYsXG4gIEE3MDA6ICMyOTYyZmYsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1saWdodC1ibHVlOiAoXG4gIDUwOiAjZTFmNWZlLFxuICAxMDA6ICNiM2U1ZmMsXG4gIDIwMDogIzgxZDRmYSxcbiAgMzAwOiAjNGZjM2Y3LFxuICA0MDA6ICMyOWI2ZjYsXG4gIDUwMDogIzAzYTlmNCxcbiAgNjAwOiAjMDM5YmU1LFxuICA3MDA6ICMwMjg4ZDEsXG4gIDgwMDogIzAyNzdiZCxcbiAgOTAwOiAjMDE1NzliLFxuICBBMTAwOiAjODBkOGZmLFxuICBBMjAwOiAjNDBjNGZmLFxuICBBNDAwOiAjMDBiMGZmLFxuICBBNzAwOiAjMDA5MWVhLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWN5YW46IChcbiAgNTA6ICNlMGY3ZmEsXG4gIDEwMDogI2IyZWJmMixcbiAgMjAwOiAjODBkZWVhLFxuICAzMDA6ICM0ZGQwZTEsXG4gIDQwMDogIzI2YzZkYSxcbiAgNTAwOiAjMDBiY2Q0LFxuICA2MDA6ICMwMGFjYzEsXG4gIDcwMDogIzAwOTdhNyxcbiAgODAwOiAjMDA4MzhmLFxuICA5MDA6ICMwMDYwNjQsXG4gIEExMDA6ICM4NGZmZmYsXG4gIEEyMDA6ICMxOGZmZmYsXG4gIEE0MDA6ICMwMGU1ZmYsXG4gIEE3MDA6ICMwMGI4ZDQsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC10ZWFsOiAoXG4gIDUwOiAjZTBmMmYxLFxuICAxMDA6ICNiMmRmZGIsXG4gIDIwMDogIzgwY2JjNCxcbiAgMzAwOiAjNGRiNmFjLFxuICA0MDA6ICMyNmE2OWEsXG4gIDUwMDogIzAwOTY4OCxcbiAgNjAwOiAjMDA4OTdiLFxuICA3MDA6ICMwMDc5NmIsXG4gIDgwMDogIzAwNjk1YyxcbiAgOTAwOiAjMDA0ZDQwLFxuICBBMTAwOiAjYTdmZmViLFxuICBBMjAwOiAjNjRmZmRhLFxuICBBNDAwOiAjMWRlOWI2LFxuICBBNzAwOiAjMDBiZmE1LFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtZ3JlZW46IChcbiAgNTA6ICNlOGY1ZTksXG4gIDEwMDogI2M4ZTZjOSxcbiAgMjAwOiAjYTVkNmE3LFxuICAzMDA6ICM4MWM3ODQsXG4gIDQwMDogIzY2YmI2YSxcbiAgNTAwOiAjNGNhZjUwLFxuICA2MDA6ICM0M2EwNDcsXG4gIDcwMDogIzM4OGUzYyxcbiAgODAwOiAjMmU3ZDMyLFxuICA5MDA6ICMxYjVlMjAsXG4gIEExMDA6ICNiOWY2Y2EsXG4gIEEyMDA6ICM2OWYwYWUsXG4gIEE0MDA6ICMwMGU2NzYsXG4gIEE3MDA6ICMwMGM4NTMsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWxpZ2h0LWdyZWVuOiAoXG4gIDUwOiAjZjFmOGU5LFxuICAxMDA6ICNkY2VkYzgsXG4gIDIwMDogI2M1ZTFhNSxcbiAgMzAwOiAjYWVkNTgxLFxuICA0MDA6ICM5Y2NjNjUsXG4gIDUwMDogIzhiYzM0YSxcbiAgNjAwOiAjN2NiMzQyLFxuICA3MDA6ICM2ODlmMzgsXG4gIDgwMDogIzU1OGIyZixcbiAgOTAwOiAjMzM2OTFlLFxuICBBMTAwOiAjY2NmZjkwLFxuICBBMjAwOiAjYjJmZjU5LFxuICBBNDAwOiAjNzZmZjAzLFxuICBBNzAwOiAjNjRkZDE3LFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWxpbWU6IChcbiAgNTA6ICNmOWZiZTcsXG4gIDEwMDogI2YwZjRjMyxcbiAgMjAwOiAjZTZlZTljLFxuICAzMDA6ICNkY2U3NzUsXG4gIDQwMDogI2Q0ZTE1NyxcbiAgNTAwOiAjY2RkYzM5LFxuICA2MDA6ICNjMGNhMzMsXG4gIDcwMDogI2FmYjQyYixcbiAgODAwOiAjOWU5ZDI0LFxuICA5MDA6ICM4Mjc3MTcsXG4gIEExMDA6ICNmNGZmODEsXG4gIEEyMDA6ICNlZWZmNDEsXG4gIEE0MDA6ICNjNmZmMDAsXG4gIEE3MDA6ICNhZWVhMDAsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LXllbGxvdzogKFxuICA1MDogI2ZmZmRlNyxcbiAgMTAwOiAjZmZmOWM0LFxuICAyMDA6ICNmZmY1OWQsXG4gIDMwMDogI2ZmZjE3NixcbiAgNDAwOiAjZmZlZTU4LFxuICA1MDA6ICNmZmViM2IsXG4gIDYwMDogI2ZkZDgzNSxcbiAgNzAwOiAjZmJjMDJkLFxuICA4MDA6ICNmOWE4MjUsXG4gIDkwMDogI2Y1N2YxNyxcbiAgQTEwMDogI2ZmZmY4ZCxcbiAgQTIwMDogI2ZmZmYwMCxcbiAgQTQwMDogI2ZmZWEwMCxcbiAgQTcwMDogI2ZmZDYwMCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1hbWJlcjogKFxuICA1MDogI2ZmZjhlMSxcbiAgMTAwOiAjZmZlY2IzLFxuICAyMDA6ICNmZmUwODIsXG4gIDMwMDogI2ZmZDU0ZixcbiAgNDAwOiAjZmZjYTI4LFxuICA1MDA6ICNmZmMxMDcsXG4gIDYwMDogI2ZmYjMwMCxcbiAgNzAwOiAjZmZhMDAwLFxuICA4MDA6ICNmZjhmMDAsXG4gIDkwMDogI2ZmNmYwMCxcbiAgQTEwMDogI2ZmZTU3ZixcbiAgQTIwMDogI2ZmZDc0MCxcbiAgQTQwMDogI2ZmYzQwMCxcbiAgQTcwMDogI2ZmYWIwMCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1vcmFuZ2U6IChcbiAgNTA6ICNmZmYzZTAsXG4gIDEwMDogI2ZmZTBiMixcbiAgMjAwOiAjZmZjYzgwLFxuICAzMDA6ICNmZmI3NGQsXG4gIDQwMDogI2ZmYTcyNixcbiAgNTAwOiAjZmY5ODAwLFxuICA2MDA6ICNmYjhjMDAsXG4gIDcwMDogI2Y1N2MwMCxcbiAgODAwOiAjZWY2YzAwLFxuICA5MDA6ICNlNjUxMDAsXG4gIEExMDA6ICNmZmQxODAsXG4gIEEyMDA6ICNmZmFiNDAsXG4gIEE0MDA6ICNmZjkxMDAsXG4gIEE3MDA6ICNmZjZkMDAsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6IGJsYWNrLFxuICApXG4pO1xuXG4kbWF0LWRlZXAtb3JhbmdlOiAoXG4gIDUwOiAjZmJlOWU3LFxuICAxMDA6ICNmZmNjYmMsXG4gIDIwMDogI2ZmYWI5MSxcbiAgMzAwOiAjZmY4YTY1LFxuICA0MDA6ICNmZjcwNDMsXG4gIDUwMDogI2ZmNTcyMixcbiAgNjAwOiAjZjQ1MTFlLFxuICA3MDA6ICNlNjRhMTksXG4gIDgwMDogI2Q4NDMxNSxcbiAgOTAwOiAjYmYzNjBjLFxuICBBMTAwOiAjZmY5ZTgwLFxuICBBMjAwOiAjZmY2ZTQwLFxuICBBNDAwOiAjZmYzZDAwLFxuICBBNzAwOiAjZGQyYzAwLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1icm93bjogKFxuICA1MDogI2VmZWJlOSxcbiAgMTAwOiAjZDdjY2M4LFxuICAyMDA6ICNiY2FhYTQsXG4gIDMwMDogI2ExODg3ZixcbiAgNDAwOiAjOGQ2ZTYzLFxuICA1MDA6ICM3OTU1NDgsXG4gIDYwMDogIzZkNGM0MSxcbiAgNzAwOiAjNWQ0MDM3LFxuICA4MDA6ICM0ZTM0MmUsXG4gIDkwMDogIzNlMjcyMyxcbiAgQTEwMDogI2Q3Y2NjOCxcbiAgQTIwMDogI2JjYWFhNCxcbiAgQTQwMDogIzhkNmU2MyxcbiAgQTcwMDogIzVkNDAzNyxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1ncmV5OiAoXG4gIDUwOiAjZmFmYWZhLFxuICAxMDA6ICNmNWY1ZjUsXG4gIDIwMDogI2VlZWVlZSxcbiAgMzAwOiAjZTBlMGUwLFxuICA0MDA6ICNiZGJkYmQsXG4gIDUwMDogIzllOWU5ZSxcbiAgNjAwOiAjNzU3NTc1LFxuICA3MDA6ICM2MTYxNjEsXG4gIDgwMDogIzQyNDI0MixcbiAgOTAwOiAjMjEyMTIxLFxuICBBMTAwOiAjZmZmZmZmLFxuICBBMjAwOiAjZWVlZWVlLFxuICBBNDAwOiAjYmRiZGJkLFxuICBBNzAwOiAjNjE2MTYxLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbi8vIEFsaWFzIGZvciBhbHRlcm5hdGUgc3BlbGxpbmcuXG4kbWF0LWdyYXk6ICRtYXQtZ3JleTtcblxuJG1hdC1ibHVlLWdyZXk6IChcbiAgNTA6ICNlY2VmZjEsXG4gIDEwMDogI2NmZDhkYyxcbiAgMjAwOiAjYjBiZWM1LFxuICAzMDA6ICM5MGE0YWUsXG4gIDQwMDogIzc4OTA5YyxcbiAgNTAwOiAjNjA3ZDhiLFxuICA2MDA6ICM1NDZlN2EsXG4gIDcwMDogIzQ1NWE2NCxcbiAgODAwOiAjMzc0NzRmLFxuICA5MDA6ICMyNjMyMzgsXG4gIEExMDA6ICNjZmQ4ZGMsXG4gIEEyMDA6ICNiMGJlYzUsXG4gIEE0MDA6ICM3ODkwOWMsXG4gIEE3MDA6ICM0NTVhNjQsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuLy8gQWxpYXMgZm9yIGFsdGVybmF0ZSBzcGVsbGluZy5cbiRtYXQtYmx1ZS1ncmF5OiAkbWF0LWJsdWUtZ3JleTtcblxuXG4vLyBCYWNrZ3JvdW5kIHBhbGV0dGUgZm9yIGxpZ2h0IHRoZW1lcy5cbiRtYXQtbGlnaHQtdGhlbWUtYmFja2dyb3VuZDogKFxuICBzdGF0dXMtYmFyOiBtYXBfZ2V0KCRtYXQtZ3JleSwgMzAwKSxcbiAgYXBwLWJhcjogICAgbWFwX2dldCgkbWF0LWdyZXksIDEwMCksXG4gIGJhY2tncm91bmQ6IG1hcF9nZXQoJG1hdC1ncmV5LCA1MCksXG4gIGhvdmVyOiAgICAgIHJnYmEoYmxhY2ssIDAuMDQpLCAvLyBUT0RPKGthcmEpOiBjaGVjayBzdHlsZSB3aXRoIE1hdGVyaWFsIERlc2lnbiBVWFxuICBjYXJkOiAgICAgICB3aGl0ZSxcbiAgZGlhbG9nOiAgICAgd2hpdGUsXG4gIGRpc2FibGVkLWJ1dHRvbjogcmdiYShibGFjaywgMC4xMiksXG4gIHJhaXNlZC1idXR0b246IHdoaXRlLFxuICBmb2N1c2VkLWJ1dHRvbjogJGRhcmstZm9jdXNlZCxcbiAgc2VsZWN0ZWQtYnV0dG9uOiBtYXBfZ2V0KCRtYXQtZ3JleSwgMzAwKSxcbiAgc2VsZWN0ZWQtZGlzYWJsZWQtYnV0dG9uOiBtYXBfZ2V0KCRtYXQtZ3JleSwgNDAwKSxcbiAgZGlzYWJsZWQtYnV0dG9uLXRvZ2dsZTogbWFwX2dldCgkbWF0LWdyZXksIDIwMCksXG4gIHVuc2VsZWN0ZWQtY2hpcDogbWFwX2dldCgkbWF0LWdyZXksIDMwMCksXG4gIGRpc2FibGVkLWxpc3Qtb3B0aW9uOiBtYXBfZ2V0KCRtYXQtZ3JleSwgMjAwKSxcbiAgdG9vbHRpcDogbWFwX2dldCgkbWF0LWdyZXksIDcwMCksXG4pO1xuXG4vLyBCYWNrZ3JvdW5kIHBhbGV0dGUgZm9yIGRhcmsgdGhlbWVzLlxuJG1hdC1kYXJrLXRoZW1lLWJhY2tncm91bmQ6IChcbiAgc3RhdHVzLWJhcjogYmxhY2ssXG4gIGFwcC1iYXI6ICAgIG1hcF9nZXQoJG1hdC1ncmV5LCA5MDApLFxuICBiYWNrZ3JvdW5kOiAjMzAzMDMwLFxuICBob3ZlcjogICAgICByZ2JhKHdoaXRlLCAwLjA0KSwgLy8gVE9ETyhrYXJhKTogY2hlY2sgc3R5bGUgd2l0aCBNYXRlcmlhbCBEZXNpZ24gVVhcbiAgY2FyZDogICAgICAgbWFwX2dldCgkbWF0LWdyZXksIDgwMCksXG4gIGRpYWxvZzogICAgIG1hcF9nZXQoJG1hdC1ncmV5LCA4MDApLFxuICBkaXNhYmxlZC1idXR0b246IHJnYmEod2hpdGUsIDAuMTIpLFxuICByYWlzZWQtYnV0dG9uOiBtYXAtZ2V0KCRtYXQtZ3JleSwgODAwKSxcbiAgZm9jdXNlZC1idXR0b246ICRsaWdodC1mb2N1c2VkLFxuICBzZWxlY3RlZC1idXR0b246IG1hcF9nZXQoJG1hdC1ncmV5LCA5MDApLFxuICBzZWxlY3RlZC1kaXNhYmxlZC1idXR0b246IG1hcF9nZXQoJG1hdC1ncmV5LCA4MDApLFxuICBkaXNhYmxlZC1idXR0b24tdG9nZ2xlOiBibGFjayxcbiAgdW5zZWxlY3RlZC1jaGlwOiBtYXBfZ2V0KCRtYXQtZ3JleSwgNzAwKSxcbiAgZGlzYWJsZWQtbGlzdC1vcHRpb246IGJsYWNrLFxuICB0b29sdGlwOiBtYXBfZ2V0KCRtYXQtZ3JleSwgNzAwKSxcbik7XG5cbi8vIEZvcmVncm91bmQgcGFsZXR0ZSBmb3IgbGlnaHQgdGhlbWVzLlxuJG1hdC1saWdodC10aGVtZS1mb3JlZ3JvdW5kOiAoXG4gIGJhc2U6ICAgICAgICAgICAgICBibGFjayxcbiAgZGl2aWRlcjogICAgICAgICAgICRkYXJrLWRpdmlkZXJzLFxuICBkaXZpZGVyczogICAgICAgICAgJGRhcmstZGl2aWRlcnMsXG4gIGRpc2FibGVkOiAgICAgICAgICAkZGFyay1kaXNhYmxlZC10ZXh0LFxuICBkaXNhYmxlZC1idXR0b246ICAgcmdiYShibGFjaywgMC4yNiksXG4gIGRpc2FibGVkLXRleHQ6ICAgICAkZGFyay1kaXNhYmxlZC10ZXh0LFxuICBlbGV2YXRpb246ICAgICAgICAgYmxhY2ssXG4gIGhpbnQtdGV4dDogICAgICAgICAkZGFyay1kaXNhYmxlZC10ZXh0LFxuICBzZWNvbmRhcnktdGV4dDogICAgJGRhcmstc2Vjb25kYXJ5LXRleHQsXG4gIGljb246ICAgICAgICAgICAgICByZ2JhKGJsYWNrLCAwLjU0KSxcbiAgaWNvbnM6ICAgICAgICAgICAgIHJnYmEoYmxhY2ssIDAuNTQpLFxuICB0ZXh0OiAgICAgICAgICAgICAgcmdiYShibGFjaywgMC44NyksXG4gIHNsaWRlci1taW46ICAgICAgICByZ2JhKGJsYWNrLCAwLjg3KSxcbiAgc2xpZGVyLW9mZjogICAgICAgIHJnYmEoYmxhY2ssIDAuMjYpLFxuICBzbGlkZXItb2ZmLWFjdGl2ZTogcmdiYShibGFjaywgMC4zOCksXG4pO1xuXG4vLyBGb3JlZ3JvdW5kIHBhbGV0dGUgZm9yIGRhcmsgdGhlbWVzLlxuJG1hdC1kYXJrLXRoZW1lLWZvcmVncm91bmQ6IChcbiAgYmFzZTogICAgICAgICAgICAgIHdoaXRlLFxuICBkaXZpZGVyOiAgICAgICAgICAgJGxpZ2h0LWRpdmlkZXJzLFxuICBkaXZpZGVyczogICAgICAgICAgJGxpZ2h0LWRpdmlkZXJzLFxuICBkaXNhYmxlZDogICAgICAgICAgJGxpZ2h0LWRpc2FibGVkLXRleHQsXG4gIGRpc2FibGVkLWJ1dHRvbjogICByZ2JhKHdoaXRlLCAwLjMpLFxuICBkaXNhYmxlZC10ZXh0OiAgICAgJGxpZ2h0LWRpc2FibGVkLXRleHQsXG4gIGVsZXZhdGlvbjogICAgICAgICBibGFjayxcbiAgaGludC10ZXh0OiAgICAgICAgICRsaWdodC1kaXNhYmxlZC10ZXh0LFxuICBzZWNvbmRhcnktdGV4dDogICAgJGxpZ2h0LXNlY29uZGFyeS10ZXh0LFxuICBpY29uOiAgICAgICAgICAgICAgd2hpdGUsXG4gIGljb25zOiAgICAgICAgICAgICB3aGl0ZSxcbiAgdGV4dDogICAgICAgICAgICAgIHdoaXRlLFxuICBzbGlkZXItbWluOiAgICAgICAgd2hpdGUsXG4gIHNsaWRlci1vZmY6ICAgICAgICByZ2JhKHdoaXRlLCAwLjMpLFxuICBzbGlkZXItb2ZmLWFjdGl2ZTogcmdiYSh3aGl0ZSwgMC4zKSxcbik7XG5cblxuXG4vLyBGb3IgYSBnaXZlbiBodWUgaW4gYSBwYWxldHRlLCByZXR1cm4gdGhlIGNvbnRyYXN0IGNvbG9yIGZyb20gdGhlIG1hcCBvZiBjb250cmFzdCBwYWxldHRlcy5cbi8vIEBwYXJhbSAkY29sb3ItbWFwXG4vLyBAcGFyYW0gJGh1ZVxuQGZ1bmN0aW9uIG1hdC1jb250cmFzdCgkcGFsZXR0ZSwgJGh1ZSkge1xuICBAcmV0dXJuIG1hcC1nZXQobWFwLWdldCgkcGFsZXR0ZSwgY29udHJhc3QpLCAkaHVlKTtcbn1cblxuXG4vLyBDcmVhdGVzIGEgbWFwIG9mIGh1ZXMgdG8gY29sb3JzIGZvciBhIHRoZW1lLiBUaGlzIGlzIHVzZWQgdG8gZGVmaW5lIGEgdGhlbWUgcGFsZXR0ZSBpbiB0ZXJtc1xuLy8gb2YgdGhlIE1hdGVyaWFsIERlc2lnbiBodWVzLlxuLy8gQHBhcmFtICRjb2xvci1tYXBcbi8vIEBwYXJhbSAkcHJpbWFyeVxuLy8gQHBhcmFtICRsaWdodGVyXG5AZnVuY3Rpb24gbWF0LXBhbGV0dGUoJGJhc2UtcGFsZXR0ZSwgJGRlZmF1bHQ6IDUwMCwgJGxpZ2h0ZXI6IDEwMCwgJGRhcmtlcjogNzAwLCAkdGV4dDogJGRlZmF1bHQpIHtcbiAgJHJlc3VsdDogbWFwX21lcmdlKCRiYXNlLXBhbGV0dGUsIChcbiAgICBkZWZhdWx0OiBtYXAtZ2V0KCRiYXNlLXBhbGV0dGUsICRkZWZhdWx0KSxcbiAgICBsaWdodGVyOiBtYXAtZ2V0KCRiYXNlLXBhbGV0dGUsICRsaWdodGVyKSxcbiAgICBkYXJrZXI6IG1hcC1nZXQoJGJhc2UtcGFsZXR0ZSwgJGRhcmtlciksXG4gICAgdGV4dDogbWFwLWdldCgkYmFzZS1wYWxldHRlLCAkdGV4dCksXG5cbiAgICBkZWZhdWx0LWNvbnRyYXN0OiBtYXQtY29udHJhc3QoJGJhc2UtcGFsZXR0ZSwgJGRlZmF1bHQpLFxuICAgIGxpZ2h0ZXItY29udHJhc3Q6IG1hdC1jb250cmFzdCgkYmFzZS1wYWxldHRlLCAkbGlnaHRlciksXG4gICAgZGFya2VyLWNvbnRyYXN0OiBtYXQtY29udHJhc3QoJGJhc2UtcGFsZXR0ZSwgJGRhcmtlcilcbiAgKSk7XG5cbiAgLy8gRm9yIGVhY2ggaHVlIGluIHRoZSBwYWxldHRlLCBhZGQgYSBcIi1jb250cmFzdFwiIGNvbG9yIHRvIHRoZSBtYXAuXG4gIEBlYWNoICRodWUsICRjb2xvciBpbiAkYmFzZS1wYWxldHRlIHtcbiAgICAkcmVzdWx0OiBtYXBfbWVyZ2UoJHJlc3VsdCwgKFxuICAgICAgJyN7JGh1ZX0tY29udHJhc3QnOiBtYXQtY29udHJhc3QoJGJhc2UtcGFsZXR0ZSwgJGh1ZSlcbiAgICApKTtcbiAgfVxuXG4gIEByZXR1cm4gJHJlc3VsdDtcbn1cblxuXG4vLyBHZXRzIGEgY29sb3IgZnJvbSBhIHRoZW1lIHBhbGV0dGUgKHRoZSBvdXRwdXQgb2YgbWF0LXBhbGV0dGUpLlxuLy8gVGhlIGh1ZSBjYW4gYmUgb25lIG9mIHRoZSBzdGFuZGFyZCB2YWx1ZXMgKDUwMCwgQTQwMCwgZXRjLiksIG9uZSBvZiB0aGUgdGhyZWUgcHJlY29uZmlndXJlZFxuLy8gaHVlcyAoZGVmYXVsdCwgbGlnaHRlciwgZGFya2VyKSwgb3IgYW55IG9mIHRoZSBhZm9yZW1lbnRpb25lZCBwcmVmaXhlZCB3aXRoIFwiLWNvbnRyYXN0XCIuXG4vL1xuLy8gQHBhcmFtICRjb2xvci1tYXAgVGhlIHRoZW1lIHBhbGV0dGUgKG91dHB1dCBvZiBtYXQtcGFsZXR0ZSkuXG4vLyBAcGFyYW0gJGh1ZSBUaGUgaHVlIGZyb20gdGhlIHBhbGV0dGUgdG8gdXNlLiBJZiB0aGlzIGlzIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLCBpdCB3aWxsXG4vLyAgICAgYmUgdHJlYXRlZCBhcyBvcGFjaXR5LlxuLy8gQHBhcmFtICRvcGFjaXR5IFRoZSBhbHBoYSBjaGFubmVsIHZhbHVlIGZvciB0aGUgY29sb3IuXG5AZnVuY3Rpb24gbWF0LWNvbG9yKCRwYWxldHRlLCAkaHVlOiBkZWZhdWx0LCAkb3BhY2l0eTogbnVsbCkge1xuICAvLyBJZiBodWVLZXkgaXMgYSBudW1iZXIgYmV0d2VlbiB6ZXJvIGFuZCBvbmUsIHRoZW4gaXQgYWN0dWFsbHkgY29udGFpbnMgYW5cbiAgLy8gb3BhY2l0eSB2YWx1ZSwgc28gcmVjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCB0aGUgZGVmYXVsdCBodWUgYW5kIHRoYXQgZ2l2ZW4gb3BhY2l0eS5cbiAgQGlmIHR5cGUtb2YoJGh1ZSkgPT0gbnVtYmVyIGFuZCAkaHVlID49IDAgYW5kICRodWUgPD0gMSB7XG4gICAgQHJldHVybiBtYXQtY29sb3IoJHBhbGV0dGUsIGRlZmF1bHQsICRodWUpO1xuICB9XG5cbiAgJGNvbG9yOiBtYXAtZ2V0KCRwYWxldHRlLCAkaHVlKTtcblxuICBAaWYgKHR5cGUtb2YoJGNvbG9yKSAhPSBjb2xvcikge1xuICAgIC8vIElmIHRoZSAkY29sb3IgcmVzb2x2ZWQgdG8gc29tZXRoaW5nIGRpZmZlcmVudCBmcm9tIGEgY29sb3IgKGUuZy4gYSBDU1MgdmFyaWFibGUpLFxuICAgIC8vIHdlIGNhbid0IGFwcGx5IHRoZSBvcGFjaXR5IGFueXdheSBzbyB3ZSByZXR1cm4gdGhlIHZhbHVlIGFzIGlzLCBvdGhlcndpc2UgU2FzcyBjYW5cbiAgICAvLyB0aHJvdyBhbiBlcnJvciBvciBvdXRwdXQgc29tZXRoaW5nIGludmFsaWQuXG4gICAgQHJldHVybiAkY29sb3I7XG4gIH1cblxuICBAcmV0dXJuIHJnYmEoJGNvbG9yLCBpZigkb3BhY2l0eSA9PSBudWxsLCBvcGFjaXR5KCRjb2xvciksICRvcGFjaXR5KSk7XG59XG5cblxuLy8gQ3JlYXRlcyBhIGNvbnRhaW5lciBvYmplY3QgZm9yIGEgbGlnaHQgdGhlbWUgdG8gYmUgZ2l2ZW4gdG8gaW5kaXZpZHVhbCBjb21wb25lbnQgdGhlbWUgbWl4aW5zLlxuQGZ1bmN0aW9uIG1hdC1saWdodC10aGVtZSgkcHJpbWFyeSwgJGFjY2VudCwgJHdhcm46IG1hdC1wYWxldHRlKCRtYXQtcmVkKSkge1xuICBAcmV0dXJuIChcbiAgICBwcmltYXJ5OiAkcHJpbWFyeSxcbiAgICBhY2NlbnQ6ICRhY2NlbnQsXG4gICAgd2FybjogJHdhcm4sXG4gICAgaXMtZGFyazogZmFsc2UsXG4gICAgZm9yZWdyb3VuZDogJG1hdC1saWdodC10aGVtZS1mb3JlZ3JvdW5kLFxuICAgIGJhY2tncm91bmQ6ICRtYXQtbGlnaHQtdGhlbWUtYmFja2dyb3VuZCxcbiAgKTtcbn1cblxuXG4vLyBDcmVhdGVzIGEgY29udGFpbmVyIG9iamVjdCBmb3IgYSBkYXJrIHRoZW1lIHRvIGJlIGdpdmVuIHRvIGluZGl2aWR1YWwgY29tcG9uZW50IHRoZW1lIG1peGlucy5cbkBmdW5jdGlvbiBtYXQtZGFyay10aGVtZSgkcHJpbWFyeSwgJGFjY2VudCwgJHdhcm46IG1hdC1wYWxldHRlKCRtYXQtcmVkKSkge1xuICBAcmV0dXJuIChcbiAgICBwcmltYXJ5OiAkcHJpbWFyeSxcbiAgICBhY2NlbnQ6ICRhY2NlbnQsXG4gICAgd2FybjogJHdhcm4sXG4gICAgaXMtZGFyazogdHJ1ZSxcbiAgICBmb3JlZ3JvdW5kOiAkbWF0LWRhcmstdGhlbWUtZm9yZWdyb3VuZCxcbiAgICBiYWNrZ3JvdW5kOiAkbWF0LWRhcmstdGhlbWUtYmFja2dyb3VuZCxcbiAgKTtcbn1cblxuXG5cbiRtYXQtcmlwcGxlLWNvbG9yLW9wYWNpdHk6IDAuMTtcblxuQG1peGluIG1hdC1yaXBwbGUoKSB7XG5cbiAgLy8gVGhlIGhvc3QgZWxlbWVudCBvZiBhbiBtYXQtcmlwcGxlIGRpcmVjdGl2ZSBzaG91bGQgYWx3YXlzIGhhdmUgYSBwb3NpdGlvbiBvZiBcImFic29sdXRlXCIgb3JcbiAgLy8gXCJyZWxhdGl2ZVwiIHNvIHRoYXQgdGhlIHJpcHBsZXMgaW5zaWRlIGFyZSBjb3JyZWN0bHkgcG9zaXRpb25lZCByZWxhdGl2ZWx5IHRvIHRoZSBjb250YWluZXIuXG4gIC5tYXQtcmlwcGxlIHtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgLy8gQnkgZGVmYXVsdCwgZXZlcnkgcmlwcGxlIGNvbnRhaW5lciBzaG91bGQgaGF2ZSBwb3NpdGlvbjogcmVsYXRpdmUgaW4gZmF2b3Igb2YgY3JlYXRpbmcgYW5cbiAgICAvLyBlYXN5IEFQSSBmb3IgZGV2ZWxvcGVycyB1c2luZyB0aGUgTWF0UmlwcGxlIGRpcmVjdGl2ZS5cbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAvLyBQcm9tb3RlIGNvbnRhaW5lcnMgdGhhdCBoYXZlIHJpcHBsZXMgdG8gYSBuZXcgbGF5ZXIuIFdlIHdhbnQgdG8gdGFyZ2V0IGA6bm90KDplbXB0eSlgLFxuICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCBhbGwgcmlwcGxlIGNvbnRhaW5lcnMgdG8gaGF2ZSB0aGVpciBvd24gbGF5ZXIgc2luY2UgdGhleSdyZSB1c2VkIGluIGFcbiAgICAvLyBsb3Qgb2YgcGxhY2VzIGFuZCB0aGUgbGF5ZXIgaXMgb25seSByZWxldmFudCB3aGlsZSBhbmltYXRpbmcuIE5vdGUgdGhhdCBpZGVhbGx5IHdlJ2QgdXNlXG4gICAgLy8gdGhlIGBjb250YWluYCBwcm9wZXJ0eSBoZXJlIChzZWUgIzEzMTc1KSwgYmVjYXVzZSBgOmVtcHR5YCBjYW4gYmUgYnJva2VuIGJ5IGhhdmluZyBleHRyYVxuICAgIC8vIHRleHQgaW5zaWRlIHRoZSBlbGVtZW50LCBidXQgaXQgaXNuJ3QgdmVyeSB3ZWxsIHN1cHBvcnRlZCB5ZXQuXG4gICAgJjpub3QoOmVtcHR5KSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWQge1xuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICB9XG5cbiAgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcblxuICAgIHRyYW5zaXRpb246IG9wYWNpdHksIHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwKTtcblxuICAgIC8vIEluIGhpZ2ggY29udHJhc3QgbW9kZSB0aGUgcmlwcGxlIGlzIG9wYXF1ZSwgY2F1c2luZyBpdCB0byBvYnN0cnVjdCB0aGUgY29udGVudC5cbiAgICBAaW5jbHVkZSBjZGstaGlnaC1jb250cmFzdChhY3RpdmUsIG9mZikge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cbn1cblxuLyogVGhlbWUgZm9yIHRoZSByaXBwbGUgZWxlbWVudHMuKi9cbkBtaXhpbiBtYXQtcmlwcGxlLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwX2dldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkZm9yZWdyb3VuZC1iYXNlOiBtYXBfZ2V0KCRmb3JlZ3JvdW5kLCBiYXNlKTtcblxuICAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAvLyBJZiB0aGUgcmlwcGxlIGNvbG9yIGlzIHJlc29sdmVzIHRvIGEgY29sb3IgKnR5cGUqLCB3ZSBjYW4gdXNlIGl0IGRpcmVjdGx5LCBvdGhlcndpc2VcbiAgICAvLyAoZS5nLiBpdCByZXNvbHZlcyB0byBhIENTUyB2YXJpYWJsZSkgd2UgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBjb2xvciBhbmQgc2V0dGluZyBhbiBvcGFjaXR5LlxuICAgIEBpZiAodHlwZS1vZigkZm9yZWdyb3VuZC1iYXNlKSA9PSBjb2xvcikge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgkZm9yZWdyb3VuZC1iYXNlLCAkbWF0LXJpcHBsZS1jb2xvci1vcGFjaXR5KTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGZvcmVncm91bmQtYmFzZTtcbiAgICAgIG9wYWNpdHk6ICRtYXQtcmlwcGxlLWNvbG9yLW9wYWNpdHk7XG4gICAgfVxuICB9XG59XG5cblxuXG4vLyBVdGlsaXR5IGZvciBmZXRjaGluZyBhIG5lc3RlZCB2YWx1ZSBmcm9tIGEgdHlwb2dyYXBoeSBjb25maWcuXG5AZnVuY3Rpb24gX21hdC1nZXQtdHlwZS12YWx1ZSgkY29uZmlnLCAkbGV2ZWwsICRuYW1lKSB7XG4gIEByZXR1cm4gbWFwLWdldChtYXAtZ2V0KCRjb25maWcsICRsZXZlbCksICRuYW1lKTtcbn1cblxuLy8gR2V0cyB0aGUgZm9udCBzaXplIGZvciBhIGxldmVsIGluc2lkZSBhIHR5cG9ncmFwaHkgY29uZmlnLlxuQGZ1bmN0aW9uIG1hdC1mb250LXNpemUoJGNvbmZpZywgJGxldmVsKSB7XG4gIEByZXR1cm4gX21hdC1nZXQtdHlwZS12YWx1ZSgkY29uZmlnLCAkbGV2ZWwsIGZvbnQtc2l6ZSk7XG59XG5cbi8vIEdldHMgdGhlIGxpbmUgaGVpZ2h0IGZvciBhIGxldmVsIGluc2lkZSBhIHR5cG9ncmFwaHkgY29uZmlnLlxuQGZ1bmN0aW9uIG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCAkbGV2ZWwpIHtcbiAgQHJldHVybiBfbWF0LWdldC10eXBlLXZhbHVlKCRjb25maWcsICRsZXZlbCwgbGluZS1oZWlnaHQpO1xufVxuXG4vLyBHZXRzIHRoZSBmb250IHdlaWdodCBmb3IgYSBsZXZlbCBpbnNpZGUgYSB0eXBvZ3JhcGh5IGNvbmZpZy5cbkBmdW5jdGlvbiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgJGxldmVsKSB7XG4gIEByZXR1cm4gX21hdC1nZXQtdHlwZS12YWx1ZSgkY29uZmlnLCAkbGV2ZWwsIGZvbnQtd2VpZ2h0KTtcbn1cblxuLy8gR2V0cyB0aGUgbGV0dGVyIHNwYWNpbmcgZm9yIGEgbGV2ZWwgaW5zaWRlIGEgdHlwb2dyYXBoeSBjb25maWcuXG5AZnVuY3Rpb24gbWF0LWxldHRlci1zcGFjaW5nKCRjb25maWcsICRsZXZlbCkge1xuICBAcmV0dXJuIF9tYXQtZ2V0LXR5cGUtdmFsdWUoJGNvbmZpZywgJGxldmVsLCBsZXR0ZXItc3BhY2luZyk7XG59XG5cbi8vIEdldHMgdGhlIGZvbnQtZmFtaWx5IGZyb20gYSB0eXBvZ3JhcGh5IGNvbmZpZyBhbmQgcmVtb3ZlcyB0aGUgcXVvdGVzIGFyb3VuZCBpdC5cbkBmdW5jdGlvbiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgJGxldmVsOiBudWxsKSB7XG4gICRmb250LWZhbWlseTogbWFwLWdldCgkY29uZmlnLCBmb250LWZhbWlseSk7XG5cbiAgQGlmICRsZXZlbCAhPSBudWxsIHtcbiAgICAkZm9udC1mYW1pbHk6IF9tYXQtZ2V0LXR5cGUtdmFsdWUoJGNvbmZpZywgJGxldmVsLCBmb250LWZhbWlseSk7XG4gIH1cblxuICAvLyBHdWFyZCBhZ2FpbnN0IHVucXVvdGluZyBub24tc3RyaW5nIHZhbHVlcywgYmVjYXVzZSBpdCdzIGRlcHJlY2F0ZWQuXG4gIEByZXR1cm4gaWYodHlwZS1vZigkZm9udC1mYW1pbHkpID09IHN0cmluZywgdW5xdW90ZSgkZm9udC1mYW1pbHkpLCAkZm9udC1mYW1pbHkpO1xufVxuXG4vLyBPdXRwdXRzIHRoZSBzaG9ydGhhbmQgYGZvbnRgIENTUyBwcm9wZXJ0eSwgYmFzZWQgb24gYSBzZXQgb2YgdHlwb2dyYXBoeSB2YWx1ZXMuIEZhbGxzIGJhY2sgdG9cbi8vIHRoZSBpbmRpdmlkdWFsIHByb3BlcnRpZXMgaWYgYSB2YWx1ZSB0aGF0IGlzbid0IGFsbG93ZWQgaW4gdGhlIHNob3J0aGFuZCBpcyBwYXNzZWQgaW4uXG5AbWl4aW4gbWF0LXR5cG9ncmFwaHktZm9udC1zaG9ydGhhbmQoJGZvbnQtc2l6ZSwgJGZvbnQtd2VpZ2h0LCAkbGluZS1oZWlnaHQsICRmb250LWZhbWlseSkge1xuICAvLyBJZiBhbnkgb2YgdGhlIHZhbHVlcyBhcmUgc2V0IHRvIGBpbmhlcml0YCwgd2UgY2FuJ3QgdXNlIHRoZSBzaG9ydGhhbmRcbiAgLy8gc28gd2UgZmFsbCBiYWNrIHRvIHBhc3NpbmcgaW4gdGhlIGluZGl2aWR1YWwgcHJvcGVydGllcy5cbiAgQGlmICgkZm9udC1zaXplID09IGluaGVyaXQgb3JcbiAgICAgICAkZm9udC13ZWlnaHQgPT0gaW5oZXJpdCBvclxuICAgICAgICRsaW5lLWhlaWdodCA9PSBpbmhlcml0IG9yXG4gICAgICAgJGZvbnQtZmFtaWx5ID09IGluaGVyaXQgb3JcbiAgICAgICAkZm9udC1zaXplID09IG51bGwgb3JcbiAgICAgICAkZm9udC13ZWlnaHQgPT0gbnVsbCBvclxuICAgICAgICRsaW5lLWhlaWdodCA9PSBudWxsIG9yXG4gICAgICAgJGZvbnQtZmFtaWx5ID09IG51bGwpIHtcblxuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZTtcbiAgICBmb250LXdlaWdodDogJGZvbnQtd2VpZ2h0O1xuICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQ7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseTtcbiAgfVxuICBAZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlIHVzZSB0aGUgc2hvcnRoYW5kIGBmb250YCwgYmVjYXVzZSBpdCdzIHRoZSBsZWFzdCBhbW91bnQgb2YgYnl0ZXMuIE5vdGVcbiAgICAvLyB0aGF0IHdlIG5lZWQgdG8gdXNlIGludGVycG9sYXRpb24gZm9yIGBmb250LXNpemUvbGluZS1oZWlnaHRgIGluIG9yZGVyIHRvIHByZXZlbnRcbiAgICAvLyBTYXNzIGZyb20gZGl2aWRpbmcgdGhlIHR3byB2YWx1ZXMuXG4gICAgZm9udDogJGZvbnQtd2VpZ2h0ICN7JGZvbnQtc2l6ZX0vI3skbGluZS1oZWlnaHR9ICRmb250LWZhbWlseTtcbiAgfVxufVxuXG4vLyBDb252ZXJ0cyBhIHR5cG9ncmFwaHkgbGV2ZWwgaW50byBDU1Mgc3R5bGVzLlxuQG1peGluIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCAkbGV2ZWwpIHtcbiAgJGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCAkbGV2ZWwpO1xuICAkZm9udC13ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCAkbGV2ZWwpO1xuICAkbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCAkbGV2ZWwpO1xuICAkZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCAkbGV2ZWwpO1xuXG4gIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWZvbnQtc2hvcnRoYW5kKCRmb250LXNpemUsICRmb250LXdlaWdodCwgJGxpbmUtaGVpZ2h0LCAkZm9udC1mYW1pbHkpO1xuICBsZXR0ZXItc3BhY2luZzogbWF0LWxldHRlci1zcGFjaW5nKCRjb25maWcsICRsZXZlbCk7XG59XG5cblxuQG1peGluIG1hdC1vcHRpb24tdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuXG4gIC5tYXQtb3B0aW9uIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAgICY6aG92ZXI6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSxcbiAgICAmOmZvY3VzOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3Zlcik7XG4gICAgfVxuXG4gICAgLy8gSW4gbXVsdGlwbGUgbW9kZSB0aGVyZSBpcyBhIGNoZWNrYm94IHRvIHNob3cgdGhhdCB0aGUgb3B0aW9uIGlzIHNlbGVjdGVkLlxuICAgICYubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSk6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyKTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY3RpdmUge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3Zlcik7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICB9XG5cbiAgICAmLm1hdC1vcHRpb24tZGlzYWJsZWQge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaGludC10ZXh0KTtcbiAgICB9XG4gIH1cblxuICAubWF0LXByaW1hcnkgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIHRleHQpO1xuICB9XG5cbiAgLm1hdC1hY2NlbnQgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgdGV4dCk7XG4gIH1cblxuICAubWF0LXdhcm4gLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtb3B0aW9uLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LW9wdGlvbiB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIHN1YmhlYWRpbmctMik7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuQG1peGluIG1hdC1vcHRncm91cC10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LW9wdGdyb3VwLWxhYmVsIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LW9wdGdyb3VwLWRpc2FibGVkIC5tYXQtb3B0Z3JvdXAtbGFiZWwge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGhpbnQtdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1vcHRncm91cC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1vcHRncm91cC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGJvZHktMik7XG4gIH1cbn1cblxuXG5cbkBtaXhpbiBtYXQtcHNldWRvLWNoZWNrYm94LXRoZW1lKCR0aGVtZSkge1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcblxuICAvLyBOT1RFKHRyYXZpc2thdWZtYW4pOiBXaGlsZSB0aGUgc3BlYyBjYWxscyBmb3IgdHJhbnNsdWNlbnQgYmxhY2tzL3doaXRlcyBmb3IgZGlzYWJsZWQgY29sb3JzLFxuICAvLyB0aGlzIGRvZXMgbm90IHdvcmsgd2VsbCB3aXRoIGVsZW1lbnRzIGxheWVyZWQgb24gdG9wIG9mIG9uZSBhbm90aGVyLiBUbyBnZXQgYXJvdW5kIHRoaXMgd2VcbiAgLy8gYmxlbmQgdGhlIGNvbG9ycyB0b2dldGhlciBiYXNlZCBvbiB0aGUgYmFzZSBjb2xvciBhbmQgdGhlIHRoZW1lIGJhY2tncm91bmQuXG4gICR3aGl0ZS0zMHBjdC1vcGFjaXR5LW9uLWRhcms6ICM2ODY4Njg7XG4gICRibGFjay0yNnBjdC1vcGFjaXR5LW9uLWxpZ2h0OiAjYjBiMGIwO1xuICAkZGlzYWJsZWQtY29sb3I6IGlmKCRpcy1kYXJrLXRoZW1lLCAkd2hpdGUtMzBwY3Qtb3BhY2l0eS1vbi1kYXJrLCAkYmxhY2stMjZwY3Qtb3BhY2l0eS1vbi1saWdodCk7XG4gICRjb2xvcmVkLWJveC1zZWxlY3RvcjogJy5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUnO1xuXG4gIC5tYXQtcHNldWRvLWNoZWNrYm94IHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKSwgc2Vjb25kYXJ5LXRleHQpO1xuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgYmFja2dyb3VuZCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQge1xuICAgIGNvbG9yOiAkZGlzYWJsZWQtY29sb3I7XG4gIH1cblxuICAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxcbiAgLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSkpO1xuICB9XG5cbiAgLy8gRGVmYXVsdCB0byB0aGUgYWNjZW50IGNvbG9yLiBOb3RlIHRoYXQgdGhlIHBzZXVkbyBjaGVja2JveGVzIGFyZSBtZWFudCB0byBpbmhlcml0IHRoZVxuICAvLyB0aGVtZSBmcm9tIHRoZWlyIHBhcmVudCwgcmF0aGVyIHRoYW4gaW1wbGVtZW50aW5nIHRoZWlyIG93biB0aGVtaW5nLCB3aGljaCBpcyB3aHkgd2VcbiAgLy8gZG9uJ3QgYXR0YWNoIHRvIHRoZSBgbWF0LSpgIGNsYXNzZXMuIEFsc28gbm90ZSB0aGF0IHRoaXMgbmVlZHMgdG8gYmUgYmVsb3cgYC5tYXQtcHJpbWFyeWBcbiAgLy8gaW4gb3JkZXIgdG8gYWxsb3cgZm9yIHRoZSBjb2xvciB0byBiZSBvdmVyd3JpdHRlbiBpZiB0aGUgY2hlY2tib3ggaXMgaW5zaWRlIGEgcGFyZW50IHRoYXRcbiAgLy8gaGFzIGBtYXQtYWNjZW50YCBhbmQgaXMgcGxhY2VkIGluc2lkZSBhbm90aGVyIHBhcmVudCB0aGF0IGhhcyBgbWF0LXByaW1hcnlgLlxuICAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLFxuICAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLFxuICAubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLFxuICAubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IobWFwLWdldCgkdGhlbWUsIGFjY2VudCkpO1xuICB9XG5cbiAgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsXG4gIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IobWFwLWdldCgkdGhlbWUsIHdhcm4pKTtcbiAgfVxuXG4gIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsXG4gIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUge1xuICAgICYubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZCB7XG4gICAgICBiYWNrZ3JvdW5kOiAkZGlzYWJsZWQtY29sb3I7XG4gICAgfVxuICB9XG59XG5cblxuXG4vLyBSZXByZXNlbnRzIGEgdHlwb2dyYXBoeSBsZXZlbCBmcm9tIHRoZSBNYXRlcmlhbCBkZXNpZ24gc3BlYy5cbkBmdW5jdGlvbiBtYXQtdHlwb2dyYXBoeS1sZXZlbChcbiAgJGZvbnQtc2l6ZSxcbiAgJGxpbmUtaGVpZ2h0OiAkZm9udC1zaXplLFxuICAkZm9udC13ZWlnaHQ6IDQwMCxcbiAgJGZvbnQtZmFtaWx5OiBudWxsLFxuICAkbGV0dGVyLXNwYWNpbmc6IG5vcm1hbCkge1xuXG4gIEByZXR1cm4gKFxuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZSxcbiAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LFxuICAgIGZvbnQtd2VpZ2h0OiAkZm9udC13ZWlnaHQsXG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseSxcbiAgICBsZXR0ZXItc3BhY2luZzogJGxldHRlci1zcGFjaW5nXG4gICk7XG59XG5cbi8vIFJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIHR5cG9ncmFwaHkgbGV2ZWxzLlxuLy8gRGVmYXVsdHMgY29tZSBmcm9tIGh0dHBzOi8vbWF0ZXJpYWwuaW8vZ3VpZGVsaW5lcy9zdHlsZS90eXBvZ3JhcGh5Lmh0bWxcbi8vIE5vdGU6IFRoZSBzcGVjIGRvZXNuJ3QgbWVudGlvbiBsZXR0ZXIgc3BhY2luZy4gVGhlIHZhbHVlcyBoZXJlIGNvbWUgZnJvbVxuLy8gZXllYmFsbGluZyBpdCB1bnRpbCBpdCBsb29rZWQgZXhhY3RseSBsaWtlIHRoZSBzcGVjIGV4YW1wbGVzLlxuQGZ1bmN0aW9uIG1hdC10eXBvZ3JhcGh5LWNvbmZpZyhcbiAgJGZvbnQtZmFtaWx5OiAgICdSb2JvdG8sIFwiSGVsdmV0aWNhIE5ldWVcIiwgc2Fucy1zZXJpZicsXG4gICRkaXNwbGF5LTQ6ICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgxMTJweCwgMTEycHgsIDMwMCwgJGxldHRlci1zcGFjaW5nOiAtMC4wNWVtKSxcbiAgJGRpc3BsYXktMzogICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDU2cHgsIDU2cHgsIDQwMCwgJGxldHRlci1zcGFjaW5nOiAtMC4wMmVtKSxcbiAgJGRpc3BsYXktMjogICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDQ1cHgsIDQ4cHgsIDQwMCwgJGxldHRlci1zcGFjaW5nOiAtMC4wMDVlbSksXG4gICRkaXNwbGF5LTE6ICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgzNHB4LCA0MHB4LCA0MDApLFxuICAkaGVhZGxpbmU6ICAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMjRweCwgMzJweCwgNDAwKSxcbiAgJHRpdGxlOiAgICAgICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDIwcHgsIDMycHgsIDUwMCksXG4gICRzdWJoZWFkaW5nLTI6ICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgxNnB4LCAyOHB4LCA0MDApLFxuICAkc3ViaGVhZGluZy0xOiAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMTVweCwgMjRweCwgNDAwKSxcbiAgJGJvZHktMjogICAgICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDE0cHgsIDI0cHgsIDUwMCksXG4gICRib2R5LTE6ICAgICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgxNHB4LCAyMHB4LCA0MDApLFxuICAkY2FwdGlvbjogICAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMTJweCwgMjBweCwgNDAwKSxcbiAgJGJ1dHRvbjogICAgICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDE0cHgsIDE0cHgsIDUwMCksXG4gIC8vIExpbmUtaGVpZ2h0IG11c3QgYmUgdW5pdC1sZXNzIGZyYWN0aW9uIG9mIHRoZSBmb250LXNpemUuXG4gICRpbnB1dDogICAgICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbChpbmhlcml0LCAxLjEyNSwgNDAwKVxuKSB7XG5cbiAgLy8gRGVjbGFyZSBhbiBpbml0aWFsIG1hcCB3aXRoIGFsbCBvZiB0aGUgbGV2ZWxzLlxuICAkY29uZmlnOiAoXG4gICAgZGlzcGxheS00OiAgICAgICRkaXNwbGF5LTQsXG4gICAgZGlzcGxheS0zOiAgICAgICRkaXNwbGF5LTMsXG4gICAgZGlzcGxheS0yOiAgICAgICRkaXNwbGF5LTIsXG4gICAgZGlzcGxheS0xOiAgICAgICRkaXNwbGF5LTEsXG4gICAgaGVhZGxpbmU6ICAgICAgICRoZWFkbGluZSxcbiAgICB0aXRsZTogICAgICAgICAgJHRpdGxlLFxuICAgIHN1YmhlYWRpbmctMjogICAkc3ViaGVhZGluZy0yLFxuICAgIHN1YmhlYWRpbmctMTogICAkc3ViaGVhZGluZy0xLFxuICAgIGJvZHktMjogICAgICAgICAkYm9keS0yLFxuICAgIGJvZHktMTogICAgICAgICAkYm9keS0xLFxuICAgIGNhcHRpb246ICAgICAgICAkY2FwdGlvbixcbiAgICBidXR0b246ICAgICAgICAgJGJ1dHRvbixcbiAgICBpbnB1dDogICAgICAgICAgJGlucHV0LFxuICApO1xuXG4gIC8vIExvb3AgdGhyb3VnaCB0aGUgbGV2ZWxzIGFuZCBzZXQgdGhlIGBmb250LWZhbWlseWAgb2YgdGhlIG9uZXMgdGhhdCBkb24ndCBoYXZlIG9uZSB0byB0aGUgYmFzZS5cbiAgLy8gTm90ZSB0aGF0IFNhc3MgY2FuJ3QgbW9kaWZ5IG1hcHMgaW4gcGxhY2UsIHdoaWNoIG1lYW5zIHRoYXQgd2UgbmVlZCB0byBtZXJnZSBhbmQgcmUtYXNzaWduLlxuICBAZWFjaCAka2V5LCAkbGV2ZWwgaW4gJGNvbmZpZyB7XG4gICAgQGlmIG1hcC1nZXQoJGxldmVsLCBmb250LWZhbWlseSkgPT0gbnVsbCB7XG4gICAgICAkbmV3LWxldmVsOiBtYXAtbWVyZ2UoJGxldmVsLCAoZm9udC1mYW1pbHk6ICRmb250LWZhbWlseSkpO1xuICAgICAgJGNvbmZpZzogbWFwLW1lcmdlKCRjb25maWcsICgka2V5OiAkbmV3LWxldmVsKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIHRoZSBiYXNlIGZvbnQgZmFtaWx5IHRvIHRoZSBjb25maWcuXG4gIEByZXR1cm4gbWFwLW1lcmdlKCRjb25maWcsIChmb250LWZhbWlseTogJGZvbnQtZmFtaWx5KSk7XG59XG5cbi8vIEFkZHMgdGhlIGJhc2UgdHlwb2dyYXBoeSBzdHlsZXMsIGJhc2VkIG9uIGEgY29uZmlnLlxuQG1peGluIG1hdC1iYXNlLXR5cG9ncmFwaHkoJGNvbmZpZywgJHNlbGVjdG9yOiAnLm1hdC10eXBvZ3JhcGh5Jykge1xuICAubWF0LWgxLCAubWF0LWhlYWRsaW5lLCAjeyRzZWxlY3Rvcn0gaDEge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBoZWFkbGluZSk7XG4gICAgbWFyZ2luOiAwIDAgMTZweDtcbiAgfVxuXG4gIC5tYXQtaDIsIC5tYXQtdGl0bGUsICN7JHNlbGVjdG9yfSBoMiB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIHRpdGxlKTtcbiAgICBtYXJnaW46IDAgMCAxNnB4O1xuICB9XG5cbiAgLm1hdC1oMywgLm1hdC1zdWJoZWFkaW5nLTIsICN7JHNlbGVjdG9yfSBoMyB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIHN1YmhlYWRpbmctMik7XG4gICAgbWFyZ2luOiAwIDAgMTZweDtcbiAgfVxuXG4gIC5tYXQtaDQsIC5tYXQtc3ViaGVhZGluZy0xLCAjeyRzZWxlY3Rvcn0gaDQge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBzdWJoZWFkaW5nLTEpO1xuICAgIG1hcmdpbjogMCAwIDE2cHg7XG4gIH1cblxuICAvLyBOb3RlOiB0aGUgc3BlYyBkb2Vzbid0IGhhdmUgYW55dGhpbmcgdGhhdCB3b3VsZCBjb3JyZXNwb25kIHRvIGg1IGFuZCBoNiwgYnV0IHdlIGFkZCB0aGVzZSBmb3JcbiAgLy8gY29uc2lzdGVuY3kuIFRoZSBmb250IHNpemVzIGNvbWUgZnJvbSB0aGUgQ2hyb21lIHVzZXIgYWdlbnQgc3R5bGVzIHdoaWNoIGhhdmUgaDUgYXQgMC44M2VtXG4gIC8vIGFuZCBoNiBhdCAwLjY3ZW0uXG4gIC5tYXQtaDUsICN7JHNlbGVjdG9yfSBoNSB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktZm9udC1zaG9ydGhhbmQoXG4gICAgICAgLy8gY2FsYyBpcyB1c2VkIGhlcmUgdG8gc3VwcG9ydCBjc3MgdmFyaWFibGVzXG4gICAgICBjYWxjKCN7bWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpfSAqIDAuODMpLFxuICAgICAgbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMSksXG4gICAgICBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgYm9keS0xKSxcbiAgICAgIG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBib2R5LTEpXG4gICAgKTtcblxuICAgIG1hcmdpbjogMCAwIDEycHg7XG4gIH1cblxuICAubWF0LWg2LCAjeyRzZWxlY3Rvcn0gaDYge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWZvbnQtc2hvcnRoYW5kKFxuICAgICAgIC8vIGNhbGMgaXMgdXNlZCBoZXJlIHRvIHN1cHBvcnQgY3NzIHZhcmlhYmxlc1xuICAgICAgY2FsYygje21hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKX0gKiAwLjY3KSxcbiAgICAgIG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTEpLFxuICAgICAgbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGJvZHktMSksXG4gICAgICBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgYm9keS0xKVxuICAgICk7XG5cbiAgICBtYXJnaW46IDAgMCAxMnB4O1xuICB9XG5cbiAgLm1hdC1ib2R5LXN0cm9uZywgLm1hdC1ib2R5LTIge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBib2R5LTIpO1xuICB9XG5cbiAgLm1hdC1ib2R5LCAubWF0LWJvZHktMSwgI3skc2VsZWN0b3J9IHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgYm9keS0xKTtcblxuICAgIHAge1xuICAgICAgbWFyZ2luOiAwIDAgMTJweDtcbiAgICB9XG4gIH1cblxuICAubWF0LXNtYWxsLCAubWF0LWNhcHRpb24ge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBjYXB0aW9uKTtcbiAgfVxuXG4gIC5tYXQtZGlzcGxheS00LCAjeyRzZWxlY3Rvcn0gLm1hdC1kaXNwbGF5LTQge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBkaXNwbGF5LTQpO1xuICAgIG1hcmdpbjogMCAwIDU2cHg7XG4gIH1cblxuICAubWF0LWRpc3BsYXktMywgI3skc2VsZWN0b3J9IC5tYXQtZGlzcGxheS0zIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgZGlzcGxheS0zKTtcbiAgICBtYXJnaW46IDAgMCA2NHB4O1xuICB9XG5cbiAgLm1hdC1kaXNwbGF5LTIsICN7JHNlbGVjdG9yfSAubWF0LWRpc3BsYXktMiB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGRpc3BsYXktMik7XG4gICAgbWFyZ2luOiAwIDAgNjRweDtcbiAgfVxuXG4gIC5tYXQtZGlzcGxheS0xLCAjeyRzZWxlY3Rvcn0gLm1hdC1kaXNwbGF5LTEge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBkaXNwbGF5LTEpO1xuICAgIG1hcmdpbjogMCAwIDY0cHg7XG4gIH1cbn1cblxuXG5cblxuQG1peGluIG1hdC1hdXRvY29tcGxldGUtdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG5cbiAgLm1hdC1hdXRvY29tcGxldGUtcGFuZWwge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDQsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAgIC8vIFNlbGVjdGVkIG9wdGlvbnMgaW4gYXV0b2NvbXBsZXRlcyBzaG91bGQgbm90IGJlIGdyYXksIGJ1dCB3ZVxuICAgIC8vIG9ubHkgd2FudCB0byBvdmVycmlkZSB0aGUgYmFja2dyb3VuZCBmb3Igc2VsZWN0ZWQgb3B0aW9ucyBpZlxuICAgIC8vIHRoZXkgYXJlICpub3QqIGluIGhvdmVyIG9yIGZvY3VzIHN0YXRlLiBUaGlzIGNoYW5nZSBoYXMgdG8gYmVcbiAgICAvLyBtYWRlIGhlcmUgYmVjYXVzZSBiYXNlIG9wdGlvbiBzdHlsZXMgYXJlIHNoYXJlZCBiZXR3ZWVuIHRoZVxuICAgIC8vIGF1dG9jb21wbGV0ZSBhbmQgdGhlIHNlbGVjdC5cbiAgICAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKSB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuXG4gICAgICAmOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICAgICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufVxuXG5AbWl4aW4gbWF0LWF1dG9jb21wbGV0ZS10eXBvZ3JhcGh5KCRjb25maWcpIHsgfVxuXG4vLyBUaGlzIGNvbnRhaW5zIGFsbCBvZiB0aGUgc3R5bGVzIGZvciB0aGUgYmFkZ2Vcbi8vIHJhdGhlciB0aGFuIGp1c3QgdGhlIGNvbG9yL3RoZW1lIGJlY2F1c2Ugb2Zcbi8vIG5vIHN0eWxlIHNoZWV0IHN1cHBvcnQgZm9yIGRpcmVjdGl2ZXMuXG5cblxuXG5cblxuJG1hdC1iYWRnZS1mb250LXNpemU6IDEycHg7XG4kbWF0LWJhZGdlLWZvbnQtd2VpZ2h0OiA2MDA7XG4kbWF0LWJhZGdlLWRlZmF1bHQtc2l6ZTogMjJweCAhZGVmYXVsdDtcbiRtYXQtYmFkZ2Utc21hbGwtc2l6ZTogJG1hdC1iYWRnZS1kZWZhdWx0LXNpemUgLSA2O1xuJG1hdC1iYWRnZS1sYXJnZS1zaXplOiAkbWF0LWJhZGdlLWRlZmF1bHQtc2l6ZSArIDY7XG5cbi8vIE1peGluIGZvciBidWlsZGluZyBvZmZzZXQgZ2l2ZW4gZGlmZmVyZW50IHNpemVzXG5AbWl4aW4gX21hdC1iYWRnZS1zaXplKCRzaXplKSB7XG4gIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgd2lkdGg6ICRzaXplO1xuICAgIGhlaWdodDogJHNpemU7XG4gICAgbGluZS1oZWlnaHQ6ICRzaXplO1xuICB9XG5cbiAgJi5tYXQtYmFkZ2UtYWJvdmUge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICB0b3A6IC0kc2l6ZSAvIDI7XG4gICAgfVxuICB9XG5cbiAgJi5tYXQtYmFkZ2UtYmVsb3cge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICBib3R0b206IC0kc2l6ZSAvIDI7XG4gICAgfVxuICB9XG5cbiAgJi5tYXQtYmFkZ2UtYmVmb3JlIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgbGVmdDogLSRzaXplO1xuICAgIH1cbiAgfVxuXG4gIFtkaXI9J3J0bCddICYubWF0LWJhZGdlLWJlZm9yZSB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIGxlZnQ6IGF1dG87XG4gICAgICByaWdodDogLSRzaXplO1xuICAgIH1cbiAgfVxuXG4gICYubWF0LWJhZGdlLWFmdGVyIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgcmlnaHQ6IC0kc2l6ZTtcbiAgICB9XG4gIH1cblxuICBbZGlyPSdydGwnXSAmLm1hdC1iYWRnZS1hZnRlciB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgbGVmdDogLSRzaXplO1xuICAgIH1cbiAgfVxuXG4gICYubWF0LWJhZGdlLW92ZXJsYXAge1xuICAgICYubWF0LWJhZGdlLWJlZm9yZSB7XG4gICAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgICBsZWZ0OiAtJHNpemUgLyAyO1xuICAgICAgfVxuICAgIH1cblxuICAgIFtkaXI9J3J0bCddICYubWF0LWJhZGdlLWJlZm9yZSB7XG4gICAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgICBsZWZ0OiBhdXRvO1xuICAgICAgICByaWdodDogLSRzaXplIC8gMjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLm1hdC1iYWRnZS1hZnRlciB7XG4gICAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgICByaWdodDogLSRzaXplIC8gMjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBbZGlyPSdydGwnXSAmLm1hdC1iYWRnZS1hZnRlciB7XG4gICAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgICByaWdodDogYXV0bztcbiAgICAgICAgbGVmdDogLSRzaXplIC8gMjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1iYWRnZS10aGVtZSgkdGhlbWUpIHtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJHByaW1hcnkpO1xuXG4gICAgQGluY2x1ZGUgY2RrLWhpZ2gtY29udHJhc3QoYWN0aXZlLCBvZmYpIHtcbiAgICAgIG91dGxpbmU6IHNvbGlkIDFweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1iYWRnZS1hY2NlbnQge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGFjY2VudCk7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIGRlZmF1bHQtY29udHJhc3QpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYmFkZ2Utd2FybiB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIGRlZmF1bHQtY29udHJhc3QpO1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCR3YXJuKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJhZGdlIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cblxuICAubWF0LWJhZGdlLWhpZGRlbiB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1iYWRnZS1kaXNhYmxlZCB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgICRhcHAtYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnYmFja2dyb3VuZCcpO1xuICAgICAgJGJhZGdlLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLWJ1dHRvbik7XG5cbiAgICAgIC8vIFRoZSBkaXNhYmxlZCBjb2xvciB1c3VhbGx5IGhhcyBzb21lIGtpbmQgb2Ygb3BhY2l0eSwgYnV0IGJlY2F1c2UgdGhlIGJhZGdlIGlzIG92ZXJsYXllZFxuICAgICAgLy8gb24gdG9wIG9mIHNvbWV0aGluZyBlbHNlLCBpdCB3b24ndCBsb29rIGdvb2QgaWYgaXQncyBvcGFxdWUuIElmIGl0IGlzIGEgY29sb3IgKnR5cGUqLFxuICAgICAgLy8gd2UgY29udmVydCBpdCBpbnRvIGEgc29saWQgY29sb3IgYnkgdGFraW5nIHRoZSBvcGFjaXR5IGZyb20gdGhlIHJnYmEgdmFsdWUgYW5kIHVzaW5nXG4gICAgICAvLyB0aGUgdmFsdWUgdG8gZGV0ZXJtaW5lIHRoZSBwZXJjZW50YWdlIG9mIHRoZSBiYWNrZ3JvdW5kIHRvIHB1dCBpbnRvIGZvcmVncm91bmQgd2hlblxuICAgICAgLy8gbWl4aW5nIHRoZSBjb2xvcnMgdG9nZXRoZXIuXG4gICAgICBAaWYgKHR5cGUtb2YoJGJhZGdlLWNvbG9yKSA9PSBjb2xvciBhbmQgdHlwZS1vZigkYXBwLWJhY2tncm91bmQpID09IGNvbG9yKSB7XG4gICAgICAgICRiYWRnZS1vcGFjaXR5OiBvcGFjaXR5KCRiYWRnZS1jb2xvcik7XG4gICAgICAgIGJhY2tncm91bmQ6IG1peCgkYXBwLWJhY2tncm91bmQsIHJnYmEoJGJhZGdlLWNvbG9yLCAxKSwgKDEgLSAkYmFkZ2Utb3BhY2l0eSkgKiAxMDAlKTtcbiAgICAgIH1cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGJhZGdlLWNvbG9yO1xuICAgICAgfVxuXG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjAwbXMgZWFzZS1pbi1vdXQ7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjYpO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgfVxuXG4gIC5uZy1hbmltYXRlLWRpc2FibGVkIC5tYXQtYmFkZ2UtY29udGVudCxcbiAgLm1hdC1iYWRnZS1jb250ZW50Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIHtcbiAgICB0cmFuc2l0aW9uOiBub25lO1xuICB9XG5cbiAgLy8gVGhlIGFjdGl2ZSBjbGFzcyBpcyBhZGRlZCBhZnRlciB0aGUgZWxlbWVudCBpcyBhZGRlZFxuICAvLyBzbyBpdCBjYW4gYW5pbWF0ZSBzY2FsZSB0byBkZWZhdWx0XG4gIC5tYXQtYmFkZ2UtY29udGVudC5tYXQtYmFkZ2UtYWN0aXZlIHtcbiAgICAvLyBTY2FsZSB0byBgbm9uZWAgaW5zdGVhZCBvZiBgMWAgdG8gYXZvaWQgYmx1cnJ5IHRleHQgaW4gc29tZSBicm93c2Vycy5cbiAgICB0cmFuc2Zvcm06IG5vbmU7XG4gIH1cblxuICAubWF0LWJhZGdlLXNtYWxsIHtcbiAgICBAaW5jbHVkZSBfbWF0LWJhZGdlLXNpemUoJG1hdC1iYWRnZS1zbWFsbC1zaXplKTtcbiAgfVxuICAubWF0LWJhZGdlLW1lZGl1bSB7XG4gICAgQGluY2x1ZGUgX21hdC1iYWRnZS1zaXplKCRtYXQtYmFkZ2UtZGVmYXVsdC1zaXplKTtcbiAgfVxuICAubWF0LWJhZGdlLWxhcmdlIHtcbiAgICBAaW5jbHVkZSBfbWF0LWJhZGdlLXNpemUoJG1hdC1iYWRnZS1sYXJnZS1zaXplKTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWJhZGdlLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgIGZvbnQtd2VpZ2h0OiAkbWF0LWJhZGdlLWZvbnQtd2VpZ2h0O1xuICAgIGZvbnQtc2l6ZTogJG1hdC1iYWRnZS1mb250LXNpemU7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtYmFkZ2Utc21hbGwgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAvLyBTZXQgdGhlIGZvbnQgc2l6ZSB0byA3NSUgb2YgdGhlIG9yaWdpbmFsLlxuICAgIGZvbnQtc2l6ZTogJG1hdC1iYWRnZS1mb250LXNpemUgKiAwLjc1O1xuICB9XG5cbiAgLm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgIGZvbnQtc2l6ZTogJG1hdC1iYWRnZS1mb250LXNpemUgKiAyO1xuICB9XG59XG5cblxuXG5cblxuQG1peGluIG1hdC1ib3R0b20tc2hlZXQtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigxNiwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGRpYWxvZyk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1ib3R0b20tc2hlZXQtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lciB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGJvZHktMSk7XG4gIH1cbn1cblxuXG5cblxuXG4kX21hdC1idXR0b24tcmlwcGxlLW9wYWNpdHk6IDAuMTtcblxuLy8gQXBwbGllcyBhIGZvY3VzIHN0eWxlIHRvIGFuIG1hdC1idXR0b24gZWxlbWVudCBmb3IgZWFjaCBvZiB0aGUgc3VwcG9ydGVkIHBhbGV0dGVzLlxuQG1peGluIF9tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXktY29sb3IoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuXG4gICYubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5KTtcbiAgfVxuXG4gICYubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCk7XG4gIH1cblxuICAmLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkd2Fybik7XG4gIH1cblxuICAmW2Rpc2FibGVkXSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxufVxuXG4vLyBBcHBsaWVzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGZvciBhIHJpcHBsZS4gSWYgdGhlIHZhbHVlIHByb3ZpZGVkIGlzIG5vdCBhIFNhc3MgY29sb3IsXG4vLyB3ZSBhc3N1bWUgdGhhdCB3ZSd2ZSBiZWVuIGdpdmVuIGEgQ1NTIHZhcmlhYmxlLiBTaW5jZSB3ZSBjYW4ndCBwZXJmb3JtIGFscGhhLWJsZW5kaW5nXG4vLyBvbiBhIENTUyB2YXJpYWJsZSwgd2UgaW5zdGVhZCBhZGQgdGhlIG9wYWNpdHkgZGlyZWN0bHkgdG8gdGhlIHJpcHBsZSBlbGVtZW50LlxuQG1peGluIF9tYXQtYnV0dG9uLXJpcHBsZS1iYWNrZ3JvdW5kKCRwYWxldHRlLCAkaHVlLCAkb3BhY2l0eSkge1xuICAkYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCAkaHVlLCAkb3BhY2l0eSk7XG4gIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWNvbG9yO1xuICBAaWYgKHR5cGUtb2YoJGJhY2tncm91bmQtY29sb3IpICE9IGNvbG9yKSB7XG4gICAgb3BhY2l0eTogJG9wYWNpdHk7XG4gIH1cbn1cblxuQG1peGluIF9tYXQtYnV0dG9uLXJpcHBsZS1jb2xvcigkdGhlbWUsICRodWUsICRvcGFjaXR5OiAkX21hdC1idXR0b24tcmlwcGxlLW9wYWNpdHkpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG5cbiAgJi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi1yaXBwbGUtYmFja2dyb3VuZCgkcHJpbWFyeSwgJGh1ZSwgJG9wYWNpdHkpO1xuICB9XG5cbiAgJi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLXJpcHBsZS1iYWNrZ3JvdW5kKCRhY2NlbnQsICRodWUsICRvcGFjaXR5KTtcbiAgfVxuXG4gICYubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tcmlwcGxlLWJhY2tncm91bmQoJHdhcm4sICRodWUsICRvcGFjaXR5KTtcbiAgfVxufVxuXG4vLyBBcHBsaWVzIGEgcHJvcGVydHkgdG8gYW4gbWF0LWJ1dHRvbiBlbGVtZW50IGZvciBlYWNoIG9mIHRoZSBzdXBwb3J0ZWQgcGFsZXR0ZXMuXG5AbWl4aW4gX21hdC1idXR0b24tdGhlbWUtcHJvcGVydHkoJHRoZW1lLCAkcHJvcGVydHksICRodWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgJi5tYXQtcHJpbWFyeSB7XG4gICAgI3skcHJvcGVydHl9OiBtYXQtY29sb3IoJHByaW1hcnksICRodWUpO1xuICB9XG4gICYubWF0LWFjY2VudCB7XG4gICAgI3skcHJvcGVydHl9OiBtYXQtY29sb3IoJGFjY2VudCwgJGh1ZSk7XG4gIH1cbiAgJi5tYXQtd2FybiB7XG4gICAgI3skcHJvcGVydHl9OiBtYXQtY29sb3IoJHdhcm4sICRodWUpO1xuICB9XG5cbiAgJi5tYXQtcHJpbWFyeSwgJi5tYXQtYWNjZW50LCAmLm1hdC13YXJuLCAmW2Rpc2FibGVkXSB7XG4gICAgJltkaXNhYmxlZF0ge1xuICAgICAgJHBhbGV0dGU6IGlmKCRwcm9wZXJ0eSA9PSAnY29sb3InLCAkZm9yZWdyb3VuZCwgJGJhY2tncm91bmQpO1xuICAgICAgI3skcHJvcGVydHl9OiBtYXQtY29sb3IoJHBhbGV0dGUsIGRpc2FibGVkLWJ1dHRvbik7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtYnV0dG9uLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWJ1dHRvbiwgLm1hdC1pY29uLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbiB7XG4gICAgLy8gQnV0dG9ucyB3aXRob3V0IGEgYmFja2dyb3VuZCBjb2xvciBzaG91bGQgaW5oZXJpdCB0aGUgZm9udCBjb2xvci4gVGhpcyBpcyBuZWNlc3NhcnkgdG9cbiAgICAvLyBlbnN1cmUgdGhhdCB0aGUgYnV0dG9uIGlzIHJlYWRhYmxlIG9uIGN1c3RvbSBiYWNrZ3JvdW5kIGNvbG9ycy4gSXQncyB3cm9uZyB0byBhbHdheXMgYXNzdW1lXG4gICAgLy8gdGhhdCB0aG9zZSBidXR0b25zIGFyZSBhbHdheXMgcGxhY2VkIGluc2lkZSBvZiBjb250YWluZXJzIHdpdGggdGhlIGRlZmF1bHQgYmFja2dyb3VuZFxuICAgIC8vIGNvbG9yIG9mIHRoZSB0aGVtZSAoZS5nLiB0aGVtZWQgdG9vbGJhcnMpLlxuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tdGhlbWUtcHJvcGVydHkoJHRoZW1lLCAnY29sb3InLCB0ZXh0KTtcbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LWNvbG9yKCR0aGVtZSk7XG5cbiAgICAvLyBTZXR1cCB0aGUgcmlwcGxlIGNvbG9yIHRvIGJlIGJhc2VkIG9uIHRoZSB0ZXh0IGNvbG9yLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgcmlwcGxlc1xuICAgIC8vIGFyZSBtYXRjaGluZyB3aXRoIHRoZSBjdXJyZW50IHRoZW1lIHBhbGV0dGUgYW5kIGFyZSBpbiBjb250cmFzdCB0byB0aGUgYmFja2dyb3VuZCBjb2xvclxuICAgIC8vIChlLmcgaW4gdGhlbWVkIHRvb2xiYXJzKS5cbiAgICAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAgIG9wYWNpdHk6ICRfbWF0LWJ1dHRvbi1yaXBwbGUtb3BhY2l0eTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGN1cnJlbnRDb2xvcjtcbiAgICB9XG4gIH1cblxuICAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5IHtcbiAgICBiYWNrZ3JvdW5kOiBtYXBfZ2V0KCRmb3JlZ3JvdW5kLCBiYXNlKTtcbiAgfVxuXG4gIC8vIE5vdGU6IHRoaXMgbmVlZHMgYSBiaXQgZXh0cmEgc3BlY2lmaWNpdHksIGJlY2F1c2Ugd2UncmUgbm90IGd1YXJhbnRlZWQgdGhlIGluY2x1c2lvblxuICAvLyBvcmRlciBvZiB0aGUgdGhlbWUgc3R5bGVzIGFuZCB0aGUgYnV0dG9uIHJlc2V0IG1heSBlbmQgdXAgcmVzZXR0aW5nIHRoaXMgYXMgd2VsbC5cbiAgLm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoW2Rpc2FibGVkXSkge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxuXG4gIC5tYXQtZmxhdC1idXR0b24sIC5tYXQtcmFpc2VkLWJ1dHRvbiwgLm1hdC1mYWIsIC5tYXQtbWluaS1mYWIge1xuICAgIC8vIERlZmF1bHQgZm9udCBhbmQgYmFja2dyb3VuZCBjb2xvciB3aGVuIG5vdCB1c2luZyBhbnkgY29sb3IgcGFsZXR0ZS5cbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIHJhaXNlZC1idXR0b24pO1xuXG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tdGhlbWUtcHJvcGVydHkoJHRoZW1lLCAnY29sb3InLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi10aGVtZS1wcm9wZXJ0eSgkdGhlbWUsICdiYWNrZ3JvdW5kLWNvbG9yJywgZGVmYXVsdCk7XG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tcmlwcGxlLWNvbG9yKCR0aGVtZSwgZGVmYXVsdC1jb250cmFzdCk7XG4gIH1cblxuICAubWF0LXN0cm9rZWQtYnV0dG9uLCAubWF0LWZsYXQtYnV0dG9uIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigwLCAkdGhlbWUpO1xuICB9XG5cbiAgLm1hdC1yYWlzZWQtYnV0dG9uIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigyLCAkdGhlbWUpO1xuXG4gICAgJjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDgsICR0aGVtZSk7XG4gICAgfVxuXG4gICAgJltkaXNhYmxlZF0ge1xuICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMCwgJHRoZW1lKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWZhYiwgLm1hdC1taW5pLWZhYiB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oNiwgJHRoZW1lKTtcblxuICAgICY6bm90KFtkaXNhYmxlZF0pOmFjdGl2ZSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigxMiwgJHRoZW1lKTtcbiAgICB9XG5cbiAgICAmW2Rpc2FibGVkXSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigwLCAkdGhlbWUpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWJ1dHRvbi10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1idXR0b24sIC5tYXQtcmFpc2VkLWJ1dHRvbiwgLm1hdC1pY29uLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbixcbiAgLm1hdC1mbGF0LWJ1dHRvbiwgLm1hdC1mYWIsIC5tYXQtbWluaS1mYWIge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGJ1dHRvbik7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJ1dHRvbik7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBidXR0b24pO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuQG1peGluIG1hdC1idXR0b24tdG9nZ2xlLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZGl2aWRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcblxuICAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSxcbiAgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigyLCAkdGhlbWUpO1xuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCxcbiAgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQge1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGhpbnQtdGV4dCk7XG5cbiAgICAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGZvY3VzZWQtYnV0dG9uKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcblxuICAgIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZm9jdXNlZC1idXR0b24sIDEpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSArIC5tYXQtYnV0dG9uLXRvZ2dsZSB7XG4gICAgYm9yZGVyLWxlZnQ6IHNvbGlkIDFweCAkZGl2aWRlci1jb2xvcjtcbiAgfVxuXG4gIFtkaXI9J3J0bCddIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSArIC5tYXQtYnV0dG9uLXRvZ2dsZSB7XG4gICAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gICAgYm9yZGVyLXJpZ2h0OiBzb2xpZCAxcHggJGRpdmlkZXItY29sb3I7XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbCB7XG4gICAgLm1hdC1idXR0b24tdG9nZ2xlICsgLm1hdC1idXR0b24tdG9nZ2xlIHtcbiAgICAgIGJvcmRlci1sZWZ0OiBub25lO1xuICAgICAgYm9yZGVyLXJpZ2h0OiBub25lO1xuICAgICAgYm9yZGVyLXRvcDogc29saWQgMXB4ICRkaXZpZGVyLWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIHNlbGVjdGVkLWJ1dHRvbik7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuXG4gICAgJi5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtYnV0dG9uKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGRpc2FibGVkLWJ1dHRvbi10b2dnbGUpO1xuXG4gICAgJi5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gICAgfVxuXG4gICAgJi5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgc2VsZWN0ZWQtZGlzYWJsZWQtYnV0dG9uKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLFxuICAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCB7XG4gICAgYm9yZGVyOiBzb2xpZCAxcHggJGRpdmlkZXItY29sb3I7XG4gIH1cbn1cblxuQG1peGluIG1hdC1idXR0b24tdG9nZ2xlLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWJ1dHRvbi10b2dnbGUge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cbn1cblxuXG5cblxuXG5cblxuQG1peGluIG1hdC1jYXJkLXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtY2FyZCB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMSwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gICAgLy8gTmVlZHMgZXh0cmEgc3BlY2lmaWNpdHkgdG8gYmUgYWJsZSB0byBvdmVycmlkZSB0aGUgZWxldmF0aW9uIHNlbGVjdG9ycy5cbiAgICAmLm1hdC1jYXJkLWZsYXQge1xuICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMCwgJHRoZW1lKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWNhcmQtc3VidGl0bGUge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWNhcmQtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtY2FyZCB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtY2FyZC10aXRsZSB7XG4gICAgZm9udDoge1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBoZWFkbGluZSk7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCB0aXRsZSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1jYXJkLWhlYWRlciAubWF0LWNhcmQtdGl0bGUge1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCB0aXRsZSk7XG4gIH1cblxuICAubWF0LWNhcmQtc3VidGl0bGUsXG4gIC5tYXQtY2FyZC1jb250ZW50IHtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKTtcbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtY2hlY2tib3gtdGhlbWUoJHRoZW1lKSB7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG5cbiAgLy8gVGhlIGNvbG9yIG9mIHRoZSBjaGVja2JveCdzIGNoZWNrbWFyayAvIG1peGVkbWFyay5cbiAgJGNoZWNrYm94LW1hcmstY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgYmFja2dyb3VuZCk7XG5cbiAgLy8gTk9URSh0cmF2aXNrYXVmbWFuKTogV2hpbGUgdGhlIHNwZWMgY2FsbHMgZm9yIHRyYW5zbHVjZW50IGJsYWNrcy93aGl0ZXMgZm9yIGRpc2FibGVkIGNvbG9ycyxcbiAgLy8gdGhpcyBkb2VzIG5vdCB3b3JrIHdlbGwgd2l0aCBlbGVtZW50cyBsYXllcmVkIG9uIHRvcCBvZiBvbmUgYW5vdGhlci4gVG8gZ2V0IGFyb3VuZCB0aGlzIHdlXG4gIC8vIGJsZW5kIHRoZSBjb2xvcnMgdG9nZXRoZXIgYmFzZWQgb24gdGhlIGJhc2UgY29sb3IgYW5kIHRoZSB0aGVtZSBiYWNrZ3JvdW5kLlxuICAkd2hpdGUtMzBwY3Qtb3BhY2l0eS1vbi1kYXJrOiAjNjg2ODY4O1xuICAkYmxhY2stMjZwY3Qtb3BhY2l0eS1vbi1saWdodDogI2IwYjBiMDtcbiAgJGRpc2FibGVkLWNvbG9yOiBpZigkaXMtZGFyay10aGVtZSwgJHdoaXRlLTMwcGN0LW9wYWNpdHktb24tZGFyaywgJGJsYWNrLTI2cGN0LW9wYWNpdHktb24tbGlnaHQpO1xuXG4gIC5tYXQtY2hlY2tib3gtZnJhbWUge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LWNoZWNrYm94LWNoZWNrbWFyayB7XG4gICAgZmlsbDogJGNoZWNrYm94LW1hcmstY29sb3I7XG4gIH1cblxuICAubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoIHtcbiAgICAvLyAhaW1wb3J0YW50IGlzIG5lZWRlZCBoZXJlIGJlY2F1c2UgYSBzdHJva2UgbXVzdCBiZSBzZXQgYXMgYW5cbiAgICAvLyBhdHRyaWJ1dGUgb24gdGhlIFNWRyBpbiBvcmRlciBmb3IgbGluZSBhbmltYXRpb24gdG8gd29yayBwcm9wZXJseS5cbiAgICBzdHJva2U6ICRjaGVja2JveC1tYXJrLWNvbG9yICFpbXBvcnRhbnQ7XG4gIH1cblxuICAubWF0LWNoZWNrYm94LW1peGVkbWFyayB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNoZWNrYm94LW1hcmstY29sb3I7XG4gIH1cblxuICAubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUsIC5tYXQtY2hlY2tib3gtY2hlY2tlZCB7XG4gICAgJi5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5KTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYWNjZW50KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHdhcm4pO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtY2hlY2tib3gtZGlzYWJsZWQge1xuICAgICYubWF0LWNoZWNrYm94LWNoZWNrZWQsXG4gICAgJi5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSB7XG4gICAgICAubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZGlzYWJsZWQtY29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjpub3QoLm1hdC1jaGVja2JveC1jaGVja2VkKSB7XG4gICAgICAubWF0LWNoZWNrYm94LWZyYW1lIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkZGlzYWJsZWQtY29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLm1hdC1jaGVja2JveC1sYWJlbCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU3dpdGNoIHRoaXMgdG8gYSBzb2xpZCBjb2xvciBzaW5jZSB3ZSdyZSB1c2luZyBgb3BhY2l0eWBcbiAgLy8gdG8gY29udHJvbCBob3cgb3BhcXVlIHRoZSByaXBwbGUgc2hvdWxkIGJlLlxuICAubWF0LWNoZWNrYm94IC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hcF9nZXQobWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpLCBiYXNlKTtcbiAgfVxuXG4gIC5tYXQtY2hlY2tib3gtY2hlY2tlZDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCksXG4gIC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKSB7XG4gICAgJi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRhY2NlbnQpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJHdhcm4pO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWNoZWNrYm94LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWNoZWNrYm94IHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLy8gVE9ETyhrYXJhKTogUmVtb3ZlIHRoaXMgc3R5bGUgd2hlbiBmaXhpbmcgdmVydGljYWwgYmFzZWxpbmVcbiAgLm1hdC1jaGVja2JveC1sYXlvdXQgLm1hdC1jaGVja2JveC1sYWJlbCB7XG4gICAgbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBib2R5LTIpO1xuICB9XG59XG5cblxuXG5cblxuXG4kbWF0LWNoaXAtcmVtb3ZlLWZvbnQtc2l6ZTogMThweDtcblxuQG1peGluIG1hdC1jaGlwcy1jb2xvcigkZm9yZWdyb3VuZCwgJGJhY2tncm91bmQpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQ7XG4gIGNvbG9yOiAkZm9yZWdyb3VuZDtcblxuICAubWF0LWNoaXAtcmVtb3ZlIHtcbiAgICBjb2xvcjogJGZvcmVncm91bmQ7XG4gICAgb3BhY2l0eTogMC40O1xuICB9XG59XG5cblxuLy8gQXBwbGllcyB0aGUgYmFja2dyb3VuZCBjb2xvciBmb3IgYSByaXBwbGUgZWxlbWVudC5cbi8vIElmIHRoZSBjb2xvciB2YWx1ZSBwcm92aWRlZCBpcyBub3QgYSBTYXNzIGNvbG9yLFxuLy8gd2UgYXNzdW1lIHRoYXQgd2UndmUgYmVlbiBnaXZlbiBhIENTUyB2YXJpYWJsZS5cbi8vIFNpbmNlIHdlIGNhbid0IHBlcmZvcm0gYWxwaGEtYmxlbmRpbmcgb24gYSBDU1MgdmFyaWFibGUsXG4vLyB3ZSBpbnN0ZWFkIGFkZCB0aGUgb3BhY2l0eSBkaXJlY3RseSB0byB0aGUgcmlwcGxlIGVsZW1lbnQuXG5AbWl4aW4gX21hdC1jaGlwcy1yaXBwbGUtYmFja2dyb3VuZCgkcGFsZXR0ZSwgJGRlZmF1bHQtY29udHJhc3QsICRvcGFjaXR5KSB7XG4gICRiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsICRkZWZhdWx0LWNvbnRyYXN0LCAkb3BhY2l0eSk7XG4gIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWNvbG9yO1xuICBAaWYgKHR5cGUtb2YoJGJhY2tncm91bmQtY29sb3IpICE9IGNvbG9yKSB7XG4gICAgb3BhY2l0eTogJG9wYWNpdHk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1jaGlwcy10aGVtZS1jb2xvcigkcGFsZXR0ZSkge1xuICBAaW5jbHVkZSBtYXQtY2hpcHMtY29sb3IobWF0LWNvbG9yKCRwYWxldHRlLCBkZWZhdWx0LWNvbnRyYXN0KSwgbWF0LWNvbG9yKCRwYWxldHRlKSk7XG5cbiAgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICBAaW5jbHVkZSBfbWF0LWNoaXBzLXJpcHBsZS1iYWNrZ3JvdW5kKCRwYWxldHRlLCBkZWZhdWx0LWNvbnRyYXN0LCAwLjEpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtY2hpcHMtdGhlbWUoJHRoZW1lKSB7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gICR1bnNlbGVjdGVkLWJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgdW5zZWxlY3RlZC1jaGlwKTtcbiAgJHVuc2VsZWN0ZWQtZm9yZWdyb3VuZDogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAge1xuICAgIEBpbmNsdWRlIG1hdC1jaGlwcy1jb2xvcigkdW5zZWxlY3RlZC1mb3JlZ3JvdW5kLCAkdW5zZWxlY3RlZC1iYWNrZ3JvdW5kKTtcblxuICAgICY6bm90KC5tYXQtY2hpcC1kaXNhYmxlZCkge1xuICAgICAgJjphY3RpdmUge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigzLCAkdGhlbWUpO1xuICAgICAgfVxuXG4gICAgICAubWF0LWNoaXAtcmVtb3ZlOmhvdmVyIHtcbiAgICAgICAgb3BhY2l0eTogMC41NDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLm1hdC1jaGlwLWRpc2FibGVkIHtcbiAgICAgIG9wYWNpdHk6IDAuNDtcbiAgICB9XG5cbiAgICAmOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXBfZ2V0KCRmb3JlZ3JvdW5kLCBiYXNlKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQge1xuICAgICYubWF0LXByaW1hcnkge1xuICAgICAgQGluY2x1ZGUgbWF0LWNoaXBzLXRoZW1lLWNvbG9yKCRwcmltYXJ5KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIEBpbmNsdWRlIG1hdC1jaGlwcy10aGVtZS1jb2xvcigkd2Fybik7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IHtcbiAgICAgIEBpbmNsdWRlIG1hdC1jaGlwcy10aGVtZS1jb2xvcigkYWNjZW50KTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1jaGlwcy10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1jaGlwIHtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0yKTtcbiAgICBmb250LXdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMik7XG5cbiAgICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbixcbiAgICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uIHtcbiAgICAgIGZvbnQtc2l6ZTogJG1hdC1jaGlwLXJlbW92ZS1mb250LXNpemU7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuQG1peGluIG1hdC10YWJsZS10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LXRhYmxlIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdjYXJkJyk7XG4gIH1cblxuICAubWF0LXRhYmxlIHRoZWFkLCAubWF0LXRhYmxlIHRib2R5LCAubWF0LXRhYmxlIHRmb290LFxuICBtYXQtaGVhZGVyLXJvdywgbWF0LXJvdywgbWF0LWZvb3Rlci1yb3csXG4gIFttYXQtaGVhZGVyLXJvd10sIFttYXQtcm93XSwgW21hdC1mb290ZXItcm93XSxcbiAgLm1hdC10YWJsZS1zdGlja3kge1xuICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7XG4gIH1cblxuICBtYXQtcm93LCBtYXQtaGVhZGVyLXJvdywgbWF0LWZvb3Rlci1yb3csXG4gIHRoLm1hdC1oZWFkZXItY2VsbCwgdGQubWF0LWNlbGwsIHRkLm1hdC1mb290ZXItY2VsbCB7XG4gICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxuXG4gIC5tYXQtaGVhZGVyLWNlbGwge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtY2VsbCwgLm1hdC1mb290ZXItY2VsbCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC10YWJsZS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC10YWJsZSB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtaGVhZGVyLWNlbGwge1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKTtcbiAgICBmb250LXdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMik7XG4gIH1cblxuICAubWF0LWNlbGwsIC5tYXQtZm9vdGVyLWNlbGwge1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpO1xuICB9XG59XG5cblxuXG5cblxuXG5cbiRtYXQtZGF0ZXBpY2tlci1zZWxlY3RlZC10b2RheS1ib3gtc2hhZG93LXdpZHRoOiAxcHg7XG4kbWF0LWRhdGVwaWNrZXItc2VsZWN0ZWQtZmFkZS1hbW91bnQ6IDAuNjtcbiRtYXQtZGF0ZXBpY2tlci10b2RheS1mYWRlLWFtb3VudDogMC4yO1xuJG1hdC1jYWxlbmRhci1ib2R5LWZvbnQtc2l6ZTogMTNweCAhZGVmYXVsdDtcbiRtYXQtY2FsZW5kYXItd2Vla2RheS10YWJsZS1mb250LXNpemU6IDExcHggIWRlZmF1bHQ7XG5cbkBtaXhpbiBfbWF0LWRhdGVwaWNrZXItY29sb3IoJHBhbGV0dGUpIHtcbiAgLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsIGRlZmF1bHQtY29udHJhc3QpO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkID4gLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkIHtcbiAgICAkYmFja2dyb3VuZDogbWF0LWNvbG9yKCRwYWxldHRlKTtcblxuICAgIEBpZiAodHlwZS1vZigkYmFja2dyb3VuZCkgPT0gY29sb3IpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGZhZGUtb3V0KCRiYWNrZ3JvdW5kLCAkbWF0LWRhdGVwaWNrZXItc2VsZWN0ZWQtZmFkZS1hbW91bnQpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICAvLyBJZiB3ZSBjb3VsZG4ndCByZXNvbHZlIHRvIGJhY2tncm91bmQgdG8gYSBjb2xvciAoZS5nLiBpdCdzIGEgQ1NTIHZhcmlhYmxlKSxcbiAgICAgIC8vIGZhbGwgYmFjayB0byBmYWRpbmcgdGhlIGNvbnRlbnQgb3V0IHZpYSBgb3BhY2l0eWAuXG4gICAgICBvcGFjaXR5OiAkbWF0LWRhdGVwaWNrZXItdG9kYXktZmFkZS1hbW91bnQ7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkIHtcbiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAkbWF0LWRhdGVwaWNrZXItc2VsZWN0ZWQtdG9kYXktYm94LXNoYWRvdy13aWR0aFxuICAgICAgICAgICAgICAgIG1hdC1jb2xvcigkcGFsZXR0ZSwgZGVmYXVsdC1jb250cmFzdCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1kYXRlcGlja2VyLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuXG4gIC5tYXQtY2FsZW5kYXItYXJyb3cge1xuICAgIGJvcmRlci10b3AtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaWNvbik7XG4gIH1cblxuICAvLyBUaGUgcHJldi9uZXh0IGJ1dHRvbnMgbmVlZCBhIGJpdCBtb3JlIHNwZWNpZmljaXR5IHRvXG4gIC8vIGF2b2lkIGJlaW5nIG92ZXJ3cml0dGVuIGJ5IHRoZSAubWF0LWljb24tYnV0dG9uLlxuICAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLFxuICAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLW5leHQtYnV0dG9uLFxuICAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLXByZXZpb3VzLWJ1dHRvbiB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaWNvbik7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlciB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaGludC10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyLWRpdmlkZXI6OmFmdGVyIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50IHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkID4gLm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3ZlcixcbiAgLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmUsXG4gIC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmUge1xuICAgICYgPiAubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKSB7XG4gICAgLy8gTm90ZTogdGhvdWdoIGl0J3Mgbm90IHRleHQsIHRoZSBib3JkZXIgaXMgYSBoaW50IGFib3V0IHRoZSBmYWN0IHRoYXQgdGhpcyBpcyB0b2RheSdzIGRhdGUsXG4gICAgLy8gc28gd2UgdXNlIHRoZSBoaW50IGNvbG9yLlxuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBoaW50LXRleHQpO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkID4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpIHtcbiAgICAkY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaGludC10ZXh0KTtcblxuICAgIEBpZiAodHlwZS1vZigkY29sb3IpID09IGNvbG9yKSB7XG4gICAgICBib3JkZXItY29sb3I6IGZhZGUtb3V0KCRjb2xvciwgJG1hdC1kYXRlcGlja2VyLXRvZGF5LWZhZGUtYW1vdW50KTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgLy8gSWYgdGhlIGNvbG9yIGRpZG4ndCByZXNvbHZlIHRvIGEgY29sb3IgdmFsdWUsIGJ1dCBzb21ldGhpbmcgbGlrZSBhIENTUyB2YXJpYWJsZSwgd2UgY2FuJ3RcbiAgICAgIC8vIGZhZGUgaXQgb3V0IHNvIHdlIGZhbGwgYmFjayB0byByZWR1Y2luZyB0aGUgZWxlbWVudCBvcGFjaXR5LiBOb3RlIHRoYXQgd2UgZG9uJ3QgdXNlIHRoZVxuICAgICAgLy8gJG1hdC1kYXRlcGlja2VyLXRvZGF5LWZhZGUtYW1vdW50LCBiZWNhdXNlIGhpbnQgdGV4dCB1c3VhbGx5IGhhcyBzb21lIG9wYWNpdHkgYXBwbGllZFxuICAgICAgLy8gdG8gaXQgYWxyZWFkeSBhbmQgd2UgZG9uJ3Qgd2FudCB0aGVtIHRvIHN0YWNrIG9uIHRvcCBvZiBlYWNoIG90aGVyLlxuICAgICAgb3BhY2l0eTogMC41O1xuICAgIH1cbiAgfVxuXG4gIEBpbmNsdWRlIF9tYXQtZGF0ZXBpY2tlci1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSkpO1xuXG4gIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbig0LCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgQGluY2x1ZGUgX21hdC1kYXRlcGlja2VyLWNvbG9yKG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpKTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtZGF0ZXBpY2tlci1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgd2FybikpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50LXRvdWNoIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigwLCAkdGhlbWUpO1xuICB9XG5cbiAgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUge1xuICAgIGNvbG9yOiBtYXQtY29sb3IobWFwLWdldCgkdGhlbWUsIHByaW1hcnkpLCB0ZXh0KTtcblxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpLCB0ZXh0KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IobWFwLWdldCgkdGhlbWUsIHdhcm4pLCB0ZXh0KTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1kYXRlcGlja2VyLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWNhbGVuZGFyIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5IHtcbiAgICBmb250LXNpemU6ICRtYXQtY2FsZW5kYXItYm9keS1mb250LXNpemU7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktbGFiZWwsXG4gIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbiB7XG4gICAgZm9udDoge1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBidXR0b24pO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYnV0dG9uKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlciB0aCB7XG4gICAgZm9udDoge1xuICAgICAgc2l6ZTogJG1hdC1jYWxlbmRhci13ZWVrZGF5LXRhYmxlLWZvbnQtc2l6ZTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMSk7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtZGlhbG9nLXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oMjQsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBkaWFsb2cpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtZGlhbG9nLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWRpYWxvZy10aXRsZSB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIHRpdGxlKTtcbiAgfVxufVxuXG5cblxuXG5cblxuQG1peGluIG1hdC1leHBhbnNpb24tcGFuZWwtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1leHBhbnNpb24tcGFuZWwge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDIsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtYWN0aW9uLXJvdyB7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxuXG4gIC5tYXQtZXhwYW5zaW9uLXBhbmVsIHtcbiAgICAmIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZCxcbiAgICAmIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkLFxuICAgICY6bm90KC5tYXQtZXhwYW5kZWQpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3ZlciB7XG4gICAgICAmOm5vdChbYXJpYS1kaXNhYmxlZD0ndHJ1ZSddKSB7XG4gICAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIERpc2FibGUgdGhlIGhvdmVyIG9uIHRvdWNoIGRldmljZXMgc2luY2UgaXQgY2FuIGFwcGVhciBsaWtlIGl0IGlzIHN0dWNrLiBXZSBjYW4ndCB1c2VcbiAgLy8gYEBtZWRpYSAoaG92ZXIpYCBhYm92ZSwgYmVjYXVzZSB0aGUgZGVza3RvcCBzdXBwb3J0IGJyb3dzZXIgc3VwcG9ydCBpc24ndCBncmVhdC5cbiAgQG1lZGlhIChob3Zlcjogbm9uZSkge1xuICAgIC5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKTpub3QoW2FyaWEtZGlzYWJsZWQ9J3RydWUnXSlcbiAgICAgIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cblxuICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sXG4gIC5tYXQtZXhwYW5zaW9uLWluZGljYXRvcjo6YWZ0ZXIge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPSd0cnVlJ10ge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLWJ1dHRvbik7XG5cbiAgICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUsXG4gICAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIHtcbiAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWV4cGFuc2lvbi1wYW5lbC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBzdWJoZWFkaW5nLTEpO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBzdWJoZWFkaW5nLTEpO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgc3ViaGVhZGluZy0xKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgYm9keS0xKTtcbiAgfVxufVxuXG5cblxuXG4vLyBUaGlzIG1peGluIHdpbGwgZW5zdXJlIHRoYXQgbGluZXMgdGhhdCBvdmVyZmxvdyB0aGUgY29udGFpbmVyIHdpbGwgaGlkZSB0aGUgb3ZlcmZsb3cgYW5kXG4vLyB0cnVuY2F0ZSBuZWF0bHkgd2l0aCBhbiBlbGxpcHNpcy5cbkBtaXhpbiBtYXQtdHJ1bmNhdGUtbGluZSgpIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbi8vIE1peGluIHRvIHByb3ZpZGUgYWxsIG1hdC1saW5lIHN0eWxlcywgY2hhbmdpbmcgc2Vjb25kYXJ5IGZvbnQgc2l6ZSBiYXNlZCBvbiB3aGV0aGVyIHRoZSBsaXN0XG4vLyBpcyBpbiBkZW5zZSBtb2RlLlxuQG1peGluIG1hdC1saW5lLWJhc2UoJHNlY29uZGFyeS1mb250LXNpemUpIHtcbiAgLm1hdC1saW5lIHtcbiAgICBAaW5jbHVkZSBtYXQtdHJ1bmNhdGUtbGluZSgpO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cbiAgICAvLyBhbGwgbGluZXMgYnV0IHRoZSB0b3AgbGluZSBzaG91bGQgaGF2ZSBzbWFsbGVyIHRleHRcbiAgICAmOm50aC1jaGlsZChuKzIpIHtcbiAgICAgIGZvbnQtc2l6ZTogJHNlY29uZGFyeS1mb250LXNpemU7XG4gICAgfVxuICB9XG59XG5cbi8vIFRoaXMgbWl4aW4gbm9ybWFsaXplcyBkZWZhdWx0IGVsZW1lbnQgc3R5bGVzLCBlLmcuIGZvbnQgd2VpZ2h0IGZvciBoZWFkaW5nIHRleHQuXG5AbWl4aW4gbWF0LW5vcm1hbGl6ZS10ZXh0KCkge1xuICAmID4gKiB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gIH1cbn1cblxuLy8gVGhpcyBtaXhpbiBwcm92aWRlcyBiYXNlIHN0eWxlcyBmb3IgdGhlIHdyYXBwZXIgYXJvdW5kIG1hdC1saW5lIGVsZW1lbnRzIGluIGEgbGlzdC5cbkBtaXhpbiBtYXQtbGluZS13cmFwcGVyLWJhc2UoKSB7XG4gIEBpbmNsdWRlIG1hdC1ub3JtYWxpemUtdGV4dCgpO1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHdpZHRoOiAxMDAlO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIC8vIE11c3QgcmVtb3ZlIHdyYXBwZXIgd2hlbiBsaW5lcyBhcmUgZW1wdHkgb3IgaXQgdGFrZXMgdXAgaG9yaXpvbnRhbFxuICAvLyBzcGFjZSBhbmQgcHVzaGVzIG90aGVyIGVsZW1lbnRzIHRvIHRoZSByaWdodC5cbiAgJjplbXB0eSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG5cblxuLy8gSW5jbHVkZSB0aGlzIGVtcHR5IG1peGluIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBvdGhlciBjb21wb25lbnRzLlxuQG1peGluIG1hdC1ncmlkLWxpc3QtdGhlbWUoJHRoZW1lKSB7IH1cblxuQG1peGluIG1hdC1ncmlkLWxpc3QtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtZ3JpZC10aWxlLWhlYWRlcixcbiAgLm1hdC1ncmlkLXRpbGUtZm9vdGVyIHtcbiAgICBAaW5jbHVkZSBtYXQtbGluZS1iYXNlKG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbikpO1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpO1xuICB9XG59XG5cblxuXG5cbi8vIEluY2x1ZGUgdGhpcyBlbXB0eSBtaXhpbiBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgb3RoZXIgY29tcG9uZW50cy5cbkBtaXhpbiBtYXQtaWNvbi10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1pY29uIHtcbiAgICAmLm1hdC1wcmltYXJ5IHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIHRleHQpO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIHRleHQpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtaWNvbi10eXBvZ3JhcGh5KCRjb25maWcpIHsgfVxuXG5cblxuXG5cbi8vIFJlbmRlcnMgYSBncmFkaWVudCBmb3Igc2hvd2luZyB0aGUgZGFzaGVkIGxpbmUgd2hlbiB0aGUgaW5wdXQgaXMgZGlzYWJsZWQuXG4vLyBVbmxpa2UgdXNpbmcgYSBib3JkZXIsIGEgZ3JhZGllbnQgYWxsb3dzIHVzIHRvIGFkanVzdCB0aGUgc3BhY2luZyBvZiB0aGUgZG90dGVkIGxpbmVcbi8vIHRvIG1hdGNoIHRoZSBNYXRlcmlhbCBEZXNpZ24gc3BlYy5cbkBtaXhpbiBtYXQtY29udHJvbC1kaXNhYmxlZC11bmRlcmxpbmUoJGNvbG9yKSB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgJGNvbG9yIDAlLCAkY29sb3IgMzMlLCB0cmFuc3BhcmVudCAwJSk7XG4gIGJhY2tncm91bmQtc2l6ZTogNHB4IDEwMCU7XG4gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcbn1cblxuLy8gRmlndXJlcyBvdXQgdGhlIGNvbG9yIG9mIHRoZSBwbGFjZWhvbGRlciBmb3IgYSBmb3JtIGNvbnRyb2wuXG4vLyBVc2VkIHByaW1hcmlseSB0byBwcmV2ZW50IHRoZSB2YXJpb3VzIGZvcm0gY29udHJvbHMgZnJvbVxuLy8gYmVjb21pbmcgb3V0IG9mIHN5bmMgc2luY2UgdGhlc2UgY29sb3JzIGFyZW4ndCBpbiBhIHBhbGV0dGUuXG5AZnVuY3Rpb24gX21hdC1jb250cm9sLXBsYWNlaG9sZGVyLWNvbG9yKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuICBAcmV0dXJuIG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjUsIDAuNDIpKTtcbn1cblxuXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXRlcmlhbC9uby1wcmVmaXhlcyAqL1xuQG1peGluIHVzZXItc2VsZWN0KCR2YWx1ZSkge1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiAkdmFsdWU7XG4gIC1tb3otdXNlci1zZWxlY3Q6ICR2YWx1ZTtcbiAgLW1zLXVzZXItc2VsZWN0OiAkdmFsdWU7XG4gIHVzZXItc2VsZWN0OiAkdmFsdWU7XG59XG5cbkBtaXhpbiBpbnB1dC1wbGFjZWhvbGRlciB7XG4gICY6OnBsYWNlaG9sZGVyIHtcbiAgICBAY29udGVudDtcbiAgfVxuXG4gICY6Oi1tb3otcGxhY2Vob2xkZXIge1xuICAgIEBjb250ZW50O1xuICB9XG5cbiAgJjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cblxuICAmOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cbn1cblxuQG1peGluIGN1cnNvci1ncmFiIHtcbiAgY3Vyc29yOiAtd2Via2l0LWdyYWI7XG4gIGN1cnNvcjogZ3JhYjtcbn1cblxuQG1peGluIGN1cnNvci1ncmFiYmluZyB7XG4gIGN1cnNvcjogLXdlYmtpdC1ncmFiYmluZztcbiAgY3Vyc29yOiBncmFiYmluZztcbn1cblxuQG1peGluIGJhY2tmYWNlLXZpc2liaWxpdHkoJHZhbHVlKSB7XG4gIC13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTogJHZhbHVlO1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiAkdmFsdWU7XG59XG4vKiBzdHlsZWxpbnQtZW5hYmxlICovXG5cblxuXG5AbWl4aW4gbWF0LWlucHV0LXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVyIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LWlucHV0LWVsZW1lbnQ6ZGlzYWJsZWQsXG4gIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXIge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICB9XG5cbiAgLm1hdC1pbnB1dC1lbGVtZW50IHtcbiAgICBjYXJldC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCB0ZXh0KTtcblxuICAgIEBpbmNsdWRlIGlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICAgIGNvbG9yOiBfbWF0LWNvbnRyb2wtcGxhY2Vob2xkZXItY29sb3IoJHRoZW1lKTtcbiAgICB9XG5cbiAgICAvLyBPbiBkYXJrIHRoZW1lcyB3ZSBzZXQgdGhlIG5hdGl2ZSBgc2VsZWN0YCBjb2xvciB0byBzb21lIHNoYWRlIG9mIHdoaXRlLFxuICAgIC8vIGhvd2V2ZXIgdGhlIGNvbG9yIHByb3BhZ2F0ZXMgdG8gYWxsIG9mIHRoZSBgb3B0aW9uYCBlbGVtZW50cywgd2hpY2ggYXJlXG4gICAgLy8gYWx3YXlzIG9uIGEgd2hpdGUgYmFja2dyb3VuZCBpbnNpZGUgdGhlIGRyb3Bkb3duLCBjYXVzaW5nIHRoZW0gdG8gYmxlbmQgaW4uXG4gICAgLy8gU2luY2Ugd2UgY2FuJ3QgY2hhbmdlIGJhY2tncm91bmQgb2YgdGhlIGRyb3Bkb3duLCB3ZSBuZWVkIHRvIGV4cGxpY2l0bHlcbiAgICAvLyByZXNldCB0aGUgY29sb3Igb2YgdGhlIG9wdGlvbnMgdG8gc29tZXRoaW5nIGRhcmsuXG4gICAgQGlmIChtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyaykpIHtcbiAgICAgIG9wdGlvbiB7XG4gICAgICAgIGNvbG9yOiAkZGFyay1wcmltYXJ5LXRleHQ7XG4gICAgICB9XG5cbiAgICAgIG9wdGlvbjpkaXNhYmxlZCB7XG4gICAgICAgIGNvbG9yOiAkZGFyay1kaXNhYmxlZC10ZXh0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5tYXQtYWNjZW50IC5tYXQtaW5wdXQtZWxlbWVudCB7XG4gICAgY2FyZXQtY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtd2FybiAubWF0LWlucHV0LWVsZW1lbnQsXG4gIC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudCB7XG4gICAgY2FyZXQtY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXIge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtaW5wdXQtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC8vIFRoZSB1bml0LWxlc3MgbGluZS1oZWlnaHQgZnJvbSB0aGUgZm9udCBjb25maWcuXG4gICRsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGlucHV0KTtcblxuICAvLyBUaGUgYW1vdW50IG9mIHNwYWNlIGJldHdlZW4gdGhlIHRvcCBvZiB0aGUgbGluZSBhbmQgdGhlIHRvcCBvZiB0aGUgYWN0dWFsIHRleHRcbiAgLy8gKGFzIGEgZnJhY3Rpb24gb2YgdGhlIGZvbnQtc2l6ZSkuXG4gICRsaW5lLXNwYWNpbmc6ICgkbGluZS1oZWlnaHQgLSAxKSAvIDI7XG5cbiAgLy8gPGlucHV0PiBlbGVtZW50cyBzZWVtIHRvIGhhdmUgdGhlaXIgaGVpZ2h0IHNldCBzbGlnaHRseSB0b28gbGFyZ2Ugb24gU2FmYXJpIGNhdXNpbmcgdGhlIHRleHQgdG9cbiAgLy8gYmUgbWlzYWxpZ25lZCB3LnIudC4gdGhlIHBsYWNlaG9sZGVyLiBBZGRpbmcgdGhpcyBtYXJnaW4gY29ycmVjdHMgaXQuXG4gIGlucHV0Lm1hdC1pbnB1dC1lbGVtZW50IHtcbiAgICBtYXJnaW4tdG9wOiAtJGxpbmUtc3BhY2luZyAqIDFlbTtcbiAgfVxufVxuXG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LWxpc3QtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1saXN0LWJhc2Uge1xuICAgIC5tYXQtbGlzdC1pdGVtIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIH1cblxuICAgIC5tYXQtbGlzdC1vcHRpb24ge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgfVxuXG4gICAgLm1hdC1zdWJoZWFkZXIge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtbGlzdC1pdGVtLWRpc2FibGVkIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGRpc2FibGVkLWxpc3Qtb3B0aW9uKTtcbiAgfVxuXG4gIC5tYXQtbGlzdC1vcHRpb24sXG4gIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0sXG4gIC5tYXQtYWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ge1xuICAgICY6aG92ZXIsICY6Zm9jdXMge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnaG92ZXInKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbiB7XG4gICAgJiwgJjpob3ZlciwgJjpmb2N1cyB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyLCAwLjEyKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1saXN0LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAkZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcblxuICAubWF0LWxpc3QtaXRlbSB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseTtcbiAgfVxuXG4gIC5tYXQtbGlzdC1vcHRpb24ge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHk7XG4gIH1cblxuICAvLyBEZWZhdWx0IGxpc3RcbiAgLm1hdC1saXN0LWJhc2Uge1xuICAgIC5tYXQtbGlzdC1pdGVtIHtcbiAgICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBzdWJoZWFkaW5nLTIpO1xuICAgICAgQGluY2x1ZGUgbWF0LWxpbmUtYmFzZShtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSkpO1xuICAgIH1cblxuICAgIC5tYXQtbGlzdC1vcHRpb24ge1xuICAgICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIHN1YmhlYWRpbmctMik7XG4gICAgICBAaW5jbHVkZSBtYXQtbGluZS1iYXNlKG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKSk7XG4gICAgfVxuXG4gICAgLm1hdC1zdWJoZWFkZXIge1xuICAgICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBib2R5LTIpO1xuICAgICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMik7XG4gICAgICBmb250LXdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMik7XG4gICAgfVxuICB9XG5cbiAgLy8gRGVuc2UgbGlzdFxuICAubWF0LWxpc3QtYmFzZVtkZW5zZV0ge1xuICAgIC5tYXQtbGlzdC1pdGVtIHtcbiAgICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKTtcbiAgICAgIEBpbmNsdWRlIG1hdC1saW5lLWJhc2UobWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKSk7XG4gICAgfVxuXG4gICAgLm1hdC1saXN0LW9wdGlvbiB7XG4gICAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbik7XG4gICAgICBAaW5jbHVkZSBtYXQtbGluZS1iYXNlKG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbikpO1xuICAgIH1cblxuICAgIC5tYXQtc3ViaGVhZGVyIHtcbiAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHk7XG4gICAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbik7XG4gICAgICBmb250LXdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMik7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtbWVudS10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LW1lbnUtcGFuZWwge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDQsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnY2FyZCcpO1xuICB9XG5cbiAgLm1hdC1tZW51LWl0ZW0ge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsICd0ZXh0Jyk7XG5cbiAgICAmW2Rpc2FibGVkXSB7XG4gICAgICAmLCAmOjphZnRlciB7XG4gICAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsICdkaXNhYmxlZCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbi1uby1jb2xvcixcbiAgLm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2VyOjphZnRlciB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgJ2ljb24nKTtcbiAgfVxuXG4gIC5tYXQtbWVudS1pdGVtOmhvdmVyLFxuICAubWF0LW1lbnUtaXRlbS5jZGstcHJvZ3JhbS1mb2N1c2VkLFxuICAubWF0LW1lbnUtaXRlbS5jZGsta2V5Ym9hcmQtZm9jdXNlZCxcbiAgLm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWQge1xuICAgICY6bm90KFtkaXNhYmxlZF0pIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2hvdmVyJyk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtbWVudS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1tZW51LWl0ZW0ge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGJvZHktMSk7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSk7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTEpO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuQG1peGluIG1hdC1wYWdpbmF0b3ItdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG5cbiAgLm1hdC1wYWdpbmF0b3Ige1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2NhcmQnKTtcbiAgfVxuXG4gIC5tYXQtcGFnaW5hdG9yLFxuICAubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlciB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LFxuICAubWF0LXBhZ2luYXRvci1pbmNyZW1lbnQge1xuICAgIGJvcmRlci10b3A6IDJweCBzb2xpZCBtYXQtY29sb3IoJGZvcmVncm91bmQsICdpY29uJyk7XG4gICAgYm9yZGVyLXJpZ2h0OiAycHggc29saWQgbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCAnaWNvbicpO1xuICB9XG5cbiAgLm1hdC1wYWdpbmF0b3ItZmlyc3QsXG4gIC5tYXQtcGFnaW5hdG9yLWxhc3Qge1xuICAgIGJvcmRlci10b3A6IDJweCBzb2xpZCBtYXQtY29sb3IoJGZvcmVncm91bmQsICdpY29uJyk7XG4gIH1cblxuICAubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSB7XG4gICAgLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LFxuICAgIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudCxcbiAgICAubWF0LXBhZ2luYXRvci1maXJzdCxcbiAgICAubWF0LXBhZ2luYXRvci1sYXN0IHtcbiAgICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCAnZGlzYWJsZWQnKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1wYWdpbmF0b3ItdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtcGFnaW5hdG9yLFxuICAubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlciB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgY2FwdGlvbik7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtcHJvZ3Jlc3MtYmFyLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcblxuICAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5kIHtcbiAgICBmaWxsOiBtYXQtY29sb3IoJHByaW1hcnksIGxpZ2h0ZXIpO1xuICB9XG5cbiAgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIGxpZ2h0ZXIpO1xuICB9XG5cbiAgLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG4gIH1cblxuICAubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IHtcbiAgICAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5kIHtcbiAgICAgIGZpbGw6IG1hdC1jb2xvcigkYWNjZW50LCBsaWdodGVyKTtcbiAgICB9XG5cbiAgICAubWF0LXByb2dyZXNzLWJhci1idWZmZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIGxpZ2h0ZXIpO1xuICAgIH1cblxuICAgIC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYWNjZW50KTtcbiAgICB9XG4gIH1cblxuICAubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiB7XG4gICAgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZCB7XG4gICAgICBmaWxsOiBtYXQtY29sb3IoJHdhcm4sIGxpZ2h0ZXIpO1xuICAgIH1cblxuICAgIC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIGxpZ2h0ZXIpO1xuICAgIH1cblxuICAgIC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkd2Fybik7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtcHJvZ3Jlc3MtYmFyLXR5cG9ncmFwaHkoJGNvbmZpZykgeyB9XG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LXByb2dyZXNzLXNwaW5uZXItdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuXG4gIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciwgLm1hdC1zcGlubmVyIHtcbiAgICBjaXJjbGUge1xuICAgICAgc3Ryb2tlOiBtYXQtY29sb3IoJHByaW1hcnkpO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCBjaXJjbGUge1xuICAgICAgc3Ryb2tlOiBtYXQtY29sb3IoJGFjY2VudCk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiBjaXJjbGUge1xuICAgICAgc3Ryb2tlOiBtYXQtY29sb3IoJHdhcm4pO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXByb2dyZXNzLXNwaW5uZXItdHlwb2dyYXBoeSgkY29uZmlnKSB7IH1cblxuXG5cblxuXG5AbWl4aW4gX21hdC1yYWRpby1jb2xvcigkcGFsZXR0ZSkge1xuICAmLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xlIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSk7XG4gIH1cblxuICAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSxcbiAgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksXG4gICYubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSxcbiAgJjphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlKTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXJhZGlvLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtcmFkaW8tYnV0dG9uIHtcbiAgICAmLm1hdC1wcmltYXJ5IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtcmFkaW8tY29sb3IoJHByaW1hcnkpO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXJhZGlvLWNvbG9yKCRhY2NlbnQpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgQGluY2x1ZGUgX21hdC1yYWRpby1jb2xvcigkd2Fybik7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBuZWVkcyBleHRyYSBzcGVjaWZpY2l0eSwgYmVjYXVzZSB0aGUgY2xhc3NlcyBhYm92ZSBhcmUgY29tYmluZWRcbiAgICAvLyAoZS5nLiBgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudGApIHdoaWNoIGluY3JlYXNlcyB0aGVpciBzcGVjaWZpY2l0eSBhIGxvdC5cbiAgICAvLyBUT0RPOiBjb25zaWRlciBtYWtpbmcgdGhlIHNlbGVjdG9ycyBpbnRvIGRlc2NlbmRhbnRzIChgLm1hdC1wcmltYXJ5IC5tYXQtcmFkaW8tYnV0dG9uYCkuXG4gICAgJi5tYXQtcmFkaW8tZGlzYWJsZWQge1xuICAgICAgJi5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSxcbiAgICAgIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xlIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkKTtcbiAgICAgIH1cblxuICAgICAgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudCxcbiAgICAgIC5tYXQtcmFkaW8taW5uZXItY2lyY2xlIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZCk7XG4gICAgICB9XG5cbiAgICAgIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudCB7XG4gICAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTd2l0Y2ggdGhpcyB0byBhIHNvbGlkIGNvbG9yIHNpbmNlIHdlJ3JlIHVzaW5nIGBvcGFjaXR5YFxuICAgIC8vIHRvIGNvbnRyb2wgaG93IG9wYXF1ZSB0aGUgcmlwcGxlIHNob3VsZCBiZS5cbiAgICAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hcF9nZXQoJGZvcmVncm91bmQsIGJhc2UpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXJhZGlvLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXJhZGlvLWJ1dHRvbiB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxufVxuXG5cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtc2VsZWN0LXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcblxuICAubWF0LXNlbGVjdC12YWx1ZSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cblxuICAubWF0LXNlbGVjdC1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6IF9tYXQtY29udHJvbC1wbGFjZWhvbGRlci1jb2xvcigkdGhlbWUpO1xuICB9XG5cbiAgLm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtdmFsdWUge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICB9XG5cbiAgLm1hdC1zZWxlY3QtYXJyb3cge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtc2VsZWN0LXBhbmVsIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDQsICR0aGVtZSk7XG5cbiAgICAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKSB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyLCAwLjEyKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQge1xuICAgICYubWF0LWZvY3VzZWQge1xuICAgICAgJi5tYXQtcHJpbWFyeSAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIHRleHQpO1xuICAgICAgfVxuXG4gICAgICAmLm1hdC1hY2NlbnQgLm1hdC1zZWxlY3QtYXJyb3cge1xuICAgICAgICBjb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIHRleHQpO1xuICAgICAgfVxuXG4gICAgICAmLm1hdC13YXJuIC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICAgICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1pbnZhbGlkIC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICAgIH1cblxuICAgIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtYXJyb3cge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtc2VsZWN0LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAvLyBUaGUgdW5pdC1sZXNzIGxpbmUtaGVpZ2h0IGZyb20gdGhlIGZvbnQgY29uZmlnLlxuICAkbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBpbnB1dCk7XG5cbiAgLm1hdC1zZWxlY3Qge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LXNlbGVjdC10cmlnZ2VyIHtcbiAgICBoZWlnaHQ6ICRsaW5lLWhlaWdodCAqIDFlbTtcbiAgfVxufVxuXG5cblxuXG5cblxuQG1peGluIG1hdC1zaWRlbmF2LXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAkZHJhd2VyLWJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZGlhbG9nKTtcbiAgJGRyYXdlci1jb250YWluZXItYmFja2dyb3VuZC1jb2xvcjogIG1hdC1jb2xvcigkYmFja2dyb3VuZCwgYmFja2dyb3VuZCk7XG4gICRkcmF3ZXItcHVzaC1iYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGRpYWxvZyk7XG4gICRkcmF3ZXItc2lkZS1ib3JkZXI6IHNvbGlkIDFweCBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuXG4gIC5tYXQtZHJhd2VyLWNvbnRhaW5lciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGRyYXdlci1jb250YWluZXItYmFja2dyb3VuZC1jb2xvcjtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtZHJhd2VyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZHJhd2VyLWJhY2tncm91bmQtY29sb3I7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgICAmLm1hdC1kcmF3ZXItcHVzaCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZHJhd2VyLXB1c2gtYmFja2dyb3VuZC1jb2xvcjtcbiAgICB9XG5cbiAgICAmOm5vdCgubWF0LWRyYXdlci1zaWRlKSB7XG4gICAgICAvLyBUaGUgZWxldmF0aW9uIG9mIHotMTYgaXMgbm90ZWQgaW4gdGhlIGRlc2lnbiBzcGVjaWZpY2F0aW9ucy5cbiAgICAgIC8vIFNlZSBodHRwczovL21hdGVyaWFsLmlvL2Rlc2lnbi9jb21wb25lbnRzL25hdmlnYXRpb24tZHJhd2VyLmh0bWxcbiAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDE2LCAkdGhlbWUpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZHJhd2VyLXNpZGUge1xuICAgIGJvcmRlci1yaWdodDogJGRyYXdlci1zaWRlLWJvcmRlcjtcblxuICAgICYubWF0LWRyYXdlci1lbmQge1xuICAgICAgYm9yZGVyLWxlZnQ6ICRkcmF3ZXItc2lkZS1ib3JkZXI7XG4gICAgICBib3JkZXItcmlnaHQ6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgW2Rpcj0ncnRsJ10gLm1hdC1kcmF3ZXItc2lkZSB7XG4gICAgYm9yZGVyLWxlZnQ6ICRkcmF3ZXItc2lkZS1ib3JkZXI7XG4gICAgYm9yZGVyLXJpZ2h0OiBub25lO1xuXG4gICAgJi5tYXQtZHJhd2VyLWVuZCB7XG4gICAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICAgIGJvcmRlci1yaWdodDogJGRyYXdlci1zaWRlLWJvcmRlcjtcbiAgICB9XG4gIH1cblxuICAubWF0LWRyYXdlci1iYWNrZHJvcC5tYXQtZHJhd2VyLXNob3duIHtcbiAgICAkb3BhY2l0eTogMC42O1xuICAgICRiYWNrZHJvcC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkLCAkb3BhY2l0eSk7XG5cbiAgICBAaWYgKHR5cGUtb2YoJGJhY2tkcm9wLWNvbG9yKSA9PSBjb2xvcikge1xuICAgICAgLy8gV2UgdXNlIGludmVydCgpIGhlcmUgdG8gaGF2ZSB0aGUgZGFya2VuIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGV4cGVjdGVkIHRvIGJlIHVzZWQuIElmIHRoZVxuICAgICAgLy8gYmFja2dyb3VuZCBpcyBsaWdodCwgd2UgdXNlIGEgZGFyayBiYWNrZHJvcC4gSWYgdGhlIGJhY2tncm91bmQgaXMgZGFyayxcbiAgICAgIC8vIHdlIHVzZSBhIGxpZ2h0IGJhY2tkcm9wLlxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW52ZXJ0KCRiYWNrZHJvcC1jb2xvcik7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIC8vIElmIHdlIGNvdWxkbid0IHJlc29sdmUgdGhlIGJhY2tkcm9wIGNvbG9yIHRvIGEgY29sb3IgdmFsdWUsIGZhbGwgYmFjayB0byB1c2luZ1xuICAgICAgLy8gYG9wYWNpdHlgIHRvIG1ha2UgaXQgb3BhcXVlIHNpbmNlIGl0cyBlbmQgdmFsdWUgY291bGQgYmUgYSBzb2xpZCBjb2xvci5cbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZHJvcC1jb2xvcjtcbiAgICAgIG9wYWNpdHk6ICRvcGFjaXR5O1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNpZGVuYXYtdHlwb2dyYXBoeSgkY29uZmlnKSB7IH1cblxuXG5cblxuXG5cbkBtaXhpbiBfbWF0LXNsaWRlLXRvZ2dsZS1jaGVja2VkKCRwYWxldHRlLCAkdGh1bWItY2hlY2tlZC1odWUpIHtcbiAgJi5tYXQtY2hlY2tlZCB7XG4gICAgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCAkdGh1bWItY2hlY2tlZC1odWUpO1xuICAgIH1cblxuICAgIC5tYXQtc2xpZGUtdG9nZ2xlLWJhciB7XG4gICAgICAvLyBPcGFjaXR5IGlzIGRldGVybWluZWQgZnJvbSB0aGUgc3BlY3MgZm9yIHRoZSBzZWxlY3Rpb24gY29udHJvbHMuXG4gICAgICAvLyBTZWU6IGh0dHBzOi8vbWF0ZXJpYWwuaW8vZGVzaWduL2NvbXBvbmVudHMvc2VsZWN0aW9uLWNvbnRyb2xzLmh0bWwjc3BlY3NcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgJHRodW1iLWNoZWNrZWQtaHVlLCAwLjU0KTtcbiAgICB9XG5cbiAgICAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAgIC8vIFNldCBubyBvcGFjaXR5IGZvciB0aGUgcmlwcGxlcyBiZWNhdXNlIHRoZSByaXBwbGUgb3BhY2l0eSB3aWxsIGJlIGFkanVzdGVkIGR5bmFtaWNhbGx5XG4gICAgICAvLyBiYXNlZCBvbiB0aGUgdHlwZSBvZiBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzbGlkZS10b2dnbGUgKGUuZy4gZm9yIGhvdmVyLCBmb2N1cylcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgJHRodW1iLWNoZWNrZWQtaHVlKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1zbGlkZS10b2dnbGUtdGhlbWUoJHRoZW1lKSB7XG4gICRpcy1kYXJrOiBtYXBfZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC8vIENvbG9yIGh1ZXMgYXJlIGJhc2VkIG9uIHRoZSBzcGVjcyB3aGljaCBicmllZmx5IHNob3cgdGhlIGh1ZXMgdGhhdCBhcmUgYXBwbGllZCB0byBhIHN3aXRjaC5cbiAgLy8gVGhlIDIwMTggc3BlY3Mgbm8gbG9uZ2VyIGRlc2NyaWJlIGhvdyBkYXJrIHN3aXRjaGVzIHNob3VsZCBsb29rIGxpa2UuIER1ZSB0byB0aGUgbGFjayBvZlxuICAvLyBpbmZvcm1hdGlvbiBmb3IgZGFyayB0aGVtZWQgc3dpdGNoZXMsIHdlIHBhcnRpYWxseSBrZWVwIHRoZSBvbGQgYmVoYXZpb3IgdGhhdCBpcyBiYXNlZCBvblxuICAvLyB0aGUgcHJldmlvdXMgc3BlY2lmaWNhdGlvbnMuIEZvciB0aGUgY2hlY2tlZCBjb2xvciB3ZSBhbHdheXMgdXNlIHRoZSBgZGVmYXVsdGAgaHVlIGJlY2F1c2VcbiAgLy8gdGhhdCBmb2xsb3dzIE1EQyBhbmQgYWxzbyBtYWtlcyBpdCBlYXNpZXIgZm9yIHBlb3BsZSB0byBjcmVhdGUgYSBjdXN0b20gdGhlbWUgd2l0aG91dCBuZWVkaW5nXG4gIC8vIHRvIHNwZWNpZnkgZWFjaCBodWUgaW5kaXZpZHVhbGx5LlxuICAkdGh1bWItdW5jaGVja2VkLWh1ZTogaWYoJGlzLWRhcmssIDQwMCwgNTApO1xuICAkdGh1bWItY2hlY2tlZC1odWU6IGRlZmF1bHQ7XG5cbiAgJGJhci11bmNoZWNrZWQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQpO1xuICAkcmlwcGxlLXVuY2hlY2tlZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBiYXNlKTtcblxuICAubWF0LXNsaWRlLXRvZ2dsZSB7XG4gICAgQGluY2x1ZGUgX21hdC1zbGlkZS10b2dnbGUtY2hlY2tlZCgkYWNjZW50LCAkdGh1bWItY2hlY2tlZC1odWUpO1xuXG4gICAgJi5tYXQtcHJpbWFyeSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXNsaWRlLXRvZ2dsZS1jaGVja2VkKCRwcmltYXJ5LCAkdGh1bWItY2hlY2tlZC1odWUpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgQGluY2x1ZGUgX21hdC1zbGlkZS10b2dnbGUtY2hlY2tlZCgkd2FybiwgJHRodW1iLWNoZWNrZWQtaHVlKTtcbiAgICB9XG5cbiAgICAmOm5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgICAgLy8gU2V0IG5vIG9wYWNpdHkgZm9yIHRoZSByaXBwbGVzIGJlY2F1c2UgdGhlIHJpcHBsZSBvcGFjaXR5IHdpbGwgYmUgYWRqdXN0ZWQgZHluYW1pY2FsbHlcbiAgICAgIC8vIGJhc2VkIG9uIHRoZSB0eXBlIG9mIGludGVyYWN0aW9uIHdpdGggdGhlIHNsaWRlLXRvZ2dsZSAoZS5nLiBmb3IgaG92ZXIsIGZvY3VzKVxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHJpcHBsZS11bmNoZWNrZWQtY29sb3I7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDEsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRtYXQtZ3JleSwgJHRodW1iLXVuY2hlY2tlZC1odWUpO1xuICB9XG5cbiAgLm1hdC1zbGlkZS10b2dnbGUtYmFyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFyLXVuY2hlY2tlZC1jb2xvcjtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNsaWRlLXRvZ2dsZS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1zbGlkZS10b2dnbGUtY29udGVudCB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBfbWF0LXNsaWRlci1pbm5lci1jb250ZW50LXRoZW1lKCRwYWxldHRlKSB7XG4gIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsXG4gIC5tYXQtc2xpZGVyLXRodW1iLFxuICAubWF0LXNsaWRlci10aHVtYi1sYWJlbCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlKTtcbiAgfVxuXG4gIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHQge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsIGRlZmF1bHQtY29udHJhc3QpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtc2xpZGVyLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAkbWF0LXNsaWRlci1vZmYtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2xpZGVyLW9mZik7XG4gICRtYXQtc2xpZGVyLW9mZi1mb2N1c2VkLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNsaWRlci1vZmYtYWN0aXZlKTtcbiAgJG1hdC1zbGlkZXItZGlzYWJsZWQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2xpZGVyLW9mZik7XG4gICRtYXQtc2xpZGVyLWxhYmVsZWQtbWluLXZhbHVlLXRodW1iLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNsaWRlci1taW4pO1xuICAkbWF0LXNsaWRlci1sYWJlbGVkLW1pbi12YWx1ZS10aHVtYi1sYWJlbC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzbGlkZXItb2ZmKTtcbiAgJG1hdC1zbGlkZXItdGljay1vcGFjaXR5OiAwLjc7XG4gICRtYXQtc2xpZGVyLXRpY2stY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgYmFzZSwgJG1hdC1zbGlkZXItdGljay1vcGFjaXR5KTtcbiAgJG1hdC1zbGlkZXItdGljay1zaXplOiAycHg7XG5cbiAgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJG1hdC1zbGlkZXItb2ZmLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1wcmltYXJ5IHtcbiAgICBAaW5jbHVkZSBfbWF0LXNsaWRlci1pbm5lci1jb250ZW50LXRoZW1lKCRwcmltYXJ5KTtcbiAgfVxuXG4gIC5tYXQtYWNjZW50IHtcbiAgICBAaW5jbHVkZSBfbWF0LXNsaWRlci1pbm5lci1jb250ZW50LXRoZW1lKCRhY2NlbnQpO1xuICB9XG5cbiAgLm1hdC13YXJuIHtcbiAgICBAaW5jbHVkZSBfbWF0LXNsaWRlci1pbm5lci1jb250ZW50LXRoZW1lKCR3YXJuKTtcbiAgfVxuXG4gIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmcge1xuICAgICRvcGFjaXR5OiAwLjI7XG4gICAgJGNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgZGVmYXVsdCwgJG9wYWNpdHkpO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvcjtcblxuICAgIC8vIGBtYXQtY29sb3JgIHVzZXMgYHJnYmFgIGZvciB0aGUgb3BhY2l0eSB3aGljaCB3b24ndCB3b3JrIHdpdGhcbiAgICAvLyBDU1MgdmFyaWFibGVzIHNvIHdlIG5lZWQgdG8gdXNlIGBvcGFjaXR5YCBhcyBhIGZhbGxiYWNrLlxuICAgIEBpZiAodHlwZS1vZigkY29sb3IpICE9IGNvbG9yKSB7XG4gICAgICBvcGFjaXR5OiAkb3BhY2l0eTtcbiAgICB9XG4gIH1cblxuICAubWF0LXNsaWRlcjpob3ZlcixcbiAgLmNkay1mb2N1c2VkIHtcbiAgICAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRtYXQtc2xpZGVyLW9mZi1mb2N1c2VkLWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2xpZGVyLWRpc2FibGVkIHtcbiAgICAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLFxuICAgIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsXG4gICAgLm1hdC1zbGlkZXItdGh1bWIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG1hdC1zbGlkZXItZGlzYWJsZWQtY29sb3I7XG4gICAgfVxuXG4gICAgJjpob3ZlciB7XG4gICAgICAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG1hdC1zbGlkZXItZGlzYWJsZWQtY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbGlkZXItbWluLXZhbHVlIHtcbiAgICAubWF0LXNsaWRlci1mb2N1cy1yaW5nIHtcbiAgICAgICRvcGFjaXR5OiAwLjEyO1xuICAgICAgJGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGJhc2UsICRvcGFjaXR5KTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvcjtcblxuICAgICAgLy8gYG1hdC1jb2xvcmAgdXNlcyBgcmdiYWAgZm9yIHRoZSBvcGFjaXR5IHdoaWNoIHdvbid0IHdvcmsgd2l0aFxuICAgICAgLy8gQ1NTIHZhcmlhYmxlcyBzbyB3ZSBuZWVkIHRvIHVzZSBgb3BhY2l0eWAgYXMgYSBmYWxsYmFjay5cbiAgICAgIEBpZiAodHlwZS1vZigkY29sb3IpICE9IGNvbG9yKSB7XG4gICAgICAgIG9wYWNpdHk6ICRvcGFjaXR5O1xuICAgICAgfVxuICAgIH1cblxuICAgICYubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIHtcbiAgICAgIC5tYXQtc2xpZGVyLXRodW1iLFxuICAgICAgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbWF0LXNsaWRlci1sYWJlbGVkLW1pbi12YWx1ZS10aHVtYi1jb2xvcjtcbiAgICAgIH1cblxuICAgICAgJi5jZGstZm9jdXNlZCB7XG4gICAgICAgIC5tYXQtc2xpZGVyLXRodW1iLFxuICAgICAgICAubWF0LXNsaWRlci10aHVtYi1sYWJlbCB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG1hdC1zbGlkZXItbGFiZWxlZC1taW4tdmFsdWUtdGh1bWItbGFiZWwtY29sb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKSB7XG4gICAgICAubWF0LXNsaWRlci10aHVtYiB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJG1hdC1zbGlkZXItb2ZmLWNvbG9yO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIH1cblxuICAgICAgJjpob3ZlcixcbiAgICAgICYuY2RrLWZvY3VzZWQge1xuICAgICAgICAubWF0LXNsaWRlci10aHVtYiB7XG4gICAgICAgICAgYm9yZGVyLWNvbG9yOiAkbWF0LXNsaWRlci1vZmYtZm9jdXNlZC1jb2xvcjtcbiAgICAgICAgfVxuXG4gICAgICAgICYubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYiB7XG4gICAgICAgICAgYm9yZGVyLWNvbG9yOiAkbWF0LXNsaWRlci1kaXNhYmxlZC1jb2xvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlciB7XG4gICAgYm9yZGVyLWNvbG9yOiAkbWF0LXNsaWRlci10aWNrLWNvbG9yO1xuXG4gICAgLy8gYG1hdC1jb2xvcmAgdXNlcyBgcmdiYWAgZm9yIHRoZSBvcGFjaXR5IHdoaWNoIHdvbid0IHdvcmsgd2l0aFxuICAgIC8vIENTUyB2YXJpYWJsZXMgc28gd2UgbmVlZCB0byB1c2UgYG9wYWNpdHlgIGFzIGEgZmFsbGJhY2suXG4gICAgQGlmICh0eXBlLW9mKCRtYXQtc2xpZGVyLXRpY2stY29sb3IpICE9IGNvbG9yKSB7XG4gICAgICBvcGFjaXR5OiAkbWF0LXNsaWRlci10aWNrLW9wYWNpdHk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrcyB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byByaWdodCwgJG1hdC1zbGlkZXItdGljay1jb2xvcixcbiAgICAgICAgJG1hdC1zbGlkZXItdGljay1jb2xvciAkbWF0LXNsaWRlci10aWNrLXNpemUsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KTtcbiAgICAvLyBGaXJlZm94IGRvZXNuJ3QgZHJhdyB0aGUgZ3JhZGllbnQgY29ycmVjdGx5IHdpdGggJ3RvIHJpZ2h0J1xuICAgIC8vIChzZWUgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxNDMxOSkuXG4gICAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1yZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDAuMDAwMWRlZywgJG1hdC1zbGlkZXItdGljay1jb2xvcixcbiAgICAgICAgJG1hdC1zbGlkZXItdGljay1jb2xvciAkbWF0LXNsaWRlci10aWNrLXNpemUsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KTtcblxuICAgIC8vIGBtYXQtY29sb3JgIHVzZXMgYHJnYmFgIGZvciB0aGUgb3BhY2l0eSB3aGljaCB3b24ndCB3b3JrIHdpdGhcbiAgICAvLyBDU1MgdmFyaWFibGVzIHNvIHdlIG5lZWQgdG8gdXNlIGBvcGFjaXR5YCBhcyBhIGZhbGxiYWNrLlxuICAgIEBpZiAodHlwZS1vZigkbWF0LXNsaWRlci10aWNrLWNvbG9yKSAhPSBjb2xvcikge1xuICAgICAgb3BhY2l0eTogJG1hdC1zbGlkZXItdGljay1vcGFjaXR5O1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRpY2tzIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgJG1hdC1zbGlkZXItdGljay1jb2xvcixcbiAgICAgICAgJG1hdC1zbGlkZXItdGljay1jb2xvciAkbWF0LXNsaWRlci10aWNrLXNpemUsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KTtcblxuICAgIC8vIGBtYXQtY29sb3JgIHVzZXMgYHJnYmFgIGZvciB0aGUgb3BhY2l0eSB3aGljaCB3b24ndCB3b3JrIHdpdGhcbiAgICAvLyBDU1MgdmFyaWFibGVzIHNvIHdlIG5lZWQgdG8gdXNlIGBvcGFjaXR5YCBhcyBhIGZhbGxiYWNrLlxuICAgIEBpZiAodHlwZS1vZigkbWF0LXNsaWRlci10aWNrLWNvbG9yKSAhPSBjb2xvcikge1xuICAgICAgb3BhY2l0eTogJG1hdC1zbGlkZXItdGljay1vcGFjaXR5O1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNsaWRlci10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dCB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0yKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LXN0ZXBwZXItdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG5cbiAgLm1hdC1zdGVwLWhlYWRlciB7XG4gICAgJi5jZGsta2V5Ym9hcmQtZm9jdXNlZCxcbiAgICAmLmNkay1wcm9ncmFtLWZvY3VzZWQsXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyKTtcbiAgICB9XG5cbiAgICAvLyBPbiB0b3VjaCBkZXZpY2VzIHRoZSA6aG92ZXIgc3RhdGUgd2lsbCBsaW5nZXIgb24gdGhlIGVsZW1lbnQgYWZ0ZXIgYSB0YXAuXG4gICAgLy8gUmVzZXQgaXQgdmlhIGBAbWVkaWFgIGFmdGVyIHRoZSBkZWNsYXJhdGlvbiwgYmVjYXVzZSB0aGUgbWVkaWEgcXVlcnkgaXNuJ3RcbiAgICAvLyBzdXBwb3J0ZWQgYnkgYWxsIGJyb3dzZXJzIHlldC5cbiAgICBAbWVkaWEgKGhvdmVyOiBub25lKSB7XG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAubWF0LXN0ZXAtbGFiZWwsXG4gICAgLm1hdC1zdGVwLW9wdGlvbmFsIHtcbiAgICAgIC8vIFRPRE8oam9zZXBocGVycm90dCk6IFVwZGF0ZSB0byB1c2luZyBhIGNvcnJlY3RlZCBkaXNhYmxlZC10ZXh0IGNvbnRyYXN0XG4gICAgICAvLyBpbnN0ZWFkIG9mIHNlY29uZGFyeS10ZXh0LlxuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICAgIH1cblxuICAgIC5tYXQtc3RlcC1pY29uIHtcbiAgICAgIC8vIFRPRE8oam9zZXBocGVycm90dCk6IFVwZGF0ZSB0byB1c2luZyBhIGNvcnJlY3RlZCBkaXNhYmxlZC10ZXh0IGNvbnRyYXN0XG4gICAgICAvLyBpbnN0ZWFkIG9mIHNlY29uZGFyeS10ZXh0LlxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgICB9XG5cbiAgICAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCxcbiAgICAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLFxuICAgIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5KTtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIGRlZmF1bHQtY29udHJhc3QpO1xuICAgIH1cblxuICAgIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVycm9yIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gICAgfVxuXG4gICAgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWFjdGl2ZSB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICB9XG5cbiAgICAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtZXJyb3Ige1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zdGVwcGVyLWhvcml6b250YWwsIC5tYXQtc3RlcHBlci12ZXJ0aWNhbCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgfVxuXG4gIC5tYXQtc3RlcHBlci12ZXJ0aWNhbC1saW5lOjpiZWZvcmUge1xuICAgIGJvcmRlci1sZWZ0LWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG5cbiAgLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjpiZWZvcmUsXG4gIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YWZ0ZXIsXG4gIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLWxpbmUge1xuICAgIGJvcmRlci10b3AtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cbn1cblxuQG1peGluIG1hdC1zdGVwcGVyLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXN0ZXBwZXItdmVydGljYWwsIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC1zdGVwLWxhYmVsIHtcbiAgICBmb250OiB7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSk7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTEpO1xuICAgIH07XG4gIH1cblxuICAubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yIHtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICB9XG5cbiAgLm1hdC1zdGVwLWxhYmVsLWVycm9yIHtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0yKTtcbiAgfVxuXG4gIC5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZCB7XG4gICAgZm9udDoge1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTIpO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0yKTtcbiAgICB9O1xuICB9XG59XG5cbkBtaXhpbiBtYXQtc29ydC10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LXNvcnQtaGVhZGVyLWFycm93IHtcbiAgICAkdGFibGUtYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnY2FyZCcpO1xuICAgICR0ZXh0LWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcblxuICAgIC8vIEJlY2F1c2UgdGhlIGFycm93IGlzIG1hZGUgdXAgb2YgbXVsdGlwbGUgZWxlbWVudHMgdGhhdCBhcmUgc3RhY2tlZCBvbiB0b3Agb2YgZWFjaCBvdGhlcixcbiAgICAvLyB3ZSBjYW4ndCB1c2UgdGhlIHNlbWktdHJhc3BhcmVudCBjb2xvciBmcm9tIHRoZSB0aGVtZSBkaXJlY3RseS4gSWYgdGhlIHZhbHVlIGlzIGEgY29sb3JcbiAgICAvLyAqdHlwZSosIHdlIGNvbnZlcnQgaXQgaW50byBhIHNvbGlkIGNvbG9yIGJ5IHRha2luZyB0aGUgb3BhY2l0eSBmcm9tIHRoZSByZ2JhIHZhbHVlIGFuZFxuICAgIC8vIHVzaW5nIHRoZSB2YWx1ZSB0byBkZXRlcm1pbmUgdGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIGJhY2tncm91bmQgdG8gcHV0IGludG8gZm9yZWdyb3VuZFxuICAgIC8vIHdoZW4gbWl4aW5nIHRoZSBjb2xvcnMgdG9nZXRoZXIuIE90aGVyd2lzZSwgaWYgaXQgcmVzb2x2ZXMgdG8gc29tZXRoaW5nIGRpZmZlcmVudFxuICAgIC8vIChlLmcuIGl0IHJlc29sdmVzIHRvIGEgQ1NTIHZhcmlhYmxlKSwgd2UgdXNlIHRoZSBjb2xvciBkaXJlY3RseS5cbiAgICBAaWYgKHR5cGUtb2YoJHRhYmxlLWJhY2tncm91bmQpID09IGNvbG9yIGFuZCB0eXBlLW9mKCR0ZXh0LWNvbG9yKSA9PSBjb2xvcikge1xuICAgICAgJHRleHQtb3BhY2l0eTogb3BhY2l0eSgkdGV4dC1jb2xvcik7XG4gICAgICBjb2xvcjogbWl4KCR0YWJsZS1iYWNrZ3JvdW5kLCByZ2JhKCR0ZXh0LWNvbG9yLCAxKSwgKDEgLSAkdGV4dC1vcGFjaXR5KSAqIDEwMCUpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICBjb2xvcjogJHRleHQtY29sb3I7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtc29ydC10eXBvZ3JhcGh5KCRjb25maWcpIHsgfVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtdGFicy10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRoZWFkZXItYm9yZGVyOiAxcHggc29saWQgbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcblxuICAubWF0LXRhYi1uYXYtYmFyLFxuICAubWF0LXRhYi1oZWFkZXIge1xuICAgIGJvcmRlci1ib3R0b206ICRoZWFkZXItYm9yZGVyO1xuICB9XG5cbiAgLm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIHtcbiAgICAubWF0LXRhYi1uYXYtYmFyLFxuICAgIC5tYXQtdGFiLWhlYWRlciB7XG4gICAgICBib3JkZXItdG9wOiAkaGVhZGVyLWJvcmRlcjtcbiAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgLm1hdC10YWItbGFiZWwsIC5tYXQtdGFiLWxpbmsge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gICAgJi5tYXQtdGFiLWRpc2FibGVkIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24ge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24ge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgfVxuXG4gIC8vIFJlbW92ZSBoZWFkZXIgYm9yZGVyIHdoZW4gdGhlcmUgaXMgYSBiYWNrZ3JvdW5kIGNvbG9yXG4gIC5tYXQtdGFiLWdyb3VwW2NsYXNzKj0nbWF0LWJhY2tncm91bmQtJ10gLm1hdC10YWItaGVhZGVyLFxuICAubWF0LXRhYi1uYXYtYmFyW2NsYXNzKj0nbWF0LWJhY2tncm91bmQtJ10ge1xuICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG4gICAgYm9yZGVyLXRvcDogbm9uZTtcbiAgfVxuXG4gIC5tYXQtdGFiLWdyb3VwLCAubWF0LXRhYi1uYXYtYmFyIHtcbiAgICAkdGhlbWUtY29sb3JzOiAoXG4gICAgICBwcmltYXJ5OiAkcHJpbWFyeSxcbiAgICAgIGFjY2VudDogJGFjY2VudCxcbiAgICAgIHdhcm46ICR3YXJuXG4gICAgKTtcblxuICAgIEBlYWNoICRuYW1lLCAkY29sb3IgaW4gJHRoZW1lLWNvbG9ycyB7XG4gICAgICAvLyBTZXQgdGhlIGZvcmVncm91bmQgY29sb3Igb2YgdGhlIHRhYnNcbiAgICAgICYubWF0LSN7JG5hbWV9IHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC10YWItbGFiZWwtZm9jdXMoJGNvbG9yKTtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1pbmstYmFyKCRjb2xvcik7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgaW5rIGJhciB3aGVuIGJhY2tncm91bmQgY29sb3IgaXMgdGhlIHNhbWVcbiAgICAgICAgJi5tYXQtYmFja2dyb3VuZC0jeyRuYW1lfSB7XG4gICAgICAgICAgQGluY2x1ZGUgX21hdC1pbmstYmFyKCRjb2xvciwgZGVmYXVsdC1jb250cmFzdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBAZWFjaCAkbmFtZSwgJGNvbG9yIGluICR0aGVtZS1jb2xvcnMge1xuICAgICAgLy8gU2V0IGJhY2tncm91bmQgY29sb3Igb2YgdGhlIHRhYnMgYW5kIG92ZXJyaWRlIGZvY3VzIGNvbG9yXG4gICAgICAmLm1hdC1iYWNrZ3JvdW5kLSN7JG5hbWV9IHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC10YWItbGFiZWwtZm9jdXMoJGNvbG9yKTtcbiAgICAgICAgQGluY2x1ZGUgX21hdC10YWJzLWJhY2tncm91bmQoJGNvbG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuQG1peGluIF9tYXQtaW5rLWJhcigkY29sb3IsICRodWU6IGRlZmF1bHQpIHtcbiAgLm1hdC1pbmstYmFyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGNvbG9yLCAkaHVlKTtcbiAgfVxufVxuXG5AbWl4aW4gX21hdC10YWItbGFiZWwtZm9jdXMoJHRhYi1mb2N1cy1jb2xvcikge1xuICAubWF0LXRhYi1sYWJlbCxcbiAgLm1hdC10YWItbGluayB7XG4gICAgJi5jZGsta2V5Ym9hcmQtZm9jdXNlZCxcbiAgICAmLmNkay1wcm9ncmFtLWZvY3VzZWQge1xuICAgICAgJjpub3QoLm1hdC10YWItZGlzYWJsZWQpIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCR0YWItZm9jdXMtY29sb3IsIGxpZ2h0ZXIsIDAuMyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBfbWF0LXRhYnMtYmFja2dyb3VuZCgkYmFja2dyb3VuZC1jb2xvcikge1xuICAvLyBTZXQgYmFja2dyb3VuZCBjb2xvciBmb3IgdGhlIHRhYiBncm91cFxuICAubWF0LXRhYi1oZWFkZXIsIC5tYXQtdGFiLWxpbmtzLCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLWNvbG9yKTtcbiAgfVxuXG4gIC8vIFNldCBsYWJlbHMgdG8gY29udHJhc3QgYWdhaW5zdCBiYWNrZ3JvdW5kXG4gIC5tYXQtdGFiLWxhYmVsLCAubWF0LXRhYi1saW5rIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLWNvbG9yLCBkZWZhdWx0LWNvbnRyYXN0KTtcblxuICAgICYubWF0LXRhYi1kaXNhYmxlZCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLWNvbG9yLCBkZWZhdWx0LWNvbnRyYXN0LCAwLjQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNldCBwYWdpbmF0aW9uIGNoZXZyb25zIHRvIGNvbnRyYXN0IGJhY2tncm91bmRcbiAgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQtY29sb3IsIGRlZmF1bHQtY29udHJhc3QpO1xuICB9XG5cbiAgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQtY29sb3IsIGRlZmF1bHQtY29udHJhc3QsIDAuNCk7XG4gIH1cblxuICAvLyBTZXQgcmlwcGxlcyBjb2xvciB0byBiZSB0aGUgY29udHJhc3QgY29sb3Igb2YgdGhlIG5ldyBiYWNrZ3JvdW5kLiBPdGhlcndpc2UgdGhlIHJpcHBsZVxuICAvLyBjb2xvciB3aWxsIGJlIGJhc2VkIG9uIHRoZSBhcHAgYmFja2dyb3VuZCBjb2xvci5cbiAgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLWNvbG9yLCBkZWZhdWx0LWNvbnRyYXN0LCAwLjEyKTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXRhYnMtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtdGFiLWdyb3VwIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC10YWItbGFiZWwsIC5tYXQtdGFiLWxpbmsge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGJ1dHRvbik7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJ1dHRvbik7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBidXR0b24pO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuQG1peGluIF9tYXQtdG9vbGJhci1jb2xvcigkcGFsZXR0ZSkge1xuICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJHBhbGV0dGUpO1xuICBjb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCBkZWZhdWx0LWNvbnRyYXN0KTtcbn1cblxuQG1peGluIF9tYXQtdG9vbGJhci1mb3JtLWZpZWxkLW92ZXJyaWRlcyB7XG4gIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUsXG4gIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsXG4gIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Q29sb3I7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtbGFiZWwsXG4gIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwsXG4gIC5tYXQtc2VsZWN0LXZhbHVlLFxuICAubWF0LXNlbGVjdC1hcnJvdyxcbiAgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgfVxuXG4gIC5tYXQtaW5wdXQtZWxlbWVudCB7XG4gICAgY2FyZXQtY29sb3I6IGN1cnJlbnRDb2xvcjtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXRvb2xiYXItdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtdG9vbGJhciB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBhcHAtYmFyKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAgICYubWF0LXByaW1hcnkge1xuICAgICAgQGluY2x1ZGUgX21hdC10b29sYmFyLWNvbG9yKCRwcmltYXJ5KTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgQGluY2x1ZGUgX21hdC10b29sYmFyLWNvbG9yKCRhY2NlbnQpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgQGluY2x1ZGUgX21hdC10b29sYmFyLWNvbG9yKCR3YXJuKTtcbiAgICB9XG5cbiAgICBAaW5jbHVkZSBfbWF0LXRvb2xiYXItZm9ybS1maWVsZC1vdmVycmlkZXM7XG4gIH1cbn1cblxuQG1peGluIG1hdC10b29sYmFyLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXRvb2xiYXIsXG4gIC5tYXQtdG9vbGJhciBoMSxcbiAgLm1hdC10b29sYmFyIGgyLFxuICAubWF0LXRvb2xiYXIgaDMsXG4gIC5tYXQtdG9vbGJhciBoNCxcbiAgLm1hdC10b29sYmFyIGg1LFxuICAubWF0LXRvb2xiYXIgaDYge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCB0aXRsZSk7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG5cblxuXG5cblxuJG1hdC10b29sdGlwLXRhcmdldC1oZWlnaHQ6IDIycHg7XG4kbWF0LXRvb2x0aXAtZm9udC1zaXplOiAxMHB4O1xuJG1hdC10b29sdGlwLXZlcnRpY2FsLXBhZGRpbmc6ICgkbWF0LXRvb2x0aXAtdGFyZ2V0LWhlaWdodCAtICRtYXQtdG9vbHRpcC1mb250LXNpemUpIC8gMjtcblxuJG1hdC10b29sdGlwLWhhbmRzZXQtdGFyZ2V0LWhlaWdodDogMzBweDtcbiRtYXQtdG9vbHRpcC1oYW5kc2V0LWZvbnQtc2l6ZTogMTRweDtcbiRtYXQtdG9vbHRpcC1oYW5kc2V0LXZlcnRpY2FsLXBhZGRpbmc6XG4gICAgKCRtYXQtdG9vbHRpcC1oYW5kc2V0LXRhcmdldC1oZWlnaHQgLSAkbWF0LXRvb2x0aXAtaGFuZHNldC1mb250LXNpemUpIC8gMjtcblxuQG1peGluIG1hdC10b29sdGlwLXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuXG4gIC5tYXQtdG9vbHRpcCB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCB0b29sdGlwLCAwLjkpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtdG9vbHRpcC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC10b29sdGlwIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICAgIGZvbnQtc2l6ZTogJG1hdC10b29sdGlwLWZvbnQtc2l6ZTtcbiAgICBwYWRkaW5nLXRvcDogJG1hdC10b29sdGlwLXZlcnRpY2FsLXBhZGRpbmc7XG4gICAgcGFkZGluZy1ib3R0b206ICRtYXQtdG9vbHRpcC12ZXJ0aWNhbC1wYWRkaW5nO1xuICB9XG5cbiAgLm1hdC10b29sdGlwLWhhbmRzZXQge1xuICAgIGZvbnQtc2l6ZTogJG1hdC10b29sdGlwLWhhbmRzZXQtZm9udC1zaXplO1xuICAgIHBhZGRpbmctdG9wOiAkbWF0LXRvb2x0aXAtaGFuZHNldC12ZXJ0aWNhbC1wYWRkaW5nO1xuICAgIHBhZGRpbmctYm90dG9tOiAkbWF0LXRvb2x0aXAtaGFuZHNldC12ZXJ0aWNhbC1wYWRkaW5nO1xuICB9XG59XG5cblxuXG5cblxuQG1peGluIG1hdC1zbmFjay1iYXItdGhlbWUoJHRoZW1lKSB7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuXG4gIC5tYXQtc25hY2stYmFyLWNvbnRhaW5lciB7XG4gICAgLy8gVXNlIHRoZSBwcmltYXJ5IHRleHQgb24gdGhlIGRhcmsgdGhlbWUsIGV2ZW4gdGhvdWdoIHRoZSBsaWdodGVyIG9uZSB1c2VzXG4gICAgLy8gYSBzZWNvbmRhcnksIGJlY2F1c2UgdGhlIGNvbnRyYXN0IG9uIHRoZSBsaWdodCBwcmltYXJ5IHRleHQgaXMgcG9vci5cbiAgICBjb2xvcjogaWYoJGlzLWRhcmstdGhlbWUsICRkYXJrLXByaW1hcnktdGV4dCwgJGxpZ2h0LXNlY29uZGFyeS10ZXh0KTtcbiAgICBiYWNrZ3JvdW5kOiBpZigkaXMtZGFyay10aGVtZSwgbWFwLWdldCgkbWF0LWdyZXksIDUwKSwgIzMyMzIzMik7XG5cbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbig2LCAkdGhlbWUpO1xuICB9XG5cbiAgLm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uIHtcbiAgICBjb2xvcjogaWYoJGlzLWRhcmstdGhlbWUsIGluaGVyaXQsIG1hdC1jb2xvcigkYWNjZW50LCB0ZXh0KSk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1zbmFjay1iYXItdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtc2ltcGxlLXNuYWNrYmFyIHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBib2R5LTEpO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbiB7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBpbmhlcml0O1xuICAgICAgc2l6ZTogaW5oZXJpdDtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJ1dHRvbik7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLy8gVGhlbWUgc3R5bGVzIHRoYXQgb25seSBhcHBseSB0byB0aGUgZmlsbCBhcHBlYXJhbmNlIG9mIHRoZSBmb3JtLWZpZWxkLlxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtZmlsbC10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcblxuICAkZmlsbC1iYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGJhc2UsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjEsIDAuMDQpKTtcbiAgJGZpbGwtZGlzYWJsZWQtYmFja2dyb3VuZDogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBiYXNlLCBpZigkaXMtZGFyay10aGVtZSwgMC4wNSwgMC4wMikpO1xuICAkdW5kZXJsaW5lLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjUsIDAuNDIpKTtcbiAgJGxhYmVsLWRpc2FibGVkLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwge1xuICAgIC5tYXQtZm9ybS1maWVsZC1mbGV4IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRmaWxsLWJhY2tncm91bmQ7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtZmxleCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZmlsbC1kaXNhYmxlZC1iYWNrZ3JvdW5kO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yO1xuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQge1xuICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgY29sb3I6ICRsYWJlbC1kaXNhYmxlZC1jb2xvcjtcbiAgICAgIH1cblxuICAgICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIFVzZWQgdG8gbWFrZSBpbnN0YW5jZXMgb2YgdGhlIF9tYXQtZm9ybS1maWVsZC1sYWJlbC1mbG9hdGluZyBtaXhpbiBuZWdsaWdpYmx5IGRpZmZlcmVudCxcbi8vIGFuZCBwcmV2ZW50IEdvb2dsZSdzIENTUyBPcHRpbWl6ZXIgZnJvbSBjb2xsYXBzaW5nIHRoZSBkZWNsYXJhdGlvbnMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugc29tZVxuLy8gb2YgdGhlIHNlbGVjdG9ycyBjb250YWluIHBzZXVkby1jbGFzc2VzIG5vdCByZWNvZ25pemVkIGluIGFsbCBicm93c2Vycy4gSWYgYSBicm93c2VyIGVuY291bnRlcnNcbi8vIGFuIHVua25vd24gcHNldWRvLWNsYXNzIGl0IHdpbGwgZGlzY2FyZCB0aGUgZW50aXJlIHJ1bGUgc2V0LlxuJG1hdC1mb3JtLWZpZWxkLWZpbGwtZGVkdXBlOiAwO1xuXG4vLyBBcHBsaWVzIGEgZmxvYXRpbmcgbGFiZWwgYWJvdmUgdGhlIGZvcm0gZmllbGQgY29udHJvbCBpdHNlbGYuXG5AbWl4aW4gX21hdC1mb3JtLWZpZWxkLWZpbGwtbGFiZWwtZmxvYXRpbmcoJGZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCkge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRpbmZpeC1tYXJnaW4tdG9wIC0gJGluZml4LXBhZGRpbmcgKyAkbWF0LWZvcm0tZmllbGQtZmlsbC1kZWR1cGUpXG4gICAgICAgICAgICAgc2NhbGUoJGZvbnQtc2NhbGUpO1xuICB3aWR0aDogMTAwJSAvICRmb250LXNjYWxlICsgJG1hdC1mb3JtLWZpZWxkLWZpbGwtZGVkdXBlO1xuXG4gICRtYXQtZm9ybS1maWVsZC1maWxsLWRlZHVwZTogJG1hdC1mb3JtLWZpZWxkLWZpbGwtZGVkdXBlICsgMC4wMDAwMSAhZ2xvYmFsO1xufVxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtZmlsbC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLy8gVGhlIHVuaXQtbGVzcyBsaW5lLWhlaWdodCBmcm9tIHRoZSBmb250IGNvbmZpZy5cbiAgJGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgaW5wdXQpO1xuICAvLyBUaGUgYW1vdW50IHRvIHNjYWxlIHRoZSBmb250IGZvciB0aGUgZmxvYXRpbmcgbGFiZWwgYW5kIHN1YnNjcmlwdC5cbiAgJHN1YnNjcmlwdC1mb250LXNjYWxlOiAwLjc1O1xuICAvLyBUaGUgcGFkZGluZyBvbiB0b3Agb2YgdGhlIGluZml4LlxuICAkaW5maXgtcGFkZGluZy10b3A6IDAuMjVlbTtcbiAgLy8gVGhlIHBhZGRpbmcgYmVsb3cgdGhlIGluZml4LlxuICAkaW5maXgtcGFkZGluZy1ib3R0b206IDAuNzVlbTtcbiAgLy8gVGhlIG1hcmdpbiBhcHBsaWVkIHRvIHRoZSBmb3JtLWZpZWxkLWluZml4IHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBmbG9hdGluZyBsYWJlbC5cbiAgJGluZml4LW1hcmdpbi10b3A6IDFlbSAqICRsaW5lLWhlaWdodCAqICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcbiAgLy8gVGhlIGFtb3VudCB3ZSBvZmZzZXQgdGhlIGxhYmVsIGZyb20gdGhlIGlucHV0IHRleHQgaW4gdGhlIGZpbGwgYXBwZWFyYW5jZS5cbiAgJGZpbGwtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQ6IC0wLjVlbTtcblxuICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIHtcbiAgICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgcGFkZGluZzogJGluZml4LXBhZGRpbmctdG9wIDAgJGluZml4LXBhZGRpbmctYm90dG9tIDA7XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgIHRvcDogJGluZml4LW1hcmdpbi10b3AgKyAkaW5maXgtcGFkZGluZy10b3A7XG4gICAgICBtYXJnaW4tdG9wOiAkZmlsbC1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldDtcbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCB7XG4gICAgICAmLm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsXG4gICAgICAubWF0LWlucHV0LXNlcnZlcjpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1maWxsLWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmctdG9wICsgJGZpbGwtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQsXG4gICAgICAgICAgICAgICAgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXJ2ZXItc2lkZSByZW5kZXJlZCBtYXRJbnB1dCB3aXRoIGEgbGFiZWwgYXR0cmlidXRlIGJ1dCBsYWJlbCBub3Qgc2hvd25cbiAgICAgIC8vICh1c2VkIGFzIGEgcHVyZSBDU1Mgc3RhbmQtaW4gZm9yIG1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCkuXG4gICAgICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlclxuICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWZpbGwtbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZy10b3AgKyAkZmlsbC1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldCxcbiAgICAgICAgICAgICAgICAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5cbi8vIFRoZW1lIHN0eWxlcyB0aGF0IG9ubHkgYXBwbHkgdG8gdGhlIGxlZ2FjeSBhcHBlYXJhbmNlIG9mIHRoZSBmb3JtLWZpZWxkLlxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtbGVnYWN5LXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuXG4gICRsYWJlbC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gICR1bmRlcmxpbmUtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlciwgaWYoJGlzLWRhcmstdGhlbWUsIDAuNywgMC40MikpO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgIGNvbG9yOiAkbGFiZWwtY29sb3I7XG4gICAgfVxuXG4gICAgLm1hdC1oaW50IHtcbiAgICAgIGNvbG9yOiAkbGFiZWwtY29sb3I7XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yO1xuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSB7XG4gICAgICBAaW5jbHVkZSBtYXQtY29udHJvbC1kaXNhYmxlZC11bmRlcmxpbmUoJHVuZGVybGluZS1jb2xvcik7XG4gICAgfVxuICB9XG59XG5cbi8vIFVzZWQgdG8gbWFrZSBpbnN0YW5jZXMgb2YgdGhlIF9tYXQtZm9ybS1maWVsZC1sYWJlbC1mbG9hdGluZyBtaXhpbiBuZWdsaWdpYmx5IGRpZmZlcmVudCxcbi8vIGFuZCBwcmV2ZW50IEdvb2dsZSdzIENTUyBPcHRpbWl6ZXIgZnJvbSBjb2xsYXBzaW5nIHRoZSBkZWNsYXJhdGlvbnMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugc29tZVxuLy8gb2YgdGhlIHNlbGVjdG9ycyBjb250YWluIHBzZXVkby1jbGFzc2VzIG5vdCByZWNvZ25pemVkIGluIGFsbCBicm93c2Vycy4gSWYgYSBicm93c2VyIGVuY291bnRlcnNcbi8vIGFuIHVua25vd24gcHNldWRvLWNsYXNzIGl0IHdpbGwgZGlzY2FyZCB0aGUgZW50aXJlIHJ1bGUgc2V0LlxuJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGU6IDA7XG5cbi8vIEFwcGxpZXMgYSBmbG9hdGluZyBsYWJlbCBhYm92ZSB0aGUgZm9ybSBmaWVsZCBjb250cm9sIGl0c2VsZi5cbkBtaXhpbiBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nKCRmb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApIHtcbiAgLy8gV2UgdXNlIHBlcnNwZWN0aXZlIHRvIGZpeCB0aGUgdGV4dCBibHVycmluZXNzIGFzIGRlc2NyaWJlZCBoZXJlOlxuICAvLyBodHRwOi8vd3d3LnVzZXJhZ2VudG1hbi5jb20vYmxvZy8yMDE0LzA1LzA0L2ZpeGluZy10eXBvZ3JhcGh5LWluc2lkZS1vZi0yLWQtY3NzLXRyYW5zZm9ybXMvXG4gIC8vIFRoaXMgcmVzdWx0cyBpbiBhIHNtYWxsIGppdHRlciBhZnRlciB0aGUgbGFiZWwgZmxvYXRzIG9uIEZpcmVmb3gsIHdoaWNoIHRoZVxuICAvLyB0cmFuc2xhdGVaIGZpeGVzLlxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRpbmZpeC1tYXJnaW4tdG9wIC0gJGluZml4LXBhZGRpbmcpIHNjYWxlKCRmb250LXNjYWxlKSBwZXJzcGVjdGl2ZSgxMDBweClcbiAgdHJhbnNsYXRlWigwLjAwMXB4ICsgJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGUpO1xuICAvLyBUaGUgdHJpY2tzIGFib3ZlIHVzZWQgdG8gc21vb3RoIG91dCB0aGUgYW5pbWF0aW9uIG9uIGNocm9tZSBhbmQgZmlyZWZveCBhY3R1YWxseSBtYWtlIHRoaW5nc1xuICAvLyB3b3JzZSBvbiBJRSwgc28gd2UgZG9uJ3QgaW5jbHVkZSB0aGVtIGluIHRoZSBJRSB2ZXJzaW9uLlxuICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kaW5maXgtbWFyZ2luLXRvcCAtICRpbmZpeC1wYWRkaW5nICsgJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGUpXG4gICAgICAgICAgICAgICAgICBzY2FsZSgkZm9udC1zY2FsZSk7XG5cbiAgd2lkdGg6IDEwMCUgLyAkZm9udC1zY2FsZSArICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlO1xuXG4gICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlOiAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZSArIDAuMDAwMDEgIWdsb2JhbDtcbn1cblxuLy8gU2FtZSBhcyBtaXhpbiBhYm92ZSwgYnV0IG9taXRzIHRoZSB0cmFuc2xhdGVaIGZvciBwcmludGluZyBwdXJwb3Nlcy5cbkBtaXhpbiBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nLXByaW50KCRmb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApIHtcbiAgLy8gVGhpcyByZXN1bHRzIGluIGEgc21hbGwgaml0dGVyIGFmdGVyIHRoZSBsYWJlbCBmbG9hdHMgb24gRmlyZWZveCwgd2hpY2ggdGhlXG4gIC8vIHRyYW5zbGF0ZVogZml4ZXMuXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtJGluZml4LW1hcmdpbi10b3AgLSAkaW5maXgtcGFkZGluZyArICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlKVxuICAgICAgICAgICAgICAgICAgc2NhbGUoJGZvbnQtc2NhbGUpO1xuICAvLyBUaGUgdHJpY2tzIGFib3ZlIHVzZWQgdG8gc21vb3RoIG91dCB0aGUgYW5pbWF0aW9uIG9uIGNocm9tZSBhbmQgZmlyZWZveCBhY3R1YWxseSBtYWtlIHRoaW5nc1xuICAvLyB3b3JzZSBvbiBJRSwgc28gd2UgZG9uJ3QgaW5jbHVkZSB0aGVtIGluIHRoZSBJRSB2ZXJzaW9uLlxuICAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZTogJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGUgKyAwLjAwMDAxICFnbG9iYWw7XG59XG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1sZWdhY3ktdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC8vIFRoZSB1bml0LWxlc3MgbGluZS1oZWlnaHQgZnJvbSB0aGUgZm9udCBjb25maWcuXG4gICRsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGlucHV0KTtcbiAgLy8gVGhlIGFtb3VudCB0byBzY2FsZSB0aGUgZm9udCBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsIGFuZCBzdWJzY3JpcHQuXG4gICRzdWJzY3JpcHQtZm9udC1zY2FsZTogMC43NTtcbiAgLy8gVGhlIGFtb3VudCBvZiBzcGFjZSBiZXR3ZWVuIHRoZSB0b3Agb2YgdGhlIGxpbmUgYW5kIHRoZSB0b3Agb2YgdGhlIGFjdHVhbCB0ZXh0XG4gIC8vIChhcyBhIGZyYWN0aW9uIG9mIHRoZSBmb250LXNpemUpLlxuICAkbGluZS1zcGFjaW5nOiAoJGxpbmUtaGVpZ2h0IC0gMSkgLyAyO1xuICAvLyBUaGUgcGFkZGluZyBvbiB0aGUgaW5maXguIE1vY2tzIHNob3cgaGFsZiBvZiB0aGUgdGV4dCBzaXplLCBidXQgc2VlbSB0byBtZWFzdXJlIGZyb20gdGhlIGVkZ2VcbiAgLy8gb2YgdGhlIHRleHQgaXRzZWxmLCBub3QgdGhlIGVkZ2Ugb2YgdGhlIGxpbmU7IHRoZXJlZm9yZSB3ZSBzdWJ0cmFjdCBvZmYgdGhlIGxpbmUgc3BhY2luZy5cbiAgJGluZml4LXBhZGRpbmc6IDAuNWVtIC0gJGxpbmUtc3BhY2luZztcbiAgLy8gVGhlIG1hcmdpbiBhcHBsaWVkIHRvIHRoZSBmb3JtLWZpZWxkLWluZml4IHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBmbG9hdGluZyBsYWJlbC5cbiAgJGluZml4LW1hcmdpbi10b3A6IDFlbSAqICRsaW5lLWhlaWdodCAqICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcbiAgLy8gVGhlIHNwYWNlIGJldHdlZW4gdGhlIGJvdHRvbSBvZiB0aGUgLm1hdC1mb3JtLWZpZWxkLWZsZXggYXJlYSBhbmQgdGhlIHN1YnNjcmlwdCB3cmFwcGVyLlxuICAvLyBNb2NrcyBzaG93IGhhbGYgb2YgdGhlIHRleHQgc2l6ZSwgYnV0IHRoaXMgbWFyZ2luIGlzIGFwcGxpZWQgdG8gYW4gZWxlbWVudCB3aXRoIHRoZSBzdWJzY3JpcHRcbiAgLy8gdGV4dCBmb250IHNpemUsIHNvIHdlIG5lZWQgdG8gZGl2aWRlIGJ5IHRoZSBzY2FsZSBmYWN0b3IgdG8gbWFrZSBpdCBoYWxmIG9mIHRoZSBvcmlnaW5hbCB0ZXh0XG4gIC8vIHNpemUuIFdlIGFnYWluIG5lZWQgdG8gc3VidHJhY3Qgb2ZmIHRoZSBsaW5lIHNwYWNpbmcgc2luY2UgdGhlIG1vY2tzIG1lYXN1cmUgdG8gdGhlIGVkZ2Ugb2YgdGhlXG4gIC8vIHRleHQsIG5vdCB0aGUgIGVkZ2Ugb2YgdGhlIGxpbmUuXG4gICRzdWJzY3JpcHQtbWFyZ2luLXRvcDogMC41ZW0gLyAkc3Vic2NyaXB0LWZvbnQtc2NhbGUgLSAoJGxpbmUtc3BhY2luZyAqIDIpO1xuICAvLyBUaGUgcGFkZGluZyBhcHBsaWVkIHRvIHRoZSBmb3JtLWZpZWxkLXdyYXBwZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIHN1YnNjcmlwdCwgc2luY2UgaXQnc1xuICAvLyBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQuIFRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgc3Vic2NyaXB0J3MgbWFyZ2luIGFuZCBsaW5lLWhlaWdodCwgYnV0IHdlXG4gIC8vIG5lZWQgdG8gbXVsdGlwbHkgYnkgdGhlIHN1YnNjcmlwdCBmb250IHNjYWxlIGZhY3RvciBzaW5jZSB0aGUgd3JhcHBlciBoYXMgYSBsYXJnZXIgZm9udCBzaXplLlxuICAkd3JhcHBlci1wYWRkaW5nLWJvdHRvbTogKCRzdWJzY3JpcHQtbWFyZ2luLXRvcCArICRsaW5lLWhlaWdodCkgKiAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IHtcbiAgICAubWF0LWZvcm0tZmllbGQtd3JhcHBlciB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogJHdyYXBwZXItcGFkZGluZy1ib3R0b207XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgIHBhZGRpbmc6ICRpbmZpeC1wYWRkaW5nIDA7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQge1xuICAgICAgJi5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLFxuICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgIH1cblxuICAgICAgLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMCB3aWxsIHJlbHkgb24gQXV0b2ZpbGxNb25pdG9yIGluc3RlYWQuXG4gICAgICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXJ2ZXItc2lkZSByZW5kZXJlZCBtYXRJbnB1dCB3aXRoIGEgbGFiZWwgYXR0cmlidXRlIGJ1dCBsYWJlbCBub3Qgc2hvd25cbiAgICAgIC8vICh1c2VkIGFzIGEgcHVyZSBDU1Mgc3RhbmQtaW4gZm9yIG1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCkuXG4gICAgICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlclxuICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgIHRvcDogJGluZml4LW1hcmdpbi10b3AgKyAkaW5maXgtcGFkZGluZztcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIHtcbiAgICAgIC8vIFdlIHdhbnQgdGhlIHVuZGVybGluZSB0byBzdGFydCBhdCB0aGUgZW5kIG9mIHRoZSBjb250ZW50IGJveCwgbm90IHRoZSBwYWRkaW5nIGJveCxcbiAgICAgIC8vIHNvIHdlIG1vdmUgaXQgdXAgYnkgdGhlIHBhZGRpbmcgYW1vdW50LlxuICAgICAgYm90dG9tOiAkd3JhcHBlci1wYWRkaW5nLWJvdHRvbTtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXIge1xuICAgICAgbWFyZ2luLXRvcDogJHN1YnNjcmlwdC1tYXJnaW4tdG9wO1xuXG4gICAgICAvLyBXZSB3YW50IHRoZSBzdWJzY3JpcHQgdG8gc3RhcnQgYXQgdGhlIGVuZCBvZiB0aGUgY29udGVudCBib3gsIG5vdCB0aGUgcGFkZGluZyBib3gsXG4gICAgICAvLyBzbyB3ZSBtb3ZlIGl0IHVwIGJ5IHRoZSBwYWRkaW5nIGFtb3VudCAoYWRqdXN0ZWQgZm9yIHRoZSBzbWFsbGVyIGZvbnQgc2l6ZSk7XG4gICAgICB0b3A6IGNhbGMoMTAwJSAtICN7JHdyYXBwZXItcGFkZGluZy1ib3R0b20gLyAkc3Vic2NyaXB0LWZvbnQtc2NhbGV9KTtcbiAgICB9XG4gIH1cblxuICAvLyB0cmFuc2xhdGVaIGNhdXNlcyB0aGUgbGFiZWwgdG8gbm90IGFwcGVhciB3aGlsZSBwcmludGluZywgc28gd2Ugb3ZlcnJpZGUgaXQgdG8gbm90XG4gIC8vIGFwcGx5IHRyYW5zbGF0ZVogd2hpbGUgcHJpbnRpbmdcbiAgQG1lZGlhIHByaW50IHtcbiAgICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kge1xuICAgICAgJi5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQge1xuICAgICAgICAmLm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsXG4gICAgICAgIC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nLXByaW50KFxuICAgICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMCB3aWxsIHJlbHkgb24gQXV0b2ZpbGxNb25pdG9yIGluc3RlYWQuXG4gICAgICAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlclxuICAgICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmctcHJpbnQoXG4gICAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXJ2ZXItc2lkZSByZW5kZXJlZCBtYXRJbnB1dCB3aXRoIGEgbGFiZWwgYXR0cmlidXRlIGJ1dCBsYWJlbCBub3Qgc2hvd25cbiAgICAgICAgLy8gKHVzZWQgYXMgYSBwdXJlIENTUyBzdGFuZC1pbiBmb3IgbWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0KS5cbiAgICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJcbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nLXByaW50KFxuICAgICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5cbi8vIFRoZW1lIHN0eWxlcyB0aGF0IG9ubHkgYXBwbHkgdG8gdGhlIG91dGxpbmUgYXBwZWFyYW5jZSBvZiB0aGUgZm9ybS1maWVsZC5cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuXG4gICRsYWJlbC1kaXNhYmxlZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgJG91dGxpbmUtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlciwgaWYoJGlzLWRhcmstdGhlbWUsIDAuMywgMC4xMikpO1xuICAkb3V0bGluZS1jb2xvci1ob3ZlcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyLCBpZigkaXMtZGFyay10aGVtZSwgMSwgMC44NykpO1xuICAkb3V0bGluZS1jb2xvci1wcmltYXJ5OiBtYXQtY29sb3IoJHByaW1hcnkpO1xuICAkb3V0bGluZS1jb2xvci1hY2NlbnQ6IG1hdC1jb2xvcigkYWNjZW50KTtcbiAgJG91dGxpbmUtY29sb3Itd2FybjogbWF0LWNvbG9yKCR3YXJuKTtcbiAgJG91dGxpbmUtY29sb3ItZGlzYWJsZWQ6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlciwgaWYoJGlzLWRhcmstdGhlbWUsIDAuMTUsIDAuMDYpKTtcblxuICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIHtcbiAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gICAgICBjb2xvcjogJG91dGxpbmUtY29sb3I7XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sge1xuICAgICAgY29sb3I6ICRvdXRsaW5lLWNvbG9yLWhvdmVyO1xuICAgIH1cblxuICAgICYubWF0LWZvY3VzZWQge1xuICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sge1xuICAgICAgICBjb2xvcjogJG91dGxpbmUtY29sb3ItcHJpbWFyeTtcbiAgICAgIH1cblxuICAgICAgJi5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIHtcbiAgICAgICAgY29sb3I6ICRvdXRsaW5lLWNvbG9yLWFjY2VudDtcbiAgICAgIH1cblxuICAgICAgJi5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayB7XG4gICAgICAgIGNvbG9yOiAkb3V0bGluZS1jb2xvci13YXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENsYXNzIHJlcGVhdGVkIHNvIHRoYXQgcnVsZSBpcyBzcGVjaWZpYyBlbm91Z2ggdG8gb3ZlcnJpZGUgZm9jdXNlZCBhY2NlbnQgY29sb3IgY2FzZS5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWludmFsaWQubWF0LWZvcm0tZmllbGQtaW52YWxpZCB7XG4gICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayB7XG4gICAgICAgIGNvbG9yOiAkb3V0bGluZS1jb2xvci13YXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQge1xuICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgY29sb3I6ICRsYWJlbC1kaXNhYmxlZC1jb2xvcjtcbiAgICAgIH1cblxuICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICAgICAgICBjb2xvcjogJG91dGxpbmUtY29sb3ItZGlzYWJsZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIFVzZWQgdG8gbWFrZSBpbnN0YW5jZXMgb2YgdGhlIF9tYXQtZm9ybS1maWVsZC1sYWJlbC1mbG9hdGluZyBtaXhpbiBuZWdsaWdpYmx5IGRpZmZlcmVudCxcbi8vIGFuZCBwcmV2ZW50IEdvb2dsZSdzIENTUyBPcHRpbWl6ZXIgZnJvbSBjb2xsYXBzaW5nIHRoZSBkZWNsYXJhdGlvbnMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugc29tZVxuLy8gb2YgdGhlIHNlbGVjdG9ycyBjb250YWluIHBzZXVkby1jbGFzc2VzIG5vdCByZWNvZ25pemVkIGluIGFsbCBicm93c2Vycy4gSWYgYSBicm93c2VyIGVuY291bnRlcnNcbi8vIGFuIHVua25vd24gcHNldWRvLWNsYXNzIGl0IHdpbGwgZGlzY2FyZCB0aGUgZW50aXJlIHJ1bGUgc2V0LlxuJG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZGVkdXBlOiAwO1xuXG4vLyBBcHBsaWVzIGEgZmxvYXRpbmcgbGFiZWwgYWJvdmUgdGhlIGZvcm0gZmllbGQgY29udHJvbCBpdHNlbGYuXG5AbWl4aW4gX21hdC1mb3JtLWZpZWxkLW91dGxpbmUtbGFiZWwtZmxvYXRpbmcoJGZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCkge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRpbmZpeC1tYXJnaW4tdG9wIC0gJGluZml4LXBhZGRpbmcgKyAkbWF0LWZvcm0tZmllbGQtb3V0bGluZS1kZWR1cGUpXG4gIHNjYWxlKCRmb250LXNjYWxlKTtcbiAgd2lkdGg6IDEwMCUgLyAkZm9udC1zY2FsZSArICRtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWRlZHVwZTtcblxuICAkbWF0LWZvcm0tZmllbGQtb3V0bGluZS1kZWR1cGU6ICRtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWRlZHVwZSArIDAuMDAwMDEgIWdsb2JhbDtcbn1cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC8vIFRoZSB1bml0LWxlc3MgbGluZS1oZWlnaHQgZnJvbSB0aGUgZm9udCBjb25maWcuXG4gICRsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGlucHV0KTtcbiAgLy8gVGhlIGFtb3VudCB0byBzY2FsZSB0aGUgZm9udCBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsIGFuZCBzdWJzY3JpcHQuXG4gICRzdWJzY3JpcHQtZm9udC1zY2FsZTogMC43NTtcbiAgLy8gVGhlIHBhZGRpbmcgYWJvdmUgYW5kIGJlbG93IHRoZSBpbmZpeC5cbiAgJGluZml4LXBhZGRpbmc6IDFlbTtcbiAgLy8gVGhlIG1hcmdpbiBhcHBsaWVkIHRvIHRoZSBmb3JtLWZpZWxkLWluZml4IHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBmbG9hdGluZyBsYWJlbC5cbiAgJGluZml4LW1hcmdpbi10b3A6IDFlbSAqICRsaW5lLWhlaWdodCAqICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcbiAgLy8gVGhlIHNwYWNlIGJldHdlZW4gdGhlIGJvdHRvbSBvZiB0aGUgLm1hdC1mb3JtLWZpZWxkLWZsZXggYXJlYSBhbmQgdGhlIHN1YnNjcmlwdCB3cmFwcGVyLlxuICAvLyBNb2NrcyBzaG93IGhhbGYgb2YgdGhlIHRleHQgc2l6ZSwgYnV0IHRoaXMgbWFyZ2luIGlzIGFwcGxpZWQgdG8gYW4gZWxlbWVudCB3aXRoIHRoZSBzdWJzY3JpcHRcbiAgLy8gdGV4dCBmb250IHNpemUsIHNvIHdlIG5lZWQgdG8gZGl2aWRlIGJ5IHRoZSBzY2FsZSBmYWN0b3IgdG8gbWFrZSBpdCBoYWxmIG9mIHRoZSBvcmlnaW5hbCB0ZXh0XG4gIC8vIHNpemUuXG4gICRzdWJzY3JpcHQtbWFyZ2luLXRvcDogMC41ZW0gLyAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG4gIC8vIFRoZSBwYWRkaW5nIGFwcGxpZWQgdG8gdGhlIGZvcm0tZmllbGQtd3JhcHBlciB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgc3Vic2NyaXB0LCBzaW5jZSBpdCdzXG4gIC8vIGFic29sdXRlbHkgcG9zaXRpb25lZC4gVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBzdWJzY3JpcHQncyBtYXJnaW4gYW5kIGxpbmUtaGVpZ2h0LCBidXQgd2VcbiAgLy8gbmVlZCB0byBtdWx0aXBseSBieSB0aGUgc3Vic2NyaXB0IGZvbnQgc2NhbGUgZmFjdG9yIHNpbmNlIHRoZSB3cmFwcGVyIGhhcyBhIGxhcmdlciBmb250IHNpemUuXG4gICR3cmFwcGVyLXBhZGRpbmctYm90dG9tOiAoJHN1YnNjcmlwdC1tYXJnaW4tdG9wICsgJGxpbmUtaGVpZ2h0KSAqICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcbiAgLy8gVGhlIGFtb3VudCB3ZSBvZmZzZXQgdGhlIGxhYmVsIGZyb20gdGhlIGlucHV0IHRleHQgaW4gdGhlIG91dGxpbmUgYXBwZWFyYW5jZS5cbiAgJG91dGxpbmUtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQ6IC0wLjI1ZW07XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgIHBhZGRpbmc6ICRpbmZpeC1wYWRkaW5nIDAgJGluZml4LXBhZGRpbmcgMDtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgdG9wOiAkaW5maXgtbWFyZ2luLXRvcCArICRpbmZpeC1wYWRkaW5nO1xuICAgICAgbWFyZ2luLXRvcDogJG91dGxpbmUtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQ7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQge1xuICAgICAgJi5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLFxuICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtb3V0bGluZS1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nICsgJG91dGxpbmUtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQsXG4gICAgICAgICAgICAgICAgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXJ2ZXItc2lkZSByZW5kZXJlZCBtYXRJbnB1dCB3aXRoIGEgbGFiZWwgYXR0cmlidXRlIGJ1dCBsYWJlbCBub3Qgc2hvd25cbiAgICAgIC8vICh1c2VkIGFzIGEgcHVyZSBDU1Mgc3RhbmQtaW4gZm9yIG1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCkuXG4gICAgICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlclxuICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLW91dGxpbmUtbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZyArICRvdXRsaW5lLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0LFxuICAgICAgICAgICAgICAgICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cblxuLy8gVGhlbWUgc3R5bGVzIHRoYXQgb25seSBhcHBseSB0byB0aGUgc3RhbmRhcmQgYXBwZWFyYW5jZSBvZiB0aGUgZm9ybS1maWVsZC5cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLXN0YW5kYXJkLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuXG4gICR1bmRlcmxpbmUtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlciwgaWYoJGlzLWRhcmstdGhlbWUsIDAuNywgMC40MikpO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIHtcbiAgICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtY29sb3I7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIHtcbiAgICAgIEBpbmNsdWRlIG1hdC1jb250cm9sLWRpc2FibGVkLXVuZGVybGluZSgkdW5kZXJsaW5lLWNvbG9yKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLXN0YW5kYXJkLXR5cG9ncmFwaHkoJGNvbmZpZykge31cblxuXG4vLyBUaGVtZSBzdHlsZXMgdGhhdCBhcHBseSB0byBhbGwgYXBwZWFyYW5jZXMgb2YgdGhlIGZvcm0tZmllbGQuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuXG4gIC8vIExhYmVsIGNvbG9ycy4gUmVxdWlyZWQgaXMgdXNlZCBmb3IgdGhlIGAqYCBzdGFyIHNob3duIGluIHRoZSBsYWJlbC5cbiAgJGxhYmVsLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0LCBpZigkaXMtZGFyay10aGVtZSwgMC43LCAwLjYpKTtcbiAgJGZvY3VzZWQtbGFiZWwtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgdGV4dCk7XG4gICRyZXF1aXJlZC1sYWJlbC1jb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIHRleHQpO1xuXG4gIC8vIFVuZGVybGluZSBjb2xvcnMuXG4gICR1bmRlcmxpbmUtY29sb3ItYmFzZTogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyLCBpZigkaXMtZGFyay10aGVtZSwgMSwgMC44NykpO1xuICAkdW5kZXJsaW5lLWNvbG9yLWFjY2VudDogbWF0LWNvbG9yKCRhY2NlbnQsIHRleHQpO1xuICAkdW5kZXJsaW5lLWNvbG9yLXdhcm46IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gICR1bmRlcmxpbmUtZm9jdXNlZC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCB0ZXh0KTtcblxuICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgIGNvbG9yOiAkbGFiZWwtY29sb3I7XG4gIH1cblxuICAubWF0LWhpbnQge1xuICAgIGNvbG9yOiAkbGFiZWwtY29sb3I7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICBjb2xvcjogJGZvY3VzZWQtbGFiZWwtY29sb3I7XG5cbiAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgY29sb3I6ICR1bmRlcmxpbmUtY29sb3ItYWNjZW50O1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgY29sb3I6ICR1bmRlcmxpbmUtY29sb3Itd2FybjtcbiAgICB9XG4gIH1cblxuICAubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlciB7XG4gICAgY29sb3I6ICRyZXF1aXJlZC1sYWJlbC1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtY29sb3ItYmFzZTtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWZvY3VzZWQtY29sb3I7XG5cbiAgICAgICYubWF0LWFjY2VudCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtY29sb3ItYWNjZW50O1xuICAgICAgfVxuXG4gICAgICAmLm1hdC13YXJuIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1jb2xvci13YXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkge1xuICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXIge1xuICAgICAgY29sb3I6ICR1bmRlcmxpbmUtZm9jdXNlZC1jb2xvcjtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlciB7XG4gICAgICBjb2xvcjogJHVuZGVybGluZS1jb2xvci1hY2NlbnQ7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVyIHtcbiAgICAgIGNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLXdhcm47XG4gICAgfVxuICB9XG5cbiAgLy8gU3R5bGluZyBmb3IgdGhlIGVycm9yIHN0YXRlIG9mIHRoZSBmb3JtIGZpZWxkLiBOb3RlIHRoYXQgd2hpbGUgdGhlIHNhbWUgY2FuIGJlXG4gIC8vIGFjaGlldmVkIHdpdGggdGhlIG5nLSogY2xhc3Nlcywgd2UgdXNlIHRoaXMgYXBwcm9hY2ggaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgdGhlIHNhbWVcbiAgLy8gbG9naWMgaXMgdXNlZCB0byBzdHlsZSB0aGUgZXJyb3Igc3RhdGUgYW5kIHRvIHNob3cgdGhlIGVycm9yIG1lc3NhZ2VzLlxuICAubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgIGNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLXdhcm47XG5cbiAgICAgICYubWF0LWFjY2VudCxcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXIge1xuICAgICAgICBjb2xvcjogJHVuZGVybGluZS1jb2xvci13YXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsXG4gICAgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtYWNjZW50IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtY29sb3Itd2FybjtcbiAgICB9XG4gIH1cblxuICAubWF0LWVycm9yIHtcbiAgICBjb2xvcjogJHVuZGVybGluZS1jb2xvci13YXJuO1xuICB9XG5cbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtbGVnYWN5LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLXN0YW5kYXJkLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLWZpbGwtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGVtZSgkdGhlbWUpO1xufVxuXG4vLyBVc2VkIHRvIG1ha2UgaW5zdGFuY2VzIG9mIHRoZSBfbWF0LWZvcm0tZmllbGQtbGFiZWwtZmxvYXRpbmcgbWl4aW4gbmVnbGlnaWJseSBkaWZmZXJlbnQsXG4vLyBhbmQgcHJldmVudCBHb29nbGUncyBDU1MgT3B0aW1pemVyIGZyb20gY29sbGFwc2luZyB0aGUgZGVjbGFyYXRpb25zLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHNvbWVcbi8vIG9mIHRoZSBzZWxlY3RvcnMgY29udGFpbiBwc2V1ZG8tY2xhc3NlcyBub3QgcmVjb2duaXplZCBpbiBhbGwgYnJvd3NlcnMuIElmIGEgYnJvd3NlciBlbmNvdW50ZXJzXG4vLyBhbiB1bmtub3duIHBzZXVkby1jbGFzcyBpdCB3aWxsIGRpc2NhcmQgdGhlIGVudGlyZSBydWxlIHNldC5cbiRtYXQtZm9ybS1maWVsZC1kZWR1cGU6IDA7XG5cbi8vIEFwcGxpZXMgYSBmbG9hdGluZyBsYWJlbCBhYm92ZSB0aGUgZm9ybSBmaWVsZCBjb250cm9sIGl0c2VsZi5cbkBtaXhpbiBfbWF0LWZvcm0tZmllbGQtbGFiZWwtZmxvYXRpbmcoJGZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCkge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRpbmZpeC1tYXJnaW4tdG9wIC0gJGluZml4LXBhZGRpbmcgKyAkbWF0LWZvcm0tZmllbGQtZGVkdXBlKVxuICAgICAgICAgICAgIHNjYWxlKCRmb250LXNjYWxlKTtcbiAgd2lkdGg6IDEwMCUgLyAkZm9udC1zY2FsZSArICRtYXQtZm9ybS1maWVsZC1kZWR1cGU7XG5cbiAgJG1hdC1mb3JtLWZpZWxkLWRlZHVwZTogJG1hdC1mb3JtLWZpZWxkLWRlZHVwZSArIDAuMDAwMDEgIWdsb2JhbDtcbn1cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAvLyBUaGUgdW5pdC1sZXNzIGxpbmUtaGVpZ2h0IGZyb20gdGhlIGZvbnQgY29uZmlnLlxuICAkbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBpbnB1dCk7XG5cbiAgLy8gVGhlIGFtb3VudCB0byBzY2FsZSB0aGUgZm9udCBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsIGFuZCBzdWJzY3JpcHQuXG4gICRzdWJzY3JpcHQtZm9udC1zY2FsZTogMC43NTtcbiAgLy8gVGhlIGFtb3VudCB0byBzY2FsZSB0aGUgZm9udCBmb3IgdGhlIHByZWZpeCBhbmQgc3VmZml4IGljb25zLlxuICAkcHJlZml4LXN1ZmZpeC1pY29uLWZvbnQtc2NhbGU6IDEuNTtcblxuICAvLyBUaGUgcGFkZGluZyBvbiB0aGUgaW5maXguIE1vY2tzIHNob3cgaGFsZiBvZiB0aGUgdGV4dCBzaXplLlxuICAkaW5maXgtcGFkZGluZzogMC41ZW07XG4gIC8vIFRoZSBtYXJnaW4gYXBwbGllZCB0byB0aGUgZm9ybS1maWVsZC1pbmZpeCB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgZmxvYXRpbmcgbGFiZWwuXG4gICRpbmZpeC1tYXJnaW4tdG9wOiAxZW0gKiAkbGluZS1oZWlnaHQgKiAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG4gIC8vIEZvbnQgc2l6ZSB0byB1c2UgZm9yIHRoZSBsYWJlbCBhbmQgc3Vic2NyaXB0IHRleHQuXG4gICRzdWJzY3JpcHQtZm9udC1zaXplOiAkc3Vic2NyaXB0LWZvbnQtc2NhbGUgKiAxMDAlO1xuICAvLyBGb250IHNpemUgdG8gdXNlIGZvciB0aGUgZm9yIHRoZSBwcmVmaXggYW5kIHN1ZmZpeCBpY29ucy5cbiAgJHByZWZpeC1zdWZmaXgtaWNvbi1mb250LXNpemU6ICRwcmVmaXgtc3VmZml4LWljb24tZm9udC1zY2FsZSAqIDEwMCU7XG4gIC8vIFRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBib3R0b20gb2YgdGhlIC5tYXQtZm9ybS1maWVsZC1mbGV4IGFyZWEgYW5kIHRoZSBzdWJzY3JpcHQgd3JhcHBlci5cbiAgLy8gTW9ja3Mgc2hvdyBoYWxmIG9mIHRoZSB0ZXh0IHNpemUsIGJ1dCB0aGlzIG1hcmdpbiBpcyBhcHBsaWVkIHRvIGFuIGVsZW1lbnQgd2l0aCB0aGUgc3Vic2NyaXB0XG4gIC8vIHRleHQgZm9udCBzaXplLCBzbyB3ZSBuZWVkIHRvIGRpdmlkZSBieSB0aGUgc2NhbGUgZmFjdG9yIHRvIG1ha2UgaXQgaGFsZiBvZiB0aGUgb3JpZ2luYWwgdGV4dFxuICAvLyBzaXplLlxuICAkc3Vic2NyaXB0LW1hcmdpbi10b3A6IDAuNWVtIC8gJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuICAvLyBUaGUgcGFkZGluZyBhcHBsaWVkIHRvIHRoZSBmb3JtLWZpZWxkLXdyYXBwZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIHN1YnNjcmlwdCwgc2luY2UgaXQnc1xuICAvLyBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQuIFRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgc3Vic2NyaXB0J3MgbWFyZ2luIGFuZCBsaW5lLWhlaWdodCwgYnV0IHdlXG4gIC8vIG5lZWQgdG8gbXVsdGlwbHkgYnkgdGhlIHN1YnNjcmlwdCBmb250IHNjYWxlIGZhY3RvciBzaW5jZSB0aGUgd3JhcHBlciBoYXMgYSBsYXJnZXIgZm9udCBzaXplLlxuICAkd3JhcHBlci1wYWRkaW5nLWJvdHRvbTogKCRzdWJzY3JpcHQtbWFyZ2luLXRvcCArICRsaW5lLWhlaWdodCkgKiAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG5cbiAgLm1hdC1mb3JtLWZpZWxkIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgaW5wdXQpO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICAgIHBhZGRpbmctYm90dG9tOiAkd3JhcHBlci1wYWRkaW5nLWJvdHRvbTtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1wcmVmaXgsXG4gIC5tYXQtZm9ybS1maWVsZC1zdWZmaXgge1xuICAgIC8vIEFsbG93IGljb25zIGluIGEgcHJlZml4IG9yIHN1ZmZpeCB0byBhZGFwdCB0byB0aGUgY29ycmVjdCBzaXplLlxuICAgIC5tYXQtaWNvbiB7XG4gICAgICBmb250LXNpemU6ICRwcmVmaXgtc3VmZml4LWljb24tZm9udC1zaXplO1xuICAgICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgICB9XG5cbiAgICAvLyBBbGxvdyBpY29uIGJ1dHRvbnMgaW4gYSBwcmVmaXggb3Igc3VmZml4IHRvIGFkYXB0IHRvIHRoZSBjb3JyZWN0IHNpemUuXG4gICAgLm1hdC1pY29uLWJ1dHRvbiB7XG4gICAgICBoZWlnaHQ6ICRwcmVmaXgtc3VmZml4LWljb24tZm9udC1zY2FsZSAqIDFlbTtcbiAgICAgIHdpZHRoOiAkcHJlZml4LXN1ZmZpeC1pY29uLWZvbnQtc2NhbGUgKiAxZW07XG5cbiAgICAgIC5tYXQtaWNvbiB7XG4gICAgICAgIGhlaWdodDogJGxpbmUtaGVpZ2h0ICogMWVtO1xuICAgICAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgcGFkZGluZzogJGluZml4LXBhZGRpbmcgMDtcbiAgICAvLyBUaHJvd3Mgb2ZmIHRoZSBiYXNlbGluZSBpZiB3ZSBkbyBpdCBhcyBhIHJlYWwgbWFyZ2luLCBzbyB3ZSBkbyBpdCBhcyBhIGJvcmRlciBpbnN0ZWFkLlxuICAgIGJvcmRlci10b3A6ICRpbmZpeC1tYXJnaW4tdG9wIHNvbGlkIHRyYW5zcGFyZW50O1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCB7XG4gICAgJi5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLFxuICAgIC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgIH1cblxuICAgIC8vIFNlcnZlci1zaWRlIHJlbmRlcmVkIG1hdElucHV0IHdpdGggYSBsYWJlbCBhdHRyaWJ1dGUgYnV0IGxhYmVsIG5vdCBzaG93blxuICAgIC8vICh1c2VkIGFzIGEgcHVyZSBDU1Mgc3RhbmQtaW4gZm9yIG1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCkuXG4gICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJcbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIHtcbiAgICB0b3A6IC0kaW5maXgtbWFyZ2luLXRvcDtcbiAgICBwYWRkaW5nLXRvcDogJGluZml4LW1hcmdpbi10b3A7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgIHRvcDogJGluZml4LW1hcmdpbi10b3AgKyAkaW5maXgtcGFkZGluZztcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUge1xuICAgIC8vIFdlIHdhbnQgdGhlIHVuZGVybGluZSB0byBzdGFydCBhdCB0aGUgZW5kIG9mIHRoZSBjb250ZW50IGJveCwgbm90IHRoZSBwYWRkaW5nIGJveCxcbiAgICAvLyBzbyB3ZSBtb3ZlIGl0IHVwIGJ5IHRoZSBwYWRkaW5nIGFtb3VudC5cbiAgICBib3R0b206ICR3cmFwcGVyLXBhZGRpbmctYm90dG9tO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyIHtcbiAgICBmb250LXNpemU6ICRzdWJzY3JpcHQtZm9udC1zaXplO1xuICAgIG1hcmdpbi10b3A6ICRzdWJzY3JpcHQtbWFyZ2luLXRvcDtcblxuICAgIC8vIFdlIHdhbnQgdGhlIHN1YnNjcmlwdCB0byBzdGFydCBhdCB0aGUgZW5kIG9mIHRoZSBjb250ZW50IGJveCwgbm90IHRoZSBwYWRkaW5nIGJveCxcbiAgICAvLyBzbyB3ZSBtb3ZlIGl0IHVwIGJ5IHRoZSBwYWRkaW5nIGFtb3VudCAoYWRqdXN0ZWQgZm9yIHRoZSBzbWFsbGVyIGZvbnQgc2l6ZSk7XG4gICAgdG9wOiBjYWxjKDEwMCUgLSAjeyR3cmFwcGVyLXBhZGRpbmctYm90dG9tIC8gJHN1YnNjcmlwdC1mb250LXNjYWxlfSk7XG4gIH1cblxuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1sZWdhY3ktdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtc3RhbmRhcmQtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtZmlsbC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1vdXRsaW5lLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG59XG5cblxuXG5cblxuQG1peGluIG1hdC10cmVlLXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtdHJlZSB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnY2FyZCcpO1xuICB9XG5cbiAgLm1hdC10cmVlLW5vZGUsXG4gIC5tYXQtbmVzdGVkLXRyZWUtbm9kZSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC10cmVlLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXRyZWUge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LXRyZWUtbm9kZSxcbiAgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlIHtcbiAgICBmb250LXdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMSk7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSk7XG4gIH1cbn1cblxuXG5cbi8vIEluY2x1ZGVzIGFsbCBvZiB0aGUgdHlwb2dyYXBoaWMgc3R5bGVzLlxuQG1peGluIGFuZ3VsYXItbWF0ZXJpYWwtdHlwb2dyYXBoeSgkY29uZmlnOiBudWxsKSB7XG4gIEBpZiAkY29uZmlnID09IG51bGwge1xuICAgICRjb25maWc6IG1hdC10eXBvZ3JhcGh5LWNvbmZpZygpO1xuICB9XG5cbiAgQGluY2x1ZGUgbWF0LWJhZGdlLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1iYXNlLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1hdXRvY29tcGxldGUtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWJvdHRvbS1zaGVldC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtYnV0dG9uLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1idXR0b24tdG9nZ2xlLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1jYXJkLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1jaGVja2JveC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtY2hpcHMtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXRhYmxlLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1kYXRlcGlja2VyLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1kaWFsb2ctdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWV4cGFuc2lvbi1wYW5lbC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZ3JpZC1saXN0LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1pY29uLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1pbnB1dC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtbWVudS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtcGFnaW5hdG9yLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1wcm9ncmVzcy1iYXItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXByb2dyZXNzLXNwaW5uZXItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXJhZGlvLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1zZWxlY3QtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXNpZGVuYXYtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXNsaWRlLXRvZ2dsZS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtc2xpZGVyLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1zdGVwcGVyLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1zb3J0LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC10YWJzLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC10b29sYmFyLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC10b29sdGlwLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1saXN0LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1vcHRpb24tdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LW9wdGdyb3VwLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1zbmFjay1iYXItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXRyZWUtdHlwb2dyYXBoeSgkY29uZmlnKTtcbn1cblxuXG4vLyBNaXhpbiB0aGF0IHJlbmRlcnMgYWxsIG9mIHRoZSBjb3JlIHN0eWxlcyB0aGF0IGFyZSBub3QgdGhlbWUtZGVwZW5kZW50LlxuQG1peGluIG1hdC1jb3JlKCR0eXBvZ3JhcGh5LWNvbmZpZzogbnVsbCkge1xuICBAaW5jbHVkZSBhbmd1bGFyLW1hdGVyaWFsLXR5cG9ncmFwaHkoJHR5cG9ncmFwaHktY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXJpcHBsZSgpO1xuICBAaW5jbHVkZSBjZGstYTExeSgpO1xuICBAaW5jbHVkZSBjZGstb3ZlcmxheSgpO1xuICBAaW5jbHVkZSBjZGstdGV4dC1maWVsZCgpO1xufVxuXG4vLyBNaXhpbiB0aGF0IHJlbmRlcnMgYWxsIG9mIHRoZSBjb3JlIHN0eWxlcyB0aGF0IGRlcGVuZCBvbiB0aGUgdGhlbWUuXG5AbWl4aW4gbWF0LWNvcmUtdGhlbWUoJHRoZW1lKSB7XG4gIEBpbmNsdWRlIG1hdC1yaXBwbGUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LW9wdGlvbi10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtb3B0Z3JvdXAtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXBzZXVkby1jaGVja2JveC10aGVtZSgkdGhlbWUpO1xuXG4gIC8vIFByb3ZpZGVzIGV4dGVybmFsIENTUyBjbGFzc2VzIGZvciBlYWNoIGVsZXZhdGlvbiB2YWx1ZS4gRWFjaCBDU1MgY2xhc3MgaXMgZm9ybWF0dGVkIGFzXG4gIC8vIGBtYXQtZWxldmF0aW9uLXokelZhbHVlYCB3aGVyZSBgJHpWYWx1ZWAgY29ycmVzcG9uZHMgdG8gdGhlIHotc3BhY2UgdG8gd2hpY2ggdGhlIGVsZW1lbnQgaXNcbiAgLy8gZWxldmF0ZWQuXG4gIEBmb3IgJHpWYWx1ZSBmcm9tIDAgdGhyb3VnaCAyNCB7XG4gICAgLiN7JF9tYXQtZWxldmF0aW9uLXByZWZpeH0jeyR6VmFsdWV9IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKCR6VmFsdWUsICR0aGVtZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gV3JhcHBlciBlbGVtZW50IHRoYXQgcHJvdmlkZXMgdGhlIHRoZW1lIGJhY2tncm91bmQgd2hlbiB0aGUgdXNlcidzIGNvbnRlbnQgaXNuJ3RcbiAgLy8gaW5zaWRlIG9mIGEgYG1hdC1zaWRlbmF2LWNvbnRhaW5lcmAuIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIGV4Y2x1ZGUgdGhlIGFtcGVyc2FuZFxuICAvLyBzZWxlY3RvciBpbiBjYXNlIHRoZSBtaXhpbiBpcyBpbmNsdWRlZCBhdCB0aGUgdG9wIGxldmVsLlxuICAubWF0LWFwcC1iYWNrZ3JvdW5kI3tpZigmLCAnLCAmLm1hdC1hcHAtYmFja2dyb3VuZCcsICcnKX0ge1xuICAgICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgYmFja2dyb3VuZCk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cblxuICAvLyBNYXJrZXIgdGhhdCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB1c2VyIGhhcyBhZGRlZCBhIHRoZW1lIHRvIHRoZWlyIHBhZ2UuXG4gIEBhdC1yb290IHtcbiAgICAubWF0LXRoZW1lLWxvYWRlZC1tYXJrZXIge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuQG1peGluIG1hdC1kaXZpZGVyLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtZGl2aWRlciB7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxuXG4gIC5tYXQtZGl2aWRlci12ZXJ0aWNhbCB7XG4gICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG59XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8vIENyZWF0ZSBhIHRoZW1lLlxuQG1peGluIGFuZ3VsYXItbWF0ZXJpYWwtdGhlbWUoJHRoZW1lKSB7XG4gIEBpbmNsdWRlIG1hdC1jb3JlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1hdXRvY29tcGxldGUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWJhZGdlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1ib3R0b20tc2hlZXQtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWJ1dHRvbi10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtYnV0dG9uLXRvZ2dsZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtY2FyZC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtY2hlY2tib3gtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWNoaXBzLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC10YWJsZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZGF0ZXBpY2tlci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZGlhbG9nLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1kaXZpZGVyLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1leHBhbnNpb24tcGFuZWwtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWdyaWQtbGlzdC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtaWNvbi10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtaW5wdXQtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWxpc3QtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LW1lbnUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXBhZ2luYXRvci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtcHJvZ3Jlc3MtYmFyLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1wcm9ncmVzcy1zcGlubmVyLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1yYWRpby10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtc2VsZWN0LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1zaWRlbmF2LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1zbGlkZS10b2dnbGUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXNsaWRlci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtc3RlcHBlci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtc29ydC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtdGFicy10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtdG9vbGJhci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtdG9vbHRpcC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtdHJlZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtc25hY2stYmFyLXRoZW1lKCR0aGVtZSk7XG59XG4iLCJAaW1wb3J0IFwibGlicy91aS9zcmMvbGliL21peGluc1wiO1xuQGltcG9ydCBcIn5AYW5ndWxhci9tYXRlcmlhbC90aGVtaW5nXCI7XG5oMyB7XG4gICAgY29sb3I6ICMwMDAwMDA7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgcGFkZGluZzogMjBweCAwIDAgMDtcbiAgICBtYXJnaW46IDA7XG4gICAgc3BhbiB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiAxMDA7XG4gICAgfVxufVxuLnJlc3VsdC1jb250YWluZXIge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgQGluY2x1ZGUgbWF0LWVsZXZhdGlvbigwKTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgLmNhcmQ6aG92ZXJ7XG4gICAgICAgIGJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4yKSAwcHggMnB4IDIxcHg7XG4gICAgICAgIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4zcyBlYXNlLWluLW91dDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIH1cbiAgICAucmVzdWx0LXJvdyB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBjbGVhcjogYm90aDtcbiAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICAgICAgXG4gICAgICAgIGltZy5yZWN1cnJpbmctaW5mby1pY29uIHtcbiAgICAgICAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNHB4O1xuICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgICAgfVxuXG4gICAgICAgICYuZGF0ZXRpbWUge1xuICAgICAgICAgICAgcGFkZGluZzogMTVweCAwO1xuICAgICAgICAgICAgY29sb3I6ICMwMDA7XG4gICAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICAuc3RhdHVzLWJsb2NrIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLnN0YXR1cy1ibG9jayA+IGRpdntcbiAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICAgICAgICAgICAgICBzcGFue1xuICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gICAgIFxuICAgICAgICB9XG5cbiAgICAgICAgJi5zdGF0dXMge1xuICAgICAgICAgICAgcGFkZGluZzogMTZweCAxOHB4O1xuICAgICAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgICAgICAgICAgICAgLm1lc3NhZ2Uge1xuICAgICAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICAgICAgICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IHN1YjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNXB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC50aW1lIHtcbiAgICAgICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgICAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcCB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiA4OHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYucGFuZWwge1xuICAgICAgICAgICAgcGFkZGluZzogMjBweCAxOHB4O1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgICAgICBib3gtc2hhZG93OiAwcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgICAgICAgfVxuXG4gICAgICAgICYudGl0bGUge1xuICAgICAgICAgICAgY29sb3I6ICMwMDA7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMjZweDtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxMjBweDtcbiAgICAgICAgICAgIC50eXBlLXRleHQge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxNXB4O1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwIDEwcHg7XG4gICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgICAgICAgICAgICAgIG1heC1oZWlnaHQ6IDI0cHg7XG4gICAgICAgICAgICAgICAgJi5pbnRlcm5hbCB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMzNCNkY7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJi5leHRlcm5hbCB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGQUEwODI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICYucGFydG5lciB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMzOUJERjM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICYubXVsdGlyb29te1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZEMDQ4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyAmLm11bHRpcm9vbXtcbiAgICAgICAgICAgICAgICAvLyAgICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRDA0ODtcbiAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidXR0b24ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgICAgICAgICB0b3A6IC02cHg7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICAgICAgY29sb3I6ICMzMzMzMzM7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiA2cHggMTBweDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICAgIH0gICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7XG4gICAgICAgICAgICAgICAgLnR5cGUtdGl0bGV7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA3NXB4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLnRleHQge1xuICAgICAgICAgICAgY29sb3I6ICMzMzMzMzM7XG4gICAgICAgICAgICBwYWRkaW5nOiAxOHB4IDEwcHggMCAwO1xuICAgICAgICAgICAgc3BhbiB7XG4gICAgICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAzcHggMTJweDtcbiAgICAgICAgICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjOTc5Nzk3O1xuICAgICAgICAgICAgICAgICY6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItcmlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgICAgICAgICAgY2xlYXI6IGJvdGg7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogM3B4IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLm1vYmlsZS1vbmx5LWN0YSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgei1pbmRleDogMjtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7ICAgICAgICAgICAgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC5yaWdodC1hcnJvdyB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIHJpZ2h0OiAxMHB4O1xuICAgICAgICAgICAgICAgIHRvcDogNzJweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5cbi5yaWdodC1hcnJvdyB7XG4gICAgd2lkdGg6IDMwcHggIWltcG9ydGFudDtcbiAgICBoZWlnaHQ6IDMwcHggIWltcG9ydGFudDtcbiAgICBAaW5jbHVkZSBtY2staWNvbigkaWNvbi1tZWRpdW0sICdhcnJvdy1yaWdodC5zdmcnKTtcbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIEBpbmNsdWRlIG1jay1pY29uKCRpY29uLXhsYXJnZSwgJ2Fycm93LXJpZ2h0LWxhcmdlLnN2ZycpO1xuICAgIH1cbn1cblxuLmJvb2tpbmctdHotZGlzcGxheSB7XG4gICAgZm9udC1zaXplOiAxLjI1cmVtO1xufVxuXG4ubG9jYWwtdHotZGlzcGxheSB7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGNvbG9yOiAjNzU3NTc1O1xufVxuIl19 */"], changeDetection: 0 }); /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(BookingResultItemComponent, [{ type: core_1.Component, args: [{ @@ -33945,7 +34215,7 @@ function BookingsListingComponent_div_3_div_2_div_1_Template(rf, ctx) { if (rf & i0.ɵɵelementStart(0, "div"); i0.ɵɵelement(1, "img", 18); i0.ɵɵelementStart(2, "p"); - i0.ɵɵtext(3, "You have no upcoming bookings"); + i0.ɵɵtext(3, "End of list. You have no upcoming bookings"); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } } @@ -33989,9 +34259,9 @@ function BookingsListingComponent_div_3_Template(rf, ctx) { if (rf & 1) { } if (rf & 2) { const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx_r1.showBookings); + i0.ɵɵproperty("ngIf", ctx_r1.showBookings && ctx_r1.pagination.totalRecords); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", !ctx_r1.showBookings || ctx_r1.lastPage); + i0.ɵɵproperty("ngIf", ctx_r1.lastPage || !ctx_r1.pagination.totalRecords || !ctx_r1.showBookings); } } function BookingsListingComponent_ng_template_4_app_booking_result_item_0_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "app-booking-result-item"); @@ -34735,51 +35005,63 @@ const date_tz_1 = __webpack_require__(/*! @mckinsey-converge/date-tz */ "../../l const i0 = __webpack_require__(/*! @angular/core */ "../../node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); const i1 = __webpack_require__(/*! @angular/material/dialog */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/dialog.js"); const i2 = __webpack_require__(/*! @mckinsey-converge/data-common */ "../../libs/data-common/src/index.ts"); -function BookingCateringComponent_div_4_ng_container_2_Template(rf, ctx) { if (rf & 1) { - const _r6 = i0.ɵɵgetCurrentView(); +function BookingCateringComponent_div_1_Template(rf, ctx) { if (rf & 1) { + const _r4 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div", 4); + i0.ɵɵelementStart(1, "a-topbar-header", 5); + i0.ɵɵlistener("closeCallback", function BookingCateringComponent_div_1_Template_a_topbar_header_closeCallback_1_listener() { i0.ɵɵrestoreView(_r4); const ctx_r3 = i0.ɵɵnextContext(); return ctx_r3.closeCallback(); }); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r0 = i0.ɵɵnextContext(); + i0.ɵɵadvance(1); + i0.ɵɵproperty("mode", ctx_r0.TopBarHeaderMode.Light)("modal", true)("noSurvey", true); +} } +function BookingCateringComponent_div_3_ng_container_2_Template(rf, ctx) { if (rf & 1) { + const _r9 = i0.ɵɵgetCurrentView(); i0.ɵɵelementContainerStart(0); - i0.ɵɵelementStart(1, "a-catering-order-list", 9); - i0.ɵɵlistener("order", function BookingCateringComponent_div_4_ng_container_2_Template_a_catering_order_list_order_1_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r5 = i0.ɵɵnextContext(2); return $event ? ctx_r5.active_order = $event : ctx_r5.newOrder(); })("event", function BookingCateringComponent_div_4_ng_container_2_Template_a_catering_order_list_event_1_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r7 = i0.ɵɵnextContext(2); return ctx_r7.handleOrderListEvent($event); }); + i0.ɵɵelementStart(1, "a-catering-order-list", 10); + i0.ɵɵlistener("order", function BookingCateringComponent_div_3_ng_container_2_Template_a_catering_order_list_order_1_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r8 = i0.ɵɵnextContext(2); return $event ? ctx_r8.active_order = $event : ctx_r8.newOrder(); })("event", function BookingCateringComponent_div_3_ng_container_2_Template_a_catering_order_list_event_1_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r10 = i0.ɵɵnextContext(2); return ctx_r10.handleOrderListEvent($event); }); i0.ɵɵelementEnd(); i0.ɵɵelementContainerEnd(); } if (rf & 2) { - const ctx_r2 = i0.ɵɵnextContext(2); + const ctx_r5 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); - i0.ɵɵproperty("space_list", ctx_r2.space_list)("catering", ctx_r2.catering_field)("date", ctx_r2.date)("all_day", ctx_r2.all_day)("next_disabled", ctx_r2.next_disabled); + i0.ɵɵproperty("space_list", ctx_r5.space_list)("catering", ctx_r5.catering_field)("date", ctx_r5.date)("all_day", ctx_r5.all_day)("next_disabled", ctx_r5.next_disabled)("placeIntoModal", ctx_r5.placeIntoModal); } } -function BookingCateringComponent_div_4_ng_template_3_Template(rf, ctx) { if (rf & 1) { - const _r9 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "a-catering-order-details", 10); - i0.ɵɵlistener("event", function BookingCateringComponent_div_4_ng_template_3_Template_a_catering_order_details_event_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r8 = i0.ɵɵnextContext(2); return ctx_r8.handleOrderEvent($event); }); +function BookingCateringComponent_div_3_ng_template_3_Template(rf, ctx) { if (rf & 1) { + const _r12 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "a-catering-order-details", 11); + i0.ɵɵlistener("event", function BookingCateringComponent_div_3_ng_template_3_Template_a_catering_order_details_event_0_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r11 = i0.ɵɵnextContext(2); return ctx_r11.handleOrderEvent($event); }); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r4 = i0.ɵɵnextContext(2); - i0.ɵɵproperty("space_list", ctx_r4.space_list)("order", ctx_r4.active_order)("dateTz", ctx_r4.dateTz)("duration", ctx_r4.duration)("all_day", ctx_r4.all_day); + const ctx_r7 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("space_list", ctx_r7.space_list)("order", ctx_r7.active_order)("dateTz", ctx_r7.dateTz)("duration", ctx_r7.duration)("all_day", ctx_r7.all_day)("placeIntoModal", ctx_r7.placeIntoModal); } } -function BookingCateringComponent_div_4_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 5); - i0.ɵɵelementStart(1, "div", 6); - i0.ɵɵtemplate(2, BookingCateringComponent_div_4_ng_container_2_Template, 2, 5, "ng-container", 7); +function BookingCateringComponent_div_3_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 6); + i0.ɵɵelementStart(1, "div", 7); + i0.ɵɵtemplate(2, BookingCateringComponent_div_3_ng_container_2_Template, 2, 6, "ng-container", 8); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(3, BookingCateringComponent_div_4_ng_template_3_Template, 1, 5, "ng-template", null, 8, i0.ɵɵtemplateRefExtractor); + i0.ɵɵtemplate(3, BookingCateringComponent_div_3_ng_template_3_Template, 1, 6, "ng-template", null, 9, i0.ɵɵtemplateRefExtractor); i0.ɵɵelementEnd(); } if (rf & 2) { - const _r3 = i0.ɵɵreference(4); - const ctx_r0 = i0.ɵɵnextContext(); + const _r6 = i0.ɵɵreference(4); + const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵadvance(2); - i0.ɵɵproperty("ngIf", !ctx_r0.active_order)("ngIfElse", _r3); + i0.ɵɵproperty("ngIf", !ctx_r1.active_order)("ngIfElse", _r6); } } -function BookingCateringComponent_div_5_Template(rf, ctx) { if (rf & 1) { - const _r11 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div", 5); - i0.ɵɵelementStart(1, "booking-confirmation", 11); - i0.ɵɵlistener("callback", function BookingCateringComponent_div_5_Template_booking_confirmation_callback_1_listener() { i0.ɵɵrestoreView(_r11); const ctx_r10 = i0.ɵɵnextContext(); return ctx_r10.closeConfirmation(); }); +function BookingCateringComponent_div_4_Template(rf, ctx) { if (rf & 1) { + const _r14 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div", 6); + i0.ɵɵelementStart(1, "booking-confirmation", 12); + i0.ɵɵlistener("callback", function BookingCateringComponent_div_4_Template_booking_confirmation_callback_1_listener() { i0.ɵɵrestoreView(_r14); const ctx_r13 = i0.ɵɵnextContext(); return ctx_r13.closeConfirmation(); }); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - const ctx_r1 = i0.ɵɵnextContext(); + const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵadvance(1); - i0.ɵɵproperty("confirmed", ctx_r1.confirmed)("loading", ctx_r1.loading)("modal", true)("dataForConfirmation", ctx_r1.dataForConfirmation); + i0.ɵɵproperty("confirmed", ctx_r2.confirmed)("loading", ctx_r2.loading)("placeIntoModal", ctx_r2.placeIntoModal)("modal", true)("dataForConfirmation", ctx_r2.dataForConfirmation); } } class BookingCateringComponent extends base_2.BaseDirective { constructor(_dialog, _service, _bookings) { @@ -34791,6 +35073,11 @@ class BookingCateringComponent extends base_2.BaseDirective { this.event = new core_1.EventEmitter(); /** Emitter for open catering */ this.showCatering = new core_1.EventEmitter(); + /** + * placeIntoModal: Input decorator indecate as a flag to adapt component design into a dialog modal + * (by hiding header and adjusting height so that fit into a modal) + */ + this.placeIntoModal = false; this.isEditSeries = false; this.TopBarHeaderMode = topbar_header_component_1.TopBarHeaderMode; this.confirmed = false; @@ -35097,26 +35384,23 @@ class BookingCateringComponent extends base_2.BaseDirective { } exports.BookingCateringComponent = BookingCateringComponent; BookingCateringComponent.ɵfac = function BookingCateringComponent_Factory(t) { return new (t || BookingCateringComponent)(i0.ɵɵdirectiveInject(i1.MatDialog), i0.ɵɵdirectiveInject(i2.ApplicationService), i0.ɵɵdirectiveInject(i2.BookingsService)); }; -BookingCateringComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BookingCateringComponent, selectors: [["booking-catering"]], inputs: { form: "form", booking: "booking", isOccurence: "isOccurence" }, outputs: { event: "event", showCatering: "showCatering" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 6, vars: 5, consts: [[1, "mck-column", "mck-content-expand", "mck-content-page-container", "catering-container", "fullpage-modal"], [1, "header"], [3, "mode", "modal", "noSurvey", "closeCallback"], [1, "mck-column", "mck-center"], ["class", "mck-column mck-content-expand-width", 4, "ngIf"], [1, "mck-column", "mck-content-expand-width"], [1, "catering"], [4, "ngIf", "ngIfElse"], ["order_display", ""], [3, "space_list", "catering", "date", "all_day", "next_disabled", "order", "event"], [3, "space_list", "order", "dateTz", "duration", "all_day", "event"], [3, "confirmed", "loading", "modal", "dataForConfirmation", "callback"]], template: function BookingCateringComponent_Template(rf, ctx) { if (rf & 1) { +BookingCateringComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BookingCateringComponent, selectors: [["booking-catering"]], inputs: { form: "form", booking: "booking", isOccurence: "isOccurence", placeIntoModal: "placeIntoModal" }, outputs: { event: "event", showCatering: "showCatering" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 5, vars: 7, consts: [[1, "mck-column", "catering-container"], ["class", "header", 4, "ngIf"], [1, "mck-column", "mck-center"], ["class", "mck-column mck-content-expand-width", 4, "ngIf"], [1, "header"], [3, "mode", "modal", "noSurvey", "closeCallback"], [1, "mck-column", "mck-content-expand-width"], [1, "catering"], [4, "ngIf", "ngIfElse"], ["order_display", ""], [3, "space_list", "catering", "date", "all_day", "next_disabled", "placeIntoModal", "order", "event"], [3, "space_list", "order", "dateTz", "duration", "all_day", "placeIntoModal", "event"], [3, "confirmed", "loading", "placeIntoModal", "modal", "dataForConfirmation", "callback"]], template: function BookingCateringComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 0); - i0.ɵɵelementStart(1, "div", 1); - i0.ɵɵelementStart(2, "a-topbar-header", 2); - i0.ɵɵlistener("closeCallback", function BookingCateringComponent_Template_a_topbar_header_closeCallback_2_listener() { return ctx.closeCallback(); }); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(3, "div", 3); - i0.ɵɵtemplate(4, BookingCateringComponent_div_4_Template, 5, 2, "div", 4); - i0.ɵɵtemplate(5, BookingCateringComponent_div_5_Template, 2, 4, "div", 4); + i0.ɵɵtemplate(1, BookingCateringComponent_div_1_Template, 2, 3, "div", 1); + i0.ɵɵelementStart(2, "div", 2); + i0.ɵɵtemplate(3, BookingCateringComponent_div_3_Template, 5, 2, "div", 3); + i0.ɵɵtemplate(4, BookingCateringComponent_div_4_Template, 2, 5, "div", 3); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - i0.ɵɵadvance(2); - i0.ɵɵproperty("mode", ctx.TopBarHeaderMode.Light)("modal", true)("noSurvey", true); + i0.ɵɵclassProp("fullpage-modal", !ctx.placeIntoModal)("mck-content-page-container", !ctx.placeIntoModal); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", !ctx.placeIntoModal); i0.ɵɵadvance(2); i0.ɵɵproperty("ngIf", !ctx.confirmed); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.confirmed); - } }, styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\n\n[_nghost-%COMP%], .catering[_ngcontent-%COMP%] {\n height: 100vh;\n width: 100vw;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvdmFycy5zY3NzIiwiYXBwcy9zdGFmZi9zcmMvYXBwL2Jvb2tpbmcvY2F0ZXJpbmcvY2F0ZXJpbmcuY29tcG9uZW50LnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9jYXRlcmluZy9jYXRlcmluZy5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDNUNBOztzQkFBQTtBQzZCQTs7RUFBQTtBQXFDQTs7c0JBQUE7QUFhQTtFQUNJLGdCQTlGTTtFQStGTix1QkE3RmM7QUNzQmxCO0FEMEVBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUpwVUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBS3REQTs7RUFFSSxhQUFBO0VBQ0EsWUFBQTtBRjBDSiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9jYXRlcmluZy9jYXRlcmluZy5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGNvbG9yLWJyYW5kLWVsZWN0cmljLWJsdWU6ICMyMjUxZmY7XG4kY29sb3ItYnJhbmQtZGVlcC1ibHVlOiAjMDUxYzJjO1xuJGNvbG9yLWJyYW5kLWN5YW46ICMwMGE5ZjQ7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kZm9udC1kYXJrOiAjMDAwO1xuJGZvbnQtbGlnaHQ6ICNmZmY7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuJGdyZWVuMTogIzIxOTY1MztcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2xvci1wcmltYXJ5OiAjMTkzN2VhO1xuJGNvbG9yLXByaW1hcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcbiRjb2xvci1wcmltYXJ5LWRhcms6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuXG4kY29sb3Itc2Vjb25kYXJ5OiAjNDI4NUY0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodDogbGlnaHRlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG4kY29sb3Itc2Vjb25kYXJ5LWRhcms6IGRhcmtlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG5cbiRiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuJGZvb3Rlci1iYWNrOiAjMjYzMjM4O1xuJGhlYWRlci1iYWNrOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNTFDMkMsICMwNTFDMkMgNDAlLCAjMEIyNDUzIDYwJSwgIzFGNDBFNiAxMDAlKTtcblxuJGNvbG9yLXRlcm5hcnk6ICMwNTFjMmM7XG5cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuXG4kZm9udC1zdGFjazogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiRoZWFkaW5nLWZvbnQ6IFwiTGFyaXNoTWNLaW5zZXlcIiwgJ0dlb3JnaWEnLCBzZXJpZjtcbiRmb250OiAkZm9udC1zdGFjaztcblxuJGZvbnQtZmFtaWx5LXByaW1hcnk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LXNlY29uZGFyeTogXCJCb3dlclwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiIHNlcmlmO1xuXG4kYmFzZS1zaXplOiAxNnB4O1xuJHRhYmxldC1zaXplOiAxNnB4O1xuJG1vYmlsZS1zaXplOiAxNnB4O1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGJyZWFrLW1vYmlsZTogNDUwcHg7XG4kYnJlYWstdGFibGV0OiA4MDBweDtcbiRicmVhay1sYXB0b3A6IDEwMjRweDtcblxuJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGU6IDgwMHB4O1xuJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQ6IDEwNDhweDtcbiRicmVhay1sYW5kc2NhcGUtbGFwdG9wOiAxMjgwcHg7XG4iLCJAaW1wb3J0ICcuL3ZhcmlhYmxlcyc7XG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuQG1peGluIGJveC1zaGFkb3coJGNvbG9yOiAjMDAwLCAkZGVwdGg6IDEpIHtcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMXB4ICogKCRkZXB0aCAtIDEpIHJnYmEoIzAwMCwgLjIpLFxuICAgICAgICAgICAgICAgIDAgMXB4IDFweCAwIHJnYmEoIzAwMCwgLjE0KSxcbiAgICAgICAgICAgICAgICAwIDJweCAxcHggLTFweCByZ2JhKCMwMDAsIC4xMik7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG5AbWl4aW4gcmVzcG9uZC10bygkbWVkaWEpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gIEBlbHNlIGlmICRtZWRpYSA9PSBsYXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1AZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiJHByaW1hcnk6ICMxRjQwRTY7XG4kZm9ybS1sYWJlbDogIzA1MUMyQztcbiRzZWNvbmRhcnktbGFiZWw6ICM3Njc2NzY7XG4kYm9yZGVyOiAjQjNCM0IzO1xuJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ6ICNEMEQwRDA7XG4kY2hpcC1jb2xvcjogIzMzMzMzMztcbiRwbGFjZWhvbGRlci1jb2xvcjogIzdGN0Y3RjtcbiRiYWNrZ3JvdW5kLWNvbG9yOiAjRjBGMEYwO1xuJHBhZ2UtYmFja2dyb3VuZC1jb2xvcjogI0Y4RjlGQTtcbiRzZWxlY3RlZC1vcHRpb246ICNFNkU2RTY7XG4kY29sb3ItYnJhbmQteWVsbG93OiAjZmZkMDQ4O1xuJGxpZ2h0LXllbGxvdzogI2ZmZjNjZTtcbiRjb2FjaG1hcmstdGV4dDogIzZmNGQwMDtcbiRlcnJvci1jb2xvcjogI0UxMkU0MDtcbiRuby1maWx0ZXJzLWNvbG9yOiAjQkNCQ0JDO1xuJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yOiAjRjRGNEY0O1xuJHByaW1hcnktaGlnaGxpZ2h0OiAjMjI1MUZGO1xuJHNjcm9sbGJhci1jb2xvcjogIzc1NzU3NTtcblxuJGF2YWlsYWJsZS1jb2xvcjogIzVEOUQ1MjtcbiRhdmFpbGFibGUtYnktcmVxdWVzdC1jb2xvcjogI0Y1QjUzRjtcbiRpbi11c2UtY29sb3I6ICNENDQ4M0U7XG4kbm90LWJvb2thYmxlLWNvbG9yOiAjQ0NDQ0NDO1xuXG4kbW9kYWwtYm9keS1oZWFkaW5nOiAjNEQ0RDREO1xuJGFsZXJ0LW92ZXJsYXktYmc6IHJnYmEoNSwgMjgsIDQ0LCAwLjg1KTtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG5cbiRwZW5kaW5nOiAjZmZiMzAwO1xuJHBlbmRpbmctbGlnaHQ6IGxpZ2h0ZW4oJHBlbmRpbmcsIDEwKTtcbiRwZW5kaW5nLWRhcms6IGRhcmtlbigkcGVuZGluZywgMTApO1xuXG4kZXJyb3I6ICNlNTM5MzU7XG4kZXJyb3ItbGlnaHQ6IGxpZ2h0ZW4oJGVycm9yLCAxMCk7XG4kZXJyb3ItZGFyazogZGFya2VuKCRlcnJvciwgMTApO1xuXG4kY29hY2htYXJrLWJnOiAjRUJFQkY2O1xuJGNvYWNobWFyay1kYXJrLXRleHQ6ICMxQjFCMTk7XG4kZXJyb3ItdGV4dDogI2ZmZjtcblxuLyoqXG4gKiBTcGFjaW5nXG4gKi9cblxuLy8gNHB4XG4kc3BhY2luZy1zbWFsbGVzdDogMC4yNXJlbTtcblxuLy8gOHB4XG4kc3BhY2luZy14eHNtYWxsOiAwLjVyZW07XG5cbi8vIDEycHhcbiRzcGFjaW5nLXhzbWFsbDogMC43NXJlbTtcblxuLy8gMTZweFxuJHNwYWNpbmctc21hbGw6IDFyZW07XG5cbi8vIDIwcHhcbiRzcGFjaW5nLXNtYWxsLW1lZGl1bTogMS4yNXJlbTtcblxuLy8gMjRweFxuJHNwYWNpbmctbWVkaXVtOiAxLjVyZW07XG5cbi8vIDI4cHhcbiRzcGFjaW5nLW1lZGl1bS1sYXJnZTogMS43NXJlbTtcblxuLy8gMzJweFxuJHNwYWNpbmctbGFyZ2U6IDJyZW07XG5cbi8vIDQ4cHhcbiRzcGFjaW5nLXhsYXJnZTogM3JlbTtcblxuLy8gNjRweFxuJHNwYWNpbmcteHhsYXJnZTogNHJlbTtcblxuLy8gOTZweFxuJHNwYWNpbmctbGFyZ2VzdDogNnJlbTtcblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbiRkZXZpY2UtbW9iaWxlLXNpemU6IDQ1MHB4O1xuJGRldmljZS10YWJsZXQtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhcHRvcC1zaXplOiAxMDI0cHg7XG5cbiRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplOiAxMDQ4cHg7XG4kZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZTogMTI4MHB4O1xuXG5cbjpleHBvcnQge1xuICAgIHByaW1hcnk6ICRwcmltYXJ5O1xuICAgIHNlY29uZGFyeUxhYmVsOiAkc2Vjb25kYXJ5LWxhYmVsO1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuJGljb24tc21hbGw6IDE2cHg7XG4kaWNvbi1tZWRpdW06IDI0cHg7XG4kaWNvbi1sYXJnZTogMzJweDtcbiRpY29uLXhsYXJnZTogNDhweDtcbiIsIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46aG9zdCxcbi5jYXRlcmluZyB7XG4gIGhlaWdodDogMTAwdmg7XG4gIHdpZHRoOiAxMDB2dztcbn0iLCJAaW1wb3J0IFwidmFyc1wiO1xuXG5AbWl4aW4gcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkc2l6ZSwgJHF1YWxpZmllcikge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQGlmICgkcXVhbGlmaWVyID09IG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2UgaWYgKCRxdWFsaWZpZXIgPT0gbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1heC13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuQG1peGluIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkbWluLCAkbWF4KSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyB0aGlzIGlzIGEgY29weSBvZiByZXNwb25kLXRvLiB3ZSBkb24ndCB3YW50IHRvIHByZXNlcnZlIHRoYXQgbWV0aG9kIHNpbmNlIHRoZSBicmVha3BvaW50cyBtYXkgZGl2ZXJnZSBmcm9tIHRoZSBvbGQgVUkuXG5AbWl4aW4gaXMtc2NyZWVuLXNpemUoJG1lZGlhOiBhbGwsICRvcmllbnRhdGlvbjogbm9uZSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5cbkBtaXhpbiBwYWdlLXBhZGRpbmcge1xuICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctc21hbGw7XG4gICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctc21hbGw7XG59XG5cbi8vIEZvbnQgTWl4aW5zXG4kZm9udC1tY2tpbnNleS1zYW5zOiBcIk1jS2luc2V5IFNhbnNcIjtcbiRmb250LXRoZWluaGFyZHQ6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuJGZvbnQtYm93ZXI6IFwiQm93ZXJcIjtcblxuQG1peGluIGJvd2VyLWJvbGQge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1ib3dlcjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gbWNraW5zZXktc2FucyB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIGRpc3BsYXktMSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNHJlbTsgLy8gNjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODc7IC8vIDc2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTIge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTMge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2MHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNCB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDNyZW07IC8vIDQ4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNjY7IC8vIDU2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjRweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMwcHhcbiAgICBsaW5lLWhlaWdodDogMS44MzM7IC8vIDM0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY0MjsgLy8gNDBweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0xIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNDhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNzVyZW07IC8vIDQ0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA1MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0yIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjExMTsgLy8gNDRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDQ4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTMge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMjI7IC8vIDQ0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTUge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTYge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTU7IC8vIDI4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBib2R5LWRlZmF1bHQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjZweFxuICAgIH1cbn1cblxuLy8vIERvZXNudCBleGlzdCBpbiBNRFMuXG5AbWl4aW4gYm9keS10aW55IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTsgLy8gMTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDIwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBmb3JtLWxhYmVsIHtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC10aGVpbmhhcmR0O1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBjb2xvcjogJHBsYWNlaG9sZGVyLWNvbG9yO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG59XG5cbkBtaXhpbiBjaGlwLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gY2hlY2tib3gtbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICBjb2xvcjogYmxhY2s7XG59XG5cbi8vIGJvcmRlcnNcblxuQG1peGluIG1jay1jaGVja2JveC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stdGhpbi1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYm9yZGVyLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQtbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlci1saWdodDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cblxuLy8gZnVuY3Rpb25zXG5cbi8qKlxuICogTWFrZXMgdGV4dCBoYXZlIG1heGltdW0gbGluZXMgd2l0aCBlbGxpcHNpcy4gV29ya3Mgb24gbW9zdCBtb2Rlcm4gYnJvd3NlcnMgZXhjZXB0XG4gKiBvZiBGaXJlZm94Li5cbiAqL1xuQG1peGluIG1heC1saW5lcygkY291bnQpIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIC13ZWJraXQtbGluZS1jbGFtcDogJGNvdW50O1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG59XG5cbi8vIGltYWdlc1xuQG1peGluIG1jay1pY29uKCR3aWR0aCwgJGFzc2V0LCAkaGVpZ2h0OiAkd2lkdGgsICAkYXNzZXRQYXRoOiBcImxpYnMvdWkvc3JjL2xpYi9pY29uc1wiLCkge1xuICAgIHdpZHRoOiAkd2lkdGg7XG4gICAgaGVpZ2h0OiAkaGVpZ2h0O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiN7JGFzc2V0UGF0aH0vI3skYXNzZXR9XCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbn1cblxuXG5AbWl4aW4gbWNrLXNtYWxsLWljb24oJG1vYmlsZS1hc3NldCwgJGRlc2t0b3AtYXNzZXQ6ICRtb2JpbGUtYXNzZXQpIHtcbiAgICBAaW5jbHVkZSBtY2staWNvbigxNnB4LCAkYXNzZXQ6ICRtb2JpbGUtYXNzZXQpO1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBAaW5jbHVkZSBtY2staWNvbigyNHB4LCAkYXNzZXQ6ICRkZXNrdG9wLWFzc2V0KTtcbiAgICB9XG59XG5cbi8vIHNrZWxldG9uXG5AbWl4aW4gc2tlbGV0b24tYmcge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1pbWFnZS1zaXplIHtcbiAgICB3aWR0aDogODFweDtcbiAgICBoZWlnaHQ6IDgycHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAyMTlweDtcbiAgICAgICAgaGVpZ2h0OiAxMTlweDtcbiAgICB9XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1zdGF0dXMtc2l6ZSB7XG4gICAgd2lkdGg6IDExN3B4O1xuICAgIGhlaWdodDogNzhweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDExN3B4O1xuICAgICAgICBoZWlnaHQ6IDc4cHg7XG4gICAgfVxufVxuIiwiQGltcG9ydCAnbWl4aW5zJztcbkBpbXBvcnQgXCJsaWJzL3VpL3NyYy9saWIvbWl4aW5zXCI7XG5AaW1wb3J0ICd2YXJpYWJsZXMnO1xuXG46aG9zdCxcbi5jYXRlcmluZyB7XG4gICAgaGVpZ2h0OiAxMDB2aDtcbiAgICB3aWR0aDogMTAwdnc7XG59XG4iXX0= */"] }); + } }, styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\n\n[_nghost-%COMP%], .catering[_ngcontent-%COMP%] {\n padding-top: 1px;\n}\n[_nghost-%COMP%] .catering-container[_ngcontent-%COMP%] {\n height: 62rem;\n}\n[_nghost-%COMP%] .catering-container[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(1) {\n height: 100%;\n}\n[_nghost-%COMP%] .catering-container[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(1) .mck-content-expand-width[_ngcontent-%COMP%], [_nghost-%COMP%] .catering-container[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(1) .catering[_ngcontent-%COMP%] {\n height: 100%;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .catering-container[_ngcontent-%COMP%] {\n height: 55.4rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .catering-container[_ngcontent-%COMP%] {\n height: 55.4rem;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvdmFycy5zY3NzIiwiYXBwcy9zdGFmZi9zcmMvYXBwL2Jvb2tpbmcvY2F0ZXJpbmcvY2F0ZXJpbmcuY29tcG9uZW50LnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9jYXRlcmluZy9jYXRlcmluZy5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDNUNBOztzQkFBQTtBQzZCQTs7RUFBQTtBQXFDQTs7c0JBQUE7QUFhQTtFQUNJLGdCQTlGTTtFQStGTix1QkE3RmM7QUNzQmxCO0FEMEVBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUpwVUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBS3REQTs7RUFJSSxnQkFBQTtBRndDSjtBRXBDSTtFQUNJLGFBQUE7QUZ1Q1I7QUV0Q1E7RUFDSSxZQUFBO0FGd0NaO0FFdkNZO0VBQ0ksWUFBQTtBRnlDaEI7QUNqRFk7RUNHUjtJQWNRLGVBQUE7RUZvQ1Y7QUFDRjtBQ3REWTtFQ0dSO0lBY1EsZUFBQTtFRnlDVjtBQUNGIiwiZmlsZSI6ImFwcHMvc3RhZmYvc3JjL2FwcC9ib29raW5nL2NhdGVyaW5nL2NhdGVyaW5nLmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kY29sb3ItYnJhbmQtZWxlY3RyaWMtYmx1ZTogIzIyNTFmZjtcbiRjb2xvci1icmFuZC1kZWVwLWJsdWU6ICMwNTFjMmM7XG4kY29sb3ItYnJhbmQtY3lhbjogIzAwYTlmNDtcblxuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRmb250LWRhcms6ICMwMDA7XG4kZm9udC1saWdodDogI2ZmZjtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG4kZ3JlZW4xOiAjMjE5NjUzO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvbG9yLXByaW1hcnk6ICMxOTM3ZWE7XG4kY29sb3ItcHJpbWFyeS1saWdodDogbGlnaHRlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuJGNvbG9yLXByaW1hcnktZGFyazogZGFya2VuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG5cbiRjb2xvci1zZWNvbmRhcnk6ICM0Mjg1RjQ7XG4kY29sb3Itc2Vjb25kYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcbiRjb2xvci1zZWNvbmRhcnktZGFyazogZGFya2VuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcblxuJGJhY2tncm91bmQ6ICNmMGYwZjA7XG4kZm9vdGVyLWJhY2s6ICMyNjMyMzg7XG4kaGVhZGVyLWJhY2s6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzA1MUMyQywgIzA1MUMyQyA0MCUsICMwQjI0NTMgNjAlLCAjMUY0MEU2IDEwMCUpO1xuXG4kY29sb3ItdGVybmFyeTogIzA1MWMyYztcblxuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG5cbiRmb250LXN0YWNrOiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcblxuJGhlYWRpbmctZm9udDogXCJMYXJpc2hNY0tpbnNleVwiLCAnR2VvcmdpYScsIHNlcmlmO1xuJGZvbnQ6ICRmb250LXN0YWNrO1xuXG4kZm9udC1mYW1pbHktcHJpbWFyeTogXCJNY0tpbnNleSBTYW5zXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQ2FsaWJyaSwgQ29yYmVsLCBIZWx2ZXRpY2EsIFJvYm90bywgRHJvaWQsIHNhbnMtc2VyaWY7XG4kZm9udC1mYW1pbHktc2Vjb25kYXJ5OiBcIkJvd2VyXCIsIEdlb3JnaWEsIFwiVGltZXMgTmV3IFJvbWFuXCIgc2VyaWY7XG5cbiRiYXNlLXNpemU6IDE2cHg7XG4kdGFibGV0LXNpemU6IDE2cHg7XG4kbW9iaWxlLXNpemU6IDE2cHg7XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kYnJlYWstbW9iaWxlOiA0NTBweDtcbiRicmVhay10YWJsZXQ6IDgwMHB4O1xuJGJyZWFrLWxhcHRvcDogMTAyNHB4O1xuXG4kYnJlYWstbGFuZHNjYXBlLW1vYmlsZTogODAwcHg7XG4kYnJlYWstbGFuZHNjYXBlLXRhYmxldDogMTA0OHB4O1xuJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3A6IDEyODBweDtcbiIsIkBpbXBvcnQgJy4vdmFyaWFibGVzJztcblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5AbWl4aW4gYm94LXNoYWRvdygkY29sb3I6ICMwMDAsICRkZXB0aDogMSkge1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCAxcHggKiAoJGRlcHRoIC0gMSkgcmdiYSgjMDAwLCAuMiksXG4gICAgICAgICAgICAgICAgMCAxcHggMXB4IDAgcmdiYSgjMDAwLCAuMTQpLFxuICAgICAgICAgICAgICAgIDAgMnB4IDFweCAtMXB4IHJnYmEoIzAwMCwgLjEyKTtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbkBtaXhpbiByZXNwb25kLXRvKCRtZWRpYSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSAgQGVsc2UgaWYgJG1lZGlhID09IGxhdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfUBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCIkcHJpbWFyeTogIzFGNDBFNjtcbiRmb3JtLWxhYmVsOiAjMDUxQzJDO1xuJHNlY29uZGFyeS1sYWJlbDogIzc2NzY3NjtcbiRib3JkZXI6ICNCM0IzQjM7XG4kYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDogI0QwRDBEMDtcbiRjaGlwLWNvbG9yOiAjMzMzMzMzO1xuJHBsYWNlaG9sZGVyLWNvbG9yOiAjN0Y3RjdGO1xuJGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4kcGFnZS1iYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuJHNlbGVjdGVkLW9wdGlvbjogI0U2RTZFNjtcbiRjb2xvci1icmFuZC15ZWxsb3c6ICNmZmQwNDg7XG4kbGlnaHQteWVsbG93OiAjZmZmM2NlO1xuJGNvYWNobWFyay10ZXh0OiAjNmY0ZDAwO1xuJGVycm9yLWNvbG9yOiAjRTEyRTQwO1xuJG5vLWZpbHRlcnMtY29sb3I6ICNCQ0JDQkM7XG4kcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I6ICNGNEY0RjQ7XG4kcHJpbWFyeS1oaWdobGlnaHQ6ICMyMjUxRkY7XG4kc2Nyb2xsYmFyLWNvbG9yOiAjNzU3NTc1O1xuXG4kYXZhaWxhYmxlLWNvbG9yOiAjNUQ5RDUyO1xuJGF2YWlsYWJsZS1ieS1yZXF1ZXN0LWNvbG9yOiAjRjVCNTNGO1xuJGluLXVzZS1jb2xvcjogI0Q0NDgzRTtcbiRub3QtYm9va2FibGUtY29sb3I6ICNDQ0NDQ0M7XG5cbiRtb2RhbC1ib2R5LWhlYWRpbmc6ICM0RDRENEQ7XG4kYWxlcnQtb3ZlcmxheS1iZzogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2FjaG1hcmstYmc6ICNFQkVCRjY7XG4kY29hY2htYXJrLWRhcmstdGV4dDogIzFCMUIxOTtcbiRlcnJvci10ZXh0OiAjZmZmO1xuXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuXG4vLyA0cHhcbiRzcGFjaW5nLXNtYWxsZXN0OiAwLjI1cmVtO1xuXG4vLyA4cHhcbiRzcGFjaW5nLXh4c21hbGw6IDAuNXJlbTtcblxuLy8gMTJweFxuJHNwYWNpbmcteHNtYWxsOiAwLjc1cmVtO1xuXG4vLyAxNnB4XG4kc3BhY2luZy1zbWFsbDogMXJlbTtcblxuLy8gMjBweFxuJHNwYWNpbmctc21hbGwtbWVkaXVtOiAxLjI1cmVtO1xuXG4vLyAyNHB4XG4kc3BhY2luZy1tZWRpdW06IDEuNXJlbTtcblxuLy8gMjhweFxuJHNwYWNpbmctbWVkaXVtLWxhcmdlOiAxLjc1cmVtO1xuXG4vLyAzMnB4XG4kc3BhY2luZy1sYXJnZTogMnJlbTtcblxuLy8gNDhweFxuJHNwYWNpbmcteGxhcmdlOiAzcmVtO1xuXG4vLyA2NHB4XG4kc3BhY2luZy14eGxhcmdlOiA0cmVtO1xuXG4vLyA5NnB4XG4kc3BhY2luZy1sYXJnZXN0OiA2cmVtO1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGRldmljZS1tb2JpbGUtc2l6ZTogNDUwcHg7XG4kZGV2aWNlLXRhYmxldC1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFwdG9wLXNpemU6IDEwMjRweDtcblxuJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemU6IDgwMHB4O1xuJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemU6IDEwNDhweDtcbiRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplOiAxMjgwcHg7XG5cblxuOmV4cG9ydCB7XG4gICAgcHJpbWFyeTogJHByaW1hcnk7XG4gICAgc2Vjb25kYXJ5TGFiZWw6ICRzZWNvbmRhcnktbGFiZWw7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4kaWNvbi1zbWFsbDogMTZweDtcbiRpY29uLW1lZGl1bTogMjRweDtcbiRpY29uLWxhcmdlOiAzMnB4O1xuJGljb24teGxhcmdlOiA0OHB4O1xuIiwiLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbjpob3N0LFxuLmNhdGVyaW5nIHtcbiAgcGFkZGluZy10b3A6IDFweDtcbn1cblxuOmhvc3QgLmNhdGVyaW5nLWNvbnRhaW5lciB7XG4gIGhlaWdodDogNjJyZW07XG59XG46aG9zdCAuY2F0ZXJpbmctY29udGFpbmVyID4gZGl2Om50aC1jaGlsZCgxKSB7XG4gIGhlaWdodDogMTAwJTtcbn1cbjpob3N0IC5jYXRlcmluZy1jb250YWluZXIgPiBkaXY6bnRoLWNoaWxkKDEpIC5tY2stY29udGVudC1leHBhbmQtd2lkdGgsIDpob3N0IC5jYXRlcmluZy1jb250YWluZXIgPiBkaXY6bnRoLWNoaWxkKDEpIC5jYXRlcmluZyB7XG4gIGhlaWdodDogMTAwJTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIDpob3N0IC5jYXRlcmluZy1jb250YWluZXIge1xuICAgIGhlaWdodDogNTUuNHJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIDpob3N0IC5jYXRlcmluZy1jb250YWluZXIge1xuICAgIGhlaWdodDogNTUuNHJlbTtcbiAgfVxufSIsIkBpbXBvcnQgXCJ2YXJzXCI7XG5cbkBtaXhpbiBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRzaXplLCAkcXVhbGlmaWVyKSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAaWYgKCRxdWFsaWZpZXIgPT0gbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSBpZiAoJHF1YWxpZmllciA9PSBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWF4LXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5AbWl4aW4gYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRtaW4sICRtYXgpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkbWluKSBhbmQgKG1heC13aWR0aDogJG1heCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIHRoaXMgaXMgYSBjb3B5IG9mIHJlc3BvbmQtdG8uIHdlIGRvbid0IHdhbnQgdG8gcHJlc2VydmUgdGhhdCBtZXRob2Qgc2luY2UgdGhlIGJyZWFrcG9pbnRzIG1heSBkaXZlcmdlIGZyb20gdGhlIG9sZCBVSS5cbkBtaXhpbiBpcy1zY3JlZW4tc2l6ZSgkbWVkaWE6IGFsbCwgJG9yaWVudGF0aW9uOiBub25lKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cblxuQG1peGluIHBhZ2UtcGFkZGluZyB7XG4gICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbDtcbn1cblxuLy8gRm9udCBNaXhpbnNcbiRmb250LW1ja2luc2V5LXNhbnM6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuJGZvbnQtdGhlaW5oYXJkdDogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4kZm9udC1ib3dlcjogXCJCb3dlclwiO1xuXG5AbWl4aW4gYm93ZXItYm9sZCB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWJvd2VyO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBtY2tpbnNleS1zYW5zIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gZGlzcGxheS0xIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiA0cmVtOyAvLyA2NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4NzsgLy8gNzZweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMiB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDYwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS00IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogM3JlbTsgLy8gNDhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE2NjsgLy8gNTZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS01IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjgzMzsgLy8gMzRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjQyOyAvLyA0MHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS03IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyOHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTEge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA0OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi43NXJlbTsgLy8gNDRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDUycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTIge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTExOyAvLyA0NHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNDhweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMyB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIyMjsgLy8gNDRweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjg4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1NTsgLy8gMjhweFxuICAgIH1cbn1cblxuQG1peGluIGJvZHktZGVmYXVsdCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNnB4XG4gICAgfVxufVxuXG4vLy8gRG9lc250IGV4aXN0IGluIE1EUy5cbkBtaXhpbiBib2R5LXRpbnkge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtOyAvLyAxMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjRweFxuICAgIH1cbn1cblxuQG1peGluIGZvcm0tbGFiZWwge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LXRoZWluaGFyZHQ7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGNvbG9yOiAkcGxhY2Vob2xkZXItY29sb3I7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbn1cblxuQG1peGluIGNoaXAtbGFiZWwge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBjaGVja2JveC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGNvbG9yOiBibGFjaztcbn1cblxuLy8gYm9yZGVyc1xuXG5AbWl4aW4gbWNrLWNoZWNrYm94LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay10aGluLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXItbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBib3JkZXItY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudC1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuXG4vLyBmdW5jdGlvbnNcblxuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG5AbWl4aW4gbWF4LWxpbmVzKCRjb3VudCkge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiAkY291bnQ7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbn1cblxuLy8gaW1hZ2VzXG5AbWl4aW4gbWNrLWljb24oJHdpZHRoLCAkYXNzZXQsICRoZWlnaHQ6ICR3aWR0aCwgICRhc3NldFBhdGg6IFwibGlicy91aS9zcmMvbGliL2ljb25zXCIsKSB7XG4gICAgd2lkdGg6ICR3aWR0aDtcbiAgICBoZWlnaHQ6ICRoZWlnaHQ7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiI3skYXNzZXRQYXRofS8jeyRhc3NldH1cIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuXG5cbkBtaXhpbiBtY2stc21hbGwtaWNvbigkbW9iaWxlLWFzc2V0LCAkZGVza3RvcC1hc3NldDogJG1vYmlsZS1hc3NldCkge1xuICAgIEBpbmNsdWRlIG1jay1pY29uKDE2cHgsICRhc3NldDogJG1vYmlsZS1hc3NldCk7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICRhc3NldDogJGRlc2t0b3AtYXNzZXQpO1xuICAgIH1cbn1cblxuLy8gc2tlbGV0b25cbkBtaXhpbiBza2VsZXRvbi1iZyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWltYWdlLXNpemUge1xuICAgIHdpZHRoOiA4MXB4O1xuICAgIGhlaWdodDogODJweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDIxOXB4O1xuICAgICAgICBoZWlnaHQ6IDExOXB4O1xuICAgIH1cbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLXN0YXR1cy1zaXplIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMTE3cHg7XG4gICAgICAgIGhlaWdodDogNzhweDtcbiAgICB9XG59XG4iLCJAaW1wb3J0ICdtaXhpbnMnO1xuQGltcG9ydCBcImxpYnMvdWkvc3JjL2xpYi9taXhpbnNcIjtcbkBpbXBvcnQgJ3ZhcmlhYmxlcyc7XG5cbjpob3N0LFxuLmNhdGVyaW5nIHtcbiAgICAvLyBoZWlnaHQ6IDEwMHZoO1xuICAgIC8vIHdpZHRoOiAxMDB2dztcbiAgICBwYWRkaW5nLXRvcDogMXB4O1xufVxuXG46aG9zdCB7XG4gICAgLmNhdGVyaW5nLWNvbnRhaW5lciB7XG4gICAgICAgIGhlaWdodDogNjJyZW07XG4gICAgICAgID5kaXY6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgIC5tY2stY29udGVudC1leHBhbmQtd2lkdGgsIC5jYXRlcmluZyB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cblxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZSh0YWJsZXQpIHtcbiAgICAgICAgXG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICBoZWlnaHQ6IDU1LjRyZW07XG4gICAgICAgICAgICBcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICBcbn1cbiJdfQ== */"] }); /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(BookingCateringComponent, [{ type: core_1.Component, args: [{ @@ -35134,6 +35418,8 @@ BookingCateringComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BookingCateringC type: core_1.Input }], showCatering: [{ type: core_1.Output + }], placeIntoModal: [{ + type: core_1.Input }] }); })(); @@ -35466,7 +35752,7 @@ function BookingCateringOrderDetailsComponent_div_2_ng_template_4_ng_container_0 const item_r26 = ctx.$implicit; const ctx_r25 = i0.ɵɵnextContext(5); i0.ɵɵstyleProp("background-image", i0.ɵɵpipeBind2(1, 4, "url(" + item_r26.image_path + ")", "style"), i0.ɵɵdefaultStyleSanitizer); - i0.ɵɵproperty("disabled", ctx_r25.within_restricted_time && !item_r26.can_order_anytime); + i0.ɵɵproperty("disabled", ctx_r25.within_category_restricted_time(item_r26) || ctx_r25.within_restricted_time && !item_r26.can_order_anytime); i0.ɵɵadvance(4); i0.ɵɵtextInterpolate(item_r26.name); } } @@ -35574,7 +35860,7 @@ function BookingCateringOrderDetailsComponent_ng_template_13_Template(rf, ctx) { i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r7 = i0.ɵɵnextContext(); - i0.ɵɵproperty("compact", ctx_r7.compact)("category", ctx_r7.active_category)("symbol", ctx_r7.symbol)("items", ctx_r7.form.controls.items)("disabled", ctx_r7.within_restricted_time); + i0.ɵɵproperty("compact", ctx_r7.compact)("category", ctx_r7.active_category)("symbol", ctx_r7.symbol)("items", ctx_r7.form.controls.items)("disabled", ctx_r7.within_category_restricted_time(ctx_r7.item) || ctx_r7.within_restricted_time); } } class BookingCateringOrderDetailsComponent extends base_1.BaseDirective { constructor(_menu, _org, _dialog) { @@ -35592,6 +35878,11 @@ class BookingCateringOrderDetailsComponent extends base_1.BaseDirective { this.search$ = new rxjs_1.BehaviorSubject(''); /** List of menu items that match the search string */ this.matched_items = []; + /** + * placeIntoModal: Input decorator indecate as a flag to adapt component design into a dialog modal + * (by hiding header and adjusting height so that fit into a modal) + */ + this.placeIntoModal = false; } /** Whether user is able to order from the currently selected space */ get can_order() { @@ -35627,6 +35918,24 @@ class BookingCateringOrderDetailsComponent extends base_1.BaseDirective { const expired = date_tz_1.DateNow(new Date()).addValue({ hours: this.active_building.catering_restricted_from }).startOfValue('minute'); return this.dateTz.isBeforeDate(expired); } + /** Whether booking is with the restricted ordering period */ + within_category_restricted_time(item) { + /** + * Update : https://mckinsey.atlassian.net/browse/CNG-574 + * Right now the frontend is restricting catering orders based off the field .settings.discovery_info.catering_restricted_from, + * so for this ticket change it’s best we keep that field as the default time restriction, then add a new field to catering categories called + * restricted_from which will override the old field if it’s present! + * restricted_from can be set by concierge admin to restrict item from being order before set time ex if it been set to 24 then the item should + * available to order before 24 hours of booking/order time! + */ + if (!!(item === null || item === void 0 ? void 0 : item.restricted_from)) { + const expired = date_tz_1.DateNow(new Date()).addValue({ hours: item === null || item === void 0 ? void 0 : item.restricted_from }).startOfValue('minute'); + return this.dateTz.isBeforeDate(expired); + } + else { + return false; + } + } /** Whether items are available for order at anytime */ get has_available_items() { return this.category_list.reduce((available, category) => available || category.can_order_anytime, false); @@ -35636,10 +35945,11 @@ class BookingCateringOrderDetailsComponent extends base_1.BaseDirective { this.subscription('search', this.search$.pipe(operators_1.map((str) => { const search = str.toLowerCase(); const items = []; - for (const category of this.category_list) { + const available_categories = this.category_list.filter(item => !this.within_category_restricted_time(item)); + for (const category of available_categories) { if (category.items) { for (const group of category.items) { - if (group.items) { + if (group.items.length) { if (group.package && (group.name.toLowerCase().includes(search) || group.items.find((item) => item.name.toLowerCase().includes(search)))) { @@ -35843,7 +36153,7 @@ BookingCateringOrderDetailsComponent.ɵcmp = i0.ɵɵdefineComponent({ type: Book } if (rf & 2) { var _t; i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._input_el = _t.first); - } }, inputs: { order: "order", dateTz: "dateTz", duration: "duration", space_list: "space_list", all_day: "all_day", hide_details: "hide_details", compact: "compact" }, outputs: { event: "event" }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 15, vars: 7, consts: [[1, "catering", "order-details"], ["class", "header", 4, "ngIf"], ["class", "body", 3, "is-search", 4, "ngIf", "ngIfElse"], [1, "bottom-panel-buttons"], [1, "buttons"], ["mat-button", "", "color", "secondary", "name", "previous", 1, "mck-secondary-button", 3, "click"], ["mat-button", "", "color", "primary", "name", "next", 1, "mck-primary-button", 3, "disabled", "click"], ["empty_state", ""], ["load_state", ""], ["category_display", ""], [1, "header"], [3, "formGroup"], ["class", "field", 4, "ngIf"], [1, "search"], ["mat-icon-button", "", 3, "disabled", "click"], [3, "icon"], [1, "search-input"], [1, "input"], ["appearance", "outline"], ["matInput", "", "placeholder", "Search for items...", 3, "ngModel", "ngModelOptions", "ngModelChange"], ["input", ""], [1, "field"], [1, "cat_field_label"], ["formControlName", "location_id"], [3, "value", 4, "ngFor", "ngForOf"], [3, "value"], ["for", "start", 1, "cat_field_label"], ["name", "start", "formControlName", "delivery_time"], [1, "body"], [4, "ngIf", "ngIfElse"], ["menu", ""], ["class", "item", 4, "ngFor", "ngForOf"], [1, "item"], [3, "compact", "disabled", "symbol", "item", "field"], ["class", "contents", 4, "ngIf", "ngIfElse"], [1, "contents"], ["mat-button", "", "class", "category", 3, "background-image", "disabled", "click", 4, "ngFor", "ngForOf"], ["mat-button", "", 1, "category", 3, "disabled", "click"], [1, "overlay"], [1, "name"], [1, "empty-state", "center"], [1, "icon"], ["alt", "No Catering Available", "src", "assets/img/no-catering.svg"], [1, "bold"], [1, "info-block", "center"], ["diameter", "48"], [1, "text"], [3, "compact", "category", "symbol", "items", "disabled", "close"]], template: function BookingCateringOrderDetailsComponent_Template(rf, ctx) { if (rf & 1) { + } }, inputs: { order: "order", dateTz: "dateTz", duration: "duration", space_list: "space_list", all_day: "all_day", hide_details: "hide_details", compact: "compact", placeIntoModal: "placeIntoModal" }, outputs: { event: "event" }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 15, vars: 9, consts: [[1, "catering", "order-details"], ["class", "header", 4, "ngIf"], ["class", "body", 3, "is-search", 4, "ngIf", "ngIfElse"], [1, "bottom-panel-buttons"], [1, "buttons"], ["mat-button", "", "color", "secondary", "name", "previous", 1, "mck-secondary-button", 3, "click"], ["mat-button", "", "color", "primary", "name", "next", 1, "mck-primary-button", 3, "disabled", "click"], ["empty_state", ""], ["load_state", ""], ["category_display", ""], [1, "header"], [3, "formGroup"], ["class", "field", 4, "ngIf"], [1, "search"], ["mat-icon-button", "", 3, "disabled", "click"], [3, "icon"], [1, "search-input"], [1, "input"], ["appearance", "outline"], ["matInput", "", "placeholder", "Search for items...", 3, "ngModel", "ngModelOptions", "ngModelChange"], ["input", ""], [1, "field"], [1, "cat_field_label"], ["formControlName", "location_id"], [3, "value", 4, "ngFor", "ngForOf"], [3, "value"], ["for", "start", 1, "cat_field_label"], ["name", "start", "formControlName", "delivery_time"], [1, "body"], [4, "ngIf", "ngIfElse"], ["menu", ""], ["class", "item", 4, "ngFor", "ngForOf"], [1, "item"], [3, "compact", "disabled", "symbol", "item", "field"], ["class", "contents", 4, "ngIf", "ngIfElse"], [1, "contents"], ["mat-button", "", "class", "category", 3, "background-image", "disabled", "click", 4, "ngFor", "ngForOf"], ["mat-button", "", 1, "category", 3, "disabled", "click"], [1, "overlay"], [1, "name"], [1, "empty-state", "center"], [1, "icon"], ["alt", "No Catering Available", "src", "assets/img/no-catering.svg"], [1, "bold"], [1, "info-block", "center"], ["diameter", "48"], [1, "text"], [3, "compact", "category", "symbol", "items", "disabled", "close"]], template: function BookingCateringOrderDetailsComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 0); i0.ɵɵtemplate(1, BookingCateringOrderDetailsComponent_div_1_Template, 13, 16, "div", 1); i0.ɵɵtemplate(2, BookingCateringOrderDetailsComponent_div_2_Template, 6, 8, "div", 2); @@ -35870,12 +36180,14 @@ BookingCateringOrderDetailsComponent.ɵcmp = i0.ɵɵdefineComponent({ type: Book i0.ɵɵproperty("ngIf", ctx.form); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", !ctx.loading)("ngIfElse", _r4); - i0.ɵɵadvance(5); + i0.ɵɵadvance(1); + i0.ɵɵstyleProp("position", ctx.placeIntoModal ? "absolute" : "fixed"); + i0.ɵɵadvance(4); i0.ɵɵproperty("disabled", !ctx.item_count || ctx.out_of_hours); i0.ɵɵadvance(1); i0.ɵɵi18nExp(ctx.item_count || "0"); i0.ɵɵi18nApply(8); - } }, directives: [i3.NgIf, i4.MatButton, i5.ɵangular_packages_forms_forms_y, i5.NgControlStatusGroup, i5.FormGroupDirective, i6.IconComponent, i7.MatFormField, i8.MatInput, i5.DefaultValueAccessor, i5.NgControlStatus, i5.NgModel, i9.MatSelect, i5.FormControlName, i3.NgForOf, i10.MatOption, i11.CateringMenuItemComponent, i12.MatSpinner, i13.CateringMenuCategoryComponent], pipes: [i3.AsyncPipe, i14.SafePipe], styles: ["[_nghost-%COMP%] {\n height: 100%;\n}\n.order-details[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n flex-direction: column;\n height: 100%;\n width: 100%;\n margin: auto;\n max-width: 100vw;\n min-height: 65vh;\n}\n.order-details.compact[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n min-height: 16em;\n}\n.header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n width: 100%;\n background-color: #fff;\n box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12);\n z-index: 99;\n padding-top: 10px;\n border-top: 1px solid #E8E8E8;\n}\n.body[_ngcontent-%COMP%] {\n position: relative;\n flex: 1;\n width: 100%;\n min-height: 50%;\n overflow: hidden auto;\n margin-bottom: 200px;\n}\n.search[_ngcontent-%COMP%] {\n position: relative;\n margin: 0.5em;\n}\n.search.min[_ngcontent-%COMP%] {\n margin-left: 18em;\n}\n.min[_ngcontent-%COMP%] .search-input[_ngcontent-%COMP%] {\n bottom: auto;\n right: auto;\n top: 50%;\n left: 0;\n transform: translate(-100%, -50%);\n}\n.min[_ngcontent-%COMP%] .search-input[_ngcontent-%COMP%] .input[_ngcontent-%COMP%] {\n margin: 0;\n box-shadow: none;\n background-color: none;\n font-size: 1em;\n}\n.search-input[_ngcontent-%COMP%] {\n position: absolute;\n bottom: -6px;\n right: -1em;\n opacity: 0;\n transition: opacity 200ms;\n transform: translateY(100%);\n overflow: hidden;\n}\n.search-input.show[_ngcontent-%COMP%] {\n opacity: 1;\n}\n.search-input[_ngcontent-%COMP%] .input[_ngcontent-%COMP%] {\n margin: 0 1em 1em;\n padding: 0 0.5em;\n height: 3.5em;\n background-color: #fff;\n border-radius: 0 0 4px 4px;\n box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12);\n font-size: 0.8em;\n}\n.item[_ngcontent-%COMP%] {\n position: relative;\n width: 640px;\n margin: 0.5em auto;\n background-color: #fff;\n border: 1px solid #ccc;\n border-radius: 4px;\n overflow: hidden;\n max-width: calc(100% - 1em);\n z-index: 0;\n}\n.is-search[_ngcontent-%COMP%] {\n padding-top: 2em;\n}\n.footer[_ngcontent-%COMP%] {\n width: 100%;\n text-align: center;\n border-top: 1px solid #ccc;\n background-color: #fff;\n box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12);\n}\n.footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n min-width: 8em;\n margin: 0.5em;\n}\nform[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n}\n.field[_ngcontent-%COMP%] {\n margin: 0 0.5em;\n max-height: 3.5em;\n display: flex;\n position: relative;\n}\n.field[_ngcontent-%COMP%] div[_ngcontent-%COMP%] {\n padding: 14px 15px 0 0;\n}\n.field[_ngcontent-%COMP%] div[_ngcontent-%COMP%], .field[_ngcontent-%COMP%] .mat-form-field[_ngcontent-%COMP%] {\n width: -webkit-fit-content;\n width: -moz-fit-content;\n width: fit-content;\n display: inline-block;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .field[_ngcontent-%COMP%] div[_ngcontent-%COMP%], .field[_ngcontent-%COMP%] .mat-form-field[_ngcontent-%COMP%] {\n width: 110px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .field[_ngcontent-%COMP%] div[_ngcontent-%COMP%], .field[_ngcontent-%COMP%] .mat-form-field[_ngcontent-%COMP%] {\n width: 110px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .field[_ngcontent-%COMP%] {\n max-height: 4.75em;\n }\n .field[_ngcontent-%COMP%] .cat_field_label[_ngcontent-%COMP%] {\n position: absolute;\n top: -18px;\n left: 10px;\n }\n .field[_ngcontent-%COMP%] .mat-form-field[_ngcontent-%COMP%] {\n margin-top: 12px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .field[_ngcontent-%COMP%] {\n max-height: 4.75em;\n }\n .field[_ngcontent-%COMP%] .cat_field_label[_ngcontent-%COMP%] {\n position: absolute;\n top: -18px;\n left: 10px;\n }\n .field[_ngcontent-%COMP%] .mat-form-field[_ngcontent-%COMP%] {\n margin-top: 12px;\n }\n}\n.contents[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n max-width: 768px;\n margin: auto;\n}\n.category[_ngcontent-%COMP%] {\n position: relative;\n background-position: center;\n background-size: cover;\n height: 10em;\n width: 10em;\n margin: 1em;\n border-radius: 4px;\n font-size: 1em;\n border: none;\n padding: 0;\n background-color: #fff;\n transition: box-shadow 200ms;\n}\n.category[_ngcontent-%COMP%]:hover {\n box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12);\n}\n.category[_ngcontent-%COMP%] .overlay[_ngcontent-%COMP%] {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.35);\n border-radius: 4px;\n}\n.category[_ngcontent-%COMP%] .name[_ngcontent-%COMP%] {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: 99;\n max-width: 9em;\n white-space: normal;\n line-height: 1.25em;\n margin: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n mat-form-field[_ngcontent-%COMP%] {\n width: 11.75em;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n mat-form-field[_ngcontent-%COMP%] {\n width: 11.75em;\n }\n}\nlabel[_ngcontent-%COMP%] {\n font-weight: 500;\n font-size: 0.8em;\n margin-right: 0.75em;\n}\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n flex-direction: column;\n background-color: #fff;\n border-radius: 4px;\n padding: 1em;\n max-width: calc(100vw - 2em);\n box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12);\n}\n.empty-state[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: #ce1a51;\n}\n.empty-state[_ngcontent-%COMP%] .bold[_ngcontent-%COMP%] {\n font-weight: 400;\n}\n.empty-state[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n height: 6em;\n width: 8em;\n}\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n text-align: center;\n max-width: 24em;\n}\n.info-block[_ngcontent-%COMP%] .icon[_ngcontent-%COMP%] {\n height: 2.5em;\n width: 2.5em;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9jYXRlcmluZy9vcmRlci1kZXRhaWxzL29yZGVyLWRldGFpbHMuY29tcG9uZW50LnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9jYXRlcmluZy9vcmRlci1kZXRhaWxzL29yZGVyLWRldGFpbHMuY29tcG9uZW50LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQTFEQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDNUNBOztzQkFBQTtBQ1hBO0VBQ0ksWUFBQTtBQ3lCSjtBRHRCQTtFQUNJLGFBQUE7RUFDQSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0EsWUFBQTtFQUNBLFdBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7RUFDQSxnQkFBQTtBQ3lCSjtBRHZCSTtFQUNJLGtCQUFBO0VBQ0EsZ0JBQUE7QUN5QlI7QURyQkE7RUFDSSxhQUFBO0VBQ0EsdUJBQUE7RUFDQSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0EsV0FBQTtFQUNBLHNCQUFBO0VEcEJBLGlIQUFBO0VDc0JBLFdBQUE7RUFDQSxpQkFBQTtFQUNBLDZCQUFBO0FDd0JKO0FEckJBO0VBQ0ksa0JBQUE7RUFDQSxPQUFBO0VBQ0EsV0FBQTtFQUNBLGVBQUE7RUFDQSxx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QUNJLGFBQUE7RUFDQSxZQUFBO0FDbUNSIiwiZmlsZSI6ImFwcHMvc3RhZmYvc3JjL2FwcC9ib29raW5nL2NhdGVyaW5nL29yZGVyLWRldGFpbHMvb3JkZXItZGV0YWlscy5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGNvbG9yLWJyYW5kLWVsZWN0cmljLWJsdWU6ICMyMjUxZmY7XG4kY29sb3ItYnJhbmQtZGVlcC1ibHVlOiAjMDUxYzJjO1xuJGNvbG9yLWJyYW5kLWN5YW46ICMwMGE5ZjQ7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kZm9udC1kYXJrOiAjMDAwO1xuJGZvbnQtbGlnaHQ6ICNmZmY7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuJGdyZWVuMTogIzIxOTY1MztcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2xvci1wcmltYXJ5OiAjMTkzN2VhO1xuJGNvbG9yLXByaW1hcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcbiRjb2xvci1wcmltYXJ5LWRhcms6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuXG4kY29sb3Itc2Vjb25kYXJ5OiAjNDI4NUY0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodDogbGlnaHRlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG4kY29sb3Itc2Vjb25kYXJ5LWRhcms6IGRhcmtlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG5cbiRiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuJGZvb3Rlci1iYWNrOiAjMjYzMjM4O1xuJGhlYWRlci1iYWNrOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNTFDMkMsICMwNTFDMkMgNDAlLCAjMEIyNDUzIDYwJSwgIzFGNDBFNiAxMDAlKTtcblxuJGNvbG9yLXRlcm5hcnk6ICMwNTFjMmM7XG5cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuXG4kZm9udC1zdGFjazogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiRoZWFkaW5nLWZvbnQ6IFwiTGFyaXNoTWNLaW5zZXlcIiwgJ0dlb3JnaWEnLCBzZXJpZjtcbiRmb250OiAkZm9udC1zdGFjaztcblxuJGZvbnQtZmFtaWx5LXByaW1hcnk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LXNlY29uZGFyeTogXCJCb3dlclwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiIHNlcmlmO1xuXG4kYmFzZS1zaXplOiAxNnB4O1xuJHRhYmxldC1zaXplOiAxNnB4O1xuJG1vYmlsZS1zaXplOiAxNnB4O1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGJyZWFrLW1vYmlsZTogNDUwcHg7XG4kYnJlYWstdGFibGV0OiA4MDBweDtcbiRicmVhay1sYXB0b3A6IDEwMjRweDtcblxuJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGU6IDgwMHB4O1xuJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQ6IDEwNDhweDtcbiRicmVhay1sYW5kc2NhcGUtbGFwdG9wOiAxMjgwcHg7XG4iLCJAaW1wb3J0ICcuL3ZhcmlhYmxlcyc7XG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuQG1peGluIGJveC1zaGFkb3coJGNvbG9yOiAjMDAwLCAkZGVwdGg6IDEpIHtcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMXB4ICogKCRkZXB0aCAtIDEpIHJnYmEoIzAwMCwgLjIpLFxuICAgICAgICAgICAgICAgIDAgMXB4IDFweCAwIHJnYmEoIzAwMCwgLjE0KSxcbiAgICAgICAgICAgICAgICAwIDJweCAxcHggLTFweCByZ2JhKCMwMDAsIC4xMik7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG5AbWl4aW4gcmVzcG9uZC10bygkbWVkaWEpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gIEBlbHNlIGlmICRtZWRpYSA9PSBsYXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1AZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQGltcG9ydCAndmFyaWFibGVzJztcbkBpbXBvcnQgJ21peGlucyc7XG5cbjpob3N0IHtcbiAgICBoZWlnaHQ6IDEwMCU7XG59XG5cbi5vcmRlci1kZXRhaWxzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luOiBhdXRvO1xuICAgIG1heC13aWR0aDogMTAwdnc7XG4gICAgbWluLWhlaWdodDogNjV2aDtcblxuICAgICYuY29tcGFjdCB7XG4gICAgICAgIGZvbnQtc2l6ZTogLjc1cmVtO1xuICAgICAgICBtaW4taGVpZ2h0OiAxNmVtO1xuICAgIH1cbn1cblxuLmhlYWRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgICBAaW5jbHVkZSBib3gtc2hhZG93O1xuICAgIHotaW5kZXg6IDk5O1xuICAgIHBhZGRpbmctdG9wOiAxMHB4O1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjRThFOEU4O1xufVxuXG4uYm9keSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGZsZXg6IDE7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWluLWhlaWdodDogNTAlO1xuICAgIG92ZXJmbG93OiBoaWRkZW4gYXV0bztcbiAgICBtYXJnaW4tYm90dG9tOiAyMDBweDtcbn1cblxuLnNlYXJjaCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbjogLjVlbTtcblxuICAgICYubWluIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDE4ZW07XG4gICAgfVxufVxuXG4ubWluIHtcbiAgICAuc2VhcmNoLWlucHV0IHtcbiAgICAgICAgYm90dG9tOiBhdXRvO1xuICAgICAgICByaWdodDogYXV0bztcbiAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC0xMDAlLCAtNTAlKTtcblxuICAgICAgICAuaW5wdXQge1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IG5vbmU7XG4gICAgICAgICAgICBmb250LXNpemU6IDFlbTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLnNlYXJjaC1pbnB1dCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvdHRvbTogLTZweDtcbiAgICByaWdodDogLTFlbTtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXM7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgJi5zaG93IHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG5cbiAgICAuaW5wdXQge1xuICAgICAgICBtYXJnaW46IDAgMWVtIDFlbTtcbiAgICAgICAgcGFkZGluZzogMCAuNWVtO1xuICAgICAgICBoZWlnaHQ6IDMuNWVtO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwIDAgNHB4IDRweDtcbiAgICAgICAgQGluY2x1ZGUgYm94LXNoYWRvdygpO1xuICAgICAgICBmb250LXNpemU6IC44ZW07XG4gICAgfVxufVxuXG4uaXRlbSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHdpZHRoOiA2NDBweDtcbiAgICBtYXJnaW46IC41ZW0gYXV0bztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAxZW0pO1xuICAgIHotaW5kZXg6IDA7XG59XG5cbi5pcy1zZWFyY2gge1xuICAgIHBhZGRpbmctdG9wOiAyZW07XG59XG5cbi5mb290ZXIge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2NjYztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3c7XG5cbiAgICBidXR0b24ge1xuICAgICAgICBtaW4td2lkdGg6IDhlbTtcbiAgICAgICAgbWFyZ2luOi41ZW07XG4gICAgfVxufVxuXG5mb3JtIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5maWVsZCB7XG4gICAgbWFyZ2luOiAwIC41ZW07XG4gICAgbWF4LWhlaWdodDogMy41ZW07XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICBkaXYge1xuICAgICAgICBwYWRkaW5nOiAxNHB4IDE1cHggMCAwO1xuICAgIH1cbiAgICBkaXYsIC5tYXQtZm9ybS1maWVsZCB7XG4gICAgICAgIHdpZHRoOiBmaXQtY29udGVudDtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgICAgICAgd2lkdGg6IDExMHB4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQGluY2x1ZGUgcmVzcG9uZC10byhtb2JpbGUpIHtcbiAgICAgICAgbWF4LWhlaWdodDogNC43NWVtO1xuICAgICAgICAuY2F0X2ZpZWxkX2xhYmVsIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHRvcDogLTE4cHg7XG4gICAgICAgICAgICBsZWZ0OiAxMHB4O1xuICAgICAgICB9XG4gICAgICAgIC5tYXQtZm9ybS1maWVsZCB7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4uY29udGVudHMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIG1heC13aWR0aDogNzY4cHg7XG4gICAgbWFyZ2luOiBhdXRvO1xufVxuXG4uY2F0ZWdvcnkge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICBoZWlnaHQ6IDEwZW07XG4gICAgd2lkdGg6IDEwZW07XG4gICAgbWFyZ2luOiAxZW07XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIGZvbnQtc2l6ZTogMWVtO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAyMDBtcztcblxuICAgICY6aG92ZXIge1xuICAgICAgICBAaW5jbHVkZSBib3gtc2hhZG93O1xuICAgIH1cblxuICAgIC5vdmVybGF5IHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoIzAwMCwgLjM1KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIH1cblxuICAgIC5uYW1lIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgICAgei1pbmRleDogOTk7XG4gICAgICAgIG1heC13aWR0aDogOWVtO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4yNWVtO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgfVxufVxuXG5tYXQtZm9ybS1maWVsZCB7XG4gICAgQGluY2x1ZGUgcmVzcG9uZC10byhtb2JpbGUpIHtcbiAgICAgICAgd2lkdGg6IDExLjc1ZW07XG4gICAgfVxufVxuXG5sYWJlbCB7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBmb250LXNpemU6IC44ZW07XG4gICAgbWFyZ2luLXJpZ2h0OiAuNzVlbTtcbn1cblxuLmVtcHR5LXN0YXRlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBwYWRkaW5nOiAxZW07XG4gICAgbWF4LXdpZHRoOiBjYWxjKDEwMHZ3IC0gMmVtKTtcbiAgICBAaW5jbHVkZSBib3gtc2hhZG93O1xuXG4gICAgc3BhbiB7XG4gICAgICAgIGNvbG9yOiAjY2UxYTUxO1xuICAgIH1cblxuICAgIC5ib2xkIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICB9XG5cbiAgICBpbWcge1xuICAgICAgICBoZWlnaHQ6IDZlbTtcbiAgICAgICAgd2lkdGg6IDhlbTtcbiAgICB9XG5cbiAgICBwIHtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICBtYXgtd2lkdGg6IDI0ZW07XG4gICAgfVxufVxuXG4uaW5mby1ibG9jayB7XG4gICAgLmljb24ge1xuICAgICAgICBoZWlnaHQ6IDIuNWVtO1xuICAgICAgICB3aWR0aDogMi41ZW07XG4gICAgfVxufVxuIiwiLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46aG9zdCB7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuLm9yZGVyLWRldGFpbHMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW46IGF1dG87XG4gIG1heC13aWR0aDogMTAwdnc7XG4gIG1pbi1oZWlnaHQ6IDY1dmg7XG59XG4ub3JkZXItZGV0YWlscy5jb21wYWN0IHtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBtaW4taGVpZ2h0OiAxNmVtO1xufVxuXG4uaGVhZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3gtc2hhZG93OiAwIDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMCAxcHggMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwgMCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtcbiAgei1pbmRleDogOTk7XG4gIHBhZGRpbmctdG9wOiAxMHB4O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI0U4RThFODtcbn1cblxuLmJvZHkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsZXg6IDE7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiA1MCU7XG4gIG92ZXJmbG93OiBoaWRkZW4gYXV0bztcbiAgbWFyZ2luLWJvdHRvbTogMjAwcHg7XG59XG5cbi5zZWFyY2gge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbjogMC41ZW07XG59XG4uc2VhcmNoLm1pbiB7XG4gIG1hcmdpbi1sZWZ0OiAxOGVtO1xufVxuXG4ubWluIC5zZWFyY2gtaW5wdXQge1xuICBib3R0b206IGF1dG87XG4gIHJpZ2h0OiBhdXRvO1xuICB0b3A6IDUwJTtcbiAgbGVmdDogMDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTEwMCUsIC01MCUpO1xufVxuLm1pbiAuc2VhcmNoLWlucHV0IC5pbnB1dCB7XG4gIG1hcmdpbjogMDtcbiAgYm94LXNoYWRvdzogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogbm9uZTtcbiAgZm9udC1zaXplOiAxZW07XG59XG5cbi5zZWFyY2gtaW5wdXQge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogLTZweDtcbiAgcmlnaHQ6IC0xZW07XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXM7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5zZWFyY2gtaW5wdXQuc2hvdyB7XG4gIG9wYWNpdHk6IDE7XG59XG4uc2VhcmNoLWlucHV0IC5pbnB1dCB7XG4gIG1hcmdpbjogMCAxZW0gMWVtO1xuICBwYWRkaW5nOiAwIDAuNWVtO1xuICBoZWlnaHQ6IDMuNWVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXItcmFkaXVzOiAwIDAgNHB4IDRweDtcbiAgYm94LXNoYWRvdzogMCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDAgMXB4IDFweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4xMik7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG59XG5cbi5pdGVtIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogNjQwcHg7XG4gIG1hcmdpbjogMC41ZW0gYXV0bztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NjYztcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDFlbSk7XG4gIHotaW5kZXg6IDA7XG59XG5cbi5pcy1zZWFyY2gge1xuICBwYWRkaW5nLXRvcDogMmVtO1xufVxuXG4uZm9vdGVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNjY2M7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJveC1zaGFkb3c6IDAgMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwIDFweCAxcHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xufVxuLmZvb3RlciBidXR0b24ge1xuICBtaW4td2lkdGg6IDhlbTtcbiAgbWFyZ2luOiAwLjVlbTtcbn1cblxuZm9ybSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5maWVsZCB7XG4gIG1hcmdpbjogMCAwLjVlbTtcbiAgbWF4LWhlaWdodDogMy41ZW07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5maWVsZCBkaXYge1xuICBwYWRkaW5nOiAxNHB4IDE1cHggMCAwO1xufVxuLmZpZWxkIGRpdiwgLmZpZWxkIC5tYXQtZm9ybS1maWVsZCB7XG4gIHdpZHRoOiBmaXQtY29udGVudDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmZpZWxkIGRpdiwgLmZpZWxkIC5tYXQtZm9ybS1maWVsZCB7XG4gICAgd2lkdGg6IDExMHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmZpZWxkIGRpdiwgLmZpZWxkIC5tYXQtZm9ybS1maWVsZCB7XG4gICAgd2lkdGg6IDExMHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuZmllbGQge1xuICAgIG1heC1oZWlnaHQ6IDQuNzVlbTtcbiAgfVxuICAuZmllbGQgLmNhdF9maWVsZF9sYWJlbCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogLTE4cHg7XG4gICAgbGVmdDogMTBweDtcbiAgfVxuICAuZmllbGQgLm1hdC1mb3JtLWZpZWxkIHtcbiAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmZpZWxkIHtcbiAgICBtYXgtaGVpZ2h0OiA0Ljc1ZW07XG4gIH1cbiAgLmZpZWxkIC5jYXRfZmllbGRfbGFiZWwge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IC0xOHB4O1xuICAgIGxlZnQ6IDEwcHg7XG4gIH1cbiAgLmZpZWxkIC5tYXQtZm9ybS1maWVsZCB7XG4gICAgbWFyZ2luLXRvcDogMTJweDtcbiAgfVxufVxuXG4uY29udGVudHMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBtYXgtd2lkdGg6IDc2OHB4O1xuICBtYXJnaW46IGF1dG87XG59XG5cbi5jYXRlZ29yeSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICBoZWlnaHQ6IDEwZW07XG4gIHdpZHRoOiAxMGVtO1xuICBtYXJnaW46IDFlbTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBmb250LXNpemU6IDFlbTtcbiAgYm9yZGVyOiBub25lO1xuICBwYWRkaW5nOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDIwMG1zO1xufVxuLmNhdGVnb3J5OmhvdmVyIHtcbiAgYm94LXNoYWRvdzogMCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDAgMXB4IDFweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4xMik7XG59XG4uY2F0ZWdvcnkgLm92ZXJsYXkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjM1KTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuLmNhdGVnb3J5IC5uYW1lIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDUwJTtcbiAgbGVmdDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgei1pbmRleDogOTk7XG4gIG1heC13aWR0aDogOWVtO1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogMS4yNWVtO1xuICBtYXJnaW46IDA7XG59XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIG1hdC1mb3JtLWZpZWxkIHtcbiAgICB3aWR0aDogMTEuNzVlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIG1hdC1mb3JtLWZpZWxkIHtcbiAgICB3aWR0aDogMTEuNzVlbTtcbiAgfVxufVxuXG5sYWJlbCB7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG4gIG1hcmdpbi1yaWdodDogMC43NWVtO1xufVxuXG4uZW1wdHktc3RhdGUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIHBhZGRpbmc6IDFlbTtcbiAgbWF4LXdpZHRoOiBjYWxjKDEwMHZ3IC0gMmVtKTtcbiAgYm94LXNoYWRvdzogMCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDAgMXB4IDFweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4xMik7XG59XG4uZW1wdHktc3RhdGUgc3BhbiB7XG4gIGNvbG9yOiAjY2UxYTUxO1xufVxuLmVtcHR5LXN0YXRlIC5ib2xkIHtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbi5lbXB0eS1zdGF0ZSBpbWcge1xuICBoZWlnaHQ6IDZlbTtcbiAgd2lkdGg6IDhlbTtcbn1cbi5lbXB0eS1zdGF0ZSBwIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXgtd2lkdGg6IDI0ZW07XG59XG5cbi5pbmZvLWJsb2NrIC5pY29uIHtcbiAgaGVpZ2h0OiAyLjVlbTtcbiAgd2lkdGg6IDIuNWVtO1xufSJdfQ== */"] }); + } }, directives: [i3.NgIf, i4.MatButton, i5.ɵangular_packages_forms_forms_y, i5.NgControlStatusGroup, i5.FormGroupDirective, i6.IconComponent, i7.MatFormField, i8.MatInput, i5.DefaultValueAccessor, i5.NgControlStatus, i5.NgModel, i9.MatSelect, i5.FormControlName, i3.NgForOf, i10.MatOption, i11.CateringMenuItemComponent, i12.MatSpinner, i13.CateringMenuCategoryComponent], pipes: [i3.AsyncPipe, i14.SafePipe], styles: ["[_nghost-%COMP%] {\n height: 100%;\n}\n.order-details[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n flex-direction: column;\n height: 100%;\n width: 100%;\n margin: auto;\n max-width: 100vw;\n min-height: 63vh;\n}\n.order-details.compact[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n min-height: 16em;\n}\n.header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n width: 100%;\n background-color: #fff;\n box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12);\n z-index: 99;\n padding-top: 10px;\n border-top: 1px solid #E8E8E8;\n}\n.body[_ngcontent-%COMP%] {\n position: relative;\n flex: 1;\n width: 100%;\n min-height: 50%;\n overflow: hidden auto;\n margin-bottom: 200px;\n}\n.search[_ngcontent-%COMP%] {\n position: relative;\n margin: 0.5em;\n}\n.search.min[_ngcontent-%COMP%] {\n margin-left: 18em;\n}\n.min[_ngcontent-%COMP%] .search-input[_ngcontent-%COMP%] {\n bottom: auto;\n right: auto;\n top: 50%;\n left: 0;\n transform: translate(-100%, -50%);\n}\n.min[_ngcontent-%COMP%] .search-input[_ngcontent-%COMP%] .input[_ngcontent-%COMP%] {\n margin: 0;\n box-shadow: none;\n background-color: none;\n font-size: 1em;\n}\n.search-input[_ngcontent-%COMP%] {\n position: absolute;\n bottom: -6px;\n right: -1em;\n opacity: 0;\n transition: opacity 200ms;\n transform: translateY(100%);\n overflow: hidden;\n}\n.search-input.show[_ngcontent-%COMP%] {\n opacity: 1;\n}\n.search-input[_ngcontent-%COMP%] .input[_ngcontent-%COMP%] {\n margin: 0 1em 1em;\n padding: 0 0.5em;\n height: 3.5em;\n background-color: #fff;\n border-radius: 0 0 4px 4px;\n box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12);\n font-size: 0.8em;\n}\n.item[_ngcontent-%COMP%] {\n position: relative;\n width: 640px;\n margin: 0.5em auto;\n background-color: #fff;\n border: 1px solid #ccc;\n border-radius: 4px;\n overflow: hidden;\n max-width: calc(100% - 1em);\n z-index: 0;\n}\n.is-search[_ngcontent-%COMP%] {\n padding-top: 2em;\n}\n.footer[_ngcontent-%COMP%] {\n width: 100%;\n text-align: center;\n border-top: 1px solid #ccc;\n background-color: #fff;\n box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12);\n}\n.footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n min-width: 8em;\n margin: 0.5em;\n}\nform[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n}\n.field[_ngcontent-%COMP%] {\n margin: 0 0.5em;\n max-height: 3.5em;\n display: flex;\n position: relative;\n}\n.field[_ngcontent-%COMP%] div[_ngcontent-%COMP%] {\n padding: 14px 15px 0 0;\n}\n.field[_ngcontent-%COMP%] div[_ngcontent-%COMP%], .field[_ngcontent-%COMP%] .mat-form-field[_ngcontent-%COMP%] {\n width: -webkit-fit-content;\n width: -moz-fit-content;\n width: fit-content;\n display: inline-block;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .field[_ngcontent-%COMP%] div[_ngcontent-%COMP%], .field[_ngcontent-%COMP%] .mat-form-field[_ngcontent-%COMP%] {\n width: 110px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .field[_ngcontent-%COMP%] div[_ngcontent-%COMP%], .field[_ngcontent-%COMP%] .mat-form-field[_ngcontent-%COMP%] {\n width: 110px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .field[_ngcontent-%COMP%] {\n max-height: 4.75em;\n }\n .field[_ngcontent-%COMP%] .cat_field_label[_ngcontent-%COMP%] {\n position: absolute;\n top: -18px;\n left: 10px;\n }\n .field[_ngcontent-%COMP%] .mat-form-field[_ngcontent-%COMP%] {\n margin-top: 12px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .field[_ngcontent-%COMP%] {\n max-height: 4.75em;\n }\n .field[_ngcontent-%COMP%] .cat_field_label[_ngcontent-%COMP%] {\n position: absolute;\n top: -18px;\n left: 10px;\n }\n .field[_ngcontent-%COMP%] .mat-form-field[_ngcontent-%COMP%] {\n margin-top: 12px;\n }\n}\n.contents[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n max-width: 768px;\n margin: auto;\n}\n.category[_ngcontent-%COMP%] {\n position: relative;\n background-position: center;\n background-size: cover;\n height: 10em;\n width: 10em;\n margin: 1em;\n border-radius: 4px;\n font-size: 1em;\n border: none;\n padding: 0;\n background-color: #fff;\n transition: box-shadow 200ms;\n}\n.category[_ngcontent-%COMP%]:hover {\n box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12);\n}\n.category[_ngcontent-%COMP%] .overlay[_ngcontent-%COMP%] {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.35);\n border-radius: 4px;\n}\n.category[_ngcontent-%COMP%] .name[_ngcontent-%COMP%] {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: 99;\n max-width: 9em;\n white-space: normal;\n line-height: 1.25em;\n margin: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n mat-form-field[_ngcontent-%COMP%] {\n width: 11.75em;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n mat-form-field[_ngcontent-%COMP%] {\n width: 11.75em;\n }\n}\nlabel[_ngcontent-%COMP%] {\n font-weight: 500;\n font-size: 0.8em;\n margin-right: 0.75em;\n}\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n flex-direction: column;\n background-color: #fff;\n border-radius: 4px;\n padding: 1em;\n max-width: calc(100vw - 2em);\n box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12);\n}\n.empty-state[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: #ce1a51;\n}\n.empty-state[_ngcontent-%COMP%] .bold[_ngcontent-%COMP%] {\n font-weight: 400;\n}\n.empty-state[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n height: 6em;\n width: 8em;\n}\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n text-align: center;\n max-width: 24em;\n}\n.info-block[_ngcontent-%COMP%] .icon[_ngcontent-%COMP%] {\n height: 2.5em;\n width: 2.5em;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9jYXRlcmluZy9vcmRlci1kZXRhaWxzL29yZGVyLWRldGFpbHMuY29tcG9uZW50LnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9jYXRlcmluZy9vcmRlci1kZXRhaWxzL29yZGVyLWRldGFpbHMuY29tcG9uZW50LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQTFEQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDNUNBOztzQkFBQTtBQ1hBO0VBQ0ksWUFBQTtBQ3lCSjtBRHRCQTtFQUNJLGFBQUE7RUFDQSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0EsWUFBQTtFQUNBLFdBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7RUFDQSxnQkFBQTtBQ3lCSjtBRHZCSTtFQUNJLGtCQUFBO0VBQ0EsZ0JBQUE7QUN5QlI7QURyQkE7RUFDSSxhQUFBO0VBQ0EsdUJBQUE7RUFDQSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0EsV0FBQTtFQUNBLHNCQUFBO0VEcEJBLGlIQUFBO0VDc0JBLFdBQUE7RUFDQSxpQkFBQTtFQUNBLDZCQUFBO0FDd0JKO0FEckJBO0VBQ0ksa0JBQUE7RUFDQSxPQUFBO0VBQ0EsV0FBQTtFQUNBLGVBQUE7RUFDQSxx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QUNJLGFBQUE7RUFDQSxZQUFBO0FDbUNSIiwiZmlsZSI6ImFwcHMvc3RhZmYvc3JjL2FwcC9ib29raW5nL2NhdGVyaW5nL29yZGVyLWRldGFpbHMvb3JkZXItZGV0YWlscy5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGNvbG9yLWJyYW5kLWVsZWN0cmljLWJsdWU6ICMyMjUxZmY7XG4kY29sb3ItYnJhbmQtZGVlcC1ibHVlOiAjMDUxYzJjO1xuJGNvbG9yLWJyYW5kLWN5YW46ICMwMGE5ZjQ7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kZm9udC1kYXJrOiAjMDAwO1xuJGZvbnQtbGlnaHQ6ICNmZmY7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuJGdyZWVuMTogIzIxOTY1MztcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2xvci1wcmltYXJ5OiAjMTkzN2VhO1xuJGNvbG9yLXByaW1hcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcbiRjb2xvci1wcmltYXJ5LWRhcms6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuXG4kY29sb3Itc2Vjb25kYXJ5OiAjNDI4NUY0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodDogbGlnaHRlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG4kY29sb3Itc2Vjb25kYXJ5LWRhcms6IGRhcmtlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG5cbiRiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuJGZvb3Rlci1iYWNrOiAjMjYzMjM4O1xuJGhlYWRlci1iYWNrOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNTFDMkMsICMwNTFDMkMgNDAlLCAjMEIyNDUzIDYwJSwgIzFGNDBFNiAxMDAlKTtcblxuJGNvbG9yLXRlcm5hcnk6ICMwNTFjMmM7XG5cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuXG4kZm9udC1zdGFjazogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiRoZWFkaW5nLWZvbnQ6IFwiTGFyaXNoTWNLaW5zZXlcIiwgJ0dlb3JnaWEnLCBzZXJpZjtcbiRmb250OiAkZm9udC1zdGFjaztcblxuJGZvbnQtZmFtaWx5LXByaW1hcnk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LXNlY29uZGFyeTogXCJCb3dlclwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiIHNlcmlmO1xuXG4kYmFzZS1zaXplOiAxNnB4O1xuJHRhYmxldC1zaXplOiAxNnB4O1xuJG1vYmlsZS1zaXplOiAxNnB4O1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGJyZWFrLW1vYmlsZTogNDUwcHg7XG4kYnJlYWstdGFibGV0OiA4MDBweDtcbiRicmVhay1sYXB0b3A6IDEwMjRweDtcblxuJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGU6IDgwMHB4O1xuJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQ6IDEwNDhweDtcbiRicmVhay1sYW5kc2NhcGUtbGFwdG9wOiAxMjgwcHg7XG4iLCJAaW1wb3J0ICcuL3ZhcmlhYmxlcyc7XG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuQG1peGluIGJveC1zaGFkb3coJGNvbG9yOiAjMDAwLCAkZGVwdGg6IDEpIHtcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMXB4ICogKCRkZXB0aCAtIDEpIHJnYmEoIzAwMCwgLjIpLFxuICAgICAgICAgICAgICAgIDAgMXB4IDFweCAwIHJnYmEoIzAwMCwgLjE0KSxcbiAgICAgICAgICAgICAgICAwIDJweCAxcHggLTFweCByZ2JhKCMwMDAsIC4xMik7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG5AbWl4aW4gcmVzcG9uZC10bygkbWVkaWEpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gIEBlbHNlIGlmICRtZWRpYSA9PSBsYXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1AZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQGltcG9ydCAndmFyaWFibGVzJztcbkBpbXBvcnQgJ21peGlucyc7XG5cbjpob3N0IHtcbiAgICBoZWlnaHQ6IDEwMCU7XG59XG5cbi5vcmRlci1kZXRhaWxzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luOiBhdXRvO1xuICAgIG1heC13aWR0aDogMTAwdnc7XG4gICAgbWluLWhlaWdodDogNjN2aDtcblxuICAgICYuY29tcGFjdCB7XG4gICAgICAgIGZvbnQtc2l6ZTogLjc1cmVtO1xuICAgICAgICBtaW4taGVpZ2h0OiAxNmVtO1xuICAgIH1cbn1cblxuLmhlYWRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgICBAaW5jbHVkZSBib3gtc2hhZG93O1xuICAgIHotaW5kZXg6IDk5O1xuICAgIHBhZGRpbmctdG9wOiAxMHB4O1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjRThFOEU4O1xufVxuXG4uYm9keSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGZsZXg6IDE7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWluLWhlaWdodDogNTAlO1xuICAgIG92ZXJmbG93OiBoaWRkZW4gYXV0bztcbiAgICBtYXJnaW4tYm90dG9tOiAyMDBweDtcbn1cblxuLnNlYXJjaCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbjogLjVlbTtcblxuICAgICYubWluIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDE4ZW07XG4gICAgfVxufVxuXG4ubWluIHtcbiAgICAuc2VhcmNoLWlucHV0IHtcbiAgICAgICAgYm90dG9tOiBhdXRvO1xuICAgICAgICByaWdodDogYXV0bztcbiAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC0xMDAlLCAtNTAlKTtcblxuICAgICAgICAuaW5wdXQge1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IG5vbmU7XG4gICAgICAgICAgICBmb250LXNpemU6IDFlbTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLnNlYXJjaC1pbnB1dCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvdHRvbTogLTZweDtcbiAgICByaWdodDogLTFlbTtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXM7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgJi5zaG93IHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG5cbiAgICAuaW5wdXQge1xuICAgICAgICBtYXJnaW46IDAgMWVtIDFlbTtcbiAgICAgICAgcGFkZGluZzogMCAuNWVtO1xuICAgICAgICBoZWlnaHQ6IDMuNWVtO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwIDAgNHB4IDRweDtcbiAgICAgICAgQGluY2x1ZGUgYm94LXNoYWRvdygpO1xuICAgICAgICBmb250LXNpemU6IC44ZW07XG4gICAgfVxufVxuXG4uaXRlbSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHdpZHRoOiA2NDBweDtcbiAgICBtYXJnaW46IC41ZW0gYXV0bztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAxZW0pO1xuICAgIHotaW5kZXg6IDA7XG59XG5cbi5pcy1zZWFyY2gge1xuICAgIHBhZGRpbmctdG9wOiAyZW07XG59XG5cbi5mb290ZXIge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2NjYztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3c7XG5cbiAgICBidXR0b24ge1xuICAgICAgICBtaW4td2lkdGg6IDhlbTtcbiAgICAgICAgbWFyZ2luOi41ZW07XG4gICAgfVxufVxuXG5mb3JtIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5maWVsZCB7XG4gICAgbWFyZ2luOiAwIC41ZW07XG4gICAgbWF4LWhlaWdodDogMy41ZW07XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICBkaXYge1xuICAgICAgICBwYWRkaW5nOiAxNHB4IDE1cHggMCAwO1xuICAgIH1cbiAgICBkaXYsIC5tYXQtZm9ybS1maWVsZCB7XG4gICAgICAgIHdpZHRoOiBmaXQtY29udGVudDtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgICAgICAgd2lkdGg6IDExMHB4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQGluY2x1ZGUgcmVzcG9uZC10byhtb2JpbGUpIHtcbiAgICAgICAgbWF4LWhlaWdodDogNC43NWVtO1xuICAgICAgICAuY2F0X2ZpZWxkX2xhYmVsIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHRvcDogLTE4cHg7XG4gICAgICAgICAgICBsZWZ0OiAxMHB4O1xuICAgICAgICB9XG4gICAgICAgIC5tYXQtZm9ybS1maWVsZCB7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4uY29udGVudHMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIG1heC13aWR0aDogNzY4cHg7XG4gICAgbWFyZ2luOiBhdXRvO1xufVxuXG4uY2F0ZWdvcnkge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICBoZWlnaHQ6IDEwZW07XG4gICAgd2lkdGg6IDEwZW07XG4gICAgbWFyZ2luOiAxZW07XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIGZvbnQtc2l6ZTogMWVtO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAyMDBtcztcblxuICAgICY6aG92ZXIge1xuICAgICAgICBAaW5jbHVkZSBib3gtc2hhZG93O1xuICAgIH1cblxuICAgIC5vdmVybGF5IHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoIzAwMCwgLjM1KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIH1cblxuICAgIC5uYW1lIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgICAgei1pbmRleDogOTk7XG4gICAgICAgIG1heC13aWR0aDogOWVtO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4yNWVtO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgfVxufVxuXG5tYXQtZm9ybS1maWVsZCB7XG4gICAgQGluY2x1ZGUgcmVzcG9uZC10byhtb2JpbGUpIHtcbiAgICAgICAgd2lkdGg6IDExLjc1ZW07XG4gICAgfVxufVxuXG5sYWJlbCB7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBmb250LXNpemU6IC44ZW07XG4gICAgbWFyZ2luLXJpZ2h0OiAuNzVlbTtcbn1cblxuLmVtcHR5LXN0YXRlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBwYWRkaW5nOiAxZW07XG4gICAgbWF4LXdpZHRoOiBjYWxjKDEwMHZ3IC0gMmVtKTtcbiAgICBAaW5jbHVkZSBib3gtc2hhZG93O1xuXG4gICAgc3BhbiB7XG4gICAgICAgIGNvbG9yOiAjY2UxYTUxO1xuICAgIH1cblxuICAgIC5ib2xkIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICB9XG5cbiAgICBpbWcge1xuICAgICAgICBoZWlnaHQ6IDZlbTtcbiAgICAgICAgd2lkdGg6IDhlbTtcbiAgICB9XG5cbiAgICBwIHtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICBtYXgtd2lkdGg6IDI0ZW07XG4gICAgfVxufVxuXG4uaW5mby1ibG9jayB7XG4gICAgLmljb24ge1xuICAgICAgICBoZWlnaHQ6IDIuNWVtO1xuICAgICAgICB3aWR0aDogMi41ZW07XG4gICAgfVxufVxuIiwiLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46aG9zdCB7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuLm9yZGVyLWRldGFpbHMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW46IGF1dG87XG4gIG1heC13aWR0aDogMTAwdnc7XG4gIG1pbi1oZWlnaHQ6IDYzdmg7XG59XG4ub3JkZXItZGV0YWlscy5jb21wYWN0IHtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBtaW4taGVpZ2h0OiAxNmVtO1xufVxuXG4uaGVhZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3gtc2hhZG93OiAwIDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMCAxcHggMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwgMCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtcbiAgei1pbmRleDogOTk7XG4gIHBhZGRpbmctdG9wOiAxMHB4O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI0U4RThFODtcbn1cblxuLmJvZHkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsZXg6IDE7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiA1MCU7XG4gIG92ZXJmbG93OiBoaWRkZW4gYXV0bztcbiAgbWFyZ2luLWJvdHRvbTogMjAwcHg7XG59XG5cbi5zZWFyY2gge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbjogMC41ZW07XG59XG4uc2VhcmNoLm1pbiB7XG4gIG1hcmdpbi1sZWZ0OiAxOGVtO1xufVxuXG4ubWluIC5zZWFyY2gtaW5wdXQge1xuICBib3R0b206IGF1dG87XG4gIHJpZ2h0OiBhdXRvO1xuICB0b3A6IDUwJTtcbiAgbGVmdDogMDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTEwMCUsIC01MCUpO1xufVxuLm1pbiAuc2VhcmNoLWlucHV0IC5pbnB1dCB7XG4gIG1hcmdpbjogMDtcbiAgYm94LXNoYWRvdzogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogbm9uZTtcbiAgZm9udC1zaXplOiAxZW07XG59XG5cbi5zZWFyY2gtaW5wdXQge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogLTZweDtcbiAgcmlnaHQ6IC0xZW07XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXM7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5zZWFyY2gtaW5wdXQuc2hvdyB7XG4gIG9wYWNpdHk6IDE7XG59XG4uc2VhcmNoLWlucHV0IC5pbnB1dCB7XG4gIG1hcmdpbjogMCAxZW0gMWVtO1xuICBwYWRkaW5nOiAwIDAuNWVtO1xuICBoZWlnaHQ6IDMuNWVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXItcmFkaXVzOiAwIDAgNHB4IDRweDtcbiAgYm94LXNoYWRvdzogMCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDAgMXB4IDFweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4xMik7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG59XG5cbi5pdGVtIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogNjQwcHg7XG4gIG1hcmdpbjogMC41ZW0gYXV0bztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NjYztcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDFlbSk7XG4gIHotaW5kZXg6IDA7XG59XG5cbi5pcy1zZWFyY2gge1xuICBwYWRkaW5nLXRvcDogMmVtO1xufVxuXG4uZm9vdGVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNjY2M7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJveC1zaGFkb3c6IDAgMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwIDFweCAxcHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xufVxuLmZvb3RlciBidXR0b24ge1xuICBtaW4td2lkdGg6IDhlbTtcbiAgbWFyZ2luOiAwLjVlbTtcbn1cblxuZm9ybSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5maWVsZCB7XG4gIG1hcmdpbjogMCAwLjVlbTtcbiAgbWF4LWhlaWdodDogMy41ZW07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5maWVsZCBkaXYge1xuICBwYWRkaW5nOiAxNHB4IDE1cHggMCAwO1xufVxuLmZpZWxkIGRpdiwgLmZpZWxkIC5tYXQtZm9ybS1maWVsZCB7XG4gIHdpZHRoOiBmaXQtY29udGVudDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmZpZWxkIGRpdiwgLmZpZWxkIC5tYXQtZm9ybS1maWVsZCB7XG4gICAgd2lkdGg6IDExMHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmZpZWxkIGRpdiwgLmZpZWxkIC5tYXQtZm9ybS1maWVsZCB7XG4gICAgd2lkdGg6IDExMHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuZmllbGQge1xuICAgIG1heC1oZWlnaHQ6IDQuNzVlbTtcbiAgfVxuICAuZmllbGQgLmNhdF9maWVsZF9sYWJlbCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogLTE4cHg7XG4gICAgbGVmdDogMTBweDtcbiAgfVxuICAuZmllbGQgLm1hdC1mb3JtLWZpZWxkIHtcbiAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmZpZWxkIHtcbiAgICBtYXgtaGVpZ2h0OiA0Ljc1ZW07XG4gIH1cbiAgLmZpZWxkIC5jYXRfZmllbGRfbGFiZWwge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IC0xOHB4O1xuICAgIGxlZnQ6IDEwcHg7XG4gIH1cbiAgLmZpZWxkIC5tYXQtZm9ybS1maWVsZCB7XG4gICAgbWFyZ2luLXRvcDogMTJweDtcbiAgfVxufVxuXG4uY29udGVudHMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBtYXgtd2lkdGg6IDc2OHB4O1xuICBtYXJnaW46IGF1dG87XG59XG5cbi5jYXRlZ29yeSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICBoZWlnaHQ6IDEwZW07XG4gIHdpZHRoOiAxMGVtO1xuICBtYXJnaW46IDFlbTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBmb250LXNpemU6IDFlbTtcbiAgYm9yZGVyOiBub25lO1xuICBwYWRkaW5nOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDIwMG1zO1xufVxuLmNhdGVnb3J5OmhvdmVyIHtcbiAgYm94LXNoYWRvdzogMCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDAgMXB4IDFweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4xMik7XG59XG4uY2F0ZWdvcnkgLm92ZXJsYXkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjM1KTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuLmNhdGVnb3J5IC5uYW1lIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDUwJTtcbiAgbGVmdDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgei1pbmRleDogOTk7XG4gIG1heC13aWR0aDogOWVtO1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogMS4yNWVtO1xuICBtYXJnaW46IDA7XG59XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIG1hdC1mb3JtLWZpZWxkIHtcbiAgICB3aWR0aDogMTEuNzVlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIG1hdC1mb3JtLWZpZWxkIHtcbiAgICB3aWR0aDogMTEuNzVlbTtcbiAgfVxufVxuXG5sYWJlbCB7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG4gIG1hcmdpbi1yaWdodDogMC43NWVtO1xufVxuXG4uZW1wdHktc3RhdGUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIHBhZGRpbmc6IDFlbTtcbiAgbWF4LXdpZHRoOiBjYWxjKDEwMHZ3IC0gMmVtKTtcbiAgYm94LXNoYWRvdzogMCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDAgMXB4IDFweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4xMik7XG59XG4uZW1wdHktc3RhdGUgc3BhbiB7XG4gIGNvbG9yOiAjY2UxYTUxO1xufVxuLmVtcHR5LXN0YXRlIC5ib2xkIHtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbi5lbXB0eS1zdGF0ZSBpbWcge1xuICBoZWlnaHQ6IDZlbTtcbiAgd2lkdGg6IDhlbTtcbn1cbi5lbXB0eS1zdGF0ZSBwIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXgtd2lkdGg6IDI0ZW07XG59XG5cbi5pbmZvLWJsb2NrIC5pY29uIHtcbiAgaGVpZ2h0OiAyLjVlbTtcbiAgd2lkdGg6IDIuNWVtO1xufSJdfQ== */"] }); /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(BookingCateringOrderDetailsComponent, [{ type: core_1.Component, args: [{ @@ -35899,6 +36211,8 @@ BookingCateringOrderDetailsComponent.ɵcmp = i0.ɵɵdefineComponent({ type: Book type: core_1.Input }], event: [{ type: core_1.Output + }], placeIntoModal: [{ + type: core_1.Input }], _input_el: [{ type: core_1.ViewChild, args: ['input'] @@ -36209,6 +36523,11 @@ class BookingCateringOrderListComponent { this.event = new core_1.EventEmitter(); /** Emiiter for order events */ this.order = new core_1.EventEmitter(); + /** + * placeIntoModal: Input decorator indecate as a flag to adapt component design into a dialog modal + * (by hiding header and adjusting height so that fit into a modal) + */ + this.placeIntoModal = false; this.delete = false; } /** List of orders in the booking */ @@ -36261,7 +36580,7 @@ class BookingCateringOrderListComponent { } exports.BookingCateringOrderListComponent = BookingCateringOrderListComponent; BookingCateringOrderListComponent.ɵfac = function BookingCateringOrderListComponent_Factory(t) { return new (t || BookingCateringOrderListComponent)(); }; -BookingCateringOrderListComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BookingCateringOrderListComponent, selectors: [["a-catering-order-list"]], inputs: { catering: "catering", date: "date", space_list: "space_list", all_day: "all_day", next_disabled: "next_disabled" }, outputs: { event: "event", order: "order" }, decls: 14, vars: 3, consts: [[1, "catering", "order-list"], [1, "header"], [1, "body"], [4, "ngIf", "ngIfElse"], [1, "bottom-panel-buttons"], [1, "buttons"], ["mat-button", "", "color", "secondary", "name", "previous", 1, "mck-secondary-button", 3, "click"], ["mat-button", "", "color", "primary", "name", "next", 1, "mck-primary-button", 3, "disabled", "click"], ["empty_state", ""], [1, "list"], [3, "space_list", "order", "date", "edit", "delete", 4, "ngFor", "ngForOf"], ["mat-button", "", "name", "new", 3, "click"], [3, "space_list", "order", "date", "edit", "delete"], [1, "info-block", "center"], [1, "icon"], [3, "icon"], [1, "text"]], template: function BookingCateringOrderListComponent_Template(rf, ctx) { if (rf & 1) { +BookingCateringOrderListComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BookingCateringOrderListComponent, selectors: [["a-catering-order-list"]], inputs: { catering: "catering", date: "date", space_list: "space_list", all_day: "all_day", next_disabled: "next_disabled", placeIntoModal: "placeIntoModal" }, outputs: { event: "event", order: "order" }, decls: 14, vars: 5, consts: [[1, "catering", "order-list"], [1, "header"], [1, "body"], [4, "ngIf", "ngIfElse"], [1, "bottom-panel-buttons"], [1, "buttons"], ["mat-button", "", "color", "secondary", "name", "previous", 1, "mck-secondary-button", 3, "click"], ["mat-button", "", "color", "primary", "name", "next", 1, "mck-primary-button", 3, "disabled", "click"], ["empty_state", ""], [1, "list"], [3, "space_list", "order", "date", "edit", "delete", 4, "ngFor", "ngForOf"], ["mat-button", "", "name", "new", 3, "click"], [3, "space_list", "order", "date", "edit", "delete"], [1, "info-block", "center"], [1, "icon"], [3, "icon"], [1, "text"]], template: function BookingCateringOrderListComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 0); i0.ɵɵelementStart(1, "div", 1); i0.ɵɵelementStart(2, "h3"); @@ -36289,9 +36608,11 @@ BookingCateringOrderListComponent.ɵcmp = i0.ɵɵdefineComponent({ type: Booking const _r1 = i0.ɵɵreference(13); i0.ɵɵadvance(5); i0.ɵɵproperty("ngIf", ctx.orders && ctx.orders.length)("ngIfElse", _r1); - i0.ɵɵadvance(5); + i0.ɵɵadvance(1); + i0.ɵɵstyleProp("position", ctx.placeIntoModal ? "relative" : "fixed"); + i0.ɵɵadvance(4); i0.ɵɵproperty("disabled", ctx.next_disabled && !ctx.delete); - } }, directives: [i1.NgIf, i2.MatButton, i1.NgForOf, i3.CateringOrderListItemComponent, i4.IconComponent], styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n[_nghost-%COMP%] {\n height: 100%;\n}\n.order-list[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n flex-direction: column;\n height: 100%;\n width: 768px;\n margin: auto;\n max-width: 100vw;\n background-color: #fff;\n box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12);\n}\n.body[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n flex-direction: column;\n flex: 1;\n width: 100%;\n min-height: 50%;\n overflow: auto;\n margin-bottom: 210px;\n}\n.body[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n width: 8em;\n}\n.list[_ngcontent-%COMP%] {\n width: 100%;\n}\n.list[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] {\n border: 1px solid #ccc;\n}\n.list[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n.footer[_ngcontent-%COMP%] {\n width: 100vw;\n background-color: white;\n text-align: center;\n border-top: 1px solid #ccc;\n height: 100px;\n}\n.footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n min-width: 8em;\n margin: 0.5em;\n}\n.info-block[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin-top: 1em;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvdmFycy5zY3NzIiwiYXBwcy9zdGFmZi9zcmMvYXBwL2Jvb2tpbmcvY2F0ZXJpbmcvb3JkZXItbGlzdC9vcmRlci1saXN0LmNvbXBvbmVudC5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy91aS9zcmMvbGliL21peGlucy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvYXBwcy9zdGFmZi9zcmMvYXBwL2Jvb2tpbmcvY2F0ZXJpbmcvb3JkZXItbGlzdC9vcmRlci1saXN0LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzswQkFBQTtBQVFBOzswQkFBQTtBQWtDQTs7Y0FBQTtBQWdCQTs7c0JBQUE7QUExREE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQzVDQTs7c0JBQUE7QUM2QkE7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDa0NsQjtBRDhEQTs7c0JBQUE7QUVrT0E7OztFQUFBO0FDaFVBO0VBQ0ksWUFBQTtBRjBDSjtBRXZDQTtFQUNJLGFBQUE7RUFDQSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0EsWUFBQTtFQUNBLFlBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7RUFDQSxzQkFBQTtFSlBBLGlIQUFBO0FFa0RKO0FFdkNBO0VBQ0ksa0JBQUE7RUFDQSxhQUFBO0VBQ0EsbUJBQUE7RUFDQSxzQkFBQTtFQUNBLE9BQUE7RUFDQSxXQUFBO0VBQ0EsZUFBQTtFQUNBLGNBQUE7RUFDQSxvQkFBQTtBRjBDSjtBRXhDSTtFQUNJLFVBQUE7QUYwQ1I7QUV0Q0E7RUFDSSxXQUFBO0FGeUNKO0FFeENJO0VBQ0ksc0JBQUE7QUYwQ1I7QUV6Q1E7RUFDSSxxQ0FBQTtBRjJDWjtBRXRDQTtFQUNJLFlBQUE7RUFDQSx1QkFBQTtFQUNBLGtCQUFBO0VBQ0EsMEJBQUE7RUFDQSxhQUFBO0FGeUNKO0FFeENJO0VBQ0ksY0FBQTtFQUNBLGFBQUE7QUYwQ1I7QUVuQ0k7RUFDSSxlQUFBO0FGc0NSIiwiZmlsZSI6ImFwcHMvc3RhZmYvc3JjL2FwcC9ib29raW5nL2NhdGVyaW5nL29yZGVyLWxpc3Qvb3JkZXItbGlzdC5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGNvbG9yLWJyYW5kLWVsZWN0cmljLWJsdWU6ICMyMjUxZmY7XG4kY29sb3ItYnJhbmQtZGVlcC1ibHVlOiAjMDUxYzJjO1xuJGNvbG9yLWJyYW5kLWN5YW46ICMwMGE5ZjQ7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kZm9udC1kYXJrOiAjMDAwO1xuJGZvbnQtbGlnaHQ6ICNmZmY7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuJGdyZWVuMTogIzIxOTY1MztcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2xvci1wcmltYXJ5OiAjMTkzN2VhO1xuJGNvbG9yLXByaW1hcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcbiRjb2xvci1wcmltYXJ5LWRhcms6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuXG4kY29sb3Itc2Vjb25kYXJ5OiAjNDI4NUY0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodDogbGlnaHRlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG4kY29sb3Itc2Vjb25kYXJ5LWRhcms6IGRhcmtlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG5cbiRiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuJGZvb3Rlci1iYWNrOiAjMjYzMjM4O1xuJGhlYWRlci1iYWNrOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNTFDMkMsICMwNTFDMkMgNDAlLCAjMEIyNDUzIDYwJSwgIzFGNDBFNiAxMDAlKTtcblxuJGNvbG9yLXRlcm5hcnk6ICMwNTFjMmM7XG5cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuXG4kZm9udC1zdGFjazogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiRoZWFkaW5nLWZvbnQ6IFwiTGFyaXNoTWNLaW5zZXlcIiwgJ0dlb3JnaWEnLCBzZXJpZjtcbiRmb250OiAkZm9udC1zdGFjaztcblxuJGZvbnQtZmFtaWx5LXByaW1hcnk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LXNlY29uZGFyeTogXCJCb3dlclwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiIHNlcmlmO1xuXG4kYmFzZS1zaXplOiAxNnB4O1xuJHRhYmxldC1zaXplOiAxNnB4O1xuJG1vYmlsZS1zaXplOiAxNnB4O1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGJyZWFrLW1vYmlsZTogNDUwcHg7XG4kYnJlYWstdGFibGV0OiA4MDBweDtcbiRicmVhay1sYXB0b3A6IDEwMjRweDtcblxuJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGU6IDgwMHB4O1xuJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQ6IDEwNDhweDtcbiRicmVhay1sYW5kc2NhcGUtbGFwdG9wOiAxMjgwcHg7XG4iLCJAaW1wb3J0ICcuL3ZhcmlhYmxlcyc7XG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuQG1peGluIGJveC1zaGFkb3coJGNvbG9yOiAjMDAwLCAkZGVwdGg6IDEpIHtcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMXB4ICogKCRkZXB0aCAtIDEpIHJnYmEoIzAwMCwgLjIpLFxuICAgICAgICAgICAgICAgIDAgMXB4IDFweCAwIHJnYmEoIzAwMCwgLjE0KSxcbiAgICAgICAgICAgICAgICAwIDJweCAxcHggLTFweCByZ2JhKCMwMDAsIC4xMik7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG5AbWl4aW4gcmVzcG9uZC10bygkbWVkaWEpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gIEBlbHNlIGlmICRtZWRpYSA9PSBsYXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1AZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiJHByaW1hcnk6ICMxRjQwRTY7XG4kZm9ybS1sYWJlbDogIzA1MUMyQztcbiRzZWNvbmRhcnktbGFiZWw6ICM3Njc2NzY7XG4kYm9yZGVyOiAjQjNCM0IzO1xuJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ6ICNEMEQwRDA7XG4kY2hpcC1jb2xvcjogIzMzMzMzMztcbiRwbGFjZWhvbGRlci1jb2xvcjogIzdGN0Y3RjtcbiRiYWNrZ3JvdW5kLWNvbG9yOiAjRjBGMEYwO1xuJHBhZ2UtYmFja2dyb3VuZC1jb2xvcjogI0Y4RjlGQTtcbiRzZWxlY3RlZC1vcHRpb246ICNFNkU2RTY7XG4kY29sb3ItYnJhbmQteWVsbG93OiAjZmZkMDQ4O1xuJGxpZ2h0LXllbGxvdzogI2ZmZjNjZTtcbiRjb2FjaG1hcmstdGV4dDogIzZmNGQwMDtcbiRlcnJvci1jb2xvcjogI0UxMkU0MDtcbiRuby1maWx0ZXJzLWNvbG9yOiAjQkNCQ0JDO1xuJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yOiAjRjRGNEY0O1xuJHByaW1hcnktaGlnaGxpZ2h0OiAjMjI1MUZGO1xuJHNjcm9sbGJhci1jb2xvcjogIzc1NzU3NTtcblxuJGF2YWlsYWJsZS1jb2xvcjogIzVEOUQ1MjtcbiRhdmFpbGFibGUtYnktcmVxdWVzdC1jb2xvcjogI0Y1QjUzRjtcbiRpbi11c2UtY29sb3I6ICNENDQ4M0U7XG4kbm90LWJvb2thYmxlLWNvbG9yOiAjQ0NDQ0NDO1xuXG4kbW9kYWwtYm9keS1oZWFkaW5nOiAjNEQ0RDREO1xuJGFsZXJ0LW92ZXJsYXktYmc6IHJnYmEoNSwgMjgsIDQ0LCAwLjg1KTtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG5cbiRwZW5kaW5nOiAjZmZiMzAwO1xuJHBlbmRpbmctbGlnaHQ6IGxpZ2h0ZW4oJHBlbmRpbmcsIDEwKTtcbiRwZW5kaW5nLWRhcms6IGRhcmtlbigkcGVuZGluZywgMTApO1xuXG4kZXJyb3I6ICNlNTM5MzU7XG4kZXJyb3ItbGlnaHQ6IGxpZ2h0ZW4oJGVycm9yLCAxMCk7XG4kZXJyb3ItZGFyazogZGFya2VuKCRlcnJvciwgMTApO1xuXG4kY29hY2htYXJrLWJnOiAjRUJFQkY2O1xuJGNvYWNobWFyay1kYXJrLXRleHQ6ICMxQjFCMTk7XG4kZXJyb3ItdGV4dDogI2ZmZjtcblxuLyoqXG4gKiBTcGFjaW5nXG4gKi9cblxuLy8gNHB4XG4kc3BhY2luZy1zbWFsbGVzdDogMC4yNXJlbTtcblxuLy8gOHB4XG4kc3BhY2luZy14eHNtYWxsOiAwLjVyZW07XG5cbi8vIDEycHhcbiRzcGFjaW5nLXhzbWFsbDogMC43NXJlbTtcblxuLy8gMTZweFxuJHNwYWNpbmctc21hbGw6IDFyZW07XG5cbi8vIDIwcHhcbiRzcGFjaW5nLXNtYWxsLW1lZGl1bTogMS4yNXJlbTtcblxuLy8gMjRweFxuJHNwYWNpbmctbWVkaXVtOiAxLjVyZW07XG5cbi8vIDI4cHhcbiRzcGFjaW5nLW1lZGl1bS1sYXJnZTogMS43NXJlbTtcblxuLy8gMzJweFxuJHNwYWNpbmctbGFyZ2U6IDJyZW07XG5cbi8vIDQ4cHhcbiRzcGFjaW5nLXhsYXJnZTogM3JlbTtcblxuLy8gNjRweFxuJHNwYWNpbmcteHhsYXJnZTogNHJlbTtcblxuLy8gOTZweFxuJHNwYWNpbmctbGFyZ2VzdDogNnJlbTtcblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbiRkZXZpY2UtbW9iaWxlLXNpemU6IDQ1MHB4O1xuJGRldmljZS10YWJsZXQtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhcHRvcC1zaXplOiAxMDI0cHg7XG5cbiRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplOiAxMDQ4cHg7XG4kZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZTogMTI4MHB4O1xuXG5cbjpleHBvcnQge1xuICAgIHByaW1hcnk6ICRwcmltYXJ5O1xuICAgIHNlY29uZGFyeUxhYmVsOiAkc2Vjb25kYXJ5LWxhYmVsO1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuJGljb24tc21hbGw6IDE2cHg7XG4kaWNvbi1tZWRpdW06IDI0cHg7XG4kaWNvbi1sYXJnZTogMzJweDtcbiRpY29uLXhsYXJnZTogNDhweDtcbiIsIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG46aG9zdCB7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuLm9yZGVyLWxpc3Qge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiA3NjhweDtcbiAgbWFyZ2luOiBhdXRvO1xuICBtYXgtd2lkdGg6IDEwMHZ3O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3gtc2hhZG93OiAwIDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMCAxcHggMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwgMCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtcbn1cblxuLmJvZHkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZsZXg6IDE7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiA1MCU7XG4gIG92ZXJmbG93OiBhdXRvO1xuICBtYXJnaW4tYm90dG9tOiAyMTBweDtcbn1cbi5ib2R5IGJ1dHRvbiB7XG4gIHdpZHRoOiA4ZW07XG59XG5cbi5saXN0IHtcbiAgd2lkdGg6IDEwMCU7XG59XG4ubGlzdCA+ICoge1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xufVxuLmxpc3QgPiAqOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cblxuLmZvb3RlciB7XG4gIHdpZHRoOiAxMDB2dztcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNjY2M7XG4gIGhlaWdodDogMTAwcHg7XG59XG4uZm9vdGVyIGJ1dHRvbiB7XG4gIG1pbi13aWR0aDogOGVtO1xuICBtYXJnaW46IDAuNWVtO1xufVxuXG4uaW5mby1ibG9jayBidXR0b24ge1xuICBtYXJnaW4tdG9wOiAxZW07XG59IiwiQGltcG9ydCBcInZhcnNcIjtcblxuQG1peGluIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJHNpemUsICRxdWFsaWZpZXIpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBpZiAoJHF1YWxpZmllciA9PSBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIGlmICgkcXVhbGlmaWVyID09IG1heC13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtYXgtd2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBtaXhpbiBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJG1pbiwgJG1heCkge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gdGhpcyBpcyBhIGNvcHkgb2YgcmVzcG9uZC10by4gd2UgZG9uJ3Qgd2FudCB0byBwcmVzZXJ2ZSB0aGF0IG1ldGhvZCBzaW5jZSB0aGUgYnJlYWtwb2ludHMgbWF5IGRpdmVyZ2UgZnJvbSB0aGUgb2xkIFVJLlxuQG1peGluIGlzLXNjcmVlbi1zaXplKCRtZWRpYTogYWxsLCAkb3JpZW50YXRpb246IG5vbmUpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuXG5AbWl4aW4gcGFnZS1wYWRkaW5nIHtcbiAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xufVxuXG4vLyBGb250IE1peGluc1xuJGZvbnQtbWNraW5zZXktc2FuczogXCJNY0tpbnNleSBTYW5zXCI7XG4kZm9udC10aGVpbmhhcmR0OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiRmb250LWJvd2VyOiBcIkJvd2VyXCI7XG5cbkBtaXhpbiBib3dlci1ib2xkIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtYm93ZXI7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIG1ja2luc2V5LXNhbnMge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBkaXNwbGF5LTEge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDRyZW07IC8vIDY0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTg3OyAvLyA3NnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0yIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0zIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTQge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzcmVtOyAvLyA0OHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTY2OyAvLyA1NnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDY0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTUge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuODMzOyAvLyAzNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42NDI7IC8vIDQwcHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTcge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDQ4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjc1cmVtOyAvLyA0NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNTJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICBsaW5lLWhlaWdodDogMS4xMTE7IC8vIDQ0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA0OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0zIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjIyOyAvLyA0NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy00IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy01IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyODhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy02IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTU1OyAvLyAyOHB4XG4gICAgfVxufVxuXG5AbWl4aW4gYm9keS1kZWZhdWx0IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI2cHhcbiAgICB9XG59XG5cbi8vLyBEb2VzbnQgZXhpc3QgaW4gTURTLlxuQG1peGluIGJvZHktdGlueSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07IC8vIDEycHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyMHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZm9ybS1sYWJlbCB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LWZhbWlseTogJGZvbnQtdGhlaW5oYXJkdDtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgY29sb3I6ICRwbGFjZWhvbGRlci1jb2xvcjtcbiAgICBmb250LXdlaWdodDogMzAwO1xufVxuXG5AbWl4aW4gY2hpcC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIGNoZWNrYm94LWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgY29sb3I6IGJsYWNrO1xufVxuXG4vLyBib3JkZXJzXG5cbkBtaXhpbiBtY2stY2hlY2tib3gtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAycHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLXRoaW4tYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlci1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJvcmRlci1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50LWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXItbGlnaHQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5cbi8vIGZ1bmN0aW9uc1xuXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbkBtaXhpbiBtYXgtbGluZXMoJGNvdW50KSB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAtd2Via2l0LWxpbmUtY2xhbXA6ICRjb3VudDtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuXG4vLyBpbWFnZXNcbkBtaXhpbiBtY2staWNvbigkd2lkdGgsICRhc3NldCwgJGhlaWdodDogJHdpZHRoLCAgJGFzc2V0UGF0aDogXCJsaWJzL3VpL3NyYy9saWIvaWNvbnNcIiwpIHtcbiAgICB3aWR0aDogJHdpZHRoO1xuICAgIGhlaWdodDogJGhlaWdodDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIjeyRhc3NldFBhdGh9LyN7JGFzc2V0fVwiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG59XG5cblxuQG1peGluIG1jay1zbWFsbC1pY29uKCRtb2JpbGUtYXNzZXQsICRkZXNrdG9wLWFzc2V0OiAkbW9iaWxlLWFzc2V0KSB7XG4gICAgQGluY2x1ZGUgbWNrLWljb24oMTZweCwgJGFzc2V0OiAkbW9iaWxlLWFzc2V0KTtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oMjRweCwgJGFzc2V0OiAkZGVza3RvcC1hc3NldCk7XG4gICAgfVxufVxuXG4vLyBza2VsZXRvblxuQG1peGluIHNrZWxldG9uLWJnIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItaW1hZ2Utc2l6ZSB7XG4gICAgd2lkdGg6IDgxcHg7XG4gICAgaGVpZ2h0OiA4MnB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMjE5cHg7XG4gICAgICAgIGhlaWdodDogMTE5cHg7XG4gICAgfVxufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItc3RhdHVzLXNpemUge1xuICAgIHdpZHRoOiAxMTdweDtcbiAgICBoZWlnaHQ6IDc4cHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAxMTdweDtcbiAgICAgICAgaGVpZ2h0OiA3OHB4O1xuICAgIH1cbn1cbiIsIkBpbXBvcnQgJ3ZhcmlhYmxlcyc7XG5AaW1wb3J0ICdtaXhpbnMnO1xuQGltcG9ydCBcImxpYnMvdWkvc3JjL2xpYi9taXhpbnNcIjtcblxuOmhvc3Qge1xuICAgIGhlaWdodDogMTAwJTtcbn1cblxuLm9yZGVyLWxpc3Qge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB3aWR0aDogNzY4cHg7XG4gICAgbWFyZ2luOiBhdXRvO1xuICAgIG1heC13aWR0aDogMTAwdnc7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgICBAaW5jbHVkZSBib3gtc2hhZG93O1xufVxuXG4uYm9keSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGZsZXg6IDE7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWluLWhlaWdodDogNTAlO1xuICAgIG92ZXJmbG93OiBhdXRvO1xuICAgIG1hcmdpbi1ib3R0b206IDIxMHB4O1xuXG4gICAgYnV0dG9uIHtcbiAgICAgICAgd2lkdGg6IDhlbTtcbiAgICB9XG59XG5cbi5saXN0IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICA+ICoge1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoIzAwMCwgLjA1KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmZvb3RlciB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2NjYztcbiAgICBoZWlnaHQ6IDEwMHB4O1xuICAgIGJ1dHRvbiB7XG4gICAgICAgIG1pbi13aWR0aDogOGVtO1xuICAgICAgICBtYXJnaW46LjVlbTtcbiAgICB9XG59XG5cblxuXG4uaW5mby1ibG9jayB7XG4gICAgYnV0dG9uIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMWVtO1xuICAgIH1cbn1cbiJdfQ== */"] }); + } }, directives: [i1.NgIf, i2.MatButton, i1.NgForOf, i3.CateringOrderListItemComponent, i4.IconComponent], styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n[_nghost-%COMP%] {\n height: 100%;\n}\n[_nghost-%COMP%] .bottom-panel-btn[_ngcontent-%COMP%] {\n width: 100%;\n min-height: 80px;\n background-color: white;\n border: 1px solid #E6E6E6;\n z-index: 1002;\n}\n.order-list[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n flex-direction: column;\n height: 100%;\n width: 768px;\n margin: auto;\n max-width: 100vw;\n background-color: #fff;\n box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12);\n}\n.body[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n flex-direction: column;\n flex: 1;\n width: 100%;\n min-height: 50%;\n overflow: auto;\n overflow-y: auto !important;\n}\n.body[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n width: 8em;\n}\n.list[_ngcontent-%COMP%] {\n width: 100%;\n}\n.list[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] {\n border: 1px solid #ccc;\n}\n.list[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n.footer[_ngcontent-%COMP%] {\n width: 100vw;\n background-color: white;\n text-align: center;\n border-top: 1px solid #ccc;\n height: 100px;\n}\n.footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n min-width: 8em;\n margin: 0.5em;\n}\n.info-block[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin-top: 1em;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvdmFycy5zY3NzIiwiYXBwcy9zdGFmZi9zcmMvYXBwL2Jvb2tpbmcvY2F0ZXJpbmcvb3JkZXItbGlzdC9vcmRlci1saXN0LmNvbXBvbmVudC5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy91aS9zcmMvbGliL21peGlucy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvYXBwcy9zdGFmZi9zcmMvYXBwL2Jvb2tpbmcvY2F0ZXJpbmcvb3JkZXItbGlzdC9vcmRlci1saXN0LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzswQkFBQTtBQVFBOzswQkFBQTtBQWtDQTs7Y0FBQTtBQWdCQTs7c0JBQUE7QUExREE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQzVDQTs7c0JBQUE7QUM2QkE7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDa0NsQjtBRDhEQTs7c0JBQUE7QUVrT0E7OztFQUFBO0FDaFVBO0VBQ0ksWUFBQTtBRjBDSjtBRXhDSTtFQUNJLFdBQUE7RUFDQSxnQkFBQTtFQUNBLHVCQUFBO0VBQ0EseUJBQUE7RUFDQSxhQUFBO0FGMENSO0FFdENBO0VBQ0ksYUFBQTtFQUNBLG1CQUFBO0VBQ0Esc0JBQUE7RUFDQSxZQUFBO0VBQ0EsWUFBQTtFQUNBLFlBQUE7RUFDQSxnQkFBQTtFQUNBLHNCQUFBO0VKZkEsaUhBQUE7QUV5REo7QUV0Q0E7RUFDSSxrQkFBQTtFQUNBLGFBQUE7RUFDQSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0EsT0FBQTtFQUNBLFdBQUE7RUFDQSxlQUFBO0VBQ0EsY0FBQTtFQUVBLDJCQUFBO0FGd0NKO0FFckNJO0VBQ0ksVUFBQTtBRnVDUjtBRW5DQTtFQUNJLFdBQUE7QUZzQ0o7QUVyQ0k7RUFDSSxzQkFBQTtBRnVDUjtBRXRDUTtFQUNJLHFDQUFBO0FGd0NaO0FFbkNBO0VBQ0ksWUFBQTtFQUNBLHVCQUFBO0VBQ0Esa0JBQUE7RUFDQSwwQkFBQTtFQUNBLGFBQUE7QUZzQ0o7QUVyQ0k7RUFDSSxjQUFBO0VBQ0EsYUFBQTtBRnVDUjtBRWhDSTtFQUNJLGVBQUE7QUZtQ1IiLCJmaWxlIjoiYXBwcy9zdGFmZi9zcmMvYXBwL2Jvb2tpbmcvY2F0ZXJpbmcvb3JkZXItbGlzdC9vcmRlci1saXN0LmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kY29sb3ItYnJhbmQtZWxlY3RyaWMtYmx1ZTogIzIyNTFmZjtcbiRjb2xvci1icmFuZC1kZWVwLWJsdWU6ICMwNTFjMmM7XG4kY29sb3ItYnJhbmQtY3lhbjogIzAwYTlmNDtcblxuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRmb250LWRhcms6ICMwMDA7XG4kZm9udC1saWdodDogI2ZmZjtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG4kZ3JlZW4xOiAjMjE5NjUzO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvbG9yLXByaW1hcnk6ICMxOTM3ZWE7XG4kY29sb3ItcHJpbWFyeS1saWdodDogbGlnaHRlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuJGNvbG9yLXByaW1hcnktZGFyazogZGFya2VuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG5cbiRjb2xvci1zZWNvbmRhcnk6ICM0Mjg1RjQ7XG4kY29sb3Itc2Vjb25kYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcbiRjb2xvci1zZWNvbmRhcnktZGFyazogZGFya2VuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcblxuJGJhY2tncm91bmQ6ICNmMGYwZjA7XG4kZm9vdGVyLWJhY2s6ICMyNjMyMzg7XG4kaGVhZGVyLWJhY2s6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzA1MUMyQywgIzA1MUMyQyA0MCUsICMwQjI0NTMgNjAlLCAjMUY0MEU2IDEwMCUpO1xuXG4kY29sb3ItdGVybmFyeTogIzA1MWMyYztcblxuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG5cbiRmb250LXN0YWNrOiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcblxuJGhlYWRpbmctZm9udDogXCJMYXJpc2hNY0tpbnNleVwiLCAnR2VvcmdpYScsIHNlcmlmO1xuJGZvbnQ6ICRmb250LXN0YWNrO1xuXG4kZm9udC1mYW1pbHktcHJpbWFyeTogXCJNY0tpbnNleSBTYW5zXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQ2FsaWJyaSwgQ29yYmVsLCBIZWx2ZXRpY2EsIFJvYm90bywgRHJvaWQsIHNhbnMtc2VyaWY7XG4kZm9udC1mYW1pbHktc2Vjb25kYXJ5OiBcIkJvd2VyXCIsIEdlb3JnaWEsIFwiVGltZXMgTmV3IFJvbWFuXCIgc2VyaWY7XG5cbiRiYXNlLXNpemU6IDE2cHg7XG4kdGFibGV0LXNpemU6IDE2cHg7XG4kbW9iaWxlLXNpemU6IDE2cHg7XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kYnJlYWstbW9iaWxlOiA0NTBweDtcbiRicmVhay10YWJsZXQ6IDgwMHB4O1xuJGJyZWFrLWxhcHRvcDogMTAyNHB4O1xuXG4kYnJlYWstbGFuZHNjYXBlLW1vYmlsZTogODAwcHg7XG4kYnJlYWstbGFuZHNjYXBlLXRhYmxldDogMTA0OHB4O1xuJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3A6IDEyODBweDtcbiIsIkBpbXBvcnQgJy4vdmFyaWFibGVzJztcblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5AbWl4aW4gYm94LXNoYWRvdygkY29sb3I6ICMwMDAsICRkZXB0aDogMSkge1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCAxcHggKiAoJGRlcHRoIC0gMSkgcmdiYSgjMDAwLCAuMiksXG4gICAgICAgICAgICAgICAgMCAxcHggMXB4IDAgcmdiYSgjMDAwLCAuMTQpLFxuICAgICAgICAgICAgICAgIDAgMnB4IDFweCAtMXB4IHJnYmEoIzAwMCwgLjEyKTtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbkBtaXhpbiByZXNwb25kLXRvKCRtZWRpYSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSAgQGVsc2UgaWYgJG1lZGlhID09IGxhdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfUBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCIkcHJpbWFyeTogIzFGNDBFNjtcbiRmb3JtLWxhYmVsOiAjMDUxQzJDO1xuJHNlY29uZGFyeS1sYWJlbDogIzc2NzY3NjtcbiRib3JkZXI6ICNCM0IzQjM7XG4kYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDogI0QwRDBEMDtcbiRjaGlwLWNvbG9yOiAjMzMzMzMzO1xuJHBsYWNlaG9sZGVyLWNvbG9yOiAjN0Y3RjdGO1xuJGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4kcGFnZS1iYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuJHNlbGVjdGVkLW9wdGlvbjogI0U2RTZFNjtcbiRjb2xvci1icmFuZC15ZWxsb3c6ICNmZmQwNDg7XG4kbGlnaHQteWVsbG93OiAjZmZmM2NlO1xuJGNvYWNobWFyay10ZXh0OiAjNmY0ZDAwO1xuJGVycm9yLWNvbG9yOiAjRTEyRTQwO1xuJG5vLWZpbHRlcnMtY29sb3I6ICNCQ0JDQkM7XG4kcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I6ICNGNEY0RjQ7XG4kcHJpbWFyeS1oaWdobGlnaHQ6ICMyMjUxRkY7XG4kc2Nyb2xsYmFyLWNvbG9yOiAjNzU3NTc1O1xuXG4kYXZhaWxhYmxlLWNvbG9yOiAjNUQ5RDUyO1xuJGF2YWlsYWJsZS1ieS1yZXF1ZXN0LWNvbG9yOiAjRjVCNTNGO1xuJGluLXVzZS1jb2xvcjogI0Q0NDgzRTtcbiRub3QtYm9va2FibGUtY29sb3I6ICNDQ0NDQ0M7XG5cbiRtb2RhbC1ib2R5LWhlYWRpbmc6ICM0RDRENEQ7XG4kYWxlcnQtb3ZlcmxheS1iZzogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2FjaG1hcmstYmc6ICNFQkVCRjY7XG4kY29hY2htYXJrLWRhcmstdGV4dDogIzFCMUIxOTtcbiRlcnJvci10ZXh0OiAjZmZmO1xuXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuXG4vLyA0cHhcbiRzcGFjaW5nLXNtYWxsZXN0OiAwLjI1cmVtO1xuXG4vLyA4cHhcbiRzcGFjaW5nLXh4c21hbGw6IDAuNXJlbTtcblxuLy8gMTJweFxuJHNwYWNpbmcteHNtYWxsOiAwLjc1cmVtO1xuXG4vLyAxNnB4XG4kc3BhY2luZy1zbWFsbDogMXJlbTtcblxuLy8gMjBweFxuJHNwYWNpbmctc21hbGwtbWVkaXVtOiAxLjI1cmVtO1xuXG4vLyAyNHB4XG4kc3BhY2luZy1tZWRpdW06IDEuNXJlbTtcblxuLy8gMjhweFxuJHNwYWNpbmctbWVkaXVtLWxhcmdlOiAxLjc1cmVtO1xuXG4vLyAzMnB4XG4kc3BhY2luZy1sYXJnZTogMnJlbTtcblxuLy8gNDhweFxuJHNwYWNpbmcteGxhcmdlOiAzcmVtO1xuXG4vLyA2NHB4XG4kc3BhY2luZy14eGxhcmdlOiA0cmVtO1xuXG4vLyA5NnB4XG4kc3BhY2luZy1sYXJnZXN0OiA2cmVtO1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGRldmljZS1tb2JpbGUtc2l6ZTogNDUwcHg7XG4kZGV2aWNlLXRhYmxldC1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFwdG9wLXNpemU6IDEwMjRweDtcblxuJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemU6IDgwMHB4O1xuJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemU6IDEwNDhweDtcbiRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplOiAxMjgwcHg7XG5cblxuOmV4cG9ydCB7XG4gICAgcHJpbWFyeTogJHByaW1hcnk7XG4gICAgc2Vjb25kYXJ5TGFiZWw6ICRzZWNvbmRhcnktbGFiZWw7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4kaWNvbi1zbWFsbDogMTZweDtcbiRpY29uLW1lZGl1bTogMjRweDtcbiRpY29uLWxhcmdlOiAzMnB4O1xuJGljb24teGxhcmdlOiA0OHB4O1xuIiwiLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbjpob3N0IHtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuOmhvc3QgLmJvdHRvbS1wYW5lbC1idG4ge1xuICB3aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogODBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gIHotaW5kZXg6IDEwMDI7XG59XG5cbi5vcmRlci1saXN0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogNzY4cHg7XG4gIG1hcmdpbjogYXV0bztcbiAgbWF4LXdpZHRoOiAxMDB2dztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm94LXNoYWRvdzogMCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDAgMXB4IDFweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4xMik7XG59XG5cbi5ib2R5IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmbGV4OiAxO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogNTAlO1xuICBvdmVyZmxvdzogYXV0bztcbiAgb3ZlcmZsb3cteTogYXV0byAhaW1wb3J0YW50O1xufVxuLmJvZHkgYnV0dG9uIHtcbiAgd2lkdGg6IDhlbTtcbn1cblxuLmxpc3Qge1xuICB3aWR0aDogMTAwJTtcbn1cbi5saXN0ID4gKiB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG59XG4ubGlzdCA+ICo6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xufVxuXG4uZm9vdGVyIHtcbiAgd2lkdGg6IDEwMHZ3O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2NjYztcbiAgaGVpZ2h0OiAxMDBweDtcbn1cbi5mb290ZXIgYnV0dG9uIHtcbiAgbWluLXdpZHRoOiA4ZW07XG4gIG1hcmdpbjogMC41ZW07XG59XG5cbi5pbmZvLWJsb2NrIGJ1dHRvbiB7XG4gIG1hcmdpbi10b3A6IDFlbTtcbn0iLCJAaW1wb3J0IFwidmFyc1wiO1xuXG5AbWl4aW4gcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkc2l6ZSwgJHF1YWxpZmllcikge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQGlmICgkcXVhbGlmaWVyID09IG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2UgaWYgKCRxdWFsaWZpZXIgPT0gbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1heC13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuQG1peGluIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkbWluLCAkbWF4KSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyB0aGlzIGlzIGEgY29weSBvZiByZXNwb25kLXRvLiB3ZSBkb24ndCB3YW50IHRvIHByZXNlcnZlIHRoYXQgbWV0aG9kIHNpbmNlIHRoZSBicmVha3BvaW50cyBtYXkgZGl2ZXJnZSBmcm9tIHRoZSBvbGQgVUkuXG5AbWl4aW4gaXMtc2NyZWVuLXNpemUoJG1lZGlhOiBhbGwsICRvcmllbnRhdGlvbjogbm9uZSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5cbkBtaXhpbiBwYWdlLXBhZGRpbmcge1xuICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctc21hbGw7XG4gICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctc21hbGw7XG59XG5cbi8vIEZvbnQgTWl4aW5zXG4kZm9udC1tY2tpbnNleS1zYW5zOiBcIk1jS2luc2V5IFNhbnNcIjtcbiRmb250LXRoZWluaGFyZHQ6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuJGZvbnQtYm93ZXI6IFwiQm93ZXJcIjtcblxuQG1peGluIGJvd2VyLWJvbGQge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1ib3dlcjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gbWNraW5zZXktc2FucyB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIGRpc3BsYXktMSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNHJlbTsgLy8gNjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODc7IC8vIDc2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTIge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTMge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2MHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNCB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDNyZW07IC8vIDQ4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNjY7IC8vIDU2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjRweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMwcHhcbiAgICBsaW5lLWhlaWdodDogMS44MzM7IC8vIDM0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY0MjsgLy8gNDBweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0xIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNDhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNzVyZW07IC8vIDQ0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA1MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0yIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjExMTsgLy8gNDRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDQ4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTMge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMjI7IC8vIDQ0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTUge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTYge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTU7IC8vIDI4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBib2R5LWRlZmF1bHQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjZweFxuICAgIH1cbn1cblxuLy8vIERvZXNudCBleGlzdCBpbiBNRFMuXG5AbWl4aW4gYm9keS10aW55IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTsgLy8gMTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDIwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBmb3JtLWxhYmVsIHtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC10aGVpbmhhcmR0O1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBjb2xvcjogJHBsYWNlaG9sZGVyLWNvbG9yO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG59XG5cbkBtaXhpbiBjaGlwLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gY2hlY2tib3gtbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICBjb2xvcjogYmxhY2s7XG59XG5cbi8vIGJvcmRlcnNcblxuQG1peGluIG1jay1jaGVja2JveC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stdGhpbi1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYm9yZGVyLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQtbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlci1saWdodDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cblxuLy8gZnVuY3Rpb25zXG5cbi8qKlxuICogTWFrZXMgdGV4dCBoYXZlIG1heGltdW0gbGluZXMgd2l0aCBlbGxpcHNpcy4gV29ya3Mgb24gbW9zdCBtb2Rlcm4gYnJvd3NlcnMgZXhjZXB0XG4gKiBvZiBGaXJlZm94Li5cbiAqL1xuQG1peGluIG1heC1saW5lcygkY291bnQpIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIC13ZWJraXQtbGluZS1jbGFtcDogJGNvdW50O1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG59XG5cbi8vIGltYWdlc1xuQG1peGluIG1jay1pY29uKCR3aWR0aCwgJGFzc2V0LCAkaGVpZ2h0OiAkd2lkdGgsICAkYXNzZXRQYXRoOiBcImxpYnMvdWkvc3JjL2xpYi9pY29uc1wiLCkge1xuICAgIHdpZHRoOiAkd2lkdGg7XG4gICAgaGVpZ2h0OiAkaGVpZ2h0O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiN7JGFzc2V0UGF0aH0vI3skYXNzZXR9XCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbn1cblxuXG5AbWl4aW4gbWNrLXNtYWxsLWljb24oJG1vYmlsZS1hc3NldCwgJGRlc2t0b3AtYXNzZXQ6ICRtb2JpbGUtYXNzZXQpIHtcbiAgICBAaW5jbHVkZSBtY2staWNvbigxNnB4LCAkYXNzZXQ6ICRtb2JpbGUtYXNzZXQpO1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBAaW5jbHVkZSBtY2staWNvbigyNHB4LCAkYXNzZXQ6ICRkZXNrdG9wLWFzc2V0KTtcbiAgICB9XG59XG5cbi8vIHNrZWxldG9uXG5AbWl4aW4gc2tlbGV0b24tYmcge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1pbWFnZS1zaXplIHtcbiAgICB3aWR0aDogODFweDtcbiAgICBoZWlnaHQ6IDgycHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAyMTlweDtcbiAgICAgICAgaGVpZ2h0OiAxMTlweDtcbiAgICB9XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1zdGF0dXMtc2l6ZSB7XG4gICAgd2lkdGg6IDExN3B4O1xuICAgIGhlaWdodDogNzhweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDExN3B4O1xuICAgICAgICBoZWlnaHQ6IDc4cHg7XG4gICAgfVxufVxuIiwiQGltcG9ydCAndmFyaWFibGVzJztcbkBpbXBvcnQgJ21peGlucyc7XG5AaW1wb3J0IFwibGlicy91aS9zcmMvbGliL21peGluc1wiO1xuXG46aG9zdCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuXG4gICAgLmJvdHRvbS1wYW5lbC1idG4geyBcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDgwcHg7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICAgICAgICB6LWluZGV4OiAxMDAyO1xuICAgICAgICB9XG59XG5cbi5vcmRlci1saXN0IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgd2lkdGg6IDc2OHB4O1xuICAgIG1hcmdpbjogYXV0bztcbiAgICBtYXgtd2lkdGg6IDEwMHZ3O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgQGluY2x1ZGUgYm94LXNoYWRvdztcbn1cblxuLmJvZHkge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBmbGV4OiAxO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1pbi1oZWlnaHQ6IDUwJTtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgICAvLyBtYXJnaW4tYm90dG9tOiAyMTBweDtcbiAgICBvdmVyZmxvdy15OiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgLy8gbWF4LWhlaWdodDogNDd2aCAhaW1wb3J0YW50O1xuXG4gICAgYnV0dG9uIHtcbiAgICAgICAgd2lkdGg6IDhlbTtcbiAgICB9XG59XG5cbi5saXN0IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICA+ICoge1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoIzAwMCwgLjA1KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmZvb3RlciB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2NjYztcbiAgICBoZWlnaHQ6IDEwMHB4O1xuICAgIGJ1dHRvbiB7XG4gICAgICAgIG1pbi13aWR0aDogOGVtO1xuICAgICAgICBtYXJnaW46LjVlbTtcbiAgICB9XG59XG5cblxuXG4uaW5mby1ibG9jayB7XG4gICAgYnV0dG9uIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMWVtO1xuICAgIH1cbn1cbiJdfQ== */"] }); /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(BookingCateringOrderListComponent, [{ type: core_1.Component, args: [{ @@ -36313,6 +36634,8 @@ BookingCateringOrderListComponent.ɵcmp = i0.ɵɵdefineComponent({ type: Booking type: core_1.Output }], order: [{ type: core_1.Output + }], placeIntoModal: [{ + type: core_1.Input }] }); })(); @@ -38892,7 +39215,7 @@ function RoomAvailabilityPreviewComponent_div_5_Template(rf, ctx) { if (rf & 1) const _r8 = i0.ɵɵreference(25); const _r10 = i0.ɵɵreference(27); const ctx_r2 = i0.ɵɵnextContext(); - i0.ɵɵclassProp("has-conflict", ctx_r2.addMarginOnConflict); + i0.ɵɵclassProp("has-conflict", ctx_r2.addMarginOnConflict)("margin-top", ctx_r2.expanded && !ctx_r2.placeIntoModal); i0.ɵɵadvance(6); i0.ɵɵtextInterpolate(ctx_r2.space.local_name); i0.ɵɵadvance(2); @@ -38958,6 +39281,11 @@ class RoomAvailabilityPreviewComponent extends base_1.BaseClass { this.handleExpand = new core_1.EventEmitter(); this.updateCalendarWeekView = new core_1.EventEmitter(); this.warnIfItHasConflict = new core_1.EventEmitter(); + /** + * placeIntoModal: Input decorator indecate as a flag to adapt component design into a dialog modal + * (by hiding header and adjusting height so that fit into a modal) + */ + this.placeIntoModal = false; this.breakpoint = 768; this.mobile = false; this.showDatePicker = false; @@ -39605,29 +39933,30 @@ RoomAvailabilityPreviewComponent.ɵcmp = i0.ɵɵdefineComponent({ type: RoomAvai } if (rf & 2) { var _t; i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.scrollContainer = _t.first); - } }, inputs: { alternativeWeekStartDateTz: "alternativeWeekStartDateTz", bookingId: "bookingId", bookings: "bookings", building: "building", currentBooking: "currentBooking", currentUser: "currentUser", dateTz: "dateTz", duration: "duration", expanded: "expanded", level: "level", mode: "mode", space: "space" }, outputs: { confirmChanges: "confirmChanges", handleExpand: "handleExpand", updateCalendarWeekView: "updateCalendarWeekView", warnIfItHasConflict: "warnIfItHasConflict" }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 7, vars: 6, consts: [[1, "room-availability", "mck-row"], [1, "header"], [3, "mode", "backModal", "noSurvey", "closeCallback", 4, "ngIf"], [1, "room-availability", "scroll-container"], [3, "np", "viewDate", "events", "refresh", "dayStartHour", "dayEndHour", "eventTimesChanged", 4, "ngIf"], ["class", "mck-center", 3, "has-conflict", 4, "ngIf"], ["class", "footer mck-column mck-center", 4, "ngIf"], [3, "mode", "backModal", "noSurvey", "closeCallback"], [3, "viewDate", "events", "refresh", "dayStartHour", "dayEndHour", "eventTimesChanged"], [1, "mck-center"], [1, "mck-column"], [1, "intro"], [1, "cal-controls"], [1, "dir"], ["type", "image", "src", "assets/icon/chevron-left.svg", 3, "click"], [3, "click"], ["type", "image", "src", "assets/icon/chevron-right.svg", 3, "click"], [1, "date"], [1, "time-inputs-calendar", 3, "formControl", "icon_only", "fromDateTz", "timezone", "initialDateSelectionTz", "onSelect"], ["name", "overflow", "labelPosition", "after", "title", "Show weekends on the calendar", 1, "weekends", "mck-toggle", 3, "checked", "change"], ["id", "calendarScrollContainer", 1, "mck-scroll"], ["precision", "minutes", "snapDraggedEvents", "false", 3, "viewDate", "events", "refresh", "daysInWeek", "eventSnapSize", "headerTemplate", "eventTemplate", "eventTimesChanged", "hourSegmentClicked"], ["headerTemplate", ""], ["eventTemplate", ""], [1, "cal-day-headers"], ["class", "cal-header", "mwlDroppable", "", "dragOverClass", "cal-drag-over", 3, "cal-past", "cal-event-date", "cal-future", "cal-weekend", "show-weekend", "ngClass", "mwlClick", "drop", 4, "ngFor", "ngForOf", "ngForTrackBy"], ["mwlDroppable", "", "dragOverClass", "cal-drag-over", 1, "cal-header", 3, "ngClass", "mwlClick", "drop"], ["tabindex", "0", "role", "application", 1, "cal-event", 3, "ngStyle", "mwlCalendarTooltip", "tooltipPlacement", "tooltipEvent", "tooltipTemplate", "tooltipAppendToBody", "tooltipDelay", "mwlClick", "mwlKeydownEnter"], [1, "bumper"], [1, "berry", "top"], [1, "berry", "bot"], [3, "event", "customTemplate"], [3, "event", "customTemplate", "view"], [1, "footer", "mck-column", "mck-center"], ["mat-button", "", "color", "secondary", 1, "mck-secondary-button", 3, "click"], ["mat-button", "", "color", "primary", 1, "mck-primary-button", 3, "disabled", "click"]], template: function RoomAvailabilityPreviewComponent_Template(rf, ctx) { if (rf & 1) { + } }, inputs: { alternativeWeekStartDateTz: "alternativeWeekStartDateTz", bookingId: "bookingId", bookings: "bookings", building: "building", currentBooking: "currentBooking", currentUser: "currentUser", dateTz: "dateTz", duration: "duration", expanded: "expanded", level: "level", mode: "mode", space: "space", placeIntoModal: "placeIntoModal" }, outputs: { confirmChanges: "confirmChanges", handleExpand: "handleExpand", updateCalendarWeekView: "updateCalendarWeekView", warnIfItHasConflict: "warnIfItHasConflict" }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 7, vars: 10, consts: [[1, "room-availability", "mck-row"], [1, "header"], [3, "mode", "backModal", "noSurvey", "closeCallback", 4, "ngIf"], [1, "room-availability", "scroll-container"], [3, "np", "viewDate", "events", "refresh", "dayStartHour", "dayEndHour", "eventTimesChanged", 4, "ngIf"], ["class", "mck-center", 3, "has-conflict", "margin-top", 4, "ngIf"], ["class", "footer mck-column mck-center", 4, "ngIf"], [3, "mode", "backModal", "noSurvey", "closeCallback"], [3, "viewDate", "events", "refresh", "dayStartHour", "dayEndHour", "eventTimesChanged"], [1, "mck-center"], [1, "mck-column"], [1, "intro"], [1, "cal-controls"], [1, "dir"], ["type", "image", "src", "assets/icon/chevron-left.svg", 3, "click"], [3, "click"], ["type", "image", "src", "assets/icon/chevron-right.svg", 3, "click"], [1, "date"], [1, "time-inputs-calendar", 3, "formControl", "icon_only", "fromDateTz", "timezone", "initialDateSelectionTz", "onSelect"], ["name", "overflow", "labelPosition", "after", "title", "Show weekends on the calendar", 1, "weekends", "mck-toggle", 3, "checked", "change"], ["id", "calendarScrollContainer", 1, "mck-scroll"], ["precision", "minutes", "snapDraggedEvents", "false", 3, "viewDate", "events", "refresh", "daysInWeek", "eventSnapSize", "headerTemplate", "eventTemplate", "eventTimesChanged", "hourSegmentClicked"], ["headerTemplate", ""], ["eventTemplate", ""], [1, "cal-day-headers"], ["class", "cal-header", "mwlDroppable", "", "dragOverClass", "cal-drag-over", 3, "cal-past", "cal-event-date", "cal-future", "cal-weekend", "show-weekend", "ngClass", "mwlClick", "drop", 4, "ngFor", "ngForOf", "ngForTrackBy"], ["mwlDroppable", "", "dragOverClass", "cal-drag-over", 1, "cal-header", 3, "ngClass", "mwlClick", "drop"], ["tabindex", "0", "role", "application", 1, "cal-event", 3, "ngStyle", "mwlCalendarTooltip", "tooltipPlacement", "tooltipEvent", "tooltipTemplate", "tooltipAppendToBody", "tooltipDelay", "mwlClick", "mwlKeydownEnter"], [1, "bumper"], [1, "berry", "top"], [1, "berry", "bot"], [3, "event", "customTemplate"], [3, "event", "customTemplate", "view"], [1, "footer", "mck-column", "mck-center"], ["mat-button", "", "color", "secondary", 1, "mck-secondary-button", 3, "click"], ["mat-button", "", "color", "primary", 1, "mck-primary-button", 3, "disabled", "click"]], template: function RoomAvailabilityPreviewComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 0); i0.ɵɵelementStart(1, "header", 1); i0.ɵɵtemplate(2, RoomAvailabilityPreviewComponent_a_topbar_header_2_Template, 1, 3, "a-topbar-header", 2); i0.ɵɵelementEnd(); i0.ɵɵelementStart(3, "div", 3); i0.ɵɵtemplate(4, RoomAvailabilityPreviewComponent_mwl_calendar_day_view_4_Template, 1, 7, "mwl-calendar-day-view", 4); - i0.ɵɵtemplate(5, RoomAvailabilityPreviewComponent_div_5_Template, 28, 26, "div", 5); + i0.ɵɵtemplate(5, RoomAvailabilityPreviewComponent_div_5_Template, 28, 28, "div", 5); i0.ɵɵtemplate(6, RoomAvailabilityPreviewComponent_div_6_Template, 6, 2, "div", 6); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { + i0.ɵɵclassProp("fit-in-modal", ctx.expanded && ctx.placeIntoModal); i0.ɵɵadvance(2); - i0.ɵɵproperty("ngIf", ctx.expanded); + i0.ɵɵproperty("ngIf", ctx.expanded && !ctx.placeIntoModal); i0.ɵɵadvance(1); - i0.ɵɵclassProp("expanded", ctx.expanded); + i0.ɵɵclassProp("expanded", ctx.expanded)("fixed", ctx.expanded && !ctx.placeIntoModal); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", !ctx.expanded); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.expanded); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.expanded); - } }, directives: [i2.NgIf, i3.TopbarHeaderComponent, i4.CalendarDayViewComponent, i5.DateTzDatePickerComponent, i6.NgControlStatus, i6.FormControlDirective, i7.MatSlideToggle, i4.CalendarWeekViewComponent, i2.NgForOf, i8.ɵa, i2.NgClass, i4.ɵl, i2.NgStyle, i4.ɵe, i4.ɵm, i4.ɵb, i4.ɵc, i9.MatButton], pipes: [i4.ɵi, i4.ɵj, i4.ɵk], styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n #calendarScrollContainer[_ngcontent-%COMP%] {\n padding-bottom: 130px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n #calendarScrollContainer[_ngcontent-%COMP%] {\n padding-bottom: 130px;\n }\n}\n.mck-alert[_ngcontent-%COMP%] {\n height: 100vh;\n}\n.room-availability[_ngcontent-%COMP%] {\n height: 368px;\n width: 100%;\n overflow: hidden;\n border: 1px solid #A19F9F;\n border-width: thin;\n z-index: 2;\n}\n.room-availability[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n z-index: 10;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n display: block;\n padding: 0;\n}\n.room-availability.expanded[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n height: 100%;\n z-index: 4;\n background-color: #f8f9fa;\n}\n.room-availability[_ngcontent-%COMP%] .mck-center[_ngcontent-%COMP%] {\n margin-top: 120px;\n}\n.room-availability[_ngcontent-%COMP%] .mck-center.has-conflict[_ngcontent-%COMP%] {\n margin-top: 145px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .room-availability[_ngcontent-%COMP%] .mck-center[_ngcontent-%COMP%] {\n margin-top: 80px;\n }\n .room-availability[_ngcontent-%COMP%] .mck-center.has-conflict[_ngcontent-%COMP%] {\n margin-top: 145px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .room-availability[_ngcontent-%COMP%] .mck-center[_ngcontent-%COMP%] {\n margin-top: 80px;\n }\n .room-availability[_ngcontent-%COMP%] .mck-center.has-conflict[_ngcontent-%COMP%] {\n margin-top: 145px;\n }\n}\n.room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] {\n margin: 0 auto 20px;\n}\n.room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n margin: 0 auto;\n width: 100%;\n max-width: 1024px;\n padding: 0;\n}\n.room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] > h1[_ngcontent-%COMP%] {\n font-size: 28px;\n font-weight: 400;\n margin: 0 0 10px 0;\n}\n.room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] > p[_ngcontent-%COMP%] {\n font-size: 18px;\n line-height: 22px;\n margin: 2px 0;\n}\n.room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] .intro[_ngcontent-%COMP%] {\n padding: 0 20px;\n padding-bottom: 20px;\n background-color: #f8f9fa;\n position: relative;\n top: 1px;\n z-index: 200;\n}\n.room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] .intro[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 801px) and (max-width: 1024px) {\n .room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] .intro[_ngcontent-%COMP%] {\n padding: 0 0 20px 0;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1049px) and (max-width: 1280px) {\n .room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] .intro[_ngcontent-%COMP%] {\n padding: 0 0 20px 0;\n }\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] {\n margin-top: 20px;\n position: relative;\n top: 1px;\n z-index: 200;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background: #f0f0f0;\n height: 66px;\n position: relative;\n padding: 0;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n position: absolute;\n top: 50%;\n transform: translate(-50%, -50%);\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div.date-picker[_ngcontent-%COMP%] {\n position: absolute;\n top: 70px;\n left: 33%;\n width: 340px;\n height: auto;\n background: #FFFFFF;\n box-shadow: 0px 16px 32px -1px rgba(5, 28, 44, 0.2), 0px 0px 1px rgba(5, 28, 44, 0.15);\n z-index: 10;\n padding: 20px;\n display: none;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div.date-picker[_ngcontent-%COMP%] {\n position: fixed;\n top: 5%;\n left: 5%;\n width: 90%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div.date-picker[_ngcontent-%COMP%] {\n position: fixed;\n top: 5%;\n left: 5%;\n width: 90%;\n }\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div.date-picker[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n border: 1px solid #D0D0D0;\n background-color: white;\n padding: 15px 35px;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div.date-picker.visible[_ngcontent-%COMP%] {\n display: block;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .dir[_ngcontent-%COMP%] {\n left: 90px;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .dir[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n vertical-align: middle;\n padding: 4px 3px;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .dir[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n background-color: white;\n border: 1px solid #B3B3B3;\n padding: 10px;\n cursor: pointer;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .date[_ngcontent-%COMP%] {\n left: 50%;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .date[_ngcontent-%COMP%] .time-inputs-calendar[_ngcontent-%COMP%] {\n position: absolute;\n right: -32px;\n top: -7px;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .date.right[_ngcontent-%COMP%] {\n top: 24px;\n right: 42px;\n left: auto;\n transform: none;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .date.right[_ngcontent-%COMP%] {\n right: 42px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .date.right[_ngcontent-%COMP%] {\n right: 42px;\n }\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .weekends[_ngcontent-%COMP%] {\n position: absolute;\n top: 20px;\n right: 20px;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .weekends.mobile[_ngcontent-%COMP%] {\n display: none;\n}\n.room-availability[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n overflow: hidden;\n overflow-y: scroll;\n height: calc(100vh - 385px);\n}\n.room-availability[_ngcontent-%COMP%] .mck-scroll.has-conflict[_ngcontent-%COMP%] {\n height: calc(100vh - 442px);\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .room-availability[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: calc(100vh - 370px);\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .room-availability[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: calc(100vh - 370px);\n }\n}\n.room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] {\n position: absolute;\n bottom: 0;\n left: 0;\n padding: 24px 16px;\n border: 1px solid #E6E6E6;\n height: 96px;\n width: 100%;\n background-color: white;\n margin: 0;\n z-index: 4;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] {\n height: auto;\n padding: 8px 10px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] {\n height: auto;\n padding: 8px 10px;\n }\n}\n.room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n max-width: 724px;\n}\n.room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex: 1;\n max-width: 337px;\n margin: 5px auto;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n max-width: none;\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n max-width: none;\n width: 100%;\n }\n}\n.room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n border: 1px solid #D0D0D0;\n margin-right: 10px;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWF2YWlsYWJpbGl0eS1wcmV2aWV3L3Jvb20tYXZhaWxhYmlsaXR5LXByZXZpZXcuY29tcG9uZW50LnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWF2YWlsYWJpbGl0eS1wcmV2aWV3L3Jvb20tYXZhaWxhYmlsaXR5LXByZXZpZXcuY29tcG9uZW50LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMkNBOztFQUFBO0FBcUNBOztzQkFBQTtBQWFBO0VBQ0ksZ0JBOUZNO0VBK0ZOLHVCQTdGYztBQ09sQjtBRHlGQTs7c0JBQUE7QUVrT0E7OztFQUFBO0FBM1RZO0VDUFo7SUFFUSxxQkFBQTtFRmlCTjtBQUNGO0FDYlk7RUNQWjtJQUVRLHFCQUFBO0VGc0JOO0FBQ0Y7QUVwQkE7RUFDSSxhQUFBO0FGdUJKO0FFckJBO0VBQ0ksYUFBQTtFQUNBLFdBQUE7RUFDQSxnQkFBQTtFQUNBLHlCQUFBO0VBQ0Esa0JBQUE7RUFDQSxVQUFBO0FGd0JKO0FFdkJJO0VBQ0ksV0FBQTtFQUNBLGtCQUFBO0VBQ0EsTUFBQTtFQUNBLE9BQUE7RUFDQSxXQUFBO0VBQ0EsY0FBQTtFQUNBLFVBQUE7QUZ5QlI7QUV2Qkk7RUFDSSxlQUFBO0VBQ0EsTUFBQTtFQUNBLE9BQUE7RUFDQSxZQUFBO0VBQ0EsVUFBQTtFQUNBLHlCQUFBO0FGeUJSO0FFdkJJO0VBQ0ksaUJBQUE7QUZ5QlI7QUV4QlE7RUFDSSxp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OUVRO0VBQ0kseUJBQUE7RUFDQSxrQkFBQTtBRmdGWiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWF2YWlsYWJpbGl0eS1wcmV2aWV3L3Jvb20tYXZhaWxhYmlsaXR5LXByZXZpZXcuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIkcHJpbWFyeTogIzFGNDBFNjtcbiRmb3JtLWxhYmVsOiAjMDUxQzJDO1xuJHNlY29uZGFyeS1sYWJlbDogIzc2NzY3NjtcbiRib3JkZXI6ICNCM0IzQjM7XG4kYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDogI0QwRDBEMDtcbiRjaGlwLWNvbG9yOiAjMzMzMzMzO1xuJHBsYWNlaG9sZGVyLWNvbG9yOiAjN0Y3RjdGO1xuJGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4kcGFnZS1iYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuJHNlbGVjdGVkLW9wdGlvbjogI0U2RTZFNjtcbiRjb2xvci1icmFuZC15ZWxsb3c6ICNmZmQwNDg7XG4kbGlnaHQteWVsbG93OiAjZmZmM2NlO1xuJGNvYWNobWFyay10ZXh0OiAjNmY0ZDAwO1xuJGVycm9yLWNvbG9yOiAjRTEyRTQwO1xuJG5vLWZpbHRlcnMtY29sb3I6ICNCQ0JDQkM7XG4kcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I6ICNGNEY0RjQ7XG4kcHJpbWFyeS1oaWdobGlnaHQ6ICMyMjUxRkY7XG4kc2Nyb2xsYmFyLWNvbG9yOiAjNzU3NTc1O1xuXG4kYXZhaWxhYmxlLWNvbG9yOiAjNUQ5RDUyO1xuJGF2YWlsYWJsZS1ieS1yZXF1ZXN0LWNvbG9yOiAjRjVCNTNGO1xuJGluLXVzZS1jb2xvcjogI0Q0NDgzRTtcbiRub3QtYm9va2FibGUtY29sb3I6ICNDQ0NDQ0M7XG5cbiRtb2RhbC1ib2R5LWhlYWRpbmc6ICM0RDRENEQ7XG4kYWxlcnQtb3ZlcmxheS1iZzogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2FjaG1hcmstYmc6ICNFQkVCRjY7XG4kY29hY2htYXJrLWRhcmstdGV4dDogIzFCMUIxOTtcbiRlcnJvci10ZXh0OiAjZmZmO1xuXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuXG4vLyA0cHhcbiRzcGFjaW5nLXNtYWxsZXN0OiAwLjI1cmVtO1xuXG4vLyA4cHhcbiRzcGFjaW5nLXh4c21hbGw6IDAuNXJlbTtcblxuLy8gMTJweFxuJHNwYWNpbmcteHNtYWxsOiAwLjc1cmVtO1xuXG4vLyAxNnB4XG4kc3BhY2luZy1zbWFsbDogMXJlbTtcblxuLy8gMjBweFxuJHNwYWNpbmctc21hbGwtbWVkaXVtOiAxLjI1cmVtO1xuXG4vLyAyNHB4XG4kc3BhY2luZy1tZWRpdW06IDEuNXJlbTtcblxuLy8gMjhweFxuJHNwYWNpbmctbWVkaXVtLWxhcmdlOiAxLjc1cmVtO1xuXG4vLyAzMnB4XG4kc3BhY2luZy1sYXJnZTogMnJlbTtcblxuLy8gNDhweFxuJHNwYWNpbmcteGxhcmdlOiAzcmVtO1xuXG4vLyA2NHB4XG4kc3BhY2luZy14eGxhcmdlOiA0cmVtO1xuXG4vLyA5NnB4XG4kc3BhY2luZy1sYXJnZXN0OiA2cmVtO1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGRldmljZS1tb2JpbGUtc2l6ZTogNDUwcHg7XG4kZGV2aWNlLXRhYmxldC1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFwdG9wLXNpemU6IDEwMjRweDtcblxuJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemU6IDgwMHB4O1xuJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemU6IDEwNDhweDtcbiRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplOiAxMjgwcHg7XG5cblxuOmV4cG9ydCB7XG4gICAgcHJpbWFyeTogJHByaW1hcnk7XG4gICAgc2Vjb25kYXJ5TGFiZWw6ICRzZWNvbmRhcnktbGFiZWw7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4kaWNvbi1zbWFsbDogMTZweDtcbiRpY29uLW1lZGl1bTogMjRweDtcbiRpY29uLWxhcmdlOiAzMnB4O1xuJGljb24teGxhcmdlOiA0OHB4O1xuIiwiLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAjY2FsZW5kYXJTY3JvbGxDb250YWluZXIge1xuICAgIHBhZGRpbmctYm90dG9tOiAxMzBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gICNjYWxlbmRhclNjcm9sbENvbnRhaW5lciB7XG4gICAgcGFkZGluZy1ib3R0b206IDEzMHB4O1xuICB9XG59XG5cbi5tY2stYWxlcnQge1xuICBoZWlnaHQ6IDEwMHZoO1xufVxuXG4ucm9vbS1hdmFpbGFiaWxpdHkge1xuICBoZWlnaHQ6IDM2OHB4O1xuICB3aWR0aDogMTAwJTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYm9yZGVyOiAxcHggc29saWQgI0ExOUY5RjtcbiAgYm9yZGVyLXdpZHRoOiB0aGluO1xuICB6LWluZGV4OiAyO1xufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5oZWFkZXIge1xuICB6LWluZGV4OiAxMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogMDtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eS5leHBhbmRlZCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHotaW5kZXg6IDQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmOGY5ZmE7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1jZW50ZXIge1xuICBtYXJnaW4tdG9wOiAxMjBweDtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSAubWNrLWNlbnRlci5oYXMtY29uZmxpY3Qge1xuICBtYXJnaW4tdG9wOiAxNDVweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5yb29tLWF2YWlsYWJpbGl0eSAubWNrLWNlbnRlciB7XG4gICAgbWFyZ2luLXRvcDogODBweDtcbiAgfVxuICAucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1jZW50ZXIuaGFzLWNvbmZsaWN0IHtcbiAgICBtYXJnaW4tdG9wOiAxNDVweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5yb29tLWF2YWlsYWJpbGl0eSAubWNrLWNlbnRlciB7XG4gICAgbWFyZ2luLXRvcDogODBweDtcbiAgfVxuICAucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1jZW50ZXIuaGFzLWNvbmZsaWN0IHtcbiAgICBtYXJnaW4tdG9wOiAxNDVweDtcbiAgfVxufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5tY2stY29sdW1uIHtcbiAgbWFyZ2luOiAwIGF1dG8gMjBweDtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSAubWNrLWNvbHVtbiA+IGRpdiB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIHBhZGRpbmc6IDA7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1jb2x1bW4gPiBoMSB7XG4gIGZvbnQtc2l6ZTogMjhweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbWFyZ2luOiAwIDAgMTBweCAwO1xufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5tY2stY29sdW1uID4gcCB7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgbGluZS1oZWlnaHQ6IDIycHg7XG4gIG1hcmdpbjogMnB4IDA7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1jb2x1bW4gLmludHJvIHtcbiAgcGFkZGluZzogMCAyMHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMjBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IDFweDtcbiAgei1pbmRleDogMjAwO1xufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5tY2stY29sdW1uIC5pbnRybyBwIHtcbiAgbWFyZ2luOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogODAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgLnJvb20tYXZhaWxhYmlsaXR5IC5tY2stY29sdW1uIC5pbnRybyB7XG4gICAgcGFkZGluZzogMCAwIDIwcHggMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDEwNDlweCkgYW5kIChtYXgtd2lkdGg6IDEyODBweCkge1xuICAucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1jb2x1bW4gLmludHJvIHtcbiAgICBwYWRkaW5nOiAwIDAgMjBweCAwO1xuICB9XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLmNhbC1jb250cm9scyB7XG4gIG1hcmdpbi10b3A6IDIwcHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAxcHg7XG4gIHotaW5kZXg6IDIwMDtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSAuY2FsLWNvbnRyb2xzID4gZGl2IHtcbiAgYmFja2dyb3VuZDogI2YwZjBmMDtcbiAgaGVpZ2h0OiA2NnB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmc6IDA7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLmNhbC1jb250cm9scyA+IGRpdiA+IGRpdiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5jYWwtY29udHJvbHMgPiBkaXYuZGF0ZS1waWNrZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNzBweDtcbiAgbGVmdDogMzMlO1xuICB3aWR0aDogMzQwcHg7XG4gIGhlaWdodDogYXV0bztcbiAgYmFja2dyb3VuZDogI0ZGRkZGRjtcbiAgYm94LXNoYWRvdzogMHB4IDE2cHggMzJweCAtMXB4IHJnYmEoNSwgMjgsIDQ0LCAwLjIpLCAwcHggMHB4IDFweCByZ2JhKDUsIDI4LCA0NCwgMC4xNSk7XG4gIHotaW5kZXg6IDEwO1xuICBwYWRkaW5nOiAyMHB4O1xuICBkaXNwbGF5OiBub25lO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLnJvb20tYXZhaWxhYmlsaXR5IC5jYWwtY29udHJvbHMgPiBkaXYuZGF0ZS1waWNrZXIge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB0b3A6IDUlO1xuICAgIGxlZnQ6IDUlO1xuICAgIHdpZHRoOiA5MCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAucm9vbS1hdmFpbGFiaWxpdHkgLmNhbC1jb250cm9scyA+IGRpdi5kYXRlLXBpY2tlciB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHRvcDogNSU7XG4gICAgbGVmdDogNSU7XG4gICAgd2lkdGg6IDkwJTtcbiAgfVxufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5jYWwtY29udHJvbHMgPiBkaXYuZGF0ZS1waWNrZXIgYnV0dG9uIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDE1cHggMzVweDtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSAuY2FsLWNvbnRyb2xzID4gZGl2LmRhdGUtcGlja2VyLnZpc2libGUge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSAuY2FsLWNvbnRyb2xzID4gZGl2IC5kaXIge1xuICBsZWZ0OiA5MHB4O1xufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5jYWwtY29udHJvbHMgPiBkaXYgLmRpciBpbnB1dCB7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHBhZGRpbmc6IDRweCAzcHg7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLmNhbC1jb250cm9scyA+IGRpdiAuZGlyIGJ1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXI6IDFweCBzb2xpZCAjQjNCM0IzO1xuICBwYWRkaW5nOiAxMHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLmNhbC1jb250cm9scyA+IGRpdiAuZGF0ZSB7XG4gIGxlZnQ6IDUwJTtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSAuY2FsLWNvbnRyb2xzID4gZGl2IC5kYXRlIC50aW1lLWlucHV0cy1jYWxlbmRhciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IC0zMnB4O1xuICB0b3A6IC03cHg7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLmNhbC1jb250cm9scyA+IGRpdiAuZGF0ZS5yaWdodCB7XG4gIHRvcDogMjRweDtcbiAgcmlnaHQ6IDQycHg7XG4gIGxlZnQ6IGF1dG87XG4gIHRyYW5zZm9ybTogbm9uZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5yb29tLWF2YWlsYWJpbGl0eSAuY2FsLWNvbnRyb2xzID4gZGl2IC5kYXRlLnJpZ2h0IHtcbiAgICByaWdodDogNDJweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5yb29tLWF2YWlsYWJpbGl0eSAuY2FsLWNvbnRyb2xzID4gZGl2IC5kYXRlLnJpZ2h0IHtcbiAgICByaWdodDogNDJweDtcbiAgfVxufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5jYWwtY29udHJvbHMgPiBkaXYgLndlZWtlbmRzIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDIwcHg7XG4gIHJpZ2h0OiAyMHB4O1xufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5jYWwtY29udHJvbHMgPiBkaXYgLndlZWtlbmRzLm1vYmlsZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1zY3JvbGwge1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gIGhlaWdodDogY2FsYygxMDB2aCAtIDM4NXB4KTtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSAubWNrLXNjcm9sbC5oYXMtY29uZmxpY3Qge1xuICBoZWlnaHQ6IGNhbGMoMTAwdmggLSA0NDJweCk7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1zY3JvbGwge1xuICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDM3MHB4KTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5yb29tLWF2YWlsYWJpbGl0eSAubWNrLXNjcm9sbCB7XG4gICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMzcwcHgpO1xuICB9XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLmZvb3RlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICBwYWRkaW5nOiAyNHB4IDE2cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gIGhlaWdodDogOTZweDtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBtYXJnaW46IDA7XG4gIHotaW5kZXg6IDQ7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAucm9vbS1hdmFpbGFiaWxpdHkgLmZvb3RlciB7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIHBhZGRpbmc6IDhweCAxMHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLnJvb20tYXZhaWxhYmlsaXR5IC5mb290ZXIge1xuICAgIGhlaWdodDogYXV0bztcbiAgICBwYWRkaW5nOiA4cHggMTBweDtcbiAgfVxufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5mb290ZXIgPiBkaXYge1xuICBkaXNwbGF5OiBmbGV4O1xuICBtYXgtd2lkdGg6IDcyNHB4O1xufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5mb290ZXIgYnV0dG9uIHtcbiAgZmxleDogMTtcbiAgbWF4LXdpZHRoOiAzMzdweDtcbiAgbWFyZ2luOiA1cHggYXV0bztcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLnJvb20tYXZhaWxhYmlsaXR5IC5mb290ZXIgYnV0dG9uIHtcbiAgICBtYXgtd2lkdGg6IG5vbmU7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkgYW5kIChtYXgtd2lkdGg6IDEwNDhweCkge1xuICAucm9vbS1hdmFpbGFiaWxpdHkgLmZvb3RlciBidXR0b24ge1xuICAgIG1heC13aWR0aDogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5mb290ZXIgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gIG1hcmdpbi1yaWdodDogMTBweDtcbn0iLCJAaW1wb3J0IFwidmFyc1wiO1xuXG5AbWl4aW4gcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkc2l6ZSwgJHF1YWxpZmllcikge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQGlmICgkcXVhbGlmaWVyID09IG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2UgaWYgKCRxdWFsaWZpZXIgPT0gbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1heC13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuQG1peGluIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkbWluLCAkbWF4KSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyB0aGlzIGlzIGEgY29weSBvZiByZXNwb25kLXRvLiB3ZSBkb24ndCB3YW50IHRvIHByZXNlcnZlIHRoYXQgbWV0aG9kIHNpbmNlIHRoZSBicmVha3BvaW50cyBtYXkgZGl2ZXJnZSBmcm9tIHRoZSBvbGQgVUkuXG5AbWl4aW4gaXMtc2NyZWVuLXNpemUoJG1lZGlhOiBhbGwsICRvcmllbnRhdGlvbjogbm9uZSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5cbkBtaXhpbiBwYWdlLXBhZGRpbmcge1xuICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctc21hbGw7XG4gICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctc21hbGw7XG59XG5cbi8vIEZvbnQgTWl4aW5zXG4kZm9udC1tY2tpbnNleS1zYW5zOiBcIk1jS2luc2V5IFNhbnNcIjtcbiRmb250LXRoZWluaGFyZHQ6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuJGZvbnQtYm93ZXI6IFwiQm93ZXJcIjtcblxuQG1peGluIGJvd2VyLWJvbGQge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1ib3dlcjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gbWNraW5zZXktc2FucyB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIGRpc3BsYXktMSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNHJlbTsgLy8gNjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODc7IC8vIDc2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTIge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTMge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2MHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNCB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDNyZW07IC8vIDQ4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNjY7IC8vIDU2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjRweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMwcHhcbiAgICBsaW5lLWhlaWdodDogMS44MzM7IC8vIDM0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY0MjsgLy8gNDBweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0xIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNDhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNzVyZW07IC8vIDQ0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA1MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0yIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjExMTsgLy8gNDRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDQ4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTMge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMjI7IC8vIDQ0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTUge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTYge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTU7IC8vIDI4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBib2R5LWRlZmF1bHQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjZweFxuICAgIH1cbn1cblxuLy8vIERvZXNudCBleGlzdCBpbiBNRFMuXG5AbWl4aW4gYm9keS10aW55IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTsgLy8gMTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDIwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBmb3JtLWxhYmVsIHtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC10aGVpbmhhcmR0O1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBjb2xvcjogJHBsYWNlaG9sZGVyLWNvbG9yO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG59XG5cbkBtaXhpbiBjaGlwLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gY2hlY2tib3gtbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICBjb2xvcjogYmxhY2s7XG59XG5cbi8vIGJvcmRlcnNcblxuQG1peGluIG1jay1jaGVja2JveC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stdGhpbi1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYm9yZGVyLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQtbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlci1saWdodDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cblxuLy8gZnVuY3Rpb25zXG5cbi8qKlxuICogTWFrZXMgdGV4dCBoYXZlIG1heGltdW0gbGluZXMgd2l0aCBlbGxpcHNpcy4gV29ya3Mgb24gbW9zdCBtb2Rlcm4gYnJvd3NlcnMgZXhjZXB0XG4gKiBvZiBGaXJlZm94Li5cbiAqL1xuQG1peGluIG1heC1saW5lcygkY291bnQpIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIC13ZWJraXQtbGluZS1jbGFtcDogJGNvdW50O1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG59XG5cbi8vIGltYWdlc1xuQG1peGluIG1jay1pY29uKCR3aWR0aCwgJGFzc2V0LCAkaGVpZ2h0OiAkd2lkdGgsICAkYXNzZXRQYXRoOiBcImxpYnMvdWkvc3JjL2xpYi9pY29uc1wiLCkge1xuICAgIHdpZHRoOiAkd2lkdGg7XG4gICAgaGVpZ2h0OiAkaGVpZ2h0O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiN7JGFzc2V0UGF0aH0vI3skYXNzZXR9XCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbn1cblxuXG5AbWl4aW4gbWNrLXNtYWxsLWljb24oJG1vYmlsZS1hc3NldCwgJGRlc2t0b3AtYXNzZXQ6ICRtb2JpbGUtYXNzZXQpIHtcbiAgICBAaW5jbHVkZSBtY2staWNvbigxNnB4LCAkYXNzZXQ6ICRtb2JpbGUtYXNzZXQpO1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBAaW5jbHVkZSBtY2staWNvbigyNHB4LCAkYXNzZXQ6ICRkZXNrdG9wLWFzc2V0KTtcbiAgICB9XG59XG5cbi8vIHNrZWxldG9uXG5AbWl4aW4gc2tlbGV0b24tYmcge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1pbWFnZS1zaXplIHtcbiAgICB3aWR0aDogODFweDtcbiAgICBoZWlnaHQ6IDgycHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAyMTlweDtcbiAgICAgICAgaGVpZ2h0OiAxMTlweDtcbiAgICB9XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1zdGF0dXMtc2l6ZSB7XG4gICAgd2lkdGg6IDExN3B4O1xuICAgIGhlaWdodDogNzhweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDExN3B4O1xuICAgICAgICBoZWlnaHQ6IDc4cHg7XG4gICAgfVxufVxuIiwiQGltcG9ydCBcImxpYnMvdWkvc3JjL2xpYi9taXhpbnNcIjtcblxuI2NhbGVuZGFyU2Nyb2xsQ29udGFpbmVye1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTMwcHg7XG4gICAgfVxufVxuLm1jay1hbGVydCB7XG4gICAgaGVpZ2h0OiAxMDB2aDtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSB7XG4gICAgaGVpZ2h0OiAzNjhweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNBMTlGOUY7XG4gICAgYm9yZGVyLXdpZHRoOiB0aGluO1xuICAgIHotaW5kZXg6IDI7XG4gICAgLmhlYWRlciB7XG4gICAgICAgIHotaW5kZXg6IDEwO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgIH1cbiAgICAmLmV4cGFuZGVkIHtcbiAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgei1pbmRleDogNDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcbiAgICB9XG4gICAgLm1jay1jZW50ZXIge1xuICAgICAgICBtYXJnaW4tdG9wOiAxMjBweDtcbiAgICAgICAgJi5oYXMtY29uZmxpY3R7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAxNDVweDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDgwcHg7XG4gICAgICAgICAgICAmLmhhcy1jb25mbGljdHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAxNDVweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAubWNrLWNvbHVtbiB7XG4gICAgICAgIG1hcmdpbjogMCBhdXRvIDIwcHg7XG4gICAgICAgID4gZGl2IHtcbiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDEwMjRweDsgXG4gICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICB9XG4gICAgICAgID4gaDEge1xuICAgICAgICAgICAgZm9udC1zaXplOiAyOHB4O1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgICAgIG1hcmdpbjogMCAwIDEwcHggMDtcbiAgICAgICAgfVxuICAgICAgICA+IHAge1xuICAgICAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgICAgICAgICBtYXJnaW46IDJweCAwO1xuICAgICAgICB9XG4gICAgICAgIC5pbnRybyB7XG4gICAgICAgICAgICBwYWRkaW5nOiAwIDIwcHg7XG4gICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMjBweDtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmOGY5ZmE7XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICB0b3A6IDFweDtcbiAgICAgICAgICAgIHotaW5kZXg6IDIwMDtcbiAgICAgICAgICAgIHAge1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGxhcHRvcCkge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAgMCAyMHB4IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLmNhbC1jb250cm9scyB7XG4gICAgICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgdG9wOiAxcHg7XG4gICAgICAgIHotaW5kZXg6IDIwMDtcbiAgICAgICAgXG4gICAgICAgID5kaXYge1xuICAgICAgICAgICAgYmFja2dyb3VuZDogI2YwZjBmMDtcbiAgICAgICAgICAgIGhlaWdodDogNjZweDtcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgICAgICA+ZGl2IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLmRhdGUtcGlja2VyIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgdG9wOiA3MHB4OyBcbiAgICAgICAgICAgICAgICBsZWZ0OiAzMyU7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDM0MHB4O1xuICAgICAgICAgICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRkZGRkZGO1xuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IDBweCAxNnB4IDMycHggLTFweCByZ2JhKDUsIDI4LCA0NCwgMC4yKSwgMHB4IDBweCAxcHggcmdiYSg1LCAyOCwgNDQsIDAuMTUpO1xuICAgICAgICAgICAgICAgIHotaW5kZXg6IDEwO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICAgICAgICAgICAgICB0b3A6IDUlOyBcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogNSU7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiA5MCU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNXB4IDM1cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICYudmlzaWJsZSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC5kaXIge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDkwcHg7XG4gICAgICAgICAgICAgICAgaW5wdXQge1xuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiA0cHggM3B4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBidXR0b24ge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0IzQjNCMztcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMTBweDtcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC5kYXRlIHtcbiAgICAgICAgICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgICAgICAgICAgLnRpbWUtaW5wdXRzLWNhbGVuZGFyIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgICAgICByaWdodDogLTMycHg7XG4gICAgICAgICAgICAgICAgICAgIHRvcDogLTdweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJi5yaWdodCB7XG4gICAgICAgICAgICAgICAgICAgIHRvcDogMjRweDtcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IDQycHg7XG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IGF1dG87XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogbm9uZTtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodDogNDJweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC53ZWVrZW5kcyB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIHRvcDogMjBweDtcbiAgICAgICAgICAgICAgICByaWdodDogMjBweDtcbiAgICAgICAgICAgICAgICAmLm1vYmlsZSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAgICAgICAgICBcbiAgICAgICAgfVxuXG4gICAgfVxuICAgIC5tY2stc2Nyb2xsIHtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwdmggLSAzODVweCk7XG4gICAgICAgICYuaGFzLWNvbmZsaWN0IHtcbiAgICAgICAgICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDQ0MnB4KTtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDM3MHB4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAuZm9vdGVyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHBhZGRpbmc6IDI0cHggMTZweDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgICAgICAgaGVpZ2h0OiA5NnB4O1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgei1pbmRleDogNDtcbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICAgICAgICBwYWRkaW5nOiA4cHggMTBweDtcbiAgICAgICAgfVxuICAgICAgICA+IGRpdiB7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgbWF4LXdpZHRoOiA3MjRweDtcbiAgICAgICAgfVxuICAgICAgICBidXR0b24ge1xuICAgICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICAgIG1heC13aWR0aDogMzM3cHg7XG4gICAgICAgICAgICBtYXJnaW46IDVweCBhdXRvO1xuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUodGFibGV0KSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiBub25lO1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJ1dHRvbjpudGgtY2hpbGQoMSkge1xuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG4iXX0= */"], changeDetection: 0 }); + } }, directives: [i2.NgIf, i3.TopbarHeaderComponent, i4.CalendarDayViewComponent, i5.DateTzDatePickerComponent, i6.NgControlStatus, i6.FormControlDirective, i7.MatSlideToggle, i4.CalendarWeekViewComponent, i2.NgForOf, i8.ɵa, i2.NgClass, i4.ɵl, i2.NgStyle, i4.ɵe, i4.ɵm, i4.ɵb, i4.ɵc, i9.MatButton], pipes: [i4.ɵi, i4.ɵj, i4.ɵk], styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n.mck-alert[_ngcontent-%COMP%] {\n height: 100vh;\n}\n.room-availability[_ngcontent-%COMP%] {\n height: 368px;\n width: 100%;\n overflow: hidden;\n border: 1px solid #A19F9F;\n border-width: thin;\n z-index: 2;\n}\n.room-availability[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n z-index: 10;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n display: block;\n padding: 0;\n}\n.room-availability.expanded[_ngcontent-%COMP%] {\n position: relative;\n top: 0;\n left: 0;\n height: 100%;\n z-index: 4;\n background-color: #f8f9fa;\n}\n.room-availability.fixed[_ngcontent-%COMP%] {\n position: fixed;\n}\n.room-availability.fit-in-modal[_ngcontent-%COMP%] {\n height: 93vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .room-availability.fit-in-modal[_ngcontent-%COMP%] {\n height: 100vh;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .room-availability.fit-in-modal[_ngcontent-%COMP%] {\n height: 100vh;\n }\n}\n.room-availability[_ngcontent-%COMP%] .mck-center.has-conflict[_ngcontent-%COMP%] {\n margin-top: 145px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .room-availability[_ngcontent-%COMP%] .mck-center.has-conflict[_ngcontent-%COMP%] {\n margin-top: 145px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .room-availability[_ngcontent-%COMP%] .mck-center.has-conflict[_ngcontent-%COMP%] {\n margin-top: 145px;\n }\n}\n.room-availability[_ngcontent-%COMP%] .mck-center.margin-top[_ngcontent-%COMP%] {\n margin-top: 120px;\n}\n.room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] {\n margin: 0 auto 20px;\n}\n.room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n margin: 0 auto;\n width: 100%;\n max-width: 1024px;\n padding: 0;\n}\n.room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] > h1[_ngcontent-%COMP%] {\n font-size: 28px;\n font-weight: 400;\n margin: 0 0 10px 0;\n}\n.room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] > p[_ngcontent-%COMP%] {\n font-size: 18px;\n line-height: 22px;\n margin: 2px 0;\n}\n.room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] .intro[_ngcontent-%COMP%] {\n padding: 0 20px;\n padding-bottom: 20px;\n background-color: #f8f9fa;\n position: relative;\n top: 1px;\n z-index: 200;\n}\n.room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] .intro[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 801px) and (max-width: 1024px) {\n .room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] .intro[_ngcontent-%COMP%] {\n padding: 0 0 20px 0;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1049px) and (max-width: 1280px) {\n .room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] .intro[_ngcontent-%COMP%] {\n padding: 0 0 20px 0;\n }\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] {\n margin-top: 20px;\n position: relative;\n top: 1px;\n z-index: 200;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background: #f0f0f0;\n height: 66px;\n position: relative;\n padding: 0;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n position: absolute;\n top: 50%;\n transform: translate(-50%, -50%);\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div.date-picker[_ngcontent-%COMP%] {\n position: absolute;\n top: 70px;\n left: 33%;\n width: 340px;\n height: auto;\n background: #FFFFFF;\n box-shadow: 0px 16px 32px -1px rgba(5, 28, 44, 0.2), 0px 0px 1px rgba(5, 28, 44, 0.15);\n z-index: 10;\n padding: 20px;\n display: none;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div.date-picker[_ngcontent-%COMP%] {\n position: fixed;\n top: 5%;\n left: 5%;\n width: 90%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div.date-picker[_ngcontent-%COMP%] {\n position: fixed;\n top: 5%;\n left: 5%;\n width: 90%;\n }\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div.date-picker[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n border: 1px solid #D0D0D0;\n background-color: white;\n padding: 15px 35px;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div.date-picker.visible[_ngcontent-%COMP%] {\n display: block;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .dir[_ngcontent-%COMP%] {\n left: 90px;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .dir[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n vertical-align: middle;\n padding: 4px 3px;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .dir[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n background-color: white;\n border: 1px solid #B3B3B3;\n padding: 10px;\n cursor: pointer;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .date[_ngcontent-%COMP%] {\n left: 50%;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .date[_ngcontent-%COMP%] .time-inputs-calendar[_ngcontent-%COMP%] {\n position: absolute;\n right: -32px;\n top: -7px;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .date.right[_ngcontent-%COMP%] {\n top: 24px;\n right: 42px;\n left: auto;\n transform: none;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .date.right[_ngcontent-%COMP%] {\n right: 42px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .date.right[_ngcontent-%COMP%] {\n right: 42px;\n }\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .weekends[_ngcontent-%COMP%] {\n position: absolute;\n top: 20px;\n right: 20px;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .weekends.mobile[_ngcontent-%COMP%] {\n display: none;\n}\n.room-availability[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n overflow: hidden;\n overflow-y: scroll;\n height: calc(100vh - 388px);\n}\n.room-availability[_ngcontent-%COMP%] .mck-scroll.has-conflict[_ngcontent-%COMP%] {\n height: calc(100vh - 442px);\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .room-availability[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: calc(100vh - 244px);\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .room-availability[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: calc(100vh - 244px);\n }\n}\n.room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] {\n position: absolute;\n bottom: 0;\n left: 0;\n padding: 24px 16px;\n border: 1px solid #E6E6E6;\n height: 96px;\n width: 100%;\n background-color: white;\n margin: 0;\n z-index: 4;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] {\n height: auto;\n padding: 8px 10px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] {\n height: auto;\n padding: 8px 10px;\n }\n}\n.room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n max-width: 724px;\n}\n.room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex: 1;\n max-width: 337px;\n margin: 5px auto;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n max-width: none;\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n max-width: none;\n width: 100%;\n }\n}\n.room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n border: 1px solid #D0D0D0;\n margin-right: 10px;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWF2YWlsYWJpbGl0eS1wcmV2aWV3L3Jvb20tYXZhaWxhYmlsaXR5LXByZXZpZXcuY29tcG9uZW50LnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWF2YWlsYWJpbGl0eS1wcmV2aWV3L3Jvb20tYXZhaWxhYmlsaXR5LXByZXZpZXcuY29tcG9uZW50LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMkNBOztFQUFBO0FBcUNBOztzQkFBQTtBQWFBO0VBQ0ksZ0JBOUZNO0VBK0ZOLHVCQTdGYztBQ09sQjtBRHlGQTs7c0JBQUE7QUVrT0E7OztFQUFBO0FDN1RBO0VBQ0ksYUFBQTtBRllKO0FFVkE7RUFDSSxhQUFBO0VBQ0EsV0FBQTtFQUNBLGdCQUFBO0VBQ0EseUJBQUE7RUFDQSxrQkFBQTtFQUNBLFVBQUE7QUZhSjtBRVpJO0VBQ0ksV0FBQTtFQUNBLGtCQUFBO0VBQ0EsTUFBQTtFQUNBLE9BQUE7RUFDQSxXQUFBO0VBQ0EsY0FBQTtFQUNBLFVBQUE7QUZjUjtBRVpJO0VBQ0ksa0JBQUE7RUFDQSxNQUFBO0VBQ0EsT0FBQTtFQUNBLFlBQUE7RUFDQSxVQUFBO0VBQ0EseUJBQUE7QUZjUjtBRVhJO0VBQ0ksZUFBQTtBRmFSO0FFWEk7RUFDSSxZQUFBO0FGYVI7QUMzQ1k7RUM2QlI7SUFHUSxhQUFBO0VGZVY7QUFDRjtBQ2hEWTtFQzZCUjtJQUdRLGFBQUE7RUZvQlY7QUFDRjtB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QUE7RUFDQSxrQkFBQTtBRmdFWiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWF2YWlsYWJpbGl0eS1wcmV2aWV3L3Jvb20tYXZhaWxhYmlsaXR5LXByZXZpZXcuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIkcHJpbWFyeTogIzFGNDBFNjtcbiRmb3JtLWxhYmVsOiAjMDUxQzJDO1xuJHNlY29uZGFyeS1sYWJlbDogIzc2NzY3NjtcbiRib3JkZXI6ICNCM0IzQjM7XG4kYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDogI0QwRDBEMDtcbiRjaGlwLWNvbG9yOiAjMzMzMzMzO1xuJHBsYWNlaG9sZGVyLWNvbG9yOiAjN0Y3RjdGO1xuJGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4kcGFnZS1iYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuJHNlbGVjdGVkLW9wdGlvbjogI0U2RTZFNjtcbiRjb2xvci1icmFuZC15ZWxsb3c6ICNmZmQwNDg7XG4kbGlnaHQteWVsbG93OiAjZmZmM2NlO1xuJGNvYWNobWFyay10ZXh0OiAjNmY0ZDAwO1xuJGVycm9yLWNvbG9yOiAjRTEyRTQwO1xuJG5vLWZpbHRlcnMtY29sb3I6ICNCQ0JDQkM7XG4kcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I6ICNGNEY0RjQ7XG4kcHJpbWFyeS1oaWdobGlnaHQ6ICMyMjUxRkY7XG4kc2Nyb2xsYmFyLWNvbG9yOiAjNzU3NTc1O1xuXG4kYXZhaWxhYmxlLWNvbG9yOiAjNUQ5RDUyO1xuJGF2YWlsYWJsZS1ieS1yZXF1ZXN0LWNvbG9yOiAjRjVCNTNGO1xuJGluLXVzZS1jb2xvcjogI0Q0NDgzRTtcbiRub3QtYm9va2FibGUtY29sb3I6ICNDQ0NDQ0M7XG5cbiRtb2RhbC1ib2R5LWhlYWRpbmc6ICM0RDRENEQ7XG4kYWxlcnQtb3ZlcmxheS1iZzogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2FjaG1hcmstYmc6ICNFQkVCRjY7XG4kY29hY2htYXJrLWRhcmstdGV4dDogIzFCMUIxOTtcbiRlcnJvci10ZXh0OiAjZmZmO1xuXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuXG4vLyA0cHhcbiRzcGFjaW5nLXNtYWxsZXN0OiAwLjI1cmVtO1xuXG4vLyA4cHhcbiRzcGFjaW5nLXh4c21hbGw6IDAuNXJlbTtcblxuLy8gMTJweFxuJHNwYWNpbmcteHNtYWxsOiAwLjc1cmVtO1xuXG4vLyAxNnB4XG4kc3BhY2luZy1zbWFsbDogMXJlbTtcblxuLy8gMjBweFxuJHNwYWNpbmctc21hbGwtbWVkaXVtOiAxLjI1cmVtO1xuXG4vLyAyNHB4XG4kc3BhY2luZy1tZWRpdW06IDEuNXJlbTtcblxuLy8gMjhweFxuJHNwYWNpbmctbWVkaXVtLWxhcmdlOiAxLjc1cmVtO1xuXG4vLyAzMnB4XG4kc3BhY2luZy1sYXJnZTogMnJlbTtcblxuLy8gNDhweFxuJHNwYWNpbmcteGxhcmdlOiAzcmVtO1xuXG4vLyA2NHB4XG4kc3BhY2luZy14eGxhcmdlOiA0cmVtO1xuXG4vLyA5NnB4XG4kc3BhY2luZy1sYXJnZXN0OiA2cmVtO1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGRldmljZS1tb2JpbGUtc2l6ZTogNDUwcHg7XG4kZGV2aWNlLXRhYmxldC1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFwdG9wLXNpemU6IDEwMjRweDtcblxuJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemU6IDgwMHB4O1xuJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemU6IDEwNDhweDtcbiRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplOiAxMjgwcHg7XG5cblxuOmV4cG9ydCB7XG4gICAgcHJpbWFyeTogJHByaW1hcnk7XG4gICAgc2Vjb25kYXJ5TGFiZWw6ICRzZWNvbmRhcnktbGFiZWw7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4kaWNvbi1zbWFsbDogMTZweDtcbiRpY29uLW1lZGl1bTogMjRweDtcbiRpY29uLWxhcmdlOiAzMnB4O1xuJGljb24teGxhcmdlOiA0OHB4O1xuIiwiLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG4ubWNrLWFsZXJ0IHtcbiAgaGVpZ2h0OiAxMDB2aDtcbn1cblxuLnJvb20tYXZhaWxhYmlsaXR5IHtcbiAgaGVpZ2h0OiAzNjhweDtcbiAgd2lkdGg6IDEwMCU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJvcmRlcjogMXB4IHNvbGlkICNBMTlGOUY7XG4gIGJvcmRlci13aWR0aDogdGhpbjtcbiAgei1pbmRleDogMjtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSAuaGVhZGVyIHtcbiAgei1pbmRleDogMTA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDA7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkuZXhwYW5kZWQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgaGVpZ2h0OiAxMDAlO1xuICB6LWluZGV4OiA0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOWZhO1xufVxuLnJvb20tYXZhaWxhYmlsaXR5LmZpeGVkIHtcbiAgcG9zaXRpb246IGZpeGVkO1xufVxuLnJvb20tYXZhaWxhYmlsaXR5LmZpdC1pbi1tb2RhbCB7XG4gIGhlaWdodDogOTN2aDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5yb29tLWF2YWlsYWJpbGl0eS5maXQtaW4tbW9kYWwge1xuICAgIGhlaWdodDogMTAwdmg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAucm9vbS1hdmFpbGFiaWxpdHkuZml0LWluLW1vZGFsIHtcbiAgICBoZWlnaHQ6IDEwMHZoO1xuICB9XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1jZW50ZXIuaGFzLWNvbmZsaWN0IHtcbiAgbWFyZ2luLXRvcDogMTQ1cHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1jZW50ZXIuaGFzLWNvbmZsaWN0IHtcbiAgICBtYXJnaW4tdG9wOiAxNDVweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5yb29tLWF2YWlsYWJpbGl0eSAubWNrLWNlbnRlci5oYXMtY29uZmxpY3Qge1xuICAgIG1hcmdpbi10b3A6IDE0NXB4O1xuICB9XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1jZW50ZXIubWFyZ2luLXRvcCB7XG4gIG1hcmdpbi10b3A6IDEyMHB4O1xufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5tY2stY29sdW1uIHtcbiAgbWFyZ2luOiAwIGF1dG8gMjBweDtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSAubWNrLWNvbHVtbiA+IGRpdiB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIHBhZGRpbmc6IDA7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1jb2x1bW4gPiBoMSB7XG4gIGZvbnQtc2l6ZTogMjhweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbWFyZ2luOiAwIDAgMTBweCAwO1xufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5tY2stY29sdW1uID4gcCB7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgbGluZS1oZWlnaHQ6IDIycHg7XG4gIG1hcmdpbjogMnB4IDA7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1jb2x1bW4gLmludHJvIHtcbiAgcGFkZGluZzogMCAyMHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMjBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IDFweDtcbiAgei1pbmRleDogMjAwO1xufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5tY2stY29sdW1uIC5pbnRybyBwIHtcbiAgbWFyZ2luOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogODAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgLnJvb20tYXZhaWxhYmlsaXR5IC5tY2stY29sdW1uIC5pbnRybyB7XG4gICAgcGFkZGluZzogMCAwIDIwcHggMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDEwNDlweCkgYW5kIChtYXgtd2lkdGg6IDEyODBweCkge1xuICAucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1jb2x1bW4gLmludHJvIHtcbiAgICBwYWRkaW5nOiAwIDAgMjBweCAwO1xuICB9XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLmNhbC1jb250cm9scyB7XG4gIG1hcmdpbi10b3A6IDIwcHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAxcHg7XG4gIHotaW5kZXg6IDIwMDtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSAuY2FsLWNvbnRyb2xzID4gZGl2IHtcbiAgYmFja2dyb3VuZDogI2YwZjBmMDtcbiAgaGVpZ2h0OiA2NnB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmc6IDA7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLmNhbC1jb250cm9scyA+IGRpdiA+IGRpdiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5jYWwtY29udHJvbHMgPiBkaXYuZGF0ZS1waWNrZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNzBweDtcbiAgbGVmdDogMzMlO1xuICB3aWR0aDogMzQwcHg7XG4gIGhlaWdodDogYXV0bztcbiAgYmFja2dyb3VuZDogI0ZGRkZGRjtcbiAgYm94LXNoYWRvdzogMHB4IDE2cHggMzJweCAtMXB4IHJnYmEoNSwgMjgsIDQ0LCAwLjIpLCAwcHggMHB4IDFweCByZ2JhKDUsIDI4LCA0NCwgMC4xNSk7XG4gIHotaW5kZXg6IDEwO1xuICBwYWRkaW5nOiAyMHB4O1xuICBkaXNwbGF5OiBub25lO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLnJvb20tYXZhaWxhYmlsaXR5IC5jYWwtY29udHJvbHMgPiBkaXYuZGF0ZS1waWNrZXIge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB0b3A6IDUlO1xuICAgIGxlZnQ6IDUlO1xuICAgIHdpZHRoOiA5MCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAucm9vbS1hdmFpbGFiaWxpdHkgLmNhbC1jb250cm9scyA+IGRpdi5kYXRlLXBpY2tlciB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHRvcDogNSU7XG4gICAgbGVmdDogNSU7XG4gICAgd2lkdGg6IDkwJTtcbiAgfVxufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5jYWwtY29udHJvbHMgPiBkaXYuZGF0ZS1waWNrZXIgYnV0dG9uIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDE1cHggMzVweDtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSAuY2FsLWNvbnRyb2xzID4gZGl2LmRhdGUtcGlja2VyLnZpc2libGUge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSAuY2FsLWNvbnRyb2xzID4gZGl2IC5kaXIge1xuICBsZWZ0OiA5MHB4O1xufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5jYWwtY29udHJvbHMgPiBkaXYgLmRpciBpbnB1dCB7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHBhZGRpbmc6IDRweCAzcHg7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLmNhbC1jb250cm9scyA+IGRpdiAuZGlyIGJ1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXI6IDFweCBzb2xpZCAjQjNCM0IzO1xuICBwYWRkaW5nOiAxMHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLmNhbC1jb250cm9scyA+IGRpdiAuZGF0ZSB7XG4gIGxlZnQ6IDUwJTtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSAuY2FsLWNvbnRyb2xzID4gZGl2IC5kYXRlIC50aW1lLWlucHV0cy1jYWxlbmRhciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IC0zMnB4O1xuICB0b3A6IC03cHg7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLmNhbC1jb250cm9scyA+IGRpdiAuZGF0ZS5yaWdodCB7XG4gIHRvcDogMjRweDtcbiAgcmlnaHQ6IDQycHg7XG4gIGxlZnQ6IGF1dG87XG4gIHRyYW5zZm9ybTogbm9uZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5yb29tLWF2YWlsYWJpbGl0eSAuY2FsLWNvbnRyb2xzID4gZGl2IC5kYXRlLnJpZ2h0IHtcbiAgICByaWdodDogNDJweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5yb29tLWF2YWlsYWJpbGl0eSAuY2FsLWNvbnRyb2xzID4gZGl2IC5kYXRlLnJpZ2h0IHtcbiAgICByaWdodDogNDJweDtcbiAgfVxufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5jYWwtY29udHJvbHMgPiBkaXYgLndlZWtlbmRzIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDIwcHg7XG4gIHJpZ2h0OiAyMHB4O1xufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5jYWwtY29udHJvbHMgPiBkaXYgLndlZWtlbmRzLm1vYmlsZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1zY3JvbGwge1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gIGhlaWdodDogY2FsYygxMDB2aCAtIDM4OHB4KTtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSAubWNrLXNjcm9sbC5oYXMtY29uZmxpY3Qge1xuICBoZWlnaHQ6IGNhbGMoMTAwdmggLSA0NDJweCk7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1zY3JvbGwge1xuICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDI0NHB4KTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5yb29tLWF2YWlsYWJpbGl0eSAubWNrLXNjcm9sbCB7XG4gICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMjQ0cHgpO1xuICB9XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLmZvb3RlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICBwYWRkaW5nOiAyNHB4IDE2cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gIGhlaWdodDogOTZweDtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBtYXJnaW46IDA7XG4gIHotaW5kZXg6IDQ7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAucm9vbS1hdmFpbGFiaWxpdHkgLmZvb3RlciB7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIHBhZGRpbmc6IDhweCAxMHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLnJvb20tYXZhaWxhYmlsaXR5IC5mb290ZXIge1xuICAgIGhlaWdodDogYXV0bztcbiAgICBwYWRkaW5nOiA4cHggMTBweDtcbiAgfVxufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5mb290ZXIgPiBkaXYge1xuICBkaXNwbGF5OiBmbGV4O1xuICBtYXgtd2lkdGg6IDcyNHB4O1xufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5mb290ZXIgYnV0dG9uIHtcbiAgZmxleDogMTtcbiAgbWF4LXdpZHRoOiAzMzdweDtcbiAgbWFyZ2luOiA1cHggYXV0bztcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLnJvb20tYXZhaWxhYmlsaXR5IC5mb290ZXIgYnV0dG9uIHtcbiAgICBtYXgtd2lkdGg6IG5vbmU7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkgYW5kIChtYXgtd2lkdGg6IDEwNDhweCkge1xuICAucm9vbS1hdmFpbGFiaWxpdHkgLmZvb3RlciBidXR0b24ge1xuICAgIG1heC13aWR0aDogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5mb290ZXIgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gIG1hcmdpbi1yaWdodDogMTBweDtcbn0iLCJAaW1wb3J0IFwidmFyc1wiO1xuXG5AbWl4aW4gcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkc2l6ZSwgJHF1YWxpZmllcikge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQGlmICgkcXVhbGlmaWVyID09IG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2UgaWYgKCRxdWFsaWZpZXIgPT0gbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1heC13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuQG1peGluIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkbWluLCAkbWF4KSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyB0aGlzIGlzIGEgY29weSBvZiByZXNwb25kLXRvLiB3ZSBkb24ndCB3YW50IHRvIHByZXNlcnZlIHRoYXQgbWV0aG9kIHNpbmNlIHRoZSBicmVha3BvaW50cyBtYXkgZGl2ZXJnZSBmcm9tIHRoZSBvbGQgVUkuXG5AbWl4aW4gaXMtc2NyZWVuLXNpemUoJG1lZGlhOiBhbGwsICRvcmllbnRhdGlvbjogbm9uZSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5cbkBtaXhpbiBwYWdlLXBhZGRpbmcge1xuICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctc21hbGw7XG4gICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctc21hbGw7XG59XG5cbi8vIEZvbnQgTWl4aW5zXG4kZm9udC1tY2tpbnNleS1zYW5zOiBcIk1jS2luc2V5IFNhbnNcIjtcbiRmb250LXRoZWluaGFyZHQ6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuJGZvbnQtYm93ZXI6IFwiQm93ZXJcIjtcblxuQG1peGluIGJvd2VyLWJvbGQge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1ib3dlcjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gbWNraW5zZXktc2FucyB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIGRpc3BsYXktMSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNHJlbTsgLy8gNjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODc7IC8vIDc2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTIge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTMge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2MHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNCB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDNyZW07IC8vIDQ4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNjY7IC8vIDU2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjRweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMwcHhcbiAgICBsaW5lLWhlaWdodDogMS44MzM7IC8vIDM0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY0MjsgLy8gNDBweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0xIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNDhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNzVyZW07IC8vIDQ0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA1MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0yIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjExMTsgLy8gNDRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDQ4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTMge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMjI7IC8vIDQ0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTUge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTYge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTU7IC8vIDI4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBib2R5LWRlZmF1bHQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjZweFxuICAgIH1cbn1cblxuLy8vIERvZXNudCBleGlzdCBpbiBNRFMuXG5AbWl4aW4gYm9keS10aW55IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTsgLy8gMTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDIwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBmb3JtLWxhYmVsIHtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC10aGVpbmhhcmR0O1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBjb2xvcjogJHBsYWNlaG9sZGVyLWNvbG9yO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG59XG5cbkBtaXhpbiBjaGlwLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gY2hlY2tib3gtbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICBjb2xvcjogYmxhY2s7XG59XG5cbi8vIGJvcmRlcnNcblxuQG1peGluIG1jay1jaGVja2JveC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stdGhpbi1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYm9yZGVyLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQtbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlci1saWdodDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cblxuLy8gZnVuY3Rpb25zXG5cbi8qKlxuICogTWFrZXMgdGV4dCBoYXZlIG1heGltdW0gbGluZXMgd2l0aCBlbGxpcHNpcy4gV29ya3Mgb24gbW9zdCBtb2Rlcm4gYnJvd3NlcnMgZXhjZXB0XG4gKiBvZiBGaXJlZm94Li5cbiAqL1xuQG1peGluIG1heC1saW5lcygkY291bnQpIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIC13ZWJraXQtbGluZS1jbGFtcDogJGNvdW50O1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG59XG5cbi8vIGltYWdlc1xuQG1peGluIG1jay1pY29uKCR3aWR0aCwgJGFzc2V0LCAkaGVpZ2h0OiAkd2lkdGgsICAkYXNzZXRQYXRoOiBcImxpYnMvdWkvc3JjL2xpYi9pY29uc1wiLCkge1xuICAgIHdpZHRoOiAkd2lkdGg7XG4gICAgaGVpZ2h0OiAkaGVpZ2h0O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiN7JGFzc2V0UGF0aH0vI3skYXNzZXR9XCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbn1cblxuXG5AbWl4aW4gbWNrLXNtYWxsLWljb24oJG1vYmlsZS1hc3NldCwgJGRlc2t0b3AtYXNzZXQ6ICRtb2JpbGUtYXNzZXQpIHtcbiAgICBAaW5jbHVkZSBtY2staWNvbigxNnB4LCAkYXNzZXQ6ICRtb2JpbGUtYXNzZXQpO1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBAaW5jbHVkZSBtY2staWNvbigyNHB4LCAkYXNzZXQ6ICRkZXNrdG9wLWFzc2V0KTtcbiAgICB9XG59XG5cbi8vIHNrZWxldG9uXG5AbWl4aW4gc2tlbGV0b24tYmcge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1pbWFnZS1zaXplIHtcbiAgICB3aWR0aDogODFweDtcbiAgICBoZWlnaHQ6IDgycHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAyMTlweDtcbiAgICAgICAgaGVpZ2h0OiAxMTlweDtcbiAgICB9XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1zdGF0dXMtc2l6ZSB7XG4gICAgd2lkdGg6IDExN3B4O1xuICAgIGhlaWdodDogNzhweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDExN3B4O1xuICAgICAgICBoZWlnaHQ6IDc4cHg7XG4gICAgfVxufVxuIiwiQGltcG9ydCBcImxpYnMvdWkvc3JjL2xpYi9taXhpbnNcIjtcblxuI2NhbGVuZGFyU2Nyb2xsQ29udGFpbmVye1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAvLyBwYWRkaW5nLWJvdHRvbTogMTMwcHg7XG4gICAgfVxufVxuLm1jay1hbGVydCB7XG4gICAgaGVpZ2h0OiAxMDB2aDtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSB7XG4gICAgaGVpZ2h0OiAzNjhweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNBMTlGOUY7XG4gICAgYm9yZGVyLXdpZHRoOiB0aGluO1xuICAgIHotaW5kZXg6IDI7XG4gICAgLmhlYWRlciB7XG4gICAgICAgIHotaW5kZXg6IDEwO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgIH1cbiAgICAmLmV4cGFuZGVkIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgei1pbmRleDogNDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcblxuICAgIH1cbiAgICAmLmZpeGVke1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgfVxuICAgICYuZml0LWluLW1vZGFse1xuICAgICAgICBoZWlnaHQ6IDkzdmg7XG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAubWNrLWNlbnRlciB7XG4gICAgICAgXG4gICAgICAgICYuaGFzLWNvbmZsaWN0e1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogMTQ1cHg7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAvLyBtYXJnaW4tdG9wOiA4MHB4O1xuICAgICAgICAgICAgJi5oYXMtY29uZmxpY3R7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMTQ1cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLm1hcmdpbi10b3AgXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDEyMHB4O1xuICAgICAgICB9XG4gICAgfVxuICAgIC5tY2stY29sdW1uIHtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG8gMjBweDtcbiAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIG1heC13aWR0aDogMTAyNHB4OyBcbiAgICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIH1cbiAgICAgICAgPiBoMSB7XG4gICAgICAgICAgICBmb250LXNpemU6IDI4cHg7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICAgICAgbWFyZ2luOiAwIDAgMTBweCAwO1xuICAgICAgICB9XG4gICAgICAgID4gcCB7XG4gICAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMjJweDtcbiAgICAgICAgICAgIG1hcmdpbjogMnB4IDA7XG4gICAgICAgIH1cbiAgICAgICAgLmludHJvIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDAgMjBweDtcbiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAyMHB4O1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgIHRvcDogMXB4O1xuICAgICAgICAgICAgei1pbmRleDogMjAwO1xuICAgICAgICAgICAgcCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobGFwdG9wKSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMCAwIDIwcHggMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAuY2FsLWNvbnRyb2xzIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMjBweDtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB0b3A6IDFweDtcbiAgICAgICAgei1pbmRleDogMjAwO1xuICAgICAgICBcbiAgICAgICAgPmRpdiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuICAgICAgICAgICAgaGVpZ2h0OiA2NnB4O1xuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgICAgID5kaXYge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYuZGF0ZS1waWNrZXIge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICB0b3A6IDcwcHg7IFxuICAgICAgICAgICAgICAgIGxlZnQ6IDMzJTtcbiAgICAgICAgICAgICAgICB3aWR0aDogMzQwcHg7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGRkZGRkY7XG4gICAgICAgICAgICAgICAgYm94LXNoYWRvdzogMHB4IDE2cHggMzJweCAtMXB4IHJnYmEoNSwgMjgsIDQ0LCAwLjIpLCAwcHggMHB4IDFweCByZ2JhKDUsIDI4LCA0NCwgMC4xNSk7XG4gICAgICAgICAgICAgICAgei1pbmRleDogMTA7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMjBweDtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgICAgICAgICAgICAgIHRvcDogNSU7IFxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiA1JTtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDkwJTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnV0dG9uIHtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDE1cHggMzVweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJi52aXNpYmxlIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLmRpciB7XG4gICAgICAgICAgICAgICAgbGVmdDogOTBweDtcbiAgICAgICAgICAgICAgICBpbnB1dCB7XG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDRweCAzcHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjQjNCM0IzO1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMHB4O1xuICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLmRhdGUge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgICAgICAgICAudGltZS1pbnB1dHMtY2FsZW5kYXIge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAtMzJweDtcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAtN3B4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAmLnJpZ2h0IHtcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAyNHB4O1xuICAgICAgICAgICAgICAgICAgICByaWdodDogNDJweDtcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogYXV0bztcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBub25lO1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiA0MnB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLndlZWtlbmRzIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgdG9wOiAyMHB4O1xuICAgICAgICAgICAgICAgIHJpZ2h0OiAyMHB4O1xuICAgICAgICAgICAgICAgICYubW9iaWxlIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ICAgICAgICAgIFxuICAgICAgICB9XG5cbiAgICB9XG4gICAgLm1jay1zY3JvbGwge1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDM4OHB4KTtcbiAgICAgICAgJi5oYXMtY29uZmxpY3Qge1xuICAgICAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNDQycHgpO1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMjQ0cHgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC5mb290ZXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcGFkZGluZzogMjRweCAxNnB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICAgICAgICBoZWlnaHQ6IDk2cHg7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICB6LWluZGV4OiA0O1xuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgICAgIHBhZGRpbmc6IDhweCAxMHB4O1xuICAgICAgICB9XG4gICAgICAgID4gZGl2IHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDcyNHB4O1xuICAgICAgICB9XG4gICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAzMzdweDtcbiAgICAgICAgICAgIG1hcmdpbjogNXB4IGF1dG87XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZSh0YWJsZXQpIHtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IG5vbmU7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRDBEMEQwO1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbiJdfQ== */"], changeDetection: 0 }); /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(RoomAvailabilityPreviewComponent, [{ type: core_1.Component, args: [{ @@ -39671,6 +40000,8 @@ RoomAvailabilityPreviewComponent.ɵcmp = i0.ɵɵdefineComponent({ type: RoomAvai type: core_1.Output }], warnIfItHasConflict: [{ type: core_1.Output + }], placeIntoModal: [{ + type: core_1.Input }] }); })(); @@ -39965,11 +40296,12 @@ function RoomBookingDetailsFormComponent_ng_template_0_Template(rf, ctx) { if (r i0.ɵɵproperty("ngIf", !ctx_r0.checkingBreakdown && ctx_r0.available === false); } } class RoomBookingDetailsFormComponent extends ui_1.BaseTemplateComponent { - constructor(_spaces, _snackBar, store, vcRef, _users) { + constructor(_spaces, _snackBar, store, vcRef, _service, _users) { super(vcRef); this._spaces = _spaces; this._snackBar = _snackBar; this.store = store; + this._service = _service; this._users = _users; /** Number of characters needed before a search will start */ this.limit = 3; @@ -40214,13 +40546,18 @@ class RoomBookingDetailsFormComponent extends ui_1.BaseTemplateComponent { .split(' ') .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()) .join(' '); + let inputValueEmail = ''; + // Check if inputValue is a valid email + const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; + if (!emailRegex.test(inputValue)) { + // If not, replace all spaces with underscores and append a random guest email string + inputValueEmail = inputValue.replace(/\s+/g, '_') + `${Math.floor(Math.random() * 99999)}@guest.mckinsey.com`; + } // Check for character limit if ( // this.selectedOptions.value.some((option: SelectOption) => option.value === inputValue) || inputValue.length > 50) { - this._snackBar.open('Attendee name cannot exceed 50 characters', 'Close', { - duration: 5000, - }); + this._service.notifyWarn('Attendee name cannot exceed 50 characters'); return; } this.selectedOptions @@ -40234,7 +40571,7 @@ class RoomBookingDetailsFormComponent extends ui_1.BaseTemplateComponent { const color = inputValue.toLowerCase().includes('mckinsey.') ? 'internal' : 'external'; - opts.push(Object.assign(Object.assign({}, option), { value: inputValue, display: inputValue, shortDisplay: inputValue, meta: Object.assign(Object.assign({}, option.meta), { color }) })); + opts.push(Object.assign(Object.assign({}, option), { value: inputValueEmail, display: inputValue, shortDisplay: inputValue, meta: Object.assign(Object.assign({}, option.meta), { color }) })); } return opts; })) @@ -40316,7 +40653,7 @@ class RoomBookingDetailsFormComponent extends ui_1.BaseTemplateComponent { } } exports.RoomBookingDetailsFormComponent = RoomBookingDetailsFormComponent; -RoomBookingDetailsFormComponent.ɵfac = function RoomBookingDetailsFormComponent_Factory(t) { return new (t || RoomBookingDetailsFormComponent)(i0.ɵɵdirectiveInject(i1.SpacesService), i0.ɵɵdirectiveInject(i2.MatSnackBar), i0.ɵɵdirectiveInject(i3.Store), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i1.UsersService)); }; +RoomBookingDetailsFormComponent.ɵfac = function RoomBookingDetailsFormComponent_Factory(t) { return new (t || RoomBookingDetailsFormComponent)(i0.ɵɵdirectiveInject(i1.SpacesService), i0.ɵɵdirectiveInject(i2.MatSnackBar), i0.ɵɵdirectiveInject(i3.Store), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i1.ApplicationService), i0.ɵɵdirectiveInject(i1.UsersService)); }; RoomBookingDetailsFormComponent.ɵcmp = i0.ɵɵdefineComponent({ type: RoomBookingDetailsFormComponent, selectors: [["app-room-booking-details-form"]], viewQuery: function RoomBookingDetailsFormComponent_Query(rf, ctx) { if (rf & 1) { i0.ɵɵviewQuery(_c0, true); } if (rf & 2) { @@ -40324,7 +40661,7 @@ RoomBookingDetailsFormComponent.ɵcmp = i0.ɵɵdefineComponent({ type: RoomBooki i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.formRef = _t.first); } }, inputs: { limit: "limit", triggerSubmit: "triggerSubmit", booking: "booking" }, outputs: { submitForm: "submitForm", validateForm: "validateForm" }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 1, vars: 0, consts: [["id", "booking_form", 1, "mck-column", "mck-form-input-container", 3, "formGroup", "ngSubmit"], ["bookingForm", "", "formRef", "ngForm"], [1, "mck-row-flow", "flex-container"], [1, "field", "mck-column", "mck-form-input", "full-width"], ["for", "title", 3, "required"], ["appearance", "outline"], ["matInput", "", "name", "title", "formControlName", "title", "placeholder", "", 3, "required", "blur"], [1, "error-icon"], ["formControlName", "organiser", "label", "Host", 1, "level-selector", 3, "options", "required", "disabled"], [1, "row-with-spacing", "flex-row"], ["formControlName", "opt_out", "trigger", "hover", "position", "right", 3, "ngModel", "tooltip"], [1, "row-with-spacing"], ["errorMessage", "Attendees must be selected", "label", "Attendees", "placeHolder", "Type an e-mail or name", "formControlName", "attendees", 1, "attendees-input", 3, "required", "selectOnlyOneGroup", "options", "feedbackInput", "localFilter", "selectedOptions", "loading", "hideDropdownCarret", "feedbackOutput", "optionSelected", "chipsCleared"], [3, "click"], ["class", "hint", 4, "ngIf"], [1, "mck-row-flow", "row-with-spacing", "flex-row", "company-container"], [1, "field", "mck-column", "mck-form-input", "company-field"], ["label", "Company", "placeHolder", "e.g PlaceOS", "formControlName", "company", 3, "required", "selectOnlyOneGroup", "options", "feedbackInput", "localFilter", "selectedOptions", "hideDropdownCarret", "feedbackOutput", "optionSelected"], [1, "field", "mck-column", "mck-form-input"], ["for", "charge-code"], ["matInput", "", "name", "charge-code", "formControlName", "code", "placeholder", ""], ["for", "headcount"], ["matInput", "", "name", "head-count", "formControlName", "head_count", "placeholder", "", "type", "number", "numbersOnly", ""], [1, "mck-row-flow", "row-with-spacing"], ["for", "notes"], ["matInput", "", "name", "notes", "formControlName", "notes", 3, "blur"], ["class", " checking sb-status pulsate", 4, "ngIf"], ["class", "available sb-status", 4, "ngIf"], ["class", "sb-status", 4, "ngIf"], [1, "hint"], [1, "triangle"], [1, "checking", "sb-status", "pulsate"], [1, "available", "sb-status"], ["src", "assets/icon/accept-icon.svg"], [1, "sb-status"], ["src", "assets/icon/warning-icon.svg"]], template: function RoomBookingDetailsFormComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵtemplate(0, RoomBookingDetailsFormComponent_ng_template_0_Template, 59, 35, "ng-template"); - } }, directives: [i4.ɵangular_packages_forms_forms_y, i4.NgControlStatusGroup, i4.FormGroupDirective, i5.LabelComponent, i6.MatFormField, i7.MatInput, i4.DefaultValueAccessor, i4.NgControlStatus, i4.FormControlName, i4.RequiredValidator, i6.MatError, i8.SelectComponent, i9.MatCheckbox, i10.TooltipDirective, i11.AutoCompleteChipSelectItemComponent, i6.MatHint, i12.NgIf, i6.MatLabel, i13.NumbersOnlyDirective, i4.NumberValueAccessor], styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n.mck-inherit-font[_ngcontent-%COMP%] {\n font: inherit;\n}\n.mck-content-expand[_ngcontent-%COMP%], .mck-content-page[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n}\n.mck-content-expand-width[_ngcontent-%COMP%] {\n width: 100%;\n}\n.mck-content-expand-height[_ngcontent-%COMP%] {\n height: 100%;\n}\n.mck-content-with-footer-height[_ngcontent-%COMP%] {\n height: calc(100vh - 58px);\n}\n.mck-content-full-height[_ngcontent-%COMP%], .mck-content-page-container[_ngcontent-%COMP%] {\n height: 100vh;\n}\n.mck-content-page[_ngcontent-%COMP%] {\n background: #F8F9FA;\n}\n.mck-content-body[_ngcontent-%COMP%] {\n width: 100%;\n display: block;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-content-body[_ngcontent-%COMP%] {\n max-width: 1024px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-content-body[_ngcontent-%COMP%] {\n max-width: 1024px;\n }\n}\n.mck-content-group[_ngcontent-%COMP%] {\n padding-left: 1rem;\n padding-right: 1rem;\n width: 100%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-content-group[_ngcontent-%COMP%] {\n max-width: 759px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-content-group[_ngcontent-%COMP%] {\n max-width: 759px;\n }\n}\n.mck-shadow[_ngcontent-%COMP%] {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n}\n.mck-flex-1[_ngcontent-%COMP%] {\n flex: 1;\n}\n.mck-row[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .mck-row-flow[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n}\n.mck-row.mck-center-justify[_ngcontent-%COMP%], .mck-center-justify.mck-row-flow[_ngcontent-%COMP%], .mck-row.mck-center[_ngcontent-%COMP%], .mck-row.mck-button.mat-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .mck-center.mck-row-flow[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: center;\n}\n.mck-row.mck-center-align[_ngcontent-%COMP%], .mck-center-align.mck-row-flow[_ngcontent-%COMP%], .mck-row.mck-center[_ngcontent-%COMP%], .mck-row.mck-button.mat-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .mck-center.mck-row-flow[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n align-items: center;\n}\n.mck-row.mck-stretch[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mck-stretch.mat-form-field-infix[_ngcontent-%COMP%], .mck-stretch.mck-row-flow[_ngcontent-%COMP%] {\n align-items: stretch;\n}\n.mck-row-flow[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n}\n.mck-row.mck-scroll[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mck-scroll.mat-form-field-infix[_ngcontent-%COMP%], .mck-scroll.mck-row-flow[_ngcontent-%COMP%] {\n overflow-x: scroll;\n}\n.mck-column[_ngcontent-%COMP%], .mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n.mck-column.mck-center[_ngcontent-%COMP%], .mck-column.mck-button.mat-button[_ngcontent-%COMP%], .mck-column.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-column.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-column.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-column.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-column.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-center.mck-button.mat-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-button[_ngcontent-%COMP%], .mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-button.mat-stroked-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-center.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mck-column.mat-form-field-infix[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mck-button.mat-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: center;\n align-items: center;\n}\n.mck-column.mck-space-between[_ngcontent-%COMP%], .mck-space-between.mck-button.mat-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-space-between.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: space-between;\n}\n.mck-column.mck-stretch[_ngcontent-%COMP%], .mck-stretch.mck-button.mat-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-stretch.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n align-items: stretch;\n}\n.mck-column.mck-scroll[_ngcontent-%COMP%], .mck-scroll.mck-button.mat-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-scroll.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n overflow-y: scroll;\n overflow-y: overlay;\n}\n.mck-column.mck-flex-end[_ngcontent-%COMP%], .mck-flex-end.mck-button.mat-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-flex-end.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: flex-end;\n}\n.mck-overflow[_ngcontent-%COMP%] {\n overflow: auto;\n}\n.mck-bordered[_ngcontent-%COMP%], .mck-input[_ngcontent-%COMP%] {\n border-radius: 0;\n border: 1px solid #B3B3B3;\n}\n.mck-bordered[_ngcontent-%COMP%]:hover, .mck-input[_ngcontent-%COMP%]:hover {\n border-color: #464646;\n}\n.mck-bordered[_ngcontent-%COMP%]:focus, .mck-input[_ngcontent-%COMP%]:focus {\n border-color: #1F40E6;\n}\n.mck-bordered[disabled=true][_ngcontent-%COMP%], .mck-input[disabled=true][_ngcontent-%COMP%] {\n pointer-events: none;\n border-color: #f0f0f0;\n color: #ccc;\n}\n.mck-date-display[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n height: 43px;\n padding: 1rem 0.5rem;\n transition: border 200ms, box-shadow 200ms;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-form-field-wrapper[_ngcontent-%COMP%] {\n padding-bottom: 0.5rem;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] {\n min-width: auto !important;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n width: 100%;\n padding-top: 0.7rem !important;\n padding-bottom: 0.5rem !important;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] {\n min-height: 2.7rem;\n color: rgba(0, 0, 0, 0.27);\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n margin-top: 2px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-flex[_ngcontent-%COMP%] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-flex[_ngcontent-%COMP%] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 2rem;\n min-height: 2rem;\n }\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 2rem;\n min-height: 2rem;\n }\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field.mat-s[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-select[_ngcontent-%COMP%] {\n margin-top: 0.2rem;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-select[_ngcontent-%COMP%] .mat-select-arrow[_ngcontent-%COMP%] {\n visibility: hidden;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-select[_ngcontent-%COMP%] .mat-select-value[_ngcontent-%COMP%] > .mat-select-value-text[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 400;\n font-family: \"McKinsey Sans\";\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #B3B3B3;\n border-width: 1px;\n border-radius: 0;\n}\n.mck-form-input[_ngcontent-%COMP%] .available[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .available[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .available[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #3aa537;\n}\n.mck-form-input[_ngcontent-%COMP%] .booked[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .booked[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .booked[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #e12e41;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline-thick[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline-thick[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline-thick[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #1F40E6;\n border-width: 1px;\n border-radius: 0;\n}\n.mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-wrapper[_ngcontent-%COMP%] {\n padding-bottom: 0;\n}\n.mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #E12E40;\n}\n.mck-form-input[_ngcontent-%COMP%] mck-close-icon.mat-chip-remove.mat-chip-remove[_ngcontent-%COMP%] {\n opacity: 1;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-label[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 400;\n text-align: left;\n margin-bottom: 0.5rem;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-radio-button[_ngcontent-%COMP%] {\n margin-right: 1rem;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-radio-label-content[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-radio-outer-circle[_ngcontent-%COMP%] {\n border-color: #1F40E6 !important;\n border-width: 1px !important;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-radio-inner-circle[_ngcontent-%COMP%] {\n background-color: #1F40E6 !important;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-radio-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-radio-group[_ngcontent-%COMP%] > mat-radio-button[_ngcontent-%COMP%]:last-child {\n margin-right: 0;\n}\n.mck-form-input-container[_ngcontent-%COMP%] > .mck-form-input[_ngcontent-%COMP%], .mck-form-input-container[_ngcontent-%COMP%] > mck-select[_ngcontent-%COMP%] {\n margin-bottom: 0.5rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-form-input-container[_ngcontent-%COMP%] > .mck-form-input[_ngcontent-%COMP%], .mck-form-input-container[_ngcontent-%COMP%] > mck-select[_ngcontent-%COMP%] {\n margin-bottom: 1.75rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-form-input-container[_ngcontent-%COMP%] > .mck-form-input[_ngcontent-%COMP%], .mck-form-input-container[_ngcontent-%COMP%] > mck-select[_ngcontent-%COMP%] {\n margin-bottom: 1.75rem;\n }\n}\n.mck-form-input-container[_ngcontent-%COMP%] .mck-radio-select[_ngcontent-%COMP%] {\n margin-bottom: 1rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-form-input-container[_ngcontent-%COMP%] .mck-radio-select[_ngcontent-%COMP%] {\n margin-bottom: 1.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-form-input-container[_ngcontent-%COMP%] .mck-radio-select[_ngcontent-%COMP%] {\n margin-bottom: 1.5rem;\n }\n}\n.mck-form-input[_ngcontent-%COMP%] mat-chip.mat-standard-chip.mat-standard-chip[_ngcontent-%COMP%] {\n border-radius: 3px;\n min-height: 1.5rem;\n background-color: #333333;\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 0.75rem;\n line-height: 1.5rem;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input[_ngcontent-%COMP%] mat-chip.mat-standard-chip.mat-standard-chip[_ngcontent-%COMP%] {\n line-height: inherit;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input[_ngcontent-%COMP%] mat-chip.mat-standard-chip.mat-standard-chip[_ngcontent-%COMP%] {\n line-height: inherit;\n }\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox.mat-checkbox.mat-checkbox[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] {\n background-color: #D0D0D0;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n color: #B3B3B3;\n}\n.mck-borderless[_ngcontent-%COMP%] {\n border: none;\n}\n.mck-borderless[_ngcontent-%COMP%]:hover, .mck-borderless[_ngcontent-%COMP%]:focus, .mck-borderless[_ngcontent-%COMP%]:disabled {\n border: none;\n}\n.mck-select-panel[_ngcontent-%COMP%] {\n margin-top: 0 !important;\n border-radius: unset !important;\n margin-top: 35px !important;\n margin-left: 5px;\n}\n.mck-select-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] {\n padding-left: 0;\n padding-right: 0;\n}\n.mck-select-panel[_ngcontent-%COMP%] mat-option.mat-option-text[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-select-panel.mck-margin-top[_ngcontent-%COMP%] {\n margin-top: 1.5rem !important;\n}\n.mck-checkbox-panel.mat-autocomplete-panel.mat-autocomplete-panel[_ngcontent-%COMP%] {\n top: -10px;\n max-height: 278px;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option.mck-truncated[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] {\n padding-left: 0;\n padding-right: 0;\n line-height: 24px;\n height: unset;\n min-height: 36px;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n flex: 1;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n text-align: left;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option.mck-checkbox-group-header[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option.mck-checkbox-group-child[_ngcontent-%COMP%] {\n margin-left: 2rem;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] label.mat-checkbox-layout[_ngcontent-%COMP%] {\n width: 100%;\n padding-left: 16px;\n padding-right: 16px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] label.mat-checkbox-layout[_ngcontent-%COMP%] {\n padding-left: 2px;\n padding-right: 2px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] label.mat-checkbox-layout[_ngcontent-%COMP%] {\n padding-left: 2px;\n padding-right: 2px;\n }\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] div.mat-checkbox-frame.mat-checkbox-frame[_ngcontent-%COMP%] {\n border: 1px solid #B3B3B3;\n border-radius: 0;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox.mat-checkbox-checked[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background[_ngcontent-%COMP%] {\n background-color: #D0D0D0;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n color: #B3B3B3;\n text-align: left;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] .mat-checkbox-inner-container[_ngcontent-%COMP%] {\n width: 1.25rem;\n height: 1.25rem;\n}\n.mck-select-option-selected[_ngcontent-%COMP%] {\n font-weight: 500;\n font-family: \"McKinsey Sans\";\n color: black;\n background-color: #E6E6E6;\n}\n.mck-select-option-selected[_ngcontent-%COMP%] .mck-spacer-content[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n margin-right: 0.75rem;\n}\n.mck-select-option-unselected[_ngcontent-%COMP%] {\n font-weight: 400;\n font-family: \"McKinsey Sans\";\n}\n.mck-select-option-unselected.mck-ignore-disabled[_ngcontent-%COMP%] {\n color: black;\n}\n.mck-select-option-unselected[_ngcontent-%COMP%] .mck-spacer-content[_ngcontent-%COMP%] {\n visibility: hidden;\n margin-right: 0.75rem;\n}\n.mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n height: 40px;\n border-radius: 0;\n border: none;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n }\n}\n.mck-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: normal;\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n }\n}\n.mck-button.mat-button.mat-button.mck-short[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button[_ngcontent-%COMP%] {\n height: 32px;\n min-width: 83px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-short[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-short[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%] {\n height: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%] {\n height: 40px;\n }\n}\n.mck-button.mat-button.mat-button.mck-square[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-square[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n min-width: 32px;\n padding: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-square[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-square[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-square[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-square[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n }\n}\n.mck-primary-button.mat-button.mat-button[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n}\n.mck-primary-button.mat-button.mat-button[disabled][_ngcontent-%COMP%], .mck-primary-button.mat-button.mat-button.disabled[_ngcontent-%COMP%] {\n background-color: #D0D0D0;\n color: #757575;\n cursor: not-allowed;\n}\n.mck-primary-button.mat-button.mat-button[disabled][_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-primary-button.mat-button.mat-button.disabled[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: #757575;\n}\n.mck-primary-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: white;\n}\n.mck-secondary-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] {\n border: 1px solid #D0D0D0;\n border-radius: 0;\n border: 1px solid #2251FF;\n color: #2251FF;\n}\n.mck-secondary-button.mat-stroked-button.mat-stroked-button[disabled][_ngcontent-%COMP%], .mck-secondary-button.mat-stroked-button.mat-stroked-button.disabled[_ngcontent-%COMP%] {\n border: 1px solid #D0D0D0;\n color: #333333;\n cursor: not-allowed;\n}\n.mck-secondary-button.mat-button.mat-button[_ngcontent-%COMP%] {\n background-color: white;\n}\n.mck-secondary-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: #333333;\n}\n.mck-warning-button.mat-button.mat-button[_ngcontent-%COMP%] {\n background-color: #ffd048;\n}\n.mck-warning-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: black;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] {\n border: 2px solid #B3B3B3;\n border-radius: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding-left: 1.75rem;\n padding-right: 1.75rem;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%] {\n height: 32px;\n min-width: 83px;\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-primary[_ngcontent-%COMP%] {\n border-width: 1px;\n border-color: #1F40E6;\n color: #1F40E6;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-thin-border-light[_ngcontent-%COMP%] {\n border-color: #D0D0D0;\n border-width: 1px;\n}\n.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: normal;\n color: #1F40E6;\n}\n.mck-toggle-button[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n border: 1px solid #B3B3B3;\n border-color: #D0D0D0;\n min-width: 59px;\n background-color: white;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-toggle-button[_ngcontent-%COMP%] {\n min-width: 132px;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-toggle-button[_ngcontent-%COMP%] {\n min-width: 132px;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n }\n}\n.mck-toggle-button-selected[_ngcontent-%COMP%] {\n color: #1F40E6;\n}\n.mck-date-picker[_ngcontent-%COMP%] {\n width: 100% !important;\n height: 100% !important;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-date-picker[_ngcontent-%COMP%] {\n max-width: 23rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-date-picker[_ngcontent-%COMP%] {\n max-width: 23rem;\n }\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n color: #051C2C;\n margin-top: 1.25rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] {\n width: 2.375rem;\n height: 2rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] > .icon.icon[_ngcontent-%COMP%] {\n width: 1rem;\n height: 1rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] > .next.next[_ngcontent-%COMP%] {\n background-image: url('arrow-forward.svg');\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] > .previous.previous[_ngcontent-%COMP%] {\n background-image: url('arrow-backward.svg');\n}\n.mck-date-picker[_ngcontent-%COMP%] > .month[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .week[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n color: #767676;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date[_ngcontent-%COMP%] > .dot[_ngcontent-%COMP%] {\n display: none;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date.disabled[_ngcontent-%COMP%] {\n background-color: transparent;\n border-radius: 0;\n color: #767676;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date.active[_ngcontent-%COMP%] {\n border-radius: 0;\n background-color: #1F40E6;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date.non-month[_ngcontent-%COMP%] {\n color: #767676;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-spacer-content-expand-mobile[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-spacer-content-expand-mobile[_ngcontent-%COMP%] {\n display: none;\n }\n}\n.mck-spacer-content-divider[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n border-radius: 0;\n border-top: 1px solid #E6E6E6;\n border-bottom: 1px solid #E6E6E6;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] {\n background-color: #F0F0F0;\n border-bottom: none;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n background-image: url('chevron-close.svg');\n background-size: contain;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-close-large.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-close-large.svg');\n background-size: contain;\n }\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] {\n padding-left: 0;\n padding-right: 0;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 0.75rem;\n line-height: 1.4;\n padding-left: 1rem;\n padding-right: 1rem;\n text-align: left;\n color: black;\n font-weight: normal;\n padding-bottom: 0.5rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-size: 1rem;\n line-height: 1.6;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-size: 1rem;\n line-height: 1.6;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n }\n}\n.mck-expansion-panel[_ngcontent-%COMP%] mat-expansion-panel-header[_ngcontent-%COMP%] {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.mck-expansion-panel[_ngcontent-%COMP%] mat-expansion-panel-header[_ngcontent-%COMP%] > span.mat-content[_ngcontent-%COMP%] {\n align-items: center;\n}\n.mck-expansion-panel[_ngcontent-%COMP%] mat-panel-title[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n color: black;\n font-weight: normal;\n}\n.mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n background-image: url('chevron-open.svg');\n background-size: contain;\n transform: rotate(0deg);\n transition: transform 0.5s ease;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-open-large.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-open-large.svg');\n background-size: contain;\n }\n}\n.mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon.expanded[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n}\n.mck-icon-fill-open[_ngcontent-%COMP%] {\n fill: #1F40E6;\n}\n.mck-icon-fill-close[_ngcontent-%COMP%] {\n fill: #767676;\n}\n.mck-icon-fill-black[_ngcontent-%COMP%] {\n fill: black;\n stroke: black;\n}\n.mck-icon-fill-white[_ngcontent-%COMP%] {\n fill: white;\n stroke: white;\n}\n.mck-icon-fill-gray[_ngcontent-%COMP%] {\n fill: #333333;\n stroke: #333333;\n}\n.mck-min[_ngcontent-%COMP%] {\n max-width: 581px !important;\n width: 80vw;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-min[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-min[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-min[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-min[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-noexpand[_ngcontent-%COMP%] {\n max-width: 581px !important;\n width: 80vw !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-noexpand[_ngcontent-%COMP%] {\n width: calc(100vw - 32px) !important;\n max-height: 100vh;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-noexpand[_ngcontent-%COMP%] {\n width: calc(100vw - 32px) !important;\n max-height: 100vh;\n }\n}\n.mck-modal[_ngcontent-%COMP%] {\n max-width: 800px !important;\n width: 80vw;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-mini[_ngcontent-%COMP%] {\n max-width: 580px !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-mini[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-mini[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-mini[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-mini[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-survey[_ngcontent-%COMP%] {\n max-width: 691px !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-survey[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-survey[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-wide[_ngcontent-%COMP%] {\n max-width: 1024px !important;\n width: 100vw;\n height: 95vh;\n max-height: 100vh;\n}\n.mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] {\n background-color: #F8F9FA;\n padding: 0 !important;\n overflow: hidden;\n}\n.mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] {\n position: relative;\n right: 32px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-wide-manage-booking[_ngcontent-%COMP%] {\n max-width: 1024px !important;\n width: 100vw;\n max-height: 95vh;\n}\n.mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] {\n background-color: #F8F9FA;\n padding: 0 !important;\n overflow: hidden;\n}\n.mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] {\n position: relative;\n right: 32px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-alert[_ngcontent-%COMP%] {\n max-width: 100vw !important;\n width: 100vw;\n margin-left: 1rem;\n margin-right: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-alert[_ngcontent-%COMP%] {\n max-width: 100vw !important;\n width: 100vw;\n margin-left: 1rem;\n margin-right: 1rem;\n }\n}\n.mck-alert-backdrop[_ngcontent-%COMP%] {\n background: rgba(5, 28, 44, 0.85);\n}\n.mck-slide-toggle.mat-slide-toggle.mat-checked[_ngcontent-%COMP%]:not(.mat-disabled) .mat-slide-toggle-bar.mat-slide-toggle-bar[_ngcontent-%COMP%] {\n background-color: #2251FF;\n}\n.mck-slide-toggle.mat-slide-toggle.mat-checked[_ngcontent-%COMP%]:not(.mat-disabled) .mat-slide-toggle-thumb.mat-slide-toggle-thumb[_ngcontent-%COMP%] {\n background-color: white;\n}\n.mck-slide-toggle.mat-slide-toggle[_ngcontent-%COMP%] {\n height: auto;\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-content.mat-slide-toggle-content[_ngcontent-%COMP%] {\n flex: 1;\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n white-space: normal;\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-thumb.mat-slide-toggle-thumb[_ngcontent-%COMP%] {\n width: 14px;\n height: 14px;\n transform: translate(50%, 50%);\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-thumb-container.mat-slide-toggle-thumb-container[_ngcontent-%COMP%] {\n top: -4px;\n left: -4px;\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-bar.mat-slide-toggle-bar[_ngcontent-%COMP%] {\n height: 20px;\n background-color: #D0D0D0;\n border-radius: 20px;\n}\n.mck-skeleton[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n}\n.mck-skeleton-checkbox[_ngcontent-%COMP%] {\n float: left;\n}\n.mck-skeleton-checkbox[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 20px;\n height: 20px;\n margin-bottom: 0;\n}\n.mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 100vw;\n margin-bottom: 0;\n max-width: 215px;\n}\n.mck-skeleton-image[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 81px;\n height: 82px;\n margin-bottom: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-skeleton-image[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 219px;\n height: 119px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-skeleton-image[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 219px;\n height: 119px;\n }\n}\n.mck-skeleton-status[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 117px;\n height: 78px;\n margin-top: 10px;\n margin-bottom: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-skeleton-status[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 117px;\n height: 78px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-skeleton-status[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 117px;\n height: 78px;\n }\n}\n.mck-skeleton-line-1[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 23px;\n max-width: 176px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-1[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 219px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-1[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 219px;\n }\n}\n.mck-skeleton-line-2[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 165px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-2[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-2[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n.mck-skeleton-line-3[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 147px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-3[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-3[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n.mck-skeleton-line-30p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 30%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-30p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 30%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-30p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 30%;\n }\n}\n.mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-45p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 45%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-45p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 45%;\n margin-right: 45%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-45p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 45%;\n margin-right: 45%;\n }\n}\n.mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-50p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 50%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-50p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 50%;\n margin-right: 45%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-50p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 50%;\n margin-right: 45%;\n }\n}\n.mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-60p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 60%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-60p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 60%;\n margin-right: 35%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-60p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 60%;\n margin-right: 35%;\n }\n}\n.mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-70p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 70%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-70p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 70%;\n margin-right: 25%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-70p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 70%;\n margin-right: 25%;\n }\n}\n.mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-80p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 80%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-80p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 80%;\n margin-right: 15%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-80p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 80%;\n margin-right: 15%;\n }\n}\n.mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-90p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 90%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-90p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 90%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-90p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 90%;\n }\n}\n.mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-load-more[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n width: calc(100vw - (2 * 1rem));\n height: 40px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-load-more[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 320px;\n height: 50px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-load-more[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 320px;\n height: 50px;\n }\n}\n.mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n width: calc(100vw - (2 * 1rem));\n height: 40px;\n max-width: none;\n width: 100%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: none;\n width: 100%;\n height: 50px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: none;\n width: 100%;\n height: 50px;\n }\n}\n.mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 124px;\n margin-bottom: 4px;\n}\n.mck-heading-5[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 1.5rem;\n line-height: 1.333;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-heading-5[_ngcontent-%COMP%] {\n font-size: 1.75rem;\n line-height: 1.142;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-heading-5[_ngcontent-%COMP%] {\n font-size: 1.75rem;\n line-height: 1.142;\n }\n}\nngx-mat-select-search[_ngcontent-%COMP%] .mat-select-search-no-entries-found[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\nngx-mat-select-search[_ngcontent-%COMP%] .mat-select-search-input[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\nngx-mat-select-search[_ngcontent-%COMP%] button.mat-button.mat-select-search-clear[_ngcontent-%COMP%] {\n background-color: transparent;\n border: none;\n color: black;\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 16px;\n height: 18px;\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n height: 1.5rem;\n border: 4px solid rgba(0, 0, 0, 0);\n background-clip: padding-box;\n border-radius: 8px;\n background-color: #757575;\n -webkit-box-shadow: inset -1px -1px 0px rgba(0, 0, 0, 0.05), inset 1px 1px 0px rgba(0, 0, 0, 0.05);\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar-button {\n width: 0;\n height: 0;\n display: none;\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar-corner {\n background-color: transparent;\n}\nheader[_ngcontent-%COMP%] {\n z-index: 2;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mb-block[_ngcontent-%COMP%] {\n display: block;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mb-block[_ngcontent-%COMP%] {\n display: block;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mb-bottom[_ngcontent-%COMP%] {\n padding-bottom: 110px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mb-bottom[_ngcontent-%COMP%] {\n padding-bottom: 110px;\n }\n}\n.map-filters-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n top: 5px;\n}\n.map-filters-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] {\n height: 48px;\n background-color: white;\n}\n.map-filters-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n padding-top: 0.5rem !important;\n}\n.office-level-row[_ngcontent-%COMP%] .mat-select-placeholder[_ngcontent-%COMP%] {\n color: #333333;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .office-level-row[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .office-level-row[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 45px !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .office-level-row[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .office-level-row[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 45px !important;\n }\n}\n.office-level-row[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n display: block;\n top: 0 !important;\n width: 44px !important;\n right: -11px !important;\n background: transparent !important;\n border-width: 0 0 0 1px;\n border-color: #c6c6c6;\n border-style: solid;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .office-level-row[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 1px) !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .office-level-row[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 1px) !important;\n }\n}\n.office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n background: #F0F0F0 !important;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 2px) !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 2px) !important;\n }\n}\n.office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-chevron[_ngcontent-%COMP%] {\n opacity: 0.5;\n margin-left: 10px;\n}\n.office-level-row[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .office-level-row[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .map-controls[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .map-controls[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n display: flex !important;\n width: 100% !important;\n justify-content: space-between !important;\n}\n.booking-form-container[_ngcontent-%COMP%] {\n overflow-y: auto;\n max-height: calc(100vh - 345px);\n}\n.booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-label[_ngcontent-%COMP%], .booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] .mat-radio-label-content[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\" !important;\n color: #333333;\n}\n.booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::-moz-placeholder {\n font-family: \"McKinsey Sans\";\n color: #B3B3B3;\n}\n.booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%], .booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder {\n font-family: \"McKinsey Sans\";\n color: #B3B3B3;\n}\nform[_ngcontent-%COMP%] {\n width: 100%;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n form[_ngcontent-%COMP%] {\n padding: 0 10px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n form[_ngcontent-%COMP%] {\n padding: 0 10px;\n }\n}\n.mck-row-flow[_ngcontent-%COMP%] {\n display: flex;\n}\n.mck-row-flow[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 180px;\n flex-flow: column;\n}\n.mck-row-flow[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 20px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-row-flow[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-row-flow[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 0;\n }\n}\n.company-container[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 0px;\n}\n.row-with-spacing[_ngcontent-%COMP%] {\n margin-bottom: 1.5rem;\n align-items: flex-start;\n}\n.row-with-spacing[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n}\n.row-with-spacing[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n color: #e12e41;\n margin: 0;\n}\n.row-with-spacing[_ngcontent-%COMP%] p.checking[_ngcontent-%COMP%] {\n color: #000000;\n}\n.row-with-spacing[_ngcontent-%COMP%] p.available[_ngcontent-%COMP%] {\n color: #3aa537;\n}\n.row-with-spacing[_ngcontent-%COMP%] p.sb-status[_ngcontent-%COMP%] {\n padding: 0 10px 0 34px;\n position: relative;\n}\n.row-with-spacing[_ngcontent-%COMP%] p.sb-status[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n position: absolute;\n top: 4px;\n left: 4px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .flex-row[_ngcontent-%COMP%] {\n justify-content: space-between;\n align-items: flex-end;\n margin-right: 1em;\n }\n .flex-row[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 47%;\n min-width: 40%;\n margin-right: 0;\n box-sizing: border-box;\n flex: none;\n }\n .flex-row[_ngcontent-%COMP%] .company-field[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .flex-row[_ngcontent-%COMP%] {\n justify-content: space-between;\n align-items: flex-end;\n margin-right: 1em;\n }\n .flex-row[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 47%;\n min-width: 40%;\n margin-right: 0;\n box-sizing: border-box;\n flex: none;\n }\n .flex-row[_ngcontent-%COMP%] .company-field[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n.attendees-input[_ngcontent-%COMP%] {\n margin-right: 1em;\n display: block;\n}\nmat-hint[_ngcontent-%COMP%] {\n position: relative;\n}\nmat-hint[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: #1F40E6;\n font-size: 11px;\n cursor: pointer;\n text-decoration: underline;\n}\nmat-hint[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n width: 429px;\n background-color: black;\n color: white;\n position: absolute;\n padding: 10px;\n top: 26px;\n left: 0;\n z-index: 2;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n mat-hint[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n width: 100%;\n position: relative;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n mat-hint[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n width: 100%;\n position: relative;\n }\n}\nmat-hint[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] .triangle[_ngcontent-%COMP%] {\n position: absolute;\n top: -6px;\n left: 12px;\n width: 12px;\n height: 12px;\n background-color: black;\n transform: rotate(45deg);\n}\n.mck-form-input[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-top: 1.25em;\n margin-right: 1em;\n font-weight: 400;\n font-size: 16px;\n width: 100%;\n margin-top: 0;\n margin-bottom: 0.5em;\n}\n.mck-form-input[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: #d1484f;\n}\n.mck-form-input.error[_ngcontent-%COMP%] {\n color: #e53935;\n}\nmat-form-field[_ngcontent-%COMP%] {\n flex: 1;\n}\nmat-form-field.booked[_ngcontent-%COMP%] {\n color: #d1484f;\n}\nmat-form-field.available[_ngcontent-%COMP%] {\n color: #3aa537;\n}\nmat-form-field[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n font-size: 16px;\n padding-top: 8px;\n}\nmat-form-field[_ngcontent-%COMP%] mat-error[_ngcontent-%COMP%] {\n padding-top: 12px;\n font-size: 11px;\n font-weight: 400;\n position: relative;\n height: 40px;\n}\nmat-form-field[_ngcontent-%COMP%] mat-error[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n position: relative;\n left: 10px;\n top: 2px;\n}\nmat-form-field[_ngcontent-%COMP%] mat-error[_ngcontent-%COMP%] .error-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: -12px;\n width: 16px;\n height: 16px;\n background-image: url('error-close.svg');\n background-size: contain;\n}\nmat-form-field[_ngcontent-%COMP%] .icon[_ngcontent-%COMP%] {\n width: 8px;\n}\nmat-tab[_ngcontent-%COMP%] {\n display: none !important;\n}\n.field[_ngcontent-%COMP%] {\n display: flex;\n min-width: 14em;\n flex: 1;\n flex-wrap: wrap;\n}\ntextarea[_ngcontent-%COMP%] {\n min-height: 7em;\n}\n.fieldset[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n}\n.fieldset[_ngcontent-%COMP%] .field[_ngcontent-%COMP%] {\n margin: 0 0.25em;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .fieldset[_ngcontent-%COMP%] .field[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .fieldset[_ngcontent-%COMP%] .field[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n.fieldset[_ngcontent-%COMP%] .field[_ngcontent-%COMP%]:first-child {\n margin-left: 0;\n}\n.fieldset[_ngcontent-%COMP%] .field[_ngcontent-%COMP%]:last-child {\n margin-right: 0;\n}\n.error[_ngcontent-%COMP%] {\n color: #e53935;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .flex-container[_ngcontent-%COMP%] .full-width[_ngcontent-%COMP%] {\n min-width: calc(100% - 1em);\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .flex-container[_ngcontent-%COMP%] .full-width[_ngcontent-%COMP%] {\n min-width: calc(100% - 1em);\n }\n}\n.flex-container[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] div div {\n height: 47px;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWJvb2tpbmctZGV0YWlscy1mb3JtL3Jvb20tYm9va2luZy1kZXRhaWxzLWZvcm0uY29tcG9uZW50LnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9ub2RlX21vZHVsZXMvQGFuZ3VsYXIvbWF0ZXJpYWwvX3RoZW1pbmcuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9zdHlsZXMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2FwcHMvc3RhZmYvc3JjL2FwcC9ib29raW5nL3Jvb20tYm9va2luZy1kZXRhaWxzLWZvcm0vcm9vbS1ib29raW5nLWRldGFpbHMtZm9ybS5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUZ6UkE7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDeUJsQjtBRHVFQTs7c0JBQUE7QUdtekNBLGtDQUFBO0FBdWlEQSwyQ0FBQTtBQXdDQSxxQkFBQTtBQzk5RlE7RUFFSSxhQUFBO0FINkJaO0FHeEJRO0VBQ0ksV0FBQTtFQUNBLFlBQUE7QUgwQlo7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SFE7RUFDSSxZQUFBO0VBQ0EseUJKbmlDbUI7RUlvaUNuQixtQkFBQTtBSGdJWjtBRzVISTtFRjFzQkEseUJGelZjO0FDa3FDbEI7QUc1SFE7RUFDSSxXQUFBO0FIOEhaO0FHN0hZO0VGL3NCUix5QkZ6VmM7RUkwaUNGLFdBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7QUgrSGhCO0FHM0hRO0VGdnRCSix5QkZ6VmM7RUlrakNOLFlBQUE7RUFDQSxnQkFBQTtFQUNBLGdCQUFBO0FINkhaO0FHMUhRO0VGOXRCSix5QkZ6VmM7RUU2VmQsV0FBQTtFQUNBLFlBQUE7RUU0dEJRLGdCQUFBO0FINkhaO0FDM3JDWTtFRTJqQ0o7SUZ0dEJBLFlBQUE7SUFDQSxhQUFBO0VEMDFCTjtBQUNGO0FDanNDWTtFRTJqQ0o7SUZ0dEJBLFlBQUE7SUFDQSxhQUFBO0VEZzJCTjtBQUNGO0FHdElRO0VGcHVCSix5QkZ6VmM7RUV1V2QsWUFBQTtFQUNBLFlBQUE7RUV3dEJRLGdCQUFBO0VBQ0EsZ0JBQUE7QUh5SVo7QUM5c0NZO0VFaWtDSjtJRmx0QkEsWUFBQTtJQUNBLFlBQUE7RURtMkJOO0FBQ0Y7QUNwdENZO0VFaWtDSjtJRmx0QkEsWUFBQTtJQUNBLFlBQUE7RUR5MkJOO0FBQ0Y7QUdsSlE7RUYzdUJKLHlCRnpWYztFSXNrQ04sWUFBQTtFQUNBLGdCQUFBO0FIb0paO0FDL3RDWTtFRXdrQ0o7SUFNUSxnQkFBQTtFSHFKZDtBQUNGO0FDcHVDWTtFRXdrQ0o7SUFNUSxnQkFBQTtFSDBKZDtBQUNGO0FHdkpRO0VGcnZCSix5QkZ6VmM7RUlnbENOLFlBQUE7RUFDQSxnQkFBQTtBSHlKWjtBQzl1Q1k7RUVrbENKO0lBTVEsZ0JBQUE7RUgwSmQ7QUFDRjtBQ252Q1k7RUVrbENKO0lBTVEsZ0JBQUE7RUgrSmQ7QUFDRjtBRzVKUTtFRi92QkoseUJGelZjO0VJMGxDTixZQUFBO0VBQ0EsZ0JBQUE7QUg4Slo7QUM3dkNZO0VFNGxDSjtJQU1RLGdCQUFBO0VIK0pkO0FBQ0Y7QUNsd0NZO0VFNGxDSjtJQU1RLGdCQUFBO0VIb0tkO0FBQ0Y7QUdoS1k7RUYxd0JSLHlCRnpWYztFSXFtQ0YsWUFBQTtFQUNBLGNBQUE7QUhrS2hCO0FDNXdDWTtFRXVtQ0E7SUFLUSxjQUFBO0VIb0tsQjtBQUNGO0FDanhDWTtFRXVtQ0E7SUFLUSxjQUFBO0VIeUtsQjtBQUNGO0FHdEtnQjtFQUNJLFlBQUE7RUFDQSxrQkFBQTtBSHdLcEI7QUdsS1k7RUYzeEJSLHlCRnpWYztFSXNuQ0YsWUFBQTtFQUNBLGNBQUE7QUhvS2hCO0FDL3hDWTtFRXduQ0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUhzS2xCO0FBQ0Y7QUNyeUNZO0VFd25DQTtJQUtRLGNBQUE7SUFDQSxpQkFBQTtFSDRLbEI7QUFDRjtBR3pLZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUgyS3BCO0FHcktZO0VGN3lCUix5QkZ6VmM7RUl3b0NGLFlBQUE7RUFDQSxjQUFBO0FIdUtoQjtBQ3B6Q1k7RUUwb0NBO0lBS1EsY0FBQTtJQUNBLGlCQUFBO0VIeUtsQjtBQUNGO0FDMXpDWTtFRTBvQ0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUgrS2xCO0FBQ0Y7QUc1S2dCO0VBQ0ksWUFBQTtFQUNBLGtCQUFBO0FIOEtwQjtBRzFLZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUg0S3BCO0FHdEtZO0VGcjBCUix5QkZ6VmM7RUlncUNGLFlBQUE7RUFDQSxjQUFBO0FId0toQjtBQzcwQ1k7RUVrcUNBO0lBS1EsY0FBQTtJQUNBLGlCQUFBO0VIMEtsQjtBQUNGO0FDbjFDWTtFRWtxQ0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUhnTGxCO0FBQ0Y7QUc3S2dCO0VBQ0ksWUFBQTtFQUNBLGtCQUFBO0FIK0twQjtBRzNLZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUg2S3BCO0FHdktZO0VGNzFCUix5QkZ6VmM7RUl3ckNGLFlBQUE7RUFDQSxjQUFBO0FIeUtoQjtBQ3QyQ1k7RUUwckNBO0lBS1EsY0FBQTtJQUNBLGlCQUFBO0VIMktsQjtBQUNGO0FDNTJDWTtFRTByQ0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUhpTGxCO0FBQ0Y7QUc5S2dCO0VBQ0ksWUFBQTtFQUNBLGtCQUFBO0FIZ0xwQjtBRzVLZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUg4S3BCO0FHeEtZO0VGcjNCUix5QkZ6VmM7RUlndENGLFlBQUE7RUFDQSxjQUFBO0FIMEtoQjtBQy8zQ1k7RUVrdENBO0lBS1EsY0FBQTtJQUNBLGlCQUFBO0VINEtsQjtBQUNGO0FDcjRDWTtFRWt0Q0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUhrTGxCO0FBQ0Y7QUcvS2dCO0VBQ0ksWUFBQTtFQUNBLGtCQUFBO0FIaUxwQjtBRzdLZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUgrS3BCO0FHektZO0VGNzRCUix5QkZ6VmM7RUl3dUNGLFlBQUE7RUFDQSxjQUFBO0FIMktoQjtBQ3g1Q1k7RUUwdUNBO0lBS1EsY0FBQTtFSDZLbEI7QUFDRjtBQzc1Q1k7RUUwdUNBO0lBS1EsY0FBQTtFSGtMbEI7QUFDRjtBRy9LZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUhpTHBCO0FHNUtRO0VGNzVCSix5QkZ6VmM7RUl3dkNOLGtCSjlzQ007RUkrc0NOLHFCSi9zQ007RUlndENOLCtCQUFBO0VBQ0EsWUFBQTtBSDhLWjtBQzc2Q1k7RUUwdkNKO0lBUVEsZ0JBQUE7SUFDQSxZQUFBO0VIK0tkO0FBQ0Y7QUNuN0NZO0VFMHZDSjtJQVFRLGdCQUFBO0lBQ0EsWUFBQTtFSHFMZDtBQUNGO0FHakxZO0VGMzZCUix5QkZ6VmM7RUlzd0NGLGtCSjV0Q0U7RUk2dENGLHFCSjd0Q0U7RUk4dENGLCtCQUFBO0VBQ0EsWUFBQTtFQUNBLGVBQUE7RUFDQSxXQUFBO0FIbUxoQjtBQ2w4Q1k7RUV3d0NBO0lBU1EsZUFBQTtJQUNBLFdBQUE7SUFDQSxZQUFBO0VIcUxsQjtBQUNGO0FDejhDWTtFRXd3Q0E7SUFTUSxlQUFBO0lBQ0EsV0FBQTtJQUNBLFlBQUE7RUg0TGxCO0FBQ0Y7QUcxTG9CO0VBQ0ksYUFBQTtFQUNBLGtCQUFBO0FINEx4QjtBR2hMSTtFRnZzQ0EsNEJBWmlCO0VBYWpCLGtCQUFBO0VBQ0Esa0JBQUE7RUFtSEEsaUJBQUE7RUFDQSxrQkFBQTtBRHl3Q0o7QUM1OUNZO0VFb3lDUjtJRjlrQ0ksa0JBQUE7SUFDQSxrQkFBQTtFRDB3Q047QUFDRjtBQ2wrQ1k7RUVveUNSO0lGOWtDSSxrQkFBQTtJQUNBLGtCQUFBO0VEZ3hDTjtBQUNGO0FHOUxJO0VGNWlDQSxrQkFBQTtFQUNBLGtCQUFBO0VBQ0EsOERBOUtjO0VBK0tkLGVBQUE7RUFDQSxtQkFBQTtFRTBpQ0ksZ0JBQUE7QUhxTVI7QUdsTUk7RUZqakNBLGtCQUFBO0VBQ0Esa0JBQUE7RUFDQSw4REE5S2M7RUErS2QsZUFBQTtFQUNBLG1CQUFBO0VFK2lDSSxnQkFBQTtBSHdNUjtBR3JNSTtFQUNJLDZCQUFBO0VBQ0EsWUFBQTtFQUNBLFlBQUE7QUh1TVI7QUduTUE7RUFDSSxXQUFBO0VBQ0EsWUFBQTtBSHNNSjtBR3BNQTtFQUNJLGNKdHdDYTtFSXV3Q2Isa0NBQUE7RUFDQSw0QkFBQTtFQUNBLGtCQUFBO0VBQ0EseUJKeHpDYztFSXl6Q2Qsa0dBQUE7QUh1TUo7QUdyTUE7RUFDSSxRQUFBO0VBQ0EsU0FBQTtFQUNBLGFBQUE7QUh3TUo7QUd0TUE7RUFDSSw2QkFBQTtBSHlNSjtBR3ZNQTtFQUNJLFVBQUE7QUgwTUo7QUN0aERZO0VFODBDWjtJQUVRLGNBQUE7RUgyTU47QUFDRjtBQzVoRFk7RUU4MENaO0lBRVEsY0FBQTtFSGdOTjtBQUNGO0FDamlEWTtFRW0xQ1o7SUFFUSxxQkFBQTtFSGlOTjtBQUNGO0FDdmlEWTtFRW0xQ1o7SUFFUSxxQkFBQTtFSHNOTjtBQUNGO0FHbE5JO0VBQ0ksUUFBQTtBSHFOUjtBR25OSTtFQUNJLFlBQUE7RUFDQSx1QkFBQTtBSHFOUjtBR2xOSTtFQUNJLDhCQUFBO0FIb05SO0FHOU1JO0VBQ0ksY0FBQTtFQUNBLDRCRjl4Q2E7QUQrK0NyQjtBQzVqRFk7RUU4MkNSO0lBRVEsdUJBQUE7RUhnTlY7QUFDRjtBQ2prRFk7RUU4MkNSO0lBRVEsdUJBQUE7RUhxTlY7QUFDRjtBR2xOSTtFQUNJLGNBQUE7RUFDQSxpQkFBQTtFQUNBLHNCQUFBO0VBQ0EsdUJBQUE7RUFDQSxrQ0FBQTtFQUNBLHVCQUFBO0VBQ0EscUJBQUE7RUFDQSxtQkFBQTtBSG9OUjtBQ3BsRFk7RUV3M0NSO0lBVVEsbUNBQUE7RUhzTlY7QUFDRjtBQ3psRFk7RUV3M0NSO0lBVVEsbUNBQUE7RUgyTlY7QUFDRjtBR3ZOUTtFQUNJLDhCQUFBO0FIeU5aO0FDam1EWTtFRXU0Q0o7SUFHUSxtQ0FBQTtFSDJOZDtBQUNGO0FDdG1EWTtFRXU0Q0o7SUFHUSxtQ0FBQTtFSGdPZDtBQUNGO0FHOU5RO0VBQ0ksWUFBQTtFQUNBLGlCQUFBO0FIZ09aO0FHMU5JO0VBQ0ksd0JBQUE7RUFDQSxzQkFBQTtFQUNBLHlDQUFBO0FINk5SO0FHek5BO0VBQ0ksZ0JBQUE7RUFDQSwrQkFBQTtBSDROSjtBR2xOSTtFQUNJLHVDQUFBO0VBQ0EsY0FBQTtBSHFOUjtBR2xOSTtFQUNJLDRCRjcxQ2E7RUU4MUNiLGNBQUE7QUhvTlI7QUd0Tkk7RUFDSSw0QkY3MUNhO0VFODFDYixjQUFBO0FIb05SO0FJdG9EQTtFQUNJLFdBQUE7RUFDQSw0QkhrRmlCO0FEdWpEckI7QUNwb0RZO0VHUFo7SUFJUSxlQUFBO0VKMm9ETjtBQUNGO0FDem9EWTtFR1BaO0lBSVEsZUFBQTtFSmdwRE47QUFDRjtBSTdvREE7RUFDSSxhQUFBO0FKZ3BESjtBSS9vREk7RUFDSSxPQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTtBSmlwRFI7QUkvb0RJO0VBQ0ksaUJBQUE7QUppcERSO0FDMXBEWTtFR1FSO0lBR1EsY0FBQTtFSm1wRFY7QUFDRjtBQy9wRFk7RUdRUjtJQUdRLGNBQUE7RUp3cERWO0FBQ0Y7QUlucERJO0VBQ0ksZ0JBQUE7QUpzcERSO0FJbHBEQTtFQUNJLHFCTCtCYTtFSzlCYix1QkFBQTtBSnFwREo7QUlwcERJO0VBQ0ksNEJIbURhO0FEbW1EckI7QUlwcERJO0VBQ0ksY0FBQTtFQUNBLFNBQUE7QUpzcERSO0FJcnBEUTtFQUNJLGNBQUE7QUp1cERaO0FJcnBEUTtFQUNJLGNBQUE7QUp1cERaO0FJcnBEUTtFQUNJLHNCQUFBO0VBQ0Esa0JBQUE7QUp1cERaO0FJdHBEWTtFQUNJLGtCQUFBO0VBQ0EsUUFBQTtFQUNBLFNBQUE7QUp3cERoQjtBQ25zRFk7RUdpRFo7SUFFUSw4QkFBQTtJQUNBLHFCQUFBO0lBQ0EsaUJBQUE7RUpxcEROO0VJcHBETTtJQUNJLFVBQUE7SUFDQSxjQUFBO0lBQ0EsZUFBQTtJQUNBLHNCQUFBO0lBQ0EsVUFBQTtFSnNwRFY7RUlucERNO0lBQ0ksV0FBQTtFSnFwRFY7QUFDRjtBQ3J0RFk7RUdpRFo7SUFFUSw4QkFBQTtJQUNBLHFCQUFBO0lBQ0EsaUJBQUE7RUpzcUROO0VJcnFETTtJQUNJLFVBQUE7SUFDQSxjQUFBO0lBQ0EsZUFBQTtJQUNBLHNCQUFBO0lBQ0EsVUFBQTtFSnVxRFY7RUlwcURNO0lBQ0ksV0FBQTtFSnNxRFY7QUFDRjtBSWxxREE7RUFDSSxpQkFBQTtFQUNBLGNBQUE7QUpxcURKO0FJbHFEQTtFQUNJLGtCQUFBO0FKcXFESjtBSXBxREk7RUFDSSxjTHJGRTtFS3NGRixlQUFBO0VBQ0EsZUFBQTtFQUNBLDBCQUFBO0FKc3FEUjtBSXBxREk7RUFDSSxZQUFBO0VBQ0EsdUJBQUE7RUFDQSxZQUFBO0VBQ0Esa0JBQUE7RUFDQSxhQUFBO0VBQ0EsU0FBQTtFQUNBLE9BQUE7RUFDQSxVQUFBO0FKc3FEUjtBQy92RFk7RUdpRlI7SUFVUSxXQUFBO0lBQ0Esa0JBQUE7RUp3cURWO0FBQ0Y7QUNyd0RZO0VHaUZSO0lBVVEsV0FBQTtJQUNBLGtCQUFBO0VKOHFEVjtBQUNGO0FJN3FEUTtFQUNJLGtCQUFBO0VBQ0EsU0FBQTtFQUNBLFVBQUE7RUFDQSxXQUFBO0VBQ0EsWUFBQTtFQUNBLHVCQUFBO0VBQ0Esd0JBQUE7QUorcURaO0FJMXFEQTtFQUNJLGVBQUE7RUFDQSxrQkFBQTtFQUNBLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxlQUFBO0VBQ0EsV0FBQTtFQUNBLGFBQUE7RUFDQSxvQkFBQTtBSjZxREo7QUk1cURJO0VBQ0ksY0FBQTtBSjhxRFI7QUk1cURJO0VBQ0ksY0w3RkE7QUMyd0RSO0FJMXFEQTtFQUNJLE9BQUE7QUo2cURKO0FJM3FESTtFQUNJLGNBQUE7QUo2cURSO0FJMXFESTtFQUNJLGNBQUE7QUo0cURSO0FJMXFESTtFQUNJLGVBQUE7RUFDQSxnQkFBQTtBSjRxRFI7QUkxcURJO0VBQ0ksaUJBQUE7RUFDQSxlQUFBO0VBQ0EsZ0JBQUE7RUFDQSxrQkFBQTtFQUNBLFlBQUE7QUo0cURSO0FJM3FEUTtFQUNJLDRCSG5FUztFR29FVCxrQkFBQTtFQUNBLGtCQUFBO0VBQ0EsVUFBQTtFQUNBLFFBQUE7QUo2cURaO0FJM3FEUTtFQUNJLGtCQUFBO0VBQ0EsV0FBQTtFSGdMUixXRjVPUztFRTZPVCxZRjdPUztFRThPVCx3Q0FBQTtFQUNBLHdCQUFBO0FEOC9DSjtBSTVxREk7RUFDSSxVQUFBO0FKOHFEUjtBSTFxREE7RUFDSSx3QkFBQTtBSjZxREo7QUkxcURBO0VBQ0ksYUFBQTtFQUNBLGVBQUE7RUFDQSxPQUFBO0VBQ0EsZUFBQTtBSjZxREo7QUkxcURBO0VBQ0ksZUFBQTtBSjZxREo7QUkxcURBO0VBQ0ksYUFBQTtFQUNBLGVBQUE7QUo2cURKO0FJM3FESTtFQUNJLGdCQUFBO0FKNnFEUjtBQ24yRFk7RUdxTFI7SUFJUSxTQUFBO0VKOHFEVjtBQUNGO0FDeDJEWTtFR3FMUjtJQUlRLFNBQUE7RUptckRWO0FBQ0Y7QUlqckRRO0VBQ0ksY0FBQTtBSm1yRFo7QUlockRRO0VBQ0ksZUFBQTtBSmtyRFo7QUk3cURBO0VBQ0ksY0w3S0k7QUM2MURSO0FDdjNEWTtFRzRNSjtJQUNJLDJCQUFBO0VKK3FEVjtBQUNGO0FDNzNEWTtFRzRNSjtJQUNJLDJCQUFBO0VKb3JEVjtBQUNGO0FJL3FEWTtFQUNJLFlBQUE7QUppckRoQiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWJvb2tpbmctZGV0YWlscy1mb3JtL3Jvb20tYm9va2luZy1kZXRhaWxzLWZvcm0uY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIkcHJpbWFyeTogIzFGNDBFNjtcbiRmb3JtLWxhYmVsOiAjMDUxQzJDO1xuJHNlY29uZGFyeS1sYWJlbDogIzc2NzY3NjtcbiRib3JkZXI6ICNCM0IzQjM7XG4kYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDogI0QwRDBEMDtcbiRjaGlwLWNvbG9yOiAjMzMzMzMzO1xuJHBsYWNlaG9sZGVyLWNvbG9yOiAjN0Y3RjdGO1xuJGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4kcGFnZS1iYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuJHNlbGVjdGVkLW9wdGlvbjogI0U2RTZFNjtcbiRjb2xvci1icmFuZC15ZWxsb3c6ICNmZmQwNDg7XG4kbGlnaHQteWVsbG93OiAjZmZmM2NlO1xuJGNvYWNobWFyay10ZXh0OiAjNmY0ZDAwO1xuJGVycm9yLWNvbG9yOiAjRTEyRTQwO1xuJG5vLWZpbHRlcnMtY29sb3I6ICNCQ0JDQkM7XG4kcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I6ICNGNEY0RjQ7XG4kcHJpbWFyeS1oaWdobGlnaHQ6ICMyMjUxRkY7XG4kc2Nyb2xsYmFyLWNvbG9yOiAjNzU3NTc1O1xuXG4kYXZhaWxhYmxlLWNvbG9yOiAjNUQ5RDUyO1xuJGF2YWlsYWJsZS1ieS1yZXF1ZXN0LWNvbG9yOiAjRjVCNTNGO1xuJGluLXVzZS1jb2xvcjogI0Q0NDgzRTtcbiRub3QtYm9va2FibGUtY29sb3I6ICNDQ0NDQ0M7XG5cbiRtb2RhbC1ib2R5LWhlYWRpbmc6ICM0RDRENEQ7XG4kYWxlcnQtb3ZlcmxheS1iZzogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2FjaG1hcmstYmc6ICNFQkVCRjY7XG4kY29hY2htYXJrLWRhcmstdGV4dDogIzFCMUIxOTtcbiRlcnJvci10ZXh0OiAjZmZmO1xuXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuXG4vLyA0cHhcbiRzcGFjaW5nLXNtYWxsZXN0OiAwLjI1cmVtO1xuXG4vLyA4cHhcbiRzcGFjaW5nLXh4c21hbGw6IDAuNXJlbTtcblxuLy8gMTJweFxuJHNwYWNpbmcteHNtYWxsOiAwLjc1cmVtO1xuXG4vLyAxNnB4XG4kc3BhY2luZy1zbWFsbDogMXJlbTtcblxuLy8gMjBweFxuJHNwYWNpbmctc21hbGwtbWVkaXVtOiAxLjI1cmVtO1xuXG4vLyAyNHB4XG4kc3BhY2luZy1tZWRpdW06IDEuNXJlbTtcblxuLy8gMjhweFxuJHNwYWNpbmctbWVkaXVtLWxhcmdlOiAxLjc1cmVtO1xuXG4vLyAzMnB4XG4kc3BhY2luZy1sYXJnZTogMnJlbTtcblxuLy8gNDhweFxuJHNwYWNpbmcteGxhcmdlOiAzcmVtO1xuXG4vLyA2NHB4XG4kc3BhY2luZy14eGxhcmdlOiA0cmVtO1xuXG4vLyA5NnB4XG4kc3BhY2luZy1sYXJnZXN0OiA2cmVtO1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGRldmljZS1tb2JpbGUtc2l6ZTogNDUwcHg7XG4kZGV2aWNlLXRhYmxldC1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFwdG9wLXNpemU6IDEwMjRweDtcblxuJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemU6IDgwMHB4O1xuJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemU6IDEwNDhweDtcbiRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplOiAxMjgwcHg7XG5cblxuOmV4cG9ydCB7XG4gICAgcHJpbWFyeTogJHByaW1hcnk7XG4gICAgc2Vjb25kYXJ5TGFiZWw6ICRzZWNvbmRhcnktbGFiZWw7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4kaWNvbi1zbWFsbDogMTZweDtcbiRpY29uLW1lZGl1bTogMjRweDtcbiRpY29uLWxhcmdlOiAzMnB4O1xuJGljb24teGxhcmdlOiA0OHB4O1xuIiwiLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKiBUaGVtZSBmb3IgdGhlIHJpcHBsZSBlbGVtZW50cy4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF0ZXJpYWwvbm8tcHJlZml4ZXMgKi9cbi8qIHN0eWxlbGludC1lbmFibGUgKi9cbi5tY2staW5oZXJpdC1mb250IHtcbiAgZm9udDogaW5oZXJpdDtcbn1cbi5tY2stY29udGVudC1leHBhbmQsIC5tY2stY29udGVudC1wYWdlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbn1cbi5tY2stY29udGVudC1leHBhbmQtd2lkdGgge1xuICB3aWR0aDogMTAwJTtcbn1cbi5tY2stY29udGVudC1leHBhbmQtaGVpZ2h0IHtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLm1jay1jb250ZW50LXdpdGgtZm9vdGVyLWhlaWdodCB7XG4gIGhlaWdodDogY2FsYygxMDB2aCAtIDU4cHgpO1xufVxuLm1jay1jb250ZW50LWZ1bGwtaGVpZ2h0LCAubWNrLWNvbnRlbnQtcGFnZS1jb250YWluZXIge1xuICBoZWlnaHQ6IDEwMHZoO1xufVxuLm1jay1jb250ZW50LXBhZ2Uge1xuICBiYWNrZ3JvdW5kOiAjRjhGOUZBO1xufVxuLm1jay1jb250ZW50LWJvZHkge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWNvbnRlbnQtYm9keSB7XG4gICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWNvbnRlbnQtYm9keSB7XG4gICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIH1cbn1cbi5tY2stY29udGVudC1ncm91cCB7XG4gIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcbiAgd2lkdGg6IDEwMCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWNvbnRlbnQtZ3JvdXAge1xuICAgIG1heC13aWR0aDogNzU5cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWNvbnRlbnQtZ3JvdXAge1xuICAgIG1heC13aWR0aDogNzU5cHg7XG4gIH1cbn1cbi5tY2stc2hhZG93IHtcbiAgYm94LXNoYWRvdzogMHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtcbn1cbi5tY2stZmxleC0xIHtcbiAgZmxleDogMTtcbn1cbi5tY2stcm93LCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4LCAubWNrLXJvdy1mbG93IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbn1cbi5tY2stcm93Lm1jay1jZW50ZXItanVzdGlmeSwgLm1jay1jZW50ZXItanVzdGlmeS5tY2stcm93LWZsb3csIC5tY2stcm93Lm1jay1jZW50ZXIsIC5tY2stcm93Lm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1yb3cubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93Lm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXJvdy5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXJvdy5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1yb3cubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1yb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1jZW50ZXItc3VmZml4IC5tYXQtZm9ybS1maWVsZC1pbmZpeCwgLm1jay1jZW50ZXIubWNrLXJvdy1mbG93LCAubWNrLXJvdy1mbG93Lm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuLm1jay1yb3cubWNrLWNlbnRlci1hbGlnbiwgLm1jay1jZW50ZXItYWxpZ24ubWNrLXJvdy1mbG93LCAubWNrLXJvdy5tY2stY2VudGVyLCAubWNrLXJvdy5tY2stYnV0dG9uLm1hdC1idXR0b24sIC5tY2stcm93Lm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1yb3cubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1yb3cubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stcm93Lm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXJvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stY2VudGVyLm1jay1yb3ctZmxvdywgLm1jay1yb3ctZmxvdy5tY2stYnV0dG9uLm1hdC1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24ge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLm1jay1yb3cubWNrLXN0cmV0Y2gsIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWNrLXN0cmV0Y2gubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stc3RyZXRjaC5tY2stcm93LWZsb3cge1xuICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbn1cbi5tY2stcm93LWZsb3cge1xuICBmbGV4LXdyYXA6IHdyYXA7XG59XG4ubWNrLXJvdy5tY2stc2Nyb2xsLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1jay1zY3JvbGwubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stc2Nyb2xsLm1jay1yb3ctZmxvdyB7XG4gIG92ZXJmbG93LXg6IHNjcm9sbDtcbn1cbi5tY2stY29sdW1uLCAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cbi5tY2stY29sdW1uLm1jay1jZW50ZXIsIC5tY2stY29sdW1uLm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1jb2x1bW4ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stY29sdW1uLm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLWNvbHVtbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLWNvbHVtbi5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1jb2x1bW4ubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stY29sdW1uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stY29sdW1uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stY29sdW1uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1jb2x1bW4ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1jZW50ZXIubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWNrLWNlbnRlci5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1jZW50ZXIubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stY2VudGVyLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stY2VudGVyLm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1jZW50ZXIubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stY2VudGVyLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stY2VudGVyLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stY2VudGVyLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1jZW50ZXIubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1jay1jb2x1bW4ubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1jZW50ZXItc3VmZml4IC5tYXQtZm9ybS1maWVsZC1pbmZpeC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1jZW50ZXItc3VmZml4IC5tYXQtZm9ybS1maWVsZC1pbmZpeC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4ubWNrLWNvbHVtbi5tY2stc3BhY2UtYmV0d2VlbiwgLm1jay1zcGFjZS1iZXR3ZWVuLm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1zcGFjZS1iZXR3ZWVuLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXNwYWNlLWJldHdlZW4ubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stc3BhY2UtYmV0d2Vlbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXNwYWNlLWJldHdlZW4ubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stc3BhY2UtYmV0d2Vlbi5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1jay1zcGFjZS1iZXR3ZWVuLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stc3BhY2UtYmV0d2Vlbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXNwYWNlLWJldHdlZW4ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXNwYWNlLWJldHdlZW4ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcbn1cbi5tY2stY29sdW1uLm1jay1zdHJldGNoLCAubWNrLXN0cmV0Y2gubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWNrLXN0cmV0Y2gubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stc3RyZXRjaC5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1zdHJldGNoLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stc3RyZXRjaC5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1zdHJldGNoLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLXN0cmV0Y2gubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1zdHJldGNoLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stc3RyZXRjaC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stc3RyZXRjaC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG59XG4ubWNrLWNvbHVtbi5tY2stc2Nyb2xsLCAubWNrLXNjcm9sbC5tY2stYnV0dG9uLm1hdC1idXR0b24sIC5tY2stc2Nyb2xsLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXNjcm9sbC5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1zY3JvbGwubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1zY3JvbGwubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stc2Nyb2xsLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLXNjcm9sbC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXNjcm9sbC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXNjcm9sbC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stc2Nyb2xsLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24ge1xuICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gIG92ZXJmbG93LXk6IG92ZXJsYXk7XG59XG4ubWNrLWNvbHVtbi5tY2stZmxleC1lbmQsIC5tY2stZmxleC1lbmQubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWNrLWZsZXgtZW5kLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLWZsZXgtZW5kLm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLWZsZXgtZW5kLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stZmxleC1lbmQubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stZmxleC1lbmQubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stZmxleC1lbmQubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1mbGV4LWVuZC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLWZsZXgtZW5kLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1mbGV4LWVuZC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbn1cbi5tY2stb3ZlcmZsb3cge1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5tY2stYm9yZGVyZWQsIC5tY2staW5wdXQge1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBib3JkZXI6IDFweCBzb2xpZCAjQjNCM0IzO1xufVxuLm1jay1ib3JkZXJlZDpob3ZlciwgLm1jay1pbnB1dDpob3ZlciB7XG4gIGJvcmRlci1jb2xvcjogIzQ2NDY0Njtcbn1cbi5tY2stYm9yZGVyZWQ6Zm9jdXMsIC5tY2staW5wdXQ6Zm9jdXMge1xuICBib3JkZXItY29sb3I6ICMxRjQwRTY7XG59XG4ubWNrLWJvcmRlcmVkW2Rpc2FibGVkPXRydWVdLCAubWNrLWlucHV0W2Rpc2FibGVkPXRydWVdIHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIGJvcmRlci1jb2xvcjogI2YwZjBmMDtcbiAgY29sb3I6ICNjY2M7XG59XG4ubWNrLWRhdGUtZGlzcGxheSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogNDNweDtcbiAgcGFkZGluZzogMXJlbSAwLjVyZW07XG4gIHRyYW5zaXRpb246IGJvcmRlciAyMDBtcywgYm94LXNoYWRvdyAyMDBtcztcbn1cbi5tY2stZm9ybS1pbnB1dCAubWF0LWZvcm0tZmllbGQtd3JhcHBlciB7XG4gIHBhZGRpbmctYm90dG9tOiAwLjVyZW07XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQge1xuICBtaW4td2lkdGg6IGF1dG8gIWltcG9ydGFudDtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZy10b3A6IDAuN3JlbSAhaW1wb3J0YW50O1xuICBwYWRkaW5nLWJvdHRvbTogMC41cmVtICFpbXBvcnRhbnQ7XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICBtaW4taGVpZ2h0OiAyLjdyZW07XG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjcpO1xufVxuLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1zZWxlY3QtZHJvcGRvd24tYnV0dG9uIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gIG1hcmdpbi10b3A6IDJweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stc2VsZWN0LWRyb3Bkb3duLWJ1dHRvbiAubWF0LWZvcm0tZmllbGQtZmxleCB7XG4gICAgcGFkZGluZy1sZWZ0OiAwLjVyZW07XG4gICAgcGFkZGluZy1yaWdodDogMC41cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1zZWxlY3QtZHJvcGRvd24tYnV0dG9uIC5tYXQtZm9ybS1maWVsZC1mbGV4IHtcbiAgICBwYWRkaW5nLWxlZnQ6IDAuNXJlbTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stc2VsZWN0LWRyb3Bkb3duLWJ1dHRvbiAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1zZWxlY3QtZHJvcGRvd24tYnV0dG9uIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgaGVpZ2h0OiAycmVtO1xuICAgIG1pbi1oZWlnaHQ6IDJyZW07XG4gIH1cbiAgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1zZWxlY3QtZHJvcGRvd24tYnV0dG9uIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1zZWxlY3QtZHJvcGRvd24tYnV0dG9uIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24gLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICBoZWlnaHQ6IDJyZW07XG4gICAgbWluLWhlaWdodDogMnJlbTtcbiAgfVxuICAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24gLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tYXQtcyB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtc2VsZWN0IHtcbiAgbWFyZ2luLXRvcDogMC4ycmVtO1xufVxuLm1jay1mb3JtLWlucHV0IG1hdC1zZWxlY3QgLm1hdC1zZWxlY3QtYXJyb3cge1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LXNlbGVjdCAubWF0LXNlbGVjdC12YWx1ZSA+IC5tYXQtc2VsZWN0LXZhbHVlLXRleHQgPiBzcGFuIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG4ubWNrLWZvcm0taW5wdXQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LCAubWNrLWZvcm0taW5wdXQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsIC5tY2stZm9ybS1pbnB1dCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gIGJvcmRlci1jb2xvcjogI0IzQjNCMztcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4ubWNrLWZvcm0taW5wdXQgLmF2YWlsYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Lm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsIC5tY2stZm9ybS1pbnB1dCAuYXZhaWxhYmxlIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLCAubWNrLWZvcm0taW5wdXQgLmF2YWlsYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gIGJvcmRlci1jb2xvcjogIzNhYTUzNztcbn1cbi5tY2stZm9ybS1pbnB1dCAuYm9va2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCwgLm1jay1mb3JtLWlucHV0IC5ib29rZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsIC5tY2stZm9ybS1pbnB1dCAuYm9va2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kIHtcbiAgYm9yZGVyLWNvbG9yOiAjZTEyZTQxO1xufVxuLm1jay1mb3JtLWlucHV0IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCwgLm1jay1mb3JtLWlucHV0IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLCAubWNrLWZvcm0taW5wdXQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICBib3JkZXItY29sb3I6ICMxRjQwRTY7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuLm1jay1mb3JtLWlucHV0ID4gbWF0LWZvcm0tZmllbGQubWNrLWVycm9yIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgcGFkZGluZy1ib3R0b206IDA7XG59XG4ubWNrLWZvcm0taW5wdXQgPiBtYXQtZm9ybS1maWVsZC5tY2stZXJyb3IgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LCAubWNrLWZvcm0taW5wdXQgPiBtYXQtZm9ybS1maWVsZC5tY2stZXJyb3IgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsIC5tY2stZm9ybS1pbnB1dCA+IG1hdC1mb3JtLWZpZWxkLm1jay1lcnJvciAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gIGJvcmRlci1jb2xvcjogI0UxMkU0MDtcbn1cbi5tY2stZm9ybS1pbnB1dCBtY2stY2xvc2UtaWNvbi5tYXQtY2hpcC1yZW1vdmUubWF0LWNoaXAtcmVtb3ZlIHtcbiAgb3BhY2l0eTogMTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWxhYmVsIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LXJhZGlvLWJ1dHRvbiB7XG4gIG1hcmdpbi1yaWdodDogMXJlbTtcbn1cbi5tY2stZm9ybS1pbnB1dCAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnQge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG4ubWNrLWZvcm0taW5wdXQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGUge1xuICBib3JkZXItY29sb3I6ICMxRjQwRTYgIWltcG9ydGFudDtcbiAgYm9yZGVyLXdpZHRoOiAxcHggIWltcG9ydGFudDtcbn1cbi5tY2stZm9ybS1pbnB1dCAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxRjQwRTYgIWltcG9ydGFudDtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtcmFkaW8tZ3JvdXAge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBmbGV4LXdyYXA6IHdyYXA7XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LXJhZGlvLWdyb3VwID4gbWF0LXJhZGlvLWJ1dHRvbjpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLXJpZ2h0OiAwO1xufVxuLm1jay1mb3JtLWlucHV0LWNvbnRhaW5lciA+IC5tY2stZm9ybS1pbnB1dCwgLm1jay1mb3JtLWlucHV0LWNvbnRhaW5lciA+IG1jay1zZWxlY3Qge1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA4MDBweCkge1xuICAubWNrLWZvcm0taW5wdXQtY29udGFpbmVyID4gLm1jay1mb3JtLWlucHV0LCAubWNrLWZvcm0taW5wdXQtY29udGFpbmVyID4gbWNrLXNlbGVjdCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMS43NXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDEwNDhweCkge1xuICAubWNrLWZvcm0taW5wdXQtY29udGFpbmVyID4gLm1jay1mb3JtLWlucHV0LCAubWNrLWZvcm0taW5wdXQtY29udGFpbmVyID4gbWNrLXNlbGVjdCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMS43NXJlbTtcbiAgfVxufVxuLm1jay1mb3JtLWlucHV0LWNvbnRhaW5lciAubWNrLXJhZGlvLXNlbGVjdCB7XG4gIG1hcmdpbi1ib3R0b206IDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA4MDBweCkge1xuICAubWNrLWZvcm0taW5wdXQtY29udGFpbmVyIC5tY2stcmFkaW8tc2VsZWN0IHtcbiAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAxMDQ4cHgpIHtcbiAgLm1jay1mb3JtLWlucHV0LWNvbnRhaW5lciAubWNrLXJhZGlvLXNlbGVjdCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMS41cmVtO1xuICB9XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LXN0YW5kYXJkLWNoaXAge1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIG1pbi1oZWlnaHQ6IDEuNXJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMzMzMzMztcbiAgcGFkZGluZy10b3A6IDAuMjVyZW07XG4gIHBhZGRpbmctYm90dG9tOiAwLjI1cmVtO1xuICBwYWRkaW5nLWxlZnQ6IDAuNXJlbTtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1mb3JtLWlucHV0IG1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwIHtcbiAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stZm9ybS1pbnB1dCBtYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcCB7XG4gICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG4gIH1cbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtY2hlY2tib3gubWF0LWNoZWNrYm94Lm1hdC1jaGVja2JveCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgY29sb3I6IGJsYWNrO1xufVxuLm1jay1mb3JtLWlucHV0IG1hdC1jaGVja2JveCBkaXYubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMUY0MEU2O1xufVxuLm1jay1mb3JtLWlucHV0IG1hdC1jaGVja2JveCBkaXYubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWNrLWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1kaXNhYmxlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNEMEQwRDA7XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWNoZWNrYm94Lm1jay1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtZGlzYWJsZWQge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIGNvbG9yOiBibGFjaztcbiAgY29sb3I6ICNCM0IzQjM7XG59XG4ubWNrLWJvcmRlcmxlc3Mge1xuICBib3JkZXI6IG5vbmU7XG59XG4ubWNrLWJvcmRlcmxlc3M6aG92ZXIsIC5tY2stYm9yZGVybGVzczpmb2N1cywgLm1jay1ib3JkZXJsZXNzOmRpc2FibGVkIHtcbiAgYm9yZGVyOiBub25lO1xufVxuLm1jay1zZWxlY3QtcGFuZWwge1xuICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7XG4gIGJvcmRlci1yYWRpdXM6IHVuc2V0ICFpbXBvcnRhbnQ7XG4gIG1hcmdpbi10b3A6IDM1cHggIWltcG9ydGFudDtcbiAgbWFyZ2luLWxlZnQ6IDVweDtcbn1cbi5tY2stc2VsZWN0LXBhbmVsIG1hdC1vcHRpb24ge1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIHBhZGRpbmctcmlnaHQ6IDA7XG59XG4ubWNrLXNlbGVjdC1wYW5lbCBtYXQtb3B0aW9uLm1hdC1vcHRpb24tdGV4dCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbi5tY2stc2VsZWN0LXBhbmVsLm1jay1tYXJnaW4tdG9wIHtcbiAgbWFyZ2luLXRvcDogMS41cmVtICFpbXBvcnRhbnQ7XG59XG4ubWNrLWNoZWNrYm94LXBhbmVsLm1hdC1hdXRvY29tcGxldGUtcGFuZWwubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCB7XG4gIHRvcDogLTEwcHg7XG4gIG1heC1oZWlnaHQ6IDI3OHB4O1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uLm1jay10cnVuY2F0ZWQgLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgLXdlYmtpdC1saW5lLWNsYW1wOiAyO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xuICBsaW5lLWhlaWdodDogMjRweDtcbiAgaGVpZ2h0OiB1bnNldDtcbiAgbWluLWhlaWdodDogMzZweDtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiAubWF0LWNoZWNrYm94LWxhYmVsLm1hdC1jaGVja2JveC1sYWJlbCB7XG4gIGZsZXg6IDE7XG59XG4ubWNrLWNoZWNrYm94LXBhbmVsIG1hdC1vcHRpb24gLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIGNvbG9yOiBibGFjaztcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbi5tY2stY2hlY2tib3gtZ3JvdXAtaGVhZGVyIC5tYXQtY2hlY2tib3gtbGFiZWwubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbi5tY2stY2hlY2tib3gtZ3JvdXAtY2hpbGQge1xuICBtYXJnaW4tbGVmdDogMnJlbTtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiBtYXQtY2hlY2tib3ggbGFiZWwubWF0LWNoZWNrYm94LWxheW91dCB7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nLWxlZnQ6IDE2cHg7XG4gIHBhZGRpbmctcmlnaHQ6IDE2cHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLWNoZWNrYm94LXBhbmVsIG1hdC1vcHRpb24gbWF0LWNoZWNrYm94IGxhYmVsLm1hdC1jaGVja2JveC1sYXlvdXQge1xuICAgIHBhZGRpbmctbGVmdDogMnB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDJweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiBtYXQtY2hlY2tib3ggbGFiZWwubWF0LWNoZWNrYm94LWxheW91dCB7XG4gICAgcGFkZGluZy1sZWZ0OiAycHg7XG4gICAgcGFkZGluZy1yaWdodDogMnB4O1xuICB9XG59XG4ubWNrLWNoZWNrYm94LXBhbmVsIG1hdC1vcHRpb24gbWF0LWNoZWNrYm94IGRpdi5tYXQtY2hlY2tib3gtZnJhbWUubWF0LWNoZWNrYm94LWZyYW1lIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI0IzQjNCMztcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiBtYXQtY2hlY2tib3gubWF0LWNoZWNrYm94LWNoZWNrZWQgZGl2Lm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFGNDBFNjtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiBtYXQtY2hlY2tib3gubWNrLWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1kaXNhYmxlZCBkaXYubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDBEMEQwO1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIG1hdC1jaGVja2JveC5tY2stY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWRpc2FibGVkIC5tYXQtY2hlY2tib3gtbGFiZWwubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogMzAwO1xuICBjb2xvcjogYmxhY2s7XG4gIGNvbG9yOiAjQjNCM0IzO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIG1hdC1jaGVja2JveCAubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lciB7XG4gIHdpZHRoOiAxLjI1cmVtO1xuICBoZWlnaHQ6IDEuMjVyZW07XG59XG4ubWNrLXNlbGVjdC1vcHRpb24tc2VsZWN0ZWQge1xuICBmb250LXdlaWdodDogNTAwO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGNvbG9yOiBibGFjaztcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbn1cbi5tY2stc2VsZWN0LW9wdGlvbi1zZWxlY3RlZCAubWNrLXNwYWNlci1jb250ZW50IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFGNDBFNjtcbiAgbWFyZ2luLXJpZ2h0OiAwLjc1cmVtO1xufVxuLm1jay1zZWxlY3Qtb3B0aW9uLXVuc2VsZWN0ZWQge1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG4ubWNrLXNlbGVjdC1vcHRpb24tdW5zZWxlY3RlZC5tY2staWdub3JlLWRpc2FibGVkIHtcbiAgY29sb3I6IGJsYWNrO1xufVxuLm1jay1zZWxlY3Qtb3B0aW9uLXVuc2VsZWN0ZWQgLm1jay1zcGFjZXItY29udGVudCB7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgbWFyZ2luLXJpZ2h0OiAwLjc1cmVtO1xufVxuLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gIGhlaWdodDogNDBweDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgYm9yZGVyOiBub25lO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gIH1cbn1cbi5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgcGFkZGluZy1sZWZ0OiAwLjI1cmVtO1xuICBwYWRkaW5nLXJpZ2h0OiAwLjI1cmVtO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIH1cbn1cbi5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydCwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgaGVpZ2h0OiAzMnB4O1xuICBtaW4td2lkdGg6IDgzcHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0LCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIG1pbi13aWR0aDogMTU1cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0LCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIG1pbi13aWR0aDogMTU1cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodCwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodCwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2stcHJpbWFyeS1idXR0b24ge1xuICAgIGhlaWdodDogNDBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodCwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodCwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2stcHJpbWFyeS1idXR0b24ge1xuICAgIGhlaWdodDogNDBweDtcbiAgfVxufVxuLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZS5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZS5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZS5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgaGVpZ2h0OiAzMnB4O1xuICB3aWR0aDogMzJweDtcbiAgbWluLXdpZHRoOiAzMnB4O1xuICBwYWRkaW5nOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZS5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZS5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZS5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgICB3aWR0aDogNDBweDtcbiAgICBoZWlnaHQ6IDQwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZSwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2stcHJpbWFyeS1idXR0b24ge1xuICAgIHdpZHRoOiA0MHB4O1xuICAgIGhlaWdodDogNDBweDtcbiAgfVxufVxuLm1jay1wcmltYXJ5LWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMUY0MEU2O1xufVxuLm1jay1wcmltYXJ5LWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b25bZGlzYWJsZWRdLCAubWNrLXByaW1hcnktYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5kaXNhYmxlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNEMEQwRDA7XG4gIGNvbG9yOiAjNzU3NTc1O1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuLm1jay1wcmltYXJ5LWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b25bZGlzYWJsZWRdID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tY2stcHJpbWFyeS1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLmRpc2FibGVkID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICBjb2xvcjogIzc1NzU3NTtcbn1cbi5tY2stcHJpbWFyeS1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICBjb2xvcjogd2hpdGU7XG59XG4ubWNrLXNlY29uZGFyeS1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMyMjUxRkY7XG4gIGNvbG9yOiAjMjI1MUZGO1xufVxuLm1jay1zZWNvbmRhcnktYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b25bZGlzYWJsZWRdLCAubWNrLXNlY29uZGFyeS1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5kaXNhYmxlZCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuLm1jay1zZWNvbmRhcnktYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xufVxuLm1jay1zZWNvbmRhcnktYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgY29sb3I6ICMzMzMzMzM7XG59XG4ubWNrLXdhcm5pbmctYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmQwNDg7XG59XG4ubWNrLXdhcm5pbmctYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgY29sb3I6IGJsYWNrO1xufVxuLm1jay1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uIHtcbiAgYm9yZGVyOiAycHggc29saWQgI0IzQjNCMztcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBhZGRpbmctbGVmdDogMS43NXJlbTtcbiAgcGFkZGluZy1yaWdodDogMS43NXJlbTtcbn1cbi5tY2stc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQge1xuICBoZWlnaHQ6IDMycHg7XG4gIG1pbi13aWR0aDogODNweDtcbiAgcGFkZGluZy1sZWZ0OiAwLjI1cmVtO1xuICBwYWRkaW5nLXJpZ2h0OiAwLjI1cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydCB7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIG1pbi13aWR0aDogMTU1cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0IHtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgbWluLXdpZHRoOiAxNTVweDtcbiAgfVxufVxuLm1jay1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5IHtcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1jb2xvcjogIzFGNDBFNjtcbiAgY29sb3I6ICMxRjQwRTY7XG59XG4ubWNrLXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXRoaW4tYm9yZGVyLWxpZ2h0IHtcbiAgYm9yZGVyLWNvbG9yOiAjRDBEMEQwO1xuICBib3JkZXItd2lkdGg6IDFweDtcbn1cbi5tY2stc3Ryb2tlZC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgY29sb3I6ICMxRjQwRTY7XG59XG4ubWNrLXRvZ2dsZS1idXR0b24ge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIGJvcmRlcjogMXB4IHNvbGlkICNCM0IzQjM7XG4gIGJvcmRlci1jb2xvcjogI0QwRDBEMDtcbiAgbWluLXdpZHRoOiA1OXB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stdG9nZ2xlLWJ1dHRvbiB7XG4gICAgbWluLXdpZHRoOiAxMzJweDtcbiAgICBwYWRkaW5nLXRvcDogMC41cmVtO1xuICAgIHBhZGRpbmctYm90dG9tOiAwLjVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXRvZ2dsZS1idXR0b24ge1xuICAgIG1pbi13aWR0aDogMTMycHg7XG4gICAgcGFkZGluZy10b3A6IDAuNXJlbTtcbiAgICBwYWRkaW5nLWJvdHRvbTogMC41cmVtO1xuICB9XG59XG4ubWNrLXRvZ2dsZS1idXR0b24tc2VsZWN0ZWQge1xuICBjb2xvcjogIzFGNDBFNjtcbn1cbi5tY2stZGF0ZS1waWNrZXIge1xuICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stZGF0ZS1waWNrZXIge1xuICAgIG1heC13aWR0aDogMjNyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWRhdGUtcGlja2VyIHtcbiAgICBtYXgtd2lkdGg6IDIzcmVtO1xuICB9XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmhlYWRlci5oZWFkZXIge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGNvbG9yOiAjMDUxQzJDO1xuICBtYXJnaW4tdG9wOiAxLjI1cmVtO1xufVxuLm1jay1kYXRlLXBpY2tlciA+IC5oZWFkZXIuaGVhZGVyID4gLmFycm93LmFycm93IHtcbiAgd2lkdGg6IDIuMzc1cmVtO1xuICBoZWlnaHQ6IDJyZW07XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmhlYWRlci5oZWFkZXIgPiAuYXJyb3cuYXJyb3cgPiAuaWNvbi5pY29uIHtcbiAgd2lkdGg6IDFyZW07XG4gIGhlaWdodDogMXJlbTtcbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAuaGVhZGVyLmhlYWRlciA+IC5hcnJvdy5hcnJvdyA+IC5uZXh0Lm5leHQge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvYXJyb3ctZm9yd2FyZC5zdmdcIik7XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmhlYWRlci5oZWFkZXIgPiAuYXJyb3cuYXJyb3cgPiAucHJldmlvdXMucHJldmlvdXMge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvYXJyb3ctYmFja3dhcmQuc3ZnXCIpO1xufVxuLm1jay1kYXRlLXBpY2tlciA+IC5tb250aCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAud2VlayB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6ICM3Njc2NzY7XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmJvZHkge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmJvZHkgPiBkaXYgPiBkaXYuZGF0ZSA+IC5kb3Qge1xuICBkaXNwbGF5OiBub25lO1xufVxuLm1jay1kYXRlLXBpY2tlciA+IC5ib2R5ID4gZGl2ID4gZGl2LmRhdGUuZGlzYWJsZWQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgY29sb3I6ICM3Njc2NzY7XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmJvZHkgPiBkaXYgPiBkaXYuZGF0ZS5hY3RpdmUge1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMUY0MEU2O1xufVxuLm1jay1kYXRlLXBpY2tlciA+IC5ib2R5ID4gZGl2ID4gZGl2LmRhdGUubm9uLW1vbnRoIHtcbiAgY29sb3I6ICM3Njc2NzY7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLXNwYWNlci1jb250ZW50LWNvbGxhcHNlLXRhYmxldCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stc3BhY2VyLWNvbnRlbnQtY29sbGFwc2UtdGFibGV0IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stc3BhY2VyLWNvbnRlbnQtY29sbGFwc2UtdGFibGV0IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDQ4cHgpIHtcbiAgLm1jay1zcGFjZXItY29udGVudC1jb2xsYXBzZS10YWJsZXQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc3BhY2VyLWNvbnRlbnQtZXhwYW5kLW1vYmlsZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc3BhY2VyLWNvbnRlbnQtZXhwYW5kLW1vYmlsZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuLm1jay1zcGFjZXItY29udGVudC1kaXZpZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbCB7XG4gIGJveC1zaGFkb3c6IDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNFNkU2RTY7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRTZFNkU2O1xufVxuLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1jay1leHBhbmRlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4gIGJvcmRlci1ib3R0b206IG5vbmU7XG59XG4ubWNrLWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWNrLWV4cGFuZGVkIC5tY2stY29sbGFwc2UtaWNvbiB7XG4gIHdpZHRoOiAyNHB4O1xuICBoZWlnaHQ6IDI0cHg7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9jaGV2cm9uLWNsb3NlLnN2Z1wiKTtcbiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1jay1leHBhbmRlZCAubWNrLWNvbGxhcHNlLWljb24ge1xuICAgIHdpZHRoOiA0OHB4O1xuICAgIGhlaWdodDogNDhweDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvY2hldnJvbi1jbG9zZS1sYXJnZS5zdmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1jay1leHBhbmRlZCAubWNrLWNvbGxhcHNlLWljb24ge1xuICAgIHdpZHRoOiA0OHB4O1xuICAgIGhlaWdodDogNDhweDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvY2hldnJvbi1jbG9zZS1sYXJnZS5zdmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICB9XG59XG4ubWNrLWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtYm9keSB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgcGFkZGluZy1yaWdodDogMDtcbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1ib2R5ID4gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIHtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xuICBwYWRkaW5nLWxlZnQ6IDFyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDFyZW07XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGNvbG9yOiBibGFjaztcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgcGFkZGluZy1ib3R0b206IDAuNXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1ib2R5ID4gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIHtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1ib2R5ID4gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIHtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWJvZHkgPiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWJvZHkgPiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xuICB9XG59XG4ubWNrLWV4cGFuc2lvbi1wYW5lbCBtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciB7XG4gIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsIG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyID4gc3Bhbi5tYXQtY29udGVudCB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4ubWNrLWV4cGFuc2lvbi1wYW5lbCBtYXQtcGFuZWwtdGl0bGUge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGNvbG9yOiBibGFjaztcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsIC5tY2stY29sbGFwc2UtaWNvbiB7XG4gIHdpZHRoOiAyNHB4O1xuICBoZWlnaHQ6IDI0cHg7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9jaGV2cm9uLW9wZW4uc3ZnXCIpO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC41cyBlYXNlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwgLm1jay1jb2xsYXBzZS1pY29uIHtcbiAgICB3aWR0aDogNDhweDtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwibGlicy91aS9zcmMvbGliL2ljb25zL2NoZXZyb24tb3Blbi1sYXJnZS5zdmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwgLm1jay1jb2xsYXBzZS1pY29uIHtcbiAgICB3aWR0aDogNDhweDtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwibGlicy91aS9zcmMvbGliL2ljb25zL2NoZXZyb24tb3Blbi1sYXJnZS5zdmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICB9XG59XG4ubWNrLWV4cGFuc2lvbi1wYW5lbCAubWNrLWNvbGxhcHNlLWljb24uZXhwYW5kZWQge1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xufVxuLm1jay1pY29uLWZpbGwtb3BlbiB7XG4gIGZpbGw6ICMxRjQwRTY7XG59XG4ubWNrLWljb24tZmlsbC1jbG9zZSB7XG4gIGZpbGw6ICM3Njc2NzY7XG59XG4ubWNrLWljb24tZmlsbC1ibGFjayB7XG4gIGZpbGw6IGJsYWNrO1xuICBzdHJva2U6IGJsYWNrO1xufVxuLm1jay1pY29uLWZpbGwtd2hpdGUge1xuICBmaWxsOiB3aGl0ZTtcbiAgc3Ryb2tlOiB3aGl0ZTtcbn1cbi5tY2staWNvbi1maWxsLWdyYXkge1xuICBmaWxsOiAjMzMzMzMzO1xuICBzdHJva2U6ICMzMzMzMzM7XG59XG4ubWNrLW1pbiB7XG4gIG1heC13aWR0aDogNTgxcHggIWltcG9ydGFudDtcbiAgd2lkdGg6IDgwdnc7XG4gIG1heC1oZWlnaHQ6IDEwMHZoO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1taW4ge1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbiAgLm1jay1taW4gLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLW1pbiB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1pbiAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuLm1jay1ub2V4cGFuZCB7XG4gIG1heC13aWR0aDogNTgxcHggIWltcG9ydGFudDtcbiAgd2lkdGg6IDgwdncgIWltcG9ydGFudDtcbiAgbWF4LWhlaWdodDogMTAwdmg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLW5vZXhwYW5kIHtcbiAgICB3aWR0aDogY2FsYygxMDB2dyAtIDMycHgpICFpbXBvcnRhbnQ7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLW5vZXhwYW5kIHtcbiAgICB3aWR0aDogY2FsYygxMDB2dyAtIDMycHgpICFpbXBvcnRhbnQ7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbn1cbi5tY2stbW9kYWwge1xuICBtYXgtd2lkdGg6IDgwMHB4ICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiA4MHZ3O1xuICBtYXgtaGVpZ2h0OiAxMDB2aDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stbW9kYWwge1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbiAgLm1jay1tb2RhbCAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwge1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbiAgLm1jay1tb2RhbCAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuLm1jay1tb2RhbC1taW5pIHtcbiAgbWF4LXdpZHRoOiA1ODBweCAhaW1wb3J0YW50O1xuICBtYXgtaGVpZ2h0OiAxMDB2aDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stbW9kYWwtbWluaSB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsLW1pbmkgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLW1vZGFsLW1pbmkge1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbiAgLm1jay1tb2RhbC1taW5pIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG4ubWNrLW1vZGFsLXN1cnZleSB7XG4gIG1heC13aWR0aDogNjkxcHggIWltcG9ydGFudDtcbiAgbWF4LWhlaWdodDogMTAwdmg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLW1vZGFsLXN1cnZleSAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwtc3VydmV5IC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG4ubWNrLW1vZGFsLXdpZGUge1xuICBtYXgtd2lkdGg6IDEwMjRweCAhaW1wb3J0YW50O1xuICB3aWR0aDogMTAwdnc7XG4gIGhlaWdodDogOTV2aDtcbiAgbWF4LWhlaWdodDogMTAwdmg7XG59XG4ubWNrLW1vZGFsLXdpZGUgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4gIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5tY2stbW9kYWwtd2lkZSAubWF0LWRpYWxvZy1jb250ZW50IC5tYXQtaWNvbi1idXR0b25bbmFtZT1DbG9zZUJ1dHRvbl0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHJpZ2h0OiAzMnB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1tb2RhbC13aWRlIC5tYXQtZGlhbG9nLWNvbnRlbnQgLm1hdC1pY29uLWJ1dHRvbltuYW1lPUNsb3NlQnV0dG9uXSAuY2xvc2UtaW1hZ2Uge1xuICAgIGhlaWdodDogMzJweDtcbiAgICB3aWR0aDogMzJweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwtd2lkZSAubWF0LWRpYWxvZy1jb250ZW50IC5tYXQtaWNvbi1idXR0b25bbmFtZT1DbG9zZUJ1dHRvbl0gLmNsb3NlLWltYWdlIHtcbiAgICBoZWlnaHQ6IDMycHg7XG4gICAgd2lkdGg6IDMycHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stbW9kYWwtd2lkZSB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsLXdpZGUgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLW1vZGFsLXdpZGUge1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbiAgLm1jay1tb2RhbC13aWRlIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG4ubWNrLW1vZGFsLXdpZGUtbWFuYWdlLWJvb2tpbmcge1xuICBtYXgtd2lkdGg6IDEwMjRweCAhaW1wb3J0YW50O1xuICB3aWR0aDogMTAwdnc7XG4gIG1heC1oZWlnaHQ6IDk1dmg7XG59XG4ubWNrLW1vZGFsLXdpZGUtbWFuYWdlLWJvb2tpbmcgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4gIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5tY2stbW9kYWwtd2lkZS1tYW5hZ2UtYm9va2luZyAubWF0LWRpYWxvZy1jb250ZW50IC5tYXQtaWNvbi1idXR0b25bbmFtZT1DbG9zZUJ1dHRvbl0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHJpZ2h0OiAzMnB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1tb2RhbC13aWRlLW1hbmFnZS1ib29raW5nIC5tYXQtZGlhbG9nLWNvbnRlbnQgLm1hdC1pY29uLWJ1dHRvbltuYW1lPUNsb3NlQnV0dG9uXSAuY2xvc2UtaW1hZ2Uge1xuICAgIGhlaWdodDogMzJweDtcbiAgICB3aWR0aDogMzJweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwtd2lkZS1tYW5hZ2UtYm9va2luZyAubWF0LWRpYWxvZy1jb250ZW50IC5tYXQtaWNvbi1idXR0b25bbmFtZT1DbG9zZUJ1dHRvbl0gLmNsb3NlLWltYWdlIHtcbiAgICBoZWlnaHQ6IDMycHg7XG4gICAgd2lkdGg6IDMycHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stbW9kYWwtd2lkZS1tYW5hZ2UtYm9va2luZyB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsLXdpZGUtbWFuYWdlLWJvb2tpbmcgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLW1vZGFsLXdpZGUtbWFuYWdlLWJvb2tpbmcge1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbiAgLm1jay1tb2RhbC13aWRlLW1hbmFnZS1ib29raW5nIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLWFsZXJ0IHtcbiAgICBtYXgtd2lkdGg6IDEwMHZ3ICFpbXBvcnRhbnQ7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIG1hcmdpbi1sZWZ0OiAxcmVtO1xuICAgIG1hcmdpbi1yaWdodDogMXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stYWxlcnQge1xuICAgIG1heC13aWR0aDogMTAwdncgIWltcG9ydGFudDtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgbWFyZ2luLWxlZnQ6IDFyZW07XG4gICAgbWFyZ2luLXJpZ2h0OiAxcmVtO1xuICB9XG59XG4ubWNrLWFsZXJ0LWJhY2tkcm9wIHtcbiAgYmFja2dyb3VuZDogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xufVxuLm1jay1zbGlkZS10b2dnbGUubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkgLm1hdC1zbGlkZS10b2dnbGUtYmFyLm1hdC1zbGlkZS10b2dnbGUtYmFyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzIyNTFGRjtcbn1cbi5tY2stc2xpZGUtdG9nZ2xlLm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQ6bm90KC5tYXQtZGlzYWJsZWQpIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbn1cbi5tY2stc2xpZGUtdG9nZ2xlLm1hdC1zbGlkZS10b2dnbGUge1xuICBoZWlnaHQ6IGF1dG87XG59XG4ubWNrLXNsaWRlLXRvZ2dsZSAubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudCB7XG4gIGZsZXg6IDE7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIC13ZWJraXQtbGluZS1jbGFtcDogMjtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbn1cbi5tY2stc2xpZGUtdG9nZ2xlIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIge1xuICB3aWR0aDogMTRweDtcbiAgaGVpZ2h0OiAxNHB4O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg1MCUsIDUwJSk7XG59XG4ubWNrLXNsaWRlLXRvZ2dsZSAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXIubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXIge1xuICB0b3A6IC00cHg7XG4gIGxlZnQ6IC00cHg7XG59XG4ubWNrLXNsaWRlLXRvZ2dsZSAubWF0LXNsaWRlLXRvZ2dsZS1iYXIubWF0LXNsaWRlLXRvZ2dsZS1iYXIge1xuICBoZWlnaHQ6IDIwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNEMEQwRDA7XG4gIGJvcmRlci1yYWRpdXM6IDIwcHg7XG59XG4ubWNrLXNrZWxldG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbn1cbi5tY2stc2tlbGV0b24tY2hlY2tib3gge1xuICBmbG9hdDogbGVmdDtcbn1cbi5tY2stc2tlbGV0b24tY2hlY2tib3ggPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIHdpZHRoOiAyMHB4O1xuICBoZWlnaHQ6IDIwcHg7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG4ubWNrLXNrZWxldG9uLWhlYWRlciA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgd2lkdGg6IDEwMHZ3O1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBtYXgtd2lkdGg6IDIxNXB4O1xufVxuLm1jay1za2VsZXRvbi1pbWFnZSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgd2lkdGg6IDgxcHg7XG4gIGhlaWdodDogODJweDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stc2tlbGV0b24taW1hZ2UgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgd2lkdGg6IDIxOXB4O1xuICAgIGhlaWdodDogMTE5cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAxMDQ4cHgpIHtcbiAgLm1jay1za2VsZXRvbi1pbWFnZSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICB3aWR0aDogMjE5cHg7XG4gICAgaGVpZ2h0OiAxMTlweDtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1zdGF0dXMgPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIHdpZHRoOiAxMTdweDtcbiAgaGVpZ2h0OiA3OHB4O1xuICBtYXJnaW4tdG9wOiAxMHB4O1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogODAwcHgpIHtcbiAgLm1jay1za2VsZXRvbi1zdGF0dXMgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgd2lkdGg6IDExN3B4O1xuICAgIGhlaWdodDogNzhweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDEwNDhweCkge1xuICAubWNrLXNrZWxldG9uLXN0YXR1cyA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuICB9XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtMSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgaGVpZ2h0OiAyM3B4O1xuICBtYXgtd2lkdGg6IDE3NnB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTEgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAyMTlweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS0xID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogMjE5cHg7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS0yID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogMTY1cHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtMiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDE4OXB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTIgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAxODlweDtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTMgPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIGhlaWdodDogMThweDtcbiAgbWF4LXdpZHRoOiAxNDdweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS0zID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogMTg5cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtMyA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDE4OXB4O1xuICB9XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtMzBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS0zMHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgaGVpZ2h0OiAxOHB4O1xuICBtYXgtd2lkdGg6IDMwJTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS0zMHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTMwcC10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogMzAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTMwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtMzBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAzMCU7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS0zMHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtMzBwLXRoaW4tdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtNDVwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS00NXAtdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgaGVpZ2h0OiAxOHB4O1xuICBtYXgtd2lkdGg6IDQ1JTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS00NXAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTQ1cC10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogNDUlO1xuICAgIG1hcmdpbi1yaWdodDogNDUlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTQ1cCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNDVwLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA0NSU7XG4gICAgbWFyZ2luLXJpZ2h0OiA0NSU7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS00NXAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNDVwLXRoaW4tdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtNTBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogNTAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTUwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTUwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDUwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDQ1JTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS01MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTUwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA1MCU7XG4gICAgbWFyZ2luLXJpZ2h0OiA0NSU7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaW4tdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaWNrLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gIGhlaWdodDogMTZweDtcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xufVxuLm1jay1za2VsZXRvbi1saW5lLTUwcC10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaW4tdGhpY2sgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTUwcC10aGljay10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAzMnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtNjBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogNjAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTYwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTYwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDYwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDM1JTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS02MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTYwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA2MCU7XG4gICAgbWFyZ2luLXJpZ2h0OiAzNSU7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaW4tdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaWNrLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gIGhlaWdodDogMTZweDtcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xufVxuLm1jay1za2VsZXRvbi1saW5lLTYwcC10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaW4tdGhpY2sgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTYwcC10aGljay10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAzMnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtNzBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogNzAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTcwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTcwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDcwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDI1JTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS03MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTcwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA3MCU7XG4gICAgbWFyZ2luLXJpZ2h0OiAyNSU7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaW4tdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaWNrLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gIGhlaWdodDogMTZweDtcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xufVxuLm1jay1za2VsZXRvbi1saW5lLTcwcC10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaW4tdGhpY2sgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTcwcC10aGljay10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAzMnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtODBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogODAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTgwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTgwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDgwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDE1JTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS04MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTgwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA4MCU7XG4gICAgbWFyZ2luLXJpZ2h0OiAxNSU7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaW4tdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaWNrLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gIGhlaWdodDogMTZweDtcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xufVxuLm1jay1za2VsZXRvbi1saW5lLTgwcC10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaW4tdGhpY2sgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTgwcC10aGljay10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAzMnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtOTBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS05MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgaGVpZ2h0OiAxOHB4O1xuICBtYXgtd2lkdGg6IDkwJTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS05MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTkwcC10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogOTAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTkwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtOTBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA5MCU7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS05MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtOTBwLXRoaW4tdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxvYWQtbW9yZSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgbWFyZ2luLXRvcDogMC41cmVtO1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG4gIHdpZHRoOiBjYWxjKDEwMHZ3IC0gKDIgKiAxcmVtKSk7XG4gIGhlaWdodDogNDBweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbG9hZC1tb3JlID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogMzIwcHg7XG4gICAgaGVpZ2h0OiA1MHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1sb2FkLW1vcmUgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAzMjBweDtcbiAgICBoZWlnaHQ6IDUwcHg7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbG9hZC1tb3JlLTEwMHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1oZWFkZXIgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1yb29tLWF2YWlsYWJpbGl0eSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgbWFyZ2luLXRvcDogMC41cmVtO1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG4gIHdpZHRoOiBjYWxjKDEwMHZ3IC0gKDIgKiAxcmVtKSk7XG4gIGhlaWdodDogNDBweDtcbiAgbWF4LXdpZHRoOiBub25lO1xuICB3aWR0aDogMTAwJTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbG9hZC1tb3JlLTEwMHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1oZWFkZXIgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1yb29tLWF2YWlsYWJpbGl0eSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IG5vbmU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiA1MHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1sb2FkLW1vcmUtMTAwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWhlYWRlciA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLXJvb20tYXZhaWxhYmlsaXR5ID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDUwcHg7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbG9hZC1tb3JlLTEwMHAgPiAubG9hZGVyLmxvYWRlci1yb29tLWF2YWlsYWJpbGl0eSA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWhlYWRlciA+IC5sb2FkZXIubG9hZGVyLXJvb20tYXZhaWxhYmlsaXR5ID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tcm9vbS1hdmFpbGFiaWxpdHkgPiAubG9hZGVyLmxvYWRlci1yb29tLWF2YWlsYWJpbGl0eSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxMjRweDtcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xufVxuXG4ubWNrLWhlYWRpbmctNSB7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMS41cmVtO1xuICBsaW5lLWhlaWdodDogMS4zMzM7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWhlYWRpbmctNSB7XG4gICAgZm9udC1zaXplOiAxLjc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2staGVhZGluZy01IHtcbiAgICBmb250LXNpemU6IDEuNzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMTQyO1xuICB9XG59XG5cbm5neC1tYXQtc2VsZWN0LXNlYXJjaCAubWF0LXNlbGVjdC1zZWFyY2gtbm8tZW50cmllcy1mb3VuZCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbm5neC1tYXQtc2VsZWN0LXNlYXJjaCAubWF0LXNlbGVjdC1zZWFyY2gtaW5wdXQge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5uZ3gtbWF0LXNlbGVjdC1zZWFyY2ggYnV0dG9uLm1hdC1idXR0b24ubWF0LXNlbGVjdC1zZWFyY2gtY2xlYXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiBub25lO1xuICBjb2xvcjogYmxhY2s7XG59XG5cbjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICB3aWR0aDogMTZweDtcbiAgaGVpZ2h0OiAxOHB4O1xufVxuXG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgaGVpZ2h0OiAxLjVyZW07XG4gIGJvcmRlcjogNHB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMCk7XG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzc1NzU3NTtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAtMXB4IC0xcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4wNSksIGluc2V0IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG59XG5cbjo6LXdlYmtpdC1zY3JvbGxiYXItYnV0dG9uIHtcbiAgd2lkdGg6IDA7XG4gIGhlaWdodDogMDtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuaGVhZGVyIHtcbiAgei1pbmRleDogMjtcbn1cblxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1iLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tYi1ibG9jayB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cblxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1iLWJvdHRvbSB7XG4gICAgcGFkZGluZy1ib3R0b206IDExMHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1iLWJvdHRvbSB7XG4gICAgcGFkZGluZy1ib3R0b206IDExMHB4O1xuICB9XG59XG5cbi5tYXAtZmlsdGVycy1jb250YWluZXIgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gIHRvcDogNXB4O1xufVxuLm1hcC1maWx0ZXJzLWNvbnRhaW5lciAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICBoZWlnaHQ6IDQ4cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xufVxuLm1hcC1maWx0ZXJzLWNvbnRhaW5lciAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgcGFkZGluZy10b3A6IDAuNXJlbSAhaW1wb3J0YW50O1xufVxuXG4ub2ZmaWNlLWxldmVsLXJvdyAubWF0LXNlbGVjdC1wbGFjZWhvbGRlciB7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAub2ZmaWNlLWxldmVsLXJvdyAubGVnZW5kLWNvbnRhaW5lciAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwgLm9mZmljZS1sZXZlbC1yb3cgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICBoZWlnaHQ6IDQ1cHggIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5vZmZpY2UtbGV2ZWwtcm93IC5sZWdlbmQtY29udGFpbmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAub2ZmaWNlLWxldmVsLXJvdyAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgIGhlaWdodDogNDVweCAhaW1wb3J0YW50O1xuICB9XG59XG4ub2ZmaWNlLWxldmVsLXJvdyAuc2VsZWN0LWRpdmlkZXIge1xuICBkaXNwbGF5OiBibG9jaztcbiAgdG9wOiAwICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiA0NHB4ICFpbXBvcnRhbnQ7XG4gIHJpZ2h0OiAtMTFweCAhaW1wb3J0YW50O1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICBib3JkZXItd2lkdGg6IDAgMCAwIDFweDtcbiAgYm9yZGVyLWNvbG9yOiAjYzZjNmM2O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm9mZmljZS1sZXZlbC1yb3cgLnNlbGVjdC1kaXZpZGVyIHtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDFweCkgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5vZmZpY2UtbGV2ZWwtcm93IC5zZWxlY3QtZGl2aWRlciB7XG4gICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAxcHgpICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi5vZmZpY2UtbGV2ZWwtcm93IC5kaXNhYmxlZCAuc2VsZWN0LWRpdmlkZXIge1xuICBiYWNrZ3JvdW5kOiAjRjBGMEYwICFpbXBvcnRhbnQ7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAub2ZmaWNlLWxldmVsLXJvdyAuZGlzYWJsZWQgLnNlbGVjdC1kaXZpZGVyIHtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDJweCkgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5vZmZpY2UtbGV2ZWwtcm93IC5kaXNhYmxlZCAuc2VsZWN0LWRpdmlkZXIge1xuICAgIGhlaWdodDogY2FsYygxMDAlIC0gMnB4KSAhaW1wb3J0YW50O1xuICB9XG59XG4ub2ZmaWNlLWxldmVsLXJvdyAuZGlzYWJsZWQgLnNlbGVjdC1jaGV2cm9uIHtcbiAgb3BhY2l0eTogMC41O1xuICBtYXJnaW4tbGVmdDogMTBweDtcbn1cblxuLm9mZmljZS1sZXZlbC1yb3cgLmxlZ2VuZC1jb250YWluZXIgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsIC5vZmZpY2UtbGV2ZWwtcm93IC5tYXQtZm9ybS1maWVsZC1pbmZpeCwgLm1hcC1jb250cm9scyAubGVnZW5kLWNvbnRhaW5lciAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwgLm1hcC1jb250cm9scyAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50O1xufVxuXG4uYm9va2luZy1mb3JtLWNvbnRhaW5lciB7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAzNDVweCk7XG59XG5cbi5ib29raW5nLWZvcm0tY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dCBtYXQtbGFiZWwsIC5ib29raW5nLWZvcm0tY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dCAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnQge1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCIgIWltcG9ydGFudDtcbiAgY29sb3I6ICMzMzMzMzM7XG59XG4uYm9va2luZy1mb3JtLWNvbnRhaW5lciAubWNrLWZvcm0taW5wdXQgaW5wdXQsIC5ib29raW5nLWZvcm0tY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dCBpbnB1dDo6cGxhY2Vob2xkZXIge1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGNvbG9yOiAjQjNCM0IzO1xufVxuXG5mb3JtIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIGZvcm0ge1xuICAgIHBhZGRpbmc6IDAgMTBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIGZvcm0ge1xuICAgIHBhZGRpbmc6IDAgMTBweDtcbiAgfVxufVxuXG4ubWNrLXJvdy1mbG93IHtcbiAgZGlzcGxheTogZmxleDtcbn1cbi5tY2stcm93LWZsb3cgPiBkaXYge1xuICBmbGV4OiAxO1xuICBtaW4td2lkdGg6IDE4MHB4O1xuICBmbGV4LWZsb3c6IGNvbHVtbjtcbn1cbi5tY2stcm93LWZsb3cgPiBkaXY6bnRoLWNoaWxkKDIpIHtcbiAgbWFyZ2luLWxlZnQ6IDIwcHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLXJvdy1mbG93ID4gZGl2Om50aC1jaGlsZCgyKSB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLXJvdy1mbG93ID4gZGl2Om50aC1jaGlsZCgyKSB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gIH1cbn1cblxuLmNvbXBhbnktY29udGFpbmVyID4gZGl2Om50aC1jaGlsZCgyKSB7XG4gIG1hcmdpbi1sZWZ0OiAwcHg7XG59XG5cbi5yb3ctd2l0aC1zcGFjaW5nIHtcbiAgbWFyZ2luLWJvdHRvbTogMS41cmVtO1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbn1cbi5yb3ctd2l0aC1zcGFjaW5nIGxhYmVsIHtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xufVxuLnJvdy13aXRoLXNwYWNpbmcgcCB7XG4gIGNvbG9yOiAjZTEyZTQxO1xuICBtYXJnaW46IDA7XG59XG4ucm93LXdpdGgtc3BhY2luZyBwLmNoZWNraW5nIHtcbiAgY29sb3I6ICMwMDAwMDA7XG59XG4ucm93LXdpdGgtc3BhY2luZyBwLmF2YWlsYWJsZSB7XG4gIGNvbG9yOiAjM2FhNTM3O1xufVxuLnJvdy13aXRoLXNwYWNpbmcgcC5zYi1zdGF0dXMge1xuICBwYWRkaW5nOiAwIDEwcHggMCAzNHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4ucm93LXdpdGgtc3BhY2luZyBwLnNiLXN0YXR1cyBpbWcge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNHB4O1xuICBsZWZ0OiA0cHg7XG59XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5mbGV4LXJvdyB7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICBtYXJnaW4tcmlnaHQ6IDFlbTtcbiAgfVxuICAuZmxleC1yb3cgPiBkaXYge1xuICAgIHdpZHRoOiA0NyU7XG4gICAgbWluLXdpZHRoOiA0MCU7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgZmxleDogbm9uZTtcbiAgfVxuICAuZmxleC1yb3cgLmNvbXBhbnktZmllbGQge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmZsZXgtcm93IHtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAgIG1hcmdpbi1yaWdodDogMWVtO1xuICB9XG4gIC5mbGV4LXJvdyA+IGRpdiB7XG4gICAgd2lkdGg6IDQ3JTtcbiAgICBtaW4td2lkdGg6IDQwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBmbGV4OiBub25lO1xuICB9XG4gIC5mbGV4LXJvdyAuY29tcGFueS1maWVsZCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLmF0dGVuZGVlcy1pbnB1dCB7XG4gIG1hcmdpbi1yaWdodDogMWVtO1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxubWF0LWhpbnQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5tYXQtaGludCBzcGFuIHtcbiAgY29sb3I6ICMxRjQwRTY7XG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbm1hdC1oaW50IC5oaW50IHtcbiAgd2lkdGg6IDQyOXB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjaztcbiAgY29sb3I6IHdoaXRlO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHBhZGRpbmc6IDEwcHg7XG4gIHRvcDogMjZweDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIG1hdC1oaW50IC5oaW50IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICBtYXQtaGludCAuaGludCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG59XG5tYXQtaGludCAuaGludCAudHJpYW5nbGUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogLTZweDtcbiAgbGVmdDogMTJweDtcbiAgd2lkdGg6IDEycHg7XG4gIGhlaWdodDogMTJweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG4gIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcbn1cblxuLm1jay1mb3JtLWlucHV0IHtcbiAgbWluLXdpZHRoOiAxMDAlO1xuICBtYXJnaW4tdG9wOiAxLjI1ZW07XG4gIG1hcmdpbi1yaWdodDogMWVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LXNpemU6IDE2cHg7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAwLjVlbTtcbn1cbi5tY2stZm9ybS1pbnB1dCBzcGFuIHtcbiAgY29sb3I6ICNkMTQ4NGY7XG59XG4ubWNrLWZvcm0taW5wdXQuZXJyb3Ige1xuICBjb2xvcjogI2U1MzkzNTtcbn1cblxubWF0LWZvcm0tZmllbGQge1xuICBmbGV4OiAxO1xufVxubWF0LWZvcm0tZmllbGQuYm9va2VkIHtcbiAgY29sb3I6ICNkMTQ4NGY7XG59XG5tYXQtZm9ybS1maWVsZC5hdmFpbGFibGUge1xuICBjb2xvcjogIzNhYTUzNztcbn1cbm1hdC1mb3JtLWZpZWxkIGlucHV0IHtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBwYWRkaW5nLXRvcDogOHB4O1xufVxubWF0LWZvcm0tZmllbGQgbWF0LWVycm9yIHtcbiAgcGFkZGluZy10b3A6IDEycHg7XG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IDQwcHg7XG59XG5tYXQtZm9ybS1maWVsZCBtYXQtZXJyb3Igc3BhbiB7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGxlZnQ6IDEwcHg7XG4gIHRvcDogMnB4O1xufVxubWF0LWZvcm0tZmllbGQgbWF0LWVycm9yIC5lcnJvci1pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAtMTJweDtcbiAgd2lkdGg6IDE2cHg7XG4gIGhlaWdodDogMTZweDtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwibGlicy91aS9zcmMvbGliL2ljb25zL2Vycm9yLWNsb3NlLnN2Z1wiKTtcbiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxubWF0LWZvcm0tZmllbGQgLmljb24ge1xuICB3aWR0aDogOHB4O1xufVxuXG5tYXQtdGFiIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4uZmllbGQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBtaW4td2lkdGg6IDE0ZW07XG4gIGZsZXg6IDE7XG4gIGZsZXgtd3JhcDogd3JhcDtcbn1cblxudGV4dGFyZWEge1xuICBtaW4taGVpZ2h0OiA3ZW07XG59XG5cbi5maWVsZHNldCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbn1cbi5maWVsZHNldCAuZmllbGQge1xuICBtYXJnaW46IDAgMC4yNWVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmZpZWxkc2V0IC5maWVsZCB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmZpZWxkc2V0IC5maWVsZCB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG4uZmllbGRzZXQgLmZpZWxkOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLWxlZnQ6IDA7XG59XG4uZmllbGRzZXQgLmZpZWxkOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tcmlnaHQ6IDA7XG59XG5cbi5lcnJvciB7XG4gIGNvbG9yOiAjZTUzOTM1O1xufVxuXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuZmxleC1jb250YWluZXIgLmZ1bGwtd2lkdGgge1xuICAgIG1pbi13aWR0aDogY2FsYygxMDAlIC0gMWVtKTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5mbGV4LWNvbnRhaW5lciAuZnVsbC13aWR0aCB7XG4gICAgbWluLXdpZHRoOiBjYWxjKDEwMCUgLSAxZW0pO1xuICB9XG59XG4uZmxleC1jb250YWluZXIgbWF0LWZvcm0tZmllbGQgOjpuZy1kZWVwIGRpdiBkaXYge1xuICBoZWlnaHQ6IDQ3cHg7XG59IiwiQGltcG9ydCBcInZhcnNcIjtcblxuQG1peGluIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJHNpemUsICRxdWFsaWZpZXIpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBpZiAoJHF1YWxpZmllciA9PSBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIGlmICgkcXVhbGlmaWVyID09IG1heC13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtYXgtd2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBtaXhpbiBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJG1pbiwgJG1heCkge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gdGhpcyBpcyBhIGNvcHkgb2YgcmVzcG9uZC10by4gd2UgZG9uJ3Qgd2FudCB0byBwcmVzZXJ2ZSB0aGF0IG1ldGhvZCBzaW5jZSB0aGUgYnJlYWtwb2ludHMgbWF5IGRpdmVyZ2UgZnJvbSB0aGUgb2xkIFVJLlxuQG1peGluIGlzLXNjcmVlbi1zaXplKCRtZWRpYTogYWxsLCAkb3JpZW50YXRpb246IG5vbmUpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuXG5AbWl4aW4gcGFnZS1wYWRkaW5nIHtcbiAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xufVxuXG4vLyBGb250IE1peGluc1xuJGZvbnQtbWNraW5zZXktc2FuczogXCJNY0tpbnNleSBTYW5zXCI7XG4kZm9udC10aGVpbmhhcmR0OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiRmb250LWJvd2VyOiBcIkJvd2VyXCI7XG5cbkBtaXhpbiBib3dlci1ib2xkIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtYm93ZXI7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIG1ja2luc2V5LXNhbnMge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBkaXNwbGF5LTEge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDRyZW07IC8vIDY0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTg3OyAvLyA3NnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0yIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0zIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTQge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzcmVtOyAvLyA0OHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTY2OyAvLyA1NnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDY0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTUge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuODMzOyAvLyAzNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42NDI7IC8vIDQwcHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTcge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDQ4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjc1cmVtOyAvLyA0NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNTJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICBsaW5lLWhlaWdodDogMS4xMTE7IC8vIDQ0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA0OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0zIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjIyOyAvLyA0NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy00IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy01IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyODhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy02IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTU1OyAvLyAyOHB4XG4gICAgfVxufVxuXG5AbWl4aW4gYm9keS1kZWZhdWx0IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI2cHhcbiAgICB9XG59XG5cbi8vLyBEb2VzbnQgZXhpc3QgaW4gTURTLlxuQG1peGluIGJvZHktdGlueSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07IC8vIDEycHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyMHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZm9ybS1sYWJlbCB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LWZhbWlseTogJGZvbnQtdGhlaW5oYXJkdDtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgY29sb3I6ICRwbGFjZWhvbGRlci1jb2xvcjtcbiAgICBmb250LXdlaWdodDogMzAwO1xufVxuXG5AbWl4aW4gY2hpcC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIGNoZWNrYm94LWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgY29sb3I6IGJsYWNrO1xufVxuXG4vLyBib3JkZXJzXG5cbkBtaXhpbiBtY2stY2hlY2tib3gtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAycHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLXRoaW4tYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlci1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJvcmRlci1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50LWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXItbGlnaHQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5cbi8vIGZ1bmN0aW9uc1xuXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbkBtaXhpbiBtYXgtbGluZXMoJGNvdW50KSB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAtd2Via2l0LWxpbmUtY2xhbXA6ICRjb3VudDtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuXG4vLyBpbWFnZXNcbkBtaXhpbiBtY2staWNvbigkd2lkdGgsICRhc3NldCwgJGhlaWdodDogJHdpZHRoLCAgJGFzc2V0UGF0aDogXCJsaWJzL3VpL3NyYy9saWIvaWNvbnNcIiwpIHtcbiAgICB3aWR0aDogJHdpZHRoO1xuICAgIGhlaWdodDogJGhlaWdodDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIjeyRhc3NldFBhdGh9LyN7JGFzc2V0fVwiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG59XG5cblxuQG1peGluIG1jay1zbWFsbC1pY29uKCRtb2JpbGUtYXNzZXQsICRkZXNrdG9wLWFzc2V0OiAkbW9iaWxlLWFzc2V0KSB7XG4gICAgQGluY2x1ZGUgbWNrLWljb24oMTZweCwgJGFzc2V0OiAkbW9iaWxlLWFzc2V0KTtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oMjRweCwgJGFzc2V0OiAkZGVza3RvcC1hc3NldCk7XG4gICAgfVxufVxuXG4vLyBza2VsZXRvblxuQG1peGluIHNrZWxldG9uLWJnIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItaW1hZ2Utc2l6ZSB7XG4gICAgd2lkdGg6IDgxcHg7XG4gICAgaGVpZ2h0OiA4MnB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMjE5cHg7XG4gICAgICAgIGhlaWdodDogMTE5cHg7XG4gICAgfVxufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItc3RhdHVzLXNpemUge1xuICAgIHdpZHRoOiAxMTdweDtcbiAgICBoZWlnaHQ6IDc4cHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAxMTdweDtcbiAgICAgICAgaGVpZ2h0OiA3OHB4O1xuICAgIH1cbn1cbiIsIi8vIEltcG9ydCBhbGwgdGhlIHRoZW1pbmcgZnVuY3Rpb25hbGl0eS5cbi8vIFdlIHdhbnQgb3ZlcmxheXMgdG8gYWx3YXlzIGFwcGVhciBvdmVyIHVzZXIgY29udGVudCwgc28gc2V0IGEgYmFzZWxpbmVcbi8vIHZlcnkgaGlnaCB6LWluZGV4IGZvciB0aGUgb3ZlcmxheSBjb250YWluZXIsIHdoaWNoIGlzIHdoZXJlIHdlIGNyZWF0ZSB0aGUgbmV3XG4vLyBzdGFja2luZyBjb250ZXh0IGZvciBhbGwgb3ZlcmxheXMuXG4kY2RrLXotaW5kZXgtb3ZlcmxheS1jb250YWluZXI6IDEwMDAgIWRlZmF1bHQ7XG4kY2RrLXotaW5kZXgtb3ZlcmxheTogMTAwMCAhZGVmYXVsdDtcbiRjZGstei1pbmRleC1vdmVybGF5LWJhY2tkcm9wOiAxMDAwICFkZWZhdWx0O1xuXG4vLyBCYWNrZ3JvdW5kIGNvbG9yIGZvciBhbGwgb2YgdGhlIGJhY2tkcm9wc1xuJGNkay1vdmVybGF5LWRhcmstYmFja2Ryb3AtYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjMyKSAhZGVmYXVsdDtcblxuLy8gRGVmYXVsdCBiYWNrZHJvcCBhbmltYXRpb24gaXMgYmFzZWQgb24gdGhlIE1hdGVyaWFsIERlc2lnbiBzd2lmdC1lYXNlLW91dC5cbiRiYWNrZHJvcC1hbmltYXRpb24tZHVyYXRpb246IDQwMG1zICFkZWZhdWx0O1xuJGJhY2tkcm9wLWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpICFkZWZhdWx0O1xuXG5cbkBtaXhpbiBjZGstb3ZlcmxheSgpIHtcbiAgLmNkay1vdmVybGF5LWNvbnRhaW5lciwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyIHtcbiAgICAvLyBEaXNhYmxlIGV2ZW50cyBmcm9tIGJlaW5nIGNhcHR1cmVkIG9uIHRoZSBvdmVybGF5IGNvbnRhaW5lci5cbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcblxuICAgIC8vIFRoZSBjb250YWluZXIgc2hvdWxkIGJlIHRoZSBzaXplIG9mIHRoZSB2aWV3cG9ydC5cbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICAvLyBUaGUgb3ZlcmxheS1jb250YWluZXIgaXMgYW4gaW52aXNpYmxlIGVsZW1lbnQgd2hpY2ggY29udGFpbnMgYWxsIGluZGl2aWR1YWwgb3ZlcmxheXMuXG4gIC5jZGstb3ZlcmxheS1jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB6LWluZGV4OiAkY2RrLXotaW5kZXgtb3ZlcmxheS1jb250YWluZXI7XG5cbiAgICAmOmVtcHR5IHtcbiAgICAgIC8vIEhpZGUgdGhlIGVsZW1lbnQgd2hlbiBpdCBkb2Vzbid0IGhhdmUgYW55IGNoaWxkIG5vZGVzLiBUaGlzIGRvZXNuJ3RcbiAgICAgIC8vIGluY2x1ZGUgb3ZlcmxheXMgdGhhdCBoYXZlIGJlZW4gZGV0YWNoZWQsIHJhdGhlciB0aGFuIGRpc3Bvc2VkLlxuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAvLyBXZSB1c2UgYW4gZXh0cmEgd3JhcHBlciBlbGVtZW50IGluIG9yZGVyIHRvIHVzZSBtYWtlIHRoZSBvdmVybGF5IGl0c2VsZiBhIGZsZXggaXRlbS5cbiAgLy8gVGhpcyBtYWtlcyBjZW50ZXJpbmcgdGhlIG92ZXJsYXkgZWFzeSB3aXRob3V0IHJ1bm5pbmcgaW50byB0aGUgc3VicGl4ZWwgcmVuZGVyaW5nXG4gIC8vIHByb2JsZW1zIHRpZWQgdG8gdXNpbmcgYHRyYW5zZm9ybWAgYW5kIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCB0aGUgb3RoZXIgcG9zaXRpb25cbiAgLy8gc3RyYXRlZ2llcy5cbiAgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB6LWluZGV4OiAkY2RrLXotaW5kZXgtb3ZlcmxheTtcbiAgfVxuXG4gIC8vIEEgc2luZ2xlIG92ZXJsYXkgcGFuZS5cbiAgLmNkay1vdmVybGF5LXBhbmUge1xuICAgIC8vIE5vdGU6IGl0J3MgaW1wb3J0YW50IGZvciB0aGlzIG9uZSB0byBzdGFydCBvZmYgYGFic29sdXRlYCxcbiAgICAvLyBpbiBvcmRlciBmb3IgdXMgdG8gYmUgYWJsZSB0byBtZWFzdXJlIGl0IGNvcnJlY3RseS5cbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB6LWluZGV4OiAkY2RrLXotaW5kZXgtb3ZlcmxheTtcblxuICAgIC8vIEZvciBjb25uZWN0ZWQtcG9zaXRpb24gb3ZlcmxheXMsIHdlIHNldCBgZGlzcGxheTogZmxleGAgaW5cbiAgICAvLyBvcmRlciB0byBmb3JjZSBgbWF4LXdpZHRoYCBhbmQgYG1heC1oZWlnaHRgIHRvIHRha2UgZWZmZWN0LlxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gIH1cblxuICAuY2RrLW92ZXJsYXktYmFja2Ryb3Age1xuICAgIC8vIFRPRE8oamVsYm91cm4pOiByZXVzZSBzaWRlbmF2IGZ1bGxzY3JlZW4gbWl4aW4uXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcblxuICAgIHotaW5kZXg6ICRjZGstei1pbmRleC1vdmVybGF5LWJhY2tkcm9wO1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAkYmFja2Ryb3AtYW5pbWF0aW9uLWR1cmF0aW9uICRiYWNrZHJvcC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uO1xuICAgIG9wYWNpdHk6IDA7XG5cbiAgICAmLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmcge1xuICAgICAgb3BhY2l0eTogMTtcblxuICAgICAgLy8gSW4gaGlnaCBjb250cmFzdCBtb2RlIHRoZSByZ2JhIGJhY2tncm91bmQgd2lsbCBiZWNvbWUgc29saWQgc28gd2UgbmVlZCB0byBmYWxsIGJhY2tcbiAgICAgIC8vIHRvIG1ha2luZyBpdCBvcGFxdWUgdXNpbmcgYG9wYWNpdHlgLiBOb3RlIHRoYXQgd2UgY2FuJ3QgdXNlIHRoZSBgY2RrLWhpZ2gtY29udHJhc3RgXG4gICAgICAvLyBtaXhpbiwgYmVjYXVzZSB3ZSBjYW4ndCBub3JtYWxpemUgdGhlIGltcG9ydCBwYXRoIHRvIHRoZSBfYTExeS5zY3NzIGJvdGggZm9yIHRoZVxuICAgICAgLy8gc291cmNlIGFuZCB3aGVuIHRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZC4gU2VlICMxMDkwOC5cbiAgICAgIEBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSB7XG4gICAgICAgIG9wYWNpdHk6IDAuNjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcCB7XG4gICAgYmFja2dyb3VuZDogJGNkay1vdmVybGF5LWRhcmstYmFja2Ryb3AtYmFja2dyb3VuZDtcbiAgfVxuXG4gIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCB7XG4gICAgLy8gTm90ZTogYXMgb2YgRmlyZWZveCA1NywgaGF2aW5nIHRoZSBiYWNrZHJvcCBiZSBgYmFja2dyb3VuZDogbm9uZWAgd2lsbCBwcmV2ZW50IGl0IGZyb21cbiAgICAvLyBjYXB0dXJpbmcgdGhlIHVzZXIncyBtb3VzZSBzY3JvbGwgZXZlbnRzLiBTaW5jZSB3ZSBhbHNvIGNhbid0IHVzZSBzb21ldGhpbmcgbGlrZVxuICAgIC8vIGByZ2JhKDAsIDAsIDAsIDApYCwgd2Ugd29yayBhcm91bmQgdGhlIGluY29uc2lzdGVuY3kgYnkgbm90IHNldHRpbmcgdGhlIGJhY2tncm91bmQgYXRcbiAgICAvLyBhbGwgYW5kIHVzaW5nIGBvcGFjaXR5YCB0byBtYWtlIHRoZSBlbGVtZW50IHRyYW5zcGFyZW50LlxuICAgICYsICYuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyB7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgfVxuXG4gIC8vIE92ZXJsYXkgcGFyZW50IGVsZW1lbnQgdXNlZCB3aXRoIHRoZSBjb25uZWN0ZWQgcG9zaXRpb24gc3RyYXRlZ3kuIFVzZWQgdG8gY29uc3RyYWluIHRoZVxuICAvLyBvdmVybGF5IGVsZW1lbnQncyBzaXplIHRvIGZpdCB3aXRoaW4gdGhlIHZpZXdwb3J0LlxuICAuY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHotaW5kZXg6ICRjZGstei1pbmRleC1vdmVybGF5O1xuXG4gICAgLy8gV2UgdXNlIGBkaXNwbGF5OiBmbGV4YCBvbiB0aGlzIGVsZW1lbnQgZXhjbHVzaXZlbHkgZm9yIGNlbnRlcmluZyBjb25uZWN0ZWQgb3ZlcmxheXMuXG4gICAgLy8gV2hlbiAqbm90KiBjZW50ZXJpbmcsIGEgdG9wL2xlZnQvYm90dG9tL3JpZ2h0IHdpbGwgYmUgc2V0IHdoaWNoIG92ZXJyaWRlcyB0aGUgbm9ybWFsXG4gICAgLy8gZmxleCBsYXlvdXQuXG4gICAgZGlzcGxheTogZmxleDtcblxuICAgIC8vIFdlIHVzZSB0aGUgYGNvbHVtbmAgZGlyZWN0aW9uIGhlcmUgdG8gYXZvaWQgc29tZSBmbGV4Ym94IGlzc3VlcyBpbiBFZGdlXG4gICAgLy8gd2hlbiB1c2luZyB0aGUgXCJncm93IGFmdGVyIG9wZW5cIiBvcHRpb25zLlxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgICAvLyBBZGQgc29tZSBkaW1lbnNpb25zIHNvIHRoZSBlbGVtZW50IGhhcyBhbiBgaW5uZXJUZXh0YCB3aGljaCBzb21lIHBlb3BsZSBkZXBlbmQgb24gaW4gdGVzdHMuXG4gICAgbWluLXdpZHRoOiAxcHg7XG4gICAgbWluLWhlaWdodDogMXB4O1xuICB9XG5cbiAgLy8gVXNlZCB3aGVuIGRpc2FibGluZyBnbG9iYWwgc2Nyb2xsaW5nLlxuICAuY2RrLWdsb2JhbC1zY3JvbGxibG9jayB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuXG4gICAgLy8gTmVjZXNzYXJ5IGZvciB0aGUgY29udGVudCBub3QgdG8gbG9zZSBpdHMgd2lkdGguIE5vdGUgdGhhdCB3ZSdyZSB1c2luZyAxMDAlLCBpbnN0ZWFkIG9mXG4gICAgLy8gMTAwdncsIGJlY2F1c2UgMTAwdncgaW5jbHVkZXMgdGhlIHdpZHRoIHBsdXMgdGhlIHNjcm9sbGJhciwgd2hlcmVhcyAxMDAlIGlzIHRoZSB3aWR0aFxuICAgIC8vIHRoYXQgdGhlIGVsZW1lbnQgaGFkIGJlZm9yZSB3ZSBtYWRlIGl0IGBmaXhlZGAuXG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICAvLyBOb3RlOiB0aGlzIHdpbGwgYWx3YXlzIGFkZCBhIHNjcm9sbGJhciB0byB3aGF0ZXZlciBlbGVtZW50IGl0IGlzIG9uLCB3aGljaCBjYW5cbiAgICAvLyBwb3RlbnRpYWxseSByZXN1bHQgaW4gZG91YmxlIHNjcm9sbGJhcnMuIEl0IHNob3VsZG4ndCBiZSBhbiBpc3N1ZSwgYmVjYXVzZSB3ZSB3b24ndFxuICAgIC8vIGJsb2NrIHNjcm9sbGluZyBvbiBhIHBhZ2UgdGhhdCBkb2Vzbid0IGhhdmUgYSBzY3JvbGxiYXIgaW4gdGhlIGZpcnN0IHBsYWNlLlxuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxufVxuXG5AbWl4aW4gY2RrLWExMXkge1xuICAuY2RrLXZpc3VhbGx5LWhpZGRlbiB7XG4gICAgYm9yZGVyOiAwO1xuICAgIGNsaXA6IHJlY3QoMCAwIDAgMCk7XG4gICAgaGVpZ2h0OiAxcHg7XG4gICAgbWFyZ2luOiAtMXB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcGFkZGluZzogMDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgd2lkdGg6IDFweDtcblxuICAgIC8vIEF2b2lkIGJyb3dzZXJzIHJlbmRlcmluZyB0aGUgZm9jdXMgcmluZyBpbiBzb21lIGNhc2VzLlxuICAgIG91dGxpbmU6IDA7XG5cbiAgICAvLyBBdm9pZCBzb21lIGNhc2VzIHdoZXJlIHRoZSBicm93c2VyIHdpbGwgc3RpbGwgcmVuZGVyIHRoZSBuYXRpdmUgY29udHJvbHMgKHNlZSAjOTA0OSkuXG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcbiAgfVxufVxuXG4vLy8gRW1pdHMgdGhlIG1peGluJ3MgY29udGVudCBuZXN0ZWQgdW5kZXIgYCRzZWxlY3Rvci1jb250ZXh0YCBpZiBgJHNlbGVjdG9yLWNvbnRleHRgXG4vLy8gaXMgbm9uLWVtcHR5LlxuLy8vIEBwYXJhbSBzZWxlY3Rvci1jb250ZXh0IFRoZSBzZWxlY3RvciB1bmRlciB3aGljaCB0byBuZXN0IHRoZSBtaXhpbidzIGNvbnRlbnQuXG5AbWl4aW4gX2Nkay1vcHRpb25hbGx5LW5lc3QtY29udGVudCgkc2VsZWN0b3ItY29udGV4dCkge1xuICBAaWYgKCRzZWxlY3Rvci1jb250ZXh0ID09ICcnKSB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cbiAgQGVsc2Uge1xuICAgICN7JHNlbGVjdG9yLWNvbnRleHR9IHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfVxufVxuXG4vLy8gQXBwbGllcyBzdHlsZXMgZm9yIHVzZXJzIGluIGhpZ2ggY29udHJhc3QgbW9kZS4gTm90ZSB0aGF0IHRoaXMgb25seSBhcHBsaWVzXG4vLy8gdG8gTWljcm9zb2Z0IGJyb3dzZXJzLiBDaHJvbWUgY2FuIGJlIGluY2x1ZGVkIGJ5IGNoZWNraW5nIGZvciB0aGUgYGh0bWxbaGNdYFxuLy8vIGF0dHJpYnV0ZSwgaG93ZXZlciBDaHJvbWUgaGFuZGxlcyBoaWdoIGNvbnRyYXN0IGRpZmZlcmVudGx5LlxuLy8vXG4vLy8gQHBhcmFtIHRhcmdldCBXaGljaCBraW5kIG9mIGhpZ2ggY29udHJhc3Qgc2V0dGluZyB0byB0YXJnZXQuIERlZmF1bHRzIHRvIGBhY3RpdmVgLCBjYW4gYmVcbi8vLyAgICBgd2hpdGUtb24tYmxhY2tgIG9yIGBibGFjay1vbi13aGl0ZWAuXG4vLy8gQHBhcmFtIGVuY2Fwc3VsYXRpb24gV2hldGhlciB0byBlbWl0IHN0eWxlcyBmb3IgdmlldyBlbmNhcHN1bGF0aW9uLiBWYWx1ZXMgYXJlOlxuLy8vICAgICAqIGBvbmAgLSB3b3JrcyBmb3IgYEVtdWxhdGVkYCwgYE5hdGl2ZWAsIGFuZCBgU2hhZG93RG9tYFxuLy8vICAgICAqIGBvZmZgIC0gd29ya3MgZm9yIGBOb25lYFxuLy8vICAgICAqIGBhbnlgIC0gd29ya3MgZm9yIGFsbCBlbmNhcHN1bGF0aW9uIG1vZGVzIGJ5IGVtaXR0aW5nIHRoZSBDU1MgdHdpY2UgKGRlZmF1bHQpLlxuQG1peGluIGNkay1oaWdoLWNvbnRyYXN0KCR0YXJnZXQ6IGFjdGl2ZSwgJGVuY2Fwc3VsYXRpb246ICdhbnknKSB7XG4gIEBpZiAoJHRhcmdldCAhPSAnYWN0aXZlJyBhbmQgJHRhcmdldCAhPSAnYmxhY2stb24td2hpdGUnIGFuZCAkdGFyZ2V0ICE9ICd3aGl0ZS1vbi1ibGFjaycpIHtcbiAgICBAZXJyb3IgJ1Vua25vd24gY2RrLWhpZ2gtY29udHJhc3QgdmFsdWUgXCIjeyR0YXJnZXR9XCIgcHJvdmlkZWQuICcgK1xuICAgICAgICAgICAnQWxsb3dlZCB2YWx1ZXMgYXJlIFwiYWN0aXZlXCIsIFwiYmxhY2stb24td2hpdGVcIiwgYW5kIFwid2hpdGUtb24tYmxhY2tcIic7XG4gIH1cblxuICBAaWYgKCRlbmNhcHN1bGF0aW9uICE9ICdvbicgYW5kICRlbmNhcHN1bGF0aW9uICE9ICdvZmYnIGFuZCAkZW5jYXBzdWxhdGlvbiAhPSAnYW55Jykge1xuICAgIEBlcnJvciAnVW5rbm93biBjZGstaGlnaC1jb250cmFzdCBlbmNhcHN1bGF0aW9uIFwiI3skZW5jYXBzdWxhdGlvbn1cIiBwcm92aWRlZC4gJyArXG4gICAgICAgICAgICdBbGxvd2VkIHZhbHVlcyBhcmUgXCJvblwiLCBcIm9mZlwiLCBhbmQgXCJhbnlcIic7XG4gIH1cblxuICAvLyBJZiB0aGUgc2VsZWN0b3IgY29udGV4dCBoYXMgbXVsdGlwbGUgcGFydHMsIHN1Y2ggYXMgYC5zZWN0aW9uLCAucmVnaW9uYCwganVzdCBkb2luZ1xuICAvLyBgLmNkay1oaWdoLWNvbnRyYXN0LXh4eCAjeyZ9YCB3aWxsIG9ubHkgYXBwbHkgdGhlIHBhcmVudCBzZWxlY3RvciB0byB0aGUgZmlyc3QgcGFydCBvZiB0aGVcbiAgLy8gY29udGV4dC4gV2UgYWRkcmVzcyB0aGlzIGJ5IG5lc3RpbmcgdGhlIHNlbGVjdG9yIGNvbnRleHQgdW5kZXIgLmNkay1oaWdoLWNvbnRyYXN0LlxuICBAYXQtcm9vdCB7XG4gICAgJHNlbGVjdG9yLWNvbnRleHQ6ICN7Jn07XG5cbiAgICBAaWYgKCRlbmNhcHN1bGF0aW9uICE9ICdvbicpIHtcbiAgICAgIC5jZGstaGlnaC1jb250cmFzdC0jeyR0YXJnZXR9IHtcbiAgICAgICAgQGluY2x1ZGUgX2Nkay1vcHRpb25hbGx5LW5lc3QtY29udGVudCgkc2VsZWN0b3ItY29udGV4dCkge1xuICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGlmICgkZW5jYXBzdWxhdGlvbiAhPSAnb2ZmJykge1xuICAgICAgLmNkay1oaWdoLWNvbnRyYXN0LSN7JHRhcmdldH0gOmhvc3Qge1xuICAgICAgICBAaW5jbHVkZSBfY2RrLW9wdGlvbmFsbHktbmVzdC1jb250ZW50KCRzZWxlY3Rvci1jb250ZXh0KSB7XG4gICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gQ29yZSBzdHlsZXMgdGhhdCBlbmFibGUgbW9uaXRvcmluZyBhdXRvZmlsbCBzdGF0ZSBvZiB0ZXh0IGZpZWxkcy5cbkBtaXhpbiBjZGstdGV4dC1maWVsZCB7XG4gIC8vIEtleWZyYW1lcyB0aGF0IGFwcGx5IG5vIHN0eWxlcywgYnV0IGFsbG93IHVzIHRvIG1vbml0b3Igd2hlbiBhbiB0ZXh0IGZpZWxkIGJlY29tZXMgYXV0b2ZpbGxlZFxuICAvLyBieSB3YXRjaGluZyBmb3IgdGhlIGFuaW1hdGlvbiBldmVudHMgdGhhdCBhcmUgZmlyZWQgd2hlbiB0aGV5IHN0YXJ0LiBOb3RlOiB0aGUgLyohKi8gY29tbWVudCBpc1xuICAvLyBuZWVkZWQgdG8gcHJldmVudCBMaWJTYXNzIGZyb20gc3RyaXBwaW5nIHRoZSBrZXlmcmFtZXMgb3V0LlxuICAvLyBCYXNlZCBvbjogaHR0cHM6Ly9tZWRpdW0uY29tL0BicnVubi9kZXRlY3RpbmctYXV0b2ZpbGxlZC1maWVsZHMtaW4tamF2YXNjcmlwdC1hZWQ1OThkMjVkYTdcbiAgQGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCB7LyohKi99XG4gIEBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIHsvKiEqL31cblxuICAuY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOi13ZWJraXQtYXV0b2ZpbGwge1xuICAgIC8vIFNpbmNlIENocm9tZSA4MCB3ZSBuZWVkIGEgMW1zIGRlbGF5LCBvciB0aGUgYW5pbWF0aW9uc3RhcnQgZXZlbnQgd29uJ3QgZmlyZS5cbiAgICBhbmltYXRpb246IGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtcztcbiAgfVxuXG4gIC5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWQ6bm90KDotd2Via2l0LWF1dG9maWxsKSB7XG4gICAgLy8gU2luY2UgQ2hyb21lIDgwIHdlIG5lZWQgYSAxbXMgZGVsYXksIG9yIHRoZSBhbmltYXRpb25zdGFydCBldmVudCB3b24ndCBmaXJlLlxuICAgIGFuaW1hdGlvbjogY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtcztcbiAgfVxuXG4gIC8vIFJlbW92ZSB0aGUgcmVzaXplIGhhbmRsZSBvbiBhdXRvc2l6aW5nIHRleHRhcmVhcywgYmVjYXVzZSB3aGF0ZXZlciBoZWlnaHRcbiAgLy8gdGhlIHVzZXIgcmVzaXplZCB0byB3aWxsIGJlIG92ZXJ3cml0dGVuIG9uY2UgdGhleSBzdGFydCB0eXBpbmcgYWdhaW4uXG4gIHRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZSB7XG4gICAgcmVzaXplOiBub25lO1xuICB9XG5cbiAgLy8gVGhpcyBjbGFzcyBpcyB0ZW1wb3JhcmlseSBhcHBsaWVkIHRvIHRoZSB0ZXh0YXJlYSB3aGVuIGl0IGlzIGJlaW5nIG1lYXN1cmVkLiBJdCBpcyBpbW1lZGlhdGVseVxuICAvLyByZW1vdmVkIHdoZW4gbWVhc3VyaW5nIGlzIGNvbXBsZXRlLiBXZSB1c2UgYCFpbXBvcnRhbnRgIHJ1bGVzIGhlcmUgdG8gbWFrZSBzdXJlIHVzZXItc3BlY2lmaWVkXG4gIC8vIHJ1bGVzIGRvIG5vdCBpbnRlcmZlcmUgd2l0aCB0aGUgbWVhc3VyZW1lbnQuXG4gIHRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmcge1xuICAgIGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xuICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcbiAgICAvLyBIYXZpbmcgMnB4IHRvcCBhbmQgYm90dG9tIHBhZGRpbmcgc2VlbXMgdG8gZml4IGEgYnVnIHdoZXJlIENocm9tZSBnZXRzIGFuIGluY29ycmVjdFxuICAgIC8vIG1lYXN1cmVtZW50LiBXZSBqdXN0IGhhdmUgdG8gYWNjb3VudCBmb3IgaXQgbGF0ZXIgYW5kIHN1YnRyYWN0IGl0IG9mZiB0aGUgZmluYWwgcmVzdWx0LlxuICAgIHBhZGRpbmc6IDJweCAwICFpbXBvcnRhbnQ7XG4gICAgYm94LXNpemluZzogY29udGVudC1ib3ggIWltcG9ydGFudDtcbiAgfVxufVxuXG4vLyBVc2VkIHRvIGdlbmVyYXRlIFVJRHMgZm9yIGtleWZyYW1lcyB1c2VkIHRvIGNoYW5nZSB0aGUgdGV4dCBmaWVsZCBhdXRvZmlsbCBzdHlsZXMuXG4kY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItZnJhbWUtY291bnQ6IDA7XG5cbi8vIE1peGluIHVzZWQgdG8gYXBwbHkgY3VzdG9tIGJhY2tncm91bmQgYW5kIGZvcmVncm91bmQgY29sb3JzIHRvIGFuIGF1dG9maWxsZWQgdGV4dCBmaWVsZC5cbi8vIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yNzgxNTQ5L1xuLy8gcmVtb3ZpbmctaW5wdXQtYmFja2dyb3VuZC1jb2xvdXItZm9yLWNocm9tZS1hdXRvY29tcGxldGUjYW5zd2VyLTM3NDMyMjYwXG5AbWl4aW4gY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3IoJGJhY2tncm91bmQsICRmb3JlZ3JvdW5kOicnKSB7XG4gIEBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItI3skY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItZnJhbWUtY291bnR9IHtcbiAgICB0byB7XG4gICAgICBiYWNrZ3JvdW5kOiAkYmFja2dyb3VuZDtcbiAgICAgIEBpZiAkZm9yZWdyb3VuZCAhPSAnJyB7IGNvbG9yOiAkZm9yZWdyb3VuZDsgfVxuICAgIH1cbiAgfVxuXG4gICY6LXdlYmtpdC1hdXRvZmlsbCB7XG4gICAgYW5pbWF0aW9uOiBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci0jeyRjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci1mcmFtZS1jb3VudH0gYm90aDtcbiAgfVxuXG4gICYuY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOi13ZWJraXQtYXV0b2ZpbGwge1xuICAgIC8vIFNpbmNlIENocm9tZSA4MCB3ZSBuZWVkIGEgMW1zIGRlbGF5IGZvciBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCwgb3IgdGhlIGFuaW1hdGlvbnN0YXJ0XG4gICAgLy8gZXZlbnQgd29uJ3QgZmlyZS5cbiAgICBhbmltYXRpb246IGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtcyxcbiAgICAgICAgICAgICAgIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLSN7JGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLWZyYW1lLWNvdW50fSBib3RoO1xuICB9XG5cbiAgJGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLWZyYW1lLWNvdW50OlxuICAgICAgJGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLWZyYW1lLWNvdW50ICsgMSAhZ2xvYmFsO1xufVxuXG5cbi8vIENvcmUgc3R5bGVzIHRoYXQgY2FuIGJlIHVzZWQgdG8gYXBwbHkgbWF0ZXJpYWwgZGVzaWduIHRyZWF0bWVudHMgdG8gYW55IGVsZW1lbnQuXG4vLyBNZWRpYSBxdWVyaWVzXG4vLyBUT0RPKGpvc2VwaHBlcnJvdHQpOiBDaGFuZ2UgJG1hdC14c21hbGwgYW5kICRtYXQtc21hbGwgdXNhZ2VzIHRvIHJlbHkgb24gQnJlYWtwb2ludE9ic2VydmVyLFxuJG1hdC14c21hbGw6ICdtYXgtd2lkdGg6IDU5OXB4JztcbiRtYXQtc21hbGw6ICdtYXgtd2lkdGg6IDk1OXB4JztcblxuLy8gVE9ETzogUmV2aXNpdCBhbGwgei1pbmRpY2VzIGJlZm9yZSBiZXRhXG4vLyB6LWluZGV4IG1hc3RlciBsaXN0XG5cbiR6LWluZGV4LWZhYjogMjAgIWRlZmF1bHQ7XG4kei1pbmRleC1kcmF3ZXI6IDEwMCAhZGVmYXVsdDtcblxuLy8gR2xvYmFsIGNvbnN0YW50c1xuJHBpOiAzLjE0MTU5MjY1O1xuXG4vLyBQYWRkaW5nIGJldHdlZW4gaW5wdXQgdG9nZ2xlcyBhbmQgdGhlaXIgbGFiZWxzXG4kbWF0LXRvZ2dsZS1wYWRkaW5nOiA4cHggIWRlZmF1bHQ7XG4vLyBXaWR0aCBhbmQgaGVpZ2h0IG9mIGlucHV0IHRvZ2dsZXNcbiRtYXQtdG9nZ2xlLXNpemU6IDIwcHggIWRlZmF1bHQ7XG5cbi8vIEVhc2luZyBDdXJ2ZXNcbi8vIFRPRE8oamVsYm91cm4pOiBhbGwgb2YgdGhlc2UgbmVlZCB0byBiZSByZXZpc2l0ZWRcblxuLy8gVGhlIGRlZmF1bHQgYW5pbWF0aW9uIGN1cnZlcyB1c2VkIGJ5IG1hdGVyaWFsIGRlc2lnbi5cbiRtYXQtbGluZWFyLW91dC1zbG93LWluLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKSAhZGVmYXVsdDtcbiRtYXQtZmFzdC1vdXQtc2xvdy1pbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgIWRlZmF1bHQ7XG4kbWF0LWZhc3Qtb3V0LWxpbmVhci1pbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDEsIDEpICFkZWZhdWx0O1xuXG4kZWFzZS1pbi1vdXQtY3VydmUtZnVuY3Rpb246IGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKSAhZGVmYXVsdDtcblxuJHN3aWZ0LWVhc2Utb3V0LWR1cmF0aW9uOiA0MDBtcyAhZGVmYXVsdDtcbiRzd2lmdC1lYXNlLW91dC10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpICFkZWZhdWx0O1xuJHN3aWZ0LWVhc2Utb3V0OiBhbGwgJHN3aWZ0LWVhc2Utb3V0LWR1cmF0aW9uICRzd2lmdC1lYXNlLW91dC10aW1pbmctZnVuY3Rpb24gIWRlZmF1bHQ7XG5cbiRzd2lmdC1lYXNlLWluLWR1cmF0aW9uOiAzMDBtcyAhZGVmYXVsdDtcbiRzd2lmdC1lYXNlLWluLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNTUsIDAsIDAuNTUsIDAuMikgIWRlZmF1bHQ7XG4kc3dpZnQtZWFzZS1pbjogYWxsICRzd2lmdC1lYXNlLWluLWR1cmF0aW9uICRzd2lmdC1lYXNlLWluLXRpbWluZy1mdW5jdGlvbiAhZGVmYXVsdDtcblxuJHN3aWZ0LWVhc2UtaW4tb3V0LWR1cmF0aW9uOiA1MDBtcyAhZGVmYXVsdDtcbiRzd2lmdC1lYXNlLWluLW91dC10aW1pbmctZnVuY3Rpb246ICRlYXNlLWluLW91dC1jdXJ2ZS1mdW5jdGlvbiAhZGVmYXVsdDtcbiRzd2lmdC1lYXNlLWluLW91dDogYWxsICRzd2lmdC1lYXNlLWluLW91dC1kdXJhdGlvbiAkc3dpZnQtZWFzZS1pbi1vdXQtdGltaW5nLWZ1bmN0aW9uICFkZWZhdWx0O1xuXG4kc3dpZnQtbGluZWFyLWR1cmF0aW9uOiA4MG1zICFkZWZhdWx0O1xuJHN3aWZ0LWxpbmVhci10aW1pbmctZnVuY3Rpb246IGxpbmVhciAhZGVmYXVsdDtcbiRzd2lmdC1saW5lYXI6IGFsbCAkc3dpZnQtbGluZWFyLWR1cmF0aW9uICRzd2lmdC1saW5lYXItdGltaW5nLWZ1bmN0aW9uICFkZWZhdWx0O1xuXG5cblxuLy8gQSBjb2xsZWN0aW9uIG9mIG1peGlucyBhbmQgQ1NTIGNsYXNzZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBhcHBseSBlbGV2YXRpb24gdG8gYSBtYXRlcmlhbFxuLy8gZWxlbWVudC5cbi8vIFNlZTogaHR0cHM6Ly9tYXRlcmlhbC5pby9kZXNpZ24vZW52aXJvbm1lbnQvZWxldmF0aW9uLmh0bWxcbi8vIEV4YW1wbGVzOlxuLy9cbi8vXG4vLyAubWF0LWZvbyB7XG4vLyAgIEBpbmNsdWRlICRtYXQtZWxldmF0aW9uKDIpO1xuLy9cbi8vICAgJjphY3RpdmUge1xuLy8gICAgIEBpbmNsdWRlICRtYXQtZWxldmF0aW9uKDgpO1xuLy8gICB9XG4vLyB9XG4vL1xuLy8gPGRpdiBpZD1cImV4dGVybmFsLWNhcmRcIiBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejJcIj48cD5Tb21lIGNvbnRlbnQ8L3A+PC9kaXY+XG4vL1xuLy8gRm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBkZXNpZ24gYmVoaW5kIGhvdyBlbGV2YXRpb24gaXMgaW1wbGVtZW50ZWQsIHNlZSB0aGUgZGVzaWduIGRvYyBhdFxuLy8gaHR0cHM6Ly9nb28uZ2wvS3EwazlaLlxuXG4vLyBDb2xvcnMgZm9yIHVtYnJhLCBwZW51bWJyYSwgYW5kIGFtYmllbnQgc2hhZG93cy4gQXMgZGVzY3JpYmVkIGluIHRoZSBkZXNpZ24gZG9jLCBlYWNoIGVsZXZhdGlvblxuLy8gbGV2ZWwgaXMgY3JlYXRlZCB1c2luZyBhIHNldCBvZiAzIHNoYWRvdyB2YWx1ZXMsIG9uZSBmb3IgdW1icmEgKHRoZSBzaGFkb3cgcmVwcmVzZW50aW5nIHRoZVxuLy8gc3BhY2UgY29tcGxldGVseSBvYnNjdXJlZCBieSBhbiBvYmplY3QgcmVsYXRpdmUgdG8gaXRzIGxpZ2h0IHNvdXJjZSksIG9uZSBmb3IgcGVudW1icmEgKHRoZVxuLy8gc3BhY2UgcGFydGlhbGx5IG9ic2N1cmVkIGJ5IGFuIG9iamVjdCksIGFuZCBvbmUgZm9yIGFtYmllbnQgKHRoZSBzcGFjZSB3aGljaCBjb250YWlucyB0aGUgb2JqZWN0XG4vLyBpdHNlbGYpLiBGb3IgYSBmdXJ0aGVyIGV4cGxhbmF0aW9uIG9mIHRoZXNlIHRlcm1zIGFuZCB0aGVpciBtZWFuaW5ncywgc2VlXG4vLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9VbWJyYSxfcGVudW1icmFfYW5kX2FudHVtYnJhLlxuXG4vLyBNYXBzIGZvciB0aGUgZGlmZmVyZW50IHNoYWRvdyBzZXRzIGFuZCB0aGVpciB2YWx1ZXMgd2l0aGluIGVhY2ggei1zcGFjZS4gVGhlc2UgdmFsdWVzIHdlcmVcbi8vIGNyZWF0ZWQgYnkgdGFraW5nIGEgZmV3IHJlZmVyZW5jZSBzaGFkb3cgc2V0cyBjcmVhdGVkIGJ5IEdvb2dsZSdzIERlc2lnbmVycyBhbmQgaW50ZXJwb2xhdGluZ1xuLy8gYWxsIG9mIHRoZSB2YWx1ZXMgYmV0d2VlbiB0aGVtLlxuXG5AZnVuY3Rpb24gX2dldC11bWJyYS1tYXAoJGNvbG9yLCAkb3BhY2l0eSkge1xuICAkc2hhZG93LWNvbG9yOiBpZih0eXBlLW9mKCRjb2xvcikgPT0gY29sb3IsIHJnYmEoJGNvbG9yLCAkb3BhY2l0eSAqIDAuMiksICRjb2xvcik7XG5cbiAgQHJldHVybiAoXG4gICAgMDogJzBweCAwcHggMHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxOiAnMHB4IDJweCAxcHggLTFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyOiAnMHB4IDNweCAxcHggLTJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAzOiAnMHB4IDNweCAzcHggLTJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA0OiAnMHB4IDJweCA0cHggLTFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA1OiAnMHB4IDNweCA1cHggLTFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA2OiAnMHB4IDNweCA1cHggLTFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA3OiAnMHB4IDRweCA1cHggLTJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA4OiAnMHB4IDVweCA1cHggLTNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA5OiAnMHB4IDVweCA2cHggLTNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMDogJzBweCA2cHggNnB4IC0zcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTE6ICcwcHggNnB4IDdweCAtNHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEyOiAnMHB4IDdweCA4cHggLTRweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMzogJzBweCA3cHggOHB4IC00cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTQ6ICcwcHggN3B4IDlweCAtNHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE1OiAnMHB4IDhweCA5cHggLTVweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNjogJzBweCA4cHggMTBweCAtNXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE3OiAnMHB4IDhweCAxMXB4IC01cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTg6ICcwcHggOXB4IDExcHggLTVweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxOTogJzBweCA5cHggMTJweCAtNnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIwOiAnMHB4IDEwcHggMTNweCAtNnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIxOiAnMHB4IDEwcHggMTNweCAtNnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIyOiAnMHB4IDEwcHggMTRweCAtNnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIzOiAnMHB4IDExcHggMTRweCAtN3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDI0OiAnMHB4IDExcHggMTVweCAtN3B4ICN7JHNoYWRvdy1jb2xvcn0nXG4gICk7XG59XG5cbkBmdW5jdGlvbiBfZ2V0LXBlbnVtYnJhLW1hcCgkY29sb3IsICRvcGFjaXR5KSB7XG4gICRzaGFkb3ctY29sb3I6IGlmKHR5cGUtb2YoJGNvbG9yKSA9PSBjb2xvciwgcmdiYSgkY29sb3IsICRvcGFjaXR5ICogMC4xNCksICRjb2xvcik7XG5cbiAgQHJldHVybiAoXG4gICAgMDogJzBweCAwcHggMHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxOiAnMHB4IDFweCAxcHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDI6ICcwcHggMnB4IDJweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMzogJzBweCAzcHggNHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA0OiAnMHB4IDRweCA1cHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDU6ICcwcHggNXB4IDhweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNjogJzBweCA2cHggMTBweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNzogJzBweCA3cHggMTBweCAxcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgODogJzBweCA4cHggMTBweCAxcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgOTogJzBweCA5cHggMTJweCAxcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTA6ICcwcHggMTBweCAxNHB4IDFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMTogJzBweCAxMXB4IDE1cHggMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEyOiAnMHB4IDEycHggMTdweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTM6ICcwcHggMTNweCAxOXB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNDogJzBweCAxNHB4IDIxcHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE1OiAnMHB4IDE1cHggMjJweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTY6ICcwcHggMTZweCAyNHB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNzogJzBweCAxN3B4IDI2cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE4OiAnMHB4IDE4cHggMjhweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTk6ICcwcHggMTlweCAyOXB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMDogJzBweCAyMHB4IDMxcHggM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIxOiAnMHB4IDIxcHggMzNweCAzcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjI6ICcwcHggMjJweCAzNXB4IDNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMzogJzBweCAyM3B4IDM2cHggM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDI0OiAnMHB4IDI0cHggMzhweCAzcHggI3skc2hhZG93LWNvbG9yfSdcbiAgKTtcbn1cblxuQGZ1bmN0aW9uIF9nZXQtYW1iaWVudC1tYXAoJGNvbG9yLCAkb3BhY2l0eSkge1xuICAkc2hhZG93LWNvbG9yOiBpZih0eXBlLW9mKCRjb2xvcikgPT0gY29sb3IsIHJnYmEoJGNvbG9yLCAkb3BhY2l0eSAqIDAuMTIpLCAkY29sb3IpO1xuXG4gIEByZXR1cm4gKFxuICAgIDA6ICcwcHggMHB4IDBweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTogJzBweCAxcHggM3B4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyOiAnMHB4IDFweCA1cHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDM6ICcwcHggMXB4IDhweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNDogJzBweCAxcHggMTBweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNTogJzBweCAxcHggMTRweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNjogJzBweCAxcHggMThweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNzogJzBweCAycHggMTZweCAxcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgODogJzBweCAzcHggMTRweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgOTogJzBweCAzcHggMTZweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTA6ICcwcHggNHB4IDE4cHggM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDExOiAnMHB4IDRweCAyMHB4IDNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMjogJzBweCA1cHggMjJweCA0cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTM6ICcwcHggNXB4IDI0cHggNHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE0OiAnMHB4IDVweCAyNnB4IDRweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNTogJzBweCA2cHggMjhweCA1cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTY6ICcwcHggNnB4IDMwcHggNXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE3OiAnMHB4IDZweCAzMnB4IDVweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxODogJzBweCA3cHggMzRweCA2cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTk6ICcwcHggN3B4IDM2cHggNnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIwOiAnMHB4IDhweCAzOHB4IDdweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMTogJzBweCA4cHggNDBweCA3cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjI6ICcwcHggOHB4IDQycHggN3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIzOiAnMHB4IDlweCA0NHB4IDhweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyNDogJzBweCA5cHggNDZweCA4cHggI3skc2hhZG93LWNvbG9yfSdcbiAgKTtcbn1cblxuLy8gVGhlIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIGVsZXZhdGlvbiB0cmFuc2l0aW9ucy5cbiRtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tZHVyYXRpb246IDI4MG1zICFkZWZhdWx0O1xuXG4vLyBUaGUgZGVmYXVsdCBlYXNpbmcgdmFsdWUgZm9yIGVsZXZhdGlvbiB0cmFuc2l0aW9ucy5cbiRtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkbWF0LWZhc3Qtb3V0LXNsb3ctaW4tdGltaW5nLWZ1bmN0aW9uO1xuXG4vLyBUaGUgZGVmYXVsdCBjb2xvciBmb3IgZWxldmF0aW9uIHNoYWRvd3MuXG4kbWF0LWVsZXZhdGlvbi1jb2xvcjogYmxhY2sgIWRlZmF1bHQ7XG5cbi8vIFRoZSBkZWZhdWx0IG9wYWNpdHkgc2NhbGluZyB2YWx1ZSBmb3IgZWxldmF0aW9uIHNoYWRvd3MuXG4kbWF0LWVsZXZhdGlvbi1vcGFjaXR5OiAxICFkZWZhdWx0O1xuXG4vLyBQcmVmaXggZm9yIGVsZXZhdGlvbi1yZWxhdGVkIHNlbGVjdG9ycy5cbiRfbWF0LWVsZXZhdGlvbi1wcmVmaXg6ICdtYXQtZWxldmF0aW9uLXonO1xuXG4vLyBBcHBsaWVzIHRoZSBjb3JyZWN0IGNzcyBydWxlcyB0byBhbiBlbGVtZW50IHRvIGdpdmUgaXQgdGhlIGVsZXZhdGlvbiBzcGVjaWZpZWQgYnkgJHpWYWx1ZS5cbi8vIFRoZSAkelZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyNC5cbkBtaXhpbiBtYXQtZWxldmF0aW9uKCR6VmFsdWUsICRjb2xvcjogJG1hdC1lbGV2YXRpb24tY29sb3IsICRvcGFjaXR5OiAkbWF0LWVsZXZhdGlvbi1vcGFjaXR5KSB7XG4gIEBpZiB0eXBlLW9mKCR6VmFsdWUpICE9IG51bWJlciBvciBub3QgdW5pdGxlc3MoJHpWYWx1ZSkge1xuICAgIEBlcnJvciAnJHpWYWx1ZSBtdXN0IGJlIGEgdW5pdGxlc3MgbnVtYmVyJztcbiAgfVxuICBAaWYgJHpWYWx1ZSA8IDAgb3IgJHpWYWx1ZSA+IDI0IHtcbiAgICBAZXJyb3IgJyR6VmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDI0JztcbiAgfVxuXG4gIGJveC1zaGFkb3c6ICN7bWFwLWdldChfZ2V0LXVtYnJhLW1hcCgkY29sb3IsICRvcGFjaXR5KSwgJHpWYWx1ZSl9LFxuICAgICAgICAgICAgICAje21hcC1nZXQoX2dldC1wZW51bWJyYS1tYXAoJGNvbG9yLCAkb3BhY2l0eSksICR6VmFsdWUpfSxcbiAgICAgICAgICAgICAgI3ttYXAtZ2V0KF9nZXQtYW1iaWVudC1tYXAoJGNvbG9yLCAkb3BhY2l0eSksICR6VmFsdWUpfTtcbn1cblxuQG1peGluIF9tYXQtdGhlbWUtZWxldmF0aW9uKCR6VmFsdWUsICR0aGVtZSwgJG9wYWNpdHk6ICRtYXQtZWxldmF0aW9uLW9wYWNpdHkpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGVsZXZhdGlvbi1jb2xvcjogbWFwLWdldCgkZm9yZWdyb3VuZCwgZWxldmF0aW9uKTtcbiAgJGVsZXZhdGlvbi1jb2xvci1vci1kZWZhdWx0OiBpZigkZWxldmF0aW9uLWNvbG9yID09IG51bGwsICRtYXQtZWxldmF0aW9uLWNvbG9yLCAkZWxldmF0aW9uLWNvbG9yKTtcblxuICBAaW5jbHVkZSBtYXQtZWxldmF0aW9uKCR6VmFsdWUsICRlbGV2YXRpb24tY29sb3Itb3ItZGVmYXVsdCwgJG9wYWNpdHkpO1xufVxuXG4vLyBBcHBsaWVzIHRoZSBlbGV2YXRpb24gdG8gYW4gZWxlbWVudCBpbiBhIG1hbm5lciB0aGF0IGFsbG93c1xuLy8gY29uc3VtZXJzIHRvIG92ZXJyaWRlIGl0IHZpYSB0aGUgTWF0ZXJpYWwgZWxldmF0aW9uIGNsYXNzZXMuXG5AbWl4aW4gbWF0LW92ZXJyaWRhYmxlLWVsZXZhdGlvbihcbiAgICAkelZhbHVlLFxuICAgICRjb2xvcjogJG1hdC1lbGV2YXRpb24tY29sb3IsXG4gICAgJG9wYWNpdHk6ICRtYXQtZWxldmF0aW9uLW9wYWNpdHkpIHtcbiAgJjpub3QoW2NsYXNzKj0nI3skX21hdC1lbGV2YXRpb24tcHJlZml4fSddKSB7XG4gICAgQGluY2x1ZGUgbWF0LWVsZXZhdGlvbigkelZhbHVlLCAkY29sb3IsICRvcGFjaXR5KTtcbiAgfVxufVxuXG5AbWl4aW4gX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oJHpWYWx1ZSwgJHRoZW1lLCAkb3BhY2l0eTogJG1hdC1lbGV2YXRpb24tb3BhY2l0eSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkZWxldmF0aW9uLWNvbG9yOiBtYXAtZ2V0KCRmb3JlZ3JvdW5kLCBlbGV2YXRpb24pO1xuICAkZWxldmF0aW9uLWNvbG9yLW9yLWRlZmF1bHQ6IGlmKCRlbGV2YXRpb24tY29sb3IgPT0gbnVsbCwgJG1hdC1lbGV2YXRpb24tY29sb3IsICRlbGV2YXRpb24tY29sb3IpO1xuXG4gIEBpbmNsdWRlIG1hdC1vdmVycmlkYWJsZS1lbGV2YXRpb24oJHpWYWx1ZSwgJGVsZXZhdGlvbi1jb2xvci1vci1kZWZhdWx0LCAkb3BhY2l0eSk7XG59XG5cbi8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBjYW4gYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yIGEgdHJhbnNpdGlvbiBwcm9wZXJ0eSBmb3IgZWxldmF0aW9uLlxuLy8gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5IGlzIHVzZWZ1bCBpbiBzaXR1YXRpb25zIHdoZXJlIGEgY29tcG9uZW50IG5lZWRzIHRvIHRyYW5zaXRpb25cbi8vIG1vcmUgdGhhbiBvbmUgcHJvcGVydHkuXG4vL1xuLy8gLmZvbyB7XG4vLyAgIHRyYW5zaXRpb246IG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi1wcm9wZXJ0eS12YWx1ZSgpLCBvcGFjaXR5IDEwMG1zIGVhc2U7XG4vLyB9XG5AZnVuY3Rpb24gbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLXByb3BlcnR5LXZhbHVlKFxuICAgICRkdXJhdGlvbjogJG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi1kdXJhdGlvbixcbiAgICAkZWFzaW5nOiAkbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikge1xuICBAcmV0dXJuIGJveC1zaGFkb3cgI3skZHVyYXRpb259ICN7JGVhc2luZ307XG59XG5cbi8vIEFwcGxpZXMgdGhlIGNvcnJlY3QgY3NzIHJ1bGVzIG5lZWRlZCB0byBoYXZlIGFuIGVsZW1lbnQgdHJhbnNpdGlvbiBiZXR3ZWVuIGVsZXZhdGlvbnMuXG4vLyBUaGlzIG1peGluIHNob3VsZCBiZSBhcHBsaWVkIHRvIGVsZW1lbnRzIHdob3NlIGVsZXZhdGlvbiB2YWx1ZXMgd2lsbCBjaGFuZ2UgZGVwZW5kaW5nIG9uIHRoZWlyXG4vLyBjb250ZXh0IChlLmcuIHdoZW4gYWN0aXZlIG9yIGRpc2FibGVkKS5cbi8vXG4vLyBOT1RFKHRyYXZpc2thdWZtYW4pOiBCb3RoIHRoaXMgbWl4aW4gYW5kIHRoZSBhYm92ZSBmdW5jdGlvbiB1c2UgZGVmYXVsdCBwYXJhbWV0ZXJzIHNvIHRoZXkgY2FuXG4vLyBiZSB1c2VkIGluIHRoZSBzYW1lIHdheSBieSBjbGllbnRzLlxuQG1peGluIG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbihcbiAgICAkZHVyYXRpb246ICRtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tZHVyYXRpb24sXG4gICAgJGVhc2luZzogJG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pIHtcbiAgdHJhbnNpdGlvbjogbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLXByb3BlcnR5LXZhbHVlKCRkdXJhdGlvbiwgJGVhc2luZyk7XG59XG5cbi8vIENvbG9yIHBhbGV0dGVzIGZyb20gdGhlIE1hdGVyaWFsIERlc2lnbiBzcGVjLlxuLy8gU2VlIGh0dHBzOi8vbWF0ZXJpYWwuaW8vZGVzaWduL2NvbG9yL1xuLy9cbi8vIENvbnRyYXN0IGNvbG9ycyBhcmUgaGFyZC1jb2RlZCBiZWNhdXNlIGl0IGlzIHRvbyBkaWZmaWN1bHQgKHByb2JhYmx5IGltcG9zc2libGUpIHRvXG4vLyBjYWxjdWxhdGUgdGhlbS4gVGhlc2UgY29udHJhc3QgY29sb3JzIGFyZSBwdWxsZWQgZnJvbSB0aGUgcHVibGljIE1hdGVyaWFsIERlc2lnbiBzcGVjIHN3YXRjaGVzLlxuLy8gV2hpbGUgdGhlIGNvbnRyYXN0IGNvbG9ycyBpbiB0aGUgc3BlYyBhcmUgbm90IHByZXNjcmlwdGl2ZSwgd2UgdXNlIHRoZW0gZm9yIGNvbnZlbmllbmNlLlxuXG5cbi8vIEBkZXByZWNhdGVkIHJlbmFtZWQgdG8gJGRhcmstcHJpbWFyeS10ZXh0LlxuLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMFxuJGJsYWNrLTg3LW9wYWNpdHk6IHJnYmEoYmxhY2ssIDAuODcpO1xuLy8gQGRlcHJlY2F0ZWQgcmVuYW1lZCB0byAkbGlnaHQtcHJpbWFyeS10ZXh0LlxuLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMFxuJHdoaXRlLTg3LW9wYWNpdHk6IHJnYmEod2hpdGUsIDAuODcpO1xuLy8gQGRlcHJlY2F0ZWQgdXNlICRkYXJrLVtzZWNvbmRhcnktdGV4dCxkaXNhYmxlZC10ZXh0LGRpdmlkZXJzLGZvY3VzZWRdIGluc3RlYWQuXG4vLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wXG4kYmxhY2stMTItb3BhY2l0eTogcmdiYShibGFjaywgMC4xMik7XG4vLyBAZGVwcmVjYXRlZCB1c2UgJGxpZ2h0LVtzZWNvbmRhcnktdGV4dCxkaXNhYmxlZC10ZXh0LGRpdmlkZXJzLGZvY3VzZWRdIGluc3RlYWQuXG4vLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wXG4kd2hpdGUtMTItb3BhY2l0eTogcmdiYSh3aGl0ZSwgMC4xMik7XG4vLyBAZGVwcmVjYXRlZCB1c2UgJGRhcmstW3NlY29uZGFyeS10ZXh0LGRpc2FibGVkLXRleHQsZGl2aWRlcnMsZm9jdXNlZF0gaW5zdGVhZC5cbi8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjBcbiRibGFjay02LW9wYWNpdHk6IHJnYmEoYmxhY2ssIDAuMDYpO1xuLy8gQGRlcHJlY2F0ZWQgdXNlICRsaWdodC1bc2Vjb25kYXJ5LXRleHQsZGlzYWJsZWQtdGV4dCxkaXZpZGVycyxmb2N1c2VkXSBpbnN0ZWFkLlxuLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMFxuJHdoaXRlLTYtb3BhY2l0eTogcmdiYSh3aGl0ZSwgMC4wNik7XG5cbiRkYXJrLXByaW1hcnktdGV4dDogcmdiYShibGFjaywgMC44Nyk7XG4kZGFyay1zZWNvbmRhcnktdGV4dDogcmdiYShibGFjaywgMC41NCk7XG4kZGFyay1kaXNhYmxlZC10ZXh0OiByZ2JhKGJsYWNrLCAwLjM4KTtcbiRkYXJrLWRpdmlkZXJzOiByZ2JhKGJsYWNrLCAwLjEyKTtcbiRkYXJrLWZvY3VzZWQ6IHJnYmEoYmxhY2ssIDAuMTIpO1xuJGxpZ2h0LXByaW1hcnktdGV4dDogd2hpdGU7XG4kbGlnaHQtc2Vjb25kYXJ5LXRleHQ6IHJnYmEod2hpdGUsIDAuNyk7XG4kbGlnaHQtZGlzYWJsZWQtdGV4dDogcmdiYSh3aGl0ZSwgMC41KTtcbiRsaWdodC1kaXZpZGVyczogcmdiYSh3aGl0ZSwgMC4xMik7XG4kbGlnaHQtZm9jdXNlZDogcmdiYSh3aGl0ZSwgMC4xMik7XG5cbiRtYXQtcmVkOiAoXG4gIDUwOiAjZmZlYmVlLFxuICAxMDA6ICNmZmNkZDIsXG4gIDIwMDogI2VmOWE5YSxcbiAgMzAwOiAjZTU3MzczLFxuICA0MDA6ICNlZjUzNTAsXG4gIDUwMDogI2Y0NDMzNixcbiAgNjAwOiAjZTUzOTM1LFxuICA3MDA6ICNkMzJmMmYsXG4gIDgwMDogI2M2MjgyOCxcbiAgOTAwOiAjYjcxYzFjLFxuICBBMTAwOiAjZmY4YTgwLFxuICBBMjAwOiAjZmY1MjUyLFxuICBBNDAwOiAjZmYxNzQ0LFxuICBBNzAwOiAjZDUwMDAwLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtcGluazogKFxuICA1MDogI2ZjZTRlYyxcbiAgMTAwOiAjZjhiYmQwLFxuICAyMDA6ICNmNDhmYjEsXG4gIDMwMDogI2YwNjI5MixcbiAgNDAwOiAjZWM0MDdhLFxuICA1MDA6ICNlOTFlNjMsXG4gIDYwMDogI2Q4MWI2MCxcbiAgNzAwOiAjYzIxODViLFxuICA4MDA6ICNhZDE0NTcsXG4gIDkwMDogIzg4MGU0ZixcbiAgQTEwMDogI2ZmODBhYixcbiAgQTIwMDogI2ZmNDA4MSxcbiAgQTQwMDogI2Y1MDA1NyxcbiAgQTcwMDogI2M1MTE2MixcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LXB1cnBsZTogKFxuICA1MDogI2YzZTVmNSxcbiAgMTAwOiAjZTFiZWU3LFxuICAyMDA6ICNjZTkzZDgsXG4gIDMwMDogI2JhNjhjOCxcbiAgNDAwOiAjYWI0N2JjLFxuICA1MDA6ICM5YzI3YjAsXG4gIDYwMDogIzhlMjRhYSxcbiAgNzAwOiAjN2IxZmEyLFxuICA4MDA6ICM2YTFiOWEsXG4gIDkwMDogIzRhMTQ4YyxcbiAgQTEwMDogI2VhODBmYyxcbiAgQTIwMDogI2UwNDBmYixcbiAgQTQwMDogI2Q1MDBmOSxcbiAgQTcwMDogI2FhMDBmZixcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtZGVlcC1wdXJwbGU6IChcbiAgNTA6ICNlZGU3ZjYsXG4gIDEwMDogI2QxYzRlOSxcbiAgMjAwOiAjYjM5ZGRiLFxuICAzMDA6ICM5NTc1Y2QsXG4gIDQwMDogIzdlNTdjMixcbiAgNTAwOiAjNjczYWI3LFxuICA2MDA6ICM1ZTM1YjEsXG4gIDcwMDogIzUxMmRhOCxcbiAgODAwOiAjNDUyN2EwLFxuICA5MDA6ICMzMTFiOTIsXG4gIEExMDA6ICNiMzg4ZmYsXG4gIEEyMDA6ICM3YzRkZmYsXG4gIEE0MDA6ICM2NTFmZmYsXG4gIEE3MDA6ICM2MjAwZWEsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWluZGlnbzogKFxuICA1MDogI2U4ZWFmNixcbiAgMTAwOiAjYzVjYWU5LFxuICAyMDA6ICM5ZmE4ZGEsXG4gIDMwMDogIzc5ODZjYixcbiAgNDAwOiAjNWM2YmMwLFxuICA1MDA6ICMzZjUxYjUsXG4gIDYwMDogIzM5NDlhYixcbiAgNzAwOiAjMzAzZjlmLFxuICA4MDA6ICMyODM1OTMsXG4gIDkwMDogIzFhMjM3ZSxcbiAgQTEwMDogIzhjOWVmZixcbiAgQTIwMDogIzUzNmRmZSxcbiAgQTQwMDogIzNkNWFmZSxcbiAgQTcwMDogIzMwNGZmZSxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtYmx1ZTogKFxuICA1MDogI2UzZjJmZCxcbiAgMTAwOiAjYmJkZWZiLFxuICAyMDA6ICM5MGNhZjksXG4gIDMwMDogIzY0YjVmNixcbiAgNDAwOiAjNDJhNWY1LFxuICA1MDA6ICMyMTk2ZjMsXG4gIDYwMDogIzFlODhlNSxcbiAgNzAwOiAjMTk3NmQyLFxuICA4MDA6ICMxNTY1YzAsXG4gIDkwMDogIzBkNDdhMSxcbiAgQTEwMDogIzgyYjFmZixcbiAgQTIwMDogIzQ0OGFmZixcbiAgQTQwMDogIzI5NzlmZixcbiAgQTcwMDogIzI5NjJmZixcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWxpZ2h0LWJsdWU6IChcbiAgNTA6ICNlMWY1ZmUsXG4gIDEwMDogI2IzZTVmYyxcbiAgMjAwOiAjODFkNGZhLFxuICAzMDA6ICM0ZmMzZjcsXG4gIDQwMDogIzI5YjZmNixcbiAgNTAwOiAjMDNhOWY0LFxuICA2MDA6ICMwMzliZTUsXG4gIDcwMDogIzAyODhkMSxcbiAgODAwOiAjMDI3N2JkLFxuICA5MDA6ICMwMTU3OWIsXG4gIEExMDA6ICM4MGQ4ZmYsXG4gIEEyMDA6ICM0MGM0ZmYsXG4gIEE0MDA6ICMwMGIwZmYsXG4gIEE3MDA6ICMwMDkxZWEsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtY3lhbjogKFxuICA1MDogI2UwZjdmYSxcbiAgMTAwOiAjYjJlYmYyLFxuICAyMDA6ICM4MGRlZWEsXG4gIDMwMDogIzRkZDBlMSxcbiAgNDAwOiAjMjZjNmRhLFxuICA1MDA6ICMwMGJjZDQsXG4gIDYwMDogIzAwYWNjMSxcbiAgNzAwOiAjMDA5N2E3LFxuICA4MDA6ICMwMDgzOGYsXG4gIDkwMDogIzAwNjA2NCxcbiAgQTEwMDogIzg0ZmZmZixcbiAgQTIwMDogIzE4ZmZmZixcbiAgQTQwMDogIzAwZTVmZixcbiAgQTcwMDogIzAwYjhkNCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LXRlYWw6IChcbiAgNTA6ICNlMGYyZjEsXG4gIDEwMDogI2IyZGZkYixcbiAgMjAwOiAjODBjYmM0LFxuICAzMDA6ICM0ZGI2YWMsXG4gIDQwMDogIzI2YTY5YSxcbiAgNTAwOiAjMDA5Njg4LFxuICA2MDA6ICMwMDg5N2IsXG4gIDcwMDogIzAwNzk2YixcbiAgODAwOiAjMDA2OTVjLFxuICA5MDA6ICMwMDRkNDAsXG4gIEExMDA6ICNhN2ZmZWIsXG4gIEEyMDA6ICM2NGZmZGEsXG4gIEE0MDA6ICMxZGU5YjYsXG4gIEE3MDA6ICMwMGJmYTUsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1ncmVlbjogKFxuICA1MDogI2U4ZjVlOSxcbiAgMTAwOiAjYzhlNmM5LFxuICAyMDA6ICNhNWQ2YTcsXG4gIDMwMDogIzgxYzc4NCxcbiAgNDAwOiAjNjZiYjZhLFxuICA1MDA6ICM0Y2FmNTAsXG4gIDYwMDogIzQzYTA0NyxcbiAgNzAwOiAjMzg4ZTNjLFxuICA4MDA6ICMyZTdkMzIsXG4gIDkwMDogIzFiNWUyMCxcbiAgQTEwMDogI2I5ZjZjYSxcbiAgQTIwMDogIzY5ZjBhZSxcbiAgQTQwMDogIzAwZTY3NixcbiAgQTcwMDogIzAwYzg1MyxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtbGlnaHQtZ3JlZW46IChcbiAgNTA6ICNmMWY4ZTksXG4gIDEwMDogI2RjZWRjOCxcbiAgMjAwOiAjYzVlMWE1LFxuICAzMDA6ICNhZWQ1ODEsXG4gIDQwMDogIzljY2M2NSxcbiAgNTAwOiAjOGJjMzRhLFxuICA2MDA6ICM3Y2IzNDIsXG4gIDcwMDogIzY4OWYzOCxcbiAgODAwOiAjNTU4YjJmLFxuICA5MDA6ICMzMzY5MWUsXG4gIEExMDA6ICNjY2ZmOTAsXG4gIEEyMDA6ICNiMmZmNTksXG4gIEE0MDA6ICM3NmZmMDMsXG4gIEE3MDA6ICM2NGRkMTcsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtbGltZTogKFxuICA1MDogI2Y5ZmJlNyxcbiAgMTAwOiAjZjBmNGMzLFxuICAyMDA6ICNlNmVlOWMsXG4gIDMwMDogI2RjZTc3NSxcbiAgNDAwOiAjZDRlMTU3LFxuICA1MDA6ICNjZGRjMzksXG4gIDYwMDogI2MwY2EzMyxcbiAgNzAwOiAjYWZiNDJiLFxuICA4MDA6ICM5ZTlkMjQsXG4gIDkwMDogIzgyNzcxNyxcbiAgQTEwMDogI2Y0ZmY4MSxcbiAgQTIwMDogI2VlZmY0MSxcbiAgQTQwMDogI2M2ZmYwMCxcbiAgQTcwMDogI2FlZWEwMCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQteWVsbG93OiAoXG4gIDUwOiAjZmZmZGU3LFxuICAxMDA6ICNmZmY5YzQsXG4gIDIwMDogI2ZmZjU5ZCxcbiAgMzAwOiAjZmZmMTc2LFxuICA0MDA6ICNmZmVlNTgsXG4gIDUwMDogI2ZmZWIzYixcbiAgNjAwOiAjZmRkODM1LFxuICA3MDA6ICNmYmMwMmQsXG4gIDgwMDogI2Y5YTgyNSxcbiAgOTAwOiAjZjU3ZjE3LFxuICBBMTAwOiAjZmZmZjhkLFxuICBBMjAwOiAjZmZmZjAwLFxuICBBNDAwOiAjZmZlYTAwLFxuICBBNzAwOiAjZmZkNjAwLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWFtYmVyOiAoXG4gIDUwOiAjZmZmOGUxLFxuICAxMDA6ICNmZmVjYjMsXG4gIDIwMDogI2ZmZTA4MixcbiAgMzAwOiAjZmZkNTRmLFxuICA0MDA6ICNmZmNhMjgsXG4gIDUwMDogI2ZmYzEwNyxcbiAgNjAwOiAjZmZiMzAwLFxuICA3MDA6ICNmZmEwMDAsXG4gIDgwMDogI2ZmOGYwMCxcbiAgOTAwOiAjZmY2ZjAwLFxuICBBMTAwOiAjZmZlNTdmLFxuICBBMjAwOiAjZmZkNzQwLFxuICBBNDAwOiAjZmZjNDAwLFxuICBBNzAwOiAjZmZhYjAwLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LW9yYW5nZTogKFxuICA1MDogI2ZmZjNlMCxcbiAgMTAwOiAjZmZlMGIyLFxuICAyMDA6ICNmZmNjODAsXG4gIDMwMDogI2ZmYjc0ZCxcbiAgNDAwOiAjZmZhNzI2LFxuICA1MDA6ICNmZjk4MDAsXG4gIDYwMDogI2ZiOGMwMCxcbiAgNzAwOiAjZjU3YzAwLFxuICA4MDA6ICNlZjZjMDAsXG4gIDkwMDogI2U2NTEwMCxcbiAgQTEwMDogI2ZmZDE4MCxcbiAgQTIwMDogI2ZmYWI0MCxcbiAgQTQwMDogI2ZmOTEwMCxcbiAgQTcwMDogI2ZmNmQwMCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogYmxhY2ssXG4gIClcbik7XG5cbiRtYXQtZGVlcC1vcmFuZ2U6IChcbiAgNTA6ICNmYmU5ZTcsXG4gIDEwMDogI2ZmY2NiYyxcbiAgMjAwOiAjZmZhYjkxLFxuICAzMDA6ICNmZjhhNjUsXG4gIDQwMDogI2ZmNzA0MyxcbiAgNTAwOiAjZmY1NzIyLFxuICA2MDA6ICNmNDUxMWUsXG4gIDcwMDogI2U2NGExOSxcbiAgODAwOiAjZDg0MzE1LFxuICA5MDA6ICNiZjM2MGMsXG4gIEExMDA6ICNmZjllODAsXG4gIEEyMDA6ICNmZjZlNDAsXG4gIEE0MDA6ICNmZjNkMDAsXG4gIEE3MDA6ICNkZDJjMDAsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWJyb3duOiAoXG4gIDUwOiAjZWZlYmU5LFxuICAxMDA6ICNkN2NjYzgsXG4gIDIwMDogI2JjYWFhNCxcbiAgMzAwOiAjYTE4ODdmLFxuICA0MDA6ICM4ZDZlNjMsXG4gIDUwMDogIzc5NTU0OCxcbiAgNjAwOiAjNmQ0YzQxLFxuICA3MDA6ICM1ZDQwMzcsXG4gIDgwMDogIzRlMzQyZSxcbiAgOTAwOiAjM2UyNzIzLFxuICBBMTAwOiAjZDdjY2M4LFxuICBBMjAwOiAjYmNhYWE0LFxuICBBNDAwOiAjOGQ2ZTYzLFxuICBBNzAwOiAjNWQ0MDM3LFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWdyZXk6IChcbiAgNTA6ICNmYWZhZmEsXG4gIDEwMDogI2Y1ZjVmNSxcbiAgMjAwOiAjZWVlZWVlLFxuICAzMDA6ICNlMGUwZTAsXG4gIDQwMDogI2JkYmRiZCxcbiAgNTAwOiAjOWU5ZTllLFxuICA2MDA6ICM3NTc1NzUsXG4gIDcwMDogIzYxNjE2MSxcbiAgODAwOiAjNDI0MjQyLFxuICA5MDA6ICMyMTIxMjEsXG4gIEExMDA6ICNmZmZmZmYsXG4gIEEyMDA6ICNlZWVlZWUsXG4gIEE0MDA6ICNiZGJkYmQsXG4gIEE3MDA6ICM2MTYxNjEsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuLy8gQWxpYXMgZm9yIGFsdGVybmF0ZSBzcGVsbGluZy5cbiRtYXQtZ3JheTogJG1hdC1ncmV5O1xuXG4kbWF0LWJsdWUtZ3JleTogKFxuICA1MDogI2VjZWZmMSxcbiAgMTAwOiAjY2ZkOGRjLFxuICAyMDA6ICNiMGJlYzUsXG4gIDMwMDogIzkwYTRhZSxcbiAgNDAwOiAjNzg5MDljLFxuICA1MDA6ICM2MDdkOGIsXG4gIDYwMDogIzU0NmU3YSxcbiAgNzAwOiAjNDU1YTY0LFxuICA4MDA6ICMzNzQ3NGYsXG4gIDkwMDogIzI2MzIzOCxcbiAgQTEwMDogI2NmZDhkYyxcbiAgQTIwMDogI2IwYmVjNSxcbiAgQTQwMDogIzc4OTA5YyxcbiAgQTcwMDogIzQ1NWE2NCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4vLyBBbGlhcyBmb3IgYWx0ZXJuYXRlIHNwZWxsaW5nLlxuJG1hdC1ibHVlLWdyYXk6ICRtYXQtYmx1ZS1ncmV5O1xuXG5cbi8vIEJhY2tncm91bmQgcGFsZXR0ZSBmb3IgbGlnaHQgdGhlbWVzLlxuJG1hdC1saWdodC10aGVtZS1iYWNrZ3JvdW5kOiAoXG4gIHN0YXR1cy1iYXI6IG1hcF9nZXQoJG1hdC1ncmV5LCAzMDApLFxuICBhcHAtYmFyOiAgICBtYXBfZ2V0KCRtYXQtZ3JleSwgMTAwKSxcbiAgYmFja2dyb3VuZDogbWFwX2dldCgkbWF0LWdyZXksIDUwKSxcbiAgaG92ZXI6ICAgICAgcmdiYShibGFjaywgMC4wNCksIC8vIFRPRE8oa2FyYSk6IGNoZWNrIHN0eWxlIHdpdGggTWF0ZXJpYWwgRGVzaWduIFVYXG4gIGNhcmQ6ICAgICAgIHdoaXRlLFxuICBkaWFsb2c6ICAgICB3aGl0ZSxcbiAgZGlzYWJsZWQtYnV0dG9uOiByZ2JhKGJsYWNrLCAwLjEyKSxcbiAgcmFpc2VkLWJ1dHRvbjogd2hpdGUsXG4gIGZvY3VzZWQtYnV0dG9uOiAkZGFyay1mb2N1c2VkLFxuICBzZWxlY3RlZC1idXR0b246IG1hcF9nZXQoJG1hdC1ncmV5LCAzMDApLFxuICBzZWxlY3RlZC1kaXNhYmxlZC1idXR0b246IG1hcF9nZXQoJG1hdC1ncmV5LCA0MDApLFxuICBkaXNhYmxlZC1idXR0b24tdG9nZ2xlOiBtYXBfZ2V0KCRtYXQtZ3JleSwgMjAwKSxcbiAgdW5zZWxlY3RlZC1jaGlwOiBtYXBfZ2V0KCRtYXQtZ3JleSwgMzAwKSxcbiAgZGlzYWJsZWQtbGlzdC1vcHRpb246IG1hcF9nZXQoJG1hdC1ncmV5LCAyMDApLFxuICB0b29sdGlwOiBtYXBfZ2V0KCRtYXQtZ3JleSwgNzAwKSxcbik7XG5cbi8vIEJhY2tncm91bmQgcGFsZXR0ZSBmb3IgZGFyayB0aGVtZXMuXG4kbWF0LWRhcmstdGhlbWUtYmFja2dyb3VuZDogKFxuICBzdGF0dXMtYmFyOiBibGFjayxcbiAgYXBwLWJhcjogICAgbWFwX2dldCgkbWF0LWdyZXksIDkwMCksXG4gIGJhY2tncm91bmQ6ICMzMDMwMzAsXG4gIGhvdmVyOiAgICAgIHJnYmEod2hpdGUsIDAuMDQpLCAvLyBUT0RPKGthcmEpOiBjaGVjayBzdHlsZSB3aXRoIE1hdGVyaWFsIERlc2lnbiBVWFxuICBjYXJkOiAgICAgICBtYXBfZ2V0KCRtYXQtZ3JleSwgODAwKSxcbiAgZGlhbG9nOiAgICAgbWFwX2dldCgkbWF0LWdyZXksIDgwMCksXG4gIGRpc2FibGVkLWJ1dHRvbjogcmdiYSh3aGl0ZSwgMC4xMiksXG4gIHJhaXNlZC1idXR0b246IG1hcC1nZXQoJG1hdC1ncmV5LCA4MDApLFxuICBmb2N1c2VkLWJ1dHRvbjogJGxpZ2h0LWZvY3VzZWQsXG4gIHNlbGVjdGVkLWJ1dHRvbjogbWFwX2dldCgkbWF0LWdyZXksIDkwMCksXG4gIHNlbGVjdGVkLWRpc2FibGVkLWJ1dHRvbjogbWFwX2dldCgkbWF0LWdyZXksIDgwMCksXG4gIGRpc2FibGVkLWJ1dHRvbi10b2dnbGU6IGJsYWNrLFxuICB1bnNlbGVjdGVkLWNoaXA6IG1hcF9nZXQoJG1hdC1ncmV5LCA3MDApLFxuICBkaXNhYmxlZC1saXN0LW9wdGlvbjogYmxhY2ssXG4gIHRvb2x0aXA6IG1hcF9nZXQoJG1hdC1ncmV5LCA3MDApLFxuKTtcblxuLy8gRm9yZWdyb3VuZCBwYWxldHRlIGZvciBsaWdodCB0aGVtZXMuXG4kbWF0LWxpZ2h0LXRoZW1lLWZvcmVncm91bmQ6IChcbiAgYmFzZTogICAgICAgICAgICAgIGJsYWNrLFxuICBkaXZpZGVyOiAgICAgICAgICAgJGRhcmstZGl2aWRlcnMsXG4gIGRpdmlkZXJzOiAgICAgICAgICAkZGFyay1kaXZpZGVycyxcbiAgZGlzYWJsZWQ6ICAgICAgICAgICRkYXJrLWRpc2FibGVkLXRleHQsXG4gIGRpc2FibGVkLWJ1dHRvbjogICByZ2JhKGJsYWNrLCAwLjI2KSxcbiAgZGlzYWJsZWQtdGV4dDogICAgICRkYXJrLWRpc2FibGVkLXRleHQsXG4gIGVsZXZhdGlvbjogICAgICAgICBibGFjayxcbiAgaGludC10ZXh0OiAgICAgICAgICRkYXJrLWRpc2FibGVkLXRleHQsXG4gIHNlY29uZGFyeS10ZXh0OiAgICAkZGFyay1zZWNvbmRhcnktdGV4dCxcbiAgaWNvbjogICAgICAgICAgICAgIHJnYmEoYmxhY2ssIDAuNTQpLFxuICBpY29uczogICAgICAgICAgICAgcmdiYShibGFjaywgMC41NCksXG4gIHRleHQ6ICAgICAgICAgICAgICByZ2JhKGJsYWNrLCAwLjg3KSxcbiAgc2xpZGVyLW1pbjogICAgICAgIHJnYmEoYmxhY2ssIDAuODcpLFxuICBzbGlkZXItb2ZmOiAgICAgICAgcmdiYShibGFjaywgMC4yNiksXG4gIHNsaWRlci1vZmYtYWN0aXZlOiByZ2JhKGJsYWNrLCAwLjM4KSxcbik7XG5cbi8vIEZvcmVncm91bmQgcGFsZXR0ZSBmb3IgZGFyayB0aGVtZXMuXG4kbWF0LWRhcmstdGhlbWUtZm9yZWdyb3VuZDogKFxuICBiYXNlOiAgICAgICAgICAgICAgd2hpdGUsXG4gIGRpdmlkZXI6ICAgICAgICAgICAkbGlnaHQtZGl2aWRlcnMsXG4gIGRpdmlkZXJzOiAgICAgICAgICAkbGlnaHQtZGl2aWRlcnMsXG4gIGRpc2FibGVkOiAgICAgICAgICAkbGlnaHQtZGlzYWJsZWQtdGV4dCxcbiAgZGlzYWJsZWQtYnV0dG9uOiAgIHJnYmEod2hpdGUsIDAuMyksXG4gIGRpc2FibGVkLXRleHQ6ICAgICAkbGlnaHQtZGlzYWJsZWQtdGV4dCxcbiAgZWxldmF0aW9uOiAgICAgICAgIGJsYWNrLFxuICBoaW50LXRleHQ6ICAgICAgICAgJGxpZ2h0LWRpc2FibGVkLXRleHQsXG4gIHNlY29uZGFyeS10ZXh0OiAgICAkbGlnaHQtc2Vjb25kYXJ5LXRleHQsXG4gIGljb246ICAgICAgICAgICAgICB3aGl0ZSxcbiAgaWNvbnM6ICAgICAgICAgICAgIHdoaXRlLFxuICB0ZXh0OiAgICAgICAgICAgICAgd2hpdGUsXG4gIHNsaWRlci1taW46ICAgICAgICB3aGl0ZSxcbiAgc2xpZGVyLW9mZjogICAgICAgIHJnYmEod2hpdGUsIDAuMyksXG4gIHNsaWRlci1vZmYtYWN0aXZlOiByZ2JhKHdoaXRlLCAwLjMpLFxuKTtcblxuXG5cbi8vIEZvciBhIGdpdmVuIGh1ZSBpbiBhIHBhbGV0dGUsIHJldHVybiB0aGUgY29udHJhc3QgY29sb3IgZnJvbSB0aGUgbWFwIG9mIGNvbnRyYXN0IHBhbGV0dGVzLlxuLy8gQHBhcmFtICRjb2xvci1tYXBcbi8vIEBwYXJhbSAkaHVlXG5AZnVuY3Rpb24gbWF0LWNvbnRyYXN0KCRwYWxldHRlLCAkaHVlKSB7XG4gIEByZXR1cm4gbWFwLWdldChtYXAtZ2V0KCRwYWxldHRlLCBjb250cmFzdCksICRodWUpO1xufVxuXG5cbi8vIENyZWF0ZXMgYSBtYXAgb2YgaHVlcyB0byBjb2xvcnMgZm9yIGEgdGhlbWUuIFRoaXMgaXMgdXNlZCB0byBkZWZpbmUgYSB0aGVtZSBwYWxldHRlIGluIHRlcm1zXG4vLyBvZiB0aGUgTWF0ZXJpYWwgRGVzaWduIGh1ZXMuXG4vLyBAcGFyYW0gJGNvbG9yLW1hcFxuLy8gQHBhcmFtICRwcmltYXJ5XG4vLyBAcGFyYW0gJGxpZ2h0ZXJcbkBmdW5jdGlvbiBtYXQtcGFsZXR0ZSgkYmFzZS1wYWxldHRlLCAkZGVmYXVsdDogNTAwLCAkbGlnaHRlcjogMTAwLCAkZGFya2VyOiA3MDAsICR0ZXh0OiAkZGVmYXVsdCkge1xuICAkcmVzdWx0OiBtYXBfbWVyZ2UoJGJhc2UtcGFsZXR0ZSwgKFxuICAgIGRlZmF1bHQ6IG1hcC1nZXQoJGJhc2UtcGFsZXR0ZSwgJGRlZmF1bHQpLFxuICAgIGxpZ2h0ZXI6IG1hcC1nZXQoJGJhc2UtcGFsZXR0ZSwgJGxpZ2h0ZXIpLFxuICAgIGRhcmtlcjogbWFwLWdldCgkYmFzZS1wYWxldHRlLCAkZGFya2VyKSxcbiAgICB0ZXh0OiBtYXAtZ2V0KCRiYXNlLXBhbGV0dGUsICR0ZXh0KSxcblxuICAgIGRlZmF1bHQtY29udHJhc3Q6IG1hdC1jb250cmFzdCgkYmFzZS1wYWxldHRlLCAkZGVmYXVsdCksXG4gICAgbGlnaHRlci1jb250cmFzdDogbWF0LWNvbnRyYXN0KCRiYXNlLXBhbGV0dGUsICRsaWdodGVyKSxcbiAgICBkYXJrZXItY29udHJhc3Q6IG1hdC1jb250cmFzdCgkYmFzZS1wYWxldHRlLCAkZGFya2VyKVxuICApKTtcblxuICAvLyBGb3IgZWFjaCBodWUgaW4gdGhlIHBhbGV0dGUsIGFkZCBhIFwiLWNvbnRyYXN0XCIgY29sb3IgdG8gdGhlIG1hcC5cbiAgQGVhY2ggJGh1ZSwgJGNvbG9yIGluICRiYXNlLXBhbGV0dGUge1xuICAgICRyZXN1bHQ6IG1hcF9tZXJnZSgkcmVzdWx0LCAoXG4gICAgICAnI3skaHVlfS1jb250cmFzdCc6IG1hdC1jb250cmFzdCgkYmFzZS1wYWxldHRlLCAkaHVlKVxuICAgICkpO1xuICB9XG5cbiAgQHJldHVybiAkcmVzdWx0O1xufVxuXG5cbi8vIEdldHMgYSBjb2xvciBmcm9tIGEgdGhlbWUgcGFsZXR0ZSAodGhlIG91dHB1dCBvZiBtYXQtcGFsZXR0ZSkuXG4vLyBUaGUgaHVlIGNhbiBiZSBvbmUgb2YgdGhlIHN0YW5kYXJkIHZhbHVlcyAoNTAwLCBBNDAwLCBldGMuKSwgb25lIG9mIHRoZSB0aHJlZSBwcmVjb25maWd1cmVkXG4vLyBodWVzIChkZWZhdWx0LCBsaWdodGVyLCBkYXJrZXIpLCBvciBhbnkgb2YgdGhlIGFmb3JlbWVudGlvbmVkIHByZWZpeGVkIHdpdGggXCItY29udHJhc3RcIi5cbi8vXG4vLyBAcGFyYW0gJGNvbG9yLW1hcCBUaGUgdGhlbWUgcGFsZXR0ZSAob3V0cHV0IG9mIG1hdC1wYWxldHRlKS5cbi8vIEBwYXJhbSAkaHVlIFRoZSBodWUgZnJvbSB0aGUgcGFsZXR0ZSB0byB1c2UuIElmIHRoaXMgaXMgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEsIGl0IHdpbGxcbi8vICAgICBiZSB0cmVhdGVkIGFzIG9wYWNpdHkuXG4vLyBAcGFyYW0gJG9wYWNpdHkgVGhlIGFscGhhIGNoYW5uZWwgdmFsdWUgZm9yIHRoZSBjb2xvci5cbkBmdW5jdGlvbiBtYXQtY29sb3IoJHBhbGV0dGUsICRodWU6IGRlZmF1bHQsICRvcGFjaXR5OiBudWxsKSB7XG4gIC8vIElmIGh1ZUtleSBpcyBhIG51bWJlciBiZXR3ZWVuIHplcm8gYW5kIG9uZSwgdGhlbiBpdCBhY3R1YWxseSBjb250YWlucyBhblxuICAvLyBvcGFjaXR5IHZhbHVlLCBzbyByZWNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIHRoZSBkZWZhdWx0IGh1ZSBhbmQgdGhhdCBnaXZlbiBvcGFjaXR5LlxuICBAaWYgdHlwZS1vZigkaHVlKSA9PSBudW1iZXIgYW5kICRodWUgPj0gMCBhbmQgJGh1ZSA8PSAxIHtcbiAgICBAcmV0dXJuIG1hdC1jb2xvcigkcGFsZXR0ZSwgZGVmYXVsdCwgJGh1ZSk7XG4gIH1cblxuICAkY29sb3I6IG1hcC1nZXQoJHBhbGV0dGUsICRodWUpO1xuXG4gIEBpZiAodHlwZS1vZigkY29sb3IpICE9IGNvbG9yKSB7XG4gICAgLy8gSWYgdGhlICRjb2xvciByZXNvbHZlZCB0byBzb21ldGhpbmcgZGlmZmVyZW50IGZyb20gYSBjb2xvciAoZS5nLiBhIENTUyB2YXJpYWJsZSksXG4gICAgLy8gd2UgY2FuJ3QgYXBwbHkgdGhlIG9wYWNpdHkgYW55d2F5IHNvIHdlIHJldHVybiB0aGUgdmFsdWUgYXMgaXMsIG90aGVyd2lzZSBTYXNzIGNhblxuICAgIC8vIHRocm93IGFuIGVycm9yIG9yIG91dHB1dCBzb21ldGhpbmcgaW52YWxpZC5cbiAgICBAcmV0dXJuICRjb2xvcjtcbiAgfVxuXG4gIEByZXR1cm4gcmdiYSgkY29sb3IsIGlmKCRvcGFjaXR5ID09IG51bGwsIG9wYWNpdHkoJGNvbG9yKSwgJG9wYWNpdHkpKTtcbn1cblxuXG4vLyBDcmVhdGVzIGEgY29udGFpbmVyIG9iamVjdCBmb3IgYSBsaWdodCB0aGVtZSB0byBiZSBnaXZlbiB0byBpbmRpdmlkdWFsIGNvbXBvbmVudCB0aGVtZSBtaXhpbnMuXG5AZnVuY3Rpb24gbWF0LWxpZ2h0LXRoZW1lKCRwcmltYXJ5LCAkYWNjZW50LCAkd2FybjogbWF0LXBhbGV0dGUoJG1hdC1yZWQpKSB7XG4gIEByZXR1cm4gKFxuICAgIHByaW1hcnk6ICRwcmltYXJ5LFxuICAgIGFjY2VudDogJGFjY2VudCxcbiAgICB3YXJuOiAkd2FybixcbiAgICBpcy1kYXJrOiBmYWxzZSxcbiAgICBmb3JlZ3JvdW5kOiAkbWF0LWxpZ2h0LXRoZW1lLWZvcmVncm91bmQsXG4gICAgYmFja2dyb3VuZDogJG1hdC1saWdodC10aGVtZS1iYWNrZ3JvdW5kLFxuICApO1xufVxuXG5cbi8vIENyZWF0ZXMgYSBjb250YWluZXIgb2JqZWN0IGZvciBhIGRhcmsgdGhlbWUgdG8gYmUgZ2l2ZW4gdG8gaW5kaXZpZHVhbCBjb21wb25lbnQgdGhlbWUgbWl4aW5zLlxuQGZ1bmN0aW9uIG1hdC1kYXJrLXRoZW1lKCRwcmltYXJ5LCAkYWNjZW50LCAkd2FybjogbWF0LXBhbGV0dGUoJG1hdC1yZWQpKSB7XG4gIEByZXR1cm4gKFxuICAgIHByaW1hcnk6ICRwcmltYXJ5LFxuICAgIGFjY2VudDogJGFjY2VudCxcbiAgICB3YXJuOiAkd2FybixcbiAgICBpcy1kYXJrOiB0cnVlLFxuICAgIGZvcmVncm91bmQ6ICRtYXQtZGFyay10aGVtZS1mb3JlZ3JvdW5kLFxuICAgIGJhY2tncm91bmQ6ICRtYXQtZGFyay10aGVtZS1iYWNrZ3JvdW5kLFxuICApO1xufVxuXG5cblxuJG1hdC1yaXBwbGUtY29sb3Itb3BhY2l0eTogMC4xO1xuXG5AbWl4aW4gbWF0LXJpcHBsZSgpIHtcblxuICAvLyBUaGUgaG9zdCBlbGVtZW50IG9mIGFuIG1hdC1yaXBwbGUgZGlyZWN0aXZlIHNob3VsZCBhbHdheXMgaGF2ZSBhIHBvc2l0aW9uIG9mIFwiYWJzb2x1dGVcIiBvclxuICAvLyBcInJlbGF0aXZlXCIgc28gdGhhdCB0aGUgcmlwcGxlcyBpbnNpZGUgYXJlIGNvcnJlY3RseSBwb3NpdGlvbmVkIHJlbGF0aXZlbHkgdG8gdGhlIGNvbnRhaW5lci5cbiAgLm1hdC1yaXBwbGUge1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAvLyBCeSBkZWZhdWx0LCBldmVyeSByaXBwbGUgY29udGFpbmVyIHNob3VsZCBoYXZlIHBvc2l0aW9uOiByZWxhdGl2ZSBpbiBmYXZvciBvZiBjcmVhdGluZyBhblxuICAgIC8vIGVhc3kgQVBJIGZvciBkZXZlbG9wZXJzIHVzaW5nIHRoZSBNYXRSaXBwbGUgZGlyZWN0aXZlLlxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIC8vIFByb21vdGUgY29udGFpbmVycyB0aGF0IGhhdmUgcmlwcGxlcyB0byBhIG5ldyBsYXllci4gV2Ugd2FudCB0byB0YXJnZXQgYDpub3QoOmVtcHR5KWAsXG4gICAgLy8gYmVjYXVzZSB3ZSBkb24ndCB3YW50IGFsbCByaXBwbGUgY29udGFpbmVycyB0byBoYXZlIHRoZWlyIG93biBsYXllciBzaW5jZSB0aGV5J3JlIHVzZWQgaW4gYVxuICAgIC8vIGxvdCBvZiBwbGFjZXMgYW5kIHRoZSBsYXllciBpcyBvbmx5IHJlbGV2YW50IHdoaWxlIGFuaW1hdGluZy4gTm90ZSB0aGF0IGlkZWFsbHkgd2UnZCB1c2VcbiAgICAvLyB0aGUgYGNvbnRhaW5gIHByb3BlcnR5IGhlcmUgKHNlZSAjMTMxNzUpLCBiZWNhdXNlIGA6ZW1wdHlgIGNhbiBiZSBicm9rZW4gYnkgaGF2aW5nIGV4dHJhXG4gICAgLy8gdGV4dCBpbnNpZGUgdGhlIGVsZW1lbnQsIGJ1dCBpdCBpc24ndCB2ZXJ5IHdlbGwgc3VwcG9ydGVkIHlldC5cbiAgICAmOm5vdCg6ZW1wdHkpIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTtcbiAgICB9XG4gIH1cblxuICAubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZCB7XG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIH1cblxuICAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuXG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSwgdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDApO1xuXG4gICAgLy8gSW4gaGlnaCBjb250cmFzdCBtb2RlIHRoZSByaXBwbGUgaXMgb3BhcXVlLCBjYXVzaW5nIGl0IHRvIG9ic3RydWN0IHRoZSBjb250ZW50LlxuICAgIEBpbmNsdWRlIGNkay1oaWdoLWNvbnRyYXN0KGFjdGl2ZSwgb2ZmKSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxufVxuXG4vKiBUaGVtZSBmb3IgdGhlIHJpcHBsZSBlbGVtZW50cy4qL1xuQG1peGluIG1hdC1yaXBwbGUtdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXBfZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRmb3JlZ3JvdW5kLWJhc2U6IG1hcF9nZXQoJGZvcmVncm91bmQsIGJhc2UpO1xuXG4gIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgIC8vIElmIHRoZSByaXBwbGUgY29sb3IgaXMgcmVzb2x2ZXMgdG8gYSBjb2xvciAqdHlwZSosIHdlIGNhbiB1c2UgaXQgZGlyZWN0bHksIG90aGVyd2lzZVxuICAgIC8vIChlLmcuIGl0IHJlc29sdmVzIHRvIGEgQ1NTIHZhcmlhYmxlKSB3ZSBmYWxsIGJhY2sgdG8gdXNpbmcgdGhlIGNvbG9yIGFuZCBzZXR0aW5nIGFuIG9wYWNpdHkuXG4gICAgQGlmICh0eXBlLW9mKCRmb3JlZ3JvdW5kLWJhc2UpID09IGNvbG9yKSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCRmb3JlZ3JvdW5kLWJhc2UsICRtYXQtcmlwcGxlLWNvbG9yLW9wYWNpdHkpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZm9yZWdyb3VuZC1iYXNlO1xuICAgICAgb3BhY2l0eTogJG1hdC1yaXBwbGUtY29sb3Itb3BhY2l0eTtcbiAgICB9XG4gIH1cbn1cblxuXG5cbi8vIFV0aWxpdHkgZm9yIGZldGNoaW5nIGEgbmVzdGVkIHZhbHVlIGZyb20gYSB0eXBvZ3JhcGh5IGNvbmZpZy5cbkBmdW5jdGlvbiBfbWF0LWdldC10eXBlLXZhbHVlKCRjb25maWcsICRsZXZlbCwgJG5hbWUpIHtcbiAgQHJldHVybiBtYXAtZ2V0KG1hcC1nZXQoJGNvbmZpZywgJGxldmVsKSwgJG5hbWUpO1xufVxuXG4vLyBHZXRzIHRoZSBmb250IHNpemUgZm9yIGEgbGV2ZWwgaW5zaWRlIGEgdHlwb2dyYXBoeSBjb25maWcuXG5AZnVuY3Rpb24gbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCAkbGV2ZWwpIHtcbiAgQHJldHVybiBfbWF0LWdldC10eXBlLXZhbHVlKCRjb25maWcsICRsZXZlbCwgZm9udC1zaXplKTtcbn1cblxuLy8gR2V0cyB0aGUgbGluZSBoZWlnaHQgZm9yIGEgbGV2ZWwgaW5zaWRlIGEgdHlwb2dyYXBoeSBjb25maWcuXG5AZnVuY3Rpb24gbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsICRsZXZlbCkge1xuICBAcmV0dXJuIF9tYXQtZ2V0LXR5cGUtdmFsdWUoJGNvbmZpZywgJGxldmVsLCBsaW5lLWhlaWdodCk7XG59XG5cbi8vIEdldHMgdGhlIGZvbnQgd2VpZ2h0IGZvciBhIGxldmVsIGluc2lkZSBhIHR5cG9ncmFwaHkgY29uZmlnLlxuQGZ1bmN0aW9uIG1hdC1mb250LXdlaWdodCgkY29uZmlnLCAkbGV2ZWwpIHtcbiAgQHJldHVybiBfbWF0LWdldC10eXBlLXZhbHVlKCRjb25maWcsICRsZXZlbCwgZm9udC13ZWlnaHQpO1xufVxuXG4vLyBHZXRzIHRoZSBsZXR0ZXIgc3BhY2luZyBmb3IgYSBsZXZlbCBpbnNpZGUgYSB0eXBvZ3JhcGh5IGNvbmZpZy5cbkBmdW5jdGlvbiBtYXQtbGV0dGVyLXNwYWNpbmcoJGNvbmZpZywgJGxldmVsKSB7XG4gIEByZXR1cm4gX21hdC1nZXQtdHlwZS12YWx1ZSgkY29uZmlnLCAkbGV2ZWwsIGxldHRlci1zcGFjaW5nKTtcbn1cblxuLy8gR2V0cyB0aGUgZm9udC1mYW1pbHkgZnJvbSBhIHR5cG9ncmFwaHkgY29uZmlnIGFuZCByZW1vdmVzIHRoZSBxdW90ZXMgYXJvdW5kIGl0LlxuQGZ1bmN0aW9uIG1hdC1mb250LWZhbWlseSgkY29uZmlnLCAkbGV2ZWw6IG51bGwpIHtcbiAgJGZvbnQtZmFtaWx5OiBtYXAtZ2V0KCRjb25maWcsIGZvbnQtZmFtaWx5KTtcblxuICBAaWYgJGxldmVsICE9IG51bGwge1xuICAgICRmb250LWZhbWlseTogX21hdC1nZXQtdHlwZS12YWx1ZSgkY29uZmlnLCAkbGV2ZWwsIGZvbnQtZmFtaWx5KTtcbiAgfVxuXG4gIC8vIEd1YXJkIGFnYWluc3QgdW5xdW90aW5nIG5vbi1zdHJpbmcgdmFsdWVzLCBiZWNhdXNlIGl0J3MgZGVwcmVjYXRlZC5cbiAgQHJldHVybiBpZih0eXBlLW9mKCRmb250LWZhbWlseSkgPT0gc3RyaW5nLCB1bnF1b3RlKCRmb250LWZhbWlseSksICRmb250LWZhbWlseSk7XG59XG5cbi8vIE91dHB1dHMgdGhlIHNob3J0aGFuZCBgZm9udGAgQ1NTIHByb3BlcnR5LCBiYXNlZCBvbiBhIHNldCBvZiB0eXBvZ3JhcGh5IHZhbHVlcy4gRmFsbHMgYmFjayB0b1xuLy8gdGhlIGluZGl2aWR1YWwgcHJvcGVydGllcyBpZiBhIHZhbHVlIHRoYXQgaXNuJ3QgYWxsb3dlZCBpbiB0aGUgc2hvcnRoYW5kIGlzIHBhc3NlZCBpbi5cbkBtaXhpbiBtYXQtdHlwb2dyYXBoeS1mb250LXNob3J0aGFuZCgkZm9udC1zaXplLCAkZm9udC13ZWlnaHQsICRsaW5lLWhlaWdodCwgJGZvbnQtZmFtaWx5KSB7XG4gIC8vIElmIGFueSBvZiB0aGUgdmFsdWVzIGFyZSBzZXQgdG8gYGluaGVyaXRgLCB3ZSBjYW4ndCB1c2UgdGhlIHNob3J0aGFuZFxuICAvLyBzbyB3ZSBmYWxsIGJhY2sgdG8gcGFzc2luZyBpbiB0aGUgaW5kaXZpZHVhbCBwcm9wZXJ0aWVzLlxuICBAaWYgKCRmb250LXNpemUgPT0gaW5oZXJpdCBvclxuICAgICAgICRmb250LXdlaWdodCA9PSBpbmhlcml0IG9yXG4gICAgICAgJGxpbmUtaGVpZ2h0ID09IGluaGVyaXQgb3JcbiAgICAgICAkZm9udC1mYW1pbHkgPT0gaW5oZXJpdCBvclxuICAgICAgICRmb250LXNpemUgPT0gbnVsbCBvclxuICAgICAgICRmb250LXdlaWdodCA9PSBudWxsIG9yXG4gICAgICAgJGxpbmUtaGVpZ2h0ID09IG51bGwgb3JcbiAgICAgICAkZm9udC1mYW1pbHkgPT0gbnVsbCkge1xuXG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplO1xuICAgIGZvbnQtd2VpZ2h0OiAkZm9udC13ZWlnaHQ7XG4gICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5O1xuICB9XG4gIEBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2UgdXNlIHRoZSBzaG9ydGhhbmQgYGZvbnRgLCBiZWNhdXNlIGl0J3MgdGhlIGxlYXN0IGFtb3VudCBvZiBieXRlcy4gTm90ZVxuICAgIC8vIHRoYXQgd2UgbmVlZCB0byB1c2UgaW50ZXJwb2xhdGlvbiBmb3IgYGZvbnQtc2l6ZS9saW5lLWhlaWdodGAgaW4gb3JkZXIgdG8gcHJldmVudFxuICAgIC8vIFNhc3MgZnJvbSBkaXZpZGluZyB0aGUgdHdvIHZhbHVlcy5cbiAgICBmb250OiAkZm9udC13ZWlnaHQgI3skZm9udC1zaXplfS8jeyRsaW5lLWhlaWdodH0gJGZvbnQtZmFtaWx5O1xuICB9XG59XG5cbi8vIENvbnZlcnRzIGEgdHlwb2dyYXBoeSBsZXZlbCBpbnRvIENTUyBzdHlsZXMuXG5AbWl4aW4gbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsICRsZXZlbCkge1xuICAkZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsICRsZXZlbCk7XG4gICRmb250LXdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsICRsZXZlbCk7XG4gICRsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsICRsZXZlbCk7XG4gICRmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsICRsZXZlbCk7XG5cbiAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktZm9udC1zaG9ydGhhbmQoJGZvbnQtc2l6ZSwgJGZvbnQtd2VpZ2h0LCAkbGluZS1oZWlnaHQsICRmb250LWZhbWlseSk7XG4gIGxldHRlci1zcGFjaW5nOiBtYXQtbGV0dGVyLXNwYWNpbmcoJGNvbmZpZywgJGxldmVsKTtcbn1cblxuXG5AbWl4aW4gbWF0LW9wdGlvbi10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG5cbiAgLm1hdC1vcHRpb24ge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gICAgJjpob3Zlcjpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpLFxuICAgICY6Zm9jdXM6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyKTtcbiAgICB9XG5cbiAgICAvLyBJbiBtdWx0aXBsZSBtb2RlIHRoZXJlIGlzIGEgY2hlY2tib3ggdG8gc2hvdyB0aGF0IHRoZSBvcHRpb24gaXMgc2VsZWN0ZWQuXG4gICAgJi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIpO1xuICAgIH1cblxuICAgICYubWF0LWFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyKTtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIH1cblxuICAgICYubWF0LW9wdGlvbi1kaXNhYmxlZCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBoaW50LXRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtcHJpbWFyeSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgdGV4dCk7XG4gIH1cblxuICAubWF0LWFjY2VudCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtd2FybiAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1vcHRpb24tdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtb3B0aW9uIHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgc3ViaGVhZGluZy0yKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LW9wdGdyb3VwLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtb3B0Z3JvdXAtbGFiZWwge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtb3B0Z3JvdXAtZGlzYWJsZWQgLm1hdC1vcHRncm91cC1sYWJlbCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaGludC10ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LW9wdGdyb3VwLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LW9wdGdyb3VwLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgYm9keS0yKTtcbiAgfVxufVxuXG5cblxuQG1peGluIG1hdC1wc2V1ZG8tY2hlY2tib3gtdGhlbWUoJHRoZW1lKSB7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuXG4gIC8vIE5PVEUodHJhdmlza2F1Zm1hbik6IFdoaWxlIHRoZSBzcGVjIGNhbGxzIGZvciB0cmFuc2x1Y2VudCBibGFja3Mvd2hpdGVzIGZvciBkaXNhYmxlZCBjb2xvcnMsXG4gIC8vIHRoaXMgZG9lcyBub3Qgd29yayB3ZWxsIHdpdGggZWxlbWVudHMgbGF5ZXJlZCBvbiB0b3Agb2Ygb25lIGFub3RoZXIuIFRvIGdldCBhcm91bmQgdGhpcyB3ZVxuICAvLyBibGVuZCB0aGUgY29sb3JzIHRvZ2V0aGVyIGJhc2VkIG9uIHRoZSBiYXNlIGNvbG9yIGFuZCB0aGUgdGhlbWUgYmFja2dyb3VuZC5cbiAgJHdoaXRlLTMwcGN0LW9wYWNpdHktb24tZGFyazogIzY4Njg2ODtcbiAgJGJsYWNrLTI2cGN0LW9wYWNpdHktb24tbGlnaHQ6ICNiMGIwYjA7XG4gICRkaXNhYmxlZC1jb2xvcjogaWYoJGlzLWRhcmstdGhlbWUsICR3aGl0ZS0zMHBjdC1vcGFjaXR5LW9uLWRhcmssICRibGFjay0yNnBjdC1vcGFjaXR5LW9uLWxpZ2h0KTtcbiAgJGNvbG9yZWQtYm94LXNlbGVjdG9yOiAnLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSc7XG5cbiAgLm1hdC1wc2V1ZG8tY2hlY2tib3gge1xuICAgIGNvbG9yOiBtYXQtY29sb3IobWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpLCBzZWNvbmRhcnktdGV4dCk7XG5cbiAgICAmOjphZnRlciB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kKTtcbiAgICB9XG4gIH1cblxuICAubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZCB7XG4gICAgY29sb3I6ICRkaXNhYmxlZC1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLFxuICAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KSk7XG4gIH1cblxuICAvLyBEZWZhdWx0IHRvIHRoZSBhY2NlbnQgY29sb3IuIE5vdGUgdGhhdCB0aGUgcHNldWRvIGNoZWNrYm94ZXMgYXJlIG1lYW50IHRvIGluaGVyaXQgdGhlXG4gIC8vIHRoZW1lIGZyb20gdGhlaXIgcGFyZW50LCByYXRoZXIgdGhhbiBpbXBsZW1lbnRpbmcgdGhlaXIgb3duIHRoZW1pbmcsIHdoaWNoIGlzIHdoeSB3ZVxuICAvLyBkb24ndCBhdHRhY2ggdG8gdGhlIGBtYXQtKmAgY2xhc3Nlcy4gQWxzbyBub3RlIHRoYXQgdGhpcyBuZWVkcyB0byBiZSBiZWxvdyBgLm1hdC1wcmltYXJ5YFxuICAvLyBpbiBvcmRlciB0byBhbGxvdyBmb3IgdGhlIGNvbG9yIHRvIGJlIG92ZXJ3cml0dGVuIGlmIHRoZSBjaGVja2JveCBpcyBpbnNpZGUgYSBwYXJlbnQgdGhhdFxuICAvLyBoYXMgYG1hdC1hY2NlbnRgIGFuZCBpcyBwbGFjZWQgaW5zaWRlIGFub3RoZXIgcGFyZW50IHRoYXQgaGFzIGBtYXQtcHJpbWFyeWAuXG4gIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsXG4gIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUsXG4gIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsXG4gIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KSk7XG4gIH1cblxuICAubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxcbiAgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgd2FybikpO1xuICB9XG5cbiAgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxcbiAgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSB7XG4gICAgJi5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkIHtcbiAgICAgIGJhY2tncm91bmQ6ICRkaXNhYmxlZC1jb2xvcjtcbiAgICB9XG4gIH1cbn1cblxuXG5cbi8vIFJlcHJlc2VudHMgYSB0eXBvZ3JhcGh5IGxldmVsIGZyb20gdGhlIE1hdGVyaWFsIGRlc2lnbiBzcGVjLlxuQGZ1bmN0aW9uIG1hdC10eXBvZ3JhcGh5LWxldmVsKFxuICAkZm9udC1zaXplLFxuICAkbGluZS1oZWlnaHQ6ICRmb250LXNpemUsXG4gICRmb250LXdlaWdodDogNDAwLFxuICAkZm9udC1mYW1pbHk6IG51bGwsXG4gICRsZXR0ZXItc3BhY2luZzogbm9ybWFsKSB7XG5cbiAgQHJldHVybiAoXG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLFxuICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQsXG4gICAgZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodCxcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LFxuICAgIGxldHRlci1zcGFjaW5nOiAkbGV0dGVyLXNwYWNpbmdcbiAgKTtcbn1cblxuLy8gUmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgdHlwb2dyYXBoeSBsZXZlbHMuXG4vLyBEZWZhdWx0cyBjb21lIGZyb20gaHR0cHM6Ly9tYXRlcmlhbC5pby9ndWlkZWxpbmVzL3N0eWxlL3R5cG9ncmFwaHkuaHRtbFxuLy8gTm90ZTogVGhlIHNwZWMgZG9lc24ndCBtZW50aW9uIGxldHRlciBzcGFjaW5nLiBUaGUgdmFsdWVzIGhlcmUgY29tZSBmcm9tXG4vLyBleWViYWxsaW5nIGl0IHVudGlsIGl0IGxvb2tlZCBleGFjdGx5IGxpa2UgdGhlIHNwZWMgZXhhbXBsZXMuXG5AZnVuY3Rpb24gbWF0LXR5cG9ncmFwaHktY29uZmlnKFxuICAkZm9udC1mYW1pbHk6ICAgJ1JvYm90bywgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBzYW5zLXNlcmlmJyxcbiAgJGRpc3BsYXktNDogICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDExMnB4LCAxMTJweCwgMzAwLCAkbGV0dGVyLXNwYWNpbmc6IC0wLjA1ZW0pLFxuICAkZGlzcGxheS0zOiAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoNTZweCwgNTZweCwgNDAwLCAkbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW0pLFxuICAkZGlzcGxheS0yOiAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoNDVweCwgNDhweCwgNDAwLCAkbGV0dGVyLXNwYWNpbmc6IC0wLjAwNWVtKSxcbiAgJGRpc3BsYXktMTogICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDM0cHgsIDQwcHgsIDQwMCksXG4gICRoZWFkbGluZTogICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgyNHB4LCAzMnB4LCA0MDApLFxuICAkdGl0bGU6ICAgICAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMjBweCwgMzJweCwgNTAwKSxcbiAgJHN1YmhlYWRpbmctMjogIG1hdC10eXBvZ3JhcGh5LWxldmVsKDE2cHgsIDI4cHgsIDQwMCksXG4gICRzdWJoZWFkaW5nLTE6ICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgxNXB4LCAyNHB4LCA0MDApLFxuICAkYm9keS0yOiAgICAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMTRweCwgMjRweCwgNTAwKSxcbiAgJGJvZHktMTogICAgICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDE0cHgsIDIwcHgsIDQwMCksXG4gICRjYXB0aW9uOiAgICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgxMnB4LCAyMHB4LCA0MDApLFxuICAkYnV0dG9uOiAgICAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMTRweCwgMTRweCwgNTAwKSxcbiAgLy8gTGluZS1oZWlnaHQgbXVzdCBiZSB1bml0LWxlc3MgZnJhY3Rpb24gb2YgdGhlIGZvbnQtc2l6ZS5cbiAgJGlucHV0OiAgICAgICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKGluaGVyaXQsIDEuMTI1LCA0MDApXG4pIHtcblxuICAvLyBEZWNsYXJlIGFuIGluaXRpYWwgbWFwIHdpdGggYWxsIG9mIHRoZSBsZXZlbHMuXG4gICRjb25maWc6IChcbiAgICBkaXNwbGF5LTQ6ICAgICAgJGRpc3BsYXktNCxcbiAgICBkaXNwbGF5LTM6ICAgICAgJGRpc3BsYXktMyxcbiAgICBkaXNwbGF5LTI6ICAgICAgJGRpc3BsYXktMixcbiAgICBkaXNwbGF5LTE6ICAgICAgJGRpc3BsYXktMSxcbiAgICBoZWFkbGluZTogICAgICAgJGhlYWRsaW5lLFxuICAgIHRpdGxlOiAgICAgICAgICAkdGl0bGUsXG4gICAgc3ViaGVhZGluZy0yOiAgICRzdWJoZWFkaW5nLTIsXG4gICAgc3ViaGVhZGluZy0xOiAgICRzdWJoZWFkaW5nLTEsXG4gICAgYm9keS0yOiAgICAgICAgICRib2R5LTIsXG4gICAgYm9keS0xOiAgICAgICAgICRib2R5LTEsXG4gICAgY2FwdGlvbjogICAgICAgICRjYXB0aW9uLFxuICAgIGJ1dHRvbjogICAgICAgICAkYnV0dG9uLFxuICAgIGlucHV0OiAgICAgICAgICAkaW5wdXQsXG4gICk7XG5cbiAgLy8gTG9vcCB0aHJvdWdoIHRoZSBsZXZlbHMgYW5kIHNldCB0aGUgYGZvbnQtZmFtaWx5YCBvZiB0aGUgb25lcyB0aGF0IGRvbid0IGhhdmUgb25lIHRvIHRoZSBiYXNlLlxuICAvLyBOb3RlIHRoYXQgU2FzcyBjYW4ndCBtb2RpZnkgbWFwcyBpbiBwbGFjZSwgd2hpY2ggbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIG1lcmdlIGFuZCByZS1hc3NpZ24uXG4gIEBlYWNoICRrZXksICRsZXZlbCBpbiAkY29uZmlnIHtcbiAgICBAaWYgbWFwLWdldCgkbGV2ZWwsIGZvbnQtZmFtaWx5KSA9PSBudWxsIHtcbiAgICAgICRuZXctbGV2ZWw6IG1hcC1tZXJnZSgkbGV2ZWwsIChmb250LWZhbWlseTogJGZvbnQtZmFtaWx5KSk7XG4gICAgICAkY29uZmlnOiBtYXAtbWVyZ2UoJGNvbmZpZywgKCRrZXk6ICRuZXctbGV2ZWwpKTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgdGhlIGJhc2UgZm9udCBmYW1pbHkgdG8gdGhlIGNvbmZpZy5cbiAgQHJldHVybiBtYXAtbWVyZ2UoJGNvbmZpZywgKGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHkpKTtcbn1cblxuLy8gQWRkcyB0aGUgYmFzZSB0eXBvZ3JhcGh5IHN0eWxlcywgYmFzZWQgb24gYSBjb25maWcuXG5AbWl4aW4gbWF0LWJhc2UtdHlwb2dyYXBoeSgkY29uZmlnLCAkc2VsZWN0b3I6ICcubWF0LXR5cG9ncmFwaHknKSB7XG4gIC5tYXQtaDEsIC5tYXQtaGVhZGxpbmUsICN7JHNlbGVjdG9yfSBoMSB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGhlYWRsaW5lKTtcbiAgICBtYXJnaW46IDAgMCAxNnB4O1xuICB9XG5cbiAgLm1hdC1oMiwgLm1hdC10aXRsZSwgI3skc2VsZWN0b3J9IGgyIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgdGl0bGUpO1xuICAgIG1hcmdpbjogMCAwIDE2cHg7XG4gIH1cblxuICAubWF0LWgzLCAubWF0LXN1YmhlYWRpbmctMiwgI3skc2VsZWN0b3J9IGgzIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgc3ViaGVhZGluZy0yKTtcbiAgICBtYXJnaW46IDAgMCAxNnB4O1xuICB9XG5cbiAgLm1hdC1oNCwgLm1hdC1zdWJoZWFkaW5nLTEsICN7JHNlbGVjdG9yfSBoNCB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIHN1YmhlYWRpbmctMSk7XG4gICAgbWFyZ2luOiAwIDAgMTZweDtcbiAgfVxuXG4gIC8vIE5vdGU6IHRoZSBzcGVjIGRvZXNuJ3QgaGF2ZSBhbnl0aGluZyB0aGF0IHdvdWxkIGNvcnJlc3BvbmQgdG8gaDUgYW5kIGg2LCBidXQgd2UgYWRkIHRoZXNlIGZvclxuICAvLyBjb25zaXN0ZW5jeS4gVGhlIGZvbnQgc2l6ZXMgY29tZSBmcm9tIHRoZSBDaHJvbWUgdXNlciBhZ2VudCBzdHlsZXMgd2hpY2ggaGF2ZSBoNSBhdCAwLjgzZW1cbiAgLy8gYW5kIGg2IGF0IDAuNjdlbS5cbiAgLm1hdC1oNSwgI3skc2VsZWN0b3J9IGg1IHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1mb250LXNob3J0aGFuZChcbiAgICAgICAvLyBjYWxjIGlzIHVzZWQgaGVyZSB0byBzdXBwb3J0IGNzcyB2YXJpYWJsZXNcbiAgICAgIGNhbGMoI3ttYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSl9ICogMC44MyksXG4gICAgICBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0xKSxcbiAgICAgIG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBib2R5LTEpLFxuICAgICAgbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGJvZHktMSlcbiAgICApO1xuXG4gICAgbWFyZ2luOiAwIDAgMTJweDtcbiAgfVxuXG4gIC5tYXQtaDYsICN7JHNlbGVjdG9yfSBoNiB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktZm9udC1zaG9ydGhhbmQoXG4gICAgICAgLy8gY2FsYyBpcyB1c2VkIGhlcmUgdG8gc3VwcG9ydCBjc3MgdmFyaWFibGVzXG4gICAgICBjYWxjKCN7bWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpfSAqIDAuNjcpLFxuICAgICAgbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMSksXG4gICAgICBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgYm9keS0xKSxcbiAgICAgIG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBib2R5LTEpXG4gICAgKTtcblxuICAgIG1hcmdpbjogMCAwIDEycHg7XG4gIH1cblxuICAubWF0LWJvZHktc3Ryb25nLCAubWF0LWJvZHktMiB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGJvZHktMik7XG4gIH1cblxuICAubWF0LWJvZHksIC5tYXQtYm9keS0xLCAjeyRzZWxlY3Rvcn0ge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBib2R5LTEpO1xuXG4gICAgcCB7XG4gICAgICBtYXJnaW46IDAgMCAxMnB4O1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc21hbGwsIC5tYXQtY2FwdGlvbiB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGNhcHRpb24pO1xuICB9XG5cbiAgLm1hdC1kaXNwbGF5LTQsICN7JHNlbGVjdG9yfSAubWF0LWRpc3BsYXktNCB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGRpc3BsYXktNCk7XG4gICAgbWFyZ2luOiAwIDAgNTZweDtcbiAgfVxuXG4gIC5tYXQtZGlzcGxheS0zLCAjeyRzZWxlY3Rvcn0gLm1hdC1kaXNwbGF5LTMge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBkaXNwbGF5LTMpO1xuICAgIG1hcmdpbjogMCAwIDY0cHg7XG4gIH1cblxuICAubWF0LWRpc3BsYXktMiwgI3skc2VsZWN0b3J9IC5tYXQtZGlzcGxheS0yIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgZGlzcGxheS0yKTtcbiAgICBtYXJnaW46IDAgMCA2NHB4O1xuICB9XG5cbiAgLm1hdC1kaXNwbGF5LTEsICN7JHNlbGVjdG9yfSAubWF0LWRpc3BsYXktMSB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGRpc3BsYXktMSk7XG4gICAgbWFyZ2luOiAwIDAgNjRweDtcbiAgfVxufVxuXG5cblxuXG5AbWl4aW4gbWF0LWF1dG9jb21wbGV0ZS10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcblxuICAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oNCwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gICAgLy8gU2VsZWN0ZWQgb3B0aW9ucyBpbiBhdXRvY29tcGxldGVzIHNob3VsZCBub3QgYmUgZ3JheSwgYnV0IHdlXG4gICAgLy8gb25seSB3YW50IHRvIG92ZXJyaWRlIHRoZSBiYWNrZ3JvdW5kIGZvciBzZWxlY3RlZCBvcHRpb25zIGlmXG4gICAgLy8gdGhleSBhcmUgKm5vdCogaW4gaG92ZXIgb3IgZm9jdXMgc3RhdGUuIFRoaXMgY2hhbmdlIGhhcyB0byBiZVxuICAgIC8vIG1hZGUgaGVyZSBiZWNhdXNlIGJhc2Ugb3B0aW9uIHN0eWxlcyBhcmUgc2hhcmVkIGJldHdlZW4gdGhlXG4gICAgLy8gYXV0b2NvbXBsZXRlIGFuZCB0aGUgc2VsZWN0LlxuICAgIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1hY3RpdmUpOm5vdCg6aG92ZXIpIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG5cbiAgICAgICY6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSB7XG4gICAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG5cbkBtaXhpbiBtYXQtYXV0b2NvbXBsZXRlLXR5cG9ncmFwaHkoJGNvbmZpZykgeyB9XG5cbi8vIFRoaXMgY29udGFpbnMgYWxsIG9mIHRoZSBzdHlsZXMgZm9yIHRoZSBiYWRnZVxuLy8gcmF0aGVyIHRoYW4ganVzdCB0aGUgY29sb3IvdGhlbWUgYmVjYXVzZSBvZlxuLy8gbm8gc3R5bGUgc2hlZXQgc3VwcG9ydCBmb3IgZGlyZWN0aXZlcy5cblxuXG5cblxuXG4kbWF0LWJhZGdlLWZvbnQtc2l6ZTogMTJweDtcbiRtYXQtYmFkZ2UtZm9udC13ZWlnaHQ6IDYwMDtcbiRtYXQtYmFkZ2UtZGVmYXVsdC1zaXplOiAyMnB4ICFkZWZhdWx0O1xuJG1hdC1iYWRnZS1zbWFsbC1zaXplOiAkbWF0LWJhZGdlLWRlZmF1bHQtc2l6ZSAtIDY7XG4kbWF0LWJhZGdlLWxhcmdlLXNpemU6ICRtYXQtYmFkZ2UtZGVmYXVsdC1zaXplICsgNjtcblxuLy8gTWl4aW4gZm9yIGJ1aWxkaW5nIG9mZnNldCBnaXZlbiBkaWZmZXJlbnQgc2l6ZXNcbkBtaXhpbiBfbWF0LWJhZGdlLXNpemUoJHNpemUpIHtcbiAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICB3aWR0aDogJHNpemU7XG4gICAgaGVpZ2h0OiAkc2l6ZTtcbiAgICBsaW5lLWhlaWdodDogJHNpemU7XG4gIH1cblxuICAmLm1hdC1iYWRnZS1hYm92ZSB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIHRvcDogLSRzaXplIC8gMjtcbiAgICB9XG4gIH1cblxuICAmLm1hdC1iYWRnZS1iZWxvdyB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIGJvdHRvbTogLSRzaXplIC8gMjtcbiAgICB9XG4gIH1cblxuICAmLm1hdC1iYWRnZS1iZWZvcmUge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICBsZWZ0OiAtJHNpemU7XG4gICAgfVxuICB9XG5cbiAgW2Rpcj0ncnRsJ10gJi5tYXQtYmFkZ2UtYmVmb3JlIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgbGVmdDogYXV0bztcbiAgICAgIHJpZ2h0OiAtJHNpemU7XG4gICAgfVxuICB9XG5cbiAgJi5tYXQtYmFkZ2UtYWZ0ZXIge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICByaWdodDogLSRzaXplO1xuICAgIH1cbiAgfVxuXG4gIFtkaXI9J3J0bCddICYubWF0LWJhZGdlLWFmdGVyIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgcmlnaHQ6IGF1dG87XG4gICAgICBsZWZ0OiAtJHNpemU7XG4gICAgfVxuICB9XG5cbiAgJi5tYXQtYmFkZ2Utb3ZlcmxhcCB7XG4gICAgJi5tYXQtYmFkZ2UtYmVmb3JlIHtcbiAgICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICAgIGxlZnQ6IC0kc2l6ZSAvIDI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgW2Rpcj0ncnRsJ10gJi5tYXQtYmFkZ2UtYmVmb3JlIHtcbiAgICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICAgIGxlZnQ6IGF1dG87XG4gICAgICAgIHJpZ2h0OiAtJHNpemUgLyAyO1xuICAgICAgfVxuICAgIH1cblxuICAgICYubWF0LWJhZGdlLWFmdGVyIHtcbiAgICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICAgIHJpZ2h0OiAtJHNpemUgLyAyO1xuICAgICAgfVxuICAgIH1cblxuICAgIFtkaXI9J3J0bCddICYubWF0LWJhZGdlLWFmdGVyIHtcbiAgICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgICBsZWZ0OiAtJHNpemUgLyAyO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWJhZGdlLXRoZW1lKCR0aGVtZSkge1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIGRlZmF1bHQtY29udHJhc3QpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG5cbiAgICBAaW5jbHVkZSBjZGstaGlnaC1jb250cmFzdChhY3RpdmUsIG9mZikge1xuICAgICAgb3V0bGluZTogc29saWQgMXB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICB9XG4gIH1cblxuICAubWF0LWJhZGdlLWFjY2VudCB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYWNjZW50KTtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgZGVmYXVsdC1jb250cmFzdCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1iYWRnZS13YXJuIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgZGVmYXVsdC1jb250cmFzdCk7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJHdhcm4pO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYmFkZ2Uge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxuXG4gIC5tYXQtYmFkZ2UtaGlkZGVuIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJhZGdlLWRpc2FibGVkIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgJGFwcC1iYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdiYWNrZ3JvdW5kJyk7XG4gICAgICAkYmFkZ2UtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtYnV0dG9uKTtcblxuICAgICAgLy8gVGhlIGRpc2FibGVkIGNvbG9yIHVzdWFsbHkgaGFzIHNvbWUga2luZCBvZiBvcGFjaXR5LCBidXQgYmVjYXVzZSB0aGUgYmFkZ2UgaXMgb3ZlcmxheWVkXG4gICAgICAvLyBvbiB0b3Agb2Ygc29tZXRoaW5nIGVsc2UsIGl0IHdvbid0IGxvb2sgZ29vZCBpZiBpdCdzIG9wYXF1ZS4gSWYgaXQgaXMgYSBjb2xvciAqdHlwZSosXG4gICAgICAvLyB3ZSBjb252ZXJ0IGl0IGludG8gYSBzb2xpZCBjb2xvciBieSB0YWtpbmcgdGhlIG9wYWNpdHkgZnJvbSB0aGUgcmdiYSB2YWx1ZSBhbmQgdXNpbmdcbiAgICAgIC8vIHRoZSB2YWx1ZSB0byBkZXRlcm1pbmUgdGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIGJhY2tncm91bmQgdG8gcHV0IGludG8gZm9yZWdyb3VuZCB3aGVuXG4gICAgICAvLyBtaXhpbmcgdGhlIGNvbG9ycyB0b2dldGhlci5cbiAgICAgIEBpZiAodHlwZS1vZigkYmFkZ2UtY29sb3IpID09IGNvbG9yIGFuZCB0eXBlLW9mKCRhcHAtYmFja2dyb3VuZCkgPT0gY29sb3IpIHtcbiAgICAgICAgJGJhZGdlLW9wYWNpdHk6IG9wYWNpdHkoJGJhZGdlLWNvbG9yKTtcbiAgICAgICAgYmFja2dyb3VuZDogbWl4KCRhcHAtYmFja2dyb3VuZCwgcmdiYSgkYmFkZ2UtY29sb3IsIDEpLCAoMSAtICRiYWRnZS1vcGFjaXR5KSAqIDEwMCUpO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkYmFkZ2UtY29sb3I7XG4gICAgICB9XG5cbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyMDBtcyBlYXNlLWluLW91dDtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNik7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG5cbiAgLm5nLWFuaW1hdGUtZGlzYWJsZWQgLm1hdC1iYWRnZS1jb250ZW50LFxuICAubWF0LWJhZGdlLWNvbnRlbnQuX21hdC1hbmltYXRpb24tbm9vcGFibGUge1xuICAgIHRyYW5zaXRpb246IG5vbmU7XG4gIH1cblxuICAvLyBUaGUgYWN0aXZlIGNsYXNzIGlzIGFkZGVkIGFmdGVyIHRoZSBlbGVtZW50IGlzIGFkZGVkXG4gIC8vIHNvIGl0IGNhbiBhbmltYXRlIHNjYWxlIHRvIGRlZmF1bHRcbiAgLm1hdC1iYWRnZS1jb250ZW50Lm1hdC1iYWRnZS1hY3RpdmUge1xuICAgIC8vIFNjYWxlIHRvIGBub25lYCBpbnN0ZWFkIG9mIGAxYCB0byBhdm9pZCBibHVycnkgdGV4dCBpbiBzb21lIGJyb3dzZXJzLlxuICAgIHRyYW5zZm9ybTogbm9uZTtcbiAgfVxuXG4gIC5tYXQtYmFkZ2Utc21hbGwge1xuICAgIEBpbmNsdWRlIF9tYXQtYmFkZ2Utc2l6ZSgkbWF0LWJhZGdlLXNtYWxsLXNpemUpO1xuICB9XG4gIC5tYXQtYmFkZ2UtbWVkaXVtIHtcbiAgICBAaW5jbHVkZSBfbWF0LWJhZGdlLXNpemUoJG1hdC1iYWRnZS1kZWZhdWx0LXNpemUpO1xuICB9XG4gIC5tYXQtYmFkZ2UtbGFyZ2Uge1xuICAgIEBpbmNsdWRlIF9tYXQtYmFkZ2Utc2l6ZSgkbWF0LWJhZGdlLWxhcmdlLXNpemUpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtYmFkZ2UtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgZm9udC13ZWlnaHQ6ICRtYXQtYmFkZ2UtZm9udC13ZWlnaHQ7XG4gICAgZm9udC1zaXplOiAkbWF0LWJhZGdlLWZvbnQtc2l6ZTtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC1iYWRnZS1zbWFsbCAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgIC8vIFNldCB0aGUgZm9udCBzaXplIHRvIDc1JSBvZiB0aGUgb3JpZ2luYWwuXG4gICAgZm9udC1zaXplOiAkbWF0LWJhZGdlLWZvbnQtc2l6ZSAqIDAuNzU7XG4gIH1cblxuICAubWF0LWJhZGdlLWxhcmdlIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgZm9udC1zaXplOiAkbWF0LWJhZGdlLWZvbnQtc2l6ZSAqIDI7XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LWJvdHRvbS1zaGVldC10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXIge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDE2LCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZGlhbG9nKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWJvdHRvbS1zaGVldC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgYm9keS0xKTtcbiAgfVxufVxuXG5cblxuXG5cbiRfbWF0LWJ1dHRvbi1yaXBwbGUtb3BhY2l0eTogMC4xO1xuXG4vLyBBcHBsaWVzIGEgZm9jdXMgc3R5bGUgdG8gYW4gbWF0LWJ1dHRvbiBlbGVtZW50IGZvciBlYWNoIG9mIHRoZSBzdXBwb3J0ZWQgcGFsZXR0ZXMuXG5AbWl4aW4gX21hdC1idXR0b24tZm9jdXMtb3ZlcmxheS1jb2xvcigkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG5cbiAgJi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnkpO1xuICB9XG5cbiAgJi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYWNjZW50KTtcbiAgfVxuXG4gICYubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCR3YXJuKTtcbiAgfVxuXG4gICZbZGlzYWJsZWRdIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG59XG5cbi8vIEFwcGxpZXMgdGhlIGJhY2tncm91bmQgY29sb3IgZm9yIGEgcmlwcGxlLiBJZiB0aGUgdmFsdWUgcHJvdmlkZWQgaXMgbm90IGEgU2FzcyBjb2xvcixcbi8vIHdlIGFzc3VtZSB0aGF0IHdlJ3ZlIGJlZW4gZ2l2ZW4gYSBDU1MgdmFyaWFibGUuIFNpbmNlIHdlIGNhbid0IHBlcmZvcm0gYWxwaGEtYmxlbmRpbmdcbi8vIG9uIGEgQ1NTIHZhcmlhYmxlLCB3ZSBpbnN0ZWFkIGFkZCB0aGUgb3BhY2l0eSBkaXJlY3RseSB0byB0aGUgcmlwcGxlIGVsZW1lbnQuXG5AbWl4aW4gX21hdC1idXR0b24tcmlwcGxlLWJhY2tncm91bmQoJHBhbGV0dGUsICRodWUsICRvcGFjaXR5KSB7XG4gICRiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsICRodWUsICRvcGFjaXR5KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY29sb3I7XG4gIEBpZiAodHlwZS1vZigkYmFja2dyb3VuZC1jb2xvcikgIT0gY29sb3IpIHtcbiAgICBvcGFjaXR5OiAkb3BhY2l0eTtcbiAgfVxufVxuXG5AbWl4aW4gX21hdC1idXR0b24tcmlwcGxlLWNvbG9yKCR0aGVtZSwgJGh1ZSwgJG9wYWNpdHk6ICRfbWF0LWJ1dHRvbi1yaXBwbGUtb3BhY2l0eSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcblxuICAmLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLXJpcHBsZS1iYWNrZ3JvdW5kKCRwcmltYXJ5LCAkaHVlLCAkb3BhY2l0eSk7XG4gIH1cblxuICAmLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tcmlwcGxlLWJhY2tncm91bmQoJGFjY2VudCwgJGh1ZSwgJG9wYWNpdHkpO1xuICB9XG5cbiAgJi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi1yaXBwbGUtYmFja2dyb3VuZCgkd2FybiwgJGh1ZSwgJG9wYWNpdHkpO1xuICB9XG59XG5cbi8vIEFwcGxpZXMgYSBwcm9wZXJ0eSB0byBhbiBtYXQtYnV0dG9uIGVsZW1lbnQgZm9yIGVhY2ggb2YgdGhlIHN1cHBvcnRlZCBwYWxldHRlcy5cbkBtaXhpbiBfbWF0LWJ1dHRvbi10aGVtZS1wcm9wZXJ0eSgkdGhlbWUsICRwcm9wZXJ0eSwgJGh1ZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAmLm1hdC1wcmltYXJ5IHtcbiAgICAjeyRwcm9wZXJ0eX06IG1hdC1jb2xvcigkcHJpbWFyeSwgJGh1ZSk7XG4gIH1cbiAgJi5tYXQtYWNjZW50IHtcbiAgICAjeyRwcm9wZXJ0eX06IG1hdC1jb2xvcigkYWNjZW50LCAkaHVlKTtcbiAgfVxuICAmLm1hdC13YXJuIHtcbiAgICAjeyRwcm9wZXJ0eX06IG1hdC1jb2xvcigkd2FybiwgJGh1ZSk7XG4gIH1cblxuICAmLm1hdC1wcmltYXJ5LCAmLm1hdC1hY2NlbnQsICYubWF0LXdhcm4sICZbZGlzYWJsZWRdIHtcbiAgICAmW2Rpc2FibGVkXSB7XG4gICAgICAkcGFsZXR0ZTogaWYoJHByb3BlcnR5ID09ICdjb2xvcicsICRmb3JlZ3JvdW5kLCAkYmFja2dyb3VuZCk7XG4gICAgICAjeyRwcm9wZXJ0eX06IG1hdC1jb2xvcigkcGFsZXR0ZSwgZGlzYWJsZWQtYnV0dG9uKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1idXR0b24tdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtYnV0dG9uLCAubWF0LWljb24tYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uIHtcbiAgICAvLyBCdXR0b25zIHdpdGhvdXQgYSBiYWNrZ3JvdW5kIGNvbG9yIHNob3VsZCBpbmhlcml0IHRoZSBmb250IGNvbG9yLiBUaGlzIGlzIG5lY2Vzc2FyeSB0b1xuICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBidXR0b24gaXMgcmVhZGFibGUgb24gY3VzdG9tIGJhY2tncm91bmQgY29sb3JzLiBJdCdzIHdyb25nIHRvIGFsd2F5cyBhc3N1bWVcbiAgICAvLyB0aGF0IHRob3NlIGJ1dHRvbnMgYXJlIGFsd2F5cyBwbGFjZWQgaW5zaWRlIG9mIGNvbnRhaW5lcnMgd2l0aCB0aGUgZGVmYXVsdCBiYWNrZ3JvdW5kXG4gICAgLy8gY29sb3Igb2YgdGhlIHRoZW1lIChlLmcuIHRoZW1lZCB0b29sYmFycykuXG4gICAgY29sb3I6IGluaGVyaXQ7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi10aGVtZS1wcm9wZXJ0eSgkdGhlbWUsICdjb2xvcicsIHRleHQpO1xuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXktY29sb3IoJHRoZW1lKTtcblxuICAgIC8vIFNldHVwIHRoZSByaXBwbGUgY29sb3IgdG8gYmUgYmFzZWQgb24gdGhlIHRleHQgY29sb3IuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSByaXBwbGVzXG4gICAgLy8gYXJlIG1hdGNoaW5nIHdpdGggdGhlIGN1cnJlbnQgdGhlbWUgcGFsZXR0ZSBhbmQgYXJlIGluIGNvbnRyYXN0IHRvIHRoZSBiYWNrZ3JvdW5kIGNvbG9yXG4gICAgLy8gKGUuZyBpbiB0aGVtZWQgdG9vbGJhcnMpLlxuICAgIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgICAgb3BhY2l0eTogJF9tYXQtYnV0dG9uLXJpcHBsZS1vcGFjaXR5O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkge1xuICAgIGJhY2tncm91bmQ6IG1hcF9nZXQoJGZvcmVncm91bmQsIGJhc2UpO1xuICB9XG5cbiAgLy8gTm90ZTogdGhpcyBuZWVkcyBhIGJpdCBleHRyYSBzcGVjaWZpY2l0eSwgYmVjYXVzZSB3ZSdyZSBub3QgZ3VhcmFudGVlZCB0aGUgaW5jbHVzaW9uXG4gIC8vIG9yZGVyIG9mIHRoZSB0aGVtZSBzdHlsZXMgYW5kIHRoZSBidXR0b24gcmVzZXQgbWF5IGVuZCB1cCByZXNldHRpbmcgdGhpcyBhcyB3ZWxsLlxuICAubWF0LXN0cm9rZWQtYnV0dG9uOm5vdChbZGlzYWJsZWRdKSB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG5cbiAgLm1hdC1mbGF0LWJ1dHRvbiwgLm1hdC1yYWlzZWQtYnV0dG9uLCAubWF0LWZhYiwgLm1hdC1taW5pLWZhYiB7XG4gICAgLy8gRGVmYXVsdCBmb250IGFuZCBiYWNrZ3JvdW5kIGNvbG9yIHdoZW4gbm90IHVzaW5nIGFueSBjb2xvciBwYWxldHRlLlxuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgcmFpc2VkLWJ1dHRvbik7XG5cbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi10aGVtZS1wcm9wZXJ0eSgkdGhlbWUsICdjb2xvcicsIGRlZmF1bHQtY29udHJhc3QpO1xuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLXRoZW1lLXByb3BlcnR5KCR0aGVtZSwgJ2JhY2tncm91bmQtY29sb3InLCBkZWZhdWx0KTtcbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi1yaXBwbGUtY29sb3IoJHRoZW1lLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgfVxuXG4gIC5tYXQtc3Ryb2tlZC1idXR0b24sIC5tYXQtZmxhdC1idXR0b24ge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDAsICR0aGVtZSk7XG4gIH1cblxuICAubWF0LXJhaXNlZC1idXR0b24ge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDIsICR0aGVtZSk7XG5cbiAgICAmOm5vdChbZGlzYWJsZWRdKTphY3RpdmUge1xuICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oOCwgJHRoZW1lKTtcbiAgICB9XG5cbiAgICAmW2Rpc2FibGVkXSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigwLCAkdGhlbWUpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZmFiLCAubWF0LW1pbmktZmFiIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbig2LCAkdGhlbWUpO1xuXG4gICAgJjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDEyLCAkdGhlbWUpO1xuICAgIH1cblxuICAgICZbZGlzYWJsZWRdIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDAsICR0aGVtZSk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtYnV0dG9uLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWJ1dHRvbiwgLm1hdC1yYWlzZWQtYnV0dG9uLCAubWF0LWljb24tYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLFxuICAubWF0LWZsYXQtYnV0dG9uLCAubWF0LWZhYiwgLm1hdC1taW5pLWZhYiB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgYnV0dG9uKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYnV0dG9uKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJ1dHRvbik7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LWJ1dHRvbi10b2dnbGUtdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRkaXZpZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLFxuICAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDIsICR0aGVtZSk7XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLFxuICAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCB7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaGludC10ZXh0KTtcblxuICAgIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZm9jdXNlZC1idXR0b24pO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuXG4gICAgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBmb2N1c2VkLWJ1dHRvbiwgMSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlICsgLm1hdC1idXR0b24tdG9nZ2xlIHtcbiAgICBib3JkZXItbGVmdDogc29saWQgMXB4ICRkaXZpZGVyLWNvbG9yO1xuICB9XG5cbiAgW2Rpcj0ncnRsJ10gLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlICsgLm1hdC1idXR0b24tdG9nZ2xlIHtcbiAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICBib3JkZXItcmlnaHQ6IHNvbGlkIDFweCAkZGl2aWRlci1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1idXR0b24tdG9nZ2xlLXZlcnRpY2FsIHtcbiAgICAubWF0LWJ1dHRvbi10b2dnbGUgKyAubWF0LWJ1dHRvbi10b2dnbGUge1xuICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gICAgICBib3JkZXItcmlnaHQ6IG5vbmU7XG4gICAgICBib3JkZXItdG9wOiBzb2xpZCAxcHggJGRpdmlkZXItY29sb3I7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgc2VsZWN0ZWQtYnV0dG9uKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG5cbiAgICAmLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC1idXR0b24pO1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZGlzYWJsZWQtYnV0dG9uLXRvZ2dsZSk7XG5cbiAgICAmLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgICB9XG5cbiAgICAmLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBzZWxlY3RlZC1kaXNhYmxlZC1idXR0b24pO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQsXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIHtcbiAgICBib3JkZXI6IHNvbGlkIDFweCAkZGl2aWRlci1jb2xvcjtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWJ1dHRvbi10b2dnbGUtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtYnV0dG9uLXRvZ2dsZSB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxufVxuXG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LWNhcmQtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1jYXJkIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigxLCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgICAvLyBOZWVkcyBleHRyYSBzcGVjaWZpY2l0eSB0byBiZSBhYmxlIHRvIG92ZXJyaWRlIHRoZSBlbGV2YXRpb24gc2VsZWN0b3JzLlxuICAgICYubWF0LWNhcmQtZmxhdCB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigwLCAkdGhlbWUpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtY2FyZC1zdWJ0aXRsZSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtY2FyZC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1jYXJkIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC1jYXJkLXRpdGxlIHtcbiAgICBmb250OiB7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGhlYWRsaW5lKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIHRpdGxlKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWNhcmQtaGVhZGVyIC5tYXQtY2FyZC10aXRsZSB7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIHRpdGxlKTtcbiAgfVxuXG4gIC5tYXQtY2FyZC1zdWJ0aXRsZSxcbiAgLm1hdC1jYXJkLWNvbnRlbnQge1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpO1xuICB9XG59XG5cblxuXG5cblxuQG1peGluIG1hdC1jaGVja2JveC10aGVtZSgkdGhlbWUpIHtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cblxuICAvLyBUaGUgY29sb3Igb2YgdGhlIGNoZWNrYm94J3MgY2hlY2ttYXJrIC8gbWl4ZWRtYXJrLlxuICAkY2hlY2tib3gtbWFyay1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kKTtcblxuICAvLyBOT1RFKHRyYXZpc2thdWZtYW4pOiBXaGlsZSB0aGUgc3BlYyBjYWxscyBmb3IgdHJhbnNsdWNlbnQgYmxhY2tzL3doaXRlcyBmb3IgZGlzYWJsZWQgY29sb3JzLFxuICAvLyB0aGlzIGRvZXMgbm90IHdvcmsgd2VsbCB3aXRoIGVsZW1lbnRzIGxheWVyZWQgb24gdG9wIG9mIG9uZSBhbm90aGVyLiBUbyBnZXQgYXJvdW5kIHRoaXMgd2VcbiAgLy8gYmxlbmQgdGhlIGNvbG9ycyB0b2dldGhlciBiYXNlZCBvbiB0aGUgYmFzZSBjb2xvciBhbmQgdGhlIHRoZW1lIGJhY2tncm91bmQuXG4gICR3aGl0ZS0zMHBjdC1vcGFjaXR5LW9uLWRhcms6ICM2ODY4Njg7XG4gICRibGFjay0yNnBjdC1vcGFjaXR5LW9uLWxpZ2h0OiAjYjBiMGIwO1xuICAkZGlzYWJsZWQtY29sb3I6IGlmKCRpcy1kYXJrLXRoZW1lLCAkd2hpdGUtMzBwY3Qtb3BhY2l0eS1vbi1kYXJrLCAkYmxhY2stMjZwY3Qtb3BhY2l0eS1vbi1saWdodCk7XG5cbiAgLm1hdC1jaGVja2JveC1mcmFtZSB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrIHtcbiAgICBmaWxsOiAkY2hlY2tib3gtbWFyay1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGgge1xuICAgIC8vICFpbXBvcnRhbnQgaXMgbmVlZGVkIGhlcmUgYmVjYXVzZSBhIHN0cm9rZSBtdXN0IGJlIHNldCBhcyBhblxuICAgIC8vIGF0dHJpYnV0ZSBvbiB0aGUgU1ZHIGluIG9yZGVyIGZvciBsaW5lIGFuaW1hdGlvbiB0byB3b3JrIHByb3Blcmx5LlxuICAgIHN0cm9rZTogJGNoZWNrYm94LW1hcmstY29sb3IgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5tYXQtY2hlY2tib3gtbWl4ZWRtYXJrIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY2hlY2tib3gtbWFyay1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSwgLm1hdC1jaGVja2JveC1jaGVja2VkIHtcbiAgICAmLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnkpO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkd2Fybik7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1jaGVja2JveC1kaXNhYmxlZCB7XG4gICAgJi5tYXQtY2hlY2tib3gtY2hlY2tlZCxcbiAgICAmLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIHtcbiAgICAgIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlZC1jb2xvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOm5vdCgubWF0LWNoZWNrYm94LWNoZWNrZWQpIHtcbiAgICAgIC5tYXQtY2hlY2tib3gtZnJhbWUge1xuICAgICAgICBib3JkZXItY29sb3I6ICRkaXNhYmxlZC1jb2xvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgICB9XG4gIH1cblxuICAvLyBTd2l0Y2ggdGhpcyB0byBhIHNvbGlkIGNvbG9yIHNpbmNlIHdlJ3JlIHVzaW5nIGBvcGFjaXR5YFxuICAvLyB0byBjb250cm9sIGhvdyBvcGFxdWUgdGhlIHJpcHBsZSBzaG91bGQgYmUuXG4gIC5tYXQtY2hlY2tib3ggLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWFwX2dldChtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCksIGJhc2UpO1xuICB9XG5cbiAgLm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKSxcbiAgLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpIHtcbiAgICAmLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRwcmltYXJ5KTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGFjY2VudCk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkd2Fybik7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtY2hlY2tib3gtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtY2hlY2tib3gge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAvLyBUT0RPKGthcmEpOiBSZW1vdmUgdGhpcyBzdHlsZSB3aGVuIGZpeGluZyB2ZXJ0aWNhbCBiYXNlbGluZVxuICAubWF0LWNoZWNrYm94LWxheW91dCAubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgICBsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGJvZHktMik7XG4gIH1cbn1cblxuXG5cblxuXG5cbiRtYXQtY2hpcC1yZW1vdmUtZm9udC1zaXplOiAxOHB4O1xuXG5AbWl4aW4gbWF0LWNoaXBzLWNvbG9yKCRmb3JlZ3JvdW5kLCAkYmFja2dyb3VuZCkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZDtcbiAgY29sb3I6ICRmb3JlZ3JvdW5kO1xuXG4gIC5tYXQtY2hpcC1yZW1vdmUge1xuICAgIGNvbG9yOiAkZm9yZWdyb3VuZDtcbiAgICBvcGFjaXR5OiAwLjQ7XG4gIH1cbn1cblxuXG4vLyBBcHBsaWVzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGZvciBhIHJpcHBsZSBlbGVtZW50LlxuLy8gSWYgdGhlIGNvbG9yIHZhbHVlIHByb3ZpZGVkIGlzIG5vdCBhIFNhc3MgY29sb3IsXG4vLyB3ZSBhc3N1bWUgdGhhdCB3ZSd2ZSBiZWVuIGdpdmVuIGEgQ1NTIHZhcmlhYmxlLlxuLy8gU2luY2Ugd2UgY2FuJ3QgcGVyZm9ybSBhbHBoYS1ibGVuZGluZyBvbiBhIENTUyB2YXJpYWJsZSxcbi8vIHdlIGluc3RlYWQgYWRkIHRoZSBvcGFjaXR5IGRpcmVjdGx5IHRvIHRoZSByaXBwbGUgZWxlbWVudC5cbkBtaXhpbiBfbWF0LWNoaXBzLXJpcHBsZS1iYWNrZ3JvdW5kKCRwYWxldHRlLCAkZGVmYXVsdC1jb250cmFzdCwgJG9wYWNpdHkpIHtcbiAgJGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgJGRlZmF1bHQtY29udHJhc3QsICRvcGFjaXR5KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY29sb3I7XG4gIEBpZiAodHlwZS1vZigkYmFja2dyb3VuZC1jb2xvcikgIT0gY29sb3IpIHtcbiAgICBvcGFjaXR5OiAkb3BhY2l0eTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWNoaXBzLXRoZW1lLWNvbG9yKCRwYWxldHRlKSB7XG4gIEBpbmNsdWRlIG1hdC1jaGlwcy1jb2xvcihtYXQtY29sb3IoJHBhbGV0dGUsIGRlZmF1bHQtY29udHJhc3QpLCBtYXQtY29sb3IoJHBhbGV0dGUpKTtcblxuICAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgIEBpbmNsdWRlIF9tYXQtY2hpcHMtcmlwcGxlLWJhY2tncm91bmQoJHBhbGV0dGUsIGRlZmF1bHQtY29udHJhc3QsIDAuMSk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1jaGlwcy10aGVtZSgkdGhlbWUpIHtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgJHVuc2VsZWN0ZWQtYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCB1bnNlbGVjdGVkLWNoaXApO1xuICAkdW5zZWxlY3RlZC1mb3JlZ3JvdW5kOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcCB7XG4gICAgQGluY2x1ZGUgbWF0LWNoaXBzLWNvbG9yKCR1bnNlbGVjdGVkLWZvcmVncm91bmQsICR1bnNlbGVjdGVkLWJhY2tncm91bmQpO1xuXG4gICAgJjpub3QoLm1hdC1jaGlwLWRpc2FibGVkKSB7XG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDMsICR0aGVtZSk7XG4gICAgICB9XG5cbiAgICAgIC5tYXQtY2hpcC1yZW1vdmU6aG92ZXIge1xuICAgICAgICBvcGFjaXR5OiAwLjU0O1xuICAgICAgfVxuICAgIH1cblxuICAgICYubWF0LWNoaXAtZGlzYWJsZWQge1xuICAgICAgb3BhY2l0eTogMC40O1xuICAgIH1cblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hcF9nZXQoJGZvcmVncm91bmQsIGJhc2UpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZCB7XG4gICAgJi5tYXQtcHJpbWFyeSB7XG4gICAgICBAaW5jbHVkZSBtYXQtY2hpcHMtdGhlbWUtY29sb3IoJHByaW1hcnkpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgQGluY2x1ZGUgbWF0LWNoaXBzLXRoZW1lLWNvbG9yKCR3YXJuKTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgQGluY2x1ZGUgbWF0LWNoaXBzLXRoZW1lLWNvbG9yKCRhY2NlbnQpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWNoaXBzLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWNoaXAge1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTIpO1xuICAgIGZvbnQtd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0yKTtcblxuICAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uLFxuICAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb24ge1xuICAgICAgZm9udC1zaXplOiAkbWF0LWNoaXAtcmVtb3ZlLWZvbnQtc2l6ZTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LXRhYmxlLXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtdGFibGUge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2NhcmQnKTtcbiAgfVxuXG4gIC5tYXQtdGFibGUgdGhlYWQsIC5tYXQtdGFibGUgdGJvZHksIC5tYXQtdGFibGUgdGZvb3QsXG4gIG1hdC1oZWFkZXItcm93LCBtYXQtcm93LCBtYXQtZm9vdGVyLXJvdyxcbiAgW21hdC1oZWFkZXItcm93XSwgW21hdC1yb3ddLCBbbWF0LWZvb3Rlci1yb3ddLFxuICAubWF0LXRhYmxlLXN0aWNreSB7XG4gICAgYmFja2dyb3VuZDogaW5oZXJpdDtcbiAgfVxuXG4gIG1hdC1yb3csIG1hdC1oZWFkZXItcm93LCBtYXQtZm9vdGVyLXJvdyxcbiAgdGgubWF0LWhlYWRlci1jZWxsLCB0ZC5tYXQtY2VsbCwgdGQubWF0LWZvb3Rlci1jZWxsIHtcbiAgICBib3JkZXItYm90dG9tLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG5cbiAgLm1hdC1oZWFkZXItY2VsbCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1jZWxsLCAubWF0LWZvb3Rlci1jZWxsIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXRhYmxlLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXRhYmxlIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC1oZWFkZXItY2VsbCB7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pO1xuICAgIGZvbnQtd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0yKTtcbiAgfVxuXG4gIC5tYXQtY2VsbCwgLm1hdC1mb290ZXItY2VsbCB7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSk7XG4gIH1cbn1cblxuXG5cblxuXG5cblxuJG1hdC1kYXRlcGlja2VyLXNlbGVjdGVkLXRvZGF5LWJveC1zaGFkb3ctd2lkdGg6IDFweDtcbiRtYXQtZGF0ZXBpY2tlci1zZWxlY3RlZC1mYWRlLWFtb3VudDogMC42O1xuJG1hdC1kYXRlcGlja2VyLXRvZGF5LWZhZGUtYW1vdW50OiAwLjI7XG4kbWF0LWNhbGVuZGFyLWJvZHktZm9udC1zaXplOiAxM3B4ICFkZWZhdWx0O1xuJG1hdC1jYWxlbmRhci13ZWVrZGF5LXRhYmxlLWZvbnQtc2l6ZTogMTFweCAhZGVmYXVsdDtcblxuQG1peGluIF9tYXQtZGF0ZXBpY2tlci1jb2xvcigkcGFsZXR0ZSkge1xuICAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgZGVmYXVsdC1jb250cmFzdCk7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQgPiAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQge1xuICAgICRiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJHBhbGV0dGUpO1xuXG4gICAgQGlmICh0eXBlLW9mKCRiYWNrZ3JvdW5kKSA9PSBjb2xvcikge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogZmFkZS1vdXQoJGJhY2tncm91bmQsICRtYXQtZGF0ZXBpY2tlci1zZWxlY3RlZC1mYWRlLWFtb3VudCk7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIC8vIElmIHdlIGNvdWxkbid0IHJlc29sdmUgdG8gYmFja2dyb3VuZCB0byBhIGNvbG9yIChlLmcuIGl0J3MgYSBDU1MgdmFyaWFibGUpLFxuICAgICAgLy8gZmFsbCBiYWNrIHRvIGZhZGluZyB0aGUgY29udGVudCBvdXQgdmlhIGBvcGFjaXR5YC5cbiAgICAgIG9wYWNpdHk6ICRtYXQtZGF0ZXBpY2tlci10b2RheS1mYWRlLWFtb3VudDtcbiAgICB9XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQge1xuICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwICRtYXQtZGF0ZXBpY2tlci1zZWxlY3RlZC10b2RheS1ib3gtc2hhZG93LXdpZHRoXG4gICAgICAgICAgICAgICAgbWF0LWNvbG9yKCRwYWxldHRlLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWRhdGVwaWNrZXItdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG5cbiAgLm1hdC1jYWxlbmRhci1hcnJvdyB7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBpY29uKTtcbiAgfVxuXG4gIC8vIFRoZSBwcmV2L25leHQgYnV0dG9ucyBuZWVkIGEgYml0IG1vcmUgc3BlY2lmaWNpdHkgdG9cbiAgLy8gYXZvaWQgYmVpbmcgb3ZlcndyaXR0ZW4gYnkgdGhlIC5tYXQtaWNvbi1idXR0b24uXG4gIC5tYXQtZGF0ZXBpY2tlci10b2dnbGUsXG4gIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItbmV4dC1idXR0b24sXG4gIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItcHJldmlvdXMtYnV0dG9uIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBpY29uKTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBoaW50LXRleHQpO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXItZGl2aWRlcjo6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktbGFiZWwge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQgPiAubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyLFxuICAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZSxcbiAgLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZSB7XG4gICAgJiA+IC5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3Zlcik7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpIHtcbiAgICAvLyBOb3RlOiB0aG91Z2ggaXQncyBub3QgdGV4dCwgdGhlIGJvcmRlciBpcyBhIGhpbnQgYWJvdXQgdGhlIGZhY3QgdGhhdCB0aGlzIGlzIHRvZGF5J3MgZGF0ZSxcbiAgICAvLyBzbyB3ZSB1c2UgdGhlIGhpbnQgY29sb3IuXG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGhpbnQtdGV4dCk7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQgPiAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCkge1xuICAgICRjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBoaW50LXRleHQpO1xuXG4gICAgQGlmICh0eXBlLW9mKCRjb2xvcikgPT0gY29sb3IpIHtcbiAgICAgIGJvcmRlci1jb2xvcjogZmFkZS1vdXQoJGNvbG9yLCAkbWF0LWRhdGVwaWNrZXItdG9kYXktZmFkZS1hbW91bnQpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICAvLyBJZiB0aGUgY29sb3IgZGlkbid0IHJlc29sdmUgdG8gYSBjb2xvciB2YWx1ZSwgYnV0IHNvbWV0aGluZyBsaWtlIGEgQ1NTIHZhcmlhYmxlLCB3ZSBjYW4ndFxuICAgICAgLy8gZmFkZSBpdCBvdXQgc28gd2UgZmFsbCBiYWNrIHRvIHJlZHVjaW5nIHRoZSBlbGVtZW50IG9wYWNpdHkuIE5vdGUgdGhhdCB3ZSBkb24ndCB1c2UgdGhlXG4gICAgICAvLyAkbWF0LWRhdGVwaWNrZXItdG9kYXktZmFkZS1hbW91bnQsIGJlY2F1c2UgaGludCB0ZXh0IHVzdWFsbHkgaGFzIHNvbWUgb3BhY2l0eSBhcHBsaWVkXG4gICAgICAvLyB0byBpdCBhbHJlYWR5IGFuZCB3ZSBkb24ndCB3YW50IHRoZW0gdG8gc3RhY2sgb24gdG9wIG9mIGVhY2ggb3RoZXIuXG4gICAgICBvcGFjaXR5OiAwLjU7XG4gICAgfVxuICB9XG5cbiAgQGluY2x1ZGUgX21hdC1kYXRlcGlja2VyLWNvbG9yKG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KSk7XG5cbiAgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDQsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICBAaW5jbHVkZSBfbWF0LWRhdGVwaWNrZXItY29sb3IobWFwLWdldCgkdGhlbWUsIGFjY2VudCkpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgQGluY2x1ZGUgX21hdC1kYXRlcGlja2VyLWNvbG9yKG1hcC1nZXQoJHRoZW1lLCB3YXJuKSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQtdG91Y2gge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDAsICR0aGVtZSk7XG4gIH1cblxuICAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSksIHRleHQpO1xuXG4gICAgJi5tYXQtYWNjZW50IHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IobWFwLWdldCgkdGhlbWUsIGFjY2VudCksIHRleHQpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgd2FybiksIHRleHQpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWRhdGVwaWNrZXItdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtY2FsZW5kYXIge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHkge1xuICAgIGZvbnQtc2l6ZTogJG1hdC1jYWxlbmRhci1ib2R5LWZvbnQtc2l6ZTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS1sYWJlbCxcbiAgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uIHtcbiAgICBmb250OiB7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJ1dHRvbik7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBidXR0b24pO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyIHRoIHtcbiAgICBmb250OiB7XG4gICAgICBzaXplOiAkbWF0LWNhbGVuZGFyLXdlZWtkYXktdGFibGUtZm9udC1zaXplO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0xKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cblxuQG1peGluIG1hdC1kaWFsb2ctdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigyNCwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGRpYWxvZyk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1kaWFsb2ctdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtZGlhbG9nLXRpdGxlIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgdGl0bGUpO1xuICB9XG59XG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LWV4cGFuc2lvbi1wYW5lbC10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWV4cGFuc2lvbi1wYW5lbCB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMiwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG5cbiAgLm1hdC1hY3Rpb24tcm93IHtcbiAgICBib3JkZXItdG9wLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG5cbiAgLm1hdC1leHBhbnNpb24tcGFuZWwge1xuICAgICYgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkLFxuICAgICYgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQsXG4gICAgJjpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVyIHtcbiAgICAgICY6bm90KFthcmlhLWRpc2FibGVkPSd0cnVlJ10pIHtcbiAgICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3Zlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRGlzYWJsZSB0aGUgaG92ZXIgb24gdG91Y2ggZGV2aWNlcyBzaW5jZSBpdCBjYW4gYXBwZWFyIGxpa2UgaXQgaXMgc3R1Y2suIFdlIGNhbid0IHVzZVxuICAvLyBgQG1lZGlhIChob3ZlcilgIGFib3ZlLCBiZWNhdXNlIHRoZSBkZXNrdG9wIHN1cHBvcnQgYnJvd3NlciBzdXBwb3J0IGlzbid0IGdyZWF0LlxuICBAbWVkaWEgKGhvdmVyOiBub25lKSB7XG4gICAgLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpOm5vdChbYXJpYS1kaXNhYmxlZD0ndHJ1ZSddKVxuICAgICAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbixcbiAgLm1hdC1leHBhbnNpb24taW5kaWNhdG9yOjphZnRlciB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9J3RydWUnXSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtYnV0dG9uKTtcblxuICAgIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZSxcbiAgICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ge1xuICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtZXhwYW5zaW9uLXBhbmVsLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIHN1YmhlYWRpbmctMSk7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIHN1YmhlYWRpbmctMSk7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBzdWJoZWFkaW5nLTEpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBib2R5LTEpO1xuICB9XG59XG5cblxuXG5cbi8vIFRoaXMgbWl4aW4gd2lsbCBlbnN1cmUgdGhhdCBsaW5lcyB0aGF0IG92ZXJmbG93IHRoZSBjb250YWluZXIgd2lsbCBoaWRlIHRoZSBvdmVyZmxvdyBhbmRcbi8vIHRydW5jYXRlIG5lYXRseSB3aXRoIGFuIGVsbGlwc2lzLlxuQG1peGluIG1hdC10cnVuY2F0ZS1saW5lKCkge1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuLy8gTWl4aW4gdG8gcHJvdmlkZSBhbGwgbWF0LWxpbmUgc3R5bGVzLCBjaGFuZ2luZyBzZWNvbmRhcnkgZm9udCBzaXplIGJhc2VkIG9uIHdoZXRoZXIgdGhlIGxpc3Rcbi8vIGlzIGluIGRlbnNlIG1vZGUuXG5AbWl4aW4gbWF0LWxpbmUtYmFzZSgkc2Vjb25kYXJ5LWZvbnQtc2l6ZSkge1xuICAubWF0LWxpbmUge1xuICAgIEBpbmNsdWRlIG1hdC10cnVuY2F0ZS1saW5lKCk7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcblxuICAgIC8vIGFsbCBsaW5lcyBidXQgdGhlIHRvcCBsaW5lIHNob3VsZCBoYXZlIHNtYWxsZXIgdGV4dFxuICAgICY6bnRoLWNoaWxkKG4rMikge1xuICAgICAgZm9udC1zaXplOiAkc2Vjb25kYXJ5LWZvbnQtc2l6ZTtcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhpcyBtaXhpbiBub3JtYWxpemVzIGRlZmF1bHQgZWxlbWVudCBzdHlsZXMsIGUuZy4gZm9udCB3ZWlnaHQgZm9yIGhlYWRpbmcgdGV4dC5cbkBtaXhpbiBtYXQtbm9ybWFsaXplLXRleHQoKSB7XG4gICYgPiAqIHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgfVxufVxuXG4vLyBUaGlzIG1peGluIHByb3ZpZGVzIGJhc2Ugc3R5bGVzIGZvciB0aGUgd3JhcHBlciBhcm91bmQgbWF0LWxpbmUgZWxlbWVudHMgaW4gYSBsaXN0LlxuQG1peGluIG1hdC1saW5lLXdyYXBwZXItYmFzZSgpIHtcbiAgQGluY2x1ZGUgbWF0LW5vcm1hbGl6ZS10ZXh0KCk7XG5cbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6IDEwMCU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgLy8gTXVzdCByZW1vdmUgd3JhcHBlciB3aGVuIGxpbmVzIGFyZSBlbXB0eSBvciBpdCB0YWtlcyB1cCBob3Jpem9udGFsXG4gIC8vIHNwYWNlIGFuZCBwdXNoZXMgb3RoZXIgZWxlbWVudHMgdG8gdGhlIHJpZ2h0LlxuICAmOmVtcHR5IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cblxuXG4vLyBJbmNsdWRlIHRoaXMgZW1wdHkgbWl4aW4gZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIG90aGVyIGNvbXBvbmVudHMuXG5AbWl4aW4gbWF0LWdyaWQtbGlzdC10aGVtZSgkdGhlbWUpIHsgfVxuXG5AbWl4aW4gbWF0LWdyaWQtbGlzdC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1ncmlkLXRpbGUtaGVhZGVyLFxuICAubWF0LWdyaWQtdGlsZS1mb290ZXIge1xuICAgIEBpbmNsdWRlIG1hdC1saW5lLWJhc2UobWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKSk7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSk7XG4gIH1cbn1cblxuXG5cblxuLy8gSW5jbHVkZSB0aGlzIGVtcHR5IG1peGluIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBvdGhlciBjb21wb25lbnRzLlxuQG1peGluIG1hdC1pY29uLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWljb24ge1xuICAgICYubWF0LXByaW1hcnkge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgdGV4dCk7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgdGV4dCk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1pY29uLXR5cG9ncmFwaHkoJGNvbmZpZykgeyB9XG5cblxuXG5cblxuLy8gUmVuZGVycyBhIGdyYWRpZW50IGZvciBzaG93aW5nIHRoZSBkYXNoZWQgbGluZSB3aGVuIHRoZSBpbnB1dCBpcyBkaXNhYmxlZC5cbi8vIFVubGlrZSB1c2luZyBhIGJvcmRlciwgYSBncmFkaWVudCBhbGxvd3MgdXMgdG8gYWRqdXN0IHRoZSBzcGFjaW5nIG9mIHRoZSBkb3R0ZWQgbGluZVxuLy8gdG8gbWF0Y2ggdGhlIE1hdGVyaWFsIERlc2lnbiBzcGVjLlxuQG1peGluIG1hdC1jb250cm9sLWRpc2FibGVkLXVuZGVybGluZSgkY29sb3IpIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAkY29sb3IgMCUsICRjb2xvciAzMyUsIHRyYW5zcGFyZW50IDAlKTtcbiAgYmFja2dyb3VuZC1zaXplOiA0cHggMTAwJTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14O1xufVxuXG4vLyBGaWd1cmVzIG91dCB0aGUgY29sb3Igb2YgdGhlIHBsYWNlaG9sZGVyIGZvciBhIGZvcm0gY29udHJvbC5cbi8vIFVzZWQgcHJpbWFyaWx5IHRvIHByZXZlbnQgdGhlIHZhcmlvdXMgZm9ybSBjb250cm9scyBmcm9tXG4vLyBiZWNvbWluZyBvdXQgb2Ygc3luYyBzaW5jZSB0aGVzZSBjb2xvcnMgYXJlbid0IGluIGEgcGFsZXR0ZS5cbkBmdW5jdGlvbiBfbWF0LWNvbnRyb2wtcGxhY2Vob2xkZXItY29sb3IoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG4gIEByZXR1cm4gbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCwgaWYoJGlzLWRhcmstdGhlbWUsIDAuNSwgMC40MikpO1xufVxuXG5cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1hdGVyaWFsL25vLXByZWZpeGVzICovXG5AbWl4aW4gdXNlci1zZWxlY3QoJHZhbHVlKSB7XG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6ICR2YWx1ZTtcbiAgLW1vei11c2VyLXNlbGVjdDogJHZhbHVlO1xuICAtbXMtdXNlci1zZWxlY3Q6ICR2YWx1ZTtcbiAgdXNlci1zZWxlY3Q6ICR2YWx1ZTtcbn1cblxuQG1peGluIGlucHV0LXBsYWNlaG9sZGVyIHtcbiAgJjo6cGxhY2Vob2xkZXIge1xuICAgIEBjb250ZW50O1xuICB9XG5cbiAgJjo6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cblxuICAmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBAY29udGVudDtcbiAgfVxuXG4gICY6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG5AbWl4aW4gY3Vyc29yLWdyYWIge1xuICBjdXJzb3I6IC13ZWJraXQtZ3JhYjtcbiAgY3Vyc29yOiBncmFiO1xufVxuXG5AbWl4aW4gY3Vyc29yLWdyYWJiaW5nIHtcbiAgY3Vyc29yOiAtd2Via2l0LWdyYWJiaW5nO1xuICBjdXJzb3I6IGdyYWJiaW5nO1xufVxuXG5AbWl4aW4gYmFja2ZhY2UtdmlzaWJpbGl0eSgkdmFsdWUpIHtcbiAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiAkdmFsdWU7XG4gIGJhY2tmYWNlLXZpc2liaWxpdHk6ICR2YWx1ZTtcbn1cbi8qIHN0eWxlbGludC1lbmFibGUgKi9cblxuXG5cbkBtaXhpbiBtYXQtaW5wdXQtdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXIge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtaW5wdXQtZWxlbWVudDpkaXNhYmxlZCxcbiAgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlciB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gIH1cblxuICAubWF0LWlucHV0LWVsZW1lbnQge1xuICAgIGNhcmV0LWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIHRleHQpO1xuXG4gICAgQGluY2x1ZGUgaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgICAgY29sb3I6IF9tYXQtY29udHJvbC1wbGFjZWhvbGRlci1jb2xvcigkdGhlbWUpO1xuICAgIH1cblxuICAgIC8vIE9uIGRhcmsgdGhlbWVzIHdlIHNldCB0aGUgbmF0aXZlIGBzZWxlY3RgIGNvbG9yIHRvIHNvbWUgc2hhZGUgb2Ygd2hpdGUsXG4gICAgLy8gaG93ZXZlciB0aGUgY29sb3IgcHJvcGFnYXRlcyB0byBhbGwgb2YgdGhlIGBvcHRpb25gIGVsZW1lbnRzLCB3aGljaCBhcmVcbiAgICAvLyBhbHdheXMgb24gYSB3aGl0ZSBiYWNrZ3JvdW5kIGluc2lkZSB0aGUgZHJvcGRvd24sIGNhdXNpbmcgdGhlbSB0byBibGVuZCBpbi5cbiAgICAvLyBTaW5jZSB3ZSBjYW4ndCBjaGFuZ2UgYmFja2dyb3VuZCBvZiB0aGUgZHJvcGRvd24sIHdlIG5lZWQgdG8gZXhwbGljaXRseVxuICAgIC8vIHJlc2V0IHRoZSBjb2xvciBvZiB0aGUgb3B0aW9ucyB0byBzb21ldGhpbmcgZGFyay5cbiAgICBAaWYgKG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKSkge1xuICAgICAgb3B0aW9uIHtcbiAgICAgICAgY29sb3I6ICRkYXJrLXByaW1hcnktdGV4dDtcbiAgICAgIH1cblxuICAgICAgb3B0aW9uOmRpc2FibGVkIHtcbiAgICAgICAgY29sb3I6ICRkYXJrLWRpc2FibGVkLXRleHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm1hdC1hY2NlbnQgLm1hdC1pbnB1dC1lbGVtZW50IHtcbiAgICBjYXJldC1jb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIHRleHQpO1xuICB9XG5cbiAgLm1hdC13YXJuIC5tYXQtaW5wdXQtZWxlbWVudCxcbiAgLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1pbnB1dC1lbGVtZW50IHtcbiAgICBjYXJldC1jb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlciB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1pbnB1dC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLy8gVGhlIHVuaXQtbGVzcyBsaW5lLWhlaWdodCBmcm9tIHRoZSBmb250IGNvbmZpZy5cbiAgJGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgaW5wdXQpO1xuXG4gIC8vIFRoZSBhbW91bnQgb2Ygc3BhY2UgYmV0d2VlbiB0aGUgdG9wIG9mIHRoZSBsaW5lIGFuZCB0aGUgdG9wIG9mIHRoZSBhY3R1YWwgdGV4dFxuICAvLyAoYXMgYSBmcmFjdGlvbiBvZiB0aGUgZm9udC1zaXplKS5cbiAgJGxpbmUtc3BhY2luZzogKCRsaW5lLWhlaWdodCAtIDEpIC8gMjtcblxuICAvLyA8aW5wdXQ+IGVsZW1lbnRzIHNlZW0gdG8gaGF2ZSB0aGVpciBoZWlnaHQgc2V0IHNsaWdodGx5IHRvbyBsYXJnZSBvbiBTYWZhcmkgY2F1c2luZyB0aGUgdGV4dCB0b1xuICAvLyBiZSBtaXNhbGlnbmVkIHcuci50LiB0aGUgcGxhY2Vob2xkZXIuIEFkZGluZyB0aGlzIG1hcmdpbiBjb3JyZWN0cyBpdC5cbiAgaW5wdXQubWF0LWlucHV0LWVsZW1lbnQge1xuICAgIG1hcmdpbi10b3A6IC0kbGluZS1zcGFjaW5nICogMWVtO1xuICB9XG59XG5cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtbGlzdC10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWxpc3QtYmFzZSB7XG4gICAgLm1hdC1saXN0LWl0ZW0ge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgfVxuXG4gICAgLm1hdC1saXN0LW9wdGlvbiB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICB9XG5cbiAgICAubWF0LXN1YmhlYWRlciB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1saXN0LWl0ZW0tZGlzYWJsZWQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZGlzYWJsZWQtbGlzdC1vcHRpb24pO1xuICB9XG5cbiAgLm1hdC1saXN0LW9wdGlvbixcbiAgLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSxcbiAgLm1hdC1hY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSB7XG4gICAgJjpob3ZlciwgJjpmb2N1cyB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdob3ZlcicpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtbGlzdC1zaW5nbGUtc2VsZWN0ZWQtb3B0aW9uIHtcbiAgICAmLCAmOmhvdmVyLCAmOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIsIDAuMTIpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWxpc3QtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gICRmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuXG4gIC5tYXQtbGlzdC1pdGVtIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5O1xuICB9XG5cbiAgLm1hdC1saXN0LW9wdGlvbiB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseTtcbiAgfVxuXG4gIC8vIERlZmF1bHQgbGlzdFxuICAubWF0LWxpc3QtYmFzZSB7XG4gICAgLm1hdC1saXN0LWl0ZW0ge1xuICAgICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIHN1YmhlYWRpbmctMik7XG4gICAgICBAaW5jbHVkZSBtYXQtbGluZS1iYXNlKG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKSk7XG4gICAgfVxuXG4gICAgLm1hdC1saXN0LW9wdGlvbiB7XG4gICAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgc3ViaGVhZGluZy0yKTtcbiAgICAgIEBpbmNsdWRlIG1hdC1saW5lLWJhc2UobWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpKTtcbiAgICB9XG5cbiAgICAubWF0LXN1YmhlYWRlciB7XG4gICAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGJvZHktMik7XG4gICAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0yKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0yKTtcbiAgICB9XG4gIH1cblxuICAvLyBEZW5zZSBsaXN0XG4gIC5tYXQtbGlzdC1iYXNlW2RlbnNlXSB7XG4gICAgLm1hdC1saXN0LWl0ZW0ge1xuICAgICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pO1xuICAgICAgQGluY2x1ZGUgbWF0LWxpbmUtYmFzZShtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pKTtcbiAgICB9XG5cbiAgICAubWF0LWxpc3Qtb3B0aW9uIHtcbiAgICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKTtcbiAgICAgIEBpbmNsdWRlIG1hdC1saW5lLWJhc2UobWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKSk7XG4gICAgfVxuXG4gICAgLm1hdC1zdWJoZWFkZXIge1xuICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseTtcbiAgICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0yKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cblxuQG1peGluIG1hdC1tZW51LXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtbWVudS1wYW5lbCB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oNCwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdjYXJkJyk7XG4gIH1cblxuICAubWF0LW1lbnUtaXRlbSB7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgJ3RleHQnKTtcblxuICAgICZbZGlzYWJsZWRdIHtcbiAgICAgICYsICY6OmFmdGVyIHtcbiAgICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgJ2Rpc2FibGVkJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm1hdC1tZW51LWl0ZW0gLm1hdC1pY29uLW5vLWNvbG9yLFxuICAubWF0LW1lbnUtaXRlbS1zdWJtZW51LXRyaWdnZXI6OmFmdGVyIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCAnaWNvbicpO1xuICB9XG5cbiAgLm1hdC1tZW51LWl0ZW06aG92ZXIsXG4gIC5tYXQtbWVudS1pdGVtLmNkay1wcm9ncmFtLWZvY3VzZWQsXG4gIC5tYXQtbWVudS1pdGVtLmNkay1rZXlib2FyZC1mb2N1c2VkLFxuICAubWF0LW1lbnUtaXRlbS1oaWdobGlnaHRlZCB7XG4gICAgJjpub3QoW2Rpc2FibGVkXSkge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnaG92ZXInKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1tZW51LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LW1lbnUtaXRlbSB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgYm9keS0xKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMSk7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LXBhZ2luYXRvci10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcblxuICAubWF0LXBhZ2luYXRvciB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnY2FyZCcpO1xuICB9XG5cbiAgLm1hdC1wYWdpbmF0b3IsXG4gIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSAubWF0LXNlbGVjdC10cmlnZ2VyIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsXG4gIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudCB7XG4gICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkIG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgJ2ljb24nKTtcbiAgICBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCBtYXQtY29sb3IoJGZvcmVncm91bmQsICdpY29uJyk7XG4gIH1cblxuICAubWF0LXBhZ2luYXRvci1maXJzdCxcbiAgLm1hdC1wYWdpbmF0b3ItbGFzdCB7XG4gICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkIG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgJ2ljb24nKTtcbiAgfVxuXG4gIC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIHtcbiAgICAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsXG4gICAgLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50LFxuICAgIC5tYXQtcGFnaW5hdG9yLWZpcnN0LFxuICAgIC5tYXQtcGFnaW5hdG9yLWxhc3Qge1xuICAgICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsICdkaXNhYmxlZCcpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXBhZ2luYXRvci10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1wYWdpbmF0b3IsXG4gIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSAubWF0LXNlbGVjdC10cmlnZ2VyIHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBjYXB0aW9uKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbik7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuQG1peGluIG1hdC1wcm9ncmVzcy1iYXItdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuXG4gIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmQge1xuICAgIGZpbGw6IG1hdC1jb2xvcigkcHJpbWFyeSwgbGlnaHRlcik7XG4gIH1cblxuICAubWF0LXByb2dyZXNzLWJhci1idWZmZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgbGlnaHRlcik7XG4gIH1cblxuICAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5KTtcbiAgfVxuXG4gIC5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQge1xuICAgIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmQge1xuICAgICAgZmlsbDogbWF0LWNvbG9yKCRhY2NlbnQsIGxpZ2h0ZXIpO1xuICAgIH1cblxuICAgIC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgbGlnaHRlcik7XG4gICAgfVxuXG4gICAgLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIHtcbiAgICAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5kIHtcbiAgICAgIGZpbGw6IG1hdC1jb2xvcigkd2FybiwgbGlnaHRlcik7XG4gICAgfVxuXG4gICAgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkd2FybiwgbGlnaHRlcik7XG4gICAgfVxuXG4gICAgLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCR3YXJuKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1wcm9ncmVzcy1iYXItdHlwb2dyYXBoeSgkY29uZmlnKSB7IH1cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG5cbiAgLm1hdC1wcm9ncmVzcy1zcGlubmVyLCAubWF0LXNwaW5uZXIge1xuICAgIGNpcmNsZSB7XG4gICAgICBzdHJva2U6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IGNpcmNsZSB7XG4gICAgICBzdHJva2U6IG1hdC1jb2xvcigkYWNjZW50KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIGNpcmNsZSB7XG4gICAgICBzdHJva2U6IG1hdC1jb2xvcigkd2Fybik7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci10eXBvZ3JhcGh5KCRjb25maWcpIHsgfVxuXG5cblxuXG5cbkBtaXhpbiBfbWF0LXJhZGlvLWNvbG9yKCRwYWxldHRlKSB7XG4gICYubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGUge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlKTtcbiAgfVxuXG4gIC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLFxuICAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSxcbiAgJi5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLFxuICAmOmFjdGl2ZSAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtcmFkaW8tdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xlIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1yYWRpby1idXR0b24ge1xuICAgICYubWF0LXByaW1hcnkge1xuICAgICAgQGluY2x1ZGUgX21hdC1yYWRpby1jb2xvcigkcHJpbWFyeSk7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtcmFkaW8tY29sb3IoJGFjY2VudCk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXJhZGlvLWNvbG9yKCR3YXJuKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIG5lZWRzIGV4dHJhIHNwZWNpZmljaXR5LCBiZWNhdXNlIHRoZSBjbGFzc2VzIGFib3ZlIGFyZSBjb21iaW5lZFxuICAgIC8vIChlLmcuIGAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50YCkgd2hpY2ggaW5jcmVhc2VzIHRoZWlyIHNwZWNpZmljaXR5IGEgbG90LlxuICAgIC8vIFRPRE86IGNvbnNpZGVyIG1ha2luZyB0aGUgc2VsZWN0b3JzIGludG8gZGVzY2VuZGFudHMgKGAubWF0LXByaW1hcnkgLm1hdC1yYWRpby1idXR0b25gKS5cbiAgICAmLm1hdC1yYWRpby1kaXNhYmxlZCB7XG4gICAgICAmLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xlLFxuICAgICAgLm1hdC1yYWRpby1vdXRlci1jaXJjbGUge1xuICAgICAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQpO1xuICAgICAgfVxuXG4gICAgICAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50LFxuICAgICAgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkKTtcbiAgICAgIH1cblxuICAgICAgLm1hdC1yYWRpby1sYWJlbC1jb250ZW50IHtcbiAgICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFN3aXRjaCB0aGlzIHRvIGEgc29saWQgY29sb3Igc2luY2Ugd2UncmUgdXNpbmcgYG9wYWNpdHlgXG4gICAgLy8gdG8gY29udHJvbCBob3cgb3BhcXVlIHRoZSByaXBwbGUgc2hvdWxkIGJlLlxuICAgIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwX2dldCgkZm9yZWdyb3VuZCwgYmFzZSk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtcmFkaW8tdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtcmFkaW8tYnV0dG9uIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG59XG5cblxuXG5cblxuXG5cblxuQG1peGluIG1hdC1zZWxlY3QtdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuXG4gIC5tYXQtc2VsZWN0LXZhbHVlIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogX21hdC1jb250cm9sLXBsYWNlaG9sZGVyLWNvbG9yKCR0aGVtZSk7XG4gIH1cblxuICAubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC12YWx1ZSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gIH1cblxuICAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1zZWxlY3QtcGFuZWwge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oNCwgJHRoZW1lKTtcblxuICAgIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIsIDAuMTIpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZCB7XG4gICAgJi5tYXQtZm9jdXNlZCB7XG4gICAgICAmLm1hdC1wcmltYXJ5IC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICAgICAgY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgdGV4dCk7XG4gICAgICB9XG5cbiAgICAgICYubWF0LWFjY2VudCAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgdGV4dCk7XG4gICAgICB9XG5cbiAgICAgICYubWF0LXdhcm4gLm1hdC1zZWxlY3QtYXJyb3cge1xuICAgICAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWludmFsaWQgLm1hdC1zZWxlY3QtYXJyb3cge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gICAgfVxuXG4gICAgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1zZWxlY3QtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC8vIFRoZSB1bml0LWxlc3MgbGluZS1oZWlnaHQgZnJvbSB0aGUgZm9udCBjb25maWcuXG4gICRsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGlucHV0KTtcblxuICAubWF0LXNlbGVjdCB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtc2VsZWN0LXRyaWdnZXIge1xuICAgIGhlaWdodDogJGxpbmUtaGVpZ2h0ICogMWVtO1xuICB9XG59XG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LXNpZGVuYXYtdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gICRkcmF3ZXItYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBkaWFsb2cpO1xuICAkZHJhd2VyLWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yOiAgbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kKTtcbiAgJGRyYXdlci1wdXNoLWJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZGlhbG9nKTtcbiAgJGRyYXdlci1zaWRlLWJvcmRlcjogc29saWQgMXB4IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG5cbiAgLm1hdC1kcmF3ZXItY29udGFpbmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZHJhd2VyLWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG5cbiAgLm1hdC1kcmF3ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRkcmF3ZXItYmFja2dyb3VuZC1jb2xvcjtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAgICYubWF0LWRyYXdlci1wdXNoIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRkcmF3ZXItcHVzaC1iYWNrZ3JvdW5kLWNvbG9yO1xuICAgIH1cblxuICAgICY6bm90KC5tYXQtZHJhd2VyLXNpZGUpIHtcbiAgICAgIC8vIFRoZSBlbGV2YXRpb24gb2Ygei0xNiBpcyBub3RlZCBpbiB0aGUgZGVzaWduIHNwZWNpZmljYXRpb25zLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vbWF0ZXJpYWwuaW8vZGVzaWduL2NvbXBvbmVudHMvbmF2aWdhdGlvbi1kcmF3ZXIuaHRtbFxuICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oMTYsICR0aGVtZSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1kcmF3ZXItc2lkZSB7XG4gICAgYm9yZGVyLXJpZ2h0OiAkZHJhd2VyLXNpZGUtYm9yZGVyO1xuXG4gICAgJi5tYXQtZHJhd2VyLWVuZCB7XG4gICAgICBib3JkZXItbGVmdDogJGRyYXdlci1zaWRlLWJvcmRlcjtcbiAgICAgIGJvcmRlci1yaWdodDogbm9uZTtcbiAgICB9XG4gIH1cblxuICBbZGlyPSdydGwnXSAubWF0LWRyYXdlci1zaWRlIHtcbiAgICBib3JkZXItbGVmdDogJGRyYXdlci1zaWRlLWJvcmRlcjtcbiAgICBib3JkZXItcmlnaHQ6IG5vbmU7XG5cbiAgICAmLm1hdC1kcmF3ZXItZW5kIHtcbiAgICAgIGJvcmRlci1sZWZ0OiBub25lO1xuICAgICAgYm9yZGVyLXJpZ2h0OiAkZHJhd2VyLXNpZGUtYm9yZGVyO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZHJhd2VyLWJhY2tkcm9wLm1hdC1kcmF3ZXItc2hvd24ge1xuICAgICRvcGFjaXR5OiAwLjY7XG4gICAgJGJhY2tkcm9wLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQsICRvcGFjaXR5KTtcblxuICAgIEBpZiAodHlwZS1vZigkYmFja2Ryb3AtY29sb3IpID09IGNvbG9yKSB7XG4gICAgICAvLyBXZSB1c2UgaW52ZXJ0KCkgaGVyZSB0byBoYXZlIHRoZSBkYXJrZW4gdGhlIGJhY2tncm91bmQgY29sb3IgZXhwZWN0ZWQgdG8gYmUgdXNlZC4gSWYgdGhlXG4gICAgICAvLyBiYWNrZ3JvdW5kIGlzIGxpZ2h0LCB3ZSB1c2UgYSBkYXJrIGJhY2tkcm9wLiBJZiB0aGUgYmFja2dyb3VuZCBpcyBkYXJrLFxuICAgICAgLy8gd2UgdXNlIGEgbGlnaHQgYmFja2Ryb3AuXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbnZlcnQoJGJhY2tkcm9wLWNvbG9yKTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgLy8gSWYgd2UgY291bGRuJ3QgcmVzb2x2ZSB0aGUgYmFja2Ryb3AgY29sb3IgdG8gYSBjb2xvciB2YWx1ZSwgZmFsbCBiYWNrIHRvIHVzaW5nXG4gICAgICAvLyBgb3BhY2l0eWAgdG8gbWFrZSBpdCBvcGFxdWUgc2luY2UgaXRzIGVuZCB2YWx1ZSBjb3VsZCBiZSBhIHNvbGlkIGNvbG9yLlxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tkcm9wLWNvbG9yO1xuICAgICAgb3BhY2l0eTogJG9wYWNpdHk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtc2lkZW5hdi10eXBvZ3JhcGh5KCRjb25maWcpIHsgfVxuXG5cblxuXG5cblxuQG1peGluIF9tYXQtc2xpZGUtdG9nZ2xlLWNoZWNrZWQoJHBhbGV0dGUsICR0aHVtYi1jaGVja2VkLWh1ZSkge1xuICAmLm1hdC1jaGVja2VkIHtcbiAgICAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYiB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsICR0aHVtYi1jaGVja2VkLWh1ZSk7XG4gICAgfVxuXG4gICAgLm1hdC1zbGlkZS10b2dnbGUtYmFyIHtcbiAgICAgIC8vIE9wYWNpdHkgaXMgZGV0ZXJtaW5lZCBmcm9tIHRoZSBzcGVjcyBmb3IgdGhlIHNlbGVjdGlvbiBjb250cm9scy5cbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9tYXRlcmlhbC5pby9kZXNpZ24vY29tcG9uZW50cy9zZWxlY3Rpb24tY29udHJvbHMuaHRtbCNzcGVjc1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCAkdGh1bWItY2hlY2tlZC1odWUsIDAuNTQpO1xuICAgIH1cblxuICAgIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgICAgLy8gU2V0IG5vIG9wYWNpdHkgZm9yIHRoZSByaXBwbGVzIGJlY2F1c2UgdGhlIHJpcHBsZSBvcGFjaXR5IHdpbGwgYmUgYWRqdXN0ZWQgZHluYW1pY2FsbHlcbiAgICAgIC8vIGJhc2VkIG9uIHRoZSB0eXBlIG9mIGludGVyYWN0aW9uIHdpdGggdGhlIHNsaWRlLXRvZ2dsZSAoZS5nLiBmb3IgaG92ZXIsIGZvY3VzKVxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCAkdGh1bWItY2hlY2tlZC1odWUpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNsaWRlLXRvZ2dsZS10aGVtZSgkdGhlbWUpIHtcbiAgJGlzLWRhcms6IG1hcF9nZXQoJHRoZW1lLCBpcy1kYXJrKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLy8gQ29sb3IgaHVlcyBhcmUgYmFzZWQgb24gdGhlIHNwZWNzIHdoaWNoIGJyaWVmbHkgc2hvdyB0aGUgaHVlcyB0aGF0IGFyZSBhcHBsaWVkIHRvIGEgc3dpdGNoLlxuICAvLyBUaGUgMjAxOCBzcGVjcyBubyBsb25nZXIgZGVzY3JpYmUgaG93IGRhcmsgc3dpdGNoZXMgc2hvdWxkIGxvb2sgbGlrZS4gRHVlIHRvIHRoZSBsYWNrIG9mXG4gIC8vIGluZm9ybWF0aW9uIGZvciBkYXJrIHRoZW1lZCBzd2l0Y2hlcywgd2UgcGFydGlhbGx5IGtlZXAgdGhlIG9sZCBiZWhhdmlvciB0aGF0IGlzIGJhc2VkIG9uXG4gIC8vIHRoZSBwcmV2aW91cyBzcGVjaWZpY2F0aW9ucy4gRm9yIHRoZSBjaGVja2VkIGNvbG9yIHdlIGFsd2F5cyB1c2UgdGhlIGBkZWZhdWx0YCBodWUgYmVjYXVzZVxuICAvLyB0aGF0IGZvbGxvd3MgTURDIGFuZCBhbHNvIG1ha2VzIGl0IGVhc2llciBmb3IgcGVvcGxlIHRvIGNyZWF0ZSBhIGN1c3RvbSB0aGVtZSB3aXRob3V0IG5lZWRpbmdcbiAgLy8gdG8gc3BlY2lmeSBlYWNoIGh1ZSBpbmRpdmlkdWFsbHkuXG4gICR0aHVtYi11bmNoZWNrZWQtaHVlOiBpZigkaXMtZGFyaywgNDAwLCA1MCk7XG4gICR0aHVtYi1jaGVja2VkLWh1ZTogZGVmYXVsdDtcblxuICAkYmFyLXVuY2hlY2tlZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZCk7XG4gICRyaXBwbGUtdW5jaGVja2VkLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGJhc2UpO1xuXG4gIC5tYXQtc2xpZGUtdG9nZ2xlIHtcbiAgICBAaW5jbHVkZSBfbWF0LXNsaWRlLXRvZ2dsZS1jaGVja2VkKCRhY2NlbnQsICR0aHVtYi1jaGVja2VkLWh1ZSk7XG5cbiAgICAmLm1hdC1wcmltYXJ5IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtc2xpZGUtdG9nZ2xlLWNoZWNrZWQoJHByaW1hcnksICR0aHVtYi1jaGVja2VkLWh1ZSk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXNsaWRlLXRvZ2dsZS1jaGVja2VkKCR3YXJuLCAkdGh1bWItY2hlY2tlZC1odWUpO1xuICAgIH1cblxuICAgICY6bm90KC5tYXQtY2hlY2tlZCkgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgICAvLyBTZXQgbm8gb3BhY2l0eSBmb3IgdGhlIHJpcHBsZXMgYmVjYXVzZSB0aGUgcmlwcGxlIG9wYWNpdHkgd2lsbCBiZSBhZGp1c3RlZCBkeW5hbWljYWxseVxuICAgICAgLy8gYmFzZWQgb24gdGhlIHR5cGUgb2YgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc2xpZGUtdG9nZ2xlIChlLmcuIGZvciBob3ZlciwgZm9jdXMpXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmlwcGxlLXVuY2hlY2tlZC1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYiB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oMSwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJG1hdC1ncmV5LCAkdGh1bWItdW5jaGVja2VkLWh1ZSk7XG4gIH1cblxuICAubWF0LXNsaWRlLXRvZ2dsZS1iYXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRiYXItdW5jaGVja2VkLWNvbG9yO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtc2xpZGUtdG9nZ2xlLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50IHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG59XG5cblxuXG5cblxuQG1peGluIF9tYXQtc2xpZGVyLWlubmVyLWNvbnRlbnQtdGhlbWUoJHBhbGV0dGUpIHtcbiAgLm1hdC1zbGlkZXItdHJhY2stZmlsbCxcbiAgLm1hdC1zbGlkZXItdGh1bWIsXG4gIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUpO1xuICB9XG5cbiAgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgZGVmYXVsdC1jb250cmFzdCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1zbGlkZXItdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gICRtYXQtc2xpZGVyLW9mZi1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzbGlkZXItb2ZmKTtcbiAgJG1hdC1zbGlkZXItb2ZmLWZvY3VzZWQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2xpZGVyLW9mZi1hY3RpdmUpO1xuICAkbWF0LXNsaWRlci1kaXNhYmxlZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzbGlkZXItb2ZmKTtcbiAgJG1hdC1zbGlkZXItbGFiZWxlZC1taW4tdmFsdWUtdGh1bWItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2xpZGVyLW1pbik7XG4gICRtYXQtc2xpZGVyLWxhYmVsZWQtbWluLXZhbHVlLXRodW1iLWxhYmVsLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNsaWRlci1vZmYpO1xuICAkbWF0LXNsaWRlci10aWNrLW9wYWNpdHk6IDAuNztcbiAgJG1hdC1zbGlkZXItdGljay1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBiYXNlLCAkbWF0LXNsaWRlci10aWNrLW9wYWNpdHkpO1xuICAkbWF0LXNsaWRlci10aWNrLXNpemU6IDJweDtcblxuICAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbWF0LXNsaWRlci1vZmYtY29sb3I7XG4gIH1cblxuICAubWF0LXByaW1hcnkge1xuICAgIEBpbmNsdWRlIF9tYXQtc2xpZGVyLWlubmVyLWNvbnRlbnQtdGhlbWUoJHByaW1hcnkpO1xuICB9XG5cbiAgLm1hdC1hY2NlbnQge1xuICAgIEBpbmNsdWRlIF9tYXQtc2xpZGVyLWlubmVyLWNvbnRlbnQtdGhlbWUoJGFjY2VudCk7XG4gIH1cblxuICAubWF0LXdhcm4ge1xuICAgIEBpbmNsdWRlIF9tYXQtc2xpZGVyLWlubmVyLWNvbnRlbnQtdGhlbWUoJHdhcm4pO1xuICB9XG5cbiAgLm1hdC1zbGlkZXItZm9jdXMtcmluZyB7XG4gICAgJG9wYWNpdHk6IDAuMjtcbiAgICAkY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCBkZWZhdWx0LCAkb3BhY2l0eSk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yO1xuXG4gICAgLy8gYG1hdC1jb2xvcmAgdXNlcyBgcmdiYWAgZm9yIHRoZSBvcGFjaXR5IHdoaWNoIHdvbid0IHdvcmsgd2l0aFxuICAgIC8vIENTUyB2YXJpYWJsZXMgc28gd2UgbmVlZCB0byB1c2UgYG9wYWNpdHlgIGFzIGEgZmFsbGJhY2suXG4gICAgQGlmICh0eXBlLW9mKCRjb2xvcikgIT0gY29sb3IpIHtcbiAgICAgIG9wYWNpdHk6ICRvcGFjaXR5O1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2xpZGVyOmhvdmVyLFxuICAuY2RrLWZvY3VzZWQge1xuICAgIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG1hdC1zbGlkZXItb2ZmLWZvY3VzZWQtY29sb3I7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbGlkZXItZGlzYWJsZWQge1xuICAgIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsXG4gICAgLm1hdC1zbGlkZXItdHJhY2stZmlsbCxcbiAgICAubWF0LXNsaWRlci10aHVtYiB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbWF0LXNsaWRlci1kaXNhYmxlZC1jb2xvcjtcbiAgICB9XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbWF0LXNsaWRlci1kaXNhYmxlZC1jb2xvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubWF0LXNsaWRlci1taW4tdmFsdWUge1xuICAgIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmcge1xuICAgICAgJG9wYWNpdHk6IDAuMTI7XG4gICAgICAkY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgYmFzZSwgJG9wYWNpdHkpO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yO1xuXG4gICAgICAvLyBgbWF0LWNvbG9yYCB1c2VzIGByZ2JhYCBmb3IgdGhlIG9wYWNpdHkgd2hpY2ggd29uJ3Qgd29yayB3aXRoXG4gICAgICAvLyBDU1MgdmFyaWFibGVzIHNvIHdlIG5lZWQgdG8gdXNlIGBvcGFjaXR5YCBhcyBhIGZhbGxiYWNrLlxuICAgICAgQGlmICh0eXBlLW9mKCRjb2xvcikgIT0gY29sb3IpIHtcbiAgICAgICAgb3BhY2l0eTogJG9wYWNpdHk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcge1xuICAgICAgLm1hdC1zbGlkZXItdGh1bWIsXG4gICAgICAubWF0LXNsaWRlci10aHVtYi1sYWJlbCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRtYXQtc2xpZGVyLWxhYmVsZWQtbWluLXZhbHVlLXRodW1iLWNvbG9yO1xuICAgICAgfVxuXG4gICAgICAmLmNkay1mb2N1c2VkIHtcbiAgICAgICAgLm1hdC1zbGlkZXItdGh1bWIsXG4gICAgICAgIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbWF0LXNsaWRlci1sYWJlbGVkLW1pbi12YWx1ZS10aHVtYi1sYWJlbC1jb2xvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICY6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpIHtcbiAgICAgIC5tYXQtc2xpZGVyLXRodW1iIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkbWF0LXNsaWRlci1vZmYtY29sb3I7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyLFxuICAgICAgJi5jZGstZm9jdXNlZCB7XG4gICAgICAgIC5tYXQtc2xpZGVyLXRodW1iIHtcbiAgICAgICAgICBib3JkZXItY29sb3I6ICRtYXQtc2xpZGVyLW9mZi1mb2N1c2VkLWNvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iIHtcbiAgICAgICAgICBib3JkZXItY29sb3I6ICRtYXQtc2xpZGVyLWRpc2FibGVkLWNvbG9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVyIHtcbiAgICBib3JkZXItY29sb3I6ICRtYXQtc2xpZGVyLXRpY2stY29sb3I7XG5cbiAgICAvLyBgbWF0LWNvbG9yYCB1c2VzIGByZ2JhYCBmb3IgdGhlIG9wYWNpdHkgd2hpY2ggd29uJ3Qgd29yayB3aXRoXG4gICAgLy8gQ1NTIHZhcmlhYmxlcyBzbyB3ZSBuZWVkIHRvIHVzZSBgb3BhY2l0eWAgYXMgYSBmYWxsYmFjay5cbiAgICBAaWYgKHR5cGUtb2YoJG1hdC1zbGlkZXItdGljay1jb2xvcikgIT0gY29sb3IpIHtcbiAgICAgIG9wYWNpdHk6ICRtYXQtc2xpZGVyLXRpY2stb3BhY2l0eTtcbiAgICB9XG4gIH1cblxuICAubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tzIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAkbWF0LXNsaWRlci10aWNrLWNvbG9yLFxuICAgICAgICAkbWF0LXNsaWRlci10aWNrLWNvbG9yICRtYXQtc2xpZGVyLXRpY2stc2l6ZSwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpO1xuICAgIC8vIEZpcmVmb3ggZG9lc24ndCBkcmF3IHRoZSBncmFkaWVudCBjb3JyZWN0bHkgd2l0aCAndG8gcmlnaHQnXG4gICAgLy8gKHNlZSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE0MzE5KS5cbiAgICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LXJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoMC4wMDAxZGVnLCAkbWF0LXNsaWRlci10aWNrLWNvbG9yLFxuICAgICAgICAkbWF0LXNsaWRlci10aWNrLWNvbG9yICRtYXQtc2xpZGVyLXRpY2stc2l6ZSwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpO1xuXG4gICAgLy8gYG1hdC1jb2xvcmAgdXNlcyBgcmdiYWAgZm9yIHRoZSBvcGFjaXR5IHdoaWNoIHdvbid0IHdvcmsgd2l0aFxuICAgIC8vIENTUyB2YXJpYWJsZXMgc28gd2UgbmVlZCB0byB1c2UgYG9wYWNpdHlgIGFzIGEgZmFsbGJhY2suXG4gICAgQGlmICh0eXBlLW9mKCRtYXQtc2xpZGVyLXRpY2stY29sb3IpICE9IGNvbG9yKSB7XG4gICAgICBvcGFjaXR5OiAkbWF0LXNsaWRlci10aWNrLW9wYWNpdHk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3Mge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAkbWF0LXNsaWRlci10aWNrLWNvbG9yLFxuICAgICAgICAkbWF0LXNsaWRlci10aWNrLWNvbG9yICRtYXQtc2xpZGVyLXRpY2stc2l6ZSwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpO1xuXG4gICAgLy8gYG1hdC1jb2xvcmAgdXNlcyBgcmdiYWAgZm9yIHRoZSBvcGFjaXR5IHdoaWNoIHdvbid0IHdvcmsgd2l0aFxuICAgIC8vIENTUyB2YXJpYWJsZXMgc28gd2UgbmVlZCB0byB1c2UgYG9wYWNpdHlgIGFzIGEgZmFsbGJhY2suXG4gICAgQGlmICh0eXBlLW9mKCRtYXQtc2xpZGVyLXRpY2stY29sb3IpICE9IGNvbG9yKSB7XG4gICAgICBvcGFjaXR5OiAkbWF0LXNsaWRlci10aWNrLW9wYWNpdHk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtc2xpZGVyLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0IHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbik7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTIpO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtc3RlcHBlci10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcblxuICAubWF0LXN0ZXAtaGVhZGVyIHtcbiAgICAmLmNkay1rZXlib2FyZC1mb2N1c2VkLFxuICAgICYuY2RrLXByb2dyYW0tZm9jdXNlZCxcbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIpO1xuICAgIH1cblxuICAgIC8vIE9uIHRvdWNoIGRldmljZXMgdGhlIDpob3ZlciBzdGF0ZSB3aWxsIGxpbmdlciBvbiB0aGUgZWxlbWVudCBhZnRlciBhIHRhcC5cbiAgICAvLyBSZXNldCBpdCB2aWEgYEBtZWRpYWAgYWZ0ZXIgdGhlIGRlY2xhcmF0aW9uLCBiZWNhdXNlIHRoZSBtZWRpYSBxdWVyeSBpc24ndFxuICAgIC8vIHN1cHBvcnRlZCBieSBhbGwgYnJvd3NlcnMgeWV0LlxuICAgIEBtZWRpYSAoaG92ZXI6IG5vbmUpIHtcbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5tYXQtc3RlcC1sYWJlbCxcbiAgICAubWF0LXN0ZXAtb3B0aW9uYWwge1xuICAgICAgLy8gVE9ETyhqb3NlcGhwZXJyb3R0KTogVXBkYXRlIHRvIHVzaW5nIGEgY29ycmVjdGVkIGRpc2FibGVkLXRleHQgY29udHJhc3RcbiAgICAgIC8vIGluc3RlYWQgb2Ygc2Vjb25kYXJ5LXRleHQuXG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gICAgfVxuXG4gICAgLm1hdC1zdGVwLWljb24ge1xuICAgICAgLy8gVE9ETyhqb3NlcGhwZXJyb3R0KTogVXBkYXRlIHRvIHVzaW5nIGEgY29ycmVjdGVkIGRpc2FibGVkLXRleHQgY29udHJhc3RcbiAgICAgIC8vIGluc3RlYWQgb2Ygc2Vjb25kYXJ5LXRleHQuXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIGRlZmF1bHQtY29udHJhc3QpO1xuICAgIH1cblxuICAgIC5tYXQtc3RlcC1pY29uLXNlbGVjdGVkLFxuICAgIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsXG4gICAgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnkpO1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgZGVmYXVsdC1jb250cmFzdCk7XG4gICAgfVxuXG4gICAgLm1hdC1zdGVwLWljb24tc3RhdGUtZXJyb3Ige1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgICB9XG5cbiAgICAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtYWN0aXZlIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIH1cblxuICAgIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1lcnJvciB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgICB9XG4gIH1cblxuICAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbCwgLm1hdC1zdGVwcGVyLXZlcnRpY2FsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICB9XG5cbiAgLm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZSB7XG4gICAgYm9yZGVyLWxlZnQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cblxuICAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmJlZm9yZSxcbiAgLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjphZnRlcixcbiAgLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZSB7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXN0ZXBwZXItdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtc3RlcHBlci12ZXJ0aWNhbCwgLm1hdC1zdGVwcGVyLWhvcml6b250YWwge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LXN0ZXAtbGFiZWwge1xuICAgIGZvbnQ6IHtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMSk7XG4gICAgfTtcbiAgfVxuXG4gIC5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3Ige1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIH1cblxuICAubWF0LXN0ZXAtbGFiZWwtZXJyb3Ige1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTIpO1xuICB9XG5cbiAgLm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkIHtcbiAgICBmb250OiB7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMik7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTIpO1xuICAgIH07XG4gIH1cbn1cblxuQG1peGluIG1hdC1zb3J0LXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtc29ydC1oZWFkZXItYXJyb3cge1xuICAgICR0YWJsZS1iYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdjYXJkJyk7XG4gICAgJHRleHQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuXG4gICAgLy8gQmVjYXVzZSB0aGUgYXJyb3cgaXMgbWFkZSB1cCBvZiBtdWx0aXBsZSBlbGVtZW50cyB0aGF0IGFyZSBzdGFja2VkIG9uIHRvcCBvZiBlYWNoIG90aGVyLFxuICAgIC8vIHdlIGNhbid0IHVzZSB0aGUgc2VtaS10cmFzcGFyZW50IGNvbG9yIGZyb20gdGhlIHRoZW1lIGRpcmVjdGx5LiBJZiB0aGUgdmFsdWUgaXMgYSBjb2xvclxuICAgIC8vICp0eXBlKiwgd2UgY29udmVydCBpdCBpbnRvIGEgc29saWQgY29sb3IgYnkgdGFraW5nIHRoZSBvcGFjaXR5IGZyb20gdGhlIHJnYmEgdmFsdWUgYW5kXG4gICAgLy8gdXNpbmcgdGhlIHZhbHVlIHRvIGRldGVybWluZSB0aGUgcGVyY2VudGFnZSBvZiB0aGUgYmFja2dyb3VuZCB0byBwdXQgaW50byBmb3JlZ3JvdW5kXG4gICAgLy8gd2hlbiBtaXhpbmcgdGhlIGNvbG9ycyB0b2dldGhlci4gT3RoZXJ3aXNlLCBpZiBpdCByZXNvbHZlcyB0byBzb21ldGhpbmcgZGlmZmVyZW50XG4gICAgLy8gKGUuZy4gaXQgcmVzb2x2ZXMgdG8gYSBDU1MgdmFyaWFibGUpLCB3ZSB1c2UgdGhlIGNvbG9yIGRpcmVjdGx5LlxuICAgIEBpZiAodHlwZS1vZigkdGFibGUtYmFja2dyb3VuZCkgPT0gY29sb3IgYW5kIHR5cGUtb2YoJHRleHQtY29sb3IpID09IGNvbG9yKSB7XG4gICAgICAkdGV4dC1vcGFjaXR5OiBvcGFjaXR5KCR0ZXh0LWNvbG9yKTtcbiAgICAgIGNvbG9yOiBtaXgoJHRhYmxlLWJhY2tncm91bmQsIHJnYmEoJHRleHQtY29sb3IsIDEpLCAoMSAtICR0ZXh0LW9wYWNpdHkpICogMTAwJSk7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIGNvbG9yOiAkdGV4dC1jb2xvcjtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1zb3J0LXR5cG9ncmFwaHkoJGNvbmZpZykgeyB9XG5cblxuXG5cblxuQG1peGluIG1hdC10YWJzLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGhlYWRlci1ib3JkZXI6IDFweCBzb2xpZCBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuXG4gIC5tYXQtdGFiLW5hdi1iYXIsXG4gIC5tYXQtdGFiLWhlYWRlciB7XG4gICAgYm9yZGVyLWJvdHRvbTogJGhlYWRlci1ib3JkZXI7XG4gIH1cblxuICAubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIge1xuICAgIC5tYXQtdGFiLW5hdi1iYXIsXG4gICAgLm1hdC10YWItaGVhZGVyIHtcbiAgICAgIGJvcmRlci10b3A6ICRoZWFkZXItYm9yZGVyO1xuICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAubWF0LXRhYi1sYWJlbCwgLm1hdC10YWItbGluayB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgICAmLm1hdC10YWItZGlzYWJsZWQge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG5cbiAgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICB9XG5cbiAgLy8gUmVtb3ZlIGhlYWRlciBib3JkZXIgd2hlbiB0aGVyZSBpcyBhIGJhY2tncm91bmQgY29sb3JcbiAgLm1hdC10YWItZ3JvdXBbY2xhc3MqPSdtYXQtYmFja2dyb3VuZC0nXSAubWF0LXRhYi1oZWFkZXIsXG4gIC5tYXQtdGFiLW5hdi1iYXJbY2xhc3MqPSdtYXQtYmFja2dyb3VuZC0nXSB7XG4gICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbiAgICBib3JkZXItdG9wOiBub25lO1xuICB9XG5cbiAgLm1hdC10YWItZ3JvdXAsIC5tYXQtdGFiLW5hdi1iYXIge1xuICAgICR0aGVtZS1jb2xvcnM6IChcbiAgICAgIHByaW1hcnk6ICRwcmltYXJ5LFxuICAgICAgYWNjZW50OiAkYWNjZW50LFxuICAgICAgd2FybjogJHdhcm5cbiAgICApO1xuXG4gICAgQGVhY2ggJG5hbWUsICRjb2xvciBpbiAkdGhlbWUtY29sb3JzIHtcbiAgICAgIC8vIFNldCB0aGUgZm9yZWdyb3VuZCBjb2xvciBvZiB0aGUgdGFic1xuICAgICAgJi5tYXQtI3skbmFtZX0ge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LXRhYi1sYWJlbC1mb2N1cygkY29sb3IpO1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWluay1iYXIoJGNvbG9yKTtcblxuICAgICAgICAvLyBPdmVycmlkZSBpbmsgYmFyIHdoZW4gYmFja2dyb3VuZCBjb2xvciBpcyB0aGUgc2FtZVxuICAgICAgICAmLm1hdC1iYWNrZ3JvdW5kLSN7JG5hbWV9IHtcbiAgICAgICAgICBAaW5jbHVkZSBfbWF0LWluay1iYXIoJGNvbG9yLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIEBlYWNoICRuYW1lLCAkY29sb3IgaW4gJHRoZW1lLWNvbG9ycyB7XG4gICAgICAvLyBTZXQgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgdGFicyBhbmQgb3ZlcnJpZGUgZm9jdXMgY29sb3JcbiAgICAgICYubWF0LWJhY2tncm91bmQtI3skbmFtZX0ge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LXRhYi1sYWJlbC1mb2N1cygkY29sb3IpO1xuICAgICAgICBAaW5jbHVkZSBfbWF0LXRhYnMtYmFja2dyb3VuZCgkY29sb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gX21hdC1pbmstYmFyKCRjb2xvciwgJGh1ZTogZGVmYXVsdCkge1xuICAubWF0LWluay1iYXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkY29sb3IsICRodWUpO1xuICB9XG59XG5cbkBtaXhpbiBfbWF0LXRhYi1sYWJlbC1mb2N1cygkdGFiLWZvY3VzLWNvbG9yKSB7XG4gIC5tYXQtdGFiLWxhYmVsLFxuICAubWF0LXRhYi1saW5rIHtcbiAgICAmLmNkay1rZXlib2FyZC1mb2N1c2VkLFxuICAgICYuY2RrLXByb2dyYW0tZm9jdXNlZCB7XG4gICAgICAmOm5vdCgubWF0LXRhYi1kaXNhYmxlZCkge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHRhYi1mb2N1cy1jb2xvciwgbGlnaHRlciwgMC4zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuQG1peGluIF9tYXQtdGFicy1iYWNrZ3JvdW5kKCRiYWNrZ3JvdW5kLWNvbG9yKSB7XG4gIC8vIFNldCBiYWNrZ3JvdW5kIGNvbG9yIGZvciB0aGUgdGFiIGdyb3VwXG4gIC5tYXQtdGFiLWhlYWRlciwgLm1hdC10YWItbGlua3MsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQtY29sb3IpO1xuICB9XG5cbiAgLy8gU2V0IGxhYmVscyB0byBjb250cmFzdCBhZ2FpbnN0IGJhY2tncm91bmRcbiAgLm1hdC10YWItbGFiZWwsIC5tYXQtdGFiLWxpbmsge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQtY29sb3IsIGRlZmF1bHQtY29udHJhc3QpO1xuXG4gICAgJi5tYXQtdGFiLWRpc2FibGVkIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQtY29sb3IsIGRlZmF1bHQtY29udHJhc3QsIDAuNCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IHBhZ2luYXRpb24gY2hldnJvbnMgdG8gY29udHJhc3QgYmFja2dyb3VuZFxuICAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZC1jb2xvciwgZGVmYXVsdC1jb250cmFzdCk7XG4gIH1cblxuICAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZC1jb2xvciwgZGVmYXVsdC1jb250cmFzdCwgMC40KTtcbiAgfVxuXG4gIC8vIFNldCByaXBwbGVzIGNvbG9yIHRvIGJlIHRoZSBjb250cmFzdCBjb2xvciBvZiB0aGUgbmV3IGJhY2tncm91bmQuIE90aGVyd2lzZSB0aGUgcmlwcGxlXG4gIC8vIGNvbG9yIHdpbGwgYmUgYmFzZWQgb24gdGhlIGFwcCBiYWNrZ3JvdW5kIGNvbG9yLlxuICAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQtY29sb3IsIGRlZmF1bHQtY29udHJhc3QsIDAuMTIpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtdGFicy10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC10YWItZ3JvdXAge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LXRhYi1sYWJlbCwgLm1hdC10YWItbGluayB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgYnV0dG9uKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYnV0dG9uKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJ1dHRvbik7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5AbWl4aW4gX21hdC10b29sYmFyLWNvbG9yKCRwYWxldHRlKSB7XG4gIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkcGFsZXR0ZSk7XG4gIGNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsIGRlZmF1bHQtY29udHJhc3QpO1xufVxuXG5AbWl4aW4gX21hdC10b29sYmFyLWZvcm0tZmllbGQtb3ZlcnJpZGVzIHtcbiAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSxcbiAgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSxcbiAgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUge1xuICAgIGJhY2tncm91bmQtY29sb3I6IGN1cnJlbnRDb2xvcjtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1sYWJlbCxcbiAgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCxcbiAgLm1hdC1zZWxlY3QtdmFsdWUsXG4gIC5tYXQtc2VsZWN0LWFycm93LFxuICAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3cge1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICB9XG5cbiAgLm1hdC1pbnB1dC1lbGVtZW50IHtcbiAgICBjYXJldC1jb2xvcjogY3VycmVudENvbG9yO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtdG9vbGJhci10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC10b29sYmFyIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGFwcC1iYXIpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gICAgJi5tYXQtcHJpbWFyeSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRvb2xiYXItY29sb3IoJHByaW1hcnkpO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRvb2xiYXItY29sb3IoJGFjY2VudCk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRvb2xiYXItY29sb3IoJHdhcm4pO1xuICAgIH1cblxuICAgIEBpbmNsdWRlIF9tYXQtdG9vbGJhci1mb3JtLWZpZWxkLW92ZXJyaWRlcztcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXRvb2xiYXItdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtdG9vbGJhcixcbiAgLm1hdC10b29sYmFyIGgxLFxuICAubWF0LXRvb2xiYXIgaDIsXG4gIC5tYXQtdG9vbGJhciBoMyxcbiAgLm1hdC10b29sYmFyIGg0LFxuICAubWF0LXRvb2xiYXIgaDUsXG4gIC5tYXQtdG9vbGJhciBoNiB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIHRpdGxlKTtcbiAgICBtYXJnaW46IDA7XG4gIH1cbn1cblxuXG5cblxuXG4kbWF0LXRvb2x0aXAtdGFyZ2V0LWhlaWdodDogMjJweDtcbiRtYXQtdG9vbHRpcC1mb250LXNpemU6IDEwcHg7XG4kbWF0LXRvb2x0aXAtdmVydGljYWwtcGFkZGluZzogKCRtYXQtdG9vbHRpcC10YXJnZXQtaGVpZ2h0IC0gJG1hdC10b29sdGlwLWZvbnQtc2l6ZSkgLyAyO1xuXG4kbWF0LXRvb2x0aXAtaGFuZHNldC10YXJnZXQtaGVpZ2h0OiAzMHB4O1xuJG1hdC10b29sdGlwLWhhbmRzZXQtZm9udC1zaXplOiAxNHB4O1xuJG1hdC10b29sdGlwLWhhbmRzZXQtdmVydGljYWwtcGFkZGluZzpcbiAgICAoJG1hdC10b29sdGlwLWhhbmRzZXQtdGFyZ2V0LWhlaWdodCAtICRtYXQtdG9vbHRpcC1oYW5kc2V0LWZvbnQtc2l6ZSkgLyAyO1xuXG5AbWl4aW4gbWF0LXRvb2x0aXAtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG5cbiAgLm1hdC10b29sdGlwIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIHRvb2x0aXAsIDAuOSk7XG4gIH1cbn1cblxuQG1peGluIG1hdC10b29sdGlwLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXRvb2x0aXAge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gICAgZm9udC1zaXplOiAkbWF0LXRvb2x0aXAtZm9udC1zaXplO1xuICAgIHBhZGRpbmctdG9wOiAkbWF0LXRvb2x0aXAtdmVydGljYWwtcGFkZGluZztcbiAgICBwYWRkaW5nLWJvdHRvbTogJG1hdC10b29sdGlwLXZlcnRpY2FsLXBhZGRpbmc7XG4gIH1cblxuICAubWF0LXRvb2x0aXAtaGFuZHNldCB7XG4gICAgZm9udC1zaXplOiAkbWF0LXRvb2x0aXAtaGFuZHNldC1mb250LXNpemU7XG4gICAgcGFkZGluZy10b3A6ICRtYXQtdG9vbHRpcC1oYW5kc2V0LXZlcnRpY2FsLXBhZGRpbmc7XG4gICAgcGFkZGluZy1ib3R0b206ICRtYXQtdG9vbHRpcC1oYW5kc2V0LXZlcnRpY2FsLXBhZGRpbmc7XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LXNuYWNrLWJhci10aGVtZSgkdGhlbWUpIHtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG5cbiAgLm1hdC1zbmFjay1iYXItY29udGFpbmVyIHtcbiAgICAvLyBVc2UgdGhlIHByaW1hcnkgdGV4dCBvbiB0aGUgZGFyayB0aGVtZSwgZXZlbiB0aG91Z2ggdGhlIGxpZ2h0ZXIgb25lIHVzZXNcbiAgICAvLyBhIHNlY29uZGFyeSwgYmVjYXVzZSB0aGUgY29udHJhc3Qgb24gdGhlIGxpZ2h0IHByaW1hcnkgdGV4dCBpcyBwb29yLlxuICAgIGNvbG9yOiBpZigkaXMtZGFyay10aGVtZSwgJGRhcmstcHJpbWFyeS10ZXh0LCAkbGlnaHQtc2Vjb25kYXJ5LXRleHQpO1xuICAgIGJhY2tncm91bmQ6IGlmKCRpcy1kYXJrLXRoZW1lLCBtYXAtZ2V0KCRtYXQtZ3JleSwgNTApLCAjMzIzMjMyKTtcblxuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDYsICR0aGVtZSk7XG4gIH1cblxuICAubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb24ge1xuICAgIGNvbG9yOiBpZigkaXMtZGFyay10aGVtZSwgaW5oZXJpdCwgbWF0LWNvbG9yKCRhY2NlbnQsIHRleHQpKTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNuYWNrLWJhci10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1zaW1wbGUtc25hY2tiYXIge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGJvZHktMSk7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uIHtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IGluaGVyaXQ7XG4gICAgICBzaXplOiBpbmhlcml0O1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYnV0dG9uKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vLyBUaGVtZSBzdHlsZXMgdGhhdCBvbmx5IGFwcGx5IHRvIHRoZSBmaWxsIGFwcGVhcmFuY2Ugb2YgdGhlIGZvcm0tZmllbGQuXG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1maWxsLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuXG4gICRmaWxsLWJhY2tncm91bmQ6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgYmFzZSwgaWYoJGlzLWRhcmstdGhlbWUsIDAuMSwgMC4wNCkpO1xuICAkZmlsbC1kaXNhYmxlZC1iYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGJhc2UsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjA1LCAwLjAyKSk7XG4gICR1bmRlcmxpbmUtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlciwgaWYoJGlzLWRhcmstdGhlbWUsIDAuNSwgMC40MikpO1xuICAkbGFiZWwtZGlzYWJsZWQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWZsZXgge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGZpbGwtYmFja2dyb3VuZDtcbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1mbGV4IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRmaWxsLWRpc2FibGVkLWJhY2tncm91bmQ7XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtY29sb3I7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCB7XG4gICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBjb2xvcjogJGxhYmVsLWRpc2FibGVkLWNvbG9yO1xuICAgICAgfVxuXG4gICAgICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gVXNlZCB0byBtYWtlIGluc3RhbmNlcyBvZiB0aGUgX21hdC1mb3JtLWZpZWxkLWxhYmVsLWZsb2F0aW5nIG1peGluIG5lZ2xpZ2libHkgZGlmZmVyZW50LFxuLy8gYW5kIHByZXZlbnQgR29vZ2xlJ3MgQ1NTIE9wdGltaXplciBmcm9tIGNvbGxhcHNpbmcgdGhlIGRlY2xhcmF0aW9ucy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBzb21lXG4vLyBvZiB0aGUgc2VsZWN0b3JzIGNvbnRhaW4gcHNldWRvLWNsYXNzZXMgbm90IHJlY29nbml6ZWQgaW4gYWxsIGJyb3dzZXJzLiBJZiBhIGJyb3dzZXIgZW5jb3VudGVyc1xuLy8gYW4gdW5rbm93biBwc2V1ZG8tY2xhc3MgaXQgd2lsbCBkaXNjYXJkIHRoZSBlbnRpcmUgcnVsZSBzZXQuXG4kbWF0LWZvcm0tZmllbGQtZmlsbC1kZWR1cGU6IDA7XG5cbi8vIEFwcGxpZXMgYSBmbG9hdGluZyBsYWJlbCBhYm92ZSB0aGUgZm9ybSBmaWVsZCBjb250cm9sIGl0c2VsZi5cbkBtaXhpbiBfbWF0LWZvcm0tZmllbGQtZmlsbC1sYWJlbC1mbG9hdGluZygkZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtJGluZml4LW1hcmdpbi10b3AgLSAkaW5maXgtcGFkZGluZyArICRtYXQtZm9ybS1maWVsZC1maWxsLWRlZHVwZSlcbiAgICAgICAgICAgICBzY2FsZSgkZm9udC1zY2FsZSk7XG4gIHdpZHRoOiAxMDAlIC8gJGZvbnQtc2NhbGUgKyAkbWF0LWZvcm0tZmllbGQtZmlsbC1kZWR1cGU7XG5cbiAgJG1hdC1mb3JtLWZpZWxkLWZpbGwtZGVkdXBlOiAkbWF0LWZvcm0tZmllbGQtZmlsbC1kZWR1cGUgKyAwLjAwMDAxICFnbG9iYWw7XG59XG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1maWxsLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAvLyBUaGUgdW5pdC1sZXNzIGxpbmUtaGVpZ2h0IGZyb20gdGhlIGZvbnQgY29uZmlnLlxuICAkbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBpbnB1dCk7XG4gIC8vIFRoZSBhbW91bnQgdG8gc2NhbGUgdGhlIGZvbnQgZm9yIHRoZSBmbG9hdGluZyBsYWJlbCBhbmQgc3Vic2NyaXB0LlxuICAkc3Vic2NyaXB0LWZvbnQtc2NhbGU6IDAuNzU7XG4gIC8vIFRoZSBwYWRkaW5nIG9uIHRvcCBvZiB0aGUgaW5maXguXG4gICRpbmZpeC1wYWRkaW5nLXRvcDogMC4yNWVtO1xuICAvLyBUaGUgcGFkZGluZyBiZWxvdyB0aGUgaW5maXguXG4gICRpbmZpeC1wYWRkaW5nLWJvdHRvbTogMC43NWVtO1xuICAvLyBUaGUgbWFyZ2luIGFwcGxpZWQgdG8gdGhlIGZvcm0tZmllbGQtaW5maXggdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsLlxuICAkaW5maXgtbWFyZ2luLXRvcDogMWVtICogJGxpbmUtaGVpZ2h0ICogJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuICAvLyBUaGUgYW1vdW50IHdlIG9mZnNldCB0aGUgbGFiZWwgZnJvbSB0aGUgaW5wdXQgdGV4dCBpbiB0aGUgZmlsbCBhcHBlYXJhbmNlLlxuICAkZmlsbC1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldDogLTAuNWVtO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwge1xuICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICBwYWRkaW5nOiAkaW5maXgtcGFkZGluZy10b3AgMCAkaW5maXgtcGFkZGluZy1ib3R0b20gMDtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgdG9wOiAkaW5maXgtbWFyZ2luLXRvcCArICRpbmZpeC1wYWRkaW5nLXRvcDtcbiAgICAgIG1hcmdpbi10b3A6ICRmaWxsLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0O1xuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IHtcbiAgICAgICYubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCxcbiAgICAgIC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWZpbGwtbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZy10b3AgKyAkZmlsbC1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldCxcbiAgICAgICAgICAgICAgICAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNlcnZlci1zaWRlIHJlbmRlcmVkIG1hdElucHV0IHdpdGggYSBsYWJlbCBhdHRyaWJ1dGUgYnV0IGxhYmVsIG5vdCBzaG93blxuICAgICAgLy8gKHVzZWQgYXMgYSBwdXJlIENTUyBzdGFuZC1pbiBmb3IgbWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0KS5cbiAgICAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXG4gICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtZmlsbC1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLXRvcCArICRmaWxsLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0LFxuICAgICAgICAgICAgICAgICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cblxuLy8gVGhlbWUgc3R5bGVzIHRoYXQgb25seSBhcHBseSB0byB0aGUgbGVnYWN5IGFwcGVhcmFuY2Ugb2YgdGhlIGZvcm0tZmllbGQuXG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1sZWdhY3ktdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG5cbiAgJGxhYmVsLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgJHVuZGVybGluZS1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyLCBpZigkaXMtZGFyay10aGVtZSwgMC43LCAwLjQyKSk7XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IHtcbiAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgY29sb3I6ICRsYWJlbC1jb2xvcjtcbiAgICB9XG5cbiAgICAubWF0LWhpbnQge1xuICAgICAgY29sb3I6ICRsYWJlbC1jb2xvcjtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtY29sb3I7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIHtcbiAgICAgIEBpbmNsdWRlIG1hdC1jb250cm9sLWRpc2FibGVkLXVuZGVybGluZSgkdW5kZXJsaW5lLWNvbG9yKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gVXNlZCB0byBtYWtlIGluc3RhbmNlcyBvZiB0aGUgX21hdC1mb3JtLWZpZWxkLWxhYmVsLWZsb2F0aW5nIG1peGluIG5lZ2xpZ2libHkgZGlmZmVyZW50LFxuLy8gYW5kIHByZXZlbnQgR29vZ2xlJ3MgQ1NTIE9wdGltaXplciBmcm9tIGNvbGxhcHNpbmcgdGhlIGRlY2xhcmF0aW9ucy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBzb21lXG4vLyBvZiB0aGUgc2VsZWN0b3JzIGNvbnRhaW4gcHNldWRvLWNsYXNzZXMgbm90IHJlY29nbml6ZWQgaW4gYWxsIGJyb3dzZXJzLiBJZiBhIGJyb3dzZXIgZW5jb3VudGVyc1xuLy8gYW4gdW5rbm93biBwc2V1ZG8tY2xhc3MgaXQgd2lsbCBkaXNjYXJkIHRoZSBlbnRpcmUgcnVsZSBzZXQuXG4kbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZTogMDtcblxuLy8gQXBwbGllcyBhIGZsb2F0aW5nIGxhYmVsIGFib3ZlIHRoZSBmb3JtIGZpZWxkIGNvbnRyb2wgaXRzZWxmLlxuQG1peGluIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmcoJGZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCkge1xuICAvLyBXZSB1c2UgcGVyc3BlY3RpdmUgdG8gZml4IHRoZSB0ZXh0IGJsdXJyaW5lc3MgYXMgZGVzY3JpYmVkIGhlcmU6XG4gIC8vIGh0dHA6Ly93d3cudXNlcmFnZW50bWFuLmNvbS9ibG9nLzIwMTQvMDUvMDQvZml4aW5nLXR5cG9ncmFwaHktaW5zaWRlLW9mLTItZC1jc3MtdHJhbnNmb3Jtcy9cbiAgLy8gVGhpcyByZXN1bHRzIGluIGEgc21hbGwgaml0dGVyIGFmdGVyIHRoZSBsYWJlbCBmbG9hdHMgb24gRmlyZWZveCwgd2hpY2ggdGhlXG4gIC8vIHRyYW5zbGF0ZVogZml4ZXMuXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtJGluZml4LW1hcmdpbi10b3AgLSAkaW5maXgtcGFkZGluZykgc2NhbGUoJGZvbnQtc2NhbGUpIHBlcnNwZWN0aXZlKDEwMHB4KVxuICB0cmFuc2xhdGVaKDAuMDAxcHggKyAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZSk7XG4gIC8vIFRoZSB0cmlja3MgYWJvdmUgdXNlZCB0byBzbW9vdGggb3V0IHRoZSBhbmltYXRpb24gb24gY2hyb21lIGFuZCBmaXJlZm94IGFjdHVhbGx5IG1ha2UgdGhpbmdzXG4gIC8vIHdvcnNlIG9uIElFLCBzbyB3ZSBkb24ndCBpbmNsdWRlIHRoZW0gaW4gdGhlIElFIHZlcnNpb24uXG4gIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRpbmZpeC1tYXJnaW4tdG9wIC0gJGluZml4LXBhZGRpbmcgKyAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZSlcbiAgICAgICAgICAgICAgICAgIHNjYWxlKCRmb250LXNjYWxlKTtcblxuICB3aWR0aDogMTAwJSAvICRmb250LXNjYWxlICsgJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGU7XG5cbiAgJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGU6ICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlICsgMC4wMDAwMSAhZ2xvYmFsO1xufVxuXG4vLyBTYW1lIGFzIG1peGluIGFib3ZlLCBidXQgb21pdHMgdGhlIHRyYW5zbGF0ZVogZm9yIHByaW50aW5nIHB1cnBvc2VzLlxuQG1peGluIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmctcHJpbnQoJGZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCkge1xuICAvLyBUaGlzIHJlc3VsdHMgaW4gYSBzbWFsbCBqaXR0ZXIgYWZ0ZXIgdGhlIGxhYmVsIGZsb2F0cyBvbiBGaXJlZm94LCB3aGljaCB0aGVcbiAgLy8gdHJhbnNsYXRlWiBmaXhlcy5cbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kaW5maXgtbWFyZ2luLXRvcCAtICRpbmZpeC1wYWRkaW5nICsgJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGUpXG4gICAgICAgICAgICAgICAgICBzY2FsZSgkZm9udC1zY2FsZSk7XG4gIC8vIFRoZSB0cmlja3MgYWJvdmUgdXNlZCB0byBzbW9vdGggb3V0IHRoZSBhbmltYXRpb24gb24gY2hyb21lIGFuZCBmaXJlZm94IGFjdHVhbGx5IG1ha2UgdGhpbmdzXG4gIC8vIHdvcnNlIG9uIElFLCBzbyB3ZSBkb24ndCBpbmNsdWRlIHRoZW0gaW4gdGhlIElFIHZlcnNpb24uXG4gICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlOiAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZSArIDAuMDAwMDEgIWdsb2JhbDtcbn1cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLy8gVGhlIHVuaXQtbGVzcyBsaW5lLWhlaWdodCBmcm9tIHRoZSBmb250IGNvbmZpZy5cbiAgJGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgaW5wdXQpO1xuICAvLyBUaGUgYW1vdW50IHRvIHNjYWxlIHRoZSBmb250IGZvciB0aGUgZmxvYXRpbmcgbGFiZWwgYW5kIHN1YnNjcmlwdC5cbiAgJHN1YnNjcmlwdC1mb250LXNjYWxlOiAwLjc1O1xuICAvLyBUaGUgYW1vdW50IG9mIHNwYWNlIGJldHdlZW4gdGhlIHRvcCBvZiB0aGUgbGluZSBhbmQgdGhlIHRvcCBvZiB0aGUgYWN0dWFsIHRleHRcbiAgLy8gKGFzIGEgZnJhY3Rpb24gb2YgdGhlIGZvbnQtc2l6ZSkuXG4gICRsaW5lLXNwYWNpbmc6ICgkbGluZS1oZWlnaHQgLSAxKSAvIDI7XG4gIC8vIFRoZSBwYWRkaW5nIG9uIHRoZSBpbmZpeC4gTW9ja3Mgc2hvdyBoYWxmIG9mIHRoZSB0ZXh0IHNpemUsIGJ1dCBzZWVtIHRvIG1lYXN1cmUgZnJvbSB0aGUgZWRnZVxuICAvLyBvZiB0aGUgdGV4dCBpdHNlbGYsIG5vdCB0aGUgZWRnZSBvZiB0aGUgbGluZTsgdGhlcmVmb3JlIHdlIHN1YnRyYWN0IG9mZiB0aGUgbGluZSBzcGFjaW5nLlxuICAkaW5maXgtcGFkZGluZzogMC41ZW0gLSAkbGluZS1zcGFjaW5nO1xuICAvLyBUaGUgbWFyZ2luIGFwcGxpZWQgdG8gdGhlIGZvcm0tZmllbGQtaW5maXggdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsLlxuICAkaW5maXgtbWFyZ2luLXRvcDogMWVtICogJGxpbmUtaGVpZ2h0ICogJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuICAvLyBUaGUgc3BhY2UgYmV0d2VlbiB0aGUgYm90dG9tIG9mIHRoZSAubWF0LWZvcm0tZmllbGQtZmxleCBhcmVhIGFuZCB0aGUgc3Vic2NyaXB0IHdyYXBwZXIuXG4gIC8vIE1vY2tzIHNob3cgaGFsZiBvZiB0aGUgdGV4dCBzaXplLCBidXQgdGhpcyBtYXJnaW4gaXMgYXBwbGllZCB0byBhbiBlbGVtZW50IHdpdGggdGhlIHN1YnNjcmlwdFxuICAvLyB0ZXh0IGZvbnQgc2l6ZSwgc28gd2UgbmVlZCB0byBkaXZpZGUgYnkgdGhlIHNjYWxlIGZhY3RvciB0byBtYWtlIGl0IGhhbGYgb2YgdGhlIG9yaWdpbmFsIHRleHRcbiAgLy8gc2l6ZS4gV2UgYWdhaW4gbmVlZCB0byBzdWJ0cmFjdCBvZmYgdGhlIGxpbmUgc3BhY2luZyBzaW5jZSB0aGUgbW9ja3MgbWVhc3VyZSB0byB0aGUgZWRnZSBvZiB0aGVcbiAgLy8gdGV4dCwgbm90IHRoZSAgZWRnZSBvZiB0aGUgbGluZS5cbiAgJHN1YnNjcmlwdC1tYXJnaW4tdG9wOiAwLjVlbSAvICRzdWJzY3JpcHQtZm9udC1zY2FsZSAtICgkbGluZS1zcGFjaW5nICogMik7XG4gIC8vIFRoZSBwYWRkaW5nIGFwcGxpZWQgdG8gdGhlIGZvcm0tZmllbGQtd3JhcHBlciB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgc3Vic2NyaXB0LCBzaW5jZSBpdCdzXG4gIC8vIGFic29sdXRlbHkgcG9zaXRpb25lZC4gVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBzdWJzY3JpcHQncyBtYXJnaW4gYW5kIGxpbmUtaGVpZ2h0LCBidXQgd2VcbiAgLy8gbmVlZCB0byBtdWx0aXBseSBieSB0aGUgc3Vic2NyaXB0IGZvbnQgc2NhbGUgZmFjdG9yIHNpbmNlIHRoZSB3cmFwcGVyIGhhcyBhIGxhcmdlciBmb250IHNpemUuXG4gICR3cmFwcGVyLXBhZGRpbmctYm90dG9tOiAoJHN1YnNjcmlwdC1tYXJnaW4tdG9wICsgJGxpbmUtaGVpZ2h0KSAqICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcblxuICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kge1xuICAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAkd3JhcHBlci1wYWRkaW5nLWJvdHRvbTtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgcGFkZGluZzogJGluZml4LXBhZGRpbmcgMDtcbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCB7XG4gICAgICAmLm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsXG4gICAgICAubWF0LWlucHV0LXNlcnZlcjpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgfVxuXG4gICAgICAvLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wIHdpbGwgcmVseSBvbiBBdXRvZmlsbE1vbml0b3IgaW5zdGVhZC5cbiAgICAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlclxuICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNlcnZlci1zaWRlIHJlbmRlcmVkIG1hdElucHV0IHdpdGggYSBsYWJlbCBhdHRyaWJ1dGUgYnV0IGxhYmVsIG5vdCBzaG93blxuICAgICAgLy8gKHVzZWQgYXMgYSBwdXJlIENTUyBzdGFuZC1pbiBmb3IgbWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0KS5cbiAgICAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXG4gICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgdG9wOiAkaW5maXgtbWFyZ2luLXRvcCArICRpbmZpeC1wYWRkaW5nO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUge1xuICAgICAgLy8gV2Ugd2FudCB0aGUgdW5kZXJsaW5lIHRvIHN0YXJ0IGF0IHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgYm94LCBub3QgdGhlIHBhZGRpbmcgYm94LFxuICAgICAgLy8gc28gd2UgbW92ZSBpdCB1cCBieSB0aGUgcGFkZGluZyBhbW91bnQuXG4gICAgICBib3R0b206ICR3cmFwcGVyLXBhZGRpbmctYm90dG9tO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlciB7XG4gICAgICBtYXJnaW4tdG9wOiAkc3Vic2NyaXB0LW1hcmdpbi10b3A7XG5cbiAgICAgIC8vIFdlIHdhbnQgdGhlIHN1YnNjcmlwdCB0byBzdGFydCBhdCB0aGUgZW5kIG9mIHRoZSBjb250ZW50IGJveCwgbm90IHRoZSBwYWRkaW5nIGJveCxcbiAgICAgIC8vIHNvIHdlIG1vdmUgaXQgdXAgYnkgdGhlIHBhZGRpbmcgYW1vdW50IChhZGp1c3RlZCBmb3IgdGhlIHNtYWxsZXIgZm9udCBzaXplKTtcbiAgICAgIHRvcDogY2FsYygxMDAlIC0gI3skd3JhcHBlci1wYWRkaW5nLWJvdHRvbSAvICRzdWJzY3JpcHQtZm9udC1zY2FsZX0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIHRyYW5zbGF0ZVogY2F1c2VzIHRoZSBsYWJlbCB0byBub3QgYXBwZWFyIHdoaWxlIHByaW50aW5nLCBzbyB3ZSBvdmVycmlkZSBpdCB0byBub3RcbiAgLy8gYXBwbHkgdHJhbnNsYXRlWiB3aGlsZSBwcmludGluZ1xuICBAbWVkaWEgcHJpbnQge1xuICAgIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSB7XG4gICAgICAmLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCB7XG4gICAgICAgICYubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCxcbiAgICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmctcHJpbnQoXG4gICAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wIHdpbGwgcmVseSBvbiBBdXRvZmlsbE1vbml0b3IgaW5zdGVhZC5cbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXG4gICAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZy1wcmludChcbiAgICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNlcnZlci1zaWRlIHJlbmRlcmVkIG1hdElucHV0IHdpdGggYSBsYWJlbCBhdHRyaWJ1dGUgYnV0IGxhYmVsIG5vdCBzaG93blxuICAgICAgICAvLyAodXNlZCBhcyBhIHB1cmUgQ1NTIHN0YW5kLWluIGZvciBtYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQpLlxuICAgICAgICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlclxuICAgICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmctcHJpbnQoXG4gICAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cblxuLy8gVGhlbWUgc3R5bGVzIHRoYXQgb25seSBhcHBseSB0byB0aGUgb3V0bGluZSBhcHBlYXJhbmNlIG9mIHRoZSBmb3JtLWZpZWxkLlxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG5cbiAgJGxhYmVsLWRpc2FibGVkLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICAkb3V0bGluZS1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyLCBpZigkaXMtZGFyay10aGVtZSwgMC4zLCAwLjEyKSk7XG4gICRvdXRsaW5lLWNvbG9yLWhvdmVyOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIsIGlmKCRpcy1kYXJrLXRoZW1lLCAxLCAwLjg3KSk7XG4gICRvdXRsaW5lLWNvbG9yLXByaW1hcnk6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG4gICRvdXRsaW5lLWNvbG9yLWFjY2VudDogbWF0LWNvbG9yKCRhY2NlbnQpO1xuICAkb3V0bGluZS1jb2xvci13YXJuOiBtYXQtY29sb3IoJHdhcm4pO1xuICAkb3V0bGluZS1jb2xvci1kaXNhYmxlZDogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyLCBpZigkaXMtZGFyay10aGVtZSwgMC4xNSwgMC4wNikpO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUge1xuICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lIHtcbiAgICAgIGNvbG9yOiAkb3V0bGluZS1jb2xvcjtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayB7XG4gICAgICBjb2xvcjogJG91dGxpbmUtY29sb3ItaG92ZXI7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9jdXNlZCB7XG4gICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayB7XG4gICAgICAgIGNvbG9yOiAkb3V0bGluZS1jb2xvci1wcmltYXJ5O1xuICAgICAgfVxuXG4gICAgICAmLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sge1xuICAgICAgICBjb2xvcjogJG91dGxpbmUtY29sb3ItYWNjZW50O1xuICAgICAgfVxuXG4gICAgICAmLm1hdC13YXJuIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIHtcbiAgICAgICAgY29sb3I6ICRvdXRsaW5lLWNvbG9yLXdhcm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2xhc3MgcmVwZWF0ZWQgc28gdGhhdCBydWxlIGlzIHNwZWNpZmljIGVub3VnaCB0byBvdmVycmlkZSBmb2N1c2VkIGFjY2VudCBjb2xvciBjYXNlLlxuICAgICYubWF0LWZvcm0tZmllbGQtaW52YWxpZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIHtcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIHtcbiAgICAgICAgY29sb3I6ICRvdXRsaW5lLWNvbG9yLXdhcm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCB7XG4gICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBjb2xvcjogJGxhYmVsLWRpc2FibGVkLWNvbG9yO1xuICAgICAgfVxuXG4gICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gICAgICAgIGNvbG9yOiAkb3V0bGluZS1jb2xvci1kaXNhYmxlZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gVXNlZCB0byBtYWtlIGluc3RhbmNlcyBvZiB0aGUgX21hdC1mb3JtLWZpZWxkLWxhYmVsLWZsb2F0aW5nIG1peGluIG5lZ2xpZ2libHkgZGlmZmVyZW50LFxuLy8gYW5kIHByZXZlbnQgR29vZ2xlJ3MgQ1NTIE9wdGltaXplciBmcm9tIGNvbGxhcHNpbmcgdGhlIGRlY2xhcmF0aW9ucy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBzb21lXG4vLyBvZiB0aGUgc2VsZWN0b3JzIGNvbnRhaW4gcHNldWRvLWNsYXNzZXMgbm90IHJlY29nbml6ZWQgaW4gYWxsIGJyb3dzZXJzLiBJZiBhIGJyb3dzZXIgZW5jb3VudGVyc1xuLy8gYW4gdW5rbm93biBwc2V1ZG8tY2xhc3MgaXQgd2lsbCBkaXNjYXJkIHRoZSBlbnRpcmUgcnVsZSBzZXQuXG4kbWF0LWZvcm0tZmllbGQtb3V0bGluZS1kZWR1cGU6IDA7XG5cbi8vIEFwcGxpZXMgYSBmbG9hdGluZyBsYWJlbCBhYm92ZSB0aGUgZm9ybSBmaWVsZCBjb250cm9sIGl0c2VsZi5cbkBtaXhpbiBfbWF0LWZvcm0tZmllbGQtb3V0bGluZS1sYWJlbC1mbG9hdGluZygkZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtJGluZml4LW1hcmdpbi10b3AgLSAkaW5maXgtcGFkZGluZyArICRtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWRlZHVwZSlcbiAgc2NhbGUoJGZvbnQtc2NhbGUpO1xuICB3aWR0aDogMTAwJSAvICRmb250LXNjYWxlICsgJG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZGVkdXBlO1xuXG4gICRtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWRlZHVwZTogJG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZGVkdXBlICsgMC4wMDAwMSAhZ2xvYmFsO1xufVxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtb3V0bGluZS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLy8gVGhlIHVuaXQtbGVzcyBsaW5lLWhlaWdodCBmcm9tIHRoZSBmb250IGNvbmZpZy5cbiAgJGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgaW5wdXQpO1xuICAvLyBUaGUgYW1vdW50IHRvIHNjYWxlIHRoZSBmb250IGZvciB0aGUgZmxvYXRpbmcgbGFiZWwgYW5kIHN1YnNjcmlwdC5cbiAgJHN1YnNjcmlwdC1mb250LXNjYWxlOiAwLjc1O1xuICAvLyBUaGUgcGFkZGluZyBhYm92ZSBhbmQgYmVsb3cgdGhlIGluZml4LlxuICAkaW5maXgtcGFkZGluZzogMWVtO1xuICAvLyBUaGUgbWFyZ2luIGFwcGxpZWQgdG8gdGhlIGZvcm0tZmllbGQtaW5maXggdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsLlxuICAkaW5maXgtbWFyZ2luLXRvcDogMWVtICogJGxpbmUtaGVpZ2h0ICogJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuICAvLyBUaGUgc3BhY2UgYmV0d2VlbiB0aGUgYm90dG9tIG9mIHRoZSAubWF0LWZvcm0tZmllbGQtZmxleCBhcmVhIGFuZCB0aGUgc3Vic2NyaXB0IHdyYXBwZXIuXG4gIC8vIE1vY2tzIHNob3cgaGFsZiBvZiB0aGUgdGV4dCBzaXplLCBidXQgdGhpcyBtYXJnaW4gaXMgYXBwbGllZCB0byBhbiBlbGVtZW50IHdpdGggdGhlIHN1YnNjcmlwdFxuICAvLyB0ZXh0IGZvbnQgc2l6ZSwgc28gd2UgbmVlZCB0byBkaXZpZGUgYnkgdGhlIHNjYWxlIGZhY3RvciB0byBtYWtlIGl0IGhhbGYgb2YgdGhlIG9yaWdpbmFsIHRleHRcbiAgLy8gc2l6ZS5cbiAgJHN1YnNjcmlwdC1tYXJnaW4tdG9wOiAwLjVlbSAvICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcbiAgLy8gVGhlIHBhZGRpbmcgYXBwbGllZCB0byB0aGUgZm9ybS1maWVsZC13cmFwcGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBzdWJzY3JpcHQsIHNpbmNlIGl0J3NcbiAgLy8gYWJzb2x1dGVseSBwb3NpdGlvbmVkLiBUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgdGhlIHN1YnNjcmlwdCdzIG1hcmdpbiBhbmQgbGluZS1oZWlnaHQsIGJ1dCB3ZVxuICAvLyBuZWVkIHRvIG11bHRpcGx5IGJ5IHRoZSBzdWJzY3JpcHQgZm9udCBzY2FsZSBmYWN0b3Igc2luY2UgdGhlIHdyYXBwZXIgaGFzIGEgbGFyZ2VyIGZvbnQgc2l6ZS5cbiAgJHdyYXBwZXItcGFkZGluZy1ib3R0b206ICgkc3Vic2NyaXB0LW1hcmdpbi10b3AgKyAkbGluZS1oZWlnaHQpICogJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuICAvLyBUaGUgYW1vdW50IHdlIG9mZnNldCB0aGUgbGFiZWwgZnJvbSB0aGUgaW5wdXQgdGV4dCBpbiB0aGUgb3V0bGluZSBhcHBlYXJhbmNlLlxuICAkb3V0bGluZS1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldDogLTAuMjVlbTtcblxuICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIHtcbiAgICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgcGFkZGluZzogJGluZml4LXBhZGRpbmcgMCAkaW5maXgtcGFkZGluZyAwO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICB0b3A6ICRpbmZpeC1tYXJnaW4tdG9wICsgJGluZml4LXBhZGRpbmc7XG4gICAgICBtYXJnaW4tdG9wOiAkb3V0bGluZS1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldDtcbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCB7XG4gICAgICAmLm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsXG4gICAgICAubWF0LWlucHV0LXNlcnZlcjpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcgKyAkb3V0bGluZS1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldCxcbiAgICAgICAgICAgICAgICAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNlcnZlci1zaWRlIHJlbmRlcmVkIG1hdElucHV0IHdpdGggYSBsYWJlbCBhdHRyaWJ1dGUgYnV0IGxhYmVsIG5vdCBzaG93blxuICAgICAgLy8gKHVzZWQgYXMgYSBwdXJlIENTUyBzdGFuZC1pbiBmb3IgbWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0KS5cbiAgICAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXG4gICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtb3V0bGluZS1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nICsgJG91dGxpbmUtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQsXG4gICAgICAgICAgICAgICAgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuXG4vLyBUaGVtZSBzdHlsZXMgdGhhdCBvbmx5IGFwcGx5IHRvIHRoZSBzdGFuZGFyZCBhcHBlYXJhbmNlIG9mIHRoZSBmb3JtLWZpZWxkLlxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtc3RhbmRhcmQtdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG5cbiAgJHVuZGVybGluZS1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyLCBpZigkaXMtZGFyay10aGVtZSwgMC43LCAwLjQyKSk7XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQge1xuICAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1jb2xvcjtcbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUge1xuICAgICAgQGluY2x1ZGUgbWF0LWNvbnRyb2wtZGlzYWJsZWQtdW5kZXJsaW5lKCR1bmRlcmxpbmUtY29sb3IpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtc3RhbmRhcmQtdHlwb2dyYXBoeSgkY29uZmlnKSB7fVxuXG5cbi8vIFRoZW1lIHN0eWxlcyB0aGF0IGFwcGx5IHRvIGFsbCBhcHBlYXJhbmNlcyBvZiB0aGUgZm9ybS1maWVsZC5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG5cbiAgLy8gTGFiZWwgY29sb3JzLiBSZXF1aXJlZCBpcyB1c2VkIGZvciB0aGUgYCpgIHN0YXIgc2hvd24gaW4gdGhlIGxhYmVsLlxuICAkbGFiZWwtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjcsIDAuNikpO1xuICAkZm9jdXNlZC1sYWJlbC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCB0ZXh0KTtcbiAgJHJlcXVpcmVkLWxhYmVsLWNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgdGV4dCk7XG5cbiAgLy8gVW5kZXJsaW5lIGNvbG9ycy5cbiAgJHVuZGVybGluZS1jb2xvci1iYXNlOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIsIGlmKCRpcy1kYXJrLXRoZW1lLCAxLCAwLjg3KSk7XG4gICR1bmRlcmxpbmUtY29sb3ItYWNjZW50OiBtYXQtY29sb3IoJGFjY2VudCwgdGV4dCk7XG4gICR1bmRlcmxpbmUtY29sb3Itd2FybjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgJHVuZGVybGluZS1mb2N1c2VkLWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIHRleHQpO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgY29sb3I6ICRsYWJlbC1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtaGludCB7XG4gICAgY29sb3I6ICRsYWJlbC1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgIGNvbG9yOiAkZm9jdXNlZC1sYWJlbC1jb2xvcjtcblxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICBjb2xvcjogJHVuZGVybGluZS1jb2xvci1hY2NlbnQ7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBjb2xvcjogJHVuZGVybGluZS1jb2xvci13YXJuO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2VyIHtcbiAgICBjb2xvcjogJHJlcXVpcmVkLWxhYmVsLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1jb2xvci1iYXNlO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIHtcbiAgICAubWF0LWZvcm0tZmllbGQtcmlwcGxlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtZm9jdXNlZC1jb2xvcjtcblxuICAgICAgJi5tYXQtYWNjZW50IHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1jb2xvci1hY2NlbnQ7XG4gICAgICB9XG5cbiAgICAgICYubWF0LXdhcm4ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLXdhcm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQ6bm90KC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkKSB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlciB7XG4gICAgICBjb2xvcjogJHVuZGVybGluZS1mb2N1c2VkLWNvbG9yO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVyIHtcbiAgICAgIGNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLWFjY2VudDtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXIge1xuICAgICAgY29sb3I6ICR1bmRlcmxpbmUtY29sb3Itd2FybjtcbiAgICB9XG4gIH1cblxuICAvLyBTdHlsaW5nIGZvciB0aGUgZXJyb3Igc3RhdGUgb2YgdGhlIGZvcm0gZmllbGQuIE5vdGUgdGhhdCB3aGlsZSB0aGUgc2FtZSBjYW4gYmVcbiAgLy8gYWNoaWV2ZWQgd2l0aCB0aGUgbmctKiBjbGFzc2VzLCB3ZSB1c2UgdGhpcyBhcHByb2FjaCBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCB0aGUgc2FtZVxuICAvLyBsb2dpYyBpcyB1c2VkIHRvIHN0eWxlIHRoZSBlcnJvciBzdGF0ZSBhbmQgdG8gc2hvdyB0aGUgZXJyb3IgbWVzc2FnZXMuXG4gIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIHtcbiAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgY29sb3I6ICR1bmRlcmxpbmUtY29sb3Itd2FybjtcblxuICAgICAgJi5tYXQtYWNjZW50LFxuICAgICAgLm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlciB7XG4gICAgICAgIGNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLXdhcm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSxcbiAgICAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1jb2xvci13YXJuO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZXJyb3Ige1xuICAgIGNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLXdhcm47XG4gIH1cblxuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1sZWdhY3ktdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtc3RhbmRhcmQtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtZmlsbC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoZW1lKCR0aGVtZSk7XG59XG5cbi8vIFVzZWQgdG8gbWFrZSBpbnN0YW5jZXMgb2YgdGhlIF9tYXQtZm9ybS1maWVsZC1sYWJlbC1mbG9hdGluZyBtaXhpbiBuZWdsaWdpYmx5IGRpZmZlcmVudCxcbi8vIGFuZCBwcmV2ZW50IEdvb2dsZSdzIENTUyBPcHRpbWl6ZXIgZnJvbSBjb2xsYXBzaW5nIHRoZSBkZWNsYXJhdGlvbnMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugc29tZVxuLy8gb2YgdGhlIHNlbGVjdG9ycyBjb250YWluIHBzZXVkby1jbGFzc2VzIG5vdCByZWNvZ25pemVkIGluIGFsbCBicm93c2Vycy4gSWYgYSBicm93c2VyIGVuY291bnRlcnNcbi8vIGFuIHVua25vd24gcHNldWRvLWNsYXNzIGl0IHdpbGwgZGlzY2FyZCB0aGUgZW50aXJlIHJ1bGUgc2V0LlxuJG1hdC1mb3JtLWZpZWxkLWRlZHVwZTogMDtcblxuLy8gQXBwbGllcyBhIGZsb2F0aW5nIGxhYmVsIGFib3ZlIHRoZSBmb3JtIGZpZWxkIGNvbnRyb2wgaXRzZWxmLlxuQG1peGluIF9tYXQtZm9ybS1maWVsZC1sYWJlbC1mbG9hdGluZygkZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtJGluZml4LW1hcmdpbi10b3AgLSAkaW5maXgtcGFkZGluZyArICRtYXQtZm9ybS1maWVsZC1kZWR1cGUpXG4gICAgICAgICAgICAgc2NhbGUoJGZvbnQtc2NhbGUpO1xuICB3aWR0aDogMTAwJSAvICRmb250LXNjYWxlICsgJG1hdC1mb3JtLWZpZWxkLWRlZHVwZTtcblxuICAkbWF0LWZvcm0tZmllbGQtZGVkdXBlOiAkbWF0LWZvcm0tZmllbGQtZGVkdXBlICsgMC4wMDAwMSAhZ2xvYmFsO1xufVxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC8vIFRoZSB1bml0LWxlc3MgbGluZS1oZWlnaHQgZnJvbSB0aGUgZm9udCBjb25maWcuXG4gICRsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGlucHV0KTtcblxuICAvLyBUaGUgYW1vdW50IHRvIHNjYWxlIHRoZSBmb250IGZvciB0aGUgZmxvYXRpbmcgbGFiZWwgYW5kIHN1YnNjcmlwdC5cbiAgJHN1YnNjcmlwdC1mb250LXNjYWxlOiAwLjc1O1xuICAvLyBUaGUgYW1vdW50IHRvIHNjYWxlIHRoZSBmb250IGZvciB0aGUgcHJlZml4IGFuZCBzdWZmaXggaWNvbnMuXG4gICRwcmVmaXgtc3VmZml4LWljb24tZm9udC1zY2FsZTogMS41O1xuXG4gIC8vIFRoZSBwYWRkaW5nIG9uIHRoZSBpbmZpeC4gTW9ja3Mgc2hvdyBoYWxmIG9mIHRoZSB0ZXh0IHNpemUuXG4gICRpbmZpeC1wYWRkaW5nOiAwLjVlbTtcbiAgLy8gVGhlIG1hcmdpbiBhcHBsaWVkIHRvIHRoZSBmb3JtLWZpZWxkLWluZml4IHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBmbG9hdGluZyBsYWJlbC5cbiAgJGluZml4LW1hcmdpbi10b3A6IDFlbSAqICRsaW5lLWhlaWdodCAqICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcbiAgLy8gRm9udCBzaXplIHRvIHVzZSBmb3IgdGhlIGxhYmVsIGFuZCBzdWJzY3JpcHQgdGV4dC5cbiAgJHN1YnNjcmlwdC1mb250LXNpemU6ICRzdWJzY3JpcHQtZm9udC1zY2FsZSAqIDEwMCU7XG4gIC8vIEZvbnQgc2l6ZSB0byB1c2UgZm9yIHRoZSBmb3IgdGhlIHByZWZpeCBhbmQgc3VmZml4IGljb25zLlxuICAkcHJlZml4LXN1ZmZpeC1pY29uLWZvbnQtc2l6ZTogJHByZWZpeC1zdWZmaXgtaWNvbi1mb250LXNjYWxlICogMTAwJTtcbiAgLy8gVGhlIHNwYWNlIGJldHdlZW4gdGhlIGJvdHRvbSBvZiB0aGUgLm1hdC1mb3JtLWZpZWxkLWZsZXggYXJlYSBhbmQgdGhlIHN1YnNjcmlwdCB3cmFwcGVyLlxuICAvLyBNb2NrcyBzaG93IGhhbGYgb2YgdGhlIHRleHQgc2l6ZSwgYnV0IHRoaXMgbWFyZ2luIGlzIGFwcGxpZWQgdG8gYW4gZWxlbWVudCB3aXRoIHRoZSBzdWJzY3JpcHRcbiAgLy8gdGV4dCBmb250IHNpemUsIHNvIHdlIG5lZWQgdG8gZGl2aWRlIGJ5IHRoZSBzY2FsZSBmYWN0b3IgdG8gbWFrZSBpdCBoYWxmIG9mIHRoZSBvcmlnaW5hbCB0ZXh0XG4gIC8vIHNpemUuXG4gICRzdWJzY3JpcHQtbWFyZ2luLXRvcDogMC41ZW0gLyAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG4gIC8vIFRoZSBwYWRkaW5nIGFwcGxpZWQgdG8gdGhlIGZvcm0tZmllbGQtd3JhcHBlciB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgc3Vic2NyaXB0LCBzaW5jZSBpdCdzXG4gIC8vIGFic29sdXRlbHkgcG9zaXRpb25lZC4gVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBzdWJzY3JpcHQncyBtYXJnaW4gYW5kIGxpbmUtaGVpZ2h0LCBidXQgd2VcbiAgLy8gbmVlZCB0byBtdWx0aXBseSBieSB0aGUgc3Vic2NyaXB0IGZvbnQgc2NhbGUgZmFjdG9yIHNpbmNlIHRoZSB3cmFwcGVyIGhhcyBhIGxhcmdlciBmb250IHNpemUuXG4gICR3cmFwcGVyLXBhZGRpbmctYm90dG9tOiAoJHN1YnNjcmlwdC1tYXJnaW4tdG9wICsgJGxpbmUtaGVpZ2h0KSAqICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcblxuICAubWF0LWZvcm0tZmllbGQge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBpbnB1dCk7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtd3JhcHBlciB7XG4gICAgcGFkZGluZy1ib3R0b206ICR3cmFwcGVyLXBhZGRpbmctYm90dG9tO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCxcbiAgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCB7XG4gICAgLy8gQWxsb3cgaWNvbnMgaW4gYSBwcmVmaXggb3Igc3VmZml4IHRvIGFkYXB0IHRvIHRoZSBjb3JyZWN0IHNpemUuXG4gICAgLm1hdC1pY29uIHtcbiAgICAgIGZvbnQtc2l6ZTogJHByZWZpeC1zdWZmaXgtaWNvbi1mb250LXNpemU7XG4gICAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0O1xuICAgIH1cblxuICAgIC8vIEFsbG93IGljb24gYnV0dG9ucyBpbiBhIHByZWZpeCBvciBzdWZmaXggdG8gYWRhcHQgdG8gdGhlIGNvcnJlY3Qgc2l6ZS5cbiAgICAubWF0LWljb24tYnV0dG9uIHtcbiAgICAgIGhlaWdodDogJHByZWZpeC1zdWZmaXgtaWNvbi1mb250LXNjYWxlICogMWVtO1xuICAgICAgd2lkdGg6ICRwcmVmaXgtc3VmZml4LWljb24tZm9udC1zY2FsZSAqIDFlbTtcblxuICAgICAgLm1hdC1pY29uIHtcbiAgICAgICAgaGVpZ2h0OiAkbGluZS1oZWlnaHQgKiAxZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICBwYWRkaW5nOiAkaW5maXgtcGFkZGluZyAwO1xuICAgIC8vIFRocm93cyBvZmYgdGhlIGJhc2VsaW5lIGlmIHdlIGRvIGl0IGFzIGEgcmVhbCBtYXJnaW4sIHNvIHdlIGRvIGl0IGFzIGEgYm9yZGVyIGluc3RlYWQuXG4gICAgYm9yZGVyLXRvcDogJGluZml4LW1hcmdpbi10b3Agc29saWQgdHJhbnNwYXJlbnQ7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IHtcbiAgICAmLm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsXG4gICAgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgfVxuXG4gICAgLy8gU2VydmVyLXNpZGUgcmVuZGVyZWQgbWF0SW5wdXQgd2l0aCBhIGxhYmVsIGF0dHJpYnV0ZSBidXQgbGFiZWwgbm90IHNob3duXG4gICAgLy8gKHVzZWQgYXMgYSBwdXJlIENTUyBzdGFuZC1pbiBmb3IgbWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0KS5cbiAgICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlclxuICAgICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIge1xuICAgIHRvcDogLSRpbmZpeC1tYXJnaW4tdG9wO1xuICAgIHBhZGRpbmctdG9wOiAkaW5maXgtbWFyZ2luLXRvcDtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgdG9wOiAkaW5maXgtbWFyZ2luLXRvcCArICRpbmZpeC1wYWRkaW5nO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSB7XG4gICAgLy8gV2Ugd2FudCB0aGUgdW5kZXJsaW5lIHRvIHN0YXJ0IGF0IHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgYm94LCBub3QgdGhlIHBhZGRpbmcgYm94LFxuICAgIC8vIHNvIHdlIG1vdmUgaXQgdXAgYnkgdGhlIHBhZGRpbmcgYW1vdW50LlxuICAgIGJvdHRvbTogJHdyYXBwZXItcGFkZGluZy1ib3R0b207XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXIge1xuICAgIGZvbnQtc2l6ZTogJHN1YnNjcmlwdC1mb250LXNpemU7XG4gICAgbWFyZ2luLXRvcDogJHN1YnNjcmlwdC1tYXJnaW4tdG9wO1xuXG4gICAgLy8gV2Ugd2FudCB0aGUgc3Vic2NyaXB0IHRvIHN0YXJ0IGF0IHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgYm94LCBub3QgdGhlIHBhZGRpbmcgYm94LFxuICAgIC8vIHNvIHdlIG1vdmUgaXQgdXAgYnkgdGhlIHBhZGRpbmcgYW1vdW50IChhZGp1c3RlZCBmb3IgdGhlIHNtYWxsZXIgZm9udCBzaXplKTtcbiAgICB0b3A6IGNhbGMoMTAwJSAtICN7JHdyYXBwZXItcGFkZGluZy1ib3R0b20gLyAkc3Vic2NyaXB0LWZvbnQtc2NhbGV9KTtcbiAgfVxuXG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1zdGFuZGFyZC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1maWxsLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdHlwb2dyYXBoeSgkY29uZmlnKTtcbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LXRyZWUtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC10cmVlIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdjYXJkJyk7XG4gIH1cblxuICAubWF0LXRyZWUtbm9kZSxcbiAgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXRyZWUtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtdHJlZSB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtdHJlZS1ub2RlLFxuICAubWF0LW5lc3RlZC10cmVlLW5vZGUge1xuICAgIGZvbnQtd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0xKTtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKTtcbiAgfVxufVxuXG5cblxuLy8gSW5jbHVkZXMgYWxsIG9mIHRoZSB0eXBvZ3JhcGhpYyBzdHlsZXMuXG5AbWl4aW4gYW5ndWxhci1tYXRlcmlhbC10eXBvZ3JhcGh5KCRjb25maWc6IG51bGwpIHtcbiAgQGlmICRjb25maWcgPT0gbnVsbCB7XG4gICAgJGNvbmZpZzogbWF0LXR5cG9ncmFwaHktY29uZmlnKCk7XG4gIH1cblxuICBAaW5jbHVkZSBtYXQtYmFkZ2UtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWJhc2UtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWF1dG9jb21wbGV0ZS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtYm90dG9tLXNoZWV0LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1idXR0b24tdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWJ1dHRvbi10b2dnbGUtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWNhcmQtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWNoZWNrYm94LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1jaGlwcy10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtdGFibGUtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWRhdGVwaWNrZXItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWRpYWxvZy10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZXhwYW5zaW9uLXBhbmVsLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1ncmlkLWxpc3QtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWljb24tdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWlucHV0LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1tZW51LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1wYWdpbmF0b3ItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXByb2dyZXNzLWJhci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtcmFkaW8tdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXNlbGVjdC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtc2lkZW5hdi10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtc2xpZGUtdG9nZ2xlLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1zbGlkZXItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXN0ZXBwZXItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXNvcnQtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXRhYnMtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXRvb2xiYXItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXRvb2x0aXAtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWxpc3QtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LW9wdGlvbi10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtb3B0Z3JvdXAtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXNuYWNrLWJhci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtdHJlZS10eXBvZ3JhcGh5KCRjb25maWcpO1xufVxuXG5cbi8vIE1peGluIHRoYXQgcmVuZGVycyBhbGwgb2YgdGhlIGNvcmUgc3R5bGVzIHRoYXQgYXJlIG5vdCB0aGVtZS1kZXBlbmRlbnQuXG5AbWl4aW4gbWF0LWNvcmUoJHR5cG9ncmFwaHktY29uZmlnOiBudWxsKSB7XG4gIEBpbmNsdWRlIGFuZ3VsYXItbWF0ZXJpYWwtdHlwb2dyYXBoeSgkdHlwb2dyYXBoeS1jb25maWcpO1xuICBAaW5jbHVkZSBtYXQtcmlwcGxlKCk7XG4gIEBpbmNsdWRlIGNkay1hMTF5KCk7XG4gIEBpbmNsdWRlIGNkay1vdmVybGF5KCk7XG4gIEBpbmNsdWRlIGNkay10ZXh0LWZpZWxkKCk7XG59XG5cbi8vIE1peGluIHRoYXQgcmVuZGVycyBhbGwgb2YgdGhlIGNvcmUgc3R5bGVzIHRoYXQgZGVwZW5kIG9uIHRoZSB0aGVtZS5cbkBtaXhpbiBtYXQtY29yZS10aGVtZSgkdGhlbWUpIHtcbiAgQGluY2x1ZGUgbWF0LXJpcHBsZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtb3B0aW9uLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1vcHRncm91cC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtcHNldWRvLWNoZWNrYm94LXRoZW1lKCR0aGVtZSk7XG5cbiAgLy8gUHJvdmlkZXMgZXh0ZXJuYWwgQ1NTIGNsYXNzZXMgZm9yIGVhY2ggZWxldmF0aW9uIHZhbHVlLiBFYWNoIENTUyBjbGFzcyBpcyBmb3JtYXR0ZWQgYXNcbiAgLy8gYG1hdC1lbGV2YXRpb24teiR6VmFsdWVgIHdoZXJlIGAkelZhbHVlYCBjb3JyZXNwb25kcyB0byB0aGUgei1zcGFjZSB0byB3aGljaCB0aGUgZWxlbWVudCBpc1xuICAvLyBlbGV2YXRlZC5cbiAgQGZvciAkelZhbHVlIGZyb20gMCB0aHJvdWdoIDI0IHtcbiAgICAuI3skX21hdC1lbGV2YXRpb24tcHJlZml4fSN7JHpWYWx1ZX0ge1xuICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oJHpWYWx1ZSwgJHRoZW1lKTtcbiAgICB9XG4gIH1cblxuICAvLyBXcmFwcGVyIGVsZW1lbnQgdGhhdCBwcm92aWRlcyB0aGUgdGhlbWUgYmFja2dyb3VuZCB3aGVuIHRoZSB1c2VyJ3MgY29udGVudCBpc24ndFxuICAvLyBpbnNpZGUgb2YgYSBgbWF0LXNpZGVuYXYtY29udGFpbmVyYC4gTm90ZSB0aGF0IHdlIG5lZWQgdG8gZXhjbHVkZSB0aGUgYW1wZXJzYW5kXG4gIC8vIHNlbGVjdG9yIGluIGNhc2UgdGhlIG1peGluIGlzIGluY2x1ZGVkIGF0IHRoZSB0b3AgbGV2ZWwuXG4gIC5tYXQtYXBwLWJhY2tncm91bmQje2lmKCYsICcsICYubWF0LWFwcC1iYWNrZ3JvdW5kJywgJycpfSB7XG4gICAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxuXG4gIC8vIE1hcmtlciB0aGF0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHVzZXIgaGFzIGFkZGVkIGEgdGhlbWUgdG8gdGhlaXIgcGFnZS5cbiAgQGF0LXJvb3Qge1xuICAgIC5tYXQtdGhlbWUtbG9hZGVkLW1hcmtlciB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LWRpdmlkZXItdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1kaXZpZGVyIHtcbiAgICBib3JkZXItdG9wLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG5cbiAgLm1hdC1kaXZpZGVyLXZlcnRpY2FsIHtcbiAgICBib3JkZXItcmlnaHQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cbn1cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLy8gQ3JlYXRlIGEgdGhlbWUuXG5AbWl4aW4gYW5ndWxhci1tYXRlcmlhbC10aGVtZSgkdGhlbWUpIHtcbiAgQGluY2x1ZGUgbWF0LWNvcmUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWF1dG9jb21wbGV0ZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtYmFkZ2UtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWJvdHRvbS1zaGVldC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtYnV0dG9uLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1idXR0b24tdG9nZ2xlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1jYXJkLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1jaGVja2JveC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtY2hpcHMtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXRhYmxlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1kYXRlcGlja2VyLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1kaWFsb2ctdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWRpdmlkZXItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWV4cGFuc2lvbi1wYW5lbC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZ3JpZC1saXN0LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1pY29uLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1pbnB1dC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtbGlzdC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtbWVudS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtcGFnaW5hdG9yLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1wcm9ncmVzcy1iYXItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXByb2dyZXNzLXNwaW5uZXItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXJhZGlvLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1zZWxlY3QtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXNpZGVuYXYtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXNsaWRlLXRvZ2dsZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtc2xpZGVyLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1zdGVwcGVyLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1zb3J0LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC10YWJzLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC10b29sYmFyLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC10b29sdGlwLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC10cmVlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1zbmFjay1iYXItdGhlbWUoJHRoZW1lKTtcbn1cbiIsIkBpbXBvcnQgXCJtaXhpbnNcIjtcbkBpbXBvcnQgXCJ2YXJzXCI7XG5AaW1wb3J0IFwifkBhbmd1bGFyL21hdGVyaWFsL3RoZW1pbmdcIjtcblxuLm1jayB7XG4gICAgJi1pbmhlcml0IHtcbiAgICAgICAgJi1mb250IHtcbiAgICAgICAgICAgIC8vIHBhdGNoZXMgZ2xvYmFsIGZvbnQgc3R5bGluZyBkb25lIGJ5IGxlZ2FjeSB1aVxuICAgICAgICAgICAgZm9udDogaW5oZXJpdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtY29udGVudCB7XG4gICAgICAgICYtZXhwYW5kIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuXG4gICAgICAgICAgICAmLXdpZHRoIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi1oZWlnaHQge1xuICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtd2l0aC1mb290ZXItaGVpZ2h0IHtcbiAgICAgICAgICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDU4cHgpO1xuICAgICAgICB9XG5cbiAgICAgICAgJi1mdWxsLWhlaWdodCB7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMHZoO1xuICAgICAgICB9XG5cbiAgICAgICAgJi1wYWdlIHtcbiAgICAgICAgICAgIEBleHRlbmQgLm1jay1jb250ZW50LWV4cGFuZDtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICRwYWdlLWJhY2tncm91bmQtY29sb3I7XG5cbiAgICAgICAgICAgICYtY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICBAZXh0ZW5kIC5tY2stY29udGVudC1mdWxsLWhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtYm9keSB7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAyNHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1ncm91cCB7XG4gICAgICAgICAgICBAaW5jbHVkZSBwYWdlLXBhZGRpbmc7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcblxuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogNzU5cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXNoYWRvdyB7XG4gICAgICAgIEBpbmNsdWRlIG1hdC1lbGV2YXRpb24oMSk7XG4gICAgfVxuXG4gICAgJi1mbGV4LTEge1xuICAgICAgICBmbGV4OiAxO1xuICAgIH1cblxuICAgICYtcm93IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcblxuICAgICAgICAmLm1jay1jZW50ZXIge1xuICAgICAgICAgICAgJi1qdXN0aWZ5IHtcbiAgICAgICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi1hbGlnbiB7XG4gICAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGV4dGVuZCAubWNrLWNlbnRlci1qdXN0aWZ5O1xuICAgICAgICAgICAgQGV4dGVuZCAubWNrLWNlbnRlci1hbGlnbjtcbiAgICAgICAgfVxuXG4gICAgICAgICYubWNrLXN0cmV0Y2gge1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gICAgICAgIH1cblxuICAgICAgICAmLWZsb3cge1xuICAgICAgICAgICAgQGV4dGVuZCAubWNrLXJvdztcbiAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgfVxuXG4gICAgICAgICYubWNrLXNjcm9sbCB7XG4gICAgICAgICAgICBvdmVyZmxvdy14OiBzY3JvbGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWNvbHVtbiB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgICAgICAgJi5tY2stY2VudGVyIHtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgICYubWNrLXNwYWNlLWJldHdlZW4ge1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5tY2stc3RyZXRjaCB7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICAgICAgfVxuXG4gICAgICAgICYubWNrLXNjcm9sbCB7XG4gICAgICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgICAgICAgICBvdmVyZmxvdy15OiBvdmVybGF5O1xuICAgICAgICB9XG5cbiAgICAgICAgJi5tY2stZmxleC1lbmQge1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtb3ZlcmZsb3cge1xuICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICB9XG5cbiAgICAmLWJvcmRlcmVkLCAmLWlucHV0IHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzQ2NDY0NjtcbiAgICAgICAgfVxuXG4gICAgICAgICY6Zm9jdXMge1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgfVxuXG4gICAgICAgICZbZGlzYWJsZWQ9XCJ0cnVlXCJdIHtcbiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjZjBmMGYwO1xuICAgICAgICAgICAgY29sb3I6ICNjY2M7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWRhdGUtZGlzcGxheSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogNDNweDtcbiAgICAgICAgcGFkZGluZzogJHNwYWNpbmctc21hbGwgJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgdHJhbnNpdGlvbjogYm9yZGVyIDIwMG1zLCBib3gtc2hhZG93IDIwMG1zO1xuICAgIH1cblxuICAgICYtZm9ybS1pbnB1dCB7XG5cbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICAgICAgICAgICAgcGFkZGluZy1ib3R0b206ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgIH1cblxuICAgICAgICBtYXQtZm9ybS1maWVsZCB7XG4gICAgICAgICAgICBtaW4td2lkdGg6IGF1dG8gIWltcG9ydGFudDtcblxuICAgICAgICAgICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLXRvcDogMC43cmVtICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206ICRzcGFjaW5nLXh4c21hbGwgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICAgICAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDIuN3JlbTtcbiAgICAgICAgICAgICAgICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI3KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5tY2stY2VudGVyLXN1ZmZpeCB7XG4gICAgICAgICAgICAgICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgICAgICAgICAgICAgICAgQGV4dGVuZCAubWNrLXJvdztcbiAgICAgICAgICAgICAgICAgICAgQGV4dGVuZCAubWNrLWNlbnRlcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24ge1xuICAgICAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDJweDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAubWF0LWZvcm0tZmllbGQtZmxleCB7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMnJlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDJyZW07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBtYXQtZm9ybS1maWVsZC5tYXQtcyB7XG4gICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1zZWxlY3Qge1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogMC4ycmVtO1xuXG4gICAgICAgICAgICAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmIC5tYXQtc2VsZWN0LXZhbHVlID4gLm1hdC1zZWxlY3QtdmFsdWUtdGV4dCA+IHNwYW4ge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgICAgICAgICAvLyBjb2xvcjogIzMzMzMzMyAhaW1wb3J0YW50OyAvL1ItLS0gYmxvY2tzIGRpc2FibGVkIHN0YXRlIGNvbG9yXG4gICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Lm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsXG4gICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLFxuICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyO1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMXB4O1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAuYXZhaWxhYmxlIHtcbiAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lIHtcbiAgICAgICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCxcbiAgICAgICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLFxuICAgICAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICMzYWE1Mzc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLmJvb2tlZCB7XG4gICAgICAgICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gICAgICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Lm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsXG4gICAgICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcCxcbiAgICAgICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kIHtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjZTEyZTQxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIHtcbiAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LFxuICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcCxcbiAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogJHByaW1hcnk7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgID4gbWF0LWZvcm0tZmllbGQubWNrLWVycm9yIHtcbiAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICAvLyBsZXNzIGp1bXBpbmcgZm9yIGVycm9yIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lIHtcbiAgICAgICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCxcbiAgICAgICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLFxuICAgICAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICRlcnJvci1jb2xvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBtY2stY2xvc2UtaWNvbi5tYXQtY2hpcC1yZW1vdmUubWF0LWNoaXAtcmVtb3ZlIHtcbiAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1sYWJlbCB7XG4gICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbWF0LXJhZGlvLWJ1dHRvbiB7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLm1hdC1yYWRpby1sYWJlbC1jb250ZW50IHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgLm1hdC1yYWRpbyB7XG4gICAgICAgICAgICAmLW91dGVyLWNpcmNsZSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkcHJpbWFyeSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMXB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYtaW5uZXItY2lyY2xlIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbWF0LXJhZGlvLWdyb3VwIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuXG4gICAgICAgICAgICAmID4gbWF0LXJhZGlvLWJ1dHRvbjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWNvbnRhaW5lciB7XG4gICAgICAgICAgICA+IC5tY2stZm9ybS1pbnB1dCwgPiBtY2stc2VsZWN0IHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy14eHNtYWxsO1xuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy1tZWRpdW0tbGFyZ2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWNrLXJhZGlvLXNlbGVjdCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogJHNwYWNpbmctc21hbGw7XG5cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nLW1lZGl1bTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBtYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcCB7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgICAgICAgICBtaW4taGVpZ2h0OiAxLjVyZW07XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY2hpcC1jb2xvcjtcbiAgICAgICAgICAgIHBhZGRpbmctdG9wOiAkc3BhY2luZy1zbWFsbGVzdDtcbiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAkc3BhY2luZy1zbWFsbGVzdDtcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgICAgIEBpbmNsdWRlIGNoaXAtbGFiZWw7XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1jaGVja2JveCB7XG4gICAgICAgICAgICAmLm1hdC1jaGVja2JveC5tYXQtY2hlY2tib3gge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGNoZWNrYm94LWxhYmVsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkaXYubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5O1xuXG4gICAgICAgICAgICAgICAgJi5tY2stY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWRpc2FibGVkIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLm1jay1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtZGlzYWJsZWQge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGNoZWNrYm94LWxhYmVsO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkYm9yZGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1ib3JkZXJsZXNzIHtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuXG4gICAgICAgICY6aG92ZXIsICY6Zm9jdXMsICY6ZGlzYWJsZWQge1xuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1zZWxlY3QtcGFuZWwge1xuICAgICAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHVuc2V0ICFpbXBvcnRhbnQ7XG4gICAgICAgIG1hcmdpbi10b3A6IDM1cHggIWltcG9ydGFudDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcblxuICAgICAgICBtYXQtb3B0aW9uIHtcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG5cbiAgICAgICAgICAgICYubWF0LW9wdGlvbi10ZXh0IHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLm1jay1tYXJnaW4tdG9wIHtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6ICRzcGFjaW5nLW1lZGl1bSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1jaGVja2JveC1wYW5lbCB7XG4gICAgICAgICYubWF0LWF1dG9jb21wbGV0ZS1wYW5lbC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIHtcbiAgICAgICAgICAgIHRvcDogLTEwcHg7XG4gICAgICAgICAgICBtYXgtaGVpZ2h0OiAyNzhweDtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1vcHRpb24ubWNrLXRydW5jYXRlZCB7XG4gICAgICAgICAgICAmIC5tYXQtY2hlY2tib3gtbGFiZWwubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBtYXgtbGluZXMoMik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBtYXQtb3B0aW9uIHtcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMjRweDtcbiAgICAgICAgICAgIGhlaWdodDogdW5zZXQ7XG4gICAgICAgICAgICBtaW4taGVpZ2h0OiAzNnB4O1xuXG4gICAgICAgICAgICAmIC5tYXQtY2hlY2tib3gtbGFiZWwubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgICAgICAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmIC5tYXQtY2hlY2tib3gtbGFiZWwubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBjaGVja2JveC1sYWJlbDtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLm1jay1jaGVja2JveC1ncm91cC1oZWFkZXIge1xuICAgICAgICAgICAgICAgICYgLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5tY2stY2hlY2tib3gtZ3JvdXAtY2hpbGQge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAkc3BhY2luZy1sYXJnZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbWF0LWNoZWNrYm94IHtcbiAgICAgICAgICAgICAgICBsYWJlbC5tYXQtY2hlY2tib3gtbGF5b3V0IHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDJweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRpdi5tYXQtY2hlY2tib3gtZnJhbWUubWF0LWNoZWNrYm94LWZyYW1lIHtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgbWNrLWNoZWNrYm94LWJvcmRlcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmLm1hdC1jaGVja2JveC1jaGVja2VkIHtcbiAgICAgICAgICAgICAgICAgICAgZGl2Lm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJi5tY2stY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWRpc2FibGVkIHtcbiAgICAgICAgICAgICAgICAgICAgZGl2Lm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJi5tY2stY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWRpc2FibGVkIHtcbiAgICAgICAgICAgICAgICAgICAgJiAubWF0LWNoZWNrYm94LWxhYmVsLm1hdC1jaGVja2JveC1sYWJlbCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBjaGVja2JveC1sYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAkYm9yZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICRzcGFjaW5nLXNtYWxsLW1lZGl1bTtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAkc3BhY2luZy1zbWFsbC1tZWRpdW07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1zZWxlY3Qtb3B0aW9uIHtcbiAgICAgICAgJi1zZWxlY3RlZCB7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xuXG4gICAgICAgICAgICAubWNrLXNwYWNlci1jb250ZW50IHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6ICRzcGFjaW5nLXhzbWFsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtdW5zZWxlY3RlZCB7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG5cbiAgICAgICAgICAgICYubWNrLWlnbm9yZS1kaXNhYmxlZCB7XG4gICAgICAgICAgICAgICAgY29sb3I6IGJsYWNrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWNrLXNwYWNlci1jb250ZW50IHtcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAkc3BhY2luZy14c21hbGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWJ1dHRvbiB7XG4gICAgICAgICYubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLCAmLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ge1xuICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgICAgIEBleHRlbmQgLm1jay1jb2x1bW47XG4gICAgICAgICAgICBAZXh0ZW5kIC5tY2stY2VudGVyO1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG5cbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYgPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctc21hbGxlc3Q7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctc21hbGxlc3Q7XG4gICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG5cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYubWNrLXNob3J0IHtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgbWluLXdpZHRoOiA4M3B4O1xuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMTU1cHg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gc29tZSBjYXNlcyBidXR0b25zIGluIGRlc2t0b3AgYXJlIDQwIHZzIDQ4cHhcbiAgICAgICAgICAgICAgICAmLm1jay1zaG9ydC1oZWlnaHQge1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYubWNrLXNxdWFyZSB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgICAgICAgICAgIHdpZHRoOiAzMnB4O1xuICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMzJweDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogNDBweDtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtcHJpbWFyeS1idXR0b24ge1xuICAgICAgICBAZXh0ZW5kIC5tY2stYnV0dG9uO1xuXG4gICAgICAgICYubWF0LWJ1dHRvbi5tYXQtYnV0dG9uIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5O1xuXG4gICAgICAgICAgICAmW2Rpc2FibGVkXSwgJi5kaXNhYmxlZCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgICAgICAgICAgICAgY29sb3I6ICM3NTc1NzU7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcblxuICAgICAgICAgICAgICAgICYgPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjNzU3NTc1O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXNlY29uZGFyeS1idXR0b24ge1xuICAgICAgICBAZXh0ZW5kIC5tY2stYnV0dG9uO1xuXG4gICAgICAgICYubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiB7XG4gICAgICAgICAgICBAaW5jbHVkZSBtY2stdGhpbi1idXR0b24tYm9yZGVyO1xuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzIyNTFGRjtcbiAgICAgICAgICAgIGNvbG9yOiAjMjI1MUZGO1xuICAgICAgICAgICAgJltkaXNhYmxlZF0sICYuZGlzYWJsZWQge1xuICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgICAgICAgICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLm1hdC1idXR0b24ubWF0LWJ1dHRvbiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcblxuICAgICAgICAgICAgJiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogJGNoaXAtY29sb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXdhcm5pbmctYnV0dG9uIHtcbiAgICAgICAgQGV4dGVuZCAubWNrLWJ1dHRvbjtcblxuICAgICAgICAmLm1hdC1idXR0b24ubWF0LWJ1dHRvbiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3ItYnJhbmQteWVsbG93O1xuXG4gICAgICAgICAgICAmID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgIGNvbG9yOiBibGFjaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtc3Ryb2tlZC1idXR0b24ge1xuICAgICAgICBAZXh0ZW5kIC5tY2stYnV0dG9uO1xuXG4gICAgICAgICYubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiB7XG4gICAgICAgICAgICBAaW5jbHVkZSBtY2stYnV0dG9uLWJvcmRlcjtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLW1lZGl1bS1sYXJnZTtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLW1lZGl1bS1sYXJnZTtcblxuICAgICAgICAgICAgJi5tY2stc2hvcnQge1xuICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDgzcHg7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbGVzdDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbGVzdDtcblxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0OHB4O1xuICAgICAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDE1NXB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gcHJpbWFyeSBjb2xvcnNcbiAgICAgICAgICAgICYubWNrLXByaW1hcnkge1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMXB4O1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogJHByaW1hcnk7XG4gICAgICAgICAgICAgICAgY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLm1jay10aGluLWJvcmRlci1saWdodCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICAgICAgICAgICAgICBib3JkZXItd2lkdGg6IDFweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYgPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgICAgIGNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtdG9nZ2xlLWJ1dHRvbiB7XG4gICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICAgICAgbWluLXdpZHRoOiA1OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcblxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICBtaW4td2lkdGg6IDEzMnB4O1xuICAgICAgICAgICAgcGFkZGluZy10b3A6ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgfVxuXG4gICAgICAgICYtc2VsZWN0ZWQge1xuICAgICAgICAgICAgY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1kYXRlLXBpY2tlciB7XG4gICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xuXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgIG1heC13aWR0aDogMjNyZW07XG4gICAgICAgIH1cblxuICAgICAgICAmID4gLmhlYWRlci5oZWFkZXIge1xuICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICBjb2xvcjogJGZvcm0tbGFiZWw7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAkc3BhY2luZy1zbWFsbC1tZWRpdW07XG5cbiAgICAgICAgICAgICYgPiAuYXJyb3cuYXJyb3cge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAyLjM3NXJlbTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDJyZW07XG5cbiAgICAgICAgICAgICAgICAmID4gLmljb24uaWNvbiB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxcmVtO1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDFyZW07XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAmID4gLm5leHQubmV4dCB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnbGlicy91aS9zcmMvbGliL2ljb25zL2Fycm93LWZvcndhcmQuc3ZnJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJiA+IC5wcmV2aW91cy5wcmV2aW91cyB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnbGlicy91aS9zcmMvbGliL2ljb25zL2Fycm93LWJhY2t3YXJkLnN2ZycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgIH1cblxuICAgICAgICAmID4gLm1vbnRoIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICB9XG5cbiAgICAgICAgJiA+IC53ZWVrIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgY29sb3I6ICRzZWNvbmRhcnktbGFiZWw7XG4gICAgICAgIH1cblxuICAgICAgICAmID4gLmJvZHkge1xuICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcblxuICAgICAgICAgICAgJiA+IGRpdiA+IGRpdi5kYXRlIHtcbiAgICAgICAgICAgICAgICAmID4gLmRvdCB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJi5kaXNhYmxlZCB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJHNlY29uZGFyeS1sYWJlbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmLmFjdGl2ZSB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICYubm9uLW1vbnRoIHtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICRzZWNvbmRhcnktbGFiZWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1zcGFjZXItY29udGVudCB7XG4gICAgICAgICYtY29sbGFwc2UtdGFibGV0IHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZSh0YWJsZXQpIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1leHBhbmQtbW9iaWxlIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1kaXZpZGVyIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWV4cGFuc2lvbi1wYW5lbCB7XG4gICAgICAgICYubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIG1hdC1lbGV2YXRpb24oMCk7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICRzZWxlY3RlZC1vcHRpb247XG4gICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHNlbGVjdGVkLW9wdGlvbjtcblxuICAgICAgICAgICAgJi5tY2stZXhwYW5kZWQge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWNvbG9yO1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG5cbiAgICAgICAgICAgICAgICAmIC5tY2stY29sbGFwc2UtaWNvbiB7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICdjaGV2cm9uLWNsb3NlLnN2ZycpO1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBtY2staWNvbig0OHB4LCAnY2hldnJvbi1jbG9zZS1sYXJnZS5zdmcnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1hdC1leHBhbnNpb24tcGFuZWwtYm9keSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG5cbiAgICAgICAgICAgICAgICAmID4gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIHtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgYm9keS10aW55O1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbDtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYgbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xuXG4gICAgICAgICAgICAmID4gc3Bhbi5tYXQtY29udGVudCB7XG4gICAgICAgICAgICAgICAgLy8gY2VudGVyIHRleHQgYW5kIGljb25zXG4gICAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYgbWF0LXBhbmVsLXRpdGxlIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICAgICAgY29sb3I6IGJsYWNrO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5tY2stY29sbGFwc2UtaWNvbiB7XG4gICAgICAgICAgICBAaW5jbHVkZSBtY2staWNvbigyNHB4LCAnY2hldnJvbi1vcGVuLnN2ZycpO1xuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDQ4cHgsICdjaGV2cm9uLW9wZW4tbGFyZ2Uuc3ZnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICAgICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjVzIGVhc2U7XG4gICAgICAgICAgICAmLmV4cGFuZGVkIHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1pY29uLWZpbGwtb3BlbiB7XG4gICAgICAgIGZpbGw6ICRwcmltYXJ5O1xuICAgIH1cblxuICAgICYtaWNvbi1maWxsLWNsb3NlIHtcbiAgICAgICAgZmlsbDogJHNlY29uZGFyeS1sYWJlbDtcbiAgICB9XG5cbiAgICAmLWljb24tZmlsbC1ibGFjayB7XG4gICAgICAgIGZpbGw6IGJsYWNrO1xuICAgICAgICBzdHJva2U6IGJsYWNrO1xuICAgIH1cblxuICAgICYtaWNvbi1maWxsLXdoaXRlIHtcbiAgICAgICAgZmlsbDogd2hpdGU7XG4gICAgICAgIHN0cm9rZTogd2hpdGU7XG4gICAgfVxuXG4gICAgJi1pY29uLWZpbGwtZ3JheSB7XG4gICAgICAgIGZpbGw6ICMzMzMzMzM7XG4gICAgICAgIHN0cm9rZTogIzMzMzMzMztcbiAgICB9XG5cbiAgICAmLW1pbiB7XG4gICAgICAgIG1heC13aWR0aDogNTgxcHggIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDgwdnc7XG4gICAgICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIG1vZGFsIGludG8gYSBtb3JlICdmdWxsLXNjcmVlbicgYXBwZWFyYW5jZSBvbiBtb2JpbGUuXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG5cbiAgICAgICAgICAgIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1ub2V4cGFuZCB7XG4gICAgICAgIG1heC13aWR0aDogNTgxcHggIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDgwdncgIWltcG9ydGFudDtcbiAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgbW9kYWwgaW50byBhIG1vcmUgJ2Z1bGwtc2NyZWVuJyBhcHBlYXJhbmNlIG9uIG1vYmlsZS5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICB3aWR0aDogY2FsYygxMDB2dyAtIDMycHgpICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtbW9kYWwge1xuICAgICAgICBtYXgtd2lkdGg6IDgwMHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIHdpZHRoOiA4MHZ3O1xuICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBtb2RhbCBpbnRvIGEgbW9yZSAnZnVsbC1zY3JlZW4nIGFwcGVhcmFuY2Ugb24gbW9iaWxlLlxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDB2dztcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuXG4gICAgICAgICAgICAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtbW9kYWwtbWluaSB7XG4gICAgICAgIG1heC13aWR0aDogNTgwcHggIWltcG9ydGFudDtcbiAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgbW9kYWwgaW50byBhIG1vcmUgJ2Z1bGwtc2NyZWVuJyBhcHBlYXJhbmNlIG9uIG1vYmlsZS5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICB3aWR0aDogMTAwdnc7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcblxuICAgICAgICAgICAgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLW1vZGFsLXN1cnZleSB7XG4gICAgICAgIG1heC13aWR0aDogNjkxcHggIWltcG9ydGFudDtcbiAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgbW9kYWwgaW50byBhIG1vcmUgJ2Z1bGwtc2NyZWVuJyBhcHBlYXJhbmNlIG9uIG1vYmlsZS5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtbW9kYWwtd2lkZSB7XG4gICAgICAgIG1heC13aWR0aDogMTAyNHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIHdpZHRoOiAxMDB2dztcbiAgICAgICAgaGVpZ2h0OiA5NXZoO1xuICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuICAgICAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgIC5tYXQtaWNvbi1idXR0b25bbmFtZT1cIkNsb3NlQnV0dG9uXCJdIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgcmlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIC5jbG9zZS1pbWFnZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMzJweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIG1vZGFsIGludG8gYSBtb3JlICdmdWxsLXNjcmVlbicgYXBwZWFyYW5jZSBvbiBtb2JpbGUuXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgICAgICAgICAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgJi1tb2RhbC13aWRlLW1hbmFnZS1ib29raW5nIHtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDI0cHggIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgICAvLyBoZWlnaHQ6IDk1dmg7XG4gICAgICAgIG1heC1oZWlnaHQ6IDk1dmg7XG4gICAgICAgIC5tYXQtZGlhbG9nLWNvbnRlbnQge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Y4RjlGQTtcbiAgICAgICAgICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAubWF0LWljb24tYnV0dG9uW25hbWU9XCJDbG9zZUJ1dHRvblwiXSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIHJpZ2h0OiAzMnB4O1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAuY2xvc2UtaW1hZ2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMycHg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBtb2RhbCBpbnRvIGEgbW9yZSAnZnVsbC1zY3JlZW4nIGFwcGVhcmFuY2Ugb24gbW9iaWxlLlxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDB2dztcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICAgICAgICAgICAgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgICYtYWxlcnQge1xuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIG1heC13aWR0aDogMTAwdncgIWltcG9ydGFudDtcbiAgICAgICAgICAgIHdpZHRoOiAxMDB2dztcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHNwYWNpbmctc21hbGw7XG4gICAgICAgIH1cblxuICAgICAgICAmLWJhY2tkcm9wIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICRhbGVydC1vdmVybGF5LWJnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1zbGlkZS10b2dnbGUge1xuICAgICAgICAmLm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQ6bm90KC5tYXQtZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICYgLm1hdC1zbGlkZS10b2dnbGUtYmFyLm1hdC1zbGlkZS10b2dnbGUtYmFyIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeS1oaWdobGlnaHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIubWF0LXNsaWRlLXRvZ2dsZS10aHVtYiB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLm1hdC1zbGlkZS10b2dnbGUge1xuICAgICAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICB9XG5cbiAgICAgICAgLm1hdC1zbGlkZS10b2dnbGUtY29udGVudC5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnQge1xuICAgICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICAgICAgQGluY2x1ZGUgbWF4LWxpbmVzKDIpO1xuICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIge1xuICAgICAgICAgICAgd2lkdGg6IDE0cHg7XG4gICAgICAgICAgICBoZWlnaHQ6IDE0cHg7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg1MCUsIDUwJSk7XG4gICAgICAgIH1cblxuICAgICAgICAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXIubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXIge1xuICAgICAgICAgICAgdG9wOiAtNHB4O1xuICAgICAgICAgICAgbGVmdDogLTRweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5tYXQtc2xpZGUtdG9nZ2xlLWJhci5tYXQtc2xpZGUtdG9nZ2xlLWJhciB7XG4gICAgICAgICAgICBoZWlnaHQ6IDIwcHg7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXNrZWxldG9uIHtcbiAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG5cbiAgICAgICAgJi1jaGVja2JveCB7XG4gICAgICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgICAgICAgICAgIGhlaWdodDogMjBweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1oZWFkZXIgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgIHdpZHRoOiAxMDB2dztcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDIxNXB4O1xuICAgICAgICB9XG5cbiAgICAgICAgJi1pbWFnZSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgQGluY2x1ZGUgcGxhY2Vob2xkZXItaW1hZ2Utc2l6ZTtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgIH1cblxuICAgICAgICAmLXN0YXR1cyA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgQGluY2x1ZGUgcGxhY2Vob2xkZXItc3RhdHVzLXNpemU7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS0xID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICBoZWlnaHQ6IDIzcHg7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDE3NnB4O1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAyMTlweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS0yID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDE2NXB4O1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAxODlweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS0zID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDE0N3B4O1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAxODlweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS0zMHAsICYtbGluZS0zMHAtdGhpbiB7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAzMCU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDMwJTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLXRoaW4ge1xuICAgICAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWxpbmUtNDVwLCAmLWxpbmUtNDVwLXRoaW4ge1xuICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogNDUlO1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA0NSU7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNDUlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYtdGhpbiB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS01MHAsICYtbGluZS01MHAtdGhpbiwgJi1saW5lLTUwcC10aGljayB7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA1MCU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDUwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiA0NSU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGluIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGljayB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS02MHAsICYtbGluZS02MHAtdGhpbiwgJi1saW5lLTYwcC10aGljayB7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA2MCU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDYwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAzNSU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGluIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGljayB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS03MHAsICYtbGluZS03MHAtdGhpbiwgJi1saW5lLTcwcC10aGljayB7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA3MCU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDcwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAyNSU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGluIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGljayB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS04MHAsICYtbGluZS04MHAtdGhpbiwgJi1saW5lLTgwcC10aGljayB7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA4MCU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDgwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNSU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGluIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGljayB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS05MHAsICYtbGluZS05MHAtdGhpbiB7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA5MCU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDkwJTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLXRoaW4ge1xuICAgICAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWxvYWQtbW9yZSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgICAgICB3aWR0aDogY2FsYygxMDB2dyAtICgyICogI3skc3BhY2luZy1zbWFsbH0pKTtcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcblxuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMzIwcHg7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA1MHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1sb2FkLW1vcmUtMTAwcCwgJi1oZWFkZXIsICYtcm9vbS1hdmFpbGFiaWxpdHkge1xuICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICAgICAgICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gKDIgKiAjeyRzcGFjaW5nLXNtYWxsfSkpO1xuICAgICAgICAgICAgICAgIGhlaWdodDogNDBweDtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IG5vbmU7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IG5vbmU7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDUwcHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICYtcm9vbS1hdmFpbGFiaWxpdHkge1xuICAgICAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTI0cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuXG4gICAgfVxufVxuXG5cbi5tY2sge1xuICAgICYtaGVhZGluZy01IHtcbiAgICAgICAgQGluY2x1ZGUgaGVhZGluZy01O1xuICAgIH1cbn1cblxubmd4LW1hdC1zZWxlY3Qtc2VhcmNoIHtcbiAgICAubWF0LXNlbGVjdC1zZWFyY2gtbm8tZW50cmllcy1mb3VuZCB7XG4gICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgfVxuXG4gICAgLm1hdC1zZWxlY3Qtc2VhcmNoLWlucHV0IHtcbiAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICB9XG5cbiAgICBidXR0b24ubWF0LWJ1dHRvbi5tYXQtc2VsZWN0LXNlYXJjaC1jbGVhciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIGNvbG9yOiBibGFjaztcbiAgICB9XG59XG5cbjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgIHdpZHRoOiAxNnB4O1xuICAgIGhlaWdodDogMThweDtcbn1cbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICAgIGhlaWdodDogJHNwYWNpbmctbWVkaXVtO1xuICAgIGJvcmRlcjogNHB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMCk7XG4gICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHNjcm9sbGJhci1jb2xvcjtcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IC0xcHggLTFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjA1KSwgaW5zZXQgMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cbjo6LXdlYmtpdC1zY3JvbGxiYXItYnV0dG9uIHtcbiAgICB3aWR0aDogMDtcbiAgICBoZWlnaHQ6IDA7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cbjo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cbmhlYWRlciB7XG4gICAgei1pbmRleDogMjtcbn1cbi5tYi1ibG9jayB7XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbn1cbi5tYi1ib3R0b20ge1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTEwcHg7XG4gICAgfVxufVxuXG4ubWFwLWZpbHRlcnMtY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgICAgdG9wOiA1cHg7XG4gICAgfVxuICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le1xuICAgICAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICAgIHBhZGRpbmctdG9wOiAkc3BhY2luZy14eHNtYWxsICFpbXBvcnRhbnQ7XG4gICAgfVxufVxuXG4ub2ZmaWNlLWxldmVsLXJvd3tcblxuICAgIC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye1xuICAgICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgfVxuXG4gICAgLmxlZ2VuZC1jb250YWluZXIgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgaGVpZ2h0OiA0NXB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuc2VsZWN0LWRpdmlkZXJ7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB0b3A6IDAgIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDQ0cHggIWltcG9ydGFudDtcbiAgICAgICAgcmlnaHQ6IC0xMXB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICAgIGJvcmRlci13aWR0aDogMCAwIDAgMXB4O1xuICAgICAgICBib3JkZXItY29sb3I6ICNjNmM2YzY7XG4gICAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gMXB4KSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmRpc2FibGVke1xuICAgICAgICAuc2VsZWN0LWRpdmlkZXJ7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjBGMEYwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAycHgpICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLnNlbGVjdC1jaGV2cm9ue1xuICAgICAgICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5vZmZpY2UtbGV2ZWwtcm93LCAubWFwLWNvbnRyb2xze1xuICAgIC5sZWdlbmQtY29udGFpbmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XG4gICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50O1xuICAgIH1cbn1cblxuLmJvb2tpbmctZm9ybS1jb250YWluZXIge1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDM0NXB4KTtcbn1cbi5ib29raW5nLWZvcm0tY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dHtcblxuICAgIG1hdC1zZWxlY3Qge1xuICAgICAgICAmIC5tYXQtc2VsZWN0LXZhbHVlID4gLm1hdC1zZWxlY3QtdmFsdWUtdGV4dCA+IHNwYW4ge1xuICAgICAgICAgICAgLy8gY29sb3I6ICMwNTFjMmMgIWltcG9ydGFudDsgLy9SLS0tIGJsb2NrcyBkaXNhYmxlZCBzdGF0ZSBjb2xvclxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbWF0LWxhYmVsLCAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnQge1xuICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucyAhaW1wb3J0YW50O1xuICAgICAgICBjb2xvcjogIzMzMzMzMztcbiAgICB9XG5cbiAgICBpbnB1dCwgaW5wdXQ6OnBsYWNlaG9sZGVye1xuICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICAgICAgY29sb3I6ICNCM0IzQjM7XG4gICAgfVxufSIsIkBpbXBvcnQgXCJsaWJzL3VpL3NyYy9saWIvc3R5bGVzXCI7XG5cbmZvcm0ge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICBwYWRkaW5nOiAwIDEwcHg7XG4gICAgfVxufVxuXG4ubWNrLXJvdy1mbG93IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgID5kaXYge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBtaW4td2lkdGg6IDE4MHB4O1xuICAgICAgICBmbGV4LWZsb3c6IGNvbHVtbjtcbiAgICB9XG4gICAgPmRpdjpudGgtY2hpbGQoMikge1xuICAgICAgICBtYXJnaW4tbGVmdDogMjBweDtcbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmNvbXBhbnktY29udGFpbmVye1xuICAgID5kaXY6bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDBweDtcbiAgICB9XG59XG5cbi5yb3ctd2l0aC1zcGFjaW5nIHtcbiAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy1tZWRpdW07XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgbGFiZWwge1xuICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICB9XG4gICAgcCB7XG4gICAgICAgIGNvbG9yOiAjZTEyZTQxO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICYuY2hlY2tpbmcge1xuICAgICAgICAgICAgY29sb3I6ICMwMDAwMDA7XG4gICAgICAgIH1cbiAgICAgICAgJi5hdmFpbGFibGUge1xuICAgICAgICAgICAgY29sb3I6ICMzYWE1Mzc7XG4gICAgICAgIH1cbiAgICAgICAgJi5zYi1zdGF0dXMge1xuICAgICAgICAgICAgcGFkZGluZzogMCAxMHB4IDAgMzRweDtcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgIGltZyB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIHRvcDogNHB4O1xuICAgICAgICAgICAgICAgIGxlZnQ6IDRweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmZsZXgtcm93e1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxZW07XG4gICAgICAgID4gZGl2IHtcbiAgICAgICAgICAgIHdpZHRoOiA0NyU7XG4gICAgICAgICAgICBtaW4td2lkdGg6IDQwJTtcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgICBmbGV4OiBub25lO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNvbXBhbnktZmllbGR7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmF0dGVuZGVlcy1pbnB1dCB7XG4gICAgbWFyZ2luLXJpZ2h0OiAxZW07XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG5cbm1hdC1oaW50IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgc3BhbiB7XG4gICAgICAgIGNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgZm9udC1zaXplOiAxMXB4O1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgIH1cbiAgICAuaGludCB7XG4gICAgICAgIHdpZHRoOiA0MjlweDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG4gICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBwYWRkaW5nOiAxMHB4O1xuICAgICAgICB0b3A6IDI2cHg7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIH1cbiAgICAgICAgLnRyaWFuZ2xlIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHRvcDogLTZweDtcbiAgICAgICAgICAgIGxlZnQ6IDEycHg7XG4gICAgICAgICAgICB3aWR0aDogMTJweDtcbiAgICAgICAgICAgIGhlaWdodDogMTJweDtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4ubWNrLWZvcm0taW5wdXQge1xuICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tdG9wOiAxLjI1ZW07XG4gICAgbWFyZ2luLXJpZ2h0OiAxZW07XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAuNWVtO1xuICAgIHNwYW4ge1xuICAgICAgICBjb2xvcjogI2QxNDg0ZjsvLyRwZW5kaW5nO1xuICAgIH1cbiAgICAmLmVycm9yIHtcbiAgICAgICAgY29sb3I6ICRlcnJvcjtcbiAgICB9XG59XG5cbm1hdC1mb3JtLWZpZWxkIHtcbiAgICBmbGV4OiAxO1xuXG4gICAgJi5ib29rZWR7XG4gICAgICAgIGNvbG9yOiAjZDE0ODRmO1xuICAgIH1cblxuICAgICYuYXZhaWxhYmxle1xuICAgICAgICBjb2xvcjogIzNhYTUzNztcbiAgICB9XG4gICAgaW5wdXQge1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgIHBhZGRpbmctdG9wOiA4cHg7XG4gICAgfVxuICAgIG1hdC1lcnJvciB7XG4gICAgICAgIHBhZGRpbmctdG9wOiAxMnB4O1xuICAgICAgICBmb250LXNpemU6IDExcHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgICBzcGFuIHtcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgICAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgbGVmdDogMTBweDtcbiAgICAgICAgICAgIHRvcDogMnB4O1xuICAgICAgICB9XG4gICAgICAgIC5lcnJvci1pY29uIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIGxlZnQ6IC0xMnB4O1xuICAgICAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oJGljb24tc21hbGwsICRhc3NldDogJ2Vycm9yLWNsb3NlLnN2ZycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmljb24ge1xuICAgICAgICB3aWR0aDogOHB4O1xuICAgIH1cbn1cblxubWF0LXRhYiB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4uZmllbGQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgbWluLXdpZHRoOiAxNGVtO1xuICAgIGZsZXg6IDE7XG4gICAgZmxleC13cmFwOiB3cmFwO1xufVxuXG50ZXh0YXJlYSB7XG4gICAgbWluLWhlaWdodDogN2VtO1xufVxuXG4uZmllbGRzZXQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuXG4gICAgLmZpZWxkIHtcbiAgICAgICAgbWFyZ2luOiAwIC4yNWVtO1xuXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5lcnJvciB7XG4gICAgY29sb3I6ICRlcnJvcjtcbn1cblxuLmZsZXgtY29udGFpbmVye1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAuZnVsbC13aWR0aHtcbiAgICAgICAgICAgIG1pbi13aWR0aDogY2FsYygxMDAlIC0gMWVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG1hdC1mb3JtLWZpZWxkIHtcbiAgICAgICAgOjpuZy1kZWVwIHtcbiAgICAgICAgICAgIGRpdiBkaXYge1xuICAgICAgICAgICAgICAgIGhlaWdodDogNDdweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ== */"] }); + } }, directives: [i4.ɵangular_packages_forms_forms_y, i4.NgControlStatusGroup, i4.FormGroupDirective, i5.LabelComponent, i6.MatFormField, i7.MatInput, i4.DefaultValueAccessor, i4.NgControlStatus, i4.FormControlName, i4.RequiredValidator, i6.MatError, i8.SelectComponent, i9.MatCheckbox, i10.TooltipDirective, i11.AutoCompleteChipSelectItemComponent, i6.MatHint, i12.NgIf, i6.MatLabel, i13.NumbersOnlyDirective, i4.NumberValueAccessor], styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n.mck-inherit-font[_ngcontent-%COMP%] {\n font: inherit;\n}\n.mck-content-expand[_ngcontent-%COMP%], .mck-content-page[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n}\n.mck-content-expand-width[_ngcontent-%COMP%] {\n width: 100%;\n}\n.mck-content-expand-height[_ngcontent-%COMP%] {\n height: 100%;\n}\n.mck-content-with-footer-height[_ngcontent-%COMP%] {\n height: calc(100vh - 58px);\n}\n.mck-content-full-height[_ngcontent-%COMP%], .mck-content-page-container[_ngcontent-%COMP%] {\n height: 100vh;\n}\n.mck-content-page[_ngcontent-%COMP%] {\n background: #F8F9FA;\n}\n.mck-content-body[_ngcontent-%COMP%] {\n width: 100%;\n display: block;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-content-body[_ngcontent-%COMP%] {\n max-width: 1024px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-content-body[_ngcontent-%COMP%] {\n max-width: 1024px;\n }\n}\n.mck-content-group[_ngcontent-%COMP%] {\n padding-left: 1rem;\n padding-right: 1rem;\n width: 100%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-content-group[_ngcontent-%COMP%] {\n max-width: 759px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-content-group[_ngcontent-%COMP%] {\n max-width: 759px;\n }\n}\n.mck-shadow[_ngcontent-%COMP%] {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n}\n.mck-flex-1[_ngcontent-%COMP%] {\n flex: 1;\n}\n.mck-row[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .mck-row-flow[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n}\n.mck-row.mck-center-justify[_ngcontent-%COMP%], .mck-center-justify.mck-row-flow[_ngcontent-%COMP%], .mck-row.mck-center[_ngcontent-%COMP%], .mck-row.mck-button.mat-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .mck-center.mck-row-flow[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: center;\n}\n.mck-row.mck-center-align[_ngcontent-%COMP%], .mck-center-align.mck-row-flow[_ngcontent-%COMP%], .mck-row.mck-center[_ngcontent-%COMP%], .mck-row.mck-button.mat-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .mck-center.mck-row-flow[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n align-items: center;\n}\n.mck-row.mck-stretch[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mck-stretch.mat-form-field-infix[_ngcontent-%COMP%], .mck-stretch.mck-row-flow[_ngcontent-%COMP%] {\n align-items: stretch;\n}\n.mck-row-flow[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n}\n.mck-row.mck-scroll[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mck-scroll.mat-form-field-infix[_ngcontent-%COMP%], .mck-scroll.mck-row-flow[_ngcontent-%COMP%] {\n overflow-x: scroll;\n}\n.mck-column[_ngcontent-%COMP%], .mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n.mck-column.mck-center[_ngcontent-%COMP%], .mck-column.mck-button.mat-button[_ngcontent-%COMP%], .mck-column.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-column.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-column.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-column.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-column.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-center.mck-button.mat-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-button[_ngcontent-%COMP%], .mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-button.mat-stroked-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-center.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mck-column.mat-form-field-infix[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mck-button.mat-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: center;\n align-items: center;\n}\n.mck-column.mck-space-between[_ngcontent-%COMP%], .mck-space-between.mck-button.mat-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-space-between.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: space-between;\n}\n.mck-column.mck-stretch[_ngcontent-%COMP%], .mck-stretch.mck-button.mat-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-stretch.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n align-items: stretch;\n}\n.mck-column.mck-scroll[_ngcontent-%COMP%], .mck-scroll.mck-button.mat-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-scroll.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n overflow-y: scroll;\n overflow-y: overlay;\n}\n.mck-column.mck-flex-end[_ngcontent-%COMP%], .mck-flex-end.mck-button.mat-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-flex-end.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: flex-end;\n}\n.mck-overflow[_ngcontent-%COMP%] {\n overflow: auto;\n}\n.mck-bordered[_ngcontent-%COMP%], .mck-input[_ngcontent-%COMP%] {\n border-radius: 0;\n border: 1px solid #B3B3B3;\n}\n.mck-bordered[_ngcontent-%COMP%]:hover, .mck-input[_ngcontent-%COMP%]:hover {\n border-color: #464646;\n}\n.mck-bordered[_ngcontent-%COMP%]:focus, .mck-input[_ngcontent-%COMP%]:focus {\n border-color: #1F40E6;\n}\n.mck-bordered[disabled=true][_ngcontent-%COMP%], .mck-input[disabled=true][_ngcontent-%COMP%] {\n pointer-events: none;\n border-color: #f0f0f0;\n color: #ccc;\n}\n.mck-date-display[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n height: 43px;\n padding: 1rem 0.5rem;\n transition: border 200ms, box-shadow 200ms;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-form-field-wrapper[_ngcontent-%COMP%] {\n padding-bottom: 0.5rem;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] {\n min-width: auto !important;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n width: 100%;\n padding-top: 0.7rem !important;\n padding-bottom: 0.5rem !important;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] {\n min-height: 2.7rem;\n color: rgba(0, 0, 0, 0.27);\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n margin-top: 2px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-flex[_ngcontent-%COMP%] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-flex[_ngcontent-%COMP%] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 2rem;\n min-height: 2rem;\n }\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 2rem;\n min-height: 2rem;\n }\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field.mat-s[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-select[_ngcontent-%COMP%] {\n margin-top: 0.2rem;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-select[_ngcontent-%COMP%] .mat-select-arrow[_ngcontent-%COMP%] {\n visibility: hidden;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-select[_ngcontent-%COMP%] .mat-select-value[_ngcontent-%COMP%] > .mat-select-value-text[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 400;\n font-family: \"McKinsey Sans\";\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #B3B3B3;\n border-width: 1px;\n border-radius: 0;\n}\n.mck-form-input[_ngcontent-%COMP%] .available[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .available[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .available[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #3aa537;\n}\n.mck-form-input[_ngcontent-%COMP%] .booked[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .booked[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .booked[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #e12e41;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline-thick[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline-thick[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline-thick[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #1F40E6;\n border-width: 1px;\n border-radius: 0;\n}\n.mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-wrapper[_ngcontent-%COMP%] {\n padding-bottom: 0;\n}\n.mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #E12E40;\n}\n.mck-form-input[_ngcontent-%COMP%] mck-close-icon.mat-chip-remove.mat-chip-remove[_ngcontent-%COMP%] {\n opacity: 1;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-label[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 400;\n text-align: left;\n margin-bottom: 0.5rem;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-radio-button[_ngcontent-%COMP%] {\n margin-right: 1rem;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-radio-label-content[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-radio-outer-circle[_ngcontent-%COMP%] {\n border-color: #1F40E6 !important;\n border-width: 1px !important;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-radio-inner-circle[_ngcontent-%COMP%] {\n background-color: #1F40E6 !important;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-radio-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-radio-group[_ngcontent-%COMP%] > mat-radio-button[_ngcontent-%COMP%]:last-child {\n margin-right: 0;\n}\n.mck-form-input-container[_ngcontent-%COMP%] > .mck-form-input[_ngcontent-%COMP%], .mck-form-input-container[_ngcontent-%COMP%] > mck-select[_ngcontent-%COMP%] {\n margin-bottom: 0.5rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-form-input-container[_ngcontent-%COMP%] > .mck-form-input[_ngcontent-%COMP%], .mck-form-input-container[_ngcontent-%COMP%] > mck-select[_ngcontent-%COMP%] {\n margin-bottom: 1.75rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-form-input-container[_ngcontent-%COMP%] > .mck-form-input[_ngcontent-%COMP%], .mck-form-input-container[_ngcontent-%COMP%] > mck-select[_ngcontent-%COMP%] {\n margin-bottom: 1.75rem;\n }\n}\n.mck-form-input-container[_ngcontent-%COMP%] .mck-radio-select[_ngcontent-%COMP%] {\n margin-bottom: 1rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-form-input-container[_ngcontent-%COMP%] .mck-radio-select[_ngcontent-%COMP%] {\n margin-bottom: 1.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-form-input-container[_ngcontent-%COMP%] .mck-radio-select[_ngcontent-%COMP%] {\n margin-bottom: 1.5rem;\n }\n}\n.mck-form-input[_ngcontent-%COMP%] mat-chip.mat-standard-chip.mat-standard-chip[_ngcontent-%COMP%] {\n border-radius: 3px;\n min-height: 1.5rem;\n background-color: #333333;\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 0.75rem;\n line-height: 1.5rem;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input[_ngcontent-%COMP%] mat-chip.mat-standard-chip.mat-standard-chip[_ngcontent-%COMP%] {\n line-height: inherit;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input[_ngcontent-%COMP%] mat-chip.mat-standard-chip.mat-standard-chip[_ngcontent-%COMP%] {\n line-height: inherit;\n }\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox.mat-checkbox.mat-checkbox[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] {\n background-color: #D0D0D0;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n color: #B3B3B3;\n}\n.mck-borderless[_ngcontent-%COMP%] {\n border: none;\n}\n.mck-borderless[_ngcontent-%COMP%]:hover, .mck-borderless[_ngcontent-%COMP%]:focus, .mck-borderless[_ngcontent-%COMP%]:disabled {\n border: none;\n}\n.mck-select-panel[_ngcontent-%COMP%] {\n margin-top: 0 !important;\n border-radius: unset !important;\n margin-top: 35px !important;\n margin-left: 5px;\n}\n.mck-select-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] {\n padding-left: 0;\n padding-right: 0;\n}\n.mck-select-panel[_ngcontent-%COMP%] mat-option.mat-option-text[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-select-panel.mck-margin-top[_ngcontent-%COMP%] {\n margin-top: 1.5rem !important;\n}\n.mck-checkbox-panel.mat-autocomplete-panel.mat-autocomplete-panel[_ngcontent-%COMP%] {\n top: -10px;\n max-height: 278px;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option.mck-truncated[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] {\n padding-left: 0;\n padding-right: 0;\n line-height: 24px;\n height: unset;\n min-height: 36px;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n flex: 1;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n text-align: left;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option.mck-checkbox-group-header[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option.mck-checkbox-group-child[_ngcontent-%COMP%] {\n margin-left: 2rem;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] label.mat-checkbox-layout[_ngcontent-%COMP%] {\n width: 100%;\n padding-left: 16px;\n padding-right: 16px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] label.mat-checkbox-layout[_ngcontent-%COMP%] {\n padding-left: 2px;\n padding-right: 2px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] label.mat-checkbox-layout[_ngcontent-%COMP%] {\n padding-left: 2px;\n padding-right: 2px;\n }\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] div.mat-checkbox-frame.mat-checkbox-frame[_ngcontent-%COMP%] {\n border: 1px solid #B3B3B3;\n border-radius: 0;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox.mat-checkbox-checked[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background[_ngcontent-%COMP%] {\n background-color: #D0D0D0;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n color: #B3B3B3;\n text-align: left;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] .mat-checkbox-inner-container[_ngcontent-%COMP%] {\n width: 1.25rem;\n height: 1.25rem;\n}\n.mck-select-option-selected[_ngcontent-%COMP%] {\n font-weight: 500;\n font-family: \"McKinsey Sans\";\n color: black;\n background-color: #E6E6E6;\n}\n.mck-select-option-selected[_ngcontent-%COMP%] .mck-spacer-content[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n margin-right: 0.75rem;\n}\n.mck-select-option-unselected[_ngcontent-%COMP%] {\n font-weight: 400;\n font-family: \"McKinsey Sans\";\n}\n.mck-select-option-unselected.mck-ignore-disabled[_ngcontent-%COMP%] {\n color: black;\n}\n.mck-select-option-unselected[_ngcontent-%COMP%] .mck-spacer-content[_ngcontent-%COMP%] {\n visibility: hidden;\n margin-right: 0.75rem;\n}\n.mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n height: 40px;\n border-radius: 0;\n border: none;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n }\n}\n.mck-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: normal;\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n }\n}\n.mck-button.mat-button.mat-button.mck-short[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button[_ngcontent-%COMP%] {\n height: 32px;\n min-width: 83px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-short[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-short[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%] {\n height: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%] {\n height: 40px;\n }\n}\n.mck-button.mat-button.mat-button.mck-square[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-square[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n min-width: 32px;\n padding: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-square[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-square[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-square[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-square[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n }\n}\n.mck-primary-button.mat-button.mat-button[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n}\n.mck-primary-button.mat-button.mat-button[disabled][_ngcontent-%COMP%], .mck-primary-button.mat-button.mat-button.disabled[_ngcontent-%COMP%] {\n background-color: #D0D0D0;\n color: #757575;\n cursor: not-allowed;\n}\n.mck-primary-button.mat-button.mat-button[disabled][_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-primary-button.mat-button.mat-button.disabled[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: #757575;\n}\n.mck-primary-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: white;\n}\n.mck-secondary-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] {\n border: 1px solid #D0D0D0;\n border-radius: 0;\n border: 1px solid #2251FF;\n color: #2251FF;\n}\n.mck-secondary-button.mat-stroked-button.mat-stroked-button[disabled][_ngcontent-%COMP%], .mck-secondary-button.mat-stroked-button.mat-stroked-button.disabled[_ngcontent-%COMP%] {\n border: 1px solid #D0D0D0;\n color: #333333;\n cursor: not-allowed;\n}\n.mck-secondary-button.mat-button.mat-button[_ngcontent-%COMP%] {\n background-color: white;\n}\n.mck-secondary-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: #333333;\n}\n.mck-warning-button.mat-button.mat-button[_ngcontent-%COMP%] {\n background-color: #ffd048;\n}\n.mck-warning-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: black;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] {\n border: 2px solid #B3B3B3;\n border-radius: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding-left: 1.75rem;\n padding-right: 1.75rem;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%] {\n height: 32px;\n min-width: 83px;\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-primary[_ngcontent-%COMP%] {\n border-width: 1px;\n border-color: #1F40E6;\n color: #1F40E6;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-thin-border-light[_ngcontent-%COMP%] {\n border-color: #D0D0D0;\n border-width: 1px;\n}\n.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: normal;\n color: #1F40E6;\n}\n.mck-toggle-button[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n border: 1px solid #B3B3B3;\n border-color: #D0D0D0;\n min-width: 59px;\n background-color: white;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-toggle-button[_ngcontent-%COMP%] {\n min-width: 132px;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-toggle-button[_ngcontent-%COMP%] {\n min-width: 132px;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n }\n}\n.mck-toggle-button-selected[_ngcontent-%COMP%] {\n color: #1F40E6;\n}\n.mck-date-picker[_ngcontent-%COMP%] {\n width: 100% !important;\n height: 100% !important;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-date-picker[_ngcontent-%COMP%] {\n max-width: 23rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-date-picker[_ngcontent-%COMP%] {\n max-width: 23rem;\n }\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n color: #051C2C;\n margin-top: 1.25rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] {\n width: 2.375rem;\n height: 2rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] > .icon.icon[_ngcontent-%COMP%] {\n width: 1rem;\n height: 1rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] > .next.next[_ngcontent-%COMP%] {\n background-image: url('arrow-forward.svg');\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] > .previous.previous[_ngcontent-%COMP%] {\n background-image: url('arrow-backward.svg');\n}\n.mck-date-picker[_ngcontent-%COMP%] > .month[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .week[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n color: #767676;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date[_ngcontent-%COMP%] > .dot[_ngcontent-%COMP%] {\n display: none;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date.disabled[_ngcontent-%COMP%] {\n background-color: transparent;\n border-radius: 0;\n color: #767676;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date.active[_ngcontent-%COMP%] {\n border-radius: 0;\n background-color: #1F40E6;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date.non-month[_ngcontent-%COMP%] {\n color: #767676;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-spacer-content-expand-mobile[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-spacer-content-expand-mobile[_ngcontent-%COMP%] {\n display: none;\n }\n}\n.mck-spacer-content-divider[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n border-radius: 0;\n border-top: 1px solid #E6E6E6;\n border-bottom: 1px solid #E6E6E6;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] {\n background-color: #F0F0F0;\n border-bottom: none;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n background-image: url('chevron-close.svg');\n background-size: contain;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-close-large.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-close-large.svg');\n background-size: contain;\n }\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] {\n padding-left: 0;\n padding-right: 0;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 0.75rem;\n line-height: 1.4;\n padding-left: 1rem;\n padding-right: 1rem;\n text-align: left;\n color: black;\n font-weight: normal;\n padding-bottom: 0.5rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-size: 1rem;\n line-height: 1.6;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-size: 1rem;\n line-height: 1.6;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n }\n}\n.mck-expansion-panel[_ngcontent-%COMP%] mat-expansion-panel-header[_ngcontent-%COMP%] {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.mck-expansion-panel[_ngcontent-%COMP%] mat-expansion-panel-header[_ngcontent-%COMP%] > span.mat-content[_ngcontent-%COMP%] {\n align-items: center;\n}\n.mck-expansion-panel[_ngcontent-%COMP%] mat-panel-title[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n color: black;\n font-weight: normal;\n}\n.mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n background-image: url('chevron-open.svg');\n background-size: contain;\n transform: rotate(0deg);\n transition: transform 0.5s ease;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-open-large.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-open-large.svg');\n background-size: contain;\n }\n}\n.mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon.expanded[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n}\n.mck-icon-fill-open[_ngcontent-%COMP%] {\n fill: #1F40E6;\n}\n.mck-icon-fill-close[_ngcontent-%COMP%] {\n fill: #767676;\n}\n.mck-icon-fill-black[_ngcontent-%COMP%] {\n fill: black;\n stroke: black;\n}\n.mck-icon-fill-white[_ngcontent-%COMP%] {\n fill: white;\n stroke: white;\n}\n.mck-icon-fill-gray[_ngcontent-%COMP%] {\n fill: #333333;\n stroke: #333333;\n}\n.mck-min[_ngcontent-%COMP%] {\n max-width: 581px !important;\n width: 80vw;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-min[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-min[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-min[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-min[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-noexpand[_ngcontent-%COMP%] {\n max-width: 581px !important;\n width: 80vw !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-noexpand[_ngcontent-%COMP%] {\n width: calc(100vw - 32px) !important;\n max-height: 100vh;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-noexpand[_ngcontent-%COMP%] {\n width: calc(100vw - 32px) !important;\n max-height: 100vh;\n }\n}\n.mck-modal[_ngcontent-%COMP%] {\n max-width: 800px !important;\n width: 80vw;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-mini[_ngcontent-%COMP%] {\n max-width: 580px !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-mini[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-mini[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-mini[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-mini[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-survey[_ngcontent-%COMP%] {\n max-width: 691px !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-survey[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-survey[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-wide[_ngcontent-%COMP%] {\n max-width: 1024px !important;\n width: 100vw;\n height: 95vh;\n max-height: 100vh;\n}\n.mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] {\n background-color: #F8F9FA;\n padding: 0 !important;\n overflow: hidden;\n}\n.mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] {\n position: relative;\n right: 32px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-wide-manage-booking[_ngcontent-%COMP%] {\n max-width: 1250px !important;\n width: 100vw;\n max-height: 95vh;\n}\n.mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] {\n background-color: #F8F9FA;\n padding: 0 !important;\n overflow: hidden;\n}\n.mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] {\n position: relative;\n right: 32px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-alert[_ngcontent-%COMP%] {\n max-width: 100vw !important;\n width: 100vw;\n margin-left: 1rem;\n margin-right: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-alert[_ngcontent-%COMP%] {\n max-width: 100vw !important;\n width: 100vw;\n margin-left: 1rem;\n margin-right: 1rem;\n }\n}\n.mck-alert-backdrop[_ngcontent-%COMP%] {\n background: rgba(5, 28, 44, 0.85);\n}\n.mck-slide-toggle.mat-slide-toggle.mat-checked[_ngcontent-%COMP%]:not(.mat-disabled) .mat-slide-toggle-bar.mat-slide-toggle-bar[_ngcontent-%COMP%] {\n background-color: #2251FF;\n}\n.mck-slide-toggle.mat-slide-toggle.mat-checked[_ngcontent-%COMP%]:not(.mat-disabled) .mat-slide-toggle-thumb.mat-slide-toggle-thumb[_ngcontent-%COMP%] {\n background-color: white;\n}\n.mck-slide-toggle.mat-slide-toggle[_ngcontent-%COMP%] {\n height: auto;\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-content.mat-slide-toggle-content[_ngcontent-%COMP%] {\n flex: 1;\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n white-space: normal;\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-thumb.mat-slide-toggle-thumb[_ngcontent-%COMP%] {\n width: 14px;\n height: 14px;\n transform: translate(50%, 50%);\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-thumb-container.mat-slide-toggle-thumb-container[_ngcontent-%COMP%] {\n top: -4px;\n left: -4px;\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-bar.mat-slide-toggle-bar[_ngcontent-%COMP%] {\n height: 20px;\n background-color: #D0D0D0;\n border-radius: 20px;\n}\n.mck-skeleton[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n}\n.mck-skeleton-checkbox[_ngcontent-%COMP%] {\n float: left;\n}\n.mck-skeleton-checkbox[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 20px;\n height: 20px;\n margin-bottom: 0;\n}\n.mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 100vw;\n margin-bottom: 0;\n max-width: 215px;\n}\n.mck-skeleton-image[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 81px;\n height: 82px;\n margin-bottom: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-skeleton-image[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 219px;\n height: 119px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-skeleton-image[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 219px;\n height: 119px;\n }\n}\n.mck-skeleton-status[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 117px;\n height: 78px;\n margin-top: 10px;\n margin-bottom: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-skeleton-status[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 117px;\n height: 78px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-skeleton-status[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 117px;\n height: 78px;\n }\n}\n.mck-skeleton-line-1[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 23px;\n max-width: 176px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-1[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 219px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-1[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 219px;\n }\n}\n.mck-skeleton-line-2[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 165px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-2[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-2[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n.mck-skeleton-line-3[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 147px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-3[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-3[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n.mck-skeleton-line-30p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 30%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-30p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 30%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-30p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 30%;\n }\n}\n.mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-45p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 45%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-45p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 45%;\n margin-right: 45%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-45p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 45%;\n margin-right: 45%;\n }\n}\n.mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-50p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 50%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-50p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 50%;\n margin-right: 45%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-50p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 50%;\n margin-right: 45%;\n }\n}\n.mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-60p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 60%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-60p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 60%;\n margin-right: 35%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-60p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 60%;\n margin-right: 35%;\n }\n}\n.mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-70p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 70%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-70p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 70%;\n margin-right: 25%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-70p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 70%;\n margin-right: 25%;\n }\n}\n.mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-80p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 80%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-80p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 80%;\n margin-right: 15%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-80p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 80%;\n margin-right: 15%;\n }\n}\n.mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-90p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 90%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-90p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 90%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-90p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 90%;\n }\n}\n.mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-load-more[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n width: calc(100vw - (2 * 1rem));\n height: 40px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-load-more[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 320px;\n height: 50px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-load-more[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 320px;\n height: 50px;\n }\n}\n.mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n width: calc(100vw - (2 * 1rem));\n height: 40px;\n max-width: none;\n width: 100%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: none;\n width: 100%;\n height: 50px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: none;\n width: 100%;\n height: 50px;\n }\n}\n.mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 124px;\n margin-bottom: 4px;\n}\n.mck-heading-5[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 1.5rem;\n line-height: 1.333;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-heading-5[_ngcontent-%COMP%] {\n font-size: 1.75rem;\n line-height: 1.142;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-heading-5[_ngcontent-%COMP%] {\n font-size: 1.75rem;\n line-height: 1.142;\n }\n}\nngx-mat-select-search[_ngcontent-%COMP%] .mat-select-search-no-entries-found[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\nngx-mat-select-search[_ngcontent-%COMP%] .mat-select-search-input[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\nngx-mat-select-search[_ngcontent-%COMP%] button.mat-button.mat-select-search-clear[_ngcontent-%COMP%] {\n background-color: transparent;\n border: none;\n color: black;\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 16px;\n height: 18px;\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n height: 1.5rem;\n border: 4px solid rgba(0, 0, 0, 0);\n background-clip: padding-box;\n border-radius: 8px;\n background-color: #757575;\n -webkit-box-shadow: inset -1px -1px 0px rgba(0, 0, 0, 0.05), inset 1px 1px 0px rgba(0, 0, 0, 0.05);\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar-button {\n width: 0;\n height: 0;\n display: none;\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar-corner {\n background-color: transparent;\n}\nheader[_ngcontent-%COMP%] {\n z-index: 2;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mb-block[_ngcontent-%COMP%] {\n display: block;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mb-block[_ngcontent-%COMP%] {\n display: block;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mb-bottom[_ngcontent-%COMP%] {\n padding-bottom: 110px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mb-bottom[_ngcontent-%COMP%] {\n padding-bottom: 110px;\n }\n}\n.map-filters-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n top: 5px;\n}\n.map-filters-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] {\n height: 48px;\n background-color: white;\n}\n.map-filters-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n padding-top: 0.5rem !important;\n}\n.office-level-row[_ngcontent-%COMP%] .mat-select-placeholder[_ngcontent-%COMP%] {\n color: #333333;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .office-level-row[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .office-level-row[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 45px !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .office-level-row[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .office-level-row[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 45px !important;\n }\n}\n.office-level-row[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n display: block;\n top: 0 !important;\n width: 44px !important;\n right: -11px !important;\n background: transparent !important;\n border-width: 0 0 0 1px;\n border-color: #c6c6c6;\n border-style: solid;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .office-level-row[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 1px) !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .office-level-row[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 1px) !important;\n }\n}\n.office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n background: #F0F0F0 !important;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 2px) !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 2px) !important;\n }\n}\n.office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-chevron[_ngcontent-%COMP%] {\n opacity: 0.5;\n margin-left: 10px;\n}\n.office-level-row[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .office-level-row[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .map-controls[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .map-controls[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n display: flex !important;\n width: 100% !important;\n justify-content: space-between !important;\n}\n.booking-form-container[_ngcontent-%COMP%] {\n overflow-y: auto;\n max-height: calc(100vh - 310px);\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-form-container[_ngcontent-%COMP%] {\n max-height: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-form-container[_ngcontent-%COMP%] {\n max-height: none;\n }\n}\n.booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-label[_ngcontent-%COMP%], .booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] .mat-radio-label-content[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\" !important;\n color: #333333;\n}\n.booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::-moz-placeholder {\n font-family: \"McKinsey Sans\";\n color: #B3B3B3;\n}\n.booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%], .booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder {\n font-family: \"McKinsey Sans\";\n color: #B3B3B3;\n}\nform[_ngcontent-%COMP%] {\n width: 100%;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n form[_ngcontent-%COMP%] {\n padding: 0 10px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n form[_ngcontent-%COMP%] {\n padding: 0 10px;\n }\n}\n.mck-row-flow[_ngcontent-%COMP%] {\n display: flex;\n}\n.mck-row-flow[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 180px;\n flex-flow: column;\n}\n.mck-row-flow[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 20px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-row-flow[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-row-flow[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 0;\n }\n}\n.company-container[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 0px;\n}\n.row-with-spacing[_ngcontent-%COMP%] {\n margin-bottom: 1.5rem;\n align-items: flex-start;\n}\n.row-with-spacing[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n}\n.row-with-spacing[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n color: #e12e41;\n margin: 0;\n}\n.row-with-spacing[_ngcontent-%COMP%] p.checking[_ngcontent-%COMP%] {\n color: #000000;\n}\n.row-with-spacing[_ngcontent-%COMP%] p.available[_ngcontent-%COMP%] {\n color: #3aa537;\n}\n.row-with-spacing[_ngcontent-%COMP%] p.sb-status[_ngcontent-%COMP%] {\n padding: 0 10px 0 34px;\n position: relative;\n}\n.row-with-spacing[_ngcontent-%COMP%] p.sb-status[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n position: absolute;\n top: 4px;\n left: 4px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .flex-row[_ngcontent-%COMP%] {\n justify-content: space-between;\n align-items: flex-end;\n margin-right: 1em;\n }\n .flex-row[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 47%;\n min-width: 40%;\n margin-right: 0;\n box-sizing: border-box;\n flex: none;\n }\n .flex-row[_ngcontent-%COMP%] .company-field[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .flex-row[_ngcontent-%COMP%] {\n justify-content: space-between;\n align-items: flex-end;\n margin-right: 1em;\n }\n .flex-row[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 47%;\n min-width: 40%;\n margin-right: 0;\n box-sizing: border-box;\n flex: none;\n }\n .flex-row[_ngcontent-%COMP%] .company-field[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n.attendees-input[_ngcontent-%COMP%] {\n margin-right: 1em;\n display: block;\n}\nmat-hint[_ngcontent-%COMP%] {\n position: relative;\n}\nmat-hint[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: #1F40E6;\n font-size: 11px;\n cursor: pointer;\n text-decoration: underline;\n}\nmat-hint[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n width: 429px;\n background-color: black;\n color: white;\n position: absolute;\n padding: 10px;\n top: 26px;\n left: 0;\n z-index: 2;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n mat-hint[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n width: 100%;\n position: relative;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n mat-hint[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n width: 100%;\n position: relative;\n }\n}\nmat-hint[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] .triangle[_ngcontent-%COMP%] {\n position: absolute;\n top: -6px;\n left: 12px;\n width: 12px;\n height: 12px;\n background-color: black;\n transform: rotate(45deg);\n}\n.mck-form-input[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-top: 1.25em;\n margin-right: 1em;\n font-weight: 400;\n font-size: 16px;\n width: 100%;\n margin-top: 0;\n margin-bottom: 0.5em;\n}\n.mck-form-input[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: #d1484f;\n}\n.mck-form-input.error[_ngcontent-%COMP%] {\n color: #e53935;\n}\nmat-form-field[_ngcontent-%COMP%] {\n flex: 1;\n}\nmat-form-field.booked[_ngcontent-%COMP%] {\n color: #d1484f;\n}\nmat-form-field.available[_ngcontent-%COMP%] {\n color: #3aa537;\n}\nmat-form-field[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n font-size: 16px;\n padding-top: 8px;\n}\nmat-form-field[_ngcontent-%COMP%] mat-error[_ngcontent-%COMP%] {\n padding-top: 12px;\n font-size: 11px;\n font-weight: 400;\n position: relative;\n height: 40px;\n}\nmat-form-field[_ngcontent-%COMP%] mat-error[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n position: relative;\n left: 10px;\n top: 2px;\n}\nmat-form-field[_ngcontent-%COMP%] mat-error[_ngcontent-%COMP%] .error-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: -12px;\n width: 16px;\n height: 16px;\n background-image: url('error-close.svg');\n background-size: contain;\n}\nmat-form-field[_ngcontent-%COMP%] .icon[_ngcontent-%COMP%] {\n width: 8px;\n}\nmat-tab[_ngcontent-%COMP%] {\n display: none !important;\n}\n.field[_ngcontent-%COMP%] {\n display: flex;\n min-width: 14em;\n flex: 1;\n flex-wrap: wrap;\n}\ntextarea[_ngcontent-%COMP%] {\n min-height: 7em;\n}\n.fieldset[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n}\n.fieldset[_ngcontent-%COMP%] .field[_ngcontent-%COMP%] {\n margin: 0 0.25em;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .fieldset[_ngcontent-%COMP%] .field[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .fieldset[_ngcontent-%COMP%] .field[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n.fieldset[_ngcontent-%COMP%] .field[_ngcontent-%COMP%]:first-child {\n margin-left: 0;\n}\n.fieldset[_ngcontent-%COMP%] .field[_ngcontent-%COMP%]:last-child {\n margin-right: 0;\n}\n.error[_ngcontent-%COMP%] {\n color: #e53935;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .flex-container[_ngcontent-%COMP%] .full-width[_ngcontent-%COMP%] {\n min-width: calc(100% - 1em);\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .flex-container[_ngcontent-%COMP%] .full-width[_ngcontent-%COMP%] {\n min-width: calc(100% - 1em);\n }\n}\n.flex-container[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] div div {\n height: 47px;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWJvb2tpbmctZGV0YWlscy1mb3JtL3Jvb20tYm9va2luZy1kZXRhaWxzLWZvcm0uY29tcG9uZW50LnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9ub2RlX21vZHVsZXMvQGFuZ3VsYXIvbWF0ZXJpYWwvX3RoZW1pbmcuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9zdHlsZXMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2FwcHMvc3RhZmYvc3JjL2FwcC9ib29raW5nL3Jvb20tYm9va2luZy1kZXRhaWxzLWZvcm0vcm9vbS1ib29raW5nLWRldGFpbHMtZm9ybS5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUZ6UkE7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDeUJsQjtBRHVFQTs7c0JBQUE7QUdtekNBLGtDQUFBO0FBdWlEQSwyQ0FBQTtBQXdDQSxxQkFBQTtBQzk5RlE7RUFFSSxhQUFBO0FINkJaO0FHeEJRO0VBQ0ksV0FBQTtFQUNBLFlBQUE7QUgwQlo7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SFE7RUFDSSxZQUFBO0VBQ0EseUJKcmlDbUI7RUlzaUNuQixtQkFBQTtBSDhIWjtBRzFISTtFRjVzQkEseUJGelZjO0FDa3FDbEI7QUcxSFE7RUFDSSxXQUFBO0FINEhaO0FHM0hZO0VGanRCUix5QkZ6VmM7RUk0aUNGLFdBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7QUg2SGhCO0FHekhRO0VGenRCSix5QkZ6VmM7RUlvakNOLFlBQUE7RUFDQSxnQkFBQTtFQUNBLGdCQUFBO0FIMkhaO0FHeEhRO0VGaHVCSix5QkZ6VmM7RUU2VmQsV0FBQTtFQUNBLFlBQUE7RUU4dEJRLGdCQUFBO0FIMkhaO0FDM3JDWTtFRTZqQ0o7SUZ4dEJBLFlBQUE7SUFDQSxhQUFBO0VEMDFCTjtBQUNGO0FDanNDWTtFRTZqQ0o7SUZ4dEJBLFlBQUE7SUFDQSxhQUFBO0VEZzJCTjtBQUNGO0FHcElRO0VGdHVCSix5QkZ6VmM7RUV1V2QsWUFBQTtFQUNBLFlBQUE7RUUwdEJRLGdCQUFBO0VBQ0EsZ0JBQUE7QUh1SVo7QUM5c0NZO0VFbWtDSjtJRnB0QkEsWUFBQTtJQUNBLFlBQUE7RURtMkJOO0FBQ0Y7QUNwdENZO0VFbWtDSjtJRnB0QkEsWUFBQTtJQUNBLFlBQUE7RUR5MkJOO0FBQ0Y7QUdoSlE7RUY3dUJKLHlCRnpWYztFSXdrQ04sWUFBQTtFQUNBLGdCQUFBO0FIa0paO0FDL3RDWTtFRTBrQ0o7SUFNUSxnQkFBQTtFSG1KZDtBQUNGO0FDcHVDWTtFRTBrQ0o7SUFNUSxnQkFBQTtFSHdKZDtBQUNGO0FHckpRO0VGdnZCSix5QkZ6VmM7RUlrbENOLFlBQUE7RUFDQSxnQkFBQTtBSHVKWjtBQzl1Q1k7RUVvbENKO0lBTVEsZ0JBQUE7RUh3SmQ7QUFDRjtBQ252Q1k7RUVvbENKO0lBTVEsZ0JBQUE7RUg2SmQ7QUFDRjtBRzFKUTtFRmp3QkoseUJGelZjO0VJNGxDTixZQUFBO0VBQ0EsZ0JBQUE7QUg0Slo7QUM3dkNZO0VFOGxDSjtJQU1RLGdCQUFBO0VINkpkO0FBQ0Y7QUNsd0NZO0VFOGxDSjtJQU1RLGdCQUFBO0VIa0tkO0FBQ0Y7QUc5Slk7RUY1d0JSLHlCRnpWYztFSXVtQ0YsWUFBQTtFQUNBLGNBQUE7QUhnS2hCO0FDNXdDWTtFRXltQ0E7SUFLUSxjQUFBO0VIa0tsQjtBQUNGO0FDanhDWTtFRXltQ0E7SUFLUSxjQUFBO0VIdUtsQjtBQUNGO0FHcEtnQjtFQUNJLFlBQUE7RUFDQSxrQkFBQTtBSHNLcEI7QUdoS1k7RUY3eEJSLHlCRnpWYztFSXduQ0YsWUFBQTtFQUNBLGNBQUE7QUhrS2hCO0FDL3hDWTtFRTBuQ0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUhvS2xCO0FBQ0Y7QUNyeUNZO0VFMG5DQTtJQUtRLGNBQUE7SUFDQSxpQkFBQTtFSDBLbEI7QUFDRjtBR3ZLZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUh5S3BCO0FHbktZO0VGL3lCUix5QkZ6VmM7RUkwb0NGLFlBQUE7RUFDQSxjQUFBO0FIcUtoQjtBQ3B6Q1k7RUU0b0NBO0lBS1EsY0FBQTtJQUNBLGlCQUFBO0VIdUtsQjtBQUNGO0FDMXpDWTtFRTRvQ0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUg2S2xCO0FBQ0Y7QUcxS2dCO0VBQ0ksWUFBQTtFQUNBLGtCQUFBO0FINEtwQjtBR3hLZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUgwS3BCO0FHcEtZO0VGdjBCUix5QkZ6VmM7RUlrcUNGLFlBQUE7RUFDQSxjQUFBO0FIc0toQjtBQzcwQ1k7RUVvcUNBO0lBS1EsY0FBQTtJQUNBLGlCQUFBO0VId0tsQjtBQUNGO0FDbjFDWTtFRW9xQ0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUg4S2xCO0FBQ0Y7QUczS2dCO0VBQ0ksWUFBQTtFQUNBLGtCQUFBO0FINktwQjtBR3pLZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUgyS3BCO0FHcktZO0VGLzFCUix5QkZ6VmM7RUkwckNGLFlBQUE7RUFDQSxjQUFBO0FIdUtoQjtBQ3QyQ1k7RUU0ckNBO0lBS1EsY0FBQTtJQUNBLGlCQUFBO0VIeUtsQjtBQUNGO0FDNTJDWTtFRTRyQ0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUgrS2xCO0FBQ0Y7QUc1S2dCO0VBQ0ksWUFBQTtFQUNBLGtCQUFBO0FIOEtwQjtBRzFLZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUg0S3BCO0FHdEtZO0VGdjNCUix5QkZ6VmM7RUlrdENGLFlBQUE7RUFDQSxjQUFBO0FId0toQjtBQy8zQ1k7RUVvdENBO0lBS1EsY0FBQTtJQUNBLGlCQUFBO0VIMEtsQjtBQUNGO0FDcjRDWTtFRW90Q0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUhnTGxCO0FBQ0Y7QUc3S2dCO0VBQ0ksWUFBQTtFQUNBLGtCQUFBO0FIK0twQjtBRzNLZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUg2S3BCO0FHdktZO0VGLzRCUix5QkZ6VmM7RUkwdUNGLFlBQUE7RUFDQSxjQUFBO0FIeUtoQjtBQ3g1Q1k7RUU0dUNBO0lBS1EsY0FBQTtFSDJLbEI7QUFDRjtBQzc1Q1k7RUU0dUNBO0lBS1EsY0FBQTtFSGdMbEI7QUFDRjtBRzdLZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUgrS3BCO0FHMUtRO0VGLzVCSix5QkZ6VmM7RUkwdkNOLGtCSmh0Q007RUlpdENOLHFCSmp0Q007RUlrdENOLCtCQUFBO0VBQ0EsWUFBQTtBSDRLWjtBQzc2Q1k7RUU0dkNKO0lBUVEsZ0JBQUE7SUFDQSxZQUFBO0VINktkO0FBQ0Y7QUNuN0NZO0VFNHZDSjtJQVFRLGdCQUFBO0lBQ0EsWUFBQTtFSG1MZDtBQUNGO0FHL0tZO0VGNzZCUix5QkZ6VmM7RUl3d0NGLGtCSjl0Q0U7RUkrdENGLHFCSi90Q0U7RUlndUNGLCtCQUFBO0VBQ0EsWUFBQTtFQUNBLGVBQUE7RUFDQSxXQUFBO0FIaUxoQjtBQ2w4Q1k7RUUwd0NBO0lBU1EsZUFBQTtJQUNBLFdBQUE7SUFDQSxZQUFBO0VIbUxsQjtBQUNGO0FDejhDWTtFRTB3Q0E7SUFTUSxlQUFBO0lBQ0EsV0FBQTtJQUNBLFlBQUE7RUgwTGxCO0FBQ0Y7QUd4TG9CO0VBQ0ksYUFBQTtFQUNBLGtCQUFBO0FIMEx4QjtBRzlLSTtFRnpzQ0EsNEJBWmlCO0VBYWpCLGtCQUFBO0VBQ0Esa0JBQUE7RUFtSEEsaUJBQUE7RUFDQSxrQkFBQTtBRHl3Q0o7QUM1OUNZO0VFc3lDUjtJRmhsQ0ksa0JBQUE7SUFDQSxrQkFBQTtFRDB3Q047QUFDRjtBQ2wrQ1k7RUVzeUNSO0lGaGxDSSxrQkFBQTtJQUNBLGtCQUFBO0VEZ3hDTjtBQUNGO0FHNUxJO0VGOWlDQSxrQkFBQTtFQUNBLGtCQUFBO0VBQ0EsOERBOUtjO0VBK0tkLGVBQUE7RUFDQSxtQkFBQTtFRTRpQ0ksZ0JBQUE7QUhtTVI7QUdoTUk7RUZuakNBLGtCQUFBO0VBQ0Esa0JBQUE7RUFDQSw4REE5S2M7RUErS2QsZUFBQTtFQUNBLG1CQUFBO0VFaWpDSSxnQkFBQTtBSHNNUjtBR25NSTtFQUNJLDZCQUFBO0VBQ0EsWUFBQTtFQUNBLFlBQUE7QUhxTVI7QUdqTUE7RUFDSSxXQUFBO0VBQ0EsWUFBQTtBSG9NSjtBR2xNQTtFQUNJLGNKeHdDYTtFSXl3Q2Isa0NBQUE7RUFDQSw0QkFBQTtFQUNBLGtCQUFBO0VBQ0EseUJKMXpDYztFSTJ6Q2Qsa0dBQUE7QUhxTUo7QUduTUE7RUFDSSxRQUFBO0VBQ0EsU0FBQTtFQUNBLGFBQUE7QUhzTUo7QUdwTUE7RUFDSSw2QkFBQTtBSHVNSjtBR3JNQTtFQUNJLFVBQUE7QUh3TUo7QUN0aERZO0VFZzFDWjtJQUVRLGNBQUE7RUh5TU47QUFDRjtBQzVoRFk7RUVnMUNaO0lBRVEsY0FBQTtFSDhNTjtBQUNGO0FDamlEWTtFRXExQ1o7SUFFUSxxQkFBQTtFSCtNTjtBQUNGO0FDdmlEWTtFRXExQ1o7SUFFUSxxQkFBQTtFSG9OTjtBQUNGO0FHaE5JO0VBQ0ksUUFBQTtBSG1OUjtBR2pOSTtFQUNJLFlBQUE7RUFDQSx1QkFBQTtBSG1OUjtBR2hOSTtFQUNJLDhCQUFBO0FIa05SO0FHNU1JO0VBQ0ksY0FBQTtFQUNBLDRCRmh5Q2E7QUQrK0NyQjtBQzVqRFk7RUVnM0NSO0lBRVEsdUJBQUE7RUg4TVY7QUFDRjtBQ2prRFk7RUVnM0NSO0lBRVEsdUJBQUE7RUhtTlY7QUFDRjtBR2hOSTtFQUNJLGNBQUE7RUFDQSxpQkFBQTtFQUNBLHNCQUFBO0VBQ0EsdUJBQUE7RUFDQSxrQ0FBQTtFQUNBLHVCQUFBO0VBQ0EscUJBQUE7RUFDQSxtQkFBQTtBSGtOUjtBQ3BsRFk7RUUwM0NSO0lBVVEsbUNBQUE7RUhvTlY7QUFDRjtBQ3psRFk7RUUwM0NSO0lBVVEsbUNBQUE7RUh5TlY7QUFDRjtBR3JOUTtFQUNJLDhCQUFBO0FIdU5aO0FDam1EWTtFRXk0Q0o7SUFHUSxtQ0FBQTtFSHlOZDtBQUNGO0FDdG1EWTtFRXk0Q0o7SUFHUSxtQ0FBQTtFSDhOZDtBQUNGO0FHNU5RO0VBQ0ksWUFBQTtFQUNBLGlCQUFBO0FIOE5aO0FHeE5JO0VBQ0ksd0JBQUE7RUFDQSxzQkFBQTtFQUNBLHlDQUFBO0FIMk5SO0FHdk5BO0VBQ0ksZ0JBQUE7RUFDQSwrQkFBQTtBSDBOSjtBQ3RuRFk7RUUwNUNaO0lBSVEsZ0JBQUE7RUg0Tk47QUFDRjtBQzNuRFk7RUUwNUNaO0lBSVEsZ0JBQUE7RUhpT047QUFDRjtBR3ZOSTtFQUNJLHVDQUFBO0VBQ0EsY0FBQTtBSDBOUjtBR3ZOSTtFQUNJLDRCRmwyQ2E7RUVtMkNiLGNBQUE7QUh5TlI7QUczTkk7RUFDSSw0QkZsMkNhO0VFbTJDYixjQUFBO0FIeU5SO0FJaHBEQTtFQUNJLFdBQUE7RUFDQSw0QkhrRmlCO0FEaWtEckI7QUM5b0RZO0VHUFo7SUFJUSxlQUFBO0VKcXBETjtBQUNGO0FDbnBEWTtFR1BaO0lBSVEsZUFBQTtFSjBwRE47QUFDRjtBSXZwREE7RUFDSSxhQUFBO0FKMHBESjtBSXpwREk7RUFDSSxPQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTtBSjJwRFI7QUl6cERJO0VBQ0ksaUJBQUE7QUoycERSO0FDcHFEWTtFR1FSO0lBR1EsY0FBQTtFSjZwRFY7QUFDRjtBQ3pxRFk7RUdRUjtJQUdRLGNBQUE7RUprcURWO0FBQ0Y7QUk3cERJO0VBQ0ksZ0JBQUE7QUpncURSO0FJNXBEQTtFQUNJLHFCTCtCYTtFSzlCYix1QkFBQTtBSitwREo7QUk5cERJO0VBQ0ksNEJIbURhO0FENm1EckI7QUk5cERJO0VBQ0ksY0FBQTtFQUNBLFNBQUE7QUpncURSO0FJL3BEUTtFQUNJLGNBQUE7QUppcURaO0FJL3BEUTtFQUNJLGNBQUE7QUppcURaO0FJL3BEUTtFQUNJLHNCQUFBO0VBQ0Esa0JBQUE7QUppcURaO0FJaHFEWTtFQUNJLGtCQUFBO0VBQ0EsUUFBQTtFQUNBLFNBQUE7QUprcURoQjtBQzdzRFk7RUdpRFo7SUFFUSw4QkFBQTtJQUNBLHFCQUFBO0lBQ0EsaUJBQUE7RUorcEROO0VJOXBETTtJQUNJLFVBQUE7SUFDQSxjQUFBO0lBQ0EsZUFBQTtJQUNBLHNCQUFBO0lBQ0EsVUFBQTtFSmdxRFY7RUk3cERNO0lBQ0ksV0FBQTtFSitwRFY7QUFDRjtBQy90RFk7RUdpRFo7SUFFUSw4QkFBQTtJQUNBLHFCQUFBO0lBQ0EsaUJBQUE7RUpnckROO0VJL3FETTtJQUNJLFVBQUE7SUFDQSxjQUFBO0lBQ0EsZUFBQTtJQUNBLHNCQUFBO0lBQ0EsVUFBQTtFSmlyRFY7RUk5cURNO0lBQ0ksV0FBQTtFSmdyRFY7QUFDRjtBSTVxREE7RUFDSSxpQkFBQTtFQUNBLGNBQUE7QUorcURKO0FJNXFEQTtFQUNJLGtCQUFBO0FKK3FESjtBSTlxREk7RUFDSSxjTHJGRTtFS3NGRixlQUFBO0VBQ0EsZUFBQTtFQUNBLDBCQUFBO0FKZ3JEUjtBSTlxREk7RUFDSSxZQUFBO0VBQ0EsdUJBQUE7RUFDQSxZQUFBO0VBQ0Esa0JBQUE7RUFDQSxhQUFBO0VBQ0EsU0FBQTtFQUNBLE9BQUE7RUFDQSxVQUFBO0FKZ3JEUjtBQ3p3RFk7RUdpRlI7SUFVUSxXQUFBO0lBQ0Esa0JBQUE7RUprckRWO0FBQ0Y7QUMvd0RZO0VHaUZSO0lBVVEsV0FBQTtJQUNBLGtCQUFBO0VKd3JEVjtBQUNGO0FJdnJEUTtFQUNJLGtCQUFBO0VBQ0EsU0FBQTtFQUNBLFVBQUE7RUFDQSxXQUFBO0VBQ0EsWUFBQTtFQUNBLHVCQUFBO0VBQ0Esd0JBQUE7QUp5ckRaO0FJcHJEQTtFQUNJLGVBQUE7RUFDQSxrQkFBQTtFQUNBLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxlQUFBO0VBQ0EsV0FBQTtFQUNBLGFBQUE7RUFDQSxvQkFBQTtBSnVyREo7QUl0ckRJO0VBQ0ksY0FBQTtBSndyRFI7QUl0ckRJO0VBQ0ksY0w3RkE7QUNxeERSO0FJcHJEQTtFQUNJLE9BQUE7QUp1ckRKO0FJcnJESTtFQUNJLGNBQUE7QUp1ckRSO0FJcHJESTtFQUNJLGNBQUE7QUpzckRSO0FJcHJESTtFQUNJLGVBQUE7RUFDQSxnQkFBQTtBSnNyRFI7QUlwckRJO0VBQ0ksaUJBQUE7RUFDQSxlQUFBO0VBQ0EsZ0JBQUE7RUFDQSxrQkFBQTtFQUNBLFlBQUE7QUpzckRSO0FJcnJEUTtFQUNJLDRCSG5FUztFR29FVCxrQkFBQTtFQUNBLGtCQUFBO0VBQ0EsVUFBQTtFQUNBLFFBQUE7QUp1ckRaO0FJcnJEUTtFQUNJLGtCQUFBO0VBQ0EsV0FBQTtFSGdMUixXRjVPUztFRTZPVCxZRjdPUztFRThPVCx3Q0FBQTtFQUNBLHdCQUFBO0FEd2dESjtBSXRyREk7RUFDSSxVQUFBO0FKd3JEUjtBSXByREE7RUFDSSx3QkFBQTtBSnVyREo7QUlwckRBO0VBQ0ksYUFBQTtFQUNBLGVBQUE7RUFDQSxPQUFBO0VBQ0EsZUFBQTtBSnVyREo7QUlwckRBO0VBQ0ksZUFBQTtBSnVyREo7QUlwckRBO0VBQ0ksYUFBQTtFQUNBLGVBQUE7QUp1ckRKO0FJcnJESTtFQUNJLGdCQUFBO0FKdXJEUjtBQzcyRFk7RUdxTFI7SUFJUSxTQUFBO0VKd3JEVjtBQUNGO0FDbDNEWTtFR3FMUjtJQUlRLFNBQUE7RUo2ckRWO0FBQ0Y7QUkzckRRO0VBQ0ksY0FBQTtBSjZyRFo7QUkxckRRO0VBQ0ksZUFBQTtBSjRyRFo7QUl2ckRBO0VBQ0ksY0w3S0k7QUN1MkRSO0FDajREWTtFRzRNSjtJQUNJLDJCQUFBO0VKeXJEVjtBQUNGO0FDdjREWTtFRzRNSjtJQUNJLDJCQUFBO0VKOHJEVjtBQUNGO0FJenJEWTtFQUNJLFlBQUE7QUoyckRoQiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWJvb2tpbmctZGV0YWlscy1mb3JtL3Jvb20tYm9va2luZy1kZXRhaWxzLWZvcm0uY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIkcHJpbWFyeTogIzFGNDBFNjtcbiRmb3JtLWxhYmVsOiAjMDUxQzJDO1xuJHNlY29uZGFyeS1sYWJlbDogIzc2NzY3NjtcbiRib3JkZXI6ICNCM0IzQjM7XG4kYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDogI0QwRDBEMDtcbiRjaGlwLWNvbG9yOiAjMzMzMzMzO1xuJHBsYWNlaG9sZGVyLWNvbG9yOiAjN0Y3RjdGO1xuJGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4kcGFnZS1iYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuJHNlbGVjdGVkLW9wdGlvbjogI0U2RTZFNjtcbiRjb2xvci1icmFuZC15ZWxsb3c6ICNmZmQwNDg7XG4kbGlnaHQteWVsbG93OiAjZmZmM2NlO1xuJGNvYWNobWFyay10ZXh0OiAjNmY0ZDAwO1xuJGVycm9yLWNvbG9yOiAjRTEyRTQwO1xuJG5vLWZpbHRlcnMtY29sb3I6ICNCQ0JDQkM7XG4kcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I6ICNGNEY0RjQ7XG4kcHJpbWFyeS1oaWdobGlnaHQ6ICMyMjUxRkY7XG4kc2Nyb2xsYmFyLWNvbG9yOiAjNzU3NTc1O1xuXG4kYXZhaWxhYmxlLWNvbG9yOiAjNUQ5RDUyO1xuJGF2YWlsYWJsZS1ieS1yZXF1ZXN0LWNvbG9yOiAjRjVCNTNGO1xuJGluLXVzZS1jb2xvcjogI0Q0NDgzRTtcbiRub3QtYm9va2FibGUtY29sb3I6ICNDQ0NDQ0M7XG5cbiRtb2RhbC1ib2R5LWhlYWRpbmc6ICM0RDRENEQ7XG4kYWxlcnQtb3ZlcmxheS1iZzogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2FjaG1hcmstYmc6ICNFQkVCRjY7XG4kY29hY2htYXJrLWRhcmstdGV4dDogIzFCMUIxOTtcbiRlcnJvci10ZXh0OiAjZmZmO1xuXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuXG4vLyA0cHhcbiRzcGFjaW5nLXNtYWxsZXN0OiAwLjI1cmVtO1xuXG4vLyA4cHhcbiRzcGFjaW5nLXh4c21hbGw6IDAuNXJlbTtcblxuLy8gMTJweFxuJHNwYWNpbmcteHNtYWxsOiAwLjc1cmVtO1xuXG4vLyAxNnB4XG4kc3BhY2luZy1zbWFsbDogMXJlbTtcblxuLy8gMjBweFxuJHNwYWNpbmctc21hbGwtbWVkaXVtOiAxLjI1cmVtO1xuXG4vLyAyNHB4XG4kc3BhY2luZy1tZWRpdW06IDEuNXJlbTtcblxuLy8gMjhweFxuJHNwYWNpbmctbWVkaXVtLWxhcmdlOiAxLjc1cmVtO1xuXG4vLyAzMnB4XG4kc3BhY2luZy1sYXJnZTogMnJlbTtcblxuLy8gNDhweFxuJHNwYWNpbmcteGxhcmdlOiAzcmVtO1xuXG4vLyA2NHB4XG4kc3BhY2luZy14eGxhcmdlOiA0cmVtO1xuXG4vLyA5NnB4XG4kc3BhY2luZy1sYXJnZXN0OiA2cmVtO1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGRldmljZS1tb2JpbGUtc2l6ZTogNDUwcHg7XG4kZGV2aWNlLXRhYmxldC1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFwdG9wLXNpemU6IDEwMjRweDtcblxuJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemU6IDgwMHB4O1xuJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemU6IDEwNDhweDtcbiRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplOiAxMjgwcHg7XG5cblxuOmV4cG9ydCB7XG4gICAgcHJpbWFyeTogJHByaW1hcnk7XG4gICAgc2Vjb25kYXJ5TGFiZWw6ICRzZWNvbmRhcnktbGFiZWw7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4kaWNvbi1zbWFsbDogMTZweDtcbiRpY29uLW1lZGl1bTogMjRweDtcbiRpY29uLWxhcmdlOiAzMnB4O1xuJGljb24teGxhcmdlOiA0OHB4O1xuIiwiLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKiBUaGVtZSBmb3IgdGhlIHJpcHBsZSBlbGVtZW50cy4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF0ZXJpYWwvbm8tcHJlZml4ZXMgKi9cbi8qIHN0eWxlbGludC1lbmFibGUgKi9cbi5tY2staW5oZXJpdC1mb250IHtcbiAgZm9udDogaW5oZXJpdDtcbn1cbi5tY2stY29udGVudC1leHBhbmQsIC5tY2stY29udGVudC1wYWdlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbn1cbi5tY2stY29udGVudC1leHBhbmQtd2lkdGgge1xuICB3aWR0aDogMTAwJTtcbn1cbi5tY2stY29udGVudC1leHBhbmQtaGVpZ2h0IHtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLm1jay1jb250ZW50LXdpdGgtZm9vdGVyLWhlaWdodCB7XG4gIGhlaWdodDogY2FsYygxMDB2aCAtIDU4cHgpO1xufVxuLm1jay1jb250ZW50LWZ1bGwtaGVpZ2h0LCAubWNrLWNvbnRlbnQtcGFnZS1jb250YWluZXIge1xuICBoZWlnaHQ6IDEwMHZoO1xufVxuLm1jay1jb250ZW50LXBhZ2Uge1xuICBiYWNrZ3JvdW5kOiAjRjhGOUZBO1xufVxuLm1jay1jb250ZW50LWJvZHkge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWNvbnRlbnQtYm9keSB7XG4gICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWNvbnRlbnQtYm9keSB7XG4gICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIH1cbn1cbi5tY2stY29udGVudC1ncm91cCB7XG4gIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcbiAgd2lkdGg6IDEwMCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWNvbnRlbnQtZ3JvdXAge1xuICAgIG1heC13aWR0aDogNzU5cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWNvbnRlbnQtZ3JvdXAge1xuICAgIG1heC13aWR0aDogNzU5cHg7XG4gIH1cbn1cbi5tY2stc2hhZG93IHtcbiAgYm94LXNoYWRvdzogMHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtcbn1cbi5tY2stZmxleC0xIHtcbiAgZmxleDogMTtcbn1cbi5tY2stcm93LCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4LCAubWNrLXJvdy1mbG93IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbn1cbi5tY2stcm93Lm1jay1jZW50ZXItanVzdGlmeSwgLm1jay1jZW50ZXItanVzdGlmeS5tY2stcm93LWZsb3csIC5tY2stcm93Lm1jay1jZW50ZXIsIC5tY2stcm93Lm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1yb3cubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93Lm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXJvdy5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXJvdy5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1yb3cubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1yb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1jZW50ZXItc3VmZml4IC5tYXQtZm9ybS1maWVsZC1pbmZpeCwgLm1jay1jZW50ZXIubWNrLXJvdy1mbG93LCAubWNrLXJvdy1mbG93Lm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuLm1jay1yb3cubWNrLWNlbnRlci1hbGlnbiwgLm1jay1jZW50ZXItYWxpZ24ubWNrLXJvdy1mbG93LCAubWNrLXJvdy5tY2stY2VudGVyLCAubWNrLXJvdy5tY2stYnV0dG9uLm1hdC1idXR0b24sIC5tY2stcm93Lm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1yb3cubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1yb3cubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stcm93Lm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXJvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stY2VudGVyLm1jay1yb3ctZmxvdywgLm1jay1yb3ctZmxvdy5tY2stYnV0dG9uLm1hdC1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24ge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLm1jay1yb3cubWNrLXN0cmV0Y2gsIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWNrLXN0cmV0Y2gubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stc3RyZXRjaC5tY2stcm93LWZsb3cge1xuICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbn1cbi5tY2stcm93LWZsb3cge1xuICBmbGV4LXdyYXA6IHdyYXA7XG59XG4ubWNrLXJvdy5tY2stc2Nyb2xsLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1jay1zY3JvbGwubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stc2Nyb2xsLm1jay1yb3ctZmxvdyB7XG4gIG92ZXJmbG93LXg6IHNjcm9sbDtcbn1cbi5tY2stY29sdW1uLCAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cbi5tY2stY29sdW1uLm1jay1jZW50ZXIsIC5tY2stY29sdW1uLm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1jb2x1bW4ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stY29sdW1uLm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLWNvbHVtbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLWNvbHVtbi5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1jb2x1bW4ubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stY29sdW1uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stY29sdW1uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stY29sdW1uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1jb2x1bW4ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1jZW50ZXIubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWNrLWNlbnRlci5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1jZW50ZXIubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stY2VudGVyLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stY2VudGVyLm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1jZW50ZXIubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stY2VudGVyLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stY2VudGVyLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stY2VudGVyLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1jZW50ZXIubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1jay1jb2x1bW4ubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1jZW50ZXItc3VmZml4IC5tYXQtZm9ybS1maWVsZC1pbmZpeC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1jZW50ZXItc3VmZml4IC5tYXQtZm9ybS1maWVsZC1pbmZpeC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4ubWNrLWNvbHVtbi5tY2stc3BhY2UtYmV0d2VlbiwgLm1jay1zcGFjZS1iZXR3ZWVuLm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1zcGFjZS1iZXR3ZWVuLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXNwYWNlLWJldHdlZW4ubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stc3BhY2UtYmV0d2Vlbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXNwYWNlLWJldHdlZW4ubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stc3BhY2UtYmV0d2Vlbi5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1jay1zcGFjZS1iZXR3ZWVuLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stc3BhY2UtYmV0d2Vlbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXNwYWNlLWJldHdlZW4ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXNwYWNlLWJldHdlZW4ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcbn1cbi5tY2stY29sdW1uLm1jay1zdHJldGNoLCAubWNrLXN0cmV0Y2gubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWNrLXN0cmV0Y2gubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stc3RyZXRjaC5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1zdHJldGNoLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stc3RyZXRjaC5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1zdHJldGNoLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLXN0cmV0Y2gubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1zdHJldGNoLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stc3RyZXRjaC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stc3RyZXRjaC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG59XG4ubWNrLWNvbHVtbi5tY2stc2Nyb2xsLCAubWNrLXNjcm9sbC5tY2stYnV0dG9uLm1hdC1idXR0b24sIC5tY2stc2Nyb2xsLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXNjcm9sbC5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1zY3JvbGwubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1zY3JvbGwubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stc2Nyb2xsLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLXNjcm9sbC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXNjcm9sbC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXNjcm9sbC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stc2Nyb2xsLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24ge1xuICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gIG92ZXJmbG93LXk6IG92ZXJsYXk7XG59XG4ubWNrLWNvbHVtbi5tY2stZmxleC1lbmQsIC5tY2stZmxleC1lbmQubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWNrLWZsZXgtZW5kLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLWZsZXgtZW5kLm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLWZsZXgtZW5kLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stZmxleC1lbmQubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stZmxleC1lbmQubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stZmxleC1lbmQubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1mbGV4LWVuZC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLWZsZXgtZW5kLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1mbGV4LWVuZC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbn1cbi5tY2stb3ZlcmZsb3cge1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5tY2stYm9yZGVyZWQsIC5tY2staW5wdXQge1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBib3JkZXI6IDFweCBzb2xpZCAjQjNCM0IzO1xufVxuLm1jay1ib3JkZXJlZDpob3ZlciwgLm1jay1pbnB1dDpob3ZlciB7XG4gIGJvcmRlci1jb2xvcjogIzQ2NDY0Njtcbn1cbi5tY2stYm9yZGVyZWQ6Zm9jdXMsIC5tY2staW5wdXQ6Zm9jdXMge1xuICBib3JkZXItY29sb3I6ICMxRjQwRTY7XG59XG4ubWNrLWJvcmRlcmVkW2Rpc2FibGVkPXRydWVdLCAubWNrLWlucHV0W2Rpc2FibGVkPXRydWVdIHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIGJvcmRlci1jb2xvcjogI2YwZjBmMDtcbiAgY29sb3I6ICNjY2M7XG59XG4ubWNrLWRhdGUtZGlzcGxheSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogNDNweDtcbiAgcGFkZGluZzogMXJlbSAwLjVyZW07XG4gIHRyYW5zaXRpb246IGJvcmRlciAyMDBtcywgYm94LXNoYWRvdyAyMDBtcztcbn1cbi5tY2stZm9ybS1pbnB1dCAubWF0LWZvcm0tZmllbGQtd3JhcHBlciB7XG4gIHBhZGRpbmctYm90dG9tOiAwLjVyZW07XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQge1xuICBtaW4td2lkdGg6IGF1dG8gIWltcG9ydGFudDtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZy10b3A6IDAuN3JlbSAhaW1wb3J0YW50O1xuICBwYWRkaW5nLWJvdHRvbTogMC41cmVtICFpbXBvcnRhbnQ7XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICBtaW4taGVpZ2h0OiAyLjdyZW07XG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjcpO1xufVxuLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1zZWxlY3QtZHJvcGRvd24tYnV0dG9uIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gIG1hcmdpbi10b3A6IDJweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stc2VsZWN0LWRyb3Bkb3duLWJ1dHRvbiAubWF0LWZvcm0tZmllbGQtZmxleCB7XG4gICAgcGFkZGluZy1sZWZ0OiAwLjVyZW07XG4gICAgcGFkZGluZy1yaWdodDogMC41cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1zZWxlY3QtZHJvcGRvd24tYnV0dG9uIC5tYXQtZm9ybS1maWVsZC1mbGV4IHtcbiAgICBwYWRkaW5nLWxlZnQ6IDAuNXJlbTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stc2VsZWN0LWRyb3Bkb3duLWJ1dHRvbiAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1zZWxlY3QtZHJvcGRvd24tYnV0dG9uIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgaGVpZ2h0OiAycmVtO1xuICAgIG1pbi1oZWlnaHQ6IDJyZW07XG4gIH1cbiAgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1zZWxlY3QtZHJvcGRvd24tYnV0dG9uIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1zZWxlY3QtZHJvcGRvd24tYnV0dG9uIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24gLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICBoZWlnaHQ6IDJyZW07XG4gICAgbWluLWhlaWdodDogMnJlbTtcbiAgfVxuICAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24gLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tYXQtcyB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtc2VsZWN0IHtcbiAgbWFyZ2luLXRvcDogMC4ycmVtO1xufVxuLm1jay1mb3JtLWlucHV0IG1hdC1zZWxlY3QgLm1hdC1zZWxlY3QtYXJyb3cge1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LXNlbGVjdCAubWF0LXNlbGVjdC12YWx1ZSA+IC5tYXQtc2VsZWN0LXZhbHVlLXRleHQgPiBzcGFuIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG4ubWNrLWZvcm0taW5wdXQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LCAubWNrLWZvcm0taW5wdXQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsIC5tY2stZm9ybS1pbnB1dCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gIGJvcmRlci1jb2xvcjogI0IzQjNCMztcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4ubWNrLWZvcm0taW5wdXQgLmF2YWlsYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Lm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsIC5tY2stZm9ybS1pbnB1dCAuYXZhaWxhYmxlIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLCAubWNrLWZvcm0taW5wdXQgLmF2YWlsYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gIGJvcmRlci1jb2xvcjogIzNhYTUzNztcbn1cbi5tY2stZm9ybS1pbnB1dCAuYm9va2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCwgLm1jay1mb3JtLWlucHV0IC5ib29rZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsIC5tY2stZm9ybS1pbnB1dCAuYm9va2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kIHtcbiAgYm9yZGVyLWNvbG9yOiAjZTEyZTQxO1xufVxuLm1jay1mb3JtLWlucHV0IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCwgLm1jay1mb3JtLWlucHV0IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLCAubWNrLWZvcm0taW5wdXQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICBib3JkZXItY29sb3I6ICMxRjQwRTY7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuLm1jay1mb3JtLWlucHV0ID4gbWF0LWZvcm0tZmllbGQubWNrLWVycm9yIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgcGFkZGluZy1ib3R0b206IDA7XG59XG4ubWNrLWZvcm0taW5wdXQgPiBtYXQtZm9ybS1maWVsZC5tY2stZXJyb3IgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LCAubWNrLWZvcm0taW5wdXQgPiBtYXQtZm9ybS1maWVsZC5tY2stZXJyb3IgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsIC5tY2stZm9ybS1pbnB1dCA+IG1hdC1mb3JtLWZpZWxkLm1jay1lcnJvciAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gIGJvcmRlci1jb2xvcjogI0UxMkU0MDtcbn1cbi5tY2stZm9ybS1pbnB1dCBtY2stY2xvc2UtaWNvbi5tYXQtY2hpcC1yZW1vdmUubWF0LWNoaXAtcmVtb3ZlIHtcbiAgb3BhY2l0eTogMTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWxhYmVsIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LXJhZGlvLWJ1dHRvbiB7XG4gIG1hcmdpbi1yaWdodDogMXJlbTtcbn1cbi5tY2stZm9ybS1pbnB1dCAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnQge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG4ubWNrLWZvcm0taW5wdXQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGUge1xuICBib3JkZXItY29sb3I6ICMxRjQwRTYgIWltcG9ydGFudDtcbiAgYm9yZGVyLXdpZHRoOiAxcHggIWltcG9ydGFudDtcbn1cbi5tY2stZm9ybS1pbnB1dCAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxRjQwRTYgIWltcG9ydGFudDtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtcmFkaW8tZ3JvdXAge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBmbGV4LXdyYXA6IHdyYXA7XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LXJhZGlvLWdyb3VwID4gbWF0LXJhZGlvLWJ1dHRvbjpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLXJpZ2h0OiAwO1xufVxuLm1jay1mb3JtLWlucHV0LWNvbnRhaW5lciA+IC5tY2stZm9ybS1pbnB1dCwgLm1jay1mb3JtLWlucHV0LWNvbnRhaW5lciA+IG1jay1zZWxlY3Qge1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA4MDBweCkge1xuICAubWNrLWZvcm0taW5wdXQtY29udGFpbmVyID4gLm1jay1mb3JtLWlucHV0LCAubWNrLWZvcm0taW5wdXQtY29udGFpbmVyID4gbWNrLXNlbGVjdCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMS43NXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDEwNDhweCkge1xuICAubWNrLWZvcm0taW5wdXQtY29udGFpbmVyID4gLm1jay1mb3JtLWlucHV0LCAubWNrLWZvcm0taW5wdXQtY29udGFpbmVyID4gbWNrLXNlbGVjdCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMS43NXJlbTtcbiAgfVxufVxuLm1jay1mb3JtLWlucHV0LWNvbnRhaW5lciAubWNrLXJhZGlvLXNlbGVjdCB7XG4gIG1hcmdpbi1ib3R0b206IDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA4MDBweCkge1xuICAubWNrLWZvcm0taW5wdXQtY29udGFpbmVyIC5tY2stcmFkaW8tc2VsZWN0IHtcbiAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAxMDQ4cHgpIHtcbiAgLm1jay1mb3JtLWlucHV0LWNvbnRhaW5lciAubWNrLXJhZGlvLXNlbGVjdCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMS41cmVtO1xuICB9XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LXN0YW5kYXJkLWNoaXAge1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIG1pbi1oZWlnaHQ6IDEuNXJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMzMzMzMztcbiAgcGFkZGluZy10b3A6IDAuMjVyZW07XG4gIHBhZGRpbmctYm90dG9tOiAwLjI1cmVtO1xuICBwYWRkaW5nLWxlZnQ6IDAuNXJlbTtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1mb3JtLWlucHV0IG1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwIHtcbiAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stZm9ybS1pbnB1dCBtYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcCB7XG4gICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG4gIH1cbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtY2hlY2tib3gubWF0LWNoZWNrYm94Lm1hdC1jaGVja2JveCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgY29sb3I6IGJsYWNrO1xufVxuLm1jay1mb3JtLWlucHV0IG1hdC1jaGVja2JveCBkaXYubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMUY0MEU2O1xufVxuLm1jay1mb3JtLWlucHV0IG1hdC1jaGVja2JveCBkaXYubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWNrLWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1kaXNhYmxlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNEMEQwRDA7XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWNoZWNrYm94Lm1jay1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtZGlzYWJsZWQge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIGNvbG9yOiBibGFjaztcbiAgY29sb3I6ICNCM0IzQjM7XG59XG4ubWNrLWJvcmRlcmxlc3Mge1xuICBib3JkZXI6IG5vbmU7XG59XG4ubWNrLWJvcmRlcmxlc3M6aG92ZXIsIC5tY2stYm9yZGVybGVzczpmb2N1cywgLm1jay1ib3JkZXJsZXNzOmRpc2FibGVkIHtcbiAgYm9yZGVyOiBub25lO1xufVxuLm1jay1zZWxlY3QtcGFuZWwge1xuICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7XG4gIGJvcmRlci1yYWRpdXM6IHVuc2V0ICFpbXBvcnRhbnQ7XG4gIG1hcmdpbi10b3A6IDM1cHggIWltcG9ydGFudDtcbiAgbWFyZ2luLWxlZnQ6IDVweDtcbn1cbi5tY2stc2VsZWN0LXBhbmVsIG1hdC1vcHRpb24ge1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIHBhZGRpbmctcmlnaHQ6IDA7XG59XG4ubWNrLXNlbGVjdC1wYW5lbCBtYXQtb3B0aW9uLm1hdC1vcHRpb24tdGV4dCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbi5tY2stc2VsZWN0LXBhbmVsLm1jay1tYXJnaW4tdG9wIHtcbiAgbWFyZ2luLXRvcDogMS41cmVtICFpbXBvcnRhbnQ7XG59XG4ubWNrLWNoZWNrYm94LXBhbmVsLm1hdC1hdXRvY29tcGxldGUtcGFuZWwubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCB7XG4gIHRvcDogLTEwcHg7XG4gIG1heC1oZWlnaHQ6IDI3OHB4O1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uLm1jay10cnVuY2F0ZWQgLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgLXdlYmtpdC1saW5lLWNsYW1wOiAyO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xuICBsaW5lLWhlaWdodDogMjRweDtcbiAgaGVpZ2h0OiB1bnNldDtcbiAgbWluLWhlaWdodDogMzZweDtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiAubWF0LWNoZWNrYm94LWxhYmVsLm1hdC1jaGVja2JveC1sYWJlbCB7XG4gIGZsZXg6IDE7XG59XG4ubWNrLWNoZWNrYm94LXBhbmVsIG1hdC1vcHRpb24gLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIGNvbG9yOiBibGFjaztcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbi5tY2stY2hlY2tib3gtZ3JvdXAtaGVhZGVyIC5tYXQtY2hlY2tib3gtbGFiZWwubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbi5tY2stY2hlY2tib3gtZ3JvdXAtY2hpbGQge1xuICBtYXJnaW4tbGVmdDogMnJlbTtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiBtYXQtY2hlY2tib3ggbGFiZWwubWF0LWNoZWNrYm94LWxheW91dCB7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nLWxlZnQ6IDE2cHg7XG4gIHBhZGRpbmctcmlnaHQ6IDE2cHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLWNoZWNrYm94LXBhbmVsIG1hdC1vcHRpb24gbWF0LWNoZWNrYm94IGxhYmVsLm1hdC1jaGVja2JveC1sYXlvdXQge1xuICAgIHBhZGRpbmctbGVmdDogMnB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDJweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiBtYXQtY2hlY2tib3ggbGFiZWwubWF0LWNoZWNrYm94LWxheW91dCB7XG4gICAgcGFkZGluZy1sZWZ0OiAycHg7XG4gICAgcGFkZGluZy1yaWdodDogMnB4O1xuICB9XG59XG4ubWNrLWNoZWNrYm94LXBhbmVsIG1hdC1vcHRpb24gbWF0LWNoZWNrYm94IGRpdi5tYXQtY2hlY2tib3gtZnJhbWUubWF0LWNoZWNrYm94LWZyYW1lIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI0IzQjNCMztcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiBtYXQtY2hlY2tib3gubWF0LWNoZWNrYm94LWNoZWNrZWQgZGl2Lm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFGNDBFNjtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiBtYXQtY2hlY2tib3gubWNrLWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1kaXNhYmxlZCBkaXYubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDBEMEQwO1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIG1hdC1jaGVja2JveC5tY2stY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWRpc2FibGVkIC5tYXQtY2hlY2tib3gtbGFiZWwubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogMzAwO1xuICBjb2xvcjogYmxhY2s7XG4gIGNvbG9yOiAjQjNCM0IzO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIG1hdC1jaGVja2JveCAubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lciB7XG4gIHdpZHRoOiAxLjI1cmVtO1xuICBoZWlnaHQ6IDEuMjVyZW07XG59XG4ubWNrLXNlbGVjdC1vcHRpb24tc2VsZWN0ZWQge1xuICBmb250LXdlaWdodDogNTAwO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGNvbG9yOiBibGFjaztcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbn1cbi5tY2stc2VsZWN0LW9wdGlvbi1zZWxlY3RlZCAubWNrLXNwYWNlci1jb250ZW50IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFGNDBFNjtcbiAgbWFyZ2luLXJpZ2h0OiAwLjc1cmVtO1xufVxuLm1jay1zZWxlY3Qtb3B0aW9uLXVuc2VsZWN0ZWQge1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG4ubWNrLXNlbGVjdC1vcHRpb24tdW5zZWxlY3RlZC5tY2staWdub3JlLWRpc2FibGVkIHtcbiAgY29sb3I6IGJsYWNrO1xufVxuLm1jay1zZWxlY3Qtb3B0aW9uLXVuc2VsZWN0ZWQgLm1jay1zcGFjZXItY29udGVudCB7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgbWFyZ2luLXJpZ2h0OiAwLjc1cmVtO1xufVxuLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gIGhlaWdodDogNDBweDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgYm9yZGVyOiBub25lO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gIH1cbn1cbi5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgcGFkZGluZy1sZWZ0OiAwLjI1cmVtO1xuICBwYWRkaW5nLXJpZ2h0OiAwLjI1cmVtO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIH1cbn1cbi5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydCwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgaGVpZ2h0OiAzMnB4O1xuICBtaW4td2lkdGg6IDgzcHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0LCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIG1pbi13aWR0aDogMTU1cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0LCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIG1pbi13aWR0aDogMTU1cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodCwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodCwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2stcHJpbWFyeS1idXR0b24ge1xuICAgIGhlaWdodDogNDBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodCwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodCwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2stcHJpbWFyeS1idXR0b24ge1xuICAgIGhlaWdodDogNDBweDtcbiAgfVxufVxuLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZS5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZS5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZS5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgaGVpZ2h0OiAzMnB4O1xuICB3aWR0aDogMzJweDtcbiAgbWluLXdpZHRoOiAzMnB4O1xuICBwYWRkaW5nOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZS5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZS5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZS5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgICB3aWR0aDogNDBweDtcbiAgICBoZWlnaHQ6IDQwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZSwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2stcHJpbWFyeS1idXR0b24ge1xuICAgIHdpZHRoOiA0MHB4O1xuICAgIGhlaWdodDogNDBweDtcbiAgfVxufVxuLm1jay1wcmltYXJ5LWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMUY0MEU2O1xufVxuLm1jay1wcmltYXJ5LWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b25bZGlzYWJsZWRdLCAubWNrLXByaW1hcnktYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5kaXNhYmxlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNEMEQwRDA7XG4gIGNvbG9yOiAjNzU3NTc1O1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuLm1jay1wcmltYXJ5LWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b25bZGlzYWJsZWRdID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tY2stcHJpbWFyeS1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLmRpc2FibGVkID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICBjb2xvcjogIzc1NzU3NTtcbn1cbi5tY2stcHJpbWFyeS1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICBjb2xvcjogd2hpdGU7XG59XG4ubWNrLXNlY29uZGFyeS1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMyMjUxRkY7XG4gIGNvbG9yOiAjMjI1MUZGO1xufVxuLm1jay1zZWNvbmRhcnktYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b25bZGlzYWJsZWRdLCAubWNrLXNlY29uZGFyeS1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5kaXNhYmxlZCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuLm1jay1zZWNvbmRhcnktYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xufVxuLm1jay1zZWNvbmRhcnktYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgY29sb3I6ICMzMzMzMzM7XG59XG4ubWNrLXdhcm5pbmctYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmQwNDg7XG59XG4ubWNrLXdhcm5pbmctYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgY29sb3I6IGJsYWNrO1xufVxuLm1jay1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uIHtcbiAgYm9yZGVyOiAycHggc29saWQgI0IzQjNCMztcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBhZGRpbmctbGVmdDogMS43NXJlbTtcbiAgcGFkZGluZy1yaWdodDogMS43NXJlbTtcbn1cbi5tY2stc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQge1xuICBoZWlnaHQ6IDMycHg7XG4gIG1pbi13aWR0aDogODNweDtcbiAgcGFkZGluZy1sZWZ0OiAwLjI1cmVtO1xuICBwYWRkaW5nLXJpZ2h0OiAwLjI1cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydCB7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIG1pbi13aWR0aDogMTU1cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0IHtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgbWluLXdpZHRoOiAxNTVweDtcbiAgfVxufVxuLm1jay1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5IHtcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1jb2xvcjogIzFGNDBFNjtcbiAgY29sb3I6ICMxRjQwRTY7XG59XG4ubWNrLXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXRoaW4tYm9yZGVyLWxpZ2h0IHtcbiAgYm9yZGVyLWNvbG9yOiAjRDBEMEQwO1xuICBib3JkZXItd2lkdGg6IDFweDtcbn1cbi5tY2stc3Ryb2tlZC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgY29sb3I6ICMxRjQwRTY7XG59XG4ubWNrLXRvZ2dsZS1idXR0b24ge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIGJvcmRlcjogMXB4IHNvbGlkICNCM0IzQjM7XG4gIGJvcmRlci1jb2xvcjogI0QwRDBEMDtcbiAgbWluLXdpZHRoOiA1OXB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stdG9nZ2xlLWJ1dHRvbiB7XG4gICAgbWluLXdpZHRoOiAxMzJweDtcbiAgICBwYWRkaW5nLXRvcDogMC41cmVtO1xuICAgIHBhZGRpbmctYm90dG9tOiAwLjVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXRvZ2dsZS1idXR0b24ge1xuICAgIG1pbi13aWR0aDogMTMycHg7XG4gICAgcGFkZGluZy10b3A6IDAuNXJlbTtcbiAgICBwYWRkaW5nLWJvdHRvbTogMC41cmVtO1xuICB9XG59XG4ubWNrLXRvZ2dsZS1idXR0b24tc2VsZWN0ZWQge1xuICBjb2xvcjogIzFGNDBFNjtcbn1cbi5tY2stZGF0ZS1waWNrZXIge1xuICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stZGF0ZS1waWNrZXIge1xuICAgIG1heC13aWR0aDogMjNyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWRhdGUtcGlja2VyIHtcbiAgICBtYXgtd2lkdGg6IDIzcmVtO1xuICB9XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmhlYWRlci5oZWFkZXIge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGNvbG9yOiAjMDUxQzJDO1xuICBtYXJnaW4tdG9wOiAxLjI1cmVtO1xufVxuLm1jay1kYXRlLXBpY2tlciA+IC5oZWFkZXIuaGVhZGVyID4gLmFycm93LmFycm93IHtcbiAgd2lkdGg6IDIuMzc1cmVtO1xuICBoZWlnaHQ6IDJyZW07XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmhlYWRlci5oZWFkZXIgPiAuYXJyb3cuYXJyb3cgPiAuaWNvbi5pY29uIHtcbiAgd2lkdGg6IDFyZW07XG4gIGhlaWdodDogMXJlbTtcbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAuaGVhZGVyLmhlYWRlciA+IC5hcnJvdy5hcnJvdyA+IC5uZXh0Lm5leHQge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvYXJyb3ctZm9yd2FyZC5zdmdcIik7XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmhlYWRlci5oZWFkZXIgPiAuYXJyb3cuYXJyb3cgPiAucHJldmlvdXMucHJldmlvdXMge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvYXJyb3ctYmFja3dhcmQuc3ZnXCIpO1xufVxuLm1jay1kYXRlLXBpY2tlciA+IC5tb250aCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAud2VlayB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6ICM3Njc2NzY7XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmJvZHkge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmJvZHkgPiBkaXYgPiBkaXYuZGF0ZSA+IC5kb3Qge1xuICBkaXNwbGF5OiBub25lO1xufVxuLm1jay1kYXRlLXBpY2tlciA+IC5ib2R5ID4gZGl2ID4gZGl2LmRhdGUuZGlzYWJsZWQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgY29sb3I6ICM3Njc2NzY7XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmJvZHkgPiBkaXYgPiBkaXYuZGF0ZS5hY3RpdmUge1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMUY0MEU2O1xufVxuLm1jay1kYXRlLXBpY2tlciA+IC5ib2R5ID4gZGl2ID4gZGl2LmRhdGUubm9uLW1vbnRoIHtcbiAgY29sb3I6ICM3Njc2NzY7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLXNwYWNlci1jb250ZW50LWNvbGxhcHNlLXRhYmxldCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stc3BhY2VyLWNvbnRlbnQtY29sbGFwc2UtdGFibGV0IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stc3BhY2VyLWNvbnRlbnQtY29sbGFwc2UtdGFibGV0IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDQ4cHgpIHtcbiAgLm1jay1zcGFjZXItY29udGVudC1jb2xsYXBzZS10YWJsZXQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc3BhY2VyLWNvbnRlbnQtZXhwYW5kLW1vYmlsZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc3BhY2VyLWNvbnRlbnQtZXhwYW5kLW1vYmlsZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuLm1jay1zcGFjZXItY29udGVudC1kaXZpZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbCB7XG4gIGJveC1zaGFkb3c6IDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNFNkU2RTY7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRTZFNkU2O1xufVxuLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1jay1leHBhbmRlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4gIGJvcmRlci1ib3R0b206IG5vbmU7XG59XG4ubWNrLWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWNrLWV4cGFuZGVkIC5tY2stY29sbGFwc2UtaWNvbiB7XG4gIHdpZHRoOiAyNHB4O1xuICBoZWlnaHQ6IDI0cHg7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9jaGV2cm9uLWNsb3NlLnN2Z1wiKTtcbiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1jay1leHBhbmRlZCAubWNrLWNvbGxhcHNlLWljb24ge1xuICAgIHdpZHRoOiA0OHB4O1xuICAgIGhlaWdodDogNDhweDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvY2hldnJvbi1jbG9zZS1sYXJnZS5zdmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1jay1leHBhbmRlZCAubWNrLWNvbGxhcHNlLWljb24ge1xuICAgIHdpZHRoOiA0OHB4O1xuICAgIGhlaWdodDogNDhweDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvY2hldnJvbi1jbG9zZS1sYXJnZS5zdmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICB9XG59XG4ubWNrLWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtYm9keSB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgcGFkZGluZy1yaWdodDogMDtcbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1ib2R5ID4gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIHtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xuICBwYWRkaW5nLWxlZnQ6IDFyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDFyZW07XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGNvbG9yOiBibGFjaztcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgcGFkZGluZy1ib3R0b206IDAuNXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1ib2R5ID4gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIHtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1ib2R5ID4gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIHtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWJvZHkgPiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWJvZHkgPiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xuICB9XG59XG4ubWNrLWV4cGFuc2lvbi1wYW5lbCBtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciB7XG4gIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsIG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyID4gc3Bhbi5tYXQtY29udGVudCB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4ubWNrLWV4cGFuc2lvbi1wYW5lbCBtYXQtcGFuZWwtdGl0bGUge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGNvbG9yOiBibGFjaztcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsIC5tY2stY29sbGFwc2UtaWNvbiB7XG4gIHdpZHRoOiAyNHB4O1xuICBoZWlnaHQ6IDI0cHg7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9jaGV2cm9uLW9wZW4uc3ZnXCIpO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC41cyBlYXNlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwgLm1jay1jb2xsYXBzZS1pY29uIHtcbiAgICB3aWR0aDogNDhweDtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwibGlicy91aS9zcmMvbGliL2ljb25zL2NoZXZyb24tb3Blbi1sYXJnZS5zdmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwgLm1jay1jb2xsYXBzZS1pY29uIHtcbiAgICB3aWR0aDogNDhweDtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwibGlicy91aS9zcmMvbGliL2ljb25zL2NoZXZyb24tb3Blbi1sYXJnZS5zdmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICB9XG59XG4ubWNrLWV4cGFuc2lvbi1wYW5lbCAubWNrLWNvbGxhcHNlLWljb24uZXhwYW5kZWQge1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xufVxuLm1jay1pY29uLWZpbGwtb3BlbiB7XG4gIGZpbGw6ICMxRjQwRTY7XG59XG4ubWNrLWljb24tZmlsbC1jbG9zZSB7XG4gIGZpbGw6ICM3Njc2NzY7XG59XG4ubWNrLWljb24tZmlsbC1ibGFjayB7XG4gIGZpbGw6IGJsYWNrO1xuICBzdHJva2U6IGJsYWNrO1xufVxuLm1jay1pY29uLWZpbGwtd2hpdGUge1xuICBmaWxsOiB3aGl0ZTtcbiAgc3Ryb2tlOiB3aGl0ZTtcbn1cbi5tY2staWNvbi1maWxsLWdyYXkge1xuICBmaWxsOiAjMzMzMzMzO1xuICBzdHJva2U6ICMzMzMzMzM7XG59XG4ubWNrLW1pbiB7XG4gIG1heC13aWR0aDogNTgxcHggIWltcG9ydGFudDtcbiAgd2lkdGg6IDgwdnc7XG4gIG1heC1oZWlnaHQ6IDEwMHZoO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1taW4ge1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbiAgLm1jay1taW4gLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLW1pbiB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1pbiAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuLm1jay1ub2V4cGFuZCB7XG4gIG1heC13aWR0aDogNTgxcHggIWltcG9ydGFudDtcbiAgd2lkdGg6IDgwdncgIWltcG9ydGFudDtcbiAgbWF4LWhlaWdodDogMTAwdmg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLW5vZXhwYW5kIHtcbiAgICB3aWR0aDogY2FsYygxMDB2dyAtIDMycHgpICFpbXBvcnRhbnQ7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLW5vZXhwYW5kIHtcbiAgICB3aWR0aDogY2FsYygxMDB2dyAtIDMycHgpICFpbXBvcnRhbnQ7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbn1cbi5tY2stbW9kYWwge1xuICBtYXgtd2lkdGg6IDgwMHB4ICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiA4MHZ3O1xuICBtYXgtaGVpZ2h0OiAxMDB2aDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stbW9kYWwge1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbiAgLm1jay1tb2RhbCAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwge1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbiAgLm1jay1tb2RhbCAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuLm1jay1tb2RhbC1taW5pIHtcbiAgbWF4LXdpZHRoOiA1ODBweCAhaW1wb3J0YW50O1xuICBtYXgtaGVpZ2h0OiAxMDB2aDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stbW9kYWwtbWluaSB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsLW1pbmkgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLW1vZGFsLW1pbmkge1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbiAgLm1jay1tb2RhbC1taW5pIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG4ubWNrLW1vZGFsLXN1cnZleSB7XG4gIG1heC13aWR0aDogNjkxcHggIWltcG9ydGFudDtcbiAgbWF4LWhlaWdodDogMTAwdmg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLW1vZGFsLXN1cnZleSAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwtc3VydmV5IC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG4ubWNrLW1vZGFsLXdpZGUge1xuICBtYXgtd2lkdGg6IDEwMjRweCAhaW1wb3J0YW50O1xuICB3aWR0aDogMTAwdnc7XG4gIGhlaWdodDogOTV2aDtcbiAgbWF4LWhlaWdodDogMTAwdmg7XG59XG4ubWNrLW1vZGFsLXdpZGUgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4gIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5tY2stbW9kYWwtd2lkZSAubWF0LWRpYWxvZy1jb250ZW50IC5tYXQtaWNvbi1idXR0b25bbmFtZT1DbG9zZUJ1dHRvbl0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHJpZ2h0OiAzMnB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1tb2RhbC13aWRlIC5tYXQtZGlhbG9nLWNvbnRlbnQgLm1hdC1pY29uLWJ1dHRvbltuYW1lPUNsb3NlQnV0dG9uXSAuY2xvc2UtaW1hZ2Uge1xuICAgIGhlaWdodDogMzJweDtcbiAgICB3aWR0aDogMzJweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwtd2lkZSAubWF0LWRpYWxvZy1jb250ZW50IC5tYXQtaWNvbi1idXR0b25bbmFtZT1DbG9zZUJ1dHRvbl0gLmNsb3NlLWltYWdlIHtcbiAgICBoZWlnaHQ6IDMycHg7XG4gICAgd2lkdGg6IDMycHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stbW9kYWwtd2lkZSB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsLXdpZGUgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLW1vZGFsLXdpZGUge1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbiAgLm1jay1tb2RhbC13aWRlIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG4ubWNrLW1vZGFsLXdpZGUtbWFuYWdlLWJvb2tpbmcge1xuICBtYXgtd2lkdGg6IDEyNTBweCAhaW1wb3J0YW50O1xuICB3aWR0aDogMTAwdnc7XG4gIG1heC1oZWlnaHQ6IDk1dmg7XG59XG4ubWNrLW1vZGFsLXdpZGUtbWFuYWdlLWJvb2tpbmcgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4gIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5tY2stbW9kYWwtd2lkZS1tYW5hZ2UtYm9va2luZyAubWF0LWRpYWxvZy1jb250ZW50IC5tYXQtaWNvbi1idXR0b25bbmFtZT1DbG9zZUJ1dHRvbl0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHJpZ2h0OiAzMnB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1tb2RhbC13aWRlLW1hbmFnZS1ib29raW5nIC5tYXQtZGlhbG9nLWNvbnRlbnQgLm1hdC1pY29uLWJ1dHRvbltuYW1lPUNsb3NlQnV0dG9uXSAuY2xvc2UtaW1hZ2Uge1xuICAgIGhlaWdodDogMzJweDtcbiAgICB3aWR0aDogMzJweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwtd2lkZS1tYW5hZ2UtYm9va2luZyAubWF0LWRpYWxvZy1jb250ZW50IC5tYXQtaWNvbi1idXR0b25bbmFtZT1DbG9zZUJ1dHRvbl0gLmNsb3NlLWltYWdlIHtcbiAgICBoZWlnaHQ6IDMycHg7XG4gICAgd2lkdGg6IDMycHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stbW9kYWwtd2lkZS1tYW5hZ2UtYm9va2luZyB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsLXdpZGUtbWFuYWdlLWJvb2tpbmcgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLW1vZGFsLXdpZGUtbWFuYWdlLWJvb2tpbmcge1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbiAgLm1jay1tb2RhbC13aWRlLW1hbmFnZS1ib29raW5nIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLWFsZXJ0IHtcbiAgICBtYXgtd2lkdGg6IDEwMHZ3ICFpbXBvcnRhbnQ7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIG1hcmdpbi1sZWZ0OiAxcmVtO1xuICAgIG1hcmdpbi1yaWdodDogMXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stYWxlcnQge1xuICAgIG1heC13aWR0aDogMTAwdncgIWltcG9ydGFudDtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgbWFyZ2luLWxlZnQ6IDFyZW07XG4gICAgbWFyZ2luLXJpZ2h0OiAxcmVtO1xuICB9XG59XG4ubWNrLWFsZXJ0LWJhY2tkcm9wIHtcbiAgYmFja2dyb3VuZDogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xufVxuLm1jay1zbGlkZS10b2dnbGUubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkgLm1hdC1zbGlkZS10b2dnbGUtYmFyLm1hdC1zbGlkZS10b2dnbGUtYmFyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzIyNTFGRjtcbn1cbi5tY2stc2xpZGUtdG9nZ2xlLm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQ6bm90KC5tYXQtZGlzYWJsZWQpIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbn1cbi5tY2stc2xpZGUtdG9nZ2xlLm1hdC1zbGlkZS10b2dnbGUge1xuICBoZWlnaHQ6IGF1dG87XG59XG4ubWNrLXNsaWRlLXRvZ2dsZSAubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudCB7XG4gIGZsZXg6IDE7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIC13ZWJraXQtbGluZS1jbGFtcDogMjtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbn1cbi5tY2stc2xpZGUtdG9nZ2xlIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIge1xuICB3aWR0aDogMTRweDtcbiAgaGVpZ2h0OiAxNHB4O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg1MCUsIDUwJSk7XG59XG4ubWNrLXNsaWRlLXRvZ2dsZSAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXIubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXIge1xuICB0b3A6IC00cHg7XG4gIGxlZnQ6IC00cHg7XG59XG4ubWNrLXNsaWRlLXRvZ2dsZSAubWF0LXNsaWRlLXRvZ2dsZS1iYXIubWF0LXNsaWRlLXRvZ2dsZS1iYXIge1xuICBoZWlnaHQ6IDIwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNEMEQwRDA7XG4gIGJvcmRlci1yYWRpdXM6IDIwcHg7XG59XG4ubWNrLXNrZWxldG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbn1cbi5tY2stc2tlbGV0b24tY2hlY2tib3gge1xuICBmbG9hdDogbGVmdDtcbn1cbi5tY2stc2tlbGV0b24tY2hlY2tib3ggPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIHdpZHRoOiAyMHB4O1xuICBoZWlnaHQ6IDIwcHg7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG4ubWNrLXNrZWxldG9uLWhlYWRlciA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgd2lkdGg6IDEwMHZ3O1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBtYXgtd2lkdGg6IDIxNXB4O1xufVxuLm1jay1za2VsZXRvbi1pbWFnZSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgd2lkdGg6IDgxcHg7XG4gIGhlaWdodDogODJweDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stc2tlbGV0b24taW1hZ2UgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgd2lkdGg6IDIxOXB4O1xuICAgIGhlaWdodDogMTE5cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAxMDQ4cHgpIHtcbiAgLm1jay1za2VsZXRvbi1pbWFnZSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICB3aWR0aDogMjE5cHg7XG4gICAgaGVpZ2h0OiAxMTlweDtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1zdGF0dXMgPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIHdpZHRoOiAxMTdweDtcbiAgaGVpZ2h0OiA3OHB4O1xuICBtYXJnaW4tdG9wOiAxMHB4O1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogODAwcHgpIHtcbiAgLm1jay1za2VsZXRvbi1zdGF0dXMgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgd2lkdGg6IDExN3B4O1xuICAgIGhlaWdodDogNzhweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDEwNDhweCkge1xuICAubWNrLXNrZWxldG9uLXN0YXR1cyA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuICB9XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtMSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgaGVpZ2h0OiAyM3B4O1xuICBtYXgtd2lkdGg6IDE3NnB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTEgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAyMTlweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS0xID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogMjE5cHg7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS0yID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogMTY1cHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtMiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDE4OXB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTIgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAxODlweDtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTMgPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIGhlaWdodDogMThweDtcbiAgbWF4LXdpZHRoOiAxNDdweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS0zID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogMTg5cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtMyA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDE4OXB4O1xuICB9XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtMzBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS0zMHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgaGVpZ2h0OiAxOHB4O1xuICBtYXgtd2lkdGg6IDMwJTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS0zMHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTMwcC10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogMzAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTMwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtMzBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAzMCU7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS0zMHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtMzBwLXRoaW4tdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtNDVwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS00NXAtdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgaGVpZ2h0OiAxOHB4O1xuICBtYXgtd2lkdGg6IDQ1JTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS00NXAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTQ1cC10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogNDUlO1xuICAgIG1hcmdpbi1yaWdodDogNDUlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTQ1cCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNDVwLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA0NSU7XG4gICAgbWFyZ2luLXJpZ2h0OiA0NSU7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS00NXAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNDVwLXRoaW4tdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtNTBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogNTAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTUwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTUwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDUwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDQ1JTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS01MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTUwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA1MCU7XG4gICAgbWFyZ2luLXJpZ2h0OiA0NSU7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaW4tdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaWNrLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gIGhlaWdodDogMTZweDtcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xufVxuLm1jay1za2VsZXRvbi1saW5lLTUwcC10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaW4tdGhpY2sgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTUwcC10aGljay10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAzMnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtNjBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogNjAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTYwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTYwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDYwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDM1JTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS02MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTYwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA2MCU7XG4gICAgbWFyZ2luLXJpZ2h0OiAzNSU7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaW4tdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaWNrLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gIGhlaWdodDogMTZweDtcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xufVxuLm1jay1za2VsZXRvbi1saW5lLTYwcC10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaW4tdGhpY2sgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTYwcC10aGljay10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAzMnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtNzBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogNzAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTcwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTcwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDcwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDI1JTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS03MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTcwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA3MCU7XG4gICAgbWFyZ2luLXJpZ2h0OiAyNSU7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaW4tdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaWNrLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gIGhlaWdodDogMTZweDtcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xufVxuLm1jay1za2VsZXRvbi1saW5lLTcwcC10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaW4tdGhpY2sgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTcwcC10aGljay10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAzMnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtODBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogODAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTgwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTgwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDgwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDE1JTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS04MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTgwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA4MCU7XG4gICAgbWFyZ2luLXJpZ2h0OiAxNSU7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaW4tdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaWNrLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gIGhlaWdodDogMTZweDtcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xufVxuLm1jay1za2VsZXRvbi1saW5lLTgwcC10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaW4tdGhpY2sgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTgwcC10aGljay10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAzMnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtOTBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS05MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgaGVpZ2h0OiAxOHB4O1xuICBtYXgtd2lkdGg6IDkwJTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS05MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTkwcC10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogOTAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTkwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtOTBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA5MCU7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS05MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtOTBwLXRoaW4tdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxvYWQtbW9yZSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgbWFyZ2luLXRvcDogMC41cmVtO1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG4gIHdpZHRoOiBjYWxjKDEwMHZ3IC0gKDIgKiAxcmVtKSk7XG4gIGhlaWdodDogNDBweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbG9hZC1tb3JlID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogMzIwcHg7XG4gICAgaGVpZ2h0OiA1MHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1sb2FkLW1vcmUgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAzMjBweDtcbiAgICBoZWlnaHQ6IDUwcHg7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbG9hZC1tb3JlLTEwMHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1oZWFkZXIgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1yb29tLWF2YWlsYWJpbGl0eSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgbWFyZ2luLXRvcDogMC41cmVtO1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG4gIHdpZHRoOiBjYWxjKDEwMHZ3IC0gKDIgKiAxcmVtKSk7XG4gIGhlaWdodDogNDBweDtcbiAgbWF4LXdpZHRoOiBub25lO1xuICB3aWR0aDogMTAwJTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbG9hZC1tb3JlLTEwMHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1oZWFkZXIgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1yb29tLWF2YWlsYWJpbGl0eSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IG5vbmU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiA1MHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1sb2FkLW1vcmUtMTAwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWhlYWRlciA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLXJvb20tYXZhaWxhYmlsaXR5ID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDUwcHg7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbG9hZC1tb3JlLTEwMHAgPiAubG9hZGVyLmxvYWRlci1yb29tLWF2YWlsYWJpbGl0eSA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWhlYWRlciA+IC5sb2FkZXIubG9hZGVyLXJvb20tYXZhaWxhYmlsaXR5ID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tcm9vbS1hdmFpbGFiaWxpdHkgPiAubG9hZGVyLmxvYWRlci1yb29tLWF2YWlsYWJpbGl0eSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxMjRweDtcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xufVxuXG4ubWNrLWhlYWRpbmctNSB7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMS41cmVtO1xuICBsaW5lLWhlaWdodDogMS4zMzM7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWhlYWRpbmctNSB7XG4gICAgZm9udC1zaXplOiAxLjc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2staGVhZGluZy01IHtcbiAgICBmb250LXNpemU6IDEuNzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMTQyO1xuICB9XG59XG5cbm5neC1tYXQtc2VsZWN0LXNlYXJjaCAubWF0LXNlbGVjdC1zZWFyY2gtbm8tZW50cmllcy1mb3VuZCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbm5neC1tYXQtc2VsZWN0LXNlYXJjaCAubWF0LXNlbGVjdC1zZWFyY2gtaW5wdXQge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5uZ3gtbWF0LXNlbGVjdC1zZWFyY2ggYnV0dG9uLm1hdC1idXR0b24ubWF0LXNlbGVjdC1zZWFyY2gtY2xlYXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiBub25lO1xuICBjb2xvcjogYmxhY2s7XG59XG5cbjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICB3aWR0aDogMTZweDtcbiAgaGVpZ2h0OiAxOHB4O1xufVxuXG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgaGVpZ2h0OiAxLjVyZW07XG4gIGJvcmRlcjogNHB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMCk7XG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzc1NzU3NTtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAtMXB4IC0xcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4wNSksIGluc2V0IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG59XG5cbjo6LXdlYmtpdC1zY3JvbGxiYXItYnV0dG9uIHtcbiAgd2lkdGg6IDA7XG4gIGhlaWdodDogMDtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuaGVhZGVyIHtcbiAgei1pbmRleDogMjtcbn1cblxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1iLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tYi1ibG9jayB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cblxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1iLWJvdHRvbSB7XG4gICAgcGFkZGluZy1ib3R0b206IDExMHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1iLWJvdHRvbSB7XG4gICAgcGFkZGluZy1ib3R0b206IDExMHB4O1xuICB9XG59XG5cbi5tYXAtZmlsdGVycy1jb250YWluZXIgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gIHRvcDogNXB4O1xufVxuLm1hcC1maWx0ZXJzLWNvbnRhaW5lciAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICBoZWlnaHQ6IDQ4cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xufVxuLm1hcC1maWx0ZXJzLWNvbnRhaW5lciAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgcGFkZGluZy10b3A6IDAuNXJlbSAhaW1wb3J0YW50O1xufVxuXG4ub2ZmaWNlLWxldmVsLXJvdyAubWF0LXNlbGVjdC1wbGFjZWhvbGRlciB7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAub2ZmaWNlLWxldmVsLXJvdyAubGVnZW5kLWNvbnRhaW5lciAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwgLm9mZmljZS1sZXZlbC1yb3cgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICBoZWlnaHQ6IDQ1cHggIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5vZmZpY2UtbGV2ZWwtcm93IC5sZWdlbmQtY29udGFpbmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAub2ZmaWNlLWxldmVsLXJvdyAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgIGhlaWdodDogNDVweCAhaW1wb3J0YW50O1xuICB9XG59XG4ub2ZmaWNlLWxldmVsLXJvdyAuc2VsZWN0LWRpdmlkZXIge1xuICBkaXNwbGF5OiBibG9jaztcbiAgdG9wOiAwICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiA0NHB4ICFpbXBvcnRhbnQ7XG4gIHJpZ2h0OiAtMTFweCAhaW1wb3J0YW50O1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICBib3JkZXItd2lkdGg6IDAgMCAwIDFweDtcbiAgYm9yZGVyLWNvbG9yOiAjYzZjNmM2O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm9mZmljZS1sZXZlbC1yb3cgLnNlbGVjdC1kaXZpZGVyIHtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDFweCkgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5vZmZpY2UtbGV2ZWwtcm93IC5zZWxlY3QtZGl2aWRlciB7XG4gICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAxcHgpICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi5vZmZpY2UtbGV2ZWwtcm93IC5kaXNhYmxlZCAuc2VsZWN0LWRpdmlkZXIge1xuICBiYWNrZ3JvdW5kOiAjRjBGMEYwICFpbXBvcnRhbnQ7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAub2ZmaWNlLWxldmVsLXJvdyAuZGlzYWJsZWQgLnNlbGVjdC1kaXZpZGVyIHtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDJweCkgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5vZmZpY2UtbGV2ZWwtcm93IC5kaXNhYmxlZCAuc2VsZWN0LWRpdmlkZXIge1xuICAgIGhlaWdodDogY2FsYygxMDAlIC0gMnB4KSAhaW1wb3J0YW50O1xuICB9XG59XG4ub2ZmaWNlLWxldmVsLXJvdyAuZGlzYWJsZWQgLnNlbGVjdC1jaGV2cm9uIHtcbiAgb3BhY2l0eTogMC41O1xuICBtYXJnaW4tbGVmdDogMTBweDtcbn1cblxuLm9mZmljZS1sZXZlbC1yb3cgLmxlZ2VuZC1jb250YWluZXIgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsIC5vZmZpY2UtbGV2ZWwtcm93IC5tYXQtZm9ybS1maWVsZC1pbmZpeCwgLm1hcC1jb250cm9scyAubGVnZW5kLWNvbnRhaW5lciAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwgLm1hcC1jb250cm9scyAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50O1xufVxuXG4uYm9va2luZy1mb3JtLWNvbnRhaW5lciB7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAzMTBweCk7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1mb3JtLWNvbnRhaW5lciB7XG4gICAgbWF4LWhlaWdodDogbm9uZTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWZvcm0tY29udGFpbmVyIHtcbiAgICBtYXgtaGVpZ2h0OiBub25lO1xuICB9XG59XG5cbi5ib29raW5nLWZvcm0tY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dCBtYXQtbGFiZWwsIC5ib29raW5nLWZvcm0tY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dCAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnQge1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCIgIWltcG9ydGFudDtcbiAgY29sb3I6ICMzMzMzMzM7XG59XG4uYm9va2luZy1mb3JtLWNvbnRhaW5lciAubWNrLWZvcm0taW5wdXQgaW5wdXQsIC5ib29raW5nLWZvcm0tY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dCBpbnB1dDo6cGxhY2Vob2xkZXIge1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGNvbG9yOiAjQjNCM0IzO1xufVxuXG5mb3JtIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIGZvcm0ge1xuICAgIHBhZGRpbmc6IDAgMTBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIGZvcm0ge1xuICAgIHBhZGRpbmc6IDAgMTBweDtcbiAgfVxufVxuXG4ubWNrLXJvdy1mbG93IHtcbiAgZGlzcGxheTogZmxleDtcbn1cbi5tY2stcm93LWZsb3cgPiBkaXYge1xuICBmbGV4OiAxO1xuICBtaW4td2lkdGg6IDE4MHB4O1xuICBmbGV4LWZsb3c6IGNvbHVtbjtcbn1cbi5tY2stcm93LWZsb3cgPiBkaXY6bnRoLWNoaWxkKDIpIHtcbiAgbWFyZ2luLWxlZnQ6IDIwcHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLXJvdy1mbG93ID4gZGl2Om50aC1jaGlsZCgyKSB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLXJvdy1mbG93ID4gZGl2Om50aC1jaGlsZCgyKSB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gIH1cbn1cblxuLmNvbXBhbnktY29udGFpbmVyID4gZGl2Om50aC1jaGlsZCgyKSB7XG4gIG1hcmdpbi1sZWZ0OiAwcHg7XG59XG5cbi5yb3ctd2l0aC1zcGFjaW5nIHtcbiAgbWFyZ2luLWJvdHRvbTogMS41cmVtO1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbn1cbi5yb3ctd2l0aC1zcGFjaW5nIGxhYmVsIHtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xufVxuLnJvdy13aXRoLXNwYWNpbmcgcCB7XG4gIGNvbG9yOiAjZTEyZTQxO1xuICBtYXJnaW46IDA7XG59XG4ucm93LXdpdGgtc3BhY2luZyBwLmNoZWNraW5nIHtcbiAgY29sb3I6ICMwMDAwMDA7XG59XG4ucm93LXdpdGgtc3BhY2luZyBwLmF2YWlsYWJsZSB7XG4gIGNvbG9yOiAjM2FhNTM3O1xufVxuLnJvdy13aXRoLXNwYWNpbmcgcC5zYi1zdGF0dXMge1xuICBwYWRkaW5nOiAwIDEwcHggMCAzNHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4ucm93LXdpdGgtc3BhY2luZyBwLnNiLXN0YXR1cyBpbWcge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNHB4O1xuICBsZWZ0OiA0cHg7XG59XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5mbGV4LXJvdyB7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICBtYXJnaW4tcmlnaHQ6IDFlbTtcbiAgfVxuICAuZmxleC1yb3cgPiBkaXYge1xuICAgIHdpZHRoOiA0NyU7XG4gICAgbWluLXdpZHRoOiA0MCU7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgZmxleDogbm9uZTtcbiAgfVxuICAuZmxleC1yb3cgLmNvbXBhbnktZmllbGQge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmZsZXgtcm93IHtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAgIG1hcmdpbi1yaWdodDogMWVtO1xuICB9XG4gIC5mbGV4LXJvdyA+IGRpdiB7XG4gICAgd2lkdGg6IDQ3JTtcbiAgICBtaW4td2lkdGg6IDQwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBmbGV4OiBub25lO1xuICB9XG4gIC5mbGV4LXJvdyAuY29tcGFueS1maWVsZCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLmF0dGVuZGVlcy1pbnB1dCB7XG4gIG1hcmdpbi1yaWdodDogMWVtO1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxubWF0LWhpbnQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5tYXQtaGludCBzcGFuIHtcbiAgY29sb3I6ICMxRjQwRTY7XG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbm1hdC1oaW50IC5oaW50IHtcbiAgd2lkdGg6IDQyOXB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjaztcbiAgY29sb3I6IHdoaXRlO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHBhZGRpbmc6IDEwcHg7XG4gIHRvcDogMjZweDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIG1hdC1oaW50IC5oaW50IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICBtYXQtaGludCAuaGludCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG59XG5tYXQtaGludCAuaGludCAudHJpYW5nbGUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogLTZweDtcbiAgbGVmdDogMTJweDtcbiAgd2lkdGg6IDEycHg7XG4gIGhlaWdodDogMTJweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG4gIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcbn1cblxuLm1jay1mb3JtLWlucHV0IHtcbiAgbWluLXdpZHRoOiAxMDAlO1xuICBtYXJnaW4tdG9wOiAxLjI1ZW07XG4gIG1hcmdpbi1yaWdodDogMWVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LXNpemU6IDE2cHg7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAwLjVlbTtcbn1cbi5tY2stZm9ybS1pbnB1dCBzcGFuIHtcbiAgY29sb3I6ICNkMTQ4NGY7XG59XG4ubWNrLWZvcm0taW5wdXQuZXJyb3Ige1xuICBjb2xvcjogI2U1MzkzNTtcbn1cblxubWF0LWZvcm0tZmllbGQge1xuICBmbGV4OiAxO1xufVxubWF0LWZvcm0tZmllbGQuYm9va2VkIHtcbiAgY29sb3I6ICNkMTQ4NGY7XG59XG5tYXQtZm9ybS1maWVsZC5hdmFpbGFibGUge1xuICBjb2xvcjogIzNhYTUzNztcbn1cbm1hdC1mb3JtLWZpZWxkIGlucHV0IHtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBwYWRkaW5nLXRvcDogOHB4O1xufVxubWF0LWZvcm0tZmllbGQgbWF0LWVycm9yIHtcbiAgcGFkZGluZy10b3A6IDEycHg7XG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IDQwcHg7XG59XG5tYXQtZm9ybS1maWVsZCBtYXQtZXJyb3Igc3BhbiB7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGxlZnQ6IDEwcHg7XG4gIHRvcDogMnB4O1xufVxubWF0LWZvcm0tZmllbGQgbWF0LWVycm9yIC5lcnJvci1pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAtMTJweDtcbiAgd2lkdGg6IDE2cHg7XG4gIGhlaWdodDogMTZweDtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwibGlicy91aS9zcmMvbGliL2ljb25zL2Vycm9yLWNsb3NlLnN2Z1wiKTtcbiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxubWF0LWZvcm0tZmllbGQgLmljb24ge1xuICB3aWR0aDogOHB4O1xufVxuXG5tYXQtdGFiIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4uZmllbGQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBtaW4td2lkdGg6IDE0ZW07XG4gIGZsZXg6IDE7XG4gIGZsZXgtd3JhcDogd3JhcDtcbn1cblxudGV4dGFyZWEge1xuICBtaW4taGVpZ2h0OiA3ZW07XG59XG5cbi5maWVsZHNldCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbn1cbi5maWVsZHNldCAuZmllbGQge1xuICBtYXJnaW46IDAgMC4yNWVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmZpZWxkc2V0IC5maWVsZCB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmZpZWxkc2V0IC5maWVsZCB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG4uZmllbGRzZXQgLmZpZWxkOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLWxlZnQ6IDA7XG59XG4uZmllbGRzZXQgLmZpZWxkOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tcmlnaHQ6IDA7XG59XG5cbi5lcnJvciB7XG4gIGNvbG9yOiAjZTUzOTM1O1xufVxuXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuZmxleC1jb250YWluZXIgLmZ1bGwtd2lkdGgge1xuICAgIG1pbi13aWR0aDogY2FsYygxMDAlIC0gMWVtKTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5mbGV4LWNvbnRhaW5lciAuZnVsbC13aWR0aCB7XG4gICAgbWluLXdpZHRoOiBjYWxjKDEwMCUgLSAxZW0pO1xuICB9XG59XG4uZmxleC1jb250YWluZXIgbWF0LWZvcm0tZmllbGQgOjpuZy1kZWVwIGRpdiBkaXYge1xuICBoZWlnaHQ6IDQ3cHg7XG59IiwiQGltcG9ydCBcInZhcnNcIjtcblxuQG1peGluIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJHNpemUsICRxdWFsaWZpZXIpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBpZiAoJHF1YWxpZmllciA9PSBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIGlmICgkcXVhbGlmaWVyID09IG1heC13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtYXgtd2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBtaXhpbiBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJG1pbiwgJG1heCkge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gdGhpcyBpcyBhIGNvcHkgb2YgcmVzcG9uZC10by4gd2UgZG9uJ3Qgd2FudCB0byBwcmVzZXJ2ZSB0aGF0IG1ldGhvZCBzaW5jZSB0aGUgYnJlYWtwb2ludHMgbWF5IGRpdmVyZ2UgZnJvbSB0aGUgb2xkIFVJLlxuQG1peGluIGlzLXNjcmVlbi1zaXplKCRtZWRpYTogYWxsLCAkb3JpZW50YXRpb246IG5vbmUpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuXG5AbWl4aW4gcGFnZS1wYWRkaW5nIHtcbiAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xufVxuXG4vLyBGb250IE1peGluc1xuJGZvbnQtbWNraW5zZXktc2FuczogXCJNY0tpbnNleSBTYW5zXCI7XG4kZm9udC10aGVpbmhhcmR0OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiRmb250LWJvd2VyOiBcIkJvd2VyXCI7XG5cbkBtaXhpbiBib3dlci1ib2xkIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtYm93ZXI7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIG1ja2luc2V5LXNhbnMge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBkaXNwbGF5LTEge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDRyZW07IC8vIDY0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTg3OyAvLyA3NnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0yIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0zIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTQge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzcmVtOyAvLyA0OHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTY2OyAvLyA1NnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDY0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTUge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuODMzOyAvLyAzNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42NDI7IC8vIDQwcHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTcge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDQ4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjc1cmVtOyAvLyA0NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNTJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICBsaW5lLWhlaWdodDogMS4xMTE7IC8vIDQ0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA0OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0zIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjIyOyAvLyA0NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy00IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy01IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyODhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy02IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTU1OyAvLyAyOHB4XG4gICAgfVxufVxuXG5AbWl4aW4gYm9keS1kZWZhdWx0IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI2cHhcbiAgICB9XG59XG5cbi8vLyBEb2VzbnQgZXhpc3QgaW4gTURTLlxuQG1peGluIGJvZHktdGlueSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07IC8vIDEycHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyMHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZm9ybS1sYWJlbCB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LWZhbWlseTogJGZvbnQtdGhlaW5oYXJkdDtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgY29sb3I6ICRwbGFjZWhvbGRlci1jb2xvcjtcbiAgICBmb250LXdlaWdodDogMzAwO1xufVxuXG5AbWl4aW4gY2hpcC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIGNoZWNrYm94LWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgY29sb3I6IGJsYWNrO1xufVxuXG4vLyBib3JkZXJzXG5cbkBtaXhpbiBtY2stY2hlY2tib3gtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAycHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLXRoaW4tYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlci1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJvcmRlci1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50LWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXItbGlnaHQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5cbi8vIGZ1bmN0aW9uc1xuXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbkBtaXhpbiBtYXgtbGluZXMoJGNvdW50KSB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAtd2Via2l0LWxpbmUtY2xhbXA6ICRjb3VudDtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuXG4vLyBpbWFnZXNcbkBtaXhpbiBtY2staWNvbigkd2lkdGgsICRhc3NldCwgJGhlaWdodDogJHdpZHRoLCAgJGFzc2V0UGF0aDogXCJsaWJzL3VpL3NyYy9saWIvaWNvbnNcIiwpIHtcbiAgICB3aWR0aDogJHdpZHRoO1xuICAgIGhlaWdodDogJGhlaWdodDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIjeyRhc3NldFBhdGh9LyN7JGFzc2V0fVwiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG59XG5cblxuQG1peGluIG1jay1zbWFsbC1pY29uKCRtb2JpbGUtYXNzZXQsICRkZXNrdG9wLWFzc2V0OiAkbW9iaWxlLWFzc2V0KSB7XG4gICAgQGluY2x1ZGUgbWNrLWljb24oMTZweCwgJGFzc2V0OiAkbW9iaWxlLWFzc2V0KTtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oMjRweCwgJGFzc2V0OiAkZGVza3RvcC1hc3NldCk7XG4gICAgfVxufVxuXG4vLyBza2VsZXRvblxuQG1peGluIHNrZWxldG9uLWJnIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItaW1hZ2Utc2l6ZSB7XG4gICAgd2lkdGg6IDgxcHg7XG4gICAgaGVpZ2h0OiA4MnB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMjE5cHg7XG4gICAgICAgIGhlaWdodDogMTE5cHg7XG4gICAgfVxufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItc3RhdHVzLXNpemUge1xuICAgIHdpZHRoOiAxMTdweDtcbiAgICBoZWlnaHQ6IDc4cHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAxMTdweDtcbiAgICAgICAgaGVpZ2h0OiA3OHB4O1xuICAgIH1cbn1cbiIsIi8vIEltcG9ydCBhbGwgdGhlIHRoZW1pbmcgZnVuY3Rpb25hbGl0eS5cbi8vIFdlIHdhbnQgb3ZlcmxheXMgdG8gYWx3YXlzIGFwcGVhciBvdmVyIHVzZXIgY29udGVudCwgc28gc2V0IGEgYmFzZWxpbmVcbi8vIHZlcnkgaGlnaCB6LWluZGV4IGZvciB0aGUgb3ZlcmxheSBjb250YWluZXIsIHdoaWNoIGlzIHdoZXJlIHdlIGNyZWF0ZSB0aGUgbmV3XG4vLyBzdGFja2luZyBjb250ZXh0IGZvciBhbGwgb3ZlcmxheXMuXG4kY2RrLXotaW5kZXgtb3ZlcmxheS1jb250YWluZXI6IDEwMDAgIWRlZmF1bHQ7XG4kY2RrLXotaW5kZXgtb3ZlcmxheTogMTAwMCAhZGVmYXVsdDtcbiRjZGstei1pbmRleC1vdmVybGF5LWJhY2tkcm9wOiAxMDAwICFkZWZhdWx0O1xuXG4vLyBCYWNrZ3JvdW5kIGNvbG9yIGZvciBhbGwgb2YgdGhlIGJhY2tkcm9wc1xuJGNkay1vdmVybGF5LWRhcmstYmFja2Ryb3AtYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjMyKSAhZGVmYXVsdDtcblxuLy8gRGVmYXVsdCBiYWNrZHJvcCBhbmltYXRpb24gaXMgYmFzZWQgb24gdGhlIE1hdGVyaWFsIERlc2lnbiBzd2lmdC1lYXNlLW91dC5cbiRiYWNrZHJvcC1hbmltYXRpb24tZHVyYXRpb246IDQwMG1zICFkZWZhdWx0O1xuJGJhY2tkcm9wLWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpICFkZWZhdWx0O1xuXG5cbkBtaXhpbiBjZGstb3ZlcmxheSgpIHtcbiAgLmNkay1vdmVybGF5LWNvbnRhaW5lciwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyIHtcbiAgICAvLyBEaXNhYmxlIGV2ZW50cyBmcm9tIGJlaW5nIGNhcHR1cmVkIG9uIHRoZSBvdmVybGF5IGNvbnRhaW5lci5cbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcblxuICAgIC8vIFRoZSBjb250YWluZXIgc2hvdWxkIGJlIHRoZSBzaXplIG9mIHRoZSB2aWV3cG9ydC5cbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICAvLyBUaGUgb3ZlcmxheS1jb250YWluZXIgaXMgYW4gaW52aXNpYmxlIGVsZW1lbnQgd2hpY2ggY29udGFpbnMgYWxsIGluZGl2aWR1YWwgb3ZlcmxheXMuXG4gIC5jZGstb3ZlcmxheS1jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB6LWluZGV4OiAkY2RrLXotaW5kZXgtb3ZlcmxheS1jb250YWluZXI7XG5cbiAgICAmOmVtcHR5IHtcbiAgICAgIC8vIEhpZGUgdGhlIGVsZW1lbnQgd2hlbiBpdCBkb2Vzbid0IGhhdmUgYW55IGNoaWxkIG5vZGVzLiBUaGlzIGRvZXNuJ3RcbiAgICAgIC8vIGluY2x1ZGUgb3ZlcmxheXMgdGhhdCBoYXZlIGJlZW4gZGV0YWNoZWQsIHJhdGhlciB0aGFuIGRpc3Bvc2VkLlxuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAvLyBXZSB1c2UgYW4gZXh0cmEgd3JhcHBlciBlbGVtZW50IGluIG9yZGVyIHRvIHVzZSBtYWtlIHRoZSBvdmVybGF5IGl0c2VsZiBhIGZsZXggaXRlbS5cbiAgLy8gVGhpcyBtYWtlcyBjZW50ZXJpbmcgdGhlIG92ZXJsYXkgZWFzeSB3aXRob3V0IHJ1bm5pbmcgaW50byB0aGUgc3VicGl4ZWwgcmVuZGVyaW5nXG4gIC8vIHByb2JsZW1zIHRpZWQgdG8gdXNpbmcgYHRyYW5zZm9ybWAgYW5kIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCB0aGUgb3RoZXIgcG9zaXRpb25cbiAgLy8gc3RyYXRlZ2llcy5cbiAgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB6LWluZGV4OiAkY2RrLXotaW5kZXgtb3ZlcmxheTtcbiAgfVxuXG4gIC8vIEEgc2luZ2xlIG92ZXJsYXkgcGFuZS5cbiAgLmNkay1vdmVybGF5LXBhbmUge1xuICAgIC8vIE5vdGU6IGl0J3MgaW1wb3J0YW50IGZvciB0aGlzIG9uZSB0byBzdGFydCBvZmYgYGFic29sdXRlYCxcbiAgICAvLyBpbiBvcmRlciBmb3IgdXMgdG8gYmUgYWJsZSB0byBtZWFzdXJlIGl0IGNvcnJlY3RseS5cbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB6LWluZGV4OiAkY2RrLXotaW5kZXgtb3ZlcmxheTtcblxuICAgIC8vIEZvciBjb25uZWN0ZWQtcG9zaXRpb24gb3ZlcmxheXMsIHdlIHNldCBgZGlzcGxheTogZmxleGAgaW5cbiAgICAvLyBvcmRlciB0byBmb3JjZSBgbWF4LXdpZHRoYCBhbmQgYG1heC1oZWlnaHRgIHRvIHRha2UgZWZmZWN0LlxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gIH1cblxuICAuY2RrLW92ZXJsYXktYmFja2Ryb3Age1xuICAgIC8vIFRPRE8oamVsYm91cm4pOiByZXVzZSBzaWRlbmF2IGZ1bGxzY3JlZW4gbWl4aW4uXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcblxuICAgIHotaW5kZXg6ICRjZGstei1pbmRleC1vdmVybGF5LWJhY2tkcm9wO1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAkYmFja2Ryb3AtYW5pbWF0aW9uLWR1cmF0aW9uICRiYWNrZHJvcC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uO1xuICAgIG9wYWNpdHk6IDA7XG5cbiAgICAmLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmcge1xuICAgICAgb3BhY2l0eTogMTtcblxuICAgICAgLy8gSW4gaGlnaCBjb250cmFzdCBtb2RlIHRoZSByZ2JhIGJhY2tncm91bmQgd2lsbCBiZWNvbWUgc29saWQgc28gd2UgbmVlZCB0byBmYWxsIGJhY2tcbiAgICAgIC8vIHRvIG1ha2luZyBpdCBvcGFxdWUgdXNpbmcgYG9wYWNpdHlgLiBOb3RlIHRoYXQgd2UgY2FuJ3QgdXNlIHRoZSBgY2RrLWhpZ2gtY29udHJhc3RgXG4gICAgICAvLyBtaXhpbiwgYmVjYXVzZSB3ZSBjYW4ndCBub3JtYWxpemUgdGhlIGltcG9ydCBwYXRoIHRvIHRoZSBfYTExeS5zY3NzIGJvdGggZm9yIHRoZVxuICAgICAgLy8gc291cmNlIGFuZCB3aGVuIHRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZC4gU2VlICMxMDkwOC5cbiAgICAgIEBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSB7XG4gICAgICAgIG9wYWNpdHk6IDAuNjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcCB7XG4gICAgYmFja2dyb3VuZDogJGNkay1vdmVybGF5LWRhcmstYmFja2Ryb3AtYmFja2dyb3VuZDtcbiAgfVxuXG4gIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCB7XG4gICAgLy8gTm90ZTogYXMgb2YgRmlyZWZveCA1NywgaGF2aW5nIHRoZSBiYWNrZHJvcCBiZSBgYmFja2dyb3VuZDogbm9uZWAgd2lsbCBwcmV2ZW50IGl0IGZyb21cbiAgICAvLyBjYXB0dXJpbmcgdGhlIHVzZXIncyBtb3VzZSBzY3JvbGwgZXZlbnRzLiBTaW5jZSB3ZSBhbHNvIGNhbid0IHVzZSBzb21ldGhpbmcgbGlrZVxuICAgIC8vIGByZ2JhKDAsIDAsIDAsIDApYCwgd2Ugd29yayBhcm91bmQgdGhlIGluY29uc2lzdGVuY3kgYnkgbm90IHNldHRpbmcgdGhlIGJhY2tncm91bmQgYXRcbiAgICAvLyBhbGwgYW5kIHVzaW5nIGBvcGFjaXR5YCB0byBtYWtlIHRoZSBlbGVtZW50IHRyYW5zcGFyZW50LlxuICAgICYsICYuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyB7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgfVxuXG4gIC8vIE92ZXJsYXkgcGFyZW50IGVsZW1lbnQgdXNlZCB3aXRoIHRoZSBjb25uZWN0ZWQgcG9zaXRpb24gc3RyYXRlZ3kuIFVzZWQgdG8gY29uc3RyYWluIHRoZVxuICAvLyBvdmVybGF5IGVsZW1lbnQncyBzaXplIHRvIGZpdCB3aXRoaW4gdGhlIHZpZXdwb3J0LlxuICAuY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHotaW5kZXg6ICRjZGstei1pbmRleC1vdmVybGF5O1xuXG4gICAgLy8gV2UgdXNlIGBkaXNwbGF5OiBmbGV4YCBvbiB0aGlzIGVsZW1lbnQgZXhjbHVzaXZlbHkgZm9yIGNlbnRlcmluZyBjb25uZWN0ZWQgb3ZlcmxheXMuXG4gICAgLy8gV2hlbiAqbm90KiBjZW50ZXJpbmcsIGEgdG9wL2xlZnQvYm90dG9tL3JpZ2h0IHdpbGwgYmUgc2V0IHdoaWNoIG92ZXJyaWRlcyB0aGUgbm9ybWFsXG4gICAgLy8gZmxleCBsYXlvdXQuXG4gICAgZGlzcGxheTogZmxleDtcblxuICAgIC8vIFdlIHVzZSB0aGUgYGNvbHVtbmAgZGlyZWN0aW9uIGhlcmUgdG8gYXZvaWQgc29tZSBmbGV4Ym94IGlzc3VlcyBpbiBFZGdlXG4gICAgLy8gd2hlbiB1c2luZyB0aGUgXCJncm93IGFmdGVyIG9wZW5cIiBvcHRpb25zLlxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgICAvLyBBZGQgc29tZSBkaW1lbnNpb25zIHNvIHRoZSBlbGVtZW50IGhhcyBhbiBgaW5uZXJUZXh0YCB3aGljaCBzb21lIHBlb3BsZSBkZXBlbmQgb24gaW4gdGVzdHMuXG4gICAgbWluLXdpZHRoOiAxcHg7XG4gICAgbWluLWhlaWdodDogMXB4O1xuICB9XG5cbiAgLy8gVXNlZCB3aGVuIGRpc2FibGluZyBnbG9iYWwgc2Nyb2xsaW5nLlxuICAuY2RrLWdsb2JhbC1zY3JvbGxibG9jayB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuXG4gICAgLy8gTmVjZXNzYXJ5IGZvciB0aGUgY29udGVudCBub3QgdG8gbG9zZSBpdHMgd2lkdGguIE5vdGUgdGhhdCB3ZSdyZSB1c2luZyAxMDAlLCBpbnN0ZWFkIG9mXG4gICAgLy8gMTAwdncsIGJlY2F1c2UgMTAwdncgaW5jbHVkZXMgdGhlIHdpZHRoIHBsdXMgdGhlIHNjcm9sbGJhciwgd2hlcmVhcyAxMDAlIGlzIHRoZSB3aWR0aFxuICAgIC8vIHRoYXQgdGhlIGVsZW1lbnQgaGFkIGJlZm9yZSB3ZSBtYWRlIGl0IGBmaXhlZGAuXG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICAvLyBOb3RlOiB0aGlzIHdpbGwgYWx3YXlzIGFkZCBhIHNjcm9sbGJhciB0byB3aGF0ZXZlciBlbGVtZW50IGl0IGlzIG9uLCB3aGljaCBjYW5cbiAgICAvLyBwb3RlbnRpYWxseSByZXN1bHQgaW4gZG91YmxlIHNjcm9sbGJhcnMuIEl0IHNob3VsZG4ndCBiZSBhbiBpc3N1ZSwgYmVjYXVzZSB3ZSB3b24ndFxuICAgIC8vIGJsb2NrIHNjcm9sbGluZyBvbiBhIHBhZ2UgdGhhdCBkb2Vzbid0IGhhdmUgYSBzY3JvbGxiYXIgaW4gdGhlIGZpcnN0IHBsYWNlLlxuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxufVxuXG5AbWl4aW4gY2RrLWExMXkge1xuICAuY2RrLXZpc3VhbGx5LWhpZGRlbiB7XG4gICAgYm9yZGVyOiAwO1xuICAgIGNsaXA6IHJlY3QoMCAwIDAgMCk7XG4gICAgaGVpZ2h0OiAxcHg7XG4gICAgbWFyZ2luOiAtMXB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcGFkZGluZzogMDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgd2lkdGg6IDFweDtcblxuICAgIC8vIEF2b2lkIGJyb3dzZXJzIHJlbmRlcmluZyB0aGUgZm9jdXMgcmluZyBpbiBzb21lIGNhc2VzLlxuICAgIG91dGxpbmU6IDA7XG5cbiAgICAvLyBBdm9pZCBzb21lIGNhc2VzIHdoZXJlIHRoZSBicm93c2VyIHdpbGwgc3RpbGwgcmVuZGVyIHRoZSBuYXRpdmUgY29udHJvbHMgKHNlZSAjOTA0OSkuXG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcbiAgfVxufVxuXG4vLy8gRW1pdHMgdGhlIG1peGluJ3MgY29udGVudCBuZXN0ZWQgdW5kZXIgYCRzZWxlY3Rvci1jb250ZXh0YCBpZiBgJHNlbGVjdG9yLWNvbnRleHRgXG4vLy8gaXMgbm9uLWVtcHR5LlxuLy8vIEBwYXJhbSBzZWxlY3Rvci1jb250ZXh0IFRoZSBzZWxlY3RvciB1bmRlciB3aGljaCB0byBuZXN0IHRoZSBtaXhpbidzIGNvbnRlbnQuXG5AbWl4aW4gX2Nkay1vcHRpb25hbGx5LW5lc3QtY29udGVudCgkc2VsZWN0b3ItY29udGV4dCkge1xuICBAaWYgKCRzZWxlY3Rvci1jb250ZXh0ID09ICcnKSB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cbiAgQGVsc2Uge1xuICAgICN7JHNlbGVjdG9yLWNvbnRleHR9IHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfVxufVxuXG4vLy8gQXBwbGllcyBzdHlsZXMgZm9yIHVzZXJzIGluIGhpZ2ggY29udHJhc3QgbW9kZS4gTm90ZSB0aGF0IHRoaXMgb25seSBhcHBsaWVzXG4vLy8gdG8gTWljcm9zb2Z0IGJyb3dzZXJzLiBDaHJvbWUgY2FuIGJlIGluY2x1ZGVkIGJ5IGNoZWNraW5nIGZvciB0aGUgYGh0bWxbaGNdYFxuLy8vIGF0dHJpYnV0ZSwgaG93ZXZlciBDaHJvbWUgaGFuZGxlcyBoaWdoIGNvbnRyYXN0IGRpZmZlcmVudGx5LlxuLy8vXG4vLy8gQHBhcmFtIHRhcmdldCBXaGljaCBraW5kIG9mIGhpZ2ggY29udHJhc3Qgc2V0dGluZyB0byB0YXJnZXQuIERlZmF1bHRzIHRvIGBhY3RpdmVgLCBjYW4gYmVcbi8vLyAgICBgd2hpdGUtb24tYmxhY2tgIG9yIGBibGFjay1vbi13aGl0ZWAuXG4vLy8gQHBhcmFtIGVuY2Fwc3VsYXRpb24gV2hldGhlciB0byBlbWl0IHN0eWxlcyBmb3IgdmlldyBlbmNhcHN1bGF0aW9uLiBWYWx1ZXMgYXJlOlxuLy8vICAgICAqIGBvbmAgLSB3b3JrcyBmb3IgYEVtdWxhdGVkYCwgYE5hdGl2ZWAsIGFuZCBgU2hhZG93RG9tYFxuLy8vICAgICAqIGBvZmZgIC0gd29ya3MgZm9yIGBOb25lYFxuLy8vICAgICAqIGBhbnlgIC0gd29ya3MgZm9yIGFsbCBlbmNhcHN1bGF0aW9uIG1vZGVzIGJ5IGVtaXR0aW5nIHRoZSBDU1MgdHdpY2UgKGRlZmF1bHQpLlxuQG1peGluIGNkay1oaWdoLWNvbnRyYXN0KCR0YXJnZXQ6IGFjdGl2ZSwgJGVuY2Fwc3VsYXRpb246ICdhbnknKSB7XG4gIEBpZiAoJHRhcmdldCAhPSAnYWN0aXZlJyBhbmQgJHRhcmdldCAhPSAnYmxhY2stb24td2hpdGUnIGFuZCAkdGFyZ2V0ICE9ICd3aGl0ZS1vbi1ibGFjaycpIHtcbiAgICBAZXJyb3IgJ1Vua25vd24gY2RrLWhpZ2gtY29udHJhc3QgdmFsdWUgXCIjeyR0YXJnZXR9XCIgcHJvdmlkZWQuICcgK1xuICAgICAgICAgICAnQWxsb3dlZCB2YWx1ZXMgYXJlIFwiYWN0aXZlXCIsIFwiYmxhY2stb24td2hpdGVcIiwgYW5kIFwid2hpdGUtb24tYmxhY2tcIic7XG4gIH1cblxuICBAaWYgKCRlbmNhcHN1bGF0aW9uICE9ICdvbicgYW5kICRlbmNhcHN1bGF0aW9uICE9ICdvZmYnIGFuZCAkZW5jYXBzdWxhdGlvbiAhPSAnYW55Jykge1xuICAgIEBlcnJvciAnVW5rbm93biBjZGstaGlnaC1jb250cmFzdCBlbmNhcHN1bGF0aW9uIFwiI3skZW5jYXBzdWxhdGlvbn1cIiBwcm92aWRlZC4gJyArXG4gICAgICAgICAgICdBbGxvd2VkIHZhbHVlcyBhcmUgXCJvblwiLCBcIm9mZlwiLCBhbmQgXCJhbnlcIic7XG4gIH1cblxuICAvLyBJZiB0aGUgc2VsZWN0b3IgY29udGV4dCBoYXMgbXVsdGlwbGUgcGFydHMsIHN1Y2ggYXMgYC5zZWN0aW9uLCAucmVnaW9uYCwganVzdCBkb2luZ1xuICAvLyBgLmNkay1oaWdoLWNvbnRyYXN0LXh4eCAjeyZ9YCB3aWxsIG9ubHkgYXBwbHkgdGhlIHBhcmVudCBzZWxlY3RvciB0byB0aGUgZmlyc3QgcGFydCBvZiB0aGVcbiAgLy8gY29udGV4dC4gV2UgYWRkcmVzcyB0aGlzIGJ5IG5lc3RpbmcgdGhlIHNlbGVjdG9yIGNvbnRleHQgdW5kZXIgLmNkay1oaWdoLWNvbnRyYXN0LlxuICBAYXQtcm9vdCB7XG4gICAgJHNlbGVjdG9yLWNvbnRleHQ6ICN7Jn07XG5cbiAgICBAaWYgKCRlbmNhcHN1bGF0aW9uICE9ICdvbicpIHtcbiAgICAgIC5jZGstaGlnaC1jb250cmFzdC0jeyR0YXJnZXR9IHtcbiAgICAgICAgQGluY2x1ZGUgX2Nkay1vcHRpb25hbGx5LW5lc3QtY29udGVudCgkc2VsZWN0b3ItY29udGV4dCkge1xuICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGlmICgkZW5jYXBzdWxhdGlvbiAhPSAnb2ZmJykge1xuICAgICAgLmNkay1oaWdoLWNvbnRyYXN0LSN7JHRhcmdldH0gOmhvc3Qge1xuICAgICAgICBAaW5jbHVkZSBfY2RrLW9wdGlvbmFsbHktbmVzdC1jb250ZW50KCRzZWxlY3Rvci1jb250ZXh0KSB7XG4gICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gQ29yZSBzdHlsZXMgdGhhdCBlbmFibGUgbW9uaXRvcmluZyBhdXRvZmlsbCBzdGF0ZSBvZiB0ZXh0IGZpZWxkcy5cbkBtaXhpbiBjZGstdGV4dC1maWVsZCB7XG4gIC8vIEtleWZyYW1lcyB0aGF0IGFwcGx5IG5vIHN0eWxlcywgYnV0IGFsbG93IHVzIHRvIG1vbml0b3Igd2hlbiBhbiB0ZXh0IGZpZWxkIGJlY29tZXMgYXV0b2ZpbGxlZFxuICAvLyBieSB3YXRjaGluZyBmb3IgdGhlIGFuaW1hdGlvbiBldmVudHMgdGhhdCBhcmUgZmlyZWQgd2hlbiB0aGV5IHN0YXJ0LiBOb3RlOiB0aGUgLyohKi8gY29tbWVudCBpc1xuICAvLyBuZWVkZWQgdG8gcHJldmVudCBMaWJTYXNzIGZyb20gc3RyaXBwaW5nIHRoZSBrZXlmcmFtZXMgb3V0LlxuICAvLyBCYXNlZCBvbjogaHR0cHM6Ly9tZWRpdW0uY29tL0BicnVubi9kZXRlY3RpbmctYXV0b2ZpbGxlZC1maWVsZHMtaW4tamF2YXNjcmlwdC1hZWQ1OThkMjVkYTdcbiAgQGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCB7LyohKi99XG4gIEBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIHsvKiEqL31cblxuICAuY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOi13ZWJraXQtYXV0b2ZpbGwge1xuICAgIC8vIFNpbmNlIENocm9tZSA4MCB3ZSBuZWVkIGEgMW1zIGRlbGF5LCBvciB0aGUgYW5pbWF0aW9uc3RhcnQgZXZlbnQgd29uJ3QgZmlyZS5cbiAgICBhbmltYXRpb246IGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtcztcbiAgfVxuXG4gIC5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWQ6bm90KDotd2Via2l0LWF1dG9maWxsKSB7XG4gICAgLy8gU2luY2UgQ2hyb21lIDgwIHdlIG5lZWQgYSAxbXMgZGVsYXksIG9yIHRoZSBhbmltYXRpb25zdGFydCBldmVudCB3b24ndCBmaXJlLlxuICAgIGFuaW1hdGlvbjogY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtcztcbiAgfVxuXG4gIC8vIFJlbW92ZSB0aGUgcmVzaXplIGhhbmRsZSBvbiBhdXRvc2l6aW5nIHRleHRhcmVhcywgYmVjYXVzZSB3aGF0ZXZlciBoZWlnaHRcbiAgLy8gdGhlIHVzZXIgcmVzaXplZCB0byB3aWxsIGJlIG92ZXJ3cml0dGVuIG9uY2UgdGhleSBzdGFydCB0eXBpbmcgYWdhaW4uXG4gIHRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZSB7XG4gICAgcmVzaXplOiBub25lO1xuICB9XG5cbiAgLy8gVGhpcyBjbGFzcyBpcyB0ZW1wb3JhcmlseSBhcHBsaWVkIHRvIHRoZSB0ZXh0YXJlYSB3aGVuIGl0IGlzIGJlaW5nIG1lYXN1cmVkLiBJdCBpcyBpbW1lZGlhdGVseVxuICAvLyByZW1vdmVkIHdoZW4gbWVhc3VyaW5nIGlzIGNvbXBsZXRlLiBXZSB1c2UgYCFpbXBvcnRhbnRgIHJ1bGVzIGhlcmUgdG8gbWFrZSBzdXJlIHVzZXItc3BlY2lmaWVkXG4gIC8vIHJ1bGVzIGRvIG5vdCBpbnRlcmZlcmUgd2l0aCB0aGUgbWVhc3VyZW1lbnQuXG4gIHRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmcge1xuICAgIGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xuICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcbiAgICAvLyBIYXZpbmcgMnB4IHRvcCBhbmQgYm90dG9tIHBhZGRpbmcgc2VlbXMgdG8gZml4IGEgYnVnIHdoZXJlIENocm9tZSBnZXRzIGFuIGluY29ycmVjdFxuICAgIC8vIG1lYXN1cmVtZW50LiBXZSBqdXN0IGhhdmUgdG8gYWNjb3VudCBmb3IgaXQgbGF0ZXIgYW5kIHN1YnRyYWN0IGl0IG9mZiB0aGUgZmluYWwgcmVzdWx0LlxuICAgIHBhZGRpbmc6IDJweCAwICFpbXBvcnRhbnQ7XG4gICAgYm94LXNpemluZzogY29udGVudC1ib3ggIWltcG9ydGFudDtcbiAgfVxufVxuXG4vLyBVc2VkIHRvIGdlbmVyYXRlIFVJRHMgZm9yIGtleWZyYW1lcyB1c2VkIHRvIGNoYW5nZSB0aGUgdGV4dCBmaWVsZCBhdXRvZmlsbCBzdHlsZXMuXG4kY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItZnJhbWUtY291bnQ6IDA7XG5cbi8vIE1peGluIHVzZWQgdG8gYXBwbHkgY3VzdG9tIGJhY2tncm91bmQgYW5kIGZvcmVncm91bmQgY29sb3JzIHRvIGFuIGF1dG9maWxsZWQgdGV4dCBmaWVsZC5cbi8vIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yNzgxNTQ5L1xuLy8gcmVtb3ZpbmctaW5wdXQtYmFja2dyb3VuZC1jb2xvdXItZm9yLWNocm9tZS1hdXRvY29tcGxldGUjYW5zd2VyLTM3NDMyMjYwXG5AbWl4aW4gY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3IoJGJhY2tncm91bmQsICRmb3JlZ3JvdW5kOicnKSB7XG4gIEBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItI3skY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItZnJhbWUtY291bnR9IHtcbiAgICB0byB7XG4gICAgICBiYWNrZ3JvdW5kOiAkYmFja2dyb3VuZDtcbiAgICAgIEBpZiAkZm9yZWdyb3VuZCAhPSAnJyB7IGNvbG9yOiAkZm9yZWdyb3VuZDsgfVxuICAgIH1cbiAgfVxuXG4gICY6LXdlYmtpdC1hdXRvZmlsbCB7XG4gICAgYW5pbWF0aW9uOiBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci0jeyRjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci1mcmFtZS1jb3VudH0gYm90aDtcbiAgfVxuXG4gICYuY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOi13ZWJraXQtYXV0b2ZpbGwge1xuICAgIC8vIFNpbmNlIENocm9tZSA4MCB3ZSBuZWVkIGEgMW1zIGRlbGF5IGZvciBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCwgb3IgdGhlIGFuaW1hdGlvbnN0YXJ0XG4gICAgLy8gZXZlbnQgd29uJ3QgZmlyZS5cbiAgICBhbmltYXRpb246IGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtcyxcbiAgICAgICAgICAgICAgIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLSN7JGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLWZyYW1lLWNvdW50fSBib3RoO1xuICB9XG5cbiAgJGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLWZyYW1lLWNvdW50OlxuICAgICAgJGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLWZyYW1lLWNvdW50ICsgMSAhZ2xvYmFsO1xufVxuXG5cbi8vIENvcmUgc3R5bGVzIHRoYXQgY2FuIGJlIHVzZWQgdG8gYXBwbHkgbWF0ZXJpYWwgZGVzaWduIHRyZWF0bWVudHMgdG8gYW55IGVsZW1lbnQuXG4vLyBNZWRpYSBxdWVyaWVzXG4vLyBUT0RPKGpvc2VwaHBlcnJvdHQpOiBDaGFuZ2UgJG1hdC14c21hbGwgYW5kICRtYXQtc21hbGwgdXNhZ2VzIHRvIHJlbHkgb24gQnJlYWtwb2ludE9ic2VydmVyLFxuJG1hdC14c21hbGw6ICdtYXgtd2lkdGg6IDU5OXB4JztcbiRtYXQtc21hbGw6ICdtYXgtd2lkdGg6IDk1OXB4JztcblxuLy8gVE9ETzogUmV2aXNpdCBhbGwgei1pbmRpY2VzIGJlZm9yZSBiZXRhXG4vLyB6LWluZGV4IG1hc3RlciBsaXN0XG5cbiR6LWluZGV4LWZhYjogMjAgIWRlZmF1bHQ7XG4kei1pbmRleC1kcmF3ZXI6IDEwMCAhZGVmYXVsdDtcblxuLy8gR2xvYmFsIGNvbnN0YW50c1xuJHBpOiAzLjE0MTU5MjY1O1xuXG4vLyBQYWRkaW5nIGJldHdlZW4gaW5wdXQgdG9nZ2xlcyBhbmQgdGhlaXIgbGFiZWxzXG4kbWF0LXRvZ2dsZS1wYWRkaW5nOiA4cHggIWRlZmF1bHQ7XG4vLyBXaWR0aCBhbmQgaGVpZ2h0IG9mIGlucHV0IHRvZ2dsZXNcbiRtYXQtdG9nZ2xlLXNpemU6IDIwcHggIWRlZmF1bHQ7XG5cbi8vIEVhc2luZyBDdXJ2ZXNcbi8vIFRPRE8oamVsYm91cm4pOiBhbGwgb2YgdGhlc2UgbmVlZCB0byBiZSByZXZpc2l0ZWRcblxuLy8gVGhlIGRlZmF1bHQgYW5pbWF0aW9uIGN1cnZlcyB1c2VkIGJ5IG1hdGVyaWFsIGRlc2lnbi5cbiRtYXQtbGluZWFyLW91dC1zbG93LWluLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKSAhZGVmYXVsdDtcbiRtYXQtZmFzdC1vdXQtc2xvdy1pbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgIWRlZmF1bHQ7XG4kbWF0LWZhc3Qtb3V0LWxpbmVhci1pbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDEsIDEpICFkZWZhdWx0O1xuXG4kZWFzZS1pbi1vdXQtY3VydmUtZnVuY3Rpb246IGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKSAhZGVmYXVsdDtcblxuJHN3aWZ0LWVhc2Utb3V0LWR1cmF0aW9uOiA0MDBtcyAhZGVmYXVsdDtcbiRzd2lmdC1lYXNlLW91dC10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpICFkZWZhdWx0O1xuJHN3aWZ0LWVhc2Utb3V0OiBhbGwgJHN3aWZ0LWVhc2Utb3V0LWR1cmF0aW9uICRzd2lmdC1lYXNlLW91dC10aW1pbmctZnVuY3Rpb24gIWRlZmF1bHQ7XG5cbiRzd2lmdC1lYXNlLWluLWR1cmF0aW9uOiAzMDBtcyAhZGVmYXVsdDtcbiRzd2lmdC1lYXNlLWluLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNTUsIDAsIDAuNTUsIDAuMikgIWRlZmF1bHQ7XG4kc3dpZnQtZWFzZS1pbjogYWxsICRzd2lmdC1lYXNlLWluLWR1cmF0aW9uICRzd2lmdC1lYXNlLWluLXRpbWluZy1mdW5jdGlvbiAhZGVmYXVsdDtcblxuJHN3aWZ0LWVhc2UtaW4tb3V0LWR1cmF0aW9uOiA1MDBtcyAhZGVmYXVsdDtcbiRzd2lmdC1lYXNlLWluLW91dC10aW1pbmctZnVuY3Rpb246ICRlYXNlLWluLW91dC1jdXJ2ZS1mdW5jdGlvbiAhZGVmYXVsdDtcbiRzd2lmdC1lYXNlLWluLW91dDogYWxsICRzd2lmdC1lYXNlLWluLW91dC1kdXJhdGlvbiAkc3dpZnQtZWFzZS1pbi1vdXQtdGltaW5nLWZ1bmN0aW9uICFkZWZhdWx0O1xuXG4kc3dpZnQtbGluZWFyLWR1cmF0aW9uOiA4MG1zICFkZWZhdWx0O1xuJHN3aWZ0LWxpbmVhci10aW1pbmctZnVuY3Rpb246IGxpbmVhciAhZGVmYXVsdDtcbiRzd2lmdC1saW5lYXI6IGFsbCAkc3dpZnQtbGluZWFyLWR1cmF0aW9uICRzd2lmdC1saW5lYXItdGltaW5nLWZ1bmN0aW9uICFkZWZhdWx0O1xuXG5cblxuLy8gQSBjb2xsZWN0aW9uIG9mIG1peGlucyBhbmQgQ1NTIGNsYXNzZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBhcHBseSBlbGV2YXRpb24gdG8gYSBtYXRlcmlhbFxuLy8gZWxlbWVudC5cbi8vIFNlZTogaHR0cHM6Ly9tYXRlcmlhbC5pby9kZXNpZ24vZW52aXJvbm1lbnQvZWxldmF0aW9uLmh0bWxcbi8vIEV4YW1wbGVzOlxuLy9cbi8vXG4vLyAubWF0LWZvbyB7XG4vLyAgIEBpbmNsdWRlICRtYXQtZWxldmF0aW9uKDIpO1xuLy9cbi8vICAgJjphY3RpdmUge1xuLy8gICAgIEBpbmNsdWRlICRtYXQtZWxldmF0aW9uKDgpO1xuLy8gICB9XG4vLyB9XG4vL1xuLy8gPGRpdiBpZD1cImV4dGVybmFsLWNhcmRcIiBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejJcIj48cD5Tb21lIGNvbnRlbnQ8L3A+PC9kaXY+XG4vL1xuLy8gRm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBkZXNpZ24gYmVoaW5kIGhvdyBlbGV2YXRpb24gaXMgaW1wbGVtZW50ZWQsIHNlZSB0aGUgZGVzaWduIGRvYyBhdFxuLy8gaHR0cHM6Ly9nb28uZ2wvS3EwazlaLlxuXG4vLyBDb2xvcnMgZm9yIHVtYnJhLCBwZW51bWJyYSwgYW5kIGFtYmllbnQgc2hhZG93cy4gQXMgZGVzY3JpYmVkIGluIHRoZSBkZXNpZ24gZG9jLCBlYWNoIGVsZXZhdGlvblxuLy8gbGV2ZWwgaXMgY3JlYXRlZCB1c2luZyBhIHNldCBvZiAzIHNoYWRvdyB2YWx1ZXMsIG9uZSBmb3IgdW1icmEgKHRoZSBzaGFkb3cgcmVwcmVzZW50aW5nIHRoZVxuLy8gc3BhY2UgY29tcGxldGVseSBvYnNjdXJlZCBieSBhbiBvYmplY3QgcmVsYXRpdmUgdG8gaXRzIGxpZ2h0IHNvdXJjZSksIG9uZSBmb3IgcGVudW1icmEgKHRoZVxuLy8gc3BhY2UgcGFydGlhbGx5IG9ic2N1cmVkIGJ5IGFuIG9iamVjdCksIGFuZCBvbmUgZm9yIGFtYmllbnQgKHRoZSBzcGFjZSB3aGljaCBjb250YWlucyB0aGUgb2JqZWN0XG4vLyBpdHNlbGYpLiBGb3IgYSBmdXJ0aGVyIGV4cGxhbmF0aW9uIG9mIHRoZXNlIHRlcm1zIGFuZCB0aGVpciBtZWFuaW5ncywgc2VlXG4vLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9VbWJyYSxfcGVudW1icmFfYW5kX2FudHVtYnJhLlxuXG4vLyBNYXBzIGZvciB0aGUgZGlmZmVyZW50IHNoYWRvdyBzZXRzIGFuZCB0aGVpciB2YWx1ZXMgd2l0aGluIGVhY2ggei1zcGFjZS4gVGhlc2UgdmFsdWVzIHdlcmVcbi8vIGNyZWF0ZWQgYnkgdGFraW5nIGEgZmV3IHJlZmVyZW5jZSBzaGFkb3cgc2V0cyBjcmVhdGVkIGJ5IEdvb2dsZSdzIERlc2lnbmVycyBhbmQgaW50ZXJwb2xhdGluZ1xuLy8gYWxsIG9mIHRoZSB2YWx1ZXMgYmV0d2VlbiB0aGVtLlxuXG5AZnVuY3Rpb24gX2dldC11bWJyYS1tYXAoJGNvbG9yLCAkb3BhY2l0eSkge1xuICAkc2hhZG93LWNvbG9yOiBpZih0eXBlLW9mKCRjb2xvcikgPT0gY29sb3IsIHJnYmEoJGNvbG9yLCAkb3BhY2l0eSAqIDAuMiksICRjb2xvcik7XG5cbiAgQHJldHVybiAoXG4gICAgMDogJzBweCAwcHggMHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxOiAnMHB4IDJweCAxcHggLTFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyOiAnMHB4IDNweCAxcHggLTJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAzOiAnMHB4IDNweCAzcHggLTJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA0OiAnMHB4IDJweCA0cHggLTFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA1OiAnMHB4IDNweCA1cHggLTFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA2OiAnMHB4IDNweCA1cHggLTFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA3OiAnMHB4IDRweCA1cHggLTJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA4OiAnMHB4IDVweCA1cHggLTNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA5OiAnMHB4IDVweCA2cHggLTNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMDogJzBweCA2cHggNnB4IC0zcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTE6ICcwcHggNnB4IDdweCAtNHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEyOiAnMHB4IDdweCA4cHggLTRweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMzogJzBweCA3cHggOHB4IC00cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTQ6ICcwcHggN3B4IDlweCAtNHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE1OiAnMHB4IDhweCA5cHggLTVweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNjogJzBweCA4cHggMTBweCAtNXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE3OiAnMHB4IDhweCAxMXB4IC01cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTg6ICcwcHggOXB4IDExcHggLTVweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxOTogJzBweCA5cHggMTJweCAtNnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIwOiAnMHB4IDEwcHggMTNweCAtNnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIxOiAnMHB4IDEwcHggMTNweCAtNnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIyOiAnMHB4IDEwcHggMTRweCAtNnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIzOiAnMHB4IDExcHggMTRweCAtN3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDI0OiAnMHB4IDExcHggMTVweCAtN3B4ICN7JHNoYWRvdy1jb2xvcn0nXG4gICk7XG59XG5cbkBmdW5jdGlvbiBfZ2V0LXBlbnVtYnJhLW1hcCgkY29sb3IsICRvcGFjaXR5KSB7XG4gICRzaGFkb3ctY29sb3I6IGlmKHR5cGUtb2YoJGNvbG9yKSA9PSBjb2xvciwgcmdiYSgkY29sb3IsICRvcGFjaXR5ICogMC4xNCksICRjb2xvcik7XG5cbiAgQHJldHVybiAoXG4gICAgMDogJzBweCAwcHggMHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxOiAnMHB4IDFweCAxcHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDI6ICcwcHggMnB4IDJweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMzogJzBweCAzcHggNHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA0OiAnMHB4IDRweCA1cHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDU6ICcwcHggNXB4IDhweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNjogJzBweCA2cHggMTBweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNzogJzBweCA3cHggMTBweCAxcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgODogJzBweCA4cHggMTBweCAxcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgOTogJzBweCA5cHggMTJweCAxcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTA6ICcwcHggMTBweCAxNHB4IDFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMTogJzBweCAxMXB4IDE1cHggMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEyOiAnMHB4IDEycHggMTdweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTM6ICcwcHggMTNweCAxOXB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNDogJzBweCAxNHB4IDIxcHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE1OiAnMHB4IDE1cHggMjJweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTY6ICcwcHggMTZweCAyNHB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNzogJzBweCAxN3B4IDI2cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE4OiAnMHB4IDE4cHggMjhweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTk6ICcwcHggMTlweCAyOXB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMDogJzBweCAyMHB4IDMxcHggM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIxOiAnMHB4IDIxcHggMzNweCAzcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjI6ICcwcHggMjJweCAzNXB4IDNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMzogJzBweCAyM3B4IDM2cHggM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDI0OiAnMHB4IDI0cHggMzhweCAzcHggI3skc2hhZG93LWNvbG9yfSdcbiAgKTtcbn1cblxuQGZ1bmN0aW9uIF9nZXQtYW1iaWVudC1tYXAoJGNvbG9yLCAkb3BhY2l0eSkge1xuICAkc2hhZG93LWNvbG9yOiBpZih0eXBlLW9mKCRjb2xvcikgPT0gY29sb3IsIHJnYmEoJGNvbG9yLCAkb3BhY2l0eSAqIDAuMTIpLCAkY29sb3IpO1xuXG4gIEByZXR1cm4gKFxuICAgIDA6ICcwcHggMHB4IDBweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTogJzBweCAxcHggM3B4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyOiAnMHB4IDFweCA1cHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDM6ICcwcHggMXB4IDhweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNDogJzBweCAxcHggMTBweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNTogJzBweCAxcHggMTRweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNjogJzBweCAxcHggMThweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNzogJzBweCAycHggMTZweCAxcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgODogJzBweCAzcHggMTRweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgOTogJzBweCAzcHggMTZweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTA6ICcwcHggNHB4IDE4cHggM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDExOiAnMHB4IDRweCAyMHB4IDNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMjogJzBweCA1cHggMjJweCA0cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTM6ICcwcHggNXB4IDI0cHggNHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE0OiAnMHB4IDVweCAyNnB4IDRweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNTogJzBweCA2cHggMjhweCA1cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTY6ICcwcHggNnB4IDMwcHggNXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE3OiAnMHB4IDZweCAzMnB4IDVweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxODogJzBweCA3cHggMzRweCA2cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTk6ICcwcHggN3B4IDM2cHggNnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIwOiAnMHB4IDhweCAzOHB4IDdweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMTogJzBweCA4cHggNDBweCA3cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjI6ICcwcHggOHB4IDQycHggN3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIzOiAnMHB4IDlweCA0NHB4IDhweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyNDogJzBweCA5cHggNDZweCA4cHggI3skc2hhZG93LWNvbG9yfSdcbiAgKTtcbn1cblxuLy8gVGhlIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIGVsZXZhdGlvbiB0cmFuc2l0aW9ucy5cbiRtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tZHVyYXRpb246IDI4MG1zICFkZWZhdWx0O1xuXG4vLyBUaGUgZGVmYXVsdCBlYXNpbmcgdmFsdWUgZm9yIGVsZXZhdGlvbiB0cmFuc2l0aW9ucy5cbiRtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkbWF0LWZhc3Qtb3V0LXNsb3ctaW4tdGltaW5nLWZ1bmN0aW9uO1xuXG4vLyBUaGUgZGVmYXVsdCBjb2xvciBmb3IgZWxldmF0aW9uIHNoYWRvd3MuXG4kbWF0LWVsZXZhdGlvbi1jb2xvcjogYmxhY2sgIWRlZmF1bHQ7XG5cbi8vIFRoZSBkZWZhdWx0IG9wYWNpdHkgc2NhbGluZyB2YWx1ZSBmb3IgZWxldmF0aW9uIHNoYWRvd3MuXG4kbWF0LWVsZXZhdGlvbi1vcGFjaXR5OiAxICFkZWZhdWx0O1xuXG4vLyBQcmVmaXggZm9yIGVsZXZhdGlvbi1yZWxhdGVkIHNlbGVjdG9ycy5cbiRfbWF0LWVsZXZhdGlvbi1wcmVmaXg6ICdtYXQtZWxldmF0aW9uLXonO1xuXG4vLyBBcHBsaWVzIHRoZSBjb3JyZWN0IGNzcyBydWxlcyB0byBhbiBlbGVtZW50IHRvIGdpdmUgaXQgdGhlIGVsZXZhdGlvbiBzcGVjaWZpZWQgYnkgJHpWYWx1ZS5cbi8vIFRoZSAkelZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyNC5cbkBtaXhpbiBtYXQtZWxldmF0aW9uKCR6VmFsdWUsICRjb2xvcjogJG1hdC1lbGV2YXRpb24tY29sb3IsICRvcGFjaXR5OiAkbWF0LWVsZXZhdGlvbi1vcGFjaXR5KSB7XG4gIEBpZiB0eXBlLW9mKCR6VmFsdWUpICE9IG51bWJlciBvciBub3QgdW5pdGxlc3MoJHpWYWx1ZSkge1xuICAgIEBlcnJvciAnJHpWYWx1ZSBtdXN0IGJlIGEgdW5pdGxlc3MgbnVtYmVyJztcbiAgfVxuICBAaWYgJHpWYWx1ZSA8IDAgb3IgJHpWYWx1ZSA+IDI0IHtcbiAgICBAZXJyb3IgJyR6VmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDI0JztcbiAgfVxuXG4gIGJveC1zaGFkb3c6ICN7bWFwLWdldChfZ2V0LXVtYnJhLW1hcCgkY29sb3IsICRvcGFjaXR5KSwgJHpWYWx1ZSl9LFxuICAgICAgICAgICAgICAje21hcC1nZXQoX2dldC1wZW51bWJyYS1tYXAoJGNvbG9yLCAkb3BhY2l0eSksICR6VmFsdWUpfSxcbiAgICAgICAgICAgICAgI3ttYXAtZ2V0KF9nZXQtYW1iaWVudC1tYXAoJGNvbG9yLCAkb3BhY2l0eSksICR6VmFsdWUpfTtcbn1cblxuQG1peGluIF9tYXQtdGhlbWUtZWxldmF0aW9uKCR6VmFsdWUsICR0aGVtZSwgJG9wYWNpdHk6ICRtYXQtZWxldmF0aW9uLW9wYWNpdHkpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGVsZXZhdGlvbi1jb2xvcjogbWFwLWdldCgkZm9yZWdyb3VuZCwgZWxldmF0aW9uKTtcbiAgJGVsZXZhdGlvbi1jb2xvci1vci1kZWZhdWx0OiBpZigkZWxldmF0aW9uLWNvbG9yID09IG51bGwsICRtYXQtZWxldmF0aW9uLWNvbG9yLCAkZWxldmF0aW9uLWNvbG9yKTtcblxuICBAaW5jbHVkZSBtYXQtZWxldmF0aW9uKCR6VmFsdWUsICRlbGV2YXRpb24tY29sb3Itb3ItZGVmYXVsdCwgJG9wYWNpdHkpO1xufVxuXG4vLyBBcHBsaWVzIHRoZSBlbGV2YXRpb24gdG8gYW4gZWxlbWVudCBpbiBhIG1hbm5lciB0aGF0IGFsbG93c1xuLy8gY29uc3VtZXJzIHRvIG92ZXJyaWRlIGl0IHZpYSB0aGUgTWF0ZXJpYWwgZWxldmF0aW9uIGNsYXNzZXMuXG5AbWl4aW4gbWF0LW92ZXJyaWRhYmxlLWVsZXZhdGlvbihcbiAgICAkelZhbHVlLFxuICAgICRjb2xvcjogJG1hdC1lbGV2YXRpb24tY29sb3IsXG4gICAgJG9wYWNpdHk6ICRtYXQtZWxldmF0aW9uLW9wYWNpdHkpIHtcbiAgJjpub3QoW2NsYXNzKj0nI3skX21hdC1lbGV2YXRpb24tcHJlZml4fSddKSB7XG4gICAgQGluY2x1ZGUgbWF0LWVsZXZhdGlvbigkelZhbHVlLCAkY29sb3IsICRvcGFjaXR5KTtcbiAgfVxufVxuXG5AbWl4aW4gX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oJHpWYWx1ZSwgJHRoZW1lLCAkb3BhY2l0eTogJG1hdC1lbGV2YXRpb24tb3BhY2l0eSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkZWxldmF0aW9uLWNvbG9yOiBtYXAtZ2V0KCRmb3JlZ3JvdW5kLCBlbGV2YXRpb24pO1xuICAkZWxldmF0aW9uLWNvbG9yLW9yLWRlZmF1bHQ6IGlmKCRlbGV2YXRpb24tY29sb3IgPT0gbnVsbCwgJG1hdC1lbGV2YXRpb24tY29sb3IsICRlbGV2YXRpb24tY29sb3IpO1xuXG4gIEBpbmNsdWRlIG1hdC1vdmVycmlkYWJsZS1lbGV2YXRpb24oJHpWYWx1ZSwgJGVsZXZhdGlvbi1jb2xvci1vci1kZWZhdWx0LCAkb3BhY2l0eSk7XG59XG5cbi8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBjYW4gYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yIGEgdHJhbnNpdGlvbiBwcm9wZXJ0eSBmb3IgZWxldmF0aW9uLlxuLy8gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5IGlzIHVzZWZ1bCBpbiBzaXR1YXRpb25zIHdoZXJlIGEgY29tcG9uZW50IG5lZWRzIHRvIHRyYW5zaXRpb25cbi8vIG1vcmUgdGhhbiBvbmUgcHJvcGVydHkuXG4vL1xuLy8gLmZvbyB7XG4vLyAgIHRyYW5zaXRpb246IG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi1wcm9wZXJ0eS12YWx1ZSgpLCBvcGFjaXR5IDEwMG1zIGVhc2U7XG4vLyB9XG5AZnVuY3Rpb24gbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLXByb3BlcnR5LXZhbHVlKFxuICAgICRkdXJhdGlvbjogJG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi1kdXJhdGlvbixcbiAgICAkZWFzaW5nOiAkbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikge1xuICBAcmV0dXJuIGJveC1zaGFkb3cgI3skZHVyYXRpb259ICN7JGVhc2luZ307XG59XG5cbi8vIEFwcGxpZXMgdGhlIGNvcnJlY3QgY3NzIHJ1bGVzIG5lZWRlZCB0byBoYXZlIGFuIGVsZW1lbnQgdHJhbnNpdGlvbiBiZXR3ZWVuIGVsZXZhdGlvbnMuXG4vLyBUaGlzIG1peGluIHNob3VsZCBiZSBhcHBsaWVkIHRvIGVsZW1lbnRzIHdob3NlIGVsZXZhdGlvbiB2YWx1ZXMgd2lsbCBjaGFuZ2UgZGVwZW5kaW5nIG9uIHRoZWlyXG4vLyBjb250ZXh0IChlLmcuIHdoZW4gYWN0aXZlIG9yIGRpc2FibGVkKS5cbi8vXG4vLyBOT1RFKHRyYXZpc2thdWZtYW4pOiBCb3RoIHRoaXMgbWl4aW4gYW5kIHRoZSBhYm92ZSBmdW5jdGlvbiB1c2UgZGVmYXVsdCBwYXJhbWV0ZXJzIHNvIHRoZXkgY2FuXG4vLyBiZSB1c2VkIGluIHRoZSBzYW1lIHdheSBieSBjbGllbnRzLlxuQG1peGluIG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbihcbiAgICAkZHVyYXRpb246ICRtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tZHVyYXRpb24sXG4gICAgJGVhc2luZzogJG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pIHtcbiAgdHJhbnNpdGlvbjogbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLXByb3BlcnR5LXZhbHVlKCRkdXJhdGlvbiwgJGVhc2luZyk7XG59XG5cbi8vIENvbG9yIHBhbGV0dGVzIGZyb20gdGhlIE1hdGVyaWFsIERlc2lnbiBzcGVjLlxuLy8gU2VlIGh0dHBzOi8vbWF0ZXJpYWwuaW8vZGVzaWduL2NvbG9yL1xuLy9cbi8vIENvbnRyYXN0IGNvbG9ycyBhcmUgaGFyZC1jb2RlZCBiZWNhdXNlIGl0IGlzIHRvbyBkaWZmaWN1bHQgKHByb2JhYmx5IGltcG9zc2libGUpIHRvXG4vLyBjYWxjdWxhdGUgdGhlbS4gVGhlc2UgY29udHJhc3QgY29sb3JzIGFyZSBwdWxsZWQgZnJvbSB0aGUgcHVibGljIE1hdGVyaWFsIERlc2lnbiBzcGVjIHN3YXRjaGVzLlxuLy8gV2hpbGUgdGhlIGNvbnRyYXN0IGNvbG9ycyBpbiB0aGUgc3BlYyBhcmUgbm90IHByZXNjcmlwdGl2ZSwgd2UgdXNlIHRoZW0gZm9yIGNvbnZlbmllbmNlLlxuXG5cbi8vIEBkZXByZWNhdGVkIHJlbmFtZWQgdG8gJGRhcmstcHJpbWFyeS10ZXh0LlxuLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMFxuJGJsYWNrLTg3LW9wYWNpdHk6IHJnYmEoYmxhY2ssIDAuODcpO1xuLy8gQGRlcHJlY2F0ZWQgcmVuYW1lZCB0byAkbGlnaHQtcHJpbWFyeS10ZXh0LlxuLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMFxuJHdoaXRlLTg3LW9wYWNpdHk6IHJnYmEod2hpdGUsIDAuODcpO1xuLy8gQGRlcHJlY2F0ZWQgdXNlICRkYXJrLVtzZWNvbmRhcnktdGV4dCxkaXNhYmxlZC10ZXh0LGRpdmlkZXJzLGZvY3VzZWRdIGluc3RlYWQuXG4vLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wXG4kYmxhY2stMTItb3BhY2l0eTogcmdiYShibGFjaywgMC4xMik7XG4vLyBAZGVwcmVjYXRlZCB1c2UgJGxpZ2h0LVtzZWNvbmRhcnktdGV4dCxkaXNhYmxlZC10ZXh0LGRpdmlkZXJzLGZvY3VzZWRdIGluc3RlYWQuXG4vLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wXG4kd2hpdGUtMTItb3BhY2l0eTogcmdiYSh3aGl0ZSwgMC4xMik7XG4vLyBAZGVwcmVjYXRlZCB1c2UgJGRhcmstW3NlY29uZGFyeS10ZXh0LGRpc2FibGVkLXRleHQsZGl2aWRlcnMsZm9jdXNlZF0gaW5zdGVhZC5cbi8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjBcbiRibGFjay02LW9wYWNpdHk6IHJnYmEoYmxhY2ssIDAuMDYpO1xuLy8gQGRlcHJlY2F0ZWQgdXNlICRsaWdodC1bc2Vjb25kYXJ5LXRleHQsZGlzYWJsZWQtdGV4dCxkaXZpZGVycyxmb2N1c2VkXSBpbnN0ZWFkLlxuLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMFxuJHdoaXRlLTYtb3BhY2l0eTogcmdiYSh3aGl0ZSwgMC4wNik7XG5cbiRkYXJrLXByaW1hcnktdGV4dDogcmdiYShibGFjaywgMC44Nyk7XG4kZGFyay1zZWNvbmRhcnktdGV4dDogcmdiYShibGFjaywgMC41NCk7XG4kZGFyay1kaXNhYmxlZC10ZXh0OiByZ2JhKGJsYWNrLCAwLjM4KTtcbiRkYXJrLWRpdmlkZXJzOiByZ2JhKGJsYWNrLCAwLjEyKTtcbiRkYXJrLWZvY3VzZWQ6IHJnYmEoYmxhY2ssIDAuMTIpO1xuJGxpZ2h0LXByaW1hcnktdGV4dDogd2hpdGU7XG4kbGlnaHQtc2Vjb25kYXJ5LXRleHQ6IHJnYmEod2hpdGUsIDAuNyk7XG4kbGlnaHQtZGlzYWJsZWQtdGV4dDogcmdiYSh3aGl0ZSwgMC41KTtcbiRsaWdodC1kaXZpZGVyczogcmdiYSh3aGl0ZSwgMC4xMik7XG4kbGlnaHQtZm9jdXNlZDogcmdiYSh3aGl0ZSwgMC4xMik7XG5cbiRtYXQtcmVkOiAoXG4gIDUwOiAjZmZlYmVlLFxuICAxMDA6ICNmZmNkZDIsXG4gIDIwMDogI2VmOWE5YSxcbiAgMzAwOiAjZTU3MzczLFxuICA0MDA6ICNlZjUzNTAsXG4gIDUwMDogI2Y0NDMzNixcbiAgNjAwOiAjZTUzOTM1LFxuICA3MDA6ICNkMzJmMmYsXG4gIDgwMDogI2M2MjgyOCxcbiAgOTAwOiAjYjcxYzFjLFxuICBBMTAwOiAjZmY4YTgwLFxuICBBMjAwOiAjZmY1MjUyLFxuICBBNDAwOiAjZmYxNzQ0LFxuICBBNzAwOiAjZDUwMDAwLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtcGluazogKFxuICA1MDogI2ZjZTRlYyxcbiAgMTAwOiAjZjhiYmQwLFxuICAyMDA6ICNmNDhmYjEsXG4gIDMwMDogI2YwNjI5MixcbiAgNDAwOiAjZWM0MDdhLFxuICA1MDA6ICNlOTFlNjMsXG4gIDYwMDogI2Q4MWI2MCxcbiAgNzAwOiAjYzIxODViLFxuICA4MDA6ICNhZDE0NTcsXG4gIDkwMDogIzg4MGU0ZixcbiAgQTEwMDogI2ZmODBhYixcbiAgQTIwMDogI2ZmNDA4MSxcbiAgQTQwMDogI2Y1MDA1NyxcbiAgQTcwMDogI2M1MTE2MixcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LXB1cnBsZTogKFxuICA1MDogI2YzZTVmNSxcbiAgMTAwOiAjZTFiZWU3LFxuICAyMDA6ICNjZTkzZDgsXG4gIDMwMDogI2JhNjhjOCxcbiAgNDAwOiAjYWI0N2JjLFxuICA1MDA6ICM5YzI3YjAsXG4gIDYwMDogIzhlMjRhYSxcbiAgNzAwOiAjN2IxZmEyLFxuICA4MDA6ICM2YTFiOWEsXG4gIDkwMDogIzRhMTQ4YyxcbiAgQTEwMDogI2VhODBmYyxcbiAgQTIwMDogI2UwNDBmYixcbiAgQTQwMDogI2Q1MDBmOSxcbiAgQTcwMDogI2FhMDBmZixcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtZGVlcC1wdXJwbGU6IChcbiAgNTA6ICNlZGU3ZjYsXG4gIDEwMDogI2QxYzRlOSxcbiAgMjAwOiAjYjM5ZGRiLFxuICAzMDA6ICM5NTc1Y2QsXG4gIDQwMDogIzdlNTdjMixcbiAgNTAwOiAjNjczYWI3LFxuICA2MDA6ICM1ZTM1YjEsXG4gIDcwMDogIzUxMmRhOCxcbiAgODAwOiAjNDUyN2EwLFxuICA5MDA6ICMzMTFiOTIsXG4gIEExMDA6ICNiMzg4ZmYsXG4gIEEyMDA6ICM3YzRkZmYsXG4gIEE0MDA6ICM2NTFmZmYsXG4gIEE3MDA6ICM2MjAwZWEsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWluZGlnbzogKFxuICA1MDogI2U4ZWFmNixcbiAgMTAwOiAjYzVjYWU5LFxuICAyMDA6ICM5ZmE4ZGEsXG4gIDMwMDogIzc5ODZjYixcbiAgNDAwOiAjNWM2YmMwLFxuICA1MDA6ICMzZjUxYjUsXG4gIDYwMDogIzM5NDlhYixcbiAgNzAwOiAjMzAzZjlmLFxuICA4MDA6ICMyODM1OTMsXG4gIDkwMDogIzFhMjM3ZSxcbiAgQTEwMDogIzhjOWVmZixcbiAgQTIwMDogIzUzNmRmZSxcbiAgQTQwMDogIzNkNWFmZSxcbiAgQTcwMDogIzMwNGZmZSxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtYmx1ZTogKFxuICA1MDogI2UzZjJmZCxcbiAgMTAwOiAjYmJkZWZiLFxuICAyMDA6ICM5MGNhZjksXG4gIDMwMDogIzY0YjVmNixcbiAgNDAwOiAjNDJhNWY1LFxuICA1MDA6ICMyMTk2ZjMsXG4gIDYwMDogIzFlODhlNSxcbiAgNzAwOiAjMTk3NmQyLFxuICA4MDA6ICMxNTY1YzAsXG4gIDkwMDogIzBkNDdhMSxcbiAgQTEwMDogIzgyYjFmZixcbiAgQTIwMDogIzQ0OGFmZixcbiAgQTQwMDogIzI5NzlmZixcbiAgQTcwMDogIzI5NjJmZixcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWxpZ2h0LWJsdWU6IChcbiAgNTA6ICNlMWY1ZmUsXG4gIDEwMDogI2IzZTVmYyxcbiAgMjAwOiAjODFkNGZhLFxuICAzMDA6ICM0ZmMzZjcsXG4gIDQwMDogIzI5YjZmNixcbiAgNTAwOiAjMDNhOWY0LFxuICA2MDA6ICMwMzliZTUsXG4gIDcwMDogIzAyODhkMSxcbiAgODAwOiAjMDI3N2JkLFxuICA5MDA6ICMwMTU3OWIsXG4gIEExMDA6ICM4MGQ4ZmYsXG4gIEEyMDA6ICM0MGM0ZmYsXG4gIEE0MDA6ICMwMGIwZmYsXG4gIEE3MDA6ICMwMDkxZWEsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtY3lhbjogKFxuICA1MDogI2UwZjdmYSxcbiAgMTAwOiAjYjJlYmYyLFxuICAyMDA6ICM4MGRlZWEsXG4gIDMwMDogIzRkZDBlMSxcbiAgNDAwOiAjMjZjNmRhLFxuICA1MDA6ICMwMGJjZDQsXG4gIDYwMDogIzAwYWNjMSxcbiAgNzAwOiAjMDA5N2E3LFxuICA4MDA6ICMwMDgzOGYsXG4gIDkwMDogIzAwNjA2NCxcbiAgQTEwMDogIzg0ZmZmZixcbiAgQTIwMDogIzE4ZmZmZixcbiAgQTQwMDogIzAwZTVmZixcbiAgQTcwMDogIzAwYjhkNCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LXRlYWw6IChcbiAgNTA6ICNlMGYyZjEsXG4gIDEwMDogI2IyZGZkYixcbiAgMjAwOiAjODBjYmM0LFxuICAzMDA6ICM0ZGI2YWMsXG4gIDQwMDogIzI2YTY5YSxcbiAgNTAwOiAjMDA5Njg4LFxuICA2MDA6ICMwMDg5N2IsXG4gIDcwMDogIzAwNzk2YixcbiAgODAwOiAjMDA2OTVjLFxuICA5MDA6ICMwMDRkNDAsXG4gIEExMDA6ICNhN2ZmZWIsXG4gIEEyMDA6ICM2NGZmZGEsXG4gIEE0MDA6ICMxZGU5YjYsXG4gIEE3MDA6ICMwMGJmYTUsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1ncmVlbjogKFxuICA1MDogI2U4ZjVlOSxcbiAgMTAwOiAjYzhlNmM5LFxuICAyMDA6ICNhNWQ2YTcsXG4gIDMwMDogIzgxYzc4NCxcbiAgNDAwOiAjNjZiYjZhLFxuICA1MDA6ICM0Y2FmNTAsXG4gIDYwMDogIzQzYTA0NyxcbiAgNzAwOiAjMzg4ZTNjLFxuICA4MDA6ICMyZTdkMzIsXG4gIDkwMDogIzFiNWUyMCxcbiAgQTEwMDogI2I5ZjZjYSxcbiAgQTIwMDogIzY5ZjBhZSxcbiAgQTQwMDogIzAwZTY3NixcbiAgQTcwMDogIzAwYzg1MyxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtbGlnaHQtZ3JlZW46IChcbiAgNTA6ICNmMWY4ZTksXG4gIDEwMDogI2RjZWRjOCxcbiAgMjAwOiAjYzVlMWE1LFxuICAzMDA6ICNhZWQ1ODEsXG4gIDQwMDogIzljY2M2NSxcbiAgNTAwOiAjOGJjMzRhLFxuICA2MDA6ICM3Y2IzNDIsXG4gIDcwMDogIzY4OWYzOCxcbiAgODAwOiAjNTU4YjJmLFxuICA5MDA6ICMzMzY5MWUsXG4gIEExMDA6ICNjY2ZmOTAsXG4gIEEyMDA6ICNiMmZmNTksXG4gIEE0MDA6ICM3NmZmMDMsXG4gIEE3MDA6ICM2NGRkMTcsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtbGltZTogKFxuICA1MDogI2Y5ZmJlNyxcbiAgMTAwOiAjZjBmNGMzLFxuICAyMDA6ICNlNmVlOWMsXG4gIDMwMDogI2RjZTc3NSxcbiAgNDAwOiAjZDRlMTU3LFxuICA1MDA6ICNjZGRjMzksXG4gIDYwMDogI2MwY2EzMyxcbiAgNzAwOiAjYWZiNDJiLFxuICA4MDA6ICM5ZTlkMjQsXG4gIDkwMDogIzgyNzcxNyxcbiAgQTEwMDogI2Y0ZmY4MSxcbiAgQTIwMDogI2VlZmY0MSxcbiAgQTQwMDogI2M2ZmYwMCxcbiAgQTcwMDogI2FlZWEwMCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQteWVsbG93OiAoXG4gIDUwOiAjZmZmZGU3LFxuICAxMDA6ICNmZmY5YzQsXG4gIDIwMDogI2ZmZjU5ZCxcbiAgMzAwOiAjZmZmMTc2LFxuICA0MDA6ICNmZmVlNTgsXG4gIDUwMDogI2ZmZWIzYixcbiAgNjAwOiAjZmRkODM1LFxuICA3MDA6ICNmYmMwMmQsXG4gIDgwMDogI2Y5YTgyNSxcbiAgOTAwOiAjZjU3ZjE3LFxuICBBMTAwOiAjZmZmZjhkLFxuICBBMjAwOiAjZmZmZjAwLFxuICBBNDAwOiAjZmZlYTAwLFxuICBBNzAwOiAjZmZkNjAwLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWFtYmVyOiAoXG4gIDUwOiAjZmZmOGUxLFxuICAxMDA6ICNmZmVjYjMsXG4gIDIwMDogI2ZmZTA4MixcbiAgMzAwOiAjZmZkNTRmLFxuICA0MDA6ICNmZmNhMjgsXG4gIDUwMDogI2ZmYzEwNyxcbiAgNjAwOiAjZmZiMzAwLFxuICA3MDA6ICNmZmEwMDAsXG4gIDgwMDogI2ZmOGYwMCxcbiAgOTAwOiAjZmY2ZjAwLFxuICBBMTAwOiAjZmZlNTdmLFxuICBBMjAwOiAjZmZkNzQwLFxuICBBNDAwOiAjZmZjNDAwLFxuICBBNzAwOiAjZmZhYjAwLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LW9yYW5nZTogKFxuICA1MDogI2ZmZjNlMCxcbiAgMTAwOiAjZmZlMGIyLFxuICAyMDA6ICNmZmNjODAsXG4gIDMwMDogI2ZmYjc0ZCxcbiAgNDAwOiAjZmZhNzI2LFxuICA1MDA6ICNmZjk4MDAsXG4gIDYwMDogI2ZiOGMwMCxcbiAgNzAwOiAjZjU3YzAwLFxuICA4MDA6ICNlZjZjMDAsXG4gIDkwMDogI2U2NTEwMCxcbiAgQTEwMDogI2ZmZDE4MCxcbiAgQTIwMDogI2ZmYWI0MCxcbiAgQTQwMDogI2ZmOTEwMCxcbiAgQTcwMDogI2ZmNmQwMCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogYmxhY2ssXG4gIClcbik7XG5cbiRtYXQtZGVlcC1vcmFuZ2U6IChcbiAgNTA6ICNmYmU5ZTcsXG4gIDEwMDogI2ZmY2NiYyxcbiAgMjAwOiAjZmZhYjkxLFxuICAzMDA6ICNmZjhhNjUsXG4gIDQwMDogI2ZmNzA0MyxcbiAgNTAwOiAjZmY1NzIyLFxuICA2MDA6ICNmNDUxMWUsXG4gIDcwMDogI2U2NGExOSxcbiAgODAwOiAjZDg0MzE1LFxuICA5MDA6ICNiZjM2MGMsXG4gIEExMDA6ICNmZjllODAsXG4gIEEyMDA6ICNmZjZlNDAsXG4gIEE0MDA6ICNmZjNkMDAsXG4gIEE3MDA6ICNkZDJjMDAsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWJyb3duOiAoXG4gIDUwOiAjZWZlYmU5LFxuICAxMDA6ICNkN2NjYzgsXG4gIDIwMDogI2JjYWFhNCxcbiAgMzAwOiAjYTE4ODdmLFxuICA0MDA6ICM4ZDZlNjMsXG4gIDUwMDogIzc5NTU0OCxcbiAgNjAwOiAjNmQ0YzQxLFxuICA3MDA6ICM1ZDQwMzcsXG4gIDgwMDogIzRlMzQyZSxcbiAgOTAwOiAjM2UyNzIzLFxuICBBMTAwOiAjZDdjY2M4LFxuICBBMjAwOiAjYmNhYWE0LFxuICBBNDAwOiAjOGQ2ZTYzLFxuICBBNzAwOiAjNWQ0MDM3LFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWdyZXk6IChcbiAgNTA6ICNmYWZhZmEsXG4gIDEwMDogI2Y1ZjVmNSxcbiAgMjAwOiAjZWVlZWVlLFxuICAzMDA6ICNlMGUwZTAsXG4gIDQwMDogI2JkYmRiZCxcbiAgNTAwOiAjOWU5ZTllLFxuICA2MDA6ICM3NTc1NzUsXG4gIDcwMDogIzYxNjE2MSxcbiAgODAwOiAjNDI0MjQyLFxuICA5MDA6ICMyMTIxMjEsXG4gIEExMDA6ICNmZmZmZmYsXG4gIEEyMDA6ICNlZWVlZWUsXG4gIEE0MDA6ICNiZGJkYmQsXG4gIEE3MDA6ICM2MTYxNjEsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuLy8gQWxpYXMgZm9yIGFsdGVybmF0ZSBzcGVsbGluZy5cbiRtYXQtZ3JheTogJG1hdC1ncmV5O1xuXG4kbWF0LWJsdWUtZ3JleTogKFxuICA1MDogI2VjZWZmMSxcbiAgMTAwOiAjY2ZkOGRjLFxuICAyMDA6ICNiMGJlYzUsXG4gIDMwMDogIzkwYTRhZSxcbiAgNDAwOiAjNzg5MDljLFxuICA1MDA6ICM2MDdkOGIsXG4gIDYwMDogIzU0NmU3YSxcbiAgNzAwOiAjNDU1YTY0LFxuICA4MDA6ICMzNzQ3NGYsXG4gIDkwMDogIzI2MzIzOCxcbiAgQTEwMDogI2NmZDhkYyxcbiAgQTIwMDogI2IwYmVjNSxcbiAgQTQwMDogIzc4OTA5YyxcbiAgQTcwMDogIzQ1NWE2NCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4vLyBBbGlhcyBmb3IgYWx0ZXJuYXRlIHNwZWxsaW5nLlxuJG1hdC1ibHVlLWdyYXk6ICRtYXQtYmx1ZS1ncmV5O1xuXG5cbi8vIEJhY2tncm91bmQgcGFsZXR0ZSBmb3IgbGlnaHQgdGhlbWVzLlxuJG1hdC1saWdodC10aGVtZS1iYWNrZ3JvdW5kOiAoXG4gIHN0YXR1cy1iYXI6IG1hcF9nZXQoJG1hdC1ncmV5LCAzMDApLFxuICBhcHAtYmFyOiAgICBtYXBfZ2V0KCRtYXQtZ3JleSwgMTAwKSxcbiAgYmFja2dyb3VuZDogbWFwX2dldCgkbWF0LWdyZXksIDUwKSxcbiAgaG92ZXI6ICAgICAgcmdiYShibGFjaywgMC4wNCksIC8vIFRPRE8oa2FyYSk6IGNoZWNrIHN0eWxlIHdpdGggTWF0ZXJpYWwgRGVzaWduIFVYXG4gIGNhcmQ6ICAgICAgIHdoaXRlLFxuICBkaWFsb2c6ICAgICB3aGl0ZSxcbiAgZGlzYWJsZWQtYnV0dG9uOiByZ2JhKGJsYWNrLCAwLjEyKSxcbiAgcmFpc2VkLWJ1dHRvbjogd2hpdGUsXG4gIGZvY3VzZWQtYnV0dG9uOiAkZGFyay1mb2N1c2VkLFxuICBzZWxlY3RlZC1idXR0b246IG1hcF9nZXQoJG1hdC1ncmV5LCAzMDApLFxuICBzZWxlY3RlZC1kaXNhYmxlZC1idXR0b246IG1hcF9nZXQoJG1hdC1ncmV5LCA0MDApLFxuICBkaXNhYmxlZC1idXR0b24tdG9nZ2xlOiBtYXBfZ2V0KCRtYXQtZ3JleSwgMjAwKSxcbiAgdW5zZWxlY3RlZC1jaGlwOiBtYXBfZ2V0KCRtYXQtZ3JleSwgMzAwKSxcbiAgZGlzYWJsZWQtbGlzdC1vcHRpb246IG1hcF9nZXQoJG1hdC1ncmV5LCAyMDApLFxuICB0b29sdGlwOiBtYXBfZ2V0KCRtYXQtZ3JleSwgNzAwKSxcbik7XG5cbi8vIEJhY2tncm91bmQgcGFsZXR0ZSBmb3IgZGFyayB0aGVtZXMuXG4kbWF0LWRhcmstdGhlbWUtYmFja2dyb3VuZDogKFxuICBzdGF0dXMtYmFyOiBibGFjayxcbiAgYXBwLWJhcjogICAgbWFwX2dldCgkbWF0LWdyZXksIDkwMCksXG4gIGJhY2tncm91bmQ6ICMzMDMwMzAsXG4gIGhvdmVyOiAgICAgIHJnYmEod2hpdGUsIDAuMDQpLCAvLyBUT0RPKGthcmEpOiBjaGVjayBzdHlsZSB3aXRoIE1hdGVyaWFsIERlc2lnbiBVWFxuICBjYXJkOiAgICAgICBtYXBfZ2V0KCRtYXQtZ3JleSwgODAwKSxcbiAgZGlhbG9nOiAgICAgbWFwX2dldCgkbWF0LWdyZXksIDgwMCksXG4gIGRpc2FibGVkLWJ1dHRvbjogcmdiYSh3aGl0ZSwgMC4xMiksXG4gIHJhaXNlZC1idXR0b246IG1hcC1nZXQoJG1hdC1ncmV5LCA4MDApLFxuICBmb2N1c2VkLWJ1dHRvbjogJGxpZ2h0LWZvY3VzZWQsXG4gIHNlbGVjdGVkLWJ1dHRvbjogbWFwX2dldCgkbWF0LWdyZXksIDkwMCksXG4gIHNlbGVjdGVkLWRpc2FibGVkLWJ1dHRvbjogbWFwX2dldCgkbWF0LWdyZXksIDgwMCksXG4gIGRpc2FibGVkLWJ1dHRvbi10b2dnbGU6IGJsYWNrLFxuICB1bnNlbGVjdGVkLWNoaXA6IG1hcF9nZXQoJG1hdC1ncmV5LCA3MDApLFxuICBkaXNhYmxlZC1saXN0LW9wdGlvbjogYmxhY2ssXG4gIHRvb2x0aXA6IG1hcF9nZXQoJG1hdC1ncmV5LCA3MDApLFxuKTtcblxuLy8gRm9yZWdyb3VuZCBwYWxldHRlIGZvciBsaWdodCB0aGVtZXMuXG4kbWF0LWxpZ2h0LXRoZW1lLWZvcmVncm91bmQ6IChcbiAgYmFzZTogICAgICAgICAgICAgIGJsYWNrLFxuICBkaXZpZGVyOiAgICAgICAgICAgJGRhcmstZGl2aWRlcnMsXG4gIGRpdmlkZXJzOiAgICAgICAgICAkZGFyay1kaXZpZGVycyxcbiAgZGlzYWJsZWQ6ICAgICAgICAgICRkYXJrLWRpc2FibGVkLXRleHQsXG4gIGRpc2FibGVkLWJ1dHRvbjogICByZ2JhKGJsYWNrLCAwLjI2KSxcbiAgZGlzYWJsZWQtdGV4dDogICAgICRkYXJrLWRpc2FibGVkLXRleHQsXG4gIGVsZXZhdGlvbjogICAgICAgICBibGFjayxcbiAgaGludC10ZXh0OiAgICAgICAgICRkYXJrLWRpc2FibGVkLXRleHQsXG4gIHNlY29uZGFyeS10ZXh0OiAgICAkZGFyay1zZWNvbmRhcnktdGV4dCxcbiAgaWNvbjogICAgICAgICAgICAgIHJnYmEoYmxhY2ssIDAuNTQpLFxuICBpY29uczogICAgICAgICAgICAgcmdiYShibGFjaywgMC41NCksXG4gIHRleHQ6ICAgICAgICAgICAgICByZ2JhKGJsYWNrLCAwLjg3KSxcbiAgc2xpZGVyLW1pbjogICAgICAgIHJnYmEoYmxhY2ssIDAuODcpLFxuICBzbGlkZXItb2ZmOiAgICAgICAgcmdiYShibGFjaywgMC4yNiksXG4gIHNsaWRlci1vZmYtYWN0aXZlOiByZ2JhKGJsYWNrLCAwLjM4KSxcbik7XG5cbi8vIEZvcmVncm91bmQgcGFsZXR0ZSBmb3IgZGFyayB0aGVtZXMuXG4kbWF0LWRhcmstdGhlbWUtZm9yZWdyb3VuZDogKFxuICBiYXNlOiAgICAgICAgICAgICAgd2hpdGUsXG4gIGRpdmlkZXI6ICAgICAgICAgICAkbGlnaHQtZGl2aWRlcnMsXG4gIGRpdmlkZXJzOiAgICAgICAgICAkbGlnaHQtZGl2aWRlcnMsXG4gIGRpc2FibGVkOiAgICAgICAgICAkbGlnaHQtZGlzYWJsZWQtdGV4dCxcbiAgZGlzYWJsZWQtYnV0dG9uOiAgIHJnYmEod2hpdGUsIDAuMyksXG4gIGRpc2FibGVkLXRleHQ6ICAgICAkbGlnaHQtZGlzYWJsZWQtdGV4dCxcbiAgZWxldmF0aW9uOiAgICAgICAgIGJsYWNrLFxuICBoaW50LXRleHQ6ICAgICAgICAgJGxpZ2h0LWRpc2FibGVkLXRleHQsXG4gIHNlY29uZGFyeS10ZXh0OiAgICAkbGlnaHQtc2Vjb25kYXJ5LXRleHQsXG4gIGljb246ICAgICAgICAgICAgICB3aGl0ZSxcbiAgaWNvbnM6ICAgICAgICAgICAgIHdoaXRlLFxuICB0ZXh0OiAgICAgICAgICAgICAgd2hpdGUsXG4gIHNsaWRlci1taW46ICAgICAgICB3aGl0ZSxcbiAgc2xpZGVyLW9mZjogICAgICAgIHJnYmEod2hpdGUsIDAuMyksXG4gIHNsaWRlci1vZmYtYWN0aXZlOiByZ2JhKHdoaXRlLCAwLjMpLFxuKTtcblxuXG5cbi8vIEZvciBhIGdpdmVuIGh1ZSBpbiBhIHBhbGV0dGUsIHJldHVybiB0aGUgY29udHJhc3QgY29sb3IgZnJvbSB0aGUgbWFwIG9mIGNvbnRyYXN0IHBhbGV0dGVzLlxuLy8gQHBhcmFtICRjb2xvci1tYXBcbi8vIEBwYXJhbSAkaHVlXG5AZnVuY3Rpb24gbWF0LWNvbnRyYXN0KCRwYWxldHRlLCAkaHVlKSB7XG4gIEByZXR1cm4gbWFwLWdldChtYXAtZ2V0KCRwYWxldHRlLCBjb250cmFzdCksICRodWUpO1xufVxuXG5cbi8vIENyZWF0ZXMgYSBtYXAgb2YgaHVlcyB0byBjb2xvcnMgZm9yIGEgdGhlbWUuIFRoaXMgaXMgdXNlZCB0byBkZWZpbmUgYSB0aGVtZSBwYWxldHRlIGluIHRlcm1zXG4vLyBvZiB0aGUgTWF0ZXJpYWwgRGVzaWduIGh1ZXMuXG4vLyBAcGFyYW0gJGNvbG9yLW1hcFxuLy8gQHBhcmFtICRwcmltYXJ5XG4vLyBAcGFyYW0gJGxpZ2h0ZXJcbkBmdW5jdGlvbiBtYXQtcGFsZXR0ZSgkYmFzZS1wYWxldHRlLCAkZGVmYXVsdDogNTAwLCAkbGlnaHRlcjogMTAwLCAkZGFya2VyOiA3MDAsICR0ZXh0OiAkZGVmYXVsdCkge1xuICAkcmVzdWx0OiBtYXBfbWVyZ2UoJGJhc2UtcGFsZXR0ZSwgKFxuICAgIGRlZmF1bHQ6IG1hcC1nZXQoJGJhc2UtcGFsZXR0ZSwgJGRlZmF1bHQpLFxuICAgIGxpZ2h0ZXI6IG1hcC1nZXQoJGJhc2UtcGFsZXR0ZSwgJGxpZ2h0ZXIpLFxuICAgIGRhcmtlcjogbWFwLWdldCgkYmFzZS1wYWxldHRlLCAkZGFya2VyKSxcbiAgICB0ZXh0OiBtYXAtZ2V0KCRiYXNlLXBhbGV0dGUsICR0ZXh0KSxcblxuICAgIGRlZmF1bHQtY29udHJhc3Q6IG1hdC1jb250cmFzdCgkYmFzZS1wYWxldHRlLCAkZGVmYXVsdCksXG4gICAgbGlnaHRlci1jb250cmFzdDogbWF0LWNvbnRyYXN0KCRiYXNlLXBhbGV0dGUsICRsaWdodGVyKSxcbiAgICBkYXJrZXItY29udHJhc3Q6IG1hdC1jb250cmFzdCgkYmFzZS1wYWxldHRlLCAkZGFya2VyKVxuICApKTtcblxuICAvLyBGb3IgZWFjaCBodWUgaW4gdGhlIHBhbGV0dGUsIGFkZCBhIFwiLWNvbnRyYXN0XCIgY29sb3IgdG8gdGhlIG1hcC5cbiAgQGVhY2ggJGh1ZSwgJGNvbG9yIGluICRiYXNlLXBhbGV0dGUge1xuICAgICRyZXN1bHQ6IG1hcF9tZXJnZSgkcmVzdWx0LCAoXG4gICAgICAnI3skaHVlfS1jb250cmFzdCc6IG1hdC1jb250cmFzdCgkYmFzZS1wYWxldHRlLCAkaHVlKVxuICAgICkpO1xuICB9XG5cbiAgQHJldHVybiAkcmVzdWx0O1xufVxuXG5cbi8vIEdldHMgYSBjb2xvciBmcm9tIGEgdGhlbWUgcGFsZXR0ZSAodGhlIG91dHB1dCBvZiBtYXQtcGFsZXR0ZSkuXG4vLyBUaGUgaHVlIGNhbiBiZSBvbmUgb2YgdGhlIHN0YW5kYXJkIHZhbHVlcyAoNTAwLCBBNDAwLCBldGMuKSwgb25lIG9mIHRoZSB0aHJlZSBwcmVjb25maWd1cmVkXG4vLyBodWVzIChkZWZhdWx0LCBsaWdodGVyLCBkYXJrZXIpLCBvciBhbnkgb2YgdGhlIGFmb3JlbWVudGlvbmVkIHByZWZpeGVkIHdpdGggXCItY29udHJhc3RcIi5cbi8vXG4vLyBAcGFyYW0gJGNvbG9yLW1hcCBUaGUgdGhlbWUgcGFsZXR0ZSAob3V0cHV0IG9mIG1hdC1wYWxldHRlKS5cbi8vIEBwYXJhbSAkaHVlIFRoZSBodWUgZnJvbSB0aGUgcGFsZXR0ZSB0byB1c2UuIElmIHRoaXMgaXMgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEsIGl0IHdpbGxcbi8vICAgICBiZSB0cmVhdGVkIGFzIG9wYWNpdHkuXG4vLyBAcGFyYW0gJG9wYWNpdHkgVGhlIGFscGhhIGNoYW5uZWwgdmFsdWUgZm9yIHRoZSBjb2xvci5cbkBmdW5jdGlvbiBtYXQtY29sb3IoJHBhbGV0dGUsICRodWU6IGRlZmF1bHQsICRvcGFjaXR5OiBudWxsKSB7XG4gIC8vIElmIGh1ZUtleSBpcyBhIG51bWJlciBiZXR3ZWVuIHplcm8gYW5kIG9uZSwgdGhlbiBpdCBhY3R1YWxseSBjb250YWlucyBhblxuICAvLyBvcGFjaXR5IHZhbHVlLCBzbyByZWNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIHRoZSBkZWZhdWx0IGh1ZSBhbmQgdGhhdCBnaXZlbiBvcGFjaXR5LlxuICBAaWYgdHlwZS1vZigkaHVlKSA9PSBudW1iZXIgYW5kICRodWUgPj0gMCBhbmQgJGh1ZSA8PSAxIHtcbiAgICBAcmV0dXJuIG1hdC1jb2xvcigkcGFsZXR0ZSwgZGVmYXVsdCwgJGh1ZSk7XG4gIH1cblxuICAkY29sb3I6IG1hcC1nZXQoJHBhbGV0dGUsICRodWUpO1xuXG4gIEBpZiAodHlwZS1vZigkY29sb3IpICE9IGNvbG9yKSB7XG4gICAgLy8gSWYgdGhlICRjb2xvciByZXNvbHZlZCB0byBzb21ldGhpbmcgZGlmZmVyZW50IGZyb20gYSBjb2xvciAoZS5nLiBhIENTUyB2YXJpYWJsZSksXG4gICAgLy8gd2UgY2FuJ3QgYXBwbHkgdGhlIG9wYWNpdHkgYW55d2F5IHNvIHdlIHJldHVybiB0aGUgdmFsdWUgYXMgaXMsIG90aGVyd2lzZSBTYXNzIGNhblxuICAgIC8vIHRocm93IGFuIGVycm9yIG9yIG91dHB1dCBzb21ldGhpbmcgaW52YWxpZC5cbiAgICBAcmV0dXJuICRjb2xvcjtcbiAgfVxuXG4gIEByZXR1cm4gcmdiYSgkY29sb3IsIGlmKCRvcGFjaXR5ID09IG51bGwsIG9wYWNpdHkoJGNvbG9yKSwgJG9wYWNpdHkpKTtcbn1cblxuXG4vLyBDcmVhdGVzIGEgY29udGFpbmVyIG9iamVjdCBmb3IgYSBsaWdodCB0aGVtZSB0byBiZSBnaXZlbiB0byBpbmRpdmlkdWFsIGNvbXBvbmVudCB0aGVtZSBtaXhpbnMuXG5AZnVuY3Rpb24gbWF0LWxpZ2h0LXRoZW1lKCRwcmltYXJ5LCAkYWNjZW50LCAkd2FybjogbWF0LXBhbGV0dGUoJG1hdC1yZWQpKSB7XG4gIEByZXR1cm4gKFxuICAgIHByaW1hcnk6ICRwcmltYXJ5LFxuICAgIGFjY2VudDogJGFjY2VudCxcbiAgICB3YXJuOiAkd2FybixcbiAgICBpcy1kYXJrOiBmYWxzZSxcbiAgICBmb3JlZ3JvdW5kOiAkbWF0LWxpZ2h0LXRoZW1lLWZvcmVncm91bmQsXG4gICAgYmFja2dyb3VuZDogJG1hdC1saWdodC10aGVtZS1iYWNrZ3JvdW5kLFxuICApO1xufVxuXG5cbi8vIENyZWF0ZXMgYSBjb250YWluZXIgb2JqZWN0IGZvciBhIGRhcmsgdGhlbWUgdG8gYmUgZ2l2ZW4gdG8gaW5kaXZpZHVhbCBjb21wb25lbnQgdGhlbWUgbWl4aW5zLlxuQGZ1bmN0aW9uIG1hdC1kYXJrLXRoZW1lKCRwcmltYXJ5LCAkYWNjZW50LCAkd2FybjogbWF0LXBhbGV0dGUoJG1hdC1yZWQpKSB7XG4gIEByZXR1cm4gKFxuICAgIHByaW1hcnk6ICRwcmltYXJ5LFxuICAgIGFjY2VudDogJGFjY2VudCxcbiAgICB3YXJuOiAkd2FybixcbiAgICBpcy1kYXJrOiB0cnVlLFxuICAgIGZvcmVncm91bmQ6ICRtYXQtZGFyay10aGVtZS1mb3JlZ3JvdW5kLFxuICAgIGJhY2tncm91bmQ6ICRtYXQtZGFyay10aGVtZS1iYWNrZ3JvdW5kLFxuICApO1xufVxuXG5cblxuJG1hdC1yaXBwbGUtY29sb3Itb3BhY2l0eTogMC4xO1xuXG5AbWl4aW4gbWF0LXJpcHBsZSgpIHtcblxuICAvLyBUaGUgaG9zdCBlbGVtZW50IG9mIGFuIG1hdC1yaXBwbGUgZGlyZWN0aXZlIHNob3VsZCBhbHdheXMgaGF2ZSBhIHBvc2l0aW9uIG9mIFwiYWJzb2x1dGVcIiBvclxuICAvLyBcInJlbGF0aXZlXCIgc28gdGhhdCB0aGUgcmlwcGxlcyBpbnNpZGUgYXJlIGNvcnJlY3RseSBwb3NpdGlvbmVkIHJlbGF0aXZlbHkgdG8gdGhlIGNvbnRhaW5lci5cbiAgLm1hdC1yaXBwbGUge1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAvLyBCeSBkZWZhdWx0LCBldmVyeSByaXBwbGUgY29udGFpbmVyIHNob3VsZCBoYXZlIHBvc2l0aW9uOiByZWxhdGl2ZSBpbiBmYXZvciBvZiBjcmVhdGluZyBhblxuICAgIC8vIGVhc3kgQVBJIGZvciBkZXZlbG9wZXJzIHVzaW5nIHRoZSBNYXRSaXBwbGUgZGlyZWN0aXZlLlxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIC8vIFByb21vdGUgY29udGFpbmVycyB0aGF0IGhhdmUgcmlwcGxlcyB0byBhIG5ldyBsYXllci4gV2Ugd2FudCB0byB0YXJnZXQgYDpub3QoOmVtcHR5KWAsXG4gICAgLy8gYmVjYXVzZSB3ZSBkb24ndCB3YW50IGFsbCByaXBwbGUgY29udGFpbmVycyB0byBoYXZlIHRoZWlyIG93biBsYXllciBzaW5jZSB0aGV5J3JlIHVzZWQgaW4gYVxuICAgIC8vIGxvdCBvZiBwbGFjZXMgYW5kIHRoZSBsYXllciBpcyBvbmx5IHJlbGV2YW50IHdoaWxlIGFuaW1hdGluZy4gTm90ZSB0aGF0IGlkZWFsbHkgd2UnZCB1c2VcbiAgICAvLyB0aGUgYGNvbnRhaW5gIHByb3BlcnR5IGhlcmUgKHNlZSAjMTMxNzUpLCBiZWNhdXNlIGA6ZW1wdHlgIGNhbiBiZSBicm9rZW4gYnkgaGF2aW5nIGV4dHJhXG4gICAgLy8gdGV4dCBpbnNpZGUgdGhlIGVsZW1lbnQsIGJ1dCBpdCBpc24ndCB2ZXJ5IHdlbGwgc3VwcG9ydGVkIHlldC5cbiAgICAmOm5vdCg6ZW1wdHkpIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTtcbiAgICB9XG4gIH1cblxuICAubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZCB7XG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIH1cblxuICAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuXG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSwgdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDApO1xuXG4gICAgLy8gSW4gaGlnaCBjb250cmFzdCBtb2RlIHRoZSByaXBwbGUgaXMgb3BhcXVlLCBjYXVzaW5nIGl0IHRvIG9ic3RydWN0IHRoZSBjb250ZW50LlxuICAgIEBpbmNsdWRlIGNkay1oaWdoLWNvbnRyYXN0KGFjdGl2ZSwgb2ZmKSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxufVxuXG4vKiBUaGVtZSBmb3IgdGhlIHJpcHBsZSBlbGVtZW50cy4qL1xuQG1peGluIG1hdC1yaXBwbGUtdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXBfZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRmb3JlZ3JvdW5kLWJhc2U6IG1hcF9nZXQoJGZvcmVncm91bmQsIGJhc2UpO1xuXG4gIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgIC8vIElmIHRoZSByaXBwbGUgY29sb3IgaXMgcmVzb2x2ZXMgdG8gYSBjb2xvciAqdHlwZSosIHdlIGNhbiB1c2UgaXQgZGlyZWN0bHksIG90aGVyd2lzZVxuICAgIC8vIChlLmcuIGl0IHJlc29sdmVzIHRvIGEgQ1NTIHZhcmlhYmxlKSB3ZSBmYWxsIGJhY2sgdG8gdXNpbmcgdGhlIGNvbG9yIGFuZCBzZXR0aW5nIGFuIG9wYWNpdHkuXG4gICAgQGlmICh0eXBlLW9mKCRmb3JlZ3JvdW5kLWJhc2UpID09IGNvbG9yKSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCRmb3JlZ3JvdW5kLWJhc2UsICRtYXQtcmlwcGxlLWNvbG9yLW9wYWNpdHkpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZm9yZWdyb3VuZC1iYXNlO1xuICAgICAgb3BhY2l0eTogJG1hdC1yaXBwbGUtY29sb3Itb3BhY2l0eTtcbiAgICB9XG4gIH1cbn1cblxuXG5cbi8vIFV0aWxpdHkgZm9yIGZldGNoaW5nIGEgbmVzdGVkIHZhbHVlIGZyb20gYSB0eXBvZ3JhcGh5IGNvbmZpZy5cbkBmdW5jdGlvbiBfbWF0LWdldC10eXBlLXZhbHVlKCRjb25maWcsICRsZXZlbCwgJG5hbWUpIHtcbiAgQHJldHVybiBtYXAtZ2V0KG1hcC1nZXQoJGNvbmZpZywgJGxldmVsKSwgJG5hbWUpO1xufVxuXG4vLyBHZXRzIHRoZSBmb250IHNpemUgZm9yIGEgbGV2ZWwgaW5zaWRlIGEgdHlwb2dyYXBoeSBjb25maWcuXG5AZnVuY3Rpb24gbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCAkbGV2ZWwpIHtcbiAgQHJldHVybiBfbWF0LWdldC10eXBlLXZhbHVlKCRjb25maWcsICRsZXZlbCwgZm9udC1zaXplKTtcbn1cblxuLy8gR2V0cyB0aGUgbGluZSBoZWlnaHQgZm9yIGEgbGV2ZWwgaW5zaWRlIGEgdHlwb2dyYXBoeSBjb25maWcuXG5AZnVuY3Rpb24gbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsICRsZXZlbCkge1xuICBAcmV0dXJuIF9tYXQtZ2V0LXR5cGUtdmFsdWUoJGNvbmZpZywgJGxldmVsLCBsaW5lLWhlaWdodCk7XG59XG5cbi8vIEdldHMgdGhlIGZvbnQgd2VpZ2h0IGZvciBhIGxldmVsIGluc2lkZSBhIHR5cG9ncmFwaHkgY29uZmlnLlxuQGZ1bmN0aW9uIG1hdC1mb250LXdlaWdodCgkY29uZmlnLCAkbGV2ZWwpIHtcbiAgQHJldHVybiBfbWF0LWdldC10eXBlLXZhbHVlKCRjb25maWcsICRsZXZlbCwgZm9udC13ZWlnaHQpO1xufVxuXG4vLyBHZXRzIHRoZSBsZXR0ZXIgc3BhY2luZyBmb3IgYSBsZXZlbCBpbnNpZGUgYSB0eXBvZ3JhcGh5IGNvbmZpZy5cbkBmdW5jdGlvbiBtYXQtbGV0dGVyLXNwYWNpbmcoJGNvbmZpZywgJGxldmVsKSB7XG4gIEByZXR1cm4gX21hdC1nZXQtdHlwZS12YWx1ZSgkY29uZmlnLCAkbGV2ZWwsIGxldHRlci1zcGFjaW5nKTtcbn1cblxuLy8gR2V0cyB0aGUgZm9udC1mYW1pbHkgZnJvbSBhIHR5cG9ncmFwaHkgY29uZmlnIGFuZCByZW1vdmVzIHRoZSBxdW90ZXMgYXJvdW5kIGl0LlxuQGZ1bmN0aW9uIG1hdC1mb250LWZhbWlseSgkY29uZmlnLCAkbGV2ZWw6IG51bGwpIHtcbiAgJGZvbnQtZmFtaWx5OiBtYXAtZ2V0KCRjb25maWcsIGZvbnQtZmFtaWx5KTtcblxuICBAaWYgJGxldmVsICE9IG51bGwge1xuICAgICRmb250LWZhbWlseTogX21hdC1nZXQtdHlwZS12YWx1ZSgkY29uZmlnLCAkbGV2ZWwsIGZvbnQtZmFtaWx5KTtcbiAgfVxuXG4gIC8vIEd1YXJkIGFnYWluc3QgdW5xdW90aW5nIG5vbi1zdHJpbmcgdmFsdWVzLCBiZWNhdXNlIGl0J3MgZGVwcmVjYXRlZC5cbiAgQHJldHVybiBpZih0eXBlLW9mKCRmb250LWZhbWlseSkgPT0gc3RyaW5nLCB1bnF1b3RlKCRmb250LWZhbWlseSksICRmb250LWZhbWlseSk7XG59XG5cbi8vIE91dHB1dHMgdGhlIHNob3J0aGFuZCBgZm9udGAgQ1NTIHByb3BlcnR5LCBiYXNlZCBvbiBhIHNldCBvZiB0eXBvZ3JhcGh5IHZhbHVlcy4gRmFsbHMgYmFjayB0b1xuLy8gdGhlIGluZGl2aWR1YWwgcHJvcGVydGllcyBpZiBhIHZhbHVlIHRoYXQgaXNuJ3QgYWxsb3dlZCBpbiB0aGUgc2hvcnRoYW5kIGlzIHBhc3NlZCBpbi5cbkBtaXhpbiBtYXQtdHlwb2dyYXBoeS1mb250LXNob3J0aGFuZCgkZm9udC1zaXplLCAkZm9udC13ZWlnaHQsICRsaW5lLWhlaWdodCwgJGZvbnQtZmFtaWx5KSB7XG4gIC8vIElmIGFueSBvZiB0aGUgdmFsdWVzIGFyZSBzZXQgdG8gYGluaGVyaXRgLCB3ZSBjYW4ndCB1c2UgdGhlIHNob3J0aGFuZFxuICAvLyBzbyB3ZSBmYWxsIGJhY2sgdG8gcGFzc2luZyBpbiB0aGUgaW5kaXZpZHVhbCBwcm9wZXJ0aWVzLlxuICBAaWYgKCRmb250LXNpemUgPT0gaW5oZXJpdCBvclxuICAgICAgICRmb250LXdlaWdodCA9PSBpbmhlcml0IG9yXG4gICAgICAgJGxpbmUtaGVpZ2h0ID09IGluaGVyaXQgb3JcbiAgICAgICAkZm9udC1mYW1pbHkgPT0gaW5oZXJpdCBvclxuICAgICAgICRmb250LXNpemUgPT0gbnVsbCBvclxuICAgICAgICRmb250LXdlaWdodCA9PSBudWxsIG9yXG4gICAgICAgJGxpbmUtaGVpZ2h0ID09IG51bGwgb3JcbiAgICAgICAkZm9udC1mYW1pbHkgPT0gbnVsbCkge1xuXG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplO1xuICAgIGZvbnQtd2VpZ2h0OiAkZm9udC13ZWlnaHQ7XG4gICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5O1xuICB9XG4gIEBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2UgdXNlIHRoZSBzaG9ydGhhbmQgYGZvbnRgLCBiZWNhdXNlIGl0J3MgdGhlIGxlYXN0IGFtb3VudCBvZiBieXRlcy4gTm90ZVxuICAgIC8vIHRoYXQgd2UgbmVlZCB0byB1c2UgaW50ZXJwb2xhdGlvbiBmb3IgYGZvbnQtc2l6ZS9saW5lLWhlaWdodGAgaW4gb3JkZXIgdG8gcHJldmVudFxuICAgIC8vIFNhc3MgZnJvbSBkaXZpZGluZyB0aGUgdHdvIHZhbHVlcy5cbiAgICBmb250OiAkZm9udC13ZWlnaHQgI3skZm9udC1zaXplfS8jeyRsaW5lLWhlaWdodH0gJGZvbnQtZmFtaWx5O1xuICB9XG59XG5cbi8vIENvbnZlcnRzIGEgdHlwb2dyYXBoeSBsZXZlbCBpbnRvIENTUyBzdHlsZXMuXG5AbWl4aW4gbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsICRsZXZlbCkge1xuICAkZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsICRsZXZlbCk7XG4gICRmb250LXdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsICRsZXZlbCk7XG4gICRsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsICRsZXZlbCk7XG4gICRmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsICRsZXZlbCk7XG5cbiAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktZm9udC1zaG9ydGhhbmQoJGZvbnQtc2l6ZSwgJGZvbnQtd2VpZ2h0LCAkbGluZS1oZWlnaHQsICRmb250LWZhbWlseSk7XG4gIGxldHRlci1zcGFjaW5nOiBtYXQtbGV0dGVyLXNwYWNpbmcoJGNvbmZpZywgJGxldmVsKTtcbn1cblxuXG5AbWl4aW4gbWF0LW9wdGlvbi10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG5cbiAgLm1hdC1vcHRpb24ge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gICAgJjpob3Zlcjpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpLFxuICAgICY6Zm9jdXM6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyKTtcbiAgICB9XG5cbiAgICAvLyBJbiBtdWx0aXBsZSBtb2RlIHRoZXJlIGlzIGEgY2hlY2tib3ggdG8gc2hvdyB0aGF0IHRoZSBvcHRpb24gaXMgc2VsZWN0ZWQuXG4gICAgJi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIpO1xuICAgIH1cblxuICAgICYubWF0LWFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyKTtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIH1cblxuICAgICYubWF0LW9wdGlvbi1kaXNhYmxlZCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBoaW50LXRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtcHJpbWFyeSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgdGV4dCk7XG4gIH1cblxuICAubWF0LWFjY2VudCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtd2FybiAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1vcHRpb24tdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtb3B0aW9uIHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgc3ViaGVhZGluZy0yKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LW9wdGdyb3VwLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtb3B0Z3JvdXAtbGFiZWwge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtb3B0Z3JvdXAtZGlzYWJsZWQgLm1hdC1vcHRncm91cC1sYWJlbCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaGludC10ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LW9wdGdyb3VwLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LW9wdGdyb3VwLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgYm9keS0yKTtcbiAgfVxufVxuXG5cblxuQG1peGluIG1hdC1wc2V1ZG8tY2hlY2tib3gtdGhlbWUoJHRoZW1lKSB7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuXG4gIC8vIE5PVEUodHJhdmlza2F1Zm1hbik6IFdoaWxlIHRoZSBzcGVjIGNhbGxzIGZvciB0cmFuc2x1Y2VudCBibGFja3Mvd2hpdGVzIGZvciBkaXNhYmxlZCBjb2xvcnMsXG4gIC8vIHRoaXMgZG9lcyBub3Qgd29yayB3ZWxsIHdpdGggZWxlbWVudHMgbGF5ZXJlZCBvbiB0b3Agb2Ygb25lIGFub3RoZXIuIFRvIGdldCBhcm91bmQgdGhpcyB3ZVxuICAvLyBibGVuZCB0aGUgY29sb3JzIHRvZ2V0aGVyIGJhc2VkIG9uIHRoZSBiYXNlIGNvbG9yIGFuZCB0aGUgdGhlbWUgYmFja2dyb3VuZC5cbiAgJHdoaXRlLTMwcGN0LW9wYWNpdHktb24tZGFyazogIzY4Njg2ODtcbiAgJGJsYWNrLTI2cGN0LW9wYWNpdHktb24tbGlnaHQ6ICNiMGIwYjA7XG4gICRkaXNhYmxlZC1jb2xvcjogaWYoJGlzLWRhcmstdGhlbWUsICR3aGl0ZS0zMHBjdC1vcGFjaXR5LW9uLWRhcmssICRibGFjay0yNnBjdC1vcGFjaXR5LW9uLWxpZ2h0KTtcbiAgJGNvbG9yZWQtYm94LXNlbGVjdG9yOiAnLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSc7XG5cbiAgLm1hdC1wc2V1ZG8tY2hlY2tib3gge1xuICAgIGNvbG9yOiBtYXQtY29sb3IobWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpLCBzZWNvbmRhcnktdGV4dCk7XG5cbiAgICAmOjphZnRlciB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kKTtcbiAgICB9XG4gIH1cblxuICAubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZCB7XG4gICAgY29sb3I6ICRkaXNhYmxlZC1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLFxuICAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KSk7XG4gIH1cblxuICAvLyBEZWZhdWx0IHRvIHRoZSBhY2NlbnQgY29sb3IuIE5vdGUgdGhhdCB0aGUgcHNldWRvIGNoZWNrYm94ZXMgYXJlIG1lYW50IHRvIGluaGVyaXQgdGhlXG4gIC8vIHRoZW1lIGZyb20gdGhlaXIgcGFyZW50LCByYXRoZXIgdGhhbiBpbXBsZW1lbnRpbmcgdGhlaXIgb3duIHRoZW1pbmcsIHdoaWNoIGlzIHdoeSB3ZVxuICAvLyBkb24ndCBhdHRhY2ggdG8gdGhlIGBtYXQtKmAgY2xhc3Nlcy4gQWxzbyBub3RlIHRoYXQgdGhpcyBuZWVkcyB0byBiZSBiZWxvdyBgLm1hdC1wcmltYXJ5YFxuICAvLyBpbiBvcmRlciB0byBhbGxvdyBmb3IgdGhlIGNvbG9yIHRvIGJlIG92ZXJ3cml0dGVuIGlmIHRoZSBjaGVja2JveCBpcyBpbnNpZGUgYSBwYXJlbnQgdGhhdFxuICAvLyBoYXMgYG1hdC1hY2NlbnRgIGFuZCBpcyBwbGFjZWQgaW5zaWRlIGFub3RoZXIgcGFyZW50IHRoYXQgaGFzIGBtYXQtcHJpbWFyeWAuXG4gIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsXG4gIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUsXG4gIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsXG4gIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KSk7XG4gIH1cblxuICAubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxcbiAgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgd2FybikpO1xuICB9XG5cbiAgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxcbiAgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSB7XG4gICAgJi5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkIHtcbiAgICAgIGJhY2tncm91bmQ6ICRkaXNhYmxlZC1jb2xvcjtcbiAgICB9XG4gIH1cbn1cblxuXG5cbi8vIFJlcHJlc2VudHMgYSB0eXBvZ3JhcGh5IGxldmVsIGZyb20gdGhlIE1hdGVyaWFsIGRlc2lnbiBzcGVjLlxuQGZ1bmN0aW9uIG1hdC10eXBvZ3JhcGh5LWxldmVsKFxuICAkZm9udC1zaXplLFxuICAkbGluZS1oZWlnaHQ6ICRmb250LXNpemUsXG4gICRmb250LXdlaWdodDogNDAwLFxuICAkZm9udC1mYW1pbHk6IG51bGwsXG4gICRsZXR0ZXItc3BhY2luZzogbm9ybWFsKSB7XG5cbiAgQHJldHVybiAoXG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLFxuICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQsXG4gICAgZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodCxcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LFxuICAgIGxldHRlci1zcGFjaW5nOiAkbGV0dGVyLXNwYWNpbmdcbiAgKTtcbn1cblxuLy8gUmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgdHlwb2dyYXBoeSBsZXZlbHMuXG4vLyBEZWZhdWx0cyBjb21lIGZyb20gaHR0cHM6Ly9tYXRlcmlhbC5pby9ndWlkZWxpbmVzL3N0eWxlL3R5cG9ncmFwaHkuaHRtbFxuLy8gTm90ZTogVGhlIHNwZWMgZG9lc24ndCBtZW50aW9uIGxldHRlciBzcGFjaW5nLiBUaGUgdmFsdWVzIGhlcmUgY29tZSBmcm9tXG4vLyBleWViYWxsaW5nIGl0IHVudGlsIGl0IGxvb2tlZCBleGFjdGx5IGxpa2UgdGhlIHNwZWMgZXhhbXBsZXMuXG5AZnVuY3Rpb24gbWF0LXR5cG9ncmFwaHktY29uZmlnKFxuICAkZm9udC1mYW1pbHk6ICAgJ1JvYm90bywgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBzYW5zLXNlcmlmJyxcbiAgJGRpc3BsYXktNDogICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDExMnB4LCAxMTJweCwgMzAwLCAkbGV0dGVyLXNwYWNpbmc6IC0wLjA1ZW0pLFxuICAkZGlzcGxheS0zOiAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoNTZweCwgNTZweCwgNDAwLCAkbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW0pLFxuICAkZGlzcGxheS0yOiAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoNDVweCwgNDhweCwgNDAwLCAkbGV0dGVyLXNwYWNpbmc6IC0wLjAwNWVtKSxcbiAgJGRpc3BsYXktMTogICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDM0cHgsIDQwcHgsIDQwMCksXG4gICRoZWFkbGluZTogICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgyNHB4LCAzMnB4LCA0MDApLFxuICAkdGl0bGU6ICAgICAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMjBweCwgMzJweCwgNTAwKSxcbiAgJHN1YmhlYWRpbmctMjogIG1hdC10eXBvZ3JhcGh5LWxldmVsKDE2cHgsIDI4cHgsIDQwMCksXG4gICRzdWJoZWFkaW5nLTE6ICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgxNXB4LCAyNHB4LCA0MDApLFxuICAkYm9keS0yOiAgICAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMTRweCwgMjRweCwgNTAwKSxcbiAgJGJvZHktMTogICAgICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDE0cHgsIDIwcHgsIDQwMCksXG4gICRjYXB0aW9uOiAgICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgxMnB4LCAyMHB4LCA0MDApLFxuICAkYnV0dG9uOiAgICAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMTRweCwgMTRweCwgNTAwKSxcbiAgLy8gTGluZS1oZWlnaHQgbXVzdCBiZSB1bml0LWxlc3MgZnJhY3Rpb24gb2YgdGhlIGZvbnQtc2l6ZS5cbiAgJGlucHV0OiAgICAgICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKGluaGVyaXQsIDEuMTI1LCA0MDApXG4pIHtcblxuICAvLyBEZWNsYXJlIGFuIGluaXRpYWwgbWFwIHdpdGggYWxsIG9mIHRoZSBsZXZlbHMuXG4gICRjb25maWc6IChcbiAgICBkaXNwbGF5LTQ6ICAgICAgJGRpc3BsYXktNCxcbiAgICBkaXNwbGF5LTM6ICAgICAgJGRpc3BsYXktMyxcbiAgICBkaXNwbGF5LTI6ICAgICAgJGRpc3BsYXktMixcbiAgICBkaXNwbGF5LTE6ICAgICAgJGRpc3BsYXktMSxcbiAgICBoZWFkbGluZTogICAgICAgJGhlYWRsaW5lLFxuICAgIHRpdGxlOiAgICAgICAgICAkdGl0bGUsXG4gICAgc3ViaGVhZGluZy0yOiAgICRzdWJoZWFkaW5nLTIsXG4gICAgc3ViaGVhZGluZy0xOiAgICRzdWJoZWFkaW5nLTEsXG4gICAgYm9keS0yOiAgICAgICAgICRib2R5LTIsXG4gICAgYm9keS0xOiAgICAgICAgICRib2R5LTEsXG4gICAgY2FwdGlvbjogICAgICAgICRjYXB0aW9uLFxuICAgIGJ1dHRvbjogICAgICAgICAkYnV0dG9uLFxuICAgIGlucHV0OiAgICAgICAgICAkaW5wdXQsXG4gICk7XG5cbiAgLy8gTG9vcCB0aHJvdWdoIHRoZSBsZXZlbHMgYW5kIHNldCB0aGUgYGZvbnQtZmFtaWx5YCBvZiB0aGUgb25lcyB0aGF0IGRvbid0IGhhdmUgb25lIHRvIHRoZSBiYXNlLlxuICAvLyBOb3RlIHRoYXQgU2FzcyBjYW4ndCBtb2RpZnkgbWFwcyBpbiBwbGFjZSwgd2hpY2ggbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIG1lcmdlIGFuZCByZS1hc3NpZ24uXG4gIEBlYWNoICRrZXksICRsZXZlbCBpbiAkY29uZmlnIHtcbiAgICBAaWYgbWFwLWdldCgkbGV2ZWwsIGZvbnQtZmFtaWx5KSA9PSBudWxsIHtcbiAgICAgICRuZXctbGV2ZWw6IG1hcC1tZXJnZSgkbGV2ZWwsIChmb250LWZhbWlseTogJGZvbnQtZmFtaWx5KSk7XG4gICAgICAkY29uZmlnOiBtYXAtbWVyZ2UoJGNvbmZpZywgKCRrZXk6ICRuZXctbGV2ZWwpKTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgdGhlIGJhc2UgZm9udCBmYW1pbHkgdG8gdGhlIGNvbmZpZy5cbiAgQHJldHVybiBtYXAtbWVyZ2UoJGNvbmZpZywgKGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHkpKTtcbn1cblxuLy8gQWRkcyB0aGUgYmFzZSB0eXBvZ3JhcGh5IHN0eWxlcywgYmFzZWQgb24gYSBjb25maWcuXG5AbWl4aW4gbWF0LWJhc2UtdHlwb2dyYXBoeSgkY29uZmlnLCAkc2VsZWN0b3I6ICcubWF0LXR5cG9ncmFwaHknKSB7XG4gIC5tYXQtaDEsIC5tYXQtaGVhZGxpbmUsICN7JHNlbGVjdG9yfSBoMSB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGhlYWRsaW5lKTtcbiAgICBtYXJnaW46IDAgMCAxNnB4O1xuICB9XG5cbiAgLm1hdC1oMiwgLm1hdC10aXRsZSwgI3skc2VsZWN0b3J9IGgyIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgdGl0bGUpO1xuICAgIG1hcmdpbjogMCAwIDE2cHg7XG4gIH1cblxuICAubWF0LWgzLCAubWF0LXN1YmhlYWRpbmctMiwgI3skc2VsZWN0b3J9IGgzIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgc3ViaGVhZGluZy0yKTtcbiAgICBtYXJnaW46IDAgMCAxNnB4O1xuICB9XG5cbiAgLm1hdC1oNCwgLm1hdC1zdWJoZWFkaW5nLTEsICN7JHNlbGVjdG9yfSBoNCB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIHN1YmhlYWRpbmctMSk7XG4gICAgbWFyZ2luOiAwIDAgMTZweDtcbiAgfVxuXG4gIC8vIE5vdGU6IHRoZSBzcGVjIGRvZXNuJ3QgaGF2ZSBhbnl0aGluZyB0aGF0IHdvdWxkIGNvcnJlc3BvbmQgdG8gaDUgYW5kIGg2LCBidXQgd2UgYWRkIHRoZXNlIGZvclxuICAvLyBjb25zaXN0ZW5jeS4gVGhlIGZvbnQgc2l6ZXMgY29tZSBmcm9tIHRoZSBDaHJvbWUgdXNlciBhZ2VudCBzdHlsZXMgd2hpY2ggaGF2ZSBoNSBhdCAwLjgzZW1cbiAgLy8gYW5kIGg2IGF0IDAuNjdlbS5cbiAgLm1hdC1oNSwgI3skc2VsZWN0b3J9IGg1IHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1mb250LXNob3J0aGFuZChcbiAgICAgICAvLyBjYWxjIGlzIHVzZWQgaGVyZSB0byBzdXBwb3J0IGNzcyB2YXJpYWJsZXNcbiAgICAgIGNhbGMoI3ttYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSl9ICogMC44MyksXG4gICAgICBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0xKSxcbiAgICAgIG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBib2R5LTEpLFxuICAgICAgbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGJvZHktMSlcbiAgICApO1xuXG4gICAgbWFyZ2luOiAwIDAgMTJweDtcbiAgfVxuXG4gIC5tYXQtaDYsICN7JHNlbGVjdG9yfSBoNiB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktZm9udC1zaG9ydGhhbmQoXG4gICAgICAgLy8gY2FsYyBpcyB1c2VkIGhlcmUgdG8gc3VwcG9ydCBjc3MgdmFyaWFibGVzXG4gICAgICBjYWxjKCN7bWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpfSAqIDAuNjcpLFxuICAgICAgbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMSksXG4gICAgICBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgYm9keS0xKSxcbiAgICAgIG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBib2R5LTEpXG4gICAgKTtcblxuICAgIG1hcmdpbjogMCAwIDEycHg7XG4gIH1cblxuICAubWF0LWJvZHktc3Ryb25nLCAubWF0LWJvZHktMiB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGJvZHktMik7XG4gIH1cblxuICAubWF0LWJvZHksIC5tYXQtYm9keS0xLCAjeyRzZWxlY3Rvcn0ge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBib2R5LTEpO1xuXG4gICAgcCB7XG4gICAgICBtYXJnaW46IDAgMCAxMnB4O1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc21hbGwsIC5tYXQtY2FwdGlvbiB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGNhcHRpb24pO1xuICB9XG5cbiAgLm1hdC1kaXNwbGF5LTQsICN7JHNlbGVjdG9yfSAubWF0LWRpc3BsYXktNCB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGRpc3BsYXktNCk7XG4gICAgbWFyZ2luOiAwIDAgNTZweDtcbiAgfVxuXG4gIC5tYXQtZGlzcGxheS0zLCAjeyRzZWxlY3Rvcn0gLm1hdC1kaXNwbGF5LTMge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBkaXNwbGF5LTMpO1xuICAgIG1hcmdpbjogMCAwIDY0cHg7XG4gIH1cblxuICAubWF0LWRpc3BsYXktMiwgI3skc2VsZWN0b3J9IC5tYXQtZGlzcGxheS0yIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgZGlzcGxheS0yKTtcbiAgICBtYXJnaW46IDAgMCA2NHB4O1xuICB9XG5cbiAgLm1hdC1kaXNwbGF5LTEsICN7JHNlbGVjdG9yfSAubWF0LWRpc3BsYXktMSB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGRpc3BsYXktMSk7XG4gICAgbWFyZ2luOiAwIDAgNjRweDtcbiAgfVxufVxuXG5cblxuXG5AbWl4aW4gbWF0LWF1dG9jb21wbGV0ZS10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcblxuICAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oNCwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gICAgLy8gU2VsZWN0ZWQgb3B0aW9ucyBpbiBhdXRvY29tcGxldGVzIHNob3VsZCBub3QgYmUgZ3JheSwgYnV0IHdlXG4gICAgLy8gb25seSB3YW50IHRvIG92ZXJyaWRlIHRoZSBiYWNrZ3JvdW5kIGZvciBzZWxlY3RlZCBvcHRpb25zIGlmXG4gICAgLy8gdGhleSBhcmUgKm5vdCogaW4gaG92ZXIgb3IgZm9jdXMgc3RhdGUuIFRoaXMgY2hhbmdlIGhhcyB0byBiZVxuICAgIC8vIG1hZGUgaGVyZSBiZWNhdXNlIGJhc2Ugb3B0aW9uIHN0eWxlcyBhcmUgc2hhcmVkIGJldHdlZW4gdGhlXG4gICAgLy8gYXV0b2NvbXBsZXRlIGFuZCB0aGUgc2VsZWN0LlxuICAgIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1hY3RpdmUpOm5vdCg6aG92ZXIpIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG5cbiAgICAgICY6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSB7XG4gICAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG5cbkBtaXhpbiBtYXQtYXV0b2NvbXBsZXRlLXR5cG9ncmFwaHkoJGNvbmZpZykgeyB9XG5cbi8vIFRoaXMgY29udGFpbnMgYWxsIG9mIHRoZSBzdHlsZXMgZm9yIHRoZSBiYWRnZVxuLy8gcmF0aGVyIHRoYW4ganVzdCB0aGUgY29sb3IvdGhlbWUgYmVjYXVzZSBvZlxuLy8gbm8gc3R5bGUgc2hlZXQgc3VwcG9ydCBmb3IgZGlyZWN0aXZlcy5cblxuXG5cblxuXG4kbWF0LWJhZGdlLWZvbnQtc2l6ZTogMTJweDtcbiRtYXQtYmFkZ2UtZm9udC13ZWlnaHQ6IDYwMDtcbiRtYXQtYmFkZ2UtZGVmYXVsdC1zaXplOiAyMnB4ICFkZWZhdWx0O1xuJG1hdC1iYWRnZS1zbWFsbC1zaXplOiAkbWF0LWJhZGdlLWRlZmF1bHQtc2l6ZSAtIDY7XG4kbWF0LWJhZGdlLWxhcmdlLXNpemU6ICRtYXQtYmFkZ2UtZGVmYXVsdC1zaXplICsgNjtcblxuLy8gTWl4aW4gZm9yIGJ1aWxkaW5nIG9mZnNldCBnaXZlbiBkaWZmZXJlbnQgc2l6ZXNcbkBtaXhpbiBfbWF0LWJhZGdlLXNpemUoJHNpemUpIHtcbiAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICB3aWR0aDogJHNpemU7XG4gICAgaGVpZ2h0OiAkc2l6ZTtcbiAgICBsaW5lLWhlaWdodDogJHNpemU7XG4gIH1cblxuICAmLm1hdC1iYWRnZS1hYm92ZSB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIHRvcDogLSRzaXplIC8gMjtcbiAgICB9XG4gIH1cblxuICAmLm1hdC1iYWRnZS1iZWxvdyB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIGJvdHRvbTogLSRzaXplIC8gMjtcbiAgICB9XG4gIH1cblxuICAmLm1hdC1iYWRnZS1iZWZvcmUge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICBsZWZ0OiAtJHNpemU7XG4gICAgfVxuICB9XG5cbiAgW2Rpcj0ncnRsJ10gJi5tYXQtYmFkZ2UtYmVmb3JlIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgbGVmdDogYXV0bztcbiAgICAgIHJpZ2h0OiAtJHNpemU7XG4gICAgfVxuICB9XG5cbiAgJi5tYXQtYmFkZ2UtYWZ0ZXIge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICByaWdodDogLSRzaXplO1xuICAgIH1cbiAgfVxuXG4gIFtkaXI9J3J0bCddICYubWF0LWJhZGdlLWFmdGVyIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgcmlnaHQ6IGF1dG87XG4gICAgICBsZWZ0OiAtJHNpemU7XG4gICAgfVxuICB9XG5cbiAgJi5tYXQtYmFkZ2Utb3ZlcmxhcCB7XG4gICAgJi5tYXQtYmFkZ2UtYmVmb3JlIHtcbiAgICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICAgIGxlZnQ6IC0kc2l6ZSAvIDI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgW2Rpcj0ncnRsJ10gJi5tYXQtYmFkZ2UtYmVmb3JlIHtcbiAgICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICAgIGxlZnQ6IGF1dG87XG4gICAgICAgIHJpZ2h0OiAtJHNpemUgLyAyO1xuICAgICAgfVxuICAgIH1cblxuICAgICYubWF0LWJhZGdlLWFmdGVyIHtcbiAgICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICAgIHJpZ2h0OiAtJHNpemUgLyAyO1xuICAgICAgfVxuICAgIH1cblxuICAgIFtkaXI9J3J0bCddICYubWF0LWJhZGdlLWFmdGVyIHtcbiAgICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgICBsZWZ0OiAtJHNpemUgLyAyO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWJhZGdlLXRoZW1lKCR0aGVtZSkge1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIGRlZmF1bHQtY29udHJhc3QpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG5cbiAgICBAaW5jbHVkZSBjZGstaGlnaC1jb250cmFzdChhY3RpdmUsIG9mZikge1xuICAgICAgb3V0bGluZTogc29saWQgMXB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICB9XG4gIH1cblxuICAubWF0LWJhZGdlLWFjY2VudCB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYWNjZW50KTtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgZGVmYXVsdC1jb250cmFzdCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1iYWRnZS13YXJuIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgZGVmYXVsdC1jb250cmFzdCk7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJHdhcm4pO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYmFkZ2Uge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxuXG4gIC5tYXQtYmFkZ2UtaGlkZGVuIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJhZGdlLWRpc2FibGVkIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgJGFwcC1iYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdiYWNrZ3JvdW5kJyk7XG4gICAgICAkYmFkZ2UtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtYnV0dG9uKTtcblxuICAgICAgLy8gVGhlIGRpc2FibGVkIGNvbG9yIHVzdWFsbHkgaGFzIHNvbWUga2luZCBvZiBvcGFjaXR5LCBidXQgYmVjYXVzZSB0aGUgYmFkZ2UgaXMgb3ZlcmxheWVkXG4gICAgICAvLyBvbiB0b3Agb2Ygc29tZXRoaW5nIGVsc2UsIGl0IHdvbid0IGxvb2sgZ29vZCBpZiBpdCdzIG9wYXF1ZS4gSWYgaXQgaXMgYSBjb2xvciAqdHlwZSosXG4gICAgICAvLyB3ZSBjb252ZXJ0IGl0IGludG8gYSBzb2xpZCBjb2xvciBieSB0YWtpbmcgdGhlIG9wYWNpdHkgZnJvbSB0aGUgcmdiYSB2YWx1ZSBhbmQgdXNpbmdcbiAgICAgIC8vIHRoZSB2YWx1ZSB0byBkZXRlcm1pbmUgdGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIGJhY2tncm91bmQgdG8gcHV0IGludG8gZm9yZWdyb3VuZCB3aGVuXG4gICAgICAvLyBtaXhpbmcgdGhlIGNvbG9ycyB0b2dldGhlci5cbiAgICAgIEBpZiAodHlwZS1vZigkYmFkZ2UtY29sb3IpID09IGNvbG9yIGFuZCB0eXBlLW9mKCRhcHAtYmFja2dyb3VuZCkgPT0gY29sb3IpIHtcbiAgICAgICAgJGJhZGdlLW9wYWNpdHk6IG9wYWNpdHkoJGJhZGdlLWNvbG9yKTtcbiAgICAgICAgYmFja2dyb3VuZDogbWl4KCRhcHAtYmFja2dyb3VuZCwgcmdiYSgkYmFkZ2UtY29sb3IsIDEpLCAoMSAtICRiYWRnZS1vcGFjaXR5KSAqIDEwMCUpO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkYmFkZ2UtY29sb3I7XG4gICAgICB9XG5cbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyMDBtcyBlYXNlLWluLW91dDtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNik7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG5cbiAgLm5nLWFuaW1hdGUtZGlzYWJsZWQgLm1hdC1iYWRnZS1jb250ZW50LFxuICAubWF0LWJhZGdlLWNvbnRlbnQuX21hdC1hbmltYXRpb24tbm9vcGFibGUge1xuICAgIHRyYW5zaXRpb246IG5vbmU7XG4gIH1cblxuICAvLyBUaGUgYWN0aXZlIGNsYXNzIGlzIGFkZGVkIGFmdGVyIHRoZSBlbGVtZW50IGlzIGFkZGVkXG4gIC8vIHNvIGl0IGNhbiBhbmltYXRlIHNjYWxlIHRvIGRlZmF1bHRcbiAgLm1hdC1iYWRnZS1jb250ZW50Lm1hdC1iYWRnZS1hY3RpdmUge1xuICAgIC8vIFNjYWxlIHRvIGBub25lYCBpbnN0ZWFkIG9mIGAxYCB0byBhdm9pZCBibHVycnkgdGV4dCBpbiBzb21lIGJyb3dzZXJzLlxuICAgIHRyYW5zZm9ybTogbm9uZTtcbiAgfVxuXG4gIC5tYXQtYmFkZ2Utc21hbGwge1xuICAgIEBpbmNsdWRlIF9tYXQtYmFkZ2Utc2l6ZSgkbWF0LWJhZGdlLXNtYWxsLXNpemUpO1xuICB9XG4gIC5tYXQtYmFkZ2UtbWVkaXVtIHtcbiAgICBAaW5jbHVkZSBfbWF0LWJhZGdlLXNpemUoJG1hdC1iYWRnZS1kZWZhdWx0LXNpemUpO1xuICB9XG4gIC5tYXQtYmFkZ2UtbGFyZ2Uge1xuICAgIEBpbmNsdWRlIF9tYXQtYmFkZ2Utc2l6ZSgkbWF0LWJhZGdlLWxhcmdlLXNpemUpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtYmFkZ2UtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgZm9udC13ZWlnaHQ6ICRtYXQtYmFkZ2UtZm9udC13ZWlnaHQ7XG4gICAgZm9udC1zaXplOiAkbWF0LWJhZGdlLWZvbnQtc2l6ZTtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC1iYWRnZS1zbWFsbCAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgIC8vIFNldCB0aGUgZm9udCBzaXplIHRvIDc1JSBvZiB0aGUgb3JpZ2luYWwuXG4gICAgZm9udC1zaXplOiAkbWF0LWJhZGdlLWZvbnQtc2l6ZSAqIDAuNzU7XG4gIH1cblxuICAubWF0LWJhZGdlLWxhcmdlIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgZm9udC1zaXplOiAkbWF0LWJhZGdlLWZvbnQtc2l6ZSAqIDI7XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LWJvdHRvbS1zaGVldC10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXIge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDE2LCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZGlhbG9nKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWJvdHRvbS1zaGVldC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgYm9keS0xKTtcbiAgfVxufVxuXG5cblxuXG5cbiRfbWF0LWJ1dHRvbi1yaXBwbGUtb3BhY2l0eTogMC4xO1xuXG4vLyBBcHBsaWVzIGEgZm9jdXMgc3R5bGUgdG8gYW4gbWF0LWJ1dHRvbiBlbGVtZW50IGZvciBlYWNoIG9mIHRoZSBzdXBwb3J0ZWQgcGFsZXR0ZXMuXG5AbWl4aW4gX21hdC1idXR0b24tZm9jdXMtb3ZlcmxheS1jb2xvcigkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG5cbiAgJi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnkpO1xuICB9XG5cbiAgJi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYWNjZW50KTtcbiAgfVxuXG4gICYubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCR3YXJuKTtcbiAgfVxuXG4gICZbZGlzYWJsZWRdIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG59XG5cbi8vIEFwcGxpZXMgdGhlIGJhY2tncm91bmQgY29sb3IgZm9yIGEgcmlwcGxlLiBJZiB0aGUgdmFsdWUgcHJvdmlkZWQgaXMgbm90IGEgU2FzcyBjb2xvcixcbi8vIHdlIGFzc3VtZSB0aGF0IHdlJ3ZlIGJlZW4gZ2l2ZW4gYSBDU1MgdmFyaWFibGUuIFNpbmNlIHdlIGNhbid0IHBlcmZvcm0gYWxwaGEtYmxlbmRpbmdcbi8vIG9uIGEgQ1NTIHZhcmlhYmxlLCB3ZSBpbnN0ZWFkIGFkZCB0aGUgb3BhY2l0eSBkaXJlY3RseSB0byB0aGUgcmlwcGxlIGVsZW1lbnQuXG5AbWl4aW4gX21hdC1idXR0b24tcmlwcGxlLWJhY2tncm91bmQoJHBhbGV0dGUsICRodWUsICRvcGFjaXR5KSB7XG4gICRiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsICRodWUsICRvcGFjaXR5KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY29sb3I7XG4gIEBpZiAodHlwZS1vZigkYmFja2dyb3VuZC1jb2xvcikgIT0gY29sb3IpIHtcbiAgICBvcGFjaXR5OiAkb3BhY2l0eTtcbiAgfVxufVxuXG5AbWl4aW4gX21hdC1idXR0b24tcmlwcGxlLWNvbG9yKCR0aGVtZSwgJGh1ZSwgJG9wYWNpdHk6ICRfbWF0LWJ1dHRvbi1yaXBwbGUtb3BhY2l0eSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcblxuICAmLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLXJpcHBsZS1iYWNrZ3JvdW5kKCRwcmltYXJ5LCAkaHVlLCAkb3BhY2l0eSk7XG4gIH1cblxuICAmLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tcmlwcGxlLWJhY2tncm91bmQoJGFjY2VudCwgJGh1ZSwgJG9wYWNpdHkpO1xuICB9XG5cbiAgJi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi1yaXBwbGUtYmFja2dyb3VuZCgkd2FybiwgJGh1ZSwgJG9wYWNpdHkpO1xuICB9XG59XG5cbi8vIEFwcGxpZXMgYSBwcm9wZXJ0eSB0byBhbiBtYXQtYnV0dG9uIGVsZW1lbnQgZm9yIGVhY2ggb2YgdGhlIHN1cHBvcnRlZCBwYWxldHRlcy5cbkBtaXhpbiBfbWF0LWJ1dHRvbi10aGVtZS1wcm9wZXJ0eSgkdGhlbWUsICRwcm9wZXJ0eSwgJGh1ZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAmLm1hdC1wcmltYXJ5IHtcbiAgICAjeyRwcm9wZXJ0eX06IG1hdC1jb2xvcigkcHJpbWFyeSwgJGh1ZSk7XG4gIH1cbiAgJi5tYXQtYWNjZW50IHtcbiAgICAjeyRwcm9wZXJ0eX06IG1hdC1jb2xvcigkYWNjZW50LCAkaHVlKTtcbiAgfVxuICAmLm1hdC13YXJuIHtcbiAgICAjeyRwcm9wZXJ0eX06IG1hdC1jb2xvcigkd2FybiwgJGh1ZSk7XG4gIH1cblxuICAmLm1hdC1wcmltYXJ5LCAmLm1hdC1hY2NlbnQsICYubWF0LXdhcm4sICZbZGlzYWJsZWRdIHtcbiAgICAmW2Rpc2FibGVkXSB7XG4gICAgICAkcGFsZXR0ZTogaWYoJHByb3BlcnR5ID09ICdjb2xvcicsICRmb3JlZ3JvdW5kLCAkYmFja2dyb3VuZCk7XG4gICAgICAjeyRwcm9wZXJ0eX06IG1hdC1jb2xvcigkcGFsZXR0ZSwgZGlzYWJsZWQtYnV0dG9uKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1idXR0b24tdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtYnV0dG9uLCAubWF0LWljb24tYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uIHtcbiAgICAvLyBCdXR0b25zIHdpdGhvdXQgYSBiYWNrZ3JvdW5kIGNvbG9yIHNob3VsZCBpbmhlcml0IHRoZSBmb250IGNvbG9yLiBUaGlzIGlzIG5lY2Vzc2FyeSB0b1xuICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBidXR0b24gaXMgcmVhZGFibGUgb24gY3VzdG9tIGJhY2tncm91bmQgY29sb3JzLiBJdCdzIHdyb25nIHRvIGFsd2F5cyBhc3N1bWVcbiAgICAvLyB0aGF0IHRob3NlIGJ1dHRvbnMgYXJlIGFsd2F5cyBwbGFjZWQgaW5zaWRlIG9mIGNvbnRhaW5lcnMgd2l0aCB0aGUgZGVmYXVsdCBiYWNrZ3JvdW5kXG4gICAgLy8gY29sb3Igb2YgdGhlIHRoZW1lIChlLmcuIHRoZW1lZCB0b29sYmFycykuXG4gICAgY29sb3I6IGluaGVyaXQ7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi10aGVtZS1wcm9wZXJ0eSgkdGhlbWUsICdjb2xvcicsIHRleHQpO1xuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXktY29sb3IoJHRoZW1lKTtcblxuICAgIC8vIFNldHVwIHRoZSByaXBwbGUgY29sb3IgdG8gYmUgYmFzZWQgb24gdGhlIHRleHQgY29sb3IuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSByaXBwbGVzXG4gICAgLy8gYXJlIG1hdGNoaW5nIHdpdGggdGhlIGN1cnJlbnQgdGhlbWUgcGFsZXR0ZSBhbmQgYXJlIGluIGNvbnRyYXN0IHRvIHRoZSBiYWNrZ3JvdW5kIGNvbG9yXG4gICAgLy8gKGUuZyBpbiB0aGVtZWQgdG9vbGJhcnMpLlxuICAgIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgICAgb3BhY2l0eTogJF9tYXQtYnV0dG9uLXJpcHBsZS1vcGFjaXR5O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkge1xuICAgIGJhY2tncm91bmQ6IG1hcF9nZXQoJGZvcmVncm91bmQsIGJhc2UpO1xuICB9XG5cbiAgLy8gTm90ZTogdGhpcyBuZWVkcyBhIGJpdCBleHRyYSBzcGVjaWZpY2l0eSwgYmVjYXVzZSB3ZSdyZSBub3QgZ3VhcmFudGVlZCB0aGUgaW5jbHVzaW9uXG4gIC8vIG9yZGVyIG9mIHRoZSB0aGVtZSBzdHlsZXMgYW5kIHRoZSBidXR0b24gcmVzZXQgbWF5IGVuZCB1cCByZXNldHRpbmcgdGhpcyBhcyB3ZWxsLlxuICAubWF0LXN0cm9rZWQtYnV0dG9uOm5vdChbZGlzYWJsZWRdKSB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG5cbiAgLm1hdC1mbGF0LWJ1dHRvbiwgLm1hdC1yYWlzZWQtYnV0dG9uLCAubWF0LWZhYiwgLm1hdC1taW5pLWZhYiB7XG4gICAgLy8gRGVmYXVsdCBmb250IGFuZCBiYWNrZ3JvdW5kIGNvbG9yIHdoZW4gbm90IHVzaW5nIGFueSBjb2xvciBwYWxldHRlLlxuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgcmFpc2VkLWJ1dHRvbik7XG5cbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi10aGVtZS1wcm9wZXJ0eSgkdGhlbWUsICdjb2xvcicsIGRlZmF1bHQtY29udHJhc3QpO1xuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLXRoZW1lLXByb3BlcnR5KCR0aGVtZSwgJ2JhY2tncm91bmQtY29sb3InLCBkZWZhdWx0KTtcbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi1yaXBwbGUtY29sb3IoJHRoZW1lLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgfVxuXG4gIC5tYXQtc3Ryb2tlZC1idXR0b24sIC5tYXQtZmxhdC1idXR0b24ge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDAsICR0aGVtZSk7XG4gIH1cblxuICAubWF0LXJhaXNlZC1idXR0b24ge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDIsICR0aGVtZSk7XG5cbiAgICAmOm5vdChbZGlzYWJsZWRdKTphY3RpdmUge1xuICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oOCwgJHRoZW1lKTtcbiAgICB9XG5cbiAgICAmW2Rpc2FibGVkXSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigwLCAkdGhlbWUpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZmFiLCAubWF0LW1pbmktZmFiIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbig2LCAkdGhlbWUpO1xuXG4gICAgJjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDEyLCAkdGhlbWUpO1xuICAgIH1cblxuICAgICZbZGlzYWJsZWRdIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDAsICR0aGVtZSk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtYnV0dG9uLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWJ1dHRvbiwgLm1hdC1yYWlzZWQtYnV0dG9uLCAubWF0LWljb24tYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLFxuICAubWF0LWZsYXQtYnV0dG9uLCAubWF0LWZhYiwgLm1hdC1taW5pLWZhYiB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgYnV0dG9uKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYnV0dG9uKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJ1dHRvbik7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LWJ1dHRvbi10b2dnbGUtdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRkaXZpZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLFxuICAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDIsICR0aGVtZSk7XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLFxuICAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCB7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaGludC10ZXh0KTtcblxuICAgIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZm9jdXNlZC1idXR0b24pO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuXG4gICAgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBmb2N1c2VkLWJ1dHRvbiwgMSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlICsgLm1hdC1idXR0b24tdG9nZ2xlIHtcbiAgICBib3JkZXItbGVmdDogc29saWQgMXB4ICRkaXZpZGVyLWNvbG9yO1xuICB9XG5cbiAgW2Rpcj0ncnRsJ10gLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlICsgLm1hdC1idXR0b24tdG9nZ2xlIHtcbiAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICBib3JkZXItcmlnaHQ6IHNvbGlkIDFweCAkZGl2aWRlci1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1idXR0b24tdG9nZ2xlLXZlcnRpY2FsIHtcbiAgICAubWF0LWJ1dHRvbi10b2dnbGUgKyAubWF0LWJ1dHRvbi10b2dnbGUge1xuICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gICAgICBib3JkZXItcmlnaHQ6IG5vbmU7XG4gICAgICBib3JkZXItdG9wOiBzb2xpZCAxcHggJGRpdmlkZXItY29sb3I7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgc2VsZWN0ZWQtYnV0dG9uKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG5cbiAgICAmLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC1idXR0b24pO1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZGlzYWJsZWQtYnV0dG9uLXRvZ2dsZSk7XG5cbiAgICAmLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgICB9XG5cbiAgICAmLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBzZWxlY3RlZC1kaXNhYmxlZC1idXR0b24pO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQsXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIHtcbiAgICBib3JkZXI6IHNvbGlkIDFweCAkZGl2aWRlci1jb2xvcjtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWJ1dHRvbi10b2dnbGUtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtYnV0dG9uLXRvZ2dsZSB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxufVxuXG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LWNhcmQtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1jYXJkIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigxLCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgICAvLyBOZWVkcyBleHRyYSBzcGVjaWZpY2l0eSB0byBiZSBhYmxlIHRvIG92ZXJyaWRlIHRoZSBlbGV2YXRpb24gc2VsZWN0b3JzLlxuICAgICYubWF0LWNhcmQtZmxhdCB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigwLCAkdGhlbWUpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtY2FyZC1zdWJ0aXRsZSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtY2FyZC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1jYXJkIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC1jYXJkLXRpdGxlIHtcbiAgICBmb250OiB7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGhlYWRsaW5lKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIHRpdGxlKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWNhcmQtaGVhZGVyIC5tYXQtY2FyZC10aXRsZSB7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIHRpdGxlKTtcbiAgfVxuXG4gIC5tYXQtY2FyZC1zdWJ0aXRsZSxcbiAgLm1hdC1jYXJkLWNvbnRlbnQge1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpO1xuICB9XG59XG5cblxuXG5cblxuQG1peGluIG1hdC1jaGVja2JveC10aGVtZSgkdGhlbWUpIHtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cblxuICAvLyBUaGUgY29sb3Igb2YgdGhlIGNoZWNrYm94J3MgY2hlY2ttYXJrIC8gbWl4ZWRtYXJrLlxuICAkY2hlY2tib3gtbWFyay1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kKTtcblxuICAvLyBOT1RFKHRyYXZpc2thdWZtYW4pOiBXaGlsZSB0aGUgc3BlYyBjYWxscyBmb3IgdHJhbnNsdWNlbnQgYmxhY2tzL3doaXRlcyBmb3IgZGlzYWJsZWQgY29sb3JzLFxuICAvLyB0aGlzIGRvZXMgbm90IHdvcmsgd2VsbCB3aXRoIGVsZW1lbnRzIGxheWVyZWQgb24gdG9wIG9mIG9uZSBhbm90aGVyLiBUbyBnZXQgYXJvdW5kIHRoaXMgd2VcbiAgLy8gYmxlbmQgdGhlIGNvbG9ycyB0b2dldGhlciBiYXNlZCBvbiB0aGUgYmFzZSBjb2xvciBhbmQgdGhlIHRoZW1lIGJhY2tncm91bmQuXG4gICR3aGl0ZS0zMHBjdC1vcGFjaXR5LW9uLWRhcms6ICM2ODY4Njg7XG4gICRibGFjay0yNnBjdC1vcGFjaXR5LW9uLWxpZ2h0OiAjYjBiMGIwO1xuICAkZGlzYWJsZWQtY29sb3I6IGlmKCRpcy1kYXJrLXRoZW1lLCAkd2hpdGUtMzBwY3Qtb3BhY2l0eS1vbi1kYXJrLCAkYmxhY2stMjZwY3Qtb3BhY2l0eS1vbi1saWdodCk7XG5cbiAgLm1hdC1jaGVja2JveC1mcmFtZSB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrIHtcbiAgICBmaWxsOiAkY2hlY2tib3gtbWFyay1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGgge1xuICAgIC8vICFpbXBvcnRhbnQgaXMgbmVlZGVkIGhlcmUgYmVjYXVzZSBhIHN0cm9rZSBtdXN0IGJlIHNldCBhcyBhblxuICAgIC8vIGF0dHJpYnV0ZSBvbiB0aGUgU1ZHIGluIG9yZGVyIGZvciBsaW5lIGFuaW1hdGlvbiB0byB3b3JrIHByb3Blcmx5LlxuICAgIHN0cm9rZTogJGNoZWNrYm94LW1hcmstY29sb3IgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5tYXQtY2hlY2tib3gtbWl4ZWRtYXJrIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY2hlY2tib3gtbWFyay1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSwgLm1hdC1jaGVja2JveC1jaGVja2VkIHtcbiAgICAmLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnkpO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkd2Fybik7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1jaGVja2JveC1kaXNhYmxlZCB7XG4gICAgJi5tYXQtY2hlY2tib3gtY2hlY2tlZCxcbiAgICAmLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIHtcbiAgICAgIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlZC1jb2xvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOm5vdCgubWF0LWNoZWNrYm94LWNoZWNrZWQpIHtcbiAgICAgIC5tYXQtY2hlY2tib3gtZnJhbWUge1xuICAgICAgICBib3JkZXItY29sb3I6ICRkaXNhYmxlZC1jb2xvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgICB9XG4gIH1cblxuICAvLyBTd2l0Y2ggdGhpcyB0byBhIHNvbGlkIGNvbG9yIHNpbmNlIHdlJ3JlIHVzaW5nIGBvcGFjaXR5YFxuICAvLyB0byBjb250cm9sIGhvdyBvcGFxdWUgdGhlIHJpcHBsZSBzaG91bGQgYmUuXG4gIC5tYXQtY2hlY2tib3ggLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWFwX2dldChtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCksIGJhc2UpO1xuICB9XG5cbiAgLm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKSxcbiAgLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpIHtcbiAgICAmLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRwcmltYXJ5KTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGFjY2VudCk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkd2Fybik7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtY2hlY2tib3gtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtY2hlY2tib3gge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAvLyBUT0RPKGthcmEpOiBSZW1vdmUgdGhpcyBzdHlsZSB3aGVuIGZpeGluZyB2ZXJ0aWNhbCBiYXNlbGluZVxuICAubWF0LWNoZWNrYm94LWxheW91dCAubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgICBsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGJvZHktMik7XG4gIH1cbn1cblxuXG5cblxuXG5cbiRtYXQtY2hpcC1yZW1vdmUtZm9udC1zaXplOiAxOHB4O1xuXG5AbWl4aW4gbWF0LWNoaXBzLWNvbG9yKCRmb3JlZ3JvdW5kLCAkYmFja2dyb3VuZCkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZDtcbiAgY29sb3I6ICRmb3JlZ3JvdW5kO1xuXG4gIC5tYXQtY2hpcC1yZW1vdmUge1xuICAgIGNvbG9yOiAkZm9yZWdyb3VuZDtcbiAgICBvcGFjaXR5OiAwLjQ7XG4gIH1cbn1cblxuXG4vLyBBcHBsaWVzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGZvciBhIHJpcHBsZSBlbGVtZW50LlxuLy8gSWYgdGhlIGNvbG9yIHZhbHVlIHByb3ZpZGVkIGlzIG5vdCBhIFNhc3MgY29sb3IsXG4vLyB3ZSBhc3N1bWUgdGhhdCB3ZSd2ZSBiZWVuIGdpdmVuIGEgQ1NTIHZhcmlhYmxlLlxuLy8gU2luY2Ugd2UgY2FuJ3QgcGVyZm9ybSBhbHBoYS1ibGVuZGluZyBvbiBhIENTUyB2YXJpYWJsZSxcbi8vIHdlIGluc3RlYWQgYWRkIHRoZSBvcGFjaXR5IGRpcmVjdGx5IHRvIHRoZSByaXBwbGUgZWxlbWVudC5cbkBtaXhpbiBfbWF0LWNoaXBzLXJpcHBsZS1iYWNrZ3JvdW5kKCRwYWxldHRlLCAkZGVmYXVsdC1jb250cmFzdCwgJG9wYWNpdHkpIHtcbiAgJGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgJGRlZmF1bHQtY29udHJhc3QsICRvcGFjaXR5KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY29sb3I7XG4gIEBpZiAodHlwZS1vZigkYmFja2dyb3VuZC1jb2xvcikgIT0gY29sb3IpIHtcbiAgICBvcGFjaXR5OiAkb3BhY2l0eTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWNoaXBzLXRoZW1lLWNvbG9yKCRwYWxldHRlKSB7XG4gIEBpbmNsdWRlIG1hdC1jaGlwcy1jb2xvcihtYXQtY29sb3IoJHBhbGV0dGUsIGRlZmF1bHQtY29udHJhc3QpLCBtYXQtY29sb3IoJHBhbGV0dGUpKTtcblxuICAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgIEBpbmNsdWRlIF9tYXQtY2hpcHMtcmlwcGxlLWJhY2tncm91bmQoJHBhbGV0dGUsIGRlZmF1bHQtY29udHJhc3QsIDAuMSk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1jaGlwcy10aGVtZSgkdGhlbWUpIHtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgJHVuc2VsZWN0ZWQtYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCB1bnNlbGVjdGVkLWNoaXApO1xuICAkdW5zZWxlY3RlZC1mb3JlZ3JvdW5kOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcCB7XG4gICAgQGluY2x1ZGUgbWF0LWNoaXBzLWNvbG9yKCR1bnNlbGVjdGVkLWZvcmVncm91bmQsICR1bnNlbGVjdGVkLWJhY2tncm91bmQpO1xuXG4gICAgJjpub3QoLm1hdC1jaGlwLWRpc2FibGVkKSB7XG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDMsICR0aGVtZSk7XG4gICAgICB9XG5cbiAgICAgIC5tYXQtY2hpcC1yZW1vdmU6aG92ZXIge1xuICAgICAgICBvcGFjaXR5OiAwLjU0O1xuICAgICAgfVxuICAgIH1cblxuICAgICYubWF0LWNoaXAtZGlzYWJsZWQge1xuICAgICAgb3BhY2l0eTogMC40O1xuICAgIH1cblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hcF9nZXQoJGZvcmVncm91bmQsIGJhc2UpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZCB7XG4gICAgJi5tYXQtcHJpbWFyeSB7XG4gICAgICBAaW5jbHVkZSBtYXQtY2hpcHMtdGhlbWUtY29sb3IoJHByaW1hcnkpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgQGluY2x1ZGUgbWF0LWNoaXBzLXRoZW1lLWNvbG9yKCR3YXJuKTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgQGluY2x1ZGUgbWF0LWNoaXBzLXRoZW1lLWNvbG9yKCRhY2NlbnQpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWNoaXBzLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWNoaXAge1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTIpO1xuICAgIGZvbnQtd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0yKTtcblxuICAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uLFxuICAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb24ge1xuICAgICAgZm9udC1zaXplOiAkbWF0LWNoaXAtcmVtb3ZlLWZvbnQtc2l6ZTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LXRhYmxlLXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtdGFibGUge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2NhcmQnKTtcbiAgfVxuXG4gIC5tYXQtdGFibGUgdGhlYWQsIC5tYXQtdGFibGUgdGJvZHksIC5tYXQtdGFibGUgdGZvb3QsXG4gIG1hdC1oZWFkZXItcm93LCBtYXQtcm93LCBtYXQtZm9vdGVyLXJvdyxcbiAgW21hdC1oZWFkZXItcm93XSwgW21hdC1yb3ddLCBbbWF0LWZvb3Rlci1yb3ddLFxuICAubWF0LXRhYmxlLXN0aWNreSB7XG4gICAgYmFja2dyb3VuZDogaW5oZXJpdDtcbiAgfVxuXG4gIG1hdC1yb3csIG1hdC1oZWFkZXItcm93LCBtYXQtZm9vdGVyLXJvdyxcbiAgdGgubWF0LWhlYWRlci1jZWxsLCB0ZC5tYXQtY2VsbCwgdGQubWF0LWZvb3Rlci1jZWxsIHtcbiAgICBib3JkZXItYm90dG9tLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG5cbiAgLm1hdC1oZWFkZXItY2VsbCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1jZWxsLCAubWF0LWZvb3Rlci1jZWxsIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXRhYmxlLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXRhYmxlIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC1oZWFkZXItY2VsbCB7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pO1xuICAgIGZvbnQtd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0yKTtcbiAgfVxuXG4gIC5tYXQtY2VsbCwgLm1hdC1mb290ZXItY2VsbCB7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSk7XG4gIH1cbn1cblxuXG5cblxuXG5cblxuJG1hdC1kYXRlcGlja2VyLXNlbGVjdGVkLXRvZGF5LWJveC1zaGFkb3ctd2lkdGg6IDFweDtcbiRtYXQtZGF0ZXBpY2tlci1zZWxlY3RlZC1mYWRlLWFtb3VudDogMC42O1xuJG1hdC1kYXRlcGlja2VyLXRvZGF5LWZhZGUtYW1vdW50OiAwLjI7XG4kbWF0LWNhbGVuZGFyLWJvZHktZm9udC1zaXplOiAxM3B4ICFkZWZhdWx0O1xuJG1hdC1jYWxlbmRhci13ZWVrZGF5LXRhYmxlLWZvbnQtc2l6ZTogMTFweCAhZGVmYXVsdDtcblxuQG1peGluIF9tYXQtZGF0ZXBpY2tlci1jb2xvcigkcGFsZXR0ZSkge1xuICAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgZGVmYXVsdC1jb250cmFzdCk7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQgPiAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQge1xuICAgICRiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJHBhbGV0dGUpO1xuXG4gICAgQGlmICh0eXBlLW9mKCRiYWNrZ3JvdW5kKSA9PSBjb2xvcikge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogZmFkZS1vdXQoJGJhY2tncm91bmQsICRtYXQtZGF0ZXBpY2tlci1zZWxlY3RlZC1mYWRlLWFtb3VudCk7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIC8vIElmIHdlIGNvdWxkbid0IHJlc29sdmUgdG8gYmFja2dyb3VuZCB0byBhIGNvbG9yIChlLmcuIGl0J3MgYSBDU1MgdmFyaWFibGUpLFxuICAgICAgLy8gZmFsbCBiYWNrIHRvIGZhZGluZyB0aGUgY29udGVudCBvdXQgdmlhIGBvcGFjaXR5YC5cbiAgICAgIG9wYWNpdHk6ICRtYXQtZGF0ZXBpY2tlci10b2RheS1mYWRlLWFtb3VudDtcbiAgICB9XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQge1xuICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwICRtYXQtZGF0ZXBpY2tlci1zZWxlY3RlZC10b2RheS1ib3gtc2hhZG93LXdpZHRoXG4gICAgICAgICAgICAgICAgbWF0LWNvbG9yKCRwYWxldHRlLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWRhdGVwaWNrZXItdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG5cbiAgLm1hdC1jYWxlbmRhci1hcnJvdyB7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBpY29uKTtcbiAgfVxuXG4gIC8vIFRoZSBwcmV2L25leHQgYnV0dG9ucyBuZWVkIGEgYml0IG1vcmUgc3BlY2lmaWNpdHkgdG9cbiAgLy8gYXZvaWQgYmVpbmcgb3ZlcndyaXR0ZW4gYnkgdGhlIC5tYXQtaWNvbi1idXR0b24uXG4gIC5tYXQtZGF0ZXBpY2tlci10b2dnbGUsXG4gIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItbmV4dC1idXR0b24sXG4gIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItcHJldmlvdXMtYnV0dG9uIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBpY29uKTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBoaW50LXRleHQpO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXItZGl2aWRlcjo6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktbGFiZWwge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQgPiAubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyLFxuICAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZSxcbiAgLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZSB7XG4gICAgJiA+IC5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3Zlcik7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpIHtcbiAgICAvLyBOb3RlOiB0aG91Z2ggaXQncyBub3QgdGV4dCwgdGhlIGJvcmRlciBpcyBhIGhpbnQgYWJvdXQgdGhlIGZhY3QgdGhhdCB0aGlzIGlzIHRvZGF5J3MgZGF0ZSxcbiAgICAvLyBzbyB3ZSB1c2UgdGhlIGhpbnQgY29sb3IuXG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGhpbnQtdGV4dCk7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQgPiAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCkge1xuICAgICRjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBoaW50LXRleHQpO1xuXG4gICAgQGlmICh0eXBlLW9mKCRjb2xvcikgPT0gY29sb3IpIHtcbiAgICAgIGJvcmRlci1jb2xvcjogZmFkZS1vdXQoJGNvbG9yLCAkbWF0LWRhdGVwaWNrZXItdG9kYXktZmFkZS1hbW91bnQpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICAvLyBJZiB0aGUgY29sb3IgZGlkbid0IHJlc29sdmUgdG8gYSBjb2xvciB2YWx1ZSwgYnV0IHNvbWV0aGluZyBsaWtlIGEgQ1NTIHZhcmlhYmxlLCB3ZSBjYW4ndFxuICAgICAgLy8gZmFkZSBpdCBvdXQgc28gd2UgZmFsbCBiYWNrIHRvIHJlZHVjaW5nIHRoZSBlbGVtZW50IG9wYWNpdHkuIE5vdGUgdGhhdCB3ZSBkb24ndCB1c2UgdGhlXG4gICAgICAvLyAkbWF0LWRhdGVwaWNrZXItdG9kYXktZmFkZS1hbW91bnQsIGJlY2F1c2UgaGludCB0ZXh0IHVzdWFsbHkgaGFzIHNvbWUgb3BhY2l0eSBhcHBsaWVkXG4gICAgICAvLyB0byBpdCBhbHJlYWR5IGFuZCB3ZSBkb24ndCB3YW50IHRoZW0gdG8gc3RhY2sgb24gdG9wIG9mIGVhY2ggb3RoZXIuXG4gICAgICBvcGFjaXR5OiAwLjU7XG4gICAgfVxuICB9XG5cbiAgQGluY2x1ZGUgX21hdC1kYXRlcGlja2VyLWNvbG9yKG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KSk7XG5cbiAgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDQsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICBAaW5jbHVkZSBfbWF0LWRhdGVwaWNrZXItY29sb3IobWFwLWdldCgkdGhlbWUsIGFjY2VudCkpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgQGluY2x1ZGUgX21hdC1kYXRlcGlja2VyLWNvbG9yKG1hcC1nZXQoJHRoZW1lLCB3YXJuKSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQtdG91Y2gge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDAsICR0aGVtZSk7XG4gIH1cblxuICAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSksIHRleHQpO1xuXG4gICAgJi5tYXQtYWNjZW50IHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IobWFwLWdldCgkdGhlbWUsIGFjY2VudCksIHRleHQpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgd2FybiksIHRleHQpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWRhdGVwaWNrZXItdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtY2FsZW5kYXIge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHkge1xuICAgIGZvbnQtc2l6ZTogJG1hdC1jYWxlbmRhci1ib2R5LWZvbnQtc2l6ZTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS1sYWJlbCxcbiAgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uIHtcbiAgICBmb250OiB7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJ1dHRvbik7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBidXR0b24pO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyIHRoIHtcbiAgICBmb250OiB7XG4gICAgICBzaXplOiAkbWF0LWNhbGVuZGFyLXdlZWtkYXktdGFibGUtZm9udC1zaXplO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0xKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cblxuQG1peGluIG1hdC1kaWFsb2ctdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigyNCwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGRpYWxvZyk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1kaWFsb2ctdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtZGlhbG9nLXRpdGxlIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgdGl0bGUpO1xuICB9XG59XG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LWV4cGFuc2lvbi1wYW5lbC10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWV4cGFuc2lvbi1wYW5lbCB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMiwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG5cbiAgLm1hdC1hY3Rpb24tcm93IHtcbiAgICBib3JkZXItdG9wLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG5cbiAgLm1hdC1leHBhbnNpb24tcGFuZWwge1xuICAgICYgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkLFxuICAgICYgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQsXG4gICAgJjpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVyIHtcbiAgICAgICY6bm90KFthcmlhLWRpc2FibGVkPSd0cnVlJ10pIHtcbiAgICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3Zlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRGlzYWJsZSB0aGUgaG92ZXIgb24gdG91Y2ggZGV2aWNlcyBzaW5jZSBpdCBjYW4gYXBwZWFyIGxpa2UgaXQgaXMgc3R1Y2suIFdlIGNhbid0IHVzZVxuICAvLyBgQG1lZGlhIChob3ZlcilgIGFib3ZlLCBiZWNhdXNlIHRoZSBkZXNrdG9wIHN1cHBvcnQgYnJvd3NlciBzdXBwb3J0IGlzbid0IGdyZWF0LlxuICBAbWVkaWEgKGhvdmVyOiBub25lKSB7XG4gICAgLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpOm5vdChbYXJpYS1kaXNhYmxlZD0ndHJ1ZSddKVxuICAgICAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbixcbiAgLm1hdC1leHBhbnNpb24taW5kaWNhdG9yOjphZnRlciB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9J3RydWUnXSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtYnV0dG9uKTtcblxuICAgIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZSxcbiAgICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ge1xuICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtZXhwYW5zaW9uLXBhbmVsLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIHN1YmhlYWRpbmctMSk7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIHN1YmhlYWRpbmctMSk7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBzdWJoZWFkaW5nLTEpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBib2R5LTEpO1xuICB9XG59XG5cblxuXG5cbi8vIFRoaXMgbWl4aW4gd2lsbCBlbnN1cmUgdGhhdCBsaW5lcyB0aGF0IG92ZXJmbG93IHRoZSBjb250YWluZXIgd2lsbCBoaWRlIHRoZSBvdmVyZmxvdyBhbmRcbi8vIHRydW5jYXRlIG5lYXRseSB3aXRoIGFuIGVsbGlwc2lzLlxuQG1peGluIG1hdC10cnVuY2F0ZS1saW5lKCkge1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuLy8gTWl4aW4gdG8gcHJvdmlkZSBhbGwgbWF0LWxpbmUgc3R5bGVzLCBjaGFuZ2luZyBzZWNvbmRhcnkgZm9udCBzaXplIGJhc2VkIG9uIHdoZXRoZXIgdGhlIGxpc3Rcbi8vIGlzIGluIGRlbnNlIG1vZGUuXG5AbWl4aW4gbWF0LWxpbmUtYmFzZSgkc2Vjb25kYXJ5LWZvbnQtc2l6ZSkge1xuICAubWF0LWxpbmUge1xuICAgIEBpbmNsdWRlIG1hdC10cnVuY2F0ZS1saW5lKCk7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcblxuICAgIC8vIGFsbCBsaW5lcyBidXQgdGhlIHRvcCBsaW5lIHNob3VsZCBoYXZlIHNtYWxsZXIgdGV4dFxuICAgICY6bnRoLWNoaWxkKG4rMikge1xuICAgICAgZm9udC1zaXplOiAkc2Vjb25kYXJ5LWZvbnQtc2l6ZTtcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhpcyBtaXhpbiBub3JtYWxpemVzIGRlZmF1bHQgZWxlbWVudCBzdHlsZXMsIGUuZy4gZm9udCB3ZWlnaHQgZm9yIGhlYWRpbmcgdGV4dC5cbkBtaXhpbiBtYXQtbm9ybWFsaXplLXRleHQoKSB7XG4gICYgPiAqIHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgfVxufVxuXG4vLyBUaGlzIG1peGluIHByb3ZpZGVzIGJhc2Ugc3R5bGVzIGZvciB0aGUgd3JhcHBlciBhcm91bmQgbWF0LWxpbmUgZWxlbWVudHMgaW4gYSBsaXN0LlxuQG1peGluIG1hdC1saW5lLXdyYXBwZXItYmFzZSgpIHtcbiAgQGluY2x1ZGUgbWF0LW5vcm1hbGl6ZS10ZXh0KCk7XG5cbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6IDEwMCU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgLy8gTXVzdCByZW1vdmUgd3JhcHBlciB3aGVuIGxpbmVzIGFyZSBlbXB0eSBvciBpdCB0YWtlcyB1cCBob3Jpem9udGFsXG4gIC8vIHNwYWNlIGFuZCBwdXNoZXMgb3RoZXIgZWxlbWVudHMgdG8gdGhlIHJpZ2h0LlxuICAmOmVtcHR5IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cblxuXG4vLyBJbmNsdWRlIHRoaXMgZW1wdHkgbWl4aW4gZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIG90aGVyIGNvbXBvbmVudHMuXG5AbWl4aW4gbWF0LWdyaWQtbGlzdC10aGVtZSgkdGhlbWUpIHsgfVxuXG5AbWl4aW4gbWF0LWdyaWQtbGlzdC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1ncmlkLXRpbGUtaGVhZGVyLFxuICAubWF0LWdyaWQtdGlsZS1mb290ZXIge1xuICAgIEBpbmNsdWRlIG1hdC1saW5lLWJhc2UobWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKSk7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSk7XG4gIH1cbn1cblxuXG5cblxuLy8gSW5jbHVkZSB0aGlzIGVtcHR5IG1peGluIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBvdGhlciBjb21wb25lbnRzLlxuQG1peGluIG1hdC1pY29uLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWljb24ge1xuICAgICYubWF0LXByaW1hcnkge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgdGV4dCk7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgdGV4dCk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1pY29uLXR5cG9ncmFwaHkoJGNvbmZpZykgeyB9XG5cblxuXG5cblxuLy8gUmVuZGVycyBhIGdyYWRpZW50IGZvciBzaG93aW5nIHRoZSBkYXNoZWQgbGluZSB3aGVuIHRoZSBpbnB1dCBpcyBkaXNhYmxlZC5cbi8vIFVubGlrZSB1c2luZyBhIGJvcmRlciwgYSBncmFkaWVudCBhbGxvd3MgdXMgdG8gYWRqdXN0IHRoZSBzcGFjaW5nIG9mIHRoZSBkb3R0ZWQgbGluZVxuLy8gdG8gbWF0Y2ggdGhlIE1hdGVyaWFsIERlc2lnbiBzcGVjLlxuQG1peGluIG1hdC1jb250cm9sLWRpc2FibGVkLXVuZGVybGluZSgkY29sb3IpIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAkY29sb3IgMCUsICRjb2xvciAzMyUsIHRyYW5zcGFyZW50IDAlKTtcbiAgYmFja2dyb3VuZC1zaXplOiA0cHggMTAwJTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14O1xufVxuXG4vLyBGaWd1cmVzIG91dCB0aGUgY29sb3Igb2YgdGhlIHBsYWNlaG9sZGVyIGZvciBhIGZvcm0gY29udHJvbC5cbi8vIFVzZWQgcHJpbWFyaWx5IHRvIHByZXZlbnQgdGhlIHZhcmlvdXMgZm9ybSBjb250cm9scyBmcm9tXG4vLyBiZWNvbWluZyBvdXQgb2Ygc3luYyBzaW5jZSB0aGVzZSBjb2xvcnMgYXJlbid0IGluIGEgcGFsZXR0ZS5cbkBmdW5jdGlvbiBfbWF0LWNvbnRyb2wtcGxhY2Vob2xkZXItY29sb3IoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG4gIEByZXR1cm4gbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCwgaWYoJGlzLWRhcmstdGhlbWUsIDAuNSwgMC40MikpO1xufVxuXG5cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1hdGVyaWFsL25vLXByZWZpeGVzICovXG5AbWl4aW4gdXNlci1zZWxlY3QoJHZhbHVlKSB7XG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6ICR2YWx1ZTtcbiAgLW1vei11c2VyLXNlbGVjdDogJHZhbHVlO1xuICAtbXMtdXNlci1zZWxlY3Q6ICR2YWx1ZTtcbiAgdXNlci1zZWxlY3Q6ICR2YWx1ZTtcbn1cblxuQG1peGluIGlucHV0LXBsYWNlaG9sZGVyIHtcbiAgJjo6cGxhY2Vob2xkZXIge1xuICAgIEBjb250ZW50O1xuICB9XG5cbiAgJjo6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cblxuICAmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBAY29udGVudDtcbiAgfVxuXG4gICY6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG5AbWl4aW4gY3Vyc29yLWdyYWIge1xuICBjdXJzb3I6IC13ZWJraXQtZ3JhYjtcbiAgY3Vyc29yOiBncmFiO1xufVxuXG5AbWl4aW4gY3Vyc29yLWdyYWJiaW5nIHtcbiAgY3Vyc29yOiAtd2Via2l0LWdyYWJiaW5nO1xuICBjdXJzb3I6IGdyYWJiaW5nO1xufVxuXG5AbWl4aW4gYmFja2ZhY2UtdmlzaWJpbGl0eSgkdmFsdWUpIHtcbiAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiAkdmFsdWU7XG4gIGJhY2tmYWNlLXZpc2liaWxpdHk6ICR2YWx1ZTtcbn1cbi8qIHN0eWxlbGludC1lbmFibGUgKi9cblxuXG5cbkBtaXhpbiBtYXQtaW5wdXQtdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXIge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtaW5wdXQtZWxlbWVudDpkaXNhYmxlZCxcbiAgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlciB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gIH1cblxuICAubWF0LWlucHV0LWVsZW1lbnQge1xuICAgIGNhcmV0LWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIHRleHQpO1xuXG4gICAgQGluY2x1ZGUgaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgICAgY29sb3I6IF9tYXQtY29udHJvbC1wbGFjZWhvbGRlci1jb2xvcigkdGhlbWUpO1xuICAgIH1cblxuICAgIC8vIE9uIGRhcmsgdGhlbWVzIHdlIHNldCB0aGUgbmF0aXZlIGBzZWxlY3RgIGNvbG9yIHRvIHNvbWUgc2hhZGUgb2Ygd2hpdGUsXG4gICAgLy8gaG93ZXZlciB0aGUgY29sb3IgcHJvcGFnYXRlcyB0byBhbGwgb2YgdGhlIGBvcHRpb25gIGVsZW1lbnRzLCB3aGljaCBhcmVcbiAgICAvLyBhbHdheXMgb24gYSB3aGl0ZSBiYWNrZ3JvdW5kIGluc2lkZSB0aGUgZHJvcGRvd24sIGNhdXNpbmcgdGhlbSB0byBibGVuZCBpbi5cbiAgICAvLyBTaW5jZSB3ZSBjYW4ndCBjaGFuZ2UgYmFja2dyb3VuZCBvZiB0aGUgZHJvcGRvd24sIHdlIG5lZWQgdG8gZXhwbGljaXRseVxuICAgIC8vIHJlc2V0IHRoZSBjb2xvciBvZiB0aGUgb3B0aW9ucyB0byBzb21ldGhpbmcgZGFyay5cbiAgICBAaWYgKG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKSkge1xuICAgICAgb3B0aW9uIHtcbiAgICAgICAgY29sb3I6ICRkYXJrLXByaW1hcnktdGV4dDtcbiAgICAgIH1cblxuICAgICAgb3B0aW9uOmRpc2FibGVkIHtcbiAgICAgICAgY29sb3I6ICRkYXJrLWRpc2FibGVkLXRleHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm1hdC1hY2NlbnQgLm1hdC1pbnB1dC1lbGVtZW50IHtcbiAgICBjYXJldC1jb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIHRleHQpO1xuICB9XG5cbiAgLm1hdC13YXJuIC5tYXQtaW5wdXQtZWxlbWVudCxcbiAgLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1pbnB1dC1lbGVtZW50IHtcbiAgICBjYXJldC1jb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlciB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1pbnB1dC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLy8gVGhlIHVuaXQtbGVzcyBsaW5lLWhlaWdodCBmcm9tIHRoZSBmb250IGNvbmZpZy5cbiAgJGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgaW5wdXQpO1xuXG4gIC8vIFRoZSBhbW91bnQgb2Ygc3BhY2UgYmV0d2VlbiB0aGUgdG9wIG9mIHRoZSBsaW5lIGFuZCB0aGUgdG9wIG9mIHRoZSBhY3R1YWwgdGV4dFxuICAvLyAoYXMgYSBmcmFjdGlvbiBvZiB0aGUgZm9udC1zaXplKS5cbiAgJGxpbmUtc3BhY2luZzogKCRsaW5lLWhlaWdodCAtIDEpIC8gMjtcblxuICAvLyA8aW5wdXQ+IGVsZW1lbnRzIHNlZW0gdG8gaGF2ZSB0aGVpciBoZWlnaHQgc2V0IHNsaWdodGx5IHRvbyBsYXJnZSBvbiBTYWZhcmkgY2F1c2luZyB0aGUgdGV4dCB0b1xuICAvLyBiZSBtaXNhbGlnbmVkIHcuci50LiB0aGUgcGxhY2Vob2xkZXIuIEFkZGluZyB0aGlzIG1hcmdpbiBjb3JyZWN0cyBpdC5cbiAgaW5wdXQubWF0LWlucHV0LWVsZW1lbnQge1xuICAgIG1hcmdpbi10b3A6IC0kbGluZS1zcGFjaW5nICogMWVtO1xuICB9XG59XG5cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtbGlzdC10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWxpc3QtYmFzZSB7XG4gICAgLm1hdC1saXN0LWl0ZW0ge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgfVxuXG4gICAgLm1hdC1saXN0LW9wdGlvbiB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICB9XG5cbiAgICAubWF0LXN1YmhlYWRlciB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1saXN0LWl0ZW0tZGlzYWJsZWQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZGlzYWJsZWQtbGlzdC1vcHRpb24pO1xuICB9XG5cbiAgLm1hdC1saXN0LW9wdGlvbixcbiAgLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSxcbiAgLm1hdC1hY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSB7XG4gICAgJjpob3ZlciwgJjpmb2N1cyB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdob3ZlcicpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtbGlzdC1zaW5nbGUtc2VsZWN0ZWQtb3B0aW9uIHtcbiAgICAmLCAmOmhvdmVyLCAmOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIsIDAuMTIpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWxpc3QtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gICRmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuXG4gIC5tYXQtbGlzdC1pdGVtIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5O1xuICB9XG5cbiAgLm1hdC1saXN0LW9wdGlvbiB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseTtcbiAgfVxuXG4gIC8vIERlZmF1bHQgbGlzdFxuICAubWF0LWxpc3QtYmFzZSB7XG4gICAgLm1hdC1saXN0LWl0ZW0ge1xuICAgICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIHN1YmhlYWRpbmctMik7XG4gICAgICBAaW5jbHVkZSBtYXQtbGluZS1iYXNlKG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKSk7XG4gICAgfVxuXG4gICAgLm1hdC1saXN0LW9wdGlvbiB7XG4gICAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgc3ViaGVhZGluZy0yKTtcbiAgICAgIEBpbmNsdWRlIG1hdC1saW5lLWJhc2UobWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpKTtcbiAgICB9XG5cbiAgICAubWF0LXN1YmhlYWRlciB7XG4gICAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGJvZHktMik7XG4gICAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0yKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0yKTtcbiAgICB9XG4gIH1cblxuICAvLyBEZW5zZSBsaXN0XG4gIC5tYXQtbGlzdC1iYXNlW2RlbnNlXSB7XG4gICAgLm1hdC1saXN0LWl0ZW0ge1xuICAgICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pO1xuICAgICAgQGluY2x1ZGUgbWF0LWxpbmUtYmFzZShtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pKTtcbiAgICB9XG5cbiAgICAubWF0LWxpc3Qtb3B0aW9uIHtcbiAgICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKTtcbiAgICAgIEBpbmNsdWRlIG1hdC1saW5lLWJhc2UobWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKSk7XG4gICAgfVxuXG4gICAgLm1hdC1zdWJoZWFkZXIge1xuICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseTtcbiAgICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0yKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cblxuQG1peGluIG1hdC1tZW51LXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtbWVudS1wYW5lbCB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oNCwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdjYXJkJyk7XG4gIH1cblxuICAubWF0LW1lbnUtaXRlbSB7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgJ3RleHQnKTtcblxuICAgICZbZGlzYWJsZWRdIHtcbiAgICAgICYsICY6OmFmdGVyIHtcbiAgICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgJ2Rpc2FibGVkJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm1hdC1tZW51LWl0ZW0gLm1hdC1pY29uLW5vLWNvbG9yLFxuICAubWF0LW1lbnUtaXRlbS1zdWJtZW51LXRyaWdnZXI6OmFmdGVyIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCAnaWNvbicpO1xuICB9XG5cbiAgLm1hdC1tZW51LWl0ZW06aG92ZXIsXG4gIC5tYXQtbWVudS1pdGVtLmNkay1wcm9ncmFtLWZvY3VzZWQsXG4gIC5tYXQtbWVudS1pdGVtLmNkay1rZXlib2FyZC1mb2N1c2VkLFxuICAubWF0LW1lbnUtaXRlbS1oaWdobGlnaHRlZCB7XG4gICAgJjpub3QoW2Rpc2FibGVkXSkge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnaG92ZXInKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1tZW51LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LW1lbnUtaXRlbSB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgYm9keS0xKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMSk7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LXBhZ2luYXRvci10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcblxuICAubWF0LXBhZ2luYXRvciB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnY2FyZCcpO1xuICB9XG5cbiAgLm1hdC1wYWdpbmF0b3IsXG4gIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSAubWF0LXNlbGVjdC10cmlnZ2VyIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsXG4gIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudCB7XG4gICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkIG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgJ2ljb24nKTtcbiAgICBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCBtYXQtY29sb3IoJGZvcmVncm91bmQsICdpY29uJyk7XG4gIH1cblxuICAubWF0LXBhZ2luYXRvci1maXJzdCxcbiAgLm1hdC1wYWdpbmF0b3ItbGFzdCB7XG4gICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkIG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgJ2ljb24nKTtcbiAgfVxuXG4gIC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIHtcbiAgICAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsXG4gICAgLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50LFxuICAgIC5tYXQtcGFnaW5hdG9yLWZpcnN0LFxuICAgIC5tYXQtcGFnaW5hdG9yLWxhc3Qge1xuICAgICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsICdkaXNhYmxlZCcpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXBhZ2luYXRvci10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1wYWdpbmF0b3IsXG4gIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSAubWF0LXNlbGVjdC10cmlnZ2VyIHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBjYXB0aW9uKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbik7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuQG1peGluIG1hdC1wcm9ncmVzcy1iYXItdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuXG4gIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmQge1xuICAgIGZpbGw6IG1hdC1jb2xvcigkcHJpbWFyeSwgbGlnaHRlcik7XG4gIH1cblxuICAubWF0LXByb2dyZXNzLWJhci1idWZmZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgbGlnaHRlcik7XG4gIH1cblxuICAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5KTtcbiAgfVxuXG4gIC5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQge1xuICAgIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmQge1xuICAgICAgZmlsbDogbWF0LWNvbG9yKCRhY2NlbnQsIGxpZ2h0ZXIpO1xuICAgIH1cblxuICAgIC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgbGlnaHRlcik7XG4gICAgfVxuXG4gICAgLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIHtcbiAgICAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5kIHtcbiAgICAgIGZpbGw6IG1hdC1jb2xvcigkd2FybiwgbGlnaHRlcik7XG4gICAgfVxuXG4gICAgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkd2FybiwgbGlnaHRlcik7XG4gICAgfVxuXG4gICAgLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCR3YXJuKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1wcm9ncmVzcy1iYXItdHlwb2dyYXBoeSgkY29uZmlnKSB7IH1cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG5cbiAgLm1hdC1wcm9ncmVzcy1zcGlubmVyLCAubWF0LXNwaW5uZXIge1xuICAgIGNpcmNsZSB7XG4gICAgICBzdHJva2U6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IGNpcmNsZSB7XG4gICAgICBzdHJva2U6IG1hdC1jb2xvcigkYWNjZW50KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIGNpcmNsZSB7XG4gICAgICBzdHJva2U6IG1hdC1jb2xvcigkd2Fybik7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci10eXBvZ3JhcGh5KCRjb25maWcpIHsgfVxuXG5cblxuXG5cbkBtaXhpbiBfbWF0LXJhZGlvLWNvbG9yKCRwYWxldHRlKSB7XG4gICYubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGUge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlKTtcbiAgfVxuXG4gIC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLFxuICAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSxcbiAgJi5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLFxuICAmOmFjdGl2ZSAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtcmFkaW8tdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xlIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1yYWRpby1idXR0b24ge1xuICAgICYubWF0LXByaW1hcnkge1xuICAgICAgQGluY2x1ZGUgX21hdC1yYWRpby1jb2xvcigkcHJpbWFyeSk7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtcmFkaW8tY29sb3IoJGFjY2VudCk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXJhZGlvLWNvbG9yKCR3YXJuKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIG5lZWRzIGV4dHJhIHNwZWNpZmljaXR5LCBiZWNhdXNlIHRoZSBjbGFzc2VzIGFib3ZlIGFyZSBjb21iaW5lZFxuICAgIC8vIChlLmcuIGAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50YCkgd2hpY2ggaW5jcmVhc2VzIHRoZWlyIHNwZWNpZmljaXR5IGEgbG90LlxuICAgIC8vIFRPRE86IGNvbnNpZGVyIG1ha2luZyB0aGUgc2VsZWN0b3JzIGludG8gZGVzY2VuZGFudHMgKGAubWF0LXByaW1hcnkgLm1hdC1yYWRpby1idXR0b25gKS5cbiAgICAmLm1hdC1yYWRpby1kaXNhYmxlZCB7XG4gICAgICAmLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xlLFxuICAgICAgLm1hdC1yYWRpby1vdXRlci1jaXJjbGUge1xuICAgICAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQpO1xuICAgICAgfVxuXG4gICAgICAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50LFxuICAgICAgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkKTtcbiAgICAgIH1cblxuICAgICAgLm1hdC1yYWRpby1sYWJlbC1jb250ZW50IHtcbiAgICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFN3aXRjaCB0aGlzIHRvIGEgc29saWQgY29sb3Igc2luY2Ugd2UncmUgdXNpbmcgYG9wYWNpdHlgXG4gICAgLy8gdG8gY29udHJvbCBob3cgb3BhcXVlIHRoZSByaXBwbGUgc2hvdWxkIGJlLlxuICAgIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwX2dldCgkZm9yZWdyb3VuZCwgYmFzZSk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtcmFkaW8tdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtcmFkaW8tYnV0dG9uIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG59XG5cblxuXG5cblxuXG5cblxuQG1peGluIG1hdC1zZWxlY3QtdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuXG4gIC5tYXQtc2VsZWN0LXZhbHVlIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogX21hdC1jb250cm9sLXBsYWNlaG9sZGVyLWNvbG9yKCR0aGVtZSk7XG4gIH1cblxuICAubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC12YWx1ZSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gIH1cblxuICAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1zZWxlY3QtcGFuZWwge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oNCwgJHRoZW1lKTtcblxuICAgIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIsIDAuMTIpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZCB7XG4gICAgJi5tYXQtZm9jdXNlZCB7XG4gICAgICAmLm1hdC1wcmltYXJ5IC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICAgICAgY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgdGV4dCk7XG4gICAgICB9XG5cbiAgICAgICYubWF0LWFjY2VudCAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgdGV4dCk7XG4gICAgICB9XG5cbiAgICAgICYubWF0LXdhcm4gLm1hdC1zZWxlY3QtYXJyb3cge1xuICAgICAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWludmFsaWQgLm1hdC1zZWxlY3QtYXJyb3cge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gICAgfVxuXG4gICAgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1zZWxlY3QtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC8vIFRoZSB1bml0LWxlc3MgbGluZS1oZWlnaHQgZnJvbSB0aGUgZm9udCBjb25maWcuXG4gICRsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGlucHV0KTtcblxuICAubWF0LXNlbGVjdCB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtc2VsZWN0LXRyaWdnZXIge1xuICAgIGhlaWdodDogJGxpbmUtaGVpZ2h0ICogMWVtO1xuICB9XG59XG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LXNpZGVuYXYtdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gICRkcmF3ZXItYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBkaWFsb2cpO1xuICAkZHJhd2VyLWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yOiAgbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kKTtcbiAgJGRyYXdlci1wdXNoLWJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZGlhbG9nKTtcbiAgJGRyYXdlci1zaWRlLWJvcmRlcjogc29saWQgMXB4IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG5cbiAgLm1hdC1kcmF3ZXItY29udGFpbmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZHJhd2VyLWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG5cbiAgLm1hdC1kcmF3ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRkcmF3ZXItYmFja2dyb3VuZC1jb2xvcjtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAgICYubWF0LWRyYXdlci1wdXNoIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRkcmF3ZXItcHVzaC1iYWNrZ3JvdW5kLWNvbG9yO1xuICAgIH1cblxuICAgICY6bm90KC5tYXQtZHJhd2VyLXNpZGUpIHtcbiAgICAgIC8vIFRoZSBlbGV2YXRpb24gb2Ygei0xNiBpcyBub3RlZCBpbiB0aGUgZGVzaWduIHNwZWNpZmljYXRpb25zLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vbWF0ZXJpYWwuaW8vZGVzaWduL2NvbXBvbmVudHMvbmF2aWdhdGlvbi1kcmF3ZXIuaHRtbFxuICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oMTYsICR0aGVtZSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1kcmF3ZXItc2lkZSB7XG4gICAgYm9yZGVyLXJpZ2h0OiAkZHJhd2VyLXNpZGUtYm9yZGVyO1xuXG4gICAgJi5tYXQtZHJhd2VyLWVuZCB7XG4gICAgICBib3JkZXItbGVmdDogJGRyYXdlci1zaWRlLWJvcmRlcjtcbiAgICAgIGJvcmRlci1yaWdodDogbm9uZTtcbiAgICB9XG4gIH1cblxuICBbZGlyPSdydGwnXSAubWF0LWRyYXdlci1zaWRlIHtcbiAgICBib3JkZXItbGVmdDogJGRyYXdlci1zaWRlLWJvcmRlcjtcbiAgICBib3JkZXItcmlnaHQ6IG5vbmU7XG5cbiAgICAmLm1hdC1kcmF3ZXItZW5kIHtcbiAgICAgIGJvcmRlci1sZWZ0OiBub25lO1xuICAgICAgYm9yZGVyLXJpZ2h0OiAkZHJhd2VyLXNpZGUtYm9yZGVyO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZHJhd2VyLWJhY2tkcm9wLm1hdC1kcmF3ZXItc2hvd24ge1xuICAgICRvcGFjaXR5OiAwLjY7XG4gICAgJGJhY2tkcm9wLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQsICRvcGFjaXR5KTtcblxuICAgIEBpZiAodHlwZS1vZigkYmFja2Ryb3AtY29sb3IpID09IGNvbG9yKSB7XG4gICAgICAvLyBXZSB1c2UgaW52ZXJ0KCkgaGVyZSB0byBoYXZlIHRoZSBkYXJrZW4gdGhlIGJhY2tncm91bmQgY29sb3IgZXhwZWN0ZWQgdG8gYmUgdXNlZC4gSWYgdGhlXG4gICAgICAvLyBiYWNrZ3JvdW5kIGlzIGxpZ2h0LCB3ZSB1c2UgYSBkYXJrIGJhY2tkcm9wLiBJZiB0aGUgYmFja2dyb3VuZCBpcyBkYXJrLFxuICAgICAgLy8gd2UgdXNlIGEgbGlnaHQgYmFja2Ryb3AuXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbnZlcnQoJGJhY2tkcm9wLWNvbG9yKTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgLy8gSWYgd2UgY291bGRuJ3QgcmVzb2x2ZSB0aGUgYmFja2Ryb3AgY29sb3IgdG8gYSBjb2xvciB2YWx1ZSwgZmFsbCBiYWNrIHRvIHVzaW5nXG4gICAgICAvLyBgb3BhY2l0eWAgdG8gbWFrZSBpdCBvcGFxdWUgc2luY2UgaXRzIGVuZCB2YWx1ZSBjb3VsZCBiZSBhIHNvbGlkIGNvbG9yLlxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tkcm9wLWNvbG9yO1xuICAgICAgb3BhY2l0eTogJG9wYWNpdHk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtc2lkZW5hdi10eXBvZ3JhcGh5KCRjb25maWcpIHsgfVxuXG5cblxuXG5cblxuQG1peGluIF9tYXQtc2xpZGUtdG9nZ2xlLWNoZWNrZWQoJHBhbGV0dGUsICR0aHVtYi1jaGVja2VkLWh1ZSkge1xuICAmLm1hdC1jaGVja2VkIHtcbiAgICAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYiB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsICR0aHVtYi1jaGVja2VkLWh1ZSk7XG4gICAgfVxuXG4gICAgLm1hdC1zbGlkZS10b2dnbGUtYmFyIHtcbiAgICAgIC8vIE9wYWNpdHkgaXMgZGV0ZXJtaW5lZCBmcm9tIHRoZSBzcGVjcyBmb3IgdGhlIHNlbGVjdGlvbiBjb250cm9scy5cbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9tYXRlcmlhbC5pby9kZXNpZ24vY29tcG9uZW50cy9zZWxlY3Rpb24tY29udHJvbHMuaHRtbCNzcGVjc1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCAkdGh1bWItY2hlY2tlZC1odWUsIDAuNTQpO1xuICAgIH1cblxuICAgIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgICAgLy8gU2V0IG5vIG9wYWNpdHkgZm9yIHRoZSByaXBwbGVzIGJlY2F1c2UgdGhlIHJpcHBsZSBvcGFjaXR5IHdpbGwgYmUgYWRqdXN0ZWQgZHluYW1pY2FsbHlcbiAgICAgIC8vIGJhc2VkIG9uIHRoZSB0eXBlIG9mIGludGVyYWN0aW9uIHdpdGggdGhlIHNsaWRlLXRvZ2dsZSAoZS5nLiBmb3IgaG92ZXIsIGZvY3VzKVxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCAkdGh1bWItY2hlY2tlZC1odWUpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNsaWRlLXRvZ2dsZS10aGVtZSgkdGhlbWUpIHtcbiAgJGlzLWRhcms6IG1hcF9nZXQoJHRoZW1lLCBpcy1kYXJrKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLy8gQ29sb3IgaHVlcyBhcmUgYmFzZWQgb24gdGhlIHNwZWNzIHdoaWNoIGJyaWVmbHkgc2hvdyB0aGUgaHVlcyB0aGF0IGFyZSBhcHBsaWVkIHRvIGEgc3dpdGNoLlxuICAvLyBUaGUgMjAxOCBzcGVjcyBubyBsb25nZXIgZGVzY3JpYmUgaG93IGRhcmsgc3dpdGNoZXMgc2hvdWxkIGxvb2sgbGlrZS4gRHVlIHRvIHRoZSBsYWNrIG9mXG4gIC8vIGluZm9ybWF0aW9uIGZvciBkYXJrIHRoZW1lZCBzd2l0Y2hlcywgd2UgcGFydGlhbGx5IGtlZXAgdGhlIG9sZCBiZWhhdmlvciB0aGF0IGlzIGJhc2VkIG9uXG4gIC8vIHRoZSBwcmV2aW91cyBzcGVjaWZpY2F0aW9ucy4gRm9yIHRoZSBjaGVja2VkIGNvbG9yIHdlIGFsd2F5cyB1c2UgdGhlIGBkZWZhdWx0YCBodWUgYmVjYXVzZVxuICAvLyB0aGF0IGZvbGxvd3MgTURDIGFuZCBhbHNvIG1ha2VzIGl0IGVhc2llciBmb3IgcGVvcGxlIHRvIGNyZWF0ZSBhIGN1c3RvbSB0aGVtZSB3aXRob3V0IG5lZWRpbmdcbiAgLy8gdG8gc3BlY2lmeSBlYWNoIGh1ZSBpbmRpdmlkdWFsbHkuXG4gICR0aHVtYi11bmNoZWNrZWQtaHVlOiBpZigkaXMtZGFyaywgNDAwLCA1MCk7XG4gICR0aHVtYi1jaGVja2VkLWh1ZTogZGVmYXVsdDtcblxuICAkYmFyLXVuY2hlY2tlZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZCk7XG4gICRyaXBwbGUtdW5jaGVja2VkLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGJhc2UpO1xuXG4gIC5tYXQtc2xpZGUtdG9nZ2xlIHtcbiAgICBAaW5jbHVkZSBfbWF0LXNsaWRlLXRvZ2dsZS1jaGVja2VkKCRhY2NlbnQsICR0aHVtYi1jaGVja2VkLWh1ZSk7XG5cbiAgICAmLm1hdC1wcmltYXJ5IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtc2xpZGUtdG9nZ2xlLWNoZWNrZWQoJHByaW1hcnksICR0aHVtYi1jaGVja2VkLWh1ZSk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXNsaWRlLXRvZ2dsZS1jaGVja2VkKCR3YXJuLCAkdGh1bWItY2hlY2tlZC1odWUpO1xuICAgIH1cblxuICAgICY6bm90KC5tYXQtY2hlY2tlZCkgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgICAvLyBTZXQgbm8gb3BhY2l0eSBmb3IgdGhlIHJpcHBsZXMgYmVjYXVzZSB0aGUgcmlwcGxlIG9wYWNpdHkgd2lsbCBiZSBhZGp1c3RlZCBkeW5hbWljYWxseVxuICAgICAgLy8gYmFzZWQgb24gdGhlIHR5cGUgb2YgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc2xpZGUtdG9nZ2xlIChlLmcuIGZvciBob3ZlciwgZm9jdXMpXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmlwcGxlLXVuY2hlY2tlZC1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYiB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oMSwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJG1hdC1ncmV5LCAkdGh1bWItdW5jaGVja2VkLWh1ZSk7XG4gIH1cblxuICAubWF0LXNsaWRlLXRvZ2dsZS1iYXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRiYXItdW5jaGVja2VkLWNvbG9yO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtc2xpZGUtdG9nZ2xlLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50IHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG59XG5cblxuXG5cblxuQG1peGluIF9tYXQtc2xpZGVyLWlubmVyLWNvbnRlbnQtdGhlbWUoJHBhbGV0dGUpIHtcbiAgLm1hdC1zbGlkZXItdHJhY2stZmlsbCxcbiAgLm1hdC1zbGlkZXItdGh1bWIsXG4gIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUpO1xuICB9XG5cbiAgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgZGVmYXVsdC1jb250cmFzdCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1zbGlkZXItdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gICRtYXQtc2xpZGVyLW9mZi1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzbGlkZXItb2ZmKTtcbiAgJG1hdC1zbGlkZXItb2ZmLWZvY3VzZWQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2xpZGVyLW9mZi1hY3RpdmUpO1xuICAkbWF0LXNsaWRlci1kaXNhYmxlZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzbGlkZXItb2ZmKTtcbiAgJG1hdC1zbGlkZXItbGFiZWxlZC1taW4tdmFsdWUtdGh1bWItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2xpZGVyLW1pbik7XG4gICRtYXQtc2xpZGVyLWxhYmVsZWQtbWluLXZhbHVlLXRodW1iLWxhYmVsLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNsaWRlci1vZmYpO1xuICAkbWF0LXNsaWRlci10aWNrLW9wYWNpdHk6IDAuNztcbiAgJG1hdC1zbGlkZXItdGljay1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBiYXNlLCAkbWF0LXNsaWRlci10aWNrLW9wYWNpdHkpO1xuICAkbWF0LXNsaWRlci10aWNrLXNpemU6IDJweDtcblxuICAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbWF0LXNsaWRlci1vZmYtY29sb3I7XG4gIH1cblxuICAubWF0LXByaW1hcnkge1xuICAgIEBpbmNsdWRlIF9tYXQtc2xpZGVyLWlubmVyLWNvbnRlbnQtdGhlbWUoJHByaW1hcnkpO1xuICB9XG5cbiAgLm1hdC1hY2NlbnQge1xuICAgIEBpbmNsdWRlIF9tYXQtc2xpZGVyLWlubmVyLWNvbnRlbnQtdGhlbWUoJGFjY2VudCk7XG4gIH1cblxuICAubWF0LXdhcm4ge1xuICAgIEBpbmNsdWRlIF9tYXQtc2xpZGVyLWlubmVyLWNvbnRlbnQtdGhlbWUoJHdhcm4pO1xuICB9XG5cbiAgLm1hdC1zbGlkZXItZm9jdXMtcmluZyB7XG4gICAgJG9wYWNpdHk6IDAuMjtcbiAgICAkY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCBkZWZhdWx0LCAkb3BhY2l0eSk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yO1xuXG4gICAgLy8gYG1hdC1jb2xvcmAgdXNlcyBgcmdiYWAgZm9yIHRoZSBvcGFjaXR5IHdoaWNoIHdvbid0IHdvcmsgd2l0aFxuICAgIC8vIENTUyB2YXJpYWJsZXMgc28gd2UgbmVlZCB0byB1c2UgYG9wYWNpdHlgIGFzIGEgZmFsbGJhY2suXG4gICAgQGlmICh0eXBlLW9mKCRjb2xvcikgIT0gY29sb3IpIHtcbiAgICAgIG9wYWNpdHk6ICRvcGFjaXR5O1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2xpZGVyOmhvdmVyLFxuICAuY2RrLWZvY3VzZWQge1xuICAgIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG1hdC1zbGlkZXItb2ZmLWZvY3VzZWQtY29sb3I7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbGlkZXItZGlzYWJsZWQge1xuICAgIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsXG4gICAgLm1hdC1zbGlkZXItdHJhY2stZmlsbCxcbiAgICAubWF0LXNsaWRlci10aHVtYiB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbWF0LXNsaWRlci1kaXNhYmxlZC1jb2xvcjtcbiAgICB9XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbWF0LXNsaWRlci1kaXNhYmxlZC1jb2xvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubWF0LXNsaWRlci1taW4tdmFsdWUge1xuICAgIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmcge1xuICAgICAgJG9wYWNpdHk6IDAuMTI7XG4gICAgICAkY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgYmFzZSwgJG9wYWNpdHkpO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yO1xuXG4gICAgICAvLyBgbWF0LWNvbG9yYCB1c2VzIGByZ2JhYCBmb3IgdGhlIG9wYWNpdHkgd2hpY2ggd29uJ3Qgd29yayB3aXRoXG4gICAgICAvLyBDU1MgdmFyaWFibGVzIHNvIHdlIG5lZWQgdG8gdXNlIGBvcGFjaXR5YCBhcyBhIGZhbGxiYWNrLlxuICAgICAgQGlmICh0eXBlLW9mKCRjb2xvcikgIT0gY29sb3IpIHtcbiAgICAgICAgb3BhY2l0eTogJG9wYWNpdHk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcge1xuICAgICAgLm1hdC1zbGlkZXItdGh1bWIsXG4gICAgICAubWF0LXNsaWRlci10aHVtYi1sYWJlbCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRtYXQtc2xpZGVyLWxhYmVsZWQtbWluLXZhbHVlLXRodW1iLWNvbG9yO1xuICAgICAgfVxuXG4gICAgICAmLmNkay1mb2N1c2VkIHtcbiAgICAgICAgLm1hdC1zbGlkZXItdGh1bWIsXG4gICAgICAgIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbWF0LXNsaWRlci1sYWJlbGVkLW1pbi12YWx1ZS10aHVtYi1sYWJlbC1jb2xvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICY6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpIHtcbiAgICAgIC5tYXQtc2xpZGVyLXRodW1iIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkbWF0LXNsaWRlci1vZmYtY29sb3I7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyLFxuICAgICAgJi5jZGstZm9jdXNlZCB7XG4gICAgICAgIC5tYXQtc2xpZGVyLXRodW1iIHtcbiAgICAgICAgICBib3JkZXItY29sb3I6ICRtYXQtc2xpZGVyLW9mZi1mb2N1c2VkLWNvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iIHtcbiAgICAgICAgICBib3JkZXItY29sb3I6ICRtYXQtc2xpZGVyLWRpc2FibGVkLWNvbG9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVyIHtcbiAgICBib3JkZXItY29sb3I6ICRtYXQtc2xpZGVyLXRpY2stY29sb3I7XG5cbiAgICAvLyBgbWF0LWNvbG9yYCB1c2VzIGByZ2JhYCBmb3IgdGhlIG9wYWNpdHkgd2hpY2ggd29uJ3Qgd29yayB3aXRoXG4gICAgLy8gQ1NTIHZhcmlhYmxlcyBzbyB3ZSBuZWVkIHRvIHVzZSBgb3BhY2l0eWAgYXMgYSBmYWxsYmFjay5cbiAgICBAaWYgKHR5cGUtb2YoJG1hdC1zbGlkZXItdGljay1jb2xvcikgIT0gY29sb3IpIHtcbiAgICAgIG9wYWNpdHk6ICRtYXQtc2xpZGVyLXRpY2stb3BhY2l0eTtcbiAgICB9XG4gIH1cblxuICAubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tzIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAkbWF0LXNsaWRlci10aWNrLWNvbG9yLFxuICAgICAgICAkbWF0LXNsaWRlci10aWNrLWNvbG9yICRtYXQtc2xpZGVyLXRpY2stc2l6ZSwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpO1xuICAgIC8vIEZpcmVmb3ggZG9lc24ndCBkcmF3IHRoZSBncmFkaWVudCBjb3JyZWN0bHkgd2l0aCAndG8gcmlnaHQnXG4gICAgLy8gKHNlZSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE0MzE5KS5cbiAgICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LXJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoMC4wMDAxZGVnLCAkbWF0LXNsaWRlci10aWNrLWNvbG9yLFxuICAgICAgICAkbWF0LXNsaWRlci10aWNrLWNvbG9yICRtYXQtc2xpZGVyLXRpY2stc2l6ZSwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpO1xuXG4gICAgLy8gYG1hdC1jb2xvcmAgdXNlcyBgcmdiYWAgZm9yIHRoZSBvcGFjaXR5IHdoaWNoIHdvbid0IHdvcmsgd2l0aFxuICAgIC8vIENTUyB2YXJpYWJsZXMgc28gd2UgbmVlZCB0byB1c2UgYG9wYWNpdHlgIGFzIGEgZmFsbGJhY2suXG4gICAgQGlmICh0eXBlLW9mKCRtYXQtc2xpZGVyLXRpY2stY29sb3IpICE9IGNvbG9yKSB7XG4gICAgICBvcGFjaXR5OiAkbWF0LXNsaWRlci10aWNrLW9wYWNpdHk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3Mge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAkbWF0LXNsaWRlci10aWNrLWNvbG9yLFxuICAgICAgICAkbWF0LXNsaWRlci10aWNrLWNvbG9yICRtYXQtc2xpZGVyLXRpY2stc2l6ZSwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpO1xuXG4gICAgLy8gYG1hdC1jb2xvcmAgdXNlcyBgcmdiYWAgZm9yIHRoZSBvcGFjaXR5IHdoaWNoIHdvbid0IHdvcmsgd2l0aFxuICAgIC8vIENTUyB2YXJpYWJsZXMgc28gd2UgbmVlZCB0byB1c2UgYG9wYWNpdHlgIGFzIGEgZmFsbGJhY2suXG4gICAgQGlmICh0eXBlLW9mKCRtYXQtc2xpZGVyLXRpY2stY29sb3IpICE9IGNvbG9yKSB7XG4gICAgICBvcGFjaXR5OiAkbWF0LXNsaWRlci10aWNrLW9wYWNpdHk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtc2xpZGVyLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0IHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbik7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTIpO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtc3RlcHBlci10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcblxuICAubWF0LXN0ZXAtaGVhZGVyIHtcbiAgICAmLmNkay1rZXlib2FyZC1mb2N1c2VkLFxuICAgICYuY2RrLXByb2dyYW0tZm9jdXNlZCxcbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIpO1xuICAgIH1cblxuICAgIC8vIE9uIHRvdWNoIGRldmljZXMgdGhlIDpob3ZlciBzdGF0ZSB3aWxsIGxpbmdlciBvbiB0aGUgZWxlbWVudCBhZnRlciBhIHRhcC5cbiAgICAvLyBSZXNldCBpdCB2aWEgYEBtZWRpYWAgYWZ0ZXIgdGhlIGRlY2xhcmF0aW9uLCBiZWNhdXNlIHRoZSBtZWRpYSBxdWVyeSBpc24ndFxuICAgIC8vIHN1cHBvcnRlZCBieSBhbGwgYnJvd3NlcnMgeWV0LlxuICAgIEBtZWRpYSAoaG92ZXI6IG5vbmUpIHtcbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5tYXQtc3RlcC1sYWJlbCxcbiAgICAubWF0LXN0ZXAtb3B0aW9uYWwge1xuICAgICAgLy8gVE9ETyhqb3NlcGhwZXJyb3R0KTogVXBkYXRlIHRvIHVzaW5nIGEgY29ycmVjdGVkIGRpc2FibGVkLXRleHQgY29udHJhc3RcbiAgICAgIC8vIGluc3RlYWQgb2Ygc2Vjb25kYXJ5LXRleHQuXG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gICAgfVxuXG4gICAgLm1hdC1zdGVwLWljb24ge1xuICAgICAgLy8gVE9ETyhqb3NlcGhwZXJyb3R0KTogVXBkYXRlIHRvIHVzaW5nIGEgY29ycmVjdGVkIGRpc2FibGVkLXRleHQgY29udHJhc3RcbiAgICAgIC8vIGluc3RlYWQgb2Ygc2Vjb25kYXJ5LXRleHQuXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIGRlZmF1bHQtY29udHJhc3QpO1xuICAgIH1cblxuICAgIC5tYXQtc3RlcC1pY29uLXNlbGVjdGVkLFxuICAgIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsXG4gICAgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnkpO1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgZGVmYXVsdC1jb250cmFzdCk7XG4gICAgfVxuXG4gICAgLm1hdC1zdGVwLWljb24tc3RhdGUtZXJyb3Ige1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgICB9XG5cbiAgICAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtYWN0aXZlIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIH1cblxuICAgIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1lcnJvciB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgICB9XG4gIH1cblxuICAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbCwgLm1hdC1zdGVwcGVyLXZlcnRpY2FsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICB9XG5cbiAgLm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZSB7XG4gICAgYm9yZGVyLWxlZnQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cblxuICAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmJlZm9yZSxcbiAgLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjphZnRlcixcbiAgLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZSB7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXN0ZXBwZXItdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtc3RlcHBlci12ZXJ0aWNhbCwgLm1hdC1zdGVwcGVyLWhvcml6b250YWwge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LXN0ZXAtbGFiZWwge1xuICAgIGZvbnQ6IHtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMSk7XG4gICAgfTtcbiAgfVxuXG4gIC5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3Ige1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIH1cblxuICAubWF0LXN0ZXAtbGFiZWwtZXJyb3Ige1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTIpO1xuICB9XG5cbiAgLm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkIHtcbiAgICBmb250OiB7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMik7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTIpO1xuICAgIH07XG4gIH1cbn1cblxuQG1peGluIG1hdC1zb3J0LXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtc29ydC1oZWFkZXItYXJyb3cge1xuICAgICR0YWJsZS1iYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdjYXJkJyk7XG4gICAgJHRleHQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuXG4gICAgLy8gQmVjYXVzZSB0aGUgYXJyb3cgaXMgbWFkZSB1cCBvZiBtdWx0aXBsZSBlbGVtZW50cyB0aGF0IGFyZSBzdGFja2VkIG9uIHRvcCBvZiBlYWNoIG90aGVyLFxuICAgIC8vIHdlIGNhbid0IHVzZSB0aGUgc2VtaS10cmFzcGFyZW50IGNvbG9yIGZyb20gdGhlIHRoZW1lIGRpcmVjdGx5LiBJZiB0aGUgdmFsdWUgaXMgYSBjb2xvclxuICAgIC8vICp0eXBlKiwgd2UgY29udmVydCBpdCBpbnRvIGEgc29saWQgY29sb3IgYnkgdGFraW5nIHRoZSBvcGFjaXR5IGZyb20gdGhlIHJnYmEgdmFsdWUgYW5kXG4gICAgLy8gdXNpbmcgdGhlIHZhbHVlIHRvIGRldGVybWluZSB0aGUgcGVyY2VudGFnZSBvZiB0aGUgYmFja2dyb3VuZCB0byBwdXQgaW50byBmb3JlZ3JvdW5kXG4gICAgLy8gd2hlbiBtaXhpbmcgdGhlIGNvbG9ycyB0b2dldGhlci4gT3RoZXJ3aXNlLCBpZiBpdCByZXNvbHZlcyB0byBzb21ldGhpbmcgZGlmZmVyZW50XG4gICAgLy8gKGUuZy4gaXQgcmVzb2x2ZXMgdG8gYSBDU1MgdmFyaWFibGUpLCB3ZSB1c2UgdGhlIGNvbG9yIGRpcmVjdGx5LlxuICAgIEBpZiAodHlwZS1vZigkdGFibGUtYmFja2dyb3VuZCkgPT0gY29sb3IgYW5kIHR5cGUtb2YoJHRleHQtY29sb3IpID09IGNvbG9yKSB7XG4gICAgICAkdGV4dC1vcGFjaXR5OiBvcGFjaXR5KCR0ZXh0LWNvbG9yKTtcbiAgICAgIGNvbG9yOiBtaXgoJHRhYmxlLWJhY2tncm91bmQsIHJnYmEoJHRleHQtY29sb3IsIDEpLCAoMSAtICR0ZXh0LW9wYWNpdHkpICogMTAwJSk7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIGNvbG9yOiAkdGV4dC1jb2xvcjtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1zb3J0LXR5cG9ncmFwaHkoJGNvbmZpZykgeyB9XG5cblxuXG5cblxuQG1peGluIG1hdC10YWJzLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGhlYWRlci1ib3JkZXI6IDFweCBzb2xpZCBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuXG4gIC5tYXQtdGFiLW5hdi1iYXIsXG4gIC5tYXQtdGFiLWhlYWRlciB7XG4gICAgYm9yZGVyLWJvdHRvbTogJGhlYWRlci1ib3JkZXI7XG4gIH1cblxuICAubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIge1xuICAgIC5tYXQtdGFiLW5hdi1iYXIsXG4gICAgLm1hdC10YWItaGVhZGVyIHtcbiAgICAgIGJvcmRlci10b3A6ICRoZWFkZXItYm9yZGVyO1xuICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAubWF0LXRhYi1sYWJlbCwgLm1hdC10YWItbGluayB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgICAmLm1hdC10YWItZGlzYWJsZWQge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG5cbiAgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICB9XG5cbiAgLy8gUmVtb3ZlIGhlYWRlciBib3JkZXIgd2hlbiB0aGVyZSBpcyBhIGJhY2tncm91bmQgY29sb3JcbiAgLm1hdC10YWItZ3JvdXBbY2xhc3MqPSdtYXQtYmFja2dyb3VuZC0nXSAubWF0LXRhYi1oZWFkZXIsXG4gIC5tYXQtdGFiLW5hdi1iYXJbY2xhc3MqPSdtYXQtYmFja2dyb3VuZC0nXSB7XG4gICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbiAgICBib3JkZXItdG9wOiBub25lO1xuICB9XG5cbiAgLm1hdC10YWItZ3JvdXAsIC5tYXQtdGFiLW5hdi1iYXIge1xuICAgICR0aGVtZS1jb2xvcnM6IChcbiAgICAgIHByaW1hcnk6ICRwcmltYXJ5LFxuICAgICAgYWNjZW50OiAkYWNjZW50LFxuICAgICAgd2FybjogJHdhcm5cbiAgICApO1xuXG4gICAgQGVhY2ggJG5hbWUsICRjb2xvciBpbiAkdGhlbWUtY29sb3JzIHtcbiAgICAgIC8vIFNldCB0aGUgZm9yZWdyb3VuZCBjb2xvciBvZiB0aGUgdGFic1xuICAgICAgJi5tYXQtI3skbmFtZX0ge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LXRhYi1sYWJlbC1mb2N1cygkY29sb3IpO1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWluay1iYXIoJGNvbG9yKTtcblxuICAgICAgICAvLyBPdmVycmlkZSBpbmsgYmFyIHdoZW4gYmFja2dyb3VuZCBjb2xvciBpcyB0aGUgc2FtZVxuICAgICAgICAmLm1hdC1iYWNrZ3JvdW5kLSN7JG5hbWV9IHtcbiAgICAgICAgICBAaW5jbHVkZSBfbWF0LWluay1iYXIoJGNvbG9yLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIEBlYWNoICRuYW1lLCAkY29sb3IgaW4gJHRoZW1lLWNvbG9ycyB7XG4gICAgICAvLyBTZXQgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgdGFicyBhbmQgb3ZlcnJpZGUgZm9jdXMgY29sb3JcbiAgICAgICYubWF0LWJhY2tncm91bmQtI3skbmFtZX0ge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LXRhYi1sYWJlbC1mb2N1cygkY29sb3IpO1xuICAgICAgICBAaW5jbHVkZSBfbWF0LXRhYnMtYmFja2dyb3VuZCgkY29sb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gX21hdC1pbmstYmFyKCRjb2xvciwgJGh1ZTogZGVmYXVsdCkge1xuICAubWF0LWluay1iYXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkY29sb3IsICRodWUpO1xuICB9XG59XG5cbkBtaXhpbiBfbWF0LXRhYi1sYWJlbC1mb2N1cygkdGFiLWZvY3VzLWNvbG9yKSB7XG4gIC5tYXQtdGFiLWxhYmVsLFxuICAubWF0LXRhYi1saW5rIHtcbiAgICAmLmNkay1rZXlib2FyZC1mb2N1c2VkLFxuICAgICYuY2RrLXByb2dyYW0tZm9jdXNlZCB7XG4gICAgICAmOm5vdCgubWF0LXRhYi1kaXNhYmxlZCkge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHRhYi1mb2N1cy1jb2xvciwgbGlnaHRlciwgMC4zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuQG1peGluIF9tYXQtdGFicy1iYWNrZ3JvdW5kKCRiYWNrZ3JvdW5kLWNvbG9yKSB7XG4gIC8vIFNldCBiYWNrZ3JvdW5kIGNvbG9yIGZvciB0aGUgdGFiIGdyb3VwXG4gIC5tYXQtdGFiLWhlYWRlciwgLm1hdC10YWItbGlua3MsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQtY29sb3IpO1xuICB9XG5cbiAgLy8gU2V0IGxhYmVscyB0byBjb250cmFzdCBhZ2FpbnN0IGJhY2tncm91bmRcbiAgLm1hdC10YWItbGFiZWwsIC5tYXQtdGFiLWxpbmsge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQtY29sb3IsIGRlZmF1bHQtY29udHJhc3QpO1xuXG4gICAgJi5tYXQtdGFiLWRpc2FibGVkIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQtY29sb3IsIGRlZmF1bHQtY29udHJhc3QsIDAuNCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IHBhZ2luYXRpb24gY2hldnJvbnMgdG8gY29udHJhc3QgYmFja2dyb3VuZFxuICAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZC1jb2xvciwgZGVmYXVsdC1jb250cmFzdCk7XG4gIH1cblxuICAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZC1jb2xvciwgZGVmYXVsdC1jb250cmFzdCwgMC40KTtcbiAgfVxuXG4gIC8vIFNldCByaXBwbGVzIGNvbG9yIHRvIGJlIHRoZSBjb250cmFzdCBjb2xvciBvZiB0aGUgbmV3IGJhY2tncm91bmQuIE90aGVyd2lzZSB0aGUgcmlwcGxlXG4gIC8vIGNvbG9yIHdpbGwgYmUgYmFzZWQgb24gdGhlIGFwcCBiYWNrZ3JvdW5kIGNvbG9yLlxuICAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQtY29sb3IsIGRlZmF1bHQtY29udHJhc3QsIDAuMTIpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtdGFicy10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC10YWItZ3JvdXAge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LXRhYi1sYWJlbCwgLm1hdC10YWItbGluayB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgYnV0dG9uKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYnV0dG9uKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJ1dHRvbik7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5AbWl4aW4gX21hdC10b29sYmFyLWNvbG9yKCRwYWxldHRlKSB7XG4gIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkcGFsZXR0ZSk7XG4gIGNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsIGRlZmF1bHQtY29udHJhc3QpO1xufVxuXG5AbWl4aW4gX21hdC10b29sYmFyLWZvcm0tZmllbGQtb3ZlcnJpZGVzIHtcbiAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSxcbiAgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSxcbiAgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUge1xuICAgIGJhY2tncm91bmQtY29sb3I6IGN1cnJlbnRDb2xvcjtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1sYWJlbCxcbiAgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCxcbiAgLm1hdC1zZWxlY3QtdmFsdWUsXG4gIC5tYXQtc2VsZWN0LWFycm93LFxuICAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3cge1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICB9XG5cbiAgLm1hdC1pbnB1dC1lbGVtZW50IHtcbiAgICBjYXJldC1jb2xvcjogY3VycmVudENvbG9yO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtdG9vbGJhci10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC10b29sYmFyIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGFwcC1iYXIpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gICAgJi5tYXQtcHJpbWFyeSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRvb2xiYXItY29sb3IoJHByaW1hcnkpO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRvb2xiYXItY29sb3IoJGFjY2VudCk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRvb2xiYXItY29sb3IoJHdhcm4pO1xuICAgIH1cblxuICAgIEBpbmNsdWRlIF9tYXQtdG9vbGJhci1mb3JtLWZpZWxkLW92ZXJyaWRlcztcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXRvb2xiYXItdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtdG9vbGJhcixcbiAgLm1hdC10b29sYmFyIGgxLFxuICAubWF0LXRvb2xiYXIgaDIsXG4gIC5tYXQtdG9vbGJhciBoMyxcbiAgLm1hdC10b29sYmFyIGg0LFxuICAubWF0LXRvb2xiYXIgaDUsXG4gIC5tYXQtdG9vbGJhciBoNiB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIHRpdGxlKTtcbiAgICBtYXJnaW46IDA7XG4gIH1cbn1cblxuXG5cblxuXG4kbWF0LXRvb2x0aXAtdGFyZ2V0LWhlaWdodDogMjJweDtcbiRtYXQtdG9vbHRpcC1mb250LXNpemU6IDEwcHg7XG4kbWF0LXRvb2x0aXAtdmVydGljYWwtcGFkZGluZzogKCRtYXQtdG9vbHRpcC10YXJnZXQtaGVpZ2h0IC0gJG1hdC10b29sdGlwLWZvbnQtc2l6ZSkgLyAyO1xuXG4kbWF0LXRvb2x0aXAtaGFuZHNldC10YXJnZXQtaGVpZ2h0OiAzMHB4O1xuJG1hdC10b29sdGlwLWhhbmRzZXQtZm9udC1zaXplOiAxNHB4O1xuJG1hdC10b29sdGlwLWhhbmRzZXQtdmVydGljYWwtcGFkZGluZzpcbiAgICAoJG1hdC10b29sdGlwLWhhbmRzZXQtdGFyZ2V0LWhlaWdodCAtICRtYXQtdG9vbHRpcC1oYW5kc2V0LWZvbnQtc2l6ZSkgLyAyO1xuXG5AbWl4aW4gbWF0LXRvb2x0aXAtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG5cbiAgLm1hdC10b29sdGlwIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIHRvb2x0aXAsIDAuOSk7XG4gIH1cbn1cblxuQG1peGluIG1hdC10b29sdGlwLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXRvb2x0aXAge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gICAgZm9udC1zaXplOiAkbWF0LXRvb2x0aXAtZm9udC1zaXplO1xuICAgIHBhZGRpbmctdG9wOiAkbWF0LXRvb2x0aXAtdmVydGljYWwtcGFkZGluZztcbiAgICBwYWRkaW5nLWJvdHRvbTogJG1hdC10b29sdGlwLXZlcnRpY2FsLXBhZGRpbmc7XG4gIH1cblxuICAubWF0LXRvb2x0aXAtaGFuZHNldCB7XG4gICAgZm9udC1zaXplOiAkbWF0LXRvb2x0aXAtaGFuZHNldC1mb250LXNpemU7XG4gICAgcGFkZGluZy10b3A6ICRtYXQtdG9vbHRpcC1oYW5kc2V0LXZlcnRpY2FsLXBhZGRpbmc7XG4gICAgcGFkZGluZy1ib3R0b206ICRtYXQtdG9vbHRpcC1oYW5kc2V0LXZlcnRpY2FsLXBhZGRpbmc7XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LXNuYWNrLWJhci10aGVtZSgkdGhlbWUpIHtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG5cbiAgLm1hdC1zbmFjay1iYXItY29udGFpbmVyIHtcbiAgICAvLyBVc2UgdGhlIHByaW1hcnkgdGV4dCBvbiB0aGUgZGFyayB0aGVtZSwgZXZlbiB0aG91Z2ggdGhlIGxpZ2h0ZXIgb25lIHVzZXNcbiAgICAvLyBhIHNlY29uZGFyeSwgYmVjYXVzZSB0aGUgY29udHJhc3Qgb24gdGhlIGxpZ2h0IHByaW1hcnkgdGV4dCBpcyBwb29yLlxuICAgIGNvbG9yOiBpZigkaXMtZGFyay10aGVtZSwgJGRhcmstcHJpbWFyeS10ZXh0LCAkbGlnaHQtc2Vjb25kYXJ5LXRleHQpO1xuICAgIGJhY2tncm91bmQ6IGlmKCRpcy1kYXJrLXRoZW1lLCBtYXAtZ2V0KCRtYXQtZ3JleSwgNTApLCAjMzIzMjMyKTtcblxuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDYsICR0aGVtZSk7XG4gIH1cblxuICAubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb24ge1xuICAgIGNvbG9yOiBpZigkaXMtZGFyay10aGVtZSwgaW5oZXJpdCwgbWF0LWNvbG9yKCRhY2NlbnQsIHRleHQpKTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNuYWNrLWJhci10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1zaW1wbGUtc25hY2tiYXIge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGJvZHktMSk7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uIHtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IGluaGVyaXQ7XG4gICAgICBzaXplOiBpbmhlcml0O1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYnV0dG9uKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vLyBUaGVtZSBzdHlsZXMgdGhhdCBvbmx5IGFwcGx5IHRvIHRoZSBmaWxsIGFwcGVhcmFuY2Ugb2YgdGhlIGZvcm0tZmllbGQuXG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1maWxsLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuXG4gICRmaWxsLWJhY2tncm91bmQ6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgYmFzZSwgaWYoJGlzLWRhcmstdGhlbWUsIDAuMSwgMC4wNCkpO1xuICAkZmlsbC1kaXNhYmxlZC1iYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGJhc2UsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjA1LCAwLjAyKSk7XG4gICR1bmRlcmxpbmUtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlciwgaWYoJGlzLWRhcmstdGhlbWUsIDAuNSwgMC40MikpO1xuICAkbGFiZWwtZGlzYWJsZWQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWZsZXgge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGZpbGwtYmFja2dyb3VuZDtcbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1mbGV4IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRmaWxsLWRpc2FibGVkLWJhY2tncm91bmQ7XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtY29sb3I7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCB7XG4gICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBjb2xvcjogJGxhYmVsLWRpc2FibGVkLWNvbG9yO1xuICAgICAgfVxuXG4gICAgICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gVXNlZCB0byBtYWtlIGluc3RhbmNlcyBvZiB0aGUgX21hdC1mb3JtLWZpZWxkLWxhYmVsLWZsb2F0aW5nIG1peGluIG5lZ2xpZ2libHkgZGlmZmVyZW50LFxuLy8gYW5kIHByZXZlbnQgR29vZ2xlJ3MgQ1NTIE9wdGltaXplciBmcm9tIGNvbGxhcHNpbmcgdGhlIGRlY2xhcmF0aW9ucy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBzb21lXG4vLyBvZiB0aGUgc2VsZWN0b3JzIGNvbnRhaW4gcHNldWRvLWNsYXNzZXMgbm90IHJlY29nbml6ZWQgaW4gYWxsIGJyb3dzZXJzLiBJZiBhIGJyb3dzZXIgZW5jb3VudGVyc1xuLy8gYW4gdW5rbm93biBwc2V1ZG8tY2xhc3MgaXQgd2lsbCBkaXNjYXJkIHRoZSBlbnRpcmUgcnVsZSBzZXQuXG4kbWF0LWZvcm0tZmllbGQtZmlsbC1kZWR1cGU6IDA7XG5cbi8vIEFwcGxpZXMgYSBmbG9hdGluZyBsYWJlbCBhYm92ZSB0aGUgZm9ybSBmaWVsZCBjb250cm9sIGl0c2VsZi5cbkBtaXhpbiBfbWF0LWZvcm0tZmllbGQtZmlsbC1sYWJlbC1mbG9hdGluZygkZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtJGluZml4LW1hcmdpbi10b3AgLSAkaW5maXgtcGFkZGluZyArICRtYXQtZm9ybS1maWVsZC1maWxsLWRlZHVwZSlcbiAgICAgICAgICAgICBzY2FsZSgkZm9udC1zY2FsZSk7XG4gIHdpZHRoOiAxMDAlIC8gJGZvbnQtc2NhbGUgKyAkbWF0LWZvcm0tZmllbGQtZmlsbC1kZWR1cGU7XG5cbiAgJG1hdC1mb3JtLWZpZWxkLWZpbGwtZGVkdXBlOiAkbWF0LWZvcm0tZmllbGQtZmlsbC1kZWR1cGUgKyAwLjAwMDAxICFnbG9iYWw7XG59XG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1maWxsLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAvLyBUaGUgdW5pdC1sZXNzIGxpbmUtaGVpZ2h0IGZyb20gdGhlIGZvbnQgY29uZmlnLlxuICAkbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBpbnB1dCk7XG4gIC8vIFRoZSBhbW91bnQgdG8gc2NhbGUgdGhlIGZvbnQgZm9yIHRoZSBmbG9hdGluZyBsYWJlbCBhbmQgc3Vic2NyaXB0LlxuICAkc3Vic2NyaXB0LWZvbnQtc2NhbGU6IDAuNzU7XG4gIC8vIFRoZSBwYWRkaW5nIG9uIHRvcCBvZiB0aGUgaW5maXguXG4gICRpbmZpeC1wYWRkaW5nLXRvcDogMC4yNWVtO1xuICAvLyBUaGUgcGFkZGluZyBiZWxvdyB0aGUgaW5maXguXG4gICRpbmZpeC1wYWRkaW5nLWJvdHRvbTogMC43NWVtO1xuICAvLyBUaGUgbWFyZ2luIGFwcGxpZWQgdG8gdGhlIGZvcm0tZmllbGQtaW5maXggdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsLlxuICAkaW5maXgtbWFyZ2luLXRvcDogMWVtICogJGxpbmUtaGVpZ2h0ICogJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuICAvLyBUaGUgYW1vdW50IHdlIG9mZnNldCB0aGUgbGFiZWwgZnJvbSB0aGUgaW5wdXQgdGV4dCBpbiB0aGUgZmlsbCBhcHBlYXJhbmNlLlxuICAkZmlsbC1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldDogLTAuNWVtO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwge1xuICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICBwYWRkaW5nOiAkaW5maXgtcGFkZGluZy10b3AgMCAkaW5maXgtcGFkZGluZy1ib3R0b20gMDtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgdG9wOiAkaW5maXgtbWFyZ2luLXRvcCArICRpbmZpeC1wYWRkaW5nLXRvcDtcbiAgICAgIG1hcmdpbi10b3A6ICRmaWxsLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0O1xuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IHtcbiAgICAgICYubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCxcbiAgICAgIC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWZpbGwtbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZy10b3AgKyAkZmlsbC1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldCxcbiAgICAgICAgICAgICAgICAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNlcnZlci1zaWRlIHJlbmRlcmVkIG1hdElucHV0IHdpdGggYSBsYWJlbCBhdHRyaWJ1dGUgYnV0IGxhYmVsIG5vdCBzaG93blxuICAgICAgLy8gKHVzZWQgYXMgYSBwdXJlIENTUyBzdGFuZC1pbiBmb3IgbWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0KS5cbiAgICAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXG4gICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtZmlsbC1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLXRvcCArICRmaWxsLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0LFxuICAgICAgICAgICAgICAgICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cblxuLy8gVGhlbWUgc3R5bGVzIHRoYXQgb25seSBhcHBseSB0byB0aGUgbGVnYWN5IGFwcGVhcmFuY2Ugb2YgdGhlIGZvcm0tZmllbGQuXG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1sZWdhY3ktdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG5cbiAgJGxhYmVsLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgJHVuZGVybGluZS1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyLCBpZigkaXMtZGFyay10aGVtZSwgMC43LCAwLjQyKSk7XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IHtcbiAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgY29sb3I6ICRsYWJlbC1jb2xvcjtcbiAgICB9XG5cbiAgICAubWF0LWhpbnQge1xuICAgICAgY29sb3I6ICRsYWJlbC1jb2xvcjtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtY29sb3I7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIHtcbiAgICAgIEBpbmNsdWRlIG1hdC1jb250cm9sLWRpc2FibGVkLXVuZGVybGluZSgkdW5kZXJsaW5lLWNvbG9yKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gVXNlZCB0byBtYWtlIGluc3RhbmNlcyBvZiB0aGUgX21hdC1mb3JtLWZpZWxkLWxhYmVsLWZsb2F0aW5nIG1peGluIG5lZ2xpZ2libHkgZGlmZmVyZW50LFxuLy8gYW5kIHByZXZlbnQgR29vZ2xlJ3MgQ1NTIE9wdGltaXplciBmcm9tIGNvbGxhcHNpbmcgdGhlIGRlY2xhcmF0aW9ucy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBzb21lXG4vLyBvZiB0aGUgc2VsZWN0b3JzIGNvbnRhaW4gcHNldWRvLWNsYXNzZXMgbm90IHJlY29nbml6ZWQgaW4gYWxsIGJyb3dzZXJzLiBJZiBhIGJyb3dzZXIgZW5jb3VudGVyc1xuLy8gYW4gdW5rbm93biBwc2V1ZG8tY2xhc3MgaXQgd2lsbCBkaXNjYXJkIHRoZSBlbnRpcmUgcnVsZSBzZXQuXG4kbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZTogMDtcblxuLy8gQXBwbGllcyBhIGZsb2F0aW5nIGxhYmVsIGFib3ZlIHRoZSBmb3JtIGZpZWxkIGNvbnRyb2wgaXRzZWxmLlxuQG1peGluIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmcoJGZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCkge1xuICAvLyBXZSB1c2UgcGVyc3BlY3RpdmUgdG8gZml4IHRoZSB0ZXh0IGJsdXJyaW5lc3MgYXMgZGVzY3JpYmVkIGhlcmU6XG4gIC8vIGh0dHA6Ly93d3cudXNlcmFnZW50bWFuLmNvbS9ibG9nLzIwMTQvMDUvMDQvZml4aW5nLXR5cG9ncmFwaHktaW5zaWRlLW9mLTItZC1jc3MtdHJhbnNmb3Jtcy9cbiAgLy8gVGhpcyByZXN1bHRzIGluIGEgc21hbGwgaml0dGVyIGFmdGVyIHRoZSBsYWJlbCBmbG9hdHMgb24gRmlyZWZveCwgd2hpY2ggdGhlXG4gIC8vIHRyYW5zbGF0ZVogZml4ZXMuXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtJGluZml4LW1hcmdpbi10b3AgLSAkaW5maXgtcGFkZGluZykgc2NhbGUoJGZvbnQtc2NhbGUpIHBlcnNwZWN0aXZlKDEwMHB4KVxuICB0cmFuc2xhdGVaKDAuMDAxcHggKyAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZSk7XG4gIC8vIFRoZSB0cmlja3MgYWJvdmUgdXNlZCB0byBzbW9vdGggb3V0IHRoZSBhbmltYXRpb24gb24gY2hyb21lIGFuZCBmaXJlZm94IGFjdHVhbGx5IG1ha2UgdGhpbmdzXG4gIC8vIHdvcnNlIG9uIElFLCBzbyB3ZSBkb24ndCBpbmNsdWRlIHRoZW0gaW4gdGhlIElFIHZlcnNpb24uXG4gIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRpbmZpeC1tYXJnaW4tdG9wIC0gJGluZml4LXBhZGRpbmcgKyAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZSlcbiAgICAgICAgICAgICAgICAgIHNjYWxlKCRmb250LXNjYWxlKTtcblxuICB3aWR0aDogMTAwJSAvICRmb250LXNjYWxlICsgJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGU7XG5cbiAgJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGU6ICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlICsgMC4wMDAwMSAhZ2xvYmFsO1xufVxuXG4vLyBTYW1lIGFzIG1peGluIGFib3ZlLCBidXQgb21pdHMgdGhlIHRyYW5zbGF0ZVogZm9yIHByaW50aW5nIHB1cnBvc2VzLlxuQG1peGluIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmctcHJpbnQoJGZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCkge1xuICAvLyBUaGlzIHJlc3VsdHMgaW4gYSBzbWFsbCBqaXR0ZXIgYWZ0ZXIgdGhlIGxhYmVsIGZsb2F0cyBvbiBGaXJlZm94LCB3aGljaCB0aGVcbiAgLy8gdHJhbnNsYXRlWiBmaXhlcy5cbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kaW5maXgtbWFyZ2luLXRvcCAtICRpbmZpeC1wYWRkaW5nICsgJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGUpXG4gICAgICAgICAgICAgICAgICBzY2FsZSgkZm9udC1zY2FsZSk7XG4gIC8vIFRoZSB0cmlja3MgYWJvdmUgdXNlZCB0byBzbW9vdGggb3V0IHRoZSBhbmltYXRpb24gb24gY2hyb21lIGFuZCBmaXJlZm94IGFjdHVhbGx5IG1ha2UgdGhpbmdzXG4gIC8vIHdvcnNlIG9uIElFLCBzbyB3ZSBkb24ndCBpbmNsdWRlIHRoZW0gaW4gdGhlIElFIHZlcnNpb24uXG4gICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlOiAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZSArIDAuMDAwMDEgIWdsb2JhbDtcbn1cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLy8gVGhlIHVuaXQtbGVzcyBsaW5lLWhlaWdodCBmcm9tIHRoZSBmb250IGNvbmZpZy5cbiAgJGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgaW5wdXQpO1xuICAvLyBUaGUgYW1vdW50IHRvIHNjYWxlIHRoZSBmb250IGZvciB0aGUgZmxvYXRpbmcgbGFiZWwgYW5kIHN1YnNjcmlwdC5cbiAgJHN1YnNjcmlwdC1mb250LXNjYWxlOiAwLjc1O1xuICAvLyBUaGUgYW1vdW50IG9mIHNwYWNlIGJldHdlZW4gdGhlIHRvcCBvZiB0aGUgbGluZSBhbmQgdGhlIHRvcCBvZiB0aGUgYWN0dWFsIHRleHRcbiAgLy8gKGFzIGEgZnJhY3Rpb24gb2YgdGhlIGZvbnQtc2l6ZSkuXG4gICRsaW5lLXNwYWNpbmc6ICgkbGluZS1oZWlnaHQgLSAxKSAvIDI7XG4gIC8vIFRoZSBwYWRkaW5nIG9uIHRoZSBpbmZpeC4gTW9ja3Mgc2hvdyBoYWxmIG9mIHRoZSB0ZXh0IHNpemUsIGJ1dCBzZWVtIHRvIG1lYXN1cmUgZnJvbSB0aGUgZWRnZVxuICAvLyBvZiB0aGUgdGV4dCBpdHNlbGYsIG5vdCB0aGUgZWRnZSBvZiB0aGUgbGluZTsgdGhlcmVmb3JlIHdlIHN1YnRyYWN0IG9mZiB0aGUgbGluZSBzcGFjaW5nLlxuICAkaW5maXgtcGFkZGluZzogMC41ZW0gLSAkbGluZS1zcGFjaW5nO1xuICAvLyBUaGUgbWFyZ2luIGFwcGxpZWQgdG8gdGhlIGZvcm0tZmllbGQtaW5maXggdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsLlxuICAkaW5maXgtbWFyZ2luLXRvcDogMWVtICogJGxpbmUtaGVpZ2h0ICogJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuICAvLyBUaGUgc3BhY2UgYmV0d2VlbiB0aGUgYm90dG9tIG9mIHRoZSAubWF0LWZvcm0tZmllbGQtZmxleCBhcmVhIGFuZCB0aGUgc3Vic2NyaXB0IHdyYXBwZXIuXG4gIC8vIE1vY2tzIHNob3cgaGFsZiBvZiB0aGUgdGV4dCBzaXplLCBidXQgdGhpcyBtYXJnaW4gaXMgYXBwbGllZCB0byBhbiBlbGVtZW50IHdpdGggdGhlIHN1YnNjcmlwdFxuICAvLyB0ZXh0IGZvbnQgc2l6ZSwgc28gd2UgbmVlZCB0byBkaXZpZGUgYnkgdGhlIHNjYWxlIGZhY3RvciB0byBtYWtlIGl0IGhhbGYgb2YgdGhlIG9yaWdpbmFsIHRleHRcbiAgLy8gc2l6ZS4gV2UgYWdhaW4gbmVlZCB0byBzdWJ0cmFjdCBvZmYgdGhlIGxpbmUgc3BhY2luZyBzaW5jZSB0aGUgbW9ja3MgbWVhc3VyZSB0byB0aGUgZWRnZSBvZiB0aGVcbiAgLy8gdGV4dCwgbm90IHRoZSAgZWRnZSBvZiB0aGUgbGluZS5cbiAgJHN1YnNjcmlwdC1tYXJnaW4tdG9wOiAwLjVlbSAvICRzdWJzY3JpcHQtZm9udC1zY2FsZSAtICgkbGluZS1zcGFjaW5nICogMik7XG4gIC8vIFRoZSBwYWRkaW5nIGFwcGxpZWQgdG8gdGhlIGZvcm0tZmllbGQtd3JhcHBlciB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgc3Vic2NyaXB0LCBzaW5jZSBpdCdzXG4gIC8vIGFic29sdXRlbHkgcG9zaXRpb25lZC4gVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBzdWJzY3JpcHQncyBtYXJnaW4gYW5kIGxpbmUtaGVpZ2h0LCBidXQgd2VcbiAgLy8gbmVlZCB0byBtdWx0aXBseSBieSB0aGUgc3Vic2NyaXB0IGZvbnQgc2NhbGUgZmFjdG9yIHNpbmNlIHRoZSB3cmFwcGVyIGhhcyBhIGxhcmdlciBmb250IHNpemUuXG4gICR3cmFwcGVyLXBhZGRpbmctYm90dG9tOiAoJHN1YnNjcmlwdC1tYXJnaW4tdG9wICsgJGxpbmUtaGVpZ2h0KSAqICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcblxuICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kge1xuICAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAkd3JhcHBlci1wYWRkaW5nLWJvdHRvbTtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgcGFkZGluZzogJGluZml4LXBhZGRpbmcgMDtcbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCB7XG4gICAgICAmLm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsXG4gICAgICAubWF0LWlucHV0LXNlcnZlcjpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgfVxuXG4gICAgICAvLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wIHdpbGwgcmVseSBvbiBBdXRvZmlsbE1vbml0b3IgaW5zdGVhZC5cbiAgICAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlclxuICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNlcnZlci1zaWRlIHJlbmRlcmVkIG1hdElucHV0IHdpdGggYSBsYWJlbCBhdHRyaWJ1dGUgYnV0IGxhYmVsIG5vdCBzaG93blxuICAgICAgLy8gKHVzZWQgYXMgYSBwdXJlIENTUyBzdGFuZC1pbiBmb3IgbWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0KS5cbiAgICAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXG4gICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgdG9wOiAkaW5maXgtbWFyZ2luLXRvcCArICRpbmZpeC1wYWRkaW5nO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUge1xuICAgICAgLy8gV2Ugd2FudCB0aGUgdW5kZXJsaW5lIHRvIHN0YXJ0IGF0IHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgYm94LCBub3QgdGhlIHBhZGRpbmcgYm94LFxuICAgICAgLy8gc28gd2UgbW92ZSBpdCB1cCBieSB0aGUgcGFkZGluZyBhbW91bnQuXG4gICAgICBib3R0b206ICR3cmFwcGVyLXBhZGRpbmctYm90dG9tO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlciB7XG4gICAgICBtYXJnaW4tdG9wOiAkc3Vic2NyaXB0LW1hcmdpbi10b3A7XG5cbiAgICAgIC8vIFdlIHdhbnQgdGhlIHN1YnNjcmlwdCB0byBzdGFydCBhdCB0aGUgZW5kIG9mIHRoZSBjb250ZW50IGJveCwgbm90IHRoZSBwYWRkaW5nIGJveCxcbiAgICAgIC8vIHNvIHdlIG1vdmUgaXQgdXAgYnkgdGhlIHBhZGRpbmcgYW1vdW50IChhZGp1c3RlZCBmb3IgdGhlIHNtYWxsZXIgZm9udCBzaXplKTtcbiAgICAgIHRvcDogY2FsYygxMDAlIC0gI3skd3JhcHBlci1wYWRkaW5nLWJvdHRvbSAvICRzdWJzY3JpcHQtZm9udC1zY2FsZX0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIHRyYW5zbGF0ZVogY2F1c2VzIHRoZSBsYWJlbCB0byBub3QgYXBwZWFyIHdoaWxlIHByaW50aW5nLCBzbyB3ZSBvdmVycmlkZSBpdCB0byBub3RcbiAgLy8gYXBwbHkgdHJhbnNsYXRlWiB3aGlsZSBwcmludGluZ1xuICBAbWVkaWEgcHJpbnQge1xuICAgIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSB7XG4gICAgICAmLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCB7XG4gICAgICAgICYubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCxcbiAgICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmctcHJpbnQoXG4gICAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wIHdpbGwgcmVseSBvbiBBdXRvZmlsbE1vbml0b3IgaW5zdGVhZC5cbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXG4gICAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZy1wcmludChcbiAgICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNlcnZlci1zaWRlIHJlbmRlcmVkIG1hdElucHV0IHdpdGggYSBsYWJlbCBhdHRyaWJ1dGUgYnV0IGxhYmVsIG5vdCBzaG93blxuICAgICAgICAvLyAodXNlZCBhcyBhIHB1cmUgQ1NTIHN0YW5kLWluIGZvciBtYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQpLlxuICAgICAgICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlclxuICAgICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmctcHJpbnQoXG4gICAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cblxuLy8gVGhlbWUgc3R5bGVzIHRoYXQgb25seSBhcHBseSB0byB0aGUgb3V0bGluZSBhcHBlYXJhbmNlIG9mIHRoZSBmb3JtLWZpZWxkLlxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG5cbiAgJGxhYmVsLWRpc2FibGVkLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICAkb3V0bGluZS1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyLCBpZigkaXMtZGFyay10aGVtZSwgMC4zLCAwLjEyKSk7XG4gICRvdXRsaW5lLWNvbG9yLWhvdmVyOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIsIGlmKCRpcy1kYXJrLXRoZW1lLCAxLCAwLjg3KSk7XG4gICRvdXRsaW5lLWNvbG9yLXByaW1hcnk6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG4gICRvdXRsaW5lLWNvbG9yLWFjY2VudDogbWF0LWNvbG9yKCRhY2NlbnQpO1xuICAkb3V0bGluZS1jb2xvci13YXJuOiBtYXQtY29sb3IoJHdhcm4pO1xuICAkb3V0bGluZS1jb2xvci1kaXNhYmxlZDogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyLCBpZigkaXMtZGFyay10aGVtZSwgMC4xNSwgMC4wNikpO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUge1xuICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lIHtcbiAgICAgIGNvbG9yOiAkb3V0bGluZS1jb2xvcjtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayB7XG4gICAgICBjb2xvcjogJG91dGxpbmUtY29sb3ItaG92ZXI7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9jdXNlZCB7XG4gICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayB7XG4gICAgICAgIGNvbG9yOiAkb3V0bGluZS1jb2xvci1wcmltYXJ5O1xuICAgICAgfVxuXG4gICAgICAmLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sge1xuICAgICAgICBjb2xvcjogJG91dGxpbmUtY29sb3ItYWNjZW50O1xuICAgICAgfVxuXG4gICAgICAmLm1hdC13YXJuIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIHtcbiAgICAgICAgY29sb3I6ICRvdXRsaW5lLWNvbG9yLXdhcm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2xhc3MgcmVwZWF0ZWQgc28gdGhhdCBydWxlIGlzIHNwZWNpZmljIGVub3VnaCB0byBvdmVycmlkZSBmb2N1c2VkIGFjY2VudCBjb2xvciBjYXNlLlxuICAgICYubWF0LWZvcm0tZmllbGQtaW52YWxpZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIHtcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIHtcbiAgICAgICAgY29sb3I6ICRvdXRsaW5lLWNvbG9yLXdhcm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCB7XG4gICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBjb2xvcjogJGxhYmVsLWRpc2FibGVkLWNvbG9yO1xuICAgICAgfVxuXG4gICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gICAgICAgIGNvbG9yOiAkb3V0bGluZS1jb2xvci1kaXNhYmxlZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gVXNlZCB0byBtYWtlIGluc3RhbmNlcyBvZiB0aGUgX21hdC1mb3JtLWZpZWxkLWxhYmVsLWZsb2F0aW5nIG1peGluIG5lZ2xpZ2libHkgZGlmZmVyZW50LFxuLy8gYW5kIHByZXZlbnQgR29vZ2xlJ3MgQ1NTIE9wdGltaXplciBmcm9tIGNvbGxhcHNpbmcgdGhlIGRlY2xhcmF0aW9ucy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBzb21lXG4vLyBvZiB0aGUgc2VsZWN0b3JzIGNvbnRhaW4gcHNldWRvLWNsYXNzZXMgbm90IHJlY29nbml6ZWQgaW4gYWxsIGJyb3dzZXJzLiBJZiBhIGJyb3dzZXIgZW5jb3VudGVyc1xuLy8gYW4gdW5rbm93biBwc2V1ZG8tY2xhc3MgaXQgd2lsbCBkaXNjYXJkIHRoZSBlbnRpcmUgcnVsZSBzZXQuXG4kbWF0LWZvcm0tZmllbGQtb3V0bGluZS1kZWR1cGU6IDA7XG5cbi8vIEFwcGxpZXMgYSBmbG9hdGluZyBsYWJlbCBhYm92ZSB0aGUgZm9ybSBmaWVsZCBjb250cm9sIGl0c2VsZi5cbkBtaXhpbiBfbWF0LWZvcm0tZmllbGQtb3V0bGluZS1sYWJlbC1mbG9hdGluZygkZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtJGluZml4LW1hcmdpbi10b3AgLSAkaW5maXgtcGFkZGluZyArICRtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWRlZHVwZSlcbiAgc2NhbGUoJGZvbnQtc2NhbGUpO1xuICB3aWR0aDogMTAwJSAvICRmb250LXNjYWxlICsgJG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZGVkdXBlO1xuXG4gICRtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWRlZHVwZTogJG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZGVkdXBlICsgMC4wMDAwMSAhZ2xvYmFsO1xufVxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtb3V0bGluZS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLy8gVGhlIHVuaXQtbGVzcyBsaW5lLWhlaWdodCBmcm9tIHRoZSBmb250IGNvbmZpZy5cbiAgJGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgaW5wdXQpO1xuICAvLyBUaGUgYW1vdW50IHRvIHNjYWxlIHRoZSBmb250IGZvciB0aGUgZmxvYXRpbmcgbGFiZWwgYW5kIHN1YnNjcmlwdC5cbiAgJHN1YnNjcmlwdC1mb250LXNjYWxlOiAwLjc1O1xuICAvLyBUaGUgcGFkZGluZyBhYm92ZSBhbmQgYmVsb3cgdGhlIGluZml4LlxuICAkaW5maXgtcGFkZGluZzogMWVtO1xuICAvLyBUaGUgbWFyZ2luIGFwcGxpZWQgdG8gdGhlIGZvcm0tZmllbGQtaW5maXggdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsLlxuICAkaW5maXgtbWFyZ2luLXRvcDogMWVtICogJGxpbmUtaGVpZ2h0ICogJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuICAvLyBUaGUgc3BhY2UgYmV0d2VlbiB0aGUgYm90dG9tIG9mIHRoZSAubWF0LWZvcm0tZmllbGQtZmxleCBhcmVhIGFuZCB0aGUgc3Vic2NyaXB0IHdyYXBwZXIuXG4gIC8vIE1vY2tzIHNob3cgaGFsZiBvZiB0aGUgdGV4dCBzaXplLCBidXQgdGhpcyBtYXJnaW4gaXMgYXBwbGllZCB0byBhbiBlbGVtZW50IHdpdGggdGhlIHN1YnNjcmlwdFxuICAvLyB0ZXh0IGZvbnQgc2l6ZSwgc28gd2UgbmVlZCB0byBkaXZpZGUgYnkgdGhlIHNjYWxlIGZhY3RvciB0byBtYWtlIGl0IGhhbGYgb2YgdGhlIG9yaWdpbmFsIHRleHRcbiAgLy8gc2l6ZS5cbiAgJHN1YnNjcmlwdC1tYXJnaW4tdG9wOiAwLjVlbSAvICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcbiAgLy8gVGhlIHBhZGRpbmcgYXBwbGllZCB0byB0aGUgZm9ybS1maWVsZC13cmFwcGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBzdWJzY3JpcHQsIHNpbmNlIGl0J3NcbiAgLy8gYWJzb2x1dGVseSBwb3NpdGlvbmVkLiBUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgdGhlIHN1YnNjcmlwdCdzIG1hcmdpbiBhbmQgbGluZS1oZWlnaHQsIGJ1dCB3ZVxuICAvLyBuZWVkIHRvIG11bHRpcGx5IGJ5IHRoZSBzdWJzY3JpcHQgZm9udCBzY2FsZSBmYWN0b3Igc2luY2UgdGhlIHdyYXBwZXIgaGFzIGEgbGFyZ2VyIGZvbnQgc2l6ZS5cbiAgJHdyYXBwZXItcGFkZGluZy1ib3R0b206ICgkc3Vic2NyaXB0LW1hcmdpbi10b3AgKyAkbGluZS1oZWlnaHQpICogJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuICAvLyBUaGUgYW1vdW50IHdlIG9mZnNldCB0aGUgbGFiZWwgZnJvbSB0aGUgaW5wdXQgdGV4dCBpbiB0aGUgb3V0bGluZSBhcHBlYXJhbmNlLlxuICAkb3V0bGluZS1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldDogLTAuMjVlbTtcblxuICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIHtcbiAgICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgcGFkZGluZzogJGluZml4LXBhZGRpbmcgMCAkaW5maXgtcGFkZGluZyAwO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICB0b3A6ICRpbmZpeC1tYXJnaW4tdG9wICsgJGluZml4LXBhZGRpbmc7XG4gICAgICBtYXJnaW4tdG9wOiAkb3V0bGluZS1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldDtcbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCB7XG4gICAgICAmLm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsXG4gICAgICAubWF0LWlucHV0LXNlcnZlcjpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcgKyAkb3V0bGluZS1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldCxcbiAgICAgICAgICAgICAgICAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNlcnZlci1zaWRlIHJlbmRlcmVkIG1hdElucHV0IHdpdGggYSBsYWJlbCBhdHRyaWJ1dGUgYnV0IGxhYmVsIG5vdCBzaG93blxuICAgICAgLy8gKHVzZWQgYXMgYSBwdXJlIENTUyBzdGFuZC1pbiBmb3IgbWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0KS5cbiAgICAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXG4gICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtb3V0bGluZS1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nICsgJG91dGxpbmUtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQsXG4gICAgICAgICAgICAgICAgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuXG4vLyBUaGVtZSBzdHlsZXMgdGhhdCBvbmx5IGFwcGx5IHRvIHRoZSBzdGFuZGFyZCBhcHBlYXJhbmNlIG9mIHRoZSBmb3JtLWZpZWxkLlxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtc3RhbmRhcmQtdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG5cbiAgJHVuZGVybGluZS1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyLCBpZigkaXMtZGFyay10aGVtZSwgMC43LCAwLjQyKSk7XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQge1xuICAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1jb2xvcjtcbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUge1xuICAgICAgQGluY2x1ZGUgbWF0LWNvbnRyb2wtZGlzYWJsZWQtdW5kZXJsaW5lKCR1bmRlcmxpbmUtY29sb3IpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtc3RhbmRhcmQtdHlwb2dyYXBoeSgkY29uZmlnKSB7fVxuXG5cbi8vIFRoZW1lIHN0eWxlcyB0aGF0IGFwcGx5IHRvIGFsbCBhcHBlYXJhbmNlcyBvZiB0aGUgZm9ybS1maWVsZC5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG5cbiAgLy8gTGFiZWwgY29sb3JzLiBSZXF1aXJlZCBpcyB1c2VkIGZvciB0aGUgYCpgIHN0YXIgc2hvd24gaW4gdGhlIGxhYmVsLlxuICAkbGFiZWwtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjcsIDAuNikpO1xuICAkZm9jdXNlZC1sYWJlbC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCB0ZXh0KTtcbiAgJHJlcXVpcmVkLWxhYmVsLWNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgdGV4dCk7XG5cbiAgLy8gVW5kZXJsaW5lIGNvbG9ycy5cbiAgJHVuZGVybGluZS1jb2xvci1iYXNlOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIsIGlmKCRpcy1kYXJrLXRoZW1lLCAxLCAwLjg3KSk7XG4gICR1bmRlcmxpbmUtY29sb3ItYWNjZW50OiBtYXQtY29sb3IoJGFjY2VudCwgdGV4dCk7XG4gICR1bmRlcmxpbmUtY29sb3Itd2FybjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgJHVuZGVybGluZS1mb2N1c2VkLWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIHRleHQpO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgY29sb3I6ICRsYWJlbC1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtaGludCB7XG4gICAgY29sb3I6ICRsYWJlbC1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgIGNvbG9yOiAkZm9jdXNlZC1sYWJlbC1jb2xvcjtcblxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICBjb2xvcjogJHVuZGVybGluZS1jb2xvci1hY2NlbnQ7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBjb2xvcjogJHVuZGVybGluZS1jb2xvci13YXJuO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2VyIHtcbiAgICBjb2xvcjogJHJlcXVpcmVkLWxhYmVsLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1jb2xvci1iYXNlO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIHtcbiAgICAubWF0LWZvcm0tZmllbGQtcmlwcGxlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtZm9jdXNlZC1jb2xvcjtcblxuICAgICAgJi5tYXQtYWNjZW50IHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1jb2xvci1hY2NlbnQ7XG4gICAgICB9XG5cbiAgICAgICYubWF0LXdhcm4ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLXdhcm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQ6bm90KC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkKSB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlciB7XG4gICAgICBjb2xvcjogJHVuZGVybGluZS1mb2N1c2VkLWNvbG9yO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVyIHtcbiAgICAgIGNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLWFjY2VudDtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXIge1xuICAgICAgY29sb3I6ICR1bmRlcmxpbmUtY29sb3Itd2FybjtcbiAgICB9XG4gIH1cblxuICAvLyBTdHlsaW5nIGZvciB0aGUgZXJyb3Igc3RhdGUgb2YgdGhlIGZvcm0gZmllbGQuIE5vdGUgdGhhdCB3aGlsZSB0aGUgc2FtZSBjYW4gYmVcbiAgLy8gYWNoaWV2ZWQgd2l0aCB0aGUgbmctKiBjbGFzc2VzLCB3ZSB1c2UgdGhpcyBhcHByb2FjaCBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCB0aGUgc2FtZVxuICAvLyBsb2dpYyBpcyB1c2VkIHRvIHN0eWxlIHRoZSBlcnJvciBzdGF0ZSBhbmQgdG8gc2hvdyB0aGUgZXJyb3IgbWVzc2FnZXMuXG4gIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIHtcbiAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgY29sb3I6ICR1bmRlcmxpbmUtY29sb3Itd2FybjtcblxuICAgICAgJi5tYXQtYWNjZW50LFxuICAgICAgLm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlciB7XG4gICAgICAgIGNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLXdhcm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSxcbiAgICAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1jb2xvci13YXJuO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZXJyb3Ige1xuICAgIGNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLXdhcm47XG4gIH1cblxuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1sZWdhY3ktdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtc3RhbmRhcmQtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtZmlsbC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoZW1lKCR0aGVtZSk7XG59XG5cbi8vIFVzZWQgdG8gbWFrZSBpbnN0YW5jZXMgb2YgdGhlIF9tYXQtZm9ybS1maWVsZC1sYWJlbC1mbG9hdGluZyBtaXhpbiBuZWdsaWdpYmx5IGRpZmZlcmVudCxcbi8vIGFuZCBwcmV2ZW50IEdvb2dsZSdzIENTUyBPcHRpbWl6ZXIgZnJvbSBjb2xsYXBzaW5nIHRoZSBkZWNsYXJhdGlvbnMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugc29tZVxuLy8gb2YgdGhlIHNlbGVjdG9ycyBjb250YWluIHBzZXVkby1jbGFzc2VzIG5vdCByZWNvZ25pemVkIGluIGFsbCBicm93c2Vycy4gSWYgYSBicm93c2VyIGVuY291bnRlcnNcbi8vIGFuIHVua25vd24gcHNldWRvLWNsYXNzIGl0IHdpbGwgZGlzY2FyZCB0aGUgZW50aXJlIHJ1bGUgc2V0LlxuJG1hdC1mb3JtLWZpZWxkLWRlZHVwZTogMDtcblxuLy8gQXBwbGllcyBhIGZsb2F0aW5nIGxhYmVsIGFib3ZlIHRoZSBmb3JtIGZpZWxkIGNvbnRyb2wgaXRzZWxmLlxuQG1peGluIF9tYXQtZm9ybS1maWVsZC1sYWJlbC1mbG9hdGluZygkZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtJGluZml4LW1hcmdpbi10b3AgLSAkaW5maXgtcGFkZGluZyArICRtYXQtZm9ybS1maWVsZC1kZWR1cGUpXG4gICAgICAgICAgICAgc2NhbGUoJGZvbnQtc2NhbGUpO1xuICB3aWR0aDogMTAwJSAvICRmb250LXNjYWxlICsgJG1hdC1mb3JtLWZpZWxkLWRlZHVwZTtcblxuICAkbWF0LWZvcm0tZmllbGQtZGVkdXBlOiAkbWF0LWZvcm0tZmllbGQtZGVkdXBlICsgMC4wMDAwMSAhZ2xvYmFsO1xufVxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC8vIFRoZSB1bml0LWxlc3MgbGluZS1oZWlnaHQgZnJvbSB0aGUgZm9udCBjb25maWcuXG4gICRsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGlucHV0KTtcblxuICAvLyBUaGUgYW1vdW50IHRvIHNjYWxlIHRoZSBmb250IGZvciB0aGUgZmxvYXRpbmcgbGFiZWwgYW5kIHN1YnNjcmlwdC5cbiAgJHN1YnNjcmlwdC1mb250LXNjYWxlOiAwLjc1O1xuICAvLyBUaGUgYW1vdW50IHRvIHNjYWxlIHRoZSBmb250IGZvciB0aGUgcHJlZml4IGFuZCBzdWZmaXggaWNvbnMuXG4gICRwcmVmaXgtc3VmZml4LWljb24tZm9udC1zY2FsZTogMS41O1xuXG4gIC8vIFRoZSBwYWRkaW5nIG9uIHRoZSBpbmZpeC4gTW9ja3Mgc2hvdyBoYWxmIG9mIHRoZSB0ZXh0IHNpemUuXG4gICRpbmZpeC1wYWRkaW5nOiAwLjVlbTtcbiAgLy8gVGhlIG1hcmdpbiBhcHBsaWVkIHRvIHRoZSBmb3JtLWZpZWxkLWluZml4IHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBmbG9hdGluZyBsYWJlbC5cbiAgJGluZml4LW1hcmdpbi10b3A6IDFlbSAqICRsaW5lLWhlaWdodCAqICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcbiAgLy8gRm9udCBzaXplIHRvIHVzZSBmb3IgdGhlIGxhYmVsIGFuZCBzdWJzY3JpcHQgdGV4dC5cbiAgJHN1YnNjcmlwdC1mb250LXNpemU6ICRzdWJzY3JpcHQtZm9udC1zY2FsZSAqIDEwMCU7XG4gIC8vIEZvbnQgc2l6ZSB0byB1c2UgZm9yIHRoZSBmb3IgdGhlIHByZWZpeCBhbmQgc3VmZml4IGljb25zLlxuICAkcHJlZml4LXN1ZmZpeC1pY29uLWZvbnQtc2l6ZTogJHByZWZpeC1zdWZmaXgtaWNvbi1mb250LXNjYWxlICogMTAwJTtcbiAgLy8gVGhlIHNwYWNlIGJldHdlZW4gdGhlIGJvdHRvbSBvZiB0aGUgLm1hdC1mb3JtLWZpZWxkLWZsZXggYXJlYSBhbmQgdGhlIHN1YnNjcmlwdCB3cmFwcGVyLlxuICAvLyBNb2NrcyBzaG93IGhhbGYgb2YgdGhlIHRleHQgc2l6ZSwgYnV0IHRoaXMgbWFyZ2luIGlzIGFwcGxpZWQgdG8gYW4gZWxlbWVudCB3aXRoIHRoZSBzdWJzY3JpcHRcbiAgLy8gdGV4dCBmb250IHNpemUsIHNvIHdlIG5lZWQgdG8gZGl2aWRlIGJ5IHRoZSBzY2FsZSBmYWN0b3IgdG8gbWFrZSBpdCBoYWxmIG9mIHRoZSBvcmlnaW5hbCB0ZXh0XG4gIC8vIHNpemUuXG4gICRzdWJzY3JpcHQtbWFyZ2luLXRvcDogMC41ZW0gLyAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG4gIC8vIFRoZSBwYWRkaW5nIGFwcGxpZWQgdG8gdGhlIGZvcm0tZmllbGQtd3JhcHBlciB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgc3Vic2NyaXB0LCBzaW5jZSBpdCdzXG4gIC8vIGFic29sdXRlbHkgcG9zaXRpb25lZC4gVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBzdWJzY3JpcHQncyBtYXJnaW4gYW5kIGxpbmUtaGVpZ2h0LCBidXQgd2VcbiAgLy8gbmVlZCB0byBtdWx0aXBseSBieSB0aGUgc3Vic2NyaXB0IGZvbnQgc2NhbGUgZmFjdG9yIHNpbmNlIHRoZSB3cmFwcGVyIGhhcyBhIGxhcmdlciBmb250IHNpemUuXG4gICR3cmFwcGVyLXBhZGRpbmctYm90dG9tOiAoJHN1YnNjcmlwdC1tYXJnaW4tdG9wICsgJGxpbmUtaGVpZ2h0KSAqICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcblxuICAubWF0LWZvcm0tZmllbGQge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBpbnB1dCk7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtd3JhcHBlciB7XG4gICAgcGFkZGluZy1ib3R0b206ICR3cmFwcGVyLXBhZGRpbmctYm90dG9tO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCxcbiAgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCB7XG4gICAgLy8gQWxsb3cgaWNvbnMgaW4gYSBwcmVmaXggb3Igc3VmZml4IHRvIGFkYXB0IHRvIHRoZSBjb3JyZWN0IHNpemUuXG4gICAgLm1hdC1pY29uIHtcbiAgICAgIGZvbnQtc2l6ZTogJHByZWZpeC1zdWZmaXgtaWNvbi1mb250LXNpemU7XG4gICAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0O1xuICAgIH1cblxuICAgIC8vIEFsbG93IGljb24gYnV0dG9ucyBpbiBhIHByZWZpeCBvciBzdWZmaXggdG8gYWRhcHQgdG8gdGhlIGNvcnJlY3Qgc2l6ZS5cbiAgICAubWF0LWljb24tYnV0dG9uIHtcbiAgICAgIGhlaWdodDogJHByZWZpeC1zdWZmaXgtaWNvbi1mb250LXNjYWxlICogMWVtO1xuICAgICAgd2lkdGg6ICRwcmVmaXgtc3VmZml4LWljb24tZm9udC1zY2FsZSAqIDFlbTtcblxuICAgICAgLm1hdC1pY29uIHtcbiAgICAgICAgaGVpZ2h0OiAkbGluZS1oZWlnaHQgKiAxZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICBwYWRkaW5nOiAkaW5maXgtcGFkZGluZyAwO1xuICAgIC8vIFRocm93cyBvZmYgdGhlIGJhc2VsaW5lIGlmIHdlIGRvIGl0IGFzIGEgcmVhbCBtYXJnaW4sIHNvIHdlIGRvIGl0IGFzIGEgYm9yZGVyIGluc3RlYWQuXG4gICAgYm9yZGVyLXRvcDogJGluZml4LW1hcmdpbi10b3Agc29saWQgdHJhbnNwYXJlbnQ7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IHtcbiAgICAmLm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsXG4gICAgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgfVxuXG4gICAgLy8gU2VydmVyLXNpZGUgcmVuZGVyZWQgbWF0SW5wdXQgd2l0aCBhIGxhYmVsIGF0dHJpYnV0ZSBidXQgbGFiZWwgbm90IHNob3duXG4gICAgLy8gKHVzZWQgYXMgYSBwdXJlIENTUyBzdGFuZC1pbiBmb3IgbWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0KS5cbiAgICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlclxuICAgICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIge1xuICAgIHRvcDogLSRpbmZpeC1tYXJnaW4tdG9wO1xuICAgIHBhZGRpbmctdG9wOiAkaW5maXgtbWFyZ2luLXRvcDtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgdG9wOiAkaW5maXgtbWFyZ2luLXRvcCArICRpbmZpeC1wYWRkaW5nO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSB7XG4gICAgLy8gV2Ugd2FudCB0aGUgdW5kZXJsaW5lIHRvIHN0YXJ0IGF0IHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgYm94LCBub3QgdGhlIHBhZGRpbmcgYm94LFxuICAgIC8vIHNvIHdlIG1vdmUgaXQgdXAgYnkgdGhlIHBhZGRpbmcgYW1vdW50LlxuICAgIGJvdHRvbTogJHdyYXBwZXItcGFkZGluZy1ib3R0b207XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXIge1xuICAgIGZvbnQtc2l6ZTogJHN1YnNjcmlwdC1mb250LXNpemU7XG4gICAgbWFyZ2luLXRvcDogJHN1YnNjcmlwdC1tYXJnaW4tdG9wO1xuXG4gICAgLy8gV2Ugd2FudCB0aGUgc3Vic2NyaXB0IHRvIHN0YXJ0IGF0IHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgYm94LCBub3QgdGhlIHBhZGRpbmcgYm94LFxuICAgIC8vIHNvIHdlIG1vdmUgaXQgdXAgYnkgdGhlIHBhZGRpbmcgYW1vdW50IChhZGp1c3RlZCBmb3IgdGhlIHNtYWxsZXIgZm9udCBzaXplKTtcbiAgICB0b3A6IGNhbGMoMTAwJSAtICN7JHdyYXBwZXItcGFkZGluZy1ib3R0b20gLyAkc3Vic2NyaXB0LWZvbnQtc2NhbGV9KTtcbiAgfVxuXG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1zdGFuZGFyZC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1maWxsLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdHlwb2dyYXBoeSgkY29uZmlnKTtcbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LXRyZWUtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC10cmVlIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdjYXJkJyk7XG4gIH1cblxuICAubWF0LXRyZWUtbm9kZSxcbiAgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXRyZWUtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtdHJlZSB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtdHJlZS1ub2RlLFxuICAubWF0LW5lc3RlZC10cmVlLW5vZGUge1xuICAgIGZvbnQtd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0xKTtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKTtcbiAgfVxufVxuXG5cblxuLy8gSW5jbHVkZXMgYWxsIG9mIHRoZSB0eXBvZ3JhcGhpYyBzdHlsZXMuXG5AbWl4aW4gYW5ndWxhci1tYXRlcmlhbC10eXBvZ3JhcGh5KCRjb25maWc6IG51bGwpIHtcbiAgQGlmICRjb25maWcgPT0gbnVsbCB7XG4gICAgJGNvbmZpZzogbWF0LXR5cG9ncmFwaHktY29uZmlnKCk7XG4gIH1cblxuICBAaW5jbHVkZSBtYXQtYmFkZ2UtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWJhc2UtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWF1dG9jb21wbGV0ZS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtYm90dG9tLXNoZWV0LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1idXR0b24tdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWJ1dHRvbi10b2dnbGUtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWNhcmQtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWNoZWNrYm94LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1jaGlwcy10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtdGFibGUtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWRhdGVwaWNrZXItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWRpYWxvZy10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZXhwYW5zaW9uLXBhbmVsLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1ncmlkLWxpc3QtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWljb24tdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWlucHV0LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1tZW51LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1wYWdpbmF0b3ItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXByb2dyZXNzLWJhci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtcmFkaW8tdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXNlbGVjdC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtc2lkZW5hdi10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtc2xpZGUtdG9nZ2xlLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1zbGlkZXItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXN0ZXBwZXItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXNvcnQtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXRhYnMtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXRvb2xiYXItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXRvb2x0aXAtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWxpc3QtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LW9wdGlvbi10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtb3B0Z3JvdXAtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXNuYWNrLWJhci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtdHJlZS10eXBvZ3JhcGh5KCRjb25maWcpO1xufVxuXG5cbi8vIE1peGluIHRoYXQgcmVuZGVycyBhbGwgb2YgdGhlIGNvcmUgc3R5bGVzIHRoYXQgYXJlIG5vdCB0aGVtZS1kZXBlbmRlbnQuXG5AbWl4aW4gbWF0LWNvcmUoJHR5cG9ncmFwaHktY29uZmlnOiBudWxsKSB7XG4gIEBpbmNsdWRlIGFuZ3VsYXItbWF0ZXJpYWwtdHlwb2dyYXBoeSgkdHlwb2dyYXBoeS1jb25maWcpO1xuICBAaW5jbHVkZSBtYXQtcmlwcGxlKCk7XG4gIEBpbmNsdWRlIGNkay1hMTF5KCk7XG4gIEBpbmNsdWRlIGNkay1vdmVybGF5KCk7XG4gIEBpbmNsdWRlIGNkay10ZXh0LWZpZWxkKCk7XG59XG5cbi8vIE1peGluIHRoYXQgcmVuZGVycyBhbGwgb2YgdGhlIGNvcmUgc3R5bGVzIHRoYXQgZGVwZW5kIG9uIHRoZSB0aGVtZS5cbkBtaXhpbiBtYXQtY29yZS10aGVtZSgkdGhlbWUpIHtcbiAgQGluY2x1ZGUgbWF0LXJpcHBsZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtb3B0aW9uLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1vcHRncm91cC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtcHNldWRvLWNoZWNrYm94LXRoZW1lKCR0aGVtZSk7XG5cbiAgLy8gUHJvdmlkZXMgZXh0ZXJuYWwgQ1NTIGNsYXNzZXMgZm9yIGVhY2ggZWxldmF0aW9uIHZhbHVlLiBFYWNoIENTUyBjbGFzcyBpcyBmb3JtYXR0ZWQgYXNcbiAgLy8gYG1hdC1lbGV2YXRpb24teiR6VmFsdWVgIHdoZXJlIGAkelZhbHVlYCBjb3JyZXNwb25kcyB0byB0aGUgei1zcGFjZSB0byB3aGljaCB0aGUgZWxlbWVudCBpc1xuICAvLyBlbGV2YXRlZC5cbiAgQGZvciAkelZhbHVlIGZyb20gMCB0aHJvdWdoIDI0IHtcbiAgICAuI3skX21hdC1lbGV2YXRpb24tcHJlZml4fSN7JHpWYWx1ZX0ge1xuICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oJHpWYWx1ZSwgJHRoZW1lKTtcbiAgICB9XG4gIH1cblxuICAvLyBXcmFwcGVyIGVsZW1lbnQgdGhhdCBwcm92aWRlcyB0aGUgdGhlbWUgYmFja2dyb3VuZCB3aGVuIHRoZSB1c2VyJ3MgY29udGVudCBpc24ndFxuICAvLyBpbnNpZGUgb2YgYSBgbWF0LXNpZGVuYXYtY29udGFpbmVyYC4gTm90ZSB0aGF0IHdlIG5lZWQgdG8gZXhjbHVkZSB0aGUgYW1wZXJzYW5kXG4gIC8vIHNlbGVjdG9yIGluIGNhc2UgdGhlIG1peGluIGlzIGluY2x1ZGVkIGF0IHRoZSB0b3AgbGV2ZWwuXG4gIC5tYXQtYXBwLWJhY2tncm91bmQje2lmKCYsICcsICYubWF0LWFwcC1iYWNrZ3JvdW5kJywgJycpfSB7XG4gICAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxuXG4gIC8vIE1hcmtlciB0aGF0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHVzZXIgaGFzIGFkZGVkIGEgdGhlbWUgdG8gdGhlaXIgcGFnZS5cbiAgQGF0LXJvb3Qge1xuICAgIC5tYXQtdGhlbWUtbG9hZGVkLW1hcmtlciB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LWRpdmlkZXItdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1kaXZpZGVyIHtcbiAgICBib3JkZXItdG9wLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG5cbiAgLm1hdC1kaXZpZGVyLXZlcnRpY2FsIHtcbiAgICBib3JkZXItcmlnaHQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cbn1cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLy8gQ3JlYXRlIGEgdGhlbWUuXG5AbWl4aW4gYW5ndWxhci1tYXRlcmlhbC10aGVtZSgkdGhlbWUpIHtcbiAgQGluY2x1ZGUgbWF0LWNvcmUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWF1dG9jb21wbGV0ZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtYmFkZ2UtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWJvdHRvbS1zaGVldC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtYnV0dG9uLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1idXR0b24tdG9nZ2xlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1jYXJkLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1jaGVja2JveC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtY2hpcHMtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXRhYmxlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1kYXRlcGlja2VyLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1kaWFsb2ctdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWRpdmlkZXItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWV4cGFuc2lvbi1wYW5lbC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZ3JpZC1saXN0LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1pY29uLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1pbnB1dC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtbGlzdC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtbWVudS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtcGFnaW5hdG9yLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1wcm9ncmVzcy1iYXItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXByb2dyZXNzLXNwaW5uZXItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXJhZGlvLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1zZWxlY3QtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXNpZGVuYXYtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXNsaWRlLXRvZ2dsZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtc2xpZGVyLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1zdGVwcGVyLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1zb3J0LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC10YWJzLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC10b29sYmFyLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC10b29sdGlwLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC10cmVlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1zbmFjay1iYXItdGhlbWUoJHRoZW1lKTtcbn1cbiIsIkBpbXBvcnQgXCJtaXhpbnNcIjtcbkBpbXBvcnQgXCJ2YXJzXCI7XG5AaW1wb3J0IFwifkBhbmd1bGFyL21hdGVyaWFsL3RoZW1pbmdcIjtcblxuLm1jayB7XG4gICAgJi1pbmhlcml0IHtcbiAgICAgICAgJi1mb250IHtcbiAgICAgICAgICAgIC8vIHBhdGNoZXMgZ2xvYmFsIGZvbnQgc3R5bGluZyBkb25lIGJ5IGxlZ2FjeSB1aVxuICAgICAgICAgICAgZm9udDogaW5oZXJpdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtY29udGVudCB7XG4gICAgICAgICYtZXhwYW5kIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuXG4gICAgICAgICAgICAmLXdpZHRoIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi1oZWlnaHQge1xuICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtd2l0aC1mb290ZXItaGVpZ2h0IHtcbiAgICAgICAgICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDU4cHgpO1xuICAgICAgICB9XG5cbiAgICAgICAgJi1mdWxsLWhlaWdodCB7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMHZoO1xuICAgICAgICB9XG5cbiAgICAgICAgJi1wYWdlIHtcbiAgICAgICAgICAgIEBleHRlbmQgLm1jay1jb250ZW50LWV4cGFuZDtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICRwYWdlLWJhY2tncm91bmQtY29sb3I7XG5cbiAgICAgICAgICAgICYtY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICBAZXh0ZW5kIC5tY2stY29udGVudC1mdWxsLWhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtYm9keSB7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAyNHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1ncm91cCB7XG4gICAgICAgICAgICBAaW5jbHVkZSBwYWdlLXBhZGRpbmc7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcblxuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogNzU5cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXNoYWRvdyB7XG4gICAgICAgIEBpbmNsdWRlIG1hdC1lbGV2YXRpb24oMSk7XG4gICAgfVxuXG4gICAgJi1mbGV4LTEge1xuICAgICAgICBmbGV4OiAxO1xuICAgIH1cblxuICAgICYtcm93IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcblxuICAgICAgICAmLm1jay1jZW50ZXIge1xuICAgICAgICAgICAgJi1qdXN0aWZ5IHtcbiAgICAgICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi1hbGlnbiB7XG4gICAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGV4dGVuZCAubWNrLWNlbnRlci1qdXN0aWZ5O1xuICAgICAgICAgICAgQGV4dGVuZCAubWNrLWNlbnRlci1hbGlnbjtcbiAgICAgICAgfVxuXG4gICAgICAgICYubWNrLXN0cmV0Y2gge1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gICAgICAgIH1cblxuICAgICAgICAmLWZsb3cge1xuICAgICAgICAgICAgQGV4dGVuZCAubWNrLXJvdztcbiAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgfVxuXG4gICAgICAgICYubWNrLXNjcm9sbCB7XG4gICAgICAgICAgICBvdmVyZmxvdy14OiBzY3JvbGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWNvbHVtbiB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgICAgICAgJi5tY2stY2VudGVyIHtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgICYubWNrLXNwYWNlLWJldHdlZW4ge1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5tY2stc3RyZXRjaCB7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICAgICAgfVxuXG4gICAgICAgICYubWNrLXNjcm9sbCB7XG4gICAgICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgICAgICAgICBvdmVyZmxvdy15OiBvdmVybGF5O1xuICAgICAgICB9XG5cbiAgICAgICAgJi5tY2stZmxleC1lbmQge1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtb3ZlcmZsb3cge1xuICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICB9XG5cbiAgICAmLWJvcmRlcmVkLCAmLWlucHV0IHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzQ2NDY0NjtcbiAgICAgICAgfVxuXG4gICAgICAgICY6Zm9jdXMge1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgfVxuXG4gICAgICAgICZbZGlzYWJsZWQ9XCJ0cnVlXCJdIHtcbiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjZjBmMGYwO1xuICAgICAgICAgICAgY29sb3I6ICNjY2M7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWRhdGUtZGlzcGxheSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogNDNweDtcbiAgICAgICAgcGFkZGluZzogJHNwYWNpbmctc21hbGwgJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgdHJhbnNpdGlvbjogYm9yZGVyIDIwMG1zLCBib3gtc2hhZG93IDIwMG1zO1xuICAgIH1cblxuICAgICYtZm9ybS1pbnB1dCB7XG5cbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICAgICAgICAgICAgcGFkZGluZy1ib3R0b206ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgIH1cblxuICAgICAgICBtYXQtZm9ybS1maWVsZCB7XG4gICAgICAgICAgICBtaW4td2lkdGg6IGF1dG8gIWltcG9ydGFudDtcblxuICAgICAgICAgICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLXRvcDogMC43cmVtICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206ICRzcGFjaW5nLXh4c21hbGwgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICAgICAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDIuN3JlbTtcbiAgICAgICAgICAgICAgICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI3KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5tY2stY2VudGVyLXN1ZmZpeCB7XG4gICAgICAgICAgICAgICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgICAgICAgICAgICAgICAgQGV4dGVuZCAubWNrLXJvdztcbiAgICAgICAgICAgICAgICAgICAgQGV4dGVuZCAubWNrLWNlbnRlcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24ge1xuICAgICAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDJweDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAubWF0LWZvcm0tZmllbGQtZmxleCB7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMnJlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDJyZW07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBtYXQtZm9ybS1maWVsZC5tYXQtcyB7XG4gICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1zZWxlY3Qge1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogMC4ycmVtO1xuXG4gICAgICAgICAgICAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmIC5tYXQtc2VsZWN0LXZhbHVlID4gLm1hdC1zZWxlY3QtdmFsdWUtdGV4dCA+IHNwYW4ge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgICAgICAgICAvLyBjb2xvcjogIzMzMzMzMyAhaW1wb3J0YW50OyAvL1ItLS0gYmxvY2tzIGRpc2FibGVkIHN0YXRlIGNvbG9yXG4gICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Lm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsXG4gICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLFxuICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyO1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMXB4O1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAuYXZhaWxhYmxlIHtcbiAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lIHtcbiAgICAgICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCxcbiAgICAgICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLFxuICAgICAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICMzYWE1Mzc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLmJvb2tlZCB7XG4gICAgICAgICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gICAgICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Lm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsXG4gICAgICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcCxcbiAgICAgICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kIHtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjZTEyZTQxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIHtcbiAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LFxuICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcCxcbiAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogJHByaW1hcnk7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgID4gbWF0LWZvcm0tZmllbGQubWNrLWVycm9yIHtcbiAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICAvLyBsZXNzIGp1bXBpbmcgZm9yIGVycm9yIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lIHtcbiAgICAgICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCxcbiAgICAgICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLFxuICAgICAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICRlcnJvci1jb2xvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBtY2stY2xvc2UtaWNvbi5tYXQtY2hpcC1yZW1vdmUubWF0LWNoaXAtcmVtb3ZlIHtcbiAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1sYWJlbCB7XG4gICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbWF0LXJhZGlvLWJ1dHRvbiB7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLm1hdC1yYWRpby1sYWJlbC1jb250ZW50IHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgLm1hdC1yYWRpbyB7XG4gICAgICAgICAgICAmLW91dGVyLWNpcmNsZSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkcHJpbWFyeSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMXB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYtaW5uZXItY2lyY2xlIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbWF0LXJhZGlvLWdyb3VwIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuXG4gICAgICAgICAgICAmID4gbWF0LXJhZGlvLWJ1dHRvbjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWNvbnRhaW5lciB7XG4gICAgICAgICAgICA+IC5tY2stZm9ybS1pbnB1dCwgPiBtY2stc2VsZWN0IHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy14eHNtYWxsO1xuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy1tZWRpdW0tbGFyZ2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWNrLXJhZGlvLXNlbGVjdCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogJHNwYWNpbmctc21hbGw7XG5cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nLW1lZGl1bTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBtYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcCB7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgICAgICAgICBtaW4taGVpZ2h0OiAxLjVyZW07XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY2hpcC1jb2xvcjtcbiAgICAgICAgICAgIHBhZGRpbmctdG9wOiAkc3BhY2luZy1zbWFsbGVzdDtcbiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAkc3BhY2luZy1zbWFsbGVzdDtcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgICAgIEBpbmNsdWRlIGNoaXAtbGFiZWw7XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1jaGVja2JveCB7XG4gICAgICAgICAgICAmLm1hdC1jaGVja2JveC5tYXQtY2hlY2tib3gge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGNoZWNrYm94LWxhYmVsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkaXYubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5O1xuXG4gICAgICAgICAgICAgICAgJi5tY2stY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWRpc2FibGVkIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLm1jay1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtZGlzYWJsZWQge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGNoZWNrYm94LWxhYmVsO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkYm9yZGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1ib3JkZXJsZXNzIHtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuXG4gICAgICAgICY6aG92ZXIsICY6Zm9jdXMsICY6ZGlzYWJsZWQge1xuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1zZWxlY3QtcGFuZWwge1xuICAgICAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHVuc2V0ICFpbXBvcnRhbnQ7XG4gICAgICAgIG1hcmdpbi10b3A6IDM1cHggIWltcG9ydGFudDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcblxuICAgICAgICBtYXQtb3B0aW9uIHtcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG5cbiAgICAgICAgICAgICYubWF0LW9wdGlvbi10ZXh0IHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLm1jay1tYXJnaW4tdG9wIHtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6ICRzcGFjaW5nLW1lZGl1bSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1jaGVja2JveC1wYW5lbCB7XG4gICAgICAgICYubWF0LWF1dG9jb21wbGV0ZS1wYW5lbC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIHtcbiAgICAgICAgICAgIHRvcDogLTEwcHg7XG4gICAgICAgICAgICBtYXgtaGVpZ2h0OiAyNzhweDtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1vcHRpb24ubWNrLXRydW5jYXRlZCB7XG4gICAgICAgICAgICAmIC5tYXQtY2hlY2tib3gtbGFiZWwubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBtYXgtbGluZXMoMik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBtYXQtb3B0aW9uIHtcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMjRweDtcbiAgICAgICAgICAgIGhlaWdodDogdW5zZXQ7XG4gICAgICAgICAgICBtaW4taGVpZ2h0OiAzNnB4O1xuXG4gICAgICAgICAgICAmIC5tYXQtY2hlY2tib3gtbGFiZWwubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgICAgICAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmIC5tYXQtY2hlY2tib3gtbGFiZWwubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBjaGVja2JveC1sYWJlbDtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLm1jay1jaGVja2JveC1ncm91cC1oZWFkZXIge1xuICAgICAgICAgICAgICAgICYgLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5tY2stY2hlY2tib3gtZ3JvdXAtY2hpbGQge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAkc3BhY2luZy1sYXJnZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbWF0LWNoZWNrYm94IHtcbiAgICAgICAgICAgICAgICBsYWJlbC5tYXQtY2hlY2tib3gtbGF5b3V0IHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDJweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRpdi5tYXQtY2hlY2tib3gtZnJhbWUubWF0LWNoZWNrYm94LWZyYW1lIHtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgbWNrLWNoZWNrYm94LWJvcmRlcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmLm1hdC1jaGVja2JveC1jaGVja2VkIHtcbiAgICAgICAgICAgICAgICAgICAgZGl2Lm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJi5tY2stY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWRpc2FibGVkIHtcbiAgICAgICAgICAgICAgICAgICAgZGl2Lm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJi5tY2stY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWRpc2FibGVkIHtcbiAgICAgICAgICAgICAgICAgICAgJiAubWF0LWNoZWNrYm94LWxhYmVsLm1hdC1jaGVja2JveC1sYWJlbCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBjaGVja2JveC1sYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAkYm9yZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICRzcGFjaW5nLXNtYWxsLW1lZGl1bTtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAkc3BhY2luZy1zbWFsbC1tZWRpdW07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1zZWxlY3Qtb3B0aW9uIHtcbiAgICAgICAgJi1zZWxlY3RlZCB7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xuXG4gICAgICAgICAgICAubWNrLXNwYWNlci1jb250ZW50IHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6ICRzcGFjaW5nLXhzbWFsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtdW5zZWxlY3RlZCB7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG5cbiAgICAgICAgICAgICYubWNrLWlnbm9yZS1kaXNhYmxlZCB7XG4gICAgICAgICAgICAgICAgY29sb3I6IGJsYWNrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWNrLXNwYWNlci1jb250ZW50IHtcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAkc3BhY2luZy14c21hbGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWJ1dHRvbiB7XG4gICAgICAgICYubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLCAmLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ge1xuICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgICAgIEBleHRlbmQgLm1jay1jb2x1bW47XG4gICAgICAgICAgICBAZXh0ZW5kIC5tY2stY2VudGVyO1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG5cbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYgPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctc21hbGxlc3Q7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctc21hbGxlc3Q7XG4gICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG5cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYubWNrLXNob3J0IHtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgbWluLXdpZHRoOiA4M3B4O1xuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMTU1cHg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gc29tZSBjYXNlcyBidXR0b25zIGluIGRlc2t0b3AgYXJlIDQwIHZzIDQ4cHhcbiAgICAgICAgICAgICAgICAmLm1jay1zaG9ydC1oZWlnaHQge1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYubWNrLXNxdWFyZSB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgICAgICAgICAgIHdpZHRoOiAzMnB4O1xuICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMzJweDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogNDBweDtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtcHJpbWFyeS1idXR0b24ge1xuICAgICAgICBAZXh0ZW5kIC5tY2stYnV0dG9uO1xuXG4gICAgICAgICYubWF0LWJ1dHRvbi5tYXQtYnV0dG9uIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5O1xuXG4gICAgICAgICAgICAmW2Rpc2FibGVkXSwgJi5kaXNhYmxlZCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgICAgICAgICAgICAgY29sb3I6ICM3NTc1NzU7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcblxuICAgICAgICAgICAgICAgICYgPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjNzU3NTc1O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXNlY29uZGFyeS1idXR0b24ge1xuICAgICAgICBAZXh0ZW5kIC5tY2stYnV0dG9uO1xuXG4gICAgICAgICYubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiB7XG4gICAgICAgICAgICBAaW5jbHVkZSBtY2stdGhpbi1idXR0b24tYm9yZGVyO1xuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzIyNTFGRjtcbiAgICAgICAgICAgIGNvbG9yOiAjMjI1MUZGO1xuICAgICAgICAgICAgJltkaXNhYmxlZF0sICYuZGlzYWJsZWQge1xuICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgICAgICAgICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLm1hdC1idXR0b24ubWF0LWJ1dHRvbiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcblxuICAgICAgICAgICAgJiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogJGNoaXAtY29sb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXdhcm5pbmctYnV0dG9uIHtcbiAgICAgICAgQGV4dGVuZCAubWNrLWJ1dHRvbjtcblxuICAgICAgICAmLm1hdC1idXR0b24ubWF0LWJ1dHRvbiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3ItYnJhbmQteWVsbG93O1xuXG4gICAgICAgICAgICAmID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgIGNvbG9yOiBibGFjaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtc3Ryb2tlZC1idXR0b24ge1xuICAgICAgICBAZXh0ZW5kIC5tY2stYnV0dG9uO1xuXG4gICAgICAgICYubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiB7XG4gICAgICAgICAgICBAaW5jbHVkZSBtY2stYnV0dG9uLWJvcmRlcjtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLW1lZGl1bS1sYXJnZTtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLW1lZGl1bS1sYXJnZTtcblxuICAgICAgICAgICAgJi5tY2stc2hvcnQge1xuICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDgzcHg7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbGVzdDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbGVzdDtcblxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0OHB4O1xuICAgICAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDE1NXB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gcHJpbWFyeSBjb2xvcnNcbiAgICAgICAgICAgICYubWNrLXByaW1hcnkge1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMXB4O1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogJHByaW1hcnk7XG4gICAgICAgICAgICAgICAgY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLm1jay10aGluLWJvcmRlci1saWdodCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICAgICAgICAgICAgICBib3JkZXItd2lkdGg6IDFweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYgPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgICAgIGNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtdG9nZ2xlLWJ1dHRvbiB7XG4gICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICAgICAgbWluLXdpZHRoOiA1OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcblxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICBtaW4td2lkdGg6IDEzMnB4O1xuICAgICAgICAgICAgcGFkZGluZy10b3A6ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgfVxuXG4gICAgICAgICYtc2VsZWN0ZWQge1xuICAgICAgICAgICAgY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1kYXRlLXBpY2tlciB7XG4gICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xuXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgIG1heC13aWR0aDogMjNyZW07XG4gICAgICAgIH1cblxuICAgICAgICAmID4gLmhlYWRlci5oZWFkZXIge1xuICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICBjb2xvcjogJGZvcm0tbGFiZWw7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAkc3BhY2luZy1zbWFsbC1tZWRpdW07XG5cbiAgICAgICAgICAgICYgPiAuYXJyb3cuYXJyb3cge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAyLjM3NXJlbTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDJyZW07XG5cbiAgICAgICAgICAgICAgICAmID4gLmljb24uaWNvbiB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxcmVtO1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDFyZW07XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAmID4gLm5leHQubmV4dCB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnbGlicy91aS9zcmMvbGliL2ljb25zL2Fycm93LWZvcndhcmQuc3ZnJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJiA+IC5wcmV2aW91cy5wcmV2aW91cyB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnbGlicy91aS9zcmMvbGliL2ljb25zL2Fycm93LWJhY2t3YXJkLnN2ZycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgIH1cblxuICAgICAgICAmID4gLm1vbnRoIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICB9XG5cbiAgICAgICAgJiA+IC53ZWVrIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgY29sb3I6ICRzZWNvbmRhcnktbGFiZWw7XG4gICAgICAgIH1cblxuICAgICAgICAmID4gLmJvZHkge1xuICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcblxuICAgICAgICAgICAgJiA+IGRpdiA+IGRpdi5kYXRlIHtcbiAgICAgICAgICAgICAgICAmID4gLmRvdCB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJi5kaXNhYmxlZCB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJHNlY29uZGFyeS1sYWJlbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmLmFjdGl2ZSB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICYubm9uLW1vbnRoIHtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICRzZWNvbmRhcnktbGFiZWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1zcGFjZXItY29udGVudCB7XG4gICAgICAgICYtY29sbGFwc2UtdGFibGV0IHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZSh0YWJsZXQpIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1leHBhbmQtbW9iaWxlIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1kaXZpZGVyIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWV4cGFuc2lvbi1wYW5lbCB7XG4gICAgICAgICYubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIG1hdC1lbGV2YXRpb24oMCk7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICRzZWxlY3RlZC1vcHRpb247XG4gICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHNlbGVjdGVkLW9wdGlvbjtcblxuICAgICAgICAgICAgJi5tY2stZXhwYW5kZWQge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWNvbG9yO1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG5cbiAgICAgICAgICAgICAgICAmIC5tY2stY29sbGFwc2UtaWNvbiB7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICdjaGV2cm9uLWNsb3NlLnN2ZycpO1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBtY2staWNvbig0OHB4LCAnY2hldnJvbi1jbG9zZS1sYXJnZS5zdmcnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1hdC1leHBhbnNpb24tcGFuZWwtYm9keSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG5cbiAgICAgICAgICAgICAgICAmID4gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIHtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgYm9keS10aW55O1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbDtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYgbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xuXG4gICAgICAgICAgICAmID4gc3Bhbi5tYXQtY29udGVudCB7XG4gICAgICAgICAgICAgICAgLy8gY2VudGVyIHRleHQgYW5kIGljb25zXG4gICAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYgbWF0LXBhbmVsLXRpdGxlIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICAgICAgY29sb3I6IGJsYWNrO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5tY2stY29sbGFwc2UtaWNvbiB7XG4gICAgICAgICAgICBAaW5jbHVkZSBtY2staWNvbigyNHB4LCAnY2hldnJvbi1vcGVuLnN2ZycpO1xuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDQ4cHgsICdjaGV2cm9uLW9wZW4tbGFyZ2Uuc3ZnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICAgICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjVzIGVhc2U7XG4gICAgICAgICAgICAmLmV4cGFuZGVkIHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1pY29uLWZpbGwtb3BlbiB7XG4gICAgICAgIGZpbGw6ICRwcmltYXJ5O1xuICAgIH1cblxuICAgICYtaWNvbi1maWxsLWNsb3NlIHtcbiAgICAgICAgZmlsbDogJHNlY29uZGFyeS1sYWJlbDtcbiAgICB9XG5cbiAgICAmLWljb24tZmlsbC1ibGFjayB7XG4gICAgICAgIGZpbGw6IGJsYWNrO1xuICAgICAgICBzdHJva2U6IGJsYWNrO1xuICAgIH1cblxuICAgICYtaWNvbi1maWxsLXdoaXRlIHtcbiAgICAgICAgZmlsbDogd2hpdGU7XG4gICAgICAgIHN0cm9rZTogd2hpdGU7XG4gICAgfVxuXG4gICAgJi1pY29uLWZpbGwtZ3JheSB7XG4gICAgICAgIGZpbGw6ICMzMzMzMzM7XG4gICAgICAgIHN0cm9rZTogIzMzMzMzMztcbiAgICB9XG5cbiAgICAmLW1pbiB7XG4gICAgICAgIG1heC13aWR0aDogNTgxcHggIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDgwdnc7XG4gICAgICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIG1vZGFsIGludG8gYSBtb3JlICdmdWxsLXNjcmVlbicgYXBwZWFyYW5jZSBvbiBtb2JpbGUuXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG5cbiAgICAgICAgICAgIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1ub2V4cGFuZCB7XG4gICAgICAgIG1heC13aWR0aDogNTgxcHggIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDgwdncgIWltcG9ydGFudDtcbiAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgbW9kYWwgaW50byBhIG1vcmUgJ2Z1bGwtc2NyZWVuJyBhcHBlYXJhbmNlIG9uIG1vYmlsZS5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICB3aWR0aDogY2FsYygxMDB2dyAtIDMycHgpICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtbW9kYWwge1xuICAgICAgICBtYXgtd2lkdGg6IDgwMHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIHdpZHRoOiA4MHZ3O1xuICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBtb2RhbCBpbnRvIGEgbW9yZSAnZnVsbC1zY3JlZW4nIGFwcGVhcmFuY2Ugb24gbW9iaWxlLlxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDB2dztcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuXG4gICAgICAgICAgICAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtbW9kYWwtbWluaSB7XG4gICAgICAgIG1heC13aWR0aDogNTgwcHggIWltcG9ydGFudDtcbiAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgbW9kYWwgaW50byBhIG1vcmUgJ2Z1bGwtc2NyZWVuJyBhcHBlYXJhbmNlIG9uIG1vYmlsZS5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICB3aWR0aDogMTAwdnc7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcblxuICAgICAgICAgICAgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLW1vZGFsLXN1cnZleSB7XG4gICAgICAgIG1heC13aWR0aDogNjkxcHggIWltcG9ydGFudDtcbiAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgbW9kYWwgaW50byBhIG1vcmUgJ2Z1bGwtc2NyZWVuJyBhcHBlYXJhbmNlIG9uIG1vYmlsZS5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtbW9kYWwtd2lkZSB7XG4gICAgICAgIG1heC13aWR0aDogMTAyNHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIHdpZHRoOiAxMDB2dztcbiAgICAgICAgaGVpZ2h0OiA5NXZoO1xuICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuICAgICAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgIC5tYXQtaWNvbi1idXR0b25bbmFtZT1cIkNsb3NlQnV0dG9uXCJdIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgcmlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIC5jbG9zZS1pbWFnZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMzJweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIG1vZGFsIGludG8gYSBtb3JlICdmdWxsLXNjcmVlbicgYXBwZWFyYW5jZSBvbiBtb2JpbGUuXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgICAgICAgICAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgJi1tb2RhbC13aWRlLW1hbmFnZS1ib29raW5nIHtcbiAgICAgICAgbWF4LXdpZHRoOiAxMjUwcHggIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgICAvLyBoZWlnaHQ6IDk1dmg7XG4gICAgICAgIG1heC1oZWlnaHQ6IDk1dmg7XG4gICAgICAgIC5tYXQtZGlhbG9nLWNvbnRlbnQge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Y4RjlGQTtcbiAgICAgICAgICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAvLyBvdmVyZmxvdy15OiBoaWRkZW4gIWltcG9ydGFudDtcblxuICAgICAgICAgICAgLm1hdC1pY29uLWJ1dHRvbltuYW1lPVwiQ2xvc2VCdXR0b25cIl0ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICByaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLmNsb3NlLWltYWdlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMnB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgbW9kYWwgaW50byBhIG1vcmUgJ2Z1bGwtc2NyZWVuJyBhcHBlYXJhbmNlIG9uIG1vYmlsZS5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICB3aWR0aDogMTAwdnc7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgICAgIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICAmLWFsZXJ0IHtcbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDEwMHZ3ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB3aWR0aDogMTAwdnc7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogJHNwYWNpbmctc21hbGw7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgJi1iYWNrZHJvcCB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAkYWxlcnQtb3ZlcmxheS1iZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtc2xpZGUtdG9nZ2xlIHtcbiAgICAgICAgJi5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkOm5vdCgubWF0LWRpc2FibGVkKSB7XG4gICAgICAgICAgICAmIC5tYXQtc2xpZGUtdG9nZ2xlLWJhci5tYXQtc2xpZGUtdG9nZ2xlLWJhciB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnktaGlnaGxpZ2h0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi5tYXQtc2xpZGUtdG9nZ2xlIHtcbiAgICAgICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgfVxuXG4gICAgICAgIC5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnQubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50IHtcbiAgICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgICAgIEBpbmNsdWRlIG1heC1saW5lcygyKTtcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7XG4gICAgICAgIH1cblxuICAgICAgICAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iIHtcbiAgICAgICAgICAgIHdpZHRoOiAxNHB4O1xuICAgICAgICAgICAgaGVpZ2h0OiAxNHB4O1xuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoNTAlLCA1MCUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWItY29udGFpbmVyLm1hdC1zbGlkZS10b2dnbGUtdGh1bWItY29udGFpbmVyIHtcbiAgICAgICAgICAgIHRvcDogLTRweDtcbiAgICAgICAgICAgIGxlZnQ6IC00cHg7XG4gICAgICAgIH1cblxuICAgICAgICAubWF0LXNsaWRlLXRvZ2dsZS1iYXIubWF0LXNsaWRlLXRvZ2dsZS1iYXIge1xuICAgICAgICAgICAgaGVpZ2h0OiAyMHB4O1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1za2VsZXRvbiB7XG4gICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuXG4gICAgICAgICYtY2hlY2tib3gge1xuICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICB3aWR0aDogMjBweDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDIwcHg7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtaGVhZGVyID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICB3aWR0aDogMTAwdnc7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAyMTVweDtcbiAgICAgICAgfVxuXG4gICAgICAgICYtaW1hZ2UgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgIEBpbmNsdWRlIHBsYWNlaG9sZGVyLWltYWdlLXNpemU7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgJi1zdGF0dXMgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgIEBpbmNsdWRlIHBsYWNlaG9sZGVyLXN0YXR1cy1zaXplO1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgIH1cblxuICAgICAgICAmLWxpbmUtMSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgaGVpZ2h0OiAyM3B4O1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAxNzZweDtcblxuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMjE5cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWxpbmUtMiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAxNjVweDtcblxuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTg5cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWxpbmUtMyA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAxNDdweDtcblxuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTg5cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWxpbmUtMzBwLCAmLWxpbmUtMzBwLXRoaW4ge1xuICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMzAlO1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAzMCU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGluIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1saW5lLTQ1cCwgJi1saW5lLTQ1cC10aGluIHtcbiAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMThweDtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDQ1JTtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1heC13aWR0aDogNDUlO1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDQ1JTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLXRoaW4ge1xuICAgICAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWxpbmUtNTBwLCAmLWxpbmUtNTBwLXRoaW4sICYtbGluZS01MHAtdGhpY2sge1xuICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogNTAlO1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA1MCU7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNDUlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYtdGhpbiB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYtdGhpY2sge1xuICAgICAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWxpbmUtNjBwLCAmLWxpbmUtNjBwLXRoaW4sICYtbGluZS02MHAtdGhpY2sge1xuICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogNjAlO1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA2MCU7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMzUlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYtdGhpbiB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYtdGhpY2sge1xuICAgICAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWxpbmUtNzBwLCAmLWxpbmUtNzBwLXRoaW4sICYtbGluZS03MHAtdGhpY2sge1xuICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogNzAlO1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA3MCU7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMjUlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYtdGhpbiB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYtdGhpY2sge1xuICAgICAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWxpbmUtODBwLCAmLWxpbmUtODBwLXRoaW4sICYtbGluZS04MHAtdGhpY2sge1xuICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogODAlO1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA4MCU7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMTUlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYtdGhpbiB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYtdGhpY2sge1xuICAgICAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWxpbmUtOTBwLCAmLWxpbmUtOTBwLXRoaW4ge1xuICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogOTAlO1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA5MCU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGluIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1sb2FkLW1vcmUgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgIG1hcmdpbi10b3A6ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICAgICAgd2lkdGg6IGNhbGMoMTAwdncgLSAoMiAqICN7JHNwYWNpbmctc21hbGx9KSk7XG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XG5cbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDMyMHB4O1xuICAgICAgICAgICAgICAgIGhlaWdodDogNTBweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbG9hZC1tb3JlLTEwMHAsICYtaGVhZGVyLCAmLXJvb20tYXZhaWxhYmlsaXR5IHtcbiAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgICAgICAgICB3aWR0aDogY2FsYygxMDB2dyAtICgyICogI3skc3BhY2luZy1zbWFsbH0pKTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiBub25lO1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4LXdpZHRoOiBub25lO1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA1MHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAmLXJvb20tYXZhaWxhYmlsaXR5IHtcbiAgICAgICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDEyNHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cblxuICAgIH1cbn1cblxuXG4ubWNrIHtcbiAgICAmLWhlYWRpbmctNSB7XG4gICAgICAgIEBpbmNsdWRlIGhlYWRpbmctNTtcbiAgICB9XG59XG5cbm5neC1tYXQtc2VsZWN0LXNlYXJjaCB7XG4gICAgLm1hdC1zZWxlY3Qtc2VhcmNoLW5vLWVudHJpZXMtZm91bmQge1xuICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIH1cblxuICAgIC5tYXQtc2VsZWN0LXNlYXJjaC1pbnB1dCB7XG4gICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgfVxuXG4gICAgYnV0dG9uLm1hdC1idXR0b24ubWF0LXNlbGVjdC1zZWFyY2gtY2xlYXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgfVxufVxuXG46Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICB3aWR0aDogMTZweDtcbiAgICBoZWlnaHQ6IDE4cHg7XG59XG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgICBoZWlnaHQ6ICRzcGFjaW5nLW1lZGl1bTtcbiAgICBib3JkZXI6IDRweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDApO1xuICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzY3JvbGxiYXItY29sb3I7XG4gICAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAtMXB4IC0xcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4wNSksIGluc2V0IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG59XG46Oi13ZWJraXQtc2Nyb2xsYmFyLWJ1dHRvbiB7XG4gICAgd2lkdGg6IDA7XG4gICAgaGVpZ2h0OiAwO1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG46Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5oZWFkZXIge1xuICAgIHotaW5kZXg6IDI7XG59XG4ubWItYmxvY2sge1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG59XG4ubWItYm90dG9tIHtcbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDExMHB4O1xuICAgIH1cbn1cblxuLm1hcC1maWx0ZXJzLWNvbnRhaW5lciAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQge1xuICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICAgIHRvcDogNXB4O1xuICAgIH1cbiAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZXtcbiAgICAgICAgaGVpZ2h0OiA0OHB4O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgICBwYWRkaW5nLXRvcDogJHNwYWNpbmcteHhzbWFsbCAhaW1wb3J0YW50O1xuICAgIH1cbn1cblxuLm9mZmljZS1sZXZlbC1yb3d7XG5cbiAgICAubWF0LXNlbGVjdC1wbGFjZWhvbGRlcntcbiAgICAgICAgY29sb3I6ICMzMzMzMzM7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgIH1cblxuICAgIC5sZWdlbmQtY29udGFpbmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIGhlaWdodDogNDVweCAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLnNlbGVjdC1kaXZpZGVye1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgdG9wOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIHdpZHRoOiA0NHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIHJpZ2h0OiAtMTFweCAhaW1wb3J0YW50O1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICAgICAgICBib3JkZXItd2lkdGg6IDAgMCAwIDFweDtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjYzZjNmM2O1xuICAgICAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDFweCkgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5kaXNhYmxlZHtcbiAgICAgICAgLnNlbGVjdC1kaXZpZGVye1xuICAgICAgICAgICAgYmFja2dyb3VuZDogI0YwRjBGMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gMnB4KSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC5zZWxlY3QtY2hldnJvbntcbiAgICAgICAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4ub2ZmaWNlLWxldmVsLXJvdywgLm1hcC1jb250cm9sc3tcbiAgICAubGVnZW5kLWNvbnRhaW5lciAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xuICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW4gIWltcG9ydGFudDtcbiAgICB9XG59XG5cbi5ib29raW5nLWZvcm0tY29udGFpbmVyIHtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAzMTBweCk7XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgIG1heC1oZWlnaHQ6IG5vbmU7XG4gICAgfVxufVxuLmJvb2tpbmctZm9ybS1jb250YWluZXIgLm1jay1mb3JtLWlucHV0e1xuXG4gICAgbWF0LXNlbGVjdCB7XG4gICAgICAgICYgLm1hdC1zZWxlY3QtdmFsdWUgPiAubWF0LXNlbGVjdC12YWx1ZS10ZXh0ID4gc3BhbiB7XG4gICAgICAgICAgICAvLyBjb2xvcjogIzA1MWMyYyAhaW1wb3J0YW50OyAvL1ItLS0gYmxvY2tzIGRpc2FibGVkIHN0YXRlIGNvbG9yXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtYXQtbGFiZWwsIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudCB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zICFpbXBvcnRhbnQ7XG4gICAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgIH1cblxuICAgIGlucHV0LCBpbnB1dDo6cGxhY2Vob2xkZXJ7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgICAgICBjb2xvcjogI0IzQjNCMztcbiAgICB9XG59IiwiQGltcG9ydCBcImxpYnMvdWkvc3JjL2xpYi9zdHlsZXNcIjtcblxuZm9ybSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgIHBhZGRpbmc6IDAgMTBweDtcbiAgICB9XG59XG5cbi5tY2stcm93LWZsb3cge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgPmRpdiB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIG1pbi13aWR0aDogMTgwcHg7XG4gICAgICAgIGZsZXgtZmxvdzogY29sdW1uO1xuICAgIH1cbiAgICA+ZGl2Om50aC1jaGlsZCgyKSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAyMHB4O1xuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4uY29tcGFueS1jb250YWluZXJ7XG4gICAgPmRpdjpudGgtY2hpbGQoMikge1xuICAgICAgICBtYXJnaW4tbGVmdDogMHB4O1xuICAgIH1cbn1cblxuLnJvdy13aXRoLXNwYWNpbmcge1xuICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nLW1lZGl1bTtcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICBsYWJlbCB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgIH1cbiAgICBwIHtcbiAgICAgICAgY29sb3I6ICNlMTJlNDE7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgJi5jaGVja2luZyB7XG4gICAgICAgICAgICBjb2xvcjogIzAwMDAwMDtcbiAgICAgICAgfVxuICAgICAgICAmLmF2YWlsYWJsZSB7XG4gICAgICAgICAgICBjb2xvcjogIzNhYTUzNztcbiAgICAgICAgfVxuICAgICAgICAmLnNiLXN0YXR1cyB7XG4gICAgICAgICAgICBwYWRkaW5nOiAwIDEwcHggMCAzNHB4O1xuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgdG9wOiA0cHg7XG4gICAgICAgICAgICAgICAgbGVmdDogNHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4uZmxleC1yb3d7XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDFlbTtcbiAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgd2lkdGg6IDQ3JTtcbiAgICAgICAgICAgIG1pbi13aWR0aDogNDAlO1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICAgIGZsZXg6IG5vbmU7XG4gICAgICAgIH1cblxuICAgICAgICAuY29tcGFueS1maWVsZHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4uYXR0ZW5kZWVzLWlucHV0IHtcbiAgICBtYXJnaW4tcmlnaHQ6IDFlbTtcbiAgICBkaXNwbGF5OiBibG9jaztcbn1cblxubWF0LWhpbnQge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBzcGFuIHtcbiAgICAgICAgY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICBmb250LXNpemU6IDExcHg7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgfVxuICAgIC5oaW50IHtcbiAgICAgICAgd2lkdGg6IDQyOXB4O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjaztcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgICAgIHRvcDogMjZweDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgei1pbmRleDogMjtcbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgfVxuICAgICAgICAudHJpYW5nbGUge1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgdG9wOiAtNnB4O1xuICAgICAgICAgICAgbGVmdDogMTJweDtcbiAgICAgICAgICAgIHdpZHRoOiAxMnB4O1xuICAgICAgICAgICAgaGVpZ2h0OiAxMnB4O1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5tY2stZm9ybS1pbnB1dCB7XG4gICAgbWluLXdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi10b3A6IDEuMjVlbTtcbiAgICBtYXJnaW4tcmlnaHQ6IDFlbTtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICAgIG1hcmdpbi1ib3R0b206IC41ZW07XG4gICAgc3BhbiB7XG4gICAgICAgIGNvbG9yOiAjZDE0ODRmOy8vJHBlbmRpbmc7XG4gICAgfVxuICAgICYuZXJyb3Ige1xuICAgICAgICBjb2xvcjogJGVycm9yO1xuICAgIH1cbn1cblxubWF0LWZvcm0tZmllbGQge1xuICAgIGZsZXg6IDE7XG5cbiAgICAmLmJvb2tlZHtcbiAgICAgICAgY29sb3I6ICNkMTQ4NGY7XG4gICAgfVxuXG4gICAgJi5hdmFpbGFibGV7XG4gICAgICAgIGNvbG9yOiAjM2FhNTM3O1xuICAgIH1cbiAgICBpbnB1dCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgcGFkZGluZy10b3A6IDhweDtcbiAgICB9XG4gICAgbWF0LWVycm9yIHtcbiAgICAgICAgcGFkZGluZy10b3A6IDEycHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBoZWlnaHQ6IDQwcHg7XG4gICAgICAgIHNwYW4ge1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICBsZWZ0OiAxMHB4O1xuICAgICAgICAgICAgdG9wOiAycHg7XG4gICAgICAgIH1cbiAgICAgICAgLmVycm9yLWljb24ge1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgbGVmdDogLTEycHg7XG4gICAgICAgICAgICBAaW5jbHVkZSBtY2staWNvbigkaWNvbi1zbWFsbCwgJGFzc2V0OiAnZXJyb3ItY2xvc2Uuc3ZnJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuaWNvbiB7XG4gICAgICAgIHdpZHRoOiA4cHg7XG4gICAgfVxufVxuXG5tYXQtdGFiIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG5cbi5maWVsZCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBtaW4td2lkdGg6IDE0ZW07XG4gICAgZmxleDogMTtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG59XG5cbnRleHRhcmVhIHtcbiAgICBtaW4taGVpZ2h0OiA3ZW07XG59XG5cbi5maWVsZHNldCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG5cbiAgICAuZmllbGQge1xuICAgICAgICBtYXJnaW46IDAgLjI1ZW07XG5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIH1cblxuICAgICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmVycm9yIHtcbiAgICBjb2xvcjogJGVycm9yO1xufVxuXG4uZmxleC1jb250YWluZXJ7XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgIC5mdWxsLXdpZHRoe1xuICAgICAgICAgICAgbWluLXdpZHRoOiBjYWxjKDEwMCUgLSAxZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbWF0LWZvcm0tZmllbGQge1xuICAgICAgICA6Om5nLWRlZXAge1xuICAgICAgICAgICAgZGl2IGRpdiB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA0N3B4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19 */"] }); /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(RoomBookingDetailsFormComponent, [{ type: core_1.Component, args: [{ @@ -40332,7 +40669,7 @@ RoomBookingDetailsFormComponent.ɵcmp = i0.ɵɵdefineComponent({ type: RoomBooki templateUrl: './room-booking-details-form.component.html', styleUrls: ['./room-booking-details-form.component.scss'] }] - }], function () { return [{ type: i1.SpacesService }, { type: i2.MatSnackBar }, { type: i3.Store }, { type: i0.ViewContainerRef }, { type: i1.UsersService }]; }, { formRef: [{ + }], function () { return [{ type: i1.SpacesService }, { type: i2.MatSnackBar }, { type: i3.Store }, { type: i0.ViewContainerRef }, { type: i1.ApplicationService }, { type: i1.UsersService }]; }, { formRef: [{ type: core_1.ViewChild, args: ['formRef'] }], limit: [{ @@ -40376,16 +40713,17 @@ const cloneDeep = __webpack_require__(/*! lodash/cloneDeep */ "../../node_module const i0 = __webpack_require__(/*! @angular/core */ "../../node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); const i1 = __webpack_require__(/*! @ngrx/store */ "../../node_modules/@ngrx/store/__ivy_ngcc__/fesm2015/ngrx-store.js"); const i2 = __webpack_require__(/*! @angular/material/snack-bar */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/snack-bar.js"); -const i3 = __webpack_require__(/*! @angular/forms */ "../../node_modules/@angular/forms/__ivy_ngcc__/fesm2015/forms.js"); -const i4 = __webpack_require__(/*! ../../../../../../libs/ui/src/lib/auto-complete-chip-select-item/auto-complete-chip-select-item.component */ "../../libs/ui/src/lib/auto-complete-chip-select-item/auto-complete-chip-select-item.component.ts"); -const i5 = __webpack_require__(/*! @angular/common */ "../../node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js"); -const i6 = __webpack_require__(/*! ../../../../../../libs/ui/src/lib/date-tz-time-field/date-tz-time-field.component */ "../../libs/ui/src/lib/date-tz-time-field/date-tz-time-field.component.ts"); -const i7 = __webpack_require__(/*! ../../../../../../libs/ui/src/lib/spacer/spacer.component */ "../../libs/ui/src/lib/spacer/spacer.component.ts"); -const i8 = __webpack_require__(/*! ../../../../../../libs/ui/src/lib/date-tz-duration-field/date-tz-duration-field.component */ "../../libs/ui/src/lib/date-tz-duration-field/date-tz-duration-field.component.ts"); -const i9 = __webpack_require__(/*! @angular/material/slide-toggle */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/slide-toggle.js"); -const i10 = __webpack_require__(/*! ../../../../../../libs/ui/src/lib/radio-select/radio-select.component */ "../../libs/ui/src/lib/radio-select/radio-select.component.ts"); -const i11 = __webpack_require__(/*! ../../../../../../libs/ui/src/lib/date-tz-date-picker/date-tz-date-picker.component */ "../../libs/ui/src/lib/date-tz-date-picker/date-tz-date-picker.component.ts"); -const i12 = __webpack_require__(/*! ../../../../../../libs/ui/src/lib/recurrence-booking-form/recurrence-booking-form.component */ "../../libs/ui/src/lib/recurrence-booking-form/recurrence-booking-form.component.ts"); +const i3 = __webpack_require__(/*! @mckinsey-converge/data-common */ "../../libs/data-common/src/index.ts"); +const i4 = __webpack_require__(/*! @angular/forms */ "../../node_modules/@angular/forms/__ivy_ngcc__/fesm2015/forms.js"); +const i5 = __webpack_require__(/*! ../../../../../../libs/ui/src/lib/auto-complete-chip-select-item/auto-complete-chip-select-item.component */ "../../libs/ui/src/lib/auto-complete-chip-select-item/auto-complete-chip-select-item.component.ts"); +const i6 = __webpack_require__(/*! @angular/common */ "../../node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js"); +const i7 = __webpack_require__(/*! ../../../../../../libs/ui/src/lib/date-tz-time-field/date-tz-time-field.component */ "../../libs/ui/src/lib/date-tz-time-field/date-tz-time-field.component.ts"); +const i8 = __webpack_require__(/*! ../../../../../../libs/ui/src/lib/spacer/spacer.component */ "../../libs/ui/src/lib/spacer/spacer.component.ts"); +const i9 = __webpack_require__(/*! ../../../../../../libs/ui/src/lib/date-tz-duration-field/date-tz-duration-field.component */ "../../libs/ui/src/lib/date-tz-duration-field/date-tz-duration-field.component.ts"); +const i10 = __webpack_require__(/*! @angular/material/slide-toggle */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/slide-toggle.js"); +const i11 = __webpack_require__(/*! ../../../../../../libs/ui/src/lib/radio-select/radio-select.component */ "../../libs/ui/src/lib/radio-select/radio-select.component.ts"); +const i12 = __webpack_require__(/*! ../../../../../../libs/ui/src/lib/date-tz-date-picker/date-tz-date-picker.component */ "../../libs/ui/src/lib/date-tz-date-picker/date-tz-date-picker.component.ts"); +const i13 = __webpack_require__(/*! ../../../../../../libs/ui/src/lib/recurrence-booking-form/recurrence-booking-form.component */ "../../libs/ui/src/lib/recurrence-booking-form/recurrence-booking-form.component.ts"); const _c0 = ["formRef"]; function RoomBookingFormComponent_ng_template_0_date_tz_date_picker_4_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "date-tz-date-picker", 17); @@ -40480,10 +40818,11 @@ const _c2 = ["*"]; class RoomBookingFormComponent extends ui_1.BaseTemplateComponent { constructor(store, // private _service: ApplicationService, - vcRef, _snackBar) { + vcRef, _snackBar, _service) { super(vcRef); this.store = store; this._snackBar = _snackBar; + this._service = _service; this.submitForm = new core_1.EventEmitter(); this.showCancel = false; /** @@ -40585,7 +40924,7 @@ class RoomBookingFormComponent extends ui_1.BaseTemplateComponent { const formGroupData = this.formGroup.value; const is_past = this._checkDateInPast(); if (is_past) { - this.openSnackBar('Start Time updated to after current time, please click search again.', 'Close'); + this._service.notifyWarn('Start Time updated to after current time, please click search again.'); return; } else { @@ -40596,12 +40935,12 @@ class RoomBookingFormComponent extends ui_1.BaseTemplateComponent { this.submitForm.emit(this.formGroup.value); } } - openSnackBar(message, action) { - this._snackBar.open(message, action, { - duration: 5000, - panelClass: ['yellow-snackbar'] - }); - } + // public openSnackBar(message: string, action: string) { + // this._snackBar.open(message, action, { + // duration: 5000, + // panelClass: ['yellow-snackbar'] + // }); + // } // Fires when the location selector value is changed toggle(option) { // update the selected value @@ -40663,7 +41002,7 @@ class RoomBookingFormComponent extends ui_1.BaseTemplateComponent { } } exports.RoomBookingFormComponent = RoomBookingFormComponent; -RoomBookingFormComponent.ɵfac = function RoomBookingFormComponent_Factory(t) { return new (t || RoomBookingFormComponent)(i0.ɵɵdirectiveInject(i1.Store), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i2.MatSnackBar)); }; +RoomBookingFormComponent.ɵfac = function RoomBookingFormComponent_Factory(t) { return new (t || RoomBookingFormComponent)(i0.ɵɵdirectiveInject(i1.Store), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i2.MatSnackBar), i0.ɵɵdirectiveInject(i3.ApplicationService)); }; RoomBookingFormComponent.ɵcmp = i0.ɵɵdefineComponent({ type: RoomBookingFormComponent, selectors: [["app-room-booking-form"]], viewQuery: function RoomBookingFormComponent_Query(rf, ctx) { if (rf & 1) { i0.ɵɵviewQuery(_c0, true); } if (rf & 2) { @@ -40672,7 +41011,7 @@ RoomBookingFormComponent.ɵcmp = i0.ɵɵdefineComponent({ type: RoomBookingFormC } }, inputs: { showCancel: "showCancel", triggerSubmit: "triggerSubmit" }, outputs: { submitForm: "submitForm", cancelSubmit: "cancelSubmit" }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c2, decls: 1, vars: 0, consts: [[1, "mck-column", "mck-content-group", "mck-form-input-container", "booking-form-container", 3, "formGroup", "ngSubmit"], ["formRef", "ngForm"], ["errorMessage", "Location and office must be selected", "label", "Location and office", "placeHolder", "Start typing to filter location or office...", "formControlName", "location", 3, "required", "selectOnlyOneGroup", "options", "selectedOptions", "displayCTA", "optionSelected"], [1, "mck-row-flow"], ["label", "Date", "class", "mck-form-input time-inputs-calendar", "formControlName", "dateTz", 3, "fromDateTz", 4, "ngIf"], ["size", "16px", "spacerClass", "mck-spacer-content-collapse-tablet", 3, "mode", "autoSize", 4, "ngIf"], ["label", "Start time", "name", "start-time", 1, "time-inputs", 3, "required", "fromDateTz", "ngModel", "ngModelOptions", "ngModelChange"], ["size", "16px", 3, "mode", "autoSize"], ["label", "End time", "name", "end-time", 1, "time-inputs", 3, "startDateTz", "required", "ngModel", "ngModelOptions", "ngModelChange"], ["class", "coachmark", 4, "ngIf"], [1, "flex-column"], [1, "recurrence-siwch", "flex-row"], ["labelPosition", "after", "name", "recurrence", "formControlName", "is_recurrent", 1, "mck-slide-toggle"], [3, "form", 4, "ngIf"], ["label", "Booking type", "formControlName", "bookingType", 3, "required", "options"], ["label", "Select room size", "formControlName", "roomSize", 3, "required", "options"], ["size", "8px"], ["label", "Date", "formControlName", "dateTz", 1, "mck-form-input", "time-inputs-calendar", 3, "fromDateTz"], ["size", "16px", "spacerClass", "mck-spacer-content-collapse-tablet", 3, "mode", "autoSize"], [1, "coachmark"], [3, "form"]], template: function RoomBookingFormComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵprojectionDef(); i0.ɵɵtemplate(0, RoomBookingFormComponent_ng_template_0_Template, 19, 26, "ng-template"); - } }, directives: [i3.ɵangular_packages_forms_forms_y, i3.NgControlStatusGroup, i3.FormGroupDirective, i4.AutoCompleteChipSelectItemComponent, i3.NgControlStatus, i3.FormControlName, i3.RequiredValidator, i5.NgIf, i6.DateTzTimeFieldComponent, i3.NgModel, i7.SpacerComponent, i8.DateTzDurationFieldComponent, i9.MatSlideToggle, i10.RadioSelectComponent, i11.DateTzDatePickerComponent, i12.RecurringBookingForm], styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\n\n\n\n\n\n\n.recurrence-siwch[_ngcontent-%COMP%] {\n height: 65px;\n}\n.recurrence-siwch[_ngcontent-%COMP%] .mat-slide-toggle-content {\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif !important;\n color: #333333;\n}\n.time-inputs[_ngcontent-%COMP%], .time-inputs-calendar[_ngcontent-%COMP%] {\n flex: 1;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .time-inputs[_ngcontent-%COMP%], .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 176px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .time-inputs[_ngcontent-%COMP%], .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 176px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-bottom: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-bottom: 1rem;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-bottom: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-bottom: 1rem;\n }\n}\n.row-with-spacing[_ngcontent-%COMP%] {\n margin-bottom: 1.5rem;\n align-content: flex-start;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWJvb2tpbmctZm9ybS9yb29tLWJvb2tpbmctZm9ybS5jb21wb25lbnQuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9taXhpbnMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWJvb2tpbmctZm9ybS9yb29tLWJvb2tpbmctZm9ybS5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNwVUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQzVDQTs7c0JBQUE7QURkQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FFckRJO0VBQ0ksWUFBQTtBSnlDUjtBSXRDWTtFQUNJLGdIQUFBO0VBQ0EsY0FBQTtBSndDaEI7QUloQ0E7RUFDSSxPQUFBO0FKbUNKO0FDbERZO0VHY1o7SUFHUSxnQkFBQTtFSnFDTjtBQUNGO0FDdkRZO0VHY1o7SUFHUSxnQkFBQTtFSjBDTjtBQUNGO0FDeERZO0VHZ0JSO0lBR1EsZUFBQTtJQUNBLG1CTDRCSTtFQ2FkO0FBQ0Y7QUM5RFk7RUdnQlI7SUFHUSxlQUFBO0lBQ0EsbUJMNEJJO0VDbUJkO0FBQ0Y7QUMzRFE7RUdPSjtJQU9RLGVBQUE7SUFDQSxtQkx3Qkk7RUN5QmQ7QUFDRjtBQ2pFUTtFR09KO0lBT1EsZUFBQTtJQUNBLG1CTHdCSTtFQytCZDtBQUNGO0FJbkRBO0VBQ0kscUJMd0JhO0VLdkJiLHlCQUFBO0FKc0RKIiwiZmlsZSI6ImFwcHMvc3RhZmYvc3JjL2FwcC9ib29raW5nL3Jvb20tYm9va2luZy1mb3JtL3Jvb20tYm9va2luZy1mb3JtLmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiJHByaW1hcnk6ICMxRjQwRTY7XG4kZm9ybS1sYWJlbDogIzA1MUMyQztcbiRzZWNvbmRhcnktbGFiZWw6ICM3Njc2NzY7XG4kYm9yZGVyOiAjQjNCM0IzO1xuJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ6ICNEMEQwRDA7XG4kY2hpcC1jb2xvcjogIzMzMzMzMztcbiRwbGFjZWhvbGRlci1jb2xvcjogIzdGN0Y3RjtcbiRiYWNrZ3JvdW5kLWNvbG9yOiAjRjBGMEYwO1xuJHBhZ2UtYmFja2dyb3VuZC1jb2xvcjogI0Y4RjlGQTtcbiRzZWxlY3RlZC1vcHRpb246ICNFNkU2RTY7XG4kY29sb3ItYnJhbmQteWVsbG93OiAjZmZkMDQ4O1xuJGxpZ2h0LXllbGxvdzogI2ZmZjNjZTtcbiRjb2FjaG1hcmstdGV4dDogIzZmNGQwMDtcbiRlcnJvci1jb2xvcjogI0UxMkU0MDtcbiRuby1maWx0ZXJzLWNvbG9yOiAjQkNCQ0JDO1xuJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yOiAjRjRGNEY0O1xuJHByaW1hcnktaGlnaGxpZ2h0OiAjMjI1MUZGO1xuJHNjcm9sbGJhci1jb2xvcjogIzc1NzU3NTtcblxuJGF2YWlsYWJsZS1jb2xvcjogIzVEOUQ1MjtcbiRhdmFpbGFibGUtYnktcmVxdWVzdC1jb2xvcjogI0Y1QjUzRjtcbiRpbi11c2UtY29sb3I6ICNENDQ4M0U7XG4kbm90LWJvb2thYmxlLWNvbG9yOiAjQ0NDQ0NDO1xuXG4kbW9kYWwtYm9keS1oZWFkaW5nOiAjNEQ0RDREO1xuJGFsZXJ0LW92ZXJsYXktYmc6IHJnYmEoNSwgMjgsIDQ0LCAwLjg1KTtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG5cbiRwZW5kaW5nOiAjZmZiMzAwO1xuJHBlbmRpbmctbGlnaHQ6IGxpZ2h0ZW4oJHBlbmRpbmcsIDEwKTtcbiRwZW5kaW5nLWRhcms6IGRhcmtlbigkcGVuZGluZywgMTApO1xuXG4kZXJyb3I6ICNlNTM5MzU7XG4kZXJyb3ItbGlnaHQ6IGxpZ2h0ZW4oJGVycm9yLCAxMCk7XG4kZXJyb3ItZGFyazogZGFya2VuKCRlcnJvciwgMTApO1xuXG4kY29hY2htYXJrLWJnOiAjRUJFQkY2O1xuJGNvYWNobWFyay1kYXJrLXRleHQ6ICMxQjFCMTk7XG4kZXJyb3ItdGV4dDogI2ZmZjtcblxuLyoqXG4gKiBTcGFjaW5nXG4gKi9cblxuLy8gNHB4XG4kc3BhY2luZy1zbWFsbGVzdDogMC4yNXJlbTtcblxuLy8gOHB4XG4kc3BhY2luZy14eHNtYWxsOiAwLjVyZW07XG5cbi8vIDEycHhcbiRzcGFjaW5nLXhzbWFsbDogMC43NXJlbTtcblxuLy8gMTZweFxuJHNwYWNpbmctc21hbGw6IDFyZW07XG5cbi8vIDIwcHhcbiRzcGFjaW5nLXNtYWxsLW1lZGl1bTogMS4yNXJlbTtcblxuLy8gMjRweFxuJHNwYWNpbmctbWVkaXVtOiAxLjVyZW07XG5cbi8vIDI4cHhcbiRzcGFjaW5nLW1lZGl1bS1sYXJnZTogMS43NXJlbTtcblxuLy8gMzJweFxuJHNwYWNpbmctbGFyZ2U6IDJyZW07XG5cbi8vIDQ4cHhcbiRzcGFjaW5nLXhsYXJnZTogM3JlbTtcblxuLy8gNjRweFxuJHNwYWNpbmcteHhsYXJnZTogNHJlbTtcblxuLy8gOTZweFxuJHNwYWNpbmctbGFyZ2VzdDogNnJlbTtcblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbiRkZXZpY2UtbW9iaWxlLXNpemU6IDQ1MHB4O1xuJGRldmljZS10YWJsZXQtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhcHRvcC1zaXplOiAxMDI0cHg7XG5cbiRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplOiAxMDQ4cHg7XG4kZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZTogMTI4MHB4O1xuXG5cbjpleHBvcnQge1xuICAgIHByaW1hcnk6ICRwcmltYXJ5O1xuICAgIHNlY29uZGFyeUxhYmVsOiAkc2Vjb25kYXJ5LWxhYmVsO1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuJGljb24tc21hbGw6IDE2cHg7XG4kaWNvbi1tZWRpdW06IDI0cHg7XG4kaWNvbi1sYXJnZTogMzJweDtcbiRpY29uLXhsYXJnZTogNDhweDtcbiIsIi8qKlxuICogU3BhY2luZ1xuICovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbjpleHBvcnQge1xuICBwcmltYXJ5OiAjMUY0MEU2O1xuICBzZWNvbmRhcnlMYWJlbDogIzc2NzY3Njtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qKlxuICogTWFrZXMgdGV4dCBoYXZlIG1heGltdW0gbGluZXMgd2l0aCBlbGxpcHNpcy4gV29ya3Mgb24gbW9zdCBtb2Rlcm4gYnJvd3NlcnMgZXhjZXB0XG4gKiBvZiBGaXJlZm94Li5cbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4ucmVjdXJyZW5jZS1zaXdjaCB7XG4gIGhlaWdodDogNjVweDtcbn1cbi5yZWN1cnJlbmNlLXNpd2NoIDo6bmctZGVlcCAubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50IHtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmICFpbXBvcnRhbnQ7XG4gIGNvbG9yOiAjMzMzMzMzO1xufVxuXG4udGltZS1pbnB1dHMsIC50aW1lLWlucHV0cy1jYWxlbmRhciB7XG4gIGZsZXg6IDE7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAudGltZS1pbnB1dHMsIC50aW1lLWlucHV0cy1jYWxlbmRhciB7XG4gICAgbWluLXdpZHRoOiAxNzZweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC50aW1lLWlucHV0cywgLnRpbWUtaW5wdXRzLWNhbGVuZGFyIHtcbiAgICBtaW4td2lkdGg6IDE3NnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAudGltZS1pbnB1dHMtY2FsZW5kYXIge1xuICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLnRpbWUtaW5wdXRzLWNhbGVuZGFyIHtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAudGltZS1pbnB1dHMtY2FsZW5kYXIge1xuICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDQ4cHgpIHtcbiAgLnRpbWUtaW5wdXRzLWNhbGVuZGFyIHtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbiAgfVxufVxuXG4ucm93LXdpdGgtc3BhY2luZyB7XG4gIG1hcmdpbi1ib3R0b206IDEuNXJlbTtcbiAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDtcbn0iLCJAaW1wb3J0IFwidmFyc1wiO1xuXG5AbWl4aW4gcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkc2l6ZSwgJHF1YWxpZmllcikge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQGlmICgkcXVhbGlmaWVyID09IG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2UgaWYgKCRxdWFsaWZpZXIgPT0gbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1heC13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuQG1peGluIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkbWluLCAkbWF4KSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyB0aGlzIGlzIGEgY29weSBvZiByZXNwb25kLXRvLiB3ZSBkb24ndCB3YW50IHRvIHByZXNlcnZlIHRoYXQgbWV0aG9kIHNpbmNlIHRoZSBicmVha3BvaW50cyBtYXkgZGl2ZXJnZSBmcm9tIHRoZSBvbGQgVUkuXG5AbWl4aW4gaXMtc2NyZWVuLXNpemUoJG1lZGlhOiBhbGwsICRvcmllbnRhdGlvbjogbm9uZSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5cbkBtaXhpbiBwYWdlLXBhZGRpbmcge1xuICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctc21hbGw7XG4gICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctc21hbGw7XG59XG5cbi8vIEZvbnQgTWl4aW5zXG4kZm9udC1tY2tpbnNleS1zYW5zOiBcIk1jS2luc2V5IFNhbnNcIjtcbiRmb250LXRoZWluaGFyZHQ6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuJGZvbnQtYm93ZXI6IFwiQm93ZXJcIjtcblxuQG1peGluIGJvd2VyLWJvbGQge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1ib3dlcjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gbWNraW5zZXktc2FucyB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIGRpc3BsYXktMSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNHJlbTsgLy8gNjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODc7IC8vIDc2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTIge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTMge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2MHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNCB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDNyZW07IC8vIDQ4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNjY7IC8vIDU2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjRweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMwcHhcbiAgICBsaW5lLWhlaWdodDogMS44MzM7IC8vIDM0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY0MjsgLy8gNDBweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0xIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNDhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNzVyZW07IC8vIDQ0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA1MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0yIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjExMTsgLy8gNDRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDQ4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTMge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMjI7IC8vIDQ0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTUge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTYge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTU7IC8vIDI4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBib2R5LWRlZmF1bHQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjZweFxuICAgIH1cbn1cblxuLy8vIERvZXNudCBleGlzdCBpbiBNRFMuXG5AbWl4aW4gYm9keS10aW55IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTsgLy8gMTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDIwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBmb3JtLWxhYmVsIHtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC10aGVpbmhhcmR0O1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBjb2xvcjogJHBsYWNlaG9sZGVyLWNvbG9yO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG59XG5cbkBtaXhpbiBjaGlwLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gY2hlY2tib3gtbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICBjb2xvcjogYmxhY2s7XG59XG5cbi8vIGJvcmRlcnNcblxuQG1peGluIG1jay1jaGVja2JveC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stdGhpbi1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYm9yZGVyLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQtbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlci1saWdodDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cblxuLy8gZnVuY3Rpb25zXG5cbi8qKlxuICogTWFrZXMgdGV4dCBoYXZlIG1heGltdW0gbGluZXMgd2l0aCBlbGxpcHNpcy4gV29ya3Mgb24gbW9zdCBtb2Rlcm4gYnJvd3NlcnMgZXhjZXB0XG4gKiBvZiBGaXJlZm94Li5cbiAqL1xuQG1peGluIG1heC1saW5lcygkY291bnQpIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIC13ZWJraXQtbGluZS1jbGFtcDogJGNvdW50O1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG59XG5cbi8vIGltYWdlc1xuQG1peGluIG1jay1pY29uKCR3aWR0aCwgJGFzc2V0LCAkaGVpZ2h0OiAkd2lkdGgsICAkYXNzZXRQYXRoOiBcImxpYnMvdWkvc3JjL2xpYi9pY29uc1wiLCkge1xuICAgIHdpZHRoOiAkd2lkdGg7XG4gICAgaGVpZ2h0OiAkaGVpZ2h0O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiN7JGFzc2V0UGF0aH0vI3skYXNzZXR9XCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbn1cblxuXG5AbWl4aW4gbWNrLXNtYWxsLWljb24oJG1vYmlsZS1hc3NldCwgJGRlc2t0b3AtYXNzZXQ6ICRtb2JpbGUtYXNzZXQpIHtcbiAgICBAaW5jbHVkZSBtY2staWNvbigxNnB4LCAkYXNzZXQ6ICRtb2JpbGUtYXNzZXQpO1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBAaW5jbHVkZSBtY2staWNvbigyNHB4LCAkYXNzZXQ6ICRkZXNrdG9wLWFzc2V0KTtcbiAgICB9XG59XG5cbi8vIHNrZWxldG9uXG5AbWl4aW4gc2tlbGV0b24tYmcge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1pbWFnZS1zaXplIHtcbiAgICB3aWR0aDogODFweDtcbiAgICBoZWlnaHQ6IDgycHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAyMTlweDtcbiAgICAgICAgaGVpZ2h0OiAxMTlweDtcbiAgICB9XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1zdGF0dXMtc2l6ZSB7XG4gICAgd2lkdGg6IDExN3B4O1xuICAgIGhlaWdodDogNzhweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDExN3B4O1xuICAgICAgICBoZWlnaHQ6IDc4cHg7XG4gICAgfVxufVxuIiwiLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kY29sb3ItYnJhbmQtZWxlY3RyaWMtYmx1ZTogIzIyNTFmZjtcbiRjb2xvci1icmFuZC1kZWVwLWJsdWU6ICMwNTFjMmM7XG4kY29sb3ItYnJhbmQtY3lhbjogIzAwYTlmNDtcblxuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRmb250LWRhcms6ICMwMDA7XG4kZm9udC1saWdodDogI2ZmZjtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG4kZ3JlZW4xOiAjMjE5NjUzO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvbG9yLXByaW1hcnk6ICMxOTM3ZWE7XG4kY29sb3ItcHJpbWFyeS1saWdodDogbGlnaHRlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuJGNvbG9yLXByaW1hcnktZGFyazogZGFya2VuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG5cbiRjb2xvci1zZWNvbmRhcnk6ICM0Mjg1RjQ7XG4kY29sb3Itc2Vjb25kYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcbiRjb2xvci1zZWNvbmRhcnktZGFyazogZGFya2VuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcblxuJGJhY2tncm91bmQ6ICNmMGYwZjA7XG4kZm9vdGVyLWJhY2s6ICMyNjMyMzg7XG4kaGVhZGVyLWJhY2s6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzA1MUMyQywgIzA1MUMyQyA0MCUsICMwQjI0NTMgNjAlLCAjMUY0MEU2IDEwMCUpO1xuXG4kY29sb3ItdGVybmFyeTogIzA1MWMyYztcblxuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG5cbiRmb250LXN0YWNrOiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcblxuJGhlYWRpbmctZm9udDogXCJMYXJpc2hNY0tpbnNleVwiLCAnR2VvcmdpYScsIHNlcmlmO1xuJGZvbnQ6ICRmb250LXN0YWNrO1xuXG4kZm9udC1mYW1pbHktcHJpbWFyeTogXCJNY0tpbnNleSBTYW5zXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQ2FsaWJyaSwgQ29yYmVsLCBIZWx2ZXRpY2EsIFJvYm90bywgRHJvaWQsIHNhbnMtc2VyaWY7XG4kZm9udC1mYW1pbHktc2Vjb25kYXJ5OiBcIkJvd2VyXCIsIEdlb3JnaWEsIFwiVGltZXMgTmV3IFJvbWFuXCIgc2VyaWY7XG5cbiRiYXNlLXNpemU6IDE2cHg7XG4kdGFibGV0LXNpemU6IDE2cHg7XG4kbW9iaWxlLXNpemU6IDE2cHg7XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kYnJlYWstbW9iaWxlOiA0NTBweDtcbiRicmVhay10YWJsZXQ6IDgwMHB4O1xuJGJyZWFrLWxhcHRvcDogMTAyNHB4O1xuXG4kYnJlYWstbGFuZHNjYXBlLW1vYmlsZTogODAwcHg7XG4kYnJlYWstbGFuZHNjYXBlLXRhYmxldDogMTA0OHB4O1xuJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3A6IDEyODBweDtcbiIsIkBpbXBvcnQgJy4vdmFyaWFibGVzJztcblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5AbWl4aW4gYm94LXNoYWRvdygkY29sb3I6ICMwMDAsICRkZXB0aDogMSkge1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCAxcHggKiAoJGRlcHRoIC0gMSkgcmdiYSgjMDAwLCAuMiksXG4gICAgICAgICAgICAgICAgMCAxcHggMXB4IDAgcmdiYSgjMDAwLCAuMTQpLFxuICAgICAgICAgICAgICAgIDAgMnB4IDFweCAtMXB4IHJnYmEoIzAwMCwgLjEyKTtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbkBtaXhpbiByZXNwb25kLXRvKCRtZWRpYSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSAgQGVsc2UgaWYgJG1lZGlhID09IGxhdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfUBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJAaW1wb3J0IFwibGlicy91aS9zcmMvbGliL21peGluc1wiO1xuQGltcG9ydCAnbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zJztcbkBpbXBvcnQgJ2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcyc7XG5cbi8vIDpob3N0e1xuICAgIC5yZWN1cnJlbmNlLXNpd2Noe1xuICAgICAgICBoZWlnaHQ6IDY1cHg7XG4gICAgICAgIC8vIG1hcmdpbi1ib3R0b206IDAuNWVtO1xuICAgICAgICA6Om5nLWRlZXAge1xuICAgICAgICAgICAgLm1hdC1zbGlkZS10b2dnbGUtY29udGVudHtcbiAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LXByaW1hcnkgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbi8vIH1cblxuXG5cbi50aW1lLWlucHV0cyB7XG4gICAgZmxleDogMTtcbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIG1pbi13aWR0aDogMTc2cHg7XG4gICAgfVxuXG4gICAgJi1jYWxlbmRhciB7XG4gICAgICAgIEBleHRlbmQgLnRpbWUtaW5wdXRzO1xuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nLXNtYWxsO1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKHRhYmxldCkge1xuICAgICAgICAgICAgbWluLXdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogJHNwYWNpbmctc21hbGw7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5yb3ctd2l0aC1zcGFjaW5nIHtcbiAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy1tZWRpdW07XG4gICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDtcbn1cblxuXG5cbiJdfQ== */"] }); + } }, directives: [i4.ɵangular_packages_forms_forms_y, i4.NgControlStatusGroup, i4.FormGroupDirective, i5.AutoCompleteChipSelectItemComponent, i4.NgControlStatus, i4.FormControlName, i4.RequiredValidator, i6.NgIf, i7.DateTzTimeFieldComponent, i4.NgModel, i8.SpacerComponent, i9.DateTzDurationFieldComponent, i10.MatSlideToggle, i11.RadioSelectComponent, i12.DateTzDatePickerComponent, i13.RecurringBookingForm], styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\n\n\n\n\n\n\n.recurrence-siwch[_ngcontent-%COMP%] {\n height: 65px;\n}\n.recurrence-siwch[_ngcontent-%COMP%] .mat-slide-toggle-content {\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif !important;\n color: #333333;\n}\n.time-inputs[_ngcontent-%COMP%], .time-inputs-calendar[_ngcontent-%COMP%] {\n flex: 1;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .time-inputs[_ngcontent-%COMP%], .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 176px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .time-inputs[_ngcontent-%COMP%], .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 176px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-bottom: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-bottom: 1rem;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-bottom: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-bottom: 1rem;\n }\n}\n.row-with-spacing[_ngcontent-%COMP%] {\n margin-bottom: 1.5rem;\n align-content: flex-start;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWJvb2tpbmctZm9ybS9yb29tLWJvb2tpbmctZm9ybS5jb21wb25lbnQuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9taXhpbnMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWJvb2tpbmctZm9ybS9yb29tLWJvb2tpbmctZm9ybS5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNwVUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQzVDQTs7c0JBQUE7QURkQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FFckRJO0VBQ0ksWUFBQTtBSnlDUjtBSXRDWTtFQUNJLGdIQUFBO0VBQ0EsY0FBQTtBSndDaEI7QUloQ0E7RUFDSSxPQUFBO0FKbUNKO0FDbERZO0VHY1o7SUFHUSxnQkFBQTtFSnFDTjtBQUNGO0FDdkRZO0VHY1o7SUFHUSxnQkFBQTtFSjBDTjtBQUNGO0FDeERZO0VHZ0JSO0lBR1EsZUFBQTtJQUNBLG1CTDRCSTtFQ2FkO0FBQ0Y7QUM5RFk7RUdnQlI7SUFHUSxlQUFBO0lBQ0EsbUJMNEJJO0VDbUJkO0FBQ0Y7QUMzRFE7RUdPSjtJQU9RLGVBQUE7SUFDQSxtQkx3Qkk7RUN5QmQ7QUFDRjtBQ2pFUTtFR09KO0lBT1EsZUFBQTtJQUNBLG1CTHdCSTtFQytCZDtBQUNGO0FJbkRBO0VBQ0kscUJMd0JhO0VLdkJiLHlCQUFBO0FKc0RKIiwiZmlsZSI6ImFwcHMvc3RhZmYvc3JjL2FwcC9ib29raW5nL3Jvb20tYm9va2luZy1mb3JtL3Jvb20tYm9va2luZy1mb3JtLmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiJHByaW1hcnk6ICMxRjQwRTY7XG4kZm9ybS1sYWJlbDogIzA1MUMyQztcbiRzZWNvbmRhcnktbGFiZWw6ICM3Njc2NzY7XG4kYm9yZGVyOiAjQjNCM0IzO1xuJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ6ICNEMEQwRDA7XG4kY2hpcC1jb2xvcjogIzMzMzMzMztcbiRwbGFjZWhvbGRlci1jb2xvcjogIzdGN0Y3RjtcbiRiYWNrZ3JvdW5kLWNvbG9yOiAjRjBGMEYwO1xuJHBhZ2UtYmFja2dyb3VuZC1jb2xvcjogI0Y4RjlGQTtcbiRzZWxlY3RlZC1vcHRpb246ICNFNkU2RTY7XG4kY29sb3ItYnJhbmQteWVsbG93OiAjZmZkMDQ4O1xuJGxpZ2h0LXllbGxvdzogI2ZmZjNjZTtcbiRjb2FjaG1hcmstdGV4dDogIzZmNGQwMDtcbiRlcnJvci1jb2xvcjogI0UxMkU0MDtcbiRuby1maWx0ZXJzLWNvbG9yOiAjQkNCQ0JDO1xuJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yOiAjRjRGNEY0O1xuJHByaW1hcnktaGlnaGxpZ2h0OiAjMjI1MUZGO1xuJHNjcm9sbGJhci1jb2xvcjogIzc1NzU3NTtcblxuJGF2YWlsYWJsZS1jb2xvcjogIzVEOUQ1MjtcbiRhdmFpbGFibGUtYnktcmVxdWVzdC1jb2xvcjogI0Y1QjUzRjtcbiRpbi11c2UtY29sb3I6ICNENDQ4M0U7XG4kbm90LWJvb2thYmxlLWNvbG9yOiAjQ0NDQ0NDO1xuXG4kbW9kYWwtYm9keS1oZWFkaW5nOiAjNEQ0RDREO1xuJGFsZXJ0LW92ZXJsYXktYmc6IHJnYmEoNSwgMjgsIDQ0LCAwLjg1KTtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG5cbiRwZW5kaW5nOiAjZmZiMzAwO1xuJHBlbmRpbmctbGlnaHQ6IGxpZ2h0ZW4oJHBlbmRpbmcsIDEwKTtcbiRwZW5kaW5nLWRhcms6IGRhcmtlbigkcGVuZGluZywgMTApO1xuXG4kZXJyb3I6ICNlNTM5MzU7XG4kZXJyb3ItbGlnaHQ6IGxpZ2h0ZW4oJGVycm9yLCAxMCk7XG4kZXJyb3ItZGFyazogZGFya2VuKCRlcnJvciwgMTApO1xuXG4kY29hY2htYXJrLWJnOiAjRUJFQkY2O1xuJGNvYWNobWFyay1kYXJrLXRleHQ6ICMxQjFCMTk7XG4kZXJyb3ItdGV4dDogI2ZmZjtcblxuLyoqXG4gKiBTcGFjaW5nXG4gKi9cblxuLy8gNHB4XG4kc3BhY2luZy1zbWFsbGVzdDogMC4yNXJlbTtcblxuLy8gOHB4XG4kc3BhY2luZy14eHNtYWxsOiAwLjVyZW07XG5cbi8vIDEycHhcbiRzcGFjaW5nLXhzbWFsbDogMC43NXJlbTtcblxuLy8gMTZweFxuJHNwYWNpbmctc21hbGw6IDFyZW07XG5cbi8vIDIwcHhcbiRzcGFjaW5nLXNtYWxsLW1lZGl1bTogMS4yNXJlbTtcblxuLy8gMjRweFxuJHNwYWNpbmctbWVkaXVtOiAxLjVyZW07XG5cbi8vIDI4cHhcbiRzcGFjaW5nLW1lZGl1bS1sYXJnZTogMS43NXJlbTtcblxuLy8gMzJweFxuJHNwYWNpbmctbGFyZ2U6IDJyZW07XG5cbi8vIDQ4cHhcbiRzcGFjaW5nLXhsYXJnZTogM3JlbTtcblxuLy8gNjRweFxuJHNwYWNpbmcteHhsYXJnZTogNHJlbTtcblxuLy8gOTZweFxuJHNwYWNpbmctbGFyZ2VzdDogNnJlbTtcblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbiRkZXZpY2UtbW9iaWxlLXNpemU6IDQ1MHB4O1xuJGRldmljZS10YWJsZXQtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhcHRvcC1zaXplOiAxMDI0cHg7XG5cbiRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplOiAxMDQ4cHg7XG4kZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZTogMTI4MHB4O1xuXG5cbjpleHBvcnQge1xuICAgIHByaW1hcnk6ICRwcmltYXJ5O1xuICAgIHNlY29uZGFyeUxhYmVsOiAkc2Vjb25kYXJ5LWxhYmVsO1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuJGljb24tc21hbGw6IDE2cHg7XG4kaWNvbi1tZWRpdW06IDI0cHg7XG4kaWNvbi1sYXJnZTogMzJweDtcbiRpY29uLXhsYXJnZTogNDhweDtcbiIsIi8qKlxuICogU3BhY2luZ1xuICovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbjpleHBvcnQge1xuICBwcmltYXJ5OiAjMUY0MEU2O1xuICBzZWNvbmRhcnlMYWJlbDogIzc2NzY3Njtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qKlxuICogTWFrZXMgdGV4dCBoYXZlIG1heGltdW0gbGluZXMgd2l0aCBlbGxpcHNpcy4gV29ya3Mgb24gbW9zdCBtb2Rlcm4gYnJvd3NlcnMgZXhjZXB0XG4gKiBvZiBGaXJlZm94Li5cbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4ucmVjdXJyZW5jZS1zaXdjaCB7XG4gIGhlaWdodDogNjVweDtcbn1cbi5yZWN1cnJlbmNlLXNpd2NoIDo6bmctZGVlcCAubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50IHtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmICFpbXBvcnRhbnQ7XG4gIGNvbG9yOiAjMzMzMzMzO1xufVxuXG4udGltZS1pbnB1dHMsIC50aW1lLWlucHV0cy1jYWxlbmRhciB7XG4gIGZsZXg6IDE7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAudGltZS1pbnB1dHMsIC50aW1lLWlucHV0cy1jYWxlbmRhciB7XG4gICAgbWluLXdpZHRoOiAxNzZweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC50aW1lLWlucHV0cywgLnRpbWUtaW5wdXRzLWNhbGVuZGFyIHtcbiAgICBtaW4td2lkdGg6IDE3NnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAudGltZS1pbnB1dHMtY2FsZW5kYXIge1xuICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLnRpbWUtaW5wdXRzLWNhbGVuZGFyIHtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAudGltZS1pbnB1dHMtY2FsZW5kYXIge1xuICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDQ4cHgpIHtcbiAgLnRpbWUtaW5wdXRzLWNhbGVuZGFyIHtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbiAgfVxufVxuXG4ucm93LXdpdGgtc3BhY2luZyB7XG4gIG1hcmdpbi1ib3R0b206IDEuNXJlbTtcbiAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDtcbn0iLCJAaW1wb3J0IFwidmFyc1wiO1xuXG5AbWl4aW4gcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkc2l6ZSwgJHF1YWxpZmllcikge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQGlmICgkcXVhbGlmaWVyID09IG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2UgaWYgKCRxdWFsaWZpZXIgPT0gbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1heC13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuQG1peGluIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkbWluLCAkbWF4KSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyB0aGlzIGlzIGEgY29weSBvZiByZXNwb25kLXRvLiB3ZSBkb24ndCB3YW50IHRvIHByZXNlcnZlIHRoYXQgbWV0aG9kIHNpbmNlIHRoZSBicmVha3BvaW50cyBtYXkgZGl2ZXJnZSBmcm9tIHRoZSBvbGQgVUkuXG5AbWl4aW4gaXMtc2NyZWVuLXNpemUoJG1lZGlhOiBhbGwsICRvcmllbnRhdGlvbjogbm9uZSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5cbkBtaXhpbiBwYWdlLXBhZGRpbmcge1xuICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctc21hbGw7XG4gICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctc21hbGw7XG59XG5cbi8vIEZvbnQgTWl4aW5zXG4kZm9udC1tY2tpbnNleS1zYW5zOiBcIk1jS2luc2V5IFNhbnNcIjtcbiRmb250LXRoZWluaGFyZHQ6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuJGZvbnQtYm93ZXI6IFwiQm93ZXJcIjtcblxuQG1peGluIGJvd2VyLWJvbGQge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1ib3dlcjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gbWNraW5zZXktc2FucyB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIGRpc3BsYXktMSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNHJlbTsgLy8gNjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODc7IC8vIDc2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTIge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTMge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2MHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNCB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDNyZW07IC8vIDQ4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNjY7IC8vIDU2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjRweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMwcHhcbiAgICBsaW5lLWhlaWdodDogMS44MzM7IC8vIDM0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY0MjsgLy8gNDBweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0xIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNDhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNzVyZW07IC8vIDQ0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA1MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0yIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjExMTsgLy8gNDRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDQ4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTMge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMjI7IC8vIDQ0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTUge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTYge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTU7IC8vIDI4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBib2R5LWRlZmF1bHQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjZweFxuICAgIH1cbn1cblxuLy8vIERvZXNudCBleGlzdCBpbiBNRFMuXG5AbWl4aW4gYm9keS10aW55IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTsgLy8gMTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDIwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBmb3JtLWxhYmVsIHtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC10aGVpbmhhcmR0O1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBjb2xvcjogJHBsYWNlaG9sZGVyLWNvbG9yO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG59XG5cbkBtaXhpbiBjaGlwLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gY2hlY2tib3gtbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICBjb2xvcjogYmxhY2s7XG59XG5cbi8vIGJvcmRlcnNcblxuQG1peGluIG1jay1jaGVja2JveC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stdGhpbi1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYm9yZGVyLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQtbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlci1saWdodDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cblxuLy8gZnVuY3Rpb25zXG5cbi8qKlxuICogTWFrZXMgdGV4dCBoYXZlIG1heGltdW0gbGluZXMgd2l0aCBlbGxpcHNpcy4gV29ya3Mgb24gbW9zdCBtb2Rlcm4gYnJvd3NlcnMgZXhjZXB0XG4gKiBvZiBGaXJlZm94Li5cbiAqL1xuQG1peGluIG1heC1saW5lcygkY291bnQpIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIC13ZWJraXQtbGluZS1jbGFtcDogJGNvdW50O1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG59XG5cbi8vIGltYWdlc1xuQG1peGluIG1jay1pY29uKCR3aWR0aCwgJGFzc2V0LCAkaGVpZ2h0OiAkd2lkdGgsICAkYXNzZXRQYXRoOiBcImxpYnMvdWkvc3JjL2xpYi9pY29uc1wiLCkge1xuICAgIHdpZHRoOiAkd2lkdGg7XG4gICAgaGVpZ2h0OiAkaGVpZ2h0O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiN7JGFzc2V0UGF0aH0vI3skYXNzZXR9XCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbn1cblxuXG5AbWl4aW4gbWNrLXNtYWxsLWljb24oJG1vYmlsZS1hc3NldCwgJGRlc2t0b3AtYXNzZXQ6ICRtb2JpbGUtYXNzZXQpIHtcbiAgICBAaW5jbHVkZSBtY2staWNvbigxNnB4LCAkYXNzZXQ6ICRtb2JpbGUtYXNzZXQpO1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBAaW5jbHVkZSBtY2staWNvbigyNHB4LCAkYXNzZXQ6ICRkZXNrdG9wLWFzc2V0KTtcbiAgICB9XG59XG5cbi8vIHNrZWxldG9uXG5AbWl4aW4gc2tlbGV0b24tYmcge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1pbWFnZS1zaXplIHtcbiAgICB3aWR0aDogODFweDtcbiAgICBoZWlnaHQ6IDgycHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAyMTlweDtcbiAgICAgICAgaGVpZ2h0OiAxMTlweDtcbiAgICB9XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1zdGF0dXMtc2l6ZSB7XG4gICAgd2lkdGg6IDExN3B4O1xuICAgIGhlaWdodDogNzhweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDExN3B4O1xuICAgICAgICBoZWlnaHQ6IDc4cHg7XG4gICAgfVxufVxuIiwiLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kY29sb3ItYnJhbmQtZWxlY3RyaWMtYmx1ZTogIzIyNTFmZjtcbiRjb2xvci1icmFuZC1kZWVwLWJsdWU6ICMwNTFjMmM7XG4kY29sb3ItYnJhbmQtY3lhbjogIzAwYTlmNDtcblxuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRmb250LWRhcms6ICMwMDA7XG4kZm9udC1saWdodDogI2ZmZjtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG4kZ3JlZW4xOiAjMjE5NjUzO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvbG9yLXByaW1hcnk6ICMxOTM3ZWE7XG4kY29sb3ItcHJpbWFyeS1saWdodDogbGlnaHRlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuJGNvbG9yLXByaW1hcnktZGFyazogZGFya2VuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG5cbiRjb2xvci1zZWNvbmRhcnk6ICM0Mjg1RjQ7XG4kY29sb3Itc2Vjb25kYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcbiRjb2xvci1zZWNvbmRhcnktZGFyazogZGFya2VuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcblxuJGJhY2tncm91bmQ6ICNmMGYwZjA7XG4kZm9vdGVyLWJhY2s6ICMyNjMyMzg7XG4kaGVhZGVyLWJhY2s6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzA1MUMyQywgIzA1MUMyQyA0MCUsICMwQjI0NTMgNjAlLCAjMUY0MEU2IDEwMCUpO1xuXG4kY29sb3ItdGVybmFyeTogIzA1MWMyYztcblxuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG5cbiRmb250LXN0YWNrOiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcblxuJGhlYWRpbmctZm9udDogXCJMYXJpc2hNY0tpbnNleVwiLCAnR2VvcmdpYScsIHNlcmlmO1xuJGZvbnQ6ICRmb250LXN0YWNrO1xuXG4kZm9udC1mYW1pbHktcHJpbWFyeTogXCJNY0tpbnNleSBTYW5zXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQ2FsaWJyaSwgQ29yYmVsLCBIZWx2ZXRpY2EsIFJvYm90bywgRHJvaWQsIHNhbnMtc2VyaWY7XG4kZm9udC1mYW1pbHktc2Vjb25kYXJ5OiBcIkJvd2VyXCIsIEdlb3JnaWEsIFwiVGltZXMgTmV3IFJvbWFuXCIgc2VyaWY7XG5cbiRiYXNlLXNpemU6IDE2cHg7XG4kdGFibGV0LXNpemU6IDE2cHg7XG4kbW9iaWxlLXNpemU6IDE2cHg7XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kYnJlYWstbW9iaWxlOiA0NTBweDtcbiRicmVhay10YWJsZXQ6IDgwMHB4O1xuJGJyZWFrLWxhcHRvcDogMTAyNHB4O1xuXG4kYnJlYWstbGFuZHNjYXBlLW1vYmlsZTogODAwcHg7XG4kYnJlYWstbGFuZHNjYXBlLXRhYmxldDogMTA0OHB4O1xuJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3A6IDEyODBweDtcbiIsIkBpbXBvcnQgJy4vdmFyaWFibGVzJztcblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5AbWl4aW4gYm94LXNoYWRvdygkY29sb3I6ICMwMDAsICRkZXB0aDogMSkge1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCAxcHggKiAoJGRlcHRoIC0gMSkgcmdiYSgjMDAwLCAuMiksXG4gICAgICAgICAgICAgICAgMCAxcHggMXB4IDAgcmdiYSgjMDAwLCAuMTQpLFxuICAgICAgICAgICAgICAgIDAgMnB4IDFweCAtMXB4IHJnYmEoIzAwMCwgLjEyKTtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbkBtaXhpbiByZXNwb25kLXRvKCRtZWRpYSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSAgQGVsc2UgaWYgJG1lZGlhID09IGxhdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfUBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJAaW1wb3J0IFwibGlicy91aS9zcmMvbGliL21peGluc1wiO1xuQGltcG9ydCAnbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zJztcbkBpbXBvcnQgJ2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcyc7XG5cbi8vIDpob3N0e1xuICAgIC5yZWN1cnJlbmNlLXNpd2Noe1xuICAgICAgICBoZWlnaHQ6IDY1cHg7XG4gICAgICAgIC8vIG1hcmdpbi1ib3R0b206IDAuNWVtO1xuICAgICAgICA6Om5nLWRlZXAge1xuICAgICAgICAgICAgLm1hdC1zbGlkZS10b2dnbGUtY29udGVudHtcbiAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LXByaW1hcnkgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbi8vIH1cblxuXG5cbi50aW1lLWlucHV0cyB7XG4gICAgZmxleDogMTtcbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIG1pbi13aWR0aDogMTc2cHg7XG4gICAgfVxuXG4gICAgJi1jYWxlbmRhciB7XG4gICAgICAgIEBleHRlbmQgLnRpbWUtaW5wdXRzO1xuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nLXNtYWxsO1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKHRhYmxldCkge1xuICAgICAgICAgICAgbWluLXdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogJHNwYWNpbmctc21hbGw7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5yb3ctd2l0aC1zcGFjaW5nIHtcbiAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy1tZWRpdW07XG4gICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDtcbn1cblxuXG5cbiJdfQ== */"] }); /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(RoomBookingFormComponent, [{ type: core_1.Component, args: [{ @@ -40680,7 +41019,7 @@ RoomBookingFormComponent.ɵcmp = i0.ɵɵdefineComponent({ type: RoomBookingFormC templateUrl: './room-booking-form.component.html', styleUrls: ['./room-booking-form.component.scss'] }] - }], function () { return [{ type: i1.Store }, { type: i0.ViewContainerRef }, { type: i2.MatSnackBar }]; }, { formRef: [{ + }], function () { return [{ type: i1.Store }, { type: i0.ViewContainerRef }, { type: i2.MatSnackBar }, { type: i3.ApplicationService }]; }, { formRef: [{ type: core_1.ViewChild, args: ['formRef'] }], submitForm: [{ @@ -42339,19 +42678,21 @@ function RoomLocationPreviewComponent_div_3_Template(rf, ctx) { if (rf & 1) { i0.ɵɵtext(5); i0.ɵɵelementEnd(); i0.ɵɵelementStart(6, "div", 12); - i0.ɵɵtext(7, "The pinpoint indicates your selected room's location on the floor. No futher interaction is available."); - i0.ɵɵelementEnd(); + i0.ɵɵelementStart(7, "div", 13); + i0.ɵɵtext(8, "The pinpoint indicates your selected room's location on the floor. No futher interaction is available."); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(8, "div", 13); i0.ɵɵelementStart(9, "div", 14); - i0.ɵɵelementStart(10, "button", 15); - i0.ɵɵlistener("click", function RoomLocationPreviewComponent_div_3_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r6); const ctx_r5 = i0.ɵɵnextContext(); return ctx_r5.displayOfficeInformation(); }); - i0.ɵɵelement(11, "div", 16); + i0.ɵɵelementStart(10, "div", 15); + i0.ɵɵelementStart(11, "button", 16); + i0.ɵɵlistener("click", function RoomLocationPreviewComponent_div_3_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r6); const ctx_r5 = i0.ɵɵnextContext(); return ctx_r5.displayOfficeInformation(); }); + i0.ɵɵelement(12, "div", 17); + i0.ɵɵelementEnd(); + i0.ɵɵelement(13, "mck-legend-dropdown", 18); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(14, "app-map-controls", 19); + i0.ɵɵlistener("zoomInClick", function RoomLocationPreviewComponent_div_3_Template_app_map_controls_zoomInClick_14_listener() { i0.ɵɵrestoreView(_r6); const ctx_r7 = i0.ɵɵnextContext(); return ctx_r7.zoomIn(); })("zoomOutClick", function RoomLocationPreviewComponent_div_3_Template_app_map_controls_zoomOutClick_14_listener() { i0.ɵɵrestoreView(_r6); const ctx_r8 = i0.ɵɵnextContext(); return ctx_r8.zoomOut(); })("refreshClick", function RoomLocationPreviewComponent_div_3_Template_app_map_controls_refreshClick_14_listener() { i0.ɵɵrestoreView(_r6); const ctx_r9 = i0.ɵɵnextContext(); return ctx_r9.resetZoomLevels(); }); i0.ɵɵelementEnd(); - i0.ɵɵelement(12, "mck-legend-dropdown", 17); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(13, "app-map-controls", 18); - i0.ɵɵlistener("zoomInClick", function RoomLocationPreviewComponent_div_3_Template_app_map_controls_zoomInClick_13_listener() { i0.ɵɵrestoreView(_r6); const ctx_r7 = i0.ɵɵnextContext(); return ctx_r7.zoomIn(); })("zoomOutClick", function RoomLocationPreviewComponent_div_3_Template_app_map_controls_zoomOutClick_13_listener() { i0.ɵɵrestoreView(_r6); const ctx_r8 = i0.ɵɵnextContext(); return ctx_r8.zoomOut(); })("refreshClick", function RoomLocationPreviewComponent_div_3_Template_app_map_controls_refreshClick_13_listener() { i0.ɵɵrestoreView(_r6); const ctx_r9 = i0.ɵɵnextContext(); return ctx_r9.resetZoomLevels(); }); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); @@ -42360,14 +42701,14 @@ function RoomLocationPreviewComponent_div_3_Template(rf, ctx) { if (rf & 1) { const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵadvance(5); i0.ɵɵtextInterpolate2(" ", ctx_r1.building.name, ", ", ctx_r1.level.name, " "); - i0.ɵɵadvance(7); + i0.ɵɵadvance(8); i0.ɵɵproperty("options", ctx_r1.legendOptions); } } function RoomLocationPreviewComponent_div_9_Template(rf, ctx) { if (rf & 1) { const _r11 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div", 19); + i0.ɵɵelementStart(0, "div", 20); i0.ɵɵelementStart(1, "div"); - i0.ɵɵelementStart(2, "button", 20); + i0.ɵɵelementStart(2, "button", 21); i0.ɵɵlistener("click", function RoomLocationPreviewComponent_div_9_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r11); const ctx_r10 = i0.ɵɵnextContext(); return ctx_r10.collapse(); }); i0.ɵɵtext(3, "Close"); i0.ɵɵelementEnd(); @@ -42516,11 +42857,11 @@ class RoomLocationPreviewComponent extends base_1.BaseDirective { } exports.RoomLocationPreviewComponent = RoomLocationPreviewComponent; RoomLocationPreviewComponent.ɵfac = function RoomLocationPreviewComponent_Factory(t) { return new (t || RoomLocationPreviewComponent)(i0.ɵɵdirectiveInject(i1.Store), i0.ɵɵdirectiveInject(i2.MatDialog), i0.ɵɵdirectiveInject(i3.SettingsService)); }; -RoomLocationPreviewComponent.ɵcmp = i0.ɵɵdefineComponent({ type: RoomLocationPreviewComponent, selectors: [["room-location-preview"]], inputs: { mapUrl: "mapUrl", focus: "focus", expanded: "expanded", building: "building", space: "space", level: "level", mode: "mode", viewMode: "viewMode" }, outputs: { handleExpand: "handleExpand" }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 10, vars: 23, consts: [[1, "room-location", "mck-row"], [1, "map-wrapper"], ["class", "header", 4, "ngIf"], ["class", "sub", 4, "ngIf"], [3, "zoom", "src", "focus", "center", "css", "features"], ["class", "footer mck-column mck-center", 4, "ngIf"], [1, "header"], [3, "mode", "backModal", "noSurvey", "closeCallback"], [1, "sub"], [1, "title"], [1, "title-name"], ["src", "assets/icon/white-location.svg"], [1, "title-description"], [1, "map-controls"], [1, "mck-row"], ["name", "info-button", "mat-button", "", "color", "primary", 1, "mck-warning-button", "mck-square", "map-info-button", 3, "click"], [1, "map-icon-info"], ["placeholder", "Show legend", "placeholderOpen", "Hide legend", 3, "options"], [3, "zoomInClick", "zoomOutClick", "refreshClick"], [1, "footer", "mck-column", "mck-center"], ["mat-button", "", "color", "primary", 1, "mck-primary-button", 3, "click"]], template: function RoomLocationPreviewComponent_Template(rf, ctx) { if (rf & 1) { +RoomLocationPreviewComponent.ɵcmp = i0.ɵɵdefineComponent({ type: RoomLocationPreviewComponent, selectors: [["room-location-preview"]], inputs: { mapUrl: "mapUrl", focus: "focus", expanded: "expanded", building: "building", space: "space", level: "level", mode: "mode", viewMode: "viewMode" }, outputs: { handleExpand: "handleExpand" }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 10, vars: 23, consts: [[1, "room-location", "mck-row"], [1, "map-wrapper"], ["class", "header", 4, "ngIf"], ["class", "sub", 4, "ngIf"], [3, "zoom", "src", "focus", "center", "css", "features"], ["class", "footer mck-column mck-center", 4, "ngIf"], [1, "header"], [3, "mode", "backModal", "noSurvey", "closeCallback"], [1, "sub"], [1, "title"], [1, "title-name"], ["src", "assets/icon/white-location.svg"], [1, "flex-row", "flex-space-between", "title-and-map-control"], [1, "title-description"], [1, "map-controls"], [1, "mck-row"], ["name", "info-button", "mat-button", "", "color", "primary", 1, "mck-warning-button", "mck-square", "map-info-button", 3, "click"], [1, "map-icon-info"], ["placeholder", "Show legend", "placeholderOpen", "Hide legend", 3, "options"], [3, "zoomInClick", "zoomOutClick", "refreshClick"], [1, "footer", "mck-column", "mck-center"], ["mat-button", "", "color", "primary", 1, "mck-primary-button", 3, "click"]], template: function RoomLocationPreviewComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 0); i0.ɵɵelementStart(1, "div", 1); i0.ɵɵtemplate(2, RoomLocationPreviewComponent_header_2_Template, 2, 3, "header", 2); - i0.ɵɵtemplate(3, RoomLocationPreviewComponent_div_3_Template, 14, 3, "div", 3); + i0.ɵɵtemplate(3, RoomLocationPreviewComponent_div_3_Template, 15, 3, "div", 3); i0.ɵɵelement(4, "a-map", 4); i0.ɵɵpipe(5, "async"); i0.ɵɵpipe(6, "async"); @@ -42542,7 +42883,7 @@ RoomLocationPreviewComponent.ɵcmp = i0.ɵɵdefineComponent({ type: RoomLocation i0.ɵɵproperty("zoom", ctx.zoomLevel)("src", ctx.mapUrl)("focus", i0.ɵɵpipeBind1(5, 15, ctx.focusedRoom))("center", i0.ɵɵpipeBind1(6, 17, ctx.center))("css", i0.ɵɵpipeBind1(7, 19, ctx.style_map))("features", i0.ɵɵpipeBind1(8, 21, ctx.features)); i0.ɵɵadvance(5); i0.ɵɵproperty("ngIf", ctx.expanded); - } }, directives: [i4.NgIf, i5.MapComponent, i6.TopbarHeaderComponent, i7.MatButton, i8.LegendDropdownComponent, i9.MapControlsComponent], pipes: [i4.AsyncPipe], styles: ["/**\n * Spacing\n */\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n/*===================*\\\n|| Icon sizes ||\n\\*===================*/\n/**\n * Makes text have maximum lines with ellipsis. Works on most modern browsers except\n * of Firefox..\n */\n/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n.room-location .header {\n z-index: 10;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n display: block;\n padding: 0;\n}\n.booking-view {\n height: 124px;\n margin-bottom: 20px;\n border: 2px solid #DCDCDC;\n box-sizing: border-box;\n border-radius: 4px;\n overflow: hidden;\n}\n.booking-view .map-wrapper {\n position: relative;\n top: -90%;\n}\n.map-wrapper {\n height: 368px;\n width: 100%;\n overflow: hidden;\n border: 1px solid #A19F9F;\n}\n.map-wrapper.expanded {\n position: fixed;\n top: 0;\n left: 0;\n height: 100% !important;\n z-index: 4;\n background-color: #f0f0f0;\n}\n.map-wrapper a-map {\n cursor: move;\n}\n.map-wrapper a-map.np {\n pointer-events: none;\n cursor: default;\n}\n.map-wrapper .footer {\n position: absolute;\n bottom: 0;\n left: 0;\n padding: 24px 16px;\n border: 1px solid #E6E6E6;\n height: 96px;\n width: 100%;\n background-color: white;\n}\n.map-wrapper .footer > div {\n width: 100%;\n}\n.map-wrapper .footer button {\n width: 212px;\n margin: 0 auto;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .footer button {\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .footer button {\n width: 100%;\n }\n}\n.map-wrapper .sub {\n z-index: 2;\n height: 200px;\n position: absolute;\n top: 89px;\n left: 0;\n width: 100%;\n padding: 0 15px;\n background: linear-gradient(179.8deg, rgba(5, 28, 44, 0.15) 0.17%, rgba(0, 0, 0, 0) 81.92%);\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .sub {\n top: 67px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .sub {\n top: 67px;\n }\n}\n.map-wrapper .sub > div {\n background-color: white;\n width: 100%;\n max-width: 1024px;\n margin: 30px auto;\n border: 1px solid #E0E0E0;\n}\n.map-wrapper .sub > div > div {\n padding: 14px 14px 0 14px;\n}\n.map-wrapper .sub > div > div.map-controls {\n display: flex;\n padding: 16px 14px 0;\n width: 100%;\n justify-content: space-between;\n}\n.map-wrapper .sub > div > div.map-controls .mck-row {\n visibility: hidden;\n}\n.map-wrapper .sub > div > div.map-controls .map-controls-container {\n position: unset;\n margin-top: 0;\n box-shadow: none;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .sub > div > div.map-controls .map-controls-container {\n position: unset;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .sub > div > div.map-controls .map-controls-container {\n position: unset;\n }\n}\n.map-wrapper .sub > div > div.map-controls .map-controls-container .mck-column {\n flex-direction: row;\n}\n.map-wrapper .sub > div > div.map-controls .map-controls-container button {\n border-radius: 0;\n}\n.map-wrapper .sub > div > div.map-controls .map-controls-container .mck-stroked-button {\n height: 40px !important;\n}\n.map-wrapper .sub > div > div.map-controls .legend-container {\n margin: 0 0 0 15px;\n width: 160px;\n}\n.map-wrapper .sub > div > div.map-controls .legend-container .mat-form-field-appearance-outline .mat-form-field-wrapper {\n margin: 0;\n}\n.map-wrapper .sub > div > div.map-controls .legend-container .legend-divider {\n height: 40px !important;\n}\n.map-wrapper .sub > div > div.map-controls .mck-form-input mat-form-field .mat-form-field-outline {\n height: 40px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .sub > div > div.map-controls .mck-form-input mat-form-field .mat-form-field-outline,\n.map-wrapper .sub > div > div.map-controls .legend-container .legend-divider,\n.map-wrapper .sub > div > div.map-controls .map-controls-container .mck-stroked-button {\n height: 32px !important;\n }\n .map-wrapper .sub > div > div.map-controls .map-info-button {\n display: none;\n }\n .map-wrapper .sub > div > div.map-controls .legend-container {\n margin: 0;\n width: 150px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .sub > div > div.map-controls .mck-form-input mat-form-field .mat-form-field-outline,\n.map-wrapper .sub > div > div.map-controls .legend-container .legend-divider,\n.map-wrapper .sub > div > div.map-controls .map-controls-container .mck-stroked-button {\n height: 32px !important;\n }\n .map-wrapper .sub > div > div.map-controls .map-info-button {\n display: none;\n }\n .map-wrapper .sub > div > div.map-controls .legend-container {\n margin: 0;\n width: 150px;\n }\n}\n.map-wrapper .sub > div > div.title {\n padding-bottom: 14px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .sub > div > div.title {\n padding-bottom: 4px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .sub > div > div.title {\n padding-bottom: 4px;\n }\n}\n.map-wrapper .sub > div > div .title-name {\n margin: 0;\n font-size: 20px;\n font-weight: 400;\n}\n.map-wrapper .sub > div > div .title-description {\n color: #757575;\n font-size: 14px;\n margin: 2px 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .sub > div > div h1 {\n font-size: 18px;\n }\n .map-wrapper .sub > div > div p {\n color: #757575;\n font-size: 14px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .sub > div > div h1 {\n font-size: 18px;\n }\n .map-wrapper .sub > div > div p {\n color: #757575;\n font-size: 14px;\n }\n}\n.map-icon-info {\n width: 16px;\n height: 16px;\n background-image: url('info-icon-small.svg');\n background-size: contain;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .map-icon-info {\n width: 24px;\n height: 24px;\n background-image: url('info-icon-large.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .map-icon-info {\n width: 24px;\n height: 24px;\n background-image: url('info-icon-large.svg');\n background-size: contain;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWxvY2F0aW9uLXByZXZpZXcvcm9vbS1sb2NhdGlvbi1wcmV2aWV3LmNvbXBvbmVudC5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy91aS9zcmMvbGliL21peGlucy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvdmFyaWFibGVzLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL2xlZ2FjeS11aS9zcmMvbGliL3N0eWxlcy9taXhpbnMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2FwcHMvc3RhZmYvc3JjL2FwcC9ib29raW5nL3Jvb20tbG9jYXRpb24tcHJldmlldy9yb29tLWxvY2F0aW9uLXByZXZpZXcuY29tcG9uZW50LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMkNBOztFQUFBO0FBcUNBOztzQkFBQTtBQWFBO0VBQ0ksZ0JBOUZNO0VBK0ZOLHVCQTdGYztBQ09sQjtBRHlGQTs7c0JBQUE7QUVrT0E7OztFQUFBO0FDcFVBOzswQkFBQTtBQVFBOzswQkFBQTtBQWtDQTs7Y0FBQTtBQWdCQTs7c0JBQUE7QUM1Q0E7O3NCQUFBO0FDVkk7RUFDSSxXQUFBO0VBQ0Esa0JBQUE7RUFDQSxNQUFBO0VBQ0EsT0FBQTtFQUNBLFdBQUE7RUFDQSxjQUFBO0VBQ0EsVUFBQTtBSjhCUjtBSTNCQTtFQUNJLGFBQUE7RUFDQSxtQkFB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Q0Esd0JBQUE7RUR0RUY7QUFDRiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWxvY2F0aW9uLXByZXZpZXcvcm9vbS1sb2NhdGlvbi1wcmV2aWV3LmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiJHByaW1hcnk6ICMxRjQwRTY7XG4kZm9ybS1sYWJlbDogIzA1MUMyQztcbiRzZWNvbmRhcnktbGFiZWw6ICM3Njc2NzY7XG4kYm9yZGVyOiAjQjNCM0IzO1xuJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ6ICNEMEQwRDA7XG4kY2hpcC1jb2xvcjogIzMzMzMzMztcbiRwbGFjZWhvbGRlci1jb2xvcjogIzdGN0Y3RjtcbiRiYWNrZ3JvdW5kLWNvbG9yOiAjRjBGMEYwO1xuJHBhZ2UtYmFja2dyb3VuZC1jb2xvcjogI0Y4RjlGQTtcbiRzZWxlY3RlZC1vcHRpb246ICNFNkU2RTY7XG4kY29sb3ItYnJhbmQteWVsbG93OiAjZmZkMDQ4O1xuJGxpZ2h0LXllbGxvdzogI2ZmZjNjZTtcbiRjb2FjaG1hcmstdGV4dDogIzZmNGQwMDtcbiRlcnJvci1jb2xvcjogI0UxMkU0MDtcbiRuby1maWx0ZXJzLWNvbG9yOiAjQkNCQ0JDO1xuJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yOiAjRjRGNEY0O1xuJHByaW1hcnktaGlnaGxpZ2h0OiAjMjI1MUZGO1xuJHNjcm9sbGJhci1jb2xvcjogIzc1NzU3NTtcblxuJGF2YWlsYWJsZS1jb2xvcjogIzVEOUQ1MjtcbiRhdmFpbGFibGUtYnktcmVxdWVzdC1jb2xvcjogI0Y1QjUzRjtcbiRpbi11c2UtY29sb3I6ICNENDQ4M0U7XG4kbm90LWJvb2thYmxlLWNvbG9yOiAjQ0NDQ0NDO1xuXG4kbW9kYWwtYm9keS1oZWFkaW5nOiAjNEQ0RDREO1xuJGFsZXJ0LW92ZXJsYXktYmc6IHJnYmEoNSwgMjgsIDQ0LCAwLjg1KTtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG5cbiRwZW5kaW5nOiAjZmZiMzAwO1xuJHBlbmRpbmctbGlnaHQ6IGxpZ2h0ZW4oJHBlbmRpbmcsIDEwKTtcbiRwZW5kaW5nLWRhcms6IGRhcmtlbigkcGVuZGluZywgMTApO1xuXG4kZXJyb3I6ICNlNTM5MzU7XG4kZXJyb3ItbGlnaHQ6IGxpZ2h0ZW4oJGVycm9yLCAxMCk7XG4kZXJyb3ItZGFyazogZGFya2VuKCRlcnJvciwgMTApO1xuXG4kY29hY2htYXJrLWJnOiAjRUJFQkY2O1xuJGNvYWNobWFyay1kYXJrLXRleHQ6ICMxQjFCMTk7XG4kZXJyb3ItdGV4dDogI2ZmZjtcblxuLyoqXG4gKiBTcGFjaW5nXG4gKi9cblxuLy8gNHB4XG4kc3BhY2luZy1zbWFsbGVzdDogMC4yNXJlbTtcblxuLy8gOHB4XG4kc3BhY2luZy14eHNtYWxsOiAwLjVyZW07XG5cbi8vIDEycHhcbiRzcGFjaW5nLXhzbWFsbDogMC43NXJlbTtcblxuLy8gMTZweFxuJHNwYWNpbmctc21hbGw6IDFyZW07XG5cbi8vIDIwcHhcbiRzcGFjaW5nLXNtYWxsLW1lZGl1bTogMS4yNXJlbTtcblxuLy8gMjRweFxuJHNwYWNpbmctbWVkaXVtOiAxLjVyZW07XG5cbi8vIDI4cHhcbiRzcGFjaW5nLW1lZGl1bS1sYXJnZTogMS43NXJlbTtcblxuLy8gMzJweFxuJHNwYWNpbmctbGFyZ2U6IDJyZW07XG5cbi8vIDQ4cHhcbiRzcGFjaW5nLXhsYXJnZTogM3JlbTtcblxuLy8gNjRweFxuJHNwYWNpbmcteHhsYXJnZTogNHJlbTtcblxuLy8gOTZweFxuJHNwYWNpbmctbGFyZ2VzdDogNnJlbTtcblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbiRkZXZpY2UtbW9iaWxlLXNpemU6IDQ1MHB4O1xuJGRldmljZS10YWJsZXQtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhcHRvcC1zaXplOiAxMDI0cHg7XG5cbiRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplOiAxMDQ4cHg7XG4kZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZTogMTI4MHB4O1xuXG5cbjpleHBvcnQge1xuICAgIHByaW1hcnk6ICRwcmltYXJ5O1xuICAgIHNlY29uZGFyeUxhYmVsOiAkc2Vjb25kYXJ5LWxhYmVsO1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuJGljb24tc21hbGw6IDE2cHg7XG4kaWNvbi1tZWRpdW06IDI0cHg7XG4kaWNvbi1sYXJnZTogMzJweDtcbiRpY29uLXhsYXJnZTogNDhweDtcbiIsIi8qKlxuICogU3BhY2luZ1xuICovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbjpleHBvcnQge1xuICBwcmltYXJ5OiAjMUY0MEU2O1xuICBzZWNvbmRhcnlMYWJlbDogIzc2NzY3Njtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qKlxuICogTWFrZXMgdGV4dCBoYXZlIG1heGltdW0gbGluZXMgd2l0aCBlbGxpcHNpcy4gV29ya3Mgb24gbW9zdCBtb2Rlcm4gYnJvd3NlcnMgZXhjZXB0XG4gKiBvZiBGaXJlZm94Li5cbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4ucm9vbS1sb2NhdGlvbiAuaGVhZGVyIHtcbiAgei1pbmRleDogMTA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDA7XG59XG5cbi5ib29raW5nLXZpZXcge1xuICBoZWlnaHQ6IDEyNHB4O1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBib3JkZXI6IDJweCBzb2xpZCAjRENEQ0RDO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uYm9va2luZy12aWV3IC5tYXAtd3JhcHBlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAtOTAlO1xufVxuXG4ubWFwLXdyYXBwZXIge1xuICBoZWlnaHQ6IDM2OHB4O1xuICB3aWR0aDogMTAwJTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYm9yZGVyOiAxcHggc29saWQgI0ExOUY5Rjtcbn1cbi5tYXAtd3JhcHBlci5leHBhbmRlZCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcbiAgei1pbmRleDogNDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcbn1cbi5tYXAtd3JhcHBlciBhLW1hcCB7XG4gIGN1cnNvcjogbW92ZTtcbn1cbi5tYXAtd3JhcHBlciBhLW1hcC5ucCB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG4ubWFwLXdyYXBwZXIgLmZvb3RlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICBwYWRkaW5nOiAyNHB4IDE2cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gIGhlaWdodDogOTZweDtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xufVxuLm1hcC13cmFwcGVyIC5mb290ZXIgPiBkaXYge1xuICB3aWR0aDogMTAwJTtcbn1cbi5tYXAtd3JhcHBlciAuZm9vdGVyIGJ1dHRvbiB7XG4gIHdpZHRoOiAyMTJweDtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWFwLXdyYXBwZXIgLmZvb3RlciBidXR0b24ge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1hcC13cmFwcGVyIC5mb290ZXIgYnV0dG9uIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuLm1hcC13cmFwcGVyIC5zdWIge1xuICB6LWluZGV4OiAyO1xuICBoZWlnaHQ6IDIwMHB4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogODlweDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDAgMTVweDtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE3OS44ZGVnLCByZ2JhKDUsIDI4LCA0NCwgMC4xNSkgMC4xNyUsIHJnYmEoMCwgMCwgMCwgMCkgODEuOTIlKTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tYXAtd3JhcHBlciAuc3ViIHtcbiAgICB0b3A6IDY3cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWFwLXdyYXBwZXIgLnN1YiB7XG4gICAgdG9wOiA2N3B4O1xuICB9XG59XG4ubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIG1hcmdpbjogMzBweCBhdXRvO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTBFMEUwO1xufVxuLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYge1xuICBwYWRkaW5nOiAxNHB4IDE0cHggMCAxNHB4O1xufVxuLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIHtcbiAgZGlzcGxheTogZmxleDtcbiAgcGFkZGluZzogMTZweCAxNHB4IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG59XG4ubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLm1jay1yb3cge1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG59XG4ubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLm1hcC1jb250cm9scy1jb250YWluZXIge1xuICBwb3NpdGlvbjogdW5zZXQ7XG4gIG1hcmdpbi10b3A6IDA7XG4gIGJveC1zaGFkb3c6IG5vbmU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLm1hcC1jb250cm9scy1jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiB1bnNldDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2Lm1hcC1jb250cm9scyAubWFwLWNvbnRyb2xzLWNvbnRhaW5lciB7XG4gICAgcG9zaXRpb246IHVuc2V0O1xuICB9XG59XG4ubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLm1hcC1jb250cm9scy1jb250YWluZXIgLm1jay1jb2x1bW4ge1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xufVxuLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5tYXAtY29udHJvbHMtY29udGFpbmVyIGJ1dHRvbiB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4ubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLm1hcC1jb250cm9scy1jb250YWluZXIgLm1jay1zdHJva2VkLWJ1dHRvbiB7XG4gIGhlaWdodDogNDBweCAhaW1wb3J0YW50O1xufVxuLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5sZWdlbmQtY29udGFpbmVyIHtcbiAgbWFyZ2luOiAwIDAgMCAxNXB4O1xuICB3aWR0aDogMTYwcHg7XG59XG4ubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLmxlZ2VuZC1jb250YWluZXIgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtd3JhcHBlciB7XG4gIG1hcmdpbjogMDtcbn1cbi5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2Lm1hcC1jb250cm9scyAubGVnZW5kLWNvbnRhaW5lciAubGVnZW5kLWRpdmlkZXIge1xuICBoZWlnaHQ6IDQwcHggIWltcG9ydGFudDtcbn1cbi5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2Lm1hcC1jb250cm9scyAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICBoZWlnaHQ6IDQwcHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLFxuLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5sZWdlbmQtY29udGFpbmVyIC5sZWdlbmQtZGl2aWRlcixcbi5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2Lm1hcC1jb250cm9scyAubWFwLWNvbnRyb2xzLWNvbnRhaW5lciAubWNrLXN0cm9rZWQtYnV0dG9uIHtcbiAgICBoZWlnaHQ6IDMycHggIWltcG9ydGFudDtcbiAgfVxuICAubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLm1hcC1pbmZvLWJ1dHRvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLmxlZ2VuZC1jb250YWluZXIge1xuICAgIG1hcmdpbjogMDtcbiAgICB3aWR0aDogMTUwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLFxuLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5sZWdlbmQtY29udGFpbmVyIC5sZWdlbmQtZGl2aWRlcixcbi5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2Lm1hcC1jb250cm9scyAubWFwLWNvbnRyb2xzLWNvbnRhaW5lciAubWNrLXN0cm9rZWQtYnV0dG9uIHtcbiAgICBoZWlnaHQ6IDMycHggIWltcG9ydGFudDtcbiAgfVxuICAubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLm1hcC1pbmZvLWJ1dHRvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLmxlZ2VuZC1jb250YWluZXIge1xuICAgIG1hcmdpbjogMDtcbiAgICB3aWR0aDogMTUwcHg7XG4gIH1cbn1cbi5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2LnRpdGxlIHtcbiAgcGFkZGluZy1ib3R0b206IDE0cHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi50aXRsZSB7XG4gICAgcGFkZGluZy1ib3R0b206IDRweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2LnRpdGxlIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogNHB4O1xuICB9XG59XG4ubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdiAudGl0bGUtbmFtZSB7XG4gIG1hcmdpbjogMDtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBmb250LXdlaWdodDogNDAwO1xufVxuLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYgLnRpdGxlLWRlc2NyaXB0aW9uIHtcbiAgY29sb3I6ICM3NTc1NzU7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbWFyZ2luOiAycHggMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2IGgxIHtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gIH1cbiAgLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYgcCB7XG4gICAgY29sb3I6ICM3NTc1NzU7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYgaDEge1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgfVxuICAubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdiBwIHtcbiAgICBjb2xvcjogIzc1NzU3NTtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gIH1cbn1cblxuLm1hcC1pY29uLWluZm8ge1xuICB3aWR0aDogMTZweDtcbiAgaGVpZ2h0OiAxNnB4O1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvaW5mby1pY29uLXNtYWxsLnN2Z1wiKTtcbiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1hcC1pY29uLWluZm8ge1xuICAgIHdpZHRoOiAyNHB4O1xuICAgIGhlaWdodDogMjRweDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvaW5mby1pY29uLWxhcmdlLnN2Z1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWFwLWljb24taW5mbyB7XG4gICAgd2lkdGg6IDI0cHg7XG4gICAgaGVpZ2h0OiAyNHB4O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9pbmZvLWljb24tbGFyZ2Uuc3ZnXCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbiAgfVxufSIsIkBpbXBvcnQgXCJ2YXJzXCI7XG5cbkBtaXhpbiBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRzaXplLCAkcXVhbGlmaWVyKSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAaWYgKCRxdWFsaWZpZXIgPT0gbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSBpZiAoJHF1YWxpZmllciA9PSBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWF4LXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5AbWl4aW4gYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRtaW4sICRtYXgpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkbWluKSBhbmQgKG1heC13aWR0aDogJG1heCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIHRoaXMgaXMgYSBjb3B5IG9mIHJlc3BvbmQtdG8uIHdlIGRvbid0IHdhbnQgdG8gcHJlc2VydmUgdGhhdCBtZXRob2Qgc2luY2UgdGhlIGJyZWFrcG9pbnRzIG1heSBkaXZlcmdlIGZyb20gdGhlIG9sZCBVSS5cbkBtaXhpbiBpcy1zY3JlZW4tc2l6ZSgkbWVkaWE6IGFsbCwgJG9yaWVudGF0aW9uOiBub25lKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cblxuQG1peGluIHBhZ2UtcGFkZGluZyB7XG4gICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbDtcbn1cblxuLy8gRm9udCBNaXhpbnNcbiRmb250LW1ja2luc2V5LXNhbnM6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuJGZvbnQtdGhlaW5oYXJkdDogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4kZm9udC1ib3dlcjogXCJCb3dlclwiO1xuXG5AbWl4aW4gYm93ZXItYm9sZCB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWJvd2VyO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBtY2tpbnNleS1zYW5zIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gZGlzcGxheS0xIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiA0cmVtOyAvLyA2NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4NzsgLy8gNzZweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMiB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDYwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS00IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogM3JlbTsgLy8gNDhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE2NjsgLy8gNTZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS01IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjgzMzsgLy8gMzRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjQyOyAvLyA0MHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS03IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyOHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTEge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA0OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi43NXJlbTsgLy8gNDRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDUycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTIge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTExOyAvLyA0NHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNDhweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMyB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIyMjsgLy8gNDRweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjg4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1NTsgLy8gMjhweFxuICAgIH1cbn1cblxuQG1peGluIGJvZHktZGVmYXVsdCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNnB4XG4gICAgfVxufVxuXG4vLy8gRG9lc250IGV4aXN0IGluIE1EUy5cbkBtaXhpbiBib2R5LXRpbnkge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtOyAvLyAxMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjRweFxuICAgIH1cbn1cblxuQG1peGluIGZvcm0tbGFiZWwge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LXRoZWluaGFyZHQ7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGNvbG9yOiAkcGxhY2Vob2xkZXItY29sb3I7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbn1cblxuQG1peGluIGNoaXAtbGFiZWwge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBjaGVja2JveC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGNvbG9yOiBibGFjaztcbn1cblxuLy8gYm9yZGVyc1xuXG5AbWl4aW4gbWNrLWNoZWNrYm94LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay10aGluLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXItbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBib3JkZXItY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudC1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuXG4vLyBmdW5jdGlvbnNcblxuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG5AbWl4aW4gbWF4LWxpbmVzKCRjb3VudCkge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiAkY291bnQ7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbn1cblxuLy8gaW1hZ2VzXG5AbWl4aW4gbWNrLWljb24oJHdpZHRoLCAkYXNzZXQsICRoZWlnaHQ6ICR3aWR0aCwgICRhc3NldFBhdGg6IFwibGlicy91aS9zcmMvbGliL2ljb25zXCIsKSB7XG4gICAgd2lkdGg6ICR3aWR0aDtcbiAgICBoZWlnaHQ6ICRoZWlnaHQ7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiI3skYXNzZXRQYXRofS8jeyRhc3NldH1cIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuXG5cbkBtaXhpbiBtY2stc21hbGwtaWNvbigkbW9iaWxlLWFzc2V0LCAkZGVza3RvcC1hc3NldDogJG1vYmlsZS1hc3NldCkge1xuICAgIEBpbmNsdWRlIG1jay1pY29uKDE2cHgsICRhc3NldDogJG1vYmlsZS1hc3NldCk7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICRhc3NldDogJGRlc2t0b3AtYXNzZXQpO1xuICAgIH1cbn1cblxuLy8gc2tlbGV0b25cbkBtaXhpbiBza2VsZXRvbi1iZyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWltYWdlLXNpemUge1xuICAgIHdpZHRoOiA4MXB4O1xuICAgIGhlaWdodDogODJweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDIxOXB4O1xuICAgICAgICBoZWlnaHQ6IDExOXB4O1xuICAgIH1cbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLXN0YXR1cy1zaXplIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMTE3cHg7XG4gICAgICAgIGhlaWdodDogNzhweDtcbiAgICB9XG59XG4iLCIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRjb2xvci1icmFuZC1lbGVjdHJpYy1ibHVlOiAjMjI1MWZmO1xuJGNvbG9yLWJyYW5kLWRlZXAtYmx1ZTogIzA1MWMyYztcbiRjb2xvci1icmFuZC1jeWFuOiAjMDBhOWY0O1xuXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGZvbnQtZGFyazogIzAwMDtcbiRmb250LWxpZ2h0OiAjZmZmO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcbiRncmVlbjE6ICMyMTk2NTM7XG5cbiRwZW5kaW5nOiAjZmZiMzAwO1xuJHBlbmRpbmctbGlnaHQ6IGxpZ2h0ZW4oJHBlbmRpbmcsIDEwKTtcbiRwZW5kaW5nLWRhcms6IGRhcmtlbigkcGVuZGluZywgMTApO1xuXG4kZXJyb3I6ICNlNTM5MzU7XG4kZXJyb3ItbGlnaHQ6IGxpZ2h0ZW4oJGVycm9yLCAxMCk7XG4kZXJyb3ItZGFyazogZGFya2VuKCRlcnJvciwgMTApO1xuXG4kY29sb3ItcHJpbWFyeTogIzE5MzdlYTtcbiRjb2xvci1wcmltYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG4kY29sb3ItcHJpbWFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcblxuJGNvbG9yLXNlY29uZGFyeTogIzQyODVGNDtcbiRjb2xvci1zZWNvbmRhcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuJGNvbG9yLXNlY29uZGFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuXG4kYmFja2dyb3VuZDogI2YwZjBmMDtcbiRmb290ZXItYmFjazogIzI2MzIzODtcbiRoZWFkZXItYmFjazogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMDUxQzJDLCAjMDUxQzJDIDQwJSwgIzBCMjQ1MyA2MCUsICMxRjQwRTYgMTAwJSk7XG5cbiRjb2xvci10ZXJuYXJ5OiAjMDUxYzJjO1xuXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cblxuJGZvbnQtc3RhY2s6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuXG4kaGVhZGluZy1mb250OiBcIkxhcmlzaE1jS2luc2V5XCIsICdHZW9yZ2lhJywgc2VyaWY7XG4kZm9udDogJGZvbnQtc3RhY2s7XG5cbiRmb250LWZhbWlseS1wcmltYXJ5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbiRmb250LWZhbWlseS1zZWNvbmRhcnk6IFwiQm93ZXJcIiwgR2VvcmdpYSwgXCJUaW1lcyBOZXcgUm9tYW5cIiBzZXJpZjtcblxuJGJhc2Utc2l6ZTogMTZweDtcbiR0YWJsZXQtc2l6ZTogMTZweDtcbiRtb2JpbGUtc2l6ZTogMTZweDtcblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbiRicmVhay1tb2JpbGU6IDQ1MHB4O1xuJGJyZWFrLXRhYmxldDogODAwcHg7XG4kYnJlYWstbGFwdG9wOiAxMDI0cHg7XG5cbiRicmVhay1sYW5kc2NhcGUtbW9iaWxlOiA4MDBweDtcbiRicmVhay1sYW5kc2NhcGUtdGFibGV0OiAxMDQ4cHg7XG4kYnJlYWstbGFuZHNjYXBlLWxhcHRvcDogMTI4MHB4O1xuIiwiQGltcG9ydCAnLi92YXJpYWJsZXMnO1xuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbkBtaXhpbiBib3gtc2hhZG93KCRjb2xvcjogIzAwMCwgJGRlcHRoOiAxKSB7XG4gICAgYm94LXNoYWRvdzogMCAxcHggM3B4IDFweCAqICgkZGVwdGggLSAxKSByZ2JhKCMwMDAsIC4yKSxcbiAgICAgICAgICAgICAgICAwIDFweCAxcHggMCByZ2JhKCMwMDAsIC4xNCksXG4gICAgICAgICAgICAgICAgMCAycHggMXB4IC0xcHggcmdiYSgjMDAwLCAuMTIpO1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuQG1peGluIHJlc3BvbmQtdG8oJG1lZGlhKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9ICBAZWxzZSBpZiAkbWVkaWEgPT0gbGF0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9QGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIkBpbXBvcnQgXCJsaWJzL3VpL3NyYy9saWIvbWl4aW5zXCI7XG5AaW1wb3J0ICdtaXhpbnMnO1xuXG4ucm9vbS1sb2NhdGlvbiB7XG4gICAgLmhlYWRlciB7XG4gICAgICAgIHotaW5kZXg6IDEwO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgIH1cbn1cbi5ib29raW5nLXZpZXcge1xuICAgIGhlaWdodDogMTI0cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAjRENEQ0RDO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLm1hcC13cmFwcGVyIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB0b3A6IC05MCU7XG4gICAgfVxufVxuXG4ubWFwLXdyYXBwZXIge1xuICAgIGhlaWdodDogMzY4cHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjQTE5RjlGO1xuICAgIFxuICAgICYuZXhwYW5kZWQge1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgICAgIHotaW5kZXg6IDQ7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjA7XG4gICAgfVxuICAgIGEtbWFwIHtcbiAgICAgICAgY3Vyc29yOiBtb3ZlO1xuICAgICAgICAmLm5wIHtcbiAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAuZm9vdGVyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHBhZGRpbmc6IDI0cHggMTZweDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgICAgICAgaGVpZ2h0OiA5NnB4O1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgID4gZGl2IHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG4gICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgICB3aWR0aDogMjEycHg7XG4gICAgICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgICAgICAgIEBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC5zdWIge1xuICAgICAgICB6LWluZGV4OiAyO1xuICAgICAgICBoZWlnaHQ6IDIwMHB4O1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogODlweDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHBhZGRpbmc6IDAgMTVweDtcbiAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE3OS44ZGVnLCByZ2JhKDUsIDI4LCA0NCwgMC4xNSkgMC4xNyUsIHJnYmEoMCwgMCwgMCwgMCkgODEuOTIlKTtcbiAgICAgICAgQGluY2x1ZGUgcmVzcG9uZC10byhtb2JpbGUpIHtcbiAgICAgICAgICAgIHRvcDogNjdweDtcbiAgICAgICAgfVxuICAgICAgICA+ZGl2IHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDEwMjRweDtcbiAgICAgICAgICAgIG1hcmdpbjogMzBweCBhdXRvO1xuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0UwRTBFMDsgICAgICAgICAgICAgICBcbiAgICAgICAgICAgID5kaXYge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDE0cHggMTRweCAwIDE0cHg7XG4gICAgICAgICAgICAgICAgJi5tYXAtY29udHJvbHMge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNnB4IDE0cHggMDtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcblxuICAgICAgICAgICAgICAgICAgICAubWNrLXJvd3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC5tYXAtY29udHJvbHMtY29udGFpbmVye1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHVuc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogdW5zZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAubWNrLWNvbHVtbntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9ue1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAubWNrLXN0cm9rZWQtYnV0dG9ue1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogNDBweCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAubGVnZW5kLWNvbnRhaW5lcntcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMCAwIDAgMTVweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxNjBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC5sZWdlbmQtZGl2aWRlcntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwcHggIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogNDBweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIC5sZWdlbmQtY29udGFpbmVyIC5sZWdlbmQtZGl2aWRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAtY29udHJvbHMtY29udGFpbmVyIC5tY2stc3Ryb2tlZC1idXR0b257XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAzMnB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAtaW5mby1idXR0b257XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgLmxlZ2VuZC1jb250YWluZXJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxNTBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAmLnRpdGxlIHtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDE0cHg7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC50aXRsZS1uYW1lIHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC50aXRsZS1kZXNjcmlwdGlvbiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjNzU3NTc1O1xuICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMnB4IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGgxIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjNzU3NTc1O1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4ubWFwLWljb24ge1xuICAgICYtaW5mbyB7XG4gICAgICAgIEBpbmNsdWRlIG1jay1zbWFsbC1pY29uKCdpbmZvLWljb24tc21hbGwuc3ZnJywgJ2luZm8taWNvbi1sYXJnZS5zdmcnKTtcbiAgICB9XG59Il19 */"], encapsulation: 2 }); + } }, directives: [i4.NgIf, i5.MapComponent, i6.TopbarHeaderComponent, i7.MatButton, i8.LegendDropdownComponent, i9.MapControlsComponent], pipes: [i4.AsyncPipe], styles: ["/**\n * Spacing\n */\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n/*===================*\\\n|| Icon sizes ||\n\\*===================*/\n/**\n * Makes text have maximum lines with ellipsis. Works on most modern browsers except\n * of Firefox..\n */\n/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n.room-location .header {\n z-index: 10;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n display: block;\n padding: 0;\n}\n.booking-view {\n height: 270px;\n margin-bottom: 20px;\n border: 2px solid #DCDCDC;\n box-sizing: border-box;\n border-radius: 4px;\n overflow: hidden;\n}\n.booking-view .map-wrapper {\n position: relative;\n top: -40%;\n}\n.map-wrapper {\n height: 374px;\n width: 100%;\n overflow: hidden;\n border: 1px solid #A19F9F;\n}\n.map-wrapper.expanded {\n position: fixed;\n top: 0;\n left: 0;\n height: 100% !important;\n z-index: 4;\n background-color: #f0f0f0;\n}\n.map-wrapper a-map {\n cursor: move;\n}\n.map-wrapper a-map.np {\n pointer-events: none;\n cursor: default;\n}\n.map-wrapper .footer {\n position: absolute;\n bottom: 0;\n left: 0;\n padding: 24px 16px;\n border: 1px solid #E6E6E6;\n height: 96px;\n width: 100%;\n background-color: white;\n}\n.map-wrapper .footer > div {\n width: 100%;\n}\n.map-wrapper .footer button {\n width: 212px;\n margin: 0 auto;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .footer button {\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .footer button {\n width: 100%;\n }\n}\n.map-wrapper .sub {\n z-index: 2;\n height: 200px;\n position: absolute;\n top: 89px;\n left: 0;\n width: 100%;\n padding: 0 15px;\n background: linear-gradient(179.8deg, rgba(5, 28, 44, 0.15) 0.17%, rgba(0, 0, 0, 0) 81.92%);\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .sub {\n top: 67px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .sub {\n top: 67px;\n }\n}\n.map-wrapper .sub .map-controls {\n display: flex;\n justify-content: space-between;\n position: absolute;\n right: 0;\n top: -17px;\n}\n.map-wrapper .sub .map-controls .mck-row {\n visibility: hidden;\n}\n.map-wrapper .sub .map-controls .map-controls-container {\n position: unset;\n margin-top: 0;\n box-shadow: none;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .sub .map-controls .map-controls-container {\n position: unset;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .sub .map-controls .map-controls-container {\n position: unset;\n }\n}\n.map-wrapper .sub .map-controls .map-controls-container .mck-column {\n flex-direction: row;\n}\n.map-wrapper .sub .map-controls .map-controls-container button {\n border-radius: 0;\n}\n.map-wrapper .sub .map-controls .map-controls-container .mck-stroked-button {\n height: 40px !important;\n}\n.map-wrapper .sub .map-controls .legend-container {\n margin: 0 0 0 15px;\n width: 160px;\n}\n.map-wrapper .sub .map-controls .legend-container .mat-form-field-appearance-outline .mat-form-field-wrapper {\n margin: 0;\n}\n.map-wrapper .sub .map-controls .legend-container .legend-divider {\n height: 40px !important;\n}\n.map-wrapper .sub .map-controls .mck-form-input mat-form-field .mat-form-field-outline {\n height: 40px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .sub .map-controls {\n position: relative;\n right: unset;\n top: unset;\n }\n .map-wrapper .sub .map-controls .mck-form-input mat-form-field .mat-form-field-outline,\n.map-wrapper .sub .map-controls .legend-container .legend-divider,\n.map-wrapper .sub .map-controls .map-controls-container .mck-stroked-button {\n height: 32px !important;\n }\n .map-wrapper .sub .map-controls .map-info-button {\n display: none;\n }\n .map-wrapper .sub .map-controls .legend-container {\n margin: 0;\n width: 150px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .sub .map-controls {\n position: relative;\n right: unset;\n top: unset;\n }\n .map-wrapper .sub .map-controls .mck-form-input mat-form-field .mat-form-field-outline,\n.map-wrapper .sub .map-controls .legend-container .legend-divider,\n.map-wrapper .sub .map-controls .map-controls-container .mck-stroked-button {\n height: 32px !important;\n }\n .map-wrapper .sub .map-controls .map-info-button {\n display: none;\n }\n .map-wrapper .sub .map-controls .legend-container {\n margin: 0;\n width: 150px;\n }\n}\n.map-wrapper .sub > div {\n background-color: white;\n width: 100%;\n max-width: 1024px;\n margin: 30px auto;\n border: 1px solid #E0E0E0;\n}\n.map-wrapper .sub > div > div {\n padding: 14px 14px 0 14px;\n}\n.map-wrapper .sub > div > div.map-controls {\n display: flex;\n padding: 16px 14px 0;\n width: 100%;\n justify-content: space-between;\n}\n.map-wrapper .sub > div > div.map-controls .mck-row {\n visibility: hidden;\n}\n.map-wrapper .sub > div > div.map-controls .map-controls-container {\n position: unset;\n margin-top: 0;\n box-shadow: none;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .sub > div > div.map-controls .map-controls-container {\n position: unset;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .sub > div > div.map-controls .map-controls-container {\n position: unset;\n }\n}\n.map-wrapper .sub > div > div.map-controls .map-controls-container .mck-column {\n flex-direction: row;\n}\n.map-wrapper .sub > div > div.map-controls .map-controls-container button {\n border-radius: 0;\n}\n.map-wrapper .sub > div > div.map-controls .map-controls-container .mck-stroked-button {\n height: 40px !important;\n}\n.map-wrapper .sub > div > div.map-controls .legend-container {\n margin: 0 0 0 15px;\n width: 160px;\n}\n.map-wrapper .sub > div > div.map-controls .legend-container .mat-form-field-appearance-outline .mat-form-field-wrapper {\n margin: 0;\n}\n.map-wrapper .sub > div > div.map-controls .legend-container .legend-divider {\n height: 40px !important;\n}\n.map-wrapper .sub > div > div.map-controls .mck-form-input mat-form-field .mat-form-field-outline {\n height: 40px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .sub > div > div.map-controls .mck-form-input mat-form-field .mat-form-field-outline,\n.map-wrapper .sub > div > div.map-controls .legend-container .legend-divider,\n.map-wrapper .sub > div > div.map-controls .map-controls-container .mck-stroked-button {\n height: 32px !important;\n }\n .map-wrapper .sub > div > div.map-controls .map-info-button {\n display: none;\n }\n .map-wrapper .sub > div > div.map-controls .legend-container {\n margin: 0;\n width: 150px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .sub > div > div.map-controls .mck-form-input mat-form-field .mat-form-field-outline,\n.map-wrapper .sub > div > div.map-controls .legend-container .legend-divider,\n.map-wrapper .sub > div > div.map-controls .map-controls-container .mck-stroked-button {\n height: 32px !important;\n }\n .map-wrapper .sub > div > div.map-controls .map-info-button {\n display: none;\n }\n .map-wrapper .sub > div > div.map-controls .legend-container {\n margin: 0;\n width: 150px;\n }\n}\n.map-wrapper .sub > div > div.title {\n padding-bottom: 14px;\n}\n.map-wrapper .sub > div > div.title .title-and-map-control {\n align-items: flex-start;\n position: relative;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .sub > div > div.title .title-and-map-control {\n flex-direction: column;\n }\n .map-wrapper .sub > div > div.title .title-and-map-control .map-controls {\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .sub > div > div.title .title-and-map-control {\n flex-direction: column;\n }\n .map-wrapper .sub > div > div.title .title-and-map-control .map-controls {\n width: 100%;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .sub > div > div.title {\n padding-bottom: 4px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .sub > div > div.title {\n padding-bottom: 4px;\n }\n}\n.map-wrapper .sub > div > div .title-name {\n margin: 0;\n font-size: 20px;\n font-weight: 400;\n}\n.map-wrapper .sub > div > div .title-description {\n color: #757575;\n font-size: 14px;\n margin: 2px 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .sub > div > div h1 {\n font-size: 18px;\n }\n .map-wrapper .sub > div > div p {\n color: #757575;\n font-size: 14px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .sub > div > div h1 {\n font-size: 18px;\n }\n .map-wrapper .sub > div > div p {\n color: #757575;\n font-size: 14px;\n }\n}\n.map-icon-info {\n width: 16px;\n height: 16px;\n background-image: url('info-icon-small.svg');\n background-size: contain;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .map-icon-info {\n width: 24px;\n height: 24px;\n background-image: url('info-icon-large.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .map-icon-info {\n width: 24px;\n height: 24px;\n background-image: url('info-icon-large.svg');\n background-size: contain;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWxvY2F0aW9uLXByZXZpZXcvcm9vbS1sb2NhdGlvbi1wcmV2aWV3LmNvbXBvbmVudC5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy91aS9zcmMvbGliL21peGlucy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvdmFyaWFibGVzLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL2xlZ2FjeS11aS9zcmMvbGliL3N0eWxlcy9taXhpbnMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2FwcHMvc3RhZmYvc3JjL2FwcC9ib29raW5nL3Jvb20tbG9jYXRpb24tcHJldmlldy9yb29tLWxvY2F0aW9uLXByZXZpZXcuY29tcG9uZW50LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMkNBOztFQUFBO0FBcUNBOztzQkFBQTtBQWFBO0VBQ0ksZ0JBOUZNO0VBK0ZOLHVCQTdGYztBQ09sQjtBRHlGQTs7c0JBQUE7QUVrT0E7OztFQUFBO0FDcFVBOzswQkFBQTtBQVFBOzswQkFBQTtBQWtDQTs7Y0FBQTtBQWdCQTs7c0JBQUE7QUM1Q0E7O3NCQUFBO0FDVkk7RUFDSSxXQUFBO0VBQ0Esa0JBQUE7RUFDQSxNQUFBO0VBQ0EsT0FBQTtFQUNBLFdBQUE7RUFDQSxjQUFBO0VBQ0EsVUFBQTtBSjhCUjtBSTNCQTtFQUNJLGFBQUE7RUFDQSxtQkFB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MURzQjtJQUNJLGFBQUE7RUo0RDFCO0VJekRzQjtJQUNJLFNBQUE7SUFDQSxZQUFBO0VKMkQxQjtBQUNGO0FDN1FZO0VHcU1ZOzs7SUFHSSx1QkFBQTtFSjJFMUI7RUl4RXNCO0lBQ0ksYUFBQTtFSjBFMUI7RUl2RXNCO0lBQ0ksU0FBQTtJQUNBLFlBQUE7RUp5RTFCO0FBQ0Y7QUl0RWdCO0VBQ0ksb0JBQUE7QUp3RXBCO0FJdkVvQjtFQUNJLHVCQUFBO0VBQ0Esa0JBQUE7QUp5RXhCO0FDbFNZO0VHdU5RO0lBSVEsc0JBQUE7RUoyRTFCO0VJMUUwQjtJQUNJLFdBQUE7RUo0RTlCO0FBQ0Y7QUMxU1k7RUd1TlE7SUFJUSxzQkFBQTtFSm1GMUI7RUlsRjBCO0lBQ0ksV0FBQTtFSm9GOUI7QUFDRjtBR3ZTUTtFQzBNUTtJQWVRLG1CQUFBO0VKa0Z0QjtBQUNGO0FHelNRO0VDdU1RO0lBZVEsbUJBQUE7RUp1RnRCO0FBQ0Y7QUlyRmdCO0VBQ0ksU0FBQTtFQUNBLGVBQUE7RUFDQSxnQkFBQTtBSnVGcEI7QUlyRmdCO0VBQ0ksY0FBQTtFQUNBLGVBQUE7RUFDQSxhQUFBO0FKdUZwQjtBRzNUUTtFQ3VPWTtJQUNJLGVBQUE7RUp1RnRCO0VJckZrQjtJQUNJLGNBQUE7SUFDQSxlQUFBO0VKdUZ0QjtBQUNGO0FHalVRO0VDb09ZO0lBQ0ksZUFBQTtFSmdHdEI7RUk5RmtCO0lBQ0ksY0FBQTtJQUNBLGVBQUE7RUpnR3RCO0FBQ0Y7QUl4Rkk7RUh3RUEsV0FRa0I7RUFQbEIsWUFPa0I7RUFObEIsNENBQUE7RUFDQSx3QkFBQTtBRG9CSjtBQ25XWTtFR29RUjtJSHdFQSxXQVdzQjtJQVZ0QixZQVVzQjtJQVR0Qiw0Q0FBQTtJQUNBLHdCQUFBO0VEMkJGO0FBQ0Y7QUMzV1k7RUdvUVI7SUh3RUEsV0FXc0I7SUFWdEIsWUFVc0I7SUFUdEIsNENBQUE7SUFDQSx3QkFBQTtFRG1DRjtBQUNGIiwiZmlsZSI6ImFwcHMvc3RhZmYvc3JjL2FwcC9ib29raW5nL3Jvb20tbG9jYXRpb24tcHJldmlldy9yb29tLWxvY2F0aW9uLXByZXZpZXcuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIkcHJpbWFyeTogIzFGNDBFNjtcbiRmb3JtLWxhYmVsOiAjMDUxQzJDO1xuJHNlY29uZGFyeS1sYWJlbDogIzc2NzY3NjtcbiRib3JkZXI6ICNCM0IzQjM7XG4kYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDogI0QwRDBEMDtcbiRjaGlwLWNvbG9yOiAjMzMzMzMzO1xuJHBsYWNlaG9sZGVyLWNvbG9yOiAjN0Y3RjdGO1xuJGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4kcGFnZS1iYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuJHNlbGVjdGVkLW9wdGlvbjogI0U2RTZFNjtcbiRjb2xvci1icmFuZC15ZWxsb3c6ICNmZmQwNDg7XG4kbGlnaHQteWVsbG93OiAjZmZmM2NlO1xuJGNvYWNobWFyay10ZXh0OiAjNmY0ZDAwO1xuJGVycm9yLWNvbG9yOiAjRTEyRTQwO1xuJG5vLWZpbHRlcnMtY29sb3I6ICNCQ0JDQkM7XG4kcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I6ICNGNEY0RjQ7XG4kcHJpbWFyeS1oaWdobGlnaHQ6ICMyMjUxRkY7XG4kc2Nyb2xsYmFyLWNvbG9yOiAjNzU3NTc1O1xuXG4kYXZhaWxhYmxlLWNvbG9yOiAjNUQ5RDUyO1xuJGF2YWlsYWJsZS1ieS1yZXF1ZXN0LWNvbG9yOiAjRjVCNTNGO1xuJGluLXVzZS1jb2xvcjogI0Q0NDgzRTtcbiRub3QtYm9va2FibGUtY29sb3I6ICNDQ0NDQ0M7XG5cbiRtb2RhbC1ib2R5LWhlYWRpbmc6ICM0RDRENEQ7XG4kYWxlcnQtb3ZlcmxheS1iZzogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2FjaG1hcmstYmc6ICNFQkVCRjY7XG4kY29hY2htYXJrLWRhcmstdGV4dDogIzFCMUIxOTtcbiRlcnJvci10ZXh0OiAjZmZmO1xuXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuXG4vLyA0cHhcbiRzcGFjaW5nLXNtYWxsZXN0OiAwLjI1cmVtO1xuXG4vLyA4cHhcbiRzcGFjaW5nLXh4c21hbGw6IDAuNXJlbTtcblxuLy8gMTJweFxuJHNwYWNpbmcteHNtYWxsOiAwLjc1cmVtO1xuXG4vLyAxNnB4XG4kc3BhY2luZy1zbWFsbDogMXJlbTtcblxuLy8gMjBweFxuJHNwYWNpbmctc21hbGwtbWVkaXVtOiAxLjI1cmVtO1xuXG4vLyAyNHB4XG4kc3BhY2luZy1tZWRpdW06IDEuNXJlbTtcblxuLy8gMjhweFxuJHNwYWNpbmctbWVkaXVtLWxhcmdlOiAxLjc1cmVtO1xuXG4vLyAzMnB4XG4kc3BhY2luZy1sYXJnZTogMnJlbTtcblxuLy8gNDhweFxuJHNwYWNpbmcteGxhcmdlOiAzcmVtO1xuXG4vLyA2NHB4XG4kc3BhY2luZy14eGxhcmdlOiA0cmVtO1xuXG4vLyA5NnB4XG4kc3BhY2luZy1sYXJnZXN0OiA2cmVtO1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGRldmljZS1tb2JpbGUtc2l6ZTogNDUwcHg7XG4kZGV2aWNlLXRhYmxldC1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFwdG9wLXNpemU6IDEwMjRweDtcblxuJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemU6IDgwMHB4O1xuJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemU6IDEwNDhweDtcbiRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplOiAxMjgwcHg7XG5cblxuOmV4cG9ydCB7XG4gICAgcHJpbWFyeTogJHByaW1hcnk7XG4gICAgc2Vjb25kYXJ5TGFiZWw6ICRzZWNvbmRhcnktbGFiZWw7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4kaWNvbi1zbWFsbDogMTZweDtcbiRpY29uLW1lZGl1bTogMjRweDtcbiRpY29uLWxhcmdlOiAzMnB4O1xuJGljb24teGxhcmdlOiA0OHB4O1xuIiwiLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi5yb29tLWxvY2F0aW9uIC5oZWFkZXIge1xuICB6LWluZGV4OiAxMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogMDtcbn1cblxuLmJvb2tpbmctdmlldyB7XG4gIGhlaWdodDogMjcwcHg7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNEQ0RDREM7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5ib29raW5nLXZpZXcgLm1hcC13cmFwcGVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IC00MCU7XG59XG5cbi5tYXAtd3JhcHBlciB7XG4gIGhlaWdodDogMzc0cHg7XG4gIHdpZHRoOiAxMDAlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBib3JkZXI6IDFweCBzb2xpZCAjQTE5RjlGO1xufVxuLm1hcC13cmFwcGVyLmV4cGFuZGVkIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xuICB6LWluZGV4OiA0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYwO1xufVxuLm1hcC13cmFwcGVyIGEtbWFwIHtcbiAgY3Vyc29yOiBtb3ZlO1xufVxuLm1hcC13cmFwcGVyIGEtbWFwLm5wIHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIGN1cnNvcjogZGVmYXVsdDtcbn1cbi5tYXAtd3JhcHBlciAuZm9vdGVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHBhZGRpbmc6IDI0cHggMTZweDtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgaGVpZ2h0OiA5NnB4O1xuICB3aWR0aDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG59XG4ubWFwLXdyYXBwZXIgLmZvb3RlciA+IGRpdiB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLm1hcC13cmFwcGVyIC5mb290ZXIgYnV0dG9uIHtcbiAgd2lkdGg6IDIxMnB4O1xuICBtYXJnaW46IDAgYXV0bztcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tYXAtd3JhcHBlciAuZm9vdGVyIGJ1dHRvbiB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWFwLXdyYXBwZXIgLmZvb3RlciBidXR0b24ge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG4ubWFwLXdyYXBwZXIgLnN1YiB7XG4gIHotaW5kZXg6IDI7XG4gIGhlaWdodDogMjAwcHg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiA4OXB4O1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMCAxNXB4O1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTc5LjhkZWcsIHJnYmEoNSwgMjgsIDQ0LCAwLjE1KSAwLjE3JSwgcmdiYSgwLCAwLCAwLCAwKSA4MS45MiUpO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1hcC13cmFwcGVyIC5zdWIge1xuICAgIHRvcDogNjdweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tYXAtd3JhcHBlciAuc3ViIHtcbiAgICB0b3A6IDY3cHg7XG4gIH1cbn1cbi5tYXAtd3JhcHBlciAuc3ViIC5tYXAtY29udHJvbHMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDA7XG4gIHRvcDogLTE3cHg7XG59XG4ubWFwLXdyYXBwZXIgLnN1YiAubWFwLWNvbnRyb2xzIC5tY2stcm93IHtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuLm1hcC13cmFwcGVyIC5zdWIgLm1hcC1jb250cm9scyAubWFwLWNvbnRyb2xzLWNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiB1bnNldDtcbiAgbWFyZ2luLXRvcDogMDtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tYXAtd3JhcHBlciAuc3ViIC5tYXAtY29udHJvbHMgLm1hcC1jb250cm9scy1jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiB1bnNldDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tYXAtd3JhcHBlciAuc3ViIC5tYXAtY29udHJvbHMgLm1hcC1jb250cm9scy1jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiB1bnNldDtcbiAgfVxufVxuLm1hcC13cmFwcGVyIC5zdWIgLm1hcC1jb250cm9scyAubWFwLWNvbnRyb2xzLWNvbnRhaW5lciAubWNrLWNvbHVtbiB7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG59XG4ubWFwLXdyYXBwZXIgLnN1YiAubWFwLWNvbnRyb2xzIC5tYXAtY29udHJvbHMtY29udGFpbmVyIGJ1dHRvbiB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4ubWFwLXdyYXBwZXIgLnN1YiAubWFwLWNvbnRyb2xzIC5tYXAtY29udHJvbHMtY29udGFpbmVyIC5tY2stc3Ryb2tlZC1idXR0b24ge1xuICBoZWlnaHQ6IDQwcHggIWltcG9ydGFudDtcbn1cbi5tYXAtd3JhcHBlciAuc3ViIC5tYXAtY29udHJvbHMgLmxlZ2VuZC1jb250YWluZXIge1xuICBtYXJnaW46IDAgMCAwIDE1cHg7XG4gIHdpZHRoOiAxNjBweDtcbn1cbi5tYXAtd3JhcHBlciAuc3ViIC5tYXAtY29udHJvbHMgLmxlZ2VuZC1jb250YWluZXIgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtd3JhcHBlciB7XG4gIG1hcmdpbjogMDtcbn1cbi5tYXAtd3JhcHBlciAuc3ViIC5tYXAtY29udHJvbHMgLmxlZ2VuZC1jb250YWluZXIgLmxlZ2VuZC1kaXZpZGVyIHtcbiAgaGVpZ2h0OiA0MHB4ICFpbXBvcnRhbnQ7XG59XG4ubWFwLXdyYXBwZXIgLnN1YiAubWFwLWNvbnRyb2xzIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gIGhlaWdodDogNDBweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tYXAtd3JhcHBlciAuc3ViIC5tYXAtY29udHJvbHMge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICByaWdodDogdW5zZXQ7XG4gICAgdG9wOiB1bnNldDtcbiAgfVxuICAubWFwLXdyYXBwZXIgLnN1YiAubWFwLWNvbnRyb2xzIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSxcbi5tYXAtd3JhcHBlciAuc3ViIC5tYXAtY29udHJvbHMgLmxlZ2VuZC1jb250YWluZXIgLmxlZ2VuZC1kaXZpZGVyLFxuLm1hcC13cmFwcGVyIC5zdWIgLm1hcC1jb250cm9scyAubWFwLWNvbnRyb2xzLWNvbnRhaW5lciAubWNrLXN0cm9rZWQtYnV0dG9uIHtcbiAgICBoZWlnaHQ6IDMycHggIWltcG9ydGFudDtcbiAgfVxuICAubWFwLXdyYXBwZXIgLnN1YiAubWFwLWNvbnRyb2xzIC5tYXAtaW5mby1idXR0b24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLm1hcC13cmFwcGVyIC5zdWIgLm1hcC1jb250cm9scyAubGVnZW5kLWNvbnRhaW5lciB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHdpZHRoOiAxNTBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tYXAtd3JhcHBlciAuc3ViIC5tYXAtY29udHJvbHMge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICByaWdodDogdW5zZXQ7XG4gICAgdG9wOiB1bnNldDtcbiAgfVxuICAubWFwLXdyYXBwZXIgLnN1YiAubWFwLWNvbnRyb2xzIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSxcbi5tYXAtd3JhcHBlciAuc3ViIC5tYXAtY29udHJvbHMgLmxlZ2VuZC1jb250YWluZXIgLmxlZ2VuZC1kaXZpZGVyLFxuLm1hcC13cmFwcGVyIC5zdWIgLm1hcC1jb250cm9scyAubWFwLWNvbnRyb2xzLWNvbnRhaW5lciAubWNrLXN0cm9rZWQtYnV0dG9uIHtcbiAgICBoZWlnaHQ6IDMycHggIWltcG9ydGFudDtcbiAgfVxuICAubWFwLXdyYXBwZXIgLnN1YiAubWFwLWNvbnRyb2xzIC5tYXAtaW5mby1idXR0b24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLm1hcC13cmFwcGVyIC5zdWIgLm1hcC1jb250cm9scyAubGVnZW5kLWNvbnRhaW5lciB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHdpZHRoOiAxNTBweDtcbiAgfVxufVxuLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogMTAyNHB4O1xuICBtYXJnaW46IDMwcHggYXV0bztcbiAgYm9yZGVyOiAxcHggc29saWQgI0UwRTBFMDtcbn1cbi5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2IHtcbiAgcGFkZGluZzogMTRweCAxNHB4IDAgMTRweDtcbn1cbi5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2Lm1hcC1jb250cm9scyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmc6IDE2cHggMTRweCAwO1xuICB3aWR0aDogMTAwJTtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5tY2stcm93IHtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5tYXAtY29udHJvbHMtY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHVuc2V0O1xuICBtYXJnaW4tdG9wOiAwO1xuICBib3gtc2hhZG93OiBub25lO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5tYXAtY29udHJvbHMtY29udGFpbmVyIHtcbiAgICBwb3NpdGlvbjogdW5zZXQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLm1hcC1jb250cm9scy1jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiB1bnNldDtcbiAgfVxufVxuLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5tYXAtY29udHJvbHMtY29udGFpbmVyIC5tY2stY29sdW1uIHtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbn1cbi5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2Lm1hcC1jb250cm9scyAubWFwLWNvbnRyb2xzLWNvbnRhaW5lciBidXR0b24ge1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5tYXAtY29udHJvbHMtY29udGFpbmVyIC5tY2stc3Ryb2tlZC1idXR0b24ge1xuICBoZWlnaHQ6IDQwcHggIWltcG9ydGFudDtcbn1cbi5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2Lm1hcC1jb250cm9scyAubGVnZW5kLWNvbnRhaW5lciB7XG4gIG1hcmdpbjogMCAwIDAgMTVweDtcbiAgd2lkdGg6IDE2MHB4O1xufVxuLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5sZWdlbmQtY29udGFpbmVyIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICBtYXJnaW46IDA7XG59XG4ubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLmxlZ2VuZC1jb250YWluZXIgLmxlZ2VuZC1kaXZpZGVyIHtcbiAgaGVpZ2h0OiA0MHB4ICFpbXBvcnRhbnQ7XG59XG4ubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lIHtcbiAgaGVpZ2h0OiA0MHB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSxcbi5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2Lm1hcC1jb250cm9scyAubGVnZW5kLWNvbnRhaW5lciAubGVnZW5kLWRpdmlkZXIsXG4ubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLm1hcC1jb250cm9scy1jb250YWluZXIgLm1jay1zdHJva2VkLWJ1dHRvbiB7XG4gICAgaGVpZ2h0OiAzMnB4ICFpbXBvcnRhbnQ7XG4gIH1cbiAgLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5tYXAtaW5mby1idXR0b24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5sZWdlbmQtY29udGFpbmVyIHtcbiAgICBtYXJnaW46IDA7XG4gICAgd2lkdGg6IDE1MHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSxcbi5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2Lm1hcC1jb250cm9scyAubGVnZW5kLWNvbnRhaW5lciAubGVnZW5kLWRpdmlkZXIsXG4ubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLm1hcC1jb250cm9scy1jb250YWluZXIgLm1jay1zdHJva2VkLWJ1dHRvbiB7XG4gICAgaGVpZ2h0OiAzMnB4ICFpbXBvcnRhbnQ7XG4gIH1cbiAgLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5tYXAtaW5mby1idXR0b24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5sZWdlbmQtY29udGFpbmVyIHtcbiAgICBtYXJnaW46IDA7XG4gICAgd2lkdGg6IDE1MHB4O1xuICB9XG59XG4ubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi50aXRsZSB7XG4gIHBhZGRpbmctYm90dG9tOiAxNHB4O1xufVxuLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYudGl0bGUgLnRpdGxlLWFuZC1tYXAtY29udHJvbCB7XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi50aXRsZSAudGl0bGUtYW5kLW1hcC1jb250cm9sIHtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB9XG4gIC5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2LnRpdGxlIC50aXRsZS1hbmQtbWFwLWNvbnRyb2wgLm1hcC1jb250cm9scyB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi50aXRsZSAudGl0bGUtYW5kLW1hcC1jb250cm9sIHtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB9XG4gIC5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2LnRpdGxlIC50aXRsZS1hbmQtbWFwLWNvbnRyb2wgLm1hcC1jb250cm9scyB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2LnRpdGxlIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogNHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYudGl0bGUge1xuICAgIHBhZGRpbmctYm90dG9tOiA0cHg7XG4gIH1cbn1cbi5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2IC50aXRsZS1uYW1lIHtcbiAgbWFyZ2luOiAwO1xuICBmb250LXNpemU6IDIwcHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG59XG4ubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdiAudGl0bGUtZGVzY3JpcHRpb24ge1xuICBjb2xvcjogIzc1NzU3NTtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBtYXJnaW46IDJweCAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYgaDEge1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgfVxuICAubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdiBwIHtcbiAgICBjb2xvcjogIzc1NzU3NTtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdiBoMSB7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICB9XG4gIC5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2IHAge1xuICAgIGNvbG9yOiAjNzU3NTc1O1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgfVxufVxuXG4ubWFwLWljb24taW5mbyB7XG4gIHdpZHRoOiAxNnB4O1xuICBoZWlnaHQ6IDE2cHg7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9pbmZvLWljb24tc21hbGwuc3ZnXCIpO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWFwLWljb24taW5mbyB7XG4gICAgd2lkdGg6IDI0cHg7XG4gICAgaGVpZ2h0OiAyNHB4O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9pbmZvLWljb24tbGFyZ2Uuc3ZnXCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tYXAtaWNvbi1pbmZvIHtcbiAgICB3aWR0aDogMjRweDtcbiAgICBoZWlnaHQ6IDI0cHg7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwibGlicy91aS9zcmMvbGliL2ljb25zL2luZm8taWNvbi1sYXJnZS5zdmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICB9XG59IiwiQGltcG9ydCBcInZhcnNcIjtcblxuQG1peGluIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJHNpemUsICRxdWFsaWZpZXIpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBpZiAoJHF1YWxpZmllciA9PSBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIGlmICgkcXVhbGlmaWVyID09IG1heC13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtYXgtd2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBtaXhpbiBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJG1pbiwgJG1heCkge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gdGhpcyBpcyBhIGNvcHkgb2YgcmVzcG9uZC10by4gd2UgZG9uJ3Qgd2FudCB0byBwcmVzZXJ2ZSB0aGF0IG1ldGhvZCBzaW5jZSB0aGUgYnJlYWtwb2ludHMgbWF5IGRpdmVyZ2UgZnJvbSB0aGUgb2xkIFVJLlxuQG1peGluIGlzLXNjcmVlbi1zaXplKCRtZWRpYTogYWxsLCAkb3JpZW50YXRpb246IG5vbmUpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuXG5AbWl4aW4gcGFnZS1wYWRkaW5nIHtcbiAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xufVxuXG4vLyBGb250IE1peGluc1xuJGZvbnQtbWNraW5zZXktc2FuczogXCJNY0tpbnNleSBTYW5zXCI7XG4kZm9udC10aGVpbmhhcmR0OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiRmb250LWJvd2VyOiBcIkJvd2VyXCI7XG5cbkBtaXhpbiBib3dlci1ib2xkIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtYm93ZXI7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIG1ja2luc2V5LXNhbnMge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBkaXNwbGF5LTEge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDRyZW07IC8vIDY0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTg3OyAvLyA3NnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0yIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0zIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTQge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzcmVtOyAvLyA0OHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTY2OyAvLyA1NnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDY0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTUge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuODMzOyAvLyAzNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42NDI7IC8vIDQwcHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTcge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDQ4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjc1cmVtOyAvLyA0NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNTJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICBsaW5lLWhlaWdodDogMS4xMTE7IC8vIDQ0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA0OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0zIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjIyOyAvLyA0NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy00IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy01IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyODhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy02IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTU1OyAvLyAyOHB4XG4gICAgfVxufVxuXG5AbWl4aW4gYm9keS1kZWZhdWx0IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI2cHhcbiAgICB9XG59XG5cbi8vLyBEb2VzbnQgZXhpc3QgaW4gTURTLlxuQG1peGluIGJvZHktdGlueSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07IC8vIDEycHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyMHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZm9ybS1sYWJlbCB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LWZhbWlseTogJGZvbnQtdGhlaW5oYXJkdDtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgY29sb3I6ICRwbGFjZWhvbGRlci1jb2xvcjtcbiAgICBmb250LXdlaWdodDogMzAwO1xufVxuXG5AbWl4aW4gY2hpcC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIGNoZWNrYm94LWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgY29sb3I6IGJsYWNrO1xufVxuXG4vLyBib3JkZXJzXG5cbkBtaXhpbiBtY2stY2hlY2tib3gtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAycHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLXRoaW4tYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlci1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJvcmRlci1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50LWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXItbGlnaHQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5cbi8vIGZ1bmN0aW9uc1xuXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbkBtaXhpbiBtYXgtbGluZXMoJGNvdW50KSB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAtd2Via2l0LWxpbmUtY2xhbXA6ICRjb3VudDtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuXG4vLyBpbWFnZXNcbkBtaXhpbiBtY2staWNvbigkd2lkdGgsICRhc3NldCwgJGhlaWdodDogJHdpZHRoLCAgJGFzc2V0UGF0aDogXCJsaWJzL3VpL3NyYy9saWIvaWNvbnNcIiwpIHtcbiAgICB3aWR0aDogJHdpZHRoO1xuICAgIGhlaWdodDogJGhlaWdodDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIjeyRhc3NldFBhdGh9LyN7JGFzc2V0fVwiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG59XG5cblxuQG1peGluIG1jay1zbWFsbC1pY29uKCRtb2JpbGUtYXNzZXQsICRkZXNrdG9wLWFzc2V0OiAkbW9iaWxlLWFzc2V0KSB7XG4gICAgQGluY2x1ZGUgbWNrLWljb24oMTZweCwgJGFzc2V0OiAkbW9iaWxlLWFzc2V0KTtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oMjRweCwgJGFzc2V0OiAkZGVza3RvcC1hc3NldCk7XG4gICAgfVxufVxuXG4vLyBza2VsZXRvblxuQG1peGluIHNrZWxldG9uLWJnIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItaW1hZ2Utc2l6ZSB7XG4gICAgd2lkdGg6IDgxcHg7XG4gICAgaGVpZ2h0OiA4MnB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMjE5cHg7XG4gICAgICAgIGhlaWdodDogMTE5cHg7XG4gICAgfVxufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItc3RhdHVzLXNpemUge1xuICAgIHdpZHRoOiAxMTdweDtcbiAgICBoZWlnaHQ6IDc4cHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAxMTdweDtcbiAgICAgICAgaGVpZ2h0OiA3OHB4O1xuICAgIH1cbn1cbiIsIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGNvbG9yLWJyYW5kLWVsZWN0cmljLWJsdWU6ICMyMjUxZmY7XG4kY29sb3ItYnJhbmQtZGVlcC1ibHVlOiAjMDUxYzJjO1xuJGNvbG9yLWJyYW5kLWN5YW46ICMwMGE5ZjQ7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kZm9udC1kYXJrOiAjMDAwO1xuJGZvbnQtbGlnaHQ6ICNmZmY7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuJGdyZWVuMTogIzIxOTY1MztcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2xvci1wcmltYXJ5OiAjMTkzN2VhO1xuJGNvbG9yLXByaW1hcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcbiRjb2xvci1wcmltYXJ5LWRhcms6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuXG4kY29sb3Itc2Vjb25kYXJ5OiAjNDI4NUY0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodDogbGlnaHRlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG4kY29sb3Itc2Vjb25kYXJ5LWRhcms6IGRhcmtlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG5cbiRiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuJGZvb3Rlci1iYWNrOiAjMjYzMjM4O1xuJGhlYWRlci1iYWNrOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNTFDMkMsICMwNTFDMkMgNDAlLCAjMEIyNDUzIDYwJSwgIzFGNDBFNiAxMDAlKTtcblxuJGNvbG9yLXRlcm5hcnk6ICMwNTFjMmM7XG5cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuXG4kZm9udC1zdGFjazogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiRoZWFkaW5nLWZvbnQ6IFwiTGFyaXNoTWNLaW5zZXlcIiwgJ0dlb3JnaWEnLCBzZXJpZjtcbiRmb250OiAkZm9udC1zdGFjaztcblxuJGZvbnQtZmFtaWx5LXByaW1hcnk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LXNlY29uZGFyeTogXCJCb3dlclwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiIHNlcmlmO1xuXG4kYmFzZS1zaXplOiAxNnB4O1xuJHRhYmxldC1zaXplOiAxNnB4O1xuJG1vYmlsZS1zaXplOiAxNnB4O1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGJyZWFrLW1vYmlsZTogNDUwcHg7XG4kYnJlYWstdGFibGV0OiA4MDBweDtcbiRicmVhay1sYXB0b3A6IDEwMjRweDtcblxuJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGU6IDgwMHB4O1xuJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQ6IDEwNDhweDtcbiRicmVhay1sYW5kc2NhcGUtbGFwdG9wOiAxMjgwcHg7XG4iLCJAaW1wb3J0ICcuL3ZhcmlhYmxlcyc7XG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuQG1peGluIGJveC1zaGFkb3coJGNvbG9yOiAjMDAwLCAkZGVwdGg6IDEpIHtcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMXB4ICogKCRkZXB0aCAtIDEpIHJnYmEoIzAwMCwgLjIpLFxuICAgICAgICAgICAgICAgIDAgMXB4IDFweCAwIHJnYmEoIzAwMCwgLjE0KSxcbiAgICAgICAgICAgICAgICAwIDJweCAxcHggLTFweCByZ2JhKCMwMDAsIC4xMik7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG5AbWl4aW4gcmVzcG9uZC10bygkbWVkaWEpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gIEBlbHNlIGlmICRtZWRpYSA9PSBsYXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1AZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQGltcG9ydCBcImxpYnMvdWkvc3JjL2xpYi9taXhpbnNcIjtcbkBpbXBvcnQgJ21peGlucyc7XG5cbi5yb29tLWxvY2F0aW9uIHtcbiAgICAuaGVhZGVyIHtcbiAgICAgICAgei1pbmRleDogMTA7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgfVxufVxuLmJvb2tpbmctdmlldyB7XG4gICAgaGVpZ2h0OiAyNzBweDtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICNEQ0RDREM7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAubWFwLXdyYXBwZXIge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHRvcDogLTQwJTtcbiAgICB9XG59XG5cbi5tYXAtd3JhcHBlciB7XG4gICAgaGVpZ2h0OiAzNzRweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNBMTlGOUY7XG4gICAgXG4gICAgJi5leHBhbmRlZCB7XG4gICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgICAgei1pbmRleDogNDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcbiAgICB9XG4gICAgYS1tYXAge1xuICAgICAgICBjdXJzb3I6IG1vdmU7XG4gICAgICAgICYubnAge1xuICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICB9XG4gICAgfVxuICAgIC5mb290ZXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcGFkZGluZzogMjRweCAxNnB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICAgICAgICBoZWlnaHQ6IDk2cHg7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9uIHtcbiAgICAgICAgICAgIHdpZHRoOiAyMTJweDtcbiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgICAgICAgQGluY2x1ZGUgcmVzcG9uZC10byhtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLnN1YiB7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICAgIGhlaWdodDogMjAwcHg7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiA4OXB4O1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgcGFkZGluZzogMCAxNXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTc5LjhkZWcsIHJnYmEoNSwgMjgsIDQ0LCAwLjE1KSAwLjE3JSwgcmdiYSgwLCAwLCAwLCAwKSA4MS45MiUpO1xuICAgICAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgICAgICAgdG9wOiA2N3B4O1xuICAgICAgICB9XG5cbiAgICAgICAgLm1hcC1jb250cm9scyB7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgLy8gcGFkZGluZzogMTZweCAxNHB4IDA7XG4gICAgICAgICAgICAvLyB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICAgICAgdG9wOiAtMTdweDtcblxuICAgICAgICAgICAgLm1jay1yb3d7XG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWFwLWNvbnRyb2xzLWNvbnRhaW5lcntcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogdW5zZXQ7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogdW5zZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC5tY2stY29sdW1ue1xuICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBidXR0b257XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC5tY2stc3Ryb2tlZC1idXR0b257XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogNDBweCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAubGVnZW5kLWNvbnRhaW5lcntcbiAgICAgICAgICAgICAgICBtYXJnaW46IDAgMCAwIDE1cHg7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDE2MHB4O1xuICAgICAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC5sZWdlbmQtZGl2aWRlcntcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0MHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcblxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICByaWdodDogdW5zZXQ7XG4gICAgICAgICAgICAgICAgdG9wOiB1bnNldDtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsIFxuICAgICAgICAgICAgICAgIC5sZWdlbmQtY29udGFpbmVyIC5sZWdlbmQtZGl2aWRlcixcbiAgICAgICAgICAgICAgICAubWFwLWNvbnRyb2xzLWNvbnRhaW5lciAubWNrLXN0cm9rZWQtYnV0dG9ue1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDMycHggIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAubWFwLWluZm8tYnV0dG9ue1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC5sZWdlbmQtY29udGFpbmVye1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxNTBweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICA+ZGl2IHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDEwMjRweDtcbiAgICAgICAgICAgIG1hcmdpbjogMzBweCBhdXRvO1xuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0UwRTBFMDsgICAgICAgICAgICAgICBcbiAgICAgICAgICAgID5kaXYge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDE0cHggMTRweCAwIDE0cHg7XG4gICAgICAgICAgICAgICAgJi5tYXAtY29udHJvbHMge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNnB4IDE0cHggMDtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcblxuICAgICAgICAgICAgICAgICAgICAubWNrLXJvd3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC5tYXAtY29udHJvbHMtY29udGFpbmVye1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHVuc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogdW5zZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAubWNrLWNvbHVtbntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9ue1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAubWNrLXN0cm9rZWQtYnV0dG9ue1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogNDBweCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAubGVnZW5kLWNvbnRhaW5lcntcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMCAwIDAgMTVweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxNjBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC5sZWdlbmQtZGl2aWRlcntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwcHggIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogNDBweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIC5sZWdlbmQtY29udGFpbmVyIC5sZWdlbmQtZGl2aWRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAtY29udHJvbHMtY29udGFpbmVyIC5tY2stc3Ryb2tlZC1idXR0b257XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAzMnB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAtaW5mby1idXR0b257XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgLmxlZ2VuZC1jb250YWluZXJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxNTBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAmLnRpdGxlIHtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDE0cHg7XG4gICAgICAgICAgICAgICAgICAgIC50aXRsZS1hbmQtbWFwLWNvbnRyb2x7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcC1jb250cm9sc3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAudGl0bGUtbmFtZSB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAudGl0bGUtZGVzY3JpcHRpb24ge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogIzc1NzU3NTtcbiAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDJweCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBoMSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogIzc1NzU3NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLm1hcC1pY29uIHtcbiAgICAmLWluZm8ge1xuICAgICAgICBAaW5jbHVkZSBtY2stc21hbGwtaWNvbignaW5mby1pY29uLXNtYWxsLnN2ZycsICdpbmZvLWljb24tbGFyZ2Uuc3ZnJyk7XG4gICAgfVxufSJdfQ== */"], encapsulation: 2 }); /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(RoomLocationPreviewComponent, [{ type: core_1.Component, args: [{ @@ -42565,30 +42906,37 @@ RoomLocationPreviewComponent.ɵcmp = i0.ɵɵdefineComponent({ type: RoomLocation {{building.name}}, {{level.name}}
-
The pinpoint indicates your selected room's location on the floor. No futher interaction is available.
-
-
-
- - + +
+
The pinpoint indicates your selected room's location on the floor. No futher interaction is available.
+ +
+
+ + +
+ +
- + +
+
this.focusedMapSpace.next(undefined); + this.closeMapOverlayOutlet = () => { + this.focusedMapSpace.next(undefined); + this.zoom.next(map_utils_1.MIN_ZOOM_LEVEL); + this.center.next(map_utils_1.CENTER_POINT); + this.focusedRoom.next(undefined); + }; this.floorData = location.getState(); } propagateToggle() { diff --git a/staff/main-es2015.js.map b/staff/main-es2015.js.map index b445f7611..0627fc07a 100644 --- a/staff/main-es2015.js.map +++ b/staff/main-es2015.js.map @@ -1 +1 @@ -{"version":3,"sources":["/home/runner/work/mckinsey-converge/mckinsey-converge/libs/animations/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/animations/src/lib/angular-animations.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/animations/src/lib/animations.module.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/base.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/base.directive.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/base.module.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/cdk-drop-list-scroll-container.directive.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/date.spec-helpers.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/date.utils.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/general.utilities.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/image.directive.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/numbers-only.directive.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/replace.pipe.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/bookings/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/bookings/src/lib/bookings.actions.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/bookings/src/lib/bookings.effects.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/bookings/src/lib/bookings.module.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/bookings/src/lib/bookings.reducer.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/bookings/src/lib/bookings.utils.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/buildings/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/buildings/src/lib/buildings.actions.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/buildings/src/lib/buildings.effects.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/buildings/src/lib/buildings.module.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/buildings/src/lib/buildings.reducer.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/api.utilities.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/app.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/base-api.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/base.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/booking-filter.utils.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/booking.form.actions.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/booking.form.data.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/booking.form.spec-helpers.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/booking.selectors.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/booking.utils.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/room-results/room-results.viewmodel.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/booking-state.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/booking.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/booking.types.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/booking.utilities.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/bookings.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/bookingsPaginated.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/space.utilities.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering-categories.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering-category.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering-item.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering-items.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering-menu.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering-notes.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering-order.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering.utilities.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/close-modal-dialog-service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/collapse-accordion-service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/data-common.module.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/hotkeys.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/location/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/location/location.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/location/location.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/organisation/building.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/organisation/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/organisation/level.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/organisation/organisation.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/organisation/organisation.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/paginated.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/recurrence/recurrence.utils.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/reports/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/reports/report.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/reports/reports.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/service-manager.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/settings.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/spaces/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/spaces/space.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/spaces/space.utilities.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/spaces/spaces.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/spec-helpers.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/users/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/users/user.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/users/user.utilities.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/users/users.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/validation.utilities.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/date-tz/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/date-tz/src/lib/date-tz.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/environment/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/environment/src/lib/environment.module.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/environment/src/lib/environment.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/environment/src/lib/version.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/booking-confirm/booking-confirm.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/booking-confirm/booking-confirm.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/booking-form/booking-form.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/booking-form/booking-form.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/catering-confirm-modal/catering-confirm-modal.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/catering-confirm-modal/catering-confirm-modal.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/catering-details-modal/catering-details-modal.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/catering-details-modal/catering-details-modal.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/confirm-modal/confirm-modal.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/confirm-modal/confirm-modal.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/legacy-overlays.module.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/new-user-modal/new-user-modal.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/new-user-modal/new-user-modal.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/no-catering-modal/no-catering-modal.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/no-catering-modal/no-catering-modal.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/requirement-details-modal/requirement-details-modal.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/requirement-details-modal/requirement-details-modal.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/space-select-modal/space-select-modal.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/space-select-modal/space-select-modal.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/user-form/user-form.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/user-form/user-form.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/action-icon/action-icon.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/action-icon/action-icon.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/bookings/catering/item/item.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/bookings/catering/item/item.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/bookings/catering/package-options-modal/package-options-modal.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/bookings/catering/package-options-modal/package-options-modal.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/cng-search-bar/cng-search-bar.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/cng-search-bar/cng-search-bar.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/cng-search-bar/hover-class.directive.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/action-field/action-field.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/action-field/action-field.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/counter/counter.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/counter/counter.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/date-field/date-field.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/date-field/date-field.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/duration-field/duration-field.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/duration-field/duration-field.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/time-field/time-field.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/time-field/time-field.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/user-list-field/user-list-field.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/user-list-field/user-list-field.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/user-search-field/user-search-field.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/user-search-field/user-search-field.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/feedback/feedback.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/feedback/feedback.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/icon/icon.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/icon/icon.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/legacy-ui.module.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/popout-menu/popout-menu.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/popout-menu/popout-menu.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/searchbar/searchbar.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/searchbar/searchbar.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/user-avatar/user-avatar.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/user-avatar/user-avatar.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/loading/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/loading/src/lib/loading.actions.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/loading/src/lib/loading.effects.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/loading/src/lib/loading.model.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/loading/src/lib/loading.selectors.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/loading/testing/effects.testing.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/loading/testing/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/organisation/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/organisation/src/lib/organisation.actions.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/organisation/src/lib/organisation.effects.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/organisation/src/lib/organisation.module.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/organisation/src/lib/organisation.reducer.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/rooms/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/rooms/src/lib/rooms.actions.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/rooms/src/lib/rooms.effects.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/rooms/src/lib/rooms.module.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/rooms/src/lib/rooms.reducer.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/rooms/src/lib/rooms.types.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/rooms/src/lib/rooms.utils.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/rx-utils/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/rx-utils/src/lib/loading-model.utils.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/rx-utils/src/lib/operators.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/rx-utils/src/lib/rx-utils.module.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/aca-date-picker/aca-date-picker.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/aca-date-picker/aca-date-picker.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/alert-banner/alert-banner.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/auto-complete-chip-select-item/auto-complete-chip-select-item.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/auto-complete-chip-select-item/groupHeader.pipe.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/auto-complete-select-option/auto-complete-select-option.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/auto-complete-select-option/auto-complete-select-option.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/base-template.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/cng-select/cng-select-options.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/cng-select/cng-select-options.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/cng-select/cng-select.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/cng-select/cng-select.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/cng-select/dropdown-trigger-for.directive.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/collapse-header/collapse-header.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/conflict-alert-modal/conflict-alert-modal.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/conflict-alert-modal/conflict-alert-modal.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/conflicts-modal/conflicts-modal.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/conflicts-modal/conflicts-modal.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/date-tz-calendar-widget/date-tz-calendar-widget.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/date-tz-calendar-widget/date-tz-calendar-widget.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/date-tz-date-picker/date-tz-date-picker.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/date-tz-duration-field/date-tz-duration-field.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/date-tz-time-field/date-tz-time-field.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/duration-field/duration-field.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/error-message/error-message.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/icons/calendar/calendar-icon.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/icons/calendar/chevron-icon.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/icons/close/close-icon.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/informational-image/informational-image.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/label/label.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/legend-dropdown/legend-dropdown.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/mck-date-picker/mck-date-picker.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/modal-button-row/modal-button-row.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/modal/modal.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/override-changes-modal/override-changes-modal.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/override-changes-modal/override-changes-modal.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/pipes/filter.pipe.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/pipes/sanitise.pipe.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/radio-select/radio-select.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/recurrence-booking-form/recurrence-booking-form.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/recurrence-booking-form/recurrence-booking-form.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/recurrence-date-form/recurrence-date-form.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/recurrence-date-form/recurrence-date-form.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/recurrence-pattern-form/recurrence-pattern-form.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/recurrence-pattern-form/recurrence-pattern-form.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/select-option/select-option.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/select/select.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/select/select.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/selected-chip-count/selected-chip-count.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/spacer/spacer.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/switch-group/switch-group.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/time-field/time-field.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/toggle/toggle.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/tooltip/tooltip.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/tooltip/tooltip.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/tooltip/tooltip.directive.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/tooltip/tooltip.enums.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/types.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/ui.module.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/utils/time.utils.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/zoom-warning-modal/components/zoom-warning/zoom-warning.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/zoom-warning-modal/components/zoom-warning/zoom-warning.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/user/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/user/src/lib/user.actions.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/user/src/lib/user.effects.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/user/src/lib/user.module.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/user/src/lib/user.reducer.ts","./$_lazy_route_resource lazy namespace object","./src/app/app-routing.module.ts","./src/app/app.component.ts","./src/app/app.component.html","./src/app/app.module.ts","./src/app/booking/booking-calendar/booking-calendar-date-widget/calendar-date-widget.component.ts","./src/app/booking/booking-calendar/booking-calendar-date-widget/calendar-date-widget.component.html","./src/app/booking/booking-calendar/booking-calendar-routing.module.ts","./src/app/booking/booking-calendar/booking-calendar-wrapper.component.ts","./src/app/booking/booking-calendar/booking-calendar-wrapper.html","./src/app/booking/booking-calendar/booking-calendar.module.ts","./src/app/booking/booking-calendar/cng-menu-item/cng-menu-item.component.ts","./src/app/booking/booking-calendar/cng-menu-item/cng-menu-item.component.html","./src/app/booking/booking-calendar/staff-calendar/space/event/event.component.ts","./src/app/booking/booking-calendar/staff-calendar/space/event/event.component.html","./src/app/booking/booking-calendar/staff-calendar/space/space.component.ts","./src/app/booking/booking-calendar/staff-calendar/space/space.component.html","./src/app/booking/booking-calendar/staff-calendar/staff-calendar.component.ts","./src/app/booking/booking-calendar/staff-calendar/staff-calendar.component.html","./src/app/booking/booking-calendar/staff-calendar/timeline/timeline.component.ts","./src/app/booking/booking-calendar/staff-calendar/timeline/timeline.component.html","./src/app/booking/booking-confirmation/booking-confirmation.component.ts","./src/app/booking/booking-create/booking-create.component.ts","./src/app/booking/booking-create/booking-form-base.component.html","./src/app/booking/booking-create/booking-edit-wrapper.component.ts","./src/app/booking/booking-create/booking-edit.component.ts","./src/app/booking/booking-create/booking-form-base.component.ts","./src/app/booking/booking-details-modal/booking-details-modal.component.ts","./src/app/booking/booking-duration-modal/booking-duration-modal.component.ts","./src/app/booking/booking-result-item/booking-result-item.component.ts","./src/app/booking/booking-result-item/booking-result-item.component.html","./src/app/booking/booking-routing.module.ts","./src/app/booking/booking.form.reducer.ts","./src/app/booking/booking.module.ts","./src/app/booking/bookings-listing/bookings-listing.component.ts","./src/app/booking/bookings-listing/bookings-listing.component.html","./src/app/booking/cancel-booking-modal/cancel-booking-modal.component.ts","./src/app/booking/catering/catering.component.ts","./src/app/booking/catering/catering.component.html","./src/app/booking/catering/order-details/category/category.component.ts","./src/app/booking/catering/order-details/category/category.component.html","./src/app/booking/catering/order-details/order-details.component.ts","./src/app/booking/catering/order-details/order-details.component.html","./src/app/booking/catering/order-list/item/item.component.ts","./src/app/booking/catering/order-list/item/item.component.html","./src/app/booking/catering/order-list/order-list.component.ts","./src/app/booking/catering/order-list/order-list.component.html","./src/app/booking/catering/order-table/order-table.component.ts","./src/app/booking/manage-bookings/manage-bookings.component.ts","./src/app/booking/manage-bookings/manage-bookings.viewmodel.ts","./src/app/booking/office-floor/floor-map-overlay/floor-map-overlay.component.ts","./src/app/booking/office-floor/floor-map.utils.ts","./src/app/booking/office-floor/office-floor-map.module.ts","./src/app/booking/office-floor/office-floor/office-floor.component.ts","./src/app/booking/office-floor/office-floor/office-floor.component.html","./src/app/booking/results-header/results-header.component.ts","./src/app/booking/room-availability-preview-modal/room-availability-preview-modal.component.ts","./src/app/booking/room-availability-preview/room-availability-preview.component.ts","./src/app/booking/room-availability-preview/room-availability-preview.component.html","./src/app/booking/room-booking-details-form/room-booking-details-form.component.ts","./src/app/booking/room-booking-details-form/room-booking-details-form.component.html","./src/app/booking/room-booking-form/room-booking-form.component.ts","./src/app/booking/room-booking-form/room-booking-form.component.html","./src/app/booking/room-booking-modal/room-booking-modal.component.ts","./src/app/booking/room-booking/room-booking.component.ts","./src/app/booking/room-details/room-details.component.ts","./src/app/booking/room-details/room-details.component.html","./src/app/booking/room-filters-form/room-filters-form.component.ts","./src/app/booking/room-filters-modal/room-filters-modal.component.ts","./src/app/booking/room-location-preview/room-location-preview.component.ts","./src/app/booking/room-result-item/room-result-item.component.ts","./src/app/booking/room-results-paginated/room-results-paginated.component.ts","./src/app/booking/room-results-section/room-results-section.component.ts","./src/app/booking/room-results/room-results-coachmark.viewmodel.ts","./src/app/booking/room-results/room-results.component.ts","./src/app/booking/searched-location/searched-location.component.ts","./src/app/components/footer-menu/footer-menu.component.ts","./src/app/components/footer-menu/footer-menu.component.html","./src/app/components/map-controls/map-controls.component.ts","./src/app/components/map-controls/map-controls.component.html","./src/app/components/overlay-menu/overlay-menu.component.ts","./src/app/components/overlay-menu/overlay-menu.component.html","./src/app/components/responsive-inline-images/responsive-inline-images.component.ts","./src/app/components/survey-modal/survey-modal.component.ts","./src/app/components/survey-modal/survey-modal.component.html","./src/app/components/topbar-header/topbar-header.component.ts","./src/app/login/login.component.ts","./src/app/login/login.component.html","./src/app/map/map-controls/map-controls.component.ts","./src/app/map/map-filters/map-filters.component.ts","./src/app/map/map-overlay/map-overlay.component.ts","./src/app/map/map-search/map-search.component.ts","./src/app/map/map.module.ts","./src/app/map/map.utils.ts","./src/app/map/office-information-modal/office-information-modal.component.ts","./src/app/shared/shared.module.ts","./src/app/shell/shell.component.ts","./src/app/shell/shell.component.html","./src/app/utilities/urls.ts","./src/environments/environment.ts","./src/environments/settings.ts","./src/hmr.ts","./src/main.ts"],"names":[],"mappings":"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","file":"main-es2015.js","sourcesContent":["export * from './lib/animations.module';\nexport * from './lib/angular-animations'\n","import { trigger, transition, style, animate, state } from '@angular/animations';\n\nexport const ANIMATION_SHOW_ENTER_LEAVE = trigger('show', [\n transition(':enter', [\n style({ opacity: 0, height: 0 }),\n animate(300, style({ opacity: 1, height: '*' }))\n ]),\n transition(':leave', [\n style({ opacity: 1, height: '*' }),\n animate(300, style({ opacity: 0, height: 0 }))\n ])\n]);\n\nexport const ANIMATION_SHOW_CONTRACT_EXPAND = trigger('show', [\n state('show', style({ opacity: 1, height: '*' })),\n state('hide', style({ opacity: 0, height: 0 })),\n transition('show <=> hide', animate('200ms ease-in'))\n]);\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class AnimationsModule {}\n","export * from './lib/base.module';\nexport * from './lib/types.utilities';\nexport * from './lib/general.utilities';\nexport * from './lib/base.class';\nexport * from './lib/base.directive';\nexport * from './lib/date.utils'\nexport * from './lib/date.spec-helpers'\nexport * from './lib/replace.pipe'\nexport * from './lib/cdk-drop-list-scroll-container.directive'\nexport * from './lib/image.directive';\n","import { Subscription, BehaviorSubject } from \"rxjs\";\n\nexport class BaseClass {\n /** Store for named timers */\n protected _timers: { [name: string]: number } = {};\n /** Store for named intervals */\n protected _intervals: { [name: string]: number } = {};\n /** Store for named subscription unsub callbacks */\n protected _subscriptions: { [name: string]: (Subscription | (() => void)) } = {};\n /** Subject which stores the initialised state of the object */\n protected readonly _initialised = new BehaviorSubject(false);\n\n /** Observable of the initialised state of the object */\n public get initialised(): BehaviorSubject {\n return this._initialised;\n }\n /** Whether the object has been initialised */\n public get is_initialised(): boolean {\n return this._initialised.getValue();\n }\n\n protected destroy() {\n for (const key in this._timers) {\n if (this._timers.hasOwnProperty(key)) {\n this.clearTimeout(key);\n }\n }\n for (const key in this._intervals) {\n if (this._intervals.hasOwnProperty(key)) {\n this.clearInterval(key);\n }\n }\n for (const key in this._subscriptions) {\n if (this._subscriptions.hasOwnProperty(key)) {\n this.unsub(key);\n }\n }\n }\n\n /**\n * Creates a named timer\n * @param name Name of the timer\n * @param fn Callback function for the timer\n * @param delay Callback delay\n */\n protected timeout(name: string, fn: () => void, delay: number = 300) {\n if (name && fn && fn instanceof Function) {\n this.clearTimeout(name);\n this._timers[name] = setTimeout(() => {\n fn();\n this._timers[name] = null;\n }, delay);\n } else {\n throw new Error(\n name ? 'Cannot create named timeout without a name' : 'Cannot create a timeout without a callback'\n );\n }\n }\n\n /**\n * Clears the named timer\n * @param name Timer name\n */\n protected clearTimeout(name: string) {\n if (this._timers[name]) {\n clearTimeout(this._timers[name]);\n this._timers[name] = null;\n }\n }\n\n /**\n * Creates a named interval\n * @param name Name of the interval\n * @param fn Callback function for the interval\n * @param delay Callback delay\n */\n protected interval(name: string, fn: () => void, delay: number = 300) {\n if (name && fn && fn instanceof Function) {\n this.clearInterval(name);\n this._intervals[name] = setInterval(() => fn(), delay);\n } else {\n throw new Error(\n name ? 'Cannot create named interval without a name' : 'Cannot create a interval without a callback'\n );\n }\n }\n\n /**\n * Clears the named interval\n * @param name Timer name\n */\n protected clearInterval(name: string) {\n if (this._intervals[name]) {\n clearInterval(this._intervals[name]);\n this._intervals[name] = null;\n }\n }\n\n /**\n * Store named subscription\n * @param name Name of the subscription\n * @param unsub Unsubscribe callback or Subscription object\n */\n protected subscription(name: string, unsub: Subscription | (() => void)) {\n this.unsub(name);\n this._subscriptions[name] = unsub\n }\n\n /**\n * Call unsubscribe callback with the given name\n * @param name\n */\n protected unsub(name: string) {\n if (this._subscriptions && this._subscriptions[name]) {\n this._subscriptions[name] instanceof Subscription\n ? (this._subscriptions[name] as Subscription).unsubscribe()\n : (this._subscriptions[name] as any)();\n this._subscriptions[name] = null;\n }\n }\n}\n","\nimport { Directive, OnDestroy } from '@angular/core';\nimport { BaseClass } from './base.class';\n\n@Directive({\n selector: 'a-very-basic-component-base-that-should-not-be-used'\n})\nexport class BaseDirective extends BaseClass implements OnDestroy {\n public ngOnDestroy(): void {\n this.destroy();\n }\n}","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NumbersOnlyDirective } from './numbers-only.directive';\n\n@NgModule({\n imports: [CommonModule,],\n declarations: [\n NumbersOnlyDirective\n ],\n exports: [\n NumbersOnlyDirective\n ]\n})\nexport class BaseModule {\n}\n","import {\n Directive,\n Input,\n Renderer2,\n SimpleChanges,\n OnChanges,\n ContentChildren,\n QueryList,\n AfterContentInit\n} from '@angular/core';\nimport { CdkDropList, CdkDrag } from '@angular/cdk/drag-drop';\nimport { BaseDirective } from './base.directive';\n\nexport enum ScrollDirection {\n NONE,\n X,\n Y,\n BOTH\n}\n\n@Directive({\n selector: '[cdkDropList][scrollContainer]'\n})\nexport class CdkDropListScrollContainer extends BaseDirective\n implements OnChanges, AfterContentInit {\n /** Direction of scroll to determine updating the position of the drop list */\n @Input() direction: ScrollDirection = ScrollDirection.X;\n /** Name of the scroll container for the list */\n @Input() scrollContainer: string;\n /** Scroll container element */\n public element: HTMLElement;\n /** Last scroll position */\n public last_scroll: { x: number; y: number } = { x: 0, y: 0 };\n\n /** Draggable children elements */\n @ContentChildren(CdkDrag) private items: QueryList;\n\n constructor(private _cdkDropList: CdkDropList, private _renderer: Renderer2) {\n super();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.scrollContainer && this.scrollContainer) {\n this.element = this._cdkDropList.element.nativeElement.closest(\n this.scrollContainer\n ) as HTMLElement;\n }\n }\n\n public ngAfterContentInit(): void {\n this.subscription(\n 'drag_items',\n this.items.changes.subscribe((items: QueryList) => {\n const list = items.toArray();\n list.forEach((i, index) => {\n this.subscription(\n `list-item-${index}`,\n this._renderer.listen(i.element.nativeElement, 'mousedown', () => {\n this.subscription(\n 'item-dragged',\n this._renderer.listen('window', 'mouseup', () => this.onDrop())\n );\n this.onDrag();\n })\n );\n this.subscription(\n `list-item-touch-${index}`,\n this._renderer.listen(i.element.nativeElement, 'touchstart', () => {\n this.subscription(\n 'item-dragged',\n this._renderer.listen('window', 'touchend', () => this.onDrop())\n );\n this.onDrag();\n })\n );\n });\n })\n );\n }\n\n /** Start listing for scroll events on the container */\n public onDrag() {\n if (this.element) {\n this.subscription(\n 'scroll',\n this._renderer.listen(this.element, 'scroll', () => this.updateListPosition())\n );\n }\n }\n\n /** Stop listening for scroll events on the container */\n public onDrop() {\n this.unsub('scroll');\n }\n\n /**\n * Forcefully update the position data of the drop list\n */\n private updateListPosition() {\n this.timeout(\n 'update_positions',\n () => {\n const scroll = { x: this.element.scrollLeft, y: this.element.scrollTop };\n if (\n ((this.direction === ScrollDirection.BOTH ||\n this.direction === ScrollDirection.Y) &&\n scroll.y !== this.last_scroll.y) ||\n ((this.direction === ScrollDirection.BOTH ||\n this.direction === ScrollDirection.X) &&\n scroll.x !== this.last_scroll.x)\n ) {\n (this._cdkDropList._dropListRef as any)._cacheOwnPosition();\n (this._cdkDropList._dropListRef as any)._siblings.forEach(i =>\n i.isReceiving() ? i._cacheOwnPosition() : null\n );\n }\n this.last_scroll = scroll;\n },\n 50\n );\n }\n}\n","import MockDate from 'mockdate';\n\n/**\n * August 13, 2020 at 7:22:12 UTC\n */\nconst initialTime = 1597346532 * 1000;\n\nexport const mockDate = (timeOverride = initialTime) => MockDate.set(new Date(timeOverride));\n\nexport const resetDate = () => MockDate.reset();\n","import { DateNow, DateTZ } from '@mckinsey-converge/date-tz'\nimport { DateTime } from 'luxon';\nimport * as dayjs from 'dayjs';\nimport {\n dayJsHoursMinutes,\n dayJsTimeFormatString,\n} from './general.utilities';\n\n/**\n * Allows you to split up durations into a group.\n */\nexport interface DurationGroup {\n /**\n * Step amount to generate between start and max.\n */\n step: number;\n /**\n * Where to start in minutes.\n */\n start: number;\n /**\n * Where to end in minutes.\n */\n max: number;\n}\n\n/**\n * Find the multiple of `stepMinute` which is closest to the 'minutes' property of the given date.\n * @param date - Any Lexon date.\n * @param stepMinute - The number of minutes between one timeslot and the next. Integer value\n * 1 to 59, inclusive.\n */\n// R--- depreciate this one\nexport const closestToTimeSlot = (date: DateTime, stepMinute: number, start: number = 0) : DateTime => {\n return date.set({ millisecond: 0, second: 0, minute: Math.ceil(date.minute / stepMinute) * stepMinute })\n .plus({ minutes: start % 60 }) // apply offset as well if it starts at 15.\n};\n\nexport const closestToTimeSlotTz = (dateTz: DateTZ, stepMinute: number, start: number = 0) : DateTZ => {\n return dateTz.setValue({ millisecond: 0, second: 0, minute: Math.ceil(dateTz.minutes / stepMinute) * stepMinute })\n .addValue({ minutes: start % 60 }) // apply offset as well if it starts at 15.\n};\n\n/**\n * Convert duration to human readable string\n * @param duration Duration in minutes\n * @param short Whether to use short form of duration words e.g. hours as hrs, or minutes as mins\n */\nexport function durationHumanized(duration: number, short: boolean = false): string {\n if (!duration || duration < 0) {\n return '';\n }\n const h = Math.floor(duration / 60);\n let d = `${h >= 1 ? h + (short ? ' hr' : ' hour' + (h === 1 ? '' : 's')) : ''}`;\n if (duration % 60 !== 0) {\n if (d) {\n d += short ? ' ' : ', ';\n }\n const m = duration % 60;\n d += `${m >= 1 ? m + (short ? ' min' : ' minute' + (m === 1 ? '' : 's')) : ''}`;\n }\n return d;\n}\n\nexport const weekDayMonthYearFormat = (date: DateTZ): string => date.formatDate('ccc dd MMM yyyy');\n\n/**\n * Tries to extract best-fit input\n * @return undefined if not valid. otherwise if good\n */\nexport const extractDateFromInput = (input: string,\n checkHour,\n startDate: dayjs.Dayjs): dayjs.Dayjs | undefined => {\n // check if input has am/pm or normal 24 hour time.\n // let date = dayjs(input, 'HH:mm');\n // let date = dayjs(input, 'h:mma');\n let date = dayjs(input, dayJsTimeFormatString());\n if (!date.isValid()) {\n // patch if time is in format xx:x to assume you meant xx:x0\n let cleanedInput = input;\n const times = input.split(':');\n if(!input){\n return undefined\n }\n if (times.length === 2) {\n if (times[1].length === 1) {\n cleanedInput = `${times[0]}:${times[1]}0`;\n }\n }\n // may be other input, lets try next value (without am/pm)\n date = dayjs(cleanedInput, dayJsHoursMinutes());\n // might be just purely an hour\n if (!date.isValid() && checkHour) {\n date = dayjs(input, 'H');\n }\n }\n // We expect input times to be in the future. If now is in the afternoon, this\n // simple block will ensure the returned date is also in the afternoon.\n //\n // NB: dayjs parses times as morning by default.\n if (date.isValid()) {\n // Move to the selected start date\n date = date.month(startDate.month()).date(startDate.date()).year(startDate.year());\n if (startDate.hour() > date.hour() && date.date() === startDate.date()) {\n date = date.set('hour', date.hour() + 12);\n }\n }\n\n return date.isValid() ? date : undefined;\n};\n\n\n/**\n * 1. Calculates the date from input via {@link extractDateFromInput}.\n * 2. Finds the nearest time slot that it can be via {@link closestToTimeSlot}.\n * 3. Then returns the time-format string the input expects so autocomplete can suggest\n * closest match.\n * @param step The step between time slots.\n * @param input The input text.\n */\nexport const nearestStepToInput = (\n step: number,\n input: string,\n currentStartDate: number,\n start: number = 0\n): string => {\n let date = extractDateFromInput(input, false, dayjs(currentStartDate));\n if (date) {\n const luxonDate = DateTime.fromMillis(date.valueOf());\n const closestDate = closestToTimeSlot(luxonDate, step, start);\n return closestDate.toFormat(dayJsHoursMinutes());\n } else {\n return input;\n }\n};\n/**\n * Similiar to {@link nearestStepToInput} instead:\n * 1. Calculates the date from input via {@link extractDateFromInput}.\n * 2. Finds which duration group is closest to the currentStartDate. If not found\n * return vanilla text.\n * 3. Finds the nearest time slot that it can be via {@link closestToTimeSlot}.\n * 4. Then returns the time-format string the input expects so autocomplete can suggest\n * closest match.\n */\nexport const nearestDurationToInput = (durationGroups: DurationGroup[],\n currentStartDate: number,\n value: string): string => {\n\n let date = extractDateFromInput(value, false, dayjs(currentStartDate));\n\n if (!date) {\n // Check if the input is a duration \n const duration = parseInt(value);\n if (typeof (duration) === 'number' && value.indexOf(':') === -1 && duration > 12) {\n date = dayjs(currentStartDate).add(duration, 'm');\n }\n }\n\n if (date) {\n const minutes = date.diff(currentStartDate, 'minute');\n const closestDurationGroup = durationGroups.find(d => {\n return (minutes <= d.max);\n });\n if (closestDurationGroup) {\n const offset = [closestDurationGroup].reduce((previousValue, currentValue) => {\n return previousValue + currentValue.start;\n }, 0);\n const luxonDate = DateTime.fromMillis(date.valueOf());\n const closestDate = closestToTimeSlot(luxonDate, closestDurationGroup.step, 0);\n return closestDate.toFormat(dayJsHoursMinutes());\n }\n }\n\n return value;\n};\n\nexport const resetSecondsOnTimestamp = (timestamp: number) => {\n return DateTime.fromMillis(timestamp).set({ second: 0, millisecond: 0 }).toMillis();\n}\n\nexport const formatDateWithSuffix = (date: string): string => {\n const dateObj = new Date(date);\n const day = dateObj.getDate();\n const month = dateObj.toLocaleString(\"default\", { month: \"short\" });\n const year = dateObj.getFullYear();\n return `${day}${nthNumber(day)} ${month} ${year}`; //this.event.date_string;\n}\n\nconst nthNumber = (number) => {\n return number > 0\n ? [\"th\", \"st\", \"nd\", \"rd\"][\n (number > 3 && number < 21) || number % 10 > 3 ? 0 : number % 10\n ]\n : \"\";\n};\n\nexport const getListOfDateFormat = () => {\n return [\t\n 'MMMM dd y', \t//March 07 2023\n 'MMM dd, y',\t//Mar 07 2023\n 'MMMM dd',\t\t//March 07\n 'MMM dd', \t\t//Mar 07\n 'MM dd', \t\t//03 07\n\n 'MM-dd-yy',\t\t//03-07-23\n 'MM-dd-yyyy',\t//03-07-2023\n 'MMMM-dd-yyyy', //March-07-2023\n 'MMMM-dd-yy',\t//March-07-23\n\n 'MMMM-dd',\t\t//March-07\n 'MMM-dd',\t\t//Mar-07\n \n 'MMM-dd-y',\t\t//Mar-07-2023\n\n 'MM/dd',\t\t//03/07\n 'MM/dd/yy',\t\t//03/07/23\n 'MM/dd/yyyy',\t//03/07/2023\n \n 'dd/MM',\t\t//07/03\n 'dd/MM/yy',\t\t//07/03/23\n 'dd/MM/yyyy',\t//07/03/2023\n \n 'dd-MMMM',\t\t//07-March\n 'dd MMMM',\t\t//07 March\n 'dd-MMM',\t\t//07-Mar\n 'dd MMM',\t\t//07 Mar\n\n 'dd-MM-y',\t\t//07-03-23\n 'dd MMMM yy',\t//07 March 23\n \n 'dd/MMM/y',\t //07/Mar/2023\n 'dd/MMMM/y', //07/March/2023\n 'dd/MMM/yy', //07/Mar/23\n 'dd/MMMM/yy', //07/March/23\n \n\n 'dd-MMMM-yy',\t//07-March-23\n 'dd-MMM-yy',\t//07-Mar-23\n 'dd-MM-yy',\t\t//07-03-23\n 'MMMM-dd-yy',\t//March-07-23\n 'MMM-dd-yy',\t//Mar-07-23\n\n 'MMMM dd yy',\t//March 07 23\n 'MMM dd, yy',\t//Mar 07 23\n 'MM dd, yy',\t//03 07 23\n\n 'dd MMMM y',\t//07 March 2023\n 'dd MMM, y',\t//07 Mar 2023\n 'dd MM, yy',\t//07 03, 23\n 'dd-MMM-y',\t//07-Mar-2023\n\n 'h:mm a', // 3:30 pm\n 'h:mma' // 3:30 pm\n\n ];\n}","import { HashMap, Point } from './types.utilities';\n\nimport * as dayjs from 'dayjs';\nimport * as utc from 'dayjs/plugin/utc';\nimport * as timezone from 'dayjs/plugin/timezone';\nimport * as isToday from 'dayjs/plugin/isToday';\nimport * as weekday from 'dayjs/plugin/weekday';\nimport * as customParseFormat from 'dayjs/plugin/customParseFormat';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n// TODO: this is not the best place to import this timezone addition\ndayjs.extend(utc);\ndayjs.extend(timezone);\ndayjs.extend(isToday);\ndayjs.extend(weekday);\ndayjs.extend(customParseFormat);\n\n/** Available console output streams. */\nexport type ConsoleStream = 'debug' | 'warn' | 'log' | 'error' | 'info';\n\n/**\n * Log data to the browser console\n * @param type Type of message\n * @param msg Message body\n * @param args array of argments to log to the console\n * @param stream Stream to emit the console on. 'debug', 'log', 'warn' or 'error'\n * @param force Whether to force message to be emitted when debug is disabled\n */\nexport function log(\n type: string,\n msg: string,\n args?: any,\n stream: ConsoleStream = 'debug',\n force: boolean = false,\n app_name: string = 'STAFF'\n) {\n if ((window as any).debug || force) {\n const colors: string[] = [\n 'color: #E91E63',\n 'color: #3F51B5',\n 'color: default',\n ];\n if (args) {\n console[stream](\n `%c[${app_name}]%c[${type}] %c${msg}`,\n ...colors,\n args\n );\n } else {\n console[stream](`%c[${app_name}]%c[${type}] %c${msg}`, ...colors);\n }\n }\n}\n\n/**\n * Get item from the nested object\n * @param keys List of sub-keys to search for\n * @param map Object to search\n */\n export function getItemWithKeys(keys: string[], map: HashMap) {\n const key = keys[0];\n if (map && key in map) {\n return keys.length > 1\n ? getItemWithKeys(keys.slice(1), map[key] || {})\n : map[key];\n }\n return null;\n}\n\n/* istanbul ignore next */\n/**\n * Checks whether the platform is a mobile device.\n */\nexport function isMobileDevice(): boolean {\n const r = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i;\n return !!navigator.userAgent.match(r);\n}\n\n/* istanbul ignore next */\n/**\n * Checks whether the browser is Mobile Safari.\n */\nexport function isMobileSafari(): boolean {\n const agent = navigator.userAgent;\n return !!(\n agent.match(/iPhone|iPad|iPod/) &&\n agent.match(/AppleWebKit/) &&\n !agent.match('CriOS')\n );\n}\n\n/* istanbul ignore next */\n/**\n * Checks whether the browser is Android Chrome.\n */\nexport function isAndroidChrome(): boolean {\n const agent = navigator.userAgent;\n return !!(agent.match(/Android/) && agent.match(/Chrome/));\n}\n\n/**\n * Generate string representation of a number with zeros padding the length\n * @param value Number to pad with zeros\n * @param length Length of the resulting string\n */\nexport function padZero(value: number, length: number): string {\n let str = value.toString();\n while (str.length < length) {\n str = '0' + str;\n }\n return str;\n}\n\n/**\n * Remove duplicates from the given array\n * @param array List of items to remove duplicates from\n * @param key Key on array objects to compare for uniqueness\n */\nexport function unique(array: T[], key: keyof T | undefined = undefined) {\n return array.filter(\n (el, pos, arr) =>\n el &&\n arr.indexOf(\n key\n ? arr.find((i) => i && i[key] === el[key])\n : arr.find((i) => i === el)\n ) === pos\n );\n}\n\n/**\n * Convert duration to human readable string\n * @param duration Duration in minutes\n * @param short Whether to use short form of duration words e.g. hours as h\n */\nexport function humaniseDuration(durationInput: number, size: string = 'long') {\n const duration = Math.floor(durationInput);\n if (!duration || duration < 0) {\n return '';\n }\n let singular = false;\n let format = { hours: ' hour', minutes: ' minute' };\n switch (size) {\n case 'medium':\n format = { hours: 'hr', minutes: 'min' };\n break;\n case 'short':\n format = { hours: 'h', minutes: 'm' };\n singular = true;\n break;\n }\n const h = Math.floor(duration / 60);\n let d = `${\n h >= 1\n ? h +\n (singular ? format.hours : format.hours + (h === 1 ? '' : 's'))\n : ''\n }`;\n if (duration % 60 !== 0) {\n if (d) {\n d += singular ? ' ' : ', ';\n }\n const m = duration % 60;\n d += `${\n m >= 1\n ? m +\n (singular\n ? format.minutes\n : format.minutes + (m === 1 ? '' : 's'))\n : ''\n }`;\n }\n return d;\n}\n\n/**\n * Get a filtered list of items\n * @param filter Value to filter on\n * @param items List of results to filter\n * @param fields Fields to check for matches on each item\n */\nexport function filterList(\n filter: string,\n items?: T[],\n fields: string[] = ['id']\n): T[] {\n let results: any[];\n // Tokenise filter string\n const filters = (filter || '').toLowerCase().split(' ');\n const list = {};\n for (const f of filters) {\n /* istanbul ignore else */\n if (f) {\n /* istanbul ignore else */\n if (!list[f]) {\n list[f] = 0;\n }\n list[f]++;\n }\n }\n // Group similar tokens\n const parts = [];\n for (const f in list) {\n /* istanbul ignore else */\n if (list.hasOwnProperty(f)) {\n parts.push({ word: f, count: list[f], regex: new RegExp(f, 'gi') });\n }\n }\n parts.sort(\n (a, b) => b.word.length - a.word.length || a.word.localeCompare(b.word)\n );\n const item_list = JSON.parse(JSON.stringify(items || []));\n /* istanbul ignore else */\n if (filter) {\n results = item_list.filter((item) => {\n let match_count = 0;\n item.match_index = 65535;\n item.match = '';\n const field_list = {};\n // Initialise field match variables\n for (const f of fields) {\n field_list[f] = {\n value: (item[f] || '').toLowerCase(),\n index: 65536,\n matched: 0,\n };\n }\n // Search for matches with the tokenised filter string\n for (const i of parts) {\n /* istanbul ignore else */\n if (i.word) {\n // Check fields for matches\n for (const f of fields) {\n const field = field_list[f];\n const index = field.value.indexOf(i.word);\n field.index = index < field.index ? index : field.index;\n field.matches = (\n field.value.match(i.regex) || []\n ).length;\n field.value = field.value.replace(i.regex, ' ');\n }\n // Update token match count\n for (const f of fields) {\n const field = field_list[f];\n /* istanbul ignore else */\n if (field.matches >= i.count) {\n match_count++;\n // Update field matches\n let changed = 0;\n const tokens = (\n item[`match_${f}`] ||\n item[f] ||\n ''\n ).split(' ');\n for (const k of tokens) {\n /* istanbul ignore else */\n if (changed >= i.count) {\n break;\n }\n /* istanbul ignore else */\n if (\n k.toLowerCase().indexOf(i.word) >= 0 &&\n k.indexOf('`') < 0\n ) {\n tokens[tokens.indexOf(k)] = k.replace(\n i.regex,\n '`$&`'\n );\n changed++;\n }\n }\n item[`match_${f}`] = tokens.join(' ');\n break;\n }\n }\n }\n }\n // Get field with the most relevent match\n for (const f of fields) {\n const field = field_list[f];\n /* istanbul ignore else */\n if (field.index < item.match_index && field.index >= 0) {\n item.match_index = field.index;\n item.match = f;\n }\n }\n return (\n item.match_index >= 0 &&\n item.match &&\n match_count >= parts.length\n );\n });\n } else {\n results = item_list;\n }\n // Sort by order of relevence then name\n results.sort((a, b) => {\n const diff = a.match_index - b.match_index;\n return diff === 0 ? a.name.localeCompare(b.name) : diff;\n });\n return results;\n}\n\n/**\n * Convert a match string from `filterList` to renderable HTML\n * @param str Match string to change\n */\nexport function matchToHighlight(str: string): string {\n /* istanbul ignore else */\n if (str) {\n str = str.replace(\n /\\`[a-zA-Z0-9\\@\\.\\_]*\\`/g,\n '$&'\n );\n str = str.replace(/\\`/g, '');\n }\n return str;\n}\n\n/**\n * Convert time string to ms from UTC epoch for today\n * @param time Time string in the format `HH:mm`\n */\nexport function timeToDate(time: string): number {\n const parts = time.split(':');\n const date = DateNow(new Date())\n .setValue({\n hour: +parts[0],\n minute: +parts[1],\n })\n .startOfValue('minute');\n return date.ms;\n}\n\n/**\n * Generate a random number\n * @param ceil Biggest value to generate not inclusive\n * @param floor Smallest value to generate. Defaults to 0\n */\nexport function randomInt(ceil: number, floor: number = 0) {\n return Math.floor(Math.random() * (ceil - floor)) + floor;\n}\n\n/**\n * Get time format string for locale\n * @param isLowerCaseAmPm - if true, we use lowercase for am/pm.\n */\nexport function timeFormatString(): string {\n return is24HourTime() ? 'HH:mm' : 'h:mma';\n}\n\nexport const hoursMinutes = (): string => (is24HourTime() ? 'HH:mm' : 'h:mma');\n\nexport function dayJsTimeFormatString(): string {\n return is24HourTime() ? 'HH:mm' : 'h:mma';\n}\n\nexport const dayJsHoursMinutes = (): string =>\n is24HourTime() ? 'HH:mm' : 'h:mm';\n\n/**\n * Converts a timeZone name into a date object.\n * @param timeZoneName - name of timezone\n */\nexport const timezoneNameToDate = (\n timeZoneName: string | undefined\n): DateTZ | undefined => {\n let zone: DateTZ | undefined;\n if (timeZoneName) {\n try {\n zone = DateNow(new Date()).toZone(timeZoneName);\n } catch (e) {\n // invalid timezone. Suppress logs here.\n // console.error(e);\n }\n }\n return zone;\n};\n\nexport const timezoneDisplay = (date: DateTZ) =>\n !!date ? `${date.formatDate('ZZZZ')}` : '';\nexport const gmtOffsetDisplay = (date: DateTZ) =>\n !!date ? `(GMT${date.formatDate('ZZ')})` : '';\n\n/**\n * Returns a full time with timezone.\n * @param date\n */\nexport function timeWithZoneFormatString(date: DateTZ): string {\n return `${date\n .formatDate(timeFormatString())\n .toLocaleLowerCase()} ${timezoneDisplay(date)}`;\n}\n\nexport function timeWithGmtOffsetFormatString(date: DateTZ): string {\n return `${date\n .formatDate(timeFormatString())\n .toLocaleLowerCase()} ${gmtOffsetDisplay(date)}`;\n}\n\n/**\n * Returns a full start end range.\n *\n * Start and end both use lowercase am/pm markers (c.f. timeFormatString).\n * @param startDateTz start time DateTZ object\n * @param endDateTz end time DateTZ object\n */\nexport function startEndTimeFormatString(\n startDateTz: DateTZ,\n endDateTz: DateTZ\n): string {\n return `${startDateTz\n .formatDate(timeFormatString())\n .toLocaleLowerCase()}-${endDateTz\n .formatDate(timeFormatString())\n .toLocaleLowerCase()}`;\n}\n\n/**\n * Returns a full start end range with timezone.\n *\n * Start and end both use lowercase am/pm markers (c.f. timeFormatString).\n * @param startDateTz start time DateTZ object\n * @param endDateTz end time DateTZ object\n */\nexport function startEndTimeWithZoneFormatString(\n startDateTz: DateTZ,\n endDateTz: DateTZ\n): string {\n return `${startDateTz\n .formatDate(timeFormatString())\n .toLocaleLowerCase()}-${endDateTz\n .formatDate(timeFormatString())\n .toLocaleLowerCase()} ${gmtOffsetDisplay(startDateTz)}`;\n}\n\n/**\n * Returns a full date with weekday day month year.\n * @param date\n * @param comma optional boolean to display a comma after the month\n */\nexport function dateLocalFormatString(date: DateTZ, comma?: boolean): string {\n if (comma) {\n return date.formatLocalDate('cccc d MMMM, yyyy');\n }\n return date.formatLocalDate('cccc d MMMM yyyy');\n}\n\nexport function dateBuildingFormatString(\n date: DateTZ,\n comma?: boolean\n): string {\n if (comma) {\n return date.formatDate('cccc d MMMM, yyyy');\n }\n return date.formatDate('cccc d MMMM yyyy');\n}\n\nexport function shorterLocalDateFormatString(\n date: DateTZ,\n comma?: boolean\n): string {\n if (comma) {\n return date.formatLocalDate('ccc d MMM, yyyy');\n }\n return date.formatLocalDate('ccc d MMM yyyy');\n}\n\nexport function shorterBuildingDateFormatString(\n date: DateTZ,\n comma?: boolean\n): string {\n if (comma) {\n return date.formatDate('ccc d MMM, yyyy');\n }\n return date.formatDate('ccc d MMM yyyy');\n}\n\n/** Whether locale string is displayed in 24 hour time */\nexport function is24HourTime(): boolean {\n const date = new Date();\n const localeString = date\n .toLocaleTimeString(\n document.querySelector('html').getAttribute('lang') ||\n navigator.language\n )\n .toLowerCase();\n return localeString.indexOf('am') < 0 && localeString.indexOf('pm') < 0;\n}\n\n/* istanbul ignore next */\n/**\n * Downloads a file to the users computer with the given filename and contents\n * @param filename Name of the file to download\n * @param contents Contents of the file to download\n */\nexport function downloadFile(filename: string, contents: string) {\n const element = document.createElement('a');\n element.setAttribute(\n 'href',\n 'data:text/plain;charset=utf-8,' +\n encodeURIComponent('\\uFEFF' + contents)\n );\n element.setAttribute('download', filename);\n\n element.style.display = 'none';\n document.body.appendChild(element);\n\n element.click();\n\n document.body.removeChild(element);\n}\n\n/**\n * Parse raw CSV data into a JSON object\n * @param csv CSV data to parse\n */\nexport function csvToJson(csv: string) {\n const lines = csv.split('\\n');\n let fields = lines.splice(0, 1)[0].split(',');\n fields = fields.map((v) => v.replace('\\r', ''));\n const list: any[] = [];\n for (const line of lines) {\n let parts = line.split(',');\n parts = parts.map((v) => v.replace('\\r', ''));\n /* istanbul ignore else */\n if (parts.length >= fields.length) {\n const item: any = {};\n for (let i = 0; i <= parts.length; i++) {\n let part = null;\n part = parts[i];\n /* istanbul ignore else */\n if (part !== undefined) {\n item[(fields[i] || '').split(' ').join('_').toLowerCase()] =\n part;\n }\n }\n list.push(item);\n }\n }\n\n return list;\n}\n\n/**\n * Convert javascript array to CSV string\n * @param json Javascript array to convert\n */\nexport function jsonToCsv(json: HashMap[]) {\n /* istanbul ignore else */\n if (json instanceof Array && json.length > 0) {\n const keys = Object.keys(json[0]);\n const valid_keys = keys.filter((key) => json[0].hasOwnProperty(key));\n return `${valid_keys.join(',')}\\n${json\n .map((item) =>\n valid_keys\n .map((key) => {\n return typeof item[key] !== 'boolean'\n ? `\"${item[key] || ''}\"`\n : item[key];\n })\n .join(',')\n )\n .join('\\n')}`;\n }\n return '';\n}\n\n/* istanbul ignore next */\n/**\n * detect IE\n * returns version of IE or false, if browser is not Internet Explorer\n */\nexport function detectIE() {\n var ua = window.navigator.userAgent;\n\n var msie = ua.indexOf('MSIE ');\n if (msie > 0) {\n // IE 10 or older => return version number\n return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\n }\n\n var trident = ua.indexOf('Trident/');\n if (trident > 0) {\n // IE 11 => return version number\n var rv = ua.indexOf('rv:');\n return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\n }\n\n var edge = ua.indexOf('Edge/');\n if (edge > 0) {\n // Edge (IE 12+) => return version number\n return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);\n }\n\n // other browser\n return false;\n}\n\n/**\n * Grab point details from mouse or touch event\n * @param event Event to grab details from\n */\nexport function eventToPoint(event: MouseEvent | TouchEvent): Point {\n if (!event) {\n return { x: -1, y: -1 };\n }\n if (event instanceof MouseEvent) {\n return { x: event.clientX, y: event.clientY };\n } else {\n return event.touches && event.touches.length > 0\n ? { x: event.touches[0].clientX, y: event.touches[0].clientY }\n : { x: -1, y: -1 };\n }\n}\n\n/* istanbul ignore next */\n/**\n * Flatten nested array\n * @param an_array Array to flatten\n */\nexport function flatten(an_array: T[]) {\n const stack = [...an_array];\n const res = [];\n while (stack.length) {\n // pop value from stack\n const next = stack.pop();\n if (Array.isArray(next)) {\n // push back array items, won't modify the original input\n stack.push(...next);\n } else {\n res.push(next);\n }\n }\n // reverse to restore input order\n return res.reverse();\n}\n\nconst seed = xmur3('PlaceOS');\nconst rand = sfc32(0x9e3779b9, 0x243f6a88, 0xb7e15162, seed());\n\nexport function predictableRandomInt(ceil: number = 100, floor: number = 0) {\n return Math.floor(rand() * (ceil - floor)) + floor;\n}\n\n// https://stackoverflow.com/questions/521295/seeding-the-random-number-generator-in-javascript\nfunction xmur3(str) {\n for (var i = 0, h = 1779033703 ^ str.length; i < str.length; i++)\n (h = Math.imul(h ^ str.charCodeAt(i), 3432918353)),\n (h = (h << 13) | (h >>> 19));\n return function () {\n h = Math.imul(h ^ (h >>> 16), 2246822507);\n h = Math.imul(h ^ (h >>> 13), 3266489909);\n return (h ^= h >>> 16) >>> 0;\n };\n}\n\nfunction sfc32(a, b, c, d) {\n return function () {\n a >>>= 0;\n b >>>= 0;\n c >>>= 0;\n d >>>= 0;\n var t = (a + b) | 0;\n a = b ^ (b >>> 9);\n b = (c + (c << 3)) | 0;\n c = (c << 21) | (c >>> 11);\n d = (d + 1) | 0;\n t = (t + d) | 0;\n c = (c + t) | 0;\n return (t >>> 0) / 4294967296;\n };\n}\n\nexport function isLessThanBreakpoint(breakpoint: number): boolean {\n if (window) {\n return window.innerWidth < breakpoint;\n }\n return false;\n}\n\nexport function toTitleCase(str: string): string {\n return typeof str === 'string'\n ? str\n .toLowerCase()\n .split(' ')\n .map(function (word) {\n return word.replace(word[0], word[0].toUpperCase());\n })\n .join(' ')\n : '';\n}\n","\nimport { Directive, OnDestroy } from '@angular/core';\nimport { BaseClass } from './base.class';\nimport { SpaceImageObject } from '@mckinsey-converge/base';\nimport { BehaviorSubject } from 'rxjs';\n\n@Directive({\n selector: 'a-very-basic-component-image-that-should-not-be-used'\n})\nexport class ImageDirective extends BaseClass implements OnDestroy {\n public foundImages?: SpaceImageObject[];\n public loadImages?: BehaviorSubject\n public ngOnDestroy(): void {\n this.destroy();\n }\n}","import {\n Directive,\n ElementRef,\n HostListener\n} from '@angular/core';\n\n@Directive({\n selector: 'input[type=number], input[numbersOnly]'\n})\nexport class NumbersOnlyDirective {\n\n constructor(private _el: ElementRef) {\n }\n\n @HostListener('input', ['$event']) onInputChange(event) {\n const initalValue = this._el.nativeElement.value;\n this._el.nativeElement.value = initalValue.replace(/[^0-9]*/g, '');\n if (initalValue !== this._el.nativeElement.value) {\n event.stopPropagation();\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'replace'\n})\nexport class ReplacePipe implements PipeTransform {\n\n transform(value: string, from: string = '_', to: string = ' '): string {\n return (value|| '').split(from).join(to);\n }\n}\n","export * from './lib/bookings.module';\nexport * from './lib/bookings.actions'\nexport * from './lib/bookings.reducer'\nexport * from './lib/bookings.types'\nexport * from './lib/bookings.utils'\n","\nimport { IBookingQueryOptions, PaginatedBooking } from '@mckinsey-converge/data-common';\nimport { \n createLoadingAction\n} from '../../../loading/src/lib/loading.actions';\n\nimport {\n MyBookingsState,\n MyBookingsStoreState,\n} from './bookings.types';\nimport {\n createAction,\n props\n} from '@ngrx/store';\n\nexport const bookingStateSelector = (state: MyBookingsStoreState) => state.bookings;\n\nexport const loadBookingsWithQuery = createAction('[Bookings] Load Bookings with query', props());\n\nexport const loadHomepageBookingsResults = createLoadingAction('HomepageBookings', 'homepage');\n\nexport const loadUpcomingBookingsResults = createLoadingAction('UpcomingBookings', 'upcoming');\n\nexport const loadPastBookingsResults = createLoadingAction('PastBookings', 'past');\n\nexport const loadCancelledBookingsResults = createLoadingAction('CancelledBookings', 'cancelled');\n\nexport const loadBookingByIdResults = createLoadingAction('BookingById', 'bookingById');\n\nexport const clearBookingByIdResults = createAction('[BookingById] Clear Booking Data');\n","import { Injectable } from '@angular/core';\nimport {\n Actions,\n Effect,\n ofType\n} from '@ngrx/effects';\nimport {\n IBookingQueryOptions,\n BookingsPaginatedService\n} from '../../../data-common/src/lib/bookings';\nimport {\n createLoadingEffect,\n LoadingAction\n} from '@mckinsey-converge/loading';\nimport {\n loadHomepageBookingsResults,\n loadPastBookingsResults,\n loadUpcomingBookingsResults,\n loadCancelledBookingsResults,\n loadBookingsWithQuery,\n loadBookingByIdResults\n} from './bookings.actions';\nimport { mergeMap } from 'rxjs/operators';\nimport {\n\n} from './bookings.utils';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\n\n@Injectable()\nexport class BookingsEffects {\n constructor(private actions: Actions,\n private bookingService: BookingsPaginatedService) {\n }\n\n @Effect()\n public afterBookingsRequestResultsLoadOthersEffect = this.actions.pipe(\n ofType(loadBookingsWithQuery),\n mergeMap((action: LoadingAction) => {\n const date = new DateTZ({date: action.from})\n const yourBookingsRequest = {\n email: action.email,\n pagination: true,\n limit: null,\n offset: action.offset,\n show_cancelled: false,\n sort: 'start_epoch asc',\n filters: {\n end_epoch: `>=${date.subtractValue({ minutes: 5 }).seconds}`,\n },\n include_rooms: true\n };\n const upcomingRequest = {\n email: action.email,\n pagination: true,\n limit: null,\n offset: action.offset,\n show_cancelled: false,\n sort: 'start_epoch asc',\n filters: {\n end_epoch: `>=${date.seconds}`,\n },\n include_rooms: true\n };\n const pastRequest = {\n email: action.email,\n pagination: true,\n limit: null,\n offset: action.offset,\n show_cancelled: false,\n sort: 'start_epoch desc',\n filters: {\n start_epoch: `>${date.subtractValue({ hours: 48 }).seconds}`,\n end_epoch: `<${date.seconds}`,\n },\n include_rooms: true\n };\n const cancelledRequest = {\n email: action.email,\n pagination: true,\n limit: null,\n offset: action.offset,\n show_cancelled: true,\n sort: 'start_epoch desc',\n filters: {\n start_epoch: `>${date.subtractValue({ hours: 48 }).seconds}`,\n },\n include_rooms: true\n };\n const byIdRequest = {\n email: action.email,\n id: action.id,\n pagination: true,\n limit: 1,\n include_rooms: true\n };\n\n const effects = [];\n switch(action.target) {\n case 'upcoming':\n effects.push(loadUpcomingBookingsResults.request(upcomingRequest));\n break;\n case 'past':\n effects.push(loadPastBookingsResults.request(pastRequest));\n break;\n case 'cancelled':\n effects.push(loadCancelledBookingsResults.request(cancelledRequest));\n break;\n case 'bookingById':\n effects.push(loadBookingByIdResults.request(byIdRequest));\n break\n case 'homepage':\n effects.push(loadHomepageBookingsResults.request(yourBookingsRequest));\n // effects.push(loadPastBookingsResults.request(pastRequest));\n break\n default:\n }\n return effects;\n })\n );\n\n @Effect()\n public loadHomepageBookingsResultsEffect = createLoadingEffect(this.actions, loadHomepageBookingsResults,\n (action) => this.bookingService.userBookings(action, `homepage-${action.filters?.start_epoch || ''}${action.filters?.end_epoch || ''}`));\n\n @Effect()\n public loadUpcomingBookingsResultsEffect = createLoadingEffect(this.actions, loadUpcomingBookingsResults,\n (action) => this.bookingService.userBookings(action, `upcoming-${action.filters?.start_epoch || ''}${action.filters?.end_epoch || ''}`));\n \n @Effect()\n public loadPastBookingsResultsEffect = createLoadingEffect(this.actions, loadPastBookingsResults,\n (action) =>\n this.bookingService.userBookings(action, `past-${action.filters?.start_epoch || ''}${action.filters?.end_epoch || ''}`));\n\n @Effect()\n public loadCancelledBookingsResultsEffect = createLoadingEffect(this.actions, loadCancelledBookingsResults,\n (action) =>\n this.bookingService.userBookings(action, `cancelled-${action.filters?.start_epoch || ''}${action.filters?.end_epoch || ''}`));\n\n @Effect()\n public loadBookingByIdResultsEffect = createLoadingEffect(this.actions, loadBookingByIdResults,\n (action) => \n this.bookingService.userBookings(action, `bookingById-${action.id}`));\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\nimport { bookingsReducer } from './bookings.reducer';\nimport { BookingsEffects } from './bookings.effects';\n\n@NgModule({\n imports: [\n CommonModule,\n EffectsModule.forFeature([BookingsEffects]),\n StoreModule.forFeature('bookings', bookingsReducer)\n ]\n})\nexport class BookingsModule {\n}\n","import { LoadingModel } from '@mckinsey-converge/loading';\nimport {\n createReducer,\n on\n} from '@ngrx/store';\nimport {\n loadHomepageBookingsResults,\n loadUpcomingBookingsResults,\n loadPastBookingsResults,\n loadCancelledBookingsResults,\n loadBookingByIdResults,\n clearBookingByIdResults,\n} from './bookings.actions';\nimport { MyBookingsState } from './bookings.types';\n \nimport { \n BookingFormState,\n clearBookingFormData,\n clearRoomFilters,\n openBookingSurvey,\n storeBookingFormData,\n storeRoomFilters\n} from '@mckinsey-converge/data-common';\n\n\nexport const initialBookingsState: MyBookingsState = {\n query: LoadingModel.empty(),\n homepage: LoadingModel.empty(),\n upcoming: LoadingModel.empty(),\n past: LoadingModel.empty(),\n cancelled: LoadingModel.empty(),\n bookingById: LoadingModel.empty(),\n};\n\nexport const bookingsReducer = createReducer(initialBookingsState,\n on(clearBookingByIdResults, (state: MyBookingsState) => ({\n ...state,\n bookingById: LoadingModel.empty(),\n }) as MyBookingsState),\n ...loadHomepageBookingsResults.ons,\n ...loadUpcomingBookingsResults.ons,\n ...loadPastBookingsResults.ons,\n ...loadCancelledBookingsResults.ons,\n ...loadBookingByIdResults.ons,\n );\n\n\n\n export const initialBookingFormState: BookingFormState = {\n activeFormFilters: []\n };\n \n export const bookingFormReducer = createReducer(initialBookingFormState,\n on(storeBookingFormData, (state: BookingFormState, action) => {\n return {\n ...state,\n activeForm: {\n ...state.activeForm,\n ...action.payload\n }\n } as BookingFormState;\n }),\n on(clearBookingFormData, state => ({\n ...state,\n activeForm: undefined\n }) as BookingFormState),\n on(openBookingSurvey, state => ({\n ...state,\n bookingCompleted: new Date()\n }) as BookingFormState),\n on(storeRoomFilters, (state: BookingFormState, action) => {\n return {\n ...state,\n activeFormFilters: action.payload\n } as BookingFormState;\n }),\n on(clearRoomFilters, (state: BookingFormState) => ({\n ...state,\n activeFormFilters: initialBookingFormState.activeFormFilters\n }) as BookingFormState)\n );\n \n","import { Booking } from '@mckinsey-converge/data-common';\nimport { SelectOption } from '@mckinsey-converge/ui';\n\nexport const mapBookingToSelectOption = (booking?: Booking): SelectOption => booking ? ({\n value: booking.id,\n display: booking.name\n}) : undefined;\n","export * from './lib/buildings.module';\nexport * from './lib/buildings.actions'\nexport * from './lib/buildings.types'\nexport * from './lib/buildings.reducer'\n","import { \n createLoadingAction,\n} from '../../../loading/src/lib/loading.actions';\nimport {\n Building,\n BuildingCity,\n} from '../../../data-common/src/lib/organisation/building.class';\nimport {\n BuildingLevel,\n} from '../../../data-common/src/lib/organisation/level.class'\nimport {\n Organisation,\n} from '../../../data-common/src/lib/organisation/organisation.class'\nimport { createSelector } from '@ngrx/store';\nimport {\n BuildingState,\n BuildingStoreState\n} from './buildings.types';\n\nexport const loadBuildings = createLoadingAction('Buildings', 'data');\n\nexport const buildingStateSelector = (state: BuildingStoreState) => state.buildings;\n\nexport const selectLoadBuildingsSuccess = createSelector(buildingStateSelector, loadBuildings.selectors.optionalSuccess);\n\n/**\n * Groups buildings by city\n */\nexport const selectBuildingOptionsGroupedByCity = createSelector(loadBuildings.selectors.optionalSuccess, (success) => {\n if (success) {\n const mapped = new Map();\n success.forEach(s => {\n const found = Array.from(mapped.keys()).find(c => c.name === s.city);\n let list = found ? mapped.get(found) : undefined;\n if (!list) {\n list = [];\n mapped.set({\n name: s.city,\n timezone: s.timezone\n }, list);\n }\n list.push(s);\n });\n return mapped;\n }\n return new Map();\n});\n\nexport const selectLevelByZoneId = createSelector(selectLoadBuildingsSuccess,\n (buildings, param: string) => {\n if (buildings) {\n return buildings.map(b => b.levels.find((l: BuildingLevel) => l.id === param))\n ?.[0] ?? undefined;\n }\n return undefined;\n });\n","import { Injectable } from '@angular/core';\nimport {\n Actions,\n Effect,\n ofType\n} from '@ngrx/effects';\nimport {\n Organisation,\n OrganisationService\n} from '../../../data-common/src/lib/organisation';\nimport { loadBuildings } from './buildings.actions';\nimport {\n createLoadingEffect,\n LoadingAction,\n Payload\n} from '@mckinsey-converge/loading';\nimport { loadOrganisations } from '../../../organisation/src/lib/organisation.actions';\nimport { map } from 'rxjs/operators';\n\n\n@Injectable()\nexport class BuildingsEffects {\n\n constructor(private actions: Actions,\n private organizationService: OrganisationService) {\n\n }\n\n @Effect()\n public loadBuildings = createLoadingEffect(this.actions, loadBuildings,\n (action) => this.organizationService.loadBuildingsWithOrg(action));\n\n @Effect()\n public loadBuildingsAfterOrg = this.actions.pipe(\n ofType(loadOrganisations.success),\n map((action: LoadingAction>) => loadBuildings.request(action.payload)));\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EffectsModule } from '@ngrx/effects';\nimport { BuildingsEffects } from './buildings.effects';\nimport { StoreModule } from '@ngrx/store';\nimport { buildingsReducer } from './buildings.reducer';\n\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule,\n EffectsModule.forFeature([\n BuildingsEffects\n ]),\n StoreModule.forFeature('buildings', buildingsReducer)\n ]\n})\nexport class BuildingsModule {\n}\n","import { createReducer } from '@ngrx/store';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { loadBuildings } from './buildings.actions';\nimport { BuildingState } from './buildings.types';\n\nexport const initialBuildingState: BuildingState = {\n data: LoadingModel.empty()\n};\n\nexport const buildingsReducer = createReducer(initialBuildingState,\n ...loadBuildings.ons\n);\n","export * from './lib/data-common.module';\nexport * from './lib/booking';\nexport * from './lib/bookings';\nexport * from './lib/catering';\nexport * from './lib/location';\nexport * from './lib/organisation';\nexport * from './lib/spaces';\nexport * from './lib/users';\nexport * from './lib/app.service';\nexport * from './lib/hotkeys.service';\nexport * from './lib/base.service';\nexport * from './lib/base-api.class';\nexport * from './lib/reports'\nexport * from './lib/service-manager.class';\nexport * from './lib/settings.service';\nexport * from './lib/spec-helpers';\nexport * from './lib/settings.interfaces';\nexport * from './lib/validation.utilities';\nexport * from './lib/status.interfaces';\nexport * from './lib/recurrence/recurrence.utils';\nexport * from './lib/close-modal-dialog-service';\nexport * from './lib/validation.utilities';\nexport * from './lib/collapse-accordion-service';","import { HashMap } from '@mckinsey-converge/base';\n\n/**\n * Convert map into a query string\n * @param map Key value pairs to convert\n */\nexport function toQueryString(map: HashMap) {\n let str = '';\n if (map) {\n for (const key in map) {\n if (map.hasOwnProperty(key) && map[key] !== undefined && map[key] !== null) {\n str += `${(str ? '&' : '')}${key}=${map[key]}`;\n }\n }\n }\n return str;\n}\n","import {\n ApplicationRef,\n Injectable,\n NgZone,\n} from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { take, first } from 'rxjs/operators';\n\nimport { ComposerService } from '@placeos/composer';\nimport { PlaceOSOptions } from '@placeos/ts-client';\nimport { HeapIoService } from '@acaprojects/ngx-heap-io';\n\nimport {\n BehaviorSubject,\n Observable,\n Subject\n} from 'rxjs';\n\nimport {\n ApplicationLoadingState,\n BaseClass,\n ConsoleStream,\n log\n} from '@mckinsey-converge/base';\nimport { SettingsService } from './settings.service';\n\nimport { HotkeysService } from './hotkeys.service';\nimport {\n ApplicationIcon,\n ComposerSettings\n} from './settings.interfaces';\nimport { EnvironmentService } from '../../../environment/src/lib/environment.service'; // '@mckinsey-converge/environment';\nimport {\n Store\n} from '@ngrx/store';\nimport { selectCurrentUser } from '../../../user/src/lib/user.actions';\nimport { UserStoreState } from '../../../user/src/lib/user.types';\nimport { Booking } from './bookings';\nimport { filter } from 'rxjs/operators';\n\n\ndeclare global {\n interface Window {\n application: ApplicationService;\n mock: {\n enabled: boolean;\n backend: any;\n };\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApplicationService extends BaseClass {\n /** Map of state variables for Service */\n protected _subjects: {\n [key: string]: BehaviorSubject | Subject;\n } = {};\n /** Map of observables for state variables */\n protected _observers: { [key: string]: Observable } = {};\n _kioskFormFilter: boolean;\n\n constructor(\n public store: Store,\n public analytics: HeapIoService,\n private _app_ref: ApplicationRef,\n private _zone: NgZone,\n private _title: Title,\n private _settings: SettingsService,\n private _hotkeys: HotkeysService,\n private _composer: ComposerService,\n private _snackbar: MatSnackBar,\n private _environment: EnvironmentService\n ) {\n super();\n this.set('system', null);\n this.set('title', 'Home');\n this.set('loading', {});\n this.set('CONCIERGE.day_view.viewing', null);\n this.set('undo', new BehaviorSubject<{\n action: 'series' | 'booking',\n booking: Booking\n } | null>(null));\n\n this.set('APP.breakdown', false);\n\n this._app_ref.isStable.pipe(first(_ => _)).subscribe(() => {\n this._zone.run(() => {\n this.log('APP', `Application has stablised.`);\n this.waitForSettings();\n });\n });\n }\n\n public set kioskFormFilter(isIt: boolean) {\n this._kioskFormFilter = isIt;\n }\n\n public get kioskFormFilter():boolean {\n return this._kioskFormFilter \n }\n\n /** Analytics service */\n public get Analytics() {\n return {};\n }\n\n /** Hotkeys service */\n public get Hotkeys() {\n return this._hotkeys;\n }\n\n /**\n * Get a setting from the settings service\n * @param key Name of the setting. i.e. nested items can be grabbed using `.` to seperate key names\n */\n public setting(key: string): any {\n return this._settings.get(key);\n }\n\n /**\n * Title of the page\n */\n public set title(value: string) {\n const title_suffix = this.setting('app.title');\n this.set('title', value);\n this._title.setTitle(`${value ? value + ' | ' : ''}${title_suffix}`);\n }\n\n /**\n * Title of the page\n */\n public get title(): string {\n return this._title.getTitle();\n }\n\n /** Root API Endpoint */\n public get endpoint() {\n return `/api/staff/`;\n }\n\n /** Root API Endpoint for engine */\n public get engine_endpoint() {\n return this._composer.auth.api_endpoint + '/';\n }\n\n /** Whether settings has been loaded */\n public get has_settings(): boolean {\n return this._settings.is_initialised;\n }\n\n /**\n * Create notification popup\n * @param type CSS Class to add to the notification\n * @param message Message to display on the notificaiton\n * @param action Display text for the callback action\n * @param on_action Callback of action on the notification\n * @param icon Icon to render to the left of the notification message\n */\n public notify(\n type: string,\n message: string,\n action: string = 'OK',\n on_action?: () => void,\n icon: ApplicationIcon = {\n type: 'icon',\n class: 'material-icons',\n content: 'info'\n }\n ): void {\n const snackbar_ref = this._snackbar.open(message, action, {\n panelClass: [type],\n duration: 5000\n });\n this.subscription(\n 'snackbar_close',\n snackbar_ref.afterDismissed().subscribe(() => {\n this.unsub('snackbar_close');\n this.unsub('notify');\n })\n );\n if (action) {\n on_action = on_action || (() => snackbar_ref.dismiss());\n this.subscription(\n 'notify',\n snackbar_ref.onAction().subscribe(() => on_action())\n );\n }\n }\n\n /**\n * Create success notification popup\n * @param msg Message to display on the notificaiton\n * @param action Display text for the callback action\n * @param on_action Callback of action on the notification\n */\n public notifySuccess(msg: string, action?: string, on_action?: () => void): void {\n const icon: ApplicationIcon = {\n type: 'icon',\n class: 'material-icons',\n content: 'done'\n };\n this.notify('success', msg, action, on_action, icon);\n }\n\n /**\n * Create error notification popup\n * @param msg Message to display on the notificaiton\n * @param action Display text for the callback action\n * @param on_action Callback of action on the notification\n */\n public notifyError(msg: string, action?: string, on_action?: () => void): void {\n const icon: ApplicationIcon = {\n type: 'icon',\n class: 'material-icons',\n content: 'error'\n };\n this.notify('error', msg, action, on_action, icon);\n }\n\n /**\n * Create warning notification popup\n * @param msg Message to display on the notificaiton\n * @param action Display text for the callback action\n * @param on_action Callback of action on the notification\n */\n public notifyWarn(msg: string, action?: string, on_action?: () => void): void {\n const icon: ApplicationIcon = {\n type: 'icon',\n class: 'material-icons',\n content: 'warning'\n };\n this.notify('warn', msg, action, on_action, icon);\n }\n\n /**\n * Create info notification popup\n * @param msg Message to display on the notificaiton\n * @param action Display text for the callback action\n * @param on_action Callback of action on the notification\n */\n public notifyInfo(msg: string, action?: string, on_action?: () => void): void {\n this.notify('info', msg, action, on_action);\n }\n\n /**\n * Log data to the browser console\n * @param type Type of message\n * @param msg Message body\n * @param args array of argments to log to the console\n * @param stream Stream to emit the console on. 'debug', 'log', 'warn' or 'error'\n * @param force Whether to force message to be emitted when debug is disabled\n */\n public log(\n type: string,\n msg: string,\n args?: any,\n stream: ConsoleStream = 'debug',\n force: boolean = false\n ): void {\n log(type, msg, args, stream, force);\n }\n\n /**\n * Get the current value of the named property\n * @param name Property name\n */\n public get(name: string): U {\n return this._subjects[name] && this._subjects[name] instanceof BehaviorSubject\n ? (this._subjects[name] as BehaviorSubject).getValue()\n : null;\n }\n\n /**\n * Listen to value change of the named property\n * @param name Property name\n * @param next Callback for value changes\n */\n public listen(name: string): Observable {\n if (!this._observers[name]) {\n this.set(name, null);\n }\n return this._observers[name];\n }\n\n /**\n * Update the value of the named property\n * @param name Property name\n * @param value New value\n */\n public set(name: string, value: U): void {\n if (!this._subjects[name]) {\n this._subjects[name] = new BehaviorSubject(value);\n this._observers[name] = this._subjects[name].asObservable();\n } else {\n this._subjects[name].next(value);\n }\n }\n\n /** Wait for settings to be initialised before setting up the application */\n private waitForSettings() {\n // Wait until the settings have loaded before initialising\n this._settings.initialised.pipe(first(_ => _)).subscribe(() => this.init());\n }\n\n /**\n * Initialise application services\n */\n private init(): void {\n this.setupComposer();\n this.subscription('currentUser', this.store.select(selectCurrentUser)\n .pipe( filter(user => user !== undefined) )\n .pipe(take(1))\n .subscribe((user: any) => {\n // Once we know we have the user loaded.\n this.setupAnalytics(user?.fmno);\n })\n );\n this._composer.initialised.pipe(first(_ => _)).subscribe(() => {\n this._initialised.next(true);\n });\n // Add service to window if in debug mode\n if (window.debug) {\n window.application = this;\n }\n }\n\n /**\n * Initialise the composer library comms\n */\n private setupComposer(): void {\n this.log('SYSTEM', 'Setup up composer...');\n const loading: ApplicationLoadingState = this.get('loading');\n loading.composer = {\n message: 'Initialising service connection',\n state: 'loading'\n };\n this.set('loading', loading);\n // Get application settings\n const settings: ComposerSettings = this._settings.get('composer') || {};\n const protocol = settings.protocol || location.protocol;\n const host = settings.domain || location.hostname;\n const port = settings.port || location.port;\n const url = settings.use_domain ? `${protocol}//${host}:${port}` : location.origin;\n const route = host.includes('localhost') && port === '4200' ? '' : settings.route || '';\n const mock =\n this._settings.get('mock') ||\n location.href.includes('mock=true') ||\n localStorage.getItem('mock') === 'true';\n // Generate configuration object\n const config: PlaceOSOptions = {\n scope: 'public',\n host: `${host}:${port}`,\n auth_uri: `${url}/auth/oauth/authorize`,\n token_uri: `${url}/auth/token`,\n redirect_uri: `${location.origin}${route}/oauth-resp.html`,\n handle_login: !settings.local_login,\n mock\n };\n this._composer.setup(config);\n loading.composer = {\n message: 'Initialising service connection',\n state: 'complete'\n };\n this.set('loading', loading);\n }\n\n private setupAnalytics(fmno: string) {\n this.log('HEAP', `Loading heap ${this._environment?.heap_io_id}`);\n // Default Heap app ID via the default setting\n const heapIo = this._settings.get('app.heap_io');\n if (this._environment?.heap_io_id) {\n // Apply Heap app ID via the environmental setting\n heapIo.app_id = this._environment.heap_io_id;\n }\n if (heapIo) {\n this.analytics.load(heapIo);\n if (fmno) {\n this.analytics.identify(fmno);\n }\n } else {\n this.log('HEAP', `Heap could not be found for the current frontend ${this._settings.frontend}`);\n }\n }\n\n}\n","import { Subject } from 'rxjs';\n\nimport {\n BaseClass,\n HashMap\n} from '@mckinsey-converge/base';\nimport {\n ServiceLike,\n ServiceManager\n} from './service-manager.class';\n\nexport type ApiEventType = 'value_change' | 'item_saved' | 'reset' | 'other';\n\nexport interface ApiEvent {\n type: ApiEventType;\n metadata: T;\n}\n\n\nexport class BaseDataClass extends BaseClass {\n /** Subject for emitting events on the object */\n protected readonly event_subject = new Subject();\n /** Observable for events on this object */\n public readonly events = this.event_subject.asObservable();\n /** Unique Identifier of the object */\n public readonly id: string;\n /** Human readable name of the object */\n public readonly name: string;\n /** Email address associated with the object */\n public readonly email: string;\n /** Map of local property names to server ones */\n protected _server_names: HashMap = {};\n\n /** Service for managing model on the server */\n protected get _service(): ServiceLike {\n return ServiceManager.serviceFor(BaseDataClass);\n }\n\n constructor(raw_data: HashMap) {\n super();\n this.id = raw_data.id || raw_data.zone_id || raw_data.email || '';\n this.name = raw_data.name || '';\n this.email = `${raw_data.email || ''}`.toLowerCase();\n }\n\n /**\n * Save pending changes to server\n */\n public save(): Promise {\n if (this._service) {\n const form = this.toJSON();\n return new Promise((resolve, reject) => {\n const promise = this.id\n ? this._service.update(this.id, form)\n : this._service.add(form);\n promise.then(\n (d) => {\n this.event_subject.next({ type: 'item_saved', metadata: d });\n resolve(d);\n },\n (_) => reject(_)\n );\n });\n } else {\n Promise.reject('No service to process request');\n }\n }\n\n /**\n * Delete this item from the server\n */\n public delete(): Promise {\n if (this.id) {\n return this._service.delete(this.id);\n }\n }\n\n /**\n * Run task for this item on the service\n * @param task_name Name of the task\n * @param parameters Parameters to pass to the task request\n */\n public runTask(task_name: string, parameters: HashMap): Promise {\n if (this.id) {\n return this._service.task(this.id, task_name, parameters);\n }\n }\n\n /**\n * Convert object into plain object\n */\n public toJSON(this: BaseDataClass): HashMap {\n const obj: any = { ...this };\n // Remove local private members\n delete obj._service;\n delete obj._changes;\n delete obj.event_subject;\n delete obj.events;\n // Remove parent private members\n delete obj._timers;\n delete obj._intervals;\n delete obj._subscriptions;\n delete obj._server_names;\n delete obj._initialised;\n // Convert remaining members to be public\n const keys = Object.keys(obj);\n for (const key of keys) {\n if (key[0] === '_') {\n const new_key = this._server_names[key.substring(1)] || key.substring(1);\n obj[new_key] = obj[key];\n delete obj[key];\n } else if (obj[key] === undefined) {\n delete obj[key];\n }\n }\n return obj;\n }\n\n /**\n * Make a copy of this object\n */\n public clone(): BaseDataClass {\n return new BaseDataClass(this);\n }\n\n /**\n * Make a copy of this object without identification data\n */\n public duplicate(): BaseDataClass {\n return new BaseDataClass({ ...this, id: null, email: null });\n }\n}\n","import { ComposerService } from '@placeos/composer';\nimport { BehaviorSubject, Observable, of, Subject, Subscriber } from 'rxjs';\n\nimport { BaseDataClass } from './base-api.class';\nimport { BaseClass, HashMap } from '@mckinsey-converge/base';\nimport { ApplicationService } from './app.service';\nimport { toQueryString } from './api.utilities';\nimport { SettingsService } from './settings.service';\nimport { catchError, map } from 'rxjs/operators';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\n\nexport interface IEngineResponse {\n results: HashMap[];\n total: number;\n}\n\nexport class BaseAPIService extends BaseClass {\n /** Application service */\n public parent: ApplicationService;\n /** Display name of the service */\n protected _name: string;\n /** API Route of the service */\n protected _api_route: string;\n /** Map of state variables for Service */\n protected _subjects: { [key: string]: BehaviorSubject | Subject } = {};\n /** Map of observables for state variables */\n protected _observers: { [key: string]: Observable } = {};\n /** Map of poll subscribers for API endpoints */\n protected _subscribers: { [key: string]: Subscriber } = {};\n /** Map of promises for Service */\n protected _promises: { [key: string]: Promise } = {};\n /** Comparison function for service items */\n protected _compare: (a: T, b: T) => boolean = (a, b) =>\n a === b || (a as any).id === (b as any).id;\n /** Default filter function for list method */\n protected _list_filter: (a: T) => boolean = (a) => !!a;\n\n /** Http Client */\n protected get http() {\n return this._composer.http;\n }\n constructor(protected _composer: ComposerService,\n protected settingsService: SettingsService) {\n super();\n this._name = 'Base';\n this._api_route = 'base';\n this.set('list', []);\n }\n\n /**\n * Injects concierge into form_data.\n */\n private injectConcierge(form_data: HashMap) {\n // we only send it over when concierge, since the BE may check for presence rather than\n // if its true or not.\n if (this.settingsService.concierge) {\n return { ...form_data, concierge: true }\n }\n return form_data;\n }\n\n /**\n * Initailise service\n */\n public init() {\n this.load().then(\n (_) => this._initialised.next(true),\n (err) => this.timeout('init', () => this.init(), 1000)\n );\n }\n\n /**\n * Get API route for the service\n * @param engine Whether endpoint is using the application API or engine API\n */\n public route(engine: boolean = false) {\n const endpoint = engine\n ? this._composer.auth.api_endpoint\n : '/api/staff';\n return `${endpoint}/${this._api_route}`;\n }\n\n /** API Route of the service */\n public get api_route() {\n return this._api_route;\n }\n\n /**\n * Get the current value of the named property\n * @param name Property name\n */\n public get(name: string): U {\n if (!this._observers[name]) {\n this.set(name, null);\n }\n return (this._subjects[name] as BehaviorSubject).getValue();\n }\n\n /**\n * Listen to value change of the named property\n * @param name Property name\n * @param next Callback for value changes\n */\n public listen(name: string): Observable {\n if (!this._observers[name]) {\n this.set(name, null);\n }\n return this._observers[name];\n }\n\n /**\n * Update the value of the named property\n * @param name Property name\n * @param value New value\n */\n protected set(name: string, value: U): void {\n if (!this._subjects[name]) {\n this._subjects[name] = new BehaviorSubject(value);\n this._observers[name] = this._subjects[name].asObservable();\n } else {\n this._subjects[name].next(value);\n }\n }\n\n /**\n * Get list of loaded items\n * @param predicate Function for filtering the list\n */\n public filter(predicate: (a: T) => boolean = this._list_filter): T[] {\n const list: T[] = this.get('list');\n return list.filter(predicate);\n }\n\n /**\n * Get item with the given id from the loaded items\n * @param id ID of the item\n */\n public find(id: string): T {\n const list = this.get('list');\n return list.find((i) => i.id === id || (i.email?.toLowerCase() === id?.toLowerCase()));\n }\n\n /**\n * Query the index of the API route associated with this service\n * @param query_params Map of query paramaters to add to the request URL\n */\n public query(query_params: HashMap = {}): Promise {\n let engine = false;\n let cache = 1000;\n /* istanbul ignore else */\n if (query_params) {\n engine = !!query_params.engine;\n delete query_params.engine;\n cache = typeof query_params.cache !== 'boolean' ? query_params.cache || 1000 : 1000;\n typeof query_params.cache !== 'boolean' && delete query_params.cache;\n }\n let query = toQueryString(query_params);\n const key = `query|${query}`;\n if (!this._promises[key]) {\n // Bring back once implemented in the API\n // if (this.settingsService.concierge) {\n // query = query + '&check_access=true';\n // }\n this._promises[key] = new Promise((resolve, reject) => {\n const url = `${this.route(engine)}${query ? '?' + query : ''}`;\n let result: T[] | HashMap[] = [];\n this.http.get(url).subscribe(\n (d: IEngineResponse | HashMap[]) => {\n result =\n d && d instanceof Array\n ? d.map((i) => this.process(i))\n : d && !(d instanceof Array) && d.results\n ? (d.results as HashMap[])\n : d && !(d instanceof Array) && !d.results \n ? [d]\n : [];\n },\n (e) => {\n reject(e);\n this._promises[key] = null;\n },\n () => {\n resolve(result);\n this.timeout(key, () => (this._promises[key] = null), cache);\n }\n );\n });\n }\n return this._promises[key];\n }\n\n /**\n * query function version -2 - returns observable instead of promise...\n * Query the index of the API route associated with this service\n * @param query_params Map of query paramaters to add to the request URL\n */\n public queryObsr(query_params: HashMap = {}):Observable{\n let engine = false;\n let cache = 1000;\n /* istanbul ignore else */\n if (query_params) {\n engine = !!query_params.engine;\n delete query_params.engine;\n }\n let query = toQueryString(query_params);\n const key = `query|${query}`;\n const url = `${this.route(engine)}${query ? '?' + query : ''}`;\n return this.http.get(url).pipe(\n map((d: IEngineResponse | HashMap[]) => this.processApiResult(d) ),\n catchError((error: any, result?: T) => {\n console.log(error);\n return of(result as T);\n })\n );;\n }\n\n\n /**\n * \n * @param d \n * @returns \n */\n processApiResult(d: IEngineResponse | HashMap[]): IEngineResponse | HashMap[]{\n let result: IEngineResponse | HashMap[] =\n d && d instanceof Array\n ? d.map((i) => this.process(i))\n : d && !(d instanceof Array) && d.results\n ? (d.results as HashMap[])\n : d && !(d instanceof Array) && !d.results \n ? [d]\n : [];\n return result;\n }\n\n /**\n * query function version -2 - returns observable instead of promise...\n * Query the index of the API route associated with this service\n * @param query_params Map of query paramaters to add to the request URL\n */\n public queryRoomsForQR(query_params: HashMap = {}):Observable{\n let engine = false;\n let cache = 1000;\n /* istanbul ignore else */\n if (query_params) {\n engine = !!query_params.engine;\n delete query_params.engine;\n }\n let query = toQueryString(query_params);\n const key = `query|${query}`;\n const url = `${this.route(engine)}${query ? '?' + query : ''}`;\n return this.http.get(url);\n }\n \n /**\n * Query the API route for a sepecific item\n * @param id ID of the item\n * @param query_params Map of query paramaters to add to the request URL\n */\n public show(id: string, query_params: HashMap = {}): Promise {\n let engine = false;\n /* istanbul ignore else */\n if (query_params) {\n engine = !!query_params.engine;\n delete query_params.engine;\n }\n const query = toQueryString(query_params);\n const key = `show|${id}|${query}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const url = `${this.route(engine)}/${id}${query ? '?' + query : ''}`;\n let result: T = null;\n this.http.get(url).subscribe(\n (d) => (result = this.process(d)),\n (e) => {\n reject(e);\n this._promises.new_item = null;\n },\n () => {\n resolve(result);\n this.timeout(key, () => (this._promises[key] = null), 1000);\n }\n );\n });\n }\n return this._promises[key];\n }\n\n /**\n * Make post request for a new item to the service\n * @param form_data Data to post to the server\n * @param query_params Map of query paramaters to add to the request URL\n */\n public add(form_data: HashMap, query_params: HashMap = {}): Promise {\n /* istanbul ignore else */\n if (!this._promises.new_item) {\n this._promises.new_item = new Promise((resolve, reject) => {\n const query = toQueryString(query_params);\n const url = `${this.route(query_params.engine)}${query ? '?' + query : ''}`;\n let result: T = null;\n this.http.post(url, this.injectConcierge(form_data)).subscribe(\n (d) => (result = this.process(d)),\n (e) => {\n reject(e);\n this.analyticsEvent(`create-${this._name.toLowerCase()}-failed`);\n this._promises.new_item = null;\n },\n () => {\n resolve(result);\n this.set('list', this.updateList(this.get('list'), [result]));\n this.analyticsEvent(`create-${this._name.toLowerCase()}-success`);\n this._promises.new_item = null;\n }\n );\n });\n }\n return this._promises.new_item;\n }\n\n /**\n * Perform API task for the given item ID\n * @param id ID of the item\n * @param task_name Name of the task\n * @param form_data Map of data to pass to the API\n * @param method Verb to use for request\n */\n public \n task(\n id: string,\n task_name: string,\n form_data: HashMap = {},\n method: 'post' | 'get' = 'post'\n ): Promise {\n const query = toQueryString(this.injectConcierge(form_data));\n const key = `task|${id}|${task_name}|${query}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const post_data = { ...form_data, id, _task: task_name };\n const url = `${this.route(false)}/${id}/${task_name}`;\n let result: any;\n const request =\n method === 'post'\n ? this.http.post(url, post_data)\n : this.http.get(`${url}${query ? '?' + query : ''}`);\n request.subscribe(\n (d) => (result = d),\n (e) => {\n reject(e);\n this.analyticsEvent(\n `${this._name.toLowerCase()}-task-${task_name}-failed`,\n id\n );\n delete this._promises[key];\n },\n () => {\n resolve(result as U);\n this.analyticsEvent(\n `${this._name.toLowerCase()}-task-${task_name}-success`,\n id\n );\n this.timeout(key, () => delete this._promises[key], 1000);\n }\n );\n });\n }\n return this._promises[key];\n }\n\n\n /**\n * V-2\n * Perform API task for the given item ID\n * @param id ID of the item\n * @param task_name Name of the task\n * @param form_data Map of data to pass to the API\n * @param method Verb to use for request\n */\n public taskObsr( \n id: string, \n task_name: string, \n form_data: HashMap = {}, \n method: 'post' | 'get' = 'post' ):Observable{\n const query = toQueryString(this.injectConcierge(form_data));\n let engine = false;\n let cache = 1000;\n const post_data = { ...form_data, id, _task: task_name };\n const url = `${this.route(false)}/${id}/${task_name}`;\n let result: any;\n\n const request = method === 'post'\n ? this.http.post(url, post_data)\n : this.http.get(`${url}${query ? '?' + query : ''}`);\n \n return request;\n }\n\n\n /**\n * Make put request for changes to the item with the given id\n * @param id ID of the item being updated\n * @param form_data New values for the item\n * @param query_params Map of query paramaters to add to the request URL\n */\n public update(id: string, form_data: HashMap, query_params: HashMap = {}): Promise {\n const key = `update|${id}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const query = toQueryString(this.injectConcierge(query_params));\n const url = `${this.route(query_params.engine)}/${id}${query ? '?' + query : ''}`;\n let result: T = null;\n this.http.put(url, this.injectConcierge(form_data)).subscribe(\n (d) => (result = this.process(d)),\n (e) => {\n reject(e);\n this.analyticsEvent(`update-${this._name.toLowerCase()}-failed`, id);\n this._promises[key] = null;\n },\n () => {\n resolve(result);\n this.set(\n 'list',\n this.updateList(this.removeItem(this.get('list'), { id } as any), [\n result\n ])\n );\n this.analyticsEvent(`update-${this._name.toLowerCase()}-success`, id);\n this._promises[key] = null;\n }\n );\n });\n }\n return this._promises[key];\n }\n\n\n /**\n * update function version -2 - returns observable instead of promise...\n * @param id url id with respect to update api\n * @param form_data data to be update \n * @param should_inject_concierge common value to be set to add concierge: true to the query url and body\n * @param query_params Map of query paramaters to add to the request URL\n */\n public updateObsr(id: string, form_data: HashMap, should_inject_concierge: Boolean = false, query_params: HashMap = {}):Observable{\n const query = should_inject_concierge ? toQueryString(this.injectConcierge(query_params)) : false;\n const url = `${this.route(query_params.engine)}/${id}${query ? '?' + query : ''}`;\n const body = should_inject_concierge ? this.injectConcierge(form_data) : form_data;\n \n return this.http.put(url, body)\n .pipe(\n map((d: IEngineResponse | HashMap[]) => this.processApiResult(d) \n ),\n catchError((error: any, result?: T) => {\n console.log(error);\n this.analyticsEvent(`update-${this._name.toLowerCase()}-failed`, id);\n return of(error as T);\n })\n );\n\n }\n\n /**\n * update function version -2 - returns observable instead of promise...\n * @param form_data data to be update \n * @param should_inject_concierge common value to be set to add concierge: true to the query url and body\n * @param query_params Map of query paramaters to add to the request URL\n */\n public uploadSpacePhotos(apiSubRoute: string, form_data: HashMap, should_inject_concierge: Boolean = false, query_params: HashMap = {}):Observable{\n const query = should_inject_concierge ? toQueryString(this.injectConcierge(query_params)) : false;\n const url = `${this.route(query_params.engine)}/${apiSubRoute}${query ? '?' + query : ''}`;\n const body = should_inject_concierge ? this.injectConcierge(form_data) : form_data;\n\n const token = sessionStorage.length ? JSON.parse(sessionStorage.getItem('OAUTH.params')).access_token : '';\n\n const headers = new HttpHeaders({\n 'Authorization': `Bearer ${token}`,\n });\n \n const requestOptions = { headers: headers };\n\n // return this.httpClient.post(url, body, {\n // ...requestOptions \n // });\n\n return this.http.post(url, body);\n\n }\n\n /**\n * Make delete request for the given item\n * @param id ID of item\n */\n public delete(id: string, q: HashMap = {}): Promise {\n const key = `delete|${id}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const query = toQueryString(q);\n const url = `${this.route()}/${id}${query ? '?' + query : ''}`;\n this.http.delete(url).subscribe(\n (_) => null,\n (e) => {\n reject(e);\n this._promises[key] = null;\n },\n () => {\n this.set('list', this.removeItem(this.get('list'), { id } as any));\n this._promises[key] = null;\n resolve();\n }\n );\n });\n }\n return this._promises[key];\n }\n\n /**\n * Load initial data for the service\n */\n protected async load(): Promise {\n }\n\n /**\n * Post analytics event for this service\n * @param action Name of the action to post\n */\n protected analyticsEvent(action: string, label?: string) {\n // if (this.parent && this.parent.Analytics) {\n // this.parent.Analytics.track(this._name, { desc: `${this.parent.name.toLowerCase()}-${action}`, label });\n // }\n }\n\n /**\n * Convert raw API data into a valid API Object\n * @param raw_item Raw API data\n */\n protected process(raw_item: HashMap): T {\n return raw_item as T;\n }\n\n /**\n * Update recorded list of items\n * @param old_list Old list of items\n * @param list List of updated items\n * @param compareFn Function to compare items to remove duplicates\n */\n public updateList(\n old_list: T[],\n list: T[],\n compareFn: (a: T, b: T) => boolean = this._compare\n ): T[] {\n /* istanbul ignore else */\n if (!list || list.length === 0) {\n return old_list;\n }\n const new_list: T[] = [];\n const mixed_list = [...list, ...old_list];\n /* istanbul ignore else */\n if (!compareFn) {\n compareFn = this._compare;\n }\n for (const item of mixed_list) {\n const found = new_list.find((i) => compareFn(i, item));\n /* istanbul ignore else */\n if (!found) {\n new_list.push(item);\n }\n }\n return new_list;\n }\n\n /**\n * Remove the given item from the given list\n * @param list List of items\n * @param item Item to remove\n * @param compareFn Function to compare items\n */\n protected removeItem(list: T[], item: T, compareFn?: (a: T, b: T) => boolean) {\n const new_list = [];\n /* istanbul ignore else */\n if (!compareFn) {\n compareFn = this._compare;\n }\n list.forEach((i) => (compareFn(item, i) ? null : new_list.push(i)));\n return new_list;\n }\n}\n","import { SelectOption } from '../../../../ui/src/lib/options/select-option';\nimport { Building } from '../organisation/building.class';\nimport { Booking } from '../bookings/booking.class';\nimport { User } from '../users';\nimport { Space } from '../spaces';\nimport { SpaceBookingRuleOptions } from '../spaces/space.class';\nimport {\n BookingFormData,\n} from './booking.form.data';\nimport { statusFromBookings } from '../bookings/booking.utilities';\nimport { rulesForSpace } from '../bookings/space.utilities';\nimport { SpaceStatus } from '../bookings/space.types';\nimport { SpaceFeatures } from '../spaces/space.class';\nimport { HashMap } from 'libs/base/src/lib/types.utilities';\n\nexport const spaceExtraFeatureToDisplayName = (feature: SpaceFeatures) => {\n switch (feature) {\n case SpaceFeatures.VideoConference:\n return 'Video conference (VC)';\n case SpaceFeatures.ConferencePhone:\n return 'Conference phone';\n case SpaceFeatures.WirelessContentSharing:\n return 'Wireless content sharing';\n case SpaceFeatures.FlipChart:\n return 'Flip chart';\n case SpaceFeatures.Glassboard:\n return 'Glassboard';\n case SpaceFeatures.ElectronicWhiteboard:\n return 'Whiteboard';\n case SpaceFeatures.ConferenceRoom:\n return 'Conference';\n case SpaceFeatures.TeamRoom:\n return 'Team';\n case SpaceFeatures.PartnerOffice:\n return 'Partner';\n case SpaceFeatures.PhoneBooth:\n return 'Phone booth';\n case SpaceFeatures.NaturalLight:\n return 'Room with window only (natural light)';\n case SpaceFeatures.BoardRoom:\n return 'Boardroom room style';\n case SpaceFeatures.CocktailRoom:\n return 'Cocktail room style';\n case SpaceFeatures.TheatreRoom:\n return 'Theatre room style';\n case SpaceFeatures.WorkshopRoom:\n return 'Workshop room style';\n case SpaceFeatures.UShapeRoom:\n return 'U Shape room style';\n case SpaceFeatures.Miscellaneous:\n return 'Miscellaneous room style'\n case SpaceFeatures.Catering:\n return 'Rooms with catering';\n // TODO: add any special display handling here.\n default:\n return feature;\n }\n};\n\n\nexport const instantBookOption: SelectOption = {\n value: 'instant-book',\n display: 'Listing you can book without waiting for a host approval',\n shortDisplay: 'Instant book'\n};\nexport const instantBookOptions: SelectOption[] = [\n instantBookOption\n];\n\nexport const mapSpaceFeaturesToSelectOption = (f: SpaceFeatures): SelectOption => {\n const display = spaceExtraFeatureToDisplayName(f);\n return ({\n value: f,\n display,\n // Useful for long text, like that of the instant-book\n // option.\n //\n // We do not expect this option object to be modified\n // at any further point before it appears on screen -\n // although that may change in future releases.\n shortDisplay: display\n });\n};\n\nexport const roomEquipmentRequiredOptions: SelectOption[] = [\n SpaceFeatures.VideoConference,\n SpaceFeatures.ConferencePhone,\n SpaceFeatures.WirelessContentSharing,\n SpaceFeatures.FlipChart,\n SpaceFeatures.Glassboard,\n SpaceFeatures.ElectronicWhiteboard\n].map(mapSpaceFeaturesToSelectOption);\n\nexport const internalRoomTypeRequiredOptions: SelectOption[] = [\n SpaceFeatures.PartnerOffice,\n SpaceFeatures.ConferenceRoom,\n SpaceFeatures.TeamRoom,\n SpaceFeatures.PhoneBooth\n].map(mapSpaceFeaturesToSelectOption);\n\nexport const externalRoomTypeRequiredOptions: SelectOption[] = [\n SpaceFeatures.ConferenceRoom,\n SpaceFeatures.TeamRoom\n].map(mapSpaceFeaturesToSelectOption);\n\nexport const roomDetailsRequired: SelectOption[] = [\n SpaceFeatures.NaturalLight,\n SpaceFeatures.BoardRoom,\n SpaceFeatures.CocktailRoom,\n SpaceFeatures.TheatreRoom,\n SpaceFeatures.WorkshopRoom,\n SpaceFeatures.UShapeRoom,\n SpaceFeatures.Miscellaneous\n].map(mapSpaceFeaturesToSelectOption);\n\nexport const roomCateringAvailable: SelectOption[] = [\n SpaceFeatures.Catering,\n].map(mapSpaceFeaturesToSelectOption);\n\n/**\n * Defines the reason by which spaces are filtered out / missing.\n */\nexport enum SpaceFilterReason {\n /**\n * Spaces were shown and not all filtered out.\n */\n None = 'None',\n\n /**\n * If room filters are applied to the set of rooms,\n * and rooms are available if not applied by filtering.\n */\n Filters = 'Filters',\n\n /**\n * We check office rules first to determine if its been filtered.\n */\n OfficeRules = 'OfficeRules',\n\n /**\n * Fallback as the end case if no results are found.\n */\n DateTime = 'DateTime',\n\n /**\n * In case there are no results for a buiding but there are other office buidings in the same city.\n */\n AlternateBuildingsFound = 'AlternateBuildingsFound',\n\n /**\n * If room is non-bookable in the system\n */\n NonBookable = 'NonBookable'\n}\n\nexport interface FilteredSpaces {\n spaces: Space[] | undefined;\n reason: SpaceFilterReason;\n statusMap: HashMap;\n specificReason?: SpaceFilterReason;\n}\n\n/**\n * Filter spaces by filters locally. TBD in the future for real API pagination.\n *\n * @param formFilters - the set of filters to apply on the list of spaces.\n * @param spaces - the list of spaces to filter\n * @param activeForm - the landing page set of filters.\n * @param buildings - the list of buildings loaded, used to retrieve building-specific booking rules.\n * @param currentUser - the current user\n */\nexport const filterSpacesByAppliedFilters = (\n formFilters: SelectOption[],\n spaces: Space[] | undefined, // the resultshere are raw JSON Spaces, not an array of the Space class\n activeForm: BookingFormData,\n buildings: Building[] = [],\n currentUser: User | undefined,\n isStaffMap: boolean = false): FilteredSpaces => {\n const instantBook: boolean = formFilters.some(f => f.value === instantBookOption.value);\n const onlyCatering: boolean = formFilters.some(f => f.value === SpaceFeatures.Catering);\n // Drop incompatible spaces. If no filters were given, just return the array unchanged.\n const featureFilters = formFilters.filter(filter => ![instantBookOption.value, SpaceFeatures.Catering].includes(filter.value));\n const formFiltersEmpty = featureFilters.length === 0;\n\n // R--- refactor activeForm? Only after forms can handle dateTz\n // Blocked by date time input refactor\n const options: SpaceBookingRuleOptions = {\n duration: activeForm.duration,\n host: currentUser,\n dateTz: activeForm.dateTz,\n };\n let rulesCount = 0;\n let ruleReason = '';\n let excludedByFiltersCount = 0;\n const statusMap: HashMap = {};\n // console.group();\n const filteredSpaces = spaces?.map(space => space instanceof Space ? space : new Space(space)).filter(raw_space => {\n const space = new Space(raw_space); // Construct the full fledged space\n const building = buildings.find(b => space.zones.includes(b.id));\n const rules = rulesForSpace({\n time: options?.dateTz?.ms,\n duration: options.duration,\n user: options.host,\n rules: building?.booking_rules,\n space\n });\n ruleReason = rules.reason;\n let valid = !rules.hide;\n if (!valid) {\n rulesCount++;\n return false;\n }\n\n\n // Check for all the form filters ( except 'catering' )\n let hasAllFeatures: boolean;\n const internalRoomTypeFilters = [\n 'conference',\n 'meeting_room',\n 'partner',\n 'phone_booth',\n 'team_room',\n ];\n\n if (featureFilters.length === 0) {\n hasAllFeatures = true;\n } else if(featureFilters.every(f => internalRoomTypeFilters.includes(f.value))) { // If all featureFilters(selected filters) are present in internalRoomTypeFilters, make the filtering inclusive(return on first true) \n hasAllFeatures = featureFilters.some(f => space.featuresArray.includes(f.value));\n } else { // If any featureFilters(selected filters) are not present in internalRoomTypeFilters, make the filtering exclusive(return on first false)\n hasAllFeatures = featureFilters.every(f => space.featuresArray.includes(f.value));\n }\n\n const canBook = instantBook ? space.bookable : true;\n const matchesType = activeForm?.bookingType?.value === 'allRooms'\n ? true\n : space?.internal_or_external?.length\n ? space.internal_or_external === activeForm?.bookingType?.value\n : true;\n valid = valid && matchesType && (formFiltersEmpty || hasAllFeatures) && canBook;\n let hasCatering = building?.has_catering;\n if (space?.has_catering === false) {\n hasCatering = false;\n }\n // need the room catering to override.\n if (onlyCatering && !hasCatering) {\n valid = false;\n // console.log('Excluded by Catering');\n }\n\n // count this space if the only reason it can't be shown is because one of the filters excluded it\n if (!hasAllFeatures) {\n valid = false;\n // console.log('Excluded by Status');\n }\n\n const status = statusFromBookings(\n space.bookings.length ? space.bookings.map(b => new Booking(b)) : space.settings.bookings.map(b => new Booking(b)),\n space.bookable && !rules.hide,\n !rules.auto_approve,\n activeForm.dateTz,\n space\n );\n\n // only compute room availability here right now if instant book option is chosen and room still valid.\n if (instantBook && valid) {\n valid = status.status === SpaceStatus.Available;\n if (!valid) console.group('Excluded by Status');\n \n }\n\n\n /** \n * If there are rooms that are recurring but not available at all during the queried times, we filter them out from the results displayed on the page.\n * The \"Available\" status indicates whether a room can be booked during the queried times.\n * The \"isStaffMap\" flag- This helps to indicate that all occurrences of this room are booked during the queried times and are currently in use.\n * \"isStaffMap\" flag allows including such rooms in the list, which will be displayed in red on the map.\n */\n if(activeForm.is_recurrent && !space.availableOccurrences && !isStaffMap) {\n valid = false;\n }\n /** */\n\n // cache space status\n if (valid) {\n if(activeForm.is_recurrent && space.availableOccurrences && space.availableOccurrences<= space.totalOccurrences) {\n // space is available and requested for recurrence booking and few occurences are available to book then let the space select/bookable from map with limited availability\n statusMap[space.id] = !rules.auto_approve ? SpaceStatus.Requestable : SpaceStatus.Available;\n }else\n {\n statusMap[space.id] = status.status;\n }\n \n } else {\n excludedByFiltersCount++;\n }\n // console.log('Valid:', valid);\n return valid;\n });\n\n const buildingsInSameCity = buildings.filter(\n (_) =>activeForm?.location!==undefined && activeForm?.location?.length && _.city === activeForm?.location[0]?.meta?.building?.city\n ) || [];\n const alternateBuildings = buildingsInSameCity.filter(building =>\n !activeForm.location.some(locationItem =>\n locationItem.meta?.building?.id === building.id\n )\n );\n\n // console.groupEnd();\n let reason, specificReason = SpaceFilterReason.None;\n // console.log('Spaces:', filteredSpaces?.length, excludedByFiltersCount, rulesCount, ruleReason)\n if (filteredSpaces?.length === 0) {\n if (excludedByFiltersCount > 0 && (!formFiltersEmpty || onlyCatering)) {\n reason = SpaceFilterReason.Filters;\n } else if (rulesCount > 0) {\n reason = SpaceFilterReason.OfficeRules;\n } else if(alternateBuildings){\n reason = SpaceFilterReason.AlternateBuildingsFound;\n }\n else {\n reason = SpaceFilterReason.DateTime;\n }\n\n if (ruleReason === SpaceFilterReason.OfficeRules) {\n specificReason = SpaceFilterReason.OfficeRules;\n }\n }\n\n return { spaces: filteredSpaces, reason, statusMap, specificReason };\n};\n","import { BookingFormData } from './booking.form.data';\nimport {\n createAction,\n props\n} from '@ngrx/store';\nimport { Payload } from '../../../../loading/src/lib/loading.actions';;\nimport { SelectOption } from '../../../../ui/src/lib/options/select-option';\n\n\nexport const storeBookingFormData = createAction('[BookingForm] Store Form Data',\n props>>());\n\nexport const clearBookingFormData = createAction('[BookingForm] Clear Form Data');\n\nexport const storeRoomFilters = createAction('[BookingForm] Store Room Filters',\n props[]>>());\n\nexport const clearRoomFilters = createAction('[BookingForm] Clear Room Filters');\n\nexport const openBookingSurvey = createAction('[BookingSurvey] Open Survey Modal');\n","import { SelectOption } from '../../../../ui/src/lib/options/select-option';\nimport { RoomQueryOptions } from '../../../../rooms/src/lib/rooms.types';\nimport { User } from '../users/user.class';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\nimport { DaysOfWeek, RecurrencePeriod } from '../recurrence/recurrence.utils';\nimport { Building } from '../organisation';\n\nexport const DEFAULT_BOOKING_DURATION = 30;\n\nexport const internalBookingTypeOption = {\n value: 'internal',\n display: 'Internal',\n};\n\nexport const allBookingTypeOption = {\n value: 'allRooms',\n display: 'All Rooms',\n};\n\nexport const bookingTypeOptions: SelectOption[] = [\n internalBookingTypeOption,\n {\n value: 'external',\n display: 'External',\n }\n];\n\nexport const defaultRoomSizeOption = {\n value: '2',\n display: '3-9 People',\n};\n\nexport const roomSizeOptions: SelectOption[] = [\n {\n value: '1',\n display: '1-2 People',\n },\n defaultRoomSizeOption,\n {\n value: '3',\n display: '10+ People',\n }\n];\n\nexport const roomSizeOptionsKiosk: SelectOption[] = [\n ...roomSizeOptions,\n {\n value: '4',\n display: 'All Rooms',\n },\n];\n\nexport const roomCapacityToValue = (roomSize: string): number => {\n switch (roomSize) {\n case '1':\n return 1;\n case '2':\n return 3;\n case '3':\n return 10;\n case '4':\n return null;\n }\n};\n\nexport const roomMaxCapacityToValue = (roomSize: string): number => {\n switch (roomSize) {\n case '1':\n return 2;\n case '2':\n return 9;\n default:\n return null;\n }\n};\n\nexport interface BookingFormData {\n // R--- off the rails, define these \"any's\"\n id?: string;\n location: SelectOption[];\n dateTz: DateTZ;\n /**\n * Duration, in minutes.\n */\n duration: number;\n bookingType: SelectOption;\n roomSize: SelectOption;\n selectedRoom?: any;\n organiser?: SelectOption;\n title?: string;\n attendees?: any[];\n code?: string;\n notes?: string;\n head_count?: number;\n creator?: User;\n company?: any[];\n //Recurrence fields\n recurrence_period?: RecurrencePeriod;\n recurrence_interval?: number;\n recurrence_endTz?: DateTZ;\n recurrence_count?: number;\n recurrence_starts?: Array;\n recurrence_exceptions?: Array; //SHOULD BE DATETZ\n recurrence_days?: Array;\n timezone?: string;\n offset?: number;\n buildings?: Building[];\n is_recurrent?: boolean;\n is_multiroom?: boolean;\n action?: string; // helping to set staff app recurring action flag for edit/clone in the active form\n ignore?: string; // helping while editing - recurring series rooms search api call\n bookable?: boolean; // set while editing - recurring series rooms search api call\n occurrence_edits?: string[];\n opt_out?:boolean;\n nextBusinessDay?: boolean // set property if user room selection from next business day section on result page\n}\n\n/**\n * Converts form data into API query parameters.\n */\nexport const roomFormDataToQuery = (\n data: BookingFormData\n): RoomQueryOptions => {\n // remove all buildings chip from query\n const filteredLocationIds = data?.location\n .filter((l) => l.groupChild)\n .map((l) => l.value)\n .join(',');\n return {\n dateTz: data?.dateTz,\n duration: data?.duration,\n locations: filteredLocationIds,\n capacity: roomCapacityToValue(data?.roomSize?.value),\n capacity_max: roomMaxCapacityToValue(data?.roomSize?.value),\n\n is_recurrent: data?.is_recurrent,\n is_multiroom: data?.is_multiroom,\n recurrence_period: data?.recurrence_period,\n recurrence_interval: data?.recurrence_interval,\n recurrence_endTz: data?.recurrence_endTz,\n recurrence_count: data?.recurrence_count,\n recurrence_starts: data?.recurrence_starts,\n recurrence_exceptions: data?.recurrence_exceptions, //SHOULD BE DATETZ\n recurrence_days: data?.recurrence_days,\n timezone: data?.timezone,\n offset: data?.offset,\n buildings: data?.buildings,\n bookable: data?.bookable,\n ignore: data?.ignore\n };\n};\n","import { BookingFormState } from './booking.form.types';\nimport {\n DEFAULT_BOOKING_DURATION,\n defaultRoomSizeOption,\n internalBookingTypeOption\n} from './booking.form.data';\nimport { DateNow } from '@mckinsey-converge/date-tz';\n\nconst now = DateNow(new Date())\n\nexport const defaultTestBookingForm = (): BookingFormState => ({\n activeForm: {\n dateTz: now,\n duration: 2 * DEFAULT_BOOKING_DURATION,\n location: [],\n bookingType: internalBookingTypeOption,\n roomSize: defaultRoomSizeOption\n },\n activeFormFilters: []\n});\n","import { createSelector } from '@ngrx/store';\nimport {\n RoomStoreState\n} from '../../../../rooms/src/lib/rooms.types';\nimport {\n loadLaterThatDayResults,\n loadNextDayResults,\n loadRoomsForResults,\n roomStateSelector,\n loadByIdResults,\n loadDiffSizeResults,\n loadRoomsForResultsMap\n} from '../../../../rooms/src/lib/rooms.actions';\nimport {\n loadHomepageBookingsResults,\n loadUpcomingBookingsResults,\n loadPastBookingsResults,\n loadCancelledBookingsResults,\n loadBookingByIdResults,\n bookingStateSelector\n} from '../../../../bookings/src/lib/bookings.actions';\nimport { Building } from '../organisation/building.class';\nimport { BuildingStoreState } from '../../../../buildings/src/lib/buildings.types';\nimport { selectLoadBuildingsSuccess } from '../../../../buildings/src/lib/buildings.actions';\nimport { Space } from '../spaces/space.class';\nimport { User } from '../users/user.class';\nimport { selectCurrentUser } from '../../../../user/src/lib/user.actions';\nimport { UserStoreState } from '../../../../user/src/lib/user.types';\nimport { LoadingModel } from '../../../../loading/src/lib/loading.model';\nimport { SelectOption } from '../../../../ui/src/lib/options/select-option';\n\nimport {\n SpaceFilterReason,\n filterSpacesByAppliedFilters,\n FilteredSpaces\n} from './booking-filter.utils';\nimport {\n BookingFormData,\n internalBookingTypeOption,\n} from './booking.form.data';\nimport {\n BookingFormState,\n BookingStoreState,\n} from './booking.form.types';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\nimport { BookingAction, RecurrencePeriod, SeriesAction } from '../recurrence/recurrence.utils';\n\n\nexport const selectBookingFormsData =\n (state: BookingStoreState | RoomStoreState | BuildingStoreState | UserStoreState) =>\n (state as any).bookingForm as BookingFormState;\n\nexport const selectActiveForm = createSelector(selectBookingFormsData, state => {\n // Recreate because serialized form dateTz doesn't have DateTZ class methods\n if (!state.activeForm?.dateTz) {\n return state.activeForm\n }\n const { date, is_local_tz, building_tz} = state.activeForm?.dateTz;\n const endTzDate = state.activeForm?.recurrence_endTz?.date;\n const recurrence_endTz = endTzDate ? {\n recurrence_endTz : new DateTZ({ date: endTzDate.valueOf(), is_local_tz, building_tz })\n } : {};\n\n const recurrence_starts = state.activeForm?.recurrence_starts\n\t\t\t? {\n\t\t\t\t\trecurrence_starts: state.activeForm?.recurrence_starts.map( el =>\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// at final step of booking creation process recurrence_start becomes Array which need to be Array\n\t\t\t\t\t\t\t// To Do: Refactor - apps/staff/src/app/booking/booking-create/booking-form-base.component.ts lno: 186\n\t\t\t\t\t\t\treturn new DateTZ({ date: typeof el === 'number' ? el * 1000 : el.date.valueOf(), is_local_tz, building_tz })\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t: {};\n\n\n const recEditingSearchPayload = (state.activeForm.action === SeriesAction.EDIT && state.activeForm.is_recurrent)\n\t\t\t?\n\t\t {\n\t\t\t\tid: state.activeForm.id,\n\t\t\t\tignore: state.activeForm.ignore,\n\t\t\t\tbookable: state.activeForm.bookable\n\t\t\t}\n\t\t\t: {};\n\n\n\n\n return {\n ...state.activeForm,\n dateTz: new DateTZ({ date: date.valueOf(), is_local_tz, building_tz }),\n ...recurrence_endTz,\n ...recurrence_starts,\n\t\t\t\t...recEditingSearchPayload\n }\n});\n\nexport const selectBookingType = createSelector(selectActiveForm,\n (form) => form?.bookingType);\n\nexport const selectBookingLocations = createSelector(selectActiveForm,\n (form) => (form?.location || []).filter(f => !f.groupHeader));\n\nexport const selectIsInternal = createSelector(selectBookingType,\n (type) => type?.value === internalBookingTypeOption.value);\n\nexport const selectFormFilters = createSelector(selectBookingFormsData,\n (state) => state.activeFormFilters || []);\n\nconst selectRoomResultsFromState = createSelector(roomStateSelector,\n loadRoomsForResults.selectors.model);\n\nconst selectRoomResultsFromState_map = createSelector(roomStateSelector,\n loadRoomsForResultsMap.selectors.model);\n\nconst selectLaterThatDayResultsFromState = createSelector(roomStateSelector,\n loadLaterThatDayResults.selectors.model);\nconst selectNextDayResultsFromState = createSelector(roomStateSelector,\n loadNextDayResults.selectors.model);\nconst selectByIdResultsFromState = createSelector(roomStateSelector,\n loadByIdResults.selectors.model);\nconst selectDiffSizeResultsFromState = createSelector(roomStateSelector,\n loadDiffSizeResults.selectors.model);\n\nexport const selectHomepageBookingsResultsFromState = createSelector(bookingStateSelector,\n loadHomepageBookingsResults.selectors.model);\nexport const selectUpcomingBookingsResultsFromState = createSelector(bookingStateSelector,\n loadUpcomingBookingsResults.selectors.model);\nexport const selectPastBookingsResultsFromState = createSelector(bookingStateSelector,\n loadPastBookingsResults.selectors.model);\nexport const selectCancelledBookingsResultsFromState = createSelector(bookingStateSelector,\n loadCancelledBookingsResults.selectors.model);\nexport const selectBookingByIdResultsFromState = createSelector(bookingStateSelector,\n loadBookingByIdResults.selectors.model);\n\n/**\n * Wraps {@link filterSpacesByAppliedFilters} with {@link LoadingModel} interop.\n * This will only filter data if there is data to filter, and returns a success {@link LoadingModel}.\n * The \"isStaffMap\" flag- This helps to indicate that all occurrences of this room are booked during the queried times and are currently in use.\n * \"isStaffMap\" flag allows including such rooms in the list, which will be displayed in red on the map.\n */\nconst filterSpacesByAppliedFiltersIfSuccess = (\n results: LoadingModel,\n formFilters: SelectOption[],\n activeForm: BookingFormData,\n buildings: Building[] | undefined,\n currentUser: User | undefined,\n isStaffMap: boolean = false): LoadingModel => {\n const data = results.optionalSuccess;\n\n // don't filter model if no success found\n return !activeForm ? results.mutate({\n spaces: data, // the result here is a raw JSON Space, not the Space class\n reason: SpaceFilterReason.None,\n statusMap: {}\n }) : results.mutate(\n filterSpacesByAppliedFilters(formFilters, data, activeForm, buildings || activeForm.buildings, currentUser, isStaffMap));\n};\n\nexport const selectFilteredResults = createSelector(selectRoomResultsFromState,\n selectFormFilters,\n selectActiveForm,\n selectLoadBuildingsSuccess,\n selectCurrentUser,\n filterSpacesByAppliedFiltersIfSuccess);\n\nexport const selectMapFilteredResults = createSelector(selectRoomResultsFromState_map,\n selectActiveForm,\n selectLoadBuildingsSuccess,\n selectCurrentUser,\n (results, activeForm, buildings, currentUser, isStaffMap) => filterSpacesByAppliedFiltersIfSuccess(results, [], activeForm, buildings, currentUser, true));\n\nexport const selectFilteredLaterDayResults = createSelector(selectLaterThatDayResultsFromState,\n selectFormFilters,\n selectActiveForm,\n selectLoadBuildingsSuccess,\n selectCurrentUser,\n filterSpacesByAppliedFiltersIfSuccess);\n\nexport const selectFilteredNextDayResults = createSelector(selectNextDayResultsFromState,\n selectFormFilters,\n selectActiveForm,\n selectLoadBuildingsSuccess,\n selectCurrentUser,\n filterSpacesByAppliedFiltersIfSuccess);\n\n\nexport const selectFilteredByIdResults = createSelector(selectByIdResultsFromState,\n selectActiveForm,\n selectLoadBuildingsSuccess,\n selectCurrentUser,\n (results, activeForm, buildings, currentUser) => filterSpacesByAppliedFiltersIfSuccess(results, [], activeForm, buildings, currentUser));\n\nexport const selectFilteredDiffSizeResults = createSelector(selectDiffSizeResultsFromState,\n selectFormFilters,\n selectActiveForm,\n selectLoadBuildingsSuccess,\n selectCurrentUser,\n filterSpacesByAppliedFiltersIfSuccess);\n\n/**\n * Maps selected options by loaded buildings.\n */\nexport const selectSelectedBuildingOptions = createSelector(\n selectBookingLocations,\n selectLoadBuildingsSuccess,\n (locations, buildings) => (locations\n .map(l => buildings?.find(b => b.id === l.value))\n .filter(f => !!f) as Building[])\n);\n\n","import { Building, BuildingCity } from '../organisation/building.class';\nimport { Booking } from '../bookings/booking.class';\nimport { BuildingLevel } from '../organisation/level.class';\nimport { Space } from '../spaces/space.class';\nimport { SpacesService } from '../spaces/spaces.service';\nimport {\n timezoneDisplay,\n timezoneNameToDate,\n unique,\n ImageDirective,\n} from '@mckinsey-converge/base';\nimport { SelectOption } from '../../../../ui/src/lib/options/select-option';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n/**\n * If more than 3 are selected, we truncate location display.\n */\nconst MAX_ABBREV_LOCATIONS = 3;\n\nexport const mapBuildingToSelectOption = (\n city: string,\n building: Building\n): SelectOption => ({\n display: `${building.name} ${timezoneDisplay(\n timezoneNameToDate(building.timezone)\n )}`,\n dropdownOverride: `${building.code}-${building.name}, ${building.address}`,\n value: building.id,\n groupId: city,\n groupChild: true,\n shortDisplay: `${building.name} ${timezoneDisplay(\n timezoneNameToDate(building.timezone)\n )}`,\n meta: { building, city },\n});\n\nexport const mapCityToAllSelectOption = (\n city: BuildingCity\n): SelectOption => ({\n display: `${city.name} (All Offices) ${timezoneDisplay(\n timezoneNameToDate(city.timezone)\n )}`,\n value: city.name,\n groupHeader: true,\n groupId: city.name,\n shortDisplay: `${city.name} (All Offices) ${timezoneDisplay(\n timezoneNameToDate(city.timezone)\n )}`,\n meta: { city },\n});\n\n/**\n * Flattens a map of {@link BuildingCity} to {@link Building} array into a list of {@link SelectOption}.\n * @param grouped The grouping\n */\nexport const flattenDisplayOffices = (\n grouped: Map\n) => {\n const options: SelectOption[] = [];\n grouped.forEach((value, key) => {\n options.push(mapCityToAllSelectOption(key));\n value.forEach((b) =>\n options.push(mapBuildingToSelectOption(key.name, b))\n );\n });\n return options;\n};\n\n/**\n * This method will either add or remove a selected option from the selectedOptions list based on\n * these conditions:\n * 1. If the option EXISTS in the list AND is a groupHeader, de-select all of its children.\n * 2. If the option EXISTS in the list AND is a groupChild, remove it and its associated header from the list.\n * 3. If the option does NOT EXIST in the list AND is a groupHeader, select all other children.\n * 4. If the option does NOT EXIST in the list AND is a groupChild, add it to the list.\n *\n * Special note regarding item 4:\n * 4a. If that selection completes the children selection, select its associated header as well.\n */\nexport const toggleSelectedByGroup = (\n options: SelectOption[],\n selectedOptions: SelectOption[],\n option: SelectOption\n) => {\n if (selectedOptions.find((s) => s.value === option.value)) {\n return selectedOptions.filter((s) => {\n let filter = s.value !== option.value;\n // if group header, also remove any option that is the child of it.\n if (option.groupHeader) {\n filter =\n filter &&\n (!s.groupChild ||\n (s.groupChild && s.groupId !== option.groupId));\n } else if (option.groupChild) {\n // if child removing, remove the associated header.\n filter =\n filter &&\n (!s.groupHeader ||\n (s.groupHeader && s.groupId !== option.groupId));\n }\n return filter;\n });\n }\n // option does NOT EXIST\n // if adding header, add the other children to the selected list, ensuring no dupes.\n if (option.groupHeader) {\n const toSelect = options.filter(\n (v) =>\n v.groupChild &&\n v.groupId === option.value &&\n !selectedOptions.find((selected) => selected.value === v.value)\n );\n return [...selectedOptions, option, ...toSelect];\n }\n // add group child, add the group header if all satisfied\n const newGroup = [...selectedOptions, option];\n\n // check if we have selected all children from options by filtering down by city and checking if\n // they're in the selected options list.\n const remainingChildrenInGroup = options.filter(\n (o) =>\n o.groupChild &&\n o.groupId === option.groupId &&\n !newGroup.find((ng) => ng.value === o.value)\n );\n // if we dont have remaining children, add the group\n if (remainingChildrenInGroup.length === 0) {\n return [\n ...newGroup,\n options.find((o) => o.groupHeader && o.groupId === option.groupId),\n ];\n }\n return newGroup;\n};\n\n/**\n * If the list of locations are larger than {@link MAX_ABBREV_LOCATIONS}, then truncate\n * and display the remaining count.\n */\nexport const truncateLocationList = (\n locations: readonly SelectOption[]\n): string => {\n // comma separate the locations\n let truncatedLocations = [...locations];\n const shouldTruncate = locations.length > MAX_ABBREV_LOCATIONS;\n if (shouldTruncate) {\n truncatedLocations = truncatedLocations.splice(0, MAX_ABBREV_LOCATIONS);\n }\n let display = truncatedLocations\n .map((l) => l.shortDisplay || l.display)\n .join(', ');\n if (shouldTruncate) {\n display += `...(${locations.length})`;\n }\n return display;\n};\n\nexport const mapBuildingLevelToOption = (\n level?: BuildingLevel\n): SelectOption =>\n level\n ? {\n value: level.id,\n display: level.name,\n }\n : undefined;\n\n/**\n * Returns all levels included with the building, deduped.\n * @param buildings\n */\nexport const flattenBuildingsWithLevels = (buildings: Building[]) => {\n const flattenedLevels = unique(\n buildings.reduce((next: BuildingLevel[], building: Building) => {\n next.push(...building.levels);\n return next;\n }, []),\n 'id'\n );\n return {\n flattenedLevels,\n buildings,\n };\n};\n\n/** Gets route to image placeholder if room image isn't found */\n\nexport const placeholderRoute = (num: number): string => {\n let index: number;\n if (num <= 3) {\n index = num;\n } else if (num % 3 === 0) {\n index = 3;\n } else {\n index = 1;\n }\n return `assets/img/rooms/placeholder-${index}.png`;\n};\n\n/**\n * Method takes the rootFolderURL and fileSlug to create an array of three images\n * that should exist. If a room image exists, it replaces the placehoder image.\n */\nexport const setupRoomImages = (\n componentReference: ImageDirective,\n image_positions: number[],\n rootFolderURL: string,\n fileSlug: string,\n imagesLoaded: boolean = false\n): void => {\n let foundImages: any[] = image_positions.map((i) =>\n i ? { path: placeholderRoute(i) } : false\n );\n image_positions.forEach((n) => {\n const desiredImageName = `${rootFolderURL}${fileSlug}-part-${n}.png`;\n const desiredImage = location.pathname.includes('concierge') ? `${location.origin}/staff/${desiredImageName}` : desiredImageName;\n if (!imagesLoaded) {\n const tester = new Image();\n tester.onload = () => {\n // Will never run on unit test\n foundImages[n - 1] = { path: desiredImage };\n componentReference.foundImages = [...foundImages.slice()];\n componentReference?.loadImages && componentReference?.loadImages.next([...foundImages.slice()]);\n };\n tester.src = desiredImage;\n }\n\n // Force valid image output on unit test\n if (imagesLoaded) {\n foundImages[n - 1] = { path: desiredImage };\n componentReference.foundImages = foundImages.slice();\n }\n });\n};\n\nexport const bookingStatusDetails = (booking: Booking) => {\n const now = DateNow(new Date());\n let image = '';\n let text = '';\n let title = '';\n\n if (booking?.status) {\n const status = now > booking.endDateTz ? 'expired' : booking.status;\n switch (status) {\n case 'unavailable':\n image = 'assets/icon/booking_cancelled.svg';\n title = 'Unavailable';\n text = 'Unavailable';\n break;\n case 'declined':\n image = 'assets/icon/booking_cancelled.svg';\n title = 'Cancelled';\n text = 'Cancelled';\n break;\n case 'cancelled':\n image = 'assets/icon/booking_cancelled.svg';\n title = 'Cancelled';\n text = 'Cancelled';\n break;\n case 'expired':\n image = 'assets/icon/booking_expired.svg';\n title = 'Expired';\n text = 'Expired';\n break;\n case 'tentative':\n image = 'assets/icon/booking_pending.svg';\n title = 'Requested';\n text = 'Pending';\n break;\n case 'accepted':\n image = 'assets/icon/booking_confirmed.svg';\n title = 'Confirmed';\n text = 'Confirmed';\n break;\n case 'approved':\n image = 'assets/icon/booking_confirmed.svg';\n title = 'Confirmed';\n text = 'Confirmed';\n break;\n default:\n // TODO\n image = 'assets/icon/booking_expired.svg';\n title = 'Expired';\n text = 'Expired';\n break;\n }\n }\n return { text, title, image };\n};\n\nexport const roomHasCateringHours = (building: Building, space: Space) => {\n let hasCatering = building\n ? building.has_catering && building.catering_hours\n : false;\n // Room catering status as false overrides building status\n if (space?.has_catering === false) {\n hasCatering = false;\n }\n return hasCatering;\n};\n\nexport const cateringAllowed = (booking: Booking, building: Building) => {\n const status = bookingStatusDetails(booking);\n const disallowedStatus = ['declined', 'cancelled', 'expired'].includes(\n status.text\n );\n const opens = building?.catering_hours?.start;\n const closed = building?.catering_hours?.end;\n\n if (disallowedStatus) {\n return false;\n }\n\n if (typeof opens === 'undefined' || typeof closed === 'undefined') {\n return false;\n }\n\n // Catering time could be a decimal so convert to a date\n const openMinutes = opens * 60;\n const closeMinutes = closed * 60;\n\n const startOfDay = booking.startDateTz.startOfValue('day');\n const cateringOpenTime = startOfDay.addValue({ minutes: openMinutes });\n const cateringCloseTime = startOfDay.addValue({ minutes: closeMinutes });\n\n if (\n cateringOpenTime.ms <= booking.startDateTz.ms ||\n cateringCloseTime.ms > booking.startDateTz.ms\n ) {\n // Booking ends before catering opens\n if (booking.endDateTz.ms <= cateringOpenTime.ms) {\n return false;\n }\n // Booking starts after catering closes\n if (booking.startDateTz.ms > cateringCloseTime.ms) {\n return false;\n }\n\n // Start time is OK\n if (booking.startDateTz.ms > DateNow(new Date()).ms) {\n // Due to COVID, no orders are available once a meeting begins.\n return true;\n }\n }\n\n return false;\n};\n\nexport const checkCollisions = (\n service: SpacesService,\n booking: Booking\n): Promise => {\n return new Promise((resolve, reject) => {\n\n let availabilityParams: {\n room_ids: string;\n dateTz: DateTZ;\n duration: number;\n setup: number;\n breakdown: number;\n hide_bookings: boolean;\n [key: string]: any;\n } = {\n room_ids: booking.space.id,\n dateTz: booking.startDateTz,\n duration: booking.duration,\n setup: booking.setup[booking.space.email],\n breakdown: booking.breakdown[booking.space.email],\n hide_bookings: false,\n };\n\n if (booking.recurrence_type === \"master\" || booking.recurrence_type === null) {\n availabilityParams = {\n ...availabilityParams,\n ignore: booking?.icaluid,\n recurrence_count: booking?.recurrence_count,\n recurrence_period: booking?.recurrence_period,\n recurrence_endTz: booking?.recurrence_endTz,\n recurrence_interval: booking?.recurrence_interval,\n recurrence_starts: booking?.recurrence_starts,\n is_recurrent: booking?.is_recurrent,\n recurrence_days: booking?.recurrence_days\n } as typeof availabilityParams;\n }\n\n service\n .available(\n availabilityParams,\n null,\n false\n )\n .then(\n (list) => {\n const space = list.length ? list[0] : null;\n if (space) {\n if (!space.bookable) return reject('Has conflict');\n const setup = booking?.setup[space?.email] || 0;\n const breakdown = booking?.breakdown[space?.email] || 0;\n const start_time = booking?.startDateTz.seconds - setup;\n const end_time = booking.endDateTz.seconds + breakdown;\n\n const bookings = space.settings.bookings;\n // console.log('Bookings:', bookings);\n // Compare the existing bookings to see if any truely conflict.\n if (bookings.length) {\n const has_conflict = bookings.find(bkn => {\n const b_setup = bkn.setup[space.email] || 0;\n const b_breakdown = bkn.setup[space.email] || 0;\n const start = (bkn.start_epoch || bkn.start) - b_setup;\n const end = (bkn.end_epoch || bkn.end) + b_breakdown;\n return (\n (end_time > start && end_time <= end) || // Booking ends during the meeting\n (start_time >= start && start_time < end) || // Booking starts during a meeting\n (start_time <= start && end_time >= end) // Booking overlaps entire meeting\n ) && \n ( \n bkn.id !== booking.id \n || \n ( !!booking.is_recurrent && (booking.recurrence_type === \"master\" || booking.recurrence_type === null ) ) \n ?\n bkn.recurrence_master_id !== booking.id\n :\n false\n \n )\n\n\n\n });\n // Conflicts found, reject\n if (has_conflict) return reject('has booking conflict');\n }\n return resolve(space.bookable);\n }\n reject('space not found');\n },\n () => reject('available error')\n );\n });\n};\n\nexport const getStatusErrorMessage = (status?: number) => {\n let msg = '';\n switch (status) {\n\t\t\tcase 400:\n\t\t\t\tmsg = 'Apologies, the booking cannot be finalized because the current time has exceeded the scheduled start time for this booking. Please try again.';\n\t\t\t\tbreak;\n\t\t\tcase 403:\n\t\t\t\tmsg = 'Your do not have permission to update this booking.';\n\t\t\t\tbreak;\n\t\t\tcase 409:\n\t\t\t\tmsg = 'Sorry, your booking time conflicts with another booking.';\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tmsg = 'Your booking failed to update, please try again';\n }\n return msg;\n};\n","export * from './room-results/room-results.viewmodel'\nexport * from './booking-filter.utils'\nexport * from './booking.form.actions'\nexport * from './booking.form.data'\nexport * from './booking.form.spec-helpers'\nexport * from './booking.form.types'\nexport * from './booking.selectors'\nexport * from './booking.utils'","import { Space } from '../../spaces/space.class';\nimport { BuildingLevel } from '../../organisation/level.class';\nimport { Building } from '../../organisation/building.class';\n\nexport class RoomResultsViewModel {\n\n public levelDisplay: string;\n public title: string;\n public office: string;\n public capacity: string;\n\n constructor(public space: Space,\n public level?: BuildingLevel,\n public building?: Building) {\n\n this.levelDisplay = `Level ${this.space?.level?.short_name}`;\n this.title = this.space.local_name;\n this.office = this.building ? `(${this.building?.code}) ${this.building?.name}` : '';\n this.capacity = `Capacity: ${this.space.capacity} people`;\n }\n}\n\n/**\n * For each result from results, we find its level and building from the lists.\n */\nexport const mapResultsToViewModels = (results: Space[],\n flattenedLevels: BuildingLevel[],\n buildings: Building[]): RoomResultsViewModel[] =>\n results.map((r: Space) => {\n const level = flattenedLevels.find(l => r.zones.includes(l.id));\n const building = buildings.find(b => r.zones.includes(b.id));\n return new RoomResultsViewModel(\n r,\n level,\n building\n );\n });\n","import { Injectable, NgZone } from '@angular/core';\nimport { BehaviorSubject, combineLatest, of, Observable } from 'rxjs';\nimport {\n catchError,\n debounceTime,\n filter,\n first,\n map,\n shareReplay,\n switchMap,\n} from 'rxjs/operators';\nimport { BaseClass } from '@mckinsey-converge/base';\nimport { replaceBookings, timePeriodsIntersect } from './booking.utilities';\nimport { SpacesService } from '../spaces/spaces.service';\nimport { Booking } from '../bookings/booking.class';\nimport { Space } from '../spaces/space.class';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { OrganisationService } from '../organisation/organisation.service';\n\nexport type BookingType =\n | 'internal'\n | 'client'\n | 'external'\n | 'setup'\n | 'training'\n | 'interview'\n | 'declined';\n\nexport interface BookingFilters {\n /** List of zone ids to get bookings for */\n zone_ids?: string[];\n space_emails?: string[];\n hide_type?: BookingType[];\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BookingStateService extends BaseClass {\n /** List of bookings */\n private _poll = new BehaviorSubject(false);\n /** List of bookings */\n private _long_poll = new BehaviorSubject<'month' | ''>('');\n private _long_poll_week = new BehaviorSubject<'week' | ''>('');\n /** List of bookings */\n private _bookings = new BehaviorSubject([]);\n /** List of meeting count per date */\n public _noOfMeetings = new BehaviorSubject<{}>({});\n /** Filter details for bookings */\n private _filters = new BehaviorSubject({});\n /** Currently active date */\n private _dateTz = new BehaviorSubject(DateNow(new Date()));\n /** Currently displayed zone */\n private _zone = new BehaviorSubject(' ');\n /** Whether booking data is being loaded */\n private _loading = new BehaviorSubject(false);\n /** Observable for filter and booking list changes */\n private _state = combineLatest(\n this._bookings,\n this._filters,\n this._dateTz,\n this._zone\n );\n\n /** Observable for list of bookings */\n public readonly bookings = this._bookings.asObservable();\n /** Observable for active date */\n public readonly dateTz = this._dateTz.asObservable();\n /** Observable for active zone */ // R-- zone was this._date.asObservable(); this looks like a mistake but it exists from the beginning of time\n public readonly zone = this._dateTz.asObservable();\n /** Observable for loading state of bookings */\n public readonly loading = this._loading.asObservable();\n\n public get booking_date() {\n // When this class is initialized this._dateTz is local timezone\n return this._dateTz.value;\n }\n\n public get timezone() {\n return localStorage.getItem('CONCIERGE.timezone');\n }\n\n /** Obsevable for filtered list of bookings */\n public readonly filtered = this._state.pipe(\n map((state) => {\n const bdTz = this.timezone\n ? new DateTZ({\n date: this.booking_date.ms,\n is_local_tz: false,\n building_tz: this.timezone,\n })\n : this.booking_date;\n const startTz = bdTz.startOfValue('day');\n const endTz = startTz.addValue({}).endOfValue('day');\n return this.filterBookings(startTz, endTz);\n }),\n shareReplay(1)\n );\n\n /** Obsevable for filtered list of bookings of the active week */\n public readonly filtered_week = this._state.pipe(\n map(() => {\n // Tested to be valid in building time now.\n const bd = this.timezone\n ? new DateTZ({\n date: this.booking_date.ms,\n is_local_tz: false,\n building_tz: this.timezone,\n })\n : this.booking_date;\n const start = bd.startOfValue('week').startOfValue('day');\n const end = this.getEndOfWeek(bd);\n return this.filterBookings(start, end);\n })\n );\n\n /** Obsevable for filtered list of bookings for active month */\n public readonly filtered_month = this._state.pipe(\n map(() => {\n const start = this.booking_date.startOfValue('month');\n const end = this.booking_date.endOfValue('month');\n return this.filterBookings(start, end);\n })\n );\n\n /** Active filters */\n public get filters() {\n return this._filters.getValue();\n }\n\n constructor(\n private _org: OrganisationService,\n private _spaces: SpacesService,\n private ngZone: NgZone,\n ) {\n super();\n\n this._org.initialised.pipe(first((_) => _)).subscribe(() => {\n // Just to get the timezone correct\n this._dateTz.next(\n new DateTZ({\n date: this._dateTz.value.ms,\n is_local_tz: false,\n building_tz: this._org.building?.timezone,\n })\n );\n });\n\n /** Generate observable for updating bookings */\n const search = combineLatest(this._poll, this._zone, this._dateTz).pipe(\n filter((i) => !!i[0]),\n debounceTime(500),\n switchMap(() => {\n const fzone = this._zone.getValue();\n if (!fzone) {\n return of([]);\n }\n this._loading.next(true);\n const start = this.booking_date.startOfValue('day');\n const end = start.endOfValue('day');\n return this._spaces.queryBooking({\n zone_ids: fzone,\n available_from: start.seconds,\n available_to: end.seconds,\n });\n }),\n catchError(() => of([]))\n );\n\n const search_long_week = combineLatest(\n this._long_poll_week,\n this._zone,\n this._dateTz\n ).pipe(\n filter((i) => !!i[0]),\n debounceTime(500),\n switchMap((props) => {\n const type = props[0];\n const fzone = props[1];\n const dateTz = props[2];\n if (!fzone) {\n return of([]);\n }\n this._loading.next(true);\n return this.querySpace(type, fzone, dateTz, false);\n }),\n catchError((e) => { \n return of([]);\n })\n );\n\n //TO DO: make sure both spaces have same booking\n /** Subscribe to update observable */\n search.subscribe((space_list) => {\n this.processBookings(space_list);\n this._loading.next(false);\n });\n search_long_week.subscribe((space_list) => {\n this.processBookings(space_list, this._long_poll_week.getValue() as any);\n this._loading.next(false);\n });\n }\n\n /**\n * Function to build\n */\n private buildSpaceLongQuery(dailyCount: boolean = false): Observable {\n return combineLatest(\n this._long_poll,\n this._zone,\n this._dateTz\n ).pipe(\n filter((i) => !!i[0]),\n debounceTime(500),\n switchMap((props) => {\n const type = props[0];\n const fzone = dailyCount ? this._org.building.id : props[1];\n const dateTz = props[2];\n if (!fzone) {\n return of([]);\n }\n this._loading.next(true);\n return this.querySpace(type, fzone, dateTz, dailyCount);\n }),\n catchError((e) => { \n return of([]);\n })\n );\n }\n\n private querySpace(type: string, fzone: string, dateTz: DateTZ, dailyCount: boolean = false) : Observable | Observable{\n const start = () => {\n const s = dateTz;\n if (type === 'week') {\n return s.startOfValue('week');\n } else {\n return s.startOfValue('month');\n }\n };\n\n const end = () => {\n const e = start();\n if (type === 'week') {\n /**\n * To Do: date-tz.class.ts endOfValue subtracts 1 day from end of week for 7 days a week type which returns Friday instead of Saturday\n * below is the adjustment -\n */\n return e.addValue({ days: 1 }).endOfValue('week');\n } else {\n return e.endOfValue('month');\n }\n /**\n * R--- when testing March 2022 London offices, the month is an hour short.\n * Is this a Luxon bug or London DST?\n */\n };\n\n // dates here are ok\n return this._spaces.queryBooking({\n zone_ids: fzone,\n available_from: start().seconds,\n available_to: end().seconds,\n ...(dailyCount) ? { daily_count: true } : ''\n });\n }\n\n\n public getDailyMeetingCount() : void {\n this._long_poll.next('month');\n this.buildSpaceLongQuery(true).subscribe((counts) => {\n this._noOfMeetings.next(counts);\n this._loading.next(false);\n });\n }\n\n /**\n * Update the booking filters\n * @param details\n */\n public setFilters(details: BookingFilters) {\n this._filters.next(details);\n }\n\n /**\n * Update the booking date\n * @param details\n */\n public setDate(dateTz: DateTZ) {\n this._dateTz.next(dateTz);\n }\n\n /**\n * Update the booking's zone\n * @param details\n */\n public setZone(zone: string) {\n this._zone.next(zone);\n }\n\n /**\n * update day view once\n */\n public pollOnce(){\n this._poll.next(true);\n }\n \n /**\n * Start polling to update bookings\n * @param delay Duration between polling events in milliseconds\n */\n public startPolling(delay: number = 30 * 1000) {\n this._poll.next(true);\n this.ngZone.runOutsideAngular(() => {\n this.interval('polling', () => this._poll.next(true), delay);\n });\n }\n\n /**\n * Start polling to update bookings\n * @param delay Duration between polling events in milliseconds\n */\n public startPollingWeek(delay: number = 4 * 30 * 1000 ) {\n this._long_poll_week.next('week');\n this.ngZone.runOutsideAngular(() => {\n this.interval(\n 'polling_long',\n () => this._long_poll_week.next('week'),\n delay\n );\n });\n }\n /**\n * Start polling to update bookings\n * @param delay Duration between polling events in milliseconds\n */\n public startPollingEveryFiveMin(delay: number = 60 * 1000) {\n this._poll.next(true);\n this.ngZone.runOutsideAngular(() => {\n this.interval('polling', () => this._poll.next(true), delay);\n });\n }\n \n /**\n * Start polling to update bookings\n * @param delay Duration between polling events in milliseconds\n */\n public startPollingMonth(delay: number = 5 * 60 * 1000) {\n this._long_poll.next('month');\n this.ngZone.runOutsideAngular(() => {\n this.interval(\n 'polling_long',\n () => this._long_poll.next('month'),\n delay\n );\n });\n }\n\n\n /**\n * Stop polling to update bookings;\n */\n public stopPolling() {\n this._poll.next(false);\n this.clearInterval('polling');\n this._long_poll.next('');\n this.clearInterval('polling_long');\n }\n\n public updateRoomList() {\n this._spaces.updateRoomList();\n }\n\n /**\n * Add booking to bookings listing\n * @param booking\n */\n public add(booking: Booking) {\n const bookings = this._bookings.getValue();\n const new_bookings = bookings.concat([booking]);\n this._bookings.next(new_bookings);\n }\n\n /**\n * Update booking in the bookings list\n * @param booking\n */\n public replace(booking: Booking) {\n const bookings = this._bookings.getValue();\n const new_bookings = bookings\n .filter(\n (bkn) =>\n bkn.icaluid !== booking.icaluid && bkn.id !== booking.id\n )\n .concat([booking]);\n this._bookings.next(new_bookings);\n }\n\n /**\n * Remove booking in the bookings list\n * @param booking\n */\n public remove(booking: Booking) {\n const bookings = this._bookings.getValue();\n const new_bookings = bookings.filter(\n (bkn) => bkn.icaluid !== booking.icaluid\n );\n this._bookings.next(new_bookings);\n }\n\n public attentToDelete(\n booking: Booking,\n action: 'series' | 'booking' = 'booking',\n undo: boolean = false\n ) {\n const bookings = this._bookings.getValue();\n const attempted_to_delete = ((action) => {\n return (bkg: Booking) => {\n switch (action) {\n case 'booking': {\n const booking_master = bookings.find(\n (bkn) => bkn.icaluid === booking.icaluid\n );\n if (!booking_master) return false;\n return bkg.id === booking.id;\n }\n case 'series': {\n const booking_master = bookings.find(\n (bkg) =>\n bkg.id ===\n (booking.recurrence_type === 'occurrence'\n ? booking.recurrence_master_id\n : booking.id)\n );\n if (!booking_master) return false;\n return (\n booking_master.id === bkg.id ||\n bkg.recurrence_master_id === booking_master.id\n );\n }\n default:\n false;\n }\n };\n })(action);\n\n const new_bookings = [...bookings].map((bkg) => {\n if (!undo && attempted_to_delete(bkg)) {\n bkg.attempted_to_delete = action;\n }\n\n if (undo && attempted_to_delete(bkg)) {\n bkg.attempted_to_delete = null;\n }\n\n return bkg;\n });\n\n this._bookings.next(new_bookings);\n }\n\n private processBookings(\n space_list: Space[],\n period: 'day' | 'week' | 'month' = 'day'\n ) {\n const start = () => {\n switch (period) {\n case 'month':\n return this.booking_date.startOfValue('month');\n case 'week':\n return this.booking_date.startOfValue('week');\n default:\n return this.booking_date.startOfValue('day');\n }\n };\n const end = () => {\n const s = start();\n switch (period) {\n case 'month':\n return s.endOfValue('month');\n case 'week':\n return s.endOfValue('week');\n default:\n return s.endOfValue('day');\n }\n };\n\n let bookings = this._bookings.getValue();\n space_list.forEach((space) => {\n return (bookings = replaceBookings(\n bookings,\n space.bookings.map((bkn) => new Booking(bkn)),\n {\n room_email: space.email,\n fromTz: start(),\n toTz: end(),\n }\n ));\n });\n this._bookings.next(bookings);\n }\n\n // private filterBookings(startTz: DateTZ, endTz: DateTZ) {\n // const filters = this._filters.getValue();\n // const bookings = this._bookings.getValue();\n // const fzone = this._zone.getValue();\n // return bookings.filter((bkn) => {\n // const intersects = timePeriodsIntersect(\n // startTz.ms,\n // endTz.ms,\n // bkn.startDateTz.ms,\n // bkn.endDateTz.ms\n // );\n // const in_zone = bkn.room.zones.includes(fzone);\n // const has_space =\n // !filters.space_emails?.length ||\n // filters.space_emails.includes(bkn.room.email);\n // const in_zones =\n // !filters.zone_ids?.length ||\n // !!bkn.room.zones.find((zone) =>\n // filters.zone_ids.includes(zone)\n // );\n // const type = bkn.declined ? 'declined' : bkn.getType();\n\n // const show =\n // !filters.hide_type?.length ||\n // !filters.hide_type.includes(type as any);\n // return intersects && has_space && in_zone && in_zones && show;\n // });\n // }\n\n private filterBookings(startTz: DateTZ, endTz: DateTZ) {\n const filters = this._filters.getValue();\n const bookings = this._bookings.getValue();\n const fzone = this._zone.getValue();\n return bookings.filter((bkn) => {\n const intersects = timePeriodsIntersect(\n startTz.ms,\n endTz.ms,\n bkn.startDateTz.ms,\n bkn.endDateTz.ms\n );\n // Check if any room in the booking satisfies the conditions\n const roomSatisfiesConditions = bkn.multi_rooms.some((room) => {\n const in_zone = room.zones.includes(fzone);\n const has_space =\n !filters.space_emails?.length ||\n filters.space_emails.includes(room.email);\n const in_zones =\n !filters.zone_ids?.length ||\n !!room.zones.find((zone) => filters.zone_ids.includes(zone));\n return in_zone && has_space && in_zones;\n });\n \n const type = bkn.declined ? 'declined' : bkn.getType();\n \n const show =\n !filters.hide_type?.length ||\n !filters.hide_type.includes(type as any);\n return intersects && roomSatisfiesConditions && show;\n });\n } \n\n /**If Sunday add one day to get Saturday as end of week */\n private getEndOfWeek(date: DateTZ): DateTZ {\n return date.dateWeekday === 7\n ? date.addValue({ days: 1 }).endOfValue('week').endOfValue('day')\n : date.endOfValue('week').endOfValue('day');\n }\n}\n","import { BaseDataClass } from '../base-api.class';\nimport { CateringOrder } from '../catering';\nimport { User } from '../users';\nimport {\n flatten,\n HashMap,\n humaniseDuration,\n shorterBuildingDateFormatString,\n shorterLocalDateFormatString,\n toTitleCase,\n unique\n} from '@mckinsey-converge/base';\nimport { Space } from '../spaces/space.class';\nimport { ServiceManager } from '../service-manager.class';\nimport { SettingsService } from '../settings.service';\nimport {\n BookingNote,\n} from './booking.types';\nimport { convertLocalTimestampToTimezonedDateTz, DateNow, DateTZ, getTimezoneOffsetString } from '@mckinsey-converge/date-tz';\nimport { DaysOfWeek, getLastDateFromList, handleRecurrenceFields, RecurrencePeriod } from '../recurrence/recurrence.utils';\nimport { findSpace } from '../spaces';\nimport { DateTime } from 'luxon';\n\n\nexport interface IBookingQueryOptions {\n /** booking ID */\n id?: string;\n email?: string;\n target?: string;\n from?: number; // R--- depreciate\n until?: number; // R--- depreciate\n fromTz?: DateTZ;\n untilTz?: DateTZ;\n show_cancelled?: boolean;\n pagination?: boolean;\n limit?: number;\n offset?: number;\n sort?: string,\n filters?: any;\n include_rooms?: boolean;\n building_zone?: string;\n}\n\nexport class Booking extends BaseDataClass {\n /** Unique calendar event ID */\n // public readonly icaluid: string;\n /** Subject or title of the booking */\n public title: string;\n /** Luxon based date class of the booking start time */\n public startDateTz: DateTZ;\n /** Luxon based date class of the booking start time */\n public endDateTz: DateTZ;\n /** Description or details of the booking */\n public readonly body: string;\n /** Type of booking */\n public readonly booking_type: string;\n /** List of catering orders for the booking */\n public catering: readonly CateringOrder[];\n /** Whether booking's duration covers all day */\n public readonly all_day: boolean;\n /** Mapping of emails to approval statuses */\n public approval_status: HashMap;\n /**\n * New booking approval status set in constructor\n *\n * timeBasedStatusLabel is a getter calculated via current time, some parts of the application\n * may use status when it should use timeBasedStatusLabel\n */\n public status: 'tentative' | 'accepted' | 'approved' | 'declined' | 'cancelled' | 'expired' | 'unavailable';\n /** Host/Organiser of the booking */\n public organiser: User;\n /** List of people invited to attend the booking */\n public attendees: User[];\n /** Author of the booking */\n public readonly creator: User;\n\n /** List of notes associated with the booking */\n public notes: readonly BookingNote[];\n /** Mapping of spaces to equipment charge codes */\n public equipment_codes: HashMap;\n /** Mapping of spaces to expected number of attendees */\n public expected_attendees: HashMap;\n /** Map of space emails to the setup time before the meeting in minutes */\n public setup: HashMap;\n /** List of checked in attendees */\n public check_ins: object;\n /** Map of space emails to the breakdown time before the meeting in minutes */\n public breakdown: HashMap;\n /** List of fields edited since creation */\n public readonly edits: string[];\n /** List of users to be notified on visitor arrivals */\n public readonly notify_users: readonly string[];\n /** Whether the time or duration has changed */\n public time_changed = false;\n /**\n * Booking Space\n * Bookings only have one room on MCK\n */\n public room: Space;\n /** building_zone */\n public building_zone: string;\n /** Initialized Timezone */\n public timezone: string;\n /** Array of company names */\n public company?: string[];\n /** Flag for multiroom booking */\n public is_multiroom: boolean;\n /** Multiroom booking ID */\n public multiroom_master_id: string; \n /** Type of recurrence, Shows whether this is a master or an occurence in the series. */\n public readonly recurrence_type: string;\n /** The frequency of the recurring booking. */\n public readonly recurrence_period: RecurrencePeriod;\n /** The interval time between each period. Defaults to 1. For example, with a period of \"weekly\" and an interval of 2, the recurrencd happen every 2 weeks. */\n public readonly recurrence_interval: number;\n /** Unix epoch in seconds of the recurrence end date */\n private _recurrence_endTz: DateTZ;\n /** The number of times to repeat the recurring booking. */\n public readonly recurrence_count: number;\n /** ID of the booking considered the master */\n public readonly recurrence_master_id: string;\n /** An array of booking IDs which belong to this recurring series. This INCLUDES the master booking ID. */\n public readonly occurrence_ids: string[];\n /** A list of INDIVIDUAL edits to any of the bookings in the series. This is so we can prompt the user if they are going to override previously updated bookings with a whole-series update. */\n public readonly occurrence_edits: string[];\n /** A list of Ocurrences */\n public readonly occurrence_details: { id: string, start_epoch: number }[];\n /** When the booking was created */\n public created_epoch: number;\n /** Is the Application concierge */\n public is_concierge: boolean;\n /**helper to know if recurring toggle is on */\n public is_recurrent: boolean;\n /**array of start dates of each ocurrence in the series */\n public recurrence_starts: Array\n /**array of conflicting dates not to be included in the recurrence series */\n public recurrence_exceptions: Array\n\n public recurrence_days?: Array\n\n /** Master recurrence start */\n public recurrence_start: number;\n\n /** Start Epoch */\n public start_epoch: number;\n public end_epoch: number;\n public level_zone: string;\n public opt_out: boolean;\n public multi_rooms: Space[];\n public room_setup: any;\n public room_breakdown: any;\n public headcount: number;\n public equipment_code: string;\n\n /** Currently back-end is not properly setting the recurrence_end property, this is a workaround */\n public get recurrence_endTz(): DateTZ {\n return this._recurrence_endTz;\n }\n\n public set recurrence_endTz(date: DateTZ) {\n this._recurrence_endTz = date;\n }\n\n /** Mark a booking for deleting */\n public attempted_to_delete?: 'series' | 'booking' | null;\n\n // No specific reason to set readonly but canm be change if needed to update in future\n public readonly booked_by : string | { name: string };\n public readonly booker: Object;\n public readonly booker_concierge: Object\n\n constructor(raw_data: HashMap = {}) {\n super(raw_data);\n // Needed to check if the current app is Concierge or Staff\n const settingsService = ServiceManager.serviceFor(SettingsService) as unknown as SettingsService;\n this.is_concierge = settingsService.concierge;\n\n /**\n * Setup Defaults when raw_data values are not provided\n */\n const nowTz = new DateTZ();\n\n const defaultTitle = ''; // Blank since the create booking form will init with test values.\n const defaultLocalTimezone = Intl?.DateTimeFormat()?.resolvedOptions()?.timeZone;\n const defaultBuildingZone = null // R --- no idea, should be a building.id but which and how\n const defaultOrgainiser = User.active_user || new User(); // meh, non American use.\n const defaultBookingType = 'internal';\n\n /**\n * Process the simple raw_data with defaults mixed in\n */\n this.title = raw_data.title || defaultTitle;\n this.timezone = raw_data.timezone || defaultLocalTimezone;\n // Used by components to get the building details\n this.building_zone = raw_data.building_zone || defaultBuildingZone;\n this.body = raw_data.body || '';\n // Provided booking type\n this.booking_type = raw_data.booking_type || defaultBookingType;\n // Attendees provided in API booking data\n this.attendees = (raw_data.attendees || []).map((i) => new User(i));\n // Provided organiser, active user, or empty user?\n this.organiser = raw_data.organiser ? new User(raw_data.organiser) : defaultOrgainiser;\n // Creator is provided or defaults to the organizer\n this.creator = (raw_data.booked_by ? new User(raw_data.booked_by) : defaultOrgainiser) || this.organiser;\n // Setup and breakdown times can conflict but not the true event start and end times\n this.setup = raw_data.setup || {};\n this.breakdown = raw_data.breakdown || {};\n this.room_setup = raw_data.room_setup;\n this.room_breakdown = raw_data.room_breakdown;\n // Notes are assigned by room but we only support a single room\n this.notes = raw_data.notes || [];\n this.equipment_codes = raw_data.equipment_codes || {};\n this.equipment_code = raw_data.equipment_code || '';\n this.expected_attendees = raw_data.expected_attendees || {};\n this.headcount = raw_data.headcount;\n this.check_ins = raw_data.check_ins || {};\n this.notify_users = raw_data.notify_users?.length ? raw_data.notify_users : [this.organiser?.name];\n this.company = raw_data.company || [];\n // retain booked by if there : helps to get correct creator above\n this.booked_by = raw_data.booked_by;\n this.booker = raw_data.booker;\n this.booker_concierge = raw_data.booker_concierge;\n this.level_zone = raw_data.level_zone;\n this.opt_out = raw_data.opt_out;\n\n \n /**\n * Multiroom fields\n */\n this.is_multiroom = raw_data.is_multiroom || null;\n this.multiroom_master_id = raw_data.multiroom_master_id || null;\n\n /**\n * Setup Defaults when raw_data values are not provided\n *\n * all room_ids and space_list inputs can be refactored into just room like an API booking\n *\n * raw_data.room can be provides as the Space class or JSON object\n */\n // this.room = raw_data.room ? new Space(raw_data.room) : new Space();\n // this.room = raw_data?.room ? (Array.isArray(raw_data?.room) && raw_data.room.length > 0) ? raw_data?.room.map((element) => new Space(element))[0]: [new Space(raw_data.room)][0] : [new Space()][0];\n // this.room = raw_data.room ? new Space(raw_data.room) : new Space();\n\n if (raw_data && raw_data.room) {\n if (Array.isArray(raw_data.room) && raw_data.room.length) {\n this.room = raw_data.room.map((element) => new Space(element))[0];\n } else if (Array.isArray(raw_data.room) && raw_data.room.length === 0) {\n this.room = [new Space()][0];\n } else {\n this.room = [new Space(raw_data.room)][0];\n }\n } else {\n this.room = [new Space()][0];\n }\n\n\n const room_id = raw_data.room_id || raw_data.room_ids // Not sure why we have room_id and room_ids\n if (!this.room?.id && room_id?.length) {\n this.room = findSpace(room_id[0]) || this.room;\n }\n\n const roomsData = raw_data?.multi_rooms || raw_data?.room;\n this.multi_rooms = roomsData\n ? Array.isArray(roomsData)\n ? roomsData.map((element) => new Space(element))\n : [new Space(roomsData)]\n : [new Space()];\n\n \n const room_ids = [...(raw_data?.room_id || []), ...(raw_data?.room_ids || [])];\n\n room_ids.forEach(roomId => {\n const newRoom = findSpace(roomId);\n // Check if the room is found and not already included in this.room\n if (newRoom && !this.multi_rooms.some(room => room.id === newRoom.id)) {\n // Add the new room to this.room\n this.multi_rooms.push(newRoom);\n }\n });\n\n // this.room is sometimes getting set to undefined when raw_data?.room is coming as an object\n if(this.multi_rooms.length && this.room === undefined){\n this.room = this.multi_rooms[0];\n }\n \n /**\n * Setup the booking start and end time\n *\n *\n * Booking defaults to now if start is not defined.\n * Booking durration is now a getter\n */\n // now rounded to the next 5 minute increment\n const defaultStartTz = new DateTZ({ date: nowTz.ms, is_local_tz: false, building_tz: this.timezone }).setValue({ minute: Math.ceil(nowTz.minutes / 5) * 5 });\n\n /**\n * When saving a booking the BaseDataClass doens't know to use the toAPIJson\n * so startDateTz isn't being convert to the epoch timestamp\n *\n * I'm not testing for the end time values because we can assume those follow the same pattern.\n */\n const startEpochProvided = !!(raw_data.start_epoch || raw_data.start);\n const startDateTzProvided = !!raw_data.startDateTz;\n\n /**\n * Not trying to be fancy here, just clear.\n */\n if (!startEpochProvided && startDateTzProvided) {\n /**\n * Once a booking is saved the BaseDataClass recreates the Booking\n * but doesn't use the toApiJSON method adapt the class input, mainly the\n * startDateTz isn't converted to the start_epoch timestamp.\n */\n this.startDateTz = raw_data.startDateTz;\n this.endDateTz = raw_data.endDateTz;\n } else if (startEpochProvided) {\n /**\n * A Booking created from the API responses arrives with the booking\n * start_epoch and end_epoch timestamps.\n */\n this.startDateTz = new DateTZ({\n date: ((raw_data.start_epoch || raw_data.start) * 1000),\n is_local_tz: false,\n building_tz: this.timezone\n });\n this.endDateTz = new DateTZ({\n date: ((raw_data.end_epoch || raw_data.end)* 1000),\n is_local_tz: false,\n building_tz: this.timezone\n });\n } else {\n /**\n * And there are uses of new Booking where there are no inputs\n * and defaults are necessary.\n */\n this.startDateTz = defaultStartTz;\n this.endDateTz = defaultStartTz.addValue({ minutes: 60 });;\n }\n\n /**\n * End time was by design ending at one minute before, IE 4:00PM is 3:59PM,\n * because of calendar and conflcit checking\n *\n * Check and finesse it.\n * Not sure why but some booking endtime added extra seconds\n */\n if ((this.endDateTz.minutes % 5) !== 0 || this.endDateTz.second > 0) {\n // Not sure of the source but some bookings do not conform.\n this.endDateTz = this.endDateTz.setValue({ second: 0, minute: Math.round(this.endDateTz.minutes / 5) * 5 });\n }\n\n\n\n /**\n * Setup the booking created_date\n *\n * if it exists as a key, use the value directly.\n * if we initialize without a value, switch to checking duration.\n * Ref: MCK-826\n */\n this.created_epoch = raw_data.created_epoch || nowTz.seconds;\n\n\n /**\n * Setup the booking all_day boolean\n *\n * if it exists as a key, use the value directly.\n * if we initialize without a value, switch to checking duration.\n * Ref: MCK-826\n */\n if ('all_day' in raw_data) {\n this.all_day = raw_data.all_day;\n } else {\n this.all_day = !!raw_data.all_day || this.duration > 23 * 60;\n }\n\n\n // R--- TODO Concierge will use startDateTz so i'm not sure if this is needed.\n if (!this.is_concierge && this.all_day && this.timezone) {\n /**\n * Concierge has a all_day form field, I can see it may need this for that, does it really?\n */\n this.startDateTz = this.startDateTz.startOfValue('day')\n }\n\n /**\n * Setup the booking approval status\n */\n let status = raw_data.status;\n // If not provided default to approved.\n if (!raw_data.status) {\n status = 'accepted';\n }\n // \"show_as\" is a special rule to override how the applications display the status\n if (raw_data.show_as && raw_data.show_as === 'cancelled') {\n status = 'declined';\n }\n const approvalStatus = {};\n this.multi_rooms.forEach(room => {\n approvalStatus[room.email] = status;\n });\n // Tracking new \"status\" and legacy \"approval_status\" from raw_data.status.\n this.status = status;\n this.approval_status = raw_data.approval_status || {};\n\n /**\n * Catering setup\n *\n * Bring in and sort the catering order by delivery time\n */\n\n this.catering = (raw_data.catering instanceof Array ? raw_data.catering : []).map(\n (i) => new CateringOrder(i)\n );\n\n\n\n /**\n * Edited fields setup\n *\n * Bring in and sort the catering order by delivery time\n *\n * cateringOrders can return the order sorted\n */\n const edited_fields = Array.isArray(raw_data.edits)\n ? raw_data.edits\n : unique(\n flatten(\n Object.keys(raw_data.edits || {}).map((room) => {\n return flatten(Object.values(raw_data.edits[room]));\n })\n )\n );\n this.edits = edited_fields;\n\n /**\n * New Recurring booking feilds\n *\n * New fields do not match the BookingRecurrenceDetails type\n * and are simpler to manage this way\n */\n this.recurrence_count = raw_data.recurrence_count || null;\n this.recurrence_days = raw_data.recurrence_days || null;\n this.occurrence_edits = raw_data.occurrence_edits || null;\n this.recurrence_endTz = raw_data.recurrence_end ? new DateTZ({date: raw_data.recurrence_end * 1000, is_local_tz: false, building_tz: this.timezone}) : null;\n this.recurrence_exceptions = raw_data.recurrence_exceptions || null;\n this.occurrence_ids = raw_data.occurrence_ids || null;\n this.recurrence_interval = raw_data.recurrence_interval || null;\n this.recurrence_period = raw_data.recurrence_period || null;\n this.recurrence_type = raw_data.recurrence_type || null;\n this.recurrence_master_id = raw_data.recurrence_master_id\n this.occurrence_details = raw_data.occurrence_details\n this.is_recurrent = raw_data.is_recurrent || (!!this.recurrence_type && !!this.recurrence_period) || null;\n this.recurrence_starts = raw_data.recurrence_starts || []\n this.start_epoch = raw_data.start_epoch\n this.end_epoch = raw_data.end_epoch\n\n /**\n * I'm not clear why, but the booking body, aka description is copied into the notes.\n * R--- In concerge data description is only a key when saving, also in the note array?\n */\n if (raw_data.body && !this.notes.find((i) => i.type === 'description')) {\n this.notes = [\n ...this.notes,\n {\n type: 'description',\n date: 0,\n message: raw_data.body,\n author: this.organiser.email\n }\n ];\n }\n\n /**\n * In case there is a cancellation in progress the property attempted_to_delete is set to false\n * And it is persisted until the booking is gone\n */\n this.attempted_to_delete = raw_data.attempted_to_delete || null;\n }\n\n\n /** Service for managing Bookings */\n protected get _service() {\n return ServiceManager.serviceFor(Booking);\n }\n\n /** Alias to approval_status */\n public get auto_approve(): boolean {\n // if concierge we auto_approve always.\n if (this.is_concierge) {\n return true;\n }\n return !this.multi_rooms.some(room => room.byRequest({\n dateTz: this.startDateTz,\n duration: this.duration,\n host: this.organiser\n }));\n }\n\n /** Whether booking has been approved */\n public get approved(): boolean {\n return !this.declined && !this.tentative;\n }\n\n /** All of the booking attendees including the organizer */\n public get allAttendees(): User[] {\n return unique([this.organiser].concat(this.attendees), 'email');\n }\n\n /** Computer format for booking type */\n public get bookingTypeId(): string {\n return this.booking_type.toLowerCase();\n }\n\n /** Human format for booking type */\n public get bookingTypeLabel(): string {\n return toTitleCase(this.booking_type);\n }\n\n /** Get accessor for the check in object, app expect array */\n public get checkInsArray(): string[] {\n return Object.keys(this.check_ins || {})\n }\n\n /** Legacy getter for \"class\" */ // R-- TODO remove\n public get class(): string {\n return this.booking_type;\n }\n\n /** */\n public get displayEndDateTz(): DateTZ {\n if ((this.endDateTz.minutes % 5) !== 0) {\n // All the bookings should end in 59 seconds\n return this.endDateTz.addValue({ seconds: 1 });\n }\n // but if not they return 00\n return this.endDateTz;\n }\n\n /** Whether booking has been declined */\n public get declined(): boolean {\n /**\n * I'm not sure, nor is Cam if this is ever used to decline\n * all booking for a specific room\n */\n const isAnyRoomDeclined = this.multi_rooms.some(room => room.name.toLowerCase().includes('decline'));\n if (isAnyRoomDeclined) {\n return true;\n }\n\n if (this.status.includes('decline')) {\n return true;\n }\n\n return false;\n }\n\n /** Description of the booking purpose */\n public get description(): string {\n const note = (this.notes || []).find((i) => i.type === 'description');\n return note ? note.message : '';\n }\n\n /** Catering getter */\n public get cateringOrders() {\n // Return the catering orders sorted by delivery time\n return this.catering ? this.catering.slice().sort((a, b) => {\n if (a?.delivery_time > b?.delivery_time) return 1;\n if (b?.delivery_time > a?.delivery_time) return -1;\n\n return 0;\n }) : [];\n }\n\n /** Get the created date as DateTz */\n public get creationDateTz() {\n return new DateTZ({ date: this.created_epoch * 1000, is_local_tz: false, building_tz: this.timezone })\n }\n\n public get tz_offset() {\n return getTimezoneOffsetString(this.timezone);\n }\n\n /** Display value for the date */\n public get date_string(): string {\n return this.startDateTz.formatDate('dd MMM yyyy');\n }\n\n /**\n * Get the booking durration based on start and end times\n */\n public get duration(): number {\n return Math.abs(this.startDateTz.startOfValue('minute').dateDiff(this.displayEndDateTz, 'minutes'));\n }\n\n /** Unix timestamp of the booking start */\n public get date() { // R--- remove if not necessary\n return this.startDateTz.ms;\n }\n\n /** Whether booking contains external visitors in the attendee list */\n public get has_visitors(): boolean {\n return this.attendees.reduce((a, v) => a || v.external, false);\n }\n\n /** Does the booking have catering orders */\n public get has_catering(): boolean {\n return !!this.catering.length;\n }\n\n /**\n * Unique calendar event ID\n * same as this.id, used to support existing component usage\n */\n public get icaluid(): string {\n return this.id;\n }\n\n /**\n * Get the booking room id\n */\n public get room_id(): string {\n return this.room.id;\n }\n\n /** Legacy getter of room, aka space */\n public get space(): Space {\n return this.room;\n }\n\n /** Status of the booking */\n public get timeBasedStatusLabel(): 'future' | 'upcoming' | 'done' | 'started' | 'in_progress' | 'expired_yesterday' {\n const buildingTzDt = DateNow(new Date()).toZone(this.timezone) ; // building time\n\n if (DateNow(new Date()).isBeforeDate(this.startDateTz.subtractValue({ minutes: 15 }))) {\n return 'future';\n } else if (DateNow(new Date()).isBeforeDate(this.startDateTz)) {\n return 'upcoming';\n } else if (DateNow(new Date()).isBeforeDate(this.startDateTz.addValue({ minutes: 15 }))) {\n return 'started';\n } else if (DateNow(new Date()).isBeforeDate(this.startDateTz.addValue({ minutes: this.duration }))) {\n return 'in_progress';\n }\n // if current time is 12 AM (as per timezone) and booking expired yesterday\n else if(buildingTzDt.startOfValue('day').addValue({ minutes: 1 }).isAfterDate(this.startDateTz, 'day') ) {\n return 'expired_yesterday'\n }\n\n return 'done';\n }\n\n /** Whether booking is tentative */\n public get tentative(): boolean {\n if (\n this.status &&\n this.status.indexOf('tentative') >= 0\n ) {\n return true;\n }\n\n return false;\n }\n\n /** Display valuie for the start and end times of the booking */\n public get time_period(): string {\n return `${this.startDateTz.formatDate('h:mma')} - ${this.displayEndDateTz.formatDate('h:mma')}`;\n }\n\n /** Display value for the start time of the booking */\n public get start_time(): string {\n return this.startDateTz.formatDate('h:mma');\n }\n\n /** Display value for the end time of the booking */\n public get end_time(): string {\n return this.endDateTz.formatDate('h:mma');\n }\n\n /** Display value for the duration of the booking */\n public get length_string(): string {\n return humaniseDuration(this.duration);\n }\n\n /** Display value for the location of the booking */\n // public get local_room_name(): string {\n // return this.room?.local_name || 'No location';\n // }\n public get local_room_name(): string {\n if (this.multi_rooms.length === 0) {\n return 'No location';\n } else {\n return this.multi_rooms.map(room => room.local_name).join(', ');\n }\n } \n\n /** Display value for the level of the first space in the booking */\n public get level(): string {\n return this.space.level.name;\n }\n\n /**\n * Make a copy of this object\n */\n public clone(): Booking {\n return new Booking(this.toJSON());\n }\n\n /**\n * Make a copy of this object without identification data\n */\n public duplicate(isEdit = false): Booking {\n return new Booking({\n ...this.toJSON(),\n id: isEdit ? this.id : null,\n });\n }\n\n /**\n *\n * @param status\n * @returns void\n */\n public undo(status?: 'accept' | 'decline', opts: { series?: boolean } = {}): Promise {\n return this._service.undo(\n this.id, status || 'accept',\n opts\n );\n }\n\n /**\n * Delete booking from the server\n */\n public delete(opts: { series?: boolean } = {}): Promise {\n if (this.id) {\n return this._service.delete(this.id, { ...opts });\n\n // R-- ask Cam again is he's positive these extra params are not needed for anything\n // return this._service.delete(this.id, {\n // concierge: this.is_concierge,\n // host: this.organiser.email,\n // room_id: this.space?.id,\n // icaluid: this.icaluid,\n // start: json.start,\n // end: json.end\n // });\n }\n }\n\n /**\n * Convert object into plain object\n */\n public toJSON(this: Booking): HashMap {\n let data = super.toJSON();\n // Remove the description from the notes\n data.notes = Array.isArray(data.notes) ? data.notes.filter((note) => note.type !== 'description') : data.notes;\n // Encode the nested objects\n data.room = data.room.toJSON();\n\n\n\n data.organiser = data.organiser.toJSON();\n data.creator = data.creator?.toJSON ? data.creator.toJSON(): data.creator;\n // Map the attendees User objects\n data.attendees = data.attendees.map((i: User) => i.toJSON());\n\n // New recurring booking\n data = handleRecurrenceFields(data)\n\n if(data.recurrence_list){\n data.recurrence_starts = [...data.recurrence_list]\n delete data.recurrence_list\n }\n\n return data;\n }\n\n /**\n * Convert object into plain object\n */\n public toApiJSON(this: Booking): HashMap {\n let data = super.toJSON();\n\n // Update booking payload contains additional fields\n data.icaluid = \"\";\n if (data.id) {\n data.icaluid = data.id;\n data.location_name = this.multi_rooms.map((item)=>{return item.local_name}).join(', ');\n data.from_room = this.multi_rooms.map((item)=>{return item.email}).join(', ');\n data.building_zone = this.room?.building?.id;\n }\n\n /**\n * These fields are rather in flux\n * According to Cam \"approve\" will be the prefered field\n * and auto_approve and approval_status can be removed.\n */\n data.approve = this.auto_approve; // this value appear incorrect on update\n data.auto_approve = [this.auto_approve]; // Needed to update approval status until BE accepts \"approve\"\n // delete data.approval_status;\n\n // Booking start and end data\n delete data.startDateTz;\n delete data.endDateTz;\n data.start = this.startDateTz.seconds;\n data.end = this.endDateTz.seconds;\n data.old_start = this.startDateTz.seconds; // remove is not necessary\n data.old_end = this.endDateTz.seconds; // remove is not necessary\n\n // Creation date value\n delete data.created_epoch;\n data.creation_date = this.creationDateTz.seconds;\n\n // Catering fields\n // data.catering = data.catering.toJSON();\n data.catering = this.cateringOrders;\n data.has_catering = this.has_catering;\n delete data.cateringOrders\n\n // Attendees appear quite incomplete\n // Map the attendees User objects\n data.attendees = this.allAttendees.map((i: User) => i.toJSON ? i.toJSON() : i);\n\n // Orgainizer and Creator data\n data.organiser = data.organiser.toJSON ? data.organiser.toJSON() : data.organiser;\n data.creator = data.creator.toJSON ? data.creator.toJSON() : data.creator;\n\n // Convert check_ins to checked_in array\n delete data.check_ins;\n data.checked_in = this.checkInsArray;\n\n // edits - edit booking is showing all fields even w/o an edit :(\n\n // Room data\n data.room_ids = this.multi_rooms.map((item)=>{return item.email});\n delete data.room;\n\n // New recurring booking\n data = handleRecurrenceFields(data)\n\n\n if(data.recurrence_list){\n data.recurrence_starts = [...data.recurrence_list]\n delete data.recurrence_list\n }\n\n // Not found in dev data\n delete data.name;\n delete data.email;\n delete data.is_concierge;\n // delete data.building_zone;\n // delete data.status;\n\n return data;\n }\n\n public getType(): string {\n if (!this || this.status?.includes('decline')) {\n return 'cancelled';\n }\n const booking_type = this.booking_type;\n if (booking_type === 'internal' && this.has_visitors) {\n return 'external';\n }\n return booking_type;\n }\n\n /** fallback for a booking when the recurrence_end is null but it's a series booking */\n public recurrenEndFromOcurrences(occurrence_details: { id: string, start_epoch: number }[]): DateTZ {\n const date = occurrence_details?.map(occurence => occurence)\n .sort((a, b) => new Date(a.start_epoch * 1000).getTime() - new Date(b.start_epoch * 1000).getTime())\n .reverse()\n .shift()\n .start_epoch * 1000\n return new DateTZ({date, is_local_tz: false, building_tz: this.timezone});\n }\n\n public get dateString() {\n return shorterLocalDateFormatString(this.startDateTz);\n }\n public get dateBuildingString() {\n return shorterBuildingDateFormatString(this.startDateTz);\n }\n\n public get endDateString(): string {\n return shorterLocalDateFormatString(this.recurrenEndFromOcurrences(this.occurrence_details));\n }\n}\n\n/**\n * Merge catering orders with same time and location\n * @param order_list List of catering orders\n */\nexport function mergeCateringOrders(order_list: CateringOrder[]) {\n // R--- investigate when this is used. Staff doesn't use it when adding catering orders.\n for (let i = 0; i < order_list.length; i++) {\n const orders = order_list.filter(\n (order) =>\n order.location_id === order_list[i].location_id &&\n order.delivery_time === order_list[i].delivery_time\n );\n if (orders.length > 1) {\n const new_list = order_list.filter(\n (order) =>\n !(order.location_id === order_list[i].location_id &&\n order.delivery_time === order_list[i].delivery_time)\n );\n new_list.push(new CateringOrder({\n ...order_list[i],\n items: flatten(orders.map(order => order.items)),\n booking_date: this.startDateTz.ms,\n booking_timezone: this.booking_timezone,\n }));\n order_list = new_list;\n i = 0;\n }\n }\n return order_list;\n}\n","import { DateTZ } from \"@mckinsey-converge/date-tz\";\n\nexport interface SpaceRules {\n auto_approve: boolean; // if false sapce is requestable else bookable\n hide: boolean;\n max_length?: number;\n min_length?: number;\n reason?: string // specially for non-bookable rooms\n}\n\nexport interface BookingNote {\n /** Type of note */\n type: 'equipment' | 'catering' | 'description' | 'private' | 'other' | 'catering-private';\n /** Name of the note's author */\n author: string;\n /** Contents of the note */\n message: string;\n /** Time the note was added to the booking */\n date: number;\n /** Display value for the time */\n time?: string;\n /** ID of the space associated with the note */\n space?: string;\n /** ID of the catering order associated with the note */\n order_id?: string;\n}\n\nexport interface DateDurationData {\n dateTz: DateTZ,\n duration: number,\n mobile: boolean,\n save?: boolean,\n}\n\nexport enum BOOKING_STATUS {\n approved = 'approved',\n declined = 'declined',\n tentative = 'tentative',\n unavailable = 'unavailable'\n}","import {\n AbstractControl,\n FormControl,\n FormGroup,\n Validators\n} from '@angular/forms';\n\nimport { AvailableBookingFields } from '../settings.interfaces';\nimport {\n HashMap,\n humaniseDuration,\n mockDate as mockDateBase,\n resetDate as resetDateBase,\n timeFormatString,\n unique\n} from '@mckinsey-converge/base';\nimport { CateringOrder } from '../catering/catering-order.class';\nimport { ServiceManager } from '../service-manager.class';\nimport { User } from '../users/user.class';\nimport { Booking, IBookingQueryOptions } from './booking.class';\nimport {\n BookingRule,\n SpaceStatus\n} from './space.types';\nimport { validateEndTime } from '../validation.utilities';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { BookingAction, RecurrencePeriod, SeriesAction } from '../recurrence/recurrence.utils';\nimport { Space } from '../spaces';\nimport * as cloneDeep from 'lodash/cloneDeep';\n\nconst MINUTE = 1;\nconst HOUR = 60;\nconst DAY = 24 * HOUR;\nconst WEEK = 7 * DAY;\nconst MONTH = 30 * DAY;\n\nconst DURATION_MAP: { [duration: string]: number } = {\n month: MONTH,\n months: MONTH,\n week: WEEK,\n weeks: WEEK,\n day: DAY,\n days: DAY,\n hour: HOUR,\n hours: HOUR,\n minute: MINUTE,\n minutes: MINUTE\n};\n\n/**\n * Deprecated. Use @mckinsey-converge/base's import.\n */\nexport const mockDate = mockDateBase;\n\n/**\n * Deprecated. Use @mckinsey-converge/base's import.\n */\nexport const resetDate = resetDateBase;\n\nexport interface IBookingSlot {\n start: number;\n end: number;\n}\n\n\nexport function bookingOptionsToQuery(options: IBookingQueryOptions): HashMap {\n let query: HashMap = {};\n if (options) {\n query = { ...options };\n delete query.type;\n if (options.filters) {\n delete query.filters;\n for (const property in options.filters) {\n if (!query[property]) {\n query[property] = options.filters[property]\n }\n }\n }\n\n // id?: string;\n // cancelled?: boolean;\n if (options.until) {\n query.to = options.until;\n delete query.until;\n }\n \n }\n return query;\n}\n\n\n/**\n * Generate a list of free time slots between the given bookings\n * @param list List of bookings to find slots between\n * @param min_size Minimum length of a free slot in minutes\n */\nexport function getFreeBookingSlots(list: Booking[]=[], min_size: number = 30, dateTzMs: number = DateNow(new Date()).ms,): IBookingSlot[] {\n /* istanbul ignore else */\n if (!list.length) {\n return [\n {\n start: 0,\n end: DateNow(new Date()).startOfValue('minute').ms * 10\n }\n ];\n }\n const slots: IBookingSlot[] = [];\n let start = new DateTZ({ date: dateTzMs });\n list.sort((a, b) => a.date - b.date);\n for (const booking of list) {\n const bkn_start = booking.startDateTz;\n const bkn_end = booking.endDateTz;\n if (bkn_start.isAfterDate(start)) {\n const diff = Math.abs(bkn_start.dateDiff(start, 'minutes'));\n /* istanbul ignore else */\n if (diff >= min_size) {\n slots.push({ start: start.ms, end: bkn_start.ms });\n }\n start = bkn_end;\n } else if (start.startOfValue('minute').ms === bkn_start.startOfValue('minute').ms) {\n start = bkn_end;\n }\n }\n slots.push({\n start: start.ms,\n // R--- these X 10's make no sense. why not + 2 years?\n end: DateNow(new Date()).startOfValue('minute').ms * 10\n });\n\n return slots;\n}\n\n/**\n * Get the next free time slot from the given bookings\n * @param list List of bookings to find the next slot\n * @param date Date to find next slot after in ms since UTC epoch\n * @param min_size Minimum length of the free slot in minutes\n * \n * R--- Possibly depreciate, I don't see it used anywhere except for its own test\n */\nexport function getNextFreeBookingSlot(\n list: Booking[],\n date: number = DateNow(new Date()).ms,\n min_size: number = 15\n): IBookingSlot {\n const slots = getFreeBookingSlots(list, min_size, date);\n const date_ = new DateTZ({date})\n const time = date_.startOfValue('minute').setValue({ second: 1 });\n for (const block of slots) {\n const start = new DateTZ({date: block.start});\n const end = new DateTZ({date: block.end});\n if (start.startOfValue('minute').isAfterDate(time)) {\n return block;\n } else if (time.isBeforeDate(end.startOfValue('minute'))) {\n const duration = end.startOfValue('minute').dateDiff(time, 'minutes');\n /* istanbul ignore else */\n if (duration >= min_size) {\n return block;\n }\n }\n }\n return slots[slots.length - 1];\n}\n\n/**\n * Generate form fields for the given booking\n * @param booking Booking to generate form for\n * @param current_user Current user of the system to default as the host\n */\nexport function generateBookingForm(\n booking: Booking,\n use_fields: AvailableBookingFields[],\n isConcierge: boolean = false,\n manualTimezone?: string,\n action?: SeriesAction | BookingAction | null\n ): FormGroup {\n if (!booking) {\n throw Error('No booking passed');\n }\n\n const user_service = ServiceManager.serviceFor(User);\n const current_user =\n user_service.current ||\n new User({ id: 'local-user', name: 'Local User', email: 'local@place.tech' });\n\n const fields: HashMap = {\n id: new FormControl(booking.id || ''),\n space_list: new FormControl( booking.is_multiroom? booking.multi_rooms : [booking.room], []),\n room: new FormControl(booking.room, {}),\n dateTz: new FormControl({ value: booking.startDateTz || DateNow(), disabled: false }, [Validators.required]),\n duration: new FormControl({ value: booking.duration, disabled: false }),\n organiser: new FormControl(booking.organiser || current_user, [Validators.required]),\n attendees: new FormControl(booking.attendees, []),\n title: new FormControl(booking.title || '', { validators: [ Validators.required, Validators.minLength(1) ], updateOn: 'blur' }), //Validators.pattern(\"[^=`~!@#$%*{};:'\\\",_.<>]*\")\n booking_type: new FormControl(booking.booking_type),\n body: new FormControl(booking.body),\n notes: new FormControl(booking.notes),\n equipment_codes: new FormControl(booking.equipment_codes),\n expected_attendees: new FormControl(booking.expected_attendees),\n company: new FormControl(booking.company),\n is_multiroom: new FormControl(booking.is_multiroom),\n catering: new FormControl(\n booking.cateringOrders.map(\n (order) => new CateringOrder({\n ...order,\n booking_date: booking.startDateTz.ms,\n booking_timezone: booking.timezone,\n })\n )\n ),\n all_day: new FormControl(!!booking.all_day),\n has_catering: new FormControl(!!booking.has_catering),\n needs_space: new FormControl(true),\n action: new FormControl(''),\n timezone: new FormControl(manualTimezone || \"\"),\n is_before_date: new FormControl(false)\n };\n if (!isConcierge) {\n fields.duration.setValidators([Validators.required, validateEndTime(fields.dateTz)]);\n }\n /* istanbul ignore else */\n if (booking.id && booking.id !== 'ad-hoc') {\n fields.organiser.disable();\n /* istanbul ignore else */\n if (booking.endDateTz.ms < DateNow(new Date()).ms) {\n fields.dateTz.disable();\n }\n } else {\n const dateValidators = [Validators.required];\n if (!isConcierge) {\n dateValidators.push(isFuture);\n }\n dateValidators.push(validDateTZ)\n fields.dateTz.setValidators(dateValidators);\n fields.dateTz.updateValueAndValidity();\n }\n let list_length = -1;\n fields.space_list.valueChanges.subscribe((list) => {\n const expected = fields.expected_attendees.value || {};\n const matches = Object.keys(expected).filter((key) =>\n list?.find((space) => space.email === key)\n ).length;\n if (list && list.length && matches === 0) {\n const codes = fields.equipment_codes.value || {};\n if (Object.keys(expected).length >= 0 || Object.keys(codes).length >= 0) {\n const key = Object.keys(expected)[0] || Object.keys(codes)[0];\n const new_expected = {};\n const new_codes = {};\n const notes = fields.notes.value;\n notes.forEach((note) => (note.space === key ? (note.space = list[0].email) : ''));\n new_expected[list[0].email] = expected[key];\n new_codes[list[0].email] = codes[key];\n fields.expected_attendees.setValue(new_expected);\n fields.equipment_codes.setValue(new_codes);\n }\n }\n list_length = list?.length;\n });\n fields.dateTz.valueChanges.subscribe((_) => {\n fields.duration.updateValueAndValidity();\n });\n fields.needs_space.valueChanges.subscribe((space_needed) => {\n if (!space_needed) {\n fields.space_list.setValue([]);\n }\n });\n fields.has_catering.valueChanges.subscribe((has_catering) => {\n if (!has_catering) {\n fields.catering.setValue([]);\n }\n });\n const simplified_fields: HashMap = [\n 'id',\n 'space_list',\n 'space_ids',\n 'notes',\n 'dateTz',\n 'booking_type',\n 'equipment_codes',\n 'expected_attendees',\n 'timezone',\n 'is_before_date',\n ...use_fields\n ].reduce((map, key) => {\n /* istanbul ignore else */\n if (fields[key]) {\n map[key] = fields[key];\n }\n return map;\n }, {});\n \n if (simplified_fields.all_day) {\n const handleAllDay = (value) => {\n if (value) {\n let startOfDay = simplified_fields.dateTz.value.clone();\n // When the booking space isn't set we still need a way to determine midnight\n // and here we use the current concierge building selection's timezone.\n if (manualTimezone) {\n startOfDay = startOfDay.toZone(manualTimezone);\n }\n\n simplified_fields.dateTz.setValidators([Validators.required]);\n simplified_fields.dateTz.setValue(simplified_fields.all_day.value\n ? startOfDay.startOfValue('day')\n : simplified_fields.dateTz.value);\n simplified_fields.duration.setValue(simplified_fields.all_day.value\n ? 24 * 60\n : simplified_fields.duration.value);\n simplified_fields.dateTz.updateValueAndValidity();\n simplified_fields.duration.disable();\n // simplified_fields.dateTz.disable();\n } else {\n const dateValidators = [Validators.required];\n if (!isConcierge) {\n dateValidators.push(isFuture);\n }\n dateValidators.push(validDateTZ)\n simplified_fields.dateTz.setValidators(dateValidators);\n simplified_fields.duration.setValue(booking.duration || 30);\n simplified_fields.dateTz.updateValueAndValidity();\n simplified_fields.duration.enable();\n simplified_fields.dateTz.enable();\n }\n };\n simplified_fields.all_day.valueChanges.subscribe(handleAllDay);\n handleAllDay(simplified_fields.all_day.value);\n }\n\n const occurrences = booking.occurrence_details || [];\n\n //Add recurrence fields\n if(action && booking.recurrence_period === RecurrencePeriod.LIST){\n booking.recurrence_starts = occurrences\n .filter(occurrence => occurrence.id !== booking.recurrence_master_id)\n .map((occurrence) => new DateTZ({date: occurrence.start_epoch * 1000, is_local_tz: false, building_tz: booking.timezone})\n ) \n }\n /**If series exists then set the start and end dates from the first and last bookings in the occurrences array\n * this prevents prefilled form errors due to individual edits\n */\n if(action && action !== SeriesAction.CLONE && action !== BookingAction.CLONE && occurrences && occurrences.length && !booking.id){\n const start_dateTz = new DateTZ({\n date: occurrences.sort((d1, d2) => d1.start_epoch - d2.start_epoch)[0].start_epoch * 1000, \n is_local_tz: false, building_tz: booking.timezone\n })\n simplified_fields.dateTz.setValue(start_dateTz)\n const end = occurrences.sort((d1, d2) => d2.start_epoch - d1.start_epoch)[0].start_epoch * 1000\n booking.recurrence_endTz = new DateTZ({date: end, is_local_tz: false, building_tz: booking.timezone}) \n }\n\n // R-- needs TZ aware fields\n const _recurr_end = simplified_fields.dateTz?.value || new DateTZ({ date: 1 }); // new DateTZ({date: simplified_fields.date?.value}) \n const fields_with_recurrence = {\n ...simplified_fields,\n recurrence_period: new FormControl(booking.recurrence_period || RecurrencePeriod.WEEKLY),\n recurrence_interval: new FormControl(booking.recurrence_interval || 1),\n recurrence_endTz: new FormControl(booking.recurrence_endTz || _recurr_end.addValue({days: 1})),\n recurrence_count: new FormControl(booking.recurrence_count || 0),\n is_recurrent: new FormControl(booking.is_recurrent),\n recurrence_starts: new FormControl(booking.recurrence_starts || []),\n recurrence_exceptions: new FormControl([]),\n recurrence_pattern: new FormControl(RecurrencePeriod.WEEKLY), //Helper value to store the last selected pattern (daily, weekly, monthly),\n recurrence_days: new FormControl(booking.recurrence_days || [])\n }\n\n if(booking.is_recurrent && action !== BookingAction.CLONE){\n fields_with_recurrence.recurrence_starts.setValidators([arrayWithValues])\n fields_with_recurrence.recurrence_starts.updateValueAndValidity()\n fields_with_recurrence.recurrence_endTz.setValidators([Validators.required, validDateTZ]);\n }\n // Generate form group for booking item\n const form = new FormGroup(fields_with_recurrence);\n return form;\n}\n\n/**\n * Validate whether date is in the future\n * @param control Control to check value\n */\nexport function isFuture(control: AbstractControl) {\n const dateTz = control.value; // new DateTZ({date: control.value});\n return dateTz.isBeforeDate(DateNow(new Date()).subtractValue({ minutes: 5 }))\n ? { dateTz: 'Date needs to be in the future' }\n : null;\n}\n\n/**\n * Validate whether an array has values\n * @param control Control to check value\n */\nexport function arrayWithValues (control: AbstractControl) {\n return control.value.length !== 0 ? null : { field: 'Needs at least one value'}\n}\n\n/**\n * Validate whether a date has a valid value (future or current date)\n * @param control Control to check value\n */\n export function validDate (control: AbstractControl) {\n if(!control.value){\n return { date: 'Needs a valid date'}\n }\n const date = new DateTZ({date: control.value})\n const now = DateNow(new Date())\n const isValid = now.isBeforeDate(date, 'day') || now.isSameDate(date, 'day')\n return isValid ? null : { date: 'Needs a valid date'}\n}\n\n/**\n * Validate whether a date has a valid DateTZ value (future or current date)\n * @param control Control to check value\n */\n export function validDateTZ (control: AbstractControl) {\n if(!control.value){\n return { date: 'Needs a valid date'}\n }\n const date = DateNow(control.value.JSDate);\n const now = DateNow(new Date());\n const isValid = now.isBeforeDate(date, 'day') || now.isSameDate(date, 'day')\n return isValid ? null : { date: 'Needs a valid date'}\n}\n\n/**\n * Get minimum duration from ruleset in minutes\n * Default to 5min\n */\nexport function getMinLength(rule_list: HashMap): number {\n return Object.values(rule_list).reduce((min, block) => {\n const min_block = block.reduce((min_length, el) => {\n if (el.conditions.min_length && stringToMinutes(el.conditions.min_length) > min) {\n return stringToMinutes(el.conditions.min_length);\n } else {\n return min_length;\n }\n }, 5);\n if (min_block > min) {\n return min_block;\n } else {\n return min;\n }\n }, 5) as number;\n}\n\n/**\n * Whether the first input is greater than the last. Converts duration strings into minutes\n * @param duration_1 First input can be a number in minutes or a duration string e.g. `1 hour`\n * @param duration_2 Second input can be a number in minutes or a duration string e.g. `30 minutes`\n */\nexport function durationGreaterThanOrEqual(\n duration_1: string | number,\n duration_2: string | number\n) {\n const first: number = typeof duration_1 === 'string' ? stringToMinutes(duration_1) : duration_1;\n const second: number =\n typeof duration_2 === 'string' ? stringToMinutes(duration_2) : duration_2;\n return first >= second;\n}\n\n/**\n * Conver time string into minutes\n * @param str timestring e.g. `'1 day'`, `'15 minutes'`, `'2 weeks'`\n */\nexport function stringToMinutes(str: string): number {\n const parts = str.split(' ');\n return +parts[0] * DURATION_MAP[parts[1]];\n}\n\n/**\n * Get current status within bookings\n * @param bookings List of bookings\n * @param host Host of the new event\n * @param date Datetime of the new event\n */\nexport function statusFromBookings(\n bookings: Booking[] = [],\n bookable: boolean = true,\n requestable: boolean = false,\n dateTz: DateTZ = DateNow(),\n space?: Space\n) {\n const free_slots = getFreeBookingSlots(bookings.filter((bkn) => !bkn.declined));\n const now = DateNow() // new DateTZ({date}); // now should be now\n // commeted bellow piece as correct way to get next free booking slot is at line- 488\n // const next_free_slot = free_slots.find((slot) => {\n // return slot && (slot.start > now.ms || now.ms > slot.start - slot.start % 1000 || now.ms < slot.end - slot.end % 60 * 1000);\n // // const start = new DateTZ({date: slot?.start || 0 });\n // // const end = new DateTZ({date: slot?.end || 0}); // slot end isn't late enough? or after now/\n // // return start.isAfterDate(now) || (now.isAfterDate(start.startOfValue('second')) && now.isBeforeDate(end.startOfValue('minute')))\n // });\n\n const next_free_slot = getNextFreeBookingSlot(bookings.filter((bkn) => !bkn.declined), dateTz.ms);\n \n const start = new DateTZ({date: next_free_slot?.start || 0});\n const end = new DateTZ({date: next_free_slot?.end || 0});\n const currently_free = dateTz.isAfterDate(start.startOfValue('second')) && dateTz.isBeforeDate(end.startOfValue('minute'));\n const time_until_next_block = humaniseDuration(\n currently_free ? end.dateDiff(dateTz, 'minutes') : start.dateDiff(dateTz, 'minutes'),\n 'short'\n );\n\n const free_tomorrow = !currently_free && !start.isSameDate(dateTz, 'day');\n const free_today = currently_free && !end.isSameDate(dateTz, 'day');\n \n return {\n status: (!bookable\n ? SpaceStatus.NotBookable\n : currently_free\n ? requestable\n ? SpaceStatus.Requestable\n : SpaceStatus.Available\n : SpaceStatus.InProgress) as SpaceStatus,\n available_until: free_today\n ? 'No meetings today'\n : currently_free\n ? `Free until ${end.formatDate(timeFormatString())}(${time_until_next_block})`\n : free_tomorrow\n ? 'Unavailable today'\n : `Free at ${start.formatDate(timeFormatString())}(${time_until_next_block})`\n };\n}\n\n/**\n * V1 version display.\n */\nexport const spaceStatusToDisplay = (status: SpaceStatus): string => {\n switch (status) {\n case SpaceStatus.NotBookable:\n return 'Not Bookable';\n case SpaceStatus.Requestable:\n return 'Available by Request';\n case SpaceStatus.Unavailable:\n return 'Unavailable';\n case SpaceStatus.InProgress:\n return 'Meeting in Progress';\n case SpaceStatus.Available:\n default:\n return 'Available';\n }\n};\n\nexport function replaceBookings(\n list: Booking[],\n new_bookings: Booking[],\n filter_options: { room_email: string; fromTz: DateTZ; toTz: DateTZ }\n) {\n const filtered_list = list.filter((booking) => {\n return (\n !(booking.multi_rooms.some(room => room?.email === filter_options.room_email)) ||\n !timePeriodsIntersect(filter_options.fromTz.ms, filter_options.toTz.ms, booking.startDateTz.ms, booking.endDateTz.ms)\n );\n });\n const updated_list = filtered_list.concat(new_bookings);\n updated_list.sort((a, b) => a.date - b.date);\n return unique(updated_list, 'icaluid');\n}\n\nexport function timePeriodsIntersect(\n start1: number,\n end1: number,\n start2: number,\n end2: number,\n type = ''\n) {\n return (\n (start1 >= start2 && start1 < end2) ||\n (end1 > start2 && end1 <= end2) ||\n (start2 >= start1 && start2 < end1) ||\n (end2 > start1 && end2 <= end1)\n );\n}\n\nexport function formatWhen({\n all_day,\n startTZ,\n endTZ,\n displayEndTZ\n}): string {\n if (all_day) {\n return `${startTZ.formatDate('dd MMM yyyy')} - All Day`;\n } else {\n if (startTZ.isSameDate(endTZ, 'day')) {\n return `${startTZ.formatDate('dd MMM yyyy, h:mma')} - ${displayEndTZ.formatDate('h:mma')}`;\n } else {\n return `${startTZ.formatDate('dd MMM yyyy, h:mma')} - ${displayEndTZ.formatDate('dd MMM yyyy, h:mma')}`;\n }\n }\n}\n\nexport const isIncludes = (item: any, field: string, searchVaue: string) => (item && item[field] && item[field].toLowerCase().includes(searchVaue));\n\nexport function searchRoomsAndBookings(allItems: (Space | Booking)[], searchValue: string, isConcierge:boolean = false) {\n\n let relevantItems: (Space | Booking)[] = [];\n\n if(isConcierge) {\n relevantItems = allItems.filter( (item: any ) => \n isIncludes(item, 'title', searchValue) ||\n isIncludes(item.creator, 'name', searchValue) ||\n isIncludes(item.organiser, 'name', searchValue) ||\n isIncludes(item, 'simple_name', searchValue) || // search with room name \n (item?.attendees && !!item?.attendees.filter(el => el.name.toLowerCase().includes(searchValue)).length ) \n );\n } else {\n relevantItems = allItems.filter( (item: any ) => \n this.isIncludes(item.creator, 'name', searchValue) ||\n this.isIncludes(item.organiser, 'name', searchValue) ||\n this.isIncludes(item, 'simple_name', searchValue) \n );\n }\n\n const filteredItems = this.duplicateMultiroomEntriesIfAny(relevantItems);\n \n return filteredItems;\n} \n\nexport function duplicateMultiroomEntriesIfAny(bookings) {\n // Initialize an array to hold the original and duplicated entries \n const updatedBookings = [...bookings];\n\n // Loop through the original bookings array \n [...bookings].forEach(booking => {\n if(booking?.is_multiroom) {\n // calculate the number of times to duplicates the booking\n const duplicatesCount = booking.multi_rooms.filter(el => el.id !== booking.space.id);\n\n // Create the duplicate and add them to the updatedBookings array.\n for(let i = 0; i < duplicatesCount.length; i++) {\n // Deep copy the booking to ensure references are not copied\n const duplicatedBooking = cloneDeep(booking); \n duplicatedBooking.room = duplicatesCount[i]; \n updatedBookings.push(duplicatedBooking);\n }\n }\n });\n\n // Return the array with duplicated entries \n return updatedBookings;\n\n}\n \n","\nimport { Injectable } from '@angular/core';\nimport { ComposerService } from '@placeos/composer';\nimport { BaseAPIService } from '../base.service';\nimport { Booking, IBookingQueryOptions } from './booking.class';\nimport { bookingOptionsToQuery } from './booking.utilities';\nimport {\n HashMap\n} from '@mckinsey-converge/base';\nimport { ServiceManager } from '../service-manager.class';\nimport { SettingsService } from '../settings.service';\nimport { BookingCheckinParams } from './space.types';\nimport { DateNow } from \"@mckinsey-converge/date-tz\";\nimport { Observable } from 'rxjs/internal/Observable';\nimport { forkJoin } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BookingsService extends BaseAPIService {\n constructor(protected _composer: ComposerService,\n settingsService: SettingsService,\n ) {\n super(_composer, settingsService);\n ServiceManager.setService(Booking, this);\n this._name = 'Bookings';\n this._api_route = 'bookings';\n this._compare = (a, b) => !(a.id || '').localeCompare(b.id) || !(a.icaluid || '').localeCompare(b.icaluid);\n }\n\n /**\n * Get user bookings\n * @param options\n */\n public userBookings(options: IBookingQueryOptions,\n uniqueId?: string): Promise {\n if (!options) {\n throw new Error('Booking avilability requires request options');\n }\n const now = DateNow(new Date())\n if (!options.from) {\n options.from = now\n .startOfValue('day')\n .subtractValue({ days: 2 })\n .ms;\n }\n if (!options.until) {\n options.until = null;\n }\n\n const key = `bookings|${options.id ? options.id : ''}|${uniqueId ?? ''}`;\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const respond = (list: Booking[]) => {\n delete this._promises[key];\n resolve(list);\n };\n const error = e => {\n reject(e);\n delete this._promises[key];\n };\n const query = bookingOptionsToQuery(options);\n if (options.id) {\n this.show(options.id, query).then(i => respond([i]), error);\n } else {\n this.query(query).then(respond, error);\n }\n });\n }\n return this._promises[key];\n }\n\n\n /**\n * Save changes to the booking\n * @param booking Booking update or add to the database\n */\n public save(booking: Booking, series?: boolean): Promise {\n const body = booking.toApiJSON()\n if(series){\n body.series = true\n }\n return booking.id ? this.update(booking.id, body) : this.add(body);\n }\n\n /**\n * Checkin atteendee of a booking\n * @param id ID of the booking\n * @param fields Fields associated with the booking and attendee\n */\n public checkin(id: string, fields: BookingCheckinParams) {\n return this.task(id, 'checkin', fields);\n }\n public checkinIndividualVisitor(id: string, fields: BookingCheckinParams) {\n return this.taskObsr(id, 'checkin', fields); \n }\n\n public accept(id: string, fields?: HashMap) {\n return this.task(id, 'accept', fields);\n }\n\n public undo(id: string, status: 'accept' | 'decline', fields?: HashMap) {\n return this.task(id, status, fields);\n }\n\n public decline(id: string, fields?: HashMap) {\n return this.task(id, this.settingsService.concierge ? 'concierge_decline' : 'decline', fields);\n }\n\n protected process(raw_data: HashMap): Booking {\n return new Booking(raw_data);\n }\n\n public declineMultiple(bookings: Booking[]): Observable {\n const requests = [];\n bookings.forEach(bkg => {\n const booking = bkg.toJSON();\n const id = booking.id;\n const fields = {\n booking_id: booking.id,\n organiser: booking.organiser.email,\n room_email: booking.space?.email,\n icaluid: booking.icaluid,\n start: booking.startDateTz.formatDate('h:mm a').toLocaleLowerCase(),\n end: booking.endDateTz.formatDate('h:mm a').toLocaleLowerCase(),\n };\n if (bkg.is_recurrent && bkg.recurrence_type === 'master') {\n // Add series=true for recurrent bookings\n fields['series'] = true;\n } \n requests.push(this.taskObsr(id, 'concierge_decline', fields) ); \n });\n return forkJoin(requests);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ComposerService } from '@placeos/composer';\nimport { PaginatedAPIService } from '../paginated.service';\nimport { Booking, IBookingQueryOptions, } from './booking.class';\nimport { bookingOptionsToQuery } from './booking.utilities';\nimport {\n HashMap\n} from '@mckinsey-converge/base';\nimport { ServiceManager } from '../service-manager.class';\nimport { SettingsService } from '../settings.service';\nimport { BookingCheckinParams } from './space.types';\nimport { Observable } from 'rxjs';\n\nexport interface PaginatedBooking {\n results: Booking[];\n total: number;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BookingsPaginatedService extends PaginatedAPIService {\n constructor(protected _composer: ComposerService,\n settingsService: SettingsService,\n ) {\n super(_composer, settingsService);\n ServiceManager.setService(Booking, this);\n this._name = 'Bookings';\n this._api_route = 'bookings';\n this._compare = (a, b) => !(a.id || '').localeCompare(b.id) || !(a.icaluid || '').localeCompare(b.icaluid);\n }\n\n /**\n * Get user bookings\n * @param options\n */\n public userBookings(options: IBookingQueryOptions,\n uniqueId?: string): Promise {\n if (!options) {\n throw new Error('Booking avilability requires request options');\n }\n\n const key = `bookingsPaginated|${options.id ? options.id : ''}|${uniqueId ?? ''}`;\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const respond = (response: any) => {\n delete this._promises[key];\n resolve(response);\n };\n const error = e => {\n reject(e);\n delete this._promises[key];\n };\n const query = bookingOptionsToQuery(options);\n if (options.id) {\n this.show(options.id, query).then(i => respond([i]), error);\n } else {\n this.query(query).then(respond, error);\n }\n });\n }\n\n return this._promises[key];\n }\n\n\n /**\n * Save changes to the booking\n * @param booking Booking update or add to the database\n */\n public save(booking: Booking): Promise {\n return booking.id ? this.update(booking.id, booking.toJSON()) : this.add(booking.toJSON());\n }\n\n /**\n * Checkin atteendee of a booking\n * @param id ID of the booking\n * @param fields Fields associated with the booking and attendee\n */\n public checkin(id: string, fields: BookingCheckinParams) {\n return this.task(id, 'checkin', fields);\n }\n\n public accept(id: string, fields?: HashMap) {\n return this.task(id, 'accept', fields);\n }\n\n public decline(id: string, fields?: HashMap) {\n return this.task(id, this.settingsService.concierge ? 'concierge_decline' : 'decline', fields);\n }\n\n public undo(id: string, status: 'accept' | 'decline', fields?: HashMap) {\n return this.task(id, status, fields);\n }\n\n protected process(raw_data: HashMap): Booking {\n return new Booking(raw_data);\n }\n\n // public getHoldingBay(query: IBookingQueryOptions): Promise {\n // const key = `bookingsPaginated|holding-bay`;\n // if (!this._promises[key]) {\n // this._promises[key] = new Promise((resolve, reject) => {\n // const respond = (response: any) => {\n // delete this._promises[key];\n // resolve(response);\n // };\n // const error = e => {\n // reject(e);\n // delete this._promises[key];\n // }; \n // this.query(query, { url: '/api/staff/bookings/holding_bay' }).then(respond, error);\n // });\n // }\n\n // return this._promises[key];\n // }\n\n public getHoldingBay = (query: IBookingQueryOptions): Observable => this.queryHoldingBay(query, { url: '/api/staff/bookings/holding_bay' });\n}\n","export * from './booking.class'\nexport * from './space.types'\nexport * from './bookings.service'\nexport * from './bookingsPaginated.service'\nexport * from './booking.utilities'\nexport * from './booking-state.service'\nexport * from './space.utilities'\nexport * from './booking.types'\n","import { SpaceRules } from './booking.types';\n\nimport {\n durationGreaterThanOrEqual,\n stringToMinutes\n} from './booking.utilities';\nimport {\n SpaceCheckOptions,\n SpaceRuleOptions\n} from './space.types';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n/**\n * Get booking rules for the given user and space\n * @param options\n */\nexport function rulesForSpace(options: SpaceRuleOptions): SpaceRules {\n if (!options) {\n throw Error('Options are needed to check for rule matches');\n }\n const space_rules_for_user: SpaceRules = {\n auto_approve: true,\n hide: true,\n reason: ''\n };\n let match = false;\n /* istanbul ignore else */\n if (options.space) {\n for (const type in options.rules) {\n if (\n options.rules.hasOwnProperty(type) &&\n options.rules[type] instanceof Array &&\n options.space.zones.find((zone) => zone === type)\n ) {\n for (const rule_block of options.rules[type]) {\n /* istanbul ignore else */\n if (\n checkRules({\n user: options.user,\n space: options.space,\n time: options.time,\n duration: options.duration,\n rules: rule_block.conditions\n })\n ) {\n const ruleset = rule_block.rules;\n const conditions = rule_block.conditions;\n space_rules_for_user.hide = false;\n /* istanbul ignore else */\n if (conditions.max_length) {\n space_rules_for_user.max_length = stringToMinutes(\n conditions.max_length as string\n );\n }\n /* istanbul ignore else */\n if (conditions.min_length) {\n space_rules_for_user.min_length = stringToMinutes(\n conditions.min_length as string\n );\n }\n // NOTE: use max_length in conditions instead of book_length in rules\n // if (ruleset.book_length) {\n // space_rules_for_user.max_length = stringToMinutes(ruleset.book_length as string);\n // }\n /* istanbul ignore else */\n if (ruleset.auto_approve !== undefined) {\n space_rules_for_user.auto_approve = ruleset.auto_approve;\n }\n match = true;\n space_rules_for_user.reason = '';\n break;\n }\n else {\n space_rules_for_user.reason = 'OfficeRules';\n }\n }\n }\n \n /* istanbul ignore else */\n if (!space_rules_for_user.hide) {\n break;\n }\n }\n }\n if (!match) {\n space_rules_for_user.hide = true;\n }\n return space_rules_for_user;\n}\n\n\n/**\n * Check if user matches the given ruleset\n * @param options\n */\nfunction checkRules(options: SpaceCheckOptions): boolean {\n /* istanbul ignore else */\n if (options.rules) {\n const time = new DateTZ({date: options.time});\n const count = Object.keys(options.rules).length;\n let matches = 0;\n Object.keys(options.rules).forEach((key) => {\n let counter = 0;\n const condition: string[] =\n options.rules[key] instanceof Array\n ? (options.rules[key] as [])\n : [options.rules[key] as string];\n switch (key) {\n case 'groups':\n /* istanbul ignore else */\n if (options.user && options.user.groups) {\n counter = 0;\n condition.forEach((i) =>\n options.user.groups.find((j) => j === i) ? counter++ : null\n );\n /* istanbul ignore else */\n if (counter > 0) {\n matches++;\n }\n }\n break;\n case 'locations':\n /* istanbul ignore else */\n if (options.user && options.user.location) {\n counter = 0;\n condition.forEach((i) =>\n (options.user.last_location.name || '').indexOf(i) >= 0\n ? counter++\n : null\n );\n /* istanbul ignore else */\n if (counter >= options.rules[key].length) {\n matches++;\n }\n }\n break;\n case 'is_before':\n /* istanbul ignore else */\n if (options.time) {\n const duration = stringToMinutes(condition[0]);\n const check = DateNow(new Date()).addValue({ minutes: duration });\n let match = time.isBeforeDate(check);\n /* istanbul ignore else */\n matches += match ? 1 : 0;\n }\n break;\n case 'is_after':\n /* istanbul ignore else */\n if (options.time) {\n\n const duration = stringToMinutes(condition[0]);\n const check = DateNow(new Date());\n time.isAfterDate(check.addValue({ minutes: duration })) ? matches++ : '';\n }\n break;\n case 'min_length':\n /* istanbul ignore else */\n if (\n options.duration &&\n durationGreaterThanOrEqual(options.duration, condition[0])\n ) {\n matches++;\n }\n break;\n case 'max_length':\n /* istanbul ignore else */\n if (\n options.duration &&\n durationGreaterThanOrEqual(condition[0], options.duration)\n ) {\n matches++;\n }\n break;\n }\n });\n return matches >= count;\n }\n return false;\n}\n","\nimport { Injectable } from '@angular/core';\nimport { ComposerService } from '@placeos/composer';\nimport { CateringCategory } from './catering-category.class';\nimport { BaseAPIService } from '../base.service';\nimport { SettingsService } from '../settings.service';\nimport { ServiceManager } from '../service-manager.class';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CateringCategoriesService extends BaseAPIService {\n\n constructor(protected _composer: ComposerService,\n settingsService: SettingsService) {\n super(_composer, settingsService);\n ServiceManager.setService(CateringCategory, this);\n this._name = 'catering category/group';\n this._api_route = 'catering/category';\n }\n\n public query(): never {\n throw Error('No index endpoint for catering categories. Use catering menu service.');\n }\n\n public show(): never {\n throw Error('No show endpoint for catering categories. Use catering menu service.');\n }\n\n public processItem(raw_item: any) {\n return new CateringCategory(raw_item);\n }\n\n public format(item: CateringCategory) {\n return { ...item };\n }\n}\n","import { CateringItem } from \"./catering-item.class\";\nimport { HashMap } from '@mckinsey-converge/base';\n\nexport class CateringCategory extends CateringItem {\n /** Whether item is a category */\n public is_category = true;\n public admin_only: boolean;\n\n constructor(data: HashMap) {\n super(data);\n this.is_category = true;\n (this as any).must_select = this.must_select || 0;\n (this as any).order_anytime = !!data.order_anytime && this.package;\n }\n\n /**\n * Convert class object into plain object\n */\n public toJSON(this: CateringItem): HashMap {\n const obj = super.toJSON();\n obj.order_anytime = !!obj.order_anytime && obj.package;\n return obj;\n }\n}\n","import { HashMap } from '@mckinsey-converge/base';\n\nexport interface CateringAvailability {\n /** Month of the year that the item starts being available */\n readonly from_month: number;\n /** Month of the year that the item ends being available */\n readonly to_month: number;\n}\n\nexport class CateringItem {\n /** Unique ID of the catering item */\n public readonly id: string;\n /** Display name of the catering item */\n public readonly name: string;\n /** Description of the item */\n public readonly description: string;\n /** URL to the image associated with the item */\n public readonly image_path: string;\n /** Type of catering item */\n public readonly catering_type: string;\n /** Availability of the item */\n public readonly available: CateringAvailability;\n /** Time in hours that is needed to prepare the item beforehand */\n public readonly prior_notice: number;\n /** Cost of the item without decimals */\n private unit_price: number;\n /** Cost of the item without decimals */\n public readonly supplier_cost: number;\n /** Minimum number this item allowed in an order */\n public readonly minimum_quantity: number;\n /** Maximum number this item allowed in an order */\n public readonly maximum_quantity: number;\n /** List of categories that the item is contained in */\n public readonly parent_categories: readonly string[];\n /** Allegen information associated with the item */\n public readonly allergy: string;\n /** Whether the supply of this item has run out */\n public out_of_stock: boolean;\n /** Whether item can be ordered within the time limit set by the building */\n public readonly order_anytime: boolean;\n /** Number of child items that must be selected as part of the package */\n public readonly must_select: number;\n /** List of associated items */\n public readonly items: CateringItem[];\n public readonly availableItems: CateringItem[];\n /** Whether child items are part of a package */\n public readonly package: boolean;\n /** List of zone ids associated with the category */\n public readonly zones: readonly string[];\n /** Number of this item in the assoicated order */\n private _amount = 0;\n /** Unique ID of the catering item */\n private instance_id: string;\n /** Whether item is a category */\n public is_category: boolean = false;\n /** Whether item is disabled in Staff App */\n public admin_only: boolean;\n\n public get can_order_anytime(): boolean {\n return (\n this.order_anytime ||\n !this.package && this.items.reduce(\n (anytime, item) => anytime || item.can_order_anytime,\n false,\n )\n );\n }\n\n /** Number of this item in the assoicated order */\n public get amount(): number {\n return this._amount || 0;\n }\n\n /** Unit price in the assoicated order */\n public get price(): number {\n return this.unit_price || 0;\n }\n\n /** Total cost of the amount of items set */\n public get total(): number {\n return (this._amount * this.unit_price) || 0;\n }\n\n constructor(data: HashMap) {\n this.instance_id = `item-${Math.floor(Math.random() * 999_999_999)}`;\n this.id = data.id || '';\n this.name = data.name || '';\n this.is_category = this.id.includes('category-');\n this.available = {\n from_month: (data.available ? data.available.from_month : data.available_from) || -1,\n to_month: (data.available ? data.available.to_month : data.available_to) || -1,\n };\n this.description = data.description || '';\n this.prior_notice = data.prior_notice || data.notice;\n this.unit_price = data.unit_price || data.price || 0;\n this.supplier_cost = data.supplier_cost;\n this.minimum_quantity = Math.max(0, data.minimum_quantity || 0);\n this.maximum_quantity = Math.max(1, data.maximum_quantity || 999);\n this.parent_categories = data.category_ids || data.parent_categories || data.categories;\n this.order_anytime = !!data.order_anytime;\n this.image_path = data.image_path || '';\n this.admin_only = data.admin_only;\n this.catering_type = data.catering_type;\n this.must_select = data.must_select ?? 0;\n this._amount = data._amount || data.amount || 0;\n this.allergy = data.allergy || '';\n const cateringItems: CateringItem[] = (data.items || []).map(item => new CateringItem(item));\n this.items = cateringItems;\n const filteredCateringItems = cateringItems.filter(c => !c.out_of_stock);\n this.availableItems = filteredCateringItems;\n this.out_of_stock = !!data.out_of_stock ||\n // if original items are empty, we hit the bottom, so if we filter out items then its out of stock.\n (cateringItems.length > 0 && filteredCateringItems.length === 0);\n this.package = data.package === 'true' || data.package === true;\n this.zones = data.zones && data.zones.length ? [...data.zones] : [];\n }\n\n public setAmount(amount: number = 0): void {\n if (amount <= this._amount) {\n if (amount < this.minimum_quantity) {\n amount = 0;\n }\n } else {\n if (amount < this.minimum_quantity) {\n amount = this.minimum_quantity;\n }\n }\n this._amount = Math.max(0, Math.min(this.maximum_quantity, amount));\n }\n\n /**\n * Updates the unit_price in the assoicated order if necessary\n * @param price value to compare to unit_price\n */\n public setPrice(price: number = 0): void {\n if(this.unit_price !== price) this.unit_price = price;\n }\n\n /**\n * Increase amount of the item the order\n * @param amount Amount to increase by\n */\n public addToOrder(amount: number = 1) {\n amount = Math.max(1, amount);\n this._amount += amount;\n if (this._amount < 0) {\n this._amount = 0;\n } else if (this._amount < this.minimum_quantity) {\n this._amount = this.minimum_quantity;\n } else if (this._amount > this.maximum_quantity) {\n this._amount = this.maximum_quantity;\n }\n }\n\n /**\n * Decrease amount of the item the order\n * @param amount Amount to decrease by\n */\n public removeFromOrder(amount: number = 1) {\n amount = Math.max(1, amount);\n this._amount -= amount;\n if (this._amount < 0) {\n this._amount = 0;\n } else if (this._amount < this.minimum_quantity) {\n this._amount = 0;\n }\n }\n\n /**\n * Convert class object into plain object\n */\n public toJSON(this: CateringItem): HashMap {\n const obj: any = { ...this };\n // Remove local private members\n delete obj._changes;\n delete obj._server_names;\n // Convert remaining members to be public\n obj.price = obj.unit_price;\n obj.categories = obj.parent_categories;\n const keys = Object.keys(obj);\n for (const key of keys) {\n if (key[0] === '_') {\n const new_key = key.substr(1);\n obj[new_key] = obj[key];\n delete obj[key];\n } else if (obj[key] === undefined) {\n delete obj[key];\n }\n }\n obj.items = obj.items.map((item: CateringItem) => item.toJSON());\n return obj;\n }\n}\n","\nimport { Injectable } from '@angular/core';\nimport { ComposerService } from '@placeos/composer';\nimport { BaseAPIService } from '../base.service';\nimport { CateringItem } from './catering-item.class';\nimport { SettingsService } from '../settings.service';\nimport { ServiceManager } from '../service-manager.class';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CateringItemsService extends BaseAPIService {\n constructor(protected _composer: ComposerService,\n settingsService: SettingsService) {\n super(_composer, settingsService);\n ServiceManager.setService(CateringItem, this);\n this._name = 'Catering Menu';\n this._api_route = 'catering/item';\n }\n\n public query(): never {\n throw Error('No index endpoint for catering items. Use menu service.');\n }\n\n public show(): never {\n throw Error('No show endpoint for catering items. Use menu service.');\n }\n\n public processItem(raw_item: any) {\n return new CateringItem(raw_item);\n }\n\n public format(item: CateringItem) {\n return item instanceof CateringItem ? item.toJSON() : item;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ComposerService } from '@placeos/composer';\n\nimport { CateringItem } from './catering-item.class';\nimport { CateringCategory } from './catering-category.class';\nimport { BaseAPIService } from '../base.service';\nimport { HashMap } from '@mckinsey-converge/base';\nimport { SettingsService } from '../settings.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CateringMenuService extends BaseAPIService {\n constructor(protected _composer: ComposerService,\n settingsService: SettingsService) {\n super(_composer, settingsService);\n this._name = 'Catering Menu';\n this._api_route = 'menu';\n }\n\n /**\n * Convert user data to local format\n * @param user User data\n */\n protected processItem(item: HashMap) {\n return item.items ? new CateringCategory(item) : new CateringItem(item);\n }\n}\n","\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CateringNotesService {\n\n public cateringNotes = [];\n\n \n public setNotes(notes) {\n this.cateringNotes = notes;\n }\n\n public getNotes() {\n return this.cateringNotes;\n }\n}","import { CateringItem } from './catering-item.class';\nimport { HashMap } from '@mckinsey-converge/base';\n\nimport { CateringCategory } from './catering-category.class';\nimport { Booking } from '../bookings';\n\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\nexport type CateringOrderMutableProperties =\n | 'items'\n | 'location_id'\n | 'location'\n | 'delivery_time'\n | 'charge_code'\n | 'notes'\n | 'status';\n\nexport type CateringOrderStatus = 'accepted' | 'preparing' | 'ready' | 'delivered' | 'cancelled';\n\nconst now = DateNow(new Date());\n\n// R--- refactor booking date to be dateTz\nexport class CateringOrder {\n /**\n * Booking fields\n * \n * The app handles booking data inconsisently. Ususally these booking fields are provided\n * for related booking data, but on occasion the full Booking class is used.\n */\n\n /** Unique Booking ID for the catering order */\n readonly booking_id: string;\n /** \n * Timestamp based booking time of the booking associated with the order\n * \n * Must be provide as the true Booking startDateTz or as a new DateTZ with \n * the correct date: timestamp, local_tz = false and bulding_tz values\n */\n readonly booking_date: number;\n /**\n * Timezone of the booking associated with the order\n */\n readonly booking_timezone: string;\n /** ID of the location to deliver the items to */\n location_id: string = '';\n /** Display text for the location to deliver the items to */\n location: string = '';\n /**\n * Smart timezone aware catering datetime with timezone\n */\n readonly bookingDateTz: DateTZ;\n\n /** \n * Booking associated with the order \n * \n * The booking attached to the CateringOrder is a special case used \n * mainly on the Concierge catering reports because someone created \n * a bad pattern to save catering changes to the booking. \n * \n * Avoid when possible.\n */\n public booking: Booking = null;\n\n /**\n * Catering specific fields\n * \n * The app handles booking data inconsisently. Ususally these booking fields are provided\n * for related booking data, but on occasion the full Booking class is used.\n */\n\n /** Whether the order status change is loading */\n public loading: boolean;\n /** Unique ID for the catering order */\n readonly id: string;\n /** Number of minutes after the start of the associated meeting to delivery the order */\n readonly delivery_time: number = 0;\n /** Status of the catering order */\n readonly status: CateringOrderStatus;\n /** Whether items in the order need to be prepared in the kitchen */\n readonly kitchen: boolean;\n /** Whether items in the order are in the pantry */\n readonly pantry: boolean;\n /** List of items */\n readonly items: readonly (CateringItem | CateringCategory)[] = [];\n /** Creation time of the order */\n readonly created_at: number;\n /** Charge code associated with the order */\n readonly charge_code: string;\n /** Notes associated with the order */\n readonly notes: string;\n // /** Mapping of properties to their changes */\n // private _changes: HashMap = {};\n /** Map of local property names to server ones */\n protected _server_names: HashMap = {};\n /** Currency code for the location of the order */\n public symbol: string;\n /** Whether the is an error with the order */\n public error: boolean;\n\n\n constructor(data: HashMap) {\n /** \n * Setup Defaults when raw_data values are not provided\n */\n const nowTz = DateNow(new Date());\n // now rounded to the next 5 minute increment\n const defaultStartTz = nowTz.setValue({ minute: Math.ceil(nowTz.minutes / 5) * 5 });\n const defaultLocalTimezone = Intl?.DateTimeFormat()?.resolvedOptions()?.timeZone;\n\n this.id = data.id || `order-${Math.floor(Math.random() * 999_999_999)}`;\n\n // If the booking is provided default the booking values to the true booking values\n this.booking = data.booking || null;\n\n \n // Has a booking so init with those values\n if (this.hasBookingAttached) {\n this.booking_date = this.booking.startDateTz.ms;\n this.booking_timezone = this.booking.timezone;\n this.bookingDateTz = this.booking.startDateTz;\n this.location_id = data.location_id || '';\n this.location = data.location || '';\n } else {\n this.booking_date = data.booking_date || defaultStartTz.ms;\n this.booking_timezone = data.booking_timezone || defaultLocalTimezone;\n this.bookingDateTz = new DateTZ({ date: this.booking_date, is_local_tz: false, building_tz: this.booking_timezone });\n this.location_id = data.location_id || '';\n this.location = data.location || '';\n }\n \n this.delivery_time = typeof data.delivery_time === 'number' ? data.delivery_time : 0;\n this.status = data.status || 'accepted';\n this.charge_code = data.charge_code || data.code;\n this.notes = data.notes;\n this.kitchen = data.kitchen instanceof Array ? !!data.kitchen.length : data.kitchen;\n this.pantry = data.pantry instanceof Array ? !!data.pantry.length : data.pantry;\n this.symbol = data.symbol || 'USD';\n this.items = (data.items || [])\n .map(item => (item.items ? new CateringCategory(item) : new CateringItem(item)))\n .filter(item => !!item.amount);\n }\n\n /** Special Case, check if a full booking is attached */\n public get hasBookingAttached(): boolean {\n return !!this.booking;\n }\n\n /** Display string for the types of items in the order */\n public get type(): string {\n let type = '';\n /* istanbul ignore else */\n if (this.kitchen) type += 'Kitchen';\n /* istanbul ignore else */\n if (this.pantry) {\n /* istanbul ignore else */\n if (type) type += ' + ';\n type += 'Pantry';\n }\n return type;\n }\n\n /** Total cost of the order */\n public get total(): number {\n return this.items.reduce((total, item) => total + (item.total || 0), 0);\n }\n\n /** Total number of items in the order */\n public get item_count(): number {\n return this.items.reduce((total, item) => total + (item.amount || 0), 0);\n }\n\n public get deliver_date(): DateTZ {\n return (this.bookingDateTz || this.booking?.startDateTz).addValue({ minutes: this.delivery_time })\n }\n\n /** Display string for the delivery time of the order (short version) */\n public get deliver_at(): string {\n return this.deliver_date.formatDate('h:mm a');\n }\n\n /** Display string for the delivery time of the order */\n public get deliver_at_time(): string {\n return this.deliver_date.formatDate('h:mma').toLocaleLowerCase();\n }\n\n /** Display string for the delivery date of the order */\n public get deliver_on_date(): string {\n return this.deliver_date.formatDate('dd MMM yyyy');\n }\n\n /**\n * Make a copy of this object\n */\n public clone(): CateringOrder {\n return new CateringOrder(this.toJSON());\n }\n\n /**\n * Convert class object into plain object\n */\n public toJSON(this: CateringOrder): HashMap {\n const obj: any = { ...this };\n // Remove local private members\n delete obj._server_names;\n // Remove local public members\n delete obj.booking;\n delete obj.loading;\n delete obj.bookingDateTz;\n\n // Convert remaining members to be public\n const keys = Object.keys(obj);\n for (const key of keys) {\n if (key[0] === '_') {\n const new_key = this._server_names[key.substr(1)] || key.substr(1);\n obj[new_key] = obj[key];\n delete obj[key];\n } else if (obj[key] === undefined) {\n delete obj[key];\n }\n }\n obj.items = obj.items.map((item: CateringItem) => item.toJSON());\n\n return obj;\n }\n}\n","import { CateringItem } from './catering-item.class';\n\nexport const mergeCateringItemWithFormData = (existing: CateringItem, override: any) =>\n new CateringItem({\n ...(existing instanceof CateringItem ? existing.toJSON() : existing),\n ...override\n });\n","export * from './catering-item.class';\nexport * from './catering-category.class';\nexport * from './catering-menu.service';\nexport * from './catering-order.class';\nexport * from './catering-categories.service';\nexport * from './catering-items.service';\nexport * from './catering.utilities';\nexport * from './catering-notes.service';\n","import { Injectable } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CloseDialogService {\n private dialogRefMap = new Map>();\n\n constructor() { }\n\n // Register a dialog with its ID\n registerDialog(id: string, dialogRef: MatDialogRef): void {\n this.dialogRefMap.set(id, dialogRef);\n }\n\n // Close a specific dialog by ID\n closeDialog(id: string): void {\n const dialogRef = this.dialogRefMap.get(id);\n if (dialogRef) {\n dialogRef.close();\n this.dialogRefMap.delete(id);\n }\n }\n\n // Optional: Close all dialogs\n closeAllDialogs(): void {\n this.dialogRefMap.forEach((dialogRef, id) => {\n dialogRef.close();\n this.dialogRefMap.delete(id);\n });\n }\n}\n\nexport enum DialogIds {\n MeetingDetails = 'meetingDetailsDialogId',\n BookingConfirmation = 'bookingConfirmationDialogId',\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CollapseService {\n private collapseSubject = new BehaviorSubject(false);\n collapse$ = this.collapseSubject.asObservable();\n\n collapsePanel() {\n this.collapseSubject.next(false);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class DataCommonModule {}\n","import { Injectable } from '@angular/core';\nimport {\n BehaviorSubject,\n Observable,\n Subscription\n} from 'rxjs';\n\nimport {\n HashMap,\n unique\n} from '@mckinsey-converge/base';\n\n/** List of keys that cannot be in a combination by themselves or with each other */\nconst INVALID_STANDALONE_KEYS: string[] = ['control', 'shift', 'alt', 'meta', 'os'];\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HotkeysService {\n /** Map of subjects which store press states of keys */\n private keydown_states: HashMap> = {};\n /** Map of obserers for key state subjects */\n private keydown_observers: HashMap> = {};\n /** List of keys at the end of a combination */\n private combo_end: string[] = [];\n /** List of registered hotkey combinations */\n private registered_combos: string[][] = [];\n /** Counter for the number of keydown events. Used for checking order of key presses */\n private counter: number = 0;\n /** Last key code to be pressed */\n private last_down: string;\n\n constructor() {\n window.addEventListener('keydown', (event: KeyboardEvent) => {\n const code = this.mapKey((event.code || '').toLowerCase());\n /* istanbul ignore else */\n if (this.last_down !== code) {\n /* istanbul ignore else */\n if (!this.keydown_states[code]) {\n this.keydown_states[code] = new BehaviorSubject(null);\n this.keydown_observers[code] = this.keydown_states[code].asObservable();\n }\n this.keydown_states[code].next(++this.counter);\n /* istanbul ignore else */\n if (this.combo_end.indexOf(code) >= 0) {\n event.preventDefault();\n }\n this.last_down = code;\n }\n });\n\n window.addEventListener('keyup', (event: KeyboardEvent) => {\n const code = this.mapKey((event.code || '').toLowerCase());\n /* istanbul ignore else */\n if (this.keydown_states[code]) {\n this.keydown_states[code].next(null);\n }\n /* istanbul ignore else */\n if (this.last_down === code) {\n this.last_down = null;\n }\n });\n }\n\n /**\n * Listen to the given key combination\n * @param combo Array of key codes to listen to or a hotkey string e.g. `Alt+Shift+KeyK`\n * @param next Callback for combination presses\n */\n public listen(combo: string | string[], next: () => void): Subscription {\n combo = (combo instanceof Array ? combo : combo.split('+'));\n const combination: string[] = combo.map(i => this.mapKey(i.toLowerCase()));\n /* istanbul ignore else */\n if (combination.length > 0 && this.validCombination(combination)) {\n this.registered_combos.push(combination);\n const last_key = combination[combination.length - 1];\n /* istanbul ignore else */\n if (!this.keydown_states[last_key]) {\n this.keydown_states[last_key] = new BehaviorSubject(null);\n this.keydown_observers[last_key] = this.keydown_states[last_key].asObservable();\n }\n this.updateCombinationEndList();\n return this.keydown_observers[last_key].subscribe((count) => {\n /* istanbul ignore else */\n if (count) {\n const presses: number[] = [];\n /* istanbul ignore else */\n if (combination.length > 0) {\n // Check that keys are pressed\n for (const key of combination) {\n const state = this.keydown_states[key];\n presses.push(state ? state.getValue() || -1 : -1);\n }\n // Check that keys are pressed in the correct order\n for (let i = 0; i < combination.length - 1; i++) {\n if (presses[i] > presses[i + 1]) {\n return;\n }\n }\n }\n const total = presses.reduce((a, v) => a + (v > 0 ? 1 : -1), 0);\n /* istanbul ignore else */\n if (total >= combination.length) {\n next();\n }\n }\n });\n }\n return null;\n }\n\n /**\n * Map key codes with multiple versions to simple form\n * @param code Code to transform\n */\n private mapKey(code: string): string {\n /* istanbul ignore else */\n if (code.indexOf('alt') >= 0 || code.indexOf('shift') >= 0 || code.indexOf('control') >= 0) {\n return code.replace('left', '').replace('right', '');\n }\n return code;\n }\n\n /**\n * Update the list of the last keys in combinations to allow for prevent default actions on pre-existing hotkeys\n */\n private updateCombinationEndList(): void {\n const key_list = [];\n for (const combo of this.registered_combos) {\n this.combo_end.push(combo[combo.length - 1]);\n }\n this.combo_end = unique(key_list);\n }\n\n /**\n * Checks if the given hotkey combination is allowed and valid\n * @param combo Array of key codes\n */\n private validCombination(combo: string[]): boolean {\n let non_meta = 0;\n for (const key of combo) {\n /* istanbul ignore else */\n if (INVALID_STANDALONE_KEYS.indexOf(key) < 0) {\n non_meta++;\n }\n }\n return non_meta > 0;\n }\n}\n","export * from './location.class';\nexport * from './location.service';\n","import { HashMap } from '@mckinsey-converge/base';\n\nimport { Organisation } from '../organisation/organisation.class';\nimport {\n ServiceLike,\n ServiceManager\n} from '../service-manager.class';\nimport { BuildingLevel } from '../organisation/level.class';\n\nexport class MapLocation {\n /** ID of the element on the associated map */\n public readonly id?: string;\n /** Name of the location */\n public readonly name?: string;\n /** X coordinate of the location */\n public readonly x?: number;\n /** Y coordinate of the location */\n public readonly y?: number;\n /** Level details for the location */\n public readonly level: BuildingLevel;\n /** Whether the position is fixed */\n public readonly fixed: boolean;\n /** Accuracy of the location when not fixed */\n public readonly confidence?: number;\n /** Whether location is at a desk */\n public readonly at_desk?: boolean;\n /** Whether location is set */\n public readonly empty: boolean;\n\n /** Service for managing model on the server */\n protected get _service(): ServiceLike {\n return ServiceManager.serviceFor(MapLocation);\n }\n\n /** Display string for the building and level of the location */\n public get display(): string {\n const service = ServiceManager.serviceFor(Organisation);\n if (!service) {\n return this.level.name;\n }\n const bld = service.buildings.find((bld) => bld.id === this.level.building_id);\n return bld ? `${bld.name}, ${this.level.name}` : this.level.name;\n }\n\n /** Whether location is in a different building from the active one */\n public get in_another_building(): boolean {\n const service = ServiceManager.serviceFor(Organisation);\n return service && service.building.id !== this.level.building_id;\n }\n\n constructor(raw_data: HashMap) {\n this.id = raw_data.id || raw_data.map_id || raw_data.desk_id;\n this.name = raw_data.name || '';\n this.x = raw_data.x\n ? Math.floor(this.normalise(raw_data.x, raw_data.x_max || 10000) * 10000)\n : null;\n this.y = raw_data.y\n ? Math.floor(this.normalise(raw_data.y, raw_data.x_max || 10000) * 10000)\n : null;\n const service = ServiceManager.serviceFor(Organisation);\n this.level =\n raw_data.level instanceof BuildingLevel\n ? raw_data.level\n : service\n ? service.levelWithID(raw_data.level)\n : new BuildingLevel(raw_data.level);\n this.fixed = this.x === null && this.y === null;\n this.confidence = Math.max(5, Math.min(15, raw_data.confidence || 0));\n this.at_desk = this.id && this.id.indexOf('area-') === 0;\n this.empty = !(this.name && this.level && (this.id || this.x || this.y));\n }\n\n /** Normalise the given value within the max */\n private normalise(value: number, max: number): number {\n return value / (max * 1.0);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ComposerService } from '@placeos/composer';\n\nimport { BaseAPIService } from '../base.service';\nimport { MapLocation } from './location.class';\nimport { HashMap } from '@mckinsey-converge/base';\nimport { ServiceManager } from '../service-manager.class';\nimport { SettingsService } from '../settings.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocationService extends BaseAPIService {\n constructor(protected _composer: ComposerService,\n settingsService: SettingsService) {\n super(_composer, settingsService);\n ServiceManager.setService(MapLocation, this);\n this._name = 'Location';\n this._api_route = 'people';\n }\n\n public add(...args): never {\n throw new Error('Create not allowed for location service')\n }\n\n public update(...args): never {\n throw new Error('Update not allowed for location service')\n }\n\n public delete(...args): never {\n throw new Error('Delete not allowed for location service')\n }\n\n public process(item: HashMap) {\n return new MapLocation(item) as any;\n }\n}\n","import { BaseDataClass } from '../base-api.class';\nimport {\n getItemWithKeys,\n HashMap,\n Identity\n} from '@mckinsey-converge/base';\nimport { BuildingLevel } from './level.class';\nimport { BookingRule } from '../bookings';\nimport { ServiceManager } from '../service-manager.class';\n\nexport interface BuildingCity {\n timezone: string\n name: string\n}\n\nexport interface IBuildingRoleUser {\n name: string;\n email: string;\n phone: string;\n}\n\nexport interface LockerMap {\n [zone: string]: {\n [area: string]: {\n [type: string]: (string | boolean)[][];\n };\n };\n}\n\nexport interface ICoordinates {\n longitude: number;\n latitude: number;\n}\n\nexport interface LevelFeature {\n id: string;\n level_id: string;\n name: string;\n}\n\nexport interface BookingRuleDetails {\n /** List of booking rules details for the building */\n readonly rules: readonly string[];\n /** Custom booking rules for the map */\n readonly map_rules?: readonly string[];\n /** Custom booking rules for the map */\n readonly other_rules?: readonly string[];\n /** Contact email address for the building */\n readonly contact?: string;\n /** Information string to display before the rule listings */\n readonly info?: string;\n /** Link for more details */\n readonly link?: { url?: string, name?: string };\n /**\n * Allow buildings to define their own rules formats where needed or for special messages.\n */\n readonly custom_html?: string;\n}\n\nexport class Building extends BaseDataClass {\n /** Service for managing buildings */\n protected get _service() {\n return ServiceManager.serviceFor(Building);\n }\n\n /** Engine Zone ID for the building */\n public readonly zone_id: string;\n /** Organisation Code for the building */\n public readonly code: string;\n /** Geographical address of the building */\n public readonly address: string;\n /** Details about the booking rules for the building */\n public readonly booking_details: BookingRuleDetails;\n /** Details about the booking rules for the building */\n public readonly booking_rules: HashMap;\n /** Number of hour before a booking catering is restricted */\n public readonly catering_restricted_from: number;\n /** Currency code for the country assoicated with the building */\n public readonly currency: string;\n /** Map of fields that are required on the form */\n public readonly required: HashMap;\n /** IANA timezone database string for the location the building resides */\n public readonly timezone: string;\n /** Whether catering is available in this building */\n public readonly has_catering: boolean;\n /** ID of the system used for the holding bay */\n public readonly holding_bay: string;\n /** ID of the system used for standalone visitors bookings */\n public readonly visitor_space: string;\n /** List of zones to determine sort order spaces */\n public readonly sort_order: readonly string[];\n /** Searchable map features */\n public readonly searchables: readonly LevelFeature[];\n /** List of available extras for the building */\n public readonly extras: readonly Identity[];\n /** List of available extra equipment for loan at the building */\n public readonly loan_items: readonly Identity[];\n /** List of available levels for the building */\n public readonly levels: readonly BuildingLevel[];\n /** The city the building belongs in **/\n public readonly city: string;\n\n public readonly catering_hours: { readonly start: number, readonly end: number };\n /** Map of custom settings for the building */\n private _settings: HashMap;\n /** Map of roles and list of the associated users */\n private _roles: HashMap;\n /** Map of the locker ID arrays */\n private _lockers: LockerMap;\n /** Map of important system ids for the building */\n private _systems: HashMap;\n /** Map of important phone numbers for the building */\n private _phone_numbers: HashMap;\n /** Globe coordiates for the build */\n private _location: ICoordinates;\n /** List of zones associated with the building */\n public readonly zones: readonly string[];\n\n constructor(raw_data: HashMap) {\n super(raw_data);\n const settings = raw_data.settings || {};\n const disc_info = settings.discovery_info || {};\n this.zone_id = raw_data.zone_id || raw_data.zone;\n this.extras = (raw_data.extras || disc_info.extras || []).map(i => ({\n id: i.extra_id || i.id,\n name: i.extra_name || i.name\n }));\n this.loan_items = (raw_data.loan_items || disc_info.loan_items || []).map(i => ({\n id: i.extra_id || i.id,\n name: i.extra_name || i.name\n }));\n this.levels = (raw_data.levels || disc_info.levels || []).map(i => new BuildingLevel({\n ...i,\n building_id: this.id\n }));\n this._roles = raw_data.roles || disc_info.roles || {};\n this._lockers = raw_data.lockers || raw_data.locker_structure || disc_info.locker_structure || {};\n this._systems = raw_data.systems || disc_info.systems || {};\n this._settings = settings;\n this._phone_numbers = raw_data.phone_numbers || disc_info.phone_numbers || {};\n this._location = raw_data.location || disc_info.location || { longitude: null, latitude: null };\n this.catering_hours = raw_data.catering_hours || disc_info.catering_hours || settings.catering_hours || {\n start: 7,\n end: 20\n };\n const searchables = [];\n if (raw_data.neighbourhoods) {\n for (const lvl in raw_data.neighbourhoods) {\n if (raw_data.neighbourhoods.hasOwnProperty(lvl)) {\n const lvl_features = raw_data.neighbourhoods[lvl] || {};\n for (const feature in lvl_features) {\n if (lvl_features.hasOwnProperty(feature)) {\n searchables.push({\n id: lvl_features[feature],\n name: feature,\n level_id: lvl\n });\n }\n }\n }\n }\n }\n this.searchables = searchables;\n this.code = raw_data.code || disc_info.code || settings.code || '';\n this.address = raw_data.address || disc_info.address || settings.address || '';\n this.booking_details = raw_data.booking_details || disc_info.booking_details || settings.booking_details || {};\n this.booking_rules = raw_data.booking_rules || disc_info.booking_rules || settings.booking_rules || {};\n this.catering_restricted_from = raw_data.catering_restricted_from || disc_info.catering_restricted_from || settings.catering_restricted_from || 0;\n this.currency = raw_data.currency || disc_info.currency || settings.currency || 'USD';\n this.required = raw_data.required || disc_info.required || settings.required || {};\n if (disc_info.requires_equipment_code) {\n this.required.equipment_code = true;\n }\n if (disc_info.requires_expected_attendees) {\n this.required.expected_attendees = true;\n }\n this.timezone = raw_data.timezone || disc_info.timezone || settings.timezone || '';\n this.has_catering = raw_data.has_catering || disc_info.has_catering || settings.has_catering || false;\n this.holding_bay = raw_data.holding_bay || disc_info.holding_bay || settings.holding_bay || '';\n this.visitor_space = raw_data.visitor_space || disc_info.visitor_space || settings.visitor_space || '';\n this.sort_order = raw_data.sort_order || disc_info.sort_order || settings.sort_order || [];\n this.city = raw_data.city || disc_info.city || 'No City';\n }\n\n /**\n * Get a custom building setting\n * @param key Name of the setting. i.e. nested items can be grabbed using `.` to seperate key names\n */\n public setting(key: string): any {\n const keys = key.split('.');\n const value = getItemWithKeys(keys, this._settings) || getItemWithKeys(['discovery_info', ...keys], this._settings);\n return value;\n }\n\n /**\n * Get list of users with the associated role\n * @param name Role to find users for\n */\n public role(name: string): IBuildingRoleUser[] {\n return [...(this._roles[name] || [])];\n }\n\n /**\n * Get list of the names of available user role lists\n */\n public get role_names(): string[] {\n return Object.keys(this._roles).filter(i => this._roles.hasOwnProperty(i));\n }\n\n /** Map of the locker ID arrays */\n public get lockers(): LockerMap {\n return { ...(this._lockers || {}) };\n }\n\n /** Map of important system ids for the building */\n public get systems(): HashMap {\n return { ...(this._systems || {}) };\n }\n\n /** Map of important phone numbers for the building */\n public get phone_numbers(): HashMap {\n return { ...(this._phone_numbers || {}) };\n }\n\n /** Real coordinates */\n public get location(): ICoordinates {\n return { ...this._location };\n }\n\n /**\n * Get search map feature for the given level ID\n * @param level_id ID of level to grab features for\n */\n public featuresForLevel(level_id: string): LevelFeature[] {\n return (this.searchables || []).filter(i => i.level_id === level_id);\n }\n\n /**\n * Building objects are readonly and cannot be changed\n */\n public async save(): Promise {\n throw new Error('Building objects are readonly and cannot be changed');\n }\n\n /**\n * Building objects are readonly and cannot be deleted\n */\n public async delete(): Promise {\n throw new Error('Building objects are readonly and cannot be deleted');\n }\n}\n","export * from './building.class';\nexport * from './level.class';\nexport * from './organisation.class';\nexport * from './organisation.service';\n","import { HashMap } from 'libs/base/src/lib/types.utilities';\n\n/** Building Level data */\nexport class BuildingLevel {\n /** ID of the building level zone */\n readonly id: string;\n /** ID of the building zone associated with the level */\n readonly building_id: string;\n /** Name of the level */\n readonly name: string;\n /** Number or short identifier of the level */\n readonly short_name: string;\n /** Map URL for the level */\n readonly map_url: string;\n /** Usage type for the level */\n readonly type: 'staff' | 'client' | 'any';\n /** Setting for the level */\n readonly settings: HashMap;\n\n constructor(_data: HashMap = {}) {\n this.id = _data.id || _data.level_id || '';\n this.building_id = _data.bld_id || _data.building_id || '';\n this.name = _data.name || _data.level_name || '';\n const lower_name = this.name.toLowerCase();\n const num = lower_name.indexOf('level') >= 0 ? lower_name.replace(/ ?level ?/gi, '') : lower_name.substr(0, 1).toUpperCase();\n this.short_name = _data.short_name || num || '';\n this.map_url = _data.map_url || '';\n this.type = _data.type || _data.floor_type || 'any';\n this.settings = _data.settings;\n }\n}\n","import { BaseDataClass } from '../base-api.class';\nimport {\n getItemWithKeys,\n HashMap\n} from '@mckinsey-converge/base';\n\n/* istanbul ignore next */\n\nexport class Organisation extends BaseDataClass {\n /** List of available building zone ids for the organisation */\n public readonly available_buildings: readonly string[];\n /** Map of custom settings for the building */\n private _settings: HashMap;\n\n constructor(raw_data: HashMap = {}) {\n super(raw_data);\n this._settings = raw_data.settings || {};\n this.available_buildings = (raw_data.settings?.discovery_info?.buildings || []).map(\n (bld) => bld.zone_id\n );\n }\n\n /**\n * Get a custom building setting\n * @param key Name of the setting. i.e. nested items can be grabbed using `.` to seperate key names\n */\n public setting(key: string): any {\n const keys = key.split('.');\n const value = getItemWithKeys(keys, this._settings);\n return value;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ComposerService } from '@placeos/composer';\n\nimport { BaseAPIService } from '../base.service';\nimport { Organisation } from './organisation.class';\nimport { Building } from './building.class';\nimport {\n ApplicationLoadingState,\n HashMap,\n Identity\n} from '@mckinsey-converge/base';\nimport { BuildingLevel } from './level.class';\nimport { first } from 'rxjs/operators';\nimport { ApplicationService } from '../app.service';\nimport { ServiceManager } from '../service-manager.class';\nimport { UsersService } from '../users';\nimport { SettingsService } from '../settings.service';\nimport { Observable, Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OrganisationService extends BaseAPIService {\n /** Organisation data for the application */\n private _organisation: Organisation;\n /** Actively displayed building */\n private _active_building: string;\n\n private _spaceTypesSubject: Subject = new Subject();\n\n constructor(\n protected _composer: ComposerService,\n private _service: ApplicationService,\n private _users: UsersService,\n settingsService: SettingsService,\n ) {\n super(_composer, settingsService);\n ServiceManager.setService(Organisation, this);\n ServiceManager.setService(Building, this);\n this._name = 'Organisation';\n this._api_route = 'zones';\n this.set('buildings', []);\n this.set('active_building', null);\n this._users.initialised.pipe(first((_) => _)).subscribe(() => this.init());\n }\n\n /**\n * Add is not available on organisation service\n */\n public async add(form_data: HashMap, query_params?: HashMap): Promise {\n throw new Error('Add is not available on the organisation service');\n }\n\n /**\n * Update is not available on organisation service\n */\n public async update(\n id: string,\n form_data: HashMap,\n query_params?: HashMap\n ): Promise {\n throw new Error('Update is not available on the organisation service');\n }\n\n /**\n * Delete is not available on organisation service\n */\n public async delete(id: string): Promise {\n throw new Error('Delete is not available on the organisation service');\n }\n\n /**\n * Get list of levels for the given building ID\n * @param bld_id Building ID\n */\n public levels(bld_id: string): readonly BuildingLevel[] {\n return (this.buildings.find((i) => i.id === bld_id) || ({} as Building)).levels;\n }\n\n /**\n * Get a setting from the organisation or active building\n * @param key Name of the setting. i.e. nested items can be grabbed using `.` to seperate key names\n */\n public setting(key: string) {\n return this.building.setting(key) || this._organisation.setting(key);\n }\n\n /** Active building */\n public get building(): Building {\n return this.buildings.find((i) => i.id === this._active_building);\n }\n\n /** List of types of spaces */\n public get space_types(): Identity[] {\n return this.get('space_types') || [];\n }\n\n public set building(bld: Building) {\n if (bld instanceof Building) {\n this._active_building = bld.id;\n } else {\n this._active_building = bld;\n }\n this.set('active_building', this.building);\n this.loadSpaceTypes();\n localStorage.setItem('PlaceOS.building', this._active_building);\n localStorage.setItem('CONCIERGE.timezone', bld.timezone);\n }\n\n /** List of buildings for the organisation */\n public get buildings(): Building[] {\n return this.get('buildings') || [];\n }\n\n /**\n * Get list of available equipment\n * @param id ID of the building to get the list from. i.e. Defaults to the active building\n */\n public getExtras(id: string, bld_id?: string) {\n const bld = this.buildings.find((i) => i.id === bld_id) || this.building;\n if (bld && id) {\n return bld.extras.filter((i) => `${i.id}`.indexOf(id) >= 0);\n }\n return [];\n }\n\n /**\n * Get the first level matching the list of given IDs\n * @param ids List of ID to search with\n */\n public levelWithID(ids: string | string[]): BuildingLevel {\n const list = ids instanceof Array ? ids : [ids];\n const bld_list = this.buildings;\n for (const id of list) {\n for (const bld of bld_list) {\n for (const lvl of bld.levels) {\n if (lvl.id === id) {\n return lvl;\n }\n }\n }\n }\n return null;\n }\n\n /**\n * Initialise service data\n */\n protected async load(): Promise {\n /* istanbul ignore else */\n if (localStorage) {\n this._active_building = localStorage.getItem(`${this.settingsService.frontend.toUpperCase()}.building`);\n }\n const loading: ApplicationLoadingState = this._service.get('loading') || {};\n loading.organisation = { message: 'Loading organisation data', state: 'loading' };\n await this.loadOrganisation();\n loading.organisation = { message: 'Loading organisation data', state: 'complete' };\n loading.buildings = { message: 'Loading building data', state: 'loading' };\n this._service.set('loading', loading);\n await this.loadBuildings();\n loading.buildings = { message: 'Loading building data', state: 'complete' };\n loading.levels = { message: 'Loading building floor data', state: 'loading' };\n this._service.set('loading', loading);\n await this.loadLevels();\n loading.levels = { message: 'Loading building floor data', state: 'complete' };\n this._service.set('loading', loading);\n loading.space_types = { message: 'Loading space type data', state: 'loading' };\n this._service.set('loading', loading);\n await this.loadSpaceTypes();\n loading.space_types = { message: 'Loading space type data', state: 'complete' };\n this._service.set('loading', loading);\n const user = this._users.current;\n\n if (user) {\n const id = localStorage.getItem('PlaceOS.building');\n const building = this.buildings.find(bld => id && bld.id === id) || this.buildings.find((bld) => bld.code === user.location);\n if (building) {\n this._active_building = building.id;\n this.set('active_building', building);\n } else if(this.building) {\n // This conditional solves a problem of infinite loop when user building doesn't exist.\n this._active_building = this.building.id;\n this.set('active_building', this.building);\n }\n }\n }\n\n /**\n * Load organisation data for application\n */\n public async loadOrganisation(): Promise {\n const org_data = await this.query({ tags: 'org', engine: true });\n this._organisation = new Organisation(org_data[0]);\n this.set('organisation', this._organisation);\n return this._organisation;\n }\n\n /**\n * Load building data for the organisation already stored in the service..\n */\n public async loadBuildings(): Promise {\n return this.loadBuildingsWithOrg(this._organisation);\n }\n\n /**\n * Load building data for the organisation passed.\n */\n public async loadBuildingsWithOrg(organisation: Organisation): Promise {\n const bld_data = await this.query({ tags: 'building', engine: true, limit: 1000 });\n const buildings = (bld_data as HashMap[])\n .map((i) => new Building(i))\n .filter((bld) => organisation.available_buildings.includes(bld.id));\n this.set('buildings', buildings);\n /* istanbul ignore else */\n if (!this._active_building && buildings && buildings.length > 0) {\n this._active_building = buildings[0].id;\n }\n return buildings;\n }\n\n /**\n * Load level data for the buildings\n */\n public async loadLevels(): Promise {\n const lvl_data = await this.query({ tags: 'level', engine: true, limit: 1000 });\n const levels = (lvl_data as HashMap[]).map((i) => new BuildingLevel(i));\n this.set('levels', levels);\n return levels;\n }\n\n /**\n * Load space type data for the buildings\n */\n public async loadSpaceTypes(): Promise {\n const type_data = await this.query({ tags: 'room', engine: true, limit: 1000, building_id: this._active_building });\n const types = (type_data as HashMap[]).map((i) => ({ id: i.id, name: i.name }));\n this.set('space_types', types);\n // Emit the updated space_types\n this._spaceTypesSubject.next(types);\n }\n\n /**\n * Observable to listen for changes in space_types\n */\n public get spaceTypesObservable(): Observable {\n return this._spaceTypesSubject.asObservable();\n }\n\n public getOrganizationFiltersByRoomType(key: string) {\n if (!this._organisation) {\n return {}\n }\n const discovery_info = this._organisation.setting('discovery_info')\n\n return discovery_info && discovery_info[key] ? discovery_info[key] : {}\n }\n\n public getRoomTypeSubsetDDOptions(type:string) {\n const filters = this.getOrganizationFiltersByRoomType(type) || {}\n return [...Object.keys(filters).map((key) => {\n const display = filters[key].toString();\n return {\n display,\n value: key,\n meta: {}\n }\n }) ];\n }\n\n}\n","import { ComposerService } from '@placeos/composer';\nimport { BehaviorSubject, Observable, of, Subject, Subscriber } from 'rxjs';\n\nimport { BaseAPIService } from './base.service';\nimport { BaseClass, HashMap } from '@mckinsey-converge/base';\nimport { ApplicationService } from './app.service';\nimport { toQueryString } from './api.utilities';\nimport { SettingsService } from './settings.service';\nimport { catchError, map } from 'rxjs/operators';\n\nexport interface IEngineResponse {\n results: HashMap[];\n total: number;\n}\n\nexport class PaginatedAPIService extends BaseClass {\n /** Application service */\n public parent: ApplicationService;\n /** Display name of the service */\n protected _name: string;\n /** API Route of the service */\n protected _api_route: string;\n /** Map of state variables for Service */\n protected _subjects: { [key: string]: BehaviorSubject | Subject } = {};\n /** Map of observables for state variables */\n protected _observers: { [key: string]: Observable } = {};\n /** Map of poll subscribers for API endpoints */\n protected _subscribers: { [key: string]: Subscriber } = {};\n /** Map of promises for Service */\n protected _promises: { [key: string]: Promise } = {};\n /** Comparison function for service items */\n protected _compare: (a: T, b: T) => boolean = (a, b) =>\n a === b || (a as any).id === (b as any).id;\n /** Default filter function for list method */\n protected _list_filter: (a: T) => boolean = (a) => !!a;\n\n /** Http Client */\n protected get http() {\n return this._composer.http;\n }\n\n constructor(protected _composer: ComposerService,\n protected settingsService: SettingsService) {\n super();\n this._name = 'Base';\n this._api_route = 'base';\n this.set('list', []);\n }\n\n /**\n * Injects concierge into form_data.\n */\n private injectConcierge(form_data: HashMap) {\n // we only send it over when concierge, since the BE may check for presence rather than\n // if its true or not.\n if (this.settingsService.concierge) {\n return { ...form_data, concierge: true }\n }\n return form_data;\n }\n\n /**\n * Initailise service\n */\n public init() {\n this.load().then(\n (_) => this._initialised.next(true),\n (err) => this.timeout('init', () => this.init(), 1000)\n );\n }\n\n /**\n * Get API route for the service\n * @param engine Whether endpoint is using the application API or engine API\n */\n public route(engine: boolean = false) {\n const endpoint = engine\n ? this._composer.auth.api_endpoint\n : '/api/staff';\n return `${endpoint}/${this._api_route}`;\n }\n\n /** API Route of the service */\n public get api_route() {\n return this._api_route;\n }\n\n /**\n * Get the current value of the named property\n * @param name Property name\n */\n public get(name: string): U {\n if (!this._observers[name]) {\n this.set(name, null);\n }\n return (this._subjects[name] as BehaviorSubject).getValue();\n }\n\n /**\n * Listen to value change of the named property\n * @param name Property name\n * @param next Callback for value changes\n */\n public listen(name: string): Observable {\n if (!this._observers[name]) {\n this.set(name, null);\n }\n return this._observers[name];\n }\n\n /**\n * Update the value of the named property\n * @param name Property name\n * @param value New value\n */\n protected set(name: string, value: U): void {\n if (!this._subjects[name]) {\n this._subjects[name] = new BehaviorSubject(value);\n this._observers[name] = this._subjects[name].asObservable();\n } else {\n this._subjects[name].next(value);\n }\n }\n\n /**\n * Get list of loaded items\n * @param predicate Function for filtering the list\n */\n public filter(predicate: (a: T) => boolean = this._list_filter): T[] {\n const list: T[] = this.get('list');\n return list.filter(predicate);\n }\n\n /**\n * Get item with the given id from the loaded items\n * @param id ID of the item\n */\n public find(id: string): T {\n const list = this.get('list');\n return list.find((i) => i.id === id || (i.email?.toLowerCase() === id?.toLowerCase()));\n }\n\n /**\n * Query the index of the API route associated with this service\n * @param query_params Map of query paramaters to add to the request URL\n */\n public query(query_params: HashMap = {}, config: { url?: string } = {}): Promise {\n let engine = false;\n let cache = 1000;\n /* istanbul ignore else */\n if (query_params) {\n engine = !!query_params.engine;\n delete query_params.engine;\n cache = query_params.cache || 1000;\n delete query_params.cache;\n }\n const query = toQueryString(query_params);\n const key = `query|${query}`;\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const url = config && config.url ? `${config.url}${query ? '?' + query : ''}` : `${this.route(engine)}${query ? '?' + query : ''}`;\n let result: IEngineResponse;\n this.http.get(url).subscribe(\n (d: IEngineResponse | HashMap[]) => {\n if (d && d instanceof Array) {\n const results = d.map((i) => this.process(i));\n result = {\n results,\n total: results.length,\n }\n } else if (d && !(d instanceof Array) && d.results && d.total) {\n const results = d.results.map((i) => this.process(i));\n result = {\n results,\n total: d.total,\n }\n } else if (d && !(d instanceof Array) && d.results) {\n const results = d.results.map((i) => this.process(i));\n result = {\n results,\n total: results.length,\n }\n } else {\n result = {\n results: [],\n total: 0,\n }\n }\n },\n (e) => {\n reject(e);\n this._promises[key] = null;\n },\n () => {\n resolve(result);\n this.timeout(key, () => (this._promises[key] = null), cache);\n }\n );\n });\n }\n return this._promises[key];\n }\n\n /**\n * \n * @param query_params \n * @param config \n * @returns \n */\n queryHoldingBay(query_params: HashMap = {}, config: { url?: string } = {}):Observable {\n const query = toQueryString(query_params);\n const url = `${config.url}${query ? '?' + query : ''}`;\n return this.http.get(url).pipe(\n map((d: IEngineResponse | HashMap[]) => this.processApiResult(d) ),\n catchError((error: any, result?: T) => {\n console.log(error);\n return of(result as T);\n })\n );\n }\n\n /**\n * \n * @param d \n * @returns \n */\n processApiResult(d: IEngineResponse | HashMap[]): IEngineResponse{\n let result: IEngineResponse;\n if (d && d instanceof Array) {\n const results = d.map((i) => this.process(i));\n result = {\n results,\n total: results.length,\n }\n } else if (d && !(d instanceof Array) && d.results && d.total) {\n const results = d.results.map((i) => this.process(i));\n result = {\n results,\n total: d.total,\n }\n } else if (d && !(d instanceof Array) && d.results) {\n const results = d.results.map((i) => this.process(i));\n result = {\n results,\n total: results.length,\n }\n } else {\n result = {\n results: [],\n total: 0,\n }\n }\n return result;\n }\n \n\n /**\n * Query the API route for a sepecific item\n * @param id ID of the item\n * @param query_params Map of query paramaters to add to the request URL\n */\n public show(id: string, query_params: HashMap = {}): Promise {\n let engine = false;\n /* istanbul ignore else */\n if (query_params) {\n engine = !!query_params.engine;\n delete query_params.engine;\n }\n const query = toQueryString(query_params);\n const key = `show|${id}|${query}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const url = `${this.route(engine)}/${id}${query ? '?' + query : ''}`;\n let result: T = null;\n this.http.get(url).subscribe(\n (d) => {\n result = this.process(d); \n },\n (e) => {\n reject(e);\n this._promises.new_item = null;\n },\n () => {\n resolve(result);\n this.timeout(key, () => (this._promises[key] = null), 1000);\n }\n );\n });\n }\n return this._promises[key];\n }\n\n /**\n * Make post request for a new item to the service\n * @param form_data Data to post to the server\n * @param query_params Map of query paramaters to add to the request URL\n */\n public add(form_data: HashMap, query_params: HashMap = {}): Promise {\n /* istanbul ignore else */\n if (!this._promises.new_item) {\n this._promises.new_item = new Promise((resolve, reject) => {\n const query = toQueryString(query_params);\n const url = `${this.route(query_params.engine)}${query ? '?' + query : ''}`;\n let result: T = null;\n this.http.post(url, this.injectConcierge(form_data)).subscribe(\n (d) => (result = this.process(d)),\n (e) => {\n reject(e);\n this.analyticsEvent(`create-${this._name.toLowerCase()}-failed`);\n this._promises.new_item = null;\n },\n () => {\n resolve(result);\n this.set('list', this.updateList(this.get('list'), [result]));\n this.analyticsEvent(`create-${this._name.toLowerCase()}-success`);\n this._promises.new_item = null;\n }\n );\n });\n }\n return this._promises.new_item;\n }\n\n /**\n * Perform API task for the given item ID\n * @param id ID of the item\n * @param task_name Name of the task\n * @param form_data Map of data to pass to the API\n * @param method Verb to use for request\n */\n public task(\n id: string,\n task_name: string,\n form_data: HashMap = {},\n method: 'post' | 'get' = 'post'\n ): Promise {\n const query = toQueryString(this.injectConcierge(form_data));\n const key = `task|${id}|${task_name}|${query}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const post_data = { ...form_data, id, _task: task_name };\n const url = `${this.route(false)}/${id}/${task_name}`;\n let result: any;\n const request =\n method === 'post'\n ? this.http.post(url, post_data)\n : this.http.get(`${url}${query ? '?' + query : ''}`);\n request.subscribe(\n (d) => (result = d),\n (e) => {\n reject(e);\n this.analyticsEvent(\n `${this._name.toLowerCase()}-task-${task_name}-failed`,\n id\n );\n delete this._promises[key];\n },\n () => {\n resolve(result as U);\n this.analyticsEvent(\n `${this._name.toLowerCase()}-task-${task_name}-success`,\n id\n );\n this.timeout(key, () => delete this._promises[key], 1000);\n }\n );\n });\n }\n return this._promises[key];\n }\n\n\n /**\n * Make put request for changes to the item with the given id\n * @param id ID of the item being updated\n * @param form_data New values for the item\n * @param query_params Map of query paramaters to add to the request URL\n */\n public update(id: string, form_data: HashMap, query_params: HashMap = {}): Promise {\n const key = `update|${id}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const query = toQueryString(this.injectConcierge(query_params));\n const url = `${this.route(query_params.engine)}/${id}${query ? '?' + query : ''}`;\n let result: T = null;\n this.http.put(url, this.injectConcierge(form_data)).subscribe(\n (d) => (result = this.process(d)),\n (e) => {\n reject(e);\n this.analyticsEvent(`update-${this._name.toLowerCase()}-failed`, id);\n this._promises[key] = null;\n },\n () => {\n resolve(result);\n this.set(\n 'list',\n this.updateList(this.removeItem(this.get('list'), { id } as any), [\n result\n ])\n );\n this.analyticsEvent(`update-${this._name.toLowerCase()}-success`, id);\n this._promises[key] = null;\n }\n );\n });\n }\n return this._promises[key];\n }\n\n /**\n * Make delete request for the given item\n * @param id ID of item\n */\n public delete(id: string, q: HashMap = {}): Promise {\n const key = `delete|${id}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const query = toQueryString(q);\n const url = `${this.route()}/${id}${query ? '?' + query : ''}`;\n this.http.delete(url).subscribe(\n (_) => null,\n (e) => {\n reject(e);\n this._promises[key] = null;\n },\n () => {\n this.set('list', this.removeItem(this.get('list'), { id } as any));\n this._promises[key] = null;\n resolve();\n }\n );\n });\n }\n return this._promises[key];\n }\n\n /**\n * Load initial data for the service\n */\n protected async load(): Promise {\n }\n\n /**\n * Post analytics event for this service\n * @param action Name of the action to post\n */\n protected analyticsEvent(action: string, label?: string) {\n // if (this.parent && this.parent.Analytics) {\n // this.parent.Analytics.track(this._name, { desc: `${this.parent.name.toLowerCase()}-${action}`, label });\n // }\n }\n\n /**\n * Convert raw API data into a valid API Object\n * @param raw_item Raw API data\n */\n protected process(raw_item: HashMap): T {\n return raw_item as T;\n }\n\n /**\n * Update recorded list of items\n * @param old_list Old list of items\n * @param list List of updated items\n * @param compareFn Function to compare items to remove duplicates\n */\n public updateList(\n old_list: T[],\n list: T[],\n compareFn: (a: T, b: T) => boolean = this._compare\n ): T[] {\n /* istanbul ignore else */\n if (!list || list.length === 0) {\n return old_list;\n }\n const new_list: T[] = [];\n const mixed_list = [...list, ...old_list];\n /* istanbul ignore else */\n if (!compareFn) {\n compareFn = this._compare;\n }\n for (const item of mixed_list) {\n const found = new_list.find((i) => compareFn(i, item));\n /* istanbul ignore else */\n if (!found) {\n new_list.push(item);\n }\n }\n return new_list;\n }\n\n /**\n * Remove the given item from the given list\n * @param list List of items\n * @param item Item to remove\n * @param compareFn Function to compare items\n */\n protected removeItem(list: T[], item: T, compareFn?: (a: T, b: T) => boolean) {\n const new_list = [];\n /* istanbul ignore else */\n if (!compareFn) {\n compareFn = this._compare;\n }\n list.forEach((i) => (compareFn(item, i) ? null : new_list.push(i)));\n return new_list;\n }\n}\n","import { FormGroup } from \"@angular/forms\";\nimport { HashMap } from \"@mckinsey-converge/base\"\nimport { DateNow, DateTZ } from \"@mckinsey-converge/date-tz\"\n\nexport enum RecurrencePeriod {\n LIST = 'list',\n DAILY = 'daily',\n WEEKLY = 'weekly',\n //RELATIVE_MONTHLY = 'relativeMonthly', for the moment we will only support absoluteMonthly\n ABSOLUTE_MONTHLY = 'monthly'\n}\n\nexport enum DaysOfWeek {\n SUNDAY = 'sunday',\n MONDAY = 'monday',\n TUESDAY = 'tuesday',\n WEDNESDAY = 'wednesday',\n THURSDAY = 'thursday',\n FRIDAY = 'friday',\n SATURDAY = 'saturday'\n\n}\n\nexport enum SeriesAction {\n EDIT = 'edit',\n CLONE = 'clone'\n}\n\nexport enum BookingAction {\n CLONE = 'booking_clone',\n EDIT = 'booking_edit'\n}\n\nexport interface WeekDays {\n id: string;\n active: boolean;\n day_index: number;\n full_name: string;\n}\n\nexport interface RepeatPeriod {\n id: RecurrencePeriod;\n label: string\n}\n\nexport enum RepeatsOn {\n PATTERN = 'pattern',\n DATE = 'date'\n}\n\nexport interface RecurrenceType {\n type: RepeatsOn;\n label: string;\n}\n\nexport interface RecurrenceDetails {\n period: RecurrencePeriod,\n end: DateTZ,\n list: Array\n interval: number\n}\n\nexport interface RecurrenceRecurringDetails extends RecurrenceDetails {\n start: number\n}\n\nexport const recurrencePeriodToDurationType = (period: RecurrencePeriod) =>{\n switch (period) {\n case RecurrencePeriod.DAILY:\n return 'days'\n case RecurrencePeriod.WEEKLY:\n return 'weeks' \n case RecurrencePeriod.ABSOLUTE_MONTHLY:\n return 'months' \n default:\n return 'days'\n }\n}\n\n/**\n * Generate weekdays from monday to saturday\n */\nexport const generateWeekDays = (date: number, params: { building_tz?: string } = {}): Array=> {\n const { building_tz } = params;\n let start_week = DateNow(new Date()).startOfValue('week').addValue({days : 1}); //set monday as start of week\n const week_days: Array = []\n for (let i = 1; i <= 7; i++) {\n const activeDate = new DateTZ({date, building_tz, is_local_tz: false })\n const active = activeDate.dateWeekday === i\n const full_name = start_week.formatDate('EEEE')\n const day_index = i === 7 ? 0 : i //Sunday must be indexed as day 0\n week_days.push({id: full_name.substring(0, 1), active, day_index, full_name: full_name.toLocaleLowerCase()});\n start_week = start_week.addValue({ days : 1 });\n }\n return week_days\n}\n\nexport const getFirstDateFromList = (list: Array) => {\n return list.reduce((a, b) => { return a.isBeforeDate(b) ? a : b; });\n}\n\nexport const getLastDateFromList = (list: Array) => {\n return list.reduce((a, b) => { return a.isAfterDate(b) ? a : b; });\n}\n\nexport const recurrenceDetails = (recurr: RecurrenceDetails): string => {\n const end = getLastDateFromList(recurr.list).formatDate('ccc dd MMM yyyy')\n const getPeriod = (period: string) => {\n if(recurr.interval === 1){\n return `Occurs Every ${period} until ${end}`\n }else{\n return `Occurs Every ${recurr.interval} ${period}s until ${end}`\n }\n } \n \n switch (recurr.period) {\n case RecurrencePeriod.DAILY:\n return getPeriod('Day')\n case RecurrencePeriod.WEEKLY:\n return getPeriod('Week')\n case RecurrencePeriod.ABSOLUTE_MONTHLY:\n return getPeriod('Month')\n case RecurrencePeriod.LIST:\n return `Occurs on Specific Dates until ${getLastDateFromList(recurr.list).formatDate('ccc dd MMM yyyy')}`\n default:\n return ''\n }\n}\n\nexport const recurrenceRecurringDetails = (recurr: RecurrenceRecurringDetails): string => {\n const end = recurr.end\n const start = new DateTZ({ date: recurr.start })\n\n const getPeriod = (period: string) => {\n if(recurr.interval === 1){\n return `occurs every ${period} effective ${start.formatDate('dd MMM yyyy')} until ${end.formatDate('dd MMM yyyy')}`\n }else{\n return `occurs every ${recurr.interval} ${period}s effective ${start.formatDate('dd MMM yyyy')} until ${end.formatDate('dd MMM yyyy')}`\n }\n }\n\n switch (recurr.period) {\n case RecurrencePeriod.DAILY:\n return getPeriod('Day')\n case RecurrencePeriod.WEEKLY:\n return getPeriod('Week')\n case RecurrencePeriod.ABSOLUTE_MONTHLY:\n return getPeriod('Month')\n case RecurrencePeriod.LIST:\n return `occurs on Specific Dates`\n default:\n return ''\n }\n}\n\nexport const handleRecurrenceFields = (data: HashMap) => {\n if(data.is_recurrent){\n if(data.recurrence_period !== RecurrencePeriod.LIST){\n delete data.recurrence_starts\n delete data.recurrence_endTz\n if(data.recurrence_period !== RecurrencePeriod.WEEKLY){\n delete data.recurrence_days\n }\n } else if(data.recurrence_period){\n data.recurrence_list = [...(data.recurrence_starts || []).map((date: DateTZ) => date.startOfValue('minute').seconds)]\n delete data.recurrence_interval;\n delete data.recurrence_endTz;\n delete data.recurrence_count;\n delete data.recurrence_starts\n delete data.recurrence_days\n }\n delete data.is_recurrent\n }else{\n delete data.recurrence_period;\n delete data.recurrence_interval;\n delete data.recurrence_endTz;\n delete data.recurrence_count;\n delete data.recurrence_starts\n delete data.is_recurrent\n delete data.recurrence_exceptions\n delete data.recurrence_days\n }\n\n return data\n}\n\n/** Removes expired occurrences and updates start and end dates when cloning a series */\nexport const removeExpiredOcurrences = (form: FormGroup) =>{\n if(form.controls.action?.value === SeriesAction.CLONE ){\n const tz = form.controls.space_list.value[0].timezone\n const date_now = new DateTZ({ is_local_tz: false, building_tz: tz });\n const occurrences = form.controls.recurrence_starts.value.filter((date: DateTZ) =>\n date_now.isBeforeDate(date, 'day') || date_now.isSameDate(date, 'day')\n )\n form.controls.recurrence_starts.setValue(occurrences)\n const { start, end } = setStartAndEndDateFromArray(occurrences, tz)\n form.controls.dateTz.setValue(start)\n form.controls.recurrence_endTz.setValue(end)\n }\n}\n\n/** \n * Returns starts and end dates from an array of dates in milliseconds \n **/\n export const setStartAndEndDateFromArray = (dates: Array, tz: string): {start: DateTZ, end: DateTZ} =>{\n if(dates.length !== 0){\n return {\n start: dates.sort((d1, d2) => d1.ms - d2.ms)[0] ,\n end: dates.sort((d1, d2) => d2.ms - d1.ms)[0]\n }\n }\n //if the dates array is empty set the start and end dates as the current and next day\n const now = DateNow(new Date()).toZone(tz)\n return {start: now, end: now.addValue({days: 1})}\n}\n\nexport const setRecurrenceStartsTime = (form: FormGroup) => {\n const { recurrence_starts, dateTz } = form.value\n const list = (recurrence_starts || []).map((date: DateTZ) => date.setValue({hour: dateTz.dateHour, minute: dateTz.minutes}))\n form.controls.recurrence_starts.setValue(list)\n}","export * from './report.class'\nexport * from './reports.service'\n","import { CurrencyPipe } from '@angular/common';\n\nimport {\n csvToJson,\n downloadFile,\n HashMap,\n humaniseDuration,\n jsonToCsv,\n} from '@mckinsey-converge/base';\n\nimport { ServiceManager } from '../service-manager.class';\nimport { Space } from '../spaces';\nimport { Organisation } from '../organisation';\n\nexport class Report {\n /** Type of report */\n public readonly type: string;\n /** List of data associated with the report */\n public readonly data: T[];\n\n constructor(raw_data: HashMap = {}) {\n this.type = raw_data.type || '';\n this.data = this.cleanData(raw_data.data);\n }\n\n /** Create report data structure from CSV */\n public static fromCSV(type: string, data: string): Report {\n const csv_json = csvToJson(data);\n return new Report({ type, data: csv_json });\n }\n\n /** Download report data as CSV format */\n public downloadCSV(name: string = 'unnamed.csv'): void {\n downloadFile(name, jsonToCsv(this.data));\n }\n\n /** Download report data as JSON format */\n public downloadJSON(name: string = 'unnamed.json'): void {\n downloadFile(name, JSON.stringify(this.data, undefined, 4));\n }\n\n public formatCancelledBy(email: string) {\n if (email !== null && email !== undefined) {\n let name = email.split('@')[0];\n name = name.split('_').join(' '); //get name from email and convert it to title case\n name = name.replace(/\\w\\S*/g, function (txt) {\n return `${txt\n .charAt(0)\n .toUpperCase()}${txt.substr(1).toLowerCase()}`;\n });\n return name;\n } else {\n return email;\n }\n }\n\n public timeConverter( UNIX_timestamp: number ){\n let a = new Date(UNIX_timestamp * 1000);\n let months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];\n let year = a.getFullYear();\n let month = months[a.getMonth()];\n let date = a.getDate();\n let hour = ((a.getHours() + 11) % 12 + 1);\n let suffix = a.getHours() >= 12 ? \"PM\":\"AM\";\n let min = a.getMinutes();\n let time = date + ' ' + month + ' ' + year + ' - ' + hour + ':' + min + ' ' + suffix;\n return time;\n }\n\n private cleanData(data: T[] = []) {\n if (data.length > 0 && this.type === 'day') {\n for (let i = 0; i < data.length; i++) {\n data[i]['booker'] = data[i]['booker'].name;\n data[i]['expected_attendees'] = Object.values(data[i]['expected_attendees'])[0];\n }\n } else if (data.length > 0 && this.type === 'audit') {\n for (let i = 0; i < data.length; i++) {\n data[i]['created_at'] = this.timeConverter(data[i]['created_at']);\n }\n } else if (data.length > 0 && this.type === 'catering') {\n for (let i = 0; i < data.length; i++) {\n data[i]['Cancelled By'] = this.formatCancelledBy(\n data[i]['Cancelled By']\n );\n }\n const fields = Object.keys(data[0]);\n const room_field = fields.find(\n (key) =>\n key.toLowerCase().includes('room') &&\n key.toLowerCase().includes('email')\n );\n const price_field = fields.find((key) =>\n key.toLowerCase().includes('price')\n );\n\n for (let row of data) {\n /* istanbul ignore else */\n const space_service = ServiceManager.serviceFor(Space);\n if (room_field && price_field && space_service) {\n const room = space_service.find(\n row[room_field].toLowerCase()\n );\n const org_service = ServiceManager.serviceFor(Organisation);\n const bld = org_service.buildings.find(\n (bld: { id: any }) =>\n bld.id === room?.level?.building_id\n );\n row[price_field] = new CurrencyPipe('en_us').transform(\n row[price_field] / 100,\n bld?.currency\n );\n }\n /* istanbul ignore else */\n for (let field of fields) {\n row[field] =\n typeof row[field] === 'string'\n ? row[field].replace(/\\,/g, '٫')\n : row[field];\n }\n }\n } else if (this.type === 'bookings') {\n data = data.map((i: HashMap) => {\n const booking = i;\n try {\n if (booking.setup instanceof Object) {\n booking.setup = booking.setup[booking.room_email];\n }\n if (booking.breakdown instanceof Object) {\n booking.breakdown =\n booking.breakdown[booking.room_email];\n }\n booking.setup = humaniseDuration((booking.setup || 0) / 60);\n booking.breakdown = humaniseDuration(\n (booking.breakdown || 0) / 60\n );\n booking.description = (booking.description || '')\n .replace(/<[^>]*>?/gm, '')\n .replace(/\\,/g, '٫')\n .replace(/\\r?\\n|\\r/g, ' ');\n booking['Meeting Host'] =\n booking.organizer?.name || booking.organizer;\n booking['Booked By'] =\n booking.booked_by?.name ||\n booking.booked_by?.email ||\n '';\n booking.charge_code =\n booking.equipment_codes[booking.room_email] || '';\n // booking.expected_attendees = Object.keys(booking.expected_attendees).map(key => booking.expected_attendees[key]).join(', ');\n booking.attendees = (booking.attendees || [])\n .map((person) => person.name || person.email || person)\n .join('٫ ');\n booking.notes = (booking.notes || [])\n .map((note) =>\n note.author &&\n (note.type === 'description' ||\n note.type === 'private')\n ? `[${note.author}|${note.type}]${note.message\n .replace(/<[^>]*>?/gm, '')\n .replace(/\\,/g, '٫')\n .replace(/\\r?\\n|\\r/g, ' ')}`\n : ''\n )\n .join(' | ');\n booking.cancelled = booking.isCancelled;\n booking.status = booking.status[booking.room_email] || '';\n booking.company = booking.company.join(', ');\n if (booking.cancelled_by) {\n booking.cancelled_by = this.formatCancelledBy(\n booking.cancelled_by\n );\n }\n if (booking.isCancelled) {\n booking.cancelled_at_epoch = new Date(\n booking.cancelled_at_epoch * 1000\n ).toLocaleString();\n }\n booking.cancelled_date = booking.cancelled_at_epoch;\n } catch (e) {}\n const remove_fields = [\n 'id',\n 'icaluid',\n 'accepted_at',\n 'accepted_by',\n 'check_ins',\n 'changeKey',\n 'created',\n 'booking_type',\n 'edit_history',\n 'end_epoch',\n 'old_attendees',\n 'start_epoch',\n 'expected_attendees',\n 'isAllDay',\n 'isCancelled',\n 'body',\n 'is_free',\n 'lastModifiedDateTime',\n 'locationType',\n 'locations',\n 'organizer',\n 'booked_by',\n 'originalEndTimeZone',\n 'originalStartTimeZone',\n 'room_booking_status',\n 'room_email',\n 'room_emails',\n 'room_id',\n 'sensitivity',\n 'seriesMasterId',\n 'show_as',\n 'notes',\n 'subject',\n 'type',\n 'previous_booking',\n 'catering',\n 'responseStatus',\n 'equipment_codes',\n 'cancelled_at_epoch',\n ];\n for (const field of remove_fields) {\n if (booking[field] !== undefined) {\n delete booking[field];\n }\n }\n const output = {};\n const order = [\n 'title',\n 'start',\n 'end',\n 'location',\n 'Meeting Host',\n 'Booked By',\n 'booked_at',\n 'booked_ahead_by',\n 'all_day',\n 'attendees',\n 'company',\n 'description',\n 'cancelled',\n 'cancelled_by',\n 'cancelled_date',\n ];\n const keys = Object.keys(booking);\n keys.sort((a, b) => {\n const idx_a = order.indexOf(a);\n const idx_b = order.indexOf(b);\n return (\n (idx_a === -1 ? keys.length : idx_a) -\n (idx_b === -1 ? keys.length : idx_b)\n );\n });\n for (const key of keys) {\n output[key] = booking[key];\n }\n return output;\n }) as any;\n }\n return data;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ComposerService } from '@placeos/composer';\n\nimport { Report } from './report.class';\nimport { BaseAPIService } from '../base.service';\nimport { SettingsService } from '../settings.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ReportsService extends BaseAPIService {\n constructor(protected _composer: ComposerService,\n settingsService: SettingsService) {\n super(_composer, settingsService);\n this._name = 'Reports';\n this._api_route = 'reports';\n }\n\n protected process(raw_data: any): Report {\n return raw_data instanceof Array\n ? new Report({ data: raw_data })\n : Report.fromCSV('', raw_data);\n }\n}\n","import { Type } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { HashMap } from '@mckinsey-converge/base';\n\n\nexport interface ServiceLike extends HashMap {\n parent: any;\n add: (_: HashMap) => Promise;\n update: (id: string, _: HashMap) => Promise;\n delete: (id: string, params?: HashMap) => Promise;\n task: (id: string, name: string, data: HashMap) => Promise;\n listen: (prop: string) => Observable;\n}\n\nexport interface ServiceProvider {\n provideFor: Type;\n useValue: T;\n}\n\nexport class ServiceManager {\n /** Map of available services for child classes */\n private static _service_list: ServiceProvider[] = [];\n\n /** Set the services used to handle data model requests */\n public static setService(type: Type, service: any): void {\n if (window.debug) {\n (window as any).ServiceManager = this._service_list;\n }\n const index = ServiceManager._service_list.findIndex(provider => provider.provideFor === type);\n if (index >= 0) {\n ServiceManager._service_list.splice(index, 1, { provideFor: type, useValue: service });\n } else {\n ServiceManager._service_list.push({ provideFor: type, useValue: service });\n }\n }\n\n /** Get the services used to handle data model requests */\n public static serviceFor(type: Type): ServiceLike {\n const provider = ServiceManager._service_list.find(provider => provider.provideFor === type) || { useValue: null };\n return provider.useValue;\n }\n\n constructor() {\n throw new Error('ServiceMananger is static class');\n }\n}\n","import {\n Inject,\n Injectable\n} from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport {\n BehaviorSubject,\n Observable\n} from 'rxjs';\n\nimport { VERSION } from '@mckinsey-converge/environment';\nimport {\n BaseClass,\n getItemWithKeys,\n HashMap,\n log\n} from '@mckinsey-converge/base';\nimport { ServiceManager } from './service-manager.class';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\ndeclare global {\n interface Window {\n debug: boolean;\n }\n}\n\nexport const SETTINGS_TOKEN = 'settings_service_data';\n\ntype SettingsAppData = T & {\n title: string;\n description: string;\n short_name: string;\n logo_light: {\n type: string;\n src: string;\n background: string;\n }\n logo_dark: {\n type: string;\n src: string;\n background: string;\n }\n heap_io: {\n app_id: number;\n force_ssl: boolean;\n secure_cookie: boolean;\n disable_text_capture: boolean;\n cookie_path: string;\n }\n}\n\nexport interface SettingsData {\n debug: boolean;\n mock: boolean;\n frontend: 'staff' | 'concierge' | 'booking';\n composer: {\n domain: string;\n route: string;\n protocol: string;\n port: string;\n use_domain: boolean;\n local_login: boolean;\n }\n app: SettingsAppData;\n}\n\nexport class SettingsObject {\n constructor(public data: SettingsData) {\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SettingsService extends BaseClass {\n /** Name of the application */\n private _app_name = 'Converge';\n /** List of override settings in order of priority */\n private _overrides = new BehaviorSubject([]);\n /** Mapping of behaviour subjects */\n private _subjects: HashMap> = {};\n /** Mapping of observables */\n private _observables: HashMap> = {};\n /** Which frontend we're in. staff, concierge, or bookings **/\n public readonly frontend: string;\n private _bypass_bookings: boolean = false;\n\n /**\n * @hidden\n */\n public set overrides(value: HashMap[]) {\n this._overrides.next(value);\n }\n\n /** Get observable for key */\n public listen(name: string): Observable {\n if (!this._observables[name]) {\n this._subjects[name] = new BehaviorSubject(null);\n this._observables[name] = this._subjects[name].asObservable();\n }\n return this._observables[name];\n }\n\n /** Update observable value for key */\n public post(name: string, value: T): void {\n if (!this._observables[name]) {\n this._subjects[name] = new BehaviorSubject(null);\n this._observables[name] = this._subjects[name].asObservable();\n }\n this._subjects[name].next(value);\n }\n\n public value(name: string): T {\n return !this._observables[name] ? null : this._subjects[name].getValue();\n }\n\n /** Page title */\n public get title() {\n return this._title.getTitle();\n }\n\n public set title(value: string) {\n this._title.setTitle(`${value} | ${this._app_name}`);\n }\n\n constructor(private _title: Title,\n @Inject(SETTINGS_TOKEN)\n private settings: SettingsObject) {\n super();\n ServiceManager.setService(SettingsService, this);\n const time = new DateTZ({date: VERSION.time});\n const built = DateNow(new Date()).isSameDate(time, 'day')\n ? `Today at ${time.formatDate('h:mma')}`\n : time.formatDate('do MMM yyyy, h:mma');\n const frontend = this.get('frontend') || 'Unknown';\n this.frontend = frontend;\n log('CORE', `${VERSION.semver}`, null, 'debug', true, frontend?.toUpperCase());\n log('APP', `${VERSION.hash} | Built: ${built}`, null, 'debug', true, frontend?.toUpperCase());\n this.init();\n }\n\n /**\n * Initialise the settings\n */\n public async init() {\n if (this.get('debug')) {\n window.debug = true;\n }\n if (this.get('app')?.name) {\n this._app_name = this.get('app').name;\n }\n log('Settings', 'Successfully loaded settings');\n this._initialised.next(true);\n }\n\n /** Whether settings service has initialised */\n public get app_name() {\n return this._app_name;\n }\n\n public get concierge() {\n return this.frontend === 'concierge';\n }\n\n public set bypass_bookings(value: boolean) {\n this._bypass_bookings = value;\n }\n\n public get bypass_bookings() {\n return this._bypass_bookings;\n }\n\n /**\n * Get a setting\n * @param key Name of the setting. i.e. nested items can be grabbed using `.` to seperate key names\n */\n public get(key: string): any {\n const keys = key.split('.');\n if (keys[0] !== 'app') {\n return getItemWithKeys(keys, this.settings.data);\n }\n const override_settings = this._overrides.getValue();\n for (const override of override_settings) {\n const value = getItemWithKeys(keys.slice(1), override);\n if (value != null) {\n return value;\n }\n }\n return getItemWithKeys(keys, this.settings.data);\n }\n}\n","export * from './space.class';\nexport * from './spaces.service';\nexport * from './space.utilities';\n","import { BaseDataClass } from '../base-api.class';\nimport {\n HashMap,\n} from '@mckinsey-converge/base';\nimport {\n Building,\n BuildingLevel,\n Organisation\n} from '../organisation';\nimport { User } from '../users';\nimport { ServiceManager } from '../service-manager.class';\nimport { SettingsService } from '../settings.service';\nimport { SpaceRules } from '../bookings/booking.types';\nimport { rulesForSpace } from '../bookings/space.utilities';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\nimport { DaysOfWeek, RecurrencePeriod } from '../recurrence/recurrence.utils';\nimport { DateTime } from 'luxon';\n\nexport interface ISpaceAvailabilityOptions {\n /** Start date and time of the availability block */\n dateTz?: DateTZ;\n /** Length of the availability block */\n duration: number;\n /** */\n id?: string;\n /** List of spaces to look at the availability for */\n room_ids?: string;\n /** Whether the spaces looked at should be bookable */\n bookable?: boolean;\n /** List of spaces or zones to ignore */\n ignore?: string;\n /** List of zones to look at the availability for */\n zone_ids?: string | string[];\n /** Whether space bookings should not be returned */\n hide_bookings?: boolean;\n /** Min capacity on the room **/\n capacity?: number\n clear?: boolean;\n /** Length of the setup */\n setup?: number;\n /** Length of the breakdown */\n breakdown?: number;\n /** Hide declined bookings */\n hide_declined?: boolean;\n /** Max capacity on the room **/\n capacity_max?: number\n\n diff_capacity?: boolean\n\n /** Fields to include recurrence in the availability search */\n recurrence_period?: RecurrencePeriod;\n recurrence_interval?: number;\n recurrence_endTz?: DateTZ;\n recurrence_count?: number;\n recurrence_starts?: Array\n is_recurrent?: boolean\n is_multiroom?: boolean\n recurrence_days?: Array\n}\n\nexport interface SpaceBookingRuleOptions {\n dateTz: DateTZ;\n duration: number;\n host: User;\n}\n\nexport const OPTION_DEFAULTS: ISpaceAvailabilityOptions = {\n duration: 60\n};\n\nexport interface RecurrenceAvailability {\n /** Unix epoch in seconds */\n readonly date: number;\n /** Whetehr space is available at this time */\n readonly available: boolean;\n}\n\n/**\n * Room Settings Type\n *\n * Exmaple:\n * available: true\n * available_until: 1644344999\n * bookings: []\n * catering: false\n * charge_code: false\n * extra_features: \"meeting_room boardroom\"\n * internal_or_external: \"internal\"\n * map_id: \"08.8.15\"\n * natural_light: false\n * room_booking_screen: true\n * room_name: \"8.15 Meeting\"\n * vc: false\n * recurrence_availability: {\n * date: \"1642596300\",\n * available: false,\n * }\n */\nexport interface RoomSettings {\n // Local room name is required.\n room_name?: string\n // TBD if anything else should be required\n available?: boolean\n available_until?: number\n bookings?: HashMap[]\n catering?: boolean\n charge_code?: boolean\n extra_features?: string\n internal_or_external?: string\n map_id?: string\n natural_light?: boolean\n room_booking_screen?: boolean\n vc?: boolean\n recurrence_availability?: RecurrenceAvailability[]\n equipment_code?: boolean\n external?: boolean\n}\n\n/**\n * List of space features that come from settings.\n *\n * Im sure this list will grow. It is not the most comprehensive list.\n */\nexport enum SpaceFeatures {\n BoardRoom = 'boardroom',\n Catering = 'catering',\n CocktailRoom = 'cocktail',\n ConferencePhone = 'conference_phone',\n ConferenceRoom = 'conference',\n ElectronicWhiteboard = 'whiteboard',\n FlipChart = 'flipchart',\n Glassboard = 'glassboard',\n PartnerOffice = 'partner',\n PhoneBooth = 'phone_booth',\n TheatreRoom = 'theatre',\n TeamRoom = 'team_room',\n VideoConference = 'vc',\n NaturalLight = 'natural_light',\n WirelessContentSharing = 'wireless_content_sharing',\n WorkshopRoom = 'workshop',\n UShapeRoom = 'u_shape',\n Miscellaneous = 'miscellaneous'\n}\n\nexport enum SpaceEquipments {\n conference_phone,\n whiteboard,\n vc,\n flipchart,\n glassboard,\n wireless_content_sharing\n}\nexport enum SpaceStyles {\n boardroom,\n cocktail,\n conference,\n partner,\n theatre,\n team_room,\n // natural_light,\n workshop,\n u_shape,\n miscellaneous\n}\n\nconst EMPTY_ARRAY = [];\n\nexport class Space extends BaseDataClass {\n /** Whether space can be booked by users */\n public readonly bookable: boolean;\n /** People capacity of the space */\n public readonly capacity: number;\n /** Index to force order when sorting multiple spaces */\n public readonly sort_priority: number;\n /** Settings has extensive info displayed in the app. */\n public readonly settings: RoomSettings;\n /** URL for the control interface of the space */\n public readonly support_url: string;\n /** Engine zones associated with the space */\n public readonly zones: readonly string[];\n /** Is the Application concierge */\n public is_concierge: boolean = false;\n /** To allow bookings with rooms for staff calendar view only */\n public allowStaffRoomWithBookings: boolean = false;\n\n /** Simple name == local name being using in seeting.room_name\n\t\t *\n\t\t*/\n public simple_name: string;\n\n /** Room style set of all room style one room has\n * [\"boardroom\", \"cocktail\", \"miscellaneous\", \"natural_light\", \"theatre\", \"u-shape\", \"workshop\"] */\n public room_style: string[] = [];\n\n /** Equipment set of all room equipment one room has\n * [\"conference_phone\", \"whiteboard\", \"vc\", \"flipchart\", \"glassboard\", \"whiteboard\", \"wireless_content_sharing\"] */\n public equipment: string[] = [];\n\n /** Filters has charge code settings for booking and catering */\n public filters: RoomSettings;\n\n /** room_type subset of internal or external rooms */\n public room_type: string[] | string;\n /**\n * Features used in identifying room types.\n *\n * Both features and extra_features are space delimited strings.\n *\n * There is a getter featuresArray that returns the\n * combination of the two as an array.\n */\n public readonly features: string;\n public readonly extra_features: string;\n public map_id: string;\n\n\n /** Service for managing spaces */\n protected get _service() {\n return ServiceManager.serviceFor(Building);\n }\n\n /** Return the rooms' building */\n public get building() {\n return this._service?.buildings.find((bld) => {\n return this.zones.includes(bld.id);\n });\n }\n\n /** Return building timezone */\n public get timezone() {\n return this.building?.timezone;\n }\n\n constructor(raw_data: HashMap = {}) {\n super(raw_data);\n\n // Needed to check if the current app is Concierge or Staff\n const settingsService = ServiceManager.serviceFor(SettingsService) as unknown as SettingsService;\n this.is_concierge = !!settingsService?.concierge;\n this.allowStaffRoomWithBookings = settingsService?.bypass_bookings || false;\n\n const defaultGlobalName = raw_data.name || raw_data.email || 'Meeting Room';\n const defaultSettings = {\n room_name: defaultGlobalName\n }\n /**\n * Duplicate of base-api.class just for readability\n * .name is the full, mckinsey standardised name of the room.\n * You can think of it was what people would call the room when\n * considering every office and room globally.\n *\n * this.name = raw_data.name;\n */\n /**\n * Settings has extensive info displayed in the app.\n * setting.room_name is always used when displaying the room name in the applications\n * setting.room_name is the more office-specific room name, you can think of this as\n * the one people in that office would refer to the room as.\n *\n */\n this.settings = raw_data.settings || defaultSettings;\n this.filters = raw_data?.filters;\n // Room fields\n this.bookable = raw_data.bookable || false;\n this.capacity = raw_data.capacity || 0;\n this.support_url = raw_data.support_url;\n this.zones = raw_data.zones instanceof Array ? raw_data.zones : [];\n // Feature fields\n this.features = raw_data.features || '';\n this.extra_features = raw_data.settings?.extra_features || '';\n\n\t\tthis.room_type = raw_data?.room_type;\n this.simple_name = raw_data?.simple_name;\n this.map_id = raw_data?.map_id || raw_data.settings?.map_id || '';\n this.room_style = raw_data?.room_style || [];\n this.equipment = raw_data?.equipment || [];\n\n }\n\n /**\n * Return the global room name\n * IE LDN-4-408-06\n */\n public get global_name(): string {\n return this.name || ''\n }\n\n /**\n * Return the local room name\n * i.e. 4.08\n * TO DO: ROOM-DATA-STRUCTURE-REFACTOR - stop using/remove seetings.room_name\n */\n public get local_name(): string {\n return this.simple_name || this.name || ''; // this.settings?.room_name\n }\n\n public get street_and_city(): string {\n return this.building ? `${this.building.address}, ${this.building.city}` : '';\n }\n\n /**\n * Return the map_id from settings\n * TO DO: ROOM-DATA-STRUCTURE-REFACTOR - stop using/remove seetings.map_id and use map_id from space modal( after testing over prod)\n */\n // public get map_id(): string {\n // return this?.map_id || this.settings?.map_id || '';\n // }\n\n /** Internal / External status */\n public get internal_or_external(): string {\n const external = this.filters?.external;\n return external ? 'external' : 'internal'; // ( external ? 'external' : this.settings?.internal_or_external ) || 'internal';\n }\n\n /**\n * Works in conjunction with available_until.\n *\n * If a room is bookable that only means you can make a booking but not when.\n * Available indicates that is is available to be booked durring the queried times.\n */\n public get available(): boolean {\n return this.settings?.available ?? false;\n }\n\n public get currently_in_use(): boolean {\n const nowMs = new DateTZ({ date: DateTime.now(), is_local_tz: false, building_tz: this.timezone }).ms;\n const runningBookings = this.settings?.bookings?.filter( bks => {\n const startEpoch = new DateTZ({ date: bks.start_epoch * 1000, is_local_tz: false, building_tz: bks.timezone}).ms;\n const endEpoch = new DateTZ({ date: bks.end_epoch * 1000, is_local_tz: false, building_tz: bks.timezone}).ms;\n return startEpoch <= nowMs && endEpoch >= nowMs;\n })\n // console.log(raw_data.settings.room_name+' : '+ nowMs.ms);\n // console.log('IS IN USER CURRENTLY : ', isinUsernow);\n return !!runningBookings.length;\n }\n\n /** Last returned availability time */\n public get available_until(): number {\n return this.settings?.available_until;\n }\n\n /** Bookings associated with the space */\n public get bookings(): HashMap[] {\n // We should need to care if a room as bookings in Staff\n if (!this.is_concierge && !this.allowStaffRoomWithBookings) {\n return EMPTY_ARRAY;\n }\n\n if (this.settings?.bookings?.length) {\n /**\n * When we're dealing with Concierge the API data arriving is rooms, and those rooms contain booking,\n * but those bookings don't contain a room since the room is the root.\n * In order for Concierge to filter bookings by room we need to reattach this room\n * to each of the bookings, with it's own bookings.\n *\n * It's loopy and kooky but correcting for this pattern is beyond the scope of this refactor.\n */\n const spaceWithBookings = new Space(this.toJSON());\n return this.settings?.bookings.map(b => {\n b.room = spaceWithBookings;\n return b;\n });\n }\n return EMPTY_ARRAY;\n }\n\n /**\n\t\t * Whether space has catering\n * TO DO: ROOM-DATA-STRUCTURE-REFACTOR - stop using/remove seetings.catering and use filters?.catering instead\n\t\t */\n public get has_catering(): boolean {\n return this.filters?.catering || this.settings?.catering || false;\n }\n\n /** Returns an array of the space delimited feature and extra_feature strings.\n * TO DO: ROOM-DATA-STRUCTURE-REFACTOR - stop using/remove features, extra_features\n */\n public get featuresArray(): (SpaceFeatures | string)[] {\n // (this.simple_name === \"Entresol M-06\" ) && console.log('raw_data : ', this)\n const roomType = Array.isArray(this.room_type) ? this.room_type : [this.room_type]\n const features = [\n ...this.features.split(' '),\n ...this.extra_features?.split(' '),\n\n ...roomType, // required to work with staff>result>filters\n ...this?.room_style,\n ...this?.equipment,\n\n (this.filters?.natural_light) && SpaceFeatures.NaturalLight || undefined, // || this.settings?.natural_light\n // this.settings?.natural_light && SpaceFeatures.NaturalLight || undefined,\n // this.settings?.vc && SpaceFeatures.VideoConference || undefined,\n ].filter(f => !!f).map(f => f.toLowerCase());\n //will be an array... new Set() turns it into a set, but [... ] turns it back into an array again\n return [ ...new Set(features) ];\n }\n\n /** Level in which the space is associated */\n public get level(): BuildingLevel {\n const service = ServiceManager.serviceFor(Organisation);\n return (service ? service.levelWithID(this.zones as any) : null) || new BuildingLevel({});\n }\n\n /**\n * Return the new recurrence_availability from settings\n */\n public get recurrence_availability(): RecurrenceAvailability[] {\n return this.settings?.recurrence_availability || [];\n }\n\n public get availableOccurrences(): number {\n if(this?.recurrence_availability) {\n return this?.recurrence_availability?.filter(recurr => recurr.available).length;\n }\n }\n\n public get totalOccurrences(): number {\n return this?.recurrence_availability.length;\n }\n\n /**\n * Make a copy of this object\n */\n public clone(): Space {\n return new Space(this);\n }\n\n /**\n * Make a copy of this object without identification data\n */\n public duplicate(): Space {\n const space = { ...this };\n space.settings.bookings = []; // clear out bookings\n return new Space({ ...space, id: null, email: null });\n }\n\n /**\n * Generate the booking rules for space with given options\n * @param options Conditions for generating the space rules\n */\n public rulesFor(options: SpaceBookingRuleOptions): SpaceRules {\n if (!this._service || !this.level) {\n return { auto_approve: true, hide: false };\n }\n\n const building = this.is_concierge ? this.level.building_id : this.building\n\n if (!building) {\n return { auto_approve: true, hide: false };\n }\n const { dateTz, duration, host } = options;\n const rules: SpaceRules = rulesForSpace({\n time: dateTz.ms,\n duration,\n space: this,\n user: host,\n rules: building.booking_rules\n });\n return rules;\n }\n\n /**\n * Whether space can only be booked by request\n * @param options Conditions for checking the space rules\n */\n public byRequest(options: SpaceBookingRuleOptions) {\n const rules = this.rulesFor(options);\n return !rules.auto_approve;\n }\n\n /**\n * Convert object into plain object\n */\n public toJSON(this: Space): HashMap {\n return { ...super.toJSON(), settings: { ...this.settings, bookings: [] }, filters: { ...this.filters }, equipment: [ ...this.equipment] };\n }\n}\n","import { HashMap } from '@mckinsey-converge/base';\nimport {\n ISpaceAvailabilityOptions,\n Space\n} from './space.class';\nimport { Building } from '../organisation/building.class';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\nimport { handleRecurrenceFields, RecurrencePeriod } from '../recurrence/recurrence.utils';\n\nexport function availabilityOptionsToQuery(options: ISpaceAvailabilityOptions): HashMap {\n let query: HashMap = {};\n if (options) {\n query = { ...options };\n if (options.dateTz) {\n const date = options.dateTz.startOfValue('minute');\n query.available_from = date.seconds; // Add one second or API will not allow end to end booking\n query.available_to = date.addValue({ minutes: options.duration || 60 }).subtractValue({ seconds: 1 }).seconds;\n\n if (options.setup) query.setup = options.setup ;\n if (options.breakdown) query.breakdown = options.breakdown;\n \n delete query.dateTz;\n delete query.duration;\n }\n\n if (!options.capacity_max) delete query.capacity_max\n\n if (options.hide_declined) query.hide_declined = options.hide_declined;\n query = handleRecurrenceFields(query)\n }\n return query;\n}\n\n/**\n * Compare two spaces to determine order\n * @param first\n * @param second\n */\nexport function sort(first: Space, second: Space, blds: Building[] = []) {\n const bld = blds.find(bld => first.zones.includes(bld.id));\n const bld_b = blds.find(bld => second.zones.includes(bld.id));\n if (bld) {\n if (bld !== bld_b) {\n return (bld.name).localeCompare(bld_b?.name);\n }\n const sort_order = [...bld.sort_order].reverse();\n for (const zone_id of sort_order) {\n if (zone_id === '*') {\n continue;\n }\n const a_has_zone = first.zones.indexOf(zone_id) >= 0;\n const b_has_zone = second.zones.indexOf(zone_id) >= 0;\n if (a_has_zone && !b_has_zone) {\n return 1;\n } else if (b_has_zone && !a_has_zone) {\n return -1;\n }\n }\n }\n return first.name.localeCompare(second.name);\n}\n","import { Injectable } from '@angular/core';\nimport { ComposerService } from '@placeos/composer';\nimport { first } from 'rxjs/operators';\n\nimport { BaseAPIService } from '../base.service';\nimport { ISpaceAvailabilityOptions, Space } from './space.class';\nimport { ApplicationLoadingState, HashMap } from '@mckinsey-converge/base';\nimport { availabilityOptionsToQuery } from './space.utilities';\nimport { ServiceManager } from '../service-manager.class';\nimport { OrganisationService } from '../organisation';\nimport { ApplicationService } from '../app.service';\nimport { SettingsService } from '../settings.service';\nimport { DateNow } from '@mckinsey-converge/date-tz';\nimport { Observable } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\n\nlet SPACE_LIST = [];\n\nexport function findSpace(id: string) {\n return SPACE_LIST.find((_) => _.id === id || _.email === id);\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SpacesService extends BaseAPIService {\n constructor(\n protected _composer: ComposerService,\n private _org: OrganisationService,\n private _service: ApplicationService,\n settingsService: SettingsService\n ) {\n \n super(_composer, settingsService);\n ServiceManager.setService(Space, this);\n this._name = 'Space';\n this._api_route = 'rooms';\n this._compare = (a, b) =>\n !a.id.localeCompare(b.id) || !a.email.localeCompare(b.email);\n this._list_filter = (a: Space) => {\n const bld = this._org.building;\n return a.level.building_id === bld.id;\n };\n this._org.initialised\n .pipe(first((_) => _))\n .subscribe(() => this.init());\n }\n\n public async query(query: HashMap = {}, setList:boolean = false) {\n const list = await super.query(query);\n if ( (query.hasOwnProperty('cache') && query.cache === false) || !Object.keys(query).length || setList) {\n this.set('list', list);\n SPACE_LIST = list;\n }\n return list;\n }\n\n public filterAvailableSpaces(list: Space[]) {\n return list.filter((i) => {\n if (i.recurrence_availability?.length) return i; //if recurrence, send the space regardless of availability (needed for edit and cloning series)\n return i.available;\n });\n }\n\n /**\n * Get available spaces\n * @param options\n */\n public available(\n options: ISpaceAvailabilityOptions,\n uniqueId?: string,\n filter: boolean = true\n ): Promise {\n if (!options) {\n throw new Error('Space avilability requires request options');\n }\n\n const now = DateNow(new Date());\n if (!options.dateTz) {\n options.dateTz = now.startOfValue('minute');\n }\n\n if (options.hide_declined === undefined) {\n options.hide_declined = true;\n }\n\n const key = `available|${options.id ? options.id : ''}|${\n uniqueId ?? ''\n }`;\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const respond = (list: Space[]) => {\n delete this._promises[key];\n resolve(filter ? this.filterAvailableSpaces(list) : list);\n };\n const error = (e) => {\n reject(e);\n delete this._promises[key];\n };\n const query = availabilityOptionsToQuery(options);\n if (options.id) {\n this.show(options.id, query).then(\n (i) => respond([i]),\n error\n );\n } else {\n this.query(query).then(respond, error);\n }\n });\n }\n\n return this._promises[key];\n }\n\n /**\n * Load initial data for the service\n */\n protected async load(): Promise {\n const loading: ApplicationLoadingState =\n this._service.get('loading') || {};\n if (!loading.spaces) {\n loading.spaces = {\n message: 'Loading space data',\n state: 'loading',\n };\n this._service.set('loading', loading);\n }\n // Adjusted the query by incorporating the \"zone_ids\" option to filter rooms based on specific zone IDs instead of considering all thousands of rooms.\n const option = {\n zone_ids: this._org.building.id\n }\n await this.query(option, true).catch(() => {\n loading.spaces = { message: 'Loading space data', state: 'failed' };\n this._service.set('loading', loading);\n });\n loading.spaces = { message: 'Loading space data', state: 'complete' };\n this._service.set('loading', loading);\n }\n\n /**\n * Convert raw data into API object\n * @param raw_data Raw API data\n */\n public process(raw_data: HashMap): Space {\n return new Space(raw_data);\n }\n /**\n * \n * Special observable function to make http call for rooms\n * @param query \n * @returns observable\n */\n public queryRooms = (query: HashMap = {}): Observable => super.queryRoomsForQR(query);\n\n public setSpaceList(list) {\n this.set('list', list);\n SPACE_LIST = list;\n }\n\n public queryBooking = (query: HashMap = {}) : Observable | Observable => super.queryObsr(query);\n public updateSpace = (id: string, form_data: HashMap, should_inject_concierge: Boolean = false, query_params: HashMap = {}) : Observable | Observable => super.updateObsr(id, form_data, should_inject_concierge, query_params);\n public uploadSpacePhotos = (apiSubRoute: string, form_data: HashMap, should_inject_concierge: Boolean = false, query_params: HashMap = {}) : Observable | Observable => super.uploadSpacePhotos(apiSubRoute, form_data, should_inject_concierge, query_params);\n \n public updateRoomList() {\n this.load().then((_) => null)\n }\n}\n","import {\n BehaviorSubject,\n of\n} from 'rxjs';\nimport {\n Building,\n Organisation\n} from './organisation';\nimport { BaseDataClass } from './base-api.class';\nimport { MapLocation } from './location';\nimport { User } from './users';\nimport { Booking } from './bookings';\nimport {\n RoomSettings,\n Space,\n SpaceFeatures\n} from './spaces';\nimport { ServiceManager } from './service-manager.class';\nimport {\n CateringCategory,\n CateringItem\n} from './catering';\nimport {\n HashMap,\n padZero,\n predictableRandomInt,\n unique\n} from '@mckinsey-converge/base';\n\nimport * as faker from 'faker';\n\nimport {\n SETTINGS_TOKEN,\n SettingsData,\n SettingsObject,\n SettingsService\n} from './settings.service';\nimport { Report } from './reports';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\nfaker.seed(2560);\n\nlet SERVICE: any;\n\ndeclare global {\n interface Jest {\n fn: () => any\n }\n}\n\n\ndeclare let jest: Jest;\n\n/* istanbul ignore file */\n\nexport function generateMockOrganisationService(): HashMap {\n return {\n levelWithID: jest.fn(),\n listen: jest.fn(),\n loadOrganisation: jest.fn(),\n initialised: of(true),\n building: new Building(generateMockBuilding({ id: 'bld-01' })),\n loadBuildingsWithOrg: jest.fn(),\n getOrganizationFiltersByRoomType: jest.fn(),\n getRoomTypeSubsetDDOptions: jest.fn(),\n ...generateMockDataService('OrganisationService')\n };\n}\n\nexport const generateMockSpacesService = (): HashMap => ({\n available: jest.fn(),\n ...generateMockDataService('SpacesService')\n});\n\nexport const generateMockUsersService = (): HashMap => ({\n loadCurrentUser: jest.fn(),\n ...generateMockDataService('UsersService')\n});\n\nexport const bookingState = () => ({\n bookings: of([]),\n filtered: of([]),\n filtered_week: of([]),\n filtered_month: of([]),\n setZone: jest.fn(),\n setDate: jest.fn(),\n setFilters: jest.fn(),\n add: jest.fn(),\n replace: jest.fn(),\n remove: jest.fn(),\n startPolling: jest.fn(),\n startPollingMonth: jest.fn(),\n startPollingWeek: jest.fn(),\n startPollingEveryFiveMin: jest.fn(),\n _noOfMeetings: of([])\n});\n\nconst test_app = {\n title: 'McKinsey & Company',\n description: 'McKinsey & Company Staff UI written with Angular Framework',\n short_name: 'STAFF',\n logo_light: {\n type: 'img',\n src: 'assets/img/logo.svg',\n background: ''\n },\n logo_dark: {\n type: 'img',\n src: 'assets/img/logo-inverse.svg',\n background: ''\n },\n heap_io: {\n app_id: 3540602199,\n force_ssl: true,\n secure_cookie: true,\n disable_text_capture: true,\n cookie_path: '/staff/'\n }\n};\n\nexport const TEST_SETTINGS: SettingsData = {\n debug: true,\n composer: {\n domain: '',\n route: '/test',\n protocol: '',\n port: '',\n use_domain: false,\n local_login: false\n },\n app: test_app,\n mock: false,\n frontend: 'staff'\n};\n\nexport const generateMockSettingsService = (overrides: Partial> = {}) => new SettingsService({ getTitle: () => jest.fn() } as any,\n new SettingsObject({\n ...TEST_SETTINGS,\n ...overrides\n }));\n\n/**\n * Provides an injectable instance for settings.\n */\nexport const provideMockSettingsObject = (settings: Partial> = {}) => ({\n provide: SETTINGS_TOKEN,\n useValue: new SettingsObject({\n ...TEST_SETTINGS,\n ...settings\n })\n});\n\n/**\n * Generate a mocked version of the application service\n */\nexport function generateMockAppService(settingsOverrides: Partial> = {}) {\n SERVICE = {\n setting: jest.fn(),\n notify: jest.fn(),\n notifyInfo: jest.fn(),\n notifyWarn: jest.fn(),\n notifySuccess: jest.fn(),\n notifyError: jest.fn(),\n log: jest.fn(),\n navigate: jest.fn(),\n navigateBack: jest.fn(),\n get: jest.fn(),\n listen: jest.fn(),\n set: jest.fn(),\n Composer: { auth: { token: 'test' } },\n Hotkeys: { listen: jest.fn() },\n Users: generateMockUsersService(),\n Organisation: generateMockOrganisationService(),\n Locations: generateMockDataService('LocationsService'),\n Base: generateMockDataService('BaseService'),\n Menu: generateMockDataService('CateringMenuService'),\n Spaces: generateMockSpacesService(),\n Bookings: generateMockDataService('BookingsService'),\n Reports: generateMockDataService('ReportsService'),\n CateringItems: generateMockDataService('CateringItemsService'),\n CateringCategories: generateMockDataService('CateringCategoriesService'),\n Settings: generateMockSettingsService(settingsOverrides),\n initialised: of(true)\n };\n ServiceManager.setService(BaseDataClass, SERVICE.Base);\n ServiceManager.setService(Organisation, SERVICE.Organisation);\n ServiceManager.setService(Building, SERVICE.Organisation);\n ServiceManager.setService(User, SERVICE.Users);\n ServiceManager.setService(Booking, SERVICE.Bookings);\n ServiceManager.setService(Space, SERVICE.Spaces);\n ServiceManager.setService(MapLocation, SERVICE.Locations);\n ServiceManager.setService(Report, SERVICE.Reports);\n ServiceManager.setService(CateringItem, SERVICE.CateringItems);\n ServiceManager.setService(CateringCategory, SERVICE.CateringCategories);\n SERVICE.Organisation.buildings = [SERVICE.Organisation.building];\n SERVICE.Users.current = new User(generateMockUser());\n SERVICE.Users.initialised = of(true);\n SERVICE.Bookings.booking_list = new BehaviorSubject(new Array(10).fill(0).map(_ => new Booking(generateMockBooking())));\n SERVICE.listen.mockReturnValue(of(null, []));\n return SERVICE;\n}\n\nexport function generateMockDataService(name: string) {\n const service = {\n find: jest.fn(),\n filter: jest.fn(),\n listen: jest.fn(),\n get: jest.fn(),\n set: jest.fn(),\n setting: jest.fn(),\n query: jest.fn(),\n show: jest.fn(),\n add: jest.fn(),\n save: jest.fn(),\n remove: jest.fn(),\n delete: jest.fn(),\n update: jest.fn(),\n addFrom: jest.fn(),\n removeFrom: jest.fn(),\n task: jest.fn(),\n available: jest.fn(),\n process: jest.fn(),\n updateList: jest.fn(),\n clearList: jest.fn(),\n removeFromList: jest.fn(),\n accept: jest.fn(),\n decline: jest.fn(),\n checkin: jest.fn(),\n is_logged_in: false,\n initialised: of(true),\n getHoldingBay: jest.fn(),\n name,\n queryRooms: of(true),\n queryRoomsForQR: of([]),\n queryObsr: of([]),\n queryBooking: of(true),\n checkinIndividualVisitor: jest.fn(),\n taskObsr: of(true),\n updateSpace: jest.fn(),\n updateObsr: of([]),\n uploadSpacePhotos: of([])\n\n };\n\n service.getHoldingBay.mockImplementation(_ => Promise.resolve([new Booking({})]));\n service.save.mockImplementation(_ => Promise.resolve(new Booking({})));\n\n service.listen.mockReturnValue(of(null));\n service.filter.mockReturnValue([]);\n return service;\n}\n\nlet SPACE_COUNT: number = 0;\n\nexport function generateMinimalRoomDetails(count: number) {\n return {\n name: `space-0${count}`,\n email: `space-0${count}@test.com`,\n settings: {\n name: `localname-0${count}`,\n catering: true\n }\n }\n}\n\nexport function generateMockSpace(overrides: HashMap = {}, space_id: number = null, recurring_search: boolean = false ): Space {\n const id = `space-${space_id || SPACE_COUNT++}`;\n const name = overrides.name || `${faker.name} ${faker.name.lastName()} Space`;\n const startOfDay = DateNow(new Date()).startOfValue('day');\n let settings: RoomSettings = {\n available: true,\n available_until: startOfDay.addValue({ days: 1 }).seconds, // (Date.now() / 1000) + (60 * 60 * 24), // now plus 24 hrs\n bookings: Array(10).fill(0).map(i => generateMockBooking()),\n catering: true,\n charge_code: true,\n extra_features: \"meeting_room boardroom\",\n internal_or_external: \"internal\",\n map_id: \"1\",\n natural_light: false,\n room_booking_screen: true,\n room_name: `${name} - Local Name`,\n vc: false,\n }\n if (overrides.settings) {\n settings = { ...settings, ...overrides.settings };\n delete overrides.settings;\n }\n if (recurring_search) {\n settings.recurrence_availability = [\n {\n date: startOfDay.seconds,\n available: false,\n },\n {\n date: startOfDay.addValue({ days: 1 }).seconds,\n available: false,\n },\n {\n date: startOfDay.addValue({ days: 2 }).seconds,\n available: false,\n },\n {\n date: startOfDay.addValue({ days: 3 }).seconds,\n available: false,\n },\n ]\n }\n\n const linked = Math.floor(predictableRandomInt(99999)) % 2 === 0 && SPACE_COUNT > 1;\n return new Space({\n id,\n name: `${name} - Global Name`,\n map_id: `${space_id || SPACE_COUNT}`,\n type: faker.commerce.productName(),\n searchable: Math.floor(predictableRandomInt(99999)) % 2 === 0,\n controlable: Math.floor(predictableRandomInt(99999)) % 2 === 0,\n hourly_rate: Math.floor(predictableRandomInt(300)) * 100,\n bookable: Math.floor(predictableRandomInt(99999)) % 2 === 0,\n capacity: 15,\n sort_priority: 0,\n setup: Math.floor(predictableRandomInt(6)) * 5,\n breakdown: Math.floor(predictableRandomInt(6)) * 5,\n support_url: `/control/#/${id}`,\n image: faker.image.business(),\n zones: ['zone_lvl-0'],\n features: `${SpaceFeatures.BoardRoom} ${SpaceFeatures.ElectronicWhiteboard}`,\n email: `${name.toLowerCase().split(' ').join('.')}@${USER_DOMAIN}`,\n settings,\n ...overrides\n });\n}\n\nlet BOOKING_COUNT = 0;\nlet BOOKING_DATE = DateNow(new Date()).setValue({ hour: 6 }).setValue({minute: 0}).subtractValue({ days: 10 }).startOfValue('minute');\n\n/**\n * Set the initial time used for generating mock bookings\n * @param time New initial time as ms from UTC epoch\n */\nexport function setMockBookingStartDatetime(time: number) {\n const date = new DateTZ({date: time})\n BOOKING_DATE = date.startOfValue('minute');\n}\n\n/**\n * Create mock raw API data for a booking\n * @param override Overrides the properties of the generated booking with it's own\n */\nexport function generateMockBooking(override: HashMap = {}) {\n const id = `booking-${BOOKING_COUNT++}`;\n BOOKING_DATE = BOOKING_DATE.addValue({ minutes: Math.floor(predictableRandomInt(4) + 2) * 15 });\n const start = BOOKING_DATE.ms;\n const duration = Math.floor(predictableRandomInt(4) + 2) * 15;\n BOOKING_DATE = BOOKING_DATE.addValue({ minutes: Math.floor(predictableRandomInt(4)) * 15 });\n const organiser = generateMockUser({ external: false, visitor: false });\n const orders = Array(Math.floor(predictableRandomInt(5)))\n .fill(0)\n .map(_ => generateMockCateringOrder({ booking_date: start }, override.room_ids, override.menu));\n const hasCatering = Math.floor(predictableRandomInt(34567)) % 3 === 0;\n const date_start = new DateTZ({date: start})\n return {\n id,\n title: `${faker.commerce.productName()} Meeting`,\n attendees: Array(Math.floor(predictableRandomInt(5) + 2))\n .fill(0)\n .map((_, i) => generateMockUser(override.users)),\n organiser,\n start_epoch: date_start.seconds,\n end_epoch: date_start.addValue({ minutes: duration }).seconds,\n body: faker.lorem.paragraph(),\n notes: [{ type: 'other', message: faker.lorem.paragraph() }],\n location: faker.address.city(),\n // Mckinsey only has internal or external meetings\n booking_type: ['internal', 'external'][predictableRandomInt(2)],\n setup: { 'space-01': Math.max(0, (predictableRandomInt(12) - 6) * 5) },\n breakdown: { 'space-01': Math.max(0, (predictableRandomInt(12) - 6) * 5) },\n status: 'accepted',\n catering: hasCatering ? orders : [],\n room: new Space(generateMinimalRoomDetails(1)), // returns space-01 type values\n equipment_codes: {},\n company:[],\n ...override\n };\n}\n\nlet BLD_COUNT = 0;\nlet LVL_COUNT = 0;\n\n/**\n * Generate raw mock data for creating a building\n * @param id Forced ID for the mock\n * @param overrides Supply object value overrides in place. Supports a levelGenerator function\n * to stabilize level ids for testing.\n */\nexport function generateMockBuilding(overrides: HashMap = {}): HashMap {\n const id = `zone_bld-${BLD_COUNT++}`;\n const levels = Array(10)\n .fill(0)\n .map((_, i) => generateMockLevel(undefined, overrides.levelGenerator?.(i)));\n const features: any = {};\n for (const lvl of levels) {\n const count = Math.floor(predictableRandomInt(3) + 2);\n features[lvl.level_id] = {};\n for (let i = 0; i < count; i++) {\n features[lvl.level_id][faker.commerce.productName()] = `feature-${i + 1}`;\n }\n }\n return {\n id,\n zone_id: id,\n extras: Array(10)\n .fill(0)\n .map(i => {\n const name = faker.commerce.productName();\n return {\n extra_id: name\n .split(' ')\n .join('-')\n .toLowerCase(),\n extra_name: name\n };\n }),\n code: 'NYO',\n name: faker.name.firstName(),\n address: 'building address field',\n city: 'building city',\n loan_items: Array(10)\n .fill(0)\n .map(i => {\n const name = faker.commerce.productName();\n return {\n extra_id: name\n .split(' ')\n .join('-')\n .toLowerCase(),\n extra_name: name\n };\n }),\n levels,\n roles: {\n 'first-aiders': Array(10)\n .fill(0)\n .map(i => generateMockUser())\n },\n neighbourhoods: features,\n settings: {\n test: {\n nested: {\n level2: true,\n org: false\n }\n },\n city: faker.address.city()\n },\n timezone: 'America/Chicago',\n ...overrides\n };\n}\n\n/**\n * Generate raw mock data for a building level\n * @param id Forced ID for the mock\n * @param overrides value overrides\n */\nexport function generateMockLevel(id?: string, overrides: HashMap = {}): HashMap {\n if (!id) {\n id = `zone_lvl-${LVL_COUNT++}`;\n }\n return {\n id,\n level_id: id,\n level_name: `Level ${LVL_COUNT}`,\n short_name: `L ${LVL_COUNT}`,\n ...overrides\n };\n}\n\nlet USER_COUNT = 0;\n\nexport let USER_DOMAIN = 'acaprojects.com';\n\nconst USER_EMAILS: string[] = [];\n\n/**\n * Generate raw mock data for a user\n * @param id Forced ID for the mock\n * @param name Forced name for the user\n * @param external Whether user is external of the organisation\n */\nexport function generateMockUser(override: HashMap = {}): HashMap {\n const id = `user-${USER_COUNT++}`;\n const name = `${faker.name.firstName()} ${faker.name.lastName()}`;\n const external = override.external || !(predictableRandomInt(99999) % 2);\n const organisation = external ? faker.company.companyName() : USER_DOMAIN.split('.')[0];\n let delegates: {email: string, opt_out: boolean}[] = [];\n const delegate_count = Math.min(predictableRandomInt(4) + 1, USER_EMAILS.length);\n for (let i = 0; i < delegate_count; i++) {\n delegates.push({email: USER_EMAILS[Math.floor(predictableRandomInt(USER_EMAILS.length))], opt_out: false});\n }\n delegates = unique(delegates);\n const email = `${name\n .split(' ')\n .join('.')\n .toLowerCase()}@${external ? 'not-' : ''}${USER_DOMAIN}`;\n USER_EMAILS.push(email);\n return {\n id,\n name,\n first_name: name.split(' ')[0],\n last_name: name.split(' ')[1],\n email,\n phone: faker.phone.phoneNumber(),\n visitor: external,\n organisation: {\n id: organisation\n .split(' ')\n .join('.')\n .toLowerCase(),\n name: organisation\n },\n department: faker.commerce.department(),\n staff_code: padZero(Math.floor(predictableRandomInt(99999)), 5),\n delegates,\n image: faker.image.avatar(),\n ...override\n };\n}\n\nexport function generateMockCateringOrder(overrides: HashMap = {}, room_id: string = '', menu: HashMap = {}) {\n return {\n id: `order-${predictableRandomInt(9999_9999)}`,\n delivery_time: predictableRandomInt(6) * 5,\n location_id: room_id, // R--- could be undefined\n items: new Array(predictableRandomInt(5, 1)).fill(0).map(i => pickMenuItem(menu)),\n ...overrides\n };\n}\n\nfunction pickMenuItem(menu_map: HashMap = {}) {\n const zones = Object.keys(menu_map);\n const menu = menu_map[zones[predictableRandomInt(zones.length)]] || [];\n const category = menu[predictableRandomInt(menu.length)] || { items: [] };\n const group = { ...(category.items[predictableRandomInt(category.items.length)] || {}) };\n if (!group.package && group.items?.length) {\n const item = { ...group.items[predictableRandomInt(group.items.length)] };\n item.amount = predictableRandomInt(5, 1);\n return item;\n }\n group.amount = predictableRandomInt(5, 1);\n return group;\n}\n\nexport function generateMockLocation(overrides: HashMap, fixed_locations: string[], maps: string[]): HashMap {\n const fixed = predictableRandomInt(999_999_999) % 2 === 0;\n if (fixed && (!overrides || overrides.fixed)) {\n return {\n map_id: fixed_locations[predictableRandomInt(fixed_locations.length)],\n level: maps[predictableRandomInt(maps.length)],\n ...overrides\n };\n } else {\n return {\n x: predictableRandomInt(900, 100),\n x_max: 1000,\n y: predictableRandomInt(500, 100),\n level: maps[predictableRandomInt(maps.length)],\n confidence: predictableRandomInt(30),\n ...overrides\n };\n }\n}\n\nlet ORG_COUNT = 0;\n\nexport function generateMockOrganisation(): HashMap {\n const buildings = Array(3).fill(0).map(i => generateMockBuilding());\n return {\n id: `zone_org-${ORG_COUNT++}`,\n name: `Organisation ${ORG_COUNT}`,\n buildings,\n settings: {\n discovery_info: {\n buildings\n },\n test: {\n nested: {\n org: true\n }\n }\n }\n };\n}\n\n\nexport const generateMockBuildingSetByCity = () => {\n const buildings: Building[] = Array(10).fill(0)\n .map(() => new Building(generateMockBuilding()));\n buildings.push(...Array(2).fill(0).map(() => new Building(generateMockBuilding({\n settings: {\n city: 'Auckland'\n },\n city: 'Auckland'\n }))));\n buildings.push(...Array(5).fill(0).map(() => new Building(generateMockBuilding({\n settings: {\n city: 'NYC'\n },\n city: 'NYC'\n }))));\n return buildings;\n};\n\nexport function generateMockModalData(data: HashMap = null) : HashMap {\n if (data) {\n return data;\n }\n return {\n pendingDate: new Date(1603087100 + (1000 * 60 * 15)),\n pendingDuration: 60,\n date: 1603087100,\n duration: 30,\n }\n}\n\nexport const mockDateToBuildingTz = (date?: number) =>{\n return new DateTZ({date, building_tz: 'America/Chicago', is_local_tz: false})\n}","export * from './user.class'\nexport * from './user.utilities'\nexport * from './users.service'\n","import { BaseDataClass } from '../base-api.class';\nimport {\n HashMap,\n Identity\n} from '@mckinsey-converge/base';\nimport { MapLocation } from '../location';\nimport { ServiceManager } from '../service-manager.class';\n\nexport class User extends BaseDataClass {\n \n /** Currently logged in user */\n public static get active_user(): User {\n const service = ServiceManager.serviceFor(User);\n return service ? service.current : null;\n }\n\n /** First name of the user */\n public readonly first_name: string;\n /** Last name of the user */\n public readonly last_name: string;\n /** Windows user ID */\n public readonly windows_id: string;\n /** FMNO */\n public readonly fmno: string;\n /** Type of user */\n public readonly type: 'partner' | 'external' | 'internal';\n /** Contact phone number of the user */\n public readonly phone: string;\n /** Organisational department the user is part of */\n public readonly business_unit: string;\n /** Whether user is external from the application's organisation */\n public readonly external: boolean;\n /** Whether user is a visitor */\n public readonly visitor: boolean;\n /** Organisational Identifier for the user */\n public readonly staff_code: string;\n /** Basic location descriptor for the user */\n public readonly location: string;\n /** List of users that this user can act on behalf */\n public readonly delegates: readonly {email: string, opt_out: boolean}[];\n /** URL of the user's avatar image */\n public readonly image: string;\n /** List of user groups associated with this user */\n public readonly groups: readonly string[];\n /** Organisation the user is associated with */\n private _organisation: Identity;\n\n /** Map location of the user */\n private _location: MapLocation;\n /** List of desk bookings */\n // private _desk_bookings: HashMap = {}; // R--- can't explain why this is here.\n /** Host/Organisawe email notification opt out/in setting */\n public opt_out: boolean;\n\n constructor(raw_data: HashMap = {}) {\n super(raw_data);\n this.first_name = raw_data.first_name || '';\n this.last_name = raw_data.last_name || '';\n this.windows_id = raw_data.email || '';\n this.fmno = raw_data.fmno;\n this.external = raw_data.external || false;\n this.visitor = raw_data.visitor || false;\n\n\n this.type = this.visitor ? 'external' : 'internal';\n this.phone = raw_data.phone || raw_data.mobile || '';\n this.business_unit = raw_data.business_unit || raw_data.department || '';\n this._organisation = raw_data.organisation || {\n id: raw_data.organisation_id,\n name: raw_data.organisation_name\n };\n\n this._location = null;\n this.image = raw_data.image || '';\n this.staff_code = raw_data.staff_code || raw_data.fmno || '';\n this.delegates = raw_data.delegates || [];\n this._location = new MapLocation(\n raw_data.location && raw_data.location instanceof Object\n ? raw_data.location\n : { name: raw_data.location }\n );\n this.groups = raw_data.groups || [];\n this.location = raw_data.location || raw_data.officeLocation || '';\n this.opt_out = raw_data.opt_out;\n }\n\n /** Organisation the user is associated with */\n public get organisation() {\n return this._organisation;\n }\n\n /** Map location of the user */\n public get last_location(): MapLocation {\n return new MapLocation(this._location || {});\n }\n\n /**\n * Ask the server for the users current location\n */\n public locate(): Promise {\n const service: any = ServiceManager.serviceFor(MapLocation);\n return new Promise((resolve, reject) => {\n if (service) {\n service.show(this.id, { desk: this.email }).then(\n l => {\n this._location = l;\n resolve(l);\n },\n e => reject(e)\n );\n } else {\n resolve(null);\n }\n });\n }\n\n /**\n * Whether user is available during the given period\n * @param start Start time as a unix timestamp with milliseconds\n * @param end End time as a unix timestamp with milliseconds\n */\n public available(start?: number, end?: number): Promise {\n return new Promise(resolve => {\n this._service.query({ email: this.email, start, end }).then(\n l => resolve(l && l.length > 0),\n _ => resolve(false)\n );\n });\n }\n\n /**\n * Make a copy of this object\n */\n public clone(): User {\n return new User(this);\n }\n\n /**\n * Make a copy of this object without identification data\n */\n public duplicate(): User {\n return new User({ ...this, id: null, email: null });\n }\n\n /**\n * Convert object into plain object\n */\n public toJSON(this: User): HashMap {\n const data = super.toJSON();\n delete data.location;\n return data;\n }\n}\n\n// R--- Might need an toApiJSON due to visitor field.","import {\n FormControl,\n FormGroup,\n Validators\n} from '@angular/forms';\n\nimport { HashMap } from '@mckinsey-converge/base';\nimport { User } from './user.class';\n\n/**\n * Generate form fields for the given user\n * @param user User to generate form for\n */\nexport function generateUserForm(user: User): FormGroup {\n if (!user) {\n throw Error('No user passed');\n }\n const fields: HashMap = {\n id: new FormControl(user.id || ''),\n name: new FormControl(user.name || ''),\n first_name: new FormControl(user.first_name || '', [Validators.required, Validators.pattern(/^(?![\\d\\s]+$)[^\\d]+$/), Validators.maxLength(50)]),\n last_name: new FormControl(user.last_name || '', [Validators.required, Validators.pattern(/^(?![\\d\\s]+$)[^\\d]+$/), Validators.maxLength(50)]),\n email: new FormControl(user.email || '', [Validators.email])\n };\n // Generate form group for booking item\n return new FormGroup(fields);\n}\n","import { Injectable } from '@angular/core';\nimport { Location } from '@angular/common';\nimport {\n HttpClient,\n HttpHeaders\n} from '@angular/common/http';\nimport { ComposerService } from '@placeos/composer';\nimport { first } from 'rxjs/operators';\n\nimport { Md5 } from 'ts-md5/dist/md5';\n\nimport { BaseAPIService } from '../base.service';\nimport { User } from './user.class';\nimport {\n ApplicationLoadingState,\n HashMap,\n unique\n} from '@mckinsey-converge/base';\n\nimport { ApplicationService } from '../app.service';\nimport { ServiceManager } from '../service-manager.class';\nimport { SettingsService } from '../settings.service';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\nexport interface ILoginOptions {\n /** URL to post login request to */\n url?: string;\n /** Whether form data is passed in the body of the request */\n form?: boolean;\n /** Custom headers to pass into the post request */\n headers?: HashMap;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UsersService extends BaseAPIService {\n constructor(\n protected _composer: ComposerService,\n protected uhttp: HttpClient,\n protected location: Location,\n private _service: ApplicationService,\n settingsService: SettingsService\n ) {\n super(_composer, settingsService);\n ServiceManager.setService(User, this);\n this._name = 'Users';\n this._api_route = 'users';\n this._compare = (a, b) => !a.id.localeCompare(b.id) || !a.email.localeCompare(b.email);\n this.set('list', []);\n this.set('current_user', new User({ id: 'local_user', name: 'Local User' }));\n this.set('delegates', null);\n this._composer.initialised.pipe(first((_) => _)).subscribe(() => this.init());\n }\n\n /** Currently logged in user */\n public get current(): User {\n return this.get('current_user');\n }\n\n /** Whether the user has properly logged in */\n public get is_logged_in(): boolean {\n return this.current && this.current.id !== 'local_user';\n }\n\n /* istanbul ignore next */\n /**\n * Sets the access token and expiry for the user\n * @param token OAuth bearer token\n * @param expiry Expiry epoch timestamp in ms\n * @param reload Whether to reload the page after setting tokens\n */\n public setToken(token: string, expiry?: number, reload: boolean = true) {\n if (!expiry) {\n const now = DateNow(new Date())\n expiry = now.addValue({ days: 7 }).endOfValue('day').ms;\n }\n const path = `${location.origin}${\n this._service.setting('composer.route') || ''\n }/oauth-resp.html`;\n const client_id = Md5.hashStr(path);\n if (sessionStorage) {\n sessionStorage.setItem(`${client_id}_access_token`, token);\n sessionStorage.setItem(`${client_id}_expires_at`, `${expiry}`);\n }\n if (localStorage) {\n localStorage.setItem(`${client_id}_access_token`, token);\n localStorage.setItem(`${client_id}_expires_at`, `${expiry}`);\n }\n if (reload) {\n this.location.go(this.location.path());\n }\n return path;\n }\n\n /**\n * Post login request to the API\n * @param query_params Key value pairs to pass into\n * @param options Options for the login request\n */\n public async login(query_params: HashMap, options: ILoginOptions = {}): Promise {\n if (this.settingsService.concierge) {\n if (!this._promises['login']) {\n this._promises['login'] = new Promise((resolve, reject) => {\n this.set('status', 'loading');\n let headers = new HttpHeaders();\n if (!options || options.form !== false) {\n headers = headers.append('Content-Type', 'application/x-www-form-urlencoded');\n }\n const url = (options ? options.url : '') || '/auth/signin';\n this.uhttp.post(url, query_params, { headers }).subscribe(\n (_) => null,\n (e) => reject(e),\n () => {\n this._composer.auth.authorise();\n resolve();\n }\n );\n });\n }\n return this._promises['login'];\n }\n }\n\n\n /**\n * Logout of user and redirect to logout URL\n */\n public logout() {\n this._composer.auth.logout();\n }\n\n /**\n * Loads current user from API. This diverges from {@link load} in order to simply return\n * the user object instead of setting it on the service.\n */\n public async loadCurrentUser(): Promise {\n return this.show('current')\n }\n\n /**\n * Load initial data for the service\n */\n protected load(tries: number = 0): Promise {\n const loading: ApplicationLoadingState = this._service.get('loading') || {};\n loading.user = { message: 'Loading user credentials', state: 'loading' };\n this._service.set('loading', loading);\n this.set('status', 'loading');\n return new Promise((resolve) => {\n // this is due to unclear nature of the merge between concierge and staff\n // concierge has the retries enabled, while staff continuously retries.\n if (this.settingsService.concierge && tries > 4) {\n this.set('status', 'invalid');\n loading.user = { message: 'Loading user credentials', state: 'failed' };\n this._service.set('loading', loading);\n return resolve();\n }\n this.show('current').then(\n async (current_user) => {\n this.set('status', 'available');\n this.set('current_user', current_user);\n this._initialised.next(true);\n if (this._service && this._service.setting('app.user.grab_api_details')) {\n this.show(current_user.email).then(\n async (user) => {\n this.set('current_user', user);\n if (this._service.setting('app.user.update_location')) {\n this.interval('location', () => user.locate(), 5000);\n }\n await this.loadDelegates().catch(_ => null);\n resolve();\n loading.user = {\n message: 'Loading user credentials',\n state: 'complete'\n };\n this._service.set('loading', loading);\n },\n () => this.timeout('load', () => this.load(++tries).then(() => resolve()), Math.min(3000, 300 * tries))\n );\n } else {\n \n // is after process\n if (this._service.setting('app.user.update_location')) {\n this.interval('location', () => current_user.locate(), 5000);\n }\n await this.loadDelegates().catch(_ => null);\n resolve();\n loading.user = { message: 'Loading user credentials', state: 'complete' };\n this._service.set('loading', loading);\n }\n },\n () => this.timeout('load', () => this.load(++tries).then(() => resolve()), Math.min(3000, 300 * tries))\n );\n });\n }\n\n private async loadDelegates() {\n const delegates = this.current.delegates;\n if (!delegates || !delegates.length) {\n return [];\n }\n const promises: Promise[] = [];\n for (const del of delegates) {\n promises.push(this.show(del.email));\n }\n const list = await Promise.all(promises);\n this.set('delegates', list);\n this.set('list', unique((this.get('list') || []).concat(list)));\n return list;\n }\n\n /**\n * Convert raw API data into a valid User Object\n * @param raw_item Raw API data\n */\n protected process(raw_data: any): User {\n return new User(raw_data);\n }\n}","import { AbstractControl } from '@angular/forms';\n\nimport { User } from './users';\n\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n\nconst HAS_ERROR = true;\n\n/**\n * Build start time validation function\n * @param date Date of the time to check\n */\nexport function buildValidateDate(date?: number) {\n const from = new DateTZ({ date });\n return (c) => validateDate(c, date);\n}\n\n/**\n * Check that control value is a date that is the same or after from date\n * @param control Angular form control\n * @param is_from Comparison date(ms from UTC epoch). Defaults to the current time\n */\nexport function validateDate(control: AbstractControl, is_from?: number) {\n const from = new DateTZ({date: is_from})\n const date = new DateTZ({date: control.value})\n return date.isBeforeDate(from) ? { date: HAS_ERROR, message: 'Booking needs to be made in the future' } : null;\n}\n\n/**\n * Build start time validation function\n * @param date Date of the time to check\n * @param is_from Comparison date(ms from UTC epoch). Defaults to the current time\n */\nexport function buildValidateStartTime(date: number, is_from?: number) {\n const from = new DateTZ({date: is_from})\n return (c) => validateStartTime(c, date, from.ms);\n}\n\n/**\n * Check that control value time is after the comparison date time\n * @param control Angular form control\n * @param date Date of the time to check\n * @param is_from Comparison date(ms from UTC epoch). Defaults to the current time\n */\nexport function validateStartTime(control: AbstractControl, date: number, is_from?: number) {\n const now = new DateTZ({date: is_from});\n const parts = control.value.split(':');\n const date_obj = new DateTZ({date});\n return date_obj.setValue({ hour: +parts[0], minute: +parts[1] }).isBeforeDate(now) ? {\n start: HAS_ERROR,\n message: 'Booking time needs to be made in the future'\n } : null;\n}\n\nexport function buildValidateDuration(min: number = 30, max: number = 240) {\n return (c) => validateDuration(c, min, max);\n}\n\nexport function validateDuration(control: AbstractControl, min: number = 30, max: number = 240) {\n if (control.value < (min || 30)) {\n return { duration: HAS_ERROR, message: `Minimum booking duration is ${min} minute${min === 1 ? 's' : ''}` };\n } else if (control.value > (max || 480)) {\n return { length: HAS_ERROR, message: `Maximum booking duration is ${max} minute${max === 1 ? 's' : ''}` };\n }\n return null;\n}\n\nexport function buildValidateAttendees(host: User, min: number = 0) {\n return (c) => validateAttendees(c, host, min);\n}\n\nexport function validateAttendees(control: AbstractControl, host: User, min: number = 0) {\n if (!control || !(control.value instanceof Array)) {\n return min > 0\n ? { invalid: true, message: `Minimum of ${min} attendee${min === 1 ? ' is' : 's are'} required other than you` }\n : null;\n }\n const list: User[] = control.value;\n if (host) {\n const result = list.find(a => a.email === host.email);\n if (result) {\n list.splice(list.indexOf(result), 1);\n }\n }\n return list.length >= min ? null : {\n count: true,\n message: `Minimum of ${min} attendee${min === 1 ? ' is' : 's are'} required other than you`\n };\n}\n\nexport function validateEndTime(dateControlTz: AbstractControl) {\n return (control: AbstractControl) => {\n // const date = new DateTZ({date: date_control ? date_control.value : undefined})\n const now = DateNow(new Date())\n return dateControlTz.value.addValue({ minutes: control.value || 60 }).isBeforeDate(now)? { end_time: true } : null;\n };\n}\n\nexport function noWhitespaceValidator(control: AbstractControl) {\n const value = control?.value;\n if ( value === '') {\n return null; // Return null if control value is undefined or null\n }\n const isWhitespace = value.trim().length === 0;\n // const isValid = !isWhitespace;\n return !isWhitespace ? null : { whitespace: true };\n}\n\n","export * from './lib/date-tz.class'","import { DateObjectUnits, DateTime, DateTimeUnit, DurationLike, DurationUnits } from 'luxon';\nimport { getTimezoneOffset } from 'date-fns-tz';\n\nfunction padZero(value: number, length: number): string {\n let str = `${value}`;\n while (str.length < length) str = `0${str}`;\n return str;\n}\n\ninterface DateTZParams {\n date?: number | DateTime\n building_tz?: string\n is_local_tz?: boolean\n all_day?: boolean\n}\n\nconst now = new Date()\n\nexport class DateTZ {\n date: DateTime\n date_org: DateTime\n building_tz: string\n is_local_tz: boolean = true\n all_day: boolean\n local_tz: string\n valid: boolean\n\n constructor(data?: DateTZParams) { \n this.date_org = typeof data?.date === 'number' ? DateTime.fromMillis(data?.date) : data?.date ? data?.date : DateTime.fromMillis(now.valueOf())\n this.is_local_tz = data?.is_local_tz === false ? data?.is_local_tz : true\n this.all_day = data?.all_day || false\n this.local_tz = DateTime.now().zoneName\n this.building_tz = data?.building_tz || this.local_tz\n this.date = !this.is_local_tz ? this.date_org.setZone(this.building_tz) : this.date_org\n this.valid = this.date.isValid\n }\n\n //get epoch milliseconds\n public get ms(): number {\n return this.date.valueOf()\n }\n\n //get epoch seconds\n public get seconds(): number {\n return Math.trunc(this.date.toSeconds())\n }\n\n //get the second of the minute\n public get second(): number {\n return this.date.second\n }\n\n //get the minutes of the hour\n public get minutes(): number {\n return this.date.minute\n }\n\n //get the minutes of the hour\n public get hours(): number {\n return this.date.hour\n }\n\n public get utc(): number {\n const newDate = new DateTZ({...this, date: this.date.toUTC()})\n return newDate.seconds\n }\n\n public get dateDay(): number {\n return this.date.day\n }\n\n public get dateHour(): number {\n return this.date.hour\n }\n\n public get dateYear(): number {\n return this.date.year\n }\n\n public get dateWeekday(): number {\n try {\n return this.date.weekday;\n } catch (e) {\n return this.date.toJSDate().getDay();\n }\n }\n\n public get dateMonth(): number {\n return this.date.month\n }\n\n public dateDiff (compare_to: DateTZ, unit: DurationUnits, ans_unit = 'minutes'): number {\n return this.date.diff(compare_to.date, unit)[ans_unit]\n }\n\n //set the date to the begining of the given unit\n public startOfValue (unit: DateTimeUnit) {\n // All the luxon start of values work as needed except for week\n let newDate = new DateTZ({...this, date: this.date.startOf(unit)})\n // Special week logic\n if (unit === 'week') {\n if (this.dateWeekday === 7) {\n // Don't change, we want sunday as the start of the week even though luxon thinks it is Monday\n newDate = new DateTZ({ ...this, date: this.date })\n } else if (this.dateWeekday === 1) {\n // If this.date is monday, just subtract one more day to make it Sunday\n const monday = new DateTZ({ ...this, date: this.date })\n newDate = monday.subtractValue({ days: 1 });\n } else {\n // If later than monday, startOfWeek back to monday and then subtact another day to get to Sunday.\n const monday = new DateTZ({...this, date: this.date.startOf(unit)})\n newDate = monday.subtractValue({ days: 1 })\n }\n }\n\n return newDate\n }\n\n //set the date to the end of the given unit\n public endOfValue (unit: DateTimeUnit) : DateTZ {\n // All the luxon start of values work as needed except for week\n let newDate = new DateTZ({...this, date: this.date.startOf(unit)})\n // Special week logic\n if (unit === 'week') {\n if (this.dateWeekday === 6) {\n // Don't change, we want saturday as the end of the week even though luxon thinks it is Sunday\n newDate = new DateTZ({ ...this, date: this.date })\n } else if (this.dateWeekday === 7) {\n // If this.date is Sunday, this alone is the luxon end of week so add a day\n // to get to monday, then endOfWeek to Sunday, and subtract 1 day to Saturday\n const sunday = new DateTZ({ ...this, date: this.date }).addValue({ days: 1 })\n newDate = sunday.endOfValue(unit).subtractValue({ days: 1 }); // return next saturday\n } else {\n // If not saturday or sunday\n // endOfWeek to Sunday and then subtact a day to get to Saturday.\n const later = new DateTZ({...this, date: this.date.endOf(unit)})\n newDate = later.subtractValue({ days: 1 })\n }\n } else {\n newDate = new DateTZ({...this, date: this.date.endOf(unit)})\n }\n\n return newDate\n }\n \n public startEpoch (): number {\n const org = new DateTZ({date: this.date_org})\n return this.all_day\n ? this.startOfValue('day').ms - this.dateDiff(org, 'minutes')\n : this.ms\n }\n\n //clone the given value and unit to the date\n public clone (): DateTZ {\n // return new DateTZ({...this})\n return this.addValue({ seconds: 0 })\n }\n\n //adds the given value and unit to the date\n public addValue (duration: DurationLike, isLastDayOfMonth?: boolean): DateTZ {\n return new DateTZ({...this, date: isLastDayOfMonth ? this.date.plus(duration).endOf('month') : this.date.plus(duration)});\n }\n\n //subtracts the given value and unit to the date\n public subtractValue (duration: DurationLike): DateTZ {\n const newDate = new DateTZ({...this, date: this.date.minus(duration)})\n return newDate\n }\n\n public setValue (obj: DateObjectUnits): DateTZ {\n const newDate = new DateTZ({...this, date: this.date.set(obj)})\n return newDate\n }\n\n public formatDate (format: string): string {\n // Return new immuatable via \"plus\" to prevent \n // TypeError: Cannot assign to read only property 'weekData' of object\n // https://github.com/moment/luxon/issues/601\n return this.date.plus({ seconds: 0 }).toFormat(format)\n }\n\n public formatLocalDate (format: string): string {\n // setZone already returns new immutable so it doesn't have the formatDate issue.\n return this.date.plus({ seconds: 0 }).setZone(this.local_tz).toFormat(format)\n }\n\n public isSameDate(compare_to: DateTZ, value: DateTimeUnit): boolean {\n return this.date.hasSame(compare_to.date, value)\n }\n\n public isAfterDate(compare_to: DateTZ, unit?: DateTimeUnit): boolean {\n switch (unit) {\n case 'year':\n return this.dateYear > compare_to.dateYear\n case 'month':\n if(this.isAfterDate(compare_to, 'year')){\n return true\n }else if(!this.isSameDate(compare_to, 'year')){\n return false\n }else{\n return this.dateMonth > compare_to.dateMonth\n }\n case 'day':\n if(this.isAfterDate(compare_to, 'month')){\n return true\n }else if(!this.isSameDate(compare_to, 'month')){\n return false\n }else{\n return this.dateDay > compare_to.dateDay\n }\n case 'hour':\n if(this.isAfterDate(compare_to, 'day')){\n return true\n }else if(!this.isSameDate(compare_to, 'day')){\n return false\n }else{\n return this.dateHour > compare_to.dateHour\n }\n case 'minute':\n if(this.isAfterDate(compare_to, 'hour')){\n return true\n }else if(!this.isSameDate(compare_to, 'hour')){\n return false\n }else{\n return this.minutes > compare_to.minutes\n }\n default:\n return this.ms > compare_to.ms;\n }\n }\n\n public isBeforeDate(compare_to: DateTZ, unit?: DateTimeUnit): boolean {\n switch (unit) {\n case 'year':\n return this.dateYear < compare_to.dateYear\n case 'month':\n if(this.isBeforeDate(compare_to, 'year')){\n return true\n }else if(!this.isSameDate(compare_to, 'year')){\n return false\n }else{\n return this.dateMonth < compare_to.dateMonth\n }\n case 'day':\n if(this.isBeforeDate(compare_to, 'month')){\n return true\n }else if(!this.isSameDate(compare_to, 'month')){\n return false\n }else{\n return this.dateDay < compare_to.dateDay\n }\n case 'hour':\n if(this.isBeforeDate(compare_to, 'day')){\n return true\n }else if(!this.isSameDate(compare_to, 'day')){\n return false\n }else{\n return this.dateHour < compare_to.dateHour\n }\n case 'minute':\n if(this.isBeforeDate(compare_to, 'hour')){\n return true\n }else if(!this.isSameDate(compare_to, 'hour')){\n return false\n }else{\n return this.minutes < compare_to.minutes\n }\n default:\n return this.ms < compare_to.ms;\n }\n }\n\n public toZone(tz: string): DateTZ {\n const newDate = new DateTZ({\n ...this, \n date: this.date.setZone(tz), \n building_tz: tz, \n is_local_tz: false\n })\n return newDate\n }\n\n public setTimestamp(timestamp: number): DateTZ {\n const newDate = new DateTZ({\n ...this, \n date: timestamp,\n })\n return newDate\n }\n\n public get JSDate(): Date {\n return this.date.toJSDate()\n }\n\n // helper to log out the dateTZ values\n public logDateTz (label: string = ''): void {\n console.log(`${label} local tz/date/time`, this.addValue({ seconds: 0 }).formatLocalDate(\"cccc d MMMM,yyyy h:mma\"), this.local_tz)\n console.log(`${label} building tz/date/time`, this.addValue({ seconds: 0 }).formatDate(\"cccc d MMMM,yyyy h:mma\"), this.building_tz)\n }\n}\n\nexport const DateNow = (date: Date = new Date()) => {\n return new DateTZ({date: date.valueOf()})\n} \n\n// input the local time and the building timezone\nexport const convertLocalTimestampToTimezonedDateTz = (timestamp: number, buildingTimezone: string): DateTZ => {\n const date = new Date(timestamp);\n return new DateTZ({ date: timestamp, building_tz: buildingTimezone, is_local_tz: false }).setValue({\n day: date.getDate(),\n hour: date.getHours(),\n minute: date.getMinutes()\n });\n}\n\n// input the building time and the building timezone\nexport const convertTimezonedTimestampToLocalDateTz = (timestamp: number, buildingTimezone: string): DateTZ => {\n const local_tz = DateTime.now().zoneName;\n const localOffset = getTimezoneOffset(local_tz, new Date(timestamp));\n const desiredOffset = getTimezoneOffset(buildingTimezone, new Date(timestamp));\n if (localOffset > desiredOffset) {\n const eleA = timestamp + (localOffset - desiredOffset);\n return new DateTZ({date: eleA, building_tz: buildingTimezone, is_local_tz: false});\n } else {\n const eleA = timestamp + (desiredOffset - localOffset);\n return new DateTZ({date: eleA, building_tz: buildingTimezone, is_local_tz: false});\n }\n}\n\nexport const localTimezone = () => {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n}\n\nexport const getTimezoneOffsetString = (tz: string) => {\n const offset_minutes = Math.floor(getTimezoneOffset(tz) / 1000 / 60);\n const hours = Math.floor(offset_minutes/60);\n const minutes = offset_minutes % 60;\n return `${offset_minutes > 0 ? '+' : '-'}${padZero(Math.abs(hours), 2)}${padZero(minutes, 2)}`;\n}\n\nexport function toMiddayUTC(value: DateTZ = DateNow()) {\n // exclude Auckland from rouding up timezone as it has 12+ hours UTC timezone difference\n return value.building_tz.includes('Auckland') ? value : new DateTZ({\n date: value.setValue({ hour: 12, minute: 0 }).ms,\n is_local_tz: false,\n building_tz: 'UTC',\n }).setValue({ hour: 12, minute: 0 });\n}\n\n/**returns the offset between two timezones in minutes and hours */\nexport function timezoneOffset(tz: string){\n const nowTz = DateNow(new Date())\n const offset = nowTz.date.offset - nowTz.toZone(tz).date.offset\n return {minutes: offset, hours: offset/60}\n}\n\nexport function isToday (date, timezone) {\n\n return new DateTZ({\n date: toMiddayUTC(date).ms,\n is_local_tz: false,\n building_tz: timezone\n }).isSameDate(\n new DateTZ({\n date: Date.now(),\n is_local_tz: false,\n building_tz: timezone,\n }),\n 'day'\n );\n}\n","export * from './lib/environment.module';\nexport * from './lib/version';\nexport * from './lib/environment.service'\nexport * from './lib/types'\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n providers: []\n})\nexport class EnvironmentModule {\n}\n","import {\n Inject,\n Injectable\n} from '@angular/core';\nimport { EnvironmentData } from './types';\n\nexport const ENVIRONMENT_TOKEN = 'environments_service_data';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EnvironmentService {\n\n public get production(): boolean {\n return this.environment.production;\n }\n\n public get heap_io_id(): number {\n return this.environment.heap_io_id;\n }\n\n constructor(@Inject(ENVIRONMENT_TOKEN) private environment: EnvironmentData) {\n }\n}\n","// IMPORTANT: THIS FILE IS AUTO GENERATED! DO NOT MANUALLY EDIT OR CHECKIN!\n/* tslint:disable */\nexport const VERSION = {\n \"dirty\": false,\n \"raw\": \"803aaeb6f\",\n \"hash\": \"803aaeb6f\",\n \"distance\": null,\n \"tag\": null,\n \"semver\": null,\n \"suffix\": \"803aaeb6f\",\n \"semverString\": null,\n \"version\": \"0.0.0\",\n \"time\": 1728876842279\n};\n/* tslint:enable */\n","export * from './lib/legacy-overlays.module';\nexport * from './lib/space-select-modal/space-select-modal.component';\nexport * from './lib/new-user-modal/new-user-modal.component';\nexport * from './lib/confirm-modal/confirm-modal.component';\nexport * from './lib/catering-confirm-modal/catering-confirm-modal.component';\nexport * from './lib/catering-details-modal/catering-details-modal.component';\nexport * from './lib/requirement-details-modal/requirement-details-modal.component';\nexport * from './lib/booking-confirm/booking-confirm.component';\nexport * from './lib/user-form/user-form.component'\nexport * from './lib/booking-form/booking-form.component'\n","import {\n Component,\n EventEmitter,\n Inject,\n OnInit,\n Output\n} from '@angular/core';\nimport {\n MAT_DIALOG_DATA,\n MatDialogRef\n} from '@angular/material/dialog';\nimport { Router } from '@angular/router';\n\nimport {\n ApplicationService,\n Booking,\n BookingsService,\n BookingStateService,\n CateringOrder,\n getFirstDateFromList,\n OrganisationService,\n rulesForSpace,\n recurrenceDetails,\n SeriesAction,\n SettingsService,\n Space,\n SpacesService,\n User,\n UsersService,\n formatWhen,\n BOOKING_STATUS,\n CloseDialogService,\n DialogIds\n} from '@mckinsey-converge/data-common';\nimport {\n BaseDirective,\n DialogEvent,\n HashMap,\n humaniseDuration\n} from '@mckinsey-converge/base';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ConflictsModalComponent, ConflictsModalComponentData } from '@mckinsey-converge/ui';\n\n\nexport interface BookingConfirmModalData {\n old_booking: Booking;\n booking: Booking;\n action?: SeriesAction\n}\n\nexport interface BookingDetailInfo {\n bookedBy: {\n display:boolean,\n value: string\n }\n}\n\n@Component({\n selector: 'a-booking-confirm-modal',\n templateUrl: './booking-confirm.component.html',\n styleUrls: ['./booking-confirm.component.scss']\n})\nexport class BookingConfirmComponent extends BaseDirective implements OnInit{\n /** Emitter for user actions on the modal */\n @Output() public event = new EventEmitter();\n /** Display string for changes are being processed */\n public loading: string;\n /** Whether space availability is being checked */\n public checking_available: boolean;\n /** Whether to show all attendees */\n public show_attendees: boolean;\n /** Whether to show all locations */\n public show_locations: boolean;\n /** Whether to show all catering orders */\n public show_orders: boolean;\n /** Whether booking has succeeded */\n public success: boolean;\n /** Whether booking needs to be accepted */\n public readonly is_request: boolean;\n\n public approved: boolean;\n public declined: boolean;\n public bookingDetails: BookingDetailInfo;\n lastMomentConflict: boolean = false;\n \n /** Booking to confirm changes to */\n public get old_booking(): Booking {\n return this._data.old_booking;\n }\n\n /** Booking to confirm changes to */\n public get booking(): Booking {\n return this._data.booking;\n }\n\n /** Active user */\n public get user(): User {\n return this._users.current;\n }\n\n /** Title of the displayed event */\n public get title(): string {\n return this.booking.title;\n }\n\n /** Comapny names */\n public get company(): string[] {\n return this.booking.company;\n }\n \n\n /** Display string of when the event will occur */\n public get when(): string {\n const duration_value = this.booking.duration;\n const all_day = this.booking.all_day && duration_value < 25 * 60;\n if(this.booking.is_recurrent && this.booking.recurrence_starts && this.booking.recurrence_starts.length){\n return formatWhen({all_day, ...this.recurrenceDates })\n }\n return formatWhen({\n all_day,\n startTZ: this.booking.startDateTz,\n endTZ: this.booking.endDateTz,\n displayEndTZ: this.booking.displayEndDateTz})\n }\n\n public get recurrenceDates(){\n const startTZ = getFirstDateFromList(this.booking.recurrence_starts)\n const endTZ = startTZ.addValue({minutes: this.booking.duration})\n return {startTZ, endTZ, displayEndTZ: endTZ}\n }\n\n /** Display string for the recurrence value of the booking */\n public get recurrence(): string {\n return recurrenceDetails({\n period: this.booking.recurrence_period,\n end: this.booking.recurrence_endTz,\n list: this.booking.recurrence_starts,\n interval: this.booking.recurrence_interval\n });\n }\n\n /** Display string for the event's duration */\n public get duration(): string {\n const duration_value = this.booking.duration;\n return this.booking.all_day ? 'All Day' : humaniseDuration(duration_value);\n }\n\n /** List of spaces associated with the event */\n public get spaces(): Space[] {\n return this.booking.multi_rooms;\n }\n\n /** List of attendees associated with the event not including the host */\n public get attendees(): User[] {\n const attendees = this.booking.attendees;\n return attendees.filter((i) => i.email !== this.organiser.email);\n }\n\n /** Host of the event */\n public get organiser(): User {\n return this.booking.organiser || this._users.current;\n }\n\n /** Host of the event */\n public get equipment_codes(): HashMap {\n return this.booking.equipment_codes || {};\n }\n\n /** Host of the event */\n public get catering_codes(): HashMap {\n const catering = this.catering;\n const codes = {};\n for (const order of this.catering) {\n codes[order.location_id] = order.charge_code;\n }\n return codes;\n }\n\n /** Host of the event */\n public get equipment_notes(): HashMap {\n return this.booking.notes\n .filter((note) => note.type === 'equipment')\n .reduce((map, notes) => {\n map[notes.space] = notes.message;\n return map;\n }, {});\n }\n\n /** Details about the event */\n public get notes(): string {\n return this.booking.body;\n }\n\n /** List of catering orders in the booking */\n public get catering(): CateringOrder[] {\n return (this.booking.catering || []).map((order) => {\n const space: any = this.spaces.find(\n (a_space) => a_space.email === order.location_id\n ) || {\n level: {}\n };\n const building: any =\n this._org.buildings.find((bld) => bld.id === space.level.building_id) || {};\n return new CateringOrder({\n ...order,\n location: space.local_name,\n symbol: building.currency,\n booking_date: this.booking.startDateTz.ms,\n booking_timezone: this.booking.timezone,\n });\n });\n }\n\n /** Map of changes to the booking */\n public get changes(): HashMap {\n return {};\n }\n\n constructor(\n private _service: ApplicationService,\n private _users: UsersService,\n private _org: OrganisationService,\n private _bookings: BookingsService,\n private _booking_state_service: BookingStateService,\n private _spaces: SpacesService,\n private _router: Router,\n private _dialog: MatDialog,\n private _dialog_ref: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private _data: BookingConfirmModalData,\n public settings: SettingsService,\n private closeDialogService: CloseDialogService, \n ) {\n super();\n this.booking.time_changed =\n this.old_booking &&\n (this.old_booking.startDateTz.ms !== this.booking.startDateTz.ms ||\n this.old_booking.duration !== this.booking.duration);\n // in concierge, all bookings are acceptable without explicit approval.\n\n const rules = rulesForSpace({ user: this.user, space: this.booking.room, duration: 60 });\n this.is_request = this.settings.concierge ? false : rules.auto_approve;\n }\n\n ngOnInit(): void {\n this.approved = this.booking.status === BOOKING_STATUS.approved;\n this.declined = this.booking.status === BOOKING_STATUS.declined; \n // test comment\n const {creator, organiser, booker_concierge} = this.booking;\n this.bookingDetails = {\n bookedBy: {\n display: creator && ( creator.email !== organiser.email || (creator.email === organiser.email && (booker_concierge !== null && booker_concierge !==undefined ) && organiser.email !==booker_concierge['email']) ),\n value: (creator.email === organiser.email && booker_concierge !== null && (booker_concierge['email'] && organiser.email !==booker_concierge['email']) ) ? booker_concierge['name'] || booker_concierge['email'] : creator?.name || creator.email\n }\n }\n }\n\n /**\n * Save booking changes\n */\n public saveChanges() {\n this.loading = 'Checking availability of selected spaces';\n this._dialog_ref.disableClose = true;\n this.checkSpaceAvailability().then(\n () => {\n this.loading = 'Processing booking request...';\n // Change the unchanged settings to the selected room\n const newEmail = this.booking.space.email;\n const replaceObjects = ['setup', 'breakdown', 'approval_status']\n replaceObjects.forEach(key => {\n const obj = this.booking[key];\n if (obj && obj.constructor === Object) {\n const keys = Object.keys(obj);\n if (keys.length > 0) {\n const replacement = {};\n keys.forEach(nk => {\n replacement[newEmail] = obj[nk];\n })\n this.booking[key] = replacement;\n }\n }\n });\n\n const buffer = {};\n this.booking.multi_rooms.map(room => room.email).forEach(elem => buffer[elem] = 900);\n\n // if notes or catering exist? add 15 min buffer setup and breakdown to booking\n const has_note_buffer = (this.booking.notes && this.booking.notes?.length) || (this.booking.catering && this.booking.catering?.length) ? \n buffer : null; // 900 seconds = 15 min\n if (has_note_buffer) {\n this.booking.setup = has_note_buffer;\n this.booking.breakdown = has_note_buffer; \n this.booking.room_setup = has_note_buffer; \n this.booking.room_breakdown = has_note_buffer; \n }\n\n this._bookings.save(this.booking, this._data.action === SeriesAction.EDIT).then(\n async (bkn) => {\n this.loading = null;\n this.success = true;\n this._dialog_ref.disableClose = false;\n const updated = new Booking({ ...this.booking, ...bkn.toApiJSON() });\n this._booking_state_service.replace(updated);\n \n /**\n * update the master booking in case of recurring to have latest updated in the system\n */\n if(updated.recurrence_master_id !== null)\n { \n const master_booking = await this._bookings.show(updated.recurrence_master_id);\n this._booking_state_service.replace(master_booking);\n }\n\n if (bkn.is_recurrent && bkn.recurrence_type === 'master') {\n this._booking_state_service.pollOnce();\n this.closeDialogService.closeDialog(DialogIds.MeetingDetails);\n }\n\n localStorage.removeItem('ACA_STAFF.booking_form_data');\n this.event.emit({ reason: 'done' });\n this._service.notifySuccess(\n `Successfully ${this.booking.id ? 'updated' : 'created'} booking`\n );\n },\n (err) => {\n\n this._dialog_ref.disableClose = false;\n let erroMessage: string = '';\n switch(err.status){\n\t\t\t\t\t\t\t\t\t\t\t\t\tcase 400:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\terroMessage = 'Apologies, the booking cannot be finalized because the current time has exceeded the scheduled start time for this booking. Please try again.';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t\tcase 409:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\terroMessage = 'Apologies, this room has been booked recently by another user, please try another one.';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.lastMomentConflict = true;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n this.loading = erroMessage;\n this._service.notifyError(\n `Error ${this.booking.id ? 'updating' : 'creating'} booking: ${erroMessage}`\n );\n setTimeout(()=> {\n this.loading = null;\n this.event.emit({ reason: 'last-moment-conflict' });\n }, 4000) ;\n }\n );\n },\n (err) => {\n\n this.lastMomentConflict = true;\n this._dialog_ref.disableClose = false;\n const erroMessage = 'Apologies, this room has been booked recently by another user, please try another one.';\n this.loading = erroMessage;\n this._service.notifyError(\n `Error ${this.booking.id ? 'updating' : 'creating'} booking: ${erroMessage}`\n );\n setTimeout(()=> {\n this.loading = null;\n this.event.emit({ reason: 'last-moment-conflict' });\n }, 4000) ;\n }\n );\n }\n\n /**\n * Staff only\n */\n public newBooking() {\n this._router.navigate(['/book', 'spaces']);\n this._dialog_ref.close();\n }\n\n /**\n * Staff only\n */\n public toSchedule() {\n this._router.navigate(['/schedule'], {\n queryParams: { email: this.booking.organiser.email }\n });\n this._dialog_ref.close();\n }\n\n /**\n * Check whether the selected spaces are available for the selected time period\n */\n public checkSpaceAvailability(): Promise {\n const spaces: Space[] = this.spaces;\n if (\n (this.booking.id &&\n (this.booking.startDateTz.ms === this.old_booking.startDateTz.ms &&\n this.booking.duration === this.old_booking.duration)) ||\n (spaces && spaces.length <= 0)\n ) {\n return Promise.resolve();\n }\n return new Promise((resolve, reject) => {\n // Use of this.booking.timezone is unreliable, use booking space instead.\n const all_day = this.booking.all_day;\n // R--- should be nothing to do with date as a timestamp getter\n this._spaces\n .available({\n room_ids: spaces.map((space) => space.id).join(','),\n dateTz: this.booking.startDateTz,\n duration: all_day ? 24 * 60 : this.booking.duration,\n ignore: this.booking.icaluid,\n recurrence_count: this.booking.recurrence_count,\n recurrence_period: this.booking.recurrence_period,\n recurrence_endTz: this.booking.recurrence_endTz,\n recurrence_interval: this.booking.recurrence_interval,\n recurrence_starts: this.booking.recurrence_starts,\n is_recurrent: this.booking.is_recurrent,\n recurrence_days: this.booking.recurrence_days\n })\n .then(\n (space_list) => {\n for (const space of space_list) {\n if (!space.bookable) {\n this.lastMomentConflict = true;\n return reject(\n `${space.name} is not available at the select time period.`\n );\n }\n }\n if (space_list.length < spaces.length) {\n this.lastMomentConflict = true;\n return reject(\n `${spaces[0].name} is not available at the select time period.`\n );\n }\n resolve();\n },\n (err) => reject(err)\n );\n });\n }\n\n public openConflictsModal(){\n const ref = this._dialog.open(ConflictsModalComponent, {\n maxWidth: '95vw',\n width: '32em',\n data: {\n room_name: this.booking.local_room_name,\n conflicts: this.booking.recurrence_exceptions,\n copy_conflicts: true,\n timezone: this.booking.timezone\n }\n });\n\n this.subscription(\n 'modal_events',\n ref.componentInstance.event.subscribe((event: DialogEvent) => {\n if(event.reason === 'close'){\n ref.close();\n }else if(event.reason === 'action'){\n navigator.clipboard.writeText(this.conflictsText)\n }\n \n })\n );\n ref.afterClosed().subscribe(() => this.unsub('modal_events'));\n }\n\n public get conflictsText(){\n let text = ''\n this.booking.recurrence_exceptions.map((date)=>{\n const dateTZ = new DateTZ({date: date*1000});\n const display = dateTZ.formatDate('ccc dd MMM yyyy');\n text = `${text}\\n${display}${dateTZ.isSameDate(DateNow(new Date()), 'day') ? ' (Today)' : ''}`;\n })\n return text\n }\n}\n","\n
\n \n
\n \n
\n Booking Details\n Confirmed!\n Requested!\n
\n
Please await confirmation of room
\n
\n
\n \n
{{ title || 'No title' }}
\n
\n
\n \n
{{ when }}
\n
\n
\n \n
{{ recurrence }}
\n 0\"\n (click)=\"openConflictsModal()\"\n >\n Conflicts\n
\n
\n
\n \n
{{ duration }}
\n
\n
\n Locations({{ spaces.length || '0' }})*:\n
\n
\n
\n
{{ item?.local_name }}
\n \n Notes\n
\n \n Code\n
\n
\n
No Locations
\n
\n 1\"\n (click)=\"show_locations = !show_locations\"\n >\n {{ show_locations ? 'Hide' : 'Show more' }} Locations\n \n
\n
\n
\n \n
{{ organiser?.name || organiser?.email }}
\n
\n
\n \n
\n {{ bookingDetails.bookedBy.value }}\n
\n
\n
\n Attendees({{ attendees.length || '0' }})*:\n
\n <No Attendees>\n
\n \n
\n
{{ item.name }}
\n
\n \n
\n
\n
\n \n
\n {{item||''}}, \n \n
\n
\n
\n \n
\n
\n
\n Catering Orders({{ catering.length || '0' }})*:\n
\n
\n
\n
\n
{{ order.location || '<Removed>' }}
\n
\n {{ order.item_count }} item{{ order.item_count === 1 ? '' : '' }} |\n {{ order.total / 100 | currency: order.symbol }}\n
\n
\n
\n
\n 5\"\n (click)=\"show_orders = !show_orders\"\n >\n {{ show_orders ? 'Hide' : 'Show' }} Catering orders\n \n
\n
\n \n\n\n
\n \n \n \n \n
\n
\n\n
\n
\n
\n \n
\n
\n {{ loading }}\n
\n
\n
\n
\n\n \n \n \n
My Day\n \n\n","import {\n Component,\n Input,\n OnInit, ChangeDetectionStrategy, ChangeDetectorRef, Output, EventEmitter \n} from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { MatDialog } from '@angular/material/dialog';\nimport { distinctUntilChanged, first, skip } from 'rxjs/operators';\n\nimport {\n BaseDirective,\n closestToTimeSlotTz,\n Identity,\n unique\n} from '@mckinsey-converge/base';\nimport {\n ApplicationService,\n arrayWithValues,\n BookingAction,\n CateringOrder,\n SeriesAction,\n SettingsService,\n User,\n UsersService\n} from '@mckinsey-converge/data-common';\n\nimport { NewUserModalComponent } from '../new-user-modal/new-user-modal.component';\nimport {\n SpaceSelectModalComponent,\n SpaceSelectModalData\n} from '../space-select-modal/space-select-modal.component';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { DateTime } from 'luxon';\nimport { MatChipsModule} from '@angular/material/chips';\n\n\n@Component({\n selector: 'a-booking-form',\n templateUrl: './booking-form.component.html',\n styleUrls: ['./booking-form.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BookingFormComponent extends BaseDirective implements OnInit {\n /** Form fields for booking */\n @Input() public form: FormGroup;\n /** List of available users to host bookings */\n public user_list: User[] = [];\n public nowTz: DateTZ = DateNow(new Date());\n /** From date input for date field */\n public fromDateTz: DateTZ = this.nowTz.setValue({ minute: Math.ceil(this.nowTz.minutes / 5) * 5 });\n /** Last bookable date, concierge only */\n public readonly untilDateTz = DateNow(new Date()).addValue({ days: 365 }).endOfValue('day');\n public isConcierge: boolean;\n public localTimezone = DateNow(new Date()).building_tz;\n public localStart = \"\";\n public localEnd = \"\";\n // Define an array to store selected company options\n public chipOptions: any[] = [];\n\n constructor(\n private _service: ApplicationService,\n private _users: UsersService,\n private _dialog: MatDialog,\n private settingsService: SettingsService,\n private cdRef: ChangeDetectorRef\n ) {\n super();\n this.isConcierge = this.settingsService.concierge;\n }\n\n public ngOnInit(): void {\n // Trim title \n // this.form.get('title').setValue(this.form.get('title').value.trim());\n\n this.chipOptions = [...this.form.controls.company.value];\n\n this.localTimezone = DateNow(new Date()).building_tz;\n const building_tz = (\n this.form.controls.action &&\n (\n this.form.controls.action.value === 'booking_clone' ||\n this.form.controls.action.value === 'clone' ||\n this.form.controls.action.value === 'edit' ||\n this.form.controls.action.value === 'booking_edit'\n ) &&\n this.form.controls.dateTz &&\n this.form.controls.dateTz.value\n ) ? this.form.controls.dateTz.value.building_tz : this.localTimezone;\n\n this.nowTz = new DateTZ({ date: Date.now(), is_local_tz: false, building_tz });\n this.fromDateTz = closestToTimeSlotTz(this.nowTz, 15);\n\n this._users.initialised.pipe(first((_) => _)).subscribe(() => {\n const user: User = this._users.current;\n const delegates = user.delegates.map(\n (del) => this._users.find(del.email) || new User({ email: del.email, name: del.email.split('@')[0] })\n );\n this.user_list = [user].concat(delegates);\n });\n\n this.updateCoachmarkTimes(this.form.controls.timezone.value);\n this.subscription('formChanges', this.form.valueChanges\n .pipe(\n skip(1), // initial form changes\n distinctUntilChanged())\n .subscribe(() => {\n this.timeout('update_coachmark', () => {\n this.updateCoachmarkTimes(this.form.controls.timezone.value);\n }, 500);\n })\n );\n\n this.subscription('isRecurrentChanges', this.form.controls.is_recurrent.valueChanges\n .subscribe(() => {\n const recurrenceStarts = this.form.controls.recurrence_starts\n if(!this.form.controls.is_recurrent.value){\n recurrenceStarts.clearValidators() \n }else{\n const arrayValidators = [Validators.required];\n arrayValidators.push(arrayWithValues);\n recurrenceStarts.setValidators(arrayValidators);\n }\n recurrenceStarts.updateValueAndValidity()\n })\n ); \n\n /**Disable Inputs */\n this.disableInputs();\n\n /**turn is_recurrent to false if editing or cloning a stand-alone/occurrence */\n if(this.form.controls.id?.value && !this.form.controls.action?.value){\n this.form.controls.is_recurrent.setValue(false)\n }\n }\n\n /**\n * \n * @param key : formcontrol name \n * Function trim value being submitted with only spaces/beginning/end \n */\n public trim(key: string): void {\n this.form.get(key).setValue(this.form.get(key).value.trim());\n }\n\n /** Whether notes and description should use the HTML editor */\n public get use_html(): boolean {\n return this._service.setting('app.booking.html_body') || false;\n }\n\n /** List of available types for bookings */\n public get booking_types(): Identity[] {\n return this._service.setting('app.booking.booking_types') || [];\n }\n\n /** Display string for the list of active spaces */\n public get spaces(): string {\n const spaces = this.form.controls.space_list.value;\n return spaces.length === 1\n ? spaces[0].local_name\n : spaces.length > 1\n ? `${spaces.length} spaces selected`\n : 'No Spaces selected';\n }\n\n public disableInputs() {\n const { id, action, needs_space, is_recurrent } = this.form.value;\n const has_id = !!id;\n const is_edit = action === BookingAction.EDIT;\n if (has_id) {\n this.form.get('is_recurrent')?.disable();\n }\n\n if(is_edit){\n this.form.get('is_multiroom')?.disable();\n }\n\n if (!this.isConcierge && !needs_space) {\n this.form.get('has_catering')?.disable();\n }\n if(has_id && is_edit && is_recurrent){\n this.form.get('dateTz')?.disable()\n this.form.patchValue({ action: null });\n }\n }\n\n /**\n * Open modal to change the space details for the booking\n */\n public openSpacesModal(): void {\n const ref = this._dialog.open(\n SpaceSelectModalComponent,\n {\n width: 'auto',\n height: 'auto',\n maxWidth: '95vw',\n data: {\n spaces: this.form.controls.space_list.value,\n dateTz: this.form.controls.dateTz.value,\n duration: this.form.controls.duration.value,\n host: this.form.controls.organiser.value,\n multiple: true,\n needsCatering: !!this.form.controls.catering?.value?.length,\n }\n }\n );\n this.subscription(\n 'new_spaces',\n ref.componentInstance.event.subscribe((event) => {\n /* istanbul ignore else */\n if (event.reason === 'done') {\n let space_list = this.form.controls.space_list.value;\n space_list = event.metadata;\n this.form.controls.space_list.setValue(unique(space_list, 'id'));\n const catering = this.form.controls?.catering?.value.map((order: CateringOrder) => {\n order.location = space_list[0].name;\n order.location_id = space_list[0].email;\n return order;\n })\n this.form.controls.catering?.setValue(catering || [])\n ref.close();\n this.unsub('new_spaces');\n }\n if (event.reason === 'close') {\n ref.close();\n this.unsub('new_spaces');\n }\n })\n );\n }\n\n /**\n * Open modal to change the recurrence details for the booking\n */\n public openNewUserModal() {\n const ref = this._dialog.open(NewUserModalComponent, {\n width: 'auto',\n height: 'auto'\n });\n this.subscription(\n 'new_user',\n ref.componentInstance.event.subscribe((event) => {\n /* istanbul ignore else */\n if (event.reason === 'done') {\n const attendees = this.form.controls.attendees?.value;\n attendees.push(event.metadata);\n this.form.controls.attendees.setValue(unique(attendees, 'email'));\n ref.close();\n this.unsub('new_user');\n this.cdRef.detectChanges();\n }\n })\n );\n }\n\n // Add & Remove chip and set the value of the form control accordingly\n addCompany(event, company): void {\n if (company) {\n this.chipOptions.push(company);\n this.form.controls.company.setValue(this.chipOptions);\n }\n event.preventDefault();\n }\n\n removeOption(option: any): void {\n const index = this.chipOptions.indexOf(option);\n if (index >= 0) {\n this.chipOptions.splice(index, 1);\n }\n this.form.controls.company.setValue(this.chipOptions);\n }\n\n private updateCoachmarkTimes(timezone: string) {\n if (!timezone) timezone = this.localTimezone;\n // Resolve the problem that locally I might have the same TZ offset but the names don't match.\n const localTzOffset = DateTime.now().setZone(this.localTimezone).offset;\n const buildingTzOffset = DateTime.now().setZone(timezone).offset;\n const dateTz = this.form.controls.dateTz.value;\n if (dateTz && localTzOffset !== buildingTzOffset) {\n const startDate = dateTz.clone();\n this.localStart = startDate.formatLocalDate(\"h:mma\");\n this.localEnd = startDate.addValue({ minutes: this.form.value.duration }).formatLocalDate(\"h:mma\");\n } else {\n // No location is selected so coachmark is hidden\n this.localStart = \"\";\n this.localEnd = \"\";\n }\n this.cdRef.detectChanges();\n }\n\n public get isSeriesAction(){\n return this.form.value.action === SeriesAction.CLONE || this.form.value.action === SeriesAction.EDIT\n }\n\n onToggleChange(toggledControlName: string): void {\n if (toggledControlName === 'is_recurrent') {\n // If the is_recurrent toggle is being activated, deactivate is_multiroom\n if (this.form.controls.is_recurrent?.value) {\n this.form.controls.is_multiroom?.setValue(false);\n }\n } else if (toggledControlName === 'is_multiroom') {\n // If the is_multiroom toggle is being activated, deactivate is_recurrent\n if (this.form.controls.is_multiroom?.value) {\n this.form.controls.is_recurrent?.setValue(false);\n }\n }\n }\n \n}\n","
\n \n \n \n
\n
\n \n Title*:\n \n \n \n\n \n {{ ( form?.get('title').errors && form?.get('title').hasError('pattern')) \n ? 'Some special characters (^=`~!@#$%*{};:\\'_\\\",.\\<>) are not allowed' : 'Title is required'}} \n \n \n
\n\n
\n \n
\n \n \n
\n Date and time must be in the future\n
\n
\n
\n
\n
\n \n \n
\n Date and time must be in the future\n
\n
\n
\n
\n \n \n
\n \n
\n Duration is invalid. End time must be in the future\n
\n
\n
\n Please be aware that this booking starts at {{localStart}} and ends at {{localEnd}} in your local timezone.\n
\n
\n
\n
\n Recurring booking\n
\n \n
\n Multiroom\n
\n
\n \n \n
\n \n \n \n \n \n {{ user.name || user.email }}\n \n \n \n
\n
\n \n \n \n {{ form?.get('attendees').errors?.customError }}\n \n
\n
\n \n
\n \n
\n \n
\n \n \n {{ ( form?.get('company').errors && form?.get('company').hasError('pattern'))\n ? 'Some special characters (^=`~@#$%*{};:_\\\",.\\<>) are not allowed' : ''}}\n \n
\n \n
\n \n \n {{ selected }}\n
\n
\n
\n
\n\n
1\">\n \n \n \n \n {{ type.name }}\n \n \n \n
\n
\n Need a meeting space?\n \n
\n
\n \n \n Need catering?\n \n
\n
\n \n \n \n \n \n \n \n
\n
\n","import {\n Component,\n EventEmitter,\n Inject,\n OnInit,\n Output\n} from '@angular/core';\nimport {\n MAT_DIALOG_DATA,\n MatDialogRef\n} from '@angular/material/dialog';\nimport {\n FormControl,\n FormGroup\n} from '@angular/forms';\n\nimport {\n ApplicationService,\n CateringItem,\n OrganisationService,\n Space,\n SpacesService\n} from '@mckinsey-converge/data-common';\nimport {\n BaseDirective,\n DialogEvent\n} from '@mckinsey-converge/base';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\n\n\nexport interface CateringConfirmModalData {\n all_day: boolean;\n form: FormGroup;\n dateTz: DateTZ;\n}\n\n@Component({\n selector: 'a-catering-confirm-modal',\n templateUrl: './catering-confirm-modal.component.html',\n styleUrls: ['./catering-confirm-modal.component.scss']\n})\nexport class BookingCateringConfirmModalComponent extends BaseDirective implements OnInit {\n /** Emitter for user actions on the modal */\n @Output() public event = new EventEmitter();\n /** List of selected items for the order */\n public item_list: CateringItem[] = [];\n\n /** Space selected for delivery */\n public get space(): Space {\n return this._spaces.find(this._data.form?.controls?.location_id?.value);\n }\n\n /** Delivery time for the order */\n public get delivery_time(): string {\n let date = this._data.dateTz;\n if (this._data.form && this._data.form.controls.delivery_time) {\n date = date.addValue({ minutes: this._data.form.controls.delivery_time.value });\n }\n return date.formatDate('h:mma').toLocaleLowerCase();\n }\n\n /** Form field for order items */\n public get item_field(): FormControl {\n return this._data.form.controls.items as any;\n }\n\n /** Total cost of the order */\n public get order_cost(): number {\n return this.item_list.reduce((amount, item) => {\n const price = item.price\n return amount + item.amount * price\n }, 0);\n }\n\n /** Currency symbol for the selected space */\n public get symbol(): string {\n /* istanbul ignore else */\n if (!this.space || !this.space.level) {\n return 'USD';\n }\n const building = this._org.buildings.find(\n (bld) => bld.id === this.space.level.building_id\n ) || { currency: 'USD' };\n return building.currency;\n }\n\n constructor(\n private _service: ApplicationService,\n private _org: OrganisationService,\n private _spaces: SpacesService,\n private _dialog_ref: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private _data: CateringConfirmModalData\n ) {\n super();\n if (!this._data.form) {\n this._service.notifyError('No form data for order');\n this._dialog_ref.close();\n }\n }\n\n public ngOnInit(): void {\n /* istanbul ignore else */\n if (this._data.form.controls.items) {\n this.subscription(\n 'item_list',\n this._data.form.controls.items.valueChanges.subscribe((items) => {\n /* istanbul ignore else */\n if (!items || items.length <= 0) {\n this._dialog_ref.close();\n }\n })\n );\n }\n this.item_list = this._data.form.controls.items.value.map((item) => new CateringItem(item.toJSON()));\n }\n}\n","
\n
Confirm Catering Order
\n \n
\n\n
\n
\n Delivering to {{ space?.local_name || '<Unset>' }} at {{ delivery_time }}\n
\n
\n \n
\n
\n \n
{{ order_cost / 100 | currency:symbol }}
\n
\n
\n
\n\n
\n \n
\n
\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n OnInit,\n Output,\n ViewChild\n} from '@angular/core';\nimport {\n AbstractControl,\n FormControl,\n FormGroup,\n Validators\n} from '@angular/forms';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\n\nimport {\n OrganisationService,\n BookingNote,\n CateringOrder,\n Space,\n UsersService,\n CateringNotesService,\n Booking\n} from '@mckinsey-converge/data-common';\nimport {\n DialogEvent,\n HashMap\n} from '@mckinsey-converge/base';\n\nimport { DateNow } from '@mckinsey-converge/date-tz';\n\n\nexport interface CateringDetailsModalData {\n spaces: Space[];\n notes_field: AbstractControl;\n catering: AbstractControl;\n booking: Booking\n}\n\n@Component({\n selector: 'a-catering-details-modal',\n templateUrl: './catering-details-modal.component.html',\n styleUrls: ['./catering-details-modal.component.scss']\n})\nexport class CateringDetailsModalComponent implements OnInit {\n /** Emitter for modal events */\n @Output() public event = new EventEmitter();\n /** Mapping of spaces to notes */\n public notes: HashMap = {};\n /** Mapping of spaces to cost codes */\n public codes: HashMap = {};\n /** Mapping of spaces to estimated head count */\n public head_counts: HashMap = {};\n /** Mapping of spaces to form fields */\n public form: HashMap = {};\n /** Map of spaces to whether they need a charge code */\n public needs_charge_code: HashMap = {};\n /** Index of the active space */\n public active_space: number = 0;\n\n @ViewChild('content', { static: true }) private _content_el: ElementRef;\n\n /** List of selected spaces */\n public get space_list(): Space[] {\n return (this._data.spaces || []).filter((space) =>\n this._data.catering.value.find((order) => order.location_id === space.email)\n );\n }\n\n public get active_form(): FormGroup {\n return this.form[this.space_list[this.active_space].email];\n }\n\n public get invalid_charge_code(): boolean {\n return this.active_form.controls.code.errors?.pattern || this.active_form.controls.code.errors?.minlength;\n }\n\n /** Whether form fields are valid */\n public get is_valid(): boolean {\n return this.space_list.reduce(\n (valid, space) => valid && this.form[space.email].valid,\n true\n );\n }\n\n constructor(\n private _org: OrganisationService,\n private _users: UsersService,\n private _cateringNotesService: CateringNotesService,\n @Inject(MAT_DIALOG_DATA) private _data: CateringDetailsModalData\n ) {\n }\n\n public ngOnInit(): void {\n const note_list = this._data.notes_field.value.filter(\n (note: BookingNote) => note.type === 'catering'\n );\n this.notes = note_list.reduce((map, note) => {\n map[note.space] = note.message;\n return map;\n }, {});\n this.codes = this._data.catering.value.reduce((map, order: CateringOrder) => {\n map[order.location_id] = order.charge_code;\n return map;\n }, {});\n this.generateFormFields();\n }\n\n public submit(): void {\n this.space_list.forEach((space) => this.form[space.email].markAllAsTouched());\n /* istanbul ignore else */\n if (this.is_valid) {\n // Update notes\n const notes = this._data.notes_field.value.filter(\n (note: BookingNote) => note.type !== 'catering'\n );\n const new_notes = this.space_list.map(\n (space) =>\n ({\n author: this._data.booking.booked_by ? this._data.booking.booked_by['name'] : this._users.current.name,\n type: 'catering',\n message: this.form[space.email].controls.notes.value,\n space: space.email,\n date: DateNow(new Date()).ms\n } as BookingNote)\n );\n this._cateringNotesService.setNotes(new_notes);\n this._data.notes_field.setValue(notes.concat(new_notes).filter((note) => note.message));\n // Save the notes\n const orders = this._data.catering.value.map(\n (order) =>\n new CateringOrder({\n ...order,\n charge_code: this.form[order.location_id]\n ? this.form[order.location_id].controls.code.value\n : ''\n })\n );\n\n this._data.catering.setValue(orders);\n // This should go to the next\n this.event.emit({ reason: 'done' });\n } else {\n this._scrollToBottom();\n }\n }\n\n /** Generate form fields for each space */\n private generateFormFields(): void {\n for (const space of this.space_list) {\n const building = this._org.buildings.find(\n bld => bld.id === space.level.building_id\n );\n \n this.needs_charge_code[space.email] = space?.filters?.charge_code || space?.settings?.charge_code || false;\n this.form[space.email] = new FormGroup({\n notes: new FormControl(this.notes[space.email] || ''),\n code: new FormControl(this.codes[space.email] || '',\n this.needs_charge_code[space.email] ?\n [Validators.pattern(/^[a-zA-Z0-9]{4,}$/), Validators.minLength(4), Validators.required ] : [Validators.pattern(/^[a-zA-Z0-9]{4,}$/), Validators.minLength(4)])\n });\n }\n }\n\n /** Scroll the content container to the bottom */\n private _scrollToBottom(): void {\n this._content_el?.nativeElement.scrollTo({\n top: this._content_el.nativeElement.scrollHeight,\n left: 0,\n behavior: 'smooth'\n });\n }\n}\n","
\n
\n \n \n \n
\n \n
\n\n
\n
\n \n
Please specify any allergies or gluten intolerances
\n
\n
\n
\n \n \n \n \n
\n
\n \n Charge Code\n *\n \n \n \n \n Note: Your booking will be confirmed before you are charged.\n \n \n {{ invalid_charge_code ? 'Valid Charge Code Required' : 'Charge Code is required'}}\n \n \n
\n
\n
\n
\n\n
\n \n
\n
\n","import {\n Component,\n EventEmitter,\n Inject,\n Output\n} from '@angular/core';\nimport {\n MAT_DIALOG_DATA,\n MatDialogRef\n} from '@angular/material/dialog';\n\nimport { ApplicationIcon } from '@mckinsey-converge/data-common';\nimport {\n BaseDirective,\n DialogEvent\n} from '@mckinsey-converge/base';\n\nexport interface ConfirmModalData {\n /** Title of the modal */\n title: string;\n /** Contents of the modal */\n content: string;\n /** Text displaed on the confirmation button */\n action?: string;\n /** Icon to display on the modal */\n icon: ApplicationIcon;\n}\n\nexport const CONFIRM_METADATA = {\n height: 'auto',\n width: '24em',\n maxHeight: 'calc(100vh - 2em)',\n maxWidth: 'calc(100vw - 2em)'\n};\n\n@Component({\n selector: 'confirm-modal',\n templateUrl: './confirm-modal.component.html',\n styleUrls: ['./confirm-modal.component.scss']\n})\nexport class ConfirmModalComponent extends BaseDirective {\n /** Emitter for user action on the modal */\n @Output() public event = new EventEmitter();\n /** Loading state */\n public loading: string;\n\n /** Title of the confirm modal */\n public get title(): string {\n return (this._data ? this._data.title : null) || 'Confirm';\n }\n\n /** Body of the confirm modal */\n public get content(): string {\n return (this._data ? this._data.content : null) || 'Are you sure?';\n }\n\n /** Display text on the confirm button */\n public get action(): string {\n return (this._data ? this._data.action : null) || 'Ok';\n }\n\n /** Display icon properties */\n public get icon(): ApplicationIcon {\n return (this._data ? this._data.icon : null) || null;\n }\n\n constructor(\n private _dialog: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private _data: ConfirmModalData\n ) {\n super();\n }\n\n /**\n * User confirmation of the content of the modal\n */\n public accept() {\n this.event.emit({ reason: 'done' });\n }\n}\n","
\n

{{ title || 'Confirm' }}

\n
\n\n
\n \n
\n

\n
\n
\n
\n\n
\n \n \n
\n
\n\n
\n
\n
\n \n
\n
{{ loading }}
\n
\n
\n
\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { LegacyUiModule } from '@mckinsey-converge/legacy-ui';\nimport { UiModule } from '@mckinsey-converge/ui';\nimport {\n FormsModule,\n ReactiveFormsModule\n} from '@angular/forms';\nimport { SpaceSelectModalComponent } from './space-select-modal/space-select-modal.component';\nimport { NewUserModalComponent } from './new-user-modal/new-user-modal.component';\nimport { ConfirmModalComponent } from './confirm-modal/confirm-modal.component';\nimport { NoCateringModalComponent } from './no-catering-modal/no-catering-modal.component';\nimport { BookingCateringConfirmModalComponent } from './catering-confirm-modal/catering-confirm-modal.component';\nimport { CateringDetailsModalComponent } from './catering-details-modal/catering-details-modal.component';\nimport { RequirementDetailsModalComponent } from './requirement-details-modal/requirement-details-modal.component';\nimport { BookingConfirmComponent } from './booking-confirm/booking-confirm.component';\nimport { BaseModule } from '@mckinsey-converge/base';\nimport { UserFormComponent } from './user-form/user-form.component';\nimport { BookingFormComponent } from './booking-form/booking-form.component';\nimport { EditorModule } from '@tinymce/tinymce-angular';\n\nconst DECLARATIONS = [\n SpaceSelectModalComponent,\n NewUserModalComponent,\n ConfirmModalComponent,\n NoCateringModalComponent,\n BookingCateringConfirmModalComponent,\n CateringDetailsModalComponent,\n RequirementDetailsModalComponent,\n BookingConfirmComponent,\n UserFormComponent,\n BookingFormComponent,\n];\n\n@NgModule({\n imports: [\n LegacyUiModule,\n FormsModule,\n ReactiveFormsModule,\n CommonModule,\n UiModule,\n BaseModule,\n EditorModule,\n ],\n declarations: [\n ...DECLARATIONS\n ],\n exports: [\n ...DECLARATIONS,\n BaseModule\n ]\n})\nexport class LegacyOverlaysModule {\n}\n","import { Component, EventEmitter, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\n\nimport { BaseDirective, DialogEvent } from '@mckinsey-converge/base';\nimport { generateUserForm, User } from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'new-user-modal',\n templateUrl: './new-user-modal.component.html',\n styleUrls: ['./new-user-modal.component.scss'],\n})\nexport class NewUserModalComponent extends BaseDirective implements OnInit {\n /** Emitter for user action on the modal */\n @Output() public event = new EventEmitter();\n /** Form fields for the new user */\n public form: FormGroup;\n /** New user data store */\n public user: User;\n /** Whether user details are being saved */\n public loading: boolean;\n\n public ngOnInit(): void {\n this.user = new User();\n this.form = generateUserForm(this.user);\n }\n\n public saveChanges() {\n this.form.markAllAsTouched();\n if (this.form.valid) {\n if (!this.form.controls.email.value) {\n this.form.controls.email.setValue(\n `${Math.floor(Math.random() * 99999)}@guest.mckinsey.com`\n );\n }\n const firstName = this.form.value.first_name.split(' ')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n\n const lastName = this.form.value.last_name.split(' ')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n \n const new_user = new User({\n ...this.form.value,\n name: `${firstName} ${lastName}`,\n type: 'external',\n external: true,\n visitor: true,\n });\n this.event.emit({ reason: 'done', metadata: new_user });\n }\n }\n}\n","
\n

Add External Attendee

\n \n
\n
\n \n
\n
\n \n \n
\n\n
\n
\n
\n \n
\n
\n Saving attendee...\n
\n
\n
\n
\n\n","import {\n Component,\n Output,\n EventEmitter\n} from '@angular/core';\nimport {\n MatDialogRef,\n} from '@angular/material/dialog';\nimport {\n BaseDirective,\n DialogEvent\n} from '@mckinsey-converge/base';\n\n@Component({\n selector: 'no-catering-modal',\n templateUrl: './no-catering-modal.component.html',\n styleUrls: ['./no-catering-modal.component.scss']\n})\nexport class NoCateringModalComponent extends BaseDirective {\n constructor(\n private _dialog_ref: MatDialogRef,\n ) {\n super();\n }\n\n // /** Emitter for user action on the modal */\n @Output() public event = new EventEmitter();\n\n // Submit the Survey in it's current state.\n public confirm() {\n this.event.emit({ reason: 'done' });\n this._dialog_ref.close();\n }\n\n // Close the modal\n public cancel() {\n this.event.emit({ reason: 'close' });\n this._dialog_ref.close();\n }\n}\n","
\n \n
\n
\n
\n \n

Catering is not available for your new room selection. \n
Are you sure you want to change rooms?

\n
\n
\n \n \n \n
\n
\n
","import {\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n OnInit,\n Output,\n ViewChild\n} from '@angular/core';\nimport {\n AbstractControl,\n FormControl,\n FormGroup,\n Validators\n} from '@angular/forms';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\n\nimport {\n BookingNote,\n OrganisationService,\n SettingsService,\n Space,\n UsersService\n} from '@mckinsey-converge/data-common';\nimport {\n DialogEvent,\n HashMap\n} from '@mckinsey-converge/base';\n\nimport { DateNow } from '@mckinsey-converge/date-tz';\n\n\nexport interface RequirementDetailsModalData {\n spaces: Space[];\n notes_field: AbstractControl;\n codes_field: AbstractControl;\n head_counts_field: AbstractControl;\n standalone?: boolean;\n}\n\n@Component({\n selector: 'a-requirement-details-modal',\n templateUrl: './requirement-details-modal.component.html',\n styleUrls: ['./requirement-details-modal.component.scss']\n})\nexport class RequirementDetailsModalComponent implements OnInit {\n /** Emitter for modal events */\n @Output() public event = new EventEmitter();\n /** Mapping of spaces to notes */\n public notes: HashMap = {};\n /** Mapping of spaces to cost codes */\n public codes: HashMap = {};\n /** Mapping of spaces to estimated head count */\n public head_counts: HashMap = {};\n /** Mapping of spaces to form fields */\n public form: HashMap = {};\n /** Map of spaces to whether they need a charge code */\n public needs_charge_code: boolean;\n /** Index of the active space */\n public active_space: number = 0;\n\n @ViewChild('content', { static: true }) private _content_el: ElementRef;\n\n /** List of selected spaces */\n public get space_list(): Space[] {\n return this._data.spaces;\n }\n\n public get has_recurrence(): boolean {\n return false\n }\n\n public get active_form(): FormGroup {\n return this.form[this.space_list[this.active_space].email];\n }\n\n public get invalid_charge_code(): boolean {\n return this.active_form.controls.code.errors?.minlength || this.active_form.controls.code.errors?.pattern;\n }\n\n /** Whether form fields are valid */\n public get is_valid(): boolean {\n // return this.space_list.reduce((valid, space) => valid && this.form[space.email].valid, true);\n return this.space_list.length > 0 && this.space_list.reduce((valid, space) => valid && this.form[space.email].valid, true);\n }\n\n public isConcierge: boolean;\n public frontend: string;\n\n constructor(\n private _org: OrganisationService,\n private _users: UsersService,\n @Inject(MAT_DIALOG_DATA) private _data: RequirementDetailsModalData,\n private _settings: SettingsService,\n ) {\n this.isConcierge = _settings.concierge;\n this.frontend = _settings.frontend;\n }\n\n public ngOnInit(): void {\n const note_list = this._data.notes_field.value\n .filter((note: BookingNote) => note.type === 'equipment');\n this.notes = note_list.reduce((map, note) => {\n map[note.space] = note.message;\n return map;\n }, {});\n this.codes = { ...this._data.codes_field.value };\n this.head_counts = { ...this._data.head_counts_field.value };\n this.generateFormFields();\n }\n\n public submit(): void {\n // Get the email of the first space\n const firstSpaceEmail = this.space_list[0].email;\n\n // Copy values from the first space's form controls to all other spaces\n this.space_list.forEach(space => {\n if (space.email !== firstSpaceEmail) {\n this.form[space.email].controls.notes.setValue(this.form[firstSpaceEmail].controls.notes.value);\n this.form[space.email].controls.code.setValue(this.form[firstSpaceEmail].controls.code.value);\n this.form[space.email].controls.head_count.setValue(this.form[firstSpaceEmail].controls.head_count.value);\n }\n });\n\n this.space_list.forEach(space => this.form[space.email].markAllAsTouched());\n /* istanbul ignore else */\n if (this.is_valid) {\n // Update notes \n const notes = this._data.notes_field.value\n .filter((note: BookingNote) => note.type !== 'equipment');\n const new_notes = this.space_list.map(space => ({\n author: this._users.current.name,\n type: 'equipment',\n message: this.form[space.email].controls.notes.value.trim(),\n space: space.email,\n date: DateNow(new Date()).ms\n } as BookingNote));\n this._data.notes_field.setValue(notes.concat(new_notes).filter(note => note.message));\n this._data.codes_field.setValue(this.space_list.reduce((map, space) => {\n map[space.email] = this.form[space.email].controls.code.value;\n return map;\n }, {}));\n this._data.head_counts_field.setValue(this.space_list.reduce((map, space) => {\n map[space.email] = this.form[space.email].controls.head_count.value;\n return map;\n }, {}));\n this.event.emit({ reason: 'done' });\n } else {\n this._content_el.nativeElement.scrollTo({\n top: this._content_el.nativeElement.scrollHeight,\n left: 0,\n behavior: 'smooth'\n });\n }\n }\n\n /** Generate form fields for each space */\n // private generateFormFields(): void {\n // for (const space of this.space_list) {\n // const building = this._org.buildings.find(\n // bld => bld.id === space[0]?.level.building_id\n // );\n // // this.needs_charge_code[space.email] = space?.settings?.equipment_code || building?.required?.equipment_code || false;\n // const { filters, settings } = space;\n // const roomBasedEqCode = filters?.equipment_code || settings?.equipment_code;\n // const officeBasedEqCode = building?.required?.equipment_code;\n // this.needs_charge_code[space.email] = roomBasedEqCode !== undefined ? roomBasedEqCode : officeBasedEqCode !== undefined ? officeBasedEqCode: false;\n\n // this.form[space.email] = new FormGroup({\n // notes: new FormControl(this.notes[space.email] || ''),\n // code: new FormControl(\n // this.codes[space.email] || '',\n // this.needs_charge_code[space.email] ?\n // [Validators.pattern(/^[a-zA-Z0-9]*$/), Validators.minLength(4), Validators.required] : [Validators.minLength(4), Validators.pattern(/^[a-zA-Z0-9]*$/)]\n // ),\n // head_count: new FormControl(this.head_counts[space.email] || '', [Validators.required, Validators.pattern(/^(?!0+$)/)])\n // });\n // }\n // }\n \n private generateFormFields(): void {\n // Initialize a variable to determine if any space needs a charge code\n let anySpaceNeedsChargeCode = false;\n \n // First pass to determine if any space needs a charge code\n for (const space of this.space_list) {\n const building = this._org.buildings.find(\n bld => bld.id === space?.level.building_id\n );\n const { filters, settings } = space;\n const roomBasedEqCode = filters?.equipment_code;\n const officeBasedEqCode = building?.required?.equipment_code;\n \n // this.needs_charge_code[space.email] = space?.settings?.equipment_code || building?.required?.equipment_code || false;\n if (roomBasedEqCode || officeBasedEqCode) {\n anySpaceNeedsChargeCode = true;\n this.needs_charge_code = true;\n break;\n } else{\n this.needs_charge_code = false;\n }\n }\n \n // Second pass to create form groups with the determined charge code requirement.\n // We show only the first space, but if one of the selected spaces needs a mandatory charge code,\n // then all spaces need a mandatory charge code\n for (const space of this.space_list) { \n this.form[space.email] = new FormGroup({\n notes: new FormControl(this.notes[space.email] || ''),\n code: new FormControl(\n this.codes[space.email] || '',\n anySpaceNeedsChargeCode ?\n [Validators.pattern(/^[a-zA-Z0-9]*$/), Validators.minLength(4), Validators.required] :\n [Validators.minLength(4), Validators.pattern(/^[a-zA-Z0-9]*$/)]\n ),\n head_count: new FormControl(this.head_counts[space.email] || '', [Validators.required, Validators.pattern(/^(?!0+$)/)])\n });\n }\n }\n}\n","
\n
\n \n \n \n \n {{\n this.space_list.length > 1 ? this.space_list.length + ' spaces selected' :\n this.space_list[0]?.local_name || 'No spaces selected'\n }}\n \n \n \n \n
\n \n
\n\n
\n
\n \n
\n {{\n has_recurrence && !isConcierge\n ? 'To update headcount information, add equipment or catering, please edit individual meeting occurences in My Day'\n : \"Would you like to add equipment to your booking's spaces?\"\n }}\n
\n
\n
\n
\n \n \n \n \n
\n
\n \n \n Charge Code*\n \n \n \n \n Note: Your booking will be confirmed before you are\n charged.\n \n \n {{ invalid_charge_code ? 'Valid Charge Code Required' : 'Charge Code is required'}}\n \n \n
\n
\n \n Headcount Estimate*\n \n \n \n \n Note: This estimate is used to calculate catering and/or\n assign rooms. Please keep updated of any changes.\n \n \n Headcount Estimate is required\n \n \n
\n
\n \n \n\n\n
\n \n
\n
\n","import {\n Component,\n EventEmitter,\n Inject,\n OnInit,\n Output,\n} from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport {\n BehaviorSubject,\n Observable,\n of,\n Subject\n} from 'rxjs';\nimport {\n catchError,\n debounceTime,\n distinctUntilChanged,\n first,\n map,\n switchMap,\n take,\n withLatestFrom\n} from 'rxjs/operators';\nimport {\n Building,\n mapBuildingToSelectOption,\n mapCityToAllSelectOption,\n OrganisationService,\n SettingsService,\n Space,\n SpaceBookingRuleOptions,\n SpacesService,\n toggleSelectedByGroup,\n User,\n UsersService\n} from '@mckinsey-converge/data-common';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n DialogEvent,\n HashMap,\n Identity,\n unique\n} from '@mckinsey-converge/base';\nimport { NoCateringModalComponent } from '../no-catering-modal/no-catering-modal.component'\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { SelectOption } from '@mckinsey-converge/ui';\n\nexport interface SpaceSelectModalData {\n /** List of selected spaces */\n spaces: Space[];\n /** Start time for availability of spaces */\n dateTz: DateTZ;\n /** Duration of the availability block to look for */\n duration: number;\n /** Host of the booking being made */\n host: User;\n /** Whether multiple spaces can be selected */\n multiple: boolean;\n /** Force zone ids */\n zone_ids?: string;\n /** Booking needs catering */\n needsCatering?: boolean,\n}\n\n@Component({\n selector: 'a-space-select-modal',\n templateUrl: './space-select-modal.component.html',\n styleUrls: ['./space-select-modal.component.scss']\n})\nexport class SpaceSelectModalComponent extends BaseDirective implements OnInit {\n /** Emitter for user action on the modal */\n @Output() public event = new EventEmitter();\n /** Whether space list is being loaded */\n public loading: boolean;\n /** List of available spaces to select from */\n public spaces: Space[] = [];\n /** Active building to filter spaces on */\n public active_building: Building;\n /** Active building to filter spaces on */\n public active_type: Identity;\n /** List of items from an API search */\n public search_results$: Observable;\n /** Subject holding the value of the search */\n public readonly change$ = new Subject();\n /** List of currently selected spaces */\n public selected_spaces: Space[] = [];\n /** Mapping as to whether a space is by request */\n public request_map: HashMap = {};\n /** Whether selected list should be shown on mobile */\n public show_list: boolean;\n\n /** host to load (only in staff) **/\n public host: User;\n\n /** List of available buildings */\n public types: Identity[] = [];\n\n public isConcierge: boolean;\n public frontend: string;\n\n /** List of available buildings */\n public get buildings(): Building[] {\n return this._org.buildings;\n }\n\n /** Whether multiple spaces can be selected */\n public get multiple(): boolean {\n return false;\n }\n\n public get has_zone(): boolean {\n return !!this._data.zone_ids;\n }\n\n public formGroup = new FormGroup({\n location: new FormControl([]),\n });\n\n public options = new BehaviorSubject[]>([]);\n\n public selectedOptions = new BehaviorSubject[]>([]);\n\n\n public noCateringDialogRef: MatDialogRef;\n\n /** List of zones to filter the spaces on */\n public zone_ids: string[] = [];\n\n\n public get initialBuildingIds(): string[] {\n return this._org.building ? [this._org.building.id] : [];\n }\n\n public savedSelection\n\n constructor(\n private _org: OrganisationService,\n private _users: UsersService,\n private _spaces: SpacesService,\n private _settings: SettingsService,\n private _dialog: MatDialog,\n @Inject(MAT_DIALOG_DATA) private _data: SpaceSelectModalData\n ) {\n super();\n this.isConcierge = _settings.concierge;\n this.frontend = _settings.frontend;\n }\n\n public ngOnInit(): void {\n this._spaces.initialised.pipe(first((_) => _)).subscribe(() => {\n let request_id = 0;\n // Listen for input changes\n this.search_results$ = this.change$.pipe(\n debounceTime(400),\n distinctUntilChanged(),\n switchMap((bld) => {\n this.loading = true;\n const zone_ids: string[] = [];\n /* istanbul ignore else */\n if (this.active_building) {\n zone_ids.push(this.active_building.id);\n }\n\n if (bld?.includes('|')) {\n bld = this.savedSelection\n }\n\n const id = request_id;\n return this._spaces.available({\n zone_ids: bld?.length ? bld : this._data.spaces[0].building.id || zone_ids.join(','),\n dateTz: this._data.dateTz,\n duration: this._data.duration\n }).then(async (list) => ({ id, list }));\n }),\n catchError((_) => of({ id: request_id, list: [], error: _ })),\n map((resp: { id: number, list: Space[] }) => {\n this.loading = false;\n const filtered_list = resp.list.filter((space: Space) => {\n // if concierge skip rules check.\n if (this._settings.concierge) {\n return (this.active_type && this.active_type.id ? space.zones.includes(`${this.active_type.id}`) : true) &&\n !this.selected_spaces.find((s) => s.id === space.id);\n }\n\n const rules = space.rulesFor({\n dateTz: this._data.dateTz,\n duration: this._data.duration,\n host: this.host || this._data.host\n });\n return (\n rules.hide !== true &&\n (this.active_type && this.active_type.id\n ? space.zones.includes(`${this.active_type.id}`)\n : true) &&\n !this.selected_spaces.find((_space) => _space.id === space.id)\n );\n });\n return resp.id === request_id ? filtered_list : this.spaces;\n })\n );\n // Process API results\n this.subscription(\n 'search_results',\n this.search_results$.subscribe((list) => {\n this.spaces = list.filter((space) => {\n if (!space.available) {\n return false;\n }\n for (const zone of this.zone_ids) {\n if (space.zones.includes(zone)) {\n return true;\n }\n }\n return !this.zone_ids.length;\n });\n this.spaces.sort((a, b) => this.sort(a, b));\n if (!this.selectedOptions.value.length) {\n this.setDefaultBuilding()\n }\n })\n );\n this.active_building = this._data.spaces?.length\n ? this._org.buildings.find((i) => i.id === this._data.spaces[0].level.building_id)\n : this._org.building;\n this.types = [{ id: '', name: 'Any Space Type' } as any].concat(\n this._org.space_types || []\n );\n this.active_type = this.types[0];\n this.change$.next('');\n });\n\n this.subscription('buildings', this._org.listen('buildings').subscribe((bld_list) => {\n const city = this._org.building.city\n const timezone = this._org.building.timezone\n const grouped_by_city = {\n key: { name: city, timezone },\n value: bld_list?.filter((bld) => bld.city === city) || []\n }\n const city_buildings = grouped_by_city.value.map(\n (bld) => mapBuildingToSelectOption(grouped_by_city.key.name, bld)\n )\n const buildings = [\n mapCityToAllSelectOption(grouped_by_city.key),\n ...city_buildings\n ]\n this.options.next(buildings)\n }));\n\n }\n\n /** Add space to selected list */\n public addSpace(space: Space) {\n this.selected_spaces.push(space);\n this.selected_spaces = unique(this.selected_spaces, 'id');\n }\n\n /** Remove space from selected list */\n public removeSpace(space: Space) {\n this.selected_spaces = this.selected_spaces.filter((a_space) => a_space.id !== space.id);\n }\n\n /** Emit current state of the selected list */\n public save(list: Space[]) {\n if (!this._data.needsCatering) {\n // No catering order to warn about\n this.event.emit({ reason: 'done', metadata: list });\n return;\n }\n // Check if the room has catering \n if (list[0].has_catering) {\n this.event.emit({ reason: 'done', metadata: list });\n return;\n }\n // If not warn that the room doesn't have catering\n this.noCateringDialogRef = this._dialog.open(NoCateringModalComponent, {\n panelClass: 'mck-modal-mini',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n this.subscription(\n 'no-catering-modal',\n this.noCateringDialogRef.componentInstance.event.subscribe((event) => {\n if (event.reason === 'done') {\n this.event.emit({ reason: 'done', metadata: list });\n }\n if (event.reason === 'close') {\n this.event.emit({ reason: 'close' });\n }\n })\n );\n }\n\n private update() {\n const map = {};\n const options: SpaceBookingRuleOptions = {\n dateTz: this._data.dateTz,\n duration: this._data.duration,\n host: this._data.host\n };\n this.selected_spaces.forEach((space) => (map[space.id] = space.byRequest(options)));\n this.spaces.forEach((space) => (map[space.id] = space.byRequest(options)));\n this.request_map = map;\n }\n\n public setDefaultBuilding() {\n const defaultBld = this.options.value.filter(opt => opt.value === this._org.building.id)\n this.selectedOptions.next(defaultBld)\n }\n\n /**\n * Compare two spaces to determine order\n * @param space_a\n * @param space_b\n */\n public sort(space_a: Space, space_b: Space) {\n const bld = this._org.buildings.find((bld) => space_a.zones.includes(bld.id)) || { name: '', sort_order: [] };\n const bld_b = this._org.buildings.find((bld) => space_b.zones.includes(bld.id));\n if (bld && bld !== bld_b) {\n return bld.name.localeCompare(bld_b?.name);\n }\n const sort_order = [...bld.sort_order].reverse();\n for (const zone_id of sort_order) {\n if (zone_id === '*') {\n continue;\n }\n const a_has_zone = space_a.zones.indexOf(zone_id) >= 0;\n const b_has_zone = space_b.zones.indexOf(zone_id) >= 0;\n if (a_has_zone && !b_has_zone) {\n return 1;\n } else if (b_has_zone && !a_has_zone) {\n return -1;\n }\n }\n return space_a.name.localeCompare(space_b.name);\n }\n\n public toggle(option: SelectOption) {\n // update the selected value\n this.selectedOptions.pipe(\n take(1),\n withLatestFrom(this.options),\n map(([selectedOptions, options]) => {\n return toggleSelectedByGroup(options, selectedOptions, option);\n })\n ).subscribe(next => {\n const formData = this.formGroup.value;\n this.formGroup.setValue({\n location: formData.location,\n });\n this.selectedOptions.next(next);\n this.savedSelection = next.map((bld) => bld.value)\n\n });\n }\n\n /**\n * Update the selected space list\n * @param space Space to add/toggle in the selected list\n */\n public selectSpace(space: Space) {\n const list = this.spaces;\n if (list.find((item) => item.id === space.id)) {\n this.spaces = list.filter((item) => item.id !== space.id);\n } else {\n this.spaces = [space];\n }\n }\n\n public clearList() {\n this.spaces = []\n this.savedSelection = []\n }\n\n public triggerSearch = () => {\n if (this.savedSelection.length) {\n this.change$.next(this.savedSelection)\n } else {\n this.spaces = []\n }\n }\n\n}\n","
\n
Select meeting space{{ multiple ? 's' : '' }}
\n \n
\n\n
\n
\n \n \n 1\">Type\n 1\">\n \n \n {{ type?.name }}\n \n \n \n \n
\n \n \n
\n
\n
{{ space.local_name }}
\n
{{ space.level.name }}
\n
\n
\n \n
\n
\n \n
{{ space.capacity || '0' }}
\n
\n
\n \n {{ (!isConcierge && request_map[space.id]) ? 'Request' : 'Select' }}\n \n
\n
\n
\n
\n
\n
\n
\n

Selected spaces

\n
\n \n
\n \n \n
\n
\n
{{ space.name }}
\n
{{ space.level.name }}
\n
\n
\n \n
{{ space.capacity || '0' }}
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n \n
\n \n
\n
\n \n\n\n
\n
\n \n
\n
Loading available spaces...
\n
\n
\n\n
\n
\n \n
\n
No results available, please select another office.
\n
\n
\n\n
\n
\n \n
\n
No selected spaces
\n
\n
\n","import { Component, Input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\n@Component({\n selector: 'user-form',\n templateUrl: './user-form.component.html',\n styleUrls: ['./user-form.component.scss']\n})\nexport class UserFormComponent {\n /** Group of form fields used for creating the system */\n @Input() public form: FormGroup;\n}\n","
\n
\n
\n First Name:\n \n \n First name is required\n \n \n
\n
\n Last Name:\n \n \n Last name is required\n \n
\n
\n Email:\n \n \n A valid email is required\n \n
\n
\n
\n","export * from './lib/legacy-ui.module';\nexport * from './lib/custom-fields';\nexport * from './lib/icon/icon.component';\nexport * from './lib/feedback/feedback.component';\nexport * from './lib/action-icon/action-icon.component';\nexport * from './lib/user-avatar/user-avatar.component';\nexport * from './lib/bookings/catering/item/item.component';\nexport * from './lib/cng-search-bar/cng-search-bar.component';\n","import { Component, OnInit, Input } from '@angular/core';\nimport { ApplicationIcon } from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'action-icon',\n templateUrl: './action-icon.component.html',\n styleUrls: ['./action-icon.component.scss']\n})\nexport class ActionIconComponent implements OnInit {\n /** Icon to display */\n @Input() public icon: ApplicationIcon;\n /** Whether action is being processed */\n @Input() public loading: boolean;\n /** State of the action */\n @Input() public state: 'success' | 'error' | '' = '';\n\n constructor() {}\n\n ngOnInit(): void {}\n}\n","
\n \n
\n \n
\n
\n \n
\n
\n","import {\n Component,\n Input,\n OnChanges,\n SimpleChanges\n} from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { FormControl } from '@angular/forms';\n\nimport {\n ApplicationService,\n CateringCategory,\n CateringItem,\n SettingsService\n} from '@mckinsey-converge/data-common';\nimport { ANIMATION_SHOW_CONTRACT_EXPAND } from '@mckinsey-converge/animations';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { PackageOptionsModalComponent } from '../package-options-modal/package-options-modal.component';\n\nfunction hasSelectionRequirements(category: CateringCategory) {\n return (\n category.must_select < category.items.length ||\n (category.must_select === category.items.length &&\n category.items.find((item: any) => item.items && item.must_select < item.items.length))\n );\n}\n\nfunction getActiveList(category: CateringCategory) {\n const items = category.items || [];\n let list = items.filter((item) => item.amount > 0).map((item) => item.id);\n for (const item of items) {\n if ((item as any).items && (item as any).items.length) {\n list = list.concat(getActiveList(item as any));\n }\n }\n return list;\n}\n\n@Component({\n selector: 'a-catering-menu-item',\n templateUrl: './item.component.html',\n styleUrls: ['./item.component.scss'],\n animations: [ANIMATION_SHOW_CONTRACT_EXPAND]\n})\nexport class CateringMenuItemComponent extends BaseDirective implements OnChanges {\n /** Whether item is a child of another */\n @Input() public subitem: boolean;\n /** Item to display */\n @Input() public item: CateringCategory;\n /** Field for storing items */\n @Input() public field: FormControl;\n /** Current symbol for the selected space */\n @Input() public symbol: string;\n /** Whether item should be disabled if not available anytime */\n @Input() public disabled: boolean;\n /** Whether to show smaller version of component */\n @Input() public compact: boolean;\n /** Whether to show children items */\n public show_children: boolean;\n public initial_state = null;\n\n /** List of contents of the package */\n public get contents(): string {\n return this.item.items\n ? this.item.items.reduce((list, item) => {\n /* istanbul ignore else */\n if (list) {\n list += '\\n\\n';\n }\n return (list += `${item.name}${\n (item as any).items\n ? (item as any).items.reduce(\n (a_list, an_item) =>\n (a_list += `\\n ${an_item.amount ? '✓' : '•'} ${an_item.name} `),\n ''\n )\n : ''\n } ${item.amount ? '✓' : ''}`);\n }, '')\n : '';\n }\n\n constructor(private _service: ApplicationService, private _dialog: MatDialog,\n public settings: SettingsService) {\n super();\n // on the item selection set the revert/close state\n this.initial_state = this.item;\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n /* istanbul ignore else */\n if (changes.field && this.field) {\n const list = this.field.value;\n // check the category\n let item = list.find((an_cat) => an_cat.id === this.item.id);\n if (item) {\n // update the category level amount\n this.item.setAmount(item ? item.amount : 0);\n } else {\n // find a category item\n for (var cat of list) {\n item = cat?.items.find((an_item) => an_item.id === this.item.id);\n if (item) {\n this.item.setAmount(item ? item.amount : 0);\n break;\n }\n }; \n } \n\n // On the confirm catering order modal set the revert/close state\n if (!this.initial_state && this.item.amount) {\n this.initial_state = this.item;\n }\n\n this.subscription(\n 'field_change',\n this.field.valueChanges.subscribe((list) => {\n const item = list.find((an_item) => an_item.id === this.item.id);\n this.item.setAmount(item ? item.amount : 0);\n this.updatePackageSelection();\n })\n );\n }\n }\n\n /**\n * Update the amount of the item in the order\n * @param value New amount\n */\n public updateAmount(value: number) {\n /* istanbul ignore else */\n if (this.field) {\n const list: CateringItem[] = this.field.value;\n const item = list.find((an_item) => an_item.id === this.item.id);\n if (item) {\n this.item.setAmount(value);\n item.setAmount(value);\n // MCK-1550 fix\n const price = this.item.price;\n item.setPrice(price)\n } else {\n const amount = this.item.amount;\n this.item.setAmount(value);\n if (\n this.item.package &&\n amount < value &&\n this.item.items &&\n this.item.items.length &&\n hasSelectionRequirements(this.item)\n ) {\n this.selectPackageOptions().then(\n (confirmed_item) => {\n list.push(new CateringCategory(confirmed_item));\n this.field.setValue(list.filter((an_item) => an_item.amount));\n },\n () => {\n this.item.setAmount(999);\n this.timeout('amount', () => this.item.setAmount(0), 5);\n this._service.notifyWarn(\n 'Package options not selected. Item removed from order'\n );\n }\n );\n } else {\n list.push(new CateringItem(this.item));\n }\n }\n this.field.setValue(list.filter((an_item) => an_item.amount));\n }\n }\n\n public updatePackageSelection() {\n const cart_item = this.field.value.find((item) => item.id === this.item.id);\n if (cart_item) {\n const active_items = getActiveList(cart_item);\n this.timeout(\n 'update_package',\n () => {\n this.item.items.forEach((item) => {\n item.setAmount(active_items.includes(item.id) ? 1 : 0);\n if ((item as any).items) {\n (item as any).items.forEach((item) => {\n item.setAmount(active_items.includes(item.id) ? 1 : 0);\n });\n }\n });\n },\n 5\n );\n }\n }\n\n /** Reselect package options */\n public updatePackageOptions(): void {\n let updatedList: CateringItem[] = [];\n this.selectPackageOptions().then(\n (confirmed_item) => {\n // Update the existing category package\n this.field.value.forEach((category: CateringCategory) => {\n if (category.id === confirmed_item.id) {\n updatedList.push(new CateringCategory(confirmed_item))\n } else {\n updatedList.push(category)\n }\n })\n this.field.setValue(updatedList.filter((an_item) => an_item.amount));\n },\n () => {\n this.item.setAmount(999);\n this.timeout('amount', () => this.item.setAmount(0), 5);\n this._service.notifyWarn(\n 'Package options not selected. Item removed from order'\n );\n }\n );\n }\n\n /**\n * Open modal for user to select package options\n */\n private selectPackageOptions(): Promise {\n return new Promise((resolve, reject) => {\n const ref = this._dialog.open(PackageOptionsModalComponent, {\n maxWidth: '95vw',\n data: {\n item: new CateringCategory(this.item)\n },\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n let done = false;\n ref.componentInstance.event.subscribe((event) => {\n /* istanbul ignore else */\n if (event.reason === 'done') {\n done = true;\n resolve(ref.componentInstance.item);\n this.initial_state = this.item;\n ref.close();\n }\n });\n ref.afterClosed().subscribe(() => {\n /* istanbul ignore else */\n if (!done) {\n if (this.initial_state) {\n resolve(this.initial_state);\n } else {\n reject();\n }\n }\n });\n });\n }\n}\n","\n
\n
\n
{{ item.name }}
\n
{{ item.package ? '[Package] ' : '' }}{{ item.description }}
\n
\n
\n {{ item.unit_price / 100 | currency: symbol }}\n
\n \n { item.availableItems.length, plural, =1 { Contains {{ item.availableItems.length }} item } other {\n Contains {{ item.availableItems.length }} items } }\n
\n 0\"\n [matTooltip]=\"contents\"\n >\n {{ item.must_select }}\n \n Selected\n \n
\n 0\"\n (click)=\"updatePackageOptions()\"\n i18n=\"Catering order item options change action\"\n >\n Customise\n \n \n \n
\n {{ item.unit_price / 100 | currency: symbol }}\n
\n \n \n \n \n\n
\n \n
\n","import {\n Component,\n EventEmitter,\n Inject,\n Output\n} from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\n\nimport {\n DialogEvent,\n HashMap\n} from '@mckinsey-converge/base';\nimport {\n CateringCategory,\n CateringItem\n} from '@mckinsey-converge/data-common';\n\nexport interface PackageOptionsModalData {\n item: CateringCategory;\n}\n\nexport function checkItemRequirements(category: CateringCategory): boolean {\n const items = category.items || [];\n return category.must_select >= items.length\n ? items.reduce((valid, item) => valid && checkItemRequirements(item as any), true)\n : items.reduce((amount, item) => amount + (item.amount ? 1 : 0), 0) ===\n category.must_select;\n}\n\nexport function getActiveItems(category: CateringCategory): HashMap {\n let map = {};\n if (category.items) {\n const item = category.items.find(item => item.amount > 0);\n if (item) {\n map[category.id] = item.id;\n }\n category.items.forEach(item => map = { ...map, ...getActiveItems(item as any) });\n }\n return map;\n}\n\n@Component({\n selector: 'a-package-options-modal',\n templateUrl: './package-options-modal.component.html',\n styleUrls: ['./package-options-modal.component.scss']\n})\nexport class PackageOptionsModalComponent {\n /** Emitter for user actions on the modal */\n @Output() public event = new EventEmitter();\n\n /** Item to select options for */\n public get item(): CateringCategory {\n return this._data.item;\n }\n\n /** Whether package requirements have been met */\n public get requirements_met(): boolean {\n return checkItemRequirements(this.item);\n }\n\n public get active_items(): HashMap {\n return getActiveItems(this.item);\n }\n\n constructor(@Inject(MAT_DIALOG_DATA) private _data: PackageOptionsModalData) {\n }\n\n /**\n * Update the list of selected items\n */\n public updateAmount(a_package: CateringCategory, option: CateringItem, state: boolean) {\n if (state) {\n const needed = a_package.must_select;\n const active = a_package.items.filter(an_item => an_item.amount > 0).length;\n if (active >= needed) {\n const item = a_package.items.find(an_item => an_item.amount > 0);\n item.setAmount(0);\n }\n option.setAmount(1);\n } else {\n option.setAmount(0);\n }\n }\n}\n","
\n

Package Options

\n \n
\n\n
\n \n
\n
\n\n
\n \n
\n
\n\n \n \n
\n \n 1\"\n [checked]=\"!!option.amount\"\n (change)=\"updateAmount(package, option, $event.checked)\"\n >\n {{ option.name }}\n \n \n {{ option.name }}\n \n \n = package.items.length || option.must_select\">\n {{ option.name }}\n \n \n
\n
\n
\n
\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\n\n// Interface to define the structure of the configuration object for the search bar\nexport interface SearchBarConfig {\n placeholder?: string;\n totalFoundItem?: number;\n showSrchWarning?: boolean;\n}\n\n@Component({\n selector: 'cng-search-bar',\n templateUrl: './cng-search-bar.component.html',\n styleUrls: ['./cmg-search-bar.component.scss']\n})\nexport class CngSearchBarComponent implements OnChanges {\n // Input property to accept configuration for the search bar\n @Input() config: SearchBarConfig = {\n placeholder: 'Search ...',\n totalFoundItem: 0,\n showSrchWarning: false\n };\n\n // Output event emitter to emit search strings to parent components\n @Output() search = new EventEmitter();\n\n // Local variable to store the search string entered by the user\n searchStr: string = '';\n\n // Lifecycle hook that is called when any data-bound property of a directive changes\n ngOnChanges(changes: SimpleChanges): void {\n // Check if the config property has changed\n if (changes.config) {\n const configChanges = changes.config.currentValue;\n // Update the config with new values or fallback to defaults\n this.config = {\n placeholder: configChanges.placeholder || 'Search ...',\n totalFoundItem: configChanges.totalFoundItem || 0,\n showSrchWarning: configChanges.showSrchWarning || false\n };\n }\n }\n\n // Method to handle the search action\n onSearch(value: string): void {\n // Emit the search string if it's not empty\n if (value) {\n this.search.emit(value);\n }\n }\n\n // Method to clear the search input and reset related configurations\n clearSearch(box: HTMLInputElement): void {\n this.searchStr = '';\n box.value = '';\n this.config.showSrchWarning = false;\n this.config.totalFoundItem = 0;\n this.search.emit('');\n }\n\n // Method to reset the search-related warnings and item count\n resetSearch(): void {\n this.config.showSrchWarning = false;\n this.config.totalFoundItem = 0;\n }\n}\n","
\n \n \n
{{ config.totalFoundItem }}
\n \n \n \n
\n \n No search found!\n
\n
\n ","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\n\n@Directive({\n selector: '[hover-class]'\n})\nexport class HoverClassDirective {\n @Input('hover-class') hoverClass: string;\n\n constructor(private elementRef: ElementRef) {}\n\n @HostListener('mouseenter') onMouseEnter() {\n this.update('add');\n }\n\n @HostListener('mouseleave') onMouseLeave() {\n this.update('remove');\n }\n\n @HostListener('blur') onBlur() {\n this.update('remove');\n }\n\n private update(action: string): void {\n this.hoverClass.split(' ').forEach(item => this.elementRef.nativeElement.classList[action](item));\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'an-action-field',\n templateUrl: './action-field.component.html',\n styleUrls: ['./action-field.component.scss']\n})\nexport class ActionFieldComponent extends BaseDirective {\n /** Name of the field */\n @Input() public name: string;\n /** Value to display on the field */\n @Input() public placeholder: string;\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Emitter for user interaction events */\n @Output('onAction') public on_action = new EventEmitter();\n /** Whether to show tooltip */\n public show_tooltip = false;\n\n /**\n * Emit that the user has performed an action on the field\n */\n public performAction() {\n this.show_tooltip = !this.show_tooltip;\n this.on_action.emit();\n }\n}\n","\n
{{ placeholder }}
\n
\n \n
\n\n","import { Component, forwardRef, Input } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'a-counter',\n templateUrl: './counter.component.html',\n styleUrls: ['./counter.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n /* istanbul ignore next */\n useExisting: forwardRef(() => CounterComponent),\n multi: true,\n },\n ],\n})\nexport class CounterComponent implements ControlValueAccessor {\n /** Maximum amount for the counter */\n @Input() public max: number = 10;\n /** Minimum amount for the counter */\n @Input() public min: number = 0;\n\n @Input() public useInput = false;\n\n /** Current value of the counter */\n public value: number;\n public previous_value: number = 0;\n /** Whether shift key is being held by the user */\n public shift_key: boolean;\n /** Whether control key is being held by the user */\n public ctrl_key: boolean;\n\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n /**\n * Add the `step` to the current value\n */\n public add() {\n if (!this.value) {\n this.value = this.min || 0;\n }\n const step = this.ctrl_key ? 100 : this.shift_key ? 10 : 1;\n this.value += step;\n if (this.value > this.max) {\n this.value = this.max || 10;\n }\n this.setValue(this.value);\n }\n\n /** Remove the `step` from the current value */\n public remove() {\n if (!this.value) {\n this.value = this.min || 0;\n }\n const step = this.ctrl_key ? 100 : this.shift_key ? 10 : 1;\n this.value -= step;\n if (this.value < this.min) {\n this.value = this.min || 0;\n }\n this.setValue(this.value);\n }\n\n public handleTimeout = null;\n\n public onInputChange(new_value: string) {\n if (this.handleTimeout) {\n clearTimeout(this.handleTimeout);\n this.handleTimeout = null;\n }\n this.handleTimeout = setTimeout(() => this.changeInput(new_value), 500);\n }\n\n public changeInput(new_value: string) {\n let value = Number(new_value);\n if (isNaN(value)) {\n value = this.previous_value;\n }\n if (value < this.min) {\n value = this.min || 0;\n }\n if (value > this.max) {\n value = this.max || 10;\n }\n this.setValue(value);\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: number): void {\n this.previous_value = new_value;\n this.value = new_value;\n /* istanbul ignore else */\n if (this._onChange) {\n this._onChange(new_value);\n }\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: number) {\n this.value = value;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n}\n","\n \n \n
\n {{value || '0'}}\n
\n \n\n","import { Component, OnInit, forwardRef, Input, ViewChild, Output, EventEmitter } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport { MatMenuTrigger } from '@angular/material/menu';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n@Component({\n selector: 'a-date-field',\n templateUrl: './date-field.component.html',\n styleUrls: ['./date-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateFieldComponent),\n multi: true\n }\n ]\n})\nexport class DateFieldComponent extends BaseDirective implements OnInit, ControlValueAccessor {\n /** Earliest date available the user is allowed to pick */\n @Input('from') public _from: number = DateNow(new Date()).ms;\n /** Latest date available the user is allowed to pick */\n @Input('to') public _to: number;\n /** Position of the tooltip */\n @Input() public position: 'right' | 'left' = 'right';\n /** Offset of the tooltip */\n @Input() public offset: 'top' | 'bottom' = 'bottom';\n /** Whether form control is disabled */\n @Input() public disabled: boolean;\n /** Whether form control is invalid, touched and contains errors */\n @Input() public error?: boolean;\n /** Optional event emitter for changes */\n @Output() public onChange = new EventEmitter();\n /** Whether to show the calendar tooltip */\n public show_tooltip: boolean;\n /** Currently selected date */\n public date: number;\n\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n @ViewChild(MatMenuTrigger, { static: true }) private _trigger: MatMenuTrigger;\n\n /** First allowed date on the calendar */\n public get from(): number {\n return this._from || DateNow(new Date()).startOfValue('day').ms;\n }\n /** Current date value */\n public get until(): number {\n return this._to || DateNow(new Date()).endOfValue('day').addValue({ years: 1 }).ms;\n }\n /** Display value for the current date */\n public get date_string(): string {\n // R--- Needs TZ aware inputs\n const date = new DateTZ({date: this.date})\n return date.formatDate('dd MMM yyyy');\n }\n\n /** Whether date picker is open */\n public get is_open(): boolean {\n return this._trigger.menuOpen;\n }\n\n public ngOnInit() {\n this.date = DateNow(new Date()).ms;\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: number) {\n // Keep hours and minutes of the old date\n const old_date = new DateTZ({date: this.date });\n const new_d = new DateTZ({date: new_value})\n let new_date = new_d\n .setValue({ hour: old_date.dateHour, minute: old_date.minutes })\n .ms;\n // Check that new date is before from\n if (new_date < this.from) {\n new_date = this.from;\n }\n this.date = new_date;\n if (this._onChange) {\n this._onChange(new_date);\n this.onChange.emit(new_date);\n }\n this.show_tooltip = false;\n }\n\n /* istanbul ignore next */\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: number) {\n this.date = value;\n this.show_tooltip = false;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /** Set the state of the tooltip to closed after delay */\n public closeDatePicker() {\n this._trigger.closeMenu();\n }\n\n /** Set the state of the tooltip to closed after delay */\n public openDatePicker() {\n this._trigger.openMenu();\n }\n}\n","\n
{{ date_string }}
\n
\n \n
\n\n\n
\n \n
\n
\n","import {\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\n\nimport {\n humaniseDuration,\n Identity,\n timeFormatString\n} from '@mckinsey-converge/base';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\n\n@Component({\n selector: 'a-duration-field',\n templateUrl: './duration-field.component.html',\n styleUrls: ['./duration-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DurationFieldComponent),\n multi: true\n }\n ]\n})\nexport class DurationFieldComponent extends BaseDirective\n implements OnInit, OnChanges, ControlValueAccessor {\n /** Maximum duration option available */\n @Input() public max: number = 240;\n /** Minimum duration option available */\n @Input() public min: number = 15;\n /** Step value between options */\n @Input() public step: number = 15;\n /** Reference time for displaying next to durations */\n @Input() public time: number;\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Special case prepopulation i.e. out of step options */\n @Input() public specialPreprops: Array = [];\n /** Whether form all_day is enabled. */\n @Input() public all_day: boolean = false;\n\n public duration: number = 60;\n /** List of available duration options */\n public duration_options: Identity[];\n\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n public ngOnInit(): void {\n this.duration_options = this.generateDurationOptions(this.max, this.min, this.step, this.all_day);\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n /* istanbul ignore else */\n if (changes.max || changes.min || changes.step || changes.time || changes.all_day) {\n this.duration_options = this.generateDurationOptions(this.max, this.min, this.step, this.all_day);\n }\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: number): void {\n this.duration = new_value;\n /* istanbul ignore else */\n if (this._onChange) {\n this._onChange(+new_value);\n }\n }\n\n /* istanbul ignore next */\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: number) {\n this.duration = value;\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n\n private generateDurationOptions(max: number, min: number, step: number, all_day: boolean = false): Identity[] {\n const blocks: Identity[] = [];\n let time = min;\n // R--- Change input to dateTz\n let date = this.time ? new DateTZ({date: this.time}) : null;\n\n // Add special case for 10min duration/prepropulation\n for (const option of this.specialPreprops) {\n blocks.push({\n id: option,\n name: date\n ? `${date.addValue({ minutes: option }).formatDate(timeFormatString()).toLocaleLowerCase()} (${humaniseDuration(option)})`\n : `${humaniseDuration(option)}`\n });\n }\n\n\n while (time <= max) {\n blocks.push({\n id: time,\n name: date\n ? `${date.addValue({ minutes: time }).formatDate(timeFormatString()).toLocaleLowerCase()} (${humaniseDuration(time)})`\n : `${humaniseDuration(time)}`\n });\n time += step;\n }\n if (all_day) {\n blocks.push({ id: 24 * 60, name: 'All Day' }); \n }\n blocks.push({ id: 7 * 24 * 60, name: '1 week' });\n return blocks;\n }\n}\n","
\n \n \n \n {{ option.name }}\n \n \n \n
\n","export * from './action-field/action-field.component'\nexport * from './counter/counter.component'\nexport * from './date-field/date-field.component'\nexport * from './duration-field/duration-field.component'\nexport * from './time-field/time-field.component'\nexport * from './user-search-field/user-search-field.component'\nexport * from './user-list-field/user-list-field.component'\n","import {\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\nimport { MatSelect } from '@angular/material/select';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n Identity,\n timeFormatString\n} from '@mckinsey-converge/base';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n@Component({\n selector: 'a-time-field',\n templateUrl: './time-field.component.html',\n styleUrls: ['./time-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TimeFieldComponent),\n multi: true\n }\n ]\n})\nexport class TimeFieldComponent extends BaseDirective implements OnInit, OnChanges, ControlValueAccessor {\n /** Time step between each allowed time option */\n @Input() public step: number = 15;\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Whether past times are allowed */\n @Input() public no_past_times: boolean = true;\n /** String representing the currently set time */\n public date: number = DateNow(new Date()).ms;\n /** String representing the currently set time */\n public time: string = DateNow(new Date()).formatDate('HH:mm');\n /** Available time blocks for the selected date */\n public _time_options: Identity[];\n /** Whether select field should be shown */\n public show_select: boolean;\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n /** Select field for selecting the time */\n @ViewChild('select') private select_field: MatSelect;\n\n // R--- This is the form input that needs to be TZ active.\n public ngOnInit(): void {\n this.show_select = true;\n this._time_options = this.generateAvailableTimes(this.date, !this.no_past_times, this.step);\n this.timeout('hide', () => this.show_select = false);\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.no_past_times || changes.step) {\n this._time_options = this.generateAvailableTimes(this.date, !this.no_past_times, this.step);\n }\n }\n\n public get date_(){\n return new DateTZ({date: this.date})\n }\n\n /** Available time blocks for the selected date */\n public get time_options() {\n const time = (this.time || '00:00').split(':');\n const date = this.date_.setValue({ hour: +time[0], minute: +time[1] });\n if (date.minutes % 15 !== 0 && !this._time_options.find(time => time.id === date.formatDate('HH:mm'))) {\n this._time_options.push({\n name: `${date.formatDate(timeFormatString())}`,\n id: date.formatDate('HH:mm')\n });\n this._time_options.sort((a, b) => `${a.id}`.localeCompare(`${b.id}`));\n }\n return this._time_options;\n }\n\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: string): void {\n this.time = new_value;\n if (this._onChange) {\n const time = (this.time || '00:00').split(':');\n const date = this.date_.setValue({ hour: +time[0], minute: +time[1] }).startOfValue('minute');\n this._onChange(date.ms);\n }\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: number) {\n if (!value) {\n return;\n }\n this.date = value;\n let date = this.date_.startOfValue('minute');\n date = date.setValue({ minute: Math.ceil(date.minutes / 5) * 5 });\n this.time = date.formatDate('HH:mm');\n this._time_options = this.generateAvailableTimes(this.date, !this.no_past_times, this.step);\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n\n /**\n * Show select field for time options\n */\n public showSelect() {\n this.show_select = true;\n this.timeout('on_shown', () => {\n if (this.select_field) {\n this.select_field.focus();\n this.select_field.open();\n this.subscription('listen_close', this.select_field.openedChange.subscribe((state) => {\n if (!state) {\n this.show_select = false;\n }\n }));\n }\n });\n }\n\n /**\n * Generate a list of time options for the given date\n * @param datestamp Date to generate options for\n * @param show_past Whether past times should be options\n */\n private generateAvailableTimes(datestamp: number, show_past: boolean, step: number = 15): Identity[] {\n let date = new DateTZ({date: datestamp});\n const blocks = [];\n if (show_past || date.isAfterDate(DateNow(new Date()))) {\n date = date.startOfValue('day');\n } else if (date.isAfterDate(DateNow(new Date()))) {\n date = DateNow(new Date());\n }\n date = date.setValue({ minute: Math.ceil(date.minutes / step) * step });\n const end = date.endOfValue('day');\n // Add options for the rest of the day\n while (date.isBeforeDate(end)) {\n blocks.push({\n name: `${date.formatDate(timeFormatString()).toLocaleLowerCase()}`,\n id: date.formatDate('HH:mm')\n });\n date = date.addValue({ minutes: step });\n }\n return blocks;\n }\n}\n","\n
\n \n
\n
\n \n
\n\n\n \n \n {{ option.name }}\n \n \n\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n forwardRef,\n Input,\n OnInit,\n Output,\n ViewChild\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\nimport {\n Observable,\n of,\n Subject\n} from 'rxjs';\nimport {\n catchError,\n debounceTime,\n distinctUntilChanged,\n tap,\n map,\n switchMap,\n finalize\n} from 'rxjs/operators';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n ApplicationService,\n User,\n UsersService\n} from '@mckinsey-converge/data-common';\nimport {\n csvToJson,\n downloadFile,\n filterList,\n matchToHighlight\n} from '@mckinsey-converge/base';\nimport { MatAutocompleteTrigger } from '@angular/material/autocomplete';\n\n@Component({\n selector: 'a-user-list-field',\n templateUrl: './user-list-field.component.html',\n styleUrls: ['./user-list-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UserListFieldComponent),\n multi: true\n }\n ]\n})\nexport class UserListFieldComponent extends BaseDirective implements OnInit, ControlValueAccessor {\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Number of characters needed before a search will start */\n @Input() public limit: number = 3;\n /** Emitter for action to make a new user */\n @Output('newUser') public new_user = new EventEmitter();\n\n /** User list to display */\n public user_list: User[];\n /** List of active selected users on the list */\n public active_list: User[];\n /** Whether user list is loading */\n public loading: boolean;\n /** String */\n public search_str: string;\n /** List of users from an API search */\n public search_results$: Observable;\n /** Subject holding the value of the search */\n public search$ = new Subject();\n\n /** Form control on change handler */\n private _onChange: (_: User[]) => void;\n /** Form control on touch handler */\n private _onTouch: (_: User[]) => void;\n\n @ViewChild(MatAutocompleteTrigger, {read: MatAutocompleteTrigger}) inputAutoComplete: MatAutocompleteTrigger;\n\n constructor(private _service: ApplicationService, private _users: UsersService, private cdRef: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit() {\n // Listen for input changes\n this.search_results$ = this.search$.pipe(\n debounceTime(100),\n distinctUntilChanged(),\n switchMap((query) => {\n this.loading = true;\n return query.length >= this.limit\n ? this._users.query({\n q: query.slice(0, Math.max(this.limit, 3)),\n cache: 60 * 1000\n })\n : Promise.resolve([]);\n }),\n catchError((_) => of([])),\n map((list: User[]) => {\n this.loading = false;\n return filterList(this.search_str, list, ['name', 'email']);\n })\n );\n // Process API results\n this.subscription(\n 'search_results',\n this.search_results$.subscribe((list) => {\n this.user_list = list;\n this.user_list.forEach((i: any) => {\n i.match_name = matchToHighlight(i.match_name);\n i.match_email = matchToHighlight(i.match_email);\n return i;\n });\n this.user_list.length ? this.inputAutoComplete.openPanel() : this.inputAutoComplete.closePanel();\n })\n );\n }\n\n /**\n * Add user to the user list\n * @param user\n */\n public addUser(user: User) {\n /* istanbul ignore else */\n if (!this.active_list) {\n this.active_list = [];\n }\n const index = this.active_list.findIndex((a_user) => a_user.id === user.id);\n /* istanbul ignore else */\n if (index < 0) {\n this.active_list = [...this.active_list, user];\n }\n this.setValue(this.active_list);\n this.search_str = '';\n }\n\n /**\n * Remove user from the user list\n * @param user\n */\n public removeUser(user: User) {\n this.active_list = this.active_list.filter((a_user) => a_user.id !== user.id);\n this.setValue(this.active_list);\n }\n\n /**\n * Load CSV file and populate the user list with the contents\n * @param event File input field event\n */\n public addUsersFromFile(event) {\n /* istanbul ignore else */\n if (event.target) {\n const file = event.target.files[0];\n /* istanbul ignore else */\n if (file) {\n const reader = new FileReader();\n reader.readAsText(file, 'UTF-8');\n reader.addEventListener('load', (evt) => {\n this.processCsvData((evt.srcElement as any).result);\n event.target.value = '';\n this.cdRef.detectChanges();\n });\n reader.addEventListener('error', (_) =>\n this._service.notifyError('Error reading file.')\n );\n }\n }\n }\n\n /**\n * Process raw CSV data and save user data to attendee list\n * @param data CSV data\n */\n private processCsvData(data: string) {\n const list = csvToJson(data) || [];\n const id = this._users.current.staff_code; \n list.forEach((el) => {\n const firstName = el.first_name.split(' ').map((word: string) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(' ');\n const lastName = el.last_name.split(' ').map((word: string) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(' ');\n\n el.name = el.name || `${firstName} ${lastName}`;\n const display = (el.name || `${Math.floor(Math.random() * 9999_9999)}`)\n .split(' ')\n .join('_')\n .toLowerCase();\n /* istanbul ignore else */\n if (!el.email) {\n el.email = `${display}+${id}@guest.mckinsey.com`;\n }\n el.type = 'external';\n el.external = !el.email.endsWith(\"@mckinsey.com\") && !el.email.endsWith(\"@external.mckinsey.com\");\n this.addUser(new User(el));\n });\n }\n\n /* istanbul ignore next */\n /** Download template CSV file */\n public downloadCSVTemplate() {\n const template = `Organisation Name,First Name,Last Name,Email,Phone\\nFake Org,John,Smith,john.smith@example.com,01234567898`;\n downloadFile('template.csv', template);\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: User[]): void {\n this.active_list = new_value;\n if (this._onChange) {\n this._onChange(new_value);\n }\n }\n\n /* istanbul ignore next */\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: User[]) {\n this.active_list = value;\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: User[]) => void): void {\n this._onChange = fn;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: User[]) => void): void {\n this._onTouch = fn;\n }\n}\n","
\n \n \n
\n \n
\n
\n \n
\n
\n \n \n
{{ option.name }}
\n
{{ option.email }}
\n
\n
\n
\n \n \n \n
\n
\n \n \n {{ user.name }}\n \n \n \n
\n
\n\n
No attendees
\n
\n","import {\n Component,\n forwardRef,\n Input,\n OnInit,\n ViewChild\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\nimport {\n Observable,\n of,\n Subject\n} from 'rxjs';\nimport {\n catchError,\n debounceTime,\n distinctUntilChanged,\n map,\n switchMap\n} from 'rxjs/operators';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n User,\n UsersService\n} from '@mckinsey-converge/data-common';\nimport {\n filterList,\n matchToHighlight\n} from '@mckinsey-converge/base';\nimport { MatAutocompleteTrigger } from '@angular/material/autocomplete';\n\n@Component({\n selector: 'a-user-search-field',\n templateUrl: './user-search-field.component.html',\n styleUrls: ['./user-search-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UserSearchFieldComponent),\n multi: true\n }\n ]\n})\nexport class UserSearchFieldComponent extends BaseDirective implements OnInit, ControlValueAccessor {\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Limit available options to these */\n @Input() public options: User[];\n /** Currently selected user */\n public active_user: User;\n /** User list to display */\n public user_list: User[];\n /** Whether user list is loading */\n public loading: boolean;\n /** Current display value of the search input field */\n public search_str: string;\n /** List of users from an API search */\n public search_results$: Observable;\n /** Subject holding the value of the search */\n public search$ = new Subject();\n\n /** Form control on change handler */\n private _onChange: (_: User) => void;\n /** Form control on touch handler */\n private _onTouch: (_: User) => void;\n @ViewChild(MatAutocompleteTrigger, {read: MatAutocompleteTrigger}) inputAutoComplete: MatAutocompleteTrigger;\n \n constructor(private _users: UsersService) {\n super();\n }\n\n public ngOnInit(): void {\n\n // Listen for input changes\n this.search_results$ = this.search$.pipe(\n debounceTime(400),\n distinctUntilChanged(),\n switchMap(query => {\n this.loading = true;\n return this.options && this.options.length > 0\n ? Promise.resolve(this.options)\n : query.length >= 3\n ? (this._users.query({ q: query, cache: 60 * 1000 }) as Promise)\n : Promise.resolve([]);\n }),\n catchError((err) => of([])),\n map((list: User[]) => {\n this.loading = false;\n return filterList(this.search_str, list, ['name', 'email']);\n })\n );\n // Process API results\n this.subscription('search_results', this.search_results$.subscribe(list => {\n this.user_list = list;\n this.user_list.forEach((i: any) => {\n i.match_name = matchToHighlight(i.match_name);\n i.match_email = matchToHighlight(i.match_email);\n return i;\n });\n this.user_list.length ? this.inputAutoComplete.openPanel() : this.inputAutoComplete.closePanel();\n }));\n }\n\n /**\n * Reset the search string back to the name of the active user\n */\n public resetSearchString() {\n if (this.active_user) {\n this.search_str = this.active_user.name;\n }\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: User): void {\n this.active_user = new_value;\n if (this._onChange) {\n this._onChange(new_value);\n }\n this.resetSearchString();\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: User) {\n this.active_user = value;\n this.resetSearchString();\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: User) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: User) => void): void {\n this._onTouch = fn;\n }\n}\n","
\n \n \n
\n \n
\n
\n \n
\n
\n \n \n
{{ option.name }}
\n
{{ option.email }}
\n
\n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'feedback',\n templateUrl: './feedback.component.html',\n styleUrls: ['./feedback.component.scss'],\n})\nexport class FeedbackComponent extends BaseDirective implements OnInit {\n /** Name of the currently active page */\n public current_page: string;\n\n constructor(private _router: Router) {\n super();\n }\n\n public ngOnInit(): void {\n this.timeout('Getting Title', () => this.updateRoute(document.title), 1000);\n this._router.events.subscribe((event: NavigationEnd) => {\n /* istanbul ignore else */\n if (event instanceof NavigationEnd) {\n this.timeout('Getting Title', () => this.updateRoute(document.title));\n }\n });\n }\n\n public updateRoute(location) {\n location = location.substr(0, location.indexOf(' |'));\n this.current_page = location;\n }\n}\n","\n
\n Feedback\n \n \n \n
\n
\n","import {\n Component,\n Input\n} from '@angular/core';\nimport { ApplicationIcon } from '@mckinsey-converge/data-common';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'app-icon',\n templateUrl: './icon.component.html',\n styleUrls: ['./icon.component.scss']\n})\nexport class IconComponent extends BaseDirective {\n @Input() public icon: ApplicationIcon;\n}\n","
\n {{ icon.content }}\n \n
\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n ActionFieldComponent,\n CounterComponent,\n DateFieldComponent,\n DurationFieldComponent,\n TimeFieldComponent,\n UserListFieldComponent,\n UserSearchFieldComponent\n} from './custom-fields';\nimport { IconComponent } from './icon/icon.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { ACA_PIPES_MODULE } from '@acaprojects/ngx-pipes';\nimport {\n FormsModule,\n ReactiveFormsModule\n} from '@angular/forms';\nimport { FeedbackComponent } from './feedback/feedback.component';\nimport { ActionIconComponent } from './action-icon/action-icon.component';\nimport { PopoutMenuComponent } from './popout-menu/popout-menu.component';\nimport { SearchbarComponent } from './searchbar/searchbar.component';\nimport { UserAvatarComponent } from './user-avatar/user-avatar.component';\nimport { CateringMenuItemComponent } from './bookings/catering/item/item.component';\nimport { PackageOptionsModalComponent } from './bookings/catering/package-options-modal/package-options-modal.component';\nimport { BaseModule } from '@mckinsey-converge/base';\nimport { UiModule } from '@mckinsey-converge/ui';\nimport { CngSearchBarComponent } from './cng-search-bar/cng-search-bar.component';\nimport { HoverClassDirective } from './cng-search-bar/hover-class.directive';\n\nconst DECLARATIONS = [\n ActionFieldComponent,\n IconComponent,\n CounterComponent,\n DateFieldComponent,\n DurationFieldComponent,\n TimeFieldComponent,\n UserSearchFieldComponent,\n UserListFieldComponent,\n FeedbackComponent,\n ActionIconComponent,\n PopoutMenuComponent,\n SearchbarComponent,\n UserAvatarComponent,\n CateringMenuItemComponent,\n PackageOptionsModalComponent,\n CngSearchBarComponent,\n HoverClassDirective\n];\n\nconst MATERIAL_MODULES: any[] = [\n MatButtonModule,\n MatSnackBarModule,\n MatDialogModule,\n MatFormFieldModule,\n MatInputModule,\n MatProgressSpinnerModule,\n MatProgressBarModule,\n MatAutocompleteModule,\n MatSelectModule,\n MatChipsModule,\n MatRippleModule,\n MatMenuModule,\n MatCheckboxModule,\n MatTooltipModule,\n MatRadioModule,\n MatTabsModule,\n MatSlideToggleModule\n];\n\n@NgModule({\n imports: [\n CommonModule,\n ACA_PIPES_MODULE,\n FormsModule,\n ReactiveFormsModule,\n ...MATERIAL_MODULES,\n BaseModule,\n UiModule\n ],\n declarations: [\n ...DECLARATIONS\n ],\n exports: [\n ACA_PIPES_MODULE,\n ...DECLARATIONS,\n ...MATERIAL_MODULES,\n BaseModule,\n ]\n})\nexport class LegacyUiModule {\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output\n} from '@angular/core';\nimport { ApplicationIcon } from '@mckinsey-converge/data-common';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\nexport interface PopoutAction extends ApplicationIcon {\n /** ID of the action */\n id: string;\n}\n\n@Component({\n selector: 'a-popout-menu',\n templateUrl: './popout-menu.component.html',\n styleUrls: ['./popout-menu.component.scss']\n})\nexport class PopoutMenuComponent extends BaseDirective {\n /** List of available actions */\n @Input() public actions: PopoutAction[] = [];\n /** Emitter for user actions */\n @Output() public action = new EventEmitter();\n /** Whether actions should show */\n public show: boolean;\n\n public close() {\n this.timeout('close', () => {\n this.show = false;\n });\n }\n}\n","\n \n\n\n","import { Component, OnInit, Input, EventEmitter, Output, ViewChild, ElementRef, SimpleChanges, OnChanges } from '@angular/core';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'a-searchbar',\n templateUrl: './searchbar.component.html',\n styleUrls: ['./searchbar.component.scss']\n})\nexport class SearchbarComponent extends BaseDirective implements OnChanges {\n /** Current contents of the searchbar input */\n @Input('value') public value: string;\n /** Current contents of the searchbar input */\n @Input() public placeholder: string;\n /** Whether external changes are being processed */\n @Input() public loading: boolean;\n /** Whether external changes are being processed */\n @Input() public autofocus: boolean;\n /** Emitter for changes to the searchbar value */\n @Output() public valueChange = new EventEmitter();\n /** Input field reference */\n @ViewChild('input', { static: true }) private input_field: ElementRef;\n\n public ngOnChanges(changes: SimpleChanges): void {\n /* istanbul ignore else */\n if (changes.autofocus && this.autofocus) {\n this.focusField()\n }\n }\n\n public focusField() {\n /* istanbul ignore else */\n if (this.input_field && this.input_field.nativeElement) {\n this.input_field.nativeElement.focus();\n }\n }\n}\n","
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n","import { Component, Input } from '@angular/core';\nimport { User } from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'a-user-avatar',\n templateUrl: './user-avatar.component.html',\n styleUrls: ['./user-avatar.component.scss']\n})\nexport class UserAvatarComponent {\n /** User to display avatar for */\n @Input() public user: User;\n\n public get initials(): string {\n if (!this.user) {\n return 'NA';\n }\n const parts = this.user.name.split(' ');\n return parts.length > 1\n ? `${parts[0][0]}${parts[parts.length - 1][0]}`\n : this.user.name.slice(0, 2);\n }\n}\n","
\n
{{ initials }}
\n
\n\n \n\n","export * from './lib/loading.actions'\nexport * from './lib/loading.model'\nexport * from './lib/loading.effects'\nexport * from './lib/loading.selectors'\nexport * from '../testing'\n","import {\n createAction,\n createSelector,\n on,\n On,\n props\n} from '@ngrx/store';\nimport {\n LoadingModel,\n wrapLoading\n} from './loading.model';\nimport {\n selectIsLoading,\n selectOptionalError,\n selectOptionalSuccess,\n selectSuccess\n} from './loading.selectors';\nimport { MemoizedSelector } from '@ngrx/store/src/selector';\nimport {\n ActionCreator,\n NotAllowedCheck,\n TypedAction\n} from '@ngrx/store/src/models';\nimport { HashMap } from '@mckinsey-converge/base';\n\nexport interface Payload {\n payload: T\n}\n\nexport type LoadingAction = T & TypedAction\nexport type LoadingActionCreator = T extends null | undefined ?\n ActionCreator TypedAction>\n : ActionCreator) => LoadingAction>\n\ntype ClearAction = ActionCreator TypedAction>\n\ninterface Selectors {\n success: MemoizedSelector\n optionalSuccess: MemoizedSelector\n error: MemoizedSelector\n loading: MemoizedSelector\n model: (TState) => LoadingModel\n}\n\nexport interface LoadingActionObject {\n request: LoadingActionCreator\n success: LoadingActionCreator>\n error: LoadingActionCreator>\n clear: ClearAction,\n ons: On[],\n selectors: Selectors\n}\n\n/**\n * Creates a {@link LoadingActionObject} that contains a set of ActionCreators\n * for request, success, error, loading, and clear data. Also, it contains\n * the necessary On reducers and selectors in order to properly connect them in\n * a standardized way to data in the application.\n *\n * `TState` is the type of data on your reducer, not global store.\n * `TRequest` is an object type to use in request methods.\n * `TSuccess` is the object type of the T parameter on `LoadingModel`.\n *\n * This assumes you have state represented by:\n * ```typescript\n * interface SomeState {\n * stateKey: LoadingModel\n * }\n * ```\n *\n * To dispatch an action:\n * ```typescript\n *\n * // request parameters depend on the object type used as second type parameter\n * // in createLoadingAction\n * this.store.dispatch(someLoadingAction.request())\n *\n * // action created with createLoadingAction\n * this.store.dispatch(someLoadingAction.request({\n * name: 'Andrew G',\n * age: 24\n * }))\n *\n * ```\n *\n * The generated selectors only select data from its fractured state, not the global\n * store. In order to use them, make sure you {@link select} the global state\n * before using them:\n *\n * ```typescript\n *\n * this.store.pipe(\n * select(selectSomeState),\n * select(someLoadingAction.selectors.success)\n * ).subscribe(next => {\n *\n * })\n *\n * ```\n *\n * @param actionPrefix - Prefixes actions to uniquely identify them.\n * @param stateKey - The field within the reducer state to set data on.\n */\nexport const createLoadingAction = (\n actionPrefix: string,\n stateKey: keyof TState\n): LoadingActionObject => {\n const buildAction = (postfix: string) => `[${actionPrefix}] ${postfix}`;\n // @ts-ignore\n const request = createAction(buildAction('request'), props());\n const success = createAction(buildAction('success'), props>());\n const error = createAction(buildAction('error'), props>());\n const clear = createAction(buildAction('clear'));\n const ons: On[] = [\n on(request, (state: TState & HashMap>, action: LoadingAction) =>\n ({\n ...state,\n [stateKey]: wrapLoading(state[stateKey]).loading()\n })),\n on(success, (state: TState & HashMap>, action: LoadingAction>) => ({\n ...state,\n [stateKey]: LoadingModel.success(action.payload)\n })),\n // some reason specifying state like in success and request does not work.\n on(error, (state: any, action: LoadingAction>) => ({\n ...state,\n [stateKey]: LoadingModel.error(action.payload)\n })),\n on(clear, () => ({\n ...this.state,\n [stateKey]: LoadingModel.empty()\n }))\n ];\n const selectData = (state: TState) => {\n if (!state) {\n console.warn('[LoadingActions] State is empty for key', stateKey);\n }\n return wrapLoading(state?.[stateKey] as unknown as LoadingModel);\n };\n const selSuccess = createSelector, TSuccess>(\n selectData,\n selectSuccess\n );\n const selOptionalSuccess = createSelector(\n selectData,\n selectOptionalSuccess\n );\n const selError = createSelector(\n selectData,\n selectOptionalError\n );\n const selLoading = createSelector(\n selectData,\n selectIsLoading\n );\n return {\n request,\n success,\n error,\n clear,\n ons,\n selectors: {\n success: selSuccess,\n optionalSuccess: selOptionalSuccess,\n error: selError,\n loading: selLoading,\n model: selectData\n }\n };\n};\n","import {\n Actions,\n ofType\n} from '@ngrx/effects';\n\nimport { \n LoadingAction,\n LoadingActionObject\n} from '../../../loading/src/lib/loading.actions';\n\nimport {\n catchError,\n flatMap,\n map\n} from 'rxjs/operators';\nimport {\n Observable,\n of\n} from 'rxjs';\nimport { TypedAction } from '@ngrx/store/src/models';\n\n/**\n * This creates an effect to use in Effects classes. This coordinates a simple\n * success and error payload effect.\n * @param actions - The actions object\n * @param actionObject - The created createLoadingAction object.\n * @param caller - Define what API method or asynchronous operation is needed to\n * run this. Return TSuccess.\n */\nexport const createLoadingEffect = (\n actions: Actions, actionObject: LoadingActionObject,\n caller: (action: LoadingAction) => Promise): Observable> => actions.pipe(\n ofType(actionObject.request),\n flatMap((action) => caller(action as LoadingAction)),\n map((response: TSuccess) => actionObject.success({ payload: response })),\n catchError(err => {\n return of(actionObject.error({ payload: err }));\n })\n);\n","/* eslint-disable no-underscore-dangle,no-useless-constructor */\n/**\n * Wraps around the typical data objects we write for success, error, loading, and empty state. This convenience\n * wrapper consolidates all of that logic into a handy wrapper.\n */\nexport class LoadingModel {\n static empty = () => new LoadingModel(false, false, false, undefined);\n\n static success = (success?: T): LoadingModel =>\n new LoadingModel(false, false, true, success);\n\n static error = (error?: Error, optionalSuccess?: T): LoadingModel =>\n new LoadingModel(false, true, false, optionalSuccess, error);\n\n /**\n * Mutates the model with a success state, preserving other state fields.\n * @param success - override success state.\n */\n mutate = (\n success: T2 | null) => new LoadingModel(\n this.isLoading,\n this.hasError,\n !!success,\n !success ? undefined : success\n );\n\n loading = (success: T | null = this.success) =>\n new LoadingModel(\n true,\n false,\n !!success && this.hasSuccess,\n !success ? undefined : success\n );\n\n public get success(): T {\n return this._success as T;\n }\n\n public get optionalSuccess(): T | undefined {\n return this._success;\n }\n\n constructor(\n public isLoading: boolean,\n private hasError: boolean,\n private hasSuccess: boolean,\n private _success?: T,\n public error?: Error\n ) {\n }\n\n isEmpty = () => !this.isSuccess() && !this.isError();\n\n hasLoaded = () => !this.isEmpty() && !this.isLoading;\n\n isSuccess = () => this.hasSuccess;\n\n isError = () => this.hasError;\n\n shouldLoad = () => !this.isSuccess() && !this.isLoading;\n\n public toString = () =>\n `Loading: ${this.isLoading}, Success: ${this.hasSuccess}:**${this._success}**, ` +\n `Error: ${this.hasError}:${this.error}`;\n}\n\n/**\n * Wraps an object that conforms to LoadingModel to restore object loss from\n * hydrating state during development.\n */\nexport const wrapLoading = (loading: any): LoadingModel => {\n if (loading instanceof LoadingModel) {\n return loading;\n } else {\n if (!loading) {\n return LoadingModel.empty();\n } else {\n return new LoadingModel(\n loading.isLoading || false,\n loading.hasError || false,\n loading.hasSuccess || false,\n loading._success,\n loading.error\n );\n }\n }\n};\n","import { LoadingModel, wrapLoading } from './loading.model';\n\nexport const selectSuccess = (state: LoadingModel) =>\n wrapLoading(state).success;\nexport const selectOptionalSuccess = (state: LoadingModel) =>\n wrapLoading(state).optionalSuccess;\nexport const selectIsLoading = (state: LoadingModel) =>\n wrapLoading(state).isLoading;\nexport const selectIsSuccess = (state: LoadingModel) =>\n wrapLoading(state).isSuccess();\nexport const selectOptionalError = (state: LoadingModel) =>\n wrapLoading(state).error;\nexport const selectIsError = (state: LoadingModel) =>\n wrapLoading(state).isError();\nexport const selectHasLoaded = (state: LoadingModel) =>\n wrapLoading(state).hasLoaded();\nexport const selectIsEmpty = (state: LoadingModel) =>\n wrapLoading(state).isEmpty();\n\n","import {\n Observable,\n Subject\n} from 'rxjs';\nimport { Action } from '@ngrx/store';\nimport { Actions } from '@ngrx/effects';\nimport { TypedAction } from '@ngrx/store/src/models';\nimport { take } from 'rxjs/operators';\nimport {\n LoadingActionObject\n} from '../src/lib/loading.actions';\n\nexport const generateMockActions = () => {\n const dispatcher = new Subject();\n return {\n dispatcher,\n actions: new Actions(dispatcher)\n };\n};\n\n/**\n * Simple verifier that checks if the request action results in a success returned.\n */\nexport const verifyActionSuccess = (\n action: LoadingActionObject,\n effect: Observable>,\n dispatcher: Subject,\n options: {\n data: TSuccess,\n payload?: TRequest,\n }) => {\n let result: TypedAction;\n effect\n .pipe(take(1))\n .subscribe(next => {\n result = next;\n });\n // payload has type issues, just ignore them since we specify TRequest as type param already.\n dispatcher.next(action.request((options.payload || {}) as never));\n\n expect(result).toBeDefined();\n expect(result).toStrictEqual(action.success({ payload: options.data }));\n};\n\n/**\n * Simple verifier that checks if the request action results in a failure returned.\n */\nexport const verifyActionError = (\n action: LoadingActionObject,\n effect: Observable>,\n dispatcher: Subject,\n options: {\n error: Error,\n payload?: TRequest\n }) => {\n let result: TypedAction;\n effect\n .pipe(take(1))\n .subscribe(next => {\n result = next;\n });\n // payload has type issues, just ignore them since we specify TRequest as type param already.\n dispatcher.next(action.request((options.payload || {}) as never));\n\n expect(result).toBeDefined();\n expect(result).toStrictEqual(action.error({ payload: options.error }));\n};\n","export * from './effects.testing'\n","export * from './lib/organisation.module';\nexport * from './lib/organisation.actions';\n","import { OrganisationState } from './organisation.reducer';\nimport { createLoadingAction } from '@mckinsey-converge/loading';\nimport { Organisation } from '@mckinsey-converge/data-common';\n\nexport const organisationStateSelector = (state: { organisation: OrganisationState }) => state.organisation;\n\nexport const loadOrganisations = createLoadingAction('Organisation', 'data');\n","import { Injectable } from '@angular/core';\nimport {\n Actions,\n Effect\n} from '@ngrx/effects';\nimport { createLoadingEffect } from '@mckinsey-converge/loading';\nimport { loadOrganisations } from './organisation.actions';\nimport { OrganisationService } from '@mckinsey-converge/data-common';\n\n\n@Injectable()\nexport class OrganisationEffects {\n\n constructor(private actions: Actions,\n private organisationService: OrganisationService) {\n }\n\n @Effect()\n public loadOrganisations = createLoadingEffect(this.actions, loadOrganisations,\n () => this.organisationService.loadOrganisation())\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\nimport { organisationReducer } from './organisation.reducer';\nimport { OrganisationEffects } from './organisation.effects';\n\n@NgModule({\n imports: [\n CommonModule,\n EffectsModule.forFeature([\n OrganisationEffects\n ]),\n StoreModule.forFeature('organisation', organisationReducer)\n ]\n})\nexport class OrganisationModule {\n}\n","import { LoadingModel } from '@mckinsey-converge/loading';\nimport { Organisation } from '@mckinsey-converge/data-common';\nimport { createReducer } from '@ngrx/store';\nimport { loadOrganisations } from './organisation.actions';\n\nexport interface OrganisationState {\n data: LoadingModel\n}\n\nconst initialState: OrganisationState = {\n data: LoadingModel.empty()\n};\n\nexport const organisationReducer = createReducer(initialState,\n ...loadOrganisations.ons);\n","export * from './lib/rooms.module';\nexport * from './lib/rooms.actions'\nexport * from './lib/rooms.reducer'\nexport * from './lib/rooms.types'\nexport * from './lib/rooms.utils'\n","import { createLoadingAction } from '../../../loading/src/lib/loading.actions';\nimport { Space } from '../../../data-common/src/lib/spaces/space.class';\nimport {\n RoomQueryOptions,\n RoomState,\n RoomStoreState\n} from './rooms.types';\nimport {\n createAction,\n createSelector,\n props\n} from '@ngrx/store';\n\nexport const roomStateSelector = (state: RoomStoreState) => state.rooms;\n\nexport const loadRoomsWithQuery = createAction('[Rooms] Load Rooms with query', props());\n\nexport const loadRoomsForResults = createLoadingAction('Rooms', 'query');\n\nexport const loadRoomsForResultsMap = createLoadingAction('Rooms for map', 'query');\n\n\nexport const loadLaterThatDayResults = createLoadingAction('Later Rooms', 'later');\n\nexport const loadNextDayResults = createLoadingAction('Next Day Rooms', 'next');\n\nexport const loadByIdResults = createLoadingAction('By Id Rooms', 'byid');\n\nexport const selectRoomResultsSuccess = createSelector(roomStateSelector,\n loadRoomsForResults.selectors.optionalSuccess);\n\nexport const loadDiffSizeResults = createLoadingAction('Different Size Rooms', 'size');\n","import { Injectable } from '@angular/core';\nimport {\n Actions,\n Effect,\n ofType\n} from '@ngrx/effects';\nimport { SpacesService } from '@mckinsey-converge/data-common';\nimport {\n createLoadingEffect,\n LoadingAction\n} from '@mckinsey-converge/loading';\nimport {\n loadLaterThatDayResults,\n loadNextDayResults,\n loadRoomsForResults,\n loadRoomsForResultsMap,\n loadRoomsWithQuery,\n loadByIdResults,\n loadDiffSizeResults\n} from './rooms.actions';\nimport { mergeMap } from 'rxjs/operators';\nimport {\n laterThatDayFromDateTz,\n nextBusinessDay,\n} from './rooms.utils';\nimport {\n RoomQueryOptions,\n roomQueryOptionsToSpaceAvailabilityOptions,\n roomByIdQueryOptionsToSpaceAvailabilityOptions\n} from './rooms.types';\n\n@Injectable()\nexport class RoomsEffects {\n constructor(private actions: Actions,\n private spaceService: SpacesService) {\n }\n\n @Effect()\n public afterRequestResultsLoadOthersEffect = this.actions.pipe(\n ofType(loadRoomsWithQuery),\n mergeMap((action: LoadingAction) => {\n return [\n loadRoomsForResults.request({\n ...action,\n dateTz: action.dateTz\n }),\n // loadRoomsForResultsMap.request({\n // ...action,\n // dateTz: action.dateTz\n // }),\n loadLaterThatDayResults.request({\n ...action,\n dateTz: laterThatDayFromDateTz(action.dateTz)\n }),\n loadNextDayResults.request({\n ...action,\n dateTz: nextBusinessDay(action.dateTz)\n }),\n loadDiffSizeResults.request({\n ...action,\n dateTz: action.dateTz,\n diff_capacity: true\n }),\n ];\n })\n );\n\n @Effect()\n public loadRoomsForResultsEffect = createLoadingEffect(this.actions, loadRoomsForResults,\n (action) => this.spaceService.available(roomQueryOptionsToSpaceAvailabilityOptions(action), 'rooms'));\n \n @Effect() \n public loadRoomsForResultsMapEffect = createLoadingEffect(this.actions, loadRoomsForResultsMap,\n (action) => this.spaceService.available(roomQueryOptionsToSpaceAvailabilityOptions(action), 'rooms for maps', false));\n\n @Effect()\n public loadLaterThatDayResultsEffect = createLoadingEffect(this.actions, loadLaterThatDayResults,\n (action) =>\n this.spaceService.available(roomQueryOptionsToSpaceAvailabilityOptions(action), 'laterResults'));\n\n @Effect()\n public loadNextDayResultsEffect = createLoadingEffect(this.actions, loadNextDayResults,\n (action) =>\n this.spaceService.available(roomQueryOptionsToSpaceAvailabilityOptions(action), 'nextDay'));\n\n @Effect()\n public loadDiffSizeResultsEffect = createLoadingEffect(this.actions, loadDiffSizeResults,\n (action) =>\n this.spaceService.available(roomQueryOptionsToSpaceAvailabilityOptions(action), 'diffSize'));\n\n @Effect()\n public loadRoomByIdResultsEffect = createLoadingEffect(this.actions, loadByIdResults,\n (action) => \n this.spaceService.available(roomByIdQueryOptionsToSpaceAvailabilityOptions(action), 'byId', false));\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\nimport { roomsReducer } from './rooms.reducer';\nimport { RoomsEffects } from './rooms.effects';\n\n@NgModule({\n imports: [\n CommonModule,\n EffectsModule.forFeature([RoomsEffects]),\n StoreModule.forFeature('rooms', roomsReducer)\n ]\n})\nexport class RoomsModule {\n}\n","import { LoadingModel } from '@mckinsey-converge/loading';\nimport { createReducer } from '@ngrx/store';\nimport {\n loadLaterThatDayResults,\n loadNextDayResults,\n loadRoomsForResults,\n loadByIdResults,\n loadDiffSizeResults,\n loadRoomsForResultsMap\n} from './rooms.actions';\nimport { RoomState } from './rooms.types';\n\nexport const initialRoomsState: RoomState = {\n query: LoadingModel.empty(),\n later: LoadingModel.empty(),\n next: LoadingModel.empty(),\n byid: LoadingModel.empty(),\n size: LoadingModel.empty(),\n};\n\nexport const roomsReducer = createReducer(initialRoomsState,\n ...loadRoomsForResults.ons,\n ...loadRoomsForResultsMap.ons,\n\n ...loadLaterThatDayResults.ons,\n ...loadNextDayResults.ons,\n ...loadByIdResults.ons,\n ...loadDiffSizeResults.ons);\n","import { LoadingModel } from '../../../loading/src/lib/loading.model';\nimport {\n Building,\n DaysOfWeek,\n ISpaceAvailabilityOptions,\n RecurrencePeriod,\n Space\n} from '@mckinsey-converge/data-common';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\n\nexport interface RoomStoreState {\n rooms: RoomState;\n}\n\nexport interface RoomState {\n query: LoadingModel\n later: LoadingModel\n next: LoadingModel\n byid: LoadingModel\n size: LoadingModel\n}\n\nexport interface RoomQueryOptions {\n dateTz: DateTZ;\n duration: number;\n locations: string;\n capacity?: number;\n capacity_max?: number;\n diff_capacity?: boolean;\n //Recurrence fields\n recurrence_period?: RecurrencePeriod;\n recurrence_interval?: number;\n recurrence_endTz?: DateTZ;\n recurrence_count?: number;\n recurrence_starts?: Array;\n recurrence_exceptions?: Array; //SHOULD BE DATETZ\n recurrence_days?: Array;\n timezone?: string;\n offset?: number;\n buildings?: Building[];\n is_recurrent?: boolean;\n is_multiroom?: boolean;\n bookable?: boolean;\n ignore?: string;\n}\n\nexport const roomQueryOptionsToSpaceAvailabilityOptions = (options: RoomQueryOptions): ISpaceAvailabilityOptions => ({\n dateTz: options.dateTz,\n duration: options.duration,\n capacity: options.capacity,\n zone_ids: options.locations,\n capacity_max: options.capacity_max,\n diff_capacity: options.diff_capacity,\n /** Fields to include recurrence in the availability search */\n is_recurrent: options?.is_recurrent,\n is_multiroom: options?.is_multiroom,\n recurrence_period: options?.recurrence_period,\n recurrence_interval: options?.recurrence_interval,\n recurrence_endTz: options?.recurrence_endTz,\n recurrence_count: options?.recurrence_count,\n recurrence_starts: options?.recurrence_starts,\n recurrence_days: options?.recurrence_days,\n bookable: options?.bookable,\n ignore: options?.ignore\n});\n\nexport const roomByIdQueryOptionsToSpaceAvailabilityOptions = (options: RoomQueryOptions): ISpaceAvailabilityOptions => ({\n dateTz: options.dateTz,\n duration: options.duration,\n capacity: options.capacity,\n room_ids: options.locations,\n capacity_max: options.capacity_max\n});\n","import { Space } from '@mckinsey-converge/data-common';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { DateTZ } from \"@mckinsey-converge/date-tz\";\n\nexport const todayFromDate = (date: number) => new DateTZ({date});\n\n/**\n * Adds 60 mins.\n */\nexport const laterThatDayFromDateTz = (dateTz: DateTZ) => {\n return dateTz.addValue({ minutes: 60 })\n};\n\n/**\n * Next business day. In most cases 1 day, but on Fridays, it follows to the monday.\n * @param date\n */\nexport const nextBusinessDay = (dateTz: DateTZ) => {\n let retDate = dateTz.addValue({ days: 1 });\n if (retDate.dateWeekday >= 6) {\n retDate = retDate.setValue({ weekday: 8 });\n }\n return retDate;\n};\n\nexport const mapRoomToSelectOption = (room?: Space): SelectOption => room ? ({\n value: room.id,\n shortDisplay: room.local_name,\n display: `${room.local_name}, ${room.level?.name}`\n}) : undefined;\n","export * from './lib/rx-utils.module';\nexport * from './lib/operators'\nexport * from './lib/loading-model.utils'\n","import {\n combineLatest,\n Observable\n} from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { LoadingModel } from '@mckinsey-converge/loading';\n\n/**\n * Generates the results count based on if data has loaded or not. If not, undefined is returned.\n * Otherwise, it'll return the count of the results.\n */\nexport const resultCountObservable = (loadingObservable: Observable>,\n resultsObservable: Observable\n): Observable => combineLatest([\n loadingObservable.pipe(map(r => r.hasLoaded())),\n resultsObservable.pipe(map(v => v?.length))\n]).pipe(map(([isLoading, viewModelLength]) => isLoading ? viewModelLength : undefined));\n","import {\n distinctUntilChanged,\n filter\n} from 'rxjs/operators';\nimport * as deepEqual from 'fast-deep-equal';\n\n/**\n * Useful for nested objects to prevent unnecessary triggers in RX chain.\n */\nexport const deepDistinctUntilChanged = () => distinctUntilChanged(deepEqual);\n\n/**\n * Won't emit if value is undefined.\n */\nexport const filterUndefined = () => filter(f => !!f);\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class RxUtilsModule {}\n","export * from './lib/ui.module';\nexport * from './lib/types';\nexport * from './lib/base-template.component';\nexport * from './lib/recurrence-pattern-form/recurrence-pattern-form.component';\nexport * from './lib/recurrence-booking-form/recurrence-booking-form.component';\nexport * from './lib/conflicts-modal/conflicts-modal.component'\nexport * from './lib/override-changes-modal/override-changes-modal.component'\nexport * from './lib/date-tz-calendar-widget/date-tz-calendar-widget.component';\nexport * from './lib/date-tz-date-picker/date-tz-date-picker.component';\nexport * from './lib/date-tz-duration-field/date-tz-duration-field.component';\nexport * from './lib/date-tz-time-field/date-tz-time-field.component';\nexport * from './lib/aca-date-picker/aca-date-picker.component';\nexport * from './lib/conflict-alert-modal/conflict-alert-modal.component';\nexport * from './lib/tooltip/tooltip.enums';\nexport * from './lib/zoom-warning-modal/components/zoom-warning/zoom-warning.component';\n","import { Component, OnInit, Input, Output, OnChanges, SimpleChanges, forwardRef, EventEmitter } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\nexport interface IDatePickerOptions {\n /** Unix timestamp with millisecond. First selectable date */\n from?: number;\n /** Unix timestamp with millisecond. Last selectable date */\n to?: number;\n /** Luxon format string for formatting days of the week. Defaults to `DDD` */\n day_format?: string;\n /** Luxon format string for formatting active month. Defaults to `MMMM yyyy` */\n month_format?: string;\n}\n\ninterface IDateBlock {\n /** Timestamp value of the date */\n value: number;\n /** Day of the month to display */\n display: string;\n /** Whether block is the selected date */\n active: boolean;\n /** Whether block not selectable */\n disabled: boolean;\n /** Whether block outside the active month */\n non_month: boolean;\n /** Whether the block is today */\n today: boolean;\n /** Number of events on this block */\n count?: number;\n}\n\n@Component({\n selector: 'aca-date-picker',\n templateUrl: './aca-date-picker.component.html',\n styleUrls: ['./aca-date-picker.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AcaDatePickerComponent),\n multi: true\n }\n ]\n})\nexport class AcaDatePickerComponent implements OnInit, OnChanges, ControlValueAccessor {\n /** CSS class to add to the root element of the component */\n @Input() public klass = 'default';\n /** Counters of the events on given dates. Key format is `yyyy-MM-dd` */\n @Input() public counters: { [date: string]: number };\n /** Settings for the date picker component */\n @Input() public options: IDatePickerOptions;\n /** Offset of the display month from the current month */\n @Output() public month = new EventEmitter();\n /** Display the last selected day as active */\n @Input() public show_last_selection?: boolean = true\n\n public date: number = DateNow(new Date()).ms;\n\n // R--- this is the date picker that needs to be TZ aware\n /** Offset of the month displayed from the current month */\n public offset = 0;\n /** Minimum offset for changing the month */\n public min_offset = -999999;\n /** Maximum offset for changing the month */\n public max_offset = 999999;\n /** Blocks representing the rendering details of the display days of the month */\n public date_list: IDateBlock[] = [];\n /** Name of the actively displayed month */\n public month_name = DateNow(new Date()).formatDate('MMMM yyyy');\n /** Name of the days of the week to display */\n public days_of_week = [];\n /** First selectable date */\n private from: DateTZ;\n /** Last selectable date */\n private to: DateTZ;\n /** Luxon format string for formatting days of the week. Defaults to `dd` */\n private day_format = 'EEE';\n /** Luxon format string for formatting active month. Defaults to `MMMM yyyy` */\n private month_format = 'MMMM yyyy';\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n /** ID of the timer used for changing the month */\n private _change_timer: number;\n\n public ngOnInit(): void {\n this.generateMonth();\n this.generateDaysOfTheWeek();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.options) {\n this.updateOptions();\n }\n if (changes.counters) {\n this.generateMonth();\n }\n }\n\n /** Change date using the given block */\n public setDate(item: IDateBlock) {\n this.date = item.value;\n if (this._onChange) {\n this._onChange(this.date);\n }\n this.generateMonth();\n }\n\n /**\n * Update offset to show the selected date\n */\n public updateDate(): void {\n \n if (!this.date) {\n return;\n }\n const now = DateNow(new Date()).startOfValue('month');\n const date_ = new DateTZ({date: this.date})\n const date = date_.startOfValue('month');\n if (date.valid) {\n const difference = date.dateDiff(now, 'months', 'months');\n if (this.offset !== difference) {\n this.offset = difference;\n this.month.emit(this.offset);\n }\n this.generateMonth();\n }\n }\n\n /**\n * Update local properties based off changes to settings\n */\n public updateOptions(): void {\n if (this.options) {\n // Setup from date\n if (this.options.from) {\n const date_ = new DateTZ({date: this.options.from})\n this.from = date_.startOfValue('day');;\n const today = DateNow(new Date()).startOfValue('month');\n const date = this.from.startOfValue('month');\n this.min_offset = date.dateDiff(today, 'months', 'months');\n } else if (this.from) {\n this.from = null;\n this.min_offset = -999999;\n }\n // Setup to date\n if (this.options.to) {\n const date_ = new DateTZ({date: this.options.to})\n this.to = date_.startOfValue('day');\n const today = DateNow(new Date()).startOfValue('month');\n const date = this.to.startOfValue('month');\n this.max_offset = date.dateDiff(today, 'months', 'months');\n } else if (this.to) {\n this.to = null;\n this.max_offset = 999999;\n }\n if (this.options.month_format) {\n this.month_format = this.options.month_format || 'MMMM yyyy';\n }\n if (this.options.day_format) {\n this.day_format = this.options.day_format || 'EEE';\n this.generateDaysOfTheWeek();\n }\n // Update date blocks\n this.generateMonth();\n }\n }\n\n /**\n * Generate the display blocks for the days of the active month\n */\n private generateMonth(): void {\n if (!this.date) {\n return;\n }\n const date = DateNow(new Date()).addValue({ months : this.offset });\n const active = new DateTZ({date: this.date});\n let start = date.setValue({ day: 1 }).setValue({ weekday: 7 }).subtractValue({ weeks: 1 });\n const end_ = new DateTZ({date: start.ms})\n const end = end_.addValue({ weeks: 1 }).endOfValue('month').addValue({ days: 2 }).endOfValue('week');\n this.date_list = [];\n while (start.isBeforeDate(end) || start.isSameDate(end, 'day')) {\n this.date_list.push({\n value: start.ms,\n display: start.formatDate('d'),\n active: this.show_last_selection && active.isSameDate(start, 'day'),\n non_month: !date.isSameDate(start, 'month'),\n count: this.counters ? this.counters[start.formatDate('yyyy-MM-dd')] || 0 : 0,\n disabled: (this.from ? start.isBeforeDate(this.from, 'day') : false) || (this.to ? start.isAfterDate(this.to, 'day') : false),\n today: DateNow(new Date()).isSameDate(start, 'day')\n });\n start = start.addValue({ days : 1 });\n }\n this.month_name = date.formatDate(this.month_format);\n }\n\n /**\n * Generate this weekdays to display in the header of the calendar\n */\n private generateDaysOfTheWeek() {\n let date = DateNow(new Date()).startOfValue('week');\n this.days_of_week = [];\n for (let i = 0; i < 7; i++) {\n this.days_of_week.push(date.formatDate(this.day_format));\n date = date.addValue({ days : 1 });\n }\n }\n\n /**\n * Changes the month offset by the given value.\n * Does nothing if the new month is not available to be selected\n * @param value Number of months to change the offset by\n */\n public changeMonth(value: number): void {\n if (this._change_timer) {\n clearTimeout(this._change_timer);\n }\n this._change_timer = setTimeout(() => {\n const new_offset = this.offset + value;\n const now = DateNow(new Date())\n const date = now.addValue({ months : new_offset, days: now.dateMonth === 2 ? 2 : 0 }); //add 2 days if month is february to avoid calc errors\n if (this.from && date.isBeforeDate(this.from, 'month')) { return; }\n if (this.to && date.isAfterDate(this.to, 'month')) { return; }\n this.offset = new_offset;\n this.month.emit(this.offset);\n this.generateMonth();\n this._change_timer = null;\n }, 100);\n }\n\n /**\n * Reset the month offset to the month of the selected date\n */\n public reset() {\n const date = new DateTZ({date: this.date});\n const offset = this.offset;\n this.offset = DateNow(new Date()).dateDiff(date, 'months', 'months');\n if (offset !== this.offset) {\n this.generateMonth();\n }\n this.month.emit(this.offset);\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: number) {\n this.date = value;\n this.updateDate();\n this.generateMonth();\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n}\n","
\n
\n
\n
\n
\n
{{month_name}}
\n
= max_offset\" (click)=\"changeMonth(1)\" (touchend)=\"changeMonth(1)\">\n
\n
\n
\n
\n
{{item}}
\n
\n
\n
\n
\n {{item.display}}\n
\n
{{item.count > 9 ? '+9' : item.count}}
\n
\n
\n
\n
","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges\n} from '@angular/core';\n\nexport enum AlertMode {\n Warning = 'warning',\n Coachmark = 'coachmark',\n BlueCoachmark = 'blue-coachmark',\n Error = 'error'\n}\n\nexport enum AlertBannerDisplay {\n /**\n * New UI\n */\n V2 = 'v2',\n\n /**\n * Default, legacy ui.\n */\n V1 = 'v1',\n}\n\n@Component({\n selector: 'mck-alert-banner',\n template: `\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n \n \n
\n `,\n styleUrls: ['./alert-banner.component.scss']\n})\nexport class AlertBannerComponent implements OnInit, OnChanges {\n\n @Input()\n public mode: AlertMode = AlertMode.Warning;\n\n @Output()\n public close = new EventEmitter();\n\n @Output()\n public action = new EventEmitter();\n\n @Input()\n public message: string;\n\n @Input()\n public buttonText: string;\n\n @Input()\n public showClose = true;\n\n @Input()\n public display: AlertBannerDisplay = AlertBannerDisplay.V1;\n\n public iconPath: string = 'assets/icon/warning-yellow.svg';\n public materialColor: string = 'black';\n public closeIcon: string = 'close_outline.svg';\n\n public ngOnInit(): void {\n this._onModeChange();\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n if (changes.mode) {\n this._onModeChange();\n }\n }\n\n private _onModeChange() {\n this.iconPath = 'assets/icon/warning-yellow.svg';\n this.closeIcon = 'close_outline.svg';\n switch (this.mode) {\n case AlertMode.Warning:\n this.materialColor = 'black';\n break;\n case AlertMode.Coachmark:\n this.materialColor = 'coachmark';\n this.closeIcon = 'close_outline_coachmark.svg';\n break;\n case AlertMode.BlueCoachmark:\n this.iconPath = 'assets/icon/info-bg-dark.svg'\n this.materialColor = 'blue-coachmark'\n break;\n case AlertMode.Error:\n this.iconPath = 'assets/img/error-icon.svg'\n this.materialColor = 'white'\n break;\n default:\n this.materialColor = 'black';\n }\n }\n\n}\n","import {\n Component,\n Directive,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Self,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n NgControl\n} from '@angular/forms';\nimport { SelectOption } from '../types';\nimport {\n BehaviorSubject,\n combineLatest,\n from,\n Subject\n} from 'rxjs';\nimport {\n COMMA,\n ENTER\n} from '@angular/cdk/keycodes';\nimport { MatChipInputEvent } from '@angular/material/chips';\nimport {\n distinctUntilChanged,\n map,\n take\n} from 'rxjs/operators';\nimport { MatCheckboxChange } from '@angular/material/checkbox';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { MatAutocompleteTrigger } from '@angular/material/autocomplete';\n\n@Component({\n selector: 'mck-autocomplete-chip-select-item',\n template: `\n
\n \n {{label}}\n \n
\n \n
\n
\n \n
\n \n
\n \n
\n
\n
\n \n \n \n \n {{selected.shortDisplay}}\n close\n \n \n \n \n
\n \n \n {{option.dropdownOverride || option.display}}\n \n \n
\n
\n \n Clear\n \n \n Confirm\n \n
\n \n \n {{errorMessage}}\n
\n `,\n styleUrls: ['./auto-complete-chip-select-item.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class AutoCompleteChipSelectItemComponent extends BaseDirective implements OnInit, OnChanges, ControlValueAccessor, OnDestroy {\n\n @ViewChild('trigger')\n trigger: MatAutocompleteTrigger;\n\n @ViewChild('componentInput')\n componentInput: HTMLInputElement;\n\n @Input()\n label: string;\n\n @Input()\n required?: boolean;\n\n @Input()\n feedbackInput?: boolean;\n\n @Input()\n loading?: boolean;\n\n @Input()\n placeHolder: string;\n\n @Input()\n options: Subject[]>;\n\n @Input()\n selectedOptions: Subject[]>;\n\n @Input()\n useCTAs?: boolean;\n\n @Output()\n optionSelected = new EventEmitter>();\n\n @Output()\n feedbackOutput = new EventEmitter();\n\n @Output()\n chipsCleared: EventEmitter = new EventEmitter();\n\n @Output()\n onClickConfirm: EventEmitter = new EventEmitter();\n\n /**\n * If true, only allow 1 group at a time to get selected. Show others as disabled.\n */\n @Input()\n selectOnlyOneGroup = false;\n\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n\n @Input() public localFilter: boolean = true;\n\n /**\n * If error exists, a message.\n */\n @Input()\n errorMessage?: string;\n\n @Input()\n hideDropdownCarret?: boolean;\n\n @Input()\n displayCTA?: boolean;\n\n private selectOnlyOneGroupChange = new BehaviorSubject(false);\n\n separatorKeysCodes = [ENTER, COMMA];\n\n public filterFormControl: FormControl = new FormControl();\n\n public focused = false;\n public mobileFullScreen = false;\n\n public autocompleteOptions = new BehaviorSubject[]>([]);\n public filteredAutocompleteOptions = new BehaviorSubject[]>([]);\n\n /** List shown to user, filters children if a group header is added **/\n public chipOptions = new BehaviorSubject[]>([]);\n\n /** Form control on change handler */\n private _onChange?: (_: SelectOption[]) => void;\n /** Form control on touch handler */\n private _onTouch?: (_: string) => void;\n\n private value = new BehaviorSubject[]>([]);\n\n public enableCTAs: boolean = false\n\n public hasChips: boolean = false;\n\n constructor(@Self() @Optional() private control: NgControl) {\n super();\n if (this.control) {\n this.control.valueAccessor = this;\n }\n }\n\n public get invalid(): boolean {\n return this.control ? this.control.invalid : false;\n }\n\n public get showError(): boolean {\n if (!this.control) {\n return false;\n }\n\n const { dirty, touched } = this.control;\n\n return this.invalid ? (dirty && touched) : false;\n }\n\n public iconFillClass(color?: string): string {\n return color === 'external' ? 'mck-icon-fill-gray' : 'mck-icon-fill-white'\n }\n\n ngOnInit() {\n this.subscription('autoCompleteOptions', combineLatest([\n this.options,\n this.selectedOptions,\n this.selectOnlyOneGroupChange\n ])\n .pipe(\n map(([options, selectedOptions, selectOnlyOneGroup]) => {\n this.hasChips = !!selectedOptions.length;\n return options.map(option => {\n const selected = !!selectedOptions.find(s => s.value === option.value);\n let enabled = true;\n if (selectOnlyOneGroup) {\n // find first group item in selection\n const selectedGroupHeader = selectedOptions.find(s => s.groupHeader || s.groupId === option.groupId);\n\n // if no options chosen, enable it, otherwise only allow selections from other options.\n enabled =\n selectedOptions.length === 0 ||\n (selectedGroupHeader ? selectedGroupHeader.groupId === option.groupId : false);\n this.enableCTAs = selectedOptions.length !== 0\n }\n\n return {\n ...option,\n enabled,\n selected\n } as SelectOption;\n });\n })\n ).subscribe(next => {\n const options = next.sort((a, b) => {\n if (a.groupId === b.groupId) {\n return b.display > a.display ? -1 : 1;\n }\n return b.groupId > a.groupId ? -1 : 1;\n });\n this.autocompleteOptions.next(options);\n this.filteredAutocompleteOptions.next(this.getFilteredAutocompleteOptions(this.filterFormControl.value?.trim()));\n }));\n this.subscription('filterFormControlChanges',\n this.filterFormControl.valueChanges.subscribe(value => {\n if (this.localFilter && value.length) {\n this.filteredAutocompleteOptions.next(this.getFilteredAutocompleteOptions(value));\n } else {\n this.filteredAutocompleteOptions.next(this.getFilteredAutocompleteOptions());\n }\n }));\n this.subscription('chipOptions', this.selectedOptions\n .pipe(map(selectedOptions => {\n // find group headers and check if children are part of that group.\n // if part of group, filter them out as redundant.\n const groupHeaders = selectedOptions.filter(s => s.groupHeader) || [];\n return selectedOptions.filter(s => s.groupHeader || s.groupChild && !(groupHeaders.find(g => g.groupId === s.groupId)));\n }))\n .subscribe(next => {\n this.chipOptions.next(next);\n }));\n\n this.subscription('formData', this.selectedOptions\n .pipe(map(selected => {\n // group headers always contain children, so only pick out children for data\n return selected;\n }))\n .subscribe(next => {\n this.value.next(next);\n }));\n\n // tie value changes to change.\n this.subscription('valueChanges', this.value\n .pipe(distinctUntilChanged())\n .subscribe(next => {\n if (this._onChange) {\n // rewrote this to avoid read only error\n const values = [];\n next.forEach((v, i) => {\n const value = { ...v };\n if (v.meta?.user) {\n value.display = v.meta.user.name;\n }\n values.push(value);\n });\n this._onChange(values);\n }\n }));\n\n window.addEventListener('scroll', this.scrollEvent, true);\n }\n\n getFilteredAutocompleteOptions(searchString: string = '') {\n // Exact matches of the groupId or display value\n const exactMatches = this.autocompleteOptions.value.filter(o => {\n if (searchString && searchString.length) {\n return o.groupId.toLowerCase().indexOf(searchString.toLowerCase()) === 0 || o.display.toLowerCase().indexOf(searchString.toLowerCase()) === 0;\n }\n return o.groupId && o.display;\n });\n // Fuzzier search of the dropdownOverride field\n const moreOptions = this.autocompleteOptions.value.filter(o => {\n if (o?.dropdownOverride?.length && searchString) {\n const match = o.dropdownOverride?.toLowerCase().indexOf(searchString.toLowerCase()) > -1;\n // only return found locations that don't exist in exactMatches.\n return match && !exactMatches.find(e => {\n return e.value === o.value\n });\n }\n return false;\n });\n\n // Merge the two result sets\n let joinedOptions = exactMatches.concat(moreOptions).sort((a, b) => {\n if (a.groupId === b.groupId) {\n return b.display > a.display ? -1 : 1;\n }\n return b.groupId > a.groupId ? -1 : 1;\n });\n\n // Create a 1D array of the groupId\n const groupIds = joinedOptions.map(o => o.groupId);\n // Get a deduped list of the group parents\n const parents = this.autocompleteOptions.value.filter(o => {\n return o?.groupHeader && groupIds.indexOf(o.groupId) !== -1;\n });\n\n // Remove the parents from the joinedOptions and merge with the reduced parents set, and then sort by groupId.\n // Resulting array sets the parents first in order so the widget renders properly.\n const filteredAutocompleteOptions = parents.concat(joinedOptions.filter(jo => !!jo.dropdownOverride)).sort((a, b) => {\n return b.groupId > a.groupId ? -1 : 1;\n });\n return filteredAutocompleteOptions;\n }\n\n loseFocus(): void {\n this.mobileFullScreen = false;\n this.focused = false;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.selectOnlyOneGroup) {\n this.selectOnlyOneGroupChange.next(this.selectOnlyOneGroup);\n }\n }\n\n keyedInput(matInput: string) {\n if (this.feedbackInput) {\n this.feedbackOutput.emit(matInput);\n }\n }\n\n selectOption(value: string) {\n this.options.pipe(\n take(1),\n map((options: SelectOption[]) => options.find(o => o.value === value))\n ).subscribe(next => {\n if (next) {\n this.optionSelected.emit(next);\n }\n });\n }\n\n removeOption(value: SelectOption) {\n this.optionSelected.emit(value);\n if (this.useCTAs) {\n this.onClickConfirm.emit();\n }\n\n }\n\n clearSelections() {\n this.selectedOptions.next([]);\n this.chipsCleared.emit();\n }\n\n onClickArrow() {\n // only close events we allow arrow to close panel.\n if (this.focused) {\n this.onFocus(false);\n }\n }\n\n onPanelFocusChange(focusIn: boolean) {\n this.onFocus(focusIn, true);\n }\n\n onFocus(focusIn: boolean, fromPanel?: boolean) {\n if (!focusIn && this.useCTAs) {\n this.onClickConfirm.emit();\n }\n // Only for location input???\n if (this.localFilter && fromPanel && focusIn) {\n // open on focus, mobile needs a refocus\n this.mobileFullScreen = true;\n this.timeout('showDefaults', () => {\n // All results do not show as expected unless I focus again.\n // Something about the mobile styles.\n this.onFocus(true);\n }, 100)\n }\n\n if (this.feedbackInput && !fromPanel) {\n // clear input when input creates options\n this.componentInput.value = '';\n this.filterFormControl.setValue('');\n this.feedbackOutput.emit('');\n }\n\n if (this.focused !== focusIn) {\n this.focused = focusIn;\n // clear on close\n if (!focusIn) {\n this.componentInput.value = '';\n this.filterFormControl.setValue('');\n }\n if (!fromPanel) {\n if (focusIn) {\n this.trigger.openPanel();\n } else {\n this.trigger.closePanel();\n // close the mobile full screen\n this.loseFocus();\n }\n }\n }\n }\n\n onChanged(value: SelectOption, event: MatCheckboxChange) {\n this.optionSelected.emit(value);\n }\n\n add(event: MatChipInputEvent) {\n // reset\n if (event.input) {\n event.input.value = '';\n }\n this.filterFormControl.setValue('');\n }\n\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouch = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n // TODO: disabled not implemented yet.\n this.disabled = isDisabled;\n }\n\n writeValue(obj: SelectOption[] | undefined): void {\n // update selected options when this value is written\n this.options?.pipe(\n take(1),\n map((options: SelectOption[]) => {\n return options.filter(o => obj ? !!obj.find(spl => o.value === spl.value) : false );\n })\n ).subscribe(next => {\n this.selectedOptions.next(next);\n });\n }\n\n private scrollEvent = (event): void => {\n if (this.trigger === null) {\n return;\n }\n /**\n * IF - to confirm user not scrolling from autocomplete opened panel and close panel if scroll event triggers from outside of panel\n */\n if (this.trigger.panelOpen && event.target.closest('.mat-autocomplete-panel') === null && !event.srcElement.classList.contains('mat-form-field-autofill-control')) {\n this.onFocus(false);\n this.trigger['_element'].nativeElement.blur();\n }\n }\n public ngOnDestroy(): void {\n window.removeEventListener('scroll', this.scrollEvent, true);\n }\n}\n\n\n","import {\n Pipe,\n PipeTransform\n} from '@angular/core';\nimport { SelectOption } from '../types';\n\n/**\n * Patch orphaned SelectOption children into acting as their own group headers.\n *\n * This intends to help in the common scenario where filters have (for whatever\n * reason) prevented the child's usual group header from appearing.\n */\n@Pipe({\n name: 'groupHeaderPatch',\n})\nexport class GroupHeaderPipe implements PipeTransform {\n transform(items: SelectOption[]): SelectOption[] {\n if (!items) {\n return [];\n }\n\n return items.map(v => {\n const hasHeader = !!items.find(i => i.groupHeader && i.groupId === v.groupId);\n return {\n ...v,\n displayAsHeader: !hasHeader,\n }\n })\n }\n\n}\n","import { Component, Input, Output, forwardRef, SimpleChanges, OnChanges, OnInit, EventEmitter, ViewChild, OnDestroy } from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Observable } from 'rxjs';\nimport { map, startWith } from 'rxjs/operators';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { MatAutocompleteTrigger } from '@angular/material/autocomplete';\nimport {\n BehaviorSubject\n} from 'rxjs';\n\n/**\n * @title Autocomplete filtering select of a single option via text search.\n */\n@Component({\n selector: 'mck-autocomplete-select-option',\n templateUrl: 'auto-complete-select-option.component.html',\n styleUrls: ['auto-complete-select-option.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AutoCompleteSelectOptionComponent),\n multi: true\n }\n ],\n})\nexport class AutoCompleteSelectOptionComponent implements OnInit, OnChanges, ControlValueAccessor, OnDestroy{\n @Input()\n public label: string;\n\n @Input()\n public required: boolean;\n\n @Input()\n public options: SelectOption[] = [];\n\n @Input()\n public selectedValue: SelectOption | undefined;\n\n @Input()\n public resetInput: number | undefined;\n\n @Input()\n public placeholder: string;\n\n @Input()\n public noEntriesFoundLabel: string;\n\n @Output()\n public filteredOptionsChange = new EventEmitter[]>();\n\n @Output()\n public inputTextChange = new EventEmitter();\n\n @Output() emptyBoxEvent = new EventEmitter();\n\n /** Form control on change handler */\n private _onChange: (_: SelectOption) => void;\n /** Form control on touch handler */\n private _onTouch: (_: SelectOption) => void;\n\n filterFormControl = new FormControl();\n filteredOptions: Observable[]>;\n\n /** The selected value */\n public value = new BehaviorSubject('');\n\n /** Available options to search / select from */\n public _options = new BehaviorSubject[]>(this.options);\n @ViewChild('trigger')\n trigger: MatAutocompleteTrigger;\n\n ngOnInit() {\n this.updateFilteredOptions();\n window.addEventListener('scroll', this.scrollEvent, true);\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n // Watch and apply changes from the parent component.\n if (changes.options || changes.selectedValue) {\n if (changes.options && !changes.selectedValue) {\n this.filterFormControl.setValue('')\n }\n this.updateFilteredOptions();\n }\n if (changes.resetInput) {\n this.filterFormControl.setValue('');\n this.updateFilteredOptions();\n }\n \n }\n\n private updateFilteredOptions() {\n this.filteredOptions = this.filterFormControl.valueChanges\n .pipe(\n startWith(''),\n map(value => typeof value === 'string' ? value : value && value?.display ? value.display : ''),\n map(name => name ? this._filter(name) : this.options.slice())\n );\n }\n\n displayFn(data: SelectOption): string {\n return data && data?.display ? data.display : '';\n }\n\n private _filter(display: string): SelectOption[] {\n const filterValue = display.toLowerCase();\n // return all the matches found\n const filtered = this.options.filter(option => {\n // split this input and index both, if both\n // match return true.\n if (filterValue.includes(' ')) {\n const filterValues =filterValue.split(' ');\n let matchesAll = true;\n for (let x = 0; x < filterValues.length; x++) {\n if (option.display.toLowerCase().indexOf(filterValues[x]) === -1) {\n matchesAll = false;\n }\n }\n if (matchesAll) {\n return true;\n }\n }\n // match the whole string\n return option.display.toLowerCase().indexOf(filterValue) > -1;\n });\n this.inputTextChange.emit(filterValue);\n this.filteredOptionsChange.emit(filtered);\n return filtered;\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: SelectOption): void {\n this.value.next(new_value);\n if (this._onChange) {\n this._onChange(this.options.find(f => f.value === new_value.value));\n }\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: SelectOption | null) {\n if (value != null) {\n this.value.next(value.value);\n }\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: SelectOption) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: SelectOption) => void): void {\n this._onTouch = fn;\n }\n\n public onChangeInput() {\n if (this.filterFormControl.value === '') {\n this.emptyBoxEvent.emit(true);\n }\n }\n\n private scrollEvent = (event): void => {\n if (this.trigger === null) {\n return;\n }\n /**\n * IF - to confirm user not scrolling from autocomplete opened panel and close panel if scroll event triggers from outside of panel\n */\n if (this.trigger.panelOpen && event.target.closest('.mat-autocomplete-panel') === null ) {\n this.trigger.closePanel();\n this.trigger['_element'].nativeElement.blur();\n }\n }\n public ngOnDestroy(): void {\n window.removeEventListener('scroll', this.scrollEvent, true);\n }\n\n}","
\n {{label}}\n \n \n \n \n {{option.shortDisplay || option.display}}\n \n \n \n
","import {\n AfterViewInit,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\n/**\n * A helper class for rendering embedded views (ng-template) as standalone components.\n *\n * If the view is lazy and does not render upon initialization,\n * it attempts embedding view again later.\n *\n * When testing a component directly that extends this class, its best to wrap the component\n * in a wrapper component for testing so that it can render itself.\n */\nexport class BaseTemplateComponent extends BaseDirective implements AfterViewInit, OnInit, OnDestroy {\n @ViewChild(TemplateRef, { static: true })\n public template: TemplateRef;\n\n private isRendered = false;\n\n constructor(private vcRef: ViewContainerRef) {\n super();\n }\n\n public ngOnInit(): void {\n // try early rendering\n this.attemptViewEmbed();\n }\n\n public attemptViewEmbed() {\n if (this.template && !this.isRendered) {\n this.isRendered = true;\n this.vcRef.createEmbeddedView(this.template);\n return true;\n }\n return false;\n }\n\n public ngAfterViewInit(): void {\n if (!this.isRendered) {\n console.log('View not rendered yet, attempting to post initialization');\n setTimeout(() => {\n console.log('Timeout ended, trying again', this.template);\n if (!this.attemptViewEmbed()) {\n console.log('Attempting render in after view initialization');\n setTimeout(() => {\n if (!this.attemptViewEmbed()) {\n console.error('FAILED TO LOAD TEMPLATE');\n }\n }, 1000);\n }\n });\n }\n }\n\n public ngOnDestroy(): void {\n super.ngOnDestroy();\n this.isRendered = false;\n }\n}\n","import {\n Component,\n Output,\n TemplateRef,\n ViewChild,\n EventEmitter,\n Input\n } from \"@angular/core\";\n import { DropdownPanel } from \"./dropdown-panel\";\n \n @Component({\n selector: \"cng-select-options\",\n templateUrl: \"./cng-select-options.component.html\",\n styleUrls: [\"./cng-select-options.component.scss\"]\n })\n export class CngSelectOptionsComponent implements DropdownPanel {\n @ViewChild(TemplateRef) templateRef: TemplateRef;\n @Output() closed = new EventEmitter();\n @Input() ddWidth: string;\n \n constructor() {}\n }\n ","\n
\n \n
\n
","import {\n Component,\n Output,\n TemplateRef,\n ViewChild,\n EventEmitter,\n Input,\n OnInit\n } from \"@angular/core\";\n import { DropdownPanel, DropdownOpion } from \"./dropdown-panel\";\n \n @Component({\n selector: \"cng-select\",\n templateUrl: \"./cng-select.component.html\",\n styleUrls: [\"./cng-select.component.scss\"]\n })\n export class CngSelectComponent implements OnInit {\n @Input() data: any;\n public isClosed: boolean = false;\n public selected: DropdownOpion;\n constructor() {\n\n }\n ngOnInit(): void {\n this.selected = this.data.defaultSelected;\n }\n\n public optionSelected(item: DropdownOpion) {\n // this.selected = item;\n this.data.defaultSelected = item;\n this.data?.onChangeCallback && this.data?.onChangeCallback(item);\n }\n }\n ","\n\n
\n {{data?.defaultSelected?.display}}\n
\n \n
\n
\n\n
{{item?.display}}
\n
","import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n ViewContainerRef\n } from '@angular/core';\n import { DropdownPanel } from './dropdown-panel';\n import { Overlay, OverlayRef } from '@angular/cdk/overlay';\n import { TemplatePortal } from '@angular/cdk/portal';\n import { merge, Observable, Subscription } from 'rxjs';\n \n @Directive({\n selector: '[dropdownTriggerFor]',\n host: {\n '(click)': 'toggleDropdown()'\n }\n })\n export class DropdownTriggerForDirective implements OnDestroy, AfterViewInit, OnInit {\n private isDropdownOpen = false;\n private overlayRef: OverlayRef;\n private dropdownClosingActionsSub = Subscription.EMPTY;\n \n @Input('dropdownTriggerFor') public dropdownPanel: DropdownPanel;\n @Output() isPanelOpened = new EventEmitter();\n constructor(\n private overlay: Overlay,\n private elementRef: ElementRef,\n private viewContainerRef: ViewContainerRef,\n private renderer: Renderer2\n ) {\n \n }\n ngOnInit(): void {\n // const cngSelectEl = this.elementRef.nativeElement.nextElementSibling; \n // const parentWidth = this.elementRef.nativeElement.offsetWidth; \n // this.renderer.setStyle(cngSelectEl, 'width', `${parentWidth}px`);\n }\n ngAfterViewInit(): void {\n \n }\n\n \n toggleDropdown(): void {\n this.isDropdownOpen ? this.destroyDropdown() : this.openDropdown();\n \n }\n \n openDropdown(): void {\n let {ddWidth} = this.dropdownPanel;\n this.dropdownPanel.ddWidth = ddWidth !=='' ? ddWidth : `${this.elementRef.nativeElement.offsetWidth}px`;\n this.isDropdownOpen = true;\n this.isPanelOpened.emit(this.isDropdownOpen);\n this.overlayRef = this.overlay.create({\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n scrollStrategy: this.overlay.scrollStrategies.close(),\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withPositions([\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 8\n }\n ])\n });\n \n const templatePortal = new TemplatePortal(\n this.dropdownPanel.templateRef,\n this.viewContainerRef\n );\n this.overlayRef.attach(templatePortal);\n \n this.dropdownClosingActionsSub = this.dropdownClosingActions().subscribe(\n () => this.destroyDropdown()\n );\n }\n \n private dropdownClosingActions(): Observable {\n const backdropClick$ = this.overlayRef.backdropClick();\n const detachment$ = this.overlayRef.detachments();\n const dropdownClosed = this.dropdownPanel.closed;\n \n return merge(backdropClick$, detachment$, dropdownClosed);\n }\n \n private destroyDropdown(): void {\n if (!this.overlayRef || !this.isDropdownOpen) {\n return;\n }\n \n this.dropdownClosingActionsSub.unsubscribe();\n this.isDropdownOpen = false;\n this.isPanelOpened.emit(this.isDropdownOpen);\n this.overlayRef.detach();\n }\n \n ngOnDestroy(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n }\n }\n }\n ","import {\n Component,\n Input,\n OnInit,\n OnDestroy,\n ViewChild,\n AfterViewInit\n} from '@angular/core';\nimport { MatExpansionPanel } from '@angular/material/expansion';\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { CollapseService } from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'mck-collapse-header',\n template: `\n \n \n {{title}}\n
\n
\n \n
\n \n
\n
\n {{description}}\n \n \n \n \n `,\n styleUrls: ['./collapse-header.component.scss'],\n})\nexport class CollapseHeaderComponent implements OnInit, OnDestroy {\n\n @Input() title: string;\n @Input() description: string;\n @Input() isLoading = false;\n\n @ViewChild('expansionPanel') expansionPanel: MatExpansionPanel;\n\n public isExpanded = new BehaviorSubject(false);\n private collapseSubscription: Subscription;\n\n constructor(private collapseService: CollapseService) {}\n\n ngOnInit(): void {\n this.collapseSubscription = this.collapseService.collapse$.subscribe(() => {\n if (this.expansionPanel) {\n this.expansionPanel.close(); // Close the panel\n }\n });\n }\n\n ngOnDestroy(): void {\n this.collapseSubscription.unsubscribe();\n }\n}\n","import { ChangeDetectionStrategy, Component, Inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\nexport interface RoomAvaibilityModalData {\n\theaderText: string,\n\tmessage: string,\n\tbuttonLabel: string,\n\tcallback: Function,\n shouldClose: boolean\n}\n\n@Component({\n selector: 'conflict-alert-modal',\n templateUrl: 'conflict-alert-modal.component.html',\n styleUrls: ['./conflict-alert-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class ConflictAlertModalComponent implements OnInit {\n constructor(public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public dialogData: RoomAvaibilityModalData) {\n }\n ngOnInit(): void {}\n\n public done() {\n this.dialogData?.callback(); this.dialogRef.close()\n }\n}\n","
\n \n
\n\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{{dialogData?.headerText}}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
{{dialogData?.message}}
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t\n\t\t\t\t\t \n\t\t\t\n
","import {Component, EventEmitter, Inject, Input, OnInit, Output} from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport {DialogEvent} from '@mckinsey-converge/base';\nimport {DateTZ, isToday} from '@mckinsey-converge/date-tz';\n\nexport interface ConflictsModalComponentData {\n room_name: string;\n conflicts: number[];\n copy_conflicts?: boolean;\n timezone: string;\n status?: string;\n}\n\n@Component({\n selector: 'app-conflicts-modal',\n templateUrl: './conflicts-modal.component.html',\n styleUrls: ['./conflicts-modal.component.scss']\n})\nexport class ConflictsModalComponent implements OnInit{\n public room_name: string;\n public conflicts: number[];\n public copy_conflicts: boolean;\n public timezone;\n public status: string;\n\n\n @Output() public event = new EventEmitter();\n\n constructor(@Inject(MAT_DIALOG_DATA) private _data: ConflictsModalComponentData){\n\n }\n\n public ngOnInit(){\n this.timezone = this._data.timezone;\n this.room_name = this._data.room_name\n this.conflicts = this._data.conflicts\n this.copy_conflicts = this._data.copy_conflicts\n this.status = this._data.status\n }\n\n public formatDate(date: number) {\n const dateTZ = new DateTZ({date: date*1000, is_local_tz: false, building_tz: this._data.timezone});\n const dateIsToday = isToday(dateTZ, this.timezone);\n const display = dateTZ.formatDate('ccc dd MMM yyyy');\n return `${display}${dateIsToday ? ' (Today)' : ''}`;\n }\n\n public continue(): void {\n this.event.emit({ reason: 'done' });\n }\n\n public close(): void {\n this.event.emit({ reason: 'close' });\n }\n\n public copy(): void {\n this.event.emit({ reason: 'action' });\n }\n\n\n}\n","
\n \n
\n\n
\n

Conflicts ({{conflicts.length}})

\n
\n The {{room_name}} room is not available on the following dates.\n Do you want to proceed without booking these days?\n
\n
\n The {{room_name}} room is not available on the following dates.\n You need to make individual bookings to cover these days, please.\n
\n
\n
\n
\n Date\n
\n
\n
\n {{formatDate(conflict)}}\n
\n
\n
\n
\n\n \n {{copy_conflicts ? 'Copy to clipboard' : 'Close'}}\n \n \n {{copy_conflicts ? 'Close' : 'Continue'}}\n \n\n","import {\n Component,\n OnInit,\n Input,\n Output,\n OnChanges,\n SimpleChanges,\n forwardRef,\n EventEmitter,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BaseClass } from '@mckinsey-converge/base';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\nexport interface IDateTzPickerOptions {\n /** DateTZ object. First selectable date */\n fromDateTz?: DateTZ;\n /** DateTZ object. Last selectable date */\n untilDateTz?: DateTZ;\n /** Luxon format string for formatting days of the week. Defaults to `DDD` */\n day_format?: string;\n /** Luxon format string for formatting active month. Defaults to `MMMM yyyy` */\n month_format?: string;\n}\n\ninterface IDateBlock {\n /** Timestamp value of the date */\n value: DateTZ;\n /** Day of the month to display */\n display: string;\n /** Whether block is the selected date */\n active: boolean;\n /** Whether block not selectable */\n disabled: boolean;\n /** Whether block outside the active month */\n non_month: boolean;\n /** Whether the block is today */\n today: boolean;\n /** Number of events on this block */\n count?: number;\n}\n\n@Component({\n selector: 'date-tz-calendar-widget',\n templateUrl: './date-tz-calendar-widget.component.html',\n styleUrls: ['./date-tz-calendar-widget.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateTzCalendarWidgetComponent),\n multi: true,\n },\n ],\n})\nexport class DateTzCalendarWidgetComponent\n extends BaseClass\n implements OnInit, OnChanges, ControlValueAccessor\n{\n /** CSS class to add to the root element of the component */\n @Input() public className = 'default';\n /** Counters of the events on given dates. Key format is `yyyy-MM-dd` */\n @Input() public counters: { [date: string]: number };\n /** Settings for the date picker component */\n @Input() public options: IDateTzPickerOptions;\n /** Offset of the display month from the current month */\n @Output() public month = new EventEmitter();\n\n public readonly weeks = new Array(6).fill(0);\n public selectedDateTz: DateTZ = DateNow();\n\n // R--- this is the date picker that needs to be TZ aware\n /** Offset of the month displayed from the current month */\n public offset = 0;\n /** Minimum offset for changing the month */\n public min_offset = -999999;\n /** Maximum offset for changing the month */\n public max_offset = 999999;\n /** Blocks representing the rendering details of the display days of the month */\n public date_list: IDateBlock[] = [];\n /** Name of the actively displayed month */\n public month_name = DateNow(new Date()).formatDate('MMMM yyyy');\n /** Name of the days of the week to display */\n public days_of_week = [];\n /** First selectable date */\n private fromTz: DateTZ;\n /** Last selectable date */\n private toTz: DateTZ;\n /** Luxon format string for formatting days of the week. Defaults to `dd` */\n private day_format = 'EEE';\n /** Luxon format string for formatting active month. Defaults to `MMMM yyyy` */\n private month_format = 'MMMM yyyy';\n /** Form control on change handler */\n private _onChange: (_: DateTZ) => void;\n /** Form control on touch handler */\n private _onTouch: (_: DateTZ) => void;\n\n private _today = DateNow();\n\n public get timezone() {\n return this.selectedDateTz?.building_tz || '';\n }\n\n public ngOnInit(): void {\n this.generateMonth();\n this.generateDaysOfTheWeek();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.options) {\n this.updateOptions();\n }\n if (changes.counters) {\n this.generateMonth();\n }\n }\n\n /** Change date using the given block */\n public setDate(item: IDateBlock) {\n this.selectedDateTz = item.value;\n if (this._onChange) {\n this._onChange(this.selectedDateTz);\n }\n this.generateMonth();\n }\n\n /**\n * Update offset to show the selected date 2\n */\n public updateDate(): void {\n if (!this.selectedDateTz) {\n return;\n }\n const now = this._today.startOfValue('month');\n const startOfMonthDateTz = this.selectedDateTz.startOfValue('month');\n if (startOfMonthDateTz.valid) {\n const difference = startOfMonthDateTz.dateDiff(\n now,\n 'months',\n 'months'\n );\n if (this.offset !== difference) {\n this.offset = Math.round(difference);\n this.month.emit(this.offset);\n }\n this.generateMonth();\n }\n }\n\n /**\n * Update local properties based off changes to settings\n */\n public updateOptions(): void {\n if (this.options) {\n // Setup from date\n if (this.options.fromDateTz) {\n const today = this._today.startOfValue('month');\n this.fromTz = this.options.fromDateTz.startOfValue('day');\n this.min_offset = Math.round(\n this.fromTz\n .startOfValue('month')\n .dateDiff(today, 'months', 'months')\n );\n } else if (this.fromTz) {\n this.fromTz = null; // R-- check if ok\n this.min_offset = -999999;\n }\n // Setup to date\n if (this.options.untilDateTz) {\n const today = this._today.startOfValue('month');\n this.toTz = this.options.untilDateTz.startOfValue('day');\n this.max_offset = this.toTz\n .startOfValue('month')\n .dateDiff(today, 'months', 'months');\n } else if (this.toTz) {\n this.toTz = null;\n this.max_offset = 999999;\n }\n if (this.options.month_format) {\n this.month_format = this.options.month_format || 'MMMM yyyy';\n }\n if (this.options.day_format) {\n this.day_format = this.options.day_format || 'EEE';\n this.generateDaysOfTheWeek();\n }\n // Update date blocks\n this.generateMonth();\n }\n }\n\n /**\n * Generate the display blocks for the days of the active month\n */\n private generateMonth(): void {\n this._today = new DateTZ({ date: Date.now(), is_local_tz: !this.timezone, building_tz: this.timezone });\n const startOfMonthDateTz = this._today.addValue({ months: this.offset });\n const active = this.selectedDateTz || DateNow();\n let startDate = startOfMonthDateTz\n .setValue({ day: 1 })\n .setValue({ weekday: 7 })\n .subtractValue({ weeks: 1 });\n this.date_list = [];\n for (let i = 0; i < 42; i++) {\n this.date_list.push({\n value: startDate,\n display: startDate.formatDate('d'),\n active: active.isSameDate(startDate, 'day'),\n non_month: !startOfMonthDateTz.isSameDate(startDate, 'month'),\n count: this.counters\n ? this.counters[startDate.formatDate('yyyy-MM-dd')] || 0\n : 0,\n disabled:\n (this.fromTz ? startDate.ms < this.fromTz.ms : false) ||\n (this.toTz ? startDate.ms > this.toTz.ms : false),\n today: this._today.isSameDate(startDate, 'day'),\n });\n startDate = startDate.addValue({ days: 1 });\n }\n this.month_name = startOfMonthDateTz.formatDate(this.month_format);\n }\n\n /**\n * Generate this weekdays to display in the header of the calendar\n */\n private generateDaysOfTheWeek() {\n let date = this._today.startOfValue('week');\n this.days_of_week = [];\n for (let i = 0; i < 7; i++) {\n this.days_of_week.push(date.formatDate(this.day_format));\n date = date.addValue({ days: 1 });\n }\n }\n\n /**\n * Changes the month offset by the given value.\n * Does nothing if the new month is not available to be selected\n * @param value Number of months to change the offset by\n */\n public changeMonth(value: number): void {\n const new_offset = Math.min(\n this.max_offset,\n Math.max(this.min_offset, this.offset + value)\n );\n this.offset = Math.round(new_offset);\n this.generateMonth();\n this.month.emit(this.offset);\n }\n\n /**\n * Reset the month offset to the month of the selected date\n */\n public reset() {\n const offset = this.offset;\n this.offset = Math.round(\n this._today.dateDiff(this.selectedDateTz, 'months', 'months')\n );\n if (offset !== this.offset) this.generateMonth();\n this.month.emit(this.offset);\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: DateTZ) {\n if (value) {\n this.selectedDateTz = value;\n this.updateDate();\n this.generateMonth();\n }\n }\n\n public readonly registerOnChange = (fn: (_: DateTZ) => void) => this._onChange = fn;\n public readonly registerOnTouched = (fn: (_: DateTZ) => void) => this._onTouch = fn;\n}\n","
\n
\n \n
\n \n
{{ month_name }}
\n = max_offset\"\n (click)=\"changeMonth(1)\"\n >\n
\n \n
\n \n \n \n \n \n \n \n \n \n
{{ item }}
\n \n {{ item.display }}\n
\n
{{item.count > 9 ? '+9' : item.count}}
\n \n
\n
\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n ViewChild,\n OnInit\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\n\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport {\n BehaviorSubject,\n Observable\n} from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { DateTzCalendarWidgetComponent } from '../date-tz-calendar-widget/date-tz-calendar-widget.component';\n\n@Component({\n selector: 'date-tz-date-picker',\n template: `\n \n {{label}}\n \n
{{ dateString | async }}
\n
\n \n
\n \n \n \n
\n \n Today\n \n
\n
\n \n `,\n styleUrls: ['./date-tz-date-picker.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateTzDatePickerComponent),\n multi: true\n }\n ]\n})\nexport class DateTzDatePickerComponent extends BaseDirective implements OnInit, ControlValueAccessor {\n @Input() public label?: string;\n /** Earliest date available the user is allowed to pick */\n @Input() public fromDateTz: DateTZ = DateNow(new Date());\n /** Latest date available the user is allowed to pick */\n @Input() public untilDateTz: DateTZ = DateNow(new Date()).endOfValue('day').addValue({ years: 1 });\n /** Position of the tooltip */\n @Input() public position: 'right' | 'left' = 'right';\n /** Offset of the tooltip */\n @Input() public offset: 'top' | 'bottom' = 'bottom';\n /** Whether form control is disabled */\n @Input() public disabled: boolean;\n // R-- possible TODO, address all_day that disables this input and displays \"Add Day for the value like the time picker\"\n @Input() public all_day: boolean = false;\n /** Whether to show the calendar tooltip */\n @Input() public icon_only: boolean = false;\n\n @Input() public counters: any;\n\n @Input() public initialDateSelectionTz?: DateTZ;\n\n @Output() public onSelect = new EventEmitter();\n\n @Input() public invalid?: boolean;\n\n @Input() public timezone?: string;\n\n @Input() public can_pick_today: boolean = true;\n\n /** Whether form control is invalid, touched and contains errors */\n @Input() public error?: boolean;\n\n public ngOnInit(): void {\n if (this.initialDateSelectionTz) {\n this.writeValue(this.initialDateSelectionTz)\n }\n }\n\n /** Whether to show the calendar tooltip */\n public show_tooltip: boolean;\n /** Form control on change handler */\n private _onChange: (_: DateTZ) => void;\n /** Form control on touch handler */\n private _onTouch: (_: DateTZ) => void;\n\n @ViewChild(MatMenuTrigger, { static: true }) private _trigger: MatMenuTrigger;\n @ViewChild(DateTzCalendarWidgetComponent, {static: true }) private _acaDatePicker: DateTzCalendarWidgetComponent;\n /** Currently selected date */\n public selectedDateTzValue = new BehaviorSubject(DateNow(new Date()));\n\n /** Display value for the current date */\n public get dateString(): Observable {\n return this.selectedDateTzValue.pipe(map(d => {\n const display = d.formatDate('ccc dd MMM yyyy');\n return `${display}${d.isSameDate(new DateTZ({ is_local_tz: false, building_tz: d.building_tz }), 'day') ? ' (Today)' : ''}`;\n }));\n }\n\n /** Whether date picker is open */\n public get is_open(): boolean {\n return this._trigger.menuOpen;\n }\n\n // date\n public get dateTzObservable(): Observable {\n return this.selectedDateTzValue.pipe(map(d => {\n return d \n }));\n\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(newValueTz: DateTZ) {\n // Keep hours and minutes of the old date\n const old_date = this.selectedDateTzValue.value;\n let newDateTz = newValueTz.setValue({ hour: old_date.dateHour, minute: old_date.minutes, second: old_date.second });\n\n // Check that new date is before from\n if (newDateTz.ms < this.fromDateTz.ms) {\n newDateTz = this.fromDateTz;\n }\n\n this.selectedDateTzValue.next(newDateTz);\n if (this._onChange) {\n this._onChange(newDateTz);\n }\n\n this.onSelect.emit(newDateTz);\n this.show_tooltip = false;\n }\n\n public goToToday() {\n const building_tz = this.timezone || this.fromDateTz.building_tz\n const is_local_tz = DateNow(new Date()).building_tz === building_tz\n this.setValue(new DateTZ({ is_local_tz, building_tz }));\n }\n\n public resetToLastSelection = () => this._acaDatePicker.updateDate();\n\n public onDatePickerClose() {\n this.resetToLastSelection();\n }\n /* istanbul ignore next */\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(selectedDateTz: DateTZ) {\n this.selectedDateTzValue.next(selectedDateTz);\n this.show_tooltip = false;\n }\n\n public readonly registerOnChange = (fn: (_: DateTZ) => void) => this._onChange = fn;\n public readonly registerOnTouched = (fn: (_: DateTZ) => void) => this._onTouch = fn;\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /** Set the state of the tooltip to closed after delay */\n public closeDatePicker() {\n this._trigger.closeMenu();\n }\n\n /** Set the state of the tooltip to closed after delay */\n public openDatePicker() {\n this._trigger.openMenu();\n }\n}\n","import {\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n BaseDirective,\n DurationGroup,\n nearestDurationToInput,\n} from '@mckinsey-converge/base';\nimport {\n ControlValueAccessor,\n FormControl,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\nimport {\n BehaviorSubject,\n combineLatest\n} from 'rxjs';\n\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { map } from 'rxjs/operators'; \nimport {\n DEFAULT_DURATION,\n defaultDurationGroups,\n generateDurationOptionsFromGroups\n} from '../utils/time.utils';\nimport { MatSelect } from '@angular/material/select';\nimport { convertLocalTimestampToTimezonedDateTz, convertTimezonedTimestampToLocalDateTz, DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n@Component({\n selector: 'date-tz-duration-field',\n template: `\n
\n {{label}}\n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n
\n `,\n styleUrls: ['./date-tz-duration-field.component.css'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateTzDurationFieldComponent),\n multi: true\n }\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class DateTzDurationFieldComponent extends BaseDirective implements OnInit, ControlValueAccessor, OnChanges {\n @Input() public label?: string;\n @Input() public required: boolean;\n @Input() max_length?: number;\n\n // /** Whether form field is disabled */\n // @Input() public disabled: boolean;\n /** Start date value to count from */\n @Input() public startDateTz: DateTZ;\n /** Set to limit the duration options */\n @Input() public extended?: boolean;\n /** Whether form all_day is enabled. */\n // R-- need to address all_day that disables this input and displays \"Add Day for the value\"\n @Input() public all_day: boolean = false;\n\n /**\n * Specify the slice of durations to use when generating options.\n */\n @Input() public durationGroups: DurationGroup[] = defaultDurationGroups;\n\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n /** Select field for selecting the time */\n @ViewChild('select') private select_field: MatSelect;\n\n /** Component will return a number of minutes */\n public value = new BehaviorSubject(DEFAULT_DURATION);\n\n public currentStartDateTz = new BehaviorSubject(DateNow(new Date()));\n\n public filterFormControl: FormControl = new FormControl();\n\n public nearestStep = combineLatest([this.filterFormControl.valueChanges, this.currentStartDateTz]).pipe(\n \n map(([value, currentStartDate]) => { \n /**\n * convert current start date/time to building time zone first\n * \n */\n const ms = convertTimezonedTimestampToLocalDateTz(currentStartDate.ms, currentStartDate.building_tz).ms;\n return nearestDurationToInput(this.durationGroups, ms, value); \n }\n ));\n\n public options = new BehaviorSubject[]>([]);\n\n public placeHolderOption = this.options.pipe(\n map(options => options.find(o => o.value === DEFAULT_DURATION))\n );\n\n public selectedOption = combineLatest([this.options, this.value]).pipe(\n map(([options, value]) => options.find(o => o.value === value))\n );\n\n public isSelected(option: SelectOption) {\n return this.value.pipe(map(t => t === option.value));\n }\n\n public isDisabled(option: SelectOption) {\n return this.max_length ? option.value > this.max_length : false;\n }\n\n public get isOpen() {\n return this.select_field?.panelOpen ?? false;\n }\n\n ngOnInit(): void {\n this.subscription('OptionsCalculation',\n this.currentStartDateTz.pipe(\n map(d => generateDurationOptionsFromGroups(d, this.durationGroups, this.extended))\n ).subscribe(next => {\n this.options.next(next);\n }));\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.timezone) {\n const dopt = generateDurationOptionsFromGroups(this.currentStartDateTz.value, this.durationGroups, this.extended);\n this.options.next(dopt);\n }\n if (changes.startDateTz) {\n this.currentStartDateTz.next(changes.startDateTz.currentValue);\n }\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: number): void {\n this.writeValue(new_value);\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n writeValue(obj: number): void {\n this.value.next(obj);\n if (this._onChange) {\n this._onChange(obj);\n }\n }\n\n // public setDisabledState(disabled: boolean) {\n // this.disabled = disabled;\n // }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n}\n","import {\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { MatSelect } from '@angular/material/select';\n\nimport {\n BaseDirective,\n closestToTimeSlotTz,\n nearestStepToInput,\n timeWithGmtOffsetFormatString,\n} from '@mckinsey-converge/base';\n\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport {\n generateAvailableTimes,\n generateAvailableTimesTz,\n} from '../utils/time.utils';\nimport { BehaviorSubject, combineLatest } from 'rxjs';\nimport { filter, map, withLatestFrom } from 'rxjs/operators';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { DateTime } from 'luxon';\n\n@Component({\n selector: 'date-tz-time-field',\n template: `\n
\n {{\n label\n }}\n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n
\n `,\n styleUrls: ['./date-tz-time-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateTzTimeFieldComponent),\n multi: true,\n },\n ],\n encapsulation: ViewEncapsulation.None,\n})\nexport class DateTzTimeFieldComponent\n extends BaseDirective\n implements OnInit, OnChanges, ControlValueAccessor\n{\n @Input() public label?: string;\n @Input() public required: boolean;\n /** Time step between each allowed time option */\n @Input() public step = 15;\n /** Whether form field is disabled */\n // @Input() public disabled: boolean;\n /** Whether past times are allowed */\n @Input() public noPastTimes = true;\n /** Representing the DateTZ object datetime to start time options from **/\n @Input() public fromDateTz: DateTZ = DateNow(new Date());\n // Disables this input and displays R--- \"All Day\" for the value\n @Input() public all_day: boolean = false;\n @Input() public show_current: boolean = false;\n @Input() public startFromDateTz: boolean = false;\n\n /** Form control on change handler */\n private _onChange: (_: DateTZ) => void;\n /** Form control on touch handler */\n private _onTouch: (_: DateTZ) => void;\n\n /** Select field for selecting the time */\n @ViewChild('select') private select_field: MatSelect;\n /** DateTZ object representing the currently set datetime */\n public selectedDateTz = new BehaviorSubject(\n closestToTimeSlotTz(DateNow(new Date()), this.step)\n );\n\n /** string representing the currently set datetime display value, needed for the input to display the slected value */\n public selectedTimeString = new BehaviorSubject(\n timeWithGmtOffsetFormatString(this.selectedDateTz.value)\n );\n\n public filterFormControl: FormControl = new FormControl();\n\n /** Available time blocks for the selected date */\n public options = new BehaviorSubject[]>(\n generateAvailableTimesTz(\n DateNow(),\n !this.noPastTimes,\n this.step,\n this.timezone,\n this.all_day,\n this.show_current\n ? [generateOptionForDateTz(DateNow())]\n : [],\n this.startFromDateTz\n )\n );\n\n public ngOnInit(): void {\n // Generate the time input options for the booking date\n this.options.next(\n generateAvailableTimesTz(\n this.selectedDateTz.value,\n !this.noPastTimes,\n this.step,\n this.timezone,\n this.all_day,\n this.show_current\n ? [generateOptionForDateTz(this.selectedDateTz.value)]\n : [],\n this.startFromDateTz\n )\n );\n // Subscribe to selected option changes\n this.subscription(\n 'dateTimeChanges',\n combineLatest([this.selectedDateTz])\n .pipe(\n map(([selectedDateTz]) => {\n /**\n * The selectedDateTz should already be pegged to the closest time slot, but\n * if the selected time rolls into the past this can correct it. // R--- verify this statement\n */\n return closestToTimeSlotTz(selectedDateTz, this.step);\n }),\n withLatestFrom(this.options),\n filter(\n ([date, timeOptions]: [\n DateTZ,\n SelectOption[]\n ]) => {\n // if new time slot opened up when date / time changes, add it here.\n return !timeOptions.find(\n (t) => t.value === date.formatDate('HH:mm')\n );\n }\n ),\n map(([dateTz, timeOptions]) => {\n // TODO probably an issue here with going from a future date and time earlier than now back to day showing null\n // Push the current date option in\n timeOptions.push({\n display: timeWithGmtOffsetFormatString(dateTz),\n shortDisplay: dateTz.formatDate('hh:mma'),\n value: dateTz,\n });\n\n // Sort the time options\n timeOptions.sort((a, b) =>\n `${a.value}`.localeCompare(`${b.value}`)\n );\n return timeOptions;\n })\n )\n .subscribe((next) => {\n return this.options.next(next);\n })\n );\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (\n changes.no_past_times ||\n changes.step ||\n changes.fromDateTz ||\n changes.all_day\n ) {\n // If there's a new date value then update the time options\n this.options.next(\n generateAvailableTimesTz(\n this.selectedDateTz.value,\n !this.noPastTimes,\n this.step,\n this.timezone,\n this.all_day,\n this.show_current\n ? [generateOptionForDateTz(this.selectedDateTz.value)]\n : [],\n this.startFromDateTz\n )\n );\n // If today and all day goes from on to off the selected value isn't going to be available.\n if (\n changes.all_day &&\n !changes.all_day.currentValue &&\n changes.all_day.previousValue\n ) {\n this.setValue(this.options.value[0].display);\n }\n }\n }\n\n /**\n * Getter if the time picker options are visiable or not\n */\n public get isOpen() {\n return this.select_field?.panelOpen ?? false;\n }\n\n /**\n * Getter to return the current form timestamp from the from date object\n */\n public get timezone(): string {\n return this.fromDateTz.building_tz;\n }\n\n /**\n * A filter for finding a matching value when using the input text search\n */\n public nearestStep = combineLatest([\n this.filterFormControl.valueChanges,\n this.selectedDateTz,\n ]).pipe(\n map(([value, selectedDateTz]) => {\n return nearestStepToInput(\n this.step,\n value,\n DateTime.now().valueOf()\n );\n })\n );\n\n /**\n * Default text displayed in the search field when the component initializes\n */\n public placeHolderOption = this.options.pipe(\n map((os) => os.length > 0 && os[0])\n );\n\n /**\n * Returns the selected option object by matching the selectedDateTz formated string with the option.display string\n */\n public selectedOption = combineLatest([\n this.options,\n this.selectedDateTz,\n ]).pipe(\n map(([options, selectedDateTz]) =>\n options.find(\n (o) =>\n o.display === timeWithGmtOffsetFormatString(selectedDateTz)\n )\n )\n );\n\n /**\n * Determines the visually selected value when the options list is visible.\n *\n * @param option DateTZ\n * @returns boolean\n */\n public isSelected(option: SelectOption) {\n return this.selectedTimeString.value === option.display;\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: DateTZ) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: DateTZ) => void): void {\n this._onTouch = fn;\n }\n\n /**\n * Method just used in unit tests to test disabling the input\n * @param disabled\n */\n // public setDisabledState(disabled: boolean) {\n // this.disabled = disabled;\n // }\n\n /**\n * Update the selected values\n * @param dateTz the DateTz object for the new time\n */\n public setSelectedValues(dateTz: DateTZ) {\n // Update the selected DateTz and string representations\n this.selectedTimeString.next(timeWithGmtOffsetFormatString(dateTz));\n this.selectedDateTz.next(dateTz);\n if (this._onChange) {\n this._onChange(dateTz);\n }\n }\n\n /**\n * Update the form field value\n * @param displayString The \"display\" value of this.options set by the time picker\n */\n public setValue(displayString: string): void {\n // Convert the display time string to the actual option object via an array find.\n const newTimeTz = this.options.value.find(\n (opt) => opt.display === displayString\n ).value;\n // Update the selected DateTz and string representations\n this.setSelectedValues(newTimeTz);\n // Send the\n if (newTimeTz) {\n if (this._onChange) {\n this._onChange(newTimeTz);\n }\n }\n }\n\n /**\n * Fires when the form control value is changed\n * @param dateTz The new value for the component\n */\n public writeValue(dateTz: DateTZ | null) {\n // Init is null ?\n if (dateTz != null) {\n // Update the selected DateTz and string representations\n this.setSelectedValues(dateTz);\n // Update the available options\n this.options.next(\n generateAvailableTimesTz(\n dateTz,\n !this.noPastTimes,\n this.step,\n dateTz.building_tz,\n this.all_day,\n this.show_current\n ? [generateOptionForDateTz(dateTz)]\n : [],\n this.startFromDateTz\n )\n );\n }\n }\n}\n\nfunction generateOptionForDateTz(dateTz: DateTZ): SelectOption {\n return {\n display: timeWithGmtOffsetFormatString(dateTz),\n shortDisplay: dateTz.formatDate('hh:mma'),\n value: dateTz, \n }\n}\n","import {\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n BaseDirective,\n nearestDurationToInput,\n DurationGroup,\n} from '@mckinsey-converge/base';\nimport {\n ControlValueAccessor,\n FormControl,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\nimport {\n BehaviorSubject,\n combineLatest\n} from 'rxjs';\n\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport {\n map\n} from 'rxjs/operators';\nimport {\n DEFAULT_DURATION,\n defaultDurationGroups,\n generateDurationOptionsFromGroups\n} from '../utils/time.utils';\nimport { MatSelect } from '@angular/material/select';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n@Component({\n selector: 'mck-duration-field',\n template: `\n
\n {{label}}\n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n
\n `,\n styleUrls: ['./duration-field.component.css'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DurationFieldComponent),\n multi: true\n }\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class DurationFieldComponent extends BaseDirective implements OnInit, ControlValueAccessor, OnChanges {\n @Input()\n public label: string;\n @Input()\n public required: boolean;\n @Input() max_length?: number;\n\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Start date value to count from */\n @Input() public startDate: number;\n /** Set to limit the duration options */\n @Input() public extended?: boolean;\n /** Representing desired timezone **/\n @Input() public timezone?: string = new DateTZ({ date: Date.now() }).local_tz;\n\n /**\n * Specify the slice of durations to use when generating options.\n */\n @Input() public durationGroups: DurationGroup[] = defaultDurationGroups;\n\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n /** Select field for selecting the time */\n @ViewChild('select') private select_field: MatSelect;\n\n public value = new BehaviorSubject(DEFAULT_DURATION);\n\n public currentStartDate = new BehaviorSubject(DateNow(new Date()));\n\n public filterFormControl: FormControl = new FormControl();\n\n public nearestStep = combineLatest([this.filterFormControl.valueChanges, this.currentStartDate]).pipe(\n map(([value, currentStartDate]) => nearestDurationToInput(this.durationGroups, currentStartDate.ms, value)\n ));\n\n public options = new BehaviorSubject[]>([]);\n\n public placeHolderOption = this.options.pipe(\n map(options => options.find(o => o.value === DEFAULT_DURATION))\n );\n\n public selectedOption = combineLatest([this.options, this.value]).pipe(\n map(([options, value]) => options.find(o => o.value === value))\n );\n\n public isSelected(option: SelectOption) {\n return this.value.pipe(map(t => t === option.value));\n }\n\n public isDisabled(option: SelectOption) {\n return this.max_length ? option.value > this.max_length : false;\n }\n\n public get isOpen() {\n return this.select_field?.panelOpen ?? false;\n }\n\n ngOnInit(): void {\n this.subscription('OptionsCalculation',\n this.currentStartDate.pipe(\n map(d => generateDurationOptionsFromGroups(d.toZone(this.timezone), this.durationGroups, this.extended))\n ).subscribe(next => {\n this.options.next(next);\n }));\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.timezone) {\n const dopt = generateDurationOptionsFromGroups(this.currentStartDate.value.toZone(this.timezone), this.durationGroups, this.extended);\n this.options.next(dopt);\n }\n if (changes.startDate) {\n // R--- refactor input param\n const date = new DateTZ({date: this.startDate})\n this.currentStartDate.next(date);\n }\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: number): void {\n this.writeValue(new_value);\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n writeValue(obj: number): void {\n this.value.next(obj);\n if (this._onChange) {\n this._onChange(obj);\n }\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'mck-error-message',\n template: `\n
\n
\n
\n \n \n \n
\n
\n `,\n styleUrls: ['./error-message.component.scss']\n})\nexport class ErrorMessageComponent {\n\n constructor() {\n }\n\n}\n","import {\n Component,\n Input,\n ViewContainerRef\n} from '@angular/core';\nimport { BaseTemplateComponent } from '../../base-template.component';\n\n@Component({\n selector: 'mck-calendar-icon',\n template: `\n \n \n \n \n \n `,\n})\nexport class CalendarIconComponent extends BaseTemplateComponent {\n\n @Input()\n fillClass?: string;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n}\n","import {\n Component,\n Input,\n ViewContainerRef\n} from '@angular/core';\nimport { BaseTemplateComponent } from '../../base-template.component';\n\n@Component({\n selector: 'mck-chevron-icon',\n template: `\n \n \n
\n \n \n \n
\n
\n \n
\n `\n})\nexport class ChevronIconComponent extends BaseTemplateComponent {\n\n @Input()\n fillClass?: string;\n\n @Input()\n up?: boolean;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n}\n","import {\n Component,\n Input,\n OnInit\n} from '@angular/core';\n\n@Component({\n selector: 'mck-close-icon',\n template: `\n \n \n \n \n `\n})\nexport class CloseIconComponent implements OnInit {\n\n @Input()\n fillClass?: string;\n\n constructor() {\n }\n\n ngOnInit(): void {\n }\n\n}\n","import {\n Component,\n Input,\n ViewContainerRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { BaseTemplateComponent } from '../base-template.component';\n\n@Component(\n {\n selector: 'mck-informational-image',\n template: `\n \n
\n
\n
\n \n
\n
\n
\n
\n `,\n styleUrls: ['./informational-image.component.scss'],\n encapsulation: ViewEncapsulation.None\n }\n)\nexport class InformationalImageComponent extends BaseTemplateComponent {\n\n @Input()\n public src: string;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n}\n","import {\n Component,\n Input,\n OnInit,\n ViewContainerRef\n} from '@angular/core';\nimport { BaseTemplateComponent } from '../base-template.component';\n\n@Component({\n selector: 'mck-label',\n template: `\n \n \n \n *\n \n \n `,\n styleUrls: ['./label.component.scss']\n})\nexport class LabelComponent extends BaseTemplateComponent implements OnInit {\n\n @Input()\n required = false;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n\n}\n","import {\n Component,\n Input,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { MatSelect } from '@angular/material/select';\nimport { SelectOption } from '../options/select-option';\n\n@Component({\n selector: 'mck-legend-dropdown',\n template: `\n
\n \n \n \n \n
\n \n \n \n {{ buildPlaceholder() }}\n \n
\n \n
\n \n
\n `,\n styleUrls: ['./legend-dropdown.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class LegendDropdownComponent {\n\n @Input()\n public placeholder: string;\n\n @Input()\n public options: SelectOption[] = [];\n\n @Input()\n public placeholderOpen?: string\n\n /** Select field for selecting the value */\n @ViewChild('select') private select_field: MatSelect;\n\n public get isOpen() {\n return this.select_field?.panelOpen ?? false;\n }\n\n public buildPlaceholder(){\n return this.isOpen && this.placeholderOpen ? this.placeholderOpen : this.placeholder\n }\n}\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n ViewChild,\n OnInit\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\n\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport {\n BehaviorSubject,\n Observable\n} from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { AcaDatePickerComponent } from '../aca-date-picker/aca-date-picker.component';\n\n@Component({\n selector: 'mck-date-picker',\n template: `\n \n Date\n \n
{{ dateString | async }}
\n
\n \n
\n \n \n \n
\n \n Today\n \n
\n
\n \n `,\n styleUrls: ['./mck-date-picker.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MckDatePickerComponent),\n multi: true\n }\n ]\n})\nexport class MckDatePickerComponent extends BaseDirective implements OnInit, ControlValueAccessor {\n /** Earliest date available the user is allowed to pick */\n @Input('from') public _from: number = DateNow(new Date()).ms;\n /** Latest date available the user is allowed to pick */\n @Input('to') public _to: number;\n /** Position of the tooltip */\n @Input() public position: 'right' | 'left' = 'right';\n /** Offset of the tooltip */\n @Input() public offset: 'top' | 'bottom' = 'bottom';\n /** Whether form control is disabled */\n @Input() public disabled: boolean;\n /** Whether to show the calendar tooltip */\n @Input() public icon_only: boolean = false;\n\n @Input() public initialDateSelection?: number;\n\n @Input() public invalid?: boolean;\n\n @Output() public onSelect = new EventEmitter();\n\n // R--- or is this the date picker to refactor. too tired.\n public ngOnInit(): void {\n if (this.initialDateSelection) {\n this.writeValue(this.initialDateSelection)\n }\n }\n\n /** Whether to show the calendar tooltip */\n public show_tooltip: boolean;\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n @ViewChild(MatMenuTrigger, { static: true }) private _trigger: MatMenuTrigger;\n @ViewChild(AcaDatePickerComponent, {static: true }) private _acaDatePicker: AcaDatePickerComponent;\n\n /** Currently selected date */\n public dateValue = new BehaviorSubject(DateNow(new Date()));\n\n /** First allowed date on the calendar */\n public get from(): number {\n return this._from || DateNow(new Date()).startOfValue('day').ms;\n }\n\n /** Current date value */\n public get until(): number {\n return this._to || DateNow(new Date()).endOfValue('day').addValue({ years: 1 }).ms;\n }\n\n /** Display value for the current date */\n public get dateString(): Observable {\n return this.dateValue.pipe(map(d => {\n const display = d.formatDate('ccc dd MMM yyyy');\n return `${display}${d.isSameDate(DateNow(new Date()), 'day') ? ' (Today)' : ''}`;\n }));\n }\n\n /** Whether date picker is open */\n public get is_open(): boolean {\n return this._trigger.menuOpen;\n }\n\n public get date(): Observable {\n return this.dateValue;\n\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: number) {\n // Keep hours and minutes of the old date\n const old_date = this.dateValue.value;\n const d = new DateTZ({date: new_value})\n let new_date = d\n .setValue({ hour: old_date.dateHour, minute: old_date.minutes })\n .ms;\n // Check that new date is before from\n if (new_date < this.from) {\n new_date = this.from;\n }\n const new_d = new DateTZ({ date: new_date })\n this.dateValue.next(new_d);\n if (this._onChange) {\n this._onChange(new_date);\n }\n this.onSelect.emit(new_date);\n this.show_tooltip = false;\n }\n\n public goToToday() {\n this.setValue(DateNow(new Date()).ms);\n }\n\n public resetToLastSelection = () => this._acaDatePicker.updateDate();\n\n public onDatePickerClose() {\n this.resetToLastSelection();\n }\n\n /* istanbul ignore next */\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: number) {\n const date = new DateTZ({date: value})\n this.dateValue.next(date);\n this.show_tooltip = false;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /** Set the state of the tooltip to closed after delay */\n public closeDatePicker() {\n this._trigger.closeMenu();\n }\n\n /** Set the state of the tooltip to closed after delay */\n public openDatePicker() {\n this._trigger.openMenu();\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n ViewContainerRef\n} from '@angular/core';\nimport { BaseTemplateComponent } from '../base-template.component';\n\n@Component({\n selector: 'mck-modal-button-row',\n template: `\n \n \n \n \n
\n \n {{secondaryLabel}}\n \n \n {{primaryLabel}}\n\n \n
\n \n
\n `,\n styleUrls: ['./modal-button-row.component.scss']\n})\nexport class ModalButtonRowComponent extends BaseTemplateComponent {\n\n @Input()\n primaryLabel?: string;\n\n /**\n * Specify if you want to disable the primary button\n */\n @Input()\n primaryDisabled?: boolean = false;\n\n /**\n * Used only if primaryLabel is specified.\n */\n @Output()\n public primarySubmit = new EventEmitter();\n\n /**\n * Specify if you want to show a secondary label button\n */\n @Input()\n secondaryLabel?: string;\n\n @Input()\n disableFixed: boolean = false;\n\n /**\n * Specify if you want to disable the secondary button\n */\n @Input()\n secondaryDisabled?: boolean = false;\n\n /**\n * Used only if secondaryLabel is specified.\n */\n @Output()\n public secondarySubmit = new EventEmitter();\n\n @Input()\n smallButtons?: boolean = false;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n\n}\n","import {\n Component,\n Input\n} from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'mck-modal',\n template: `\n \n
\n
\n \n
\n
\n

{{header}}

\n
\n
\n \n
\n `,\n styleUrls: ['./modal.component.scss']\n})\nexport class ModalComponent {\n\n @Input()\n header?: string;\n @Input() shouldClose?: boolean = true;\n\n constructor(private dialogRef: MatDialogRef) {\n }\n\n public close() {\n this.dialogRef.close();\n }\n}\n","import { Component, EventEmitter, Inject, OnInit, Output } from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { DialogEvent } from '@mckinsey-converge/base';\nimport { DateTZ, isToday } from '@mckinsey-converge/date-tz';\n\n\n@Component({\n selector: 'override-changes-modal',\n templateUrl: './override-changes-modal.component.html',\n styleUrls: ['./override-changes-modal.component.scss']\n})\nexport class OverrideChangesModalComponent implements OnInit{\n\n public edits;\n public timezone;\n\n @Output() public event = new EventEmitter();\n\n constructor(@Inject(MAT_DIALOG_DATA) private _data: OverrideChangesModalComponent){\n\n }\n\n public ngOnInit(){\n // this.edits = this._data.edits.sort((a, b) => a - b);\n\n // Function to convert epoch to 'YYYY-MM-DD' format\n const getDateString = (epoch) => {\n return new Date(epoch * 1000).toISOString().split('T')[0];\n };\n\n // Set to store unique date strings\n const uniqueDates = new Set();\n\n // Filter the edits array\n const filteredEdits = this._data.edits.filter(epoch => {\n const dateString = getDateString(epoch);\n if (!uniqueDates.has(dateString)) {\n uniqueDates.add(dateString);\n return true;\n }\n return false;\n });\n\n this.edits = filteredEdits;\n }\n\n public formatDate(date: number) {\n const dateTZ = new DateTZ({date: date*1000, is_local_tz: false, building_tz: this._data.timezone });\n const dateIsToday = isToday(dateTZ, this._data.timezone);\n const display = dateTZ.formatDate('ccc dd MMM yyyy');\n return `${display}${dateIsToday ? ' (Today)' : ''}`;\n }\n\n public continue(): void {\n this.event.emit({ reason: 'done' });\n }\n\n public close(): void {\n this.event.emit({ reason: 'close' });\n }\n}","
\n \n \n
\n\n \n \n \n\n

Overriding Changes

\n

Editing the series here will override all previous changes made to individual occurrences. Are you sure you want to proceed?

\n\n \n \n \n \n \n \n \n \n \n \n \n
Dates
{{formatDate(edit)}}
\n
\n\n\n \n \n","import {\n Pipe,\n PipeTransform\n} from '@angular/core';\n\n/**\n * Transforms input by returning a subset of items based on if the\n * any items include the search text based on passed objectKey.\n *\n * objectKey can be pipe separated keys. e.g: 'name|age'. Then it will check against all.\n */\n@Pipe({\n name: 'filter'\n})\nexport class FilterPipe implements PipeTransform {\n transform(items: any[], searchText: string, objectKey?: string): any[] {\n if (!items) return [];\n if (!searchText) return items;\n searchText = searchText.toLowerCase();\n const splitKeys = objectKey?.split('|') ?? [];\n return items.filter(it => {\n let included = false;\n splitKeys.forEach((key) => {\n if (it[key]?.toLowerCase().includes(searchText)) {\n included = true;\n }\n });\n if (splitKeys.length === 0) {\n return it.toLowerCase().includes(searchText);\n }\n return included;\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport {\n DomSanitizer,\n SafeHtml,\n SafeResourceUrl,\n SafeScript,\n SafeStyle,\n} from '@angular/platform-browser';\n\nexport enum SecurityContext {\n NONE = 0,\n HTML = 1,\n STYLE = 2,\n SCRIPT = 3,\n URL = 4,\n RESOURCE_URL = 5,\n}\n\n@Pipe({\n name: 'sanitize',\n})\nexport class SanitizePipe implements PipeTransform {\n constructor(private sanitizer: DomSanitizer) {}\n\n transform(\n value: string,\n type: 'resource' | 'url' | 'script' | 'style' | 'html' = 'html'\n ): SafeHtml | SafeResourceUrl | SafeScript | SafeStyle {\n switch (type) {\n case 'resource':\n return (\n this.sanitizer.sanitize(\n SecurityContext.RESOURCE_URL,\n value\n ) || ''\n );\n case 'url':\n return (\n this.sanitizer.sanitize(SecurityContext.URL, value) || ''\n );\n case 'script':\n return (\n this.sanitizer.sanitize(SecurityContext.SCRIPT, value) || ''\n );\n case 'style':\n return (\n this.sanitizer.sanitize(SecurityContext.STYLE, value) || ''\n );\n }\n return this.sanitizer.sanitize(SecurityContext.HTML, value) || '';\n }\n}\n","import {\n Component,\n forwardRef,\n Input,\n OnInit,\n ViewContainerRef\n} from '@angular/core';\nimport { SelectOption } from '../types';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\nimport { BaseTemplateComponent } from '../base-template.component';\nimport { BehaviorSubject } from 'rxjs';\n\n@Component({\n selector: 'mck-radio-select',\n template: `\n \n
\n {{label}}\n \n {{option.display}}\n \n
\n
\n `,\n styleUrls: ['./radio-select.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RadioSelectComponent),\n multi: true\n }\n ]\n})\nexport class RadioSelectComponent extends BaseTemplateComponent implements OnInit, ControlValueAccessor {\n\n @Input()\n label: string;\n\n @Input()\n required?: boolean;\n\n @Input()\n options: SelectOption[];\n\n public value = new BehaviorSubject | undefined>(undefined);\n\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Form control on change handler */\n private _onChange: (_: SelectOption) => void;\n /** Form control on touch handler */\n private _onTouch: (_: SelectOption) => void;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouch = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public setValue(value: string) {\n const obj = this.options.find(o => o.value === value);\n this.writeValue(obj);\n if (this._onChange) {\n this._onChange(obj)\n }\n }\n\n writeValue(obj: SelectOption): void {\n this.value.next(obj);\n }\n}\n","import { Component, Input, OnInit, ViewChild } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\nimport { OrganisationService, RecurrencePeriod, RecurrenceType, removeExpiredOcurrences, RepeatsOn } from \"@mckinsey-converge/data-common\";\nimport { DateTZ } from \"@mckinsey-converge/date-tz\";\nimport { first } from \"rxjs/operators\";\nimport { RecurrencePatternForm } from \"../recurrence-pattern-form/recurrence-pattern-form.component\";\n\n@Component({\n selector: 'recurrence-booking-form',\n templateUrl: './recurrence-booking-form.component.html',\n styleUrls: ['./recurrence-booking-form.component.scss']\n})\n\nexport class RecurringBookingForm implements OnInit {\n /** Form fields for booking */\n @Input() public form: FormGroup;\n\n public current_type: RecurrenceType; \n public recurrence_types: Array = [\n {type: RepeatsOn.PATTERN, label: 'Repeats on'},\n {type: RepeatsOn.DATE, label: 'Repeats on specific date'}\n ]\n\n public building_tz = \"\";\n\n @ViewChild(RecurrencePatternForm) pattern_form: RecurrencePatternForm;\n\n constructor(\n private _org: OrganisationService,\n ) {}\n\n public get recurrencePeriod(){\n return this.form.get('recurrence_period')\n }\n\n public ngOnInit(): void {\n this._org.initialised.pipe(first((_) => _)).subscribe(() => {\n this.building_tz = this._org?.building?.timezone || 'America/Chicago';\n })\n if(this.recurrencePeriod.value === RecurrencePeriod.LIST){\n this.current_type = this.recurrence_types[1];\n removeExpiredOcurrences(this.form)\n }else{\n this.current_type = this.recurrence_types[0];\n }\n }\n\n public onChangeType(value: string) {\n this.current_type = this.recurrence_types.filter((type) => type.type === value)[0]\n if(this.current_type.type === RepeatsOn.PATTERN){\n this.recurrencePeriod.setValue(this.pattern_form.recurrencePatternFormControl.value)\n }else{\n this.recurrencePeriod.setValue(RecurrencePeriod.LIST)\n }\n }\n\n public dateToBuildingTz(date?: number){\n return new DateTZ({date, building_tz: this.building_tz, is_local_tz: false})\n }\n\n public get error(){\n const recurrence_starts = this.form.controls.recurrence_starts\n const recurrence_days = this.form.controls.recurrence_days\n return recurrence_starts.invalid || recurrence_days.invalid\n }\n\n}\n","
\n \n
\n \n \n {{recurrence_types[0].label}}\n \n \n \n
\n
\n \n \n {{recurrence_types[1].label}}\n \n \n \n
\n
\n
\nThe recurrence pattern is not valid.","import { Component, Input, OnInit, ViewChild } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\nimport { MatMenuTrigger } from \"@angular/material/menu\";\nimport { BaseDirective, closestToTimeSlotTz } from \"@mckinsey-converge/base\";\nimport { OrganisationService } from \"@mckinsey-converge/data-common\";\nimport { DateNow, DateTZ,toMiddayUTC } from \"@mckinsey-converge/date-tz\";\n\n@Component({\n selector: 'recurrence-date-form',\n templateUrl: './recurrence-date-form.component.html',\n styleUrls: ['./recurrence-date-form.component.scss']\n})\n\nexport class RecurrenceDateForm extends BaseDirective implements OnInit {\n /** Form fields for booking */\n @Input() public form: FormGroup;\n @Input() disabled: boolean;\n @ViewChild(MatMenuTrigger, { static: true }) private _trigger: MatMenuTrigger;\n\n public selected_dates: Array = []\n public timezone: string = '';\n public nowTz: DateTZ = DateNow(new Date());\n public fromDateTz: DateTZ = this.nowTz.clone();\n public untilDateTz: DateTZ = this.fromDateTz.endOfValue('day').addValue({ years: 1 });\n public dateTz: DateTZ = DateNow(new Date());\n\n public get recurrenceStarts(){\n return this.form.get('recurrence_starts');\n }\n\n public get formDateTz(){\n return this.form.get('dateTz');\n }\n\n constructor (private _org: OrganisationService) {\n super();\n }\n\n public ngOnInit(): void {\n // Setup some data to only run once, the previous giters were hogs\n this.timezone = this.form.get('timezone').value;\n this.nowTz = new DateTZ({ date: Date.now(), is_local_tz: false, building_tz: this.timezone });\n // R--- The fromDateTz is curious, would it make sense to be based on the form dateTz?\n this.fromDateTz = this.nowTz.clone()\n this.untilDateTz = this.fromDateTz.endOfValue('day').addValue({ years: 1 });\n\n if(this.recurrenceStarts.value){\n const tempForSort = [...this.recurrenceStarts.value]; // due to cannot assign to read only property '0' of object '[object Array]'\n this.selected_dates = tempForSort.sort((d1: DateTZ, d2: DateTZ) => d1.ms - d2.ms);\n }\n this.subscription('ocurrenceChanges', this.recurrenceStarts.valueChanges\n .subscribe(() => {\n this.selected_dates = [...this.recurrenceStarts.value]\n })\n ); \n }\n\n /**\n * Add value to the list of selected dates\n * @param newDateTz\n */\n public addDate(newDateTz: DateTZ) {\n const d = newDateTz.clone();\n const start_date = this.formDateTz.value;\n let new_date = d.setValue({hour: start_date.dateHour, minute: start_date.minutes})\n \n /** Prevent user from selecting past dates */\n if (new_date.isBeforeDate(this.fromDateTz)) {\n new_date = this.fromDateTz;\n }\n\n /** Prevent user from selecting the same date more than once */\n const is_selected = this.selected_dates.filter((date: DateTZ)=> new_date.isSameDate(date, 'day'))\n if(is_selected.length){\n return\n }\n \n this.selected_dates.push(new_date);\n this.recurrenceStarts.setValue(this.selected_dates.sort((d1, d2) => d1.ms - d2.ms));\n this.setDateTzForm();\n }\n\n /**\n * \n * @param dateMsValue: number\n * @returns \n */\n public setPickerToGivenDate(dateTsValue: DateTZ) {\n this.fromDateTz = dateTsValue.clone();\n }\n\n /**\n * Function calls on close of date picker without date selection\n */\n public onDatePickerClose = () => {\n this.setPickerToGivenDate(this.nowTz)\n };\n\n public goToToday() {\n this.addDate(this.nowTz);\n this.setPickerToGivenDate(this.nowTz);\n }\n\n public closeDatePicker() {\n this._trigger.closeMenu();\n }\n\n public openDatePicker() {\n this._trigger.openMenu();\n }\n\n public deleteDate(date: DateTZ) {\n const index = this.selected_dates.map((d: DateTZ) => d.ms).indexOf(date.ms)\n this.selected_dates.splice(index, 1)\n this.recurrenceStarts.setValue(this.selected_dates)\n this.setDateTzForm()\n }\n\n public isToday(date) {\n return new DateTZ({\n date: toMiddayUTC(date).ms,\n is_local_tz: false,\n building_tz: this.timezone,\n }).isSameDate(\n new DateTZ({\n date: Date.now(),\n is_local_tz: false,\n building_tz: this.timezone,\n }),\n 'day'\n );\n }\n\n public formatDate(date: DateTZ){\n const isToday = this.isToday(date);\n const display = date.formatDate('ccc dd MMM yyyy');\n\n return `${display}${isToday ? ' (Today)' : ''}`;\n }\n\n private setDateTzForm(): void {\n if (this.selected_dates.length === 0)\n return;\n\n const tz = this._org.building.timezone;\n const date_now = DateNow(new Date()).toZone(tz);\n let dateTz = this.selected_dates[0].clone();\n\n dateTz = dateTz.setValue({\n hour: (this.formDateTz.value as DateTZ).hours,\n minute: (this.formDateTz.value as DateTZ).minutes\n });\n\n if (this.selected_dates[0].isSameDate(this.nowTz, \"day\") && dateTz.hours < date_now.hours) {\n const { minutes: minute, hours: hour } = closestToTimeSlotTz(this.nowTz, 15);\n dateTz = dateTz.setValue({ minute, hour, second: 0 });\n }\n\n this.formDateTz.setValue(dateTz);\n }\n}\n","
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
DateAction
{{formatDate(date)}}Delete
\n
[+] Add another date
\n \n
\n \n Today\n \n
\n
\n
\n
","import { Component, Input, OnInit } from \"@angular/core\";\nimport { FormGroup, Validators } from \"@angular/forms\";\nimport { BaseDirective, closestToTimeSlotTz } from \"@mckinsey-converge/base\";\nimport { arrayWithValues, generateWeekDays, RecurrencePeriod, recurrencePeriodToDurationType, RepeatPeriod, validDateTZ, WeekDays } from \"@mckinsey-converge/data-common\";\nimport { DateNow, DateTZ } from \"@mckinsey-converge/date-tz\";\n\n@Component({\n selector: 'recurrence-pattern-form',\n templateUrl: './recurrence-pattern-form.component.html',\n styleUrls: ['./recurrence-pattern-form.component.scss']\n})\n\nexport class RecurrencePatternForm extends BaseDirective implements OnInit {\n /** Form fields for booking */\n @Input() public form: FormGroup;\n @Input() disabled: boolean;\n\n /** Range of dates for the Start Date Picker*/\n public nowTz: DateTZ = DateNow(new Date());\n public fromStartTz: DateTZ = this.nowTz.setValue({ minute: Math.ceil(this.nowTz.minutes / 5) * 5 });\n public untilTz: DateTZ = this.nowTz.addValue({ years: 1 }).endOfValue('day');\n public timezone: string = '';\n \n\n /** Range of dates for the End Date Picker*/\n public fromEndTz: DateTZ;\n\n public repeat_period_options: Array = [\n {label: 'Day', id: RecurrencePeriod.DAILY},\n {label: 'Week',id: RecurrencePeriod.WEEKLY},\n {label: 'Month', id: RecurrencePeriod.ABSOLUTE_MONTHLY}\n ]\n public week_days: Array = []\n\n public repeat_every_options\n\n\n public get recurrenceDateStartTzFormControl() {\n return this.form.get('dateTz')\n }\n\n public get recurrenceEndFormControl(){\n return this.form.get('recurrence_endTz')\n }\n\n public get recurrencePeriodFormControl(){\n return this.form.get('recurrence_period')\n }\n\n public get recurrenceIntervalFormControl(){\n return this.form.get('recurrence_interval')\n }\n\n public get recurrencePatternFormControl(){\n return this.form.get('recurrence_pattern')\n }\n\n public get recurrenceDaysFormControl(){\n return this.form.get('recurrence_days')\n }\n\n public ngOnInit(): void {\n // Setup some data to only run once, the previous giters were hogs\n this.timezone = this.form.get('timezone').value;\n this.nowTz = new DateTZ({ date: Date.now(), is_local_tz: false, building_tz: this.timezone });\n // R--- The from date is curious, why isn't it based on the form dateTz?\n this.repeat_every_options = new Array(1)\n this.fromStartTz = closestToTimeSlotTz(this.nowTz, 15)\n this.untilTz = this.nowTz.addValue({ years: 1 }).endOfValue('day');\n this.fromEndTz = this.fromStartTz.addValue({days: 1})\n\n this.setEndDateFromStartDate(this.recurrenceDateStartTzFormControl.value) //make sure end date is after start date\n\n if(!this.recurrencePeriodFormControl.value){\n this.recurrencePeriodFormControl.setValue(RecurrencePeriod.WEEKLY)\n }\n\n if(this.recurrencePeriodFormControl.value !== RecurrencePeriod.LIST){\n this.recurrencePatternFormControl.setValue(this.recurrencePeriodFormControl.value)\n }\n\n this.week_days = generateWeekDays(this.recurrenceDateStartTzFormControl.value.ms, { building_tz: this.fromStartTz.building_tz })\n this.generateMaxIntervals()\n\n if(this.recurrenceDaysFormControl.value.length > 0){\n this.week_days = this.week_days.map((day) => \n ({...day, active: this.recurrenceDaysFormControl.value.includes(day.full_name)})\n )\n }\n\n if(!this.recurrenceDaysFormControl.value.length && this.recurrencePeriodFormControl.value === RecurrencePeriod.WEEKLY){\n const current_days = this.week_days.filter((day) => day.active).map((day)=>day.full_name)\n this.recurrenceDaysFormControl.setValue(current_days)\n }\n\n this.generateOcurrenceList()\n\n this.subscription('startTimeChanges', this.recurrenceDateStartTzFormControl.valueChanges\n .subscribe((next) => {\n this.setEndDateFromStartDate(next) \n })\n );\n\n this.subscription('endTimeChanges', this.recurrenceEndFormControl.valueChanges\n .subscribe(() => {\n this.generateMaxIntervals();\n })\n );\n \n this.subscription('recurrencePeriodFormControlChanges', this.recurrencePeriodFormControl.valueChanges\n .subscribe(() => {\n this.generateMaxIntervals();\n })\n ); \n }\n\n public setEndDateFromStartDate(startDateTz: DateTZ){\n let end_date = this.recurrenceEndFormControl.value.setValue({hour: startDateTz.dateHour, minute: startDateTz.minutes})\n\n /**Update the End date picker range */\n this.fromEndTz = startDateTz.isSameDate(this.untilTz,'day') ? startDateTz : startDateTz.addValue({days: 1})\n\n if(end_date.isBeforeDate(this.fromEndTz)){\n end_date = this.fromEndTz\n }\n\n this.recurrenceEndFormControl.setValue(end_date)\n\n this.generateMaxIntervals()\n this.updateActiveWeekday() \n }\n\n public setRepeatPeriod(value: RecurrencePeriod){\n this.updateValidators(value)\n this.recurrencePeriodFormControl.setValue(value);\n this.recurrencePatternFormControl.setValue(value);\n this.recurrenceIntervalFormControl.setValue(1)\n this.generateOcurrenceList();\n }\n\n public setRepeatEvery(value: number){\n this.recurrenceIntervalFormControl.setValue(value)\n this.generateOcurrenceList()\n }\n\n public repeatTimeString(value: string){\n return this.recurrenceIntervalFormControl.value !== 1 ? `${value}(s)` : value\n }\n\n public get displayWeekdays(){\n return this.recurrencePatternFormControl.value === RecurrencePeriod.WEEKLY\n }\n\n /* Check if selected interval is valid and reset to 1 if not*/\n private validateRecurrenceInterval = () => {\n if(this.repeat_every_options.length < this.recurrenceIntervalFormControl.value){\n this.recurrenceIntervalFormControl.setValue(1)\n } \n };\n\n /**\n * Generate max value for dorpdown interval\n */\n public generateMaxIntervals(){\n const start = this.recurrenceDateStartTzFormControl.value;\n const date_diff = this.recurrenceEndFormControl.value.dateDiff(start, this.periodToDurationType, this.periodToDurationType)\n //If no diff default to 1\n this.repeat_every_options = new Array(Math.round(date_diff) || 1)\n this.validateRecurrenceInterval();\n if(this.recurrencePeriodFormControl.value !== RecurrencePeriod.LIST){\n this.generateOcurrenceList()\n }\n }\n\n /**\n * Generate ocurrence list base on the selected interval\n */\n public generateOcurrenceList() {\n\n /**If selected period is list then we don't want \n * to generate a list based on the repeats on selections*/\n if(this.recurrencePeriodFormControl.value === RecurrencePeriod.LIST){\n return\n }\n\n const occurrence = []\n const first_date = this.recurrenceDateStartTzFormControl.value;\n let start = first_date\n const end = this.recurrenceEndFormControl.value;\n const interval = this.recurrenceIntervalFormControl.value\n const recurr_days = this.week_days.filter(day => day.active)\n /**\n * isLastDayOfMonth : Boolean\n * flag - to generate last day of every month in case of day or month reccuring booking if start date is last day of month\n */\n // const isLastDayOfMonth = first_date.date.day === first_date.date.daysInMonth && this.recurrencePeriodFormControl.value === RecurrencePeriod.ABSOLUTE_MONTHLY;\n const isLastDayOfMonth = first_date.dateDay === 31 && this.recurrencePeriodFormControl.value === RecurrencePeriod.ABSOLUTE_MONTHLY ;\n \n if(this.recurrencePeriodFormControl.value === RecurrencePeriod.WEEKLY){\n start = start.startOfValue('week')\n }\n\n while (end.dateDiff(start.startOfValue('day'), this.periodToDurationType, this.periodToDurationType) >= 0) {\n \n if(this.recurrencePeriodFormControl.value !== RecurrencePeriod.WEEKLY){\n occurrence.push(start) \n start = start.addValue({[this.periodToDurationType]: interval}, isLastDayOfMonth);\n /**\n * IF - should only consider resetting start under mentioned condition of ticket - https://acaprojects.atlassian.net/browse/MCK-2085\n * In summery - If user select any date except 31st, other months in the series (no matter 30 or 31 day month) should have same date select as start date.\n * If user select 31st as an start date, other month in the seleries should have select last day of the month (30th/31st/28th/29th).\n * Exception for February - February should select 28th or 29th If in above both selection includes date between 28th - 31st.\n * \n */\n if(start.dateDay !== first_date.dateDay && start.dateDay !== start.date.daysInMonth && this.recurrencePeriodFormControl.value === RecurrencePeriod.ABSOLUTE_MONTHLY) {\n start = start.setValue({day: first_date.dateDay});\n } \n }else {\n recurr_days.forEach((day)=>{\n const date = start.addValue({days: day.day_index})\n if((date.isAfterDate(first_date) || date.isSameDate(first_date, 'day')) && \n (date.isBeforeDate(end) || date.isSameDate(end, 'day'))){\n occurrence.push(date)\n }\n })\n start = start.addValue({[this.periodToDurationType]: interval})\n }\n }\n\n this.form.controls.recurrence_count.setValue(occurrence.length)\n this.form.controls.recurrence_starts.setValue(occurrence.sort((d1, d2) => d1.ms - d2.ms))\n \n }\n\n public get periodToDurationType(){\n const period = this.recurrencePeriodFormControl.value\n return recurrencePeriodToDurationType(period)\n }\n\n /**\n * Update active weekday in the weekdays array\n */\n private updateActiveWeekday() {\n const _week_days = this.week_days.map((day)=>{\n if(this.recurrenceDaysFormControl.value.includes(day.full_name)){\n return {...day, active: true}\n }else{\n return {...day, active: false}\n }\n })\n this.week_days = [..._week_days] \n }\n\n public setWeekDays(new_day: WeekDays){\n const days = this.recurrenceDaysFormControl.value\n if(this.disabled){\n return\n }\n\n if(!new_day.active){\n days.push(new_day.full_name)\n }else{\n const current_index = days.indexOf(new_day.full_name)\n days.splice(current_index,1)\n }\n this.recurrenceDaysFormControl.setValue([...days])\n this.updateActiveWeekday()\n this.generateOcurrenceList()\n }\n\n /**Update the recurrence days validator if period changes */\n public updateValidators(value: RecurrencePeriod){\n if(value === RecurrencePeriod.WEEKLY && this.recurrencePeriodFormControl.value !== RecurrencePeriod.WEEKLY){\n const arrayValidators = [Validators.required];\n arrayValidators.push(arrayWithValues);\n this.recurrenceDaysFormControl.setValidators(arrayValidators);\n this.recurrenceDaysFormControl.updateValueAndValidity();\n }else if(value !== RecurrencePeriod.WEEKLY && this.recurrencePeriodFormControl.value === RecurrencePeriod.WEEKLY){\n this.recurrenceDaysFormControl.clearValidators();\n this.recurrenceDaysFormControl.updateValueAndValidity();\n }\n }\n}\n","
\n
\n \n \n \n Date and time must be in the future\n
\n
\n \n \n \n Date and time must be in the future\n
\n
\n
\n \n
\n \n \n \n {{ i + 1}}\n \n \n \n \n \n \n {{ repeatTimeString(option.label) }}\n \n \n \n
\n
\n
\n \n
\n
\n {{day.id}}\n
\n
\n
\n
\n
","import {\n Component,\n Input,\n ViewContainerRef\n} from '@angular/core';\nimport { BaseTemplateComponent } from '../base-template.component';\nimport { SelectOption } from '../types';\n\n@Component({\n selector: 'mck-select-option',\n template: `\n \n \n \n \n {{ option.display }}\n \n \n `,\n styleUrls: ['./select-option.component.css']\n})\nexport class SelectOptionComponent extends BaseTemplateComponent {\n\n @Input()\n option: SelectOption;\n\n @Input()\n selected: boolean;\n\n /**\n * If true, we still display as if it wasn't disabled.\n */\n @Input()\n ignoreDisabled = false;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n\n}\n","import {\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n BehaviorSubject,\n combineLatest\n} from 'rxjs';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { map } from 'rxjs/operators';\nimport { MatSelect } from '@angular/material/select';\nimport {\n ControlValueAccessor,\n FormControl,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\n\n@Component({\n selector: 'mck-select',\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectComponent),\n multi: true\n }\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class SelectComponent implements OnInit, OnChanges, ControlValueAccessor {\n\n @Input()\n public label: string;\n\n @Input()\n public required: boolean;\n\n @Input()\n public options: SelectOption[] = [];\n\n @Input()\n public selectedValue: SelectOption | undefined;\n\n /**\n * When true, can filter by searching on the input.\n */\n @Input()\n public searchEnabled = false;\n\n @Input()\n public splitDisplay = false;\n\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n\n @Input()\n public noEntriesFoundLabel: string;\n\n @Input()\n public showDivider: boolean = false\n\n /** Form control on change handler */\n private _onChange: (_: SelectOption) => void;\n /** Form control on touch handler */\n private _onTouch: (_: SelectOption) => void;\n\n public filterFormControl: FormControl = new FormControl();\n\n public value = new BehaviorSubject(this.selectedValue || this.options[0]?.value);\n\n /** Available time blocks for the selected date */\n public _options = new BehaviorSubject[]>(this.options);\n\n /** Select field for selecting the value */\n @ViewChild('select') private select_field: MatSelect;\n\n public selectedOption = combineLatest([this._options, this.value]).pipe(\n map(([options, value]) => options.find(o => o.value === value))\n );\n\n public placeHolderOption = this._options.pipe(\n map(os => os.length > 0 && os[0])\n );\n\n public isSelected(option: SelectOption) {\n return this.value.pipe(map(t => t === option.value));\n }\n\n public get isOpen() {\n return this.select_field?.panelOpen ?? false;\n }\n\n\n constructor() {\n }\n\n public ngOnInit(): void {\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.options) {\n this._options.next(this.options);\n this.value.next(this.selectedValue || this.options?.[0]?.value);\n }\n if (changes.selectedValue) {\n this.value.next(this.selectedValue?.value);\n }\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: string): void {\n this.value.next(new_value);\n if (this._onChange) {\n this._onChange(this.options.find(f => f.value === new_value));\n }\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: SelectOption | null) {\n if (value != null) {\n this.value.next(value.value);\n }\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: SelectOption) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: SelectOption) => void): void {\n this._onTouch = fn;\n }\n\n}\n","
\n {{label}}\n \n \n \n \n \n \n \n \n \n \n
\n \n
\n \n
\n","import {\n Component,\n EventEmitter,\n Input,\n Output\n} from '@angular/core';\n\n@Component({\n selector: 'mck-selected-chip-count',\n template: `\n \n {{count}}\n \n \n `,\n styleUrls: ['./selected-chip-count.component.scss']\n})\nexport class SelectedChipCountComponent {\n\n @Input()\n count: number;\n\n @Output()\n close = new EventEmitter();\n\n}\n","import {\n Component,\n Input,\n OnInit,\n ViewContainerRef\n} from '@angular/core';\nimport { BaseTemplateComponent } from '../base-template.component';\n\nexport enum SpacerMode {\n /**\n * If vertical, it expands in the vertical direction. Size is width.\n */\n Vertical = 'vertical',\n /**\n * If horizontal, it expands in the horizontal direction. Size is height.\n */\n Horizontal = 'horizontal',\n}\n\n@Component({\n selector: 'mck-spacer',\n template: `\n \n
\n
\n
\n
\n
\n `,\n styleUrls: ['./spacer.component.css'],\n})\nexport class SpacerComponent extends BaseTemplateComponent implements OnInit {\n SpacerMode = SpacerMode;\n\n @Input()\n size: string;\n\n @Input()\n mode: SpacerMode = SpacerMode.Horizontal;\n\n @Input()\n autoSize?: boolean;\n\n @Input()\n spacerClass?: string;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n\n\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output\n} from '@angular/core';\nimport { SelectOption } from '@mckinsey-converge/ui';\n\n@Component({\n selector: 'mck-switch-group',\n template: `\n
\n {{title}}\n {{option.display}}\n
\n `,\n styleUrls: ['./switch-group.component.scss']\n})\nexport class SwitchGroupComponent implements OnInit {\n\n @Input()\n title: string;\n\n @Input()\n options: SelectOption[];\n\n @Input()\n selectedOptions: SelectOption[] = [];\n\n @Output()\n optionChecked = new EventEmitter>();\n\n constructor() {\n }\n\n ngOnInit(): void {\n }\n\n public onCheckedChange(option: SelectOption) {\n this.optionChecked.emit(option);\n }\n\n public isSelected(option: SelectOption) {\n return !!this.selectedOptions.find(s => s.value === option.value);\n }\n}\n","import {\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\nimport { MatSelect } from '@angular/material/select';\n\nimport {\n BaseDirective,\n closestToTimeSlot,\n nearestStepToInput,\n timeWithGmtOffsetFormatString\n} from '@mckinsey-converge/base';\n\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { generateAvailableTimes } from '../utils/time.utils';\nimport {\n BehaviorSubject,\n combineLatest\n} from 'rxjs';\nimport {\n filter,\n map,\n withLatestFrom\n} from 'rxjs/operators';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { DateTime } from 'luxon';\n\n@Component({\n selector: 'mck-time-field',\n template: `\n
\n {{label}}\n \n \n \n \n \n \n \n \n \n
\n \n
\n \n
\n `,\n styleUrls: ['./time-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TimeFieldComponent),\n multi: true\n }\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class TimeFieldComponent extends BaseDirective implements OnInit, OnChanges, ControlValueAccessor {\n @Input()\n public label: string;\n @Input()\n public required: boolean;\n /** Time step between each allowed time option */\n @Input() public step = 15;\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Whether past times are allowed */\n @Input() public noPastTimes = true;\n /** Representing the date from start **/\n @Input() public from: number;\n /** Representing desired timezone **/\n @Input() public timezone?: string = new DateTZ({ date: Date.now() }).local_tz;\n\n // R-- Which time field is going to be used, there's too many\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n /** Select field for selecting the time */\n @ViewChild('select') private select_field: MatSelect;\n\n /** String representing the currently set date */\n public date = new BehaviorSubject(DateNow(new Date()).ms);\n\n public filterFormControl: FormControl = new FormControl();\n\n public nearestStep = combineLatest([\n this.filterFormControl.valueChanges,\n this.date]).pipe(\n map(([value, date]) => nearestStepToInput(this.step, value, DateTime.now().valueOf()))\n );\n\n /** String representing the currently set time */\n public value = new BehaviorSubject(closestToTimeSlot(DateTime.now(), this.step).toFormat('HH:mm'));\n\n /** Available time blocks for the selected date */\n public options = new BehaviorSubject[]>(generateAvailableTimes(DateNow(new Date()).ms, !this.noPastTimes, this.step, this.timezone));\n\n public selectedOption = combineLatest([this.options, this.value]).pipe(\n map(([options, value]) => options.find(o => o.value === value))\n );\n\n public placeHolderOption = this.options.pipe(\n map(os => os.length > 0 && os[0])\n );\n\n public isSelected(option: SelectOption) {\n return this.value.pipe(map(t => t === option.value));\n }\n\n public get isOpen() {\n return this.select_field?.panelOpen ?? false;\n }\n\n public ngOnInit(): void {\n // Generate the time input options for the booking date\n this.options.next(generateAvailableTimes(this.date.value, !this.noPastTimes, this.step, this.timezone));\n\n // Subscribe to selected option changes\n this.subscription('dateTimeChanges',\n combineLatest([\n this.date\n ]).pipe(\n map(([date]) => {\n // R--- The time input needing to be TZ aware.\n const closestTimeSlot = closestToTimeSlot(DateTime.fromMillis(date.valueOf()), this.step);\n // Need to return the date with building timezone or the HH:mm representation will no match the option values\n return new DateTZ({date: closestTimeSlot.valueOf(), is_local_tz:false, building_tz: this.timezone});\n }),\n withLatestFrom(this.options),\n filter(([date, timeOptions]: [DateTZ, SelectOption[]]) => {\n // if new time slot opened up when date / time changes, add it here.\n return !timeOptions.find(t => t.value === date.formatDate('HH:mm'));\n }),\n map(([date, timeOptions]) => {\n // TODO probably an issue here with going from a future date and time earlier than now back to day showing null\n // Push the current date option in\n timeOptions.push({\n display: timeWithGmtOffsetFormatString(date),\n value: date.formatDate('HH:mm')\n });\n // Sort the time options\n timeOptions.sort((a, b) => `${a.value}`.localeCompare(`${b.value}`));\n return timeOptions;\n })\n ).subscribe(next => this.options.next(next)));\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.no_past_times || changes.step || changes.timezone) {\n // If there's a new date value then update the time options\n this.options.next(generateAvailableTimes(this.date.value, !this.noPastTimes, this.step, this.timezone));\n const buildingDate = new DateTZ({date: this.from, is_local_tz: false, building_tz: this.timezone}).startOfValue('minute');\n this.value.next(buildingDate.formatDate('HH:mm'));\n }\n if (changes.from) {\n // When the from input param changes update the date value\n this.date.next(this.from);\n }\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: string): void {\n // value comes in as a HH:mm string\n const newTime = (new_value.indexOf(':') > 0 ? new_value : '00:00').split(':');\n // need the date with the building timezone so the hour set is relative to there and not local.\n const d = new DateTZ({ date: this.date.value, is_local_tz: false, building_tz: this.timezone });\n const date = d.setValue({ hour: parseInt(newTime[0]), minute: parseInt(newTime[1]) });\n if (date) {\n if (this._onChange) {\n this._onChange(date.ms);\n }\n }\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: number | null) {\n if (value != null) {\n // Time input value in building time milliseconds\n this.date.next(value);\n // Get the closest time to slot in case the browser was idle and elapse the valid times\n const date = closestToTimeSlot(DateTime.fromMillis(value).startOf('minute'), this.step);\n // Need the building time so HH:mm is correct\n const buildingDate = new DateTZ({date: date.valueOf(), is_local_tz: false, building_tz: this.timezone}).startOfValue('minute');\n this.options.next(generateAvailableTimes(buildingDate.ms, !this.noPastTimes, this.step, this.timezone));\n }\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output\n} from '@angular/core';\nimport { SelectOption } from '@mckinsey-converge/ui';\n\n@Component({\n selector: 'mck-toggle',\n template: `\n
\n \n
\n `,\n styleUrls: ['./toggle.component.scss']\n})\nexport class ToggleComponent {\n\n @Input()\n options: SelectOption[];\n\n @Input()\n selected: SelectOption;\n\n @Output()\n selectedChange = new EventEmitter>();\n\n public onTapOption(option: SelectOption) {\n this.selectedChange.emit(option);\n }\n\n isSelected(option: SelectOption) {\n return this.selected === option;\n }\n}\n","import { Component, Input } from '@angular/core';\nimport {TooltipPosition, TooltipTheme} from \"./tooltip.enums\";\n\n@Component({\n selector: 'app-tooltip',\n templateUrl: './tooltip.component.html',\n styleUrls: ['./tooltip.component.scss']\n})\nexport class TooltipComponent {\n isVisible: boolean = false; // To control the visibility of the tooltip\n position: TooltipPosition = TooltipPosition.DEFAULT;\n theme: TooltipTheme = TooltipTheme.DEFAULT;\n tooltip = '';\n left = 0;\n top = 0;\n visible = false;\n}","
\n
\n {{string}}\n
\n
","import {\n ApplicationRef,\n ComponentFactoryResolver,\n ComponentRef,\n Directive,\n ElementRef,\n EmbeddedViewRef,\n HostListener,\n Injector,\n Input,\n ViewContainerRef\n} from '@angular/core';\nimport {TooltipComponent} from \"./tooltip.component\";\nimport {TooltipPosition, TooltipTheme} from \"./tooltip.enums\";\n\n@Directive({\n selector: '[tooltip]'\n})\nexport class TooltipDirective {\n\n @Input() tooltip = '';\n @Input() position: TooltipPosition = TooltipPosition.DEFAULT;\n @Input() theme: TooltipTheme = TooltipTheme.DEFAULT;\n @Input() trigger: 'hover' | 'click' = 'hover'; \n @Input() showDelay = 0;\n @Input() hideDelay = 0;\n @Input() show: boolean = true;\n\n private componentRef: ComponentRef | null = null;\n private showTimeout?: number;\n private hideTimeout?: number;\n private touchTimeout?: number;\n\n constructor(private elementRef: ElementRef, private appRef: ApplicationRef,\nprivate componentFactoryResolver: ComponentFactoryResolver, private injector: Injector) {\n }\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (this.trigger === 'hover') {\n this.initializeTooltip();\n }\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n if (this.trigger === 'hover') {\n this.setHideTooltipTimeout();\n }\n }\n\n @HostListener('click')\n onClick(): void {\n if (this.trigger === 'click') {\n if (this.componentRef === null) {\n this.initializeTooltip();\n } else {\n this.destroy(); // Hide tooltip if it is already shown\n }\n }\n }\n\n @HostListener('touchstart', ['$event'])\n onTouchStart($event: TouchEvent): void {\n $event.preventDefault();\n window.clearTimeout(this.touchTimeout);\n this.touchTimeout = window.setTimeout(this.initializeTooltip.bind(this), 500);\n }\n\n @HostListener('touchend')\n onTouchEnd(): void {\n window.clearTimeout(this.touchTimeout);\n this.setHideTooltipTimeout();\n }\n\n private initializeTooltip() {\n if (this.componentRef === null) {\n window.clearInterval(this.hideDelay);\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(TooltipComponent);\n this.componentRef = componentFactory.create(this.injector);\n\n this.appRef.attachView(this.componentRef.hostView);\n const [tooltipDOMElement] = (this.componentRef.hostView as EmbeddedViewRef).rootNodes;\n\n this.setTooltipComponentProperties();\n\n document.body.appendChild(tooltipDOMElement);\n this.showTimeout = window.setTimeout(this.showTooltip.bind(this), this.showDelay);\n }\n }\n\n private setTooltipComponentProperties() {\n if (this.componentRef !== null) {\n this.componentRef.instance.tooltip = this.tooltip;\n this.componentRef.instance.position = this.position;\n this.componentRef.instance.theme = this.theme;\n\n const {left, right, top, bottom} = this.elementRef.nativeElement.getBoundingClientRect();\n\n switch (this.position) {\n case TooltipPosition.BELOW: {\n this.componentRef.instance.left = Math.round((right - left) / 2 + left);\n this.componentRef.instance.top = Math.round(bottom);\n break;\n }\n case TooltipPosition.ABOVE: {\n this.componentRef.instance.left = Math.round((right - left) / 2 + left);\n this.componentRef.instance.top = Math.round(top);\n break;\n }\n case TooltipPosition.RIGHT: {\n this.componentRef.instance.left = Math.round(right);\n this.componentRef.instance.top = Math.round(top + (bottom - top) / 2);\n break;\n }\n case TooltipPosition.LEFT: {\n this.componentRef.instance.left = Math.round(left);\n this.componentRef.instance.top = Math.round(top + (bottom - top) / 2);\n break;\n }\n default: {\n break;\n }\n }\n }\n }\n\n private showTooltip() {\n if (this.componentRef !== null) {\n this.componentRef.instance.visible = this.show ? true : false;\n }\n }\n\n private setHideTooltipTimeout() {\n this.hideTimeout = window.setTimeout(this.destroy.bind(this), this.hideDelay);\n }\n\n ngOnDestroy(): void {\n this.destroy();\n }\n\n destroy(): void {\n if (this.componentRef !== null) {\n window.clearInterval(this.showTimeout);\n window.clearInterval(this.hideDelay);\n this.appRef.detachView(this.componentRef.hostView);\n this.componentRef.destroy();\n this.componentRef = null;\n }\n }\n}\n","export enum TooltipPosition {\n ABOVE = 'above',\n BELOW = 'below',\n LEFT = 'left',\n RIGHT = 'right',\n DYNAMIC = 'dynamic',\n DEFAULT = 'below'\n}\n\nexport enum TooltipTheme {\n DARK = 'dark',\n LIGHT = 'light',\n DEFAULT = 'dark'\n}\n","export { AlertMode, AlertBannerDisplay } from './alert-banner/alert-banner.component';\nexport { SelectOption } from './options/select-option';\nexport * from './cng-select/dropdown-panel';","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatSelectModule } from '@angular/material/select';\nimport { AutoCompleteChipSelectItemComponent } from './auto-complete-chip-select-item/auto-complete-chip-select-item.component';\nimport { AutoCompleteSelectOptionComponent } from './auto-complete-select-option/auto-complete-select-option.component';\nimport {\n FormsModule,\n ReactiveFormsModule\n} from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { NgxMatSelectSearchModule } from 'ngx-mat-select-search';\nimport { RadioSelectComponent } from './radio-select/radio-select.component';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { FilterPipe } from './pipes/filter.pipe';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TimeFieldComponent } from './time-field/time-field.component';\nimport { DateTzTimeFieldComponent } from './date-tz-time-field/date-tz-time-field.component';\nimport { SpacerComponent } from './spacer/spacer.component';\nimport { DurationFieldComponent } from './duration-field/duration-field.component';\nimport { DateTzDurationFieldComponent } from './date-tz-duration-field/date-tz-duration-field.component';\nimport { AcaDatePickerComponent } from './aca-date-picker/aca-date-picker.component'; // the old widget\nimport { MckDatePickerComponent } from './mck-date-picker/mck-date-picker.component'; // the old form field \nimport { DateTzCalendarWidgetComponent } from './date-tz-calendar-widget/date-tz-calendar-widget.component'; // the new widget\nimport { DateTzDatePickerComponent } from './date-tz-date-picker/date-tz-date-picker.component'; // the new form field \nimport { CalendarIconComponent } from './icons/calendar/calendar-icon.component';\nimport { ChevronIconComponent } from './icons/calendar/chevron-icon.component';\nimport { SelectOptionComponent } from './select-option/select-option.component';\nimport { CloseIconComponent } from './icons/close/close-icon.component';\nimport { SelectedChipCountComponent } from './selected-chip-count/selected-chip-count.component';\nimport { AlertBannerComponent } from './alert-banner/alert-banner.component';\nimport { ErrorMessageComponent } from './error-message/error-message.component';\nimport { ToggleComponent } from './toggle/toggle.component';\nimport { LabelComponent } from './label/label.component';\nimport { ModalComponent } from './modal/modal.component';\nimport { CollapseHeaderComponent } from './collapse-header/collapse-header.component';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { SwitchGroupComponent } from './switch-group/switch-group.component';\nimport { ModalButtonRowComponent } from './modal-button-row/modal-button-row.component';\nimport { InformationalImageComponent } from './informational-image/informational-image.component';\nimport { GroupHeaderPipe } from './auto-complete-chip-select-item/groupHeader.pipe';\nimport { SelectComponent } from './select/select.component';\nimport { LegendDropdownComponent } from './legend-dropdown/legend-dropdown.component';\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\nimport { RecurrencePatternForm } from './recurrence-pattern-form/recurrence-pattern-form.component'; \nimport { RecurrenceDateForm } from './recurrence-date-form/recurrence-date-form.component';\nimport { ConflictsModalComponent } from './conflicts-modal/conflicts-modal.component';\nimport { RecurringBookingForm } from './recurrence-booking-form/recurrence-booking-form.component';\nimport { OverrideChangesModalComponent } from './override-changes-modal/override-changes-modal.component';\nimport { SanitizePipe } from './pipes/sanitise.pipe';\nimport { ConflictAlertModalComponent } from './conflict-alert-modal/conflict-alert-modal.component';\nimport { CngSelectComponent } from './cng-select/cng-select.component';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { DropdownTriggerForDirective } from './cng-select/dropdown-trigger-for.directive';\nimport { CngSelectOptionsComponent } from './cng-select/cng-select-options.component';\nimport { TooltipComponent } from './tooltip/tooltip.component';\nimport { TooltipDirective } from './tooltip/tooltip.directive';\nimport { ZoomWarningComponent } from './zoom-warning-modal/components/zoom-warning/zoom-warning.component';\n\nexport const MATERIAL_MODULES: any[] = [\n MatButtonModule,\n MatSnackBarModule,\n MatDialogModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatProgressSpinnerModule,\n MatProgressBarModule,\n MatAutocompleteModule,\n MatSelectModule,\n MatChipsModule,\n MatRippleModule,\n MatMenuModule,\n MatCheckboxModule,\n MatTooltipModule,\n MatRadioModule,\n MatTabsModule,\n MatSlideToggleModule,\n MatExpansionModule,\n OverlayModule\n];\n\n@NgModule({\n imports: [CommonModule,\n ...MATERIAL_MODULES,\n ReactiveFormsModule,\n FormsModule,\n NgxMatSelectSearchModule, NgxSkeletonLoaderModule],\n declarations: [\n AutoCompleteChipSelectItemComponent,\n AutoCompleteSelectOptionComponent,\n AcaDatePickerComponent,\n MckDatePickerComponent,\n DateTzCalendarWidgetComponent,\n DateTzDatePickerComponent,\n TimeFieldComponent,\n DateTzTimeFieldComponent,\n DurationFieldComponent,\n DateTzDurationFieldComponent,\n GroupHeaderPipe,\n RadioSelectComponent,\n FilterPipe,\n SanitizePipe,\n SpacerComponent,\n CalendarIconComponent,\n ChevronIconComponent,\n SelectOptionComponent,\n CloseIconComponent,\n SelectedChipCountComponent,\n AlertBannerComponent,\n ErrorMessageComponent,\n ToggleComponent,\n LabelComponent,\n ModalComponent,\n CollapseHeaderComponent,\n SwitchGroupComponent,\n ModalButtonRowComponent,\n InformationalImageComponent,\n SelectComponent,\n LegendDropdownComponent,\n RecurrencePatternForm,\n RecurrenceDateForm,\n RecurringBookingForm,\n ConflictsModalComponent,\n OverrideChangesModalComponent,\n ConflictAlertModalComponent,\n CngSelectComponent, \n DropdownTriggerForDirective,\n CngSelectOptionsComponent,\n TooltipComponent,\n TooltipDirective,\n ZoomWarningComponent\n ],\n exports: [\n AutoCompleteChipSelectItemComponent,\n AutoCompleteSelectOptionComponent,\n AcaDatePickerComponent,\n MckDatePickerComponent,\n DateTzCalendarWidgetComponent,\n DateTzDatePickerComponent,\n TimeFieldComponent,\n DateTzTimeFieldComponent,\n DurationFieldComponent,\n DateTzDurationFieldComponent,\n RadioSelectComponent,\n FilterPipe,\n SanitizePipe,\n SpacerComponent,\n CalendarIconComponent,\n ChevronIconComponent,\n AlertBannerComponent,\n ReactiveFormsModule,\n FormsModule,\n ToggleComponent,\n LabelComponent,\n ModalComponent,\n CollapseHeaderComponent,\n SwitchGroupComponent,\n ModalButtonRowComponent,\n InformationalImageComponent,\n SelectComponent,\n LegendDropdownComponent,\n RecurrencePatternForm,\n RecurrenceDateForm,\n RecurringBookingForm,\n ConflictsModalComponent,\n OverrideChangesModalComponent,\n ConflictAlertModalComponent,\n CngSelectComponent, DropdownTriggerForDirective,\n CngSelectOptionsComponent,\n TooltipComponent,\n TooltipDirective,\n ZoomWarningComponent\n ]\n})\nexport class UiModule {\n}\n","/**\n * Generate a list of time options for the given date\n * @param datestamp Date to generate options for\n * @param show_past Whether past times should be options\n */\n\nimport {\n closestToTimeSlot,\n closestToTimeSlotTz,\n DurationGroup,\n durationHumanized,\n timeFormatString,\n timeWithGmtOffsetFormatString,\n unique\n} from '@mckinsey-converge/base';\nimport { SelectOption } from '../types';\nimport { DateTZ } from \"@mckinsey-converge/date-tz\";\nimport { DateTime } from 'luxon';\n\n// 24 hours\nexport const ALL_DAY_BOOKING_VALUE = 60 * 24;\n\nexport const DEFAULT_DURATION = 30;\n\n// R--- depreciate.\nexport const generateAvailableTimes = (\n datestamp: number,\n showPast: boolean,\n step: number = 15,\n timezone: string = new DateTZ({ date: Date.now() }).local_tz\n): SelectOption[] => {\n // R--- refactor to only used dateTz input and drop timezone param.\n // now needs the building timezone for isAfter to work correctly\n const now = new DateTZ({ date: Date.now(), is_local_tz: false, building_tz: timezone });\n // date needs the building timezone for isAfter to work correctly\n let date = new DateTZ({ date: datestamp, is_local_tz: false, building_tz: timezone });\n // Check if we're today or a future date\n const blocks: SelectOption[] = [];\n if (showPast || date.isAfterDate(now, 'day')) {\n // later than today\n date = date.startOfValue('day');\n } else {\n // today\n date = now;\n }\n // Get the closest timeslot to the start time\n const inputDate = DateTime.fromMillis(date.ms);\n const closestDate = closestToTimeSlot(inputDate, step);\n // Date changed to the closest time\n date = new DateTZ({ date: closestDate.valueOf(), is_local_tz: false, building_tz: timezone });\n const end = date.endOfValue('day');\n // Add options for the rest of the day\n while (date.isBeforeDate(end)) {\n blocks.push({\n display: timeWithGmtOffsetFormatString(date),\n shortDisplay: date.formatDate('hh:mma'),\n value: date.formatDate('HH:mm')\n });\n date = date.addValue({ minutes: step });\n }\n return blocks;\n};\n\n\nexport const generateAvailableTimesTz = (\n fromDateTz: DateTZ,\n showPast: boolean,\n step: number = 15,\n timezone: string = new DateTZ({ date: Date.now() }).local_tz,\n all_day: boolean = false,\n extras: SelectOption[] = [],\n startFromDateTz: boolean = false\n): SelectOption[] => {\n // now needs the building timezone for isAfter to work correctly\n const now = new DateTZ({ date: Date.now(), is_local_tz: false, building_tz: timezone });\n // date needs the building timezone for isAfter to work correctly\n let dateTz = fromDateTz.clone();\n // Check if we're today or a future date\n const blocks: SelectOption[] = [];\n if (showPast || dateTz.isAfterDate(now, 'day')) {\n // later than today\n dateTz = dateTz.startOfValue('day');\n } else {\n // today/fromDateTz using the flag\n dateTz = startFromDateTz ? dateTz : now;\n }\n // Get the closest timeslot to the start time\n dateTz = closestToTimeSlotTz(dateTz, step);\n // Date changed to the closest time\n const end = dateTz.endOfValue('day');\n // Add the all day option for today\n if (all_day && dateTz.isSameDate(now, 'day')) {\n const startOfDay = dateTz.startOfValue('day');\n blocks.push({\n display: timeWithGmtOffsetFormatString(startOfDay),\n shortDisplay: startOfDay.formatDate('hh:mma'),\n value: startOfDay\n })\n }\n // Add options for the rest of the day\n while (dateTz.isBeforeDate(end)) {\n blocks.push({\n display: timeWithGmtOffsetFormatString(dateTz),\n shortDisplay: dateTz.formatDate('hh:mma'),\n value: dateTz, \n });\n \n dateTz = dateTz.addValue({ minutes: step });\n }\n\n return unique(extras.concat(blocks), 'shortDisplay');\n};\n\n/**\n * Generates list of duration options for new booking flow.\n * @param date - The start dateTime\n * @param max - The max number of minutes to go to from the date param.\n * @param min - The min number of minutes to display first time from.\n * @param step - The number of minutes to step up by for timeslots.\n */\nexport const generateDurationOptions = (\n date: DateTZ,\n max: number,\n min: number,\n step: number,\n extended: boolean): SelectOption[] => {\n const blocks: SelectOption[] = [];\n let value = min;\n while (value <= max) {\n let duration: string;\n if (extended) {\n const d = durationHumanized(value - min, true);\n duration = d ? `+${d}` : 'Current';\n } else {\n duration = durationHumanized(value, true);\n }\n\n blocks.push({\n value,\n display: `${date.addValue({ minutes: value }).formatDate(timeFormatString()).toLocaleLowerCase()} (${duration})`,\n });\n value += step;\n }\n return blocks;\n};\n\nexport const allDayOption: SelectOption = ({\n value: ALL_DAY_BOOKING_VALUE,\n display: 'All Day'\n});\n\nexport const oneWeekOption: SelectOption = ({\n value: 60 * 24 * 7, // 1 week\n display: 'One Week'\n});\n\nexport const defaultDurationGroups: DurationGroup[] = [\n {\n start: 15,\n step: 15,\n max: 60 * 24\n }\n // , {\n // start: 60,\n // step: 30,\n // max: (60 * 8) - 1 // 8 hours\n // }, {\n // start: 60 * 8,\n // step: 60,\n // max: 60 * 24 // 24 hours\n // }\n];\n\n/**\n * Maps the {@link DurationGroup} to {@link SelectOption} and appends the default all day and week options.\n */\nexport const generateDurationOptionsFromGroups = (date: DateTZ, durationGroups: DurationGroup[], extended: boolean): SelectOption[] => [\n ...(durationGroups.map(duration => generateDurationOptions(date, duration.max, duration.start, duration.step, extended)).reduce(((previousValue, currentValue) => {\n previousValue.push(...currentValue);\n return previousValue;\n }), [])),\n // allDayOption,\n // oneWeekOption\n ];\n","import { Component, OnInit } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'mck-zoom-warning',\n templateUrl: './zoom-warning.component.html',\n styleUrls: ['./zoom-warning.component.scss']\n})\nexport class ZoomWarningComponent {\n\n constructor(private dialogRef: MatDialogRef) {}\n\n onCloseClick(): void {\n this.dialogRef.close();\n }\n}\n","
\n

Excessive zoom warning

\n
\n\n
\n
\n

\n
\n
\n
\n\n
\n \n
\n
","export * from './lib/user.module';\nexport * from './lib/user.actions'\nexport * from './lib/user.types'\nexport * from './lib/user.reducer'\n","import { \n createLoadingAction\n } from '../../../loading/src/lib/loading.actions';\nimport {\n UserState,\n UserStoreState\n} from './user.types';\nimport { User } from '../../../data-common/src/lib/users/user.class';\nimport { createSelector } from '@ngrx/store';\n\nexport const loadUser = createLoadingAction('CurrentUser', 'current');\n\nexport const selectUserState = ({ user }: UserStoreState) => user;\n\nexport const selectHasUserData = createSelector(createSelector(selectUserState, loadUser.selectors.model), (state) => !!state.optionalSuccess);\n\nexport const selectCurrentUser = createSelector(selectUserState, loadUser.selectors.optionalSuccess);\n","import { Injectable } from '@angular/core';\nimport {\n Actions,\n Effect\n} from '@ngrx/effects';\nimport { createLoadingEffect } from '@mckinsey-converge/loading';\nimport { loadUser } from './user.actions';\nimport { UsersService } from '../../../data-common/src/lib/users/users.service';\n\n\n@Injectable()\nexport class UserEffects {\n\n constructor(private actions: Actions,\n private userService: UsersService) {\n }\n\n @Effect()\n loadUser = createLoadingEffect(this.actions, loadUser, () => this.userService.loadCurrentUser());\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { StoreModule } from '@ngrx/store';\nimport { userReducer } from './user.reducer';\nimport { EffectsModule } from '@ngrx/effects';\nimport { UserEffects } from './user.effects';\n\n@NgModule({\n imports: [\n CommonModule,\n StoreModule.forFeature('user', userReducer),\n EffectsModule.forFeature([UserEffects])\n ]\n})\nexport class UserModule {\n}\n","import { createReducer } from '@ngrx/store';\nimport { UserState } from './user.types';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { loadUser } from './user.actions';\n\n\nexport const initialUserState: UserState = {\n current: LoadingModel.empty()\n};\n\nexport const userReducer = createReducer(initialUserState,\n ...loadUser.ons);\n","function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = \"./$$_lazy_route_resource lazy recursive\";","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { ShellWrapperComponent } from './shell/shell.component';\n\nconst routes: Routes = [\n {\n path: '',\n component: ShellWrapperComponent,\n children: [\n {\n path: 'home',\n loadChildren: () => import('./booking/booking.module').then((m) => m.BookingModule),\n },\n { path: '**', redirectTo: 'home' },\n ],\n },\n { path: '**', redirectTo: 'home' },\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes, { useHash: true })],\n exports: [RouterModule],\n})\nexport class AppRoutingModule {}\n","import {\n Component,\n OnInit,\n ViewEncapsulation\n} from '@angular/core';\nimport { ActivatedRoute, GuardsCheckEnd, NavigationEnd, NavigationStart, Router } from '@angular/router';\nimport { BaseDirective, detectIE } from '@mckinsey-converge/base';\nimport {\n ApplicationService,\n BookingsService,\n OrganisationService,\n SpacesService\n} from '@mckinsey-converge/data-common';\nimport { environment } from 'src/environments/environment';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ZoomWarningComponent } from '@mckinsey-converge/ui';\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: [\n './styles/app.component.scss',\n './styles/custom-element.styles.scss',\n './styles/native-element.styles.scss'\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class AppComponent extends BaseDirective implements OnInit {\n constructor(\n private _app: ApplicationService,\n private _org: OrganisationService,\n private _spaces: SpacesService,\n private _bookings: BookingsService,\n private _router: Router,\n private _route: ActivatedRoute,\n private _dialog: MatDialog,\n ) {\n super();\n\n // ensure app is trusted in dev mode so we can preserve login.\n if (!environment.production) {\n localStorage.setItem('trusted', 'true');\n }\n\n\n if (detectIE() && detectIE() < 12) {\n location.href = `${location.origin}${location.pathname}assets/not-supported.html`;\n return;\n }\n }\n\n public ngOnInit(): void {\n this._router.events.subscribe((val: NavigationStart) => {\n const bookingForm = JSON.parse(localStorage.getItem('bookingForm'));\n if (val && val.navigationTrigger && val.url) {\n // Redirect everyone who doesn't have an active bookingForm back to the home page.\n const cleanHash = location?.hash.split('?')[0];\n const isLoadBookingUrl = cleanHash.indexOf('#/home/booking/') === 0;\n const isLoadCateringUrl = cleanHash.indexOf('#/home/catering/') === 0;\n if (!isLoadBookingUrl && !isLoadCateringUrl && cleanHash && ['#/home', '#/home/manage', '#/home/create', '#/home/edit'].indexOf(cleanHash) === -1 && bookingForm && !bookingForm?.activeForm) {\n location.href = `${location.origin}`;\n return;\n }\n }\n\n })\n this.adjustZoom();\n }\n\n private adjustZoom() {\n const clientWidth = document.body.clientWidth;\n if (this.isMobileOrTablet()) { // Do not show the warning if it's a mobile or tablet device\n return;\n }\n if (clientWidth < 1300) {\n this._dialog.open(ZoomWarningComponent);\n }\n }\n private isMobileOrTablet(): boolean {\n const userAgent = navigator.userAgent || navigator.vendor;\n const maxTouchPoints = navigator.maxTouchPoints || 0; // Check for touch points \n if (maxTouchPoints > 0 && window.innerWidth <= 1024) {\n return true;\n } // Check for common mobile/tablet user agent strings \n const mobileAgents = ['Android', 'webOS', 'iPhone', 'iPad', 'iPod', 'BlackBerry', 'IEMobile', 'Opera Mini'];\n for (const agent of mobileAgents) {\n if (userAgent.indexOf(agent) > -1) {\n return true;\n }\n }\n return false;\n }\n}\n","
\n \n
\n","// remove after trigger build\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { NgModule } from '@angular/core';\nimport { HttpClientModule } from '@angular/common/http';\nimport { FormsModule } from '@angular/forms';\nimport { MAT_LABEL_GLOBAL_OPTIONS } from '@angular/material/core';\n\nimport { ComposerModule } from '@placeos/composer';\n\nimport { AppRoutingModule } from './app-routing.module';\nimport { AppComponent } from './app.component';\nimport { environment } from '../environments/environment';\nimport { SharedContentModule } from './shared/shared.module';\n\nimport { ShellWrapperComponent } from './shell/shell.component';\nimport {\n ActionReducer,\n MetaReducer,\n StoreModule\n} from '@ngrx/store';\nimport { StoreDevtoolsModule } from '@ngrx/store-devtools';\nimport { BookingModule } from 'src/app/booking/booking.module';\nimport { BookingsModule } from '@mckinsey-converge/bookings';\nimport { BuildingsModule } from '@mckinsey-converge/buildings';\nimport { EffectsModule } from '@ngrx/effects';\nimport { DEFAULT_SETTINGS } from 'src/environments/settings';\nimport { provideMockSettingsObject } from '@mckinsey-converge/data-common';\nimport { OrganisationModule } from '@mckinsey-converge/organisation';\nimport { localStorageSync } from 'ngrx-store-localstorage';\nimport { UiModule } from '@mckinsey-converge/ui';\nimport { RoomsModule } from '@mckinsey-converge/rooms';\nimport { ENVIRONMENT_TOKEN } from '@mckinsey-converge/environment';\nimport { LegacyOverlaysModule } from '@mckinsey-converge/legacy-overlays';\nimport { UserModule } from '@mckinsey-converge/user';\nimport { MapModule } from 'src/app/map/map.module';\n\n/**\n * Cache some state in local storage. Not for use in production.\n */\nexport function localStorageSyncReducer(reducer: ActionReducer): ActionReducer {\n // Keys needed to fix prod reloading. MCK-1229\n let keys = [\n 'buildings',\n 'bookingForm',\n 'rooms',\n ];\n\n if (!environment.production) {\n keys = [\n 'bookings',\n 'buildings',\n 'organisation',\n 'bookingForm',\n 'rooms',\n 'user'\n ];\n }\n\n return localStorageSync({\n keys,\n rehydrate: true,\n })(reducer);\n}\n\nconst metaReducers: Array> = [localStorageSyncReducer];\n\n\n@NgModule({\n declarations: [\n AppComponent,\n ShellWrapperComponent\n ],\n imports: [\n BrowserModule,\n BrowserAnimationsModule,\n AppRoutingModule,\n HttpClientModule,\n FormsModule,\n ComposerModule,\n SharedContentModule,\n LegacyOverlaysModule,\n StoreModule.forRoot({}, { metaReducers }),\n StoreDevtoolsModule.instrument({\n maxAge: 100,\n logOnly: environment.production\n }),\n EffectsModule.forRoot(),\n BookingsModule,\n BookingModule,\n BuildingsModule,\n MapModule,\n OrganisationModule,\n RoomsModule,\n UiModule,\n UserModule\n ],\n providers: [\n { provide: MAT_LABEL_GLOBAL_OPTIONS, useValue: { float: 'nevet' } },\n provideMockSettingsObject(DEFAULT_SETTINGS),\n { provide: ENVIRONMENT_TOKEN, useValue: environment }\n ],\n bootstrap: [AppComponent]\n})\nexport class AppModule {\n}\n","import { Component, OnInit, Input, Output, EventEmitter, ViewChild } from '@angular/core';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\nimport { BookingStateService, OrganisationService } from '@mckinsey-converge/data-common';\nimport { DateNow, DateTZ, getTimezoneOffsetString, toMiddayUTC } from '@mckinsey-converge/date-tz';\n\n@Component({\n selector: 'calendar-date-widget',\n templateUrl: './calendar-date-widget.component.html',\n styleUrls: ['./calendar-date-widget.component.scss'],\n})\nexport class CalendarDateWidgetComponent extends BaseDirective implements OnInit {\n /** Currently selected date */\n @Input() public dateTz: DateTZ = DateNow(new Date());\n /** Currently building timezone */\n @Input() public timezone: string;\n /** Currently active zone */\n @Input() public zone: string;\n /** Whether to show new item button */\n @Input() public show_add_item = false;\n /** Whether to show the events for the active month */\n @Input() public show_events: boolean = false;\n /** Preserve last selected date */\n @Input() public retainSelectedDate: boolean = false;\n /** Emitter for changes selected date */\n @Output() public dateChangeTz = new EventEmitter();\n /** Emitter for add item button */\n @Output() public event = new EventEmitter();\n /** Counters of the events on given dates. Key format is `yyyy-MM-dd` */\n public event_map: { [date: string]: number };\n\n public fromDateTz = DateNow().subtractValue({ months: 6 });\n\n public get now() {\n return DateNow();\n }\n\n /** Display string for the currently selected date */\n public get tz(): string {\n return getTimezoneOffsetString(this.timezone_value);\n }\n\n public get timezone_value() {\n return localStorage.getItem('CONCIERGE.timezone') || this.timezone || this.now.building_tz;\n }\n\n public get is_today() {\n return new DateTZ({\n date: toMiddayUTC(this.dateTz).ms,\n is_local_tz: false,\n building_tz: this.timezone_value,\n }).isSameDate(\n new DateTZ({\n date: Date.now(),\n is_local_tz: false,\n building_tz: this.timezone_value,\n }),\n 'day'\n );\n }\n\n constructor(private _bookings: BookingStateService, private _org: OrganisationService) {\n super();\n }\n\n public ngOnInit(): void {\n // CONCIERGE.date: Get the localstorage date and timezone when changing pages.\n let date: any;\n if(!this.retainSelectedDate) {\n date = +localStorage.getItem('CONCIERGE.date') || this.now.ms;\n } else {\n date = this.now.ms;\n }\n\n \n /* istanbul ignore else */\n if (date && (date !== this.dateTz.ms || this.timezone_value !== this.dateTz.building_tz)) {\n // CONCIERGE.date Reapply the localstorage date and timezone when changing pages.\n this.timeout(\n 'init',\n () => {\n this.dateTz = new DateTZ({\n date,\n is_local_tz: false,\n building_tz: this.timezone_value,\n });\n this.dateChangeTz.emit(this.dateTz);\n this.updateDate();\n },\n 10\n );\n }\n this.subscription(\n 'events',\n this._bookings._noOfMeetings.subscribe((list) => {\n this.event_map = {};\n this.event_map = list[0];\n })\n );\n }\n\n public noOfCount(event) {\n // Disabling bellow until find more reliable way to call as it is been called multiple times on hover/click\n // this._bookings.getDailyMeetingCount();\n // event.stopPropogation();\n }\n\n /**\n * Change the selected date with the arrow controls\n *\n */\n public changeDate(value: number) {\n let date = new DateTZ({\n date: toMiddayUTC(this.dateTz).ms,\n is_local_tz: false,\n building_tz: this.timezone_value,\n });\n date = date.addValue({ days: value });\n this.dateTz = date;\n this.dateChangeTz.emit(this.dateTz);\n localStorage.setItem('CONCIERGE.date', `${this.dateTz.ms}`);\n localStorage.setItem('CONCIERGE.timezone', `${this.timezone_value}`);\n this.updateDate();\n }\n\n /**\n * Change the selected date with the calendar widget\n *\n */\n public applyDatePickerValue(dateInputTz: DateTZ) {\n this.dateTz = new DateTZ({\n date: toMiddayUTC(dateInputTz).ms,\n is_local_tz: false,\n building_tz: this.timezone_value,\n });\n this.dateChangeTz.emit(this.dateTz);\n localStorage.setItem('CONCIERGE.date', `${this.dateTz.ms}`);\n localStorage.setItem('CONCIERGE.timezone', `${this.timezone_value}`);\n this.updateDate();\n this.closeDatePicker();\n }\n\n public updateDate() {\n this.timeout('update_date', () => this._bookings.setDate(this.dateTz));\n }\n\n /** Reset date to the current date */\n public resetDate() {\n this.dateTz = new DateTZ({\n date: toMiddayUTC(this.now).ms,\n is_local_tz: false,\n building_tz: this.timezone_value,\n });\n this.dateChangeTz.emit(this.dateTz);\n localStorage.setItem('CONCIERGE.date', `${this.dateTz.ms}`);\n localStorage.setItem('CONCIERGE.timezone', `${this.timezone_value}`);\n this.updateDate();\n }\n\n public closeDatePicker() {\n this.updateDate();\n }\n\n /** New Item button click */\n public newItem(): void {\n this.event.emit('new_item');\n }\n}\n","
\n\n \n
\n
\n \n
\n

Today

\n

{{ dateTz.ms | date: 'mediumDate':tz }}

\n
\n \n
\n
\n \n \n
\n
\n
\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { BookingCalendarWrapperComponent } from './booking-calendar-wrapper.component';\n\n\nconst routes: Routes = [\n { path: '', component: BookingCalendarWrapperComponent },\n { path: ':level', component: BookingCalendarWrapperComponent },\n { path: '**', redirectTo: '' }\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class BookingCalendarRoutingModule {}\n","import {\n Component,\n OnInit,\n ViewEncapsulation\n} from '@angular/core';\nimport { ActivatedRoute, GuardsCheckEnd, NavigationEnd, NavigationStart, Router } from '@angular/router';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n ApplicationService,\n BookingFormData,\n BookingsService,\n Building,\n OrganisationService,\n SettingsService,\n SpacesService,\n selectActiveForm\n} from '@mckinsey-converge/data-common';\nimport { Store, select } from '@ngrx/store';\nimport { distinctUntilChanged, first } from 'rxjs/operators';\n\nimport { RoutePayload, TopBarHeaderMode } from 'src/app/components/topbar-header/topbar-header.component';\nimport { RoomResultsState } from '../room-details/room-details.component';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n@Component({\n selector: 'booking-calendar-wrapper',\n templateUrl: './booking-calendar-wrapper.html',\n styleUrls: ['./booking-calendar.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class BookingCalendarWrapperComponent extends BaseDirective implements OnInit {\n public TopBarHeaderMode = TopBarHeaderMode;\n\n public backRoute: RoutePayload = {\n route: ['/home', 'results'],\n queryParams: { display: 'list' },\n };\n orgBuildings: Building[] = [];\n \n constructor(\n private _org: OrganisationService,\n private _spaces: SpacesService,\n private _bookings: BookingsService,\n private settingService: SettingsService,\n private store: Store,\n ) {\n super();\n\n \n }\n\n public ngOnInit(): void {\n /** allow booking bypass to receive bookings for staff calendar view only */\n this.settingService.bypass_bookings = true;\n\n this.orgBuildings = this._org.buildings;\n\n this.subscription('activeForm', this.store.pipe(\n select(selectActiveForm),\n distinctUntilChanged()\n ).subscribe((next: BookingFormData | undefined) => {\n if (next && next?.dateTz) {\n localStorage.setItem('CONCIERGE.date', `${next.dateTz.ms}`);\n localStorage.setItem('CONCIERGE.timezone', `${next.timezone}`);\n const building = this._org.buildings.find(\n (_) => _.id === next.location.filter(el => el.groupChild)[0]?.meta?.building?.id\n );\n if(building) {\n this._org.building = building;\n }\n \n }\n }));\n\n this._org.initialised.pipe(first((_) => _)).subscribe(() => {\n this.orgBuildings = this._org.buildings;\n })\n\n \n }\n\n public onBackCallback() {}\n\n public ngOnDestroy(): void {\n /** disallowed booking bypass when you are moving from staff app calendar view*/\n this.settingService.bypass_bookings = false;\n }\n\n}\n","
\n\t
\n\t\t \n\t\t\n\t
\n\t\n\t\n
","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { BookingCalendarWrapperComponent } from './booking-calendar-wrapper.component';\n\nimport { StaffCalendarComponent } from './staff-calendar/staff-calendar.component';\nimport { CalendarDateWidgetComponent } from './booking-calendar-date-widget/calendar-date-widget.component';\nimport { DayViewTimelineComponent } from './staff-calendar/timeline/timeline.component';\nimport { DayViewSpaceComponent } from './staff-calendar/space/space.component';\nimport { DayViewSpaceEventComponent } from './staff-calendar/space/event/event.component';\n\n\nimport { BookingCalendarRoutingModule } from './booking-calendar-routing.module';\nimport { SharedContentModule } from 'src/app/shared/shared.module';\nimport { UiModule } from '@mckinsey-converge/ui';\n\nimport {CngMenuItemComponent} from './cng-menu-item/cng-menu-item.component';\n\nexport const bookingModuleDeclarations = [\n BookingCalendarWrapperComponent,\n StaffCalendarComponent,\n CalendarDateWidgetComponent,\n DayViewTimelineComponent,\n DayViewSpaceComponent,\n DayViewSpaceEventComponent,\n CngMenuItemComponent\n ];\n\nexport const bookingModuleImports = [\n CommonModule,FormsModule,\n ReactiveFormsModule,\n SharedContentModule,\n UiModule,\n \n \n];\n\n\n@NgModule({\n declarations: [...bookingModuleDeclarations],\n imports: [\n ...bookingModuleImports,\n BookingCalendarRoutingModule,\n // StoreModule.forFeature('bookingForm', bookingFormReducer)\n ]\n})\nexport class BookingCalendarModule {\n}","import {Component, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {NavItem} from './nav-item';\nimport { MatMenu } from '@angular/material/menu';\n\n@Component({\n selector: 'cng-menu-item',\n templateUrl: './cng-menu-item.component.html',\n styleUrls: ['./cng-menu-item.component.scss']\n})\nexport class CngMenuItemComponent implements OnInit {\n @Input() items: NavItem[];\n @Input() activeOption: string;\n @ViewChild('childMenu', {static: true}) public childMenu: any;\n\n @Output() public onChildSelect = new EventEmitter<{}>();\n \n constructor(public router: Router) {\n }\n\n ngOnInit() {\n }\n\n public notifySelection(node) {\n this.onChildSelect.emit(node);\n }\n}\n","\n \n \n 0\">\n \n \n \n \n \n \n \n \n \n ","import {\n Component,\n OnInit,\n Input,\n OnChanges,\n SimpleChanges,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { Router } from '@angular/router';\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { Space, BOOKING_STATUS, CloseDialogService, DialogIds, BookingStoreState, User } from '@mckinsey-converge/data-common';\nimport { ApplicationService } from '@mckinsey-converge/data-common';\nimport { CateringOrder } from '@mckinsey-converge/data-common';\n\nimport { Booking } from '@mckinsey-converge/data-common';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { RoomStoreState } from '@mckinsey-converge/rooms';\nimport { BuildingStoreState } from '@mckinsey-converge/buildings';\nimport { UserStoreState, selectCurrentUser } from '@mckinsey-converge/user';\nimport { Store } from '@ngrx/store';\nimport { take } from 'rxjs/operators';\n\n/** Details about the associated event overlapping with other events */\nexport interface IEventOverlap {\n /** Index of this item with the overlapping items */\n index: number;\n /** Total number of items overlapping with this one */\n total: number;\n}\nexport interface BookingDetailInfo {\n bookedBy: {\n display:boolean,\n value: string\n }\n}\nexport type RoomResultsState = BookingStoreState\n & RoomStoreState\n & BuildingStoreState\n & UserStoreState;\n \n@Component({\n selector: 'day-view-space-event',\n templateUrl: './event.component.html',\n styleUrls: ['./event.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DayViewSpaceEventComponent extends BaseDirective implements OnInit, OnChanges {\n /** Event to display */\n @Input() public booking: Booking;\n /** Date to display bookings for */\n @Input() public dateTz: DateTZ = DateNow(new Date());\n /** Space associated with the booking */\n @Input() public space: Space;\n /** Whether the item is a fixed size */\n @Input() public fixed: boolean;\n /** Overlap details for the booking */\n @Input() public overlap: IEventOverlap;\n /** Whether an action is being processed for this booking */\n @Input() public loading: boolean;\n /** Emitter for the current position of the booking within the timeline */\n @Output() public position = new EventEmitter<{ top: number; height: number }>();\n\n /** Position of the booking start time in the day */\n public top: number;\n /** Position of the booking relative to overlapping bookings */\n public left: number;\n /** Height based of the duration of the booking */\n public height: number;\n /** Size of the booking when overlapping with other bookings */\n public width: number;\n /** Offset from the booking's top that the setup time starts */\n public overflow_top: number;\n /** Offset from the booking's bottom that the breakdown time ends */\n public overflow_bottom: number;\n\n public approved: boolean;\n public declined: boolean;\n public bookingDetails: BookingDetailInfo;\n currentUser: User;\n constructor(\n private _service: ApplicationService,\n public store: Store,\n private _dialog: MatDialog,\n private _router: Router,\n private cdRef: ChangeDetectorRef,\n private closeDialogService: CloseDialogService\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.subscription('currentUser', this.store.select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n })\n );\n\n this.approved = this.booking.status === BOOKING_STATUS.approved;\n this.declined = this.booking.status === BOOKING_STATUS.declined;\n // test comment\n const {creator, organiser, booker_concierge} = this.booking;\n this.bookingDetails = {\n bookedBy: {\n display: creator && ( creator.email !== organiser.email || (creator.email === organiser.email && booker_concierge !== null && organiser.email !==booker_concierge['email']) ),\n value: (creator.email === organiser.email && booker_concierge !== null && organiser.email !==booker_concierge['email']) ? booker_concierge['name'] || booker_concierge['email'] : creator?.name || creator.email\n }\n }\n }\n\n public get local_id(): string {\n return this.booking.icaluid.substr(0, 6);\n }\n\n /** Type of booking */\n public get type(): string {\n const userEmail = this.currentUser.email;\n const { creator, organiser } = this.booking;\n if(userEmail === creator.email || userEmail === organiser.email) \n return this.booking.getType();\n else \n return 'others-booking';\n }\n\n /** Period that the booking will occur during the day */\n public get period(): string {\n // the booking time is being pass in as the local timezone version.\n return this.booking.time_period;\n }\n\n /** Number attendees expected to turn up to the booking */\n public get expected(): number {\n const expected = this.booking.expected_attendees;\n return this.space ? expected[this.space.email] || 0 : 0;\n }\n\n /** Whether the meeting has catering attached */\n public get has_catering(): boolean {\n return !!this.order;\n }\n\n public get order(): CateringOrder {\n return this.booking.catering.find((order) => order.location_id === this.space.email);\n }\n\n /** Whether booking is active */\n public get active(): boolean {\n const booking = this._service.get('CONCIERGE.day_view.viewing');\n return !booking || booking.id === this.booking.id;\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n /* istanbul ignore else */\n if (changes.booking || changes.overlap || changes.dateTz) {\n this.calculatePosition();\n this.approved = this.booking.status === BOOKING_STATUS.approved;\n this.declined = this.booking.status === BOOKING_STATUS.declined;\n }\n }\n\n /** Store the order details for viewing in another component */\n public storeOrder(order: CateringOrder) {\n const booking_details = this.booking.toApiJSON();\n localStorage.setItem('CONCIERGE.view_order', JSON.stringify(order.toJSON()));\n localStorage.setItem('CONCIERGE.view_booking', JSON.stringify(booking_details));\n localStorage.setItem('CONCIERGE.date', `${this.booking.startDateTz.ms}`);\n localStorage.setItem('CONCIERGE.timezone', `${this.booking.startDateTz.building_tz}`);\n }\n\n /**\n * View catering order for the booking\n */\n public viewOrder(order: CateringOrder) {\n /* istanbul ignore else */\n if (this.booking && this.booking.catering) {\n /* istanbul ignore else */\n if (localStorage) {\n this.storeOrder(order);\n }\n this._router.navigate(['/catering', 'orders'], {\n queryParams: { booking: this.booking.id, view: order.id },\n });\n }\n }\n\n /** Calculate the position */\n private calculatePosition() {\n /* istanbul ignore else */\n if (this.booking) {\n const overlap = this.overlap || { index: 0, total: 1 };\n const shown_date = this.dateTz.startOfValue('day');\n const date = this.booking.startDateTz.startOfValue('minute');\n const end = this.booking.endDateTz.startOfValue('minute');\n const from_previous_day = !date.isSameDate(shown_date, 'day');\n if (end.isBeforeDate(shown_date, 'day')) { // Hide booking if not on shown date\n this.top = -100;\n this.height = 1;\n return;\n }\n\n //R-- Stragest thing, but one time this was logging bookings form different timezones?\n // this.dateTz.logDateTz('calculatePosition this.dateTz')\n // this.booking.startDateTz.logDateTz('calculatePosition this.booking.startDateTz')\n\n const start = from_previous_day ? 0 : Math.abs(+date.dateDiff(shown_date, 'hours', 'hours').toFixed(3));\n const duration = Math.min(\n this.booking.duration,\n Math.abs(shown_date.dateDiff(date.addValue({ minutes: this.booking.duration }), 'minutes'))\n );\n this.top = Math.max(0, (start / 24) * 100);\n this.height = Math.min(\n 100 - this.top,\n this.fixed ? duration / 60 : (duration / 60 / 24) * 100\n );\n this.position.emit({ top: this.top, height: (duration / 60 / 24) * 100 });\n this.width = Math.min(100, 100 / overlap.total + 5);\n this.left = Math.min(100 - this.width, this.width * overlap.index - 5 * overlap.index);\n this.overflow_top =\n (this.booking.setup[this.space.email]\n ? (this.booking.setup[this.space.email] / 60) / duration\n : -0.1) * 100;\n this.overflow_bottom =\n (this.booking.breakdown[this.space.email]\n ? (this.booking.breakdown[this.space.email] / 60) / duration\n : -0.1) * 100;\n if (this.booking.all_day) {\n this.top = 0;\n this.height = 100;\n }\n }\n }\n\n public get emailURL() {\n const userEmail = this.currentUser.email;\n const userName = this.currentUser.name\n const { creator, organiser } = this.booking;\n\t\treturn `mailto:${encodeURIComponent(organiser.email)}?cc=${encodeURIComponent(userEmail)}&subject=Request%20to%20release%20room%20reservation%20-%20${encodeURIComponent(this.space.simple_name)}`;\n\t}\n\n /** Whether booking has been ended */\n public expired(): boolean {\n return ['started','in_progress','expired_yesterday', 'done'].includes(this.booking.timeBasedStatusLabel);\n }\n}\n","\n \n \n 50 ? ' low' : '')\"\n [style.z-index]=\"(overlap?.index || 0) + 2\"\n \n >\n
\n
{{ booking.all_day ? 'All Day' : period }}
\n
\n \n\n \n \n
\n
\n
\n
\n
Host: 
\n
\n {{ booking.organiser?.name || booking.organiser }}\n
\n
\n \n
Booked by: 
\n
\n {{ bookingDetails.bookedBy.value }}\n
\n
\n
\n
\n
{{ booking.title }}
\n
\n
\n
\n {{ booking.attendees ? booking.attendees.length || 'No' : 'No' }} Attendee{{\n booking.attendees?.length === 1 ? '' : 's'\n }}{{ expected ? '(' + expected + ' Expected)' : '' }}\n
\n
\n
0\">\n
\n Company: {{ booking.company.length }}\n
\n
\n
\n
Welcomed by: {{ booking.organiser?.name || booking.organiser }}
\n
\n
\n
Catered
\n
\n
\n \n \n \n \n\n","import {\n Component,\n OnChanges,\n Input,\n SimpleChanges,\n Output,\n EventEmitter,\n ViewChild,\n ElementRef,\n OnInit,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { CdkDragMove, CdkDragDrop } from '@angular/cdk/drag-drop';\nimport { MatDialog } from '@angular/material/dialog';\nimport { first } from 'rxjs/operators';\n\nimport { IEventOverlap } from './event/event.component';\nimport { BaseDirective, closestToTimeSlotTz, Identity } from '@mckinsey-converge/base';\nimport { OrganisationService, Space } from '@mckinsey-converge/data-common';\nimport { ApplicationService } from '@mckinsey-converge/data-common';\nimport { Booking } from '@mckinsey-converge/data-common';\nimport { ConfirmModalComponent } from '@mckinsey-converge/legacy-overlays';\nimport { DialogEvent, HashMap } from '@mckinsey-converge/base';\nimport { DayViewSettings } from '@mckinsey-converge/data-common';\nimport { SpacesService } from '@mckinsey-converge/data-common';\nimport { BookingsService } from '@mckinsey-converge/data-common';\n\nimport { BookingStateService } from '@mckinsey-converge/data-common';\nimport { convertTimezonedTimestampToLocalDateTz, DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n// import { BookingModalComponent } from 'src/app/bookings/booking-modal/booking-modal.component';\n\n@Component({\n selector: 'day-view-space',\n templateUrl: './space.component.html',\n styleUrls: ['./space.component.scss'],\n})\nexport class DayViewSpaceComponent extends BaseDirective implements OnInit, OnChanges {\n /** List of space dropzones connected to */\n @Input() public space_list: string[];\n /** Date to display events for */\n @Input() public dateTz: DateTZ;\n /** Space to display events for */\n @Input() public space: Space;\n /** Scroll value of the day view */\n @Input() public scroll: number;\n /** Only show events with setup and/or breakdown times */\n @Input() public overflow_only: boolean;\n /** Mapping of whether to show events with a given legend id */\n @Input() public legend: HashMap = {};\n /** Scroll value to add to drop placeholders */\n @Input('scrollTop') public scroll_top: number;\n /** Last update time of the displayed bookings */\n @Input('lastUpdate') public last_update: number;\n\n @Input() public eventMovingLoader : HashMap = {};\n /** Emitter for whether the space column is in view */\n @Output() public inView = new EventEmitter();\n /** Emitter for whether an event is being dragged */\n @Output() public dragging = new EventEmitter();\n /** Emitter for whether an event is being dropped and moving in progress */\n @Output() public moving = new EventEmitter<{}>();\n /** List of bookings for the current date and space */\n public event_list: Booking[] = [];\n /** Mapping of event IDs to overlap details */\n public overlap_details: HashMap = {};\n /** Mapping of positions of event in the day */\n public position_list: HashMap<{ top: number; height: number }> = {};\n /** Override for mapped position */\n public top: number;\n /** Client Rectangle for the container element box */\n public box: ClientRect;\n /** Whether the space list is in view */\n public in_view: boolean;\n /** ID of the booking with an action processing */\n public override_state: string;\n /** Map of bookings to whether they are loading */\n public loading: HashMap = {};\n /** Settings for day view */\n public settings: DayViewSettings = {} as any;\n\n /** Container element for the component contents */\n @ViewChild('view', { static: true }) private view: ElementRef;\n\n /** List of timeblocks to display */\n public time_blocks: Identity[] = this.generateTimeBlocks();\n\n /** Generate time blocks to display on the day view */\n private generateTimeBlocks(): Identity[] {\n const blocks: Identity[] = [];\n const date = DateNow(new Date()).startOfValue('hour');\n for (let i = 0; i < 24; i++) {\n blocks.push({\n id: date.setValue({ hour: i }).formatDate('HH:mm'),\n name: date.setValue({ hour: i }).formatDate('h:mma').toLocaleLowerCase(),\n });\n }\n return blocks;\n }\n constructor(\n private _service: ApplicationService,\n private _spaces: SpacesService,\n private _booking_state_service: BookingStateService,\n private _bookings: BookingsService,\n private _dialog: MatDialog,\n private cdr: ChangeDetectorRef,\n private _org: OrganisationService,\n ) {\n super();\n }\n\n /** Events to display for the active date */\n public events: Booking[] = []\n\n public ngOnInit(): void {\n this.events = this.filterEvents();\n this._service.initialised.pipe(first((_) => _)).subscribe(() => {\n this.settings = this._service.setting('app.day_view') || {};\n // this.subscription(\n // 'breakdown',\n // this._service\n // .listen('APP.breakdown')\n // .subscribe((state) => {\n // this.overflow_only = state;\n // this.events = [...this.filterEvents()];\n // })\n // );\n // this.subscription(\n // 'legend',\n // this._service\n // .listen('CONCIERGE.legend')\n // .subscribe((state) => (this.legend = state || {}))\n // );\n this.subscription(\n 'bookings',\n this._booking_state_service.filtered.subscribe((list) => {\n this.event_list = [...list];\n this.events = [...this.filterEvents()];\n this.cdr.detectChanges();\n })\n );\n this.checkInView();\n });\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n /* istanbul ignore else */\n if (changes.scroll) {\n this.checkInView();\n }\n if (changes.space) {\n this.event_list = [...this.event_list];\n this.timeout('in_view', () => this.checkInView(), 100);\n }\n /* istanbul ignore else */\n if (changes.last_update) {\n this.timeout('update_overlaps', () => this.calculateOverlaps(), 1000);\n }\n }\n\n //replace this with concierge space.comp filterEvents\n // private filterEvents(): Booking[] {\n // if (this.space) {\n // const bookings = this.event_list;\n // const list = bookings.filter((event) => {\n // if (this.override_state && this.override_state === event.icaluid) {\n // this.loading[event.id] = true;\n // }\n\n // const ignore = event.is_recurrent && event.recurrence_type === 'master';\n\n // return (\n // !ignore && !event.declined && // filtered declied bookings\n // event.room.email === this.space.email &&\n // (!this.overflow_only ||\n // event.setup[event.room.email] ||\n // event.breakdown[event.room.email])\n // );\n // }).map(e => new Booking({...e.toJSON()}) );\n\n // return list;\n // }\n // return [];\n // }\n\n private filterEvents(): Booking[] {\n if (!this.space) {\n return [];\n }\n \n return this.event_list.filter((event) => {\n // Mark as loading if override state matches.\n if (this.override_state && this.override_state === event.icaluid) {\n this.loading[event.id] = true;\n }\n \n const isRecurrentMaster = event.is_recurrent && event.recurrence_type === 'master';\n const isRoomEmailMatch = event.multi_rooms.some(room => room.email === this.space.email);\n \n // Determine if the event should be included based on setup or breakdown conditions.\n const isIncludedInSetupOrBreakdown = event.multi_rooms.some(room => {\n return event.setup[room.email] || event.breakdown[room.email];\n });\n \n return !isRecurrentMaster && isRoomEmailMatch && (!this.overflow_only || isIncludedInSetupOrBreakdown);\n }).map(event => new Booking({...event.toJSON()}));\n }\n\n /* istanbul ignore next */\n /**\n * Track by function for ngFor optimisation\n * @param index Index of the item\n * @param item Data associated with the item at the given index\n */\n public trackByFn(index: number, item: Booking) {\n return item.id || index;\n }\n\n /**\n * Calculate to overlap details for the booking events on the space\n */\n private calculateOverlaps() {\n const events = this.events.sort(\n (a, b) =>\n a.startDateTz.ms - b.startDateTz.ms ||\n a.duration - b.duration ||\n (a.title || '').localeCompare(b.title || '')\n );\n events.forEach((i) => (this.overlap_details[i.id] = { index: 0, total: 1 }));\n for (const bkn of events) {\n const bkn_start = bkn.startDateTz.startOfValue('minute');\n const bkn_end = bkn.endDateTz.startOfValue('minute');\n let count = 1;\n let index = 0;\n const collisions: Booking[] = [];\n for (const cmp of events) {\n /* istanbul ignore else */\n if (bkn.id !== cmp.id) {\n const cmp_start = cmp.startDateTz.startOfValue('minute');\n const cmp_end = cmp.endDateTz.startOfValue('minute');\n /* istanbul ignore else */\n if (\n bkn_start.isSameDate(cmp_start, 'minute') ||\n (bkn_start.isAfterDate(cmp_start) && bkn_start.isBeforeDate(cmp_end)) ||\n bkn_end.isSameDate(cmp_end, 'minute') ||\n (bkn_end.isAfterDate(cmp_start) && bkn_end.isBeforeDate(cmp_end))\n ) {\n count++;\n collisions.push(bkn);\n /* istanbul ignore else */\n if (\n events.findIndex((i) => i.id === bkn.id) >\n events.findIndex((i) => i.id === cmp.id)\n ) {\n index++;\n }\n }\n }\n }\n this.overlap_details[bkn.id] = { index: Math.max(0, index), total: count };\n }\n }\n\n /**\n * Check whether the space column is with the view of the\n */\n private checkInView() {\n /* istanbul ignore else */\n if (this.view && this.view.nativeElement) {\n const el = this.view.nativeElement;\n this.in_view =\n el.offsetLeft + this.scroll >= -240 &&\n el.offsetLeft + this.scroll <= window.innerWidth;\n this.inView.emit(this.in_view);\n }\n }\n\n /**\n * Initialise drag events\n */\n public initDrag() {\n this.box = this.view.nativeElement.getBoundingClientRect();\n this.dragging.emit(true);\n }\n\n /**\n * Cleanup after drag\n */\n public endDrag() {\n this.timeout('end_drag', () => (this.top = 0), 10);\n this.dragging.emit(false);\n }\n\n /**\n * Update top position of the dragged event placeholder\n * @param booking Booking being dragged\n * @param event Drag event\n */\n public updateDragTop(event: CdkDragMove) {\n /* istanbul ignore else */\n if (event.delta.y) {\n const y = event.pointerPosition.y;\n const top = (y - this.box.top - this.scroll_top) / this.box.height;\n const top_minutes = (Math.round((top * 24 * 60) / 15) * 15) / 60;\n this.top = (top_minutes / 24) * 100;\n\n }\n }\n\n\n\n\n\n public checkAvailabilityOnGivenTime(selectedBlockStart, selectedBlockEnd) {\n const runningBookings =\n this.events?.filter((bks) => {\n const startEpoch = new DateTZ({\n date: bks.start_epoch * 1000,\n is_local_tz: false,\n building_tz: bks.timezone,\n }).ms;\n const endEpoch = new DateTZ({\n date: bks.end_epoch * 1000,\n is_local_tz: false,\n building_tz: bks.timezone,\n }).ms;\n const hasValidBreakdown: boolean =\n bks.breakdown &&\n Object.values(bks.breakdown).some((value) => value !== null);\n if (selectedBlockStart.ms === endEpoch && hasValidBreakdown) {\n return true;\n } else\n return (\n (selectedBlockStart.ms >= startEpoch && selectedBlockStart.ms < endEpoch) ||\n (selectedBlockEnd.ms > startEpoch && selectedBlockEnd.ms < endEpoch)\n );\n }) || [];\n return !!runningBookings.length;\n }\n\n\t\t/** Whether booking has been ended */\n public expired(booking): boolean {\n\t\t\treturn booking.timeBasedStatusLabel === 'done';\n\t\t}\n\n\t\t\n}\n","\n\n
\n
\n
\n
\n
\n\n \n \n \n\t\t\n
\n
\n \n
\n
\n
\n \n\n\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { MatDialog } from '@angular/material/dialog';\nimport { first, take } from 'rxjs/operators';\n\nimport { BaseDirective, HashMap, Identity } from '@mckinsey-converge/base';\n// import { BookingModalComponent } from 'src/app/bookings/booking-modal/booking-modal.component';\n\nexport interface NavItem {\n\tdisplayName: string;\n\ticonName?: string;\n\troute?: string;\n\tmeta?:{}; \n\tchildren?: NavItem[];\n}\n\n\nimport {\n ApplicationService,\n BookingStateService,\n BookingStoreState,\n BuildingLevel,\n OrganisationService,\n selectBookingByIdResultsFromState,\n User,\n Booking,\n SpacesService,\n Space,\n Building,\n searchRoomsAndBookings\n} from '@mckinsey-converge/data-common';\n\n\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { UserStoreState } from '@mckinsey-converge/user';\nimport { Store } from '@ngrx/store';\nimport { BuildingStoreState } from 'libs/buildings/src';\nimport { MyBookingsStoreState } from '@mckinsey-converge/bookings';\nimport { Subscription } from 'rxjs';\nimport { DropdownOpion } from '@mckinsey-converge/ui';\n\nexport type RoomBookingStoreState = BookingStoreState & BuildingStoreState & MyBookingsStoreState & UserStoreState;\n\n@Component({\n selector: 'staff-calendar',\n templateUrl: './staff-calendar.component.html',\n styleUrls: ['./staff-calendar.component.scss']\n})\nexport class StaffCalendarComponent extends BaseDirective implements OnInit {\n /** Currently selected date, starts out with no timezone data, gets updated later */\n public dateTz: DateTZ = DateNow(new Date());\n\n /** ID of the currently selected level */\n public active_level: string = '';\n /** ID of the currently selected type */\n public active_type: string = '';\n /** List of levels available for the active building */\n public levels: BuildingLevel[] = [];\n /** List of space types available for the active building */\n public space_types: Identity[] = [];\n /** Whether to show only items with a setup and/or breakdown time */\n public only_overflow: boolean;\n \n\n\t\tprivate spaceTypesSubscription: Subscription;\n\n\t\tevent_list: Booking[] = [];\n\t\tsearchStr: any;\n\t\tfoundSearchLength: number = 0;\n\t\tsearchedCounter: any = 1;\n\t\tshowSrchWarning: boolean;\n\t\ttotalFoundItem: number = 0;\n spaces: Space[] = [];\n\t\tbuildingsInSameCity: Building[];\n\t\tbuildingMenuItems: NavItem[];\n\t\tactiveBuildingName: string;\n\t levelsDD: any = [];\n\t roomLevelDD: { ddBoxClass: string; options: any; defaultSelected: any; onChangeCallback: any; };\n \n\n\n constructor(\n private _service: ApplicationService,\n private _org: OrganisationService,\n private _dialog: MatDialog,\n private _router: Router,\n private _route: ActivatedRoute,\n private _booking_state_service: BookingStateService,\n private _spaces: SpacesService,\n private store: Store,\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this._service.title = 'Day View';\n\n\t\t\t\tthis._org.initialised.pipe(first((_) => _)).subscribe(() => {\n // Init dateTz here once the organization data is loaded.\n this.dateTz = new DateTZ({ date: this.dateTz.ms, is_local_tz: false, building_tz: this.timezone });\n this.subscription(\n 'route.params',\n this._route.paramMap.subscribe((params) => {\n /* istanbul ignore else */\n if (params.has('level') && this.active_level !== params.get('level')) {\n const level = this._org.levelWithID(params.get('level'));\n /* istanbul ignore else */\n if (level) {\n const building = this._org.buildings.find(\n (bld) => bld.id === level.building_id\n );\n /* istanbul ignore else */\n if (building) {\n this.active_level = level.id;\n this._org.building = building;\n this._booking_state_service.setZone(this.active_level || this._org.building.id);\n }\n }\n }\n })\n );\n this.subscription(\n 'building',\n this._org.listen('active_building').subscribe(() => {\n this._booking_state_service.updateRoomList();\n // Update dateTz here when the building is changed.\n\t\t\t\t\t\t\t\t\t\tthis.dateTz = new DateTZ({\n\t\t\t\t\t\t\t\t\t\t\tdate: this.dateTz.ms,\n\t\t\t\t\t\t\t\t\t\t\tis_local_tz: false,\n\t\t\t\t\t\t\t\t\t\t\tbuilding_tz: this.timezone,\n\t\t\t\t\t\t\t\t\t\t});\n const building = this._org.building;\n\n /* istanbul ignore else */\n if (!building.levels.find((lvl) => lvl.id === this.active_level)) {\n this.active_level = building?.levels[0]?.id;\n this.updateLevel();\n }\n\t\t\t\t\t\t\t\t\t\tthis.initSpace();\n\n this.levels = [{ id: '', name: 'All Levels' } as any].concat(building.levels);\n\t\t\t\t\t\t\t\t\t\tthis.levels.sort((a, b) => b.name.localeCompare(a.name, undefined, {\n\t\t\t\t\t\t\t\t\t\t\t\tnumeric: true,\n\t\t\t\t\t\t\t\t\t\t\t\tignorePunctuation: true,\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\tthis.levelsDD = [];\n\t\t\t\t\t\t\t\t\t\tthis.levels.forEach(el => {\n\t\t\t\t\t\t\t\t\t\t\tthis.levelsDD.push({\n\t\t\t\t\t\t\t\t\t\t\t\t display: el.name, value: el.id, meta: {} \n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\t\t\tthis.roomLevelDD = {\n\t\t\t\t\t\t\t\t\t\t\tddBoxClass: 'room-level',\n\t\t\t\t\t\t\t\t\t\t\toptions: this.levelsDD,\n\t\t\t\t\t\t\t\t\t\t\tdefaultSelected: this.levelsDD.filter(el => el.value === this.active_level )[0],\n\t\t\t\t\t\t\t\t\t\t\tonChangeCallback: this.onChangeActiveLevel.bind(this)\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\tthis.buildingsInSameCity = this._org.buildings.filter(\n\t\t\t\t\t\t\t\t\t\t\t(_) => _.city === building.city\n\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\tthis.generateBuildingMenu();\n\n \n })\n );\n \n });\n\n this.subscription(\n 'bookings',\n this._booking_state_service.filtered.subscribe((list) => {\n this.event_list = [...this.filterEvents(list)];\n\n })\n );\n }\n\n private filterEvents(list): Booking[] {\n\t\t\tconst bookings = list;\n\t\t\tconst filterd_booking = bookings.filter((event) => {\n\t\t\t\t\tconst ignore = event.is_recurrent && event.recurrence_type === 'master';\n\t\t\t\t\treturn ( !ignore );\n\t\t\t});\n\n\t\t\treturn filterd_booking || [];\n }\n\n public initSpace() {\n this.subscription(\n 'spaces',\n this._spaces.listen('list').subscribe((spaces) => {\n const zone_id = !this.active_level ? this._org.building.id : this.active_level;\n this.spaces = this._spaces.filter((_) => _.zones.indexOf(zone_id) >= 0 && _.bookable);\n })\n );\n }\n\n // isIncludes = (item: any, field: string, searchVaue: string) => (item && item[field] && item[field].toLowerCase().includes(searchVaue));\n \n searchBooking(value) {\n\n // Resetting warning flag\n this.showSrchWarning = false;\n\n // Converting search value to lower case for case-insensitive comparison\n const searchValue = value.toLowerCase().trim();\n \n // Combining event list and space arrays into one arrya for searchig \n const allItems = [...this.event_list, ...this.spaces];\n // Filtering the combine array to find matching room or booking\n const filteredItems = searchRoomsAndBookings(allItems, searchValue);\n \n // Updating the total number of found items in serach\n this.totalFoundItem = filteredItems.length;\n\n // Setting showSrchWarning flag if no result were found \n this.showSrchWarning = !this.totalFoundItem;\n\n // Updating lenght of found items for later use\n this.foundSearchLength = this.totalFoundItem - 1;\n\n if(this.searchStr !== value) {\n // Setting the first found as the current viewing item\n this._service.set('CONCIERGE.day_view.viewing', filteredItems[0]);\n // Resetting the search counter\n this.searchedCounter = 0;\n }\n else {\n // Handling case where seached string is the same as previou one \n // Incrementing search counter, loopoing back to 0 if it exceed the length of found items\n this.searchedCounter = ( this.searchedCounter < this.foundSearchLength ) ? this.searchedCounter + 1 : 0\n // Setting the next found items as the current viewing item\n this._service.set('CONCIERGE.day_view.viewing', filteredItems[this.searchedCounter]);\n }\n\n // Storing the current search string for future camparison\n this.searchStr = value;\n }\n\n\n public ngOnDestroy(): void {\n this._service.set('CONCIERGE.day_view.viewing', []);\n }\n\n\n \n\n // that encapsulates the common elements.\n public get timezone() {\n return this._org.building?.timezone || localStorage.getItem('CONCIERGE.timezone');\n }\n\n public updateDateTz(dateTz: DateTZ) {\n this.dateTz = dateTz;\n }\n\n public updateLevel() {\n this._booking_state_service.setZone(this.active_level || this._org.building.id);\n\t\t\t\tthis.initSpace();\n // this._router?.url?.includes('/booking-calendar') && this._router.navigate(['/home/results/booking-calendar', this.active_level], {relativeTo: this._route});\n }\n\n\t\tpublic generateBuildingMenu() {\n\n\n\t\t\tif(this.buildingsInSameCity.length) {\n\n\t\t\t\tconst menuItem: NavItem[] = [{\n\t\t\t\t\tdisplayName: this._org.building.name,\n\t\t\t\t\ticonName: 'close',\n\t\t\t\t\tchildren:[]\n\t\t\t\t}];\n\n\n\t\t\t\tthis.buildingsInSameCity.forEach(el => {\n\t\t\t\t\tconst buildingLevels: NavItem[] = [];\n\n\t\t\t\t\tel.levels.forEach(lvl => buildingLevels.push({\n\t\t\t\t\t\tdisplayName: lvl.name,\n\t\t\t\t\t\tchildren: [],\n\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\tlevel_id : lvl.id,\n\t\t\t\t\t\t\tbuilding_id: lvl.building_id\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t);\n\n\t\t\t\t\tbuildingLevels.push({ displayName: 'All Levels', children: [], meta: {\n\t\t\t\t\t\t\tlevel_id : '',\n\t\t\t\t\t\t\tbuilding_id: el.id\n\t\t\t\t\t\t} \n\t\t\t\t\t});\n\n\t\t\t\t\tmenuItem[0].children.push({\n\t\t\t\t\t\tdisplayName: el.name,\n\t\t\t\t\t\tchildren: buildingLevels,\n\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\tbuilding_id: el.id\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t});\n\n\t\t\t\tthis.buildingMenuItems = menuItem;\n\n\t\t\t}\n\n\t\t\t\n\t\t}\n\n\t\tpublic updateActiveBuilding (node) {\n\t\t\t// console.log(node);\n\t\t\tconst building = this.buildingsInSameCity.filter(bld => bld.id === node.meta.building_id)[0];\n\t\t\tthis._org.building = building;\n\t\t\tthis.activeBuildingName = building.name;\n\n\t\t\n\t\t\t\tthis.levels = [{ id: '', name: 'All Levels' } as any].concat(building.levels);\n\t\t\t\tthis.levels.sort((a, b) => b.name.localeCompare(a.name, undefined, {\n\t\t\t\t\t\tnumeric: true,\n\t\t\t\t\t\tignorePunctuation: true,\n\t\t\t\t\t})\n\t\t\t\t);\n\n\n\t\t\t\tthis.active_level = node.meta.level_id;\n\t\t\t\tthis.roomLevelDD.defaultSelected = this.levelsDD.filter(el => el.value === this.active_level )[0];\n\t\t\t\tthis.updateLevel();\n\t\t}\n\n\t\tonChangeActiveLevel(level:any) {\n\t\t\tthis.active_level = level.value;\n\t\t\t\n\t\t\tthis.updateLevel();\n\n\t\t}\n\n\t\t\n}\n\n","
\n
\n \n
\n \n
\n \n \n 0\">\n
\n {{activeBuildingName || item.displayName}}\n
\n \n
\n
\n \n
\n \n \n
\n
\n \n 1\">\n\n
\n \n \n \n
{{ totalFoundItem }}
\n \n
\n \n No search found!\n
\n
\n
\n\n \n \n \n \n
\n\n
\n \n
\n
\n
\n\n","import {\n Component,\n ElementRef,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Renderer2,\n SimpleChanges,\n ViewChild, NgZone, DoCheck, ChangeDetectionStrategy, ChangeDetectorRef\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { MatDialog } from '@angular/material/dialog';\nimport { filter, first } from 'rxjs/operators';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { Space } from '@mckinsey-converge/data-common';\nimport { ApplicationService } from '@mckinsey-converge/data-common';\nimport { Booking } from '@mckinsey-converge/data-common';\nimport { HashMap, Identity } from '@mckinsey-converge/base';\n// import { MeetingDetailsModalComponent } from 'src/app/calendar/meeting-details-modal/meeting-details-modal.component';\nimport { SpacesService } from '@mckinsey-converge/data-common';\nimport { OrganisationService } from '@mckinsey-converge/data-common';\nimport { BookingStateService } from '@mckinsey-converge/data-common';\nimport { DateNow, DateTZ, toMiddayUTC } from '@mckinsey-converge/date-tz';\nimport { isToday } from 'date-fns';\nimport { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\n\n\n\nconst UPDATE_INTERVAL = 10;\n\n@Component({\n selector: 'day-view-timeline',\n templateUrl: './timeline.component.html',\n styleUrls: ['./timeline.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DayViewTimelineComponent\n extends BaseDirective\n implements OnInit, OnChanges, OnDestroy\n{\n /** DateTZ object of the active date */\n @Input() public dateTz: DateTZ = DateNow(new Date());\n /** ID of the active level */\n @Input() public level: string;\n /** ID of the room type to filter displayed spaces by */\n @Input() public space_type: string;\n /** List of shown legend items */\n @Input() public legend: HashMap = {};\n /** Whether to show only items with a setup and/or breakdown time */\n @Input() public overflow_only: boolean;\n /** Whether space bookings are being loaded */\n @Input() public loading: boolean;\n\n @Input() undo_action;\n\n /** List of timeblocks to display */\n public time_blocks: Identity[] = this.generateTimeBlocks();\n /** Top value of the content scroll */\n public scroll_top: number = 0;\n /** Left value of the content scroll */\n public scroll_left: number = 0;\n /** Offset of the scroll value when starting a drag */\n public scroll_offset: number = 0;\n /** List of spaces to display for */\n public spaces: Space[] = [];\n /** List of spaces to display for */\n public filtered_spaces: Space[] = [];\n /** Mapping of space ids to whether they are in view */\n public in_view: { [id: string]: boolean } = {};\n /** Percent of the day that is now */\n public now: number;\n /** Currently active hour of the day */\n public active_hour: string;\n /** Mapping of spaces loading booking date */\n public loading_space: { [id: string]: boolean } = {};\n /** Booking ID to open modal for */\n public view_id: string;\n /** Last update time for the space bookings */\n public last_update: number = 0;\n /** Whether an event is being dragged */\n public is_dragging: boolean;\n /** Client rectangle for the scroll area */\n public box: ClientRect;\n /** Whether to show the holding bay */\n // public show_holding_bay: boolean = true;\n\n public space_zones: string[] = [];\n\n public is_today: boolean = this.isToday();\n public modalInitialized = false;\n\n /** Scrollable area of the day view */\n @ViewChild('scroll_area', { static: true }) private scroll_area: ElementRef;\n\n @ViewChild(CdkVirtualScrollViewport) virtualScroll: CdkVirtualScrollViewport;\n isEventMoving: boolean = false;\n bookingEl: any;\n timeoutID: any;\n column: any;\n\n /** Update scroll box when the window is resized */\n @HostListener('window:resize')\n public onResize() {\n if (this.scroll_area['elementRef'].nativeElement) {\n this.box = this.scroll_area['elementRef'].nativeElement.getBoundingClientRect();\n }\n }\n\n public get is_loading() {\n return this._booking_state_service.loading;\n }\n\n public isToday() {\n return new DateTZ({\n date: toMiddayUTC(this.dateTz).ms,\n is_local_tz: false,\n building_tz: this._org.building?.timezone || localStorage.getItem('CONCIERGE.timezone'),\n }).isSameDate(\n new DateTZ({\n date: Date.now(),\n is_local_tz: false,\n building_tz: this._org.building?.timezone || localStorage.getItem('CONCIERGE.timezone'),\n }),\n 'day'\n );\n }\n\n constructor(\n private _service: ApplicationService,\n private _spaces: SpacesService,\n private _booking_state_service: BookingStateService,\n private _org: OrganisationService,\n private _route: ActivatedRoute,\n private _renderer: Renderer2,\n private _dialog: MatDialog,\n private _zone: NgZone,\n private cdr: ChangeDetectorRef,\n ) {\n super();\n }\n\n public get holding_bay(): Space {\n const bld = this._org.building;\n /* istanbul ignore else */\n if (bld && bld.holding_bay) {\n return this._spaces.find(bld.holding_bay);\n }\n return null;\n }\n\n public ngOnInit(): void {\n this._spaces.initialised.pipe(first((_) => _)).subscribe(() => {\n this._org.initialised.pipe(first((_) => _)).subscribe(() => {\n this._booking_state_service.startPollingEveryFiveMin();\n const zone_id = !this.level ? this._org.building.id : this.level;\n this.spaces = this._spaces.filter((_) => _.zones.indexOf(zone_id) >= 0);\n this.init();\n this.initSpaces();\n // Update time\n this.updateTime();\n this._zone.runOutsideAngular(() => {\n this.interval('time', () => this.updateTime(), 15 * 1000);\n });\n // R--- return to see if the booking service needs updating\n this.subscription(\n 'dateTz',\n this._booking_state_service.dateTz.subscribe((dateTz) => {\n // const dateTz = new DateTZ({date});\n this.dateTz = dateTz;\n })\n );\n });\n });\n this.is_today = this.isToday();\n\n this.subscription(\n 'spaces',\n this._spaces.listen('list').subscribe((spaces) => {\n const zone_id = !this.level ? this._org.building.id : this.level;\n this.spaces = this._spaces.filter((_) => _.zones.indexOf(zone_id) >= 0);\n this.init();\n this.initSpaces();\n // Update time\n this.updateTime();\n })\n );\n\n }\n\n ngAfterViewInit() {\n const d2 = this._renderer.createElement('div');\n this._renderer.addClass(d2, 'adjustable-room-block-2');\n this.virtualScroll.elementRef && this._renderer.appendChild(this.virtualScroll.elementRef.nativeElement, d2);\n }\n\n\n public ngOnChanges(changes: SimpleChanges): void {\n /* istanbul ignore else */\n if (changes.level && this._org.building) {\n const zone_id = !this.level ? this._org.building.id : this.level;\n this.spaces = this._spaces.filter((_) => _.zones.indexOf(zone_id) >= 0);\n this.updateTime();\n this.initSpaces();\n }\n if (changes.space_type) {\n this.initSpaces();\n }\n }\n\n public ngOnDestroy() {\n if (this._booking_state_service?.stopPolling) this._booking_state_service?.stopPolling();\n }\n\n public init() {\n this._service.title = 'Day View';\n this.subscription(\n 'viewing',\n this._service\n .listen('CONCIERGE.day_view.viewing')\n .subscribe((event) => this.scrollIntoView(event) )\n );\n // Subscribe to route query changes\n this.subscription(\n 'route.query',\n this._route.queryParamMap.subscribe((params) => {\n /* istanbul ignore else */\n if (params.has('view') || localStorage.getItem('CONCIERGE.view_booking')) {\n this.view_id = params.get('view');\n const details = localStorage.getItem('CONCIERGE.view_booking');\n const spaceJson = localStorage.getItem('CONCIERGE.view_booking_space');\n /* istanbul ignore else */\n if (details) {\n const space: Space | undefined = spaceJson\n ? new Space(JSON.parse(spaceJson))\n : undefined;\n const booking = new Booking({ ...JSON.parse(details), room: space });\n if(!this.modalInitialized) {\n this.modalInitialized = true;\n // this.view(booking, space);\n localStorage.removeItem('CONCIERGE.view_booking');\n localStorage.removeItem('CONCIERGE.view_booking_space');\n }\n }\n }\n })\n );\n \n /* istanbul ignore else */\n if (this.scroll_area['elementRef'].nativeElement) {\n this.box = this.scroll_area['elementRef'].nativeElement.getBoundingClientRect();\n }\n }\n\n /**\n * Update scroll parameters to match the change in the scroll position\n * @param event\n */\n public updateScroll(event) {\n this.scroll_top = event.target.scrollTop;\n this.scroll_left = event.target.scrollLeft;\n }\n\n\n\n /** Generate time blocks to display on the day view */\n private generateTimeBlocks(): Identity[] {\n const blocks: Identity[] = [];\n const date = DateNow(new Date()).startOfValue('hour');\n for (let i = 0; i < 24; i++) {\n blocks.push({\n id: date.setValue({ hour: i }).formatDate('HH:mm'),\n name: date.setValue({ hour: i }).formatDate('h:mma').toLocaleLowerCase(),\n });\n }\n return blocks;\n }\n\n /** Update the now line position */\n private updateTime() {\n const now = new DateTZ({\n date: Date.now(),\n is_local_tz: false,\n building_tz: this._org.building?.timezone || localStorage.getItem('CONCIERGE.timezone'),\n });\n this.now = (now.dateHour + now.minutes / 60) / 24;\n this.active_hour = now.startOfValue('hour').formatDate('HH:mm');\n this.is_today = this.isToday();\n this.cdr.detectChanges();\n }\n\n\n /**\n * Scroll booking to the event on the day view\n * @param booking Booking to scroll into view\n */\n private scrollIntoView(searchData: Booking | Space ) {\n if (searchData && this.scroll_area && this.scroll_area['elementRef'].nativeElement) {\n this.column && this._renderer.removeClass(this.column, 'wild');\n\n /** Select space column element using space id in search data - \n * space.id if seach data is space object or data.space.id if search data is booking object\n * \n */\n const spaceId = searchData['space'] ? searchData['space'].id : searchData.id;\n const element: HTMLDivElement = this.scroll_area['elementRef']\n .nativeElement.querySelector(`#space-col-${spaceId}`);\n\n\n this.column = element;\n\n this.bookingEl && this._renderer.removeClass(this.bookingEl, 'wild');\n if(searchData['space'] && searchData['space'].id) \n this.bookingEl = element?.querySelector(`#${searchData.id}`)?.querySelector('.event-container');\n\n\n /* istanbul ignore else */\n if (element) {\n this.timeoutID && clearTimeout(this.timeoutID);\n this._renderer.addClass(element, 'wild');\n this.bookingEl && this._renderer.addClass(this.bookingEl, 'wild');\n const scroll_box = this.scroll_area['elementRef'].nativeElement.getBoundingClientRect();\n\n let date_percent;\n if(searchData['space'] && searchData['space'].id) {\n date_percent = Math.abs(\n searchData['startDateTz'].dateDiff(\n searchData['startDateTz'].startOfValue('day'),\n 'minutes'\n )\n ) / (24 * 60);\n }\n \n\n const box = element.getBoundingClientRect();\n const left = box.left - scroll_box.left + this.scroll_area['elementRef'].nativeElement.scrollLeft - 500;\n const top = (searchData['space'] && searchData['space'].id) ? \n this.scroll_area['elementRef'].nativeElement.scrollHeight * date_percent - 10 :\n 0\n\n\n this.scroll_area['elementRef'].nativeElement.scrollTo({\n left: left,\n top: top,\n behavior: 'smooth',\n });\n\n this.timeoutID = setTimeout(()=> {\n element && this._renderer.removeClass(element, 'wild');\n this.bookingEl && this._renderer.removeClass(this.bookingEl, 'wild');\n }, 3000);\n }\n }\n }\n\n /**\n * Setup an auto-scroll for the display view\n * @param x\n * @param y\n */\n public scrollView(x: number, y: number) {\n /* istanbul ignore else */\n if (x || y) {\n this.scroll_area['elementRef'].nativeElement.scrollTop += y || 0;\n this.scroll_area['elementRef'].nativeElement.scrollLeft += x || 0;\n /* istanbul ignore else */\n if (\n (y &&\n this.scroll_area['elementRef'].nativeElement.scrollTop >=\n this.scroll_area['elementRef'].nativeElement.scrollHeight) ||\n (x &&\n this.scroll_area['elementRef'].nativeElement.scrollLeft >=\n this.scroll_area['elementRef'].nativeElement.scrollWidth) ||\n (y && this.scroll_area['elementRef'].nativeElement.scrollTop <= 0) ||\n (x && this.scroll_area['elementRef'].nativeElement.scrollLeft <= 0)\n ) {\n this.clearInterval('auto_scroll');\n }\n // this.updateScroll({ target: this.scroll_area['elementRef'].nativeElement });\n }\n }\n\n public clearSelected() {\n this._service.set('CONCIERGE.day_view.viewing', null);\n }\n\n public cancelScroll() {\n this.clearInterval('auto_scroll');\n }\n\n /** */\n\n // public dragChange(is_dragging: boolean) {\n // if (is_dragging) {\n // this.scroll_offset = this.scroll_area['elementRef'].nativeElement.scrollTop; \n // this.subscription(\n // 'listen_move',\n // this._renderer.listen('window', 'mousemove', (event: MouseEvent) => {\n // const position = { x: event.clientX, y: event.clientY };\n // const y = position.y > this.box.bottom - this.box.height * 0.05\n // ? 1\n // : position.y < this.box.top + this.box.height * 0.05\n // ? -1\n // : 0;\n // const x = position.x > this.box.right - this.box.width * 0.05\n // ? 1\n // : position.x < this.box.left + this.box.height * 0.05\n // ? -1\n // : 0;\n // this.scrollView(x * 5, y * 5);\n // this._zone.runOutsideAngular(() => {\n // this.interval('auto_scroll', () => {\n // return this.scrollView(x * 40, y * 40) \n // }, 15);\n // });\n // this.cdr.detectChanges();\n // })\n // );\n // this.clearInterval('bookings');\n // } else {\n // this.cancelScroll();\n // this.unsub('listen_move');\n // }\n // }\n\n private initSpaces() {\n const holding_bay = this.holding_bay;\n this.filtered_spaces = this.spaces.filter(\n (i) =>\n (!this.space_type || i.zones.indexOf(this.space_type) >= 0) &&\n (!holding_bay || i.id !== holding_bay.id) &&\n i.bookable\n );\n this.filtered_spaces.sort((a, b) => a.local_name.localeCompare(b.local_name));\n this.space_zones = this.spaces.map((i) => `space-col-${i.id}`);\n }\n\n\n\n\t// public onEventDragging(isDragging: boolean): void {\n\t// \t\t// Check if dragging is initiated\n\t// \t\tif (isDragging) {\n\t// \t\t\t// Store the current scroll position\n\t// \t\t\tthis.scroll_offset = this.scroll_area['elementRef'].nativeElement.scrollTop;\n\t// \t\t\t// Subscribe to mouse move events\n\t// \t\t\tthis.subscribeToMouseMove();\n\t// \t\t\t// Clear existing interval for bookings\n\t// \t\t\tthis.clearInterval('bookings');\n\t// \t\t} else {\n\t// \t\t\t// Cancel scroll operation\n\t// \t\t\tthis.cancelScroll();\n\t// \t\t\t// Unsubscribe from mouse move events\n\t// \t\t\tthis.unsubscribeFromMouseMove();\n\t// \t\t}\n\t// }\n\n\t// Subscribe to mouse move events and handle scroll logic\n\t// private subscribeToMouseMove(): void {\n\t// \tthis.subscription(\n\t// \t\t'listen_move',\n\t// \t\tthis._renderer.listen('window', 'mousemove', (event: MouseEvent) => {\n\t// \t\t\t// Get mouse position\n\t// \t\t\tconst position = { x: event.clientX, y: event.clientY };\n\t// \t\t\t// Calculate scroll direction based on mouse position\n\t// \t\t\tconst [x, y] = this.calculateScrollDirection(position);\n\t// \t\t\t// Scroll the view based on calculated direction\n\t// \t\t\tthis.scrollView(x * 5, y * 5);\n\t// \t\t\t// Run auto-scroll logic\n\t// \t\t\tthis.runAutoScroll(x, y);\n\t// \t\t\t// Detect changes to update the view\n\t// \t\t\tthis.cdr.detectChanges();\n\t// \t\t})\n\t// \t);\n\t// }\n\n\t// Calculate scroll direction based on mouse position\n\t// private calculateScrollDirection(position: { x: number, y: number }): [number, number] {\n\t// \tconst tolerance = 0.05;\n\t// \tconst x = this.calculateDirection(position.x, this.box.left, this.box.right, tolerance);\n\t// \tconst y = this.calculateDirection(position.y, this.box.top, this.box.bottom, tolerance);\n\t// \treturn [x, y];\n\t// }\n\n\t// Calculate direction based on mouse position and element boundaries\n\t// private calculateDirection(pos: number, min: number, max: number, tolerance: number): number {\n\t// \tif (pos > max - this.box.width * tolerance) {\n\t// \t\t\treturn 1; // Scroll right\n\t// \t} else if (pos < min + this.box.width * tolerance) {\n\t// \t\t\treturn -1; // Scroll left\n\t// \t} else {\n\t// \t\t\treturn 0; // Do not scroll\n\t// \t}\n\t// }\n\n\t// Run auto-scroll logic\n\t// private runAutoScroll(x: number, y: number): void {\n\t// \tthis._zone.runOutsideAngular(() => {\n\t// \t\t\tthis.interval('auto_scroll', () => this.scrollView(x * 10, y * 10), 10);\n\t// \t});\n\t// }\n\n\t// Unsubscribe from mouse move events\n\t// private unsubscribeFromMouseMove(): void {\n\t// \tthis.unsub('listen_move');\n\t// }\n\n // public movingEvent(booking) {\n // this.isEventMoving = booking.isMoving;\n // this.loading_space[booking.movingId] = booking.isMoving;\n \n // }\n\n}\n\n","
\n\t
\n\t\t\n\t
\n\n\t
\n\t\t
\n\t\t\t\n\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
Time
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
{{ timeslot.name }}
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
{{ room.local_name }}
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tCapacity - {{ room.capacity || '0' }}\n\t\t\t\t\t\t\t{{ room.capacity === 1 ? 'person' : 'people' }}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\n\t\t
\n\n\t\t
\n\t\t\t
\n\t\t
\n
\n
\n
\n\t
\n\t\t
Moving meeting
\n\t\t
\n\t\t\t\n\t\t
\n\t
\n
\n","import {\n Component,\n Input,\n Output,\n EventEmitter\n} from '@angular/core';\nimport {\n Router\n} from '@angular/router';\nimport {\n BaseDirective,\n} from '@mckinsey-converge/base';\nimport {\n generateFeedbackUrl,\n Urls\n} from '../../utilities/urls';\nimport {\n Store\n} from '@ngrx/store';\nimport {\n Booking,\n Building,\n BookingStoreState,\n clearBookingFormData,\n cateringAllowed,\n openBookingSurvey,\n roomHasCateringHours\n} from '@mckinsey-converge/data-common';\n\nexport enum TopBarHeaderMode {\n Light = 'light',\n Dark = 'dark',\n}\n\nexport interface statusObject {\n text: string,\n title: string,\n image: string,\n}\n\n@Component({\n selector: 'booking-confirmation',\n template: `\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n

{{ data?.isEditSeries || (booking.is_recurrent && booking.recurrence_type === 'master') ? 'Recurring Series' : 'Booking' }} {{data?.status.title}}

\n
\n \n \n \n
\n
\n
\n

{{ booking.title }}

\n

Room is no longer available for your chosen date and time

\n
\n \n
\n
Status: {{data?.status.text}}
\n
Date: {{data?.dateString}}
\n
Time: {{data?.timeString}}
\n
{{data?.typeString}} meeting ({{data?.durationString}})
\n
\n
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
{{booking?.recurrence_period === 'list' ? 'Specific dates' : booking?.recurrence_period | titlecase}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t - Conflicts({{data?.isConflictWithOccurences()?.total_Conflicts}}) \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
Start date: {{data?.dateString}}
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
End date: {{data?.endDateString}}
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
Time: {{data?.timeString}}
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
{{data?.type}} meeting ({{data?.durationString}})
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\n
\n \n
\n
\n
\n
\n
\n \n \n \n
\n
\n
\n
\n \n
\n Address: {{building.address}},\n {{building.city}}\n
\n
Room: {{booking.space.local_name}}
\n
Room Capacity: {{booking.space.capacity}}
\n
\n \n
\n \n \n \n \n
\n
\n
\n
\n \n
\n \n

{{ data?.status.text }}

\n
\n
\n \n
\n \n

\n \n

\n
\n
\n
\n
\n
\n
\n
\n
\n \n

{{booking.organiser.name}}

\n

{{attendees}}

\n

{{company}}

\n

{{charge_code}}

\n

{{headcount}}

\n

{{notes}}

\n

\n
\n \n

\n

\n

\n

\n

\n

\n \n \n \n

\n
\n
\n
\n
\n

Catering is available for this meeting room

\n Add catering\n\n \n
\n
\n
\n
\n \n

\n

\n

 

\n \n
\n\n
\n
\n
\n

Ooops - we're sorry!

\n

Unfortunately your selected room has been booked by another user

\n

Please try searching for another room.

\n
\n
\n
\n
\n
\n \n
\n \n
\n
\n \n
\n \n
\n
\n
\n
\n
\n `,\n styleUrls: ['./booking-confirmation.component.scss']\n})\nexport class BookingConfirmationComponent extends BaseDirective {\n /** The theme to use **/\n @Input() public mode: TopBarHeaderMode = TopBarHeaderMode.Light;\n\n @Input() public confirmed: boolean;\n @Input() public loading: boolean;\n\n @Input() public modal: boolean;\n\t\t@Input('dataForConfirmation') public data: any; // consolidated data using for confirmation template\n\n /** Emitter for close events */\n @Output() public callback = new EventEmitter();\n\n public currentPage: string;\n\n\t\tpublic get booking(): Booking {\n\t\t\treturn this.data?.booking\n\t\t};\n\n\n public get building(): Building {\n return this.data?.booking.room.building;\n };\n\n public get disableCateringButton(): boolean {\n return !cateringAllowed(this.data?.booking, this.building);\n }\n\n public get charge_code() {\n return (this.data?.booking.equipment_codes || {})[\n this.data?.booking.room.email\n ] || 'No Charge Code'\n }\n\n public get headcount() {\n return (this.data?.booking.expected_attendees || {})[\n this.data?.booking.room.email\n ] || 0\n }\n\n public get attendees() {\n const a = Array.isArray(this.data?.booking.attendees) ? this.data?.booking.attendees.map(u => u?.name ? u.name : '') : [];\n return a.join(', ');\n }\n\n public get company() {\n return this.data?.booking.company.join(', ');\n }\n\n public get notes() {\n const note = this.data?.booking.notes.find(n => n.type === 'equipment');\n return note ? note.message : '';\n }\n\n public get feedback() {\n return generateFeedbackUrl(this.currentPage);\n }\n\n public get roomHasCatering() {\n return roomHasCateringHours(this.building, this.data?.booking?.space) && cateringAllowed(this.data?.booking, this.building);\n }\n\n public listItems(order) {\n return order.items.map(i => `(${i.amount}) ${i.name}`).join(', ');\n }\n\n public formatDeliveryTime(order) {\n return this.data?.booking.startDateTz.addValue({ minutes: order?.delivery_time }).formatDate(\"h:mma\");\n }\n\n constructor(\n private store: Store,\n private _router: Router,\n ) {\n super();\n }\n\n public getStatusColor (statusText: string): string {\n switch (statusText) {\n case 'confirmed':\n return 'approved'\n case 'unavailable':\n return 'cancelled'\n default:\n return statusText;\n }\n }\n\n public hasData() {\n return (this.confirmed && !this.loading) || this.isUnavailable();\n }\n\n public goToHelp() {\n window.open(Urls.Help);\n }\n\n public async returnHome() {\n \n if (this.modal) {\n this.confirmed = false;\n this.loading = false;\n this.callback.emit();\n } else {\n if(!this.isUnavailable()){\n this.store.dispatch(openBookingSurvey());\n // Clear everything out\n this.store.dispatch(clearBookingFormData());\n this._router.navigate(['/', 'home']);\n } else {\n await this._router.navigate(['/home', 'results'], { queryParams: { display: 'list' }});\n }\n }\n }\n\n public async startCatering() {\n this.store.dispatch(clearBookingFormData());\n this.confirmed = false;\n this.loading = false;\n this.callback.emit();\n await this._router.navigate(['/', 'home', 'catering', this.data?.booking.id]);\n }\n\n public isUnavailable() {\n return this.data?.status.text.toLowerCase() === 'unavailable'\n }\n}\n","import {\n Component,\n OnInit,\n} from '@angular/core';\nimport {\n select,\n} from '@ngrx/store';\nimport {\n Booking,\n BookingFormData,\n selectActiveForm,\n checkCollisions,\n getStatusErrorMessage,\n clearBookingFormData,\n BOOKING_STATUS,\n\t\tSpace,\n\t\tgetLastDateFromList\n} from '@mckinsey-converge/data-common';\nimport {\n distinctUntilChanged,\n} from 'rxjs/operators';\nimport { BookingFormBaseComponent } from './booking-form-base.component';\nimport { ConflictsModalComponent, ConflictsModalComponentData } from '@mckinsey-converge/ui';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DialogEvent, shorterLocalDateFormatString } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'app-booking-create',\n templateUrl: './booking-form-base.component.html',\n styleUrls: ['./booking-create.component.scss']\n})\nexport class BookingCreateComponent extends BookingFormBaseComponent implements OnInit {\n\n\n public ngOnInit(): void {\n super.ngOnInit();\n this.subscription('activeForm', this.store.pipe(\n select(selectActiveForm),\n distinctUntilChanged()\n ).subscribe((next: BookingFormData | undefined) => {\n if (next && next?.dateTz && next?.selectedRoom?.space) {\n this.data.next(next);\n this.booking = this.bookingFormToBooking(next);\n }\n }));\n\n\t\t\t\t// in the parent component\n\t\t\t\tthis.updateConfimatinModal();\n }\n\n\n /**\n * Save booking changes\n */\n public saveChanges() {\n this.loading = true;\n this.booking = this.bookingFormToBooking(this.data.value);\n // const booking_form_data = this.data.value;\n this.booking.status = BOOKING_STATUS.approved;\n checkCollisions(\n this._spaces,\n this.booking\n ).then((bookable: boolean) => {\n if (!bookable) {\n // Refactored for\n //\thttps://acaprojects.atlassian.net/browse/MCK-1498\n //\thttps://mckinsey.atlassian.net/browse/CNG-97\n // API is retuning bookings ouside of requested time range\n // TODO check booking date and times for conflict manually\n this.booking.status = BOOKING_STATUS.unavailable;\n return;\n }\n\n // this.booking['opt_out'] = false;\n this._bookings_service.save(this.booking).then(\n (bkn) => {\n\t\t\t\t\t\t\t\t\t// update template properties and booking\n\t\t\t\t\t\t\t\t\tthis.handleBookingSuccessResponse(bkn);\n },\n (err) => {\n if (err.status === 409) {\n this.handleBookingErrorMessage();\n } else {\n\t\t\t\t\t\t\t\t\t\t\tthis.loading = false;\n \tthis.confirmed = false;\n this.displayWarningBanner(getStatusErrorMessage(err.status));\n }\n }\n );\n },(err) => {\n this.timeout('error', () => {\n\t\t\t\t\t\t\t\t\tthis.handleBookingErrorMessage();\n }, 500);\n }\n );\n }\n\n}\n","
\n
\n \n

{{ warningMessage }}

\n \n
\n
\n \n \n \n \n
\n
\n
\n
\n
\n
\n

Book {{booking?.space?.local_name}}

\n
\n
\n \n
\n
\n
\n
\n

{{ data?.value?.is_recurrent ? 'Recurring' : 'Room' }} Booking Details

\n
\n
Date: {{dateString}}
\n
Time: {{timeString}}
\n
{{type}} meeting ({{durationString}})
\n
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
{{data?.value?.recurrence_period === 'list' ? 'Specific dates' : data?.value?.recurrence_period | titlecase}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t - Conflicts({{isConflictWithOccurences()?.total_Conflicts}}) \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
Start date: {{dateString}}
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
End date: {{endDateString}}
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
Time: {{timeString}}
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
{{type}} meeting ({{durationString}})
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\n
\n
Address: {{building?.address}},\n {{building?.city}}
\n
Room: {{booking?.space?.local_name}}
\n
Capacity: {{booking?.space?.capacity}}
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n
\n","import {Component,OnInit,Input,Output,EventEmitter,\n } from '@angular/core';\n import {\n Booking,\n selectActiveForm,\n BookingFormData,\n\t\tBookingStoreState,\n } from '@mckinsey-converge/data-common';\n import {\n\t\tStore,\n select,\n } from '@ngrx/store';\n import {\n distinctUntilChanged, take,\n } from 'rxjs/operators';\n import { BaseDirective } from '@mckinsey-converge/base';\n\timport {\n\t\tRoomStoreState,\n\t} from '@mckinsey-converge/rooms';\n\timport {\n\t\tBuildingStoreState\n\t} from '@mckinsey-converge/buildings';\n\timport { UserStoreState } from '@mckinsey-converge/user';\n\n\texport type RoomResultsState = BookingStoreState\n & RoomStoreState\n & BuildingStoreState\n & UserStoreState;\n\n\n @Component({\n selector: 'app-booking-edit-wrapper',\n template: `
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
`,\n styleUrls: ['./booking-create.component.scss']\n })\n export class BookingEditWrapperComponent extends BaseDirective implements OnInit {\n\n\t\tpublic booking: Booking;\n\t\tpublic loading: boolean = true;\n\n constructor(\n public store: Store,\n ) {\n super();\n }\n\n public ngOnInit(): void {\n\n this.subscription('activeForm',\n this.store.pipe(take(1),\n\t\t\t\t\tselect(selectActiveForm),\n \tdistinctUntilChanged()\n\t\t\t\t\t).subscribe((next: BookingFormData | undefined) => {\n\t\t\t\t\t\tthis.loading = false;\n \t\tif (next && next?.dateTz) {\n \t\tthis.booking = new Booking(next);\n \t\t}\n }));\n\n }\n\n }\n","import {\n Component,\n OnInit,\n Input,\n Output,\n EventEmitter,\n} from '@angular/core';\nimport {\n Booking,\n selectActiveForm,\n storeBookingFormData,\n BookingFormData,\n checkCollisions,\n getStatusErrorMessage,\n clearBookingFormData,\n BOOKING_STATUS,\n getLastDateFromList,\n Space,\n SeriesAction\n} from '@mckinsey-converge/data-common';\nimport {\n select,\n} from '@ngrx/store';\nimport {\n distinctUntilChanged,\n} from 'rxjs/operators';\nimport { BookingFormBaseComponent } from './booking-form-base.component';\nimport * as cloneDeep from 'lodash/cloneDeep';\n\n@Component({\n selector: 'app-booking-edit',\n templateUrl: './booking-form-base.component.html',\n styleUrls: ['./booking-create.component.scss']\n})\nexport class BookingEditComponent extends BookingFormBaseComponent implements OnInit {\n @Input() public booking: Booking;\n @Output() public updateCallback = new EventEmitter();\n public roomEmail: string;\n\n public ngOnInit(): void {\n super.ngOnInit();\n\n this.subscription('activeForm', this.store.pipe(\n select(selectActiveForm),\n distinctUntilChanged()\n ).subscribe((next: BookingFormData | undefined) => {\n if (next && next?.dateTz && next?.selectedRoom?.space) {\n this.data.next(next);\n this.isEditSeries = next.action === SeriesAction.EDIT;\n }\n }));\n\n this.modal = !this.isEditSeries;\n this.roomEmail = this.booking.space.email;\n const attendees = (this.data?.value?.attendees?.length && this.data?.value?.attendees[0]?.meta)\n ? this.data.value.attendees\n : this.booking.attendees.filter(bk => bk.name !== '' && bk.email !=='').map(u => {\n return {\n value: u.email,\n display: u.name,\n groupId: 'one',\n groupHeader: true,\n shortDisplay: u.name,\n meta: { external: u.external, user: u, color: u.email.toLowerCase().includes('mckinsey.') ? 'internal' : 'external' },\n }\n });\n\n const company = (this.data?.value?.company?.length && this.data?.value?.company[0]?.groupId)\n ? this.data?.value?.company\n : this.booking.company.map(u => {\n return {\n value: u,\n display: u,\n groupId: 'two',\n groupHeader: true,\n shortDisplay: u,\n }\n });\n\n const head_count = this.booking?.expected_attendees[this.roomEmail] ? this.booking?.expected_attendees[this.roomEmail] : 0;\n const code = this.booking?.equipment_codes[this.roomEmail] ? this.booking?.equipment_codes[this.roomEmail] : '';\n const organiser = (this.data?.value?.organiser && this.data?.value?.organiser?.meta)\n ? this.data?.value?.organiser\n : {\n display: this.booking.organiser.name,\n value: this.booking.organiser.email,\n meta: { user: this.booking.organiser }\n };\n const notes = Array.isArray(this.booking.notes) ? this.booking.notes.find(n => n.type === 'equipment')?.message : this.booking.notes;\n const selectedRoom = this.data?.value?.selectedRoom\n ?\n this.data?.value?.selectedRoom\n :\n {\n space: this.booking.room, // this.building,\n };\n\n const payload = {\n ...this.booking.toJSON(),\n attendees,\n code,\n head_count,\n notes,\n organiser,\n selectedRoom,\n company\n };\n this.store.dispatch(storeBookingFormData({\n payload: payload\n }));\n \n if(this.isEditSeries) {\n this.booking = this.bookingFormToBooking(this.data.value, this.isEditSeries); \n }\n // in parent component\n this.updateConfimatinModal();\n\n\n }\n\n public updateNotes(booking, note, room) {\n const notes = [];\n const cateringNotes = this._cateringNotesService.getNotes();\n const isEquipmentNote = booking.notes.find(note => note.type === 'equipment');\n const isCateringNote = booking.notes.find(note => note.type === 'catering');\n\n if (cateringNotes.length && !isCateringNote) {\n notes.push(cateringNotes[0]);\n }\n\n if (isEquipmentNote) {\n booking.notes.map(item => {\n const message = cateringNotes.length && item.type === 'catering' ? cateringNotes[0].message : item.message;\n\n notes.push({\n ...item,\n author : this.currentUser.name,\n message : item.type === 'equipment' ? note : message,\n space: item.type === 'equipment' ? room : item.space,\n date: item.type === 'equipment' ? new Date().getTime() : item.date\n })\n });\n } else {\n if (note) {\n notes.push({\n author: this.currentUser.name,\n type: \"equipment\",\n message: note,\n space: room,\n date: new Date().getTime()\n })\n }\n }\n return notes;\n }\n\n /**\n * Save booking changes\n */\n public saveChanges() {\n const booking_form_data = this.data.value;\n\n if(!this.isEditSeries) {\n\t\t\t // clone booking to allow editing\n const booking = cloneDeep(this.booking);\n \n\t\t\tbooking.title = booking_form_data.title;\n\t\t\tbooking.attendees = this.formToAttendees(booking_form_data.attendees);\n\t\t\tbooking.company = this.formToCompany(booking_form_data.company);\n\t\t\tbooking.notes = this.updateNotes(this.booking, booking_form_data.notes, this.roomEmail);;\n\t\t\tbooking.equipment_codes = { [this.roomEmail]: booking_form_data.code };\n\t\t\tbooking.expected_attendees = { [this.roomEmail]: booking_form_data.head_count };\n\t\t\tbooking.organiser = booking_form_data.organiser?.meta.user;\n\t\t\tconst has_note_buffer = booking_form_data.notes && booking_form_data.notes?.length ? {[booking_form_data.selectedRoom?.space?.email || booking?.space?.email]: 900} : null; // 900 seconds = 15 min\n\t\t\t// Removing the note does not remove the existing setup / breakdown\n\t\t\tif (has_note_buffer) {\n\t\t\t booking.setup = has_note_buffer;\n\t\t\t booking.breakdown = has_note_buffer;\n\t\t\t}\n booking.opt_out = booking_form_data.opt_out;\n\t\t\tthis.booking = booking;\n\t\t }\n\t\t else {\n\t\t\tthis.booking = this.bookingFormToBooking(booking_form_data, this.isEditSeries);\n\t\t }\n\n\n this.loading = true;\n checkCollisions(\n this._spaces,\n this.booking\n ).then((bookable: boolean) => {\n // We expect the current booking to be returned form this api call,\n if (bookable) {\n\n this._bookings_service.save(this.booking, this.isEditSeries).then(\n (bkn) => {\n // update template properties and booking\n this.handleBookingSuccessResponse(bkn);\n // update callback in case of standard booking edit\n this.updateCallback && this.updateCallback.emit(this.booking);\n\n },\n (err) => {\n if (err.status === 409) {\n this.handleBookingErrorMessage();\n } else {\n this.loading = false;\n this.confirmed = false;\n this.displayWarningBanner(getStatusErrorMessage(err.status));\n }\n }\n );\n } else {\n this.handleBookingErrorMessage();\n return;\n }\n },\n (err) => {\n this.handleBookingErrorMessage();\n }\n );\n }\n\n public callback() {\n this.closeCallback.emit(true);\n }\n\n}\n","import {\n Component,\n OnInit,\n Output,\n EventEmitter,\n} from '@angular/core';\nimport { TopBarHeaderMode, RoutePayload } from 'src/app/components/topbar-header/topbar-header.component';\nimport {\n Store\n} from '@ngrx/store';\nimport {\n BaseDirective,\n dateLocalFormatString,\n startEndTimeWithZoneFormatString,\n humaniseDuration,\n toTitleCase,\n dateBuildingFormatString,\n shorterLocalDateFormatString,\n DialogEvent,\n} from '@mckinsey-converge/base';\nimport {\n ApplicationService,\n Booking,\n BookingsService,\n BookingStateService,\n Space,\n SpacesService,\n User,\n BookingNote,\n BookingFormData,\n BookingStoreState,\n storeBookingFormData,\n bookingStatusDetails,\n clearBookingFormData,\n CateringNotesService,\n getLastDateFromList,\n BOOKING_STATUS,\n DataForConfirmation,\n UsersService\n} from '@mckinsey-converge/data-common';\nimport {\n BehaviorSubject,\n} from 'rxjs';\nimport {\n take,\n} from 'rxjs/operators';\nimport {\n BuildingStoreState\n} from '@mckinsey-converge/buildings';\nimport {\n RoomStoreState,\n} from '@mckinsey-converge/rooms';\nimport {\n Router\n} from '@angular/router';\nimport { UserStoreState } from '@mckinsey-converge/user';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DateNow, DateTZ } from \"@mckinsey-converge/date-tz\";\nimport { ConflictsModalComponent, ConflictsModalComponentData } from '@mckinsey-converge/ui';\n\n\nexport type RoomResultsState = BookingStoreState\n & RoomStoreState\n & BuildingStoreState\n & UserStoreState;\n\n@Component({\n selector: 'app-booking-base',\n templateUrl: './booking-form-base.component.html',\n styleUrls: ['./booking-create.component.scss']\n})\nexport class BookingFormBaseComponent extends BaseDirective implements OnInit {\n public TopBarHeaderMode = TopBarHeaderMode;\n\n public backRoute: RoutePayload = {\n route: ['/home', 'results', 'room'],\n queryParams: {}\n };\n\n @Output() public closeCallback = new EventEmitter();\n\n // Eliminate selectedRoom (room building capacity )\n public modal = false;\n public data = new BehaviorSubject(undefined);\n public submitTimestamp: number;\n public confirmed: boolean = false;\n /** Whether booking has succeeded */\n public success: boolean;\n public updated: boolean;\n /** Display loading template */\n public loading: boolean;\n public booking: Booking = new Booking({});\n /** Current User */\n public currentUser: User;\n public invalidForm: boolean = true;\n public showWarningBanner: boolean = false;\n public warningMessage: string;\n\n dataForConfirmation: DataForConfirmation;\n isEditSeries: boolean = false;\n // set property if user room selection from next business day section on result page\n public nextBusinessDay: boolean = false;\n\n\n constructor(\n public _service: ApplicationService,\n public store: Store,\n public router: Router,\n public _bookings_service: BookingsService,\n public _booking_state_service: BookingStateService,\n public _spaces: SpacesService,\n public _cateringNotesService: CateringNotesService,\n public dialog: MatDialog,\n private _users: UsersService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.subscription('currentUser', this.store.select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n })\n );\n\n\n }\n\n public get building(){\n return this.booking.room.building;\n }\n\n public get type() {\n return this.booking.bookingTypeLabel;\n }\n\n public get internal_external_type() {\n return this.booking.room?.[0].filters.external === true? \"External\" : \"Internal\";\n }\n\n public get date(){\n // R--- remove if no longer used.\n return this.booking.startDateTz;\n }\n\n public get dateString() {\n return this.booking.startDateTz.formatDate('ccc d MMM yyyy'); //shorterLocalDateFormatString(this.booking.startDateTz);\n \n }\n\n public get timeString() {\n return startEndTimeWithZoneFormatString(this.booking.startDateTz, this.booking?.displayEndDateTz);\n }\n\n public get durationString() {\n return humaniseDuration(this.booking?.duration);\n }\n\n public get status() {\n return bookingStatusDetails(this.booking);\n }\n\n public async goToBackRoute() {\n await this.router.navigate(this.backRoute.route, { queryParams: this.backRoute.queryParams });\n }\n\n /**\n * Continue to Booking Form\n */\n public createBooking() { // todo change links based on usage\n // trigger the booking form submit\n this.submitTimestamp = new Date().getTime();\n }\n\n // submit the booking form\n public submitForm(formGroup: any) {\n let creator: User;\n if (formGroup.has_delegate) {\n if (formGroup.organiser.value !== this.currentUser.email) {\n creator = this.currentUser;\n }\n }\n\n // Combines booking with selected form fields and not the entire formGroup like other places.\n // to combine booking with selected form fields on submit - WHY IS THIS NEEDED TO DISPACH TO STORE BOOKING FORM DATA ???\n // THIS ISSUE IS SPILLING INTO - libs/data-common/src/lib/booking/booking.selectors.ts lno: 70\n // - due to .toJSON recurrence_starts becomes Array ?!?\n this.store.dispatch(storeBookingFormData({\n payload: {\n ...this.booking.toJSON(),\n attendees: formGroup.attendees,\n code: formGroup.code,\n head_count: formGroup.head_count,\n notes: formGroup.notes,\n organiser: formGroup.organiser,\n creator,\n title: formGroup.title,\n company: formGroup.company,\n opt_out: formGroup.opt_out\n }\n }));\n this.saveChanges();\n }\n\n // submit the booking form\n public validateForm(valid: boolean) {\n this.invalidForm = !valid;\n }\n\n public setupNotes(note: string, roomEmail: string) {\n if (note && note.length ) {\n // this note was required to update setup and breakdown\n return [{\n author: this.currentUser.name,\n type: \"equipment\",\n message: !Array.isArray(note) ? note : note[0].message,\n space: roomEmail,\n date: new Date().getTime()\n }] as BookingNote[];\n }\n\n return [];\n }\n\n public formToAttendees(attendees: any[]) {\n return !attendees ? [] : attendees.map(a => {\n let raw_user = {\n first_name: '',\n last_name: '',\n email: '',\n name: '',\n type: 'internal',\n external: false,\n visitor: false,\n };\n if (a.meta?.external) {\n // External users get assigned a random email\n const nameParts = a.display.split(' ');\n const length = nameParts.length;\n if (length) {\n raw_user.first_name = nameParts[0];\n raw_user.name = nameParts.join(' ');\n }\n if (length > 1) {\n nameParts.shift();\n raw_user.last_name = nameParts.join(' ');\n }\n raw_user.email = a.value ?? `${Math.floor(Math.random() * 99999)}@guest.mckinsey.com`;\n raw_user.type = 'external'; // retain external identity\n raw_user.external = true;\n raw_user.visitor = true;\n } else if (a.meta?.user) {\n raw_user = a.meta.user;\n }\n else {\n raw_user = a;\n }\n return new User(raw_user);\n });\n }\n\n public formToCompany(companies: any[]) {\n return !companies ? [] : companies.map(a => {\n return a.value;\n });\n }\n\n /**\n * Save booking changes\n */\n public saveChanges() {\n this.loading = true;\n const booking_form_data = this.data.value;\n // override in child class\n }\n\n public callback() {\n // mock interface\n }\n\n public get is_request(): boolean {\n const data = this.data.value;\n\n /* istanbul ignore else */\n if (!data?.selectedRoom?.space) {\n return false;\n }\n\n const space = new Space(data.selectedRoom.space);\n return space.byRequest({\n dateTz: data.dateTz,\n duration: data.duration,\n host: this.currentUser\n });\n }\n\n public displayWarningBanner(custom: string) {\n this.warningMessage = custom;\n this.showWarningBanner = true;\n this.timeout('close banner', () => {\n this.showWarningBanner = false;\n }, 10000);\n }\n\n public hideWarningBanner() {\n this.showWarningBanner= false;\n }\n\n public discardChanges() {\n this.store.dispatch(clearBookingFormData());\n this.closeCallback.emit(true)\n }\n\n\n\n setupOrganiser(booking_form_data: BookingFormData) {\n if(booking_form_data.organiser?.meta?.user){\n return booking_form_data.organiser?.meta?.user;\n }\n else{\n booking_form_data.organiser = {...booking_form_data.organiser, meta: {user: this.currentUser}}\n return booking_form_data.organiser?.meta.user;\n }\n }\n\n public bookingFormToBooking(bookingData, isEditSeries: boolean = false): Booking {\n let booking_form_data = bookingData;\n const has_note_buffer = booking_form_data.notes && booking_form_data.notes?.length ? {[booking_form_data.selectedRoom.space.email]: 900} : {}; // 900 seconds = 15 min\n const attendees = this.formToAttendees(booking_form_data.attendees);\n const company = this.formToCompany(booking_form_data.company);\n const start_epoch = booking_form_data?.dateTz?.seconds;\n const end_epoch = booking_form_data.dateTz.addValue({ minutes: booking_form_data.duration }).seconds;\n // set property if user room selection from next business day section on result page\n this.nextBusinessDay = booking_form_data?.nextBusinessDay || false\n\n const raw_data = {\n id: isEditSeries ? booking_form_data.id : '',\n all_day: booking_form_data.all_day || false,\n attendees,\n booking_type: booking_form_data.bookingType.value,\n catering: booking_form_data.catering || [],\n start_epoch,\n end_epoch,\n timezone: booking_form_data.timezone,\n equipment_codes: {[booking_form_data.selectedRoom.space.email]: booking_form_data.code},\n expected_attendees: {[booking_form_data.selectedRoom.space.email]: booking_form_data.head_count},\n has_catering: booking_form_data.has_catering || false,\n needs_space: booking_form_data.needs_space || false,\n organiser: this.setupOrganiser(booking_form_data),\n notes: this.setupNotes(booking_form_data.notes, booking_form_data.selectedRoom.space.email),\n creator: booking_form_data.creator,\n room: booking_form_data.selectedRoom.space,\n title: booking_form_data.title,\n setup: has_note_buffer,\n breakdown: has_note_buffer,\n company,\n /* Staff Recurring form fields */\n is_recurrent: booking_form_data.is_recurrent,\n recurrence_count: booking_form_data.recurrence_count,\n recurrence_days: booking_form_data.recurrence_days,\n recurrence_endTz: booking_form_data.recurrence_endTz,\n recurrence_exceptions: booking_form_data.recurrence_exceptions,\n recurrence_interval: booking_form_data.recurrence_interval,\n recurrence_period: booking_form_data.recurrence_period,\n recurrence_starts: booking_form_data.recurrence_starts,\n\n occurrence_details: booking_form_data.occurrence_details,\n // occurrence_edits: booking_form_data.occurrence_edits || null,\n // occurrence_ids: booking_form_data.occurrence_ids || null,\n recurrence_type: booking_form_data.recurrence_type || null,\n recurrence_master_id: booking_form_data.recurrence_master_id,\n edits: booking_form_data?.edits,\n ignore: booking_form_data?.ignore,\n\n opt_out: bookingData.opt_out\n\n\n };\n\n return new Booking(raw_data);\n }\n\n\n public async handleBookingSuccessResponse(bkn) {\n\n // const user: User = this._users.current;\n // if(this._users.current.email === bkn.organiser.email) {\n // this._users.current.opt_out = true;\n // }else {\n // this._users.current.delegates.map(el => { \n // if(el.email === bkn.organiser.email) {\n // el.opt_out = true;\n // }\n // return el;\n // })\n // }\n \n\n //const responceBkn = new Booking({...bkn}); // \n this.booking = new Booking({ ...this.booking, ...bkn.toApiJSON() });\n this.updateConfimatinModal();\n this._booking_state_service.replace(this.booking);\n\n /**\n * update the master booking in case of recurring to have latest updated in the system\n */\n if(this.booking.recurrence_master_id !== null && this.isEditSeries)\n {\n const master_booking = await this._bookings_service.show(this.booking.recurrence_master_id);\n this._booking_state_service.replace(master_booking);\n }\n\n // Clear the current booking form\n this.store.dispatch(clearBookingFormData());\n\n this.loading = false;\n this.success = true;\n this.confirmed = true;\n\n // Heap track event\n this._service.analytics.track('update', {\n booking_id: this.booking.id,\n office: this.booking.room.building.name, // this.building.name,\n room: this.booking.room.simple_name,\n start_time: this.booking.startDateTz.ms,\n end_time: this.booking.endDateTz.ms,\n catering: !!this.booking.catering.length,\n headcount: this.data.value.head_count,\n });\n\n }\n\n\n public handleBookingErrorMessage() {\n this.loading = false;\n this.booking.status = BOOKING_STATUS.unavailable\n this._booking_state_service.replace(this.booking);\n this.confirmed = true;\n this.success = false;\n this.updateConfimatinModal();\n }\n\n /**\n * Public method to update the confirmation modal data.\n * This method updates the dataForConfirmation object with the necessary information\n * for displaying the confirmation modal in the application.\n */\n public updateConfimatinModal() {\n\n // Prepare an object with booking details and related information for the confirmation modal\n this.dataForConfirmation = {\n booking: this.booking, // Information about the booking\n status: this.status, // Status of the booking (e.g., confirmed, pending, etc.)\n dateString: this.dateString, // Date of the booking in string format\n endDateString: this.endDateString, // End date of the booking in string format\n timeString: this.timeString, // Time of the booking in string format\n durationString: this.durationString, // Duration of the booking in string format\n type: this.type, // Type of booking (e.g., internal, external, etc.)\n isEditSeries: this.isEditSeries, // Boolean indicating whether it's an edit in a series of events\n // Function to check if there are conflicts with occurrences of the booking\n isConflictWithOccurences: this.isConflictWithOccurences.bind(this),\n // Function to open a modal in case of conflicts with recurring events\n openRecurrenceConflictsModal: this.openRecurrenceConflictsModal.bind(this)\n }\n }\n\n /**\n * Checks if there are conflicts with the current booking and its occurrences.\n * Calculates the difference between total occurrences and available occurrences\n * to determine if there are conflicts.\n *\n * @returns {Object} An object containing conflict information:\n * - is_conflict: A boolean indicating if there are conflicts (true if conflicts exist, false otherwise).\n * - total_Conflicts: The total number of conflicts (the difference between total occurrences and available occurrences).\n */\n // public isConflictWithOccurences() {\n // const conflicts = this?.booking?.room?.totalOccurrences - this?.booking?.room?.availableOccurrences;\n // return { is_conflict: !!conflicts, total_Conflicts: conflicts };\n // }\n\n public isConflictWithOccurences() {\n let totalConflicts = 0;\n\n if (this.booking.multi_rooms && this.booking.multi_rooms.length > 0) {\n this.booking.multi_rooms.forEach((room) => {\n totalConflicts += Math.max(room.totalOccurrences - room.availableOccurrences, 0);\n });\n } else if (this.booking.room) {\n totalConflicts =\n this?.booking?.room?.totalOccurrences - this?.booking?.room?.availableOccurrences;\n }\n\n const result = {\n is_conflict: totalConflicts > 0,\n total_Conflicts: totalConflicts,\n };\n return result;\n}\n\n\n/**\n * Retrieves the end date string for the booking, considering recurrence if applicable.\n * If the booking is recurrent, it calculates the end date based on recurrence starts;\n * otherwise, it uses the booking's start date as the end date.\n *\n * @returns {string} The formatted end date string in a shorter local date format.\n */\n public get endDateString(): string {\n // Determine the array of date-time strings based on recurrence or single start date\n let recurrenceStart: Array= [];\n const { is_recurrent, recurrence_starts, occurrence_details, timezone} = this.booking;\n if(is_recurrent && recurrence_starts.length) {\n recurrenceStart = this.booking.recurrence_starts;\n }\n else if(is_recurrent && !recurrence_starts.length && occurrence_details?.length) {\n this.booking.occurrence_details.forEach(element => {\n recurrenceStart.push(new DateTZ({ date: element.start_epoch * 1000, is_local_tz: false, building_tz: timezone}));\n });\n recurrenceStart = recurrenceStart.sort((d1: DateTZ, d2: DateTZ) => d1.ms - d2.ms);\n }\n else {\n recurrenceStart = [this.booking.startDateTz];\n }\n\n\n // const endDtz = (this.booking.is_recurrent && this.booking.recurrence_starts.length) ? this.booking.recurrence_starts : [this.booking.startDateTz]\n // Get the last date from the list of date-time strings and format it in a shorter local date format\n const requestedEndDateTz = getLastDateFromList(recurrenceStart); //shorterLocalDateFormatString(getLastDateFromList(recurrenceStart));\n \n // add one day if user room selection from next business day section on result page\n const endDatestring = this.nextBusinessDay ? requestedEndDateTz.addValue({ minutes: this.data?.value.offset }) : requestedEndDateTz;\n\n return endDatestring.formatDate('ccc d MMM yyyy');\n }\n\n /**\n * Opens a modal to display recurrence conflicts for a given room.\n *\n * @param {Space} room - The room for which recurrence conflicts are being displayed.\n *\n * This function opens a modal dialog to show recurrence exceptions (conflicts)\n * for the specified room.\n *\n * TO DO: SAME FUNCTION BEING USED IN apps/staff/src/app/booking/room-details/room-details.component.ts\n * and mckinsey-converge/apps/staff/src/app/booking/catering/catering.component.ts\n */\n public openRecurrenceConflictsModal(room: Space) {\n let { recurrence_exceptions } = this.data.value;\n\n const recurr_ref = this.dialog.open(ConflictsModalComponent, {\n maxWidth: '95vw',\n width: '32em',\n data: {\n room_name: room.simple_name,\n conflicts: recurrence_exceptions,\n timezone: room.building.timezone,\n status: 'confirmed'\n }\n });\n this.subscription(\n 'conflicts_modal_events',\n recurr_ref.componentInstance.event.subscribe((event: DialogEvent) => {\n recurr_ref.close();\n })\n );\n recurr_ref.afterClosed().subscribe(() => this.unsub('conflicts_modal_events'));\n }\n\n\n}\n","import {BehaviorSubject,fromEvent,\n} from 'rxjs';\nimport {take,throttleTime,tap,distinctUntilChanged,map\n} from 'rxjs/operators';\nimport {select,Store\n} from '@ngrx/store';\nimport {Component,Inject,OnInit,\n} from '@angular/core';\nimport { BaseDirective, dateBuildingFormatString, startEndTimeWithZoneFormatString, humaniseDuration, toTitleCase, closestToTimeSlotTz\n} from '@mckinsey-converge/base';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { User,\n\tApplicationService,\n\tAvailableBookingFields,\n\tBooking,\n\tBookingFormData,\n\tBookingFlowSettings,\n\tSpacesService,\n\tstoreBookingFormData,\n\tDateDurationData,\n\tselectFilteredByIdResults,\n\tgenerateBookingForm,\n\tcateringAllowed,\n\trulesForSpace,\n\tgetStatusErrorMessage,\n\troomHasCateringHours,\n\tBookingsService,\n\tSpaceConflictAlertModalData,\n\tSpaceFilterReason,\n\tBuilding,\n\tBuildingCity,\n\tflattenDisplayOffices,\n\troomSizeOptions,\n\tDEFAULT_BOOKING_DURATION,\n\tbookingTypeOptions,\n\troomFormDataToQuery,\n\tclearBookingFormData,\n\tBookingStateService,\n\tRecurrencePeriod,\n\tselectActiveForm,\n\tSeriesAction\n} from '@mckinsey-converge/data-common';\nimport { first } from 'rxjs/operators';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport { TopBarHeaderMode } from 'src/app/components/topbar-header/topbar-header.component';\nimport { CancelBookingModalComponent } from '../cancel-booking-modal/cancel-booking-modal.component';\nimport { BookingDurationModalComponent } from '../booking-duration-modal/booking-duration-modal.component';\nimport { RoomResultsState } from '../room-details/room-details.component';\nimport {\n\tloadByIdResults, loadRoomsForResults, loadRoomsForResultsMap,\n} from '@mckinsey-converge/rooms';\nimport { FormGroup } from '@angular/forms';\nimport { loadBookingsWithQuery } from '@mckinsey-converge/bookings';\nimport { DateNow, DateTZ } from \"@mckinsey-converge/date-tz\";\nimport { ConflictAlertModalComponent, SelectOption } from '@mckinsey-converge/ui';\nimport { buildingStateSelector, selectBuildingOptionsGroupedByCity } from '@mckinsey-converge/buildings';\nimport { RoomBookingModalComponent } from '../room-booking-modal/room-booking-modal.component';\nimport { Router, ActivatedRoute } from '@angular/router';\n\nconst EMPTY_ARRAY = [];\n\n@Component({\n\tselector: 'app-booking-details-modal',\n\ttemplate: `\n
\n
 
\n
\n \n

Your booking date and/or time was successfully updated

\n \n
\n
\n \n

{{ warningMessage }}

\n \n
\n \n
\n
\n
\n
\n \n Recurring booking status: {{ statusText }} \n
\n
\n \n
\n \n This is one occurrence in a recurring series which occurs every {{recurrence_interval > 1 ? recurrence_interval + ' Days' : 'Day'}} effective {{ _data?.master_booking?.dateString }} until {{ _data?.master_booking?.endDateString }}.\n \n \n This is one occurrence in a recurring series which occurs every {{recurrence_interval > 1 ? recurrence_interval + ' Weeks' : 'Week'}} effective {{ _data?.master_booking?.dateString }} until {{ _data?.master_booking?.endDateString }}.\n \n \n This is one occurrence in a recurring series which occurs every {{recurrence_interval > 1 ? recurrence_interval + ' Months' : 'Month'}} effective {{ _data?.master_booking?.dateString }} until {{ _data?.master_booking?.endDateString }}.\n \n \n This is one occurrence in a recurring series which occurs on Specific Dates effective {{ _data?.master_booking?.dateString }} until {{ _data?.master_booking?.endDateString }}\n
\n
\n
\n
{{ occurrence.dateTz.formatDate('dd MMM yyyy') }}
\n
\n
\n
\n
\n
\n
\n
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n Edit series\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n
\n
\n\n
\n
\n

Booking {{ statusText.toLowerCase() }}

\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t {{timeString}} \n
\n
\n
\n \n
\n

This is a multiroom booking. To request edits, please contact your local backoffice team.

\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n

Booking Status: {{statusText}}

\n

\n \n

\n
\n
\n \n
\n \n Cancel booking\n \n
\n
\n
\n
\n
\n
\n

\n \n {{title}}\n

\n

\n Date: {{dateString}}
\n Time: {{timeString}}
\n {{type}} meeting ({{durationString}})\n

\n\n \n Edit date or time\n \n\n

\n Address: {{roomLocation}}
\n Room: {{roomName}}
\n Capacity: {{capacity}}\n

\n\n
\n
\n \n
\n\n \n
\n\n \n {{ checkingExtendable ? 'Checking availability...' : 'Extend booking duration'}}\n \n
\n
\n

\n \n

\n

\n \n \n \n

\n \n \n

\n \n \n \n

\n \n \n
\n
\n
\n
\n

\n \n Booking Details\n

\n

Host: {{host}}

\n

Attendees: {{attendeesString}}

\n

Company: {{companyString}}

\n

Charge code: {{chargeCode}}

\n

Headcount estimate: {{headcount}}

\n

Additional requirements: {{requirements}}

\n\t\t\t\t\t\t\t\t

Email notification for this booking has been opt out.

\n\n \n Update details\n \n
\n
\n

\n \n Catering\n

\n

Catering available for this room

\n \n Add catering\n \n\n \n
\n
\n
\n
\n

\n \n

\n \n \n \n \n \n \n
\n
\n

\n \n

\n

\n \n

\n \n
\n
\n
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n
\n\t\t\t\t\n
\n\n \n
\n\n \n\n
\n \n \n
\n
\n \n
\n `,\n\tstyleUrls: ['./booking-details-modal.component.scss']\n})\nexport class BookingDetailsModalComponent extends BaseDirective implements OnInit {\n\tpublic TopBarHeaderMode = TopBarHeaderMode;\n\tpublic title: string;\n\tpublic roomName: string;\n\tpublic roomLocation: string;\n\tpublic host: string;\n\tpublic hostEmail: string;\n\tpublic type: string;\n\tpublic status: string;\n\tpublic statusText: string = '';\n\tpublic statusImage: string;\n\tpublic durationString: string;\n\tpublic dateString: string;\n\tpublic timeString: string;\n\tpublic capacity: number;\n\tpublic attendeesString: string;\n\tpublic chargeCode: string;\n\tpublic headcount: number;\n\tpublic requirements: string;\n\tpublic showDetails: boolean;\n\tpublic warningMessage: string;\n\tpublic mapUrl: string;\n\tpublic focusedRoom: string;\n\tpublic expandedLocation = false;\n\tpublic isRecurrentBooking = false;\n\tpublic isMultiroomBooking:boolean = false;\n\n\tpublic checkingExtendable: boolean;\n\tpublic extendableMaximum: number;\n\n\tpublic receiptionEmail: string;\n\n\tpublic data = new BehaviorSubject(undefined);\n\tpublic byIdResults = new BehaviorSubject(undefined);\n\n\t// Track event date changes in the UI in this param\n\tpublic alternativeWeekStartDateTz: DateTZ;\n\t/** Current User */\n\tpublic currentUser: User;\n\tpublic expandedAvailability: boolean = false;\n\t// Set in the room availablity callback\n\tpublic mobile: boolean = false;\n\tpublic loading: boolean = false;\n\tpublic showInfoBanner: boolean = false;\n\tpublic showWarningBanner: boolean = false;\n\tpublic showCatering: boolean = false;\n\t/** Application settings for bookings */\n\tpublic settings: BookingFlowSettings;\n\tpublic form: FormGroup;\n\tpublic companyString: string;\n\n\tinvalidDueToOfficeRule: boolean;\n\tbuildings: SelectOption[];\n\tmaster_booking: Booking;\n\n\tprivate recurrence_period: RecurrencePeriod;\n\tprivate recurrence_interval: number;\n\toccurrence_details: { start_epoch: number; dateTz: DateTZ; id: string; }[];\n\tdisableSeriesEditButton: boolean = false;\n\topt_out: boolean;\n\t/** List of available booking fields for the form */\n\tpublic get available_fields(): AvailableBookingFields[] {\n\t\treturn this.settings?.show_fields || [];\n\t}\n\n\tpublic get emailURL() {\n\t\treturn `mailto:${encodeURIComponent(this.receiptionEmail)}?cc=${encodeURIComponent(this.hostEmail)}&subject=Enquiry%3A%20${encodeURIComponent(this.roomName)}&body=Details%3A%0ADate%3A%20${encodeURIComponent(this.dateString)}%0ATime%3A%20${encodeURIComponent(this.timeString)}%0A${encodeURIComponent(this.type)}%20meeting%20(${encodeURIComponent(this.durationString)})%0AAddress%3A%20${encodeURIComponent(this.roomLocation)}%0ARoom%3A%20${encodeURIComponent(this.roomName)}%0ACapacity%3A%20${encodeURIComponent(this.capacity)}%20people%0A%0ANeeding%20assistance%20with%3A%0A`;\n\t}\n\n\tpublic disableCancelButton: boolean = false;\n\tpublic disableEditTimeButton: boolean = false;\n\tpublic disableUpdateDetailsButton: boolean = false;\n\n\tprivate _specific_dates = false;\n\n\n\tconstructor(\n\t\t private router: Router,\n private route: ActivatedRoute,\n\t\t@Inject(MAT_DIALOG_DATA) public _data: any,\n\t\tprivate dialogRef: MatDialogRef,\n\t\tprivate store: Store,\n\t\tpublic _bookings: BookingsService,\n\t\tprivate _service: ApplicationService,\n\t\tprivate _spaces: SpacesService,\n\t\tprivate dialog: MatDialog,\n\t) {\n\t\tsuper();\n\t\tthis.roomLocation = this._data.booking.room.street_and_city;\n\t\tthis.initDisplayValues(this._data.booking);\n\t\tthis.timeout('slowinit', () => {\n\t\t\tthis.initDisplayValues(this._data.booking);\n\t\t\tif (this._data.cancel && this.displayCancelModal()) {\n\t\t\t\tthis.cancelBooking();\n\t\t\t}\n\t\t\tif (this._data.addCatering && this.roomHasCatering) {\n\t\t\t\tthis.addCatering();\n\t\t\t}\n\t\t\t// Close up the loader panel\n\t\t\tthis.timeout('hide modal mask', () => {\n\t\t\t\tthis._data.hasLoaderUrl = false;\n\t\t\t}, 300);\n\t\t}, 1000);\n\t}\n\n\n\tpublic ngOnInit() {\n\n\t\t/**\n\t\t * Update booking recurrence and occurrence details based on master booking data.\n\t\t *\n\t\t * This code block checks if there is a master booking available in the data.\n\t\t * If a master booking exists, it extracts recurrence period and interval information,\n\t\t * and processes occurrence details, excluding the current booking itself. Occurrence\n\t\t * start epochs are converted to milliseconds and date-time strings are created in the\n\t\t * building's timezone.\n\t\t */\n\t\tif(this._data?.master_booking !== null) {\n\t\t\tthis.recurrence_period = this._data?.master_booking?.recurrence_period;\n\t\t\tthis.recurrence_interval = this._data?.master_booking?.recurrence_interval;\n\n\t\t\tconst bookingData = this._data?.master_booking || this._data?.booking;\n\n\t\t\tthis.occurrence_details = bookingData.occurrence_details && bookingData.occurrence_details\n\t\t\t\t.filter(ocurrence => ocurrence.id !== bookingData.id)\n\t\t\t\t.map(ocurrence => ({\n\t\t\t\t\t...ocurrence,\n\t\t\t\t\tstart_epoch: ocurrence.start_epoch * 1000, // Convert start epoch to milliseconds\n\t\t\t\t\tdateTz: new DateTZ({\n\t\t\t\t\t\tdate: ocurrence.start_epoch * 1000, // Create a DateTZ object with the converted epoch\n\t\t\t\t\t\tis_local_tz: false,\n\t\t\t\t\t\tbuilding_tz: bookingData.timezone\n\t\t\t\t\t})\n\t\t\t\t}));\n\t\t}\n\n\n\t\tthis.subscription('currentUser', this.store.select(selectCurrentUser)\n\t\t\t.pipe(take(1))\n\t\t\t.subscribe((user: User | undefined) => {\n\t\t\t\t// Once we know we have the user loaded.\n\t\t\t\tthis.currentUser = new User(user);\n\t\t\t})\n\t\t);\n\n\t\tthis.subscription('byId', this.store.pipe(\n\t\t\tselect(selectFilteredByIdResults)\n\t\t).subscribe(next => {\n\t\t\t// Should be fired when loading by ID in URL\n\t\t\tthis.byIdResults.next(next.success?.spaces?.length ? next.success.spaces[0].settings.bookings : EMPTY_ARRAY);\n\t\t}));\n\n\t\tthis._spaces.initialised.pipe(first((_) => _)).subscribe(() => {\n\t\t\tthis.settings = this._service.setting('app.booking');\n\t\t\tthis.form = generateBookingForm(this._data.booking, this.available_fields);\n\t\t});\n\n\t\tconst breakpoint = 450;\n\t\tif (window) {\n\t\t\tthis.mobile = window.innerWidth < breakpoint;\n\t\t}\n\n\t\tfromEvent(window, 'resize').pipe(throttleTime(500)).pipe(tap({\n\t\t\tnext: val => {\n\t\t\t\tconst target = val.target as Window;\n\t\t\t\tthis.mobile = target.innerWidth < breakpoint;\n\t\t\t}\n\t\t})).subscribe();\n\n\n\t\tthis.subscription('buildings', this.store.pipe(\n\t\t\tselect(buildingStateSelector),\n\t\t\tselect(selectBuildingOptionsGroupedByCity),\n\t\t\tmap((grouped: Map) => {\n\t\t\t\treturn flattenDisplayOffices(grouped);\n\t\t\t}),\n\t\t\tdistinctUntilChanged()\n\t\t).subscribe(next => {\n\t\t\tthis.buildings = next;\n\t\t\t!this.showDetails && this.dispatchToGetFloorCurrentStatus(this._data.booking);\n\t\t}));\n\n\n\t}\n\n\n\tpublic get disableCateringButton() {\n\t\tswitch (this.status) {\n\t\t\tcase 'cancelled':\n\t\t\tcase 'declined':\n\t\t\tcase 'expired':\n\t\t\t\treturn true\n\t\t\tdefault:\n\t\t\t\treturn !cateringAllowed(this._data?.booking, this._data.booking.room.building);\n\t\t}\n\t}\n\n\tpublic get roomHasCatering() {\n\t\treturn roomHasCateringHours(this._data.booking.room.building, this._data.booking?.room);\n\t}\n\n\tpublic get catering() {\n\t\treturn this._data.booking?.catering || [];\n\t}\n\n\tpublic formatDeliveryTime(order) {\n\t\treturn this._data.booking.startDateTz.addValue({ minutes: order?.delivery_time }).formatDate(\"h:mma\");\n\t}\n\n\tpublic initDisplayValues(booking: Booking) {\n\t\tconst roomEmail = booking.room.email || '';\n\t\tthis.dateString = dateBuildingFormatString(booking.startDateTz, true);\n\t\tthis.timeString = startEndTimeWithZoneFormatString(booking.startDateTz, booking.displayEndDateTz);\n\t\tthis.host = booking.organiser.name;\n\t\tthis.opt_out = booking.opt_out;\n\t\tthis.hostEmail = booking.organiser.email;\n\t\tthis.title = booking.title;\n\t\tthis.type = toTitleCase(booking.booking_type);\n\t\tthis.roomName = booking.local_room_name || '';\n\t\tthis.durationString = humaniseDuration(booking.duration);\n\t\tthis.capacity = booking.room.capacity; // in case of multiroom booking should we sum the capacity for all the rooms?\n\t\tthis.attendeesString = booking.attendees.map(a => a.name).join(', ');\n\t\tthis.chargeCode = booking.equipment_codes[roomEmail];\n\t\tthis.headcount = booking.expected_attendees[roomEmail];\n\t\tthis.mapUrl = booking.room.level.map_url;\n\t\tthis.extendableMaximum = 0;\n\t\tthis.focusedRoom = `area-${booking.room.map_id}-status`;\n\t\tthis.checkingExtendable = false;\n\t\tthis.receiptionEmail = this._data.booking.room.building?._settings?.discovery_info?.reception_email || '';\n\t\tthis.companyString = booking.company.join(', ');\n\t\t// UI button availability\n\t\tthis.disableCancelButton = true; // CSS hide disabled\n\t\tthis.disableEditTimeButton = true;\n\t\tthis.disableUpdateDetailsButton = true;\n\t\tthis.isRecurrentBooking = (booking.recurrence_type !== null || booking.recurrence_type === '') && booking.recurrence_period !== null ? true : false;\n\t\tthis.isMultiroomBooking = booking.is_multiroom ? true : false\n\n\t\t// Room Availability modal start date\n\t\tthis.setAlternativeWeekStartDate(booking.startDateTz);\n\n\t\t// Get the equiptment notes\n\t\tconst requirements = booking.notes.find(n => {\n\t\t\tif (n.type === 'equipment') {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t});\n\t\tthis.requirements = requirements ? requirements.message : '';\n\n\t\t// Setup the UI status based on the booking approval status\n\t\tif (booking.status) {\n\t\t\t// mark bookings before today expired\n\t\t\tconst orgStatus = booking.status;\n\t\t\tthis.status = booking.status;\n\t\t\tconst recentlyExpired = DateNow(new Date()).subtractValue({ minutes: 5 }).isBeforeDate(booking.startDateTz.addValue({ minutes: booking.duration }));\n\t\t\tif (!['declined', 'cancelled'].includes(booking.status)) {\n\t\t\t\tthis.status = DateNow(new Date()).isAfterDate(booking.startDateTz.addValue({ minutes: booking.duration })) ? 'expired' : booking.status;\n\t\t\t}\n\n\t\t\tif(this._data.master_booking && this._data.master_booking.status === 'tentative' ) {\n\t\t\t\tthis.disableSeriesEditButton = true;\n\t\t\t}\n\n\t\t\tswitch (this.status) {\n\t\t\t\tcase 'tentative':\n\t\t\t\t\tthis.statusImage = 'assets/icon/booking_pending.svg';\n\t\t\t\t\tthis.statusText = 'Pending';\n\t\t\t\t\tthis.disableCancelButton = false;\n\t\t\t\t\tthis.disableUpdateDetailsButton = false;\n\t\t\t\t\tthis.disableEditTimeButton = false;\n\t\t\t\t\t// Verify the booking date makes it updatable.\n\t\t\t\t\tif (DateNow(new Date()).isAfterDate(booking.startDateTz)) {\n\t\t\t\t\t\t// disable edit date time\n\t\t\t\t\t\tthis.disableEditTimeButton = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'accepted':\n\t\t\t\t\tthis.statusImage = 'assets/icon/booking_confirmed.svg';\n\t\t\t\t\tthis.statusText = 'Confirmed';\n\t\t\t\t\tthis.disableCancelButton = false;\n\t\t\t\t\tthis.disableUpdateDetailsButton = false;\n\t\t\t\t\tthis.disableEditTimeButton = false;\n\t\t\t\t\tthis.checkingExtendable = true;\n\t\t\t\t\t// edit date time on but returns to tenative on save\n\t\t\t\t\tthis.findMaxExtension().then(v => {\n\t\t\t\t\t\tthis.extendableMaximum = v;\n\t\t\t\t\t\tthis.checkingExtendable = false;\n\t\t\t\t\t});\n\t\t\t\t\t// Verify the booking date makes it updatable.\n\t\t\t\t\tif (DateNow(new Date()).isAfterDate(booking.startDateTz)) {\n\t\t\t\t\t\t// disable edit date time\n\t\t\t\t\t\tthis.disableEditTimeButton = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'approved':\n\t\t\t\t\tthis.statusImage = 'assets/icon/booking_confirmed.svg';\n\t\t\t\t\tthis.statusText = 'Confirmed';\n\t\t\t\t\tthis.disableCancelButton = false;\n\t\t\t\t\tthis.disableUpdateDetailsButton = false;\n\t\t\t\t\tthis.disableEditTimeButton = false; // BLOCKED: API doesn't update 'approval_status' on save.\n\t\t\t\t\tthis.checkingExtendable = true;\n\t\t\t\t\t// edit date time on, back to pending on change.\n\t\t\t\t\tthis.findMaxExtension().then(v => {\n\t\t\t\t\t\tthis.extendableMaximum = v;\n\t\t\t\t\t\tthis.checkingExtendable = false;\n\t\t\t\t\t});\n\t\t\t\t\t// Verify the booking date makes it updatable.\n\t\t\t\t\tif (DateNow(new Date()).isAfterDate(booking.startDateTz)) {\n\t\t\t\t\t\t// disable edit date time\n\t\t\t\t\t\tthis.disableEditTimeButton = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'declined':\n\t\t\t\t\tthis.statusImage = 'assets/icon/booking_cancelled.svg';\n\t\t\t\t\tthis.statusText = 'Cancelled';\n\t\t\t\t\t// you can edit time and go back to pending\n\t\t\t\t\tthis.extendableMaximum = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'cancelled':\n\t\t\t\t\tthis.statusImage = 'assets/icon/booking_cancelled.svg';\n\t\t\t\t\tthis.statusText = 'Cancelled';\n\t\t\t\t\tthis.extendableMaximum = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'expired':\n\t\t\t\t\tthis.statusImage = 'assets/icon/booking_expired.svg';\n\t\t\t\t\tthis.statusText = 'Expired';\n\t\t\t\t\tthis.extendableMaximum = 0;\n\n\t\t\t\t\tif (recentlyExpired && ['accepted', 'approved'].includes(orgStatus)) {\n\t\t\t\t\t\tthis.checkingExtendable = true;\n\t\t\t\t\t\tthis.findMaxExtension().then(v => {\n\t\t\t\t\t\t\tthis.extendableMaximum = v;\n\t\t\t\t\t\t\tthis.checkingExtendable = false;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: // TODO What is an appropriate default ? And refactor where else this is common.\n\t\t\t\t\tthis.statusImage = 'assets/icon/booking_expired.svg';\n\t\t\t\t\tthis.statusText = 'Expired';\n\t\t\t\t\tthis.extendableMaximum = 0;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic listItems(order) {\n\t\treturn order.items.map(i => `(${i.amount}) ${i.name}`).join(', ');\n\t}\n\n\tpublic expandLocation() {\n\t\tthis.expandedLocation = true;\n\t}\n\n\tpublic handleClose(fetchRooms: boolean = false) {\n\t\tthis.expandedLocation = false;\n\t\tthis.expandedAvailability = false;\n\t\tif (fetchRooms) {\n\t\t\tthis.fetchRooms(false);\n\t\t\tthis.invalidDueToOfficeRule && this.alertIfItHasConflict(false, true);\n\t\t\tthis.invalidDueToOfficeRule = false;\n\t\t}\n\t}\n\n\tpublic close(flag: string = '') {\n\t\tthis.dialogRef.close(flag);\n\t}\n\n\t/**\n\t * Check if there are any booking collisions with the new booking time\n\t * @param room_id 'sys-' id of room in question\n\t * @param date proposed booking time\n\t * @param duration proposed booking length (in minutes)\n\t */\n\tprivate async findMaxExtension(): Promise {\n\t\tconst setupInSeconds = this._data.booking.setup[this._data.booking.room.email] || 0;\n\t\tconst breakdownInMinutes = this._data.booking.breakdown[this._data.booking.room.email] ? this._data.booking.breakdown[this._data.booking.room.email] / 60 : 0;\n\n\t\t// Add a seconds, since the end time ends in :59, and add the setup time\n\t\tconst endTz = this._data.booking.endDateTz.addValue({ seconds: setupInSeconds + 1 });// (this._data.booking.date + this._data.booking.duration*60000)*0.001 -1\n\t\tconst params = {\n\t\t\troom_ids: this._data.booking.room.id,\n\t\t\tdateTz: endTz, // (((end + 60 + setupSeconds) * 1000)),\n\t\t\tduration: 60 + breakdownInMinutes,\n\t\t\thide_bookings: true,\n\t\t};\n\n\t\treturn await this._spaces\n\t\t\t.available(params, null, false)\n\t\t\t.then(\n\t\t\t\t(list) => {\n\t\t\t\t\t// measure gap in booking instead and have options\n\t\t\t\t\tconst gapInMinutes = ((list[0].available_until - (endTz.seconds - 60)) / 60);\n\t\t\t\t\tconst value = Math.min(60, gapInMinutes);\n\t\t\t\t\treturn value >= 15 ? value : 0;\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t);\n\t}\n\n\tpublic toggleUpdateView() {\n\t\tthis.showDetails = !this.showDetails;\n\t\t!this.showDetails && this.dispatchToGetFloorCurrentStatus(this._data.booking);\n\t}\n\n\n\n\n\tpublic getLocation(booking: Booking): any {\n\n\t\tif (this.buildings && booking.building_zone) {\n\t\t\treturn this.buildings.find(b => booking.building_zone === b.value);\n\t\t}\n\t\treturn [];\n\t}\n\n\n\t/**\n * Dispatches data for getting the current status of the booking floor.\n *\n * This function prepares and dispatches necessary data to retrieve the current status\n * of the booking floor.\n *\n * @param {Object} booking - The booking details object, containing room, date, duration, etc.\n * @param {boolean} editingSeries - A boolean indicating whether the booking is part of a series and being edited.\n\n */\n\tpublic dispatchToGetFloorCurrentStatus(booking, editingSeries: boolean = false) {\n\t\tconst timezone = booking.timezone;\n\t\tconst { capacity, internal_or_external } = booking.room;\n\t\tconst roomOption = capacity < 3 ? 0 : (capacity > 2 && capacity < 10) ? 1 : 2;\n\t\tconst roomSize = roomSizeOptions[roomOption];\n\n\t\t// Process recurrence data if the booking is part of a series being edited\n\t\tlet recurringBookingData = {};\n\t\tlet recurrenceStart = [];\n\t\tif(booking.is_recurrent && editingSeries) {\n\n\t\t\tthis._data.master_booking.occurrence_details.forEach(element => {\n\t\t\t\trecurrenceStart.push(new DateTZ({ date: element.start_epoch * 1000, is_local_tz: false, building_tz: timezone}));\n\t\t\t});\n\t\t\trecurrenceStart = recurrenceStart.sort((d1: DateTZ, d2: DateTZ) => d1.ms - d2.ms);\n\n\t\t\tconst {\n\t\t\t\tid,\n\t\t\t\trecurrence_period,\n\t\t\t\trecurrence_interval,\n\t\t\t\trecurrence_count,\n\t\t\t\tis_recurrent,\n\t\t\t\trecurrence_exceptions,\n\t\t\t\trecurrence_pattern,\n\t\t\t\trecurrence_days,\n\t\t\t\trecurrenEndFromOcurrences,\n\t\t\t\toccurrence_details,\n\t\t\t\toccurrence_edits,\n\t\t\t\toccurrence_ids,\n\t\t\t\trecurrence_type,\n\t\t\t\trecurrence_master_id,\n\t\t\t\tedits } = this._data.master_booking\n\n\t\t\tconst rec_endTz = recurrenEndFromOcurrences.bind(this._data.master_booking);\n\t\t\tconst recurrence_endTz = rec_endTz(occurrence_details)\n\n\n\n\n\t\t\trecurringBookingData = {\n\t\t\t\tid:id,\n\t\t\t\trecurrence_period: recurrence_period,\n\t\t\t\trecurrence_interval: recurrence_interval || 1,\n\t\t\t\trecurrence_endTz: recurrence_endTz, //this._data.master_booking.recurrence_endTz,\n\t\t\t\trecurrence_count: recurrence_count || 1,\n\t\t\t\tis_recurrent: is_recurrent,\n\t\t\t\trecurrence_starts: recurrenceStart,\n\t\t\t\trecurrence_exceptions: recurrence_exceptions || [],\n\t\t\t\trecurrence_pattern: recurrence_pattern || \"weekly\", //Helper value to store the last selected pattern (daily, weekly, monthly),\n\t\t\t\trecurrence_days: recurrence_days || [],\n\n\t\t\t\toccurrence_details: occurrence_details,\n occurrence_edits: occurrence_edits || null,\n occurrence_ids: occurrence_ids || null,\n recurrence_type: recurrence_type || null,\n recurrence_master_id: recurrence_master_id,\n\t\t\t\tedits: edits\n\t\t\t}\n\t\t};\n\n\n\t\tconst formGroup: BookingFormData = {\n\t\t\tlocation: [this.getLocation(booking)],\n\t\t\t//date: booking.date,\n\t\t\t// dateTz: recurrenceStart[0], //building_tz: timezone\n\t\t\tdateTz: recurrenceStart.length >=1 ? recurrenceStart[0] : closestToTimeSlotTz(new DateTZ({ date: Date.now(), is_local_tz: false }),\t15\t).toZone(timezone),\n\t\t\tduration: booking.duration,\n\t\t\tbookingType: internal_or_external === 'internal' ? bookingTypeOptions[0] : bookingTypeOptions[1],\n\t\t\troomSize: roomSize,\n\t\t\tselectedRoom: null,\n\t\t\ttimezone: timezone,\n\t\t\t// buildings: buildings,\n\t\t\t...this._data?.master_booking?.toJSON(),\n\t\t\t...recurringBookingData,\n\t\t\topt_out:booking.opt_out,\n\t\t\taction: 'edit_booking'\n\n\t\t};\n\n\t\t// Clear existing form and result data, then dispatch the updated form data\n\t\tthis.clearFormAndResultData();\n\t\tthis.store.dispatch(storeBookingFormData({ payload: formGroup }));\n\n\t\t// Dispatch a request to load available rooms based on the updated form data\n\t\tthis.store.dispatch(loadRoomsForResultsMap.request(roomFormDataToQuery(formGroup)))\n\t}\n\n\t/**\n * Opens a modal for editing a recurring series of bookings.\n */\n\tpublic editRecurringSeries() {\n\t\t// Dispatch the current status of the booking floor for editing the recurring series\n\t\tthis.dispatchToGetFloorCurrentStatus(this._data.booking, true);\n\n\t\tconst dialog_ref = this.dialog.open(RoomBookingModalComponent, {\n\t\t\t\tpanelClass: 'mck-modal',\n\t\t\t\tautoFocus: false,\n\t\t\t\tbackdropClass: 'mck-modal-backdrop',\n\t\t\t\tdata: {\n\t\t\t\t\tnavigateTo: this.navigateT0Search.bind(this),\n\t\t\t\t\taction: SeriesAction.EDIT, // Indicates the action type (editing a series)\n\t\t\t\t}\n\t\t});\n\n\t\t// Subscribe to the modal's closed event to handle the result\n\t\tdialog_ref.afterClosed().subscribe((flag) => {\n\t\t\t// Close the modal if the operation was successful (flag is truthy)\n\t\t\tflag && this.close(flag); //console.log('ROOM MODAL CLOSED')\n\t\t});\n\n\t}\n\n\tnavigateT0Search() {\n\t\tthis.router.navigate(['../home/results'], { relativeTo: this.route });\n\t}\n\n\n\tpublic clearFormAndResultData() {\n\t\tthis.store.dispatch(clearBookingFormData());\n\t\tthis.store.dispatch(loadRoomsForResults.clear());\n\t}\n\n\n\tpublic toggleEditView() {\n\t\tthis.fetchRooms(true);\n\t\tthis.expandedAvailability = true;\n\t}\n\n\tpublic updateBookingState(booking: Booking) {\n\t\tthis._data.booking = booking;\n\t\tthis.initDisplayValues(booking);\n\t\tthis.store.dispatch(loadBookingsWithQuery({ 'id': booking.id, 'email': this.currentUser.email, 'target': 'bookingById', 'offset': 0 }));\n\t\t// reload all booking for user from - apps/staff/src/app/booking/room-booking/room-booking.component.ts\n\t\tthis._data.refresh(); //\n\t}\n\n\tpublic cancelBooking(opts: { series?: boolean } = {}) {\n\t\t// Open the cancel booking modal\n\t\tthis.dialog.open(CancelBookingModalComponent, {\n\t\t\tpanelClass: 'mck-noexpand',\n\t\t\tdata: {\n\t\t\t\t...this._data,\n\t\t\t\t...opts,\n\t\t\t\tcallback: () => {\n\t\t\t\t\tconst booking = this._data.booking.clone();\n\t\t\t\t\tthis._data.booking.delete(opts).then(\n\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\tthis.close();\n\t\t\t\t\t\t\t// @TODO:API The deleted record is still being returned for quite some time regardless of timeout.\n\t\t\t\t\t\t\tthis._data.refresh()\n\t\t\t\t\t\t\t// this.timeout('refresh', () => this._data.refresh(), 1000);\n\t\t\t\t\t\t\t// Heap track event\n\t\t\t\t\t\t\tthis._service.analytics.track('delete', {\n\t\t\t\t\t\t\t\tbooking_id: booking.id,\n\t\t\t\t\t\t\t\toffice: booking.room.building.name,\n\t\t\t\t\t\t\t\troom: booking.room.name,\n\t\t\t\t\t\t\t\tstart_time: booking.startDateTz.ms,\n\t\t\t\t\t\t\t\tend_time: booking.endDateTz.ms,\n\t\t\t\t\t\t\t\tcatering: !!booking.catering.legth,\n\t\t\t\t\t\t\t\theadcount: booking?.expected_attendees[booking.room.email],\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\t(err) => {\n\t\t\t\t\t\t\tthis.displayWarningBanner(getStatusErrorMessage(err?.status));\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tautoFocus: false,\n\t\t\tbackdropClass: 'mck-modal-backdrop',\n\t\t});\n\t}\n\n\tpublic extendBooking() {\n\t\t// open the extend booking modal\n\t\tconst dialogRefX = this.dialog.open(BookingDurationModalComponent, {\n\t\t\tpanelClass: 'mck-noexpand',\n\t\t\tdata: {\n\t\t\t\tbooking: this._data.booking,\n\t\t\t\tmaximum: this.extendableMaximum,\n\t\t\t},\n\t\t\tautoFocus: false,\n\t\t\tbackdropClass: 'mck-modal-backdrop',\n\t\t});\n\n\t\tdialogRefX.afterClosed().subscribe((booking?: Booking) => {\n\t\t\tif (booking) {\n\t\t\t\tthis.updateBookingState(booking);\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic displayCancelModal() {\n\t\t// Can the display cancel modal open? If it isn't one of these statuses\n\t\treturn !['cancelled', 'expired', 'declined'].includes(this.status);\n\t}\n\n\n\tpublic confirmChanges(data: DateDurationData) {\n\t\t// Confirm the changes returned from the room availability modal.\n\t\tthis.mobile = data.mobile;\n\t\tthis.setAlternativeWeekStartDate(data.dateTz);\n\n\t\t// New booking flow has this.data\n\t\tif (this.data.value) {\n\t\t\tthis.fetchRooms(true, this.alternativeWeekStartDateTz);\n\t\t\t// submit\n\t\t\tthis.store.dispatch(storeBookingFormData({\n\t\t\t\tpayload: {\n\t\t\t\t\t...this.data.value,\n\t\t\t\t\tdateTz: data.dateTz,\n\t\t\t\t\tduration: data.duration,\n\t\t\t\t}\n\t\t\t}));\n\t\t} else if (data.save) {\n\t\t\t// update booking date/duration\n\t\t\tconst booking = this._data.booking.clone();\n\t\t\tconst pendingChanges = booking.duration !== data.duration || booking.startDateTz.ms !== data.dateTz.ms;\n\t\t\t// booking.duration = data.duration;\n\t\t\tbooking.startDateTz = data.dateTz; // date = data.dateTz.ms;\n\t\t\tbooking.endDateTz = data.dateTz.addValue({ minutes: data.duration });\n\t\t\tthis.loading = true;\n\n\t\t\tconst roomRules = rulesForSpace({\n\t\t\t\ttime: booking.date,\n\t\t\t\tduration: booking.duration,\n\t\t\t\tuser: this.currentUser,\n\t\t\t\trules: this._data.booking.room.building?.booking_rules,\n\t\t\t\tspace: booking.room\n\t\t\t});\n\n\t\t\t// Rooms requiring approval are reset to tentative when the time changes.\n\t\t\tif (pendingChanges && !roomRules?.auto_approve) {\n\t\t\t\t// https://acaprojects.atlassian.net/browse/MCK-1481\n\t\t\t\t/**\n\t\t\t\t * Having 2 ways of containing the status is icky but until PlaceOS\n\t\t\t\t * depreciates approval_status it's necessry.\n\t\t\t\t */\n\t\t\t\t// booking.approval_status[booking.room.email] = \"tentative\";\n\t\t\t\tbooking.status = \"tentative\";\n\t\t\t\tbooking.time_changed = true;\n\t\t\t}\n\t\t\telse if (roomRules.reason === SpaceFilterReason.OfficeRules) {\n\t\t\t\t// this.alertIfItHasConflict(false, true);\n\t\t\t\tthis.invalidDueToOfficeRule = true;\n\t\t\t\tthis.loading = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// booking.save() won't use the toAPIJSON conversion so use the booking service.\n\t\t\tthis._bookings.save(booking).then(\n\t\t\t\t(bkn) => {\n\t\t\t\t\t// update booking\n\t\t\t\t\tthis.updateBookingState(booking);\n\t\t\t\t\tthis.form = generateBookingForm(booking, this.available_fields);\n\t\t\t\t\tthis.loading = false;\n\t\t\t\t\tthis.displayInfoBanner();\n\t\t\t\t\tbooking.room.building.name\n\t\t\t\t\tthis._service.analytics.track('update', {\n\t\t\t\t\t\tbooking_id: booking.id,\n\t\t\t\t\t\toffice: booking.room.building.name,\n\t\t\t\t\t\troom: booking.room.global_name,\n\t\t\t\t\t\tstart_time: booking.startDateTz.ms,\n\t\t\t\t\t\tend_time: booking.endDateTz.ms,\n\t\t\t\t\t\tcatering: !!booking.catering.legth,\n\t\t\t\t\t\theadcount: booking.head_count,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t(err) => {\n\t\t\t\t\tthis.loading = false;\n\t\t\t\t\tthis.expandedAvailability = false;\n\t\t\t\t\tthis.displayWarningBanner(getStatusErrorMessage(err?.status));\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Open dialog if booking date and time is out of office rule\n\t * TO DO : Redundant code - same validaiton been applied over room detail while creating new booking - need to handle more graceful way. better if user been prohibited from choose future date if out of office rule on show avaialability calender itself\n\t * related to - https://acaprojects.atlassian.net/browse/MCK-2419\n\t */\n\n\talertIfItHasConflict(isBookable, isAvailable) {\n\t\t// this.isAlertDisplayed = true;\n\t\tconst data = {\n\t\t\theaderText: !isBookable ? SpaceConflictAlertModalData.NotBookableHeaderText : !isAvailable ? SpaceConflictAlertModalData.NotAvailableHeaderText : '',\n\t\t\tmessage: SpaceConflictAlertModalData.NotBookableDueToOfficeRule,\n\t\t\tbuttonLabel: 'Close',\n\t\t\tcallback: () => null,\n\t\t\tshouldClose: false\n\t\t};\n\t\tconst dialog = this.dialog.open(ConflictAlertModalComponent,\n\t\t\t{\n\t\t\t\tdata: data,\n\t\t\t\tpanelClass: 'mck-alert',\n\t\t\t\tautoFocus: false,\n\t\t\t\tbackdropClass: 'mck-modal-backdrop',\n\t\t\t\tdisableClose: !isBookable\n\t\t\t});\n\t}\n\n\n\n\tpublic displayInfoBanner() {\n\t\tthis.showInfoBanner = true;\n\t\tthis.timeout('close banner', () => {\n\t\t\tthis.showInfoBanner = false;\n\t\t}, 3000);\n\t}\n\n\tpublic displayWarningBanner(custom: string) {\n\t\tthis.warningMessage = custom;\n\t\tthis.showWarningBanner = true;\n\t\tthis.timeout('close banner', () => {\n\t\t\tthis.showWarningBanner = false;\n\t\t}, 10000);\n\t}\n\n\tpublic hideInfoBanner() {\n\t\tthis.showInfoBanner = false;\n\t}\n\n\tpublic hideWarningBanner() {\n\t\tthis.showWarningBanner = false;\n\t}\n\n\tpublic setAlternativeWeekStartDate(bookingDate: DateTZ) {\n\t\tif (!bookingDate) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.mobile) {\n\t\t\tthis.alternativeWeekStartDateTz = bookingDate.clone();\n\t\t} else {\n\t\t\tthis.alternativeWeekStartDateTz = bookingDate.clone().startOfValue('week').startOfValue('day');\n\t\t}\n\t}\n\n\tpublic updateCalendarWeekView(alternativeWeekStartDateTz: DateTZ) {\n\t\tthis.alternativeWeekStartDateTz = alternativeWeekStartDateTz.clone();\n\t\tthis.fetchRooms(true, this.alternativeWeekStartDateTz);\n\t}\n\n\tpublic fetchRooms(allWeek: boolean = true, alternativeWeekStartDateTz: DateTZ = null) {\n\t\tif (!this._data?.booking?.space?.id) {\n\t\t\treturn\n\t\t}\n\n\t\tconst day = 24 * 60;\n\t\tconst week = day * 7;\n\t\tconst date = (alternativeWeekStartDateTz || this._data?.booking?.startDateTz).clone(); // new DateTZ({date: alternativeWeekStartDateTz || this._data?.booking?.date});\n\t\tconst startOfDay = date.startOfValue('day').setValue({ second: 0, millisecond: 0 });\n\t\tconst startOfWeek = date.startOfValue('week');\n\n\t\t// Query for the entire day for this room\n\t\tconst query = {\n\t\t\tdateTz: allWeek ? startOfWeek : startOfDay,\n\t\t\tduration: allWeek ? week : day,\n\t\t\tlocations: this._data?.booking?.space?.id,\n\t\t\tcapacity: this._data?.booking?.space?.capacity,\n\t\t};\n\t\tthis.store.dispatch(loadByIdResults.request(query));\n\t}\n\n\tpublic addCatering() {\n\t\t// For the Add Catering button\n\t\tthis.showCatering = true;\n\t}\n\n\tpublic saveBookingWithCatering(form: FormGroup) {\n\t\t// Response from the catering modal closing\n\t\t// Close catering and confirmation modals and just show booking details modal\n\t\tif (!form) {\n\t\t\tthis.showCatering = false;\n\t\t\tthis.showDetails = false;\n\t\t\treturn;\n\t\t}\n\t\t// Update the booking state.\n\t\tconst booking = this._data.booking.clone();\n\t\tbooking.catering = form.controls.catering.value;\n\n\t\tif (booking.catering.length) {\n\t\t\tconst setup = {};\n\t\t\tsetup[booking.room.email] = booking.setup[booking.room.email] || 900;\n\t\t\tconst breakdown = {};\n\t\t\tbreakdown[booking.room.email] = booking.breakdown[booking.room.email] || 900;\n\n\t\t\tbooking.setup = setup\n\t\t\tbooking.breakdown = breakdown\n\t\t}\n\n\t\tthis.updateBookingState(booking);\n\t}\n\n\tpublic set specific_dates(val: boolean) {\n\t\tthis._specific_dates = val;\n\t}\n\n\tpublic get specific_dates(): boolean {\n\t\treturn this._specific_dates;\n\t}\n\n\n\tpublic toggleSpecificDates() {\n\t\tthis.specific_dates = !this.specific_dates;\n\t}\n\n\n}\n","import {\n Component,\n Inject,\n OnInit,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n BaseDirective,\n } from '@mckinsey-converge/base';\nimport {\n Booking,\n BookingsService,\n DEFAULT_BOOKING_DURATION,\n} from '@mckinsey-converge/data-common';\nimport {\n MAT_DIALOG_DATA,\n MatDialogRef\n} from '@angular/material/dialog';\nimport {\n FormControl,\n FormGroup,\n Validators\n} from '@angular/forms';\nimport * as cloneDeep from 'lodash/cloneDeep';\n\ninterface extendData {\n booking: Booking;\n maximum: number\n}\n\n@Component({\n selector: 'app-booking-duration-modal',\n template: `\n \n
\n \n

Your booking failed to update, please try again

\n \n
\n
\n \n
Extend booking duration
\n
\n
\n \n \n
\n
\n \n
\n
\n `,\n styleUrls: ['./booking-duration-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class BookingDurationModalComponent extends BaseDirective implements OnInit {\n\n public loading: string;\n public showWarningBanner: boolean = false;\n\n public get durationGroups() {\n const step = 15;\n const steps = Math.floor(this.data.maximum / step);\n const max = (steps * step) + this.data.booking.duration;\n\n return [{\n start: this.data.booking.duration,\n step,\n max\n }];\n }\n\n public formGroup = new FormGroup({\n date: new FormControl(this.data.booking.date, [Validators.required]),\n dateTz: new FormControl(this.data.booking.startDateTz, [Validators.required]),\n duration: new FormControl(DEFAULT_BOOKING_DURATION, [Validators.required]),\n });\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: extendData,\n private dialogRef: MatDialogRef,\n public _bookings: BookingsService,\n ) {\n super();\n }\n\n ngOnInit() {\n this.formGroup.setValue({\n date: this.data.booking.date,\n dateTz: this.data.booking.startDateTz,\n duration: this.data.booking.duration,\n });\n }\n\n public closeModal(booking?: Booking) {\n this.dialogRef.close(booking);\n }\n\n public updateBookingDuration() {\n const formData = this.formGroup.getRawValue();\n this.loading = 'Saving...';\n\n // clone booking to allow editing\n // const booking = this.data.booking.clone(); // this line commented for bug appearing in CNG-352. Used cloneDeep instead\n const booking = cloneDeep(this.data?.booking);\n booking.endDateTz = booking.startDateTz.addValue({ minutes: formData.duration });\n this._bookings.save(booking).then(\n () => {\n this.loading = null;\n this.closeModal(booking);\n },\n (err) => {\n this.loading = null;\n this.displayWarningBanner()\n }\n );\n }\n\n\n public displayWarningBanner() {\n this.showWarningBanner = true;\n this.timeout('close banner', () => {\n this.showWarningBanner = false;\n }, 10000);\n }\n\n public hideWarningBanner() {\n this.showWarningBanner= false;\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n OnInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { BookingResultsViewModel } from '../manage-bookings/manage-bookings.viewmodel';\nimport {\n BaseDirective,\n shorterLocalDateFormatString,\n timeWithZoneFormatString,\n startEndTimeFormatString,\n humaniseDuration,\n closestToTimeSlotTz,\n} from '@mckinsey-converge/base';\nimport { DateNow, DateTZ, localTimezone } from \"@mckinsey-converge/date-tz\";\nimport { Booking, BookingFormData, BookingStoreState, bookingTypeOptions, Building, BuildingCity, clearBookingFormData, defaultRoomSizeOption, DEFAULT_BOOKING_DURATION, flattenDisplayOffices, roomFormDataToQuery, roomSizeOptions, storeBookingFormData } from '@mckinsey-converge/data-common';\nimport { buildingStateSelector, BuildingStoreState, selectBuildingOptionsGroupedByCity } from '@mckinsey-converge/buildings';\nimport {\n select,\n Store\n} from '@ngrx/store';\nimport {\n BehaviorSubject,\n} from 'rxjs';\n\nimport { distinctUntilChanged, map } from 'rxjs/operators';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { loadRoomsForResults, loadRoomsForResultsMap } from '@mckinsey-converge/rooms';\nimport { MyBookingsStoreState } from '@mckinsey-converge/bookings';\nimport { UserStoreState } from '@mckinsey-converge/user';\n\nexport type RoomBookingStoreState = BookingStoreState & BuildingStoreState & MyBookingsStoreState & UserStoreState;\n@Component({\n selector: 'app-booking-result-item',\n templateUrl: './booking-result-item.component.html',\n styleUrls: ['./booking-result-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BookingResultItemComponent extends BaseDirective implements OnInit {\n /**\n * If undefined, we display in loading state.\n */\n @Input()\n public viewModel: BookingResultsViewModel | undefined;\n \n @Input()\n public bookings: BookingResultsViewModel[];\n\n @Input()\n public list: string;\n\n @Input() public index: number;\n\n @Input() public small: boolean = false;\n\n @Output()\n public bookingSelect = new EventEmitter();\n\n public buildings = new BehaviorSubject[]>([]);\n\n public roomName: string;\n public roomLocation: string;\n public host: string;\n public status: string;\n public timeStringParts: string[] = [' ', ' '];\n public localTimeStringParts: string[] = [' ', ' '];\n public isAnotherTimezone: boolean = false;\n public statusText: string;\n public statusImage: string;\n public durationString: string;\n public timeRangeString: string;\n public building: any;\n public get dateString() {\n if (!this.bookings || !this.bookings.length) return '';\n const bkn1 = this.bookings[this.index].booking;\n const d1 = new DateTZ({ date: bkn1.startDateTz.ms, is_local_tz: false, building_tz: bkn1.startDateTz.building_tz });\n if (this.index === 0) {\n return shorterLocalDateFormatString(d1);\n }\n const bkn2 = this.bookings[this.index - 1].booking;\n const d2 = new DateTZ({ date: bkn2.startDateTz.ms, is_local_tz: false, building_tz: bkn2.startDateTz.building_tz });\n if (!d1.isSameDate(d2, 'day')) {\n return shorterLocalDateFormatString(d1);\n }\n return '';\n }\n public get todayString() {\n if (!this.bookings || !this.bookings.length) {\n return '';\n }\n \n // Strip the booking of it's timezone infomation so isSameDate is just based on timestamp and local time.\n const d1 = new DateTZ({ date: this.bookings[this.index].booking.startDateTz.ms });\n return DateNow(new Date()).isSameDate(d1, 'day') ? '(Today)' : '';\n }\n\n public get attendeesCount(): number {\n // allAttendees is booking.attendees + 1 (booking.organizer)\n return this.viewModel.booking?.allAttendees.length; \n }\n\n public get has_catering(): number {\n return this.viewModel.booking?.has_catering && this.viewModel.booking?.catering?.length;\n }\n\n public get upcoming() {\n return ['tentative', 'accepted', 'approved'].includes(this.status);\n }\n\n constructor(private store: Store,\n private cdRef: ChangeDetectorRef) {\n super();\n }\n\n public ngOnInit(): void {\n this.setupDisplayFields();\n this.subscription('buildings', this.store.pipe(\n select(buildingStateSelector),\n select(selectBuildingOptionsGroupedByCity),\n map((grouped: Map) => {\n return flattenDisplayOffices(grouped);\n }),\n distinctUntilChanged()\n ).subscribe(next => {\n this.buildings.next(next);\n }));\n this.cdRef.detectChanges();\n }\n\n public hasData() {\n return this.viewModel !== undefined;\n }\n\n public getTooltipText(){\n return this.viewModel.booking.local_room_name.split(',');\n }\n\n public setupDisplayFields() { \n if (!this.viewModel?.booking) {\n return;\n }\n this.timeStringParts = timeWithZoneFormatString(this.viewModel.booking.startDateTz).split(' ');\n this.timeRangeString = startEndTimeFormatString(this.viewModel.booking.startDateTz, this.viewModel.booking.displayEndDateTz);\n this.isAnotherTimezone = !this.viewModel.booking.startDateTz.is_local_tz;\n this.localTimeStringParts = timeWithZoneFormatString(this.viewModel.booking.startDateTz.toZone(localTimezone())).split(' ');\n this.host = this.viewModel.booking.organiser.name;\n this.roomName = this.viewModel.booking.local_room_name.split(',')[0];\n this.roomLocation = this.viewModel.booking.room.street_and_city;\n this.durationString = humaniseDuration(this.viewModel.booking.duration, 'medium');\n\n if (this.viewModel.booking.status) {\n // mark bookings before today expired\n this.status = (DateNow(new Date()).isAfterDate(this.viewModel.booking.endDateTz) && this.list !== 'cancelled') ? 'expired' : this.viewModel.booking.status;\n switch(this.status) {\n case 'tentative':\n this.statusImage = 'assets/icon/booking_pending.svg';\n this.statusText = 'Pending';\n break;\n case 'accepted':\n this.statusImage = 'assets/icon/booking_confirmed.svg';\n this.statusText = 'Confirmed';\n break;\n case 'approved':\n this.statusImage = 'assets/icon/booking_confirmed.svg';\n this.statusText = 'Confirmed';\n break;\n case 'declined':\n this.statusImage = 'assets/icon/booking_cancelled.svg';\n this.statusText = 'Cancelled';\n break;\n case 'cancelled':\n this.statusImage = 'assets/icon/booking_cancelled.svg';\n this.statusText = 'Cancelled';\n break;\n case 'expired':\n this.statusImage = 'assets/icon/booking_expired.svg';\n this.statusText = 'Expired';\n break;\n default: // TODO\n this.statusImage = 'assets/icon/booking_expired.svg';\n this.statusText = 'Expired';\n break;\n }\n }\n this.cdRef.detectChanges();\n return;\n }\n\n}\n","

\n {{ dateString }} {{ todayString }}\n

\n
\n
\n
\n
\n
\n {{ timeStringParts[0] }} ({{ timeStringParts[1] }}) ({{\n durationString\n }})\n
\n
\n {{ localTimeStringParts[0] }} ({{ localTimeStringParts[1] }}) in your\n local timezone\n
\n
\n
\n \n \n \n \n \n
\n
\n
\n
\n
{{ statusText }}
\n
\n {{ timeRangeString }}\n
\n
\n \n
\n
\n
\n
\n
\n
\n \n \n
{{ viewModel.booking.title }}
\n {{\n viewModel.booking.bookingTypeLabel\n }}\n \n Multiroom\n \n \n
\n \n \n \n
\n
\n \n {{ roomName }}\n {{ roomLocation }}\n Host: {{ host }}\n {{ attendeesCount }}pp\n Catered\n \n \n \n \n \n \n \n \n
\n
\n
\n\n
\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { RoomBookingComponent } from 'src/app/booking/room-booking/room-booking.component';\nimport { RoomResultsComponent } from 'src/app/booking/room-results/room-results.component';\nimport { RoomDetailsComponent } from 'src/app/booking/room-details/room-details.component';\nimport { BookingCreateComponent } from './booking-create/booking-create.component';\nimport { BookingEditWrapperComponent } from './booking-create/booking-edit-wrapper.component';\nimport { RoomFiltersModalComponent } from 'src/app/booking/room-filters-modal/room-filters-modal.component';\nimport { ManageBookingsComponent } from './manage-bookings/manage-bookings.component';\nimport { OfficeFloorComponent } from './office-floor/office-floor/office-floor.component';\n\nconst routes: Routes = [\n {\n path: 'results',\n component: RoomResultsComponent,\n },\n {\n path: 'results/filter',\n component: RoomFiltersModalComponent,\n },\n {\n path: 'results/room',\n component: RoomDetailsComponent,\n },\n {\n path: 'create',\n component: BookingCreateComponent,\n },\n {\n path: 'edit',\n component: BookingEditWrapperComponent,\n },\n {\n path: 'manage',\n component: ManageBookingsComponent,\n },\n {\n path: 'catering/:id',\n data: { hasCatering: true },\n component: ManageBookingsComponent,\n },\n {\n path: 'booking/:id/:verb',\n component: ManageBookingsComponent,\n },\n {\n path: 'booking/:id',\n component: ManageBookingsComponent,\n },\n {\n path: 'floor-map',\n component: OfficeFloorComponent,\n },\n {\n path: 'results/booking-calendar',\n loadChildren: () => import('./booking-calendar/booking-calendar.module').then((m) => m.BookingCalendarModule),\n },\n {\n path: '**',\n component: RoomBookingComponent,\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class BookingRoutingModule {}\n","import {\n createReducer,\n on\n} from '@ngrx/store';\nimport { \n BookingFormState,\n clearBookingFormData,\n clearRoomFilters,\n openBookingSurvey,\n storeBookingFormData,\n storeRoomFilters\n} from '@mckinsey-converge/data-common';\nimport { closestToTimeSlotTz } from '@mckinsey-converge/base';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\n\nexport const initialBookingFormState: BookingFormState = {\n activeFormFilters: []\n};\n\nexport const bookingFormReducer = createReducer(initialBookingFormState,\n on(storeBookingFormData, (state: BookingFormState, action) => {\n return {\n ...state,\n activeForm: {\n ...state.activeForm,\n ...action.payload\n }\n } as BookingFormState;\n }),\n on(clearBookingFormData, state => ({\n ...state,\n activeForm: \n {\n location: state?.activeForm?.location,\n timezone: state?.activeForm?.timezone,\n dateTz: closestToTimeSlotTz(new DateTZ({ date: Date.now(), is_local_tz: false, building_tz: state?.activeForm?.timezone, }), 15)\n \n }\n }) as BookingFormState),\n on(openBookingSurvey, state => ({\n ...state,\n bookingCompleted: new Date()\n }) as BookingFormState),\n on(storeRoomFilters, (state: BookingFormState, action) => {\n return {\n ...state,\n activeFormFilters: action.payload\n } as BookingFormState;\n }),\n on(clearRoomFilters, (state: BookingFormState) => ({\n ...state,\n activeFormFilters: initialBookingFormState.activeFormFilters\n }) as BookingFormState)\n);\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { BookingRoutingModule } from './booking-routing.module';\nimport { BookingsListingComponent } from './bookings-listing/bookings-listing.component'\nimport { RoomBookingComponent } from './room-booking/room-booking.component';\nimport { RoomDetailsComponent } from './room-details/room-details.component';\nimport { BookingFormBaseComponent } from './booking-create/booking-form-base.component';\nimport { BookingCreateComponent } from './booking-create/booking-create.component';\nimport { BookingEditComponent } from './booking-create/booking-edit.component';\nimport { BookingConfirmationComponent } from './booking-confirmation/booking-confirmation.component';\nimport { UiModule } from '@mckinsey-converge/ui';\nimport { NgxMatSelectSearchModule } from 'ngx-mat-select-search';\nimport { MatSelectModule } from '@angular/material/select';\nimport {\n FormsModule,\n ReactiveFormsModule\n} from '@angular/forms';\nimport { SharedContentModule } from 'src/app/shared/shared.module';\nimport { MatButtonModule } from '@angular/material/button';\nimport { StoreModule } from '@ngrx/store';\nimport { bookingFormReducer } from 'src/app/booking/booking.form.reducer';\nimport { BookingResultItemComponent } from './booking-result-item/booking-result-item.component';\nimport { BookingDetailsModalComponent } from './booking-details-modal/booking-details-modal.component';\nimport { BookingDurationModalComponent } from './booking-duration-modal/booking-duration-modal.component';\nimport { CancelBookingModalComponent } from './cancel-booking-modal/cancel-booking-modal.component';\nimport { ManageBookingsComponent } from './manage-bookings/manage-bookings.component';\nimport { RoomResultsComponent } from './room-results/room-results.component';\nimport { SearchedLocationComponent } from './searched-location/searched-location.component';\nimport { ResultsHeaderComponent } from './results-header/results-header.component';\nimport { RoomAvailabilityPreviewComponent } from './room-availability-preview/room-availability-preview.component';\nimport { RoomLocationPreviewComponent } from './room-location-preview/room-location-preview.component';\nimport { RoomResultItemComponent } from './room-result-item/room-result-item.component';\nimport { RoomBookingFormComponent } from './room-booking-form/room-booking-form.component';\nimport { RoomBookingDetailsFormComponent } from './room-booking-details-form/room-booking-details-form.component';\nimport { RoomBookingModalComponent } from './room-booking-modal/room-booking-modal.component';\nimport { RoomResultsPaginatedComponent } from './room-results-paginated/room-results-paginated.component';\nimport { RoomFiltersModalComponent } from './room-filters-modal/room-filters-modal.component';\nimport { RoomFiltersFormComponent } from './room-filters-form/room-filters-form.component';\nimport { RoomAvailabilityPreviewModalComponent } from './room-availability-preview-modal/room-availability-preview-modal.component';\nimport { MapModule } from 'src/app/map/map.module';\nimport { OfficeFloorMapModule } from 'src/app/booking/office-floor/office-floor-map.module';\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\nimport { RoomResultsSectionComponent } from './room-results-section/room-results-section.component';\nimport { CalendarModule, DateAdapter } from 'angular-calendar';\nimport { adapterFactory } from 'angular-calendar/date-adapters/date-fns';\nimport { BookingCateringComponent } from './catering/catering.component';\nimport { OrderTableComponent } from './catering/order-table/order-table.component';\nimport { BookingCateringOrderDetailsComponent } from './catering/order-details/order-details.component';\nimport { BookingCateringOrderListComponent } from './catering/order-list/order-list.component';\nimport { CateringOrderListItemComponent } from './catering/order-list/item/item.component';\nimport { CateringMenuCategoryComponent } from './catering/order-details/category/category.component';\nimport { SurveyModalComponent } from '../components/survey-modal/survey-modal.component';\nimport { BookingEditWrapperComponent } from './booking-create/booking-edit-wrapper.component';\n\nexport const bookingModuleDeclarations = [\n BookingFormBaseComponent,\n BookingCreateComponent,\n BookingEditComponent,\n BookingConfirmationComponent,\n BookingDetailsModalComponent,\n BookingDurationModalComponent,\n BookingsListingComponent,\n BookingResultItemComponent,\n CancelBookingModalComponent,\n ManageBookingsComponent,\n BookingCateringComponent,\n BookingCateringOrderDetailsComponent,\n BookingCateringOrderListComponent,\n CateringMenuCategoryComponent,\n CateringOrderListItemComponent,\n RoomBookingComponent,\n RoomDetailsComponent,\n RoomResultsComponent,\n SearchedLocationComponent,\n ResultsHeaderComponent,\n RoomAvailabilityPreviewComponent,\n RoomLocationPreviewComponent,\n RoomResultItemComponent,\n RoomBookingModalComponent,\n RoomBookingFormComponent,\n RoomBookingDetailsFormComponent,\n RoomResultsPaginatedComponent,\n RoomFiltersModalComponent,\n RoomFiltersFormComponent,\n RoomResultsSectionComponent,\n RoomAvailabilityPreviewModalComponent,\n CateringMenuCategoryComponent,\n OrderTableComponent,\n SurveyModalComponent,\n BookingEditWrapperComponent\n];\n\nexport const bookingModuleImports = [\n CommonModule,\n UiModule,\n MatSelectModule,\n MatButtonModule,\n NgxMatSelectSearchModule,\n ReactiveFormsModule,\n SharedContentModule,\n FormsModule,\n NgxSkeletonLoaderModule,\n MapModule,\n CalendarModule.forRoot({\n provide: DateAdapter,\n useFactory: adapterFactory,\n }),\n OfficeFloorMapModule\n];\n\n\n@NgModule({\n declarations: [...bookingModuleDeclarations],\n imports: [\n ...bookingModuleImports,\n BookingRoutingModule,\n StoreModule.forFeature('bookingForm', bookingFormReducer)\n ]\n})\nexport class BookingModule {\n}","import { Component, Input, OnInit, OnChanges, ChangeDetectionStrategy, ChangeDetectorRef, NgZone } from '@angular/core';\nimport { throttleTime, tap, first, distinctUntilChanged, map } from 'rxjs/operators';\nimport { fromEvent } from 'rxjs';\nimport { TopBarHeaderMode } from 'src/app/components/topbar-header/topbar-header.component';\nimport { select, Store } from '@ngrx/store';\nimport { BehaviorSubject } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { BuildingStoreState, buildingStateSelector, selectBuildingOptionsGroupedByCity } from '@mckinsey-converge/buildings';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Booking, User, IEngineResponse, BookingStoreState, clearBookingFormData, BookingsService, UsersService, flattenDisplayOffices, BuildingCity, Building } from '@mckinsey-converge/data-common';\nimport { UserStoreState } from '@mckinsey-converge/user';\nimport { loadBookingsWithQuery, loadUpcomingBookingsResults, MyBookingsStoreState } from '@mckinsey-converge/bookings';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport {\n mapResultsToViewModels,\n BookingResultsViewModel,\n} from 'src/app/booking/manage-bookings/manage-bookings.viewmodel';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport { BookingDetailsModalComponent } from '../booking-details-modal/booking-details-modal.component';\nimport { BookingPagination } from '@mckinsey-converge/bookings';\nimport { DateNow } from '@mckinsey-converge/date-tz';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { loadRoomsForResults } from '@mckinsey-converge/rooms';\n\nexport type ManageBookingsStoreState = BookingStoreState &\n BuildingStoreState &\n MyBookingsStoreState &\n UserStoreState;\n\n@Component({\n selector: 'app-bookings-listing',\n templateUrl: './bookings-listing.component.html',\n styleUrls: ['./bookings-listing.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BookingsListingComponent extends BaseDirective implements OnInit, OnChanges {\n @Input() public config: any;\n @Input() public buildings: BehaviorSubject[]>;\n @Input() public searchBookingBy: string;\n @Input() public selectedHost: string;\n @Input() public activeTab: string;\n\n public bookingResults = new BehaviorSubject>(\n LoadingModel.empty()\n );\n public bookings: BookingResultsViewModel[];\n public showBookings = false;\n public reloading = false;\n public TopBarHeaderMode = TopBarHeaderMode;\n public mobile: boolean = false;\n\n /** Current User */\n public currentUser: User;\n master_booking: BookingResultsViewModel;\n allBookings: any[];\n\n public pagination: BookingPagination = {\n currentPage: 1,\n totalRecords: 0,\n pageLimit: 10,\n };\n bookingPerPage: any[] = [];\n filteredByHost: any[] = [];\n\n public get lastPage() {\n return this.pages.total === this.pagination.currentPage;\n }\n\n public get pages() {\n const p = this.pagination;\n const total = Math.ceil(p.totalRecords / p.pageLimit) ;\n const group = Math.ceil(p.currentPage / 5);\n const startPosition = Math.max(\n 1,\n Math.min(group > 1 ? (group - 1) * (p.pageLimit + 1) : 1, total - 4)\n );\n let pages = [];\n for (let x = startPosition; x <= Math.min(startPosition + 4, total); x++) {\n pages.push(x);\n }\n if (!pages.length) {\n pages.push(1);\n }\n const maxed = () => {\n if (total <= 5 || p.currentPage >= total) {\n return false;\n }\n return true;\n };\n const mined = () => {\n if (total <= 5 || p.currentPage < 6) {\n return false;\n }\n return true;\n };\n const start = p.currentPage > 5;\n const end = !(p.currentPage >= total);\n return {\n total,\n pages,\n min: mined(),\n max: maxed(),\n start,\n end,\n };\n }\n\n constructor(\n private store: Store,\n private _route: ActivatedRoute,\n private _router: Router,\n private dialog: MatDialog,\n private _bookings: BookingsService,\n private _zone: NgZone,\n private cdRef: ChangeDetectorRef\n ) {\n super();\n }\n\n public ngOnInit(): void {\n const breakpoint = 450;\n const selector = this.config.selector;\n const target = this.config.type;\n\n this.subscription(\n 'currentUser',\n this.store\n .select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n \n })\n );\n\n this.subscription('buildings', this.store.pipe(\n select(buildingStateSelector),\n select(selectBuildingOptionsGroupedByCity),\n map((grouped: Map) => {\n return flattenDisplayOffices(grouped);\n }),\n distinctUntilChanged()\n ).subscribe(next => {\n // this.buildings.next(next);\n if(this.activeTab === this.config.type) {\n this.store.dispatch(\n loadBookingsWithQuery({\n email: this.currentUser.email,\n from: DateNow(new Date()).ms,\n target,\n offset: 0,\n })\n );\n }\n\n // start the timer at the top of the minute;\n const offset = DateNow(new Date()).startOfValue('minute').addValue({ minutes: 1 }).ms - DateNow(new Date()).ms;\n // fetch it on one minute interval now that there is room data.\n setTimeout(() => {\n this.refresh(target);\n this._zone.runOutsideAngular(() => {\n this.interval('refreshBookings', () => this.refresh(target, true), 60 * 1000);\n });\n\n }, offset + 5000);\n\n \n }));\n\n\n\n const sort_asc = (a, b) => a.date - b.date;\n const sort_desc = (a, b) => b.date - a.date;\n\n this.subscription(\n 'bookingResults',\n this.store.pipe(select(selector)).subscribe((next) => {\n this.bookingResults.next(next);\n if (!next.isEmpty() && Array.isArray(next?.success?.results)) {\n let results = [...next?.success?.results].sort(\n this.config.reverse_sort ? sort_desc : sort_asc\n );\n this.showBookings = !!results.length;\n this.reloading = false;\n // save all bookings to reuse later \n this.allBookings = results;\n \n /** Filter all booings of active tab by selected host if any */\n this.filterBySelectedHost(true);\n\n } else {\n this.showBookings = false;\n this.reloading = false;\n this.bookings = [];\n this.pagination.totalRecords = 0;\n this.cdRef.detectChanges();\n }\n })\n );\n\n if (window) {\n this.mobile = window.innerWidth < breakpoint;\n\n }\n\n fromEvent(window, 'resize')\n .pipe(throttleTime(500))\n .pipe(\n tap({\n next: (val) => {\n const target = val.target as Window;\n this.mobile = target.innerWidth < breakpoint;\n },\n })\n ).subscribe();\n \n this.timeout('query', () =>\n this.subscription(\n 'route.query',\n this._route.queryParamMap.subscribe((params) => {\n if (params.has('page')) this.setPage(+params.get('page'), false);\n })\n )\n );\n }\n\n //For each result from results, it find its level and building from the lists and map with BookingResultsViewModel but filter all master from list.\n public getViewModel = (results) => mapResultsToViewModels(results).filter(b => !(b.booking.is_recurrent && b.booking.recurrence_type === 'master'));\n\n\n public splitArrayIntoSubarrays(originalArray, subarrayLength) {\n var newArray = [];\n for (var i = 0; i < originalArray.length; i += subarrayLength) {\n newArray.push(originalArray.slice(i, i + subarrayLength));\n }\n return newArray;\n }\n\n\n public ngOnChanges($change: any) {\n \n if ($change?.buildings?.currentValue !== $change?.buildings?.previousValue || $change?.activeTab?.currentValue !== $change?.activeTab?.previousValue) {\n this.refresh(this.config.type);\n }\n if ($change?.selectedHost?.currentValue !== $change?.selectedHost?.previousValue) {\n this.filterBySelectedHost(true);\n } else\n if ($change?.searchBookingBy?.currentValue !== $change?.searchBookingBy?.previousValue) {\n this.filterBySelectedHost(false);\n }\n }\n\n\n\n public filterBySelectedHost(isHostChanged: boolean) {\n\n // Converting search value to lower case for case-insensitive comparison\n const searchHost = this.selectedHost.toLowerCase().trim();\n // this.filteredByHost = [];\n\n if(this.allBookings) {\n\n if(searchHost) {\n if(isHostChanged) {\n // Combining event list and space arrays into one arrya for searchig \n const allItems = [...this.allBookings];\n // Filtering the combine array to find matching host email \n this.filteredByHost = allItems.filter( (item: any ) => \n this.isIncludes(item?.host, 'email', searchHost) ||\n this.isIncludes(item?.organiser, 'email', searchHost)\n );\n }\n else {\n this.filteredByHost = [...this.filteredByHost];\n }\n \n }\n else {\n this.filteredByHost = [...this.allBookings];\n }\n\n //Now send filtered booking by host to filter further by search input given in the field\n this.filterBookingsBySearchValue([...this.filteredByHost]);\n\n \n }\n }\n\n \n public isIncludes = (item: any, field: string, searchVaue: string) => (item && item[field] && item[field].toLowerCase().includes(searchVaue));\n\n public filterBookingsBySearchValue(filteredByHost) {\n\n // Converting search value to lower case for case-insensitive comparison\n const searchValue = this.searchBookingBy.toLowerCase().trim();\n let filteredItems = [];\n\n if(filteredByHost) {\n\n if(searchValue) {\n // Combining event list and space arrays into one arrya for searchig \n const allItems = [...filteredByHost];\n // Filtering the combine array to find matching room or booking \n filteredItems = allItems.filter( (item: any ) => \n this.isIncludes(item, 'title', searchValue) ||\n this.isIncludes(item?.creator, 'name', searchValue) ||\n this.isIncludes(item?.organiser, 'name', searchValue) ||\n this.isIncludes(item, 'local_room_name', searchValue) || // search with room name \n this.isIncludes(item, 'simple_name', searchValue) || \n (item?.attendees && !!item?.attendees.filter(el => el.name.toLowerCase().includes(searchValue)).length ) \n );\n }\n else {\n filteredItems = [...filteredByHost];\n }\n\n const filteredBookings = this.getViewModel(filteredItems);\n \n this.pagination.totalRecords = filteredBookings.length;\n this.pagination.currentPage = !this.lastPage ? 1 : this.pagination.currentPage;\n this.bookingPerPage = this.splitArrayIntoSubarrays(filteredBookings, this.pagination.pageLimit);\n this.bookings = this.bookingPerPage[this.pagination.currentPage-1];\n this.cdRef.detectChanges();\n }\n \n }\n\n \n\n\n\n\n public showResults() {\n // Don't show the loading state while we're reloading with Building details.\n return this.reloading; // || !this.bookingResults?.value?.isLoading;\n }\n\n public getBuilding(booking: Booking) {\n if (this.buildings && booking.building_zone) {\n return this.buildings.value.find((b) => booking.building_zone === b.value)?.meta.building;\n }\n return null;\n }\n\n // From the Manage Bookings page\n public async viewBooking(viewModel: BookingResultsViewModel) {\n\n if(viewModel.booking.is_recurrent) {\n let booking = this.allBookings.find(bkn => bkn.id === viewModel.booking.recurrence_master_id && bkn.recurrence_type === 'master1') ;\n if (!booking) {\n booking = await this._bookings.show(viewModel.booking.recurrence_master_id);\n }\n this.master_booking = mapResultsToViewModels([booking])[0];\n }\n this.cdRef.detectChanges();\n\n // real booking.room here.\n const dialogRefX = this.dialog.open(BookingDetailsModalComponent, {\n panelClass: 'mck-modal-wide-manage-booking',\n data: {\n booking: viewModel.booking,\n refresh: () => {\n this.refresh('all');\n },\n\n building: this.getBuilding(viewModel.booking),\n master_booking: this.master_booking?.booking || null,\n },\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n\n dialogRefX.afterClosed().subscribe((flag) => {\n flag !== 'DoNotClearActiveForm' && this.clearFormAndResultData();\n this.cdRef.detectChanges();\n // this.timeout('refreshBookings', () => this.refresh('all'), 1000);\n // this.timeout('refreshBookings', () => this.refresh('all'), 5000);\n });\n }\n\n public clearFormAndResultData() {\n this.store.dispatch(clearBookingFormData());\n this.store.dispatch(loadRoomsForResults.clear());\n this.cdRef.detectChanges();\n }\n\n public readonly prevPage = () => this.setPage(this.pagination.currentPage - 1);\n public readonly nextPage = () => this.setPage(this.pagination.currentPage + 1);\n public readonly prevGroup = () => this.setPage(this.pages.pages.length);\n public readonly nextGroup = () => this.setPage(this.pages.pages.length + 1);\n public readonly gotoPage = (page: number) => this.setPage(page);\n\n public setPage(page_idx: number, route: boolean = true) {\n if (!this.pages.total) return;\n const page = Math.max(1, Math.min(page_idx, this.pages.total));\n if (route) this._router.navigate([], { relativeTo: this._route, queryParams: { page } });\n this.pagination.currentPage = page;\n this.bookings = this.bookingPerPage[this.pagination.currentPage-1];\n this.cdRef.detectChanges();\n // this.refresh();\n }\n\n public refresh(target: string = this.activeTab, dontShowReloading = false) {\n if (!this.currentUser?.email) {\n return;\n }\n\n \n const offset = 0 ; //(this.pagination.currentPage - 1) * this.pagination.pageLimit;\n // fetch it on one minute interval now that there is room data.\n if(this.activeTab === this.config.type) {\n\n this.store.dispatch(\n loadBookingsWithQuery({\n email: this.currentUser.email,\n from: DateNow(new Date()).ms,\n target:this.activeTab,\n offset,\n })\n );\n this.reloading = !dontShowReloading;\n this.cdRef.detectChanges();\n }\n \n\n \n\n \n }\n\n identify(index, item) {\n return item.booking.id;\n }\n}\n","
\n \n \n
\n
\n \n \n \n \n \n \n \n \n
\n
\n
\n \n

You have no upcoming bookings

\n
\n
\n \n

End of list. Past meetings are saved for up to 48 hours.

\n
\n
\n \n

End of list. Cancelled meetings are saved for up to 48 hours.

\n
\n
\n
\n \n \n \n \n
\n
\n
\n
    \n
  • \n
  • 1
  • \n
  • ...
  • \n
  • \n {{p}}\n
  • \n
  • ...
  • \n
  • \n {{pages.total}}\n
  • \n
  • \n
\n
\n","import { Component, Inject, ViewEncapsulation } from '@angular/core';\nimport {\n dateBuildingFormatString,\n startEndTimeWithZoneFormatString,\n} from '@mckinsey-converge/base';\nimport { Booking, Building, RecurrencePeriod } from '@mckinsey-converge/data-common';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { BaseClass } from '@mckinsey-converge/base';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\n\ninterface data {\n booking: Booking;\n building: Building;\n callback: Function;\n master_booking?: Booking;\n hasLoaderUrl?: boolean;\n refresh?: Function;\n\t\tseries?:{};\n}\n\n@Component({\n selector: 'app-cancel-booking-modal',\n template: `\n \n
\n \n
\n
\n \n
{{ subtitle }}
\n
\n
\n

{{ data.booking.title }}

\n\n \n

\n Daily from \n \n

\n weekly on {{ data?.master_booking?.recurrence_days[0] | titlecase }}\n

\n

from

\n \n Monthly on \n\n {{ data?.master_booking?.dateString }} until\n {{ data?.master_booking?.endDateString }}\n

\n \n \n Specific Dates: \n
\n
\n
Date
\n
\n
\n {{ occurrence.dateTz.formatDate('dd MMM yyyy') }}\n
\n
\n
\n
\n
\n
\n\n

{{ dateString }}

\n

{{ timeString }}

\n

{{ buildingAddress }}

\n

{{ data.booking.room.local_room_name }}

\n \n
\n \n
\n
\n `,\n styleUrls: ['./cancel-booking-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class CancelBookingModalComponent extends BaseClass {\n public title: string;\n public roomName: string;\n public buildingAddress: string;\n public dateString: string;\n public timeString: string;\n public canceled = false;\n private _specific_dates = false;\n private recurrence_period: RecurrencePeriod;\n public occurrence_details: { start_epoch: number; dateTz: DateTZ; id: string }[];\n private recurrence_interval: number;\n\n public get subtitle() {\n return this.canceled\n ? `${this.title} booking cancelled`\n : this.data?.series\n ? 'Are you sure you want to cancel this recurring series?'\n : 'Are you sure you want to cancel this booking?';\n }\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: data,\n private dialogRef: MatDialogRef\n ) {\n super();\n this.dateString = dateBuildingFormatString(this.data.booking.startDateTz, true);\n this.timeString = startEndTimeWithZoneFormatString(this.data.booking.startDateTz, this.data.booking.displayEndDateTz);\n this.title = this.data.booking.title;\n this.buildingAddress = this.data.booking.room.street_and_city;\n\n\n\t\t\t\tif(this.data?.master_booking !== null) {\n\n\t\t\t\t\tthis.recurrence_period = this.data?.master_booking?.recurrence_period;\n\t\t\t\t\tthis.recurrence_interval = this.data?.master_booking?.recurrence_interval;\n\n\t\t\t\t\tthis.occurrence_details = this.data?.master_booking?.occurrence_details &&\n\t\t\t\t\t\tthis.data?.master_booking?.occurrence_details\n\t\t\t\t\t\t\t.filter((ocurrence) => ocurrence.id !== this.data?.master_booking?.id)\n\t\t\t\t\t\t\t.map((ocurrence) => ({\n\t\t\t\t\t\t\t\t...ocurrence,\n\t\t\t\t\t\t\t\tstart_epoch: ocurrence.start_epoch * 1000,\n\t\t\t\t\t\t\t\tdateTz: new DateTZ({\n\t\t\t\t\t\t\t\t\tdate: ocurrence.start_epoch * 1000,\n\t\t\t\t\t\t\t\t\tis_local_tz: false,\n\t\t\t\t\t\t\t\t\tbuilding_tz: this.data.master_booking.timezone,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t}));\n\t\t\t\t}\n\n }\n\n public closeModal() {\n this.dialogRef.close();\n }\n\n public cancelBooking() {\n this.canceled = true;\n this.data.callback();\n this.timeout('closeModal', () => this.closeModal(), 2000);\n }\n\n public set specific_dates(val: boolean) {\n this._specific_dates = val;\n }\n\n public get specific_dates(): boolean {\n return this._specific_dates;\n }\n\n public toggleSpecificDates() {\n this.specific_dates = !this.specific_dates;\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n OnInit\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport {\n Booking,\n Building,\n CateringOrder,\n Space,\n bookingStatusDetails,\n ApplicationService,\n CateringCategory,\n BookingsService,\n DataForConfirmation,\n getLastDateFromList\n} from '@mckinsey-converge/data-common';\nimport {\n DialogEvent,\n HashMap,\n shorterLocalDateFormatString\n} from '@mckinsey-converge/base';\nimport {\n BaseDirective,\n dateBuildingFormatString,\n startEndTimeWithZoneFormatString,\n humaniseDuration,\n toTitleCase\n} from '@mckinsey-converge/base';\nimport { TopBarHeaderMode } from 'src/app/components/topbar-header/topbar-header.component';\nimport {\n CateringDetailsModalComponent,\n CateringDetailsModalData\n} from '@mckinsey-converge/legacy-overlays';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\nexport interface BookingFlowEvent {\n /** Type of flow event */\n type: 'previous' | 'next' | 'reset' | 'close' | 'error';\n /** Step which the event was emitted from */\n step: string;\n /** Additional metadata for the event */\n metadata?: HashMap;\n}\n\n@Component({\n selector: 'booking-catering',\n templateUrl: './catering.component.html',\n styleUrls: ['./catering.component.scss']\n})\nexport class BookingCateringComponent extends BaseDirective implements OnInit {\n /** Form fields for the booking */\n @Input() public form: FormGroup;\n /** Emitter for flow update events */\n @Output() public event = new EventEmitter();\n @Input() public booking: Booking;\n @Input() public isOccurence: boolean;\n /** Emitter for open catering */\n @Output() public showCatering = new EventEmitter();\n dataForConfirmation: DataForConfirmation;\n isEditSeries: boolean = false;\n\n constructor(\n private _dialog: MatDialog,\n public _service: ApplicationService,\n public _bookings: BookingsService,\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.updateConfimatinModal();\n }\n\n /** Active order to display details for */\n public active_order: CateringOrder;\n public TopBarHeaderMode = TopBarHeaderMode;\n public confirmed: boolean = false;\n public next_disabled: boolean = true;\n\n public loading: boolean = false;\n\n\n public get building(): Building[] {\n return this.booking.room.building;\n };\n\n /** Field for storing catering details */\n public get catering_field() {\n return this.form && this.form.controls.catering ? this.form.controls.catering : null;\n }\n\n /** List of spaces selected for the booking */\n public get space_list(): Space[] {\n return this.form && this.form?.controls?.space_list?.value.length\n ? this.form.controls.space_list.value\n : [];\n }\n\n /** Date of the booking */\n public get dateTz(): number {\n return this.form && this.form.controls.dateTz\n ? this.form.controls.dateTz.value\n : DateNow(new Date()).startOfValue('minute');\n }\n\n /** Duration of the booking */\n public get duration(): number {\n return this.form && this.form.controls.duration ? this.form.controls.duration.value : 60;\n }\n\n /** Whether booking is all day */\n public get all_day(): boolean {\n return this.form && this.form.controls.all_day && this.form.controls.all_day.value;\n }\n\n\n public get type() {\n return toTitleCase(this.booking?.class);\n }\n\n public get dateString() {\n return dateBuildingFormatString(this.booking.startDateTz);\n }\n\n public get timeString() {\n return startEndTimeWithZoneFormatString(this.booking.startDateTz, this.booking?.displayEndDateTz);\n }\n\n public get durationString() {\n return humaniseDuration(this.booking?.duration);\n }\n\n public get status() {\n return bookingStatusDetails(this.booking);\n }\n\n /** Create a new catering order */\n public newOrder(): void {\n const order = new CateringOrder({ booking_timezone: this.booking?.timezone });\n this.active_order = order;\n }\n\n // Combine the same items for the same timeslot into the same order item\n public combineItems = (newItems: CateringCategory[], oldItems: CateringCategory[]) => {\n // Group and Sum the items in an Item ID keyed object\n const itemsObj = {};\n oldItems.forEach((i) => {\n if (itemsObj[i.id]) {\n itemsObj[i.id].setAmount(itemsObj[i.id].amount + i.amount);\n } else {\n itemsObj[i.id] = i;\n }\n });\n newItems.forEach((i) => {\n if (itemsObj[i.id]) {\n itemsObj[i.id].setAmount(itemsObj[i.id].amount + i.amount);\n } else {\n itemsObj[i.id] = i;\n }\n })\n // Convert the object to an array\n const items = [];\n for (const item in itemsObj) {\n items.push(itemsObj[item]);\n }\n // return the items consolidated by item ID.\n return items;\n }\n\n /** Handle changes to catering order */\n public handleOrderEvent(order: CateringOrder) {\n /* istanbul ignore else */\n if (order) {\n this.next_disabled = false;\n const orders = this.form.controls.catering.value;\n // When the order edit button is clicked we are editing an existing order\n const index = orders.findIndex((an_order) => {\n return order.id === an_order.id\n });\n\n // If editing an existing order row it will have an index, if not create a new row\n if (index < 0) {\n // Add the new order\n orders.push(order);\n } else {\n // Replace the existing order with the edited order\n orders.splice(index, 1, order);\n }\n\n // Setup the \"reduced\" data containers\n const reduceItems = {};\n const reduceOrders = {};\n orders.forEach((o) => {\n if (reduceItems[o.delivery_time]) {\n // An order for this timeslot already exists, combine the same items to dedupe rows\n reduceItems[o.delivery_time] = this.combineItems(o.items, reduceItems[o.delivery_time]);\n } else {\n // Since this is a new timeslot, use the existing items\n reduceItems[o.delivery_time] = o.items;\n // Copy the order and clear its item contents, placeholder for the updated items\n reduceOrders[o.delivery_time] = o;\n reduceOrders[o.delivery_time].items = [];\n }\n });\n\n // Add the reduced items to the reduced orders\n let consolidatedOrders = [];\n for (const deliveryTime in reduceOrders) {\n const order = reduceOrders[deliveryTime];\n order.items = reduceItems[deliveryTime]\n consolidatedOrders.push(order);\n }\n\n this.form.controls.catering.setValue(consolidatedOrders);\n }\n this.active_order = null;\n }\n\n public closeCallback() {\n // Bail and close the catering component\n this.next_disabled = true;\n this.active_order = null;\n\n // Need to clone to avoid readonly errors\n this.form.controls.catering.setValue(this.booking.catering.map(order => order.clone()));\n this.event.emit();\n }\n\n public closeConfirmation() {\n this.event.emit();\n }\n\n /** Open modal for adding equipment requirements to booking */\n private openCateringDetailsModal() {\n const ref = this._dialog.open(\n CateringDetailsModalComponent,\n {\n maxWidth: '95vw',\n width: '32em',\n data: {\n spaces: this.form.controls.space_list.value,\n notes_field: this.form.controls.notes,\n catering: this.form.controls.catering,\n booking: this.booking\n }\n }\n );\n this.subscription(\n 'modal_events',\n ref.componentInstance.event.subscribe((event: DialogEvent) => {\n // Catering requirements and charge code modal closed event\n /* istanbul ignore else */\n if (event.reason === 'done') {\n // Closed with the reason done\n ref.close();\n\n // Display the loading animation and the Booking Confrimation component\n this.loading = true;\n this.confirmed = true;\n\n this.saveBooking();\n }\n })\n );\n ref.afterClosed().subscribe(() => this.unsub('modal_events'));\n }\n\n public saveBooking() {\n // Clone and append the catering and note data to the booking\n let booking = this.booking.clone();\n booking.catering = this.form.controls.catering.value;\n booking.notes = this.form.controls.notes.value;\n if(booking.notes.length || booking.catering.length) {\n\n const setup = { ...booking.setup };\n setup[booking.space.email] = booking.setup[booking.space.email] || 900;\n booking.setup = setup;\n\n const breakdown = { ...booking.breakdown };\n breakdown[booking.space.email] = booking.breakdown[booking.space.email] || 900;\n booking.breakdown = breakdown;\n }\n\n\n // Save to the API and respond. && !this.isOccurence\n this._bookings.save(booking, booking.is_recurrent ).then(\n (bkn) => {\n this.booking = new Booking({ ...this.booking, ...bkn.toApiJSON() }); \n // Stop the loading animation and show the booking confirmation component.\n this.updateConfimatinModal();\n\n this.loading = false;\n this.confirmed = true;\n this.event.emit(this.form)\n },\n (err) => {\n // Stop the loading animation and return to the catering flow with an error.\n this.loading = false;\n this.confirmed = false;\n this._service.notifyError(\n `Error updating booking.`\n );\n }\n )\n }\n\n public handleOrderListEvent($event: any) {\n const orders = this.form.controls.catering.value;\n // Handle the Previous and Next buttons\n if ($event.type === 'previous') {\n // Bail and close the catering component\n this.next_disabled = true;\n this.active_order = null;\n // Need to clone to avoid readonly errors\n this.form.controls.catering.setValue(this.booking.catering.map(order => order.clone()));\n this.event.emit();\n }\n if ($event.type === 'next') {\n // Move on to the catering details modal\n this.next_disabled = false;\n if (orders.length) {\n this.openCateringDetailsModal();\n } else {\n // Display the loading animation and the Booking Confrimation component\n this.loading = true;\n this.confirmed = true;\n this.saveBooking();\n }\n }\n }\n\n public openCatering() {\n // Start catering from the Booking Confirmation page Add Catering button\n this.confirmed = false;\n this.next_disabled = true;\n this.showCatering.emit();\n }\n\n /**\n * Public method to update the confirmation modal data.\n * This method updates the dataForConfirmation object with the necessary information\n * for displaying the confirmation modal in the application.\n */\n public updateConfimatinModal() {\n\n // Prepare an object with booking details and related information for the confirmation modal\n this.dataForConfirmation = {\n booking: this.booking, // Information about the booking\n status: this.status, // Status of the booking (e.g., confirmed, pending, etc.)\n dateString: this.dateString, // Date of the booking in string format\n endDateString: this.endDateString, // End date of the booking in string format\n timeString: this.timeString, // Time of the booking in string format\n durationString: this.durationString, // Duration of the booking in string format\n type: this.type, // Type of booking (e.g., internal, external, etc.)\n isEditSeries: this.isEditSeries, // Boolean indicating whether it's an edit in a series of events\n // Function to check if there are conflicts with occurrences of the booking\n isConflictWithOccurences: this.isConflictWithOccurences.bind(this),\n // Function to open a modal in case of conflicts with recurring events\n // openRecurrenceConflictsModal: this.openRecurrenceConflictsModal.bind(this)\n }\n }\n\n /**\n * Checks if there are conflicts with the current booking and its occurrences.\n * Calculates the difference between total occurrences and available occurrences\n * to determine if there are conflicts.\n *\n * @returns {Object} An object containing conflict information:\n * - is_conflict: A boolean indicating if there are conflicts (true if conflicts exist, false otherwise).\n * - total_Conflicts: The total number of conflicts (the difference between total occurrences and available occurrences).\n */\n // public isConflictWithOccurences() {\n // const conflicts = this?.booking?.room?.totalOccurrences - this?.booking?.room?.availableOccurrences;\n // return { is_conflict: !!conflicts, total_Conflicts: conflicts };\n // }\n\n public isConflictWithOccurences() {\n let totalConflicts = 0;\n \n this.booking.multi_rooms.forEach(room => {\n totalConflicts += Math.max(room.totalOccurrences - room.availableOccurrences, 0);\n });\n \n\n const result = {\n is_conflict: totalConflicts > 0, \n total_Conflicts: totalConflicts \n };\n return result;\n }\n\n /**\n * Retrieves the end date string for the booking, considering recurrence if applicable.\n * If the booking is recurrent, it calculates the end date based on recurrence starts;\n * otherwise, it uses the booking's start date as the end date.\n *\n * @returns {string} The formatted end date string in a shorter local date format.\n */\n public get endDateString(): string {\n // Determine the array of date-time strings based on recurrence or single start date\n let recurrenceStart: Array= [];\n const { is_recurrent, recurrence_starts, occurrence_details, timezone} = this.booking;\n if(is_recurrent && recurrence_starts.length) {\n recurrenceStart = this.booking.recurrence_starts;\n }\n else if(is_recurrent && !recurrence_starts.length && occurrence_details.length) {\n this.booking.occurrence_details.forEach(element => {\n recurrenceStart.push(new DateTZ({ date: element.start_epoch * 1000, is_local_tz: false, building_tz: timezone}));\n });\n recurrenceStart = recurrenceStart.sort((d1: DateTZ, d2: DateTZ) => d1.ms - d2.ms);\n }\n else {\n recurrenceStart = [this.booking.startDateTz];\n }\n\n\n // const endDtz = (this.booking.is_recurrent && this.booking.recurrence_starts.length) ? this.booking.recurrence_starts : [this.booking.startDateTz]\n // Get the last date from the list of date-time strings and format it in a shorter local date format\n return shorterLocalDateFormatString(getLastDateFromList(recurrenceStart));\n }\n\n}\n","
\n
\n \n \n
\n
\n
\n
\n \n \n \n
\n \n \n \n
\n
\n \n
\n
\n
","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { FormControl } from '@angular/forms';\n\nimport { CateringCategory } from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'a-category-display',\n templateUrl: './category.component.html',\n styleUrls: ['./category.component.scss']\n})\nexport class CateringMenuCategoryComponent {\n /** Category to display details for */\n @Input() public category: CateringCategory;\n /** Form control for the list of order items */\n @Input() public items: FormControl;\n /** Currency symbol for the active space */\n @Input() public symbol: string;\n /** Whether item should be disabled if not available anytime */\n @Input() public disabled: boolean;\n /** Whether to show smaller version of component */\n @Input() public compact: boolean;\n /** Emitter for close events */\n @Output() public close = new EventEmitter();\n}\n","
\n
\n \n
{{ category?.name }}
\n
\n
\n\n
\n \n
\n
\n\n
\n
\n \n
\n
\n Category contains no available items\n
\n
\n
\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport {\n FormControl,\n FormGroup\n} from '@angular/forms';\nimport { BehaviorSubject } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport {\n Building,\n CateringCategory,\n CateringItem,\n CateringMenuService,\n CateringOrder,\n OrganisationService,\n Space\n} from '@mckinsey-converge/data-common';\nimport {\n DialogEvent,\n Identity\n} from '@mckinsey-converge/base';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n BookingCateringConfirmModalComponent,\n CateringConfirmModalData\n} from '@mckinsey-converge/legacy-overlays';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\ninterface StartEndResponse {\n timezone: string,\n start: DateTZ;\n end: DateTZ\n}\n\n@Component({\n selector: 'a-catering-order-details',\n templateUrl: './order-details.component.html',\n styleUrls: ['./order-details.component.scss']\n})\nexport class BookingCateringOrderDetailsComponent extends BaseDirective implements OnInit {\n /** Catering order to edit details of */\n @Input() public order: CateringOrder;\n /** Booking date */\n @Input() public dateTz: DateTZ;\n /** Booking duration */\n @Input() public duration: number;\n /** Booking duration */\n @Input() public space_list: Space[];\n /** Whether booking is all day */\n @Input() public all_day: boolean;\n /** Whether top header details should be shown */\n @Input() public hide_details: boolean;\n /** Whether to show smaller version of component */\n @Input() public compact: boolean;\n /** Emitter for changes to the catering order */\n @Output() public event = new EventEmitter();\n /** Form controls for order */\n public form: FormGroup;\n /** List of available catering item categories */\n public category_list: CateringCategory[] = [];\n /** Active category to display details for */\n public active_category: CateringCategory;\n /** List of available times for delivering catering */\n public available_times: Identity[] = [];\n /** Whether the menu is loading */\n public loading: boolean;\n /** Whether the search input should be shown */\n public show_search: boolean;\n /** Current search string for filtering */\n public readonly search$ = new BehaviorSubject('');\n /** List of menu items that match the search string */\n public matched_items: CateringItem[] = [];\n\n @ViewChild('input') private _input_el: ElementRef;\n\n /** Whether user is able to order from the currently selected space */\n public get can_order(): boolean {\n return (\n (this.active_building.has_catering || this.category_list.length) &&\n (!this.within_restricted_time || this.has_available_items) &&\n !this.out_of_hours\n );\n }\n\n /** Building associated with the selected space */\n public get active_building(): Building {\n const form_controls = (this.form || { controls: { location_id: { value: '' } } }).controls;\n const space: Space =\n this.space_list.find((space) => space.email == form_controls.location_id.value) ||\n ({ level: {} } as any);\n return (\n this._org.buildings.find((bld) => space.level?.building_id === bld.id) ||\n ({ catering_restricted_from: 0 } as any)\n );\n }\n\n /** Currency code for the active building */\n public get symbol(): string {\n return this.active_building.currency || 'USD';\n }\n\n /** Number of items in the order */\n public get item_count(): number {\n return this.form\n ? this.form.controls.items.value.reduce((total, item) => total + item.amount, 0)\n : 0;\n }\n\n /* istanbul ignore next */\n /** Whether booking time is outside of catering hours */\n public get out_of_hours(): boolean {\n return this.form.controls.delivery_time.value < 0;\n }\n\n /** Whether booking is with the restricted ordering period */\n public get within_restricted_time(): boolean {\n const expired = DateNow(new Date()).addValue({ hours: this.active_building.catering_restricted_from }).startOfValue('minute');\n return this.dateTz.isBeforeDate(expired);\n }\n\n /** Whether items are available for order at anytime */\n public get has_available_items(): boolean {\n return this.category_list.reduce(\n (available, category) => available || category.can_order_anytime,\n false\n );\n }\n\n constructor(\n private _menu: CateringMenuService,\n private _org: OrganisationService,\n private _dialog: MatDialog\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.generateAvailableTimes();\n this.subscription('search', this.search$.pipe(map((str) => {\n const search = str.toLowerCase();\n const items = [];\n for (const category of this.category_list) {\n if (category.items) {\n for (const group of category.items) {\n if ((group as any).items) {\n if (\n (group as any).package &&\n (group.name.toLowerCase().includes(search) ||\n (group as any).items.find((item) =>\n item.name.toLowerCase().includes(search)\n ))\n ) {\n items.push(group);\n } else {\n for (const item of (group as any).items) {\n if (item.name.toLowerCase().includes(search)) {\n items.push(item);\n }\n }\n }\n } else {\n if (group.name.toLowerCase().includes(search)) {\n items.push(group);\n }\n }\n }\n }\n }\n return items;\n })).subscribe((items) => this.matched_items = items));\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n /* istanbul ignore else */\n if (changes.date || changes.duration) {\n this.generateAvailableTimes();\n /* istanbul ignore else */\n if (\n this.form &&\n !this.available_times.find(\n (time) => time.id === this.form.controls.delivery_time.value\n )\n ) {\n this.form.controls.delivery_time.setValue(this.available_times[0].id);\n }\n }\n /* istanbul ignore else */\n if (changes.space_list) {\n /* istanbul ignore else */\n if (this.form && this.space_list && !this.form.controls.location_id.value) {\n this.form.controls.location_id.setValue(this.space_list[0].email);\n }\n }\n /* istanbul ignore else */\n if (changes.order && this.order) {\n this.initForm();\n }\n }\n\n public focusSearch() {\n if (this._input_el && this.show_search) {\n this._input_el.nativeElement.focus();\n }\n }\n\n public initForm() {\n this.form = new FormGroup({\n id: new FormControl(this.order.id),\n booking_date: new FormControl(\n this.all_day ? this.dateTz.startOfValue('day').ms : this.dateTz.ms\n ),\n location_id: new FormControl(this.order.location_id || this.space_list[0]?.email),\n delivery_time: new FormControl(this.order.delivery_time || this.available_times[0].id),\n items: new FormControl(this.order.items.map((item) => new CateringItem(item)))\n });\n this.subscription(\n 'space_change',\n this.form.controls.location_id.valueChanges.subscribe((space) => {\n this.generateAvailableTimes();\n if (\n !this.available_times.find(\n (time) => time.id === this.form.controls.delivery_time.value\n )\n ) {\n this.form.controls.delivery_time.setValue(this.available_times[0].id);\n }\n this.form.controls.items.setValue([]);\n this.loadMenu();\n })\n );\n this.loadMenu();\n this.generateAvailableTimes();\n if (\n this.form &&\n !this.available_times.find((time) => time.id === this.form.controls.delivery_time.value)\n ) {\n this.form.controls.delivery_time.setValue(this.available_times[0].id);\n }\n }\n\n public confirmOrder() {\n const ref = this._dialog.open(BookingCateringConfirmModalComponent, {\n maxWidth: '95vw',\n data: {\n all_day: this.all_day,\n dateTz: this.dateTz,\n form: this.form\n }\n });\n this.subscription(\n 'confirm_event',\n ref.componentInstance.event.subscribe((event: DialogEvent) => {\n /* istanbul ignore else */\n if (event.reason === 'done') {\n const order = new CateringOrder({ ...this.order, ...this.form.value });\n // order is emited but who is receiving?\n this.event.emit(order);\n ref.close();\n }\n })\n );\n ref.afterClosed().subscribe(() => {\n this.unsub('confirm_event');\n });\n }\n\n private loadMenu() {\n const space = this.space_list.find(\n (space) => space.email === this.form.controls.location_id.value\n );\n\n this.loading = true;\n this._menu\n .query({ zone_id: this._org.buildings.find((bld) => space?.zones.includes(bld.id))?.id })\n .then(\n (list) => {\n this.loading = false;\n this.category_list = list.map((i) => new CateringCategory(i))\n .filter(c => !c.out_of_stock);\n },\n () => (this.loading = false)\n );\n }\n\n /** Generate a list of available delivery times for the given booking time */\n private generateAvailableTimes() {\n let { timezone, start, end } = this.generateStartAndEndTimes();\n start = start.setValue({ minute: Math.ceil(start.minutes / 5) * 5 });\n // will be different from staff in these commonly named methods.\n const start_date = this.dateTz;\n this.available_times = [];\n while (start.isBeforeDate(end)) {\n this.available_times.push({\n id: Math.abs(start_date.dateDiff(start, 'minutes')),\n name: start.formatDate('h:mma').toLocaleLowerCase(),\n });\n start = start.addValue({ minutes: 5 });\n }\n /* istanbul ignore else */\n if (this.available_times.length === 0) {\n this.available_times.push({ id: -1, name: 'Out of hours' });\n }\n }\n\n private generateStartAndEndTimes(): StartEndResponse {\n const now = DateNow(new Date())\n let timezone = now.local_tz;\n const space_email = this.form ? this.form.controls.location_id.value : null;\n let catering_hours = { start: 7, end: 20 };\n let building_time = this.dateTz.startOfValue('day');\n let cat_start_time = building_time.addValue({ hours: catering_hours.start });\n let cat_end_time = building_time.addValue({ hours: catering_hours.end });\n\n if (space_email) {\n // Fetch the Space and Building\n const space = this.space_list.find((space) => space.email === space_email);\n const building = this._org.buildings.find((bld) => space?.zones.includes(bld.id));\n if (building.timezone) {\n // Update to the building timezone if defined.\n timezone = building.timezone;\n building_time = this.dateTz.toZone(timezone).startOfValue('day');\n }\n if (building?.catering_hours) {\n // Update to the building catering hours if defined.\n catering_hours = building?.catering_hours;\n }\n // Update the hours with the currently defined timezone.\n cat_start_time = building_time.addValue({ hours: catering_hours.start });\n cat_end_time = building_time.addValue({ hours: catering_hours.end });\n }\n\n // Start Time of the Booking\n let start = this.dateTz.toZone(timezone);\n let end = this.dateTz.toZone(timezone).addValue({ minutes: this.duration });\n\n // Do the booking start and end time coincide with the catering hours?\n if (start.isBeforeDate(cat_start_time)) {\n // booking start before catering opens'\n if (cat_end_time.isAfterDate(start)) {\n // catering closes after booking starts'\n start = cat_start_time.addValue({});\n } else {\n // were just closed, catering closes before booking start'\n start = cat_end_time.addValue({});\n end = cat_end_time.addValue({});\n return { timezone, start, end };\n }\n } else {\n // booking starts after catering is open'\n if (cat_end_time.isBeforeDate(start)) {\n // were just closed, catering closed before booking start'\n start = cat_end_time.addValue({});\n end = cat_end_time.addValue({});\n return { timezone, start, end };\n }\n }\n\n if (end.isBeforeDate(cat_end_time)) {\n // booking ends before catering closes'\n if (cat_start_time.isAfterDate(end)) {\n // were just closed, catering opens is after booking ends'\n start = cat_start_time.addValue({});\n end = cat_start_time.addValue({});\n return { timezone, start, end };\n }\n } else {\n // booking ends after catering closes'\n // set the booking end to the catering close time.'\n end = cat_end_time.addValue({});\n }\n\n return { timezone, start, end };\n }\n}\n\n","
\n
\n
\n
\n
Deliver to:
\n \n \n \n {{ space.local_name }}\n \n \n \n
\n
\n
At:
\n \n \n \n {{ time.name }}\n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n
\n
\n
\n
\n \n
\n \n
\n
\n \n \n
\n \n
\n
{{ item.name }}
\n \n
\n
\n
\n
\n
\n
\n \n Back\n \n \n Confirm Order({{ item_count || '0' }})\n \n
\n
\n
\n\n
\n
\n \"No\n
\n

\n Catering is not available for this booking.
\n Catering must be ordered within business hours at {{ active_building?.name }}.\n

\n
\n
\n\n
\n
\n
\n \n
\n
\n Loading menu for {{ active_building?.name }}...\n
\n
\n
\n
\n\n \n\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output\n} from '@angular/core';\n\nimport {\n CateringOrder,\n Space,\n SpacesService\n} from '@mckinsey-converge/data-common';\nimport { DateNow } from '@mckinsey-converge/date-tz'\n\n\n@Component({\n selector: 'catering-order-list-item',\n templateUrl: './item.component.html',\n styleUrls: ['./item.component.scss']\n})\nexport class CateringOrderListItemComponent implements OnInit {\n /** Catering order to display */\n @Input() order: CateringOrder;\n /** */\n @Input() public space_list: Space[];\n /** Selected datetime */\n @Input() date: number = DateNow(new Date()).ms;\n /** Emitter for edit events */\n @Output() public edit = new EventEmitter();\n /** Emitter for delete events */\n @Output() public delete = new EventEmitter();\n\n public room: Space;\n\n public ngOnInit(): void {\n this.room = (this.space_list || []).find(space => space.email === this.order.location_id);\n }\n\n public get space_in_booking(): boolean {\n return !!this.room;\n }\n\n /** Space selected for delivery */\n public get local_space_name(): string {\n return this.room?.local_name || '';\n }\n\n /** Delivery time for the order */\n public get delivery_time(): string {\n /* istanbul ignore else */\n if (!this.order) {\n return '';\n }\n\n // R--- there's probably a helper for this calculation on the Catering Order \n return this.order.bookingDateTz.addValue({ minutes: this.order.delivery_time || 0 }).formatDate('h:mma').toLocaleLowerCase();\n }\n\n /** Total cost of the order */\n public get order_cost(): number {\n const items = (this.order || { items: [] }).items as any;\n return items.reduce((amount, item) => amount + item.amount * item.unit_price, 0);\n }\n\n /** Number of items in the order */\n public get item_count(): number {\n const items = (this.order || { items: [] }).items as any;\n return items.reduce((amount, item) => amount + item.amount, 0);\n }\n\n /** Currency symbol for the selected space */\n public get symbol(): string {\n /* istanbul ignore else */\n if (!this.room || !this.room.level) {\n return 'USD';\n }\n\n return this.room?.building?.currency || 'USD';\n }\n\n constructor(private _spaces: SpacesService) {\n }\n}\n","
\n Deliver to {{ local_space_name }} at {{ delivery_time }}\n
\n
\n
\n {{ item_count }}\n { item_count, plural, =1 { item } other { items } }\n
\n
{{ order_cost / 100 | currency: symbol }}
\n
\n
\n \n \n \n \n
\n","import {\n Component,\n EventEmitter,\n Input,\n Output\n} from '@angular/core';\nimport { FormControl } from '@angular/forms';\n\nimport {\n CateringOrder,\n Space\n} from '@mckinsey-converge/data-common';\nimport { BookingFlowEvent } from '../../catering/catering.component';\nimport { DateTZ } from '@mckinsey-converge/date-tz'\n\n\n@Component({\n selector: 'a-catering-order-list',\n templateUrl: './order-list.component.html',\n styleUrls: ['./order-list.component.scss']\n})\nexport class BookingCateringOrderListComponent {\n /** Form field for storing catering orders */\n @Input() public catering: FormControl;\n /** Selected datetime for the booking */\n @Input() public date: number;\n /** */\n @Input() public space_list: Space[];\n /** Whether booking is all day */\n @Input() public all_day: boolean;\n /** Whether booking is all day */\n @Input() public next_disabled: boolean;\n /** Emitter for flow update events */\n @Output() public event = new EventEmitter();\n /** Emiiter for order events */\n @Output() public order = new EventEmitter();\n\n public delete: boolean = false;\n\n /** List of orders in the booking */\n public get orders(): CateringOrder[] {\n /* istanbul ignore else */\n if (!this.catering) {\n return [];\n }\n let orders = [];\n const date_ = new DateTZ({date: this.date})\n this.catering.value.forEach(\n order => {\n const newOrder = order;\n newOrder.booking_date = this.all_day\n ? date_.startOfValue('day').ms\n : this.date;\n orders.push(newOrder);\n }\n \n );\n return orders;\n }\n\n /** Emit event for a new catering order */\n public newOrder() {\n this.order.emit();\n }\n\n /** Emit event for editing existing order */\n public editOrder(order: CateringOrder) {\n this.order.emit(order);\n }\n\n /** Remove order from the list */\n public deleteOrder(order: CateringOrder) {\n const orders = this.orders;\n const index = orders.findIndex(an_order => order.id === an_order.id);\n /* istanbul ignore else */\n if (index >= 0) {\n orders.splice(index, 1);\n this.catering.setValue(orders);\n this.delete = true;\n }\n }\n\n /**\n * Proceed to the next step in the space booking flow\n */\n public next(): void {\n // Open the confirmation modal\n this.event.emit({ type: 'next', step: 'catering' });\n }\n\n /** Move flow to previous step */\n public previous(): void {\n this.event.emit({ type: 'previous', step: 'catering' });\n }\n}\n","
\n
\n

Catering Orders

\n
\n
\n \n
\n \n
\n \n
\n
\n
\n
\n \n Back\n \n \n Next\n \n
\n
\n
\n\n
\n
\n \n
\n
No catering orders
\n \n
\n
\n","import {\n Component,\n Input,\n} from '@angular/core';\nimport {\n BaseDirective,\n} from '@mckinsey-converge/base';\nimport {\n Booking,\n} from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'catering-order-table',\n template: `\n
\n \n \n \n \n \n \n \n \n \n \n \n
\n Delivery\n Charge CodeOrder
\n {{formatDeliveryTime(order)}}\n \n {{order?.charge_code}} \n \n {{listItems(order)}}\n
\n
\n `,\n styleUrls: ['./order-table.component.scss']\n})\nexport class OrderTableComponent extends BaseDirective {\n /** The theme to use **/\n @Input() public booking: Booking;\n\n public listItems(order) {\n return order.items.map(i => `${i.name}${i.amount > 1 ? ` (${i.amount})` : ''}`).join(', ');\n }\n\n public formatDeliveryTime(order) {\n return this.booking.startDateTz.addValue({ minutes: order?.delivery_time }).formatDate('h:mma').toLocaleLowerCase();\n }\n\n public oddEvenClass(x) {\n return x % 2 === 0 ? 'odd' : 'even';\n }\n}\n","import {\n Component,\n Directive,\n ElementRef,\n HostListener,\n Input,\n OnInit\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { TopBarHeaderMode } from 'src/app/components/topbar-header/topbar-header.component';\nimport {\n select,\n Store\n} from '@ngrx/store';\nimport {\n BaseDirective,\n} from '@mckinsey-converge/base';\nimport {\n User,\n Booking,\n Building,\n BuildingCity,\n flattenDisplayOffices,\n selectCancelledBookingsResultsFromState,\n selectUpcomingBookingsResultsFromState,\n selectPastBookingsResultsFromState,\n selectBookingByIdResultsFromState,\n UsersService,\n} from '@mckinsey-converge/data-common';\nimport {\n clearBookingByIdResults,\n} from '@mckinsey-converge/bookings';\nimport {\n BehaviorSubject,\n} from 'rxjs';\nimport {\n distinctUntilChanged,\n first,\n map,\n take,\n} from 'rxjs/operators';\nimport { loadBookingsWithQuery } from '@mckinsey-converge/bookings';\nimport { loadOrganisations } from '@mckinsey-converge/organisation';\nimport {\n SelectOption\n} from '@mckinsey-converge/ui';\nimport {\n buildingStateSelector,\n selectBuildingOptionsGroupedByCity\n} from '@mckinsey-converge/buildings';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { BookingDetailsModalComponent } from '../booking-details-modal/booking-details-modal.component';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport { RoomBookingStoreState } from '../room-booking/room-booking.component';\nimport { MatTabChangeEvent } from '@angular/material/tabs';\nimport { SearchBarConfig } from 'libs/legacy-ui/src/lib/cng-search-bar/cng-search-bar.component';\n\n\n@Component({\n selector: 'app-manage-bookings',\n template: `\n
\n
 
\n
\n \n
\n
\n
\n
\n

Manage Bookings

\n\n
\n \n \n
\n \n
\n \n
\n\n\n \n \n
\n \n \n \n
\n
\n\n
\n
\n
\n
\n `,\n styleUrls: ['./manage-bookings.component.scss']\n})\nexport class ManageBookingsComponent extends BaseDirective implements OnInit {\n public TopBarHeaderMode = TopBarHeaderMode;\n public buildings = new BehaviorSubject[]>([]);\n public bookingTypes = [\n {\n type: 'upcoming',\n display: 'Upcoming',\n selector: selectUpcomingBookingsResultsFromState\n },\n {\n type: 'past',\n display: 'Past',\n selector: selectPastBookingsResultsFromState\n },\n {\n type: 'cancelled',\n display: 'Cancelled',\n reverse_sort: true,\n selector: selectCancelledBookingsResultsFromState\n },\n ];\n\n /** Current User */\n public currentUser: User;\n public dialogRef: MatDialogRef;\n public modalInitialized = false;\n public hasLoaderUrl = true;\n\n public activeTab = 'upcoming';\n\n /**\n * Configs for delegate dropdown\n */\n /* if user has no delegates, hide the dropdown */\n public has_delegate: boolean = false; \n /* Holds list of all host/delegates */\n public host_list: User[];\n public hostOptions: { display: string; value: string; meta: { user: User; }; }[];\n public delegateDD: { ddBoxClass: string; options: any; defaultSelected: any; onChangeCallback: any; ddOptionBoxWidth: string };\n public selectedHost: string = '';\n\n public searchBookingBy: any = '';\n\n\n searchBarConfig: SearchBarConfig = {\n placeholder: 'Search by title, room name, attendees...',\n totalFoundItem: 0,\n showSrchWarning: false\n };\n\n constructor(\n private dialog: MatDialog,\n private store: Store,\n private route: ActivatedRoute,\n private _router: Router,\n private _users: UsersService,\n ) {\n super();\n }\n\n public ngOnInit(): void {\n\n // Get the router params\n const bookingId = this.route.snapshot.paramMap.get('id');\n const verb = this.route.snapshot.paramMap.get('verb');\n // Load the buildings data\n this.store.dispatch(loadOrganisations.request());\n this.route.data.subscribe(initData => {\n // Determine if the cancel or booking submodal is loading\n const cancel = verb === 'cancel';\n const addCatering = initData.hasCatering;\n /**\n * When using the catering or cancel URLs,\n * Users reported the modals loading after one another was\n * jarring so, so the UI is masked out until the modal is loaded.\n */\n this.hasLoaderUrl = addCatering || cancel;\n\n this.subscription('buildings', this.store.pipe(\n select(buildingStateSelector),\n select(selectBuildingOptionsGroupedByCity),\n map((grouped: Map) => {\n return flattenDisplayOffices(grouped);\n }),\n distinctUntilChanged()\n ).subscribe(next => {\n this.buildings.next(next);\n if (bookingId && !this.modalInitialized) {\n this.store.dispatch(clearBookingByIdResults())\n this.modalInitialized = true;\n // Once the data loads viewBooking\n this.subscription('bookingResults', this.store.pipe(\n select(selectBookingByIdResultsFromState)\n ).subscribe(next => {\n const booking = next.success ? next.success?.[0] : null;\n if (booking && booking.room) {\n // Modal Madness, close the existing booking details modals.\n if (this.dialogRef) {\n this.dialogRef.close();\n }\n if (this.dialog) {\n this.dialog.closeAll();\n }\n // Call viewBookingFromEmailLink with cancel = true to trigger the cancel modal\n // Call viewBookingFromEmailLink with addCatering = true to trigger the add Catering modal\n this.viewBookingFromEmailLink(booking, cancel, addCatering);\n\n // Remove the \"loader\" url from view\n this.timeout('rewrite url',() => {\n this._router.navigate(['/home','manage'], { replaceUrl: true });\n })\n }\n }));\n }\n }));\n\n })\n\n this.subscription('currentUser', this.store.select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n if (bookingId) {\n // If there's a booking ID loadBookingById\n this.store.dispatch(loadBookingsWithQuery({ 'id': bookingId, 'email': this.currentUser.email, 'target': 'bookingById', 'offset': 0 }));\n }\n }));\n\n\n this._users.initialised.pipe(first((_) => _)).subscribe(() => {\n const user: User = this._users.current;\n\n const delegates = user.delegates.map((del) => {\n const ifUser = this._users.find(del.email);\n return ifUser ? \n new User({ email: ifUser.email, name: ifUser.name, opt_out: del.opt_out }) : \n new User({ email: del.email, name: del.email.split('@')[0].split('_').map((s) => s.charAt(0).toUpperCase() + s.substring(1))\n .join(' ')\n , opt_out: del.opt_out });\n });\n\n if (delegates.length) {\n this.has_delegate = true;\n\n this.host_list = [user].concat(delegates);\n const options = this.host_list.map(h => ({ display: h.name, value: h.email, meta: { user: h } }))\n \n this.hostOptions = [{ display: 'All', value: '', meta: { user: null } }].concat(options);\n this.selectedHost = this.hostOptions[0].value;\n this.delegateDD = {\n ddBoxClass: '',\n options: this.hostOptions,\n defaultSelected: this.hostOptions[0],\n onChangeCallback: this.onChangeDelegates.bind(this),\n ddOptionBoxWidth: '200px'\n }\n }\n \n });\n }\n\n public onChangeDelegates(del) {\n this.selectedHost = del.value;\n }\n\n public getBuilding(booking: Booking) {\n if (this.buildings && booking.building_zone) {\n return this.buildings.value.find(b => booking.building_zone === b.value)?.meta.building;\n }\n return null;\n }\n\n // Only fires from an email link\n public viewBookingFromEmailLink(booking: Booking, cancel: boolean = false, addCatering: boolean = false) {\n if (this.modalInitialized && this.dialogRef) {\n this.dialogRef.close();\n this.dialogRef = null;\n }\n // R--- Verify the email links are working.\n // Open the booking details modal\n if (!this.dialogRef && booking.room) {\n this.dialogRef = this.dialog.open(BookingDetailsModalComponent, {\n panelClass: 'mck-modal-wide-manage-booking',\n data: {\n booking,\n building: this.getBuilding(booking),\n cancel,\n addCatering,\n hasLoaderUrl: this.hasLoaderUrl,\n refresh: () => null\n },\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n // Close up the loader panel\n setTimeout(() => {\n this.hasLoaderUrl = false;\n }, 1000);\n }\n }\n\n public clearPage(event : MatTabChangeEvent) {\n this.activeTab = this.bookingTypes[event.index].type;\n this._router.navigate([], { relativeTo: this.route, queryParams: { page: 1 } });\n }\n\n\n searchBooking(value) {\n this.searchBookingBy = value;\n }\n\n}\n","import {\n Booking\n} from '@mckinsey-converge/data-common';\n\n\nexport class BookingResultsViewModel {\n constructor(public booking: Booking) {\n }\n}\n\n/**\n * For each result from results, we find its level and building from the lists.\n */\nexport const mapResultsToViewModels = (results: Booking[]): BookingResultsViewModel[] => {\n if (!results || !results[0]?.space) {\n return [];\n }\n return results.map((booking: Booking) => {\n return new BookingResultsViewModel(\n booking,\n );\n }); \n}\n\n","import { Component, Inject, OnInit, ViewEncapsulation, ElementRef, Input, ViewChild, ChangeDetectorRef } from '@angular/core';\nimport {\n Space,\n RoomResultsViewModel,\n BookingStoreState,\n User,\n Booking,\n BookingFormData,\n BOOKING_STATUS,\n checkCollisions,\n SpacesService,\n BookingsService,\n BookingStateService,\n clearBookingFormData,\n ApplicationService,\n selectFilteredByIdResults,\n FilteredSpaces,\n selectActiveForm,\n roomFormDataToQuery,\n storeBookingFormData,\n getNextFreeBookingSlot,\n} from '@mckinsey-converge/data-common';\nimport { MAP_OVERLAY_DATA } from '@acaprojects/ngx-interactive-map';\nimport { DateTime } from 'luxon';\nimport { Point, BaseDirective, closestToTimeSlot, HashMap, closestToTimeSlotTz } from '@mckinsey-converge/base';\nimport { BehaviorSubject, Observable, interval, timer, of } from 'rxjs';\nimport { CENTER_POINT, MIN_ZOOM_LEVEL } from 'src/app/map/map.utils';\nimport { Store, select } from '@ngrx/store';\nimport { RoomStoreState, loadByIdResults, loadRoomsForResults } from '@mckinsey-converge/rooms';\nimport { BuildingStoreState } from '@mckinsey-converge/buildings';\nimport { UserStoreState } from '@mckinsey-converge/user';\nexport type RoomResultsState = BookingStoreState &\n RoomStoreState &\n BuildingStoreState &\n UserStoreState;\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport { delay, map, take } from 'rxjs/operators';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n// import { WAITING_TIME } from '../floor-map.utils'; // commented and re declare below due to circular dependency overlay > util > overlay\n\nexport const WAITING_TIME = 15;\n\ninterface SpaceWithReturnData extends Space {\n // callback?: Function,\n room?: RoomResultsViewModel;\n parentComponent?: any;\n roomObs?: Observable\n}\n\ninterface InProgressRoomBookingTimeInfo {\n\tcurrentStatus: string,\n\tactiveBookings: Booking[],\n\ttimeUntilNextBooking: number,\n\ttimeRemainingInActiveBooking : number,\n}\n/**\n * Replaces the built-in {@link MapPinComponent} based on design.\n */\n@Component({\n selector: 'foor-map-overlay',\n template: `\n
\n
\n\n
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n \t\n
\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tThis room is available\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tRoom {{ data.simple_name || data.name || '' }} is available for booking\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tBook now for:\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tUntil next booking\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t Available if you book in the next {{minutesRemaining}}:{{secondsRemaining}} minutes\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\tRefresing availability ...\n\t\t\t\t\t\t\t
\n \t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\tThis room is booked\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t Apologies, this room has been booked recently by another user, please try another one. \n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n
\n
\n
\n `,\n styleUrls: ['./floor-map-overlay.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n})\nexport class FloorMapOverlayComponent extends BaseDirective implements OnInit {\n public selectedRoomId = this.data.id;\n\n public zoom = new BehaviorSubject(MIN_ZOOM_LEVEL);\n public center = new BehaviorSubject(CENTER_POINT);\n\n public date = DateTime.now().valueOf();\n /** Current User */\n public currentUser: User;\n\n public availableUntil = parseInt(this.data?.settings?.available_until.toString()) * 1000;\n public diff: any;\n\n public latestBooking: any[];\n public latestBookingStartTime: string;\n public diffInHours: number;\n public diffInMinutes: number;\n public booking: Booking = new Booking({});\n public loading: boolean;\n public bookingData = new BehaviorSubject(undefined);\n public confirmed: boolean = false;\n /** Whether booking has succeeded */\n public success: boolean;\n public diffInMs: number;\n public futureBookingsForTheDay: HashMap[];\n public untilNextBookingFlag: boolean = false;\n public start_epoch: any;\n public end_epoch_15: any;\n public end_epoch_30: any;\n\n public userSelectedRoom: RoomResultsViewModel;\n\n // @ViewChild('time', { static: false }) public time: ElementRef;\n public isTimerActive: boolean = true;\n minutesRemaining: number | string;\n secondsRemaining: number | string;\n isAvailable: boolean = true;\n intervalCall_15: any;\n intervalCall_1: any ;\n\t\ttimerIndex = 0;\n\t\tpublic currentMin;\n\n constructor(\n @Inject(MAP_OVERLAY_DATA) public data: SpaceWithReturnData,\n private elementRef: ElementRef,\n public store: Store,\n public _spaces: SpacesService,\n public _bookings_service: BookingsService,\n public _booking_state_service: BookingStateService,\n public _service: ApplicationService,\n // public cdRef: ChangeDetectorRef,\n ) {\n super();\n }\n\n public updateRoomData(space) {\n\n\t\t\t\t\t\t// get all booking of selected room\n this.fetchRoomWithBookings(false);\n\n\t\t\t\t\t\t// subscrip selected room detail with all bookings for the day\n this.subscription(\n 'bookingSpaceResults',\n this.store.pipe(select(selectFilteredByIdResults)).subscribe((next) => {\n if (next.success.spaces) {\n\n space.space = next.success.spaces[0];\n this.userSelectedRoom = space;\n\n this.isTimerActive = true;\n\n this.availableUntil = parseInt(this.userSelectedRoom.space.settings.available_until.toString()) * 1000;\n\n\t\t\t\t\t\t\t\t\t\t\t\t//Retrive and calculate reamining time related information for the selected room and its upcomming bookings\n\t\t\t\t\t\t\t\t\t\t\t\tconst {currentStatus, activeBookings, timeRemainingInActiveBooking, timeUntilNextBooking} = this.calculateRoomBookingTimeInfo();\n\t\t\t\t\t\t\t\t\t\t\t\tthis.diff = timeUntilNextBooking\n // inform user if space has been booked by other\n if( currentStatus !== 'available') {\n if(activeBookings.length && timeRemainingInActiveBooking < 15 && timeUntilNextBooking >= 15 ) {\n this.setupTimer();\n // this.isAvailable = true;\n //update up start and end epoch times for a booking button options\n this.updateSchedulingEpochs();\n } else {\n this.isAvailable = false;\n this.intervalCall_1?.unsubscribe();\n clearInterval(this.intervalCall_15);\n }\n\n }else {\n this.setupTimer();\n // this.isAvailable = true;\n //update up start and end epoch times for a booking button options\n this.updateSchedulingEpochs();\n }\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Determine available time until next booking start time\n this.determineNextBookingStartTime();\n }\n })\n );\n\n }\n\n\t\t/**\n\t\t * Retrive and calculate reamining time related information for the selected room and its upcomming bookings\n\t\t * @returns\n\t\t */\n\t\tpublic calculateRoomBookingTimeInfo(): InProgressRoomBookingTimeInfo {\n\n\t\t\tconst now: any = DateNow(new Date()); // current date time\n\n\t\t\t// Retirive a list of bookings and map them to booking objects\n\t\t\tconst bookings = this.userSelectedRoom.space.settings.bookings.map(b => new Booking(b));\n\n\t\t\t// Filter active/in-progress bookings based on the current time\n\t\t\tconst activeBookings = bookings.filter(booking =>\n\t\t\t\t\t\tnow.isAfterDate(booking.startDateTz.startOfValue('second')) &&\n\t\t\t\t\t\tnow.isBeforeDate(booking.endDateTz.startOfValue('second') )\n\t\t\t);\n\n\t\t\t// Retrive the status of the selected room from parent component data\n\t\t\tconst currentStatus = this.data.parentComponent.roomStatus.statusMap[this.selectedRoomId]; // \" 'available' / 'in-use'\"\"\n\n\t\t\t// Initialize the variable to track time-related information\n\t\t\tlet timeRemainingInActiveBooking = 0; // The remaining time in the active booking in milliseconds\n\t\t\tlet timeUntilNextBooking = 30; // Time until the start of the next booking minutes\n\n\t\t\t// Check if ther are active bookings (room is 'in-use')\n\t\t\tif(activeBookings.length) {\n\t\t\t\tconst nowTime: any = DateTime.now()\n\t\t\t\t// Calculate the time remaining in the active booking in minutes\n\t\t\t\ttimeRemainingInActiveBooking = Math.abs(Math.round((activeBookings[0].end_epoch * 1000 - nowTime.ts) / 60000));\n\n\t\t\t\t// Determine if an extra minute should be added based on the current minute's remainder when devided by WAITING_TIME\n\t\t\t\tconst addMin = DateTime.now().get('minute') % WAITING_TIME === 0 ? 1 : 0;\n\n\t\t\t\t// calculate the start time of the next booking in the same time slot\n\t\t\t\tconst nextBookingStartTime: any = closestToTimeSlot(DateTime.now().plus({ minutes: addMin, seconds:0 }).setZone(this.userSelectedRoom?.building?.timezone), WAITING_TIME);\n\n\t\t\t\t// Filter futute booking for the day to find the next booking\n\t\t\t\tconst futureBookingsForTheDay = this.userSelectedRoom.space?.settings?.bookings.filter((item) =>\n\t\t\t\t\titem.start_epoch * 1000 >= nextBookingStartTime.ts\n\t\t\t\t);\n\n\t\t\t\t// Check if there is an futute booking for the day\n\t\t\t\tif(futureBookingsForTheDay.length) {\n\t\t\t\t\t// calculate the time until start of the next booking in minutes\n\t\t\t\t\tconst nextBookingStartTimeMs = futureBookingsForTheDay[0].start_epoch * 1000;\n\t\t\t\t\ttimeUntilNextBooking = Math.floor((nextBookingStartTimeMs - nowTime.ts) / (1000 * 60));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t\t\t\tcurrentStatus: currentStatus,\n\t\t\t\t\t\t\tactiveBookings: activeBookings,\n\t\t\t\t\t\t\ttimeUntilNextBooking: timeUntilNextBooking,\n\t\t\t\t\t\t\ttimeRemainingInActiveBooking : timeRemainingInActiveBooking,\n\t\t\t\t\t\t};\n\n\t\t}\n\n public setup15MinTimer() {\n //interval for 15 min\n !this.timerIndex && setTimeout(()=>this.setUpTime(), 1100 ) ;\n this.timerIndex++\n this.intervalCall_15 = window.setInterval(\n () => { this.intervalCall_1?.unsubscribe(); setTimeout(()=>this.setUpTime(), 1100 ) }\n , ( 1000 * 60 * WAITING_TIME ) );\n\n\n }\n\n public setUpTime() {\n // console.log(DateTime.now().setZone(this.userSelectedRoom?.building?.timezone).get('minute'));\n // console.log(DateTime.now().setZone(this.userSelectedRoom?.building?.timezone).get('minute') % WAITING_TIME)\n // console.log(DateTime.now().setZone(this.userSelectedRoom?.building?.timezone).get('second'))\n const addMin = DateTime.now().get('minute') % WAITING_TIME === 0 ? 1 : 0 ;\n const addSeconds = 60 - DateTime.now().get('second');\n let start:any = closestToTimeSlot(DateTime.now().plus({ minutes: addMin, seconds:0 }).setZone(this.userSelectedRoom?.building?.timezone), WAITING_TIME);\n start = start.toLocaleString(DateTime.TIME_SIMPLE);\n if(start !== this.start_epoch ) {\n\n this.start_epoch = start;\n\n // this.availableUntil = parseInt(this.userSelectedRoom.space.settings.available_until.toString()) * 1000;\n // const currentTime = new Date(DateTime.now().valueOf());\n // const endTime = new Date(this.availableUntil);\n // this.diff = Math.abs(Math.round((endTime.getTime() - currentTime.getTime()) / 60000));\n\n const addMin = DateTime.now().get('minute') % WAITING_TIME === 0 ? 1 : 0 ;\n const addSeconds = 60 - DateTime.now().get('second');\n this.startTimer(addMin);\n\n }\n\n\t\t\t\t\t\t//update up start and end epoch times for a booking button options\n\t\t\t\t\t\tthis.updateSchedulingEpochs()\n\n // let end_15: any = closestToTimeSlot(DateTime.now().plus({ minutes: addMin, seconds:0 }).setZone(this.userSelectedRoom?.building?.timezone), WAITING_TIME).plus({ minutes: 15 });\n // end_15 = end_15.toLocaleString(DateTime.TIME_SIMPLE);\n // if(end_15 !== this.end_epoch_15) {\n // this.end_epoch_15 = end_15\n // }\n\n // let end_30: any = closestToTimeSlot(DateTime.now().plus({ minutes: addMin, seconds:0 }).setZone(this.userSelectedRoom?.building?.timezone), WAITING_TIME).plus({ minutes: 30 });\n // end_30 = end_30.toLocaleString(DateTime.TIME_SIMPLE);\n // if(end_30 !== this.end_epoch_30) {\n // this.end_epoch_30 = end_30;\n // }\n }\n\n public ngOnInit(): void {\n this.fetchRoomWithBookings(false);\n\n this.data.parentComponent.childCallback = this.updateRoomData.bind(this);\n this.userSelectedRoom = this.data?.room;\n\t\t\t\tthis.updateSchedulingEpochs();\n this.updateRoomData(this.userSelectedRoom);\n\t\t\t\t// Determine available time until next booking start time\n // this.determineNextBookingStartTime();\n\n this.subscription(\n 'currentUser',\n this.store\n .select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n })\n );\n\n //update up start and end epoch times for a booking button options\n // this.updateSchedulingEpochs();\n this.data.parentComponent.isOverlayOpened = true;\n }\n\n /**\n * This function sets up start and end epoch times for a booking scheduling system.\n * It calculates and assigns various epoch times based on the current time,\n * available until time, and user-selected room's timezone.\n */\n public updateSchedulingEpochs() {\n\n\t\t\tconst now: any = DateTime.now();\n\n\t\t\t// Calculate the time difference in minutes between current and available until time\n\t\t\tconst {currentStatus, activeBookings, timeRemainingInActiveBooking, timeUntilNextBooking} = this.calculateRoomBookingTimeInfo();\n\t\t\t// this.diff = Math.abs(Math.round((this.availableUntil - now.ts) / 60000)); // recheck\n\t\t\tthis.diff = timeUntilNextBooking;\n\n\t\t\t// Determine system availability based on time difference\n\t\t\tthis.isAvailable = timeRemainingInActiveBooking < 15 && timeUntilNextBooking >= 15 // this.diff >= 15;\n\n\t\t\t// Calculate the next time slot for scheduling\n\t\t\tconst addMin = now.get('minute') % WAITING_TIME === 0 ? 1 : 0;\n\t\t\tconst adjustedTime = now.plus({ minutes: addMin, seconds: 0 }).setZone(this.userSelectedRoom?.building?.timezone);\n\n\t\t\t// Calculate and assign the start and end epoch times with 15 and 30-minute intervals\n\t\t\tconst timeSlot = closestToTimeSlot(adjustedTime, WAITING_TIME);\n\t\t\tthis.start_epoch = timeSlot.toLocaleString(DateTime.TIME_SIMPLE);\n\t\t\tthis.end_epoch_15 = timeSlot.plus({ minutes: 15 }).toLocaleString(DateTime.TIME_SIMPLE);\n\t\t\tthis.end_epoch_30 = timeSlot.plus({ minutes: 30 }).toLocaleString(DateTime.TIME_SIMPLE);\n }\n\n ngAfterViewInit() {\n this.setupTimer();\n }\n\n public setupTimer() {\n console.log(DateTime.now().get('second'))\n const addMin = DateTime.now().setZone(this.userSelectedRoom?.building?.timezone).get('minute') % WAITING_TIME === 0 ? 1 : 0 ;\n const addSeconds = 60 - DateTime.now().get('second');\n this.startTimer(addMin);\n }\n\n\n // countdown timer for coachmark\n public startTimer(display = 0, addSeconds = 0) {\n\n // const currentTime = new Date(DateTime.now().valueOf());\n // const endTime = new Date(closestToTimeSlot(DateTime.now().plus({minutes: display, seconds: addSeconds}).setZone(this.userSelectedRoom?.building?.timezone), WAITING_TIME).valueOf());\n // const availableTimeToBook = Math.abs((endTime.getTime() - currentTime.getTime()) / 60000)* 60;\n // let timer = availableTimeToBook; //(this.diff -35) * 60;\n // let minutes;\n // let seconds;\n let timer = 0 ;\n if(timer >= 0){\n this.intervalCall_1 = interval(1000).subscribe(x => {\n\n const currentTime = new Date(DateTime.now().valueOf());\n const endTime = new Date(closestToTimeSlot(DateTime.now().plus({minutes: display, seconds: addSeconds}).setZone(this.userSelectedRoom?.building?.timezone), WAITING_TIME).valueOf());\n const availableTimeToBook = Math.abs((endTime.getTime() - currentTime.getTime()) / 60000)* 60;\n let timer = availableTimeToBook; //(this.diff -35) * 60;\n\n this.isTimerActive = true;\n this.minutesRemaining = Math.floor(timer / 60);\n this.secondsRemaining = Math.floor(timer % 60);\n\n this.minutesRemaining = this.minutesRemaining < 10 ? \"0\" + this.minutesRemaining : this.minutesRemaining;\n this.secondsRemaining = this.secondsRemaining < 10 ? \"0\" + this.secondsRemaining : this.secondsRemaining;\n\n --timer;\n\n if (timer <= 0) {\n timer = 0\n this.intervalCall_1?.unsubscribe();\n // clearInterval(this.intervalCall_1);\n this.isTimerActive = false;\n !this.timerIndex && this.setup15MinTimer();\n\n\t\t\t\t\t\t\t\t\t\tthis.store.select(selectActiveForm).pipe(take(1))\n\t\t\t\t\t\t\t\t\t\t\t.subscribe((form) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst addMin = DateTime.now().setZone(this.userSelectedRoom?.building?.timezone).get('minute') % WAITING_TIME === 0 ? 1 : 0 ;\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst addSeconds = 60 - DateTime.now().setZone(this.userSelectedRoom?.building?.timezone).get('second');\n\t\t\t\t\t\t\t\t\t\t\t\t\tform['date'] = closestToTimeSlot(DateTime.now().setZone(this.userSelectedRoom?.building?.timezone).plus({ minutes: addMin, seconds:0 }), WAITING_TIME).valueOf(),\n\t\t\t\t\t\t\t\t\t\t\t\t\tform.dateTz = closestToTimeSlotTz(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tnew DateTZ({ date: DateTime.now().plus({ minutes: addMin, seconds:0 }), is_local_tz: false, building_tz: form.timezone }),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tWAITING_TIME\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.store.dispatch(storeBookingFormData({ payload: form }));\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.store.dispatch(loadRoomsForResults.request(roomFormDataToQuery(form)));\n\n\t\t\t\t\t\t\t\t\t\t\t});\n\n }\n }) //, 1000, endTime)\n }\n }\n\n\t\t/**\n\t\t * This function updates information related to the lates booking in the selected room\n\t\t */\n public determineNextBookingStartTime() {\n\n\t\t\t\t// Get the current time using DateTime library\n const now = DateTime.now();\n\n\t\t\t\t// Determine if an extra minute should be added based on the current minute's remainder when devided by WAITING_TIME\n const addMin = now.get('minute') % WAITING_TIME === 0 ? 1 : 0;\n\n\t\t\t\t// Adjust the current time by adding the calculated minutes adna setting the timezone based on the selected room's building\n const addjustedTime: any = closestToTimeSlot(\n now.plus({ minutes: addMin, seconds:0 })\n .setZone(this.userSelectedRoom?.building?.timezone), WAITING_TIME\n );\n\n\t\t\t\t\t\t// Check if room is selected and has bookings settings\n if (this.userSelectedRoom?.space) {\n\t\t\t\t\t// Returive the list of future bookings or initializem it as an empaty array\n const futureBookings = this.userSelectedRoom?.space?.settings?.bookings || [];\n\n\t\t\t\t\t\t// Calculate the end time for a 30-minute interval from the addjested time\n const endEpoch30 = addjustedTime.plus({ minutes: 30 }).ts;\n\n\t\t\t\t\t\t// Filter future booking that start after end_epoch_30\n\t\t\t\t\t\tconst futureBookingsForTheDay = futureBookings.filter(item => item.start_epoch * 1000 >= endEpoch30);\n\n\t\t\t\t\t\t// Check if there are futute bookings found\n\t\t\t\t\t\tif(futureBookingsForTheDay.length > 0) {\n\t\t\t\t\t\t\t//Extract the start time of latest booking\n\t\t\t\t\t\t\tconst latestBookingStartTime = new Date(futureBookingsForTheDay[0].start_epoch * 1000);\n\n\t\t\t\t\t\t\t// Calculate the time difference between the latest booking start time and the current time in milliseconds\n\t\t\t\t\t\t\tconst timeDiffMs = latestBookingStartTime.getTime() - now.valueOf();\n\t\t\t\t\t\t\tthis.diffInMs = timeDiffMs;\n\t\t\t\t\t\t\t// Calculate the timne differenc in hours and minutes\n\t\t\t\t\t\t\tthis.diffInHours = Math.floor(timeDiffMs / (1000 * 60 * 60));\n \tthis.diffInMinutes = Math.floor((timeDiffMs % (1000 * 60 * 60)) / (1000 * 60));\n\n\t\t\t\t\t\t\t// Set flag to indicate the wether the difference is NaN (no future booking)\n \tthis.untilNextBookingFlag = !isNaN(timeDiffMs);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis.untilNextBookingFlag = false;\n\t\t\t\t\t\t}\n }\n\n }\n\n //fetch all the bookings for selected room for the day to the store\n public fetchRoomWithBookings(allWeek: boolean = true) {\n const day = 24 * 60;\n const week = day * 7;\n const date = (this.booking?.startDateTz).clone();\n const startOfDay = date.startOfValue('day').setValue({ second: 0, millisecond: 0 });\n const startOfWeek = date.startOfValue('week');\n\n // Query for the entire day for this room\n const query = {\n dateTz: allWeek ? startOfWeek : startOfDay,\n duration: allWeek ? week : day,\n locations: this.data?.id,\n capacity: this.booking?.space?.capacity,\n };\n this.store.dispatch(loadByIdResults.request(query));\n }\n\n public closeModal() {\n const modal = this.elementRef.nativeElement.querySelector('.map-overlay-container');\n modal.classList.add('hide');\n this.data.parentComponent.isOverlayOpened = false;\n this.timerIndex = 0;\n this.isAvailable = false;\n\t\t\t\tthis.untilNextBookingFlag = false;\n this.intervalCall_1?.unsubscribe();\n // clearInterval(this.intervalCall_1);\n // this.intervalCall_15?.unsubscribe();\n clearInterval(this.intervalCall_15);\n }\n\n public roomDataCallback() {\n if (this.data.parentComponent.roomSelected && this.userSelectedRoom) {\n this.data.parentComponent.roomSelected(this.userSelectedRoom);\n }\n }\n\n public onBook(minutes: number) {\n minutes = Math.round(minutes);\n const {filters, settings} = this.userSelectedRoom.space;\n if ( (filters && filters?.equipment_code ) || (settings && settings?.equipment_code) ) {\n this.roomDataCallback();\n } else {\n this.saveChanges(minutes);\n }\n }\n\n public bookingFormToBooking(minutes): Booking {\n const booking_form_data = this.bookingData.value;\n const has_note_buffer =\n booking_form_data?.notes && booking_form_data.notes?.length\n ? { [booking_form_data.selectedRoom.space.email]: 900 }\n : {}; // 900 seconds = 15 min\n const attendees = this.booking.attendees;\n const company = this.booking.company;\n const start_epoch = closestToTimeSlot(DateTime.now(), 15).valueOf() / 1000;\n const end_epoch =\n closestToTimeSlot(DateTime.now(), 15).plus({ minutes: minutes }).valueOf() / 1000;\n\n const raw_data = {\n space: { id: this.selectedRoomId },\n all_day: false,\n attendees,\n // booking_type: booking_form_data?.bookingType.value,\n booking_type: this.userSelectedRoom.space.filters.external === true? \"External\" : \"Internal\",\n catering: [],\n start_epoch,\n end_epoch,\n timezone: booking_form_data?.timezone,\n equipment_codes: {\n [booking_form_data?.selectedRoom.space.email]: booking_form_data?.code,\n },\n expected_attendees: {\n [this.data.email]: 1,\n },\n has_catering: false,\n needs_space: false,\n notes: this.booking.notes,\n organiser: this.currentUser,\n creator: this.currentUser,\n room: this.userSelectedRoom.space,\n title: 'Ad hoc meeting',\n setup: has_note_buffer,\n breakdown: has_note_buffer,\n company,\n };\n console.log(new Booking(raw_data));\n return new Booking(raw_data);\n }\n\n //function for sending final booking request\n public saveChanges(minutes) {\n this.loading = true;\n this.booking = this.bookingFormToBooking(minutes);\n // const booking_form_data = this.bookingData.value;\n this.booking.status = BOOKING_STATUS.approved;\n checkCollisions(this._spaces, this.booking).then(\n (bookable: boolean) => {\n if (!bookable) {\n // TODO - Refactor for https://acaprojects.atlassian.net/browse/MCK-1498\n // API is retuning bookings ouside of requested time range\n // TODO check booking date and times for conflict manually\n this.booking.status = BOOKING_STATUS.unavailable;\n return;\n }\n\n this._bookings_service.save(this.booking).then(\n (bkn) => {\n this.loading = false;\n this.success = true;\n this.confirmed = true;\n this._booking_state_service.replace(bkn);\n\n // When saved, the returned booking has a null room.\n // Correct this so the rest of the code doesn't flake out.\n this.booking = new Booking({ ...bkn.toJSON(), room: this.booking.room });\n // Clear the current booking form\n this.store.dispatch(clearBookingFormData());\n\n // Heap track event\n this._service.analytics.track('create', {\n booking_id: bkn.id,\n office: this.booking.room.building.name,\n room: this.booking.local_room_name,\n start_time: bkn.startDateTz.ms,\n end_time: bkn.endDateTz.ms,\n catering: !!bkn.catering.length,\n headcount: 1,\n });\n this.data.parentComponent.confirmBooking(this.booking);\n },\n (err) => {\n this.loading = false;\n this.confirmed = false;\n if (err.status === 409) {\n // Unavailable Confirmation\n this.booking.status = BOOKING_STATUS.unavailable;\n this._booking_state_service.replace(this.booking);\n this.confirmed = true;\n this.success = false;\n } else {\n console.log(err);\n }\n }\n );\n },\n (err) => {\n // Unavailable Confirmation\n this.loading = false;\n this.timeout(\n 'error',\n () => {\n this.booking.status = BOOKING_STATUS.unavailable;\n this._booking_state_service.replace(this.booking);\n this.confirmed = true;\n this.success = false;\n },\n 500\n );\n }\n );\n }\n}\n","import { SelectOption } from '@mckinsey-converge/ui';\nimport {\n Space,\n SpaceStatus,\n RoomResultsViewModel,\n MapListener\n} from '@mckinsey-converge/data-common';\nimport {\n HashMap,\n Point\n} from '@mckinsey-converge/base';\nimport { MapFeature } from '@acaprojects/ngx-interactive-map/lib/helpers/map.interfaces';\nimport { FloorMapOverlayComponent } from './floor-map-overlay/floor-map-overlay.component';\n\nexport const MIN_ZOOM_LEVEL = 1;\nexport const MAX_ZOOM_LEVEL = 10;\nexport const CENTER_POINT: Point = { x: 0.5, y: 0.5 };\n\nexport const WAITING_TIME = 15;\n\nconst mapSpaceStatusToDisplay = (status: SpaceStatus): string => {\n switch (status) {\n case SpaceStatus.NotBookable:\n return 'Not Bookable';\n case SpaceStatus.Requestable:\n return 'Available by Request';\n case SpaceStatus.Unavailable:\n return 'In Use';\n case SpaceStatus.Available:\n default:\n return 'Available';\n }\n};\n\nconst mapSpaceStatusToOption = (status: SpaceStatus) => ({\n value: status,\n display: mapSpaceStatusToDisplay(status)\n});\n\nexport const legendOptions = (): SelectOption[] => [\n SpaceStatus.Available,\n SpaceStatus.Requestable,\n SpaceStatus.Unavailable,\n SpaceStatus.NotBookable\n].map(mapSpaceStatusToOption);\n\n\nexport const defaultMapBookingRules = [\n 'Rooms showing yellow are restricted and must be requested',\n 'Rooms showing green are available to book for one hour',\n 'Rooms showing red are booked',\n 'Rooms showing grey are not bookable but may be used if they are empty'\n];\n\nexport const defaultMapBookingSubtitle = 'You may request restricted rooms but they will need to be approved by an admin';\n\nexport const generateMapStyleForSpace = (\n space: Space,\n status: SpaceStatus,\n colorStatusMap: HashMap) => {\n const id =\n `${space.map_id}`.indexOf('area') < 0\n ? `area-${space.map_id}-status`\n : space.map_id;\n return (\n {\n id,\n styles: {\n fill: colorStatusMap[`space-${status}`] || '#000',\n opacity: 1\n }\n });\n};\n\n/**\n * Generates actions for mapview handling.\n * @param space - the space to generate\n * @param clickSpace - called when clicked or touched\n * @param hoverSpace - called when you hover over a space\n * @param leaveSpace - called when you leave a space.\n */\nexport const generateMapListenersForSpace = (\n space: Space,\n hoverSpace: () => void,\n leaveSpace: () => void,\n clickSpace: () => void\n): MapListener[] => {\n const id =\n `${space.map_id}`.indexOf('area') < 0\n ? `area-${space.map_id}-status`\n : space.map_id;\n const listeners: MapListener[] = [];\n listeners.push({\n id,\n event: 'mouseenter',\n callback: hoverSpace\n });\n listeners.push({\n id,\n event: 'mouseleave',\n callback: leaveSpace\n });\n if (space.bookable) {\n listeners.push({\n id,\n event: 'click',\n callback: clickSpace\n });\n listeners.push({\n id,\n event: 'touchend',\n callback: clickSpace\n });\n }\n return listeners;\n};\n\n\nexport const spaceToMapFeature = (space: Space): MapFeature => ({\n id: `area-${space.map_id}-status`,\n coordinates: null,\n content: FloorMapOverlayComponent,\n data: {\n ...space\n }\n});\n\nexport const roomToMapFeature = (room: RoomResultsViewModel, parentComponent?: any): MapFeature => ({\n id: `area-${room.space.map_id}-status`,\n coordinates: null,\n content: FloorMapOverlayComponent,\n data: {\n ...room.space,\n parentComponent,\n room\n }\n});\n\n// service account for office floor map view - read only\nexport const SERVICE_ACCOUNT = 'svc_kiosk_converge@mckinsey.onmicrosoft.com';","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { OfficeFloorComponent } from './office-floor/office-floor.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { LibraryModule } from '@acaprojects/ngx-interactive-map';\nimport { MatSelectModule } from '@angular/material/select';\nimport { UiModule } from '@mckinsey-converge/ui';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MapModule } from 'src/app/map/map.module';\nimport { FloorMapOverlayComponent } from './floor-map-overlay/floor-map-overlay.component';\n\nexport const mapModuleImports = [\n CommonModule,\n MatButtonModule,\n LibraryModule,\n MatSelectModule,\n UiModule,\n MatDialogModule,\n MapModule,\n];\n\nexport const mapModuleDeclarations = [\n OfficeFloorComponent,\n FloorMapOverlayComponent,\n // MapControlsComponent,\n // MapFiltersComponent,\n // OfficeInformationModalComponent,\n // MapOverlayComponent\n];\n\n@NgModule({\n declarations: [\n ...mapModuleDeclarations,\n ],\n exports: [\n ...mapModuleDeclarations\n ],\n imports: [\n ...mapModuleImports\n ]\n})\nexport class OfficeFloorMapModule {\n}\n","import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { BehaviorSubject, combineLatest, interval } from 'rxjs';\nimport { BaseDirective, closestToTimeSlot, closestToTimeSlotTz, HashMap, Point } from '@mckinsey-converge/base';\nimport { MapFeature } from '@acaprojects/ngx-interactive-map/lib/helpers/map.interfaces';\nimport { select, Store } from '@ngrx/store';\nimport { BuildingStoreState } from '@mckinsey-converge/buildings';\nimport * as cloneDeep from 'lodash/cloneDeep';\nimport {\n Building,\n BuildingLevel,\n SettingsService,\n Space,\n mapBuildingLevelToOption,\n mapResultsToViewModels,\n RoomResultsViewModel,\n selectActiveForm,\n selectBookingLocations,\n selectSelectedBuildingOptions,\n roomFormDataToQuery,\n FilteredSpaces,\n BookingStoreState,\n storeBookingFormData,\n BookingFormData,\n MapListener,\n selectFilteredDiffSizeResults,\n User,\n selectMapFilteredResults,\n ApplicationService,\n clearRoomFilters,\n\t\tbookingTypeOptions,\n defaultRoomSizeOption,\n} from '@mckinsey-converge/data-common';\nimport { distinctUntilChanged, map, take, withLatestFrom } from 'rxjs/operators';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { filterUndefined } from '@mckinsey-converge/rx-utils';\nimport { MatDialog } from '@angular/material/dialog';\nimport { OfficeInformationModalComponent } from 'src/app/map/office-information-modal/office-information-modal.component';\n\nimport {\n CENTER_POINT,\n generateMapListenersForSpace,\n generateMapStyleForSpace,\n MAX_ZOOM_LEVEL,\n MIN_ZOOM_LEVEL,\n roomToMapFeature,\n SERVICE_ACCOUNT,\n WAITING_TIME,\n} from '../floor-map.utils';\nimport {\n loadDiffSizeResults,\n loadRoomsForResults,\n loadRoomsForResultsMap,\n mapRoomToSelectOption,\n RoomStoreState,\n} from '@mckinsey-converge/rooms';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { selectCurrentUser, UserStoreState } from '@mckinsey-converge/user';\nimport { ActivatedRoute, Router, RouterStateSnapshot } from '@angular/router';\nimport { Location } from '@angular/common';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\nimport { DateTime } from 'luxon';\n\nexport type MapSearchStoreState = BuildingStoreState &\n RoomStoreState &\n BookingStoreState &\n UserStoreState;\n\n@Component({\n selector: 'app-office-floor',\n templateUrl: './office-floor.component.html',\n styleUrls: ['./office-floor.component.scss'],\n})\nexport class OfficeFloorComponent extends BaseDirective implements OnInit, OnChanges {\n @Input()\n public openHeader: boolean = true;\n\n public zoom = new BehaviorSubject(MIN_ZOOM_LEVEL);\n\n public center = new BehaviorSubject(CENTER_POINT);\n public listeners = new BehaviorSubject([]);\n\n public focusedMapSpace = new BehaviorSubject(undefined);\n public features = combineLatest([this.focusedMapSpace]).pipe(\n map((items) => items.filter((i) => !!i))\n );\n\n public focusedRoom = new BehaviorSubject(undefined);\n\n public resultBuildings = new BehaviorSubject([]);\n public resultSpaces = new BehaviorSubject([]);\n public activeBuilding = new BehaviorSubject(undefined);\n public activeLevel = new BehaviorSubject(undefined);\n public activeSpace = new BehaviorSubject(undefined);\n\n /** Mapping of elements to CSS styles */\n public style_map = new BehaviorSubject>>({});\n\n public mapUrl = this.activeLevel.pipe(map((level) => level?.map_url ?? ''));\n\n public bookingLocations = new BehaviorSubject[]>([]);\n public buildingLevelOptions = new BehaviorSubject[]>([]);\n public spaceListOptions = new BehaviorSubject[]>([]);\n\n public activeBuildingOption = combineLatest([this.activeBuilding, this.bookingLocations]).pipe(\n map(([building, locations]) => locations.find((l) => l.value === building?.id))\n );\n\n public activeLevelOption = this.activeLevel.pipe(map(mapBuildingLevelToOption));\n public activeSpaceOption = this.activeSpace.pipe(map(mapRoomToSelectOption));\n public bookingFormData = new BehaviorSubject(undefined);\n\n public roomStatus: any;\n public payload: any;\n /** Current User */\n public currentUser: User;\n public bookingConfirmed = false;\n public bookingData: {};\n serviceAccount: boolean;\n\n constructor(\n private store: Store,\n public dialog: MatDialog,\n private settingService: SettingsService,\n private router: Router,\n private route: ActivatedRoute,\n public _service: ApplicationService,\n private location: Location\n ) {\n super();\n this.payload = location.getState();\n this.payload.floorMap = false;\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n throw new Error('Method not implemented.');\n }\n\n public ngOnInit(): void {\n //clear filters first if any applied previously \n this.store.dispatch(clearRoomFilters());\n\n const selection = { value: this.payload?.payload, display: '' };\n this.payload.building.value = this.payload.building[0].id;\n\n this.subscription(\n 'currentUser',\n this.store\n .select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n this.serviceAccount = this.currentUser.email === SERVICE_ACCOUNT\n })\n );\n\n // get the active form values\n this.subscription(\n 'activeForm',\n this.store\n .pipe(select(selectActiveForm), distinctUntilChanged())\n .subscribe((next: BookingFormData | undefined) => {\n if (next) {\n next.duration = 30;\n this.bookingFormData.next(next); /// <---- timezone setting can be done here\n }\n })\n );\n\n this.subscription(\n 'bookingLocations',\n this.store.pipe(select(selectBookingLocations)).subscribe((next) => {\n this.bookingLocations.next(next);\n // update the map view MCK-1100 when location changes\n const self = this;\n setTimeout(() => {\n self.selectActiveBuilding(self.bookingLocations.value[0]);\n }, 0);\n })\n );\n\n this.subscription(\n 'bookingSpaceResults',\n combineLatest([\n this.store.pipe(\n select(selectMapFilteredResults),\n map((r: LoadingModel) => r.success)\n ),\n this.activeBuilding.pipe(filterUndefined()),\n this.activeLevel.pipe(filterUndefined()),\n ]).subscribe(([filteredSpaces, building, level]) => {\n this.roomStatus = filteredSpaces;\n\n const spacesFromSelection = (filteredSpaces.spaces || []).filter(\n (s) =>\n !!s.map_id &&\n s.zones.includes(building.id) &&\n s.zones.includes(this.payload?.payload)\n );\n\n this.resultSpaces.next(cloneDeep(spacesFromSelection));\n\n const listeners: MapListener[] = [];\n const styles: HashMap> = {};\n const colour_map = this.settingService.get('app.explore.colors') || {};\n spacesFromSelection.forEach((space) => {\n const status = filteredSpaces.statusMap[space.id];\n const mapStyle = generateMapStyleForSpace(space, status, colour_map);\n styles[`#${mapStyle.id}`] = mapStyle.styles;\n listeners.push(\n ...generateMapListenersForSpace(\n space,\n () => {},\n () => {},\n () => {\n if(!this.serviceAccount) {\n this.activeSpace.next(space);\n this.focusOnRoom();\n }\n \n }\n )\n );\n });\n this.style_map.next(styles);\n this.listeners.next(listeners);\n this.isOverlayOpened && this.focusOnRoom();\n })\n );\n\n this.subscription(\n 'bookingResults',\n this.resultSpaces\n .pipe(withLatestFrom(this.activeSpace))\n .subscribe(([resultSpaces, activeSpace]) => {\n this.spaceListOptions.next(resultSpaces.map(mapRoomToSelectOption));\n })\n );\n\n this.subscription(\n 'setActiveSpace',\n this.resultSpaces\n .subscribe((next) => {\n // console.log(this.focusedRoom?.value?.space?.id);\n const space = next.find((s) => s.id === this.focusedRoom?.value?.space?.id)\n space && this.activeSpace.next(space);\n })\n );\n\n\n \n\n this.subscription(\n 'storeResultedBuildings',\n this.store.pipe(select(selectSelectedBuildingOptions)).subscribe((buildings) => {\n this.resultBuildings.next(this.payload.building);\n // if we dont have active building yet, set it here.\n if (buildings.length > 0 && !this.activeBuilding.value) {\n const firstBuilding = buildings[0];\n this.activeBuilding.next(firstBuilding);\n }\n })\n );\n\n this.subscription(\n 'activeBuildingChange',\n this.activeBuilding\n .pipe(\n filterUndefined(),\n map((b: Building) => b.levels)\n )\n .subscribe((levels) => {\n this.buildingLevelOptions.next(levels.map(mapBuildingLevelToOption));\n })\n );\n\n // if levels change and active level no longer part of list, pick first.\n this.subscription(\n 'updateActiveLevelOnActiveBuildingChange',\n this.activeBuilding\n .pipe(\n filterUndefined(),\n distinctUntilChanged(),\n withLatestFrom(this.activeLevel),\n map(\n ([building, activeLevel]) =>\n (activeLevel && building.levels.find((l) => l.id === activeLevel.id)) ||\n building.levels[0]\n )\n )\n .subscribe((level) => {\n this.activeLevel.next(level);\n })\n );\n\n // re-request rooms every minute to update space status.\n this.subscription(\n 'updateSpaceStatusInterval',\n interval(60 * 1000)\n .pipe(withLatestFrom(this.store.select(selectActiveForm)))\n .subscribe(([, form]) => {\n \n form['date'] = closestToTimeSlot(DateTime.now().plus({ minutes: 1 }), WAITING_TIME).valueOf(),\n form.dateTz = closestToTimeSlotTz(\n new DateTZ({ date: DateTime.now().plus({ minutes: 1 }), is_local_tz: false, building_tz: form.timezone }),\n WAITING_TIME\n )\n this.store.dispatch(storeBookingFormData({ payload: form }));\n this.store.dispatch(loadRoomsForResults.request(roomFormDataToQuery(form)));\n })\n );\n\n this.selectActiveBuilding(this.payload.building);\n this.selectBuildingLevel(selection);\n\n }\n\n public zoomIn() {\n if (this.zoom.value < MAX_ZOOM_LEVEL) {\n this.zoom.next(this.zoom.value + 1);\n }\n }\n\n public zoomOut() {\n if (this.zoom.value > MIN_ZOOM_LEVEL) {\n this.zoom.next(this.zoom.value - 1);\n }\n }\n\n public displayOfficeInformation() {\n this.dialog.open(OfficeInformationModalComponent, {\n data: this.activeBuilding.value,\n panelClass: 'mck-alert',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n }\n\n public resetZoomLevels() {\n this.zoom.next(MIN_ZOOM_LEVEL);\n this.center.next(CENTER_POINT);\n this.focusedRoom.next(undefined);\n }\n\n public selectActiveBuilding(selection: SelectOption) {\n this.resultBuildings\n .pipe(\n map((all) => all.find((b) => b.id === selection.value)),\n take(1),\n filterUndefined()\n )\n .subscribe((next) => {\n this.activeBuilding.next(next);\n });\n }\n\n public selectBuildingLevel(selection: SelectOption) {\n this.activeBuilding\n .pipe(\n map((b) => b.levels?.find((l) => l.id === selection?.value)),\n take(1),\n filterUndefined()\n )\n .subscribe((next) => {\n this.activeLevel.next(next);\n });\n }\n\n public selectActiveSpace(selection?: SelectOption) {\n this.resultSpaces\n .pipe(\n map((all) => all.find((s) => s.id === this.focusedRoom?.value.space.id)),\n // take(1),\n filterUndefined()\n )\n .subscribe((next) => {\n this.activeSpace.next(next);\n });\n }\n\n public focusOnRoom() {\n // this.selectedSpace = space;\n this.activeSpace.pipe(take(1), filterUndefined()).subscribe((next) => {\n let delay = 0;\n if (next.level.id !== this.activeLevel.value.id) {\n this.activeLevel.next(next.level);\n delay = 500;\n }\n this.timeout(\n 'updateLevelAndRoom',\n () => {\n const focusedRoom = mapResultsToViewModels(\n [this.activeSpace.value],\n [this.activeLevel.value],\n [this.activeBuilding.value]\n );\n // this.focusedRoom.next(null);\n \n this.focusedRoom.next(cloneDeep(focusedRoom[0]));\n this.isOverlayOpened && this.childCallback( cloneDeep(focusedRoom[0]) );\n\n\t\t\t\t\tconst { filters, settings } = this.focusedRoom?.value?.space; // use of new data structure fields\n if ( this.roomStatus.statusMap[this.focusedRoom.value.space.id] === 'requestable' || (filters?.equipment_code || settings?.equipment_code) ) {\n // submit\n this.store.dispatch(\n storeBookingFormData({\n payload: {\n ...this.bookingFormData.value,\n selectedRoom: this.focusedRoom.value,\n },\n })\n );\n this.roomSelected(this.focusedRoom.value);\n }\n !this.isOverlayOpened && this.focusedMapSpace.next(roomToMapFeature(this.focusedRoom.value, this));\n this.zoom.next(6);\n },\n delay\n );\n });\n }\n\n public isOverlayOpened = false;\n public childCallback;\n\n public exitFullscreen(route: string): void {\n this.store.dispatch(clearRoomFilters());\n\n this.store.select(selectActiveForm).pipe(take(1))\n\t\t\t\t\t.subscribe((form) => {\n\t\t\t\t\t\tform.bookingType = bookingTypeOptions[0],\n form.roomSize = defaultRoomSizeOption,\n\t\t\t\t\t\t\tthis.store.dispatch(storeBookingFormData({ payload: form }));\n\t\t\t\t\t});\n\n const navigationExtras = {\n state: { payload: this.activeLevel.value },\n relativeTo: this.route,\n queryParams: {\n display: 'map',\n },\n };\n this._service.kioskFormFilter = true;\n this.router.navigate([route], navigationExtras);\n }\n\n // public triggerRefresh(){\n // this.subscription(\n // 'activeForm',\n // this.store\n // .pipe(select(selectActiveForm), distinctUntilChanged())\n // .subscribe((next: BookingFormData | undefined) => {\n // if (next) {\n // next.duration = 35;\n // this.bookingFormData.next(next);\n // }\n // })\n // );\n\n // this.subscription(\n // 'bookingSpaceResults',\n // combineLatest([\n // this.store.pipe(\n // select(selectMapFilteredResults),\n // map((r: LoadingModel) => r.success)\n // ),\n // this.activeBuilding.pipe(filterUndefined()),\n // this.activeLevel.pipe(filterUndefined()),\n // ]).subscribe(([filteredSpaces, building, level]) => {\n // this.roomStatus = filteredSpaces;\n\n // const spacesFromSelection = (filteredSpaces.spaces || []).filter(\n // (s) =>\n // !!s.map_id &&\n // s.zones.includes(building.id) &&\n // s.zones.includes(this.payload?.payload)\n // );\n\n // this.resultSpaces.next(spacesFromSelection);\n\n // const listeners: MapListener[] = [];\n // const styles: HashMap> = {};\n // const colour_map = this.settingService.get('app.explore.colors') || {};\n // spacesFromSelection.forEach((space) => {\n // const status = filteredSpaces.statusMap[space.id];\n // const mapStyle = generateMapStyleForSpace(space, status, colour_map);\n // styles[`#${mapStyle.id}`] = mapStyle.styles;\n // listeners.push(\n // ...generateMapListenersForSpace(\n // space,\n // () => {},\n // () => {},\n // () => {\n // this.activeSpace.next(space);\n // this.focusOnRoom();\n // }\n // )\n // );\n // });\n // this.style_map.next(styles);\n // this.listeners.next(listeners);\n // })\n // );\n\n // this.subscription(\n // 'bookingResults',\n // this.resultSpaces\n // .pipe(withLatestFrom(this.activeSpace))\n // .subscribe(([resultSpaces, activeSpace]) => {\n // this.spaceListOptions.next(resultSpaces.map(mapRoomToSelectOption));\n // })\n // );\n // }\n\n public roomSelected(room: RoomResultsViewModel) {\n // submit\n // this.store.dispatch(\n // storeBookingFormData({\n // payload: {\n // ...this.bookingFormData.value,\n // selectedRoom: room,\n // },\n // })\n // );\n\n let organiser = { display: this.currentUser.name, value: this.currentUser.email };\n this.store.dispatch(\n storeBookingFormData({\n payload: {\n organiser: organiser,\n title: 'Ad hoc meeting',\n // attendees: [this.currentUser],\n code: '',\n notes: '',\n head_count: 1,\n selectedRoom: room,\n },\n })\n );\n\n this.router.navigate(['../create'], { relativeTo: this.route });\n }\n\n public getDayOfWeek(date: string | number | Date) {\n const dayOfWeek = new Date(date).getDay();\n return isNaN(dayOfWeek)\n ? null\n : ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'][\n dayOfWeek\n ];\n }\n\n public confirmBooking = (bookingData: {}) => {\n this.bookingConfirmed = true;\n this.bookingData = bookingData;\n };\n}\n","
\n
\n
\n \n \n \n \n
\n \n
\n
\n
\n
\n
\n
Booking Confirmed
\n
\n
\n \n
Confirmed
\n
\n
\n
Status: Confirmed
\n
Date: {{this.getDayOfWeek(this.bookingData?.date_string)}}, {{this.bookingData?.date_string}}
\n
Time: {{this.bookingData?.time_period}} GMT{{this.bookingData?.tz_offset}}
\n
{{this.bookingData?.booking_type}} meeting ({{this.bookingData?.duration}} minutes)
\n
Address: {{this.activeBuilding?.value.address}}, {{this.activeBuilding?.value.city}}
\n
Room: {{this.focusedRoom.value.title}}
\n
Room {{this.focusedRoom.value.capacity}}
\n
\n
\n
\n
\n
\n
\n
Host: {{this.currentUser?.name}}
\n
Attendees: {{this.currentUser?.name}}
\n
Charge Code: {{this.focusedRoom?.value.space.filters.charge_code === false ? \"No charge code\" : \"\"}}
\n
Headcount Estimate: {{this.bookingData?.attendees.length}}
\n
Additional Requirements: {{this.bookingData?.notes[0]}}
\n
\n
\n
\n
\n \n Close\n \n
\n
\n
\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output\n} from '@angular/core';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { BehaviorSubject } from 'rxjs';\nimport {\n ActivatedRoute,\n ParamMap,\n Router\n} from '@angular/router';\nimport { deepDistinctUntilChanged } from '@mckinsey-converge/rx-utils';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'app-results-header',\n template: `\n
\n
\n

Results

\n Matching your search criteria {{resultsCount>=0 ? '('+resultsCount+')' : ''}} \n
\n \n \n
\n `,\n styleUrls: ['./results-header.component.scss']\n})\nexport class ResultsHeaderComponent extends BaseDirective implements OnInit {\n\n public toggleOptions: SelectOption[] = [\n {\n value: 0,\n display: 'List',\n meta: { \n mobile: true\n }\n },\n {\n value: 1,\n display: 'Map',\n meta: { \n mobile: true\n }\n },\n {\n value: 2,\n display: 'Calendar',\n meta: { \n route: 'booking-calendar',\n mobile: false\n }\n }\n ];\n\n public selectedToggle = new BehaviorSubject>(this.toggleOptions[0]);\n\n @Input()\n public resultsCount: number | undefined;\n\n @Output()\n public selectedToggleChange = new EventEmitter>();\n\n constructor(private router: Router,\n private route: ActivatedRoute) {\n super();\n }\n\n public ngOnInit(): void {\n this.selectedToggleChange.next(this.selectedToggle.value);\n\n this.subscription('paramsToUI', this.route.queryParamMap\n .pipe(deepDistinctUntilChanged())\n .subscribe((next: ParamMap) => {\n const retrievedOption = this.toggleOptions.find(o => o.display.toLowerCase() === next.get('display'));\n this.onSelectedChange(retrievedOption ?? this.toggleOptions[0]);\n }));\n }\n\n public onSelectedChange(option: SelectOption) {\n this.selectedToggle.next(option);\n this.selectedToggleChange.next(option);\n\n if(option.meta?.route) {\n this.router.navigate(['booking-calendar'], { relativeTo: this.route });\n }\n else {\n // toggle route.\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: {\n display: option.display.toLowerCase()\n },\n queryParamsHandling: 'merge'\n });\n }\n \n\n }\n\n}\n","import {\n Component,\n Inject,\n OnInit,\n Output,\n EventEmitter,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n MAT_DIALOG_DATA,\n MatDialogRef\n} from '@angular/material/dialog';\n\nimport {\n AbstractControl,\n FormControl,\n FormGroup,\n Validators\n} from '@angular/forms';\nimport {\n dateBuildingFormatString,\n startEndTimeWithZoneFormatString,\n humaniseDuration,\n closestToTimeSlotTz\n} from '@mckinsey-converge/base';\nimport {\n Space,\n SpacesService,\n DEFAULT_BOOKING_DURATION,\n checkCollisions,\n Booking\n} from '@mckinsey-converge/data-common';\nimport { DateTZ, convertLocalTimestampToTimezonedDateTz, convertTimezonedTimestampToLocalDateTz, DateNow } from '@mckinsey-converge/date-tz';\n\ninterface ModalData {\n dateTz: DateTZ,\n duration: number,\n pendingDateTz: DateTZ,\n pendingDuration: number,\n space?: Space,\n rules?: any,\n bookingId?: string,\n currentBooking?: Booking,\n}\n\n@Component({\n selector: 'app-room-availability-preview-modal',\n template: `\n
\n \n
\n \n
New Booking Date/Time
\n
\n
\n \n \n \n \n \n \n \n \n
\n
\n

Room is available for selected date/time.

\n

Room is unavailable for selected date/time.

\n

Checking availability for selected date/time...

\n

\n Please be aware that this booking starts at {{localStart}} and ends at {{localEnd}} in your local timezone.\n

\n
\n
\n
\n
\n

Old

\n

Date: {{dateString}}

\n

Time: {{timeString}}

\n

({{durationString}})

\n \n
\n
\n

New

\n

Date: {{pendingDateString}}

\n

Time: {{pendingTimeString}}

\n

({{pendingDurationString}})

\n
\n
\n
\n
\n \n \n \n
\n `,\n styleUrls: ['./room-availability-preview-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class RoomAvailabilityPreviewModalComponent implements OnInit {\n @Output() public submitForm = new EventEmitter();\n public dateString: string;\n public timeString: string;\n public durationString: string;\n public pendingDateString: string;\n public pendingTimeString: string;\n public pendingDurationString: string;\n public mapBookingRules: readonly string[];\n public mapBookingSubtitle: string;\n public fromDateTz: DateTZ = closestToTimeSlotTz(new DateTZ(), 15);\n public available: boolean = null;\n public formGroup = new FormGroup({\n dateTz: new FormControl(this.fromDateTz, [Validators.required]),\n duration: new FormControl(DEFAULT_BOOKING_DURATION, [Validators.required])\n });\n public localTimezone = \"\";\n public buildingTimezone = \"\";\n public localStart = \"\";\n public localEnd = \"\"\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: ModalData,\n private dialogRef: MatDialogRef,\n private _spaces: SpacesService,\n ) {}\n\n public get pending_date(){\n return this.data.pendingDateTz; // new DateTZ({ date: this.data.pendingDate.valueOf(), is_local_tz: false, building_tz: this.data?.space?.timezone })\n }\n\n public ngOnInit(): void {\n console.log('Here 1');\n this.formGroup.setValue({\n dateTz: this.data.pendingDateTz,\n duration: this.data.pendingDuration,\n });\n console.log('Here 2');\n this.updateDisplay();\n }\n\n // Method run when the confirming the modal.\n public applyChanges(changes: any): void {\n this.data.pendingDateTz = changes.pendingDateTz; // new Date(changes.pendingDate.valueOf());\n this.data.pendingDuration = changes.pendingDuration;\n this.updateDisplay();\n }\n\n public updateDisplay() {\n // this.data.dateTz is the existing time in building time\n // this.data.pendingDateTz is the new time in building time\n const dateTz = this.data.dateTz;\n this.dateString = dateBuildingFormatString(dateTz);\n this.timeString = startEndTimeWithZoneFormatString(dateTz, dateTz.addValue({ minutes: this.data.duration }));\n this.durationString = humaniseDuration(this.data.duration);\n\n const pendingDateTz = this.data.pendingDateTz;\n this.pendingDateString = dateBuildingFormatString(pendingDateTz);\n this.pendingTimeString = startEndTimeWithZoneFormatString(pendingDateTz, pendingDateTz.addValue({ minutes: this.data.pendingDuration }));\n this.pendingDurationString = humaniseDuration(this.data.pendingDuration);\n this.fromDateTz = closestToTimeSlotTz(pendingDateTz, 15); // building value\n\n const setup = {};\n setup[this.data.space.email] = this.data?.currentBooking?.setup[this.data?.space?.email] || 0;\n const breakdown = {};\n breakdown[this.data.space.email] = this.data?.currentBooking?.setup[this.data?.space?.email] || 0;\n\n this.updateCoachmarkTimes(this.data?.space?.timezone);\n\n const mockBooking = new Booking({\n id: this.data.bookingId,\n start_epoch: this.data.pendingDateTz.seconds,\n end_epoch: this.data.pendingDateTz.addValue({ minutes: this.data.pendingDuration }).seconds,\n room: this.data.space,\n setup,\n breakdown, \n });\n\n checkCollisions(\n this._spaces,\n mockBooking\n ).then((bookable: boolean) => {\n this.available = bookable;\n }).catch(() => {\n this.available = false;\n });\n }\n\n public closeModal() {\n this.dialogRef.close(null);\n }\n\n public updateDatePickerValue(dateTz: DateTZ) {\n const pending_date: DateTZ = this.formGroup.value.dateTz\n const day = pending_date.setValue({ \n day: dateTz.dateDay,\n month: dateTz.dateMonth,\n year: dateTz.dateYear\n });\n this.setValue(day, this.formGroup.controls.dateTz);\n }\n\n public setValue($value, formControl: AbstractControl) {\n // valid options are in building time\n formControl.setValue($value); // bulding time\n this.submitForm.emit(this.formGroup.value);\n }\n\n public confirm() {\n const setup = {};\n setup[this.data.space.email] = this.data?.currentBooking?.setup[this.data?.space?.email] || 0;\n const breakdown = {};\n breakdown[this.data.space.email] = this.data?.currentBooking?.setup[this.data?.space?.email] || 0;\n\n const buildingDate = convertLocalTimestampToTimezonedDateTz(this.data.pendingDateTz.ms, this.data?.currentBooking?.timezone);\n const mockBooking = new Booking({\n id: this.data.bookingId,\n start_epoch: buildingDate.seconds,\n end_epoch: buildingDate.addValue({ minutes: this.data.pendingDuration }),\n room: this.data.space,\n setup,\n breakdown, \n });\n\n checkCollisions(\n this._spaces,\n mockBooking\n ).then((bookable: boolean) => {\n this.available = bookable;\n this.dialogRef.close({\n ...this.formGroup.value,\n }); \n }).catch(() => {\n this.available = false;\n });\n }\n\n private updateCoachmarkTimes(timezone: string) {\n if (timezone) {\n this.buildingTimezone = timezone;\n const localizedStartDate = this.formGroup.value.dateTz;\n const localizedEndDate = localizedStartDate.addValue({ minutes: this.formGroup.value.duration });\n this.localStart = localizedStartDate.formatLocalDate(\"h:mma\");\n this.localEnd = localizedEndDate.formatLocalDate(\"h:mma\");\n } else {\n this.buildingTimezone = this.localTimezone.slice(0);\n this.localStart = \"\";\n this.localEnd = \"\";\n } \n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n Input,\n OnInit,\n OnChanges,\n ElementRef,\n ViewChild,\n EventEmitter,\n Output,\n SimpleChanges,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { fromEvent, Subject, BehaviorSubject, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { throttleTime, tap } from 'rxjs/operators';\nimport { CalendarEvent, CalendarEventTimesChangedEvent } from 'angular-calendar';\nimport { BaseClass, durationHumanized, isLessThanBreakpoint } from '@mckinsey-converge/base';\nimport {\n Booking,\n Building,\n BuildingLevel,\n Space,\n User,\n rulesForSpace,\n SpaceRules,\n} from '@mckinsey-converge/data-common';\nimport { generateFeedbackUrl, Urls } from '../../utilities/urls';\nimport { TopBarHeaderMode } from '../room-location-preview/room-location-preview.component';\nimport { RoomAvailabilityPreviewModalComponent } from '../room-availability-preview-modal/room-availability-preview-modal.component';\nimport {\n DateNow,\n DateTZ,\n convertLocalTimestampToTimezonedDateTz,\n convertTimezonedTimestampToLocalDateTz,\n timezoneOffset,\n} from '@mckinsey-converge/date-tz';\nimport { utcToZonedTime } from 'date-fns-tz';\nimport { FormControl } from '@angular/forms';\nimport { DateTime } from 'luxon';\n\nconst WEEKEND_DAYS = [6, 7];\nconst colors = {\n grey: {\n secondary: '#D2D2D2',\n primary: '#A19F9F',\n },\n blue: {\n secondary: '#C0DBF5',\n primary: '#00A9F4',\n },\n red: {\n secondary: '#EB5757',\n primary: '#EB5757',\n },\n};\n\ninterface CalendarClickEvent {\n date: Date;\n}\n\nexport interface BookingBumper {\n top?: string;\n bottom?: string;\n height: string;\n backgroundColor: string;\n}\nexport interface BookingBumpers {\n top: BookingBumper;\n bottom: BookingBumper;\n}\n\nexport type BookingPlus = Booking & { start: number; end: number }; // R--- why again?\nexport type CalendarEventPlus = CalendarEvent & { bumper?: BookingBumpers; booking?: Booking };\n\n@Component({\n selector: 'room-availability-preview',\n templateUrl: './room-availability-preview.component.html',\n styleUrls: ['./room-availability-preview.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RoomAvailabilityPreviewComponent extends BaseClass implements OnInit, OnChanges {\n @ViewChild('scrollContainer') scrollContainer: ElementRef;\n\n @Input() public alternativeWeekStartDateTz: DateTZ;\n // Used when editing a booking\n @Input() public bookingId?: string;\n @Input() public bookings: BookingPlus[];\n /** retain as mutable */\n @Input() public building: Building;\n // R--- could probably use the currentBooking ID edit,\n // The bookingId was an after thought\n @Input() public currentBooking: Booking;\n @Input() public currentUser: User;\n @Input() public dateTz: DateTZ;\n @Input() public duration: number;\n @Input() public expanded: boolean;\n @Input() public level: BuildingLevel;\n /** The theme to use **/\n @Input() public mode: TopBarHeaderMode = TopBarHeaderMode.Light;\n @Input() public space: Space;\n // @Input() public timezone: string;\n\n @Output() public confirmChanges: EventEmitter = new EventEmitter();\n @Output() public handleExpand: EventEmitter = new EventEmitter();\n @Output() public updateCalendarWeekView: EventEmitter = new EventEmitter();\n @Output() public warnIfItHasConflict: EventEmitter = new EventEmitter();\n\n constructor(public dialog: MatDialog) {\n super();\n }\n\n public breakpoint = 768;\n public mobile = false;\n public showDatePicker = false;\n public events: CalendarEventPlus[] = [];\n public dayStartHour: number;\n public dayEndHour: number;\n public viewDateTz: DateTZ;\n public weekViewDateTz: DateTZ;\n public weekViewRangeText: string;\n public showWeekend: boolean = false;\n public currentPage: string;\n public calendarPopupValue = new BehaviorSubject(DateNow(new Date()));\n public pendingChange: boolean = false;\n public pendingDateTz: DateTZ;\n public pendingDuration: number;\n public eventSnapSize: number = 15;\n public dayRefresh: Subject = new Subject();\n public weekRefresh: Subject = new Subject();\n public addMarginOnConflict: boolean = false; // helps to add html class to adjust margin top in case of QR code scan conflict\n public event: CalendarEventPlus = {\n start: new Date(),\n end: new Date(),\n title: '',\n color: colors.blue,\n cssClass: 'selected',\n actions: null,\n resizable: {\n beforeStart: false,\n afterEnd: false,\n },\n draggable: false,\n };\n\n public get timezone(): string {\n return this.dateTz.building_tz;\n }\n\n public get one_day_in_millis() {\n return 86400000;\n }\n\n public get thirty_minutes_in_millis() {\n return 1800000;\n }\n public rules: SpaceRules;\n public modal_data: any = {};\n public scrollFired: boolean = false;\n\n // Values to display a span on the date picker, but the date picker doesn't support this.\n public date_span = {\n start: 0,\n end: 0,\n };\n\n // I can't think of any reason the calendar widget needs to go back further than 2 years, if even that.\n public fromDateTz = DateNow(new Date()).subtractValue({ years: 2 });\n\n public dateControl = new FormControl(new Date().valueOf());\n\n public isEventDate(d: CalendarClickEvent) {\n const date = new DateTZ({ date: d.date.valueOf() }); // local time I think.. problem TODO\n return this.pendingDateTz.isSameDate(date, 'day');\n }\n\n public get inputDate(): Observable {\n return this.calendarPopupValue.pipe(map((d) => d));\n }\n\n public get feedback() {\n return generateFeedbackUrl(this.currentPage);\n }\n\n public ngOnInit(): void {\n // R--- retrun to document\n this.mobile = isLessThanBreakpoint(this.breakpoint);\n this.pendingDateTz = this.dateTz.clone();\n const date = this.dateTz.clone();\n const currentBookingStartDate = this.currentBooking\n ? this.currentBooking.startDateTz.addValue({ seconds: 0 })\n : date;\n this.alternativeWeekStartDateTz = date.startOfValue('week').startOfValue('day');\n\n // Not sure if this is correct\n this.weekViewDateTz = this.alternativeWeekStartDateTz.clone();\n\n this.calendarCenter();\n this.pendingDuration = this.duration;\n this.viewDateTz = new DateTZ({ \n date: DateTime.fromISO(this.pendingDateTz.formatDate('yyyy-MM-dd'))\n }).setValue({ hour: 12, minute: 0 });\n this.setCalendarValue(this.pendingDateTz);\n this.showWeekend =\n WEEKEND_DAYS.includes(currentBookingStartDate.dateWeekday) ||\n WEEKEND_DAYS.includes(date.dateWeekday);\n this.setupEventName();\n this.transformBookings();\n fromEvent(window, 'resize')\n .pipe(throttleTime(500))\n .pipe(\n tap({\n next: (val) => {\n const target = val.target as Window;\n this.mobile = target.innerWidth < this.breakpoint;\n this.expanded ? this.weekRefresh.next() : this.dayRefresh.next();\n },\n })\n )\n .subscribe();\n\n this.rules = rulesForSpace({\n time: this.dateTz.ms,\n duration: this.duration,\n user: this.currentUser,\n rules: this.building?.booking_rules,\n space: this.space,\n });\n\n // Update the display when the screen resizes.\n fromEvent(window, 'resize')\n .pipe(throttleTime(500))\n .pipe(\n tap({\n next: (val) => {\n this.mobile = isLessThanBreakpoint(this.breakpoint);\n this.calendarCenter();\n this.setDislayValues();\n },\n })\n )\n .subscribe();\n this.dateControl.setValue(this.dateTz);\n this.transformBookings();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.expanded) {\n // set if the event is editable\n this.event.draggable = this.expanded;\n this.event.resizable = {\n beforeStart: this.expanded,\n afterEnd: this.expanded,\n };\n const date = this.dateTz;\n this.setCalendarValue(date);\n }\n\n if (this.dayStartHour) this.scrollTo();\n\n if (!this.pendingDateTz) return;\n\n if (changes.bookings || changes.expanded) {\n this.transformBookings();\n }\n if (changes.alternativeWeekStartDateTz) {\n this.setDislayValues();\n }\n if (changes.expanded) {\n this.expanded ? this.weekRefresh.next() : this.dayRefresh.next();\n }\n }\n\n public setDislayValues() {\n const tz_offset = timezoneOffset(this.alternativeWeekStartDateTz.building_tz).hours\n const week_start_date = this.alternativeWeekStartDateTz.subtractValue({hours: tz_offset}).clone(); // Operation needed to trick the mwl-calendar-week-view to display the correct day if the day changes between timezones \n this.weekViewDateTz = this.weekViewDateTz || this.alternativeWeekStartDateTz.clone();\n let week_view_date = this.weekViewDateTz.startOfValue('week'); // new DateTZ({date: this.weekViewDate?.valueOf()}).startOfValue('week')\n if (!this.showWeekend) {\n // Advance from Sunday to Monday\n week_view_date = week_view_date.addValue({ days: 1 });\n }\n\n if (this.mobile) {\n this.weekViewDateTz = week_start_date\n this.weekViewRangeText = `${this.weekViewDateTz.formatDate('d MMMM')}`;\n this.calendarPopupValue.next(this.weekViewDateTz);\n } else {\n this.weekViewDateTz = week_start_date.addValue({ days: this.showWeekend ? 0 : 1 }); // new Date(week_start_date.addValue({ days: this.showWeekend ? 0 : 1 }).ms);\n this.weekViewRangeText = `${week_view_date.formatDate('d MMMM')} - ${week_view_date\n .addValue({ days: this.showWeekend ? 6 : 4 })\n .formatDate('d MMMM yyyy')}`;\n this.calendarPopupValue.next(week_view_date);\n }\n }\n\n public getBumpers(booking: Booking, selected: boolean = false) {\n const email = booking.space.email || this.space.email;\n const setup = booking.setup[email] ? booking.setup[email] / 60 : 0;\n const breakdown = booking.breakdown[email] ? booking.breakdown[email] / 60 : 0;\n\n return {\n top: {\n top: `-${setup - 1}px`,\n height: `${setup}px`,\n backgroundColor: selected ? colors.blue.secondary : colors.grey.secondary,\n },\n bottom: {\n bottom: `-${breakdown - 1}px`,\n height: `${breakdown}px`,\n backgroundColor: selected ? colors.blue.secondary : colors.grey.secondary,\n },\n };\n }\n\n public setupEventName() {\n this.setDislayValues();\n const pending_date = this.pendingDateTz.clone();\n const start_date = pending_date.setValue({ second: 0, millisecond: 0 });\n this.event.start = start_date.JSDate;\n this.event.end = start_date.addValue({ minutes: this.pendingDuration }).JSDate;\n const startHour = parseInt(pending_date.formatDate('H'), 10);\n\n if (startHour === 0) {\n this.dayStartHour = startHour;\n } else if (startHour < 6) {\n const offset = startHour > 3 ? startHour - 2 : startHour;\n this.dayStartHour = startHour - offset;\n } else {\n // The min of 18 is needed so start times after 6pm\n // don't push the calendar view beyond midnight.\n const offset = Math.min(18, startHour - 3);\n this.dayStartHour = offset;\n }\n\n if (!this.scrollFired && this.dayStartHour) {\n this.scrollTo();\n }\n\n this.dayEndHour = Math.max(24, this.dayStartHour + 6);\n this.event.title = `${pending_date\n .formatDate('h:mma')\n .toLocaleLowerCase()} (${durationHumanized(this.pendingDuration, true)})`;\n this.event.cssClass = `selected ${this.showWeekend ? 'show-weekend' : ''} ${\n this.mobile && this.expanded ? 'mobile' : ''\n } `;\n\n if (this.currentBooking) {\n this.event.bumper = this.getBumpers(this.currentBooking);\n this.event.booking = this.currentBooking;\n }\n this.expanded ? this.weekRefresh.next() : this.dayRefresh.next();\n }\n\n public transformBookings() {\n this.calendarSpan();\n const events = [];\n if (Array.isArray(this.bookings)) {\n this.bookings.forEach((raw_booking) => {\n const booking = new Booking(raw_booking);\n const { mode, duration } = this.displayClass(\n booking.startDateTz.ms,\n booking.endDateTz.ms\n );\n\n // back off a ms when end of day to avoid all day wrapping to next day.\n let end = booking.endDateTz;\n const endTime = booking.endDateTz;\n if (endTime.minutes === 0 && endTime.seconds === 0) {\n // back off a ms when the end of day to avoid all day wrapping to next day.\n end = booking.endDateTz.subtractValue({ seconds: 1 });\n }\n\n // When editing skip over the current booking\n if (booking.id === this.bookingId) return;\n\n const utcStart = booking.startDateTz; // building time\n const utcEnd = end; // building time\n // adjust the time to appear as the same time locally ( but technically incorrect for building timezone )\n const adjustedStartDate = utcToZonedTime(utcStart.ms, booking.timezone); // return local time\n const adjustedEndDate = utcToZonedTime(utcEnd.ms, booking.timezone); // return local time\n\n events.push({\n start: adjustedStartDate,\n end: adjustedEndDate,\n title: `Booked by ${booking.booker['name']}`,\n color: colors.grey,\n actions: null,\n cssClass: `booked ${this.mobile && 'mobile'} ${\n this.showWeekend ? 'show-weekend' : ''\n } ${mode}`,\n bumper: this.getBumpers(booking),\n resizable: {\n beforeStart: false,\n afterEnd: false,\n },\n draggable: false,\n booking,\n });\n });\n }\n\n const { mode, duration } = this.displayClass(\n this.event.start.getTime(),\n this.event.end.getTime()\n );\n const event = Object.assign({}, this.event);\n const endTime = new DateTZ({ date: this.event.start.valueOf() }).addValue({\n minutes: this.pendingDuration,\n }); // building time\n if (endTime.minutes === 0 && endTime.second === 0) {\n // back off a ms when the end of day to avoid all day wrapping to next day.\n event.end = endTime.subtractValue({ milliseconds: 1 }).JSDate; // building time\n }\n\n // adjust the time to appear as the same time locally ( but technically incorrect for building timezone )\n // will need to adjust the other way with drag and drop and click actions.\n event.start = utcToZonedTime(event.start, this.timezone); // local time\n event.end = utcToZonedTime(event.end, this.timezone); // local time\n\n event.cssClass = `selected ${this.mobile && this.expanded ? 'mobile' : ''} ${mode}`;\n if (this.currentBooking) {\n event.bumper = this.getBumpers(this.currentBooking, true);\n event.booking = this.currentBooking;\n }\n\n events.push(event);\n this.events = events.slice();\n this.updateTileColor();\n }\n\n public updateTileColor() {\n const pending_date = this.pendingDateTz.clone();\n const start = pending_date.setValue({ second: 0, millisecond: 0 });\n const end = start.addValue({ minutes: this.pendingDuration });\n const booked = this.events.filter((e) => !e.draggable); // this.events are in local time\n const conflict = this.hasConflict(start, end, booked);\n const isEvents = this.events.filter((e) => e.draggable);\n if(isEvents.length ) {\n isEvents[0].color = conflict ? colors.red : colors.blue;\n this.addMarginOnConflict = conflict ? true : false;\n \n } \n !this.expanded && this.warnIfItHasConflict.emit({room: this.space, hasConflict: conflict});\n }\n public displayClass(start: number, end: number) {\n const duration = end - start;\n return {\n duration,\n mode: duration > this.thirty_minutes_in_millis ? 'extended' : 'minimal',\n };\n }\n\n public setCalendarValue(dateTz: DateTZ) {\n let toDate = DateNow().startOfValue('minute');\n if (dateTz) {\n toDate = dateTz.startOfValue('minute');\n }\n if (!this.mobile && toDate.dateWeekday !== 7) {\n toDate = toDate.startOfValue('week');\n }\n this.updateCalendarWeekView.emit(toDate);\n this.weekRefresh.next();\n this.alternativeWeekStartDateTz = toDate;\n this.setDislayValues();\n }\n\n /**\n * Convert the true bulding based time object to a timestamp skewed to the local time\n *\n * @param buildingTz - DateTZ object of time in bulding timezone\n * @returns number - timestamp in local time skewed from bulding time\n */\n public convertTimezonedValueForCalendar(buildingTz: DateTZ) {\n return convertTimezonedTimestampToLocalDateTz(buildingTz.ms, this.timezone).ms;\n }\n\n public hasConflict(startTz, endTz, booked) {\n // Convert the start and end building times to the local timezone for comparison with the localized bookings.\n const localizedStartTime = startTz.ms;\n const localizedEndTime = endTz.ms;\n let email = this.space?.email || this.currentBooking?.room?.email;\n return booked.some((b) => {\n email = email || b.booking?.room?.email;\n // Booking here are local time to render on the calendar correctly\n const setup = b.booking?.setup[email] || 0;\n // R--- This weird augmented booking with start and end needs to be with DateTZ and a getter when ms is needed.\n const bookingStartTime = new DateTZ({ date: b.start.valueOf() }); // local times\n const bookingEndTime = new DateTZ({ date: b.end.valueOf() }); // local times\n const bstart = bookingStartTime.subtractValue({ seconds: setup }).ms;\n const breakdown = b.booking?.breakdown[email] || 0;\n const bend = bookingEndTime.addValue({ seconds: breakdown }).ms;\n\n if (\n (localizedStartTime >= bstart && localizedStartTime < bend) || // booking starts durring a meeting\n (localizedStartTime <= bstart && localizedEndTime > bstart) || // booking ends durring meeting\n (localizedStartTime >= bstart && localizedEndTime <= bend) || // booking starts and ends durring a meeting\n (localizedStartTime <= bstart && localizedEndTime >= bend) // booking overlaps entire meeting\n ) {\n return b.booking?.id !== this.currentBooking?.id;\n }\n return false;\n });\n }\n\n public eventTimesChanged({ event, newStart, newEnd }: CalendarEventTimesChangedEvent): void {\n const s = convertLocalTimestampToTimezonedDateTz(\n newStart.valueOf(),\n this.timezone\n );\n if (s.ms < Date.now()) return;\n // newStart and newEnd are local times from the calendar component\n // merging in with localized bookings in this.events\n this.events = this.events.map((iEvent) => {\n if (event.id && iEvent.id === event.id) {\n return {\n ...event,\n start: newStart,\n end: newEnd,\n };\n }\n return iEvent;\n }); // local times\n\n let buildingStartDateTz = new DateTZ(\n { date: newStart.valueOf()}\n );\n let buildingEndDateTz = new DateTZ(\n { date: Math.ceil(newEnd.valueOf()/900000)*900000 } //For latest bug in CNG-309, make sure end time follows a 15-min interval\n );\n\n // Clear out the seconds and miliseconds to avoid collision by seconds.\n buildingStartDateTz.setValue({ millisecond: 0, second: 0 });\n\n if (buildingStartDateTz < DateNow(new Date())) {\n // compare building time to now\n // Abandon updates if the past\n this.transformBookings();\n return;\n }\n\n let pendingDuration = Math.floor(\n (buildingEndDateTz.ms - buildingStartDateTz.ms) / 60 / 1000\n );\n // Make adjustments to the time and duration so the snap to behavior aligns\n // with the Mckinsey time and duration rules.\n const new_start = buildingStartDateTz.clone(); //new DateTZ({date: buildingNewStart.getTime()}); // building time\n if (pendingDuration >= 60) {\n // check that duration is inc of 1/2 hr\n const d = pendingDuration % 30;\n // if (d) {\n // pendingDuration = Math.floor(pendingDuration + (30 - d));\n // buildingEndDateTz = new_start.addValue({ minutes: pendingDuration }); // building time\n // }\n // check that the start time is 1/2 hr\n const m = parseInt(new_start.formatDate('m'), 10);\n const md = m % 30;\n // if (md) {\n // buildingStartDateTz = new_start.addValue({ minutes: md }); // building time\n // buildingEndDateTz = new_start.addValue({ minutes: pendingDuration }); // building time\n // }\n // Update snap to rules\n // this.eventSnapSize = 30; //done for CNG-309\n } else {\n // check that duration is inc of 1/4 hr\n const d = pendingDuration % 15;\n if (d) {\n // pendingDuration = Math.floor(pendingDuration + (15 - d));\n // buildingEndDateTz = new_start.addValue({ minutes: pendingDuration }); // building time\n }\n this.eventSnapSize = 15;\n }\n\n // Drag and Drop / Resize duration\n const dnd_duration = buildingEndDateTz.ms - buildingStartDateTz.ms;\n if (dnd_duration >= this.one_day_in_millis - 1) {\n // Add that millisecond back in so the angular calender drag and drop snapping still works.\n buildingEndDateTz = buildingEndDateTz.addValue({ milliseconds: 1 });\n }\n\n if (this.rules?.max_length) {\n if (dnd_duration / 60000 > this.rules?.max_length) {\n // Abandon updates if exceeeds max duration\n this.transformBookings();\n return;\n }\n }\n\n // Setup values for conflict checking, add on the setup and breakdown times form comparison\n let conflictCheckStartTime = buildingStartDateTz.clone();\n let conflictCheckEndTime = buildingEndDateTz.clone();\n // Setup and Breakdown\n if (this.currentBooking) {\n const setup = this.currentBooking.setup[this.currentBooking.space.email] || 0;\n if (setup) {\n const start = buildingStartDateTz.clone();\n conflictCheckStartTime = start.subtractValue({ seconds: setup });\n }\n const breakdown = this.currentBooking.breakdown[this.currentBooking.space.email] || 0;\n if (breakdown) {\n const end = buildingEndDateTz.subtractValue({ seconds: 1 });\n conflictCheckEndTime = end.addValue({ minutes: breakdown });\n }\n }\n\n // check existing events\n const start = conflictCheckStartTime;\n const end = conflictCheckEndTime;\n const booked = this.events.filter((e) => e.draggable === false); // this.events are in local time\n const conflict = this.hasConflict(start, end, booked);\n this.dateControl.setValue(start);\n if (conflict) {\n // Abandon updates if conflict\n this.transformBookings();\n return;\n }\n\n // check if the time or duration has changed\n if (this.pendingDateTz !== buildingStartDateTz) {\n this.pendingChange = true;\n } else if (this.pendingDuration !== pendingDuration) {\n this.pendingChange = true;\n }\n\n // set the new Pending Date\n this.pendingDateTz = convertLocalTimestampToTimezonedDateTz(buildingStartDateTz.ms, this.timezone); // building time\n this.pendingDuration = pendingDuration;\n\n this.setupEventName();\n this.transformBookings();\n }\n\n public hourClicked(event: CalendarClickEvent) {\n // convert the calender local input to the building times\n const buildingStartDate = convertLocalTimestampToTimezonedDateTz(\n event.date.valueOf(),\n this.timezone\n ); // return building time\n let startTz = buildingStartDate.clone();\n let endTz = startTz.addValue({ minutes: this.pendingDuration });\n\n if (buildingStartDate.ms < Date.now()) {\n // compare building time to now\n // Abandon past events\n return;\n }\n\n // this.pendingDate is in building time\n if (this.pendingDateTz.ms !== startTz.ms) {\n // comparing building to building\n // Setup and Breakdown\n if (this.currentBooking) {\n const setup = this.currentBooking.setup[this.currentBooking.space.email] || 0;\n if (setup) {\n startTz = startTz.subtractValue({ seconds: setup });\n }\n const breakdown =\n this.currentBooking.breakdown[this.currentBooking.space.email] || 0;\n if (breakdown) {\n endTz = endTz.addValue({ minutes: breakdown });\n }\n }\n\n // check existing events\n const booked = this.events.filter((e) => e.draggable === false);\n // building start and end time but localized bookings\n const conflict = this.hasConflict(startTz, endTz, booked);\n if (conflict) {\n // Abandon updates if conflict\n this.transformBookings();\n return;\n }\n\n this.pendingChange = true;\n this.pendingDateTz = buildingStartDate; // building time\n\n this.setupEventName();\n this.transformBookings();\n }\n }\n\n public displayConfirmationModal() {\n this.modal_data = {\n pendingDateTz: this.pendingDateTz, // building time , new time\n pendingDuration: this.pendingDuration,\n dateTz: this.dateTz, // building time, existing time\n duration: this.duration,\n space: new Space(this.space),\n rules: this.rules,\n bookingId: this.bookingId,\n currentBooking: this.currentBooking,\n };\n\n const dialogRef = this.dialog.open(RoomAvailabilityPreviewModalComponent, {\n data: this.modal_data,\n panelClass: 'mck-modal',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n\n dialogRef.componentInstance.submitForm.subscribe((d: any) => {\n // Apply the confirmed changes\n this.pendingChange = true;\n this.pendingDateTz = d.dateTz;\n this.pendingDuration = d.duration;\n\n dialogRef.componentInstance.applyChanges({\n dateTz: d.dateTz,\n duration: this.pendingDuration,\n pendingDateTz: this.pendingDateTz,\n pendingDuration: this.pendingDuration,\n });\n this.setupEventName();\n this.transformBookings();\n // Change View\n this.setCalendarValue(d.dateTz);\n });\n\n dialogRef.afterClosed().subscribe((d) => {\n // Update the current with pending record\n if (d) {\n // convert the local input values returned into the same time in the building timezone\n const buildingDate = convertLocalTimestampToTimezonedDateTz(\n d.dateTz.ms,\n this.timezone\n );\n this.dateTz = buildingDate;\n this.duration = d.duration;\n this.viewDateTz = new DateTZ({ \n date: DateTime.fromISO(buildingDate.formatDate('yyyy-MM-dd'))\n }).setValue({ hour: 12, minute: 0 })\n this.pendingChange = false;\n this.confirmChanges.emit({ ...d, mobile: this.mobile, save: true });\n } else {\n // this is ok\n const md = this.modal_data;\n this.dateTz = md.dateTz;\n this.duration = md.duration;\n this.pendingDateTz = md.dateTz;\n this.pendingDuration = md.duration;\n this.viewDateTz = new DateTZ({ \n date: DateTime.fromISO(md.dateTz.formatDate('yyyy-MM-dd'))\n }).setValue({ hour: 12, minute: 0 })\n this.pendingChange = false;\n // This is reverting the changes\n this.confirmChanges.emit({\n dateTz: md.dateTz,\n duration: this.duration,\n mobile: this.mobile,\n save: !!d,\n });\n this.setupEventName();\n this.transformBookings();\n this.weekRefresh.next();\n this.alternativeWeekStartDateTz = this.viewDateTz;\n this.setDislayValues();\n }\n });\n }\n\n public goToHelp() {\n window.open(Urls.Help);\n }\n\n public scrollTo() {\n if (this.scrollFired) return;\n this.timeout(\n 'scroll_to',\n () => {\n const ele = document.getElementById('calendarScrollContainer');\n if (ele) {\n ele.scrollTo({\n top: this.dayStartHour * 64,\n left: 0,\n behavior: 'smooth',\n });\n this.scrollFired = true;\n }\n },\n 500\n );\n }\n\n public toggleDatePicker() {\n this.showDatePicker = !this.showDatePicker;\n }\n\n public collapse() {\n this.handleExpand.emit(false);\n // Reset to the initial view\n this.pendingDateTz = this.dateTz; // = new Date(this.date);\n this.pendingDuration = this.duration;\n this.viewDateTz = new DateTZ({ \n date: DateTime.fromISO(this.dateTz.formatDate('yyyy-MM-dd'))\n }).setValue({ hour: 12, minute: 0 })\n this.pendingChange = false;\n this.setupEventName();\n this.transformBookings();\n this.dayRefresh.next();\n }\n\n public calendarBack() {\n let today = this.alternativeWeekStartDateTz; // new DateTZ({date: this.alternativeWeekStartDate});\n if (this.mobile) {\n today = today.subtractValue({ days: 1 });\n } else {\n today = today.subtractValue({ weeks: 1 }).startOfValue('day');\n }\n this.updateCalendarWeekView.emit(today);\n this.weekRefresh.next();\n this.alternativeWeekStartDateTz = today;\n this.setDislayValues();\n }\n\n public calendarSpan() {\n let today = this.pendingDateTz; // new DateTZ({date: this.pendingDate.valueOf()});\n if (this.mobile || !this.expanded) {\n this.date_span.start = today.startOfValue('day').ms;\n this.date_span.end = today.endOfValue('day').ms;\n } else {\n this.date_span.start = today.startOfValue('week').ms;\n this.date_span.end = today.endOfValue('week').ms;\n }\n }\n\n public calendarCenter() {\n let today = this.pendingDateTz.startOfValue('day');\n if (!this.mobile) {\n today = today.startOfValue('week');\n }\n\n this.updateCalendarWeekView.emit(today);\n this.weekRefresh.next();\n this.alternativeWeekStartDateTz = today;\n this.setDislayValues();\n }\n\n public calendarForward() {\n let today = this.alternativeWeekStartDateTz // new DateTZ({date: this.alternativeWeekStartDate});\n if (this.mobile) {\n today = today.addValue({ days: 1 });\n } else {\n today = today.addValue({ weeks: 1 }).startOfValue('day');\n }\n this.updateCalendarWeekView.emit(today);\n this.weekRefresh.next();\n this.alternativeWeekStartDateTz = today;\n this.setDislayValues();\n }\n\n public toggleWeekend() {\n this.showWeekend = !this.showWeekend;\n this.setupEventName();\n }\n}\n","
\n
\n \n \n
\n
\n \n \n
\n
\n
\n

Room Availability

\n

{{space.local_name}}

\n

{{building?.name}}, {{level?.name}}, {{building?.address}}

\n
\n
\n
\n
\n \n \n \n
\n
\n {{weekViewRangeText}}\n \n \n
\n \n Show Weekend\n \n
\n
\n
\n \n\n \n
\n \n {{ day.date | calendarDate:'weekViewColumnHeader':locale }} {{ day.date | calendarDate:'weekViewColumnSubHeader':locale }}\n

{{ isEventDate(day) ? '(Current Selection)' : '' }}

\n
\n
\n \n\n \n \n
\n
\n
\n
\n \n \n &ngsp;\n \n \n
\n \n
\n
\n
\n\n
\n
\n \n \n
\n
\n \n\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n OnChanges,\n Output,\n ViewContainerRef,\n ViewChild\n} from '@angular/core';\nimport {\n AbstractControl,\n FormControl,\n FormGroup,\n FormGroupDirective,\n Validators\n} from '@angular/forms';\nimport {\n BehaviorSubject,\n Observable,\n of,\n Subject\n} from 'rxjs';\nimport {\n catchError,\n debounceTime,\n distinctUntilChanged,\n first,\n map,\n switchMap,\n take,\n withLatestFrom,\n} from 'rxjs/operators';\nimport {\n Store\n} from '@ngrx/store';\nimport {\n checkCollisions,\n Booking,\n User,\n UsersService,\n BookingFormData,\n selectActiveForm,\n SpacesService,\n} from '@mckinsey-converge/data-common';\nimport {\n matchToHighlight\n} from '@mckinsey-converge/base';\n\nimport {\n BaseTemplateComponent,\n SelectOption\n} from '@mckinsey-converge/ui';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\n@Component({\n selector: 'app-room-booking-details-form',\n templateUrl: './room-booking-details-form.component.html',\n styleUrls: ['./room-booking-details-form.component.scss']\n})\nexport class RoomBookingDetailsFormComponent extends BaseTemplateComponent implements OnInit, OnChanges {\n @ViewChild('formRef')\n public formRef: FormGroupDirective;\n /** Number of characters needed before a search will start */\n @Input() public limit = 3;\n /** When the value changes, the form is submitted */\n @Input() public triggerSubmit = '';\n /** Need booking details */\n @Input() public booking: Booking = null;\n /** Data returned to parent */\n @Output() public submitForm = new EventEmitter();\n /** Data returned to parent */\n @Output() public validateForm = new EventEmitter();\n /** Current User */\n public currentUser: User;\n /** Host list to display */\n public host_list: User[];\n /** User list to display from the Attendees search */\n public user_list: User[];\n /** Whether user list is loading */\n public loading: boolean;\n /** Whether to show the attendees hint */\n public showHint = false;\n /** Attendee Input / Search String */\n public searchString: string;\n /** List of users from an API search */\n public searchResults: Observable;\n /** Subject holding the value of the search */\n public searchSubject = new Subject();\n /** Host field options */\n public hostOptions = [];\n /** Attendees options */\n public options = new BehaviorSubject[]>([]);\n /** Selected Attendees */\n public selectedOptions = new BehaviorSubject[]>([]);\n public selectedUsers = new BehaviorSubject[]>([]);\n public needs_charge_code = false;\n public has_delegate = false;\n public available: boolean = null;\n public notesHandle = null;\n public noteValidationClass = '';\n public selectedCompanies = new BehaviorSubject[]>([]);\n public companyOptions = new BehaviorSubject[]>([]);\n\n /** Data collected on this form */\n public bookingFormGroup = new FormGroup({\n organiser: new FormControl(),\n title: new FormControl('', [ Validators.minLength(1)]), //Validators.pattern(\"[^=`~!@#$%*{};:'\\\",_.<>]*\")\n attendees: new FormControl(),\n code: new FormControl('', [Validators.minLength(4), Validators.pattern(/^[a-zA-Z0-9]*$/)]),\n notes: new FormControl(),\n head_count: new FormControl(1, [Validators.required, Validators.min(1)]),\n user_list: new FormControl(),\n host_list: new FormControl(),\n company: new FormControl(),\n opt_out: new FormControl()\n });\n action: string;\n // Indecates that processing request to check availability of breakdown if special requirement being added by user\n checkingBreakdown: boolean = false;\n\n public get invalid_charge_error(): string {\n if (this.bookingFormGroup.controls.code.errors?.required) {\n return 'Charge Code is required';\n }\n if (this.bookingFormGroup.controls.code.errors?.minlength) {\n return 'Charge Code must be at least four characters';\n }\n if (this.bookingFormGroup.controls.code.errors?.pattern) {\n return 'Charge Code cannot contain spaces or special characters';\n }\n return '';\n }\n\n public get headCountControl(): AbstractControl {\n return this.bookingFormGroup.get('head_count');\n }\n\n constructor(\n private _spaces: SpacesService,\n private _snackBar: MatSnackBar,\n private store: Store,\n vcRef: ViewContainerRef,\n private _users: UsersService) {\n super(vcRef);\n }\n\n public ngOnInit(): void {\n super.ngOnInit();\n this.subscription('currentUser', this.store.select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n })\n );\n\n this._users.initialised.pipe(first((_) => _)).subscribe(() => {\n const user: User = this._users.current;\n const delegates = user.delegates.map((del) => {\n // the kludgy or new User is for when the user service isn't ready.\n const ifUser = this._users.find(del.email);\n return ifUser ? \n new User({ email: ifUser.email, name: ifUser.name, opt_out: del.opt_out }) : \n new User({ email: del.email, name: del.email.split('@')[0].split('_').map((s) => s.charAt(0).toUpperCase() + s.substring(1))\n .join(' ')\n , opt_out: del.opt_out });\n\n // (del) => new User({ email: del.email, name: del.email.split('@')[0].split('_').join(' '), opt_out: del.opt_out })\n });\n if (delegates.length) {\n this.has_delegate = true;\n }\n this.host_list = [user].concat(delegates);\n this.hostOptions = this.host_list.map(h => ({ display: h.name, value: h.email, meta: { user: h } }));\n });\n\n // if we have an active form, refill the information here once.\n this.subscription('reduxData', this.store.select(selectActiveForm)\n .pipe(take(1))\n .subscribe((next: BookingFormData | undefined) => {\n if (next) {\n // Get the Equipment charge code mandatory requirement\n const { filters, settings } = next.selectedRoom?.space;\n const roomBasedEqCode = filters?.equipment_code || settings?.equipment_code;\n const officeBasedEqCode = next.selectedRoom?.building?.required?.equipment_code;\n this.needs_charge_code = roomBasedEqCode !== undefined ? roomBasedEqCode : officeBasedEqCode !== undefined ? officeBasedEqCode: false;\n \n\n if (this.needs_charge_code) {\n this.bookingFormGroup.controls.code.setValidators([Validators.required, Validators.minLength(4), Validators.pattern(/^[a-zA-Z0-9]*$/)]);\n }\n // build the initial options\n const options = [];\n const attendees = next?.attendees || [];\n const organiser = next?.organiser || { display: this.currentUser.name , value: this.currentUser.email, meta: { external: false, user: this.currentUser }};\n const company = next?.company || [];\n\n const opt_out = next?.opt_out || false;\n this.action = next.action || 'new';\n // Load the saved form\n this.bookingFormGroup.setValue({\n organiser,\n title: next.title || '',\n attendees, // options will display current user\n code: next.code || '',\n notes: next.notes || '',\n head_count: next.head_count || '',\n user_list: [],\n host_list: [],\n company,\n opt_out: opt_out\n });\n this.selectedOptions.next(attendees);\n this.options.next(attendees);\n this.selectedCompanies.next(company);\n this.companyOptions.next(company);\n }\n })\n );\n\n // Listen for input changes\n this.searchResults = this.searchSubject.pipe(\n debounceTime(500),\n distinctUntilChanged(),\n switchMap((query) => {\n this.loading = true;\n return query.length >= this.limit\n ? this._users.query({\n q: query,\n cache: 60 * 1000\n })\n : Promise.resolve([]);\n }),\n catchError((_) => of([])),\n map((list: User[]) => {\n this.loading = false;\n return list;\n })\n );\n\n // Process API results\n this.subscription(\n 'search_results',\n this.searchResults.subscribe((list) => {\n this.user_list = list;\n this.user_list.forEach((i: any) => {\n i.match_name = matchToHighlight(i.match_name);\n i.match_email = matchToHighlight(i.match_email);\n return i;\n });\n\n // Build options from returned users\n const options = this.user_list.map(u => {\n return {\n value: u.email,\n display: `${u.name} ${u.email}`,\n groupId: 'one',\n groupHeader: true,\n shortDisplay: `${u.name}`,\n meta: { external: false, user: u },\n };\n });\n // Add the manual option to the beginning of the array\n options.unshift({\n value: this.searchString,\n display: this.searchString,\n groupId: 'one',\n groupHeader: true,\n shortDisplay: this.searchString,\n meta: { external: true, user: null },\n });\n // this.loading = false;\n this.options.next(options);\n })\n );\n\n this.bookingFormGroup.valueChanges.subscribe(val => {\n\n clearTimeout(this.notesHandle);\n if (val?.notes?.length) {\n this.checkingBreakdown = true;\n \n // Check for conflicts if adding a note and default setup and breakdown times.\n this.notesHandle = setTimeout(() => {\n this.validateForm.emit(false);\n const booking = this.booking.clone();\n const setup = {};\n setup[booking.space.email] = booking.setup[booking.space.email] || 900;\n const breakdown = {};\n breakdown[booking.space.email] = booking.breakdown[booking.space.email] || 900;\n\n const mockBooking = new Booking({\n id: booking.id,\n room: booking.space,\n start_epoch: booking.startDateTz.seconds,\n end_epoch: booking.endDateTz.seconds,\n setup,\n breakdown,\n });\n\n checkCollisions(\n this._spaces,\n mockBooking\n ).then((bookable: boolean) => {\n this.checkingBreakdown = false;\n this.available = bookable;\n // this.validateForm.emit(true);\n this.validateForm.emit(this.bookingFormGroup.valid);\n this.noteValidationClass = bookable === false ? 'booked' : 'available';\n // this.loading = false;\n }).catch(() => {\n this.checkingBreakdown = false;\n this.available = false;\n this.validateForm.emit(false);\n this.noteValidationClass = 'booked';\n // this.loading = false;\n\n return;\n });\n }, 200);\n } else {\n this.checkingBreakdown = false;\n this.available = null;\n this.noteValidationClass = '';\n this.validateForm.emit(this.bookingFormGroup.valid);\n }\n\n });\n }\n\n public setOrganiserOptOut(opt_out) {\n this.bookingFormGroup.controls.opt_out.setValue(opt_out);\n }\n\n public updateOrganiser(user) {\n console.log(user);\n }\n\n /** Listen for changes */\n public ngOnChanges(changes: any) {\n if (changes.triggerSubmit && this.formRef) {\n // Trigger the form submit and validation\n this.formRef.onSubmit(undefined);\n }\n }\n\n /**\n * \n * @param key : formcontrol name \n * Function trim value being submitted with only spaces/beginning/end \n */\n public trim(key: string): void {\n this.bookingFormGroup.get(key).setValue(this.bookingFormGroup.get(key).value.trim());\n }\n\n /** Toggle an attendee on/off */\n public toggle(option: SelectOption) {\n const inputValue = option.value\n .split(' ')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n // Check for character limit\n if (\n // this.selectedOptions.value.some((option: SelectOption) => option.value === inputValue) ||\n inputValue.length > 50\n ) {\n this._snackBar.open('Attendee name cannot exceed 50 characters', 'Close', {\n duration: 5000,\n });\n return;\n }\n\n this.selectedOptions\n .pipe(\n take(1),\n withLatestFrom(this.options),\n map(([selectedOptions, options]) => {\n let opts = selectedOptions.slice();\n const found = opts.some((v) => inputValue === v.value);\n if (found) {\n opts = opts.filter((v) => inputValue !== v.value);\n } else {\n const color = inputValue.toLowerCase().includes('mckinsey.')\n ? 'internal'\n : 'external';\n opts.push({\n ...option,\n value: inputValue,\n display: inputValue,\n shortDisplay: inputValue,\n meta: {\n ...option.meta,\n color,\n },\n });\n }\n\n return opts;\n })\n )\n .subscribe((next) => {\n if (!this.bookingFormGroup.controls.head_count.touched) {\n this.bookingFormGroup.controls.head_count.setValue(next.length + 1);\n }\n this.selectedOptions.next(next);\n });\n }\n\n public clearHeadcount() {\n this.headCountControl.setValue(1);\n }\n\n /** Return the data to the listening parent */\n public onSubmitForm() {\n this.bookingFormGroup.markAllAsTouched();\n // a bit of an issue that the form state isn't saved unless valid\n if (this.bookingFormGroup.valid) {\n const form_data = this.bookingFormGroup.value;\n form_data.user_list = this.user_list;\n form_data.host_list = this.host_list;\n form_data.has_delegate = this.has_delegate;\n this.submitForm.emit(form_data);\n }\n }\n\n /** Take the input and feed it back to the parent to add to attendees array */\n public updateAttendeeOptionsFromUserInput(v: string) {\n const l = v.length;\n const options = this.selectedOptions.value.slice();\n if (!l) {\n this.options.next([]);\n return;\n }\n if (l > 2) {\n // Triggers the API call to search for the user input\n this.searchSubject.next(v);\n }\n\n options.unshift({\n value: v,\n display: v,\n groupId: 'one',\n groupHeader: true,\n shortDisplay: v,\n meta: { external: true },\n });\n this.searchString = v;\n this.options.next(options);\n }\n\n public toggleAttendeesHint() {\n this.showHint = !this.showHint;\n }\n\n public updateCompanyOptionsFromUserInput(v: string) {\n if (!v.length) {\n this.companyOptions.next([]);\n return;\n }\n this.companyOptions.next([{\n value: v,\n display: v,\n groupId: 'two',\n groupHeader: true,\n shortDisplay: v,\n }]);\n }\n\n public toggleCompany(option: SelectOption) {\n this.selectedCompanies.pipe(\n take(1),\n withLatestFrom(this.companyOptions),\n map(([selectedCompanies, options]) => {\n let opts = selectedCompanies.slice();\n const found = opts.some(v => option.value === v.value);\n if (found) {\n opts = opts.filter(v => option.value !== v.value);\n } else {\n opts.push(option);\n }\n\n return opts;\n })\n ).subscribe(next => {\n this.selectedCompanies.next(next);\n });\n }\n}\n","\n
\n
\n
\n \n Meeting Title*\n \n \n \n \n
\n \n {{ ( bookingFormGroup?.get('title').errors && bookingFormGroup?.get('title').hasError('pattern')) ? 'Some special characters (^=`~!@#$%*{};:\\'_\\\",.\\<>) are not allowed' : 'Meeting Title is required'}}\n \n
\n
\n
\n
\n \n \n
\n
\n
\n Optout email notification \n
\n\n
\n \n \n \n Why do we need this?\n
\n
\n Attendee emails are used for visitor management purposes.\n Converge won't send any emails to attendees.\n
\n \n
\n\n
\n
\n \n \n
\n
\n \n Charge Code{{ needs_charge_code ? '*' : '' }}\n \n \n \n \n
\n \n {{ invalid_charge_error }}\n \n
\n
\n
\n
\n \n Headcount estimate*\n \n \n \n \n
\n \n Headcount is required\n \n
\n
\n
\n
\n\n
\n
\n \n Additional requirements (e.g room setup, equipment...)\n \n \n \n \n \n \n

Checking breakdown availability for selected date/time...

\n

\n \n A set up and breakdown time of 15 mins was added to either side\n of your booking to cater for these additional requirements.\n

\n

\n \n A set up and break down time of 15mins was added to either side of your booking to cater for these additional requirements. This has resulted in a conflict with another booking. Please adjust your booking accordingly.\n

\n
\n
\n
\n
\n
\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n OnChanges,\n Output,\n ViewContainerRef,\n ViewChild\n} from '@angular/core';\nimport {\n FormControl,\n FormGroup,\n FormGroupDirective,\n Validators\n} from '@angular/forms';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\nimport { closestToTimeSlot, closestToTimeSlotTz, resetSecondsOnTimestamp } from '@mckinsey-converge/base';\n\nimport {\n distinctUntilChanged,\n map,\n skip,\n take,\n withLatestFrom\n} from 'rxjs/operators';\nimport {\n select,\n Store\n} from '@ngrx/store';\nimport {\n buildingStateSelector,\n selectBuildingOptionsGroupedByCity\n} from '@mckinsey-converge/buildings';\nimport {\n Building,\n BuildingCity,\n flattenDisplayOffices,\n toggleSelectedByGroup,\n storeBookingFormData,\n BookingFormData,\n bookingTypeOptions,\n DEFAULT_BOOKING_DURATION,\n defaultRoomSizeOption,\n internalBookingTypeOption,\n roomSizeOptions,\n selectActiveForm,\n ApplicationService,\n roomSizeOptionsKiosk,\n\t\tRecurrencePeriod,\n generateBookingForm,\n SeriesAction,\n setRecurrenceStartsTime\n} from '@mckinsey-converge/data-common';\nimport { BehaviorSubject } from 'rxjs';\nimport {\n BaseTemplateComponent,\n SelectOption\n} from '@mckinsey-converge/ui';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { DateTime } from 'luxon';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Booking } from '../../../../../../libs/data-common/src';\nimport * as cloneDeep from 'lodash/cloneDeep';\n@Component({\n selector: 'app-room-booking-form',\n templateUrl: './room-booking-form.component.html',\n styleUrls: ['./room-booking-form.component.scss']\n})\nexport class RoomBookingFormComponent extends BaseTemplateComponent implements OnInit, OnChanges {\n @ViewChild('formRef')\n formRef: FormGroupDirective;\n\n @Output()\n public submitForm = new EventEmitter();\n\n @Input()\n public showCancel = false;\n\n @Input()\n public triggerSubmit: number;\n\n /**\n * Used only if showCancel is true.\n */\n @Output()\n public cancelSubmit = new EventEmitter();\n\n // fromDate is the selected date\n public fromDate: number = closestToTimeSlot(DateTime.now(), 15).valueOf(); // R--- depreciate\n /** DateTZ object of the date and time that the date and time picker will begin it's options from */\n public fromDateTz: DateTZ = closestToTimeSlotTz(new DateTZ({ date: Date.now(), is_local_tz: false }), 15);\n public bookingTypeOptions = bookingTypeOptions;\n public roomSizeOptions = roomSizeOptions;\n public localTimezone = DateNow(new Date()).building_tz;\n public localStart = \"\";\n public localEnd = \"\"\n\n public formGroup: FormGroup = new FormGroup({\n id: new FormControl('', []), // used in case of recurring series edit\n location: new FormControl([], [Validators.required]),\n date: new FormControl(this.fromDate, [Validators.required]),\n dateTz: new FormControl(this.fromDateTz, [Validators.required]), // starts out as the next closest available time interval\n duration: new FormControl(DEFAULT_BOOKING_DURATION, [Validators.required]),\n bookingType: new FormControl(internalBookingTypeOption),\n roomSize: new FormControl(defaultRoomSizeOption),\n selectedRoom: new FormControl({}),\n timezone: new FormControl(\"\"),\n offset: new FormControl(\"\"),\n\n\t\trecurrence_period: new FormControl(RecurrencePeriod.WEEKLY),\n recurrence_interval: new FormControl( 1),\n recurrence_endTz: new FormControl( new DateTZ({ date: 1 }).addValue({days: 1})),\n recurrence_count: new FormControl( 0),\n is_recurrent: new FormControl(null),\n recurrence_starts: new FormControl( []),\n recurrence_exceptions: new FormControl([]),\n recurrence_pattern: new FormControl(RecurrencePeriod.WEEKLY), //Helper value to store the last selected pattern (daily, weekly, monthly),\n recurrence_days: new FormControl( []),\n\n ignore: new FormControl('', []), // used in case of recurring series edit\n // TODO, there's a few missing from interface BookingFormData, libs/data-common/src/lib/booking/booking.form.data.ts\n });\n\n\n public options = new BehaviorSubject[]>([]);\n\n public selectedOptions = new BehaviorSubject[]>([]);\n\n constructor(private store: Store,\n // private _service: ApplicationService,\n vcRef: ViewContainerRef, private _snackBar: MatSnackBar) {\n super(vcRef);\n // if(this._service?.kioskFormFilter) {\n // this.formGroup.setValue({\n // roomSize: roomSizeOptions[3]\n // })\n // }\n }\n\n public ngOnInit(): void {\n\n\n super.ngOnInit();\n // R--- Complicated, need the TZ aware inputs and to not init those inputs until the building timezone is available.\n // R--- See if there's any way to make the timezone retrieval less fragile.\n\n // if we have an active form, refill the information here once.\n // Doesn't run on initial steps, only if you go back to the home page\n this.subscription('reduxData', this.store.select(selectActiveForm)\n .pipe(take(1))\n .subscribe((next: BookingFormData | undefined) => {\n if (next) {\n // set the fromDate correctly\n this.fromDateTz = next.is_recurrent ? next.dateTz : closestToTimeSlotTz(DateNow(), 15); // R--- shouldn't this actually be the current date start of day to make all the options available?\n\n const form = cloneDeep(next);\n this.formGroup.patchValue({\n ...form,\n }, { emitEvent: true });\n\n // this.formGroup.markAllAsTouched();\n // this.formGroup.updateValueAndValidity();\n\n }\n })\n );\n\n // R--- I only see this fire when the modal opens or going to the home page\n this.subscription('formChanges', this.formGroup.valueChanges\n .pipe(\n skip(1), // initial form changes\n distinctUntilChanged())\n .subscribe((next) => {\n const timezone = next.timezone || this.localTimezone\n /**\n * When the selected date changes update the time picker's start time\n * to the nearest available slot of the current day\n */\n this.fromDateTz = next.is_recurrent ? next.dateTz : closestToTimeSlotTz(DateNow(), 15);\n\n /**\n * When the new selected date arrives, update the coachmark displayed below the date time picker\n */\n this.updateCoachmarkTimes(timezone);\n\n })\n );\n\n this.subscription('buildings', this.store.pipe(\n select(buildingStateSelector),\n select(selectBuildingOptionsGroupedByCity),\n map((grouped: Map) => {\n return flattenDisplayOffices(grouped);\n }),\n distinctUntilChanged()\n )\n .subscribe(next => {\n this.options.next(next);\n }));\n }\n\n public ngOnChanges(changes: any) {\n if (changes.triggerSubmit && this.formRef) {\n // Trigger the form submit and validation\n this.formRef.onSubmit(undefined);\n }\n }\n\n public onSubmitForm() {\n if(this.formGroup.controls?.is_recurrent?.value){\n setRecurrenceStartsTime(this.formGroup)\n }\n // Check for past date time\n const formGroupData = this.formGroup.value;\n const is_past = this._checkDateInPast();\n if (is_past) {\n this.openSnackBar('Start Time updated to after current time, please click search again.', 'Close');\n return;\n } else {\n this.formGroup.setValue({\n ...formGroupData,\n date: resetSecondsOnTimestamp(formGroupData.dateTz.ms),\n dateTz: formGroupData.dateTz.setValue({ millisecond: 0, second: 0 })\n });\n }\n this.formGroup.markAllAsTouched();\n if (this.formGroup.valid) {\n this.submitForm.emit(this.formGroup.value);\n }\n }\n\n public openSnackBar(message: string, action: string) {\n this._snackBar.open(message, action, {\n duration: 5000,\n panelClass: ['yellow-snackbar']\n });\n }\n\n // Fires when the location selector value is changed\n public toggle(option: SelectOption) {\n // update the selected value\n this.selectedOptions.pipe(\n take(1),\n withLatestFrom(this.options),\n map(([selectedOptions, options]) => {\n return toggleSelectedByGroup(options, selectedOptions, option);\n })\n ).subscribe(next => {\n // deselecting the location option sets the timezone to local so convert.\n const formGroupDate = this.formGroup.value;\n if (!next.length) {\n this.formGroup.setValue({\n ...this.formGroup.value,\n timezone: this.localTimezone,\n date: formGroupDate.dateTz.ms,\n dateTz: formGroupDate.dateTz.toZone(this.localTimezone)\n });\n } else {\n const buildingTimezone = next[0]?.meta?.building?.timezone || next[0]?.meta?.city?.timezone;\n this.formGroup.setValue({\n ...this.formGroup.value,\n timezone: buildingTimezone,\n date: formGroupDate.dateTz.ms,\n dateTz: formGroupDate.dateTz.toZone(buildingTimezone)\n });\n }\n this._checkDateInPast();\n // Must fire last or location picker will be buggy.\n this.selectedOptions.next(next);\n });\n }\n\n private _checkDateInPast() {\n // Check for past date time\n const formGroupData = this.formGroup.value;\n const date = new DateTZ({ date: this.formGroup.value.dateTz.ms, building_tz: formGroupData.timezone, is_local_tz:false }).addValue({ seconds: 30 })\n const now = DateNow(new Date())\n if (now.isAfterDate(date)) {\n // Reset the start time if in the past\n const closestTz = closestToTimeSlotTz(new DateTZ({ date: Date.now(), is_local_tz: false, building_tz: formGroupData.timezone }).addValue({ minutes: 1 }), 15)\n const prevClosestTz = closestTz.subtractValue({minutes: 15})\n const prevDateTz = prevClosestTz.addValue({ seconds: 30 });\n // R-- why do I do this on submit? move to a another method.\n if(now.isAfterDate(prevDateTz)){\n this.fromDateTz = closestTz;\n }else{\n this.fromDateTz = prevClosestTz;\n }\n\n this.formGroup.setValue({\n ...formGroupData,\n date: resetSecondsOnTimestamp(this.fromDateTz.ms),\n dateTz: this.fromDateTz.setValue({ millisecond: 0, second: 0 })\n });\n return true;\n }\n return false;\n }\n\n private updateCoachmarkTimes(timezone: string) {\n // Resolve the problem that locally I might have the same TZ offset but the names don't match.\n const localTzOffset = DateTime.now().setZone(this.localTimezone).offset;\n const buildingTzOffset = DateTime.now().setZone(timezone).offset;\n\n this.fromDateTz = new DateTZ({ date: this.fromDateTz.ms, is_local_tz: false, building_tz: timezone });\n\n if (localTzOffset !== buildingTzOffset) {\n const startDate = this.formGroup.value.dateTz.clone();\n this.localStart = startDate.formatLocalDate(\"h:mma\");\n this.localEnd = startDate.addValue({ minutes: this.formGroup.value.duration }).formatLocalDate(\"h:mma\");\n } else {\n // No location is selected so coachmark is hidden\n this.localStart = \"\";\n this.localEnd = \"\";\n }\n }\n}\n","\n
\n \n\n\n
\n \n\n \n \n \n \n
\n Please be aware that this booking starts at {{localStart}} and ends at {{localEnd}} in your local timezone.\n
\n
\n\n
\n
\n Recurring booking\n
\n \n \n\n
\n\n \n\n \n \n \n \n \n
","import { Component, ViewEncapsulation, Inject } from '@angular/core';\nimport { BookingFormData, storeBookingFormData, SeriesAction} from '@mckinsey-converge/data-common';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { Store } from '@ngrx/store';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n// import { Router, ActivatedRoute } from '@angular/router';\n\n@Component({\n selector: 'app-room-booking-modal',\n template: `\n
\n \n \n \n \n \n \n \n \n
\n `,\n styleUrls: ['./room-booking-modal.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class RoomBookingModalComponent extends BaseDirective {\n public trigger = Date();\n\n constructor(\n private store: Store,\n private dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private _data: any ) {\n super();\n }\n\n public triggerSubmit() {\n this.trigger = Date();\n }\n\n public submitForm(next: BookingFormData) {\n /// submit\n\n const ignore = this._data?.action === SeriesAction.EDIT ? next.id : null;\n const bookable = this._data?.action === SeriesAction.EDIT || null;\n\n this.store.dispatch(storeBookingFormData({\n payload: {\n ...next,\n ignore, // ignore id in case of recurring edit series\n bookable, // true in case of recurring edit series\n action: this._data?.action || '' // 'edit' in case of recurring edit series\n }\n }));\n this.close('DoNotClearActiveForm'); // do not clear active form if for submit as form need forther in result module\n this._data && this._data.navigateTo && this._data.navigateTo(); // navigate to result in case of staff recurring edit\n\n }\n\n public close(flag: string = '') {\n this.dialogRef.close(flag);\n }\n}\n","import {\n Component,\n OnInit,\n OnDestroy\n} from '@angular/core';\nimport {\n select,\n Store\n} from '@ngrx/store';\nimport { BuildingStoreState } from '@mckinsey-converge/buildings';\nimport {\n AlertMode,\n SelectOption\n} from '@mckinsey-converge/ui';\nimport { loadOrganisations } from '@mckinsey-converge/organisation';\nimport { BaseDirective,\n dateBuildingFormatString,\n} from '@mckinsey-converge/base';\nimport {\n Booking,\n User,\n Building,\n BuildingCity,\n IEngineResponse,\n flattenDisplayOffices,\n selectCancelledBookingsResultsFromState,\n selectHomepageBookingsResultsFromState,\n selectPastBookingsResultsFromState,\n BookingStoreState,\n BookingFormData,\n clearBookingFormData,\n storeBookingFormData,\n BookingsService\n} from '@mckinsey-converge/data-common';\nimport { TopBarHeaderMode } from 'src/app/components/topbar-header/topbar-header.component';\nimport { Urls } from 'src/app/utilities/urls';\nimport {\n ActivatedRoute,\n Router\n} from '@angular/router';\nimport { MatDialog } from '@angular/material/dialog';\nimport { BookingDetailsModalComponent } from '../booking-details-modal/booking-details-modal.component';\nimport { loadRoomsForResults } from '@mckinsey-converge/rooms';\nimport { loadBookingsWithQuery, MyBookingsStoreState } from '@mckinsey-converge/bookings';\nimport { UserStoreState } from '@mckinsey-converge/user';\nimport {\n BehaviorSubject,\n} from 'rxjs';\nimport {\n distinctUntilChanged,\n elementAt,\n map,\n take,\n} from 'rxjs/operators';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport {\n mapResultsToViewModels,\n BookingResultsViewModel\n} from 'src/app/booking/manage-bookings/manage-bookings.viewmodel';\nimport {\n buildingStateSelector,\n selectBuildingOptionsGroupedByCity\n} from '@mckinsey-converge/buildings';\nimport { DateNow } from '@mckinsey-converge/date-tz';\n\nexport type RoomBookingStoreState = BookingStoreState & BuildingStoreState & MyBookingsStoreState & UserStoreState;\n\n@Component({\n selector: 'app-room-booking',\n template: `\n
\n
\n \n \n
\n
\n
\n
\n

Meeting Room Booking

\n
\n \"Booking\n
\n
\n
\n
\n
\n \n \n \n \n
\n
\n
\n

Your Bookings

\n
\n
\n \n
You have no upcoming bookings
\n
\n
\n \n \n
\n
\n \n \n \n \n
\n
\n \n Manage\n
\n
\n
\n
\n
\n `,\n styleUrls: ['./room-booking.component.scss']\n})\nexport class RoomBookingComponent extends BaseDirective implements OnInit, OnDestroy {\n public TopBarHeaderMode = TopBarHeaderMode;\n public AlertMode = AlertMode;\n\n public width = 16;\n\n // public showBanner = true;\n public showBookings = false;\n public showManageButtonA = false;\n public showManageButtonB = false;\n public showManageButtonC = false;\n public dateString: string;\n\n public homepageBookingResults = new BehaviorSubject>(LoadingModel.empty());\n public pastBookingResults = new BehaviorSubject>(LoadingModel.empty());\n public upcomingBookings: BookingResultsViewModel[];\n public buildings = new BehaviorSubject[]>([]);\n public reloading = false;\n\n /** Current User */\n public currentUser: User;\n master_booking: BookingResultsViewModel;\n allBookings: any[];\n\n constructor(private store: Store,\n private router: Router,\n private route: ActivatedRoute,\n private _bookings: BookingsService,\n private dialog: MatDialog) {\n super();\n this.dateString = dateBuildingFormatString(DateNow(new Date()));\n }\n\n public ngOnDestroy() {\n if (typeof window === 'object') {\n window.onbeforeunload = undefined;\n }\n\t\t\t\t// clear interval\n\t\t\t\tthis.clearInterval('refreshBookings');\n }\n\n public ngOnInit(): void {\n // only run on window onload\n if (typeof window === 'object') {\n window.onbeforeunload = (event) => {\n const e = event || window.event;\n this.store.dispatch(clearBookingFormData())\n return e;\n };\n }\n\n this.store.dispatch(loadOrganisations.request());\n\n this.subscription('buildings', this.store.pipe(\n select(buildingStateSelector),\n select(selectBuildingOptionsGroupedByCity),\n map((grouped: Map) => {\n return flattenDisplayOffices(grouped);\n }),\n distinctUntilChanged()\n ).subscribe(next => {\n this.buildings.next(next);\n // console.log('on buildings ')\n // this.refresh('homepage');\n }));\n\n this.subscription('currentUser', this.store.select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User) => {\n // Once we know we have the user loaded\n this.currentUser = new User(user);\n this.store.dispatch(loadBookingsWithQuery({ 'email': this.currentUser.email, 'from': DateNow(new Date()).ms, 'target': 'homepage' }));\n // start the timer at the top of the minute;\n // const offset = DateNow(new Date()).startOfValue('minute').addValue({ minutes: 1 }).ms - DateNow(new Date()).ms;\n // fetch it on one minute interval now that there is room data.\n // setTimeout(() => {\n // console.log('on setTimeout ')\n // this.refresh('homepage')\n this.interval('refreshBookings', () => {\n\t\t\t\t\t\t\t\t\t\t\tthis.refresh('homepage')\n\t\t\t\t\t\t\t\t\t\t}, 60 * 1000);\n // }, offset + 5000)\n\n })\n );\n\n this.reloading = true;\n this.subscription('homepageResults', this.store.pipe(\n select(selectHomepageBookingsResultsFromState)\n ).subscribe(next => {\n // this.reloading = true;\n this.homepageBookingResults.next(next);\n if (!next.isEmpty() && next.success && Array.isArray(next.success.results) && next.success.total) {\n this.reloading = false;\n this.showManageButtonA = true;\n this.upcomingBookings = mapResultsToViewModels(next.success.results).filter(b => !(b.booking.is_recurrent && b.booking.recurrence_type === 'master'));\n this.allBookings = next.success.results;\n\n if (this.upcomingBookings.length) {\n this.showBookings = true;\n }\n } else {\n this.reloading = false;\n this.showManageButtonA = false;\n this.upcomingBookings = [];\n this.showBookings = false;\n }\n }));\n\n this.subscription('pastResults', this.store.pipe(\n select(selectPastBookingsResultsFromState)\n ).subscribe(next => {\n if (!next.isEmpty() && next.optionalSuccess?.total) {\n this.showManageButtonB = true;\n }\n }));\n\n this.subscription('cancelledResults', this.store.pipe(\n select(selectCancelledBookingsResultsFromState)\n ).subscribe(next => {\n if (!next.isEmpty() && next.optionalSuccess?.total) {\n this.showManageButtonC = true;\n }\n }));\n }\n\n public showResults() {\n // Don't show the loading state while we're reloading with Building details.\n return !this.reloading; //|| this.homepageBookingResults.value.hasLoaded();\n }\n\n public getBuilding(booking: Booking) {\n if (this.buildings && booking.building_zone) {\n return this.buildings.value.find(b => booking.building_zone === b.value)?.meta.building;\n }\n return '';\n }\n\n // public hideBanner() {\n // this.showBanner = false;\n // }\n\n public learnMore() {\n window.open(Urls.LearnMore);\n }\n\n public routeToResults(next: BookingFormData) {\n this.store.dispatch(storeBookingFormData({\n payload: {\n ...next\n }\n }));\n this.store.dispatch(loadRoomsForResults.clear());\n this.router.navigate(['results'], { relativeTo: this.route });\n }\n\n public routeToManageBookings() {\n this.router.navigate(['manage'], { relativeTo: this.route });\n }\n\n public refresh(target: string) {\n if (!this.currentUser?.email) {\n return;\n }\n\n // tslint:disable-next-line: max-line-length\n this.store.dispatch(loadBookingsWithQuery({ 'email': this.currentUser.email, 'from': DateNow(new Date()).ms, target }));\n }\n\n\n\t\t/**\n\t\t * Displays detailed information about a booking in a modal dialog.\n\t\t * If the booking is part of a recurring series, it retrieves the master booking\n\t\t * details and displays them along with the selected booking. The modal allows\n\t\t * users to view and interact with the booking details. After the modal is closed,\n\t\t * it checks for special flags to determine if the active form and result data should be cleared.\n\t\t *\n\t\t * @param {BookingResultsViewModel} viewModel - The view model containing booking information to display.\n\t\t */\n public async viewBooking(viewModel: BookingResultsViewModel) {\n\n\t\t\t// Handle logic for recurring bookings to fetch the master booking details\n \t// and set the master_booking property for displaying in the modal\n\t\t\tif(viewModel.booking.is_recurrent) {\n\t\t\t\t\tlet booking = this.allBookings.find(bkn => bkn.id === viewModel.booking.recurrence_master_id && bkn.recurrence_type === 'master1') ;\n\t\t\t\t\tif (!booking) {\n\t\t\t\t\t\t\tbooking = await this._bookings.show(viewModel.booking.recurrence_master_id);\n\t\t\t\t\t}\n\t\t\t\t\tthis.master_booking = mapResultsToViewModels([booking])[0];\n\t\t\t}\n\n\t\t\t// Open a modal dialog to display the booking details along with master booking (if applicable)\n\t\t\tconst dialogRefX = this.dialog.open(BookingDetailsModalComponent, {\n\t\t\t\t\tpanelClass: 'mck-modal-wide-manage-booking',\n\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tbooking: viewModel.booking,\t// Selected booking information\n\t\t\t\t\t\t\tbuilding: this.getBuilding(viewModel.booking),\t// Building information for the booking\n\t\t\t\t\t\t\tmaster_booking: this.master_booking?.booking || null,\t// Master booking details (if available)\n\t\t\t\t\t\t\trefresh: () => {\n\t\t\t\t\t\t\t\t\tthis.refresh('homepage');\t// Function to refresh the homepage after modal closure\n\t\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tautoFocus: false,\n\t\t\t\t\tbackdropClass: 'mck-modal-backdrop',\n\t\t\t});\n\n\t\t\tdialogRefX.afterClosed().subscribe((flag) => {\n\t\t\t\t// Clear form and result data if the flag indicates it's necessary\n\t\t\t\t\tflag !== 'DoNotClearActiveForm' && this.clearFormAndResultData();\n\t\t\t});\n }\n\n\t\t/**\n\t\t * Clears active form and result data from the store.\n\t\t *\n\t\t * This function dispatches actions to clear the active form data and the loaded\n\t\t * rooms data from the store. It is typically used after a modal interaction or\n\t\t * a specific user action to reset the form state and loaded room information.\n\t\t */\n public clearFormAndResultData() {\n this.store.dispatch(clearBookingFormData());\n this.store.dispatch(loadRoomsForResults.clear());\n }\n\n\n}\n","import { Component, OnInit } from '@angular/core';\nimport {\n TopBarHeaderMode,\n RoutePayload,\n} from 'src/app/components/topbar-header/topbar-header.component';\nimport { select, Store } from '@ngrx/store';\nimport {\n Booking,\n User,\n Space,\n BookingFormData,\n selectActiveForm,\n selectFilteredByIdResults,\n BookingStoreState,\n storeBookingFormData,\n DateDurationData,\n OrganisationService,\n SpaceConflictAlertModalData,\n SpaceStatus,\n filterSpacesByAppliedFilters,\n FilteredSpaces,\n Building,\n SpaceFilterReason,\n getLastDateFromList,\n RoomResultsViewModel,\n stringToMinutes,\n} from '@mckinsey-converge/data-common';\nimport {\n BaseDirective,\n dateBuildingFormatString,\n DialogEvent,\n shorterLocalDateFormatString,\n startEndTimeWithZoneFormatString,\n} from '@mckinsey-converge/base';\nimport { BehaviorSubject, fromEvent } from 'rxjs';\nimport { distinctUntilChanged, take, throttleTime, tap, filter } from 'rxjs/operators';\nimport { BuildingStoreState } from '@mckinsey-converge/buildings';\nimport { RoomStoreState, loadByIdResults } from '@mckinsey-converge/rooms';\nimport { Router, NavigationStart, Event as NavigationEvent } from '@angular/router';\nimport { UserStoreState } from '@mckinsey-converge/user';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { MatDialog } from '@angular/material/dialog';\nimport {\n ConflictAlertModalComponent,\n ConflictsModalComponent,\n ConflictsModalComponentData,\n} from '@mckinsey-converge/ui';\n\nexport type RoomResultsState = BookingStoreState &\n RoomStoreState &\n BuildingStoreState &\n UserStoreState;\n\nconst EMPTY_ARRAY = [];\n\n@Component({\n selector: 'app-room-details',\n templateUrl: './room-details.component.html',\n styleUrls: ['./room-details.component.scss'],\n})\nexport class RoomDetailsComponent extends BaseDirective implements OnInit {\n public TopBarHeaderMode = TopBarHeaderMode;\n public booking: Booking;\n // @TODO get this from current settings.\n public backRoute: RoutePayload = {\n route: ['/home', 'results'],\n queryParams: { display: 'list' },\n };\n\n public data = new BehaviorSubject(undefined);\n public byIdResults = new BehaviorSubject(undefined);\n public open: boolean = true;\n // Set to a config once we know where the files are hosted.\n public rootFolderURL = 'assets/img/rooms/';\n // Set in the room availablity callback\n public mobile: boolean = false;\n public expandedLocation: boolean = false;\n public expandedAvailability: boolean = false;\n // Track event date changes in the UI in this param\n public alternativeWeekStartDateTz: DateTZ = new DateTZ();\n /** Current User */\n public currentUser: User;\n /** Display warning banner by default */\n public showInfoBanner: boolean = true;\n /** Space class created from subscribed active form room data */\n public room: Space;\n /** Requested booking start time from subscribed active form data */\n public requestedDateTz: DateTZ;\n /** Requested booking end time from subscribed active form data */\n public requestedEndDateTz: DateTZ;\n\n /** Track alert dialog should display's only once for not bookable or unavailable */\n private isAlertDisplayed: boolean = false;\n /** Update availability status of current rooom */\n public availabilityStatus: string;\n /** Space validity per rule */\n public isSpaceValidAsPerRule: FilteredSpaces;\n\n public orgBuildings: Building[] = [];\n /** Subtype of a room or space. */\n public roomSubtype: string = '';\n\n /* recurrence booking - occurence availability */\n public occurenceAvailability: string = '';\n // set property if user room selection from next business day section on result page\n public nextBusinessDay: boolean = false;\n\n constructor(\n private store: Store,\n private router: Router,\n private _org: OrganisationService,\n public dialog: MatDialog\n ) {\n super();\n /**\n * Router extras expecting from\n * On navigation from result or home page after QR code scan\n */\n if ( this.router.getCurrentNavigation() !== null && this.router.getCurrentNavigation().extras?.state?.payload ) {\n // set property if user room selection from next business day section on result page\n this.nextBusinessDay = this.router.getCurrentNavigation().extras.state.payload?.nextBusinessDay\n this.store.dispatch(storeBookingFormData({\n payload: this.router.getCurrentNavigation().extras.state.payload,\n })\n );\n }\n }\n\n public ngOnInit(): void {\n this.availabilityStatus = 'unavailable';\n this.orgBuildings = this._org.buildings;\n\n this.subscription(\n 'currentUser',\n this.store\n .select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n })\n );\n\n this.subscription(\n 'activeForm',\n this.store\n .pipe(select(selectActiveForm), distinctUntilChanged())\n .subscribe((next: BookingFormData | undefined) => {\n if (next) {\n // set property if user room selection from next business day section on result page\n this.nextBusinessDay = next?.nextBusinessDay || false;\n\n this.data.next(next);\n // R--- selectedRoom could sure use some clarity, why is everything but the kitchen sink in there?\n if (!this.data.value?.selectedRoom || !this.data.value?.dateTz.ms) {\n return;\n }\n // Create a full fledged Space object since the selectedRoom.space is just JSON\n this.room = new Space(this.data.value?.selectedRoom?.space);\n\n // Check room validtion of selected room to maintain status on detail page\n this.checkAvailabiltyAsPerRule();\n this.setAlternativeWeekStartDate(this.data.value?.dateTz);\n\n // Query for the entire day for this room\n this.fetchRooms(false);\n this.setRoomSubType();\n\n this.requestedDateTz = this.data.value?.dateTz;\n if (next.is_recurrent) {\n const { is_local_tz, building_tz} = this?.data?.value?.dateTz;\n const endDateTz = getLastDateFromList( this?.data?.value?.recurrence_starts );\n const endDate = new DateTZ({ date: endDateTz.date.valueOf(), is_local_tz, building_tz }) \n // add one day if user room selection from next business day section on result page\n this.requestedEndDateTz = this.nextBusinessDay ? endDate.addValue({ minutes: this.data?.value.offset }) : endDate;\n\n this.occurenceAvailability = `${this?.room?.availableOccurrences} out of ${this?.room?.totalOccurrences}`;\n }\n }\n })\n );\n\n this.subscription(\n 'byId',\n this.store.pipe(select(selectFilteredByIdResults)).subscribe((next) => {\n this.byIdResults.next(\n next.success?.spaces?.length\n ? next.success.spaces[0].settings.bookings\n : EMPTY_ARRAY\n );\n })\n );\n\n const breakpoint = 450;\n if (window) {\n this.mobile = window.innerWidth < breakpoint;\n }\n\n fromEvent(window, 'resize')\n .pipe(throttleTime(500))\n .pipe(\n tap({\n next: (val) => {\n const target = val.target as Window;\n this.mobile = target.innerWidth < breakpoint;\n },\n })\n )\n .subscribe();\n }\n\n public setRoomSubType() {\n //test\n const room_type = `${this?.room.internal_or_external}_room_types`;\n const temp: string = Array.isArray(this?.room?.room_type)\n ? this?.room?.room_type[0]\n : this?.room?.room_type;\n const type = this?._org?.getOrganizationFiltersByRoomType(room_type)[temp];\n this.roomSubtype = type !== undefined ? `( ${type} Room )` : '';\n }\n\n public isConflictWithOccurences() {\n const conflicts = this?.room?.totalOccurrences - this?.room?.availableOccurrences;\n return { is_conflict: !!conflicts, total_Conflicts: conflicts };\n }\n\n /**\n\t\t * Opens a modal to display recurrence conflicts for a given room.\n\t\t *\n\t\t * @param {Space} room - The room for which recurrence conflicts are being displayed.\n\t\t *\n\t\t * This function opens a modal dialog to show recurrence exceptions (conflicts)\n\t\t * for the specified room.\n\t\t *\n\t\t * TO DO: SAME FUNCTION BEING USED IN apps/staff/src/app/booking/room-details/room-details.component.ts\n\t\t */\n public openRecurrenceConflictsModal(room: Space) {\n let { recurrence_exceptions } = this.data.value;\n\n const recurr_ref = this.dialog.open(\n ConflictsModalComponent,\n {\n maxWidth: '95vw',\n width: '32em',\n data: {\n room_name: room.simple_name,\n conflicts: recurrence_exceptions,\n timezone: room.building.timezone,\n },\n }\n );\n this.subscription(\n 'conflicts_modal_events',\n recurr_ref.componentInstance.event.subscribe((event: DialogEvent) => {\n recurr_ref.close();\n })\n );\n recurr_ref.afterClosed().subscribe(() => this.unsub('conflicts_modal_events'));\n }\n\n\t\t/**\n\t\t * Retrieves the end date string for the booking, considering recurrence if applicable.\n\t\t * If the booking is recurrent.\n\t\t *\n\t\t * @returns {string} The formatted end date string in a shorter local date format.\n\t\t */\n\t\t public get endDateString(): string {\n\t\t\t// if this.requestedEndDateTz is not in use anywhere here in this file than remove that property and use const here\n\t\t\tif(!this.requestedEndDateTz) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\treturn this.requestedEndDateTz.formatDate('ccc d MMM yyyy'); // shorterLocalDateFormatString(this.requestedEndDateTz);\n\t\t}\n\n /**\n * Functino to check if room is available as per room/user rules\n */\n public checkAvailabiltyAsPerRule() {\n this.orgBuildings =\n !this.orgBuildings.length && this.data.value?.buildings\n ? this.data.value?.buildings\n : this.orgBuildings;\n this.isSpaceValidAsPerRule = filterSpacesByAppliedFilters(\n [],\n [this.room],\n this.data.value,\n this.orgBuildings,\n this.currentUser\n );\n }\n\n /**\n * Function popup advise alert dialog if scanned (QR code) room details found conflicts with other booking/s\n * @param room\n */\n alertIfItHasConflict(isBookable, isAvailable) {\n this.isAlertDisplayed = true;\n const data = {\n headerText: !isBookable\n ? SpaceConflictAlertModalData.NotBookableHeaderText\n : !isAvailable\n ? SpaceConflictAlertModalData.NotAvailableHeaderText\n : '',\n message:\n this.isSpaceValidAsPerRule.specificReason === SpaceFilterReason.OfficeRules\n ? SpaceConflictAlertModalData.NotBookableDueToOfficeRule\n : !isBookable\n ? SpaceConflictAlertModalData.NotBookableMessage\n : !isAvailable\n ? SpaceConflictAlertModalData.NotAvailableMessage\n : '',\n buttonLabel: !isBookable\n ? SpaceConflictAlertModalData.NotBookableButtonLabel\n : !isAvailable\n ? SpaceConflictAlertModalData.NotAvailableButtonLabel\n : '',\n callback: !isBookable\n ? this.goToBackRoute.bind(this)\n : !isAvailable\n ? this.expandAvailability.bind(this, true)\n : null,\n shouldClose: isBookable,\n };\n const dialog = this.dialog.open(ConflictAlertModalComponent, {\n data: data,\n panelClass: 'mck-alert',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n disableClose: !isBookable,\n });\n }\n\n public warnIfItHasConflict({ room: room, hasConflict: hasConflict }) {\n if (\n (!room.bookable || !this.isSpaceValidAsPerRule.spaces.length) &&\n !this.isAlertDisplayed\n ) {\n // room is not bookable(not available to book) and no warning dialog displayed yet\n this.alertIfItHasConflict(false, true);\n this.updateAvailabilityStatus(SpaceStatus.Unavailable);\n } else if (!room.available && hasConflict && !this.isAlertDisplayed) {\n //room is not available AT THIS TIME to book (booked) and has conflict with other booking and no warning dialog displayed yet\n this.alertIfItHasConflict(room.bookable, !hasConflict); // (true, true/false)\n this.updateAvailabilityStatus(SpaceStatus.Booked);\n } else {\n /**\n * Update status of availability - Uavailable/Booked/Requestable/Bookable\n * If room is not bookable(not available to book) and warning dialog dispalyed once\n * If room is bookable but not available to boot AT THIS TIME (or and has conflict with other booking) and warning dialog displayed once\n * If room is bookable and availanle to book AT THIS TIME then check the type of room Requestable? or Bookable\n */\n const status =\n !room.bookable || !this.isSpaceValidAsPerRule.spaces.length\n ? SpaceStatus.Unavailable\n : !room.available && hasConflict\n ? SpaceStatus.Booked\n : this.is_request\n ? SpaceStatus.Requestable\n : SpaceStatus.Bookable;\n this.updateAvailabilityStatus(status);\n }\n }\n\n public updateAvailabilityStatus(primaryCheck: string, secondaryCheck?: string) {\n this.availabilityStatus =\n primaryCheck !== ''\n ? primaryCheck\n : this.data.value.is_recurrent ||\n ['unavailable', 'booked'].indexOf(this.availabilityStatus) === -1\n ? secondaryCheck\n : this.availabilityStatus;\n }\n\n public get catering(): string {\n return (\n DateNow(new Date())\n .setValue({ minute: 0, hour: this.room?.building?.catering_hours.start })\n .formatDate('ha')\n .toLocaleLowerCase() +\n ' - ' +\n DateNow(new Date())\n .setValue({ minute: 0, hour: this.room?.building?.catering_hours.end })\n .formatDate('ha')\n .toLocaleLowerCase()\n );\n }\n\n public get dateString(): string {\n\t\t\t\tif(!this.requestedDateTz) return '';\n return this.requestedDateTz.formatDate('ccc d MMM yyyy');; //shorterLocalDateFormatString(this.requestedDateTz);\n \n }\n\n public get focusedRoomMapKey(): string {\n return `area-${this.room?.map_id}-status`;\n }\n\n /** Whether we are only allowed to 'request' the selected space */\n public get is_request(): boolean {\n const data = this.data.value;\n\n /* istanbul ignore else */\n if (!data?.selectedRoom?.space) {\n return false;\n }\n\n const space = new Space(data.selectedRoom.space);\n const isRequest = space.byRequest({\n dateTz: data.dateTz,\n duration: data.duration,\n host: this.currentUser,\n });\n this.updateAvailabilityStatus(\n '',\n isRequest ? SpaceStatus.Requestable : SpaceStatus.Bookable\n );\n return isRequest;\n }\n\n public get roomFeatures(): string[] {\n // const room_type = `${this.room.internal_or_external}_room_types`\n const combinedFeatures = {\n // ...this._org.getOrganizationFiltersByRoomType(room_type),\n ...this._org.getOrganizationFiltersByRoomType('equipment_types'),\n };\n const features = this.room !== undefined ? this.room?.featuresArray.map(\n (feature: string) => combinedFeatures[feature]\n ) : [];\n\n return [...new Set(features)].filter((f) => !!f);\n }\n\n public get roomHasCatering() {\n // Building scope catering available is true or false\n const building = this.data.value?.selectedRoom?.building;\n let hasCatering = building ? building.has_catering : false;\n // but if Room catering is false it overrides the building\n if (this.room?.has_catering === false) {\n hasCatering = false;\n }\n return hasCatering;\n }\n\n public get roomImagesFileSlug(): string {\n return this.room?.email.split('@')[0];\n }\n\n public get mapUrl(): string {\n return this.room?.level?.map_url;\n }\n\n public get timeString(): string {\n\t\t\tif(!this.requestedDateTz) return '';\n\t\t\treturn startEndTimeWithZoneFormatString(\n\t\t\t\t\tthis.requestedDateTz,\n\t\t\t\t\tthis.requestedDateTz.addValue({ minutes: this.data.value?.duration })\n\t\t\t);\n }\n\n /**\n * Get the timezone form the subscribed activeForm\n */\n public get timezone(): string {\n // R--- this.room.timezone wasn't reliable enough on page refresh, something to look into\n return this.data.value.selectedRoom?.building.timezone;\n }\n\n public setAlternativeWeekStartDate(bookingDate: DateTZ) {\n if (!bookingDate) {\n return;\n }\n\n const booking_date = bookingDate.clone();\n if (this.mobile) {\n this.alternativeWeekStartDateTz = booking_date;\n } else {\n this.alternativeWeekStartDateTz = booking_date.startOfValue('week');\n }\n }\n\n public updateCalendarWeekView(alternativeWeekStartDateTz: DateTZ) {\n this.alternativeWeekStartDateTz = alternativeWeekStartDateTz;\n this.fetchRooms(!this.mobile, this.alternativeWeekStartDateTz);\n }\n\n public confirmChanges(data: DateDurationData) {\n // R-- refactor room-availability-preview to return DateTZ so setAlternativeWeekStartDate can use it.\n this.mobile = data.mobile;\n this.setAlternativeWeekStartDate(data.dateTz);\n\n this.fetchRooms(!this.mobile, this.alternativeWeekStartDateTz);\n // submit\n this.store.dispatch(\n storeBookingFormData({\n payload: {\n ...this.data.value,\n dateTz: data.dateTz,\n duration: data.duration,\n },\n })\n );\n }\n\n public fetchRooms(allWeek: boolean = true, alternativeWeekStartDateTz: DateTZ = null) {\n if (!this.room?.id) {\n return;\n }\n\n const day = 24 * 60;\n const week = day * 7;\n\n let start_date = (alternativeWeekStartDateTz || this.data.value.dateTz).clone();\n if (allWeek && start_date.dateWeekday !== 7) {\n start_date = start_date.startOfValue('week');\n }\n\n const startOfDay = start_date.startOfValue('day').setValue({ second: 0, millisecond: 0 });\n const startOfWeek = start_date.setValue({ second: 0, millisecond: 0 }).startOfValue('day');\n\n // Query for the entire day for this room\n const query = {\n dateTz: allWeek ? startOfWeek : startOfDay,\n duration: allWeek ? week : day,\n locations: this.room?.id,\n capacity: this.data.value?.roomSize.value,\n };\n this.store.dispatch(loadByIdResults.request(query));\n }\n\n public removeDateOffset() {\n const data = this.data.value;\n let { dateTz, offset } = data;\n dateTz = dateTz.subtractValue({ minutes: ((typeof offset === 'string' && offset == '') || (typeof offset === 'undefined')) ? 0 : Number(offset) });\n this.store.dispatch(\n storeBookingFormData({\n payload: {\n ...data,\n dateTz: dateTz,\n offset: 0,\n },\n })\n );\n }\n\n public goToBackRoute() {\n this.removeDateOffset();\n this.router.navigate(this.backRoute.route, { queryParams: this.backRoute.queryParams });\n }\n\n public expandMap(open: boolean) {\n this.expandedLocation = open;\n }\n\n public expandAvailability(open: boolean) {\n this.fetchRooms(!this.mobile);\n this.expandedAvailability = open;\n }\n\n public handleClose() {\n this.expandedLocation = false;\n this.expandedAvailability = false;\n this.setAlternativeWeekStartDate(this.data.value?.dateTz);\n this.fetchRooms(false);\n }\n\n /**\n * Continue to Booking Form\n */\n public bookRoom() {\n // submit\n this.store.dispatch(\n storeBookingFormData({\n payload: {\n ...this.data.value,\n },\n })\n );\n\n const bookingRoute = this.data.value.id ? 'edit' : 'create';\n this.router.navigate(['/home', bookingRoute]);\n }\n\n public hideInfoBanner() {\n this.showInfoBanner = false;\n }\n}\n","
\n
\n \n \n
\n
\n \n

This room is not guaranteed until booking confirmation is received.

\n \n
\n
\n \n

This time slot is not available, drag or choose a diferent date or time.

\n
\n
\n
\n \n
\n
\n
\n {{ availabilityStatus | titlecase }} {{ occurenceAvailability }}\n
\n
\n

{{room?.local_name}}

{{data.value?.bookingType.display}}
\n \n
\n
\n \n Equipment\n
    \n
  • \n {{feature}}\n
  • \n
\n
\n
\n
\n \n Catering Available\n
    \n
  • {{catering}}
  • \n
  • (specified in the last booking step)
  • \n
\n
\n
\n
\n
\n
\n

Room Availability:

\n

{{dateString}}

\n \n
\n \n
\n
\n
\n

Room Location:

\n

{{room?.building?.name}}, {{room?.level?.name}}

\n \n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n\n
\n
\n \n {{ open ? '(tap to close)' : '(tap to open)'}}\n
\n

{{ data?.value?.is_recurrent ? 'Recurring' : 'Room' }} Booking Detail

\n
\n\n
\n
Date: {{dateString}}
\n
Time: {{timeString}}
\n
\n
\n
{{data?.value?.recurrence_period === 'list' ? 'Specific dates' :\n data?.value?.recurrence_period | titlecase}}\n -\n Conflicts({{isConflictWithOccurences()?.total_Conflicts}}) \n
\n
Start date: {{dateString}}
\n
End date: {{endDateString}}
\n
Time: {{timeString}}
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n","import {\n Component,\n EventEmitter,\n OnInit,\n Output\n} from '@angular/core';\nimport {\n instantBookOptions,\n roomDetailsRequired,\n roomEquipmentRequiredOptions,\n selectFormFilters,\n selectIsInternal,\n roomCateringAvailable,\n OrganisationService\n} from '@mckinsey-converge/data-common';\nimport {\n select,\n Store\n} from '@ngrx/store';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { BehaviorSubject } from 'rxjs';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport {\n map,\n take\n} from 'rxjs/operators';\n\n@Component({\n selector: 'app-room-filters-form',\n template: `\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n `,\n styleUrls: ['./room-filters-form.component.scss']\n})\nexport class RoomFiltersFormComponent extends BaseDirective implements OnInit {\n\n public instantBookOptions = instantBookOptions;\n public roomEquipmentRequiredOptions = roomEquipmentRequiredOptions;\n public roomDetailsRequired = roomDetailsRequired;\n public roomCateringAvailable = roomCateringAvailable;\n public internalRoomTypeRequiredOptions = [];\n public externalRoomTypeRequiredOptions = [];\n public isInternal = false;\n\n public selectedOptions = new BehaviorSubject[]>([]);\n\n @Output()\n public cancelSubmit = new EventEmitter();\n\n @Output()\n public filtersSubmit = new EventEmitter[]>();\n\n constructor(private store: Store, private _org: OrganisationService) {\n super();\n }\n\n public ngOnInit(): void {\n this.subscription('bookingType',\n this.store.pipe(\n select(selectIsInternal)\n ).subscribe(next => {\n this.isInternal = next;\n }));\n this.subscription('filters',\n this.store.pipe(\n select(selectFormFilters)\n ).subscribe(next => {\n this.selectedOptions.next(next);\n }));\n\n this.externalRoomTypeRequiredOptions = this.getFilters('external_room_types')\n this.internalRoomTypeRequiredOptions = this.getFilters('internal_room_types')\n }\n\n public toggleOptionChecked(selectOption: SelectOption) {\n this.selectedOptions.pipe(\n take(1),\n map(options => {\n const found = options.find(o => o.value === selectOption.value);\n if (found) {\n // remove\n return options.filter(o => o.value !== selectOption.value);\n }\n // add\n return [...options, selectOption];\n })\n ).subscribe(next => {\n this.selectedOptions.next(next);\n });\n }\n\n public submitFilters() {\n this.selectedOptions.pipe(\n take(1)\n ).subscribe(options => {\n this.filtersSubmit.emit(options);\n });\n }\n\n public getFilters(type:string) {\n const filters = this._org.getOrganizationFiltersByRoomType(type) || {}\n return Object.keys(filters).map((key) => {\n const display = filters[key]\n return {\n value: key,\n display,\n shortDisplay: display\n }\n })\n }\n}\n","import {\n Component,\n ViewChild\n} from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { Store } from '@ngrx/store';\nimport { storeRoomFilters } from '@mckinsey-converge/data-common';\nimport { RoomFiltersFormComponent } from 'src/app/booking/room-filters-form/room-filters-form.component';\n\n@Component({\n selector: 'app-room-filters',\n template: `\n
\n \n \n \n \n \n \n \n \n
\n `,\n styleUrls: ['./room-filters-modal.component.scss']\n})\nexport class RoomFiltersModalComponent {\n\n @ViewChild(RoomFiltersFormComponent)\n public form: RoomFiltersFormComponent;\n\n constructor(\n private store: Store,\n private dialogRef: MatDialogRef) {\n }\n\n public close() {\n this.dialogRef.close();\n }\n\n public submitFilters(filters: SelectOption[]) {\n this.store.dispatch(storeRoomFilters({\n payload: filters\n }));\n this.close();\n }\n}\n","import {\n Component,\n Input,\n OnInit,\n OnChanges,\n EventEmitter,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport {\n BehaviorSubject,\n combineLatest,\n} from 'rxjs';\nimport {\n map,\n take,\n} from 'rxjs/operators';\nimport { filterUndefined } from '@mckinsey-converge/rx-utils';\nimport {\n select,\n Store\n} from '@ngrx/store';\nimport {\n CENTER_POINT,\n generateMapStyleForSpace,\n legendOptions,\n MAX_ZOOM_LEVEL,\n MIN_ZOOM_LEVEL,\n spaceToMapFeature,\n} from 'src/app/map/map.utils';\nimport {\n Building,\n BuildingLevel,\n SettingsService,\n Space,\n SpaceStatus,\n selectMapFilteredResults,\n FilteredSpaces\n} from '@mckinsey-converge/data-common';\nimport {\n Point,\n HashMap,\n BaseDirective,\n} from '@mckinsey-converge/base';\nimport { MapFeature } from '@acaprojects/ngx-interactive-map/lib/helpers/map.interfaces';\nimport { OfficeInformationModalComponent } from 'src/app/map/office-information-modal/office-information-modal.component';\nimport { MapSearchStoreState } from '../../map/map-search/map-search.component';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport {\n generateFeedbackUrl,\n Urls\n} from '../../utilities/urls';\n\nexport enum TopBarHeaderMode {\n Light = 'light',\n Dark = 'dark',\n}\n\n@Component({\n selector: 'room-location-preview',\n template: `\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n \n {{building.name}}, {{level.name}}\n
\n
The pinpoint indicates your selected room's location on the floor. No futher interaction is available.
\n
\n
\n
\n \n
\n \n \n
\n \n
\n
\n
\n \n \n
\n
\n \n
\n
\n
\n
\n `,\n styleUrls: ['./room-location-preview.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class RoomLocationPreviewComponent extends BaseDirective implements OnInit, OnChanges {\n public legendOptions = legendOptions();\n\n @Input()\n public mapUrl: string;\n\n @Input()\n public focus: any; // @todo fix\n\n @Input()\n public expanded: boolean;\n\n @Input()\n public building: Building;\n\n @Input()\n public space: Space;\n\n @Input()\n public level: any; // @todo fix\n\n /** The theme to use **/\n @Input() public mode: TopBarHeaderMode = TopBarHeaderMode.Dark;\n\n // Use \"booking_preview\" to show smaller height with zoom icon\n @Input() public viewMode: String = null;\n\n @Output()\n public handleExpand: EventEmitter = new EventEmitter();\n\n public currentPage: string;\n\n public get feedback() {\n return generateFeedbackUrl(this.currentPage);\n }\n\n public get zoomLevel() {\n return this.expanded ? this.minZoom.value : this.zoom.value;\n }\n\n constructor(\n private store: Store,\n public dialog: MatDialog,\n private settingService: SettingsService) {\n super();\n }\n\n public focusedRoom = new BehaviorSubject(undefined);\n public featuresRoom = new BehaviorSubject(undefined);\n public zoom = new BehaviorSubject(MIN_ZOOM_LEVEL);\n public minZoom = new BehaviorSubject(MAX_ZOOM_LEVEL / 3);\n public features = combineLatest([this.featuresRoom]).pipe(map(items => items.filter(i => !!i)));\n public setIntervalHandle: any = null;\n public count = 0;\n public center = new BehaviorSubject(CENTER_POINT);\n /** Mapping of elements to CSS styles */\n public style_map = new BehaviorSubject>>({});\n\n public activeBuilding = new BehaviorSubject(undefined);\n public activeLevel = new BehaviorSubject(undefined);\n public activeSpace = new BehaviorSubject(undefined);\n\n public ngOnChanges(changes: any): void {\n if (changes.expanded && changes.expanded.currentValue) {\n this.activeSpace.pipe(\n take(1),\n filterUndefined(),\n map(spaceToMapFeature)\n ).subscribe(next => {\n this.featuresRoom.next(next);\n });\n } else if (changes.expanded && changes.expanded.previousValue && !changes.expanded.currentValue) {\n this.featuresRoom.next(undefined);\n }\n }\n\n public ngOnInit(): void {\n this.timeout('Getting Title', () => this.updateRoute(document.title));\n\n // MCK-1850 And it's even slower when loading form scratch via an email link, so 10 second interval.\n this.timeout('Zoom to Room', () => this.initMapZoom(), 2000);\n this.activeSpace.next(this.space);\n this.activeBuilding.next(this.building);\n this.activeLevel.next(this.level);\n\n this.subscription('bookingSpaceResults',\n combineLatest([\n this.store.pipe(\n select(selectMapFilteredResults),\n map((r: LoadingModel) => r.success)\n ),\n this.activeBuilding.pipe(filterUndefined()),\n this.activeLevel.pipe(filterUndefined())\n ]).subscribe(([filteredSpaces, building, level]) => {\n const spacesFromSelection = (filteredSpaces.spaces || [])\n .filter(s => !!s.map_id && s.zones.includes(building.id) && s.zones.includes(level.id));\n\n const styles: HashMap> = {};\n // const colour_map = this.settingService.get('app.explore.colors') || {};\n // spacesFromSelection.forEach(space => {\n // const status = filteredSpaces.statusMap[space.id] || SpaceStatus.Available;\n // const mapStyle = generateMapStyleForSpace(space, status, colour_map);\n // styles[`#${mapStyle.id}`] = mapStyle.styles;\n // });\n this.style_map.next(styles);\n \n })\n );\n\n }\n\n public initMapZoom() {\n const self = this;\n // Doesn't reliably zoom to room until that component is finished loading and processing elements.\n // But this alone is not enough when loading from an email link due to how slow the loading is. See the ngOnInit\n this.setIntervalHandle = setInterval(() => {\n if (!this.focus) {\n return;\n }\n \n self.zoomToRoom();\n self.count ++;\n if (self.count > 4) {\n clearInterval(self.setIntervalHandle);\n self.setIntervalHandle = null;\n }\n }, 1000);\n }\n\n public updateRoute(location) {\n location = location.substr(0, location.indexOf(' |'));\n this.currentPage = location;\n }\n\n public goToHelp() {\n window.open(Urls.Help);\n }\n\n public zoomToRoom(): void {\n this.focusedRoom.next(this.focus);\n this.zoom.next(MAX_ZOOM_LEVEL);\n }\n\n public zoomIn() {\n if (this.minZoom.value < MAX_ZOOM_LEVEL) {\n this.minZoom.next(this.minZoom.value + 1);\n }\n }\n\n public zoomOut() {\n if (this.minZoom.value > MIN_ZOOM_LEVEL) {\n this.minZoom.next(this.minZoom.value - 1);\n }\n }\n\n public resetZoomLevels() {\n this.minZoom.next(MIN_ZOOM_LEVEL);\n this.zoom.next(MIN_ZOOM_LEVEL);\n this.center.next(CENTER_POINT);\n this.focusedRoom.next(undefined);\n }\n\n public collapse() {\n this.handleExpand.emit(false);\n const self = this;\n self.count = 0;\n\n this.zoom.next(MAX_ZOOM_LEVEL);\n this.center.next(CENTER_POINT);\n this.focusedRoom.next(undefined);\n\n // Doesn't reliably zoom to room until that component is finished loading and processing elements.\n this.setIntervalHandle = setInterval(() => {\n self.zoomToRoom();\n self.count ++;\n if (self.count > 4) {\n clearInterval(self.setIntervalHandle);\n self.setIntervalHandle = null;\n }\n }, 200);\n }\n\n public displayOfficeInformation() {\n this.dialog.open(OfficeInformationModalComponent,\n {\n data: this.building,\n panelClass: 'mck-alert',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n OnInit,\n OnChanges,\n SimpleChanges,\n} from '@angular/core';\nimport { BookingFormData, RoomResultsViewModel, setupRoomImages, User } from '@mckinsey-converge/data-common';\nimport { ImageDirective, SpaceImageObject } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'app-room-result-item',\n template: `\n
\n
\n
\n
\n {{ availability === 'requestable' ? 'Requestable' : 'Bookable'}}\n {{ viewModel?.space?.availableOccurrences }} out of {{ viewModel?.space?.totalOccurrences }} \n
\n
\n
\n Images Coming Soon\n
\n \n
\n
\n
\n Images Coming Soon\n
\n \n
\n
\n
\n
\n \n {{viewModel.levelDisplay}}, {{viewModel.title}}\n {{type}}\n {{viewModel.office}}\n {{viewModel.capacity}}\n \n \n \n \n \n \n
\n
\n
\n
\n
\n
\n `,\n styleUrls: ['./room-result-item.component.scss']\n})\nexport class RoomResultItemComponent extends ImageDirective implements OnInit, OnChanges {\n\n public rootFolderURL: string = 'assets/img/rooms/';\n public fileSlug: string = '';\n public type: string = '';\n\n /**\n * If undefined, we display in loading state.\n */\n @Input()\n public viewModel: RoomResultsViewModel | undefined;\n\n @Input()\n public data: BookingFormData;\n\n @Input()\n public user: User;\n\n @Output()\n public roomSelect = new EventEmitter();\n\n public availability: \"requestable\" | \"bookable\" | \"booked\" | \"non-bookable\" | null;\n\n public foundImages: SpaceImageObject[] = [1,2].map(n => {\n return {path: `assets/img/rooms/placeholder-${n}.png`};\n });\n\n public ngOnInit(): void {\n if (this.viewModel && this.viewModel.space) {\n this.fileSlug = this.viewModel.space.email.split('@')[0];\n setupRoomImages(this, [1,2], this.rootFolderURL, this.fileSlug);\n const t = this.viewModel.space.internal_or_external;// || 'internal';\n this.type = `${t[0]?.toUpperCase()}${t.toLocaleLowerCase().substring(1)}`\n }\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.availability !== null && (\n changes.data &&\n changes.data.firstChange === true &&\n changes.data.currentValue &&\n changes.data.currentValue.dateTz &&\n changes.data.currentValue.duration\n )) {\n this.availability = this.viewModel.space.byRequest({\n dateTz: this.data.dateTz,\n duration: this.data.duration,\n host: this.user\n }) === false ? \"bookable\" : \"requestable\";\n\n }\n }\n\n public hasData() {\n return this.viewModel !== undefined;\n }\n\n public get typeClass() {\n return this.type.toLocaleLowerCase();\n }\n\n public showLabel(path) {\n return path.includes('placeholder');\n }\n public get timestamp () {\n return (new Date()).getTime()\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewContainerRef\n} from '@angular/core';\nimport {\n select,\n Store\n} from '@ngrx/store';\nimport {\n ActivatedRoute,\n Router\n} from '@angular/router';\nimport {\n BehaviorSubject,\n combineLatest,\n Observable\n} from 'rxjs';\nimport {\n RoomResultsViewModel,\n BookingFormData,\n BookingStoreState,\n selectActiveForm,\n storeBookingFormData,\n SpaceFilterReason,\n User,\n OrganisationService,\n} from '@mckinsey-converge/data-common';\nimport {\n map,\n take,\n distinctUntilChanged\n} from 'rxjs/operators';\nimport {\n AlertBannerDisplay,\n AlertMode,\n BaseTemplateComponent,\n ConflictsModalComponent,\n ConflictsModalComponentData,\n\t\tOverrideChangesModalComponent\n} from '@mckinsey-converge/ui';\nimport { RoomResultsCoachmarkViewmodel } from 'src/app/booking/room-results/room-results-coachmark.viewmodel';\nimport {\n RoomStoreState\n} from '@mckinsey-converge/rooms';\nimport {\n BuildingStoreState,\n} from '@mckinsey-converge/buildings';\nimport { selectCurrentUser, UserStoreState } from '@mckinsey-converge/user';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DialogEvent } from '@mckinsey-converge/base';\n\n\nexport type RoomResultsState = BookingStoreState\n & RoomStoreState\n & BuildingStoreState\n & UserStoreState;\n\n@Component({\n selector: 'app-room-results-paginated',\n template: `\n \n
\n
\n \n \n \n \n \n \n \n \n \n\n
\n \n
\n
\n \n \n \n
\n \n
\n
\n
\n
\n
\n `,\n styleUrls: ['./room-results-paginated.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class RoomResultsPaginatedComponent extends BaseTemplateComponent implements OnInit {\n public ROOM_DISPLAY_STEP = 10;\n public ROOM_DISPLAY_START = 3;\n public AlertMode = AlertMode;\n public AlertBannerDisplay = AlertBannerDisplay;\n /** Offset to add to the start time when selecting a space */\n @Input() public offset = 0;\n\n @Input()\n public viewModels: Observable;\n\n @Input()\n public coachMark: Observable | undefined;\n\n /**\n * If true, show skeleton.\n */\n @Input()\n public isLoading: Observable;\n\n @Output()\n public coachMarkAction = new EventEmitter();\n\n // set property if user room selection from next business day section on result page\n @Input() public nextBusinessDay = false;\n\n public displayCount = new BehaviorSubject(this.ROOM_DISPLAY_START);\n\n /**\n * Fake pagination since API does not support it.\n */\n public displayViewModels: Observable;\n\n public showLoadMore: Observable;\n\n public remainingResults: Observable;\n\n public data = new BehaviorSubject(undefined);\n public currentUser: User;\n\n constructor(vcRef: ViewContainerRef,\n private store: Store,\n private router: Router,\n private route: ActivatedRoute,\n private _org: OrganisationService,\n private cdRef: ChangeDetectorRef,\n private _dialog: MatDialog) {\n super(vcRef);\n }\n\n public ngOnInit(): void {\n super.ngOnInit();\n //test commet for to trigger build again\n this.displayViewModels = combineLatest([this.viewModels, this.displayCount])\n .pipe(\n map(([vm, displayCount]) => { this.cdRef.markForCheck(); return vm?.slice(0, displayCount) } ));\n\n this.showLoadMore = combineLatest([this.viewModels, this.displayCount])\n .pipe(\n map(([vm, displayCount]) => {\n return ((vm?.length ?? 0) > displayCount);\n })\n );\n this.remainingResults = combineLatest([this.viewModels, this.displayCount])\n .pipe(\n map(([vm, displayCount]) => vm && (vm.length - displayCount) || 0));\n\n this.subscription('currentUser', this.store.select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n })\n );\n\n this.subscription('activeForm', this.store.pipe(\n select(selectActiveForm),\n distinctUntilChanged()\n ).subscribe((next: BookingFormData | undefined) => {\n if (next) {\n this.data.next(next);\n this.cdRef.detectChanges();\n\n }\n }));\n this.cdRef.detectChanges();\n }\n\n public loadMore() {\n // fake pagination\n this.displayCount.pipe(\n take(1),\n map(v => v + this.ROOM_DISPLAY_STEP)\n ).subscribe(next => {\n this.displayCount.next(next);\n this.cdRef.detectChanges();\n });\n }\n\n public trackViewModelById(index: number, item: RoomResultsViewModel) {\n return item.space.id;\n }\n\n\n\t\t/**\n\t\t * Handles the selection of a room from the search results.\n\t\t * Depending on the room's availability and recurrence conflicts, this function decides\n\t\t * whether to open a modal for recurrence conflicts, override changes, or navigate to the\n\t\t * room details page. It updates the state and user interface accordingly.\n\t\t *\n\t\t * @param {RoomResultsViewModel} room - The selected room from the search results.\n\t\t * @param {number} availableOccurrences - The number of available occurrences of the room.\n\t\t * @param {number} totalOccurrences - The total number of occurrences of the room.\n\t\t */\n public roomSelected(room: RoomResultsViewModel, availableOccurrences: number, totalOccurrences: number) {\n\n const { is_recurrent } = this.data.value;\n this.data.value.recurrence_exceptions = [];\n if(is_recurrent){\n // Handle recurrence conflicts if the booking is part of a recurring series\n const spaceConflicts = room.space.recurrence_availability.filter(recurr => !recurr.available);\n this.data.value.recurrence_exceptions = spaceConflicts.map((recurr)=> recurr.date);\n }\n\n\t\t// Determine the action based on recurrence conflicts, occurrence edits, and room availability\n\t\tif(this.data.value.recurrence_exceptions.length) {\n this.openRecurrenceConflictsModal(room);\t// Open modal for recurrence conflicts\n }\n else if( this.data.value.occurrence_edits && this.data.value.occurrence_edits.length) {\n this.overrideChanges(room);\t// Open modal to override changes\n }\n else {\n this.goToRoomDetail(room);\t// Navigate to the room details page\n }\n\n }\n\n\t\t/**\n\t\t * Navigates to the room details page for the selected room.\n\t\t * It updates the URL and navigates to the room details page with appropriate query parameters.\n\t\t *\n\t\t * @param {RoomResultsViewModel} room - The selected room from the search results.\n\t\t *\n\t\t * @remarks\n\t\t * The function manages timezone offset and other necessary details to provide accurate room information.\n\t\t * The state object is used to pass relevant data for correct page rendering and form population.\n\t\t *\n\t\t * @private\n\t\t */\n private goToRoomDetail(room) {\n\t\t\t// Handle timezone offset for accurate date and time information\n let { dateTz } = this.data.value;\n if (this.offset) {\n dateTz = dateTz.addValue({ minutes: this.offset });\n }\n\n /**\n * selectedRoom.space is fully fledged Space class\n * this.data.value.booking.room is not and does not contain the timezone\n * this.data.value.booking.timezone is legit\n */\n // UPDATE: providing payload as part of extras instead dispatching storeBookingFormData event to avoid redundant backend request calls\n this.router.navigate(['room'], { relativeTo: this.route, state:{payload : {\n ...this.data.value,\n buildings: this._org.buildings, // require to manage browser refresh on room detail screen!\n dateTz,\n offset: this.offset,\n selectedRoom: room,\n nextBusinessDay: this.nextBusinessDay\n }\n }});\n }\n\n\n /**\n\t * Opens a modal to display recurrence conflicts for the selected room.\n\t * It shows recurrence conflicts, allowing the user to resolve them before proceeding.\n\t * After the modal is closed, it navigates to the room details page if there are no unresolved conflicts.\n\t *\n\t * @param {RoomResultsViewModel} room - The selected room from the search results.\n\t *\n\t * @private\n\t */\n private openRecurrenceConflictsModal(room: RoomResultsViewModel) {\n let { recurrence_exceptions } = this.data.value;\n\n\t\t// Open modal for recurrence conflicts\n const recurr_ref = this._dialog.open(ConflictsModalComponent, {\n maxWidth: '95vw',\n width: '32em',\n data: {\n room_name: room.space.simple_name,\n conflicts: recurrence_exceptions,\n timezone: room.building.timezone\n }\n });\n this.subscription(\n 'conflicts_modal_events',\n recurr_ref.componentInstance.event.subscribe((event: DialogEvent) => {\n\n\t\t\t\tif (event.reason === 'done' && !(this.data.value.occurrence_edits && !this.data.value.occurrence_edits.length) ) {\n\t\t\t\t\t\tthis.goToRoomDetail(room); \t// Navigate to room details page after resolving conflicts\n\t\t\t\t}\n recurr_ref.close();\n })\n );\n recurr_ref.afterClosed().subscribe(() => this.unsub('conflicts_modal_events'));\n }\n\n\t/**\n\t * Opens a modal to allow the user to override changes made to the booking.\n\t * It provides options to confirm or cancel the override, depending on user preference.\n\t * After the modal is closed, it navigates to the room details page if the user confirms the override.\n\t *\n\t * @param {RoomResultsViewModel} room - The selected room from the search results.\n\t *\n\t * @private\n\t */\n private overrideChanges(room: RoomResultsViewModel) {\n\t\t// Open modal for overriding changes made to the booking\n const ref = this._dialog.open(OverrideChangesModalComponent, {\n width: '576px',\n data: {\n edits: this.data.value.occurrence_edits,\n timezone: this.data.value.timezone\n }\n });\n ref.componentInstance.event.subscribe(event => {\n if (event.reason === 'done') {\n this.goToRoomDetail(room);\t// Navigate to room details page after confirming the override\n ref.close();\n } else if (event.reason === 'close') {\n ref.close();\n }\n });\n }\n\n\n\n\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport { BehaviorSubject, combineLatest, Observable, of, Subject } from 'rxjs';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { distinctUntilChanged, filter, map } from 'rxjs/operators';\nimport { BookingRulesLink, RoomResultsCoachmarkViewmodel } from 'src/app/booking/room-results/room-results-coachmark.viewmodel';\nimport {\n Building,\n BuildingLevel,\n mapResultsToViewModels,\n RoomResultsViewModel,\n FilteredSpaces,\n SpaceFilterReason,\n selectActiveForm,\n BookingStoreState,\n BookingFormData,\n OrganisationService,\n} from '@mckinsey-converge/data-common';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { select, Store } from '@ngrx/store';\nimport { RoomStoreState } from '@mckinsey-converge/rooms';\nimport {\n BuildingStoreState,\n} from '@mckinsey-converge/buildings';\nimport { UserStoreState } from '@mckinsey-converge/user';\n\n\nexport type RoomResultsState = BookingStoreState &\n RoomStoreState &\n BuildingStoreState &\n UserStoreState;\n\n\n@Component({\n selector: 'app-room-results-section',\n template: `\n
\n \n
\n\n \n \n \n\n \n \n \n \n `,\n styleUrls: ['./room-results-section.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n})\nexport class RoomResultsSectionComponent extends BaseDirective implements OnInit {\n @Input() public rules_link?: BookingRulesLink;\n /** Offset to add to the start time when selecting a space */\n @Input() public offset = 0;\n\n // set property if user room selection from next business day section on result page\n @Input() public nextBusinessDay : boolean = false\n\n @Input()\n public collapsable: boolean;\n\n /**\n * If collapsable is true, this is used in the collapse header.\n */\n @Input()\n public collapseTitle: string;\n\n /**\n * If collapsable is true, this is used in the collapse header.\n */\n @Input()\n public collapseDescription: string;\n\n @Input()\n public levelBuildings: Observable<{ flattenedLevels: BuildingLevel[]; buildings: Building[] }>;\n\n @Input()\n public results: BehaviorSubject>;\n\n @Output()\n public coachMarkAction = new EventEmitter();\n\n public mainResultViewModels = new BehaviorSubject(\n undefined\n );\n\n public editing_form = new BehaviorSubject(false);\n\n public resultsLoading: Observable;\n public coachMarkDisplay: Observable;\n\n public AlternateBuildings = [];\n public location: any;\n\n private subscribeResultsToViewModels = (\n subName: string,\n resultsObservable: Observable>,\n flattenLevelBuildings: Observable<{ flattenedLevels: any; buildings: Building[] }>,\n viewModelSubject: Subject\n ) => {\n this.subscription(\n subName,\n combineLatest([\n resultsObservable.pipe(map((r) => r.optionalSuccess?.spaces || [])),\n flattenLevelBuildings,\n ])\n .pipe(\n map(([results, { flattenedLevels, buildings }]) =>\n mapResultsToViewModels(\n results?.length && results[0]?.building ? results : [],\n flattenedLevels,\n buildings\n )\n )\n )\n .subscribe((next) => {\n viewModelSubject.next(next);\n })\n );\n };\n\n constructor(private store: Store, private _org: OrganisationService) {\n super();\n }\n\n public ngOnInit(): void {\n this.resultsLoading = this.results.pipe(map((m) => m.isLoading));\n\n this.subscription(\n 'activeForm',\n combineLatest([this.editing_form, this.store])\n .pipe(\n filter(([edit]) => !edit),\n map(([_, store]) => store),\n select(selectActiveForm),\n distinctUntilChanged()\n )\n .subscribe((next: BookingFormData | undefined) => {\n if (next) {\n this.location = next.location;\n this.updateCoachMark();\n } else {\n }\n })\n );\n\n this.subscription(\n 'buildings',\n this._org.listen('buildings').subscribe(() => {\n this.updateCoachMark();\n })\n );\n\n this.coachMarkDisplay = this.results.pipe(\n map((r) => r.optionalSuccess?.reason || SpaceFilterReason.None),\n map(\n (r) =>\n new RoomResultsCoachmarkViewmodel(r, this.rules_link, this.AlternateBuildings)\n )\n );\n\n this.subscribeResultsToViewModels(\n 'resultListing',\n this.results,\n this.levelBuildings || of({ flattenedLevels: [], buildings: [] }),\n this.mainResultViewModels\n );\n }\n\n updateCoachMark() {\n const buildingsInSameCity = this._org.buildings?.filter(_ => {\n // Make sure this.location is populated to pass unit tests -\n if (!this.location || this.location.length === 0) return false;\n // If all offices are selected, city name will be at this.location[0]?.meta?.city.name, otherwise use this.location[0]?.meta?.city \n const cityFromLocation = typeof this.location[0]?.meta?.city === 'object' && this.location[0]?.meta?.city !== null\n ? this.location[0]?.meta?.city.name\n : this.location[0]?.meta?.city;\n return _.city === cityFromLocation;\n });\n const AlternateBuildings = buildingsInSameCity?.filter(\n (building) =>\n !this.location.some(\n (locationItem) => locationItem.meta?.building?.id === building.id\n )\n );\n this.AlternateBuildings = AlternateBuildings;\n this.coachMarkDisplay = this.results.pipe(\n map((r) => r.optionalSuccess?.reason || SpaceFilterReason.None),\n map(\n (r) =>\n new RoomResultsCoachmarkViewmodel(r, this.rules_link, this.AlternateBuildings)\n )\n );\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n if (changes.results || changes.levelBuildings || changes.mainResultViewModels) {\n this.subscribeResultsToViewModels(\n 'resultListing',\n this.results,\n this.levelBuildings || of({ flattenedLevels: [], buildings: [] }),\n this.mainResultViewModels\n );\n }\n }\n\n public onCoachmarkAction(reason: SpaceFilterReason) {\n this.coachMarkAction.emit(reason);\n }\n}\n","import { SpaceFilterReason } from '@mckinsey-converge/data-common';\n\nexport interface BookingRulesLink {\n name: string;\n url: string;\n}\nexport class RoomResultsCoachmarkViewmodel {\n public visible: boolean;\n public title: string;\n public actionButtonText: string;\n\n constructor(public reason: SpaceFilterReason, public rules_link?: BookingRulesLink, alternateBuildings?:any[]) {\n this.visible = true;\n switch (reason) {\n case SpaceFilterReason.DateTime:\n this.title =\n 'There are no available rooms that match your search criteria. ' +\n 'Please adjust your search criteria and try again.';\n this.actionButtonText = 'Return to search';\n break;\n case SpaceFilterReason.OfficeRules:\n this.title =\n `There are no available rooms that match your search criteria.\n Please adjust your search criteria and try again.`;\n if (alternateBuildings && alternateBuildings.length > 0) {\n this.title += ` Alternatively, you can try ${alternateBuildings.length > 1 \n ? alternateBuildings.slice(0, -1).map(building => building.name).join(', ') + ', or ' + alternateBuildings[alternateBuildings.length - 1].name \n : alternateBuildings[0]?.name\n }.`;\n }\n if (rules_link) {\n this.title +=\n `
For information on booking rules please see ` +\n `${rules_link.name}`;\n }\n this.actionButtonText = 'Return to search';\n break;\n case SpaceFilterReason.Filters:\n this.title =\n 'No rooms available for your filter criteria. ' +\n 'Try to clear the filter please.';\n this.actionButtonText = 'Clear filter';\n break;\n case SpaceFilterReason.AlternateBuildingsFound:\n this.title = `There are no available rooms that match your search criteria. Please try ${\n alternateBuildings.length > 1 \n ? alternateBuildings.slice(0, -1).map(building => building.name).join(', ') + ', or ' + alternateBuildings[alternateBuildings.length - 1].name \n : alternateBuildings[0]?.name\n }.`;\n this.actionButtonText = 'Return to search';\n break;\n case SpaceFilterReason.None:\n this.visible = false;\n this.title = '';\n this.actionButtonText = '';\n break;\n }\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { TopBarHeaderMode } from 'src/app/components/topbar-header/topbar-header.component';\nimport { select, Store } from '@ngrx/store';\nimport {\n laterThatDayFromDateTz,\n loadRoomsWithQuery,\n RoomStoreState,\n mapRoomToSelectOption,\n loadRoomsForResultsMap,\n} from '@mckinsey-converge/rooms';\nimport { BaseDirective, timeWithZoneFormatString } from '@mckinsey-converge/base';\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs';\nimport {\n Building,\n BuildingLevel,\n flattenBuildingsWithLevels,\n BookingStoreState,\n FilteredSpaces,\n SpaceFilterReason,\n clearRoomFilters,\n selectActiveForm,\n selectFilteredLaterDayResults,\n selectFilteredNextDayResults,\n selectFilteredResults,\n selectFormFilters,\n BookingFormData,\n roomFormDataToQuery,\n selectFilteredDiffSizeResults,\n OrganisationService,\n CollapseService\n} from '@mckinsey-converge/data-common';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { debounceTime, distinctUntilChanged, filter, map, shareReplay } from 'rxjs/operators';\nimport {\n buildingStateSelector,\n BuildingStoreState,\n loadBuildings,\n} from '@mckinsey-converge/buildings';\nimport * as cloneDeep from 'lodash/cloneDeep';\nimport { filterUndefined, resultCountObservable } from '@mckinsey-converge/rx-utils';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { MatDialog } from '@angular/material/dialog';\nimport { RoomBookingModalComponent } from 'src/app/booking/room-booking-modal/room-booking-modal.component';\nimport { RoomFiltersModalComponent } from 'src/app/booking/room-filters-modal/room-filters-modal.component';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport {\n BookingRulesLink,\n RoomResultsCoachmarkViewmodel,\n} from 'src/app/booking/room-results/room-results-coachmark.viewmodel';\nimport { UserStoreState } from '@mckinsey-converge/user';\nimport { FormControl } from '@angular/forms';\nimport { Location } from '@angular/common';\n\nexport type RoomResultsState = BookingStoreState &\n RoomStoreState &\n BuildingStoreState &\n UserStoreState;\n\n@Component({\n selector: 'app-room-results',\n template: `\n \n
\n \n
\n
\n
\n
\n
\n \n
\n
\n
\n {{ open ? '(tap to close)' : '(tap to open)' }}\n \n
\n
\n
\n
\n
\n \n \n
\n
\n
\n \n
\n
\n
\n \n \n
\n \n \n
\n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n `,\n styleUrls: ['./room-results.component.scss'],\n animations: [\n trigger('collapseHeight', [\n state(\n 'open',\n style({\n height: '*',\n opacity: 1,\n })\n ),\n state(\n 'closed',\n style({\n overflow: 'hidden',\n opacity: 0,\n height: '0px',\n })\n ),\n transition('open <=> closed', animate('600ms ease-out')),\n ]),\n trigger('expandWidth', [\n state(\n 'open',\n style({\n maxWidth: '1024px',\n })\n ),\n state(\n 'closed',\n style({\n maxWidth: '96%',\n })\n ),\n transition('open <=> closed', animate('600ms ease-out')),\n ]),\n ],\n})\nexport class RoomResultsComponent extends BaseDirective implements OnInit {\n public TopBarHeaderMode = TopBarHeaderMode;\n\n public day_offset = 1;\n\n public data = new BehaviorSubject(undefined);\n public filters = new BehaviorSubject[]>([]);\n\n public mainResults = new BehaviorSubject>(LoadingModel.empty());\n public mainResultsFiltered = new BehaviorSubject>(\n LoadingModel.empty()\n );\n public laterThatDayResults = new BehaviorSubject>(\n LoadingModel.empty()\n );\n public nextBusinessDayResults = new BehaviorSubject>(\n LoadingModel.empty()\n );\n public diffSizeResults = new BehaviorSubject>(\n LoadingModel.empty()\n );\n public mainResultsSpaces: SelectOption[];\n\n public laterThatDayDisplay = new BehaviorSubject(undefined);\n\n public mainCoachMarkDisplay = this.mainResults.pipe(\n map((r) => r.optionalSuccess?.reason || SpaceFilterReason.None),\n map((r) => new RoomResultsCoachmarkViewmodel(r, this.rules_link))\n );\n\n public rules_link?: BookingRulesLink;\n\n public mainResultsCount = resultCountObservable(\n this.mainResultsFiltered,\n this.mainResultsFiltered.pipe(map((r) => r.optionalSuccess?.spaces))\n );\n public laterThatDayCount = resultCountObservable(\n this.laterThatDayResults,\n this.laterThatDayResults.pipe(map((r) => r.optionalSuccess?.spaces))\n );\n public nextBusinessDayCount = resultCountObservable(\n this.nextBusinessDayResults,\n this.nextBusinessDayResults.pipe(map((r) => r.optionalSuccess?.spaces))\n );\n public diffSizeCount = resultCountObservable(\n this.diffSizeResults,\n this.diffSizeResults.pipe(map((r) => r.optionalSuccess?.spaces))\n );\n\n public selectedToggle = new BehaviorSubject(0);\n\n public flattenLevelBuildings: Observable<{\n flattenedLevels: BuildingLevel[];\n buildings: Building[];\n }>;\n\n public open: boolean = true;\n public editing_form = new BehaviorSubject(false);\n\n public spaceControl = new FormControl();\n\n public selectedSpace: SelectOption;\n public resetInput: number;\n\n public searchStringPresent = false;\n public payload: any = {\n payload: { name: 'test', id: 'test-id' },\n building: {},\n floorMap: true,\n };\n\n public isOpen = true;\n\n public toggle() {\n this.isOpen = !this.isOpen;\n }\n\n constructor(\n private store: Store,\n private router: Router,\n private route: ActivatedRoute,\n private dialog: MatDialog,\n private _org: OrganisationService,\n private location: Location,\n private collapseService: CollapseService\n ) {\n super();\n this.payload = location.getState();\n }\n\n public ngOnInit(): void {\n this.subscription(\n 'filters',\n this.store.pipe(select(selectFormFilters), distinctUntilChanged()).subscribe((next) => {\n return this.filters.next(next);\n })\n );\n\n this.subscription(\n 'activeForm',\n combineLatest([this.editing_form, this.store])\n .pipe(\n filter(([edit]) => !edit),\n map(([_, store]) => store),\n select(selectActiveForm),\n distinctUntilChanged()\n )\n .subscribe((next: BookingFormData | undefined) => {\n if (next) {\n const day = next.dateTz.dateWeekday - 1;\n this.day_offset = day >= 4 ? 7 - day : 1;\n const building = this._org.buildings.find(\n (_) => _.id === next.location[0]?.meta?.building?.id\n );\n this.rules_link =\n building?.setting('booking.rules_link') ||\n next.location.find(\n office => office?.meta?.building?._settings?.discovery_info?.booking?.rules_link\n )?.meta?.building?._settings?.discovery_info?.booking?.rules_link;\n // next.location[0]?.meta?.building?.settings?.discovery_info?.booking\n // ?.rules_link;\n const nday = laterThatDayFromDateTz(next.dateTz);\n this.laterThatDayDisplay.next(`at ${timeWithZoneFormatString(nday)}`);\n // this.store.dispatch(loadRoomsWithQuery(roomFormDataToQuery(next)));\n this.data.next(next);\n \n //Dispatches actions to load rooms based on the provided value.\n this.despatchLoadRooms();\n\n // this.data.next(next);\n } else {\n // no form data, likely visiting directly. navigate back to start\n this.router.navigate(['../'], {\n replaceUrl: true,\n relativeTo: this.route,\n });\n }\n })\n );\n\n this.subscription(\n 'results',\n this.store.pipe(select(selectFilteredResults)).subscribe((next) => {\n this.mainResults.next(next);\n this.mainResultsFiltered.next(next);\n // Populate results for Search\n this.mainResultsSpaces = next.success?.spaces\n ? next.success?.spaces?.map(mapRoomToSelectOption)\n : [];\n })\n );\n\n this.subscription(\n 'laterResults',\n this.store.pipe(select(selectFilteredLaterDayResults)).subscribe((next) => {\n this.laterThatDayResults.next(next);\n })\n );\n\n this.subscription(\n 'nextDayResults',\n this.store.pipe(select(selectFilteredNextDayResults)).subscribe((next) => {\n this.nextBusinessDayResults.next(next);\n })\n );\n\n this.subscription(\n 'diffSize',\n this.store.pipe(select(selectFilteredDiffSizeResults)).subscribe((next) => {\n this.diffSizeResults.next(next);\n })\n );\n\n this.flattenLevelBuildings = this.store.pipe(\n select(buildingStateSelector),\n select(loadBuildings.selectors.optionalSuccess),\n filterUndefined(),\n map(flattenBuildingsWithLevels),\n shareReplay(1)\n );\n\n this.subscription(\n 'spaceChanges',\n this.spaceControl.valueChanges.subscribe((value) => {\n const mainResultsFiltered = cloneDeep(this.mainResults.value);\n const filteredRooms = this.mainResults.value.success?.spaces?.filter((s) => {\n if (s.id === value.value) {\n return true;\n }\n return false;\n });\n mainResultsFiltered.success.spaces = filteredRooms;\n this.mainResultsFiltered.next(mainResultsFiltered);\n })\n );\n\n // if coming from kiosk map url, route there\n if (this.payload?.floorMap) {\n this.router.navigate([`../home/floor-map`], {\n state: { ...this.payload },\n queryParams: {\n display: '',\n },\n });\n }\n\n this.subscription(\n 'spaceChanges',\n this.selectedToggle.subscribe((value) => {\n //Dispatches actions to load rooms based on the provided value.\n this.despatchLoadRooms();\n })\n );\n }\n\n /**\n * Dispatches actions to load rooms based on the provided value.\n * @param {number} value - The value indicating the mode of operation.\n * 0: Load rooms for regular view.\n * 1: Load rooms for results map view.\n */\n public despatchLoadRooms() {\n const selectedMenuIndex = this.selectedToggle.value; // List/Map/Calendar\n const isForFloorMap = this.payload?.floorMap;\n // If value is 0 and floorMap is not present in payload\n if(selectedMenuIndex === 0 && !isForFloorMap) {\n // Dispatch action to load rooms with query generated from form data\n this.store.dispatch(loadRoomsWithQuery(roomFormDataToQuery(this.data.value)));\n }\n \n // If value is 1 or floorMap is present in payload\n if(selectedMenuIndex === 1 || isForFloorMap) {\n // Dispatch action to load rooms for results map view with query generated from form data\n this.store.dispatch( loadRoomsForResultsMap.request(roomFormDataToQuery(this.data.value)));\n }\n }\n\n public clearRoomSearch() {\n this.resetInput = Date.now();\n this.selectedSpace = null;\n const mainResults = cloneDeep(this.mainResults.value);\n this.mainResultsFiltered.next(mainResults);\n this.searchStringPresent = false;\n }\n\n public inputTextChange(event: any) {\n this.searchStringPresent = !!event.length;\n }\n\n public changeInput(event) {\n if (event) {\n this.clearRoomSearch();\n }\n }\n\n public filteredRoomsChange(event: SelectOption[]) {\n const roomIds = event.map((o) => o.value);\n const mainResultsFiltered = cloneDeep(this.mainResults.value);\n const filteredRooms = this.mainResults?.value?.success?.spaces\n ? this.mainResults?.value?.success?.spaces?.filter((s) => {\n if (roomIds.includes(s.id)) {\n return true;\n }\n return false;\n })\n : [];\n mainResultsFiltered.success.spaces = filteredRooms;\n this.mainResultsFiltered.next(mainResultsFiltered);\n }\n\n public changeSearchResults() {\n this.editing_form.next(true);\n const dialog_ref = this.dialog.open(RoomBookingModalComponent, {\n panelClass: 'mck-modal',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n dialog_ref.afterClosed().subscribe(() => {\n this.editing_form.next(false);\n this.collapseService.collapsePanel();\n });\n }\n\n public filterResults() {\n this.dialog.open(RoomFiltersModalComponent, {\n panelClass: 'mck-modal',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n }\n\n public onCoachmarkAction(reason: SpaceFilterReason) {\n switch (reason) {\n case SpaceFilterReason.Filters:\n this.store.dispatch(clearRoomFilters());\n break;\n case SpaceFilterReason.OfficeRules:\n case SpaceFilterReason.DateTime:\n this.changeSearchResults();\n break;\n }\n }\n\n public selectedToggleChange(event: SelectOption) {\n this.selectedToggle.next(event.value);\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges\n} from '@angular/core';\n\nimport {\n humaniseDuration,\n timeFormatString,\n timeWithGmtOffsetFormatString,\n weekDayMonthYearFormat\n} from '@mckinsey-converge/base';\nimport {\n truncateLocationList,\n BookingFormData,\n getLastDateFromList\n} from '@mckinsey-converge/data-common';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { DateTZ } from '@mckinsey-converge/date-tz'\n\n@Component({\n selector: 'app-searched-location',\n template: `\n
\n
\n {{name}}\n {{date}}\n {{timing}}\n {{types}}\n No filters applied\n Filtering unavailable for this view\n {{filterDisplay}}\n
\n
\n \n Filter {{filterCount}}\n \n
\n
\n `,\n styleUrls: ['./searched-location.component.scss']\n})\nexport class SearchedLocationComponent implements OnInit, OnChanges {\n\n @Input()\n public data: BookingFormData;\n\n @Input()\n public filters: SelectOption[] = [];\n\n @Output()\n public changeClick = new EventEmitter();\n\n @Output()\n public filterClick = new EventEmitter();\n\n @Input()\n public canFilter = true;\n\n public name = '';\n public date = '';\n public timing = '';\n public types = '';\n public filterDisplay = '';\n public filterCount = '';\n\n constructor() {\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.data || changes.filters) {\n this.computeDisplay();\n }\n }\n\n public ngOnInit(): void {\n this.computeDisplay();\n }\n\n\n public computeDisplay() {\n if (!this.data) {\n return;\n }\n const { duration, dateTz, location, roomSize, bookingType, is_recurrent, recurrence_endTz } = this.data;\n\n \n // this.requestedEndDateTz = new DateTZ({ date: endDate.date.valueOf(), is_local_tz, building_tz })\n\n const group = location.find(l => l.groupHeader);\n if (group) {\n this.name = group.shortDisplay;\n } else {\n this.name = truncateLocationList(location);\n }\n\n // R--- blocked until TZ booking form inputs\n const building_tz = location[0]?.meta?.building?.timezone || location[0]?.meta?.city?.timezone;\n const startDate = new DateTZ({date: dateTz.ms, is_local_tz: false, building_tz })\n\n if(is_recurrent) {\n const occEndDate = getLastDateFromList( this?.data?.recurrence_starts );\n \tconst endRecDate = new DateTZ({date: occEndDate.ms, is_local_tz: false, building_tz });\n this.date = `From ${weekDayMonthYearFormat(startDate)} until ${weekDayMonthYearFormat(endRecDate)}` ;\n }\n else {\n this.date = weekDayMonthYearFormat(startDate);\n }\n\n const startDisplay = startDate.formatDate(`${timeFormatString()}`).toLocaleLowerCase();\n const endDate = startDate.addValue({ minutes: duration });\n const endDisplay = timeWithGmtOffsetFormatString(endDate);\n this.timing = `${startDisplay}-${endDisplay}`; // - TODO correct for DST?\n\n const durationDisplay = humaniseDuration(duration, 'short');\n this.types = `${durationDisplay}, ${bookingType.display}, ${roomSize.display}`;\n\n this.filterDisplay = this.filters.map(f => f.shortDisplay).join(', ');\n this.filterCount = this.filters.length > 0 ? `(${this.filters.length})` : '';\n }\n}\n","import {\n Component,\n OnInit\n} from '@angular/core';\nimport { first } from 'rxjs/operators';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n ApplicationLink,\n ApplicationService\n} from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'a-footer-menu',\n templateUrl: './footer-menu.component.html',\n styleUrls: ['./footer-menu.component.scss']\n})\nexport class FooterMenuComponent extends BaseDirective implements OnInit {\n\n /** Tiles to display on the home page */\n public tiles: ApplicationLink[] = [];\n\n constructor(private _service: ApplicationService) {\n super();\n }\n\n /** Angular Component initialisation lifecycle hook */\n public ngOnInit(): void {\n this._service.initialised.pipe(first(_ => _)).subscribe(() => {\n this.tiles = this._service.setting('app.home.tiles') || [];\n });\n }\n}\n","\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output\n} from '@angular/core';\nimport {\n ActivatedRoute,\n Router\n} from '@angular/router';\nimport { first } from 'rxjs/operators';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n ApplicationService,\n Building,\n BuildingLevel,\n OrganisationService\n} from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'a-map-controls',\n templateUrl: './map-controls.component.html',\n styleUrls: ['./map-controls.component.scss']\n})\nexport class MapControlsComponent extends BaseDirective implements OnInit {\n /** ID of the active building */\n @Input() public building: string;\n /** ID of the active level */\n @Input() public level: string;\n /** Emitter for changes to the active level */\n @Output() public levelChange = new EventEmitter();\n /** Details of the active building */\n public building_details: Building = this._org.building;\n /** List of available buildings */\n public building_list: Building[] = [];\n /** List of available levels */\n public level_list: readonly BuildingLevel[] = [];\n\n public get can_select_building(): boolean {\n return !!this._service.setting('app.explore.can_select_building');\n }\n\n constructor(\n private _route: ActivatedRoute,\n private _router: Router,\n private _service: ApplicationService,\n private _org: OrganisationService\n ) {\n super();\n }\n\n public ngOnInit() {\n this._org.listen('buildings').pipe(first(_ => !!_ && !!_.length)).subscribe(() => {\n this.subscription(\n 'route.query',\n this._route.queryParamMap.subscribe(params => {\n /* istanbul ignore else */\n if (params.has('level')) {\n const level_id = params.get('level');\n const level = this._org.levelWithID(level_id);\n this.level = level.id;\n this.setBuilding(level.building_id);\n this.levelChange.emit(this.level);\n this.clearTimeout('check_building');\n }\n })\n );\n this.building_list = this._org.buildings;\n this.timeout('check_building', () => {\n /* istanbul ignore else */\n if (!this.building) {\n this.setBuilding(this._org.building.id);\n }\n this.levelChange.emit(this.level);\n });\n });\n }\n\n public setBuilding(bld_id: string) {\n const building = this._org.buildings.find(bld => bld.id === bld_id);\n /* istanbul ignore else */\n if (building) {\n this.building_details = building;\n this.building = bld_id;\n this._org.building = building;\n this.level_list = building.levels;\n /* istanbul ignore else */\n if (this.level_list.length && !this.level_list.find(lvl => lvl.id === this.level)) {\n this.updateLevel(this.level_list[0].id);\n }\n }\n }\n\n public updateLevel(lvl_id: string) {\n this.level = lvl_id;\n this.levelChange.emit(this.level);\n this._router.navigate([], {\n relativeTo: this._route,\n queryParams: { level: lvl_id }\n });\n }\n}\n","
\n 1\"\n >\n \n {{ building_details?.code }} - {{ building_details?.name }} \n \n
\n
{{ bld.code }}
\n
{{ bld.name }}
\n
{{ bld.address }}
\n
\n
\n
\n \n \n \n \n {{ level.name }}\n \n \n \n
\n","import {\n Component,\n EventEmitter,\n Input,\n Output\n} from '@angular/core';\n\nimport {\n ApplicationLink,\n ApplicationService\n} from '@mckinsey-converge/data-common';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\nimport { DateNow } from '@mckinsey-converge/date-tz';\n\n\n@Component({\n selector: 'a-overlay-menu',\n templateUrl: './overlay-menu.component.html',\n styleUrls: ['./overlay-menu.component.scss']\n})\nexport class OverlayMenuComponent extends BaseDirective {\n /** Whether to show the menu */\n @Input() public show: boolean;\n /** Emitter for changes to show */\n @Output() public showChange = new EventEmitter();\n\n /** List of links to display on the menu */\n public get menu_items(): ApplicationLink[] {\n const settings = this._service.setting('app.general.menu') || { items: [] };\n return settings.items || [];\n }\n\n /** Copyright details for the application */\n public get copyright(): string {\n return (this._service.setting('app.general.menu') || {}).copyright || '';\n }\n\n public get settings() {\n const settings = this._service.setting('app.general.menu') || { position: '' };\n return settings;\n }\n\n constructor(private _service: ApplicationService) {\n super();\n }\n\n /** Current year to display for copyright */\n public get year(): number {\n return DateNow(new Date()).dateYear;\n }\n\n /** Close the overlay menu */\n public close() {\n this.show = false;\n this.showChange.emit(this.show);\n }\n\n public delayedClose() {\n this.timeout('close', () => this.close(), 50);\n }\n\n public cancelClose() {\n this.timeout('cancel_close', () => this.clearTimeout('close'), 10);\n }\n}\n","\n
\n
\n
\n \n
\n
\n \n
\n
\n Copyright © {{ year }} {{ copyright }}\n
\n
\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnInit\n} from '@angular/core';\nimport { throttleTime, tap } from 'rxjs/operators';\nimport { BehaviorSubject, fromEvent } from 'rxjs';\nimport { ImageDirective } from '@mckinsey-converge/base';\nimport { setupRoomImages } from '@mckinsey-converge/data-common';\nimport { SpaceImageObject } from 'libs/base/src/lib/types.utilities'\n\n@Component({\n selector: 'mck-responsive-inline-images',\n template: `\n
\n
\n \n
\n Images Coming Soon\n
\n \n
\n
\n
\n Images Coming Soon\n
\n
\n
\n `,\n styleUrls: ['./responsive-inline-images.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ResponsiveInlineImagesComponent extends ImageDirective implements OnInit {\n\n /** Input array of images */\n @Input() public rootFolderURL: string;\n @Input() public fileSlug: string;\n\n /** Ignore this param, it's only use is to bypass the image onload event in testing */\n @Input() public imagesLoaded: boolean;\n public loadImages = new BehaviorSubject([]);\n\n public foundImages: SpaceImageObject[] = [1,2,3].map(n => {\n return {path: `assets/img/rooms/placeholder-${n}.png`};\n });\n\n public mobile = false;\n\n constructor(private cdRef: ChangeDetectorRef,) {\n super();\n }\n\n public ngOnInit(): void {\n const breakpoint = 768;\n\n if (window) {\n this.mobile = window.innerWidth < breakpoint;\n }\n\n fromEvent(window, 'resize').pipe(throttleTime(500)).pipe(tap({\n next: val => {\n const target = val.target as Window;\n this.mobile = target.innerWidth < breakpoint;\n }\n })).subscribe();\n setupRoomImages(this, [1,2,3], this.rootFolderURL, this.fileSlug, this.imagesLoaded);\n this.subscription(\n\t\t\t\t\t\t'found_images',\n\t\t\t\t\t\tthis.loadImages.subscribe((imgArr: SpaceImageObject[]) => {\n\t\t\t\t\t\t\tif(imgArr.length) this.foundImages = imgArr;\n\t\t\t\t\t\t\tthis.cdRef.detectChanges();\n\t\t\t\t\t\t}));\n }\n\n public showLabel(path) {\n return path.includes('placeholder');\n } \n\n public get timestamp () {\n return (new Date()).getTime()\n }\n}\n","import {\n Component,\n Inject,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n MatDialogRef,\n MAT_DIALOG_DATA\n} from '@angular/material/dialog';\nimport {\n BaseClass\n} from '@mckinsey-converge/base';\nimport { ComposerService } from '@placeos/composer';\nimport { first } from 'rxjs/operators';\n\n@Component({\n selector: 'a-survey-modal',\n templateUrl: './survey-modal.component.html',\n styleUrls: ['./survey-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class SurveyModalComponent extends BaseClass implements OnInit {\n constructor(\n @Inject(MAT_DIALOG_DATA) public _data: any,\n private _composer: ComposerService,\n private _dialog_ref: MatDialogRef,\n ) {\n super();\n }\n\n /* present experience question by default */\n public token = '';\n public phase = 'intro';\n public baseUrl = '';\n\n public questions = {\n created_at: 0,\n updated_at: 0,\n header_question: \"What went wrong?\",\n header_subtext: \"Select one or several options\",\n options: [],\n id: \"\"\n }\n\n public answers = {\n questions_id: \"\",\n positive: true, // Experience is positive until the questions are displayed\n option_responses: [],\n comments: \"\"\n };\n\n // Show the questions and mark the experience negative. (false positive)\n public showQuestions(): void {\n this.answers.positive = false;\n this.phase = 'questions';\n }\n\n public ngOnInit(): void {\n /* fetch the question options once composer is initialized */\n this._composer.initialised.pipe(first(_ => _)).subscribe(() => {\n const token = this._composer.auth.token;\n this.token = token;\n this.baseUrl = this._composer.auth.api_endpoint.replace(this._composer.auth.route, '/api/staff/feedback')\n this.getFeedbackQuestionsFromApi(token, this._data)\n });\n }\n\n public getFeedbackQuestionsFromApi(token: string, questionID: string) {\n new Promise((resolve, reject) => {\n const url = `${this.baseUrl}/questions/${questionID}`;\n let result: any = null;\n this._composer.http.get(url).subscribe(\n (d) => (result = d),\n (e) => {\n reject(e);\n },\n () => {\n resolve(result);\n }\n );\n }).then(d => {\n this.questions = d;\n this.answers = {\n questions_id: this.questions.id,\n positive: true,\n option_responses: this.questions.options.map(q => ({ // map the questions to default answers.\n id: q.id,\n checked: false,\n })),\n comments: \"\"\n };\n }).catch(e => {\n console.log('error', e)\n });\n }\n\n // Handle the checkbox changes\n public handleChange(value: any) {\n this.answers.option_responses.some((o, i) => {\n if (o.id === value.id) {\n this.answers.option_responses[i].checked = !this.answers.option_responses[i].checked;\n return true;\n }\n });\n }\n\n // Handle the comment input changes\n public handleComment($evemt: any) {\n this.answers.comments = $evemt.target.value;\n }\n\n // Submit the Survey in it's current state.\n public confirm() {\n new Promise((resolve, reject) => {\n let result: any = null;\n this._composer.http.post(this.baseUrl, this.answers).subscribe(\n (d) => (result = d),\n (e) => {\n reject(e);\n },\n () => {\n resolve(result);\n }\n );\n }).then(d => {\n this.phase = 'exit';\n this.closeModal(true);\n }).catch(e => {\n console.log('error', e)\n this.phase = 'exit';\n this.closeModal(true);\n });\n \n }\n\n // Close the modal\n public closeModal(delayed: boolean = false) {\n if (delayed) {\n this.timeout('closeModal', () => {\n this._dialog_ref.close();\n }, 2000);\n } else {\n this._dialog_ref.close();\n }\n }\n}\n","
\n \n
\n
\n \n
\n How was your booking experience?\n
\n
\n
\n \n \n
\n
\n\n\n
\n
\n \n
\n \n What went wrong?\n

Select one or several options

\n
\n
\n
\n
\n {{question.option}}\n
\n
\n \n \n \n \n
\n
\n \n \n \n
\n\n
\n
\n \n
\n\n \n
\n Thank you!\n
\n \n
\n
\n
\n
","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n distinctUntilChanged,\n first,\n} from 'rxjs/operators';\nimport {\n ApplicationIcon,\n BookingFormState,\n SettingsService,\n openBookingSurvey,\n clearBookingFormData,\n BookingFormData,\n SeriesAction,\n selectActiveForm,\n OrganisationService\n} from '@mckinsey-converge/data-common';\nimport { loadRoomsForResults } from '@mckinsey-converge/rooms';\n\nimport { loadOrganisations } from '@mckinsey-converge/organisation';\nimport { BuildingStoreState } from '@mckinsey-converge/buildings';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport {\n NavigationEnd,\n Router,\n ActivatedRoute\n} from '@angular/router';\nimport {\n generateFeedbackUrl,\n Urls\n} from '../../utilities/urls';\nimport { SurveyModalComponent } from '../survey-modal/survey-modal.component';\nimport {\n Store, select\n} from '@ngrx/store';\n\nexport enum TopBarHeaderMode {\n Light = 'light',\n Dark = 'dark',\n}\n\nexport interface RoutePayload {\n /** IE ['/home', 'results'] */\n route: string[];\n /** IE { display: '/list' } */\n queryParams?: object;\n}\n\nexport type RoomBookingStoreState = BookingFormState & BuildingStoreState;\n\n@Component({\n selector: 'a-topbar-header',\n template: `\n
\n
\n \n
\n
\n
\n {{ logo.content }}\n \n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n \n
\n
\n `,\n styleUrls: ['./topbar-header.component.scss'],\n // encapsulation: ViewEncapsulation.None,\n})\nexport class TopbarHeaderComponent extends BaseDirective implements OnInit {\n /** Logo of the application organisation */\n public logo: ApplicationIcon;\n /** Whether to show menu */\n @Input() public menu: boolean;\n /** Whether to show modal close icon */\n @Input() public modal: boolean = false;\n /** Whether t show modal back icon */\n @Input() public backModal: boolean = false;\n /** Whether to disable the survey triggers */\n @Input() public noSurvey: boolean = false;\n /** Name of the page being rendered */\n @Input() public page: string;\n /** The theme to use **/\n @Input() public mode: TopBarHeaderMode = TopBarHeaderMode.Dark;\n /** Override the home route. **/\n @Input() public homeOverride: string | undefined;\n /** Show history back instead of logo block */\n @Input() public back: RoutePayload;\n /** Emitter for changes to menu state */\n @Output() public menuChange = new EventEmitter();\n /** Emitter for the close button */\n @Output() public closeCallback = new EventEmitter();\n /** Emitter for the back button */\n @Output() public onBack = new EventEmitter();\n /** Name of the currently active page */\n public currentPage: string;\n /** Survey modal state */\n public modalOpen: boolean = false;\n isEditSeries: boolean = false;\n\n public get feedback() {\n const feedback_url = this._org.getOrganizationFiltersByRoomType('feedback_url');\n return `${feedback_url}${this.currentPage}`;\n // return generateFeedbackUrl(this.currentPage);\n }\n\n public surveyDialogRef: MatDialogRef = null;\n\n public bookingCompleted: Date = new Date();\n public feedbackId: string = null;\n\n constructor(private store: Store,\n private _settings: SettingsService,\n private _dialog: MatDialog,\n private route: ActivatedRoute,\n private _org: OrganisationService,\n private _router: Router) {\n super();\n }\n\n public ngOnInit(): void {\n this.store.dispatch(loadOrganisations.request());\n this._settings.initialised.pipe(first(_ => _)).subscribe(() => {\n this.logo = this._settings.get(`app.logo_${this.mode}`) || { type: 'icon' };\n });\n this.timeout('Getting Title', () => this.updateRoute(document.title));\n this._router.events.subscribe((event: NavigationEnd) => {\n /* istanbul ignore else */\n if (event instanceof NavigationEnd) {\n this.timeout('Getting Title', () => this.updateRoute(document.title));\n }\n });\n\n // if the survey is allowed (don't in modals! due to duplicate appearances)\n if (!this.noSurvey) {\n // get the active form values\n this.subscription('openSurveyModal', this.store.pipe(\n distinctUntilChanged()\n ).subscribe((next: any | undefined) => {\n const feedbackId = next.organisation?.data?.success?._settings?.discovery_info?.feedback_id;\n if (feedbackId && this.feedbackId !== feedbackId) {\n this.feedbackId = feedbackId;\n }\n if (next.bookingForm?.bookingCompleted && this.bookingCompleted.getTime() < next.bookingForm.bookingCompleted.getTime()) {\n this.bookingCompleted = new Date(next.bookingForm.bookingCompleted.getTime());\n this.openFeedbackModal();\n }\n }));\n }\n\n\n this.subscription('activeForm', this.store.pipe(\n select(selectActiveForm),\n distinctUntilChanged()\n ).subscribe((next: BookingFormData | undefined) => {\n if (next) {\n this.isEditSeries = next.action === SeriesAction.EDIT;\n }\n }));\n }\n\n public updateRoute(location) {\n location = location.substr(0, location.indexOf(' |'));\n this.currentPage = location;\n }\n\n /** Set menu state to `true` */\n public showMenu() {\n this.menu = true;\n this.menuChange.emit(this.menu);\n }\n\n public async goToHome() {\n this.isEditSeries && this.clearFormAndResultData();\n await this._router.navigate([this.homeOverride ?? '/']);\n // await this._router.navigate(['/', 'home'], { relativeTo: this.route });\n this._dialog.closeAll();\n }\n\n\n\tpublic clearFormAndResultData() {\n\t\tthis.store.dispatch(clearBookingFormData());\n\t\tthis.store.dispatch(loadRoomsForResults.clear());\n\t}\n\n public goToHelp() {\n const help_url = this._org.getOrganizationFiltersByRoomType('help_url');\n window.open(help_url || Urls.Help);\n }\n\n public goToFeedback() {\n // Over-engineered button action to mimic/test booking confirmation event.\n this.store.dispatch(openBookingSurvey());\n }\n\n public openFeedbackModal() {\n if (!this.modalOpen && !this.surveyDialogRef) {\n this.modalOpen = true;\n this.surveyDialogRef = this._dialog.open(SurveyModalComponent, {\n disableClose: true,\n panelClass: 'mck-modal-survey',\n data: this.feedbackId,\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n this.surveyDialogRef.afterClosed().subscribe(() => {\n this.modalOpen = false;\n this.surveyDialogRef = null;\n });\n }\n\n }\n\n public async goToBackRoute() {\n this.onBack.emit();\n await this._router.navigate(this.back.route, { queryParams: this.back.queryParams });\n }\n\n}\n","import {\n Component,\n OnInit\n} from '@angular/core';\nimport {\n FormControl,\n FormGroup,\n Validators\n} from '@angular/forms';\nimport { first } from 'rxjs/operators';\n\nimport {\n ApplicationIcon,\n ApplicationService,\n UsersService\n} from '@mckinsey-converge/data-common';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'app-login',\n templateUrl: './login.component.html',\n styleUrls: ['./login.component.scss']\n})\nexport class LoginComponent extends BaseDirective implements OnInit {\n /** Logo of the application organisation */\n public logo: ApplicationIcon;\n /** Whether the user credentials are being checked */\n public loading: boolean;\n /** Form fields for the login form */\n public form: FormGroup;\n\n constructor(private _service: ApplicationService, private _users: UsersService) {\n super();\n }\n\n public ngOnInit(): void {\n this.loading = true;\n this.form = new FormGroup({\n username: new FormControl('', [Validators.required]),\n password: new FormControl('', [Validators.required])\n });\n this._service.initialised.pipe(first(_ => _)).subscribe(() => {\n this.loading = false;\n this.logo = this._service.setting('app.logo_light') || { type: 'icon' };\n });\n }\n\n /** Perform user login */\n public login() {\n this.loading = true;\n const form = this.form.value;\n this._users.login({\n username: form.username,\n password: form.password\n }, { form: true }).then(() => {\n this.loading = false;\n }, () => {\n this.loading = false;\n this.form.controls.password.setErrors({ check: true });\n });\n }\n\n}\n","
\n
\n
\n
\n
\n {{ logo.content }}\n \n
\n
\n
\n \n
\n \n Username:\n \n \n \n Username is required\n \n
\n
\n \n Password:\n \n \n \n Invalid username or password\n \n
\n
\n
\n
\n \n
\n
\n
\n
\n\n
\n
\n \n
\n
Converge is loading
\n
\n
\n","import {\n Component,\n EventEmitter,\n OnInit,\n Output,\n ViewEncapsulation\n} from '@angular/core';\n@Component({\n selector: 'app-map-controls',\n template: `\n
\n
\n \n
\n \n \n
\n \n \n
\n \n \n \n \n
\n
\n `,\n styleUrls: ['./map-controls.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n})\nexport class MapControlsComponent implements OnInit {\n @Output()\n public zoomOutClick = new EventEmitter();\n\n @Output()\n public zoomInClick = new EventEmitter();\n\n @Output()\n public refreshClick = new EventEmitter();\n\n @Output()\n public infoClick = new EventEmitter();\n\n @Output() toggleEvent = new EventEmitter();\n\n public isClosed = true;\n\n toggle() {\n this.toggleEvent.emit();\n this.isClosed = !this.isClosed;\n }\n\n constructor() {}\n\n ngOnInit(): void {}\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewEncapsulation\n} from '@angular/core';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { FormControl } from '@angular/forms';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { legendOptions } from '../map.utils';\n\n@Component({\n selector: 'app-map-filters',\n template: `\n
\n
\n \n \n
\n \n \n
\n \n
\n
\n \n \n \n \n
\n
\n `,\n styleUrls: ['./map-filters.component.scss'],\n encapsulation: ViewEncapsulation.Emulated\n})\nexport class MapFiltersComponent extends BaseDirective implements OnInit {\n\n public legendOptions = legendOptions();\n\n @Input()\n public buildings: SelectOption[];\n\n @Input()\n public selectedBuilding: SelectOption;\n\n @Output()\n public selectedBuildingChange = new EventEmitter>();\n\n @Input()\n public levels: SelectOption[];\n\n @Input()\n public selectedLevel: SelectOption;\n\n @Output()\n public selectedLevelChange = new EventEmitter>();\n\n @Input()\n public spaces: SelectOption[];\n\n @Output()\n public selectedSpaceChange = new EventEmitter>();\n\n @Input()\n public selectedSpace: SelectOption;\n\n @Output()\n public searchClick = new EventEmitter();\n\n public buildingControl = new FormControl();\n\n public levelControl = new FormControl();\n\n public spaceControl = new FormControl();\n\n public resetInput: number;\n\n public searchStringPresent = false;\n\n constructor() {\n super();\n }\n\n public ngOnInit(): void {\n this.subscription('buildingChanges',\n this.buildingControl.valueChanges.subscribe(value => this.selectedBuildingChange.emit(value)));\n this.subscription('levelChanges',\n this.levelControl.valueChanges.subscribe(value => this.selectedLevelChange.emit(value)));\n this.subscription('spaceChanges',\n this.spaceControl.valueChanges.subscribe(value => {\n this.selectedSpaceChange.emit(value);\n this.searchClick.emit();\n }));\n }\n\n public clearRoomSearch() {\n this.resetInput = Date.now();\n this.selectedSpace = null;\n this.searchStringPresent = false;\n // TODO, reset the focused room if required?\n }\n\n public inputTextChange(event: any) {\n this.searchStringPresent = !!event.length;\n }\n}\n","import {\n Component,\n Inject,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n Space,\n RoomResultsViewModel,\n} from '@mckinsey-converge/data-common';\nimport { MAP_OVERLAY_DATA } from '@acaprojects/ngx-interactive-map';\n\n\ninterface SpaceWithReturnData extends Space {\n // callback?: Function,\n room?: RoomResultsViewModel,\n parentComponent?: any,\n}\n/**\n * Replaces the built-in {@link MapPinComponent} based on design.\n */\n@Component({\n selector: 'app-map-overlay',\n template: `\n
\n \n
\n
\n
\n \n
\n
\n
\n {{data.simple_name || 'No Label'}}\n \n \n
{{ data.status === 'requestable' ? 'Requestable' : 'Bookable'}} {{ data?.room?.space?.availableOccurrences }} out of {{ data?.room?.space?.totalOccurrences }}
\n
\n
\n
\n\n
\n `,\n styleUrls: ['./map-overlay.component.scss'],\n encapsulation: ViewEncapsulation.Emulated\n})\nexport class MapOverlayComponent implements OnInit {\n constructor(\n @Inject(MAP_OVERLAY_DATA) public data: SpaceWithReturnData,\n ) {\n }\n public ngOnInit(): void {\n }\n\n\n public roomDataCallback() {\n if (this.data.parentComponent.roomSelected && this.data.room) {\n this.data.parentComponent.roomSelected(this.data.room)\n }\n }\n\n public get is_recurrent () {\n return this.data.parentComponent?.bookingFormData?.value?.is_recurrent || false;\n }\n\n public closeOverlay() {\n this.data.parentComponent?.closeMapOverlayOutlet();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { BehaviorSubject, combineLatest, interval } from 'rxjs';\nimport { BaseDirective, HashMap, Point } from '@mckinsey-converge/base';\nimport { MapFeature } from '@acaprojects/ngx-interactive-map/lib/helpers/map.interfaces';\nimport { select, Store } from '@ngrx/store';\nimport { BuildingStoreState } from '@mckinsey-converge/buildings';\nimport {\n Building,\n BuildingLevel,\n SettingsService,\n Space,\n mapBuildingLevelToOption,\n mapResultsToViewModels,\n RoomResultsViewModel,\n selectActiveForm,\n selectBookingLocations,\n selectMapFilteredResults,\n selectSelectedBuildingOptions,\n roomFormDataToQuery,\n FilteredSpaces,\n BookingStoreState,\n storeBookingFormData,\n BookingFormData,\n MapListener,\n selectFilteredDiffSizeResults\n} from '@mckinsey-converge/data-common';\nimport { distinctUntilChanged, map, take, withLatestFrom } from 'rxjs/operators';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { filterUndefined } from '@mckinsey-converge/rx-utils';\nimport { MatDialog } from '@angular/material/dialog';\nimport { OfficeInformationModalComponent } from 'src/app/map/office-information-modal/office-information-modal.component';\nimport {\n CENTER_POINT,\n generateMapListenersForSpace,\n generateMapStyleForSpace,\n MAX_ZOOM_LEVEL,\n MIN_ZOOM_LEVEL,\n roomToMapFeature,\n} from 'src/app/map/map.utils';\nimport {\n loadRoomsForResults,\n loadRoomsForResultsMap,\n mapRoomToSelectOption,\n RoomStoreState,\n} from '@mckinsey-converge/rooms';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { UserStoreState } from '@mckinsey-converge/user';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Location } from '@angular/common';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\n\nexport type MapSearchStoreState = BuildingStoreState &\n RoomStoreState &\n BookingStoreState &\n UserStoreState;\n\n@Component({\n selector: 'app-map-search',\n template: `\n
\n
\n \n \n
\n
\n
\n \n
\n \n \n \n \n
\n
\n `,\n styleUrls: ['./map-search.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n animations: [\n trigger('expandHeight', [\n state(\n 'open',\n style({\n height: '470px',\n })\n ),\n state(\n 'closed',\n style({\n height: 'calc(100vh - 270px)',\n })\n ),\n transition('open <=> closed', animate('600ms ease-out')),\n ]),\n ],\n})\nexport class MapSearchComponent extends BaseDirective implements OnInit {\n @Input()\n public openHeader: boolean = true;\n\n public zoom = new BehaviorSubject(MIN_ZOOM_LEVEL);\n\n public center = new BehaviorSubject(CENTER_POINT);\n public listeners = new BehaviorSubject([]);\n\n public focusedMapSpace = new BehaviorSubject(undefined);\n public features = combineLatest([this.focusedMapSpace]).pipe(\n map((items) => items.filter((i) => !!i))\n );\n\n public focusedRoom = new BehaviorSubject(undefined);\n\n public resultBuildings = new BehaviorSubject([]);\n public resultSpaces = new BehaviorSubject([]);\n // public resultSpaces = new BehaviorSubject>(\n // LoadingModel.empty()\n // );\n\n public activeBuilding = new BehaviorSubject(undefined);\n public activeLevel = new BehaviorSubject(undefined);\n public activeSpace = new BehaviorSubject(undefined);\n\n /** Mapping of elements to CSS styles */\n public style_map = new BehaviorSubject>>({});\n\n public mapUrl = this.activeLevel.pipe(map((level) => level?.map_url ?? ''));\n\n public bookingLocations = new BehaviorSubject[]>([]);\n public buildingLevelOptions = new BehaviorSubject[]>([]);\n public spaceListOptions = new BehaviorSubject[]>([]);\n\n public activeBuildingOption = combineLatest([this.activeBuilding, this.bookingLocations]).pipe(\n map(([building, locations]) => locations.find((l) => l.value === building?.id))\n );\n\n public activeLevelOption = this.activeLevel.pipe(map(mapBuildingLevelToOption));\n public activeSpaceOption = this.activeSpace.pipe(map(mapRoomToSelectOption));\n public bookingFormData = new BehaviorSubject(undefined);\n public floorData: any;\n public floorDataParam: any;\n @Output() toggleEvent = new EventEmitter();\n\n //to capture state for toggling expandHeight animation\n public isOpen = true;\n resultsLoading: any;\n\n propagateToggle() {\n this.toggleEvent.emit();\n this.isOpen = !this.isOpen;\n }\n \n\n constructor(\n private store: Store,\n public dialog: MatDialog,\n private settingService: SettingsService,\n private router: Router,\n private location: Location,\n private route: ActivatedRoute\n ) {\n super();\n this.floorData = location.getState();\n }\n\n public ngOnInit(): void {\n // this.resultsLoading = this.resultSpaces.pipe(map((m) => m.isLoading));\n \n this.subscription(\n 'bookingLocations',\n this.store.pipe(select(selectBookingLocations)).subscribe((next) => {\n this.bookingLocations.next(next);\n // update the map view MCK-1100 when location changes\n const self = this;\n setTimeout(() => {\n self.selectActiveBuilding(self.bookingLocations.value[0]);\n }, 0);\n })\n );\n this.subscription(\n 'bookingSpaceResults',\n combineLatest([\n this.store.pipe(\n select(selectMapFilteredResults),\n map((r: LoadingModel) => { \n this.resultsLoading = r.isLoading;\n return r.success;})\n ),\n this.activeBuilding.pipe(filterUndefined()),\n this.activeLevel.pipe(filterUndefined()),\n ]).subscribe(([filteredSpaces, building, level]) => {\n const spacesFromSelection = (filteredSpaces.spaces || []).filter(\n (s) => !!s.map_id && s.zones.includes(building.id)\n );\n this.resultSpaces.next(spacesFromSelection);\n\n const listeners: MapListener[] = [];\n const styles: HashMap> = {};\n const colour_map = this.settingService.get('app.explore.colors') || {};\n spacesFromSelection.forEach((space) => {\n const status = filteredSpaces.statusMap[space.id];\n const mapStyle = generateMapStyleForSpace(space, status, colour_map);\n styles[`#${mapStyle.id}`] = mapStyle.styles;\n listeners.push(\n ...generateMapListenersForSpace(\n space,\n () => {},\n () => {},\n status !== 'in-use' ? \n () => {\n this.activeSpace.next(space);\n this.focusOnRoom(status);\n } \n : ()=> {}\n )\n );\n });\n this.style_map.next(styles);\n this.listeners.next(listeners);\n })\n );\n this.subscription(\n 'bookingResults',\n this.resultSpaces\n .pipe(withLatestFrom(this.activeSpace))\n .subscribe(([resultSpaces, activeSpace]) => {\n this.spaceListOptions.next(resultSpaces.map(mapRoomToSelectOption));\n })\n );\n\n this.subscription(\n 'storeResultedBuildings',\n this.store.pipe(select(selectSelectedBuildingOptions)).subscribe((buildings) => {\n this.resultBuildings.next(buildings);\n // if we dont have active building yet, set it here.\n if (buildings.length > 0 && !this.activeBuilding.value) {\n const firstBuilding = buildings[0];\n this.activeBuilding.next(firstBuilding);\n }\n })\n );\n\n this.subscription(\n 'activeBuildingChange',\n this.activeBuilding\n .pipe(\n filterUndefined(),\n map((b: Building) => b.levels)\n )\n .subscribe((levels) => {\n this.buildingLevelOptions.next(levels.map(mapBuildingLevelToOption));\n \n if(this.activeLevel.value){\n this.floorDataParam = {\n display: this.activeLevel.value.name,\n value: this.activeLevel.value.id,\n };\n this.selectBuildingLevel(this.floorDataParam);\n setTimeout(() => {\n this.refreshFloorNumber();\n });\n }\n \n })\n );\n\n // if levels change and active level no longer part of list, pick first.\n this.subscription(\n 'updateActiveLevelOnActiveBuildingChange',\n this.activeBuilding\n .pipe(\n filterUndefined(),\n distinctUntilChanged(),\n withLatestFrom(this.activeLevel),\n map(\n ([building, activeLevel]) =>\n (activeLevel && building.levels.find((l) => l.id === activeLevel.id)) ||\n building.levels[0]\n )\n )\n .subscribe((level) => {\n this.activeLevel.next(level);\n })\n );\n\n // re-request rooms every minute to update space status.\n this.subscription(\n 'updateSpaceStatusInterval',\n interval(60 * 1000)\n .pipe(withLatestFrom(this.store.select(selectActiveForm)))\n .subscribe(([, form]) => {\n this.store.dispatch(loadRoomsForResultsMap.request(roomFormDataToQuery(form) ));\n })\n );\n\n // get the active form values\n this.subscription(\n 'activeForm',\n this.store\n .pipe(select(selectActiveForm), distinctUntilChanged())\n .subscribe((next: BookingFormData | undefined) => {\n if (next) {\n this.bookingFormData.next(next);\n }\n })\n );\n\n if (this.floorData?.payload) {\n this.floorDataParam = {\n display: this.floorData?.payload.name,\n value: this.floorData?.payload.id,\n };\n this.selectBuildingLevel(this.floorDataParam);\n setTimeout(() => {\n this.refreshFloorNumber();\n });\n }\n }\n\n public refreshFloorNumber(): void {\n this.activeLevelOption = this.activeLevel.pipe(map(mapBuildingLevelToOption));\n }\n\n public zoomIn() {\n if (this.zoom.value < MAX_ZOOM_LEVEL) {\n this.zoom.next(this.zoom.value + 1);\n }\n }\n\n public zoomOut() {\n if (this.zoom.value > MIN_ZOOM_LEVEL) {\n this.zoom.next(this.zoom.value - 1);\n }\n }\n\n public displayOfficeInformation() {\n this.dialog.open(OfficeInformationModalComponent, {\n data: this.activeBuilding.value,\n panelClass: 'mck-alert',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n }\n\n public resetZoomLevels() {\n this.zoom.next(MIN_ZOOM_LEVEL);\n this.center.next(CENTER_POINT);\n this.focusedRoom.next(undefined);\n // this.focusedMapSpace.next(undefined);\n }\n\n public closeMapOverlayOutlet = () => this.focusedMapSpace.next(undefined);\n \n\n public selectActiveBuilding(selection: SelectOption) {\n this.resultBuildings\n .pipe(\n map((all) => all.find((b) => b.id === selection.value)),\n take(1),\n filterUndefined()\n )\n .subscribe((next) => {\n this.activeBuilding.next(next);\n });\n }\n\n public selectBuildingLevel(selection: SelectOption) {\n this.activeBuilding\n .pipe(\n map((b) => b.levels?.find((l) => l.id === selection?.value)),\n take(1),\n filterUndefined()\n )\n .subscribe((next) => {\n\t\t\t\tthis.store.dispatch(loadRoomsForResultsMap.request(roomFormDataToQuery(this.bookingFormData.value) ));\n this.activeLevel.next(next);\n\n /**\n * update mapUrl as per active level on change of filter search\n */\n this.mapUrl = this.activeLevel.pipe(map((level) => level?.map_url ?? ''))\n });\n }\n\n public selectActiveSpace(selection: SelectOption) {\n this.resultSpaces\n .pipe(\n map((all) => all.find((s) => s.id === selection?.value)),\n take(1),\n filterUndefined()\n )\n .subscribe((next) => {\n this.activeSpace.next(next);\n });\n }\n\n public focusOnRoom(status?:string) {\n this.activeSpace.pipe(take(1), filterUndefined()).subscribe((next) => {\n let delay = 0;\n if (next.level.id !== this.activeLevel.value.id) {\n this.activeLevel.next(next.level);\n delay = 500;\n }\n this.timeout(\n 'updateLevelAndRoom',\n () => {\n const focusedRoom = mapResultsToViewModels(\n [this.activeSpace.value],\n [this.activeLevel.value],\n [this.activeBuilding.value]\n );\n this.focusedRoom.next(focusedRoom[0]);\n this.focusedMapSpace.next(roomToMapFeature(this.focusedRoom.value, this, status));\n this.zoom.next(MAX_ZOOM_LEVEL);\n },\n delay\n );\n });\n }\n\n public roomSelected(room: RoomResultsViewModel) {\n\n\n const { is_recurrent } = this.bookingFormData.value;\n this.bookingFormData.value.recurrence_exceptions = [];\n if(is_recurrent){\n // Handle recurrence conflicts if the booking is part of a recurring series\n const spaceConflicts = room.space.recurrence_availability.filter(recurr => !recurr.available);\n this.bookingFormData.value.recurrence_exceptions = spaceConflicts.map((recurr)=> recurr.date);\n }\n\n\n // Handle timezone offset for accurate date and time information\n let { dateTz } = this.bookingFormData.value;\n // if (this.offset) {\n dateTz = dateTz.addValue({ minutes: 0 });\n // }\n\n /**\n * selectedRoom.space is fully fledged Space class\n * this.bookingFormData.value.booking.room is not and does not contain the timezone\n * this.bookingFormData.value.booking.timezone is legit\n */\n // UPDATE: providing payload as part of extras instead dispatching storeBookingFormData event to avoid redundant backend request calls\n this.router.navigate(['room'], { relativeTo: this.route, state:{payload : {\n ...this.bookingFormData.value,\n // buildings: this._org.buildings, // require to manage browser refresh on room detail screen!\n dateTz,\n offset: 0,\n selectedRoom: room\n }\n }});\n\n\n // submit\n // this.store.dispatch(\n // storeBookingFormData({\n // payload: {\n // ...this.bookingFormData.value,\n // selectedRoom: room,\n // },\n // })\n // );\n\n // this.router.navigate(['room'], { relativeTo: this.route });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MapSearchComponent } from './map-search/map-search.component';\nimport { MapControlsComponent } from './map-controls/map-controls.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { LibraryModule } from '@acaprojects/ngx-interactive-map';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MapFiltersComponent } from './map-filters/map-filters.component';\nimport { UiModule } from '@mckinsey-converge/ui';\nimport { OfficeInformationModalComponent } from './office-information-modal/office-information-modal.component';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MapOverlayComponent } from './map-overlay/map-overlay.component';\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\n\nexport const mapModuleImports = [\n CommonModule,\n MatButtonModule,\n LibraryModule,\n MatSelectModule,\n UiModule,\n MatDialogModule,\n NgxSkeletonLoaderModule\n];\n\nexport const mapModuleDeclarations = [\n MapSearchComponent,\n MapControlsComponent,\n MapFiltersComponent,\n OfficeInformationModalComponent,\n MapOverlayComponent\n];\n\n@NgModule({\n declarations: [\n ...mapModuleDeclarations\n ],\n exports: [\n ...mapModuleDeclarations\n ],\n imports: [\n ...mapModuleImports\n ]\n})\nexport class MapModule {\n}\n","import { SelectOption } from '@mckinsey-converge/ui';\nimport {\n Space,\n SpaceStatus,\n RoomResultsViewModel,\n MapListener\n} from '@mckinsey-converge/data-common';\nimport {\n HashMap,\n Point\n} from '@mckinsey-converge/base';\nimport { MapFeature } from '@acaprojects/ngx-interactive-map/lib/helpers/map.interfaces';\nimport { MapOverlayComponent } from 'src/app/map/map-overlay/map-overlay.component';\n\nexport const MIN_ZOOM_LEVEL = 1;\nexport const MAX_ZOOM_LEVEL = 10;\nexport const CENTER_POINT: Point = { x: 0.5, y: 0.5 };\n\nconst mapSpaceStatusToDisplay = (status: SpaceStatus): string => {\n switch (status) {\n case SpaceStatus.NotBookable:\n return 'Not Bookable';\n case SpaceStatus.Requestable:\n return 'Available by Request';\n case SpaceStatus.Unavailable:\n return 'In Use';\n case SpaceStatus.Available:\n default:\n return 'Available';\n }\n};\n\nconst mapSpaceStatusToOption = (status: SpaceStatus) => ({\n value: status,\n display: mapSpaceStatusToDisplay(status)\n});\n\nexport const legendOptions = (): SelectOption[] => [\n SpaceStatus.Available,\n SpaceStatus.Requestable,\n SpaceStatus.Unavailable,\n SpaceStatus.NotBookable\n].map(mapSpaceStatusToOption);\n\n\nexport const defaultMapBookingRules = [\n 'Rooms showing yellow are restricted and must be requested',\n 'Rooms showing green are available to book for one hour',\n 'Rooms showing red are booked',\n 'Rooms showing grey are not bookable but may be used if they are empty'\n];\n\nexport const defaultMapBookingSubtitle = 'You may request restricted rooms but they will need to be approved by an admin';\n\nexport const generateMapStyleForSpace = (\n space: Space,\n status: SpaceStatus,\n colorStatusMap: HashMap) => {\n const id =\n `${space.map_id}`.indexOf('area') < 0\n ? `area-${space.map_id}-status`\n : space.map_id;\n return (\n {\n id,\n styles: {\n fill: colorStatusMap[`space-${status}`] || '#000',\n opacity: 0.99\n }\n });\n};\n\n/**\n * Generates actions for mapview handling.\n * @param space - the space to generate\n * @param clickSpace - called when clicked or touched\n * @param hoverSpace - called when you hover over a space\n * @param leaveSpace - called when you leave a space.\n */\nexport const generateMapListenersForSpace = (\n space: Space,\n hoverSpace: () => void,\n leaveSpace: () => void,\n clickSpace: () => void\n): MapListener[] => {\n const id =\n `${space.map_id}`.indexOf('area') < 0\n ? `area-${space.map_id}-status`\n : space.map_id;\n const listeners: MapListener[] = [];\n listeners.push({\n id,\n event: 'mouseenter',\n callback: hoverSpace\n });\n listeners.push({\n id,\n event: 'mouseleave',\n callback: leaveSpace\n });\n if (space.bookable) {\n listeners.push({\n id,\n event: 'click',\n callback: clickSpace\n });\n listeners.push({\n id,\n event: 'touchend',\n callback: clickSpace\n });\n }\n return listeners;\n};\n\n\nexport const spaceToMapFeature = (space: Space): MapFeature => ({\n id: `area-${space.map_id}-status`,\n coordinates: null,\n content: MapOverlayComponent,\n data: {\n ...space\n }\n});\n\nexport const roomToMapFeature = (room: RoomResultsViewModel, parentComponent?: any, status?: string): MapFeature => ({\n id: `area-${room.space.map_id}-status`,\n coordinates: null,\n content: MapOverlayComponent,\n data: {\n ...room.space,\n parentComponent,\n room,\n status:status\n }\n});","import {\n Component,\n Inject,\n ViewEncapsulation\n} from '@angular/core';\nimport { HashMap } from '@mckinsey-converge/base';\nimport { \n BookingRuleDetails,\n Building,\n} from '@mckinsey-converge/data-common';\nimport {\n MAT_DIALOG_DATA,\n MatDialogRef\n} from '@angular/material/dialog';\nimport {\n defaultMapBookingRules,\n defaultMapBookingSubtitle\n} from 'src/app/map/map.utils';\n\n@Component({\n selector: 'app-office-information-modal',\n template: `\n \n
\n
Booking in {{building?.name}}
\n
{{targetLinks(info)}}
\n
\n
\n
    \n \n
\n
\n
\n {{group.title}}\n
    \n \n
\n
\n
\n When booking from maps:\n
    \n \n
\n \n

\n For more info email: {{contact}}\n

\n

\n
\n
\n
\n \n
\n
\n `,\n styleUrls: ['./office-information-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class OfficeInformationModalComponent {\n constructor(@Inject(MAT_DIALOG_DATA) public building: Building,\n private dialogRef: MatDialogRef) {\n }\n\n\n /** Booking rule details */\n public get rules(): string[] {\n const building: Building = this.building;\n const details: BookingRuleDetails = building?.booking_details;\n return details?.rules || [] as any;\n }\n\n /** Booking rule details */\n public get info(): string {\n const building: Building = this.building;\n const details: BookingRuleDetails = building?.booking_details;\n return details?.info || defaultMapBookingSubtitle;\n }\n\n public get customHtml(): string | undefined {\n const building: Building = this.building;\n const details: BookingRuleDetails = building?.booking_details;\n return details?.custom_html;\n }\n\n /** Booking map rule details */\n public get map_rules(): string[] {\n const building: Building = this.building;\n const details: BookingRuleDetails = building?.booking_details;\n return details?.map_rules || defaultMapBookingRules as any;\n }\n\n /** Other special booking rules */\n public get other_rules(): { title: string, rules: string[] }[] {\n const building: Building = this.building;\n const details: BookingRuleDetails = building?.booking_details;\n const rules: HashMap = (details as any)?.other_rules || {};\n return Object.keys(rules).reduce((a, v) => {\n \n a.push({ title: v, rules: rules[v] || [] });\n return a;\n }, []);\n }\n\n public get contact(): string {\n const building: Building = this.building;\n const details: BookingRuleDetails = building?.booking_details;\n return details?.contact || '';\n }\n\n public get link(): { url?: string, name?: string } {\n const building: Building = this.building;\n const details: BookingRuleDetails = building?.booking_details;\n return details?.link || {};\n }\n\n public closeModal() {\n this.dialogRef.close();\n }\n\n public targetLinks(info: string) {\n const regex = /[] = [\n BaseDirective,\n LoginComponent,\n TopbarHeaderComponent,\n ResponsiveInlineImagesComponent,\n OverlayMenuComponent,\n FooterMenuComponent,\n MapControlsComponent\n];\n\nconst MATERIAL_MODULES: any[] = [\n MatButtonModule,\n MatSnackBarModule,\n MatDialogModule,\n MatFormFieldModule,\n MatInputModule,\n MatProgressSpinnerModule,\n MatProgressBarModule,\n MatAutocompleteModule,\n MatSelectModule,\n MatChipsModule,\n MatRippleModule,\n MatMenuModule,\n MatCheckboxModule,\n MatTooltipModule,\n MatRadioModule,\n MatTabsModule,\n MatSlideToggleModule\n];\n\nconst CDK_MODULES: any[] = [\n ScrollingModule,\n DragDropModule,\n CdkTableModule\n];\n\n\n@NgModule({\n declarations: [\n ...COMPONENTS\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n APipesModule,\n AInteractiveMapModule,\n ACustomEventsModule,\n RouterModule,\n EditorModule,\n ComposerModule,\n LegacyUiModule,\n LegacyOverlaysModule,\n IvyCarouselModule,\n ...MATERIAL_MODULES,\n ...CDK_MODULES\n ],\n exports: [\n APipesModule,\n AInteractiveMapModule,\n ACustomEventsModule,\n LegacyUiModule,\n LegacyOverlaysModule,\n ...COMPONENTS,\n ...MATERIAL_MODULES,\n ...CDK_MODULES\n ]\n})\nexport class SharedContentModule {\n}\n","import { Component, OnInit } from '@angular/core';\nimport { filter, first, map, distinctUntilChanged, shareReplay } from 'rxjs/operators';\nimport {\n ApplicationLoadingState,\n BaseDirective,\n closestToTimeSlot,\n closestToTimeSlotTz,\n LoadingState,\n} from '@mckinsey-converge/base';\nimport {\n ApplicationIcon,\n ApplicationService,\n Building,\n BuildingCity,\n defaultRoomSizeOption,\n DEFAULT_BOOKING_DURATION,\n flattenDisplayOffices,\n internalBookingTypeOption,\n mapBuildingToSelectOption,\n mapCityToAllSelectOption,\n mapResultsToViewModels,\n OrganisationService,\n SpacesService,\n storeBookingFormData,\n availabilityOptionsToQuery,\n bookingTypeOptions,\n selectFilteredDiffSizeResults,\n flattenBuildingsWithLevels,\n clearRoomFilters,\n allBookingTypeOption,\n roomSizeOptions,\n roomSizeOptionsKiosk,\n} from '@mckinsey-converge/data-common';\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs';\nimport { select, Store } from '@ngrx/store';\nimport { loadUser, selectHasUserData, UserStoreState } from '@mckinsey-converge/user';\nimport { ComposerService } from '@placeos/composer';\nimport { ActivatedRoute, Router, NavigationStart, Event as NavigationEvent } from '@angular/router';\n\nimport {\n DateNow,\n DateTZ,\n convertLocalTimestampToTimezonedDateTz,\n} from '@mckinsey-converge/date-tz';\nimport { DateTime } from 'luxon';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport {\n buildingStateSelector,\n loadBuildings,\n selectBuildingOptionsGroupedByCity,\n} from '@mckinsey-converge/buildings';\nimport { loadDiffSizeResults, loadRoomsForResults, loadRoomsForResultsMap } from '@mckinsey-converge/rooms';\nimport { timeStamp } from 'console';\nimport { filterUndefined } from '@mckinsey-converge/rx-utils';\n\n@Component({\n selector: 'app-shell-wrapper',\n templateUrl: './shell.component.html',\n styleUrls: ['./shell.component.scss'],\n})\nexport class ShellWrapperComponent extends BaseDirective implements OnInit {\n /** Loading state of the application */\n public loading_state: ApplicationLoadingState;\n /** Logo of the application organisation */\n public logo: ApplicationIcon;\n\n private userLoading = new BehaviorSubject(true);\n public isQRCode = new BehaviorSubject(true);\n public buildingOptions = new BehaviorSubject[]>([]);\n public zone_id: any;\n public floor: any;\n\n constructor(\n private _service: ApplicationService,\n private placeOs: ComposerService,\n private _org: OrganisationService,\n private activatedRoute: ActivatedRoute,\n private _spaces: SpacesService,\n private router: Router,\n private store: Store\n ) {\n super();\n\n // Initialize roomID\n let roomId = null;\n if (this.activatedRoute.snapshot.queryParamMap.get('id')) {\n roomId = this.activatedRoute.snapshot.queryParamMap.get('id');\n } else if (localStorage.oauth_redirect && localStorage.oauth_redirect.includes('?id=')) {\n roomId = localStorage.oauth_redirect.split('=')[1];\n }\n // roomId ? this.isQRCode.next(false) : this.isQRCode.next(true);\n\n // Initialize zoneID\n let zone_id = null;\n if (this.activatedRoute.snapshot.queryParamMap.get('zone_id')) {\n zone_id = this.activatedRoute.snapshot.queryParamMap.get('zone_id');\n } else if (\n localStorage.oauth_redirect &&\n localStorage.oauth_redirect.includes('?zone_id=')\n ) {\n zone_id = localStorage.oauth_redirect.split('=')[1];\n if (zone_id.includes('&')) {\n zone_id = zone_id.split('&')[0];\n }\n }\n\n this.zone_id = zone_id;\n\n // Initialize floor number\n let floor = null;\n if (this.activatedRoute.snapshot.queryParamMap.get('floor')) {\n floor = this.activatedRoute.snapshot.queryParamMap.get('floor');\n } else if (localStorage.oauth_redirect && localStorage.oauth_redirect.includes('&floor=')) {\n floor = localStorage.oauth_redirect.split('&floor=')[1];\n }\n this.floor = floor;\n (floor && zone_id) || roomId ? this.isQRCode.next(false) : this.isQRCode.next(true);\n }\n\n /** Whether the user needs to login */\n public get show_login(): Observable {\n return this.userLoading;\n }\n\n /** Whether a module is still loading data */\n public get is_loading(): Observable {\n return this.userLoading;\n }\n\n /** List of modules with a loading state */\n public get loading_state_list(): LoadingState[] {\n const list: LoadingState[] = [];\n for (const mod in this.loading_state) {\n if (this.loading_state[mod]) {\n list.push(this.loading_state[mod]);\n }\n }\n return list;\n }\n\n /**\n * Function: To check and fetch room details if available for the scanned roomId\n * @param buildings\n * @param roomId\n */\n public checkRoomId(buildings: Building[], roomId: string) {\n let formGroup = {\n location: [],\n date: closestToTimeSlot(DateTime.now(), 15).valueOf(),\n dateTz: closestToTimeSlotTz(new DateTZ({ date: Date.now(), is_local_tz: true }), 15),\n duration: DEFAULT_BOOKING_DURATION,\n bookingType: bookingTypeOptions[0],\n roomSize: defaultRoomSizeOption,\n selectedRoom: null,\n timezone: null,\n buildings: buildings,\n };\n\n const params = {\n room_ids: roomId,\n };\n\n const availibityParams = {\n room_ids: roomId,\n dateTz: closestToTimeSlotTz(new DateTZ({ date: Date.now(), is_local_tz: false }), 15),\n duration: DEFAULT_BOOKING_DURATION,\n hide_declined: true,\n };\n const query = availabilityOptionsToQuery(availibityParams);\n this._spaces.queryRooms(query).subscribe(\n (res) => {\n //Convert raw data into API object\n const list = res.map((i) => this._spaces.process(i));\n this._spaces.setSpaceList(list);\n /**\n * Building form data to resue to navigate to result page if room is not available!\n */\n const bookingRoom = mapResultsToViewModels(\n list,\n list[0].building.levels,\n buildings\n );\n const city = list[0].building.city;\n const timezone = list[0].timezone;\n const grouped_by_city = {\n key: { name: city, timezone },\n value: buildings?.filter((bld) => bld.city === city) || [],\n };\n const city_buildings = grouped_by_city.value.map((bld) =>\n mapBuildingToSelectOption(grouped_by_city.key.name, bld)\n );\n const options = [mapCityToAllSelectOption(grouped_by_city.key), ...city_buildings];\n\n const seledtedZone: SelectOption = options.filter(\n (e) => e.value === list[0].building.id\n )[0];\n const buildingTimezone = list[0].timezone;\n // form group data\n formGroup = {\n location: [seledtedZone],\n date: closestToTimeSlot(DateTime.now(), 15).valueOf(),\n dateTz: closestToTimeSlotTz(\n new DateTZ({ date: Date.now(), is_local_tz: false }),\n 15\n ).toZone(buildingTimezone),\n duration: DEFAULT_BOOKING_DURATION,\n bookingType:\n list[0].internal_or_external === 'internal'\n ? bookingTypeOptions[0]\n : bookingTypeOptions[1],\n roomSize: defaultRoomSizeOption,\n selectedRoom: bookingRoom[0],\n timezone: buildingTimezone,\n buildings: buildings,\n };\n\n this.store.dispatch(\n storeBookingFormData({\n payload: formGroup,\n })\n );\n this.router.navigate([`../home/results/room`], {\n state: { payload: { ...formGroup, offset: 0 } },\n });\n localStorage.oauth_redirect = localStorage.oauth_redirect.split('?')[0];\n this.isQRCode.next(true);\n },\n (error) => {\n // console.log(error);\n this.isQRCode.next(true);\n // this.router.navigate([`home/`]); // to navigate to default route if room dont exists\n /**\n * Navigate to room result page if no room/id exist in the db/ removed from the db in future -\n */\n this.store.dispatch(storeBookingFormData({ payload: formGroup }));\n this.router.navigate([`../home/results`], {\n state: { payload: { ...formGroup, offset: 0 } },\n queryParams: { display: 'list' },\n });\n }\n );\n }\n\n public ngOnInit(): void {\n // when qr code lands on a url for the second time, reload it (to compensate for different browser/device combination default behaviors)\n this.subscription(\n 'navigationEventShell',\n this.router.events\n .pipe(filter((event) => event instanceof NavigationStart))\n .subscribe((event: NavigationEvent) => {\n if (event instanceof NavigationStart) {\n if (\n event.navigationTrigger === 'popstate' &&\n (event.url.includes('home?zone_id=') || event.url.includes('home?id='))\n ) {\n this.userLoading.next(true);\n window.location.reload();\n }\n }\n })\n );\n\n let roomId = null;\n if (this.activatedRoute.snapshot.queryParamMap.get('id')) {\n roomId = this.activatedRoute.snapshot.queryParamMap.get('id');\n } else if (localStorage.oauth_redirect && localStorage.oauth_redirect.includes('?id=')) {\n roomId = localStorage.oauth_redirect.split('=')[1];\n }\n\n if (roomId) {\n this.subscription(\n 'buildings',\n this._org\n .listen('buildings')\n .pipe(first((_) => !!_ && !!_.length))\n .subscribe((bld_list: Building[]) => {\n this.checkRoomId(bld_list, roomId);\n })\n );\n }\n\n if (this.zone_id && this.floor) {\n this.subscription(\n 'buildings',\n this._org\n .listen('buildings')\n .pipe(first((_) => !!_ && !!_.length))\n .subscribe((bld_list: Building[]) => {\n const building = bld_list.filter((el) => el.id === this.zone_id);\n\n const city = building[0].city;\n const timezone = building[0].timezone;\n\n const grouped_by_city = {\n key: { name: city, timezone },\n value: building || [],\n };\n const city_buildings = grouped_by_city.value.map((bld) =>\n mapBuildingToSelectOption(grouped_by_city.key.name, bld)\n );\n const options = [\n mapCityToAllSelectOption(grouped_by_city.key),\n ...city_buildings,\n ];\n\n const seledtedZone: SelectOption = options.filter(\n (e) => e.value === building[0].id\n )[0];\n const buildingTimezone = building[0].timezone;\n // form group data\n const addMin = DateTime.now().get('minute') % 5 === 0 ? 1 : 0;\n const formGroup = {\n location: [seledtedZone],\n date: closestToTimeSlot(\n DateTime.now().plus({ minutes: addMin }),\n 15\n ).valueOf(),\n dateTz: closestToTimeSlotTz(\n new DateTZ({\n date: DateTime.now().plus({ minutes: addMin }),\n is_local_tz: false,\n building_tz: buildingTimezone,\n }),\n 15\n ),\n duration: 35,\n bookingType: allBookingTypeOption, // all rooms (including internal and external both)\n roomSize: roomSizeOptionsKiosk[3],\n selectedRoom: null,\n timezone: buildingTimezone,\n buildings: bld_list,\n };\n\n const query2 = {\n // capacity: 3,\n locations: this.zone_id,\n // capacity_max: 9,\n // diff_capacity: true,\n hide_declined: true,\n dateTz: closestToTimeSlotTz(\n new DateTZ({\n date: DateTime.now().plus({ minutes: addMin }),\n is_local_tz: false,\n building_tz: buildingTimezone,\n }),\n 15\n ),\n duration: 35,\n };\n\n //clear search filters first if any applied previously\n this.store.dispatch(clearRoomFilters());\n\n this.store.dispatch(loadRoomsForResults.clear());\n this.store.dispatch(storeBookingFormData({ payload: formGroup }));\n\n this.store.dispatch(loadRoomsForResults.request(query2));\n localStorage.oauth_redirect = '';\n // To do: navigate to floor-map route\n this.router.navigate([`../home/results`], {\n state: {\n payload: this.floor,\n building: building,\n floorMap: true,\n url: window.location.href,\n },\n queryParams: { display: '' },\n });\n this.isQRCode.next(true);\n })\n );\n }\n\n this.subscription(\n 'loading',\n this._service.listen('loading').subscribe((loading) => {\n this.loading_state = loading;\n })\n );\n\n this._service.initialised.pipe(first((_) => _)).subscribe(() => {\n this.logo = this._service.setting('app.logo_light') || { type: 'icon' };\n });\n\n /**\n * Load current user into redux. this is meant to remove old way of loading user from user's service.\n */\n this.subscription(\n 'currentUser',\n combineLatest([\n this.store.pipe(select(selectHasUserData)),\n this.placeOs.initialised,\n this.isQRCode, // added to track room details if QR code used to open app\n ])\n .pipe(\n filter(([_, initialized, isQRCodeScanedAndReady]) => {\n console.log(_);\n return initialized && isQRCodeScanedAndReady;\n })\n )\n .subscribe(([next]) => {\n this.userLoading.next(!next);\n if (!next) {\n this.store.dispatch(loadUser.request());\n }\n })\n );\n }\n}\n","
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
Converge is loading
\n
\n
\n
\n","export enum Urls {\n LearnMore = 'https://our-firm.intranet.mckinsey.com/covid-portal/travel',\n Feedback = 'mailto:converge_feedback@mckinsey.com?subject=Feedback for page: ',\n Help = 'https://mckinsey.service-now.com/ghd?id=topic_simple&topic_id=54e8eb091bea3d1831b17449cd4bcbed',\n OfficeContacts = 'https://our-firm.intranet.mckinsey.com/ourfirm/geographies',\n}\n\nexport const generateFeedbackUrl = (page: string) => {\n return `${Urls.Feedback}${page}`;\n};\n","import { EnvironmentData } from '@mckinsey-converge/environment';\n\nexport const environment: EnvironmentData = {\n production: true,\n hmr: false,\n heap_io_id: 91016686,\n};\n","import { SettingsData } from '@mckinsey-converge/data-common';\n\n;\n/**\n * GENERAL APPLICATION SETTINGS\n */\nconst general = {\n menu: {\n items: [],\n copyright: 'McKinsey & Company',\n position: 'left'\n }\n};\n\n/**\n * HOME PAGE SETTINGS\n */\nconst home = {\n background: 'assets/img/skyline.jpg',\n tiles: [\n {\n name: 'Book',\n route: '/book/spaces',\n icon: {\n type: 'icon',\n class: 'custom-book'\n }\n },\n {\n name: 'Maps',\n route: '/explore/space',\n icon: {\n type: 'icon',\n class: 'custom-spaces'\n }\n },\n {\n name: 'My Day',\n route: '/schedule',\n icon: {\n type: 'icon',\n class: 'custom-schedule'\n }\n }\n ]\n};\n/**\n * HELP/SUPPORT SETTINGS\n */\nconst help = {\n tiles: [],\n columns: 2\n};\n/**\n * BOOKING FLOW SETTINGS\n */\nconst booking = {\n booking_types: [\n { name: 'Internal', id: 'internal' },\n { name: 'External', id: 'external' },\n ],\n show_fields: [\n 'attendees',\n 'body',\n 'catering',\n 'dateTz',\n 'duration',\n 'organiser',\n 'title',\n 'type',\n 'all_day',\n 'needs_space',\n 'has_catering'\n ],\n html_body: false,\n multiple_spaces: true,\n desk_start: 9\n};\n/*===========================*\\\n|| SPACE LISTING SETTINGS ||\n\\*===========================*/\nconst space_display = {\n show_images: false\n};\n/*===========================*\\\n|| USER DIRECTORY SETTINGS ||\n\\*===========================*/\nconst directory = {\n show_avatars: true,\n min_search_length: 3\n};\n/*===========================*\\\n|| EXPLORE MAP SETTINGS ||\n\\*===========================*/\nconst explore = {\n colors: {\n 'space-available': '#43a047',\n 'space-requestable': '#ffb300',\n 'space-unavailable': '#e53935',\n 'space-in-use': '#d4483e',\n 'space-not-bookable': '#ccc',\n 'desk-available': '#43a047',\n 'desk-available-stroke': '#1b5e20',\n 'desk-unavailable': '#e53935',\n 'desk-unavailable-stroke': '#b71c1c',\n 'desk-reserved': '#ffb300',\n 'desk-reserved-stroke': '#ff6f00',\n 'desk-not-bookable': '#fff',\n 'desk-not-bookable-stroke': '#ccc',\n 'zone-low': '#43a047',\n 'zone-medium': '#ffb300',\n 'zone-high': '#e53935'\n },\n can_select_building: true,\n show_legend_group_names: false,\n show_timeline: true,\n legend: {\n General: [\n { key: 'space-available', name: 'Available' },\n { key: 'space-requestable', name: 'Available by request' },\n { key: 'space-unavailable', name: 'In use' },\n { key: 'space-not-bookable', name: 'Not Bookable' }\n ]\n }\n};\n\n/*=========================*\\\n|| DAY VIEW SETTINGS ||\n\\*=========================*/\nconst day_view = {\n dragdrop: false,\n};\n\n\n/**\n * ROOT APPLICATION SETTINGS\n */\nconst app = {\n title: 'McKinsey & Company',\n description: 'McKinsey & Company Staff UI written with Angular Framework',\n short_name: 'STAFF',\n logo_light: {\n type: 'img',\n src: 'assets/img/logo.svg',\n background: ''\n },\n logo_dark: {\n type: 'img',\n src: 'assets/img/logo-inverse.svg',\n background: ''\n },\n heap_io: {\n app_id: 3540602199,\n force_ssl: true,\n secure_cookie: true,\n disable_text_capture: true,\n cookie_path: '/staff/'\n },\n general,\n home,\n help,\n booking,\n space_display,\n directory,\n explore,\n day_view\n}\n\n\n/**\n * ROOT SETTIGNS\n */\nexport const DEFAULT_SETTINGS: SettingsData = {\n debug: true,\n composer: {\n domain: '',\n route: '/staff',\n protocol: '',\n port: '',\n use_domain: false,\n local_login: false\n },\n app,\n mock: false,\n frontend: 'staff',\n};\n","import { ApplicationRef, NgModuleRef } from '@angular/core';\nimport { createNewHosts } from '@angularclass/hmr';\n\nexport const hmrBootstrap = (\n module: any,\n bootstrap: () => Promise>,\n) => {\n let ngModule: NgModuleRef;\n module.hot.accept();\n bootstrap().then(mod => (ngModule = mod));\n module.hot.dispose(() => {\n const appRef: ApplicationRef = ngModule.injector.get(ApplicationRef);\n const elements = appRef.components.map(c => c.location.nativeElement);\n const makeVisible = createNewHosts(elements);\n ngModule.destroy();\n makeVisible();\n });\n};\n","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\nimport { environment } from './environments/environment';\nimport { hmrBootstrap } from './hmr';\nimport { AppModule } from './app/app.module';\n\nif (environment.production) {\n enableProdMode();\n}\n\nconst bootstrap = () => platformBrowserDynamic().bootstrapModule(AppModule);\n\n// comes from https://medium.com/wizardnet972/hot-module-replacement-with-angular-cli-5fc7a3ae4a9c\nif (environment.hmr) {\n if ((module as any).hot) {\n hmrBootstrap(module, bootstrap);\n } else {\n console.error('HMR is not enabled for webpack-dev-server!');\n console.log('Are you using the --hmr flag for ng serve?');\n }\n} else {\n bootstrap().catch(err => console.log(err));\n}\n"],"sourceRoot":"webpack:///"} \ No newline at end of file +{"version":3,"sources":["/home/runner/work/mckinsey-converge/mckinsey-converge/libs/animations/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/animations/src/lib/angular-animations.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/animations/src/lib/animations.module.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/base.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/base.directive.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/base.module.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/cdk-drop-list-scroll-container.directive.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/date.spec-helpers.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/date.utils.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/general.utilities.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/image.directive.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/numbers-only.directive.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/replace.pipe.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/bookings/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/bookings/src/lib/bookings.actions.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/bookings/src/lib/bookings.effects.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/bookings/src/lib/bookings.module.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/bookings/src/lib/bookings.reducer.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/bookings/src/lib/bookings.utils.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/buildings/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/buildings/src/lib/buildings.actions.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/buildings/src/lib/buildings.effects.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/buildings/src/lib/buildings.module.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/buildings/src/lib/buildings.reducer.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/api.utilities.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/app.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/base-api.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/base.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/booking-filter.utils.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/booking.form.actions.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/booking.form.data.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/booking.form.spec-helpers.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/booking.selectors.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/booking.utils.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/room-results/room-results.viewmodel.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/booking-state.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/booking.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/booking.types.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/booking.utilities.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/bookings.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/bookingsPaginated.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/space.utilities.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering-categories.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering-category.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering-item.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering-items.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering-menu.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering-notes.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering-order.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering.utilities.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/close-modal-dialog-service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/collapse-accordion-service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/data-common.module.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/hotkeys.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/location/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/location/location.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/location/location.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/organisation/building.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/organisation/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/organisation/level.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/organisation/organisation.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/organisation/organisation.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/paginated.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/recurrence/recurrence.utils.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/reports/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/reports/report.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/reports/reports.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/service-manager.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/settings.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/spaces/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/spaces/space.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/spaces/space.utilities.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/spaces/spaces.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/spec-helpers.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/users/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/users/user.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/users/user.utilities.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/users/users.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/validation.utilities.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/date-tz/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/date-tz/src/lib/date-tz.class.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/environment/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/environment/src/lib/environment.module.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/environment/src/lib/environment.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/environment/src/lib/version.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/booking-confirm/booking-confirm.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/booking-confirm/booking-confirm.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/booking-form/booking-form.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/booking-form/booking-form.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/catering-confirm-modal/catering-confirm-modal.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/catering-confirm-modal/catering-confirm-modal.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/catering-details-modal/catering-details-modal.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/catering-details-modal/catering-details-modal.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/confirm-modal/confirm-modal.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/confirm-modal/confirm-modal.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/legacy-overlays.module.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/new-user-modal/new-user-modal.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/new-user-modal/new-user-modal.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/no-catering-modal/no-catering-modal.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/no-catering-modal/no-catering-modal.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/requirement-details-modal/requirement-details-modal.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/requirement-details-modal/requirement-details-modal.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/space-select-modal/space-select-modal.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/space-select-modal/space-select-modal.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/user-form/user-form.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/user-form/user-form.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/action-icon/action-icon.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/action-icon/action-icon.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/bookings/catering/item/item.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/bookings/catering/item/item.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/bookings/catering/package-options-modal/package-options-modal.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/bookings/catering/package-options-modal/package-options-modal.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/cng-search-bar/cng-search-bar.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/cng-search-bar/cng-search-bar.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/cng-search-bar/hover-class.directive.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/action-field/action-field.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/action-field/action-field.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/counter/counter.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/counter/counter.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/date-field/date-field.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/date-field/date-field.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/duration-field/duration-field.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/duration-field/duration-field.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/time-field/time-field.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/time-field/time-field.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/user-list-field/user-list-field.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/user-list-field/user-list-field.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/user-search-field/user-search-field.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/user-search-field/user-search-field.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/feedback/feedback.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/feedback/feedback.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/icon/icon.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/icon/icon.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/legacy-ui.module.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/popout-menu/popout-menu.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/popout-menu/popout-menu.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/searchbar/searchbar.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/searchbar/searchbar.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/user-avatar/user-avatar.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/user-avatar/user-avatar.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/loading/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/loading/src/lib/loading.actions.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/loading/src/lib/loading.effects.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/loading/src/lib/loading.model.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/loading/src/lib/loading.selectors.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/loading/testing/effects.testing.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/loading/testing/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/organisation/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/organisation/src/lib/organisation.actions.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/organisation/src/lib/organisation.effects.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/organisation/src/lib/organisation.module.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/organisation/src/lib/organisation.reducer.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/rooms/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/rooms/src/lib/rooms.actions.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/rooms/src/lib/rooms.effects.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/rooms/src/lib/rooms.module.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/rooms/src/lib/rooms.reducer.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/rooms/src/lib/rooms.types.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/rooms/src/lib/rooms.utils.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/rx-utils/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/rx-utils/src/lib/loading-model.utils.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/rx-utils/src/lib/operators.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/rx-utils/src/lib/rx-utils.module.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/aca-date-picker/aca-date-picker.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/aca-date-picker/aca-date-picker.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/alert-banner/alert-banner.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/auto-complete-chip-select-item/auto-complete-chip-select-item.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/auto-complete-chip-select-item/groupHeader.pipe.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/auto-complete-select-option/auto-complete-select-option.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/auto-complete-select-option/auto-complete-select-option.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/base-template.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/catering-drop-modal/components/catering-drop/catering-drop-modal.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/catering-drop-modal/components/catering-drop/catering-drop-modal.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/cng-select/cng-select-options.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/cng-select/cng-select-options.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/cng-select/cng-select.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/cng-select/cng-select.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/cng-select/dropdown-trigger-for.directive.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/collapse-header/collapse-header.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/conflict-alert-modal/conflict-alert-modal.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/conflict-alert-modal/conflict-alert-modal.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/conflicts-modal/conflicts-modal.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/conflicts-modal/conflicts-modal.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/custom-snackbar-component/custom-snackbar-component.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/custom-snackbar-component/custom-snackbar-component.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/custom-snackbar-component/custom-snackbar-component.service.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/date-tz-calendar-widget/date-tz-calendar-widget.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/date-tz-calendar-widget/date-tz-calendar-widget.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/date-tz-date-picker/date-tz-date-picker.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/date-tz-duration-field/date-tz-duration-field.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/date-tz-time-field/date-tz-time-field.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/duration-field/duration-field.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/error-message/error-message.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/icons/calendar/calendar-icon.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/icons/calendar/chevron-icon.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/icons/close/close-icon.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/informational-image/informational-image.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/label/label.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/legend-dropdown/legend-dropdown.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/mck-date-picker/mck-date-picker.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/modal-button-row/modal-button-row.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/modal/modal.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/override-changes-modal/override-changes-modal.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/override-changes-modal/override-changes-modal.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/pipes/filter.pipe.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/pipes/sanitise.pipe.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/radio-select/radio-select.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/recurrence-booking-form/recurrence-booking-form.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/recurrence-booking-form/recurrence-booking-form.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/recurrence-date-form/recurrence-date-form.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/recurrence-date-form/recurrence-date-form.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/recurrence-pattern-form/recurrence-pattern-form.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/recurrence-pattern-form/recurrence-pattern-form.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/select-option/select-option.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/select/select.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/select/select.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/selected-chip-count/selected-chip-count.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/spacer/spacer.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/switch-group/switch-group.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/time-field/time-field.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/toggle/toggle.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/tooltip/tooltip.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/tooltip/tooltip.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/tooltip/tooltip.directive.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/tooltip/tooltip.enums.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/types.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/ui.module.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/utils/time.utils.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/zoom-warning-modal/components/zoom-warning/zoom-warning.component.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/zoom-warning-modal/components/zoom-warning/zoom-warning.component.html","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/user/src/index.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/user/src/lib/user.actions.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/user/src/lib/user.effects.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/user/src/lib/user.module.ts","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/user/src/lib/user.reducer.ts","./$_lazy_route_resource lazy namespace object","./src/app/app-routing.module.ts","./src/app/app.component.ts","./src/app/app.component.html","./src/app/app.module.ts","./src/app/booking/booking-calendar/booking-calendar-date-widget/calendar-date-widget.component.ts","./src/app/booking/booking-calendar/booking-calendar-date-widget/calendar-date-widget.component.html","./src/app/booking/booking-calendar/booking-calendar-routing.module.ts","./src/app/booking/booking-calendar/booking-calendar-wrapper.component.ts","./src/app/booking/booking-calendar/booking-calendar-wrapper.html","./src/app/booking/booking-calendar/booking-calendar.module.ts","./src/app/booking/booking-calendar/cng-menu-item/cng-menu-item.component.ts","./src/app/booking/booking-calendar/cng-menu-item/cng-menu-item.component.html","./src/app/booking/booking-calendar/staff-calendar/space/event/event.component.ts","./src/app/booking/booking-calendar/staff-calendar/space/event/event.component.html","./src/app/booking/booking-calendar/staff-calendar/space/space.component.ts","./src/app/booking/booking-calendar/staff-calendar/space/space.component.html","./src/app/booking/booking-calendar/staff-calendar/staff-calendar.component.ts","./src/app/booking/booking-calendar/staff-calendar/staff-calendar.component.html","./src/app/booking/booking-calendar/staff-calendar/timeline/timeline.component.ts","./src/app/booking/booking-calendar/staff-calendar/timeline/timeline.component.html","./src/app/booking/booking-confirmation/booking-confirmation.component.ts","./src/app/booking/booking-create/booking-create.component.ts","./src/app/booking/booking-create/booking-form-base.component.html","./src/app/booking/booking-create/booking-edit-wrapper.component.ts","./src/app/booking/booking-create/booking-edit.component.ts","./src/app/booking/booking-create/booking-form-base.component.ts","./src/app/booking/booking-details-modal/booking-details-modal.component.ts","./src/app/booking/booking-details-modal/booking-details-modal.component.html","./src/app/booking/booking-duration-modal/booking-duration-modal.component.ts","./src/app/booking/booking-result-item/booking-result-item.component.ts","./src/app/booking/booking-result-item/booking-result-item.component.html","./src/app/booking/booking-routing.module.ts","./src/app/booking/booking.form.reducer.ts","./src/app/booking/booking.module.ts","./src/app/booking/bookings-listing/bookings-listing.component.ts","./src/app/booking/bookings-listing/bookings-listing.component.html","./src/app/booking/cancel-booking-modal/cancel-booking-modal.component.ts","./src/app/booking/catering/catering.component.ts","./src/app/booking/catering/catering.component.html","./src/app/booking/catering/order-details/category/category.component.ts","./src/app/booking/catering/order-details/category/category.component.html","./src/app/booking/catering/order-details/order-details.component.ts","./src/app/booking/catering/order-details/order-details.component.html","./src/app/booking/catering/order-list/item/item.component.ts","./src/app/booking/catering/order-list/item/item.component.html","./src/app/booking/catering/order-list/order-list.component.ts","./src/app/booking/catering/order-list/order-list.component.html","./src/app/booking/catering/order-table/order-table.component.ts","./src/app/booking/manage-bookings/manage-bookings.component.ts","./src/app/booking/manage-bookings/manage-bookings.viewmodel.ts","./src/app/booking/office-floor/floor-map-overlay/floor-map-overlay.component.ts","./src/app/booking/office-floor/floor-map.utils.ts","./src/app/booking/office-floor/office-floor-map.module.ts","./src/app/booking/office-floor/office-floor/office-floor.component.ts","./src/app/booking/office-floor/office-floor/office-floor.component.html","./src/app/booking/results-header/results-header.component.ts","./src/app/booking/room-availability-preview-modal/room-availability-preview-modal.component.ts","./src/app/booking/room-availability-preview/room-availability-preview.component.ts","./src/app/booking/room-availability-preview/room-availability-preview.component.html","./src/app/booking/room-booking-details-form/room-booking-details-form.component.ts","./src/app/booking/room-booking-details-form/room-booking-details-form.component.html","./src/app/booking/room-booking-form/room-booking-form.component.ts","./src/app/booking/room-booking-form/room-booking-form.component.html","./src/app/booking/room-booking-modal/room-booking-modal.component.ts","./src/app/booking/room-booking/room-booking.component.ts","./src/app/booking/room-details/room-details.component.ts","./src/app/booking/room-details/room-details.component.html","./src/app/booking/room-filters-form/room-filters-form.component.ts","./src/app/booking/room-filters-modal/room-filters-modal.component.ts","./src/app/booking/room-location-preview/room-location-preview.component.ts","./src/app/booking/room-result-item/room-result-item.component.ts","./src/app/booking/room-results-paginated/room-results-paginated.component.ts","./src/app/booking/room-results-section/room-results-section.component.ts","./src/app/booking/room-results/room-results-coachmark.viewmodel.ts","./src/app/booking/room-results/room-results.component.ts","./src/app/booking/searched-location/searched-location.component.ts","./src/app/components/footer-menu/footer-menu.component.ts","./src/app/components/footer-menu/footer-menu.component.html","./src/app/components/map-controls/map-controls.component.ts","./src/app/components/map-controls/map-controls.component.html","./src/app/components/overlay-menu/overlay-menu.component.ts","./src/app/components/overlay-menu/overlay-menu.component.html","./src/app/components/responsive-inline-images/responsive-inline-images.component.ts","./src/app/components/survey-modal/survey-modal.component.ts","./src/app/components/survey-modal/survey-modal.component.html","./src/app/components/topbar-header/topbar-header.component.ts","./src/app/login/login.component.ts","./src/app/login/login.component.html","./src/app/map/map-controls/map-controls.component.ts","./src/app/map/map-filters/map-filters.component.ts","./src/app/map/map-overlay/map-overlay.component.ts","./src/app/map/map-search/map-search.component.ts","./src/app/map/map.module.ts","./src/app/map/map.utils.ts","./src/app/map/office-information-modal/office-information-modal.component.ts","./src/app/shared/shared.module.ts","./src/app/shell/shell.component.ts","./src/app/shell/shell.component.html","./src/app/utilities/urls.ts","./src/environments/environment.ts","./src/environments/settings.ts","./src/hmr.ts","./src/main.ts"],"names":[],"mappings":"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","file":"main-es2015.js","sourcesContent":["export * from './lib/animations.module';\nexport * from './lib/angular-animations'\n","import { trigger, transition, style, animate, state } from '@angular/animations';\n\nexport const ANIMATION_SHOW_ENTER_LEAVE = trigger('show', [\n transition(':enter', [\n style({ opacity: 0, height: 0 }),\n animate(300, style({ opacity: 1, height: '*' }))\n ]),\n transition(':leave', [\n style({ opacity: 1, height: '*' }),\n animate(300, style({ opacity: 0, height: 0 }))\n ])\n]);\n\nexport const ANIMATION_SHOW_CONTRACT_EXPAND = trigger('show', [\n state('show', style({ opacity: 1, height: '*' })),\n state('hide', style({ opacity: 0, height: 0 })),\n transition('show <=> hide', animate('200ms ease-in'))\n]);\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class AnimationsModule {}\n","export * from './lib/base.module';\nexport * from './lib/types.utilities';\nexport * from './lib/general.utilities';\nexport * from './lib/base.class';\nexport * from './lib/base.directive';\nexport * from './lib/date.utils'\nexport * from './lib/date.spec-helpers'\nexport * from './lib/replace.pipe'\nexport * from './lib/cdk-drop-list-scroll-container.directive'\nexport * from './lib/image.directive';\n","import { Subscription, BehaviorSubject } from \"rxjs\";\n\nexport class BaseClass {\n /** Store for named timers */\n protected _timers: { [name: string]: number } = {};\n /** Store for named intervals */\n protected _intervals: { [name: string]: number } = {};\n /** Store for named subscription unsub callbacks */\n protected _subscriptions: { [name: string]: (Subscription | (() => void)) } = {};\n /** Subject which stores the initialised state of the object */\n protected readonly _initialised = new BehaviorSubject(false);\n\n /** Observable of the initialised state of the object */\n public get initialised(): BehaviorSubject {\n return this._initialised;\n }\n /** Whether the object has been initialised */\n public get is_initialised(): boolean {\n return this._initialised.getValue();\n }\n\n protected destroy() {\n for (const key in this._timers) {\n if (this._timers.hasOwnProperty(key)) {\n this.clearTimeout(key);\n }\n }\n for (const key in this._intervals) {\n if (this._intervals.hasOwnProperty(key)) {\n this.clearInterval(key);\n }\n }\n for (const key in this._subscriptions) {\n if (this._subscriptions.hasOwnProperty(key)) {\n this.unsub(key);\n }\n }\n }\n\n /**\n * Creates a named timer\n * @param name Name of the timer\n * @param fn Callback function for the timer\n * @param delay Callback delay\n */\n protected timeout(name: string, fn: () => void, delay: number = 300) {\n if (name && fn && fn instanceof Function) {\n this.clearTimeout(name);\n this._timers[name] = setTimeout(() => {\n fn();\n this._timers[name] = null;\n }, delay);\n } else {\n throw new Error(\n name ? 'Cannot create named timeout without a name' : 'Cannot create a timeout without a callback'\n );\n }\n }\n\n /**\n * Clears the named timer\n * @param name Timer name\n */\n protected clearTimeout(name: string) {\n if (this._timers[name]) {\n clearTimeout(this._timers[name]);\n this._timers[name] = null;\n }\n }\n\n /**\n * Creates a named interval\n * @param name Name of the interval\n * @param fn Callback function for the interval\n * @param delay Callback delay\n */\n protected interval(name: string, fn: () => void, delay: number = 300) {\n if (name && fn && fn instanceof Function) {\n this.clearInterval(name);\n this._intervals[name] = setInterval(() => fn(), delay);\n } else {\n throw new Error(\n name ? 'Cannot create named interval without a name' : 'Cannot create a interval without a callback'\n );\n }\n }\n\n /**\n * Clears the named interval\n * @param name Timer name\n */\n protected clearInterval(name: string) {\n if (this._intervals[name]) {\n clearInterval(this._intervals[name]);\n this._intervals[name] = null;\n }\n }\n\n /**\n * Store named subscription\n * @param name Name of the subscription\n * @param unsub Unsubscribe callback or Subscription object\n */\n protected subscription(name: string, unsub: Subscription | (() => void)) {\n this.unsub(name);\n this._subscriptions[name] = unsub\n }\n\n /**\n * Call unsubscribe callback with the given name\n * @param name\n */\n protected unsub(name: string) {\n if (this._subscriptions && this._subscriptions[name]) {\n this._subscriptions[name] instanceof Subscription\n ? (this._subscriptions[name] as Subscription).unsubscribe()\n : (this._subscriptions[name] as any)();\n this._subscriptions[name] = null;\n }\n }\n}\n","\nimport { Directive, OnDestroy } from '@angular/core';\nimport { BaseClass } from './base.class';\n\n@Directive({\n selector: 'a-very-basic-component-base-that-should-not-be-used'\n})\nexport class BaseDirective extends BaseClass implements OnDestroy {\n public ngOnDestroy(): void {\n this.destroy();\n }\n}","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NumbersOnlyDirective } from './numbers-only.directive';\n\n@NgModule({\n imports: [CommonModule,],\n declarations: [\n NumbersOnlyDirective\n ],\n exports: [\n NumbersOnlyDirective\n ]\n})\nexport class BaseModule {\n}\n","import {\n Directive,\n Input,\n Renderer2,\n SimpleChanges,\n OnChanges,\n ContentChildren,\n QueryList,\n AfterContentInit\n} from '@angular/core';\nimport { CdkDropList, CdkDrag } from '@angular/cdk/drag-drop';\nimport { BaseDirective } from './base.directive';\n\nexport enum ScrollDirection {\n NONE,\n X,\n Y,\n BOTH\n}\n\n@Directive({\n selector: '[cdkDropList][scrollContainer]'\n})\nexport class CdkDropListScrollContainer extends BaseDirective\n implements OnChanges, AfterContentInit {\n /** Direction of scroll to determine updating the position of the drop list */\n @Input() direction: ScrollDirection = ScrollDirection.X;\n /** Name of the scroll container for the list */\n @Input() scrollContainer: string;\n /** Scroll container element */\n public element: HTMLElement;\n /** Last scroll position */\n public last_scroll: { x: number; y: number } = { x: 0, y: 0 };\n\n /** Draggable children elements */\n @ContentChildren(CdkDrag) private items: QueryList;\n\n constructor(private _cdkDropList: CdkDropList, private _renderer: Renderer2) {\n super();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.scrollContainer && this.scrollContainer) {\n this.element = this._cdkDropList.element.nativeElement.closest(\n this.scrollContainer\n ) as HTMLElement;\n }\n }\n\n public ngAfterContentInit(): void {\n this.subscription(\n 'drag_items',\n this.items.changes.subscribe((items: QueryList) => {\n const list = items.toArray();\n list.forEach((i, index) => {\n this.subscription(\n `list-item-${index}`,\n this._renderer.listen(i.element.nativeElement, 'mousedown', () => {\n this.subscription(\n 'item-dragged',\n this._renderer.listen('window', 'mouseup', () => this.onDrop())\n );\n this.onDrag();\n })\n );\n this.subscription(\n `list-item-touch-${index}`,\n this._renderer.listen(i.element.nativeElement, 'touchstart', () => {\n this.subscription(\n 'item-dragged',\n this._renderer.listen('window', 'touchend', () => this.onDrop())\n );\n this.onDrag();\n })\n );\n });\n })\n );\n }\n\n /** Start listing for scroll events on the container */\n public onDrag() {\n if (this.element) {\n this.subscription(\n 'scroll',\n this._renderer.listen(this.element, 'scroll', () => this.updateListPosition())\n );\n }\n }\n\n /** Stop listening for scroll events on the container */\n public onDrop() {\n this.unsub('scroll');\n }\n\n /**\n * Forcefully update the position data of the drop list\n */\n private updateListPosition() {\n this.timeout(\n 'update_positions',\n () => {\n const scroll = { x: this.element.scrollLeft, y: this.element.scrollTop };\n if (\n ((this.direction === ScrollDirection.BOTH ||\n this.direction === ScrollDirection.Y) &&\n scroll.y !== this.last_scroll.y) ||\n ((this.direction === ScrollDirection.BOTH ||\n this.direction === ScrollDirection.X) &&\n scroll.x !== this.last_scroll.x)\n ) {\n (this._cdkDropList._dropListRef as any)._cacheOwnPosition();\n (this._cdkDropList._dropListRef as any)._siblings.forEach(i =>\n i.isReceiving() ? i._cacheOwnPosition() : null\n );\n }\n this.last_scroll = scroll;\n },\n 50\n );\n }\n}\n","import MockDate from 'mockdate';\n\n/**\n * August 13, 2020 at 7:22:12 UTC\n */\nconst initialTime = 1597346532 * 1000;\n\nexport const mockDate = (timeOverride = initialTime) => MockDate.set(new Date(timeOverride));\n\nexport const resetDate = () => MockDate.reset();\n","import { DateNow, DateTZ } from '@mckinsey-converge/date-tz'\nimport { DateTime } from 'luxon';\nimport * as dayjs from 'dayjs';\nimport {\n dayJsHoursMinutes,\n dayJsTimeFormatString,\n} from './general.utilities';\n\n/**\n * Allows you to split up durations into a group.\n */\nexport interface DurationGroup {\n /**\n * Step amount to generate between start and max.\n */\n step: number;\n /**\n * Where to start in minutes.\n */\n start: number;\n /**\n * Where to end in minutes.\n */\n max: number;\n}\n\n/**\n * Find the multiple of `stepMinute` which is closest to the 'minutes' property of the given date.\n * @param date - Any Lexon date.\n * @param stepMinute - The number of minutes between one timeslot and the next. Integer value\n * 1 to 59, inclusive.\n */\n// R--- depreciate this one\nexport const closestToTimeSlot = (date: DateTime, stepMinute: number, start: number = 0) : DateTime => {\n return date.set({ millisecond: 0, second: 0, minute: Math.ceil(date.minute / stepMinute) * stepMinute })\n .plus({ minutes: start % 60 }) // apply offset as well if it starts at 15.\n};\n\nexport const closestToTimeSlotTz = (dateTz: DateTZ, stepMinute: number, start: number = 0) : DateTZ => {\n return dateTz.setValue({ millisecond: 0, second: 0, minute: Math.ceil(dateTz.minutes / stepMinute) * stepMinute })\n .addValue({ minutes: start % 60 }) // apply offset as well if it starts at 15.\n};\n\n/**\n * Convert duration to human readable string\n * @param duration Duration in minutes\n * @param short Whether to use short form of duration words e.g. hours as hrs, or minutes as mins\n */\nexport function durationHumanized(duration: number, short: boolean = false): string {\n if (!duration || duration < 0) {\n return '';\n }\n const h = Math.floor(duration / 60);\n let d = `${h >= 1 ? h + (short ? ' hr' : ' hour' + (h === 1 ? '' : 's')) : ''}`;\n if (duration % 60 !== 0) {\n if (d) {\n d += short ? ' ' : ', ';\n }\n const m = duration % 60;\n d += `${m >= 1 ? m + (short ? ' min' : ' minute' + (m === 1 ? '' : 's')) : ''}`;\n }\n return d;\n}\n\nexport const weekDayMonthYearFormat = (date: DateTZ): string => date.formatDate('ccc dd MMM yyyy');\n\n/**\n * Tries to extract best-fit input\n * @return undefined if not valid. otherwise if good\n */\nexport const extractDateFromInput = (input: string,\n checkHour,\n startDate: dayjs.Dayjs): dayjs.Dayjs | undefined => {\n // check if input has am/pm or normal 24 hour time.\n // let date = dayjs(input, 'HH:mm');\n // let date = dayjs(input, 'h:mma');\n let date = dayjs(input, dayJsTimeFormatString());\n if (!date.isValid()) {\n // patch if time is in format xx:x to assume you meant xx:x0\n let cleanedInput = input;\n const times = input.split(':');\n if(!input){\n return undefined\n }\n if (times.length === 2) {\n if (times[1].length === 1) {\n cleanedInput = `${times[0]}:${times[1]}0`;\n }\n }\n // may be other input, lets try next value (without am/pm)\n date = dayjs(cleanedInput, dayJsHoursMinutes());\n // might be just purely an hour\n if (!date.isValid() && checkHour) {\n date = dayjs(input, 'H');\n }\n }\n // We expect input times to be in the future. If now is in the afternoon, this\n // simple block will ensure the returned date is also in the afternoon.\n //\n // NB: dayjs parses times as morning by default.\n if (date.isValid()) {\n // Move to the selected start date\n date = date.month(startDate.month()).date(startDate.date()).year(startDate.year());\n if (startDate.hour() > date.hour() && date.date() === startDate.date()) {\n date = date.set('hour', date.hour() + 12);\n }\n }\n\n return date.isValid() ? date : undefined;\n};\n\n\n/**\n * 1. Calculates the date from input via {@link extractDateFromInput}.\n * 2. Finds the nearest time slot that it can be via {@link closestToTimeSlot}.\n * 3. Then returns the time-format string the input expects so autocomplete can suggest\n * closest match.\n * @param step The step between time slots.\n * @param input The input text.\n */\nexport const nearestStepToInput = (\n step: number,\n input: string,\n currentStartDate: number,\n start: number = 0\n): string => {\n let date = extractDateFromInput(input, false, dayjs(currentStartDate));\n if (date) {\n const luxonDate = DateTime.fromMillis(date.valueOf());\n const closestDate = closestToTimeSlot(luxonDate, step, start);\n return closestDate.toFormat(dayJsHoursMinutes());\n } else {\n return input;\n }\n};\n/**\n * Similiar to {@link nearestStepToInput} instead:\n * 1. Calculates the date from input via {@link extractDateFromInput}.\n * 2. Finds which duration group is closest to the currentStartDate. If not found\n * return vanilla text.\n * 3. Finds the nearest time slot that it can be via {@link closestToTimeSlot}.\n * 4. Then returns the time-format string the input expects so autocomplete can suggest\n * closest match.\n */\nexport const nearestDurationToInput = (durationGroups: DurationGroup[],\n currentStartDate: number,\n value: string): string => {\n\n let date = extractDateFromInput(value, false, dayjs(currentStartDate));\n\n if (!date) {\n // Check if the input is a duration \n const duration = parseInt(value);\n if (typeof (duration) === 'number' && value.indexOf(':') === -1 && duration > 12) {\n date = dayjs(currentStartDate).add(duration, 'm');\n }\n }\n\n if (date) {\n const minutes = date.diff(currentStartDate, 'minute');\n const closestDurationGroup = durationGroups.find(d => {\n return (minutes <= d.max);\n });\n if (closestDurationGroup) {\n const offset = [closestDurationGroup].reduce((previousValue, currentValue) => {\n return previousValue + currentValue.start;\n }, 0);\n const luxonDate = DateTime.fromMillis(date.valueOf());\n const closestDate = closestToTimeSlot(luxonDate, closestDurationGroup.step, 0);\n return closestDate.toFormat(dayJsHoursMinutes());\n }\n }\n\n return value;\n};\n\nexport const resetSecondsOnTimestamp = (timestamp: number) => {\n return DateTime.fromMillis(timestamp).set({ second: 0, millisecond: 0 }).toMillis();\n}\n\nexport const formatDateWithSuffix = (date: string): string => {\n const dateObj = new Date(date);\n const day = dateObj.getDate();\n const month = dateObj.toLocaleString(\"default\", { month: \"short\" });\n const year = dateObj.getFullYear();\n return `${day}${nthNumber(day)} ${month} ${year}`; //this.event.date_string;\n}\n\nconst nthNumber = (number) => {\n return number > 0\n ? [\"th\", \"st\", \"nd\", \"rd\"][\n (number > 3 && number < 21) || number % 10 > 3 ? 0 : number % 10\n ]\n : \"\";\n};\n\nexport const getListOfDateFormat = () => {\n return [\t\n 'MMMM dd y', \t//March 07 2023\n 'MMM dd, y',\t//Mar 07 2023\n 'MMMM dd',\t\t//March 07\n 'MMM dd', \t\t//Mar 07\n 'MM dd', \t\t//03 07\n\n 'MM-dd-yy',\t\t//03-07-23\n 'MM-dd-yyyy',\t//03-07-2023\n 'MMMM-dd-yyyy', //March-07-2023\n 'MMMM-dd-yy',\t//March-07-23\n\n 'MMMM-dd',\t\t//March-07\n 'MMM-dd',\t\t//Mar-07\n \n 'MMM-dd-y',\t\t//Mar-07-2023\n\n 'MM/dd',\t\t//03/07\n 'MM/dd/yy',\t\t//03/07/23\n 'MM/dd/yyyy',\t//03/07/2023\n \n 'dd/MM',\t\t//07/03\n 'dd/MM/yy',\t\t//07/03/23\n 'dd/MM/yyyy',\t//07/03/2023\n \n 'dd-MMMM',\t\t//07-March\n 'dd MMMM',\t\t//07 March\n 'dd-MMM',\t\t//07-Mar\n 'dd MMM',\t\t//07 Mar\n\n 'dd-MM-y',\t\t//07-03-23\n 'dd MMMM yy',\t//07 March 23\n \n 'dd/MMM/y',\t //07/Mar/2023\n 'dd/MMMM/y', //07/March/2023\n 'dd/MMM/yy', //07/Mar/23\n 'dd/MMMM/yy', //07/March/23\n \n\n 'dd-MMMM-yy',\t//07-March-23\n 'dd-MMM-yy',\t//07-Mar-23\n 'dd-MM-yy',\t\t//07-03-23\n 'MMMM-dd-yy',\t//March-07-23\n 'MMM-dd-yy',\t//Mar-07-23\n\n 'MMMM dd yy',\t//March 07 23\n 'MMM dd, yy',\t//Mar 07 23\n 'MM dd, yy',\t//03 07 23\n\n 'dd MMMM y',\t//07 March 2023\n 'dd MMM, y',\t//07 Mar 2023\n 'dd MM, yy',\t//07 03, 23\n 'dd-MMM-y',\t//07-Mar-2023\n\n 'h:mm a', // 3:30 pm\n 'h:mma' // 3:30 pm\n\n ];\n}","import { HashMap, Point } from './types.utilities';\n\nimport * as dayjs from 'dayjs';\nimport * as utc from 'dayjs/plugin/utc';\nimport * as timezone from 'dayjs/plugin/timezone';\nimport * as isToday from 'dayjs/plugin/isToday';\nimport * as weekday from 'dayjs/plugin/weekday';\nimport * as customParseFormat from 'dayjs/plugin/customParseFormat';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n// TODO: this is not the best place to import this timezone addition\ndayjs.extend(utc);\ndayjs.extend(timezone);\ndayjs.extend(isToday);\ndayjs.extend(weekday);\ndayjs.extend(customParseFormat);\n\n/** Available console output streams. */\nexport type ConsoleStream = 'debug' | 'warn' | 'log' | 'error' | 'info';\n\n/**\n * Log data to the browser console\n * @param type Type of message\n * @param msg Message body\n * @param args array of argments to log to the console\n * @param stream Stream to emit the console on. 'debug', 'log', 'warn' or 'error'\n * @param force Whether to force message to be emitted when debug is disabled\n */\nexport function log(\n type: string,\n msg: string,\n args?: any,\n stream: ConsoleStream = 'debug',\n force: boolean = false,\n app_name: string = 'STAFF'\n) {\n if ((window as any).debug || force) {\n const colors: string[] = [\n 'color: #E91E63',\n 'color: #3F51B5',\n 'color: default',\n ];\n if (args) {\n console[stream](\n `%c[${app_name}]%c[${type}] %c${msg}`,\n ...colors,\n args\n );\n } else {\n console[stream](`%c[${app_name}]%c[${type}] %c${msg}`, ...colors);\n }\n }\n}\n\n/**\n * Get item from the nested object\n * @param keys List of sub-keys to search for\n * @param map Object to search\n */\n export function getItemWithKeys(keys: string[], map: HashMap) {\n const key = keys[0];\n if (map && key in map) {\n return keys.length > 1\n ? getItemWithKeys(keys.slice(1), map[key] || {})\n : map[key];\n }\n return null;\n}\n\n/* istanbul ignore next */\n/**\n * Checks whether the platform is a mobile device.\n */\nexport function isMobileDevice(): boolean {\n const r = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i;\n return !!navigator.userAgent.match(r);\n}\n\n/* istanbul ignore next */\n/**\n * Checks whether the browser is Mobile Safari.\n */\nexport function isMobileSafari(): boolean {\n const agent = navigator.userAgent;\n return !!(\n agent.match(/iPhone|iPad|iPod/) &&\n agent.match(/AppleWebKit/) &&\n !agent.match('CriOS')\n );\n}\n\n/* istanbul ignore next */\n/**\n * Checks whether the browser is Android Chrome.\n */\nexport function isAndroidChrome(): boolean {\n const agent = navigator.userAgent;\n return !!(agent.match(/Android/) && agent.match(/Chrome/));\n}\n\n/**\n * Generate string representation of a number with zeros padding the length\n * @param value Number to pad with zeros\n * @param length Length of the resulting string\n */\nexport function padZero(value: number, length: number): string {\n let str = value.toString();\n while (str.length < length) {\n str = '0' + str;\n }\n return str;\n}\n\n/**\n * Remove duplicates from the given array\n * @param array List of items to remove duplicates from\n * @param key Key on array objects to compare for uniqueness\n */\nexport function unique(array: T[], key: keyof T | undefined = undefined) {\n return array.filter(\n (el, pos, arr) =>\n el &&\n arr.indexOf(\n key\n ? arr.find((i) => i && i[key] === el[key])\n : arr.find((i) => i === el)\n ) === pos\n );\n}\n\n/**\n * Convert duration to human readable string\n * @param duration Duration in minutes\n * @param short Whether to use short form of duration words e.g. hours as h\n */\nexport function humaniseDuration(durationInput: number, size: string = 'long') {\n const duration = Math.floor(durationInput);\n if (!duration || duration < 0) {\n return '';\n }\n let singular = false;\n let format = { hours: ' hour', minutes: ' minute' };\n switch (size) {\n case 'medium':\n format = { hours: 'hr', minutes: 'min' };\n break;\n case 'short':\n format = { hours: 'h', minutes: 'm' };\n singular = true;\n break;\n }\n const h = Math.floor(duration / 60);\n let d = `${\n h >= 1\n ? h +\n (singular ? format.hours : format.hours + (h === 1 ? '' : 's'))\n : ''\n }`;\n if (duration % 60 !== 0) {\n if (d) {\n d += singular ? ' ' : ', ';\n }\n const m = duration % 60;\n d += `${\n m >= 1\n ? m +\n (singular\n ? format.minutes\n : format.minutes + (m === 1 ? '' : 's'))\n : ''\n }`;\n }\n return d;\n}\n\n/**\n * Get a filtered list of items\n * @param filter Value to filter on\n * @param items List of results to filter\n * @param fields Fields to check for matches on each item\n */\nexport function filterList(\n filter: string,\n items?: T[],\n fields: string[] = ['id']\n): T[] {\n let results: any[];\n // Tokenise filter string\n const filters = (filter || '').toLowerCase().split(' ');\n const list = {};\n for (const f of filters) {\n /* istanbul ignore else */\n if (f) {\n /* istanbul ignore else */\n if (!list[f]) {\n list[f] = 0;\n }\n list[f]++;\n }\n }\n // Group similar tokens\n const parts = [];\n for (const f in list) {\n /* istanbul ignore else */\n if (list.hasOwnProperty(f)) {\n parts.push({ word: f, count: list[f], regex: new RegExp(f, 'gi') });\n }\n }\n parts.sort(\n (a, b) => b.word.length - a.word.length || a.word.localeCompare(b.word)\n );\n const item_list = JSON.parse(JSON.stringify(items || []));\n /* istanbul ignore else */\n if (filter) {\n results = item_list.filter((item) => {\n let match_count = 0;\n item.match_index = 65535;\n item.match = '';\n const field_list = {};\n // Initialise field match variables\n for (const f of fields) {\n field_list[f] = {\n value: (item[f] || '').toLowerCase(),\n index: 65536,\n matched: 0,\n };\n }\n // Search for matches with the tokenised filter string\n for (const i of parts) {\n /* istanbul ignore else */\n if (i.word) {\n // Check fields for matches\n for (const f of fields) {\n const field = field_list[f];\n const index = field.value.indexOf(i.word);\n field.index = index < field.index ? index : field.index;\n field.matches = (\n field.value.match(i.regex) || []\n ).length;\n field.value = field.value.replace(i.regex, ' ');\n }\n // Update token match count\n for (const f of fields) {\n const field = field_list[f];\n /* istanbul ignore else */\n if (field.matches >= i.count) {\n match_count++;\n // Update field matches\n let changed = 0;\n const tokens = (\n item[`match_${f}`] ||\n item[f] ||\n ''\n ).split(' ');\n for (const k of tokens) {\n /* istanbul ignore else */\n if (changed >= i.count) {\n break;\n }\n /* istanbul ignore else */\n if (\n k.toLowerCase().indexOf(i.word) >= 0 &&\n k.indexOf('`') < 0\n ) {\n tokens[tokens.indexOf(k)] = k.replace(\n i.regex,\n '`$&`'\n );\n changed++;\n }\n }\n item[`match_${f}`] = tokens.join(' ');\n break;\n }\n }\n }\n }\n // Get field with the most relevent match\n for (const f of fields) {\n const field = field_list[f];\n /* istanbul ignore else */\n if (field.index < item.match_index && field.index >= 0) {\n item.match_index = field.index;\n item.match = f;\n }\n }\n return (\n item.match_index >= 0 &&\n item.match &&\n match_count >= parts.length\n );\n });\n } else {\n results = item_list;\n }\n // Sort by order of relevence then name\n results.sort((a, b) => {\n const diff = a.match_index - b.match_index;\n return diff === 0 ? a.name.localeCompare(b.name) : diff;\n });\n return results;\n}\n\n/**\n * Convert a match string from `filterList` to renderable HTML\n * @param str Match string to change\n */\nexport function matchToHighlight(str: string): string {\n /* istanbul ignore else */\n if (str) {\n str = str.replace(\n /\\`[a-zA-Z0-9\\@\\.\\_]*\\`/g,\n '$&'\n );\n str = str.replace(/\\`/g, '');\n }\n return str;\n}\n\n/**\n * Convert time string to ms from UTC epoch for today\n * @param time Time string in the format `HH:mm`\n */\nexport function timeToDate(time: string): number {\n const parts = time.split(':');\n const date = DateNow(new Date())\n .setValue({\n hour: +parts[0],\n minute: +parts[1],\n })\n .startOfValue('minute');\n return date.ms;\n}\n\n/**\n * Generate a random number\n * @param ceil Biggest value to generate not inclusive\n * @param floor Smallest value to generate. Defaults to 0\n */\nexport function randomInt(ceil: number, floor: number = 0) {\n return Math.floor(Math.random() * (ceil - floor)) + floor;\n}\n\n/**\n * Get time format string for locale\n * @param isLowerCaseAmPm - if true, we use lowercase for am/pm.\n */\nexport function timeFormatString(): string {\n return is24HourTime() ? 'HH:mm' : 'h:mma';\n}\n\nexport const hoursMinutes = (): string => (is24HourTime() ? 'HH:mm' : 'h:mma');\n\nexport function dayJsTimeFormatString(): string {\n return is24HourTime() ? 'HH:mm' : 'h:mma';\n}\n\nexport const dayJsHoursMinutes = (): string =>\n is24HourTime() ? 'HH:mm' : 'h:mm';\n\n/**\n * Converts a timeZone name into a date object.\n * @param timeZoneName - name of timezone\n */\nexport const timezoneNameToDate = (\n timeZoneName: string | undefined\n): DateTZ | undefined => {\n let zone: DateTZ | undefined;\n if (timeZoneName) {\n try {\n zone = DateNow(new Date()).toZone(timeZoneName);\n } catch (e) {\n // invalid timezone. Suppress logs here.\n // console.error(e);\n }\n }\n return zone;\n};\n\nexport const timezoneDisplay = (date: DateTZ) =>\n !!date ? `${date.formatDate('ZZZZ')}` : '';\nexport const gmtOffsetDisplay = (date: DateTZ) =>\n !!date ? `(GMT${date.formatDate('ZZ')})` : '';\n\n/**\n * Returns a full time with timezone.\n * @param date\n */\nexport function timeWithZoneFormatString(date: DateTZ): string {\n return `${date\n .formatDate(timeFormatString())\n .toLocaleLowerCase()} ${timezoneDisplay(date)}`;\n}\n\nexport function timeWithGmtOffsetFormatString(date: DateTZ): string {\n return `${date\n .formatDate(timeFormatString())\n .toLocaleLowerCase()} ${gmtOffsetDisplay(date)}`;\n}\n\n/**\n * Returns a full start end range.\n *\n * Start and end both use lowercase am/pm markers (c.f. timeFormatString).\n * @param startDateTz start time DateTZ object\n * @param endDateTz end time DateTZ object\n */\nexport function startEndTimeFormatString(\n startDateTz: DateTZ,\n endDateTz: DateTZ\n): string {\n return `${startDateTz\n .formatDate(timeFormatString())\n .toLocaleLowerCase()}-${endDateTz\n .formatDate(timeFormatString())\n .toLocaleLowerCase()}`;\n}\n\n/**\n * Returns a full start end range with timezone.\n *\n * Start and end both use lowercase am/pm markers (c.f. timeFormatString).\n * @param startDateTz start time DateTZ object\n * @param endDateTz end time DateTZ object\n */\nexport function startEndTimeWithZoneFormatString(\n startDateTz: DateTZ,\n endDateTz: DateTZ\n): string {\n return `${startDateTz\n .formatDate(timeFormatString())\n .toLocaleLowerCase()}-${endDateTz\n .formatDate(timeFormatString())\n .toLocaleLowerCase()} ${gmtOffsetDisplay(startDateTz)}`;\n}\n\n/**\n * Returns a full date with weekday day month year.\n * @param date\n * @param comma optional boolean to display a comma after the month\n */\nexport function dateLocalFormatString(date: DateTZ, comma?: boolean): string {\n if (comma) {\n return date.formatLocalDate('cccc d MMMM, yyyy');\n }\n return date.formatLocalDate('cccc d MMMM yyyy');\n}\n\nexport function dateBuildingFormatString(\n date: DateTZ,\n comma?: boolean\n): string {\n if (comma) {\n return date.formatDate('cccc d MMMM, yyyy');\n }\n return date.formatDate('cccc d MMMM yyyy');\n}\n\nexport function shorterLocalDateFormatString(\n date: DateTZ,\n comma?: boolean\n): string {\n if (comma) {\n return date.formatLocalDate('ccc d MMM, yyyy');\n }\n return date.formatLocalDate('ccc d MMM yyyy');\n}\n\nexport function shorterBuildingDateFormatString(\n date: DateTZ,\n comma?: boolean\n): string {\n if (comma) {\n return date.formatDate('ccc d MMM, yyyy');\n }\n return date.formatDate('ccc d MMM yyyy');\n}\n\n/** Whether locale string is displayed in 24 hour time */\nexport function is24HourTime(): boolean {\n const date = new Date();\n const localeString = date\n .toLocaleTimeString(\n document.querySelector('html').getAttribute('lang') ||\n navigator.language\n )\n .toLowerCase();\n return localeString.indexOf('am') < 0 && localeString.indexOf('pm') < 0;\n}\n\n/* istanbul ignore next */\n/**\n * Downloads a file to the users computer with the given filename and contents\n * @param filename Name of the file to download\n * @param contents Contents of the file to download\n */\nexport function downloadFile(filename: string, contents: string) {\n const element = document.createElement('a');\n element.setAttribute(\n 'href',\n 'data:text/plain;charset=utf-8,' +\n encodeURIComponent('\\uFEFF' + contents)\n );\n element.setAttribute('download', filename);\n\n element.style.display = 'none';\n document.body.appendChild(element);\n\n element.click();\n\n document.body.removeChild(element);\n}\n\n/**\n * Parse raw CSV data into a JSON object\n * @param csv CSV data to parse\n */\nexport function csvToJson(csv: string) {\n const lines = csv.split('\\n');\n let fields = lines.splice(0, 1)[0].split(',');\n fields = fields.map((v) => v.replace('\\r', ''));\n const list: any[] = [];\n for (const line of lines) {\n let parts = line.split(',');\n parts = parts.map((v) => v.replace('\\r', ''));\n /* istanbul ignore else */\n if (parts.length >= fields.length) {\n const item: any = {};\n for (let i = 0; i <= parts.length; i++) {\n let part = null;\n part = parts[i];\n /* istanbul ignore else */\n if (part !== undefined) {\n item[(fields[i] || '').split(' ').join('_').toLowerCase()] =\n part;\n }\n }\n list.push(item);\n }\n }\n\n return list;\n}\n\n/**\n * Convert javascript array to CSV string\n * @param json Javascript array to convert\n */\nexport function jsonToCsv(json: HashMap[]) {\n /* istanbul ignore else */\n if (json instanceof Array && json.length > 0) {\n const keys = Object.keys(json[0]);\n const valid_keys = keys.filter((key) => json[0].hasOwnProperty(key));\n return `${valid_keys.join(',')}\\n${json\n .map((item) =>\n valid_keys\n .map((key) => {\n return typeof item[key] !== 'boolean'\n ? `\"${item[key] || ''}\"`\n : item[key];\n })\n .join(',')\n )\n .join('\\n')}`;\n }\n return '';\n}\n\n/* istanbul ignore next */\n/**\n * detect IE\n * returns version of IE or false, if browser is not Internet Explorer\n */\nexport function detectIE() {\n var ua = window.navigator.userAgent;\n\n var msie = ua.indexOf('MSIE ');\n if (msie > 0) {\n // IE 10 or older => return version number\n return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\n }\n\n var trident = ua.indexOf('Trident/');\n if (trident > 0) {\n // IE 11 => return version number\n var rv = ua.indexOf('rv:');\n return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\n }\n\n var edge = ua.indexOf('Edge/');\n if (edge > 0) {\n // Edge (IE 12+) => return version number\n return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);\n }\n\n // other browser\n return false;\n}\n\n/**\n * Grab point details from mouse or touch event\n * @param event Event to grab details from\n */\nexport function eventToPoint(event: MouseEvent | TouchEvent): Point {\n if (!event) {\n return { x: -1, y: -1 };\n }\n if (event instanceof MouseEvent) {\n return { x: event.clientX, y: event.clientY };\n } else {\n return event.touches && event.touches.length > 0\n ? { x: event.touches[0].clientX, y: event.touches[0].clientY }\n : { x: -1, y: -1 };\n }\n}\n\n/* istanbul ignore next */\n/**\n * Flatten nested array\n * @param an_array Array to flatten\n */\nexport function flatten(an_array: T[]) {\n const stack = [...an_array];\n const res = [];\n while (stack.length) {\n // pop value from stack\n const next = stack.pop();\n if (Array.isArray(next)) {\n // push back array items, won't modify the original input\n stack.push(...next);\n } else {\n res.push(next);\n }\n }\n // reverse to restore input order\n return res.reverse();\n}\n\nconst seed = xmur3('PlaceOS');\nconst rand = sfc32(0x9e3779b9, 0x243f6a88, 0xb7e15162, seed());\n\nexport function predictableRandomInt(ceil: number = 100, floor: number = 0) {\n return Math.floor(rand() * (ceil - floor)) + floor;\n}\n\n// https://stackoverflow.com/questions/521295/seeding-the-random-number-generator-in-javascript\nfunction xmur3(str) {\n for (var i = 0, h = 1779033703 ^ str.length; i < str.length; i++)\n (h = Math.imul(h ^ str.charCodeAt(i), 3432918353)),\n (h = (h << 13) | (h >>> 19));\n return function () {\n h = Math.imul(h ^ (h >>> 16), 2246822507);\n h = Math.imul(h ^ (h >>> 13), 3266489909);\n return (h ^= h >>> 16) >>> 0;\n };\n}\n\nfunction sfc32(a, b, c, d) {\n return function () {\n a >>>= 0;\n b >>>= 0;\n c >>>= 0;\n d >>>= 0;\n var t = (a + b) | 0;\n a = b ^ (b >>> 9);\n b = (c + (c << 3)) | 0;\n c = (c << 21) | (c >>> 11);\n d = (d + 1) | 0;\n t = (t + d) | 0;\n c = (c + t) | 0;\n return (t >>> 0) / 4294967296;\n };\n}\n\nexport function isLessThanBreakpoint(breakpoint: number): boolean {\n if (window) {\n return window.innerWidth < breakpoint;\n }\n return false;\n}\n\nexport function toTitleCase(str: string): string {\n return typeof str === 'string'\n ? str\n .toLowerCase()\n .split(' ')\n .map(function (word) {\n return word.replace(word[0], word[0].toUpperCase());\n })\n .join(' ')\n : '';\n}\n","\nimport { Directive, OnDestroy } from '@angular/core';\nimport { BaseClass } from './base.class';\nimport { SpaceImageObject } from '@mckinsey-converge/base';\nimport { BehaviorSubject } from 'rxjs';\n\n@Directive({\n selector: 'a-very-basic-component-image-that-should-not-be-used'\n})\nexport class ImageDirective extends BaseClass implements OnDestroy {\n public foundImages?: SpaceImageObject[];\n public loadImages?: BehaviorSubject\n public ngOnDestroy(): void {\n this.destroy();\n }\n}","import {\n Directive,\n ElementRef,\n HostListener\n} from '@angular/core';\n\n@Directive({\n selector: 'input[type=number], input[numbersOnly]'\n})\nexport class NumbersOnlyDirective {\n\n constructor(private _el: ElementRef) {\n }\n\n @HostListener('input', ['$event']) onInputChange(event) {\n const initalValue = this._el.nativeElement.value;\n this._el.nativeElement.value = initalValue.replace(/[^0-9]*/g, '');\n if (initalValue !== this._el.nativeElement.value) {\n event.stopPropagation();\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'replace'\n})\nexport class ReplacePipe implements PipeTransform {\n\n transform(value: string, from: string = '_', to: string = ' '): string {\n return (value|| '').split(from).join(to);\n }\n}\n","export * from './lib/bookings.module';\nexport * from './lib/bookings.actions'\nexport * from './lib/bookings.reducer'\nexport * from './lib/bookings.types'\nexport * from './lib/bookings.utils'\n","\nimport { IBookingQueryOptions, PaginatedBooking } from '@mckinsey-converge/data-common';\nimport { \n createLoadingAction\n} from '../../../loading/src/lib/loading.actions';\n\nimport {\n MyBookingsState,\n MyBookingsStoreState,\n} from './bookings.types';\nimport {\n createAction,\n props\n} from '@ngrx/store';\n\nexport const bookingStateSelector = (state: MyBookingsStoreState) => state.bookings;\n\nexport const loadBookingsWithQuery = createAction('[Bookings] Load Bookings with query', props());\n\nexport const loadHomepageBookingsResults = createLoadingAction('HomepageBookings', 'homepage');\n\nexport const loadUpcomingBookingsResults = createLoadingAction('UpcomingBookings', 'upcoming');\n\nexport const loadPastBookingsResults = createLoadingAction('PastBookings', 'past');\n\nexport const loadCancelledBookingsResults = createLoadingAction('CancelledBookings', 'cancelled');\n\nexport const loadBookingByIdResults = createLoadingAction('BookingById', 'bookingById');\n\nexport const clearBookingByIdResults = createAction('[BookingById] Clear Booking Data');\n","import { Injectable } from '@angular/core';\nimport {\n Actions,\n Effect,\n ofType\n} from '@ngrx/effects';\nimport {\n IBookingQueryOptions,\n BookingsPaginatedService\n} from '../../../data-common/src/lib/bookings';\nimport {\n createLoadingEffect,\n LoadingAction\n} from '@mckinsey-converge/loading';\nimport {\n loadHomepageBookingsResults,\n loadPastBookingsResults,\n loadUpcomingBookingsResults,\n loadCancelledBookingsResults,\n loadBookingsWithQuery,\n loadBookingByIdResults\n} from './bookings.actions';\nimport { mergeMap } from 'rxjs/operators';\nimport {\n\n} from './bookings.utils';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\n\n@Injectable()\nexport class BookingsEffects {\n constructor(private actions: Actions,\n private bookingService: BookingsPaginatedService) {\n }\n\n @Effect()\n public afterBookingsRequestResultsLoadOthersEffect = this.actions.pipe(\n ofType(loadBookingsWithQuery),\n mergeMap((action: LoadingAction) => {\n const date = new DateTZ({date: action.from})\n const yourBookingsRequest = {\n email: action.email,\n pagination: true,\n limit: null,\n offset: action.offset,\n show_cancelled: false,\n sort: 'start_epoch asc',\n filters: {\n end_epoch: `>=${date.subtractValue({ minutes: 5 }).seconds}`,\n },\n include_rooms: true\n };\n const upcomingRequest = {\n email: action.email,\n pagination: true,\n limit: null,\n offset: action.offset,\n show_cancelled: false,\n sort: 'start_epoch asc',\n filters: {\n end_epoch: `>=${date.seconds}`,\n },\n include_rooms: true\n };\n const pastRequest = {\n email: action.email,\n pagination: true,\n limit: null,\n offset: action.offset,\n show_cancelled: false,\n sort: 'start_epoch desc',\n filters: {\n start_epoch: `>${date.subtractValue({ hours: 48 }).seconds}`,\n end_epoch: `<${date.seconds}`,\n },\n include_rooms: true\n };\n const cancelledRequest = {\n email: action.email,\n pagination: true,\n limit: null,\n offset: action.offset,\n show_cancelled: true,\n sort: 'start_epoch desc',\n filters: {\n start_epoch: `>${date.subtractValue({ hours: 48 }).seconds}`,\n },\n include_rooms: true\n };\n const byIdRequest = {\n email: action.email,\n id: action.id,\n pagination: true,\n limit: 1,\n include_rooms: true\n };\n\n const effects = [];\n switch(action.target) {\n case 'upcoming':\n effects.push(loadUpcomingBookingsResults.request(upcomingRequest));\n break;\n case 'past':\n effects.push(loadPastBookingsResults.request(pastRequest));\n break;\n case 'cancelled':\n effects.push(loadCancelledBookingsResults.request(cancelledRequest));\n break;\n case 'bookingById':\n effects.push(loadBookingByIdResults.request(byIdRequest));\n break\n case 'homepage':\n effects.push(loadHomepageBookingsResults.request(yourBookingsRequest));\n // effects.push(loadPastBookingsResults.request(pastRequest));\n break\n default:\n }\n return effects;\n })\n );\n\n @Effect()\n public loadHomepageBookingsResultsEffect = createLoadingEffect(this.actions, loadHomepageBookingsResults,\n (action) => this.bookingService.userBookings(action, `homepage-${action.filters?.start_epoch || ''}${action.filters?.end_epoch || ''}`));\n\n @Effect()\n public loadUpcomingBookingsResultsEffect = createLoadingEffect(this.actions, loadUpcomingBookingsResults,\n (action) => this.bookingService.userBookings(action, `upcoming-${action.filters?.start_epoch || ''}${action.filters?.end_epoch || ''}`));\n \n @Effect()\n public loadPastBookingsResultsEffect = createLoadingEffect(this.actions, loadPastBookingsResults,\n (action) =>\n this.bookingService.userBookings(action, `past-${action.filters?.start_epoch || ''}${action.filters?.end_epoch || ''}`));\n\n @Effect()\n public loadCancelledBookingsResultsEffect = createLoadingEffect(this.actions, loadCancelledBookingsResults,\n (action) =>\n this.bookingService.userBookings(action, `cancelled-${action.filters?.start_epoch || ''}${action.filters?.end_epoch || ''}`));\n\n @Effect()\n public loadBookingByIdResultsEffect = createLoadingEffect(this.actions, loadBookingByIdResults,\n (action) => \n this.bookingService.userBookings(action, `bookingById-${action.id}`));\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\nimport { bookingsReducer } from './bookings.reducer';\nimport { BookingsEffects } from './bookings.effects';\n\n@NgModule({\n imports: [\n CommonModule,\n EffectsModule.forFeature([BookingsEffects]),\n StoreModule.forFeature('bookings', bookingsReducer)\n ]\n})\nexport class BookingsModule {\n}\n","import { LoadingModel } from '@mckinsey-converge/loading';\nimport {\n createReducer,\n on\n} from '@ngrx/store';\nimport {\n loadHomepageBookingsResults,\n loadUpcomingBookingsResults,\n loadPastBookingsResults,\n loadCancelledBookingsResults,\n loadBookingByIdResults,\n clearBookingByIdResults,\n} from './bookings.actions';\nimport { MyBookingsState } from './bookings.types';\n \nimport { \n BookingFormState,\n clearBookingFormData,\n clearRoomFilters,\n openBookingSurvey,\n storeBookingFormData,\n storeRoomFilters\n} from '@mckinsey-converge/data-common';\n\n\nexport const initialBookingsState: MyBookingsState = {\n query: LoadingModel.empty(),\n homepage: LoadingModel.empty(),\n upcoming: LoadingModel.empty(),\n past: LoadingModel.empty(),\n cancelled: LoadingModel.empty(),\n bookingById: LoadingModel.empty(),\n};\n\nexport const bookingsReducer = createReducer(initialBookingsState,\n on(clearBookingByIdResults, (state: MyBookingsState) => ({\n ...state,\n bookingById: LoadingModel.empty(),\n }) as MyBookingsState),\n ...loadHomepageBookingsResults.ons,\n ...loadUpcomingBookingsResults.ons,\n ...loadPastBookingsResults.ons,\n ...loadCancelledBookingsResults.ons,\n ...loadBookingByIdResults.ons,\n );\n\n\n\n export const initialBookingFormState: BookingFormState = {\n activeFormFilters: []\n };\n \n export const bookingFormReducer = createReducer(initialBookingFormState,\n on(storeBookingFormData, (state: BookingFormState, action) => {\n return {\n ...state,\n activeForm: {\n ...state.activeForm,\n ...action.payload\n }\n } as BookingFormState;\n }),\n on(clearBookingFormData, state => ({\n ...state,\n activeForm: undefined\n }) as BookingFormState),\n on(openBookingSurvey, state => ({\n ...state,\n bookingCompleted: new Date()\n }) as BookingFormState),\n on(storeRoomFilters, (state: BookingFormState, action) => {\n return {\n ...state,\n activeFormFilters: action.payload\n } as BookingFormState;\n }),\n on(clearRoomFilters, (state: BookingFormState) => ({\n ...state,\n activeFormFilters: initialBookingFormState.activeFormFilters\n }) as BookingFormState)\n );\n \n","import { Booking } from '@mckinsey-converge/data-common';\nimport { SelectOption } from '@mckinsey-converge/ui';\n\nexport const mapBookingToSelectOption = (booking?: Booking): SelectOption => booking ? ({\n value: booking.id,\n display: booking.name\n}) : undefined;\n","export * from './lib/buildings.module';\nexport * from './lib/buildings.actions'\nexport * from './lib/buildings.types'\nexport * from './lib/buildings.reducer'\n","import { \n createLoadingAction,\n} from '../../../loading/src/lib/loading.actions';\nimport {\n Building,\n BuildingCity,\n} from '../../../data-common/src/lib/organisation/building.class';\nimport {\n BuildingLevel,\n} from '../../../data-common/src/lib/organisation/level.class'\nimport {\n Organisation,\n} from '../../../data-common/src/lib/organisation/organisation.class'\nimport { createSelector } from '@ngrx/store';\nimport {\n BuildingState,\n BuildingStoreState\n} from './buildings.types';\n\nexport const loadBuildings = createLoadingAction('Buildings', 'data');\n\nexport const buildingStateSelector = (state: BuildingStoreState) => state.buildings;\n\nexport const selectLoadBuildingsSuccess = createSelector(buildingStateSelector, loadBuildings.selectors.optionalSuccess);\n\n/**\n * Groups buildings by city\n */\nexport const selectBuildingOptionsGroupedByCity = createSelector(loadBuildings.selectors.optionalSuccess, (success) => {\n if (success) {\n const mapped = new Map();\n success.forEach(s => {\n const found = Array.from(mapped.keys()).find(c => c.name === s.city);\n let list = found ? mapped.get(found) : undefined;\n if (!list) {\n list = [];\n mapped.set({\n name: s.city,\n timezone: s.timezone\n }, list);\n }\n list.push(s);\n });\n return mapped;\n }\n return new Map();\n});\n\nexport const selectLevelByZoneId = createSelector(selectLoadBuildingsSuccess,\n (buildings, param: string) => {\n if (buildings) {\n return buildings.map(b => b.levels.find((l: BuildingLevel) => l.id === param))\n ?.[0] ?? undefined;\n }\n return undefined;\n });\n","import { Injectable } from '@angular/core';\nimport {\n Actions,\n Effect,\n ofType\n} from '@ngrx/effects';\nimport {\n Organisation,\n OrganisationService\n} from '../../../data-common/src/lib/organisation';\nimport { loadBuildings } from './buildings.actions';\nimport {\n createLoadingEffect,\n LoadingAction,\n Payload\n} from '@mckinsey-converge/loading';\nimport { loadOrganisations } from '../../../organisation/src/lib/organisation.actions';\nimport { map } from 'rxjs/operators';\n\n\n@Injectable()\nexport class BuildingsEffects {\n\n constructor(private actions: Actions,\n private organizationService: OrganisationService) {\n\n }\n\n @Effect()\n public loadBuildings = createLoadingEffect(this.actions, loadBuildings,\n (action) => this.organizationService.loadBuildingsWithOrg(action));\n\n @Effect()\n public loadBuildingsAfterOrg = this.actions.pipe(\n ofType(loadOrganisations.success),\n map((action: LoadingAction>) => loadBuildings.request(action.payload)));\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EffectsModule } from '@ngrx/effects';\nimport { BuildingsEffects } from './buildings.effects';\nimport { StoreModule } from '@ngrx/store';\nimport { buildingsReducer } from './buildings.reducer';\n\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule,\n EffectsModule.forFeature([\n BuildingsEffects\n ]),\n StoreModule.forFeature('buildings', buildingsReducer)\n ]\n})\nexport class BuildingsModule {\n}\n","import { createReducer } from '@ngrx/store';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { loadBuildings } from './buildings.actions';\nimport { BuildingState } from './buildings.types';\n\nexport const initialBuildingState: BuildingState = {\n data: LoadingModel.empty()\n};\n\nexport const buildingsReducer = createReducer(initialBuildingState,\n ...loadBuildings.ons\n);\n","export * from './lib/data-common.module';\nexport * from './lib/booking';\nexport * from './lib/bookings';\nexport * from './lib/catering';\nexport * from './lib/location';\nexport * from './lib/organisation';\nexport * from './lib/spaces';\nexport * from './lib/users';\nexport * from './lib/app.service';\nexport * from './lib/hotkeys.service';\nexport * from './lib/base.service';\nexport * from './lib/base-api.class';\nexport * from './lib/reports'\nexport * from './lib/service-manager.class';\nexport * from './lib/settings.service';\nexport * from './lib/spec-helpers';\nexport * from './lib/settings.interfaces';\nexport * from './lib/validation.utilities';\nexport * from './lib/status.interfaces';\nexport * from './lib/recurrence/recurrence.utils';\nexport * from './lib/close-modal-dialog-service';\nexport * from './lib/validation.utilities';\nexport * from './lib/collapse-accordion-service';","import { HashMap } from '@mckinsey-converge/base';\n\n/**\n * Convert map into a query string\n * @param map Key value pairs to convert\n */\nexport function toQueryString(map: HashMap) {\n let str = '';\n if (map) {\n for (const key in map) {\n if (map.hasOwnProperty(key) && map[key] !== undefined && map[key] !== null) {\n str += `${(str ? '&' : '')}${key}=${map[key]}`;\n }\n }\n }\n return str;\n}\n","import {\n ApplicationRef,\n Injectable,\n NgZone,\n} from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { take, first } from 'rxjs/operators';\n\nimport { ComposerService } from '@placeos/composer';\nimport { PlaceOSOptions } from '@placeos/ts-client';\nimport { HeapIoService } from '@acaprojects/ngx-heap-io';\n\nimport {\n BehaviorSubject,\n Observable,\n Subject\n} from 'rxjs';\n\nimport {\n ApplicationLoadingState,\n BaseClass,\n ConsoleStream,\n log\n} from '@mckinsey-converge/base';\nimport { SettingsService } from './settings.service';\n\nimport { HotkeysService } from './hotkeys.service';\nimport {\n ApplicationIcon,\n ComposerSettings\n} from './settings.interfaces';\nimport { EnvironmentService } from '../../../environment/src/lib/environment.service'; // '@mckinsey-converge/environment';\nimport {\n Store\n} from '@ngrx/store';\nimport { selectCurrentUser } from '../../../user/src/lib/user.actions';\nimport { UserStoreState } from '../../../user/src/lib/user.types';\nimport { Booking } from './bookings';\nimport { filter } from 'rxjs/operators';\nimport { SnackBarService } from '../../../ui/src/lib/custom-snackbar-component/custom-snackbar-component.service';\n\ndeclare global {\n interface Window {\n application: ApplicationService;\n mock: {\n enabled: boolean;\n backend: any;\n };\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApplicationService extends BaseClass {\n /** Map of state variables for Service */\n protected _subjects: {\n [key: string]: BehaviorSubject | Subject;\n } = {};\n /** Map of observables for state variables */\n protected _observers: { [key: string]: Observable } = {};\n _kioskFormFilter: boolean;\n\n constructor(\n public store: Store,\n public analytics: HeapIoService,\n private _app_ref: ApplicationRef,\n private _zone: NgZone,\n private _title: Title,\n private _settings: SettingsService,\n private _hotkeys: HotkeysService,\n private _composer: ComposerService,\n private _snackbar: MatSnackBar,\n private _environment: EnvironmentService,\n private snack: SnackBarService\n\n ) {\n super();\n this.set('system', null);\n this.set('title', 'Home');\n this.set('loading', {});\n this.set('CONCIERGE.day_view.viewing', null);\n this.set('undo', new BehaviorSubject<{\n action: 'series' | 'booking',\n booking: Booking\n } | null>(null));\n\n this.set('APP.breakdown', false);\n\n this._app_ref.isStable.pipe(first(_ => _)).subscribe(() => {\n this._zone.run(() => {\n this.log('APP', `Application has stablised.`);\n this.waitForSettings();\n });\n });\n }\n\n public set kioskFormFilter(isIt: boolean) {\n this._kioskFormFilter = isIt;\n }\n\n public get kioskFormFilter():boolean {\n return this._kioskFormFilter \n }\n\n /** Analytics service */\n public get Analytics() {\n return {};\n }\n\n /** Hotkeys service */\n public get Hotkeys() {\n return this._hotkeys;\n }\n\n /**\n * Get a setting from the settings service\n * @param key Name of the setting. i.e. nested items can be grabbed using `.` to seperate key names\n */\n public setting(key: string): any {\n return this._settings.get(key);\n }\n\n /**\n * Title of the page\n */\n public set title(value: string) {\n const title_suffix = this.setting('app.title');\n this.set('title', value);\n this._title.setTitle(`${value ? value + ' | ' : ''}${title_suffix}`);\n }\n\n /**\n * Title of the page\n */\n public get title(): string {\n return this._title.getTitle();\n }\n\n /** Root API Endpoint */\n public get endpoint() {\n return `/api/staff/`;\n }\n\n /** Root API Endpoint for engine */\n public get engine_endpoint() {\n return this._composer.auth.api_endpoint + '/';\n }\n\n /** Whether settings has been loaded */\n public get has_settings(): boolean {\n return this._settings.is_initialised;\n }\n\n /**\n * Create notification popup\n * @param type CSS Class to add to the notification\n * @param message Message to display on the notificaiton\n * @param action Display text for the callback action\n * @param on_action Callback of action on the notification\n * @param icon Icon to render to the left of the notification message\n */\n public notify(\n type: string,\n message: string,\n action: string = 'OK',\n on_action?: () => void,\n icon: ApplicationIcon = {\n type: 'icon',\n class: 'material-icons',\n content: 'info'\n }\n ): void {\n this.openSnack(message, type);\n // const snackbar_ref = this._snackbar.open(message, action, {\n // panelClass: [type],\n // duration: 5000\n // });\n // this.subscription(\n // 'snackbar_close',\n // snackbar_ref.afterDismissed().subscribe(() => {\n // this.unsub('snackbar_close');\n // this.unsub('notify');\n // })\n // );\n // if (action) {\n // on_action = on_action || (() => snackbar_ref.dismiss());\n // this.subscription(\n // 'notify',\n // snackbar_ref.onAction().subscribe(() => on_action())\n // );\n // }\n }\n\n public openSnack(message, type) {\n this.snack.openSnackBar(message, type, 5000);\n }\n \n /**\n * Create success notification popup\n * @param msg Message to display on the notificaiton\n * @param action Display text for the callback action\n * @param on_action Callback of action on the notification\n */\n public notifySuccess(msg: string, action?: string, on_action?: () => void): void {\n const icon: ApplicationIcon = {\n type: 'icon',\n class: 'material-icons',\n content: 'done'\n };\n this.notify('success', msg, action, on_action, icon);\n }\n\n /**\n * Create error notification popup\n * @param msg Message to display on the notificaiton\n * @param action Display text for the callback action\n * @param on_action Callback of action on the notification\n */\n public notifyError(msg: string, action?: string, on_action?: () => void): void {\n const icon: ApplicationIcon = {\n type: 'icon',\n class: 'material-icons',\n content: 'error'\n };\n this.notify('error', msg, action, on_action, icon);\n }\n\n /**\n * Create warning notification popup\n * @param msg Message to display on the notificaiton\n * @param action Display text for the callback action\n * @param on_action Callback of action on the notification\n */\n public notifyWarn(msg: string, action?: string, on_action?: () => void): void {\n const icon: ApplicationIcon = {\n type: 'icon',\n class: 'material-icons',\n content: 'warning'\n };\n this.notify('warn', msg, action, on_action, icon);\n }\n\n /**\n * Create info notification popup\n * @param msg Message to display on the notificaiton\n * @param action Display text for the callback action\n * @param on_action Callback of action on the notification\n */\n public notifyInfo(msg: string, action?: string, on_action?: () => void): void {\n this.notify('info', msg, action, on_action);\n }\n\n /**\n * Log data to the browser console\n * @param type Type of message\n * @param msg Message body\n * @param args array of argments to log to the console\n * @param stream Stream to emit the console on. 'debug', 'log', 'warn' or 'error'\n * @param force Whether to force message to be emitted when debug is disabled\n */\n public log(\n type: string,\n msg: string,\n args?: any,\n stream: ConsoleStream = 'debug',\n force: boolean = false\n ): void {\n log(type, msg, args, stream, force);\n }\n\n /**\n * Get the current value of the named property\n * @param name Property name\n */\n public get(name: string): U {\n return this._subjects[name] && this._subjects[name] instanceof BehaviorSubject\n ? (this._subjects[name] as BehaviorSubject).getValue()\n : null;\n }\n\n /**\n * Listen to value change of the named property\n * @param name Property name\n * @param next Callback for value changes\n */\n public listen(name: string): Observable {\n if (!this._observers[name]) {\n this.set(name, null);\n }\n return this._observers[name];\n }\n\n /**\n * Update the value of the named property\n * @param name Property name\n * @param value New value\n */\n public set(name: string, value: U): void {\n if (!this._subjects[name]) {\n this._subjects[name] = new BehaviorSubject(value);\n this._observers[name] = this._subjects[name].asObservable();\n } else {\n this._subjects[name].next(value);\n }\n }\n\n /** Wait for settings to be initialised before setting up the application */\n private waitForSettings() {\n // Wait until the settings have loaded before initialising\n this._settings.initialised.pipe(first(_ => _)).subscribe(() => this.init());\n }\n\n /**\n * Initialise application services\n */\n private init(): void {\n this.setupComposer();\n this.subscription('currentUser', this.store.select(selectCurrentUser)\n .pipe( filter(user => user !== undefined) )\n .pipe(take(1))\n .subscribe((user: any) => {\n // Once we know we have the user loaded.\n this.setupAnalytics(user?.fmno);\n })\n );\n this._composer.initialised.pipe(first(_ => _)).subscribe(() => {\n this._initialised.next(true);\n });\n // Add service to window if in debug mode\n if (window.debug) {\n window.application = this;\n }\n }\n\n /**\n * Initialise the composer library comms\n */\n private setupComposer(): void {\n this.log('SYSTEM', 'Setup up composer...');\n const loading: ApplicationLoadingState = this.get('loading');\n loading.composer = {\n message: 'Initialising service connection',\n state: 'loading'\n };\n this.set('loading', loading);\n // Get application settings\n const settings: ComposerSettings = this._settings.get('composer') || {};\n const protocol = settings.protocol || location.protocol;\n const host = settings.domain || location.hostname;\n const port = settings.port || location.port;\n const url = settings.use_domain ? `${protocol}//${host}:${port}` : location.origin;\n const route = host.includes('localhost') && port === '4200' ? '' : settings.route || '';\n const mock =\n this._settings.get('mock') ||\n location.href.includes('mock=true') ||\n localStorage.getItem('mock') === 'true';\n // Generate configuration object\n const config: PlaceOSOptions = {\n scope: 'public',\n host: `${host}:${port}`,\n auth_uri: `${url}/auth/oauth/authorize`,\n token_uri: `${url}/auth/token`,\n redirect_uri: `${location.origin}${route}/oauth-resp.html`,\n handle_login: !settings.local_login,\n mock\n };\n this._composer.setup(config);\n loading.composer = {\n message: 'Initialising service connection',\n state: 'complete'\n };\n this.set('loading', loading);\n }\n\n private setupAnalytics(fmno: string) {\n this.log('HEAP', `Loading heap ${this._environment?.heap_io_id}`);\n // Default Heap app ID via the default setting\n const heapIo = this._settings.get('app.heap_io');\n if (this._environment?.heap_io_id) {\n // Apply Heap app ID via the environmental setting\n heapIo.app_id = this._environment.heap_io_id;\n }\n if (heapIo) {\n this.analytics.load(heapIo);\n if (fmno) {\n this.analytics.identify(fmno);\n }\n } else {\n this.log('HEAP', `Heap could not be found for the current frontend ${this._settings.frontend}`);\n }\n }\n\n}\n","import { Subject } from 'rxjs';\n\nimport {\n BaseClass,\n HashMap\n} from '@mckinsey-converge/base';\nimport {\n ServiceLike,\n ServiceManager\n} from './service-manager.class';\n\nexport type ApiEventType = 'value_change' | 'item_saved' | 'reset' | 'other';\n\nexport interface ApiEvent {\n type: ApiEventType;\n metadata: T;\n}\n\n\nexport class BaseDataClass extends BaseClass {\n /** Subject for emitting events on the object */\n protected readonly event_subject = new Subject();\n /** Observable for events on this object */\n public readonly events = this.event_subject.asObservable();\n /** Unique Identifier of the object */\n public readonly id: string;\n /** Human readable name of the object */\n public readonly name: string;\n /** Email address associated with the object */\n public readonly email: string;\n /** Map of local property names to server ones */\n protected _server_names: HashMap = {};\n\n /** Service for managing model on the server */\n protected get _service(): ServiceLike {\n return ServiceManager.serviceFor(BaseDataClass);\n }\n\n constructor(raw_data: HashMap) {\n super();\n this.id = raw_data.id || raw_data.zone_id || raw_data.email || '';\n this.name = raw_data.name || '';\n this.email = `${raw_data.email || ''}`.toLowerCase();\n }\n\n /**\n * Save pending changes to server\n */\n public save(): Promise {\n if (this._service) {\n const form = this.toJSON();\n return new Promise((resolve, reject) => {\n const promise = this.id\n ? this._service.update(this.id, form)\n : this._service.add(form);\n promise.then(\n (d) => {\n this.event_subject.next({ type: 'item_saved', metadata: d });\n resolve(d);\n },\n (_) => reject(_)\n );\n });\n } else {\n Promise.reject('No service to process request');\n }\n }\n\n /**\n * Delete this item from the server\n */\n public delete(): Promise {\n if (this.id) {\n return this._service.delete(this.id);\n }\n }\n\n /**\n * Run task for this item on the service\n * @param task_name Name of the task\n * @param parameters Parameters to pass to the task request\n */\n public runTask(task_name: string, parameters: HashMap): Promise {\n if (this.id) {\n return this._service.task(this.id, task_name, parameters);\n }\n }\n\n /**\n * Convert object into plain object\n */\n public toJSON(this: BaseDataClass): HashMap {\n const obj: any = { ...this };\n // Remove local private members\n delete obj._service;\n delete obj._changes;\n delete obj.event_subject;\n delete obj.events;\n // Remove parent private members\n delete obj._timers;\n delete obj._intervals;\n delete obj._subscriptions;\n delete obj._server_names;\n delete obj._initialised;\n // Convert remaining members to be public\n const keys = Object.keys(obj);\n for (const key of keys) {\n if (key[0] === '_') {\n const new_key = this._server_names[key.substring(1)] || key.substring(1);\n obj[new_key] = obj[key];\n delete obj[key];\n } else if (obj[key] === undefined) {\n delete obj[key];\n }\n }\n return obj;\n }\n\n /**\n * Make a copy of this object\n */\n public clone(): BaseDataClass {\n return new BaseDataClass(this);\n }\n\n /**\n * Make a copy of this object without identification data\n */\n public duplicate(): BaseDataClass {\n return new BaseDataClass({ ...this, id: null, email: null });\n }\n}\n","import { ComposerService } from '@placeos/composer';\nimport { BehaviorSubject, Observable, of, Subject, Subscriber } from 'rxjs';\n\nimport { BaseDataClass } from './base-api.class';\nimport { BaseClass, HashMap } from '@mckinsey-converge/base';\nimport { ApplicationService } from './app.service';\nimport { toQueryString } from './api.utilities';\nimport { SettingsService } from './settings.service';\nimport { catchError, map } from 'rxjs/operators';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\n\nexport interface IEngineResponse {\n results: HashMap[];\n total: number;\n}\n\nexport class BaseAPIService extends BaseClass {\n /** Application service */\n public parent: ApplicationService;\n /** Display name of the service */\n protected _name: string;\n /** API Route of the service */\n protected _api_route: string;\n /** Map of state variables for Service */\n protected _subjects: { [key: string]: BehaviorSubject | Subject } = {};\n /** Map of observables for state variables */\n protected _observers: { [key: string]: Observable } = {};\n /** Map of poll subscribers for API endpoints */\n protected _subscribers: { [key: string]: Subscriber } = {};\n /** Map of promises for Service */\n protected _promises: { [key: string]: Promise } = {};\n /** Comparison function for service items */\n protected _compare: (a: T, b: T) => boolean = (a, b) =>\n a === b || (a as any).id === (b as any).id;\n /** Default filter function for list method */\n protected _list_filter: (a: T) => boolean = (a) => !!a;\n\n /** Http Client */\n protected get http() {\n return this._composer.http;\n }\n constructor(protected _composer: ComposerService,\n protected settingsService: SettingsService) {\n super();\n this._name = 'Base';\n this._api_route = 'base';\n this.set('list', []);\n }\n\n /**\n * Injects concierge into form_data.\n */\n private injectConcierge(form_data: HashMap) {\n // we only send it over when concierge, since the BE may check for presence rather than\n // if its true or not.\n if (this.settingsService.concierge) {\n return { ...form_data, concierge: true }\n }\n return form_data;\n }\n\n /**\n * Initailise service\n */\n public init() {\n this.load().then(\n (_) => this._initialised.next(true),\n (err) => this.timeout('init', () => this.init(), 1000)\n );\n }\n\n /**\n * Get API route for the service\n * @param engine Whether endpoint is using the application API or engine API\n */\n public route(engine: boolean = false) {\n const endpoint = engine\n ? this._composer.auth.api_endpoint\n : '/api/staff';\n return `${endpoint}/${this._api_route}`;\n }\n\n /** API Route of the service */\n public get api_route() {\n return this._api_route;\n }\n\n /**\n * Get the current value of the named property\n * @param name Property name\n */\n public get(name: string): U {\n if (!this._observers[name]) {\n this.set(name, null);\n }\n return (this._subjects[name] as BehaviorSubject).getValue();\n }\n\n /**\n * Listen to value change of the named property\n * @param name Property name\n * @param next Callback for value changes\n */\n public listen(name: string): Observable {\n if (!this._observers[name]) {\n this.set(name, null);\n }\n return this._observers[name];\n }\n\n /**\n * Update the value of the named property\n * @param name Property name\n * @param value New value\n */\n protected set(name: string, value: U): void {\n if (!this._subjects[name]) {\n this._subjects[name] = new BehaviorSubject(value);\n this._observers[name] = this._subjects[name].asObservable();\n } else {\n this._subjects[name].next(value);\n }\n }\n\n /**\n * Get list of loaded items\n * @param predicate Function for filtering the list\n */\n public filter(predicate: (a: T) => boolean = this._list_filter): T[] {\n const list: T[] = this.get('list');\n return list.filter(predicate);\n }\n\n /**\n * Get item with the given id from the loaded items\n * @param id ID of the item\n */\n public find(id: string): T {\n const list = this.get('list');\n return list.find((i) => i.id === id || (i.email?.toLowerCase() === id?.toLowerCase()));\n }\n\n /**\n * Query the index of the API route associated with this service\n * @param query_params Map of query paramaters to add to the request URL\n */\n public query(query_params: HashMap = {}): Promise {\n let engine = false;\n let cache = 1000;\n /* istanbul ignore else */\n if (query_params) {\n engine = !!query_params.engine;\n delete query_params.engine;\n cache = typeof query_params.cache !== 'boolean' ? query_params.cache || 1000 : 1000;\n typeof query_params.cache !== 'boolean' && delete query_params.cache;\n }\n let query = toQueryString(query_params);\n const key = `query|${query}`;\n if (!this._promises[key]) {\n // Bring back once implemented in the API\n // if (this.settingsService.concierge) {\n // query = query + '&check_access=true';\n // }\n this._promises[key] = new Promise((resolve, reject) => {\n const url = `${this.route(engine)}${query ? '?' + query : ''}`;\n let result: T[] | HashMap[] = [];\n this.http.get(url).subscribe(\n (d: IEngineResponse | HashMap[]) => {\n result =\n d && d instanceof Array\n ? d.map((i) => this.process(i))\n : d && !(d instanceof Array) && d.results\n ? (d.results as HashMap[])\n : d && !(d instanceof Array) && !d.results \n ? [d]\n : [];\n },\n (e) => {\n reject(e);\n this._promises[key] = null;\n },\n () => {\n resolve(result);\n this.timeout(key, () => (this._promises[key] = null), cache);\n }\n );\n });\n }\n return this._promises[key];\n }\n\n /**\n * query function version -2 - returns observable instead of promise...\n * Query the index of the API route associated with this service\n * @param query_params Map of query paramaters to add to the request URL\n */\n public queryObsr(query_params: HashMap = {}):Observable{\n let engine = false;\n let cache = 1000;\n /* istanbul ignore else */\n if (query_params) {\n engine = !!query_params.engine;\n delete query_params.engine;\n }\n let query = toQueryString(query_params);\n const key = `query|${query}`;\n const url = `${this.route(engine)}${query ? '?' + query : ''}`;\n return this.http.get(url).pipe(\n map((d: IEngineResponse | HashMap[]) => this.processApiResult(d) ),\n catchError((error: any, result?: T) => {\n console.log(error);\n return of(result as T);\n })\n );;\n }\n\n\n /**\n * \n * @param d \n * @returns \n */\n processApiResult(d: IEngineResponse | HashMap[]): IEngineResponse | HashMap[]{\n let result: IEngineResponse | HashMap[] =\n d && d instanceof Array\n ? d.map((i) => this.process(i))\n : d && !(d instanceof Array) && d.results\n ? (d.results as HashMap[])\n : d && !(d instanceof Array) && !d.results \n ? [d]\n : [];\n return result;\n }\n\n /**\n * query function version -2 - returns observable instead of promise...\n * Query the index of the API route associated with this service\n * @param query_params Map of query paramaters to add to the request URL\n */\n public queryRoomsForQR(query_params: HashMap = {}):Observable{\n let engine = false;\n let cache = 1000;\n /* istanbul ignore else */\n if (query_params) {\n engine = !!query_params.engine;\n delete query_params.engine;\n }\n let query = toQueryString(query_params);\n const key = `query|${query}`;\n const url = `${this.route(engine)}${query ? '?' + query : ''}`;\n return this.http.get(url);\n }\n \n /**\n * Query the API route for a sepecific item\n * @param id ID of the item\n * @param query_params Map of query paramaters to add to the request URL\n */\n public show(id: string, query_params: HashMap = {}): Promise {\n let engine = false;\n /* istanbul ignore else */\n if (query_params) {\n engine = !!query_params.engine;\n delete query_params.engine;\n }\n const query = toQueryString(query_params);\n const key = `show|${id}|${query}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const url = `${this.route(engine)}/${id}${query ? '?' + query : ''}`;\n let result: T = null;\n this.http.get(url).subscribe(\n (d) => (result = this.process(d)),\n (e) => {\n reject(e);\n this._promises.new_item = null;\n },\n () => {\n resolve(result);\n this.timeout(key, () => (this._promises[key] = null), 1000);\n }\n );\n });\n }\n return this._promises[key];\n }\n\n /**\n * Make post request for a new item to the service\n * @param form_data Data to post to the server\n * @param query_params Map of query paramaters to add to the request URL\n */\n public add(form_data: HashMap, query_params: HashMap = {}): Promise {\n /* istanbul ignore else */\n if (!this._promises.new_item) {\n this._promises.new_item = new Promise((resolve, reject) => {\n const query = toQueryString(query_params);\n const url = `${this.route(query_params.engine)}${query ? '?' + query : ''}`;\n let result: T = null;\n this.http.post(url, this.injectConcierge(form_data)).subscribe(\n (d) => (result = this.process(d)),\n (e) => {\n reject(e);\n this.analyticsEvent(`create-${this._name.toLowerCase()}-failed`);\n this._promises.new_item = null;\n },\n () => {\n resolve(result);\n this.set('list', this.updateList(this.get('list'), [result]));\n this.analyticsEvent(`create-${this._name.toLowerCase()}-success`);\n this._promises.new_item = null;\n }\n );\n });\n }\n return this._promises.new_item;\n }\n\n /**\n * Perform API task for the given item ID\n * @param id ID of the item\n * @param task_name Name of the task\n * @param form_data Map of data to pass to the API\n * @param method Verb to use for request\n */\n public \n task(\n id: string,\n task_name: string,\n form_data: HashMap = {},\n method: 'post' | 'get' = 'post'\n ): Promise {\n const query = toQueryString(this.injectConcierge(form_data));\n const key = `task|${id}|${task_name}|${query}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const post_data = { ...form_data, id, _task: task_name };\n const url = `${this.route(false)}/${id}/${task_name}`;\n let result: any;\n const request =\n method === 'post'\n ? this.http.post(url, post_data)\n : this.http.get(`${url}${query ? '?' + query : ''}`);\n request.subscribe(\n (d) => (result = d),\n (e) => {\n reject(e);\n this.analyticsEvent(\n `${this._name.toLowerCase()}-task-${task_name}-failed`,\n id\n );\n delete this._promises[key];\n },\n () => {\n resolve(result as U);\n this.analyticsEvent(\n `${this._name.toLowerCase()}-task-${task_name}-success`,\n id\n );\n this.timeout(key, () => delete this._promises[key], 1000);\n }\n );\n });\n }\n return this._promises[key];\n }\n\n\n /**\n * V-2\n * Perform API task for the given item ID\n * @param id ID of the item\n * @param task_name Name of the task\n * @param form_data Map of data to pass to the API\n * @param method Verb to use for request\n */\n public taskObsr( \n id: string, \n task_name: string, \n form_data: HashMap = {}, \n method: 'post' | 'get' = 'post' ):Observable{\n const query = toQueryString(this.injectConcierge(form_data));\n let engine = false;\n let cache = 1000;\n const post_data = { ...form_data, id, _task: task_name };\n const url = `${this.route(false)}/${id}/${task_name}`;\n let result: any;\n\n const request = method === 'post'\n ? this.http.post(url, post_data)\n : this.http.get(`${url}${query ? '?' + query : ''}`);\n \n return request;\n }\n\n\n /**\n * Make put request for changes to the item with the given id\n * @param id ID of the item being updated\n * @param form_data New values for the item\n * @param query_params Map of query paramaters to add to the request URL\n */\n public update(id: string, form_data: HashMap, query_params: HashMap = {}): Promise {\n const key = `update|${id}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const query = toQueryString(this.injectConcierge(query_params));\n const url = `${this.route(query_params.engine)}/${id}${query ? '?' + query : ''}`;\n let result: T = null;\n this.http.put(url, this.injectConcierge(form_data)).subscribe(\n (d) => (result = this.process(d)),\n (e) => {\n reject(e);\n this.analyticsEvent(`update-${this._name.toLowerCase()}-failed`, id);\n this._promises[key] = null;\n },\n () => {\n resolve(result);\n this.set(\n 'list',\n this.updateList(this.removeItem(this.get('list'), { id } as any), [\n result\n ])\n );\n this.analyticsEvent(`update-${this._name.toLowerCase()}-success`, id);\n this._promises[key] = null;\n }\n );\n });\n }\n return this._promises[key];\n }\n\n\n /**\n * update function version -2 - returns observable instead of promise...\n * @param id url id with respect to update api\n * @param form_data data to be update \n * @param should_inject_concierge common value to be set to add concierge: true to the query url and body\n * @param query_params Map of query paramaters to add to the request URL\n */\n public updateObsr(id: string, form_data: HashMap, should_inject_concierge: Boolean = false, query_params: HashMap = {}):Observable{\n const query = should_inject_concierge ? toQueryString(this.injectConcierge(query_params)) : false;\n const url = `${this.route(query_params.engine)}/${id}${query ? '?' + query : ''}`;\n const body = should_inject_concierge ? this.injectConcierge(form_data) : form_data;\n \n return this.http.put(url, body)\n .pipe(\n map((d: IEngineResponse | HashMap[]) => this.processApiResult(d) \n ),\n catchError((error: any, result?: T) => {\n console.log(error);\n this.analyticsEvent(`update-${this._name.toLowerCase()}-failed`, id);\n return of(error as T);\n })\n );\n\n }\n\n /**\n * update function version -2 - returns observable instead of promise...\n * @param form_data data to be update \n * @param should_inject_concierge common value to be set to add concierge: true to the query url and body\n * @param query_params Map of query paramaters to add to the request URL\n */\n public uploadSpacePhotos(apiSubRoute: string, form_data: HashMap, should_inject_concierge: Boolean = false, query_params: HashMap = {}):Observable{\n const query = should_inject_concierge ? toQueryString(this.injectConcierge(query_params)) : false;\n const url = `${this.route(query_params.engine)}/${apiSubRoute}${query ? '?' + query : ''}`;\n const body = should_inject_concierge ? this.injectConcierge(form_data) : form_data;\n\n const token = sessionStorage.length ? JSON.parse(sessionStorage.getItem('OAUTH.params')).access_token : '';\n\n const headers = new HttpHeaders({\n 'Authorization': `Bearer ${token}`,\n });\n \n const requestOptions = { headers: headers };\n\n // return this.httpClient.post(url, body, {\n // ...requestOptions \n // });\n\n return this.http.post(url, body);\n\n }\n\n /**\n * Make delete request for the given item\n * @param id ID of item\n */\n public delete(id: string, q: HashMap = {}): Promise {\n const key = `delete|${id}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const query = toQueryString(q);\n const url = `${this.route()}/${id}${query ? '?' + query : ''}`;\n this.http.delete(url).subscribe(\n (_) => null,\n (e) => {\n reject(e);\n this._promises[key] = null;\n },\n () => {\n this.set('list', this.removeItem(this.get('list'), { id } as any));\n this._promises[key] = null;\n resolve();\n }\n );\n });\n }\n return this._promises[key];\n }\n\n /**\n * Load initial data for the service\n */\n protected async load(): Promise {\n }\n\n /**\n * Post analytics event for this service\n * @param action Name of the action to post\n */\n protected analyticsEvent(action: string, label?: string) {\n // if (this.parent && this.parent.Analytics) {\n // this.parent.Analytics.track(this._name, { desc: `${this.parent.name.toLowerCase()}-${action}`, label });\n // }\n }\n\n /**\n * Convert raw API data into a valid API Object\n * @param raw_item Raw API data\n */\n protected process(raw_item: HashMap): T {\n return raw_item as T;\n }\n\n /**\n * Update recorded list of items\n * @param old_list Old list of items\n * @param list List of updated items\n * @param compareFn Function to compare items to remove duplicates\n */\n public updateList(\n old_list: T[],\n list: T[],\n compareFn: (a: T, b: T) => boolean = this._compare\n ): T[] {\n /* istanbul ignore else */\n if (!list || list.length === 0) {\n return old_list;\n }\n const new_list: T[] = [];\n const mixed_list = [...list, ...old_list];\n /* istanbul ignore else */\n if (!compareFn) {\n compareFn = this._compare;\n }\n for (const item of mixed_list) {\n const found = new_list.find((i) => compareFn(i, item));\n /* istanbul ignore else */\n if (!found) {\n new_list.push(item);\n }\n }\n return new_list;\n }\n\n /**\n * Remove the given item from the given list\n * @param list List of items\n * @param item Item to remove\n * @param compareFn Function to compare items\n */\n protected removeItem(list: T[], item: T, compareFn?: (a: T, b: T) => boolean) {\n const new_list = [];\n /* istanbul ignore else */\n if (!compareFn) {\n compareFn = this._compare;\n }\n list.forEach((i) => (compareFn(item, i) ? null : new_list.push(i)));\n return new_list;\n }\n}\n","import { SelectOption } from '../../../../ui/src/lib/options/select-option';\nimport { Building } from '../organisation/building.class';\nimport { Booking } from '../bookings/booking.class';\nimport { User } from '../users';\nimport { Space } from '../spaces';\nimport { SpaceBookingRuleOptions } from '../spaces/space.class';\nimport {\n BookingFormData,\n} from './booking.form.data';\nimport { statusFromBookings } from '../bookings/booking.utilities';\nimport { rulesForSpace } from '../bookings/space.utilities';\nimport { SpaceStatus } from '../bookings/space.types';\nimport { SpaceFeatures } from '../spaces/space.class';\nimport { HashMap } from 'libs/base/src/lib/types.utilities';\n\nexport const spaceExtraFeatureToDisplayName = (feature: SpaceFeatures) => {\n switch (feature) {\n case SpaceFeatures.VideoConference:\n return 'Video conference (VC)';\n case SpaceFeatures.ConferencePhone:\n return 'Conference phone';\n case SpaceFeatures.WirelessContentSharing:\n return 'Wireless content sharing';\n case SpaceFeatures.FlipChart:\n return 'Flip chart';\n case SpaceFeatures.Glassboard:\n return 'Glassboard';\n case SpaceFeatures.ElectronicWhiteboard:\n return 'Whiteboard';\n case SpaceFeatures.ConferenceRoom:\n return 'Conference';\n case SpaceFeatures.TeamRoom:\n return 'Team';\n case SpaceFeatures.PartnerOffice:\n return 'Partner';\n case SpaceFeatures.PhoneBooth:\n return 'Phone booth';\n case SpaceFeatures.NaturalLight:\n return 'Room with window only (natural light)';\n case SpaceFeatures.BoardRoom:\n return 'Boardroom room style';\n case SpaceFeatures.CocktailRoom:\n return 'Cocktail room style';\n case SpaceFeatures.TheatreRoom:\n return 'Theatre room style';\n case SpaceFeatures.WorkshopRoom:\n return 'Workshop room style';\n case SpaceFeatures.UShapeRoom:\n return 'U Shape room style';\n case SpaceFeatures.Miscellaneous:\n return 'Miscellaneous room style'\n case SpaceFeatures.Catering:\n return 'Rooms with catering';\n // TODO: add any special display handling here.\n default:\n return feature;\n }\n};\n\n\nexport const instantBookOption: SelectOption = {\n value: 'instant-book',\n display: 'Listing you can book without waiting for a host approval',\n shortDisplay: 'Instant book'\n};\nexport const instantBookOptions: SelectOption[] = [\n instantBookOption\n];\n\nexport const mapSpaceFeaturesToSelectOption = (f: SpaceFeatures): SelectOption => {\n const display = spaceExtraFeatureToDisplayName(f);\n return ({\n value: f,\n display,\n // Useful for long text, like that of the instant-book\n // option.\n //\n // We do not expect this option object to be modified\n // at any further point before it appears on screen -\n // although that may change in future releases.\n shortDisplay: display\n });\n};\n\nexport const roomEquipmentRequiredOptions: SelectOption[] = [\n SpaceFeatures.VideoConference,\n SpaceFeatures.ConferencePhone,\n SpaceFeatures.WirelessContentSharing,\n SpaceFeatures.FlipChart,\n SpaceFeatures.Glassboard,\n SpaceFeatures.ElectronicWhiteboard\n].map(mapSpaceFeaturesToSelectOption);\n\nexport const internalRoomTypeRequiredOptions: SelectOption[] = [\n SpaceFeatures.PartnerOffice,\n SpaceFeatures.ConferenceRoom,\n SpaceFeatures.TeamRoom,\n SpaceFeatures.PhoneBooth\n].map(mapSpaceFeaturesToSelectOption);\n\nexport const externalRoomTypeRequiredOptions: SelectOption[] = [\n SpaceFeatures.ConferenceRoom,\n SpaceFeatures.TeamRoom\n].map(mapSpaceFeaturesToSelectOption);\n\nexport const roomDetailsRequired: SelectOption[] = [\n SpaceFeatures.NaturalLight,\n SpaceFeatures.BoardRoom,\n SpaceFeatures.CocktailRoom,\n SpaceFeatures.TheatreRoom,\n SpaceFeatures.WorkshopRoom,\n SpaceFeatures.UShapeRoom,\n SpaceFeatures.Miscellaneous\n].map(mapSpaceFeaturesToSelectOption);\n\nexport const roomCateringAvailable: SelectOption[] = [\n SpaceFeatures.Catering,\n].map(mapSpaceFeaturesToSelectOption);\n\n/**\n * Defines the reason by which spaces are filtered out / missing.\n */\nexport enum SpaceFilterReason {\n /**\n * Spaces were shown and not all filtered out.\n */\n None = 'None',\n\n /**\n * If room filters are applied to the set of rooms,\n * and rooms are available if not applied by filtering.\n */\n Filters = 'Filters',\n\n /**\n * We check office rules first to determine if its been filtered.\n */\n OfficeRules = 'OfficeRules',\n\n /**\n * Fallback as the end case if no results are found.\n */\n DateTime = 'DateTime',\n\n /**\n * In case there are no results for a buiding but there are other office buidings in the same city.\n */\n AlternateBuildingsFound = 'AlternateBuildingsFound',\n\n /**\n * If room is non-bookable in the system\n */\n NonBookable = 'NonBookable'\n}\n\nexport interface FilteredSpaces {\n spaces: Space[] | undefined;\n reason: SpaceFilterReason;\n statusMap: HashMap;\n specificReason?: SpaceFilterReason;\n}\n\n/**\n * Filter spaces by filters locally. TBD in the future for real API pagination.\n *\n * @param formFilters - the set of filters to apply on the list of spaces.\n * @param spaces - the list of spaces to filter\n * @param activeForm - the landing page set of filters.\n * @param buildings - the list of buildings loaded, used to retrieve building-specific booking rules.\n * @param currentUser - the current user\n */\nexport const filterSpacesByAppliedFilters = (\n formFilters: SelectOption[],\n spaces: Space[] | undefined, // the resultshere are raw JSON Spaces, not an array of the Space class\n activeForm: BookingFormData,\n buildings: Building[] = [],\n currentUser: User | undefined,\n isStaffMap: boolean = false): FilteredSpaces => {\n const instantBook: boolean = formFilters.some(f => f.value === instantBookOption.value);\n const onlyCatering: boolean = formFilters.some(f => f.value === SpaceFeatures.Catering);\n // Drop incompatible spaces. If no filters were given, just return the array unchanged.\n const featureFilters = formFilters.filter(filter => ![instantBookOption.value, SpaceFeatures.Catering].includes(filter.value));\n const formFiltersEmpty = featureFilters.length === 0;\n\n // R--- refactor activeForm? Only after forms can handle dateTz\n // Blocked by date time input refactor\n const options: SpaceBookingRuleOptions = {\n duration: activeForm.duration,\n host: currentUser,\n dateTz: activeForm.dateTz,\n };\n let rulesCount = 0;\n let ruleReason = '';\n let excludedByFiltersCount = 0;\n const statusMap: HashMap = {};\n // console.group();\n const filteredSpaces = spaces?.map(space => space instanceof Space ? space : new Space(space)).filter(raw_space => {\n const space = new Space(raw_space); // Construct the full fledged space\n const building = buildings.find(b => space.zones.includes(b.id));\n const rules = rulesForSpace({\n time: options?.dateTz?.ms,\n duration: options.duration,\n user: options.host,\n rules: building?.booking_rules,\n space\n });\n ruleReason = rules.reason;\n let valid = !rules.hide;\n if (!valid) {\n rulesCount++;\n return false;\n }\n\n\n // Check for all the form filters ( except 'catering' )\n let hasAllFeatures: boolean;\n const internalRoomTypeFilters = [\n 'conference',\n 'meeting_room',\n 'partner',\n 'phone_booth',\n 'team_room',\n ];\n\n if (featureFilters.length === 0) {\n hasAllFeatures = true;\n } else if(featureFilters.every(f => internalRoomTypeFilters.includes(f.value))) { // If all featureFilters(selected filters) are present in internalRoomTypeFilters, make the filtering inclusive(return on first true) \n hasAllFeatures = featureFilters.some(f => space.featuresArray.includes(f.value));\n } else { // If any featureFilters(selected filters) are not present in internalRoomTypeFilters, make the filtering exclusive(return on first false)\n hasAllFeatures = featureFilters.every(f => space.featuresArray.includes(f.value));\n }\n\n const canBook = instantBook ? space.bookable : true;\n const matchesType = activeForm?.bookingType?.value === 'allRooms'\n ? true\n : space?.internal_or_external?.length\n ? space.internal_or_external === activeForm?.bookingType?.value\n : true;\n valid = valid && matchesType && (formFiltersEmpty || hasAllFeatures) && canBook;\n let hasCatering = building?.has_catering;\n if (space?.has_catering === false) {\n hasCatering = false;\n }\n // need the room catering to override.\n if (onlyCatering && !hasCatering) {\n valid = false;\n // console.log('Excluded by Catering');\n }\n\n // count this space if the only reason it can't be shown is because one of the filters excluded it\n if (!hasAllFeatures) {\n valid = false;\n // console.log('Excluded by Status');\n }\n\n const status = statusFromBookings(\n space.bookings.length ? space.bookings.map(b => new Booking(b)) : space.settings.bookings.map(b => new Booking(b)),\n space.bookable && !rules.hide,\n !rules.auto_approve,\n activeForm.dateTz,\n space\n );\n\n // only compute room availability here right now if instant book option is chosen and room still valid.\n if (instantBook && valid) {\n valid = status.status === SpaceStatus.Available;\n if (!valid) console.group('Excluded by Status');\n \n }\n\n\n /** \n * If there are rooms that are recurring but not available at all during the queried times, we filter them out from the results displayed on the page.\n * The \"Available\" status indicates whether a room can be booked during the queried times.\n * The \"isStaffMap\" flag- This helps to indicate that all occurrences of this room are booked during the queried times and are currently in use.\n * \"isStaffMap\" flag allows including such rooms in the list, which will be displayed in red on the map.\n */\n if(activeForm.is_recurrent && !space.availableOccurrences && !isStaffMap) {\n valid = false;\n }\n /** */\n\n // cache space status\n if (valid) {\n if(activeForm.is_recurrent && space.availableOccurrences && space.availableOccurrences<= space.totalOccurrences) {\n // space is available and requested for recurrence booking and few occurences are available to book then let the space select/bookable from map with limited availability\n statusMap[space.id] = !rules.auto_approve ? SpaceStatus.Requestable : SpaceStatus.Available;\n }else\n {\n statusMap[space.id] = status.status;\n }\n \n } else {\n excludedByFiltersCount++;\n }\n // console.log('Valid:', valid);\n return valid;\n });\n\n const buildingsInSameCity = buildings.filter(\n (_) =>activeForm?.location!==undefined && activeForm?.location?.length && _.city === activeForm?.location[0]?.meta?.building?.city\n ) || [];\n const alternateBuildings = buildingsInSameCity.filter(building =>\n !activeForm.location.some(locationItem =>\n locationItem.meta?.building?.id === building.id\n )\n );\n\n // console.groupEnd();\n let reason, specificReason = SpaceFilterReason.None;\n // console.log('Spaces:', filteredSpaces?.length, excludedByFiltersCount, rulesCount, ruleReason)\n if (filteredSpaces?.length === 0) {\n if (excludedByFiltersCount > 0 && (!formFiltersEmpty || onlyCatering)) {\n reason = SpaceFilterReason.Filters;\n } else if (rulesCount > 0) {\n reason = SpaceFilterReason.OfficeRules;\n } else if(alternateBuildings){\n reason = SpaceFilterReason.AlternateBuildingsFound;\n }\n else {\n reason = SpaceFilterReason.DateTime;\n }\n\n if (ruleReason === SpaceFilterReason.OfficeRules) {\n specificReason = SpaceFilterReason.OfficeRules;\n }\n }\n\n return { spaces: filteredSpaces, reason, statusMap, specificReason };\n};\n","import { BookingFormData } from './booking.form.data';\nimport {\n createAction,\n props\n} from '@ngrx/store';\nimport { Payload } from '../../../../loading/src/lib/loading.actions';;\nimport { SelectOption } from '../../../../ui/src/lib/options/select-option';\n\n\nexport const storeBookingFormData = createAction('[BookingForm] Store Form Data',\n props>>());\n\nexport const clearBookingFormData = createAction('[BookingForm] Clear Form Data');\n\nexport const storeRoomFilters = createAction('[BookingForm] Store Room Filters',\n props[]>>());\n\nexport const clearRoomFilters = createAction('[BookingForm] Clear Room Filters');\n\nexport const openBookingSurvey = createAction('[BookingSurvey] Open Survey Modal');\n","import { SelectOption } from '../../../../ui/src/lib/options/select-option';\nimport { RoomQueryOptions } from '../../../../rooms/src/lib/rooms.types';\nimport { User } from '../users/user.class';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\nimport { DaysOfWeek, RecurrencePeriod } from '../recurrence/recurrence.utils';\nimport { Building } from '../organisation';\n\nexport const DEFAULT_BOOKING_DURATION = 30;\n\nexport const internalBookingTypeOption = {\n value: 'internal',\n display: 'Internal',\n};\n\nexport const allBookingTypeOption = {\n value: 'allRooms',\n display: 'All Rooms',\n};\n\nexport const bookingTypeOptions: SelectOption[] = [\n internalBookingTypeOption,\n {\n value: 'external',\n display: 'External',\n }\n];\n\nexport const defaultRoomSizeOption = {\n value: '2',\n display: '3-9 People',\n};\n\nexport const roomSizeOptions: SelectOption[] = [\n {\n value: '1',\n display: '1-2 People',\n },\n defaultRoomSizeOption,\n {\n value: '3',\n display: '10+ People',\n }\n];\n\nexport const roomSizeOptionsKiosk: SelectOption[] = [\n ...roomSizeOptions,\n {\n value: '4',\n display: 'All Rooms',\n },\n];\n\nexport const roomCapacityToValue = (roomSize: string): number => {\n switch (roomSize) {\n case '1':\n return 1;\n case '2':\n return 3;\n case '3':\n return 10;\n case '4':\n return null;\n }\n};\n\nexport const roomMaxCapacityToValue = (roomSize: string): number => {\n switch (roomSize) {\n case '1':\n return 2;\n case '2':\n return 9;\n default:\n return null;\n }\n};\n\nexport interface BookingFormData {\n // R--- off the rails, define these \"any's\"\n id?: string;\n location: SelectOption[];\n dateTz: DateTZ;\n /**\n * Duration, in minutes.\n */\n duration: number;\n bookingType: SelectOption;\n roomSize: SelectOption;\n selectedRoom?: any;\n organiser?: SelectOption;\n title?: string;\n attendees?: any[];\n code?: string;\n notes?: string;\n head_count?: number;\n creator?: User;\n company?: any[];\n //Recurrence fields\n recurrence_period?: RecurrencePeriod;\n recurrence_interval?: number;\n recurrence_endTz?: DateTZ;\n recurrence_count?: number;\n recurrence_starts?: Array;\n recurrence_exceptions?: Array; //SHOULD BE DATETZ\n recurrence_days?: Array;\n timezone?: string;\n offset?: number;\n buildings?: Building[];\n is_recurrent?: boolean;\n is_multiroom?: boolean;\n merged?: boolean;\n action?: string; // helping to set staff app recurring action flag for edit/clone in the active form\n ignore?: string; // helping while editing - recurring series rooms search api call\n bookable?: boolean; // set while editing - recurring series rooms search api call\n occurrence_edits?: string[];\n opt_out?:boolean;\n nextBusinessDay?: boolean // set property if user room selection from next business day section on result page\n}\n\n/**\n * Converts form data into API query parameters.\n */\nexport const roomFormDataToQuery = (\n data: BookingFormData\n): RoomQueryOptions => {\n // remove all buildings chip from query\n const filteredLocationIds = data?.location\n .filter((l) => l.groupChild)\n .map((l) => l.value)\n .join(',');\n return {\n dateTz: data?.dateTz,\n duration: data?.duration,\n locations: filteredLocationIds,\n capacity: roomCapacityToValue(data?.roomSize?.value),\n capacity_max: roomMaxCapacityToValue(data?.roomSize?.value),\n\n is_recurrent: data?.is_recurrent,\n is_multiroom: data?.is_multiroom,\n merged: data?.merged,\n recurrence_period: data?.recurrence_period,\n recurrence_interval: data?.recurrence_interval,\n recurrence_endTz: data?.recurrence_endTz,\n recurrence_count: data?.recurrence_count,\n recurrence_starts: data?.recurrence_starts,\n recurrence_exceptions: data?.recurrence_exceptions, //SHOULD BE DATETZ\n recurrence_days: data?.recurrence_days,\n timezone: data?.timezone,\n offset: data?.offset,\n buildings: data?.buildings,\n bookable: data?.bookable,\n ignore: data?.ignore\n };\n};\n","import { BookingFormState } from './booking.form.types';\nimport {\n DEFAULT_BOOKING_DURATION,\n defaultRoomSizeOption,\n internalBookingTypeOption\n} from './booking.form.data';\nimport { DateNow } from '@mckinsey-converge/date-tz';\n\nconst now = DateNow(new Date())\n\nexport const defaultTestBookingForm = (): BookingFormState => ({\n activeForm: {\n dateTz: now,\n duration: 2 * DEFAULT_BOOKING_DURATION,\n location: [],\n bookingType: internalBookingTypeOption,\n roomSize: defaultRoomSizeOption\n },\n activeFormFilters: []\n});\n","import { createSelector } from '@ngrx/store';\nimport {\n RoomStoreState\n} from '../../../../rooms/src/lib/rooms.types';\nimport {\n loadLaterThatDayResults,\n loadNextDayResults,\n loadRoomsForResults,\n roomStateSelector,\n loadByIdResults,\n loadDiffSizeResults,\n loadRoomsForResultsMap\n} from '../../../../rooms/src/lib/rooms.actions';\nimport {\n loadHomepageBookingsResults,\n loadUpcomingBookingsResults,\n loadPastBookingsResults,\n loadCancelledBookingsResults,\n loadBookingByIdResults,\n bookingStateSelector\n} from '../../../../bookings/src/lib/bookings.actions';\nimport { Building } from '../organisation/building.class';\nimport { BuildingStoreState } from '../../../../buildings/src/lib/buildings.types';\nimport { selectLoadBuildingsSuccess } from '../../../../buildings/src/lib/buildings.actions';\nimport { Space } from '../spaces/space.class';\nimport { User } from '../users/user.class';\nimport { selectCurrentUser } from '../../../../user/src/lib/user.actions';\nimport { UserStoreState } from '../../../../user/src/lib/user.types';\nimport { LoadingModel } from '../../../../loading/src/lib/loading.model';\nimport { SelectOption } from '../../../../ui/src/lib/options/select-option';\n\nimport {\n SpaceFilterReason,\n filterSpacesByAppliedFilters,\n FilteredSpaces\n} from './booking-filter.utils';\nimport {\n BookingFormData,\n internalBookingTypeOption,\n} from './booking.form.data';\nimport {\n BookingFormState,\n BookingStoreState,\n} from './booking.form.types';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\nimport { BookingAction, RecurrencePeriod, SeriesAction } from '../recurrence/recurrence.utils';\n\n\nexport const selectBookingFormsData =\n (state: BookingStoreState | RoomStoreState | BuildingStoreState | UserStoreState) =>\n (state as any).bookingForm as BookingFormState;\n\nexport const selectActiveForm = createSelector(selectBookingFormsData, state => {\n // Recreate because serialized form dateTz doesn't have DateTZ class methods\n if (!state.activeForm?.dateTz) {\n return state.activeForm\n }\n const { date, is_local_tz, building_tz} = state.activeForm?.dateTz;\n const endTzDate = state.activeForm?.recurrence_endTz?.date;\n const recurrence_endTz = endTzDate ? {\n recurrence_endTz : new DateTZ({ date: endTzDate.valueOf(), is_local_tz, building_tz })\n } : {};\n\n const recurrence_starts = state.activeForm?.recurrence_starts\n\t\t\t? {\n\t\t\t\t\trecurrence_starts: state.activeForm?.recurrence_starts.map( el =>\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// at final step of booking creation process recurrence_start becomes Array which need to be Array\n\t\t\t\t\t\t\t// To Do: Refactor - apps/staff/src/app/booking/booking-create/booking-form-base.component.ts lno: 186\n\t\t\t\t\t\t\treturn new DateTZ({ date: typeof el === 'number' ? el * 1000 : el.date.valueOf(), is_local_tz, building_tz })\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t: {};\n\n\n const recEditingSearchPayload = (state.activeForm.action === SeriesAction.EDIT && state.activeForm.is_recurrent)\n\t\t\t?\n\t\t {\n\t\t\t\tid: state.activeForm.id,\n\t\t\t\tignore: state.activeForm.ignore,\n\t\t\t\tbookable: state.activeForm.bookable\n\t\t\t}\n\t\t\t: {};\n\n\n\n\n return {\n ...state.activeForm,\n dateTz: new DateTZ({ date: date.valueOf(), is_local_tz, building_tz }),\n ...recurrence_endTz,\n ...recurrence_starts,\n\t\t\t\t...recEditingSearchPayload\n }\n});\n\nexport const selectBookingType = createSelector(selectActiveForm,\n (form) => form?.bookingType);\n\nexport const selectBookingLocations = createSelector(selectActiveForm,\n (form) => (form?.location || []).filter(f => !f.groupHeader));\n\nexport const selectIsInternal = createSelector(selectBookingType,\n (type) => type?.value === internalBookingTypeOption.value);\n\nexport const selectFormFilters = createSelector(selectBookingFormsData,\n (state) => state.activeFormFilters || []);\n\nconst selectRoomResultsFromState = createSelector(roomStateSelector,\n loadRoomsForResults.selectors.model);\n\nconst selectRoomResultsFromState_map = createSelector(roomStateSelector,\n loadRoomsForResultsMap.selectors.model);\n\nconst selectLaterThatDayResultsFromState = createSelector(roomStateSelector,\n loadLaterThatDayResults.selectors.model);\nconst selectNextDayResultsFromState = createSelector(roomStateSelector,\n loadNextDayResults.selectors.model);\nconst selectByIdResultsFromState = createSelector(roomStateSelector,\n loadByIdResults.selectors.model);\nconst selectDiffSizeResultsFromState = createSelector(roomStateSelector,\n loadDiffSizeResults.selectors.model);\n\nexport const selectHomepageBookingsResultsFromState = createSelector(bookingStateSelector,\n loadHomepageBookingsResults.selectors.model);\nexport const selectUpcomingBookingsResultsFromState = createSelector(bookingStateSelector,\n loadUpcomingBookingsResults.selectors.model);\nexport const selectPastBookingsResultsFromState = createSelector(bookingStateSelector,\n loadPastBookingsResults.selectors.model);\nexport const selectCancelledBookingsResultsFromState = createSelector(bookingStateSelector,\n loadCancelledBookingsResults.selectors.model);\nexport const selectBookingByIdResultsFromState = createSelector(bookingStateSelector,\n loadBookingByIdResults.selectors.model);\n\n/**\n * Wraps {@link filterSpacesByAppliedFilters} with {@link LoadingModel} interop.\n * This will only filter data if there is data to filter, and returns a success {@link LoadingModel}.\n * The \"isStaffMap\" flag- This helps to indicate that all occurrences of this room are booked during the queried times and are currently in use.\n * \"isStaffMap\" flag allows including such rooms in the list, which will be displayed in red on the map.\n */\nconst filterSpacesByAppliedFiltersIfSuccess = (\n results: LoadingModel,\n formFilters: SelectOption[],\n activeForm: BookingFormData,\n buildings: Building[] | undefined,\n currentUser: User | undefined,\n isStaffMap: boolean = false): LoadingModel => {\n const data = results.optionalSuccess;\n\n // don't filter model if no success found\n return !activeForm ? results.mutate({\n spaces: data, // the result here is a raw JSON Space, not the Space class\n reason: SpaceFilterReason.None,\n statusMap: {}\n }) : results.mutate(\n filterSpacesByAppliedFilters(formFilters, data, activeForm, buildings || activeForm.buildings, currentUser, isStaffMap));\n};\n\nexport const selectFilteredResults = createSelector(selectRoomResultsFromState,\n selectFormFilters,\n selectActiveForm,\n selectLoadBuildingsSuccess,\n selectCurrentUser,\n filterSpacesByAppliedFiltersIfSuccess);\n\nexport const selectMapFilteredResults = createSelector(selectRoomResultsFromState_map,\n selectActiveForm,\n selectLoadBuildingsSuccess,\n selectCurrentUser,\n (results, activeForm, buildings, currentUser, isStaffMap) => filterSpacesByAppliedFiltersIfSuccess(results, [], activeForm, buildings, currentUser, true));\n\nexport const selectFilteredLaterDayResults = createSelector(selectLaterThatDayResultsFromState,\n selectFormFilters,\n selectActiveForm,\n selectLoadBuildingsSuccess,\n selectCurrentUser,\n filterSpacesByAppliedFiltersIfSuccess);\n\nexport const selectFilteredNextDayResults = createSelector(selectNextDayResultsFromState,\n selectFormFilters,\n selectActiveForm,\n selectLoadBuildingsSuccess,\n selectCurrentUser,\n filterSpacesByAppliedFiltersIfSuccess);\n\n\nexport const selectFilteredByIdResults = createSelector(selectByIdResultsFromState,\n selectActiveForm,\n selectLoadBuildingsSuccess,\n selectCurrentUser,\n (results, activeForm, buildings, currentUser) => filterSpacesByAppliedFiltersIfSuccess(results, [], activeForm, buildings, currentUser));\n\nexport const selectFilteredDiffSizeResults = createSelector(selectDiffSizeResultsFromState,\n selectFormFilters,\n selectActiveForm,\n selectLoadBuildingsSuccess,\n selectCurrentUser,\n filterSpacesByAppliedFiltersIfSuccess);\n\n/**\n * Maps selected options by loaded buildings.\n */\nexport const selectSelectedBuildingOptions = createSelector(\n selectBookingLocations,\n selectLoadBuildingsSuccess,\n (locations, buildings) => (locations\n .map(l => buildings?.find(b => b.id === l.value))\n .filter(f => !!f) as Building[])\n);\n\n","import { Building, BuildingCity } from '../organisation/building.class';\nimport { Booking } from '../bookings/booking.class';\nimport { BuildingLevel } from '../organisation/level.class';\nimport { Space } from '../spaces/space.class';\nimport { SpacesService } from '../spaces/spaces.service';\nimport {\n timezoneDisplay,\n timezoneNameToDate,\n unique,\n ImageDirective,\n} from '@mckinsey-converge/base';\nimport { SelectOption } from '../../../../ui/src/lib/options/select-option';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n/**\n * If more than 3 are selected, we truncate location display.\n */\nconst MAX_ABBREV_LOCATIONS = 3;\n\nexport const mapBuildingToSelectOption = (\n city: string,\n building: Building\n): SelectOption => ({\n display: `${building.name} ${timezoneDisplay(\n timezoneNameToDate(building.timezone)\n )}`,\n dropdownOverride: `${building.code}-${building.name}, ${building.address}`,\n value: building.id,\n groupId: city,\n groupChild: true,\n shortDisplay: `${building.name} ${timezoneDisplay(\n timezoneNameToDate(building.timezone)\n )}`,\n meta: { building, city },\n});\n\nexport const mapCityToAllSelectOption = (\n city: BuildingCity\n): SelectOption => ({\n display: `${city.name} (All Offices) ${timezoneDisplay(\n timezoneNameToDate(city.timezone)\n )}`,\n value: city.name,\n groupHeader: true,\n groupId: city.name,\n shortDisplay: `${city.name} (All Offices) ${timezoneDisplay(\n timezoneNameToDate(city.timezone)\n )}`,\n meta: { city },\n});\n\n/**\n * Flattens a map of {@link BuildingCity} to {@link Building} array into a list of {@link SelectOption}.\n * @param grouped The grouping\n */\nexport const flattenDisplayOffices = (\n grouped: Map\n) => {\n const options: SelectOption[] = [];\n grouped.forEach((value, key) => {\n options.push(mapCityToAllSelectOption(key));\n value.forEach((b) =>\n options.push(mapBuildingToSelectOption(key.name, b))\n );\n });\n return options;\n};\n\n/**\n * This method will either add or remove a selected option from the selectedOptions list based on\n * these conditions:\n * 1. If the option EXISTS in the list AND is a groupHeader, de-select all of its children.\n * 2. If the option EXISTS in the list AND is a groupChild, remove it and its associated header from the list.\n * 3. If the option does NOT EXIST in the list AND is a groupHeader, select all other children.\n * 4. If the option does NOT EXIST in the list AND is a groupChild, add it to the list.\n *\n * Special note regarding item 4:\n * 4a. If that selection completes the children selection, select its associated header as well.\n */\nexport const toggleSelectedByGroup = (\n options: SelectOption[],\n selectedOptions: SelectOption[],\n option: SelectOption\n) => {\n if (selectedOptions.find((s) => s.value === option.value)) {\n return selectedOptions.filter((s) => {\n let filter = s.value !== option.value;\n // if group header, also remove any option that is the child of it.\n if (option.groupHeader) {\n filter =\n filter &&\n (!s.groupChild ||\n (s.groupChild && s.groupId !== option.groupId));\n } else if (option.groupChild) {\n // if child removing, remove the associated header.\n filter =\n filter &&\n (!s.groupHeader ||\n (s.groupHeader && s.groupId !== option.groupId));\n }\n return filter;\n });\n }\n // option does NOT EXIST\n // if adding header, add the other children to the selected list, ensuring no dupes.\n if (option.groupHeader) {\n const toSelect = options.filter(\n (v) =>\n v.groupChild &&\n v.groupId === option.value &&\n !selectedOptions.find((selected) => selected.value === v.value)\n );\n return [...selectedOptions, option, ...toSelect];\n }\n // add group child, add the group header if all satisfied\n const newGroup = [...selectedOptions, option];\n\n // check if we have selected all children from options by filtering down by city and checking if\n // they're in the selected options list.\n const remainingChildrenInGroup = options.filter(\n (o) =>\n o.groupChild &&\n o.groupId === option.groupId &&\n !newGroup.find((ng) => ng.value === o.value)\n );\n // if we dont have remaining children, add the group\n if (remainingChildrenInGroup.length === 0) {\n return [\n ...newGroup,\n options.find((o) => o.groupHeader && o.groupId === option.groupId),\n ];\n }\n return newGroup;\n};\n\n/**\n * If the list of locations are larger than {@link MAX_ABBREV_LOCATIONS}, then truncate\n * and display the remaining count.\n */\nexport const truncateLocationList = (\n locations: readonly SelectOption[]\n): string => {\n // comma separate the locations\n let truncatedLocations = [...locations];\n const shouldTruncate = locations.length > MAX_ABBREV_LOCATIONS;\n if (shouldTruncate) {\n truncatedLocations = truncatedLocations.splice(0, MAX_ABBREV_LOCATIONS);\n }\n let display = truncatedLocations\n .map((l) => l.shortDisplay || l.display)\n .join(', ');\n if (shouldTruncate) {\n display += `...(${locations.length})`;\n }\n return display;\n};\n\nexport const mapBuildingLevelToOption = (\n level?: BuildingLevel\n): SelectOption =>\n level\n ? {\n value: level.id,\n display: level.name,\n }\n : undefined;\n\n/**\n * Returns all levels included with the building, deduped.\n * @param buildings\n */\nexport const flattenBuildingsWithLevels = (buildings: Building[]) => {\n const flattenedLevels = unique(\n buildings.reduce((next: BuildingLevel[], building: Building) => {\n next.push(...building.levels);\n return next;\n }, []),\n 'id'\n );\n return {\n flattenedLevels,\n buildings,\n };\n};\n\n/** Gets route to image placeholder if room image isn't found */\n\nexport const placeholderRoute = (num: number): string => {\n let index: number;\n if (num <= 3) {\n index = num;\n } else if (num % 3 === 0) {\n index = 3;\n } else {\n index = 1;\n }\n return `assets/img/rooms/placeholder-${index}.png`;\n};\n\n/**\n * Method takes the rootFolderURL and fileSlug to create an array of three images\n * that should exist. If a room image exists, it replaces the placehoder image.\n */\nexport const setupRoomImages = (\n componentReference: ImageDirective,\n image_positions: number[],\n rootFolderURL: string,\n fileSlug: string,\n imagesLoaded: boolean = false\n): void => {\n let foundImages: any[] = image_positions.map((i) =>\n i ? { path: placeholderRoute(i) } : false\n );\n image_positions.forEach((n) => {\n const desiredImageName = `${rootFolderURL}${fileSlug}-part-${n}.png`;\n const desiredImage = location.pathname.includes('concierge') ? `${location.origin}/staff/${desiredImageName}` : desiredImageName;\n if (!imagesLoaded) {\n const tester = new Image();\n tester.onload = () => {\n // Will never run on unit test\n foundImages[n - 1] = { path: desiredImage };\n componentReference.foundImages = [...foundImages.slice()];\n componentReference?.loadImages && componentReference?.loadImages.next([...foundImages.slice()]);\n };\n tester.src = desiredImage;\n }\n\n // Force valid image output on unit test\n if (imagesLoaded) {\n foundImages[n - 1] = { path: desiredImage };\n componentReference.foundImages = foundImages.slice();\n }\n });\n};\n\nexport const bookingStatusDetails = (booking: Booking) => {\n const now = DateNow(new Date());\n let image = '';\n let text = '';\n let title = '';\n\n if (booking?.status) {\n const status = now > booking.endDateTz ? 'expired' : booking.status;\n switch (status) {\n case 'unavailable':\n image = 'assets/icon/booking_cancelled.svg';\n title = 'Unavailable';\n text = 'Unavailable';\n break;\n case 'declined':\n image = 'assets/icon/booking_cancelled.svg';\n title = 'Cancelled';\n text = 'Cancelled';\n break;\n case 'cancelled':\n image = 'assets/icon/booking_cancelled.svg';\n title = 'Cancelled';\n text = 'Cancelled';\n break;\n case 'expired':\n image = 'assets/icon/booking_expired.svg';\n title = 'Expired';\n text = 'Expired';\n break;\n case 'tentative':\n image = 'assets/icon/booking_pending.svg';\n title = 'Requested';\n text = 'Pending';\n break;\n case 'accepted':\n image = 'assets/icon/booking_confirmed.svg';\n title = 'Confirmed';\n text = 'Confirmed';\n break;\n case 'approved':\n image = 'assets/icon/booking_confirmed.svg';\n title = 'Confirmed';\n text = 'Confirmed';\n break;\n default:\n // TODO\n image = 'assets/icon/booking_expired.svg';\n title = 'Expired';\n text = 'Expired';\n break;\n }\n }\n return { text, title, image };\n};\n\nexport const roomHasCateringHours = (building: Building, space: Space) => {\n let hasCatering = building\n ? building.has_catering && building.catering_hours\n : false;\n // Room catering status as false overrides building status\n if (space?.has_catering === false) {\n hasCatering = false;\n }\n return hasCatering;\n};\n\nexport const cateringAllowed = (booking: Booking, building: Building) => {\n const status = bookingStatusDetails(booking);\n const disallowedStatus = ['declined', 'cancelled', 'expired'].includes(\n status.text\n );\n const opens = building?.catering_hours?.start;\n const closed = building?.catering_hours?.end;\n\n if (disallowedStatus) {\n return false;\n }\n\n if (typeof opens === 'undefined' || typeof closed === 'undefined') {\n return false;\n }\n\n // Catering time could be a decimal so convert to a date\n const openMinutes = opens * 60;\n const closeMinutes = closed * 60;\n\n const startOfDay = booking.startDateTz.startOfValue('day');\n const cateringOpenTime = startOfDay.addValue({ minutes: openMinutes });\n const cateringCloseTime = startOfDay.addValue({ minutes: closeMinutes });\n\n if (\n cateringOpenTime.ms <= booking.startDateTz.ms ||\n cateringCloseTime.ms > booking.startDateTz.ms\n ) {\n // Booking ends before catering opens\n if (booking.endDateTz.ms <= cateringOpenTime.ms) {\n return false;\n }\n // Booking starts after catering closes\n if (booking.startDateTz.ms > cateringCloseTime.ms) {\n return false;\n }\n\n // Start time is OK\n if (booking.startDateTz.ms > DateNow(new Date()).ms) {\n // Due to COVID, no orders are available once a meeting begins.\n return true;\n }\n }\n\n return false;\n};\n\nexport const checkCollisions = (\n service: SpacesService,\n booking: Booking\n): Promise => {\n return new Promise((resolve, reject) => {\n\n let availabilityParams: {\n room_ids: string;\n dateTz: DateTZ;\n duration: number;\n setup: number;\n breakdown: number;\n hide_bookings: boolean;\n [key: string]: any;\n } = {\n room_ids: booking.space.id,\n dateTz: booking.startDateTz,\n duration: booking.duration,\n setup: booking.setup[booking.space.email],\n breakdown: booking.breakdown[booking.space.email],\n hide_bookings: false,\n };\n\n if (booking.recurrence_type === \"master\" || booking.recurrence_type === null) {\n availabilityParams = {\n ...availabilityParams,\n ignore: booking?.icaluid,\n recurrence_count: booking?.recurrence_count,\n recurrence_period: booking?.recurrence_period,\n recurrence_endTz: booking?.recurrence_endTz,\n recurrence_interval: booking?.recurrence_interval,\n recurrence_starts: booking?.recurrence_starts,\n is_recurrent: booking?.is_recurrent,\n recurrence_days: booking?.recurrence_days\n } as typeof availabilityParams;\n }\n\n service\n .available(\n availabilityParams,\n null,\n false\n )\n .then(\n (list) => {\n const space = list.length ? list[0] : null;\n if (space) {\n if (!space.bookable) return reject('Has conflict');\n const setup = booking?.setup[space?.email] || 0;\n const breakdown = booking?.breakdown[space?.email] || 0;\n const start_time = booking?.startDateTz.seconds - setup;\n const end_time = booking.endDateTz.seconds + breakdown;\n\n const bookings = space.settings.bookings;\n // console.log('Bookings:', bookings);\n // Compare the existing bookings to see if any truely conflict.\n if (bookings.length) {\n const has_conflict = bookings.find(bkn => {\n const b_setup = bkn.setup[space.email] || 0;\n const b_breakdown = bkn.setup[space.email] || 0;\n const start = (bkn.start_epoch || bkn.start) - b_setup;\n const end = (bkn.end_epoch || bkn.end) + b_breakdown;\n return (\n (end_time > start && end_time <= end) || // Booking ends during the meeting\n (start_time >= start && start_time < end) || // Booking starts during a meeting\n (start_time <= start && end_time >= end) // Booking overlaps entire meeting\n ) && \n ( \n bkn.id !== booking.id \n || \n ( !!booking.is_recurrent && (booking.recurrence_type === \"master\" || booking.recurrence_type === null ) ) \n ?\n bkn.recurrence_master_id !== booking.id\n :\n false\n \n )\n\n\n\n });\n // Conflicts found, reject\n if (has_conflict) return reject('has booking conflict');\n }\n return resolve(space.bookable);\n }\n reject('space not found');\n },\n () => reject('available error')\n );\n });\n};\n\nexport const getStatusErrorMessage = (status?: number) => {\n let msg = '';\n switch (status) {\n\t\t\tcase 400:\n\t\t\t\tmsg = 'Apologies, the booking cannot be finalized because the current time has exceeded the scheduled start time for this booking. Please try again.';\n\t\t\t\tbreak;\n\t\t\tcase 403:\n\t\t\t\tmsg = 'Your do not have permission to update this booking.';\n\t\t\t\tbreak;\n\t\t\tcase 409:\n\t\t\t\tmsg = 'Sorry, your booking time conflicts with another booking.';\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tmsg = 'Your booking failed to update, please try again';\n }\n return msg;\n};\n","export * from './room-results/room-results.viewmodel'\nexport * from './booking-filter.utils'\nexport * from './booking.form.actions'\nexport * from './booking.form.data'\nexport * from './booking.form.spec-helpers'\nexport * from './booking.form.types'\nexport * from './booking.selectors'\nexport * from './booking.utils'","import { Space } from '../../spaces/space.class';\nimport { BuildingLevel } from '../../organisation/level.class';\nimport { Building } from '../../organisation/building.class';\n\nexport class RoomResultsViewModel {\n\n public levelDisplay: string;\n public title: string;\n public office: string;\n public capacity: string;\n\n constructor(public space: Space,\n public level?: BuildingLevel,\n public building?: Building) {\n\n this.levelDisplay = `Level ${this.space?.level?.short_name}`;\n this.title = this.space.local_name;\n this.office = this.building ? `(${this.building?.code}) ${this.building?.name}` : '';\n this.capacity = `Capacity: ${this.space.capacity} people`;\n }\n}\n\n/**\n * For each result from results, we find its level and building from the lists.\n */\nexport const mapResultsToViewModels = (results: Space[],\n flattenedLevels: BuildingLevel[],\n buildings: Building[]): RoomResultsViewModel[] =>\n results.map((r: Space) => {\n const level = flattenedLevels.find(l => r.zones.includes(l.id));\n const building = buildings.find(b => r.zones.includes(b.id));\n return new RoomResultsViewModel(\n r,\n level,\n building\n );\n });\n","import { Injectable, NgZone } from '@angular/core';\nimport { BehaviorSubject, combineLatest, of, Observable } from 'rxjs';\nimport {\n catchError,\n debounceTime,\n filter,\n first,\n map,\n shareReplay,\n switchMap,\n} from 'rxjs/operators';\nimport { BaseClass } from '@mckinsey-converge/base';\nimport { replaceBookings, timePeriodsIntersect } from './booking.utilities';\nimport { SpacesService } from '../spaces/spaces.service';\nimport { Booking } from '../bookings/booking.class';\nimport { Space } from '../spaces/space.class';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { OrganisationService } from '../organisation/organisation.service';\n\nexport type BookingType =\n | 'internal'\n | 'client'\n | 'external'\n | 'setup'\n | 'training'\n | 'interview'\n | 'declined';\n\nexport interface BookingFilters {\n /** List of zone ids to get bookings for */\n zone_ids?: string[];\n space_emails?: string[];\n hide_type?: BookingType[];\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BookingStateService extends BaseClass {\n /** List of bookings */\n private _poll = new BehaviorSubject(false);\n /** List of bookings */\n private _long_poll = new BehaviorSubject<'month' | ''>('');\n private _long_poll_week = new BehaviorSubject<'week' | ''>('');\n /** List of bookings */\n private _bookings = new BehaviorSubject([]);\n /** List of meeting count per date */\n public _noOfMeetings = new BehaviorSubject<{}>({});\n /** Filter details for bookings */\n private _filters = new BehaviorSubject({});\n /** Currently active date */\n private _dateTz = new BehaviorSubject(DateNow(new Date()));\n /** Currently displayed zone */\n private _zone = new BehaviorSubject(' ');\n /** Whether booking data is being loaded */\n private _loading = new BehaviorSubject(false);\n /** Observable for filter and booking list changes */\n private _state = combineLatest(\n this._bookings,\n this._filters,\n this._dateTz,\n this._zone\n );\n\n /** Observable for list of bookings */\n public readonly bookings = this._bookings.asObservable();\n /** Observable for active date */\n public readonly dateTz = this._dateTz.asObservable();\n /** Observable for active zone */ // R-- zone was this._date.asObservable(); this looks like a mistake but it exists from the beginning of time\n public readonly zone = this._dateTz.asObservable();\n /** Observable for loading state of bookings */\n public readonly loading = this._loading.asObservable();\n\n public get booking_date() {\n // When this class is initialized this._dateTz is local timezone\n return this._dateTz.value;\n }\n\n public get timezone() {\n return localStorage.getItem('CONCIERGE.timezone');\n }\n\n /** Obsevable for filtered list of bookings */\n public readonly filtered = this._state.pipe(\n map((state) => {\n const bdTz = this.timezone\n ? new DateTZ({\n date: this.booking_date.ms,\n is_local_tz: false,\n building_tz: this.timezone,\n })\n : this.booking_date;\n const startTz = bdTz.startOfValue('day');\n const endTz = startTz.addValue({}).endOfValue('day');\n return this.filterBookings(startTz, endTz);\n }),\n shareReplay(1)\n );\n\n /** Obsevable for filtered list of bookings of the active week */\n public readonly filtered_week = this._state.pipe(\n map(() => {\n // Tested to be valid in building time now.\n const bd = this.timezone\n ? new DateTZ({\n date: this.booking_date.ms,\n is_local_tz: false,\n building_tz: this.timezone,\n })\n : this.booking_date;\n const start = bd.startOfValue('week').startOfValue('day');\n const end = this.getEndOfWeek(bd);\n return this.filterBookings(start, end);\n })\n );\n\n /** Obsevable for filtered list of bookings for active month */\n public readonly filtered_month = this._state.pipe(\n map(() => {\n const start = this.booking_date.startOfValue('month');\n const end = this.booking_date.endOfValue('month');\n return this.filterBookings(start, end);\n })\n );\n\n /** Active filters */\n public get filters() {\n return this._filters.getValue();\n }\n\n constructor(\n private _org: OrganisationService,\n private _spaces: SpacesService,\n private ngZone: NgZone,\n ) {\n super();\n\n this._org.initialised.pipe(first((_) => _)).subscribe(() => {\n // Just to get the timezone correct\n this._dateTz.next(\n new DateTZ({\n date: this._dateTz.value.ms,\n is_local_tz: false,\n building_tz: this._org.building?.timezone,\n })\n );\n });\n\n /** Generate observable for updating bookings */\n const search = combineLatest(this._poll, this._zone, this._dateTz).pipe(\n filter((i) => !!i[0]),\n debounceTime(500),\n switchMap(() => {\n const fzone = this._zone.getValue();\n if (!fzone) {\n return of([]);\n }\n this._loading.next(true);\n const start = this.booking_date.startOfValue('day');\n const end = start.endOfValue('day');\n return this._spaces.queryBooking({\n zone_ids: fzone,\n available_from: start.seconds,\n available_to: end.seconds,\n });\n }),\n catchError(() => of([]))\n );\n\n const search_long_week = combineLatest(\n this._long_poll_week,\n this._zone,\n this._dateTz\n ).pipe(\n filter((i) => !!i[0]),\n debounceTime(500),\n switchMap((props) => {\n const type = props[0];\n const fzone = props[1];\n const dateTz = props[2];\n if (!fzone) {\n return of([]);\n }\n this._loading.next(true);\n return this.querySpace(type, fzone, dateTz, false);\n }),\n catchError((e) => { \n return of([]);\n })\n );\n\n //TO DO: make sure both spaces have same booking\n /** Subscribe to update observable */\n search.subscribe((space_list) => {\n this.processBookings(space_list);\n this._loading.next(false);\n });\n search_long_week.subscribe((space_list) => {\n this.processBookings(space_list, this._long_poll_week.getValue() as any);\n this._loading.next(false);\n });\n }\n\n /**\n * Function to build\n */\n private buildSpaceLongQuery(dailyCount: boolean = false): Observable {\n return combineLatest(\n this._long_poll,\n this._zone,\n this._dateTz\n ).pipe(\n filter((i) => !!i[0]),\n debounceTime(500),\n switchMap((props) => {\n const type = props[0];\n const fzone = dailyCount ? this._org.building.id : props[1];\n const dateTz = props[2];\n if (!fzone) {\n return of([]);\n }\n this._loading.next(true);\n return this.querySpace(type, fzone, dateTz, dailyCount);\n }),\n catchError((e) => { \n return of([]);\n })\n );\n }\n\n private querySpace(type: string, fzone: string, dateTz: DateTZ, dailyCount: boolean = false) : Observable | Observable{\n const start = () => {\n const s = dateTz;\n if (type === 'week') {\n return s.startOfValue('week');\n } else {\n return s.startOfValue('month');\n }\n };\n\n const end = () => {\n const e = start();\n if (type === 'week') {\n /**\n * To Do: date-tz.class.ts endOfValue subtracts 1 day from end of week for 7 days a week type which returns Friday instead of Saturday\n * below is the adjustment -\n */\n return e.addValue({ days: 1 }).endOfValue('week');\n } else {\n return e.endOfValue('month');\n }\n /**\n * R--- when testing March 2022 London offices, the month is an hour short.\n * Is this a Luxon bug or London DST?\n */\n };\n\n // dates here are ok\n return this._spaces.queryBooking({\n zone_ids: fzone,\n available_from: start().seconds,\n available_to: end().seconds,\n ...(dailyCount) ? { daily_count: true } : ''\n });\n }\n\n\n public getDailyMeetingCount() : void {\n this._long_poll.next('month');\n this.buildSpaceLongQuery(true).subscribe((counts) => {\n this._noOfMeetings.next(counts);\n this._loading.next(false);\n });\n }\n\n /**\n * Update the booking filters\n * @param details\n */\n public setFilters(details: BookingFilters) {\n this._filters.next(details);\n }\n\n /**\n * Update the booking date\n * @param details\n */\n public setDate(dateTz: DateTZ) {\n this._dateTz.next(dateTz);\n }\n\n /**\n * Update the booking's zone\n * @param details\n */\n public setZone(zone: string) {\n this._zone.next(zone);\n }\n\n /**\n * update day view once\n */\n public pollOnce(){\n this._poll.next(true);\n }\n \n /**\n * Start polling to update bookings\n * @param delay Duration between polling events in milliseconds\n */\n public startPolling(delay: number = 30 * 1000) {\n this._poll.next(true);\n this.ngZone.runOutsideAngular(() => {\n this.interval('polling', () => this._poll.next(true), delay);\n });\n }\n\n /**\n * Start polling to update bookings\n * @param delay Duration between polling events in milliseconds\n */\n public startPollingWeek(delay: number = 4 * 30 * 1000 ) {\n this._long_poll_week.next('week');\n this.ngZone.runOutsideAngular(() => {\n this.interval(\n 'polling_long',\n () => this._long_poll_week.next('week'),\n delay\n );\n });\n }\n /**\n * Start polling to update bookings\n * @param delay Duration between polling events in milliseconds\n */\n public startPollingEveryFiveMin(delay: number = 60 * 1000) {\n this._poll.next(true);\n this.ngZone.runOutsideAngular(() => {\n this.interval('polling', () => this._poll.next(true), delay);\n });\n }\n \n /**\n * Start polling to update bookings\n * @param delay Duration between polling events in milliseconds\n */\n public startPollingMonth(delay: number = 5 * 60 * 1000) {\n this._long_poll.next('month');\n this.ngZone.runOutsideAngular(() => {\n this.interval(\n 'polling_long',\n () => this._long_poll.next('month'),\n delay\n );\n });\n }\n\n\n /**\n * Stop polling to update bookings;\n */\n public stopPolling() {\n this._poll.next(false);\n this.clearInterval('polling');\n this._long_poll.next('');\n this.clearInterval('polling_long');\n }\n\n public updateRoomList() {\n this._spaces.updateRoomList();\n }\n\n /**\n * Add booking to bookings listing\n * @param booking\n */\n public add(booking: Booking) {\n const bookings = this._bookings.getValue();\n const new_bookings = bookings.concat([booking]);\n this._bookings.next(new_bookings);\n }\n\n /**\n * Update booking in the bookings list\n * @param booking\n */\n public replace(booking: Booking) {\n const bookings = this._bookings.getValue();\n const new_bookings = bookings\n .filter(\n (bkn) =>\n bkn.icaluid !== booking.icaluid && bkn.id !== booking.id\n )\n .concat([booking]);\n this._bookings.next(new_bookings);\n }\n\n /**\n * Remove booking in the bookings list\n * @param booking\n */\n public remove(booking: Booking) {\n const bookings = this._bookings.getValue();\n const new_bookings = bookings.filter(\n (bkn) => bkn.icaluid !== booking.icaluid\n );\n this._bookings.next(new_bookings);\n }\n\n public attentToDelete(\n booking: Booking,\n action: 'series' | 'booking' = 'booking',\n undo: boolean = false\n ) {\n const bookings = this._bookings.getValue();\n const attempted_to_delete = ((action) => {\n return (bkg: Booking) => {\n switch (action) {\n case 'booking': {\n const booking_master = bookings.find(\n (bkn) => bkn.icaluid === booking.icaluid\n );\n if (!booking_master) return false;\n return bkg.id === booking.id;\n }\n case 'series': {\n const booking_master = bookings.find(\n (bkg) =>\n bkg.id ===\n (booking.recurrence_type === 'occurrence'\n ? booking.recurrence_master_id\n : booking.id)\n );\n if (!booking_master) return false;\n return (\n booking_master.id === bkg.id ||\n bkg.recurrence_master_id === booking_master.id\n );\n }\n default:\n false;\n }\n };\n })(action);\n\n const new_bookings = [...bookings].map((bkg) => {\n if (!undo && attempted_to_delete(bkg)) {\n bkg.attempted_to_delete = action;\n }\n\n if (undo && attempted_to_delete(bkg)) {\n bkg.attempted_to_delete = null;\n }\n\n return bkg;\n });\n\n this._bookings.next(new_bookings);\n }\n\n private processBookings(\n space_list: Space[],\n period: 'day' | 'week' | 'month' = 'day'\n ) {\n const start = () => {\n switch (period) {\n case 'month':\n return this.booking_date.startOfValue('month');\n case 'week':\n return this.booking_date.startOfValue('week');\n default:\n return this.booking_date.startOfValue('day');\n }\n };\n const end = () => {\n const s = start();\n switch (period) {\n case 'month':\n return s.endOfValue('month');\n case 'week':\n return s.endOfValue('week');\n default:\n return s.endOfValue('day');\n }\n };\n\n let bookings = this._bookings.getValue();\n space_list.forEach((space) => {\n return (bookings = replaceBookings(\n bookings,\n space.bookings.map((bkn) => new Booking(bkn)),\n {\n room_email: space.email,\n fromTz: start(),\n toTz: end(),\n }\n ));\n });\n this._bookings.next(bookings);\n }\n\n // private filterBookings(startTz: DateTZ, endTz: DateTZ) {\n // const filters = this._filters.getValue();\n // const bookings = this._bookings.getValue();\n // const fzone = this._zone.getValue();\n // return bookings.filter((bkn) => {\n // const intersects = timePeriodsIntersect(\n // startTz.ms,\n // endTz.ms,\n // bkn.startDateTz.ms,\n // bkn.endDateTz.ms\n // );\n // const in_zone = bkn.room.zones.includes(fzone);\n // const has_space =\n // !filters.space_emails?.length ||\n // filters.space_emails.includes(bkn.room.email);\n // const in_zones =\n // !filters.zone_ids?.length ||\n // !!bkn.room.zones.find((zone) =>\n // filters.zone_ids.includes(zone)\n // );\n // const type = bkn.declined ? 'declined' : bkn.getType();\n\n // const show =\n // !filters.hide_type?.length ||\n // !filters.hide_type.includes(type as any);\n // return intersects && has_space && in_zone && in_zones && show;\n // });\n // }\n\n private filterBookings(startTz: DateTZ, endTz: DateTZ) {\n const filters = this._filters.getValue();\n const bookings = this._bookings.getValue();\n const fzone = this._zone.getValue();\n return bookings.filter((bkn) => {\n const intersects = timePeriodsIntersect(\n startTz.ms,\n endTz.ms,\n bkn.startDateTz.ms,\n bkn.endDateTz.ms\n );\n // Check if any room in the booking satisfies the conditions\n const roomSatisfiesConditions = bkn.multi_rooms.some((room) => {\n const in_zone = room.zones.includes(fzone);\n const has_space =\n !filters.space_emails?.length ||\n filters.space_emails.includes(room.email);\n const in_zones =\n !filters.zone_ids?.length ||\n !!room.zones.find((zone) => filters.zone_ids.includes(zone));\n return in_zone && has_space && in_zones;\n });\n \n const type = bkn.declined ? 'declined' : bkn.getType();\n \n const show =\n !filters.hide_type?.length ||\n !filters.hide_type.includes(type as any);\n return intersects && roomSatisfiesConditions && show;\n });\n } \n\n /**If Sunday add one day to get Saturday as end of week */\n private getEndOfWeek(date: DateTZ): DateTZ {\n return date.dateWeekday === 7\n ? date.addValue({ days: 1 }).endOfValue('week').endOfValue('day')\n : date.endOfValue('week').endOfValue('day');\n }\n}\n","import { BaseDataClass } from '../base-api.class';\nimport { CateringOrder } from '../catering';\nimport { User } from '../users';\nimport {\n flatten,\n HashMap,\n humaniseDuration,\n shorterBuildingDateFormatString,\n shorterLocalDateFormatString,\n toTitleCase,\n unique\n} from '@mckinsey-converge/base';\nimport { Space } from '../spaces/space.class';\nimport { ServiceManager } from '../service-manager.class';\nimport { SettingsService } from '../settings.service';\nimport {\n BookingNote,\n} from './booking.types';\nimport { convertLocalTimestampToTimezonedDateTz, DateNow, DateTZ, getTimezoneOffsetString } from '@mckinsey-converge/date-tz';\nimport { DaysOfWeek, getLastDateFromList, handleRecurrenceFields, RecurrencePeriod } from '../recurrence/recurrence.utils';\nimport { findSpace } from '../spaces';\nimport { DateTime } from 'luxon';\n\n\nexport interface IBookingQueryOptions {\n /** booking ID */\n id?: string;\n email?: string;\n target?: string;\n from?: number; // R--- depreciate\n until?: number; // R--- depreciate\n fromTz?: DateTZ;\n untilTz?: DateTZ;\n show_cancelled?: boolean;\n pagination?: boolean;\n limit?: number;\n offset?: number;\n sort?: string,\n filters?: any;\n include_rooms?: boolean;\n building_zone?: string;\n}\n\nexport class Booking extends BaseDataClass {\n /** Unique calendar event ID */\n // public readonly icaluid: string;\n /** Subject or title of the booking */\n public title: string;\n /** Luxon based date class of the booking start time */\n public startDateTz: DateTZ;\n /** Luxon based date class of the booking start time */\n public endDateTz: DateTZ;\n /** Description or details of the booking */\n public readonly body: string;\n /** Type of booking */\n public readonly booking_type: string;\n /** List of catering orders for the booking */\n public catering: readonly CateringOrder[];\n /** Whether booking's duration covers all day */\n public readonly all_day: boolean;\n /** Mapping of emails to approval statuses */\n public approval_status: HashMap;\n /**\n * New booking approval status set in constructor\n *\n * timeBasedStatusLabel is a getter calculated via current time, some parts of the application\n * may use status when it should use timeBasedStatusLabel\n */\n public status: 'tentative' | 'accepted' | 'approved' | 'declined' | 'cancelled' | 'expired' | 'unavailable';\n /** Host/Organiser of the booking */\n public organiser: User;\n /** List of people invited to attend the booking */\n public attendees: User[];\n /** Author of the booking */\n public readonly creator: User;\n\n /** List of notes associated with the booking */\n public notes: readonly BookingNote[];\n /** Mapping of spaces to equipment charge codes */\n public equipment_codes: HashMap;\n /** Mapping of spaces to expected number of attendees */\n public expected_attendees: HashMap;\n /** Map of space emails to the setup time before the meeting in minutes */\n public setup: HashMap;\n /** List of checked in attendees */\n public check_ins: object;\n /** Map of space emails to the breakdown time before the meeting in minutes */\n public breakdown: HashMap;\n /** List of fields edited since creation */\n public readonly edits: string[];\n /** List of users to be notified on visitor arrivals */\n public readonly notify_users: readonly string[];\n /** Whether the time or duration has changed */\n public time_changed = false;\n /**\n * Booking Space\n * Bookings only have one room on MCK\n */\n public room: Space;\n /** building_zone */\n public building_zone: string;\n /** Initialized Timezone */\n public timezone: string;\n /** Array of company names */\n public company?: string[];\n /** Flag for multiroom booking */\n public is_multiroom: boolean;\n /** Multiroom booking ID */\n public multiroom_master_id: string; \n /** Merged - field holds flag for merged-multiroom booking which tightly coupled with multiroom booking only */\n public merged: boolean;\n /** Type of recurrence, Shows whether this is a master or an occurence in the series. */\n public readonly recurrence_type: string;\n /** The frequency of the recurring booking. */\n public readonly recurrence_period: RecurrencePeriod;\n /** The interval time between each period. Defaults to 1. For example, with a period of \"weekly\" and an interval of 2, the recurrencd happen every 2 weeks. */\n public readonly recurrence_interval: number;\n /** Unix epoch in seconds of the recurrence end date */\n private _recurrence_endTz: DateTZ;\n /** The number of times to repeat the recurring booking. */\n public readonly recurrence_count: number;\n /** ID of the booking considered the master */\n public readonly recurrence_master_id: string;\n /** An array of booking IDs which belong to this recurring series. This INCLUDES the master booking ID. */\n public readonly occurrence_ids: string[];\n /** A list of INDIVIDUAL edits to any of the bookings in the series. This is so we can prompt the user if they are going to override previously updated bookings with a whole-series update. */\n public readonly occurrence_edits: string[];\n /** A list of Ocurrences */\n public readonly occurrence_details: { id: string, start_epoch: number }[];\n /** When the booking was created */\n public created_epoch: number;\n /** Is the Application concierge */\n public is_concierge: boolean;\n /**helper to know if recurring toggle is on */\n public is_recurrent: boolean;\n /**array of start dates of each ocurrence in the series */\n public recurrence_starts: Array\n /**array of conflicting dates not to be included in the recurrence series */\n public recurrence_exceptions: Array\n\n public recurrence_days?: Array\n\n /** Master recurrence start */\n public recurrence_start: number;\n\n /** Start Epoch */\n public start_epoch: number;\n public end_epoch: number;\n public level_zone: string;\n public opt_out: boolean;\n public multi_rooms: Space[];\n public room_setup: any;\n public room_breakdown: any;\n public headcount: number;\n public equipment_code: string;\n\n /** Currently back-end is not properly setting the recurrence_end property, this is a workaround */\n public get recurrence_endTz(): DateTZ {\n return this._recurrence_endTz;\n }\n\n public set recurrence_endTz(date: DateTZ) {\n this._recurrence_endTz = date;\n }\n\n /** Mark a booking for deleting */\n public attempted_to_delete?: 'series' | 'booking' | null;\n\n // No specific reason to set readonly but canm be change if needed to update in future\n public readonly booked_by : string | { name: string };\n public readonly booker: Object;\n public readonly booker_concierge: Object\n\n constructor(raw_data: HashMap = {}) {\n super(raw_data);\n // Needed to check if the current app is Concierge or Staff\n const settingsService = ServiceManager.serviceFor(SettingsService) as unknown as SettingsService;\n this.is_concierge = settingsService.concierge;\n\n /**\n * Setup Defaults when raw_data values are not provided\n */\n const nowTz = new DateTZ();\n\n const defaultTitle = ''; // Blank since the create booking form will init with test values.\n const defaultLocalTimezone = Intl?.DateTimeFormat()?.resolvedOptions()?.timeZone;\n const defaultBuildingZone = null // R --- no idea, should be a building.id but which and how\n const defaultOrgainiser = User.active_user || new User(); // meh, non American use.\n const defaultBookingType = 'internal';\n\n /**\n * Process the simple raw_data with defaults mixed in\n */\n this.title = raw_data.title || defaultTitle;\n this.timezone = raw_data.timezone || defaultLocalTimezone;\n // Used by components to get the building details\n this.building_zone = raw_data.building_zone || defaultBuildingZone;\n this.body = raw_data.body || '';\n // Provided booking type\n this.booking_type = raw_data.booking_type || defaultBookingType;\n // Attendees provided in API booking data\n this.attendees = (raw_data.attendees || []).map((i) => new User(i));\n // Provided organiser, active user, or empty user?\n this.organiser = raw_data.organiser ? new User(raw_data.organiser) : defaultOrgainiser;\n // Creator is provided or defaults to the organizer\n this.creator = (raw_data.booked_by ? new User(raw_data.booked_by) : defaultOrgainiser) || this.organiser;\n // Setup and breakdown times can conflict but not the true event start and end times\n this.setup = raw_data.setup || {};\n this.breakdown = raw_data.breakdown || {};\n this.room_setup = raw_data.room_setup;\n this.room_breakdown = raw_data.room_breakdown;\n // Notes are assigned by room but we only support a single room\n this.notes = raw_data.notes || [];\n this.equipment_codes = raw_data.equipment_codes || {};\n this.equipment_code = raw_data.equipment_code || '';\n this.expected_attendees = raw_data.expected_attendees || {};\n this.headcount = raw_data.headcount;\n this.check_ins = raw_data.check_ins || {};\n this.notify_users = raw_data.notify_users?.length ? raw_data.notify_users : [this.organiser?.name];\n this.company = raw_data.company || [];\n // retain booked by if there : helps to get correct creator above\n this.booked_by = raw_data.booked_by;\n this.booker = raw_data.booker;\n this.booker_concierge = raw_data.booker_concierge;\n this.level_zone = raw_data.level_zone;\n this.opt_out = raw_data.opt_out;\n\n /**\n * \n */\n this.merged = raw_data?.merged || null;\n\n /**\n * Multiroom fields\n */\n this.is_multiroom = raw_data.is_multiroom || null;\n this.multiroom_master_id = raw_data.multiroom_master_id || null;\n\n /**\n * Setup Defaults when raw_data values are not provided\n *\n * all room_ids and space_list inputs can be refactored into just room like an API booking\n *\n * raw_data.room can be provides as the Space class or JSON object\n */\n // this.room = raw_data.room ? new Space(raw_data.room) : new Space();\n // this.room = raw_data?.room ? (Array.isArray(raw_data?.room) && raw_data.room.length > 0) ? raw_data?.room.map((element) => new Space(element))[0]: [new Space(raw_data.room)][0] : [new Space()][0];\n // this.room = raw_data.room ? new Space(raw_data.room) : new Space();\n\n if (raw_data && raw_data.room) {\n if (Array.isArray(raw_data.room) && raw_data.room.length) {\n this.room = raw_data.room.map((element) => new Space(element))[0];\n } else if (Array.isArray(raw_data.room) && raw_data.room.length === 0) {\n this.room = [new Space()][0];\n } else {\n this.room = [new Space(raw_data.room)][0];\n }\n } else {\n this.room = [new Space()][0];\n }\n\n\n const room_id = raw_data.room_id || raw_data.room_ids // Not sure why we have room_id and room_ids\n if (!this.room?.id && room_id?.length) {\n this.room = findSpace(room_id[0]) || this.room;\n }\n\n const roomsData = raw_data?.multi_rooms || raw_data?.room;\n this.multi_rooms = roomsData\n ? Array.isArray(roomsData)\n ? roomsData.map((element) => new Space(element))\n : [new Space(roomsData)]\n : [new Space()];\n\n \n const room_ids = [...(raw_data?.room_id || []), ...(raw_data?.room_ids || [])];\n\n room_ids.forEach(roomId => {\n const newRoom = findSpace(roomId);\n // Check if the room is found and not already included in this.room\n if (newRoom && !this.multi_rooms.some(room => room.id === newRoom.id)) {\n // Add the new room to this.room\n this.multi_rooms.push(newRoom);\n }\n });\n\n // this.room is sometimes getting set to undefined when raw_data?.room is coming as an object\n if(this.multi_rooms.length && this.room === undefined){\n this.room = this.multi_rooms[0];\n }\n \n /**\n * Setup the booking start and end time\n *\n *\n * Booking defaults to now if start is not defined.\n * Booking durration is now a getter\n */\n // now rounded to the next 5 minute increment\n const defaultStartTz = new DateTZ({ date: nowTz.ms, is_local_tz: false, building_tz: this.timezone }).setValue({ minute: Math.ceil(nowTz.minutes / 5) * 5 });\n\n /**\n * When saving a booking the BaseDataClass doens't know to use the toAPIJson\n * so startDateTz isn't being convert to the epoch timestamp\n *\n * I'm not testing for the end time values because we can assume those follow the same pattern.\n */\n const startEpochProvided = !!(raw_data.start_epoch || raw_data.start);\n const startDateTzProvided = !!raw_data.startDateTz;\n\n /**\n * Not trying to be fancy here, just clear.\n */\n if (!startEpochProvided && startDateTzProvided) {\n /**\n * Once a booking is saved the BaseDataClass recreates the Booking\n * but doesn't use the toApiJSON method adapt the class input, mainly the\n * startDateTz isn't converted to the start_epoch timestamp.\n */\n this.startDateTz = raw_data.startDateTz;\n this.endDateTz = raw_data.endDateTz;\n } else if (startEpochProvided) {\n /**\n * A Booking created from the API responses arrives with the booking\n * start_epoch and end_epoch timestamps.\n */\n this.startDateTz = new DateTZ({\n date: ((raw_data.start_epoch || raw_data.start) * 1000),\n is_local_tz: false,\n building_tz: this.timezone\n });\n this.endDateTz = new DateTZ({\n date: ((raw_data.end_epoch || raw_data.end)* 1000),\n is_local_tz: false,\n building_tz: this.timezone\n });\n } else {\n /**\n * And there are uses of new Booking where there are no inputs\n * and defaults are necessary.\n */\n this.startDateTz = defaultStartTz;\n this.endDateTz = defaultStartTz.addValue({ minutes: 60 });;\n }\n\n /**\n * End time was by design ending at one minute before, IE 4:00PM is 3:59PM,\n * because of calendar and conflcit checking\n *\n * Check and finesse it.\n * Not sure why but some booking endtime added extra seconds\n */\n if ((this.endDateTz.minutes % 5) !== 0 || this.endDateTz.second > 0) {\n // Not sure of the source but some bookings do not conform.\n this.endDateTz = this.endDateTz.setValue({ second: 0, minute: Math.round(this.endDateTz.minutes / 5) * 5 });\n }\n\n\n\n /**\n * Setup the booking created_date\n *\n * if it exists as a key, use the value directly.\n * if we initialize without a value, switch to checking duration.\n * Ref: MCK-826\n */\n this.created_epoch = raw_data.created_epoch || nowTz.seconds;\n\n\n /**\n * Setup the booking all_day boolean\n *\n * if it exists as a key, use the value directly.\n * if we initialize without a value, switch to checking duration.\n * Ref: MCK-826\n */\n if ('all_day' in raw_data) {\n this.all_day = raw_data.all_day;\n } else {\n this.all_day = !!raw_data.all_day || this.duration > 23 * 60;\n }\n\n\n // R--- TODO Concierge will use startDateTz so i'm not sure if this is needed.\n if (!this.is_concierge && this.all_day && this.timezone) {\n /**\n * Concierge has a all_day form field, I can see it may need this for that, does it really?\n */\n this.startDateTz = this.startDateTz.startOfValue('day')\n }\n\n /**\n * Setup the booking approval status\n */\n let status = raw_data.status;\n // If not provided default to approved.\n if (!raw_data.status) {\n status = 'accepted';\n }\n // \"show_as\" is a special rule to override how the applications display the status\n if (raw_data.show_as && raw_data.show_as === 'cancelled') {\n status = 'declined';\n }\n const approvalStatus = {};\n this.multi_rooms.forEach(room => {\n approvalStatus[room.email] = status;\n });\n // Tracking new \"status\" and legacy \"approval_status\" from raw_data.status.\n this.status = status;\n this.approval_status = raw_data.approval_status || {};\n\n /**\n * Catering setup\n *\n * Bring in and sort the catering order by delivery time\n */\n\n this.catering = (raw_data.catering instanceof Array ? raw_data.catering : []).map(\n (i) => new CateringOrder(i)\n );\n\n\n\n /**\n * Edited fields setup\n *\n * Bring in and sort the catering order by delivery time\n *\n * cateringOrders can return the order sorted\n */\n const edited_fields = Array.isArray(raw_data.edits)\n ? raw_data.edits\n : unique(\n flatten(\n Object.keys(raw_data.edits || {}).map((room) => {\n return flatten(Object.values(raw_data.edits[room]));\n })\n )\n );\n this.edits = edited_fields;\n\n /**\n * New Recurring booking feilds\n *\n * New fields do not match the BookingRecurrenceDetails type\n * and are simpler to manage this way\n */\n this.recurrence_count = raw_data.recurrence_count || null;\n this.recurrence_days = raw_data.recurrence_days || null;\n this.occurrence_edits = raw_data.occurrence_edits || null;\n this.recurrence_endTz = raw_data.recurrence_end ? new DateTZ({date: raw_data.recurrence_end * 1000, is_local_tz: false, building_tz: this.timezone}) : null;\n this.recurrence_exceptions = raw_data.recurrence_exceptions || null;\n this.occurrence_ids = raw_data.occurrence_ids || null;\n this.recurrence_interval = raw_data.recurrence_interval || null;\n this.recurrence_period = raw_data.recurrence_period || null;\n this.recurrence_type = raw_data.recurrence_type || null;\n this.recurrence_master_id = raw_data.recurrence_master_id\n this.occurrence_details = raw_data.occurrence_details\n this.is_recurrent = raw_data.is_recurrent || (!!this.recurrence_type && !!this.recurrence_period) || null;\n this.recurrence_starts = raw_data.recurrence_starts || []\n this.start_epoch = raw_data.start_epoch\n this.end_epoch = raw_data.end_epoch\n\n /**\n * I'm not clear why, but the booking body, aka description is copied into the notes.\n * R--- In concerge data description is only a key when saving, also in the note array?\n */\n if (raw_data.body && !this.notes.find((i) => i.type === 'description')) {\n this.notes = [\n ...this.notes,\n {\n type: 'description',\n date: 0,\n message: raw_data.body,\n author: this.organiser.email\n }\n ];\n }\n\n /**\n * In case there is a cancellation in progress the property attempted_to_delete is set to false\n * And it is persisted until the booking is gone\n */\n this.attempted_to_delete = raw_data.attempted_to_delete || null;\n }\n\n\n /** Service for managing Bookings */\n protected get _service() {\n return ServiceManager.serviceFor(Booking);\n }\n\n /** Alias to approval_status */\n public get auto_approve(): boolean {\n // if concierge we auto_approve always.\n if (this.is_concierge) {\n return true;\n }\n return !this.multi_rooms.some(room => room.byRequest({\n dateTz: this.startDateTz,\n duration: this.duration,\n host: this.organiser\n }));\n }\n\n /** Whether booking has been approved */\n public get approved(): boolean {\n return !this.declined && !this.tentative;\n }\n\n /** All of the booking attendees including the organizer */\n public get allAttendees(): User[] {\n return unique([this.organiser].concat(this.attendees), 'email');\n }\n\n /** Computer format for booking type */\n public get bookingTypeId(): string {\n return this.booking_type.toLowerCase();\n }\n\n /** Human format for booking type */\n public get bookingTypeLabel(): string {\n return toTitleCase(this.booking_type);\n }\n\n /** Get accessor for the check in object, app expect array */\n public get checkInsArray(): string[] {\n return Object.keys(this.check_ins || {})\n }\n\n /** Legacy getter for \"class\" */ // R-- TODO remove\n public get class(): string {\n return this.booking_type;\n }\n\n /** */\n public get displayEndDateTz(): DateTZ {\n if ((this.endDateTz.minutes % 5) !== 0) {\n // All the bookings should end in 59 seconds\n return this.endDateTz.addValue({ seconds: 1 });\n }\n // but if not they return 00\n return this.endDateTz;\n }\n\n /** Whether booking has been declined */\n public get declined(): boolean {\n /**\n * I'm not sure, nor is Cam if this is ever used to decline\n * all booking for a specific room\n */\n const isAnyRoomDeclined = this.multi_rooms.some(room => room.name.toLowerCase().includes('decline'));\n if (isAnyRoomDeclined) {\n return true;\n }\n\n if (this.status.includes('decline')) {\n return true;\n }\n\n return false;\n }\n\n /** Description of the booking purpose */\n public get description(): string {\n const note = (this.notes || []).find((i) => i.type === 'description');\n return note ? note.message : '';\n }\n\n /** Catering getter */\n public get cateringOrders() {\n // Return the catering orders sorted by delivery time\n return this.catering ? this.catering.slice().sort((a, b) => {\n if (a?.delivery_time > b?.delivery_time) return 1;\n if (b?.delivery_time > a?.delivery_time) return -1;\n\n return 0;\n }) : [];\n }\n\n /** Get the created date as DateTz */\n public get creationDateTz() {\n return new DateTZ({ date: this.created_epoch * 1000, is_local_tz: false, building_tz: this.timezone })\n }\n\n public get tz_offset() {\n return getTimezoneOffsetString(this.timezone);\n }\n\n /** Display value for the date */\n public get date_string(): string {\n return this.startDateTz.formatDate('dd MMM yyyy');\n }\n\n /**\n * Get the booking durration based on start and end times\n */\n public get duration(): number {\n return Math.abs(this.startDateTz.startOfValue('minute').dateDiff(this.displayEndDateTz, 'minutes'));\n }\n\n /** Unix timestamp of the booking start */\n public get date() { // R--- remove if not necessary\n return this.startDateTz.ms;\n }\n\n /** Whether booking contains external visitors in the attendee list */\n public get has_visitors(): boolean {\n return this.attendees.reduce((a, v) => a || v.external, false);\n }\n\n /** Does the booking have catering orders */\n public get has_catering(): boolean {\n return !!this.catering.length;\n }\n\n /**\n * Unique calendar event ID\n * same as this.id, used to support existing component usage\n */\n public get icaluid(): string {\n return this.id;\n }\n\n /**\n * Get the booking room id\n */\n public get room_id(): string {\n return this.room.id;\n }\n\n /** Legacy getter of room, aka space */\n public get space(): Space {\n return this.room;\n }\n\n /** Status of the booking */\n public get timeBasedStatusLabel(): 'future' | 'upcoming' | 'done' | 'started' | 'in_progress' | 'expired_yesterday' {\n const buildingTzDt = DateNow(new Date()).toZone(this.timezone) ; // building time\n\n if (DateNow(new Date()).isBeforeDate(this.startDateTz.subtractValue({ minutes: 15 }))) {\n return 'future';\n } else if (DateNow(new Date()).isBeforeDate(this.startDateTz)) {\n return 'upcoming';\n } else if (DateNow(new Date()).isBeforeDate(this.startDateTz.addValue({ minutes: 15 }))) {\n return 'started';\n } else if (DateNow(new Date()).isBeforeDate(this.startDateTz.addValue({ minutes: this.duration }))) {\n return 'in_progress';\n }\n // if current time is 12 AM (as per timezone) and booking expired yesterday\n else if(buildingTzDt.startOfValue('day').addValue({ minutes: 1 }).isAfterDate(this.startDateTz, 'day') ) {\n return 'expired_yesterday'\n }\n\n return 'done';\n }\n\n /** Whether booking is tentative */\n public get tentative(): boolean {\n if (\n this.status &&\n this.status.indexOf('tentative') >= 0\n ) {\n return true;\n }\n\n return false;\n }\n\n /** Display valuie for the start and end times of the booking */\n public get time_period(): string {\n return `${this.startDateTz.formatDate('h:mma')} - ${this.displayEndDateTz.formatDate('h:mma')}`;\n }\n\n /** Display value for the start time of the booking */\n public get start_time(): string {\n return this.startDateTz.formatDate('h:mma');\n }\n\n /** Display value for the end time of the booking */\n public get end_time(): string {\n return this.endDateTz.formatDate('h:mma');\n }\n\n /** Display value for the duration of the booking */\n public get length_string(): string {\n return humaniseDuration(this.duration);\n }\n\n /** Display value for the location of the booking */\n // public get local_room_name(): string {\n // return this.room?.local_name || 'No location';\n // }\n public get local_room_name(): string {\n if (this.multi_rooms.length === 0) {\n return 'No location';\n } else {\n return this.multi_rooms.map(room => room.local_name).join(', ');\n }\n } \n\n /** Display value for the level of the first space in the booking */\n public get level(): string {\n return this.space.level.name;\n }\n\n /**\n * Make a copy of this object\n */\n public clone(): Booking {\n return new Booking(this.toJSON());\n }\n\n /**\n * Make a copy of this object without identification data\n */\n public duplicate(isEdit = false): Booking {\n return new Booking({\n ...this.toJSON(),\n id: isEdit ? this.id : null,\n });\n }\n\n /**\n *\n * @param status\n * @returns void\n */\n public undo(status?: 'accept' | 'decline', opts: { series?: boolean } = {}): Promise {\n return this._service.undo(\n this.id, status || 'accept',\n opts\n );\n }\n\n /**\n * Delete booking from the server\n */\n public delete(opts: { series?: boolean } = {}): Promise {\n if (this.id) {\n return this._service.delete(this.id, { ...opts });\n\n // R-- ask Cam again is he's positive these extra params are not needed for anything\n // return this._service.delete(this.id, {\n // concierge: this.is_concierge,\n // host: this.organiser.email,\n // room_id: this.space?.id,\n // icaluid: this.icaluid,\n // start: json.start,\n // end: json.end\n // });\n }\n }\n\n /**\n * Convert object into plain object\n */\n public toJSON(this: Booking): HashMap {\n let data = super.toJSON();\n // Remove the description from the notes\n data.notes = Array.isArray(data.notes) ? data.notes.filter((note) => note.type !== 'description') : data.notes;\n // Encode the nested objects\n data.room = data.room.toJSON();\n\n\n\n data.organiser = data.organiser.toJSON();\n data.creator = data.creator?.toJSON ? data.creator.toJSON(): data.creator;\n // Map the attendees User objects\n data.attendees = data.attendees.map((i: User) => i.toJSON());\n\n // New recurring booking\n data = handleRecurrenceFields(data)\n\n if(data.recurrence_list){\n data.recurrence_starts = [...data.recurrence_list]\n delete data.recurrence_list\n }\n\n return data;\n }\n\n /**\n * Convert object into plain object\n */\n public toApiJSON(this: Booking): HashMap {\n let data = super.toJSON();\n\n // Update booking payload contains additional fields\n data.icaluid = \"\";\n if (data.id) {\n data.icaluid = data.id;\n data.location_name = this.multi_rooms.map((item)=>{return item.local_name}).join(', ');\n data.from_room = this.multi_rooms.map((item)=>{return item.email}).join(', ');\n data.building_zone = this.room?.building?.id;\n }\n\n /**\n * These fields are rather in flux\n * According to Cam \"approve\" will be the prefered field\n * and auto_approve and approval_status can be removed.\n */\n data.approve = this.auto_approve; // this value appear incorrect on update\n data.auto_approve = [this.auto_approve]; // Needed to update approval status until BE accepts \"approve\"\n // delete data.approval_status;\n\n // Booking start and end data\n delete data.startDateTz;\n delete data.endDateTz;\n data.start = this.startDateTz.seconds;\n data.end = this.endDateTz.seconds;\n data.old_start = this.startDateTz.seconds; // remove is not necessary\n data.old_end = this.endDateTz.seconds; // remove is not necessary\n\n // Creation date value\n delete data.created_epoch;\n data.creation_date = this.creationDateTz.seconds;\n\n // Catering fields\n // data.catering = data.catering.toJSON();\n data.catering = this.cateringOrders;\n data.has_catering = this.has_catering;\n delete data.cateringOrders\n\n // Attendees appear quite incomplete\n // Map the attendees User objects\n data.attendees = this.allAttendees.map((i: User) => i.toJSON ? i.toJSON() : i);\n\n // Orgainizer and Creator data\n data.organiser = data.organiser.toJSON ? data.organiser.toJSON() : data.organiser;\n data.creator = data.creator.toJSON ? data.creator.toJSON() : data.creator;\n\n // Convert check_ins to checked_in array\n delete data.check_ins;\n data.checked_in = this.checkInsArray;\n\n // edits - edit booking is showing all fields even w/o an edit :(\n\n // Room data\n data.room_ids = this.multi_rooms.map((item)=>{return item.email});\n delete data.room;\n\n // New recurring booking\n data = handleRecurrenceFields(data)\n\n\n if(data.recurrence_list){\n data.recurrence_starts = [...data.recurrence_list]\n delete data.recurrence_list\n }\n\n // Not found in dev data\n delete data.name;\n delete data.email;\n delete data.is_concierge;\n // delete data.building_zone;\n // delete data.status;\n\n return data;\n }\n\n public getType(): string {\n if (!this || this.status?.includes('decline')) {\n return 'cancelled';\n }\n const booking_type = this.booking_type;\n if (booking_type === 'internal' && this.has_visitors) {\n return 'external';\n }\n return booking_type;\n }\n\n /** fallback for a booking when the recurrence_end is null but it's a series booking */\n public recurrenEndFromOcurrences(occurrence_details: { id: string, start_epoch: number }[]): DateTZ {\n const date = occurrence_details?.map(occurence => occurence)\n .sort((a, b) => new Date(a.start_epoch * 1000).getTime() - new Date(b.start_epoch * 1000).getTime())\n .reverse()\n .shift()\n .start_epoch * 1000\n return new DateTZ({date, is_local_tz: false, building_tz: this.timezone});\n }\n\n public get dateString() {\n return shorterLocalDateFormatString(this.startDateTz);\n }\n public get dateBuildingString() {\n return shorterBuildingDateFormatString(this.startDateTz);\n }\n\n public get endDateString(): string {\n return shorterLocalDateFormatString(this.recurrenEndFromOcurrences(this.occurrence_details));\n }\n}\n\n/**\n * Merge catering orders with same time and location\n * @param order_list List of catering orders\n */\nexport function mergeCateringOrders(order_list: CateringOrder[]) {\n // R--- investigate when this is used. Staff doesn't use it when adding catering orders.\n for (let i = 0; i < order_list.length; i++) {\n const orders = order_list.filter(\n (order) =>\n order.location_id === order_list[i].location_id &&\n order.delivery_time === order_list[i].delivery_time\n );\n if (orders.length > 1) {\n const new_list = order_list.filter(\n (order) =>\n !(order.location_id === order_list[i].location_id &&\n order.delivery_time === order_list[i].delivery_time)\n );\n new_list.push(new CateringOrder({\n ...order_list[i],\n items: flatten(orders.map(order => order.items)),\n booking_date: this.startDateTz.ms,\n booking_timezone: this.booking_timezone,\n }));\n order_list = new_list;\n i = 0;\n }\n }\n return order_list;\n}\n","import { DateTZ } from \"@mckinsey-converge/date-tz\";\n\nexport interface SpaceRules {\n auto_approve: boolean; // if false sapce is requestable else bookable\n hide: boolean;\n max_length?: number;\n min_length?: number;\n reason?: string // specially for non-bookable rooms\n}\n\nexport interface BookingNote {\n /** Type of note */\n type: 'equipment' | 'catering' | 'description' | 'private' | 'other' | 'catering-private';\n /** Name of the note's author */\n author: string;\n /** Contents of the note */\n message: string;\n /** Time the note was added to the booking */\n date: number;\n /** Display value for the time */\n time?: string;\n /** ID of the space associated with the note */\n space?: string;\n /** ID of the catering order associated with the note */\n order_id?: string;\n}\n\nexport interface DateDurationData {\n dateTz: DateTZ,\n duration: number,\n mobile: boolean,\n save?: boolean,\n}\n\nexport enum BOOKING_STATUS {\n approved = 'approved',\n declined = 'declined',\n tentative = 'tentative',\n unavailable = 'unavailable'\n}","import {\n AbstractControl,\n FormControl,\n FormGroup,\n Validators\n} from '@angular/forms';\n\nimport { AvailableBookingFields } from '../settings.interfaces';\nimport {\n HashMap,\n humaniseDuration,\n mockDate as mockDateBase,\n resetDate as resetDateBase,\n timeFormatString,\n unique\n} from '@mckinsey-converge/base';\nimport { CateringOrder } from '../catering/catering-order.class';\nimport { ServiceManager } from '../service-manager.class';\nimport { User } from '../users/user.class';\nimport { Booking, IBookingQueryOptions } from './booking.class';\nimport {\n BookingRule,\n SpaceStatus\n} from './space.types';\nimport { validateEndTime } from '../validation.utilities';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { BookingAction, RecurrencePeriod, SeriesAction } from '../recurrence/recurrence.utils';\nimport { Space } from '../spaces';\nimport * as cloneDeep from 'lodash/cloneDeep';\n\nconst MINUTE = 1;\nconst HOUR = 60;\nconst DAY = 24 * HOUR;\nconst WEEK = 7 * DAY;\nconst MONTH = 30 * DAY;\n\nconst DURATION_MAP: { [duration: string]: number } = {\n month: MONTH,\n months: MONTH,\n week: WEEK,\n weeks: WEEK,\n day: DAY,\n days: DAY,\n hour: HOUR,\n hours: HOUR,\n minute: MINUTE,\n minutes: MINUTE\n};\n\n/**\n * Deprecated. Use @mckinsey-converge/base's import.\n */\nexport const mockDate = mockDateBase;\n\n/**\n * Deprecated. Use @mckinsey-converge/base's import.\n */\nexport const resetDate = resetDateBase;\n\nexport interface IBookingSlot {\n start: number;\n end: number;\n}\n\n\nexport function bookingOptionsToQuery(options: IBookingQueryOptions): HashMap {\n let query: HashMap = {};\n if (options) {\n query = { ...options };\n delete query.type;\n if (options.filters) {\n delete query.filters;\n for (const property in options.filters) {\n if (!query[property]) {\n query[property] = options.filters[property]\n }\n }\n }\n\n // id?: string;\n // cancelled?: boolean;\n if (options.until) {\n query.to = options.until;\n delete query.until;\n }\n \n }\n return query;\n}\n\n\n/**\n * Generate a list of free time slots between the given bookings\n * @param list List of bookings to find slots between\n * @param min_size Minimum length of a free slot in minutes\n */\nexport function getFreeBookingSlots(list: Booking[]=[], min_size: number = 30, dateTzMs: number = DateNow(new Date()).ms,): IBookingSlot[] {\n /* istanbul ignore else */\n if (!list.length) {\n return [\n {\n start: 0,\n end: DateNow(new Date()).startOfValue('minute').ms * 10\n }\n ];\n }\n const slots: IBookingSlot[] = [];\n let start = new DateTZ({ date: dateTzMs });\n list.sort((a, b) => a.date - b.date);\n for (const booking of list) {\n const bkn_start = booking.startDateTz;\n const bkn_end = booking.endDateTz;\n if (bkn_start.isAfterDate(start)) {\n const diff = Math.abs(bkn_start.dateDiff(start, 'minutes'));\n /* istanbul ignore else */\n if (diff >= min_size) {\n slots.push({ start: start.ms, end: bkn_start.ms });\n }\n start = bkn_end;\n } else if (start.startOfValue('minute').ms === bkn_start.startOfValue('minute').ms) {\n start = bkn_end;\n }\n }\n slots.push({\n start: start.ms,\n // R--- these X 10's make no sense. why not + 2 years?\n end: DateNow(new Date()).startOfValue('minute').ms * 10\n });\n\n return slots;\n}\n\n/**\n * Get the next free time slot from the given bookings\n * @param list List of bookings to find the next slot\n * @param date Date to find next slot after in ms since UTC epoch\n * @param min_size Minimum length of the free slot in minutes\n * \n * R--- Possibly depreciate, I don't see it used anywhere except for its own test\n */\nexport function getNextFreeBookingSlot(\n list: Booking[],\n date: number = DateNow(new Date()).ms,\n min_size: number = 15\n): IBookingSlot {\n const slots = getFreeBookingSlots(list, min_size, date);\n const date_ = new DateTZ({date})\n const time = date_.startOfValue('minute').setValue({ second: 1 });\n for (const block of slots) {\n const start = new DateTZ({date: block.start});\n const end = new DateTZ({date: block.end});\n if (start.startOfValue('minute').isAfterDate(time)) {\n return block;\n } else if (time.isBeforeDate(end.startOfValue('minute'))) {\n const duration = end.startOfValue('minute').dateDiff(time, 'minutes');\n /* istanbul ignore else */\n if (duration >= min_size) {\n return block;\n }\n }\n }\n return slots[slots.length - 1];\n}\n\n/**\n * Generate form fields for the given booking\n * @param booking Booking to generate form for\n * @param current_user Current user of the system to default as the host\n */\nexport function generateBookingForm(\n booking: Booking,\n use_fields: AvailableBookingFields[],\n isConcierge: boolean = false,\n manualTimezone?: string,\n action?: SeriesAction | BookingAction | null\n ): FormGroup {\n if (!booking) {\n throw Error('No booking passed');\n }\n\n const user_service = ServiceManager.serviceFor(User);\n const current_user =\n user_service.current ||\n new User({ id: 'local-user', name: 'Local User', email: 'local@place.tech' });\n\n const fields: HashMap = {\n id: new FormControl(booking.id || ''),\n space_list: new FormControl( booking.is_multiroom? booking.multi_rooms : [booking.room], []),\n room: new FormControl(booking.room, {}),\n dateTz: new FormControl({ value: booking.startDateTz || DateNow(), disabled: false }, [Validators.required]),\n duration: new FormControl({ value: booking.duration, disabled: false }),\n organiser: new FormControl(booking.organiser || current_user, [Validators.required]),\n attendees: new FormControl(booking.attendees, []),\n title: new FormControl(booking.title || '', { validators: [ Validators.required, Validators.minLength(1) ], updateOn: 'blur' }), //Validators.pattern(\"[^=`~!@#$%*{};:'\\\",_.<>]*\")\n booking_type: new FormControl(booking.booking_type),\n body: new FormControl(booking.body),\n notes: new FormControl(booking.notes),\n equipment_codes: new FormControl(booking.equipment_codes),\n expected_attendees: new FormControl(booking.expected_attendees),\n company: new FormControl(booking.company),\n is_multiroom: new FormControl(booking.is_multiroom),\n merged: new FormControl({value: booking?.merged, disabled: true}),\n catering: new FormControl(\n booking.cateringOrders.map(\n (order) => new CateringOrder({\n ...order,\n booking_date: booking.startDateTz.ms,\n booking_timezone: booking.timezone,\n })\n )\n ),\n all_day: new FormControl(!!booking.all_day),\n has_catering: new FormControl(!!booking.has_catering),\n needs_space: new FormControl(true),\n action: new FormControl(''),\n timezone: new FormControl(manualTimezone || \"\"),\n is_before_date: new FormControl(false)\n };\n if (!isConcierge) {\n fields.duration.setValidators([Validators.required, validateEndTime(fields.dateTz)]);\n }\n /* istanbul ignore else */\n if (booking.id && booking.id !== 'ad-hoc') {\n fields.organiser.disable();\n /* istanbul ignore else */\n if (booking.endDateTz.ms < DateNow(new Date()).ms) {\n fields.dateTz.disable();\n }\n } else {\n const dateValidators = [Validators.required];\n if (!isConcierge) {\n dateValidators.push(isFuture);\n }\n dateValidators.push(validDateTZ)\n fields.dateTz.setValidators(dateValidators);\n fields.dateTz.updateValueAndValidity();\n }\n let list_length = -1;\n fields.space_list.valueChanges.subscribe((list) => {\n const expected = fields.expected_attendees.value || {};\n const matches = Object.keys(expected).filter((key) =>\n list?.find((space) => space.email === key)\n ).length;\n if (list && list.length && matches === 0) {\n const codes = fields.equipment_codes.value || {};\n if (Object.keys(expected).length >= 0 || Object.keys(codes).length >= 0) {\n const key = Object.keys(expected)[0] || Object.keys(codes)[0];\n const new_expected = {};\n const new_codes = {};\n const notes = fields.notes.value;\n notes.forEach((note) => (note.space === key ? (note.space = list[0].email) : ''));\n new_expected[list[0].email] = expected[key];\n new_codes[list[0].email] = codes[key];\n fields.expected_attendees.setValue(new_expected);\n fields.equipment_codes.setValue(new_codes);\n }\n }\n list_length = list?.length;\n });\n fields.dateTz.valueChanges.subscribe((_) => {\n fields.duration.updateValueAndValidity();\n });\n fields.needs_space.valueChanges.subscribe((space_needed) => {\n if (!space_needed) {\n fields.space_list.setValue([]);\n }\n });\n fields.has_catering.valueChanges.subscribe((has_catering) => {\n if (!has_catering) {\n fields.catering.setValue([]);\n }\n });\n const simplified_fields: HashMap = [\n 'id',\n 'space_list',\n 'space_ids',\n 'notes',\n 'dateTz',\n 'booking_type',\n 'equipment_codes',\n 'expected_attendees',\n 'timezone',\n 'is_before_date',\n ...use_fields\n ].reduce((map, key) => {\n /* istanbul ignore else */\n if (fields[key]) {\n map[key] = fields[key];\n }\n return map;\n }, {});\n \n if (simplified_fields.all_day) {\n const handleAllDay = (value) => {\n if (value) {\n let startOfDay = simplified_fields.dateTz.value.clone();\n // When the booking space isn't set we still need a way to determine midnight\n // and here we use the current concierge building selection's timezone.\n if (manualTimezone) {\n startOfDay = startOfDay.toZone(manualTimezone);\n }\n\n simplified_fields.dateTz.setValidators([Validators.required]);\n simplified_fields.dateTz.setValue(simplified_fields.all_day.value\n ? startOfDay.startOfValue('day')\n : simplified_fields.dateTz.value);\n simplified_fields.duration.setValue(simplified_fields.all_day.value\n ? 24 * 60\n : simplified_fields.duration.value);\n simplified_fields.dateTz.updateValueAndValidity();\n simplified_fields.duration.disable();\n // simplified_fields.dateTz.disable();\n } else {\n const dateValidators = [Validators.required];\n if (!isConcierge) {\n dateValidators.push(isFuture);\n }\n dateValidators.push(validDateTZ)\n simplified_fields.dateTz.setValidators(dateValidators);\n simplified_fields.duration.setValue(booking.duration || 30);\n simplified_fields.dateTz.updateValueAndValidity();\n simplified_fields.duration.enable();\n simplified_fields.dateTz.enable();\n }\n };\n simplified_fields.all_day.valueChanges.subscribe(handleAllDay);\n handleAllDay(simplified_fields.all_day.value);\n }\n\n const occurrences = booking.occurrence_details || [];\n\n //Add recurrence fields\n if(action && booking.recurrence_period === RecurrencePeriod.LIST){\n booking.recurrence_starts = occurrences\n .filter(occurrence => occurrence.id !== booking.recurrence_master_id)\n .map((occurrence) => new DateTZ({date: occurrence.start_epoch * 1000, is_local_tz: false, building_tz: booking.timezone})\n ) \n }\n /**If series exists then set the start and end dates from the first and last bookings in the occurrences array\n * this prevents prefilled form errors due to individual edits\n */\n if(action && action !== SeriesAction.CLONE && action !== BookingAction.CLONE && occurrences && occurrences.length && !booking.id){\n const start_dateTz = new DateTZ({\n date: occurrences.sort((d1, d2) => d1.start_epoch - d2.start_epoch)[0].start_epoch * 1000, \n is_local_tz: false, building_tz: booking.timezone\n })\n simplified_fields.dateTz.setValue(start_dateTz)\n const end = occurrences.sort((d1, d2) => d2.start_epoch - d1.start_epoch)[0].start_epoch * 1000\n booking.recurrence_endTz = new DateTZ({date: end, is_local_tz: false, building_tz: booking.timezone}) \n }\n\n // R-- needs TZ aware fields\n const _recurr_end = simplified_fields.dateTz?.value || new DateTZ({ date: 1 }); // new DateTZ({date: simplified_fields.date?.value}) \n const fields_with_recurrence = {\n ...simplified_fields,\n recurrence_period: new FormControl(booking.recurrence_period || RecurrencePeriod.WEEKLY),\n recurrence_interval: new FormControl(booking.recurrence_interval || 1),\n recurrence_endTz: new FormControl(booking.recurrence_endTz || _recurr_end.addValue({days: 1})),\n recurrence_count: new FormControl(booking.recurrence_count || 0),\n is_recurrent: new FormControl(booking.is_recurrent),\n recurrence_starts: new FormControl(booking.recurrence_starts || []),\n recurrence_exceptions: new FormControl([]),\n recurrence_pattern: new FormControl(RecurrencePeriod.WEEKLY), //Helper value to store the last selected pattern (daily, weekly, monthly),\n recurrence_days: new FormControl(booking.recurrence_days || [])\n }\n\n if(booking.is_recurrent && action !== BookingAction.CLONE){\n fields_with_recurrence.recurrence_starts.setValidators([arrayWithValues])\n fields_with_recurrence.recurrence_starts.updateValueAndValidity()\n fields_with_recurrence.recurrence_endTz.setValidators([Validators.required, validDateTZ]);\n }\n // Generate form group for booking item\n const form = new FormGroup(fields_with_recurrence);\n return form;\n}\n\n/**\n * Validate whether date is in the future\n * @param control Control to check value\n */\nexport function isFuture(control: AbstractControl) {\n const dateTz = control.value; // new DateTZ({date: control.value});\n return dateTz.isBeforeDate(DateNow(new Date()).subtractValue({ minutes: 5 }))\n ? { dateTz: 'Date needs to be in the future' }\n : null;\n}\n\n/**\n * Validate whether an array has values\n * @param control Control to check value\n */\nexport function arrayWithValues (control: AbstractControl) {\n return control.value.length !== 0 ? null : { field: 'Needs at least one value'}\n}\n\n/**\n * Validate whether a date has a valid value (future or current date)\n * @param control Control to check value\n */\n export function validDate (control: AbstractControl) {\n if(!control.value){\n return { date: 'Needs a valid date'}\n }\n const date = new DateTZ({date: control.value})\n const now = DateNow(new Date())\n const isValid = now.isBeforeDate(date, 'day') || now.isSameDate(date, 'day')\n return isValid ? null : { date: 'Needs a valid date'}\n}\n\n/**\n * Validate whether a date has a valid DateTZ value (future or current date)\n * @param control Control to check value\n */\n export function validDateTZ (control: AbstractControl) {\n if(!control.value){\n return { date: 'Needs a valid date'}\n }\n const date = DateNow(control.value.JSDate);\n const now = DateNow(new Date());\n const isValid = now.isBeforeDate(date, 'day') || now.isSameDate(date, 'day')\n return isValid ? null : { date: 'Needs a valid date'}\n}\n\n/**\n * Get minimum duration from ruleset in minutes\n * Default to 5min\n */\nexport function getMinLength(rule_list: HashMap): number {\n return Object.values(rule_list).reduce((min, block) => {\n const min_block = block.reduce((min_length, el) => {\n if (el.conditions.min_length && stringToMinutes(el.conditions.min_length) > min) {\n return stringToMinutes(el.conditions.min_length);\n } else {\n return min_length;\n }\n }, 5);\n if (min_block > min) {\n return min_block;\n } else {\n return min;\n }\n }, 5) as number;\n}\n\n/**\n * Whether the first input is greater than the last. Converts duration strings into minutes\n * @param duration_1 First input can be a number in minutes or a duration string e.g. `1 hour`\n * @param duration_2 Second input can be a number in minutes or a duration string e.g. `30 minutes`\n */\nexport function durationGreaterThanOrEqual(\n duration_1: string | number,\n duration_2: string | number\n) {\n const first: number = typeof duration_1 === 'string' ? stringToMinutes(duration_1) : duration_1;\n const second: number =\n typeof duration_2 === 'string' ? stringToMinutes(duration_2) : duration_2;\n return first >= second;\n}\n\n/**\n * Conver time string into minutes\n * @param str timestring e.g. `'1 day'`, `'15 minutes'`, `'2 weeks'`\n */\nexport function stringToMinutes(str: string): number {\n const parts = str.split(' ');\n return +parts[0] * DURATION_MAP[parts[1]];\n}\n\n/**\n * Get current status within bookings\n * @param bookings List of bookings\n * @param host Host of the new event\n * @param date Datetime of the new event\n */\nexport function statusFromBookings(\n bookings: Booking[] = [],\n bookable: boolean = true,\n requestable: boolean = false,\n dateTz: DateTZ = DateNow(),\n space?: Space\n) {\n const free_slots = getFreeBookingSlots(bookings.filter((bkn) => !bkn.declined));\n const now = DateNow() // new DateTZ({date}); // now should be now\n // commeted bellow piece as correct way to get next free booking slot is at line- 488\n // const next_free_slot = free_slots.find((slot) => {\n // return slot && (slot.start > now.ms || now.ms > slot.start - slot.start % 1000 || now.ms < slot.end - slot.end % 60 * 1000);\n // // const start = new DateTZ({date: slot?.start || 0 });\n // // const end = new DateTZ({date: slot?.end || 0}); // slot end isn't late enough? or after now/\n // // return start.isAfterDate(now) || (now.isAfterDate(start.startOfValue('second')) && now.isBeforeDate(end.startOfValue('minute')))\n // });\n\n const next_free_slot = getNextFreeBookingSlot(bookings.filter((bkn) => !bkn.declined), dateTz.ms);\n \n const start = new DateTZ({date: next_free_slot?.start || 0});\n const end = new DateTZ({date: next_free_slot?.end || 0});\n const currently_free = dateTz.isAfterDate(start.startOfValue('second')) && dateTz.isBeforeDate(end.startOfValue('minute'));\n const time_until_next_block = humaniseDuration(\n currently_free ? end.dateDiff(dateTz, 'minutes') : start.dateDiff(dateTz, 'minutes'),\n 'short'\n );\n\n const free_tomorrow = !currently_free && !start.isSameDate(dateTz, 'day');\n const free_today = currently_free && !end.isSameDate(dateTz, 'day');\n \n return {\n status: (!bookable\n ? SpaceStatus.NotBookable\n : currently_free\n ? requestable\n ? SpaceStatus.Requestable\n : SpaceStatus.Available\n : SpaceStatus.InProgress) as SpaceStatus,\n available_until: free_today\n ? 'No meetings today'\n : currently_free\n ? `Free until ${end.formatDate(timeFormatString())}(${time_until_next_block})`\n : free_tomorrow\n ? 'Unavailable today'\n : `Free at ${start.formatDate(timeFormatString())}(${time_until_next_block})`\n };\n}\n\n/**\n * V1 version display.\n */\nexport const spaceStatusToDisplay = (status: SpaceStatus): string => {\n switch (status) {\n case SpaceStatus.NotBookable:\n return 'Not Bookable';\n case SpaceStatus.Requestable:\n return 'Available by Request';\n case SpaceStatus.Unavailable:\n return 'Unavailable';\n case SpaceStatus.InProgress:\n return 'Meeting in Progress';\n case SpaceStatus.Available:\n default:\n return 'Available';\n }\n};\n\nexport function replaceBookings(\n list: Booking[],\n new_bookings: Booking[],\n filter_options: { room_email: string; fromTz: DateTZ; toTz: DateTZ }\n) {\n const filtered_list = list.filter((booking) => {\n return (\n !(booking.multi_rooms.some(room => room?.email === filter_options.room_email)) ||\n !timePeriodsIntersect(filter_options.fromTz.ms, filter_options.toTz.ms, booking.startDateTz.ms, booking.endDateTz.ms)\n );\n });\n const updated_list = filtered_list.concat(new_bookings);\n updated_list.sort((a, b) => a.date - b.date);\n return unique(updated_list, 'icaluid');\n}\n\nexport function timePeriodsIntersect(\n start1: number,\n end1: number,\n start2: number,\n end2: number,\n type = ''\n) {\n return (\n (start1 >= start2 && start1 < end2) ||\n (end1 > start2 && end1 <= end2) ||\n (start2 >= start1 && start2 < end1) ||\n (end2 > start1 && end2 <= end1)\n );\n}\n\nexport function formatWhen({\n all_day,\n startTZ,\n endTZ,\n displayEndTZ\n}): string {\n if (all_day) {\n return `${startTZ.formatDate('dd MMM yyyy')} - All Day`;\n } else {\n if (startTZ.isSameDate(endTZ, 'day')) {\n return `${startTZ.formatDate('dd MMM yyyy, h:mma')} - ${displayEndTZ.formatDate('h:mma')}`;\n } else {\n return `${startTZ.formatDate('dd MMM yyyy, h:mma')} - ${displayEndTZ.formatDate('dd MMM yyyy, h:mma')}`;\n }\n }\n}\n\nexport const isIncludes = (item: any, field: string, searchVaue: string) => (item && item[field] && item[field].toLowerCase().includes(searchVaue));\n\nexport function searchRoomsAndBookings(allItems: (Space | Booking)[], searchValue: string, isConcierge:boolean = false) {\n\n let relevantItems: (Space | Booking)[] = [];\n\n if(isConcierge) {\n relevantItems = allItems.filter( (item: any ) => \n isIncludes(item, 'title', searchValue) ||\n isIncludes(item.creator, 'name', searchValue) ||\n isIncludes(item.organiser, 'name', searchValue) ||\n isIncludes(item, 'simple_name', searchValue) || // search with room name \n (item?.attendees && !!item?.attendees.filter(el => el.name.toLowerCase().includes(searchValue)).length ) \n );\n } else {\n relevantItems = allItems.filter( (item: any ) => \n this.isIncludes(item.creator, 'name', searchValue) ||\n this.isIncludes(item.organiser, 'name', searchValue) ||\n this.isIncludes(item, 'simple_name', searchValue) \n );\n }\n\n const filteredItems = this.duplicateMultiroomEntriesIfAny(relevantItems);\n \n return filteredItems;\n} \n\nexport function duplicateMultiroomEntriesIfAny(bookings) {\n // Initialize an array to hold the original and duplicated entries \n const updatedBookings = [...bookings];\n\n // Loop through the original bookings array \n [...bookings].forEach(booking => {\n if(booking?.is_multiroom) {\n // calculate the number of times to duplicates the booking\n const duplicatesCount = booking.multi_rooms.filter(el => el.id !== booking.space.id);\n\n // Create the duplicate and add them to the updatedBookings array.\n for(let i = 0; i < duplicatesCount.length; i++) {\n // Deep copy the booking to ensure references are not copied\n const duplicatedBooking = cloneDeep(booking); \n duplicatedBooking.room = duplicatesCount[i]; \n updatedBookings.push(duplicatedBooking);\n }\n }\n });\n\n // Return the array with duplicated entries \n return updatedBookings;\n\n}\n \n","\nimport { Injectable } from '@angular/core';\nimport { ComposerService } from '@placeos/composer';\nimport { BaseAPIService } from '../base.service';\nimport { Booking, IBookingQueryOptions } from './booking.class';\nimport { bookingOptionsToQuery } from './booking.utilities';\nimport {\n HashMap\n} from '@mckinsey-converge/base';\nimport { ServiceManager } from '../service-manager.class';\nimport { SettingsService } from '../settings.service';\nimport { BookingCheckinParams } from './space.types';\nimport { DateNow } from \"@mckinsey-converge/date-tz\";\nimport { Observable } from 'rxjs/internal/Observable';\nimport { forkJoin } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BookingsService extends BaseAPIService {\n constructor(protected _composer: ComposerService,\n settingsService: SettingsService,\n ) {\n super(_composer, settingsService);\n ServiceManager.setService(Booking, this);\n this._name = 'Bookings';\n this._api_route = 'bookings';\n this._compare = (a, b) => !(a.id || '').localeCompare(b.id) || !(a.icaluid || '').localeCompare(b.icaluid);\n }\n\n /**\n * Get user bookings\n * @param options\n */\n public userBookings(options: IBookingQueryOptions,\n uniqueId?: string): Promise {\n if (!options) {\n throw new Error('Booking avilability requires request options');\n }\n const now = DateNow(new Date())\n if (!options.from) {\n options.from = now\n .startOfValue('day')\n .subtractValue({ days: 2 })\n .ms;\n }\n if (!options.until) {\n options.until = null;\n }\n\n const key = `bookings|${options.id ? options.id : ''}|${uniqueId ?? ''}`;\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const respond = (list: Booking[]) => {\n delete this._promises[key];\n resolve(list);\n };\n const error = e => {\n reject(e);\n delete this._promises[key];\n };\n const query = bookingOptionsToQuery(options);\n if (options.id) {\n this.show(options.id, query).then(i => respond([i]), error);\n } else {\n this.query(query).then(respond, error);\n }\n });\n }\n return this._promises[key];\n }\n\n\n /**\n * Save changes to the booking\n * @param booking Booking update or add to the database\n */\n public save(booking: Booking, series?: boolean): Promise {\n const body = booking.toApiJSON()\n if(series){\n body.series = true\n }\n return booking.id ? this.update(booking.id, body) : this.add(body);\n }\n\n /**\n * Checkin atteendee of a booking\n * @param id ID of the booking\n * @param fields Fields associated with the booking and attendee\n */\n public checkin(id: string, fields: BookingCheckinParams) {\n return this.task(id, 'checkin', fields);\n }\n public checkinIndividualVisitor(id: string, fields: BookingCheckinParams) {\n return this.taskObsr(id, 'checkin', fields); \n }\n\n public accept(id: string, fields?: HashMap) {\n return this.task(id, 'accept', fields);\n }\n\n public undo(id: string, status: 'accept' | 'decline', fields?: HashMap) {\n return this.task(id, status, fields);\n }\n\n public decline(id: string, fields?: HashMap) {\n return this.task(id, this.settingsService.concierge ? 'concierge_decline' : 'decline', fields);\n }\n\n protected process(raw_data: HashMap): Booking {\n return new Booking(raw_data);\n }\n\n public declineMultiple(bookings: Booking[]): Observable {\n const requests = [];\n bookings.forEach(bkg => {\n const booking = bkg.toJSON();\n const id = booking.id;\n const fields = {\n booking_id: booking.id,\n organiser: booking.organiser.email,\n room_email: booking.space?.email,\n icaluid: booking.icaluid,\n start: booking.startDateTz.formatDate('h:mm a').toLocaleLowerCase(),\n end: booking.endDateTz.formatDate('h:mm a').toLocaleLowerCase(),\n };\n if (bkg.is_recurrent && bkg.recurrence_type === 'master') {\n // Add series=true for recurrent bookings\n fields['series'] = true;\n } \n requests.push(this.taskObsr(id, 'concierge_decline', fields) ); \n });\n return forkJoin(requests);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ComposerService } from '@placeos/composer';\nimport { PaginatedAPIService } from '../paginated.service';\nimport { Booking, IBookingQueryOptions, } from './booking.class';\nimport { bookingOptionsToQuery } from './booking.utilities';\nimport {\n HashMap\n} from '@mckinsey-converge/base';\nimport { ServiceManager } from '../service-manager.class';\nimport { SettingsService } from '../settings.service';\nimport { BookingCheckinParams } from './space.types';\nimport { Observable } from 'rxjs';\n\nexport interface PaginatedBooking {\n results: Booking[];\n total: number;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BookingsPaginatedService extends PaginatedAPIService {\n constructor(protected _composer: ComposerService,\n settingsService: SettingsService,\n ) {\n super(_composer, settingsService);\n ServiceManager.setService(Booking, this);\n this._name = 'Bookings';\n this._api_route = 'bookings';\n this._compare = (a, b) => !(a.id || '').localeCompare(b.id) || !(a.icaluid || '').localeCompare(b.icaluid);\n }\n\n /**\n * Get user bookings\n * @param options\n */\n public userBookings(options: IBookingQueryOptions,\n uniqueId?: string): Promise {\n if (!options) {\n throw new Error('Booking avilability requires request options');\n }\n\n const key = `bookingsPaginated|${options.id ? options.id : ''}|${uniqueId ?? ''}`;\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const respond = (response: any) => {\n delete this._promises[key];\n resolve(response);\n };\n const error = e => {\n reject(e);\n delete this._promises[key];\n };\n const query = bookingOptionsToQuery(options);\n if (options.id) {\n this.show(options.id, query).then(i => respond([i]), error);\n } else {\n this.query(query).then(respond, error);\n }\n });\n }\n\n return this._promises[key];\n }\n\n\n /**\n * Save changes to the booking\n * @param booking Booking update or add to the database\n */\n public save(booking: Booking): Promise {\n return booking.id ? this.update(booking.id, booking.toJSON()) : this.add(booking.toJSON());\n }\n\n /**\n * Checkin atteendee of a booking\n * @param id ID of the booking\n * @param fields Fields associated with the booking and attendee\n */\n public checkin(id: string, fields: BookingCheckinParams) {\n return this.task(id, 'checkin', fields);\n }\n\n public accept(id: string, fields?: HashMap) {\n return this.task(id, 'accept', fields);\n }\n\n public decline(id: string, fields?: HashMap) {\n return this.task(id, this.settingsService.concierge ? 'concierge_decline' : 'decline', fields);\n }\n\n public undo(id: string, status: 'accept' | 'decline', fields?: HashMap) {\n return this.task(id, status, fields);\n }\n\n protected process(raw_data: HashMap): Booking {\n return new Booking(raw_data);\n }\n\n // public getHoldingBay(query: IBookingQueryOptions): Promise {\n // const key = `bookingsPaginated|holding-bay`;\n // if (!this._promises[key]) {\n // this._promises[key] = new Promise((resolve, reject) => {\n // const respond = (response: any) => {\n // delete this._promises[key];\n // resolve(response);\n // };\n // const error = e => {\n // reject(e);\n // delete this._promises[key];\n // }; \n // this.query(query, { url: '/api/staff/bookings/holding_bay' }).then(respond, error);\n // });\n // }\n\n // return this._promises[key];\n // }\n\n public getHoldingBay = (query: IBookingQueryOptions): Observable => this.queryHoldingBay(query, { url: '/api/staff/bookings/holding_bay' });\n}\n","export * from './booking.class'\nexport * from './space.types'\nexport * from './bookings.service'\nexport * from './bookingsPaginated.service'\nexport * from './booking.utilities'\nexport * from './booking-state.service'\nexport * from './space.utilities'\nexport * from './booking.types'\n","import { SpaceRules } from './booking.types';\n\nimport {\n durationGreaterThanOrEqual,\n stringToMinutes\n} from './booking.utilities';\nimport {\n SpaceCheckOptions,\n SpaceRuleOptions\n} from './space.types';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n/**\n * Get booking rules for the given user and space\n * @param options\n */\nexport function rulesForSpace(options: SpaceRuleOptions): SpaceRules {\n if (!options) {\n throw Error('Options are needed to check for rule matches');\n }\n const space_rules_for_user: SpaceRules = {\n auto_approve: true,\n hide: true,\n reason: ''\n };\n let match = false;\n /* istanbul ignore else */\n if (options.space) {\n for (const type in options.rules) {\n if (\n options.rules.hasOwnProperty(type) &&\n options.rules[type] instanceof Array &&\n options.space.zones.find((zone) => zone === type)\n ) {\n for (const rule_block of options.rules[type]) {\n /* istanbul ignore else */\n if (\n checkRules({\n user: options.user,\n space: options.space,\n time: options.time,\n duration: options.duration,\n rules: rule_block.conditions\n })\n ) {\n const ruleset = rule_block.rules;\n const conditions = rule_block.conditions;\n space_rules_for_user.hide = false;\n /* istanbul ignore else */\n if (conditions.max_length) {\n space_rules_for_user.max_length = stringToMinutes(\n conditions.max_length as string\n );\n }\n /* istanbul ignore else */\n if (conditions.min_length) {\n space_rules_for_user.min_length = stringToMinutes(\n conditions.min_length as string\n );\n }\n // NOTE: use max_length in conditions instead of book_length in rules\n // if (ruleset.book_length) {\n // space_rules_for_user.max_length = stringToMinutes(ruleset.book_length as string);\n // }\n /* istanbul ignore else */\n if (ruleset.auto_approve !== undefined) {\n space_rules_for_user.auto_approve = ruleset.auto_approve;\n }\n match = true;\n space_rules_for_user.reason = '';\n break;\n }\n else {\n space_rules_for_user.reason = 'OfficeRules';\n }\n }\n }\n \n /* istanbul ignore else */\n if (!space_rules_for_user.hide) {\n break;\n }\n }\n }\n if (!match) {\n space_rules_for_user.hide = true;\n }\n return space_rules_for_user;\n}\n\n\n/**\n * Check if user matches the given ruleset\n * @param options\n */\nfunction checkRules(options: SpaceCheckOptions): boolean {\n /* istanbul ignore else */\n if (options.rules) {\n const time = new DateTZ({date: options.time});\n const count = Object.keys(options.rules).length;\n let matches = 0;\n Object.keys(options.rules).forEach((key) => {\n let counter = 0;\n const condition: string[] =\n options.rules[key] instanceof Array\n ? (options.rules[key] as [])\n : [options.rules[key] as string];\n switch (key) {\n case 'groups':\n /* istanbul ignore else */\n if (options.user && options.user.groups) {\n counter = 0;\n condition.forEach((i) =>\n options.user.groups.find((j) => j === i) ? counter++ : null\n );\n /* istanbul ignore else */\n if (counter > 0) {\n matches++;\n }\n }\n break;\n case 'locations':\n /* istanbul ignore else */\n if (options.user && options.user.location) {\n counter = 0;\n condition.forEach((i) =>\n (options.user.last_location.name || '').indexOf(i) >= 0\n ? counter++\n : null\n );\n /* istanbul ignore else */\n if (counter >= options.rules[key].length) {\n matches++;\n }\n }\n break;\n case 'is_before':\n /* istanbul ignore else */\n if (options.time) {\n const duration = stringToMinutes(condition[0]);\n const check = DateNow(new Date()).addValue({ minutes: duration });\n let match = time.isBeforeDate(check);\n /* istanbul ignore else */\n matches += match ? 1 : 0;\n }\n break;\n case 'is_after':\n /* istanbul ignore else */\n if (options.time) {\n\n const duration = stringToMinutes(condition[0]);\n const check = DateNow(new Date());\n time.isAfterDate(check.addValue({ minutes: duration })) ? matches++ : '';\n }\n break;\n case 'min_length':\n /* istanbul ignore else */\n if (\n options.duration &&\n durationGreaterThanOrEqual(options.duration, condition[0])\n ) {\n matches++;\n }\n break;\n case 'max_length':\n /* istanbul ignore else */\n if (\n options.duration &&\n durationGreaterThanOrEqual(condition[0], options.duration)\n ) {\n matches++;\n }\n break;\n }\n });\n return matches >= count;\n }\n return false;\n}\n","\nimport { Injectable } from '@angular/core';\nimport { ComposerService } from '@placeos/composer';\nimport { CateringCategory } from './catering-category.class';\nimport { BaseAPIService } from '../base.service';\nimport { SettingsService } from '../settings.service';\nimport { ServiceManager } from '../service-manager.class';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CateringCategoriesService extends BaseAPIService {\n\n constructor(protected _composer: ComposerService,\n settingsService: SettingsService) {\n super(_composer, settingsService);\n ServiceManager.setService(CateringCategory, this);\n this._name = 'catering category/group';\n this._api_route = 'catering/category';\n }\n\n public query(): never {\n throw Error('No index endpoint for catering categories. Use catering menu service.');\n }\n\n public show(): never {\n throw Error('No show endpoint for catering categories. Use catering menu service.');\n }\n\n public processItem(raw_item: any) {\n return new CateringCategory(raw_item);\n }\n\n public format(item: CateringCategory) {\n return { ...item };\n }\n}\n","import { CateringItem } from \"./catering-item.class\";\nimport { HashMap } from '@mckinsey-converge/base';\n\nexport class CateringCategory extends CateringItem {\n /** Whether item is a category */\n public is_category = true;\n public admin_only: boolean;\n public restricted_from: number;\n\n constructor(data: HashMap) {\n super(data);\n this.is_category = true;\n (this as any).must_select = this.must_select || 0;\n (this as any).order_anytime = !!data.order_anytime && this.package;\n }\n\n /**\n * Convert class object into plain object\n */\n public toJSON(this: CateringItem): HashMap {\n const obj = super.toJSON();\n obj.order_anytime = !!obj.order_anytime && obj.package;\n return obj;\n }\n}\n","import { HashMap } from '@mckinsey-converge/base';\n\nexport interface CateringAvailability {\n /** Month of the year that the item starts being available */\n readonly from_month: number;\n /** Month of the year that the item ends being available */\n readonly to_month: number;\n}\n\nexport class CateringItem {\n /** Unique ID of the catering item */\n public readonly id: string;\n /** Display name of the catering item */\n public readonly name: string;\n /** Description of the item */\n public readonly description: string;\n /** URL to the image associated with the item */\n public readonly image_path: string;\n /** Type of catering item */\n public readonly catering_type: string;\n /** Availability of the item */\n public readonly available: CateringAvailability;\n /** Time in hours that is needed to prepare the item beforehand */\n public readonly prior_notice: number;\n /** Cost of the item without decimals */\n private unit_price: number;\n /** Cost of the item without decimals */\n public readonly supplier_cost: number;\n /** Minimum number this item allowed in an order */\n public readonly minimum_quantity: number;\n /** Maximum number this item allowed in an order */\n public readonly maximum_quantity: number;\n /** List of categories that the item is contained in */\n public readonly parent_categories: readonly string[];\n /** Allegen information associated with the item */\n public readonly allergy: string;\n /** Whether the supply of this item has run out */\n public out_of_stock: boolean;\n /** Whether item can be ordered within the time limit set by the building */\n public readonly order_anytime: boolean;\n /** Number of child items that must be selected as part of the package */\n public readonly must_select: number;\n /** List of associated items */\n public readonly items: CateringItem[];\n public readonly availableItems: CateringItem[];\n /** Whether child items are part of a package */\n public readonly package: boolean;\n /** List of zone ids associated with the category */\n public readonly zones: readonly string[];\n /** Number of this item in the assoicated order */\n private _amount = 0;\n /** Unique ID of the catering item */\n private instance_id: string;\n /** Whether item is a category */\n public is_category: boolean = false;\n /** Whether item is disabled in Staff App */\n public admin_only: boolean;\n /** restricted_from indicates category restriction from hours ahead of delivery time */\n public restricted_from: number;\n\n public get can_order_anytime(): boolean {\n return (\n this.order_anytime ||\n !this.package && this.items.reduce(\n (anytime, item) => anytime || item.can_order_anytime,\n false,\n )\n );\n }\n\n /** Number of this item in the assoicated order */\n public get amount(): number {\n return this._amount || 0;\n }\n\n /** Unit price in the assoicated order */\n public get price(): number {\n return this.unit_price || 0;\n }\n\n /** Total cost of the amount of items set */\n public get total(): number {\n return (this._amount * this.unit_price) || 0;\n }\n\n constructor(data: HashMap) {\n this.instance_id = `item-${Math.floor(Math.random() * 999_999_999)}`;\n this.id = data.id || '';\n this.name = data.name || '';\n this.is_category = this.id.includes('category-');\n this.available = {\n from_month: (data.available ? data.available.from_month : data.available_from) || -1,\n to_month: (data.available ? data.available.to_month : data.available_to) || -1,\n };\n this.description = data.description || '';\n this.prior_notice = data.prior_notice || data.notice;\n this.unit_price = data.unit_price || data.price || 0;\n this.supplier_cost = data.supplier_cost;\n this.minimum_quantity = Math.max(0, data.minimum_quantity || 0);\n this.maximum_quantity = Math.max(1, data.maximum_quantity || 999);\n this.parent_categories = data.category_ids || data.parent_categories || data.categories;\n this.order_anytime = !!data.order_anytime;\n this.image_path = data.image_path || '';\n this.admin_only = data.admin_only;\n this.restricted_from = data.restricted_from || 0;\n this.catering_type = data.catering_type;\n this.must_select = data.must_select ?? 0;\n this._amount = data._amount || data.amount || 0;\n this.allergy = data.allergy || '';\n const cateringItems: CateringItem[] = (data.items || []).map(item => new CateringItem(item));\n this.items = cateringItems;\n const filteredCateringItems = cateringItems.filter(c => !c.out_of_stock);\n this.availableItems = filteredCateringItems;\n this.out_of_stock = !!data.out_of_stock ||\n // if original items are empty, we hit the bottom, so if we filter out items then its out of stock.\n (cateringItems.length > 0 && filteredCateringItems.length === 0);\n this.package = data.package === 'true' || data.package === true;\n this.zones = data.zones && data.zones.length ? [...data.zones] : [];\n }\n\n public setAmount(amount: number = 0): void {\n if (amount <= this._amount) {\n if (amount < this.minimum_quantity) {\n amount = 0;\n }\n } else {\n if (amount < this.minimum_quantity) {\n amount = this.minimum_quantity;\n }\n }\n this._amount = Math.max(0, Math.min(this.maximum_quantity, amount));\n }\n\n /**\n * Updates the unit_price in the assoicated order if necessary\n * @param price value to compare to unit_price\n */\n public setPrice(price: number = 0): void {\n if(this.unit_price !== price) this.unit_price = price;\n }\n\n /**\n * Increase amount of the item the order\n * @param amount Amount to increase by\n */\n public addToOrder(amount: number = 1) {\n amount = Math.max(1, amount);\n this._amount += amount;\n if (this._amount < 0) {\n this._amount = 0;\n } else if (this._amount < this.minimum_quantity) {\n this._amount = this.minimum_quantity;\n } else if (this._amount > this.maximum_quantity) {\n this._amount = this.maximum_quantity;\n }\n }\n\n /**\n * Decrease amount of the item the order\n * @param amount Amount to decrease by\n */\n public removeFromOrder(amount: number = 1) {\n amount = Math.max(1, amount);\n this._amount -= amount;\n if (this._amount < 0) {\n this._amount = 0;\n } else if (this._amount < this.minimum_quantity) {\n this._amount = 0;\n }\n }\n\n /**\n * Convert class object into plain object\n */\n public toJSON(this: CateringItem): HashMap {\n const obj: any = { ...this };\n // Remove local private members\n delete obj._changes;\n delete obj._server_names;\n // Convert remaining members to be public\n obj.price = obj.unit_price;\n obj.categories = obj.parent_categories;\n const keys = Object.keys(obj);\n for (const key of keys) {\n if (key[0] === '_') {\n const new_key = key.substr(1);\n obj[new_key] = obj[key];\n delete obj[key];\n } else if (obj[key] === undefined) {\n delete obj[key];\n }\n }\n obj.items = obj.items.map((item: CateringItem) => item.toJSON());\n return obj;\n }\n}\n","\nimport { Injectable } from '@angular/core';\nimport { ComposerService } from '@placeos/composer';\nimport { BaseAPIService } from '../base.service';\nimport { CateringItem } from './catering-item.class';\nimport { SettingsService } from '../settings.service';\nimport { ServiceManager } from '../service-manager.class';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CateringItemsService extends BaseAPIService {\n constructor(protected _composer: ComposerService,\n settingsService: SettingsService) {\n super(_composer, settingsService);\n ServiceManager.setService(CateringItem, this);\n this._name = 'Catering Menu';\n this._api_route = 'catering/item';\n }\n\n public query(): never {\n throw Error('No index endpoint for catering items. Use menu service.');\n }\n\n public show(): never {\n throw Error('No show endpoint for catering items. Use menu service.');\n }\n\n public processItem(raw_item: any) {\n return new CateringItem(raw_item);\n }\n\n public format(item: CateringItem) {\n return item instanceof CateringItem ? item.toJSON() : item;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ComposerService } from '@placeos/composer';\n\nimport { CateringItem } from './catering-item.class';\nimport { CateringCategory } from './catering-category.class';\nimport { BaseAPIService } from '../base.service';\nimport { HashMap } from '@mckinsey-converge/base';\nimport { SettingsService } from '../settings.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CateringMenuService extends BaseAPIService {\n constructor(protected _composer: ComposerService,\n settingsService: SettingsService) {\n super(_composer, settingsService);\n this._name = 'Catering Menu';\n this._api_route = 'menu';\n }\n\n /**\n * Convert user data to local format\n * @param user User data\n */\n protected processItem(item: HashMap) {\n return item.items ? new CateringCategory(item) : new CateringItem(item);\n }\n}\n","\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CateringNotesService {\n\n public cateringNotes = [];\n\n \n public setNotes(notes) {\n this.cateringNotes = notes;\n }\n\n public getNotes() {\n return this.cateringNotes;\n }\n}","import { CateringItem } from './catering-item.class';\nimport { HashMap } from '@mckinsey-converge/base';\n\nimport { CateringCategory } from './catering-category.class';\nimport { Booking } from '../bookings';\n\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\nexport type CateringOrderMutableProperties =\n | 'items'\n | 'location_id'\n | 'location'\n | 'delivery_time'\n | 'charge_code'\n | 'notes'\n | 'status';\n\nexport type CateringOrderStatus = 'accepted' | 'preparing' | 'ready' | 'delivered' | 'cancelled';\n\nconst now = DateNow(new Date());\n\n// R--- refactor booking date to be dateTz\nexport class CateringOrder {\n /**\n * Booking fields\n * \n * The app handles booking data inconsisently. Ususally these booking fields are provided\n * for related booking data, but on occasion the full Booking class is used.\n */\n\n /** Unique Booking ID for the catering order */\n readonly booking_id: string;\n /** \n * Timestamp based booking time of the booking associated with the order\n * \n * Must be provide as the true Booking startDateTz or as a new DateTZ with \n * the correct date: timestamp, local_tz = false and bulding_tz values\n */\n readonly booking_date: number;\n /**\n * Timezone of the booking associated with the order\n */\n readonly booking_timezone: string;\n /** ID of the location to deliver the items to */\n location_id: string = '';\n /** Display text for the location to deliver the items to */\n location: string = '';\n /**\n * Smart timezone aware catering datetime with timezone\n */\n readonly bookingDateTz: DateTZ;\n\n /** \n * Booking associated with the order \n * \n * The booking attached to the CateringOrder is a special case used \n * mainly on the Concierge catering reports because someone created \n * a bad pattern to save catering changes to the booking. \n * \n * Avoid when possible.\n */\n public booking: Booking = null;\n\n /**\n * Catering specific fields\n * \n * The app handles booking data inconsisently. Ususally these booking fields are provided\n * for related booking data, but on occasion the full Booking class is used.\n */\n\n /** Whether the order status change is loading */\n public loading: boolean;\n /** Unique ID for the catering order */\n readonly id: string;\n /** Number of minutes after the start of the associated meeting to delivery the order */\n readonly delivery_time: number = 0;\n /** Status of the catering order */\n readonly status: CateringOrderStatus;\n /** Whether items in the order need to be prepared in the kitchen */\n readonly kitchen: boolean;\n /** Whether items in the order are in the pantry */\n readonly pantry: boolean;\n /** List of items */\n readonly items: readonly (CateringItem | CateringCategory)[] = [];\n /** Creation time of the order */\n readonly created_at: number;\n /** Charge code associated with the order */\n readonly charge_code: string;\n /** Notes associated with the order */\n readonly notes: string;\n // /** Mapping of properties to their changes */\n // private _changes: HashMap = {};\n /** Map of local property names to server ones */\n protected _server_names: HashMap = {};\n /** Currency code for the location of the order */\n public symbol: string;\n /** Whether the is an error with the order */\n public error: boolean;\n\n\n constructor(data: HashMap) {\n /** \n * Setup Defaults when raw_data values are not provided\n */\n const nowTz = DateNow(new Date());\n // now rounded to the next 5 minute increment\n const defaultStartTz = nowTz.setValue({ minute: Math.ceil(nowTz.minutes / 5) * 5 });\n const defaultLocalTimezone = Intl?.DateTimeFormat()?.resolvedOptions()?.timeZone;\n\n this.id = data.id || `order-${Math.floor(Math.random() * 999_999_999)}`;\n\n // If the booking is provided default the booking values to the true booking values\n this.booking = data.booking || null;\n\n \n // Has a booking so init with those values\n if (this.hasBookingAttached) {\n this.booking_date = this.booking.startDateTz.ms;\n this.booking_timezone = this.booking.timezone;\n this.bookingDateTz = this.booking.startDateTz;\n this.location_id = data.location_id || '';\n this.location = data.location || '';\n } else {\n this.booking_date = data.booking_date || defaultStartTz.ms;\n this.booking_timezone = data.booking_timezone || defaultLocalTimezone;\n this.bookingDateTz = new DateTZ({ date: this.booking_date, is_local_tz: false, building_tz: this.booking_timezone });\n this.location_id = data.location_id || '';\n this.location = data.location || '';\n }\n \n this.delivery_time = typeof data.delivery_time === 'number' ? data.delivery_time : 0;\n this.status = data.status || 'accepted';\n this.charge_code = data.charge_code || data.code;\n this.notes = data.notes;\n this.kitchen = data.kitchen instanceof Array ? !!data.kitchen.length : data.kitchen;\n this.pantry = data.pantry instanceof Array ? !!data.pantry.length : data.pantry;\n this.symbol = data.symbol || 'USD';\n this.items = (data.items || [])\n .map(item => (item.items ? new CateringCategory(item) : new CateringItem(item)))\n .filter(item => !!item.amount);\n }\n\n /** Special Case, check if a full booking is attached */\n public get hasBookingAttached(): boolean {\n return !!this.booking;\n }\n\n /** Display string for the types of items in the order */\n public get type(): string {\n let type = '';\n /* istanbul ignore else */\n if (this.kitchen) type += 'Kitchen';\n /* istanbul ignore else */\n if (this.pantry) {\n /* istanbul ignore else */\n if (type) type += ' + ';\n type += 'Pantry';\n }\n return type;\n }\n\n /** Total cost of the order */\n public get total(): number {\n return this.items.reduce((total, item) => total + (item.total || 0), 0);\n }\n\n /** Total number of items in the order */\n public get item_count(): number {\n return this.items.reduce((total, item) => total + (item.amount || 0), 0);\n }\n\n public get deliver_date(): DateTZ {\n return (this.bookingDateTz || this.booking?.startDateTz).addValue({ minutes: this.delivery_time })\n }\n\n /** Display string for the delivery time of the order (short version) */\n public get deliver_at(): string {\n return this.deliver_date.formatDate('h:mm a');\n }\n\n /** Display string for the delivery time of the order */\n public get deliver_at_time(): string {\n return this.deliver_date.formatDate('h:mma').toLocaleLowerCase();\n }\n\n /** Display string for the delivery date of the order */\n public get deliver_on_date(): string {\n return this.deliver_date.formatDate('dd MMM yyyy');\n }\n\n /**\n * Make a copy of this object\n */\n public clone(): CateringOrder {\n return new CateringOrder(this.toJSON());\n }\n\n /**\n * Convert class object into plain object\n */\n public toJSON(this: CateringOrder): HashMap {\n const obj: any = { ...this };\n // Remove local private members\n delete obj._server_names;\n // Remove local public members\n delete obj.booking;\n delete obj.loading;\n delete obj.bookingDateTz;\n\n // Convert remaining members to be public\n const keys = Object.keys(obj);\n for (const key of keys) {\n if (key[0] === '_') {\n const new_key = this._server_names[key.substr(1)] || key.substr(1);\n obj[new_key] = obj[key];\n delete obj[key];\n } else if (obj[key] === undefined) {\n delete obj[key];\n }\n }\n obj.items = obj.items.map((item: CateringItem) => item.toJSON());\n\n return obj;\n }\n}\n","import { CateringItem } from './catering-item.class';\n\nexport const mergeCateringItemWithFormData = (existing: CateringItem, override: any) =>\n new CateringItem({\n ...(existing instanceof CateringItem ? existing.toJSON() : existing),\n ...override\n });\n","export * from './catering-item.class';\nexport * from './catering-category.class';\nexport * from './catering-menu.service';\nexport * from './catering-order.class';\nexport * from './catering-categories.service';\nexport * from './catering-items.service';\nexport * from './catering.utilities';\nexport * from './catering-notes.service';\n","import { Injectable } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CloseDialogService {\n private dialogRefMap = new Map>();\n\n constructor() { }\n\n // Register a dialog with its ID\n registerDialog(id: string, dialogRef: MatDialogRef): void {\n this.dialogRefMap.set(id, dialogRef);\n }\n\n // Close a specific dialog by ID\n closeDialog(id: string): void {\n const dialogRef = this.dialogRefMap.get(id);\n if (dialogRef) {\n dialogRef.close();\n this.dialogRefMap.delete(id);\n }\n }\n\n // Optional: Close all dialogs\n closeAllDialogs(): void {\n this.dialogRefMap.forEach((dialogRef, id) => {\n dialogRef.close();\n this.dialogRefMap.delete(id);\n });\n }\n}\n\nexport enum DialogIds {\n MeetingDetails = 'meetingDetailsDialogId',\n BookingConfirmation = 'bookingConfirmationDialogId',\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CollapseService {\n private collapseSubject = new BehaviorSubject(false);\n collapse$ = this.collapseSubject.asObservable();\n\n collapsePanel() {\n this.collapseSubject.next(false);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class DataCommonModule {}\n","import { Injectable } from '@angular/core';\nimport {\n BehaviorSubject,\n Observable,\n Subscription\n} from 'rxjs';\n\nimport {\n HashMap,\n unique\n} from '@mckinsey-converge/base';\n\n/** List of keys that cannot be in a combination by themselves or with each other */\nconst INVALID_STANDALONE_KEYS: string[] = ['control', 'shift', 'alt', 'meta', 'os'];\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HotkeysService {\n /** Map of subjects which store press states of keys */\n private keydown_states: HashMap> = {};\n /** Map of obserers for key state subjects */\n private keydown_observers: HashMap> = {};\n /** List of keys at the end of a combination */\n private combo_end: string[] = [];\n /** List of registered hotkey combinations */\n private registered_combos: string[][] = [];\n /** Counter for the number of keydown events. Used for checking order of key presses */\n private counter: number = 0;\n /** Last key code to be pressed */\n private last_down: string;\n\n constructor() {\n window.addEventListener('keydown', (event: KeyboardEvent) => {\n const code = this.mapKey((event.code || '').toLowerCase());\n /* istanbul ignore else */\n if (this.last_down !== code) {\n /* istanbul ignore else */\n if (!this.keydown_states[code]) {\n this.keydown_states[code] = new BehaviorSubject(null);\n this.keydown_observers[code] = this.keydown_states[code].asObservable();\n }\n this.keydown_states[code].next(++this.counter);\n /* istanbul ignore else */\n if (this.combo_end.indexOf(code) >= 0) {\n event.preventDefault();\n }\n this.last_down = code;\n }\n });\n\n window.addEventListener('keyup', (event: KeyboardEvent) => {\n const code = this.mapKey((event.code || '').toLowerCase());\n /* istanbul ignore else */\n if (this.keydown_states[code]) {\n this.keydown_states[code].next(null);\n }\n /* istanbul ignore else */\n if (this.last_down === code) {\n this.last_down = null;\n }\n });\n }\n\n /**\n * Listen to the given key combination\n * @param combo Array of key codes to listen to or a hotkey string e.g. `Alt+Shift+KeyK`\n * @param next Callback for combination presses\n */\n public listen(combo: string | string[], next: () => void): Subscription {\n combo = (combo instanceof Array ? combo : combo.split('+'));\n const combination: string[] = combo.map(i => this.mapKey(i.toLowerCase()));\n /* istanbul ignore else */\n if (combination.length > 0 && this.validCombination(combination)) {\n this.registered_combos.push(combination);\n const last_key = combination[combination.length - 1];\n /* istanbul ignore else */\n if (!this.keydown_states[last_key]) {\n this.keydown_states[last_key] = new BehaviorSubject(null);\n this.keydown_observers[last_key] = this.keydown_states[last_key].asObservable();\n }\n this.updateCombinationEndList();\n return this.keydown_observers[last_key].subscribe((count) => {\n /* istanbul ignore else */\n if (count) {\n const presses: number[] = [];\n /* istanbul ignore else */\n if (combination.length > 0) {\n // Check that keys are pressed\n for (const key of combination) {\n const state = this.keydown_states[key];\n presses.push(state ? state.getValue() || -1 : -1);\n }\n // Check that keys are pressed in the correct order\n for (let i = 0; i < combination.length - 1; i++) {\n if (presses[i] > presses[i + 1]) {\n return;\n }\n }\n }\n const total = presses.reduce((a, v) => a + (v > 0 ? 1 : -1), 0);\n /* istanbul ignore else */\n if (total >= combination.length) {\n next();\n }\n }\n });\n }\n return null;\n }\n\n /**\n * Map key codes with multiple versions to simple form\n * @param code Code to transform\n */\n private mapKey(code: string): string {\n /* istanbul ignore else */\n if (code.indexOf('alt') >= 0 || code.indexOf('shift') >= 0 || code.indexOf('control') >= 0) {\n return code.replace('left', '').replace('right', '');\n }\n return code;\n }\n\n /**\n * Update the list of the last keys in combinations to allow for prevent default actions on pre-existing hotkeys\n */\n private updateCombinationEndList(): void {\n const key_list = [];\n for (const combo of this.registered_combos) {\n this.combo_end.push(combo[combo.length - 1]);\n }\n this.combo_end = unique(key_list);\n }\n\n /**\n * Checks if the given hotkey combination is allowed and valid\n * @param combo Array of key codes\n */\n private validCombination(combo: string[]): boolean {\n let non_meta = 0;\n for (const key of combo) {\n /* istanbul ignore else */\n if (INVALID_STANDALONE_KEYS.indexOf(key) < 0) {\n non_meta++;\n }\n }\n return non_meta > 0;\n }\n}\n","export * from './location.class';\nexport * from './location.service';\n","import { HashMap } from '@mckinsey-converge/base';\n\nimport { Organisation } from '../organisation/organisation.class';\nimport {\n ServiceLike,\n ServiceManager\n} from '../service-manager.class';\nimport { BuildingLevel } from '../organisation/level.class';\n\nexport class MapLocation {\n /** ID of the element on the associated map */\n public readonly id?: string;\n /** Name of the location */\n public readonly name?: string;\n /** X coordinate of the location */\n public readonly x?: number;\n /** Y coordinate of the location */\n public readonly y?: number;\n /** Level details for the location */\n public readonly level: BuildingLevel;\n /** Whether the position is fixed */\n public readonly fixed: boolean;\n /** Accuracy of the location when not fixed */\n public readonly confidence?: number;\n /** Whether location is at a desk */\n public readonly at_desk?: boolean;\n /** Whether location is set */\n public readonly empty: boolean;\n\n /** Service for managing model on the server */\n protected get _service(): ServiceLike {\n return ServiceManager.serviceFor(MapLocation);\n }\n\n /** Display string for the building and level of the location */\n public get display(): string {\n const service = ServiceManager.serviceFor(Organisation);\n if (!service) {\n return this.level.name;\n }\n const bld = service.buildings.find((bld) => bld.id === this.level.building_id);\n return bld ? `${bld.name}, ${this.level.name}` : this.level.name;\n }\n\n /** Whether location is in a different building from the active one */\n public get in_another_building(): boolean {\n const service = ServiceManager.serviceFor(Organisation);\n return service && service.building.id !== this.level.building_id;\n }\n\n constructor(raw_data: HashMap) {\n this.id = raw_data.id || raw_data.map_id || raw_data.desk_id;\n this.name = raw_data.name || '';\n this.x = raw_data.x\n ? Math.floor(this.normalise(raw_data.x, raw_data.x_max || 10000) * 10000)\n : null;\n this.y = raw_data.y\n ? Math.floor(this.normalise(raw_data.y, raw_data.x_max || 10000) * 10000)\n : null;\n const service = ServiceManager.serviceFor(Organisation);\n this.level =\n raw_data.level instanceof BuildingLevel\n ? raw_data.level\n : service\n ? service.levelWithID(raw_data.level)\n : new BuildingLevel(raw_data.level);\n this.fixed = this.x === null && this.y === null;\n this.confidence = Math.max(5, Math.min(15, raw_data.confidence || 0));\n this.at_desk = this.id && this.id.indexOf('area-') === 0;\n this.empty = !(this.name && this.level && (this.id || this.x || this.y));\n }\n\n /** Normalise the given value within the max */\n private normalise(value: number, max: number): number {\n return value / (max * 1.0);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ComposerService } from '@placeos/composer';\n\nimport { BaseAPIService } from '../base.service';\nimport { MapLocation } from './location.class';\nimport { HashMap } from '@mckinsey-converge/base';\nimport { ServiceManager } from '../service-manager.class';\nimport { SettingsService } from '../settings.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocationService extends BaseAPIService {\n constructor(protected _composer: ComposerService,\n settingsService: SettingsService) {\n super(_composer, settingsService);\n ServiceManager.setService(MapLocation, this);\n this._name = 'Location';\n this._api_route = 'people';\n }\n\n public add(...args): never {\n throw new Error('Create not allowed for location service')\n }\n\n public update(...args): never {\n throw new Error('Update not allowed for location service')\n }\n\n public delete(...args): never {\n throw new Error('Delete not allowed for location service')\n }\n\n public process(item: HashMap) {\n return new MapLocation(item) as any;\n }\n}\n","import { BaseDataClass } from '../base-api.class';\nimport {\n getItemWithKeys,\n HashMap,\n Identity\n} from '@mckinsey-converge/base';\nimport { BuildingLevel } from './level.class';\nimport { BookingRule } from '../bookings';\nimport { ServiceManager } from '../service-manager.class';\n\nexport interface BuildingCity {\n timezone: string\n name: string\n}\n\nexport interface IBuildingRoleUser {\n name: string;\n email: string;\n phone: string;\n}\n\nexport interface LockerMap {\n [zone: string]: {\n [area: string]: {\n [type: string]: (string | boolean)[][];\n };\n };\n}\n\nexport interface ICoordinates {\n longitude: number;\n latitude: number;\n}\n\nexport interface LevelFeature {\n id: string;\n level_id: string;\n name: string;\n}\n\nexport interface BookingRuleDetails {\n /** List of booking rules details for the building */\n readonly rules: readonly string[];\n /** Custom booking rules for the map */\n readonly map_rules?: readonly string[];\n /** Custom booking rules for the map */\n readonly other_rules?: readonly string[];\n /** Contact email address for the building */\n readonly contact?: string;\n /** Information string to display before the rule listings */\n readonly info?: string;\n /** Link for more details */\n readonly link?: { url?: string, name?: string };\n /**\n * Allow buildings to define their own rules formats where needed or for special messages.\n */\n readonly custom_html?: string;\n}\n\nexport class Building extends BaseDataClass {\n /** Service for managing buildings */\n protected get _service() {\n return ServiceManager.serviceFor(Building);\n }\n\n /** Engine Zone ID for the building */\n public readonly zone_id: string;\n /** Organisation Code for the building */\n public readonly code: string;\n /** Geographical address of the building */\n public readonly address: string;\n /** Details about the booking rules for the building */\n public readonly booking_details: BookingRuleDetails;\n /** Details about the booking rules for the building */\n public readonly booking_rules: HashMap;\n /** Number of hour before a booking catering is restricted */\n public readonly catering_restricted_from: number;\n /** Currency code for the country assoicated with the building */\n public readonly currency: string;\n /** Map of fields that are required on the form */\n public readonly required: HashMap;\n /** IANA timezone database string for the location the building resides */\n public readonly timezone: string;\n /** Whether catering is available in this building */\n public readonly has_catering: boolean;\n /** ID of the system used for the holding bay */\n public readonly holding_bay: string;\n /** ID of the system used for standalone visitors bookings */\n public readonly visitor_space: string;\n /** List of zones to determine sort order spaces */\n public readonly sort_order: readonly string[];\n /** Searchable map features */\n public readonly searchables: readonly LevelFeature[];\n /** List of available extras for the building */\n public readonly extras: readonly Identity[];\n /** List of available extra equipment for loan at the building */\n public readonly loan_items: readonly Identity[];\n /** List of available levels for the building */\n public readonly levels: readonly BuildingLevel[];\n /** The city the building belongs in **/\n public readonly city: string;\n\n public readonly catering_hours: { readonly start: number, readonly end: number };\n /** Map of custom settings for the building */\n private _settings: HashMap;\n /** Map of roles and list of the associated users */\n private _roles: HashMap;\n /** Map of the locker ID arrays */\n private _lockers: LockerMap;\n /** Map of important system ids for the building */\n private _systems: HashMap;\n /** Map of important phone numbers for the building */\n private _phone_numbers: HashMap;\n /** Globe coordiates for the build */\n private _location: ICoordinates;\n /** List of zones associated with the building */\n public readonly zones: readonly string[];\n\n constructor(raw_data: HashMap) {\n super(raw_data);\n const settings = raw_data.settings || {};\n const disc_info = settings.discovery_info || {};\n this.zone_id = raw_data.zone_id || raw_data.zone;\n this.extras = (raw_data.extras || disc_info.extras || []).map(i => ({\n id: i.extra_id || i.id,\n name: i.extra_name || i.name\n }));\n this.loan_items = (raw_data.loan_items || disc_info.loan_items || []).map(i => ({\n id: i.extra_id || i.id,\n name: i.extra_name || i.name\n }));\n this.levels = (raw_data.levels || disc_info.levels || []).map(i => new BuildingLevel({\n ...i,\n building_id: this.id\n }));\n this._roles = raw_data.roles || disc_info.roles || {};\n this._lockers = raw_data.lockers || raw_data.locker_structure || disc_info.locker_structure || {};\n this._systems = raw_data.systems || disc_info.systems || {};\n this._settings = settings;\n this._phone_numbers = raw_data.phone_numbers || disc_info.phone_numbers || {};\n this._location = raw_data.location || disc_info.location || { longitude: null, latitude: null };\n this.catering_hours = raw_data.catering_hours || disc_info.catering_hours || settings.catering_hours || {\n start: 7,\n end: 20\n };\n const searchables = [];\n if (raw_data.neighbourhoods) {\n for (const lvl in raw_data.neighbourhoods) {\n if (raw_data.neighbourhoods.hasOwnProperty(lvl)) {\n const lvl_features = raw_data.neighbourhoods[lvl] || {};\n for (const feature in lvl_features) {\n if (lvl_features.hasOwnProperty(feature)) {\n searchables.push({\n id: lvl_features[feature],\n name: feature,\n level_id: lvl\n });\n }\n }\n }\n }\n }\n this.searchables = searchables;\n this.code = raw_data.code || disc_info.code || settings.code || '';\n this.address = raw_data.address || disc_info.address || settings.address || '';\n this.booking_details = raw_data.booking_details || disc_info.booking_details || settings.booking_details || {};\n this.booking_rules = raw_data.booking_rules || disc_info.booking_rules || settings.booking_rules || {};\n this.catering_restricted_from = raw_data.catering_restricted_from || disc_info.catering_restricted_from || settings.catering_restricted_from || 0;\n this.currency = raw_data.currency || disc_info.currency || settings.currency || 'USD';\n this.required = raw_data.required || disc_info.required || settings.required || {};\n if (disc_info.requires_equipment_code) {\n this.required.equipment_code = true;\n }\n if (disc_info.requires_expected_attendees) {\n this.required.expected_attendees = true;\n }\n this.timezone = raw_data.timezone || disc_info.timezone || settings.timezone || '';\n this.has_catering = raw_data.has_catering || disc_info.has_catering || settings.has_catering || false;\n this.holding_bay = raw_data.holding_bay || disc_info.holding_bay || settings.holding_bay || '';\n this.visitor_space = raw_data.visitor_space || disc_info.visitor_space || settings.visitor_space || '';\n this.sort_order = raw_data.sort_order || disc_info.sort_order || settings.sort_order || [];\n this.city = raw_data.city || disc_info.city || 'No City';\n }\n\n /**\n * Get a custom building setting\n * @param key Name of the setting. i.e. nested items can be grabbed using `.` to seperate key names\n */\n public setting(key: string): any {\n const keys = key.split('.');\n const value = getItemWithKeys(keys, this._settings) || getItemWithKeys(['discovery_info', ...keys], this._settings);\n return value;\n }\n\n /**\n * Get list of users with the associated role\n * @param name Role to find users for\n */\n public role(name: string): IBuildingRoleUser[] {\n return [...(this._roles[name] || [])];\n }\n\n /**\n * Get list of the names of available user role lists\n */\n public get role_names(): string[] {\n return Object.keys(this._roles).filter(i => this._roles.hasOwnProperty(i));\n }\n\n /** Map of the locker ID arrays */\n public get lockers(): LockerMap {\n return { ...(this._lockers || {}) };\n }\n\n /** Map of important system ids for the building */\n public get systems(): HashMap {\n return { ...(this._systems || {}) };\n }\n\n /** Map of important phone numbers for the building */\n public get phone_numbers(): HashMap {\n return { ...(this._phone_numbers || {}) };\n }\n\n /** Real coordinates */\n public get location(): ICoordinates {\n return { ...this._location };\n }\n\n /**\n * Get search map feature for the given level ID\n * @param level_id ID of level to grab features for\n */\n public featuresForLevel(level_id: string): LevelFeature[] {\n return (this.searchables || []).filter(i => i.level_id === level_id);\n }\n\n /**\n * Building objects are readonly and cannot be changed\n */\n public async save(): Promise {\n throw new Error('Building objects are readonly and cannot be changed');\n }\n\n /**\n * Building objects are readonly and cannot be deleted\n */\n public async delete(): Promise {\n throw new Error('Building objects are readonly and cannot be deleted');\n }\n}\n","export * from './building.class';\nexport * from './level.class';\nexport * from './organisation.class';\nexport * from './organisation.service';\n","import { HashMap } from 'libs/base/src/lib/types.utilities';\n\n/** Building Level data */\nexport class BuildingLevel {\n /** ID of the building level zone */\n readonly id: string;\n /** ID of the building zone associated with the level */\n readonly building_id: string;\n /** Name of the level */\n readonly name: string;\n /** Number or short identifier of the level */\n readonly short_name: string;\n /** Map URL for the level */\n readonly map_url: string;\n /** Usage type for the level */\n readonly type: 'staff' | 'client' | 'any';\n /** Setting for the level */\n readonly settings: HashMap;\n\n constructor(_data: HashMap = {}) {\n this.id = _data.id || _data.level_id || '';\n this.building_id = _data.bld_id || _data.building_id || '';\n this.name = _data.name || _data.level_name || '';\n const lower_name = this.name.toLowerCase();\n const num = lower_name.indexOf('level') >= 0 ? lower_name.replace(/ ?level ?/gi, '') : lower_name.substr(0, 1).toUpperCase();\n this.short_name = _data.short_name || num || '';\n this.map_url = _data.map_url || '';\n this.type = _data.type || _data.floor_type || 'any';\n this.settings = _data.settings;\n }\n}\n","import { BaseDataClass } from '../base-api.class';\nimport {\n getItemWithKeys,\n HashMap\n} from '@mckinsey-converge/base';\n\n/* istanbul ignore next */\n\nexport class Organisation extends BaseDataClass {\n /** List of available building zone ids for the organisation */\n public readonly available_buildings: readonly string[];\n /** Map of custom settings for the building */\n private _settings: HashMap;\n\n constructor(raw_data: HashMap = {}) {\n super(raw_data);\n this._settings = raw_data.settings || {};\n this.available_buildings = (raw_data.settings?.discovery_info?.buildings || []).map(\n (bld) => bld.zone_id\n );\n }\n\n /**\n * Get a custom building setting\n * @param key Name of the setting. i.e. nested items can be grabbed using `.` to seperate key names\n */\n public setting(key: string): any {\n const keys = key.split('.');\n const value = getItemWithKeys(keys, this._settings);\n return value;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ComposerService } from '@placeos/composer';\n\nimport { BaseAPIService } from '../base.service';\nimport { Organisation } from './organisation.class';\nimport { Building } from './building.class';\nimport {\n ApplicationLoadingState,\n HashMap,\n Identity\n} from '@mckinsey-converge/base';\nimport { BuildingLevel } from './level.class';\nimport { first } from 'rxjs/operators';\nimport { ApplicationService } from '../app.service';\nimport { ServiceManager } from '../service-manager.class';\nimport { UsersService } from '../users';\nimport { SettingsService } from '../settings.service';\nimport { Observable, Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OrganisationService extends BaseAPIService {\n /** Organisation data for the application */\n private _organisation: Organisation;\n /** Actively displayed building */\n private _active_building: string;\n\n private _spaceTypesSubject: Subject = new Subject();\n\n constructor(\n protected _composer: ComposerService,\n private _service: ApplicationService,\n private _users: UsersService,\n settingsService: SettingsService,\n ) {\n super(_composer, settingsService);\n ServiceManager.setService(Organisation, this);\n ServiceManager.setService(Building, this);\n this._name = 'Organisation';\n this._api_route = 'zones';\n this.set('buildings', []);\n this.set('active_building', null);\n this._users.initialised.pipe(first((_) => _)).subscribe(() => this.init());\n }\n\n /**\n * Add is not available on organisation service\n */\n public async add(form_data: HashMap, query_params?: HashMap): Promise {\n throw new Error('Add is not available on the organisation service');\n }\n\n /**\n * Update is not available on organisation service\n */\n public async update(\n id: string,\n form_data: HashMap,\n query_params?: HashMap\n ): Promise {\n throw new Error('Update is not available on the organisation service');\n }\n\n /**\n * Delete is not available on organisation service\n */\n public async delete(id: string): Promise {\n throw new Error('Delete is not available on the organisation service');\n }\n\n /**\n * Get list of levels for the given building ID\n * @param bld_id Building ID\n */\n public levels(bld_id: string): readonly BuildingLevel[] {\n return (this.buildings.find((i) => i.id === bld_id) || ({} as Building)).levels;\n }\n\n /**\n * Get a setting from the organisation or active building\n * @param key Name of the setting. i.e. nested items can be grabbed using `.` to seperate key names\n */\n public setting(key: string) {\n return this.building.setting(key) || this._organisation.setting(key);\n }\n\n /** Active building */\n public get building(): Building {\n return this.buildings.find((i) => i.id === this._active_building);\n }\n\n /** List of types of spaces */\n public get space_types(): Identity[] {\n return this.get('space_types') || [];\n }\n\n public set building(bld: Building) {\n if (bld instanceof Building) {\n this._active_building = bld.id;\n } else {\n this._active_building = bld;\n }\n this.set('active_building', this.building);\n this.loadSpaceTypes();\n localStorage.setItem('PlaceOS.building', this._active_building);\n localStorage.setItem('CONCIERGE.timezone', bld.timezone);\n }\n\n /** List of buildings for the organisation */\n public get buildings(): Building[] {\n return this.get('buildings') || [];\n }\n\n /**\n * Get list of available equipment\n * @param id ID of the building to get the list from. i.e. Defaults to the active building\n */\n public getExtras(id: string, bld_id?: string) {\n const bld = this.buildings.find((i) => i.id === bld_id) || this.building;\n if (bld && id) {\n return bld.extras.filter((i) => `${i.id}`.indexOf(id) >= 0);\n }\n return [];\n }\n\n /**\n * Get the first level matching the list of given IDs\n * @param ids List of ID to search with\n */\n public levelWithID(ids: string | string[]): BuildingLevel {\n const list = ids instanceof Array ? ids : [ids];\n const bld_list = this.buildings;\n for (const id of list) {\n for (const bld of bld_list) {\n for (const lvl of bld.levels) {\n if (lvl.id === id) {\n return lvl;\n }\n }\n }\n }\n return null;\n }\n\n /**\n * Initialise service data\n */\n protected async load(): Promise {\n /* istanbul ignore else */\n if (localStorage) {\n this._active_building = localStorage.getItem(`${this.settingsService.frontend.toUpperCase()}.building`);\n }\n const loading: ApplicationLoadingState = this._service.get('loading') || {};\n loading.organisation = { message: 'Loading organisation data', state: 'loading' };\n await this.loadOrganisation();\n loading.organisation = { message: 'Loading organisation data', state: 'complete' };\n loading.buildings = { message: 'Loading building data', state: 'loading' };\n this._service.set('loading', loading);\n await this.loadBuildings();\n loading.buildings = { message: 'Loading building data', state: 'complete' };\n loading.levels = { message: 'Loading building floor data', state: 'loading' };\n this._service.set('loading', loading);\n await this.loadLevels();\n loading.levels = { message: 'Loading building floor data', state: 'complete' };\n this._service.set('loading', loading);\n loading.space_types = { message: 'Loading space type data', state: 'loading' };\n this._service.set('loading', loading);\n await this.loadSpaceTypes();\n loading.space_types = { message: 'Loading space type data', state: 'complete' };\n this._service.set('loading', loading);\n const user = this._users.current;\n\n if (user) {\n const id = localStorage.getItem('PlaceOS.building');\n const building = this.buildings.find(bld => id && bld.id === id) || this.buildings.find((bld) => bld.code === user.location);\n if (building) {\n this._active_building = building.id;\n this.set('active_building', building);\n } else if(this.building) {\n // This conditional solves a problem of infinite loop when user building doesn't exist.\n this._active_building = this.building.id;\n this.set('active_building', this.building);\n }\n }\n }\n\n /**\n * Load organisation data for application\n */\n public async loadOrganisation(): Promise {\n const org_data = await this.query({ tags: 'org', engine: true });\n this._organisation = new Organisation(org_data[0]);\n this.set('organisation', this._organisation);\n return this._organisation;\n }\n\n /**\n * Load building data for the organisation already stored in the service..\n */\n public async loadBuildings(): Promise {\n return this.loadBuildingsWithOrg(this._organisation);\n }\n\n /**\n * Load building data for the organisation passed.\n */\n public async loadBuildingsWithOrg(organisation: Organisation): Promise {\n const bld_data = await this.query({ tags: 'building', engine: true, limit: 1000 });\n const buildings = (bld_data as HashMap[])\n .map((i) => new Building(i))\n .filter((bld) => organisation.available_buildings.includes(bld.id));\n this.set('buildings', buildings);\n /* istanbul ignore else */\n if (!this._active_building && buildings && buildings.length > 0) {\n this._active_building = buildings[0].id;\n }\n return buildings;\n }\n\n /**\n * Load level data for the buildings\n */\n public async loadLevels(): Promise {\n const lvl_data = await this.query({ tags: 'level', engine: true, limit: 1000 });\n const levels = (lvl_data as HashMap[]).map((i) => new BuildingLevel(i));\n this.set('levels', levels);\n return levels;\n }\n\n /**\n * Load space type data for the buildings\n */\n public async loadSpaceTypes(): Promise {\n const type_data = await this.query({ tags: 'room', engine: true, limit: 1000, building_id: this._active_building });\n const types = (type_data as HashMap[]).map((i) => ({ id: i.id, name: i.name }));\n this.set('space_types', types);\n // Emit the updated space_types\n this._spaceTypesSubject.next(types);\n }\n\n /**\n * Observable to listen for changes in space_types\n */\n public get spaceTypesObservable(): Observable {\n return this._spaceTypesSubject.asObservable();\n }\n\n public getOrganizationFiltersByRoomType(key: string) {\n if (!this._organisation) {\n return {}\n }\n const discovery_info = this._organisation.setting('discovery_info')\n\n return discovery_info && discovery_info[key] ? discovery_info[key] : {}\n }\n\n public getRoomTypeSubsetDDOptions(type:string) {\n const filters = this.getOrganizationFiltersByRoomType(type) || {}\n return [...Object.keys(filters).map((key) => {\n const display = filters[key].toString();\n return {\n display,\n value: key,\n meta: {}\n }\n }) ];\n }\n\n\n\n /**\n * The function will generate filter options, excluding London. London has its own set of options as per the request. \n * The filter options pertain to a subset of room type options managed by the room admin module.\n * @returns filterOptions: filter options for day view space type filter\n */\n public getRoomFilterOptionsPerLocation() {\n let internalSubSet = this.getRoomTypeSubsetDDOptions('internal_room_types');\n if(this.building.name.toLowerCase().includes('london')) {\n internalSubSet = internalSubSet.filter(e => !e.value.includes('meeting') && !e.value.includes('partner') );\n }\n const filterOptions = [];\n internalSubSet.forEach(el => filterOptions.push({name: el.display, id: el.value} ) ); \n return filterOptions\n }\n\n}\n","import { ComposerService } from '@placeos/composer';\nimport { BehaviorSubject, Observable, of, Subject, Subscriber } from 'rxjs';\n\nimport { BaseAPIService } from './base.service';\nimport { BaseClass, HashMap } from '@mckinsey-converge/base';\nimport { ApplicationService } from './app.service';\nimport { toQueryString } from './api.utilities';\nimport { SettingsService } from './settings.service';\nimport { catchError, map } from 'rxjs/operators';\n\nexport interface IEngineResponse {\n results: HashMap[];\n total: number;\n}\n\nexport class PaginatedAPIService extends BaseClass {\n /** Application service */\n public parent: ApplicationService;\n /** Display name of the service */\n protected _name: string;\n /** API Route of the service */\n protected _api_route: string;\n /** Map of state variables for Service */\n protected _subjects: { [key: string]: BehaviorSubject | Subject } = {};\n /** Map of observables for state variables */\n protected _observers: { [key: string]: Observable } = {};\n /** Map of poll subscribers for API endpoints */\n protected _subscribers: { [key: string]: Subscriber } = {};\n /** Map of promises for Service */\n protected _promises: { [key: string]: Promise } = {};\n /** Comparison function for service items */\n protected _compare: (a: T, b: T) => boolean = (a, b) =>\n a === b || (a as any).id === (b as any).id;\n /** Default filter function for list method */\n protected _list_filter: (a: T) => boolean = (a) => !!a;\n\n /** Http Client */\n protected get http() {\n return this._composer.http;\n }\n\n constructor(protected _composer: ComposerService,\n protected settingsService: SettingsService) {\n super();\n this._name = 'Base';\n this._api_route = 'base';\n this.set('list', []);\n }\n\n /**\n * Injects concierge into form_data.\n */\n private injectConcierge(form_data: HashMap) {\n // we only send it over when concierge, since the BE may check for presence rather than\n // if its true or not.\n if (this.settingsService.concierge) {\n return { ...form_data, concierge: true }\n }\n return form_data;\n }\n\n /**\n * Initailise service\n */\n public init() {\n this.load().then(\n (_) => this._initialised.next(true),\n (err) => this.timeout('init', () => this.init(), 1000)\n );\n }\n\n /**\n * Get API route for the service\n * @param engine Whether endpoint is using the application API or engine API\n */\n public route(engine: boolean = false) {\n const endpoint = engine\n ? this._composer.auth.api_endpoint\n : '/api/staff';\n return `${endpoint}/${this._api_route}`;\n }\n\n /** API Route of the service */\n public get api_route() {\n return this._api_route;\n }\n\n /**\n * Get the current value of the named property\n * @param name Property name\n */\n public get(name: string): U {\n if (!this._observers[name]) {\n this.set(name, null);\n }\n return (this._subjects[name] as BehaviorSubject).getValue();\n }\n\n /**\n * Listen to value change of the named property\n * @param name Property name\n * @param next Callback for value changes\n */\n public listen(name: string): Observable {\n if (!this._observers[name]) {\n this.set(name, null);\n }\n return this._observers[name];\n }\n\n /**\n * Update the value of the named property\n * @param name Property name\n * @param value New value\n */\n protected set(name: string, value: U): void {\n if (!this._subjects[name]) {\n this._subjects[name] = new BehaviorSubject(value);\n this._observers[name] = this._subjects[name].asObservable();\n } else {\n this._subjects[name].next(value);\n }\n }\n\n /**\n * Get list of loaded items\n * @param predicate Function for filtering the list\n */\n public filter(predicate: (a: T) => boolean = this._list_filter): T[] {\n const list: T[] = this.get('list');\n return list.filter(predicate);\n }\n\n /**\n * Get item with the given id from the loaded items\n * @param id ID of the item\n */\n public find(id: string): T {\n const list = this.get('list');\n return list.find((i) => i.id === id || (i.email?.toLowerCase() === id?.toLowerCase()));\n }\n\n /**\n * Query the index of the API route associated with this service\n * @param query_params Map of query paramaters to add to the request URL\n */\n public query(query_params: HashMap = {}, config: { url?: string } = {}): Promise {\n let engine = false;\n let cache = 1000;\n /* istanbul ignore else */\n if (query_params) {\n engine = !!query_params.engine;\n delete query_params.engine;\n cache = query_params.cache || 1000;\n delete query_params.cache;\n }\n const query = toQueryString(query_params);\n const key = `query|${query}`;\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const url = config && config.url ? `${config.url}${query ? '?' + query : ''}` : `${this.route(engine)}${query ? '?' + query : ''}`;\n let result: IEngineResponse;\n this.http.get(url).subscribe(\n (d: IEngineResponse | HashMap[]) => {\n if (d && d instanceof Array) {\n const results = d.map((i) => this.process(i));\n result = {\n results,\n total: results.length,\n }\n } else if (d && !(d instanceof Array) && d.results && d.total) {\n const results = d.results.map((i) => this.process(i));\n result = {\n results,\n total: d.total,\n }\n } else if (d && !(d instanceof Array) && d.results) {\n const results = d.results.map((i) => this.process(i));\n result = {\n results,\n total: results.length,\n }\n } else {\n result = {\n results: [],\n total: 0,\n }\n }\n },\n (e) => {\n reject(e);\n this._promises[key] = null;\n },\n () => {\n resolve(result);\n this.timeout(key, () => (this._promises[key] = null), cache);\n }\n );\n });\n }\n return this._promises[key];\n }\n\n /**\n * \n * @param query_params \n * @param config \n * @returns \n */\n queryHoldingBay(query_params: HashMap = {}, config: { url?: string } = {}):Observable {\n const query = toQueryString(query_params);\n const url = `${config.url}${query ? '?' + query : ''}`;\n return this.http.get(url).pipe(\n map((d: IEngineResponse | HashMap[]) => this.processApiResult(d) ),\n catchError((error: any, result?: T) => {\n console.log(error);\n return of(result as T);\n })\n );\n }\n\n /**\n * \n * @param d \n * @returns \n */\n processApiResult(d: IEngineResponse | HashMap[]): IEngineResponse{\n let result: IEngineResponse;\n if (d && d instanceof Array) {\n const results = d.map((i) => this.process(i));\n result = {\n results,\n total: results.length,\n }\n } else if (d && !(d instanceof Array) && d.results && d.total) {\n const results = d.results.map((i) => this.process(i));\n result = {\n results,\n total: d.total,\n }\n } else if (d && !(d instanceof Array) && d.results) {\n const results = d.results.map((i) => this.process(i));\n result = {\n results,\n total: results.length,\n }\n } else {\n result = {\n results: [],\n total: 0,\n }\n }\n return result;\n }\n \n\n /**\n * Query the API route for a sepecific item\n * @param id ID of the item\n * @param query_params Map of query paramaters to add to the request URL\n */\n public show(id: string, query_params: HashMap = {}): Promise {\n let engine = false;\n /* istanbul ignore else */\n if (query_params) {\n engine = !!query_params.engine;\n delete query_params.engine;\n }\n const query = toQueryString(query_params);\n const key = `show|${id}|${query}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const url = `${this.route(engine)}/${id}${query ? '?' + query : ''}`;\n let result: T = null;\n this.http.get(url).subscribe(\n (d) => {\n result = this.process(d); \n },\n (e) => {\n reject(e);\n this._promises.new_item = null;\n },\n () => {\n resolve(result);\n this.timeout(key, () => (this._promises[key] = null), 1000);\n }\n );\n });\n }\n return this._promises[key];\n }\n\n /**\n * Make post request for a new item to the service\n * @param form_data Data to post to the server\n * @param query_params Map of query paramaters to add to the request URL\n */\n public add(form_data: HashMap, query_params: HashMap = {}): Promise {\n /* istanbul ignore else */\n if (!this._promises.new_item) {\n this._promises.new_item = new Promise((resolve, reject) => {\n const query = toQueryString(query_params);\n const url = `${this.route(query_params.engine)}${query ? '?' + query : ''}`;\n let result: T = null;\n this.http.post(url, this.injectConcierge(form_data)).subscribe(\n (d) => (result = this.process(d)),\n (e) => {\n reject(e);\n this.analyticsEvent(`create-${this._name.toLowerCase()}-failed`);\n this._promises.new_item = null;\n },\n () => {\n resolve(result);\n this.set('list', this.updateList(this.get('list'), [result]));\n this.analyticsEvent(`create-${this._name.toLowerCase()}-success`);\n this._promises.new_item = null;\n }\n );\n });\n }\n return this._promises.new_item;\n }\n\n /**\n * Perform API task for the given item ID\n * @param id ID of the item\n * @param task_name Name of the task\n * @param form_data Map of data to pass to the API\n * @param method Verb to use for request\n */\n public task(\n id: string,\n task_name: string,\n form_data: HashMap = {},\n method: 'post' | 'get' = 'post'\n ): Promise {\n const query = toQueryString(this.injectConcierge(form_data));\n const key = `task|${id}|${task_name}|${query}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const post_data = { ...form_data, id, _task: task_name };\n const url = `${this.route(false)}/${id}/${task_name}`;\n let result: any;\n const request =\n method === 'post'\n ? this.http.post(url, post_data)\n : this.http.get(`${url}${query ? '?' + query : ''}`);\n request.subscribe(\n (d) => (result = d),\n (e) => {\n reject(e);\n this.analyticsEvent(\n `${this._name.toLowerCase()}-task-${task_name}-failed`,\n id\n );\n delete this._promises[key];\n },\n () => {\n resolve(result as U);\n this.analyticsEvent(\n `${this._name.toLowerCase()}-task-${task_name}-success`,\n id\n );\n this.timeout(key, () => delete this._promises[key], 1000);\n }\n );\n });\n }\n return this._promises[key];\n }\n\n\n /**\n * Make put request for changes to the item with the given id\n * @param id ID of the item being updated\n * @param form_data New values for the item\n * @param query_params Map of query paramaters to add to the request URL\n */\n public update(id: string, form_data: HashMap, query_params: HashMap = {}): Promise {\n const key = `update|${id}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const query = toQueryString(this.injectConcierge(query_params));\n const url = `${this.route(query_params.engine)}/${id}${query ? '?' + query : ''}`;\n let result: T = null;\n this.http.put(url, this.injectConcierge(form_data)).subscribe(\n (d) => (result = this.process(d)),\n (e) => {\n reject(e);\n this.analyticsEvent(`update-${this._name.toLowerCase()}-failed`, id);\n this._promises[key] = null;\n },\n () => {\n resolve(result);\n this.set(\n 'list',\n this.updateList(this.removeItem(this.get('list'), { id } as any), [\n result\n ])\n );\n this.analyticsEvent(`update-${this._name.toLowerCase()}-success`, id);\n this._promises[key] = null;\n }\n );\n });\n }\n return this._promises[key];\n }\n\n /**\n * Make delete request for the given item\n * @param id ID of item\n */\n public delete(id: string, q: HashMap = {}): Promise {\n const key = `delete|${id}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const query = toQueryString(q);\n const url = `${this.route()}/${id}${query ? '?' + query : ''}`;\n this.http.delete(url).subscribe(\n (_) => null,\n (e) => {\n reject(e);\n this._promises[key] = null;\n },\n () => {\n this.set('list', this.removeItem(this.get('list'), { id } as any));\n this._promises[key] = null;\n resolve();\n }\n );\n });\n }\n return this._promises[key];\n }\n\n /**\n * Load initial data for the service\n */\n protected async load(): Promise {\n }\n\n /**\n * Post analytics event for this service\n * @param action Name of the action to post\n */\n protected analyticsEvent(action: string, label?: string) {\n // if (this.parent && this.parent.Analytics) {\n // this.parent.Analytics.track(this._name, { desc: `${this.parent.name.toLowerCase()}-${action}`, label });\n // }\n }\n\n /**\n * Convert raw API data into a valid API Object\n * @param raw_item Raw API data\n */\n protected process(raw_item: HashMap): T {\n return raw_item as T;\n }\n\n /**\n * Update recorded list of items\n * @param old_list Old list of items\n * @param list List of updated items\n * @param compareFn Function to compare items to remove duplicates\n */\n public updateList(\n old_list: T[],\n list: T[],\n compareFn: (a: T, b: T) => boolean = this._compare\n ): T[] {\n /* istanbul ignore else */\n if (!list || list.length === 0) {\n return old_list;\n }\n const new_list: T[] = [];\n const mixed_list = [...list, ...old_list];\n /* istanbul ignore else */\n if (!compareFn) {\n compareFn = this._compare;\n }\n for (const item of mixed_list) {\n const found = new_list.find((i) => compareFn(i, item));\n /* istanbul ignore else */\n if (!found) {\n new_list.push(item);\n }\n }\n return new_list;\n }\n\n /**\n * Remove the given item from the given list\n * @param list List of items\n * @param item Item to remove\n * @param compareFn Function to compare items\n */\n protected removeItem(list: T[], item: T, compareFn?: (a: T, b: T) => boolean) {\n const new_list = [];\n /* istanbul ignore else */\n if (!compareFn) {\n compareFn = this._compare;\n }\n list.forEach((i) => (compareFn(item, i) ? null : new_list.push(i)));\n return new_list;\n }\n}\n","import { FormGroup } from \"@angular/forms\";\nimport { HashMap } from \"@mckinsey-converge/base\"\nimport { DateNow, DateTZ } from \"@mckinsey-converge/date-tz\"\n\nexport enum RecurrencePeriod {\n LIST = 'list',\n DAILY = 'daily',\n WEEKLY = 'weekly',\n //RELATIVE_MONTHLY = 'relativeMonthly', for the moment we will only support absoluteMonthly\n ABSOLUTE_MONTHLY = 'monthly'\n}\n\nexport enum DaysOfWeek {\n SUNDAY = 'sunday',\n MONDAY = 'monday',\n TUESDAY = 'tuesday',\n WEDNESDAY = 'wednesday',\n THURSDAY = 'thursday',\n FRIDAY = 'friday',\n SATURDAY = 'saturday'\n\n}\n\nexport enum SeriesAction {\n EDIT = 'edit',\n CLONE = 'clone'\n}\n\nexport enum BookingAction {\n CLONE = 'booking_clone',\n EDIT = 'booking_edit'\n}\n\nexport interface WeekDays {\n id: string;\n active: boolean;\n day_index: number;\n full_name: string;\n}\n\nexport interface RepeatPeriod {\n id: RecurrencePeriod;\n label: string\n}\n\nexport enum RepeatsOn {\n PATTERN = 'pattern',\n DATE = 'date'\n}\n\nexport interface RecurrenceType {\n type: RepeatsOn;\n label: string;\n}\n\nexport interface RecurrenceDetails {\n period: RecurrencePeriod,\n end: DateTZ,\n list: Array\n interval: number\n}\n\nexport interface RecurrenceRecurringDetails extends RecurrenceDetails {\n start: number\n}\n\nexport const recurrencePeriodToDurationType = (period: RecurrencePeriod) =>{\n switch (period) {\n case RecurrencePeriod.DAILY:\n return 'days'\n case RecurrencePeriod.WEEKLY:\n return 'weeks' \n case RecurrencePeriod.ABSOLUTE_MONTHLY:\n return 'months' \n default:\n return 'days'\n }\n}\n\n/**\n * Generate weekdays from monday to saturday\n */\nexport const generateWeekDays = (date: number, params: { building_tz?: string } = {}): Array=> {\n const { building_tz } = params;\n let start_week = DateNow(new Date()).startOfValue('week').addValue({days : 1}); //set monday as start of week\n const week_days: Array = []\n for (let i = 1; i <= 7; i++) {\n const activeDate = new DateTZ({date, building_tz, is_local_tz: false })\n const active = activeDate.dateWeekday === i\n const full_name = start_week.formatDate('EEEE')\n const day_index = i === 7 ? 0 : i //Sunday must be indexed as day 0\n week_days.push({id: full_name.substring(0, 1), active, day_index, full_name: full_name.toLocaleLowerCase()});\n start_week = start_week.addValue({ days : 1 });\n }\n return week_days\n}\n\nexport const getFirstDateFromList = (list: Array) => {\n return list.reduce((a, b) => { return a.isBeforeDate(b) ? a : b; });\n}\n\nexport const getLastDateFromList = (list: Array) => {\n return list.reduce((a, b) => { return a.isAfterDate(b) ? a : b; });\n}\n\nexport const recurrenceDetails = (recurr: RecurrenceDetails): string => {\n const end = getLastDateFromList(recurr.list).formatDate('ccc dd MMM yyyy')\n const getPeriod = (period: string) => {\n if(recurr.interval === 1){\n return `Occurs Every ${period} until ${end}`\n }else{\n return `Occurs Every ${recurr.interval} ${period}s until ${end}`\n }\n } \n \n switch (recurr.period) {\n case RecurrencePeriod.DAILY:\n return getPeriod('Day')\n case RecurrencePeriod.WEEKLY:\n return getPeriod('Week')\n case RecurrencePeriod.ABSOLUTE_MONTHLY:\n return getPeriod('Month')\n case RecurrencePeriod.LIST:\n return `Occurs on Specific Dates until ${getLastDateFromList(recurr.list).formatDate('ccc dd MMM yyyy')}`\n default:\n return ''\n }\n}\n\nexport const recurrenceRecurringDetails = (recurr: RecurrenceRecurringDetails): string => {\n const end = recurr.end\n const start = new DateTZ({ date: recurr.start })\n\n const getPeriod = (period: string) => {\n if(recurr.interval === 1){\n return `occurs every ${period} effective ${start.formatDate('dd MMM yyyy')} until ${end.formatDate('dd MMM yyyy')}`\n }else{\n return `occurs every ${recurr.interval} ${period}s effective ${start.formatDate('dd MMM yyyy')} until ${end.formatDate('dd MMM yyyy')}`\n }\n }\n\n switch (recurr.period) {\n case RecurrencePeriod.DAILY:\n return getPeriod('Day')\n case RecurrencePeriod.WEEKLY:\n return getPeriod('Week')\n case RecurrencePeriod.ABSOLUTE_MONTHLY:\n return getPeriod('Month')\n case RecurrencePeriod.LIST:\n return `occurs on Specific Dates`\n default:\n return ''\n }\n}\n\nexport const handleRecurrenceFields = (data: HashMap) => {\n if(data.is_recurrent){\n if(data.recurrence_period !== RecurrencePeriod.LIST){\n delete data.recurrence_starts\n delete data.recurrence_endTz\n if(data.recurrence_period !== RecurrencePeriod.WEEKLY){\n delete data.recurrence_days\n }\n } else if(data.recurrence_period){\n data.recurrence_list = [...(data.recurrence_starts || []).map((date: DateTZ) => date.startOfValue('minute').seconds)]\n delete data.recurrence_interval;\n delete data.recurrence_endTz;\n delete data.recurrence_count;\n delete data.recurrence_starts\n delete data.recurrence_days\n }\n delete data.is_recurrent\n }else{\n delete data.recurrence_period;\n delete data.recurrence_interval;\n delete data.recurrence_endTz;\n delete data.recurrence_count;\n delete data.recurrence_starts\n delete data.is_recurrent\n delete data.recurrence_exceptions\n delete data.recurrence_days\n }\n\n return data\n}\n\n/** Removes expired occurrences and updates start and end dates when cloning a series */\nexport const removeExpiredOcurrences = (form: FormGroup) =>{\n if(form.controls.action?.value === SeriesAction.CLONE ){\n const tz = form.controls.space_list.value[0].timezone\n const date_now = new DateTZ({ is_local_tz: false, building_tz: tz });\n const occurrences = form.controls.recurrence_starts.value.filter((date: DateTZ) =>\n date_now.isBeforeDate(date, 'day') || date_now.isSameDate(date, 'day')\n )\n form.controls.recurrence_starts.setValue(occurrences)\n const { start, end } = setStartAndEndDateFromArray(occurrences, tz)\n form.controls.dateTz.setValue(start)\n form.controls.recurrence_endTz.setValue(end)\n }\n}\n\n/** \n * Returns starts and end dates from an array of dates in milliseconds \n **/\n export const setStartAndEndDateFromArray = (dates: Array, tz: string): {start: DateTZ, end: DateTZ} =>{\n if(dates.length !== 0){\n return {\n start: dates.sort((d1, d2) => d1.ms - d2.ms)[0] ,\n end: dates.sort((d1, d2) => d2.ms - d1.ms)[0]\n }\n }\n //if the dates array is empty set the start and end dates as the current and next day\n const now = DateNow(new Date()).toZone(tz)\n return {start: now, end: now.addValue({days: 1})}\n}\n\nexport const setRecurrenceStartsTime = (form: FormGroup) => {\n const { recurrence_starts, dateTz } = form.value\n const list = (recurrence_starts || []).map((date: DateTZ) => date.setValue({hour: dateTz.dateHour, minute: dateTz.minutes}))\n form.controls.recurrence_starts.setValue(list)\n}","export * from './report.class'\nexport * from './reports.service'\n","import { CurrencyPipe } from '@angular/common';\n\nimport {\n csvToJson,\n downloadFile,\n HashMap,\n humaniseDuration,\n jsonToCsv,\n} from '@mckinsey-converge/base';\n\nimport { ServiceManager } from '../service-manager.class';\nimport { Space } from '../spaces';\nimport { Organisation } from '../organisation';\n\nexport class Report {\n /** Type of report */\n public readonly type: string;\n /** List of data associated with the report */\n public readonly data: T[];\n\n constructor(raw_data: HashMap = {}) {\n this.type = raw_data.type || '';\n this.data = this.cleanData(raw_data.data);\n }\n\n /** Create report data structure from CSV */\n public static fromCSV(type: string, data: string): Report {\n const csv_json = csvToJson(data);\n return new Report({ type, data: csv_json });\n }\n\n /** Download report data as CSV format */\n public downloadCSV(name: string = 'unnamed.csv'): void {\n downloadFile(name, jsonToCsv(this.data));\n }\n\n /** Download report data as JSON format */\n public downloadJSON(name: string = 'unnamed.json'): void {\n downloadFile(name, JSON.stringify(this.data, undefined, 4));\n }\n\n public formatCancelledBy(email: string) {\n if (email !== null && email !== undefined) {\n let name = email.split('@')[0];\n name = name.split('_').join(' '); //get name from email and convert it to title case\n name = name.replace(/\\w\\S*/g, function (txt) {\n return `${txt\n .charAt(0)\n .toUpperCase()}${txt.substr(1).toLowerCase()}`;\n });\n return name;\n } else {\n return email;\n }\n }\n\n public timeConverter( UNIX_timestamp: number ){\n if(!UNIX_timestamp) return '';\n let a = new Date(UNIX_timestamp * 1000);\n let months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];\n let year = a.getFullYear();\n let month = months[a.getMonth()];\n let date = a.getDate();\n let hour = ((a.getHours() + 11) % 12 + 1);\n let suffix = a.getHours() >= 12 ? \"PM\":\"AM\";\n let min = a.getMinutes() === 0 ? '00':a.getMinutes();\n let time = date + ' ' + month + ' ' + year + ' - ' + hour + ':' + min + ' ' + suffix;\n return time;\n }\n\n private cleanData(data: T[] = []) {\n if (data.length > 0 && this.type === 'day') {\n for (let i = 0; i < data.length; i++) {\n data[i]['booker'] = data[i]['booker'].name;\n data[i]['expected_attendees'] = Object.values(data[i]['expected_attendees'])[0];\n }\n } else if (data.length > 0 && this.type === 'audit') {\n for (let i = 0; i < data.length; i++) {\n data[i]['created_at'] = this.timeConverter(data[i]['created_at']);\n }\n } else if (data.length > 0 && this.type === 'catering') {\n for (let i = 0; i < data.length; i++) {\n data[i]['Cancelled By'] = this.formatCancelledBy(\n data[i]['Cancelled By']\n );\n }\n const fields = Object.keys(data[0]);\n const room_field = fields.find(\n (key) =>\n key.toLowerCase().includes('room') &&\n key.toLowerCase().includes('email')\n );\n const price_field = fields.find((key) =>\n key.toLowerCase().includes('price')\n );\n\n for (let row of data) {\n /* istanbul ignore else */\n const space_service = ServiceManager.serviceFor(Space);\n if (room_field && price_field && space_service) {\n const room = space_service.find(\n row[room_field].toLowerCase()\n );\n const org_service = ServiceManager.serviceFor(Organisation);\n const bld = org_service.buildings.find(\n (bld: { id: any }) =>\n bld.id === room?.level?.building_id\n );\n row[price_field] = new CurrencyPipe('en_us').transform(\n row[price_field] / 100,\n bld?.currency\n );\n }\n /* istanbul ignore else */\n for (let field of fields) {\n row[field] =\n typeof row[field] === 'string'\n ? row[field].replace(/\\,/g, '٫')\n : row[field];\n }\n }\n } else if (this.type === 'bookings') {\n data = data.map((i: HashMap) => {\n const booking = i;\n try {\n if (booking.setup instanceof Object) {\n booking.setup = booking.setup[booking.room_email];\n }\n if (booking.breakdown instanceof Object) {\n booking.breakdown =\n booking.breakdown[booking.room_email];\n }\n booking.setup = humaniseDuration((booking.setup || 0) / 60);\n booking.breakdown = humaniseDuration(\n (booking.breakdown || 0) / 60\n );\n booking.description = (booking.description || '')\n .replace(/<[^>]*>?/gm, '')\n .replace(/\\,/g, '٫')\n .replace(/\\r?\\n|\\r/g, ' ');\n booking['Meeting Host'] =\n booking.organizer?.name || booking.organizer;\n booking['Booked By'] =\n booking.booked_by?.name ||\n booking.booked_by?.email ||\n '';\n booking.charge_code =\n booking.equipment_codes[booking.room_email] || '';\n // booking.expected_attendees = Object.keys(booking.expected_attendees).map(key => booking.expected_attendees[key]).join(', ');\n booking.attendees = (booking.attendees || [])\n .map((person) => person.name || person.email || person)\n .join('٫ ');\n booking.notes = (booking.notes || [])\n .map((note) =>\n note.author &&\n (note.type === 'description' ||\n note.type === 'private')\n ? `[${note.author}|${note.type}]${note.message\n .replace(/<[^>]*>?/gm, '')\n .replace(/\\,/g, '٫')\n .replace(/\\r?\\n|\\r/g, ' ')}`\n : ''\n )\n .join(' | ');\n booking.cancelled = booking.isCancelled;\n booking.status = booking.status[booking.room_email] || '';\n booking.company = booking.company.join(', ');\n if (booking.cancelled_by) {\n booking.cancelled_by = this.formatCancelledBy(\n booking.cancelled_by\n );\n }\n booking.cancelled_date = this.timeConverter(booking.cancelled_at_epoch);\n\n } catch (e) {}\n const remove_fields = [\n 'id',\n 'icaluid',\n 'accepted_at',\n 'accepted_by',\n 'check_ins',\n 'changeKey',\n 'created',\n 'booking_type',\n 'edit_history',\n 'end_epoch',\n 'old_attendees',\n 'start_epoch',\n 'expected_attendees',\n 'isAllDay',\n 'isCancelled',\n 'body',\n 'is_free',\n 'lastModifiedDateTime',\n 'locationType',\n 'locations',\n 'organizer',\n 'booked_by',\n 'originalEndTimeZone',\n 'originalStartTimeZone',\n 'room_booking_status',\n 'room_email',\n 'room_emails',\n 'room_id',\n 'sensitivity',\n 'seriesMasterId',\n 'show_as',\n 'notes',\n 'subject',\n 'type',\n 'previous_booking',\n 'catering',\n 'responseStatus',\n 'equipment_codes',\n 'cancelled_at_epoch',\n ];\n for (const field of remove_fields) {\n if (booking[field] !== undefined) {\n delete booking[field];\n }\n }\n const output = {};\n const order = [\n 'title',\n 'start',\n 'end',\n 'location',\n 'Meeting Host',\n 'Booked By',\n 'booked_at',\n 'booked_ahead_by',\n 'all_day',\n 'attendees',\n 'company',\n 'description',\n 'cancelled',\n 'cancelled_by',\n 'cancelled_date',\n ];\n const keys = Object.keys(booking);\n keys.sort((a, b) => {\n const idx_a = order.indexOf(a);\n const idx_b = order.indexOf(b);\n return (\n (idx_a === -1 ? keys.length : idx_a) -\n (idx_b === -1 ? keys.length : idx_b)\n );\n });\n for (const key of keys) {\n output[key] = booking[key];\n }\n return output;\n }) as any;\n }\n return data;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ComposerService } from '@placeos/composer';\n\nimport { Report } from './report.class';\nimport { BaseAPIService } from '../base.service';\nimport { SettingsService } from '../settings.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ReportsService extends BaseAPIService {\n constructor(protected _composer: ComposerService,\n settingsService: SettingsService) {\n super(_composer, settingsService);\n this._name = 'Reports';\n this._api_route = 'reports';\n }\n\n protected process(raw_data: any): Report {\n return raw_data instanceof Array\n ? new Report({ data: raw_data })\n : Report.fromCSV('', raw_data);\n }\n}\n","import { Type } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { HashMap } from '@mckinsey-converge/base';\n\n\nexport interface ServiceLike extends HashMap {\n parent: any;\n add: (_: HashMap) => Promise;\n update: (id: string, _: HashMap) => Promise;\n delete: (id: string, params?: HashMap) => Promise;\n task: (id: string, name: string, data: HashMap) => Promise;\n listen: (prop: string) => Observable;\n}\n\nexport interface ServiceProvider {\n provideFor: Type;\n useValue: T;\n}\n\nexport class ServiceManager {\n /** Map of available services for child classes */\n private static _service_list: ServiceProvider[] = [];\n\n /** Set the services used to handle data model requests */\n public static setService(type: Type, service: any): void {\n if (window.debug) {\n (window as any).ServiceManager = this._service_list;\n }\n const index = ServiceManager._service_list.findIndex(provider => provider.provideFor === type);\n if (index >= 0) {\n ServiceManager._service_list.splice(index, 1, { provideFor: type, useValue: service });\n } else {\n ServiceManager._service_list.push({ provideFor: type, useValue: service });\n }\n }\n\n /** Get the services used to handle data model requests */\n public static serviceFor(type: Type): ServiceLike {\n const provider = ServiceManager._service_list.find(provider => provider.provideFor === type) || { useValue: null };\n return provider.useValue;\n }\n\n constructor() {\n throw new Error('ServiceMananger is static class');\n }\n}\n","import {\n Inject,\n Injectable\n} from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport {\n BehaviorSubject,\n Observable\n} from 'rxjs';\n\nimport { VERSION } from '@mckinsey-converge/environment';\nimport {\n BaseClass,\n getItemWithKeys,\n HashMap,\n log\n} from '@mckinsey-converge/base';\nimport { ServiceManager } from './service-manager.class';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\ndeclare global {\n interface Window {\n debug: boolean;\n }\n}\n\nexport const SETTINGS_TOKEN = 'settings_service_data';\n\ntype SettingsAppData = T & {\n title: string;\n description: string;\n short_name: string;\n logo_light: {\n type: string;\n src: string;\n background: string;\n }\n logo_dark: {\n type: string;\n src: string;\n background: string;\n }\n heap_io: {\n app_id: number;\n force_ssl: boolean;\n secure_cookie: boolean;\n disable_text_capture: boolean;\n cookie_path: string;\n }\n}\n\nexport interface SettingsData {\n debug: boolean;\n mock: boolean;\n frontend: 'staff' | 'concierge' | 'booking';\n composer: {\n domain: string;\n route: string;\n protocol: string;\n port: string;\n use_domain: boolean;\n local_login: boolean;\n }\n app: SettingsAppData;\n}\n\nexport class SettingsObject {\n constructor(public data: SettingsData) {\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SettingsService extends BaseClass {\n /** Name of the application */\n private _app_name = 'Converge';\n /** List of override settings in order of priority */\n private _overrides = new BehaviorSubject([]);\n /** Mapping of behaviour subjects */\n private _subjects: HashMap> = {};\n /** Mapping of observables */\n private _observables: HashMap> = {};\n /** Which frontend we're in. staff, concierge, or bookings **/\n public readonly frontend: string;\n private _bypass_bookings: boolean = false;\n\n /**\n * @hidden\n */\n public set overrides(value: HashMap[]) {\n this._overrides.next(value);\n }\n\n /** Get observable for key */\n public listen(name: string): Observable {\n if (!this._observables[name]) {\n this._subjects[name] = new BehaviorSubject(null);\n this._observables[name] = this._subjects[name].asObservable();\n }\n return this._observables[name];\n }\n\n /** Update observable value for key */\n public post(name: string, value: T): void {\n if (!this._observables[name]) {\n this._subjects[name] = new BehaviorSubject(null);\n this._observables[name] = this._subjects[name].asObservable();\n }\n this._subjects[name].next(value);\n }\n\n public value(name: string): T {\n return !this._observables[name] ? null : this._subjects[name].getValue();\n }\n\n /** Page title */\n public get title() {\n return this._title.getTitle();\n }\n\n public set title(value: string) {\n this._title.setTitle(`${value} | ${this._app_name}`);\n }\n\n constructor(private _title: Title,\n @Inject(SETTINGS_TOKEN)\n private settings: SettingsObject) {\n super();\n ServiceManager.setService(SettingsService, this);\n const time = new DateTZ({date: VERSION.time});\n const built = DateNow(new Date()).isSameDate(time, 'day')\n ? `Today at ${time.formatDate('h:mma')}`\n : time.formatDate('do MMM yyyy, h:mma');\n const frontend = this.get('frontend') || 'Unknown';\n this.frontend = frontend;\n log('CORE', `${VERSION.semver}`, null, 'debug', true, frontend?.toUpperCase());\n log('APP', `${VERSION.hash} | Built: ${built}`, null, 'debug', true, frontend?.toUpperCase());\n this.init();\n }\n\n /**\n * Initialise the settings\n */\n public async init() {\n if (this.get('debug')) {\n window.debug = true;\n }\n if (this.get('app')?.name) {\n this._app_name = this.get('app').name;\n }\n log('Settings', 'Successfully loaded settings');\n this._initialised.next(true);\n }\n\n /** Whether settings service has initialised */\n public get app_name() {\n return this._app_name;\n }\n\n public get concierge() {\n return this.frontend === 'concierge';\n }\n\n public set bypass_bookings(value: boolean) {\n this._bypass_bookings = value;\n }\n\n public get bypass_bookings() {\n return this._bypass_bookings;\n }\n\n /**\n * Get a setting\n * @param key Name of the setting. i.e. nested items can be grabbed using `.` to seperate key names\n */\n public get(key: string): any {\n const keys = key.split('.');\n if (keys[0] !== 'app') {\n return getItemWithKeys(keys, this.settings.data);\n }\n const override_settings = this._overrides.getValue();\n for (const override of override_settings) {\n const value = getItemWithKeys(keys.slice(1), override);\n if (value != null) {\n return value;\n }\n }\n return getItemWithKeys(keys, this.settings.data);\n }\n}\n","export * from './space.class';\nexport * from './spaces.service';\nexport * from './space.utilities';\n","import { BaseDataClass } from '../base-api.class';\nimport {\n HashMap,\n} from '@mckinsey-converge/base';\nimport {\n Building,\n BuildingLevel,\n Organisation\n} from '../organisation';\nimport { User } from '../users';\nimport { ServiceManager } from '../service-manager.class';\nimport { SettingsService } from '../settings.service';\nimport { SpaceRules } from '../bookings/booking.types';\nimport { rulesForSpace } from '../bookings/space.utilities';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\nimport { DaysOfWeek, RecurrencePeriod } from '../recurrence/recurrence.utils';\nimport { DateTime } from 'luxon';\n\nexport interface ISpaceAvailabilityOptions {\n /** Start date and time of the availability block */\n dateTz?: DateTZ;\n /** Length of the availability block */\n duration: number;\n /** */\n id?: string;\n /** List of spaces to look at the availability for */\n room_ids?: string;\n /** Whether the spaces looked at should be bookable */\n bookable?: boolean;\n /** List of spaces or zones to ignore */\n ignore?: string;\n /** List of zones to look at the availability for */\n zone_ids?: string | string[];\n /** Whether space bookings should not be returned */\n hide_bookings?: boolean;\n /** Min capacity on the room **/\n capacity?: number\n clear?: boolean;\n /** Length of the setup */\n setup?: number;\n /** Length of the breakdown */\n breakdown?: number;\n /** Hide declined bookings */\n hide_declined?: boolean;\n /** Max capacity on the room **/\n capacity_max?: number\n\n diff_capacity?: boolean\n\n /** Fields to include recurrence in the availability search */\n recurrence_period?: RecurrencePeriod;\n recurrence_interval?: number;\n recurrence_endTz?: DateTZ;\n recurrence_count?: number;\n recurrence_starts?: Array\n is_recurrent?: boolean\n is_multiroom?: boolean\n merged?: boolean\n recurrence_days?: Array\n}\n\nexport interface SpaceBookingRuleOptions {\n dateTz: DateTZ;\n duration: number;\n host: User;\n}\n\nexport const OPTION_DEFAULTS: ISpaceAvailabilityOptions = {\n duration: 60\n};\n\nexport interface RecurrenceAvailability {\n /** Unix epoch in seconds */\n readonly date: number;\n /** Whetehr space is available at this time */\n readonly available: boolean;\n}\n\n/**\n * Room Settings Type\n *\n * Exmaple:\n * available: true\n * available_until: 1644344999\n * bookings: []\n * catering: false\n * charge_code: false\n * extra_features: \"meeting_room boardroom\"\n * internal_or_external: \"internal\"\n * map_id: \"08.8.15\"\n * natural_light: false\n * room_booking_screen: true\n * room_name: \"8.15 Meeting\"\n * vc: false\n * recurrence_availability: {\n * date: \"1642596300\",\n * available: false,\n * }\n */\nexport interface RoomSettings {\n // Local room name is required.\n room_name?: string\n // TBD if anything else should be required\n available?: boolean\n available_until?: number\n bookings?: HashMap[]\n catering?: boolean\n charge_code?: boolean\n extra_features?: string\n internal_or_external?: string\n map_id?: string\n natural_light?: boolean\n room_booking_screen?: boolean\n vc?: boolean\n recurrence_availability?: RecurrenceAvailability[]\n equipment_code?: boolean\n external?: boolean\n}\n\n/**\n * List of space features that come from settings.\n *\n * Im sure this list will grow. It is not the most comprehensive list.\n */\nexport enum SpaceFeatures {\n BoardRoom = 'boardroom',\n Catering = 'catering',\n CocktailRoom = 'cocktail',\n ConferencePhone = 'conference_phone',\n ConferenceRoom = 'conference',\n ElectronicWhiteboard = 'whiteboard',\n FlipChart = 'flipchart',\n Glassboard = 'glassboard',\n PartnerOffice = 'partner',\n PhoneBooth = 'phone_booth',\n TheatreRoom = 'theatre',\n TeamRoom = 'team_room',\n VideoConference = 'vc',\n NaturalLight = 'natural_light',\n WirelessContentSharing = 'wireless_content_sharing',\n WorkshopRoom = 'workshop',\n UShapeRoom = 'u_shape',\n Miscellaneous = 'miscellaneous'\n}\n\nexport enum SpaceEquipments {\n conference_phone,\n whiteboard,\n vc,\n flipchart,\n glassboard,\n wireless_content_sharing\n}\nexport enum SpaceStyles {\n boardroom,\n cocktail,\n conference,\n partner,\n theatre,\n team_room,\n // natural_light,\n workshop,\n u_shape,\n miscellaneous\n}\n\nconst EMPTY_ARRAY = [];\n\nexport class Space extends BaseDataClass {\n /** Whether space can be booked by users */\n public readonly bookable: boolean;\n /** People capacity of the space */\n public readonly capacity: number;\n /** Index to force order when sorting multiple spaces */\n public readonly sort_priority: number;\n /** Settings has extensive info displayed in the app. */\n public readonly settings: RoomSettings;\n /** URL for the control interface of the space */\n public readonly support_url: string;\n /** Engine zones associated with the space */\n public readonly zones: readonly string[];\n /** Is the Application concierge */\n public is_concierge: boolean = false;\n /** To allow bookings with rooms for staff calendar view only */\n public allowStaffRoomWithBookings: boolean = false;\n\n /** Simple name == local name being using in seeting.room_name\n\t\t *\n\t\t*/\n public simple_name: string;\n\n /** Room style set of all room style one room has\n * [\"boardroom\", \"cocktail\", \"miscellaneous\", \"natural_light\", \"theatre\", \"u-shape\", \"workshop\"] */\n public room_style: string[] = [];\n\n /** Equipment set of all room equipment one room has\n * [\"conference_phone\", \"whiteboard\", \"vc\", \"flipchart\", \"glassboard\", \"whiteboard\", \"wireless_content_sharing\"] */\n public equipment: string[] = [];\n\n /** Filters has charge code settings for booking and catering */\n public filters: RoomSettings;\n\n /** room_type subset of internal or external rooms */\n public room_type: string[] | string;\n /**\n * Features used in identifying room types.\n *\n * Both features and extra_features are space delimited strings.\n *\n * There is a getter featuresArray that returns the\n * combination of the two as an array.\n */\n public readonly features: string;\n public readonly extra_features: string;\n public map_id: string;\n\n\n /** Service for managing spaces */\n protected get _service() {\n return ServiceManager.serviceFor(Building);\n }\n\n /** Return the rooms' building */\n public get building() {\n return this._service?.buildings.find((bld) => {\n return this.zones.includes(bld.id);\n });\n }\n\n /** Return building timezone */\n public get timezone() {\n return this.building?.timezone;\n }\n\n constructor(raw_data: HashMap = {}) {\n super(raw_data);\n\n // Needed to check if the current app is Concierge or Staff\n const settingsService = ServiceManager.serviceFor(SettingsService) as unknown as SettingsService;\n this.is_concierge = !!settingsService?.concierge;\n this.allowStaffRoomWithBookings = settingsService?.bypass_bookings || false;\n\n const defaultGlobalName = raw_data.name || raw_data.email || 'Meeting Room';\n const defaultSettings = {\n room_name: defaultGlobalName\n }\n /**\n * Duplicate of base-api.class just for readability\n * .name is the full, mckinsey standardised name of the room.\n * You can think of it was what people would call the room when\n * considering every office and room globally.\n *\n * this.name = raw_data.name;\n */\n /**\n * Settings has extensive info displayed in the app.\n * setting.room_name is always used when displaying the room name in the applications\n * setting.room_name is the more office-specific room name, you can think of this as\n * the one people in that office would refer to the room as.\n *\n */\n this.settings = raw_data.settings || defaultSettings;\n this.filters = raw_data?.filters;\n // Room fields\n this.bookable = raw_data.bookable || false;\n this.capacity = raw_data.capacity || 0;\n this.support_url = raw_data.support_url;\n this.zones = raw_data.zones instanceof Array ? raw_data.zones : [];\n // Feature fields\n this.features = raw_data.features || '';\n this.extra_features = raw_data.settings?.extra_features || '';\n\n\t\tthis.room_type = raw_data?.room_type;\n this.simple_name = raw_data?.simple_name;\n this.map_id = raw_data?.map_id || raw_data.settings?.map_id || '';\n this.room_style = raw_data?.room_style || [];\n this.equipment = raw_data?.equipment || [];\n\n }\n\n /**\n * Return the global room name\n * IE LDN-4-408-06\n */\n public get global_name(): string {\n return this.name || ''\n }\n\n /**\n * Return the local room name\n * i.e. 4.08\n * TO DO: ROOM-DATA-STRUCTURE-REFACTOR - stop using/remove seetings.room_name\n */\n public get local_name(): string {\n return this.simple_name || this.name || ''; // this.settings?.room_name\n }\n\n public get street_and_city(): string {\n return this.building ? `${this.building.address}, ${this.building.city}` : '';\n }\n\n /**\n * Return the map_id from settings\n * TO DO: ROOM-DATA-STRUCTURE-REFACTOR - stop using/remove seetings.map_id and use map_id from space modal( after testing over prod)\n */\n // public get map_id(): string {\n // return this?.map_id || this.settings?.map_id || '';\n // }\n\n /** Internal / External status */\n public get internal_or_external(): string {\n const external = this.filters?.external;\n return external ? 'external' : 'internal'; // ( external ? 'external' : this.settings?.internal_or_external ) || 'internal';\n }\n\n /**\n * Works in conjunction with available_until.\n *\n * If a room is bookable that only means you can make a booking but not when.\n * Available indicates that it is available to be booked durring the queried times.\n */\n public get available(): boolean {\n return this.settings?.available ?? false;\n }\n\n public get currently_in_use(): boolean {\n const nowMs = new DateTZ({ date: DateTime.now(), is_local_tz: false, building_tz: this.timezone }).ms;\n const runningBookings = this.settings?.bookings?.filter( bks => {\n const startEpoch = new DateTZ({ date: bks.start_epoch * 1000, is_local_tz: false, building_tz: bks.timezone}).ms;\n const endEpoch = new DateTZ({ date: bks.end_epoch * 1000, is_local_tz: false, building_tz: bks.timezone}).ms;\n return startEpoch <= nowMs && endEpoch >= nowMs;\n })\n // console.log(raw_data.settings.room_name+' : '+ nowMs.ms);\n // console.log('IS IN USER CURRENTLY : ', isinUsernow);\n return !!runningBookings.length;\n }\n\n /** Last returned availability time */\n public get available_until(): number {\n return this.settings?.available_until;\n }\n\n /** Bookings associated with the space */\n public get bookings(): HashMap[] {\n // We should need to care if a room as bookings in Staff\n if (!this.is_concierge && !this.allowStaffRoomWithBookings) {\n return EMPTY_ARRAY;\n }\n\n if (this.settings?.bookings?.length) {\n /**\n * When we're dealing with Concierge the API data arriving is rooms, and those rooms contain booking,\n * but those bookings don't contain a room since the room is the root.\n * In order for Concierge to filter bookings by room we need to reattach this room\n * to each of the bookings, with it's own bookings.\n *\n * It's loopy and kooky but correcting for this pattern is beyond the scope of this refactor.\n */\n const spaceWithBookings = new Space(this.toJSON());\n return this.settings?.bookings.map(b => {\n b.room = spaceWithBookings;\n return b;\n });\n }\n return EMPTY_ARRAY;\n }\n\n /**\n\t\t * Whether space has catering\n * TO DO: ROOM-DATA-STRUCTURE-REFACTOR - stop using/remove seetings.catering and use filters?.catering instead\n\t\t */\n public get has_catering(): boolean {\n return this.filters?.catering || this.settings?.catering || false;\n }\n\n /** Returns an array of the space delimited feature and extra_feature strings.\n * TO DO: ROOM-DATA-STRUCTURE-REFACTOR - stop using/remove features, extra_features\n */\n public get featuresArray(): (SpaceFeatures | string)[] {\n // (this.simple_name === \"Entresol M-06\" ) && console.log('raw_data : ', this)\n const roomType = Array.isArray(this.room_type) ? this.room_type : [this.room_type]\n const features = [\n ...this.features.split(' '),\n ...this.extra_features?.split(' '),\n\n ...roomType, // required to work with staff>result>filters\n ...this?.room_style,\n ...this?.equipment,\n\n (this.filters?.natural_light) && SpaceFeatures.NaturalLight || undefined, // || this.settings?.natural_light\n // this.settings?.natural_light && SpaceFeatures.NaturalLight || undefined,\n // this.settings?.vc && SpaceFeatures.VideoConference || undefined,\n ].filter(f => !!f).map(f => f.toLowerCase());\n //will be an array... new Set() turns it into a set, but [... ] turns it back into an array again\n return [ ...new Set(features) ];\n }\n\n /** Level in which the space is associated */\n public get level(): BuildingLevel {\n const service = ServiceManager.serviceFor(Organisation);\n return (service ? service.levelWithID(this.zones as any) : null) || new BuildingLevel({});\n }\n\n /**\n * Return the new recurrence_availability from settings\n */\n public get recurrence_availability(): RecurrenceAvailability[] {\n return this.settings?.recurrence_availability || [];\n }\n\n public get availableOccurrences(): number {\n if(this?.recurrence_availability) {\n return this?.recurrence_availability?.filter(recurr => recurr.available).length;\n }\n }\n\n public get totalOccurrences(): number {\n return this?.recurrence_availability.length;\n }\n\n /**\n * Make a copy of this object\n */\n public clone(): Space {\n return new Space(this);\n }\n\n /**\n * Make a copy of this object without identification data\n */\n public duplicate(): Space {\n const space = { ...this };\n space.settings.bookings = []; // clear out bookings\n return new Space({ ...space, id: null, email: null });\n }\n\n /**\n * Generate the booking rules for space with given options\n * @param options Conditions for generating the space rules\n */\n public rulesFor(options: SpaceBookingRuleOptions): SpaceRules {\n if (!this._service || !this.level) {\n return { auto_approve: true, hide: false };\n }\n\n const building = this.is_concierge ? this.level.building_id : this.building\n\n if (!building) {\n return { auto_approve: true, hide: false };\n }\n const { dateTz, duration, host } = options;\n const rules: SpaceRules = rulesForSpace({\n time: dateTz.ms,\n duration,\n space: this,\n user: host,\n rules: building.booking_rules\n });\n return rules;\n }\n\n /**\n * Whether space can only be booked by request\n * @param options Conditions for checking the space rules\n */\n public byRequest(options: SpaceBookingRuleOptions) {\n const rules = this.rulesFor(options);\n return !rules.auto_approve;\n }\n\n /**\n * Convert object into plain object\n */\n public toJSON(this: Space): HashMap {\n return { ...super.toJSON(), settings: { ...this.settings, bookings: [] }, filters: { ...this.filters }, equipment: [ ...this.equipment] };\n }\n}\n","import { HashMap } from '@mckinsey-converge/base';\nimport {\n ISpaceAvailabilityOptions,\n Space\n} from './space.class';\nimport { Building } from '../organisation/building.class';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\nimport { handleRecurrenceFields, RecurrencePeriod } from '../recurrence/recurrence.utils';\n\nexport function availabilityOptionsToQuery(options: ISpaceAvailabilityOptions): HashMap {\n let query: HashMap = {};\n if (options) {\n query = { ...options };\n if (options.dateTz) {\n const date = options.dateTz.startOfValue('minute');\n query.available_from = date.seconds; // Add one second or API will not allow end to end booking\n query.available_to = date.addValue({ minutes: options.duration || 60 }).subtractValue({ seconds: 1 }).seconds;\n\n if (options.setup) query.setup = options.setup ;\n if (options.breakdown) query.breakdown = options.breakdown;\n \n delete query.dateTz;\n delete query.duration;\n }\n\n if (!options.capacity_max) delete query.capacity_max\n\n if (options.hide_declined) query.hide_declined = options.hide_declined;\n query = handleRecurrenceFields(query)\n }\n return query;\n}\n\n/**\n * Compare two spaces to determine order\n * @param first\n * @param second\n */\nexport function sort(first: Space, second: Space, blds: Building[] = []) {\n const bld = blds.find(bld => first.zones.includes(bld.id));\n const bld_b = blds.find(bld => second.zones.includes(bld.id));\n if (bld) {\n if (bld !== bld_b) {\n return (bld.name).localeCompare(bld_b?.name);\n }\n const sort_order = [...bld.sort_order].reverse();\n for (const zone_id of sort_order) {\n if (zone_id === '*') {\n continue;\n }\n const a_has_zone = first.zones.indexOf(zone_id) >= 0;\n const b_has_zone = second.zones.indexOf(zone_id) >= 0;\n if (a_has_zone && !b_has_zone) {\n return 1;\n } else if (b_has_zone && !a_has_zone) {\n return -1;\n }\n }\n }\n return first.name.localeCompare(second.name);\n}\n","import { Injectable } from '@angular/core';\nimport { ComposerService } from '@placeos/composer';\nimport { first } from 'rxjs/operators';\n\nimport { BaseAPIService } from '../base.service';\nimport { ISpaceAvailabilityOptions, Space } from './space.class';\nimport { ApplicationLoadingState, HashMap } from '@mckinsey-converge/base';\nimport { availabilityOptionsToQuery } from './space.utilities';\nimport { ServiceManager } from '../service-manager.class';\nimport { OrganisationService } from '../organisation';\nimport { ApplicationService } from '../app.service';\nimport { SettingsService } from '../settings.service';\nimport { DateNow } from '@mckinsey-converge/date-tz';\nimport { Observable } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\n\nlet SPACE_LIST = [];\n\nexport function findSpace(id: string) {\n return SPACE_LIST.find((_) => _.id === id || _.email === id);\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SpacesService extends BaseAPIService {\n constructor(\n protected _composer: ComposerService,\n private _org: OrganisationService,\n private _service: ApplicationService,\n settingsService: SettingsService\n ) {\n \n super(_composer, settingsService);\n ServiceManager.setService(Space, this);\n this._name = 'Space';\n this._api_route = 'rooms';\n this._compare = (a, b) =>\n !a.id.localeCompare(b.id) || !a.email.localeCompare(b.email);\n this._list_filter = (a: Space) => {\n const bld = this._org.building;\n return a.level.building_id === bld.id;\n };\n this._org.initialised\n .pipe(first((_) => _))\n .subscribe(() => this.init());\n }\n\n public async query(query: HashMap = {}, setList:boolean = false) {\n const list = await super.query(query);\n if ( (query.hasOwnProperty('cache') && query.cache === false) || !Object.keys(query).length || setList) {\n this.set('list', list);\n SPACE_LIST = list;\n }\n return list;\n }\n\n public filterAvailableSpaces(list: Space[]) {\n return list.filter((i) => {\n if (i.recurrence_availability?.length) return i; //if recurrence, send the space regardless of availability (needed for edit and cloning series)\n return i.available;\n });\n }\n\n /**\n * Get available spaces\n * @param options\n */\n public available(\n options: ISpaceAvailabilityOptions,\n uniqueId?: string,\n filter: boolean = true\n ): Promise {\n if (!options) {\n throw new Error('Space avilability requires request options');\n }\n\n const now = DateNow(new Date());\n if (!options.dateTz) {\n options.dateTz = now.startOfValue('minute');\n }\n\n if (options.hide_declined === undefined) {\n options.hide_declined = true;\n }\n\n const key = `available|${options.id ? options.id : ''}|${\n uniqueId ?? ''\n }`;\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const respond = (list: Space[]) => {\n delete this._promises[key];\n resolve(filter ? this.filterAvailableSpaces(list) : list);\n };\n const error = (e) => {\n reject(e);\n delete this._promises[key];\n };\n const query = availabilityOptionsToQuery(options);\n if (options.id) {\n this.show(options.id, query).then(\n (i) => respond([i]),\n error\n );\n } else {\n this.query(query).then(respond, error);\n }\n });\n }\n\n return this._promises[key];\n }\n\n /**\n * Load initial data for the service\n */\n protected async load(): Promise {\n const loading: ApplicationLoadingState =\n this._service.get('loading') || {};\n if (!loading.spaces) {\n loading.spaces = {\n message: 'Loading space data',\n state: 'loading',\n };\n this._service.set('loading', loading);\n }\n // Adjusted the query by incorporating the \"zone_ids\" option to filter rooms based on specific zone IDs instead of considering all thousands of rooms.\n const option = {\n zone_ids: this._org.building.id\n }\n await this.query(option, true).catch(() => {\n loading.spaces = { message: 'Loading space data', state: 'failed' };\n this._service.set('loading', loading);\n });\n loading.spaces = { message: 'Loading space data', state: 'complete' };\n this._service.set('loading', loading);\n }\n\n /**\n * Convert raw data into API object\n * @param raw_data Raw API data\n */\n public process(raw_data: HashMap): Space {\n return new Space(raw_data);\n }\n /**\n * \n * Special observable function to make http call for rooms\n * @param query \n * @returns observable\n */\n public queryRooms = (query: HashMap = {}): Observable => super.queryRoomsForQR(query);\n\n public setSpaceList(list) {\n this.set('list', list);\n SPACE_LIST = list;\n }\n\n public queryBooking = (query: HashMap = {}) : Observable | Observable => super.queryObsr(query);\n public updateSpace = (id: string, form_data: HashMap, should_inject_concierge: Boolean = false, query_params: HashMap = {}) : Observable | Observable => super.updateObsr(id, form_data, should_inject_concierge, query_params);\n public uploadSpacePhotos = (apiSubRoute: string, form_data: HashMap, should_inject_concierge: Boolean = false, query_params: HashMap = {}) : Observable | Observable => super.uploadSpacePhotos(apiSubRoute, form_data, should_inject_concierge, query_params);\n \n public updateRoomList() {\n this.load().then((_) => null)\n }\n}\n","import {\n BehaviorSubject,\n of\n} from 'rxjs';\nimport {\n Building,\n Organisation\n} from './organisation';\nimport { BaseDataClass } from './base-api.class';\nimport { MapLocation } from './location';\nimport { User } from './users';\nimport { Booking } from './bookings';\nimport {\n RoomSettings,\n Space,\n SpaceFeatures\n} from './spaces';\nimport { ServiceManager } from './service-manager.class';\nimport {\n CateringCategory,\n CateringItem\n} from './catering';\nimport {\n HashMap,\n padZero,\n predictableRandomInt,\n unique\n} from '@mckinsey-converge/base';\n\nimport * as faker from 'faker';\n\nimport {\n SETTINGS_TOKEN,\n SettingsData,\n SettingsObject,\n SettingsService\n} from './settings.service';\nimport { Report } from './reports';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\nfaker.seed(2560);\n\nlet SERVICE: any;\n\ndeclare global {\n interface Jest {\n fn: () => any\n }\n}\n\n\ndeclare let jest: Jest;\n\n/* istanbul ignore file */\n\nexport function generateMockOrganisationService(): HashMap {\n return {\n levelWithID: jest.fn(),\n listen: jest.fn(),\n loadOrganisation: jest.fn(),\n initialised: of(true),\n building: new Building(generateMockBuilding({ id: 'bld-01' })),\n loadBuildingsWithOrg: jest.fn(),\n getOrganizationFiltersByRoomType: jest.fn(),\n getRoomTypeSubsetDDOptions: jest.fn(),\n getRoomFilterOptionsPerLocation: jest.fn(),\n ...generateMockDataService('OrganisationService')\n };\n}\n\nexport const generateMockSpacesService = (): HashMap => ({\n available: jest.fn(),\n ...generateMockDataService('SpacesService')\n});\n\nexport const generateMockUsersService = (): HashMap => ({\n loadCurrentUser: jest.fn(),\n ...generateMockDataService('UsersService')\n});\n\nexport const bookingState = () => ({\n bookings: of([]),\n filtered: of([]),\n filtered_week: of([]),\n filtered_month: of([]),\n setZone: jest.fn(),\n setDate: jest.fn(),\n setFilters: jest.fn(),\n add: jest.fn(),\n replace: jest.fn(),\n remove: jest.fn(),\n startPolling: jest.fn(),\n startPollingMonth: jest.fn(),\n startPollingWeek: jest.fn(),\n startPollingEveryFiveMin: jest.fn(),\n _noOfMeetings: of([])\n});\n\nconst test_app = {\n title: 'McKinsey & Company',\n description: 'McKinsey & Company Staff UI written with Angular Framework',\n short_name: 'STAFF',\n logo_light: {\n type: 'img',\n src: 'assets/img/logo.svg',\n background: ''\n },\n logo_dark: {\n type: 'img',\n src: 'assets/img/logo-inverse.svg',\n background: ''\n },\n heap_io: {\n app_id: 3540602199,\n force_ssl: true,\n secure_cookie: true,\n disable_text_capture: true,\n cookie_path: '/staff/'\n }\n};\n\nexport const TEST_SETTINGS: SettingsData = {\n debug: true,\n composer: {\n domain: '',\n route: '/test',\n protocol: '',\n port: '',\n use_domain: false,\n local_login: false\n },\n app: test_app,\n mock: false,\n frontend: 'staff'\n};\n\nexport const generateMockSettingsService = (overrides: Partial> = {}) => new SettingsService({ getTitle: () => jest.fn() } as any,\n new SettingsObject({\n ...TEST_SETTINGS,\n ...overrides\n }));\n\n/**\n * Provides an injectable instance for settings.\n */\nexport const provideMockSettingsObject = (settings: Partial> = {}) => ({\n provide: SETTINGS_TOKEN,\n useValue: new SettingsObject({\n ...TEST_SETTINGS,\n ...settings\n })\n});\n\n/**\n * Generate a mocked version of the application service\n */\nexport function generateMockAppService(settingsOverrides: Partial> = {}) {\n SERVICE = {\n setting: jest.fn(),\n notify: jest.fn(),\n notifyInfo: jest.fn(),\n notifyWarn: jest.fn(),\n notifySuccess: jest.fn(),\n notifyError: jest.fn(),\n log: jest.fn(),\n navigate: jest.fn(),\n navigateBack: jest.fn(),\n get: jest.fn(),\n listen: jest.fn(),\n set: jest.fn(),\n Composer: { auth: { token: 'test' } },\n Hotkeys: { listen: jest.fn() },\n Users: generateMockUsersService(),\n Organisation: generateMockOrganisationService(),\n Locations: generateMockDataService('LocationsService'),\n Base: generateMockDataService('BaseService'),\n Menu: generateMockDataService('CateringMenuService'),\n Spaces: generateMockSpacesService(),\n Bookings: generateMockDataService('BookingsService'),\n Reports: generateMockDataService('ReportsService'),\n CateringItems: generateMockDataService('CateringItemsService'),\n CateringCategories: generateMockDataService('CateringCategoriesService'),\n Settings: generateMockSettingsService(settingsOverrides),\n initialised: of(true)\n };\n ServiceManager.setService(BaseDataClass, SERVICE.Base);\n ServiceManager.setService(Organisation, SERVICE.Organisation);\n ServiceManager.setService(Building, SERVICE.Organisation);\n ServiceManager.setService(User, SERVICE.Users);\n ServiceManager.setService(Booking, SERVICE.Bookings);\n ServiceManager.setService(Space, SERVICE.Spaces);\n ServiceManager.setService(MapLocation, SERVICE.Locations);\n ServiceManager.setService(Report, SERVICE.Reports);\n ServiceManager.setService(CateringItem, SERVICE.CateringItems);\n ServiceManager.setService(CateringCategory, SERVICE.CateringCategories);\n SERVICE.Organisation.buildings = [SERVICE.Organisation.building];\n SERVICE.Users.current = new User(generateMockUser());\n SERVICE.Users.initialised = of(true);\n SERVICE.Bookings.booking_list = new BehaviorSubject(new Array(10).fill(0).map(_ => new Booking(generateMockBooking())));\n SERVICE.listen.mockReturnValue(of(null, []));\n return SERVICE;\n}\n\nexport function generateMockDataService(name: string) {\n const service = {\n find: jest.fn(),\n filter: jest.fn(),\n listen: jest.fn(),\n get: jest.fn(),\n set: jest.fn(),\n setting: jest.fn(),\n query: jest.fn(),\n show: jest.fn(),\n add: jest.fn(),\n save: jest.fn(),\n remove: jest.fn(),\n delete: jest.fn(),\n update: jest.fn(),\n addFrom: jest.fn(),\n removeFrom: jest.fn(),\n task: jest.fn(),\n available: jest.fn(),\n process: jest.fn(),\n updateList: jest.fn(),\n clearList: jest.fn(),\n removeFromList: jest.fn(),\n accept: jest.fn(),\n decline: jest.fn(),\n checkin: jest.fn(),\n is_logged_in: false,\n initialised: of(true),\n getHoldingBay: jest.fn(),\n name,\n queryRooms: of(true),\n queryRoomsForQR: of([]),\n queryObsr: of([]),\n queryBooking: of(true),\n checkinIndividualVisitor: jest.fn(),\n taskObsr: of(true),\n updateSpace: jest.fn(),\n updateObsr: of([]),\n uploadSpacePhotos: of([])\n\n };\n\n service.getHoldingBay.mockImplementation(_ => Promise.resolve([new Booking({})]));\n service.save.mockImplementation(_ => Promise.resolve(new Booking({})));\n\n service.listen.mockReturnValue(of(null));\n service.filter.mockReturnValue([]);\n return service;\n}\n\nlet SPACE_COUNT: number = 0;\n\nexport function generateMinimalRoomDetails(count: number) {\n return {\n name: `space-0${count}`,\n email: `space-0${count}@test.com`,\n settings: {\n name: `localname-0${count}`,\n catering: true\n }\n }\n}\n\nexport function generateMockSpace(overrides: HashMap = {}, space_id: number = null, recurring_search: boolean = false ): Space {\n const id = `space-${space_id || SPACE_COUNT++}`;\n const name = overrides.name || `${faker.name} ${faker.name.lastName()} Space`;\n const startOfDay = DateNow(new Date()).startOfValue('day');\n let settings: RoomSettings = {\n available: true,\n available_until: startOfDay.addValue({ days: 1 }).seconds, // (Date.now() / 1000) + (60 * 60 * 24), // now plus 24 hrs\n bookings: Array(10).fill(0).map(i => generateMockBooking()),\n catering: true,\n charge_code: true,\n extra_features: \"meeting_room boardroom\",\n internal_or_external: \"internal\",\n map_id: \"1\",\n natural_light: false,\n room_booking_screen: true,\n room_name: `${name} - Local Name`,\n vc: false,\n }\n if (overrides.settings) {\n settings = { ...settings, ...overrides.settings };\n delete overrides.settings;\n }\n if (recurring_search) {\n settings.recurrence_availability = [\n {\n date: startOfDay.seconds,\n available: false,\n },\n {\n date: startOfDay.addValue({ days: 1 }).seconds,\n available: false,\n },\n {\n date: startOfDay.addValue({ days: 2 }).seconds,\n available: false,\n },\n {\n date: startOfDay.addValue({ days: 3 }).seconds,\n available: false,\n },\n ]\n }\n\n const linked = Math.floor(predictableRandomInt(99999)) % 2 === 0 && SPACE_COUNT > 1;\n return new Space({\n id,\n name: `${name} - Global Name`,\n map_id: `${space_id || SPACE_COUNT}`,\n type: faker.commerce.productName(),\n searchable: Math.floor(predictableRandomInt(99999)) % 2 === 0,\n controlable: Math.floor(predictableRandomInt(99999)) % 2 === 0,\n hourly_rate: Math.floor(predictableRandomInt(300)) * 100,\n bookable: Math.floor(predictableRandomInt(99999)) % 2 === 0,\n capacity: 15,\n sort_priority: 0,\n setup: Math.floor(predictableRandomInt(6)) * 5,\n breakdown: Math.floor(predictableRandomInt(6)) * 5,\n support_url: `/control/#/${id}`,\n image: faker.image.business(),\n zones: ['zone_lvl-0'],\n features: `${SpaceFeatures.BoardRoom} ${SpaceFeatures.ElectronicWhiteboard}`,\n email: `${name.toLowerCase().split(' ').join('.')}@${USER_DOMAIN}`,\n settings,\n ...overrides\n });\n}\n\nlet BOOKING_COUNT = 0;\nlet BOOKING_DATE = DateNow(new Date()).setValue({ hour: 6 }).setValue({minute: 0}).subtractValue({ days: 10 }).startOfValue('minute');\n\n/**\n * Set the initial time used for generating mock bookings\n * @param time New initial time as ms from UTC epoch\n */\nexport function setMockBookingStartDatetime(time: number) {\n const date = new DateTZ({date: time})\n BOOKING_DATE = date.startOfValue('minute');\n}\n\n/**\n * Create mock raw API data for a booking\n * @param override Overrides the properties of the generated booking with it's own\n */\nexport function generateMockBooking(override: HashMap = {}) {\n const id = `booking-${BOOKING_COUNT++}`;\n BOOKING_DATE = BOOKING_DATE.addValue({ minutes: Math.floor(predictableRandomInt(4) + 2) * 15 });\n const start = BOOKING_DATE.ms;\n const duration = Math.floor(predictableRandomInt(4) + 2) * 15;\n BOOKING_DATE = BOOKING_DATE.addValue({ minutes: Math.floor(predictableRandomInt(4)) * 15 });\n const organiser = generateMockUser({ external: false, visitor: false });\n const orders = Array(Math.floor(predictableRandomInt(5)))\n .fill(0)\n .map(_ => generateMockCateringOrder({ booking_date: start }, override.room_ids, override.menu));\n const hasCatering = Math.floor(predictableRandomInt(34567)) % 3 === 0;\n const date_start = new DateTZ({date: start})\n return {\n id,\n title: `${faker.commerce.productName()} Meeting`,\n attendees: Array(Math.floor(predictableRandomInt(5) + 2))\n .fill(0)\n .map((_, i) => generateMockUser(override.users)),\n organiser,\n start_epoch: date_start.seconds,\n end_epoch: date_start.addValue({ minutes: duration }).seconds,\n body: faker.lorem.paragraph(),\n notes: [{ type: 'other', message: faker.lorem.paragraph() }],\n location: faker.address.city(),\n // Mckinsey only has internal or external meetings\n booking_type: ['internal', 'external'][predictableRandomInt(2)],\n setup: { 'space-01': Math.max(0, (predictableRandomInt(12) - 6) * 5) },\n breakdown: { 'space-01': Math.max(0, (predictableRandomInt(12) - 6) * 5) },\n status: 'accepted',\n catering: hasCatering ? orders : [],\n room: new Space(generateMinimalRoomDetails(1)), // returns space-01 type values\n equipment_codes: {},\n company:[],\n ...override\n };\n}\n\nlet BLD_COUNT = 0;\nlet LVL_COUNT = 0;\n\n/**\n * Generate raw mock data for creating a building\n * @param id Forced ID for the mock\n * @param overrides Supply object value overrides in place. Supports a levelGenerator function\n * to stabilize level ids for testing.\n */\nexport function generateMockBuilding(overrides: HashMap = {}): HashMap {\n const id = `zone_bld-${BLD_COUNT++}`;\n const levels = Array(10)\n .fill(0)\n .map((_, i) => generateMockLevel(undefined, overrides.levelGenerator?.(i)));\n const features: any = {};\n for (const lvl of levels) {\n const count = Math.floor(predictableRandomInt(3) + 2);\n features[lvl.level_id] = {};\n for (let i = 0; i < count; i++) {\n features[lvl.level_id][faker.commerce.productName()] = `feature-${i + 1}`;\n }\n }\n return {\n id,\n zone_id: id,\n extras: Array(10)\n .fill(0)\n .map(i => {\n const name = faker.commerce.productName();\n return {\n extra_id: name\n .split(' ')\n .join('-')\n .toLowerCase(),\n extra_name: name\n };\n }),\n code: 'NYO',\n name: faker.name.firstName(),\n address: 'building address field',\n city: 'building city',\n loan_items: Array(10)\n .fill(0)\n .map(i => {\n const name = faker.commerce.productName();\n return {\n extra_id: name\n .split(' ')\n .join('-')\n .toLowerCase(),\n extra_name: name\n };\n }),\n levels,\n roles: {\n 'first-aiders': Array(10)\n .fill(0)\n .map(i => generateMockUser())\n },\n neighbourhoods: features,\n settings: {\n test: {\n nested: {\n level2: true,\n org: false\n }\n },\n city: faker.address.city()\n },\n timezone: 'America/Chicago',\n ...overrides\n };\n}\n\n/**\n * Generate raw mock data for a building level\n * @param id Forced ID for the mock\n * @param overrides value overrides\n */\nexport function generateMockLevel(id?: string, overrides: HashMap = {}): HashMap {\n if (!id) {\n id = `zone_lvl-${LVL_COUNT++}`;\n }\n return {\n id,\n level_id: id,\n level_name: `Level ${LVL_COUNT}`,\n short_name: `L ${LVL_COUNT}`,\n ...overrides\n };\n}\n\nlet USER_COUNT = 0;\n\nexport let USER_DOMAIN = 'acaprojects.com';\n\nconst USER_EMAILS: string[] = [];\n\n/**\n * Generate raw mock data for a user\n * @param id Forced ID for the mock\n * @param name Forced name for the user\n * @param external Whether user is external of the organisation\n */\nexport function generateMockUser(override: HashMap = {}): HashMap {\n const id = `user-${USER_COUNT++}`;\n const name = `${faker.name.firstName()} ${faker.name.lastName()}`;\n const external = override.external || !(predictableRandomInt(99999) % 2);\n const organisation = external ? faker.company.companyName() : USER_DOMAIN.split('.')[0];\n let delegates: {email: string, opt_out: boolean}[] = [];\n const delegate_count = Math.min(predictableRandomInt(4) + 1, USER_EMAILS.length);\n for (let i = 0; i < delegate_count; i++) {\n delegates.push({email: USER_EMAILS[Math.floor(predictableRandomInt(USER_EMAILS.length))], opt_out: false});\n }\n delegates = unique(delegates);\n const email = `${name\n .split(' ')\n .join('.')\n .toLowerCase()}@${external ? 'not-' : ''}${USER_DOMAIN}`;\n USER_EMAILS.push(email);\n return {\n id,\n name,\n first_name: name.split(' ')[0],\n last_name: name.split(' ')[1],\n email,\n phone: faker.phone.phoneNumber(),\n visitor: external,\n organisation: {\n id: organisation\n .split(' ')\n .join('.')\n .toLowerCase(),\n name: organisation\n },\n department: faker.commerce.department(),\n staff_code: padZero(Math.floor(predictableRandomInt(99999)), 5),\n delegates,\n image: faker.image.avatar(),\n ...override\n };\n}\n\nexport function generateMockCateringOrder(overrides: HashMap = {}, room_id: string = '', menu: HashMap = {}) {\n return {\n id: `order-${predictableRandomInt(9999_9999)}`,\n delivery_time: predictableRandomInt(6) * 5,\n location_id: room_id, // R--- could be undefined\n items: new Array(predictableRandomInt(5, 1)).fill(0).map(i => pickMenuItem(menu)),\n ...overrides\n };\n}\n\nfunction pickMenuItem(menu_map: HashMap = {}) {\n const zones = Object.keys(menu_map);\n const menu = menu_map[zones[predictableRandomInt(zones.length)]] || [];\n const category = menu[predictableRandomInt(menu.length)] || { items: [] };\n const group = { ...(category.items[predictableRandomInt(category.items.length)] || {}) };\n if (!group.package && group.items?.length) {\n const item = { ...group.items[predictableRandomInt(group.items.length)] };\n item.amount = predictableRandomInt(5, 1);\n return item;\n }\n group.amount = predictableRandomInt(5, 1);\n return group;\n}\n\nexport function generateMockLocation(overrides: HashMap, fixed_locations: string[], maps: string[]): HashMap {\n const fixed = predictableRandomInt(999_999_999) % 2 === 0;\n if (fixed && (!overrides || overrides.fixed)) {\n return {\n map_id: fixed_locations[predictableRandomInt(fixed_locations.length)],\n level: maps[predictableRandomInt(maps.length)],\n ...overrides\n };\n } else {\n return {\n x: predictableRandomInt(900, 100),\n x_max: 1000,\n y: predictableRandomInt(500, 100),\n level: maps[predictableRandomInt(maps.length)],\n confidence: predictableRandomInt(30),\n ...overrides\n };\n }\n}\n\nlet ORG_COUNT = 0;\n\nexport function generateMockOrganisation(): HashMap {\n const buildings = Array(3).fill(0).map(i => generateMockBuilding());\n return {\n id: `zone_org-${ORG_COUNT++}`,\n name: `Organisation ${ORG_COUNT}`,\n buildings,\n settings: {\n discovery_info: {\n buildings\n },\n test: {\n nested: {\n org: true\n }\n }\n }\n };\n}\n\n\nexport const generateMockBuildingSetByCity = () => {\n const buildings: Building[] = Array(10).fill(0)\n .map(() => new Building(generateMockBuilding()));\n buildings.push(...Array(2).fill(0).map(() => new Building(generateMockBuilding({\n settings: {\n city: 'Auckland'\n },\n city: 'Auckland'\n }))));\n buildings.push(...Array(5).fill(0).map(() => new Building(generateMockBuilding({\n settings: {\n city: 'NYC'\n },\n city: 'NYC'\n }))));\n return buildings;\n};\n\nexport function generateMockModalData(data: HashMap = null) : HashMap {\n if (data) {\n return data;\n }\n return {\n pendingDate: new Date(1603087100 + (1000 * 60 * 15)),\n pendingDuration: 60,\n date: 1603087100,\n duration: 30,\n }\n}\n\nexport const mockDateToBuildingTz = (date?: number) =>{\n return new DateTZ({date, building_tz: 'America/Chicago', is_local_tz: false})\n}","export * from './user.class'\nexport * from './user.utilities'\nexport * from './users.service'\n","import { BaseDataClass } from '../base-api.class';\nimport {\n HashMap,\n Identity\n} from '@mckinsey-converge/base';\nimport { MapLocation } from '../location';\nimport { ServiceManager } from '../service-manager.class';\n\nexport class User extends BaseDataClass {\n \n /** Currently logged in user */\n public static get active_user(): User {\n const service = ServiceManager.serviceFor(User);\n return service ? service.current : null;\n }\n\n /** First name of the user */\n public readonly first_name: string;\n /** Last name of the user */\n public readonly last_name: string;\n /** Windows user ID */\n public readonly windows_id: string;\n /** FMNO */\n public readonly fmno: string;\n /** Type of user */\n public readonly type: 'partner' | 'external' | 'internal';\n /** Contact phone number of the user */\n public readonly phone: string;\n /** Organisational department the user is part of */\n public readonly business_unit: string;\n /** Whether user is external from the application's organisation */\n public readonly external: boolean;\n /** Whether user is a visitor */\n public readonly visitor: boolean;\n /** Organisational Identifier for the user */\n public readonly staff_code: string;\n /** Basic location descriptor for the user */\n public readonly location: string;\n /** List of users that this user can act on behalf */\n public readonly delegates: readonly {email: string, opt_out: boolean}[];\n /** URL of the user's avatar image */\n public readonly image: string;\n /** List of user groups associated with this user */\n public readonly groups: readonly string[];\n /** Organisation the user is associated with */\n private _organisation: Identity;\n\n /** Map location of the user */\n private _location: MapLocation;\n /** List of desk bookings */\n // private _desk_bookings: HashMap = {}; // R--- can't explain why this is here.\n /** Host/Organisawe email notification opt out/in setting */\n public opt_out: boolean;\n\n constructor(raw_data: HashMap = {}) {\n super(raw_data);\n this.first_name = raw_data.first_name || '';\n this.last_name = raw_data.last_name || '';\n this.windows_id = raw_data.email || '';\n this.fmno = raw_data.fmno;\n this.external = raw_data.external || false;\n this.visitor = raw_data.visitor || false;\n\n\n this.type = this.visitor ? 'external' : 'internal';\n this.phone = raw_data.phone || raw_data.mobile || '';\n this.business_unit = raw_data.business_unit || raw_data.department || '';\n this._organisation = raw_data.organisation || {\n id: raw_data.organisation_id,\n name: raw_data.organisation_name\n };\n\n this._location = null;\n this.image = raw_data.image || '';\n this.staff_code = raw_data.staff_code || raw_data.fmno || '';\n this.delegates = raw_data.delegates || [];\n this._location = new MapLocation(\n raw_data.location && raw_data.location instanceof Object\n ? raw_data.location\n : { name: raw_data.location }\n );\n this.groups = raw_data.groups || [];\n this.location = raw_data.location || raw_data.officeLocation || '';\n this.opt_out = raw_data.opt_out;\n }\n\n /** Organisation the user is associated with */\n public get organisation() {\n return this._organisation;\n }\n\n /** Map location of the user */\n public get last_location(): MapLocation {\n return new MapLocation(this._location || {});\n }\n\n /**\n * Ask the server for the users current location\n */\n public locate(): Promise {\n const service: any = ServiceManager.serviceFor(MapLocation);\n return new Promise((resolve, reject) => {\n if (service) {\n service.show(this.id, { desk: this.email }).then(\n l => {\n this._location = l;\n resolve(l);\n },\n e => reject(e)\n );\n } else {\n resolve(null);\n }\n });\n }\n\n /**\n * Whether user is available during the given period\n * @param start Start time as a unix timestamp with milliseconds\n * @param end End time as a unix timestamp with milliseconds\n */\n public available(start?: number, end?: number): Promise {\n return new Promise(resolve => {\n this._service.query({ email: this.email, start, end }).then(\n l => resolve(l && l.length > 0),\n _ => resolve(false)\n );\n });\n }\n\n /**\n * Make a copy of this object\n */\n public clone(): User {\n return new User(this);\n }\n\n /**\n * Make a copy of this object without identification data\n */\n public duplicate(): User {\n return new User({ ...this, id: null, email: null });\n }\n\n /**\n * Convert object into plain object\n */\n public toJSON(this: User): HashMap {\n const data = super.toJSON();\n delete data.location;\n return data;\n }\n}\n\n// R--- Might need an toApiJSON due to visitor field.","import {\n FormControl,\n FormGroup,\n Validators\n} from '@angular/forms';\n\nimport { HashMap } from '@mckinsey-converge/base';\nimport { User } from './user.class';\n\n/**\n * Generate form fields for the given user\n * @param user User to generate form for\n */\nexport function generateUserForm(user: User): FormGroup {\n if (!user) {\n throw Error('No user passed');\n }\n const fields: HashMap = {\n id: new FormControl(user.id || ''),\n name: new FormControl(user.name || ''),\n first_name: new FormControl(user.first_name || '', [Validators.required, Validators.pattern(/^(?![\\d\\s]+$)[^\\d]+$/), Validators.maxLength(50)]),\n last_name: new FormControl(user.last_name || '', [Validators.required, Validators.pattern(/^(?![\\d\\s]+$)[^\\d]+$/), Validators.maxLength(50)]),\n email: new FormControl(user.email || '', [Validators.email])\n };\n // Generate form group for booking item\n return new FormGroup(fields);\n}\n","import { Injectable } from '@angular/core';\nimport { Location } from '@angular/common';\nimport {\n HttpClient,\n HttpHeaders\n} from '@angular/common/http';\nimport { ComposerService } from '@placeos/composer';\nimport { first } from 'rxjs/operators';\n\nimport { Md5 } from 'ts-md5/dist/md5';\n\nimport { BaseAPIService } from '../base.service';\nimport { User } from './user.class';\nimport {\n ApplicationLoadingState,\n HashMap,\n unique\n} from '@mckinsey-converge/base';\n\nimport { ApplicationService } from '../app.service';\nimport { ServiceManager } from '../service-manager.class';\nimport { SettingsService } from '../settings.service';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\nexport interface ILoginOptions {\n /** URL to post login request to */\n url?: string;\n /** Whether form data is passed in the body of the request */\n form?: boolean;\n /** Custom headers to pass into the post request */\n headers?: HashMap;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UsersService extends BaseAPIService {\n constructor(\n protected _composer: ComposerService,\n protected uhttp: HttpClient,\n protected location: Location,\n private _service: ApplicationService,\n settingsService: SettingsService\n ) {\n super(_composer, settingsService);\n ServiceManager.setService(User, this);\n this._name = 'Users';\n this._api_route = 'users';\n this._compare = (a, b) => !a.id.localeCompare(b.id) || !a.email.localeCompare(b.email);\n this.set('list', []);\n this.set('current_user', new User({ id: 'local_user', name: 'Local User' }));\n this.set('delegates', null);\n this._composer.initialised.pipe(first((_) => _)).subscribe(() => this.init());\n }\n\n /** Currently logged in user */\n public get current(): User {\n return this.get('current_user');\n }\n\n /** Whether the user has properly logged in */\n public get is_logged_in(): boolean {\n return this.current && this.current.id !== 'local_user';\n }\n\n /* istanbul ignore next */\n /**\n * Sets the access token and expiry for the user\n * @param token OAuth bearer token\n * @param expiry Expiry epoch timestamp in ms\n * @param reload Whether to reload the page after setting tokens\n */\n public setToken(token: string, expiry?: number, reload: boolean = true) {\n if (!expiry) {\n const now = DateNow(new Date())\n expiry = now.addValue({ days: 7 }).endOfValue('day').ms;\n }\n const path = `${location.origin}${\n this._service.setting('composer.route') || ''\n }/oauth-resp.html`;\n const client_id = Md5.hashStr(path);\n if (sessionStorage) {\n sessionStorage.setItem(`${client_id}_access_token`, token);\n sessionStorage.setItem(`${client_id}_expires_at`, `${expiry}`);\n }\n if (localStorage) {\n localStorage.setItem(`${client_id}_access_token`, token);\n localStorage.setItem(`${client_id}_expires_at`, `${expiry}`);\n }\n if (reload) {\n this.location.go(this.location.path());\n }\n return path;\n }\n\n /**\n * Post login request to the API\n * @param query_params Key value pairs to pass into\n * @param options Options for the login request\n */\n public async login(query_params: HashMap, options: ILoginOptions = {}): Promise {\n if (this.settingsService.concierge) {\n if (!this._promises['login']) {\n this._promises['login'] = new Promise((resolve, reject) => {\n this.set('status', 'loading');\n let headers = new HttpHeaders();\n if (!options || options.form !== false) {\n headers = headers.append('Content-Type', 'application/x-www-form-urlencoded');\n }\n const url = (options ? options.url : '') || '/auth/signin';\n this.uhttp.post(url, query_params, { headers }).subscribe(\n (_) => null,\n (e) => reject(e),\n () => {\n this._composer.auth.authorise();\n resolve();\n }\n );\n });\n }\n return this._promises['login'];\n }\n }\n\n\n /**\n * Logout of user and redirect to logout URL\n */\n public logout() {\n this._composer.auth.logout();\n }\n\n /**\n * Loads current user from API. This diverges from {@link load} in order to simply return\n * the user object instead of setting it on the service.\n */\n public async loadCurrentUser(): Promise {\n return this.show('current')\n }\n\n /**\n * Load initial data for the service\n */\n protected load(tries: number = 0): Promise {\n const loading: ApplicationLoadingState = this._service.get('loading') || {};\n loading.user = { message: 'Loading user credentials', state: 'loading' };\n this._service.set('loading', loading);\n this.set('status', 'loading');\n return new Promise((resolve) => {\n // this is due to unclear nature of the merge between concierge and staff\n // concierge has the retries enabled, while staff continuously retries.\n if (this.settingsService.concierge && tries > 4) {\n this.set('status', 'invalid');\n loading.user = { message: 'Loading user credentials', state: 'failed' };\n this._service.set('loading', loading);\n return resolve();\n }\n this.show('current').then(\n async (current_user) => {\n this.set('status', 'available');\n this.set('current_user', current_user);\n this._initialised.next(true);\n if (this._service && this._service.setting('app.user.grab_api_details')) {\n this.show(current_user.email).then(\n async (user) => {\n this.set('current_user', user);\n if (this._service.setting('app.user.update_location')) {\n this.interval('location', () => user.locate(), 5000);\n }\n await this.loadDelegates().catch(_ => null);\n resolve();\n loading.user = {\n message: 'Loading user credentials',\n state: 'complete'\n };\n this._service.set('loading', loading);\n },\n () => this.timeout('load', () => this.load(++tries).then(() => resolve()), Math.min(3000, 300 * tries))\n );\n } else {\n \n // is after process\n if (this._service.setting('app.user.update_location')) {\n this.interval('location', () => current_user.locate(), 5000);\n }\n await this.loadDelegates().catch(_ => null);\n resolve();\n loading.user = { message: 'Loading user credentials', state: 'complete' };\n this._service.set('loading', loading);\n }\n },\n () => this.timeout('load', () => this.load(++tries).then(() => resolve()), Math.min(3000, 300 * tries))\n );\n });\n }\n\n private async loadDelegates() {\n const delegates = this.current.delegates;\n if (!delegates || !delegates.length) {\n return [];\n }\n const promises: Promise[] = [];\n for (const del of delegates) {\n promises.push(this.show(del.email));\n }\n const list = await Promise.all(promises);\n this.set('delegates', list);\n this.set('list', unique((this.get('list') || []).concat(list)));\n return list;\n }\n\n /**\n * Convert raw API data into a valid User Object\n * @param raw_item Raw API data\n */\n protected process(raw_data: any): User {\n return new User(raw_data);\n }\n}","import { AbstractControl } from '@angular/forms';\n\nimport { User } from './users';\n\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n\nconst HAS_ERROR = true;\n\n/**\n * Build start time validation function\n * @param date Date of the time to check\n */\nexport function buildValidateDate(date?: number) {\n const from = new DateTZ({ date });\n return (c) => validateDate(c, date);\n}\n\n/**\n * Check that control value is a date that is the same or after from date\n * @param control Angular form control\n * @param is_from Comparison date(ms from UTC epoch). Defaults to the current time\n */\nexport function validateDate(control: AbstractControl, is_from?: number) {\n const from = new DateTZ({date: is_from})\n const date = new DateTZ({date: control.value})\n return date.isBeforeDate(from) ? { date: HAS_ERROR, message: 'Booking needs to be made in the future' } : null;\n}\n\n/**\n * Build start time validation function\n * @param date Date of the time to check\n * @param is_from Comparison date(ms from UTC epoch). Defaults to the current time\n */\nexport function buildValidateStartTime(date: number, is_from?: number) {\n const from = new DateTZ({date: is_from})\n return (c) => validateStartTime(c, date, from.ms);\n}\n\n/**\n * Check that control value time is after the comparison date time\n * @param control Angular form control\n * @param date Date of the time to check\n * @param is_from Comparison date(ms from UTC epoch). Defaults to the current time\n */\nexport function validateStartTime(control: AbstractControl, date: number, is_from?: number) {\n const now = new DateTZ({date: is_from});\n const parts = control.value.split(':');\n const date_obj = new DateTZ({date});\n return date_obj.setValue({ hour: +parts[0], minute: +parts[1] }).isBeforeDate(now) ? {\n start: HAS_ERROR,\n message: 'Booking time needs to be made in the future'\n } : null;\n}\n\nexport function buildValidateDuration(min: number = 30, max: number = 240) {\n return (c) => validateDuration(c, min, max);\n}\n\nexport function validateDuration(control: AbstractControl, min: number = 30, max: number = 240) {\n if (control.value < (min || 30)) {\n return { duration: HAS_ERROR, message: `Minimum booking duration is ${min} minute${min === 1 ? 's' : ''}` };\n } else if (control.value > (max || 480)) {\n return { length: HAS_ERROR, message: `Maximum booking duration is ${max} minute${max === 1 ? 's' : ''}` };\n }\n return null;\n}\n\nexport function buildValidateAttendees(host: User, min: number = 0) {\n return (c) => validateAttendees(c, host, min);\n}\n\nexport function validateAttendees(control: AbstractControl, host: User, min: number = 0) {\n if (!control || !(control.value instanceof Array)) {\n return min > 0\n ? { invalid: true, message: `Minimum of ${min} attendee${min === 1 ? ' is' : 's are'} required other than you` }\n : null;\n }\n const list: User[] = control.value;\n if (host) {\n const result = list.find(a => a.email === host.email);\n if (result) {\n list.splice(list.indexOf(result), 1);\n }\n }\n return list.length >= min ? null : {\n count: true,\n message: `Minimum of ${min} attendee${min === 1 ? ' is' : 's are'} required other than you`\n };\n}\n\nexport function validateEndTime(dateControlTz: AbstractControl) {\n return (control: AbstractControl) => {\n // const date = new DateTZ({date: date_control ? date_control.value : undefined})\n const now = DateNow(new Date())\n return dateControlTz.value.addValue({ minutes: control.value || 60 }).isBeforeDate(now)? { end_time: true } : null;\n };\n}\n\nexport function noWhitespaceValidator(control: AbstractControl) {\n const value = control?.value;\n if ( value === '') {\n return null; // Return null if control value is undefined or null\n }\n const isWhitespace = value.trim().length === 0;\n // const isValid = !isWhitespace;\n return !isWhitespace ? null : { whitespace: true };\n}\n\n","export * from './lib/date-tz.class'","import { DateObjectUnits, DateTime, DateTimeUnit, DurationLike, DurationUnits } from 'luxon';\nimport { getTimezoneOffset } from 'date-fns-tz';\n\nfunction padZero(value: number, length: number): string {\n let str = `${value}`;\n while (str.length < length) str = `0${str}`;\n return str;\n}\n\ninterface DateTZParams {\n date?: number | DateTime\n building_tz?: string\n is_local_tz?: boolean\n all_day?: boolean\n}\n\nconst now = new Date()\n\nexport class DateTZ {\n date: DateTime\n date_org: DateTime\n building_tz: string\n is_local_tz: boolean = true\n all_day: boolean\n local_tz: string\n valid: boolean\n\n constructor(data?: DateTZParams) { \n this.date_org = typeof data?.date === 'number' ? DateTime.fromMillis(data?.date) : data?.date ? data?.date : DateTime.fromMillis(now.valueOf())\n this.is_local_tz = data?.is_local_tz === false ? data?.is_local_tz : true\n this.all_day = data?.all_day || false\n this.local_tz = DateTime.now().zoneName\n this.building_tz = data?.building_tz || this.local_tz\n this.date = !this.is_local_tz ? this.date_org.setZone(this.building_tz) : this.date_org\n this.valid = this.date.isValid\n }\n\n //get epoch milliseconds\n public get ms(): number {\n return this.date.valueOf()\n }\n\n //get epoch seconds\n public get seconds(): number {\n return Math.trunc(this.date.toSeconds())\n }\n\n //get the second of the minute\n public get second(): number {\n return this.date.second\n }\n\n //get the minutes of the hour\n public get minutes(): number {\n return this.date.minute\n }\n\n //get the minutes of the hour\n public get hours(): number {\n return this.date.hour\n }\n\n public get utc(): number {\n const newDate = new DateTZ({...this, date: this.date.toUTC()})\n return newDate.seconds\n }\n\n public get dateDay(): number {\n return this.date.day\n }\n\n public get dateHour(): number {\n return this.date.hour\n }\n\n public get dateYear(): number {\n return this.date.year\n }\n\n public get dateWeekday(): number {\n try {\n return this.date.weekday;\n } catch (e) {\n return this.date.toJSDate().getDay();\n }\n }\n\n public get dateMonth(): number {\n return this.date.month\n }\n\n public dateDiff (compare_to: DateTZ, unit: DurationUnits, ans_unit = 'minutes'): number {\n return this.date.diff(compare_to.date, unit)[ans_unit]\n }\n\n //set the date to the begining of the given unit\n public startOfValue (unit: DateTimeUnit) {\n // All the luxon start of values work as needed except for week\n let newDate = new DateTZ({...this, date: this.date.startOf(unit)})\n // Special week logic\n if (unit === 'week') {\n if (this.dateWeekday === 7) {\n // Don't change, we want sunday as the start of the week even though luxon thinks it is Monday\n newDate = new DateTZ({ ...this, date: this.date })\n } else if (this.dateWeekday === 1) {\n // If this.date is monday, just subtract one more day to make it Sunday\n const monday = new DateTZ({ ...this, date: this.date })\n newDate = monday.subtractValue({ days: 1 });\n } else {\n // If later than monday, startOfWeek back to monday and then subtact another day to get to Sunday.\n const monday = new DateTZ({...this, date: this.date.startOf(unit)})\n newDate = monday.subtractValue({ days: 1 })\n }\n }\n\n return newDate\n }\n\n //set the date to the end of the given unit\n public endOfValue (unit: DateTimeUnit) : DateTZ {\n // All the luxon start of values work as needed except for week\n let newDate = new DateTZ({...this, date: this.date.startOf(unit)})\n // Special week logic\n if (unit === 'week') {\n if (this.dateWeekday === 6) {\n // Don't change, we want saturday as the end of the week even though luxon thinks it is Sunday\n newDate = new DateTZ({ ...this, date: this.date })\n } else if (this.dateWeekday === 7) {\n // If this.date is Sunday, this alone is the luxon end of week so add a day\n // to get to monday, then endOfWeek to Sunday, and subtract 1 day to Saturday\n const sunday = new DateTZ({ ...this, date: this.date }).addValue({ days: 1 })\n newDate = sunday.endOfValue(unit).subtractValue({ days: 1 }); // return next saturday\n } else {\n // If not saturday or sunday\n // endOfWeek to Sunday and then subtact a day to get to Saturday.\n const later = new DateTZ({...this, date: this.date.endOf(unit)})\n newDate = later.subtractValue({ days: 1 })\n }\n } else {\n newDate = new DateTZ({...this, date: this.date.endOf(unit)})\n }\n\n return newDate\n }\n \n public startEpoch (): number {\n const org = new DateTZ({date: this.date_org})\n return this.all_day\n ? this.startOfValue('day').ms - this.dateDiff(org, 'minutes')\n : this.ms\n }\n\n //clone the given value and unit to the date\n public clone (): DateTZ {\n // return new DateTZ({...this})\n return this.addValue({ seconds: 0 })\n }\n\n //adds the given value and unit to the date\n public addValue (duration: DurationLike, isLastDayOfMonth?: boolean): DateTZ {\n return new DateTZ({...this, date: isLastDayOfMonth ? this.date.plus(duration).endOf('month') : this.date.plus(duration)});\n }\n\n //subtracts the given value and unit to the date\n public subtractValue (duration: DurationLike): DateTZ {\n const newDate = new DateTZ({...this, date: this.date.minus(duration)})\n return newDate\n }\n\n public setValue (obj: DateObjectUnits): DateTZ {\n const newDate = new DateTZ({...this, date: this.date.set(obj)})\n return newDate\n }\n\n public formatDate (format: string): string {\n // Return new immuatable via \"plus\" to prevent \n // TypeError: Cannot assign to read only property 'weekData' of object\n // https://github.com/moment/luxon/issues/601\n return this.date.plus({ seconds: 0 }).toFormat(format)\n }\n\n public formatLocalDate (format: string): string {\n // setZone already returns new immutable so it doesn't have the formatDate issue.\n return this.date.plus({ seconds: 0 }).setZone(this.local_tz).toFormat(format)\n }\n\n public isSameDate(compare_to: DateTZ, value: DateTimeUnit): boolean {\n return this.date.hasSame(compare_to.date, value)\n }\n\n public isAfterDate(compare_to: DateTZ, unit?: DateTimeUnit): boolean {\n switch (unit) {\n case 'year':\n return this.dateYear > compare_to.dateYear\n case 'month':\n if(this.isAfterDate(compare_to, 'year')){\n return true\n }else if(!this.isSameDate(compare_to, 'year')){\n return false\n }else{\n return this.dateMonth > compare_to.dateMonth\n }\n case 'day':\n if(this.isAfterDate(compare_to, 'month')){\n return true\n }else if(!this.isSameDate(compare_to, 'month')){\n return false\n }else{\n return this.dateDay > compare_to.dateDay\n }\n case 'hour':\n if(this.isAfterDate(compare_to, 'day')){\n return true\n }else if(!this.isSameDate(compare_to, 'day')){\n return false\n }else{\n return this.dateHour > compare_to.dateHour\n }\n case 'minute':\n if(this.isAfterDate(compare_to, 'hour')){\n return true\n }else if(!this.isSameDate(compare_to, 'hour')){\n return false\n }else{\n return this.minutes > compare_to.minutes\n }\n default:\n return this.ms > compare_to.ms;\n }\n }\n\n public isBeforeDate(compare_to: DateTZ, unit?: DateTimeUnit): boolean {\n switch (unit) {\n case 'year':\n return this.dateYear < compare_to.dateYear\n case 'month':\n if(this.isBeforeDate(compare_to, 'year')){\n return true\n }else if(!this.isSameDate(compare_to, 'year')){\n return false\n }else{\n return this.dateMonth < compare_to.dateMonth\n }\n case 'day':\n if(this.isBeforeDate(compare_to, 'month')){\n return true\n }else if(!this.isSameDate(compare_to, 'month')){\n return false\n }else{\n return this.dateDay < compare_to.dateDay\n }\n case 'hour':\n if(this.isBeforeDate(compare_to, 'day')){\n return true\n }else if(!this.isSameDate(compare_to, 'day')){\n return false\n }else{\n return this.dateHour < compare_to.dateHour\n }\n case 'minute':\n if(this.isBeforeDate(compare_to, 'hour')){\n return true\n }else if(!this.isSameDate(compare_to, 'hour')){\n return false\n }else{\n return this.minutes < compare_to.minutes\n }\n default:\n return this.ms < compare_to.ms;\n }\n }\n\n public toZone(tz: string): DateTZ {\n const newDate = new DateTZ({\n ...this, \n date: this.date.setZone(tz), \n building_tz: tz, \n is_local_tz: false\n })\n return newDate\n }\n\n public setTimestamp(timestamp: number): DateTZ {\n const newDate = new DateTZ({\n ...this, \n date: timestamp,\n })\n return newDate\n }\n\n public get JSDate(): Date {\n return this.date.toJSDate()\n }\n\n // helper to log out the dateTZ values\n public logDateTz (label: string = ''): void {\n console.log(`${label} local tz/date/time`, this.addValue({ seconds: 0 }).formatLocalDate(\"cccc d MMMM,yyyy h:mma\"), this.local_tz)\n console.log(`${label} building tz/date/time`, this.addValue({ seconds: 0 }).formatDate(\"cccc d MMMM,yyyy h:mma\"), this.building_tz)\n }\n}\n\nexport const DateNow = (date: Date = new Date()) => {\n return new DateTZ({date: date.valueOf()})\n} \n\n// input the local time and the building timezone\nexport const convertLocalTimestampToTimezonedDateTz = (timestamp: number, buildingTimezone: string): DateTZ => {\n const date = new Date(timestamp);\n return new DateTZ({ date: timestamp, building_tz: buildingTimezone, is_local_tz: false }).setValue({\n day: date.getDate(),\n hour: date.getHours(),\n minute: date.getMinutes()\n });\n}\n\n// input the building time and the building timezone\nexport const convertTimezonedTimestampToLocalDateTz = (timestamp: number, buildingTimezone: string): DateTZ => {\n const local_tz = DateTime.now().zoneName;\n const localOffset = getTimezoneOffset(local_tz, new Date(timestamp));\n const desiredOffset = getTimezoneOffset(buildingTimezone, new Date(timestamp));\n if (localOffset > desiredOffset) {\n const eleA = timestamp + (localOffset - desiredOffset);\n return new DateTZ({date: eleA, building_tz: buildingTimezone, is_local_tz: false});\n } else {\n const eleA = timestamp + (desiredOffset - localOffset);\n return new DateTZ({date: eleA, building_tz: buildingTimezone, is_local_tz: false});\n }\n}\n\nexport const localTimezone = () => {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n}\n\nexport const getTimezoneOffsetString = (tz: string) => {\n const offset_minutes = Math.floor(getTimezoneOffset(tz) / 1000 / 60);\n const hours = Math.floor(offset_minutes/60);\n const minutes = offset_minutes % 60;\n return `${offset_minutes > 0 ? '+' : '-'}${padZero(Math.abs(hours), 2)}${padZero(minutes, 2)}`;\n}\n\nexport function toMiddayUTC(value: DateTZ = DateNow()) {\n // exclude Auckland from rouding up timezone as it has 12+ hours UTC timezone difference\n return value.building_tz.includes('Auckland') ? value : new DateTZ({\n date: value.setValue({ hour: 12, minute: 0 }).ms,\n is_local_tz: false,\n building_tz: 'UTC',\n }).setValue({ hour: 12, minute: 0 });\n}\n\n/**returns the offset between two timezones in minutes and hours */\nexport function timezoneOffset(tz: string){\n const nowTz = DateNow(new Date())\n const offset = nowTz.date.offset - nowTz.toZone(tz).date.offset\n return {minutes: offset, hours: offset/60}\n}\n\nexport function isToday (date, timezone) {\n\n return new DateTZ({\n date: toMiddayUTC(date).ms,\n is_local_tz: false,\n building_tz: timezone\n }).isSameDate(\n new DateTZ({\n date: Date.now(),\n is_local_tz: false,\n building_tz: timezone,\n }),\n 'day'\n );\n}\n","export * from './lib/environment.module';\nexport * from './lib/version';\nexport * from './lib/environment.service'\nexport * from './lib/types'\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n providers: []\n})\nexport class EnvironmentModule {\n}\n","import {\n Inject,\n Injectable\n} from '@angular/core';\nimport { EnvironmentData } from './types';\n\nexport const ENVIRONMENT_TOKEN = 'environments_service_data';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EnvironmentService {\n\n public get production(): boolean {\n return this.environment.production;\n }\n\n public get heap_io_id(): number {\n return this.environment.heap_io_id;\n }\n\n constructor(@Inject(ENVIRONMENT_TOKEN) private environment: EnvironmentData) {\n }\n}\n","// IMPORTANT: THIS FILE IS AUTO GENERATED! DO NOT MANUALLY EDIT OR CHECKIN!\n/* tslint:disable */\nexport const VERSION = {\n \"dirty\": false,\n \"raw\": \"f71e31100\",\n \"hash\": \"f71e31100\",\n \"distance\": null,\n \"tag\": null,\n \"semver\": null,\n \"suffix\": \"f71e31100\",\n \"semverString\": null,\n \"version\": \"0.0.0\",\n \"time\": 1730271155891\n};\n/* tslint:enable */\n","export * from './lib/legacy-overlays.module';\nexport * from './lib/space-select-modal/space-select-modal.component';\nexport * from './lib/new-user-modal/new-user-modal.component';\nexport * from './lib/confirm-modal/confirm-modal.component';\nexport * from './lib/catering-confirm-modal/catering-confirm-modal.component';\nexport * from './lib/catering-details-modal/catering-details-modal.component';\nexport * from './lib/requirement-details-modal/requirement-details-modal.component';\nexport * from './lib/booking-confirm/booking-confirm.component';\nexport * from './lib/user-form/user-form.component'\nexport * from './lib/booking-form/booking-form.component'\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n OnInit,\n Output,\n Renderer2,\n ViewChild\n} from '@angular/core';\nimport {\n MAT_DIALOG_DATA,\n MatDialogRef\n} from '@angular/material/dialog';\nimport { Router } from '@angular/router';\n\nimport {\n ApplicationService,\n Booking,\n BookingsService,\n BookingStateService,\n CateringOrder,\n getFirstDateFromList,\n OrganisationService,\n rulesForSpace,\n recurrenceDetails,\n SeriesAction,\n SettingsService,\n Space,\n SpacesService,\n User,\n UsersService,\n formatWhen,\n BOOKING_STATUS,\n CloseDialogService,\n DialogIds\n} from '@mckinsey-converge/data-common';\nimport {\n BaseDirective,\n DialogEvent,\n HashMap,\n humaniseDuration\n} from '@mckinsey-converge/base';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ConflictsModalComponent, ConflictsModalComponentData } from '@mckinsey-converge/ui';\n\n\nexport interface BookingConfirmModalData {\n old_booking: Booking;\n booking: Booking;\n action?: SeriesAction\n}\n\nexport interface BookingDetailInfo {\n bookedBy: {\n display:boolean,\n value: string\n }\n}\n\n@Component({\n selector: 'a-booking-confirm-modal',\n templateUrl: './booking-confirm.component.html',\n styleUrls: ['./booking-confirm.component.scss']\n})\nexport class BookingConfirmComponent extends BaseDirective implements OnInit{\n /** Emitter for user actions on the modal */\n @Output() public event = new EventEmitter();\n /** Display string for changes are being processed */\n public loading: string;\n /** Whether space availability is being checked */\n public checking_available: boolean;\n /** Whether to show all attendees */\n public show_attendees: boolean = false;\n /** Whether to show all locations */\n public show_locations: boolean;\n /** Whether to show all catering orders */\n public show_orders: boolean;\n /** Whether booking has succeeded */\n public success: boolean;\n /** Whether booking needs to be accepted */\n public readonly is_request: boolean;\n\n public approved: boolean;\n public declined: boolean;\n public bookingDetails: BookingDetailInfo;\n lastMomentConflict: boolean = false;\n \n @ViewChild('attendeesListRef') attendeesListRef: ElementRef;\n @ViewChild('locationsListRef') locationsListRef: ElementRef;\n @ViewChild('cateringListRef') cateringListRef: ElementRef;\n\n /** Booking to confirm changes to */\n public get old_booking(): Booking {\n return this._data.old_booking;\n }\n\n /** Booking to confirm changes to */\n public get booking(): Booking {\n return this._data.booking;\n }\n\n /** Active user */\n public get user(): User {\n return this._users.current;\n }\n\n /** Title of the displayed event */\n public get title(): string {\n return this.booking.title;\n }\n\n /** Comapny names */\n public get company(): string[] {\n return this.booking.company;\n }\n \n\n /** Display string of when the event will occur */\n public get when(): string {\n const duration_value = this.booking.duration;\n const all_day = this.booking.all_day && duration_value < 25 * 60;\n if(this.booking.is_recurrent && this.booking.recurrence_starts && this.booking.recurrence_starts.length){\n return formatWhen({all_day, ...this.recurrenceDates })\n }\n return formatWhen({\n all_day,\n startTZ: this.booking.startDateTz,\n endTZ: this.booking.endDateTz,\n displayEndTZ: this.booking.displayEndDateTz})\n }\n\n public get recurrenceDates(){\n const startTZ = getFirstDateFromList(this.booking.recurrence_starts)\n const endTZ = startTZ.addValue({minutes: this.booking.duration})\n return {startTZ, endTZ, displayEndTZ: endTZ}\n }\n\n /** Display string for the recurrence value of the booking */\n public get recurrence(): string {\n return recurrenceDetails({\n period: this.booking.recurrence_period,\n end: this.booking.recurrence_endTz,\n list: this.booking.recurrence_starts,\n interval: this.booking.recurrence_interval\n });\n }\n\n /** Display string for the event's duration */\n public get duration(): string {\n const duration_value = this.booking.duration;\n return this.booking.all_day ? 'All Day' : humaniseDuration(duration_value);\n }\n\n /** List of spaces associated with the event */\n public get spaces(): Space[] {\n return this.booking.multi_rooms;\n }\n\n /** List of attendees associated with the event not including the host */\n public get attendees(): User[] {\n const attendees = this.booking.attendees;\n return attendees.filter((i) => i.email !== this.organiser.email);\n }\n\n /** Host of the event */\n public get organiser(): User {\n return this.booking.organiser || this._users.current;\n }\n\n /** Host of the event */\n public get equipment_codes(): HashMap {\n return this.booking.equipment_codes || {};\n }\n\n /** Host of the event */\n public get catering_codes(): HashMap {\n const catering = this.catering;\n const codes = {};\n for (const order of this.catering) {\n codes[order.location_id] = order.charge_code;\n }\n return codes;\n }\n\n /** Host of the event */\n public get equipment_notes(): HashMap {\n return this.booking.notes\n .filter((note) => note.type === 'equipment')\n .reduce((map, notes) => {\n map[notes.space] = notes.message;\n return map;\n }, {});\n }\n\n /** Details about the event */\n public get notes(): string {\n return this.booking.body;\n }\n\n /** List of catering orders in the booking */\n public get catering(): CateringOrder[] {\n return (this.booking.catering || []).map((order) => {\n const space: any = this.spaces.find(\n (a_space) => a_space.email === order.location_id\n ) || {\n level: {}\n };\n const building: any =\n this._org.buildings.find((bld) => bld.id === space.level.building_id) || {};\n return new CateringOrder({\n ...order,\n location: space.local_name,\n symbol: building.currency,\n booking_date: this.booking.startDateTz.ms,\n booking_timezone: this.booking.timezone,\n });\n });\n }\n\n /** Map of changes to the booking */\n public get changes(): HashMap {\n return {};\n }\n\n constructor(\n private _service: ApplicationService,\n private _users: UsersService,\n private _org: OrganisationService,\n private _bookings: BookingsService,\n private _booking_state_service: BookingStateService,\n private _spaces: SpacesService,\n private _router: Router,\n private _dialog: MatDialog,\n private _dialog_ref: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private _data: BookingConfirmModalData,\n public settings: SettingsService,\n private closeDialogService: CloseDialogService, \n private renderer: Renderer2,\n ) {\n super();\n this.booking.time_changed =\n this.old_booking &&\n (this.old_booking.startDateTz.ms !== this.booking.startDateTz.ms ||\n this.old_booking.duration !== this.booking.duration);\n // in concierge, all bookings are acceptable without explicit approval.\n\n const rules = rulesForSpace({ user: this.user, space: this.booking.room, duration: 60 });\n this.is_request = this.settings.concierge ? false : rules.auto_approve;\n }\n\n ngOnInit(): void {\n this.approved = this.booking.status === BOOKING_STATUS.approved;\n this.declined = this.booking.status === BOOKING_STATUS.declined; \n // test comment\n const {creator, organiser, booker_concierge} = this.booking;\n this.bookingDetails = {\n bookedBy: {\n display: creator && ( creator.email !== organiser.email || (creator.email === organiser.email && (booker_concierge !== null && booker_concierge !==undefined ) && organiser.email !==booker_concierge['email']) ),\n value: (creator.email === organiser.email && booker_concierge !== null && (booker_concierge['email'] && organiser.email !==booker_concierge['email']) ) ? booker_concierge['name'] || booker_concierge['email'] : creator?.name || creator.email\n }\n }\n }\n\n /**\n * Save booking changes\n */\n public saveChanges() {\n this.loading = 'Checking availability of selected spaces';\n this._dialog_ref.disableClose = true;\n this.checkSpaceAvailability().then(\n () => {\n this.loading = 'Processing booking request...';\n // Change the unchanged settings to the selected room\n const newEmail = this.booking.space.email;\n const replaceObjects = ['setup', 'breakdown', 'approval_status']\n replaceObjects.forEach(key => {\n const obj = this.booking[key];\n if (obj && obj.constructor === Object) {\n const keys = Object.keys(obj);\n if (keys.length > 0) {\n const replacement = {};\n keys.forEach(nk => {\n replacement[newEmail] = obj[nk];\n })\n this.booking[key] = replacement;\n }\n }\n });\n\n const buffer = {};\n this.booking.multi_rooms.map(room => room.email).forEach(elem => buffer[elem] = 900);\n\n // // if no setup or breakdown time already added and notes or catering exist? add 15 min buffer setup and breakdown to booking\n // if(this.booking.setup === null || this.booking.breakdown === null){\n // const has_note_buffer = (this.booking.notes && this.booking.notes?.length) || (this.booking.catering && this.booking.catering?.length) ? \n // buffer : null; // 900 seconds = 15 min\n // if (has_note_buffer) {\n // this.booking.setup = has_note_buffer;\n // this.booking.breakdown = has_note_buffer; \n // this.booking.room_setup = has_note_buffer; \n // this.booking.room_breakdown = has_note_buffer; \n // }\n // }\n\n // if no setup time already added and notes or catering exist? add 15 min buffer setup time to booking\n if (this.booking.setup === null || this.booking.setup === undefined) {\n const has_note_buffer = (this.booking.notes && this.booking.notes.length) || \n (this.booking.catering && this.booking.catering.length) ? \n buffer : null; // 900 seconds = 15 min\n if (has_note_buffer) {\n this.booking.setup = has_note_buffer;\n this.booking.room_setup = has_note_buffer;\n }\n }\n\n // if no breakdown time already added and notes or catering exist? add 15 min buffer breakdown time to booking\n if (this.booking.breakdown === null || this.booking.breakdown === undefined) {\n const has_note_buffer = (this.booking.notes && this.booking.notes.length) || \n (this.booking.catering && this.booking.catering.length) ? \n buffer : null; // 900 seconds = 15 min\n if (has_note_buffer) {\n this.booking.breakdown = has_note_buffer;\n this.booking.room_breakdown = has_note_buffer;\n }\n }\n\n\n this._bookings.save(this.booking, this._data.action === SeriesAction.EDIT).then(\n async (bkn) => {\n this.loading = null;\n this.success = true;\n this._dialog_ref.disableClose = false;\n const updated = new Booking({ ...this.booking, ...bkn.toApiJSON() });\n this._booking_state_service.replace(updated);\n \n /**\n * update the master booking in case of recurring to have latest updated in the system\n */\n if(updated.recurrence_master_id !== null)\n { \n const master_booking = await this._bookings.show(updated.recurrence_master_id);\n this._booking_state_service.replace(master_booking);\n }\n\n if (bkn.is_recurrent && bkn.recurrence_type === 'master') {\n this._booking_state_service.pollOnce();\n this.closeDialogService.closeDialog(DialogIds.MeetingDetails);\n }\n\n localStorage.removeItem('ACA_STAFF.booking_form_data');\n this.event.emit({ reason: 'done' });\n this._service.notifySuccess(\n `Successfully ${this.booking.id ? 'updated' : 'created'} booking`\n );\n },\n (err) => {\n\n this._dialog_ref.disableClose = false;\n let erroMessage: string = '';\n switch(err.status){\n\t\t\t\t\t\t\t\t\t\t\t\t\tcase 400:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\terroMessage = 'Apologies, the booking cannot be finalized because the current time has exceeded the scheduled start time for this booking. Please try again.';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t\tcase 409:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\terroMessage = 'Apologies, this room has been booked recently by another user, please try another one.';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.lastMomentConflict = true;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n this.loading = erroMessage;\n this._service.notifyError(\n `Error ${this.booking.id ? 'updating' : 'creating'} booking: ${erroMessage}`\n );\n setTimeout(()=> {\n this.loading = null;\n this.event.emit({ reason: 'last-moment-conflict' });\n }, 4000) ;\n }\n );\n },\n (err) => {\n\n this.lastMomentConflict = true;\n this._dialog_ref.disableClose = false;\n const erroMessage = 'Apologies, this room has been booked recently by another user, please try another one.';\n this.loading = erroMessage;\n this._service.notifyError(\n `Error ${this.booking.id ? 'updating' : 'creating'} booking: ${erroMessage}`\n );\n setTimeout(()=> {\n this.loading = null;\n this.event.emit({ reason: 'last-moment-conflict' });\n }, 4000) ;\n }\n );\n }\n\n /**\n * Staff only\n */\n public newBooking() {\n this._router.navigate(['/book', 'spaces']);\n this._dialog_ref.close();\n }\n\n /**\n * Staff only\n */\n public toSchedule() {\n this._router.navigate(['/schedule'], {\n queryParams: { email: this.booking.organiser.email }\n });\n this._dialog_ref.close();\n }\n\n /**\n * Check whether the selected spaces are available for the selected time period\n */\n public checkSpaceAvailability(): Promise {\n const spaces: Space[] = this.spaces;\n if (\n (this.booking.id &&\n (this.booking.startDateTz.ms === this.old_booking.startDateTz.ms &&\n this.booking.duration === this.old_booking.duration)) ||\n (spaces && spaces.length <= 0)\n ) {\n return Promise.resolve();\n }\n return new Promise((resolve, reject) => {\n // Use of this.booking.timezone is unreliable, use booking space instead.\n const all_day = this.booking.all_day;\n // R--- should be nothing to do with date as a timestamp getter\n this._spaces\n .available({\n room_ids: spaces.map((space) => space.id).join(','),\n dateTz: this.booking.startDateTz,\n duration: all_day ? 24 * 60 : this.booking.duration,\n ignore: this.booking.icaluid,\n recurrence_count: this.booking.recurrence_count,\n recurrence_period: this.booking.recurrence_period,\n recurrence_endTz: this.booking.recurrence_endTz,\n recurrence_interval: this.booking.recurrence_interval,\n recurrence_starts: this.booking.recurrence_starts,\n is_recurrent: this.booking.is_recurrent,\n recurrence_days: this.booking.recurrence_days\n })\n .then(\n (space_list) => {\n for (const space of space_list) {\n if (!space.bookable) {\n this.lastMomentConflict = true;\n return reject(\n `${space.name} is not available at the select time period.`\n );\n }\n }\n if (space_list.length < spaces.length) {\n this.lastMomentConflict = true;\n return reject(\n `${spaces[0].name} is not available at the select time period.`\n );\n }\n resolve();\n },\n (err) => reject(err)\n );\n });\n }\n\n public openConflictsModal(){\n const ref = this._dialog.open(ConflictsModalComponent, {\n maxWidth: '95vw',\n width: '32em',\n data: {\n room_name: this.booking.local_room_name,\n conflicts: this.booking.recurrence_exceptions,\n copy_conflicts: true,\n timezone: this.booking.timezone\n }\n });\n\n this.subscription(\n 'modal_events',\n ref.componentInstance.event.subscribe((event: DialogEvent) => {\n if(event.reason === 'close'){\n ref.close();\n }else if(event.reason === 'action'){\n navigator.clipboard.writeText(this.conflictsText)\n }\n \n })\n );\n ref.afterClosed().subscribe(() => this.unsub('modal_events'));\n }\n\n public get conflictsText(){\n let text = ''\n this.booking.recurrence_exceptions.map((date)=>{\n const dateTZ = new DateTZ({date: date*1000});\n const display = dateTZ.formatDate('ccc dd MMM yyyy');\n text = `${text}\\n${display}${dateTZ.isSameDate(DateNow(new Date()), 'day') ? ' (Today)' : ''}`;\n })\n return text\n }\n\n public toggleList(listType: 'attendees' | 'locations' | 'catering') {\n if (listType === 'attendees') {\n this.show_attendees ? this.collapseList(this.attendeesListRef) : this.expandList(this.attendeesListRef);\n this.show_attendees = !this.show_attendees;\n } else if (listType === 'locations') {\n this.show_locations ? this.collapseList(this.locationsListRef) : this.expandList(this.locationsListRef);\n this.show_locations = !this.show_locations;\n } else if (listType === 'catering') {\n this.show_orders ? this.collapseList(this.cateringListRef) : this.expandList(this.cateringListRef);\n this.show_orders = !this.show_orders;\n }\n }\n\n public expandList(listRef: ElementRef) {\n const listElement = listRef.nativeElement;\n const listItems = listElement.getElementsByClassName('list-item');\n let totalHeight = 0;\n\n for (let i = 0; i < listItems.length; i++) {\n totalHeight += listItems[i].offsetHeight;\n }\n\n this.renderer.setStyle(listElement, 'max-height', `${totalHeight}px`);\n this.renderer.addClass(listElement, 'shown');\n }\n\n public collapseList(listRef: ElementRef) {\n const listElement = listRef.nativeElement;\n this.renderer.setStyle(listElement, 'max-height', '4.5em');\n this.renderer.removeClass(listElement, 'shown');\n }\n}\n","\n \n\n\n
\n \n \n \n \n
\n
\n\n
\n
\n
\n \n
\n
\n {{ loading }}\n
\n
\n
\n
\n\n \n \n \n
My Day\n \n\n","import {\n Component,\n Input,\n OnInit, ChangeDetectionStrategy, ChangeDetectorRef, Output, EventEmitter \n} from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { MatDialog } from '@angular/material/dialog';\nimport { distinctUntilChanged, first, skip } from 'rxjs/operators';\n\nimport {\n BaseDirective,\n closestToTimeSlotTz,\n Identity,\n unique\n} from '@mckinsey-converge/base';\nimport {\n ApplicationService,\n arrayWithValues,\n BookingAction,\n CateringOrder,\n SeriesAction,\n SettingsService,\n User,\n UsersService\n} from '@mckinsey-converge/data-common';\n\nimport { NewUserModalComponent } from '../new-user-modal/new-user-modal.component';\nimport {\n SpaceSelectModalComponent,\n SpaceSelectModalData\n} from '../space-select-modal/space-select-modal.component';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { DateTime } from 'luxon';\nimport { MatChipsModule} from '@angular/material/chips';\n\n\n@Component({\n selector: 'a-booking-form',\n templateUrl: './booking-form.component.html',\n styleUrls: ['./booking-form.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BookingFormComponent extends BaseDirective implements OnInit {\n /** Form fields for booking */\n @Input() public form: FormGroup;\n /** List of available users to host bookings */\n public user_list: User[] = [];\n public nowTz: DateTZ = DateNow(new Date());\n /** From date input for date field */\n public fromDateTz: DateTZ = this.nowTz.setValue({ minute: Math.ceil(this.nowTz.minutes / 5) * 5 });\n /** Last bookable date, concierge only */\n public readonly untilDateTz = DateNow(new Date()).addValue({ days: 365 }).endOfValue('day');\n public isConcierge: boolean;\n public localTimezone = DateNow(new Date()).building_tz;\n public localStart = \"\";\n public localEnd = \"\";\n // Define an array to store selected company options\n public chipOptions: any[] = [];\n public showTimeCateringWarning: boolean = false;\n\n constructor(\n private _service: ApplicationService,\n private _users: UsersService,\n private _dialog: MatDialog,\n private settingsService: SettingsService,\n private cdRef: ChangeDetectorRef\n ) {\n super();\n this.isConcierge = this.settingsService.concierge;\n }\n\n public ngOnInit(): void {\n // Trim title \n // this.form.get('title').setValue(this.form.get('title').value.trim());\n\n this.chipOptions = [...this.form.controls.company.value];\n\n this.localTimezone = DateNow(new Date()).building_tz;\n const building_tz = (\n this.form.controls.action &&\n (\n this.form.controls.action.value === 'booking_clone' ||\n this.form.controls.action.value === 'clone' ||\n this.form.controls.action.value === 'edit' ||\n this.form.controls.action.value === 'booking_edit'\n ) &&\n this.form.controls.dateTz &&\n this.form.controls.dateTz.value\n ) ? this.form.controls.dateTz.value.building_tz : this.localTimezone;\n\n this.nowTz = new DateTZ({ date: Date.now(), is_local_tz: false, building_tz });\n this.fromDateTz = closestToTimeSlotTz(this.nowTz, 15);\n\n this._users.initialised.pipe(first((_) => _)).subscribe(() => {\n const user: User = this._users.current;\n const delegates = user.delegates.map(\n (del) => this._users.find(del.email) || new User({ email: del.email, name: del.email.split('@')[0] })\n );\n this.user_list = [user].concat(delegates);\n });\n\n this.updateCoachmarkTimes(this.form.controls.timezone.value);\n this.subscription('formChanges', this.form.valueChanges\n .pipe(\n skip(1), // initial form changes\n distinctUntilChanged())\n .subscribe(() => {\n this.timeout('update_coachmark', () => {\n this.updateCoachmarkTimes(this.form.controls.timezone.value);\n }, 500);\n })\n );\n\n this.subscription('isRecurrentChanges', this.form.controls.is_recurrent.valueChanges\n .subscribe(() => {\n const recurrenceStarts = this.form.controls.recurrence_starts\n if(!this.form.controls.is_recurrent.value){\n recurrenceStarts.clearValidators() \n }else{\n const arrayValidators = [Validators.required];\n arrayValidators.push(arrayWithValues);\n recurrenceStarts.setValidators(arrayValidators);\n }\n recurrenceStarts.updateValueAndValidity()\n })\n ); \n\n /**Disable Inputs */\n this.disableInputs();\n\n /**turn is_recurrent to false if editing or cloning a stand-alone/occurrence */\n if(this.form.controls.id?.value && !this.form.controls.action?.value){\n this.form.controls.is_recurrent.setValue(false)\n }\n\n // Subscribe to changes in dateTz, duration, and has_catering\n this.subscription('dateTz_changes', this.form.controls.dateTz.valueChanges.subscribe(() => {\n this.checkTimeCateringWarning();\n }));\n\n this.subscription('duration_changes', this.form.controls.duration.valueChanges.subscribe(() => {\n this.checkTimeCateringWarning();\n }));\n\n // No need to subscribe to catering_changes since we're now handling has_catering\n this.subscription('has_catering_changes', this.form.controls.has_catering.valueChanges.subscribe(() => {\n this.checkTimeCateringWarning();\n }));\n\n // Initial check\n this.checkTimeCateringWarning();\n}\n\n /**\n * \n * @param key : formcontrol name \n * Function trim value being submitted with only spaces/beginning/end \n */\n public trim(key: string): void {\n this.form.get(key).setValue(this.form.get(key).value.trim());\n }\n\n /** Whether notes and description should use the HTML editor */\n public get use_html(): boolean {\n return this._service.setting('app.booking.html_body') || false;\n }\n\n /** List of available types for bookings */\n public get booking_types(): Identity[] {\n return this._service.setting('app.booking.booking_types') || [];\n }\n\n /** Display string for the list of active spaces */\n public get spaces(): string {\n const spaces = this.form.controls.space_list.value;\n return spaces.length === 1\n ? spaces[0].local_name\n : spaces.length > 1\n ? `${spaces.length} spaces selected`\n : 'No Spaces selected';\n }\n\n public disableInputs() {\n const { id, action, needs_space, is_recurrent } = this.form.value;\n const has_id = !!id;\n const is_edit = action === BookingAction.EDIT;\n if (has_id) {\n this.form.get('is_recurrent')?.disable();\n }\n\n if(is_edit){\n this.form.get('is_multiroom')?.disable();\n }\n\n if (!this.isConcierge && !needs_space) {\n this.form.get('has_catering')?.disable();\n }\n if(has_id && is_edit && is_recurrent){\n this.form.get('dateTz')?.disable()\n this.form.patchValue({ action: null });\n }\n }\n\n /**\n * Open modal to change the space details for the booking\n */\n public openSpacesModal(): void {\n const ref = this._dialog.open(\n SpaceSelectModalComponent,\n {\n width: 'auto',\n height: 'auto',\n maxWidth: '95vw',\n data: {\n spaces: this.form.controls.space_list.value,\n dateTz: this.form.controls.dateTz.value,\n duration: this.form.controls.duration.value,\n host: this.form.controls.organiser.value,\n multiple: true,\n needsCatering: !!this.form.controls.catering?.value?.length,\n }\n }\n );\n this.subscription(\n 'new_spaces',\n ref.componentInstance.event.subscribe((event) => {\n /* istanbul ignore else */\n if (event.reason === 'done') {\n let space_list = this.form.controls.space_list.value;\n space_list = event.metadata;\n this.form.controls.space_list.setValue(unique(space_list, 'id'));\n const catering = this.form.controls?.catering?.value.map((order: CateringOrder) => {\n order.location = space_list[0].name;\n order.location_id = space_list[0].email;\n return order;\n })\n this.form.controls.catering?.setValue(catering || [])\n ref.close();\n this.unsub('new_spaces');\n }\n if (event.reason === 'close') {\n ref.close();\n this.unsub('new_spaces');\n }\n })\n );\n }\n\n /**\n * Open modal to change the recurrence details for the booking\n */\n public openNewUserModal() {\n const ref = this._dialog.open(NewUserModalComponent, {\n width: 'auto',\n height: 'auto'\n });\n this.subscription(\n 'new_user',\n ref.componentInstance.event.subscribe((event) => {\n /* istanbul ignore else */\n if (event.reason === 'done') {\n const attendees = this.form.controls.attendees?.value;\n attendees.push(event.metadata);\n this.form.controls.attendees.setValue(unique(attendees, 'email'));\n ref.close();\n this.unsub('new_user');\n this.cdRef.detectChanges();\n }\n })\n );\n }\n\n // Add & Remove chip and set the value of the form control accordingly\n addCompany(event, company): void {\n if (company) {\n this.chipOptions.push(company);\n this.form.controls.company.setValue(this.chipOptions);\n }\n event.preventDefault();\n }\n\n removeOption(option: any): void {\n const index = this.chipOptions.indexOf(option);\n if (index >= 0) {\n this.chipOptions.splice(index, 1);\n }\n this.form.controls.company.setValue(this.chipOptions);\n }\n\n private updateCoachmarkTimes(timezone: string) {\n if (!timezone) timezone = this.localTimezone;\n // Resolve the problem that locally I might have the same TZ offset but the names don't match.\n const localTzOffset = DateTime.now().setZone(this.localTimezone).offset;\n const buildingTzOffset = DateTime.now().setZone(timezone).offset;\n const dateTz = this.form.controls.dateTz.value;\n if (dateTz && localTzOffset !== buildingTzOffset) {\n const startDate = dateTz.clone();\n this.localStart = startDate.formatLocalDate(\"h:mma\");\n this.localEnd = startDate.addValue({ minutes: this.form.value.duration }).formatLocalDate(\"h:mma\");\n } else {\n // No location is selected so coachmark is hidden\n this.localStart = \"\";\n this.localEnd = \"\";\n }\n this.cdRef.detectChanges();\n }\n\n public get isSeriesAction(){\n return this.form.value.action === SeriesAction.CLONE || this.form.value.action === SeriesAction.EDIT\n }\n\n onToggleChange(toggledControlName: string, is_multiroom: boolean): void {\n if (toggledControlName === 'is_recurrent') {\n // If the is_recurrent toggle is being activated, deactivate is_multiroom\n if (this.form.controls.is_recurrent?.value) {\n this.form.controls.is_multiroom?.setValue(false);\n this.form.controls.merged?.setValue(false);\n this.form.get('merged')?.disable();\n\n }\n } else if (toggledControlName === 'is_multiroom') {\n // If the is_multiroom toggle is being activated, deactivate is_recurrent\n if (this.form.controls.is_multiroom?.value) {\n this.form.controls.is_recurrent?.setValue(false);\n }\n if(is_multiroom) { \n this.form.get('merged').setValue(false);\n this.form.get('merged')?.enable() \n } else {\n this.form.get('merged').setValue(false); \n this.form.get('merged')?.disable(); }\n }\n }\n \n private checkTimeCateringWarning() {\n const dateTz = this.form.controls.dateTz.value;\n const duration = this.form.controls.duration.value;\n const hasCatering = this.form.controls.has_catering?.value;\n const cateringOrders = this.form.controls.catering?.value;\n \n if (dateTz && duration && hasCatering && cateringOrders && cateringOrders.length > 0) {\n // Create DateTime object for the start time\n const startDateTime = DateTime.fromISO(dateTz.date, { zone: dateTz.building_tz });\n \n // Calculate the end time\n const endDateTime = startDateTime.plus({ minutes: duration });\n \n // Get the date part of the startDateTime\n const bookingDate = startDateTime.startOf('day');\n\n // Define 7 am and 8 pm on the booking date\n const dayStartAt7am = bookingDate.set({ hour: 7 });\n const dayEndAt8pm = bookingDate.set({ hour: 20 });\n\n // Check if booking ends before or at 7 am, or starts at or after 8 pm\n if (endDateTime <= dayStartAt7am || startDateTime >= dayEndAt8pm) {\n // Booking is outside of catering hours and has catering selected\n this.showTimeCateringWarning = true;\n } else {\n this.showTimeCateringWarning = false;\n }\n } else {\n this.showTimeCateringWarning = false;\n }\n\n // Inform Angular that the component needs to be checked\n this.cdRef.markForCheck();\n }\n\n}\n","
\n \n \n \n
\n
\n \n Title*:\n \n \n \n\n \n {{ ( form?.get('title').errors && form?.get('title').hasError('pattern')) \n ? 'Some special characters (^=`~!@#$%*{};:\\'_\\\",.\\<>) are not allowed' : 'Title is required'}} \n \n \n
\n\n
\n \n
\n \n \n
\n Date and time must be in the future\n
\n
\n
\n
\n
\n \n \n
\n Date and time must be in the future\n
\n
\n
\n
\n \n \n
\n \n
\n Duration is invalid. End time must be in the future\n
\n
\n
\n
\n Please be aware that this booking starts at {{localStart}} and ends at {{localEnd}} in your local timezone.\n
\n
\n Warning: Changing the booking time outside of catering hours will drop your catering order.\n
\n
\n
\n
\n
\n Recurring booking\n
\n \n
\n Multiroom\n
\n
\n \n
\n
Merged
\n
\n \n
\n
\n \n \n
\n \n \n \n \n \n {{ user.name || user.email }}\n \n \n \n
\n
\n \n \n \n {{ form?.get('attendees').errors?.customError }}\n \n
\n
\n \n
\n \n
\n \n
\n \n \n {{ ( form?.get('company').errors && form?.get('company').hasError('pattern'))\n ? 'Some special characters (^=`~@#$%*{};:_\\\",.\\<>) are not allowed' : ''}}\n \n
\n \n
\n \n \n {{ selected }}\n
\n
\n
\n
\n\n
1\">\n \n \n \n \n {{ type.name }}\n \n \n \n
\n
\n Need a meeting space?\n \n
\n
\n \n \n Need catering?\n \n
\n
\n \n \n \n \n \n \n \n
\n\n","import {\n Component,\n EventEmitter,\n Inject,\n OnInit,\n Output\n} from '@angular/core';\nimport {\n MAT_DIALOG_DATA,\n MatDialogRef\n} from '@angular/material/dialog';\nimport {\n FormControl,\n FormGroup\n} from '@angular/forms';\n\nimport {\n ApplicationService,\n CateringItem,\n OrganisationService,\n Space,\n SpacesService\n} from '@mckinsey-converge/data-common';\nimport {\n BaseDirective,\n DialogEvent\n} from '@mckinsey-converge/base';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\n\n\nexport interface CateringConfirmModalData {\n all_day: boolean;\n form: FormGroup;\n dateTz: DateTZ;\n}\n\n@Component({\n selector: 'a-catering-confirm-modal',\n templateUrl: './catering-confirm-modal.component.html',\n styleUrls: ['./catering-confirm-modal.component.scss']\n})\nexport class BookingCateringConfirmModalComponent extends BaseDirective implements OnInit {\n /** Emitter for user actions on the modal */\n @Output() public event = new EventEmitter();\n /** List of selected items for the order */\n public item_list: CateringItem[] = [];\n\n /** Space selected for delivery */\n public get space(): Space {\n return this._spaces.find(this._data.form?.controls?.location_id?.value);\n }\n\n /** Delivery time for the order */\n public get delivery_time(): string {\n let date = this._data.dateTz;\n if (this._data.form && this._data.form.controls.delivery_time) {\n date = date.addValue({ minutes: this._data.form.controls.delivery_time.value });\n }\n return date.formatDate('h:mma').toLocaleLowerCase();\n }\n\n /** Form field for order items */\n public get item_field(): FormControl {\n return this._data.form.controls.items as any;\n }\n\n /** Total cost of the order */\n public get order_cost(): number {\n return this.item_list.reduce((amount, item) => {\n const price = item.price\n return amount + item.amount * price\n }, 0);\n }\n\n /** Currency symbol for the selected space */\n public get symbol(): string {\n /* istanbul ignore else */\n if (!this.space || !this.space.level) {\n return 'USD';\n }\n const building = this._org.buildings.find(\n (bld) => bld.id === this.space.level.building_id\n ) || { currency: 'USD' };\n return building.currency;\n }\n\n constructor(\n private _service: ApplicationService,\n private _org: OrganisationService,\n private _spaces: SpacesService,\n private _dialog_ref: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private _data: CateringConfirmModalData\n ) {\n super();\n if (!this._data.form) {\n this._service.notifyError('No form data for order');\n this._dialog_ref.close();\n }\n }\n\n public ngOnInit(): void {\n /* istanbul ignore else */\n if (this._data.form.controls.items) {\n this.subscription(\n 'item_list',\n this._data.form.controls.items.valueChanges.subscribe((items) => {\n /* istanbul ignore else */\n if (!items || items.length <= 0) {\n this._dialog_ref.close();\n }\n })\n );\n }\n this.item_list = this._data.form.controls.items.value.map((item) => new CateringItem(item.toJSON()));\n }\n}\n","
\n
Confirm Catering Order
\n \n
\n\n
\n
\n Delivering to {{ space?.local_name || '<Unset>' }} at {{ delivery_time }}\n
\n
\n \n
\n
\n \n
{{ order_cost / 100 | currency:symbol }}
\n
\n
\n
\n\n
\n \n
\n
\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n OnInit,\n Output,\n ViewChild\n} from '@angular/core';\nimport {\n AbstractControl,\n FormControl,\n FormGroup,\n Validators\n} from '@angular/forms';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\n\nimport {\n OrganisationService,\n BookingNote,\n CateringOrder,\n Space,\n UsersService,\n CateringNotesService,\n Booking\n} from '@mckinsey-converge/data-common';\nimport {\n DialogEvent,\n HashMap\n} from '@mckinsey-converge/base';\n\nimport { DateNow } from '@mckinsey-converge/date-tz';\n\n\nexport interface CateringDetailsModalData {\n spaces: Space[];\n notes_field: AbstractControl;\n catering: AbstractControl;\n booking: Booking\n}\n\n@Component({\n selector: 'a-catering-details-modal',\n templateUrl: './catering-details-modal.component.html',\n styleUrls: ['./catering-details-modal.component.scss']\n})\nexport class CateringDetailsModalComponent implements OnInit {\n /** Emitter for modal events */\n @Output() public event = new EventEmitter();\n /** Mapping of spaces to notes */\n public notes: HashMap = {};\n /** Mapping of spaces to cost codes */\n public codes: HashMap = {};\n /** Mapping of spaces to estimated head count */\n public head_counts: HashMap = {};\n /** Mapping of spaces to form fields */\n public form: HashMap = {};\n /** Map of spaces to whether they need a charge code */\n public needs_charge_code: HashMap = {};\n /** Index of the active space */\n public active_space: number = 0;\n\n @ViewChild('content', { static: true }) private _content_el: ElementRef;\n\n /** List of selected spaces */\n public get space_list(): Space[] {\n return (this._data.spaces || []).filter((space) =>\n this._data.catering.value.find((order) => order.location_id === space.email)\n );\n }\n\n public get active_form(): FormGroup {\n return this.form[this.space_list[this.active_space].email];\n }\n\n public get invalid_charge_code(): boolean {\n return this.active_form.controls.code.errors?.pattern || this.active_form.controls.code.errors?.minlength;\n }\n\n /** Whether form fields are valid */\n public get is_valid(): boolean {\n return this.space_list.reduce(\n (valid, space) => valid && this.form[space.email].valid,\n true\n );\n }\n\n constructor(\n private _org: OrganisationService,\n private _users: UsersService,\n private _cateringNotesService: CateringNotesService,\n @Inject(MAT_DIALOG_DATA) private _data: CateringDetailsModalData\n ) {\n }\n\n public ngOnInit(): void {\n const note_list = this._data.notes_field.value.filter(\n (note: BookingNote) => note.type === 'catering'\n );\n this.notes = note_list.reduce((map, note) => {\n map[note.space] = note.message;\n return map;\n }, {});\n this.codes = this._data.catering.value.reduce((map, order: CateringOrder) => {\n map[order.location_id] = order.charge_code;\n return map;\n }, {});\n this.generateFormFields();\n }\n\n public submit(): void {\n this.space_list.forEach((space) => this.form[space.email].markAllAsTouched());\n /* istanbul ignore else */\n if (this.is_valid) {\n // Update notes\n const notes = this._data.notes_field.value.filter(\n (note: BookingNote) => note.type !== 'catering'\n );\n const new_notes = this.space_list.map(\n (space) =>\n ({\n author: this._data.booking.booked_by ? this._data.booking.booked_by['name'] : this._users.current.name,\n type: 'catering',\n message: this.form[space.email].controls.notes.value,\n space: space.email,\n date: DateNow(new Date()).ms\n } as BookingNote)\n );\n this._cateringNotesService.setNotes(new_notes);\n this._data.notes_field.setValue(notes.concat(new_notes).filter((note) => note.message));\n // Save the notes\n const orders = this._data.catering.value.map(\n (order) =>\n new CateringOrder({\n ...order,\n charge_code: this.form[order.location_id]\n ? this.form[order.location_id].controls.code.value\n : ''\n })\n );\n\n this._data.catering.setValue(orders);\n // This should go to the next\n this.event.emit({ reason: 'done' });\n } else {\n this._scrollToBottom();\n }\n }\n\n /** Generate form fields for each space */\n private generateFormFields(): void {\n for (const space of this.space_list) {\n const building = this._org.buildings.find(\n bld => bld.id === space.level.building_id\n );\n \n this.needs_charge_code[space.email] = space?.filters?.charge_code || space?.settings?.charge_code || false;\n this.form[space.email] = new FormGroup({\n notes: new FormControl(this.notes[space.email] || ''),\n code: new FormControl(this.codes[space.email] || '',\n this.needs_charge_code[space.email] ?\n [Validators.pattern(/^[a-zA-Z0-9]{4,}$/), Validators.minLength(4), Validators.required ] : [Validators.pattern(/^[a-zA-Z0-9]{4,}$/), Validators.minLength(4)])\n });\n }\n }\n\n /** Scroll the content container to the bottom */\n private _scrollToBottom(): void {\n this._content_el?.nativeElement.scrollTo({\n top: this._content_el.nativeElement.scrollHeight,\n left: 0,\n behavior: 'smooth'\n });\n }\n}\n","
\n
\n \n \n \n
\n \n
\n\n
\n
\n \n
Please specify any allergies or gluten intolerances
\n
\n
\n
\n \n \n \n \n
\n
\n \n Charge Code\n *\n \n \n \n \n Note: Your booking will be confirmed before you are charged.\n \n \n {{ invalid_charge_code ? 'Valid Charge Code Required' : 'Charge Code is required'}}\n \n \n
\n
\n
\n
\n\n
\n \n
\n
\n","import {\n Component,\n EventEmitter,\n Inject,\n Output\n} from '@angular/core';\nimport {\n MAT_DIALOG_DATA,\n MatDialogRef\n} from '@angular/material/dialog';\n\nimport { ApplicationIcon } from '@mckinsey-converge/data-common';\nimport {\n BaseDirective,\n DialogEvent\n} from '@mckinsey-converge/base';\n\nexport interface ConfirmModalData {\n /** Title of the modal */\n title: string;\n /** Contents of the modal */\n content: string;\n /** Text displaed on the confirmation button */\n action?: string;\n /** Icon to display on the modal */\n icon: ApplicationIcon;\n}\n\nexport const CONFIRM_METADATA = {\n height: 'auto',\n width: '24em',\n maxHeight: 'calc(100vh - 2em)',\n maxWidth: 'calc(100vw - 2em)'\n};\n\n@Component({\n selector: 'confirm-modal',\n templateUrl: './confirm-modal.component.html',\n styleUrls: ['./confirm-modal.component.scss']\n})\nexport class ConfirmModalComponent extends BaseDirective {\n /** Emitter for user action on the modal */\n @Output() public event = new EventEmitter();\n /** Loading state */\n public loading: string;\n\n /** Title of the confirm modal */\n public get title(): string {\n return (this._data ? this._data.title : null) || 'Confirm';\n }\n\n /** Body of the confirm modal */\n public get content(): string {\n return (this._data ? this._data.content : null) || 'Are you sure?';\n }\n\n /** Display text on the confirm button */\n public get action(): string {\n return (this._data ? this._data.action : null) || 'Ok';\n }\n\n /** Display icon properties */\n public get icon(): ApplicationIcon {\n return (this._data ? this._data.icon : null) || null;\n }\n\n constructor(\n private _dialog: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private _data: ConfirmModalData\n ) {\n super();\n }\n\n /**\n * User confirmation of the content of the modal\n */\n public accept() {\n this.event.emit({ reason: 'done' });\n }\n}\n","
\n

{{ title || 'Confirm' }}

\n
\n\n
\n \n
\n

\n
\n
\n
\n\n
\n \n \n
\n
\n\n
\n
\n
\n \n
\n
{{ loading }}
\n
\n
\n
\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { LegacyUiModule } from '@mckinsey-converge/legacy-ui';\nimport { UiModule } from '@mckinsey-converge/ui';\nimport {\n FormsModule,\n ReactiveFormsModule\n} from '@angular/forms';\nimport { SpaceSelectModalComponent } from './space-select-modal/space-select-modal.component';\nimport { NewUserModalComponent } from './new-user-modal/new-user-modal.component';\nimport { ConfirmModalComponent } from './confirm-modal/confirm-modal.component';\nimport { NoCateringModalComponent } from './no-catering-modal/no-catering-modal.component';\nimport { BookingCateringConfirmModalComponent } from './catering-confirm-modal/catering-confirm-modal.component';\nimport { CateringDetailsModalComponent } from './catering-details-modal/catering-details-modal.component';\nimport { RequirementDetailsModalComponent } from './requirement-details-modal/requirement-details-modal.component';\nimport { BookingConfirmComponent } from './booking-confirm/booking-confirm.component';\nimport { BaseModule } from '@mckinsey-converge/base';\nimport { UserFormComponent } from './user-form/user-form.component';\nimport { BookingFormComponent } from './booking-form/booking-form.component';\nimport { EditorModule } from '@tinymce/tinymce-angular';\n\nconst DECLARATIONS = [\n SpaceSelectModalComponent,\n NewUserModalComponent,\n ConfirmModalComponent,\n NoCateringModalComponent,\n BookingCateringConfirmModalComponent,\n CateringDetailsModalComponent,\n RequirementDetailsModalComponent,\n BookingConfirmComponent,\n UserFormComponent,\n BookingFormComponent,\n];\n\n@NgModule({\n imports: [\n LegacyUiModule,\n FormsModule,\n ReactiveFormsModule,\n CommonModule,\n UiModule,\n BaseModule,\n EditorModule,\n ],\n declarations: [\n ...DECLARATIONS\n ],\n exports: [\n ...DECLARATIONS,\n BaseModule\n ]\n})\nexport class LegacyOverlaysModule {\n}\n","import { Component, EventEmitter, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\n\nimport { BaseDirective, DialogEvent } from '@mckinsey-converge/base';\nimport { generateUserForm, User } from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'new-user-modal',\n templateUrl: './new-user-modal.component.html',\n styleUrls: ['./new-user-modal.component.scss'],\n})\nexport class NewUserModalComponent extends BaseDirective implements OnInit {\n /** Emitter for user action on the modal */\n @Output() public event = new EventEmitter();\n /** Form fields for the new user */\n public form: FormGroup;\n /** New user data store */\n public user: User;\n /** Whether user details are being saved */\n public loading: boolean;\n\n public ngOnInit(): void {\n this.user = new User();\n this.form = generateUserForm(this.user);\n }\n\n public saveChanges() {\n this.form.markAllAsTouched();\n if (this.form.valid) {\n if (!this.form.controls.email.value) {\n this.form.controls.email.setValue(\n `${Math.floor(Math.random() * 99999)}@guest.mckinsey.com`\n );\n }\n const firstName = this.form.value.first_name.split(' ')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n\n const lastName = this.form.value.last_name.split(' ')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n \n const new_user = new User({\n ...this.form.value,\n name: `${firstName} ${lastName}`,\n type: 'external',\n external: true,\n visitor: true,\n });\n this.event.emit({ reason: 'done', metadata: new_user });\n }\n }\n}\n","
\n

Add External Attendee

\n \n
\n
\n \n
\n
\n \n \n
\n\n
\n
\n
\n \n
\n
\n Saving attendee...\n
\n
\n
\n
\n\n","import {\n Component,\n Output,\n EventEmitter\n} from '@angular/core';\nimport {\n MatDialogRef,\n} from '@angular/material/dialog';\nimport {\n BaseDirective,\n DialogEvent\n} from '@mckinsey-converge/base';\n\n@Component({\n selector: 'no-catering-modal',\n templateUrl: './no-catering-modal.component.html',\n styleUrls: ['./no-catering-modal.component.scss']\n})\nexport class NoCateringModalComponent extends BaseDirective {\n constructor(\n private _dialog_ref: MatDialogRef,\n ) {\n super();\n }\n\n // /** Emitter for user action on the modal */\n @Output() public event = new EventEmitter();\n\n // Submit the Survey in it's current state.\n public confirm() {\n this.event.emit({ reason: 'done' });\n this._dialog_ref.close();\n }\n\n // Close the modal\n public cancel() {\n this.event.emit({ reason: 'close' });\n this._dialog_ref.close();\n }\n}\n","
\n \n
\n
\n
\n \n

Catering is not available for your new room selection. \n
Are you sure you want to change rooms?

\n
\n
\n \n \n \n
\n
\n
","import {\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n OnInit,\n Output,\n ViewChild\n} from '@angular/core';\nimport {\n AbstractControl,\n FormControl,\n FormGroup,\n Validators\n} from '@angular/forms';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\n\nimport {\n BookingNote,\n OrganisationService,\n SettingsService,\n Space,\n UsersService\n} from '@mckinsey-converge/data-common';\nimport {\n DialogEvent,\n HashMap\n} from '@mckinsey-converge/base';\n\nimport { DateNow } from '@mckinsey-converge/date-tz';\n\n\nexport interface RequirementDetailsModalData {\n spaces: Space[];\n notes_field: AbstractControl;\n codes_field: AbstractControl;\n head_counts_field: AbstractControl;\n standalone?: boolean;\n}\n\n@Component({\n selector: 'a-requirement-details-modal',\n templateUrl: './requirement-details-modal.component.html',\n styleUrls: ['./requirement-details-modal.component.scss']\n})\nexport class RequirementDetailsModalComponent implements OnInit {\n /** Emitter for modal events */\n @Output() public event = new EventEmitter();\n /** Mapping of spaces to notes */\n public notes: HashMap = {};\n /** Mapping of spaces to cost codes */\n public codes: HashMap = {};\n /** Mapping of spaces to estimated head count */\n public head_counts: HashMap = {};\n /** Mapping of spaces to form fields */\n public form: HashMap = {};\n /** Map of spaces to whether they need a charge code */\n public needs_charge_code: boolean;\n /** Index of the active space */\n public active_space: number = 0;\n\n @ViewChild('content', { static: true }) private _content_el: ElementRef;\n\n /** List of selected spaces */\n public get space_list(): Space[] {\n return this._data.spaces;\n }\n\n public get has_recurrence(): boolean {\n return false\n }\n\n public get active_form(): FormGroup {\n return this.form[this.space_list[this.active_space].email];\n }\n\n public get invalid_charge_code(): boolean {\n return this.active_form.controls.code.errors?.minlength || this.active_form.controls.code.errors?.pattern;\n }\n\n /** Whether form fields are valid */\n public get is_valid(): boolean {\n // return this.space_list.reduce((valid, space) => valid && this.form[space.email].valid, true);\n return this.space_list.length > 0 && this.space_list.reduce((valid, space) => valid && this.form[space.email].valid, true);\n }\n\n public isConcierge: boolean;\n public frontend: string;\n\n constructor(\n private _org: OrganisationService,\n private _users: UsersService,\n @Inject(MAT_DIALOG_DATA) private _data: RequirementDetailsModalData,\n private _settings: SettingsService,\n ) {\n this.isConcierge = _settings.concierge;\n this.frontend = _settings.frontend;\n }\n\n public ngOnInit(): void {\n const note_list = this._data.notes_field.value\n .filter((note: BookingNote) => note.type === 'equipment');\n this.notes = note_list.reduce((map, note) => {\n map[note.space] = note.message;\n return map;\n }, {});\n this.codes = { ...this._data.codes_field.value };\n this.head_counts = { ...this._data.head_counts_field.value };\n this.generateFormFields();\n }\n\n public submit(): void {\n // Get the email of the first space\n const firstSpaceEmail = this.space_list[0].email;\n\n // Copy values from the first space's form controls to all other spaces\n this.space_list.forEach(space => {\n if (space.email !== firstSpaceEmail) {\n this.form[space.email].controls.notes.setValue(this.form[firstSpaceEmail].controls.notes.value);\n this.form[space.email].controls.code.setValue(this.form[firstSpaceEmail].controls.code.value);\n this.form[space.email].controls.head_count.setValue(this.form[firstSpaceEmail].controls.head_count.value);\n }\n });\n\n this.space_list.forEach(space => this.form[space.email].markAllAsTouched());\n /* istanbul ignore else */\n if (this.is_valid) {\n // Update notes \n const notes = this._data.notes_field.value\n .filter((note: BookingNote) => note.type !== 'equipment');\n const new_notes = this.space_list.map(space => ({\n author: this._users.current.name,\n type: 'equipment',\n message: this.form[space.email].controls.notes.value.trim(),\n space: space.email,\n date: DateNow(new Date()).ms\n } as BookingNote));\n this._data.notes_field.setValue(notes.concat(new_notes).filter(note => note.message));\n this._data.codes_field.setValue(this.space_list.reduce((map, space) => {\n map[space.email] = this.form[space.email].controls.code.value;\n return map;\n }, {}));\n this._data.head_counts_field.setValue(this.space_list.reduce((map, space) => {\n map[space.email] = this.form[space.email].controls.head_count.value;\n return map;\n }, {}));\n this.event.emit({ reason: 'done' });\n } else {\n this._content_el.nativeElement.scrollTo({\n top: this._content_el.nativeElement.scrollHeight,\n left: 0,\n behavior: 'smooth'\n });\n }\n }\n\n /** Generate form fields for each space */\n // private generateFormFields(): void {\n // for (const space of this.space_list) {\n // const building = this._org.buildings.find(\n // bld => bld.id === space[0]?.level.building_id\n // );\n // // this.needs_charge_code[space.email] = space?.settings?.equipment_code || building?.required?.equipment_code || false;\n // const { filters, settings } = space;\n // const roomBasedEqCode = filters?.equipment_code || settings?.equipment_code;\n // const officeBasedEqCode = building?.required?.equipment_code;\n // this.needs_charge_code[space.email] = roomBasedEqCode !== undefined ? roomBasedEqCode : officeBasedEqCode !== undefined ? officeBasedEqCode: false;\n\n // this.form[space.email] = new FormGroup({\n // notes: new FormControl(this.notes[space.email] || ''),\n // code: new FormControl(\n // this.codes[space.email] || '',\n // this.needs_charge_code[space.email] ?\n // [Validators.pattern(/^[a-zA-Z0-9]*$/), Validators.minLength(4), Validators.required] : [Validators.minLength(4), Validators.pattern(/^[a-zA-Z0-9]*$/)]\n // ),\n // head_count: new FormControl(this.head_counts[space.email] || '', [Validators.required, Validators.pattern(/^(?!0+$)/)])\n // });\n // }\n // }\n \n private generateFormFields(): void {\n // Initialize a variable to determine if any space needs a charge code\n let anySpaceNeedsChargeCode = false;\n \n // First pass to determine if any space needs a charge code\n for (const space of this.space_list) {\n const building = this._org.buildings.find(\n bld => bld.id === space?.level.building_id\n );\n const { filters, settings } = space;\n const roomBasedEqCode = filters?.equipment_code;\n const officeBasedEqCode = building?.required?.equipment_code;\n \n // this.needs_charge_code[space.email] = space?.settings?.equipment_code || building?.required?.equipment_code || false;\n if (roomBasedEqCode || officeBasedEqCode) {\n anySpaceNeedsChargeCode = true;\n this.needs_charge_code = true;\n break;\n } else{\n this.needs_charge_code = false;\n }\n }\n \n // Second pass to create form groups with the determined charge code requirement.\n // We show only the first space, but if one of the selected spaces needs a mandatory charge code,\n // then all spaces need a mandatory charge code\n for (const space of this.space_list) { \n this.form[space.email] = new FormGroup({\n notes: new FormControl(this.notes[space.email] || ''),\n code: new FormControl(\n this.codes[space.email] || '',\n anySpaceNeedsChargeCode ?\n [Validators.pattern(/^[a-zA-Z0-9]*$/), Validators.minLength(4), Validators.required] :\n [Validators.minLength(4), Validators.pattern(/^[a-zA-Z0-9]*$/)]\n ),\n head_count: new FormControl(this.head_counts[space.email] || '', [Validators.required, Validators.pattern(/^(?!0+$)/)])\n });\n }\n }\n}\n","
\n
\n \n \n \n \n {{\n this.space_list.length > 1 ? this.space_list.length + ' spaces selected' :\n this.space_list[0]?.local_name || 'No spaces selected'\n }}\n \n \n \n \n
\n \n
\n\n
\n
\n \n
\n {{\n has_recurrence && !isConcierge\n ? 'To update headcount information, add equipment or catering, please edit individual meeting occurences in My Day'\n : \"Would you like to add equipment to your booking's spaces?\"\n }}\n
\n
\n
\n
\n \n \n \n \n
\n
\n \n \n Charge Code*\n \n \n \n \n Note: Your booking will be confirmed before you are\n charged.\n \n \n {{ invalid_charge_code ? 'Valid Charge Code Required' : 'Charge Code is required'}}\n \n \n
\n
\n \n Headcount Estimate*\n \n \n \n \n Note: This estimate is used to calculate catering and/or\n assign rooms. Please keep updated of any changes.\n \n \n Headcount Estimate is required\n \n \n
\n \n
\n
\n
\n\n
\n \n
\n
\n","import {\n Component,\n EventEmitter,\n Inject,\n OnInit,\n Output,\n} from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport {\n BehaviorSubject,\n Observable,\n of,\n Subject\n} from 'rxjs';\nimport {\n catchError,\n debounceTime,\n distinctUntilChanged,\n first,\n map,\n switchMap,\n take,\n withLatestFrom\n} from 'rxjs/operators';\nimport {\n Building,\n mapBuildingToSelectOption,\n mapCityToAllSelectOption,\n OrganisationService,\n SettingsService,\n Space,\n SpaceBookingRuleOptions,\n SpacesService,\n toggleSelectedByGroup,\n User,\n UsersService\n} from '@mckinsey-converge/data-common';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n DialogEvent,\n HashMap,\n Identity,\n unique\n} from '@mckinsey-converge/base';\nimport { NoCateringModalComponent } from '../no-catering-modal/no-catering-modal.component'\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { SelectOption } from '@mckinsey-converge/ui';\n\nexport interface SpaceSelectModalData {\n /** List of selected spaces */\n spaces: Space[];\n /** Start time for availability of spaces */\n dateTz: DateTZ;\n /** Duration of the availability block to look for */\n duration: number;\n /** Host of the booking being made */\n host: User;\n /** Whether multiple spaces can be selected */\n multiple: boolean;\n /** Force zone ids */\n zone_ids?: string;\n /** Booking needs catering */\n needsCatering?: boolean,\n}\n\n@Component({\n selector: 'a-space-select-modal',\n templateUrl: './space-select-modal.component.html',\n styleUrls: ['./space-select-modal.component.scss']\n})\nexport class SpaceSelectModalComponent extends BaseDirective implements OnInit {\n /** Emitter for user action on the modal */\n @Output() public event = new EventEmitter();\n /** Whether space list is being loaded */\n public loading: boolean;\n /** List of available spaces to select from */\n public spaces: Space[] = [];\n /** Active building to filter spaces on */\n public active_building: Building;\n /** Active building to filter spaces on */\n public active_type: Identity;\n /** List of items from an API search */\n public search_results$: Observable;\n /** Subject holding the value of the search */\n public readonly change$ = new Subject();\n /** List of currently selected spaces */\n public selected_spaces: Space[] = [];\n /** Mapping as to whether a space is by request */\n public request_map: HashMap = {};\n /** Whether selected list should be shown on mobile */\n public show_list: boolean;\n\n /** host to load (only in staff) **/\n public host: User;\n\n /** List of available buildings */\n public types: Identity[] = [];\n\n public isConcierge: boolean;\n public frontend: string;\n\n /** List of available buildings */\n public get buildings(): Building[] {\n return this._org.buildings;\n }\n\n /** Whether multiple spaces can be selected */\n public get multiple(): boolean {\n return false;\n }\n\n public get has_zone(): boolean {\n return !!this._data.zone_ids;\n }\n\n public formGroup = new FormGroup({\n location: new FormControl([]),\n });\n\n public options = new BehaviorSubject[]>([]);\n\n public selectedOptions = new BehaviorSubject[]>([]);\n\n\n public noCateringDialogRef: MatDialogRef;\n\n /** List of zones to filter the spaces on */\n public zone_ids: string[] = [];\n\n\n public get initialBuildingIds(): string[] {\n return this._org.building ? [this._org.building.id] : [];\n }\n\n public savedSelection\n\n constructor(\n private _org: OrganisationService,\n private _users: UsersService,\n private _spaces: SpacesService,\n private _settings: SettingsService,\n private _dialog: MatDialog,\n @Inject(MAT_DIALOG_DATA) private _data: SpaceSelectModalData\n ) {\n super();\n this.isConcierge = _settings.concierge;\n this.frontend = _settings.frontend;\n }\n\n public ngOnInit(): void {\n this._spaces.initialised.pipe(first((_) => _)).subscribe(() => {\n let request_id = 0;\n // Listen for input changes\n this.search_results$ = this.change$.pipe(\n debounceTime(400),\n distinctUntilChanged(),\n switchMap((bld) => {\n this.loading = true;\n const zone_ids: string[] = [];\n /* istanbul ignore else */\n if (this.active_building) {\n zone_ids.push(this.active_building.id);\n }\n\n if (bld?.includes('|')) {\n bld = this.savedSelection\n }\n\n const id = request_id;\n return this._spaces.available({\n zone_ids: bld?.length ? bld : this._data.spaces[0].building.id || zone_ids.join(','),\n dateTz: this._data.dateTz,\n duration: this._data.duration\n }).then(async (list) => ({ id, list }));\n }),\n catchError((_) => of({ id: request_id, list: [], error: _ })),\n map((resp: { id: number, list: Space[] }) => {\n this.loading = false;\n const filtered_list = resp.list.filter((space: Space) => {\n // if concierge skip rules check.\n if (this._settings.concierge) {\n return (this.active_type && this.active_type.id ? space.zones.includes(`${this.active_type.id}`) : true) &&\n !this.selected_spaces.find((s) => s.id === space.id);\n }\n\n const rules = space.rulesFor({\n dateTz: this._data.dateTz,\n duration: this._data.duration,\n host: this.host || this._data.host\n });\n return (\n rules.hide !== true &&\n (this.active_type && this.active_type.id\n ? space.zones.includes(`${this.active_type.id}`)\n : true) &&\n !this.selected_spaces.find((_space) => _space.id === space.id)\n );\n });\n return resp.id === request_id ? filtered_list : this.spaces;\n })\n );\n // Process API results\n this.subscription(\n 'search_results',\n this.search_results$.subscribe((list) => {\n this.spaces = list.filter((space) => {\n if (!space.available) {\n return false;\n }\n for (const zone of this.zone_ids) {\n if (space.zones.includes(zone)) {\n return true;\n }\n }\n return !this.zone_ids.length;\n });\n this.spaces.sort((a, b) => this.sort(a, b));\n if (!this.selectedOptions.value.length) {\n this.setDefaultBuilding()\n }\n })\n );\n this.active_building = this._data.spaces?.length\n ? this._org.buildings.find((i) => i.id === this._data.spaces[0].level.building_id)\n : this._org.building;\n this.types = [{ id: '', name: 'Any Space Type' } as any].concat(\n this._org.space_types || []\n );\n this.active_type = this.types[0];\n this.change$.next('');\n });\n\n this.subscription('buildings', this._org.listen('buildings').subscribe((bld_list) => {\n const city = this._org.building.city\n const timezone = this._org.building.timezone\n const grouped_by_city = {\n key: { name: city, timezone },\n value: bld_list?.filter((bld) => bld.city === city) || []\n }\n const city_buildings = grouped_by_city.value.map(\n (bld) => mapBuildingToSelectOption(grouped_by_city.key.name, bld)\n )\n const buildings = [\n mapCityToAllSelectOption(grouped_by_city.key),\n ...city_buildings\n ]\n this.options.next(buildings)\n }));\n\n }\n\n /** Add space to selected list */\n public addSpace(space: Space) {\n this.selected_spaces.push(space);\n this.selected_spaces = unique(this.selected_spaces, 'id');\n }\n\n /** Remove space from selected list */\n public removeSpace(space: Space) {\n this.selected_spaces = this.selected_spaces.filter((a_space) => a_space.id !== space.id);\n }\n\n /** Emit current state of the selected list */\n public save(list: Space[]) {\n if (!this._data.needsCatering) {\n // No catering order to warn about\n this.event.emit({ reason: 'done', metadata: list });\n return;\n }\n // Check if the room has catering \n if (list[0].has_catering) {\n this.event.emit({ reason: 'done', metadata: list });\n return;\n }\n // If not warn that the room doesn't have catering\n this.noCateringDialogRef = this._dialog.open(NoCateringModalComponent, {\n panelClass: 'mck-modal-mini',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n this.subscription(\n 'no-catering-modal',\n this.noCateringDialogRef.componentInstance.event.subscribe((event) => {\n if (event.reason === 'done') {\n this.event.emit({ reason: 'done', metadata: list });\n }\n if (event.reason === 'close') {\n this.event.emit({ reason: 'close' });\n }\n })\n );\n }\n\n private update() {\n const map = {};\n const options: SpaceBookingRuleOptions = {\n dateTz: this._data.dateTz,\n duration: this._data.duration,\n host: this._data.host\n };\n this.selected_spaces.forEach((space) => (map[space.id] = space.byRequest(options)));\n this.spaces.forEach((space) => (map[space.id] = space.byRequest(options)));\n this.request_map = map;\n }\n\n public setDefaultBuilding() {\n const defaultBld = this.options.value.filter(opt => opt.value === this._org.building.id)\n this.selectedOptions.next(defaultBld)\n }\n\n /**\n * Compare two spaces to determine order\n * @param space_a\n * @param space_b\n */\n public sort(space_a: Space, space_b: Space) {\n const bld = this._org.buildings.find((bld) => space_a.zones.includes(bld.id)) || { name: '', sort_order: [] };\n const bld_b = this._org.buildings.find((bld) => space_b.zones.includes(bld.id));\n if (bld && bld !== bld_b) {\n return bld.name.localeCompare(bld_b?.name);\n }\n const sort_order = [...bld.sort_order].reverse();\n for (const zone_id of sort_order) {\n if (zone_id === '*') {\n continue;\n }\n const a_has_zone = space_a.zones.indexOf(zone_id) >= 0;\n const b_has_zone = space_b.zones.indexOf(zone_id) >= 0;\n if (a_has_zone && !b_has_zone) {\n return 1;\n } else if (b_has_zone && !a_has_zone) {\n return -1;\n }\n }\n return space_a.name.localeCompare(space_b.name);\n }\n\n public toggle(option: SelectOption) {\n // update the selected value\n this.selectedOptions.pipe(\n take(1),\n withLatestFrom(this.options),\n map(([selectedOptions, options]) => {\n return toggleSelectedByGroup(options, selectedOptions, option);\n })\n ).subscribe(next => {\n const formData = this.formGroup.value;\n this.formGroup.setValue({\n location: formData.location,\n });\n this.selectedOptions.next(next);\n this.savedSelection = next.map((bld) => bld.value)\n\n });\n }\n\n /**\n * Update the selected space list\n * @param space Space to add/toggle in the selected list\n */\n public selectSpace(space: Space) {\n const list = this.spaces;\n if (list.find((item) => item.id === space.id)) {\n this.spaces = list.filter((item) => item.id !== space.id);\n } else {\n this.spaces = [space];\n }\n }\n\n public clearList() {\n this.spaces = []\n this.savedSelection = []\n }\n\n public triggerSearch = () => {\n if (this.savedSelection.length) {\n this.change$.next(this.savedSelection)\n } else {\n this.spaces = []\n }\n }\n\n}\n","
\n
Select meeting space{{ multiple ? 's' : '' }}
\n \n
\n\n
\n
\n \n \n 1\">Type\n 1\">\n \n \n {{ type?.name }}\n \n \n \n \n
\n \n \n
\n
\n
{{ space.local_name }}
\n
{{ space.level.name }}
\n
\n
\n \n
\n
\n \n
{{ space.capacity || '0' }}
\n
\n
\n \n {{ (!isConcierge && request_map[space.id]) ? 'Request' : 'Select' }}\n \n
\n
\n
\n
\n
\n
\n
\n

Selected spaces

\n
\n \n
\n \n \n
\n
\n
{{ space.name }}
\n
{{ space.level.name }}
\n
\n
\n \n
{{ space.capacity || '0' }}
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n \n
\n \n
\n \n
\n
\n\n
\n
\n \n
\n
Loading available spaces...
\n
\n
\n\n
\n
\n \n
\n
No results available, please select another office.
\n
\n
\n\n
\n
\n \n
\n
No selected spaces
\n
\n
\n","import { Component, Input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\n@Component({\n selector: 'user-form',\n templateUrl: './user-form.component.html',\n styleUrls: ['./user-form.component.scss']\n})\nexport class UserFormComponent {\n /** Group of form fields used for creating the system */\n @Input() public form: FormGroup;\n}\n","
\n
\n
\n First Name:\n \n \n First name is required\n \n \n
\n
\n Last Name:\n \n \n Last name is required\n \n
\n
\n Email:\n \n \n A valid email is required\n \n
\n
\n
\n","export * from './lib/legacy-ui.module';\nexport * from './lib/custom-fields';\nexport * from './lib/icon/icon.component';\nexport * from './lib/feedback/feedback.component';\nexport * from './lib/action-icon/action-icon.component';\nexport * from './lib/user-avatar/user-avatar.component';\nexport * from './lib/bookings/catering/item/item.component';\nexport * from './lib/cng-search-bar/cng-search-bar.component';\n","import { Component, OnInit, Input } from '@angular/core';\nimport { ApplicationIcon } from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'action-icon',\n templateUrl: './action-icon.component.html',\n styleUrls: ['./action-icon.component.scss']\n})\nexport class ActionIconComponent implements OnInit {\n /** Icon to display */\n @Input() public icon: ApplicationIcon;\n /** Whether action is being processed */\n @Input() public loading: boolean;\n /** State of the action */\n @Input() public state: 'success' | 'error' | '' = '';\n\n constructor() {}\n\n ngOnInit(): void {}\n}\n","
\n \n
\n \n
\n
\n \n
\n
\n","import {\n Component,\n Input,\n OnChanges,\n SimpleChanges\n} from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { FormControl } from '@angular/forms';\n\nimport {\n ApplicationService,\n CateringCategory,\n CateringItem,\n SettingsService\n} from '@mckinsey-converge/data-common';\nimport { ANIMATION_SHOW_CONTRACT_EXPAND } from '@mckinsey-converge/animations';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { PackageOptionsModalComponent } from '../package-options-modal/package-options-modal.component';\n\nfunction hasSelectionRequirements(category: CateringCategory) {\n return (\n category.must_select < category.items.length ||\n (category.must_select === category.items.length &&\n category.items.find((item: any) => item.items && item.must_select < item.items.length))\n );\n}\n\nfunction getActiveList(category: CateringCategory) {\n const items = category.items || [];\n let list = items.filter((item) => item.amount > 0).map((item) => item.id);\n for (const item of items) {\n if ((item as any).items && (item as any).items.length) {\n list = list.concat(getActiveList(item as any));\n }\n }\n return list;\n}\n\n@Component({\n selector: 'a-catering-menu-item',\n templateUrl: './item.component.html',\n styleUrls: ['./item.component.scss'],\n animations: [ANIMATION_SHOW_CONTRACT_EXPAND]\n})\nexport class CateringMenuItemComponent extends BaseDirective implements OnChanges {\n /** Whether item is a child of another */\n @Input() public subitem: boolean;\n /** Item to display */\n @Input() public item: CateringCategory;\n /** Field for storing items */\n @Input() public field: FormControl;\n /** Current symbol for the selected space */\n @Input() public symbol: string;\n /** Whether item should be disabled if not available anytime */\n @Input() public disabled: boolean;\n /** Whether to show smaller version of component */\n @Input() public compact: boolean;\n /** Whether to show children items */\n public show_children: boolean;\n public initial_state = null;\n\n /** List of contents of the package */\n public get contents(): string {\n return this.item.items\n ? this.item.items.reduce((list, item) => {\n /* istanbul ignore else */\n if (list) {\n list += '\\n\\n';\n }\n return (list += `${item.name}${\n (item as any).items\n ? (item as any).items.reduce(\n (a_list, an_item) =>\n (a_list += `\\n ${an_item.amount ? '✓' : '•'} ${an_item.name} `),\n ''\n )\n : ''\n } ${item.amount ? '✓' : ''}`);\n }, '')\n : '';\n }\n\n constructor(private _service: ApplicationService, private _dialog: MatDialog,\n public settings: SettingsService) {\n super();\n // on the item selection set the revert/close state\n this.initial_state = this.item;\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n /* istanbul ignore else */\n if (changes.field && this.field) {\n const list = this.field.value;\n // check the category\n let item = list.find((an_cat) => an_cat.id === this.item.id);\n if (item) {\n // update the category level amount\n this.item.setAmount(item ? item.amount : 0);\n } else {\n // find a category item\n for (var cat of list) {\n item = cat?.items.find((an_item) => an_item.id === this.item.id);\n if (item) {\n this.item.setAmount(item ? item.amount : 0);\n break;\n }\n }; \n } \n\n // On the confirm catering order modal set the revert/close state\n if (!this.initial_state && this.item.amount) {\n this.initial_state = this.item;\n }\n\n this.subscription(\n 'field_change',\n this.field.valueChanges.subscribe((list) => {\n const item = list.find((an_item) => an_item.id === this.item.id);\n this.item.setAmount(item ? item.amount : 0);\n this.updatePackageSelection();\n })\n );\n }\n }\n\n /**\n * Update the amount of the item in the order\n * @param value New amount\n */\n public updateAmount(value: number) {\n /* istanbul ignore else */\n if (this.field) {\n const list: CateringItem[] = this.field.value;\n const item = list.find((an_item) => an_item.id === this.item.id);\n if (item) {\n this.item.setAmount(value);\n item.setAmount(value);\n // MCK-1550 fix\n const price = this.item.price;\n item.setPrice(price)\n } else {\n const amount = this.item.amount;\n this.item.setAmount(value);\n if (\n this.item.package &&\n amount < value &&\n this.item.items &&\n this.item.items.length &&\n hasSelectionRequirements(this.item)\n ) {\n this.selectPackageOptions().then(\n (confirmed_item) => {\n list.push(new CateringCategory(confirmed_item));\n this.field.setValue(list.filter((an_item) => an_item.amount));\n },\n () => {\n this.item.setAmount(999);\n this.timeout('amount', () => this.item.setAmount(0), 5);\n this._service.notifyWarn(\n 'Package options not selected. Item removed from order'\n );\n }\n );\n } else {\n list.push(new CateringItem(this.item));\n }\n }\n this.field.setValue(list.filter((an_item) => an_item.amount));\n }\n }\n\n public updatePackageSelection() {\n const cart_item = this.field.value.find((item) => item.id === this.item.id);\n if (cart_item) {\n const active_items = getActiveList(cart_item);\n this.timeout(\n 'update_package',\n () => {\n this.item.items.forEach((item) => {\n item.setAmount(active_items.includes(item.id) ? 1 : 0);\n if ((item as any).items) {\n (item as any).items.forEach((item) => {\n item.setAmount(active_items.includes(item.id) ? 1 : 0);\n });\n }\n });\n },\n 5\n );\n }\n }\n\n /** Reselect package options */\n public updatePackageOptions(): void {\n let updatedList: CateringItem[] = [];\n this.selectPackageOptions().then(\n (confirmed_item) => {\n // Update the existing category package\n this.field.value.forEach((category: CateringCategory) => {\n if (category.id === confirmed_item.id) {\n updatedList.push(new CateringCategory(confirmed_item))\n } else {\n updatedList.push(category)\n }\n })\n this.field.setValue(updatedList.filter((an_item) => an_item.amount));\n },\n () => {\n this.item.setAmount(999);\n this.timeout('amount', () => this.item.setAmount(0), 5);\n this._service.notifyWarn(\n 'Package options not selected. Item removed from order'\n );\n }\n );\n }\n\n /**\n * Open modal for user to select package options\n */\n private selectPackageOptions(): Promise {\n return new Promise((resolve, reject) => {\n const ref = this._dialog.open(PackageOptionsModalComponent, {\n maxWidth: '95vw',\n data: {\n item: new CateringCategory(this.item)\n },\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n let done = false;\n ref.componentInstance.event.subscribe((event) => {\n /* istanbul ignore else */\n if (event.reason === 'done') {\n done = true;\n resolve(ref.componentInstance.item);\n this.initial_state = this.item;\n ref.close();\n }\n });\n ref.afterClosed().subscribe(() => {\n /* istanbul ignore else */\n if (!done) {\n if (this.initial_state) {\n resolve(this.initial_state);\n } else {\n reject();\n }\n }\n });\n });\n }\n}\n","\n \n
\n
{{ item.name }}
\n
{{ item.package ? '[Package] ' : '' }}{{ item.description }}
\n
\n
\n {{ item.unit_price / 100 | currency: symbol }}\n
\n \n { item.availableItems.length, plural, =1 { Contains {{ item.availableItems.length }} item } other {\n Contains {{ item.availableItems.length }} items } }\n
\n 0\"\n [matTooltip]=\"contents\"\n >\n {{ item.must_select }}\n \n Selected\n \n
\n 0\"\n (click)=\"updatePackageOptions()\"\n i18n=\"Catering order item options change action\"\n >\n Customise\n \n \n \n
\n {{ item.unit_price / 100 | currency: symbol }}\n
\n \n \n \n \n\n
\n \n
\n","import {\n Component,\n EventEmitter,\n Inject,\n Output\n} from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\n\nimport {\n DialogEvent,\n HashMap\n} from '@mckinsey-converge/base';\nimport {\n CateringCategory,\n CateringItem\n} from '@mckinsey-converge/data-common';\n\nexport interface PackageOptionsModalData {\n item: CateringCategory;\n}\n\nexport function checkItemRequirements(category: CateringCategory): boolean {\n const items = category.items || [];\n return category.must_select >= items.length\n ? items.reduce((valid, item) => valid && checkItemRequirements(item as any), true)\n : items.reduce((amount, item) => amount + (item.amount ? 1 : 0), 0) ===\n category.must_select;\n}\n\nexport function getActiveItems(category: CateringCategory): HashMap {\n let map = {};\n if (category.items) {\n const item = category.items.find(item => item.amount > 0);\n if (item) {\n map[category.id] = item.id;\n }\n category.items.forEach(item => map = { ...map, ...getActiveItems(item as any) });\n }\n return map;\n}\n\n@Component({\n selector: 'a-package-options-modal',\n templateUrl: './package-options-modal.component.html',\n styleUrls: ['./package-options-modal.component.scss']\n})\nexport class PackageOptionsModalComponent {\n /** Emitter for user actions on the modal */\n @Output() public event = new EventEmitter();\n\n /** Item to select options for */\n public get item(): CateringCategory {\n return this._data.item;\n }\n\n /** Whether package requirements have been met */\n public get requirements_met(): boolean {\n return checkItemRequirements(this.item);\n }\n\n public get active_items(): HashMap {\n return getActiveItems(this.item);\n }\n\n constructor(@Inject(MAT_DIALOG_DATA) private _data: PackageOptionsModalData) {\n }\n\n /**\n * Update the list of selected items\n */\n public updateAmount(a_package: CateringCategory, option: CateringItem, state: boolean) {\n if (state) {\n const needed = a_package.must_select;\n const active = a_package.items.filter(an_item => an_item.amount > 0).length;\n if (active >= needed) {\n const item = a_package.items.find(an_item => an_item.amount > 0);\n item.setAmount(0);\n }\n option.setAmount(1);\n } else {\n option.setAmount(0);\n }\n }\n}\n","
\n

Package Options

\n \n
\n\n
\n \n
\n
\n\n
\n \n
\n
\n\n \n \n
\n \n 1\"\n [checked]=\"!!option.amount\"\n (change)=\"updateAmount(package, option, $event.checked)\"\n >\n {{ option.name }}\n \n \n {{ option.name }}\n \n \n = package.items.length || option.must_select\">\n {{ option.name }}\n \n \n
\n
\n
\n
\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\n\n// Interface to define the structure of the configuration object for the search bar\nexport interface SearchBarConfig {\n placeholder?: string;\n totalFoundItem?: number;\n showSrchWarning?: boolean;\n}\n\n@Component({\n selector: 'cng-search-bar',\n templateUrl: './cng-search-bar.component.html',\n styleUrls: ['./cmg-search-bar.component.scss']\n})\nexport class CngSearchBarComponent implements OnChanges {\n // Input property to accept configuration for the search bar\n @Input() config: SearchBarConfig = {\n placeholder: 'Search ...',\n totalFoundItem: 0,\n showSrchWarning: false\n };\n\n // Output event emitter to emit search strings to parent components\n @Output() search = new EventEmitter();\n\n // Local variable to store the search string entered by the user\n searchStr: string = '';\n\n // Lifecycle hook that is called when any data-bound property of a directive changes\n ngOnChanges(changes: SimpleChanges): void {\n // Check if the config property has changed\n if (changes.config) {\n const configChanges = changes.config.currentValue;\n // Update the config with new values or fallback to defaults\n this.config = {\n placeholder: configChanges.placeholder || 'Search ...',\n totalFoundItem: configChanges.totalFoundItem || 0,\n showSrchWarning: configChanges.showSrchWarning || false\n };\n }\n }\n\n // Method to handle the search action\n onSearch(value: string): void {\n // Emit the search string if it's not empty\n if (value) {\n this.search.emit(value);\n } else {\n this.clearSearch();\n }\n }\n\n // Method to clear the search input and reset related configurations\n clearSearch(box: HTMLInputElement | null = null): void {\n this.searchStr = '';\n if (box) {\n box.value = '';\n }\n this.config.showSrchWarning = false;\n this.config.totalFoundItem = 0;\n this.search.emit('');\n }\n\n // Method to reset the search-related warnings and item count\n resetSearch(): void {\n this.config.showSrchWarning = false;\n this.config.totalFoundItem = 0;\n }\n}\n","
\n \n \n
{{ config.totalFoundItem }}
\n \n \n \n
\n \n No search found!\n
\n
\n ","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\n\n@Directive({\n selector: '[hover-class]'\n})\nexport class HoverClassDirective {\n @Input('hover-class') hoverClass: string;\n\n constructor(private elementRef: ElementRef) {}\n\n @HostListener('mouseenter') onMouseEnter() {\n this.update('add');\n }\n\n @HostListener('mouseleave') onMouseLeave() {\n this.update('remove');\n }\n\n @HostListener('blur') onBlur() {\n this.update('remove');\n }\n\n private update(action: string): void {\n this.hoverClass.split(' ').forEach(item => this.elementRef.nativeElement.classList[action](item));\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'an-action-field',\n templateUrl: './action-field.component.html',\n styleUrls: ['./action-field.component.scss']\n})\nexport class ActionFieldComponent extends BaseDirective {\n /** Name of the field */\n @Input() public name: string;\n /** Value to display on the field */\n @Input() public placeholder: string;\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Emitter for user interaction events */\n @Output('onAction') public on_action = new EventEmitter();\n /** Whether to show tooltip */\n public show_tooltip = false;\n\n /**\n * Emit that the user has performed an action on the field\n */\n public performAction() {\n this.show_tooltip = !this.show_tooltip;\n this.on_action.emit();\n }\n}\n","\n
{{ placeholder }}
\n
\n \n
\n\n","import { Component, forwardRef, Input } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'a-counter',\n templateUrl: './counter.component.html',\n styleUrls: ['./counter.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n /* istanbul ignore next */\n useExisting: forwardRef(() => CounterComponent),\n multi: true,\n },\n ],\n})\nexport class CounterComponent implements ControlValueAccessor {\n /** Maximum amount for the counter */\n @Input() public max: number = 10;\n /** Minimum amount for the counter */\n @Input() public min: number = 0;\n\n @Input() public useInput = false;\n\n /** Current value of the counter */\n public value: number;\n public previous_value: number = 0;\n /** Whether shift key is being held by the user */\n public shift_key: boolean;\n /** Whether control key is being held by the user */\n public ctrl_key: boolean;\n\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n /**\n * Add the `step` to the current value\n */\n public add() {\n if (!this.value) {\n this.value = this.min || 0;\n }\n const step = this.ctrl_key ? 100 : this.shift_key ? 10 : 1;\n this.value += step;\n if (this.value > this.max) {\n this.value = this.max || 10;\n }\n this.setValue(this.value);\n }\n\n /** Remove the `step` from the current value */\n public remove() {\n if (!this.value) {\n this.value = this.min || 0;\n }\n const step = this.ctrl_key ? 100 : this.shift_key ? 10 : 1;\n this.value -= step;\n if (this.value < this.min) {\n this.value = this.min || 0;\n }\n this.setValue(this.value);\n }\n\n public handleTimeout = null;\n\n public onInputChange(new_value: string) {\n if (this.handleTimeout) {\n clearTimeout(this.handleTimeout);\n this.handleTimeout = null;\n }\n this.handleTimeout = setTimeout(() => this.changeInput(new_value), 500);\n }\n\n public changeInput(new_value: string) {\n let value = Number(new_value);\n if (isNaN(value)) {\n value = this.previous_value;\n }\n if (value < this.min) {\n value = this.min || 0;\n }\n if (value > this.max) {\n value = this.max || 10;\n }\n this.setValue(value);\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: number): void {\n this.previous_value = new_value;\n this.value = new_value;\n /* istanbul ignore else */\n if (this._onChange) {\n this._onChange(new_value);\n }\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: number) {\n this.value = value;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n}\n","\n \n \n
\n {{value || '0'}}\n
\n \n\n","import { Component, OnInit, forwardRef, Input, ViewChild, Output, EventEmitter } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport { MatMenuTrigger } from '@angular/material/menu';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n@Component({\n selector: 'a-date-field',\n templateUrl: './date-field.component.html',\n styleUrls: ['./date-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateFieldComponent),\n multi: true\n }\n ]\n})\nexport class DateFieldComponent extends BaseDirective implements OnInit, ControlValueAccessor {\n /** Earliest date available the user is allowed to pick */\n @Input('from') public _from: number = DateNow(new Date()).ms;\n /** Latest date available the user is allowed to pick */\n @Input('to') public _to: number;\n /** Position of the tooltip */\n @Input() public position: 'right' | 'left' = 'right';\n /** Offset of the tooltip */\n @Input() public offset: 'top' | 'bottom' = 'bottom';\n /** Whether form control is disabled */\n @Input() public disabled: boolean;\n /** Whether form control is invalid, touched and contains errors */\n @Input() public error?: boolean;\n /** Optional event emitter for changes */\n @Output() public onChange = new EventEmitter();\n /** Whether to show the calendar tooltip */\n public show_tooltip: boolean;\n /** Currently selected date */\n public date: number;\n\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n @ViewChild(MatMenuTrigger, { static: true }) private _trigger: MatMenuTrigger;\n\n /** First allowed date on the calendar */\n public get from(): number {\n return this._from || DateNow(new Date()).startOfValue('day').ms;\n }\n /** Current date value */\n public get until(): number {\n return this._to || DateNow(new Date()).endOfValue('day').addValue({ years: 1 }).ms;\n }\n /** Display value for the current date */\n public get date_string(): string {\n // R--- Needs TZ aware inputs\n const date = new DateTZ({date: this.date})\n return date.formatDate('dd MMM yyyy');\n }\n\n /** Whether date picker is open */\n public get is_open(): boolean {\n return this._trigger.menuOpen;\n }\n\n public ngOnInit() {\n this.date = DateNow(new Date()).ms;\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: number) {\n // Keep hours and minutes of the old date\n const old_date = new DateTZ({date: this.date });\n const new_d = new DateTZ({date: new_value})\n let new_date = new_d\n .setValue({ hour: old_date.dateHour, minute: old_date.minutes })\n .ms;\n // Check that new date is before from\n if (new_date < this.from) {\n new_date = this.from;\n }\n this.date = new_date;\n if (this._onChange) {\n this._onChange(new_date);\n this.onChange.emit(new_date);\n }\n this.show_tooltip = false;\n }\n\n /* istanbul ignore next */\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: number) {\n this.date = value;\n this.show_tooltip = false;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /** Set the state of the tooltip to closed after delay */\n public closeDatePicker() {\n this._trigger.closeMenu();\n }\n\n /** Set the state of the tooltip to closed after delay */\n public openDatePicker() {\n this._trigger.openMenu();\n }\n}\n","\n
{{ date_string }}
\n
\n \n
\n\n\n
\n \n
\n
\n","import {\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\n\nimport {\n humaniseDuration,\n Identity,\n timeFormatString\n} from '@mckinsey-converge/base';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\n\n@Component({\n selector: 'a-duration-field',\n templateUrl: './duration-field.component.html',\n styleUrls: ['./duration-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DurationFieldComponent),\n multi: true\n }\n ]\n})\nexport class DurationFieldComponent extends BaseDirective\n implements OnInit, OnChanges, ControlValueAccessor {\n /** Maximum duration option available */\n @Input() public max: number = 240;\n /** Minimum duration option available */\n @Input() public min: number = 15;\n /** Step value between options */\n @Input() public step: number = 15;\n /** Reference time for displaying next to durations */\n @Input() public time: number;\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Special case prepopulation i.e. out of step options */\n @Input() public specialPreprops: Array = [];\n /** Whether form all_day is enabled. */\n @Input() public all_day: boolean = false;\n\n public duration: number = 60;\n /** List of available duration options */\n public duration_options: Identity[];\n\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n public ngOnInit(): void {\n this.duration_options = this.generateDurationOptions(this.max, this.min, this.step, this.all_day);\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n /* istanbul ignore else */\n if (changes.max || changes.min || changes.step || changes.time || changes.all_day) {\n this.duration_options = this.generateDurationOptions(this.max, this.min, this.step, this.all_day);\n }\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: number): void {\n this.duration = new_value;\n /* istanbul ignore else */\n if (this._onChange) {\n this._onChange(+new_value);\n }\n }\n\n /* istanbul ignore next */\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: number) {\n this.duration = value;\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n\n private generateDurationOptions(max: number, min: number, step: number, all_day: boolean = false): Identity[] {\n const blocks: Identity[] = [];\n let time = min;\n // R--- Change input to dateTz\n let date = this.time ? new DateTZ({date: this.time}) : null;\n\n // Add special case for 10min duration/prepropulation\n for (const option of this.specialPreprops) {\n blocks.push({\n id: option,\n name: date\n ? `${date.addValue({ minutes: option }).formatDate(timeFormatString()).toLocaleLowerCase()} (${humaniseDuration(option)})`\n : `${humaniseDuration(option)}`\n });\n }\n\n\n while (time <= max) {\n blocks.push({\n id: time,\n name: date\n ? `${date.addValue({ minutes: time }).formatDate(timeFormatString()).toLocaleLowerCase()} (${humaniseDuration(time)})`\n : `${humaniseDuration(time)}`\n });\n time += step;\n }\n if (all_day) {\n blocks.push({ id: 24 * 60, name: 'All Day' }); \n }\n blocks.push({ id: 7 * 24 * 60, name: '1 week' });\n return blocks;\n }\n}\n","
\n \n \n \n {{ option.name }}\n \n \n \n
\n","export * from './action-field/action-field.component'\nexport * from './counter/counter.component'\nexport * from './date-field/date-field.component'\nexport * from './duration-field/duration-field.component'\nexport * from './time-field/time-field.component'\nexport * from './user-search-field/user-search-field.component'\nexport * from './user-list-field/user-list-field.component'\n","import {\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\nimport { MatSelect } from '@angular/material/select';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n Identity,\n timeFormatString\n} from '@mckinsey-converge/base';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n@Component({\n selector: 'a-time-field',\n templateUrl: './time-field.component.html',\n styleUrls: ['./time-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TimeFieldComponent),\n multi: true\n }\n ]\n})\nexport class TimeFieldComponent extends BaseDirective implements OnInit, OnChanges, ControlValueAccessor {\n /** Time step between each allowed time option */\n @Input() public step: number = 15;\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Whether past times are allowed */\n @Input() public no_past_times: boolean = true;\n /** String representing the currently set time */\n public date: number = DateNow(new Date()).ms;\n /** String representing the currently set time */\n public time: string = DateNow(new Date()).formatDate('HH:mm');\n /** Available time blocks for the selected date */\n public _time_options: Identity[];\n /** Whether select field should be shown */\n public show_select: boolean;\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n /** Select field for selecting the time */\n @ViewChild('select') private select_field: MatSelect;\n\n // R--- This is the form input that needs to be TZ active.\n public ngOnInit(): void {\n this.show_select = true;\n this._time_options = this.generateAvailableTimes(this.date, !this.no_past_times, this.step);\n this.timeout('hide', () => this.show_select = false);\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.no_past_times || changes.step) {\n this._time_options = this.generateAvailableTimes(this.date, !this.no_past_times, this.step);\n }\n }\n\n public get date_(){\n return new DateTZ({date: this.date})\n }\n\n /** Available time blocks for the selected date */\n public get time_options() {\n const time = (this.time || '00:00').split(':');\n const date = this.date_.setValue({ hour: +time[0], minute: +time[1] });\n if (date.minutes % 15 !== 0 && !this._time_options.find(time => time.id === date.formatDate('HH:mm'))) {\n this._time_options.push({\n name: `${date.formatDate(timeFormatString())}`,\n id: date.formatDate('HH:mm')\n });\n this._time_options.sort((a, b) => `${a.id}`.localeCompare(`${b.id}`));\n }\n return this._time_options;\n }\n\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: string): void {\n this.time = new_value;\n if (this._onChange) {\n const time = (this.time || '00:00').split(':');\n const date = this.date_.setValue({ hour: +time[0], minute: +time[1] }).startOfValue('minute');\n this._onChange(date.ms);\n }\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: number) {\n if (!value) {\n return;\n }\n this.date = value;\n let date = this.date_.startOfValue('minute');\n date = date.setValue({ minute: Math.ceil(date.minutes / 5) * 5 });\n this.time = date.formatDate('HH:mm');\n this._time_options = this.generateAvailableTimes(this.date, !this.no_past_times, this.step);\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n\n /**\n * Show select field for time options\n */\n public showSelect() {\n this.show_select = true;\n this.timeout('on_shown', () => {\n if (this.select_field) {\n this.select_field.focus();\n this.select_field.open();\n this.subscription('listen_close', this.select_field.openedChange.subscribe((state) => {\n if (!state) {\n this.show_select = false;\n }\n }));\n }\n });\n }\n\n /**\n * Generate a list of time options for the given date\n * @param datestamp Date to generate options for\n * @param show_past Whether past times should be options\n */\n private generateAvailableTimes(datestamp: number, show_past: boolean, step: number = 15): Identity[] {\n let date = new DateTZ({date: datestamp});\n const blocks = [];\n if (show_past || date.isAfterDate(DateNow(new Date()))) {\n date = date.startOfValue('day');\n } else if (date.isAfterDate(DateNow(new Date()))) {\n date = DateNow(new Date());\n }\n date = date.setValue({ minute: Math.ceil(date.minutes / step) * step });\n const end = date.endOfValue('day');\n // Add options for the rest of the day\n while (date.isBeforeDate(end)) {\n blocks.push({\n name: `${date.formatDate(timeFormatString()).toLocaleLowerCase()}`,\n id: date.formatDate('HH:mm')\n });\n date = date.addValue({ minutes: step });\n }\n return blocks;\n }\n}\n","\n
\n \n
\n
\n \n
\n\n\n \n \n {{ option.name }}\n \n \n\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n forwardRef,\n Input,\n OnInit,\n Output,\n ViewChild\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\nimport {\n Observable,\n of,\n Subject\n} from 'rxjs';\nimport {\n catchError,\n debounceTime,\n distinctUntilChanged,\n tap,\n map,\n switchMap,\n finalize\n} from 'rxjs/operators';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n ApplicationService,\n User,\n UsersService\n} from '@mckinsey-converge/data-common';\nimport {\n csvToJson,\n downloadFile,\n filterList,\n matchToHighlight\n} from '@mckinsey-converge/base';\nimport { MatAutocompleteTrigger } from '@angular/material/autocomplete';\n\n@Component({\n selector: 'a-user-list-field',\n templateUrl: './user-list-field.component.html',\n styleUrls: ['./user-list-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UserListFieldComponent),\n multi: true\n }\n ]\n})\nexport class UserListFieldComponent extends BaseDirective implements OnInit, ControlValueAccessor {\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Number of characters needed before a search will start */\n @Input() public limit: number = 3;\n /** Emitter for action to make a new user */\n @Output('newUser') public new_user = new EventEmitter();\n\n /** User list to display */\n public user_list: User[];\n /** List of active selected users on the list */\n public active_list: User[];\n /** Whether user list is loading */\n public loading: boolean;\n /** String */\n public search_str: string;\n /** List of users from an API search */\n public search_results$: Observable;\n /** Subject holding the value of the search */\n public search$ = new Subject();\n\n /** Form control on change handler */\n private _onChange: (_: User[]) => void;\n /** Form control on touch handler */\n private _onTouch: (_: User[]) => void;\n\n @ViewChild(MatAutocompleteTrigger, {read: MatAutocompleteTrigger}) inputAutoComplete: MatAutocompleteTrigger;\n\n constructor(private _service: ApplicationService, private _users: UsersService, private cdRef: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit() {\n // Listen for input changes\n this.search_results$ = this.search$.pipe(\n debounceTime(100),\n distinctUntilChanged(),\n switchMap((query) => {\n this.loading = true;\n return query.length >= this.limit\n ? this._users.query({\n q: query.slice(0, Math.max(this.limit, 3)),\n cache: 60 * 1000\n })\n : Promise.resolve([]);\n }),\n catchError((_) => of([])),\n map((list: User[]) => {\n this.loading = false;\n return filterList(this.search_str, list, ['name', 'email']);\n })\n );\n // Process API results\n this.subscription(\n 'search_results',\n this.search_results$.subscribe((list) => {\n this.user_list = list;\n this.user_list.forEach((i: any) => {\n i.match_name = matchToHighlight(i.match_name);\n i.match_email = matchToHighlight(i.match_email);\n return i;\n });\n this.user_list.length ? this.inputAutoComplete.openPanel() : this.inputAutoComplete.closePanel();\n })\n );\n }\n\n /**\n * Add user to the user list\n * @param user\n */\n public addUser(user: User) {\n /* istanbul ignore else */\n if (!this.active_list) {\n this.active_list = [];\n }\n const index = this.active_list.findIndex((a_user) => a_user.id === user.id);\n /* istanbul ignore else */\n if (index < 0) {\n this.active_list = [...this.active_list, user];\n }\n this.setValue(this.active_list);\n this.search_str = '';\n }\n\n /**\n * Remove user from the user list\n * @param user\n */\n public removeUser(user: User) {\n this.active_list = this.active_list.filter((a_user) => a_user.id !== user.id);\n this.setValue(this.active_list);\n }\n\n /**\n * Load CSV file and populate the user list with the contents\n * @param event File input field event\n */\n public addUsersFromFile(event) {\n /* istanbul ignore else */\n if (event.target) {\n const file = event.target.files[0];\n /* istanbul ignore else */\n if (file) {\n const reader = new FileReader();\n reader.readAsText(file, 'UTF-8');\n reader.addEventListener('load', (evt) => {\n this.processCsvData((evt.srcElement as any).result);\n event.target.value = '';\n this.cdRef.detectChanges();\n });\n reader.addEventListener('error', (_) =>\n this._service.notifyError('Error reading file.')\n );\n }\n }\n }\n\n /**\n * Process raw CSV data and save user data to attendee list\n * @param data CSV data\n */\n private processCsvData(data: string) {\n const list = csvToJson(data) || [];\n const id = this._users.current.staff_code; \n list.forEach((el) => {\n const firstName = el.first_name.split(' ').map((word: string) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(' ');\n const lastName = el.last_name.split(' ').map((word: string) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(' ');\n\n el.name = el.name || `${firstName} ${lastName}`;\n const display = (el.name || `${Math.floor(Math.random() * 9999_9999)}`)\n .split(' ')\n .join('_')\n .toLowerCase();\n /* istanbul ignore else */\n if (!el.email) {\n el.email = `${display}+${id}@guest.mckinsey.com`;\n }\n el.type = 'external';\n el.external = !el.email.endsWith(\"@mckinsey.com\") && !el.email.endsWith(\"@external.mckinsey.com\");\n this.addUser(new User(el));\n });\n }\n\n /* istanbul ignore next */\n /** Download template CSV file */\n public downloadCSVTemplate() {\n const template = `Organisation Name,First Name,Last Name,Email,Phone\\nFake Org,John,Smith,john.smith@example.com,01234567898`;\n downloadFile('template.csv', template);\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: User[]): void {\n this.active_list = new_value;\n if (this._onChange) {\n this._onChange(new_value);\n }\n }\n\n /* istanbul ignore next */\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: User[]) {\n this.active_list = value;\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: User[]) => void): void {\n this._onChange = fn;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: User[]) => void): void {\n this._onTouch = fn;\n }\n}\n","
\n \n \n
\n \n
\n
\n \n
\n
\n \n \n
{{ option.name }}
\n
{{ option.email }}
\n
\n
\n
\n \n \n \n
\n
\n \n \n {{ user.name }}\n \n \n \n
\n
\n\n
No attendees
\n
\n","import {\n Component,\n forwardRef,\n Input,\n OnInit,\n ViewChild\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\nimport {\n Observable,\n of,\n Subject\n} from 'rxjs';\nimport {\n catchError,\n debounceTime,\n distinctUntilChanged,\n map,\n switchMap\n} from 'rxjs/operators';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n User,\n UsersService\n} from '@mckinsey-converge/data-common';\nimport {\n filterList,\n matchToHighlight\n} from '@mckinsey-converge/base';\nimport { MatAutocompleteTrigger } from '@angular/material/autocomplete';\n\n@Component({\n selector: 'a-user-search-field',\n templateUrl: './user-search-field.component.html',\n styleUrls: ['./user-search-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UserSearchFieldComponent),\n multi: true\n }\n ]\n})\nexport class UserSearchFieldComponent extends BaseDirective implements OnInit, ControlValueAccessor {\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Limit available options to these */\n @Input() public options: User[];\n /** Currently selected user */\n public active_user: User;\n /** User list to display */\n public user_list: User[];\n /** Whether user list is loading */\n public loading: boolean;\n /** Current display value of the search input field */\n public search_str: string;\n /** List of users from an API search */\n public search_results$: Observable;\n /** Subject holding the value of the search */\n public search$ = new Subject();\n\n /** Form control on change handler */\n private _onChange: (_: User) => void;\n /** Form control on touch handler */\n private _onTouch: (_: User) => void;\n @ViewChild(MatAutocompleteTrigger, {read: MatAutocompleteTrigger}) inputAutoComplete: MatAutocompleteTrigger;\n \n constructor(private _users: UsersService) {\n super();\n }\n\n public ngOnInit(): void {\n\n // Listen for input changes\n this.search_results$ = this.search$.pipe(\n debounceTime(400),\n distinctUntilChanged(),\n switchMap(query => {\n this.loading = true;\n return this.options && this.options.length > 0\n ? Promise.resolve(this.options)\n : query.length >= 3\n ? (this._users.query({ q: query, cache: 60 * 1000 }) as Promise)\n : Promise.resolve([]);\n }),\n catchError((err) => of([])),\n map((list: User[]) => {\n this.loading = false;\n return filterList(this.search_str, list, ['name', 'email']);\n })\n );\n // Process API results\n this.subscription('search_results', this.search_results$.subscribe(list => {\n this.user_list = list;\n this.user_list.forEach((i: any) => {\n i.match_name = matchToHighlight(i.match_name);\n i.match_email = matchToHighlight(i.match_email);\n return i;\n });\n this.user_list.length ? this.inputAutoComplete.openPanel() : this.inputAutoComplete.closePanel();\n }));\n }\n\n /**\n * Reset the search string back to the name of the active user\n */\n public resetSearchString() {\n if (this.active_user) {\n this.search_str = this.active_user.name;\n }\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: User): void {\n this.active_user = new_value;\n if (this._onChange) {\n this._onChange(new_value);\n }\n this.resetSearchString();\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: User) {\n this.active_user = value;\n this.resetSearchString();\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: User) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: User) => void): void {\n this._onTouch = fn;\n }\n}\n","
\n \n \n
\n \n
\n
\n \n
\n
\n \n \n
{{ option.name }}
\n
{{ option.email }}
\n
\n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'feedback',\n templateUrl: './feedback.component.html',\n styleUrls: ['./feedback.component.scss'],\n})\nexport class FeedbackComponent extends BaseDirective implements OnInit {\n /** Name of the currently active page */\n public current_page: string;\n\n constructor(private _router: Router) {\n super();\n }\n\n public ngOnInit(): void {\n this.timeout('Getting Title', () => this.updateRoute(document.title), 1000);\n this._router.events.subscribe((event: NavigationEnd) => {\n /* istanbul ignore else */\n if (event instanceof NavigationEnd) {\n this.timeout('Getting Title', () => this.updateRoute(document.title));\n }\n });\n }\n\n public updateRoute(location) {\n location = location.substr(0, location.indexOf(' |'));\n this.current_page = location;\n }\n}\n","\n
\n Feedback\n \n \n \n
\n
\n","import {\n Component,\n Input\n} from '@angular/core';\nimport { ApplicationIcon } from '@mckinsey-converge/data-common';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'app-icon',\n templateUrl: './icon.component.html',\n styleUrls: ['./icon.component.scss']\n})\nexport class IconComponent extends BaseDirective {\n @Input() public icon: ApplicationIcon;\n}\n","
\n {{ icon.content }}\n \n
\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n ActionFieldComponent,\n CounterComponent,\n DateFieldComponent,\n DurationFieldComponent,\n TimeFieldComponent,\n UserListFieldComponent,\n UserSearchFieldComponent\n} from './custom-fields';\nimport { IconComponent } from './icon/icon.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { ACA_PIPES_MODULE } from '@acaprojects/ngx-pipes';\nimport {\n FormsModule,\n ReactiveFormsModule\n} from '@angular/forms';\nimport { FeedbackComponent } from './feedback/feedback.component';\nimport { ActionIconComponent } from './action-icon/action-icon.component';\nimport { PopoutMenuComponent } from './popout-menu/popout-menu.component';\nimport { SearchbarComponent } from './searchbar/searchbar.component';\nimport { UserAvatarComponent } from './user-avatar/user-avatar.component';\nimport { CateringMenuItemComponent } from './bookings/catering/item/item.component';\nimport { PackageOptionsModalComponent } from './bookings/catering/package-options-modal/package-options-modal.component';\nimport { BaseModule } from '@mckinsey-converge/base';\nimport { UiModule } from '@mckinsey-converge/ui';\nimport { CngSearchBarComponent } from './cng-search-bar/cng-search-bar.component';\nimport { HoverClassDirective } from './cng-search-bar/hover-class.directive';\n\nconst DECLARATIONS = [\n ActionFieldComponent,\n IconComponent,\n CounterComponent,\n DateFieldComponent,\n DurationFieldComponent,\n TimeFieldComponent,\n UserSearchFieldComponent,\n UserListFieldComponent,\n FeedbackComponent,\n ActionIconComponent,\n PopoutMenuComponent,\n SearchbarComponent,\n UserAvatarComponent,\n CateringMenuItemComponent,\n PackageOptionsModalComponent,\n CngSearchBarComponent,\n HoverClassDirective\n];\n\nconst MATERIAL_MODULES: any[] = [\n MatButtonModule,\n MatSnackBarModule,\n MatDialogModule,\n MatFormFieldModule,\n MatInputModule,\n MatProgressSpinnerModule,\n MatProgressBarModule,\n MatAutocompleteModule,\n MatSelectModule,\n MatChipsModule,\n MatRippleModule,\n MatMenuModule,\n MatCheckboxModule,\n MatTooltipModule,\n MatRadioModule,\n MatTabsModule,\n MatSlideToggleModule\n];\n\n@NgModule({\n imports: [\n CommonModule,\n ACA_PIPES_MODULE,\n FormsModule,\n ReactiveFormsModule,\n ...MATERIAL_MODULES,\n BaseModule,\n UiModule\n ],\n declarations: [\n ...DECLARATIONS\n ],\n exports: [\n ACA_PIPES_MODULE,\n ...DECLARATIONS,\n ...MATERIAL_MODULES,\n BaseModule,\n ]\n})\nexport class LegacyUiModule {\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output\n} from '@angular/core';\nimport { ApplicationIcon } from '@mckinsey-converge/data-common';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\nexport interface PopoutAction extends ApplicationIcon {\n /** ID of the action */\n id: string;\n}\n\n@Component({\n selector: 'a-popout-menu',\n templateUrl: './popout-menu.component.html',\n styleUrls: ['./popout-menu.component.scss']\n})\nexport class PopoutMenuComponent extends BaseDirective {\n /** List of available actions */\n @Input() public actions: PopoutAction[] = [];\n /** Emitter for user actions */\n @Output() public action = new EventEmitter();\n /** Whether actions should show */\n public show: boolean;\n\n public close() {\n this.timeout('close', () => {\n this.show = false;\n });\n }\n}\n","\n \n\n\n","import { Component, OnInit, Input, EventEmitter, Output, ViewChild, ElementRef, SimpleChanges, OnChanges } from '@angular/core';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'a-searchbar',\n templateUrl: './searchbar.component.html',\n styleUrls: ['./searchbar.component.scss']\n})\nexport class SearchbarComponent extends BaseDirective implements OnChanges {\n /** Current contents of the searchbar input */\n @Input('value') public value: string;\n /** Current contents of the searchbar input */\n @Input() public placeholder: string;\n /** Whether external changes are being processed */\n @Input() public loading: boolean;\n /** Whether external changes are being processed */\n @Input() public autofocus: boolean;\n /** Emitter for changes to the searchbar value */\n @Output() public valueChange = new EventEmitter();\n /** Input field reference */\n @ViewChild('input', { static: true }) private input_field: ElementRef;\n\n public ngOnChanges(changes: SimpleChanges): void {\n /* istanbul ignore else */\n if (changes.autofocus && this.autofocus) {\n this.focusField()\n }\n }\n\n public focusField() {\n /* istanbul ignore else */\n if (this.input_field && this.input_field.nativeElement) {\n this.input_field.nativeElement.focus();\n }\n }\n}\n","
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n","import { Component, Input } from '@angular/core';\nimport { User } from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'a-user-avatar',\n templateUrl: './user-avatar.component.html',\n styleUrls: ['./user-avatar.component.scss']\n})\nexport class UserAvatarComponent {\n /** User to display avatar for */\n @Input() public user: User;\n\n public get initials(): string {\n if (!this.user) {\n return 'NA';\n }\n const parts = this.user.name.split(' ');\n return parts.length > 1\n ? `${parts[0][0]}${parts[parts.length - 1][0]}`\n : this.user.name.slice(0, 2);\n }\n}\n","
\n
{{ initials }}
\n
\n\n \n\n","export * from './lib/loading.actions'\nexport * from './lib/loading.model'\nexport * from './lib/loading.effects'\nexport * from './lib/loading.selectors'\nexport * from '../testing'\n","import {\n createAction,\n createSelector,\n on,\n On,\n props\n} from '@ngrx/store';\nimport {\n LoadingModel,\n wrapLoading\n} from './loading.model';\nimport {\n selectIsLoading,\n selectOptionalError,\n selectOptionalSuccess,\n selectSuccess\n} from './loading.selectors';\nimport { MemoizedSelector } from '@ngrx/store/src/selector';\nimport {\n ActionCreator,\n NotAllowedCheck,\n TypedAction\n} from '@ngrx/store/src/models';\nimport { HashMap } from '@mckinsey-converge/base';\n\nexport interface Payload {\n payload: T\n}\n\nexport type LoadingAction = T & TypedAction\nexport type LoadingActionCreator = T extends null | undefined ?\n ActionCreator TypedAction>\n : ActionCreator) => LoadingAction>\n\ntype ClearAction = ActionCreator TypedAction>\n\ninterface Selectors {\n success: MemoizedSelector\n optionalSuccess: MemoizedSelector\n error: MemoizedSelector\n loading: MemoizedSelector\n model: (TState) => LoadingModel\n}\n\nexport interface LoadingActionObject {\n request: LoadingActionCreator\n success: LoadingActionCreator>\n error: LoadingActionCreator>\n clear: ClearAction,\n ons: On[],\n selectors: Selectors\n}\n\n/**\n * Creates a {@link LoadingActionObject} that contains a set of ActionCreators\n * for request, success, error, loading, and clear data. Also, it contains\n * the necessary On reducers and selectors in order to properly connect them in\n * a standardized way to data in the application.\n *\n * `TState` is the type of data on your reducer, not global store.\n * `TRequest` is an object type to use in request methods.\n * `TSuccess` is the object type of the T parameter on `LoadingModel`.\n *\n * This assumes you have state represented by:\n * ```typescript\n * interface SomeState {\n * stateKey: LoadingModel\n * }\n * ```\n *\n * To dispatch an action:\n * ```typescript\n *\n * // request parameters depend on the object type used as second type parameter\n * // in createLoadingAction\n * this.store.dispatch(someLoadingAction.request())\n *\n * // action created with createLoadingAction\n * this.store.dispatch(someLoadingAction.request({\n * name: 'Andrew G',\n * age: 24\n * }))\n *\n * ```\n *\n * The generated selectors only select data from its fractured state, not the global\n * store. In order to use them, make sure you {@link select} the global state\n * before using them:\n *\n * ```typescript\n *\n * this.store.pipe(\n * select(selectSomeState),\n * select(someLoadingAction.selectors.success)\n * ).subscribe(next => {\n *\n * })\n *\n * ```\n *\n * @param actionPrefix - Prefixes actions to uniquely identify them.\n * @param stateKey - The field within the reducer state to set data on.\n */\nexport const createLoadingAction = (\n actionPrefix: string,\n stateKey: keyof TState\n): LoadingActionObject => {\n const buildAction = (postfix: string) => `[${actionPrefix}] ${postfix}`;\n // @ts-ignore\n const request = createAction(buildAction('request'), props());\n const success = createAction(buildAction('success'), props>());\n const error = createAction(buildAction('error'), props>());\n const clear = createAction(buildAction('clear'));\n const ons: On[] = [\n on(request, (state: TState & HashMap>, action: LoadingAction) =>\n ({\n ...state,\n [stateKey]: wrapLoading(state[stateKey]).loading()\n })),\n on(success, (state: TState & HashMap>, action: LoadingAction>) => ({\n ...state,\n [stateKey]: LoadingModel.success(action.payload)\n })),\n // some reason specifying state like in success and request does not work.\n on(error, (state: any, action: LoadingAction>) => ({\n ...state,\n [stateKey]: LoadingModel.error(action.payload)\n })),\n on(clear, () => ({\n ...this.state,\n [stateKey]: LoadingModel.empty()\n }))\n ];\n const selectData = (state: TState) => {\n if (!state) {\n console.warn('[LoadingActions] State is empty for key', stateKey);\n }\n return wrapLoading(state?.[stateKey] as unknown as LoadingModel);\n };\n const selSuccess = createSelector, TSuccess>(\n selectData,\n selectSuccess\n );\n const selOptionalSuccess = createSelector(\n selectData,\n selectOptionalSuccess\n );\n const selError = createSelector(\n selectData,\n selectOptionalError\n );\n const selLoading = createSelector(\n selectData,\n selectIsLoading\n );\n return {\n request,\n success,\n error,\n clear,\n ons,\n selectors: {\n success: selSuccess,\n optionalSuccess: selOptionalSuccess,\n error: selError,\n loading: selLoading,\n model: selectData\n }\n };\n};\n","import {\n Actions,\n ofType\n} from '@ngrx/effects';\n\nimport { \n LoadingAction,\n LoadingActionObject\n} from '../../../loading/src/lib/loading.actions';\n\nimport {\n catchError,\n flatMap,\n map\n} from 'rxjs/operators';\nimport {\n Observable,\n of\n} from 'rxjs';\nimport { TypedAction } from '@ngrx/store/src/models';\n\n/**\n * This creates an effect to use in Effects classes. This coordinates a simple\n * success and error payload effect.\n * @param actions - The actions object\n * @param actionObject - The created createLoadingAction object.\n * @param caller - Define what API method or asynchronous operation is needed to\n * run this. Return TSuccess.\n */\nexport const createLoadingEffect = (\n actions: Actions, actionObject: LoadingActionObject,\n caller: (action: LoadingAction) => Promise): Observable> => actions.pipe(\n ofType(actionObject.request),\n flatMap((action) => caller(action as LoadingAction)),\n map((response: TSuccess) => actionObject.success({ payload: response })),\n catchError(err => {\n return of(actionObject.error({ payload: err }));\n })\n);\n","/* eslint-disable no-underscore-dangle,no-useless-constructor */\n/**\n * Wraps around the typical data objects we write for success, error, loading, and empty state. This convenience\n * wrapper consolidates all of that logic into a handy wrapper.\n */\nexport class LoadingModel {\n static empty = () => new LoadingModel(false, false, false, undefined);\n\n static success = (success?: T): LoadingModel =>\n new LoadingModel(false, false, true, success);\n\n static error = (error?: Error, optionalSuccess?: T): LoadingModel =>\n new LoadingModel(false, true, false, optionalSuccess, error);\n\n /**\n * Mutates the model with a success state, preserving other state fields.\n * @param success - override success state.\n */\n mutate = (\n success: T2 | null) => new LoadingModel(\n this.isLoading,\n this.hasError,\n !!success,\n !success ? undefined : success\n );\n\n loading = (success: T | null = this.success) =>\n new LoadingModel(\n true,\n false,\n !!success && this.hasSuccess,\n !success ? undefined : success\n );\n\n public get success(): T {\n return this._success as T;\n }\n\n public get optionalSuccess(): T | undefined {\n return this._success;\n }\n\n constructor(\n public isLoading: boolean,\n private hasError: boolean,\n private hasSuccess: boolean,\n private _success?: T,\n public error?: Error\n ) {\n }\n\n isEmpty = () => !this.isSuccess() && !this.isError();\n\n hasLoaded = () => !this.isEmpty() && !this.isLoading;\n\n isSuccess = () => this.hasSuccess;\n\n isError = () => this.hasError;\n\n shouldLoad = () => !this.isSuccess() && !this.isLoading;\n\n public toString = () =>\n `Loading: ${this.isLoading}, Success: ${this.hasSuccess}:**${this._success}**, ` +\n `Error: ${this.hasError}:${this.error}`;\n}\n\n/**\n * Wraps an object that conforms to LoadingModel to restore object loss from\n * hydrating state during development.\n */\nexport const wrapLoading = (loading: any): LoadingModel => {\n if (loading instanceof LoadingModel) {\n return loading;\n } else {\n if (!loading) {\n return LoadingModel.empty();\n } else {\n return new LoadingModel(\n loading.isLoading || false,\n loading.hasError || false,\n loading.hasSuccess || false,\n loading._success,\n loading.error\n );\n }\n }\n};\n","import { LoadingModel, wrapLoading } from './loading.model';\n\nexport const selectSuccess = (state: LoadingModel) =>\n wrapLoading(state).success;\nexport const selectOptionalSuccess = (state: LoadingModel) =>\n wrapLoading(state).optionalSuccess;\nexport const selectIsLoading = (state: LoadingModel) =>\n wrapLoading(state).isLoading;\nexport const selectIsSuccess = (state: LoadingModel) =>\n wrapLoading(state).isSuccess();\nexport const selectOptionalError = (state: LoadingModel) =>\n wrapLoading(state).error;\nexport const selectIsError = (state: LoadingModel) =>\n wrapLoading(state).isError();\nexport const selectHasLoaded = (state: LoadingModel) =>\n wrapLoading(state).hasLoaded();\nexport const selectIsEmpty = (state: LoadingModel) =>\n wrapLoading(state).isEmpty();\n\n","import {\n Observable,\n Subject\n} from 'rxjs';\nimport { Action } from '@ngrx/store';\nimport { Actions } from '@ngrx/effects';\nimport { TypedAction } from '@ngrx/store/src/models';\nimport { take } from 'rxjs/operators';\nimport {\n LoadingActionObject\n} from '../src/lib/loading.actions';\n\nexport const generateMockActions = () => {\n const dispatcher = new Subject();\n return {\n dispatcher,\n actions: new Actions(dispatcher)\n };\n};\n\n/**\n * Simple verifier that checks if the request action results in a success returned.\n */\nexport const verifyActionSuccess = (\n action: LoadingActionObject,\n effect: Observable>,\n dispatcher: Subject,\n options: {\n data: TSuccess,\n payload?: TRequest,\n }) => {\n let result: TypedAction;\n effect\n .pipe(take(1))\n .subscribe(next => {\n result = next;\n });\n // payload has type issues, just ignore them since we specify TRequest as type param already.\n dispatcher.next(action.request((options.payload || {}) as never));\n\n expect(result).toBeDefined();\n expect(result).toStrictEqual(action.success({ payload: options.data }));\n};\n\n/**\n * Simple verifier that checks if the request action results in a failure returned.\n */\nexport const verifyActionError = (\n action: LoadingActionObject,\n effect: Observable>,\n dispatcher: Subject,\n options: {\n error: Error,\n payload?: TRequest\n }) => {\n let result: TypedAction;\n effect\n .pipe(take(1))\n .subscribe(next => {\n result = next;\n });\n // payload has type issues, just ignore them since we specify TRequest as type param already.\n dispatcher.next(action.request((options.payload || {}) as never));\n\n expect(result).toBeDefined();\n expect(result).toStrictEqual(action.error({ payload: options.error }));\n};\n","export * from './effects.testing'\n","export * from './lib/organisation.module';\nexport * from './lib/organisation.actions';\n","import { OrganisationState } from './organisation.reducer';\nimport { createLoadingAction } from '@mckinsey-converge/loading';\nimport { Organisation } from '@mckinsey-converge/data-common';\n\nexport const organisationStateSelector = (state: { organisation: OrganisationState }) => state.organisation;\n\nexport const loadOrganisations = createLoadingAction('Organisation', 'data');\n","import { Injectable } from '@angular/core';\nimport {\n Actions,\n Effect\n} from '@ngrx/effects';\nimport { createLoadingEffect } from '@mckinsey-converge/loading';\nimport { loadOrganisations } from './organisation.actions';\nimport { OrganisationService } from '@mckinsey-converge/data-common';\n\n\n@Injectable()\nexport class OrganisationEffects {\n\n constructor(private actions: Actions,\n private organisationService: OrganisationService) {\n }\n\n @Effect()\n public loadOrganisations = createLoadingEffect(this.actions, loadOrganisations,\n () => this.organisationService.loadOrganisation())\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\nimport { organisationReducer } from './organisation.reducer';\nimport { OrganisationEffects } from './organisation.effects';\n\n@NgModule({\n imports: [\n CommonModule,\n EffectsModule.forFeature([\n OrganisationEffects\n ]),\n StoreModule.forFeature('organisation', organisationReducer)\n ]\n})\nexport class OrganisationModule {\n}\n","import { LoadingModel } from '@mckinsey-converge/loading';\nimport { Organisation } from '@mckinsey-converge/data-common';\nimport { createReducer } from '@ngrx/store';\nimport { loadOrganisations } from './organisation.actions';\n\nexport interface OrganisationState {\n data: LoadingModel\n}\n\nconst initialState: OrganisationState = {\n data: LoadingModel.empty()\n};\n\nexport const organisationReducer = createReducer(initialState,\n ...loadOrganisations.ons);\n","export * from './lib/rooms.module';\nexport * from './lib/rooms.actions'\nexport * from './lib/rooms.reducer'\nexport * from './lib/rooms.types'\nexport * from './lib/rooms.utils'\n","import { createLoadingAction } from '../../../loading/src/lib/loading.actions';\nimport { Space } from '../../../data-common/src/lib/spaces/space.class';\nimport {\n RoomQueryOptions,\n RoomState,\n RoomStoreState\n} from './rooms.types';\nimport {\n createAction,\n createSelector,\n props\n} from '@ngrx/store';\n\nexport const roomStateSelector = (state: RoomStoreState) => state.rooms;\n\nexport const loadRoomsWithQuery = createAction('[Rooms] Load Rooms with query', props());\n\nexport const loadRoomsForResults = createLoadingAction('Rooms', 'query');\n\nexport const loadRoomsForResultsMap = createLoadingAction('Rooms for map', 'query');\n\n\nexport const loadLaterThatDayResults = createLoadingAction('Later Rooms', 'later');\n\nexport const loadNextDayResults = createLoadingAction('Next Day Rooms', 'next');\n\nexport const loadByIdResults = createLoadingAction('By Id Rooms', 'byid');\n\nexport const selectRoomResultsSuccess = createSelector(roomStateSelector,\n loadRoomsForResults.selectors.optionalSuccess);\n\nexport const loadDiffSizeResults = createLoadingAction('Different Size Rooms', 'size');\n","import { Injectable } from '@angular/core';\nimport {\n Actions,\n Effect,\n ofType\n} from '@ngrx/effects';\nimport { SpacesService } from '@mckinsey-converge/data-common';\nimport {\n createLoadingEffect,\n LoadingAction\n} from '@mckinsey-converge/loading';\nimport {\n loadLaterThatDayResults,\n loadNextDayResults,\n loadRoomsForResults,\n loadRoomsForResultsMap,\n loadRoomsWithQuery,\n loadByIdResults,\n loadDiffSizeResults\n} from './rooms.actions';\nimport { mergeMap } from 'rxjs/operators';\nimport {\n laterThatDayFromDateTz,\n nextBusinessDay,\n} from './rooms.utils';\nimport {\n RoomQueryOptions,\n roomQueryOptionsToSpaceAvailabilityOptions,\n roomByIdQueryOptionsToSpaceAvailabilityOptions\n} from './rooms.types';\n\n@Injectable()\nexport class RoomsEffects {\n constructor(private actions: Actions,\n private spaceService: SpacesService) {\n }\n\n @Effect()\n public afterRequestResultsLoadOthersEffect = this.actions.pipe(\n ofType(loadRoomsWithQuery),\n mergeMap((action: LoadingAction) => {\n return [\n loadRoomsForResults.request({\n ...action,\n dateTz: action.dateTz\n }),\n // loadRoomsForResultsMap.request({\n // ...action,\n // dateTz: action.dateTz\n // }),\n loadLaterThatDayResults.request({\n ...action,\n dateTz: laterThatDayFromDateTz(action.dateTz)\n }),\n loadNextDayResults.request({\n ...action,\n dateTz: nextBusinessDay(action.dateTz)\n }),\n loadDiffSizeResults.request({\n ...action,\n dateTz: action.dateTz,\n diff_capacity: true\n }),\n ];\n })\n );\n\n @Effect()\n public loadRoomsForResultsEffect = createLoadingEffect(this.actions, loadRoomsForResults,\n (action) => this.spaceService.available(roomQueryOptionsToSpaceAvailabilityOptions(action), 'rooms'));\n \n @Effect() \n public loadRoomsForResultsMapEffect = createLoadingEffect(this.actions, loadRoomsForResultsMap,\n (action) => this.spaceService.available(roomQueryOptionsToSpaceAvailabilityOptions(action), 'rooms for maps', false));\n\n @Effect()\n public loadLaterThatDayResultsEffect = createLoadingEffect(this.actions, loadLaterThatDayResults,\n (action) =>\n this.spaceService.available(roomQueryOptionsToSpaceAvailabilityOptions(action), 'laterResults'));\n\n @Effect()\n public loadNextDayResultsEffect = createLoadingEffect(this.actions, loadNextDayResults,\n (action) =>\n this.spaceService.available(roomQueryOptionsToSpaceAvailabilityOptions(action), 'nextDay'));\n\n @Effect()\n public loadDiffSizeResultsEffect = createLoadingEffect(this.actions, loadDiffSizeResults,\n (action) =>\n this.spaceService.available(roomQueryOptionsToSpaceAvailabilityOptions(action), 'diffSize'));\n\n @Effect()\n public loadRoomByIdResultsEffect = createLoadingEffect(this.actions, loadByIdResults,\n (action) => \n this.spaceService.available(roomByIdQueryOptionsToSpaceAvailabilityOptions(action), 'byId', false));\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\nimport { roomsReducer } from './rooms.reducer';\nimport { RoomsEffects } from './rooms.effects';\n\n@NgModule({\n imports: [\n CommonModule,\n EffectsModule.forFeature([RoomsEffects]),\n StoreModule.forFeature('rooms', roomsReducer)\n ]\n})\nexport class RoomsModule {\n}\n","import { LoadingModel } from '@mckinsey-converge/loading';\nimport { createReducer } from '@ngrx/store';\nimport {\n loadLaterThatDayResults,\n loadNextDayResults,\n loadRoomsForResults,\n loadByIdResults,\n loadDiffSizeResults,\n loadRoomsForResultsMap\n} from './rooms.actions';\nimport { RoomState } from './rooms.types';\n\nexport const initialRoomsState: RoomState = {\n query: LoadingModel.empty(),\n later: LoadingModel.empty(),\n next: LoadingModel.empty(),\n byid: LoadingModel.empty(),\n size: LoadingModel.empty(),\n};\n\nexport const roomsReducer = createReducer(initialRoomsState,\n ...loadRoomsForResults.ons,\n ...loadRoomsForResultsMap.ons,\n\n ...loadLaterThatDayResults.ons,\n ...loadNextDayResults.ons,\n ...loadByIdResults.ons,\n ...loadDiffSizeResults.ons);\n","import { LoadingModel } from '../../../loading/src/lib/loading.model';\nimport {\n Building,\n DaysOfWeek,\n ISpaceAvailabilityOptions,\n RecurrencePeriod,\n Space\n} from '@mckinsey-converge/data-common';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\n\nexport interface RoomStoreState {\n rooms: RoomState;\n}\n\nexport interface RoomState {\n query: LoadingModel\n later: LoadingModel\n next: LoadingModel\n byid: LoadingModel\n size: LoadingModel\n}\n\nexport interface RoomQueryOptions {\n dateTz: DateTZ;\n duration: number;\n locations: string;\n capacity?: number;\n capacity_max?: number;\n diff_capacity?: boolean;\n //Recurrence fields\n recurrence_period?: RecurrencePeriod;\n recurrence_interval?: number;\n recurrence_endTz?: DateTZ;\n recurrence_count?: number;\n recurrence_starts?: Array;\n recurrence_exceptions?: Array; //SHOULD BE DATETZ\n recurrence_days?: Array;\n timezone?: string;\n offset?: number;\n buildings?: Building[];\n is_recurrent?: boolean;\n is_multiroom?: boolean;\n merged?: boolean;\n bookable?: boolean;\n ignore?: string;\n}\n\nexport const roomQueryOptionsToSpaceAvailabilityOptions = (options: RoomQueryOptions): ISpaceAvailabilityOptions => ({\n dateTz: options.dateTz,\n duration: options.duration,\n capacity: options.capacity,\n zone_ids: options.locations,\n capacity_max: options.capacity_max,\n diff_capacity: options.diff_capacity,\n /** Fields to include recurrence in the availability search */\n is_recurrent: options?.is_recurrent,\n is_multiroom: options?.is_multiroom,\n merged: options?.merged,\n recurrence_period: options?.recurrence_period,\n recurrence_interval: options?.recurrence_interval,\n recurrence_endTz: options?.recurrence_endTz,\n recurrence_count: options?.recurrence_count,\n recurrence_starts: options?.recurrence_starts,\n recurrence_days: options?.recurrence_days,\n bookable: options?.bookable,\n ignore: options?.ignore\n});\n\nexport const roomByIdQueryOptionsToSpaceAvailabilityOptions = (options: RoomQueryOptions): ISpaceAvailabilityOptions => ({\n dateTz: options.dateTz,\n duration: options.duration,\n capacity: options.capacity,\n room_ids: options.locations,\n capacity_max: options.capacity_max\n});\n","import { Space } from '@mckinsey-converge/data-common';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { DateTZ } from \"@mckinsey-converge/date-tz\";\n\nexport const todayFromDate = (date: number) => new DateTZ({date});\n\n/**\n * Adds 60 mins.\n */\nexport const laterThatDayFromDateTz = (dateTz: DateTZ) => {\n return dateTz.addValue({ minutes: 60 })\n};\n\n/**\n * Next business day. In most cases 1 day, but on Fridays, it follows to the monday.\n * @param date\n */\nexport const nextBusinessDay = (dateTz: DateTZ) => {\n let retDate = dateTz.addValue({ days: 1 });\n if (retDate.dateWeekday >= 6) {\n retDate = retDate.setValue({ weekday: 8 });\n }\n return retDate;\n};\n\nexport const mapRoomToSelectOption = (room?: Space): SelectOption => room ? ({\n value: room.id,\n shortDisplay: room.local_name,\n display: `${room.local_name}, ${room.level?.name}`\n}) : undefined;\n","export * from './lib/rx-utils.module';\nexport * from './lib/operators'\nexport * from './lib/loading-model.utils'\n","import {\n combineLatest,\n Observable\n} from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { LoadingModel } from '@mckinsey-converge/loading';\n\n/**\n * Generates the results count based on if data has loaded or not. If not, undefined is returned.\n * Otherwise, it'll return the count of the results.\n */\nexport const resultCountObservable = (loadingObservable: Observable>,\n resultsObservable: Observable\n): Observable => combineLatest([\n loadingObservable.pipe(map(r => r.hasLoaded())),\n resultsObservable.pipe(map(v => v?.length))\n]).pipe(map(([isLoading, viewModelLength]) => isLoading ? viewModelLength : undefined));\n","import {\n distinctUntilChanged,\n filter\n} from 'rxjs/operators';\nimport * as deepEqual from 'fast-deep-equal';\n\n/**\n * Useful for nested objects to prevent unnecessary triggers in RX chain.\n */\nexport const deepDistinctUntilChanged = () => distinctUntilChanged(deepEqual);\n\n/**\n * Won't emit if value is undefined.\n */\nexport const filterUndefined = () => filter(f => !!f);\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class RxUtilsModule {}\n","export * from './lib/ui.module';\nexport * from './lib/types';\nexport * from './lib/base-template.component';\nexport * from './lib/recurrence-pattern-form/recurrence-pattern-form.component';\nexport * from './lib/recurrence-booking-form/recurrence-booking-form.component';\nexport * from './lib/conflicts-modal/conflicts-modal.component'\nexport * from './lib/override-changes-modal/override-changes-modal.component'\nexport * from './lib/date-tz-calendar-widget/date-tz-calendar-widget.component';\nexport * from './lib/date-tz-date-picker/date-tz-date-picker.component';\nexport * from './lib/date-tz-duration-field/date-tz-duration-field.component';\nexport * from './lib/date-tz-time-field/date-tz-time-field.component';\nexport * from './lib/aca-date-picker/aca-date-picker.component';\nexport * from './lib/conflict-alert-modal/conflict-alert-modal.component';\nexport * from './lib/tooltip/tooltip.enums';\nexport * from './lib/zoom-warning-modal/components/zoom-warning/zoom-warning.component';\nexport * from './lib/catering-drop-modal/components/catering-drop/catering-drop-modal.component';\n","import { Component, OnInit, Input, Output, OnChanges, SimpleChanges, forwardRef, EventEmitter } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\nexport interface IDatePickerOptions {\n /** Unix timestamp with millisecond. First selectable date */\n from?: number;\n /** Unix timestamp with millisecond. Last selectable date */\n to?: number;\n /** Luxon format string for formatting days of the week. Defaults to `DDD` */\n day_format?: string;\n /** Luxon format string for formatting active month. Defaults to `MMMM yyyy` */\n month_format?: string;\n}\n\ninterface IDateBlock {\n /** Timestamp value of the date */\n value: number;\n /** Day of the month to display */\n display: string;\n /** Whether block is the selected date */\n active: boolean;\n /** Whether block not selectable */\n disabled: boolean;\n /** Whether block outside the active month */\n non_month: boolean;\n /** Whether the block is today */\n today: boolean;\n /** Number of events on this block */\n count?: number;\n}\n\n@Component({\n selector: 'aca-date-picker',\n templateUrl: './aca-date-picker.component.html',\n styleUrls: ['./aca-date-picker.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AcaDatePickerComponent),\n multi: true\n }\n ]\n})\nexport class AcaDatePickerComponent implements OnInit, OnChanges, ControlValueAccessor {\n /** CSS class to add to the root element of the component */\n @Input() public klass = 'default';\n /** Counters of the events on given dates. Key format is `yyyy-MM-dd` */\n @Input() public counters: { [date: string]: number };\n /** Settings for the date picker component */\n @Input() public options: IDatePickerOptions;\n /** Offset of the display month from the current month */\n @Output() public month = new EventEmitter();\n /** Display the last selected day as active */\n @Input() public show_last_selection?: boolean = true\n\n public date: number = DateNow(new Date()).ms;\n\n // R--- this is the date picker that needs to be TZ aware\n /** Offset of the month displayed from the current month */\n public offset = 0;\n /** Minimum offset for changing the month */\n public min_offset = -999999;\n /** Maximum offset for changing the month */\n public max_offset = 999999;\n /** Blocks representing the rendering details of the display days of the month */\n public date_list: IDateBlock[] = [];\n /** Name of the actively displayed month */\n public month_name = DateNow(new Date()).formatDate('MMMM yyyy');\n /** Name of the days of the week to display */\n public days_of_week = [];\n /** First selectable date */\n private from: DateTZ;\n /** Last selectable date */\n private to: DateTZ;\n /** Luxon format string for formatting days of the week. Defaults to `dd` */\n private day_format = 'EEE';\n /** Luxon format string for formatting active month. Defaults to `MMMM yyyy` */\n private month_format = 'MMMM yyyy';\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n /** ID of the timer used for changing the month */\n private _change_timer: number;\n\n public ngOnInit(): void {\n this.generateMonth();\n this.generateDaysOfTheWeek();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.options) {\n this.updateOptions();\n }\n if (changes.counters) {\n this.generateMonth();\n }\n }\n\n /** Change date using the given block */\n public setDate(item: IDateBlock) {\n this.date = item.value;\n if (this._onChange) {\n this._onChange(this.date);\n }\n this.generateMonth();\n }\n\n /**\n * Update offset to show the selected date\n */\n public updateDate(): void {\n \n if (!this.date) {\n return;\n }\n const now = DateNow(new Date()).startOfValue('month');\n const date_ = new DateTZ({date: this.date})\n const date = date_.startOfValue('month');\n if (date.valid) {\n const difference = date.dateDiff(now, 'months', 'months');\n if (this.offset !== difference) {\n this.offset = difference;\n this.month.emit(this.offset);\n }\n this.generateMonth();\n }\n }\n\n /**\n * Update local properties based off changes to settings\n */\n public updateOptions(): void {\n if (this.options) {\n // Setup from date\n if (this.options.from) {\n const date_ = new DateTZ({date: this.options.from})\n this.from = date_.startOfValue('day');;\n const today = DateNow(new Date()).startOfValue('month');\n const date = this.from.startOfValue('month');\n this.min_offset = date.dateDiff(today, 'months', 'months');\n } else if (this.from) {\n this.from = null;\n this.min_offset = -999999;\n }\n // Setup to date\n if (this.options.to) {\n const date_ = new DateTZ({date: this.options.to})\n this.to = date_.startOfValue('day');\n const today = DateNow(new Date()).startOfValue('month');\n const date = this.to.startOfValue('month');\n this.max_offset = date.dateDiff(today, 'months', 'months');\n } else if (this.to) {\n this.to = null;\n this.max_offset = 999999;\n }\n if (this.options.month_format) {\n this.month_format = this.options.month_format || 'MMMM yyyy';\n }\n if (this.options.day_format) {\n this.day_format = this.options.day_format || 'EEE';\n this.generateDaysOfTheWeek();\n }\n // Update date blocks\n this.generateMonth();\n }\n }\n\n /**\n * Generate the display blocks for the days of the active month\n */\n private generateMonth(): void {\n if (!this.date) {\n return;\n }\n const date = DateNow(new Date()).addValue({ months : this.offset });\n const active = new DateTZ({date: this.date});\n let start = date.setValue({ day: 1 }).setValue({ weekday: 7 }).subtractValue({ weeks: 1 });\n const end_ = new DateTZ({date: start.ms})\n const end = end_.addValue({ weeks: 1 }).endOfValue('month').addValue({ days: 2 }).endOfValue('week');\n this.date_list = [];\n while (start.isBeforeDate(end) || start.isSameDate(end, 'day')) {\n this.date_list.push({\n value: start.ms,\n display: start.formatDate('d'),\n active: this.show_last_selection && active.isSameDate(start, 'day'),\n non_month: !date.isSameDate(start, 'month'),\n count: this.counters ? this.counters[start.formatDate('yyyy-MM-dd')] || 0 : 0,\n disabled: (this.from ? start.isBeforeDate(this.from, 'day') : false) || (this.to ? start.isAfterDate(this.to, 'day') : false),\n today: DateNow(new Date()).isSameDate(start, 'day')\n });\n start = start.addValue({ days : 1 });\n }\n this.month_name = date.formatDate(this.month_format);\n }\n\n /**\n * Generate this weekdays to display in the header of the calendar\n */\n private generateDaysOfTheWeek() {\n let date = DateNow(new Date()).startOfValue('week');\n this.days_of_week = [];\n for (let i = 0; i < 7; i++) {\n this.days_of_week.push(date.formatDate(this.day_format));\n date = date.addValue({ days : 1 });\n }\n }\n\n /**\n * Changes the month offset by the given value.\n * Does nothing if the new month is not available to be selected\n * @param value Number of months to change the offset by\n */\n public changeMonth(value: number): void {\n if (this._change_timer) {\n clearTimeout(this._change_timer);\n }\n this._change_timer = setTimeout(() => {\n const new_offset = this.offset + value;\n const now = DateNow(new Date())\n const date = now.addValue({ months : new_offset, days: now.dateMonth === 2 ? 2 : 0 }); //add 2 days if month is february to avoid calc errors\n if (this.from && date.isBeforeDate(this.from, 'month')) { return; }\n if (this.to && date.isAfterDate(this.to, 'month')) { return; }\n this.offset = new_offset;\n this.month.emit(this.offset);\n this.generateMonth();\n this._change_timer = null;\n }, 100);\n }\n\n /**\n * Reset the month offset to the month of the selected date\n */\n public reset() {\n const date = new DateTZ({date: this.date});\n const offset = this.offset;\n this.offset = DateNow(new Date()).dateDiff(date, 'months', 'months');\n if (offset !== this.offset) {\n this.generateMonth();\n }\n this.month.emit(this.offset);\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: number) {\n this.date = value;\n this.updateDate();\n this.generateMonth();\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n}\n","
\n
\n
\n
\n
\n
{{month_name}}
\n
= max_offset\" (click)=\"changeMonth(1)\" (touchend)=\"changeMonth(1)\">\n
\n
\n
\n
\n
{{item}}
\n
\n
\n
\n
\n {{item.display}}\n
\n
{{item.count > 9 ? '+9' : item.count}}
\n
\n
\n
\n
","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges\n} from '@angular/core';\n\nexport enum AlertMode {\n Warning = 'warning',\n Coachmark = 'coachmark',\n BlueCoachmark = 'blue-coachmark',\n Error = 'error'\n}\n\nexport enum AlertBannerDisplay {\n /**\n * New UI\n */\n V2 = 'v2',\n\n /**\n * Default, legacy ui.\n */\n V1 = 'v1',\n}\n\n@Component({\n selector: 'mck-alert-banner',\n template: `\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n \n \n
\n `,\n styleUrls: ['./alert-banner.component.scss']\n})\nexport class AlertBannerComponent implements OnInit, OnChanges {\n\n @Input()\n public mode: AlertMode = AlertMode.Warning;\n\n @Output()\n public close = new EventEmitter();\n\n @Output()\n public action = new EventEmitter();\n\n @Input()\n public message: string;\n\n @Input()\n public buttonText: string;\n\n @Input()\n public showClose = true;\n\n @Input()\n public display: AlertBannerDisplay = AlertBannerDisplay.V1;\n\n public iconPath: string = 'assets/icon/warning-yellow.svg';\n public materialColor: string = 'black';\n public closeIcon: string = 'close_outline.svg';\n\n public ngOnInit(): void {\n this._onModeChange();\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n if (changes.mode) {\n this._onModeChange();\n }\n }\n\n private _onModeChange() {\n this.iconPath = 'assets/icon/warning-yellow.svg';\n this.closeIcon = 'close_outline.svg';\n switch (this.mode) {\n case AlertMode.Warning:\n this.materialColor = 'black';\n break;\n case AlertMode.Coachmark:\n this.materialColor = 'coachmark';\n this.closeIcon = 'close_outline_coachmark.svg';\n break;\n case AlertMode.BlueCoachmark:\n this.iconPath = 'assets/icon/info-bg-dark.svg'\n this.materialColor = 'blue-coachmark'\n break;\n case AlertMode.Error:\n this.iconPath = 'assets/img/error-icon.svg'\n this.materialColor = 'white'\n break;\n default:\n this.materialColor = 'black';\n }\n }\n\n}\n","import {\n Component,\n Directive,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Self,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n NgControl\n} from '@angular/forms';\nimport { SelectOption } from '../types';\nimport {\n BehaviorSubject,\n combineLatest,\n from,\n Subject\n} from 'rxjs';\nimport {\n COMMA,\n ENTER\n} from '@angular/cdk/keycodes';\nimport { MatChipInputEvent } from '@angular/material/chips';\nimport {\n distinctUntilChanged,\n map,\n take\n} from 'rxjs/operators';\nimport { MatCheckboxChange } from '@angular/material/checkbox';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { MatAutocompleteTrigger } from '@angular/material/autocomplete';\n\n@Component({\n selector: 'mck-autocomplete-chip-select-item',\n template: `\n
\n \n {{label}}\n \n
\n \n
\n
\n \n
\n \n
\n \n
\n
\n
\n \n \n \n \n {{selected.shortDisplay}}\n close\n \n \n \n \n
\n \n \n {{option.dropdownOverride || option.display}}\n \n \n
\n
\n \n Clear\n \n \n Confirm\n \n
\n \n \n {{errorMessage}}\n
\n `,\n styleUrls: ['./auto-complete-chip-select-item.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class AutoCompleteChipSelectItemComponent extends BaseDirective implements OnInit, OnChanges, ControlValueAccessor, OnDestroy {\n\n @ViewChild('trigger')\n trigger: MatAutocompleteTrigger;\n\n @ViewChild('componentInput')\n componentInput: HTMLInputElement;\n\n @Input()\n label: string;\n\n @Input()\n required?: boolean;\n\n @Input()\n feedbackInput?: boolean;\n\n @Input()\n loading?: boolean;\n\n @Input()\n placeHolder: string;\n\n @Input()\n options: Subject[]>;\n\n @Input()\n selectedOptions: Subject[]>;\n\n @Input()\n useCTAs?: boolean;\n\n @Output()\n optionSelected = new EventEmitter>();\n\n @Output()\n feedbackOutput = new EventEmitter();\n\n @Output()\n chipsCleared: EventEmitter = new EventEmitter();\n\n @Output()\n onClickConfirm: EventEmitter = new EventEmitter();\n\n /**\n * If true, only allow 1 group at a time to get selected. Show others as disabled.\n */\n @Input()\n selectOnlyOneGroup = false;\n\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n\n @Input() public localFilter: boolean = true;\n\n /**\n * If error exists, a message.\n */\n @Input()\n errorMessage?: string;\n\n @Input()\n hideDropdownCarret?: boolean;\n\n @Input()\n displayCTA?: boolean;\n\n private selectOnlyOneGroupChange = new BehaviorSubject(false);\n\n separatorKeysCodes = [ENTER, COMMA];\n\n public filterFormControl: FormControl = new FormControl();\n\n public focused = false;\n public mobileFullScreen = false;\n\n public autocompleteOptions = new BehaviorSubject[]>([]);\n public filteredAutocompleteOptions = new BehaviorSubject[]>([]);\n\n /** List shown to user, filters children if a group header is added **/\n public chipOptions = new BehaviorSubject[]>([]);\n\n /** Form control on change handler */\n private _onChange?: (_: SelectOption[]) => void;\n /** Form control on touch handler */\n private _onTouch?: (_: string) => void;\n\n private value = new BehaviorSubject[]>([]);\n\n public enableCTAs: boolean = false\n\n public hasChips: boolean = false;\n\n constructor(@Self() @Optional() private control: NgControl) {\n super();\n if (this.control) {\n this.control.valueAccessor = this;\n }\n }\n\n public get invalid(): boolean {\n return this.control ? this.control.invalid : false;\n }\n\n public get showError(): boolean {\n if (!this.control) {\n return false;\n }\n\n const { dirty, touched } = this.control;\n\n return this.invalid ? (dirty && touched) : false;\n }\n\n public iconFillClass(color?: string): string {\n return color === 'external' ? 'mck-icon-fill-gray' : 'mck-icon-fill-white'\n }\n\n ngOnInit() {\n this.subscription('autoCompleteOptions', combineLatest([\n this.options,\n this.selectedOptions,\n this.selectOnlyOneGroupChange\n ])\n .pipe(\n map(([options, selectedOptions, selectOnlyOneGroup]) => {\n this.hasChips = !!selectedOptions.length;\n return options.map(option => {\n const selected = !!selectedOptions.find(s => s.value === option.value);\n let enabled = true;\n if (selectOnlyOneGroup) {\n // find first group item in selection\n const selectedGroupHeader = selectedOptions.find(s => s.groupHeader || s.groupId === option.groupId);\n\n // if no options chosen, enable it, otherwise only allow selections from other options.\n enabled =\n selectedOptions.length === 0 ||\n (selectedGroupHeader ? selectedGroupHeader.groupId === option.groupId : false);\n this.enableCTAs = selectedOptions.length !== 0\n }\n\n return {\n ...option,\n enabled,\n selected\n } as SelectOption;\n });\n })\n ).subscribe(next => {\n const options = next.sort((a, b) => {\n if (a.groupId === b.groupId) {\n return b.display > a.display ? -1 : 1;\n }\n return b.groupId > a.groupId ? -1 : 1;\n });\n this.autocompleteOptions.next(options);\n this.filteredAutocompleteOptions.next(this.getFilteredAutocompleteOptions(this.filterFormControl.value?.trim()));\n }));\n this.subscription('filterFormControlChanges',\n this.filterFormControl.valueChanges.subscribe(value => {\n if (this.localFilter && value.length) {\n this.filteredAutocompleteOptions.next(this.getFilteredAutocompleteOptions(value));\n } else {\n this.filteredAutocompleteOptions.next(this.getFilteredAutocompleteOptions());\n }\n }));\n this.subscription('chipOptions', this.selectedOptions\n .pipe(map(selectedOptions => {\n // find group headers and check if children are part of that group.\n // if part of group, filter them out as redundant.\n const groupHeaders = selectedOptions.filter(s => s.groupHeader) || [];\n return selectedOptions.filter(s => s.groupHeader || s.groupChild && !(groupHeaders.find(g => g.groupId === s.groupId)));\n }))\n .subscribe(next => {\n this.chipOptions.next(next);\n }));\n\n this.subscription('formData', this.selectedOptions\n .pipe(map(selected => {\n // group headers always contain children, so only pick out children for data\n return selected;\n }))\n .subscribe(next => {\n this.value.next(next);\n }));\n\n // tie value changes to change.\n this.subscription('valueChanges', this.value\n .pipe(distinctUntilChanged())\n .subscribe(next => {\n if (this._onChange) {\n // rewrote this to avoid read only error\n const values = [];\n next.forEach((v, i) => {\n const value = { ...v };\n if (v.meta?.user) {\n value.display = v.meta.user.name;\n }\n values.push(value);\n });\n this._onChange(values);\n }\n }));\n\n window.addEventListener('scroll', this.scrollEvent, true);\n }\n\n getFilteredAutocompleteOptions(searchString: string = '') {\n // Exact matches of the groupId or display value\n const exactMatches = this.autocompleteOptions.value.filter(o => {\n if (searchString && searchString.length) {\n return o.groupId.toLowerCase().indexOf(searchString.toLowerCase()) === 0 || o.display.toLowerCase().indexOf(searchString.toLowerCase()) === 0;\n }\n return o.groupId && o.display;\n });\n // Fuzzier search of the dropdownOverride field\n const moreOptions = this.autocompleteOptions.value.filter(o => {\n if (o?.dropdownOverride?.length && searchString) {\n const match = o.dropdownOverride?.toLowerCase().indexOf(searchString.toLowerCase()) > -1;\n // only return found locations that don't exist in exactMatches.\n return match && !exactMatches.find(e => {\n return e.value === o.value\n });\n }\n return false;\n });\n\n // Merge the two result sets\n let joinedOptions = exactMatches.concat(moreOptions).sort((a, b) => {\n if (a.groupId === b.groupId) {\n return b.display > a.display ? -1 : 1;\n }\n return b.groupId > a.groupId ? -1 : 1;\n });\n\n // Create a 1D array of the groupId\n const groupIds = joinedOptions.map(o => o.groupId);\n // Get a deduped list of the group parents\n const parents = this.autocompleteOptions.value.filter(o => {\n return o?.groupHeader && groupIds.indexOf(o.groupId) !== -1;\n });\n\n // Remove the parents from the joinedOptions and merge with the reduced parents set, and then sort by groupId.\n // Resulting array sets the parents first in order so the widget renders properly.\n const filteredAutocompleteOptions = parents.concat(joinedOptions.filter(jo => !!jo.dropdownOverride)).sort((a, b) => {\n return b.groupId > a.groupId ? -1 : 1;\n });\n return filteredAutocompleteOptions;\n }\n\n loseFocus(): void {\n this.mobileFullScreen = false;\n this.focused = false;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.selectOnlyOneGroup) {\n this.selectOnlyOneGroupChange.next(this.selectOnlyOneGroup);\n }\n }\n\n keyedInput(matInput: string) {\n if (this.feedbackInput) {\n this.feedbackOutput.emit(matInput);\n }\n }\n\n selectOption(value: string) {\n this.options.pipe(\n take(1),\n map((options: SelectOption[]) => options.find(o => o.value === value))\n ).subscribe(next => {\n if (next) {\n this.optionSelected.emit(next);\n }\n });\n }\n\n removeOption(value: SelectOption) {\n this.optionSelected.emit(value);\n if (this.useCTAs) {\n this.onClickConfirm.emit();\n }\n\n }\n\n clearSelections() {\n this.selectedOptions.next([]);\n this.chipsCleared.emit();\n }\n\n onClickArrow() {\n // only close events we allow arrow to close panel.\n if (this.focused) {\n this.onFocus(false);\n }\n }\n\n onPanelFocusChange(focusIn: boolean) {\n this.onFocus(focusIn, true);\n }\n\n onFocus(focusIn: boolean, fromPanel?: boolean) {\n if (!focusIn && this.useCTAs) {\n this.onClickConfirm.emit();\n }\n // Only for location input???\n if (this.localFilter && fromPanel && focusIn) {\n // open on focus, mobile needs a refocus\n this.mobileFullScreen = true;\n this.timeout('showDefaults', () => {\n // All results do not show as expected unless I focus again.\n // Something about the mobile styles.\n this.onFocus(true);\n }, 100)\n }\n\n if (this.feedbackInput && !fromPanel) {\n // clear input when input creates options\n this.componentInput.value = '';\n this.filterFormControl.setValue('');\n this.feedbackOutput.emit('');\n }\n\n if (this.focused !== focusIn) {\n this.focused = focusIn;\n // clear on close\n if (!focusIn) {\n this.componentInput.value = '';\n this.filterFormControl.setValue('');\n }\n if (!fromPanel) {\n if (focusIn) {\n this.trigger.openPanel();\n } else {\n this.trigger.closePanel();\n // close the mobile full screen\n this.loseFocus();\n }\n }\n }\n }\n\n onChanged(value: SelectOption, event: MatCheckboxChange) {\n this.optionSelected.emit(value);\n }\n\n add(event: MatChipInputEvent) {\n // reset\n if (event.input) {\n event.input.value = '';\n }\n this.filterFormControl.setValue('');\n }\n\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouch = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n // TODO: disabled not implemented yet.\n this.disabled = isDisabled;\n }\n\n writeValue(obj: SelectOption[] | undefined): void {\n // update selected options when this value is written\n this.options?.pipe(\n take(1),\n map((options: SelectOption[]) => {\n return options.filter(o => obj ? !!obj.find(spl => o.value === spl.value) : false );\n })\n ).subscribe(next => {\n this.selectedOptions.next(next);\n });\n }\n\n private scrollEvent = (event): void => {\n if (this.trigger === null) {\n return;\n }\n /**\n * IF - to confirm user not scrolling from autocomplete opened panel and close panel if scroll event triggers from outside of panel\n */\n if (this.trigger.panelOpen && event.target.closest('.mat-autocomplete-panel') === null && !event.srcElement.classList.contains('mat-form-field-autofill-control')) {\n this.onFocus(false);\n this.trigger['_element'].nativeElement.blur();\n }\n }\n public ngOnDestroy(): void {\n window.removeEventListener('scroll', this.scrollEvent, true);\n }\n}\n\n\n","import {\n Pipe,\n PipeTransform\n} from '@angular/core';\nimport { SelectOption } from '../types';\n\n/**\n * Patch orphaned SelectOption children into acting as their own group headers.\n *\n * This intends to help in the common scenario where filters have (for whatever\n * reason) prevented the child's usual group header from appearing.\n */\n@Pipe({\n name: 'groupHeaderPatch',\n})\nexport class GroupHeaderPipe implements PipeTransform {\n transform(items: SelectOption[]): SelectOption[] {\n if (!items) {\n return [];\n }\n\n return items.map(v => {\n const hasHeader = !!items.find(i => i.groupHeader && i.groupId === v.groupId);\n return {\n ...v,\n displayAsHeader: !hasHeader,\n }\n })\n }\n\n}\n","import { Component, Input, Output, forwardRef, SimpleChanges, OnChanges, OnInit, EventEmitter, ViewChild, OnDestroy } from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Observable } from 'rxjs';\nimport { map, startWith } from 'rxjs/operators';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { MatAutocompleteTrigger } from '@angular/material/autocomplete';\nimport {\n BehaviorSubject\n} from 'rxjs';\n\n/**\n * @title Autocomplete filtering select of a single option via text search.\n */\n@Component({\n selector: 'mck-autocomplete-select-option',\n templateUrl: 'auto-complete-select-option.component.html',\n styleUrls: ['auto-complete-select-option.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AutoCompleteSelectOptionComponent),\n multi: true\n }\n ],\n})\nexport class AutoCompleteSelectOptionComponent implements OnInit, OnChanges, ControlValueAccessor, OnDestroy{\n @Input()\n public label: string;\n\n @Input()\n public required: boolean;\n\n @Input()\n public options: SelectOption[] = [];\n\n @Input()\n public selectedValue: SelectOption | undefined;\n\n @Input()\n public resetInput: number | undefined;\n\n @Input()\n public placeholder: string;\n\n @Input()\n public noEntriesFoundLabel: string;\n\n @Output()\n public filteredOptionsChange = new EventEmitter[]>();\n\n @Output()\n public inputTextChange = new EventEmitter();\n\n @Output() emptyBoxEvent = new EventEmitter();\n\n /** Form control on change handler */\n private _onChange: (_: SelectOption) => void;\n /** Form control on touch handler */\n private _onTouch: (_: SelectOption) => void;\n\n filterFormControl = new FormControl();\n filteredOptions: Observable[]>;\n\n /** The selected value */\n public value = new BehaviorSubject('');\n\n /** Available options to search / select from */\n public _options = new BehaviorSubject[]>(this.options);\n @ViewChild('trigger')\n trigger: MatAutocompleteTrigger;\n\n ngOnInit() {\n this.updateFilteredOptions();\n window.addEventListener('scroll', this.scrollEvent, true);\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n // Watch and apply changes from the parent component.\n if (changes.options || changes.selectedValue) {\n if (changes.options && !changes.selectedValue) {\n this.filterFormControl.setValue('')\n }\n this.updateFilteredOptions();\n }\n if (changes.resetInput) {\n this.filterFormControl.setValue('');\n this.updateFilteredOptions();\n }\n \n }\n\n private updateFilteredOptions() {\n this.filteredOptions = this.filterFormControl.valueChanges\n .pipe(\n startWith(''),\n map(value => typeof value === 'string' ? value : value && value?.display ? value.display : ''),\n map(name => name ? this._filter(name) : this.options.slice())\n );\n }\n\n displayFn(data: SelectOption): string {\n return data && data?.display ? data.display : '';\n }\n\n private _filter(display: string): SelectOption[] {\n const filterValue = display.toLowerCase();\n // return all the matches found\n const filtered = this.options.filter(option => {\n // split this input and index both, if both\n // match return true.\n if (filterValue.includes(' ')) {\n const filterValues =filterValue.split(' ');\n let matchesAll = true;\n for (let x = 0; x < filterValues.length; x++) {\n if (option.display.toLowerCase().indexOf(filterValues[x]) === -1) {\n matchesAll = false;\n }\n }\n if (matchesAll) {\n return true;\n }\n }\n // match the whole string\n return option.display.toLowerCase().indexOf(filterValue) > -1;\n });\n this.inputTextChange.emit(filterValue);\n this.filteredOptionsChange.emit(filtered);\n return filtered;\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: SelectOption): void {\n this.value.next(new_value);\n if (this._onChange) {\n this._onChange(this.options.find(f => f.value === new_value.value));\n }\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: SelectOption | null) {\n if (value != null) {\n this.value.next(value.value);\n }\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: SelectOption) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: SelectOption) => void): void {\n this._onTouch = fn;\n }\n\n public onChangeInput() {\n if (this.filterFormControl.value === '') {\n this.emptyBoxEvent.emit(true);\n }\n }\n\n private scrollEvent = (event): void => {\n if (this.trigger === null) {\n return;\n }\n /**\n * IF - to confirm user not scrolling from autocomplete opened panel and close panel if scroll event triggers from outside of panel\n */\n if (this.trigger.panelOpen && event.target.closest('.mat-autocomplete-panel') === null ) {\n this.trigger.closePanel();\n this.trigger['_element'].nativeElement.blur();\n }\n }\n public ngOnDestroy(): void {\n window.removeEventListener('scroll', this.scrollEvent, true);\n }\n\n}","
\n {{label}}\n \n \n \n \n {{option.shortDisplay || option.display}}\n \n \n \n
","import {\n AfterViewInit,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\n/**\n * A helper class for rendering embedded views (ng-template) as standalone components.\n *\n * If the view is lazy and does not render upon initialization,\n * it attempts embedding view again later.\n *\n * When testing a component directly that extends this class, its best to wrap the component\n * in a wrapper component for testing so that it can render itself.\n */\nexport class BaseTemplateComponent extends BaseDirective implements AfterViewInit, OnInit, OnDestroy {\n @ViewChild(TemplateRef, { static: true })\n public template: TemplateRef;\n\n private isRendered = false;\n\n constructor(private vcRef: ViewContainerRef) {\n super();\n }\n\n public ngOnInit(): void {\n // try early rendering\n this.attemptViewEmbed();\n }\n\n public attemptViewEmbed() {\n if (this.template && !this.isRendered) {\n this.isRendered = true;\n this.vcRef.createEmbeddedView(this.template);\n return true;\n }\n return false;\n }\n\n public ngAfterViewInit(): void {\n if (!this.isRendered) {\n console.log('View not rendered yet, attempting to post initialization');\n setTimeout(() => {\n console.log('Timeout ended, trying again', this.template);\n if (!this.attemptViewEmbed()) {\n console.log('Attempting render in after view initialization');\n setTimeout(() => {\n if (!this.attemptViewEmbed()) {\n console.error('FAILED TO LOAD TEMPLATE');\n }\n }, 1000);\n }\n });\n }\n }\n\n public ngOnDestroy(): void {\n super.ngOnDestroy();\n this.isRendered = false;\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'catering-drop-modal',\n templateUrl: './catering-drop-modal.component.html',\n styleUrls: ['./catering-drop-modal.component.scss']\n})\nexport class CateringDropComponent {\n\n constructor(private dialogRef: MatDialogRef) {}\n\n onConfirm(): void {\n this.dialogRef.close(true);\n}\n\nonCancel(): void {\n this.dialogRef.close(false);\n}\n}\n","
\n

Catering conflict

\n
\n\n
\n
\n

Proceed without catering?

\n
\n
\n
\n\n
\n \n \n
\n
","import {\n Component,\n Output,\n TemplateRef,\n ViewChild,\n EventEmitter,\n Input\n } from \"@angular/core\";\n import { DropdownPanel } from \"./dropdown-panel\";\n \n @Component({\n selector: \"cng-select-options\",\n templateUrl: \"./cng-select-options.component.html\",\n styleUrls: [\"./cng-select-options.component.scss\"]\n })\n export class CngSelectOptionsComponent implements DropdownPanel {\n @ViewChild(TemplateRef) templateRef: TemplateRef;\n @Output() closed = new EventEmitter();\n @Input() ddWidth: string;\n \n constructor() {}\n }\n ","\n
\n \n
\n
","import {\n Component,\n Output,\n TemplateRef,\n ViewChild,\n EventEmitter,\n Input,\n OnInit\n } from \"@angular/core\";\n import { DropdownPanel, DropdownOpion } from \"./dropdown-panel\";\n \n @Component({\n selector: \"cng-select\",\n templateUrl: \"./cng-select.component.html\",\n styleUrls: [\"./cng-select.component.scss\"]\n })\n export class CngSelectComponent implements OnInit {\n @Input() data: any;\n public isClosed: boolean = false;\n public selected: DropdownOpion;\n constructor() {\n\n }\n ngOnInit(): void {\n this.selected = this.data.defaultSelected;\n }\n\n public optionSelected(item: DropdownOpion) {\n // this.selected = item;\n this.data.defaultSelected = item;\n this.data?.onChangeCallback && this.data?.onChangeCallback(item);\n }\n }\n ","\n\n
\n {{data?.defaultSelected?.display}}\n
\n \n
\n
\n\n
{{item?.display}}
\n
","import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n ViewContainerRef\n } from '@angular/core';\n import { DropdownPanel } from './dropdown-panel';\n import { Overlay, OverlayRef } from '@angular/cdk/overlay';\n import { TemplatePortal } from '@angular/cdk/portal';\n import { merge, Observable, Subscription } from 'rxjs';\n \n @Directive({\n selector: '[dropdownTriggerFor]',\n host: {\n '(click)': 'toggleDropdown()'\n }\n })\n export class DropdownTriggerForDirective implements OnDestroy, AfterViewInit, OnInit {\n private isDropdownOpen = false;\n private overlayRef: OverlayRef;\n private dropdownClosingActionsSub = Subscription.EMPTY;\n \n @Input('dropdownTriggerFor') public dropdownPanel: DropdownPanel;\n @Output() isPanelOpened = new EventEmitter();\n constructor(\n private overlay: Overlay,\n private elementRef: ElementRef,\n private viewContainerRef: ViewContainerRef,\n private renderer: Renderer2\n ) {\n \n }\n ngOnInit(): void {\n // const cngSelectEl = this.elementRef.nativeElement.nextElementSibling; \n // const parentWidth = this.elementRef.nativeElement.offsetWidth; \n // this.renderer.setStyle(cngSelectEl, 'width', `${parentWidth}px`);\n }\n ngAfterViewInit(): void {\n \n }\n\n \n toggleDropdown(): void {\n this.isDropdownOpen ? this.destroyDropdown() : this.openDropdown();\n \n }\n \n openDropdown(): void {\n let {ddWidth} = this.dropdownPanel;\n this.dropdownPanel.ddWidth = ddWidth !=='' ? ddWidth : `${this.elementRef.nativeElement.offsetWidth}px`;\n this.isDropdownOpen = true;\n this.isPanelOpened.emit(this.isDropdownOpen);\n this.overlayRef = this.overlay.create({\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n scrollStrategy: this.overlay.scrollStrategies.close(),\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withPositions([\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 8\n }\n ])\n });\n \n const templatePortal = new TemplatePortal(\n this.dropdownPanel.templateRef,\n this.viewContainerRef\n );\n this.overlayRef.attach(templatePortal);\n \n this.dropdownClosingActionsSub = this.dropdownClosingActions().subscribe(\n () => this.destroyDropdown()\n );\n }\n \n private dropdownClosingActions(): Observable {\n const backdropClick$ = this.overlayRef.backdropClick();\n const detachment$ = this.overlayRef.detachments();\n const dropdownClosed = this.dropdownPanel.closed;\n \n return merge(backdropClick$, detachment$, dropdownClosed);\n }\n \n private destroyDropdown(): void {\n if (!this.overlayRef || !this.isDropdownOpen) {\n return;\n }\n \n this.dropdownClosingActionsSub.unsubscribe();\n this.isDropdownOpen = false;\n this.isPanelOpened.emit(this.isDropdownOpen);\n this.overlayRef.detach();\n }\n \n ngOnDestroy(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n }\n }\n }\n ","import {\n Component,\n Input,\n OnInit,\n OnDestroy,\n ViewChild,\n AfterViewInit\n} from '@angular/core';\nimport { MatExpansionPanel } from '@angular/material/expansion';\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { CollapseService } from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'mck-collapse-header',\n template: `\n \n \n {{title}}\n
\n
\n \n
\n \n
\n
\n {{description}}\n \n \n \n \n `,\n styleUrls: ['./collapse-header.component.scss'],\n})\nexport class CollapseHeaderComponent implements OnInit, OnDestroy {\n\n @Input() title: string;\n @Input() description: string;\n @Input() isLoading = false;\n\n @ViewChild('expansionPanel') expansionPanel: MatExpansionPanel;\n\n public isExpanded = new BehaviorSubject(false);\n private collapseSubscription: Subscription;\n\n constructor(private collapseService: CollapseService) {}\n\n ngOnInit(): void {\n this.collapseSubscription = this.collapseService.collapse$.subscribe(() => {\n if (this.expansionPanel) {\n this.expansionPanel.close(); // Close the panel\n }\n });\n }\n\n ngOnDestroy(): void {\n this.collapseSubscription.unsubscribe();\n }\n}\n","import { ChangeDetectionStrategy, Component, Inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\nexport interface RoomAvaibilityModalData {\n\theaderText: string,\n\tmessage: string,\n\tbuttonLabel: string,\n\tcallback: Function,\n shouldClose: boolean\n}\n\n@Component({\n selector: 'conflict-alert-modal',\n templateUrl: 'conflict-alert-modal.component.html',\n styleUrls: ['./conflict-alert-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class ConflictAlertModalComponent implements OnInit {\n constructor(public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public dialogData: RoomAvaibilityModalData) {\n }\n ngOnInit(): void {}\n\n public done() {\n this.dialogData?.callback(); this.dialogRef.close()\n }\n}\n","
\n \n
\n\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{{dialogData?.headerText}}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
{{dialogData?.message}}
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t\n\t\t\t\t\t \n\t\t\t\n
","import {Component, EventEmitter, Inject, Input, OnInit, Output} from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport {DialogEvent} from '@mckinsey-converge/base';\nimport {DateTZ, isToday} from '@mckinsey-converge/date-tz';\n\nexport interface ConflictsModalComponentData {\n room_name: string;\n conflicts: number[];\n copy_conflicts?: boolean;\n timezone: string;\n status?: string;\n}\n\n@Component({\n selector: 'app-conflicts-modal',\n templateUrl: './conflicts-modal.component.html',\n styleUrls: ['./conflicts-modal.component.scss']\n})\nexport class ConflictsModalComponent implements OnInit{\n public room_name: string;\n public conflicts: number[];\n public copy_conflicts: boolean;\n public timezone;\n public status: string;\n\n\n @Output() public event = new EventEmitter();\n\n constructor(@Inject(MAT_DIALOG_DATA) private _data: ConflictsModalComponentData){\n\n }\n\n public ngOnInit(){\n this.timezone = this._data.timezone;\n this.room_name = this._data.room_name\n this.conflicts = this._data.conflicts\n this.copy_conflicts = this._data.copy_conflicts\n this.status = this._data.status\n }\n\n public formatDate(date: number) {\n const dateTZ = new DateTZ({date: date*1000, is_local_tz: false, building_tz: this._data.timezone});\n const dateIsToday = isToday(dateTZ, this.timezone);\n const display = dateTZ.formatDate('ccc dd MMM yyyy');\n return `${display}${dateIsToday ? ' (Today)' : ''}`;\n }\n\n public continue(): void {\n this.event.emit({ reason: 'done' });\n }\n\n public close(): void {\n this.event.emit({ reason: 'close' });\n }\n\n public copy(): void {\n this.event.emit({ reason: 'action' });\n }\n\n\n}\n","
\n \n
\n\n
\n

Conflicts ({{conflicts.length}})

\n
\n The {{room_name}} room is not available on the following dates.\n Do you want to proceed without booking these days?\n
\n
\n The {{room_name}} room is not available on the following dates.\n You need to make individual bookings to cover these days, please.\n
\n
\n
\n
\n Date\n
\n
\n
\n {{formatDate(conflict)}}\n
\n
\n
\n
\n\n \n {{copy_conflicts ? 'Copy to clipboard' : 'Close'}}\n \n \n {{copy_conflicts ? 'Close' : 'Continue'}}\n \n\n","import { Component, OnInit, Inject } from '@angular/core';\nimport { MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar';\n\n@Component({\n selector: 'custom-snackbar',\n templateUrl: './custom-snackbar-component.component.html',\n styleUrls: ['./custom-snackbar-component.component.scss'],\n})\nexport class CustomSnackbarComponent implements OnInit {\n constructor(@Inject(MAT_SNACK_BAR_DATA) public data: any) {\n }\n\n ngOnInit() {}\n\n get getIcon() {\n switch (this.data.snackType) {\n case 'success':\n return {\n type: this.data.snackType,\n iconPath: 'assets/icon/toast-success.svg',\n };\n case 'error':\n return {\n type: this.data.snackType,\n iconPath: 'assets/icon/toast-failure.svg',\n };\n case 'warn':\n return {\n type: this.data.snackType,\n iconPath: 'assets/icon/toast-warning.svg',\n };\n case 'info':\n return {\n type: this.data.snackType,\n iconPath: 'assets/icon/toast-info.svg',\n };\n default:\n return { type: 'info', iconPath: 'assets/icon/toast-info.svg' };\n }\n }\n\n closeSnackbar() {\n this.data.snackBar.dismiss();\n }\n}\n","
\n
\n
\n \"{{getIcon.type}}\n
\n
\n {{data.message}}\n
\n
\n
\n
close
\n
\n
","import { Injectable } from '@angular/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { CustomSnackbarComponent } from './custom-snackbar-component.component';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SnackBarService {\n messageText: string[];\n constructor(public snackBar: MatSnackBar) {}\n\n public openSnackBar(\n message,\n type,\n duration?,\n verticalPosition?,\n horizontalPosition?\n ) {\n const _snackType = type !== undefined ? type : 'success';\n this.snackBar.openFromComponent(CustomSnackbarComponent, {\n duration: duration || 4000,\n horizontalPosition: horizontalPosition || 'end',\n verticalPosition: verticalPosition || 'top',\n data: {\n message: message,\n snackType: _snackType,\n snackBar: this.snackBar,\n },\n });\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n Output,\n OnChanges,\n SimpleChanges,\n forwardRef,\n EventEmitter,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BaseClass } from '@mckinsey-converge/base';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\nexport interface IDateTzPickerOptions {\n /** DateTZ object. First selectable date */\n fromDateTz?: DateTZ;\n /** DateTZ object. Last selectable date */\n untilDateTz?: DateTZ;\n /** Luxon format string for formatting days of the week. Defaults to `DDD` */\n day_format?: string;\n /** Luxon format string for formatting active month. Defaults to `MMMM yyyy` */\n month_format?: string;\n}\n\ninterface IDateBlock {\n /** Timestamp value of the date */\n value: DateTZ;\n /** Day of the month to display */\n display: string;\n /** Whether block is the selected date */\n active: boolean;\n /** Whether block not selectable */\n disabled: boolean;\n /** Whether block outside the active month */\n non_month: boolean;\n /** Whether the block is today */\n today: boolean;\n /** Number of events on this block */\n count?: number;\n}\n\n@Component({\n selector: 'date-tz-calendar-widget',\n templateUrl: './date-tz-calendar-widget.component.html',\n styleUrls: ['./date-tz-calendar-widget.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateTzCalendarWidgetComponent),\n multi: true,\n },\n ],\n})\nexport class DateTzCalendarWidgetComponent\n extends BaseClass\n implements OnInit, OnChanges, ControlValueAccessor\n{\n /** CSS class to add to the root element of the component */\n @Input() public className = 'default';\n /** Counters of the events on given dates. Key format is `yyyy-MM-dd` */\n @Input() public counters: { [date: string]: number };\n /** Settings for the date picker component */\n @Input() public options: IDateTzPickerOptions;\n /** Offset of the display month from the current month */\n @Output() public month = new EventEmitter();\n\n public readonly weeks = new Array(6).fill(0);\n public selectedDateTz: DateTZ = DateNow();\n\n // R--- this is the date picker that needs to be TZ aware\n /** Offset of the month displayed from the current month */\n public offset = 0;\n /** Minimum offset for changing the month */\n public min_offset = -999999;\n /** Maximum offset for changing the month */\n public max_offset = 999999;\n /** Blocks representing the rendering details of the display days of the month */\n public date_list: IDateBlock[] = [];\n /** Name of the actively displayed month */\n public month_name = DateNow(new Date()).formatDate('MMMM yyyy');\n /** Name of the days of the week to display */\n public days_of_week = [];\n /** First selectable date */\n private fromTz: DateTZ;\n /** Last selectable date */\n private toTz: DateTZ;\n /** Luxon format string for formatting days of the week. Defaults to `dd` */\n private day_format = 'EEE';\n /** Luxon format string for formatting active month. Defaults to `MMMM yyyy` */\n private month_format = 'MMMM yyyy';\n /** Form control on change handler */\n private _onChange: (_: DateTZ) => void;\n /** Form control on touch handler */\n private _onTouch: (_: DateTZ) => void;\n\n private _today = DateNow();\n\n public get timezone() {\n return this.selectedDateTz?.building_tz || '';\n }\n\n public ngOnInit(): void {\n this.generateMonth();\n this.generateDaysOfTheWeek();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.options) {\n this.updateOptions();\n }\n if (changes.counters) {\n this.generateMonth();\n }\n }\n\n /** Change date using the given block */\n public setDate(item: IDateBlock) {\n this.selectedDateTz = item.value;\n if (this._onChange) {\n this._onChange(this.selectedDateTz);\n }\n this.generateMonth();\n }\n\n /**\n * Update offset to show the selected date 2\n */\n public updateDate(): void {\n if (!this.selectedDateTz) {\n return;\n }\n const now = this._today.startOfValue('month');\n const startOfMonthDateTz = this.selectedDateTz.startOfValue('month');\n if (startOfMonthDateTz.valid) {\n const difference = startOfMonthDateTz.dateDiff(\n now,\n 'months',\n 'months'\n );\n if (this.offset !== difference) {\n this.offset = Math.round(difference);\n this.month.emit(this.offset);\n }\n this.generateMonth();\n }\n }\n\n /**\n * Update local properties based off changes to settings\n */\n public updateOptions(): void {\n if (this.options) {\n // Setup from date\n if (this.options.fromDateTz) {\n const today = this._today.startOfValue('month');\n this.fromTz = this.options.fromDateTz.startOfValue('day');\n this.min_offset = Math.round(\n this.fromTz\n .startOfValue('month')\n .dateDiff(today, 'months', 'months')\n );\n } else if (this.fromTz) {\n this.fromTz = null; // R-- check if ok\n this.min_offset = -999999;\n }\n // Setup to date\n if (this.options.untilDateTz) {\n const today = this._today.startOfValue('month');\n this.toTz = this.options.untilDateTz.startOfValue('day');\n this.max_offset = this.toTz\n .startOfValue('month')\n .dateDiff(today, 'months', 'months');\n } else if (this.toTz) {\n this.toTz = null;\n this.max_offset = 999999;\n }\n if (this.options.month_format) {\n this.month_format = this.options.month_format || 'MMMM yyyy';\n }\n if (this.options.day_format) {\n this.day_format = this.options.day_format || 'EEE';\n this.generateDaysOfTheWeek();\n }\n // Update date blocks\n this.generateMonth();\n }\n }\n\n /**\n * Generate the display blocks for the days of the active month\n */\n private generateMonth(): void {\n this._today = new DateTZ({ date: Date.now(), is_local_tz: !this.timezone, building_tz: this.timezone });\n const startOfMonthDateTz = this._today.addValue({ months: this.offset });\n const active = this.selectedDateTz || DateNow();\n let startDate = startOfMonthDateTz\n .setValue({ day: 1 })\n .setValue({ weekday: 7 })\n .subtractValue({ weeks: 1 });\n this.date_list = [];\n for (let i = 0; i < 42; i++) {\n this.date_list.push({\n value: startDate,\n display: startDate.formatDate('d'),\n active: active.isSameDate(startDate, 'day'),\n non_month: !startOfMonthDateTz.isSameDate(startDate, 'month'),\n count: this.counters\n ? this.counters[startDate.formatDate('yyyy-MM-dd')] || 0\n : 0,\n disabled:\n (this.fromTz ? startDate.ms < this.fromTz.ms : false) ||\n (this.toTz ? startDate.ms > this.toTz.ms : false),\n today: this._today.isSameDate(startDate, 'day'),\n });\n startDate = startDate.addValue({ days: 1 });\n }\n this.month_name = startOfMonthDateTz.formatDate(this.month_format);\n }\n\n /**\n * Generate this weekdays to display in the header of the calendar\n */\n private generateDaysOfTheWeek() {\n let date = this._today.startOfValue('week');\n this.days_of_week = [];\n for (let i = 0; i < 7; i++) {\n this.days_of_week.push(date.formatDate(this.day_format));\n date = date.addValue({ days: 1 });\n }\n }\n\n /**\n * Changes the month offset by the given value.\n * Does nothing if the new month is not available to be selected\n * @param value Number of months to change the offset by\n */\n public changeMonth(value: number): void {\n const new_offset = Math.min(\n this.max_offset,\n Math.max(this.min_offset, this.offset + value)\n );\n this.offset = Math.round(new_offset);\n this.generateMonth();\n this.month.emit(this.offset);\n }\n\n /**\n * Reset the month offset to the month of the selected date\n */\n public reset() {\n const offset = this.offset;\n this.offset = Math.round(\n this._today.dateDiff(this.selectedDateTz, 'months', 'months')\n );\n if (offset !== this.offset) this.generateMonth();\n this.month.emit(this.offset);\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: DateTZ) {\n if (value) {\n this.selectedDateTz = value;\n this.updateDate();\n this.generateMonth();\n }\n }\n\n public readonly registerOnChange = (fn: (_: DateTZ) => void) => this._onChange = fn;\n public readonly registerOnTouched = (fn: (_: DateTZ) => void) => this._onTouch = fn;\n}\n","
\n
\n \n
\n \n
{{ month_name }}
\n = max_offset\"\n (click)=\"changeMonth(1)\"\n >\n
\n \n
\n \n \n \n \n \n \n \n \n \n
{{ item }}
\n \n {{ item.display }}\n
\n
{{item.count > 9 ? '+9' : item.count}}
\n \n
\n
\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n ViewChild,\n OnInit\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\n\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport {\n BehaviorSubject,\n Observable\n} from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { DateTzCalendarWidgetComponent } from '../date-tz-calendar-widget/date-tz-calendar-widget.component';\n\n@Component({\n selector: 'date-tz-date-picker',\n template: `\n \n {{label}}\n \n
{{ dateString | async }}
\n
\n \n
\n \n \n \n
\n \n Today\n \n
\n
\n \n `,\n styleUrls: ['./date-tz-date-picker.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateTzDatePickerComponent),\n multi: true\n }\n ]\n})\nexport class DateTzDatePickerComponent extends BaseDirective implements OnInit, ControlValueAccessor {\n @Input() public label?: string;\n /** Earliest date available the user is allowed to pick */\n @Input() public fromDateTz: DateTZ = DateNow(new Date());\n /** Latest date available the user is allowed to pick */\n @Input() public untilDateTz: DateTZ = DateNow(new Date()).endOfValue('day').addValue({ years: 1 });\n /** Position of the tooltip */\n @Input() public position: 'right' | 'left' = 'right';\n /** Offset of the tooltip */\n @Input() public offset: 'top' | 'bottom' = 'bottom';\n /** Whether form control is disabled */\n @Input() public disabled: boolean;\n // R-- possible TODO, address all_day that disables this input and displays \"Add Day for the value like the time picker\"\n @Input() public all_day: boolean = false;\n /** Whether to show the calendar tooltip */\n @Input() public icon_only: boolean = false;\n\n @Input() public counters: any;\n\n @Input() public initialDateSelectionTz?: DateTZ;\n\n @Output() public onSelect = new EventEmitter();\n\n @Input() public invalid?: boolean;\n\n @Input() public timezone?: string;\n\n @Input() public can_pick_today: boolean = true;\n\n /** Whether form control is invalid, touched and contains errors */\n @Input() public error?: boolean;\n\n public ngOnInit(): void {\n if (this.initialDateSelectionTz) {\n this.writeValue(this.initialDateSelectionTz)\n }\n }\n\n /** Whether to show the calendar tooltip */\n public show_tooltip: boolean;\n /** Form control on change handler */\n private _onChange: (_: DateTZ) => void;\n /** Form control on touch handler */\n private _onTouch: (_: DateTZ) => void;\n\n @ViewChild(MatMenuTrigger, { static: true }) private _trigger: MatMenuTrigger;\n @ViewChild(DateTzCalendarWidgetComponent, {static: true }) private _acaDatePicker: DateTzCalendarWidgetComponent;\n /** Currently selected date */\n public selectedDateTzValue = new BehaviorSubject(DateNow(new Date()));\n\n /** Display value for the current date */\n public get dateString(): Observable {\n return this.selectedDateTzValue.pipe(map(d => {\n const display = d.formatDate('ccc dd MMM yyyy');\n return `${display}${d.isSameDate(new DateTZ({ is_local_tz: false, building_tz: d.building_tz }), 'day') ? ' (Today)' : ''}`;\n }));\n }\n\n /** Whether date picker is open */\n public get is_open(): boolean {\n return this._trigger.menuOpen;\n }\n\n // date\n public get dateTzObservable(): Observable {\n return this.selectedDateTzValue.pipe(map(d => {\n return d \n }));\n\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(newValueTz: DateTZ) {\n // Keep hours and minutes of the old date\n const old_date = this.selectedDateTzValue.value;\n let newDateTz = newValueTz.setValue({ hour: old_date.dateHour, minute: old_date.minutes, second: old_date.second });\n\n // Check that new date is before from\n if (newDateTz.ms < this.fromDateTz.ms) {\n newDateTz = this.fromDateTz;\n }\n\n this.selectedDateTzValue.next(newDateTz);\n if (this._onChange) {\n this._onChange(newDateTz);\n }\n\n this.onSelect.emit(newDateTz);\n this.show_tooltip = false;\n }\n\n public goToToday() {\n const building_tz = this.timezone || this.fromDateTz.building_tz\n const is_local_tz = DateNow(new Date()).building_tz === building_tz\n this.setValue(new DateTZ({ is_local_tz, building_tz }));\n }\n\n public resetToLastSelection = () => this._acaDatePicker.updateDate();\n\n public onDatePickerClose() {\n this.resetToLastSelection();\n }\n /* istanbul ignore next */\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(selectedDateTz: DateTZ) {\n this.selectedDateTzValue.next(selectedDateTz);\n this.show_tooltip = false;\n }\n\n public readonly registerOnChange = (fn: (_: DateTZ) => void) => this._onChange = fn;\n public readonly registerOnTouched = (fn: (_: DateTZ) => void) => this._onTouch = fn;\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /** Set the state of the tooltip to closed after delay */\n public closeDatePicker() {\n this._trigger.closeMenu();\n }\n\n /** Set the state of the tooltip to closed after delay */\n public openDatePicker() {\n this._trigger.openMenu();\n }\n}\n","import {\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n BaseDirective,\n DurationGroup,\n nearestDurationToInput,\n} from '@mckinsey-converge/base';\nimport {\n ControlValueAccessor,\n FormControl,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\nimport {\n BehaviorSubject,\n combineLatest\n} from 'rxjs';\n\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { map } from 'rxjs/operators'; \nimport {\n DEFAULT_DURATION,\n defaultDurationGroups,\n generateDurationOptionsFromGroups\n} from '../utils/time.utils';\nimport { MatSelect } from '@angular/material/select';\nimport { convertLocalTimestampToTimezonedDateTz, convertTimezonedTimestampToLocalDateTz, DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n@Component({\n selector: 'date-tz-duration-field',\n template: `\n
\n {{label}}\n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n
\n `,\n styleUrls: ['./date-tz-duration-field.component.css'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateTzDurationFieldComponent),\n multi: true\n }\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class DateTzDurationFieldComponent extends BaseDirective implements OnInit, ControlValueAccessor, OnChanges {\n @Input() public label?: string;\n @Input() public required: boolean;\n @Input() max_length?: number;\n\n // /** Whether form field is disabled */\n // @Input() public disabled: boolean;\n /** Start date value to count from */\n @Input() public startDateTz: DateTZ;\n /** Set to limit the duration options */\n @Input() public extended?: boolean;\n /** Whether form all_day is enabled. */\n // R-- need to address all_day that disables this input and displays \"Add Day for the value\"\n @Input() public all_day: boolean = false;\n\n /**\n * Specify the slice of durations to use when generating options.\n */\n @Input() public durationGroups: DurationGroup[] = defaultDurationGroups;\n\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n /** Select field for selecting the time */\n @ViewChild('select') private select_field: MatSelect;\n\n /** Component will return a number of minutes */\n public value = new BehaviorSubject(DEFAULT_DURATION);\n\n public currentStartDateTz = new BehaviorSubject(DateNow(new Date()));\n\n public filterFormControl: FormControl = new FormControl();\n\n public nearestStep = combineLatest([this.filterFormControl.valueChanges, this.currentStartDateTz]).pipe(\n \n map(([value, currentStartDate]) => { \n /**\n * convert current start date/time to building time zone first\n * \n */\n const ms = convertTimezonedTimestampToLocalDateTz(currentStartDate.ms, currentStartDate.building_tz).ms;\n return nearestDurationToInput(this.durationGroups, ms, value); \n }\n ));\n\n public options = new BehaviorSubject[]>([]);\n\n public placeHolderOption = this.options.pipe(\n map(options => options.find(o => o.value === DEFAULT_DURATION))\n );\n\n public selectedOption = combineLatest([this.options, this.value]).pipe(\n map(([options, value]) => options.find(o => o.value === value))\n );\n\n public isSelected(option: SelectOption) {\n return this.value.pipe(map(t => t === option.value));\n }\n\n public isDisabled(option: SelectOption) {\n return this.max_length ? option.value > this.max_length : false;\n }\n\n public get isOpen() {\n return this.select_field?.panelOpen ?? false;\n }\n\n ngOnInit(): void {\n this.subscription('OptionsCalculation',\n this.currentStartDateTz.pipe(\n map(d => generateDurationOptionsFromGroups(d, this.durationGroups, this.extended))\n ).subscribe(next => {\n this.options.next(next);\n }));\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.timezone) {\n const dopt = generateDurationOptionsFromGroups(this.currentStartDateTz.value, this.durationGroups, this.extended);\n this.options.next(dopt);\n }\n if (changes.startDateTz) {\n this.currentStartDateTz.next(changes.startDateTz.currentValue);\n }\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: number): void {\n this.writeValue(new_value);\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n writeValue(obj: number): void {\n this.value.next(obj);\n if (this._onChange) {\n this._onChange(obj);\n }\n }\n\n // public setDisabledState(disabled: boolean) {\n // this.disabled = disabled;\n // }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n}\n","import {\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { MatSelect } from '@angular/material/select';\n\nimport {\n BaseDirective,\n closestToTimeSlotTz,\n nearestStepToInput,\n timeWithGmtOffsetFormatString,\n} from '@mckinsey-converge/base';\n\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport {\n generateAvailableTimes,\n generateAvailableTimesTz,\n} from '../utils/time.utils';\nimport { BehaviorSubject, combineLatest } from 'rxjs';\nimport { filter, map, withLatestFrom } from 'rxjs/operators';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { DateTime } from 'luxon';\n\n@Component({\n selector: 'date-tz-time-field',\n template: `\n
\n {{\n label\n }}\n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n
\n `,\n styleUrls: ['./date-tz-time-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateTzTimeFieldComponent),\n multi: true,\n },\n ],\n encapsulation: ViewEncapsulation.None,\n})\nexport class DateTzTimeFieldComponent\n extends BaseDirective\n implements OnInit, OnChanges, ControlValueAccessor\n{\n @Input() public label?: string;\n @Input() public required: boolean;\n /** Time step between each allowed time option */\n @Input() public step = 15;\n /** Whether form field is disabled */\n // @Input() public disabled: boolean;\n /** Whether past times are allowed */\n @Input() public noPastTimes = true;\n /** Representing the DateTZ object datetime to start time options from **/\n @Input() public fromDateTz: DateTZ = DateNow(new Date());\n // Disables this input and displays R--- \"All Day\" for the value\n @Input() public all_day: boolean = false;\n @Input() public show_current: boolean = false;\n @Input() public startFromDateTz: boolean = false;\n\n /** Form control on change handler */\n private _onChange: (_: DateTZ) => void;\n /** Form control on touch handler */\n private _onTouch: (_: DateTZ) => void;\n\n /** Select field for selecting the time */\n @ViewChild('select') private select_field: MatSelect;\n /** DateTZ object representing the currently set datetime */\n public selectedDateTz = new BehaviorSubject(\n closestToTimeSlotTz(DateNow(new Date()), this.step)\n );\n\n /** string representing the currently set datetime display value, needed for the input to display the slected value */\n public selectedTimeString = new BehaviorSubject(\n timeWithGmtOffsetFormatString(this.selectedDateTz.value)\n );\n\n public filterFormControl: FormControl = new FormControl();\n\n /** Available time blocks for the selected date */\n public options = new BehaviorSubject[]>(\n generateAvailableTimesTz(\n DateNow(),\n !this.noPastTimes,\n this.step,\n this.timezone,\n this.all_day,\n this.show_current\n ? [generateOptionForDateTz(DateNow())]\n : [],\n this.startFromDateTz\n )\n );\n\n public ngOnInit(): void {\n // Generate the time input options for the booking date\n this.options.next(\n generateAvailableTimesTz(\n this.selectedDateTz.value,\n !this.noPastTimes,\n this.step,\n this.timezone,\n this.all_day,\n this.show_current\n ? [generateOptionForDateTz(this.selectedDateTz.value)]\n : [],\n this.startFromDateTz\n )\n );\n // Subscribe to selected option changes\n this.subscription(\n 'dateTimeChanges',\n combineLatest([this.selectedDateTz])\n .pipe(\n map(([selectedDateTz]) => {\n /**\n * The selectedDateTz should already be pegged to the closest time slot, but\n * if the selected time rolls into the past this can correct it. // R--- verify this statement\n */\n return closestToTimeSlotTz(selectedDateTz, this.step);\n }),\n withLatestFrom(this.options),\n filter(\n ([date, timeOptions]: [\n DateTZ,\n SelectOption[]\n ]) => {\n // if new time slot opened up when date / time changes, add it here.\n return !timeOptions.find(\n (t) => t.value === date.formatDate('HH:mm')\n );\n }\n ),\n map(([dateTz, timeOptions]) => {\n // TODO probably an issue here with going from a future date and time earlier than now back to day showing null\n // Push the current date option in\n timeOptions.push({\n display: timeWithGmtOffsetFormatString(dateTz),\n shortDisplay: dateTz.formatDate('hh:mma'),\n value: dateTz,\n });\n\n // Sort the time options\n timeOptions.sort((a, b) =>\n `${a.value}`.localeCompare(`${b.value}`)\n );\n return timeOptions;\n })\n )\n .subscribe((next) => {\n return this.options.next(next);\n })\n );\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (\n changes.no_past_times ||\n changes.step ||\n changes.fromDateTz ||\n changes.all_day\n ) {\n // If there's a new date value then update the time options\n this.options.next(\n generateAvailableTimesTz(\n this.selectedDateTz.value,\n !this.noPastTimes,\n this.step,\n this.timezone,\n this.all_day,\n this.show_current\n ? [generateOptionForDateTz(this.selectedDateTz.value)]\n : [],\n this.startFromDateTz\n )\n );\n // If today and all day goes from on to off the selected value isn't going to be available.\n if (\n changes.all_day &&\n !changes.all_day.currentValue &&\n changes.all_day.previousValue\n ) {\n this.setValue(this.options.value[0].display);\n }\n }\n }\n\n /**\n * Getter if the time picker options are visiable or not\n */\n public get isOpen() {\n return this.select_field?.panelOpen ?? false;\n }\n\n /**\n * Getter to return the current form timestamp from the from date object\n */\n public get timezone(): string {\n return this.fromDateTz.building_tz;\n }\n\n /**\n * A filter for finding a matching value when using the input text search\n */\n public nearestStep = combineLatest([\n this.filterFormControl.valueChanges,\n this.selectedDateTz,\n ]).pipe(\n map(([value, selectedDateTz]) => {\n return nearestStepToInput(\n this.step,\n value,\n DateTime.now().valueOf()\n );\n })\n );\n\n /**\n * Default text displayed in the search field when the component initializes\n */\n public placeHolderOption = this.options.pipe(\n map((os) => os.length > 0 && os[0])\n );\n\n /**\n * Returns the selected option object by matching the selectedDateTz formated string with the option.display string\n */\n public selectedOption = combineLatest([\n this.options,\n this.selectedDateTz,\n ]).pipe(\n map(([options, selectedDateTz]) =>\n options.find(\n (o) =>\n o.display === timeWithGmtOffsetFormatString(selectedDateTz)\n )\n )\n );\n\n /**\n * Determines the visually selected value when the options list is visible.\n *\n * @param option DateTZ\n * @returns boolean\n */\n public isSelected(option: SelectOption) {\n return this.selectedTimeString.value === option.display;\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: DateTZ) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: DateTZ) => void): void {\n this._onTouch = fn;\n }\n\n /**\n * Method just used in unit tests to test disabling the input\n * @param disabled\n */\n // public setDisabledState(disabled: boolean) {\n // this.disabled = disabled;\n // }\n\n /**\n * Update the selected values\n * @param dateTz the DateTz object for the new time\n */\n public setSelectedValues(dateTz: DateTZ) {\n // Update the selected DateTz and string representations\n this.selectedTimeString.next(timeWithGmtOffsetFormatString(dateTz));\n this.selectedDateTz.next(dateTz);\n if (this._onChange) {\n this._onChange(dateTz);\n }\n }\n\n /**\n * Update the form field value\n * @param displayString The \"display\" value of this.options set by the time picker\n */\n public setValue(displayString: string): void {\n // Convert the display time string to the actual option object via an array find.\n const newTimeTz = this.options.value.find(\n (opt) => opt.display === displayString\n ).value;\n // Update the selected DateTz and string representations\n this.setSelectedValues(newTimeTz);\n // Send the\n if (newTimeTz) {\n if (this._onChange) {\n this._onChange(newTimeTz);\n }\n }\n }\n\n /**\n * Fires when the form control value is changed\n * @param dateTz The new value for the component\n */\n public writeValue(dateTz: DateTZ | null) {\n // Init is null ?\n if (dateTz != null) {\n // Update the selected DateTz and string representations\n this.setSelectedValues(dateTz);\n // Update the available options\n this.options.next(\n generateAvailableTimesTz(\n dateTz,\n !this.noPastTimes,\n this.step,\n dateTz.building_tz,\n this.all_day,\n this.show_current\n ? [generateOptionForDateTz(dateTz)]\n : [],\n this.startFromDateTz\n )\n );\n }\n }\n}\n\nfunction generateOptionForDateTz(dateTz: DateTZ): SelectOption {\n return {\n display: timeWithGmtOffsetFormatString(dateTz),\n shortDisplay: dateTz.formatDate('hh:mma'),\n value: dateTz, \n }\n}\n","import {\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n BaseDirective,\n nearestDurationToInput,\n DurationGroup,\n} from '@mckinsey-converge/base';\nimport {\n ControlValueAccessor,\n FormControl,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\nimport {\n BehaviorSubject,\n combineLatest\n} from 'rxjs';\n\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport {\n map\n} from 'rxjs/operators';\nimport {\n DEFAULT_DURATION,\n defaultDurationGroups,\n generateDurationOptionsFromGroups\n} from '../utils/time.utils';\nimport { MatSelect } from '@angular/material/select';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n@Component({\n selector: 'mck-duration-field',\n template: `\n
\n {{label}}\n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n
\n `,\n styleUrls: ['./duration-field.component.css'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DurationFieldComponent),\n multi: true\n }\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class DurationFieldComponent extends BaseDirective implements OnInit, ControlValueAccessor, OnChanges {\n @Input()\n public label: string;\n @Input()\n public required: boolean;\n @Input() max_length?: number;\n\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Start date value to count from */\n @Input() public startDate: number;\n /** Set to limit the duration options */\n @Input() public extended?: boolean;\n /** Representing desired timezone **/\n @Input() public timezone?: string = new DateTZ({ date: Date.now() }).local_tz;\n\n /**\n * Specify the slice of durations to use when generating options.\n */\n @Input() public durationGroups: DurationGroup[] = defaultDurationGroups;\n\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n /** Select field for selecting the time */\n @ViewChild('select') private select_field: MatSelect;\n\n public value = new BehaviorSubject(DEFAULT_DURATION);\n\n public currentStartDate = new BehaviorSubject(DateNow(new Date()));\n\n public filterFormControl: FormControl = new FormControl();\n\n public nearestStep = combineLatest([this.filterFormControl.valueChanges, this.currentStartDate]).pipe(\n map(([value, currentStartDate]) => nearestDurationToInput(this.durationGroups, currentStartDate.ms, value)\n ));\n\n public options = new BehaviorSubject[]>([]);\n\n public placeHolderOption = this.options.pipe(\n map(options => options.find(o => o.value === DEFAULT_DURATION))\n );\n\n public selectedOption = combineLatest([this.options, this.value]).pipe(\n map(([options, value]) => options.find(o => o.value === value))\n );\n\n public isSelected(option: SelectOption) {\n return this.value.pipe(map(t => t === option.value));\n }\n\n public isDisabled(option: SelectOption) {\n return this.max_length ? option.value > this.max_length : false;\n }\n\n public get isOpen() {\n return this.select_field?.panelOpen ?? false;\n }\n\n ngOnInit(): void {\n this.subscription('OptionsCalculation',\n this.currentStartDate.pipe(\n map(d => generateDurationOptionsFromGroups(d.toZone(this.timezone), this.durationGroups, this.extended))\n ).subscribe(next => {\n this.options.next(next);\n }));\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.timezone) {\n const dopt = generateDurationOptionsFromGroups(this.currentStartDate.value.toZone(this.timezone), this.durationGroups, this.extended);\n this.options.next(dopt);\n }\n if (changes.startDate) {\n // R--- refactor input param\n const date = new DateTZ({date: this.startDate})\n this.currentStartDate.next(date);\n }\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: number): void {\n this.writeValue(new_value);\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n writeValue(obj: number): void {\n this.value.next(obj);\n if (this._onChange) {\n this._onChange(obj);\n }\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'mck-error-message',\n template: `\n
\n
\n
\n \n \n \n
\n
\n `,\n styleUrls: ['./error-message.component.scss']\n})\nexport class ErrorMessageComponent {\n\n constructor() {\n }\n\n}\n","import {\n Component,\n Input,\n ViewContainerRef\n} from '@angular/core';\nimport { BaseTemplateComponent } from '../../base-template.component';\n\n@Component({\n selector: 'mck-calendar-icon',\n template: `\n \n \n \n \n \n `,\n})\nexport class CalendarIconComponent extends BaseTemplateComponent {\n\n @Input()\n fillClass?: string;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n}\n","import {\n Component,\n Input,\n ViewContainerRef\n} from '@angular/core';\nimport { BaseTemplateComponent } from '../../base-template.component';\n\n@Component({\n selector: 'mck-chevron-icon',\n template: `\n \n \n
\n \n \n \n
\n
\n \n
\n `\n})\nexport class ChevronIconComponent extends BaseTemplateComponent {\n\n @Input()\n fillClass?: string;\n\n @Input()\n up?: boolean;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n}\n","import {\n Component,\n Input,\n OnInit\n} from '@angular/core';\n\n@Component({\n selector: 'mck-close-icon',\n template: `\n \n \n \n \n `\n})\nexport class CloseIconComponent implements OnInit {\n\n @Input()\n fillClass?: string;\n\n constructor() {\n }\n\n ngOnInit(): void {\n }\n\n}\n","import {\n Component,\n Input,\n ViewContainerRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { BaseTemplateComponent } from '../base-template.component';\n\n@Component(\n {\n selector: 'mck-informational-image',\n template: `\n \n
\n
\n
\n \n
\n
\n
\n
\n `,\n styleUrls: ['./informational-image.component.scss'],\n encapsulation: ViewEncapsulation.None\n }\n)\nexport class InformationalImageComponent extends BaseTemplateComponent {\n\n @Input()\n public src: string;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n}\n","import {\n Component,\n Input,\n OnInit,\n ViewContainerRef\n} from '@angular/core';\nimport { BaseTemplateComponent } from '../base-template.component';\n\n@Component({\n selector: 'mck-label',\n template: `\n \n \n \n *\n \n \n `,\n styleUrls: ['./label.component.scss']\n})\nexport class LabelComponent extends BaseTemplateComponent implements OnInit {\n\n @Input()\n required = false;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n\n}\n","import {\n Component,\n Input,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { MatSelect } from '@angular/material/select';\nimport { SelectOption } from '../options/select-option';\n\n@Component({\n selector: 'mck-legend-dropdown',\n template: `\n
\n \n \n \n \n
\n \n \n \n {{ buildPlaceholder() }}\n \n
\n \n
\n \n
\n `,\n styleUrls: ['./legend-dropdown.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class LegendDropdownComponent {\n\n @Input()\n public placeholder: string;\n\n @Input()\n public options: SelectOption[] = [];\n\n @Input()\n public placeholderOpen?: string\n\n /** Select field for selecting the value */\n @ViewChild('select') private select_field: MatSelect;\n\n public get isOpen() {\n return this.select_field?.panelOpen ?? false;\n }\n\n public buildPlaceholder(){\n return this.isOpen && this.placeholderOpen ? this.placeholderOpen : this.placeholder\n }\n}\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n ViewChild,\n OnInit\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\n\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport {\n BehaviorSubject,\n Observable\n} from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { AcaDatePickerComponent } from '../aca-date-picker/aca-date-picker.component';\n\n@Component({\n selector: 'mck-date-picker',\n template: `\n \n Date\n \n
{{ dateString | async }}
\n
\n \n
\n \n \n \n
\n \n Today\n \n
\n
\n \n `,\n styleUrls: ['./mck-date-picker.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MckDatePickerComponent),\n multi: true\n }\n ]\n})\nexport class MckDatePickerComponent extends BaseDirective implements OnInit, ControlValueAccessor {\n /** Earliest date available the user is allowed to pick */\n @Input('from') public _from: number = DateNow(new Date()).ms;\n /** Latest date available the user is allowed to pick */\n @Input('to') public _to: number;\n /** Position of the tooltip */\n @Input() public position: 'right' | 'left' = 'right';\n /** Offset of the tooltip */\n @Input() public offset: 'top' | 'bottom' = 'bottom';\n /** Whether form control is disabled */\n @Input() public disabled: boolean;\n /** Whether to show the calendar tooltip */\n @Input() public icon_only: boolean = false;\n\n @Input() public initialDateSelection?: number;\n\n @Input() public invalid?: boolean;\n\n @Output() public onSelect = new EventEmitter();\n\n // R--- or is this the date picker to refactor. too tired.\n public ngOnInit(): void {\n if (this.initialDateSelection) {\n this.writeValue(this.initialDateSelection)\n }\n }\n\n /** Whether to show the calendar tooltip */\n public show_tooltip: boolean;\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n @ViewChild(MatMenuTrigger, { static: true }) private _trigger: MatMenuTrigger;\n @ViewChild(AcaDatePickerComponent, {static: true }) private _acaDatePicker: AcaDatePickerComponent;\n\n /** Currently selected date */\n public dateValue = new BehaviorSubject(DateNow(new Date()));\n\n /** First allowed date on the calendar */\n public get from(): number {\n return this._from || DateNow(new Date()).startOfValue('day').ms;\n }\n\n /** Current date value */\n public get until(): number {\n return this._to || DateNow(new Date()).endOfValue('day').addValue({ years: 1 }).ms;\n }\n\n /** Display value for the current date */\n public get dateString(): Observable {\n return this.dateValue.pipe(map(d => {\n const display = d.formatDate('ccc dd MMM yyyy');\n return `${display}${d.isSameDate(DateNow(new Date()), 'day') ? ' (Today)' : ''}`;\n }));\n }\n\n /** Whether date picker is open */\n public get is_open(): boolean {\n return this._trigger.menuOpen;\n }\n\n public get date(): Observable {\n return this.dateValue;\n\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: number) {\n // Keep hours and minutes of the old date\n const old_date = this.dateValue.value;\n const d = new DateTZ({date: new_value})\n let new_date = d\n .setValue({ hour: old_date.dateHour, minute: old_date.minutes })\n .ms;\n // Check that new date is before from\n if (new_date < this.from) {\n new_date = this.from;\n }\n const new_d = new DateTZ({ date: new_date })\n this.dateValue.next(new_d);\n if (this._onChange) {\n this._onChange(new_date);\n }\n this.onSelect.emit(new_date);\n this.show_tooltip = false;\n }\n\n public goToToday() {\n this.setValue(DateNow(new Date()).ms);\n }\n\n public resetToLastSelection = () => this._acaDatePicker.updateDate();\n\n public onDatePickerClose() {\n this.resetToLastSelection();\n }\n\n /* istanbul ignore next */\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: number) {\n const date = new DateTZ({date: value})\n this.dateValue.next(date);\n this.show_tooltip = false;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /** Set the state of the tooltip to closed after delay */\n public closeDatePicker() {\n this._trigger.closeMenu();\n }\n\n /** Set the state of the tooltip to closed after delay */\n public openDatePicker() {\n this._trigger.openMenu();\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n ViewContainerRef\n} from '@angular/core';\nimport { BaseTemplateComponent } from '../base-template.component';\n\n@Component({\n selector: 'mck-modal-button-row',\n template: `\n \n \n \n \n
\n \n {{secondaryLabel}}\n \n \n {{primaryLabel}}\n\n \n
\n \n
\n `,\n styleUrls: ['./modal-button-row.component.scss']\n})\nexport class ModalButtonRowComponent extends BaseTemplateComponent {\n\n @Input()\n primaryLabel?: string;\n\n /**\n * Specify if you want to disable the primary button\n */\n @Input()\n primaryDisabled?: boolean = false;\n\n /**\n * Used only if primaryLabel is specified.\n */\n @Output()\n public primarySubmit = new EventEmitter();\n\n /**\n * Specify if you want to show a secondary label button\n */\n @Input()\n secondaryLabel?: string;\n\n @Input()\n disableFixed: boolean = false;\n\n /**\n * Specify if you want to disable the secondary button\n */\n @Input()\n secondaryDisabled?: boolean = false;\n\n /**\n * Used only if secondaryLabel is specified.\n */\n @Output()\n public secondarySubmit = new EventEmitter();\n\n @Input()\n smallButtons?: boolean = false;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n\n}\n","import {\n Component,\n Input\n} from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'mck-modal',\n template: `\n \n
\n
\n \n
\n
\n

{{header}}

\n
\n
\n \n
\n `,\n styleUrls: ['./modal.component.scss']\n})\nexport class ModalComponent {\n\n @Input()\n header?: string;\n @Input() shouldClose?: boolean = true;\n\n constructor(private dialogRef: MatDialogRef) {\n }\n\n public close() {\n this.dialogRef.close();\n }\n}\n","import { Component, EventEmitter, Inject, OnInit, Output } from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { DialogEvent } from '@mckinsey-converge/base';\nimport { DateTZ, isToday } from '@mckinsey-converge/date-tz';\n\n\n@Component({\n selector: 'override-changes-modal',\n templateUrl: './override-changes-modal.component.html',\n styleUrls: ['./override-changes-modal.component.scss']\n})\nexport class OverrideChangesModalComponent implements OnInit{\n\n public edits;\n public timezone;\n\n @Output() public event = new EventEmitter();\n\n constructor(@Inject(MAT_DIALOG_DATA) private _data: OverrideChangesModalComponent){\n\n }\n\n public ngOnInit(){\n // this.edits = this._data.edits.sort((a, b) => a - b);\n\n // Function to convert epoch to 'YYYY-MM-DD' format\n const getDateString = (epoch) => {\n return new Date(epoch * 1000).toISOString().split('T')[0];\n };\n\n // Set to store unique date strings\n const uniqueDates = new Set();\n\n // Filter the edits array\n const filteredEdits = this._data.edits.filter(epoch => {\n const dateString = getDateString(epoch);\n if (!uniqueDates.has(dateString)) {\n uniqueDates.add(dateString);\n return true;\n }\n return false;\n });\n\n this.edits = filteredEdits;\n }\n\n public formatDate(date: number) {\n const dateTZ = new DateTZ({date: date*1000, is_local_tz: false, building_tz: this._data.timezone });\n const dateIsToday = isToday(dateTZ, this._data.timezone);\n const display = dateTZ.formatDate('ccc dd MMM yyyy');\n return `${display}${dateIsToday ? ' (Today)' : ''}`;\n }\n\n public continue(): void {\n this.event.emit({ reason: 'done' });\n }\n\n public close(): void {\n this.event.emit({ reason: 'close' });\n }\n}","
\n \n \n
\n\n \n \n \n\n

Overriding Changes

\n

Editing the series here will override all previous changes made to individual occurrences. Are you sure you want to proceed?

\n\n \n \n \n \n \n \n \n \n \n \n \n
Dates
{{formatDate(edit)}}
\n
\n\n\n \n \n","import {\n Pipe,\n PipeTransform\n} from '@angular/core';\n\n/**\n * Transforms input by returning a subset of items based on if the\n * any items include the search text based on passed objectKey.\n *\n * objectKey can be pipe separated keys. e.g: 'name|age'. Then it will check against all.\n */\n@Pipe({\n name: 'filter'\n})\nexport class FilterPipe implements PipeTransform {\n transform(items: any[], searchText: string, objectKey?: string): any[] {\n if (!items) return [];\n if (!searchText) return items;\n searchText = searchText.toLowerCase();\n const splitKeys = objectKey?.split('|') ?? [];\n return items.filter(it => {\n let included = false;\n splitKeys.forEach((key) => {\n if (it[key]?.toLowerCase().includes(searchText)) {\n included = true;\n }\n });\n if (splitKeys.length === 0) {\n return it.toLowerCase().includes(searchText);\n }\n return included;\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport {\n DomSanitizer,\n SafeHtml,\n SafeResourceUrl,\n SafeScript,\n SafeStyle,\n} from '@angular/platform-browser';\n\nexport enum SecurityContext {\n NONE = 0,\n HTML = 1,\n STYLE = 2,\n SCRIPT = 3,\n URL = 4,\n RESOURCE_URL = 5,\n}\n\n@Pipe({\n name: 'sanitize',\n})\nexport class SanitizePipe implements PipeTransform {\n constructor(private sanitizer: DomSanitizer) {}\n\n transform(\n value: string,\n type: 'resource' | 'url' | 'script' | 'style' | 'html' = 'html'\n ): SafeHtml | SafeResourceUrl | SafeScript | SafeStyle {\n switch (type) {\n case 'resource':\n return (\n this.sanitizer.sanitize(\n SecurityContext.RESOURCE_URL,\n value\n ) || ''\n );\n case 'url':\n return (\n this.sanitizer.sanitize(SecurityContext.URL, value) || ''\n );\n case 'script':\n return (\n this.sanitizer.sanitize(SecurityContext.SCRIPT, value) || ''\n );\n case 'style':\n return (\n this.sanitizer.sanitize(SecurityContext.STYLE, value) || ''\n );\n }\n return this.sanitizer.sanitize(SecurityContext.HTML, value) || '';\n }\n}\n","import {\n Component,\n forwardRef,\n Input,\n OnInit,\n ViewContainerRef\n} from '@angular/core';\nimport { SelectOption } from '../types';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\nimport { BaseTemplateComponent } from '../base-template.component';\nimport { BehaviorSubject } from 'rxjs';\n\n@Component({\n selector: 'mck-radio-select',\n template: `\n \n
\n {{label}}\n \n {{option.display}}\n \n
\n
\n `,\n styleUrls: ['./radio-select.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RadioSelectComponent),\n multi: true\n }\n ]\n})\nexport class RadioSelectComponent extends BaseTemplateComponent implements OnInit, ControlValueAccessor {\n\n @Input()\n label: string;\n\n @Input()\n required?: boolean;\n\n @Input()\n options: SelectOption[];\n\n public value = new BehaviorSubject | undefined>(undefined);\n\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Form control on change handler */\n private _onChange: (_: SelectOption) => void;\n /** Form control on touch handler */\n private _onTouch: (_: SelectOption) => void;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouch = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public setValue(value: string) {\n const obj = this.options.find(o => o.value === value);\n this.writeValue(obj);\n if (this._onChange) {\n this._onChange(obj)\n }\n }\n\n writeValue(obj: SelectOption): void {\n this.value.next(obj);\n }\n}\n","import { Component, Input, OnInit, ViewChild } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\nimport { OrganisationService, RecurrencePeriod, RecurrenceType, removeExpiredOcurrences, RepeatsOn } from \"@mckinsey-converge/data-common\";\nimport { DateTZ } from \"@mckinsey-converge/date-tz\";\nimport { first } from \"rxjs/operators\";\nimport { RecurrencePatternForm } from \"../recurrence-pattern-form/recurrence-pattern-form.component\";\n\n@Component({\n selector: 'recurrence-booking-form',\n templateUrl: './recurrence-booking-form.component.html',\n styleUrls: ['./recurrence-booking-form.component.scss']\n})\n\nexport class RecurringBookingForm implements OnInit {\n /** Form fields for booking */\n @Input() public form: FormGroup;\n\n public current_type: RecurrenceType; \n public recurrence_types: Array = [\n {type: RepeatsOn.PATTERN, label: 'Repeats on'},\n {type: RepeatsOn.DATE, label: 'Repeats on specific date'}\n ]\n\n public building_tz = \"\";\n\n @ViewChild(RecurrencePatternForm) pattern_form: RecurrencePatternForm;\n\n constructor(\n private _org: OrganisationService,\n ) {}\n\n public get recurrencePeriod(){\n return this.form.get('recurrence_period')\n }\n\n public ngOnInit(): void {\n this._org.initialised.pipe(first((_) => _)).subscribe(() => {\n this.building_tz = this._org?.building?.timezone || 'America/Chicago';\n })\n if(this.recurrencePeriod.value === RecurrencePeriod.LIST){\n this.current_type = this.recurrence_types[1];\n removeExpiredOcurrences(this.form)\n }else{\n this.current_type = this.recurrence_types[0];\n }\n }\n\n public onChangeType(value: string) {\n this.current_type = this.recurrence_types.filter((type) => type.type === value)[0]\n if(this.current_type.type === RepeatsOn.PATTERN){\n this.recurrencePeriod.setValue(this.pattern_form.recurrencePatternFormControl.value)\n }else{\n this.recurrencePeriod.setValue(RecurrencePeriod.LIST)\n }\n }\n\n public dateToBuildingTz(date?: number){\n return new DateTZ({date, building_tz: this.building_tz, is_local_tz: false})\n }\n\n public get error(){\n const recurrence_starts = this.form.controls.recurrence_starts\n const recurrence_days = this.form.controls.recurrence_days\n return recurrence_starts.invalid || recurrence_days.invalid\n }\n\n}\n","
\n \n
\n \n \n {{recurrence_types[0].label}}\n \n \n \n
\n
\n \n \n {{recurrence_types[1].label}}\n \n \n \n
\n
\n
\nThe recurrence pattern is not valid.","import { Component, Input, OnInit, ViewChild } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\nimport { MatMenuTrigger } from \"@angular/material/menu\";\nimport { BaseDirective, closestToTimeSlotTz } from \"@mckinsey-converge/base\";\nimport { OrganisationService } from \"@mckinsey-converge/data-common\";\nimport { DateNow, DateTZ,toMiddayUTC } from \"@mckinsey-converge/date-tz\";\n\n@Component({\n selector: 'recurrence-date-form',\n templateUrl: './recurrence-date-form.component.html',\n styleUrls: ['./recurrence-date-form.component.scss']\n})\n\nexport class RecurrenceDateForm extends BaseDirective implements OnInit {\n /** Form fields for booking */\n @Input() public form: FormGroup;\n @Input() disabled: boolean;\n @ViewChild(MatMenuTrigger, { static: true }) private _trigger: MatMenuTrigger;\n\n public selected_dates: Array = []\n public timezone: string = '';\n public nowTz: DateTZ = DateNow(new Date());\n public fromDateTz: DateTZ = this.nowTz.clone();\n public untilDateTz: DateTZ = this.fromDateTz.endOfValue('day').addValue({ years: 1 });\n public dateTz: DateTZ = DateNow(new Date());\n\n public get recurrenceStarts(){\n return this.form.get('recurrence_starts');\n }\n\n public get formDateTz(){\n return this.form.get('dateTz');\n }\n\n constructor (private _org: OrganisationService) {\n super();\n }\n\n public ngOnInit(): void {\n // Setup some data to only run once, the previous giters were hogs\n this.timezone = this.form.get('timezone').value;\n this.nowTz = new DateTZ({ date: Date.now(), is_local_tz: false, building_tz: this.timezone });\n // R--- The fromDateTz is curious, would it make sense to be based on the form dateTz?\n this.fromDateTz = this.nowTz.clone()\n this.untilDateTz = this.fromDateTz.endOfValue('day').addValue({ years: 1 });\n\n if(this.recurrenceStarts.value){\n const tempForSort = [...this.recurrenceStarts.value]; // due to cannot assign to read only property '0' of object '[object Array]'\n this.selected_dates = tempForSort.sort((d1: DateTZ, d2: DateTZ) => d1.ms - d2.ms);\n }\n this.subscription('ocurrenceChanges', this.recurrenceStarts.valueChanges\n .subscribe(() => {\n this.selected_dates = [...this.recurrenceStarts.value]\n })\n ); \n }\n\n /**\n * Add value to the list of selected dates\n * @param newDateTz\n */\n public addDate(newDateTz: DateTZ) {\n const d = newDateTz.clone();\n const start_date = this.formDateTz.value;\n let new_date = d.setValue({hour: start_date.dateHour, minute: start_date.minutes})\n \n /** Prevent user from selecting past dates */\n if (new_date.isBeforeDate(this.fromDateTz)) {\n new_date = this.fromDateTz;\n }\n\n /** Prevent user from selecting the same date more than once */\n const is_selected = this.selected_dates.filter((date: DateTZ)=> new_date.isSameDate(date, 'day'))\n if(is_selected.length){\n return\n }\n \n this.selected_dates.push(new_date);\n this.recurrenceStarts.setValue(this.selected_dates.sort((d1, d2) => d1.ms - d2.ms));\n this.setDateTzForm();\n }\n\n /**\n * \n * @param dateMsValue: number\n * @returns \n */\n public setPickerToGivenDate(dateTsValue: DateTZ) {\n this.fromDateTz = dateTsValue.clone();\n }\n\n /**\n * Function calls on close of date picker without date selection\n */\n public onDatePickerClose = () => {\n this.setPickerToGivenDate(this.nowTz)\n };\n\n public goToToday() {\n this.addDate(this.nowTz);\n this.setPickerToGivenDate(this.nowTz);\n }\n\n public closeDatePicker() {\n this._trigger.closeMenu();\n }\n\n public openDatePicker() {\n this._trigger.openMenu();\n }\n\n public deleteDate(date: DateTZ) {\n const index = this.selected_dates.map((d: DateTZ) => d.ms).indexOf(date.ms)\n this.selected_dates.splice(index, 1)\n this.recurrenceStarts.setValue(this.selected_dates)\n this.setDateTzForm()\n }\n\n public isToday(date) {\n return new DateTZ({\n date: toMiddayUTC(date).ms,\n is_local_tz: false,\n building_tz: this.timezone,\n }).isSameDate(\n new DateTZ({\n date: Date.now(),\n is_local_tz: false,\n building_tz: this.timezone,\n }),\n 'day'\n );\n }\n\n public formatDate(date: DateTZ){\n const isToday = this.isToday(date);\n const display = date.formatDate('ccc dd MMM yyyy');\n\n return `${display}${isToday ? ' (Today)' : ''}`;\n }\n\n private setDateTzForm(): void {\n if (this.selected_dates.length === 0)\n return;\n\n const tz = this._org.building.timezone;\n const date_now = DateNow(new Date()).toZone(tz);\n let dateTz = this.selected_dates[0].clone();\n\n dateTz = dateTz.setValue({\n hour: (this.formDateTz.value as DateTZ).hours,\n minute: (this.formDateTz.value as DateTZ).minutes\n });\n\n if (this.selected_dates[0].isSameDate(this.nowTz, \"day\") && dateTz.hours < date_now.hours) {\n const { minutes: minute, hours: hour } = closestToTimeSlotTz(this.nowTz, 15);\n dateTz = dateTz.setValue({ minute, hour, second: 0 });\n }\n\n this.formDateTz.setValue(dateTz);\n }\n}\n","
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
DateAction
{{formatDate(date)}}Delete
\n
[+] Add another date
\n \n
\n \n Today\n \n
\n
\n
\n
","import { Component, Input, OnInit } from \"@angular/core\";\nimport { FormGroup, Validators } from \"@angular/forms\";\nimport { BaseDirective, closestToTimeSlotTz } from \"@mckinsey-converge/base\";\nimport { arrayWithValues, generateWeekDays, RecurrencePeriod, recurrencePeriodToDurationType, RepeatPeriod, validDateTZ, WeekDays } from \"@mckinsey-converge/data-common\";\nimport { DateNow, DateTZ } from \"@mckinsey-converge/date-tz\";\n\n@Component({\n selector: 'recurrence-pattern-form',\n templateUrl: './recurrence-pattern-form.component.html',\n styleUrls: ['./recurrence-pattern-form.component.scss']\n})\n\nexport class RecurrencePatternForm extends BaseDirective implements OnInit {\n /** Form fields for booking */\n @Input() public form: FormGroup;\n @Input() disabled: boolean;\n\n /** Range of dates for the Start Date Picker*/\n public nowTz: DateTZ = DateNow(new Date());\n public fromStartTz: DateTZ = this.nowTz.setValue({ minute: Math.ceil(this.nowTz.minutes / 5) * 5 });\n public untilTz: DateTZ = this.nowTz.addValue({ years: 1 }).endOfValue('day');\n public timezone: string = '';\n \n\n /** Range of dates for the End Date Picker*/\n public fromEndTz: DateTZ;\n\n public repeat_period_options: Array = [\n {label: 'Day', id: RecurrencePeriod.DAILY},\n {label: 'Week',id: RecurrencePeriod.WEEKLY},\n {label: 'Month', id: RecurrencePeriod.ABSOLUTE_MONTHLY}\n ]\n public week_days: Array = []\n\n public repeat_every_options\n\n\n public get recurrenceDateStartTzFormControl() {\n return this.form.get('dateTz')\n }\n\n public get recurrenceEndFormControl(){\n return this.form.get('recurrence_endTz')\n }\n\n public get recurrencePeriodFormControl(){\n return this.form.get('recurrence_period')\n }\n\n public get recurrenceIntervalFormControl(){\n return this.form.get('recurrence_interval')\n }\n\n public get recurrencePatternFormControl(){\n return this.form.get('recurrence_pattern')\n }\n\n public get recurrenceDaysFormControl(){\n return this.form.get('recurrence_days')\n }\n\n public ngOnInit(): void {\n // Setup some data to only run once, the previous giters were hogs\n this.timezone = this.form.get('timezone').value;\n this.nowTz = new DateTZ({ date: Date.now(), is_local_tz: false, building_tz: this.timezone });\n // R--- The from date is curious, why isn't it based on the form dateTz?\n this.repeat_every_options = new Array(1)\n this.fromStartTz = closestToTimeSlotTz(this.nowTz, 15)\n this.untilTz = this.nowTz.addValue({ years: 1 }).endOfValue('day');\n this.fromEndTz = this.fromStartTz.addValue({days: 1})\n\n this.setEndDateFromStartDate(this.recurrenceDateStartTzFormControl.value) //make sure end date is after start date\n\n if(!this.recurrencePeriodFormControl.value){\n this.recurrencePeriodFormControl.setValue(RecurrencePeriod.WEEKLY)\n }\n\n if(this.recurrencePeriodFormControl.value !== RecurrencePeriod.LIST){\n this.recurrencePatternFormControl.setValue(this.recurrencePeriodFormControl.value)\n }\n\n this.week_days = generateWeekDays(this.recurrenceDateStartTzFormControl.value.ms, { building_tz: this.fromStartTz.building_tz })\n this.generateMaxIntervals()\n\n if(this.recurrenceDaysFormControl.value.length > 0){\n this.week_days = this.week_days.map((day) => \n ({...day, active: this.recurrenceDaysFormControl.value.includes(day.full_name)})\n )\n }\n\n if(!this.recurrenceDaysFormControl.value.length && this.recurrencePeriodFormControl.value === RecurrencePeriod.WEEKLY){\n const current_days = this.week_days.filter((day) => day.active).map((day)=>day.full_name)\n this.recurrenceDaysFormControl.setValue(current_days)\n }\n\n this.generateOcurrenceList()\n\n this.subscription('startTimeChanges', this.recurrenceDateStartTzFormControl.valueChanges\n .subscribe((next) => {\n this.setEndDateFromStartDate(next) \n })\n );\n\n this.subscription('endTimeChanges', this.recurrenceEndFormControl.valueChanges\n .subscribe(() => {\n this.generateMaxIntervals();\n })\n );\n \n this.subscription('recurrencePeriodFormControlChanges', this.recurrencePeriodFormControl.valueChanges\n .subscribe(() => {\n this.generateMaxIntervals();\n })\n ); \n }\n\n public setEndDateFromStartDate(startDateTz: DateTZ){\n let end_date = this.recurrenceEndFormControl.value.setValue({hour: startDateTz.dateHour, minute: startDateTz.minutes})\n\n /**Update the End date picker range */\n this.fromEndTz = startDateTz.isSameDate(this.untilTz,'day') ? startDateTz : startDateTz.addValue({days: 1})\n\n if(end_date.isBeforeDate(this.fromEndTz)){\n end_date = this.fromEndTz\n }\n\n this.recurrenceEndFormControl.setValue(end_date)\n\n this.generateMaxIntervals()\n this.updateActiveWeekday() \n }\n\n public setRepeatPeriod(value: RecurrencePeriod){\n this.updateValidators(value)\n this.recurrencePeriodFormControl.setValue(value);\n this.recurrencePatternFormControl.setValue(value);\n this.recurrenceIntervalFormControl.setValue(1)\n this.generateOcurrenceList();\n }\n\n public setRepeatEvery(value: number){\n this.recurrenceIntervalFormControl.setValue(value)\n this.generateOcurrenceList()\n }\n\n public repeatTimeString(value: string){\n return this.recurrenceIntervalFormControl.value !== 1 ? `${value}(s)` : value\n }\n\n public get displayWeekdays(){\n return this.recurrencePatternFormControl.value === RecurrencePeriod.WEEKLY\n }\n\n /* Check if selected interval is valid and reset to 1 if not*/\n private validateRecurrenceInterval = () => {\n if(this.repeat_every_options.length < this.recurrenceIntervalFormControl.value){\n this.recurrenceIntervalFormControl.setValue(1)\n } \n };\n\n /**\n * Generate max value for dorpdown interval\n */\n public generateMaxIntervals(){\n const start = this.recurrenceDateStartTzFormControl.value;\n const date_diff = this.recurrenceEndFormControl.value.dateDiff(start, this.periodToDurationType, this.periodToDurationType)\n //If no diff default to 1\n this.repeat_every_options = new Array(Math.round(date_diff) || 1)\n this.validateRecurrenceInterval();\n if(this.recurrencePeriodFormControl.value !== RecurrencePeriod.LIST){\n this.generateOcurrenceList()\n }\n }\n\n /**\n * Generate ocurrence list base on the selected interval\n */\n public generateOcurrenceList() {\n\n /**If selected period is list then we don't want \n * to generate a list based on the repeats on selections*/\n if(this.recurrencePeriodFormControl.value === RecurrencePeriod.LIST){\n return\n }\n\n const occurrence = []\n const first_date = this.recurrenceDateStartTzFormControl.value;\n let start = first_date\n const end = this.recurrenceEndFormControl.value;\n const interval = this.recurrenceIntervalFormControl.value\n const recurr_days = this.week_days.filter(day => day.active)\n /**\n * isLastDayOfMonth : Boolean\n * flag - to generate last day of every month in case of day or month reccuring booking if start date is last day of month\n */\n // const isLastDayOfMonth = first_date.date.day === first_date.date.daysInMonth && this.recurrencePeriodFormControl.value === RecurrencePeriod.ABSOLUTE_MONTHLY;\n const isLastDayOfMonth = first_date.dateDay === 31 && this.recurrencePeriodFormControl.value === RecurrencePeriod.ABSOLUTE_MONTHLY ;\n \n if(this.recurrencePeriodFormControl.value === RecurrencePeriod.WEEKLY){\n start = start.startOfValue('week')\n }\n\n while (end.dateDiff(start.startOfValue('day'), this.periodToDurationType, this.periodToDurationType) >= 0) {\n \n if(this.recurrencePeriodFormControl.value !== RecurrencePeriod.WEEKLY){\n occurrence.push(start) \n start = start.addValue({[this.periodToDurationType]: interval}, isLastDayOfMonth);\n /**\n * IF - should only consider resetting start under mentioned condition of ticket - https://acaprojects.atlassian.net/browse/MCK-2085\n * In summery - If user select any date except 31st, other months in the series (no matter 30 or 31 day month) should have same date select as start date.\n * If user select 31st as an start date, other month in the seleries should have select last day of the month (30th/31st/28th/29th).\n * Exception for February - February should select 28th or 29th If in above both selection includes date between 28th - 31st.\n * \n */\n if(start.dateDay !== first_date.dateDay && start.dateDay !== start.date.daysInMonth && this.recurrencePeriodFormControl.value === RecurrencePeriod.ABSOLUTE_MONTHLY) {\n start = start.setValue({day: first_date.dateDay});\n } \n }else {\n recurr_days.forEach((day)=>{\n const date = start.addValue({days: day.day_index})\n if((date.isAfterDate(first_date) || date.isSameDate(first_date, 'day')) && \n (date.isBeforeDate(end) || date.isSameDate(end, 'day'))){\n occurrence.push(date)\n }\n })\n start = start.addValue({[this.periodToDurationType]: interval})\n }\n }\n\n this.form.controls.recurrence_count.setValue(occurrence.length)\n this.form.controls.recurrence_starts.setValue(occurrence.sort((d1, d2) => d1.ms - d2.ms))\n \n }\n\n public get periodToDurationType(){\n const period = this.recurrencePeriodFormControl.value\n return recurrencePeriodToDurationType(period)\n }\n\n /**\n * Update active weekday in the weekdays array\n */\n private updateActiveWeekday() {\n const _week_days = this.week_days.map((day)=>{\n if(this.recurrenceDaysFormControl.value.includes(day.full_name)){\n return {...day, active: true}\n }else{\n return {...day, active: false}\n }\n })\n this.week_days = [..._week_days] \n }\n\n public setWeekDays(new_day: WeekDays){\n const days = this.recurrenceDaysFormControl.value\n if(this.disabled){\n return\n }\n\n if(!new_day.active){\n days.push(new_day.full_name)\n }else{\n const current_index = days.indexOf(new_day.full_name)\n days.splice(current_index,1)\n }\n this.recurrenceDaysFormControl.setValue([...days])\n this.updateActiveWeekday()\n this.generateOcurrenceList()\n }\n\n /**Update the recurrence days validator if period changes */\n public updateValidators(value: RecurrencePeriod){\n if(value === RecurrencePeriod.WEEKLY && this.recurrencePeriodFormControl.value !== RecurrencePeriod.WEEKLY){\n const arrayValidators = [Validators.required];\n arrayValidators.push(arrayWithValues);\n this.recurrenceDaysFormControl.setValidators(arrayValidators);\n this.recurrenceDaysFormControl.updateValueAndValidity();\n }else if(value !== RecurrencePeriod.WEEKLY && this.recurrencePeriodFormControl.value === RecurrencePeriod.WEEKLY){\n this.recurrenceDaysFormControl.clearValidators();\n this.recurrenceDaysFormControl.updateValueAndValidity();\n }\n }\n}\n","
\n
\n \n \n \n Date and time must be in the future\n
\n
\n \n \n \n Date and time must be in the future\n
\n
\n
\n \n
\n \n \n \n {{ i + 1}}\n \n \n \n \n \n \n {{ repeatTimeString(option.label) }}\n \n \n \n
\n
\n
\n \n
\n
\n {{day.id}}\n
\n
\n
\n
\n
","import {\n Component,\n Input,\n ViewContainerRef\n} from '@angular/core';\nimport { BaseTemplateComponent } from '../base-template.component';\nimport { SelectOption } from '../types';\n\n@Component({\n selector: 'mck-select-option',\n template: `\n \n \n \n \n {{ option.display }}\n \n \n `,\n styleUrls: ['./select-option.component.css']\n})\nexport class SelectOptionComponent extends BaseTemplateComponent {\n\n @Input()\n option: SelectOption;\n\n @Input()\n selected: boolean;\n\n /**\n * If true, we still display as if it wasn't disabled.\n */\n @Input()\n ignoreDisabled = false;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n\n}\n","import {\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n BehaviorSubject,\n combineLatest\n} from 'rxjs';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { map } from 'rxjs/operators';\nimport { MatSelect } from '@angular/material/select';\nimport {\n ControlValueAccessor,\n FormControl,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\n\n@Component({\n selector: 'mck-select',\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectComponent),\n multi: true\n }\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class SelectComponent implements OnInit, OnChanges, ControlValueAccessor {\n\n @Input()\n public label: string;\n\n @Input()\n public required: boolean;\n\n @Input()\n public options: SelectOption[] = [];\n\n @Input()\n public selectedValue: SelectOption | undefined;\n\n /**\n * When true, can filter by searching on the input.\n */\n @Input()\n public searchEnabled = false;\n\n @Input()\n public splitDisplay = false;\n\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n\n @Input()\n public noEntriesFoundLabel: string;\n\n @Input()\n public showDivider: boolean = false\n\n /** Form control on change handler */\n private _onChange: (_: SelectOption) => void;\n /** Form control on touch handler */\n private _onTouch: (_: SelectOption) => void;\n\n public filterFormControl: FormControl = new FormControl();\n\n public value = new BehaviorSubject(this.selectedValue || this.options[0]?.value);\n\n /** Available time blocks for the selected date */\n public _options = new BehaviorSubject[]>(this.options);\n\n /** Select field for selecting the value */\n @ViewChild('select') private select_field: MatSelect;\n\n public selectedOption = combineLatest([this._options, this.value]).pipe(\n map(([options, value]) => options.find(o => o.value === value))\n );\n\n public placeHolderOption = this._options.pipe(\n map(os => os.length > 0 && os[0])\n );\n\n public isSelected(option: SelectOption) {\n return this.value.pipe(map(t => t === option.value));\n }\n\n public get isOpen() {\n return this.select_field?.panelOpen ?? false;\n }\n\n\n constructor() {\n }\n\n public ngOnInit(): void {\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.options) {\n this._options.next(this.options);\n this.value.next(this.selectedValue || this.options?.[0]?.value);\n }\n if (changes.selectedValue) {\n this.value.next(this.selectedValue?.value);\n }\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: string): void {\n this.value.next(new_value);\n if (this._onChange) {\n this._onChange(this.options.find(f => f.value === new_value));\n }\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: SelectOption | null) {\n if (value != null) {\n this.value.next(value.value);\n }\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: SelectOption) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: SelectOption) => void): void {\n this._onTouch = fn;\n }\n\n}\n","
\n {{label}}\n \n \n \n \n \n \n \n \n \n \n
\n \n
\n \n
\n","import {\n Component,\n EventEmitter,\n Input,\n Output\n} from '@angular/core';\n\n@Component({\n selector: 'mck-selected-chip-count',\n template: `\n \n {{count}}\n \n \n `,\n styleUrls: ['./selected-chip-count.component.scss']\n})\nexport class SelectedChipCountComponent {\n\n @Input()\n count: number;\n\n @Output()\n close = new EventEmitter();\n\n}\n","import {\n Component,\n Input,\n OnInit,\n ViewContainerRef\n} from '@angular/core';\nimport { BaseTemplateComponent } from '../base-template.component';\n\nexport enum SpacerMode {\n /**\n * If vertical, it expands in the vertical direction. Size is width.\n */\n Vertical = 'vertical',\n /**\n * If horizontal, it expands in the horizontal direction. Size is height.\n */\n Horizontal = 'horizontal',\n}\n\n@Component({\n selector: 'mck-spacer',\n template: `\n \n
\n
\n
\n
\n
\n `,\n styleUrls: ['./spacer.component.css'],\n})\nexport class SpacerComponent extends BaseTemplateComponent implements OnInit {\n SpacerMode = SpacerMode;\n\n @Input()\n size: string;\n\n @Input()\n mode: SpacerMode = SpacerMode.Horizontal;\n\n @Input()\n autoSize?: boolean;\n\n @Input()\n spacerClass?: string;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n\n\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output\n} from '@angular/core';\nimport { SelectOption } from '@mckinsey-converge/ui';\n\n@Component({\n selector: 'mck-switch-group',\n template: `\n
\n {{title}}\n {{option.display}}\n
\n `,\n styleUrls: ['./switch-group.component.scss']\n})\nexport class SwitchGroupComponent implements OnInit {\n\n @Input()\n title: string;\n\n @Input()\n options: SelectOption[];\n\n @Input()\n selectedOptions: SelectOption[] = [];\n\n @Output()\n optionChecked = new EventEmitter>();\n\n constructor() {\n }\n\n ngOnInit(): void {\n }\n\n public onCheckedChange(option: SelectOption) {\n this.optionChecked.emit(option);\n }\n\n public isSelected(option: SelectOption) {\n return !!this.selectedOptions.find(s => s.value === option.value);\n }\n}\n","import {\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\nimport { MatSelect } from '@angular/material/select';\n\nimport {\n BaseDirective,\n closestToTimeSlot,\n nearestStepToInput,\n timeWithGmtOffsetFormatString\n} from '@mckinsey-converge/base';\n\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { generateAvailableTimes } from '../utils/time.utils';\nimport {\n BehaviorSubject,\n combineLatest\n} from 'rxjs';\nimport {\n filter,\n map,\n withLatestFrom\n} from 'rxjs/operators';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { DateTime } from 'luxon';\n\n@Component({\n selector: 'mck-time-field',\n template: `\n
\n {{label}}\n \n \n \n \n \n \n \n \n \n
\n \n
\n \n
\n `,\n styleUrls: ['./time-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TimeFieldComponent),\n multi: true\n }\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class TimeFieldComponent extends BaseDirective implements OnInit, OnChanges, ControlValueAccessor {\n @Input()\n public label: string;\n @Input()\n public required: boolean;\n /** Time step between each allowed time option */\n @Input() public step = 15;\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Whether past times are allowed */\n @Input() public noPastTimes = true;\n /** Representing the date from start **/\n @Input() public from: number;\n /** Representing desired timezone **/\n @Input() public timezone?: string = new DateTZ({ date: Date.now() }).local_tz;\n\n // R-- Which time field is going to be used, there's too many\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n /** Select field for selecting the time */\n @ViewChild('select') private select_field: MatSelect;\n\n /** String representing the currently set date */\n public date = new BehaviorSubject(DateNow(new Date()).ms);\n\n public filterFormControl: FormControl = new FormControl();\n\n public nearestStep = combineLatest([\n this.filterFormControl.valueChanges,\n this.date]).pipe(\n map(([value, date]) => nearestStepToInput(this.step, value, DateTime.now().valueOf()))\n );\n\n /** String representing the currently set time */\n public value = new BehaviorSubject(closestToTimeSlot(DateTime.now(), this.step).toFormat('HH:mm'));\n\n /** Available time blocks for the selected date */\n public options = new BehaviorSubject[]>(generateAvailableTimes(DateNow(new Date()).ms, !this.noPastTimes, this.step, this.timezone));\n\n public selectedOption = combineLatest([this.options, this.value]).pipe(\n map(([options, value]) => options.find(o => o.value === value))\n );\n\n public placeHolderOption = this.options.pipe(\n map(os => os.length > 0 && os[0])\n );\n\n public isSelected(option: SelectOption) {\n return this.value.pipe(map(t => t === option.value));\n }\n\n public get isOpen() {\n return this.select_field?.panelOpen ?? false;\n }\n\n public ngOnInit(): void {\n // Generate the time input options for the booking date\n this.options.next(generateAvailableTimes(this.date.value, !this.noPastTimes, this.step, this.timezone));\n\n // Subscribe to selected option changes\n this.subscription('dateTimeChanges',\n combineLatest([\n this.date\n ]).pipe(\n map(([date]) => {\n // R--- The time input needing to be TZ aware.\n const closestTimeSlot = closestToTimeSlot(DateTime.fromMillis(date.valueOf()), this.step);\n // Need to return the date with building timezone or the HH:mm representation will no match the option values\n return new DateTZ({date: closestTimeSlot.valueOf(), is_local_tz:false, building_tz: this.timezone});\n }),\n withLatestFrom(this.options),\n filter(([date, timeOptions]: [DateTZ, SelectOption[]]) => {\n // if new time slot opened up when date / time changes, add it here.\n return !timeOptions.find(t => t.value === date.formatDate('HH:mm'));\n }),\n map(([date, timeOptions]) => {\n // TODO probably an issue here with going from a future date and time earlier than now back to day showing null\n // Push the current date option in\n timeOptions.push({\n display: timeWithGmtOffsetFormatString(date),\n value: date.formatDate('HH:mm')\n });\n // Sort the time options\n timeOptions.sort((a, b) => `${a.value}`.localeCompare(`${b.value}`));\n return timeOptions;\n })\n ).subscribe(next => this.options.next(next)));\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.no_past_times || changes.step || changes.timezone) {\n // If there's a new date value then update the time options\n this.options.next(generateAvailableTimes(this.date.value, !this.noPastTimes, this.step, this.timezone));\n const buildingDate = new DateTZ({date: this.from, is_local_tz: false, building_tz: this.timezone}).startOfValue('minute');\n this.value.next(buildingDate.formatDate('HH:mm'));\n }\n if (changes.from) {\n // When the from input param changes update the date value\n this.date.next(this.from);\n }\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: string): void {\n // value comes in as a HH:mm string\n const newTime = (new_value.indexOf(':') > 0 ? new_value : '00:00').split(':');\n // need the date with the building timezone so the hour set is relative to there and not local.\n const d = new DateTZ({ date: this.date.value, is_local_tz: false, building_tz: this.timezone });\n const date = d.setValue({ hour: parseInt(newTime[0]), minute: parseInt(newTime[1]) });\n if (date) {\n if (this._onChange) {\n this._onChange(date.ms);\n }\n }\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: number | null) {\n if (value != null) {\n // Time input value in building time milliseconds\n this.date.next(value);\n // Get the closest time to slot in case the browser was idle and elapse the valid times\n const date = closestToTimeSlot(DateTime.fromMillis(value).startOf('minute'), this.step);\n // Need the building time so HH:mm is correct\n const buildingDate = new DateTZ({date: date.valueOf(), is_local_tz: false, building_tz: this.timezone}).startOfValue('minute');\n this.options.next(generateAvailableTimes(buildingDate.ms, !this.noPastTimes, this.step, this.timezone));\n }\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output\n} from '@angular/core';\nimport { SelectOption } from '@mckinsey-converge/ui';\n\n@Component({\n selector: 'mck-toggle',\n template: `\n
\n \n
\n `,\n styleUrls: ['./toggle.component.scss']\n})\nexport class ToggleComponent {\n\n @Input()\n options: SelectOption[];\n\n @Input()\n selected: SelectOption;\n\n @Output()\n selectedChange = new EventEmitter>();\n\n public onTapOption(option: SelectOption) {\n this.selectedChange.emit(option);\n }\n\n isSelected(option: SelectOption) {\n return this.selected === option;\n }\n}\n","import { Component, Input } from '@angular/core';\nimport {TooltipPosition, TooltipTheme} from \"./tooltip.enums\";\n\n@Component({\n selector: 'app-tooltip',\n templateUrl: './tooltip.component.html',\n styleUrls: ['./tooltip.component.scss']\n})\nexport class TooltipComponent {\n isVisible: boolean = false; // To control the visibility of the tooltip\n position: TooltipPosition = TooltipPosition.DEFAULT;\n theme: TooltipTheme = TooltipTheme.DEFAULT;\n tooltip = '';\n left = 0;\n top = 0;\n visible = false;\n}","
\n
\n
\n {{string}}\n
\n
\n
","import {\n ApplicationRef,\n ComponentFactoryResolver,\n ComponentRef,\n Directive,\n ElementRef,\n EmbeddedViewRef,\n HostListener,\n Injector,\n Input,\n ViewContainerRef\n} from '@angular/core';\nimport {TooltipComponent} from \"./tooltip.component\";\nimport {TooltipPosition, TooltipTheme} from \"./tooltip.enums\";\n\n@Directive({\n selector: '[tooltip]'\n})\nexport class TooltipDirective {\n\n @Input() tooltip = '';\n @Input() position: TooltipPosition = TooltipPosition.DEFAULT;\n @Input() theme: TooltipTheme = TooltipTheme.DEFAULT;\n @Input() trigger: 'hover' | 'click' = 'hover'; \n @Input() showDelay = 0;\n @Input() hideDelay = 0;\n @Input() show: boolean = true;\n\n private componentRef: ComponentRef | null = null;\n private showTimeout?: number;\n private hideTimeout?: number;\n private touchTimeout?: number;\n\n constructor(private elementRef: ElementRef, private appRef: ApplicationRef,\nprivate componentFactoryResolver: ComponentFactoryResolver, private injector: Injector) {\n }\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (this.trigger === 'hover') {\n this.initializeTooltip();\n }\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n if (this.trigger === 'hover') {\n this.setHideTooltipTimeout();\n }\n }\n\n @HostListener('click')\n onClick(): void {\n if (this.trigger === 'click') {\n if (this.componentRef === null) {\n this.initializeTooltip();\n } else {\n this.destroy(); // Hide tooltip if it is already shown\n }\n }\n }\n\n @HostListener('touchstart', ['$event'])\n onTouchStart($event: TouchEvent): void {\n $event.preventDefault();\n window.clearTimeout(this.touchTimeout);\n this.touchTimeout = window.setTimeout(this.initializeTooltip.bind(this), 500);\n }\n\n @HostListener('touchend')\n onTouchEnd(): void {\n window.clearTimeout(this.touchTimeout);\n this.setHideTooltipTimeout();\n }\n\n private initializeTooltip() {\n if (this.componentRef === null) {\n window.clearInterval(this.hideDelay);\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(TooltipComponent);\n this.componentRef = componentFactory.create(this.injector);\n\n this.appRef.attachView(this.componentRef.hostView);\n const [tooltipDOMElement] = (this.componentRef.hostView as EmbeddedViewRef).rootNodes;\n\n this.setTooltipComponentProperties();\n\n document.body.appendChild(tooltipDOMElement);\n this.showTimeout = window.setTimeout(this.showTooltip.bind(this), this.showDelay);\n }\n }\n\n private setTooltipComponentProperties() {\n if (this.componentRef !== null) {\n this.componentRef.instance.tooltip = this.tooltip;\n this.componentRef.instance.position = this.position;\n this.componentRef.instance.theme = this.theme;\n\n const {left, right, top, bottom} = this.elementRef.nativeElement.getBoundingClientRect();\n\n switch (this.position) {\n case TooltipPosition.BELOW: {\n this.componentRef.instance.left = Math.round((right - left) / 2 + left);\n this.componentRef.instance.top = Math.round(bottom);\n break;\n }\n case TooltipPosition.ABOVE: {\n this.componentRef.instance.left = Math.round((right - left) / 2 + left);\n this.componentRef.instance.top = Math.round(top);\n break;\n }\n case TooltipPosition.RIGHT: {\n this.componentRef.instance.left = Math.round(right);\n this.componentRef.instance.top = Math.round(top + (bottom - top) / 2);\n break;\n }\n case TooltipPosition.LEFT: {\n this.componentRef.instance.left = Math.round(left);\n this.componentRef.instance.top = Math.round(top + (bottom - top) / 2);\n break;\n }\n default: {\n break;\n }\n }\n }\n }\n\n private showTooltip() {\n if (this.componentRef !== null) {\n this.componentRef.instance.visible = this.show ? true : false;\n }\n }\n\n private setHideTooltipTimeout() {\n this.hideTimeout = window.setTimeout(this.destroy.bind(this), this.hideDelay);\n }\n\n ngOnDestroy(): void {\n this.destroy();\n }\n\n destroy(): void {\n if (this.componentRef !== null) {\n window.clearInterval(this.showTimeout);\n window.clearInterval(this.hideDelay);\n this.appRef.detachView(this.componentRef.hostView);\n this.componentRef.destroy();\n this.componentRef = null;\n }\n }\n}\n","export enum TooltipPosition {\n ABOVE = 'above',\n BELOW = 'below',\n LEFT = 'left',\n RIGHT = 'right',\n DYNAMIC = 'dynamic',\n DEFAULT = 'below'\n}\n\nexport enum TooltipTheme {\n DARK = 'dark',\n LIGHT = 'light',\n DEFAULT = 'dark'\n}\n","export { AlertMode, AlertBannerDisplay } from './alert-banner/alert-banner.component';\nexport { SelectOption } from './options/select-option';\nexport * from './cng-select/dropdown-panel';","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatSelectModule } from '@angular/material/select';\nimport { AutoCompleteChipSelectItemComponent } from './auto-complete-chip-select-item/auto-complete-chip-select-item.component';\nimport { AutoCompleteSelectOptionComponent } from './auto-complete-select-option/auto-complete-select-option.component';\nimport {\n FormsModule,\n ReactiveFormsModule\n} from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { NgxMatSelectSearchModule } from 'ngx-mat-select-search';\nimport { RadioSelectComponent } from './radio-select/radio-select.component';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { FilterPipe } from './pipes/filter.pipe';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TimeFieldComponent } from './time-field/time-field.component';\nimport { DateTzTimeFieldComponent } from './date-tz-time-field/date-tz-time-field.component';\nimport { SpacerComponent } from './spacer/spacer.component';\nimport { DurationFieldComponent } from './duration-field/duration-field.component';\nimport { DateTzDurationFieldComponent } from './date-tz-duration-field/date-tz-duration-field.component';\nimport { AcaDatePickerComponent } from './aca-date-picker/aca-date-picker.component'; // the old widget\nimport { MckDatePickerComponent } from './mck-date-picker/mck-date-picker.component'; // the old form field \nimport { DateTzCalendarWidgetComponent } from './date-tz-calendar-widget/date-tz-calendar-widget.component'; // the new widget\nimport { DateTzDatePickerComponent } from './date-tz-date-picker/date-tz-date-picker.component'; // the new form field \nimport { CalendarIconComponent } from './icons/calendar/calendar-icon.component';\nimport { ChevronIconComponent } from './icons/calendar/chevron-icon.component';\nimport { SelectOptionComponent } from './select-option/select-option.component';\nimport { CloseIconComponent } from './icons/close/close-icon.component';\nimport { SelectedChipCountComponent } from './selected-chip-count/selected-chip-count.component';\nimport { AlertBannerComponent } from './alert-banner/alert-banner.component';\nimport { ErrorMessageComponent } from './error-message/error-message.component';\nimport { ToggleComponent } from './toggle/toggle.component';\nimport { LabelComponent } from './label/label.component';\nimport { ModalComponent } from './modal/modal.component';\nimport { CollapseHeaderComponent } from './collapse-header/collapse-header.component';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { SwitchGroupComponent } from './switch-group/switch-group.component';\nimport { ModalButtonRowComponent } from './modal-button-row/modal-button-row.component';\nimport { InformationalImageComponent } from './informational-image/informational-image.component';\nimport { GroupHeaderPipe } from './auto-complete-chip-select-item/groupHeader.pipe';\nimport { SelectComponent } from './select/select.component';\nimport { LegendDropdownComponent } from './legend-dropdown/legend-dropdown.component';\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\nimport { RecurrencePatternForm } from './recurrence-pattern-form/recurrence-pattern-form.component'; \nimport { RecurrenceDateForm } from './recurrence-date-form/recurrence-date-form.component';\nimport { ConflictsModalComponent } from './conflicts-modal/conflicts-modal.component';\nimport { RecurringBookingForm } from './recurrence-booking-form/recurrence-booking-form.component';\nimport { OverrideChangesModalComponent } from './override-changes-modal/override-changes-modal.component';\nimport { SanitizePipe } from './pipes/sanitise.pipe';\nimport { ConflictAlertModalComponent } from './conflict-alert-modal/conflict-alert-modal.component';\nimport { CngSelectComponent } from './cng-select/cng-select.component';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { DropdownTriggerForDirective } from './cng-select/dropdown-trigger-for.directive';\nimport { CngSelectOptionsComponent } from './cng-select/cng-select-options.component';\nimport { TooltipComponent } from './tooltip/tooltip.component';\nimport { TooltipDirective } from './tooltip/tooltip.directive';\nimport { ZoomWarningComponent } from './zoom-warning-modal/components/zoom-warning/zoom-warning.component';\nimport { CustomSnackbarComponent } from './custom-snackbar-component/custom-snackbar-component.component';\nimport { SnackBarService } from './custom-snackbar-component/custom-snackbar-component.service';\nimport { CateringDropComponent } from './catering-drop-modal/components/catering-drop/catering-drop-modal.component';\n\nexport const MATERIAL_MODULES: any[] = [\n MatButtonModule,\n MatSnackBarModule,\n MatDialogModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatProgressSpinnerModule,\n MatProgressBarModule,\n MatAutocompleteModule,\n MatSelectModule,\n MatChipsModule,\n MatRippleModule,\n MatMenuModule,\n MatCheckboxModule,\n MatTooltipModule,\n MatRadioModule,\n MatTabsModule,\n MatSlideToggleModule,\n MatExpansionModule,\n OverlayModule\n];\n\n@NgModule({\n imports: [CommonModule,\n ...MATERIAL_MODULES,\n ReactiveFormsModule,\n FormsModule,\n NgxMatSelectSearchModule, \n NgxSkeletonLoaderModule,\n MatSnackBarModule],\n declarations: [\n AutoCompleteChipSelectItemComponent,\n AutoCompleteSelectOptionComponent,\n AcaDatePickerComponent,\n MckDatePickerComponent,\n DateTzCalendarWidgetComponent,\n DateTzDatePickerComponent,\n TimeFieldComponent,\n DateTzTimeFieldComponent,\n DurationFieldComponent,\n DateTzDurationFieldComponent,\n GroupHeaderPipe,\n RadioSelectComponent,\n FilterPipe,\n SanitizePipe,\n SpacerComponent,\n CalendarIconComponent,\n ChevronIconComponent,\n SelectOptionComponent,\n CloseIconComponent,\n SelectedChipCountComponent,\n AlertBannerComponent,\n ErrorMessageComponent,\n ToggleComponent,\n LabelComponent,\n ModalComponent,\n CollapseHeaderComponent,\n SwitchGroupComponent,\n ModalButtonRowComponent,\n InformationalImageComponent,\n SelectComponent,\n LegendDropdownComponent,\n RecurrencePatternForm,\n RecurrenceDateForm,\n RecurringBookingForm,\n ConflictsModalComponent,\n OverrideChangesModalComponent,\n ConflictAlertModalComponent,\n CngSelectComponent, \n DropdownTriggerForDirective,\n CngSelectOptionsComponent,\n TooltipComponent,\n TooltipDirective,\n ZoomWarningComponent,\n CustomSnackbarComponent,\n CateringDropComponent\n ],\n exports: [\n AutoCompleteChipSelectItemComponent,\n AutoCompleteSelectOptionComponent,\n AcaDatePickerComponent,\n MckDatePickerComponent,\n DateTzCalendarWidgetComponent,\n DateTzDatePickerComponent,\n TimeFieldComponent,\n DateTzTimeFieldComponent,\n DurationFieldComponent,\n DateTzDurationFieldComponent,\n RadioSelectComponent,\n FilterPipe,\n SanitizePipe,\n SpacerComponent,\n CalendarIconComponent,\n ChevronIconComponent,\n AlertBannerComponent,\n ReactiveFormsModule,\n FormsModule,\n ToggleComponent,\n LabelComponent,\n ModalComponent,\n CollapseHeaderComponent,\n SwitchGroupComponent,\n ModalButtonRowComponent,\n InformationalImageComponent,\n SelectComponent,\n LegendDropdownComponent,\n RecurrencePatternForm,\n RecurrenceDateForm,\n RecurringBookingForm,\n ConflictsModalComponent,\n OverrideChangesModalComponent,\n ConflictAlertModalComponent,\n CngSelectComponent, \n DropdownTriggerForDirective,\n CngSelectOptionsComponent,\n TooltipComponent,\n TooltipDirective,\n ZoomWarningComponent,\n ],\n entryComponents: [\n CustomSnackbarComponent,\n CateringDropComponent\n ]\n \n})\nexport class UiModule {\n}\n","/**\n * Generate a list of time options for the given date\n * @param datestamp Date to generate options for\n * @param show_past Whether past times should be options\n */\n\nimport {\n closestToTimeSlot,\n closestToTimeSlotTz,\n DurationGroup,\n durationHumanized,\n timeFormatString,\n timeWithGmtOffsetFormatString,\n unique\n} from '@mckinsey-converge/base';\nimport { SelectOption } from '../types';\nimport { DateTZ } from \"@mckinsey-converge/date-tz\";\nimport { DateTime } from 'luxon';\n\n// 24 hours\nexport const ALL_DAY_BOOKING_VALUE = 60 * 24;\n\nexport const DEFAULT_DURATION = 30;\n\n// R--- depreciate.\nexport const generateAvailableTimes = (\n datestamp: number,\n showPast: boolean,\n step: number = 15,\n timezone: string = new DateTZ({ date: Date.now() }).local_tz\n): SelectOption[] => {\n // R--- refactor to only used dateTz input and drop timezone param.\n // now needs the building timezone for isAfter to work correctly\n const now = new DateTZ({ date: Date.now(), is_local_tz: false, building_tz: timezone });\n // date needs the building timezone for isAfter to work correctly\n let date = new DateTZ({ date: datestamp, is_local_tz: false, building_tz: timezone });\n // Check if we're today or a future date\n const blocks: SelectOption[] = [];\n if (showPast || date.isAfterDate(now, 'day')) {\n // later than today\n date = date.startOfValue('day');\n } else {\n // today\n date = now;\n }\n // Get the closest timeslot to the start time\n const inputDate = DateTime.fromMillis(date.ms);\n const closestDate = closestToTimeSlot(inputDate, step);\n // Date changed to the closest time\n date = new DateTZ({ date: closestDate.valueOf(), is_local_tz: false, building_tz: timezone });\n const end = date.endOfValue('day');\n // Add options for the rest of the day\n while (date.isBeforeDate(end)) {\n blocks.push({\n display: timeWithGmtOffsetFormatString(date),\n shortDisplay: date.formatDate('hh:mma'),\n value: date.formatDate('HH:mm')\n });\n date = date.addValue({ minutes: step });\n }\n return blocks;\n};\n\n\nexport const generateAvailableTimesTz = (\n fromDateTz: DateTZ,\n showPast: boolean,\n step: number = 15,\n timezone: string = new DateTZ({ date: Date.now() }).local_tz,\n all_day: boolean = false,\n extras: SelectOption[] = [],\n startFromDateTz: boolean = false\n): SelectOption[] => {\n // now needs the building timezone for isAfter to work correctly\n const now = new DateTZ({ date: Date.now(), is_local_tz: false, building_tz: timezone });\n // date needs the building timezone for isAfter to work correctly\n let dateTz = fromDateTz.clone();\n // Check if we're today or a future date\n const blocks: SelectOption[] = [];\n if (showPast || dateTz.isAfterDate(now, 'day')) {\n // later than today\n dateTz = dateTz.startOfValue('day');\n } else {\n // today/fromDateTz using the flag\n dateTz = startFromDateTz ? dateTz : now;\n }\n // Get the closest timeslot to the start time\n dateTz = closestToTimeSlotTz(dateTz, step);\n // Date changed to the closest time\n const end = dateTz.endOfValue('day');\n // Add the all day option for today\n if (all_day && dateTz.isSameDate(now, 'day')) {\n const startOfDay = dateTz.startOfValue('day');\n blocks.push({\n display: timeWithGmtOffsetFormatString(startOfDay),\n shortDisplay: startOfDay.formatDate('hh:mma'),\n value: startOfDay\n })\n }\n // Add options for the rest of the day\n while (dateTz.isBeforeDate(end)) {\n blocks.push({\n display: timeWithGmtOffsetFormatString(dateTz),\n shortDisplay: dateTz.formatDate('hh:mma'),\n value: dateTz, \n });\n \n dateTz = dateTz.addValue({ minutes: step });\n }\n\n return unique(extras.concat(blocks), 'shortDisplay');\n};\n\n/**\n * Generates list of duration options for new booking flow.\n * @param date - The start dateTime\n * @param max - The max number of minutes to go to from the date param.\n * @param min - The min number of minutes to display first time from.\n * @param step - The number of minutes to step up by for timeslots.\n */\nexport const generateDurationOptions = (\n date: DateTZ,\n max: number,\n min: number,\n step: number,\n extended: boolean): SelectOption[] => {\n const blocks: SelectOption[] = [];\n let value = min;\n while (value <= max) {\n let duration: string;\n if (extended) {\n const d = durationHumanized(value - min, true);\n duration = d ? `+${d}` : 'Current';\n } else {\n duration = durationHumanized(value, true);\n }\n\n blocks.push({\n value,\n display: `${date.addValue({ minutes: value }).formatDate(timeFormatString()).toLocaleLowerCase()} (${duration})`,\n });\n value += step;\n }\n return blocks;\n};\n\nexport const allDayOption: SelectOption = ({\n value: ALL_DAY_BOOKING_VALUE,\n display: 'All Day'\n});\n\nexport const oneWeekOption: SelectOption = ({\n value: 60 * 24 * 7, // 1 week\n display: 'One Week'\n});\n\nexport const defaultDurationGroups: DurationGroup[] = [\n {\n start: 15,\n step: 15,\n max: 60 * 24\n }\n // , {\n // start: 60,\n // step: 30,\n // max: (60 * 8) - 1 // 8 hours\n // }, {\n // start: 60 * 8,\n // step: 60,\n // max: 60 * 24 // 24 hours\n // }\n];\n\n/**\n * Maps the {@link DurationGroup} to {@link SelectOption} and appends the default all day and week options.\n */\nexport const generateDurationOptionsFromGroups = (date: DateTZ, durationGroups: DurationGroup[], extended: boolean): SelectOption[] => [\n ...(durationGroups.map(duration => generateDurationOptions(date, duration.max, duration.start, duration.step, extended)).reduce(((previousValue, currentValue) => {\n previousValue.push(...currentValue);\n return previousValue;\n }), [])),\n // allDayOption,\n // oneWeekOption\n ];\n","import { Component, OnInit } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'mck-zoom-warning',\n templateUrl: './zoom-warning.component.html',\n styleUrls: ['./zoom-warning.component.scss']\n})\nexport class ZoomWarningComponent {\n\n constructor(private dialogRef: MatDialogRef) {}\n\n onCloseClick(): void {\n this.dialogRef.close();\n }\n}\n","
\n

Excessive zoom warning

\n
\n\n
\n
\n

\n
\n
\n
\n\n
\n \n
\n
","export * from './lib/user.module';\nexport * from './lib/user.actions'\nexport * from './lib/user.types'\nexport * from './lib/user.reducer'\n","import { \n createLoadingAction\n } from '../../../loading/src/lib/loading.actions';\nimport {\n UserState,\n UserStoreState\n} from './user.types';\nimport { User } from '../../../data-common/src/lib/users/user.class';\nimport { createSelector } from '@ngrx/store';\n\nexport const loadUser = createLoadingAction('CurrentUser', 'current');\n\nexport const selectUserState = ({ user }: UserStoreState) => user;\n\nexport const selectHasUserData = createSelector(createSelector(selectUserState, loadUser.selectors.model), (state) => !!state.optionalSuccess);\n\nexport const selectCurrentUser = createSelector(selectUserState, loadUser.selectors.optionalSuccess);\n","import { Injectable } from '@angular/core';\nimport {\n Actions,\n Effect\n} from '@ngrx/effects';\nimport { createLoadingEffect } from '@mckinsey-converge/loading';\nimport { loadUser } from './user.actions';\nimport { UsersService } from '../../../data-common/src/lib/users/users.service';\n\n\n@Injectable()\nexport class UserEffects {\n\n constructor(private actions: Actions,\n private userService: UsersService) {\n }\n\n @Effect()\n loadUser = createLoadingEffect(this.actions, loadUser, () => this.userService.loadCurrentUser());\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { StoreModule } from '@ngrx/store';\nimport { userReducer } from './user.reducer';\nimport { EffectsModule } from '@ngrx/effects';\nimport { UserEffects } from './user.effects';\n\n@NgModule({\n imports: [\n CommonModule,\n StoreModule.forFeature('user', userReducer),\n EffectsModule.forFeature([UserEffects])\n ]\n})\nexport class UserModule {\n}\n","import { createReducer } from '@ngrx/store';\nimport { UserState } from './user.types';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { loadUser } from './user.actions';\n\n\nexport const initialUserState: UserState = {\n current: LoadingModel.empty()\n};\n\nexport const userReducer = createReducer(initialUserState,\n ...loadUser.ons);\n","function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = \"./$$_lazy_route_resource lazy recursive\";","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { ShellWrapperComponent } from './shell/shell.component';\n\nconst routes: Routes = [\n {\n path: '',\n component: ShellWrapperComponent,\n children: [\n {\n path: 'home',\n loadChildren: () => import('./booking/booking.module').then((m) => m.BookingModule),\n },\n { path: '**', redirectTo: 'home' },\n ],\n },\n { path: '**', redirectTo: 'home' },\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes, { useHash: true })],\n exports: [RouterModule],\n})\nexport class AppRoutingModule {}\n","import {\n Component,\n OnInit,\n ViewEncapsulation\n} from '@angular/core';\nimport { ActivatedRoute, GuardsCheckEnd, NavigationEnd, NavigationStart, Router } from '@angular/router';\nimport { BaseDirective, detectIE } from '@mckinsey-converge/base';\nimport {\n ApplicationService,\n BookingsService,\n OrganisationService,\n SpacesService\n} from '@mckinsey-converge/data-common';\nimport { environment } from 'src/environments/environment';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ZoomWarningComponent } from '@mckinsey-converge/ui';\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: [\n './styles/app.component.scss',\n './styles/custom-element.styles.scss',\n './styles/native-element.styles.scss'\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class AppComponent extends BaseDirective implements OnInit {\n constructor(\n private _app: ApplicationService,\n private _org: OrganisationService,\n private _spaces: SpacesService,\n private _bookings: BookingsService,\n private _router: Router,\n private _route: ActivatedRoute,\n private _dialog: MatDialog,\n ) {\n super();\n\n // ensure app is trusted in dev mode so we can preserve login.\n if (!environment.production) {\n localStorage.setItem('trusted', 'true');\n }\n\n\n if (detectIE() && detectIE() < 12) {\n location.href = `${location.origin}${location.pathname}assets/not-supported.html`;\n return;\n }\n }\n\n public ngOnInit(): void {\n this._router.events.subscribe((val: NavigationStart) => {\n const bookingForm = JSON.parse(localStorage.getItem('bookingForm'));\n if (val && val.navigationTrigger && val.url) {\n // Redirect everyone who doesn't have an active bookingForm back to the home page.\n const cleanHash = location?.hash.split('?')[0];\n const isLoadBookingUrl = cleanHash.indexOf('#/home/booking/') === 0;\n const isLoadCateringUrl = cleanHash.indexOf('#/home/catering/') === 0;\n if (!isLoadBookingUrl && !isLoadCateringUrl && cleanHash && ['#/home', '#/home/manage', '#/home/create', '#/home/edit'].indexOf(cleanHash) === -1 && bookingForm && !bookingForm?.activeForm) {\n location.href = `${location.origin}`;\n return;\n }\n }\n\n })\n this.adjustZoom();\n }\n\n private adjustZoom() {\n const clientWidth = document.body.clientWidth;\n if (this.isMobileOrTablet()) { // Do not show the warning if it's a mobile or tablet device\n return;\n }\n if (clientWidth < 1300) {\n this._dialog.open(ZoomWarningComponent);\n }\n }\n private isMobileOrTablet(): boolean {\n const userAgent = navigator.userAgent || navigator.vendor;\n const maxTouchPoints = navigator.maxTouchPoints || 0; // Check for touch points \n if (maxTouchPoints > 0 && window.innerWidth <= 1024) {\n return true;\n } // Check for common mobile/tablet user agent strings \n const mobileAgents = ['Android', 'webOS', 'iPhone', 'iPad', 'iPod', 'BlackBerry', 'IEMobile', 'Opera Mini'];\n for (const agent of mobileAgents) {\n if (userAgent.indexOf(agent) > -1) {\n return true;\n }\n }\n return false;\n }\n}\n","
\n \n
\n","// remove after trigger build\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { NgModule } from '@angular/core';\nimport { HttpClientModule } from '@angular/common/http';\nimport { FormsModule } from '@angular/forms';\nimport { MAT_LABEL_GLOBAL_OPTIONS } from '@angular/material/core';\n\nimport { ComposerModule } from '@placeos/composer';\n\nimport { AppRoutingModule } from './app-routing.module';\nimport { AppComponent } from './app.component';\nimport { environment } from '../environments/environment';\nimport { SharedContentModule } from './shared/shared.module';\n\nimport { ShellWrapperComponent } from './shell/shell.component';\nimport {\n ActionReducer,\n MetaReducer,\n StoreModule\n} from '@ngrx/store';\nimport { StoreDevtoolsModule } from '@ngrx/store-devtools';\nimport { BookingModule } from 'src/app/booking/booking.module';\nimport { BookingsModule } from '@mckinsey-converge/bookings';\nimport { BuildingsModule } from '@mckinsey-converge/buildings';\nimport { EffectsModule } from '@ngrx/effects';\nimport { DEFAULT_SETTINGS } from 'src/environments/settings';\nimport { provideMockSettingsObject } from '@mckinsey-converge/data-common';\nimport { OrganisationModule } from '@mckinsey-converge/organisation';\nimport { localStorageSync } from 'ngrx-store-localstorage';\nimport { UiModule } from '@mckinsey-converge/ui';\nimport { RoomsModule } from '@mckinsey-converge/rooms';\nimport { ENVIRONMENT_TOKEN } from '@mckinsey-converge/environment';\nimport { LegacyOverlaysModule } from '@mckinsey-converge/legacy-overlays';\nimport { UserModule } from '@mckinsey-converge/user';\nimport { MapModule } from 'src/app/map/map.module';\n\n/**\n * Cache some state in local storage. Not for use in production.\n */\nexport function localStorageSyncReducer(reducer: ActionReducer): ActionReducer {\n // Keys needed to fix prod reloading. MCK-1229\n let keys = [\n 'buildings',\n 'bookingForm',\n 'rooms',\n ];\n\n if (!environment.production) {\n keys = [\n 'bookings',\n 'buildings',\n 'organisation',\n 'bookingForm',\n 'rooms',\n 'user'\n ];\n }\n\n return localStorageSync({\n keys,\n rehydrate: true,\n })(reducer);\n}\n\nconst metaReducers: Array> = [localStorageSyncReducer];\n\n\n@NgModule({\n declarations: [\n AppComponent,\n ShellWrapperComponent\n ],\n imports: [\n BrowserModule,\n BrowserAnimationsModule,\n AppRoutingModule,\n HttpClientModule,\n FormsModule,\n ComposerModule,\n SharedContentModule,\n LegacyOverlaysModule,\n StoreModule.forRoot({}, { metaReducers }),\n StoreDevtoolsModule.instrument({\n maxAge: 100,\n logOnly: environment.production\n }),\n EffectsModule.forRoot(),\n BookingsModule,\n BookingModule,\n BuildingsModule,\n MapModule,\n OrganisationModule,\n RoomsModule,\n UiModule,\n UserModule\n ],\n providers: [\n { provide: MAT_LABEL_GLOBAL_OPTIONS, useValue: { float: 'nevet' } },\n provideMockSettingsObject(DEFAULT_SETTINGS),\n { provide: ENVIRONMENT_TOKEN, useValue: environment }\n ],\n bootstrap: [AppComponent]\n})\nexport class AppModule {\n}\n","import { Component, OnInit, Input, Output, EventEmitter, ViewChild } from '@angular/core';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\nimport { BookingStateService, OrganisationService } from '@mckinsey-converge/data-common';\nimport { DateNow, DateTZ, getTimezoneOffsetString, toMiddayUTC } from '@mckinsey-converge/date-tz';\n\n@Component({\n selector: 'calendar-date-widget',\n templateUrl: './calendar-date-widget.component.html',\n styleUrls: ['./calendar-date-widget.component.scss'],\n})\nexport class CalendarDateWidgetComponent extends BaseDirective implements OnInit {\n /** Currently selected date */\n @Input() public dateTz: DateTZ = DateNow(new Date());\n /** Currently building timezone */\n @Input() public timezone: string;\n /** Currently active zone */\n @Input() public zone: string;\n /** Whether to show new item button */\n @Input() public show_add_item = false;\n /** Whether to show the events for the active month */\n @Input() public show_events: boolean = false;\n /** Preserve last selected date */\n @Input() public retainSelectedDate: boolean = false;\n /** Emitter for changes selected date */\n @Output() public dateChangeTz = new EventEmitter();\n /** Emitter for add item button */\n @Output() public event = new EventEmitter();\n /** Counters of the events on given dates. Key format is `yyyy-MM-dd` */\n public event_map: { [date: string]: number };\n\n public fromDateTz = DateNow().subtractValue({ months: 6 });\n\n public get now() {\n return DateNow();\n }\n\n /** Display string for the currently selected date */\n public get tz(): string {\n return getTimezoneOffsetString(this.timezone_value);\n }\n\n public get timezone_value() {\n return localStorage.getItem('CONCIERGE.timezone') || this.timezone || this.now.building_tz;\n }\n\n public get is_today() {\n return new DateTZ({\n date: toMiddayUTC(this.dateTz).ms,\n is_local_tz: false,\n building_tz: this.timezone_value,\n }).isSameDate(\n new DateTZ({\n date: Date.now(),\n is_local_tz: false,\n building_tz: this.timezone_value,\n }),\n 'day'\n );\n }\n\n constructor(private _bookings: BookingStateService, private _org: OrganisationService) {\n super();\n }\n\n public ngOnInit(): void {\n // CONCIERGE.date: Get the localstorage date and timezone when changing pages.\n let date: any;\n if(!this.retainSelectedDate) {\n date = +localStorage.getItem('CONCIERGE.date') || this.now.ms;\n } else {\n date = this.now.ms;\n }\n\n \n /* istanbul ignore else */\n if (date && (date !== this.dateTz.ms || this.timezone_value !== this.dateTz.building_tz)) {\n // CONCIERGE.date Reapply the localstorage date and timezone when changing pages.\n this.timeout(\n 'init',\n () => {\n this.dateTz = new DateTZ({\n date,\n is_local_tz: false,\n building_tz: this.timezone_value,\n });\n this.dateChangeTz.emit(this.dateTz);\n this.updateDate();\n },\n 10\n );\n }\n this.subscription(\n 'events',\n this._bookings._noOfMeetings.subscribe((list) => {\n this.event_map = {};\n this.event_map = list[0];\n })\n );\n }\n\n public noOfCount(event) {\n // Disabling bellow until find more reliable way to call as it is been called multiple times on hover/click\n // this._bookings.getDailyMeetingCount();\n // event.stopPropogation();\n }\n\n /**\n * Change the selected date with the arrow controls\n *\n */\n public changeDate(value: number) {\n let date = new DateTZ({\n date: toMiddayUTC(this.dateTz).ms,\n is_local_tz: false,\n building_tz: this.timezone_value,\n });\n date = date.addValue({ days: value });\n this.dateTz = date;\n this.dateChangeTz.emit(this.dateTz);\n localStorage.setItem('CONCIERGE.date', `${this.dateTz.ms}`);\n localStorage.setItem('CONCIERGE.timezone', `${this.timezone_value}`);\n this.updateDate();\n }\n\n /**\n * Change the selected date with the calendar widget\n *\n */\n public applyDatePickerValue(dateInputTz: DateTZ) {\n this.dateTz = new DateTZ({\n date: toMiddayUTC(dateInputTz).ms,\n is_local_tz: false,\n building_tz: this.timezone_value,\n });\n this.dateChangeTz.emit(this.dateTz);\n localStorage.setItem('CONCIERGE.date', `${this.dateTz.ms}`);\n localStorage.setItem('CONCIERGE.timezone', `${this.timezone_value}`);\n this.updateDate();\n this.closeDatePicker();\n }\n\n public updateDate() {\n this.timeout('update_date', () => this._bookings.setDate(this.dateTz));\n }\n\n /** Reset date to the current date */\n public resetDate() {\n this.dateTz = new DateTZ({\n date: toMiddayUTC(this.now).ms,\n is_local_tz: false,\n building_tz: this.timezone_value,\n });\n this.dateChangeTz.emit(this.dateTz);\n localStorage.setItem('CONCIERGE.date', `${this.dateTz.ms}`);\n localStorage.setItem('CONCIERGE.timezone', `${this.timezone_value}`);\n this.updateDate();\n }\n\n public closeDatePicker() {\n this.updateDate();\n }\n\n /** New Item button click */\n public newItem(): void {\n this.event.emit('new_item');\n }\n}\n","
\n\n \n
\n
\n \n
\n

Today

\n

{{ dateTz.ms | date: 'mediumDate':tz }}

\n
\n \n
\n
\n \n \n
\n
\n
\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { BookingCalendarWrapperComponent } from './booking-calendar-wrapper.component';\n\n\nconst routes: Routes = [\n { path: '', component: BookingCalendarWrapperComponent },\n { path: ':level', component: BookingCalendarWrapperComponent },\n { path: '**', redirectTo: '' }\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class BookingCalendarRoutingModule {}\n","import {\n Component,\n OnInit,\n ViewEncapsulation\n} from '@angular/core';\nimport { ActivatedRoute, GuardsCheckEnd, NavigationEnd, NavigationStart, Router } from '@angular/router';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n ApplicationService,\n BookingFormData,\n BookingsService,\n Building,\n OrganisationService,\n SettingsService,\n SpacesService,\n selectActiveForm\n} from '@mckinsey-converge/data-common';\nimport { Store, select } from '@ngrx/store';\nimport { distinctUntilChanged, first } from 'rxjs/operators';\n\nimport { RoutePayload, TopBarHeaderMode } from 'src/app/components/topbar-header/topbar-header.component';\nimport { RoomResultsState } from '../room-details/room-details.component';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n@Component({\n selector: 'booking-calendar-wrapper',\n templateUrl: './booking-calendar-wrapper.html',\n styleUrls: ['./booking-calendar.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class BookingCalendarWrapperComponent extends BaseDirective implements OnInit {\n public TopBarHeaderMode = TopBarHeaderMode;\n\n public backRoute: RoutePayload = {\n route: ['/home', 'results'],\n queryParams: { display: 'list' },\n };\n orgBuildings: Building[] = [];\n \n constructor(\n private _org: OrganisationService,\n private _spaces: SpacesService,\n private _bookings: BookingsService,\n private settingService: SettingsService,\n private store: Store,\n ) {\n super();\n\n \n }\n\n public ngOnInit(): void {\n /** allow booking bypass to receive bookings for staff calendar view only */\n this.settingService.bypass_bookings = true;\n\n this.orgBuildings = this._org.buildings;\n\n this.subscription('activeForm', this.store.pipe(\n select(selectActiveForm),\n distinctUntilChanged()\n ).subscribe((next: BookingFormData | undefined) => {\n if (next && next?.dateTz) {\n localStorage.setItem('CONCIERGE.date', `${next.dateTz.ms}`);\n localStorage.setItem('CONCIERGE.timezone', `${next.timezone}`);\n const building = this._org.buildings.find(\n (_) => _.id === next.location.filter(el => el.groupChild)[0]?.meta?.building?.id\n );\n if(building) {\n this._org.building = building;\n }\n \n }\n }));\n\n this._org.initialised.pipe(first((_) => _)).subscribe(() => {\n this.orgBuildings = this._org.buildings;\n })\n\n \n }\n\n public onBackCallback() {}\n\n public ngOnDestroy(): void {\n /** disallowed booking bypass when you are moving from staff app calendar view*/\n this.settingService.bypass_bookings = false;\n }\n\n}\n","
\n\t
\n\t\t \n\t\t\n\t
\n\t\n\t\n
","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { BookingCalendarWrapperComponent } from './booking-calendar-wrapper.component';\n\nimport { StaffCalendarComponent } from './staff-calendar/staff-calendar.component';\nimport { CalendarDateWidgetComponent } from './booking-calendar-date-widget/calendar-date-widget.component';\nimport { DayViewTimelineComponent } from './staff-calendar/timeline/timeline.component';\nimport { DayViewSpaceComponent } from './staff-calendar/space/space.component';\nimport { DayViewSpaceEventComponent } from './staff-calendar/space/event/event.component';\n\n\nimport { BookingCalendarRoutingModule } from './booking-calendar-routing.module';\nimport { SharedContentModule } from 'src/app/shared/shared.module';\nimport { UiModule } from '@mckinsey-converge/ui';\n\nimport {CngMenuItemComponent} from './cng-menu-item/cng-menu-item.component';\n\nexport const bookingModuleDeclarations = [\n BookingCalendarWrapperComponent,\n StaffCalendarComponent,\n CalendarDateWidgetComponent,\n DayViewTimelineComponent,\n DayViewSpaceComponent,\n DayViewSpaceEventComponent,\n CngMenuItemComponent\n ];\n\nexport const bookingModuleImports = [\n CommonModule,FormsModule,\n ReactiveFormsModule,\n SharedContentModule,\n UiModule,\n \n \n];\n\n\n@NgModule({\n declarations: [...bookingModuleDeclarations],\n imports: [\n ...bookingModuleImports,\n BookingCalendarRoutingModule,\n // StoreModule.forFeature('bookingForm', bookingFormReducer)\n ]\n})\nexport class BookingCalendarModule {\n}","import {Component, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {NavItem} from './nav-item';\nimport { MatMenu } from '@angular/material/menu';\n\n@Component({\n selector: 'cng-menu-item',\n templateUrl: './cng-menu-item.component.html',\n styleUrls: ['./cng-menu-item.component.scss']\n})\nexport class CngMenuItemComponent implements OnInit {\n @Input() items: NavItem[];\n @Input() activeOption: string;\n @ViewChild('childMenu', {static: true}) public childMenu: any;\n\n @Output() public onChildSelect = new EventEmitter<{}>();\n \n constructor(public router: Router) {\n }\n\n ngOnInit() {\n }\n\n public notifySelection(node) {\n this.onChildSelect.emit(node);\n }\n}\n","\n \n \n 0\">\n \n \n \n \n \n \n \n \n \n ","import {\n Component,\n OnInit,\n Input,\n OnChanges,\n SimpleChanges,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { Router } from '@angular/router';\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { Space, BOOKING_STATUS, CloseDialogService, DialogIds, BookingStoreState, User } from '@mckinsey-converge/data-common';\nimport { ApplicationService } from '@mckinsey-converge/data-common';\nimport { CateringOrder } from '@mckinsey-converge/data-common';\n\nimport { Booking } from '@mckinsey-converge/data-common';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { RoomStoreState } from '@mckinsey-converge/rooms';\nimport { BuildingStoreState } from '@mckinsey-converge/buildings';\nimport { UserStoreState, selectCurrentUser } from '@mckinsey-converge/user';\nimport { Store } from '@ngrx/store';\nimport { take } from 'rxjs/operators';\n\n/** Details about the associated event overlapping with other events */\nexport interface IEventOverlap {\n /** Index of this item with the overlapping items */\n index: number;\n /** Total number of items overlapping with this one */\n total: number;\n}\nexport interface BookingDetailInfo {\n bookedBy: {\n display:boolean,\n value: string\n }\n}\nexport type RoomResultsState = BookingStoreState\n & RoomStoreState\n & BuildingStoreState\n & UserStoreState;\n \n@Component({\n selector: 'day-view-space-event',\n templateUrl: './event.component.html',\n styleUrls: ['./event.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DayViewSpaceEventComponent extends BaseDirective implements OnInit, OnChanges {\n /** Event to display */\n @Input() public booking: Booking;\n /** Date to display bookings for */\n @Input() public dateTz: DateTZ = DateNow(new Date());\n /** Space associated with the booking */\n @Input() public space: Space;\n /** Whether the item is a fixed size */\n @Input() public fixed: boolean;\n /** Overlap details for the booking */\n @Input() public overlap: IEventOverlap;\n /** Whether an action is being processed for this booking */\n @Input() public loading: boolean;\n /** Emitter for the current position of the booking within the timeline */\n @Output() public position = new EventEmitter<{ top: number; height: number }>();\n\n /** Position of the booking start time in the day */\n public top: number;\n /** Position of the booking relative to overlapping bookings */\n public left: number;\n /** Height based of the duration of the booking */\n public height: number;\n /** Size of the booking when overlapping with other bookings */\n public width: number;\n /** Offset from the booking's top that the setup time starts */\n public overflow_top: number;\n /** Offset from the booking's bottom that the breakdown time ends */\n public overflow_bottom: number;\n\n public approved: boolean;\n public declined: boolean;\n public bookingDetails: BookingDetailInfo;\n currentUser: User;\n constructor(\n private _service: ApplicationService,\n public store: Store,\n private _dialog: MatDialog,\n private _router: Router,\n private cdRef: ChangeDetectorRef,\n private closeDialogService: CloseDialogService\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.subscription('currentUser', this.store.select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n })\n );\n\n this.approved = this.booking.status === BOOKING_STATUS.approved;\n this.declined = this.booking.status === BOOKING_STATUS.declined;\n // test comment\n const {creator, organiser, booker_concierge} = this.booking;\n this.bookingDetails = {\n bookedBy: {\n display: creator && ( creator.email !== organiser.email || (creator.email === organiser.email && booker_concierge !== null && organiser.email !==booker_concierge['email']) ),\n value: (creator.email === organiser.email && booker_concierge !== null && organiser.email !==booker_concierge['email']) ? booker_concierge['name'] || booker_concierge['email'] : creator?.name || creator.email\n }\n }\n }\n\n public get local_id(): string {\n return this.booking.icaluid.substr(0, 6);\n }\n\n /** Type of booking */\n public get type(): string {\n const userEmail = this.currentUser.email;\n const { creator, organiser } = this.booking;\n if(userEmail === creator.email || userEmail === organiser.email) \n return this.booking.getType();\n else \n return 'others-booking';\n }\n\n /** Period that the booking will occur during the day */\n public get period(): string {\n // the booking time is being pass in as the local timezone version.\n return this.booking.time_period;\n }\n\n /** Number attendees expected to turn up to the booking */\n public get expected(): number {\n const expected = this.booking.expected_attendees;\n return this.space ? expected[this.space.email] || 0 : 0;\n }\n\n /** Whether the meeting has catering attached */\n public get has_catering(): boolean {\n return !!this.order;\n }\n\n public get order(): CateringOrder {\n return this.booking.catering.find((order) => order.location_id === this.space.email);\n }\n\n /** Whether booking is active */\n public get active(): boolean {\n const booking = this._service.get('CONCIERGE.day_view.viewing');\n return !booking || booking.id === this.booking.id;\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n /* istanbul ignore else */\n if (changes.booking || changes.overlap || changes.dateTz) {\n this.calculatePosition();\n this.approved = this.booking.status === BOOKING_STATUS.approved;\n this.declined = this.booking.status === BOOKING_STATUS.declined;\n }\n }\n\n /** Store the order details for viewing in another component */\n public storeOrder(order: CateringOrder) {\n const booking_details = this.booking.toApiJSON();\n localStorage.setItem('CONCIERGE.view_order', JSON.stringify(order.toJSON()));\n localStorage.setItem('CONCIERGE.view_booking', JSON.stringify(booking_details));\n localStorage.setItem('CONCIERGE.date', `${this.booking.startDateTz.ms}`);\n localStorage.setItem('CONCIERGE.timezone', `${this.booking.startDateTz.building_tz}`);\n }\n\n /**\n * View catering order for the booking\n */\n public viewOrder(order: CateringOrder) {\n /* istanbul ignore else */\n if (this.booking && this.booking.catering) {\n /* istanbul ignore else */\n if (localStorage) {\n this.storeOrder(order);\n }\n this._router.navigate(['/catering', 'orders'], {\n queryParams: { booking: this.booking.id, view: order.id },\n });\n }\n }\n\n /** Calculate the position */\n private calculatePosition() {\n /* istanbul ignore else */\n if (this.booking) {\n const overlap = this.overlap || { index: 0, total: 1 };\n const shown_date = this.dateTz.startOfValue('day');\n const date = this.booking.startDateTz.startOfValue('minute');\n const end = this.booking.endDateTz.startOfValue('minute');\n const from_previous_day = !date.isSameDate(shown_date, 'day');\n if (end.isBeforeDate(shown_date, 'day')) { // Hide booking if not on shown date\n this.top = -100;\n this.height = 1;\n return;\n }\n\n //R-- Stragest thing, but one time this was logging bookings form different timezones?\n // this.dateTz.logDateTz('calculatePosition this.dateTz')\n // this.booking.startDateTz.logDateTz('calculatePosition this.booking.startDateTz')\n\n const start = from_previous_day ? 0 : Math.abs(+date.dateDiff(shown_date, 'hours', 'hours').toFixed(3));\n const duration = Math.min(\n this.booking.duration,\n Math.abs(shown_date.dateDiff(date.addValue({ minutes: this.booking.duration }), 'minutes'))\n );\n this.top = Math.max(0, (start / 24) * 100);\n this.height = Math.min(\n 100 - this.top,\n this.fixed ? duration / 60 : (duration / 60 / 24) * 100\n );\n this.position.emit({ top: this.top, height: (duration / 60 / 24) * 100 });\n this.width = Math.min(100, 100 / overlap.total + 5);\n this.left = Math.min(100 - this.width, this.width * overlap.index - 5 * overlap.index);\n this.overflow_top =\n (this.booking.setup[this.space.email]\n ? (this.booking.setup[this.space.email] / 60) / duration\n : -0.1) * 100;\n this.overflow_bottom =\n (this.booking.breakdown[this.space.email]\n ? (this.booking.breakdown[this.space.email] / 60) / duration\n : -0.1) * 100;\n if (this.booking.all_day) {\n this.top = 0;\n this.height = 100;\n }\n }\n }\n\n public get emailURL() {\n const userEmail = this.currentUser.email;\n const userName = this.currentUser.name\n const { creator, organiser } = this.booking;\n\t\treturn `mailto:${encodeURIComponent(organiser.email)}?cc=${encodeURIComponent(userEmail)}&subject=Request%20to%20release%20room%20reservation%20-%20${encodeURIComponent(this.space.simple_name)}`;\n\t}\n\n /** Whether booking has been ended */\n public expired(): boolean {\n return ['started','in_progress','expired_yesterday', 'done'].includes(this.booking.timeBasedStatusLabel);\n }\n}\n","\n \n \n 50 ? ' low' : '')\"\n [style.z-index]=\"(overlap?.index || 0) + 2\"\n \n >\n
\n
{{ booking.all_day ? 'All Day' : period }}
\n
\n \n\n \n \n
\n
\n
\n
\n
Host: 
\n
\n {{ booking.organiser?.name || booking.organiser }}\n
\n
\n \n
Booked by: 
\n
\n {{ bookingDetails.bookedBy.value }}\n
\n
\n
\n
\n
{{ booking.title }}
\n
\n
\n
\n {{ booking.attendees ? booking.attendees.length || 'No' : 'No' }} Attendee{{\n booking.attendees?.length === 1 ? '' : 's'\n }}{{ expected ? '(' + expected + ' Expected)' : '' }}\n
\n
\n
0\">\n
\n Company: {{ booking.company.length }}\n
\n
\n
\n
Welcomed by: {{ booking.organiser?.name || booking.organiser }}
\n
\n
\n
Catered
\n
\n
\n \n \n \n \n\n","import {\n Component,\n OnChanges,\n Input,\n SimpleChanges,\n Output,\n EventEmitter,\n ViewChild,\n ElementRef,\n OnInit,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { CdkDragMove, CdkDragDrop } from '@angular/cdk/drag-drop';\nimport { MatDialog } from '@angular/material/dialog';\nimport { first } from 'rxjs/operators';\n\nimport { IEventOverlap } from './event/event.component';\nimport { BaseDirective, closestToTimeSlotTz, Identity } from '@mckinsey-converge/base';\nimport { OrganisationService, Space } from '@mckinsey-converge/data-common';\nimport { ApplicationService } from '@mckinsey-converge/data-common';\nimport { Booking } from '@mckinsey-converge/data-common';\nimport { ConfirmModalComponent } from '@mckinsey-converge/legacy-overlays';\nimport { DialogEvent, HashMap } from '@mckinsey-converge/base';\nimport { DayViewSettings } from '@mckinsey-converge/data-common';\nimport { SpacesService } from '@mckinsey-converge/data-common';\nimport { BookingsService } from '@mckinsey-converge/data-common';\n\nimport { BookingStateService } from '@mckinsey-converge/data-common';\nimport { convertTimezonedTimestampToLocalDateTz, DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n// import { BookingModalComponent } from 'src/app/bookings/booking-modal/booking-modal.component';\n\n@Component({\n selector: 'day-view-space',\n templateUrl: './space.component.html',\n styleUrls: ['./space.component.scss'],\n})\nexport class DayViewSpaceComponent extends BaseDirective implements OnInit, OnChanges {\n /** List of space dropzones connected to */\n @Input() public space_list: string[];\n /** Date to display events for */\n @Input() public dateTz: DateTZ;\n /** Space to display events for */\n @Input() public space: Space;\n /** Scroll value of the day view */\n @Input() public scroll: number;\n /** Only show events with setup and/or breakdown times */\n @Input() public overflow_only: boolean;\n /** Mapping of whether to show events with a given legend id */\n @Input() public legend: HashMap = {};\n /** Scroll value to add to drop placeholders */\n @Input('scrollTop') public scroll_top: number;\n /** Last update time of the displayed bookings */\n @Input('lastUpdate') public last_update: number;\n\n @Input() public eventMovingLoader : HashMap = {};\n /** Emitter for whether the space column is in view */\n @Output() public inView = new EventEmitter();\n /** Emitter for whether an event is being dragged */\n @Output() public dragging = new EventEmitter();\n /** Emitter for whether an event is being dropped and moving in progress */\n @Output() public moving = new EventEmitter<{}>();\n /** List of bookings for the current date and space */\n public event_list: Booking[] = [];\n /** Mapping of event IDs to overlap details */\n public overlap_details: HashMap = {};\n /** Mapping of positions of event in the day */\n public position_list: HashMap<{ top: number; height: number }> = {};\n /** Override for mapped position */\n public top: number;\n /** Client Rectangle for the container element box */\n public box: ClientRect;\n /** Whether the space list is in view */\n public in_view: boolean;\n /** ID of the booking with an action processing */\n public override_state: string;\n /** Map of bookings to whether they are loading */\n public loading: HashMap = {};\n /** Settings for day view */\n public settings: DayViewSettings = {} as any;\n\n /** Container element for the component contents */\n @ViewChild('view', { static: true }) private view: ElementRef;\n\n /** List of timeblocks to display */\n public time_blocks: Identity[] = this.generateTimeBlocks();\n\n /** Generate time blocks to display on the day view */\n private generateTimeBlocks(): Identity[] {\n const blocks: Identity[] = [];\n const date = DateNow(new Date()).startOfValue('hour');\n for (let i = 0; i < 24; i++) {\n blocks.push({\n id: date.setValue({ hour: i }).formatDate('HH:mm'),\n name: date.setValue({ hour: i }).formatDate('h:mma').toLocaleLowerCase(),\n });\n }\n return blocks;\n }\n constructor(\n private _service: ApplicationService,\n private _spaces: SpacesService,\n private _booking_state_service: BookingStateService,\n private _bookings: BookingsService,\n private _dialog: MatDialog,\n private cdr: ChangeDetectorRef,\n private _org: OrganisationService,\n ) {\n super();\n }\n\n /** Events to display for the active date */\n public events: Booking[] = []\n\n public ngOnInit(): void {\n this.events = this.filterEvents();\n this._service.initialised.pipe(first((_) => _)).subscribe(() => {\n this.settings = this._service.setting('app.day_view') || {};\n // this.subscription(\n // 'breakdown',\n // this._service\n // .listen('APP.breakdown')\n // .subscribe((state) => {\n // this.overflow_only = state;\n // this.events = [...this.filterEvents()];\n // })\n // );\n // this.subscription(\n // 'legend',\n // this._service\n // .listen('CONCIERGE.legend')\n // .subscribe((state) => (this.legend = state || {}))\n // );\n this.subscription(\n 'bookings',\n this._booking_state_service.filtered.subscribe((list) => {\n this.event_list = [...list];\n this.events = [...this.filterEvents()];\n this.cdr.detectChanges();\n })\n );\n this.checkInView();\n });\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n /* istanbul ignore else */\n if (changes.scroll) {\n this.checkInView();\n }\n if (changes.space) {\n this.event_list = [...this.event_list];\n this.timeout('in_view', () => this.checkInView(), 100);\n }\n /* istanbul ignore else */\n if (changes.last_update) {\n this.timeout('update_overlaps', () => this.calculateOverlaps(), 1000);\n }\n }\n\n //replace this with concierge space.comp filterEvents\n // private filterEvents(): Booking[] {\n // if (this.space) {\n // const bookings = this.event_list;\n // const list = bookings.filter((event) => {\n // if (this.override_state && this.override_state === event.icaluid) {\n // this.loading[event.id] = true;\n // }\n\n // const ignore = event.is_recurrent && event.recurrence_type === 'master';\n\n // return (\n // !ignore && !event.declined && // filtered declied bookings\n // event.room.email === this.space.email &&\n // (!this.overflow_only ||\n // event.setup[event.room.email] ||\n // event.breakdown[event.room.email])\n // );\n // }).map(e => new Booking({...e.toJSON()}) );\n\n // return list;\n // }\n // return [];\n // }\n\n private filterEvents(): Booking[] {\n if (!this.space) {\n return [];\n }\n \n return this.event_list.filter((event) => {\n // Mark as loading if override state matches.\n if (this.override_state && this.override_state === event.icaluid) {\n this.loading[event.id] = true;\n }\n \n const isRecurrentMaster = event.is_recurrent && event.recurrence_type === 'master';\n const isRoomEmailMatch = event.multi_rooms.some(room => room.email === this.space.email);\n \n // Determine if the event should be included based on setup or breakdown conditions.\n const isIncludedInSetupOrBreakdown = event.multi_rooms.some(room => {\n return event.setup[room.email] || event.breakdown[room.email];\n });\n \n return !isRecurrentMaster && isRoomEmailMatch && (!this.overflow_only || isIncludedInSetupOrBreakdown);\n }).map(event => new Booking({...event.toJSON()}));\n }\n\n /* istanbul ignore next */\n /**\n * Track by function for ngFor optimisation\n * @param index Index of the item\n * @param item Data associated with the item at the given index\n */\n public trackByFn(index: number, item: Booking) {\n return item.id || index;\n }\n\n /**\n * Calculate to overlap details for the booking events on the space\n */\n private calculateOverlaps() {\n const events = this.events.sort(\n (a, b) =>\n a.startDateTz.ms - b.startDateTz.ms ||\n a.duration - b.duration ||\n (a.title || '').localeCompare(b.title || '')\n );\n events.forEach((i) => (this.overlap_details[i.id] = { index: 0, total: 1 }));\n for (const bkn of events) {\n const bkn_start = bkn.startDateTz.startOfValue('minute');\n const bkn_end = bkn.endDateTz.startOfValue('minute');\n let count = 1;\n let index = 0;\n const collisions: Booking[] = [];\n for (const cmp of events) {\n /* istanbul ignore else */\n if (bkn.id !== cmp.id) {\n const cmp_start = cmp.startDateTz.startOfValue('minute');\n const cmp_end = cmp.endDateTz.startOfValue('minute');\n /* istanbul ignore else */\n if (\n bkn_start.isSameDate(cmp_start, 'minute') ||\n (bkn_start.isAfterDate(cmp_start) && bkn_start.isBeforeDate(cmp_end)) ||\n bkn_end.isSameDate(cmp_end, 'minute') ||\n (bkn_end.isAfterDate(cmp_start) && bkn_end.isBeforeDate(cmp_end))\n ) {\n count++;\n collisions.push(bkn);\n /* istanbul ignore else */\n if (\n events.findIndex((i) => i.id === bkn.id) >\n events.findIndex((i) => i.id === cmp.id)\n ) {\n index++;\n }\n }\n }\n }\n this.overlap_details[bkn.id] = { index: Math.max(0, index), total: count };\n }\n }\n\n /**\n * Check whether the space column is with the view of the\n */\n private checkInView() {\n /* istanbul ignore else */\n if (this.view && this.view.nativeElement) {\n const el = this.view.nativeElement;\n this.in_view =\n el.offsetLeft + this.scroll >= -240 &&\n el.offsetLeft + this.scroll <= window.innerWidth;\n this.inView.emit(this.in_view);\n }\n }\n\n /**\n * Initialise drag events\n */\n public initDrag() {\n this.box = this.view.nativeElement.getBoundingClientRect();\n this.dragging.emit(true);\n }\n\n /**\n * Cleanup after drag\n */\n public endDrag() {\n this.timeout('end_drag', () => (this.top = 0), 10);\n this.dragging.emit(false);\n }\n\n /**\n * Update top position of the dragged event placeholder\n * @param booking Booking being dragged\n * @param event Drag event\n */\n public updateDragTop(event: CdkDragMove) {\n /* istanbul ignore else */\n if (event.delta.y) {\n const y = event.pointerPosition.y;\n const top = (y - this.box.top - this.scroll_top) / this.box.height;\n const top_minutes = (Math.round((top * 24 * 60) / 15) * 15) / 60;\n this.top = (top_minutes / 24) * 100;\n\n }\n }\n\n\n\n\n\n public checkAvailabilityOnGivenTime(selectedBlockStart, selectedBlockEnd) {\n const runningBookings =\n this.events?.filter((bks) => {\n const startEpoch = new DateTZ({\n date: bks.start_epoch * 1000,\n is_local_tz: false,\n building_tz: bks.timezone,\n }).ms;\n const endEpoch = new DateTZ({\n date: bks.end_epoch * 1000,\n is_local_tz: false,\n building_tz: bks.timezone,\n }).ms;\n const hasValidBreakdown: boolean =\n bks.breakdown &&\n Object.values(bks.breakdown).some((value) => value !== null);\n if (selectedBlockStart.ms === endEpoch && hasValidBreakdown) {\n return true;\n } else\n return (\n (selectedBlockStart.ms >= startEpoch && selectedBlockStart.ms < endEpoch) ||\n (selectedBlockEnd.ms > startEpoch && selectedBlockEnd.ms < endEpoch)\n );\n }) || [];\n return !!runningBookings.length;\n }\n\n\t\t/** Whether booking has been ended */\n public expired(booking): boolean {\n\t\t\treturn booking.timeBasedStatusLabel === 'done';\n\t\t}\n\n\t\t\n}\n","\n\n
\n
\n
\n
\n
\n\n \n \n \n\t\t\n
\n
\n \n
\n
\n
\n \n\n\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { MatDialog } from '@angular/material/dialog';\nimport { first, take } from 'rxjs/operators';\n\nimport { BaseDirective, HashMap, Identity } from '@mckinsey-converge/base';\n// import { BookingModalComponent } from 'src/app/bookings/booking-modal/booking-modal.component';\n\nexport interface NavItem {\n\tdisplayName: string;\n\ticonName?: string;\n\troute?: string;\n\tmeta?:{}; \n\tchildren?: NavItem[];\n}\n\n\nimport {\n ApplicationService,\n BookingStateService,\n BookingStoreState,\n BuildingLevel,\n OrganisationService,\n selectBookingByIdResultsFromState,\n User,\n Booking,\n SpacesService,\n Space,\n Building,\n searchRoomsAndBookings\n} from '@mckinsey-converge/data-common';\n\n\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { UserStoreState } from '@mckinsey-converge/user';\nimport { Store } from '@ngrx/store';\nimport { BuildingStoreState } from 'libs/buildings/src';\nimport { MyBookingsStoreState } from '@mckinsey-converge/bookings';\nimport { Subscription } from 'rxjs';\nimport { DropdownOpion } from '@mckinsey-converge/ui';\n\nexport type RoomBookingStoreState = BookingStoreState & BuildingStoreState & MyBookingsStoreState & UserStoreState;\n\n@Component({\n selector: 'staff-calendar',\n templateUrl: './staff-calendar.component.html',\n styleUrls: ['./staff-calendar.component.scss']\n})\nexport class StaffCalendarComponent extends BaseDirective implements OnInit {\n /** Currently selected date, starts out with no timezone data, gets updated later */\n public dateTz: DateTZ = DateNow(new Date());\n\n /** ID of the currently selected level */\n public active_level: string = '';\n /** ID of the currently selected type */\n public active_type: string = '';\n /** List of levels available for the active building */\n public levels: BuildingLevel[] = [];\n /** List of space types available for the active building */\n public space_types: Identity[] = [];\n /** Whether to show only items with a setup and/or breakdown time */\n public only_overflow: boolean;\n \n\n\t\tprivate spaceTypesSubscription: Subscription;\n\n\t\tevent_list: Booking[] = [];\n\t\tsearchStr: any;\n\t\tfoundSearchLength: number = 0;\n\t\tsearchedCounter: any = 1;\n\t\tshowSrchWarning: boolean;\n\t\ttotalFoundItem: number = 0;\n spaces: Space[] = [];\n\t\tbuildingsInSameCity: Building[];\n\t\tbuildingMenuItems: NavItem[];\n\t\tactiveBuildingName: string;\n\t levelsDD: any = [];\n\t roomLevelDD: { ddBoxClass: string; options: any; defaultSelected: any; onChangeCallback: any; };\n \n\n\n constructor(\n private _service: ApplicationService,\n private _org: OrganisationService,\n private _dialog: MatDialog,\n private _router: Router,\n private _route: ActivatedRoute,\n private _booking_state_service: BookingStateService,\n private _spaces: SpacesService,\n private store: Store,\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this._service.title = 'Day View';\n\n\t\t\t\tthis._org.initialised.pipe(first((_) => _)).subscribe(() => {\n // Init dateTz here once the organization data is loaded.\n this.dateTz = new DateTZ({ date: this.dateTz.ms, is_local_tz: false, building_tz: this.timezone });\n this.subscription(\n 'route.params',\n this._route.paramMap.subscribe((params) => {\n /* istanbul ignore else */\n if (params.has('level') && this.active_level !== params.get('level')) {\n const level = this._org.levelWithID(params.get('level'));\n /* istanbul ignore else */\n if (level) {\n const building = this._org.buildings.find(\n (bld) => bld.id === level.building_id\n );\n /* istanbul ignore else */\n if (building) {\n this.active_level = level.id;\n this._org.building = building;\n this._booking_state_service.setZone(this.active_level || this._org.building.id);\n }\n }\n }\n })\n );\n this.subscription(\n 'building',\n this._org.listen('active_building').subscribe(() => {\n this._booking_state_service.updateRoomList();\n // Update dateTz here when the building is changed.\n\t\t\t\t\t\t\t\t\t\tthis.dateTz = new DateTZ({\n\t\t\t\t\t\t\t\t\t\t\tdate: this.dateTz.ms,\n\t\t\t\t\t\t\t\t\t\t\tis_local_tz: false,\n\t\t\t\t\t\t\t\t\t\t\tbuilding_tz: this.timezone,\n\t\t\t\t\t\t\t\t\t\t});\n const building = this._org.building;\n\n /* istanbul ignore else */\n if (!building.levels.find((lvl) => lvl.id === this.active_level)) {\n this.active_level = building?.levels[0]?.id;\n this.updateLevel();\n }\n\t\t\t\t\t\t\t\t\t\tthis.initSpace();\n\n this.levels = [{ id: '', name: 'All Levels' } as any].concat(building.levels);\n\t\t\t\t\t\t\t\t\t\tthis.levels.sort((a, b) => b.name.localeCompare(a.name, undefined, {\n\t\t\t\t\t\t\t\t\t\t\t\tnumeric: true,\n\t\t\t\t\t\t\t\t\t\t\t\tignorePunctuation: true,\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\tthis.levelsDD = [];\n\t\t\t\t\t\t\t\t\t\tthis.levels.forEach(el => {\n\t\t\t\t\t\t\t\t\t\t\tthis.levelsDD.push({\n\t\t\t\t\t\t\t\t\t\t\t\t display: el.name, value: el.id, meta: {} \n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\t\t\tthis.roomLevelDD = {\n\t\t\t\t\t\t\t\t\t\t\tddBoxClass: 'room-level',\n\t\t\t\t\t\t\t\t\t\t\toptions: this.levelsDD,\n\t\t\t\t\t\t\t\t\t\t\tdefaultSelected: this.levelsDD.filter(el => el.value === this.active_level )[0],\n\t\t\t\t\t\t\t\t\t\t\tonChangeCallback: this.onChangeActiveLevel.bind(this)\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\tthis.buildingsInSameCity = this._org.buildings.filter(\n\t\t\t\t\t\t\t\t\t\t\t(_) => _.city === building.city\n\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\tthis.generateBuildingMenu();\n\n \n })\n );\n \n });\n\n this.subscription(\n 'bookings',\n this._booking_state_service.filtered.subscribe((list) => {\n this.event_list = [...this.filterEvents(list)];\n\n })\n );\n }\n\n private filterEvents(list): Booking[] {\n\t\t\tconst bookings = list;\n\t\t\tconst filterd_booking = bookings.filter((event) => {\n\t\t\t\t\tconst ignore = event.is_recurrent && event.recurrence_type === 'master';\n\t\t\t\t\treturn ( !ignore );\n\t\t\t});\n\n\t\t\treturn filterd_booking || [];\n }\n\n public initSpace() {\n this.subscription(\n 'spaces',\n this._spaces.listen('list').subscribe((spaces) => {\n const zone_id = !this.active_level ? this._org.building.id : this.active_level;\n this.spaces = this._spaces.filter((_) => _.zones.indexOf(zone_id) >= 0 && _.bookable);\n })\n );\n }\n\n // isIncludes = (item: any, field: string, searchVaue: string) => (item && item[field] && item[field].toLowerCase().includes(searchVaue));\n \n searchBooking(value) {\n\n // Resetting warning flag\n this.showSrchWarning = false;\n\n // Converting search value to lower case for case-insensitive comparison\n const searchValue = value.toLowerCase().trim();\n \n // Combining event list and space arrays into one arrya for searchig \n const allItems = [...this.event_list, ...this.spaces];\n // Filtering the combine array to find matching room or booking\n const filteredItems = searchRoomsAndBookings(allItems, searchValue);\n \n // Updating the total number of found items in serach\n this.totalFoundItem = filteredItems.length;\n\n // Setting showSrchWarning flag if no result were found \n this.showSrchWarning = !this.totalFoundItem;\n\n // Updating lenght of found items for later use\n this.foundSearchLength = this.totalFoundItem - 1;\n\n if(this.searchStr !== value) {\n // Setting the first found as the current viewing item\n this._service.set('CONCIERGE.day_view.viewing', filteredItems[0]);\n // Resetting the search counter\n this.searchedCounter = 0;\n }\n else {\n // Handling case where seached string is the same as previou one \n // Incrementing search counter, loopoing back to 0 if it exceed the length of found items\n this.searchedCounter = ( this.searchedCounter < this.foundSearchLength ) ? this.searchedCounter + 1 : 0\n // Setting the next found items as the current viewing item\n this._service.set('CONCIERGE.day_view.viewing', filteredItems[this.searchedCounter]);\n }\n\n // Storing the current search string for future camparison\n this.searchStr = value;\n }\n\n\n public ngOnDestroy(): void {\n this._service.set('CONCIERGE.day_view.viewing', []);\n }\n\n\n \n\n // that encapsulates the common elements.\n public get timezone() {\n return this._org.building?.timezone || localStorage.getItem('CONCIERGE.timezone');\n }\n\n public updateDateTz(dateTz: DateTZ) {\n this.dateTz = dateTz;\n }\n\n public updateLevel() {\n this._booking_state_service.setZone(this.active_level || this._org.building.id);\n\t\t\t\tthis.initSpace();\n // this._router?.url?.includes('/booking-calendar') && this._router.navigate(['/home/results/booking-calendar', this.active_level], {relativeTo: this._route});\n }\n\n\t\tpublic generateBuildingMenu() {\n\n\n\t\t\tif(this.buildingsInSameCity.length) {\n\n\t\t\t\tconst menuItem: NavItem[] = [{\n\t\t\t\t\tdisplayName: this._org.building.name,\n\t\t\t\t\ticonName: 'close',\n\t\t\t\t\tchildren:[]\n\t\t\t\t}];\n\n\n\t\t\t\tthis.buildingsInSameCity.forEach(el => {\n\t\t\t\t\tconst buildingLevels: NavItem[] = [];\n\n\t\t\t\t\tel.levels.forEach(lvl => buildingLevels.push({\n\t\t\t\t\t\tdisplayName: lvl.name,\n\t\t\t\t\t\tchildren: [],\n\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\tlevel_id : lvl.id,\n\t\t\t\t\t\t\tbuilding_id: lvl.building_id\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t);\n\n\t\t\t\t\tbuildingLevels.push({ displayName: 'All Levels', children: [], meta: {\n\t\t\t\t\t\t\tlevel_id : '',\n\t\t\t\t\t\t\tbuilding_id: el.id\n\t\t\t\t\t\t} \n\t\t\t\t\t});\n\n\t\t\t\t\tmenuItem[0].children.push({\n\t\t\t\t\t\tdisplayName: el.name,\n\t\t\t\t\t\tchildren: buildingLevels,\n\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\tbuilding_id: el.id\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t});\n\n\t\t\t\tthis.buildingMenuItems = menuItem;\n\n\t\t\t}\n\n\t\t\t\n\t\t}\n\n\t\tpublic updateActiveBuilding (node) {\n\t\t\t// console.log(node);\n\t\t\tconst building = this.buildingsInSameCity.filter(bld => bld.id === node.meta.building_id)[0];\n\t\t\tthis._org.building = building;\n\t\t\tthis.activeBuildingName = building.name;\n\n\t\t\n\t\t\t\tthis.levels = [{ id: '', name: 'All Levels' } as any].concat(building.levels);\n\t\t\t\tthis.levels.sort((a, b) => b.name.localeCompare(a.name, undefined, {\n\t\t\t\t\t\tnumeric: true,\n\t\t\t\t\t\tignorePunctuation: true,\n\t\t\t\t\t})\n\t\t\t\t);\n\n\n\t\t\t\tthis.active_level = node.meta.level_id;\n\t\t\t\tthis.roomLevelDD.defaultSelected = this.levelsDD.filter(el => el.value === this.active_level )[0];\n\t\t\t\tthis.updateLevel();\n\t\t}\n\n\t\tonChangeActiveLevel(level:any) {\n\t\t\tthis.active_level = level.value;\n\t\t\t\n\t\t\tthis.updateLevel();\n\n\t\t}\n\n\t\t\n}\n\n","
\n
\n \n
\n \n
\n \n \n 0\">\n
\n {{activeBuildingName || item.displayName}}\n
\n \n
\n
\n \n
\n \n \n
\n
\n \n 1\">\n\n
\n \n \n \n
{{ totalFoundItem }}
\n \n
\n \n No search found!\n
\n
\n
\n\n \n \n \n \n
\n\n
\n \n
\n
\n
\n\n","import {\n Component,\n ElementRef,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Renderer2,\n SimpleChanges,\n ViewChild, NgZone, DoCheck, ChangeDetectionStrategy, ChangeDetectorRef\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { MatDialog } from '@angular/material/dialog';\nimport { filter, first } from 'rxjs/operators';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { Space } from '@mckinsey-converge/data-common';\nimport { ApplicationService } from '@mckinsey-converge/data-common';\nimport { Booking } from '@mckinsey-converge/data-common';\nimport { HashMap, Identity } from '@mckinsey-converge/base';\n// import { MeetingDetailsModalComponent } from 'src/app/calendar/meeting-details-modal/meeting-details-modal.component';\nimport { SpacesService } from '@mckinsey-converge/data-common';\nimport { OrganisationService } from '@mckinsey-converge/data-common';\nimport { BookingStateService } from '@mckinsey-converge/data-common';\nimport { DateNow, DateTZ, toMiddayUTC } from '@mckinsey-converge/date-tz';\nimport { isToday } from 'date-fns';\nimport { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\n\n\n\nconst UPDATE_INTERVAL = 10;\n\n@Component({\n selector: 'day-view-timeline',\n templateUrl: './timeline.component.html',\n styleUrls: ['./timeline.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DayViewTimelineComponent\n extends BaseDirective\n implements OnInit, OnChanges, OnDestroy\n{\n /** DateTZ object of the active date */\n @Input() public dateTz: DateTZ = DateNow(new Date());\n /** ID of the active level */\n @Input() public level: string;\n /** ID of the room type to filter displayed spaces by */\n @Input() public space_type: string;\n /** List of shown legend items */\n @Input() public legend: HashMap = {};\n /** Whether to show only items with a setup and/or breakdown time */\n @Input() public overflow_only: boolean;\n /** Whether space bookings are being loaded */\n @Input() public loading: boolean;\n\n @Input() undo_action;\n\n /** List of timeblocks to display */\n public time_blocks: Identity[] = this.generateTimeBlocks();\n /** Top value of the content scroll */\n public scroll_top: number = 0;\n /** Left value of the content scroll */\n public scroll_left: number = 0;\n /** Offset of the scroll value when starting a drag */\n public scroll_offset: number = 0;\n /** List of spaces to display for */\n public spaces: Space[] = [];\n /** List of spaces to display for */\n public filtered_spaces: Space[] = [];\n /** Mapping of space ids to whether they are in view */\n public in_view: { [id: string]: boolean } = {};\n /** Percent of the day that is now */\n public now: number;\n /** Currently active hour of the day */\n public active_hour: string;\n /** Mapping of spaces loading booking date */\n public loading_space: { [id: string]: boolean } = {};\n /** Booking ID to open modal for */\n public view_id: string;\n /** Last update time for the space bookings */\n public last_update: number = 0;\n /** Whether an event is being dragged */\n public is_dragging: boolean;\n /** Client rectangle for the scroll area */\n public box: ClientRect;\n /** Whether to show the holding bay */\n // public show_holding_bay: boolean = true;\n\n public space_zones: string[] = [];\n\n public is_today: boolean = this.isToday();\n public modalInitialized = false;\n\n /** Scrollable area of the day view */\n @ViewChild('scroll_area', { static: true }) private scroll_area: ElementRef;\n\n @ViewChild(CdkVirtualScrollViewport) virtualScroll: CdkVirtualScrollViewport;\n isEventMoving: boolean = false;\n bookingEl: any;\n timeoutID: any;\n column: any;\n\n /** Update scroll box when the window is resized */\n @HostListener('window:resize')\n public onResize() {\n if (this.scroll_area['elementRef'].nativeElement) {\n this.box = this.scroll_area['elementRef'].nativeElement.getBoundingClientRect();\n }\n }\n\n public get is_loading() {\n return this._booking_state_service.loading;\n }\n\n public isToday() {\n return new DateTZ({\n date: toMiddayUTC(this.dateTz).ms,\n is_local_tz: false,\n building_tz: this._org.building?.timezone || localStorage.getItem('CONCIERGE.timezone'),\n }).isSameDate(\n new DateTZ({\n date: Date.now(),\n is_local_tz: false,\n building_tz: this._org.building?.timezone || localStorage.getItem('CONCIERGE.timezone'),\n }),\n 'day'\n );\n }\n\n constructor(\n private _service: ApplicationService,\n private _spaces: SpacesService,\n private _booking_state_service: BookingStateService,\n private _org: OrganisationService,\n private _route: ActivatedRoute,\n private _renderer: Renderer2,\n private _dialog: MatDialog,\n private _zone: NgZone,\n private cdr: ChangeDetectorRef,\n ) {\n super();\n }\n\n public get holding_bay(): Space {\n const bld = this._org.building;\n /* istanbul ignore else */\n if (bld && bld.holding_bay) {\n return this._spaces.find(bld.holding_bay);\n }\n return null;\n }\n\n public ngOnInit(): void {\n this._spaces.initialised.pipe(first((_) => _)).subscribe(() => {\n this._org.initialised.pipe(first((_) => _)).subscribe(() => {\n this._booking_state_service.startPollingEveryFiveMin();\n const zone_id = !this.level ? this._org.building.id : this.level;\n this.spaces = this._spaces.filter((_) => _.zones.indexOf(zone_id) >= 0);\n this.init();\n this.initSpaces();\n // Update time\n this.updateTime();\n this._zone.runOutsideAngular(() => {\n this.interval('time', () => this.updateTime(), 15 * 1000);\n });\n // R--- return to see if the booking service needs updating\n this.subscription(\n 'dateTz',\n this._booking_state_service.dateTz.subscribe((dateTz) => {\n // const dateTz = new DateTZ({date});\n this.dateTz = dateTz;\n })\n );\n });\n });\n this.is_today = this.isToday();\n\n this.subscription(\n 'spaces',\n this._spaces.listen('list').subscribe((spaces) => {\n const zone_id = !this.level ? this._org.building.id : this.level;\n this.spaces = this._spaces.filter((_) => _.zones.indexOf(zone_id) >= 0);\n this.init();\n this.initSpaces();\n // Update time\n this.updateTime();\n })\n );\n\n }\n\n ngAfterViewInit() {\n const d2 = this._renderer.createElement('div');\n this._renderer.addClass(d2, 'adjustable-room-block-2');\n this.virtualScroll.elementRef && this._renderer.appendChild(this.virtualScroll.elementRef.nativeElement, d2);\n }\n\n\n public ngOnChanges(changes: SimpleChanges): void {\n /* istanbul ignore else */\n if (changes.level && this._org.building) {\n const zone_id = !this.level ? this._org.building.id : this.level;\n this.spaces = this._spaces.filter((_) => _.zones.indexOf(zone_id) >= 0);\n this.updateTime();\n this.initSpaces();\n }\n if (changes.space_type) {\n this.initSpaces();\n }\n }\n\n public ngOnDestroy() {\n if (this._booking_state_service?.stopPolling) this._booking_state_service?.stopPolling();\n }\n\n public init() {\n this._service.title = 'Day View';\n this.subscription(\n 'viewing',\n this._service\n .listen('CONCIERGE.day_view.viewing')\n .subscribe((event) => this.scrollIntoView(event) )\n );\n // Subscribe to route query changes\n this.subscription(\n 'route.query',\n this._route.queryParamMap.subscribe((params) => {\n /* istanbul ignore else */\n if (params.has('view') || localStorage.getItem('CONCIERGE.view_booking')) {\n this.view_id = params.get('view');\n const details = localStorage.getItem('CONCIERGE.view_booking');\n const spaceJson = localStorage.getItem('CONCIERGE.view_booking_space');\n /* istanbul ignore else */\n if (details) {\n const space: Space | undefined = spaceJson\n ? new Space(JSON.parse(spaceJson))\n : undefined;\n const booking = new Booking({ ...JSON.parse(details), room: space });\n if(!this.modalInitialized) {\n this.modalInitialized = true;\n // this.view(booking, space);\n localStorage.removeItem('CONCIERGE.view_booking');\n localStorage.removeItem('CONCIERGE.view_booking_space');\n }\n }\n }\n })\n );\n \n /* istanbul ignore else */\n if (this.scroll_area['elementRef'].nativeElement) {\n this.box = this.scroll_area['elementRef'].nativeElement.getBoundingClientRect();\n }\n }\n\n /**\n * Update scroll parameters to match the change in the scroll position\n * @param event\n */\n public updateScroll(event) {\n this.scroll_top = event.target.scrollTop;\n this.scroll_left = event.target.scrollLeft;\n }\n\n\n\n /** Generate time blocks to display on the day view */\n private generateTimeBlocks(): Identity[] {\n const blocks: Identity[] = [];\n const date = DateNow(new Date()).startOfValue('hour');\n for (let i = 0; i < 24; i++) {\n blocks.push({\n id: date.setValue({ hour: i }).formatDate('HH:mm'),\n name: date.setValue({ hour: i }).formatDate('h:mma').toLocaleLowerCase(),\n });\n }\n return blocks;\n }\n\n /** Update the now line position */\n private updateTime() {\n const now = new DateTZ({\n date: Date.now(),\n is_local_tz: false,\n building_tz: this._org.building?.timezone || localStorage.getItem('CONCIERGE.timezone'),\n });\n this.now = (now.dateHour + now.minutes / 60) / 24;\n this.active_hour = now.startOfValue('hour').formatDate('HH:mm');\n this.is_today = this.isToday();\n this.cdr.detectChanges();\n }\n\n\n /**\n * Scroll booking to the event on the day view\n * @param booking Booking to scroll into view\n */\n private scrollIntoView(searchData: Booking | Space ) {\n if (searchData && this.scroll_area && this.scroll_area['elementRef'].nativeElement) {\n this.column && this._renderer.removeClass(this.column, 'wild');\n\n /** Select space column element using space id in search data - \n * space.id if seach data is space object or data.space.id if search data is booking object\n * \n */\n const spaceId = searchData['space'] ? searchData['space'].id : searchData.id;\n const element: HTMLDivElement = this.scroll_area['elementRef']\n .nativeElement.querySelector(`#space-col-${spaceId}`);\n\n\n this.column = element;\n\n this.bookingEl && this._renderer.removeClass(this.bookingEl, 'wild');\n if(searchData['space'] && searchData['space'].id) \n this.bookingEl = element?.querySelector(`#${searchData.id}`)?.querySelector('.event-container');\n\n\n /* istanbul ignore else */\n if (element) {\n this.timeoutID && clearTimeout(this.timeoutID);\n this._renderer.addClass(element, 'wild');\n this.bookingEl && this._renderer.addClass(this.bookingEl, 'wild');\n const scroll_box = this.scroll_area['elementRef'].nativeElement.getBoundingClientRect();\n\n let date_percent;\n if(searchData['space'] && searchData['space'].id) {\n date_percent = Math.abs(\n searchData['startDateTz'].dateDiff(\n searchData['startDateTz'].startOfValue('day'),\n 'minutes'\n )\n ) / (24 * 60);\n }\n \n\n const box = element.getBoundingClientRect();\n const left = box.left - scroll_box.left + this.scroll_area['elementRef'].nativeElement.scrollLeft - 500;\n const top = (searchData['space'] && searchData['space'].id) ? \n this.scroll_area['elementRef'].nativeElement.scrollHeight * date_percent - 10 :\n 0\n\n\n this.scroll_area['elementRef'].nativeElement.scrollTo({\n left: left,\n top: top,\n behavior: 'smooth',\n });\n\n this.timeoutID = setTimeout(()=> {\n element && this._renderer.removeClass(element, 'wild');\n this.bookingEl && this._renderer.removeClass(this.bookingEl, 'wild');\n }, 3000);\n }\n }\n }\n\n /**\n * Setup an auto-scroll for the display view\n * @param x\n * @param y\n */\n public scrollView(x: number, y: number) {\n /* istanbul ignore else */\n if (x || y) {\n this.scroll_area['elementRef'].nativeElement.scrollTop += y || 0;\n this.scroll_area['elementRef'].nativeElement.scrollLeft += x || 0;\n /* istanbul ignore else */\n if (\n (y &&\n this.scroll_area['elementRef'].nativeElement.scrollTop >=\n this.scroll_area['elementRef'].nativeElement.scrollHeight) ||\n (x &&\n this.scroll_area['elementRef'].nativeElement.scrollLeft >=\n this.scroll_area['elementRef'].nativeElement.scrollWidth) ||\n (y && this.scroll_area['elementRef'].nativeElement.scrollTop <= 0) ||\n (x && this.scroll_area['elementRef'].nativeElement.scrollLeft <= 0)\n ) {\n this.clearInterval('auto_scroll');\n }\n // this.updateScroll({ target: this.scroll_area['elementRef'].nativeElement });\n }\n }\n\n public clearSelected() {\n this._service.set('CONCIERGE.day_view.viewing', null);\n }\n\n public cancelScroll() {\n this.clearInterval('auto_scroll');\n }\n\n /** */\n\n // public dragChange(is_dragging: boolean) {\n // if (is_dragging) {\n // this.scroll_offset = this.scroll_area['elementRef'].nativeElement.scrollTop; \n // this.subscription(\n // 'listen_move',\n // this._renderer.listen('window', 'mousemove', (event: MouseEvent) => {\n // const position = { x: event.clientX, y: event.clientY };\n // const y = position.y > this.box.bottom - this.box.height * 0.05\n // ? 1\n // : position.y < this.box.top + this.box.height * 0.05\n // ? -1\n // : 0;\n // const x = position.x > this.box.right - this.box.width * 0.05\n // ? 1\n // : position.x < this.box.left + this.box.height * 0.05\n // ? -1\n // : 0;\n // this.scrollView(x * 5, y * 5);\n // this._zone.runOutsideAngular(() => {\n // this.interval('auto_scroll', () => {\n // return this.scrollView(x * 40, y * 40) \n // }, 15);\n // });\n // this.cdr.detectChanges();\n // })\n // );\n // this.clearInterval('bookings');\n // } else {\n // this.cancelScroll();\n // this.unsub('listen_move');\n // }\n // }\n\n private initSpaces() {\n const holding_bay = this.holding_bay;\n this.filtered_spaces = this.spaces.filter(\n (i) =>\n (!this.space_type || i.zones.indexOf(this.space_type) >= 0) &&\n (!holding_bay || i.id !== holding_bay.id) &&\n i.bookable\n );\n this.filtered_spaces.sort((a, b) => a.local_name.localeCompare(b.local_name));\n this.space_zones = this.spaces.map((i) => `space-col-${i.id}`);\n }\n\n\n\n\t// public onEventDragging(isDragging: boolean): void {\n\t// \t\t// Check if dragging is initiated\n\t// \t\tif (isDragging) {\n\t// \t\t\t// Store the current scroll position\n\t// \t\t\tthis.scroll_offset = this.scroll_area['elementRef'].nativeElement.scrollTop;\n\t// \t\t\t// Subscribe to mouse move events\n\t// \t\t\tthis.subscribeToMouseMove();\n\t// \t\t\t// Clear existing interval for bookings\n\t// \t\t\tthis.clearInterval('bookings');\n\t// \t\t} else {\n\t// \t\t\t// Cancel scroll operation\n\t// \t\t\tthis.cancelScroll();\n\t// \t\t\t// Unsubscribe from mouse move events\n\t// \t\t\tthis.unsubscribeFromMouseMove();\n\t// \t\t}\n\t// }\n\n\t// Subscribe to mouse move events and handle scroll logic\n\t// private subscribeToMouseMove(): void {\n\t// \tthis.subscription(\n\t// \t\t'listen_move',\n\t// \t\tthis._renderer.listen('window', 'mousemove', (event: MouseEvent) => {\n\t// \t\t\t// Get mouse position\n\t// \t\t\tconst position = { x: event.clientX, y: event.clientY };\n\t// \t\t\t// Calculate scroll direction based on mouse position\n\t// \t\t\tconst [x, y] = this.calculateScrollDirection(position);\n\t// \t\t\t// Scroll the view based on calculated direction\n\t// \t\t\tthis.scrollView(x * 5, y * 5);\n\t// \t\t\t// Run auto-scroll logic\n\t// \t\t\tthis.runAutoScroll(x, y);\n\t// \t\t\t// Detect changes to update the view\n\t// \t\t\tthis.cdr.detectChanges();\n\t// \t\t})\n\t// \t);\n\t// }\n\n\t// Calculate scroll direction based on mouse position\n\t// private calculateScrollDirection(position: { x: number, y: number }): [number, number] {\n\t// \tconst tolerance = 0.05;\n\t// \tconst x = this.calculateDirection(position.x, this.box.left, this.box.right, tolerance);\n\t// \tconst y = this.calculateDirection(position.y, this.box.top, this.box.bottom, tolerance);\n\t// \treturn [x, y];\n\t// }\n\n\t// Calculate direction based on mouse position and element boundaries\n\t// private calculateDirection(pos: number, min: number, max: number, tolerance: number): number {\n\t// \tif (pos > max - this.box.width * tolerance) {\n\t// \t\t\treturn 1; // Scroll right\n\t// \t} else if (pos < min + this.box.width * tolerance) {\n\t// \t\t\treturn -1; // Scroll left\n\t// \t} else {\n\t// \t\t\treturn 0; // Do not scroll\n\t// \t}\n\t// }\n\n\t// Run auto-scroll logic\n\t// private runAutoScroll(x: number, y: number): void {\n\t// \tthis._zone.runOutsideAngular(() => {\n\t// \t\t\tthis.interval('auto_scroll', () => this.scrollView(x * 10, y * 10), 10);\n\t// \t});\n\t// }\n\n\t// Unsubscribe from mouse move events\n\t// private unsubscribeFromMouseMove(): void {\n\t// \tthis.unsub('listen_move');\n\t// }\n\n // public movingEvent(booking) {\n // this.isEventMoving = booking.isMoving;\n // this.loading_space[booking.movingId] = booking.isMoving;\n \n // }\n\n}\n\n","
\n\t
\n\t\t\n\t
\n\n\t
\n\t\t
\n\t\t\t\n\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
Time
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
{{ timeslot.name }}
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
{{ room.local_name }}
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tCapacity - {{ room.capacity || '0' }}\n\t\t\t\t\t\t\t{{ room.capacity === 1 ? 'person' : 'people' }}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\n\t\t
\n\n\t\t
\n\t\t\t
\n\t\t
\n
\n
\n
\n\t
\n\t\t
Moving meeting
\n\t\t
\n\t\t\t\n\t\t
\n\t
\n
\n","import {\n Component,\n Input,\n Output,\n EventEmitter\n} from '@angular/core';\nimport {\n Router\n} from '@angular/router';\nimport {\n BaseDirective, shorterBuildingDateFormatString,\n} from '@mckinsey-converge/base';\nimport {\n generateFeedbackUrl,\n Urls\n} from '../../utilities/urls';\nimport {\n Store\n} from '@ngrx/store';\nimport {\n Booking,\n Building,\n BookingStoreState,\n clearBookingFormData,\n cateringAllowed,\n openBookingSurvey,\n roomHasCateringHours\n} from '@mckinsey-converge/data-common';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\n\nexport enum TopBarHeaderMode {\n Light = 'light',\n Dark = 'dark',\n}\n\nexport interface statusObject {\n text: string,\n title: string,\n image: string,\n}\n\n@Component({\n selector: 'booking-confirmation',\n template: `\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n

{{ data?.isEditSeries || (booking.is_recurrent && booking.recurrence_type === 'master') ? 'Recurring Series' : 'Booking' }} {{data?.status.title}}

\n
\n \n \n \n
\n
\n
\n

{{ booking.title }}

\n

Room is no longer available for your chosen date and time

\n
\n \n
\n
Status: {{data?.status.text}}
\n
Date: {{data?.dateString}}
\n
Time: {{data?.timeString}}
\n
{{data?.typeString}} meeting ({{data?.durationString}})
\n
\n
\n
\n \n {{booking?.recurrence_period === 'list' ? 'Specific dates' : booking?.recurrence_period | titlecase}}\n \n - Conflicts({{data?.isConflictWithOccurences()?.total_Conflicts}}) \n
\n
Start date: {{data?.dateString}}
\n
End date: {{data?.endDateString}}
\n
Time: {{data?.timeString}}
\n
{{data?.type}} meeting ({{data?.durationString}})
\n
\n\n
\n \n
\n
\n
\n
\n
\n \n \n \n
\n
\n
\n
\n \n
\n Address: {{building.address}},\n {{building.city}}\n
\n
Room: {{booking.space.local_name}}
\n
Room Capacity: {{booking.space.capacity}}
\n
\n \n
\n \n \n \n \n
\n
\n
\n
\n \n
\n \n

{{ data?.status.text }}

\n
\n
\n \n
\n \n

\n \n

\n
\n
\n
\n
\n
\n
\n
\n
\n \n

{{booking.organiser.name}}

\n

{{attendees}}

\n

{{company}}

\n

{{charge_code}}

\n

{{headcount}}

\n

{{notes}}

\n

\n
\n \n

\n

\n

\n

\n

\n

\n \n \n \n

\n
\n
\n
\n
\n

Catering is available for this meeting room

\n Add catering\n\n \n
\n
\n
\n
\n \n

\n

\n

 

\n \n
\n\n
\n
\n
\n

Ooops - we're sorry!

\n

Unfortunately your selected room has been booked by another user

\n

Please try searching for another room.

\n
\n
\n
\n
\n
\n \n
\n \n
\n
\n \n
\n \n
\n
\n
\n
\n
\n `,\n styleUrls: ['./booking-confirmation.component.scss']\n})\nexport class BookingConfirmationComponent extends BaseDirective {\n /** The theme to use **/\n @Input() public mode: TopBarHeaderMode = TopBarHeaderMode.Light;\n\n @Input() public confirmed: boolean;\n @Input() public loading: boolean;\n\n @Input() public modal: boolean;\n /**\n * placeIntoModal: Input decorator indecate as a flag to adapt component design into a dialog modal \n * (by hiding header and adjusting height so that fit into a modal)\n */\n @Input() public placeIntoModal: boolean = false;\n\t\t@Input('dataForConfirmation') public data: any; // consolidated data using for confirmation template\n\n /** Emitter for close events */\n @Output() public callback = new EventEmitter();\n\n public currentPage: string;\n\n\t\tpublic get booking(): Booking {\n\t\t\treturn this.data?.booking\n\t\t};\n\n\n public get building(): Building {\n return this.data?.booking.room.building;\n };\n\n public get disableCateringButton(): boolean {\n return !cateringAllowed(this.data?.booking, this.building);\n }\n\n public get charge_code() {\n return (this.data?.booking.equipment_codes || {})[\n this.data?.booking.room.email\n ] || 'No Charge Code'\n }\n\n public get headcount() {\n return (this.data?.booking.expected_attendees || {})[\n this.data?.booking.room.email\n ] || 0\n }\n\n public get attendees() {\n const a = Array.isArray(this.data?.booking.attendees) ? this.data?.booking.attendees.map(u => u?.name ? u.name : '') : [];\n return a.join(', ');\n }\n\n public get company() {\n return this.data?.booking.company.join(', ');\n }\n\n public get notes() {\n const note = this.data?.booking.notes.find(n => n.type === 'equipment');\n return note ? note.message : '';\n }\n\n public get feedback() {\n return generateFeedbackUrl(this.currentPage);\n }\n\n public get roomHasCatering() {\n return roomHasCateringHours(this.building, this.data?.booking?.space) && cateringAllowed(this.data?.booking, this.building);\n }\n\n public listItems(order) {\n return order.items.map(i => `(${i.amount}) ${i.name}`).join(', ');\n }\n\n public formatDeliveryTime(order) {\n return this.data?.booking.startDateTz.addValue({ minutes: order?.delivery_time }).formatDate(\"h:mma\");\n }\n\n constructor(\n private store: Store,\n private _router: Router,\n ) {\n super();\n }\n\n public getStatusColor (statusText: string): string {\n switch (statusText) {\n case 'confirmed':\n return 'approved'\n case 'unavailable':\n return 'cancelled'\n default:\n return statusText;\n }\n }\n\n public hasData() {\n return (this.confirmed && !this.loading) || this.isUnavailable();\n }\n\n public goToHelp() {\n window.open(Urls.Help);\n }\n\n public async returnHome() {\n \n if (this.modal || this.placeIntoModal) {\n this.confirmed = false;\n this.loading = false;\n this.callback.emit();\n } else {\n if(!this.isUnavailable()){\n this.store.dispatch(openBookingSurvey());\n // Clear everything out\n this.store.dispatch(clearBookingFormData());\n this._router.navigate(['/', 'home']);\n } else {\n await this._router.navigate(['/home', 'results'], { queryParams: { display: 'list' }});\n }\n }\n }\n\n public async startCatering() {\n this.store.dispatch(clearBookingFormData());\n this.confirmed = false;\n this.loading = false;\n this.callback.emit();\n await this._router.navigate(['/', 'home', 'catering', this.data?.booking.id]);\n }\n\n public isUnavailable() {\n return this.data?.status.text.toLowerCase() === 'unavailable'\n }\n\n getTooltipText() { \n return this.data.booking.occurrence_details?.filter(ocurrence => ocurrence.id !== this.data.booking.id).map((item)=>{\n let date = item.start_epoch * 1000;\n let specificDates = new DateTZ({date, is_local_tz: false, building_tz: this.data.booking.timezone});\n return shorterBuildingDateFormatString(specificDates).slice(3);\n })\n }\n\n \n}\n","import {\n Component,\n OnInit,\n} from '@angular/core';\nimport {\n select,\n} from '@ngrx/store';\nimport {\n Booking,\n BookingFormData,\n selectActiveForm,\n checkCollisions,\n getStatusErrorMessage,\n clearBookingFormData,\n BOOKING_STATUS,\n\t\tSpace,\n\t\tgetLastDateFromList\n} from '@mckinsey-converge/data-common';\nimport {\n distinctUntilChanged,\n} from 'rxjs/operators';\nimport { BookingFormBaseComponent } from './booking-form-base.component';\nimport { ConflictsModalComponent, ConflictsModalComponentData } from '@mckinsey-converge/ui';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DialogEvent, shorterLocalDateFormatString } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'app-booking-create',\n templateUrl: './booking-form-base.component.html',\n styleUrls: ['./booking-create.component.scss']\n})\nexport class BookingCreateComponent extends BookingFormBaseComponent implements OnInit {\n\n\n public ngOnInit(): void {\n super.ngOnInit();\n this.subscription('activeForm', this.store.pipe(\n select(selectActiveForm),\n distinctUntilChanged()\n ).subscribe((next: BookingFormData | undefined) => {\n if (next && next?.dateTz && next?.selectedRoom?.space) {\n this.data.next(next);\n this.booking = this.bookingFormToBooking(next);\n }\n }));\n\n\t\t\t\t// in the parent component\n\t\t\t\tthis.updateConfimatinModal();\n }\n\n\n /**\n * Save booking changes\n */\n public saveChanges() {\n this.loading = true;\n this.booking = this.bookingFormToBooking(this.data.value);\n // const booking_form_data = this.data.value;\n this.booking.status = BOOKING_STATUS.approved;\n checkCollisions(\n this._spaces,\n this.booking\n ).then((bookable: boolean) => {\n if (!bookable) {\n // Refactored for\n //\thttps://acaprojects.atlassian.net/browse/MCK-1498\n //\thttps://mckinsey.atlassian.net/browse/CNG-97\n // API is retuning bookings ouside of requested time range\n // TODO check booking date and times for conflict manually\n this.booking.status = BOOKING_STATUS.unavailable;\n return;\n }\n\n // this.booking['opt_out'] = false;\n this._bookings_service.save(this.booking).then(\n (bkn) => {\n\t\t\t\t\t\t\t\t\t// update template properties and booking\n\t\t\t\t\t\t\t\t\tthis.handleBookingSuccessResponse(bkn);\n },\n (err) => {\n if (err.status === 409) {\n this.handleBookingErrorMessage();\n } else {\n\t\t\t\t\t\t\t\t\t\t\tthis.loading = false;\n \tthis.confirmed = false;\n this.displayWarningBanner(getStatusErrorMessage(err.status));\n }\n }\n );\n },(err) => {\n this.timeout('error', () => {\n\t\t\t\t\t\t\t\t\tthis.handleBookingErrorMessage();\n }, 500);\n }\n );\n }\n\n}\n","
\n
\n \n

{{ warningMessage }}

\n \n
\n
\n \n \n \n \n
\n
\n
\n
\n
\n
\n

Book {{booking?.space?.local_name}}

\n
\n
\n \n
\n
\n
\n
\n

{{ data?.value?.is_recurrent ? 'Recurring' : 'Room' }} Booking Details

\n
\n
Date: {{dateString}}
\n
Time: {{timeString}}
\n
{{type}} meeting ({{durationString}})
\n
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
{{data?.value?.recurrence_period === 'list' ? 'Specific dates' : data?.value?.recurrence_period | titlecase}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t - Conflicts({{isConflictWithOccurences()?.total_Conflicts}}) \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
Start date: {{dateString}}
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
End date: {{endDateString}}
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
Time: {{timeString}}
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
{{type}} meeting ({{durationString}})
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\n
\n
Address: {{building?.address}},\n {{building?.city}}
\n
Room: {{booking?.space?.local_name}}
\n
Capacity: {{booking?.space?.capacity}}
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n
\n","import {Component,OnInit,Input,Output,EventEmitter,\n } from '@angular/core';\n import {\n Booking,\n selectActiveForm,\n BookingFormData,\n\t\tBookingStoreState,\n } from '@mckinsey-converge/data-common';\n import {\n\t\tStore,\n select,\n } from '@ngrx/store';\n import {\n distinctUntilChanged, take,\n } from 'rxjs/operators';\n import { BaseDirective } from '@mckinsey-converge/base';\n\timport {\n\t\tRoomStoreState,\n\t} from '@mckinsey-converge/rooms';\n\timport {\n\t\tBuildingStoreState\n\t} from '@mckinsey-converge/buildings';\n\timport { UserStoreState } from '@mckinsey-converge/user';\n\n\texport type RoomResultsState = BookingStoreState\n & RoomStoreState\n & BuildingStoreState\n & UserStoreState;\n\n\n @Component({\n selector: 'app-booking-edit-wrapper',\n template: `
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
`,\n styleUrls: ['./booking-create.component.scss']\n })\n export class BookingEditWrapperComponent extends BaseDirective implements OnInit {\n\n\t\tpublic booking: Booking;\n\t\tpublic loading: boolean = true;\n\n constructor(\n public store: Store,\n ) {\n super();\n }\n\n public ngOnInit(): void {\n\n this.subscription('activeForm',\n this.store.pipe(take(1),\n\t\t\t\t\tselect(selectActiveForm),\n \tdistinctUntilChanged()\n\t\t\t\t\t).subscribe((next: BookingFormData | undefined) => {\n\t\t\t\t\t\tthis.loading = false;\n \t\tif (next && next?.dateTz) {\n \t\tthis.booking = new Booking(next);\n \t\t}\n }));\n\n }\n\n }\n","import {\n Component,\n OnInit,\n Input,\n Output,\n EventEmitter,\n} from '@angular/core';\nimport {\n Booking,\n selectActiveForm,\n storeBookingFormData,\n BookingFormData,\n checkCollisions,\n getStatusErrorMessage,\n clearBookingFormData,\n BOOKING_STATUS,\n getLastDateFromList,\n Space,\n SeriesAction\n} from '@mckinsey-converge/data-common';\nimport {\n select,\n} from '@ngrx/store';\nimport {\n distinctUntilChanged,\n} from 'rxjs/operators';\nimport { BookingFormBaseComponent } from './booking-form-base.component';\nimport * as cloneDeep from 'lodash/cloneDeep';\n\n@Component({\n selector: 'app-booking-edit',\n templateUrl: './booking-form-base.component.html',\n styleUrls: ['./booking-create.component.scss']\n})\nexport class BookingEditComponent extends BookingFormBaseComponent implements OnInit {\n @Input() public booking: Booking;\n @Output() public updateCallback = new EventEmitter();\n /**\n * placeIntoModal: Input decorator indecate as a flag to adapt component design into a dialog modal \n * (by hiding header and adjusting height so that fit into a modal)\n */\n @Input() public placeIntoModal: boolean = false;\n public roomEmail: string;\n\n public ngOnInit(): void {\n super.ngOnInit();\n\n this.subscription('activeForm', this.store.pipe(\n select(selectActiveForm),\n distinctUntilChanged()\n ).subscribe((next: BookingFormData | undefined) => {\n if (next && next?.dateTz && next?.selectedRoom?.space) {\n this.data.next(next);\n this.isEditSeries = next.action === SeriesAction.EDIT;\n }\n }));\n\n this.modal = !this.isEditSeries && !this.placeIntoModal;\n this.roomEmail = this.booking.space.email;\n const attendees = (this.data?.value?.attendees?.length && this.data?.value?.attendees[0]?.meta)\n ? this.data.value.attendees\n : this.booking.attendees.filter(bk => bk.name !== '' && bk.email !=='').map(u => {\n return {\n value: u.email,\n display: u.name,\n groupId: 'one',\n groupHeader: true,\n shortDisplay: u.name,\n meta: { external: u.external, user: u, color: u.email.toLowerCase().includes('mckinsey.') ? 'internal' : 'external' },\n }\n });\n\n const company = (this.data?.value?.company?.length && this.data?.value?.company[0]?.groupId)\n ? this.data?.value?.company\n : this.booking.company.map(u => {\n return {\n value: u,\n display: u,\n groupId: 'two',\n groupHeader: true,\n shortDisplay: u,\n }\n });\n\n const head_count = this.booking?.expected_attendees[this.roomEmail] ? this.booking?.expected_attendees[this.roomEmail] : 0;\n const code = this.booking?.equipment_codes[this.roomEmail] ? this.booking?.equipment_codes[this.roomEmail] : '';\n const organiser = (this.data?.value?.organiser && this.data?.value?.organiser?.meta)\n ? this.data?.value?.organiser\n : {\n display: this.booking.organiser.name,\n value: this.booking.organiser.email,\n meta: { user: this.booking.organiser }\n };\n const notes = Array.isArray(this.booking.notes) ? this.booking.notes.find(n => n.type === 'equipment')?.message : this.booking.notes;\n const selectedRoom = this.data?.value?.selectedRoom\n ?\n this.data?.value?.selectedRoom\n :\n {\n space: this.booking.room, // this.building,\n };\n\n const payload = {\n ...this.booking.toJSON(),\n attendees,\n code,\n head_count,\n notes,\n organiser,\n selectedRoom,\n company\n };\n this.store.dispatch(storeBookingFormData({\n payload: payload\n }));\n \n if(this.isEditSeries) {\n this.booking = this.bookingFormToBooking(this.data.value, this.isEditSeries); \n }\n // in parent component\n this.updateConfimatinModal();\n\n\n }\n\n public updateNotes(booking, note, room) {\n const notes = [];\n const cateringNotes = this._cateringNotesService.getNotes();\n const isEquipmentNote = booking.notes.find(note => note.type === 'equipment');\n const isCateringNote = booking.notes.find(note => note.type === 'catering');\n\n if (cateringNotes.length && !isCateringNote) {\n notes.push(cateringNotes[0]);\n }\n\n if (isEquipmentNote) {\n booking.notes.map(item => {\n const message = cateringNotes.length && item.type === 'catering' ? cateringNotes[0].message : item.message;\n\n notes.push({\n ...item,\n author : this.currentUser.name,\n message : item.type === 'equipment' ? note : message,\n space: item.type === 'equipment' ? room : item.space,\n date: item.type === 'equipment' ? new Date().getTime() : item.date\n })\n });\n } else {\n if (note) {\n notes.push({\n author: this.currentUser.name,\n type: \"equipment\",\n message: note,\n space: room,\n date: new Date().getTime()\n })\n }\n }\n return notes;\n }\n\n /**\n * Save booking changes\n */\n public saveChanges() {\n const booking_form_data = this.data.value;\n\n if(!this.isEditSeries) {\n\t\t\t // clone booking to allow editing\n const booking = cloneDeep(this.booking);\n \n\t\t\tbooking.title = booking_form_data.title;\n\t\t\tbooking.attendees = this.formToAttendees(booking_form_data.attendees);\n\t\t\tbooking.company = this.formToCompany(booking_form_data.company);\n\t\t\tbooking.notes = this.updateNotes(this.booking, booking_form_data.notes, this.roomEmail);;\n\t\t\tbooking.equipment_codes = { [this.roomEmail]: booking_form_data.code };\n\t\t\tbooking.expected_attendees = { [this.roomEmail]: booking_form_data.head_count };\n\t\t\tbooking.organiser = booking_form_data.organiser?.meta.user;\n\t\t\tconst has_note_buffer = booking_form_data.notes && booking_form_data.notes?.length ? {[booking_form_data.selectedRoom?.space?.email || booking?.space?.email]: 900} : null; // 900 seconds = 15 min\n\t\t\t// Removing the note does not remove the existing setup / breakdown\n\t\t\tif (has_note_buffer) {\n\t\t\t booking.setup = has_note_buffer;\n\t\t\t booking.breakdown = has_note_buffer;\n\t\t\t}\n booking.opt_out = booking_form_data.opt_out;\n\t\t\tthis.booking = booking;\n\t\t }\n\t\t else {\n\t\t\tthis.booking = this.bookingFormToBooking(booking_form_data, this.isEditSeries);\n\t\t }\n\n\n this.loading = true;\n checkCollisions(\n this._spaces,\n this.booking\n ).then((bookable: boolean) => {\n // We expect the current booking to be returned form this api call,\n if (bookable) {\n\n this._bookings_service.save(this.booking, this.isEditSeries).then(\n (bkn) => {\n // update template properties and booking\n this.handleBookingSuccessResponse(bkn);\n // update callback in case of standard booking edit\n this.updateCallback && this.updateCallback.emit(this.booking);\n\n },\n (err) => {\n if (err.status === 409) {\n this.handleBookingErrorMessage();\n } else {\n this.loading = false;\n this.confirmed = false;\n this.displayWarningBanner(getStatusErrorMessage(err.status));\n }\n }\n );\n } else {\n this.handleBookingErrorMessage();\n return;\n }\n },\n (err) => {\n this.handleBookingErrorMessage();\n }\n );\n }\n\n public callback() {\n this.closeCallback.emit(true);\n }\n\n}\n","import {\n Component,\n OnInit,\n Output,\n EventEmitter,\n} from '@angular/core';\nimport { TopBarHeaderMode, RoutePayload } from 'src/app/components/topbar-header/topbar-header.component';\nimport {\n Store\n} from '@ngrx/store';\nimport {\n BaseDirective,\n dateLocalFormatString,\n startEndTimeWithZoneFormatString,\n humaniseDuration,\n toTitleCase,\n dateBuildingFormatString,\n shorterLocalDateFormatString,\n DialogEvent,\n} from '@mckinsey-converge/base';\nimport {\n ApplicationService,\n Booking,\n BookingsService,\n BookingStateService,\n Space,\n SpacesService,\n User,\n BookingNote,\n BookingFormData,\n BookingStoreState,\n storeBookingFormData,\n bookingStatusDetails,\n clearBookingFormData,\n CateringNotesService,\n getLastDateFromList,\n BOOKING_STATUS,\n DataForConfirmation,\n UsersService\n} from '@mckinsey-converge/data-common';\nimport {\n BehaviorSubject,\n} from 'rxjs';\nimport {\n take,\n} from 'rxjs/operators';\nimport {\n BuildingStoreState\n} from '@mckinsey-converge/buildings';\nimport {\n RoomStoreState,\n} from '@mckinsey-converge/rooms';\nimport {\n Router\n} from '@angular/router';\nimport { UserStoreState } from '@mckinsey-converge/user';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DateNow, DateTZ } from \"@mckinsey-converge/date-tz\";\nimport { ConflictsModalComponent, ConflictsModalComponentData } from '@mckinsey-converge/ui';\n\n\nexport type RoomResultsState = BookingStoreState\n & RoomStoreState\n & BuildingStoreState\n & UserStoreState;\n\n@Component({\n selector: 'app-booking-base',\n templateUrl: './booking-form-base.component.html',\n styleUrls: ['./booking-create.component.scss']\n})\nexport class BookingFormBaseComponent extends BaseDirective implements OnInit {\n public TopBarHeaderMode = TopBarHeaderMode;\n\n public backRoute: RoutePayload = {\n route: ['/home', 'results', 'room'],\n queryParams: {}\n };\n\n @Output() public closeCallback = new EventEmitter();\n\n /**\n * placeIntoModal: Input decorator indecate as a flag to adapt component design into a dialog modal \n * (by hiding header and adjusting height so that fit into a modal)\n */\n public placeIntoModal = false;\n // Eliminate selectedRoom (room building capacity )\n public modal = false;\n public data = new BehaviorSubject(undefined);\n public submitTimestamp: number;\n public confirmed: boolean = false;\n /** Whether booking has succeeded */\n public success: boolean;\n public updated: boolean;\n /** Display loading template */\n public loading: boolean= false;\n public booking: Booking = new Booking({});\n /** Current User */\n public currentUser: User;\n public invalidForm: boolean = true;\n public showWarningBanner: boolean = false;\n public warningMessage: string;\n\n dataForConfirmation: DataForConfirmation;\n isEditSeries: boolean = false;\n // set property if user room selection from next business day section on result page\n public nextBusinessDay: boolean = false;\n\n\n constructor(\n public _service: ApplicationService,\n public store: Store,\n public router: Router,\n public _bookings_service: BookingsService,\n public _booking_state_service: BookingStateService,\n public _spaces: SpacesService,\n public _cateringNotesService: CateringNotesService,\n public dialog: MatDialog,\n private _users: UsersService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.subscription('currentUser', this.store.select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n })\n );\n\n\n }\n\n public get building(){\n return this.booking.room.building;\n }\n\n public get type() {\n return this.booking.bookingTypeLabel;\n }\n\n public get internal_external_type() {\n return this.booking.room?.[0].filters.external === true? \"External\" : \"Internal\";\n }\n\n public get date(){\n // R--- remove if no longer used.\n return this.booking.startDateTz;\n }\n\n public get dateString() {\n return this.booking.startDateTz.formatDate('ccc d MMM yyyy'); //shorterLocalDateFormatString(this.booking.startDateTz);\n \n }\n\n public get timeString() {\n return startEndTimeWithZoneFormatString(this.booking.startDateTz, this.booking?.displayEndDateTz);\n }\n\n public get durationString() {\n return humaniseDuration(this.booking?.duration);\n }\n\n public get status() {\n return bookingStatusDetails(this.booking);\n }\n\n public async goToBackRoute() {\n await this.router.navigate(this.backRoute.route, { queryParams: this.backRoute.queryParams });\n }\n\n /**\n * Continue to Booking Form\n */\n public createBooking() { // todo change links based on usage\n // trigger the booking form submit\n this.submitTimestamp = new Date().getTime();\n }\n\n // submit the booking form\n public submitForm(formGroup: any) {\n let creator: User;\n if (formGroup.has_delegate) {\n if (formGroup.organiser.value !== this.currentUser.email) {\n creator = this.currentUser;\n }\n }\n\n // Combines booking with selected form fields and not the entire formGroup like other places.\n // to combine booking with selected form fields on submit - WHY IS THIS NEEDED TO DISPACH TO STORE BOOKING FORM DATA ???\n // THIS ISSUE IS SPILLING INTO - libs/data-common/src/lib/booking/booking.selectors.ts lno: 70\n // - due to .toJSON recurrence_starts becomes Array ?!?\n this.store.dispatch(storeBookingFormData({\n payload: {\n ...this.booking.toJSON(),\n attendees: formGroup.attendees,\n code: formGroup.code,\n head_count: formGroup.head_count,\n notes: formGroup.notes,\n organiser: formGroup.organiser,\n creator,\n title: formGroup.title,\n company: formGroup.company,\n opt_out: formGroup.opt_out\n }\n }));\n this.saveChanges();\n }\n\n // submit the booking form\n public validateForm(valid: boolean) {\n this.invalidForm = !valid;\n }\n\n public setupNotes(note: string, roomEmail: string) {\n if (note && note.length ) {\n // this note was required to update setup and breakdown\n return [{\n author: this.currentUser.name,\n type: \"equipment\",\n message: !Array.isArray(note) ? note : note[0].message,\n space: roomEmail,\n date: new Date().getTime()\n }] as BookingNote[];\n }\n\n return [];\n }\n\n public formToAttendees(attendees: any[]) {\n return !attendees ? [] : attendees.map(a => {\n let raw_user = {\n first_name: '',\n last_name: '',\n email: '',\n name: '',\n type: 'internal',\n external: false,\n visitor: false,\n };\n if (a.meta?.external) {\n // External users get assigned a random email\n const nameParts = a.display.split(' ');\n const length = nameParts.length;\n if (length) {\n raw_user.first_name = nameParts[0];\n raw_user.name = nameParts.join(' ');\n }\n if (length > 1) {\n nameParts.shift();\n raw_user.last_name = nameParts.join(' ');\n }\n raw_user.email = a.value ?? `${Math.floor(Math.random() * 99999)}@guest.mckinsey.com`;\n raw_user.type = 'external'; // retain external identity\n raw_user.external = true;\n raw_user.visitor = true;\n } else if (a.meta?.user) {\n raw_user = a.meta.user;\n }\n else {\n raw_user = a;\n }\n return new User(raw_user);\n });\n }\n\n public formToCompany(companies: any[]) {\n return !companies ? [] : companies.map(a => {\n return a.value;\n });\n }\n\n /**\n * Save booking changes\n */\n public saveChanges() {\n this.loading = true;\n const booking_form_data = this.data.value;\n // override in child class\n }\n\n public callback() {\n // mock interface\n }\n\n public get is_request(): boolean {\n const data = this.data.value;\n\n /* istanbul ignore else */\n if (!data?.selectedRoom?.space) {\n return false;\n }\n\n const space = new Space(data.selectedRoom.space);\n return space.byRequest({\n dateTz: data.dateTz,\n duration: data.duration,\n host: this.currentUser\n });\n }\n\n public displayWarningBanner(custom: string) {\n this.warningMessage = custom;\n this.showWarningBanner = true;\n this.timeout('close banner', () => {\n this.showWarningBanner = false;\n }, 10000);\n }\n\n public hideWarningBanner() {\n this.showWarningBanner= false;\n }\n\n public discardChanges() {\n this.store.dispatch(clearBookingFormData());\n this.closeCallback.emit(true)\n }\n\n\n\n setupOrganiser(booking_form_data: BookingFormData) {\n if(booking_form_data.organiser?.meta?.user){\n return booking_form_data.organiser?.meta?.user;\n }\n else{\n booking_form_data.organiser = {...booking_form_data.organiser, meta: {user: this.currentUser}}\n return booking_form_data.organiser?.meta.user;\n }\n }\n\n public bookingFormToBooking(bookingData, isEditSeries: boolean = false): Booking {\n let booking_form_data = bookingData;\n const has_note_buffer = booking_form_data.notes && booking_form_data.notes?.length ? {[booking_form_data.selectedRoom.space.email]: 900} : {}; // 900 seconds = 15 min\n const attendees = this.formToAttendees(booking_form_data.attendees);\n const company = this.formToCompany(booking_form_data.company);\n const start_epoch = booking_form_data?.dateTz?.seconds;\n const end_epoch = booking_form_data.dateTz.addValue({ minutes: booking_form_data.duration }).seconds;\n // set property if user room selection from next business day section on result page\n this.nextBusinessDay = booking_form_data?.nextBusinessDay || false\n\n const raw_data = {\n id: isEditSeries ? booking_form_data.id : '',\n all_day: booking_form_data.all_day || false,\n attendees,\n booking_type: booking_form_data.bookingType.value,\n catering: booking_form_data.catering || [],\n start_epoch,\n end_epoch,\n timezone: booking_form_data.timezone,\n equipment_codes: {[booking_form_data.selectedRoom.space.email]: booking_form_data.code},\n expected_attendees: {[booking_form_data.selectedRoom.space.email]: booking_form_data.head_count},\n has_catering: booking_form_data.has_catering || false,\n needs_space: booking_form_data.needs_space || false,\n organiser: this.setupOrganiser(booking_form_data),\n notes: this.setupNotes(booking_form_data.notes, booking_form_data.selectedRoom.space.email),\n creator: booking_form_data.creator,\n room: booking_form_data.selectedRoom.space,\n title: booking_form_data.title,\n setup: has_note_buffer,\n breakdown: has_note_buffer,\n company,\n /* Staff Recurring form fields */\n is_recurrent: booking_form_data.is_recurrent,\n recurrence_count: booking_form_data.recurrence_count,\n recurrence_days: booking_form_data.recurrence_days,\n recurrence_endTz: booking_form_data.recurrence_endTz,\n recurrence_exceptions: booking_form_data.recurrence_exceptions,\n recurrence_interval: booking_form_data.recurrence_interval,\n recurrence_period: booking_form_data.recurrence_period,\n recurrence_starts: booking_form_data.recurrence_starts,\n\n occurrence_details: booking_form_data.occurrence_details,\n // occurrence_edits: booking_form_data.occurrence_edits || null,\n // occurrence_ids: booking_form_data.occurrence_ids || null,\n recurrence_type: booking_form_data.recurrence_type || null,\n recurrence_master_id: booking_form_data.recurrence_master_id,\n edits: booking_form_data?.edits,\n ignore: booking_form_data?.ignore,\n\n opt_out: bookingData.opt_out\n\n\n };\n\n return new Booking(raw_data);\n }\n\n\n public async handleBookingSuccessResponse(bkn) {\n\n // const user: User = this._users.current;\n // if(this._users.current.email === bkn.organiser.email) {\n // this._users.current.opt_out = true;\n // }else {\n // this._users.current.delegates.map(el => { \n // if(el.email === bkn.organiser.email) {\n // el.opt_out = true;\n // }\n // return el;\n // })\n // }\n \n\n //const responceBkn = new Booking({...bkn}); // \n this.booking = new Booking({ ...this.booking, ...bkn.toApiJSON() });\n this.updateConfimatinModal();\n this._booking_state_service.replace(this.booking);\n\n /**\n * update the master booking in case of recurring to have latest updated in the system\n */\n if(this.booking.recurrence_master_id !== null && this.isEditSeries)\n {\n const master_booking = await this._bookings_service.show(this.booking.recurrence_master_id);\n this._booking_state_service.replace(master_booking);\n }\n\n // Clear the current booking form\n this.store.dispatch(clearBookingFormData());\n\n this.loading = false;\n this.success = true;\n this.confirmed = true;\n\n // Heap track event\n this._service.analytics.track('update', {\n booking_id: this.booking.id,\n office: this.booking.room.building.name, // this.building.name,\n room: this.booking.room.simple_name,\n start_time: this.booking.startDateTz.ms,\n end_time: this.booking.endDateTz.ms,\n catering: !!this.booking.catering.length,\n headcount: this.data.value.head_count,\n });\n\n }\n\n\n public handleBookingErrorMessage() {\n this.loading = false;\n this.booking.status = BOOKING_STATUS.unavailable\n this._booking_state_service.replace(this.booking);\n this.confirmed = true;\n this.success = false;\n this.updateConfimatinModal();\n }\n\n /**\n * Public method to update the confirmation modal data.\n * This method updates the dataForConfirmation object with the necessary information\n * for displaying the confirmation modal in the application.\n */\n public updateConfimatinModal() {\n\n // Prepare an object with booking details and related information for the confirmation modal\n this.dataForConfirmation = {\n booking: this.booking, // Information about the booking\n status: this.status, // Status of the booking (e.g., confirmed, pending, etc.)\n dateString: this.dateString, // Date of the booking in string format\n endDateString: this.endDateString, // End date of the booking in string format\n timeString: this.timeString, // Time of the booking in string format\n durationString: this.durationString, // Duration of the booking in string format\n type: this.type, // Type of booking (e.g., internal, external, etc.)\n isEditSeries: this.isEditSeries, // Boolean indicating whether it's an edit in a series of events\n // Function to check if there are conflicts with occurrences of the booking\n isConflictWithOccurences: this.isConflictWithOccurences.bind(this),\n // Function to open a modal in case of conflicts with recurring events\n openRecurrenceConflictsModal: this.openRecurrenceConflictsModal.bind(this)\n }\n }\n\n /**\n * Checks if there are conflicts with the current booking and its occurrences.\n * Calculates the difference between total occurrences and available occurrences\n * to determine if there are conflicts.\n *\n * @returns {Object} An object containing conflict information:\n * - is_conflict: A boolean indicating if there are conflicts (true if conflicts exist, false otherwise).\n * - total_Conflicts: The total number of conflicts (the difference between total occurrences and available occurrences).\n */\n // public isConflictWithOccurences() {\n // const conflicts = this?.booking?.room?.totalOccurrences - this?.booking?.room?.availableOccurrences;\n // return { is_conflict: !!conflicts, total_Conflicts: conflicts };\n // }\n\n public isConflictWithOccurences() {\n let totalConflicts = 0;\n\n if (this.booking.multi_rooms && this.booking.multi_rooms.length > 0) {\n this.booking.multi_rooms.forEach((room) => {\n totalConflicts += Math.max(room.totalOccurrences - room.availableOccurrences, 0);\n });\n } \n if (this.booking.room) {\n totalConflicts =\n this?.booking?.room?.totalOccurrences - this?.booking?.room?.availableOccurrences;\n }\n\n const result = {\n is_conflict: totalConflicts > 0,\n total_Conflicts: totalConflicts,\n };\n return result;\n}\n\n\n/**\n * Retrieves the end date string for the booking, considering recurrence if applicable.\n * If the booking is recurrent, it calculates the end date based on recurrence starts;\n * otherwise, it uses the booking's start date as the end date.\n *\n * @returns {string} The formatted end date string in a shorter local date format.\n */\n public get endDateString(): string {\n // Determine the array of date-time strings based on recurrence or single start date\n let recurrenceStart: Array= [];\n const { is_recurrent, recurrence_starts, occurrence_details, timezone} = this.booking;\n if(is_recurrent && recurrence_starts.length) {\n recurrenceStart = this.booking.recurrence_starts;\n }\n else if(is_recurrent && !recurrence_starts.length && occurrence_details?.length) {\n this.booking.occurrence_details.forEach(element => {\n recurrenceStart.push(new DateTZ({ date: element.start_epoch * 1000, is_local_tz: false, building_tz: timezone}));\n });\n recurrenceStart = recurrenceStart.sort((d1: DateTZ, d2: DateTZ) => d1.ms - d2.ms);\n }\n else {\n recurrenceStart = [this.booking.startDateTz];\n }\n\n\n // const endDtz = (this.booking.is_recurrent && this.booking.recurrence_starts.length) ? this.booking.recurrence_starts : [this.booking.startDateTz]\n // Get the last date from the list of date-time strings and format it in a shorter local date format\n const requestedEndDateTz = getLastDateFromList(recurrenceStart); //shorterLocalDateFormatString(getLastDateFromList(recurrenceStart));\n \n // add one day if user room selection from next business day section on result page\n const endDatestring = this.nextBusinessDay ? requestedEndDateTz.addValue({ minutes: this.data?.value.offset }) : requestedEndDateTz;\n\n return endDatestring.formatDate('ccc d MMM yyyy');\n }\n\n /**\n * Opens a modal to display recurrence conflicts for a given room.\n *\n * @param {Space} room - The room for which recurrence conflicts are being displayed.\n *\n * This function opens a modal dialog to show recurrence exceptions (conflicts)\n * for the specified room.\n *\n * TO DO: SAME FUNCTION BEING USED IN apps/staff/src/app/booking/room-details/room-details.component.ts\n * and mckinsey-converge/apps/staff/src/app/booking/catering/catering.component.ts\n */\n public openRecurrenceConflictsModal(room: Space) {\n let { recurrence_exceptions } = this.data.value;\n\n const recurr_ref = this.dialog.open(ConflictsModalComponent, {\n maxWidth: '95vw',\n width: '32em',\n data: {\n room_name: room.simple_name,\n conflicts: recurrence_exceptions,\n timezone: room.building.timezone,\n status: 'confirmed'\n }\n });\n this.subscription(\n 'conflicts_modal_events',\n recurr_ref.componentInstance.event.subscribe((event: DialogEvent) => {\n recurr_ref.close();\n })\n );\n recurr_ref.afterClosed().subscribe(() => this.unsub('conflicts_modal_events'));\n }\n\n\n}\n","import {BehaviorSubject,fromEvent,\n} from 'rxjs';\nimport {take,throttleTime,tap,distinctUntilChanged,map\n} from 'rxjs/operators';\nimport {select,Store\n} from '@ngrx/store';\nimport {Component,Inject,OnInit,\n} from '@angular/core';\nimport { BaseDirective, dateBuildingFormatString, startEndTimeWithZoneFormatString, humaniseDuration, toTitleCase, closestToTimeSlotTz\n} from '@mckinsey-converge/base';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { User,\n\tApplicationService,\n\tAvailableBookingFields,\n\tBooking,\n\tBookingFormData,\n\tBookingFlowSettings,\n\tSpacesService,\n\tstoreBookingFormData,\n\tDateDurationData,\n\tselectFilteredByIdResults,\n\tgenerateBookingForm,\n\tcateringAllowed,\n\trulesForSpace,\n\tgetStatusErrorMessage,\n\troomHasCateringHours,\n\tBookingsService,\n\tSpaceConflictAlertModalData,\n\tSpaceFilterReason,\n\tBuilding,\n\tBuildingCity,\n\tflattenDisplayOffices,\n\troomSizeOptions,\n\tDEFAULT_BOOKING_DURATION,\n\tbookingTypeOptions,\n\troomFormDataToQuery,\n\tclearBookingFormData,\n\tBookingStateService,\n\tRecurrencePeriod,\n\tselectActiveForm,\n\tSeriesAction\n} from '@mckinsey-converge/data-common';\nimport { first } from 'rxjs/operators';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport { TopBarHeaderMode } from 'src/app/components/topbar-header/topbar-header.component';\nimport { CancelBookingModalComponent } from '../cancel-booking-modal/cancel-booking-modal.component';\nimport { BookingDurationModalComponent } from '../booking-duration-modal/booking-duration-modal.component';\nimport { RoomResultsState } from '../room-details/room-details.component';\nimport {\n\tloadByIdResults, loadRoomsForResults, loadRoomsForResultsMap,\n} from '@mckinsey-converge/rooms';\nimport { FormGroup } from '@angular/forms';\nimport { loadBookingsWithQuery } from '@mckinsey-converge/bookings';\nimport { DateNow, DateTZ } from \"@mckinsey-converge/date-tz\";\nimport { ConflictAlertModalComponent, SelectOption } from '@mckinsey-converge/ui';\nimport { buildingStateSelector, selectBuildingOptionsGroupedByCity } from '@mckinsey-converge/buildings';\nimport { RoomBookingModalComponent } from '../room-booking-modal/room-booking-modal.component';\nimport { Router, ActivatedRoute } from '@angular/router';\n\nconst EMPTY_ARRAY = [];\n\n@Component({\n\tselector: 'app-booking-details-modal',\n\ttemplateUrl: 'booking-details-modal.component.html',\n\tstyleUrls: ['./booking-details-modal.component.scss']\n})\nexport class BookingDetailsModalComponent extends BaseDirective implements OnInit {\n\tpublic TopBarHeaderMode = TopBarHeaderMode;\n\tpublic title: string;\n\tpublic roomName: string;\n\tpublic roomLocation: string;\n\tpublic host: string;\n\tpublic hostEmail: string;\n\tpublic type: string;\n\tpublic status: string;\n\tpublic statusText: string = '';\n\tpublic statusImage: string;\n\tpublic durationString: string;\n\tpublic dateString: string;\n\tpublic timeString: string;\n\tpublic capacity: number;\n\tpublic attendeesString: string;\n\tpublic chargeCode: string;\n\tpublic headcount: number;\n\tpublic requirements: string;\n\tpublic showDetails: boolean;\n\tpublic warningMessage: string;\n\tpublic mapUrl: string;\n\tpublic focusedRoom: string;\n\tpublic expandedLocation = false;\n\tpublic isRecurrentBooking = false;\n\tpublic isMultiroomBooking:boolean = false;\n\n\tpublic checkingExtendable: boolean;\n\tpublic extendableMaximum: number;\n\n\tpublic receiptionEmail: string;\n\n\tpublic data = new BehaviorSubject(undefined);\n\tpublic byIdResults = new BehaviorSubject(undefined);\n\n\t// Track event date changes in the UI in this param\n\tpublic alternativeWeekStartDateTz: DateTZ;\n\t/** Current User */\n\tpublic currentUser: User;\n\tpublic expandedAvailability: boolean = false;\n\t// Set in the room availablity callback\n\tpublic mobile: boolean = false;\n\tpublic loading: boolean = false;\n\tpublic showInfoBanner: boolean = false;\n\tpublic showWarningBanner: boolean = false;\n\tpublic showCatering: boolean = false;\n\t/** Application settings for bookings */\n\tpublic settings: BookingFlowSettings;\n\tpublic form: FormGroup;\n\tpublic companyString: string;\n\n\tinvalidDueToOfficeRule: boolean;\n\tbuildings: SelectOption[];\n\tmaster_booking: Booking;\n\n\tprivate recurrence_period: RecurrencePeriod;\n\tprivate recurrence_interval: number;\n\toccurrence_details: { start_epoch: number; dateTz: DateTZ; id: string; }[];\n\tdisableSeriesEditButton: boolean = false;\n\topt_out: boolean;\n\t/** List of available booking fields for the form */\n\tpublic get available_fields(): AvailableBookingFields[] {\n\t\treturn this.settings?.show_fields || [];\n\t}\n\n\tpublic get emailURL() {\n\t\treturn `mailto:${encodeURIComponent(this.receiptionEmail)}?cc=${encodeURIComponent(this.hostEmail)}&subject=Enquiry%3A%20${encodeURIComponent(this.roomName)}&body=Details%3A%0ADate%3A%20${encodeURIComponent(this.dateString)}%0ATime%3A%20${encodeURIComponent(this.timeString)}%0A${encodeURIComponent(this.type)}%20meeting%20(${encodeURIComponent(this.durationString)})%0AAddress%3A%20${encodeURIComponent(this.roomLocation)}%0ARoom%3A%20${encodeURIComponent(this.roomName)}%0ACapacity%3A%20${encodeURIComponent(this.capacity)}%20people%0A%0ANeeding%20assistance%20with%3A%0A`;\n\t}\n\n\tpublic disableCancelButton: boolean = false;\n\tpublic disableEditTimeButton: boolean = false;\n\tpublic disableUpdateDetailsButton: boolean = false;\n\n\tprivate _specific_dates = false;\n\n\n\tconstructor(\n\t\t private router: Router,\n private route: ActivatedRoute,\n\t\t@Inject(MAT_DIALOG_DATA) public _data: any,\n\t\tprivate dialogRef: MatDialogRef,\n\t\tprivate store: Store,\n\t\tpublic _bookings: BookingsService,\n\t\tprivate _service: ApplicationService,\n\t\tprivate _spaces: SpacesService,\n\t\tprivate dialog: MatDialog,\n\t) {\n\t\tsuper();\n\t\tthis.roomLocation = this._data.booking.room.street_and_city;\n\t\tthis.initDisplayValues(this._data.booking);\n\t\tthis.timeout('slowinit', () => {\n\t\t\tthis.initDisplayValues(this._data.booking);\n\t\t\tif (this._data.cancel && this.displayCancelModal()) {\n\t\t\t\tthis.cancelBooking();\n\t\t\t}\n\t\t\tif (this._data.addCatering && this.roomHasCatering) {\n\t\t\t\tthis.addCatering();\n\t\t\t}\n\t\t\t// Close up the loader panel\n\t\t\tthis.timeout('hide modal mask', () => {\n\t\t\t\tthis._data.hasLoaderUrl = false;\n\t\t\t}, 300);\n\t\t}, 1000);\n\t}\n\n\n\tpublic ngOnInit() {\n\n\t\t/**\n\t\t * Update booking recurrence and occurrence details based on master booking data.\n\t\t *\n\t\t * This code block checks if there is a master booking available in the data.\n\t\t * If a master booking exists, it extracts recurrence period and interval information,\n\t\t * and processes occurrence details, excluding the current booking itself. Occurrence\n\t\t * start epochs are converted to milliseconds and date-time strings are created in the\n\t\t * building's timezone.\n\t\t */\n\t\tif(this._data?.master_booking !== null) {\n\t\t\tthis.recurrence_period = this._data?.master_booking?.recurrence_period;\n\t\t\tthis.recurrence_interval = this._data?.master_booking?.recurrence_interval;\n\n\t\t\tconst bookingData = this._data?.master_booking || this._data?.booking;\n\n\t\t\tthis.occurrence_details = bookingData.occurrence_details && bookingData.occurrence_details\n\t\t\t\t.filter(ocurrence => ocurrence.id !== bookingData.id)\n\t\t\t\t.map(ocurrence => ({\n\t\t\t\t\t...ocurrence,\n\t\t\t\t\tstart_epoch: ocurrence.start_epoch * 1000, // Convert start epoch to milliseconds\n\t\t\t\t\tdateTz: new DateTZ({\n\t\t\t\t\t\tdate: ocurrence.start_epoch * 1000, // Create a DateTZ object with the converted epoch\n\t\t\t\t\t\tis_local_tz: false,\n\t\t\t\t\t\tbuilding_tz: bookingData.timezone\n\t\t\t\t\t})\n\t\t\t\t}));\n\t\t}\n\n\n\t\tthis.subscription('currentUser', this.store.select(selectCurrentUser)\n\t\t\t.pipe(take(1))\n\t\t\t.subscribe((user: User | undefined) => {\n\t\t\t\t// Once we know we have the user loaded.\n\t\t\t\tthis.currentUser = new User(user);\n\t\t\t})\n\t\t);\n\n\t\tthis.subscription('byId', this.store.pipe(\n\t\t\tselect(selectFilteredByIdResults)\n\t\t).subscribe(next => {\n\t\t\t// Should be fired when loading by ID in URL\n\t\t\tthis.byIdResults.next(next.success?.spaces?.length ? next.success.spaces[0].settings.bookings : EMPTY_ARRAY);\n\t\t}));\n\n\t\tthis._spaces.initialised.pipe(first((_) => _)).subscribe(() => {\n\t\t\tthis.settings = this._service.setting('app.booking');\n\t\t\tthis.form = generateBookingForm(this._data.booking, this.available_fields);\n\t\t});\n\n\t\tconst breakpoint = 450;\n\t\tif (window) {\n\t\t\tthis.mobile = window.innerWidth < breakpoint;\n\t\t}\n\n\t\tfromEvent(window, 'resize').pipe(throttleTime(500)).pipe(tap({\n\t\t\tnext: val => {\n\t\t\t\tconst target = val.target as Window;\n\t\t\t\tthis.mobile = target.innerWidth < breakpoint;\n\t\t\t}\n\t\t})).subscribe();\n\n\n\t\tthis.subscription('buildings', this.store.pipe(\n\t\t\tselect(buildingStateSelector),\n\t\t\tselect(selectBuildingOptionsGroupedByCity),\n\t\t\tmap((grouped: Map) => {\n\t\t\t\treturn flattenDisplayOffices(grouped);\n\t\t\t}),\n\t\t\tdistinctUntilChanged()\n\t\t).subscribe(next => {\n\t\t\tthis.buildings = next;\n\t\t\t!this.showDetails && this.dispatchToGetFloorCurrentStatus(this._data.booking);\n\t\t}));\n\n\n\t}\n\n\t// public get isCateringAdded()\n\n\tpublic get disableCateringButton() {\n\t\tswitch (this.status) {\n\t\t\tcase 'cancelled':\n\t\t\tcase 'declined':\n\t\t\tcase 'expired':\n\t\t\t\treturn true\n\t\t\tdefault:\n\t\t\t\treturn !cateringAllowed(this._data?.booking, this._data.booking.room.building);\n\t\t}\n\t}\n\n\tpublic get roomHasCatering() {\n\t\treturn roomHasCateringHours(this._data.booking.room.building, this._data.booking?.room);\n\t}\n\n\tpublic get catering() {\n\t\treturn this._data.booking?.catering || [];\n\t}\n\n\tpublic formatDeliveryTime(order) {\n\t\treturn this._data.booking.startDateTz.addValue({ minutes: order?.delivery_time }).formatDate(\"h:mma\");\n\t}\n\n\tpublic initDisplayValues(booking: Booking) {\n\t\tconst roomEmail = booking.room.email || '';\n\t\tthis.dateString = dateBuildingFormatString(booking.startDateTz, true);\n\t\tthis.timeString = startEndTimeWithZoneFormatString(booking.startDateTz, booking.displayEndDateTz);\n\t\tthis.host = booking.organiser.name;\n\t\tthis.opt_out = booking.opt_out;\n\t\tthis.hostEmail = booking.organiser.email;\n\t\tthis.title = booking.title;\n\t\tthis.type = toTitleCase(booking.booking_type);\n\t\tthis.roomName = booking.local_room_name || '';\n\t\tthis.durationString = humaniseDuration(booking.duration);\n\t\tthis.capacity = booking.room.capacity; // in case of multiroom booking should we sum the capacity for all the rooms?\n\t\tthis.attendeesString = booking.attendees.map(a => a.name).join(', ');\n\t\tthis.chargeCode = booking.equipment_codes[roomEmail];\n\t\tthis.headcount = booking.expected_attendees[roomEmail];\n\t\tthis.mapUrl = booking.room.level.map_url;\n\t\tthis.extendableMaximum = 0;\n\t\tthis.focusedRoom = `area-${booking.room.map_id}-status`;\n\t\tthis.checkingExtendable = false;\n\t\tthis.receiptionEmail = this._data.booking.room.building?._settings?.discovery_info?.reception_email || '';\n\t\tthis.companyString = booking.company.join(', ');\n\t\t// UI button availability\n\t\tthis.disableCancelButton = true; // CSS hide disabled\n\t\tthis.disableEditTimeButton = true;\n\t\tthis.disableUpdateDetailsButton = true;\n\t\tthis.isRecurrentBooking = (booking.recurrence_type !== null || booking.recurrence_type === '') && booking.recurrence_period !== null ? true : false;\n\t\tthis.isMultiroomBooking = booking.is_multiroom ? true : false\n\n\t\t// Room Availability modal start date\n\t\tthis.setAlternativeWeekStartDate(booking.startDateTz);\n\n\t\t// Get the equiptment notes\n\t\tconst requirements = booking.notes.find(n => {\n\t\t\tif (n.type === 'equipment') {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t});\n\t\tthis.requirements = requirements ? requirements.message : '';\n\n\t\t// Setup the UI status based on the booking approval status\n\t\tif (booking.status) {\n\t\t\t// mark bookings before today expired\n\t\t\tconst orgStatus = booking.status;\n\t\t\tthis.status = booking.status;\n\t\t\tconst recentlyExpired = DateNow(new Date()).subtractValue({ minutes: 5 }).isBeforeDate(booking.startDateTz.addValue({ minutes: booking.duration }));\n\t\t\tif (!['declined', 'cancelled'].includes(booking.status)) {\n\t\t\t\tthis.status = DateNow(new Date()).isAfterDate(booking.startDateTz.addValue({ minutes: booking.duration })) ? 'expired' : booking.status;\n\t\t\t}\n\n\t\t\tif(this._data.master_booking && this._data.master_booking.status === 'tentative' ) {\n\t\t\t\tthis.disableSeriesEditButton = true;\n\t\t\t}\n\n\t\t\tswitch (this.status) {\n\t\t\t\tcase 'tentative':\n\t\t\t\t\tthis.statusImage = 'assets/icon/booking_pending.svg';\n\t\t\t\t\tthis.statusText = 'Pending';\n\t\t\t\t\tthis.disableCancelButton = false;\n\t\t\t\t\tthis.disableUpdateDetailsButton = false;\n\t\t\t\t\tthis.disableEditTimeButton = false;\n\t\t\t\t\t// Verify the booking date makes it updatable.\n\t\t\t\t\tif (DateNow(new Date()).isAfterDate(booking.startDateTz)) {\n\t\t\t\t\t\t// disable edit date time\n\t\t\t\t\t\tthis.disableEditTimeButton = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'accepted':\n\t\t\t\t\tthis.statusImage = 'assets/icon/booking_confirmed.svg';\n\t\t\t\t\tthis.statusText = 'Confirmed';\n\t\t\t\t\tthis.disableCancelButton = false;\n\t\t\t\t\tthis.disableUpdateDetailsButton = false;\n\t\t\t\t\tthis.disableEditTimeButton = false;\n\t\t\t\t\tthis.checkingExtendable = true;\n\t\t\t\t\t// edit date time on but returns to tenative on save\n\t\t\t\t\tthis.findMaxExtension().then(v => {\n\t\t\t\t\t\tthis.extendableMaximum = v;\n\t\t\t\t\t\tthis.checkingExtendable = false;\n\t\t\t\t\t});\n\t\t\t\t\t// Verify the booking date makes it updatable.\n\t\t\t\t\tif (DateNow(new Date()).isAfterDate(booking.startDateTz)) {\n\t\t\t\t\t\t// disable edit date time\n\t\t\t\t\t\tthis.disableEditTimeButton = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'approved':\n\t\t\t\t\tthis.statusImage = 'assets/icon/booking_confirmed.svg';\n\t\t\t\t\tthis.statusText = 'Confirmed';\n\t\t\t\t\tthis.disableCancelButton = false;\n\t\t\t\t\tthis.disableUpdateDetailsButton = false;\n\t\t\t\t\tthis.disableEditTimeButton = false; // BLOCKED: API doesn't update 'approval_status' on save.\n\t\t\t\t\tthis.checkingExtendable = true;\n\t\t\t\t\t// edit date time on, back to pending on change.\n\t\t\t\t\tthis.findMaxExtension().then(v => {\n\t\t\t\t\t\tthis.extendableMaximum = v;\n\t\t\t\t\t\tthis.checkingExtendable = false;\n\t\t\t\t\t});\n\t\t\t\t\t// Verify the booking date makes it updatable.\n\t\t\t\t\tif (DateNow(new Date()).isAfterDate(booking.startDateTz)) {\n\t\t\t\t\t\t// disable edit date time\n\t\t\t\t\t\tthis.disableEditTimeButton = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'declined':\n\t\t\t\t\tthis.statusImage = 'assets/icon/booking_cancelled.svg';\n\t\t\t\t\tthis.statusText = 'Cancelled';\n\t\t\t\t\t// you can edit time and go back to pending\n\t\t\t\t\tthis.extendableMaximum = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'cancelled':\n\t\t\t\t\tthis.statusImage = 'assets/icon/booking_cancelled.svg';\n\t\t\t\t\tthis.statusText = 'Cancelled';\n\t\t\t\t\tthis.extendableMaximum = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'expired':\n\t\t\t\t\tthis.statusImage = 'assets/icon/booking_expired.svg';\n\t\t\t\t\tthis.statusText = 'Expired';\n\t\t\t\t\tthis.extendableMaximum = 0;\n\n\t\t\t\t\tif (recentlyExpired && ['accepted', 'approved'].includes(orgStatus)) {\n\t\t\t\t\t\tthis.checkingExtendable = true;\n\t\t\t\t\t\tthis.findMaxExtension().then(v => {\n\t\t\t\t\t\t\tthis.extendableMaximum = v;\n\t\t\t\t\t\t\tthis.checkingExtendable = false;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: // TODO What is an appropriate default ? And refactor where else this is common.\n\t\t\t\t\tthis.statusImage = 'assets/icon/booking_expired.svg';\n\t\t\t\t\tthis.statusText = 'Expired';\n\t\t\t\t\tthis.extendableMaximum = 0;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic listItems(order) {\n\t\treturn order.items.map(i => `(${i.amount}) ${i.name}`).join(', ');\n\t}\n\n\tpublic expandLocation() {\n\t\tthis.expandedLocation = true;\n\t}\n\n\tpublic handleClose(fetchRooms: boolean = false) {\n\t\tthis.expandedLocation = false;\n\t\tthis.expandedAvailability = false;\n\t\tif (fetchRooms) {\n\t\t\tthis.fetchRooms(false);\n\t\t\tthis.invalidDueToOfficeRule && this.alertIfItHasConflict(false, true);\n\t\t\tthis.invalidDueToOfficeRule = false;\n\t\t}\n\t}\n\n\tpublic close(flag: string = '') {\n\t\tthis.dialogRef.close(flag);\n\t}\n\n\t/**\n\t * Check if there are any booking collisions with the new booking time\n\t * @param room_id 'sys-' id of room in question\n\t * @param date proposed booking time\n\t * @param duration proposed booking length (in minutes)\n\t */\n\tprivate async findMaxExtension(): Promise {\n\t\tconst setupInSeconds = this._data.booking.setup[this._data.booking.room.email] || 0;\n\t\tconst breakdownInMinutes = this._data.booking.breakdown[this._data.booking.room.email] ? this._data.booking.breakdown[this._data.booking.room.email] / 60 : 0;\n\n\t\t// Add a seconds, since the end time ends in :59, and add the setup time\n\t\tconst endTz = this._data.booking.endDateTz.addValue({ seconds: setupInSeconds + 1 });// (this._data.booking.date + this._data.booking.duration*60000)*0.001 -1\n\t\tconst params = {\n\t\t\troom_ids: this._data.booking.room.id,\n\t\t\tdateTz: endTz, // (((end + 60 + setupSeconds) * 1000)),\n\t\t\tduration: 60 + breakdownInMinutes,\n\t\t\thide_bookings: true,\n\t\t};\n\n\t\treturn await this._spaces\n\t\t\t.available(params, null, false)\n\t\t\t.then(\n\t\t\t\t(list) => {\n\t\t\t\t\t// measure gap in booking instead and have options\n\t\t\t\t\tconst gapInMinutes = ((list[0].available_until - (endTz.seconds - 60)) / 60);\n\t\t\t\t\tconst value = Math.min(60, gapInMinutes);\n\t\t\t\t\treturn value >= 15 ? value : 0;\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t);\n\t}\n\n\tpublic toggleUpdateView() {\n\t\tthis.showDetails = !this.showDetails;\n\t\t!this.showDetails && this.dispatchToGetFloorCurrentStatus(this._data.booking);\n\t}\n\n\n\n\n\tpublic getLocation(booking: Booking): any {\n\n\t\tif (this.buildings && booking.building_zone) {\n\t\t\treturn this.buildings.find(b => booking.building_zone === b.value);\n\t\t}\n\t\treturn [];\n\t}\n\n\n\t/**\n * Dispatches data for getting the current status of the booking floor.\n *\n * This function prepares and dispatches necessary data to retrieve the current status\n * of the booking floor.\n *\n * @param {Object} booking - The booking details object, containing room, date, duration, etc.\n * @param {boolean} editingSeries - A boolean indicating whether the booking is part of a series and being edited.\n\n */\n\tpublic dispatchToGetFloorCurrentStatus(booking, editingSeries: boolean = false) {\n\t\tconst timezone = booking.timezone;\n\t\tconst { capacity, internal_or_external } = booking.room;\n\t\tconst roomOption = capacity < 3 ? 0 : (capacity > 2 && capacity < 10) ? 1 : 2;\n\t\tconst roomSize = roomSizeOptions[roomOption];\n\n\t\t// Process recurrence data if the booking is part of a series being edited\n\t\tlet recurringBookingData = {};\n\t\tlet recurrenceStart = [];\n\t\tif(booking.is_recurrent && editingSeries) {\n\n\t\t\tthis._data.master_booking.occurrence_details.forEach(element => {\n\t\t\t\trecurrenceStart.push(new DateTZ({ date: element.start_epoch * 1000, is_local_tz: false, building_tz: timezone}));\n\t\t\t});\n\t\t\trecurrenceStart = recurrenceStart.sort((d1: DateTZ, d2: DateTZ) => d1.ms - d2.ms);\n\n\t\t\tconst {\n\t\t\t\tid,\n\t\t\t\trecurrence_period,\n\t\t\t\trecurrence_interval,\n\t\t\t\trecurrence_count,\n\t\t\t\tis_recurrent,\n\t\t\t\trecurrence_exceptions,\n\t\t\t\trecurrence_pattern,\n\t\t\t\trecurrence_days,\n\t\t\t\trecurrenEndFromOcurrences,\n\t\t\t\toccurrence_details,\n\t\t\t\toccurrence_edits,\n\t\t\t\toccurrence_ids,\n\t\t\t\trecurrence_type,\n\t\t\t\trecurrence_master_id,\n\t\t\t\tedits } = this._data.master_booking\n\n\t\t\tconst rec_endTz = recurrenEndFromOcurrences.bind(this._data.master_booking);\n\t\t\tconst recurrence_endTz = rec_endTz(occurrence_details)\n\n\n\n\n\t\t\trecurringBookingData = {\n\t\t\t\tid:id,\n\t\t\t\trecurrence_period: recurrence_period,\n\t\t\t\trecurrence_interval: recurrence_interval || 1,\n\t\t\t\trecurrence_endTz: recurrence_endTz, //this._data.master_booking.recurrence_endTz,\n\t\t\t\trecurrence_count: recurrence_count || 1,\n\t\t\t\tis_recurrent: is_recurrent,\n\t\t\t\trecurrence_starts: recurrenceStart,\n\t\t\t\trecurrence_exceptions: recurrence_exceptions || [],\n\t\t\t\trecurrence_pattern: recurrence_pattern || \"weekly\", //Helper value to store the last selected pattern (daily, weekly, monthly),\n\t\t\t\trecurrence_days: recurrence_days || [],\n\n\t\t\t\toccurrence_details: occurrence_details,\n occurrence_edits: occurrence_edits || null,\n occurrence_ids: occurrence_ids || null,\n recurrence_type: recurrence_type || null,\n recurrence_master_id: recurrence_master_id,\n\t\t\t\tedits: edits\n\t\t\t}\n\t\t};\n\n\n\t\tconst formGroup: BookingFormData = {\n\t\t\tlocation: [this.getLocation(booking)],\n\t\t\t//date: booking.date,\n\t\t\t// dateTz: recurrenceStart[0], //building_tz: timezone\n\t\t\tdateTz: recurrenceStart.length >=1 ? recurrenceStart[0] : closestToTimeSlotTz(new DateTZ({ date: Date.now(), is_local_tz: false }),\t15\t).toZone(timezone),\n\t\t\tduration: booking.duration,\n\t\t\tbookingType: internal_or_external === 'internal' ? bookingTypeOptions[0] : bookingTypeOptions[1],\n\t\t\troomSize: roomSize,\n\t\t\tselectedRoom: null,\n\t\t\ttimezone: timezone,\n\t\t\t// buildings: buildings,\n\t\t\t...this._data?.master_booking?.toJSON(),\n\t\t\t...recurringBookingData,\n\t\t\topt_out:booking.opt_out,\n\t\t\taction: 'edit_booking'\n\n\t\t};\n\n\t\t// Clear existing form and result data, then dispatch the updated form data\n\t\tthis.clearFormAndResultData();\n\t\tthis.store.dispatch(storeBookingFormData({ payload: formGroup }));\n\n\t\t// Dispatch a request to load available rooms based on the updated form data\n\t\tthis.store.dispatch(loadRoomsForResultsMap.request(roomFormDataToQuery(formGroup)))\n\t}\n\n\t/**\n * Opens a modal for editing a recurring series of bookings.\n */\n\tpublic editRecurringSeries() {\n\t\t// Dispatch the current status of the booking floor for editing the recurring series\n\t\tthis.dispatchToGetFloorCurrentStatus(this._data.booking, true);\n\n\t\tconst dialog_ref = this.dialog.open(RoomBookingModalComponent, {\n\t\t\t\tpanelClass: 'mck-modal',\n\t\t\t\tautoFocus: false,\n\t\t\t\tbackdropClass: 'mck-modal-backdrop',\n\t\t\t\tdata: {\n\t\t\t\t\tnavigateTo: this.navigateT0Search.bind(this),\n\t\t\t\t\taction: SeriesAction.EDIT, // Indicates the action type (editing a series)\n\t\t\t\t}\n\t\t});\n\n\t\t// Subscribe to the modal's closed event to handle the result\n\t\tdialog_ref.afterClosed().subscribe((flag) => {\n\t\t\t// Close the modal if the operation was successful (flag is truthy)\n\t\t\tflag && this.close(flag); //console.log('ROOM MODAL CLOSED')\n\t\t});\n\n\t}\n\n\tnavigateT0Search() {\n\t\tthis.router.navigate(['../home/results'], { relativeTo: this.route });\n\t}\n\n\n\tpublic clearFormAndResultData() {\n\t\tthis.store.dispatch(clearBookingFormData());\n\t\tthis.store.dispatch(loadRoomsForResults.clear());\n\t}\n\n\n\tpublic toggleEditView() {\n\t\tthis.fetchRooms(true);\n\t\tthis.expandedAvailability = true;\n\t}\n\n\tpublic updateBookingState(booking: Booking) {\n\t\tthis._data.booking = booking;\n\t\tthis.initDisplayValues(booking);\n\t\tthis.store.dispatch(loadBookingsWithQuery({ 'id': booking.id, 'email': this.currentUser.email, 'target': 'bookingById', 'offset': 0 }));\n\t\t// reload all booking for user from - apps/staff/src/app/booking/room-booking/room-booking.component.ts\n\t\tthis._data.refresh(); //\n\t}\n\n\tpublic cancelBooking(opts: { series?: boolean } = {}) {\n\t\t// Open the cancel booking modal\n\t\tthis.dialog.open(CancelBookingModalComponent, {\n\t\t\tpanelClass: 'mck-noexpand',\n\t\t\tdata: {\n\t\t\t\t...this._data,\n\t\t\t\t...opts,\n\t\t\t\tcallback: () => {\n\t\t\t\t\tconst booking = this._data.booking.clone();\n\t\t\t\t\tthis._data.booking.delete(opts).then(\n\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\tthis.close();\n\t\t\t\t\t\t\t// @TODO:API The deleted record is still being returned for quite some time regardless of timeout.\n\t\t\t\t\t\t\tthis._data.refresh()\n\t\t\t\t\t\t\t// this.timeout('refresh', () => this._data.refresh(), 1000);\n\t\t\t\t\t\t\t// Heap track event\n\t\t\t\t\t\t\tthis._service.analytics.track('delete', {\n\t\t\t\t\t\t\t\tbooking_id: booking.id,\n\t\t\t\t\t\t\t\toffice: booking.room.building.name,\n\t\t\t\t\t\t\t\troom: booking.room.name,\n\t\t\t\t\t\t\t\tstart_time: booking.startDateTz.ms,\n\t\t\t\t\t\t\t\tend_time: booking.endDateTz.ms,\n\t\t\t\t\t\t\t\tcatering: !!booking.catering.legth,\n\t\t\t\t\t\t\t\theadcount: booking?.expected_attendees[booking.room.email],\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\t(err) => {\n\t\t\t\t\t\t\tthis.displayWarningBanner(getStatusErrorMessage(err?.status));\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tautoFocus: false,\n\t\t\tbackdropClass: 'mck-modal-backdrop',\n\t\t});\n\t}\n\n\tpublic extendBooking() {\n\t\t// open the extend booking modal\n\t\tconst dialogRefX = this.dialog.open(BookingDurationModalComponent, {\n\t\t\tpanelClass: 'mck-noexpand',\n\t\t\tdata: {\n\t\t\t\tbooking: this._data.booking,\n\t\t\t\tmaximum: this.extendableMaximum,\n\t\t\t},\n\t\t\tautoFocus: false,\n\t\t\tbackdropClass: 'mck-modal-backdrop',\n\t\t});\n\n\t\tdialogRefX.afterClosed().subscribe((booking?: Booking) => {\n\t\t\tif (booking) {\n\t\t\t\tthis.updateBookingState(booking);\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic displayCancelModal() {\n\t\t// Can the display cancel modal open? If it isn't one of these statuses\n\t\treturn !['cancelled', 'expired', 'declined'].includes(this.status);\n\t}\n\n\n\tpublic confirmChanges(data: DateDurationData) {\n\t\t// Confirm the changes returned from the room availability modal.\n\t\tthis.mobile = data.mobile;\n\t\tthis.setAlternativeWeekStartDate(data.dateTz);\n\n\t\t// New booking flow has this.data\n\t\tif (this.data.value) {\n\t\t\tthis.fetchRooms(true, this.alternativeWeekStartDateTz);\n\t\t\t// submit\n\t\t\tthis.store.dispatch(storeBookingFormData({\n\t\t\t\tpayload: {\n\t\t\t\t\t...this.data.value,\n\t\t\t\t\tdateTz: data.dateTz,\n\t\t\t\t\tduration: data.duration,\n\t\t\t\t}\n\t\t\t}));\n\t\t} else if (data.save) {\n\t\t\t// update booking date/duration\n\t\t\tconst booking = this._data.booking.clone();\n\t\t\tconst pendingChanges = booking.duration !== data.duration || booking.startDateTz.ms !== data.dateTz.ms;\n\t\t\t// booking.duration = data.duration;\n\t\t\tbooking.startDateTz = data.dateTz; // date = data.dateTz.ms;\n\t\t\tbooking.endDateTz = data.dateTz.addValue({ minutes: data.duration });\n\t\t\tthis.loading = true;\n\n\t\t\tconst roomRules = rulesForSpace({\n\t\t\t\ttime: booking.date,\n\t\t\t\tduration: booking.duration,\n\t\t\t\tuser: this.currentUser,\n\t\t\t\trules: this._data.booking.room.building?.booking_rules,\n\t\t\t\tspace: booking.room\n\t\t\t});\n\n\t\t\t// Rooms requiring approval are reset to tentative when the time changes.\n\t\t\tif (pendingChanges && !roomRules?.auto_approve) {\n\t\t\t\t// https://acaprojects.atlassian.net/browse/MCK-1481\n\t\t\t\t/**\n\t\t\t\t * Having 2 ways of containing the status is icky but until PlaceOS\n\t\t\t\t * depreciates approval_status it's necessry.\n\t\t\t\t */\n\t\t\t\t// booking.approval_status[booking.room.email] = \"tentative\";\n\t\t\t\tbooking.status = \"tentative\";\n\t\t\t\tbooking.time_changed = true;\n\t\t\t}\n\t\t\telse if (roomRules.reason === SpaceFilterReason.OfficeRules) {\n\t\t\t\t// this.alertIfItHasConflict(false, true);\n\t\t\t\tthis.invalidDueToOfficeRule = true;\n\t\t\t\tthis.loading = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// booking.save() won't use the toAPIJSON conversion so use the booking service.\n\t\t\tthis._bookings.save(booking).then(\n\t\t\t\t(bkn) => {\n\t\t\t\t\t// update booking\n\t\t\t\t\tthis.updateBookingState(booking);\n\t\t\t\t\tthis.form = generateBookingForm(booking, this.available_fields);\n\t\t\t\t\tthis.loading = false;\n\t\t\t\t\tthis.displayInfoBanner();\n\t\t\t\t\tbooking.room.building.name\n\t\t\t\t\tthis._service.analytics.track('update', {\n\t\t\t\t\t\tbooking_id: booking.id,\n\t\t\t\t\t\toffice: booking.room.building.name,\n\t\t\t\t\t\troom: booking.room.global_name,\n\t\t\t\t\t\tstart_time: booking.startDateTz.ms,\n\t\t\t\t\t\tend_time: booking.endDateTz.ms,\n\t\t\t\t\t\tcatering: !!booking.catering.legth,\n\t\t\t\t\t\theadcount: booking.head_count,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t(err) => {\n\t\t\t\t\tthis.loading = false;\n\t\t\t\t\tthis.expandedAvailability = false;\n\t\t\t\t\tthis.displayWarningBanner(getStatusErrorMessage(err?.status));\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Open dialog if booking date and time is out of office rule\n\t * TO DO : Redundant code - same validaiton been applied over room detail while creating new booking - need to handle more graceful way. better if user been prohibited from choose future date if out of office rule on show avaialability calender itself\n\t * related to - https://acaprojects.atlassian.net/browse/MCK-2419\n\t */\n\n\talertIfItHasConflict(isBookable, isAvailable) {\n\t\t// this.isAlertDisplayed = true;\n\t\tconst data = {\n\t\t\theaderText: !isBookable ? SpaceConflictAlertModalData.NotBookableHeaderText : !isAvailable ? SpaceConflictAlertModalData.NotAvailableHeaderText : '',\n\t\t\tmessage: SpaceConflictAlertModalData.NotBookableDueToOfficeRule,\n\t\t\tbuttonLabel: 'Close',\n\t\t\tcallback: () => null,\n\t\t\tshouldClose: false\n\t\t};\n\t\tconst dialog = this.dialog.open(ConflictAlertModalComponent,\n\t\t\t{\n\t\t\t\tdata: data,\n\t\t\t\tpanelClass: 'mck-alert',\n\t\t\t\tautoFocus: false,\n\t\t\t\tbackdropClass: 'mck-modal-backdrop',\n\t\t\t\tdisableClose: !isBookable\n\t\t\t});\n\t}\n\n\n\n\tpublic displayInfoBanner() {\n\t\tthis.showInfoBanner = true;\n\t\tthis.timeout('close banner', () => {\n\t\t\tthis.showInfoBanner = false;\n\t\t}, 3000);\n\t}\n\n\tpublic displayWarningBanner(custom: string) {\n\t\tthis.warningMessage = custom;\n\t\tthis.showWarningBanner = true;\n\t\tthis.timeout('close banner', () => {\n\t\t\tthis.showWarningBanner = false;\n\t\t}, 10000);\n\t}\n\n\tpublic hideInfoBanner() {\n\t\tthis.showInfoBanner = false;\n\t}\n\n\tpublic hideWarningBanner() {\n\t\tthis.showWarningBanner = false;\n\t}\n\n\tpublic setAlternativeWeekStartDate(bookingDate: DateTZ) {\n\t\tif (!bookingDate) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.mobile) {\n\t\t\tthis.alternativeWeekStartDateTz = bookingDate.clone();\n\t\t} else {\n\t\t\tthis.alternativeWeekStartDateTz = bookingDate.clone().startOfValue('week').startOfValue('day');\n\t\t}\n\t}\n\n\tpublic updateCalendarWeekView(alternativeWeekStartDateTz: DateTZ) {\n\t\tthis.alternativeWeekStartDateTz = alternativeWeekStartDateTz.clone();\n\t\tthis.fetchRooms(true, this.alternativeWeekStartDateTz);\n\t}\n\n\tpublic fetchRooms(allWeek: boolean = true, alternativeWeekStartDateTz: DateTZ = null) {\n\t\tif (!this._data?.booking?.space?.id) {\n\t\t\treturn\n\t\t}\n\n\t\tconst day = 24 * 60;\n\t\tconst week = day * 7;\n\t\tconst date = (alternativeWeekStartDateTz || this._data?.booking?.startDateTz).clone(); // new DateTZ({date: alternativeWeekStartDateTz || this._data?.booking?.date});\n\t\tconst startOfDay = date.startOfValue('day').setValue({ second: 0, millisecond: 0 });\n\t\tconst startOfWeek = date.startOfValue('week');\n\n\t\t// Query for the entire day for this room\n\t\tconst query = {\n\t\t\tdateTz: allWeek ? startOfWeek : startOfDay,\n\t\t\tduration: allWeek ? week : day,\n\t\t\tlocations: this._data?.booking?.space?.id,\n\t\t\tcapacity: this._data?.booking?.space?.capacity,\n\t\t};\n\t\tthis.store.dispatch(loadByIdResults.request(query));\n\t}\n\n\tpublic addCatering() {\n\t\t// For the Add Catering button\n\t\tthis.showCatering = true;\n\t}\n\n\tpublic saveBookingWithCatering(form: FormGroup) {\n\t\t// Response from the catering modal closing\n\t\t// Close catering and confirmation modals and just show booking details modal\n\t\tif (!form) {\n\t\t\tthis.showCatering = false;\n\t\t\tthis.showDetails = false;\n\t\t\treturn;\n\t\t}\n\t\t// Update the booking state.\n\t\tconst booking = this._data.booking.clone();\n\t\tbooking.catering = form.controls.catering.value;\n\n\t\tif (booking.catering.length) {\n\t\t\tconst setup = {};\n\t\t\tsetup[booking.room.email] = booking.setup[booking.room.email] || 900;\n\t\t\tconst breakdown = {};\n\t\t\tbreakdown[booking.room.email] = booking.breakdown[booking.room.email] || 900;\n\n\t\t\tbooking.setup = setup\n\t\t\tbooking.breakdown = breakdown\n\t\t}\n\n\t\tthis.updateBookingState(booking);\n\t}\n\n\tpublic set specific_dates(val: boolean) {\n\t\tthis._specific_dates = val;\n\t}\n\n\tpublic get specific_dates(): boolean {\n\t\treturn this._specific_dates;\n\t}\n\n\n\tpublic toggleSpecificDates() {\n\t\tthis.specific_dates = !this.specific_dates;\n\t}\n\n\n}\n","\n
\n
\n
 
\n
\n \n

Your booking date and/or time was successfully updated

\n \n
\n
\n \n

{{ warningMessage }}

\n \n
\n \n \n
\n
\n
\n
\n \n Recurring booking status: {{ statusText }} \n
\n
\n \n
\n \n This is one occurrence in a recurring series which occurs every {{recurrence_interval > 1 ? recurrence_interval + ' Days' : 'Day'}} effective {{ _data?.master_booking?.dateString }} until {{ _data?.master_booking?.endDateString }}.\n \n \n This is one occurrence in a recurring series which occurs every {{recurrence_interval > 1 ? recurrence_interval + ' Weeks' : 'Week'}} effective {{ _data?.master_booking?.dateString }} until {{ _data?.master_booking?.endDateString }}.\n \n \n This is one occurrence in a recurring series which occurs every {{recurrence_interval > 1 ? recurrence_interval + ' Months' : 'Month'}} effective {{ _data?.master_booking?.dateString }} until {{ _data?.master_booking?.endDateString }}.\n \n \n This is one occurrence in a recurring series which occurs on Specific Dates effective {{ _data?.master_booking?.dateString }} until {{ _data?.master_booking?.endDateString }}\n
\n
\n
\n
{{ occurrence.dateTz.formatDate('dd MMM yyyy') }}
\n
\n
\n
\n
\n
\n
\n
\n \n Edit series\n \n \n \n
\n
\n\n
\n
\n

{{statusText}}

\n {{timeString}} \n
\n
\n
\n \n
\n

This is a multiroom booking. To request edits, please contact your local backoffice team.

\n
\n
\n
\n
\n \n
\n
\n
\n \n
\n \n
\n\n
\n
\n {{roomName}}\n
\n
\n {{roomLocation}}\n
\n
\n Capacity: {{capacity}}\n
\n \n
\n\n\n\n
\n\n \n \n
\n \n Cancel booking\n \n
\n \n
\n\n\n
\n \n\n
\n \n
\n \n
\n
\n
\n

\n \n Schedule\n

\n \n \n
\n\n

\n Date: {{dateString}}
\n Time: {{timeString}}
\n {{type}} meeting ({{durationString}})\n

\n \n {{ checkingExtendable ? 'Checking availability...' : 'Extend booking duration'}}\n \n
\n \n
\n
\n

\n \n

\n

\n \n \n \n

\n
\n \n\n \n
\n
\n
\n

\n Meeting\n

\n \n \n
\n \n
\n
Meeting title:   {{ title}}
\n
Host:   {{ host}}
\n
Attendees:   {{attendeesString}}\n
\n
Company:   {{companyString}}
\n
Charge code:   {{chargeCode}}
\n
Headcount estimate:   {{headcount}}
\n
Additional requirements:   {{requirements}}
\n
Email notification for this booking has been opt out.
\n
\n \n
\n
\n\n
\n
\n

\n \n

\n \n \n \n \n \n \n
\n
\n \n\n
\n
\n
\n \n
\n
\n \n
\n\n \n
\n\n \n
\n
\n \n \n \n

\n \n \n \n

\n \n \n
\n\n
\n
\n \n
\n

\n \n Catering\n

\n \n \n
\n Catering available for this room\n
\n \n \n
\n
\n\n \n
\n \n
\n

\n \n

\n

\n \n

\n \n
\n
\n
\n\n
\n
\n \n
\n
\n \n \n \n \n \n
\n\n \n
\n
\n\n
\n \n
\n \n \n
\n
\n
\n\n
\n \n
\n\n
\n \n
\n \n
\n
\n
\n\n
\n\n","import {\n Component,\n Inject,\n OnInit,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n BaseDirective,\n } from '@mckinsey-converge/base';\nimport {\n Booking,\n BookingsService,\n DEFAULT_BOOKING_DURATION,\n} from '@mckinsey-converge/data-common';\nimport {\n MAT_DIALOG_DATA,\n MatDialogRef\n} from '@angular/material/dialog';\nimport {\n FormControl,\n FormGroup,\n Validators\n} from '@angular/forms';\nimport * as cloneDeep from 'lodash/cloneDeep';\n\ninterface extendData {\n booking: Booking;\n maximum: number\n}\n\n@Component({\n selector: 'app-booking-duration-modal',\n template: `\n \n
\n \n

Your booking failed to update, please try again

\n \n
\n
\n \n
Extend booking duration
\n
\n
\n \n \n
\n
\n \n
\n
\n `,\n styleUrls: ['./booking-duration-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class BookingDurationModalComponent extends BaseDirective implements OnInit {\n\n public loading: string;\n public showWarningBanner: boolean = false;\n\n public get durationGroups() {\n const step = 15;\n const steps = Math.floor(this.data.maximum / step);\n const max = (steps * step) + this.data.booking.duration;\n\n return [{\n start: this.data.booking.duration,\n step,\n max\n }];\n }\n\n public formGroup = new FormGroup({\n date: new FormControl(this.data.booking.date, [Validators.required]),\n dateTz: new FormControl(this.data.booking.startDateTz, [Validators.required]),\n duration: new FormControl(DEFAULT_BOOKING_DURATION, [Validators.required]),\n });\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: extendData,\n private dialogRef: MatDialogRef,\n public _bookings: BookingsService,\n ) {\n super();\n }\n\n ngOnInit() {\n this.formGroup.setValue({\n date: this.data.booking.date,\n dateTz: this.data.booking.startDateTz,\n duration: this.data.booking.duration,\n });\n }\n\n public closeModal(booking?: Booking) {\n this.dialogRef.close(booking);\n }\n\n public updateBookingDuration() {\n const formData = this.formGroup.getRawValue();\n this.loading = 'Saving...';\n\n // clone booking to allow editing\n // const booking = this.data.booking.clone(); // this line commented for bug appearing in CNG-352. Used cloneDeep instead\n const booking = cloneDeep(this.data?.booking);\n booking.endDateTz = booking.startDateTz.addValue({ minutes: formData.duration });\n this._bookings.save(booking).then(\n () => {\n this.loading = null;\n this.closeModal(booking);\n },\n (err) => {\n this.loading = null;\n this.displayWarningBanner()\n }\n );\n }\n\n\n public displayWarningBanner() {\n this.showWarningBanner = true;\n this.timeout('close banner', () => {\n this.showWarningBanner = false;\n }, 10000);\n }\n\n public hideWarningBanner() {\n this.showWarningBanner= false;\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n OnInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { BookingResultsViewModel } from '../manage-bookings/manage-bookings.viewmodel';\nimport {\n BaseDirective,\n shorterLocalDateFormatString,\n timeWithZoneFormatString,\n startEndTimeFormatString,\n humaniseDuration,\n closestToTimeSlotTz,\n} from '@mckinsey-converge/base';\nimport { DateNow, DateTZ, localTimezone } from \"@mckinsey-converge/date-tz\";\nimport { Booking, BookingFormData, BookingStoreState, bookingTypeOptions, Building, BuildingCity, clearBookingFormData, defaultRoomSizeOption, DEFAULT_BOOKING_DURATION, flattenDisplayOffices, roomFormDataToQuery, roomSizeOptions, storeBookingFormData } from '@mckinsey-converge/data-common';\nimport { buildingStateSelector, BuildingStoreState, selectBuildingOptionsGroupedByCity } from '@mckinsey-converge/buildings';\nimport {\n select,\n Store\n} from '@ngrx/store';\nimport {\n BehaviorSubject,\n} from 'rxjs';\n\nimport { distinctUntilChanged, map } from 'rxjs/operators';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { loadRoomsForResults, loadRoomsForResultsMap } from '@mckinsey-converge/rooms';\nimport { MyBookingsStoreState } from '@mckinsey-converge/bookings';\nimport { UserStoreState } from '@mckinsey-converge/user';\n\nexport type RoomBookingStoreState = BookingStoreState & BuildingStoreState & MyBookingsStoreState & UserStoreState;\n@Component({\n selector: 'app-booking-result-item',\n templateUrl: './booking-result-item.component.html',\n styleUrls: ['./booking-result-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BookingResultItemComponent extends BaseDirective implements OnInit {\n /**\n * If undefined, we display in loading state.\n */\n @Input()\n public viewModel: BookingResultsViewModel | undefined;\n \n @Input()\n public bookings: BookingResultsViewModel[];\n\n @Input()\n public list: string;\n\n @Input() public index: number;\n\n @Input() public small: boolean = false;\n\n @Output()\n public bookingSelect = new EventEmitter();\n\n public buildings = new BehaviorSubject[]>([]);\n\n public roomName: string;\n public roomLocation: string;\n public host: string;\n public status: string;\n public timeStringParts: string[] = [' ', ' '];\n public localTimeStringParts: string[] = [' ', ' '];\n public isAnotherTimezone: boolean = false;\n public statusText: string;\n public statusImage: string;\n public durationString: string;\n public timeRangeString: string;\n public building: any;\n public get dateString() {\n if (!this.bookings || !this.bookings.length) return '';\n const bkn1 = this.bookings[this.index].booking;\n const d1 = new DateTZ({ date: bkn1.startDateTz.ms, is_local_tz: false, building_tz: bkn1.startDateTz.building_tz });\n if (this.index === 0) {\n return shorterLocalDateFormatString(d1);\n }\n const bkn2 = this.bookings[this.index - 1].booking;\n const d2 = new DateTZ({ date: bkn2.startDateTz.ms, is_local_tz: false, building_tz: bkn2.startDateTz.building_tz });\n if (!d1.isSameDate(d2, 'day')) {\n return shorterLocalDateFormatString(d1);\n }\n return '';\n }\n public get todayString() {\n if (!this.bookings || !this.bookings.length) {\n return '';\n }\n \n // Strip the booking of it's timezone infomation so isSameDate is just based on timestamp and local time.\n const d1 = new DateTZ({ date: this.bookings[this.index].booking.startDateTz.ms });\n return DateNow(new Date()).isSameDate(d1, 'day') ? '(Today)' : '';\n }\n\n public get attendeesCount(): number {\n // allAttendees is booking.attendees + 1 (booking.organizer)\n return this.viewModel.booking?.allAttendees.length; \n }\n\n public get has_catering(): number {\n return this.viewModel.booking?.has_catering && this.viewModel.booking?.catering?.length;\n }\n\n public get upcoming() {\n return ['tentative', 'accepted', 'approved'].includes(this.status);\n }\n\n constructor(private store: Store,\n private cdRef: ChangeDetectorRef) {\n super();\n }\n\n public ngOnInit(): void {\n this.setupDisplayFields();\n this.subscription('buildings', this.store.pipe(\n select(buildingStateSelector),\n select(selectBuildingOptionsGroupedByCity),\n map((grouped: Map) => {\n return flattenDisplayOffices(grouped);\n }),\n distinctUntilChanged()\n ).subscribe(next => {\n this.buildings.next(next);\n }));\n this.cdRef.detectChanges();\n }\n\n public hasData() {\n return this.viewModel !== undefined;\n }\n\n public getTooltipText(){\n return this.viewModel.booking.local_room_name.split(',');\n }\n\n public setupDisplayFields() { \n if (!this.viewModel?.booking) {\n return;\n }\n this.timeStringParts = timeWithZoneFormatString(this.viewModel.booking.startDateTz).split(' ');\n this.timeRangeString = startEndTimeFormatString(this.viewModel.booking.startDateTz, this.viewModel.booking.displayEndDateTz);\n this.isAnotherTimezone = !this.viewModel.booking.startDateTz.is_local_tz;\n this.localTimeStringParts = timeWithZoneFormatString(this.viewModel.booking.startDateTz.toZone(localTimezone())).split(' ');\n this.host = this.viewModel.booking.organiser.name;\n this.roomName = this.viewModel.booking.local_room_name.split(',')[0];\n this.roomLocation = this.viewModel.booking.room.street_and_city;\n this.durationString = humaniseDuration(this.viewModel.booking.duration, 'medium');\n\n if (this.viewModel.booking.status) {\n // mark bookings before today expired\n this.status = (DateNow(new Date()).isAfterDate(this.viewModel.booking.endDateTz) && this.list !== 'cancelled') ? 'expired' : this.viewModel.booking.status;\n switch(this.status) {\n case 'tentative':\n this.statusImage = 'assets/icon/booking_pending.svg';\n this.statusText = 'Pending';\n break;\n case 'accepted':\n this.statusImage = 'assets/icon/booking_confirmed.svg';\n this.statusText = 'Confirmed';\n break;\n case 'approved':\n this.statusImage = 'assets/icon/booking_confirmed.svg';\n this.statusText = 'Confirmed';\n break;\n case 'declined':\n this.statusImage = 'assets/icon/booking_cancelled.svg';\n this.statusText = 'Cancelled';\n break;\n case 'cancelled':\n this.statusImage = 'assets/icon/booking_cancelled.svg';\n this.statusText = 'Cancelled';\n break;\n case 'expired':\n this.statusImage = 'assets/icon/booking_expired.svg';\n this.statusText = 'Expired';\n break;\n default: // TODO\n this.statusImage = 'assets/icon/booking_expired.svg';\n this.statusText = 'Expired';\n break;\n }\n }\n this.cdRef.detectChanges();\n return;\n }\n\n}\n","

\n {{ dateString }} {{ todayString }}\n

\n
\n
\n
\n
\n
\n {{ timeStringParts[0] }} ({{ timeStringParts[1] }}) ({{\n durationString\n }})\n
\n
\n {{ localTimeStringParts[0] }} ({{ localTimeStringParts[1] }}) in your\n local timezone\n
\n
\n
\n \n \n \n \n \n
\n
\n
\n
\n
{{ statusText }}
\n
\n {{ timeRangeString }}\n
\n
\n \n
\n
\n
\n
\n
\n
\n \n \n
{{ viewModel.booking.title }}
\n {{\n viewModel.booking.bookingTypeLabel\n }}\n \n {{viewModel.booking?.merged ? 'Merged' : 'Multiroom'}} \n \n \n
\n \n \n \n
\n
\n \n {{ roomName }}\n {{ roomLocation }}\n Host: {{ host }}\n {{ attendeesCount }}pp\n Catered\n \n \n \n \n \n \n \n \n
\n
\n
\n\n
\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { RoomBookingComponent } from 'src/app/booking/room-booking/room-booking.component';\nimport { RoomResultsComponent } from 'src/app/booking/room-results/room-results.component';\nimport { RoomDetailsComponent } from 'src/app/booking/room-details/room-details.component';\nimport { BookingCreateComponent } from './booking-create/booking-create.component';\nimport { BookingEditWrapperComponent } from './booking-create/booking-edit-wrapper.component';\nimport { RoomFiltersModalComponent } from 'src/app/booking/room-filters-modal/room-filters-modal.component';\nimport { ManageBookingsComponent } from './manage-bookings/manage-bookings.component';\nimport { OfficeFloorComponent } from './office-floor/office-floor/office-floor.component';\n\nconst routes: Routes = [\n {\n path: 'results',\n component: RoomResultsComponent,\n },\n {\n path: 'results/filter',\n component: RoomFiltersModalComponent,\n },\n {\n path: 'results/room',\n component: RoomDetailsComponent,\n },\n {\n path: 'create',\n component: BookingCreateComponent,\n },\n {\n path: 'edit',\n component: BookingEditWrapperComponent,\n },\n {\n path: 'manage',\n component: ManageBookingsComponent,\n },\n {\n path: 'catering/:id',\n data: { hasCatering: true },\n component: ManageBookingsComponent,\n },\n {\n path: 'booking/:id/:verb',\n component: ManageBookingsComponent,\n },\n {\n path: 'booking/:id',\n component: ManageBookingsComponent,\n },\n {\n path: 'floor-map',\n component: OfficeFloorComponent,\n },\n {\n path: 'results/booking-calendar',\n loadChildren: () => import('./booking-calendar/booking-calendar.module').then((m) => m.BookingCalendarModule),\n },\n {\n path: '**',\n component: RoomBookingComponent,\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class BookingRoutingModule {}\n","import {\n createReducer,\n on\n} from '@ngrx/store';\nimport { \n BookingFormState,\n clearBookingFormData,\n clearRoomFilters,\n openBookingSurvey,\n storeBookingFormData,\n storeRoomFilters\n} from '@mckinsey-converge/data-common';\nimport { closestToTimeSlotTz } from '@mckinsey-converge/base';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\n\nexport const initialBookingFormState: BookingFormState = {\n activeFormFilters: []\n};\n\nexport const bookingFormReducer = createReducer(initialBookingFormState,\n on(storeBookingFormData, (state: BookingFormState, action) => {\n return {\n ...state,\n activeForm: {\n ...state.activeForm,\n ...action.payload\n }\n } as BookingFormState;\n }),\n on(clearBookingFormData, state => ({\n ...state,\n activeForm: \n {\n location: state?.activeForm?.location,\n timezone: state?.activeForm?.timezone,\n dateTz: closestToTimeSlotTz(new DateTZ({ date: Date.now(), is_local_tz: false, building_tz: state?.activeForm?.timezone, }), 15)\n \n }\n }) as BookingFormState),\n on(openBookingSurvey, state => ({\n ...state,\n bookingCompleted: new Date()\n }) as BookingFormState),\n on(storeRoomFilters, (state: BookingFormState, action) => {\n return {\n ...state,\n activeFormFilters: action.payload\n } as BookingFormState;\n }),\n on(clearRoomFilters, (state: BookingFormState) => ({\n ...state,\n activeFormFilters: initialBookingFormState.activeFormFilters\n }) as BookingFormState)\n);\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { BookingRoutingModule } from './booking-routing.module';\nimport { BookingsListingComponent } from './bookings-listing/bookings-listing.component'\nimport { RoomBookingComponent } from './room-booking/room-booking.component';\nimport { RoomDetailsComponent } from './room-details/room-details.component';\nimport { BookingFormBaseComponent } from './booking-create/booking-form-base.component';\nimport { BookingCreateComponent } from './booking-create/booking-create.component';\nimport { BookingEditComponent } from './booking-create/booking-edit.component';\nimport { BookingConfirmationComponent } from './booking-confirmation/booking-confirmation.component';\nimport { UiModule } from '@mckinsey-converge/ui';\nimport { NgxMatSelectSearchModule } from 'ngx-mat-select-search';\nimport { MatSelectModule } from '@angular/material/select';\nimport {\n FormsModule,\n ReactiveFormsModule\n} from '@angular/forms';\nimport { SharedContentModule } from 'src/app/shared/shared.module';\nimport { MatButtonModule } from '@angular/material/button';\nimport { StoreModule } from '@ngrx/store';\nimport { bookingFormReducer } from 'src/app/booking/booking.form.reducer';\nimport { BookingResultItemComponent } from './booking-result-item/booking-result-item.component';\nimport { BookingDetailsModalComponent } from './booking-details-modal/booking-details-modal.component';\nimport { BookingDurationModalComponent } from './booking-duration-modal/booking-duration-modal.component';\nimport { CancelBookingModalComponent } from './cancel-booking-modal/cancel-booking-modal.component';\nimport { ManageBookingsComponent } from './manage-bookings/manage-bookings.component';\nimport { RoomResultsComponent } from './room-results/room-results.component';\nimport { SearchedLocationComponent } from './searched-location/searched-location.component';\nimport { ResultsHeaderComponent } from './results-header/results-header.component';\nimport { RoomAvailabilityPreviewComponent } from './room-availability-preview/room-availability-preview.component';\nimport { RoomLocationPreviewComponent } from './room-location-preview/room-location-preview.component';\nimport { RoomResultItemComponent } from './room-result-item/room-result-item.component';\nimport { RoomBookingFormComponent } from './room-booking-form/room-booking-form.component';\nimport { RoomBookingDetailsFormComponent } from './room-booking-details-form/room-booking-details-form.component';\nimport { RoomBookingModalComponent } from './room-booking-modal/room-booking-modal.component';\nimport { RoomResultsPaginatedComponent } from './room-results-paginated/room-results-paginated.component';\nimport { RoomFiltersModalComponent } from './room-filters-modal/room-filters-modal.component';\nimport { RoomFiltersFormComponent } from './room-filters-form/room-filters-form.component';\nimport { RoomAvailabilityPreviewModalComponent } from './room-availability-preview-modal/room-availability-preview-modal.component';\nimport { MapModule } from 'src/app/map/map.module';\nimport { OfficeFloorMapModule } from 'src/app/booking/office-floor/office-floor-map.module';\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\nimport { RoomResultsSectionComponent } from './room-results-section/room-results-section.component';\nimport { CalendarModule, DateAdapter } from 'angular-calendar';\nimport { adapterFactory } from 'angular-calendar/date-adapters/date-fns';\nimport { BookingCateringComponent } from './catering/catering.component';\nimport { OrderTableComponent } from './catering/order-table/order-table.component';\nimport { BookingCateringOrderDetailsComponent } from './catering/order-details/order-details.component';\nimport { BookingCateringOrderListComponent } from './catering/order-list/order-list.component';\nimport { CateringOrderListItemComponent } from './catering/order-list/item/item.component';\nimport { CateringMenuCategoryComponent } from './catering/order-details/category/category.component';\nimport { SurveyModalComponent } from '../components/survey-modal/survey-modal.component';\nimport { BookingEditWrapperComponent } from './booking-create/booking-edit-wrapper.component';\n\nexport const bookingModuleDeclarations = [\n BookingFormBaseComponent,\n BookingCreateComponent,\n BookingEditComponent,\n BookingConfirmationComponent,\n BookingDetailsModalComponent,\n BookingDurationModalComponent,\n BookingsListingComponent,\n BookingResultItemComponent,\n CancelBookingModalComponent,\n ManageBookingsComponent,\n BookingCateringComponent,\n BookingCateringOrderDetailsComponent,\n BookingCateringOrderListComponent,\n CateringMenuCategoryComponent,\n CateringOrderListItemComponent,\n RoomBookingComponent,\n RoomDetailsComponent,\n RoomResultsComponent,\n SearchedLocationComponent,\n ResultsHeaderComponent,\n RoomAvailabilityPreviewComponent,\n RoomLocationPreviewComponent,\n RoomResultItemComponent,\n RoomBookingModalComponent,\n RoomBookingFormComponent,\n RoomBookingDetailsFormComponent,\n RoomResultsPaginatedComponent,\n RoomFiltersModalComponent,\n RoomFiltersFormComponent,\n RoomResultsSectionComponent,\n RoomAvailabilityPreviewModalComponent,\n CateringMenuCategoryComponent,\n OrderTableComponent,\n SurveyModalComponent,\n BookingEditWrapperComponent\n];\n\nexport const bookingModuleImports = [\n CommonModule,\n UiModule,\n MatSelectModule,\n MatButtonModule,\n NgxMatSelectSearchModule,\n ReactiveFormsModule,\n SharedContentModule,\n FormsModule,\n NgxSkeletonLoaderModule,\n MapModule,\n CalendarModule.forRoot({\n provide: DateAdapter,\n useFactory: adapterFactory,\n }),\n OfficeFloorMapModule\n];\n\n\n@NgModule({\n declarations: [...bookingModuleDeclarations],\n imports: [\n ...bookingModuleImports,\n BookingRoutingModule,\n StoreModule.forFeature('bookingForm', bookingFormReducer)\n ]\n})\nexport class BookingModule {\n}","import { Component, Input, OnInit, OnChanges, ChangeDetectionStrategy, ChangeDetectorRef, NgZone } from '@angular/core';\nimport { throttleTime, tap, first, distinctUntilChanged, map } from 'rxjs/operators';\nimport { fromEvent } from 'rxjs';\nimport { TopBarHeaderMode } from 'src/app/components/topbar-header/topbar-header.component';\nimport { select, Store } from '@ngrx/store';\nimport { BehaviorSubject } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { BuildingStoreState, buildingStateSelector, selectBuildingOptionsGroupedByCity } from '@mckinsey-converge/buildings';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Booking, User, IEngineResponse, BookingStoreState, clearBookingFormData, BookingsService, UsersService, flattenDisplayOffices, BuildingCity, Building } from '@mckinsey-converge/data-common';\nimport { UserStoreState } from '@mckinsey-converge/user';\nimport { loadBookingsWithQuery, loadUpcomingBookingsResults, MyBookingsStoreState } from '@mckinsey-converge/bookings';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport {\n mapResultsToViewModels,\n BookingResultsViewModel,\n} from 'src/app/booking/manage-bookings/manage-bookings.viewmodel';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport { BookingDetailsModalComponent } from '../booking-details-modal/booking-details-modal.component';\nimport { BookingPagination } from '@mckinsey-converge/bookings';\nimport { DateNow } from '@mckinsey-converge/date-tz';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { loadRoomsForResults } from '@mckinsey-converge/rooms';\n\nexport type ManageBookingsStoreState = BookingStoreState &\n BuildingStoreState &\n MyBookingsStoreState &\n UserStoreState;\n\n@Component({\n selector: 'app-bookings-listing',\n templateUrl: './bookings-listing.component.html',\n styleUrls: ['./bookings-listing.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BookingsListingComponent extends BaseDirective implements OnInit, OnChanges {\n @Input() public config: any;\n @Input() public buildings: BehaviorSubject[]>;\n @Input() public searchBookingBy: string;\n @Input() public selectedHost: string;\n @Input() public activeTab: string;\n\n public bookingResults = new BehaviorSubject>(\n LoadingModel.empty()\n );\n public bookings: BookingResultsViewModel[];\n public showBookings = false;\n public reloading = false;\n public TopBarHeaderMode = TopBarHeaderMode;\n public mobile: boolean = false;\n\n /** Current User */\n public currentUser: User;\n master_booking: BookingResultsViewModel;\n allBookings: any[];\n\n public pagination: BookingPagination = {\n currentPage: 1,\n totalRecords: 0,\n pageLimit: 10,\n };\n bookingPerPage: any[] = [];\n filteredByHost: any[] = [];\n\n public get lastPage() {\n return this.pages.total === this.pagination.currentPage;\n }\n\n public get pages() {\n const p = this.pagination;\n const total = Math.ceil(p.totalRecords / p.pageLimit) ;\n const group = Math.ceil(p.currentPage / 5);\n const startPosition = Math.max(\n 1,\n Math.min(group > 1 ? (group - 1) * (p.pageLimit + 1) : 1, total - 4)\n );\n let pages = [];\n for (let x = startPosition; x <= Math.min(startPosition + 4, total); x++) {\n pages.push(x);\n }\n if (!pages.length) {\n pages.push(1);\n }\n const maxed = () => {\n if (total <= 5 || p.currentPage >= total) {\n return false;\n }\n return true;\n };\n const mined = () => {\n if (total <= 5 || p.currentPage < 6) {\n return false;\n }\n return true;\n };\n const start = p.currentPage > 5;\n const end = !(p.currentPage >= total);\n return {\n total,\n pages,\n min: mined(),\n max: maxed(),\n start,\n end,\n };\n }\n\n constructor(\n private store: Store,\n private _route: ActivatedRoute,\n private _router: Router,\n private dialog: MatDialog,\n private _bookings: BookingsService,\n private _zone: NgZone,\n private cdRef: ChangeDetectorRef\n ) {\n super();\n }\n\n public ngOnInit(): void {\n const breakpoint = 450;\n const selector = this.config.selector;\n const target = this.config.type;\n\n this.subscription(\n 'currentUser',\n this.store\n .select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n \n })\n );\n\n this.subscription('buildings', this.store.pipe(\n select(buildingStateSelector),\n select(selectBuildingOptionsGroupedByCity),\n map((grouped: Map) => {\n return flattenDisplayOffices(grouped);\n }),\n distinctUntilChanged()\n ).subscribe(next => {\n // this.buildings.next(next);\n if(this.activeTab === this.config.type) {\n this.store.dispatch(\n loadBookingsWithQuery({\n email: this.currentUser.email,\n from: DateNow(new Date()).ms,\n target,\n offset: 0,\n })\n );\n }\n\n // start the timer at the top of the minute;\n const offset = DateNow(new Date()).startOfValue('minute').addValue({ minutes: 1 }).ms - DateNow(new Date()).ms;\n // fetch it on one minute interval now that there is room data.\n setTimeout(() => {\n this.refresh(target);\n this._zone.runOutsideAngular(() => {\n this.interval('refreshBookings', () => this.refresh(target, true), 60 * 1000);\n });\n\n }, offset + 5000);\n\n \n }));\n\n\n\n const sort_asc = (a, b) => a.date - b.date;\n const sort_desc = (a, b) => b.date - a.date;\n\n this.subscription(\n 'bookingResults',\n this.store.pipe(select(selector)).subscribe((next) => {\n this.bookingResults.next(next);\n if (!next.isEmpty() && Array.isArray(next?.success?.results)) {\n let results = [...next?.success?.results].sort(\n this.config.reverse_sort ? sort_desc : sort_asc\n );\n this.showBookings = !!results.length;\n this.reloading = false;\n // save all bookings to reuse later \n this.allBookings = results;\n \n /** Filter all booings of active tab by selected host if any */\n this.filterBySelectedHost(true);\n\n } else {\n this.showBookings = false;\n this.reloading = false;\n this.bookings = [];\n this.pagination.totalRecords = 0;\n this.cdRef.detectChanges();\n }\n })\n );\n\n if (window) {\n this.mobile = window.innerWidth < breakpoint;\n\n }\n\n fromEvent(window, 'resize')\n .pipe(throttleTime(500))\n .pipe(\n tap({\n next: (val) => {\n const target = val.target as Window;\n this.mobile = target.innerWidth < breakpoint;\n },\n })\n ).subscribe();\n \n this.timeout('query', () =>\n this.subscription(\n 'route.query',\n this._route.queryParamMap.subscribe((params) => {\n if (params.has('page')) this.setPage(+params.get('page'), false);\n })\n )\n );\n }\n\n //For each result from results, it find its level and building from the lists and map with BookingResultsViewModel but filter all master from list.\n public getViewModel = (results) => mapResultsToViewModels(results).filter(b => !(b.booking.is_recurrent && b.booking.recurrence_type === 'master'));\n\n\n public splitArrayIntoSubarrays(originalArray, subarrayLength) {\n var newArray = [];\n for (var i = 0; i < originalArray.length; i += subarrayLength) {\n newArray.push(originalArray.slice(i, i + subarrayLength));\n }\n return newArray;\n }\n\n\n public ngOnChanges($change: any) {\n \n if ($change?.buildings?.currentValue !== $change?.buildings?.previousValue || $change?.activeTab?.currentValue !== $change?.activeTab?.previousValue) {\n this.refresh(this.config.type);\n }\n if ($change?.selectedHost?.currentValue !== $change?.selectedHost?.previousValue) {\n this.filterBySelectedHost(true);\n } else\n if ($change?.searchBookingBy?.currentValue !== $change?.searchBookingBy?.previousValue) {\n this.filterBySelectedHost(false);\n }\n }\n\n\n\n public filterBySelectedHost(isHostChanged: boolean) {\n\n // Converting search value to lower case for case-insensitive comparison\n const searchHost = this.selectedHost.toLowerCase().trim();\n // this.filteredByHost = [];\n\n if(this.allBookings) {\n\n if(searchHost) {\n if(isHostChanged) {\n // Combining event list and space arrays into one arrya for searchig \n const allItems = [...this.allBookings];\n // Filtering the combine array to find matching host email \n this.filteredByHost = allItems.filter( (item: any ) => \n this.isIncludes(item?.host, 'email', searchHost) ||\n this.isIncludes(item?.organiser, 'email', searchHost)\n );\n }\n else {\n this.filteredByHost = [...this.filteredByHost];\n }\n \n }\n else {\n this.filteredByHost = [...this.allBookings];\n }\n\n //Now send filtered booking by host to filter further by search input given in the field\n this.filterBookingsBySearchValue([...this.filteredByHost]);\n\n \n }\n }\n\n \n public isIncludes = (item: any, field: string, searchVaue: string) => (item && item[field] && item[field].toLowerCase().includes(searchVaue));\n\n public filterBookingsBySearchValue(filteredByHost) {\n\n // Converting search value to lower case for case-insensitive comparison\n const searchValue = this.searchBookingBy.toLowerCase().trim();\n let filteredItems = [];\n\n if(filteredByHost) {\n\n if(searchValue) {\n // Combining event list and space arrays into one arrya for searchig \n const allItems = [...filteredByHost];\n // Filtering the combine array to find matching room or booking \n filteredItems = allItems.filter( (item: any ) => \n this.isIncludes(item, 'title', searchValue) ||\n this.isIncludes(item?.creator, 'name', searchValue) ||\n this.isIncludes(item?.organiser, 'name', searchValue) ||\n this.isIncludes(item, 'local_room_name', searchValue) || // search with room name \n this.isIncludes(item, 'simple_name', searchValue) || \n (item?.attendees && !!item?.attendees.filter(el => el.name.toLowerCase().includes(searchValue)).length ) \n );\n }\n else {\n filteredItems = [...filteredByHost];\n }\n\n const filteredBookings = this.getViewModel(filteredItems);\n \n this.pagination.totalRecords = filteredBookings.length;\n this.pagination.currentPage = !this.lastPage ? 1 : this.pagination.currentPage;\n this.bookingPerPage = this.splitArrayIntoSubarrays(filteredBookings, this.pagination.pageLimit);\n this.bookings = this.bookingPerPage[this.pagination.currentPage-1];\n this.cdRef.detectChanges();\n }\n \n }\n\n \n\n\n\n\n public showResults() {\n // Don't show the loading state while we're reloading with Building details.\n return this.reloading; // || !this.bookingResults?.value?.isLoading;\n }\n\n public getBuilding(booking: Booking) {\n if (this.buildings && booking.building_zone) {\n return this.buildings.value.find((b) => booking.building_zone === b.value)?.meta.building;\n }\n return null;\n }\n\n // From the Manage Bookings page\n public async viewBooking(viewModel: BookingResultsViewModel) {\n\n if(viewModel.booking.is_recurrent) {\n let booking = this.allBookings.find(bkn => bkn.id === viewModel.booking.recurrence_master_id && bkn.recurrence_type === 'master1') ;\n if (!booking) {\n booking = await this._bookings.show(viewModel.booking.recurrence_master_id);\n }\n this.master_booking = mapResultsToViewModels([booking])[0];\n }\n this.cdRef.detectChanges();\n\n // real booking.room here.\n const dialogRefX = this.dialog.open(BookingDetailsModalComponent, {\n panelClass: 'mck-modal-wide-manage-booking',\n data: {\n booking: viewModel.booking,\n refresh: () => {\n this.refresh('all');\n },\n\n building: this.getBuilding(viewModel.booking),\n master_booking: this.master_booking?.booking || null,\n },\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n\n dialogRefX.afterClosed().subscribe((flag) => {\n flag !== 'DoNotClearActiveForm' && this.clearFormAndResultData();\n this.cdRef.detectChanges();\n // this.timeout('refreshBookings', () => this.refresh('all'), 1000);\n // this.timeout('refreshBookings', () => this.refresh('all'), 5000);\n });\n }\n\n public clearFormAndResultData() {\n this.store.dispatch(clearBookingFormData());\n this.store.dispatch(loadRoomsForResults.clear());\n this.cdRef.detectChanges();\n }\n\n public readonly prevPage = () => this.setPage(this.pagination.currentPage - 1);\n public readonly nextPage = () => this.setPage(this.pagination.currentPage + 1);\n public readonly prevGroup = () => this.setPage(this.pages.pages.length);\n public readonly nextGroup = () => this.setPage(this.pages.pages.length + 1);\n public readonly gotoPage = (page: number) => this.setPage(page);\n\n public setPage(page_idx: number, route: boolean = true) {\n if (!this.pages.total) return;\n const page = Math.max(1, Math.min(page_idx, this.pages.total));\n if (route) this._router.navigate([], { relativeTo: this._route, queryParams: { page } });\n this.pagination.currentPage = page;\n this.bookings = this.bookingPerPage[this.pagination.currentPage-1];\n this.cdRef.detectChanges();\n // this.refresh();\n }\n\n public refresh(target: string = this.activeTab, dontShowReloading = false) {\n if (!this.currentUser?.email) {\n return;\n }\n\n \n const offset = 0 ; //(this.pagination.currentPage - 1) * this.pagination.pageLimit;\n // fetch it on one minute interval now that there is room data.\n if(this.activeTab === this.config.type) {\n\n this.store.dispatch(\n loadBookingsWithQuery({\n email: this.currentUser.email,\n from: DateNow(new Date()).ms,\n target:this.activeTab,\n offset,\n })\n );\n this.reloading = !dontShowReloading;\n this.cdRef.detectChanges();\n }\n \n\n \n\n \n }\n\n identify(index, item) {\n return item.booking.id;\n }\n}\n","
\n \n \n
\n
\n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n \n

End of list. You have no upcoming bookings

\n
\n
\n \n

End of list. Past meetings are saved for up to 48 hours.

\n
\n
\n \n

End of list. Cancelled meetings are saved for up to 48 hours.

\n
\n
\n
\n \n \n \n \n
\n
\n
\n
    \n
  • \n
  • 1
  • \n
  • ...
  • \n
  • \n {{p}}\n
  • \n
  • ...
  • \n
  • \n {{pages.total}}\n
  • \n
  • \n
\n
","import { Component, Inject, ViewEncapsulation } from '@angular/core';\nimport {\n dateBuildingFormatString,\n startEndTimeWithZoneFormatString,\n} from '@mckinsey-converge/base';\nimport { Booking, Building, RecurrencePeriod } from '@mckinsey-converge/data-common';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { BaseClass } from '@mckinsey-converge/base';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\n\ninterface data {\n booking: Booking;\n building: Building;\n callback: Function;\n master_booking?: Booking;\n hasLoaderUrl?: boolean;\n refresh?: Function;\n\t\tseries?:{};\n}\n\n@Component({\n selector: 'app-cancel-booking-modal',\n template: `\n \n
\n \n
\n
\n \n
{{ subtitle }}
\n
\n
\n

{{ data.booking.title }}

\n\n \n

\n Daily from \n \n

\n weekly on {{ data?.master_booking?.recurrence_days[0] | titlecase }}\n

\n

from

\n \n Monthly on \n\n {{ data?.master_booking?.dateString }} until\n {{ data?.master_booking?.endDateString }}\n

\n \n \n Specific Dates: \n
\n
\n
Date
\n
\n
\n {{ occurrence.dateTz.formatDate('dd MMM yyyy') }}\n
\n
\n
\n
\n
\n
\n\n

{{ dateString }}

\n

{{ timeString }}

\n

{{ buildingAddress }}

\n

{{ data.booking.room.local_room_name }}

\n \n
\n \n
\n
\n `,\n styleUrls: ['./cancel-booking-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class CancelBookingModalComponent extends BaseClass {\n public title: string;\n public roomName: string;\n public buildingAddress: string;\n public dateString: string;\n public timeString: string;\n public canceled = false;\n private _specific_dates = false;\n private recurrence_period: RecurrencePeriod;\n public occurrence_details: { start_epoch: number; dateTz: DateTZ; id: string }[];\n private recurrence_interval: number;\n\n public get subtitle() {\n return this.canceled\n ? `${this.title} booking cancelled`\n : this.data?.series\n ? 'Are you sure you want to cancel this recurring series?'\n : 'Are you sure you want to cancel this booking?';\n }\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: data,\n private dialogRef: MatDialogRef\n ) {\n super();\n this.dateString = dateBuildingFormatString(this.data.booking.startDateTz, true);\n this.timeString = startEndTimeWithZoneFormatString(this.data.booking.startDateTz, this.data.booking.displayEndDateTz);\n this.title = this.data.booking.title;\n this.buildingAddress = this.data.booking.room.street_and_city;\n\n\n\t\t\t\tif(this.data?.master_booking !== null) {\n\n\t\t\t\t\tthis.recurrence_period = this.data?.master_booking?.recurrence_period;\n\t\t\t\t\tthis.recurrence_interval = this.data?.master_booking?.recurrence_interval;\n\n\t\t\t\t\tthis.occurrence_details = this.data?.master_booking?.occurrence_details &&\n\t\t\t\t\t\tthis.data?.master_booking?.occurrence_details\n\t\t\t\t\t\t\t.filter((ocurrence) => ocurrence.id !== this.data?.master_booking?.id)\n\t\t\t\t\t\t\t.map((ocurrence) => ({\n\t\t\t\t\t\t\t\t...ocurrence,\n\t\t\t\t\t\t\t\tstart_epoch: ocurrence.start_epoch * 1000,\n\t\t\t\t\t\t\t\tdateTz: new DateTZ({\n\t\t\t\t\t\t\t\t\tdate: ocurrence.start_epoch * 1000,\n\t\t\t\t\t\t\t\t\tis_local_tz: false,\n\t\t\t\t\t\t\t\t\tbuilding_tz: this.data.master_booking.timezone,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t}));\n\t\t\t\t}\n\n }\n\n public closeModal() {\n this.dialogRef.close();\n }\n\n public cancelBooking() {\n this.canceled = true;\n this.data.callback();\n this.timeout('closeModal', () => this.closeModal(), 2000);\n }\n\n public set specific_dates(val: boolean) {\n this._specific_dates = val;\n }\n\n public get specific_dates(): boolean {\n return this._specific_dates;\n }\n\n public toggleSpecificDates() {\n this.specific_dates = !this.specific_dates;\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n OnInit\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport {\n Booking,\n Building,\n CateringOrder,\n Space,\n bookingStatusDetails,\n ApplicationService,\n CateringCategory,\n BookingsService,\n DataForConfirmation,\n getLastDateFromList\n} from '@mckinsey-converge/data-common';\nimport {\n DialogEvent,\n HashMap,\n shorterLocalDateFormatString\n} from '@mckinsey-converge/base';\nimport {\n BaseDirective,\n dateBuildingFormatString,\n startEndTimeWithZoneFormatString,\n humaniseDuration,\n toTitleCase\n} from '@mckinsey-converge/base';\nimport { TopBarHeaderMode } from 'src/app/components/topbar-header/topbar-header.component';\nimport {\n CateringDetailsModalComponent,\n CateringDetailsModalData\n} from '@mckinsey-converge/legacy-overlays';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\nexport interface BookingFlowEvent {\n /** Type of flow event */\n type: 'previous' | 'next' | 'reset' | 'close' | 'error';\n /** Step which the event was emitted from */\n step: string;\n /** Additional metadata for the event */\n metadata?: HashMap;\n}\n\n@Component({\n selector: 'booking-catering',\n templateUrl: './catering.component.html',\n styleUrls: ['./catering.component.scss']\n})\nexport class BookingCateringComponent extends BaseDirective implements OnInit {\n /** Form fields for the booking */\n @Input() public form: FormGroup;\n /** Emitter for flow update events */\n @Output() public event = new EventEmitter();\n @Input() public booking: Booking;\n @Input() public isOccurence: boolean;\n /** Emitter for open catering */\n @Output() public showCatering = new EventEmitter();\n /**\n * placeIntoModal: Input decorator indecate as a flag to adapt component design into a dialog modal \n * (by hiding header and adjusting height so that fit into a modal)\n */\n @Input() public placeIntoModal: boolean = false;\n dataForConfirmation: DataForConfirmation;\n isEditSeries: boolean = false;\n\n constructor(\n private _dialog: MatDialog,\n public _service: ApplicationService,\n public _bookings: BookingsService,\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.updateConfimatinModal();\n }\n\n /** Active order to display details for */\n public active_order: CateringOrder;\n public TopBarHeaderMode = TopBarHeaderMode;\n public confirmed: boolean = false;\n public next_disabled: boolean = true;\n\n public loading: boolean = false;\n\n\n public get building(): Building[] {\n return this.booking.room.building;\n };\n\n /** Field for storing catering details */\n public get catering_field() {\n return this.form && this.form.controls.catering ? this.form.controls.catering : null;\n }\n\n /** List of spaces selected for the booking */\n public get space_list(): Space[] {\n return this.form && this.form?.controls?.space_list?.value.length\n ? this.form.controls.space_list.value\n : [];\n }\n\n /** Date of the booking */\n public get dateTz(): number {\n return this.form && this.form.controls.dateTz\n ? this.form.controls.dateTz.value\n : DateNow(new Date()).startOfValue('minute');\n }\n\n /** Duration of the booking */\n public get duration(): number {\n return this.form && this.form.controls.duration ? this.form.controls.duration.value : 60;\n }\n\n /** Whether booking is all day */\n public get all_day(): boolean {\n return this.form && this.form.controls.all_day && this.form.controls.all_day.value;\n }\n\n\n public get type() {\n return toTitleCase(this.booking?.class);\n }\n\n public get dateString() {\n return dateBuildingFormatString(this.booking.startDateTz);\n }\n\n public get timeString() {\n return startEndTimeWithZoneFormatString(this.booking.startDateTz, this.booking?.displayEndDateTz);\n }\n\n public get durationString() {\n return humaniseDuration(this.booking?.duration);\n }\n\n public get status() {\n return bookingStatusDetails(this.booking);\n }\n\n /** Create a new catering order */\n public newOrder(): void {\n const order = new CateringOrder({ booking_timezone: this.booking?.timezone });\n this.active_order = order;\n }\n\n // Combine the same items for the same timeslot into the same order item\n public combineItems = (newItems: CateringCategory[], oldItems: CateringCategory[]) => {\n // Group and Sum the items in an Item ID keyed object\n const itemsObj = {};\n oldItems.forEach((i) => {\n if (itemsObj[i.id]) {\n itemsObj[i.id].setAmount(itemsObj[i.id].amount + i.amount);\n } else {\n itemsObj[i.id] = i;\n }\n });\n newItems.forEach((i) => {\n if (itemsObj[i.id]) {\n itemsObj[i.id].setAmount(itemsObj[i.id].amount + i.amount);\n } else {\n itemsObj[i.id] = i;\n }\n })\n // Convert the object to an array\n const items = [];\n for (const item in itemsObj) {\n items.push(itemsObj[item]);\n }\n // return the items consolidated by item ID.\n return items;\n }\n\n /** Handle changes to catering order */\n public handleOrderEvent(order: CateringOrder) {\n /* istanbul ignore else */\n if (order) {\n this.next_disabled = false;\n const orders = this.form.controls.catering.value;\n // When the order edit button is clicked we are editing an existing order\n const index = orders.findIndex((an_order) => {\n return order.id === an_order.id\n });\n\n // If editing an existing order row it will have an index, if not create a new row\n if (index < 0) {\n // Add the new order\n orders.push(order);\n } else {\n // Replace the existing order with the edited order\n orders.splice(index, 1, order);\n }\n\n // Setup the \"reduced\" data containers\n const reduceItems = {};\n const reduceOrders = {};\n orders.forEach((o) => {\n if (reduceItems[o.delivery_time]) {\n // An order for this timeslot already exists, combine the same items to dedupe rows\n reduceItems[o.delivery_time] = this.combineItems(o.items, reduceItems[o.delivery_time]);\n } else {\n // Since this is a new timeslot, use the existing items\n reduceItems[o.delivery_time] = o.items;\n // Copy the order and clear its item contents, placeholder for the updated items\n reduceOrders[o.delivery_time] = o;\n reduceOrders[o.delivery_time].items = [];\n }\n });\n\n // Add the reduced items to the reduced orders\n let consolidatedOrders = [];\n for (const deliveryTime in reduceOrders) {\n const order = reduceOrders[deliveryTime];\n order.items = reduceItems[deliveryTime]\n consolidatedOrders.push(order);\n }\n\n this.form.controls.catering.setValue(consolidatedOrders);\n }\n this.active_order = null;\n }\n\n public closeCallback() {\n // Bail and close the catering component\n this.next_disabled = true;\n this.active_order = null;\n\n // Need to clone to avoid readonly errors\n this.form.controls.catering.setValue(this.booking.catering.map(order => order.clone()));\n this.event.emit();\n }\n\n public closeConfirmation() {\n this.event.emit();\n }\n\n /** Open modal for adding equipment requirements to booking */\n private openCateringDetailsModal() {\n const ref = this._dialog.open(\n CateringDetailsModalComponent,\n {\n maxWidth: '95vw',\n width: '32em',\n data: {\n spaces: this.form.controls.space_list.value,\n notes_field: this.form.controls.notes,\n catering: this.form.controls.catering,\n booking: this.booking\n }\n }\n );\n this.subscription(\n 'modal_events',\n ref.componentInstance.event.subscribe((event: DialogEvent) => {\n // Catering requirements and charge code modal closed event\n /* istanbul ignore else */\n if (event.reason === 'done') {\n // Closed with the reason done\n ref.close();\n\n // Display the loading animation and the Booking Confrimation component\n this.loading = true;\n this.confirmed = true;\n\n this.saveBooking();\n }\n })\n );\n ref.afterClosed().subscribe(() => this.unsub('modal_events'));\n }\n\n public saveBooking() {\n // Clone and append the catering and note data to the booking\n let booking = this.booking.clone();\n booking.catering = this.form.controls.catering.value;\n booking.notes = this.form.controls.notes.value;\n if(booking.notes.length || booking.catering.length) {\n\n const setup = { ...booking.setup };\n setup[booking.space.email] = booking.setup[booking.space.email] || 900;\n booking.setup = setup;\n\n const breakdown = { ...booking.breakdown };\n breakdown[booking.space.email] = booking.breakdown[booking.space.email] || 900;\n booking.breakdown = breakdown;\n }\n\n\n // Save to the API and respond. && !this.isOccurence\n this._bookings.save(booking, booking.is_recurrent ).then(\n (bkn) => {\n this.booking = new Booking({ ...this.booking, ...bkn.toApiJSON() }); \n // Stop the loading animation and show the booking confirmation component.\n this.updateConfimatinModal();\n\n this.loading = false;\n this.confirmed = true;\n this.event.emit(this.form)\n },\n (err) => {\n // Stop the loading animation and return to the catering flow with an error.\n this.loading = false;\n this.confirmed = false;\n this._service.notifyError(\n `Error updating booking.`\n );\n }\n )\n }\n\n public handleOrderListEvent($event: any) {\n const orders = this.form.controls.catering.value;\n // Handle the Previous and Next buttons\n if ($event.type === 'previous') {\n // Bail and close the catering component\n this.next_disabled = true;\n this.active_order = null;\n // Need to clone to avoid readonly errors\n this.form.controls.catering.setValue(this.booking.catering.map(order => order.clone()));\n this.event.emit();\n }\n if ($event.type === 'next') {\n // Move on to the catering details modal\n this.next_disabled = false;\n if (orders.length) {\n this.openCateringDetailsModal();\n } else {\n // Display the loading animation and the Booking Confrimation component\n this.loading = true;\n this.confirmed = true;\n this.saveBooking();\n }\n }\n }\n\n public openCatering() {\n // Start catering from the Booking Confirmation page Add Catering button\n this.confirmed = false;\n this.next_disabled = true;\n this.showCatering.emit();\n }\n\n /**\n * Public method to update the confirmation modal data.\n * This method updates the dataForConfirmation object with the necessary information\n * for displaying the confirmation modal in the application.\n */\n public updateConfimatinModal() {\n\n // Prepare an object with booking details and related information for the confirmation modal\n this.dataForConfirmation = {\n booking: this.booking, // Information about the booking\n status: this.status, // Status of the booking (e.g., confirmed, pending, etc.)\n dateString: this.dateString, // Date of the booking in string format\n endDateString: this.endDateString, // End date of the booking in string format\n timeString: this.timeString, // Time of the booking in string format\n durationString: this.durationString, // Duration of the booking in string format\n type: this.type, // Type of booking (e.g., internal, external, etc.)\n isEditSeries: this.isEditSeries, // Boolean indicating whether it's an edit in a series of events\n // Function to check if there are conflicts with occurrences of the booking\n isConflictWithOccurences: this.isConflictWithOccurences.bind(this),\n // Function to open a modal in case of conflicts with recurring events\n // openRecurrenceConflictsModal: this.openRecurrenceConflictsModal.bind(this)\n }\n }\n\n /**\n * Checks if there are conflicts with the current booking and its occurrences.\n * Calculates the difference between total occurrences and available occurrences\n * to determine if there are conflicts.\n *\n * @returns {Object} An object containing conflict information:\n * - is_conflict: A boolean indicating if there are conflicts (true if conflicts exist, false otherwise).\n * - total_Conflicts: The total number of conflicts (the difference between total occurrences and available occurrences).\n */\n // public isConflictWithOccurences() {\n // const conflicts = this?.booking?.room?.totalOccurrences - this?.booking?.room?.availableOccurrences;\n // return { is_conflict: !!conflicts, total_Conflicts: conflicts };\n // }\n\n public isConflictWithOccurences() {\n let totalConflicts = 0;\n \n this.booking.multi_rooms.forEach(room => {\n totalConflicts += Math.max(room.totalOccurrences - room.availableOccurrences, 0);\n });\n \n\n const result = {\n is_conflict: totalConflicts > 0, \n total_Conflicts: totalConflicts \n };\n return result;\n }\n\n /**\n * Retrieves the end date string for the booking, considering recurrence if applicable.\n * If the booking is recurrent, it calculates the end date based on recurrence starts;\n * otherwise, it uses the booking's start date as the end date.\n *\n * @returns {string} The formatted end date string in a shorter local date format.\n */\n public get endDateString(): string {\n // Determine the array of date-time strings based on recurrence or single start date\n let recurrenceStart: Array= [];\n const { is_recurrent, recurrence_starts, occurrence_details, timezone} = this.booking;\n if(is_recurrent && recurrence_starts.length) {\n recurrenceStart = this.booking.recurrence_starts;\n }\n else if(is_recurrent && !recurrence_starts.length && occurrence_details.length) {\n this.booking.occurrence_details.forEach(element => {\n recurrenceStart.push(new DateTZ({ date: element.start_epoch * 1000, is_local_tz: false, building_tz: timezone}));\n });\n recurrenceStart = recurrenceStart.sort((d1: DateTZ, d2: DateTZ) => d1.ms - d2.ms);\n }\n else {\n recurrenceStart = [this.booking.startDateTz];\n }\n\n\n // const endDtz = (this.booking.is_recurrent && this.booking.recurrence_starts.length) ? this.booking.recurrence_starts : [this.booking.startDateTz]\n // Get the last date from the list of date-time strings and format it in a shorter local date format\n return shorterLocalDateFormatString(getLastDateFromList(recurrenceStart));\n }\n\n}\n","
\n
\n \n \n
\n
\n
\n
\n \n \n \n
\n \n \n \n
\n
\n \n
\n
\n
","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { FormControl } from '@angular/forms';\n\nimport { CateringCategory } from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'a-category-display',\n templateUrl: './category.component.html',\n styleUrls: ['./category.component.scss']\n})\nexport class CateringMenuCategoryComponent {\n /** Category to display details for */\n @Input() public category: CateringCategory;\n /** Form control for the list of order items */\n @Input() public items: FormControl;\n /** Currency symbol for the active space */\n @Input() public symbol: string;\n /** Whether item should be disabled if not available anytime */\n @Input() public disabled: boolean;\n /** Whether to show smaller version of component */\n @Input() public compact: boolean;\n /** Emitter for close events */\n @Output() public close = new EventEmitter();\n}\n","
\n
\n \n
{{ category?.name }}
\n
\n
\n\n
\n \n
\n
\n\n
\n
\n \n
\n
\n Category contains no available items\n
\n
\n
\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport {\n FormControl,\n FormGroup\n} from '@angular/forms';\nimport { BehaviorSubject } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport {\n Building,\n CateringCategory,\n CateringItem,\n CateringMenuService,\n CateringOrder,\n OrganisationService,\n Space\n} from '@mckinsey-converge/data-common';\nimport {\n DialogEvent,\n Identity\n} from '@mckinsey-converge/base';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n BookingCateringConfirmModalComponent,\n CateringConfirmModalData\n} from '@mckinsey-converge/legacy-overlays';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\ninterface StartEndResponse {\n timezone: string,\n start: DateTZ;\n end: DateTZ\n}\n\n@Component({\n selector: 'a-catering-order-details',\n templateUrl: './order-details.component.html',\n styleUrls: ['./order-details.component.scss']\n})\nexport class BookingCateringOrderDetailsComponent extends BaseDirective implements OnInit {\n /** Catering order to edit details of */\n @Input() public order: CateringOrder;\n /** Booking date */\n @Input() public dateTz: DateTZ;\n /** Booking duration */\n @Input() public duration: number;\n /** Booking duration */\n @Input() public space_list: Space[];\n /** Whether booking is all day */\n @Input() public all_day: boolean;\n /** Whether top header details should be shown */\n @Input() public hide_details: boolean;\n /** Whether to show smaller version of component */\n @Input() public compact: boolean;\n /** Emitter for changes to the catering order */\n @Output() public event = new EventEmitter();\n /** Form controls for order */\n public form: FormGroup;\n /** List of available catering item categories */\n public category_list: CateringCategory[] = [];\n /** Active category to display details for */\n public active_category: CateringCategory;\n /** List of available times for delivering catering */\n public available_times: Identity[] = [];\n /** Whether the menu is loading */\n public loading: boolean;\n /** Whether the search input should be shown */\n public show_search: boolean;\n /** Current search string for filtering */\n public readonly search$ = new BehaviorSubject('');\n /** List of menu items that match the search string */\n public matched_items: CateringItem[] = [];\n\n /**\n * placeIntoModal: Input decorator indecate as a flag to adapt component design into a dialog modal \n * (by hiding header and adjusting height so that fit into a modal)\n */\n @Input() public placeIntoModal: boolean = false;\n\n @ViewChild('input') private _input_el: ElementRef;\n\n /** Whether user is able to order from the currently selected space */\n public get can_order(): boolean {\n return (\n (this.active_building.has_catering || this.category_list.length) &&\n (!this.within_restricted_time || this.has_available_items) &&\n !this.out_of_hours\n );\n }\n\n /** Building associated with the selected space */\n public get active_building(): Building {\n const form_controls = (this.form || { controls: { location_id: { value: '' } } }).controls;\n const space: Space =\n this.space_list.find((space) => space.email == form_controls.location_id.value) ||\n ({ level: {} } as any);\n return (\n this._org.buildings.find((bld) => space.level?.building_id === bld.id) ||\n ({ catering_restricted_from: 0 } as any)\n );\n }\n\n /** Currency code for the active building */\n public get symbol(): string {\n return this.active_building.currency || 'USD';\n }\n\n /** Number of items in the order */\n public get item_count(): number {\n return this.form\n ? this.form.controls.items.value.reduce((total, item) => total + item.amount, 0)\n : 0;\n }\n\n /* istanbul ignore next */\n /** Whether booking time is outside of catering hours */\n public get out_of_hours(): boolean {\n return this.form.controls.delivery_time.value < 0;\n }\n\n /** Whether booking is with the restricted ordering period */\n public get within_restricted_time(): boolean {\n const expired = DateNow(new Date()).addValue({ hours: this.active_building.catering_restricted_from }).startOfValue('minute');\n return this.dateTz.isBeforeDate(expired);\n }\n\n /** Whether booking is with the restricted ordering period */\n public within_category_restricted_time(item?: CateringItem ): boolean {\n /**\n * Update : https://mckinsey.atlassian.net/browse/CNG-574\n * Right now the frontend is restricting catering orders based off the field .settings.discovery_info.catering_restricted_from,\n * so for this ticket change it’s best we keep that field as the default time restriction, then add a new field to catering categories called \n * restricted_from which will override the old field if it’s present!\n * restricted_from can be set by concierge admin to restrict item from being order before set time ex if it been set to 24 then the item should\n * available to order before 24 hours of booking/order time!\n */\n\n if(!!item?.restricted_from) {\n const expired = DateNow(new Date()).addValue({ hours: item?.restricted_from }).startOfValue('minute');\n return this.dateTz.isBeforeDate(expired);\n } else {\n return false;\n }\n \n }\n\n /** Whether items are available for order at anytime */\n public get has_available_items(): boolean {\n return this.category_list.reduce(\n (available, category) => available || category.can_order_anytime,\n false\n );\n }\n\n constructor(\n private _menu: CateringMenuService,\n private _org: OrganisationService,\n private _dialog: MatDialog\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.generateAvailableTimes();\n this.subscription('search', this.search$.pipe(map((str) => {\n const search = str.toLowerCase();\n const items = [];\n const available_categories = this.category_list.filter(item => !this.within_category_restricted_time(item) )\n\n for (const category of available_categories) {\n if (category.items) {\n for (const group of category.items) {\n if ((group as any).items.length) {\n if (\n (group as any).package &&\n (group.name.toLowerCase().includes(search) ||\n (group as any).items.find((item) =>\n item.name.toLowerCase().includes(search)\n ))\n ) {\n items.push(group);\n } else {\n for (const item of (group as any).items) {\n if (item.name.toLowerCase().includes(search)) {\n items.push(item);\n }\n }\n }\n } else {\n if (group.name.toLowerCase().includes(search)) {\n items.push(group);\n }\n }\n }\n }\n }\n \n return items;\n })).subscribe((items) => this.matched_items = items));\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n /* istanbul ignore else */\n if (changes.date || changes.duration) {\n this.generateAvailableTimes();\n /* istanbul ignore else */\n if (\n this.form &&\n !this.available_times.find(\n (time) => time.id === this.form.controls.delivery_time.value\n )\n ) {\n this.form.controls.delivery_time.setValue(this.available_times[0].id);\n }\n }\n /* istanbul ignore else */\n if (changes.space_list) {\n /* istanbul ignore else */\n if (this.form && this.space_list && !this.form.controls.location_id.value) {\n this.form.controls.location_id.setValue(this.space_list[0].email);\n }\n }\n /* istanbul ignore else */\n if (changes.order && this.order) {\n this.initForm();\n }\n }\n\n public focusSearch() {\n if (this._input_el && this.show_search) {\n this._input_el.nativeElement.focus();\n }\n }\n\n public initForm() {\n this.form = new FormGroup({\n id: new FormControl(this.order.id),\n booking_date: new FormControl(\n this.all_day ? this.dateTz.startOfValue('day').ms : this.dateTz.ms\n ),\n location_id: new FormControl(this.order.location_id || this.space_list[0]?.email),\n delivery_time: new FormControl(this.order.delivery_time || this.available_times[0].id),\n items: new FormControl(this.order.items.map((item) => new CateringItem(item)))\n });\n this.subscription(\n 'space_change',\n this.form.controls.location_id.valueChanges.subscribe((space) => {\n this.generateAvailableTimes();\n if (\n !this.available_times.find(\n (time) => time.id === this.form.controls.delivery_time.value\n )\n ) {\n this.form.controls.delivery_time.setValue(this.available_times[0].id);\n }\n this.form.controls.items.setValue([]);\n this.loadMenu();\n })\n );\n this.loadMenu();\n this.generateAvailableTimes();\n if (\n this.form &&\n !this.available_times.find((time) => time.id === this.form.controls.delivery_time.value)\n ) {\n this.form.controls.delivery_time.setValue(this.available_times[0].id);\n }\n }\n\n public confirmOrder() {\n const ref = this._dialog.open(BookingCateringConfirmModalComponent, {\n maxWidth: '95vw',\n data: {\n all_day: this.all_day,\n dateTz: this.dateTz,\n form: this.form\n }\n });\n this.subscription(\n 'confirm_event',\n ref.componentInstance.event.subscribe((event: DialogEvent) => {\n /* istanbul ignore else */\n if (event.reason === 'done') {\n const order = new CateringOrder({ ...this.order, ...this.form.value });\n // order is emited but who is receiving?\n this.event.emit(order);\n ref.close();\n }\n })\n );\n ref.afterClosed().subscribe(() => {\n this.unsub('confirm_event');\n });\n }\n\n private loadMenu() {\n const space = this.space_list.find(\n (space) => space.email === this.form.controls.location_id.value\n );\n\n this.loading = true;\n this._menu\n .query({ zone_id: this._org.buildings.find((bld) => space?.zones.includes(bld.id))?.id })\n .then(\n (list) => {\n this.loading = false;\n this.category_list = list.map((i) => new CateringCategory(i))\n .filter(c => !c.out_of_stock);\n },\n () => (this.loading = false)\n );\n }\n\n /** Generate a list of available delivery times for the given booking time */\n private generateAvailableTimes() {\n let { timezone, start, end } = this.generateStartAndEndTimes();\n start = start.setValue({ minute: Math.ceil(start.minutes / 5) * 5 });\n // will be different from staff in these commonly named methods.\n const start_date = this.dateTz;\n this.available_times = [];\n while (start.isBeforeDate(end)) {\n this.available_times.push({\n id: Math.abs(start_date.dateDiff(start, 'minutes')),\n name: start.formatDate('h:mma').toLocaleLowerCase(),\n });\n start = start.addValue({ minutes: 5 });\n }\n /* istanbul ignore else */\n if (this.available_times.length === 0) {\n this.available_times.push({ id: -1, name: 'Out of hours' });\n }\n }\n\n private generateStartAndEndTimes(): StartEndResponse {\n const now = DateNow(new Date())\n let timezone = now.local_tz;\n const space_email = this.form ? this.form.controls.location_id.value : null;\n let catering_hours = { start: 7, end: 20 };\n let building_time = this.dateTz.startOfValue('day');\n let cat_start_time = building_time.addValue({ hours: catering_hours.start });\n let cat_end_time = building_time.addValue({ hours: catering_hours.end });\n\n if (space_email) {\n // Fetch the Space and Building\n const space = this.space_list.find((space) => space.email === space_email);\n const building = this._org.buildings.find((bld) => space?.zones.includes(bld.id));\n if (building.timezone) {\n // Update to the building timezone if defined.\n timezone = building.timezone;\n building_time = this.dateTz.toZone(timezone).startOfValue('day');\n }\n if (building?.catering_hours) {\n // Update to the building catering hours if defined.\n catering_hours = building?.catering_hours;\n }\n // Update the hours with the currently defined timezone.\n cat_start_time = building_time.addValue({ hours: catering_hours.start });\n cat_end_time = building_time.addValue({ hours: catering_hours.end });\n }\n\n // Start Time of the Booking\n let start = this.dateTz.toZone(timezone);\n let end = this.dateTz.toZone(timezone).addValue({ minutes: this.duration });\n\n // Do the booking start and end time coincide with the catering hours?\n if (start.isBeforeDate(cat_start_time)) {\n // booking start before catering opens'\n if (cat_end_time.isAfterDate(start)) {\n // catering closes after booking starts'\n start = cat_start_time.addValue({});\n } else {\n // were just closed, catering closes before booking start'\n start = cat_end_time.addValue({});\n end = cat_end_time.addValue({});\n return { timezone, start, end };\n }\n } else {\n // booking starts after catering is open'\n if (cat_end_time.isBeforeDate(start)) {\n // were just closed, catering closed before booking start'\n start = cat_end_time.addValue({});\n end = cat_end_time.addValue({});\n return { timezone, start, end };\n }\n }\n\n if (end.isBeforeDate(cat_end_time)) {\n // booking ends before catering closes'\n if (cat_start_time.isAfterDate(end)) {\n // were just closed, catering opens is after booking ends'\n start = cat_start_time.addValue({});\n end = cat_start_time.addValue({});\n return { timezone, start, end };\n }\n } else {\n // booking ends after catering closes'\n // set the booking end to the catering close time.'\n end = cat_end_time.addValue({});\n }\n\n return { timezone, start, end };\n }\n}\n\n","
\n
\n
\n
\n
Deliver to:
\n \n \n \n {{ space.local_name }}\n \n \n \n
\n
\n
At:
\n \n \n \n {{ time.name }}\n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n
\n
\n
\n
\n \n
\n \n
\n
\n \n \n
\n \n
\n
{{ item.name }}
\n \n
\n
\n
\n
\n
\n
\n \n Back\n \n \n Confirm Order({{ item_count || '0' }})\n \n
\n
\n
\n\n
\n
\n \"No\n
\n

\n Catering is not available for this booking.
\n Catering must be ordered within business hours at {{ active_building?.name }}.\n

\n
\n
\n\n
\n
\n
\n \n
\n
\n Loading menu for {{ active_building?.name }}...\n
\n
\n
\n
\n\n \n\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output\n} from '@angular/core';\n\nimport {\n CateringOrder,\n Space,\n SpacesService\n} from '@mckinsey-converge/data-common';\nimport { DateNow } from '@mckinsey-converge/date-tz'\n\n\n@Component({\n selector: 'catering-order-list-item',\n templateUrl: './item.component.html',\n styleUrls: ['./item.component.scss']\n})\nexport class CateringOrderListItemComponent implements OnInit {\n /** Catering order to display */\n @Input() order: CateringOrder;\n /** */\n @Input() public space_list: Space[];\n /** Selected datetime */\n @Input() date: number = DateNow(new Date()).ms;\n /** Emitter for edit events */\n @Output() public edit = new EventEmitter();\n /** Emitter for delete events */\n @Output() public delete = new EventEmitter();\n\n public room: Space;\n\n public ngOnInit(): void {\n this.room = (this.space_list || []).find(space => space.email === this.order.location_id);\n }\n\n public get space_in_booking(): boolean {\n return !!this.room;\n }\n\n /** Space selected for delivery */\n public get local_space_name(): string {\n return this.room?.local_name || '';\n }\n\n /** Delivery time for the order */\n public get delivery_time(): string {\n /* istanbul ignore else */\n if (!this.order) {\n return '';\n }\n\n // R--- there's probably a helper for this calculation on the Catering Order \n return this.order.bookingDateTz.addValue({ minutes: this.order.delivery_time || 0 }).formatDate('h:mma').toLocaleLowerCase();\n }\n\n /** Total cost of the order */\n public get order_cost(): number {\n const items = (this.order || { items: [] }).items as any;\n return items.reduce((amount, item) => amount + item.amount * item.unit_price, 0);\n }\n\n /** Number of items in the order */\n public get item_count(): number {\n const items = (this.order || { items: [] }).items as any;\n return items.reduce((amount, item) => amount + item.amount, 0);\n }\n\n /** Currency symbol for the selected space */\n public get symbol(): string {\n /* istanbul ignore else */\n if (!this.room || !this.room.level) {\n return 'USD';\n }\n\n return this.room?.building?.currency || 'USD';\n }\n\n constructor(private _spaces: SpacesService) {\n }\n}\n","
\n Deliver to {{ local_space_name }} at {{ delivery_time }}\n
\n
\n
\n {{ item_count }}\n { item_count, plural, =1 { item } other { items } }\n
\n
{{ order_cost / 100 | currency: symbol }}
\n
\n
\n \n \n \n \n
\n","import {\n Component,\n EventEmitter,\n Input,\n Output\n} from '@angular/core';\nimport { FormControl } from '@angular/forms';\n\nimport {\n CateringOrder,\n Space\n} from '@mckinsey-converge/data-common';\nimport { BookingFlowEvent } from '../../catering/catering.component';\nimport { DateTZ } from '@mckinsey-converge/date-tz'\n\n\n@Component({\n selector: 'a-catering-order-list',\n templateUrl: './order-list.component.html',\n styleUrls: ['./order-list.component.scss']\n})\nexport class BookingCateringOrderListComponent {\n /** Form field for storing catering orders */\n @Input() public catering: FormControl;\n /** Selected datetime for the booking */\n @Input() public date: number;\n /** */\n @Input() public space_list: Space[];\n /** Whether booking is all day */\n @Input() public all_day: boolean;\n /** Whether booking is all day */\n @Input() public next_disabled: boolean;\n /** Emitter for flow update events */\n @Output() public event = new EventEmitter();\n /** Emiiter for order events */\n @Output() public order = new EventEmitter();\n /**\n * placeIntoModal: Input decorator indecate as a flag to adapt component design into a dialog modal \n * (by hiding header and adjusting height so that fit into a modal)\n */\n @Input() public placeIntoModal: boolean = false;\n \n public delete: boolean = false;\n\n /** List of orders in the booking */\n public get orders(): CateringOrder[] {\n /* istanbul ignore else */\n if (!this.catering) {\n return [];\n }\n let orders = [];\n const date_ = new DateTZ({date: this.date})\n this.catering.value.forEach(\n order => {\n const newOrder = order;\n newOrder.booking_date = this.all_day\n ? date_.startOfValue('day').ms\n : this.date;\n orders.push(newOrder);\n }\n \n );\n return orders;\n }\n\n /** Emit event for a new catering order */\n public newOrder() {\n this.order.emit();\n }\n\n /** Emit event for editing existing order */\n public editOrder(order: CateringOrder) {\n this.order.emit(order);\n }\n\n /** Remove order from the list */\n public deleteOrder(order: CateringOrder) {\n const orders = this.orders;\n const index = orders.findIndex(an_order => order.id === an_order.id);\n /* istanbul ignore else */\n if (index >= 0) {\n orders.splice(index, 1);\n this.catering.setValue(orders);\n this.delete = true;\n }\n }\n\n /**\n * Proceed to the next step in the space booking flow\n */\n public next(): void {\n // Open the confirmation modal\n this.event.emit({ type: 'next', step: 'catering' });\n }\n\n /** Move flow to previous step */\n public previous(): void {\n this.event.emit({ type: 'previous', step: 'catering' });\n }\n}\n","
\n
\n

Catering Orders

\n
\n
\n \n
\n \n
\n \n
\n
\n
\n
\n \n Back\n \n \n Next\n \n
\n
\n
\n\n
\n
\n \n
\n
No catering orders
\n \n
\n
\n","import {\n Component,\n Input,\n} from '@angular/core';\nimport {\n BaseDirective,\n} from '@mckinsey-converge/base';\nimport {\n Booking,\n} from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'catering-order-table',\n template: `\n
\n \n \n \n \n \n \n \n \n \n \n \n
\n Delivery\n Charge CodeOrder
\n {{formatDeliveryTime(order)}}\n \n {{order?.charge_code}} \n \n {{listItems(order)}}\n
\n
\n `,\n styleUrls: ['./order-table.component.scss']\n})\nexport class OrderTableComponent extends BaseDirective {\n /** The theme to use **/\n @Input() public booking: Booking;\n\n public listItems(order) {\n return order.items.map(i => `${i.name}${i.amount > 1 ? ` (${i.amount})` : ''}`).join(', ');\n }\n\n public formatDeliveryTime(order) {\n return this.booking.startDateTz.addValue({ minutes: order?.delivery_time }).formatDate('h:mma').toLocaleLowerCase();\n }\n\n public oddEvenClass(x) {\n return x % 2 === 0 ? 'odd' : 'even';\n }\n}\n","import {\n Component,\n Directive,\n ElementRef,\n HostListener,\n Input,\n OnInit\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { TopBarHeaderMode } from 'src/app/components/topbar-header/topbar-header.component';\nimport {\n select,\n Store\n} from '@ngrx/store';\nimport {\n BaseDirective,\n} from '@mckinsey-converge/base';\nimport {\n User,\n Booking,\n Building,\n BuildingCity,\n flattenDisplayOffices,\n selectCancelledBookingsResultsFromState,\n selectUpcomingBookingsResultsFromState,\n selectPastBookingsResultsFromState,\n selectBookingByIdResultsFromState,\n UsersService,\n} from '@mckinsey-converge/data-common';\nimport {\n clearBookingByIdResults,\n} from '@mckinsey-converge/bookings';\nimport {\n BehaviorSubject,\n} from 'rxjs';\nimport {\n distinctUntilChanged,\n first,\n map,\n take,\n} from 'rxjs/operators';\nimport { loadBookingsWithQuery } from '@mckinsey-converge/bookings';\nimport { loadOrganisations } from '@mckinsey-converge/organisation';\nimport {\n SelectOption\n} from '@mckinsey-converge/ui';\nimport {\n buildingStateSelector,\n selectBuildingOptionsGroupedByCity\n} from '@mckinsey-converge/buildings';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { BookingDetailsModalComponent } from '../booking-details-modal/booking-details-modal.component';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport { RoomBookingStoreState } from '../room-booking/room-booking.component';\nimport { MatTabChangeEvent } from '@angular/material/tabs';\nimport { SearchBarConfig } from 'libs/legacy-ui/src/lib/cng-search-bar/cng-search-bar.component';\n\n\n@Component({\n selector: 'app-manage-bookings',\n template: `\n
\n
 
\n
\n \n
\n
\n
\n
\n

Manage Bookings

\n\n
\n \n \n
\n \n
\n \n
\n\n\n \n \n
\n \n \n \n
\n
\n\n
\n
\n
\n
\n `,\n styleUrls: ['./manage-bookings.component.scss']\n})\nexport class ManageBookingsComponent extends BaseDirective implements OnInit {\n public TopBarHeaderMode = TopBarHeaderMode;\n public buildings = new BehaviorSubject[]>([]);\n public bookingTypes = [\n {\n type: 'upcoming',\n display: 'Upcoming',\n selector: selectUpcomingBookingsResultsFromState\n },\n {\n type: 'past',\n display: 'Past',\n selector: selectPastBookingsResultsFromState\n },\n {\n type: 'cancelled',\n display: 'Cancelled',\n reverse_sort: true,\n selector: selectCancelledBookingsResultsFromState\n },\n ];\n\n /** Current User */\n public currentUser: User;\n public dialogRef: MatDialogRef;\n public modalInitialized = false;\n public hasLoaderUrl = true;\n\n public activeTab = 'upcoming';\n\n /**\n * Configs for delegate dropdown\n */\n /* if user has no delegates, hide the dropdown */\n public has_delegate: boolean = false; \n /* Holds list of all host/delegates */\n public host_list: User[];\n public hostOptions: { display: string; value: string; meta: { user: User; }; }[];\n public delegateDD: { ddBoxClass: string; options: any; defaultSelected: any; onChangeCallback: any; ddOptionBoxWidth: string };\n public selectedHost: string = '';\n\n public searchBookingBy: any = '';\n\n\n searchBarConfig: SearchBarConfig = {\n placeholder: 'Search by title, room name, attendees...',\n totalFoundItem: 0,\n showSrchWarning: false\n };\n\n constructor(\n private dialog: MatDialog,\n private store: Store,\n private route: ActivatedRoute,\n private _router: Router,\n private _users: UsersService,\n ) {\n super();\n }\n\n public ngOnInit(): void {\n\n // Get the router params\n const bookingId = this.route.snapshot.paramMap.get('id');\n const verb = this.route.snapshot.paramMap.get('verb');\n // Load the buildings data\n this.store.dispatch(loadOrganisations.request());\n this.route.data.subscribe(initData => {\n // Determine if the cancel or booking submodal is loading\n const cancel = verb === 'cancel';\n const addCatering = initData.hasCatering;\n /**\n * When using the catering or cancel URLs,\n * Users reported the modals loading after one another was\n * jarring so, so the UI is masked out until the modal is loaded.\n */\n this.hasLoaderUrl = addCatering || cancel;\n\n this.subscription('buildings', this.store.pipe(\n select(buildingStateSelector),\n select(selectBuildingOptionsGroupedByCity),\n map((grouped: Map) => {\n return flattenDisplayOffices(grouped);\n }),\n distinctUntilChanged()\n ).subscribe(next => {\n this.buildings.next(next);\n if (bookingId && !this.modalInitialized) {\n this.store.dispatch(clearBookingByIdResults())\n this.modalInitialized = true;\n // Once the data loads viewBooking\n this.subscription('bookingResults', this.store.pipe(\n select(selectBookingByIdResultsFromState)\n ).subscribe(next => {\n const booking = next.success ? next.success?.[0] : null;\n if (booking && booking.room) {\n // Modal Madness, close the existing booking details modals.\n if (this.dialogRef) {\n this.dialogRef.close();\n }\n if (this.dialog) {\n this.dialog.closeAll();\n }\n // Call viewBookingFromEmailLink with cancel = true to trigger the cancel modal\n // Call viewBookingFromEmailLink with addCatering = true to trigger the add Catering modal\n this.viewBookingFromEmailLink(booking, cancel, addCatering);\n\n // Remove the \"loader\" url from view\n this.timeout('rewrite url',() => {\n this._router.navigate(['/home','manage'], { replaceUrl: true });\n })\n }\n }));\n }\n }));\n\n })\n\n this.subscription('currentUser', this.store.select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n if (bookingId) {\n // If there's a booking ID loadBookingById\n this.store.dispatch(loadBookingsWithQuery({ 'id': bookingId, 'email': this.currentUser.email, 'target': 'bookingById', 'offset': 0 }));\n }\n }));\n\n\n this._users.initialised.pipe(first((_) => _)).subscribe(() => {\n const user: User = this._users.current;\n\n const delegates = user.delegates.map((del) => {\n const ifUser = this._users.find(del.email);\n return ifUser ? \n new User({ email: ifUser.email, name: ifUser.name, opt_out: del.opt_out }) : \n new User({ email: del.email, name: del.email.split('@')[0].split('_').map((s) => s.charAt(0).toUpperCase() + s.substring(1))\n .join(' ')\n , opt_out: del.opt_out });\n });\n\n if (delegates.length) {\n this.has_delegate = true;\n\n this.host_list = [user].concat(delegates);\n const options = this.host_list.map(h => ({ display: h.name, value: h.email, meta: { user: h } }))\n \n this.hostOptions = [{ display: 'All', value: '', meta: { user: null } }].concat(options);\n this.selectedHost = this.hostOptions[0].value;\n this.delegateDD = {\n ddBoxClass: '',\n options: this.hostOptions,\n defaultSelected: this.hostOptions[0],\n onChangeCallback: this.onChangeDelegates.bind(this),\n ddOptionBoxWidth: '200px'\n }\n }\n \n });\n }\n\n public onChangeDelegates(del) {\n this.selectedHost = del.value;\n }\n\n public getBuilding(booking: Booking) {\n if (this.buildings && booking.building_zone) {\n return this.buildings.value.find(b => booking.building_zone === b.value)?.meta.building;\n }\n return null;\n }\n\n // Only fires from an email link\n public viewBookingFromEmailLink(booking: Booking, cancel: boolean = false, addCatering: boolean = false) {\n if (this.modalInitialized && this.dialogRef) {\n this.dialogRef.close();\n this.dialogRef = null;\n }\n // R--- Verify the email links are working.\n // Open the booking details modal\n if (!this.dialogRef && booking.room) {\n this.dialogRef = this.dialog.open(BookingDetailsModalComponent, {\n panelClass: 'mck-modal-wide-manage-booking',\n data: {\n booking,\n building: this.getBuilding(booking),\n cancel,\n addCatering,\n hasLoaderUrl: this.hasLoaderUrl,\n refresh: () => null\n },\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n // Close up the loader panel\n setTimeout(() => {\n this.hasLoaderUrl = false;\n }, 1000);\n }\n }\n\n public clearPage(event : MatTabChangeEvent) {\n this.activeTab = this.bookingTypes[event.index].type;\n this._router.navigate([], { relativeTo: this.route, queryParams: { page: 1 } });\n }\n\n\n searchBooking(value) {\n this.searchBookingBy = value;\n }\n\n}\n","import {\n Booking\n} from '@mckinsey-converge/data-common';\n\n\nexport class BookingResultsViewModel {\n constructor(public booking: Booking) {\n }\n}\n\n/**\n * For each result from results, we find its level and building from the lists.\n */\nexport const mapResultsToViewModels = (results: Booking[]): BookingResultsViewModel[] => {\n if (!results || !results[0]?.space) {\n return [];\n }\n return results.map((booking: Booking) => {\n return new BookingResultsViewModel(\n booking,\n );\n }); \n}\n\n","import { Component, Inject, OnInit, ViewEncapsulation, ElementRef, Input, ViewChild, ChangeDetectorRef } from '@angular/core';\nimport {\n Space,\n RoomResultsViewModel,\n BookingStoreState,\n User,\n Booking,\n BookingFormData,\n BOOKING_STATUS,\n checkCollisions,\n SpacesService,\n BookingsService,\n BookingStateService,\n clearBookingFormData,\n ApplicationService,\n selectFilteredByIdResults,\n FilteredSpaces,\n selectActiveForm,\n roomFormDataToQuery,\n storeBookingFormData,\n getNextFreeBookingSlot,\n} from '@mckinsey-converge/data-common';\nimport { MAP_OVERLAY_DATA } from '@acaprojects/ngx-interactive-map';\nimport { DateTime } from 'luxon';\nimport { Point, BaseDirective, closestToTimeSlot, HashMap, closestToTimeSlotTz } from '@mckinsey-converge/base';\nimport { BehaviorSubject, Observable, interval, timer, of } from 'rxjs';\nimport { CENTER_POINT, MIN_ZOOM_LEVEL } from 'src/app/map/map.utils';\nimport { Store, select } from '@ngrx/store';\nimport { RoomStoreState, loadByIdResults, loadRoomsForResults } from '@mckinsey-converge/rooms';\nimport { BuildingStoreState } from '@mckinsey-converge/buildings';\nimport { UserStoreState } from '@mckinsey-converge/user';\nexport type RoomResultsState = BookingStoreState &\n RoomStoreState &\n BuildingStoreState &\n UserStoreState;\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport { delay, map, take } from 'rxjs/operators';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n// import { WAITING_TIME } from '../floor-map.utils'; // commented and re declare below due to circular dependency overlay > util > overlay\n\nexport const WAITING_TIME = 15;\n\ninterface SpaceWithReturnData extends Space {\n // callback?: Function,\n room?: RoomResultsViewModel;\n parentComponent?: any;\n roomObs?: Observable\n}\n\ninterface InProgressRoomBookingTimeInfo {\n\tcurrentStatus: string,\n\tactiveBookings: Booking[],\n\ttimeUntilNextBooking: number,\n\ttimeRemainingInActiveBooking : number,\n}\n/**\n * Replaces the built-in {@link MapPinComponent} based on design.\n */\n@Component({\n selector: 'foor-map-overlay',\n template: `\n
\n
\n\n
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n \t\n
\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tThis room is available\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tRoom {{ data.simple_name || data.name || '' }} is available for booking\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tBook now for:\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tUntil next booking\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t Available if you book in the next {{minutesRemaining}}:{{secondsRemaining}} minutes\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\tRefresing availability ...\n\t\t\t\t\t\t\t
\n \t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\tThis room is booked\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t Apologies, this room has been booked recently by another user, please try another one. \n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n
\n
\n
\n `,\n styleUrls: ['./floor-map-overlay.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n})\nexport class FloorMapOverlayComponent extends BaseDirective implements OnInit {\n public selectedRoomId = this.data.id;\n\n public zoom = new BehaviorSubject(MIN_ZOOM_LEVEL);\n public center = new BehaviorSubject(CENTER_POINT);\n\n public date = DateTime.now().valueOf();\n /** Current User */\n public currentUser: User;\n\n public availableUntil = parseInt(this.data?.settings?.available_until.toString()) * 1000;\n public diff: any;\n\n public latestBooking: any[];\n public latestBookingStartTime: string;\n public diffInHours: number;\n public diffInMinutes: number;\n public booking: Booking = new Booking({});\n public loading: boolean;\n public bookingData = new BehaviorSubject(undefined);\n public confirmed: boolean = false;\n /** Whether booking has succeeded */\n public success: boolean;\n public diffInMs: number;\n public futureBookingsForTheDay: HashMap[];\n public untilNextBookingFlag: boolean = false;\n public start_epoch: any;\n public end_epoch_15: any;\n public end_epoch_30: any;\n\n public userSelectedRoom: RoomResultsViewModel;\n\n // @ViewChild('time', { static: false }) public time: ElementRef;\n public isTimerActive: boolean = true;\n minutesRemaining: number | string;\n secondsRemaining: number | string;\n isAvailable: boolean = true;\n intervalCall_15: any;\n intervalCall_1: any ;\n\t\ttimerIndex = 0;\n\t\tpublic currentMin;\n\n constructor(\n @Inject(MAP_OVERLAY_DATA) public data: SpaceWithReturnData,\n private elementRef: ElementRef,\n public store: Store,\n public _spaces: SpacesService,\n public _bookings_service: BookingsService,\n public _booking_state_service: BookingStateService,\n public _service: ApplicationService,\n // public cdRef: ChangeDetectorRef,\n ) {\n super();\n }\n\n public updateRoomData(space) {\n\n\t\t\t\t\t\t// get all booking of selected room\n this.fetchRoomWithBookings(false);\n\n\t\t\t\t\t\t// subscrip selected room detail with all bookings for the day\n this.subscription(\n 'bookingSpaceResults',\n this.store.pipe(select(selectFilteredByIdResults)).subscribe((next) => {\n if (next.success.spaces) {\n\n space.space = next.success.spaces[0];\n this.userSelectedRoom = space;\n\n this.isTimerActive = true;\n\n this.availableUntil = parseInt(this.userSelectedRoom.space.settings.available_until.toString()) * 1000;\n\n\t\t\t\t\t\t\t\t\t\t\t\t//Retrive and calculate reamining time related information for the selected room and its upcomming bookings\n\t\t\t\t\t\t\t\t\t\t\t\tconst {currentStatus, activeBookings, timeRemainingInActiveBooking, timeUntilNextBooking} = this.calculateRoomBookingTimeInfo();\n\t\t\t\t\t\t\t\t\t\t\t\tthis.diff = timeUntilNextBooking\n // inform user if space has been booked by other\n if( currentStatus !== 'available') {\n if(activeBookings.length && timeRemainingInActiveBooking < 15 && timeUntilNextBooking >= 15 ) {\n this.setupTimer();\n // this.isAvailable = true;\n //update up start and end epoch times for a booking button options\n this.updateSchedulingEpochs();\n } else {\n this.isAvailable = false;\n this.intervalCall_1?.unsubscribe();\n clearInterval(this.intervalCall_15);\n }\n\n }else {\n this.setupTimer();\n // this.isAvailable = true;\n //update up start and end epoch times for a booking button options\n this.updateSchedulingEpochs();\n }\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Determine available time until next booking start time\n this.determineNextBookingStartTime();\n }\n })\n );\n\n }\n\n\t\t/**\n\t\t * Retrive and calculate reamining time related information for the selected room and its upcomming bookings\n\t\t * @returns\n\t\t */\n\t\tpublic calculateRoomBookingTimeInfo(): InProgressRoomBookingTimeInfo {\n\n\t\t\tconst now: any = DateNow(new Date()); // current date time\n\n\t\t\t// Retirive a list of bookings and map them to booking objects\n\t\t\tconst bookings = this.userSelectedRoom.space.settings.bookings.map(b => new Booking(b));\n\n\t\t\t// Filter active/in-progress bookings based on the current time\n\t\t\tconst activeBookings = bookings.filter(booking =>\n\t\t\t\t\t\tnow.isAfterDate(booking.startDateTz.startOfValue('second')) &&\n\t\t\t\t\t\tnow.isBeforeDate(booking.endDateTz.startOfValue('second') )\n\t\t\t);\n\n\t\t\t// Retrive the status of the selected room from parent component data\n\t\t\tconst currentStatus = this.data.parentComponent.roomStatus.statusMap[this.selectedRoomId]; // \" 'available' / 'in-use'\"\"\n\n\t\t\t// Initialize the variable to track time-related information\n\t\t\tlet timeRemainingInActiveBooking = 0; // The remaining time in the active booking in milliseconds\n\t\t\tlet timeUntilNextBooking = 30; // Time until the start of the next booking minutes\n\n\t\t\t// Check if ther are active bookings (room is 'in-use')\n\t\t\tif(activeBookings.length) {\n\t\t\t\tconst nowTime: any = DateTime.now()\n\t\t\t\t// Calculate the time remaining in the active booking in minutes\n\t\t\t\ttimeRemainingInActiveBooking = Math.abs(Math.round((activeBookings[0].end_epoch * 1000 - nowTime.ts) / 60000));\n\n\t\t\t\t// Determine if an extra minute should be added based on the current minute's remainder when devided by WAITING_TIME\n\t\t\t\tconst addMin = DateTime.now().get('minute') % WAITING_TIME === 0 ? 1 : 0;\n\n\t\t\t\t// calculate the start time of the next booking in the same time slot\n\t\t\t\tconst nextBookingStartTime: any = closestToTimeSlot(DateTime.now().plus({ minutes: addMin, seconds:0 }).setZone(this.userSelectedRoom?.building?.timezone), WAITING_TIME);\n\n\t\t\t\t// Filter futute booking for the day to find the next booking\n\t\t\t\tconst futureBookingsForTheDay = this.userSelectedRoom.space?.settings?.bookings.filter((item) =>\n\t\t\t\t\titem.start_epoch * 1000 >= nextBookingStartTime.ts\n\t\t\t\t);\n\n\t\t\t\t// Check if there is an futute booking for the day\n\t\t\t\tif(futureBookingsForTheDay.length) {\n\t\t\t\t\t// calculate the time until start of the next booking in minutes\n\t\t\t\t\tconst nextBookingStartTimeMs = futureBookingsForTheDay[0].start_epoch * 1000;\n\t\t\t\t\ttimeUntilNextBooking = Math.floor((nextBookingStartTimeMs - nowTime.ts) / (1000 * 60));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t\t\t\tcurrentStatus: currentStatus,\n\t\t\t\t\t\t\tactiveBookings: activeBookings,\n\t\t\t\t\t\t\ttimeUntilNextBooking: timeUntilNextBooking,\n\t\t\t\t\t\t\ttimeRemainingInActiveBooking : timeRemainingInActiveBooking,\n\t\t\t\t\t\t};\n\n\t\t}\n\n public setup15MinTimer() {\n //interval for 15 min\n !this.timerIndex && setTimeout(()=>this.setUpTime(), 1100 ) ;\n this.timerIndex++\n this.intervalCall_15 = window.setInterval(\n () => { this.intervalCall_1?.unsubscribe(); setTimeout(()=>this.setUpTime(), 1100 ) }\n , ( 1000 * 60 * WAITING_TIME ) );\n\n\n }\n\n public setUpTime() {\n // console.log(DateTime.now().setZone(this.userSelectedRoom?.building?.timezone).get('minute'));\n // console.log(DateTime.now().setZone(this.userSelectedRoom?.building?.timezone).get('minute') % WAITING_TIME)\n // console.log(DateTime.now().setZone(this.userSelectedRoom?.building?.timezone).get('second'))\n const addMin = DateTime.now().get('minute') % WAITING_TIME === 0 ? 1 : 0 ;\n const addSeconds = 60 - DateTime.now().get('second');\n let start:any = closestToTimeSlot(DateTime.now().plus({ minutes: addMin, seconds:0 }).setZone(this.userSelectedRoom?.building?.timezone), WAITING_TIME);\n start = start.toLocaleString(DateTime.TIME_SIMPLE);\n if(start !== this.start_epoch ) {\n\n this.start_epoch = start;\n\n // this.availableUntil = parseInt(this.userSelectedRoom.space.settings.available_until.toString()) * 1000;\n // const currentTime = new Date(DateTime.now().valueOf());\n // const endTime = new Date(this.availableUntil);\n // this.diff = Math.abs(Math.round((endTime.getTime() - currentTime.getTime()) / 60000));\n\n const addMin = DateTime.now().get('minute') % WAITING_TIME === 0 ? 1 : 0 ;\n const addSeconds = 60 - DateTime.now().get('second');\n this.startTimer(addMin);\n\n }\n\n\t\t\t\t\t\t//update up start and end epoch times for a booking button options\n\t\t\t\t\t\tthis.updateSchedulingEpochs()\n\n // let end_15: any = closestToTimeSlot(DateTime.now().plus({ minutes: addMin, seconds:0 }).setZone(this.userSelectedRoom?.building?.timezone), WAITING_TIME).plus({ minutes: 15 });\n // end_15 = end_15.toLocaleString(DateTime.TIME_SIMPLE);\n // if(end_15 !== this.end_epoch_15) {\n // this.end_epoch_15 = end_15\n // }\n\n // let end_30: any = closestToTimeSlot(DateTime.now().plus({ minutes: addMin, seconds:0 }).setZone(this.userSelectedRoom?.building?.timezone), WAITING_TIME).plus({ minutes: 30 });\n // end_30 = end_30.toLocaleString(DateTime.TIME_SIMPLE);\n // if(end_30 !== this.end_epoch_30) {\n // this.end_epoch_30 = end_30;\n // }\n }\n\n public ngOnInit(): void {\n this.fetchRoomWithBookings(false);\n\n this.data.parentComponent.childCallback = this.updateRoomData.bind(this);\n this.userSelectedRoom = this.data?.room;\n\t\t\t\tthis.updateSchedulingEpochs();\n this.updateRoomData(this.userSelectedRoom);\n\t\t\t\t// Determine available time until next booking start time\n // this.determineNextBookingStartTime();\n\n this.subscription(\n 'currentUser',\n this.store\n .select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n })\n );\n\n //update up start and end epoch times for a booking button options\n // this.updateSchedulingEpochs();\n this.data.parentComponent.isOverlayOpened = true;\n }\n\n /**\n * This function sets up start and end epoch times for a booking scheduling system.\n * It calculates and assigns various epoch times based on the current time,\n * available until time, and user-selected room's timezone.\n */\n public updateSchedulingEpochs() {\n\n\t\t\tconst now: any = DateTime.now();\n\n\t\t\t// Calculate the time difference in minutes between current and available until time\n\t\t\tconst {currentStatus, activeBookings, timeRemainingInActiveBooking, timeUntilNextBooking} = this.calculateRoomBookingTimeInfo();\n\t\t\t// this.diff = Math.abs(Math.round((this.availableUntil - now.ts) / 60000)); // recheck\n\t\t\tthis.diff = timeUntilNextBooking;\n\n\t\t\t// Determine system availability based on time difference\n\t\t\tthis.isAvailable = timeRemainingInActiveBooking < 15 && timeUntilNextBooking >= 15 // this.diff >= 15;\n\n\t\t\t// Calculate the next time slot for scheduling\n\t\t\tconst addMin = now.get('minute') % WAITING_TIME === 0 ? 1 : 0;\n\t\t\tconst adjustedTime = now.plus({ minutes: addMin, seconds: 0 }).setZone(this.userSelectedRoom?.building?.timezone);\n\n\t\t\t// Calculate and assign the start and end epoch times with 15 and 30-minute intervals\n\t\t\tconst timeSlot = closestToTimeSlot(adjustedTime, WAITING_TIME);\n\t\t\tthis.start_epoch = timeSlot.toLocaleString(DateTime.TIME_SIMPLE);\n\t\t\tthis.end_epoch_15 = timeSlot.plus({ minutes: 15 }).toLocaleString(DateTime.TIME_SIMPLE);\n\t\t\tthis.end_epoch_30 = timeSlot.plus({ minutes: 30 }).toLocaleString(DateTime.TIME_SIMPLE);\n }\n\n ngAfterViewInit() {\n this.setupTimer();\n }\n\n public setupTimer() {\n console.log(DateTime.now().get('second'))\n const addMin = DateTime.now().setZone(this.userSelectedRoom?.building?.timezone).get('minute') % WAITING_TIME === 0 ? 1 : 0 ;\n const addSeconds = 60 - DateTime.now().get('second');\n this.startTimer(addMin);\n }\n\n\n // countdown timer for coachmark\n public startTimer(display = 0, addSeconds = 0) {\n\n // const currentTime = new Date(DateTime.now().valueOf());\n // const endTime = new Date(closestToTimeSlot(DateTime.now().plus({minutes: display, seconds: addSeconds}).setZone(this.userSelectedRoom?.building?.timezone), WAITING_TIME).valueOf());\n // const availableTimeToBook = Math.abs((endTime.getTime() - currentTime.getTime()) / 60000)* 60;\n // let timer = availableTimeToBook; //(this.diff -35) * 60;\n // let minutes;\n // let seconds;\n let timer = 0 ;\n if(timer >= 0){\n this.intervalCall_1 = interval(1000).subscribe(x => {\n\n const currentTime = new Date(DateTime.now().valueOf());\n const endTime = new Date(closestToTimeSlot(DateTime.now().plus({minutes: display, seconds: addSeconds}).setZone(this.userSelectedRoom?.building?.timezone), WAITING_TIME).valueOf());\n const availableTimeToBook = Math.abs((endTime.getTime() - currentTime.getTime()) / 60000)* 60;\n let timer = availableTimeToBook; //(this.diff -35) * 60;\n\n this.isTimerActive = true;\n this.minutesRemaining = Math.floor(timer / 60);\n this.secondsRemaining = Math.floor(timer % 60);\n\n this.minutesRemaining = this.minutesRemaining < 10 ? \"0\" + this.minutesRemaining : this.minutesRemaining;\n this.secondsRemaining = this.secondsRemaining < 10 ? \"0\" + this.secondsRemaining : this.secondsRemaining;\n\n --timer;\n\n if (timer <= 0) {\n timer = 0\n this.intervalCall_1?.unsubscribe();\n // clearInterval(this.intervalCall_1);\n this.isTimerActive = false;\n !this.timerIndex && this.setup15MinTimer();\n\n\t\t\t\t\t\t\t\t\t\tthis.store.select(selectActiveForm).pipe(take(1))\n\t\t\t\t\t\t\t\t\t\t\t.subscribe((form) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst addMin = DateTime.now().setZone(this.userSelectedRoom?.building?.timezone).get('minute') % WAITING_TIME === 0 ? 1 : 0 ;\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst addSeconds = 60 - DateTime.now().setZone(this.userSelectedRoom?.building?.timezone).get('second');\n\t\t\t\t\t\t\t\t\t\t\t\t\tform['date'] = closestToTimeSlot(DateTime.now().setZone(this.userSelectedRoom?.building?.timezone).plus({ minutes: addMin, seconds:0 }), WAITING_TIME).valueOf(),\n\t\t\t\t\t\t\t\t\t\t\t\t\tform.dateTz = closestToTimeSlotTz(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tnew DateTZ({ date: DateTime.now().plus({ minutes: addMin, seconds:0 }), is_local_tz: false, building_tz: form.timezone }),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tWAITING_TIME\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.store.dispatch(storeBookingFormData({ payload: form }));\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.store.dispatch(loadRoomsForResults.request(roomFormDataToQuery(form)));\n\n\t\t\t\t\t\t\t\t\t\t\t});\n\n }\n }) //, 1000, endTime)\n }\n }\n\n\t\t/**\n\t\t * This function updates information related to the lates booking in the selected room\n\t\t */\n public determineNextBookingStartTime() {\n\n\t\t\t\t// Get the current time using DateTime library\n const now = DateTime.now();\n\n\t\t\t\t// Determine if an extra minute should be added based on the current minute's remainder when devided by WAITING_TIME\n const addMin = now.get('minute') % WAITING_TIME === 0 ? 1 : 0;\n\n\t\t\t\t// Adjust the current time by adding the calculated minutes adna setting the timezone based on the selected room's building\n const addjustedTime: any = closestToTimeSlot(\n now.plus({ minutes: addMin, seconds:0 })\n .setZone(this.userSelectedRoom?.building?.timezone), WAITING_TIME\n );\n\n\t\t\t\t\t\t// Check if room is selected and has bookings settings\n if (this.userSelectedRoom?.space) {\n\t\t\t\t\t// Returive the list of future bookings or initializem it as an empaty array\n const futureBookings = this.userSelectedRoom?.space?.settings?.bookings || [];\n\n\t\t\t\t\t\t// Calculate the end time for a 30-minute interval from the addjested time\n const endEpoch30 = addjustedTime.plus({ minutes: 30 }).ts;\n\n\t\t\t\t\t\t// Filter future booking that start after end_epoch_30\n\t\t\t\t\t\tconst futureBookingsForTheDay = futureBookings.filter(item => item.start_epoch * 1000 >= endEpoch30);\n\n\t\t\t\t\t\t// Check if there are futute bookings found\n\t\t\t\t\t\tif(futureBookingsForTheDay.length > 0) {\n\t\t\t\t\t\t\t//Extract the start time of latest booking\n\t\t\t\t\t\t\tconst latestBookingStartTime = new Date(futureBookingsForTheDay[0].start_epoch * 1000);\n\n\t\t\t\t\t\t\t// Calculate the time difference between the latest booking start time and the current time in milliseconds\n\t\t\t\t\t\t\tconst timeDiffMs = latestBookingStartTime.getTime() - now.valueOf();\n\t\t\t\t\t\t\tthis.diffInMs = timeDiffMs;\n\t\t\t\t\t\t\t// Calculate the timne differenc in hours and minutes\n\t\t\t\t\t\t\tthis.diffInHours = Math.floor(timeDiffMs / (1000 * 60 * 60));\n \tthis.diffInMinutes = Math.floor((timeDiffMs % (1000 * 60 * 60)) / (1000 * 60));\n\n\t\t\t\t\t\t\t// Set flag to indicate the wether the difference is NaN (no future booking)\n \tthis.untilNextBookingFlag = !isNaN(timeDiffMs);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis.untilNextBookingFlag = false;\n\t\t\t\t\t\t}\n }\n\n }\n\n //fetch all the bookings for selected room for the day to the store\n public fetchRoomWithBookings(allWeek: boolean = true) {\n const day = 24 * 60;\n const week = day * 7;\n const date = (this.booking?.startDateTz).clone();\n const startOfDay = date.startOfValue('day').setValue({ second: 0, millisecond: 0 });\n const startOfWeek = date.startOfValue('week');\n\n // Query for the entire day for this room\n const query = {\n dateTz: allWeek ? startOfWeek : startOfDay,\n duration: allWeek ? week : day,\n locations: this.data?.id,\n capacity: this.booking?.space?.capacity,\n };\n this.store.dispatch(loadByIdResults.request(query));\n }\n\n public closeModal() {\n const modal = this.elementRef.nativeElement.querySelector('.map-overlay-container');\n modal.classList.add('hide');\n this.data.parentComponent.isOverlayOpened = false;\n this.timerIndex = 0;\n this.isAvailable = false;\n\t\t\t\tthis.untilNextBookingFlag = false;\n this.intervalCall_1?.unsubscribe();\n // clearInterval(this.intervalCall_1);\n // this.intervalCall_15?.unsubscribe();\n clearInterval(this.intervalCall_15);\n }\n\n public roomDataCallback() {\n if (this.data.parentComponent.roomSelected && this.userSelectedRoom) {\n this.data.parentComponent.roomSelected(this.userSelectedRoom);\n }\n }\n\n public onBook(minutes: number) {\n minutes = Math.round(minutes);\n const {filters, settings} = this.userSelectedRoom.space;\n if ( (filters && filters?.equipment_code ) || (settings && settings?.equipment_code) ) {\n this.roomDataCallback();\n } else {\n this.saveChanges(minutes);\n }\n }\n\n public bookingFormToBooking(minutes): Booking {\n const booking_form_data = this.bookingData.value;\n const has_note_buffer =\n booking_form_data?.notes && booking_form_data.notes?.length\n ? { [booking_form_data.selectedRoom.space.email]: 900 }\n : {}; // 900 seconds = 15 min\n const attendees = this.booking.attendees;\n const company = this.booking.company;\n const start_epoch = closestToTimeSlot(DateTime.now(), 15).valueOf() / 1000;\n const end_epoch =\n closestToTimeSlot(DateTime.now(), 15).plus({ minutes: minutes }).valueOf() / 1000;\n\n const raw_data = {\n space: { id: this.selectedRoomId },\n all_day: false,\n attendees,\n // booking_type: booking_form_data?.bookingType.value,\n booking_type: this.userSelectedRoom.space.filters.external === true? \"External\" : \"Internal\",\n catering: [],\n start_epoch,\n end_epoch,\n timezone: booking_form_data?.timezone,\n equipment_codes: {\n [booking_form_data?.selectedRoom.space.email]: booking_form_data?.code,\n },\n expected_attendees: {\n [this.data.email]: 1,\n },\n has_catering: false,\n needs_space: false,\n notes: this.booking.notes,\n organiser: this.currentUser,\n creator: this.currentUser,\n room: this.userSelectedRoom.space,\n title: 'Ad hoc meeting',\n setup: has_note_buffer,\n breakdown: has_note_buffer,\n company,\n };\n console.log(new Booking(raw_data));\n return new Booking(raw_data);\n }\n\n //function for sending final booking request\n public saveChanges(minutes) {\n this.loading = true;\n this.booking = this.bookingFormToBooking(minutes);\n // const booking_form_data = this.bookingData.value;\n this.booking.status = BOOKING_STATUS.approved;\n checkCollisions(this._spaces, this.booking).then(\n (bookable: boolean) => {\n if (!bookable) {\n // TODO - Refactor for https://acaprojects.atlassian.net/browse/MCK-1498\n // API is retuning bookings ouside of requested time range\n // TODO check booking date and times for conflict manually\n this.booking.status = BOOKING_STATUS.unavailable;\n return;\n }\n\n this._bookings_service.save(this.booking).then(\n (bkn) => {\n this.loading = false;\n this.success = true;\n this.confirmed = true;\n this._booking_state_service.replace(bkn);\n\n // When saved, the returned booking has a null room.\n // Correct this so the rest of the code doesn't flake out.\n this.booking = new Booking({ ...bkn.toJSON(), room: this.booking.room });\n // Clear the current booking form\n this.store.dispatch(clearBookingFormData());\n\n // Heap track event\n this._service.analytics.track('create', {\n booking_id: bkn.id,\n office: this.booking.room.building.name,\n room: this.booking.local_room_name,\n start_time: bkn.startDateTz.ms,\n end_time: bkn.endDateTz.ms,\n catering: !!bkn.catering.length,\n headcount: 1,\n });\n this.data.parentComponent.confirmBooking(this.booking);\n },\n (err) => {\n this.loading = false;\n this.confirmed = false;\n if (err.status === 409) {\n // Unavailable Confirmation\n this.booking.status = BOOKING_STATUS.unavailable;\n this._booking_state_service.replace(this.booking);\n this.confirmed = true;\n this.success = false;\n } else {\n console.log(err);\n }\n }\n );\n },\n (err) => {\n // Unavailable Confirmation\n this.loading = false;\n this.timeout(\n 'error',\n () => {\n this.booking.status = BOOKING_STATUS.unavailable;\n this._booking_state_service.replace(this.booking);\n this.confirmed = true;\n this.success = false;\n },\n 500\n );\n }\n );\n }\n}\n","import { SelectOption } from '@mckinsey-converge/ui';\nimport {\n Space,\n SpaceStatus,\n RoomResultsViewModel,\n MapListener\n} from '@mckinsey-converge/data-common';\nimport {\n HashMap,\n Point\n} from '@mckinsey-converge/base';\nimport { MapFeature } from '@acaprojects/ngx-interactive-map/lib/helpers/map.interfaces';\nimport { FloorMapOverlayComponent } from './floor-map-overlay/floor-map-overlay.component';\n\nexport const MIN_ZOOM_LEVEL = 1;\nexport const MAX_ZOOM_LEVEL = 10;\nexport const CENTER_POINT: Point = { x: 0.5, y: 0.5 };\n\nexport const WAITING_TIME = 15;\n\nconst mapSpaceStatusToDisplay = (status: SpaceStatus): string => {\n switch (status) {\n case SpaceStatus.NotBookable:\n return 'Not Bookable';\n case SpaceStatus.Requestable:\n return 'Available by Request';\n case SpaceStatus.Unavailable:\n return 'In Use';\n case SpaceStatus.Available:\n default:\n return 'Available';\n }\n};\n\nconst mapSpaceStatusToOption = (status: SpaceStatus) => ({\n value: status,\n display: mapSpaceStatusToDisplay(status)\n});\n\nexport const legendOptions = (): SelectOption[] => [\n SpaceStatus.Available,\n SpaceStatus.Requestable,\n SpaceStatus.Unavailable,\n SpaceStatus.NotBookable\n].map(mapSpaceStatusToOption);\n\n\nexport const defaultMapBookingRules = [\n 'Rooms showing yellow are restricted and must be requested',\n 'Rooms showing green are available to book for one hour',\n 'Rooms showing red are booked',\n 'Rooms showing grey are not bookable but may be used if they are empty'\n];\n\nexport const defaultMapBookingSubtitle = 'You may request restricted rooms but they will need to be approved by an admin';\n\nexport const generateMapStyleForSpace = (\n space: Space,\n status: SpaceStatus,\n colorStatusMap: HashMap) => {\n const id =\n `${space.map_id}`.indexOf('area') < 0\n ? `area-${space.map_id}-status`\n : space.map_id;\n return (\n {\n id,\n styles: {\n fill: colorStatusMap[`space-${status}`] || '#000',\n opacity: 1\n }\n });\n};\n\n/**\n * Generates actions for mapview handling.\n * @param space - the space to generate\n * @param clickSpace - called when clicked or touched\n * @param hoverSpace - called when you hover over a space\n * @param leaveSpace - called when you leave a space.\n */\nexport const generateMapListenersForSpace = (\n space: Space,\n hoverSpace: () => void,\n leaveSpace: () => void,\n clickSpace: () => void\n): MapListener[] => {\n const id =\n `${space.map_id}`.indexOf('area') < 0\n ? `area-${space.map_id}-status`\n : space.map_id;\n const listeners: MapListener[] = [];\n listeners.push({\n id,\n event: 'mouseenter',\n callback: hoverSpace\n });\n listeners.push({\n id,\n event: 'mouseleave',\n callback: leaveSpace\n });\n if (space.bookable) {\n listeners.push({\n id,\n event: 'click',\n callback: clickSpace\n });\n listeners.push({\n id,\n event: 'touchend',\n callback: clickSpace\n });\n }\n return listeners;\n};\n\n\nexport const spaceToMapFeature = (space: Space): MapFeature => ({\n id: `area-${space.map_id}-status`,\n coordinates: null,\n content: FloorMapOverlayComponent,\n data: {\n ...space\n }\n});\n\nexport const roomToMapFeature = (room: RoomResultsViewModel, parentComponent?: any): MapFeature => ({\n id: `area-${room.space.map_id}-status`,\n coordinates: null,\n content: FloorMapOverlayComponent,\n data: {\n ...room.space,\n parentComponent,\n room\n }\n});\n\n// service account for office floor map view - read only\nexport const SERVICE_ACCOUNT = 'svc_kiosk_converge@mckinsey.onmicrosoft.com';","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { OfficeFloorComponent } from './office-floor/office-floor.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { LibraryModule } from '@acaprojects/ngx-interactive-map';\nimport { MatSelectModule } from '@angular/material/select';\nimport { UiModule } from '@mckinsey-converge/ui';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MapModule } from 'src/app/map/map.module';\nimport { FloorMapOverlayComponent } from './floor-map-overlay/floor-map-overlay.component';\n\nexport const mapModuleImports = [\n CommonModule,\n MatButtonModule,\n LibraryModule,\n MatSelectModule,\n UiModule,\n MatDialogModule,\n MapModule,\n];\n\nexport const mapModuleDeclarations = [\n OfficeFloorComponent,\n FloorMapOverlayComponent,\n // MapControlsComponent,\n // MapFiltersComponent,\n // OfficeInformationModalComponent,\n // MapOverlayComponent\n];\n\n@NgModule({\n declarations: [\n ...mapModuleDeclarations,\n ],\n exports: [\n ...mapModuleDeclarations\n ],\n imports: [\n ...mapModuleImports\n ]\n})\nexport class OfficeFloorMapModule {\n}\n","import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { BehaviorSubject, combineLatest, interval } from 'rxjs';\nimport { BaseDirective, closestToTimeSlot, closestToTimeSlotTz, HashMap, Point } from '@mckinsey-converge/base';\nimport { MapFeature } from '@acaprojects/ngx-interactive-map/lib/helpers/map.interfaces';\nimport { select, Store } from '@ngrx/store';\nimport { BuildingStoreState } from '@mckinsey-converge/buildings';\nimport * as cloneDeep from 'lodash/cloneDeep';\nimport {\n Building,\n BuildingLevel,\n SettingsService,\n Space,\n mapBuildingLevelToOption,\n mapResultsToViewModels,\n RoomResultsViewModel,\n selectActiveForm,\n selectBookingLocations,\n selectSelectedBuildingOptions,\n roomFormDataToQuery,\n FilteredSpaces,\n BookingStoreState,\n storeBookingFormData,\n BookingFormData,\n MapListener,\n selectFilteredDiffSizeResults,\n User,\n selectMapFilteredResults,\n ApplicationService,\n clearRoomFilters,\n\t\tbookingTypeOptions,\n defaultRoomSizeOption,\n} from '@mckinsey-converge/data-common';\nimport { distinctUntilChanged, map, take, withLatestFrom } from 'rxjs/operators';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { filterUndefined } from '@mckinsey-converge/rx-utils';\nimport { MatDialog } from '@angular/material/dialog';\nimport { OfficeInformationModalComponent } from 'src/app/map/office-information-modal/office-information-modal.component';\n\nimport {\n CENTER_POINT,\n generateMapListenersForSpace,\n generateMapStyleForSpace,\n MAX_ZOOM_LEVEL,\n MIN_ZOOM_LEVEL,\n roomToMapFeature,\n SERVICE_ACCOUNT,\n WAITING_TIME,\n} from '../floor-map.utils';\nimport {\n loadDiffSizeResults,\n loadRoomsForResults,\n loadRoomsForResultsMap,\n mapRoomToSelectOption,\n RoomStoreState,\n} from '@mckinsey-converge/rooms';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { selectCurrentUser, UserStoreState } from '@mckinsey-converge/user';\nimport { ActivatedRoute, Router, RouterStateSnapshot } from '@angular/router';\nimport { Location } from '@angular/common';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\nimport { DateTime } from 'luxon';\n\nexport type MapSearchStoreState = BuildingStoreState &\n RoomStoreState &\n BookingStoreState &\n UserStoreState;\n\n@Component({\n selector: 'app-office-floor',\n templateUrl: './office-floor.component.html',\n styleUrls: ['./office-floor.component.scss'],\n})\nexport class OfficeFloorComponent extends BaseDirective implements OnInit, OnChanges {\n @Input()\n public openHeader: boolean = true;\n\n public zoom = new BehaviorSubject(MIN_ZOOM_LEVEL);\n\n public center = new BehaviorSubject(CENTER_POINT);\n public listeners = new BehaviorSubject([]);\n\n public focusedMapSpace = new BehaviorSubject(undefined);\n public features = combineLatest([this.focusedMapSpace]).pipe(\n map((items) => items.filter((i) => !!i))\n );\n\n public focusedRoom = new BehaviorSubject(undefined);\n\n public resultBuildings = new BehaviorSubject([]);\n public resultSpaces = new BehaviorSubject([]);\n public activeBuilding = new BehaviorSubject(undefined);\n public activeLevel = new BehaviorSubject(undefined);\n public activeSpace = new BehaviorSubject(undefined);\n\n /** Mapping of elements to CSS styles */\n public style_map = new BehaviorSubject>>({});\n\n public mapUrl = this.activeLevel.pipe(map((level) => level?.map_url ?? ''));\n\n public bookingLocations = new BehaviorSubject[]>([]);\n public buildingLevelOptions = new BehaviorSubject[]>([]);\n public spaceListOptions = new BehaviorSubject[]>([]);\n\n public activeBuildingOption = combineLatest([this.activeBuilding, this.bookingLocations]).pipe(\n map(([building, locations]) => locations.find((l) => l.value === building?.id))\n );\n\n public activeLevelOption = this.activeLevel.pipe(map(mapBuildingLevelToOption));\n public activeSpaceOption = this.activeSpace.pipe(map(mapRoomToSelectOption));\n public bookingFormData = new BehaviorSubject(undefined);\n\n public roomStatus: any;\n public payload: any;\n /** Current User */\n public currentUser: User;\n public bookingConfirmed = false;\n public bookingData: {};\n serviceAccount: boolean;\n\n constructor(\n private store: Store,\n public dialog: MatDialog,\n private settingService: SettingsService,\n private router: Router,\n private route: ActivatedRoute,\n public _service: ApplicationService,\n private location: Location\n ) {\n super();\n this.payload = location.getState();\n this.payload.floorMap = false;\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n throw new Error('Method not implemented.');\n }\n\n public ngOnInit(): void {\n //clear filters first if any applied previously \n this.store.dispatch(clearRoomFilters());\n\n const selection = { value: this.payload?.payload, display: '' };\n this.payload.building.value = this.payload.building[0].id;\n\n this.subscription(\n 'currentUser',\n this.store\n .select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n this.serviceAccount = this.currentUser.email === SERVICE_ACCOUNT\n })\n );\n\n // get the active form values\n this.subscription(\n 'activeForm',\n this.store\n .pipe(select(selectActiveForm), distinctUntilChanged())\n .subscribe((next: BookingFormData | undefined) => {\n if (next) {\n next.duration = 30;\n this.bookingFormData.next(next); /// <---- timezone setting can be done here\n }\n })\n );\n\n this.subscription(\n 'bookingLocations',\n this.store.pipe(select(selectBookingLocations)).subscribe((next) => {\n this.bookingLocations.next(next);\n // update the map view MCK-1100 when location changes\n const self = this;\n setTimeout(() => {\n self.selectActiveBuilding(self.bookingLocations.value[0]);\n }, 0);\n })\n );\n\n this.subscription(\n 'bookingSpaceResults',\n combineLatest([\n this.store.pipe(\n select(selectMapFilteredResults),\n map((r: LoadingModel) => r.success)\n ),\n this.activeBuilding.pipe(filterUndefined()),\n this.activeLevel.pipe(filterUndefined()),\n ]).subscribe(([filteredSpaces, building, level]) => {\n this.roomStatus = filteredSpaces;\n\n const spacesFromSelection = (filteredSpaces.spaces || []).filter(\n (s) =>\n !!s.map_id &&\n s.zones.includes(building.id) &&\n s.zones.includes(this.payload?.payload)\n );\n\n this.resultSpaces.next(cloneDeep(spacesFromSelection));\n\n const listeners: MapListener[] = [];\n const styles: HashMap> = {};\n const colour_map = this.settingService.get('app.explore.colors') || {};\n spacesFromSelection.forEach((space) => {\n const status = filteredSpaces.statusMap[space.id];\n const mapStyle = generateMapStyleForSpace(space, status, colour_map);\n styles[`#${mapStyle.id}`] = mapStyle.styles;\n listeners.push(\n ...generateMapListenersForSpace(\n space,\n () => {},\n () => {},\n () => {\n if(!this.serviceAccount) {\n this.activeSpace.next(space);\n this.focusOnRoom();\n }\n \n }\n )\n );\n });\n this.style_map.next(styles);\n this.listeners.next(listeners);\n this.isOverlayOpened && this.focusOnRoom();\n })\n );\n\n this.subscription(\n 'bookingResults',\n this.resultSpaces\n .pipe(withLatestFrom(this.activeSpace))\n .subscribe(([resultSpaces, activeSpace]) => {\n this.spaceListOptions.next(resultSpaces.map(mapRoomToSelectOption));\n })\n );\n\n this.subscription(\n 'setActiveSpace',\n this.resultSpaces\n .subscribe((next) => {\n // console.log(this.focusedRoom?.value?.space?.id);\n const space = next.find((s) => s.id === this.focusedRoom?.value?.space?.id)\n space && this.activeSpace.next(space);\n })\n );\n\n\n \n\n this.subscription(\n 'storeResultedBuildings',\n this.store.pipe(select(selectSelectedBuildingOptions)).subscribe((buildings) => {\n this.resultBuildings.next(this.payload.building);\n // if we dont have active building yet, set it here.\n if (buildings.length > 0 && !this.activeBuilding.value) {\n const firstBuilding = buildings[0];\n this.activeBuilding.next(firstBuilding);\n }\n })\n );\n\n this.subscription(\n 'activeBuildingChange',\n this.activeBuilding\n .pipe(\n filterUndefined(),\n map((b: Building) => b.levels)\n )\n .subscribe((levels) => {\n this.buildingLevelOptions.next(levels.map(mapBuildingLevelToOption));\n })\n );\n\n // if levels change and active level no longer part of list, pick first.\n this.subscription(\n 'updateActiveLevelOnActiveBuildingChange',\n this.activeBuilding\n .pipe(\n filterUndefined(),\n distinctUntilChanged(),\n withLatestFrom(this.activeLevel),\n map(\n ([building, activeLevel]) =>\n (activeLevel && building.levels.find((l) => l.id === activeLevel.id)) ||\n building.levels[0]\n )\n )\n .subscribe((level) => {\n this.activeLevel.next(level);\n })\n );\n\n // re-request rooms every minute to update space status.\n this.subscription(\n 'updateSpaceStatusInterval',\n interval(60 * 1000)\n .pipe(withLatestFrom(this.store.select(selectActiveForm)))\n .subscribe(([, form]) => {\n \n form['date'] = closestToTimeSlot(DateTime.now().plus({ minutes: 1 }), WAITING_TIME).valueOf(),\n form.dateTz = closestToTimeSlotTz(\n new DateTZ({ date: DateTime.now().plus({ minutes: 1 }), is_local_tz: false, building_tz: form.timezone }),\n WAITING_TIME\n )\n this.store.dispatch(storeBookingFormData({ payload: form }));\n this.store.dispatch(loadRoomsForResults.request(roomFormDataToQuery(form)));\n })\n );\n\n this.selectActiveBuilding(this.payload.building);\n this.selectBuildingLevel(selection);\n\n }\n\n public zoomIn() {\n if (this.zoom.value < MAX_ZOOM_LEVEL) {\n this.zoom.next(this.zoom.value + 1);\n }\n }\n\n public zoomOut() {\n if (this.zoom.value > MIN_ZOOM_LEVEL) {\n this.zoom.next(this.zoom.value - 1);\n }\n }\n\n public displayOfficeInformation() {\n this.dialog.open(OfficeInformationModalComponent, {\n data: this.activeBuilding.value,\n panelClass: 'mck-alert',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n }\n\n public resetZoomLevels() {\n this.zoom.next(MIN_ZOOM_LEVEL);\n this.center.next(CENTER_POINT);\n this.focusedRoom.next(undefined);\n }\n\n public selectActiveBuilding(selection: SelectOption) {\n this.resultBuildings\n .pipe(\n map((all) => all.find((b) => b.id === selection.value)),\n take(1),\n filterUndefined()\n )\n .subscribe((next) => {\n this.activeBuilding.next(next);\n });\n }\n\n public selectBuildingLevel(selection: SelectOption) {\n this.activeBuilding\n .pipe(\n map((b) => b.levels?.find((l) => l.id === selection?.value)),\n take(1),\n filterUndefined()\n )\n .subscribe((next) => {\n this.activeLevel.next(next);\n });\n }\n\n public selectActiveSpace(selection?: SelectOption) {\n this.resultSpaces\n .pipe(\n map((all) => all.find((s) => s.id === this.focusedRoom?.value.space.id)),\n // take(1),\n filterUndefined()\n )\n .subscribe((next) => {\n this.activeSpace.next(next);\n });\n }\n\n public focusOnRoom() {\n // this.selectedSpace = space;\n this.activeSpace.pipe(take(1), filterUndefined()).subscribe((next) => {\n let delay = 0;\n if (next.level.id !== this.activeLevel.value.id) {\n this.activeLevel.next(next.level);\n delay = 500;\n }\n this.timeout(\n 'updateLevelAndRoom',\n () => {\n const focusedRoom = mapResultsToViewModels(\n [this.activeSpace.value],\n [this.activeLevel.value],\n [this.activeBuilding.value]\n );\n // this.focusedRoom.next(null);\n \n this.focusedRoom.next(cloneDeep(focusedRoom[0]));\n this.isOverlayOpened && this.childCallback( cloneDeep(focusedRoom[0]) );\n\n\t\t\t\t\tconst { filters, settings } = this.focusedRoom?.value?.space; // use of new data structure fields\n if ( this.roomStatus.statusMap[this.focusedRoom.value.space.id] === 'requestable' || (filters?.equipment_code || settings?.equipment_code) ) {\n // submit\n this.store.dispatch(\n storeBookingFormData({\n payload: {\n ...this.bookingFormData.value,\n selectedRoom: this.focusedRoom.value,\n },\n })\n );\n this.roomSelected(this.focusedRoom.value);\n }\n !this.isOverlayOpened && this.focusedMapSpace.next(roomToMapFeature(this.focusedRoom.value, this));\n this.zoom.next(6);\n },\n delay\n );\n });\n }\n\n public isOverlayOpened = false;\n public childCallback;\n\n public exitFullscreen(route: string): void {\n this.store.dispatch(clearRoomFilters());\n\n this.store.select(selectActiveForm).pipe(take(1))\n\t\t\t\t\t.subscribe((form) => {\n\t\t\t\t\t\tform.bookingType = bookingTypeOptions[0],\n form.roomSize = defaultRoomSizeOption,\n\t\t\t\t\t\t\tthis.store.dispatch(storeBookingFormData({ payload: form }));\n\t\t\t\t\t});\n\n const navigationExtras = {\n state: { payload: this.activeLevel.value },\n relativeTo: this.route,\n queryParams: {\n display: 'map',\n },\n };\n this._service.kioskFormFilter = true;\n this.router.navigate([route], navigationExtras);\n }\n\n // public triggerRefresh(){\n // this.subscription(\n // 'activeForm',\n // this.store\n // .pipe(select(selectActiveForm), distinctUntilChanged())\n // .subscribe((next: BookingFormData | undefined) => {\n // if (next) {\n // next.duration = 35;\n // this.bookingFormData.next(next);\n // }\n // })\n // );\n\n // this.subscription(\n // 'bookingSpaceResults',\n // combineLatest([\n // this.store.pipe(\n // select(selectMapFilteredResults),\n // map((r: LoadingModel) => r.success)\n // ),\n // this.activeBuilding.pipe(filterUndefined()),\n // this.activeLevel.pipe(filterUndefined()),\n // ]).subscribe(([filteredSpaces, building, level]) => {\n // this.roomStatus = filteredSpaces;\n\n // const spacesFromSelection = (filteredSpaces.spaces || []).filter(\n // (s) =>\n // !!s.map_id &&\n // s.zones.includes(building.id) &&\n // s.zones.includes(this.payload?.payload)\n // );\n\n // this.resultSpaces.next(spacesFromSelection);\n\n // const listeners: MapListener[] = [];\n // const styles: HashMap> = {};\n // const colour_map = this.settingService.get('app.explore.colors') || {};\n // spacesFromSelection.forEach((space) => {\n // const status = filteredSpaces.statusMap[space.id];\n // const mapStyle = generateMapStyleForSpace(space, status, colour_map);\n // styles[`#${mapStyle.id}`] = mapStyle.styles;\n // listeners.push(\n // ...generateMapListenersForSpace(\n // space,\n // () => {},\n // () => {},\n // () => {\n // this.activeSpace.next(space);\n // this.focusOnRoom();\n // }\n // )\n // );\n // });\n // this.style_map.next(styles);\n // this.listeners.next(listeners);\n // })\n // );\n\n // this.subscription(\n // 'bookingResults',\n // this.resultSpaces\n // .pipe(withLatestFrom(this.activeSpace))\n // .subscribe(([resultSpaces, activeSpace]) => {\n // this.spaceListOptions.next(resultSpaces.map(mapRoomToSelectOption));\n // })\n // );\n // }\n\n public roomSelected(room: RoomResultsViewModel) {\n // submit\n // this.store.dispatch(\n // storeBookingFormData({\n // payload: {\n // ...this.bookingFormData.value,\n // selectedRoom: room,\n // },\n // })\n // );\n\n let organiser = { display: this.currentUser.name, value: this.currentUser.email };\n this.store.dispatch(\n storeBookingFormData({\n payload: {\n organiser: organiser,\n title: 'Ad hoc meeting',\n // attendees: [this.currentUser],\n code: '',\n notes: '',\n head_count: 1,\n selectedRoom: room,\n },\n })\n );\n\n this.router.navigate(['../create'], { relativeTo: this.route });\n }\n\n public getDayOfWeek(date: string | number | Date) {\n const dayOfWeek = new Date(date).getDay();\n return isNaN(dayOfWeek)\n ? null\n : ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'][\n dayOfWeek\n ];\n }\n\n public confirmBooking = (bookingData: {}) => {\n this.bookingConfirmed = true;\n this.bookingData = bookingData;\n };\n}\n","
\n
\n
\n \n \n \n \n
\n \n
\n
\n
\n
\n
\n
Booking Confirmed
\n
\n
\n \n
Confirmed
\n
\n
\n
Status: Confirmed
\n
Date: {{this.getDayOfWeek(this.bookingData?.date_string)}}, {{this.bookingData?.date_string}}
\n
Time: {{this.bookingData?.time_period}} GMT{{this.bookingData?.tz_offset}}
\n
{{this.bookingData?.booking_type}} meeting ({{this.bookingData?.duration}} minutes)
\n
Address: {{this.activeBuilding?.value.address}}, {{this.activeBuilding?.value.city}}
\n
Room: {{this.focusedRoom.value.title}}
\n
Room {{this.focusedRoom.value.capacity}}
\n
\n
\n
\n
\n
\n
\n
Host: {{this.currentUser?.name}}
\n
Attendees: {{this.currentUser?.name}}
\n
Charge Code: {{this.focusedRoom?.value.space.filters.charge_code === false ? \"No charge code\" : \"\"}}
\n
Headcount Estimate: {{this.bookingData?.attendees.length}}
\n
Additional Requirements: {{this.bookingData?.notes[0]}}
\n
\n
\n
\n
\n \n Close\n \n
\n
\n
\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output\n} from '@angular/core';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { BehaviorSubject } from 'rxjs';\nimport {\n ActivatedRoute,\n ParamMap,\n Router\n} from '@angular/router';\nimport { deepDistinctUntilChanged } from '@mckinsey-converge/rx-utils';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'app-results-header',\n template: `\n
\n
\n

Results

\n Matching your search criteria {{resultsCount>=0 ? '('+resultsCount+')' : ''}} \n
\n \n \n
\n `,\n styleUrls: ['./results-header.component.scss']\n})\nexport class ResultsHeaderComponent extends BaseDirective implements OnInit {\n\n public toggleOptions: SelectOption[] = [\n {\n value: 0,\n display: 'List',\n meta: { \n mobile: true\n }\n },\n {\n value: 1,\n display: 'Map',\n meta: { \n mobile: true\n }\n },\n {\n value: 2,\n display: 'Calendar',\n meta: { \n route: 'booking-calendar',\n mobile: false\n }\n }\n ];\n\n public selectedToggle = new BehaviorSubject>(this.toggleOptions[0]);\n\n @Input()\n public resultsCount: number | undefined;\n\n @Output()\n public selectedToggleChange = new EventEmitter>();\n\n constructor(private router: Router,\n private route: ActivatedRoute) {\n super();\n }\n\n public ngOnInit(): void {\n this.selectedToggleChange.next(this.selectedToggle.value);\n\n this.subscription('paramsToUI', this.route.queryParamMap\n .pipe(deepDistinctUntilChanged())\n .subscribe((next: ParamMap) => {\n const retrievedOption = this.toggleOptions.find(o => o.display.toLowerCase() === next.get('display'));\n this.onSelectedChange(retrievedOption ?? this.toggleOptions[0]);\n }));\n }\n\n public onSelectedChange(option: SelectOption) {\n this.selectedToggle.next(option);\n this.selectedToggleChange.next(option);\n\n if(option.meta?.route) {\n this.router.navigate(['booking-calendar'], { relativeTo: this.route });\n }\n else {\n // toggle route.\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: {\n display: option.display.toLowerCase()\n },\n queryParamsHandling: 'merge'\n });\n }\n \n\n }\n\n}\n","import {\n Component,\n Inject,\n OnInit,\n Output,\n EventEmitter,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n MAT_DIALOG_DATA,\n MatDialogRef\n} from '@angular/material/dialog';\n\nimport {\n AbstractControl,\n FormControl,\n FormGroup,\n Validators\n} from '@angular/forms';\nimport {\n dateBuildingFormatString,\n startEndTimeWithZoneFormatString,\n humaniseDuration,\n closestToTimeSlotTz\n} from '@mckinsey-converge/base';\nimport {\n Space,\n SpacesService,\n DEFAULT_BOOKING_DURATION,\n checkCollisions,\n Booking\n} from '@mckinsey-converge/data-common';\nimport { DateTZ, convertLocalTimestampToTimezonedDateTz, convertTimezonedTimestampToLocalDateTz, DateNow } from '@mckinsey-converge/date-tz';\n\ninterface ModalData {\n dateTz: DateTZ,\n duration: number,\n pendingDateTz: DateTZ,\n pendingDuration: number,\n space?: Space,\n rules?: any,\n bookingId?: string,\n currentBooking?: Booking,\n}\n\n@Component({\n selector: 'app-room-availability-preview-modal',\n template: `\n
\n \n
\n \n
New Booking Date/Time
\n
\n
\n \n \n \n \n \n \n \n \n
\n
\n

Room is available for selected date/time.

\n

Room is unavailable for selected date/time.

\n

Checking availability for selected date/time...

\n

\n Please be aware that this booking starts at {{localStart}} and ends at {{localEnd}} in your local timezone.\n

\n
\n
\n
\n
\n

Old

\n

Date: {{dateString}}

\n

Time: {{timeString}}

\n

({{durationString}})

\n \n
\n
\n

New

\n

Date: {{pendingDateString}}

\n

Time: {{pendingTimeString}}

\n

({{pendingDurationString}})

\n
\n
\n
\n
\n \n \n \n
\n `,\n styleUrls: ['./room-availability-preview-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class RoomAvailabilityPreviewModalComponent implements OnInit {\n @Output() public submitForm = new EventEmitter();\n public dateString: string;\n public timeString: string;\n public durationString: string;\n public pendingDateString: string;\n public pendingTimeString: string;\n public pendingDurationString: string;\n public mapBookingRules: readonly string[];\n public mapBookingSubtitle: string;\n public fromDateTz: DateTZ = closestToTimeSlotTz(new DateTZ(), 15);\n public available: boolean = null;\n public formGroup = new FormGroup({\n dateTz: new FormControl(this.fromDateTz, [Validators.required]),\n duration: new FormControl(DEFAULT_BOOKING_DURATION, [Validators.required])\n });\n public localTimezone = \"\";\n public buildingTimezone = \"\";\n public localStart = \"\";\n public localEnd = \"\"\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: ModalData,\n private dialogRef: MatDialogRef,\n private _spaces: SpacesService,\n ) {}\n\n public get pending_date(){\n return this.data.pendingDateTz; // new DateTZ({ date: this.data.pendingDate.valueOf(), is_local_tz: false, building_tz: this.data?.space?.timezone })\n }\n\n public ngOnInit(): void {\n console.log('Here 1');\n this.formGroup.setValue({\n dateTz: this.data.pendingDateTz,\n duration: this.data.pendingDuration,\n });\n console.log('Here 2');\n this.updateDisplay();\n }\n\n // Method run when the confirming the modal.\n public applyChanges(changes: any): void {\n this.data.pendingDateTz = changes.pendingDateTz; // new Date(changes.pendingDate.valueOf());\n this.data.pendingDuration = changes.pendingDuration;\n this.updateDisplay();\n }\n\n public updateDisplay() {\n // this.data.dateTz is the existing time in building time\n // this.data.pendingDateTz is the new time in building time\n const dateTz = this.data.dateTz;\n this.dateString = dateBuildingFormatString(dateTz);\n this.timeString = startEndTimeWithZoneFormatString(dateTz, dateTz.addValue({ minutes: this.data.duration }));\n this.durationString = humaniseDuration(this.data.duration);\n\n const pendingDateTz = this.data.pendingDateTz;\n this.pendingDateString = dateBuildingFormatString(pendingDateTz);\n this.pendingTimeString = startEndTimeWithZoneFormatString(pendingDateTz, pendingDateTz.addValue({ minutes: this.data.pendingDuration }));\n this.pendingDurationString = humaniseDuration(this.data.pendingDuration);\n this.fromDateTz = closestToTimeSlotTz(pendingDateTz, 15); // building value\n\n const setup = {};\n setup[this.data.space.email] = this.data?.currentBooking?.setup[this.data?.space?.email] || 0;\n const breakdown = {};\n breakdown[this.data.space.email] = this.data?.currentBooking?.setup[this.data?.space?.email] || 0;\n\n this.updateCoachmarkTimes(this.data?.space?.timezone);\n\n const mockBooking = new Booking({\n id: this.data.bookingId,\n start_epoch: this.data.pendingDateTz.seconds,\n end_epoch: this.data.pendingDateTz.addValue({ minutes: this.data.pendingDuration }).seconds,\n room: this.data.space,\n setup,\n breakdown, \n });\n\n checkCollisions(\n this._spaces,\n mockBooking\n ).then((bookable: boolean) => {\n this.available = bookable;\n }).catch(() => {\n this.available = false;\n });\n }\n\n public closeModal() {\n this.dialogRef.close(null);\n }\n\n public updateDatePickerValue(dateTz: DateTZ) {\n const pending_date: DateTZ = this.formGroup.value.dateTz\n const day = pending_date.setValue({ \n day: dateTz.dateDay,\n month: dateTz.dateMonth,\n year: dateTz.dateYear\n });\n this.setValue(day, this.formGroup.controls.dateTz);\n }\n\n public setValue($value, formControl: AbstractControl) {\n // valid options are in building time\n formControl.setValue($value); // bulding time\n this.submitForm.emit(this.formGroup.value);\n }\n\n public confirm() {\n const setup = {};\n setup[this.data.space.email] = this.data?.currentBooking?.setup[this.data?.space?.email] || 0;\n const breakdown = {};\n breakdown[this.data.space.email] = this.data?.currentBooking?.setup[this.data?.space?.email] || 0;\n\n const buildingDate = convertLocalTimestampToTimezonedDateTz(this.data.pendingDateTz.ms, this.data?.currentBooking?.timezone);\n const mockBooking = new Booking({\n id: this.data.bookingId,\n start_epoch: buildingDate.seconds,\n end_epoch: buildingDate.addValue({ minutes: this.data.pendingDuration }),\n room: this.data.space,\n setup,\n breakdown, \n });\n\n checkCollisions(\n this._spaces,\n mockBooking\n ).then((bookable: boolean) => {\n this.available = bookable;\n this.dialogRef.close({\n ...this.formGroup.value,\n }); \n }).catch(() => {\n this.available = false;\n });\n }\n\n private updateCoachmarkTimes(timezone: string) {\n if (timezone) {\n this.buildingTimezone = timezone;\n const localizedStartDate = this.formGroup.value.dateTz;\n const localizedEndDate = localizedStartDate.addValue({ minutes: this.formGroup.value.duration });\n this.localStart = localizedStartDate.formatLocalDate(\"h:mma\");\n this.localEnd = localizedEndDate.formatLocalDate(\"h:mma\");\n } else {\n this.buildingTimezone = this.localTimezone.slice(0);\n this.localStart = \"\";\n this.localEnd = \"\";\n } \n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n Input,\n OnInit,\n OnChanges,\n ElementRef,\n ViewChild,\n EventEmitter,\n Output,\n SimpleChanges,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { fromEvent, Subject, BehaviorSubject, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { throttleTime, tap } from 'rxjs/operators';\nimport { CalendarEvent, CalendarEventTimesChangedEvent } from 'angular-calendar';\nimport { BaseClass, durationHumanized, isLessThanBreakpoint } from '@mckinsey-converge/base';\nimport {\n Booking,\n Building,\n BuildingLevel,\n Space,\n User,\n rulesForSpace,\n SpaceRules,\n} from '@mckinsey-converge/data-common';\nimport { generateFeedbackUrl, Urls } from '../../utilities/urls';\nimport { TopBarHeaderMode } from '../room-location-preview/room-location-preview.component';\nimport { RoomAvailabilityPreviewModalComponent } from '../room-availability-preview-modal/room-availability-preview-modal.component';\nimport {\n DateNow,\n DateTZ,\n convertLocalTimestampToTimezonedDateTz,\n convertTimezonedTimestampToLocalDateTz,\n timezoneOffset,\n} from '@mckinsey-converge/date-tz';\nimport { utcToZonedTime } from 'date-fns-tz';\nimport { FormControl } from '@angular/forms';\nimport { DateTime } from 'luxon';\n\nconst WEEKEND_DAYS = [6, 7];\nconst colors = {\n grey: {\n secondary: '#D2D2D2',\n primary: '#A19F9F',\n },\n blue: {\n secondary: '#C0DBF5',\n primary: '#00A9F4',\n },\n red: {\n secondary: '#EB5757',\n primary: '#EB5757',\n },\n};\n\ninterface CalendarClickEvent {\n date: Date;\n}\n\nexport interface BookingBumper {\n top?: string;\n bottom?: string;\n height: string;\n backgroundColor: string;\n}\nexport interface BookingBumpers {\n top: BookingBumper;\n bottom: BookingBumper;\n}\n\nexport type BookingPlus = Booking & { start: number; end: number }; // R--- why again?\nexport type CalendarEventPlus = CalendarEvent & { bumper?: BookingBumpers; booking?: Booking };\n\n@Component({\n selector: 'room-availability-preview',\n templateUrl: './room-availability-preview.component.html',\n styleUrls: ['./room-availability-preview.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RoomAvailabilityPreviewComponent extends BaseClass implements OnInit, OnChanges {\n @ViewChild('scrollContainer') scrollContainer: ElementRef;\n\n @Input() public alternativeWeekStartDateTz: DateTZ;\n // Used when editing a booking\n @Input() public bookingId?: string;\n @Input() public bookings: BookingPlus[];\n /** retain as mutable */\n @Input() public building: Building;\n // R--- could probably use the currentBooking ID edit,\n // The bookingId was an after thought\n @Input() public currentBooking: Booking;\n @Input() public currentUser: User;\n @Input() public dateTz: DateTZ;\n @Input() public duration: number;\n @Input() public expanded: boolean;\n @Input() public level: BuildingLevel;\n /** The theme to use **/\n @Input() public mode: TopBarHeaderMode = TopBarHeaderMode.Light;\n @Input() public space: Space;\n // @Input() public timezone: string;\n\n @Output() public confirmChanges: EventEmitter = new EventEmitter();\n @Output() public handleExpand: EventEmitter = new EventEmitter();\n @Output() public updateCalendarWeekView: EventEmitter = new EventEmitter();\n @Output() public warnIfItHasConflict: EventEmitter = new EventEmitter();\n\n /**\n * placeIntoModal: Input decorator indecate as a flag to adapt component design into a dialog modal \n * (by hiding header and adjusting height so that fit into a modal)\n */\n @Input() public placeIntoModal: boolean = false;\n\n constructor(public dialog: MatDialog) {\n super();\n }\n\n public breakpoint = 768;\n public mobile = false;\n public showDatePicker = false;\n public events: CalendarEventPlus[] = [];\n public dayStartHour: number;\n public dayEndHour: number;\n public viewDateTz: DateTZ;\n public weekViewDateTz: DateTZ;\n public weekViewRangeText: string;\n public showWeekend: boolean = false;\n public currentPage: string;\n public calendarPopupValue = new BehaviorSubject(DateNow(new Date()));\n public pendingChange: boolean = false;\n public pendingDateTz: DateTZ;\n public pendingDuration: number;\n public eventSnapSize: number = 15;\n public dayRefresh: Subject = new Subject();\n public weekRefresh: Subject = new Subject();\n public addMarginOnConflict: boolean = false; // helps to add html class to adjust margin top in case of QR code scan conflict\n public event: CalendarEventPlus = {\n start: new Date(),\n end: new Date(),\n title: '',\n color: colors.blue,\n cssClass: 'selected',\n actions: null,\n resizable: {\n beforeStart: false,\n afterEnd: false,\n },\n draggable: false,\n };\n\n public get timezone(): string {\n return this.dateTz.building_tz;\n }\n\n public get one_day_in_millis() {\n return 86400000;\n }\n\n public get thirty_minutes_in_millis() {\n return 1800000;\n }\n public rules: SpaceRules;\n public modal_data: any = {};\n public scrollFired: boolean = false;\n\n // Values to display a span on the date picker, but the date picker doesn't support this.\n public date_span = {\n start: 0,\n end: 0,\n };\n\n // I can't think of any reason the calendar widget needs to go back further than 2 years, if even that.\n public fromDateTz = DateNow(new Date()).subtractValue({ years: 2 });\n\n public dateControl = new FormControl(new Date().valueOf());\n\n public isEventDate(d: CalendarClickEvent) {\n const date = new DateTZ({ date: d.date.valueOf() }); // local time I think.. problem TODO\n return this.pendingDateTz.isSameDate(date, 'day');\n }\n\n public get inputDate(): Observable {\n return this.calendarPopupValue.pipe(map((d) => d));\n }\n\n public get feedback() {\n return generateFeedbackUrl(this.currentPage);\n }\n\n public ngOnInit(): void {\n // R--- retrun to document\n this.mobile = isLessThanBreakpoint(this.breakpoint);\n this.pendingDateTz = this.dateTz.clone();\n const date = this.dateTz.clone();\n const currentBookingStartDate = this.currentBooking\n ? this.currentBooking.startDateTz.addValue({ seconds: 0 })\n : date;\n this.alternativeWeekStartDateTz = date.startOfValue('week').startOfValue('day');\n\n // Not sure if this is correct\n this.weekViewDateTz = this.alternativeWeekStartDateTz.clone();\n\n this.calendarCenter();\n this.pendingDuration = this.duration;\n this.viewDateTz = new DateTZ({ \n date: DateTime.fromISO(this.pendingDateTz.formatDate('yyyy-MM-dd'))\n }).setValue({ hour: 12, minute: 0 });\n this.setCalendarValue(this.pendingDateTz);\n this.showWeekend =\n WEEKEND_DAYS.includes(currentBookingStartDate.dateWeekday) ||\n WEEKEND_DAYS.includes(date.dateWeekday);\n this.setupEventName();\n this.transformBookings();\n fromEvent(window, 'resize')\n .pipe(throttleTime(500))\n .pipe(\n tap({\n next: (val) => {\n const target = val.target as Window;\n this.mobile = target.innerWidth < this.breakpoint;\n this.expanded ? this.weekRefresh.next() : this.dayRefresh.next();\n },\n })\n )\n .subscribe();\n\n this.rules = rulesForSpace({\n time: this.dateTz.ms,\n duration: this.duration,\n user: this.currentUser,\n rules: this.building?.booking_rules,\n space: this.space,\n });\n\n // Update the display when the screen resizes.\n fromEvent(window, 'resize')\n .pipe(throttleTime(500))\n .pipe(\n tap({\n next: (val) => {\n this.mobile = isLessThanBreakpoint(this.breakpoint);\n this.calendarCenter();\n this.setDislayValues();\n },\n })\n )\n .subscribe();\n this.dateControl.setValue(this.dateTz);\n this.transformBookings();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.expanded) {\n // set if the event is editable\n this.event.draggable = this.expanded;\n this.event.resizable = {\n beforeStart: this.expanded,\n afterEnd: this.expanded,\n };\n const date = this.dateTz;\n this.setCalendarValue(date);\n }\n\n if (this.dayStartHour) this.scrollTo();\n\n if (!this.pendingDateTz) return;\n\n if (changes.bookings || changes.expanded) {\n this.transformBookings();\n }\n if (changes.alternativeWeekStartDateTz) {\n this.setDislayValues();\n }\n if (changes.expanded) {\n this.expanded ? this.weekRefresh.next() : this.dayRefresh.next();\n }\n }\n\n public setDislayValues() {\n const tz_offset = timezoneOffset(this.alternativeWeekStartDateTz.building_tz).hours\n const week_start_date = this.alternativeWeekStartDateTz.subtractValue({hours: tz_offset}).clone(); // Operation needed to trick the mwl-calendar-week-view to display the correct day if the day changes between timezones \n this.weekViewDateTz = this.weekViewDateTz || this.alternativeWeekStartDateTz.clone();\n let week_view_date = this.weekViewDateTz.startOfValue('week'); // new DateTZ({date: this.weekViewDate?.valueOf()}).startOfValue('week')\n if (!this.showWeekend) {\n // Advance from Sunday to Monday\n week_view_date = week_view_date.addValue({ days: 1 });\n }\n\n if (this.mobile) {\n this.weekViewDateTz = week_start_date\n this.weekViewRangeText = `${this.weekViewDateTz.formatDate('d MMMM')}`;\n this.calendarPopupValue.next(this.weekViewDateTz);\n } else {\n this.weekViewDateTz = week_start_date.addValue({ days: this.showWeekend ? 0 : 1 }); // new Date(week_start_date.addValue({ days: this.showWeekend ? 0 : 1 }).ms);\n this.weekViewRangeText = `${week_view_date.formatDate('d MMMM')} - ${week_view_date\n .addValue({ days: this.showWeekend ? 6 : 4 })\n .formatDate('d MMMM yyyy')}`;\n this.calendarPopupValue.next(week_view_date);\n }\n }\n\n public getBumpers(booking: Booking, selected: boolean = false) {\n const email = booking.space.email || this.space.email;\n const setup = booking.setup[email] ? booking.setup[email] / 60 : 0;\n const breakdown = booking.breakdown[email] ? booking.breakdown[email] / 60 : 0;\n\n return {\n top: {\n top: `-${setup - 1}px`,\n height: `${setup}px`,\n backgroundColor: selected ? colors.blue.secondary : colors.grey.secondary,\n },\n bottom: {\n bottom: `-${breakdown - 1}px`,\n height: `${breakdown}px`,\n backgroundColor: selected ? colors.blue.secondary : colors.grey.secondary,\n },\n };\n }\n\n public setupEventName() {\n this.setDislayValues();\n const pending_date = this.pendingDateTz.clone();\n const start_date = pending_date.setValue({ second: 0, millisecond: 0 });\n this.event.start = start_date.JSDate;\n this.event.end = start_date.addValue({ minutes: this.pendingDuration }).JSDate;\n const startHour = parseInt(pending_date.formatDate('H'), 10);\n\n if (startHour === 0) {\n this.dayStartHour = startHour;\n } else if (startHour < 6) {\n const offset = startHour > 3 ? startHour - 2 : startHour;\n this.dayStartHour = startHour - offset;\n } else {\n // The min of 18 is needed so start times after 6pm\n // don't push the calendar view beyond midnight.\n const offset = Math.min(18, startHour - 3);\n this.dayStartHour = offset;\n }\n\n if (!this.scrollFired && this.dayStartHour) {\n this.scrollTo();\n }\n\n this.dayEndHour = Math.max(24, this.dayStartHour + 6);\n this.event.title = `${pending_date\n .formatDate('h:mma')\n .toLocaleLowerCase()} (${durationHumanized(this.pendingDuration, true)})`;\n this.event.cssClass = `selected ${this.showWeekend ? 'show-weekend' : ''} ${\n this.mobile && this.expanded ? 'mobile' : ''\n } `;\n\n if (this.currentBooking) {\n this.event.bumper = this.getBumpers(this.currentBooking);\n this.event.booking = this.currentBooking;\n }\n this.expanded ? this.weekRefresh.next() : this.dayRefresh.next();\n }\n\n public transformBookings() {\n this.calendarSpan();\n const events = [];\n if (Array.isArray(this.bookings)) {\n this.bookings.forEach((raw_booking) => {\n const booking = new Booking(raw_booking);\n const { mode, duration } = this.displayClass(\n booking.startDateTz.ms,\n booking.endDateTz.ms\n );\n\n // back off a ms when end of day to avoid all day wrapping to next day.\n let end = booking.endDateTz;\n const endTime = booking.endDateTz;\n if (endTime.minutes === 0 && endTime.seconds === 0) {\n // back off a ms when the end of day to avoid all day wrapping to next day.\n end = booking.endDateTz.subtractValue({ seconds: 1 });\n }\n\n // When editing skip over the current booking\n if (booking.id === this.bookingId) return;\n\n const utcStart = booking.startDateTz; // building time\n const utcEnd = end; // building time\n // adjust the time to appear as the same time locally ( but technically incorrect for building timezone )\n const adjustedStartDate = utcToZonedTime(utcStart.ms, booking.timezone); // return local time\n const adjustedEndDate = utcToZonedTime(utcEnd.ms, booking.timezone); // return local time\n\n events.push({\n start: adjustedStartDate,\n end: adjustedEndDate,\n title: `Booked by ${booking.booker['name']}`,\n color: colors.grey,\n actions: null,\n cssClass: `booked ${this.mobile && 'mobile'} ${\n this.showWeekend ? 'show-weekend' : ''\n } ${mode}`,\n bumper: this.getBumpers(booking),\n resizable: {\n beforeStart: false,\n afterEnd: false,\n },\n draggable: false,\n booking,\n });\n });\n }\n\n const { mode, duration } = this.displayClass(\n this.event.start.getTime(),\n this.event.end.getTime()\n );\n const event = Object.assign({}, this.event);\n const endTime = new DateTZ({ date: this.event.start.valueOf() }).addValue({\n minutes: this.pendingDuration,\n }); // building time\n if (endTime.minutes === 0 && endTime.second === 0) {\n // back off a ms when the end of day to avoid all day wrapping to next day.\n event.end = endTime.subtractValue({ milliseconds: 1 }).JSDate; // building time\n }\n\n // adjust the time to appear as the same time locally ( but technically incorrect for building timezone )\n // will need to adjust the other way with drag and drop and click actions.\n event.start = utcToZonedTime(event.start, this.timezone); // local time\n event.end = utcToZonedTime(event.end, this.timezone); // local time\n\n event.cssClass = `selected ${this.mobile && this.expanded ? 'mobile' : ''} ${mode}`;\n if (this.currentBooking) {\n event.bumper = this.getBumpers(this.currentBooking, true);\n event.booking = this.currentBooking;\n }\n\n events.push(event);\n this.events = events.slice();\n this.updateTileColor();\n }\n\n public updateTileColor() {\n const pending_date = this.pendingDateTz.clone();\n const start = pending_date.setValue({ second: 0, millisecond: 0 });\n const end = start.addValue({ minutes: this.pendingDuration });\n const booked = this.events.filter((e) => !e.draggable); // this.events are in local time\n const conflict = this.hasConflict(start, end, booked);\n const isEvents = this.events.filter((e) => e.draggable);\n if(isEvents.length ) {\n isEvents[0].color = conflict ? colors.red : colors.blue;\n this.addMarginOnConflict = conflict ? true : false;\n \n } \n !this.expanded && this.warnIfItHasConflict.emit({room: this.space, hasConflict: conflict});\n }\n public displayClass(start: number, end: number) {\n const duration = end - start;\n return {\n duration,\n mode: duration > this.thirty_minutes_in_millis ? 'extended' : 'minimal',\n };\n }\n\n public setCalendarValue(dateTz: DateTZ) {\n let toDate = DateNow().startOfValue('minute');\n if (dateTz) {\n toDate = dateTz.startOfValue('minute');\n }\n if (!this.mobile && toDate.dateWeekday !== 7) {\n toDate = toDate.startOfValue('week');\n }\n this.updateCalendarWeekView.emit(toDate);\n this.weekRefresh.next();\n this.alternativeWeekStartDateTz = toDate;\n this.setDislayValues();\n }\n\n /**\n * Convert the true bulding based time object to a timestamp skewed to the local time\n *\n * @param buildingTz - DateTZ object of time in bulding timezone\n * @returns number - timestamp in local time skewed from bulding time\n */\n public convertTimezonedValueForCalendar(buildingTz: DateTZ) {\n return convertTimezonedTimestampToLocalDateTz(buildingTz.ms, this.timezone).ms;\n }\n\n public hasConflict(startTz, endTz, booked) {\n // Convert the start and end building times to the local timezone for comparison with the localized bookings.\n const localizedStartTime = startTz.ms;\n const localizedEndTime = endTz.ms;\n let email = this.space?.email || this.currentBooking?.room?.email;\n return booked.some((b) => {\n email = email || b.booking?.room?.email;\n // Booking here are local time to render on the calendar correctly\n const setup = b.booking?.setup[email] || 0;\n // R--- This weird augmented booking with start and end needs to be with DateTZ and a getter when ms is needed.\n const bookingStartTime = new DateTZ({ date: b.start.valueOf() }); // local times\n const bookingEndTime = new DateTZ({ date: b.end.valueOf() }); // local times\n const bstart = bookingStartTime.subtractValue({ seconds: setup }).ms;\n const breakdown = b.booking?.breakdown[email] || 0;\n const bend = bookingEndTime.addValue({ seconds: breakdown }).ms;\n\n if (\n (localizedStartTime >= bstart && localizedStartTime < bend) || // booking starts durring a meeting\n (localizedStartTime <= bstart && localizedEndTime > bstart) || // booking ends durring meeting\n (localizedStartTime >= bstart && localizedEndTime <= bend) || // booking starts and ends durring a meeting\n (localizedStartTime <= bstart && localizedEndTime >= bend) // booking overlaps entire meeting\n ) {\n return b.booking?.id !== this.currentBooking?.id;\n }\n return false;\n });\n }\n\n public eventTimesChanged({ event, newStart, newEnd }: CalendarEventTimesChangedEvent): void {\n const s = convertLocalTimestampToTimezonedDateTz(\n newStart.valueOf(),\n this.timezone\n );\n if (s.ms < Date.now()) return;\n // newStart and newEnd are local times from the calendar component\n // merging in with localized bookings in this.events\n this.events = this.events.map((iEvent) => {\n if (event.id && iEvent.id === event.id) {\n return {\n ...event,\n start: newStart,\n end: newEnd,\n };\n }\n return iEvent;\n }); // local times\n\n let buildingStartDateTz = new DateTZ(\n { date: newStart.valueOf()}\n );\n let buildingEndDateTz = new DateTZ(\n { date: Math.ceil(newEnd.valueOf()/900000)*900000 } //For latest bug in CNG-309, make sure end time follows a 15-min interval\n );\n\n // Clear out the seconds and miliseconds to avoid collision by seconds.\n buildingStartDateTz.setValue({ millisecond: 0, second: 0 });\n\n if (buildingStartDateTz < DateNow(new Date())) {\n // compare building time to now\n // Abandon updates if the past\n this.transformBookings();\n return;\n }\n\n let pendingDuration = Math.floor(\n (buildingEndDateTz.ms - buildingStartDateTz.ms) / 60 / 1000\n );\n // Make adjustments to the time and duration so the snap to behavior aligns\n // with the Mckinsey time and duration rules.\n const new_start = buildingStartDateTz.clone(); //new DateTZ({date: buildingNewStart.getTime()}); // building time\n if (pendingDuration >= 60) {\n // check that duration is inc of 1/2 hr\n const d = pendingDuration % 30;\n // if (d) {\n // pendingDuration = Math.floor(pendingDuration + (30 - d));\n // buildingEndDateTz = new_start.addValue({ minutes: pendingDuration }); // building time\n // }\n // check that the start time is 1/2 hr\n const m = parseInt(new_start.formatDate('m'), 10);\n const md = m % 30;\n // if (md) {\n // buildingStartDateTz = new_start.addValue({ minutes: md }); // building time\n // buildingEndDateTz = new_start.addValue({ minutes: pendingDuration }); // building time\n // }\n // Update snap to rules\n // this.eventSnapSize = 30; //done for CNG-309\n } else {\n // check that duration is inc of 1/4 hr\n const d = pendingDuration % 15;\n if (d) {\n // pendingDuration = Math.floor(pendingDuration + (15 - d));\n // buildingEndDateTz = new_start.addValue({ minutes: pendingDuration }); // building time\n }\n this.eventSnapSize = 15;\n }\n\n // Drag and Drop / Resize duration\n const dnd_duration = buildingEndDateTz.ms - buildingStartDateTz.ms;\n if (dnd_duration >= this.one_day_in_millis - 1) {\n // Add that millisecond back in so the angular calender drag and drop snapping still works.\n buildingEndDateTz = buildingEndDateTz.addValue({ milliseconds: 1 });\n }\n\n if (this.rules?.max_length) {\n if (dnd_duration / 60000 > this.rules?.max_length) {\n // Abandon updates if exceeeds max duration\n this.transformBookings();\n return;\n }\n }\n\n // Setup values for conflict checking, add on the setup and breakdown times form comparison\n let conflictCheckStartTime = buildingStartDateTz.clone();\n let conflictCheckEndTime = buildingEndDateTz.clone();\n // Setup and Breakdown\n if (this.currentBooking) {\n const setup = this.currentBooking.setup[this.currentBooking.space.email] || 0;\n if (setup) {\n const start = buildingStartDateTz.clone();\n conflictCheckStartTime = start.subtractValue({ seconds: setup });\n }\n const breakdown = this.currentBooking.breakdown[this.currentBooking.space.email] || 0;\n if (breakdown) {\n const end = buildingEndDateTz.subtractValue({ seconds: 1 });\n conflictCheckEndTime = end.addValue({ minutes: breakdown });\n }\n }\n\n // check existing events\n const start = conflictCheckStartTime;\n const end = conflictCheckEndTime;\n const booked = this.events.filter((e) => e.draggable === false); // this.events are in local time\n const conflict = this.hasConflict(start, end, booked);\n this.dateControl.setValue(start);\n if (conflict) {\n // Abandon updates if conflict\n this.transformBookings();\n return;\n }\n\n // check if the time or duration has changed\n if (this.pendingDateTz !== buildingStartDateTz) {\n this.pendingChange = true;\n } else if (this.pendingDuration !== pendingDuration) {\n this.pendingChange = true;\n }\n\n // set the new Pending Date\n this.pendingDateTz = convertLocalTimestampToTimezonedDateTz(buildingStartDateTz.ms, this.timezone); // building time\n this.pendingDuration = pendingDuration;\n\n this.setupEventName();\n this.transformBookings();\n }\n\n public hourClicked(event: CalendarClickEvent) {\n // convert the calender local input to the building times\n const buildingStartDate = convertLocalTimestampToTimezonedDateTz(\n event.date.valueOf(),\n this.timezone\n ); // return building time\n let startTz = buildingStartDate.clone();\n let endTz = startTz.addValue({ minutes: this.pendingDuration });\n\n if (buildingStartDate.ms < Date.now()) {\n // compare building time to now\n // Abandon past events\n return;\n }\n\n // this.pendingDate is in building time\n if (this.pendingDateTz.ms !== startTz.ms) {\n // comparing building to building\n // Setup and Breakdown\n if (this.currentBooking) {\n const setup = this.currentBooking.setup[this.currentBooking.space.email] || 0;\n if (setup) {\n startTz = startTz.subtractValue({ seconds: setup });\n }\n const breakdown =\n this.currentBooking.breakdown[this.currentBooking.space.email] || 0;\n if (breakdown) {\n endTz = endTz.addValue({ minutes: breakdown });\n }\n }\n\n // check existing events\n const booked = this.events.filter((e) => e.draggable === false);\n // building start and end time but localized bookings\n const conflict = this.hasConflict(startTz, endTz, booked);\n if (conflict) {\n // Abandon updates if conflict\n this.transformBookings();\n return;\n }\n\n this.pendingChange = true;\n this.pendingDateTz = buildingStartDate; // building time\n\n this.setupEventName();\n this.transformBookings();\n }\n }\n\n public displayConfirmationModal() {\n this.modal_data = {\n pendingDateTz: this.pendingDateTz, // building time , new time\n pendingDuration: this.pendingDuration,\n dateTz: this.dateTz, // building time, existing time\n duration: this.duration,\n space: new Space(this.space),\n rules: this.rules,\n bookingId: this.bookingId,\n currentBooking: this.currentBooking,\n };\n\n const dialogRef = this.dialog.open(RoomAvailabilityPreviewModalComponent, {\n data: this.modal_data,\n panelClass: 'mck-modal',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n\n dialogRef.componentInstance.submitForm.subscribe((d: any) => {\n // Apply the confirmed changes\n this.pendingChange = true;\n this.pendingDateTz = d.dateTz;\n this.pendingDuration = d.duration;\n\n dialogRef.componentInstance.applyChanges({\n dateTz: d.dateTz,\n duration: this.pendingDuration,\n pendingDateTz: this.pendingDateTz,\n pendingDuration: this.pendingDuration,\n });\n this.setupEventName();\n this.transformBookings();\n // Change View\n this.setCalendarValue(d.dateTz);\n });\n\n dialogRef.afterClosed().subscribe((d) => {\n // Update the current with pending record\n if (d) {\n // convert the local input values returned into the same time in the building timezone\n const buildingDate = convertLocalTimestampToTimezonedDateTz(\n d.dateTz.ms,\n this.timezone\n );\n this.dateTz = buildingDate;\n this.duration = d.duration;\n this.viewDateTz = new DateTZ({ \n date: DateTime.fromISO(buildingDate.formatDate('yyyy-MM-dd'))\n }).setValue({ hour: 12, minute: 0 })\n this.pendingChange = false;\n this.confirmChanges.emit({ ...d, mobile: this.mobile, save: true });\n } else {\n // this is ok\n const md = this.modal_data;\n this.dateTz = md.dateTz;\n this.duration = md.duration;\n this.pendingDateTz = md.dateTz;\n this.pendingDuration = md.duration;\n this.viewDateTz = new DateTZ({ \n date: DateTime.fromISO(md.dateTz.formatDate('yyyy-MM-dd'))\n }).setValue({ hour: 12, minute: 0 })\n this.pendingChange = false;\n // This is reverting the changes\n this.confirmChanges.emit({\n dateTz: md.dateTz,\n duration: this.duration,\n mobile: this.mobile,\n save: !!d,\n });\n this.setupEventName();\n this.transformBookings();\n this.weekRefresh.next();\n this.alternativeWeekStartDateTz = this.viewDateTz;\n this.setDislayValues();\n }\n });\n }\n\n public goToHelp() {\n window.open(Urls.Help);\n }\n\n public scrollTo() {\n if (this.scrollFired) return;\n this.timeout(\n 'scroll_to',\n () => {\n const ele = document.getElementById('calendarScrollContainer');\n if (ele) {\n ele.scrollTo({\n top: this.dayStartHour * 64,\n left: 0,\n behavior: 'smooth',\n });\n this.scrollFired = true;\n }\n },\n 500\n );\n }\n\n public toggleDatePicker() {\n this.showDatePicker = !this.showDatePicker;\n }\n\n public collapse() {\n this.handleExpand.emit(false);\n // Reset to the initial view\n this.pendingDateTz = this.dateTz; // = new Date(this.date);\n this.pendingDuration = this.duration;\n this.viewDateTz = new DateTZ({ \n date: DateTime.fromISO(this.dateTz.formatDate('yyyy-MM-dd'))\n }).setValue({ hour: 12, minute: 0 })\n this.pendingChange = false;\n this.setupEventName();\n this.transformBookings();\n this.dayRefresh.next();\n }\n\n public calendarBack() {\n let today = this.alternativeWeekStartDateTz; // new DateTZ({date: this.alternativeWeekStartDate});\n if (this.mobile) {\n today = today.subtractValue({ days: 1 });\n } else {\n today = today.subtractValue({ weeks: 1 }).startOfValue('day');\n }\n this.updateCalendarWeekView.emit(today);\n this.weekRefresh.next();\n this.alternativeWeekStartDateTz = today;\n this.setDislayValues();\n }\n\n public calendarSpan() {\n let today = this.pendingDateTz; // new DateTZ({date: this.pendingDate.valueOf()});\n if (this.mobile || !this.expanded) {\n this.date_span.start = today.startOfValue('day').ms;\n this.date_span.end = today.endOfValue('day').ms;\n } else {\n this.date_span.start = today.startOfValue('week').ms;\n this.date_span.end = today.endOfValue('week').ms;\n }\n }\n\n public calendarCenter() {\n let today = this.pendingDateTz.startOfValue('day');\n if (!this.mobile) {\n today = today.startOfValue('week');\n }\n\n this.updateCalendarWeekView.emit(today);\n this.weekRefresh.next();\n this.alternativeWeekStartDateTz = today;\n this.setDislayValues();\n }\n\n public calendarForward() {\n let today = this.alternativeWeekStartDateTz // new DateTZ({date: this.alternativeWeekStartDate});\n if (this.mobile) {\n today = today.addValue({ days: 1 });\n } else {\n today = today.addValue({ weeks: 1 }).startOfValue('day');\n }\n this.updateCalendarWeekView.emit(today);\n this.weekRefresh.next();\n this.alternativeWeekStartDateTz = today;\n this.setDislayValues();\n }\n\n public toggleWeekend() {\n this.showWeekend = !this.showWeekend;\n this.setupEventName();\n }\n}\n","
\n
\n \n \n
\n
\n \n \n
\n
\n
\n

Room Availability

\n

{{space.local_name}}

\n

{{building?.name}}, {{level?.name}}, {{building?.address}}

\n
\n
\n
\n
\n \n \n \n
\n
\n {{weekViewRangeText}}\n \n \n
\n \n Show Weekend\n \n
\n
\n
\n \n\n \n
\n \n {{ day.date | calendarDate:'weekViewColumnHeader':locale }} {{ day.date | calendarDate:'weekViewColumnSubHeader':locale }}\n

{{ isEventDate(day) ? '(Current Selection)' : '' }}

\n
\n
\n \n\n \n \n
\n
\n
\n
\n \n \n &ngsp;\n \n \n
\n \n
\n
\n
\n\n
\n
\n \n \n
\n
\n \n\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n OnChanges,\n Output,\n ViewContainerRef,\n ViewChild\n} from '@angular/core';\nimport {\n AbstractControl,\n FormControl,\n FormGroup,\n FormGroupDirective,\n Validators\n} from '@angular/forms';\nimport {\n BehaviorSubject,\n Observable,\n of,\n Subject\n} from 'rxjs';\nimport {\n catchError,\n debounceTime,\n distinctUntilChanged,\n first,\n map,\n switchMap,\n take,\n withLatestFrom,\n} from 'rxjs/operators';\nimport {\n Store\n} from '@ngrx/store';\nimport {\n checkCollisions,\n Booking,\n User,\n UsersService,\n BookingFormData,\n selectActiveForm,\n SpacesService,\n ApplicationService,\n} from '@mckinsey-converge/data-common';\nimport {\n matchToHighlight\n} from '@mckinsey-converge/base';\n\nimport {\n BaseTemplateComponent,\n SelectOption\n} from '@mckinsey-converge/ui';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\n@Component({\n selector: 'app-room-booking-details-form',\n templateUrl: './room-booking-details-form.component.html',\n styleUrls: ['./room-booking-details-form.component.scss']\n})\nexport class RoomBookingDetailsFormComponent extends BaseTemplateComponent implements OnInit, OnChanges {\n @ViewChild('formRef')\n public formRef: FormGroupDirective;\n /** Number of characters needed before a search will start */\n @Input() public limit = 3;\n /** When the value changes, the form is submitted */\n @Input() public triggerSubmit = '';\n /** Need booking details */\n @Input() public booking: Booking = null;\n /** Data returned to parent */\n @Output() public submitForm = new EventEmitter();\n /** Data returned to parent */\n @Output() public validateForm = new EventEmitter();\n /** Current User */\n public currentUser: User;\n /** Host list to display */\n public host_list: User[];\n /** User list to display from the Attendees search */\n public user_list: User[];\n /** Whether user list is loading */\n public loading: boolean;\n /** Whether to show the attendees hint */\n public showHint = false;\n /** Attendee Input / Search String */\n public searchString: string;\n /** List of users from an API search */\n public searchResults: Observable;\n /** Subject holding the value of the search */\n public searchSubject = new Subject();\n /** Host field options */\n public hostOptions = [];\n /** Attendees options */\n public options = new BehaviorSubject[]>([]);\n /** Selected Attendees */\n public selectedOptions = new BehaviorSubject[]>([]);\n public selectedUsers = new BehaviorSubject[]>([]);\n public needs_charge_code = false;\n public has_delegate = false;\n public available: boolean = null;\n public notesHandle = null;\n public noteValidationClass = '';\n public selectedCompanies = new BehaviorSubject[]>([]);\n public companyOptions = new BehaviorSubject[]>([]);\n\n /** Data collected on this form */\n public bookingFormGroup = new FormGroup({\n organiser: new FormControl(),\n title: new FormControl('', [ Validators.minLength(1)]), //Validators.pattern(\"[^=`~!@#$%*{};:'\\\",_.<>]*\")\n attendees: new FormControl(),\n code: new FormControl('', [Validators.minLength(4), Validators.pattern(/^[a-zA-Z0-9]*$/)]),\n notes: new FormControl(),\n head_count: new FormControl(1, [Validators.required, Validators.min(1)]),\n user_list: new FormControl(),\n host_list: new FormControl(),\n company: new FormControl(),\n opt_out: new FormControl()\n });\n action: string;\n // Indecates that processing request to check availability of breakdown if special requirement being added by user\n checkingBreakdown: boolean = false;\n\n public get invalid_charge_error(): string {\n if (this.bookingFormGroup.controls.code.errors?.required) {\n return 'Charge Code is required';\n }\n if (this.bookingFormGroup.controls.code.errors?.minlength) {\n return 'Charge Code must be at least four characters';\n }\n if (this.bookingFormGroup.controls.code.errors?.pattern) {\n return 'Charge Code cannot contain spaces or special characters';\n }\n return '';\n }\n\n public get headCountControl(): AbstractControl {\n return this.bookingFormGroup.get('head_count');\n }\n\n constructor(\n private _spaces: SpacesService,\n private _snackBar: MatSnackBar,\n private store: Store,\n vcRef: ViewContainerRef,\n private _service: ApplicationService,\n private _users: UsersService) {\n super(vcRef);\n }\n\n public ngOnInit(): void {\n super.ngOnInit();\n this.subscription('currentUser', this.store.select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n })\n );\n\n this._users.initialised.pipe(first((_) => _)).subscribe(() => {\n const user: User = this._users.current;\n const delegates = user.delegates.map((del) => {\n // the kludgy or new User is for when the user service isn't ready.\n const ifUser = this._users.find(del.email);\n return ifUser ? \n new User({ email: ifUser.email, name: ifUser.name, opt_out: del.opt_out }) : \n new User({ email: del.email, name: del.email.split('@')[0].split('_').map((s) => s.charAt(0).toUpperCase() + s.substring(1))\n .join(' ')\n , opt_out: del.opt_out });\n\n // (del) => new User({ email: del.email, name: del.email.split('@')[0].split('_').join(' '), opt_out: del.opt_out })\n });\n if (delegates.length) {\n this.has_delegate = true;\n }\n this.host_list = [user].concat(delegates);\n this.hostOptions = this.host_list.map(h => ({ display: h.name, value: h.email, meta: { user: h } }));\n });\n\n // if we have an active form, refill the information here once.\n this.subscription('reduxData', this.store.select(selectActiveForm)\n .pipe(take(1))\n .subscribe((next: BookingFormData | undefined) => {\n if (next) {\n // Get the Equipment charge code mandatory requirement\n const { filters, settings } = next.selectedRoom?.space;\n const roomBasedEqCode = filters?.equipment_code || settings?.equipment_code;\n const officeBasedEqCode = next.selectedRoom?.building?.required?.equipment_code;\n this.needs_charge_code = roomBasedEqCode !== undefined ? roomBasedEqCode : officeBasedEqCode !== undefined ? officeBasedEqCode: false;\n \n\n if (this.needs_charge_code) {\n this.bookingFormGroup.controls.code.setValidators([Validators.required, Validators.minLength(4), Validators.pattern(/^[a-zA-Z0-9]*$/)]);\n }\n // build the initial options\n const options = [];\n const attendees = next?.attendees || [];\n const organiser = next?.organiser || { display: this.currentUser.name , value: this.currentUser.email, meta: { external: false, user: this.currentUser }};\n const company = next?.company || [];\n\n const opt_out = next?.opt_out || false;\n this.action = next.action || 'new';\n // Load the saved form\n this.bookingFormGroup.setValue({\n organiser,\n title: next.title || '',\n attendees, // options will display current user\n code: next.code || '',\n notes: next.notes || '',\n head_count: next.head_count || '',\n user_list: [],\n host_list: [],\n company,\n opt_out: opt_out\n });\n this.selectedOptions.next(attendees);\n this.options.next(attendees);\n this.selectedCompanies.next(company);\n this.companyOptions.next(company);\n }\n })\n );\n\n // Listen for input changes\n this.searchResults = this.searchSubject.pipe(\n debounceTime(500),\n distinctUntilChanged(),\n switchMap((query) => {\n this.loading = true;\n return query.length >= this.limit\n ? this._users.query({\n q: query,\n cache: 60 * 1000\n })\n : Promise.resolve([]);\n }),\n catchError((_) => of([])),\n map((list: User[]) => {\n this.loading = false;\n return list;\n })\n );\n\n // Process API results\n this.subscription(\n 'search_results',\n this.searchResults.subscribe((list) => {\n this.user_list = list;\n this.user_list.forEach((i: any) => {\n i.match_name = matchToHighlight(i.match_name);\n i.match_email = matchToHighlight(i.match_email);\n return i;\n });\n\n // Build options from returned users\n const options = this.user_list.map(u => {\n return {\n value: u.email,\n display: `${u.name} ${u.email}`,\n groupId: 'one',\n groupHeader: true,\n shortDisplay: `${u.name}`,\n meta: { external: false, user: u },\n };\n });\n // Add the manual option to the beginning of the array\n options.unshift({\n value: this.searchString,\n display: this.searchString,\n groupId: 'one',\n groupHeader: true,\n shortDisplay: this.searchString,\n meta: { external: true, user: null },\n });\n // this.loading = false;\n this.options.next(options);\n })\n );\n\n this.bookingFormGroup.valueChanges.subscribe(val => {\n\n clearTimeout(this.notesHandle);\n if (val?.notes?.length) {\n this.checkingBreakdown = true;\n \n // Check for conflicts if adding a note and default setup and breakdown times.\n this.notesHandle = setTimeout(() => {\n this.validateForm.emit(false);\n const booking = this.booking.clone();\n const setup = {};\n setup[booking.space.email] = booking.setup[booking.space.email] || 900;\n const breakdown = {};\n breakdown[booking.space.email] = booking.breakdown[booking.space.email] || 900;\n\n const mockBooking = new Booking({\n id: booking.id,\n room: booking.space,\n start_epoch: booking.startDateTz.seconds,\n end_epoch: booking.endDateTz.seconds,\n setup,\n breakdown,\n });\n\n checkCollisions(\n this._spaces,\n mockBooking\n ).then((bookable: boolean) => {\n this.checkingBreakdown = false;\n this.available = bookable;\n // this.validateForm.emit(true);\n this.validateForm.emit(this.bookingFormGroup.valid);\n this.noteValidationClass = bookable === false ? 'booked' : 'available';\n // this.loading = false;\n }).catch(() => {\n this.checkingBreakdown = false;\n this.available = false;\n this.validateForm.emit(false);\n this.noteValidationClass = 'booked';\n // this.loading = false;\n\n return;\n });\n }, 200);\n } else {\n this.checkingBreakdown = false;\n this.available = null;\n this.noteValidationClass = '';\n this.validateForm.emit(this.bookingFormGroup.valid);\n }\n\n });\n }\n\n public setOrganiserOptOut(opt_out) {\n this.bookingFormGroup.controls.opt_out.setValue(opt_out);\n }\n\n public updateOrganiser(user) {\n console.log(user);\n }\n\n /** Listen for changes */\n public ngOnChanges(changes: any) {\n if (changes.triggerSubmit && this.formRef) {\n // Trigger the form submit and validation\n this.formRef.onSubmit(undefined);\n }\n }\n\n /**\n * \n * @param key : formcontrol name \n * Function trim value being submitted with only spaces/beginning/end \n */\n public trim(key: string): void {\n this.bookingFormGroup.get(key).setValue(this.bookingFormGroup.get(key).value.trim());\n }\n\n /** Toggle an attendee on/off */\n public toggle(option: SelectOption) {\n const inputValue = option.value\n .split(' ')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n\n let inputValueEmail = '';\n // Check if inputValue is a valid email\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(inputValue)) {\n // If not, replace all spaces with underscores and append a random guest email string\n inputValueEmail = inputValue.replace(/\\s+/g, '_') + `${Math.floor(Math.random() * 99999)}@guest.mckinsey.com`;\n }\n\n // Check for character limit\n if (\n // this.selectedOptions.value.some((option: SelectOption) => option.value === inputValue) ||\n inputValue.length > 50\n ) {\n this._service.notifyWarn('Attendee name cannot exceed 50 characters');\n return;\n }\n\n this.selectedOptions\n .pipe(\n take(1),\n withLatestFrom(this.options),\n map(([selectedOptions, options]) => {\n let opts = selectedOptions.slice();\n const found = opts.some((v) => inputValue === v.value);\n if (found) {\n opts = opts.filter((v) => inputValue !== v.value);\n } else {\n const color = inputValue.toLowerCase().includes('mckinsey.')\n ? 'internal'\n : 'external';\n opts.push({\n ...option,\n value: inputValueEmail,\n display: inputValue,\n shortDisplay: inputValue,\n meta: {\n ...option.meta,\n color,\n },\n });\n }\n\n return opts;\n })\n )\n .subscribe((next) => {\n if (!this.bookingFormGroup.controls.head_count.touched) {\n this.bookingFormGroup.controls.head_count.setValue(next.length + 1);\n }\n this.selectedOptions.next(next);\n });\n }\n\n public clearHeadcount() {\n this.headCountControl.setValue(1);\n }\n\n /** Return the data to the listening parent */\n public onSubmitForm() {\n this.bookingFormGroup.markAllAsTouched();\n // a bit of an issue that the form state isn't saved unless valid\n if (this.bookingFormGroup.valid) {\n const form_data = this.bookingFormGroup.value;\n form_data.user_list = this.user_list;\n form_data.host_list = this.host_list;\n form_data.has_delegate = this.has_delegate;\n this.submitForm.emit(form_data);\n }\n }\n\n /** Take the input and feed it back to the parent to add to attendees array */\n public updateAttendeeOptionsFromUserInput(v: string) {\n const l = v.length;\n const options = this.selectedOptions.value.slice();\n if (!l) {\n this.options.next([]);\n return;\n }\n if (l > 2) {\n // Triggers the API call to search for the user input\n this.searchSubject.next(v);\n }\n\n options.unshift({\n value: v,\n display: v,\n groupId: 'one',\n groupHeader: true,\n shortDisplay: v,\n meta: { external: true },\n });\n this.searchString = v;\n this.options.next(options);\n }\n\n public toggleAttendeesHint() {\n this.showHint = !this.showHint;\n }\n\n public updateCompanyOptionsFromUserInput(v: string) {\n if (!v.length) {\n this.companyOptions.next([]);\n return;\n }\n this.companyOptions.next([{\n value: v,\n display: v,\n groupId: 'two',\n groupHeader: true,\n shortDisplay: v,\n }]);\n }\n\n public toggleCompany(option: SelectOption) {\n this.selectedCompanies.pipe(\n take(1),\n withLatestFrom(this.companyOptions),\n map(([selectedCompanies, options]) => {\n let opts = selectedCompanies.slice();\n const found = opts.some(v => option.value === v.value);\n if (found) {\n opts = opts.filter(v => option.value !== v.value);\n } else {\n opts.push(option);\n }\n\n return opts;\n })\n ).subscribe(next => {\n this.selectedCompanies.next(next);\n });\n }\n}\n","\n
\n
\n
\n \n Meeting Title*\n \n \n \n \n
\n \n {{ ( bookingFormGroup?.get('title').errors && bookingFormGroup?.get('title').hasError('pattern')) ? 'Some special characters (^=`~!@#$%*{};:\\'_\\\",.\\<>) are not allowed' : 'Meeting Title is required'}}\n \n
\n
\n
\n
\n \n \n
\n
\n
\n Optout email notification \n
\n\n
\n \n \n \n Why do we need this?\n
\n
\n Attendee emails are used for visitor management purposes.\n Converge won't send any emails to attendees.\n
\n \n
\n\n
\n
\n \n \n
\n
\n \n Charge Code{{ needs_charge_code ? '*' : '' }}\n \n \n \n \n
\n \n {{ invalid_charge_error }}\n \n
\n
\n
\n
\n \n Headcount estimate*\n \n \n \n \n
\n \n Headcount is required\n \n
\n
\n
\n
\n\n
\n
\n \n Additional requirements (e.g room setup, equipment...)\n \n \n \n \n \n \n

Checking breakdown availability for selected date/time...

\n

\n \n A set up and breakdown time of 15 mins was added to either side\n of your booking to cater for these additional requirements.\n

\n

\n \n A set up and break down time of 15mins was added to either side of your booking to cater for these additional requirements. This has resulted in a conflict with another booking. Please adjust your booking accordingly.\n

\n
\n
\n
\n
\n
\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n OnChanges,\n Output,\n ViewContainerRef,\n ViewChild\n} from '@angular/core';\nimport {\n FormControl,\n FormGroup,\n FormGroupDirective,\n Validators\n} from '@angular/forms';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\nimport { closestToTimeSlot, closestToTimeSlotTz, resetSecondsOnTimestamp } from '@mckinsey-converge/base';\n\nimport {\n distinctUntilChanged,\n map,\n skip,\n take,\n withLatestFrom\n} from 'rxjs/operators';\nimport {\n select,\n Store\n} from '@ngrx/store';\nimport {\n buildingStateSelector,\n selectBuildingOptionsGroupedByCity\n} from '@mckinsey-converge/buildings';\nimport {\n Building,\n BuildingCity,\n flattenDisplayOffices,\n toggleSelectedByGroup,\n storeBookingFormData,\n BookingFormData,\n bookingTypeOptions,\n DEFAULT_BOOKING_DURATION,\n defaultRoomSizeOption,\n internalBookingTypeOption,\n roomSizeOptions,\n selectActiveForm,\n ApplicationService,\n roomSizeOptionsKiosk,\n\t\tRecurrencePeriod,\n generateBookingForm,\n SeriesAction,\n setRecurrenceStartsTime\n} from '@mckinsey-converge/data-common';\nimport { BehaviorSubject } from 'rxjs';\nimport {\n BaseTemplateComponent,\n SelectOption\n} from '@mckinsey-converge/ui';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { DateTime } from 'luxon';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Booking } from '../../../../../../libs/data-common/src';\nimport * as cloneDeep from 'lodash/cloneDeep';\n@Component({\n selector: 'app-room-booking-form',\n templateUrl: './room-booking-form.component.html',\n styleUrls: ['./room-booking-form.component.scss']\n})\nexport class RoomBookingFormComponent extends BaseTemplateComponent implements OnInit, OnChanges {\n @ViewChild('formRef')\n formRef: FormGroupDirective;\n\n @Output()\n public submitForm = new EventEmitter();\n\n @Input()\n public showCancel = false;\n\n @Input()\n public triggerSubmit: number;\n\n /**\n * Used only if showCancel is true.\n */\n @Output()\n public cancelSubmit = new EventEmitter();\n\n // fromDate is the selected date\n public fromDate: number = closestToTimeSlot(DateTime.now(), 15).valueOf(); // R--- depreciate\n /** DateTZ object of the date and time that the date and time picker will begin it's options from */\n public fromDateTz: DateTZ = closestToTimeSlotTz(new DateTZ({ date: Date.now(), is_local_tz: false }), 15);\n public bookingTypeOptions = bookingTypeOptions;\n public roomSizeOptions = roomSizeOptions;\n public localTimezone = DateNow(new Date()).building_tz;\n public localStart = \"\";\n public localEnd = \"\"\n\n public formGroup: FormGroup = new FormGroup({\n id: new FormControl('', []), // used in case of recurring series edit\n location: new FormControl([], [Validators.required]),\n date: new FormControl(this.fromDate, [Validators.required]),\n dateTz: new FormControl(this.fromDateTz, [Validators.required]), // starts out as the next closest available time interval\n duration: new FormControl(DEFAULT_BOOKING_DURATION, [Validators.required]),\n bookingType: new FormControl(internalBookingTypeOption),\n roomSize: new FormControl(defaultRoomSizeOption),\n selectedRoom: new FormControl({}),\n timezone: new FormControl(\"\"),\n offset: new FormControl(\"\"),\n\n\t\trecurrence_period: new FormControl(RecurrencePeriod.WEEKLY),\n recurrence_interval: new FormControl( 1),\n recurrence_endTz: new FormControl( new DateTZ({ date: 1 }).addValue({days: 1})),\n recurrence_count: new FormControl( 0),\n is_recurrent: new FormControl(null),\n recurrence_starts: new FormControl( []),\n recurrence_exceptions: new FormControl([]),\n recurrence_pattern: new FormControl(RecurrencePeriod.WEEKLY), //Helper value to store the last selected pattern (daily, weekly, monthly),\n recurrence_days: new FormControl( []),\n\n ignore: new FormControl('', []), // used in case of recurring series edit\n // TODO, there's a few missing from interface BookingFormData, libs/data-common/src/lib/booking/booking.form.data.ts\n });\n\n\n public options = new BehaviorSubject[]>([]);\n\n public selectedOptions = new BehaviorSubject[]>([]);\n\n constructor(private store: Store,\n // private _service: ApplicationService,\n vcRef: ViewContainerRef, \n private _snackBar: MatSnackBar,\n private _service: ApplicationService,\n ) {\n super(vcRef);\n // if(this._service?.kioskFormFilter) {\n // this.formGroup.setValue({\n // roomSize: roomSizeOptions[3]\n // })\n // }\n }\n\n public ngOnInit(): void {\n\n\n super.ngOnInit();\n // R--- Complicated, need the TZ aware inputs and to not init those inputs until the building timezone is available.\n // R--- See if there's any way to make the timezone retrieval less fragile.\n\n // if we have an active form, refill the information here once.\n // Doesn't run on initial steps, only if you go back to the home page\n this.subscription('reduxData', this.store.select(selectActiveForm)\n .pipe(take(1))\n .subscribe((next: BookingFormData | undefined) => {\n if (next) {\n // set the fromDate correctly\n this.fromDateTz = next.is_recurrent ? next.dateTz : closestToTimeSlotTz(DateNow(), 15); // R--- shouldn't this actually be the current date start of day to make all the options available?\n\n const form = cloneDeep(next);\n this.formGroup.patchValue({\n ...form,\n }, { emitEvent: true });\n\n // this.formGroup.markAllAsTouched();\n // this.formGroup.updateValueAndValidity();\n\n }\n })\n );\n\n // R--- I only see this fire when the modal opens or going to the home page\n this.subscription('formChanges', this.formGroup.valueChanges\n .pipe(\n skip(1), // initial form changes\n distinctUntilChanged())\n .subscribe((next) => {\n const timezone = next.timezone || this.localTimezone\n /**\n * When the selected date changes update the time picker's start time\n * to the nearest available slot of the current day\n */\n this.fromDateTz = next.is_recurrent ? next.dateTz : closestToTimeSlotTz(DateNow(), 15);\n\n /**\n * When the new selected date arrives, update the coachmark displayed below the date time picker\n */\n this.updateCoachmarkTimes(timezone);\n\n })\n );\n\n this.subscription('buildings', this.store.pipe(\n select(buildingStateSelector),\n select(selectBuildingOptionsGroupedByCity),\n map((grouped: Map) => {\n return flattenDisplayOffices(grouped);\n }),\n distinctUntilChanged()\n )\n .subscribe(next => {\n this.options.next(next);\n }));\n }\n\n public ngOnChanges(changes: any) {\n if (changes.triggerSubmit && this.formRef) {\n // Trigger the form submit and validation\n this.formRef.onSubmit(undefined);\n }\n }\n\n public onSubmitForm() {\n if(this.formGroup.controls?.is_recurrent?.value){\n setRecurrenceStartsTime(this.formGroup)\n }\n // Check for past date time\n const formGroupData = this.formGroup.value;\n const is_past = this._checkDateInPast();\n if (is_past) {\n this._service.notifyWarn('Start Time updated to after current time, please click search again.');\n return;\n } else {\n this.formGroup.setValue({\n ...formGroupData,\n date: resetSecondsOnTimestamp(formGroupData.dateTz.ms),\n dateTz: formGroupData.dateTz.setValue({ millisecond: 0, second: 0 })\n });\n }\n this.formGroup.markAllAsTouched();\n if (this.formGroup.valid) {\n this.submitForm.emit(this.formGroup.value);\n }\n }\n\n // public openSnackBar(message: string, action: string) {\n // this._snackBar.open(message, action, {\n // duration: 5000,\n // panelClass: ['yellow-snackbar']\n // });\n // }\n\n // Fires when the location selector value is changed\n public toggle(option: SelectOption) {\n // update the selected value\n this.selectedOptions.pipe(\n take(1),\n withLatestFrom(this.options),\n map(([selectedOptions, options]) => {\n return toggleSelectedByGroup(options, selectedOptions, option);\n })\n ).subscribe(next => {\n // deselecting the location option sets the timezone to local so convert.\n const formGroupDate = this.formGroup.value;\n if (!next.length) {\n this.formGroup.setValue({\n ...this.formGroup.value,\n timezone: this.localTimezone,\n date: formGroupDate.dateTz.ms,\n dateTz: formGroupDate.dateTz.toZone(this.localTimezone)\n });\n } else {\n const buildingTimezone = next[0]?.meta?.building?.timezone || next[0]?.meta?.city?.timezone;\n this.formGroup.setValue({\n ...this.formGroup.value,\n timezone: buildingTimezone,\n date: formGroupDate.dateTz.ms,\n dateTz: formGroupDate.dateTz.toZone(buildingTimezone)\n });\n }\n this._checkDateInPast();\n // Must fire last or location picker will be buggy.\n this.selectedOptions.next(next);\n });\n }\n\n private _checkDateInPast() {\n // Check for past date time\n const formGroupData = this.formGroup.value;\n const date = new DateTZ({ date: this.formGroup.value.dateTz.ms, building_tz: formGroupData.timezone, is_local_tz:false }).addValue({ seconds: 30 })\n const now = DateNow(new Date())\n if (now.isAfterDate(date)) {\n // Reset the start time if in the past\n const closestTz = closestToTimeSlotTz(new DateTZ({ date: Date.now(), is_local_tz: false, building_tz: formGroupData.timezone }).addValue({ minutes: 1 }), 15)\n const prevClosestTz = closestTz.subtractValue({minutes: 15})\n const prevDateTz = prevClosestTz.addValue({ seconds: 30 });\n // R-- why do I do this on submit? move to a another method.\n if(now.isAfterDate(prevDateTz)){\n this.fromDateTz = closestTz;\n }else{\n this.fromDateTz = prevClosestTz;\n }\n\n this.formGroup.setValue({\n ...formGroupData,\n date: resetSecondsOnTimestamp(this.fromDateTz.ms),\n dateTz: this.fromDateTz.setValue({ millisecond: 0, second: 0 })\n });\n return true;\n }\n return false;\n }\n\n private updateCoachmarkTimes(timezone: string) {\n // Resolve the problem that locally I might have the same TZ offset but the names don't match.\n const localTzOffset = DateTime.now().setZone(this.localTimezone).offset;\n const buildingTzOffset = DateTime.now().setZone(timezone).offset;\n\n this.fromDateTz = new DateTZ({ date: this.fromDateTz.ms, is_local_tz: false, building_tz: timezone });\n\n if (localTzOffset !== buildingTzOffset) {\n const startDate = this.formGroup.value.dateTz.clone();\n this.localStart = startDate.formatLocalDate(\"h:mma\");\n this.localEnd = startDate.addValue({ minutes: this.formGroup.value.duration }).formatLocalDate(\"h:mma\");\n } else {\n // No location is selected so coachmark is hidden\n this.localStart = \"\";\n this.localEnd = \"\";\n }\n }\n}\n","\n
\n \n\n\n
\n \n\n \n \n \n \n
\n Please be aware that this booking starts at {{localStart}} and ends at {{localEnd}} in your local timezone.\n
\n
\n\n
\n
\n Recurring booking\n
\n \n \n\n
\n\n \n\n \n \n \n \n \n
","import { Component, ViewEncapsulation, Inject } from '@angular/core';\nimport { BookingFormData, storeBookingFormData, SeriesAction} from '@mckinsey-converge/data-common';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { Store } from '@ngrx/store';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n// import { Router, ActivatedRoute } from '@angular/router';\n\n@Component({\n selector: 'app-room-booking-modal',\n template: `\n
\n \n \n \n \n \n \n \n \n
\n `,\n styleUrls: ['./room-booking-modal.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class RoomBookingModalComponent extends BaseDirective {\n public trigger = Date();\n\n constructor(\n private store: Store,\n private dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private _data: any ) {\n super();\n }\n\n public triggerSubmit() {\n this.trigger = Date();\n }\n\n public submitForm(next: BookingFormData) {\n /// submit\n\n const ignore = this._data?.action === SeriesAction.EDIT ? next.id : null;\n const bookable = this._data?.action === SeriesAction.EDIT || null;\n\n this.store.dispatch(storeBookingFormData({\n payload: {\n ...next,\n ignore, // ignore id in case of recurring edit series\n bookable, // true in case of recurring edit series\n action: this._data?.action || '' // 'edit' in case of recurring edit series\n }\n }));\n this.close('DoNotClearActiveForm'); // do not clear active form if for submit as form need forther in result module\n this._data && this._data.navigateTo && this._data.navigateTo(); // navigate to result in case of staff recurring edit\n\n }\n\n public close(flag: string = '') {\n this.dialogRef.close(flag);\n }\n}\n","import {\n Component,\n OnInit,\n OnDestroy\n} from '@angular/core';\nimport {\n select,\n Store\n} from '@ngrx/store';\nimport { BuildingStoreState } from '@mckinsey-converge/buildings';\nimport {\n AlertMode,\n SelectOption\n} from '@mckinsey-converge/ui';\nimport { loadOrganisations } from '@mckinsey-converge/organisation';\nimport { BaseDirective,\n dateBuildingFormatString,\n} from '@mckinsey-converge/base';\nimport {\n Booking,\n User,\n Building,\n BuildingCity,\n IEngineResponse,\n flattenDisplayOffices,\n selectCancelledBookingsResultsFromState,\n selectHomepageBookingsResultsFromState,\n selectPastBookingsResultsFromState,\n BookingStoreState,\n BookingFormData,\n clearBookingFormData,\n storeBookingFormData,\n BookingsService\n} from '@mckinsey-converge/data-common';\nimport { TopBarHeaderMode } from 'src/app/components/topbar-header/topbar-header.component';\nimport { Urls } from 'src/app/utilities/urls';\nimport {\n ActivatedRoute,\n Router\n} from '@angular/router';\nimport { MatDialog } from '@angular/material/dialog';\nimport { BookingDetailsModalComponent } from '../booking-details-modal/booking-details-modal.component';\nimport { loadRoomsForResults } from '@mckinsey-converge/rooms';\nimport { loadBookingsWithQuery, MyBookingsStoreState } from '@mckinsey-converge/bookings';\nimport { UserStoreState } from '@mckinsey-converge/user';\nimport {\n BehaviorSubject,\n} from 'rxjs';\nimport {\n distinctUntilChanged,\n elementAt,\n map,\n take,\n} from 'rxjs/operators';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport {\n mapResultsToViewModels,\n BookingResultsViewModel\n} from 'src/app/booking/manage-bookings/manage-bookings.viewmodel';\nimport {\n buildingStateSelector,\n selectBuildingOptionsGroupedByCity\n} from '@mckinsey-converge/buildings';\nimport { DateNow } from '@mckinsey-converge/date-tz';\n\nexport type RoomBookingStoreState = BookingStoreState & BuildingStoreState & MyBookingsStoreState & UserStoreState;\n\n@Component({\n selector: 'app-room-booking',\n template: `\n
\n
\n \n \n
\n
\n
\n
\n

Meeting Room Booking

\n
\n \"Booking\n
\n
\n
\n
\n
\n \n \n \n \n
\n
\n
\n

Your Bookings

\n
\n
\n \n
You have no upcoming bookings
\n
\n
\n \n \n
\n
\n \n \n \n \n
\n
\n \n Manage\n
\n
\n
\n
\n
\n `,\n styleUrls: ['./room-booking.component.scss']\n})\nexport class RoomBookingComponent extends BaseDirective implements OnInit, OnDestroy {\n public TopBarHeaderMode = TopBarHeaderMode;\n public AlertMode = AlertMode;\n\n public width = 16;\n\n // public showBanner = true;\n public showBookings = false;\n public showManageButtonA = false;\n public showManageButtonB = false;\n public showManageButtonC = false;\n public dateString: string;\n\n public homepageBookingResults = new BehaviorSubject>(LoadingModel.empty());\n public pastBookingResults = new BehaviorSubject>(LoadingModel.empty());\n public upcomingBookings: BookingResultsViewModel[];\n public buildings = new BehaviorSubject[]>([]);\n public reloading = false;\n\n /** Current User */\n public currentUser: User;\n master_booking: BookingResultsViewModel;\n allBookings: any[];\n\n constructor(private store: Store,\n private router: Router,\n private route: ActivatedRoute,\n private _bookings: BookingsService,\n private dialog: MatDialog) {\n super();\n this.dateString = dateBuildingFormatString(DateNow(new Date()));\n }\n\n public ngOnDestroy() {\n if (typeof window === 'object') {\n window.onbeforeunload = undefined;\n }\n\t\t\t\t// clear interval\n\t\t\t\tthis.clearInterval('refreshBookings');\n }\n\n public ngOnInit(): void {\n // only run on window onload\n if (typeof window === 'object') {\n window.onbeforeunload = (event) => {\n const e = event || window.event;\n this.store.dispatch(clearBookingFormData())\n return e;\n };\n }\n\n this.store.dispatch(loadOrganisations.request());\n\n this.subscription('buildings', this.store.pipe(\n select(buildingStateSelector),\n select(selectBuildingOptionsGroupedByCity),\n map((grouped: Map) => {\n return flattenDisplayOffices(grouped);\n }),\n distinctUntilChanged()\n ).subscribe(next => {\n this.buildings.next(next);\n // console.log('on buildings ')\n // this.refresh('homepage');\n }));\n\n this.subscription('currentUser', this.store.select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User) => {\n // Once we know we have the user loaded\n this.currentUser = new User(user);\n this.store.dispatch(loadBookingsWithQuery({ 'email': this.currentUser.email, 'from': DateNow(new Date()).ms, 'target': 'homepage' }));\n // start the timer at the top of the minute;\n // const offset = DateNow(new Date()).startOfValue('minute').addValue({ minutes: 1 }).ms - DateNow(new Date()).ms;\n // fetch it on one minute interval now that there is room data.\n // setTimeout(() => {\n // console.log('on setTimeout ')\n // this.refresh('homepage')\n this.interval('refreshBookings', () => {\n\t\t\t\t\t\t\t\t\t\t\tthis.refresh('homepage')\n\t\t\t\t\t\t\t\t\t\t}, 60 * 1000);\n // }, offset + 5000)\n\n })\n );\n\n this.reloading = true;\n this.subscription('homepageResults', this.store.pipe(\n select(selectHomepageBookingsResultsFromState)\n ).subscribe(next => {\n // this.reloading = true;\n this.homepageBookingResults.next(next);\n if (!next.isEmpty() && next.success && Array.isArray(next.success.results) && next.success.total) {\n this.reloading = false;\n this.showManageButtonA = true;\n this.upcomingBookings = mapResultsToViewModels(next.success.results).filter(b => !(b.booking.is_recurrent && b.booking.recurrence_type === 'master'));\n this.allBookings = next.success.results;\n\n if (this.upcomingBookings.length) {\n this.showBookings = true;\n }\n } else {\n this.reloading = false;\n this.showManageButtonA = false;\n this.upcomingBookings = [];\n this.showBookings = false;\n }\n }));\n\n this.subscription('pastResults', this.store.pipe(\n select(selectPastBookingsResultsFromState)\n ).subscribe(next => {\n if (!next.isEmpty() && next.optionalSuccess?.total) {\n this.showManageButtonB = true;\n }\n }));\n\n this.subscription('cancelledResults', this.store.pipe(\n select(selectCancelledBookingsResultsFromState)\n ).subscribe(next => {\n if (!next.isEmpty() && next.optionalSuccess?.total) {\n this.showManageButtonC = true;\n }\n }));\n }\n\n public showResults() {\n // Don't show the loading state while we're reloading with Building details.\n return !this.reloading; //|| this.homepageBookingResults.value.hasLoaded();\n }\n\n public getBuilding(booking: Booking) {\n if (this.buildings && booking.building_zone) {\n return this.buildings.value.find(b => booking.building_zone === b.value)?.meta.building;\n }\n return '';\n }\n\n // public hideBanner() {\n // this.showBanner = false;\n // }\n\n public learnMore() {\n window.open(Urls.LearnMore);\n }\n\n public routeToResults(next: BookingFormData) {\n this.store.dispatch(storeBookingFormData({\n payload: {\n ...next\n }\n }));\n this.store.dispatch(loadRoomsForResults.clear());\n this.router.navigate(['results'], { relativeTo: this.route });\n }\n\n public routeToManageBookings() {\n this.router.navigate(['manage'], { relativeTo: this.route });\n }\n\n public refresh(target: string) {\n if (!this.currentUser?.email) {\n return;\n }\n\n // tslint:disable-next-line: max-line-length\n this.store.dispatch(loadBookingsWithQuery({ 'email': this.currentUser.email, 'from': DateNow(new Date()).ms, target }));\n }\n\n\n\t\t/**\n\t\t * Displays detailed information about a booking in a modal dialog.\n\t\t * If the booking is part of a recurring series, it retrieves the master booking\n\t\t * details and displays them along with the selected booking. The modal allows\n\t\t * users to view and interact with the booking details. After the modal is closed,\n\t\t * it checks for special flags to determine if the active form and result data should be cleared.\n\t\t *\n\t\t * @param {BookingResultsViewModel} viewModel - The view model containing booking information to display.\n\t\t */\n public async viewBooking(viewModel: BookingResultsViewModel) {\n\n\t\t\t// Handle logic for recurring bookings to fetch the master booking details\n \t// and set the master_booking property for displaying in the modal\n\t\t\tif(viewModel.booking.is_recurrent) {\n\t\t\t\t\tlet booking = this.allBookings.find(bkn => bkn.id === viewModel.booking.recurrence_master_id && bkn.recurrence_type === 'master1') ;\n\t\t\t\t\tif (!booking) {\n\t\t\t\t\t\t\tbooking = await this._bookings.show(viewModel.booking.recurrence_master_id);\n\t\t\t\t\t}\n\t\t\t\t\tthis.master_booking = mapResultsToViewModels([booking])[0];\n\t\t\t}\n\n\t\t\t// Open a modal dialog to display the booking details along with master booking (if applicable)\n\t\t\tconst dialogRefX = this.dialog.open(BookingDetailsModalComponent, {\n\t\t\t\t\tpanelClass: 'mck-modal-wide-manage-booking',\n\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tbooking: viewModel.booking,\t// Selected booking information\n\t\t\t\t\t\t\tbuilding: this.getBuilding(viewModel.booking),\t// Building information for the booking\n\t\t\t\t\t\t\tmaster_booking: this.master_booking?.booking || null,\t// Master booking details (if available)\n\t\t\t\t\t\t\trefresh: () => {\n\t\t\t\t\t\t\t\t\tthis.refresh('homepage');\t// Function to refresh the homepage after modal closure\n\t\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tautoFocus: false,\n\t\t\t\t\tbackdropClass: 'mck-modal-backdrop',\n\t\t\t});\n\n\t\t\tdialogRefX.afterClosed().subscribe((flag) => {\n\t\t\t\t// Clear form and result data if the flag indicates it's necessary\n\t\t\t\t\tflag !== 'DoNotClearActiveForm' && this.clearFormAndResultData();\n\t\t\t});\n }\n\n\t\t/**\n\t\t * Clears active form and result data from the store.\n\t\t *\n\t\t * This function dispatches actions to clear the active form data and the loaded\n\t\t * rooms data from the store. It is typically used after a modal interaction or\n\t\t * a specific user action to reset the form state and loaded room information.\n\t\t */\n public clearFormAndResultData() {\n this.store.dispatch(clearBookingFormData());\n this.store.dispatch(loadRoomsForResults.clear());\n }\n\n\n}\n","import { Component, OnInit } from '@angular/core';\nimport {\n TopBarHeaderMode,\n RoutePayload,\n} from 'src/app/components/topbar-header/topbar-header.component';\nimport { select, Store } from '@ngrx/store';\nimport {\n Booking,\n User,\n Space,\n BookingFormData,\n selectActiveForm,\n selectFilteredByIdResults,\n BookingStoreState,\n storeBookingFormData,\n DateDurationData,\n OrganisationService,\n SpaceConflictAlertModalData,\n SpaceStatus,\n filterSpacesByAppliedFilters,\n FilteredSpaces,\n Building,\n SpaceFilterReason,\n getLastDateFromList,\n RoomResultsViewModel,\n stringToMinutes,\n} from '@mckinsey-converge/data-common';\nimport {\n BaseDirective,\n dateBuildingFormatString,\n DialogEvent,\n shorterLocalDateFormatString,\n startEndTimeWithZoneFormatString,\n} from '@mckinsey-converge/base';\nimport { BehaviorSubject, fromEvent } from 'rxjs';\nimport { distinctUntilChanged, take, throttleTime, tap, filter } from 'rxjs/operators';\nimport { BuildingStoreState } from '@mckinsey-converge/buildings';\nimport { RoomStoreState, loadByIdResults } from '@mckinsey-converge/rooms';\nimport { Router, NavigationStart, Event as NavigationEvent } from '@angular/router';\nimport { UserStoreState } from '@mckinsey-converge/user';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { MatDialog } from '@angular/material/dialog';\nimport {\n ConflictAlertModalComponent,\n ConflictsModalComponent,\n ConflictsModalComponentData,\n} from '@mckinsey-converge/ui';\n\nexport type RoomResultsState = BookingStoreState &\n RoomStoreState &\n BuildingStoreState &\n UserStoreState;\n\nconst EMPTY_ARRAY = [];\n\n@Component({\n selector: 'app-room-details',\n templateUrl: './room-details.component.html',\n styleUrls: ['./room-details.component.scss'],\n})\nexport class RoomDetailsComponent extends BaseDirective implements OnInit {\n public TopBarHeaderMode = TopBarHeaderMode;\n public booking: Booking;\n // @TODO get this from current settings.\n public backRoute: RoutePayload = {\n route: ['/home', 'results'],\n queryParams: { display: 'list' },\n };\n\n public data = new BehaviorSubject(undefined);\n public byIdResults = new BehaviorSubject(undefined);\n public open: boolean = true;\n // Set to a config once we know where the files are hosted.\n public rootFolderURL = 'assets/img/rooms/';\n // Set in the room availablity callback\n public mobile: boolean = false;\n public expandedLocation: boolean = false;\n public expandedAvailability: boolean = false;\n // Track event date changes in the UI in this param\n public alternativeWeekStartDateTz: DateTZ = new DateTZ();\n /** Current User */\n public currentUser: User;\n /** Display warning banner by default */\n public showInfoBanner: boolean = true;\n /** Space class created from subscribed active form room data */\n public room: Space;\n /** Requested booking start time from subscribed active form data */\n public requestedDateTz: DateTZ;\n /** Requested booking end time from subscribed active form data */\n public requestedEndDateTz: DateTZ;\n\n /** Track alert dialog should display's only once for not bookable or unavailable */\n private isAlertDisplayed: boolean = false;\n /** Update availability status of current rooom */\n public availabilityStatus: string;\n /** Space validity per rule */\n public isSpaceValidAsPerRule: FilteredSpaces;\n\n public orgBuildings: Building[] = [];\n /** Subtype of a room or space. */\n public roomSubtype: string = '';\n\n /* recurrence booking - occurence availability */\n public occurenceAvailability: string = '';\n // set property if user room selection from next business day section on result page\n public nextBusinessDay: boolean = false;\n\n constructor(\n private store: Store,\n private router: Router,\n private _org: OrganisationService,\n public dialog: MatDialog\n ) {\n super();\n /**\n * Router extras expecting from\n * On navigation from result or home page after QR code scan\n */\n if ( this.router.getCurrentNavigation() !== null && this.router.getCurrentNavigation().extras?.state?.payload ) {\n // set property if user room selection from next business day section on result page\n this.nextBusinessDay = this.router.getCurrentNavigation().extras.state.payload?.nextBusinessDay\n this.store.dispatch(storeBookingFormData({\n payload: this.router.getCurrentNavigation().extras.state.payload,\n })\n );\n }\n }\n\n public ngOnInit(): void {\n this.availabilityStatus = 'unavailable';\n this.orgBuildings = this._org.buildings;\n\n this.subscription(\n 'currentUser',\n this.store\n .select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n })\n );\n\n this.subscription(\n 'activeForm',\n this.store\n .pipe(select(selectActiveForm), distinctUntilChanged())\n .subscribe((next: BookingFormData | undefined) => {\n if (next) {\n // set property if user room selection from next business day section on result page\n this.nextBusinessDay = next?.nextBusinessDay || false;\n\n this.data.next(next);\n // R--- selectedRoom could sure use some clarity, why is everything but the kitchen sink in there?\n if (!this.data.value?.selectedRoom || !this.data.value?.dateTz.ms) {\n return;\n }\n // Create a full fledged Space object since the selectedRoom.space is just JSON\n this.room = new Space(this.data.value?.selectedRoom?.space);\n\n // Check room validtion of selected room to maintain status on detail page\n this.checkAvailabiltyAsPerRule();\n this.setAlternativeWeekStartDate(this.data.value?.dateTz);\n\n // Query for the entire day for this room\n this.fetchRooms(false);\n this.setRoomSubType();\n\n this.requestedDateTz = this.data.value?.dateTz;\n if (next.is_recurrent) {\n const { is_local_tz, building_tz} = this?.data?.value?.dateTz;\n const endDateTz = getLastDateFromList( this?.data?.value?.recurrence_starts );\n const endDate = new DateTZ({ date: endDateTz.date.valueOf(), is_local_tz, building_tz }) \n // add one day if user room selection from next business day section on result page\n this.requestedEndDateTz = this.nextBusinessDay ? endDate.addValue({ minutes: this.data?.value.offset }) : endDate;\n\n this.occurenceAvailability = `${this?.room?.availableOccurrences} out of ${this?.room?.totalOccurrences}`;\n }\n }\n })\n );\n\n this.subscription(\n 'byId',\n this.store.pipe(select(selectFilteredByIdResults)).subscribe((next) => {\n this.byIdResults.next(\n next.success?.spaces?.length\n ? next.success.spaces[0].settings.bookings\n : EMPTY_ARRAY\n );\n })\n );\n\n const breakpoint = 450;\n if (window) {\n this.mobile = window.innerWidth < breakpoint;\n }\n\n fromEvent(window, 'resize')\n .pipe(throttleTime(500))\n .pipe(\n tap({\n next: (val) => {\n const target = val.target as Window;\n this.mobile = target.innerWidth < breakpoint;\n },\n })\n )\n .subscribe();\n }\n\n public setRoomSubType() {\n //test\n const room_type = `${this?.room.internal_or_external}_room_types`;\n const temp: string = Array.isArray(this?.room?.room_type)\n ? this?.room?.room_type[0]\n : this?.room?.room_type;\n const type = this?._org?.getOrganizationFiltersByRoomType(room_type)[temp];\n this.roomSubtype = type !== undefined ? `( ${type} Room )` : '';\n }\n\n public isConflictWithOccurences() {\n const conflicts = this?.room?.totalOccurrences - this?.room?.availableOccurrences;\n return { is_conflict: !!conflicts, total_Conflicts: conflicts };\n }\n\n /**\n\t\t * Opens a modal to display recurrence conflicts for a given room.\n\t\t *\n\t\t * @param {Space} room - The room for which recurrence conflicts are being displayed.\n\t\t *\n\t\t * This function opens a modal dialog to show recurrence exceptions (conflicts)\n\t\t * for the specified room.\n\t\t *\n\t\t * TO DO: SAME FUNCTION BEING USED IN apps/staff/src/app/booking/room-details/room-details.component.ts\n\t\t */\n public openRecurrenceConflictsModal(room: Space) {\n let { recurrence_exceptions } = this.data.value;\n\n const recurr_ref = this.dialog.open(\n ConflictsModalComponent,\n {\n maxWidth: '95vw',\n width: '32em',\n data: {\n room_name: room.simple_name,\n conflicts: recurrence_exceptions,\n timezone: room.building.timezone,\n },\n }\n );\n this.subscription(\n 'conflicts_modal_events',\n recurr_ref.componentInstance.event.subscribe((event: DialogEvent) => {\n recurr_ref.close();\n })\n );\n recurr_ref.afterClosed().subscribe(() => this.unsub('conflicts_modal_events'));\n }\n\n\t\t/**\n\t\t * Retrieves the end date string for the booking, considering recurrence if applicable.\n\t\t * If the booking is recurrent.\n\t\t *\n\t\t * @returns {string} The formatted end date string in a shorter local date format.\n\t\t */\n\t\t public get endDateString(): string {\n\t\t\t// if this.requestedEndDateTz is not in use anywhere here in this file than remove that property and use const here\n\t\t\tif(!this.requestedEndDateTz) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\treturn this.requestedEndDateTz.formatDate('ccc d MMM yyyy'); // shorterLocalDateFormatString(this.requestedEndDateTz);\n\t\t}\n\n /**\n * Functino to check if room is available as per room/user rules\n */\n public checkAvailabiltyAsPerRule() {\n this.orgBuildings =\n !this.orgBuildings.length && this.data.value?.buildings\n ? this.data.value?.buildings\n : this.orgBuildings;\n this.isSpaceValidAsPerRule = filterSpacesByAppliedFilters(\n [],\n [this.room],\n this.data.value,\n this.orgBuildings,\n this.currentUser\n );\n }\n\n /**\n * Function popup advise alert dialog if scanned (QR code) room details found conflicts with other booking/s\n * @param room\n */\n alertIfItHasConflict(isBookable, isAvailable) {\n this.isAlertDisplayed = true;\n const data = {\n headerText: !isBookable\n ? SpaceConflictAlertModalData.NotBookableHeaderText\n : !isAvailable\n ? SpaceConflictAlertModalData.NotAvailableHeaderText\n : '',\n message:\n this.isSpaceValidAsPerRule.specificReason === SpaceFilterReason.OfficeRules\n ? SpaceConflictAlertModalData.NotBookableDueToOfficeRule\n : !isBookable\n ? SpaceConflictAlertModalData.NotBookableMessage\n : !isAvailable\n ? SpaceConflictAlertModalData.NotAvailableMessage\n : '',\n buttonLabel: !isBookable\n ? SpaceConflictAlertModalData.NotBookableButtonLabel\n : !isAvailable\n ? SpaceConflictAlertModalData.NotAvailableButtonLabel\n : '',\n callback: !isBookable\n ? this.goToBackRoute.bind(this)\n : !isAvailable\n ? this.expandAvailability.bind(this, true)\n : null,\n shouldClose: isBookable,\n };\n const dialog = this.dialog.open(ConflictAlertModalComponent, {\n data: data,\n panelClass: 'mck-alert',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n disableClose: !isBookable,\n });\n }\n\n public warnIfItHasConflict({ room: room, hasConflict: hasConflict }) {\n if (\n (!room.bookable || !this.isSpaceValidAsPerRule.spaces.length) &&\n !this.isAlertDisplayed\n ) {\n // room is not bookable(not available to book) and no warning dialog displayed yet\n this.alertIfItHasConflict(false, true);\n this.updateAvailabilityStatus(SpaceStatus.Unavailable);\n } else if (!room.available && hasConflict && !this.isAlertDisplayed) {\n //room is not available AT THIS TIME to book (booked) and has conflict with other booking and no warning dialog displayed yet\n this.alertIfItHasConflict(room.bookable, !hasConflict); // (true, true/false)\n this.updateAvailabilityStatus(SpaceStatus.Booked);\n } else {\n /**\n * Update status of availability - Uavailable/Booked/Requestable/Bookable\n * If room is not bookable(not available to book) and warning dialog dispalyed once\n * If room is bookable but not available to boot AT THIS TIME (or and has conflict with other booking) and warning dialog displayed once\n * If room is bookable and availanle to book AT THIS TIME then check the type of room Requestable? or Bookable\n */\n const status =\n !room.bookable || !this.isSpaceValidAsPerRule.spaces.length\n ? SpaceStatus.Unavailable\n : !room.available && hasConflict\n ? SpaceStatus.Booked\n : this.is_request\n ? SpaceStatus.Requestable\n : SpaceStatus.Bookable;\n this.updateAvailabilityStatus(status);\n }\n }\n\n public updateAvailabilityStatus(primaryCheck: string, secondaryCheck?: string) {\n this.availabilityStatus =\n primaryCheck !== ''\n ? primaryCheck\n : this.data.value.is_recurrent ||\n ['unavailable', 'booked'].indexOf(this.availabilityStatus) === -1\n ? secondaryCheck\n : this.availabilityStatus;\n }\n\n public get catering(): string {\n return (\n DateNow(new Date())\n .setValue({ minute: 0, hour: this.room?.building?.catering_hours.start })\n .formatDate('ha')\n .toLocaleLowerCase() +\n ' - ' +\n DateNow(new Date())\n .setValue({ minute: 0, hour: this.room?.building?.catering_hours.end })\n .formatDate('ha')\n .toLocaleLowerCase()\n );\n }\n\n public get dateString(): string {\n\t\t\t\tif(!this.requestedDateTz) return '';\n return this.requestedDateTz.formatDate('ccc d MMM yyyy');; //shorterLocalDateFormatString(this.requestedDateTz);\n \n }\n\n public get focusedRoomMapKey(): string {\n return `area-${this.room?.map_id}-status`;\n }\n\n /** Whether we are only allowed to 'request' the selected space */\n public get is_request(): boolean {\n const data = this.data.value;\n\n /* istanbul ignore else */\n if (!data?.selectedRoom?.space) {\n return false;\n }\n\n const space = new Space(data.selectedRoom.space);\n const isRequest = space.byRequest({\n dateTz: data.dateTz,\n duration: data.duration,\n host: this.currentUser,\n });\n this.updateAvailabilityStatus(\n '',\n isRequest ? SpaceStatus.Requestable : SpaceStatus.Bookable\n );\n return isRequest;\n }\n\n public get roomFeatures(): string[] {\n // const room_type = `${this.room.internal_or_external}_room_types`\n const combinedFeatures = {\n // ...this._org.getOrganizationFiltersByRoomType(room_type),\n ...this._org.getOrganizationFiltersByRoomType('equipment_types'),\n };\n const features = this.room !== undefined ? this.room?.featuresArray.map(\n (feature: string) => combinedFeatures[feature]\n ) : [];\n\n return [...new Set(features)].filter((f) => !!f);\n }\n\n public get roomHasCatering() {\n // Building scope catering available is true or false\n const building = this.data.value?.selectedRoom?.building;\n let hasCatering = building ? building.has_catering : false;\n // but if Room catering is false it overrides the building\n if (this.room?.has_catering === false) {\n hasCatering = false;\n }\n return hasCatering;\n }\n\n public get roomImagesFileSlug(): string {\n return this.room?.email.split('@')[0];\n }\n\n public get mapUrl(): string {\n return this.room?.level?.map_url;\n }\n\n public get timeString(): string {\n\t\t\tif(!this.requestedDateTz) return '';\n\t\t\treturn startEndTimeWithZoneFormatString(\n\t\t\t\t\tthis.requestedDateTz,\n\t\t\t\t\tthis.requestedDateTz.addValue({ minutes: this.data.value?.duration })\n\t\t\t);\n }\n\n /**\n * Get the timezone form the subscribed activeForm\n */\n public get timezone(): string {\n // R--- this.room.timezone wasn't reliable enough on page refresh, something to look into\n return this.data.value.selectedRoom?.building.timezone;\n }\n\n public setAlternativeWeekStartDate(bookingDate: DateTZ) {\n if (!bookingDate) {\n return;\n }\n\n const booking_date = bookingDate.clone();\n if (this.mobile) {\n this.alternativeWeekStartDateTz = booking_date;\n } else {\n this.alternativeWeekStartDateTz = booking_date.startOfValue('week');\n }\n }\n\n public updateCalendarWeekView(alternativeWeekStartDateTz: DateTZ) {\n this.alternativeWeekStartDateTz = alternativeWeekStartDateTz;\n this.fetchRooms(!this.mobile, this.alternativeWeekStartDateTz);\n }\n\n public confirmChanges(data: DateDurationData) {\n // R-- refactor room-availability-preview to return DateTZ so setAlternativeWeekStartDate can use it.\n this.mobile = data.mobile;\n this.setAlternativeWeekStartDate(data.dateTz);\n\n this.fetchRooms(!this.mobile, this.alternativeWeekStartDateTz);\n // submit\n this.store.dispatch(\n storeBookingFormData({\n payload: {\n ...this.data.value,\n dateTz: data.dateTz,\n duration: data.duration,\n },\n })\n );\n }\n\n public fetchRooms(allWeek: boolean = true, alternativeWeekStartDateTz: DateTZ = null) {\n if (!this.room?.id) {\n return;\n }\n\n const day = 24 * 60;\n const week = day * 7;\n\n let start_date = (alternativeWeekStartDateTz || this.data.value.dateTz).clone();\n if (allWeek && start_date.dateWeekday !== 7) {\n start_date = start_date.startOfValue('week');\n }\n\n const startOfDay = start_date.startOfValue('day').setValue({ second: 0, millisecond: 0 });\n const startOfWeek = start_date.setValue({ second: 0, millisecond: 0 }).startOfValue('day');\n\n // Query for the entire day for this room\n const query = {\n dateTz: allWeek ? startOfWeek : startOfDay,\n duration: allWeek ? week : day,\n locations: this.room?.id,\n capacity: this.data.value?.roomSize.value,\n };\n this.store.dispatch(loadByIdResults.request(query));\n }\n\n public removeDateOffset() {\n const data = this.data.value;\n let { dateTz, offset } = data;\n dateTz = dateTz.subtractValue({ minutes: ((typeof offset === 'string' && offset == '') || (typeof offset === 'undefined')) ? 0 : Number(offset) });\n this.store.dispatch(\n storeBookingFormData({\n payload: {\n ...data,\n dateTz: dateTz,\n offset: 0,\n },\n })\n );\n }\n\n public goToBackRoute() {\n this.removeDateOffset();\n this.router.navigate(this.backRoute.route, { queryParams: this.backRoute.queryParams });\n }\n\n public expandMap(open: boolean) {\n this.expandedLocation = open;\n }\n\n public expandAvailability(open: boolean) {\n this.fetchRooms(!this.mobile);\n this.expandedAvailability = open;\n }\n\n public handleClose() {\n this.expandedLocation = false;\n this.expandedAvailability = false;\n this.setAlternativeWeekStartDate(this.data.value?.dateTz);\n this.fetchRooms(false);\n }\n\n /**\n * Continue to Booking Form\n */\n public bookRoom() {\n // submit\n this.store.dispatch(\n storeBookingFormData({\n payload: {\n ...this.data.value,\n },\n })\n );\n\n const bookingRoute = this.data.value.id ? 'edit' : 'create';\n this.router.navigate(['/home', bookingRoute]);\n }\n\n public hideInfoBanner() {\n this.showInfoBanner = false;\n }\n}\n","
\n
\n \n \n
\n
\n \n

This room is not guaranteed until booking confirmation is received.

\n \n
\n
\n \n

This time slot is not available, drag or choose a diferent date or time.

\n
\n
\n
\n \n
\n
\n
\n {{ availabilityStatus | titlecase }} {{ occurenceAvailability }}\n
\n
\n

{{room?.local_name}}

{{data.value?.bookingType.display}}
\n \n
\n
\n \n Equipment\n
    \n
  • \n {{feature}}\n
  • \n
\n
\n
\n
\n \n Catering Available\n
    \n
  • {{catering}}
  • \n
  • (specified in the last booking step)
  • \n
\n
\n
\n
\n
\n
\n

Room Availability:

\n

{{dateString}}

\n \n
\n \n
\n
\n
\n

Room Location:

\n

{{room?.building?.name}}, {{room?.level?.name}}

\n \n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n\n
\n
\n \n {{ open ? '(tap to close)' : '(tap to open)'}}\n
\n

{{ data?.value?.is_recurrent ? 'Recurring' : 'Room' }} Booking Detail

\n
\n\n
\n
Date: {{dateString}}
\n
Time: {{timeString}}
\n
\n
\n
{{data?.value?.recurrence_period === 'list' ? 'Specific dates' :\n data?.value?.recurrence_period | titlecase}}\n -\n Conflicts({{isConflictWithOccurences()?.total_Conflicts}}) \n
\n
Start date: {{dateString}}
\n
End date: {{endDateString}}
\n
Time: {{timeString}}
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n","import {\n Component,\n EventEmitter,\n OnInit,\n Output\n} from '@angular/core';\nimport {\n instantBookOptions,\n roomDetailsRequired,\n roomEquipmentRequiredOptions,\n selectFormFilters,\n selectIsInternal,\n roomCateringAvailable,\n OrganisationService\n} from '@mckinsey-converge/data-common';\nimport {\n select,\n Store\n} from '@ngrx/store';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { BehaviorSubject } from 'rxjs';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport {\n map,\n take\n} from 'rxjs/operators';\n\n@Component({\n selector: 'app-room-filters-form',\n template: `\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n `,\n styleUrls: ['./room-filters-form.component.scss']\n})\nexport class RoomFiltersFormComponent extends BaseDirective implements OnInit {\n\n public instantBookOptions = instantBookOptions;\n public roomEquipmentRequiredOptions = roomEquipmentRequiredOptions;\n public roomDetailsRequired = roomDetailsRequired;\n public roomCateringAvailable = roomCateringAvailable;\n public internalRoomTypeRequiredOptions = [];\n public externalRoomTypeRequiredOptions = [];\n public isInternal = false;\n\n public selectedOptions = new BehaviorSubject[]>([]);\n\n @Output()\n public cancelSubmit = new EventEmitter();\n\n @Output()\n public filtersSubmit = new EventEmitter[]>();\n\n constructor(private store: Store, private _org: OrganisationService) {\n super();\n }\n\n public ngOnInit(): void {\n this.subscription('bookingType',\n this.store.pipe(\n select(selectIsInternal)\n ).subscribe(next => {\n this.isInternal = next;\n }));\n this.subscription('filters',\n this.store.pipe(\n select(selectFormFilters)\n ).subscribe(next => {\n this.selectedOptions.next(next);\n }));\n\n this.externalRoomTypeRequiredOptions = this.getFilters('external_room_types')\n this.internalRoomTypeRequiredOptions = this.getFilters('internal_room_types')\n }\n\n public toggleOptionChecked(selectOption: SelectOption) {\n this.selectedOptions.pipe(\n take(1),\n map(options => {\n const found = options.find(o => o.value === selectOption.value);\n if (found) {\n // remove\n return options.filter(o => o.value !== selectOption.value);\n }\n // add\n return [...options, selectOption];\n })\n ).subscribe(next => {\n this.selectedOptions.next(next);\n });\n }\n\n public submitFilters() {\n this.selectedOptions.pipe(\n take(1)\n ).subscribe(options => {\n this.filtersSubmit.emit(options);\n });\n }\n\n public getFilters(type:string) {\n const filters = this._org.getOrganizationFiltersByRoomType(type) || {}\n return Object.keys(filters).map((key) => {\n const display = filters[key]\n return {\n value: key,\n display,\n shortDisplay: display\n }\n })\n }\n}\n","import {\n Component,\n ViewChild\n} from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { Store } from '@ngrx/store';\nimport { storeRoomFilters } from '@mckinsey-converge/data-common';\nimport { RoomFiltersFormComponent } from 'src/app/booking/room-filters-form/room-filters-form.component';\n\n@Component({\n selector: 'app-room-filters',\n template: `\n
\n \n \n \n \n \n \n \n \n
\n `,\n styleUrls: ['./room-filters-modal.component.scss']\n})\nexport class RoomFiltersModalComponent {\n\n @ViewChild(RoomFiltersFormComponent)\n public form: RoomFiltersFormComponent;\n\n constructor(\n private store: Store,\n private dialogRef: MatDialogRef) {\n }\n\n public close() {\n this.dialogRef.close();\n }\n\n public submitFilters(filters: SelectOption[]) {\n this.store.dispatch(storeRoomFilters({\n payload: filters\n }));\n this.close();\n }\n}\n","import {\n Component,\n Input,\n OnInit,\n OnChanges,\n EventEmitter,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport {\n BehaviorSubject,\n combineLatest,\n} from 'rxjs';\nimport {\n map,\n take,\n} from 'rxjs/operators';\nimport { filterUndefined } from '@mckinsey-converge/rx-utils';\nimport {\n select,\n Store\n} from '@ngrx/store';\nimport {\n CENTER_POINT,\n generateMapStyleForSpace,\n legendOptions,\n MAX_ZOOM_LEVEL,\n MIN_ZOOM_LEVEL,\n spaceToMapFeature,\n} from 'src/app/map/map.utils';\nimport {\n Building,\n BuildingLevel,\n SettingsService,\n Space,\n SpaceStatus,\n selectMapFilteredResults,\n FilteredSpaces\n} from '@mckinsey-converge/data-common';\nimport {\n Point,\n HashMap,\n BaseDirective,\n} from '@mckinsey-converge/base';\nimport { MapFeature } from '@acaprojects/ngx-interactive-map/lib/helpers/map.interfaces';\nimport { OfficeInformationModalComponent } from 'src/app/map/office-information-modal/office-information-modal.component';\nimport { MapSearchStoreState } from '../../map/map-search/map-search.component';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport {\n generateFeedbackUrl,\n Urls\n} from '../../utilities/urls';\n\nexport enum TopBarHeaderMode {\n Light = 'light',\n Dark = 'dark',\n}\n\n@Component({\n selector: 'room-location-preview',\n template: `\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n \n {{building.name}}, {{level.name}}\n
\n \n
\n
The pinpoint indicates your selected room's location on the floor. No futher interaction is available.
\n \n
\n
\n \n
\n \n \n
\n \n
\n
\n\n\n
\n \n
\n
\n \n \n
\n
\n \n
\n
\n
\n
\n `,\n styleUrls: ['./room-location-preview.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class RoomLocationPreviewComponent extends BaseDirective implements OnInit, OnChanges {\n public legendOptions = legendOptions();\n\n @Input()\n public mapUrl: string;\n\n @Input()\n public focus: any; // @todo fix\n\n @Input()\n public expanded: boolean;\n\n @Input()\n public building: Building;\n\n @Input()\n public space: Space;\n\n @Input()\n public level: any; // @todo fix\n\n /** The theme to use **/\n @Input() public mode: TopBarHeaderMode = TopBarHeaderMode.Dark;\n\n // Use \"booking_preview\" to show smaller height with zoom icon\n @Input() public viewMode: String = null;\n\n @Output()\n public handleExpand: EventEmitter = new EventEmitter();\n\n public currentPage: string;\n\n public get feedback() {\n return generateFeedbackUrl(this.currentPage);\n }\n\n public get zoomLevel() {\n return this.expanded ? this.minZoom.value : this.zoom.value;\n }\n\n constructor(\n private store: Store,\n public dialog: MatDialog,\n private settingService: SettingsService) {\n super();\n }\n\n public focusedRoom = new BehaviorSubject(undefined);\n public featuresRoom = new BehaviorSubject(undefined);\n public zoom = new BehaviorSubject(MIN_ZOOM_LEVEL);\n public minZoom = new BehaviorSubject(MAX_ZOOM_LEVEL / 3);\n public features = combineLatest([this.featuresRoom]).pipe(map(items => items.filter(i => !!i)));\n public setIntervalHandle: any = null;\n public count = 0;\n public center = new BehaviorSubject(CENTER_POINT);\n /** Mapping of elements to CSS styles */\n public style_map = new BehaviorSubject>>({});\n\n public activeBuilding = new BehaviorSubject(undefined);\n public activeLevel = new BehaviorSubject(undefined);\n public activeSpace = new BehaviorSubject(undefined);\n\n public ngOnChanges(changes: any): void {\n if (changes.expanded && changes.expanded.currentValue) {\n this.activeSpace.pipe(\n take(1),\n filterUndefined(),\n map(spaceToMapFeature)\n ).subscribe(next => {\n this.featuresRoom.next(next);\n });\n } else if (changes.expanded && changes.expanded.previousValue && !changes.expanded.currentValue) {\n this.featuresRoom.next(undefined);\n }\n }\n\n public ngOnInit(): void {\n this.timeout('Getting Title', () => this.updateRoute(document.title));\n\n // MCK-1850 And it's even slower when loading form scratch via an email link, so 10 second interval.\n this.timeout('Zoom to Room', () => this.initMapZoom(), 2000);\n this.activeSpace.next(this.space);\n this.activeBuilding.next(this.building);\n this.activeLevel.next(this.level);\n\n this.subscription('bookingSpaceResults',\n combineLatest([\n this.store.pipe(\n select(selectMapFilteredResults),\n map((r: LoadingModel) => r.success)\n ),\n this.activeBuilding.pipe(filterUndefined()),\n this.activeLevel.pipe(filterUndefined())\n ]).subscribe(([filteredSpaces, building, level]) => {\n const spacesFromSelection = (filteredSpaces.spaces || [])\n .filter(s => !!s.map_id && s.zones.includes(building.id) && s.zones.includes(level.id));\n\n const styles: HashMap> = {};\n // const colour_map = this.settingService.get('app.explore.colors') || {};\n // spacesFromSelection.forEach(space => {\n // const status = filteredSpaces.statusMap[space.id] || SpaceStatus.Available;\n // const mapStyle = generateMapStyleForSpace(space, status, colour_map);\n // styles[`#${mapStyle.id}`] = mapStyle.styles;\n // });\n this.style_map.next(styles);\n \n })\n );\n\n }\n\n public initMapZoom() {\n const self = this;\n // Doesn't reliably zoom to room until that component is finished loading and processing elements.\n // But this alone is not enough when loading from an email link due to how slow the loading is. See the ngOnInit\n this.setIntervalHandle = setInterval(() => {\n if (!this.focus) {\n return;\n }\n \n self.zoomToRoom();\n self.count ++;\n if (self.count > 4) {\n clearInterval(self.setIntervalHandle);\n self.setIntervalHandle = null;\n }\n }, 1000);\n }\n\n public updateRoute(location) {\n location = location.substr(0, location.indexOf(' |'));\n this.currentPage = location;\n }\n\n public goToHelp() {\n window.open(Urls.Help);\n }\n\n public zoomToRoom(): void {\n this.focusedRoom.next(this.focus);\n this.zoom.next(MAX_ZOOM_LEVEL);\n }\n\n public zoomIn() {\n if (this.minZoom.value < MAX_ZOOM_LEVEL) {\n this.minZoom.next(this.minZoom.value + 1);\n }\n }\n\n public zoomOut() {\n if (this.minZoom.value > MIN_ZOOM_LEVEL) {\n this.minZoom.next(this.minZoom.value - 1);\n }\n }\n\n public resetZoomLevels() {\n this.minZoom.next(MIN_ZOOM_LEVEL);\n this.zoom.next(MIN_ZOOM_LEVEL);\n this.center.next(CENTER_POINT);\n this.focusedRoom.next(undefined);\n }\n\n public collapse() {\n this.handleExpand.emit(false);\n const self = this;\n self.count = 0;\n\n this.zoom.next(MAX_ZOOM_LEVEL);\n this.center.next(CENTER_POINT);\n this.focusedRoom.next(undefined);\n\n // Doesn't reliably zoom to room until that component is finished loading and processing elements.\n this.setIntervalHandle = setInterval(() => {\n self.zoomToRoom();\n self.count ++;\n if (self.count > 4) {\n clearInterval(self.setIntervalHandle);\n self.setIntervalHandle = null;\n }\n }, 200);\n }\n\n public displayOfficeInformation() {\n this.dialog.open(OfficeInformationModalComponent,\n {\n data: this.building,\n panelClass: 'mck-alert',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n OnInit,\n OnChanges,\n SimpleChanges,\n} from '@angular/core';\nimport { BookingFormData, RoomResultsViewModel, setupRoomImages, User } from '@mckinsey-converge/data-common';\nimport { ImageDirective, SpaceImageObject } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'app-room-result-item',\n template: `\n
\n
\n
\n
\n {{ availability === 'requestable' ? 'Requestable' : 'Bookable'}}\n {{ viewModel?.space?.availableOccurrences }} out of {{ viewModel?.space?.totalOccurrences }} \n
\n
\n
\n Images Coming Soon\n
\n \n
\n
\n
\n Images Coming Soon\n
\n \n
\n
\n
\n
\n \n {{viewModel.levelDisplay}}, {{viewModel.title}}\n {{type}}\n {{viewModel.office}}\n {{viewModel.capacity}}\n \n \n \n \n \n \n
\n
\n
\n
\n
\n
\n `,\n styleUrls: ['./room-result-item.component.scss']\n})\nexport class RoomResultItemComponent extends ImageDirective implements OnInit, OnChanges {\n\n public rootFolderURL: string = 'assets/img/rooms/';\n public fileSlug: string = '';\n public type: string = '';\n\n /**\n * If undefined, we display in loading state.\n */\n @Input()\n public viewModel: RoomResultsViewModel | undefined;\n\n @Input()\n public data: BookingFormData;\n\n @Input()\n public user: User;\n\n @Output()\n public roomSelect = new EventEmitter();\n\n public availability: \"requestable\" | \"bookable\" | \"booked\" | \"non-bookable\" | null;\n\n public foundImages: SpaceImageObject[] = [1,2].map(n => {\n return {path: `assets/img/rooms/placeholder-${n}.png`};\n });\n\n public ngOnInit(): void {\n if (this.viewModel && this.viewModel.space) {\n this.fileSlug = this.viewModel.space.email.split('@')[0];\n setupRoomImages(this, [1,2], this.rootFolderURL, this.fileSlug);\n const t = this.viewModel.space.internal_or_external;// || 'internal';\n this.type = `${t[0]?.toUpperCase()}${t.toLocaleLowerCase().substring(1)}`\n }\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.availability !== null && (\n changes.data &&\n changes.data.firstChange === true &&\n changes.data.currentValue &&\n changes.data.currentValue.dateTz &&\n changes.data.currentValue.duration\n )) {\n this.availability = this.viewModel.space.byRequest({\n dateTz: this.data.dateTz,\n duration: this.data.duration,\n host: this.user\n }) === false ? \"bookable\" : \"requestable\";\n\n }\n }\n\n public hasData() {\n return this.viewModel !== undefined;\n }\n\n public get typeClass() {\n return this.type.toLocaleLowerCase();\n }\n\n public showLabel(path) {\n return path.includes('placeholder');\n }\n public get timestamp () {\n return (new Date()).getTime()\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewContainerRef\n} from '@angular/core';\nimport {\n select,\n Store\n} from '@ngrx/store';\nimport {\n ActivatedRoute,\n Router\n} from '@angular/router';\nimport {\n BehaviorSubject,\n combineLatest,\n Observable\n} from 'rxjs';\nimport {\n RoomResultsViewModel,\n BookingFormData,\n BookingStoreState,\n selectActiveForm,\n storeBookingFormData,\n SpaceFilterReason,\n User,\n OrganisationService,\n} from '@mckinsey-converge/data-common';\nimport {\n map,\n take,\n distinctUntilChanged\n} from 'rxjs/operators';\nimport {\n AlertBannerDisplay,\n AlertMode,\n BaseTemplateComponent,\n ConflictsModalComponent,\n ConflictsModalComponentData,\n\t\tOverrideChangesModalComponent\n} from '@mckinsey-converge/ui';\nimport { RoomResultsCoachmarkViewmodel } from 'src/app/booking/room-results/room-results-coachmark.viewmodel';\nimport {\n RoomStoreState\n} from '@mckinsey-converge/rooms';\nimport {\n BuildingStoreState,\n} from '@mckinsey-converge/buildings';\nimport { selectCurrentUser, UserStoreState } from '@mckinsey-converge/user';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DialogEvent } from '@mckinsey-converge/base';\n\n\nexport type RoomResultsState = BookingStoreState\n & RoomStoreState\n & BuildingStoreState\n & UserStoreState;\n\n@Component({\n selector: 'app-room-results-paginated',\n template: `\n \n
\n
\n \n \n \n \n \n \n \n \n \n\n
\n \n
\n
\n \n \n \n
\n \n
\n
\n
\n
\n
\n `,\n styleUrls: ['./room-results-paginated.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class RoomResultsPaginatedComponent extends BaseTemplateComponent implements OnInit {\n public ROOM_DISPLAY_STEP = 10;\n public ROOM_DISPLAY_START = 3;\n public AlertMode = AlertMode;\n public AlertBannerDisplay = AlertBannerDisplay;\n /** Offset to add to the start time when selecting a space */\n @Input() public offset = 0;\n\n @Input()\n public viewModels: Observable;\n\n @Input()\n public coachMark: Observable | undefined;\n\n /**\n * If true, show skeleton.\n */\n @Input()\n public isLoading: Observable;\n\n @Output()\n public coachMarkAction = new EventEmitter();\n\n // set property if user room selection from next business day section on result page\n @Input() public nextBusinessDay = false;\n\n public displayCount = new BehaviorSubject(this.ROOM_DISPLAY_START);\n\n /**\n * Fake pagination since API does not support it.\n */\n public displayViewModels: Observable;\n\n public showLoadMore: Observable;\n\n public remainingResults: Observable;\n\n public data = new BehaviorSubject(undefined);\n public currentUser: User;\n\n constructor(vcRef: ViewContainerRef,\n private store: Store,\n private router: Router,\n private route: ActivatedRoute,\n private _org: OrganisationService,\n private cdRef: ChangeDetectorRef,\n private _dialog: MatDialog) {\n super(vcRef);\n }\n\n public ngOnInit(): void {\n super.ngOnInit();\n //test commet for to trigger build again\n this.displayViewModels = combineLatest([this.viewModels, this.displayCount])\n .pipe(\n map(([vm, displayCount]) => { this.cdRef.markForCheck(); return vm?.slice(0, displayCount) } ));\n\n this.showLoadMore = combineLatest([this.viewModels, this.displayCount])\n .pipe(\n map(([vm, displayCount]) => {\n return ((vm?.length ?? 0) > displayCount);\n })\n );\n this.remainingResults = combineLatest([this.viewModels, this.displayCount])\n .pipe(\n map(([vm, displayCount]) => vm && (vm.length - displayCount) || 0));\n\n this.subscription('currentUser', this.store.select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n })\n );\n\n this.subscription('activeForm', this.store.pipe(\n select(selectActiveForm),\n distinctUntilChanged()\n ).subscribe((next: BookingFormData | undefined) => {\n if (next) {\n this.data.next(next);\n this.cdRef.detectChanges();\n\n }\n }));\n this.cdRef.detectChanges();\n }\n\n public loadMore() {\n // fake pagination\n this.displayCount.pipe(\n take(1),\n map(v => v + this.ROOM_DISPLAY_STEP)\n ).subscribe(next => {\n this.displayCount.next(next);\n this.cdRef.detectChanges();\n });\n }\n\n public trackViewModelById(index: number, item: RoomResultsViewModel) {\n return item.space.id;\n }\n\n\n\t\t/**\n\t\t * Handles the selection of a room from the search results.\n\t\t * Depending on the room's availability and recurrence conflicts, this function decides\n\t\t * whether to open a modal for recurrence conflicts, override changes, or navigate to the\n\t\t * room details page. It updates the state and user interface accordingly.\n\t\t *\n\t\t * @param {RoomResultsViewModel} room - The selected room from the search results.\n\t\t * @param {number} availableOccurrences - The number of available occurrences of the room.\n\t\t * @param {number} totalOccurrences - The total number of occurrences of the room.\n\t\t */\n public roomSelected(room: RoomResultsViewModel, availableOccurrences: number, totalOccurrences: number) {\n\n const { is_recurrent } = this.data.value;\n this.data.value.recurrence_exceptions = [];\n if(is_recurrent){\n // Handle recurrence conflicts if the booking is part of a recurring series\n const spaceConflicts = room.space.recurrence_availability.filter(recurr => !recurr.available);\n this.data.value.recurrence_exceptions = spaceConflicts.map((recurr)=> recurr.date);\n }\n\n\t\t// Determine the action based on recurrence conflicts, occurrence edits, and room availability\n\t\tif(this.data.value.recurrence_exceptions.length) {\n this.openRecurrenceConflictsModal(room);\t// Open modal for recurrence conflicts\n }\n else if( this.data.value.occurrence_edits && this.data.value.occurrence_edits.length) {\n this.overrideChanges(room);\t// Open modal to override changes\n }\n else {\n this.goToRoomDetail(room);\t// Navigate to the room details page\n }\n\n }\n\n\t\t/**\n\t\t * Navigates to the room details page for the selected room.\n\t\t * It updates the URL and navigates to the room details page with appropriate query parameters.\n\t\t *\n\t\t * @param {RoomResultsViewModel} room - The selected room from the search results.\n\t\t *\n\t\t * @remarks\n\t\t * The function manages timezone offset and other necessary details to provide accurate room information.\n\t\t * The state object is used to pass relevant data for correct page rendering and form population.\n\t\t *\n\t\t * @private\n\t\t */\n private goToRoomDetail(room) {\n\t\t\t// Handle timezone offset for accurate date and time information\n let { dateTz } = this.data.value;\n if (this.offset) {\n dateTz = dateTz.addValue({ minutes: this.offset });\n }\n\n /**\n * selectedRoom.space is fully fledged Space class\n * this.data.value.booking.room is not and does not contain the timezone\n * this.data.value.booking.timezone is legit\n */\n // UPDATE: providing payload as part of extras instead dispatching storeBookingFormData event to avoid redundant backend request calls\n this.router.navigate(['room'], { relativeTo: this.route, state:{payload : {\n ...this.data.value,\n buildings: this._org.buildings, // require to manage browser refresh on room detail screen!\n dateTz,\n offset: this.offset,\n selectedRoom: room,\n nextBusinessDay: this.nextBusinessDay\n }\n }});\n }\n\n\n /**\n\t * Opens a modal to display recurrence conflicts for the selected room.\n\t * It shows recurrence conflicts, allowing the user to resolve them before proceeding.\n\t * After the modal is closed, it navigates to the room details page if there are no unresolved conflicts.\n\t *\n\t * @param {RoomResultsViewModel} room - The selected room from the search results.\n\t *\n\t * @private\n\t */\n private openRecurrenceConflictsModal(room: RoomResultsViewModel) {\n let { recurrence_exceptions } = this.data.value;\n\n\t\t// Open modal for recurrence conflicts\n const recurr_ref = this._dialog.open(ConflictsModalComponent, {\n maxWidth: '95vw',\n width: '32em',\n data: {\n room_name: room.space.simple_name,\n conflicts: recurrence_exceptions,\n timezone: room.building.timezone\n }\n });\n this.subscription(\n 'conflicts_modal_events',\n recurr_ref.componentInstance.event.subscribe((event: DialogEvent) => {\n\n\t\t\t\tif (event.reason === 'done' && !(this.data.value.occurrence_edits && !this.data.value.occurrence_edits.length) ) {\n\t\t\t\t\t\tthis.goToRoomDetail(room); \t// Navigate to room details page after resolving conflicts\n\t\t\t\t}\n recurr_ref.close();\n })\n );\n recurr_ref.afterClosed().subscribe(() => this.unsub('conflicts_modal_events'));\n }\n\n\t/**\n\t * Opens a modal to allow the user to override changes made to the booking.\n\t * It provides options to confirm or cancel the override, depending on user preference.\n\t * After the modal is closed, it navigates to the room details page if the user confirms the override.\n\t *\n\t * @param {RoomResultsViewModel} room - The selected room from the search results.\n\t *\n\t * @private\n\t */\n private overrideChanges(room: RoomResultsViewModel) {\n\t\t// Open modal for overriding changes made to the booking\n const ref = this._dialog.open(OverrideChangesModalComponent, {\n width: '576px',\n data: {\n edits: this.data.value.occurrence_edits,\n timezone: this.data.value.timezone\n }\n });\n ref.componentInstance.event.subscribe(event => {\n if (event.reason === 'done') {\n this.goToRoomDetail(room);\t// Navigate to room details page after confirming the override\n ref.close();\n } else if (event.reason === 'close') {\n ref.close();\n }\n });\n }\n\n\n\n\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport { BehaviorSubject, combineLatest, Observable, of, Subject } from 'rxjs';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { distinctUntilChanged, filter, map } from 'rxjs/operators';\nimport { BookingRulesLink, RoomResultsCoachmarkViewmodel } from 'src/app/booking/room-results/room-results-coachmark.viewmodel';\nimport {\n Building,\n BuildingLevel,\n mapResultsToViewModels,\n RoomResultsViewModel,\n FilteredSpaces,\n SpaceFilterReason,\n selectActiveForm,\n BookingStoreState,\n BookingFormData,\n OrganisationService,\n} from '@mckinsey-converge/data-common';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { select, Store } from '@ngrx/store';\nimport { RoomStoreState } from '@mckinsey-converge/rooms';\nimport {\n BuildingStoreState,\n} from '@mckinsey-converge/buildings';\nimport { UserStoreState } from '@mckinsey-converge/user';\n\n\nexport type RoomResultsState = BookingStoreState &\n RoomStoreState &\n BuildingStoreState &\n UserStoreState;\n\n\n@Component({\n selector: 'app-room-results-section',\n template: `\n
\n \n
\n\n \n \n \n\n \n \n \n \n `,\n styleUrls: ['./room-results-section.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n})\nexport class RoomResultsSectionComponent extends BaseDirective implements OnInit {\n @Input() public rules_link?: BookingRulesLink;\n /** Offset to add to the start time when selecting a space */\n @Input() public offset = 0;\n\n // set property if user room selection from next business day section on result page\n @Input() public nextBusinessDay : boolean = false\n\n @Input()\n public collapsable: boolean;\n\n /**\n * If collapsable is true, this is used in the collapse header.\n */\n @Input()\n public collapseTitle: string;\n\n /**\n * If collapsable is true, this is used in the collapse header.\n */\n @Input()\n public collapseDescription: string;\n\n @Input()\n public levelBuildings: Observable<{ flattenedLevels: BuildingLevel[]; buildings: Building[] }>;\n\n @Input()\n public results: BehaviorSubject>;\n\n @Output()\n public coachMarkAction = new EventEmitter();\n\n public mainResultViewModels = new BehaviorSubject(\n undefined\n );\n\n public editing_form = new BehaviorSubject(false);\n\n public resultsLoading: Observable;\n public coachMarkDisplay: Observable;\n\n public AlternateBuildings = [];\n public location: any;\n\n private subscribeResultsToViewModels = (\n subName: string,\n resultsObservable: Observable>,\n flattenLevelBuildings: Observable<{ flattenedLevels: any; buildings: Building[] }>,\n viewModelSubject: Subject\n ) => {\n this.subscription(\n subName,\n combineLatest([\n resultsObservable.pipe(map((r) => r.optionalSuccess?.spaces || [])),\n flattenLevelBuildings,\n ])\n .pipe(\n map(([results, { flattenedLevels, buildings }]) =>\n mapResultsToViewModels(\n results?.length && results[0]?.building ? results : [],\n flattenedLevels,\n buildings\n )\n )\n )\n .subscribe((next) => {\n viewModelSubject.next(next);\n })\n );\n };\n\n constructor(private store: Store, private _org: OrganisationService) {\n super();\n }\n\n public ngOnInit(): void {\n this.resultsLoading = this.results.pipe(map((m) => m.isLoading));\n\n this.subscription(\n 'activeForm',\n combineLatest([this.editing_form, this.store])\n .pipe(\n filter(([edit]) => !edit),\n map(([_, store]) => store),\n select(selectActiveForm),\n distinctUntilChanged()\n )\n .subscribe((next: BookingFormData | undefined) => {\n if (next) {\n this.location = next.location;\n this.updateCoachMark();\n } else {\n }\n })\n );\n\n this.subscription(\n 'buildings',\n this._org.listen('buildings').subscribe(() => {\n this.updateCoachMark();\n })\n );\n\n this.coachMarkDisplay = this.results.pipe(\n map((r) => r.optionalSuccess?.reason || SpaceFilterReason.None),\n map(\n (r) =>\n new RoomResultsCoachmarkViewmodel(r, this.rules_link, this.AlternateBuildings)\n )\n );\n\n this.subscribeResultsToViewModels(\n 'resultListing',\n this.results,\n this.levelBuildings || of({ flattenedLevels: [], buildings: [] }),\n this.mainResultViewModels\n );\n }\n\n updateCoachMark() {\n const buildingsInSameCity = this._org.buildings?.filter(_ => {\n // Make sure this.location is populated to pass unit tests -\n if (!this.location || this.location.length === 0) return false;\n // If all offices are selected, city name will be at this.location[0]?.meta?.city.name, otherwise use this.location[0]?.meta?.city \n const cityFromLocation = typeof this.location[0]?.meta?.city === 'object' && this.location[0]?.meta?.city !== null\n ? this.location[0]?.meta?.city.name\n : this.location[0]?.meta?.city;\n return _.city === cityFromLocation;\n });\n const AlternateBuildings = buildingsInSameCity?.filter(\n (building) =>\n !this.location.some(\n (locationItem) => locationItem.meta?.building?.id === building.id\n )\n );\n this.AlternateBuildings = AlternateBuildings;\n this.coachMarkDisplay = this.results.pipe(\n map((r) => r.optionalSuccess?.reason || SpaceFilterReason.None),\n map(\n (r) =>\n new RoomResultsCoachmarkViewmodel(r, this.rules_link, this.AlternateBuildings)\n )\n );\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n if (changes.results || changes.levelBuildings || changes.mainResultViewModels) {\n this.subscribeResultsToViewModels(\n 'resultListing',\n this.results,\n this.levelBuildings || of({ flattenedLevels: [], buildings: [] }),\n this.mainResultViewModels\n );\n }\n }\n\n public onCoachmarkAction(reason: SpaceFilterReason) {\n this.coachMarkAction.emit(reason);\n }\n}\n","import { SpaceFilterReason } from '@mckinsey-converge/data-common';\n\nexport interface BookingRulesLink {\n name: string;\n url: string;\n}\nexport class RoomResultsCoachmarkViewmodel {\n public visible: boolean;\n public title: string;\n public actionButtonText: string;\n\n constructor(public reason: SpaceFilterReason, public rules_link?: BookingRulesLink, alternateBuildings?:any[]) {\n this.visible = true;\n switch (reason) {\n case SpaceFilterReason.DateTime:\n this.title =\n 'There are no available rooms that match your search criteria. ' +\n 'Please adjust your search criteria and try again.';\n this.actionButtonText = 'Return to search';\n break;\n case SpaceFilterReason.OfficeRules:\n this.title =\n `There are no available rooms that match your search criteria.\n Please adjust your search criteria and try again.`;\n if (alternateBuildings && alternateBuildings.length > 0) {\n this.title += ` Alternatively, you can try ${alternateBuildings.length > 1 \n ? alternateBuildings.slice(0, -1).map(building => building.name).join(', ') + ', or ' + alternateBuildings[alternateBuildings.length - 1].name \n : alternateBuildings[0]?.name\n }.`;\n }\n if (rules_link) {\n this.title +=\n `
For information on booking rules please see ` +\n `${rules_link.name}`;\n }\n this.actionButtonText = 'Return to search';\n break;\n case SpaceFilterReason.Filters:\n this.title =\n 'No rooms available for your filter criteria. ' +\n 'Try to clear the filter please.';\n this.actionButtonText = 'Clear filter';\n break;\n case SpaceFilterReason.AlternateBuildingsFound:\n this.title = `There are no available rooms that match your search criteria. Please try ${\n alternateBuildings.length > 1 \n ? alternateBuildings.slice(0, -1).map(building => building.name).join(', ') + ', or ' + alternateBuildings[alternateBuildings.length - 1].name \n : alternateBuildings[0]?.name\n }.`;\n this.actionButtonText = 'Return to search';\n break;\n case SpaceFilterReason.None:\n this.visible = false;\n this.title = '';\n this.actionButtonText = '';\n break;\n }\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { TopBarHeaderMode } from 'src/app/components/topbar-header/topbar-header.component';\nimport { select, Store } from '@ngrx/store';\nimport {\n laterThatDayFromDateTz,\n loadRoomsWithQuery,\n RoomStoreState,\n mapRoomToSelectOption,\n loadRoomsForResultsMap,\n} from '@mckinsey-converge/rooms';\nimport { BaseDirective, timeWithZoneFormatString } from '@mckinsey-converge/base';\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs';\nimport {\n Building,\n BuildingLevel,\n flattenBuildingsWithLevels,\n BookingStoreState,\n FilteredSpaces,\n SpaceFilterReason,\n clearRoomFilters,\n selectActiveForm,\n selectFilteredLaterDayResults,\n selectFilteredNextDayResults,\n selectFilteredResults,\n selectFormFilters,\n BookingFormData,\n roomFormDataToQuery,\n selectFilteredDiffSizeResults,\n OrganisationService,\n CollapseService\n} from '@mckinsey-converge/data-common';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { debounceTime, distinctUntilChanged, filter, map, shareReplay } from 'rxjs/operators';\nimport {\n buildingStateSelector,\n BuildingStoreState,\n loadBuildings,\n} from '@mckinsey-converge/buildings';\nimport * as cloneDeep from 'lodash/cloneDeep';\nimport { filterUndefined, resultCountObservable } from '@mckinsey-converge/rx-utils';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { MatDialog } from '@angular/material/dialog';\nimport { RoomBookingModalComponent } from 'src/app/booking/room-booking-modal/room-booking-modal.component';\nimport { RoomFiltersModalComponent } from 'src/app/booking/room-filters-modal/room-filters-modal.component';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport {\n BookingRulesLink,\n RoomResultsCoachmarkViewmodel,\n} from 'src/app/booking/room-results/room-results-coachmark.viewmodel';\nimport { UserStoreState } from '@mckinsey-converge/user';\nimport { FormControl } from '@angular/forms';\nimport { Location } from '@angular/common';\n\nexport type RoomResultsState = BookingStoreState &\n RoomStoreState &\n BuildingStoreState &\n UserStoreState;\n\n@Component({\n selector: 'app-room-results',\n template: `\n \n
\n \n
\n
\n
\n
\n
\n \n
\n
\n
\n {{ open ? '(tap to close)' : '(tap to open)' }}\n \n
\n
\n
\n
\n
\n \n \n
\n
\n
\n \n
\n
\n
\n \n \n
\n \n \n
\n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n `,\n styleUrls: ['./room-results.component.scss'],\n animations: [\n trigger('collapseHeight', [\n state(\n 'open',\n style({\n height: '*',\n opacity: 1,\n })\n ),\n state(\n 'closed',\n style({\n overflow: 'hidden',\n opacity: 0,\n height: '0px',\n })\n ),\n transition('open <=> closed', animate('600ms ease-out')),\n ]),\n trigger('expandWidth', [\n state(\n 'open',\n style({\n maxWidth: '1024px',\n })\n ),\n state(\n 'closed',\n style({\n maxWidth: '96%',\n })\n ),\n transition('open <=> closed', animate('600ms ease-out')),\n ]),\n ],\n})\nexport class RoomResultsComponent extends BaseDirective implements OnInit {\n public TopBarHeaderMode = TopBarHeaderMode;\n\n public day_offset = 1;\n\n public data = new BehaviorSubject(undefined);\n public filters = new BehaviorSubject[]>([]);\n\n public mainResults = new BehaviorSubject>(LoadingModel.empty());\n public mainResultsFiltered = new BehaviorSubject>(\n LoadingModel.empty()\n );\n public laterThatDayResults = new BehaviorSubject>(\n LoadingModel.empty()\n );\n public nextBusinessDayResults = new BehaviorSubject>(\n LoadingModel.empty()\n );\n public diffSizeResults = new BehaviorSubject>(\n LoadingModel.empty()\n );\n public mainResultsSpaces: SelectOption[];\n\n public laterThatDayDisplay = new BehaviorSubject(undefined);\n\n public mainCoachMarkDisplay = this.mainResults.pipe(\n map((r) => r.optionalSuccess?.reason || SpaceFilterReason.None),\n map((r) => new RoomResultsCoachmarkViewmodel(r, this.rules_link))\n );\n\n public rules_link?: BookingRulesLink;\n\n public mainResultsCount = resultCountObservable(\n this.mainResultsFiltered,\n this.mainResultsFiltered.pipe(map((r) => r.optionalSuccess?.spaces))\n );\n public laterThatDayCount = resultCountObservable(\n this.laterThatDayResults,\n this.laterThatDayResults.pipe(map((r) => r.optionalSuccess?.spaces))\n );\n public nextBusinessDayCount = resultCountObservable(\n this.nextBusinessDayResults,\n this.nextBusinessDayResults.pipe(map((r) => r.optionalSuccess?.spaces))\n );\n public diffSizeCount = resultCountObservable(\n this.diffSizeResults,\n this.diffSizeResults.pipe(map((r) => r.optionalSuccess?.spaces))\n );\n\n public selectedToggle = new BehaviorSubject(0);\n\n public flattenLevelBuildings: Observable<{\n flattenedLevels: BuildingLevel[];\n buildings: Building[];\n }>;\n\n public open: boolean = true;\n public editing_form = new BehaviorSubject(false);\n\n public spaceControl = new FormControl();\n\n public selectedSpace: SelectOption;\n public resetInput: number;\n\n public searchStringPresent = false;\n public payload: any = {\n payload: { name: 'test', id: 'test-id' },\n building: {},\n floorMap: true,\n };\n\n public isOpen = true;\n\n public toggle() {\n this.isOpen = !this.isOpen;\n }\n\n constructor(\n private store: Store,\n private router: Router,\n private route: ActivatedRoute,\n private dialog: MatDialog,\n private _org: OrganisationService,\n private location: Location,\n private collapseService: CollapseService\n ) {\n super();\n this.payload = location.getState();\n }\n\n public ngOnInit(): void {\n this.subscription(\n 'filters',\n this.store.pipe(select(selectFormFilters), distinctUntilChanged()).subscribe((next) => {\n return this.filters.next(next);\n })\n );\n\n this.subscription(\n 'activeForm',\n combineLatest([this.editing_form, this.store])\n .pipe(\n filter(([edit]) => !edit),\n map(([_, store]) => store),\n select(selectActiveForm),\n distinctUntilChanged()\n )\n .subscribe((next: BookingFormData | undefined) => {\n if (next) {\n const day = next.dateTz.dateWeekday - 1;\n this.day_offset = day >= 4 ? 7 - day : 1;\n const building = this._org.buildings.find(\n (_) => _.id === next.location[0]?.meta?.building?.id\n );\n this.rules_link =\n building?.setting('booking.rules_link') ||\n next.location.find(\n office => office?.meta?.building?._settings?.discovery_info?.booking?.rules_link\n )?.meta?.building?._settings?.discovery_info?.booking?.rules_link;\n // next.location[0]?.meta?.building?.settings?.discovery_info?.booking\n // ?.rules_link;\n const nday = laterThatDayFromDateTz(next.dateTz);\n this.laterThatDayDisplay.next(`at ${timeWithZoneFormatString(nday)}`);\n // this.store.dispatch(loadRoomsWithQuery(roomFormDataToQuery(next)));\n this.data.next(next);\n \n //Dispatches actions to load rooms based on the provided value.\n this.despatchLoadRooms();\n\n // this.data.next(next);\n } else {\n // no form data, likely visiting directly. navigate back to start\n this.router.navigate(['../'], {\n replaceUrl: true,\n relativeTo: this.route,\n });\n }\n })\n );\n\n this.subscription(\n 'results',\n this.store.pipe(select(selectFilteredResults)).subscribe((next) => {\n this.mainResults.next(next);\n this.mainResultsFiltered.next(next);\n // Populate results for Search\n this.mainResultsSpaces = next.success?.spaces\n ? next.success?.spaces?.map(mapRoomToSelectOption)\n : [];\n })\n );\n\n this.subscription(\n 'laterResults',\n this.store.pipe(select(selectFilteredLaterDayResults)).subscribe((next) => {\n this.laterThatDayResults.next(next);\n })\n );\n\n this.subscription(\n 'nextDayResults',\n this.store.pipe(select(selectFilteredNextDayResults)).subscribe((next) => {\n this.nextBusinessDayResults.next(next);\n })\n );\n\n this.subscription(\n 'diffSize',\n this.store.pipe(select(selectFilteredDiffSizeResults)).subscribe((next) => {\n this.diffSizeResults.next(next);\n })\n );\n\n this.flattenLevelBuildings = this.store.pipe(\n select(buildingStateSelector),\n select(loadBuildings.selectors.optionalSuccess),\n filterUndefined(),\n map(flattenBuildingsWithLevels),\n shareReplay(1)\n );\n\n this.subscription(\n 'spaceChanges',\n this.spaceControl.valueChanges.subscribe((value) => {\n const mainResultsFiltered = cloneDeep(this.mainResults.value);\n const filteredRooms = this.mainResults.value.success?.spaces?.filter((s) => {\n if (s.id === value.value) {\n return true;\n }\n return false;\n });\n mainResultsFiltered.success.spaces = filteredRooms;\n this.mainResultsFiltered.next(mainResultsFiltered);\n })\n );\n\n // if coming from kiosk map url, route there\n if (this.payload?.floorMap) {\n this.router.navigate([`../home/floor-map`], {\n state: { ...this.payload },\n queryParams: {\n display: '',\n },\n });\n }\n\n this.subscription(\n 'spaceChanges',\n this.selectedToggle.subscribe((value) => {\n //Dispatches actions to load rooms based on the provided value.\n this.despatchLoadRooms();\n })\n );\n }\n\n /**\n * Dispatches actions to load rooms based on the provided value.\n * @param {number} value - The value indicating the mode of operation.\n * 0: Load rooms for regular view.\n * 1: Load rooms for results map view.\n */\n public despatchLoadRooms() {\n const selectedMenuIndex = this.selectedToggle.value; // List/Map/Calendar\n const isForFloorMap = this.payload?.floorMap;\n // If value is 0 and floorMap is not present in payload\n if(selectedMenuIndex === 0 && !isForFloorMap) {\n // Dispatch action to load rooms with query generated from form data\n this.store.dispatch(loadRoomsWithQuery(roomFormDataToQuery(this.data.value)));\n }\n \n // If value is 1 or floorMap is present in payload\n if(selectedMenuIndex === 1 || isForFloorMap) {\n // Dispatch action to load rooms for results map view with query generated from form data\n this.store.dispatch( loadRoomsForResultsMap.request(roomFormDataToQuery(this.data.value)));\n }\n }\n\n public clearRoomSearch() {\n this.resetInput = Date.now();\n this.selectedSpace = null;\n const mainResults = cloneDeep(this.mainResults.value);\n this.mainResultsFiltered.next(mainResults);\n this.searchStringPresent = false;\n }\n\n public inputTextChange(event: any) {\n this.searchStringPresent = !!event.length;\n }\n\n public changeInput(event) {\n if (event) {\n this.clearRoomSearch();\n }\n }\n\n public filteredRoomsChange(event: SelectOption[]) {\n const roomIds = event.map((o) => o.value);\n const mainResultsFiltered = cloneDeep(this.mainResults.value);\n const filteredRooms = this.mainResults?.value?.success?.spaces\n ? this.mainResults?.value?.success?.spaces?.filter((s) => {\n if (roomIds.includes(s.id)) {\n return true;\n }\n return false;\n })\n : [];\n mainResultsFiltered.success.spaces = filteredRooms;\n this.mainResultsFiltered.next(mainResultsFiltered);\n }\n\n public changeSearchResults() {\n this.editing_form.next(true);\n const dialog_ref = this.dialog.open(RoomBookingModalComponent, {\n panelClass: 'mck-modal',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n dialog_ref.afterClosed().subscribe(() => {\n this.editing_form.next(false);\n this.collapseService.collapsePanel();\n });\n }\n\n public filterResults() {\n this.dialog.open(RoomFiltersModalComponent, {\n panelClass: 'mck-modal',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n }\n\n public onCoachmarkAction(reason: SpaceFilterReason) {\n switch (reason) {\n case SpaceFilterReason.Filters:\n this.store.dispatch(clearRoomFilters());\n break;\n case SpaceFilterReason.OfficeRules:\n case SpaceFilterReason.DateTime:\n this.changeSearchResults();\n break;\n }\n }\n\n public selectedToggleChange(event: SelectOption) {\n this.selectedToggle.next(event.value);\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges\n} from '@angular/core';\n\nimport {\n humaniseDuration,\n timeFormatString,\n timeWithGmtOffsetFormatString,\n weekDayMonthYearFormat\n} from '@mckinsey-converge/base';\nimport {\n truncateLocationList,\n BookingFormData,\n getLastDateFromList\n} from '@mckinsey-converge/data-common';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { DateTZ } from '@mckinsey-converge/date-tz'\n\n@Component({\n selector: 'app-searched-location',\n template: `\n
\n
\n {{name}}\n {{date}}\n {{timing}}\n {{types}}\n No filters applied\n Filtering unavailable for this view\n {{filterDisplay}}\n
\n
\n \n Filter {{filterCount}}\n \n
\n
\n `,\n styleUrls: ['./searched-location.component.scss']\n})\nexport class SearchedLocationComponent implements OnInit, OnChanges {\n\n @Input()\n public data: BookingFormData;\n\n @Input()\n public filters: SelectOption[] = [];\n\n @Output()\n public changeClick = new EventEmitter();\n\n @Output()\n public filterClick = new EventEmitter();\n\n @Input()\n public canFilter = true;\n\n public name = '';\n public date = '';\n public timing = '';\n public types = '';\n public filterDisplay = '';\n public filterCount = '';\n\n constructor() {\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.data || changes.filters) {\n this.computeDisplay();\n }\n }\n\n public ngOnInit(): void {\n this.computeDisplay();\n }\n\n\n public computeDisplay() {\n if (!this.data) {\n return;\n }\n const { duration, dateTz, location, roomSize, bookingType, is_recurrent, recurrence_endTz } = this.data;\n\n \n // this.requestedEndDateTz = new DateTZ({ date: endDate.date.valueOf(), is_local_tz, building_tz })\n\n const group = location.find(l => l.groupHeader);\n if (group) {\n this.name = group.shortDisplay;\n } else {\n this.name = truncateLocationList(location);\n }\n\n // R--- blocked until TZ booking form inputs\n const building_tz = location[0]?.meta?.building?.timezone || location[0]?.meta?.city?.timezone;\n const startDate = new DateTZ({date: dateTz.ms, is_local_tz: false, building_tz })\n\n if(is_recurrent) {\n const occEndDate = getLastDateFromList( this?.data?.recurrence_starts );\n \tconst endRecDate = new DateTZ({date: occEndDate.ms, is_local_tz: false, building_tz });\n this.date = `From ${weekDayMonthYearFormat(startDate)} until ${weekDayMonthYearFormat(endRecDate)}` ;\n }\n else {\n this.date = weekDayMonthYearFormat(startDate);\n }\n\n const startDisplay = startDate.formatDate(`${timeFormatString()}`).toLocaleLowerCase();\n const endDate = startDate.addValue({ minutes: duration });\n const endDisplay = timeWithGmtOffsetFormatString(endDate);\n this.timing = `${startDisplay}-${endDisplay}`; // - TODO correct for DST?\n\n const durationDisplay = humaniseDuration(duration, 'short');\n this.types = `${durationDisplay}, ${bookingType.display}, ${roomSize.display}`;\n\n this.filterDisplay = this.filters.map(f => f.shortDisplay).join(', ');\n this.filterCount = this.filters.length > 0 ? `(${this.filters.length})` : '';\n }\n}\n","import {\n Component,\n OnInit\n} from '@angular/core';\nimport { first } from 'rxjs/operators';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n ApplicationLink,\n ApplicationService\n} from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'a-footer-menu',\n templateUrl: './footer-menu.component.html',\n styleUrls: ['./footer-menu.component.scss']\n})\nexport class FooterMenuComponent extends BaseDirective implements OnInit {\n\n /** Tiles to display on the home page */\n public tiles: ApplicationLink[] = [];\n\n constructor(private _service: ApplicationService) {\n super();\n }\n\n /** Angular Component initialisation lifecycle hook */\n public ngOnInit(): void {\n this._service.initialised.pipe(first(_ => _)).subscribe(() => {\n this.tiles = this._service.setting('app.home.tiles') || [];\n });\n }\n}\n","\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output\n} from '@angular/core';\nimport {\n ActivatedRoute,\n Router\n} from '@angular/router';\nimport { first } from 'rxjs/operators';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n ApplicationService,\n Building,\n BuildingLevel,\n OrganisationService\n} from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'a-map-controls',\n templateUrl: './map-controls.component.html',\n styleUrls: ['./map-controls.component.scss']\n})\nexport class MapControlsComponent extends BaseDirective implements OnInit {\n /** ID of the active building */\n @Input() public building: string;\n /** ID of the active level */\n @Input() public level: string;\n /** Emitter for changes to the active level */\n @Output() public levelChange = new EventEmitter();\n /** Details of the active building */\n public building_details: Building = this._org.building;\n /** List of available buildings */\n public building_list: Building[] = [];\n /** List of available levels */\n public level_list: readonly BuildingLevel[] = [];\n\n public get can_select_building(): boolean {\n return !!this._service.setting('app.explore.can_select_building');\n }\n\n constructor(\n private _route: ActivatedRoute,\n private _router: Router,\n private _service: ApplicationService,\n private _org: OrganisationService\n ) {\n super();\n }\n\n public ngOnInit() {\n this._org.listen('buildings').pipe(first(_ => !!_ && !!_.length)).subscribe(() => {\n this.subscription(\n 'route.query',\n this._route.queryParamMap.subscribe(params => {\n /* istanbul ignore else */\n if (params.has('level')) {\n const level_id = params.get('level');\n const level = this._org.levelWithID(level_id);\n this.level = level.id;\n this.setBuilding(level.building_id);\n this.levelChange.emit(this.level);\n this.clearTimeout('check_building');\n }\n })\n );\n this.building_list = this._org.buildings;\n this.timeout('check_building', () => {\n /* istanbul ignore else */\n if (!this.building) {\n this.setBuilding(this._org.building.id);\n }\n this.levelChange.emit(this.level);\n });\n });\n }\n\n public setBuilding(bld_id: string) {\n const building = this._org.buildings.find(bld => bld.id === bld_id);\n /* istanbul ignore else */\n if (building) {\n this.building_details = building;\n this.building = bld_id;\n this._org.building = building;\n this.level_list = building.levels;\n /* istanbul ignore else */\n if (this.level_list.length && !this.level_list.find(lvl => lvl.id === this.level)) {\n this.updateLevel(this.level_list[0].id);\n }\n }\n }\n\n public updateLevel(lvl_id: string) {\n this.level = lvl_id;\n this.levelChange.emit(this.level);\n this._router.navigate([], {\n relativeTo: this._route,\n queryParams: { level: lvl_id }\n });\n }\n}\n","
\n 1\"\n >\n \n {{ building_details?.code }} - {{ building_details?.name }} \n \n
\n
{{ bld.code }}
\n
{{ bld.name }}
\n
{{ bld.address }}
\n
\n
\n
\n \n \n \n \n {{ level.name }}\n \n \n \n
\n","import {\n Component,\n EventEmitter,\n Input,\n Output\n} from '@angular/core';\n\nimport {\n ApplicationLink,\n ApplicationService\n} from '@mckinsey-converge/data-common';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\nimport { DateNow } from '@mckinsey-converge/date-tz';\n\n\n@Component({\n selector: 'a-overlay-menu',\n templateUrl: './overlay-menu.component.html',\n styleUrls: ['./overlay-menu.component.scss']\n})\nexport class OverlayMenuComponent extends BaseDirective {\n /** Whether to show the menu */\n @Input() public show: boolean;\n /** Emitter for changes to show */\n @Output() public showChange = new EventEmitter();\n\n /** List of links to display on the menu */\n public get menu_items(): ApplicationLink[] {\n const settings = this._service.setting('app.general.menu') || { items: [] };\n return settings.items || [];\n }\n\n /** Copyright details for the application */\n public get copyright(): string {\n return (this._service.setting('app.general.menu') || {}).copyright || '';\n }\n\n public get settings() {\n const settings = this._service.setting('app.general.menu') || { position: '' };\n return settings;\n }\n\n constructor(private _service: ApplicationService) {\n super();\n }\n\n /** Current year to display for copyright */\n public get year(): number {\n return DateNow(new Date()).dateYear;\n }\n\n /** Close the overlay menu */\n public close() {\n this.show = false;\n this.showChange.emit(this.show);\n }\n\n public delayedClose() {\n this.timeout('close', () => this.close(), 50);\n }\n\n public cancelClose() {\n this.timeout('cancel_close', () => this.clearTimeout('close'), 10);\n }\n}\n","\n
\n
\n
\n \n
\n
\n \n
\n
\n Copyright © {{ year }} {{ copyright }}\n
\n
\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnInit\n} from '@angular/core';\nimport { throttleTime, tap } from 'rxjs/operators';\nimport { BehaviorSubject, fromEvent } from 'rxjs';\nimport { ImageDirective } from '@mckinsey-converge/base';\nimport { setupRoomImages } from '@mckinsey-converge/data-common';\nimport { SpaceImageObject } from 'libs/base/src/lib/types.utilities'\n\n@Component({\n selector: 'mck-responsive-inline-images',\n template: `\n
\n
\n \n
\n Images Coming Soon\n
\n \n
\n
\n
\n Images Coming Soon\n
\n
\n
\n `,\n styleUrls: ['./responsive-inline-images.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ResponsiveInlineImagesComponent extends ImageDirective implements OnInit {\n\n /** Input array of images */\n @Input() public rootFolderURL: string;\n @Input() public fileSlug: string;\n\n /** Ignore this param, it's only use is to bypass the image onload event in testing */\n @Input() public imagesLoaded: boolean;\n public loadImages = new BehaviorSubject([]);\n\n public foundImages: SpaceImageObject[] = [1,2,3].map(n => {\n return {path: `assets/img/rooms/placeholder-${n}.png`};\n });\n\n public mobile = false;\n\n constructor(private cdRef: ChangeDetectorRef,) {\n super();\n }\n\n public ngOnInit(): void {\n const breakpoint = 768;\n\n if (window) {\n this.mobile = window.innerWidth < breakpoint;\n }\n\n fromEvent(window, 'resize').pipe(throttleTime(500)).pipe(tap({\n next: val => {\n const target = val.target as Window;\n this.mobile = target.innerWidth < breakpoint;\n }\n })).subscribe();\n setupRoomImages(this, [1,2,3], this.rootFolderURL, this.fileSlug, this.imagesLoaded);\n this.subscription(\n\t\t\t\t\t\t'found_images',\n\t\t\t\t\t\tthis.loadImages.subscribe((imgArr: SpaceImageObject[]) => {\n\t\t\t\t\t\t\tif(imgArr.length) this.foundImages = imgArr;\n\t\t\t\t\t\t\tthis.cdRef.detectChanges();\n\t\t\t\t\t\t}));\n }\n\n public showLabel(path) {\n return path.includes('placeholder');\n } \n\n public get timestamp () {\n return (new Date()).getTime()\n }\n}\n","import {\n Component,\n Inject,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n MatDialogRef,\n MAT_DIALOG_DATA\n} from '@angular/material/dialog';\nimport {\n BaseClass\n} from '@mckinsey-converge/base';\nimport { ComposerService } from '@placeos/composer';\nimport { first } from 'rxjs/operators';\n\n@Component({\n selector: 'a-survey-modal',\n templateUrl: './survey-modal.component.html',\n styleUrls: ['./survey-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class SurveyModalComponent extends BaseClass implements OnInit {\n constructor(\n @Inject(MAT_DIALOG_DATA) public _data: any,\n private _composer: ComposerService,\n private _dialog_ref: MatDialogRef,\n ) {\n super();\n }\n\n /* present experience question by default */\n public token = '';\n public phase = 'intro';\n public baseUrl = '';\n\n public questions = {\n created_at: 0,\n updated_at: 0,\n header_question: \"What went wrong?\",\n header_subtext: \"Select one or several options\",\n options: [],\n id: \"\"\n }\n\n public answers = {\n questions_id: \"\",\n positive: true, // Experience is positive until the questions are displayed\n option_responses: [],\n comments: \"\"\n };\n\n // Show the questions and mark the experience negative. (false positive)\n public showQuestions(): void {\n this.answers.positive = false;\n this.phase = 'questions';\n }\n\n public ngOnInit(): void {\n /* fetch the question options once composer is initialized */\n this._composer.initialised.pipe(first(_ => _)).subscribe(() => {\n const token = this._composer.auth.token;\n this.token = token;\n this.baseUrl = this._composer.auth.api_endpoint.replace(this._composer.auth.route, '/api/staff/feedback')\n this.getFeedbackQuestionsFromApi(token, this._data)\n });\n }\n\n public getFeedbackQuestionsFromApi(token: string, questionID: string) {\n new Promise((resolve, reject) => {\n const url = `${this.baseUrl}/questions/${questionID}`;\n let result: any = null;\n this._composer.http.get(url).subscribe(\n (d) => (result = d),\n (e) => {\n reject(e);\n },\n () => {\n resolve(result);\n }\n );\n }).then(d => {\n this.questions = d;\n this.answers = {\n questions_id: this.questions.id,\n positive: true,\n option_responses: this.questions.options.map(q => ({ // map the questions to default answers.\n id: q.id,\n checked: false,\n })),\n comments: \"\"\n };\n }).catch(e => {\n console.log('error', e)\n });\n }\n\n // Handle the checkbox changes\n public handleChange(value: any) {\n this.answers.option_responses.some((o, i) => {\n if (o.id === value.id) {\n this.answers.option_responses[i].checked = !this.answers.option_responses[i].checked;\n return true;\n }\n });\n }\n\n // Handle the comment input changes\n public handleComment($evemt: any) {\n this.answers.comments = $evemt.target.value;\n }\n\n // Submit the Survey in it's current state.\n public confirm() {\n new Promise((resolve, reject) => {\n let result: any = null;\n this._composer.http.post(this.baseUrl, this.answers).subscribe(\n (d) => (result = d),\n (e) => {\n reject(e);\n },\n () => {\n resolve(result);\n }\n );\n }).then(d => {\n this.phase = 'exit';\n this.closeModal(true);\n }).catch(e => {\n console.log('error', e)\n this.phase = 'exit';\n this.closeModal(true);\n });\n \n }\n\n // Close the modal\n public closeModal(delayed: boolean = false) {\n if (delayed) {\n this.timeout('closeModal', () => {\n this._dialog_ref.close();\n }, 2000);\n } else {\n this._dialog_ref.close();\n }\n }\n}\n","
\n \n
\n
\n \n
\n How was your booking experience?\n
\n
\n
\n \n \n
\n
\n\n\n
\n
\n \n
\n \n What went wrong?\n

Select one or several options

\n
\n
\n
\n
\n {{question.option}}\n
\n
\n \n \n \n \n
\n
\n \n \n \n
\n\n
\n
\n \n
\n\n \n
\n Thank you!\n
\n \n
\n
\n
\n
","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n distinctUntilChanged,\n first,\n} from 'rxjs/operators';\nimport {\n ApplicationIcon,\n BookingFormState,\n SettingsService,\n openBookingSurvey,\n clearBookingFormData,\n BookingFormData,\n SeriesAction,\n selectActiveForm,\n OrganisationService\n} from '@mckinsey-converge/data-common';\nimport { loadRoomsForResults } from '@mckinsey-converge/rooms';\n\nimport { loadOrganisations } from '@mckinsey-converge/organisation';\nimport { BuildingStoreState } from '@mckinsey-converge/buildings';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport {\n NavigationEnd,\n Router,\n ActivatedRoute\n} from '@angular/router';\nimport {\n generateFeedbackUrl,\n Urls\n} from '../../utilities/urls';\nimport { SurveyModalComponent } from '../survey-modal/survey-modal.component';\nimport {\n Store, select\n} from '@ngrx/store';\n\nexport enum TopBarHeaderMode {\n Light = 'light',\n Dark = 'dark',\n}\n\nexport interface RoutePayload {\n /** IE ['/home', 'results'] */\n route: string[];\n /** IE { display: '/list' } */\n queryParams?: object;\n}\n\nexport type RoomBookingStoreState = BookingFormState & BuildingStoreState;\n\n@Component({\n selector: 'a-topbar-header',\n template: `\n
\n
\n \n
\n
\n
\n {{ logo.content }}\n \n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n \n
\n
\n `,\n styleUrls: ['./topbar-header.component.scss'],\n // encapsulation: ViewEncapsulation.None,\n})\nexport class TopbarHeaderComponent extends BaseDirective implements OnInit {\n /** Logo of the application organisation */\n public logo: ApplicationIcon;\n /** Whether to show menu */\n @Input() public menu: boolean;\n /** Whether to show modal close icon */\n @Input() public modal: boolean = false;\n /** Whether t show modal back icon */\n @Input() public backModal: boolean = false;\n /** Whether to disable the survey triggers */\n @Input() public noSurvey: boolean = false;\n /** Name of the page being rendered */\n @Input() public page: string;\n /** The theme to use **/\n @Input() public mode: TopBarHeaderMode = TopBarHeaderMode.Dark;\n /** Override the home route. **/\n @Input() public homeOverride: string | undefined;\n /** Show history back instead of logo block */\n @Input() public back: RoutePayload;\n /** Emitter for changes to menu state */\n @Output() public menuChange = new EventEmitter();\n /** Emitter for the close button */\n @Output() public closeCallback = new EventEmitter();\n /** Emitter for the back button */\n @Output() public onBack = new EventEmitter();\n /** Name of the currently active page */\n public currentPage: string;\n /** Survey modal state */\n public modalOpen: boolean = false;\n isEditSeries: boolean = false;\n\n public get feedback() {\n const feedback_url = this._org.getOrganizationFiltersByRoomType('feedback_url');\n return `${feedback_url}${this.currentPage}`;\n // return generateFeedbackUrl(this.currentPage);\n }\n\n public surveyDialogRef: MatDialogRef = null;\n\n public bookingCompleted: Date = new Date();\n public feedbackId: string = null;\n\n constructor(private store: Store,\n private _settings: SettingsService,\n private _dialog: MatDialog,\n private route: ActivatedRoute,\n private _org: OrganisationService,\n private _router: Router) {\n super();\n }\n\n public ngOnInit(): void {\n this.store.dispatch(loadOrganisations.request());\n this._settings.initialised.pipe(first(_ => _)).subscribe(() => {\n this.logo = this._settings.get(`app.logo_${this.mode}`) || { type: 'icon' };\n });\n this.timeout('Getting Title', () => this.updateRoute(document.title));\n this._router.events.subscribe((event: NavigationEnd) => {\n /* istanbul ignore else */\n if (event instanceof NavigationEnd) {\n this.timeout('Getting Title', () => this.updateRoute(document.title));\n }\n });\n\n // if the survey is allowed (don't in modals! due to duplicate appearances)\n if (!this.noSurvey) {\n // get the active form values\n this.subscription('openSurveyModal', this.store.pipe(\n distinctUntilChanged()\n ).subscribe((next: any | undefined) => {\n const feedbackId = next.organisation?.data?.success?._settings?.discovery_info?.feedback_id;\n if (feedbackId && this.feedbackId !== feedbackId) {\n this.feedbackId = feedbackId;\n }\n if (next.bookingForm?.bookingCompleted && this.bookingCompleted.getTime() < next.bookingForm.bookingCompleted.getTime()) {\n this.bookingCompleted = new Date(next.bookingForm.bookingCompleted.getTime());\n this.openFeedbackModal();\n }\n }));\n }\n\n\n this.subscription('activeForm', this.store.pipe(\n select(selectActiveForm),\n distinctUntilChanged()\n ).subscribe((next: BookingFormData | undefined) => {\n if (next) {\n this.isEditSeries = next.action === SeriesAction.EDIT;\n }\n }));\n }\n\n public updateRoute(location) {\n location = location.substr(0, location.indexOf(' |'));\n this.currentPage = location;\n }\n\n /** Set menu state to `true` */\n public showMenu() {\n this.menu = true;\n this.menuChange.emit(this.menu);\n }\n\n public async goToHome() {\n this.isEditSeries && this.clearFormAndResultData();\n await this._router.navigate([this.homeOverride ?? '/']);\n // await this._router.navigate(['/', 'home'], { relativeTo: this.route });\n this._dialog.closeAll();\n }\n\n\n\tpublic clearFormAndResultData() {\n\t\tthis.store.dispatch(clearBookingFormData());\n\t\tthis.store.dispatch(loadRoomsForResults.clear());\n\t}\n\n public goToHelp() {\n const help_url = this._org.getOrganizationFiltersByRoomType('help_url');\n window.open(help_url || Urls.Help);\n }\n\n public goToFeedback() {\n // Over-engineered button action to mimic/test booking confirmation event.\n this.store.dispatch(openBookingSurvey());\n }\n\n public openFeedbackModal() {\n if (!this.modalOpen && !this.surveyDialogRef) {\n this.modalOpen = true;\n this.surveyDialogRef = this._dialog.open(SurveyModalComponent, {\n disableClose: true,\n panelClass: 'mck-modal-survey',\n data: this.feedbackId,\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n this.surveyDialogRef.afterClosed().subscribe(() => {\n this.modalOpen = false;\n this.surveyDialogRef = null;\n });\n }\n\n }\n\n public async goToBackRoute() {\n this.onBack.emit();\n await this._router.navigate(this.back.route, { queryParams: this.back.queryParams });\n }\n\n}\n","import {\n Component,\n OnInit\n} from '@angular/core';\nimport {\n FormControl,\n FormGroup,\n Validators\n} from '@angular/forms';\nimport { first } from 'rxjs/operators';\n\nimport {\n ApplicationIcon,\n ApplicationService,\n UsersService\n} from '@mckinsey-converge/data-common';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'app-login',\n templateUrl: './login.component.html',\n styleUrls: ['./login.component.scss']\n})\nexport class LoginComponent extends BaseDirective implements OnInit {\n /** Logo of the application organisation */\n public logo: ApplicationIcon;\n /** Whether the user credentials are being checked */\n public loading: boolean;\n /** Form fields for the login form */\n public form: FormGroup;\n\n constructor(private _service: ApplicationService, private _users: UsersService) {\n super();\n }\n\n public ngOnInit(): void {\n this.loading = true;\n this.form = new FormGroup({\n username: new FormControl('', [Validators.required]),\n password: new FormControl('', [Validators.required])\n });\n this._service.initialised.pipe(first(_ => _)).subscribe(() => {\n this.loading = false;\n this.logo = this._service.setting('app.logo_light') || { type: 'icon' };\n });\n }\n\n /** Perform user login */\n public login() {\n this.loading = true;\n const form = this.form.value;\n this._users.login({\n username: form.username,\n password: form.password\n }, { form: true }).then(() => {\n this.loading = false;\n }, () => {\n this.loading = false;\n this.form.controls.password.setErrors({ check: true });\n });\n }\n\n}\n","
\n
\n
\n
\n
\n {{ logo.content }}\n \n
\n
\n
\n \n
\n \n Username:\n \n \n \n Username is required\n \n
\n
\n \n Password:\n \n \n \n Invalid username or password\n \n
\n
\n
\n
\n \n
\n
\n
\n
\n\n
\n
\n \n
\n
Converge is loading
\n
\n
\n","import {\n Component,\n EventEmitter,\n OnInit,\n Output,\n ViewEncapsulation\n} from '@angular/core';\n@Component({\n selector: 'app-map-controls',\n template: `\n
\n
\n \n
\n \n \n
\n \n \n
\n \n \n \n \n
\n
\n `,\n styleUrls: ['./map-controls.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n})\nexport class MapControlsComponent implements OnInit {\n @Output()\n public zoomOutClick = new EventEmitter();\n\n @Output()\n public zoomInClick = new EventEmitter();\n\n @Output()\n public refreshClick = new EventEmitter();\n\n @Output()\n public infoClick = new EventEmitter();\n\n @Output() toggleEvent = new EventEmitter();\n\n public isClosed = true;\n\n toggle() {\n this.toggleEvent.emit();\n this.isClosed = !this.isClosed;\n }\n\n constructor() {}\n\n ngOnInit(): void {}\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewEncapsulation\n} from '@angular/core';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { FormControl } from '@angular/forms';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { legendOptions } from '../map.utils';\n\n@Component({\n selector: 'app-map-filters',\n template: `\n
\n
\n \n \n
\n \n \n
\n \n
\n
\n \n \n \n \n
\n
\n `,\n styleUrls: ['./map-filters.component.scss'],\n encapsulation: ViewEncapsulation.Emulated\n})\nexport class MapFiltersComponent extends BaseDirective implements OnInit {\n\n public legendOptions = legendOptions();\n\n @Input()\n public buildings: SelectOption[];\n\n @Input()\n public selectedBuilding: SelectOption;\n\n @Output()\n public selectedBuildingChange = new EventEmitter>();\n\n @Input()\n public levels: SelectOption[];\n\n @Input()\n public selectedLevel: SelectOption;\n\n @Output()\n public selectedLevelChange = new EventEmitter>();\n\n @Input()\n public spaces: SelectOption[];\n\n @Output()\n public selectedSpaceChange = new EventEmitter>();\n\n @Input()\n public selectedSpace: SelectOption;\n\n @Output()\n public searchClick = new EventEmitter();\n\n public buildingControl = new FormControl();\n\n public levelControl = new FormControl();\n\n public spaceControl = new FormControl();\n\n public resetInput: number;\n\n public searchStringPresent = false;\n\n constructor() {\n super();\n }\n\n public ngOnInit(): void {\n this.subscription('buildingChanges',\n this.buildingControl.valueChanges.subscribe(value => this.selectedBuildingChange.emit(value)));\n this.subscription('levelChanges',\n this.levelControl.valueChanges.subscribe(value => this.selectedLevelChange.emit(value)));\n this.subscription('spaceChanges',\n this.spaceControl.valueChanges.subscribe(value => {\n this.selectedSpaceChange.emit(value);\n this.searchClick.emit();\n }));\n }\n\n public clearRoomSearch() {\n this.resetInput = Date.now();\n this.selectedSpace = null;\n this.searchStringPresent = false;\n // TODO, reset the focused room if required?\n }\n\n public inputTextChange(event: any) {\n this.searchStringPresent = !!event.length;\n }\n}\n","import {\n Component,\n Inject,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n Space,\n RoomResultsViewModel,\n} from '@mckinsey-converge/data-common';\nimport { MAP_OVERLAY_DATA } from '@acaprojects/ngx-interactive-map';\n\n\ninterface SpaceWithReturnData extends Space {\n // callback?: Function,\n room?: RoomResultsViewModel,\n parentComponent?: any,\n}\n/**\n * Replaces the built-in {@link MapPinComponent} based on design.\n */\n@Component({\n selector: 'app-map-overlay',\n template: `\n
\n \n
\n
\n
\n \n
\n
\n
\n {{data.simple_name || 'No Label'}}\n \n \n
{{ data.status === 'requestable' ? 'Requestable' : 'Bookable'}} {{ data?.room?.space?.availableOccurrences }} out of {{ data?.room?.space?.totalOccurrences }}
\n
\n
\n
\n\n
\n `,\n styleUrls: ['./map-overlay.component.scss'],\n encapsulation: ViewEncapsulation.Emulated\n})\nexport class MapOverlayComponent implements OnInit {\n constructor(\n @Inject(MAP_OVERLAY_DATA) public data: SpaceWithReturnData,\n ) {\n }\n public ngOnInit(): void {\n }\n\n\n public roomDataCallback() {\n if (this.data.parentComponent.roomSelected && this.data.room) {\n this.data.parentComponent.roomSelected(this.data.room)\n }\n }\n\n public get is_recurrent () {\n return this.data.parentComponent?.bookingFormData?.value?.is_recurrent || false;\n }\n\n public closeOverlay() {\n this.data.parentComponent?.closeMapOverlayOutlet();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { BehaviorSubject, combineLatest, interval } from 'rxjs';\nimport { BaseDirective, HashMap, Point } from '@mckinsey-converge/base';\nimport { MapFeature } from '@acaprojects/ngx-interactive-map/lib/helpers/map.interfaces';\nimport { select, Store } from '@ngrx/store';\nimport { BuildingStoreState } from '@mckinsey-converge/buildings';\nimport {\n Building,\n BuildingLevel,\n SettingsService,\n Space,\n mapBuildingLevelToOption,\n mapResultsToViewModels,\n RoomResultsViewModel,\n selectActiveForm,\n selectBookingLocations,\n selectMapFilteredResults,\n selectSelectedBuildingOptions,\n roomFormDataToQuery,\n FilteredSpaces,\n BookingStoreState,\n storeBookingFormData,\n BookingFormData,\n MapListener,\n selectFilteredDiffSizeResults\n} from '@mckinsey-converge/data-common';\nimport { distinctUntilChanged, map, take, withLatestFrom } from 'rxjs/operators';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { filterUndefined } from '@mckinsey-converge/rx-utils';\nimport { MatDialog } from '@angular/material/dialog';\nimport { OfficeInformationModalComponent } from 'src/app/map/office-information-modal/office-information-modal.component';\nimport {\n CENTER_POINT,\n generateMapListenersForSpace,\n generateMapStyleForSpace,\n MAX_ZOOM_LEVEL,\n MIN_ZOOM_LEVEL,\n roomToMapFeature,\n} from 'src/app/map/map.utils';\nimport {\n loadRoomsForResults,\n loadRoomsForResultsMap,\n mapRoomToSelectOption,\n RoomStoreState,\n} from '@mckinsey-converge/rooms';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { UserStoreState } from '@mckinsey-converge/user';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Location } from '@angular/common';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\n\nexport type MapSearchStoreState = BuildingStoreState &\n RoomStoreState &\n BookingStoreState &\n UserStoreState;\n\n@Component({\n selector: 'app-map-search',\n template: `\n
\n
\n \n \n
\n
\n
\n \n
\n \n \n \n \n
\n
\n `,\n styleUrls: ['./map-search.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n animations: [\n trigger('expandHeight', [\n state(\n 'open',\n style({\n height: '470px',\n })\n ),\n state(\n 'closed',\n style({\n height: 'calc(100vh - 270px)',\n })\n ),\n transition('open <=> closed', animate('600ms ease-out')),\n ]),\n ],\n})\nexport class MapSearchComponent extends BaseDirective implements OnInit {\n @Input()\n public openHeader: boolean = true;\n\n public zoom = new BehaviorSubject(MIN_ZOOM_LEVEL);\n\n public center = new BehaviorSubject(CENTER_POINT);\n public listeners = new BehaviorSubject([]);\n\n public focusedMapSpace = new BehaviorSubject(undefined);\n public features = combineLatest([this.focusedMapSpace]).pipe(\n map((items) => items.filter((i) => !!i))\n );\n\n public focusedRoom = new BehaviorSubject(undefined);\n\n public resultBuildings = new BehaviorSubject([]);\n public resultSpaces = new BehaviorSubject([]);\n // public resultSpaces = new BehaviorSubject>(\n // LoadingModel.empty()\n // );\n\n public activeBuilding = new BehaviorSubject(undefined);\n public activeLevel = new BehaviorSubject(undefined);\n public activeSpace = new BehaviorSubject(undefined);\n\n /** Mapping of elements to CSS styles */\n public style_map = new BehaviorSubject>>({});\n\n public mapUrl = this.activeLevel.pipe(map((level) => level?.map_url ?? ''));\n\n public bookingLocations = new BehaviorSubject[]>([]);\n public buildingLevelOptions = new BehaviorSubject[]>([]);\n public spaceListOptions = new BehaviorSubject[]>([]);\n\n public activeBuildingOption = combineLatest([this.activeBuilding, this.bookingLocations]).pipe(\n map(([building, locations]) => locations.find((l) => l.value === building?.id))\n );\n\n public activeLevelOption = this.activeLevel.pipe(map(mapBuildingLevelToOption));\n public activeSpaceOption = this.activeSpace.pipe(map(mapRoomToSelectOption));\n public bookingFormData = new BehaviorSubject(undefined);\n public floorData: any;\n public floorDataParam: any;\n @Output() toggleEvent = new EventEmitter();\n\n //to capture state for toggling expandHeight animation\n public isOpen = true;\n resultsLoading: any;\n\n propagateToggle() {\n this.toggleEvent.emit();\n this.isOpen = !this.isOpen;\n }\n \n\n constructor(\n private store: Store,\n public dialog: MatDialog,\n private settingService: SettingsService,\n private router: Router,\n private location: Location,\n private route: ActivatedRoute\n ) {\n super();\n this.floorData = location.getState();\n }\n\n public ngOnInit(): void {\n // this.resultsLoading = this.resultSpaces.pipe(map((m) => m.isLoading));\n \n this.subscription(\n 'bookingLocations',\n this.store.pipe(select(selectBookingLocations)).subscribe((next) => {\n this.bookingLocations.next(next);\n // update the map view MCK-1100 when location changes\n const self = this;\n setTimeout(() => {\n self.selectActiveBuilding(self.bookingLocations.value[0]);\n }, 0);\n })\n );\n this.subscription(\n 'bookingSpaceResults',\n combineLatest([\n this.store.pipe(\n select(selectMapFilteredResults),\n map((r: LoadingModel) => { \n this.resultsLoading = r.isLoading;\n return r.success;})\n ),\n this.activeBuilding.pipe(filterUndefined()),\n this.activeLevel.pipe(filterUndefined()),\n ]).subscribe(([filteredSpaces, building, level]) => {\n const spacesFromSelection = (filteredSpaces.spaces || []).filter(\n (s) => !!s.map_id && s.zones.includes(building.id)\n );\n this.resultSpaces.next(spacesFromSelection);\n\n const listeners: MapListener[] = [];\n const styles: HashMap> = {};\n const colour_map = this.settingService.get('app.explore.colors') || {};\n spacesFromSelection.forEach((space) => {\n const status = filteredSpaces.statusMap[space.id];\n const mapStyle = generateMapStyleForSpace(space, status, colour_map);\n styles[`#${mapStyle.id}`] = mapStyle.styles;\n listeners.push(\n ...generateMapListenersForSpace(\n space,\n () => {},\n () => {},\n status !== 'in-use' ? \n () => {\n this.activeSpace.next(space);\n this.focusOnRoom(status);\n } \n : ()=> {}\n )\n );\n });\n this.style_map.next(styles);\n this.listeners.next(listeners);\n })\n );\n this.subscription(\n 'bookingResults',\n this.resultSpaces\n .pipe(withLatestFrom(this.activeSpace))\n .subscribe(([resultSpaces, activeSpace]) => {\n this.spaceListOptions.next(resultSpaces.map(mapRoomToSelectOption));\n })\n );\n\n this.subscription(\n 'storeResultedBuildings',\n this.store.pipe(select(selectSelectedBuildingOptions)).subscribe((buildings) => {\n this.resultBuildings.next(buildings);\n // if we dont have active building yet, set it here.\n if (buildings.length > 0 && !this.activeBuilding.value) {\n const firstBuilding = buildings[0];\n this.activeBuilding.next(firstBuilding);\n }\n })\n );\n\n this.subscription(\n 'activeBuildingChange',\n this.activeBuilding\n .pipe(\n filterUndefined(),\n map((b: Building) => b.levels)\n )\n .subscribe((levels) => {\n this.buildingLevelOptions.next(levels.map(mapBuildingLevelToOption));\n \n if(this.activeLevel.value){\n this.floorDataParam = {\n display: this.activeLevel.value.name,\n value: this.activeLevel.value.id,\n };\n this.selectBuildingLevel(this.floorDataParam);\n setTimeout(() => {\n this.refreshFloorNumber();\n });\n }\n \n })\n );\n\n // if levels change and active level no longer part of list, pick first.\n this.subscription(\n 'updateActiveLevelOnActiveBuildingChange',\n this.activeBuilding\n .pipe(\n filterUndefined(),\n distinctUntilChanged(),\n withLatestFrom(this.activeLevel),\n map(\n ([building, activeLevel]) =>\n (activeLevel && building.levels.find((l) => l.id === activeLevel.id)) ||\n building.levels[0]\n )\n )\n .subscribe((level) => {\n this.activeLevel.next(level);\n })\n );\n\n // re-request rooms every minute to update space status.\n this.subscription(\n 'updateSpaceStatusInterval',\n interval(60 * 1000)\n .pipe(withLatestFrom(this.store.select(selectActiveForm)))\n .subscribe(([, form]) => {\n this.store.dispatch(loadRoomsForResultsMap.request(roomFormDataToQuery(form) ));\n })\n );\n\n // get the active form values\n this.subscription(\n 'activeForm',\n this.store\n .pipe(select(selectActiveForm), distinctUntilChanged())\n .subscribe((next: BookingFormData | undefined) => {\n if (next) {\n this.bookingFormData.next(next);\n }\n })\n );\n\n if (this.floorData?.payload) {\n this.floorDataParam = {\n display: this.floorData?.payload.name,\n value: this.floorData?.payload.id,\n };\n this.selectBuildingLevel(this.floorDataParam);\n setTimeout(() => {\n this.refreshFloorNumber();\n });\n }\n }\n\n public refreshFloorNumber(): void {\n this.activeLevelOption = this.activeLevel.pipe(map(mapBuildingLevelToOption));\n }\n\n public zoomIn() {\n if (this.zoom.value < MAX_ZOOM_LEVEL) {\n this.zoom.next(this.zoom.value + 1);\n }\n }\n\n public zoomOut() {\n if (this.zoom.value > MIN_ZOOM_LEVEL) {\n this.zoom.next(this.zoom.value - 1);\n }\n }\n\n public displayOfficeInformation() {\n this.dialog.open(OfficeInformationModalComponent, {\n data: this.activeBuilding.value,\n panelClass: 'mck-alert',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n }\n\n public resetZoomLevels() {\n this.zoom.next(MIN_ZOOM_LEVEL);\n this.center.next(CENTER_POINT);\n this.focusedRoom.next(undefined);\n // this.focusedMapSpace.next(undefined);\n }\n\n public closeMapOverlayOutlet = () => {\n this.focusedMapSpace.next(undefined)\n this.zoom.next(MIN_ZOOM_LEVEL);\n this.center.next(CENTER_POINT);\n this.focusedRoom.next(undefined);\n };\n \n\n public selectActiveBuilding(selection: SelectOption) {\n this.resultBuildings\n .pipe(\n map((all) => all.find((b) => b.id === selection.value)),\n take(1),\n filterUndefined()\n )\n .subscribe((next) => {\n this.activeBuilding.next(next);\n });\n }\n\n public selectBuildingLevel(selection: SelectOption) {\n this.activeBuilding\n .pipe(\n map((b) => b.levels?.find((l) => l.id === selection?.value)),\n take(1),\n filterUndefined()\n )\n .subscribe((next) => {\n\t\t\t\tthis.store.dispatch(loadRoomsForResultsMap.request(roomFormDataToQuery(this.bookingFormData.value) ));\n this.activeLevel.next(next);\n\n /**\n * update mapUrl as per active level on change of filter search\n */\n this.mapUrl = this.activeLevel.pipe(map((level) => level?.map_url ?? ''))\n });\n }\n\n public selectActiveSpace(selection: SelectOption) {\n this.resultSpaces\n .pipe(\n map((all) => all.find((s) => s.id === selection?.value)),\n take(1),\n filterUndefined()\n )\n .subscribe((next) => {\n this.activeSpace.next(next);\n });\n }\n\n public focusOnRoom(status?:string) {\n this.activeSpace.pipe(take(1), filterUndefined()).subscribe((next) => {\n let delay = 0;\n if (next.level.id !== this.activeLevel.value.id) {\n this.activeLevel.next(next.level);\n delay = 500;\n }\n this.timeout(\n 'updateLevelAndRoom',\n () => {\n const focusedRoom = mapResultsToViewModels(\n [this.activeSpace.value],\n [this.activeLevel.value],\n [this.activeBuilding.value]\n );\n this.focusedRoom.next(focusedRoom[0]);\n this.focusedMapSpace.next(roomToMapFeature(this.focusedRoom.value, this, status));\n this.zoom.next(MAX_ZOOM_LEVEL);\n },\n delay\n );\n });\n }\n\n public roomSelected(room: RoomResultsViewModel) {\n\n\n const { is_recurrent } = this.bookingFormData.value;\n this.bookingFormData.value.recurrence_exceptions = [];\n if(is_recurrent){\n // Handle recurrence conflicts if the booking is part of a recurring series\n const spaceConflicts = room.space.recurrence_availability.filter(recurr => !recurr.available);\n this.bookingFormData.value.recurrence_exceptions = spaceConflicts.map((recurr)=> recurr.date);\n }\n\n\n // Handle timezone offset for accurate date and time information\n let { dateTz } = this.bookingFormData.value;\n // if (this.offset) {\n dateTz = dateTz.addValue({ minutes: 0 });\n // }\n\n /**\n * selectedRoom.space is fully fledged Space class\n * this.bookingFormData.value.booking.room is not and does not contain the timezone\n * this.bookingFormData.value.booking.timezone is legit\n */\n // UPDATE: providing payload as part of extras instead dispatching storeBookingFormData event to avoid redundant backend request calls\n this.router.navigate(['room'], { relativeTo: this.route, state:{payload : {\n ...this.bookingFormData.value,\n // buildings: this._org.buildings, // require to manage browser refresh on room detail screen!\n dateTz,\n offset: 0,\n selectedRoom: room\n }\n }});\n\n\n // submit\n // this.store.dispatch(\n // storeBookingFormData({\n // payload: {\n // ...this.bookingFormData.value,\n // selectedRoom: room,\n // },\n // })\n // );\n\n // this.router.navigate(['room'], { relativeTo: this.route });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MapSearchComponent } from './map-search/map-search.component';\nimport { MapControlsComponent } from './map-controls/map-controls.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { LibraryModule } from '@acaprojects/ngx-interactive-map';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MapFiltersComponent } from './map-filters/map-filters.component';\nimport { UiModule } from '@mckinsey-converge/ui';\nimport { OfficeInformationModalComponent } from './office-information-modal/office-information-modal.component';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MapOverlayComponent } from './map-overlay/map-overlay.component';\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\n\nexport const mapModuleImports = [\n CommonModule,\n MatButtonModule,\n LibraryModule,\n MatSelectModule,\n UiModule,\n MatDialogModule,\n NgxSkeletonLoaderModule\n];\n\nexport const mapModuleDeclarations = [\n MapSearchComponent,\n MapControlsComponent,\n MapFiltersComponent,\n OfficeInformationModalComponent,\n MapOverlayComponent\n];\n\n@NgModule({\n declarations: [\n ...mapModuleDeclarations\n ],\n exports: [\n ...mapModuleDeclarations\n ],\n imports: [\n ...mapModuleImports\n ]\n})\nexport class MapModule {\n}\n","import { SelectOption } from '@mckinsey-converge/ui';\nimport {\n Space,\n SpaceStatus,\n RoomResultsViewModel,\n MapListener\n} from '@mckinsey-converge/data-common';\nimport {\n HashMap,\n Point\n} from '@mckinsey-converge/base';\nimport { MapFeature } from '@acaprojects/ngx-interactive-map/lib/helpers/map.interfaces';\nimport { MapOverlayComponent } from 'src/app/map/map-overlay/map-overlay.component';\n\nexport const MIN_ZOOM_LEVEL = 1;\nexport const MAX_ZOOM_LEVEL = 10;\nexport const CENTER_POINT: Point = { x: 0.5, y: 0.5 };\n\nconst mapSpaceStatusToDisplay = (status: SpaceStatus): string => {\n switch (status) {\n case SpaceStatus.NotBookable:\n return 'Not Bookable';\n case SpaceStatus.Requestable:\n return 'Available by Request';\n case SpaceStatus.Unavailable:\n return 'In Use';\n case SpaceStatus.Available:\n default:\n return 'Available';\n }\n};\n\nconst mapSpaceStatusToOption = (status: SpaceStatus) => ({\n value: status,\n display: mapSpaceStatusToDisplay(status)\n});\n\nexport const legendOptions = (): SelectOption[] => [\n SpaceStatus.Available,\n SpaceStatus.Requestable,\n SpaceStatus.Unavailable,\n SpaceStatus.NotBookable\n].map(mapSpaceStatusToOption);\n\n\nexport const defaultMapBookingRules = [\n 'Rooms showing yellow are restricted and must be requested',\n 'Rooms showing green are available to book for one hour',\n 'Rooms showing red are booked',\n 'Rooms showing grey are not bookable but may be used if they are empty'\n];\n\nexport const defaultMapBookingSubtitle = 'You may request restricted rooms but they will need to be approved by an admin';\n\nexport const generateMapStyleForSpace = (\n space: Space,\n status: SpaceStatus,\n colorStatusMap: HashMap) => {\n const id =\n `${space.map_id}`.indexOf('area') < 0\n ? `area-${space.map_id}-status`\n : space.map_id;\n return (\n {\n id,\n styles: {\n fill: colorStatusMap[`space-${status}`] || '#000',\n opacity: 0.99\n }\n });\n};\n\n/**\n * Generates actions for mapview handling.\n * @param space - the space to generate\n * @param clickSpace - called when clicked or touched\n * @param hoverSpace - called when you hover over a space\n * @param leaveSpace - called when you leave a space.\n */\nexport const generateMapListenersForSpace = (\n space: Space,\n hoverSpace: () => void,\n leaveSpace: () => void,\n clickSpace: () => void\n): MapListener[] => {\n const id =\n `${space.map_id}`.indexOf('area') < 0\n ? `area-${space.map_id}-status`\n : space.map_id;\n const listeners: MapListener[] = [];\n listeners.push({\n id,\n event: 'mouseenter',\n callback: hoverSpace\n });\n listeners.push({\n id,\n event: 'mouseleave',\n callback: leaveSpace\n });\n if (space.bookable) {\n listeners.push({\n id,\n event: 'click',\n callback: clickSpace\n });\n listeners.push({\n id,\n event: 'touchend',\n callback: clickSpace\n });\n }\n return listeners;\n};\n\n\nexport const spaceToMapFeature = (space: Space): MapFeature => ({\n id: `area-${space.map_id}-status`,\n coordinates: null,\n content: MapOverlayComponent,\n data: {\n ...space\n }\n});\n\nexport const roomToMapFeature = (room: RoomResultsViewModel, parentComponent?: any, status?: string): MapFeature => ({\n id: `area-${room.space.map_id}-status`,\n coordinates: null,\n content: MapOverlayComponent,\n data: {\n ...room.space,\n parentComponent,\n room,\n status:status\n }\n});","import {\n Component,\n Inject,\n ViewEncapsulation\n} from '@angular/core';\nimport { HashMap } from '@mckinsey-converge/base';\nimport { \n BookingRuleDetails,\n Building,\n} from '@mckinsey-converge/data-common';\nimport {\n MAT_DIALOG_DATA,\n MatDialogRef\n} from '@angular/material/dialog';\nimport {\n defaultMapBookingRules,\n defaultMapBookingSubtitle\n} from 'src/app/map/map.utils';\n\n@Component({\n selector: 'app-office-information-modal',\n template: `\n \n
\n
Booking in {{building?.name}}
\n
{{targetLinks(info)}}
\n
\n
\n
    \n \n
\n
\n
\n {{group.title}}\n
    \n \n
\n
\n
\n When booking from maps:\n
    \n \n
\n \n

\n For more info email: {{contact}}\n

\n

\n
\n
\n
\n \n
\n
\n `,\n styleUrls: ['./office-information-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class OfficeInformationModalComponent {\n constructor(@Inject(MAT_DIALOG_DATA) public building: Building,\n private dialogRef: MatDialogRef) {\n }\n\n\n /** Booking rule details */\n public get rules(): string[] {\n const building: Building = this.building;\n const details: BookingRuleDetails = building?.booking_details;\n return details?.rules || [] as any;\n }\n\n /** Booking rule details */\n public get info(): string {\n const building: Building = this.building;\n const details: BookingRuleDetails = building?.booking_details;\n return details?.info || defaultMapBookingSubtitle;\n }\n\n public get customHtml(): string | undefined {\n const building: Building = this.building;\n const details: BookingRuleDetails = building?.booking_details;\n return details?.custom_html;\n }\n\n /** Booking map rule details */\n public get map_rules(): string[] {\n const building: Building = this.building;\n const details: BookingRuleDetails = building?.booking_details;\n return details?.map_rules || defaultMapBookingRules as any;\n }\n\n /** Other special booking rules */\n public get other_rules(): { title: string, rules: string[] }[] {\n const building: Building = this.building;\n const details: BookingRuleDetails = building?.booking_details;\n const rules: HashMap = (details as any)?.other_rules || {};\n return Object.keys(rules).reduce((a, v) => {\n \n a.push({ title: v, rules: rules[v] || [] });\n return a;\n }, []);\n }\n\n public get contact(): string {\n const building: Building = this.building;\n const details: BookingRuleDetails = building?.booking_details;\n return details?.contact || '';\n }\n\n public get link(): { url?: string, name?: string } {\n const building: Building = this.building;\n const details: BookingRuleDetails = building?.booking_details;\n return details?.link || {};\n }\n\n public closeModal() {\n this.dialogRef.close();\n }\n\n public targetLinks(info: string) {\n const regex = /[] = [\n BaseDirective,\n LoginComponent,\n TopbarHeaderComponent,\n ResponsiveInlineImagesComponent,\n OverlayMenuComponent,\n FooterMenuComponent,\n MapControlsComponent\n];\n\nconst MATERIAL_MODULES: any[] = [\n MatButtonModule,\n MatSnackBarModule,\n MatDialogModule,\n MatFormFieldModule,\n MatInputModule,\n MatProgressSpinnerModule,\n MatProgressBarModule,\n MatAutocompleteModule,\n MatSelectModule,\n MatChipsModule,\n MatRippleModule,\n MatMenuModule,\n MatCheckboxModule,\n MatTooltipModule,\n MatRadioModule,\n MatTabsModule,\n MatSlideToggleModule\n];\n\nconst CDK_MODULES: any[] = [\n ScrollingModule,\n DragDropModule,\n CdkTableModule\n];\n\n\n@NgModule({\n declarations: [\n ...COMPONENTS\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n APipesModule,\n AInteractiveMapModule,\n ACustomEventsModule,\n RouterModule,\n EditorModule,\n ComposerModule,\n LegacyUiModule,\n LegacyOverlaysModule,\n IvyCarouselModule,\n ...MATERIAL_MODULES,\n ...CDK_MODULES\n ],\n exports: [\n APipesModule,\n AInteractiveMapModule,\n ACustomEventsModule,\n LegacyUiModule,\n LegacyOverlaysModule,\n ...COMPONENTS,\n ...MATERIAL_MODULES,\n ...CDK_MODULES\n ]\n})\nexport class SharedContentModule {\n}\n","import { Component, OnInit } from '@angular/core';\nimport { filter, first, map, distinctUntilChanged, shareReplay } from 'rxjs/operators';\nimport {\n ApplicationLoadingState,\n BaseDirective,\n closestToTimeSlot,\n closestToTimeSlotTz,\n LoadingState,\n} from '@mckinsey-converge/base';\nimport {\n ApplicationIcon,\n ApplicationService,\n Building,\n BuildingCity,\n defaultRoomSizeOption,\n DEFAULT_BOOKING_DURATION,\n flattenDisplayOffices,\n internalBookingTypeOption,\n mapBuildingToSelectOption,\n mapCityToAllSelectOption,\n mapResultsToViewModels,\n OrganisationService,\n SpacesService,\n storeBookingFormData,\n availabilityOptionsToQuery,\n bookingTypeOptions,\n selectFilteredDiffSizeResults,\n flattenBuildingsWithLevels,\n clearRoomFilters,\n allBookingTypeOption,\n roomSizeOptions,\n roomSizeOptionsKiosk,\n} from '@mckinsey-converge/data-common';\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs';\nimport { select, Store } from '@ngrx/store';\nimport { loadUser, selectHasUserData, UserStoreState } from '@mckinsey-converge/user';\nimport { ComposerService } from '@placeos/composer';\nimport { ActivatedRoute, Router, NavigationStart, Event as NavigationEvent } from '@angular/router';\n\nimport {\n DateNow,\n DateTZ,\n convertLocalTimestampToTimezonedDateTz,\n} from '@mckinsey-converge/date-tz';\nimport { DateTime } from 'luxon';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport {\n buildingStateSelector,\n loadBuildings,\n selectBuildingOptionsGroupedByCity,\n} from '@mckinsey-converge/buildings';\nimport { loadDiffSizeResults, loadRoomsForResults, loadRoomsForResultsMap } from '@mckinsey-converge/rooms';\nimport { timeStamp } from 'console';\nimport { filterUndefined } from '@mckinsey-converge/rx-utils';\n\n@Component({\n selector: 'app-shell-wrapper',\n templateUrl: './shell.component.html',\n styleUrls: ['./shell.component.scss'],\n})\nexport class ShellWrapperComponent extends BaseDirective implements OnInit {\n /** Loading state of the application */\n public loading_state: ApplicationLoadingState;\n /** Logo of the application organisation */\n public logo: ApplicationIcon;\n\n private userLoading = new BehaviorSubject(true);\n public isQRCode = new BehaviorSubject(true);\n public buildingOptions = new BehaviorSubject[]>([]);\n public zone_id: any;\n public floor: any;\n\n constructor(\n private _service: ApplicationService,\n private placeOs: ComposerService,\n private _org: OrganisationService,\n private activatedRoute: ActivatedRoute,\n private _spaces: SpacesService,\n private router: Router,\n private store: Store\n ) {\n super();\n\n // Initialize roomID\n let roomId = null;\n if (this.activatedRoute.snapshot.queryParamMap.get('id')) {\n roomId = this.activatedRoute.snapshot.queryParamMap.get('id');\n } else if (localStorage.oauth_redirect && localStorage.oauth_redirect.includes('?id=')) {\n roomId = localStorage.oauth_redirect.split('=')[1];\n }\n // roomId ? this.isQRCode.next(false) : this.isQRCode.next(true);\n\n // Initialize zoneID\n let zone_id = null;\n if (this.activatedRoute.snapshot.queryParamMap.get('zone_id')) {\n zone_id = this.activatedRoute.snapshot.queryParamMap.get('zone_id');\n } else if (\n localStorage.oauth_redirect &&\n localStorage.oauth_redirect.includes('?zone_id=')\n ) {\n zone_id = localStorage.oauth_redirect.split('=')[1];\n if (zone_id.includes('&')) {\n zone_id = zone_id.split('&')[0];\n }\n }\n\n this.zone_id = zone_id;\n\n // Initialize floor number\n let floor = null;\n if (this.activatedRoute.snapshot.queryParamMap.get('floor')) {\n floor = this.activatedRoute.snapshot.queryParamMap.get('floor');\n } else if (localStorage.oauth_redirect && localStorage.oauth_redirect.includes('&floor=')) {\n floor = localStorage.oauth_redirect.split('&floor=')[1];\n }\n this.floor = floor;\n (floor && zone_id) || roomId ? this.isQRCode.next(false) : this.isQRCode.next(true);\n }\n\n /** Whether the user needs to login */\n public get show_login(): Observable {\n return this.userLoading;\n }\n\n /** Whether a module is still loading data */\n public get is_loading(): Observable {\n return this.userLoading;\n }\n\n /** List of modules with a loading state */\n public get loading_state_list(): LoadingState[] {\n const list: LoadingState[] = [];\n for (const mod in this.loading_state) {\n if (this.loading_state[mod]) {\n list.push(this.loading_state[mod]);\n }\n }\n return list;\n }\n\n /**\n * Function: To check and fetch room details if available for the scanned roomId\n * @param buildings\n * @param roomId\n */\n public checkRoomId(buildings: Building[], roomId: string) {\n let formGroup = {\n location: [],\n date: closestToTimeSlot(DateTime.now(), 15).valueOf(),\n dateTz: closestToTimeSlotTz(new DateTZ({ date: Date.now(), is_local_tz: true }), 15),\n duration: DEFAULT_BOOKING_DURATION,\n bookingType: bookingTypeOptions[0],\n roomSize: defaultRoomSizeOption,\n selectedRoom: null,\n timezone: null,\n buildings: buildings,\n };\n\n const params = {\n room_ids: roomId,\n };\n\n const availibityParams = {\n room_ids: roomId,\n dateTz: closestToTimeSlotTz(new DateTZ({ date: Date.now(), is_local_tz: false }), 15),\n duration: DEFAULT_BOOKING_DURATION,\n hide_declined: true,\n };\n const query = availabilityOptionsToQuery(availibityParams);\n this._spaces.queryRooms(query).subscribe(\n (res) => {\n //Convert raw data into API object\n const list = res.map((i) => this._spaces.process(i));\n this._spaces.setSpaceList(list);\n /**\n * Building form data to resue to navigate to result page if room is not available!\n */\n const bookingRoom = mapResultsToViewModels(\n list,\n list[0].building.levels,\n buildings\n );\n const city = list[0].building.city;\n const timezone = list[0].timezone;\n const grouped_by_city = {\n key: { name: city, timezone },\n value: buildings?.filter((bld) => bld.city === city) || [],\n };\n const city_buildings = grouped_by_city.value.map((bld) =>\n mapBuildingToSelectOption(grouped_by_city.key.name, bld)\n );\n const options = [mapCityToAllSelectOption(grouped_by_city.key), ...city_buildings];\n\n const seledtedZone: SelectOption = options.filter(\n (e) => e.value === list[0].building.id\n )[0];\n const buildingTimezone = list[0].timezone;\n // form group data\n formGroup = {\n location: [seledtedZone],\n date: closestToTimeSlot(DateTime.now(), 15).valueOf(),\n dateTz: closestToTimeSlotTz(\n new DateTZ({ date: Date.now(), is_local_tz: false }),\n 15\n ).toZone(buildingTimezone),\n duration: DEFAULT_BOOKING_DURATION,\n bookingType:\n list[0].internal_or_external === 'internal'\n ? bookingTypeOptions[0]\n : bookingTypeOptions[1],\n roomSize: defaultRoomSizeOption,\n selectedRoom: bookingRoom[0],\n timezone: buildingTimezone,\n buildings: buildings,\n };\n\n this.store.dispatch(\n storeBookingFormData({\n payload: formGroup,\n })\n );\n this.router.navigate([`../home/results/room`], {\n state: { payload: { ...formGroup, offset: 0 } },\n });\n localStorage.oauth_redirect = localStorage.oauth_redirect.split('?')[0];\n this.isQRCode.next(true);\n },\n (error) => {\n // console.log(error);\n this.isQRCode.next(true);\n // this.router.navigate([`home/`]); // to navigate to default route if room dont exists\n /**\n * Navigate to room result page if no room/id exist in the db/ removed from the db in future -\n */\n this.store.dispatch(storeBookingFormData({ payload: formGroup }));\n this.router.navigate([`../home/results`], {\n state: { payload: { ...formGroup, offset: 0 } },\n queryParams: { display: 'list' },\n });\n }\n );\n }\n\n public ngOnInit(): void {\n // when qr code lands on a url for the second time, reload it (to compensate for different browser/device combination default behaviors)\n this.subscription(\n 'navigationEventShell',\n this.router.events\n .pipe(filter((event) => event instanceof NavigationStart))\n .subscribe((event: NavigationEvent) => {\n if (event instanceof NavigationStart) {\n if (\n event.navigationTrigger === 'popstate' &&\n (event.url.includes('home?zone_id=') || event.url.includes('home?id='))\n ) {\n this.userLoading.next(true);\n window.location.reload();\n }\n }\n })\n );\n\n let roomId = null;\n if (this.activatedRoute.snapshot.queryParamMap.get('id')) {\n roomId = this.activatedRoute.snapshot.queryParamMap.get('id');\n } else if (localStorage.oauth_redirect && localStorage.oauth_redirect.includes('?id=')) {\n roomId = localStorage.oauth_redirect.split('=')[1];\n }\n\n if (roomId) {\n this.subscription(\n 'buildings',\n this._org\n .listen('buildings')\n .pipe(first((_) => !!_ && !!_.length))\n .subscribe((bld_list: Building[]) => {\n this.checkRoomId(bld_list, roomId);\n })\n );\n }\n\n if (this.zone_id && this.floor) {\n this.subscription(\n 'buildings',\n this._org\n .listen('buildings')\n .pipe(first((_) => !!_ && !!_.length))\n .subscribe((bld_list: Building[]) => {\n const building = bld_list.filter((el) => el.id === this.zone_id);\n\n const city = building[0].city;\n const timezone = building[0].timezone;\n\n const grouped_by_city = {\n key: { name: city, timezone },\n value: building || [],\n };\n const city_buildings = grouped_by_city.value.map((bld) =>\n mapBuildingToSelectOption(grouped_by_city.key.name, bld)\n );\n const options = [\n mapCityToAllSelectOption(grouped_by_city.key),\n ...city_buildings,\n ];\n\n const seledtedZone: SelectOption = options.filter(\n (e) => e.value === building[0].id\n )[0];\n const buildingTimezone = building[0].timezone;\n // form group data\n const addMin = DateTime.now().get('minute') % 5 === 0 ? 1 : 0;\n const formGroup = {\n location: [seledtedZone],\n date: closestToTimeSlot(\n DateTime.now().plus({ minutes: addMin }),\n 15\n ).valueOf(),\n dateTz: closestToTimeSlotTz(\n new DateTZ({\n date: DateTime.now().plus({ minutes: addMin }),\n is_local_tz: false,\n building_tz: buildingTimezone,\n }),\n 15\n ),\n duration: 35,\n bookingType: allBookingTypeOption, // all rooms (including internal and external both)\n roomSize: roomSizeOptionsKiosk[3],\n selectedRoom: null,\n timezone: buildingTimezone,\n buildings: bld_list,\n };\n\n const query2 = {\n // capacity: 3,\n locations: this.zone_id,\n // capacity_max: 9,\n // diff_capacity: true,\n hide_declined: true,\n dateTz: closestToTimeSlotTz(\n new DateTZ({\n date: DateTime.now().plus({ minutes: addMin }),\n is_local_tz: false,\n building_tz: buildingTimezone,\n }),\n 15\n ),\n duration: 35,\n };\n\n //clear search filters first if any applied previously\n this.store.dispatch(clearRoomFilters());\n\n this.store.dispatch(loadRoomsForResults.clear());\n this.store.dispatch(storeBookingFormData({ payload: formGroup }));\n\n this.store.dispatch(loadRoomsForResults.request(query2));\n localStorage.oauth_redirect = '';\n // To do: navigate to floor-map route\n this.router.navigate([`../home/results`], {\n state: {\n payload: this.floor,\n building: building,\n floorMap: true,\n url: window.location.href,\n },\n queryParams: { display: '' },\n });\n this.isQRCode.next(true);\n })\n );\n }\n\n this.subscription(\n 'loading',\n this._service.listen('loading').subscribe((loading) => {\n this.loading_state = loading;\n })\n );\n\n this._service.initialised.pipe(first((_) => _)).subscribe(() => {\n this.logo = this._service.setting('app.logo_light') || { type: 'icon' };\n });\n\n /**\n * Load current user into redux. this is meant to remove old way of loading user from user's service.\n */\n this.subscription(\n 'currentUser',\n combineLatest([\n this.store.pipe(select(selectHasUserData)),\n this.placeOs.initialised,\n this.isQRCode, // added to track room details if QR code used to open app\n ])\n .pipe(\n filter(([_, initialized, isQRCodeScanedAndReady]) => {\n console.log(_);\n return initialized && isQRCodeScanedAndReady;\n })\n )\n .subscribe(([next]) => {\n this.userLoading.next(!next);\n if (!next) {\n this.store.dispatch(loadUser.request());\n }\n })\n );\n }\n}\n","
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
Converge is loading
\n
\n
\n
\n","export enum Urls {\n LearnMore = 'https://our-firm.intranet.mckinsey.com/covid-portal/travel',\n Feedback = 'mailto:converge_feedback@mckinsey.com?subject=Feedback for page: ',\n Help = 'https://mckinsey.service-now.com/ghd?id=topic_simple&topic_id=54e8eb091bea3d1831b17449cd4bcbed',\n OfficeContacts = 'https://our-firm.intranet.mckinsey.com/ourfirm/geographies',\n}\n\nexport const generateFeedbackUrl = (page: string) => {\n return `${Urls.Feedback}${page}`;\n};\n","import { EnvironmentData } from '@mckinsey-converge/environment';\n\nexport const environment: EnvironmentData = {\n production: true,\n hmr: false,\n heap_io_id: 91016686,\n};\n","import { SettingsData } from '@mckinsey-converge/data-common';\n\n;\n/**\n * GENERAL APPLICATION SETTINGS\n */\nconst general = {\n menu: {\n items: [],\n copyright: 'McKinsey & Company',\n position: 'left'\n }\n};\n\n/**\n * HOME PAGE SETTINGS\n */\nconst home = {\n background: 'assets/img/skyline.jpg',\n tiles: [\n {\n name: 'Book',\n route: '/book/spaces',\n icon: {\n type: 'icon',\n class: 'custom-book'\n }\n },\n {\n name: 'Maps',\n route: '/explore/space',\n icon: {\n type: 'icon',\n class: 'custom-spaces'\n }\n },\n {\n name: 'My Day',\n route: '/schedule',\n icon: {\n type: 'icon',\n class: 'custom-schedule'\n }\n }\n ]\n};\n/**\n * HELP/SUPPORT SETTINGS\n */\nconst help = {\n tiles: [],\n columns: 2\n};\n/**\n * BOOKING FLOW SETTINGS\n */\nconst booking = {\n booking_types: [\n { name: 'Internal', id: 'internal' },\n { name: 'External', id: 'external' },\n ],\n show_fields: [\n 'attendees',\n 'body',\n 'catering',\n 'dateTz',\n 'duration',\n 'organiser',\n 'title',\n 'type',\n 'all_day',\n 'needs_space',\n 'has_catering'\n ],\n html_body: false,\n multiple_spaces: true,\n desk_start: 9\n};\n/*===========================*\\\n|| SPACE LISTING SETTINGS ||\n\\*===========================*/\nconst space_display = {\n show_images: false\n};\n/*===========================*\\\n|| USER DIRECTORY SETTINGS ||\n\\*===========================*/\nconst directory = {\n show_avatars: true,\n min_search_length: 3\n};\n/*===========================*\\\n|| EXPLORE MAP SETTINGS ||\n\\*===========================*/\nconst explore = {\n colors: {\n 'space-available': '#43a047',\n 'space-requestable': '#ffb300',\n 'space-unavailable': '#e53935',\n 'space-in-use': '#d4483e',\n 'space-not-bookable': '#ccc',\n 'desk-available': '#43a047',\n 'desk-available-stroke': '#1b5e20',\n 'desk-unavailable': '#e53935',\n 'desk-unavailable-stroke': '#b71c1c',\n 'desk-reserved': '#ffb300',\n 'desk-reserved-stroke': '#ff6f00',\n 'desk-not-bookable': '#fff',\n 'desk-not-bookable-stroke': '#ccc',\n 'zone-low': '#43a047',\n 'zone-medium': '#ffb300',\n 'zone-high': '#e53935'\n },\n can_select_building: true,\n show_legend_group_names: false,\n show_timeline: true,\n legend: {\n General: [\n { key: 'space-available', name: 'Available' },\n { key: 'space-requestable', name: 'Available by request' },\n { key: 'space-unavailable', name: 'In use' },\n { key: 'space-not-bookable', name: 'Not Bookable' }\n ]\n }\n};\n\n/*=========================*\\\n|| DAY VIEW SETTINGS ||\n\\*=========================*/\nconst day_view = {\n dragdrop: false,\n};\n\n\n/**\n * ROOT APPLICATION SETTINGS\n */\nconst app = {\n title: 'McKinsey & Company',\n description: 'McKinsey & Company Staff UI written with Angular Framework',\n short_name: 'STAFF',\n logo_light: {\n type: 'img',\n src: 'assets/img/logo.svg',\n background: ''\n },\n logo_dark: {\n type: 'img',\n src: 'assets/img/logo-inverse.svg',\n background: ''\n },\n heap_io: {\n app_id: 3540602199,\n force_ssl: true,\n secure_cookie: true,\n disable_text_capture: true,\n cookie_path: '/staff/'\n },\n general,\n home,\n help,\n booking,\n space_display,\n directory,\n explore,\n day_view\n}\n\n\n/**\n * ROOT SETTIGNS\n */\nexport const DEFAULT_SETTINGS: SettingsData = {\n debug: true,\n composer: {\n domain: '',\n route: '/staff',\n protocol: '',\n port: '',\n use_domain: false,\n local_login: false\n },\n app,\n mock: false,\n frontend: 'staff',\n};\n","import { ApplicationRef, NgModuleRef } from '@angular/core';\nimport { createNewHosts } from '@angularclass/hmr';\n\nexport const hmrBootstrap = (\n module: any,\n bootstrap: () => Promise>,\n) => {\n let ngModule: NgModuleRef;\n module.hot.accept();\n bootstrap().then(mod => (ngModule = mod));\n module.hot.dispose(() => {\n const appRef: ApplicationRef = ngModule.injector.get(ApplicationRef);\n const elements = appRef.components.map(c => c.location.nativeElement);\n const makeVisible = createNewHosts(elements);\n ngModule.destroy();\n makeVisible();\n });\n};\n","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\nimport { environment } from './environments/environment';\nimport { hmrBootstrap } from './hmr';\nimport { AppModule } from './app/app.module';\n\nif (environment.production) {\n enableProdMode();\n}\n\nconst bootstrap = () => platformBrowserDynamic().bootstrapModule(AppModule);\n\n// comes from https://medium.com/wizardnet972/hot-module-replacement-with-angular-cli-5fc7a3ae4a9c\nif (environment.hmr) {\n if ((module as any).hot) {\n hmrBootstrap(module, bootstrap);\n } else {\n console.error('HMR is not enabled for webpack-dev-server!');\n console.log('Are you using the --hmr flag for ng serve?');\n }\n} else {\n bootstrap().catch(err => console.log(err));\n}\n"],"sourceRoot":"webpack:///"} \ No newline at end of file diff --git a/staff/main-es5.js b/staff/main-es5.js index e194b3160..dc84781f7 100644 --- a/staff/main-es5.js +++ b/staff/main-es5.js @@ -4208,6 +4208,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons /*! rxjs/operators */ "../../node_modules/rxjs/_esm2015/operators/index.js"); + var custom_snackbar_component_service_1 = __webpack_require__( + /*! ../../../ui/src/lib/custom-snackbar-component/custom-snackbar-component.service */ + "../../libs/ui/src/lib/custom-snackbar-component/custom-snackbar-component.service.ts"); + var i0 = __webpack_require__( /*! @angular/core */ "../../node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); @@ -4244,12 +4248,16 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons /*! ../../../environment/src/lib/environment.service */ "../../libs/environment/src/lib/environment.service.ts"); + var i9 = __webpack_require__( + /*! ../../../ui/src/lib/custom-snackbar-component/custom-snackbar-component.service */ + "../../libs/ui/src/lib/custom-snackbar-component/custom-snackbar-component.service.ts"); + var ApplicationService = /*#__PURE__*/function (_base_1$BaseClass) { _inherits(ApplicationService, _base_1$BaseClass); var _super5 = _createSuper(ApplicationService); - function ApplicationService(store, analytics, _app_ref, _zone, _title, _settings, _hotkeys, _composer, _snackbar, _environment) { + function ApplicationService(store, analytics, _app_ref, _zone, _title, _settings, _hotkeys, _composer, _snackbar, _environment, snack) { var _this8; _classCallCheck(this, ApplicationService); @@ -4265,6 +4273,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons _this8._composer = _composer; _this8._snackbar = _snackbar; _this8._environment = _environment; + _this8.snack = snack; /** Map of state variables for Service */ _this8._subjects = {}; @@ -4323,8 +4332,6 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * @param icon Icon to render to the left of the notification message */ value: function notify(type, message) { - var _this9 = this; - var action = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'OK'; var on_action = arguments.length > 3 ? arguments[3] : undefined; var icon = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : { @@ -4332,27 +4339,29 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons "class": 'material-icons', content: 'info' }; - - var snackbar_ref = this._snackbar.open(message, action, { - panelClass: [type], - duration: 5000 - }); - - this.subscription('snackbar_close', snackbar_ref.afterDismissed().subscribe(function () { - _this9.unsub('snackbar_close'); - - _this9.unsub('notify'); - })); - - if (action) { - on_action = on_action || function () { - return snackbar_ref.dismiss(); - }; - - this.subscription('notify', snackbar_ref.onAction().subscribe(function () { - return on_action(); - })); - } + this.openSnack(message, type); // const snackbar_ref = this._snackbar.open(message, action, { + // panelClass: [type], + // duration: 5000 + // }); + // this.subscription( + // 'snackbar_close', + // snackbar_ref.afterDismissed().subscribe(() => { + // this.unsub('snackbar_close'); + // this.unsub('notify'); + // }) + // ); + // if (action) { + // on_action = on_action || (() => snackbar_ref.dismiss()); + // this.subscription( + // 'notify', + // snackbar_ref.onAction().subscribe(() => on_action()) + // ); + // } + } + }, { + key: "openSnack", + value: function openSnack(message, type) { + this.snack.openSnackBar(message, type, 5000); } /** * Create success notification popup @@ -4479,13 +4488,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "waitForSettings", value: function waitForSettings() { - var _this10 = this; + var _this9 = this; // Wait until the settings have loaded before initialising this._settings.initialised.pipe(operators_1.first(function (_) { return _; })).subscribe(function () { - return _this10.init(); + return _this9.init(); }); } /** @@ -4495,20 +4504,20 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "init", value: function init() { - var _this11 = this; + var _this10 = this; this.setupComposer(); this.subscription('currentUser', this.store.select(user_actions_1.selectCurrentUser).pipe(operators_2.filter(function (user) { return user !== undefined; })).pipe(operators_1.take(1)).subscribe(function (user) { // Once we know we have the user loaded. - _this11.setupAnalytics(user === null || user === void 0 ? void 0 : user.fmno); + _this10.setupAnalytics(user === null || user === void 0 ? void 0 : user.fmno); })); this._composer.initialised.pipe(operators_1.first(function (_) { return _; })).subscribe(function () { - _this11._initialised.next(true); + _this10._initialised.next(true); }); // Add service to window if in debug mode @@ -4647,7 +4656,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons exports.ApplicationService = ApplicationService; ApplicationService.ɵfac = function ApplicationService_Factory(t) { - return new (t || ApplicationService)(i0.ɵɵinject(i1.Store), i0.ɵɵinject(i2.HeapIoService), i0.ɵɵinject(i0.ApplicationRef), i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i3.Title), i0.ɵɵinject(i4.SettingsService), i0.ɵɵinject(i5.HotkeysService), i0.ɵɵinject(i6.ComposerService), i0.ɵɵinject(i7.MatSnackBar), i0.ɵɵinject(i8.EnvironmentService)); + return new (t || ApplicationService)(i0.ɵɵinject(i1.Store), i0.ɵɵinject(i2.HeapIoService), i0.ɵɵinject(i0.ApplicationRef), i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i3.Title), i0.ɵɵinject(i4.SettingsService), i0.ɵɵinject(i5.HotkeysService), i0.ɵɵinject(i6.ComposerService), i0.ɵɵinject(i7.MatSnackBar), i0.ɵɵinject(i8.EnvironmentService), i0.ɵɵinject(i9.SnackBarService)); }; ApplicationService.ɵprov = i0.ɵɵdefineInjectable({ @@ -4684,6 +4693,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons type: i7.MatSnackBar }, { type: i8.EnvironmentService + }, { + type: i9.SnackBarService }]; }, null); })(); @@ -4725,24 +4736,24 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super6 = _createSuper(BaseDataClass); function BaseDataClass(raw_data) { - var _this12; + var _this11; _classCallCheck(this, BaseDataClass); - _this12 = _super6.call(this); + _this11 = _super6.call(this); /** Subject for emitting events on the object */ - _this12.event_subject = new rxjs_1.Subject(); + _this11.event_subject = new rxjs_1.Subject(); /** Observable for events on this object */ - _this12.events = _this12.event_subject.asObservable(); + _this11.events = _this11.event_subject.asObservable(); /** Map of local property names to server ones */ - _this12._server_names = {}; - _this12.id = raw_data.id || raw_data.zone_id || raw_data.email || ''; - _this12.name = raw_data.name || ''; - _this12.email = "".concat(raw_data.email || '').toLowerCase(); - return _this12; + _this11._server_names = {}; + _this11.id = raw_data.id || raw_data.zone_id || raw_data.email || ''; + _this11.name = raw_data.name || ''; + _this11.email = "".concat(raw_data.email || '').toLowerCase(); + return _this11; } /** Service for managing model on the server */ @@ -4754,14 +4765,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * Save pending changes to server */ value: function save() { - var _this13 = this; + var _this12 = this; if (this._service) { var form = this.toJSON(); return new Promise(function (resolve, reject) { - var promise = _this13.id ? _this13._service.update(_this13.id, form) : _this13._service.add(form); + var promise = _this12.id ? _this12._service.update(_this12.id, form) : _this12._service.add(form); promise.then(function (d) { - _this13.event_subject.next({ + _this12.event_subject.next({ type: 'item_saved', metadata: d }); @@ -4916,43 +4927,43 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super7 = _createSuper(BaseAPIService); function BaseAPIService(_composer, settingsService) { - var _this14; + var _this13; _classCallCheck(this, BaseAPIService); - _this14 = _super7.call(this); - _this14._composer = _composer; - _this14.settingsService = settingsService; + _this13 = _super7.call(this); + _this13._composer = _composer; + _this13.settingsService = settingsService; /** Map of state variables for Service */ - _this14._subjects = {}; + _this13._subjects = {}; /** Map of observables for state variables */ - _this14._observers = {}; + _this13._observers = {}; /** Map of poll subscribers for API endpoints */ - _this14._subscribers = {}; + _this13._subscribers = {}; /** Map of promises for Service */ - _this14._promises = {}; + _this13._promises = {}; /** Comparison function for service items */ - _this14._compare = function (a, b) { + _this13._compare = function (a, b) { return a === b || a.id === b.id; }; /** Default filter function for list method */ - _this14._list_filter = function (a) { + _this13._list_filter = function (a) { return !!a; }; - _this14._name = 'Base'; - _this14._api_route = 'base'; + _this13._name = 'Base'; + _this13._api_route = 'base'; - _this14.set('list', []); + _this13.set('list', []); - return _this14; + return _this13; } /** Http Client */ @@ -4981,13 +4992,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "init", value: function init() { - var _this15 = this; + var _this14 = this; this.load().then(function (_) { - return _this15._initialised.next(true); + return _this14._initialised.next(true); }, function (err) { - return _this15.timeout('init', function () { - return _this15.init(); + return _this14.timeout('init', function () { + return _this14.init(); }, 1000); }); } @@ -5085,7 +5096,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "query", value: function query() { - var _this16 = this; + var _this15 = this; var query_params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var engine = false; @@ -5108,21 +5119,21 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons // query = query + '&check_access=true'; // } this._promises[key] = new Promise(function (resolve, reject) { - var url = "".concat(_this16.route(engine)).concat(query ? '?' + query : ''); + var url = "".concat(_this15.route(engine)).concat(query ? '?' + query : ''); var result = []; - _this16.http.get(url).subscribe(function (d) { + _this15.http.get(url).subscribe(function (d) { result = d && d instanceof Array ? d.map(function (i) { - return _this16.process(i); + return _this15.process(i); }) : d && !(d instanceof Array) && d.results ? d.results : d && !(d instanceof Array) && !d.results ? [d] : []; }, function (e) { reject(e); - _this16._promises[key] = null; + _this15._promises[key] = null; }, function () { resolve(result); - _this16.timeout(key, function () { - return _this16._promises[key] = null; + _this15.timeout(key, function () { + return _this15._promises[key] = null; }, cache); }); }); @@ -5139,7 +5150,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "queryObsr", value: function queryObsr() { - var _this17 = this; + var _this16 = this; var query_params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var engine = false; @@ -5155,7 +5166,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var key = "query|".concat(query); var url = "".concat(this.route(engine)).concat(query ? '?' + query : ''); return this.http.get(url).pipe(operators_1.map(function (d) { - return _this17.processApiResult(d); + return _this16.processApiResult(d); }), operators_1.catchError(function (error, result) { console.log(error); return rxjs_1.of(result); @@ -5171,10 +5182,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "processApiResult", value: function processApiResult(d) { - var _this18 = this; + var _this17 = this; var result = d && d instanceof Array ? d.map(function (i) { - return _this18.process(i); + return _this17.process(i); }) : d && !(d instanceof Array) && d.results ? d.results : d && !(d instanceof Array) && !d.results ? [d] : []; return result; } @@ -5211,7 +5222,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "show", value: function show(id) { - var _this19 = this; + var _this18 = this; var query_params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var engine = false; @@ -5228,19 +5239,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (!this._promises[key]) { this._promises[key] = new Promise(function (resolve, reject) { - var url = "".concat(_this19.route(engine), "/").concat(id).concat(query ? '?' + query : ''); + var url = "".concat(_this18.route(engine), "/").concat(id).concat(query ? '?' + query : ''); var result = null; - _this19.http.get(url).subscribe(function (d) { - return result = _this19.process(d); + _this18.http.get(url).subscribe(function (d) { + return result = _this18.process(d); }, function (e) { reject(e); - _this19._promises.new_item = null; + _this18._promises.new_item = null; }, function () { resolve(result); - _this19.timeout(key, function () { - return _this19._promises[key] = null; + _this18.timeout(key, function () { + return _this18._promises[key] = null; }, 1000); }); }); @@ -5257,7 +5268,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "add", value: function add(form_data) { - var _this20 = this; + var _this19 = this; var query_params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; @@ -5265,25 +5276,25 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (!this._promises.new_item) { this._promises.new_item = new Promise(function (resolve, reject) { var query = api_utilities_1.toQueryString(query_params); - var url = "".concat(_this20.route(query_params.engine)).concat(query ? '?' + query : ''); + var url = "".concat(_this19.route(query_params.engine)).concat(query ? '?' + query : ''); var result = null; - _this20.http.post(url, _this20.injectConcierge(form_data)).subscribe(function (d) { - return result = _this20.process(d); + _this19.http.post(url, _this19.injectConcierge(form_data)).subscribe(function (d) { + return result = _this19.process(d); }, function (e) { reject(e); - _this20.analyticsEvent("create-".concat(_this20._name.toLowerCase(), "-failed")); + _this19.analyticsEvent("create-".concat(_this19._name.toLowerCase(), "-failed")); - _this20._promises.new_item = null; + _this19._promises.new_item = null; }, function () { resolve(result); - _this20.set('list', _this20.updateList(_this20.get('list'), [result])); + _this19.set('list', _this19.updateList(_this19.get('list'), [result])); - _this20.analyticsEvent("create-".concat(_this20._name.toLowerCase(), "-success")); + _this19.analyticsEvent("create-".concat(_this19._name.toLowerCase(), "-success")); - _this20._promises.new_item = null; + _this19._promises.new_item = null; }); }); } @@ -5293,7 +5304,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "task", value: function task(id, task_name) { - var _this21 = this; + var _this20 = this; var form_data = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var method = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'post'; @@ -5307,24 +5318,24 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons id: id, _task: task_name }); - var url = "".concat(_this21.route(false), "/").concat(id, "/").concat(task_name); + var url = "".concat(_this20.route(false), "/").concat(id, "/").concat(task_name); var result; - var request = method === 'post' ? _this21.http.post(url, post_data) : _this21.http.get("".concat(url).concat(query ? '?' + query : '')); + var request = method === 'post' ? _this20.http.post(url, post_data) : _this20.http.get("".concat(url).concat(query ? '?' + query : '')); request.subscribe(function (d) { return result = d; }, function (e) { reject(e); - _this21.analyticsEvent("".concat(_this21._name.toLowerCase(), "-task-").concat(task_name, "-failed"), id); + _this20.analyticsEvent("".concat(_this20._name.toLowerCase(), "-task-").concat(task_name, "-failed"), id); - delete _this21._promises[key]; + delete _this20._promises[key]; }, function () { resolve(result); - _this21.analyticsEvent("".concat(_this21._name.toLowerCase(), "-task-").concat(task_name, "-success"), id); + _this20.analyticsEvent("".concat(_this20._name.toLowerCase(), "-task-").concat(task_name, "-success"), id); - _this21.timeout(key, function () { - return delete _this21._promises[key]; + _this20.timeout(key, function () { + return delete _this20._promises[key]; }, 1000); }); }); @@ -5368,7 +5379,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "update", value: function update(id, form_data) { - var _this22 = this; + var _this21 = this; var query_params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var key = "update|".concat(id); @@ -5376,28 +5387,28 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (!this._promises[key]) { this._promises[key] = new Promise(function (resolve, reject) { - var query = api_utilities_1.toQueryString(_this22.injectConcierge(query_params)); - var url = "".concat(_this22.route(query_params.engine), "/").concat(id).concat(query ? '?' + query : ''); + var query = api_utilities_1.toQueryString(_this21.injectConcierge(query_params)); + var url = "".concat(_this21.route(query_params.engine), "/").concat(id).concat(query ? '?' + query : ''); var result = null; - _this22.http.put(url, _this22.injectConcierge(form_data)).subscribe(function (d) { - return result = _this22.process(d); + _this21.http.put(url, _this21.injectConcierge(form_data)).subscribe(function (d) { + return result = _this21.process(d); }, function (e) { reject(e); - _this22.analyticsEvent("update-".concat(_this22._name.toLowerCase(), "-failed"), id); + _this21.analyticsEvent("update-".concat(_this21._name.toLowerCase(), "-failed"), id); - _this22._promises[key] = null; + _this21._promises[key] = null; }, function () { resolve(result); - _this22.set('list', _this22.updateList(_this22.removeItem(_this22.get('list'), { + _this21.set('list', _this21.updateList(_this21.removeItem(_this21.get('list'), { id: id }), [result])); - _this22.analyticsEvent("update-".concat(_this22._name.toLowerCase(), "-success"), id); + _this21.analyticsEvent("update-".concat(_this21._name.toLowerCase(), "-success"), id); - _this22._promises[key] = null; + _this21._promises[key] = null; }); }); } @@ -5415,7 +5426,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "updateObsr", value: function updateObsr(id, form_data) { - var _this23 = this; + var _this22 = this; var should_inject_concierge = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var query_params = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; @@ -5423,11 +5434,11 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var url = "".concat(this.route(query_params.engine), "/").concat(id).concat(query ? '?' + query : ''); var body = should_inject_concierge ? this.injectConcierge(form_data) : form_data; return this.http.put(url, body).pipe(operators_1.map(function (d) { - return _this23.processApiResult(d); + return _this22.processApiResult(d); }), operators_1.catchError(function (error, result) { console.log(error); - _this23.analyticsEvent("update-".concat(_this23._name.toLowerCase(), "-failed"), id); + _this22.analyticsEvent("update-".concat(_this22._name.toLowerCase(), "-failed"), id); return rxjs_1.of(error); })); @@ -5467,7 +5478,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "delete", value: function _delete(id) { - var _this24 = this; + var _this23 = this; var q = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var key = "delete|".concat(id); @@ -5476,19 +5487,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (!this._promises[key]) { this._promises[key] = new Promise(function (resolve, reject) { var query = api_utilities_1.toQueryString(q); - var url = "".concat(_this24.route(), "/").concat(id).concat(query ? '?' + query : ''); + var url = "".concat(_this23.route(), "/").concat(id).concat(query ? '?' + query : ''); - _this24.http["delete"](url).subscribe(function (_) { + _this23.http["delete"](url).subscribe(function (_) { return null; }, function (e) { reject(e); - _this24._promises[key] = null; + _this23._promises[key] = null; }, function () { - _this24.set('list', _this24.removeItem(_this24.get('list'), { + _this23.set('list', _this23.removeItem(_this23.get('list'), { id: id })); - _this24._promises[key] = null; + _this23._promises[key] = null; resolve(); }); }); @@ -6106,6 +6117,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons capacity_max: exports.roomMaxCapacityToValue((_b = data === null || data === void 0 ? void 0 : data.roomSize) === null || _b === void 0 ? void 0 : _b.value), is_recurrent: data === null || data === void 0 ? void 0 : data.is_recurrent, is_multiroom: data === null || data === void 0 ? void 0 : data.is_multiroom, + merged: data === null || data === void 0 ? void 0 : data.merged, recurrence_period: data === null || data === void 0 ? void 0 : data.recurrence_period, recurrence_interval: data === null || data === void 0 ? void 0 : data.recurrence_interval, recurrence_endTz: data === null || data === void 0 ? void 0 : data.recurrence_endTz, @@ -6960,122 +6972,122 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super8 = _createSuper(BookingStateService); function BookingStateService(_org, _spaces, ngZone) { - var _this25; + var _this24; _classCallCheck(this, BookingStateService); - _this25 = _super8.call(this); - _this25._org = _org; - _this25._spaces = _spaces; - _this25.ngZone = ngZone; + _this24 = _super8.call(this); + _this24._org = _org; + _this24._spaces = _spaces; + _this24.ngZone = ngZone; /** List of bookings */ - _this25._poll = new rxjs_1.BehaviorSubject(false); + _this24._poll = new rxjs_1.BehaviorSubject(false); /** List of bookings */ - _this25._long_poll = new rxjs_1.BehaviorSubject(''); - _this25._long_poll_week = new rxjs_1.BehaviorSubject(''); + _this24._long_poll = new rxjs_1.BehaviorSubject(''); + _this24._long_poll_week = new rxjs_1.BehaviorSubject(''); /** List of bookings */ - _this25._bookings = new rxjs_1.BehaviorSubject([]); + _this24._bookings = new rxjs_1.BehaviorSubject([]); /** List of meeting count per date */ - _this25._noOfMeetings = new rxjs_1.BehaviorSubject({}); + _this24._noOfMeetings = new rxjs_1.BehaviorSubject({}); /** Filter details for bookings */ - _this25._filters = new rxjs_1.BehaviorSubject({}); + _this24._filters = new rxjs_1.BehaviorSubject({}); /** Currently active date */ - _this25._dateTz = new rxjs_1.BehaviorSubject(date_tz_1.DateNow(new Date())); + _this24._dateTz = new rxjs_1.BehaviorSubject(date_tz_1.DateNow(new Date())); /** Currently displayed zone */ - _this25._zone = new rxjs_1.BehaviorSubject(' '); + _this24._zone = new rxjs_1.BehaviorSubject(' '); /** Whether booking data is being loaded */ - _this25._loading = new rxjs_1.BehaviorSubject(false); + _this24._loading = new rxjs_1.BehaviorSubject(false); /** Observable for filter and booking list changes */ - _this25._state = rxjs_1.combineLatest(_this25._bookings, _this25._filters, _this25._dateTz, _this25._zone); + _this24._state = rxjs_1.combineLatest(_this24._bookings, _this24._filters, _this24._dateTz, _this24._zone); /** Observable for list of bookings */ - _this25.bookings = _this25._bookings.asObservable(); + _this24.bookings = _this24._bookings.asObservable(); /** Observable for active date */ - _this25.dateTz = _this25._dateTz.asObservable(); + _this24.dateTz = _this24._dateTz.asObservable(); /** Observable for active zone */ // R-- zone was this._date.asObservable(); this looks like a mistake but it exists from the beginning of time - _this25.zone = _this25._dateTz.asObservable(); + _this24.zone = _this24._dateTz.asObservable(); /** Observable for loading state of bookings */ - _this25.loading = _this25._loading.asObservable(); + _this24.loading = _this24._loading.asObservable(); /** Obsevable for filtered list of bookings */ - _this25.filtered = _this25._state.pipe(operators_1.map(function (state) { - var bdTz = _this25.timezone ? new date_tz_1.DateTZ({ - date: _this25.booking_date.ms, + _this24.filtered = _this24._state.pipe(operators_1.map(function (state) { + var bdTz = _this24.timezone ? new date_tz_1.DateTZ({ + date: _this24.booking_date.ms, is_local_tz: false, - building_tz: _this25.timezone - }) : _this25.booking_date; + building_tz: _this24.timezone + }) : _this24.booking_date; var startTz = bdTz.startOfValue('day'); var endTz = startTz.addValue({}).endOfValue('day'); - return _this25.filterBookings(startTz, endTz); + return _this24.filterBookings(startTz, endTz); }), operators_1.shareReplay(1)); /** Obsevable for filtered list of bookings of the active week */ - _this25.filtered_week = _this25._state.pipe(operators_1.map(function () { + _this24.filtered_week = _this24._state.pipe(operators_1.map(function () { // Tested to be valid in building time now. - var bd = _this25.timezone ? new date_tz_1.DateTZ({ - date: _this25.booking_date.ms, + var bd = _this24.timezone ? new date_tz_1.DateTZ({ + date: _this24.booking_date.ms, is_local_tz: false, - building_tz: _this25.timezone - }) : _this25.booking_date; + building_tz: _this24.timezone + }) : _this24.booking_date; var start = bd.startOfValue('week').startOfValue('day'); - var end = _this25.getEndOfWeek(bd); + var end = _this24.getEndOfWeek(bd); - return _this25.filterBookings(start, end); + return _this24.filterBookings(start, end); })); /** Obsevable for filtered list of bookings for active month */ - _this25.filtered_month = _this25._state.pipe(operators_1.map(function () { - var start = _this25.booking_date.startOfValue('month'); + _this24.filtered_month = _this24._state.pipe(operators_1.map(function () { + var start = _this24.booking_date.startOfValue('month'); - var end = _this25.booking_date.endOfValue('month'); + var end = _this24.booking_date.endOfValue('month'); - return _this25.filterBookings(start, end); + return _this24.filterBookings(start, end); })); - _this25._org.initialised.pipe(operators_1.first(function (_) { + _this24._org.initialised.pipe(operators_1.first(function (_) { return _; })).subscribe(function () { var _a; // Just to get the timezone correct - _this25._dateTz.next(new date_tz_1.DateTZ({ - date: _this25._dateTz.value.ms, + _this24._dateTz.next(new date_tz_1.DateTZ({ + date: _this24._dateTz.value.ms, is_local_tz: false, - building_tz: (_a = _this25._org.building) === null || _a === void 0 ? void 0 : _a.timezone + building_tz: (_a = _this24._org.building) === null || _a === void 0 ? void 0 : _a.timezone })); }); /** Generate observable for updating bookings */ - var search = rxjs_1.combineLatest(_this25._poll, _this25._zone, _this25._dateTz).pipe(operators_1.filter(function (i) { + var search = rxjs_1.combineLatest(_this24._poll, _this24._zone, _this24._dateTz).pipe(operators_1.filter(function (i) { return !!i[0]; }), operators_1.debounceTime(500), operators_1.switchMap(function () { - var fzone = _this25._zone.getValue(); + var fzone = _this24._zone.getValue(); if (!fzone) { return rxjs_1.of([]); } - _this25._loading.next(true); + _this24._loading.next(true); - var start = _this25.booking_date.startOfValue('day'); + var start = _this24.booking_date.startOfValue('day'); var end = start.endOfValue('day'); - return _this25._spaces.queryBooking({ + return _this24._spaces.queryBooking({ zone_ids: fzone, available_from: start.seconds, available_to: end.seconds @@ -7083,7 +7095,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }), operators_1.catchError(function () { return rxjs_1.of([]); })); - var search_long_week = rxjs_1.combineLatest(_this25._long_poll_week, _this25._zone, _this25._dateTz).pipe(operators_1.filter(function (i) { + var search_long_week = rxjs_1.combineLatest(_this24._long_poll_week, _this24._zone, _this24._dateTz).pipe(operators_1.filter(function (i) { return !!i[0]; }), operators_1.debounceTime(500), operators_1.switchMap(function (props) { var type = props[0]; @@ -7094,9 +7106,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons return rxjs_1.of([]); } - _this25._loading.next(true); + _this24._loading.next(true); - return _this25.querySpace(type, fzone, dateTz, false); + return _this24.querySpace(type, fzone, dateTz, false); }), operators_1.catchError(function (e) { return rxjs_1.of([]); })); //TO DO: make sure both spaces have same booking @@ -7104,16 +7116,16 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons /** Subscribe to update observable */ search.subscribe(function (space_list) { - _this25.processBookings(space_list); + _this24.processBookings(space_list); - _this25._loading.next(false); + _this24._loading.next(false); }); search_long_week.subscribe(function (space_list) { - _this25.processBookings(space_list, _this25._long_poll_week.getValue()); + _this24.processBookings(space_list, _this24._long_poll_week.getValue()); - _this25._loading.next(false); + _this24._loading.next(false); }); - return _this25; + return _this24; } _createClass(BookingStateService, [{ @@ -7123,23 +7135,23 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * Function to build */ value: function buildSpaceLongQuery() { - var _this26 = this; + var _this25 = this; var dailyCount = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; return rxjs_1.combineLatest(this._long_poll, this._zone, this._dateTz).pipe(operators_1.filter(function (i) { return !!i[0]; }), operators_1.debounceTime(500), operators_1.switchMap(function (props) { var type = props[0]; - var fzone = dailyCount ? _this26._org.building.id : props[1]; + var fzone = dailyCount ? _this25._org.building.id : props[1]; var dateTz = props[2]; if (!fzone) { return rxjs_1.of([]); } - _this26._loading.next(true); + _this25._loading.next(true); - return _this26.querySpace(type, fzone, dateTz, dailyCount); + return _this25.querySpace(type, fzone, dateTz, dailyCount); }), operators_1.catchError(function (e) { return rxjs_1.of([]); })); @@ -7192,14 +7204,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "getDailyMeetingCount", value: function getDailyMeetingCount() { - var _this27 = this; + var _this26 = this; this._long_poll.next('month'); this.buildSpaceLongQuery(true).subscribe(function (counts) { - _this27._noOfMeetings.next(counts); + _this26._noOfMeetings.next(counts); - _this27._loading.next(false); + _this26._loading.next(false); }); } /** @@ -7249,15 +7261,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "startPolling", value: function startPolling() { - var _this28 = this; + var _this27 = this; var delay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 30 * 1000; this._poll.next(true); this.ngZone.runOutsideAngular(function () { - _this28.interval('polling', function () { - return _this28._poll.next(true); + _this27.interval('polling', function () { + return _this27._poll.next(true); }, delay); }); } @@ -7269,15 +7281,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "startPollingWeek", value: function startPollingWeek() { - var _this29 = this; + var _this28 = this; var delay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 4 * 30 * 1000; this._long_poll_week.next('week'); this.ngZone.runOutsideAngular(function () { - _this29.interval('polling_long', function () { - return _this29._long_poll_week.next('week'); + _this28.interval('polling_long', function () { + return _this28._long_poll_week.next('week'); }, delay); }); } @@ -7289,15 +7301,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "startPollingEveryFiveMin", value: function startPollingEveryFiveMin() { - var _this30 = this; + var _this29 = this; var delay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 60 * 1000; this._poll.next(true); this.ngZone.runOutsideAngular(function () { - _this30.interval('polling', function () { - return _this30._poll.next(true); + _this29.interval('polling', function () { + return _this29._poll.next(true); }, delay); }); } @@ -7309,15 +7321,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "startPollingMonth", value: function startPollingMonth() { - var _this31 = this; + var _this30 = this; var delay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 5 * 60 * 1000; this._long_poll.next('month'); this.ngZone.runOutsideAngular(function () { - _this31.interval('polling_long', function () { - return _this31._long_poll.next('month'); + _this30.interval('polling_long', function () { + return _this30._long_poll.next('month'); }, delay); }); } @@ -7440,20 +7452,20 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "processBookings", value: function processBookings(space_list) { - var _this32 = this; + var _this31 = this; var period = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'day'; var start = function start() { switch (period) { case 'month': - return _this32.booking_date.startOfValue('month'); + return _this31.booking_date.startOfValue('month'); case 'week': - return _this32.booking_date.startOfValue('week'); + return _this31.booking_date.startOfValue('week'); default: - return _this32.booking_date.startOfValue('day'); + return _this31.booking_date.startOfValue('day'); } }; @@ -7669,7 +7681,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super9 = _createSuper(Booking); function Booking() { - var _this33; + var _this32; var raw_data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; @@ -7677,13 +7689,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _a, _b, _c, _d, _e; - _this33 = _super9.call(this, raw_data); + _this32 = _super9.call(this, raw_data); /** Whether the time or duration has changed */ - _this33.time_changed = false; // Needed to check if the current app is Concierge or Staff + _this32.time_changed = false; // Needed to check if the current app is Concierge or Staff var settingsService = service_manager_class_1.ServiceManager.serviceFor(settings_service_1.SettingsService); - _this33.is_concierge = settingsService.concierge; + _this32.is_concierge = settingsService.concierge; /** * Setup Defaults when raw_data values are not provided */ @@ -7701,47 +7713,52 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * Process the simple raw_data with defaults mixed in */ - _this33.title = raw_data.title || defaultTitle; - _this33.timezone = raw_data.timezone || defaultLocalTimezone; // Used by components to get the building details + _this32.title = raw_data.title || defaultTitle; + _this32.timezone = raw_data.timezone || defaultLocalTimezone; // Used by components to get the building details - _this33.building_zone = raw_data.building_zone || defaultBuildingZone; - _this33.body = raw_data.body || ''; // Provided booking type + _this32.building_zone = raw_data.building_zone || defaultBuildingZone; + _this32.body = raw_data.body || ''; // Provided booking type - _this33.booking_type = raw_data.booking_type || defaultBookingType; // Attendees provided in API booking data + _this32.booking_type = raw_data.booking_type || defaultBookingType; // Attendees provided in API booking data - _this33.attendees = (raw_data.attendees || []).map(function (i) { + _this32.attendees = (raw_data.attendees || []).map(function (i) { return new users_1.User(i); }); // Provided organiser, active user, or empty user? - _this33.organiser = raw_data.organiser ? new users_1.User(raw_data.organiser) : defaultOrgainiser; // Creator is provided or defaults to the organizer - - _this33.creator = (raw_data.booked_by ? new users_1.User(raw_data.booked_by) : defaultOrgainiser) || _this33.organiser; // Setup and breakdown times can conflict but not the true event start and end times - - _this33.setup = raw_data.setup || {}; - _this33.breakdown = raw_data.breakdown || {}; - _this33.room_setup = raw_data.room_setup; - _this33.room_breakdown = raw_data.room_breakdown; // Notes are assigned by room but we only support a single room - - _this33.notes = raw_data.notes || []; - _this33.equipment_codes = raw_data.equipment_codes || {}; - _this33.equipment_code = raw_data.equipment_code || ''; - _this33.expected_attendees = raw_data.expected_attendees || {}; - _this33.headcount = raw_data.headcount; - _this33.check_ins = raw_data.check_ins || {}; - _this33.notify_users = ((_c = raw_data.notify_users) === null || _c === void 0 ? void 0 : _c.length) ? raw_data.notify_users : [(_d = _this33.organiser) === null || _d === void 0 ? void 0 : _d.name]; - _this33.company = raw_data.company || []; // retain booked by if there : helps to get correct creator above - - _this33.booked_by = raw_data.booked_by; - _this33.booker = raw_data.booker; - _this33.booker_concierge = raw_data.booker_concierge; - _this33.level_zone = raw_data.level_zone; - _this33.opt_out = raw_data.opt_out; + _this32.organiser = raw_data.organiser ? new users_1.User(raw_data.organiser) : defaultOrgainiser; // Creator is provided or defaults to the organizer + + _this32.creator = (raw_data.booked_by ? new users_1.User(raw_data.booked_by) : defaultOrgainiser) || _this32.organiser; // Setup and breakdown times can conflict but not the true event start and end times + + _this32.setup = raw_data.setup || {}; + _this32.breakdown = raw_data.breakdown || {}; + _this32.room_setup = raw_data.room_setup; + _this32.room_breakdown = raw_data.room_breakdown; // Notes are assigned by room but we only support a single room + + _this32.notes = raw_data.notes || []; + _this32.equipment_codes = raw_data.equipment_codes || {}; + _this32.equipment_code = raw_data.equipment_code || ''; + _this32.expected_attendees = raw_data.expected_attendees || {}; + _this32.headcount = raw_data.headcount; + _this32.check_ins = raw_data.check_ins || {}; + _this32.notify_users = ((_c = raw_data.notify_users) === null || _c === void 0 ? void 0 : _c.length) ? raw_data.notify_users : [(_d = _this32.organiser) === null || _d === void 0 ? void 0 : _d.name]; + _this32.company = raw_data.company || []; // retain booked by if there : helps to get correct creator above + + _this32.booked_by = raw_data.booked_by; + _this32.booker = raw_data.booker; + _this32.booker_concierge = raw_data.booker_concierge; + _this32.level_zone = raw_data.level_zone; + _this32.opt_out = raw_data.opt_out; + /** + * + */ + + _this32.merged = (raw_data === null || raw_data === void 0 ? void 0 : raw_data.merged) || null; /** * Multiroom fields */ - _this33.is_multiroom = raw_data.is_multiroom || null; - _this33.multiroom_master_id = raw_data.multiroom_master_id || null; + _this32.is_multiroom = raw_data.is_multiroom || null; + _this32.multiroom_master_id = raw_data.multiroom_master_id || null; /** * Setup Defaults when raw_data values are not provided * @@ -7755,42 +7772,42 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (raw_data && raw_data.room) { if (Array.isArray(raw_data.room) && raw_data.room.length) { - _this33.room = raw_data.room.map(function (element) { + _this32.room = raw_data.room.map(function (element) { return new space_class_1.Space(element); })[0]; } else if (Array.isArray(raw_data.room) && raw_data.room.length === 0) { - _this33.room = [new space_class_1.Space()][0]; + _this32.room = [new space_class_1.Space()][0]; } else { - _this33.room = [new space_class_1.Space(raw_data.room)][0]; + _this32.room = [new space_class_1.Space(raw_data.room)][0]; } } else { - _this33.room = [new space_class_1.Space()][0]; + _this32.room = [new space_class_1.Space()][0]; } var room_id = raw_data.room_id || raw_data.room_ids; // Not sure why we have room_id and room_ids - if (!((_e = _this33.room) === null || _e === void 0 ? void 0 : _e.id) && (room_id === null || room_id === void 0 ? void 0 : room_id.length)) { - _this33.room = spaces_1.findSpace(room_id[0]) || _this33.room; + if (!((_e = _this32.room) === null || _e === void 0 ? void 0 : _e.id) && (room_id === null || room_id === void 0 ? void 0 : room_id.length)) { + _this32.room = spaces_1.findSpace(room_id[0]) || _this32.room; } var roomsData = (raw_data === null || raw_data === void 0 ? void 0 : raw_data.multi_rooms) || (raw_data === null || raw_data === void 0 ? void 0 : raw_data.room); - _this33.multi_rooms = roomsData ? Array.isArray(roomsData) ? roomsData.map(function (element) { + _this32.multi_rooms = roomsData ? Array.isArray(roomsData) ? roomsData.map(function (element) { return new space_class_1.Space(element); }) : [new space_class_1.Space(roomsData)] : [new space_class_1.Space()]; var room_ids = [].concat(_toConsumableArray((raw_data === null || raw_data === void 0 ? void 0 : raw_data.room_id) || []), _toConsumableArray((raw_data === null || raw_data === void 0 ? void 0 : raw_data.room_ids) || [])); room_ids.forEach(function (roomId) { var newRoom = spaces_1.findSpace(roomId); // Check if the room is found and not already included in this.room - if (newRoom && !_this33.multi_rooms.some(function (room) { + if (newRoom && !_this32.multi_rooms.some(function (room) { return room.id === newRoom.id; })) { // Add the new room to this.room - _this33.multi_rooms.push(newRoom); + _this32.multi_rooms.push(newRoom); } }); // this.room is sometimes getting set to undefined when raw_data?.room is coming as an object - if (_this33.multi_rooms.length && _this33.room === undefined) { - _this33.room = _this33.multi_rooms[0]; + if (_this32.multi_rooms.length && _this32.room === undefined) { + _this32.room = _this32.multi_rooms[0]; } /** * Setup the booking start and end time @@ -7805,7 +7822,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var defaultStartTz = new date_tz_1.DateTZ({ date: nowTz.ms, is_local_tz: false, - building_tz: _this33.timezone + building_tz: _this32.timezone }).setValue({ minute: Math.ceil(nowTz.minutes / 5) * 5 }); @@ -7828,30 +7845,30 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * but doesn't use the toApiJSON method adapt the class input, mainly the * startDateTz isn't converted to the start_epoch timestamp. */ - _this33.startDateTz = raw_data.startDateTz; - _this33.endDateTz = raw_data.endDateTz; + _this32.startDateTz = raw_data.startDateTz; + _this32.endDateTz = raw_data.endDateTz; } else if (startEpochProvided) { /** * A Booking created from the API responses arrives with the booking * start_epoch and end_epoch timestamps. */ - _this33.startDateTz = new date_tz_1.DateTZ({ + _this32.startDateTz = new date_tz_1.DateTZ({ date: (raw_data.start_epoch || raw_data.start) * 1000, is_local_tz: false, - building_tz: _this33.timezone + building_tz: _this32.timezone }); - _this33.endDateTz = new date_tz_1.DateTZ({ + _this32.endDateTz = new date_tz_1.DateTZ({ date: (raw_data.end_epoch || raw_data.end) * 1000, is_local_tz: false, - building_tz: _this33.timezone + building_tz: _this32.timezone }); } else { /** * And there are uses of new Booking where there are no inputs * and defaults are necessary. */ - _this33.startDateTz = defaultStartTz; - _this33.endDateTz = defaultStartTz.addValue({ + _this32.startDateTz = defaultStartTz; + _this32.endDateTz = defaultStartTz.addValue({ minutes: 60 }); ; @@ -7865,11 +7882,11 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons */ - if (_this33.endDateTz.minutes % 5 !== 0 || _this33.endDateTz.second > 0) { + if (_this32.endDateTz.minutes % 5 !== 0 || _this32.endDateTz.second > 0) { // Not sure of the source but some bookings do not conform. - _this33.endDateTz = _this33.endDateTz.setValue({ + _this32.endDateTz = _this32.endDateTz.setValue({ second: 0, - minute: Math.round(_this33.endDateTz.minutes / 5) * 5 + minute: Math.round(_this32.endDateTz.minutes / 5) * 5 }); } /** @@ -7881,7 +7898,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons */ - _this33.created_epoch = raw_data.created_epoch || nowTz.seconds; + _this32.created_epoch = raw_data.created_epoch || nowTz.seconds; /** * Setup the booking all_day boolean * @@ -7891,17 +7908,17 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons */ if ('all_day' in raw_data) { - _this33.all_day = raw_data.all_day; + _this32.all_day = raw_data.all_day; } else { - _this33.all_day = !!raw_data.all_day || _this33.duration > 23 * 60; + _this32.all_day = !!raw_data.all_day || _this32.duration > 23 * 60; } // R--- TODO Concierge will use startDateTz so i'm not sure if this is needed. - if (!_this33.is_concierge && _this33.all_day && _this33.timezone) { + if (!_this32.is_concierge && _this32.all_day && _this32.timezone) { /** * Concierge has a all_day form field, I can see it may need this for that, does it really? */ - _this33.startDateTz = _this33.startDateTz.startOfValue('day'); + _this32.startDateTz = _this32.startDateTz.startOfValue('day'); } /** * Setup the booking approval status @@ -7921,20 +7938,20 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var approvalStatus = {}; - _this33.multi_rooms.forEach(function (room) { + _this32.multi_rooms.forEach(function (room) { approvalStatus[room.email] = status; }); // Tracking new "status" and legacy "approval_status" from raw_data.status. - _this33.status = status; - _this33.approval_status = raw_data.approval_status || {}; + _this32.status = status; + _this32.approval_status = raw_data.approval_status || {}; /** * Catering setup * * Bring in and sort the catering order by delivery time */ - _this33.catering = (raw_data.catering instanceof Array ? raw_data.catering : []).map(function (i) { + _this32.catering = (raw_data.catering instanceof Array ? raw_data.catering : []).map(function (i) { return new catering_1.CateringOrder(i); }); /** @@ -7948,7 +7965,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var edited_fields = Array.isArray(raw_data.edits) ? raw_data.edits : base_1.unique(base_1.flatten(Object.keys(raw_data.edits || {}).map(function (room) { return base_1.flatten(Object.values(raw_data.edits[room])); }))); - _this33.edits = edited_fields; + _this32.edits = edited_fields; /** * New Recurring booking feilds * @@ -7956,38 +7973,38 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * and are simpler to manage this way */ - _this33.recurrence_count = raw_data.recurrence_count || null; - _this33.recurrence_days = raw_data.recurrence_days || null; - _this33.occurrence_edits = raw_data.occurrence_edits || null; - _this33.recurrence_endTz = raw_data.recurrence_end ? new date_tz_1.DateTZ({ + _this32.recurrence_count = raw_data.recurrence_count || null; + _this32.recurrence_days = raw_data.recurrence_days || null; + _this32.occurrence_edits = raw_data.occurrence_edits || null; + _this32.recurrence_endTz = raw_data.recurrence_end ? new date_tz_1.DateTZ({ date: raw_data.recurrence_end * 1000, is_local_tz: false, - building_tz: _this33.timezone + building_tz: _this32.timezone }) : null; - _this33.recurrence_exceptions = raw_data.recurrence_exceptions || null; - _this33.occurrence_ids = raw_data.occurrence_ids || null; - _this33.recurrence_interval = raw_data.recurrence_interval || null; - _this33.recurrence_period = raw_data.recurrence_period || null; - _this33.recurrence_type = raw_data.recurrence_type || null; - _this33.recurrence_master_id = raw_data.recurrence_master_id; - _this33.occurrence_details = raw_data.occurrence_details; - _this33.is_recurrent = raw_data.is_recurrent || !!_this33.recurrence_type && !!_this33.recurrence_period || null; - _this33.recurrence_starts = raw_data.recurrence_starts || []; - _this33.start_epoch = raw_data.start_epoch; - _this33.end_epoch = raw_data.end_epoch; + _this32.recurrence_exceptions = raw_data.recurrence_exceptions || null; + _this32.occurrence_ids = raw_data.occurrence_ids || null; + _this32.recurrence_interval = raw_data.recurrence_interval || null; + _this32.recurrence_period = raw_data.recurrence_period || null; + _this32.recurrence_type = raw_data.recurrence_type || null; + _this32.recurrence_master_id = raw_data.recurrence_master_id; + _this32.occurrence_details = raw_data.occurrence_details; + _this32.is_recurrent = raw_data.is_recurrent || !!_this32.recurrence_type && !!_this32.recurrence_period || null; + _this32.recurrence_starts = raw_data.recurrence_starts || []; + _this32.start_epoch = raw_data.start_epoch; + _this32.end_epoch = raw_data.end_epoch; /** * I'm not clear why, but the booking body, aka description is copied into the notes. * R--- In concerge data description is only a key when saving, also in the note array? */ - if (raw_data.body && !_this33.notes.find(function (i) { + if (raw_data.body && !_this32.notes.find(function (i) { return i.type === 'description'; })) { - _this33.notes = [].concat(_toConsumableArray(_this33.notes), [{ + _this32.notes = [].concat(_toConsumableArray(_this32.notes), [{ type: 'description', date: 0, message: raw_data.body, - author: _this33.organiser.email + author: _this32.organiser.email }]); } /** @@ -7996,8 +8013,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons */ - _this33.attempted_to_delete = raw_data.attempted_to_delete || null; - return _this33; + _this32.attempted_to_delete = raw_data.attempted_to_delete || null; + return _this32; } /** Currently back-end is not properly setting the recurrence_end property, this is a workaround */ @@ -8228,7 +8245,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "auto_approve", get: function get() { - var _this34 = this; + var _this33 = this; // if concierge we auto_approve always. if (this.is_concierge) { @@ -8237,9 +8254,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons return !this.multi_rooms.some(function (room) { return room.byRequest({ - dateTz: _this34.startDateTz, - duration: _this34.duration, - host: _this34.organiser + dateTz: _this33.startDateTz, + duration: _this33.duration, + host: _this33.organiser }); }); } @@ -8546,7 +8563,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons */ function mergeCateringOrders(order_list) { - var _this35 = this; + var _this34 = this; var _loop2 = function _loop2(_i2) { var orders = order_list.filter(function (order) { @@ -8561,8 +8578,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons items: base_1.flatten(orders.map(function (order) { return order.items; })), - booking_date: _this35.startDateTz.ms, - booking_timezone: _this35.booking_timezone + booking_date: _this34.startDateTz.ms, + booking_timezone: _this34.booking_timezone }))); order_list = new_list; _i2 = 0; @@ -8888,6 +8905,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons expected_attendees: new forms_1.FormControl(booking.expected_attendees), company: new forms_1.FormControl(booking.company), is_multiroom: new forms_1.FormControl(booking.is_multiroom), + merged: new forms_1.FormControl({ + value: booking === null || booking === void 0 ? void 0 : booking.merged, + disabled: true + }), catering: new forms_1.FormControl(booking.cateringOrders.map(function (order) { return new catering_order_class_1.CateringOrder(Object.assign(Object.assign({}, order), { booking_date: booking.startDateTz.ms, @@ -9336,7 +9357,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }; function searchRoomsAndBookings(allItems, searchValue) { - var _this36 = this; + var _this35 = this; var isConcierge = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var relevantItems = []; @@ -9350,7 +9371,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }); } else { relevantItems = allItems.filter(function (item) { - return _this36.isIncludes(item.creator, 'name', searchValue) || _this36.isIncludes(item.organiser, 'name', searchValue) || _this36.isIncludes(item, 'simple_name', searchValue); + return _this35.isIncludes(item.creator, 'name', searchValue) || _this35.isIncludes(item.organiser, 'name', searchValue) || _this35.isIncludes(item, 'simple_name', searchValue); }); } @@ -9459,21 +9480,21 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super10 = _createSuper(BookingsService); function BookingsService(_composer, settingsService) { - var _this37; + var _this36; _classCallCheck(this, BookingsService); - _this37 = _super10.call(this, _composer, settingsService); - _this37._composer = _composer; - service_manager_class_1.ServiceManager.setService(booking_class_1.Booking, _assertThisInitialized(_this37)); - _this37._name = 'Bookings'; - _this37._api_route = 'bookings'; + _this36 = _super10.call(this, _composer, settingsService); + _this36._composer = _composer; + service_manager_class_1.ServiceManager.setService(booking_class_1.Booking, _assertThisInitialized(_this36)); + _this36._name = 'Bookings'; + _this36._api_route = 'bookings'; - _this37._compare = function (a, b) { + _this36._compare = function (a, b) { return !(a.id || '').localeCompare(b.id) || !(a.icaluid || '').localeCompare(b.icaluid); }; - return _this37; + return _this36; } /** * Get user bookings @@ -9484,7 +9505,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons _createClass(BookingsService, [{ key: "userBookings", value: function userBookings(options, uniqueId) { - var _this38 = this; + var _this37 = this; if (!options) { throw new Error('Booking avilability requires request options'); @@ -9507,23 +9528,23 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (!this._promises[key]) { this._promises[key] = new Promise(function (resolve, reject) { var respond = function respond(list) { - delete _this38._promises[key]; + delete _this37._promises[key]; resolve(list); }; var error = function error(e) { reject(e); - delete _this38._promises[key]; + delete _this37._promises[key]; }; var query = booking_utilities_1.bookingOptionsToQuery(options); if (options.id) { - _this38.show(options.id, query).then(function (i) { + _this37.show(options.id, query).then(function (i) { return respond([i]); }, error); } else { - _this38.query(query).then(respond, error); + _this37.query(query).then(respond, error); } }); } @@ -9585,7 +9606,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "declineMultiple", value: function declineMultiple(bookings) { - var _this39 = this; + var _this38 = this; var requests = []; bookings.forEach(function (bkg) { @@ -9607,7 +9628,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons fields['series'] = true; } - requests.push(_this39.taskObsr(id, 'concierge_decline', fields)); + requests.push(_this38.taskObsr(id, 'concierge_decline', fields)); }); return rxjs_1.forkJoin(requests); } @@ -9709,12 +9730,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super11 = _createSuper(BookingsPaginatedService); function BookingsPaginatedService(_composer, settingsService) { - var _this40; + var _this39; _classCallCheck(this, BookingsPaginatedService); - _this40 = _super11.call(this, _composer, settingsService); - _this40._composer = _composer; // public getHoldingBay(query: IBookingQueryOptions): Promise { + _this39 = _super11.call(this, _composer, settingsService); + _this39._composer = _composer; // public getHoldingBay(query: IBookingQueryOptions): Promise { // const key = `bookingsPaginated|holding-bay`; // if (!this._promises[key]) { // this._promises[key] = new Promise((resolve, reject) => { @@ -9732,21 +9753,21 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons // return this._promises[key]; // } - _this40.getHoldingBay = function (query) { - return _this40.queryHoldingBay(query, { + _this39.getHoldingBay = function (query) { + return _this39.queryHoldingBay(query, { url: '/api/staff/bookings/holding_bay' }); }; - service_manager_class_1.ServiceManager.setService(booking_class_1.Booking, _assertThisInitialized(_this40)); - _this40._name = 'Bookings'; - _this40._api_route = 'bookings'; + service_manager_class_1.ServiceManager.setService(booking_class_1.Booking, _assertThisInitialized(_this39)); + _this39._name = 'Bookings'; + _this39._api_route = 'bookings'; - _this40._compare = function (a, b) { + _this39._compare = function (a, b) { return !(a.id || '').localeCompare(b.id) || !(a.icaluid || '').localeCompare(b.icaluid); }; - return _this40; + return _this39; } /** * Get user bookings @@ -9757,7 +9778,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons _createClass(BookingsPaginatedService, [{ key: "userBookings", value: function userBookings(options, uniqueId) { - var _this41 = this; + var _this40 = this; if (!options) { throw new Error('Booking avilability requires request options'); @@ -9768,23 +9789,23 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (!this._promises[key]) { this._promises[key] = new Promise(function (resolve, reject) { var respond = function respond(response) { - delete _this41._promises[key]; + delete _this40._promises[key]; resolve(response); }; var error = function error(e) { reject(e); - delete _this41._promises[key]; + delete _this40._promises[key]; }; var query = booking_utilities_1.bookingOptionsToQuery(options); if (options.id) { - _this41.show(options.id, query).then(function (i) { + _this40.show(options.id, query).then(function (i) { return respond([i]); }, error); } else { - _this41.query(query).then(respond, error); + _this40.query(query).then(respond, error); } }); } @@ -10229,16 +10250,16 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super12 = _createSuper(CateringCategoriesService); function CateringCategoriesService(_composer, settingsService) { - var _this42; + var _this41; _classCallCheck(this, CateringCategoriesService); - _this42 = _super12.call(this, _composer, settingsService); - _this42._composer = _composer; - service_manager_class_1.ServiceManager.setService(catering_category_class_1.CateringCategory, _assertThisInitialized(_this42)); - _this42._name = 'catering category/group'; - _this42._api_route = 'catering/category'; - return _this42; + _this41 = _super12.call(this, _composer, settingsService); + _this41._composer = _composer; + service_manager_class_1.ServiceManager.setService(catering_category_class_1.CateringCategory, _assertThisInitialized(_this41)); + _this41._name = 'catering category/group'; + _this41._api_route = 'catering/category'; + return _this41; } _createClass(CateringCategoriesService, [{ @@ -10323,18 +10344,18 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super13 = _createSuper(CateringCategory); function CateringCategory(data) { - var _this43; + var _this42; _classCallCheck(this, CateringCategory); - _this43 = _super13.call(this, data); + _this42 = _super13.call(this, data); /** Whether item is a category */ - _this43.is_category = true; - _this43.is_category = true; - _this43.must_select = _this43.must_select || 0; - _this43.order_anytime = !!data.order_anytime && _this43["package"]; - return _this43; + _this42.is_category = true; + _this42.is_category = true; + _this42.must_select = _this42.must_select || 0; + _this42.order_anytime = !!data.order_anytime && _this42["package"]; + return _this42; } /** * Convert class object into plain object @@ -10404,6 +10425,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this.order_anytime = !!data.order_anytime; this.image_path = data.image_path || ''; this.admin_only = data.admin_only; + this.restricted_from = data.restricted_from || 0; this.catering_type = data.catering_type; this.must_select = (_a = data.must_select) !== null && _a !== void 0 ? _a : 0; this._amount = data._amount || data.amount || 0; @@ -10616,16 +10638,16 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super14 = _createSuper(CateringItemsService); function CateringItemsService(_composer, settingsService) { - var _this44; + var _this43; _classCallCheck(this, CateringItemsService); - _this44 = _super14.call(this, _composer, settingsService); - _this44._composer = _composer; - service_manager_class_1.ServiceManager.setService(catering_item_class_1.CateringItem, _assertThisInitialized(_this44)); - _this44._name = 'Catering Menu'; - _this44._api_route = 'catering/item'; - return _this44; + _this43 = _super14.call(this, _composer, settingsService); + _this43._composer = _composer; + service_manager_class_1.ServiceManager.setService(catering_item_class_1.CateringItem, _assertThisInitialized(_this43)); + _this43._name = 'Catering Menu'; + _this43._api_route = 'catering/item'; + return _this43; } _createClass(CateringItemsService, [{ @@ -10742,15 +10764,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super15 = _createSuper(CateringMenuService); function CateringMenuService(_composer, settingsService) { - var _this45; + var _this44; _classCallCheck(this, CateringMenuService); - _this45 = _super15.call(this, _composer, settingsService); - _this45._composer = _composer; - _this45._name = 'Catering Menu'; - _this45._api_route = 'menu'; - return _this45; + _this44 = _super15.call(this, _composer, settingsService); + _this44._composer = _composer; + _this44._name = 'Catering Menu'; + _this44._api_route = 'menu'; + return _this44; } /** * Convert user data to local format @@ -11240,12 +11262,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "closeAllDialogs", value: function closeAllDialogs() { - var _this46 = this; + var _this45 = this; this.dialogRefMap.forEach(function (dialogRef, id) { dialogRef.close(); - _this46.dialogRefMap["delete"](id); + _this45.dialogRefMap["delete"](id); }); } }]); @@ -11459,7 +11481,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var HotkeysService = /*#__PURE__*/function () { function HotkeysService() { - var _this47 = this; + var _this46 = this; _classCallCheck(this, HotkeysService); @@ -11478,41 +11500,41 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this.counter = 0; window.addEventListener('keydown', function (event) { - var code = _this47.mapKey((event.code || '').toLowerCase()); + var code = _this46.mapKey((event.code || '').toLowerCase()); /* istanbul ignore else */ - if (_this47.last_down !== code) { + if (_this46.last_down !== code) { /* istanbul ignore else */ - if (!_this47.keydown_states[code]) { - _this47.keydown_states[code] = new rxjs_1.BehaviorSubject(null); - _this47.keydown_observers[code] = _this47.keydown_states[code].asObservable(); + if (!_this46.keydown_states[code]) { + _this46.keydown_states[code] = new rxjs_1.BehaviorSubject(null); + _this46.keydown_observers[code] = _this46.keydown_states[code].asObservable(); } - _this47.keydown_states[code].next(++_this47.counter); + _this46.keydown_states[code].next(++_this46.counter); /* istanbul ignore else */ - if (_this47.combo_end.indexOf(code) >= 0) { + if (_this46.combo_end.indexOf(code) >= 0) { event.preventDefault(); } - _this47.last_down = code; + _this46.last_down = code; } }); window.addEventListener('keyup', function (event) { - var code = _this47.mapKey((event.code || '').toLowerCase()); + var code = _this46.mapKey((event.code || '').toLowerCase()); /* istanbul ignore else */ - if (_this47.keydown_states[code]) { - _this47.keydown_states[code].next(null); + if (_this46.keydown_states[code]) { + _this46.keydown_states[code].next(null); } /* istanbul ignore else */ - if (_this47.last_down === code) { - _this47.last_down = null; + if (_this46.last_down === code) { + _this46.last_down = null; } }); } @@ -11526,11 +11548,11 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons _createClass(HotkeysService, [{ key: "listen", value: function listen(combo, next) { - var _this48 = this; + var _this47 = this; combo = combo instanceof Array ? combo : combo.split('+'); var combination = combo.map(function (i) { - return _this48.mapKey(i.toLowerCase()); + return _this47.mapKey(i.toLowerCase()); }); /* istanbul ignore else */ @@ -11559,7 +11581,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons try { for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) { var key = _step13.value; - var state = _this48.keydown_states[key]; + var state = _this47.keydown_states[key]; presses.push(state ? state.getValue() || -1 : -1); } // Check that keys are pressed in the correct order @@ -11786,7 +11808,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "display", get: function get() { - var _this49 = this; + var _this48 = this; var service = service_manager_class_1.ServiceManager.serviceFor(organisation_class_1.Organisation); @@ -11795,7 +11817,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } var bld = service.buildings.find(function (bld) { - return bld.id === _this49.level.building_id; + return bld.id === _this48.level.building_id; }); return bld ? "".concat(bld.name, ", ").concat(this.level.name) : this.level.name; } @@ -11874,16 +11896,16 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super16 = _createSuper(LocationService); function LocationService(_composer, settingsService) { - var _this50; + var _this49; _classCallCheck(this, LocationService); - _this50 = _super16.call(this, _composer, settingsService); - _this50._composer = _composer; - service_manager_class_1.ServiceManager.setService(location_class_1.MapLocation, _assertThisInitialized(_this50)); - _this50._name = 'Location'; - _this50._api_route = 'people'; - return _this50; + _this49 = _super16.call(this, _composer, settingsService); + _this49._composer = _composer; + service_manager_class_1.ServiceManager.setService(location_class_1.MapLocation, _assertThisInitialized(_this49)); + _this49._name = 'Location'; + _this49._api_route = 'people'; + return _this49; } _createClass(LocationService, [{ @@ -11984,41 +12006,41 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super17 = _createSuper(Building); function Building(raw_data) { - var _this51; + var _this50; _classCallCheck(this, Building); - _this51 = _super17.call(this, raw_data); + _this50 = _super17.call(this, raw_data); var settings = raw_data.settings || {}; var disc_info = settings.discovery_info || {}; - _this51.zone_id = raw_data.zone_id || raw_data.zone; - _this51.extras = (raw_data.extras || disc_info.extras || []).map(function (i) { + _this50.zone_id = raw_data.zone_id || raw_data.zone; + _this50.extras = (raw_data.extras || disc_info.extras || []).map(function (i) { return { id: i.extra_id || i.id, name: i.extra_name || i.name }; }); - _this51.loan_items = (raw_data.loan_items || disc_info.loan_items || []).map(function (i) { + _this50.loan_items = (raw_data.loan_items || disc_info.loan_items || []).map(function (i) { return { id: i.extra_id || i.id, name: i.extra_name || i.name }; }); - _this51.levels = (raw_data.levels || disc_info.levels || []).map(function (i) { + _this50.levels = (raw_data.levels || disc_info.levels || []).map(function (i) { return new level_class_1.BuildingLevel(Object.assign(Object.assign({}, i), { - building_id: _this51.id + building_id: _this50.id })); }); - _this51._roles = raw_data.roles || disc_info.roles || {}; - _this51._lockers = raw_data.lockers || raw_data.locker_structure || disc_info.locker_structure || {}; - _this51._systems = raw_data.systems || disc_info.systems || {}; - _this51._settings = settings; - _this51._phone_numbers = raw_data.phone_numbers || disc_info.phone_numbers || {}; - _this51._location = raw_data.location || disc_info.location || { + _this50._roles = raw_data.roles || disc_info.roles || {}; + _this50._lockers = raw_data.lockers || raw_data.locker_structure || disc_info.locker_structure || {}; + _this50._systems = raw_data.systems || disc_info.systems || {}; + _this50._settings = settings; + _this50._phone_numbers = raw_data.phone_numbers || disc_info.phone_numbers || {}; + _this50._location = raw_data.location || disc_info.location || { longitude: null, latitude: null }; - _this51.catering_hours = raw_data.catering_hours || disc_info.catering_hours || settings.catering_hours || { + _this50.catering_hours = raw_data.catering_hours || disc_info.catering_hours || settings.catering_hours || { start: 7, end: 20 }; @@ -12042,30 +12064,30 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } } - _this51.searchables = searchables; - _this51.code = raw_data.code || disc_info.code || settings.code || ''; - _this51.address = raw_data.address || disc_info.address || settings.address || ''; - _this51.booking_details = raw_data.booking_details || disc_info.booking_details || settings.booking_details || {}; - _this51.booking_rules = raw_data.booking_rules || disc_info.booking_rules || settings.booking_rules || {}; - _this51.catering_restricted_from = raw_data.catering_restricted_from || disc_info.catering_restricted_from || settings.catering_restricted_from || 0; - _this51.currency = raw_data.currency || disc_info.currency || settings.currency || 'USD'; - _this51.required = raw_data.required || disc_info.required || settings.required || {}; + _this50.searchables = searchables; + _this50.code = raw_data.code || disc_info.code || settings.code || ''; + _this50.address = raw_data.address || disc_info.address || settings.address || ''; + _this50.booking_details = raw_data.booking_details || disc_info.booking_details || settings.booking_details || {}; + _this50.booking_rules = raw_data.booking_rules || disc_info.booking_rules || settings.booking_rules || {}; + _this50.catering_restricted_from = raw_data.catering_restricted_from || disc_info.catering_restricted_from || settings.catering_restricted_from || 0; + _this50.currency = raw_data.currency || disc_info.currency || settings.currency || 'USD'; + _this50.required = raw_data.required || disc_info.required || settings.required || {}; if (disc_info.requires_equipment_code) { - _this51.required.equipment_code = true; + _this50.required.equipment_code = true; } if (disc_info.requires_expected_attendees) { - _this51.required.expected_attendees = true; + _this50.required.expected_attendees = true; } - _this51.timezone = raw_data.timezone || disc_info.timezone || settings.timezone || ''; - _this51.has_catering = raw_data.has_catering || disc_info.has_catering || settings.has_catering || false; - _this51.holding_bay = raw_data.holding_bay || disc_info.holding_bay || settings.holding_bay || ''; - _this51.visitor_space = raw_data.visitor_space || disc_info.visitor_space || settings.visitor_space || ''; - _this51.sort_order = raw_data.sort_order || disc_info.sort_order || settings.sort_order || []; - _this51.city = raw_data.city || disc_info.city || 'No City'; - return _this51; + _this50.timezone = raw_data.timezone || disc_info.timezone || settings.timezone || ''; + _this50.has_catering = raw_data.has_catering || disc_info.has_catering || settings.has_catering || false; + _this50.holding_bay = raw_data.holding_bay || disc_info.holding_bay || settings.holding_bay || ''; + _this50.visitor_space = raw_data.visitor_space || disc_info.visitor_space || settings.visitor_space || ''; + _this50.sort_order = raw_data.sort_order || disc_info.sort_order || settings.sort_order || []; + _this50.city = raw_data.city || disc_info.city || 'No City'; + return _this50; } /** Service for managing buildings */ @@ -12160,10 +12182,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "role_names", get: function get() { - var _this52 = this; + var _this51 = this; return Object.keys(this._roles).filter(function (i) { - return _this52._roles.hasOwnProperty(i); + return _this51._roles.hasOwnProperty(i); }); } /** Map of the locker ID arrays */ @@ -12311,7 +12333,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super18 = _createSuper(Organisation); function Organisation() { - var _this53; + var _this52; var raw_data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; @@ -12319,12 +12341,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _a, _b; - _this53 = _super18.call(this, raw_data); - _this53._settings = raw_data.settings || {}; - _this53.available_buildings = (((_b = (_a = raw_data.settings) === null || _a === void 0 ? void 0 : _a.discovery_info) === null || _b === void 0 ? void 0 : _b.buildings) || []).map(function (bld) { + _this52 = _super18.call(this, raw_data); + _this52._settings = raw_data.settings || {}; + _this52.available_buildings = (((_b = (_a = raw_data.settings) === null || _a === void 0 ? void 0 : _a.discovery_info) === null || _b === void 0 ? void 0 : _b.buildings) || []).map(function (bld) { return bld.zone_id; }); - return _this53; + return _this52; } /** * Get a custom building setting @@ -12442,31 +12464,31 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super19 = _createSuper(OrganisationService); function OrganisationService(_composer, _service, _users, settingsService) { - var _this54; + var _this53; _classCallCheck(this, OrganisationService); - _this54 = _super19.call(this, _composer, settingsService); - _this54._composer = _composer; - _this54._service = _service; - _this54._users = _users; - _this54._spaceTypesSubject = new rxjs_1.Subject(); - service_manager_class_1.ServiceManager.setService(organisation_class_1.Organisation, _assertThisInitialized(_this54)); - service_manager_class_1.ServiceManager.setService(building_class_1.Building, _assertThisInitialized(_this54)); - _this54._name = 'Organisation'; - _this54._api_route = 'zones'; + _this53 = _super19.call(this, _composer, settingsService); + _this53._composer = _composer; + _this53._service = _service; + _this53._users = _users; + _this53._spaceTypesSubject = new rxjs_1.Subject(); + service_manager_class_1.ServiceManager.setService(organisation_class_1.Organisation, _assertThisInitialized(_this53)); + service_manager_class_1.ServiceManager.setService(building_class_1.Building, _assertThisInitialized(_this53)); + _this53._name = 'Organisation'; + _this53._api_route = 'zones'; - _this54.set('buildings', []); + _this53.set('buildings', []); - _this54.set('active_building', null); + _this53.set('active_building', null); - _this54._users.initialised.pipe(operators_1.first(function (_) { + _this53._users.initialised.pipe(operators_1.first(function (_) { return _; })).subscribe(function () { - return _this54.init(); + return _this53.init(); }); - return _this54; + return _this53; } /** * Add is not available on organisation service @@ -12949,13 +12971,39 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }; })); } + /** + * The function will generate filter options, excluding London. London has its own set of options as per the request. + * The filter options pertain to a subset of room type options managed by the room admin module. + * @returns filterOptions: filter options for day view space type filter + */ + + }, { + key: "getRoomFilterOptionsPerLocation", + value: function getRoomFilterOptionsPerLocation() { + var internalSubSet = this.getRoomTypeSubsetDDOptions('internal_room_types'); + + if (this.building.name.toLowerCase().includes('london')) { + internalSubSet = internalSubSet.filter(function (e) { + return !e.value.includes('meeting') && !e.value.includes('partner'); + }); + } + + var filterOptions = []; + internalSubSet.forEach(function (el) { + return filterOptions.push({ + name: el.display, + id: el.value + }); + }); + return filterOptions; + } }, { key: "building", get: function get() { - var _this55 = this; + var _this54 = this; return this.buildings.find(function (i) { - return i.id === _this55._active_building; + return i.id === _this54._active_building; }); } /** List of types of spaces */ @@ -13071,43 +13119,43 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super20 = _createSuper(PaginatedAPIService); function PaginatedAPIService(_composer, settingsService) { - var _this56; + var _this55; _classCallCheck(this, PaginatedAPIService); - _this56 = _super20.call(this); - _this56._composer = _composer; - _this56.settingsService = settingsService; + _this55 = _super20.call(this); + _this55._composer = _composer; + _this55.settingsService = settingsService; /** Map of state variables for Service */ - _this56._subjects = {}; + _this55._subjects = {}; /** Map of observables for state variables */ - _this56._observers = {}; + _this55._observers = {}; /** Map of poll subscribers for API endpoints */ - _this56._subscribers = {}; + _this55._subscribers = {}; /** Map of promises for Service */ - _this56._promises = {}; + _this55._promises = {}; /** Comparison function for service items */ - _this56._compare = function (a, b) { + _this55._compare = function (a, b) { return a === b || a.id === b.id; }; /** Default filter function for list method */ - _this56._list_filter = function (a) { + _this55._list_filter = function (a) { return !!a; }; - _this56._name = 'Base'; - _this56._api_route = 'base'; + _this55._name = 'Base'; + _this55._api_route = 'base'; - _this56.set('list', []); + _this55.set('list', []); - return _this56; + return _this55; } /** Http Client */ @@ -13136,13 +13184,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "init", value: function init() { - var _this57 = this; + var _this56 = this; this.load().then(function (_) { - return _this57._initialised.next(true); + return _this56._initialised.next(true); }, function (err) { - return _this57.timeout('init', function () { - return _this57.init(); + return _this56.timeout('init', function () { + return _this56.init(); }, 1000); }); } @@ -13240,7 +13288,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "query", value: function query() { - var _this58 = this; + var _this57 = this; var query_params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; @@ -13260,13 +13308,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (!this._promises[key]) { this._promises[key] = new Promise(function (resolve, reject) { - var url = config && config.url ? "".concat(config.url).concat(query ? '?' + query : '') : "".concat(_this58.route(engine)).concat(query ? '?' + query : ''); + var url = config && config.url ? "".concat(config.url).concat(query ? '?' + query : '') : "".concat(_this57.route(engine)).concat(query ? '?' + query : ''); var result; - _this58.http.get(url).subscribe(function (d) { + _this57.http.get(url).subscribe(function (d) { if (d && d instanceof Array) { var results = d.map(function (i) { - return _this58.process(i); + return _this57.process(i); }); result = { results: results, @@ -13274,7 +13322,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }; } else if (d && !(d instanceof Array) && d.results && d.total) { var _results = d.results.map(function (i) { - return _this58.process(i); + return _this57.process(i); }); result = { @@ -13283,7 +13331,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }; } else if (d && !(d instanceof Array) && d.results) { var _results2 = d.results.map(function (i) { - return _this58.process(i); + return _this57.process(i); }); result = { @@ -13298,12 +13346,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } }, function (e) { reject(e); - _this58._promises[key] = null; + _this57._promises[key] = null; }, function () { resolve(result); - _this58.timeout(key, function () { - return _this58._promises[key] = null; + _this57.timeout(key, function () { + return _this57._promises[key] = null; }, cache); }); }); @@ -13321,14 +13369,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "queryHoldingBay", value: function queryHoldingBay() { - var _this59 = this; + var _this58 = this; var query_params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var query = api_utilities_1.toQueryString(query_params); var url = "".concat(config.url).concat(query ? '?' + query : ''); return this.http.get(url).pipe(operators_1.map(function (d) { - return _this59.processApiResult(d); + return _this58.processApiResult(d); }), operators_1.catchError(function (error, result) { console.log(error); return rxjs_1.of(result); @@ -13343,13 +13391,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "processApiResult", value: function processApiResult(d) { - var _this60 = this; + var _this59 = this; var result; if (d && d instanceof Array) { var results = d.map(function (i) { - return _this60.process(i); + return _this59.process(i); }); result = { results: results, @@ -13357,7 +13405,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }; } else if (d && !(d instanceof Array) && d.results && d.total) { var _results3 = d.results.map(function (i) { - return _this60.process(i); + return _this59.process(i); }); result = { @@ -13366,7 +13414,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }; } else if (d && !(d instanceof Array) && d.results) { var _results4 = d.results.map(function (i) { - return _this60.process(i); + return _this59.process(i); }); result = { @@ -13391,7 +13439,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "show", value: function show(id) { - var _this61 = this; + var _this60 = this; var query_params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var engine = false; @@ -13408,19 +13456,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (!this._promises[key]) { this._promises[key] = new Promise(function (resolve, reject) { - var url = "".concat(_this61.route(engine), "/").concat(id).concat(query ? '?' + query : ''); + var url = "".concat(_this60.route(engine), "/").concat(id).concat(query ? '?' + query : ''); var result = null; - _this61.http.get(url).subscribe(function (d) { - result = _this61.process(d); + _this60.http.get(url).subscribe(function (d) { + result = _this60.process(d); }, function (e) { reject(e); - _this61._promises.new_item = null; + _this60._promises.new_item = null; }, function () { resolve(result); - _this61.timeout(key, function () { - return _this61._promises[key] = null; + _this60.timeout(key, function () { + return _this60._promises[key] = null; }, 1000); }); }); @@ -13437,7 +13485,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "add", value: function add(form_data) { - var _this62 = this; + var _this61 = this; var query_params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; @@ -13445,25 +13493,25 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (!this._promises.new_item) { this._promises.new_item = new Promise(function (resolve, reject) { var query = api_utilities_1.toQueryString(query_params); - var url = "".concat(_this62.route(query_params.engine)).concat(query ? '?' + query : ''); + var url = "".concat(_this61.route(query_params.engine)).concat(query ? '?' + query : ''); var result = null; - _this62.http.post(url, _this62.injectConcierge(form_data)).subscribe(function (d) { - return result = _this62.process(d); + _this61.http.post(url, _this61.injectConcierge(form_data)).subscribe(function (d) { + return result = _this61.process(d); }, function (e) { reject(e); - _this62.analyticsEvent("create-".concat(_this62._name.toLowerCase(), "-failed")); + _this61.analyticsEvent("create-".concat(_this61._name.toLowerCase(), "-failed")); - _this62._promises.new_item = null; + _this61._promises.new_item = null; }, function () { resolve(result); - _this62.set('list', _this62.updateList(_this62.get('list'), [result])); + _this61.set('list', _this61.updateList(_this61.get('list'), [result])); - _this62.analyticsEvent("create-".concat(_this62._name.toLowerCase(), "-success")); + _this61.analyticsEvent("create-".concat(_this61._name.toLowerCase(), "-success")); - _this62._promises.new_item = null; + _this61._promises.new_item = null; }); }); } @@ -13481,7 +13529,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "task", value: function task(id, task_name) { - var _this63 = this; + var _this62 = this; var form_data = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var method = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'post'; @@ -13495,24 +13543,24 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons id: id, _task: task_name }); - var url = "".concat(_this63.route(false), "/").concat(id, "/").concat(task_name); + var url = "".concat(_this62.route(false), "/").concat(id, "/").concat(task_name); var result; - var request = method === 'post' ? _this63.http.post(url, post_data) : _this63.http.get("".concat(url).concat(query ? '?' + query : '')); + var request = method === 'post' ? _this62.http.post(url, post_data) : _this62.http.get("".concat(url).concat(query ? '?' + query : '')); request.subscribe(function (d) { return result = d; }, function (e) { reject(e); - _this63.analyticsEvent("".concat(_this63._name.toLowerCase(), "-task-").concat(task_name, "-failed"), id); + _this62.analyticsEvent("".concat(_this62._name.toLowerCase(), "-task-").concat(task_name, "-failed"), id); - delete _this63._promises[key]; + delete _this62._promises[key]; }, function () { resolve(result); - _this63.analyticsEvent("".concat(_this63._name.toLowerCase(), "-task-").concat(task_name, "-success"), id); + _this62.analyticsEvent("".concat(_this62._name.toLowerCase(), "-task-").concat(task_name, "-success"), id); - _this63.timeout(key, function () { - return delete _this63._promises[key]; + _this62.timeout(key, function () { + return delete _this62._promises[key]; }, 1000); }); }); @@ -13530,7 +13578,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "update", value: function update(id, form_data) { - var _this64 = this; + var _this63 = this; var query_params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var key = "update|".concat(id); @@ -13538,28 +13586,28 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (!this._promises[key]) { this._promises[key] = new Promise(function (resolve, reject) { - var query = api_utilities_1.toQueryString(_this64.injectConcierge(query_params)); - var url = "".concat(_this64.route(query_params.engine), "/").concat(id).concat(query ? '?' + query : ''); + var query = api_utilities_1.toQueryString(_this63.injectConcierge(query_params)); + var url = "".concat(_this63.route(query_params.engine), "/").concat(id).concat(query ? '?' + query : ''); var result = null; - _this64.http.put(url, _this64.injectConcierge(form_data)).subscribe(function (d) { - return result = _this64.process(d); + _this63.http.put(url, _this63.injectConcierge(form_data)).subscribe(function (d) { + return result = _this63.process(d); }, function (e) { reject(e); - _this64.analyticsEvent("update-".concat(_this64._name.toLowerCase(), "-failed"), id); + _this63.analyticsEvent("update-".concat(_this63._name.toLowerCase(), "-failed"), id); - _this64._promises[key] = null; + _this63._promises[key] = null; }, function () { resolve(result); - _this64.set('list', _this64.updateList(_this64.removeItem(_this64.get('list'), { + _this63.set('list', _this63.updateList(_this63.removeItem(_this63.get('list'), { id: id }), [result])); - _this64.analyticsEvent("update-".concat(_this64._name.toLowerCase(), "-success"), id); + _this63.analyticsEvent("update-".concat(_this63._name.toLowerCase(), "-success"), id); - _this64._promises[key] = null; + _this63._promises[key] = null; }); }); } @@ -13574,7 +13622,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "delete", value: function _delete(id) { - var _this65 = this; + var _this64 = this; var q = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var key = "delete|".concat(id); @@ -13583,19 +13631,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (!this._promises[key]) { this._promises[key] = new Promise(function (resolve, reject) { var query = api_utilities_1.toQueryString(q); - var url = "".concat(_this65.route(), "/").concat(id).concat(query ? '?' + query : ''); + var url = "".concat(_this64.route(), "/").concat(id).concat(query ? '?' + query : ''); - _this65.http["delete"](url).subscribe(function (_) { + _this64.http["delete"](url).subscribe(function (_) { return null; }, function (e) { reject(e); - _this65._promises[key] = null; + _this64._promises[key] = null; }, function () { - _this65.set('list', _this65.removeItem(_this65.get('list'), { + _this64.set('list', _this64.removeItem(_this64.get('list'), { id: id })); - _this65._promises[key] = null; + _this64._promises[key] = null; resolve(); }); }); @@ -14140,6 +14188,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "timeConverter", value: function timeConverter(UNIX_timestamp) { + if (!UNIX_timestamp) return ''; var a = new Date(UNIX_timestamp * 1000); var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; var year = a.getFullYear(); @@ -14147,14 +14196,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var date = a.getDate(); var hour = (a.getHours() + 11) % 12 + 1; var suffix = a.getHours() >= 12 ? "PM" : "AM"; - var min = a.getMinutes(); + var min = a.getMinutes() === 0 ? '00' : a.getMinutes(); var time = date + ' ' + month + ' ' + year + ' - ' + hour + ':' + min + ' ' + suffix; return time; } }, { key: "cleanData", value: function cleanData() { - var _this66 = this; + var _this65 = this; var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; @@ -14257,14 +14306,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons booking.company = booking.company.join(', '); if (booking.cancelled_by) { - booking.cancelled_by = _this66.formatCancelledBy(booking.cancelled_by); - } - - if (booking.isCancelled) { - booking.cancelled_at_epoch = new Date(booking.cancelled_at_epoch * 1000).toLocaleString(); + booking.cancelled_by = _this65.formatCancelledBy(booking.cancelled_by); } - booking.cancelled_date = booking.cancelled_at_epoch; + booking.cancelled_date = _this65.timeConverter(booking.cancelled_at_epoch); } catch (e) {} var remove_fields = ['id', 'icaluid', 'accepted_at', 'accepted_by', 'check_ins', 'changeKey', 'created', 'booking_type', 'edit_history', 'end_epoch', 'old_attendees', 'start_epoch', 'expected_attendees', 'isAllDay', 'isCancelled', 'body', 'is_free', 'lastModifiedDateTime', 'locationType', 'locations', 'organizer', 'booked_by', 'originalEndTimeZone', 'originalStartTimeZone', 'room_booking_status', 'room_email', 'room_emails', 'room_id', 'sensitivity', 'seriesMasterId', 'show_as', 'notes', 'subject', 'type', 'previous_booking', 'catering', 'responseStatus', 'equipment_codes', 'cancelled_at_epoch']; @@ -14369,15 +14414,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super21 = _createSuper(ReportsService); function ReportsService(_composer, settingsService) { - var _this67; + var _this66; _classCallCheck(this, ReportsService); - _this67 = _super21.call(this, _composer, settingsService); - _this67._composer = _composer; - _this67._name = 'Reports'; - _this67._api_route = 'reports'; - return _this67; + _this66 = _super21.call(this, _composer, settingsService); + _this66._composer = _composer; + _this66._name = 'Reports'; + _this66._api_route = 'reports'; + return _this66; } _createClass(ReportsService, [{ @@ -14567,39 +14612,39 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super22 = _createSuper(SettingsService); function SettingsService(_title, settings) { - var _this68; + var _this67; _classCallCheck(this, SettingsService); - _this68 = _super22.call(this); - _this68._title = _title; - _this68.settings = settings; + _this67 = _super22.call(this); + _this67._title = _title; + _this67.settings = settings; /** Name of the application */ - _this68._app_name = 'Converge'; + _this67._app_name = 'Converge'; /** List of override settings in order of priority */ - _this68._overrides = new rxjs_1.BehaviorSubject([]); + _this67._overrides = new rxjs_1.BehaviorSubject([]); /** Mapping of behaviour subjects */ - _this68._subjects = {}; + _this67._subjects = {}; /** Mapping of observables */ - _this68._observables = {}; - _this68._bypass_bookings = false; - service_manager_class_1.ServiceManager.setService(SettingsService, _assertThisInitialized(_this68)); + _this67._observables = {}; + _this67._bypass_bookings = false; + service_manager_class_1.ServiceManager.setService(SettingsService, _assertThisInitialized(_this67)); var time = new date_tz_1.DateTZ({ date: environment_1.VERSION.time }); var built = date_tz_1.DateNow(new Date()).isSameDate(time, 'day') ? "Today at ".concat(time.formatDate('h:mma')) : time.formatDate('do MMM yyyy, h:mma'); - var frontend = _this68.get('frontend') || 'Unknown'; - _this68.frontend = frontend; + var frontend = _this67.get('frontend') || 'Unknown'; + _this67.frontend = frontend; base_1.log('CORE', "".concat(environment_1.VERSION.semver), null, 'debug', true, frontend === null || frontend === void 0 ? void 0 : frontend.toUpperCase()); base_1.log('APP', "".concat(environment_1.VERSION.hash, " | Built: ").concat(built), null, 'debug', true, frontend === null || frontend === void 0 ? void 0 : frontend.toUpperCase()); - _this68.init(); + _this67.init(); - return _this68; + return _this67; } /** * @hidden @@ -14925,7 +14970,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super23 = _createSuper(Space); function Space() { - var _this69; + var _this68; var raw_data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; @@ -14933,25 +14978,25 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _a, _b; - _this69 = _super23.call(this, raw_data); + _this68 = _super23.call(this, raw_data); /** Is the Application concierge */ - _this69.is_concierge = false; + _this68.is_concierge = false; /** To allow bookings with rooms for staff calendar view only */ - _this69.allowStaffRoomWithBookings = false; + _this68.allowStaffRoomWithBookings = false; /** Room style set of all room style one room has * ["boardroom", "cocktail", "miscellaneous", "natural_light", "theatre", "u-shape", "workshop"] */ - _this69.room_style = []; + _this68.room_style = []; /** Equipment set of all room equipment one room has * ["conference_phone", "whiteboard", "vc", "flipchart", "glassboard", "whiteboard", "wireless_content_sharing"] */ - _this69.equipment = []; // Needed to check if the current app is Concierge or Staff + _this68.equipment = []; // Needed to check if the current app is Concierge or Staff var settingsService = service_manager_class_1.ServiceManager.serviceFor(settings_service_1.SettingsService); - _this69.is_concierge = !!(settingsService === null || settingsService === void 0 ? void 0 : settingsService.concierge); - _this69.allowStaffRoomWithBookings = (settingsService === null || settingsService === void 0 ? void 0 : settingsService.bypass_bookings) || false; + _this68.is_concierge = !!(settingsService === null || settingsService === void 0 ? void 0 : settingsService.concierge); + _this68.allowStaffRoomWithBookings = (settingsService === null || settingsService === void 0 ? void 0 : settingsService.bypass_bookings) || false; var defaultGlobalName = raw_data.name || raw_data.email || 'Meeting Room'; var defaultSettings = { room_name: defaultGlobalName @@ -14973,22 +15018,22 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * */ - _this69.settings = raw_data.settings || defaultSettings; - _this69.filters = raw_data === null || raw_data === void 0 ? void 0 : raw_data.filters; // Room fields - - _this69.bookable = raw_data.bookable || false; - _this69.capacity = raw_data.capacity || 0; - _this69.support_url = raw_data.support_url; - _this69.zones = raw_data.zones instanceof Array ? raw_data.zones : []; // Feature fields - - _this69.features = raw_data.features || ''; - _this69.extra_features = ((_a = raw_data.settings) === null || _a === void 0 ? void 0 : _a.extra_features) || ''; - _this69.room_type = raw_data === null || raw_data === void 0 ? void 0 : raw_data.room_type; - _this69.simple_name = raw_data === null || raw_data === void 0 ? void 0 : raw_data.simple_name; - _this69.map_id = (raw_data === null || raw_data === void 0 ? void 0 : raw_data.map_id) || ((_b = raw_data.settings) === null || _b === void 0 ? void 0 : _b.map_id) || ''; - _this69.room_style = (raw_data === null || raw_data === void 0 ? void 0 : raw_data.room_style) || []; - _this69.equipment = (raw_data === null || raw_data === void 0 ? void 0 : raw_data.equipment) || []; - return _this69; + _this68.settings = raw_data.settings || defaultSettings; + _this68.filters = raw_data === null || raw_data === void 0 ? void 0 : raw_data.filters; // Room fields + + _this68.bookable = raw_data.bookable || false; + _this68.capacity = raw_data.capacity || 0; + _this68.support_url = raw_data.support_url; + _this68.zones = raw_data.zones instanceof Array ? raw_data.zones : []; // Feature fields + + _this68.features = raw_data.features || ''; + _this68.extra_features = ((_a = raw_data.settings) === null || _a === void 0 ? void 0 : _a.extra_features) || ''; + _this68.room_type = raw_data === null || raw_data === void 0 ? void 0 : raw_data.room_type; + _this68.simple_name = raw_data === null || raw_data === void 0 ? void 0 : raw_data.simple_name; + _this68.map_id = (raw_data === null || raw_data === void 0 ? void 0 : raw_data.map_id) || ((_b = raw_data.settings) === null || _b === void 0 ? void 0 : _b.map_id) || ''; + _this68.room_style = (raw_data === null || raw_data === void 0 ? void 0 : raw_data.room_style) || []; + _this68.equipment = (raw_data === null || raw_data === void 0 ? void 0 : raw_data.equipment) || []; + return _this68; } /** Service for managing spaces */ @@ -15089,12 +15134,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "building", get: function get() { - var _this70 = this; + var _this69 = this; var _a; return (_a = this._service) === null || _a === void 0 ? void 0 : _a.buildings.find(function (bld) { - return _this70.zones.includes(bld.id); + return _this69.zones.includes(bld.id); }); } /** Return building timezone */ @@ -15154,7 +15199,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * Works in conjunction with available_until. * * If a room is bookable that only means you can make a booking but not when. - * Available indicates that is is available to be booked durring the queried times. + * Available indicates that it is available to be booked durring the queried times. */ }, { @@ -15511,14 +15556,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super24 = _createSuper(SpacesService); function SpacesService(_composer, _org, _service, settingsService) { - var _thisSuper, _thisSuper2, _thisSuper3, _thisSuper4, _this71; + var _thisSuper, _thisSuper2, _thisSuper3, _thisSuper4, _this70; _classCallCheck(this, SpacesService); - _this71 = _super24.call(this, _composer, settingsService); - _this71._composer = _composer; - _this71._org = _org; - _this71._service = _service; + _this70 = _super24.call(this, _composer, settingsService); + _this70._composer = _composer; + _this70._org = _org; + _this70._service = _service; /** * * Special observable function to make http call for rooms @@ -15526,54 +15571,54 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * @returns observable */ - _this71.queryRooms = function () { + _this70.queryRooms = function () { var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - return _get((_thisSuper = _assertThisInitialized(_this71), _getPrototypeOf(SpacesService.prototype)), "queryRoomsForQR", _thisSuper).call(_thisSuper, query); + return _get((_thisSuper = _assertThisInitialized(_this70), _getPrototypeOf(SpacesService.prototype)), "queryRoomsForQR", _thisSuper).call(_thisSuper, query); }; - _this71.queryBooking = function () { + _this70.queryBooking = function () { var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - return _get((_thisSuper2 = _assertThisInitialized(_this71), _getPrototypeOf(SpacesService.prototype)), "queryObsr", _thisSuper2).call(_thisSuper2, query); + return _get((_thisSuper2 = _assertThisInitialized(_this70), _getPrototypeOf(SpacesService.prototype)), "queryObsr", _thisSuper2).call(_thisSuper2, query); }; - _this71.updateSpace = function (id, form_data) { + _this70.updateSpace = function (id, form_data) { var should_inject_concierge = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var query_params = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; - return _get((_thisSuper3 = _assertThisInitialized(_this71), _getPrototypeOf(SpacesService.prototype)), "updateObsr", _thisSuper3).call(_thisSuper3, id, form_data, should_inject_concierge, query_params); + return _get((_thisSuper3 = _assertThisInitialized(_this70), _getPrototypeOf(SpacesService.prototype)), "updateObsr", _thisSuper3).call(_thisSuper3, id, form_data, should_inject_concierge, query_params); }; - _this71.uploadSpacePhotos = function (apiSubRoute, form_data) { + _this70.uploadSpacePhotos = function (apiSubRoute, form_data) { var should_inject_concierge = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var query_params = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; - return _get((_thisSuper4 = _assertThisInitialized(_this71), _getPrototypeOf(SpacesService.prototype)), "uploadSpacePhotos", _thisSuper4).call(_thisSuper4, apiSubRoute, form_data, should_inject_concierge, query_params); + return _get((_thisSuper4 = _assertThisInitialized(_this70), _getPrototypeOf(SpacesService.prototype)), "uploadSpacePhotos", _thisSuper4).call(_thisSuper4, apiSubRoute, form_data, should_inject_concierge, query_params); }; - service_manager_class_1.ServiceManager.setService(space_class_1.Space, _assertThisInitialized(_this71)); - _this71._name = 'Space'; - _this71._api_route = 'rooms'; + service_manager_class_1.ServiceManager.setService(space_class_1.Space, _assertThisInitialized(_this70)); + _this70._name = 'Space'; + _this70._api_route = 'rooms'; - _this71._compare = function (a, b) { + _this70._compare = function (a, b) { return !a.id.localeCompare(b.id) || !a.email.localeCompare(b.email); }; - _this71._list_filter = function (a) { - var bld = _this71._org.building; + _this70._list_filter = function (a) { + var bld = _this70._org.building; return a.level.building_id === bld.id; }; - _this71._org.initialised.pipe(operators_1.first(function (_) { + _this70._org.initialised.pipe(operators_1.first(function (_) { return _; })).subscribe(function () { - return _this71.init(); + return _this70.init(); }); - return _this71; + return _this70; } _createClass(SpacesService, [{ key: "query", value: function query() { - var _this72 = this; + var _this71 = this; var _query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; @@ -15582,7 +15627,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super = Object.create(null, { query: { get: function get() { - return _get(_getPrototypeOf(SpacesService.prototype), "query", _this72); + return _get(_getPrototypeOf(SpacesService.prototype), "query", _this71); } } }); @@ -15633,7 +15678,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "available", value: function available(options, uniqueId) { - var _this73 = this; + var _this72 = this; var filter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; @@ -15656,23 +15701,23 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (!this._promises[key]) { this._promises[key] = new Promise(function (resolve, reject) { var respond = function respond(list) { - delete _this73._promises[key]; - resolve(filter ? _this73.filterAvailableSpaces(list) : list); + delete _this72._promises[key]; + resolve(filter ? _this72.filterAvailableSpaces(list) : list); }; var error = function error(e) { reject(e); - delete _this73._promises[key]; + delete _this72._promises[key]; }; var query = space_utilities_1.availabilityOptionsToQuery(options); if (options.id) { - _this73.show(options.id, query).then(function (i) { + _this72.show(options.id, query).then(function (i) { return respond([i]); }, error); } else { - _this73.query(query).then(respond, error); + _this72.query(query).then(respond, error); } }); } @@ -15687,7 +15732,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons key: "load", value: function load() { return tslib_1.__awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee16() { - var _this74 = this; + var _this73 = this; var loading, option; return regeneratorRuntime.wrap(function _callee16$(_context16) { @@ -15716,7 +15761,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons state: 'failed' }; - _this74._service.set('loading', loading); + _this73._service.set('loading', loading); }); case 5: @@ -15885,7 +15930,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons })), loadBuildingsWithOrg: jest.fn(), getOrganizationFiltersByRoomType: jest.fn(), - getRoomTypeSubsetDDOptions: jest.fn() + getRoomTypeSubsetDDOptions: jest.fn(), + getRoomFilterOptionsPerLocation: jest.fn() }, generateMockDataService('OrganisationService')); } @@ -16626,37 +16672,37 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super25 = _createSuper(User); function User() { - var _this75; + var _this74; var raw_data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; _classCallCheck(this, User); - _this75 = _super25.call(this, raw_data); - _this75.first_name = raw_data.first_name || ''; - _this75.last_name = raw_data.last_name || ''; - _this75.windows_id = raw_data.email || ''; - _this75.fmno = raw_data.fmno; - _this75.external = raw_data.external || false; - _this75.visitor = raw_data.visitor || false; - _this75.type = _this75.visitor ? 'external' : 'internal'; - _this75.phone = raw_data.phone || raw_data.mobile || ''; - _this75.business_unit = raw_data.business_unit || raw_data.department || ''; - _this75._organisation = raw_data.organisation || { + _this74 = _super25.call(this, raw_data); + _this74.first_name = raw_data.first_name || ''; + _this74.last_name = raw_data.last_name || ''; + _this74.windows_id = raw_data.email || ''; + _this74.fmno = raw_data.fmno; + _this74.external = raw_data.external || false; + _this74.visitor = raw_data.visitor || false; + _this74.type = _this74.visitor ? 'external' : 'internal'; + _this74.phone = raw_data.phone || raw_data.mobile || ''; + _this74.business_unit = raw_data.business_unit || raw_data.department || ''; + _this74._organisation = raw_data.organisation || { id: raw_data.organisation_id, name: raw_data.organisation_name }; - _this75._location = null; - _this75.image = raw_data.image || ''; - _this75.staff_code = raw_data.staff_code || raw_data.fmno || ''; - _this75.delegates = raw_data.delegates || []; - _this75._location = new location_1.MapLocation(raw_data.location && raw_data.location instanceof Object ? raw_data.location : { + _this74._location = null; + _this74.image = raw_data.image || ''; + _this74.staff_code = raw_data.staff_code || raw_data.fmno || ''; + _this74.delegates = raw_data.delegates || []; + _this74._location = new location_1.MapLocation(raw_data.location && raw_data.location instanceof Object ? raw_data.location : { name: raw_data.location }); - _this75.groups = raw_data.groups || []; - _this75.location = raw_data.location || raw_data.officeLocation || ''; - _this75.opt_out = raw_data.opt_out; - return _this75; + _this74.groups = raw_data.groups || []; + _this74.location = raw_data.location || raw_data.officeLocation || ''; + _this74.opt_out = raw_data.opt_out; + return _this74; } /** Currently logged in user */ @@ -16668,15 +16714,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * Ask the server for the users current location */ value: function locate() { - var _this76 = this; + var _this75 = this; var service = service_manager_class_1.ServiceManager.serviceFor(location_1.MapLocation); return new Promise(function (resolve, reject) { if (service) { - service.show(_this76.id, { - desk: _this76.email + service.show(_this75.id, { + desk: _this75.email }).then(function (l) { - _this76._location = l; + _this75._location = l; resolve(l); }, function (e) { return reject(e); @@ -16695,11 +16741,11 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "available", value: function available(start, end) { - var _this77 = this; + var _this76 = this; return new Promise(function (resolve) { - _this77._service.query({ - email: _this77.email, + _this76._service.query({ + email: _this76.email, start: start, end: end }).then(function (l) { @@ -16919,39 +16965,39 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super26 = _createSuper(UsersService); function UsersService(_composer, uhttp, location, _service, settingsService) { - var _this78; + var _this77; _classCallCheck(this, UsersService); - _this78 = _super26.call(this, _composer, settingsService); - _this78._composer = _composer; - _this78.uhttp = uhttp; - _this78.location = location; - _this78._service = _service; - service_manager_class_1.ServiceManager.setService(user_class_1.User, _assertThisInitialized(_this78)); - _this78._name = 'Users'; - _this78._api_route = 'users'; + _this77 = _super26.call(this, _composer, settingsService); + _this77._composer = _composer; + _this77.uhttp = uhttp; + _this77.location = location; + _this77._service = _service; + service_manager_class_1.ServiceManager.setService(user_class_1.User, _assertThisInitialized(_this77)); + _this77._name = 'Users'; + _this77._api_route = 'users'; - _this78._compare = function (a, b) { + _this77._compare = function (a, b) { return !a.id.localeCompare(b.id) || !a.email.localeCompare(b.email); }; - _this78.set('list', []); + _this77.set('list', []); - _this78.set('current_user', new user_class_1.User({ + _this77.set('current_user', new user_class_1.User({ id: 'local_user', name: 'Local User' })); - _this78.set('delegates', null); + _this77.set('delegates', null); - _this78._composer.initialised.pipe(operators_1.first(function (_) { + _this77._composer.initialised.pipe(operators_1.first(function (_) { return _; })).subscribe(function () { - return _this78.init(); + return _this77.init(); }); - return _this78; + return _this77; } /** Currently logged in user */ @@ -17007,7 +17053,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons value: function login(query_params) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; return tslib_1.__awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee17() { - var _this79 = this; + var _this78 = this; return regeneratorRuntime.wrap(function _callee17$(_context17) { while (1) { @@ -17020,7 +17066,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (!this._promises['login']) { this._promises['login'] = new Promise(function (resolve, reject) { - _this79.set('status', 'loading'); + _this78.set('status', 'loading'); var headers = new http_1.HttpHeaders(); @@ -17030,14 +17076,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var url = (options ? options.url : '') || '/auth/signin'; - _this79.uhttp.post(url, query_params, { + _this78.uhttp.post(url, query_params, { headers: headers }).subscribe(function (_) { return null; }, function (e) { return reject(e); }, function () { - _this79._composer.auth.authorise(); + _this78._composer.auth.authorise(); resolve(); }); @@ -17093,7 +17139,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "load", value: function load() { - var _this80 = this; + var _this79 = this; var tries = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; var loading = this._service.get('loading') || {}; @@ -17108,22 +17154,22 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons return new Promise(function (resolve) { // this is due to unclear nature of the merge between concierge and staff // concierge has the retries enabled, while staff continuously retries. - if (_this80.settingsService.concierge && tries > 4) { - _this80.set('status', 'invalid'); + if (_this79.settingsService.concierge && tries > 4) { + _this79.set('status', 'invalid'); loading.user = { message: 'Loading user credentials', state: 'failed' }; - _this80._service.set('loading', loading); + _this79._service.set('loading', loading); return resolve(); } - _this80.show('current').then(function (current_user) { - return tslib_1.__awaiter(_this80, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee20() { - var _this81 = this; + _this79.show('current').then(function (current_user) { + return tslib_1.__awaiter(_this79, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee20() { + var _this80 = this; return regeneratorRuntime.wrap(function _callee20$(_context20) { while (1) { @@ -17140,7 +17186,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } this.show(current_user.email).then(function (user) { - return tslib_1.__awaiter(_this81, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee19() { + return tslib_1.__awaiter(_this80, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee19() { return regeneratorRuntime.wrap(function _callee19$(_context19) { while (1) { switch (_context19.prev = _context19.next) { @@ -17175,8 +17221,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, _callee19, this); })); }, function () { - return _this81.timeout('load', function () { - return _this81.load(++tries).then(function () { + return _this80.timeout('load', function () { + return _this80.load(++tries).then(function () { return resolve(); }); }, Math.min(3000, 300 * tries)); @@ -17214,8 +17260,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, _callee20, this); })); }, function () { - return _this80.timeout('load', function () { - return _this80.load(++tries).then(function () { + return _this79.timeout('load', function () { + return _this79.load(++tries).then(function () { return resolve(); }); }, Math.min(3000, 300 * tries)); @@ -18272,15 +18318,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons exports.VERSION = { "dirty": false, - "raw": "803aaeb6f", - "hash": "803aaeb6f", + "raw": "f71e31100", + "hash": "f71e31100", "distance": null, "tag": null, "semver": null, - "suffix": "803aaeb6f", + "suffix": "f71e31100", "semverString": null, "version": "0.0.0", - "time": 1728876842279 + "time": 1730271155891 }; /* tslint:enable */ @@ -18438,6 +18484,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons /*! @angular/material/progress-spinner */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/progress-spinner.js"); + var _c0 = ["attendeesListRef"]; + var _c1 = ["locationsListRef"]; + var _c2 = ["cateringListRef"]; + function BookingConfirmComponent_mat_dialog_content_0_span_8_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span"); @@ -18448,7 +18498,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons function BookingConfirmComponent_mat_dialog_content_0_span_9_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "span", 30); + i0.ɵɵelementStart(0, "span", 33); i0.ɵɵtext(1, "Requested!"); i0.ɵɵelementEnd(); } @@ -18456,7 +18506,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons function BookingConfirmComponent_mat_dialog_content_0_div_10_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 31); + i0.ɵɵelementStart(0, "div", 34); i0.ɵɵtext(1, "Please await confirmation of room"); i0.ɵɵelementEnd(); } @@ -18488,13 +18538,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons function BookingConfirmComponent_mat_dialog_content_0_div_25_div_7_Template(rf, ctx) { if (rf & 1) { - var _r31 = i0.ɵɵgetCurrentView(); + var _r34 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div", 33); + i0.ɵɵelementStart(0, "div", 36); i0.ɵɵlistener("click", function BookingConfirmComponent_mat_dialog_content_0_div_25_div_7_Template_div_click_0_listener() { - i0.ɵɵrestoreView(_r31); - var ctx_r30 = i0.ɵɵnextContext(3); - return ctx_r30.openConflictsModal(); + i0.ɵɵrestoreView(_r34); + var ctx_r33 = i0.ɵɵnextContext(3); + return ctx_r33.openConflictsModal(); }); i0.ɵɵtext(1, " Conflicts "); i0.ɵɵelementEnd(); @@ -18512,7 +18562,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons i0.ɵɵelementStart(5, "div", 12); i0.ɵɵtext(6); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(7, BookingConfirmComponent_mat_dialog_content_0_div_25_div_7_Template, 2, 0, "div", 32); + i0.ɵɵtemplate(7, BookingConfirmComponent_mat_dialog_content_0_div_25_div_7_Template, 2, 0, "div", 35); i0.ɵɵelementEnd(); } @@ -18543,89 +18593,89 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } } - function BookingConfirmComponent_mat_dialog_content_0_div_40_div_3_Template(rf, ctx) { + function BookingConfirmComponent_mat_dialog_content_0_div_41_div_3_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 37); + i0.ɵɵelementStart(0, "div", 40); i0.ɵɵtext(1, " Notes "); i0.ɵɵelementEnd(); } if (rf & 2) { - var item_r32 = i0.ɵɵnextContext().$implicit; - var ctx_r33 = i0.ɵɵnextContext(2); - i0.ɵɵproperty("matTooltip", ctx_r33.equipment_notes[item_r32.email]); + var item_r35 = i0.ɵɵnextContext().$implicit; + var ctx_r36 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("matTooltip", ctx_r36.equipment_notes[item_r35.email]); } } - function BookingConfirmComponent_mat_dialog_content_0_div_40_div_4_Template(rf, ctx) { + function BookingConfirmComponent_mat_dialog_content_0_div_41_div_4_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 37); + i0.ɵɵelementStart(0, "div", 40); i0.ɵɵtext(1, " Code "); i0.ɵɵelementEnd(); } if (rf & 2) { - var item_r32 = i0.ɵɵnextContext().$implicit; - var ctx_r34 = i0.ɵɵnextContext(2); - i0.ɵɵproperty("matTooltip", (ctx_r34.equipment_codes[item_r32.email] ? "Equipment ~ " + ctx_r34.equipment_codes[item_r32.email] : "") + (ctx_r34.catering_codes[item_r32.email] && ctx_r34.equipment_codes[item_r32.email] ? "\n" : "") + (ctx_r34.catering_codes[item_r32.email] ? "Catering ~ " + ctx_r34.catering_codes[item_r32.email] : "")); + var item_r35 = i0.ɵɵnextContext().$implicit; + var ctx_r37 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("matTooltip", (ctx_r37.equipment_codes[item_r35.email] ? "Equipment ~ " + ctx_r37.equipment_codes[item_r35.email] : "") + (ctx_r37.catering_codes[item_r35.email] && ctx_r37.equipment_codes[item_r35.email] ? "\n" : "") + (ctx_r37.catering_codes[item_r35.email] ? "Catering ~ " + ctx_r37.catering_codes[item_r35.email] : "")); } } - function BookingConfirmComponent_mat_dialog_content_0_div_40_Template(rf, ctx) { + function BookingConfirmComponent_mat_dialog_content_0_div_41_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 34); - i0.ɵɵelementStart(1, "div", 35); + i0.ɵɵelementStart(0, "div", 37); + i0.ɵɵelementStart(1, "div", 38); i0.ɵɵtext(2); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(3, BookingConfirmComponent_mat_dialog_content_0_div_40_div_3_Template, 2, 1, "div", 36); - i0.ɵɵtemplate(4, BookingConfirmComponent_mat_dialog_content_0_div_40_div_4_Template, 2, 1, "div", 36); + i0.ɵɵtemplate(3, BookingConfirmComponent_mat_dialog_content_0_div_41_div_3_Template, 2, 1, "div", 39); + i0.ɵɵtemplate(4, BookingConfirmComponent_mat_dialog_content_0_div_41_div_4_Template, 2, 1, "div", 39); i0.ɵɵelementEnd(); } if (rf & 2) { - var item_r32 = ctx.$implicit; - var ctx_r14 = i0.ɵɵnextContext(2); + var item_r35 = ctx.$implicit; + var ctx_r15 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); - i0.ɵɵproperty("title", item_r32 == null ? null : item_r32.name); + i0.ɵɵproperty("title", item_r35 == null ? null : item_r35.name); i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate(item_r32 == null ? null : item_r32.local_name); + i0.ɵɵtextInterpolate(item_r35 == null ? null : item_r35.local_name); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx_r14.equipment_notes[item_r32.email]); + i0.ɵɵproperty("ngIf", ctx_r15.equipment_notes[item_r35.email]); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx_r14.equipment_codes[item_r32.email]); + i0.ɵɵproperty("ngIf", ctx_r15.equipment_codes[item_r35.email]); } } - function BookingConfirmComponent_mat_dialog_content_0_div_41_Template(rf, ctx) { + function BookingConfirmComponent_mat_dialog_content_0_div_42_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 34); + i0.ɵɵelementStart(0, "div", 37); i0.ɵɵtext(1, "No Locations"); i0.ɵɵelementEnd(); } } - function BookingConfirmComponent_mat_dialog_content_0_button_42_Template(rf, ctx) { + function BookingConfirmComponent_mat_dialog_content_0_button_43_Template(rf, ctx) { if (rf & 1) { - var _r38 = i0.ɵɵgetCurrentView(); + var _r41 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "button", 38); - i0.ɵɵlistener("click", function BookingConfirmComponent_mat_dialog_content_0_button_42_Template_button_click_0_listener() { - i0.ɵɵrestoreView(_r38); - var ctx_r37 = i0.ɵɵnextContext(2); - return ctx_r37.show_locations = !ctx_r37.show_locations; + i0.ɵɵelementStart(0, "button", 41); + i0.ɵɵlistener("click", function BookingConfirmComponent_mat_dialog_content_0_button_43_Template_button_click_0_listener() { + i0.ɵɵrestoreView(_r41); + var ctx_r40 = i0.ɵɵnextContext(2); + return ctx_r40.toggleList("locations"); }); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r16 = i0.ɵɵnextContext(2); + var ctx_r17 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate1(" ", ctx_r16.show_locations ? "Hide" : "Show more", " Locations "); + i0.ɵɵtextInterpolate1(" ", ctx_r17.show_locations ? "Hide" : "Show more", " Locations "); } } - function BookingConfirmComponent_mat_dialog_content_0_span_46_Template(rf, ctx) { + function BookingConfirmComponent_mat_dialog_content_0_span_47_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span"); i0.ɵɵtext(1, "*"); @@ -18633,7 +18683,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } } - function BookingConfirmComponent_mat_dialog_content_0_div_50_span_3_Template(rf, ctx) { + function BookingConfirmComponent_mat_dialog_content_0_div_51_span_3_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span"); i0.ɵɵtext(1, "*"); @@ -18641,32 +18691,32 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } } - function BookingConfirmComponent_mat_dialog_content_0_div_50_Template(rf, ctx) { + function BookingConfirmComponent_mat_dialog_content_0_div_51_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 21); + i0.ɵɵelementStart(0, "div", 22); i0.ɵɵelementStart(1, "label"); i0.ɵɵtext(2, "Booked by"); - i0.ɵɵtemplate(3, BookingConfirmComponent_mat_dialog_content_0_div_50_span_3_Template, 2, 0, "span", 1); + i0.ɵɵtemplate(3, BookingConfirmComponent_mat_dialog_content_0_div_51_span_3_Template, 2, 0, "span", 1); i0.ɵɵtext(4, ":"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(5, "div", 39); + i0.ɵɵelementStart(5, "div", 42); i0.ɵɵtext(6); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r18 = i0.ɵɵnextContext(2); + var ctx_r19 = i0.ɵɵnextContext(2); i0.ɵɵadvance(3); - i0.ɵɵproperty("ngIf", ctx_r18.changes.organiser); + i0.ɵɵproperty("ngIf", ctx_r19.changes.organiser); i0.ɵɵadvance(2); - i0.ɵɵproperty("title", "Booked By: " + ctx_r18.bookingDetails.bookedBy.value); + i0.ɵɵproperty("title", "Booked By: " + ctx_r19.bookingDetails.bookedBy.value); i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate1(" ", ctx_r18.bookingDetails.bookedBy.value, " "); + i0.ɵɵtextInterpolate1(" ", ctx_r19.bookingDetails.bookedBy.value, " "); } } - function BookingConfirmComponent_mat_dialog_content_0_span_54_Template(rf, ctx) { + function BookingConfirmComponent_mat_dialog_content_0_span_55_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span"); i0.ɵɵtext(1, "*"); @@ -18674,7 +18724,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } } - function BookingConfirmComponent_mat_dialog_content_0_span_57_Template(rf, ctx) { + function BookingConfirmComponent_mat_dialog_content_0_span_58_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span"); i0.ɵɵtext(1, ""); @@ -18682,69 +18732,69 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } } - function BookingConfirmComponent_mat_dialog_content_0_div_59_div_4_Template(rf, ctx) { + function BookingConfirmComponent_mat_dialog_content_0_div_61_div_4_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 43); - i0.ɵɵelementStart(1, "a", 44); + i0.ɵɵelementStart(0, "div", 46); + i0.ɵɵelementStart(1, "a", 47); i0.ɵɵtext(2); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - var item_r40 = i0.ɵɵnextContext().$implicit; - var ctx_r41 = i0.ɵɵnextContext(2); + var item_r43 = i0.ɵɵnextContext().$implicit; + var ctx_r44 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); - i0.ɵɵproperty("href", "mailto:" + item_r40.email + "?subject=" + ctx_r41.booking.title, i0.ɵɵsanitizeUrl); + i0.ɵɵproperty("href", "mailto:" + item_r43.email + "?subject=" + ctx_r44.booking.title, i0.ɵɵsanitizeUrl); i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate(item_r40.email); + i0.ɵɵtextInterpolate(item_r43.email); } } - function BookingConfirmComponent_mat_dialog_content_0_div_59_Template(rf, ctx) { + function BookingConfirmComponent_mat_dialog_content_0_div_61_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 40); + i0.ɵɵelementStart(0, "div", 43); i0.ɵɵelementStart(1, "div", 8); - i0.ɵɵelementStart(2, "div", 41); + i0.ɵɵelementStart(2, "div", 44); i0.ɵɵtext(3); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(4, BookingConfirmComponent_mat_dialog_content_0_div_59_div_4_Template, 3, 2, "div", 42); + i0.ɵɵtemplate(4, BookingConfirmComponent_mat_dialog_content_0_div_61_div_4_Template, 3, 2, "div", 45); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - var item_r40 = ctx.$implicit; - i0.ɵɵproperty("title", (item_r40 == null ? null : item_r40.name) + ((item_r40 == null ? null : item_r40.email) ? "\n" + item_r40.email : "")); + var item_r43 = ctx.$implicit; + i0.ɵɵproperty("title", (item_r43 == null ? null : item_r43.name) + ((item_r43 == null ? null : item_r43.email) ? "\n" + item_r43.email : "")); i0.ɵɵadvance(3); - i0.ɵɵtextInterpolate(item_r40.name); + i0.ɵɵtextInterpolate(item_r43.name); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", item_r40.email); + i0.ɵɵproperty("ngIf", item_r43.email); } } - function BookingConfirmComponent_mat_dialog_content_0_button_60_Template(rf, ctx) { + function BookingConfirmComponent_mat_dialog_content_0_button_62_Template(rf, ctx) { if (rf & 1) { - var _r44 = i0.ɵɵgetCurrentView(); + var _r47 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "button", 38); - i0.ɵɵlistener("click", function BookingConfirmComponent_mat_dialog_content_0_button_60_Template_button_click_0_listener() { - i0.ɵɵrestoreView(_r44); - var ctx_r43 = i0.ɵɵnextContext(2); - return ctx_r43.show_attendees = !ctx_r43.show_attendees; + i0.ɵɵelementStart(0, "button", 41); + i0.ɵɵlistener("click", function BookingConfirmComponent_mat_dialog_content_0_button_62_Template_button_click_0_listener() { + i0.ɵɵrestoreView(_r47); + var ctx_r46 = i0.ɵɵnextContext(2); + return ctx_r46.toggleList("attendees"); }); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r22 = i0.ɵɵnextContext(2); + var ctx_r24 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate1(" ", ctx_r22.show_attendees ? "Hide" : "Show", " Attendees "); + i0.ɵɵtextInterpolate1(" ", ctx_r24.show_attendees ? "Hide" : "Show", " Attendees "); } } - function BookingConfirmComponent_mat_dialog_content_0_span_65_span_2_Template(rf, ctx) { + function BookingConfirmComponent_mat_dialog_content_0_span_67_span_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span"); i0.ɵɵtext(1, ", "); @@ -18752,25 +18802,25 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } } - function BookingConfirmComponent_mat_dialog_content_0_span_65_Template(rf, ctx) { + function BookingConfirmComponent_mat_dialog_content_0_span_67_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span"); i0.ɵɵtext(1); - i0.ɵɵtemplate(2, BookingConfirmComponent_mat_dialog_content_0_span_65_span_2_Template, 2, 0, "span", 1); + i0.ɵɵtemplate(2, BookingConfirmComponent_mat_dialog_content_0_span_67_span_2_Template, 2, 0, "span", 1); i0.ɵɵelementEnd(); } if (rf & 2) { - var item_r45 = ctx.$implicit; - var isLast_r46 = ctx.last; + var item_r48 = ctx.$implicit; + var isLast_r49 = ctx.last; i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate(item_r45 || ""); + i0.ɵɵtextInterpolate(item_r48 || ""); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", !isLast_r46); + i0.ɵɵproperty("ngIf", !isLast_r49); } } - function BookingConfirmComponent_mat_dialog_content_0_span_69_Template(rf, ctx) { + function BookingConfirmComponent_mat_dialog_content_0_span_71_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span"); i0.ɵɵtext(1, "*"); @@ -18778,7 +18828,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } } - function BookingConfirmComponent_mat_dialog_content_0_span_75_Template(rf, ctx) { + function BookingConfirmComponent_mat_dialog_content_0_span_77_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span"); i0.ɵɵtext(1, "*"); @@ -18786,14 +18836,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } } - function BookingConfirmComponent_mat_dialog_content_0_div_79_Template(rf, ctx) { + function BookingConfirmComponent_mat_dialog_content_0_div_82_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 34); + i0.ɵɵelementStart(0, "div", 37); i0.ɵɵelementStart(1, "div", 8); - i0.ɵɵelementStart(2, "div", 41); + i0.ɵɵelementStart(2, "div", 44); i0.ɵɵtext(3); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(4, "div", 43); + i0.ɵɵelementStart(4, "div", 46); i0.ɵɵtext(5); i0.ɵɵpipe(6, "currency"); i0.ɵɵelementEnd(); @@ -18802,36 +18852,36 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } if (rf & 2) { - var order_r48 = ctx.$implicit; + var order_r51 = ctx.$implicit; i0.ɵɵadvance(3); - i0.ɵɵtextInterpolate(order_r48.location || ""); + i0.ɵɵtextInterpolate(order_r51.location || ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate3(" ", order_r48.item_count, " item", order_r48.item_count === 1 ? "" : "", " | ", i0.ɵɵpipeBind2(6, 4, order_r48.total / 100, order_r48.symbol), " "); + i0.ɵɵtextInterpolate3(" ", order_r51.item_count, " item", order_r51.item_count === 1 ? "" : "", " | ", i0.ɵɵpipeBind2(6, 4, order_r51.total / 100, order_r51.symbol), " "); } } - function BookingConfirmComponent_mat_dialog_content_0_button_80_Template(rf, ctx) { + function BookingConfirmComponent_mat_dialog_content_0_button_83_Template(rf, ctx) { if (rf & 1) { - var _r50 = i0.ɵɵgetCurrentView(); + var _r53 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "button", 38); - i0.ɵɵlistener("click", function BookingConfirmComponent_mat_dialog_content_0_button_80_Template_button_click_0_listener() { - i0.ɵɵrestoreView(_r50); - var ctx_r49 = i0.ɵɵnextContext(2); - return ctx_r49.show_orders = !ctx_r49.show_orders; + i0.ɵɵelementStart(0, "button", 41); + i0.ɵɵlistener("click", function BookingConfirmComponent_mat_dialog_content_0_button_83_Template_button_click_0_listener() { + i0.ɵɵrestoreView(_r53); + var ctx_r52 = i0.ɵɵnextContext(2); + return ctx_r52.toggleList("catering"); }); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r27 = i0.ɵɵnextContext(2); + var ctx_r30 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate1(" ", ctx_r27.show_orders ? "Hide" : "Show", " Catering orders "); + i0.ɵɵtextInterpolate1(" ", ctx_r30.show_orders ? "Hide" : "Show", " Catering orders "); } } - var _c0 = function _c0() { + var _c3 = function _c3() { return { type: "icon", "class": "material-icons", @@ -18893,65 +18943,65 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons i0.ɵɵtext(37, ":"); i0.ɵɵelementEnd(); i0.ɵɵelementStart(38, "div", 12); - i0.ɵɵelementStart(39, "div", 17); - i0.ɵɵtemplate(40, BookingConfirmComponent_mat_dialog_content_0_div_40_Template, 5, 4, "div", 18); - i0.ɵɵtemplate(41, BookingConfirmComponent_mat_dialog_content_0_div_41_Template, 2, 0, "div", 19); + i0.ɵɵelementStart(39, "div", 17, 18); + i0.ɵɵtemplate(41, BookingConfirmComponent_mat_dialog_content_0_div_41_Template, 5, 4, "div", 19); + i0.ɵɵtemplate(42, BookingConfirmComponent_mat_dialog_content_0_div_42_Template, 2, 0, "div", 20); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(42, BookingConfirmComponent_mat_dialog_content_0_button_42_Template, 2, 1, "button", 20); + i0.ɵɵtemplate(43, BookingConfirmComponent_mat_dialog_content_0_button_43_Template, 2, 1, "button", 21); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(43, "div", 21); - i0.ɵɵelementStart(44, "label"); - i0.ɵɵtext(45, "Host"); - i0.ɵɵtemplate(46, BookingConfirmComponent_mat_dialog_content_0_span_46_Template, 2, 0, "span", 1); - i0.ɵɵtext(47, ":"); + i0.ɵɵelementStart(44, "div", 22); + i0.ɵɵelementStart(45, "label"); + i0.ɵɵtext(46, "Host"); + i0.ɵɵtemplate(47, BookingConfirmComponent_mat_dialog_content_0_span_47_Template, 2, 0, "span", 1); + i0.ɵɵtext(48, ":"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(48, "div", 12); - i0.ɵɵtext(49); + i0.ɵɵelementStart(49, "div", 12); + i0.ɵɵtext(50); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(50, BookingConfirmComponent_mat_dialog_content_0_div_50_Template, 7, 3, "div", 22); - i0.ɵɵelementStart(51, "div", 23); - i0.ɵɵelementStart(52, "label"); - i0.ɵɵtext(53); - i0.ɵɵtemplate(54, BookingConfirmComponent_mat_dialog_content_0_span_54_Template, 2, 0, "span", 1); - i0.ɵɵtext(55, ":"); + i0.ɵɵtemplate(51, BookingConfirmComponent_mat_dialog_content_0_div_51_Template, 7, 3, "div", 23); + i0.ɵɵelementStart(52, "div", 24); + i0.ɵɵelementStart(53, "label"); + i0.ɵɵtext(54); + i0.ɵɵtemplate(55, BookingConfirmComponent_mat_dialog_content_0_span_55_Template, 2, 0, "span", 1); + i0.ɵɵtext(56, ":"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(56, "div", 12); - i0.ɵɵtemplate(57, BookingConfirmComponent_mat_dialog_content_0_span_57_Template, 2, 0, "span", 1); - i0.ɵɵelementStart(58, "div", 17); - i0.ɵɵtemplate(59, BookingConfirmComponent_mat_dialog_content_0_div_59_Template, 5, 3, "div", 24); + i0.ɵɵelementStart(57, "div", 12); + i0.ɵɵtemplate(58, BookingConfirmComponent_mat_dialog_content_0_span_58_Template, 2, 0, "span", 1); + i0.ɵɵelementStart(59, "div", 17, 25); + i0.ɵɵtemplate(61, BookingConfirmComponent_mat_dialog_content_0_div_61_Template, 5, 3, "div", 26); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(60, BookingConfirmComponent_mat_dialog_content_0_button_60_Template, 2, 1, "button", 20); + i0.ɵɵtemplate(62, BookingConfirmComponent_mat_dialog_content_0_button_62_Template, 2, 1, "button", 21); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(61, "div", 25); - i0.ɵɵelementStart(62, "label"); - i0.ɵɵtext(63); + i0.ɵɵelementStart(63, "div", 27); + i0.ɵɵelementStart(64, "label"); + i0.ɵɵtext(65); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(64, "div", 12); - i0.ɵɵtemplate(65, BookingConfirmComponent_mat_dialog_content_0_span_65_Template, 3, 2, "span", 26); + i0.ɵɵelementStart(66, "div", 12); + i0.ɵɵtemplate(67, BookingConfirmComponent_mat_dialog_content_0_span_67_Template, 3, 2, "span", 28); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(66, "div", 27); - i0.ɵɵelementStart(67, "label"); - i0.ɵɵtext(68, "Notes"); - i0.ɵɵtemplate(69, BookingConfirmComponent_mat_dialog_content_0_span_69_Template, 2, 0, "span", 1); - i0.ɵɵtext(70, ":"); + i0.ɵɵelementStart(68, "div", 29); + i0.ɵɵelementStart(69, "label"); + i0.ɵɵtext(70, "Notes"); + i0.ɵɵtemplate(71, BookingConfirmComponent_mat_dialog_content_0_span_71_Template, 2, 0, "span", 1); + i0.ɵɵtext(72, ":"); i0.ɵɵelementEnd(); - i0.ɵɵelement(71, "div", 28); + i0.ɵɵelement(73, "div", 30); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(72, "div", 29); - i0.ɵɵelementStart(73, "label"); - i0.ɵɵtext(74); - i0.ɵɵtemplate(75, BookingConfirmComponent_mat_dialog_content_0_span_75_Template, 2, 0, "span", 1); - i0.ɵɵtext(76, ":"); + i0.ɵɵelementStart(74, "div", 31); + i0.ɵɵelementStart(75, "label"); + i0.ɵɵtext(76); + i0.ɵɵtemplate(77, BookingConfirmComponent_mat_dialog_content_0_span_77_Template, 2, 0, "span", 1); + i0.ɵɵtext(78, ":"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(77, "div", 12); - i0.ɵɵelementStart(78, "div", 17); - i0.ɵɵtemplate(79, BookingConfirmComponent_mat_dialog_content_0_div_79_Template, 7, 7, "div", 18); + i0.ɵɵelementStart(79, "div", 12); + i0.ɵɵelementStart(80, "div", 17, 32); + i0.ɵɵtemplate(82, BookingConfirmComponent_mat_dialog_content_0_div_82_Template, 7, 7, "div", 19); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(80, BookingConfirmComponent_mat_dialog_content_0_button_80_Template, 2, 1, "button", 20); + i0.ɵɵtemplate(83, BookingConfirmComponent_mat_dialog_content_0_button_83_Template, 2, 1, "button", 21); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); @@ -18961,7 +19011,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (rf & 2) { var ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵadvance(3); - i0.ɵɵproperty("icon", i0.ɵɵpureFunction0(39, _c0)); + i0.ɵɵproperty("icon", i0.ɵɵpureFunction0(33, _c3)); i0.ɵɵadvance(2); i0.ɵɵproperty("src", ctx_r0.success ? ctx_r0.is_request ? "assets/img/requested.svg" : "assets/img/confirmed.svg" : "assets/img/edit.svg", i0.ɵɵsanitizeUrl); i0.ɵɵadvance(3); @@ -18988,9 +19038,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons i0.ɵɵtextInterpolate1("Locations(", ctx_r0.spaces.length || "0", ")"); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx_r0.changes.location); - i0.ɵɵadvance(3); - i0.ɵɵclassProp("shown", ctx_r0.show_locations); - i0.ɵɵadvance(1); + i0.ɵɵadvance(5); i0.ɵɵproperty("ngForOf", ctx_r0.spaces); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", !ctx_r0.spaces.length); @@ -19008,12 +19056,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons i0.ɵɵproperty("ngIf", ctx_r0.changes.attendees); i0.ɵɵadvance(3); i0.ɵɵproperty("ngIf", !ctx_r0.attendees || !ctx_r0.attendees.length); - i0.ɵɵadvance(1); - i0.ɵɵclassProp("shown", ctx_r0.show_attendees); - i0.ɵɵadvance(1); + i0.ɵɵadvance(3); i0.ɵɵproperty("ngForOf", ctx_r0.attendees); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx_r0.attendees.length > 5); + i0.ɵɵproperty("ngIf", ctx_r0.attendees.length > 2); i0.ɵɵadvance(3); i0.ɵɵtextInterpolate1("Company(", ctx_r0.booking.company.length, "):"); i0.ɵɵadvance(2); @@ -19026,28 +19072,26 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons i0.ɵɵtextInterpolate1("Catering Orders(", ctx_r0.catering.length || "0", ")"); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx_r0.changes.catering); - i0.ɵɵadvance(3); - i0.ɵɵclassProp("shown", ctx_r0.show_orders); - i0.ɵɵadvance(1); + i0.ɵɵadvance(5); i0.ɵɵproperty("ngForOf", ctx_r0.catering); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx_r0.catering.length > 5); + i0.ɵɵproperty("ngIf", ctx_r0.catering.length > 2); } } function BookingConfirmComponent_mat_dialog_actions_1_ng_container_2_Template(rf, ctx) { if (rf & 1) { - var _r53 = i0.ɵɵgetCurrentView(); + var _r56 = i0.ɵɵgetCurrentView(); i0.ɵɵelementContainerStart(0); - i0.ɵɵelementStart(1, "button", 45); + i0.ɵɵelementStart(1, "button", 48); i0.ɵɵtext(2, "Edit"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(3, "button", 46); + i0.ɵɵelementStart(3, "button", 49); i0.ɵɵlistener("click", function BookingConfirmComponent_mat_dialog_actions_1_ng_container_2_Template_button_click_3_listener() { - i0.ɵɵrestoreView(_r53); - var ctx_r52 = i0.ɵɵnextContext(2); - return ctx_r52.saveChanges(); + i0.ɵɵrestoreView(_r56); + var ctx_r55 = i0.ɵɵnextContext(2); + return ctx_r55.saveChanges(); }); i0.ɵɵtext(4, "Save"); i0.ɵɵelementEnd(); @@ -19055,11 +19099,11 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } if (rf & 2) { - var ctx_r51 = i0.ɵɵnextContext(2); + var ctx_r54 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); - i0.ɵɵproperty("disabled", ctx_r51.lastMomentConflict); + i0.ɵɵproperty("disabled", ctx_r54.lastMomentConflict); i0.ɵɵadvance(2); - i0.ɵɵproperty("disabled", ctx_r51.lastMomentConflict); + i0.ɵɵproperty("disabled", ctx_r54.lastMomentConflict); } } @@ -19085,9 +19129,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons function BookingConfirmComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "main"); - i0.ɵɵelementStart(1, "div", 47); - i0.ɵɵelementStart(2, "div", 48); - i0.ɵɵelement(3, "mat-spinner", 49); + i0.ɵɵelementStart(1, "div", 50); + i0.ɵɵelementStart(2, "div", 51); + i0.ɵɵelement(3, "mat-spinner", 52); i0.ɵɵelementEnd(); i0.ɵɵelementStart(4, "div", 8); i0.ɵɵtext(5); @@ -19105,7 +19149,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons function BookingConfirmComponent_ng_template_4_button_0_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "button", 51); + i0.ɵɵelementStart(0, "button", 54); i0.ɵɵtext(1, "Close"); i0.ɵɵelementEnd(); } @@ -19113,22 +19157,22 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons function BookingConfirmComponent_ng_template_4_ng_container_1_Template(rf, ctx) { if (rf & 1) { - var _r57 = i0.ɵɵgetCurrentView(); + var _r60 = i0.ɵɵgetCurrentView(); i0.ɵɵelementContainerStart(0); - i0.ɵɵelementStart(1, "button", 52); + i0.ɵɵelementStart(1, "button", 55); i0.ɵɵlistener("click", function BookingConfirmComponent_ng_template_4_ng_container_1_Template_button_click_1_listener() { - i0.ɵɵrestoreView(_r57); - var ctx_r56 = i0.ɵɵnextContext(2); - return ctx_r56.newBooking(); + i0.ɵɵrestoreView(_r60); + var ctx_r59 = i0.ɵɵnextContext(2); + return ctx_r59.newBooking(); }); i0.ɵɵtext(2, "New Booking"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(3, "a", 53); + i0.ɵɵelementStart(3, "a", 56); i0.ɵɵlistener("click", function BookingConfirmComponent_ng_template_4_ng_container_1_Template_a_click_3_listener() { - i0.ɵɵrestoreView(_r57); - var ctx_r58 = i0.ɵɵnextContext(2); - return ctx_r58.toSchedule(); + i0.ɵɵrestoreView(_r60); + var ctx_r61 = i0.ɵɵnextContext(2); + return ctx_r61.toSchedule(); }); i0.ɵɵtext(4, "My Day"); i0.ɵɵelementEnd(); @@ -19138,7 +19182,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons function BookingConfirmComponent_ng_template_4_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵtemplate(0, BookingConfirmComponent_ng_template_4_button_0_Template, 2, 0, "button", 50); + i0.ɵɵtemplate(0, BookingConfirmComponent_ng_template_4_button_0_Template, 2, 0, "button", 53); i0.ɵɵtemplate(1, BookingConfirmComponent_ng_template_4_ng_container_1_Template, 5, 0, "ng-container", 1); } @@ -19155,37 +19199,41 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super27 = _createSuper(BookingConfirmComponent); - function BookingConfirmComponent(_service, _users, _org, _bookings, _booking_state_service, _spaces, _router, _dialog, _dialog_ref, _data, settings, closeDialogService) { - var _this82; + function BookingConfirmComponent(_service, _users, _org, _bookings, _booking_state_service, _spaces, _router, _dialog, _dialog_ref, _data, settings, closeDialogService, renderer) { + var _this81; _classCallCheck(this, BookingConfirmComponent); - _this82 = _super27.call(this); - _this82._service = _service; - _this82._users = _users; - _this82._org = _org; - _this82._bookings = _bookings; - _this82._booking_state_service = _booking_state_service; - _this82._spaces = _spaces; - _this82._router = _router; - _this82._dialog = _dialog; - _this82._dialog_ref = _dialog_ref; - _this82._data = _data; - _this82.settings = settings; - _this82.closeDialogService = closeDialogService; + _this81 = _super27.call(this); + _this81._service = _service; + _this81._users = _users; + _this81._org = _org; + _this81._bookings = _bookings; + _this81._booking_state_service = _booking_state_service; + _this81._spaces = _spaces; + _this81._router = _router; + _this81._dialog = _dialog; + _this81._dialog_ref = _dialog_ref; + _this81._data = _data; + _this81.settings = settings; + _this81.closeDialogService = closeDialogService; + _this81.renderer = renderer; /** Emitter for user actions on the modal */ - _this82.event = new core_1.EventEmitter(); - _this82.lastMomentConflict = false; - _this82.booking.time_changed = _this82.old_booking && (_this82.old_booking.startDateTz.ms !== _this82.booking.startDateTz.ms || _this82.old_booking.duration !== _this82.booking.duration); // in concierge, all bookings are acceptable without explicit approval. + _this81.event = new core_1.EventEmitter(); + /** Whether to show all attendees */ + + _this81.show_attendees = false; + _this81.lastMomentConflict = false; + _this81.booking.time_changed = _this81.old_booking && (_this81.old_booking.startDateTz.ms !== _this81.booking.startDateTz.ms || _this81.old_booking.duration !== _this81.booking.duration); // in concierge, all bookings are acceptable without explicit approval. var rules = data_common_1.rulesForSpace({ - user: _this82.user, - space: _this82.booking.room, + user: _this81.user, + space: _this81.booking.room, duration: 60 }); - _this82.is_request = _this82.settings.concierge ? false : rules.auto_approve; - return _this82; + _this81.is_request = _this81.settings.concierge ? false : rules.auto_approve; + return _this81; } /** Booking to confirm changes to */ @@ -19214,19 +19262,17 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "saveChanges", value: function saveChanges() { - var _this83 = this; + var _this82 = this; this.loading = 'Checking availability of selected spaces'; this._dialog_ref.disableClose = true; this.checkSpaceAvailability().then(function () { - var _a, _b; + _this82.loading = 'Processing booking request...'; // Change the unchanged settings to the selected room - _this83.loading = 'Processing booking request...'; // Change the unchanged settings to the selected room - - var newEmail = _this83.booking.space.email; + var newEmail = _this82.booking.space.email; var replaceObjects = ['setup', 'breakdown', 'approval_status']; replaceObjects.forEach(function (key) { - var obj = _this83.booking[key]; + var obj = _this82.booking[key]; if (obj && obj.constructor === Object) { var keys = Object.keys(obj); @@ -19236,30 +19282,52 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons keys.forEach(function (nk) { replacement[newEmail] = obj[nk]; }); - _this83.booking[key] = replacement; + _this82.booking[key] = replacement; } } }); var buffer = {}; - _this83.booking.multi_rooms.map(function (room) { + _this82.booking.multi_rooms.map(function (room) { return room.email; }).forEach(function (elem) { return buffer[elem] = 900; - }); // if notes or catering exist? add 15 min buffer setup and breakdown to booking + }); // // if no setup or breakdown time already added and notes or catering exist? add 15 min buffer setup and breakdown to booking + // if(this.booking.setup === null || this.booking.breakdown === null){ + // const has_note_buffer = (this.booking.notes && this.booking.notes?.length) || (this.booking.catering && this.booking.catering?.length) ? + // buffer : null; // 900 seconds = 15 min + // if (has_note_buffer) { + // this.booking.setup = has_note_buffer; + // this.booking.breakdown = has_note_buffer; + // this.booking.room_setup = has_note_buffer; + // this.booking.room_breakdown = has_note_buffer; + // } + // } + // if no setup time already added and notes or catering exist? add 15 min buffer setup time to booking - var has_note_buffer = _this83.booking.notes && ((_a = _this83.booking.notes) === null || _a === void 0 ? void 0 : _a.length) || _this83.booking.catering && ((_b = _this83.booking.catering) === null || _b === void 0 ? void 0 : _b.length) ? buffer : null; // 900 seconds = 15 min + if (_this82.booking.setup === null || _this82.booking.setup === undefined) { + var has_note_buffer = _this82.booking.notes && _this82.booking.notes.length || _this82.booking.catering && _this82.booking.catering.length ? buffer : null; // 900 seconds = 15 min - if (has_note_buffer) { - _this83.booking.setup = has_note_buffer; - _this83.booking.breakdown = has_note_buffer; - _this83.booking.room_setup = has_note_buffer; - _this83.booking.room_breakdown = has_note_buffer; + if (has_note_buffer) { + _this82.booking.setup = has_note_buffer; + _this82.booking.room_setup = has_note_buffer; + } + } // if no breakdown time already added and notes or catering exist? add 15 min buffer breakdown time to booking + + + if (_this82.booking.breakdown === null || _this82.booking.breakdown === undefined) { + var _has_note_buffer = _this82.booking.notes && _this82.booking.notes.length || _this82.booking.catering && _this82.booking.catering.length ? buffer : null; // 900 seconds = 15 min + + + if (_has_note_buffer) { + _this82.booking.breakdown = _has_note_buffer; + _this82.booking.room_breakdown = _has_note_buffer; + } } - _this83._bookings.save(_this83.booking, _this83._data.action === data_common_1.SeriesAction.EDIT).then(function (bkn) { - return tslib_1.__awaiter(_this83, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee22() { + _this82._bookings.save(_this82.booking, _this82._data.action === data_common_1.SeriesAction.EDIT).then(function (bkn) { + return tslib_1.__awaiter(_this82, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee22() { var updated, master_booking; return regeneratorRuntime.wrap(function _callee22$(_context22) { while (1) { @@ -19311,7 +19379,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, _callee22, this); })); }, function (err) { - _this83._dialog_ref.disableClose = false; + _this82._dialog_ref.disableClose = false; var erroMessage = ''; switch (err.status) { @@ -19321,34 +19389,34 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons case 409: erroMessage = 'Apologies, this room has been booked recently by another user, please try another one.'; - _this83.lastMomentConflict = true; + _this82.lastMomentConflict = true; break; } - _this83.loading = erroMessage; + _this82.loading = erroMessage; - _this83._service.notifyError("Error ".concat(_this83.booking.id ? 'updating' : 'creating', " booking: ").concat(erroMessage)); + _this82._service.notifyError("Error ".concat(_this82.booking.id ? 'updating' : 'creating', " booking: ").concat(erroMessage)); setTimeout(function () { - _this83.loading = null; + _this82.loading = null; - _this83.event.emit({ + _this82.event.emit({ reason: 'last-moment-conflict' }); }, 4000); }); }, function (err) { - _this83.lastMomentConflict = true; - _this83._dialog_ref.disableClose = false; + _this82.lastMomentConflict = true; + _this82._dialog_ref.disableClose = false; var erroMessage = 'Apologies, this room has been booked recently by another user, please try another one.'; - _this83.loading = erroMessage; + _this82.loading = erroMessage; - _this83._service.notifyError("Error ".concat(_this83.booking.id ? 'updating' : 'creating', " booking: ").concat(erroMessage)); + _this82._service.notifyError("Error ".concat(_this82.booking.id ? 'updating' : 'creating', " booking: ").concat(erroMessage)); setTimeout(function () { - _this83.loading = null; + _this82.loading = null; - _this83.event.emit({ + _this82.event.emit({ reason: 'last-moment-conflict' }); }, 4000); @@ -19387,7 +19455,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "checkSpaceAvailability", value: function checkSpaceAvailability() { - var _this84 = this; + var _this83 = this; var spaces = this.spaces; @@ -19397,22 +19465,22 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons return new Promise(function (resolve, reject) { // Use of this.booking.timezone is unreliable, use booking space instead. - var all_day = _this84.booking.all_day; // R--- should be nothing to do with date as a timestamp getter + var all_day = _this83.booking.all_day; // R--- should be nothing to do with date as a timestamp getter - _this84._spaces.available({ + _this83._spaces.available({ room_ids: spaces.map(function (space) { return space.id; }).join(','), - dateTz: _this84.booking.startDateTz, - duration: all_day ? 24 * 60 : _this84.booking.duration, - ignore: _this84.booking.icaluid, - recurrence_count: _this84.booking.recurrence_count, - recurrence_period: _this84.booking.recurrence_period, - recurrence_endTz: _this84.booking.recurrence_endTz, - recurrence_interval: _this84.booking.recurrence_interval, - recurrence_starts: _this84.booking.recurrence_starts, - is_recurrent: _this84.booking.is_recurrent, - recurrence_days: _this84.booking.recurrence_days + dateTz: _this83.booking.startDateTz, + duration: all_day ? 24 * 60 : _this83.booking.duration, + ignore: _this83.booking.icaluid, + recurrence_count: _this83.booking.recurrence_count, + recurrence_period: _this83.booking.recurrence_period, + recurrence_endTz: _this83.booking.recurrence_endTz, + recurrence_interval: _this83.booking.recurrence_interval, + recurrence_starts: _this83.booking.recurrence_starts, + is_recurrent: _this83.booking.is_recurrent, + recurrence_days: _this83.booking.recurrence_days }).then(function (space_list) { var _iterator26 = _createForOfIteratorHelper(space_list), _step26; @@ -19422,7 +19490,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var space = _step26.value; if (!space.bookable) { - _this84.lastMomentConflict = true; + _this83.lastMomentConflict = true; return reject("".concat(space.name, " is not available at the select time period.")); } } @@ -19433,7 +19501,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } if (space_list.length < spaces.length) { - _this84.lastMomentConflict = true; + _this83.lastMomentConflict = true; return reject("".concat(spaces[0].name, " is not available at the select time period.")); } @@ -19446,7 +19514,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "openConflictsModal", value: function openConflictsModal() { - var _this85 = this; + var _this84 = this; var ref = this._dialog.open(ui_1.ConflictsModalComponent, { maxWidth: '95vw', @@ -19463,13 +19531,48 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (event.reason === 'close') { ref.close(); } else if (event.reason === 'action') { - navigator.clipboard.writeText(_this85.conflictsText); + navigator.clipboard.writeText(_this84.conflictsText); } })); ref.afterClosed().subscribe(function () { - return _this85.unsub('modal_events'); + return _this84.unsub('modal_events'); }); } + }, { + key: "toggleList", + value: function toggleList(listType) { + if (listType === 'attendees') { + this.show_attendees ? this.collapseList(this.attendeesListRef) : this.expandList(this.attendeesListRef); + this.show_attendees = !this.show_attendees; + } else if (listType === 'locations') { + this.show_locations ? this.collapseList(this.locationsListRef) : this.expandList(this.locationsListRef); + this.show_locations = !this.show_locations; + } else if (listType === 'catering') { + this.show_orders ? this.collapseList(this.cateringListRef) : this.expandList(this.cateringListRef); + this.show_orders = !this.show_orders; + } + } + }, { + key: "expandList", + value: function expandList(listRef) { + var listElement = listRef.nativeElement; + var listItems = listElement.getElementsByClassName('list-item'); + var totalHeight = 0; + + for (var _i15 = 0; _i15 < listItems.length; _i15++) { + totalHeight += listItems[_i15].offsetHeight; + } + + this.renderer.setStyle(listElement, 'max-height', "".concat(totalHeight, "px")); + this.renderer.addClass(listElement, 'shown'); + } + }, { + key: "collapseList", + value: function collapseList(listRef) { + var listElement = listRef.nativeElement; + this.renderer.setStyle(listElement, 'max-height', '4.5em'); + this.renderer.removeClass(listElement, 'shown'); + } }, { key: "old_booking", get: function get() { @@ -19569,11 +19672,11 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "attendees", get: function get() { - var _this86 = this; + var _this85 = this; var attendees = this.booking.attendees; return attendees.filter(function (i) { - return i.email !== _this86.organiser.email; + return i.email !== _this85.organiser.email; }); } /** Host of the event */ @@ -19638,22 +19741,22 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "catering", get: function get() { - var _this87 = this; + var _this86 = this; return (this.booking.catering || []).map(function (order) { - var space = _this87.spaces.find(function (a_space) { + var space = _this86.spaces.find(function (a_space) { return a_space.email === order.location_id; }) || { level: {} }; - var building = _this87._org.buildings.find(function (bld) { + var building = _this86._org.buildings.find(function (bld) { return bld.id === space.level.building_id; }) || {}; return new data_common_1.CateringOrder(Object.assign(Object.assign({}, order), { location: space.local_name, symbol: building.currency, - booking_date: _this87.booking.startDateTz.ms, - booking_timezone: _this87.booking.timezone + booking_date: _this86.booking.startDateTz.ms, + booking_timezone: _this86.booking.timezone })); }); } @@ -19685,22 +19788,37 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons exports.BookingConfirmComponent = BookingConfirmComponent; BookingConfirmComponent.ɵfac = function BookingConfirmComponent_Factory(t) { - return new (t || BookingConfirmComponent)(i0.ɵɵdirectiveInject(i1.ApplicationService), i0.ɵɵdirectiveInject(i1.UsersService), i0.ɵɵdirectiveInject(i1.OrganisationService), i0.ɵɵdirectiveInject(i1.BookingsService), i0.ɵɵdirectiveInject(i1.BookingStateService), i0.ɵɵdirectiveInject(i1.SpacesService), i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(i3.MatDialog), i0.ɵɵdirectiveInject(i3.MatDialogRef), i0.ɵɵdirectiveInject(dialog_1.MAT_DIALOG_DATA), i0.ɵɵdirectiveInject(i1.SettingsService), i0.ɵɵdirectiveInject(i1.CloseDialogService)); + return new (t || BookingConfirmComponent)(i0.ɵɵdirectiveInject(i1.ApplicationService), i0.ɵɵdirectiveInject(i1.UsersService), i0.ɵɵdirectiveInject(i1.OrganisationService), i0.ɵɵdirectiveInject(i1.BookingsService), i0.ɵɵdirectiveInject(i1.BookingStateService), i0.ɵɵdirectiveInject(i1.SpacesService), i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(i3.MatDialog), i0.ɵɵdirectiveInject(i3.MatDialogRef), i0.ɵɵdirectiveInject(dialog_1.MAT_DIALOG_DATA), i0.ɵɵdirectiveInject(i1.SettingsService), i0.ɵɵdirectiveInject(i1.CloseDialogService), i0.ɵɵdirectiveInject(i0.Renderer2)); }; BookingConfirmComponent.ɵcmp = i0.ɵɵdefineComponent({ type: BookingConfirmComponent, selectors: [["a-booking-confirm-modal"]], + viewQuery: function BookingConfirmComponent_Query(rf, ctx) { + if (rf & 1) { + i0.ɵɵviewQuery(_c0, true); + i0.ɵɵviewQuery(_c1, true); + i0.ɵɵviewQuery(_c2, true); + } + + if (rf & 2) { + var _t; + + i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.attendeesListRef = _t.first); + i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.locationsListRef = _t.first); + i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.cateringListRef = _t.first); + } + }, outputs: { event: "event" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 6, vars: 3, - consts: [[4, "ngIf", "ngIfElse"], [4, "ngIf"], ["load_state", ""], ["success_actions", ""], ["name", "close", "mat-icon-button", "", "mat-dialog-close", ""], [3, "icon"], [1, "details"], [3, "src"], [1, "text"], ["class", "request", 4, "ngIf"], ["class", "info", 4, "ngIf"], ["name", "title", 1, "field"], [1, "value"], ["name", "when", 1, "field"], ["class", "field", "name", "when", 4, "ngIf"], ["name", "duration", 1, "field"], ["name", "location", 1, "field", "multi"], [1, "list"], ["class", "list-item", 4, "ngFor", "ngForOf"], ["class", "list-item", 4, "ngIf"], ["class", "show", 3, "click", 4, "ngIf"], ["name", "host", 1, "field"], ["class", "field", "name", "host", 4, "ngIf"], ["name", "attendees", 1, "field"], ["class", "list-item", 3, "title", 4, "ngFor", "ngForOf"], ["name", "company", 1, "field"], [4, "ngFor", "ngForOf"], ["name", "notes", 1, "field"], [1, "value", 3, "innerHTML"], ["name", "catering", 1, "field"], [1, "request"], [1, "info"], ["class", "tooltip", 3, "click", 4, "ngIf"], [1, "tooltip", 3, "click"], [1, "list-item"], [1, "text", 3, "title"], ["class", "tooltip", 3, "matTooltip", 4, "ngIf"], [1, "tooltip", 3, "matTooltip"], [1, "show", 3, "click"], [1, "value", 3, "title"], [1, "list-item", 3, "title"], [1, "name"], ["class", "email", 4, "ngIf"], [1, "email"], [3, "href"], ["mat-button", "", "mat-dialog-close", "", 1, "inverse", 3, "disabled"], ["mat-button", "", "name", "save", 3, "disabled", "click"], [1, "info-block", "center"], [1, "icon"], ["diameter", "32"], ["mat-button", "", "mat-dialog-close", "", 4, "ngIf"], ["mat-button", "", "mat-dialog-close", ""], ["mat-button", "", "name", "new", 1, "inverse", 3, "click"], ["button", "", "mat-button", "", "mat-dialog-close", "", 3, "click"]], + consts: [[4, "ngIf", "ngIfElse"], [4, "ngIf"], ["load_state", ""], ["success_actions", ""], ["name", "close", "mat-icon-button", "", "mat-dialog-close", ""], [3, "icon"], [1, "details"], [3, "src"], [1, "text"], ["class", "request", 4, "ngIf"], ["class", "info", 4, "ngIf"], ["name", "title", 1, "field"], [1, "value"], ["name", "when", 1, "field"], ["class", "field", "name", "when", 4, "ngIf"], ["name", "duration", 1, "field"], ["name", "location", 1, "field", "multi"], [1, "list"], ["locationsListRef", ""], ["class", "list-item", 4, "ngFor", "ngForOf"], ["class", "list-item", 4, "ngIf"], ["class", "show", 3, "click", 4, "ngIf"], ["name", "host", 1, "field"], ["class", "field", "name", "host", 4, "ngIf"], ["name", "attendees", 1, "field"], ["attendeesListRef", ""], ["class", "list-item", 3, "title", 4, "ngFor", "ngForOf"], ["name", "company", 1, "field"], [4, "ngFor", "ngForOf"], ["name", "notes", 1, "field"], [1, "value", 3, "innerHTML"], ["name", "catering", 1, "field"], ["cateringListRef", ""], [1, "request"], [1, "info"], ["class", "tooltip", 3, "click", 4, "ngIf"], [1, "tooltip", 3, "click"], [1, "list-item"], [1, "text", 3, "title"], ["class", "tooltip", 3, "matTooltip", 4, "ngIf"], [1, "tooltip", 3, "matTooltip"], [1, "show", 3, "click"], [1, "value", 3, "title"], [1, "list-item", 3, "title"], [1, "name"], ["class", "email", 4, "ngIf"], [1, "email"], [3, "href"], ["mat-button", "", "mat-dialog-close", "", 1, "inverse", 3, "disabled"], ["mat-button", "", "name", "save", 3, "disabled", "click"], [1, "info-block", "center"], [1, "icon"], ["diameter", "32"], ["mat-button", "", "mat-dialog-close", "", 4, "ngIf"], ["mat-button", "", "mat-dialog-close", ""], ["mat-button", "", "name", "new", 1, "inverse", 3, "click"], ["button", "", "mat-button", "", "mat-dialog-close", "", 3, "click"]], template: function BookingConfirmComponent_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵtemplate(0, BookingConfirmComponent_mat_dialog_content_0_Template, 81, 40, "mat-dialog-content", 0); + i0.ɵɵtemplate(0, BookingConfirmComponent_mat_dialog_content_0_Template, 84, 34, "mat-dialog-content", 0); i0.ɵɵtemplate(1, BookingConfirmComponent_mat_dialog_actions_1_Template, 3, 2, "mat-dialog-actions", 1); i0.ɵɵtemplate(2, BookingConfirmComponent_ng_template_2_Template, 6, 1, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor); i0.ɵɵtemplate(4, BookingConfirmComponent_ng_template_4_Template, 2, 2, "ng-template", null, 3, i0.ɵɵtemplateRefExtractor); @@ -19716,7 +19834,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, directives: [i4.NgIf, i3.MatDialogContent, i5.MatButton, i3.MatDialogClose, i6.IconComponent, i4.NgForOf, i7.MatTooltip, i3.MatDialogActions, i8.MatSpinner, i5.MatAnchor], pipes: [i4.CurrencyPipe], - styles: ["main[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n flex-direction: column;\n padding: 1em;\n min-height: 24em;\n width: 32em;\n max-width: 100%;\n}\n.details[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n margin-bottom: 1em;\n}\n.details[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n height: 6em;\n}\n.details[_ngcontent-%COMP%] .text[_ngcontent-%COMP%] {\n margin-top: 1em;\n font-weight: 400;\n font-size: 1.2em;\n}\n.details[_ngcontent-%COMP%] .info[_ngcontent-%COMP%] {\n font-size: 0.8em;\n color: #ffb300;\n text-align: center;\n}\n.text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: #43a047;\n}\n.text[_ngcontent-%COMP%] .request[_ngcontent-%COMP%] {\n color: #ffb300;\n}\n.tooltip[_ngcontent-%COMP%] {\n font-size: 0.65em;\n color: #1937ea;\n margin: 0.5em;\n text-decoration: underline;\n}\nmat-dialog-actions[_ngcontent-%COMP%] {\n border-top: 1px solid #ccc;\n}\nfooter[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n}\nfooter[_ngcontent-%COMP%] button[_ngcontent-%COMP%], footer[_ngcontent-%COMP%] a[button][_ngcontent-%COMP%] {\n min-width: 8em;\n}\nfooter[_ngcontent-%COMP%] a[_ngcontent-%COMP%] {\n color: #fff;\n}\n.icon[_ngcontent-%COMP%] {\n height: 1.2em;\n width: 1.2em;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 2em;\n}\n.content[_ngcontent-%COMP%] {\n width: 16rem;\n text-align: center;\n font-size: 0.8em;\n}\napp-icon[_ngcontent-%COMP%] {\n transition: font-size 200ms;\n}\n.close[_ngcontent-%COMP%] {\n font-size: 1em;\n cursor: pointer;\n}\n.close[_ngcontent-%COMP%]:hover app-icon[_ngcontent-%COMP%] {\n font-size: 0.8em;\n}\nbutton[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 0 0.25em;\n}\n.field[_ngcontent-%COMP%] {\n display: flex;\n padding: 0.25em 0.25em 0.5em;\n width: 100%;\n border-radius: 4px;\n}\n.field[_ngcontent-%COMP%]:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .field[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .field[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n}\nlabel[_ngcontent-%COMP%] {\n width: 8em;\n margin-top: 0.25em;\n margin-right: 1em;\n font-weight: bold;\n font-size: 0.8em;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n label[_ngcontent-%COMP%] {\n width: 100%;\n margin-bottom: 0.5em;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n label[_ngcontent-%COMP%] {\n width: 100%;\n margin-bottom: 0.5em;\n }\n}\n.value[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 50%;\n padding: 0 0.5em;\n}\n.value[_ngcontent-%COMP%] .show[_ngcontent-%COMP%] {\n font-size: 0.8em;\n background: none;\n border: none;\n outline: none;\n text-decoration: underline;\n cursor: pointer;\n}\n.value[_ngcontent-%COMP%] .show[_ngcontent-%COMP%]:hover {\n color: #1937ea;\n}\n.list[_ngcontent-%COMP%] {\n max-height: 4em;\n overflow: hidden;\n margin-left: -0.5em;\n transition: max-height 0.8s ease-in-out;\n}\n.list.shown[_ngcontent-%COMP%] {\n max-height: 100em;\n}\n.list-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 0.25em 0.5em;\n border-radius: 8px;\n width: 100%;\n}\n.list-item[_ngcontent-%COMP%]:nth-child(2n) {\n background-color: rgba(0, 0, 0, 0.05);\n}\n.list-item[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] {\n height: 8px;\n width: 8px;\n border-radius: 100%;\n background-color: #43a047;\n margin: 0.5em 0.5em 0.5em 0;\n}\n.list-item[_ngcontent-%COMP%] .text[_ngcontent-%COMP%] {\n margin-right: 1em;\n flex: 1;\n min-width: 50%;\n}\n.email[_ngcontent-%COMP%] {\n font-size: 0.6em;\n}\na[_ngcontent-%COMP%] {\n color: inherit;\n}\n[name=close][_ngcontent-%COMP%] {\n position: absolute;\n top: 0.5em;\n right: 0.5em;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL2xlZ2FjeS1vdmVybGF5cy9zcmMvbGliL2Jvb2tpbmctY29uZmlybS9ib29raW5nLWNvbmZpcm0uY29tcG9uZW50LnNjc3MiLCJsaWJzL2xlZ2FjeS1vdmVybGF5cy9zcmMvbGliL2Jvb2tpbmctY29uZmlybS9ib29raW5nLWNvbmZpcm0uY29tcG9uZW50LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQTFEQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDNUNBOztzQkFBQTtBQ1ZBO0VBQ0ksa0JBQUE7RUFDQSxhQUFBO0VBQ0EsbUJBQUE7RUFDQSxzQkFBQTtFQUNBLFlBQUE7RUFDQSxnQkFBQTtFQUNBLFdBQUE7RUFDQSxlQUFBO0FDd0JKO0FEckJBO0VBQ0ksYUFBQTtFQUNBLG1CQUFBO0VBQ0EsdUJBQUE7RUFDQSxzQkFBQTtFQUNBLGtCQUFBO0FDd0JKO0FEdEJJO0VBQ0ksV0FBQTtBQ3dCUjtBRHJCSTtFQUNJLGVBQUE7RUFDQSxnQkFBQTtFQUNBLGdCQUFBO0FDdUJSO0FEcEJJO0VBQ0ksZ0JBQUE7RUFDQSxjRmRFO0VFZUYsa0JBQUE7QUNzQlI7QURqQkk7RUFDSSxjRjFCRTtBRzhDVjtBRGpCSTtFQUNJLGNGekJFO0FHNENWO0FEZkE7RUFDSSxpQkFBQTtFQUNBLGNGdkJZO0VFd0JaLGFBQUE7RUFDQSwwQkFBQTtBQ2tCSjtBRGZBO0VBQ0ksMEJBQUE7QUNrQko7QURmQTtFQUNJLGFBQUE7RUFDQSxtQkFBQTtFQUNBLHVCQUFBO0VBQ0EsV0FBQTtBQ2tCSjtBRGpCSTs7RUFFSSxjQUFBO0FDbUJSO0FEaEJJO0VBQ0ksV0FBQTtBQ2tCUjtBRGRBO0VBQ0ksYUFBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EsbUJBQUE7RUFDQSx1QkFBQTtFQUNBLGNBQUE7QUNpQko7QURkQTtFQUNJLFlBQUE7RUFDQSxrQkFBQTtFQUNBLGdCQUFBO0FDaUJKO0FEZkE7RUFDSSwyQkFBQTtBQ2tCSjtBRGZBO0VBQ0ksY0FBQTtFQUNBLGVBQUE7QUNrQko7QURmUTtFQUNJLGdCQUFBO0FDaUJaO0FEWkE7RUFDSSxhQUFBO0VBQ0EsbUJBQUE7RUFDQSx1QkFBQTtFQUNBLGdCQUFBO0FDZUo7QURaQTtFQUNJLGFBQUE7RUFDQSw0QkFBQTtFQUNBLFdBQUE7RUFDQSxrQkFBQTtBQ2VKO0FEYkk7RUFDSSxxQ0FBQTtBQ2VSO0FGakhRO0VDMkZSO0lBV1EsZUFBQTtFQ2VOO0FBQ0Y7QUZuSFE7RUN3RlI7SUFXUSxlQUFBO0VDb0JOO0FBQ0Y7QURqQkE7RUFDSSxVQUFBO0VBQ0Esa0JBQUE7RUFDQSxpQkFBQTtFQUNBLGlCQUFBO0VBQ0EsZ0JBQUE7QUNvQko7QUZuSVE7RUMwR1I7SUFPUSxXQUFBO0lBQ0Esb0JBQUE7RUNzQk47QUFDRjtBRnRJUTtFQ3VHUjtJQU9RLFdBQUE7SUFDQSxvQkFBQTtFQzRCTjtBQUNGO0FEekJBO0VBQ0ksT0FBQTtFQUNBLGNBQUE7RUFDQSxnQkFBQTtBQzRCSjtBRDFCSTtFQUNJLGdCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtFQUNBLDBCQUFBO0VBQ0EsZUFBQTtBQzRCUjtBRDFCUTtFQUNJLGNGNUhJO0FHd0poQjtBRHZCQTtFQUNJLGVBQUE7RUFDQSxnQkFBQTtFQUNBLG1CQUFBO0VBQ0EsdUNBQUE7QUMwQko7QUR4Qkk7RUFDSSxpQkFBQTtBQzBCUjtBRHRCQTtFQUNJLGFBQUE7RUFDQSxtQkFBQTtFQUNBLHFCQUFBO0VBQ0Esa0JBQUE7RUFDQSxXQUFBO0FDeUJKO0FEdkJJO0VBQ0kscUNBQUE7QUN5QlI7QUR0Qkk7RUFDSSxXQUFBO0VBQ0EsVUFBQTtFQUNBLG1CQUFBO0VBQ0EseUJGeEtFO0VFeUtGLDJCQUFBO0FDd0JSO0FEckJJO0VBQ0ksaUJBQUE7RUFDQSxPQUFBO0VBQ0EsY0FBQTtBQ3VCUjtBRG5CQTtFQUNJLGdCQUFBO0FDc0JKO0FEbkJBO0VBQ0ksY0FBQTtBQ3NCSjtBRG5CQTtFQUNJLGtCQUFBO0VBQ0EsVUFBQTtFQUNBLFlBQUE7QUNzQkoiLCJmaWxlIjoibGlicy9sZWdhY3ktb3ZlcmxheXMvc3JjL2xpYi9ib29raW5nLWNvbmZpcm0vYm9va2luZy1jb25maXJtLmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kY29sb3ItYnJhbmQtZWxlY3RyaWMtYmx1ZTogIzIyNTFmZjtcbiRjb2xvci1icmFuZC1kZWVwLWJsdWU6ICMwNTFjMmM7XG4kY29sb3ItYnJhbmQtY3lhbjogIzAwYTlmNDtcblxuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRmb250LWRhcms6ICMwMDA7XG4kZm9udC1saWdodDogI2ZmZjtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG4kZ3JlZW4xOiAjMjE5NjUzO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvbG9yLXByaW1hcnk6ICMxOTM3ZWE7XG4kY29sb3ItcHJpbWFyeS1saWdodDogbGlnaHRlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuJGNvbG9yLXByaW1hcnktZGFyazogZGFya2VuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG5cbiRjb2xvci1zZWNvbmRhcnk6ICM0Mjg1RjQ7XG4kY29sb3Itc2Vjb25kYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcbiRjb2xvci1zZWNvbmRhcnktZGFyazogZGFya2VuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcblxuJGJhY2tncm91bmQ6ICNmMGYwZjA7XG4kZm9vdGVyLWJhY2s6ICMyNjMyMzg7XG4kaGVhZGVyLWJhY2s6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzA1MUMyQywgIzA1MUMyQyA0MCUsICMwQjI0NTMgNjAlLCAjMUY0MEU2IDEwMCUpO1xuXG4kY29sb3ItdGVybmFyeTogIzA1MWMyYztcblxuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG5cbiRmb250LXN0YWNrOiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcblxuJGhlYWRpbmctZm9udDogXCJMYXJpc2hNY0tpbnNleVwiLCAnR2VvcmdpYScsIHNlcmlmO1xuJGZvbnQ6ICRmb250LXN0YWNrO1xuXG4kZm9udC1mYW1pbHktcHJpbWFyeTogXCJNY0tpbnNleSBTYW5zXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQ2FsaWJyaSwgQ29yYmVsLCBIZWx2ZXRpY2EsIFJvYm90bywgRHJvaWQsIHNhbnMtc2VyaWY7XG4kZm9udC1mYW1pbHktc2Vjb25kYXJ5OiBcIkJvd2VyXCIsIEdlb3JnaWEsIFwiVGltZXMgTmV3IFJvbWFuXCIgc2VyaWY7XG5cbiRiYXNlLXNpemU6IDE2cHg7XG4kdGFibGV0LXNpemU6IDE2cHg7XG4kbW9iaWxlLXNpemU6IDE2cHg7XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kYnJlYWstbW9iaWxlOiA0NTBweDtcbiRicmVhay10YWJsZXQ6IDgwMHB4O1xuJGJyZWFrLWxhcHRvcDogMTAyNHB4O1xuXG4kYnJlYWstbGFuZHNjYXBlLW1vYmlsZTogODAwcHg7XG4kYnJlYWstbGFuZHNjYXBlLXRhYmxldDogMTA0OHB4O1xuJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3A6IDEyODBweDtcbiIsIkBpbXBvcnQgJy4vdmFyaWFibGVzJztcblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5AbWl4aW4gYm94LXNoYWRvdygkY29sb3I6ICMwMDAsICRkZXB0aDogMSkge1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCAxcHggKiAoJGRlcHRoIC0gMSkgcmdiYSgjMDAwLCAuMiksXG4gICAgICAgICAgICAgICAgMCAxcHggMXB4IDAgcmdiYSgjMDAwLCAuMTQpLFxuICAgICAgICAgICAgICAgIDAgMnB4IDFweCAtMXB4IHJnYmEoIzAwMCwgLjEyKTtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbkBtaXhpbiByZXNwb25kLXRvKCRtZWRpYSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSAgQGVsc2UgaWYgJG1lZGlhID09IGxhdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfUBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJcbkBpbXBvcnQgJy4uL3ZhcmlhYmxlcyc7XG5AaW1wb3J0ICcuLi9taXhpbnMnO1xuXG5tYWluIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgcGFkZGluZzogMWVtO1xuICAgIG1pbi1oZWlnaHQ6IDI0ZW07XG4gICAgd2lkdGg6IDMyZW07XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xufVxuXG4uZGV0YWlscyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgbWFyZ2luLWJvdHRvbTogMWVtO1xuXG4gICAgaW1nIHtcbiAgICAgICAgaGVpZ2h0OiA2ZW07XG4gICAgfVxuXG4gICAgLnRleHQge1xuICAgICAgICBtYXJnaW4tdG9wOiAxZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yZW07XG4gICAgfVxuXG4gICAgLmluZm8ge1xuICAgICAgICBmb250LXNpemU6IC44ZW07XG4gICAgICAgIGNvbG9yOiAkcGVuZGluZztcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIH1cbn1cblxuLnRleHQge1xuICAgIHNwYW4ge1xuICAgICAgICBjb2xvcjogJHN1Y2Nlc3M7XG4gICAgfVxuXG4gICAgLnJlcXVlc3Qge1xuICAgICAgICBjb2xvcjogJHBlbmRpbmc7XG4gICAgfVxufVxuXG4udG9vbHRpcCB7XG4gICAgZm9udC1zaXplOiAuNjVlbTtcbiAgICBjb2xvcjogJGNvbG9yLXByaW1hcnk7XG4gICAgbWFyZ2luOiAuNWVtO1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG5tYXQtZGlhbG9nLWFjdGlvbnMge1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjY2NjO1xufVxuXG5mb290ZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBidXR0b24sXG4gICAgYVtidXR0b25dIHtcbiAgICAgICAgbWluLXdpZHRoOiA4ZW07XG4gICAgfVxuXG4gICAgYSB7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgIH1cbn1cblxuLmljb24ge1xuICAgIGhlaWdodDogMS4yZW07XG4gICAgd2lkdGg6IDEuMmVtO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBmb250LXNpemU6IDJlbTtcbn1cblxuLmNvbnRlbnQge1xuICAgIHdpZHRoOiAxNnJlbTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1zaXplOiAuOGVtO1xufVxuYXBwLWljb24ge1xuICAgIHRyYW5zaXRpb246IGZvbnQtc2l6ZSAyMDBtcztcbn1cblxuLmNsb3NlIHtcbiAgICBmb250LXNpemU6IDFlbTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgICAgYXBwLWljb24ge1xuICAgICAgICAgICAgZm9udC1zaXplOiAuOGVtO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5idXR0b24ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBtYXJnaW46IDAgLjI1ZW07XG59XG5cbi5maWVsZCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwYWRkaW5nOiAuMjVlbSAuMjVlbSAuNWVtO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcblxuICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCMwMDAsIC4wNSk7XG4gICAgfVxuXG4gICAgQGluY2x1ZGUgcmVzcG9uZC10byhtb2JpbGUpIHtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgIH1cbn1cblxubGFiZWwge1xuICAgIHdpZHRoOiA4ZW07XG4gICAgbWFyZ2luLXRvcDogLjI1ZW07XG4gICAgbWFyZ2luLXJpZ2h0OiAxZW07XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgZm9udC1zaXplOiAuOGVtO1xuICAgIEBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAuNWVtO1xuICAgIH1cbn1cblxuLnZhbHVlIHtcbiAgICBmbGV4OiAxO1xuICAgIG1pbi13aWR0aDogNTAlO1xuICAgIHBhZGRpbmc6IDAgLjVlbTtcblxuICAgIC5zaG93IHtcbiAgICAgICAgZm9udC1zaXplOiAuOGVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICBjb2xvcjogJGNvbG9yLXByaW1hcnk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5saXN0IHtcbiAgICBtYXgtaGVpZ2h0OiA0ZW07XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBtYXJnaW4tbGVmdDogLS41ZW07XG4gICAgdHJhbnNpdGlvbjogbWF4LWhlaWdodCAwLjhzIGVhc2UtaW4tb3V0O1xuXG4gICAgJi5zaG93biB7XG4gICAgICAgIG1heC1oZWlnaHQ6IDEwMGVtO1xuICAgIH1cbn1cblxuLmxpc3QtaXRlbSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHBhZGRpbmc6IC4yNWVtIC41ZW07XG4gICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgJjpudGgtY2hpbGQoMm4pIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgjMDAwLCAuMDUpO1xuICAgIH1cblxuICAgIC5zdGF0dXMge1xuICAgICAgICBoZWlnaHQ6IDhweDtcbiAgICAgICAgd2lkdGg6IDhweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHN1Y2Nlc3M7XG4gICAgICAgIG1hcmdpbjogLjVlbSAuNWVtIC41ZW0gMDtcbiAgICB9XG5cbiAgICAudGV4dCB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMWVtO1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBtaW4td2lkdGg6IDUwJTtcbiAgICB9XG59XG5cbi5lbWFpbCB7XG4gICAgZm9udC1zaXplOiAuNmVtO1xufVxuXG5hIHtcbiAgICBjb2xvcjogaW5oZXJpdDtcbn1cblxuW25hbWU9XCJjbG9zZVwiXSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogLjVlbTtcbiAgICByaWdodDogLjVlbTtcbn1cblxuIiwiLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5tYWluIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBwYWRkaW5nOiAxZW07XG4gIG1pbi1oZWlnaHQ6IDI0ZW07XG4gIHdpZHRoOiAzMmVtO1xuICBtYXgtd2lkdGg6IDEwMCU7XG59XG5cbi5kZXRhaWxzIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1hcmdpbi1ib3R0b206IDFlbTtcbn1cbi5kZXRhaWxzIGltZyB7XG4gIGhlaWdodDogNmVtO1xufVxuLmRldGFpbHMgLnRleHQge1xuICBtYXJnaW4tdG9wOiAxZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtc2l6ZTogMS4yZW07XG59XG4uZGV0YWlscyAuaW5mbyB7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG4gIGNvbG9yOiAjZmZiMzAwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi50ZXh0IHNwYW4ge1xuICBjb2xvcjogIzQzYTA0Nztcbn1cbi50ZXh0IC5yZXF1ZXN0IHtcbiAgY29sb3I6ICNmZmIzMDA7XG59XG5cbi50b29sdGlwIHtcbiAgZm9udC1zaXplOiAwLjY1ZW07XG4gIGNvbG9yOiAjMTkzN2VhO1xuICBtYXJnaW46IDAuNWVtO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxubWF0LWRpYWxvZy1hY3Rpb25zIHtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNjY2M7XG59XG5cbmZvb3RlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB3aWR0aDogMTAwJTtcbn1cbmZvb3RlciBidXR0b24sXG5mb290ZXIgYVtidXR0b25dIHtcbiAgbWluLXdpZHRoOiA4ZW07XG59XG5mb290ZXIgYSB7XG4gIGNvbG9yOiAjZmZmO1xufVxuXG4uaWNvbiB7XG4gIGhlaWdodDogMS4yZW07XG4gIHdpZHRoOiAxLjJlbTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMmVtO1xufVxuXG4uY29udGVudCB7XG4gIHdpZHRoOiAxNnJlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXNpemU6IDAuOGVtO1xufVxuXG5hcHAtaWNvbiB7XG4gIHRyYW5zaXRpb246IGZvbnQtc2l6ZSAyMDBtcztcbn1cblxuLmNsb3NlIHtcbiAgZm9udC1zaXplOiAxZW07XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jbG9zZTpob3ZlciBhcHAtaWNvbiB7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG59XG5cbmJ1dHRvbiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW46IDAgMC4yNWVtO1xufVxuXG4uZmllbGQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nOiAwLjI1ZW0gMC4yNWVtIDAuNWVtO1xuICB3aWR0aDogMTAwJTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuLmZpZWxkOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5maWVsZCB7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmZpZWxkIHtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIH1cbn1cblxubGFiZWwge1xuICB3aWR0aDogOGVtO1xuICBtYXJnaW4tdG9wOiAwLjI1ZW07XG4gIG1hcmdpbi1yaWdodDogMWVtO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgZm9udC1zaXplOiAwLjhlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIGxhYmVsIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIGxhYmVsIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTtcbiAgfVxufVxuXG4udmFsdWUge1xuICBmbGV4OiAxO1xuICBtaW4td2lkdGg6IDUwJTtcbiAgcGFkZGluZzogMCAwLjVlbTtcbn1cbi52YWx1ZSAuc2hvdyB7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIGJvcmRlcjogbm9uZTtcbiAgb3V0bGluZTogbm9uZTtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi52YWx1ZSAuc2hvdzpob3ZlciB7XG4gIGNvbG9yOiAjMTkzN2VhO1xufVxuXG4ubGlzdCB7XG4gIG1heC1oZWlnaHQ6IDRlbTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgbWFyZ2luLWxlZnQ6IC0wLjVlbTtcbiAgdHJhbnNpdGlvbjogbWF4LWhlaWdodCAwLjhzIGVhc2UtaW4tb3V0O1xufVxuLmxpc3Quc2hvd24ge1xuICBtYXgtaGVpZ2h0OiAxMDBlbTtcbn1cblxuLmxpc3QtaXRlbSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDAuMjVlbSAwLjVlbTtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICB3aWR0aDogMTAwJTtcbn1cbi5saXN0LWl0ZW06bnRoLWNoaWxkKDJuKSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG59XG4ubGlzdC1pdGVtIC5zdGF0dXMge1xuICBoZWlnaHQ6IDhweDtcbiAgd2lkdGg6IDhweDtcbiAgYm9yZGVyLXJhZGl1czogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQzYTA0NztcbiAgbWFyZ2luOiAwLjVlbSAwLjVlbSAwLjVlbSAwO1xufVxuLmxpc3QtaXRlbSAudGV4dCB7XG4gIG1hcmdpbi1yaWdodDogMWVtO1xuICBmbGV4OiAxO1xuICBtaW4td2lkdGg6IDUwJTtcbn1cblxuLmVtYWlsIHtcbiAgZm9udC1zaXplOiAwLjZlbTtcbn1cblxuYSB7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuXG5bbmFtZT1jbG9zZV0ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMC41ZW07XG4gIHJpZ2h0OiAwLjVlbTtcbn0iXX0= */"] + styles: ["main[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n flex-direction: column;\n padding: 1em;\n min-height: 24em;\n width: 32em;\n max-width: 100%;\n}\n.details[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n margin-bottom: 1em;\n}\n.details[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n height: 6em;\n}\n.details[_ngcontent-%COMP%] .text[_ngcontent-%COMP%] {\n margin-top: 1em;\n font-weight: 400;\n font-size: 1.2em;\n}\n.details[_ngcontent-%COMP%] .info[_ngcontent-%COMP%] {\n font-size: 0.8em;\n color: #ffb300;\n text-align: center;\n}\n.text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: #43a047;\n}\n.text[_ngcontent-%COMP%] .request[_ngcontent-%COMP%] {\n color: #ffb300;\n}\n.tooltip[_ngcontent-%COMP%] {\n font-size: 0.65em;\n color: #1937ea;\n margin: 0.5em;\n text-decoration: underline;\n}\nmat-dialog-actions[_ngcontent-%COMP%] {\n border-top: 1px solid #ccc;\n}\nfooter[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n}\nfooter[_ngcontent-%COMP%] button[_ngcontent-%COMP%], footer[_ngcontent-%COMP%] a[button][_ngcontent-%COMP%] {\n min-width: 8em;\n}\nfooter[_ngcontent-%COMP%] a[_ngcontent-%COMP%] {\n color: #fff;\n}\n.icon[_ngcontent-%COMP%] {\n height: 1.2em;\n width: 1.2em;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 2em;\n}\n.content[_ngcontent-%COMP%] {\n width: 16rem;\n text-align: center;\n font-size: 0.8em;\n}\napp-icon[_ngcontent-%COMP%] {\n transition: font-size 200ms;\n}\n.close[_ngcontent-%COMP%] {\n font-size: 1em;\n cursor: pointer;\n}\n.close[_ngcontent-%COMP%]:hover app-icon[_ngcontent-%COMP%] {\n font-size: 0.8em;\n}\nbutton[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 0 0.25em;\n}\n.field[_ngcontent-%COMP%] {\n display: flex;\n padding: 0.25em 0.25em 0.5em;\n width: 100%;\n border-radius: 4px;\n}\n.field[_ngcontent-%COMP%]:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .field[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .field[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n}\nlabel[_ngcontent-%COMP%] {\n width: 8em;\n margin-top: 0.25em;\n margin-right: 1em;\n font-weight: bold;\n font-size: 0.8em;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n label[_ngcontent-%COMP%] {\n width: 100%;\n margin-bottom: 0.5em;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n label[_ngcontent-%COMP%] {\n width: 100%;\n margin-bottom: 0.5em;\n }\n}\n.value[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 50%;\n padding: 0 0.5em;\n}\n.value[_ngcontent-%COMP%] .show[_ngcontent-%COMP%] {\n font-size: 0.8em;\n background: none;\n border: none;\n outline: none;\n text-decoration: underline;\n cursor: pointer;\n}\n.value[_ngcontent-%COMP%] .show[_ngcontent-%COMP%]:hover {\n color: #1937ea;\n}\n.list[_ngcontent-%COMP%] {\n max-height: 4.5em;\n overflow: hidden;\n margin-left: -0.5em;\n transition: max-height 0.8s ease-in-out;\n}\n.list-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 0.25em 0.5em;\n border-radius: 8px;\n width: 100%;\n}\n.list-item[_ngcontent-%COMP%]:nth-child(2n) {\n background-color: rgba(0, 0, 0, 0.05);\n}\n.list-item[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] {\n height: 8px;\n width: 8px;\n border-radius: 100%;\n background-color: #43a047;\n margin: 0.5em 0.5em 0.5em 0;\n}\n.list-item[_ngcontent-%COMP%] .text[_ngcontent-%COMP%] {\n margin-right: 1em;\n flex: 1;\n min-width: 50%;\n}\n.email[_ngcontent-%COMP%] {\n font-size: 0.6em;\n}\na[_ngcontent-%COMP%] {\n color: inherit;\n}\n[name=close][_ngcontent-%COMP%] {\n position: absolute;\n top: 0.5em;\n right: 0.5em;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL2xlZ2FjeS1vdmVybGF5cy9zcmMvbGliL2Jvb2tpbmctY29uZmlybS9ib29raW5nLWNvbmZpcm0uY29tcG9uZW50LnNjc3MiLCJsaWJzL2xlZ2FjeS1vdmVybGF5cy9zcmMvbGliL2Jvb2tpbmctY29uZmlybS9ib29raW5nLWNvbmZpcm0uY29tcG9uZW50LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQTFEQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDNUNBOztzQkFBQTtBQ1ZBO0VBQ0ksa0JBQUE7RUFDQSxhQUFBO0VBQ0EsbUJBQUE7RUFDQSxzQkFBQTtFQUNBLFlBQUE7RUFDQSxnQkFBQTtFQUNBLFdBQUE7RUFDQSxlQUFBO0FDd0JKO0FEckJBO0VBQ0ksYUFBQTtFQUNBLG1CQUFBO0VBQ0EsdUJBQUE7RUFDQSxzQkFBQTtFQUNBLGtCQUFBO0FDd0JKO0FEdEJJO0VBQ0ksV0FBQTtBQ3dCUjtBRHJCSTtFQUNJLGVBQUE7RUFDQSxnQkFBQTtFQUNBLGdCQUFBO0FDdUJSO0FEcEJJO0VBQ0ksZ0JBQUE7RUFDQSxjRmRFO0VFZUYsa0JBQUE7QUNzQlI7QURqQkk7RUFDSSxjRjFCRTtBRzhDVjtBRGpCSTtFQUNJLGNGekJFO0FHNENWO0FEZkE7RUFDSSxpQkFBQTtFQUNBLGNGdkJZO0VFd0JaLGFBQUE7RUFDQSwwQkFBQTtBQ2tCSjtBRGZBO0VBQ0ksMEJBQUE7QUNrQko7QURmQTtFQUNJLGFBQUE7RUFDQSxtQkFBQTtFQUNBLHVCQUFBO0VBQ0EsV0FBQTtBQ2tCSjtBRGpCSTs7RUFFSSxjQUFBO0FDbUJSO0FEaEJJO0VBQ0ksV0FBQTtBQ2tCUjtBRGRBO0VBQ0ksYUFBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EsbUJBQUE7RUFDQSx1QkFBQTtFQUNBLGNBQUE7QUNpQko7QURkQTtFQUNJLFlBQUE7RUFDQSxrQkFBQTtFQUNBLGdCQUFBO0FDaUJKO0FEZkE7RUFDSSwyQkFBQTtBQ2tCSjtBRGZBO0VBQ0ksY0FBQTtFQUNBLGVBQUE7QUNrQko7QURmUTtFQUNJLGdCQUFBO0FDaUJaO0FEWkE7RUFDSSxhQUFBO0VBQ0EsbUJBQUE7RUFDQSx1QkFBQTtFQUNBLGdCQUFBO0FDZUo7QURaQTtFQUNJLGFBQUE7RUFDQSw0QkFBQTtFQUNBLFdBQUE7RUFDQSxrQkFBQTtBQ2VKO0FEYkk7RUFDSSxxQ0FBQTtBQ2VSO0FGakhRO0VDMkZSO0lBV1EsZUFBQTtFQ2VOO0FBQ0Y7QUZuSFE7RUN3RlI7SUFXUSxlQUFBO0VDb0JOO0FBQ0Y7QURqQkE7RUFDSSxVQUFBO0VBQ0Esa0JBQUE7RUFDQSxpQkFBQTtFQUNBLGlCQUFBO0VBQ0EsZ0JBQUE7QUNvQko7QUZuSVE7RUMwR1I7SUFPUSxXQUFBO0lBQ0Esb0JBQUE7RUNzQk47QUFDRjtBRnRJUTtFQ3VHUjtJQU9RLFdBQUE7SUFDQSxvQkFBQTtFQzRCTjtBQUNGO0FEekJBO0VBQ0ksT0FBQTtFQUNBLGNBQUE7RUFDQSxnQkFBQTtBQzRCSjtBRDFCSTtFQUNJLGdCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtFQUNBLDBCQUFBO0VBQ0EsZUFBQTtBQzRCUjtBRDFCUTtFQUNJLGNGNUhJO0FHd0poQjtBRHZCQTtFQUNJLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxtQkFBQTtFQUNBLHVDQUFBO0FDMEJKO0FEdEJBO0VBQ0ksYUFBQTtFQUNBLG1CQUFBO0VBQ0EscUJBQUE7RUFDQSxrQkFBQTtFQUNBLFdBQUE7QUN5Qko7QUR2Qkk7RUFDSSxxQ0FBQTtBQ3lCUjtBRHRCSTtFQUNJLFdBQUE7RUFDQSxVQUFBO0VBQ0EsbUJBQUE7RUFDQSx5QkZyS0U7RUVzS0YsMkJBQUE7QUN3QlI7QURyQkk7RUFDSSxpQkFBQTtFQUNBLE9BQUE7RUFDQSxjQUFBO0FDdUJSO0FEbkJBO0VBQ0ksZ0JBQUE7QUNzQko7QURuQkE7RUFDSSxjQUFBO0FDc0JKO0FEbkJBO0VBQ0ksa0JBQUE7RUFDQSxVQUFBO0VBQ0EsWUFBQTtBQ3NCSiIsImZpbGUiOiJsaWJzL2xlZ2FjeS1vdmVybGF5cy9zcmMvbGliL2Jvb2tpbmctY29uZmlybS9ib29raW5nLWNvbmZpcm0uY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRjb2xvci1icmFuZC1lbGVjdHJpYy1ibHVlOiAjMjI1MWZmO1xuJGNvbG9yLWJyYW5kLWRlZXAtYmx1ZTogIzA1MWMyYztcbiRjb2xvci1icmFuZC1jeWFuOiAjMDBhOWY0O1xuXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGZvbnQtZGFyazogIzAwMDtcbiRmb250LWxpZ2h0OiAjZmZmO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcbiRncmVlbjE6ICMyMTk2NTM7XG5cbiRwZW5kaW5nOiAjZmZiMzAwO1xuJHBlbmRpbmctbGlnaHQ6IGxpZ2h0ZW4oJHBlbmRpbmcsIDEwKTtcbiRwZW5kaW5nLWRhcms6IGRhcmtlbigkcGVuZGluZywgMTApO1xuXG4kZXJyb3I6ICNlNTM5MzU7XG4kZXJyb3ItbGlnaHQ6IGxpZ2h0ZW4oJGVycm9yLCAxMCk7XG4kZXJyb3ItZGFyazogZGFya2VuKCRlcnJvciwgMTApO1xuXG4kY29sb3ItcHJpbWFyeTogIzE5MzdlYTtcbiRjb2xvci1wcmltYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG4kY29sb3ItcHJpbWFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcblxuJGNvbG9yLXNlY29uZGFyeTogIzQyODVGNDtcbiRjb2xvci1zZWNvbmRhcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuJGNvbG9yLXNlY29uZGFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuXG4kYmFja2dyb3VuZDogI2YwZjBmMDtcbiRmb290ZXItYmFjazogIzI2MzIzODtcbiRoZWFkZXItYmFjazogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMDUxQzJDLCAjMDUxQzJDIDQwJSwgIzBCMjQ1MyA2MCUsICMxRjQwRTYgMTAwJSk7XG5cbiRjb2xvci10ZXJuYXJ5OiAjMDUxYzJjO1xuXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cblxuJGZvbnQtc3RhY2s6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuXG4kaGVhZGluZy1mb250OiBcIkxhcmlzaE1jS2luc2V5XCIsICdHZW9yZ2lhJywgc2VyaWY7XG4kZm9udDogJGZvbnQtc3RhY2s7XG5cbiRmb250LWZhbWlseS1wcmltYXJ5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbiRmb250LWZhbWlseS1zZWNvbmRhcnk6IFwiQm93ZXJcIiwgR2VvcmdpYSwgXCJUaW1lcyBOZXcgUm9tYW5cIiBzZXJpZjtcblxuJGJhc2Utc2l6ZTogMTZweDtcbiR0YWJsZXQtc2l6ZTogMTZweDtcbiRtb2JpbGUtc2l6ZTogMTZweDtcblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbiRicmVhay1tb2JpbGU6IDQ1MHB4O1xuJGJyZWFrLXRhYmxldDogODAwcHg7XG4kYnJlYWstbGFwdG9wOiAxMDI0cHg7XG5cbiRicmVhay1sYW5kc2NhcGUtbW9iaWxlOiA4MDBweDtcbiRicmVhay1sYW5kc2NhcGUtdGFibGV0OiAxMDQ4cHg7XG4kYnJlYWstbGFuZHNjYXBlLWxhcHRvcDogMTI4MHB4O1xuIiwiQGltcG9ydCAnLi92YXJpYWJsZXMnO1xuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbkBtaXhpbiBib3gtc2hhZG93KCRjb2xvcjogIzAwMCwgJGRlcHRoOiAxKSB7XG4gICAgYm94LXNoYWRvdzogMCAxcHggM3B4IDFweCAqICgkZGVwdGggLSAxKSByZ2JhKCMwMDAsIC4yKSxcbiAgICAgICAgICAgICAgICAwIDFweCAxcHggMCByZ2JhKCMwMDAsIC4xNCksXG4gICAgICAgICAgICAgICAgMCAycHggMXB4IC0xcHggcmdiYSgjMDAwLCAuMTIpO1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuQG1peGluIHJlc3BvbmQtdG8oJG1lZGlhKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9ICBAZWxzZSBpZiAkbWVkaWEgPT0gbGF0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9QGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIlxuQGltcG9ydCAnLi4vdmFyaWFibGVzJztcbkBpbXBvcnQgJy4uL21peGlucyc7XG5cbm1haW4ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBwYWRkaW5nOiAxZW07XG4gICAgbWluLWhlaWdodDogMjRlbTtcbiAgICB3aWR0aDogMzJlbTtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG59XG5cbi5kZXRhaWxzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBtYXJnaW4tYm90dG9tOiAxZW07XG5cbiAgICBpbWcge1xuICAgICAgICBoZWlnaHQ6IDZlbTtcbiAgICB9XG5cbiAgICAudGV4dCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDFlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgZm9udC1zaXplOiAxLjJlbTtcbiAgICB9XG5cbiAgICAuaW5mbyB7XG4gICAgICAgIGZvbnQtc2l6ZTogLjhlbTtcbiAgICAgICAgY29sb3I6ICRwZW5kaW5nO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgfVxufVxuXG4udGV4dCB7XG4gICAgc3BhbiB7XG4gICAgICAgIGNvbG9yOiAkc3VjY2VzcztcbiAgICB9XG5cbiAgICAucmVxdWVzdCB7XG4gICAgICAgIGNvbG9yOiAkcGVuZGluZztcbiAgICB9XG59XG5cbi50b29sdGlwIHtcbiAgICBmb250LXNpemU6IC42NWVtO1xuICAgIGNvbG9yOiAkY29sb3ItcHJpbWFyeTtcbiAgICBtYXJnaW46IC41ZW07XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbm1hdC1kaWFsb2ctYWN0aW9ucyB7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNjY2M7XG59XG5cbmZvb3RlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJ1dHRvbixcbiAgICBhW2J1dHRvbl0ge1xuICAgICAgICBtaW4td2lkdGg6IDhlbTtcbiAgICB9XG5cbiAgICBhIHtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgfVxufVxuXG4uaWNvbiB7XG4gICAgaGVpZ2h0OiAxLjJlbTtcbiAgICB3aWR0aDogMS4yZW07XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGZvbnQtc2l6ZTogMmVtO1xufVxuXG4uY29udGVudCB7XG4gICAgd2lkdGg6IDE2cmVtO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LXNpemU6IC44ZW07XG59XG5hcHAtaWNvbiB7XG4gICAgdHJhbnNpdGlvbjogZm9udC1zaXplIDIwMG1zO1xufVxuXG4uY2xvc2Uge1xuICAgIGZvbnQtc2l6ZTogMWVtO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICY6aG92ZXIge1xuICAgICAgICBhcHAtaWNvbiB7XG4gICAgICAgICAgICBmb250LXNpemU6IC44ZW07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmJ1dHRvbiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIG1hcmdpbjogMCAuMjVlbTtcbn1cblxuLmZpZWxkIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBhZGRpbmc6IC4yNWVtIC4yNWVtIC41ZW07XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuXG4gICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoIzAwMCwgLjA1KTtcbiAgICB9XG5cbiAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgfVxufVxuXG5sYWJlbCB7XG4gICAgd2lkdGg6IDhlbTtcbiAgICBtYXJnaW4tdG9wOiAuMjVlbTtcbiAgICBtYXJnaW4tcmlnaHQ6IDFlbTtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBmb250LXNpemU6IC44ZW07XG4gICAgQGluY2x1ZGUgcmVzcG9uZC10byhtb2JpbGUpIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IC41ZW07XG4gICAgfVxufVxuXG4udmFsdWUge1xuICAgIGZsZXg6IDE7XG4gICAgbWluLXdpZHRoOiA1MCU7XG4gICAgcGFkZGluZzogMCAuNWVtO1xuXG4gICAgLnNob3cge1xuICAgICAgICBmb250LXNpemU6IC44ZW07XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIGNvbG9yOiAkY29sb3ItcHJpbWFyeTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmxpc3Qge1xuICAgIG1heC1oZWlnaHQ6IDQuNWVtO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgbWFyZ2luLWxlZnQ6IC0uNWVtO1xuICAgIHRyYW5zaXRpb246IG1heC1oZWlnaHQgMC44cyBlYXNlLWluLW91dDtcblxufVxuXG4ubGlzdC1pdGVtIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgcGFkZGluZzogLjI1ZW0gLjVlbTtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICAmOm50aC1jaGlsZCgybikge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCMwMDAsIC4wNSk7XG4gICAgfVxuXG4gICAgLnN0YXR1cyB7XG4gICAgICAgIGhlaWdodDogOHB4O1xuICAgICAgICB3aWR0aDogOHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc3VjY2VzcztcbiAgICAgICAgbWFyZ2luOiAuNWVtIC41ZW0gLjVlbSAwO1xuICAgIH1cblxuICAgIC50ZXh0IHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxZW07XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIG1pbi13aWR0aDogNTAlO1xuICAgIH1cbn1cblxuLmVtYWlsIHtcbiAgICBmb250LXNpemU6IC42ZW07XG59XG5cbmEge1xuICAgIGNvbG9yOiBpbmhlcml0O1xufVxuXG5bbmFtZT1cImNsb3NlXCJdIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAuNWVtO1xuICAgIHJpZ2h0OiAuNWVtO1xufVxuXG4iLCIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbm1haW4ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHBhZGRpbmc6IDFlbTtcbiAgbWluLWhlaWdodDogMjRlbTtcbiAgd2lkdGg6IDMyZW07XG4gIG1heC13aWR0aDogMTAwJTtcbn1cblxuLmRldGFpbHMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgbWFyZ2luLWJvdHRvbTogMWVtO1xufVxuLmRldGFpbHMgaW1nIHtcbiAgaGVpZ2h0OiA2ZW07XG59XG4uZGV0YWlscyAudGV4dCB7XG4gIG1hcmdpbi10b3A6IDFlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgZm9udC1zaXplOiAxLjJlbTtcbn1cbi5kZXRhaWxzIC5pbmZvIHtcbiAgZm9udC1zaXplOiAwLjhlbTtcbiAgY29sb3I6ICNmZmIzMDA7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLnRleHQgc3BhbiB7XG4gIGNvbG9yOiAjNDNhMDQ3O1xufVxuLnRleHQgLnJlcXVlc3Qge1xuICBjb2xvcjogI2ZmYjMwMDtcbn1cblxuLnRvb2x0aXAge1xuICBmb250LXNpemU6IDAuNjVlbTtcbiAgY29sb3I6ICMxOTM3ZWE7XG4gIG1hcmdpbjogMC41ZW07XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG5tYXQtZGlhbG9nLWFjdGlvbnMge1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2NjYztcbn1cblxuZm9vdGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHdpZHRoOiAxMDAlO1xufVxuZm9vdGVyIGJ1dHRvbixcbmZvb3RlciBhW2J1dHRvbl0ge1xuICBtaW4td2lkdGg6IDhlbTtcbn1cbmZvb3RlciBhIHtcbiAgY29sb3I6ICNmZmY7XG59XG5cbi5pY29uIHtcbiAgaGVpZ2h0OiAxLjJlbTtcbiAgd2lkdGg6IDEuMmVtO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZm9udC1zaXplOiAyZW07XG59XG5cbi5jb250ZW50IHtcbiAgd2lkdGg6IDE2cmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG59XG5cbmFwcC1pY29uIHtcbiAgdHJhbnNpdGlvbjogZm9udC1zaXplIDIwMG1zO1xufVxuXG4uY2xvc2Uge1xuICBmb250LXNpemU6IDFlbTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNsb3NlOmhvdmVyIGFwcC1pY29uIHtcbiAgZm9udC1zaXplOiAwLjhlbTtcbn1cblxuYnV0dG9uIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG1hcmdpbjogMCAwLjI1ZW07XG59XG5cbi5maWVsZCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmc6IDAuMjVlbSAwLjI1ZW0gMC41ZW07XG4gIHdpZHRoOiAxMDAlO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG4uZmllbGQ6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmZpZWxkIHtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuZmllbGQge1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgfVxufVxuXG5sYWJlbCB7XG4gIHdpZHRoOiA4ZW07XG4gIG1hcmdpbi10b3A6IDAuMjVlbTtcbiAgbWFyZ2luLXJpZ2h0OiAxZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBmb250LXNpemU6IDAuOGVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgbGFiZWwge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206IDAuNWVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgbGFiZWwge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206IDAuNWVtO1xuICB9XG59XG5cbi52YWx1ZSB7XG4gIGZsZXg6IDE7XG4gIG1pbi13aWR0aDogNTAlO1xuICBwYWRkaW5nOiAwIDAuNWVtO1xufVxuLnZhbHVlIC5zaG93IHtcbiAgZm9udC1zaXplOiAwLjhlbTtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgYm9yZGVyOiBub25lO1xuICBvdXRsaW5lOiBub25lO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLnZhbHVlIC5zaG93OmhvdmVyIHtcbiAgY29sb3I6ICMxOTM3ZWE7XG59XG5cbi5saXN0IHtcbiAgbWF4LWhlaWdodDogNC41ZW07XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIG1hcmdpbi1sZWZ0OiAtMC41ZW07XG4gIHRyYW5zaXRpb246IG1heC1oZWlnaHQgMC44cyBlYXNlLWluLW91dDtcbn1cblxuLmxpc3QtaXRlbSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDAuMjVlbSAwLjVlbTtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICB3aWR0aDogMTAwJTtcbn1cbi5saXN0LWl0ZW06bnRoLWNoaWxkKDJuKSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG59XG4ubGlzdC1pdGVtIC5zdGF0dXMge1xuICBoZWlnaHQ6IDhweDtcbiAgd2lkdGg6IDhweDtcbiAgYm9yZGVyLXJhZGl1czogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQzYTA0NztcbiAgbWFyZ2luOiAwLjVlbSAwLjVlbSAwLjVlbSAwO1xufVxuLmxpc3QtaXRlbSAudGV4dCB7XG4gIG1hcmdpbi1yaWdodDogMWVtO1xuICBmbGV4OiAxO1xuICBtaW4td2lkdGg6IDUwJTtcbn1cblxuLmVtYWlsIHtcbiAgZm9udC1zaXplOiAwLjZlbTtcbn1cblxuYSB7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuXG5bbmFtZT1jbG9zZV0ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMC41ZW07XG4gIHJpZ2h0OiAwLjVlbTtcbn0iXX0= */"] }); /*@__PURE__*/ @@ -19757,10 +19875,24 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons type: i1.SettingsService }, { type: i1.CloseDialogService + }, { + type: i0.Renderer2 }]; }, { event: [{ type: core_1.Output + }], + attendeesListRef: [{ + type: core_1.ViewChild, + args: ['attendeesListRef'] + }], + locationsListRef: [{ + type: core_1.ViewChild, + args: ['locationsListRef'] + }], + cateringListRef: [{ + type: core_1.ViewChild, + args: ['cateringListRef'] }] }); })(); @@ -19849,61 +19981,61 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/slide-toggle.js"); var i6 = __webpack_require__( + /*! @angular/material/checkbox */ + "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/checkbox.js"); + + var i7 = __webpack_require__( /*! ../../../../legacy-ui/src/lib/custom-fields/action-field/action-field.component */ "../../libs/legacy-ui/src/lib/custom-fields/action-field/action-field.component.ts"); - var i7 = __webpack_require__( + var i8 = __webpack_require__( /*! @angular/material/form-field */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/form-field.js"); - var i8 = __webpack_require__( + var i9 = __webpack_require__( /*! @angular/material/input */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/input.js"); - var i9 = __webpack_require__( + var i10 = __webpack_require__( /*! ../../../../ui/src/lib/date-tz-date-picker/date-tz-date-picker.component */ "../../libs/ui/src/lib/date-tz-date-picker/date-tz-date-picker.component.ts"); - var i10 = __webpack_require__( + var i11 = __webpack_require__( /*! ../../../../ui/src/lib/date-tz-time-field/date-tz-time-field.component */ "../../libs/ui/src/lib/date-tz-time-field/date-tz-time-field.component.ts"); - var i11 = __webpack_require__( + var i12 = __webpack_require__( /*! ../../../../ui/src/lib/date-tz-duration-field/date-tz-duration-field.component */ "../../libs/ui/src/lib/date-tz-duration-field/date-tz-duration-field.component.ts"); - var i12 = __webpack_require__( + var i13 = __webpack_require__( /*! ../../../../ui/src/lib/recurrence-booking-form/recurrence-booking-form.component */ "../../libs/ui/src/lib/recurrence-booking-form/recurrence-booking-form.component.ts"); - var i13 = __webpack_require__( + var i14 = __webpack_require__( /*! ../../../../legacy-ui/src/lib/custom-fields/user-search-field/user-search-field.component */ "../../libs/legacy-ui/src/lib/custom-fields/user-search-field/user-search-field.component.ts"); - var i14 = __webpack_require__( + var i15 = __webpack_require__( /*! @angular/material/select */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/select.js"); - var i15 = __webpack_require__( + var i16 = __webpack_require__( /*! @angular/material/core */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/core.js"); - var i16 = __webpack_require__( + var i17 = __webpack_require__( /*! ../../../../legacy-ui/src/lib/custom-fields/user-list-field/user-list-field.component */ "../../libs/legacy-ui/src/lib/custom-fields/user-list-field/user-list-field.component.ts"); - var i17 = __webpack_require__( + var i18 = __webpack_require__( /*! @angular/material/chips */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/chips.js"); - var i18 = __webpack_require__( + var i19 = __webpack_require__( /*! @angular/material/button */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/button.js"); - var i19 = __webpack_require__( - /*! @angular/material/checkbox */ - "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/checkbox.js"); - var i20 = __webpack_require__( /*! @tinymce/tinymce-angular */ "../../node_modules/@tinymce/tinymce-angular/__ivy_ngcc__/fesm2015/tinymce-tinymce-angular.js"); @@ -19922,17 +20054,17 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons function BookingFormComponent_div_0_div_1_Template(rf, ctx) { if (rf & 1) { - var _r16 = i0.ɵɵgetCurrentView(); + var _r17 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div", 21); - i0.ɵɵelementStart(1, "label", 22); + i0.ɵɵelementStart(0, "div", 26); + i0.ɵɵelementStart(1, "label", 27); i0.ɵɵi18n(2, I18N_0); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(3, "an-action-field", 23); + i0.ɵɵelementStart(3, "an-action-field", 28); i0.ɵɵlistener("onAction", function BookingFormComponent_div_0_div_1_Template_an_action_field_onAction_3_listener() { - i0.ɵɵrestoreView(_r16); - var ctx_r15 = i0.ɵɵnextContext(2); - return ctx_r15.openSpacesModal(); + i0.ɵɵrestoreView(_r17); + var ctx_r16 = i0.ɵɵnextContext(2); + return ctx_r16.openSpacesModal(); }); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); @@ -19992,33 +20124,33 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } if (rf & 2) { - var ctx_r17 = i0.ɵɵnextContext(3); + var ctx_r18 = i0.ɵɵnextContext(3); i0.ɵɵadvance(1); - i0.ɵɵi18nExp((ctx_r17.form == null ? null : ctx_r17.form.get("title").errors) && (ctx_r17.form == null ? null : ctx_r17.form.get("title").hasError("pattern")) ? "Some special characters (^=`~!@#$%*{};:'_\",.<>) are not allowed" : "Title is required"); + i0.ɵɵi18nExp((ctx_r18.form == null ? null : ctx_r18.form.get("title").errors) && (ctx_r18.form == null ? null : ctx_r18.form.get("title").hasError("pattern")) ? "Some special characters (^=`~!@#$%*{};:'_\",.<>) are not allowed" : "Title is required"); i0.ɵɵi18nApply(1); } } function BookingFormComponent_div_0_div_2_Template(rf, ctx) { if (rf & 1) { - var _r19 = i0.ɵɵgetCurrentView(); + var _r20 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div", 24); - i0.ɵɵelementStart(1, "label", 25); + i0.ɵɵelementStart(0, "div", 29); + i0.ɵɵelementStart(1, "label", 30); i0.ɵɵi18nStart(2, I18N_2); i0.ɵɵelement(3, "span"); i0.ɵɵi18nEnd(); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(4, "mat-form-field", 26); - i0.ɵɵelementStart(5, "input", 27); + i0.ɵɵelementStart(4, "mat-form-field", 31); + i0.ɵɵelementStart(5, "input", 32); i0.ɵɵi18nAttributes(6, _c6); i0.ɵɵlistener("blur", function BookingFormComponent_div_0_div_2_Template_input_blur_5_listener() { - i0.ɵɵrestoreView(_r19); - var ctx_r18 = i0.ɵɵnextContext(2); - return ctx_r18.trim("title"); + i0.ɵɵrestoreView(_r20); + var ctx_r19 = i0.ɵɵnextContext(2); + return ctx_r19.trim("title"); }); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(7, BookingFormComponent_div_0_div_2_mat_error_7_Template, 2, 1, "mat-error", 28); + i0.ɵɵtemplate(7, BookingFormComponent_div_0_div_2_mat_error_7_Template, 2, 1, "mat-error", 33); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } @@ -20046,7 +20178,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons function BookingFormComponent_div_0_div_3_div_1_div_4_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 35); + i0.ɵɵelementStart(0, "div", 40); i0.ɵɵtext(1, " Date and time must be in the future "); i0.ɵɵelementEnd(); } @@ -20054,29 +20186,29 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons function BookingFormComponent_div_0_div_3_div_1_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 31); - i0.ɵɵelementStart(1, "label", 32); + i0.ɵɵelementStart(0, "div", 36); + i0.ɵɵelementStart(1, "label", 37); i0.ɵɵi18n(2, I18N_9); i0.ɵɵelementEnd(); - i0.ɵɵelement(3, "date-tz-date-picker", 33); - i0.ɵɵtemplate(4, BookingFormComponent_div_0_div_3_div_1_div_4_Template, 2, 0, "div", 34); + i0.ɵɵelement(3, "date-tz-date-picker", 38); + i0.ɵɵtemplate(4, BookingFormComponent_div_0_div_3_div_1_div_4_Template, 2, 0, "div", 39); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r20 = i0.ɵɵnextContext(3); + var ctx_r21 = i0.ɵɵnextContext(3); i0.ɵɵadvance(3); - i0.ɵɵclassProp("full-width", ctx_r20.form.controls.action.value === "booking_clone"); - i0.ɵɵproperty("error", ctx_r20.form.controls.dateTz.touched && ctx_r20.form.controls.dateTz.invalid && ctx_r20.form.controls.dateTz.errors.date)("fromDateTz", ctx_r20.fromDateTz)("untilDateTz", ctx_r20.isConcierge ? ctx_r20.untilDateTz : null)("invalid", ctx_r20.form.controls.dateTz.invalid)("can_pick_today", false); + i0.ɵɵclassProp("full-width", ctx_r21.form.controls.action.value === "booking_clone"); + i0.ɵɵproperty("error", ctx_r21.form.controls.dateTz.touched && ctx_r21.form.controls.dateTz.invalid && ctx_r21.form.controls.dateTz.errors.date)("fromDateTz", ctx_r21.fromDateTz)("untilDateTz", ctx_r21.isConcierge ? ctx_r21.untilDateTz : null)("invalid", ctx_r21.form.controls.dateTz.invalid)("can_pick_today", false); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx_r20.form.controls.dateTz.touched && ctx_r20.form.controls.dateTz.invalid && ctx_r20.form.controls.dateTz.errors.date); + i0.ɵɵproperty("ngIf", ctx_r21.form.controls.dateTz.touched && ctx_r21.form.controls.dateTz.invalid && ctx_r21.form.controls.dateTz.errors.date); } } function BookingFormComponent_div_0_div_3_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 29); - i0.ɵɵtemplate(1, BookingFormComponent_div_0_div_3_div_1_Template, 5, 8, "div", 30); + i0.ɵɵelementStart(0, "div", 34); + i0.ɵɵtemplate(1, BookingFormComponent_div_0_div_3_div_1_Template, 5, 8, "div", 35); i0.ɵɵelementEnd(); } @@ -20101,7 +20233,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons function BookingFormComponent_div_0_div_5_div_4_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 35); + i0.ɵɵelementStart(0, "div", 40); i0.ɵɵtext(1, " Date and time must be in the future "); i0.ɵɵelementEnd(); } @@ -20115,20 +20247,20 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons function BookingFormComponent_div_0_div_5_Template(rf, ctx) { if (rf & 1) { - var _r24 = i0.ɵɵgetCurrentView(); + var _r25 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div", 36); - i0.ɵɵelementStart(1, "label", 37); + i0.ɵɵelementStart(0, "div", 41); + i0.ɵɵelementStart(1, "label", 42); i0.ɵɵi18n(2, I18N_11); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(3, "date-tz-time-field", 38); + i0.ɵɵelementStart(3, "date-tz-time-field", 43); i0.ɵɵlistener("ngModelChange", function BookingFormComponent_div_0_div_5_Template_date_tz_time_field_ngModelChange_3_listener($event) { - i0.ɵɵrestoreView(_r24); - var ctx_r23 = i0.ɵɵnextContext(2); - return ctx_r23.form.controls.dateTz.setValue($event); + i0.ɵɵrestoreView(_r25); + var ctx_r24 = i0.ɵɵnextContext(2); + return ctx_r24.form.controls.dateTz.setValue($event); }); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(4, BookingFormComponent_div_0_div_5_div_4_Template, 2, 0, "div", 34); + i0.ɵɵtemplate(4, BookingFormComponent_div_0_div_5_div_4_Template, 2, 0, "div", 39); i0.ɵɵelementEnd(); } @@ -20155,7 +20287,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons function BookingFormComponent_div_0_div_6_div_5_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 35); + i0.ɵɵelementStart(0, "div", 40); i0.ɵɵtext(1, " Duration is invalid. End time must be in the future "); i0.ɵɵelementEnd(); } @@ -20163,14 +20295,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons function BookingFormComponent_div_0_div_6_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 39); - i0.ɵɵelementStart(1, "div", 40); - i0.ɵɵelementStart(2, "label", 41); + i0.ɵɵelementStart(0, "div", 44); + i0.ɵɵelementStart(1, "div", 45); + i0.ɵɵelementStart(2, "label", 46); i0.ɵɵi18n(3, I18N_14); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); - i0.ɵɵelement(4, "date-tz-duration-field", 42); - i0.ɵɵtemplate(5, BookingFormComponent_div_0_div_6_div_5_Template, 2, 0, "div", 34); + i0.ɵɵelement(4, "date-tz-duration-field", 47); + i0.ɵɵtemplate(5, BookingFormComponent_div_0_div_6_div_5_Template, 2, 0, "div", 39); i0.ɵɵelementEnd(); } @@ -20183,9 +20315,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } } - function BookingFormComponent_div_0_div_7_Template(rf, ctx) { + function BookingFormComponent_div_0_div_8_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 43); + i0.ɵɵelementStart(0, "div", 48); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } @@ -20197,14 +20329,22 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } } - function BookingFormComponent_div_0_recurrence_booking_form_15_Template(rf, ctx) { + function BookingFormComponent_div_0_div_9_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelement(0, "recurrence-booking-form", 44); + i0.ɵɵelementStart(0, "div", 49); + i0.ɵɵtext(1, " Warning: Changing the booking time outside of catering hours will drop your catering order. "); + i0.ɵɵelementEnd(); + } + } + + function BookingFormComponent_div_0_recurrence_booking_form_22_Template(rf, ctx) { + if (rf & 1) { + i0.ɵɵelement(0, "recurrence-booking-form", 50); } if (rf & 2) { - var ctx_r7 = i0.ɵɵnextContext(2); - i0.ɵɵproperty("form", ctx_r7.form); + var ctx_r8 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("form", ctx_r8.form); } } @@ -20220,62 +20360,62 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons I18N_16 = $localize(_templateObject8()); } - function BookingFormComponent_div_0_div_16_a_user_search_field_3_Template(rf, ctx) { + function BookingFormComponent_div_0_div_23_a_user_search_field_3_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelement(0, "a-user-search-field", 49); + i0.ɵɵelement(0, "a-user-search-field", 55); } } - function BookingFormComponent_div_0_div_16_mat_form_field_4_mat_option_2_Template(rf, ctx) { + function BookingFormComponent_div_0_div_23_mat_form_field_4_mat_option_2_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "mat-option", 52); + i0.ɵɵelementStart(0, "mat-option", 58); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { - var user_r29 = ctx.$implicit; - i0.ɵɵproperty("value", user_r29); + var user_r30 = ctx.$implicit; + i0.ɵɵproperty("value", user_r30); i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate1(" ", user_r29.name || user_r29.email, " "); + i0.ɵɵtextInterpolate1(" ", user_r30.name || user_r30.email, " "); } } - function BookingFormComponent_div_0_div_16_mat_form_field_4_Template(rf, ctx) { + function BookingFormComponent_div_0_div_23_mat_form_field_4_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "mat-form-field", 26); - i0.ɵɵelementStart(1, "mat-select", 50); - i0.ɵɵtemplate(2, BookingFormComponent_div_0_div_16_mat_form_field_4_mat_option_2_Template, 2, 2, "mat-option", 51); + i0.ɵɵelementStart(0, "mat-form-field", 31); + i0.ɵɵelementStart(1, "mat-select", 56); + i0.ɵɵtemplate(2, BookingFormComponent_div_0_div_23_mat_form_field_4_mat_option_2_Template, 2, 2, "mat-option", 57); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r27 = i0.ɵɵnextContext(3); + var ctx_r28 = i0.ɵɵnextContext(3); i0.ɵɵadvance(1); - i0.ɵɵproperty("placeholder", ctx_r27.form.controls.organiser.value.name || ctx_r27.form.controls.organiser.value.email); + i0.ɵɵproperty("placeholder", ctx_r28.form.controls.organiser.value.name || ctx_r28.form.controls.organiser.value.email); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngForOf", ctx_r27.user_list); + i0.ɵɵproperty("ngForOf", ctx_r28.user_list); } } - function BookingFormComponent_div_0_div_16_Template(rf, ctx) { + function BookingFormComponent_div_0_div_23_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 45); - i0.ɵɵelementStart(1, "label", 46); + i0.ɵɵelementStart(0, "div", 51); + i0.ɵɵelementStart(1, "label", 52); i0.ɵɵi18n(2, I18N_16); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(3, BookingFormComponent_div_0_div_16_a_user_search_field_3_Template, 1, 0, "a-user-search-field", 47); - i0.ɵɵtemplate(4, BookingFormComponent_div_0_div_16_mat_form_field_4_Template, 3, 2, "mat-form-field", 48); + i0.ɵɵtemplate(3, BookingFormComponent_div_0_div_23_a_user_search_field_3_Template, 1, 0, "a-user-search-field", 53); + i0.ɵɵtemplate(4, BookingFormComponent_div_0_div_23_mat_form_field_4_Template, 3, 2, "mat-form-field", 54); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r8 = i0.ɵɵnextContext(2); + var ctx_r9 = i0.ɵɵnextContext(2); i0.ɵɵadvance(3); - i0.ɵɵproperty("ngIf", ctx_r8.isConcierge); + i0.ɵɵproperty("ngIf", ctx_r9.isConcierge); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", !ctx_r8.isConcierge); + i0.ɵɵproperty("ngIf", !ctx_r9.isConcierge); } } @@ -20305,7 +20445,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons I18N_20 = $localize(_templateObject10(), "\uFFFD0\uFFFD"); } - function BookingFormComponent_div_0_div_17_mat_error_4_Template(rf, ctx) { + function BookingFormComponent_div_0_div_24_mat_error_4_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "mat-error"); i0.ɵɵi18n(1, I18N_20); @@ -20313,36 +20453,36 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } if (rf & 2) { - var ctx_r30 = i0.ɵɵnextContext(3); + var ctx_r31 = i0.ɵɵnextContext(3); i0.ɵɵadvance(1); - i0.ɵɵi18nExp(ctx_r30.form == null ? null : ctx_r30.form.get("attendees").errors == null ? null : ctx_r30.form.get("attendees").errors.customError); + i0.ɵɵi18nExp(ctx_r31.form == null ? null : ctx_r31.form.get("attendees").errors == null ? null : ctx_r31.form.get("attendees").errors.customError); i0.ɵɵi18nApply(1); } } - function BookingFormComponent_div_0_div_17_Template(rf, ctx) { + function BookingFormComponent_div_0_div_24_Template(rf, ctx) { if (rf & 1) { - var _r32 = i0.ɵɵgetCurrentView(); + var _r33 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div", 53); - i0.ɵɵelementStart(1, "label", 54); + i0.ɵɵelementStart(0, "div", 59); + i0.ɵɵelementStart(1, "label", 60); i0.ɵɵi18n(2, I18N_18); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(3, "a-user-list-field", 55); - i0.ɵɵlistener("newUser", function BookingFormComponent_div_0_div_17_Template_a_user_list_field_newUser_3_listener() { - i0.ɵɵrestoreView(_r32); - var ctx_r31 = i0.ɵɵnextContext(2); - return ctx_r31.openNewUserModal(); + i0.ɵɵelementStart(3, "a-user-list-field", 61); + i0.ɵɵlistener("newUser", function BookingFormComponent_div_0_div_24_Template_a_user_list_field_newUser_3_listener() { + i0.ɵɵrestoreView(_r33); + var ctx_r32 = i0.ɵɵnextContext(2); + return ctx_r32.openNewUserModal(); }); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(4, BookingFormComponent_div_0_div_17_mat_error_4_Template, 2, 1, "mat-error", 28); + i0.ɵɵtemplate(4, BookingFormComponent_div_0_div_24_mat_error_4_Template, 2, 1, "mat-error", 33); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r9 = i0.ɵɵnextContext(2); + var ctx_r10 = i0.ɵɵnextContext(2); i0.ɵɵadvance(4); - i0.ɵɵproperty("ngIf", ctx_r9.form.controls.attendees.invalid); + i0.ɵɵproperty("ngIf", ctx_r10.form.controls.attendees.invalid); } } @@ -20382,7 +20522,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons I18N_27 = $localize(_templateObject13(), "\uFFFD0\uFFFD"); } - function BookingFormComponent_div_0_div_18_mat_error_9_Template(rf, ctx) { + function BookingFormComponent_div_0_div_25_mat_error_9_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "mat-error"); i0.ɵɵi18n(1, I18N_27); @@ -20390,86 +20530,86 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } if (rf & 2) { - var ctx_r34 = i0.ɵɵnextContext(3); + var ctx_r35 = i0.ɵɵnextContext(3); i0.ɵɵadvance(1); - i0.ɵɵi18nExp((ctx_r34.form == null ? null : ctx_r34.form.get("company").errors) && (ctx_r34.form == null ? null : ctx_r34.form.get("company").hasError("pattern")) ? "Some special characters (^=`~@#$%*{};:_\",.<>) are not allowed" : ""); + i0.ɵɵi18nExp((ctx_r35.form == null ? null : ctx_r35.form.get("company").errors) && (ctx_r35.form == null ? null : ctx_r35.form.get("company").hasError("pattern")) ? "Some special characters (^=`~@#$%*{};:_\",.<>) are not allowed" : ""); i0.ɵɵi18nApply(1); } } - function BookingFormComponent_div_0_div_18_mat_chip_14_Template(rf, ctx) { + function BookingFormComponent_div_0_div_25_mat_chip_14_Template(rf, ctx) { if (rf & 1) { - var _r39 = i0.ɵɵgetCurrentView(); + var _r40 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "mat-chip", 66); - i0.ɵɵlistener("removed", function BookingFormComponent_div_0_div_18_mat_chip_14_Template_mat_chip_removed_0_listener() { - i0.ɵɵrestoreView(_r39); - var selected_r37 = ctx.$implicit; - var ctx_r38 = i0.ɵɵnextContext(3); - return ctx_r38.removeOption(selected_r37); + i0.ɵɵelementStart(0, "mat-chip", 72); + i0.ɵɵlistener("removed", function BookingFormComponent_div_0_div_25_mat_chip_14_Template_mat_chip_removed_0_listener() { + i0.ɵɵrestoreView(_r40); + var selected_r38 = ctx.$implicit; + var ctx_r39 = i0.ɵɵnextContext(3); + return ctx_r39.removeOption(selected_r38); }); i0.ɵɵtext(1); - i0.ɵɵelementStart(2, "div", 67); + i0.ɵɵelementStart(2, "div", 73); i0.ɵɵtext(3, "\u2716"); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - var selected_r37 = ctx.$implicit; + var selected_r38 = ctx.$implicit; i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate1(" ", selected_r37, " "); + i0.ɵɵtextInterpolate1(" ", selected_r38, " "); } } - function BookingFormComponent_div_0_div_18_Template(rf, ctx) { + function BookingFormComponent_div_0_div_25_Template(rf, ctx) { if (rf & 1) { - var _r41 = i0.ɵɵgetCurrentView(); + var _r42 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div", 56); - i0.ɵɵelementStart(1, "label", 57); + i0.ɵɵelementStart(0, "div", 62); + i0.ɵɵelementStart(1, "label", 63); i0.ɵɵi18n(2, I18N_22); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(3, "div", 58); - i0.ɵɵelementStart(4, "mat-form-field", 59); - i0.ɵɵelementStart(5, "div", 60); - i0.ɵɵelementStart(6, "input", 61, 62); + i0.ɵɵelementStart(3, "div", 64); + i0.ɵɵelementStart(4, "mat-form-field", 65); + i0.ɵɵelementStart(5, "div", 66); + i0.ɵɵelementStart(6, "input", 67, 68); i0.ɵɵi18nAttributes(8, _c26); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(9, BookingFormComponent_div_0_div_18_mat_error_9_Template, 2, 1, "mat-error", 28); + i0.ɵɵtemplate(9, BookingFormComponent_div_0_div_25_mat_error_9_Template, 2, 1, "mat-error", 33); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(10, "button", 63); - i0.ɵɵlistener("click", function BookingFormComponent_div_0_div_18_Template_button_click_10_listener($event) { - i0.ɵɵrestoreView(_r41); + i0.ɵɵelementStart(10, "button", 69); + i0.ɵɵlistener("click", function BookingFormComponent_div_0_div_25_Template_button_click_10_listener($event) { + i0.ɵɵrestoreView(_r42); - var _r33 = i0.ɵɵreference(7); + var _r34 = i0.ɵɵreference(7); - var ctx_r40 = i0.ɵɵnextContext(2); - ctx_r40.addCompany($event, _r33.value); - return _r33.value = ""; + var ctx_r41 = i0.ɵɵnextContext(2); + ctx_r41.addCompany($event, _r34.value); + return _r34.value = ""; }); i0.ɵɵtext(11, "Add"); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(12, "mat-chip-list", null, 64); - i0.ɵɵtemplate(14, BookingFormComponent_div_0_div_18_mat_chip_14_Template, 4, 1, "mat-chip", 65); + i0.ɵɵelementStart(12, "mat-chip-list", null, 70); + i0.ɵɵtemplate(14, BookingFormComponent_div_0_div_25_mat_chip_14_Template, 4, 1, "mat-chip", 71); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - var _r35 = i0.ɵɵreference(13); + var _r36 = i0.ɵɵreference(13); - var ctx_r10 = i0.ɵɵnextContext(2); + var ctx_r11 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); - i0.ɵɵclassProp("error", ctx_r10.form.controls.company.invalid && ctx_r10.form.controls.company.touched); + i0.ɵɵclassProp("error", ctx_r11.form.controls.company.invalid && ctx_r11.form.controls.company.touched); i0.ɵɵadvance(5); - i0.ɵɵproperty("matChipInputFor", _r35); + i0.ɵɵproperty("matChipInputFor", _r36); i0.ɵɵadvance(3); - i0.ɵɵproperty("ngIf", ctx_r10.form.controls.company.invalid); + i0.ɵɵproperty("ngIf", ctx_r11.form.controls.company.invalid); i0.ɵɵadvance(5); - i0.ɵɵproperty("ngForOf", ctx_r10.chipOptions); + i0.ɵɵproperty("ngForOf", ctx_r11.chipOptions); } } @@ -20485,39 +20625,39 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons I18N_29 = $localize(_templateObject14()); } - function BookingFormComponent_div_0_div_19_mat_option_5_Template(rf, ctx) { + function BookingFormComponent_div_0_div_26_mat_option_5_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "mat-option", 52); + i0.ɵɵelementStart(0, "mat-option", 58); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { - var type_r43 = ctx.$implicit; - i0.ɵɵproperty("value", type_r43.id); + var type_r44 = ctx.$implicit; + i0.ɵɵproperty("value", type_r44.id); i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate1(" ", type_r43.name, " "); + i0.ɵɵtextInterpolate1(" ", type_r44.name, " "); } } - function BookingFormComponent_div_0_div_19_Template(rf, ctx) { + function BookingFormComponent_div_0_div_26_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 68); - i0.ɵɵelementStart(1, "label", 69); + i0.ɵɵelementStart(0, "div", 74); + i0.ɵɵelementStart(1, "label", 75); i0.ɵɵi18n(2, I18N_29); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(3, "mat-form-field", 26); - i0.ɵɵelementStart(4, "mat-select", 70); - i0.ɵɵtemplate(5, BookingFormComponent_div_0_div_19_mat_option_5_Template, 2, 2, "mat-option", 51); + i0.ɵɵelementStart(3, "mat-form-field", 31); + i0.ɵɵelementStart(4, "mat-select", 76); + i0.ɵɵtemplate(5, BookingFormComponent_div_0_div_26_mat_option_5_Template, 2, 2, "mat-option", 57); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r11 = i0.ɵɵnextContext(2); + var ctx_r12 = i0.ɵɵnextContext(2); i0.ɵɵadvance(5); - i0.ɵɵproperty("ngForOf", ctx_r11.booking_types); + i0.ɵɵproperty("ngForOf", ctx_r12.booking_types); } } @@ -20533,10 +20673,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons I18N_31 = $localize(_templateObject15()); } - function BookingFormComponent_div_0_div_20_Template(rf, ctx) { + function BookingFormComponent_div_0_div_27_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 71); - i0.ɵɵelementStart(1, "mat-checkbox", 72); + i0.ɵɵelementStart(0, "div", 77); + i0.ɵɵelementStart(1, "mat-checkbox", 78); i0.ɵɵi18n(2, I18N_31); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); @@ -20555,10 +20695,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons I18N_33 = $localize(_templateObject16()); } - function BookingFormComponent_div_0_div_21_Template(rf, ctx) { + function BookingFormComponent_div_0_div_28_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 73); - i0.ɵɵelementStart(1, "mat-checkbox", 74); + i0.ɵɵelementStart(0, "div", 79); + i0.ɵɵelementStart(1, "mat-checkbox", 80); i0.ɵɵi18n(2, I18N_33); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); @@ -20588,52 +20728,52 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _c39 = ["placeholder", I18N_37]; - function BookingFormComponent_div_0_div_22_mat_form_field_3_Template(rf, ctx) { + function BookingFormComponent_div_0_div_29_mat_form_field_3_Template(rf, ctx) { if (rf & 1) { - var _r48 = i0.ɵɵgetCurrentView(); + var _r49 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "mat-form-field", 79); - i0.ɵɵelementStart(1, "textarea", 80); + i0.ɵɵelementStart(0, "mat-form-field", 85); + i0.ɵɵelementStart(1, "textarea", 86); i0.ɵɵi18nAttributes(2, _c39); - i0.ɵɵlistener("blur", function BookingFormComponent_div_0_div_22_mat_form_field_3_Template_textarea_blur_1_listener() { - i0.ɵɵrestoreView(_r48); - var ctx_r47 = i0.ɵɵnextContext(3); - return ctx_r47.trim("body"); + i0.ɵɵlistener("blur", function BookingFormComponent_div_0_div_29_mat_form_field_3_Template_textarea_blur_1_listener() { + i0.ɵɵrestoreView(_r49); + var ctx_r48 = i0.ɵɵnextContext(3); + return ctx_r48.trim("body"); }); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } } - function BookingFormComponent_div_0_div_22_ng_template_4_Template(rf, ctx) { + function BookingFormComponent_div_0_div_29_ng_template_4_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelement(0, "editor", 81); + i0.ɵɵelement(0, "editor", 87); } } - function BookingFormComponent_div_0_div_22_Template(rf, ctx) { + function BookingFormComponent_div_0_div_29_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 75); - i0.ɵɵelementStart(1, "label", 76); + i0.ɵɵelementStart(0, "div", 81); + i0.ɵɵelementStart(1, "label", 82); i0.ɵɵi18n(2, I18N_35); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(3, BookingFormComponent_div_0_div_22_mat_form_field_3_Template, 3, 0, "mat-form-field", 77); - i0.ɵɵtemplate(4, BookingFormComponent_div_0_div_22_ng_template_4_Template, 1, 0, "ng-template", null, 78, i0.ɵɵtemplateRefExtractor); + i0.ɵɵtemplate(3, BookingFormComponent_div_0_div_29_mat_form_field_3_Template, 3, 0, "mat-form-field", 83); + i0.ɵɵtemplate(4, BookingFormComponent_div_0_div_29_ng_template_4_Template, 1, 0, "ng-template", null, 84, i0.ɵɵtemplateRefExtractor); i0.ɵɵelementEnd(); } if (rf & 2) { - var _r45 = i0.ɵɵreference(5); + var _r46 = i0.ɵɵreference(5); - var ctx_r14 = i0.ɵɵnextContext(2); + var ctx_r15 = i0.ɵɵnextContext(2); i0.ɵɵadvance(3); - i0.ɵɵproperty("ngIf", !ctx_r14.use_html)("ngIfElse", _r45); + i0.ɵɵproperty("ngIf", !ctx_r15.use_html)("ngIfElse", _r46); } } function BookingFormComponent_div_0_Template(rf, ctx) { if (rf & 1) { - var _r50 = i0.ɵɵgetCurrentView(); + var _r51 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "div", 1); i0.ɵɵtemplate(1, BookingFormComponent_div_0_div_1_Template, 4, 1, "div", 2); @@ -20642,38 +20782,54 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons i0.ɵɵelementStart(4, "div", 5); i0.ɵɵtemplate(5, BookingFormComponent_div_0_div_5_Template, 5, 10, "div", 6); i0.ɵɵtemplate(6, BookingFormComponent_div_0_div_6_Template, 6, 4, "div", 7); - i0.ɵɵtemplate(7, BookingFormComponent_div_0_div_7_Template, 2, 2, "div", 8); + i0.ɵɵelementStart(7, "div", 8); + i0.ɵɵtemplate(8, BookingFormComponent_div_0_div_8_Template, 2, 2, "div", 9); + i0.ɵɵtemplate(9, BookingFormComponent_div_0_div_9_Template, 2, 0, "div", 10); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(8, "div", 9); - i0.ɵɵelementStart(9, "div", 10); - i0.ɵɵelementStart(10, "mat-slide-toggle", 11); - i0.ɵɵlistener("change", function BookingFormComponent_div_0_Template_mat_slide_toggle_change_10_listener() { - i0.ɵɵrestoreView(_r50); - var ctx_r49 = i0.ɵɵnextContext(); - return ctx_r49.onToggleChange("is_recurrent"); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(10, "div", 11); + i0.ɵɵelementStart(11, "div", 12); + i0.ɵɵelementStart(12, "mat-slide-toggle", 13); + i0.ɵɵlistener("change", function BookingFormComponent_div_0_Template_mat_slide_toggle_change_12_listener() { + i0.ɵɵrestoreView(_r51); + var ctx_r50 = i0.ɵɵnextContext(); + return ctx_r50.onToggleChange("is_recurrent"); }); - i0.ɵɵtext(11, "Recurring booking"); + i0.ɵɵtext(13, "Recurring booking"); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(12, "div", 10); - i0.ɵɵelementStart(13, "mat-slide-toggle", 12); - i0.ɵɵlistener("change", function BookingFormComponent_div_0_Template_mat_slide_toggle_change_13_listener() { - i0.ɵɵrestoreView(_r50); - var ctx_r51 = i0.ɵɵnextContext(); - return ctx_r51.onToggleChange("is_multiroom"); + i0.ɵɵelementStart(14, "div", 12); + i0.ɵɵelementStart(15, "mat-slide-toggle", 14); + i0.ɵɵlistener("change", function BookingFormComponent_div_0_Template_mat_slide_toggle_change_15_listener() { + i0.ɵɵrestoreView(_r51); + var ctx_r52 = i0.ɵɵnextContext(); + return ctx_r52.onToggleChange("is_multiroom", ctx_r52.form.controls == null ? null : ctx_r52.form.controls.is_multiroom == null ? null : ctx_r52.form.controls.is_multiroom.value); }); - i0.ɵɵtext(14, "Multiroom"); + i0.ɵɵtext(16, "Multiroom"); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); + i0.ɵɵelementStart(17, "div", 12); + i0.ɵɵelementStart(18, "mat-checkbox", 15); + i0.ɵɵlistener("click", function BookingFormComponent_div_0_Template_mat_checkbox_click_18_listener($event) { + i0.ɵɵrestoreView(_r51); + return $event.stopPropagation(); + }); + i0.ɵɵelementStart(19, "div", 16); + i0.ɵɵelementStart(20, "div", 17); + i0.ɵɵtext(21, "Merged"); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(15, BookingFormComponent_div_0_recurrence_booking_form_15_Template, 1, 1, "recurrence-booking-form", 13); - i0.ɵɵtemplate(16, BookingFormComponent_div_0_div_16_Template, 5, 2, "div", 14); - i0.ɵɵtemplate(17, BookingFormComponent_div_0_div_17_Template, 5, 1, "div", 15); - i0.ɵɵtemplate(18, BookingFormComponent_div_0_div_18_Template, 15, 5, "div", 16); - i0.ɵɵtemplate(19, BookingFormComponent_div_0_div_19_Template, 6, 1, "div", 17); - i0.ɵɵtemplate(20, BookingFormComponent_div_0_div_20_Template, 3, 0, "div", 18); - i0.ɵɵtemplate(21, BookingFormComponent_div_0_div_21_Template, 3, 0, "div", 19); - i0.ɵɵtemplate(22, BookingFormComponent_div_0_div_22_Template, 6, 2, "div", 20); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵtemplate(22, BookingFormComponent_div_0_recurrence_booking_form_22_Template, 1, 1, "recurrence-booking-form", 18); + i0.ɵɵtemplate(23, BookingFormComponent_div_0_div_23_Template, 5, 2, "div", 19); + i0.ɵɵtemplate(24, BookingFormComponent_div_0_div_24_Template, 5, 1, "div", 20); + i0.ɵɵtemplate(25, BookingFormComponent_div_0_div_25_Template, 15, 5, "div", 21); + i0.ɵɵtemplate(26, BookingFormComponent_div_0_div_26_Template, 6, 1, "div", 22); + i0.ɵɵtemplate(27, BookingFormComponent_div_0_div_27_Template, 3, 0, "div", 23); + i0.ɵɵtemplate(28, BookingFormComponent_div_0_div_28_Template, 3, 0, "div", 24); + i0.ɵɵtemplate(29, BookingFormComponent_div_0_div_29_Template, 6, 2, "div", 25); i0.ɵɵelementEnd(); } @@ -20681,8 +20837,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var ctx_r0 = i0.ɵɵnextContext(); var tmp_3_0 = null; var currVal_3 = !((tmp_3_0 = ctx_r0.form.get("is_recurrent")) == null ? null : tmp_3_0.value); - var tmp_9_0 = null; - var currVal_9 = (tmp_9_0 = ctx_r0.form.get("is_recurrent")) == null ? null : tmp_9_0.value; + var tmp_10_0 = null; + var currVal_10 = (tmp_10_0 = ctx_r0.form.get("is_recurrent")) == null ? null : tmp_10_0.value; i0.ɵɵproperty("formGroup", ctx_r0.form); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx_r0.form.value.id && ctx_r0.form.controls.space_list && !ctx_r0.isSeriesAction && !ctx_r0.form.controls.is_multiroom.value); @@ -20694,14 +20850,16 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons i0.ɵɵproperty("ngIf", ctx_r0.form.controls.dateTz); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx_r0.form.controls.duration); - i0.ɵɵadvance(1); + i0.ɵɵadvance(2); i0.ɵɵproperty("ngIf", ctx_r0.localStart && ctx_r0.localEnd); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r0.showTimeCateringWarning); i0.ɵɵadvance(3); i0.ɵɵproperty("checked", ctx_r0.form.controls.is_recurrent.value && !ctx_r0.form.controls.is_multiroom.value); i0.ɵɵadvance(3); - i0.ɵɵproperty("checked", ctx_r0.form.controls.is_multiroom.value && !ctx_r0.form.controls.is_recurrent.value); - i0.ɵɵadvance(2); - i0.ɵɵproperty("ngIf", currVal_9); + i0.ɵɵproperty("checked", (ctx_r0.form.controls.is_multiroom == null ? null : ctx_r0.form.controls.is_multiroom.value) && !(ctx_r0.form.controls.is_recurrent == null ? null : ctx_r0.form.controls.is_recurrent.value)); + i0.ɵɵadvance(7); + i0.ɵɵproperty("ngIf", currVal_10); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx_r0.form.controls.organiser); i0.ɵɵadvance(1); @@ -20725,43 +20883,44 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super28 = _createSuper(BookingFormComponent); function BookingFormComponent(_service, _users, _dialog, settingsService, cdRef) { - var _this88; + var _this87; _classCallCheck(this, BookingFormComponent); - _this88 = _super28.call(this); - _this88._service = _service; - _this88._users = _users; - _this88._dialog = _dialog; - _this88.settingsService = settingsService; - _this88.cdRef = cdRef; + _this87 = _super28.call(this); + _this87._service = _service; + _this87._users = _users; + _this87._dialog = _dialog; + _this87.settingsService = settingsService; + _this87.cdRef = cdRef; /** List of available users to host bookings */ - _this88.user_list = []; - _this88.nowTz = date_tz_1.DateNow(new Date()); + _this87.user_list = []; + _this87.nowTz = date_tz_1.DateNow(new Date()); /** From date input for date field */ - _this88.fromDateTz = _this88.nowTz.setValue({ - minute: Math.ceil(_this88.nowTz.minutes / 5) * 5 + _this87.fromDateTz = _this87.nowTz.setValue({ + minute: Math.ceil(_this87.nowTz.minutes / 5) * 5 }); /** Last bookable date, concierge only */ - _this88.untilDateTz = date_tz_1.DateNow(new Date()).addValue({ + _this87.untilDateTz = date_tz_1.DateNow(new Date()).addValue({ days: 365 }).endOfValue('day'); - _this88.localTimezone = date_tz_1.DateNow(new Date()).building_tz; - _this88.localStart = ""; - _this88.localEnd = ""; // Define an array to store selected company options + _this87.localTimezone = date_tz_1.DateNow(new Date()).building_tz; + _this87.localStart = ""; + _this87.localEnd = ""; // Define an array to store selected company options - _this88.chipOptions = []; - _this88.isConcierge = _this88.settingsService.concierge; - return _this88; + _this87.chipOptions = []; + _this87.showTimeCateringWarning = false; + _this87.isConcierge = _this87.settingsService.concierge; + return _this87; } _createClass(BookingFormComponent, [{ key: "ngOnInit", value: function ngOnInit() { - var _this89 = this; + var _this88 = this; // Trim title // this.form.get('title').setValue(this.form.get('title').value.trim()); @@ -20780,27 +20939,27 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this._users.initialised.pipe(operators_1.first(function (_) { return _; })).subscribe(function () { - var user = _this89._users.current; + var user = _this88._users.current; var delegates = user.delegates.map(function (del) { - return _this89._users.find(del.email) || new data_common_1.User({ + return _this88._users.find(del.email) || new data_common_1.User({ email: del.email, name: del.email.split('@')[0] }); }); - _this89.user_list = [user].concat(delegates); + _this88.user_list = [user].concat(delegates); }); this.updateCoachmarkTimes(this.form.controls.timezone.value); this.subscription('formChanges', this.form.valueChanges.pipe(operators_1.skip(1), // initial form changes operators_1.distinctUntilChanged()).subscribe(function () { - _this89.timeout('update_coachmark', function () { - _this89.updateCoachmarkTimes(_this89.form.controls.timezone.value); + _this88.timeout('update_coachmark', function () { + _this88.updateCoachmarkTimes(_this88.form.controls.timezone.value); }, 500); })); this.subscription('isRecurrentChanges', this.form.controls.is_recurrent.valueChanges.subscribe(function () { - var recurrenceStarts = _this89.form.controls.recurrence_starts; + var recurrenceStarts = _this88.form.controls.recurrence_starts; - if (!_this89.form.controls.is_recurrent.value) { + if (!_this88.form.controls.is_recurrent.value) { recurrenceStarts.clearValidators(); } else { var arrayValidators = [forms_1.Validators.required]; @@ -20817,7 +20976,21 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (((_a = this.form.controls.id) === null || _a === void 0 ? void 0 : _a.value) && !((_b = this.form.controls.action) === null || _b === void 0 ? void 0 : _b.value)) { this.form.controls.is_recurrent.setValue(false); - } + } // Subscribe to changes in dateTz, duration, and has_catering + + + this.subscription('dateTz_changes', this.form.controls.dateTz.valueChanges.subscribe(function () { + _this88.checkTimeCateringWarning(); + })); + this.subscription('duration_changes', this.form.controls.duration.valueChanges.subscribe(function () { + _this88.checkTimeCateringWarning(); + })); // No need to subscribe to catering_changes since we're now handling has_catering + + this.subscription('has_catering_changes', this.form.controls.has_catering.valueChanges.subscribe(function () { + _this88.checkTimeCateringWarning(); + })); // Initial check + + this.checkTimeCateringWarning(); } /** * @@ -20871,7 +21044,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "openSpacesModal", value: function openSpacesModal() { - var _this90 = this; + var _this89 = this; var _a, _b; @@ -20895,26 +21068,26 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (event.reason === 'done') { - var space_list = _this90.form.controls.space_list.value; + var space_list = _this89.form.controls.space_list.value; space_list = event.metadata; - _this90.form.controls.space_list.setValue(base_1.unique(space_list, 'id')); + _this89.form.controls.space_list.setValue(base_1.unique(space_list, 'id')); - var catering = (_b = (_a = _this90.form.controls) === null || _a === void 0 ? void 0 : _a.catering) === null || _b === void 0 ? void 0 : _b.value.map(function (order) { + var catering = (_b = (_a = _this89.form.controls) === null || _a === void 0 ? void 0 : _a.catering) === null || _b === void 0 ? void 0 : _b.value.map(function (order) { order.location = space_list[0].name; order.location_id = space_list[0].email; return order; }); - (_c = _this90.form.controls.catering) === null || _c === void 0 ? void 0 : _c.setValue(catering || []); + (_c = _this89.form.controls.catering) === null || _c === void 0 ? void 0 : _c.setValue(catering || []); ref.close(); - _this90.unsub('new_spaces'); + _this89.unsub('new_spaces'); } if (event.reason === 'close') { ref.close(); - _this90.unsub('new_spaces'); + _this89.unsub('new_spaces'); } })); } @@ -20925,7 +21098,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "openNewUserModal", value: function openNewUserModal() { - var _this91 = this; + var _this90 = this; var ref = this._dialog.open(new_user_modal_component_1.NewUserModalComponent, { width: 'auto', @@ -20938,16 +21111,16 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (event.reason === 'done') { - var attendees = (_a = _this91.form.controls.attendees) === null || _a === void 0 ? void 0 : _a.value; + var attendees = (_a = _this90.form.controls.attendees) === null || _a === void 0 ? void 0 : _a.value; attendees.push(event.metadata); - _this91.form.controls.attendees.setValue(base_1.unique(attendees, 'email')); + _this90.form.controls.attendees.setValue(base_1.unique(attendees, 'email')); ref.close(); - _this91.unsub('new_user'); + _this90.unsub('new_user'); - _this91.cdRef.detectChanges(); + _this90.cdRef.detectChanges(); } })); } // Add & Remove chip and set the value of the form control accordingly @@ -20998,21 +21171,73 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } }, { key: "onToggleChange", - value: function onToggleChange(toggledControlName) { - var _a, _b, _c, _d; + value: function onToggleChange(toggledControlName, is_multiroom) { + var _a, _b, _c, _d, _e, _f, _g, _h; if (toggledControlName === 'is_recurrent') { // If the is_recurrent toggle is being activated, deactivate is_multiroom if ((_a = this.form.controls.is_recurrent) === null || _a === void 0 ? void 0 : _a.value) { (_b = this.form.controls.is_multiroom) === null || _b === void 0 ? void 0 : _b.setValue(false); + (_c = this.form.controls.merged) === null || _c === void 0 ? void 0 : _c.setValue(false); + (_d = this.form.get('merged')) === null || _d === void 0 ? void 0 : _d.disable(); } } else if (toggledControlName === 'is_multiroom') { // If the is_multiroom toggle is being activated, deactivate is_recurrent - if ((_c = this.form.controls.is_multiroom) === null || _c === void 0 ? void 0 : _c.value) { - (_d = this.form.controls.is_recurrent) === null || _d === void 0 ? void 0 : _d.setValue(false); + if ((_e = this.form.controls.is_multiroom) === null || _e === void 0 ? void 0 : _e.value) { + (_f = this.form.controls.is_recurrent) === null || _f === void 0 ? void 0 : _f.setValue(false); + } + + if (is_multiroom) { + this.form.get('merged').setValue(false); + (_g = this.form.get('merged')) === null || _g === void 0 ? void 0 : _g.enable(); + } else { + this.form.get('merged').setValue(false); + (_h = this.form.get('merged')) === null || _h === void 0 ? void 0 : _h.disable(); } } } + }, { + key: "checkTimeCateringWarning", + value: function checkTimeCateringWarning() { + var _a, _b; + + var dateTz = this.form.controls.dateTz.value; + var duration = this.form.controls.duration.value; + var hasCatering = (_a = this.form.controls.has_catering) === null || _a === void 0 ? void 0 : _a.value; + var cateringOrders = (_b = this.form.controls.catering) === null || _b === void 0 ? void 0 : _b.value; + + if (dateTz && duration && hasCatering && cateringOrders && cateringOrders.length > 0) { + // Create DateTime object for the start time + var startDateTime = luxon_1.DateTime.fromISO(dateTz.date, { + zone: dateTz.building_tz + }); // Calculate the end time + + var endDateTime = startDateTime.plus({ + minutes: duration + }); // Get the date part of the startDateTime + + var bookingDate = startDateTime.startOf('day'); // Define 7 am and 8 pm on the booking date + + var dayStartAt7am = bookingDate.set({ + hour: 7 + }); + var dayEndAt8pm = bookingDate.set({ + hour: 20 + }); // Check if booking ends before or at 7 am, or starts at or after 8 pm + + if (endDateTime <= dayStartAt7am || startDateTime >= dayEndAt8pm) { + // Booking is outside of catering hours and has catering selected + this.showTimeCateringWarning = true; + } else { + this.showTimeCateringWarning = false; + } + } else { + this.showTimeCateringWarning = false; + } // Inform Angular that the component needs to be checked + + + this.cdRef.markForCheck(); + } }, { key: "use_html", get: function get() { @@ -21058,18 +21283,18 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, - consts: [["class", "booking-form", 3, "formGroup", 4, "ngIf"], [1, "booking-form", 3, "formGroup"], ["class", "field", 4, "ngIf"], ["class", "field", "name", "title", 4, "ngIf"], ["class", "group date", 4, "ngIf"], [1, "group", "time"], ["class", "field", "name", "start-time", 4, "ngIf"], ["class", "field", "name", "duration", 4, "ngIf"], ["class", "coachmark", 4, "ngIf"], [1, "field", "toggle-row"], [1, "recurrence-siwch"], ["labelPosition", "after", "name", "recurrence", "formControlName", "is_recurrent", 1, "mck-slide-toggle", 3, "checked", "change"], ["labelPosition", "after", "name", "multiroom", "formControlName", "is_multiroom", 1, "mck-slide-toggle", 3, "checked", "change"], [3, "form", 4, "ngIf"], ["class", "field", "name", "organiser", 4, "ngIf"], ["class", "field", "name", "attendees", 4, "ngIf"], ["class", "field company-name", "name", "company", 4, "ngIf"], ["class", "field", "name", "booking-type", 4, "ngIf"], ["class", "field", "name", "need-space", 4, "ngIf"], ["class", "field", "name", "has-catering", 4, "ngIf"], ["class", "field", "name", "body", 4, "ngIf"], [1, "field"], ["for", "spaces"], ["name", "spaces", 3, "placeholder", "onAction"], ["name", "title", 1, "field"], ["for", "title"], ["appearance", "outline"], ["matInput", "", "name", "title", "formControlName", "title", 3, "blur", 6, "placeholder"], [4, "ngIf"], [1, "group", "date"], ["class", "date-field", "name", "date", 4, "ngIf"], ["name", "date", 1, "date-field"], ["for", "date"], ["name", "date", "formControlName", "dateTz", 1, "time-inputs", 3, "error", "fromDateTz", "untilDateTz", "invalid", "can_pick_today"], ["class", "error info", 4, "ngIf"], [1, "error", "info"], ["name", "start-time", 1, "field"], ["for", "start-time"], ["name", "start-time", 1, "time-inputs", 3, "required", "fromDateTz", "startFromDateTz", "all_day", "ngModel", "disabled", "ngModelOptions", "show_current", "ngModelChange"], ["name", "duration", 1, "field"], [1, "label-group"], ["for", "duration"], ["name", "duration", "formControlName", "duration", 1, "time-inputs", 3, "startDateTz", "required", "all_day"], [1, "coachmark"], [3, "form"], ["name", "organiser", 1, "field"], ["for", "organiser"], ["name", "organiser", "formControlName", "organiser", 4, "ngIf"], ["appearance", "outline", 4, "ngIf"], ["name", "organiser", "formControlName", "organiser"], ["name", "organiser", "formControlName", "organiser", 3, "placeholder"], [3, "value", 4, "ngFor", "ngForOf"], [3, "value"], ["name", "attendees", 1, "field"], ["for", "attendees"], ["name", "attendees", "formControlName", "attendees", 3, "newUser"], ["name", "company", 1, "field", "company-name"], ["for", "company"], [1, "input-with-button"], ["appearance", "outline", 1, "mat-form-field-container"], [1, "chip-input-wrapper"], ["matInput", "", "name", "company", 3, "matChipInputFor", 6, "placeholder"], ["company", ""], ["mat-button", "", 1, "input-button", 3, "click"], ["chipList", ""], ["removable", "", "class", "mat-chip", 3, "removed", 4, "ngFor", "ngForOf"], ["removable", "", 1, "mat-chip", 3, "removed"], ["matChipRemove", "", 1, "mck-close-icon"], ["name", "booking-type", 1, "field"], ["for", "booking-type"], ["name", "booking-type", "formControlName", "booking_type"], ["name", "need-space", 1, "field"], ["formControlName", "needs_space"], ["name", "has-catering", 1, "field"], ["name", "catering", "formControlName", "has_catering"], ["name", "body", 1, "field"], ["for", "body"], ["name", "body", "appearance", "outline", 4, "ngIf", "ngIfElse"], ["html_editor", ""], ["name", "body", "appearance", "outline"], ["matInput", "", "name", "description", "formControlName", "body", 3, "blur", 6, "placeholder"], ["formControlName", "body"]], + consts: [["class", "booking-form", 3, "formGroup", 4, "ngIf"], [1, "booking-form", 3, "formGroup"], ["class", "field", 4, "ngIf"], ["class", "field", "name", "title", 4, "ngIf"], ["class", "group date", 4, "ngIf"], [1, "group", "time"], ["class", "field", "name", "start-time", 4, "ngIf"], ["class", "field", "name", "duration", 4, "ngIf"], [1, "warnings-container"], ["class", "coachmark", 4, "ngIf"], ["class", "coachmark warning", 4, "ngIf"], [1, "field", "toggle-row"], [1, "recurrence-siwch"], ["labelPosition", "after", "name", "recurrence", "formControlName", "is_recurrent", 1, "mck-slide-toggle", 3, "checked", "change"], ["labelPosition", "after", "name", "multiroom", "formControlName", "is_multiroom", 1, "mck-slide-toggle", 3, "checked", "change"], ["formControlName", "merged", 3, "click"], [1, "key"], [1, "text"], [3, "form", 4, "ngIf"], ["class", "field", "name", "organiser", 4, "ngIf"], ["class", "field", "name", "attendees", 4, "ngIf"], ["class", "field company-name", "name", "company", 4, "ngIf"], ["class", "field", "name", "booking-type", 4, "ngIf"], ["class", "field", "name", "need-space", 4, "ngIf"], ["class", "field", "name", "has-catering", 4, "ngIf"], ["class", "field", "name", "body", 4, "ngIf"], [1, "field"], ["for", "spaces"], ["name", "spaces", 3, "placeholder", "onAction"], ["name", "title", 1, "field"], ["for", "title"], ["appearance", "outline"], ["matInput", "", "name", "title", "formControlName", "title", 3, "blur", 6, "placeholder"], [4, "ngIf"], [1, "group", "date"], ["class", "date-field", "name", "date", 4, "ngIf"], ["name", "date", 1, "date-field"], ["for", "date"], ["name", "date", "formControlName", "dateTz", 1, "time-inputs", 3, "error", "fromDateTz", "untilDateTz", "invalid", "can_pick_today"], ["class", "error info", 4, "ngIf"], [1, "error", "info"], ["name", "start-time", 1, "field"], ["for", "start-time"], ["name", "start-time", 1, "time-inputs", 3, "required", "fromDateTz", "startFromDateTz", "all_day", "ngModel", "disabled", "ngModelOptions", "show_current", "ngModelChange"], ["name", "duration", 1, "field"], [1, "label-group"], ["for", "duration"], ["name", "duration", "formControlName", "duration", 1, "time-inputs", 3, "startDateTz", "required", "all_day"], [1, "coachmark"], [1, "coachmark", "warning"], [3, "form"], ["name", "organiser", 1, "field"], ["for", "organiser"], ["name", "organiser", "formControlName", "organiser", 4, "ngIf"], ["appearance", "outline", 4, "ngIf"], ["name", "organiser", "formControlName", "organiser"], ["name", "organiser", "formControlName", "organiser", 3, "placeholder"], [3, "value", 4, "ngFor", "ngForOf"], [3, "value"], ["name", "attendees", 1, "field"], ["for", "attendees"], ["name", "attendees", "formControlName", "attendees", 3, "newUser"], ["name", "company", 1, "field", "company-name"], ["for", "company"], [1, "input-with-button"], ["appearance", "outline", 1, "mat-form-field-container"], [1, "chip-input-wrapper"], ["matInput", "", "name", "company", 3, "matChipInputFor", 6, "placeholder"], ["company", ""], ["mat-button", "", 1, "input-button", 3, "click"], ["chipList", ""], ["removable", "", "class", "mat-chip", 3, "removed", 4, "ngFor", "ngForOf"], ["removable", "", 1, "mat-chip", 3, "removed"], ["matChipRemove", "", 1, "mck-close-icon"], ["name", "booking-type", 1, "field"], ["for", "booking-type"], ["name", "booking-type", "formControlName", "booking_type"], ["name", "need-space", 1, "field"], ["formControlName", "needs_space"], ["name", "has-catering", 1, "field"], ["name", "catering", "formControlName", "has_catering"], ["name", "body", 1, "field"], ["for", "body"], ["name", "body", "appearance", "outline", 4, "ngIf", "ngIfElse"], ["html_editor", ""], ["name", "body", "appearance", "outline"], ["matInput", "", "name", "description", "formControlName", "body", 3, "blur", 6, "placeholder"], ["formControlName", "body"]], template: function BookingFormComponent_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵtemplate(0, BookingFormComponent_div_0_Template, 23, 17, "div", 0); + i0.ɵɵtemplate(0, BookingFormComponent_div_0_Template, 30, 18, "div", 0); } if (rf & 2) { i0.ɵɵproperty("ngIf", ctx.form); } }, - directives: [i3.NgIf, i4.NgControlStatusGroup, i4.FormGroupDirective, i5.MatSlideToggle, i4.NgControlStatus, i4.FormControlName, i6.ActionFieldComponent, i7.MatFormField, i8.MatInput, i4.DefaultValueAccessor, i7.MatError, i9.DateTzDatePickerComponent, i10.DateTzTimeFieldComponent, i4.RequiredValidator, i4.NgModel, i11.DateTzDurationFieldComponent, i12.RecurringBookingForm, i13.UserSearchFieldComponent, i14.MatSelect, i3.NgForOf, i15.MatOption, i16.UserListFieldComponent, i17.MatChipInput, i18.MatButton, i17.MatChipList, i17.MatChip, i17.MatChipRemove, i19.MatCheckbox, i20.EditorComponent], - styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\nlabel[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-top: 1.25em;\n margin-right: 1em;\n font-weight: bold;\n font-size: 0.8em;\n width: 100%;\n margin-top: 0;\n margin-bottom: 0.5em;\n}\nlabel[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: #ffb300;\n}\nlabel.error[_ngcontent-%COMP%] {\n color: #e53935;\n}\n.field[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n}\n.info[_ngcontent-%COMP%] {\n font-size: 0.7em;\n color: #e53935;\n font-weight: 400;\n margin-left: 1em;\n}\n.label-group[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n width: 100%;\n}\n.label-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n min-width: 1px;\n flex: 1;\n}\n.label-group[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] {\n font-size: 0.8em;\n min-width: 9em;\n flex: 0;\n margin: 0;\n}\nmat-form-field[_ngcontent-%COMP%], a-date-field[_ngcontent-%COMP%], an-action-field[_ngcontent-%COMP%], editor[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 50%;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n mat-form-field[_ngcontent-%COMP%], a-date-field[_ngcontent-%COMP%], an-action-field[_ngcontent-%COMP%], editor[_ngcontent-%COMP%] {\n min-width: 16em;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n mat-form-field[_ngcontent-%COMP%], a-date-field[_ngcontent-%COMP%], an-action-field[_ngcontent-%COMP%], editor[_ngcontent-%COMP%] {\n min-width: 16em;\n }\n}\na-date-field.full-width[_ngcontent-%COMP%] {\n flex: 0 0 100%;\n}\na-date-field[_ngcontent-%COMP%] + .error.info[_ngcontent-%COMP%] {\n margin-top: -1em;\n}\nmat-checkbox[_ngcontent-%COMP%] {\n margin-bottom: 1em;\n}\n.group[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n}\n.group[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] {\n min-width: 17em;\n flex: 1;\n margin: 0.5em;\n}\n.group[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]:first-child {\n margin-left: 0;\n}\n.group[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]:last-child {\n margin-right: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .group[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .group[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n.group[_ngcontent-%COMP%] .coachmark[_ngcontent-%COMP%] {\n position: relative;\n top: -20px;\n left: -6px;\n}\n.recurrence-siwch[_ngcontent-%COMP%] {\n margin-bottom: 0.5em;\n}\n.recurrence-siwch[_ngcontent-%COMP%] .mat-slide-toggle-content {\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif !important;\n color: #333333;\n}\n.time-inputs[_ngcontent-%COMP%], .time-inputs-calendar[_ngcontent-%COMP%] {\n flex: 1;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .time-inputs[_ngcontent-%COMP%], .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 176px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .time-inputs[_ngcontent-%COMP%], .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 176px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-bottom: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-bottom: 1rem;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-bottom: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-bottom: 1rem;\n }\n}\n.date-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n}\n.mat-form-field-wrapper[_ngcontent-%COMP%] {\n width: 100%;\n}\n.company-name[_ngcontent-%COMP%] {\n flex-direction: column;\n margin-bottom: 20px;\n}\n.company-name[_ngcontent-%COMP%] .mat-form-field-container[_ngcontent-%COMP%] {\n display: flow;\n max-width: 90%;\n}\n.company-name[_ngcontent-%COMP%] .mat-form-field-container[_ngcontent-%COMP%] .mat-form-field-wrapper[_ngcontent-%COMP%] {\n padding-bottom: 0em;\n}\n.company-name[_ngcontent-%COMP%] .mat-chip.mat-standard-chip.mat-primary[_ngcontent-%COMP%] {\n border-radius: 20px;\n background-color: #333333;\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-family: \"McKinsey Sans\";\n color: #fff;\n font-size: 0.75rem;\n}\n.company-name[_ngcontent-%COMP%] .mat-chip.mat-standard-chip.mat-primary[_ngcontent-%COMP%] .mck-close-icon[_ngcontent-%COMP%] {\n display: flex;\n align-items: end;\n color: #fff;\n opacity: 1;\n}\n.mat-form-field-wrapper[_ngcontent-%COMP%] .mat-form-field-appearance-outline[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n padding: 1.5em 0 1em 0;\n}\n.chip-input-wrapper[_ngcontent-%COMP%] {\n display: flex;\n}\n.input-with-button[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n}\n.input-with-button[_ngcontent-%COMP%] .input-button[_ngcontent-%COMP%] {\n max-height: 54px;\n}\n.toggle-row[_ngcontent-%COMP%] {\n gap: 20px;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvdmFycy5zY3NzIiwibGlicy9sZWdhY3ktb3ZlcmxheXMvc3JjL2xpYi9ib29raW5nLWZvcm0vYm9va2luZy1mb3JtLmNvbXBvbmVudC5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy91aS9zcmMvbGliL21peGlucy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktb3ZlcmxheXMvc3JjL2xpYi9ib29raW5nLWZvcm0vYm9va2luZy1mb3JtLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzswQkFBQTtBQVFBOzswQkFBQTtBQWtDQTs7Y0FBQTtBQWdCQTs7c0JBQUE7QUExREE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQzVDQTs7c0JBQUE7QUM2QkE7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDa0NsQjtBRDhEQTs7c0JBQUE7QUVrT0E7OztFQUFBO0FDL1RBO0VBQ0ksZUFBQTtFQUNBLGtCQUFBO0VBQ0EsaUJBQUE7RUFDQSxpQkFBQTtFQUNBLGdCQUFBO0VBRUksV0FBQTtFQUNBLGFBQUE7RUFDQSxvQkFBQTtBRndDUjtBRXJDSTtFQUNJLGNIYUU7QUMwQlY7QUVwQ0k7RUFDSSxjSGFBO0FDeUJSO0FFbENBO0VBQ0ksYUFBQTtFQUdJLGVBQUE7QUZtQ1I7QUUvQkE7RUFDSSxnQkFBQTtFQUNBLGNBQUE7RUFDQSxnQkFBQTtFQUNBLGdCQUFBO0FGa0NKO0FFL0JBO0VBQ0ksYUFBQTtFQUNBLG1CQUFBO0VBQ0EsV0FBQTtBRmtDSjtBRWhDSTtFQUNJLGNBQUE7RUFDQSxPQUFBO0FGa0NSO0FFL0JJO0VBQ0ksZ0JBQUE7RUFDQSxjQUFBO0VBQ0EsT0FBQTtFQUNBLFNBQUE7QUZpQ1I7QUU3QkE7Ozs7RUFJSSxPQUFBO0VBQ0EsY0FBQTtBRmdDSjtBRjVFUTtFSXVDUjs7OztJQVFRLGVBQUE7RUZvQ047QUFDRjtBRmpGUTtFSW9DUjs7OztJQVFRLGVBQUE7RUY0Q047QUFDRjtBRXhDQTtFQUNJLGNBQUE7QUYyQ0o7QUV4Q0E7RUFDSSxnQkFBQTtBRjJDSjtBRXZDQTtFQUNJLGtCQUFBO0FGMENKO0FFdENBO0VBQ0ksYUFBQTtFQUNBLGVBQUE7QUZ5Q0o7QUV4Q0k7RUFDSSxlQUFBO0VBQ0EsT0FBQTtFQUNBLGFBQUE7QUYwQ1I7QUV6Q1E7RUFDSSxjQUFBO0FGMkNaO0FFekNRO0VBQ0ksZUFBQTtBRjJDWjtBRnhIUTtFSXFFSjtJQVlRLFNBQUE7RUYyQ1Y7QUFDRjtBRjFIUTtFSWtFSjtJQVlRLFNBQUE7RUZnRFY7QUFDRjtBRTlDSTtFQUNJLGtCQUFBO0VBQ0EsVUFBQTtFQUNBLFVBQUE7QUZnRFI7QUU1Q0E7RUFDSSxvQkFBQTtBRitDSjtBRTdDUTtFQUNJLGdIQUFBO0VBQ0EsY0FBQTtBRitDWjtBRXpDQTtFQUNJLE9BQUE7QUY0Q0o7QUNsS1k7RUNxSFo7SUFHUSxnQkFBQTtFRjhDTjtBQUNGO0FDdktZO0VDcUhaO0lBR1EsZ0JBQUE7RUZtRE47QUFDRjtBQ3hLWTtFQ3VIUjtJQUdRLGVBQUE7SUFDQSxtQkgzRUk7RUM2SGQ7QUFDRjtBQzlLWTtFQ3VIUjtJQUdRLGVBQUE7SUFDQSxtQkgzRUk7RUNtSWQ7QUFDRjtBQzNLUTtFQzhHSjtJQU9RLGVBQUE7SUFDQSxtQkgvRUk7RUN5SWQ7QUFDRjtBQ2pMUTtFQzhHSjtJQU9RLGVBQUE7SUFDQSxtQkgvRUk7RUMrSWQ7QUFDRjtBRTVEQTtFQUNJLGNBQUE7QUYrREo7QUU1REE7RUFDSSxXQUFBO0FGK0RKO0FFNURBO0VBQ0ksc0JBQUE7RUFDQSxtQkFBQTtBRitESjtBRTdESTtFQUNJLGFBQUE7RUFDQSxjQUFBO0FGK0RSO0FFN0RRO0VBQ0ksbUJBQUE7QUYrRFo7QUU1REk7RUFDSSxtQkFBQTtFQUNBLHlCQUFBO0VBQ0Esb0JBQUE7RUFDQSx1QkFBQTtFQUNBLG9CQUFBO0VBQ0EsNEJBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7QUY4RFI7QUU1RFE7RUFDSSxhQUFBO0VBQ0EsZ0JBQUE7RUFDQSxXQUFBO0VBQ0EsVUFBQTtBRjhEWjtBRXpEQTtFQUNJLHNCQUFBO0FGNERKO0FFekRBO0VBQ0ksYUFBQTtBRjRESjtBRXpEQTtFQUNJLGFBQUE7RUFDQSxtQkFBQTtFQUNBLDhCQUFBO0FGNERKO0FFMURJO0VBQ0ksZ0JBQUE7QUY0RFI7QUV4REE7RUFDSSxTQUFBO0FGMkRKIiwiZmlsZSI6ImxpYnMvbGVnYWN5LW92ZXJsYXlzL3NyYy9saWIvYm9va2luZy1mb3JtL2Jvb2tpbmctZm9ybS5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGNvbG9yLWJyYW5kLWVsZWN0cmljLWJsdWU6ICMyMjUxZmY7XG4kY29sb3ItYnJhbmQtZGVlcC1ibHVlOiAjMDUxYzJjO1xuJGNvbG9yLWJyYW5kLWN5YW46ICMwMGE5ZjQ7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kZm9udC1kYXJrOiAjMDAwO1xuJGZvbnQtbGlnaHQ6ICNmZmY7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuJGdyZWVuMTogIzIxOTY1MztcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2xvci1wcmltYXJ5OiAjMTkzN2VhO1xuJGNvbG9yLXByaW1hcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcbiRjb2xvci1wcmltYXJ5LWRhcms6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuXG4kY29sb3Itc2Vjb25kYXJ5OiAjNDI4NUY0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodDogbGlnaHRlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG4kY29sb3Itc2Vjb25kYXJ5LWRhcms6IGRhcmtlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG5cbiRiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuJGZvb3Rlci1iYWNrOiAjMjYzMjM4O1xuJGhlYWRlci1iYWNrOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNTFDMkMsICMwNTFDMkMgNDAlLCAjMEIyNDUzIDYwJSwgIzFGNDBFNiAxMDAlKTtcblxuJGNvbG9yLXRlcm5hcnk6ICMwNTFjMmM7XG5cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuXG4kZm9udC1zdGFjazogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiRoZWFkaW5nLWZvbnQ6IFwiTGFyaXNoTWNLaW5zZXlcIiwgJ0dlb3JnaWEnLCBzZXJpZjtcbiRmb250OiAkZm9udC1zdGFjaztcblxuJGZvbnQtZmFtaWx5LXByaW1hcnk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LXNlY29uZGFyeTogXCJCb3dlclwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiIHNlcmlmO1xuXG4kYmFzZS1zaXplOiAxNnB4O1xuJHRhYmxldC1zaXplOiAxNnB4O1xuJG1vYmlsZS1zaXplOiAxNnB4O1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGJyZWFrLW1vYmlsZTogNDUwcHg7XG4kYnJlYWstdGFibGV0OiA4MDBweDtcbiRicmVhay1sYXB0b3A6IDEwMjRweDtcblxuJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGU6IDgwMHB4O1xuJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQ6IDEwNDhweDtcbiRicmVhay1sYW5kc2NhcGUtbGFwdG9wOiAxMjgwcHg7XG4iLCJAaW1wb3J0ICcuL3ZhcmlhYmxlcyc7XG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuQG1peGluIGJveC1zaGFkb3coJGNvbG9yOiAjMDAwLCAkZGVwdGg6IDEpIHtcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMXB4ICogKCRkZXB0aCAtIDEpIHJnYmEoIzAwMCwgLjIpLFxuICAgICAgICAgICAgICAgIDAgMXB4IDFweCAwIHJnYmEoIzAwMCwgLjE0KSxcbiAgICAgICAgICAgICAgICAwIDJweCAxcHggLTFweCByZ2JhKCMwMDAsIC4xMik7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG5AbWl4aW4gcmVzcG9uZC10bygkbWVkaWEpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gIEBlbHNlIGlmICRtZWRpYSA9PSBsYXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1AZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiJHByaW1hcnk6ICMxRjQwRTY7XG4kZm9ybS1sYWJlbDogIzA1MUMyQztcbiRzZWNvbmRhcnktbGFiZWw6ICM3Njc2NzY7XG4kYm9yZGVyOiAjQjNCM0IzO1xuJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ6ICNEMEQwRDA7XG4kY2hpcC1jb2xvcjogIzMzMzMzMztcbiRwbGFjZWhvbGRlci1jb2xvcjogIzdGN0Y3RjtcbiRiYWNrZ3JvdW5kLWNvbG9yOiAjRjBGMEYwO1xuJHBhZ2UtYmFja2dyb3VuZC1jb2xvcjogI0Y4RjlGQTtcbiRzZWxlY3RlZC1vcHRpb246ICNFNkU2RTY7XG4kY29sb3ItYnJhbmQteWVsbG93OiAjZmZkMDQ4O1xuJGxpZ2h0LXllbGxvdzogI2ZmZjNjZTtcbiRjb2FjaG1hcmstdGV4dDogIzZmNGQwMDtcbiRlcnJvci1jb2xvcjogI0UxMkU0MDtcbiRuby1maWx0ZXJzLWNvbG9yOiAjQkNCQ0JDO1xuJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yOiAjRjRGNEY0O1xuJHByaW1hcnktaGlnaGxpZ2h0OiAjMjI1MUZGO1xuJHNjcm9sbGJhci1jb2xvcjogIzc1NzU3NTtcblxuJGF2YWlsYWJsZS1jb2xvcjogIzVEOUQ1MjtcbiRhdmFpbGFibGUtYnktcmVxdWVzdC1jb2xvcjogI0Y1QjUzRjtcbiRpbi11c2UtY29sb3I6ICNENDQ4M0U7XG4kbm90LWJvb2thYmxlLWNvbG9yOiAjQ0NDQ0NDO1xuXG4kbW9kYWwtYm9keS1oZWFkaW5nOiAjNEQ0RDREO1xuJGFsZXJ0LW92ZXJsYXktYmc6IHJnYmEoNSwgMjgsIDQ0LCAwLjg1KTtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG5cbiRwZW5kaW5nOiAjZmZiMzAwO1xuJHBlbmRpbmctbGlnaHQ6IGxpZ2h0ZW4oJHBlbmRpbmcsIDEwKTtcbiRwZW5kaW5nLWRhcms6IGRhcmtlbigkcGVuZGluZywgMTApO1xuXG4kZXJyb3I6ICNlNTM5MzU7XG4kZXJyb3ItbGlnaHQ6IGxpZ2h0ZW4oJGVycm9yLCAxMCk7XG4kZXJyb3ItZGFyazogZGFya2VuKCRlcnJvciwgMTApO1xuXG4kY29hY2htYXJrLWJnOiAjRUJFQkY2O1xuJGNvYWNobWFyay1kYXJrLXRleHQ6ICMxQjFCMTk7XG4kZXJyb3ItdGV4dDogI2ZmZjtcblxuLyoqXG4gKiBTcGFjaW5nXG4gKi9cblxuLy8gNHB4XG4kc3BhY2luZy1zbWFsbGVzdDogMC4yNXJlbTtcblxuLy8gOHB4XG4kc3BhY2luZy14eHNtYWxsOiAwLjVyZW07XG5cbi8vIDEycHhcbiRzcGFjaW5nLXhzbWFsbDogMC43NXJlbTtcblxuLy8gMTZweFxuJHNwYWNpbmctc21hbGw6IDFyZW07XG5cbi8vIDIwcHhcbiRzcGFjaW5nLXNtYWxsLW1lZGl1bTogMS4yNXJlbTtcblxuLy8gMjRweFxuJHNwYWNpbmctbWVkaXVtOiAxLjVyZW07XG5cbi8vIDI4cHhcbiRzcGFjaW5nLW1lZGl1bS1sYXJnZTogMS43NXJlbTtcblxuLy8gMzJweFxuJHNwYWNpbmctbGFyZ2U6IDJyZW07XG5cbi8vIDQ4cHhcbiRzcGFjaW5nLXhsYXJnZTogM3JlbTtcblxuLy8gNjRweFxuJHNwYWNpbmcteHhsYXJnZTogNHJlbTtcblxuLy8gOTZweFxuJHNwYWNpbmctbGFyZ2VzdDogNnJlbTtcblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbiRkZXZpY2UtbW9iaWxlLXNpemU6IDQ1MHB4O1xuJGRldmljZS10YWJsZXQtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhcHRvcC1zaXplOiAxMDI0cHg7XG5cbiRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplOiAxMDQ4cHg7XG4kZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZTogMTI4MHB4O1xuXG5cbjpleHBvcnQge1xuICAgIHByaW1hcnk6ICRwcmltYXJ5O1xuICAgIHNlY29uZGFyeUxhYmVsOiAkc2Vjb25kYXJ5LWxhYmVsO1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuJGljb24tc21hbGw6IDE2cHg7XG4kaWNvbi1tZWRpdW06IDI0cHg7XG4kaWNvbi1sYXJnZTogMzJweDtcbiRpY29uLXhsYXJnZTogNDhweDtcbiIsIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG5sYWJlbCB7XG4gIG1pbi13aWR0aDogMTAwJTtcbiAgbWFyZ2luLXRvcDogMS4yNWVtO1xuICBtYXJnaW4tcmlnaHQ6IDFlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAwLjVlbTtcbn1cbmxhYmVsIHNwYW4ge1xuICBjb2xvcjogI2ZmYjMwMDtcbn1cbmxhYmVsLmVycm9yIHtcbiAgY29sb3I6ICNlNTM5MzU7XG59XG5cbi5maWVsZCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbn1cblxuLmluZm8ge1xuICBmb250LXNpemU6IDAuN2VtO1xuICBjb2xvcjogI2U1MzkzNTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbWFyZ2luLWxlZnQ6IDFlbTtcbn1cblxuLmxhYmVsLWdyb3VwIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgd2lkdGg6IDEwMCU7XG59XG4ubGFiZWwtZ3JvdXAgbGFiZWwge1xuICBtaW4td2lkdGg6IDFweDtcbiAgZmxleDogMTtcbn1cbi5sYWJlbC1ncm91cCBtYXQtY2hlY2tib3gge1xuICBmb250LXNpemU6IDAuOGVtO1xuICBtaW4td2lkdGg6IDllbTtcbiAgZmxleDogMDtcbiAgbWFyZ2luOiAwO1xufVxuXG5tYXQtZm9ybS1maWVsZCxcbmEtZGF0ZS1maWVsZCxcbmFuLWFjdGlvbi1maWVsZCxcbmVkaXRvciB7XG4gIGZsZXg6IDE7XG4gIG1pbi13aWR0aDogNTAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgbWF0LWZvcm0tZmllbGQsXG5hLWRhdGUtZmllbGQsXG5hbi1hY3Rpb24tZmllbGQsXG5lZGl0b3Ige1xuICAgIG1pbi13aWR0aDogMTZlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIG1hdC1mb3JtLWZpZWxkLFxuYS1kYXRlLWZpZWxkLFxuYW4tYWN0aW9uLWZpZWxkLFxuZWRpdG9yIHtcbiAgICBtaW4td2lkdGg6IDE2ZW07XG4gIH1cbn1cblxuYS1kYXRlLWZpZWxkLmZ1bGwtd2lkdGgge1xuICBmbGV4OiAwIDAgMTAwJTtcbn1cblxuYS1kYXRlLWZpZWxkICsgLmVycm9yLmluZm8ge1xuICBtYXJnaW4tdG9wOiAtMWVtO1xufVxuXG5tYXQtY2hlY2tib3gge1xuICBtYXJnaW4tYm90dG9tOiAxZW07XG59XG5cbi5ncm91cCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbn1cbi5ncm91cCA+ICoge1xuICBtaW4td2lkdGg6IDE3ZW07XG4gIGZsZXg6IDE7XG4gIG1hcmdpbjogMC41ZW07XG59XG4uZ3JvdXAgPiAqOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLWxlZnQ6IDA7XG59XG4uZ3JvdXAgPiAqOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tcmlnaHQ6IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuZ3JvdXAgPiAqIHtcbiAgICBtYXJnaW46IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuZ3JvdXAgPiAqIHtcbiAgICBtYXJnaW46IDA7XG4gIH1cbn1cbi5ncm91cCAuY29hY2htYXJrIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IC0yMHB4O1xuICBsZWZ0OiAtNnB4O1xufVxuXG4ucmVjdXJyZW5jZS1zaXdjaCB7XG4gIG1hcmdpbi1ib3R0b206IDAuNWVtO1xufVxuLnJlY3VycmVuY2Utc2l3Y2ggOjpuZy1kZWVwIC5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnQge1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQ2FsaWJyaSwgQ29yYmVsLCBIZWx2ZXRpY2EsIFJvYm90bywgRHJvaWQsIHNhbnMtc2VyaWYgIWltcG9ydGFudDtcbiAgY29sb3I6ICMzMzMzMzM7XG59XG5cbi50aW1lLWlucHV0cywgLnRpbWUtaW5wdXRzLWNhbGVuZGFyIHtcbiAgZmxleDogMTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC50aW1lLWlucHV0cywgLnRpbWUtaW5wdXRzLWNhbGVuZGFyIHtcbiAgICBtaW4td2lkdGg6IDE3NnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLnRpbWUtaW5wdXRzLCAudGltZS1pbnB1dHMtY2FsZW5kYXIge1xuICAgIG1pbi13aWR0aDogMTc2cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC50aW1lLWlucHV0cy1jYWxlbmRhciB7XG4gICAgbWluLXdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206IDFyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAudGltZS1pbnB1dHMtY2FsZW5kYXIge1xuICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC50aW1lLWlucHV0cy1jYWxlbmRhciB7XG4gICAgbWluLXdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206IDFyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkgYW5kIChtYXgtd2lkdGg6IDEwNDhweCkge1xuICAudGltZS1pbnB1dHMtY2FsZW5kYXIge1xuICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuICB9XG59XG5cbi5kYXRlLWZpZWxkIGxhYmVsIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5jb21wYW55LW5hbWUge1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuLmNvbXBhbnktbmFtZSAubWF0LWZvcm0tZmllbGQtY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxvdztcbiAgbWF4LXdpZHRoOiA5MCU7XG59XG4uY29tcGFueS1uYW1lIC5tYXQtZm9ybS1maWVsZC1jb250YWluZXIgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICBwYWRkaW5nLWJvdHRvbTogMGVtO1xufVxuLmNvbXBhbnktbmFtZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LXByaW1hcnkge1xuICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzMzMzO1xuICBwYWRkaW5nLXRvcDogMC4yNXJlbTtcbiAgcGFkZGluZy1ib3R0b206IDAuMjVyZW07XG4gIHBhZGRpbmctbGVmdDogMC41cmVtO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGNvbG9yOiAjZmZmO1xuICBmb250LXNpemU6IDAuNzVyZW07XG59XG4uY29tcGFueS1uYW1lIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtcHJpbWFyeSAubWNrLWNsb3NlLWljb24ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZW5kO1xuICBjb2xvcjogI2ZmZjtcbiAgb3BhY2l0eTogMTtcbn1cblxuLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICBwYWRkaW5nOiAxLjVlbSAwIDFlbSAwO1xufVxuXG4uY2hpcC1pbnB1dC13cmFwcGVyIHtcbiAgZGlzcGxheTogZmxleDtcbn1cblxuLmlucHV0LXdpdGgtYnV0dG9uIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuLmlucHV0LXdpdGgtYnV0dG9uIC5pbnB1dC1idXR0b24ge1xuICBtYXgtaGVpZ2h0OiA1NHB4O1xufVxuXG4udG9nZ2xlLXJvdyB7XG4gIGdhcDogMjBweDtcbn0iLCJAaW1wb3J0IFwidmFyc1wiO1xuXG5AbWl4aW4gcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkc2l6ZSwgJHF1YWxpZmllcikge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQGlmICgkcXVhbGlmaWVyID09IG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2UgaWYgKCRxdWFsaWZpZXIgPT0gbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1heC13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuQG1peGluIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkbWluLCAkbWF4KSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyB0aGlzIGlzIGEgY29weSBvZiByZXNwb25kLXRvLiB3ZSBkb24ndCB3YW50IHRvIHByZXNlcnZlIHRoYXQgbWV0aG9kIHNpbmNlIHRoZSBicmVha3BvaW50cyBtYXkgZGl2ZXJnZSBmcm9tIHRoZSBvbGQgVUkuXG5AbWl4aW4gaXMtc2NyZWVuLXNpemUoJG1lZGlhOiBhbGwsICRvcmllbnRhdGlvbjogbm9uZSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5cbkBtaXhpbiBwYWdlLXBhZGRpbmcge1xuICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctc21hbGw7XG4gICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctc21hbGw7XG59XG5cbi8vIEZvbnQgTWl4aW5zXG4kZm9udC1tY2tpbnNleS1zYW5zOiBcIk1jS2luc2V5IFNhbnNcIjtcbiRmb250LXRoZWluaGFyZHQ6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuJGZvbnQtYm93ZXI6IFwiQm93ZXJcIjtcblxuQG1peGluIGJvd2VyLWJvbGQge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1ib3dlcjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gbWNraW5zZXktc2FucyB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIGRpc3BsYXktMSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNHJlbTsgLy8gNjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODc7IC8vIDc2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTIge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTMge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2MHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNCB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDNyZW07IC8vIDQ4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNjY7IC8vIDU2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjRweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMwcHhcbiAgICBsaW5lLWhlaWdodDogMS44MzM7IC8vIDM0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY0MjsgLy8gNDBweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0xIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNDhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNzVyZW07IC8vIDQ0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA1MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0yIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjExMTsgLy8gNDRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDQ4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTMge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMjI7IC8vIDQ0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTUge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTYge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTU7IC8vIDI4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBib2R5LWRlZmF1bHQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjZweFxuICAgIH1cbn1cblxuLy8vIERvZXNudCBleGlzdCBpbiBNRFMuXG5AbWl4aW4gYm9keS10aW55IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTsgLy8gMTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDIwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBmb3JtLWxhYmVsIHtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC10aGVpbmhhcmR0O1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBjb2xvcjogJHBsYWNlaG9sZGVyLWNvbG9yO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG59XG5cbkBtaXhpbiBjaGlwLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gY2hlY2tib3gtbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICBjb2xvcjogYmxhY2s7XG59XG5cbi8vIGJvcmRlcnNcblxuQG1peGluIG1jay1jaGVja2JveC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stdGhpbi1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYm9yZGVyLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQtbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlci1saWdodDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cblxuLy8gZnVuY3Rpb25zXG5cbi8qKlxuICogTWFrZXMgdGV4dCBoYXZlIG1heGltdW0gbGluZXMgd2l0aCBlbGxpcHNpcy4gV29ya3Mgb24gbW9zdCBtb2Rlcm4gYnJvd3NlcnMgZXhjZXB0XG4gKiBvZiBGaXJlZm94Li5cbiAqL1xuQG1peGluIG1heC1saW5lcygkY291bnQpIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIC13ZWJraXQtbGluZS1jbGFtcDogJGNvdW50O1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG59XG5cbi8vIGltYWdlc1xuQG1peGluIG1jay1pY29uKCR3aWR0aCwgJGFzc2V0LCAkaGVpZ2h0OiAkd2lkdGgsICAkYXNzZXRQYXRoOiBcImxpYnMvdWkvc3JjL2xpYi9pY29uc1wiLCkge1xuICAgIHdpZHRoOiAkd2lkdGg7XG4gICAgaGVpZ2h0OiAkaGVpZ2h0O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiN7JGFzc2V0UGF0aH0vI3skYXNzZXR9XCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbn1cblxuXG5AbWl4aW4gbWNrLXNtYWxsLWljb24oJG1vYmlsZS1hc3NldCwgJGRlc2t0b3AtYXNzZXQ6ICRtb2JpbGUtYXNzZXQpIHtcbiAgICBAaW5jbHVkZSBtY2staWNvbigxNnB4LCAkYXNzZXQ6ICRtb2JpbGUtYXNzZXQpO1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBAaW5jbHVkZSBtY2staWNvbigyNHB4LCAkYXNzZXQ6ICRkZXNrdG9wLWFzc2V0KTtcbiAgICB9XG59XG5cbi8vIHNrZWxldG9uXG5AbWl4aW4gc2tlbGV0b24tYmcge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1pbWFnZS1zaXplIHtcbiAgICB3aWR0aDogODFweDtcbiAgICBoZWlnaHQ6IDgycHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAyMTlweDtcbiAgICAgICAgaGVpZ2h0OiAxMTlweDtcbiAgICB9XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1zdGF0dXMtc2l6ZSB7XG4gICAgd2lkdGg6IDExN3B4O1xuICAgIGhlaWdodDogNzhweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDExN3B4O1xuICAgICAgICBoZWlnaHQ6IDc4cHg7XG4gICAgfVxufVxuIiwiXG5AaW1wb3J0ICdsaWJzL2xlZ2FjeS11aS9zcmMvbGliL3N0eWxlcy92YXJpYWJsZXMnO1xuQGltcG9ydCAnbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zJztcbkBpbXBvcnQgXCJsaWJzL3VpL3NyYy9saWIvbWl4aW5zXCI7XG5cbmxhYmVsIHtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLXRvcDogMS4yNWVtO1xuICAgIG1hcmdpbi1yaWdodDogMWVtO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGZvbnQtc2l6ZTogLjhlbTtcbiAgICAvLyBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogLjVlbTtcbiAgICAvLyB9XG5cbiAgICBzcGFuIHtcbiAgICAgICAgY29sb3I6ICRwZW5kaW5nO1xuICAgIH1cblxuICAgICYuZXJyb3Ige1xuICAgICAgICBjb2xvcjogJGVycm9yO1xuICAgIH1cbn1cblxuLmZpZWxkIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuXG4gICAgLy8gQGluY2x1ZGUgcmVzcG9uZC10byhtb2JpbGUpIHtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgIC8vIH1cbn1cblxuLmluZm8ge1xuICAgIGZvbnQtc2l6ZTogMC43ZW07XG4gICAgY29sb3I6ICNlNTM5MzU7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBtYXJnaW4tbGVmdDogMWVtO1xufVxuXG4ubGFiZWwtZ3JvdXAge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgIGxhYmVsIHtcbiAgICAgICAgbWluLXdpZHRoOiAxcHg7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgfVxuXG4gICAgbWF0LWNoZWNrYm94IHtcbiAgICAgICAgZm9udC1zaXplOiAuOGVtO1xuICAgICAgICBtaW4td2lkdGg6IDllbTtcbiAgICAgICAgZmxleDogMDtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbn1cblxubWF0LWZvcm0tZmllbGQsXG5hLWRhdGUtZmllbGQsXG5hbi1hY3Rpb24tZmllbGQsXG5lZGl0b3Ige1xuICAgIGZsZXg6IDE7XG4gICAgbWluLXdpZHRoOiA1MCU7XG5cbiAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgICBtaW4td2lkdGg6IDE2ZW07XG4gICAgfVxufVxuXG5cbmEtZGF0ZS1maWVsZC5mdWxsLXdpZHRoIHtcbiAgICBmbGV4OiAwIDAgMTAwJTtcbn1cblxuYS1kYXRlLWZpZWxkICsgLmVycm9yLmluZm8ge1xuICAgIG1hcmdpbi10b3A6IC0xZW07XG59XG5cblxubWF0LWNoZWNrYm94IHtcbiAgICBtYXJnaW4tYm90dG9tOiAxZW07XG59XG5cblxuLmdyb3VwIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICA+ICoge1xuICAgICAgICBtaW4td2lkdGg6IDE3ZW07XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIG1hcmdpbjogLjVlbTtcbiAgICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgICAgfVxuICAgICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgQGluY2x1ZGUgcmVzcG9uZC10byhtb2JpbGUpIHtcbiAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAuY29hY2htYXJrIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB0b3A6IC0yMHB4O1xuICAgICAgICBsZWZ0OiAtNnB4O1xuICAgIH1cbn1cblxuLnJlY3VycmVuY2Utc2l3Y2h7XG4gICAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gICAgOjpuZy1kZWVwIHtcbiAgICAgICAgLm1hdC1zbGlkZS10b2dnbGUtY29udGVudHtcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktcHJpbWFyeSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgY29sb3I6ICMzMzMzMzM7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuLnRpbWUtaW5wdXRzIHtcbiAgICBmbGV4OiAxO1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgbWluLXdpZHRoOiAxNzZweDtcbiAgICB9XG5cbiAgICAmLWNhbGVuZGFyIHtcbiAgICAgICAgQGV4dGVuZCAudGltZS1pbnB1dHM7XG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgbWluLXdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogJHNwYWNpbmctc21hbGw7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUodGFibGV0KSB7XG4gICAgICAgICAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy1zbWFsbDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmRhdGUtZmllbGQgbGFiZWx7XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgICB3aWR0aDogMTAwJTtcbn1cblxuLmNvbXBhbnktbmFtZXtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG5cbiAgICAubWF0LWZvcm0tZmllbGQtY29udGFpbmVye1xuICAgICAgICBkaXNwbGF5OiBmbG93O1xuICAgICAgICBtYXgtd2lkdGg6IDkwJTtcblxuICAgICAgICAubWF0LWZvcm0tZmllbGQtd3JhcHBlciB7XG4gICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMGVtO1xuICAgICAgICB9ICAgICAgICBcbiAgICB9XG4gICAgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1wcmltYXJ5e1xuICAgICAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzMzMzO1xuICAgICAgICBwYWRkaW5nLXRvcDogMC4yNXJlbTtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDAuMjVyZW07XG4gICAgICAgIHBhZGRpbmctbGVmdDogMC41cmVtO1xuICAgICAgICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgXG4gICAgICAgIC5tY2stY2xvc2UtaWNvbntcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogZW5kO1xuICAgICAgICAgICAgY29sb3I6I2ZmZjtcbiAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5tYXQtZm9ybS1maWVsZC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWluZml4e1xuICAgIHBhZGRpbmc6IDEuNWVtIDAgMWVtIDA7XG59XG5cbi5jaGlwLWlucHV0LXdyYXBwZXJ7XG4gICAgZGlzcGxheTogZmxleDtcbn1cblxuLmlucHV0LXdpdGgtYnV0dG9ue1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgICAuaW5wdXQtYnV0dG9ue1xuICAgICAgICBtYXgtaGVpZ2h0OiA1NHB4O1xuICAgIH1cbn1cblxuLnRvZ2dsZS1yb3d7XG4gICAgZ2FwOiAyMHB4O1xufSJdfQ== */"], + directives: [i3.NgIf, i4.NgControlStatusGroup, i4.FormGroupDirective, i5.MatSlideToggle, i4.NgControlStatus, i4.FormControlName, i6.MatCheckbox, i7.ActionFieldComponent, i8.MatFormField, i9.MatInput, i4.DefaultValueAccessor, i8.MatError, i10.DateTzDatePickerComponent, i11.DateTzTimeFieldComponent, i4.RequiredValidator, i4.NgModel, i12.DateTzDurationFieldComponent, i13.RecurringBookingForm, i14.UserSearchFieldComponent, i15.MatSelect, i3.NgForOf, i16.MatOption, i17.UserListFieldComponent, i18.MatChipInput, i19.MatButton, i18.MatChipList, i18.MatChip, i18.MatChipRemove, i20.EditorComponent], + styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\nlabel[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-top: 1.25em;\n margin-right: 1em;\n font-weight: bold;\n font-size: 0.8em;\n width: 100%;\n margin-top: 0;\n margin-bottom: 0.5em;\n}\nlabel[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: #ffb300;\n}\nlabel.error[_ngcontent-%COMP%] {\n color: #e53935;\n}\n.field[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n}\n.warnings-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n.info[_ngcontent-%COMP%] {\n font-size: 0.7em;\n color: #e53935;\n font-weight: 400;\n margin-left: 1em;\n}\n.label-group[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n width: 100%;\n}\n.label-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n min-width: 1px;\n flex: 1;\n}\n.label-group[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] {\n font-size: 0.8em;\n min-width: 9em;\n flex: 0;\n margin: 0;\n}\nmat-form-field[_ngcontent-%COMP%], a-date-field[_ngcontent-%COMP%], an-action-field[_ngcontent-%COMP%], editor[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 50%;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n mat-form-field[_ngcontent-%COMP%], a-date-field[_ngcontent-%COMP%], an-action-field[_ngcontent-%COMP%], editor[_ngcontent-%COMP%] {\n min-width: 16em;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n mat-form-field[_ngcontent-%COMP%], a-date-field[_ngcontent-%COMP%], an-action-field[_ngcontent-%COMP%], editor[_ngcontent-%COMP%] {\n min-width: 16em;\n }\n}\na-date-field.full-width[_ngcontent-%COMP%] {\n flex: 0 0 100%;\n}\na-date-field[_ngcontent-%COMP%] + .error.info[_ngcontent-%COMP%] {\n margin-top: -1em;\n}\nmat-checkbox[_ngcontent-%COMP%] {\n margin-bottom: 1em;\n}\n.group[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n}\n.group[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] {\n min-width: 17em;\n flex: 1;\n margin: 0.5em;\n}\n.group[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]:first-child {\n margin-left: 0;\n}\n.group[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]:last-child {\n margin-right: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .group[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .group[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n.group[_ngcontent-%COMP%] .coachmark[_ngcontent-%COMP%] {\n position: relative;\n top: -20px;\n left: -6px;\n}\n.group[_ngcontent-%COMP%] .coachmark.warning[_ngcontent-%COMP%] {\n color: #e53935;\n}\n.recurrence-siwch[_ngcontent-%COMP%] {\n margin-bottom: 0.5em;\n}\n.recurrence-siwch[_ngcontent-%COMP%] .mat-slide-toggle-content {\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif !important;\n color: #333333;\n}\n.recurrence-siwch[_ngcontent-%COMP%] .mat-checkbox-layout {\n display: flex;\n}\n.recurrence-siwch[_ngcontent-%COMP%] .key[_ngcontent-%COMP%] {\n display: flex;\n height: 23px;\n padding-bottom: 3px;\n}\n.recurrence-siwch[_ngcontent-%COMP%] .key[_ngcontent-%COMP%] .text[_ngcontent-%COMP%] {\n display: flex;\n place-items: center;\n}\n.time-inputs[_ngcontent-%COMP%], .time-inputs-calendar[_ngcontent-%COMP%] {\n flex: 1;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .time-inputs[_ngcontent-%COMP%], .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 176px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .time-inputs[_ngcontent-%COMP%], .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 176px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-bottom: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-bottom: 1rem;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-bottom: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-bottom: 1rem;\n }\n}\n.date-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n}\n.mat-form-field-wrapper[_ngcontent-%COMP%] {\n width: 100%;\n}\n.company-name[_ngcontent-%COMP%] {\n flex-direction: column;\n margin-bottom: 20px;\n}\n.company-name[_ngcontent-%COMP%] .mat-form-field-container[_ngcontent-%COMP%] {\n display: flow;\n max-width: 90%;\n}\n.company-name[_ngcontent-%COMP%] .mat-form-field-container[_ngcontent-%COMP%] .mat-form-field-wrapper[_ngcontent-%COMP%] {\n padding-bottom: 0em;\n}\n.company-name[_ngcontent-%COMP%] .mat-chip.mat-standard-chip.mat-primary[_ngcontent-%COMP%] {\n border-radius: 20px;\n background-color: #333333;\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-family: \"McKinsey Sans\";\n color: #fff;\n font-size: 0.75rem;\n}\n.company-name[_ngcontent-%COMP%] .mat-chip.mat-standard-chip.mat-primary[_ngcontent-%COMP%] .mck-close-icon[_ngcontent-%COMP%] {\n display: flex;\n align-items: end;\n color: #fff;\n opacity: 1;\n}\n.mat-form-field-wrapper[_ngcontent-%COMP%] .mat-form-field-appearance-outline[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n padding: 1.5em 0 1em 0;\n}\n.chip-input-wrapper[_ngcontent-%COMP%] {\n display: flex;\n}\n.input-with-button[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n}\n.input-with-button[_ngcontent-%COMP%] .input-button[_ngcontent-%COMP%] {\n max-height: 54px;\n}\n.toggle-row[_ngcontent-%COMP%] {\n gap: 20px;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvdmFycy5zY3NzIiwibGlicy9sZWdhY3ktb3ZlcmxheXMvc3JjL2xpYi9ib29raW5nLWZvcm0vYm9va2luZy1mb3JtLmNvbXBvbmVudC5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy91aS9zcmMvbGliL21peGlucy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktb3ZlcmxheXMvc3JjL2xpYi9ib29raW5nLWZvcm0vYm9va2luZy1mb3JtLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzswQkFBQTtBQVFBOzswQkFBQTtBQWtDQTs7Y0FBQTtBQWdCQTs7c0JBQUE7QUExREE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQzVDQTs7c0JBQUE7QUM2QkE7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDa0NsQjtBRDhEQTs7c0JBQUE7QUVrT0E7OztFQUFBO0FDL1RBO0VBQ0ksZUFBQTtFQUNBLGtCQUFBO0VBQ0EsaUJBQUE7RUFDQSxpQkFBQTtFQUNBLGdCQUFBO0VBRUksV0FBQTtFQUNBLGFBQUE7RUFDQSxvQkFBQTtBRndDUjtBRXJDSTtFQUNJLGNIYUU7QUMwQlY7QUVwQ0k7RUFDSSxjSGFBO0FDeUJSO0FFbENBO0VBQ0ksYUFBQTtFQUdJLGVBQUE7QUZtQ1I7QUUvQkE7RUFDSSxhQUFBO0VBQ0Esc0JBQUE7RUFDQSxTQUFBO0FGa0NKO0FFL0JBO0VBQ0ksZ0JBQUE7RUFDQSxjQUFBO0VBQ0EsZ0JBQUE7RUFDQSxnQkFBQTtBRmtDSjtBRS9CQTtFQUNJLGFBQUE7RUFDQSxtQkFBQTtFQUNBLFdBQUE7QUZrQ0o7QUVoQ0k7RUFDSSxjQUFBO0VBQ0EsT0FBQTtBRmtDUjtBRS9CSTtFQUNJLGdCQUFBO0VBQ0EsY0FBQTtFQUNBLE9BQUE7RUFDQSxTQUFBO0FGaUNSO0FFN0JBOzs7O0VBSUksT0FBQTtFQUNBLGNBQUE7QUZnQ0o7QUZsRlE7RUk2Q1I7Ozs7SUFRUSxlQUFBO0VGb0NOO0FBQ0Y7QUZ2RlE7RUkwQ1I7Ozs7SUFRUSxlQUFBO0VGNENOO0FBQ0Y7QUV4Q0E7RUFDSSxjQUFBO0FGMkNKO0FFeENBO0VBQ0ksZ0JBQUE7QUYyQ0o7QUV2Q0E7RUFDSSxrQkFBQTtBRjBDSjtBRXRDQTtFQUNJLGFBQUE7RUFDQSxlQUFBO0FGeUNKO0FFeENJO0VBQ0ksZUFBQTtFQUNBLE9BQUE7RUFDQSxhQUFBO0FGMENSO0FFekNRO0VBQ0ksY0FBQTtBRjJDWjtBRXpDUTtFQUNJLGVBQUE7QUYyQ1o7QUY5SFE7RUkyRUo7SUFZUSxTQUFBO0VGMkNWO0FBQ0Y7QUZoSVE7RUl3RUo7SUFZUSxTQUFBO0VGZ0RWO0FBQ0Y7QUU5Q0k7RUFDSSxrQkFBQTtFQUNBLFVBQUE7RUFDQSxVQUFBO0FGZ0RSO0FFOUNRO0VBQ0ksY0FBQTtBRmdEWjtBRTNDQTtFQUNJLG9CQUFBO0FGOENKO0FFNUNRO0VBQ0ksZ0hBQUE7RUFDQSxjQUFBO0FGOENaO0FFNUNRO0VBQ0ksYUFBQTtBRjhDWjtBRTFDSTtFQUNJLGFBQUE7RUFDQSxZQUFBO0VBQ0EsbUJBQUE7QUY0Q1I7QUUzQ1E7RUFDSSxhQUFBO0VBQ0EsbUJBQUE7QUY2Q1o7QUV2Q0E7RUFDSSxPQUFBO0FGMENKO0FDdkxZO0VDNElaO0lBR1EsZ0JBQUE7RUY0Q047QUFDRjtBQzVMWTtFQzRJWjtJQUdRLGdCQUFBO0VGaUROO0FBQ0Y7QUM3TFk7RUM4SVI7SUFHUSxlQUFBO0lBQ0EsbUJIbEdJO0VDa0pkO0FBQ0Y7QUNuTVk7RUM4SVI7SUFHUSxlQUFBO0lBQ0EsbUJIbEdJO0VDd0pkO0FBQ0Y7QUNoTVE7RUNxSUo7SUFPUSxlQUFBO0lBQ0EsbUJIdEdJO0VDOEpkO0FBQ0Y7QUN0TVE7RUNxSUo7SUFPUSxlQUFBO0lBQ0EsbUJIdEdJO0VDb0tkO0FBQ0Y7QUUxREE7RUFDSSxjQUFBO0FGNkRKO0FFMURBO0VBQ0ksV0FBQTtBRjZESjtBRTFEQTtFQUNJLHNCQUFBO0VBQ0EsbUJBQUE7QUY2REo7QUUzREk7RUFDSSxhQUFBO0VBQ0EsY0FBQTtBRjZEUjtBRTNEUTtFQUNJLG1CQUFBO0FGNkRaO0FFMURJO0VBQ0ksbUJBQUE7RUFDQSx5QkFBQTtFQUNBLG9CQUFBO0VBQ0EsdUJBQUE7RUFDQSxvQkFBQTtFQUNBLDRCQUFBO0VBQ0EsV0FBQTtFQUNBLGtCQUFBO0FGNERSO0FFMURRO0VBQ0ksYUFBQTtFQUNBLGdCQUFBO0VBQ0EsV0FBQTtFQUNBLFVBQUE7QUY0RFo7QUV2REE7RUFDSSxzQkFBQTtBRjBESjtBRXZEQTtFQUNJLGFBQUE7QUYwREo7QUV2REE7RUFDSSxhQUFBO0VBQ0EsbUJBQUE7RUFDQSw4QkFBQTtBRjBESjtBRXhESTtFQUNJLGdCQUFBO0FGMERSO0FFdERBO0VBQ0ksU0FBQTtBRnlESiIsImZpbGUiOiJsaWJzL2xlZ2FjeS1vdmVybGF5cy9zcmMvbGliL2Jvb2tpbmctZm9ybS9ib29raW5nLWZvcm0uY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRjb2xvci1icmFuZC1lbGVjdHJpYy1ibHVlOiAjMjI1MWZmO1xuJGNvbG9yLWJyYW5kLWRlZXAtYmx1ZTogIzA1MWMyYztcbiRjb2xvci1icmFuZC1jeWFuOiAjMDBhOWY0O1xuXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGZvbnQtZGFyazogIzAwMDtcbiRmb250LWxpZ2h0OiAjZmZmO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcbiRncmVlbjE6ICMyMTk2NTM7XG5cbiRwZW5kaW5nOiAjZmZiMzAwO1xuJHBlbmRpbmctbGlnaHQ6IGxpZ2h0ZW4oJHBlbmRpbmcsIDEwKTtcbiRwZW5kaW5nLWRhcms6IGRhcmtlbigkcGVuZGluZywgMTApO1xuXG4kZXJyb3I6ICNlNTM5MzU7XG4kZXJyb3ItbGlnaHQ6IGxpZ2h0ZW4oJGVycm9yLCAxMCk7XG4kZXJyb3ItZGFyazogZGFya2VuKCRlcnJvciwgMTApO1xuXG4kY29sb3ItcHJpbWFyeTogIzE5MzdlYTtcbiRjb2xvci1wcmltYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG4kY29sb3ItcHJpbWFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcblxuJGNvbG9yLXNlY29uZGFyeTogIzQyODVGNDtcbiRjb2xvci1zZWNvbmRhcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuJGNvbG9yLXNlY29uZGFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuXG4kYmFja2dyb3VuZDogI2YwZjBmMDtcbiRmb290ZXItYmFjazogIzI2MzIzODtcbiRoZWFkZXItYmFjazogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMDUxQzJDLCAjMDUxQzJDIDQwJSwgIzBCMjQ1MyA2MCUsICMxRjQwRTYgMTAwJSk7XG5cbiRjb2xvci10ZXJuYXJ5OiAjMDUxYzJjO1xuXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cblxuJGZvbnQtc3RhY2s6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuXG4kaGVhZGluZy1mb250OiBcIkxhcmlzaE1jS2luc2V5XCIsICdHZW9yZ2lhJywgc2VyaWY7XG4kZm9udDogJGZvbnQtc3RhY2s7XG5cbiRmb250LWZhbWlseS1wcmltYXJ5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbiRmb250LWZhbWlseS1zZWNvbmRhcnk6IFwiQm93ZXJcIiwgR2VvcmdpYSwgXCJUaW1lcyBOZXcgUm9tYW5cIiBzZXJpZjtcblxuJGJhc2Utc2l6ZTogMTZweDtcbiR0YWJsZXQtc2l6ZTogMTZweDtcbiRtb2JpbGUtc2l6ZTogMTZweDtcblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbiRicmVhay1tb2JpbGU6IDQ1MHB4O1xuJGJyZWFrLXRhYmxldDogODAwcHg7XG4kYnJlYWstbGFwdG9wOiAxMDI0cHg7XG5cbiRicmVhay1sYW5kc2NhcGUtbW9iaWxlOiA4MDBweDtcbiRicmVhay1sYW5kc2NhcGUtdGFibGV0OiAxMDQ4cHg7XG4kYnJlYWstbGFuZHNjYXBlLWxhcHRvcDogMTI4MHB4O1xuIiwiQGltcG9ydCAnLi92YXJpYWJsZXMnO1xuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbkBtaXhpbiBib3gtc2hhZG93KCRjb2xvcjogIzAwMCwgJGRlcHRoOiAxKSB7XG4gICAgYm94LXNoYWRvdzogMCAxcHggM3B4IDFweCAqICgkZGVwdGggLSAxKSByZ2JhKCMwMDAsIC4yKSxcbiAgICAgICAgICAgICAgICAwIDFweCAxcHggMCByZ2JhKCMwMDAsIC4xNCksXG4gICAgICAgICAgICAgICAgMCAycHggMXB4IC0xcHggcmdiYSgjMDAwLCAuMTIpO1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuQG1peGluIHJlc3BvbmQtdG8oJG1lZGlhKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9ICBAZWxzZSBpZiAkbWVkaWEgPT0gbGF0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9QGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIiRwcmltYXJ5OiAjMUY0MEU2O1xuJGZvcm0tbGFiZWw6ICMwNTFDMkM7XG4kc2Vjb25kYXJ5LWxhYmVsOiAjNzY3Njc2O1xuJGJvcmRlcjogI0IzQjNCMztcbiRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkOiAjRDBEMEQwO1xuJGNoaXAtY29sb3I6ICMzMzMzMzM7XG4kcGxhY2Vob2xkZXItY29sb3I6ICM3RjdGN0Y7XG4kYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDtcbiRwYWdlLWJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4kc2VsZWN0ZWQtb3B0aW9uOiAjRTZFNkU2O1xuJGNvbG9yLWJyYW5kLXllbGxvdzogI2ZmZDA0ODtcbiRsaWdodC15ZWxsb3c6ICNmZmYzY2U7XG4kY29hY2htYXJrLXRleHQ6ICM2ZjRkMDA7XG4kZXJyb3ItY29sb3I6ICNFMTJFNDA7XG4kbm8tZmlsdGVycy1jb2xvcjogI0JDQkNCQztcbiRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjogI0Y0RjRGNDtcbiRwcmltYXJ5LWhpZ2hsaWdodDogIzIyNTFGRjtcbiRzY3JvbGxiYXItY29sb3I6ICM3NTc1NzU7XG5cbiRhdmFpbGFibGUtY29sb3I6ICM1RDlENTI7XG4kYXZhaWxhYmxlLWJ5LXJlcXVlc3QtY29sb3I6ICNGNUI1M0Y7XG4kaW4tdXNlLWNvbG9yOiAjRDQ0ODNFO1xuJG5vdC1ib29rYWJsZS1jb2xvcjogI0NDQ0NDQztcblxuJG1vZGFsLWJvZHktaGVhZGluZzogIzRENEQ0RDtcbiRhbGVydC1vdmVybGF5LWJnOiByZ2JhKDUsIDI4LCA0NCwgMC44NSk7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvYWNobWFyay1iZzogI0VCRUJGNjtcbiRjb2FjaG1hcmstZGFyay10ZXh0OiAjMUIxQjE5O1xuJGVycm9yLXRleHQ6ICNmZmY7XG5cbi8qKlxuICogU3BhY2luZ1xuICovXG5cbi8vIDRweFxuJHNwYWNpbmctc21hbGxlc3Q6IDAuMjVyZW07XG5cbi8vIDhweFxuJHNwYWNpbmcteHhzbWFsbDogMC41cmVtO1xuXG4vLyAxMnB4XG4kc3BhY2luZy14c21hbGw6IDAuNzVyZW07XG5cbi8vIDE2cHhcbiRzcGFjaW5nLXNtYWxsOiAxcmVtO1xuXG4vLyAyMHB4XG4kc3BhY2luZy1zbWFsbC1tZWRpdW06IDEuMjVyZW07XG5cbi8vIDI0cHhcbiRzcGFjaW5nLW1lZGl1bTogMS41cmVtO1xuXG4vLyAyOHB4XG4kc3BhY2luZy1tZWRpdW0tbGFyZ2U6IDEuNzVyZW07XG5cbi8vIDMycHhcbiRzcGFjaW5nLWxhcmdlOiAycmVtO1xuXG4vLyA0OHB4XG4kc3BhY2luZy14bGFyZ2U6IDNyZW07XG5cbi8vIDY0cHhcbiRzcGFjaW5nLXh4bGFyZ2U6IDRyZW07XG5cbi8vIDk2cHhcbiRzcGFjaW5nLWxhcmdlc3Q6IDZyZW07XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kZGV2aWNlLW1vYmlsZS1zaXplOiA0NTBweDtcbiRkZXZpY2UtdGFibGV0LXNpemU6IDgwMHB4O1xuJGRldmljZS1sYXB0b3Atc2l6ZTogMTAyNHB4O1xuXG4kZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZTogMTA0OHB4O1xuJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemU6IDEyODBweDtcblxuXG46ZXhwb3J0IHtcbiAgICBwcmltYXJ5OiAkcHJpbWFyeTtcbiAgICBzZWNvbmRhcnlMYWJlbDogJHNlY29uZGFyeS1sYWJlbDtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbiRpY29uLXNtYWxsOiAxNnB4O1xuJGljb24tbWVkaXVtOiAyNHB4O1xuJGljb24tbGFyZ2U6IDMycHg7XG4kaWNvbi14bGFyZ2U6IDQ4cHg7XG4iLCIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qKlxuICogU3BhY2luZ1xuICovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbjpleHBvcnQge1xuICBwcmltYXJ5OiAjMUY0MEU2O1xuICBzZWNvbmRhcnlMYWJlbDogIzc2NzY3Njtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qKlxuICogTWFrZXMgdGV4dCBoYXZlIG1heGltdW0gbGluZXMgd2l0aCBlbGxpcHNpcy4gV29ya3Mgb24gbW9zdCBtb2Rlcm4gYnJvd3NlcnMgZXhjZXB0XG4gKiBvZiBGaXJlZm94Li5cbiAqL1xubGFiZWwge1xuICBtaW4td2lkdGg6IDEwMCU7XG4gIG1hcmdpbi10b3A6IDEuMjVlbTtcbiAgbWFyZ2luLXJpZ2h0OiAxZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBmb250LXNpemU6IDAuOGVtO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG59XG5sYWJlbCBzcGFuIHtcbiAgY29sb3I6ICNmZmIzMDA7XG59XG5sYWJlbC5lcnJvciB7XG4gIGNvbG9yOiAjZTUzOTM1O1xufVxuXG4uZmllbGQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG59XG5cbi53YXJuaW5ncy1jb250YWluZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDEwcHg7XG59XG5cbi5pbmZvIHtcbiAgZm9udC1zaXplOiAwLjdlbTtcbiAgY29sb3I6ICNlNTM5MzU7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIG1hcmdpbi1sZWZ0OiAxZW07XG59XG5cbi5sYWJlbC1ncm91cCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHdpZHRoOiAxMDAlO1xufVxuLmxhYmVsLWdyb3VwIGxhYmVsIHtcbiAgbWluLXdpZHRoOiAxcHg7XG4gIGZsZXg6IDE7XG59XG4ubGFiZWwtZ3JvdXAgbWF0LWNoZWNrYm94IHtcbiAgZm9udC1zaXplOiAwLjhlbTtcbiAgbWluLXdpZHRoOiA5ZW07XG4gIGZsZXg6IDA7XG4gIG1hcmdpbjogMDtcbn1cblxubWF0LWZvcm0tZmllbGQsXG5hLWRhdGUtZmllbGQsXG5hbi1hY3Rpb24tZmllbGQsXG5lZGl0b3Ige1xuICBmbGV4OiAxO1xuICBtaW4td2lkdGg6IDUwJTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIG1hdC1mb3JtLWZpZWxkLFxuYS1kYXRlLWZpZWxkLFxuYW4tYWN0aW9uLWZpZWxkLFxuZWRpdG9yIHtcbiAgICBtaW4td2lkdGg6IDE2ZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICBtYXQtZm9ybS1maWVsZCxcbmEtZGF0ZS1maWVsZCxcbmFuLWFjdGlvbi1maWVsZCxcbmVkaXRvciB7XG4gICAgbWluLXdpZHRoOiAxNmVtO1xuICB9XG59XG5cbmEtZGF0ZS1maWVsZC5mdWxsLXdpZHRoIHtcbiAgZmxleDogMCAwIDEwMCU7XG59XG5cbmEtZGF0ZS1maWVsZCArIC5lcnJvci5pbmZvIHtcbiAgbWFyZ2luLXRvcDogLTFlbTtcbn1cblxubWF0LWNoZWNrYm94IHtcbiAgbWFyZ2luLWJvdHRvbTogMWVtO1xufVxuXG4uZ3JvdXAge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG59XG4uZ3JvdXAgPiAqIHtcbiAgbWluLXdpZHRoOiAxN2VtO1xuICBmbGV4OiAxO1xuICBtYXJnaW46IDAuNWVtO1xufVxuLmdyb3VwID4gKjpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLmdyb3VwID4gKjpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLXJpZ2h0OiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmdyb3VwID4gKiB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmdyb3VwID4gKiB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG4uZ3JvdXAgLmNvYWNobWFyayB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAtMjBweDtcbiAgbGVmdDogLTZweDtcbn1cbi5ncm91cCAuY29hY2htYXJrLndhcm5pbmcge1xuICBjb2xvcjogI2U1MzkzNTtcbn1cblxuLnJlY3VycmVuY2Utc2l3Y2gge1xuICBtYXJnaW4tYm90dG9tOiAwLjVlbTtcbn1cbi5yZWN1cnJlbmNlLXNpd2NoIDo6bmctZGVlcCAubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50IHtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmICFpbXBvcnRhbnQ7XG4gIGNvbG9yOiAjMzMzMzMzO1xufVxuLnJlY3VycmVuY2Utc2l3Y2ggOjpuZy1kZWVwIC5tYXQtY2hlY2tib3gtbGF5b3V0IHtcbiAgZGlzcGxheTogZmxleDtcbn1cbi5yZWN1cnJlbmNlLXNpd2NoIC5rZXkge1xuICBkaXNwbGF5OiBmbGV4O1xuICBoZWlnaHQ6IDIzcHg7XG4gIHBhZGRpbmctYm90dG9tOiAzcHg7XG59XG4ucmVjdXJyZW5jZS1zaXdjaCAua2V5IC50ZXh0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcbn1cblxuLnRpbWUtaW5wdXRzLCAudGltZS1pbnB1dHMtY2FsZW5kYXIge1xuICBmbGV4OiAxO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLnRpbWUtaW5wdXRzLCAudGltZS1pbnB1dHMtY2FsZW5kYXIge1xuICAgIG1pbi13aWR0aDogMTc2cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAudGltZS1pbnB1dHMsIC50aW1lLWlucHV0cy1jYWxlbmRhciB7XG4gICAgbWluLXdpZHRoOiAxNzZweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLnRpbWUtaW5wdXRzLWNhbGVuZGFyIHtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC50aW1lLWlucHV0cy1jYWxlbmRhciB7XG4gICAgbWluLXdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206IDFyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLnRpbWUtaW5wdXRzLWNhbGVuZGFyIHtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSBhbmQgKG1heC13aWR0aDogMTA0OHB4KSB7XG4gIC50aW1lLWlucHV0cy1jYWxlbmRhciB7XG4gICAgbWluLXdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206IDFyZW07XG4gIH1cbn1cblxuLmRhdGUtZmllbGQgbGFiZWwge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICB3aWR0aDogMTAwJTtcbn1cblxuLmNvbXBhbnktbmFtZSB7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG59XG4uY29tcGFueS1uYW1lIC5tYXQtZm9ybS1maWVsZC1jb250YWluZXIge1xuICBkaXNwbGF5OiBmbG93O1xuICBtYXgtd2lkdGg6IDkwJTtcbn1cbi5jb21wYW55LW5hbWUgLm1hdC1mb3JtLWZpZWxkLWNvbnRhaW5lciAubWF0LWZvcm0tZmllbGQtd3JhcHBlciB7XG4gIHBhZGRpbmctYm90dG9tOiAwZW07XG59XG4uY29tcGFueS1uYW1lIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtcHJpbWFyeSB7XG4gIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzMzMzM7XG4gIHBhZGRpbmctdG9wOiAwLjI1cmVtO1xuICBwYWRkaW5nLWJvdHRvbTogMC4yNXJlbTtcbiAgcGFkZGluZy1sZWZ0OiAwLjVyZW07XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtc2l6ZTogMC43NXJlbTtcbn1cbi5jb21wYW55LW5hbWUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1wcmltYXJ5IC5tY2stY2xvc2UtaWNvbiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBlbmQ7XG4gIGNvbG9yOiAjZmZmO1xuICBvcGFjaXR5OiAxO1xufVxuXG4ubWF0LWZvcm0tZmllbGQtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gIHBhZGRpbmc6IDEuNWVtIDAgMWVtIDA7XG59XG5cbi5jaGlwLWlucHV0LXdyYXBwZXIge1xuICBkaXNwbGF5OiBmbGV4O1xufVxuXG4uaW5wdXQtd2l0aC1idXR0b24ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG59XG4uaW5wdXQtd2l0aC1idXR0b24gLmlucHV0LWJ1dHRvbiB7XG4gIG1heC1oZWlnaHQ6IDU0cHg7XG59XG5cbi50b2dnbGUtcm93IHtcbiAgZ2FwOiAyMHB4O1xufSIsIkBpbXBvcnQgXCJ2YXJzXCI7XG5cbkBtaXhpbiBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRzaXplLCAkcXVhbGlmaWVyKSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAaWYgKCRxdWFsaWZpZXIgPT0gbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSBpZiAoJHF1YWxpZmllciA9PSBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWF4LXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5AbWl4aW4gYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRtaW4sICRtYXgpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkbWluKSBhbmQgKG1heC13aWR0aDogJG1heCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIHRoaXMgaXMgYSBjb3B5IG9mIHJlc3BvbmQtdG8uIHdlIGRvbid0IHdhbnQgdG8gcHJlc2VydmUgdGhhdCBtZXRob2Qgc2luY2UgdGhlIGJyZWFrcG9pbnRzIG1heSBkaXZlcmdlIGZyb20gdGhlIG9sZCBVSS5cbkBtaXhpbiBpcy1zY3JlZW4tc2l6ZSgkbWVkaWE6IGFsbCwgJG9yaWVudGF0aW9uOiBub25lKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cblxuQG1peGluIHBhZ2UtcGFkZGluZyB7XG4gICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbDtcbn1cblxuLy8gRm9udCBNaXhpbnNcbiRmb250LW1ja2luc2V5LXNhbnM6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuJGZvbnQtdGhlaW5oYXJkdDogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4kZm9udC1ib3dlcjogXCJCb3dlclwiO1xuXG5AbWl4aW4gYm93ZXItYm9sZCB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWJvd2VyO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBtY2tpbnNleS1zYW5zIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gZGlzcGxheS0xIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiA0cmVtOyAvLyA2NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4NzsgLy8gNzZweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMiB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDYwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS00IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogM3JlbTsgLy8gNDhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE2NjsgLy8gNTZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS01IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjgzMzsgLy8gMzRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjQyOyAvLyA0MHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS03IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyOHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTEge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA0OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi43NXJlbTsgLy8gNDRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDUycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTIge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTExOyAvLyA0NHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNDhweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMyB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIyMjsgLy8gNDRweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjg4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1NTsgLy8gMjhweFxuICAgIH1cbn1cblxuQG1peGluIGJvZHktZGVmYXVsdCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNnB4XG4gICAgfVxufVxuXG4vLy8gRG9lc250IGV4aXN0IGluIE1EUy5cbkBtaXhpbiBib2R5LXRpbnkge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtOyAvLyAxMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjRweFxuICAgIH1cbn1cblxuQG1peGluIGZvcm0tbGFiZWwge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LXRoZWluaGFyZHQ7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGNvbG9yOiAkcGxhY2Vob2xkZXItY29sb3I7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbn1cblxuQG1peGluIGNoaXAtbGFiZWwge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBjaGVja2JveC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGNvbG9yOiBibGFjaztcbn1cblxuLy8gYm9yZGVyc1xuXG5AbWl4aW4gbWNrLWNoZWNrYm94LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay10aGluLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXItbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBib3JkZXItY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudC1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuXG4vLyBmdW5jdGlvbnNcblxuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG5AbWl4aW4gbWF4LWxpbmVzKCRjb3VudCkge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiAkY291bnQ7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbn1cblxuLy8gaW1hZ2VzXG5AbWl4aW4gbWNrLWljb24oJHdpZHRoLCAkYXNzZXQsICRoZWlnaHQ6ICR3aWR0aCwgICRhc3NldFBhdGg6IFwibGlicy91aS9zcmMvbGliL2ljb25zXCIsKSB7XG4gICAgd2lkdGg6ICR3aWR0aDtcbiAgICBoZWlnaHQ6ICRoZWlnaHQ7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiI3skYXNzZXRQYXRofS8jeyRhc3NldH1cIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuXG5cbkBtaXhpbiBtY2stc21hbGwtaWNvbigkbW9iaWxlLWFzc2V0LCAkZGVza3RvcC1hc3NldDogJG1vYmlsZS1hc3NldCkge1xuICAgIEBpbmNsdWRlIG1jay1pY29uKDE2cHgsICRhc3NldDogJG1vYmlsZS1hc3NldCk7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICRhc3NldDogJGRlc2t0b3AtYXNzZXQpO1xuICAgIH1cbn1cblxuLy8gc2tlbGV0b25cbkBtaXhpbiBza2VsZXRvbi1iZyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWltYWdlLXNpemUge1xuICAgIHdpZHRoOiA4MXB4O1xuICAgIGhlaWdodDogODJweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDIxOXB4O1xuICAgICAgICBoZWlnaHQ6IDExOXB4O1xuICAgIH1cbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLXN0YXR1cy1zaXplIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMTE3cHg7XG4gICAgICAgIGhlaWdodDogNzhweDtcbiAgICB9XG59XG4iLCJcbkBpbXBvcnQgJ2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcyc7XG5AaW1wb3J0ICdsaWJzL2xlZ2FjeS11aS9zcmMvbGliL3N0eWxlcy9taXhpbnMnO1xuQGltcG9ydCBcImxpYnMvdWkvc3JjL2xpYi9taXhpbnNcIjtcblxubGFiZWwge1xuICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tdG9wOiAxLjI1ZW07XG4gICAgbWFyZ2luLXJpZ2h0OiAxZW07XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgZm9udC1zaXplOiAuOGVtO1xuICAgIC8vIEBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAuNWVtO1xuICAgIC8vIH1cblxuICAgIHNwYW4ge1xuICAgICAgICBjb2xvcjogJHBlbmRpbmc7XG4gICAgfVxuXG4gICAgJi5lcnJvciB7XG4gICAgICAgIGNvbG9yOiAkZXJyb3I7XG4gICAgfVxufVxuXG4uZmllbGQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG5cbiAgICAvLyBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgLy8gfVxufVxuXG4ud2FybmluZ3MtY29udGFpbmVye1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDEwcHg7XG59XG5cbi5pbmZvIHtcbiAgICBmb250LXNpemU6IDAuN2VtO1xuICAgIGNvbG9yOiAjZTUzOTM1O1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgbWFyZ2luLWxlZnQ6IDFlbTtcbn1cblxuLmxhYmVsLWdyb3VwIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICBsYWJlbCB7XG4gICAgICAgIG1pbi13aWR0aDogMXB4O1xuICAgICAgICBmbGV4OiAxO1xuICAgIH1cblxuICAgIG1hdC1jaGVja2JveCB7XG4gICAgICAgIGZvbnQtc2l6ZTogLjhlbTtcbiAgICAgICAgbWluLXdpZHRoOiA5ZW07XG4gICAgICAgIGZsZXg6IDA7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICB9XG59XG5cbm1hdC1mb3JtLWZpZWxkLFxuYS1kYXRlLWZpZWxkLFxuYW4tYWN0aW9uLWZpZWxkLFxuZWRpdG9yIHtcbiAgICBmbGV4OiAxO1xuICAgIG1pbi13aWR0aDogNTAlO1xuXG4gICAgQGluY2x1ZGUgcmVzcG9uZC10byhtb2JpbGUpIHtcbiAgICAgICAgbWluLXdpZHRoOiAxNmVtO1xuICAgIH1cbn1cblxuXG5hLWRhdGUtZmllbGQuZnVsbC13aWR0aCB7XG4gICAgZmxleDogMCAwIDEwMCU7XG59XG5cbmEtZGF0ZS1maWVsZCArIC5lcnJvci5pbmZvIHtcbiAgICBtYXJnaW4tdG9wOiAtMWVtO1xufVxuXG5cbm1hdC1jaGVja2JveCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMWVtO1xufVxuXG5cbi5ncm91cCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgPiAqIHtcbiAgICAgICAgbWluLXdpZHRoOiAxN2VtO1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBtYXJnaW46IC41ZW07XG4gICAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICAgIH1cbiAgICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIEBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLmNvYWNobWFyayB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgdG9wOiAtMjBweDtcbiAgICAgICAgbGVmdDogLTZweDtcblxuICAgICAgICAmLndhcm5pbmcge1xuICAgICAgICAgICAgY29sb3I6I2U1MzkzNVxuICAgICAgICB9XG4gICAgfVxufVxuXG4ucmVjdXJyZW5jZS1zaXdjaHtcbiAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTtcbiAgICA6Om5nLWRlZXAge1xuICAgICAgICAubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50e1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1wcmltYXJ5ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgICAgfVxuICAgICAgICAubWF0LWNoZWNrYm94LWxheW91dCB7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuXG4gICAgICAgIH1cbiAgICB9XG4gICAgLmtleSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGhlaWdodDogMjNweDtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDNweDtcbiAgICAgICAgLnRleHQge1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuLnRpbWUtaW5wdXRzIHtcbiAgICBmbGV4OiAxO1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgbWluLXdpZHRoOiAxNzZweDtcbiAgICB9XG5cbiAgICAmLWNhbGVuZGFyIHtcbiAgICAgICAgQGV4dGVuZCAudGltZS1pbnB1dHM7XG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgbWluLXdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogJHNwYWNpbmctc21hbGw7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUodGFibGV0KSB7XG4gICAgICAgICAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy1zbWFsbDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmRhdGUtZmllbGQgbGFiZWx7XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgICB3aWR0aDogMTAwJTtcbn1cblxuLmNvbXBhbnktbmFtZXtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG5cbiAgICAubWF0LWZvcm0tZmllbGQtY29udGFpbmVye1xuICAgICAgICBkaXNwbGF5OiBmbG93O1xuICAgICAgICBtYXgtd2lkdGg6IDkwJTtcblxuICAgICAgICAubWF0LWZvcm0tZmllbGQtd3JhcHBlciB7XG4gICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMGVtO1xuICAgICAgICB9ICAgICAgICBcbiAgICB9XG4gICAgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1wcmltYXJ5e1xuICAgICAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzMzMzO1xuICAgICAgICBwYWRkaW5nLXRvcDogMC4yNXJlbTtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDAuMjVyZW07XG4gICAgICAgIHBhZGRpbmctbGVmdDogMC41cmVtO1xuICAgICAgICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgXG4gICAgICAgIC5tY2stY2xvc2UtaWNvbntcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogZW5kO1xuICAgICAgICAgICAgY29sb3I6I2ZmZjtcbiAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5tYXQtZm9ybS1maWVsZC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWluZml4e1xuICAgIHBhZGRpbmc6IDEuNWVtIDAgMWVtIDA7XG59XG5cbi5jaGlwLWlucHV0LXdyYXBwZXJ7XG4gICAgZGlzcGxheTogZmxleDtcbn1cblxuLmlucHV0LXdpdGgtYnV0dG9ue1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgICAuaW5wdXQtYnV0dG9ue1xuICAgICAgICBtYXgtaGVpZ2h0OiA1NHB4O1xuICAgIH1cbn1cblxuLnRvZ2dsZS1yb3d7XG4gICAgZ2FwOiAyMHB4O1xufSJdfQ== */"], changeDetection: 0 }); /*@__PURE__*/ @@ -21214,30 +21439,30 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super29 = _createSuper(BookingCateringConfirmModalComponent); function BookingCateringConfirmModalComponent(_service, _org, _spaces, _dialog_ref, _data) { - var _this92; + var _this91; _classCallCheck(this, BookingCateringConfirmModalComponent); - _this92 = _super29.call(this); - _this92._service = _service; - _this92._org = _org; - _this92._spaces = _spaces; - _this92._dialog_ref = _dialog_ref; - _this92._data = _data; + _this91 = _super29.call(this); + _this91._service = _service; + _this91._org = _org; + _this91._spaces = _spaces; + _this91._dialog_ref = _dialog_ref; + _this91._data = _data; /** Emitter for user actions on the modal */ - _this92.event = new core_1.EventEmitter(); + _this91.event = new core_1.EventEmitter(); /** List of selected items for the order */ - _this92.item_list = []; + _this91.item_list = []; - if (!_this92._data.form) { - _this92._service.notifyError('No form data for order'); + if (!_this91._data.form) { + _this91._service.notifyError('No form data for order'); - _this92._dialog_ref.close(); + _this91._dialog_ref.close(); } - return _this92; + return _this91; } /** Space selected for delivery */ @@ -21245,14 +21470,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons _createClass(BookingCateringConfirmModalComponent, [{ key: "ngOnInit", value: function ngOnInit() { - var _this93 = this; + var _this92 = this; /* istanbul ignore else */ if (this._data.form.controls.items) { this.subscription('item_list', this._data.form.controls.items.valueChanges.subscribe(function (items) { /* istanbul ignore else */ if (!items || items.length <= 0) { - _this93._dialog_ref.close(); + _this92._dialog_ref.close(); } })); } @@ -21305,7 +21530,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "symbol", get: function get() { - var _this94 = this; + var _this93 = this; /* istanbul ignore else */ if (!this.space || !this.space.level) { @@ -21313,7 +21538,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } var building = this._org.buildings.find(function (bld) { - return bld.id === _this94.space.level.building_id; + return bld.id === _this93.space.level.building_id; }) || { currency: 'USD' }; @@ -21737,10 +21962,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "submit", value: function submit() { - var _this95 = this; + var _this94 = this; this.space_list.forEach(function (space) { - return _this95.form[space.email].markAllAsTouched(); + return _this94.form[space.email].markAllAsTouched(); }); /* istanbul ignore else */ @@ -21752,9 +21977,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var new_notes = this.space_list.map(function (space) { return { - author: _this95._data.booking.booked_by ? _this95._data.booking.booked_by['name'] : _this95._users.current.name, + author: _this94._data.booking.booked_by ? _this94._data.booking.booked_by['name'] : _this94._users.current.name, type: 'catering', - message: _this95.form[space.email].controls.notes.value, + message: _this94.form[space.email].controls.notes.value, space: space.email, date: date_tz_1.DateNow(new Date()).ms }; @@ -21769,7 +21994,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var orders = this._data.catering.value.map(function (order) { return new data_common_1.CateringOrder(Object.assign(Object.assign({}, order), { - charge_code: _this95.form[order.location_id] ? _this95.form[order.location_id].controls.code.value : '' + charge_code: _this94.form[order.location_id] ? _this94.form[order.location_id].controls.code.value : '' })); }); @@ -21788,7 +22013,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "generateFormFields", value: function generateFormFields() { - var _this96 = this; + var _this95 = this; var _a, _b; @@ -21799,14 +22024,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _loop5 = function _loop5() { var space = _step28.value; - var building = _this96._org.buildings.find(function (bld) { + var building = _this95._org.buildings.find(function (bld) { return bld.id === space.level.building_id; }); - _this96.needs_charge_code[space.email] = ((_a = space === null || space === void 0 ? void 0 : space.filters) === null || _a === void 0 ? void 0 : _a.charge_code) || ((_b = space === null || space === void 0 ? void 0 : space.settings) === null || _b === void 0 ? void 0 : _b.charge_code) || false; - _this96.form[space.email] = new forms_1.FormGroup({ - notes: new forms_1.FormControl(_this96.notes[space.email] || ''), - code: new forms_1.FormControl(_this96.codes[space.email] || '', _this96.needs_charge_code[space.email] ? [forms_1.Validators.pattern(/^[a-zA-Z0-9]{4,}$/), forms_1.Validators.minLength(4), forms_1.Validators.required] : [forms_1.Validators.pattern(/^[a-zA-Z0-9]{4,}$/), forms_1.Validators.minLength(4)]) + _this95.needs_charge_code[space.email] = ((_a = space === null || space === void 0 ? void 0 : space.filters) === null || _a === void 0 ? void 0 : _a.charge_code) || ((_b = space === null || space === void 0 ? void 0 : space.settings) === null || _b === void 0 ? void 0 : _b.charge_code) || false; + _this95.form[space.email] = new forms_1.FormGroup({ + notes: new forms_1.FormControl(_this95.notes[space.email] || ''), + code: new forms_1.FormControl(_this95.codes[space.email] || '', _this95.needs_charge_code[space.email] ? [forms_1.Validators.pattern(/^[a-zA-Z0-9]{4,}$/), forms_1.Validators.minLength(4), forms_1.Validators.required] : [forms_1.Validators.pattern(/^[a-zA-Z0-9]{4,}$/), forms_1.Validators.minLength(4)]) }); }; @@ -21835,10 +22060,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "space_list", get: function get() { - var _this97 = this; + var _this96 = this; return (this._data.spaces || []).filter(function (space) { - return _this97._data.catering.value.find(function (order) { + return _this96._data.catering.value.find(function (order) { return order.location_id === space.email; }); }); @@ -21860,10 +22085,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "is_valid", get: function get() { - var _this98 = this; + var _this97 = this; return this.space_list.reduce(function (valid, space) { - return valid && _this98.form[space.email].valid; + return valid && _this97.form[space.email].valid; }, true); } }]); @@ -22145,17 +22370,17 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super30 = _createSuper(ConfirmModalComponent); function ConfirmModalComponent(_dialog, _data) { - var _this99; + var _this98; _classCallCheck(this, ConfirmModalComponent); - _this99 = _super30.call(this); - _this99._dialog = _dialog; - _this99._data = _data; + _this98 = _super30.call(this); + _this98._dialog = _dialog; + _this98._data = _data; /** Emitter for user action on the modal */ - _this99.event = new core_1.EventEmitter(); - return _this99; + _this98.event = new core_1.EventEmitter(); + return _this98; } /** Title of the confirm modal */ @@ -22244,7 +22469,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } }, directives: [i1.MatDialogTitle, i1.MatDialogContent, i2.NgIf, i3.IconComponent, i1.MatDialogActions, i4.MatButton, i1.MatDialogClose, i5.MatSpinner], - styles: [".body[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n flex-direction: column;\n padding: 1em;\n}\napp-icon[_ngcontent-%COMP%] {\n font-size: 3em;\n}\n.content[_ngcontent-%COMP%] {\n min-width: 16rem;\n max-width: 24rem;\n text-align: center;\n font-size: 0.8em;\n}\nfooter[_ngcontent-%COMP%] {\n width: 100%;\n text-align: center;\n}\nmat-dialog-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n min-width: 8em;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktb3ZlcmxheXMvc3JjL2xpYi9jb25maXJtLW1vZGFsL2NvbmZpcm0tbW9kYWwuY29tcG9uZW50LnNjc3MiLCJsaWJzL2xlZ2FjeS1vdmVybGF5cy9zcmMvbGliL2NvbmZpcm0tbW9kYWwvY29uZmlybS1tb2RhbC5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDdkRBO0VBQ0ksYUFBQTtFQUNBLG1CQUFBO0VBQ0Esc0JBQUE7RUFDQSxZQUFBO0FDVUo7QURQQTtFQUNJLGNBQUE7QUNVSjtBRFBBO0VBQ0ksZ0JBQUE7RUFDQSxnQkFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7QUNVSjtBRFBBO0VBQ0ksV0FBQTtFQUNBLGtCQUFBO0FDVUo7QUROSTtFQUNJLGNBQUE7QUNTUiIsImZpbGUiOiJsaWJzL2xlZ2FjeS1vdmVybGF5cy9zcmMvbGliL2NvbmZpcm0tbW9kYWwvY29uZmlybS1tb2RhbC5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGNvbG9yLWJyYW5kLWVsZWN0cmljLWJsdWU6ICMyMjUxZmY7XG4kY29sb3ItYnJhbmQtZGVlcC1ibHVlOiAjMDUxYzJjO1xuJGNvbG9yLWJyYW5kLWN5YW46ICMwMGE5ZjQ7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kZm9udC1kYXJrOiAjMDAwO1xuJGZvbnQtbGlnaHQ6ICNmZmY7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuJGdyZWVuMTogIzIxOTY1MztcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2xvci1wcmltYXJ5OiAjMTkzN2VhO1xuJGNvbG9yLXByaW1hcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcbiRjb2xvci1wcmltYXJ5LWRhcms6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuXG4kY29sb3Itc2Vjb25kYXJ5OiAjNDI4NUY0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodDogbGlnaHRlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG4kY29sb3Itc2Vjb25kYXJ5LWRhcms6IGRhcmtlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG5cbiRiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuJGZvb3Rlci1iYWNrOiAjMjYzMjM4O1xuJGhlYWRlci1iYWNrOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNTFDMkMsICMwNTFDMkMgNDAlLCAjMEIyNDUzIDYwJSwgIzFGNDBFNiAxMDAlKTtcblxuJGNvbG9yLXRlcm5hcnk6ICMwNTFjMmM7XG5cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuXG4kZm9udC1zdGFjazogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiRoZWFkaW5nLWZvbnQ6IFwiTGFyaXNoTWNLaW5zZXlcIiwgJ0dlb3JnaWEnLCBzZXJpZjtcbiRmb250OiAkZm9udC1zdGFjaztcblxuJGZvbnQtZmFtaWx5LXByaW1hcnk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LXNlY29uZGFyeTogXCJCb3dlclwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiIHNlcmlmO1xuXG4kYmFzZS1zaXplOiAxNnB4O1xuJHRhYmxldC1zaXplOiAxNnB4O1xuJG1vYmlsZS1zaXplOiAxNnB4O1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGJyZWFrLW1vYmlsZTogNDUwcHg7XG4kYnJlYWstdGFibGV0OiA4MDBweDtcbiRicmVhay1sYXB0b3A6IDEwMjRweDtcblxuJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGU6IDgwMHB4O1xuJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQ6IDEwNDhweDtcbiRicmVhay1sYW5kc2NhcGUtbGFwdG9wOiAxMjgwcHg7XG4iLCJcbkBpbXBvcnQgJ2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcyc7XG5cbi5ib2R5IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBwYWRkaW5nOiAxZW07XG59XG5cbmFwcC1pY29uIHtcbiAgICBmb250LXNpemU6IDNlbTtcbn1cblxuLmNvbnRlbnQge1xuICAgIG1pbi13aWR0aDogMTZyZW07XG4gICAgbWF4LXdpZHRoOiAyNHJlbTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1zaXplOiAuOGVtO1xufVxuXG5mb290ZXIge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxubWF0LWRpYWxvZy1hY3Rpb25zIHtcbiAgICBidXR0b24ge1xuICAgICAgICBtaW4td2lkdGg6IDhlbTtcbiAgICB9XG59XG4iLCIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4uYm9keSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHBhZGRpbmc6IDFlbTtcbn1cblxuYXBwLWljb24ge1xuICBmb250LXNpemU6IDNlbTtcbn1cblxuLmNvbnRlbnQge1xuICBtaW4td2lkdGg6IDE2cmVtO1xuICBtYXgtd2lkdGg6IDI0cmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG59XG5cbmZvb3RlciB7XG4gIHdpZHRoOiAxMDAlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbm1hdC1kaWFsb2ctYWN0aW9ucyBidXR0b24ge1xuICBtaW4td2lkdGg6IDhlbTtcbn0iXX0= */"] + styles: [".body[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n flex-direction: column;\n padding: 1em;\n}\napp-icon[_ngcontent-%COMP%] {\n font-size: 3em;\n}\n.content[_ngcontent-%COMP%] {\n min-width: 16rem;\n max-width: 24rem;\n text-align: center;\n font-size: 0.8em;\n}\nfooter[_ngcontent-%COMP%] {\n width: 100%;\n text-align: center;\n}\nspan.warning[_ngcontent-%COMP%] {\n color: #d32f2f !important;\n}\nmat-dialog-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n min-width: 8em;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktb3ZlcmxheXMvc3JjL2xpYi9jb25maXJtLW1vZGFsL2NvbmZpcm0tbW9kYWwuY29tcG9uZW50LnNjc3MiLCJsaWJzL2xlZ2FjeS1vdmVybGF5cy9zcmMvbGliL2NvbmZpcm0tbW9kYWwvY29uZmlybS1tb2RhbC5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDdkRBO0VBQ0ksYUFBQTtFQUNBLG1CQUFBO0VBQ0Esc0JBQUE7RUFDQSxZQUFBO0FDVUo7QURQQTtFQUNJLGNBQUE7QUNVSjtBRFBBO0VBQ0ksZ0JBQUE7RUFDQSxnQkFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7QUNVSjtBRFBBO0VBQ0ksV0FBQTtFQUNBLGtCQUFBO0FDVUo7QURQQTtFQUNJLHlCQUFBO0FDVUo7QUROSTtFQUNJLGNBQUE7QUNTUiIsImZpbGUiOiJsaWJzL2xlZ2FjeS1vdmVybGF5cy9zcmMvbGliL2NvbmZpcm0tbW9kYWwvY29uZmlybS1tb2RhbC5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGNvbG9yLWJyYW5kLWVsZWN0cmljLWJsdWU6ICMyMjUxZmY7XG4kY29sb3ItYnJhbmQtZGVlcC1ibHVlOiAjMDUxYzJjO1xuJGNvbG9yLWJyYW5kLWN5YW46ICMwMGE5ZjQ7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kZm9udC1kYXJrOiAjMDAwO1xuJGZvbnQtbGlnaHQ6ICNmZmY7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuJGdyZWVuMTogIzIxOTY1MztcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2xvci1wcmltYXJ5OiAjMTkzN2VhO1xuJGNvbG9yLXByaW1hcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcbiRjb2xvci1wcmltYXJ5LWRhcms6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuXG4kY29sb3Itc2Vjb25kYXJ5OiAjNDI4NUY0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodDogbGlnaHRlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG4kY29sb3Itc2Vjb25kYXJ5LWRhcms6IGRhcmtlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG5cbiRiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuJGZvb3Rlci1iYWNrOiAjMjYzMjM4O1xuJGhlYWRlci1iYWNrOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNTFDMkMsICMwNTFDMkMgNDAlLCAjMEIyNDUzIDYwJSwgIzFGNDBFNiAxMDAlKTtcblxuJGNvbG9yLXRlcm5hcnk6ICMwNTFjMmM7XG5cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuXG4kZm9udC1zdGFjazogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiRoZWFkaW5nLWZvbnQ6IFwiTGFyaXNoTWNLaW5zZXlcIiwgJ0dlb3JnaWEnLCBzZXJpZjtcbiRmb250OiAkZm9udC1zdGFjaztcblxuJGZvbnQtZmFtaWx5LXByaW1hcnk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LXNlY29uZGFyeTogXCJCb3dlclwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiIHNlcmlmO1xuXG4kYmFzZS1zaXplOiAxNnB4O1xuJHRhYmxldC1zaXplOiAxNnB4O1xuJG1vYmlsZS1zaXplOiAxNnB4O1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGJyZWFrLW1vYmlsZTogNDUwcHg7XG4kYnJlYWstdGFibGV0OiA4MDBweDtcbiRicmVhay1sYXB0b3A6IDEwMjRweDtcblxuJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGU6IDgwMHB4O1xuJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQ6IDEwNDhweDtcbiRicmVhay1sYW5kc2NhcGUtbGFwdG9wOiAxMjgwcHg7XG4iLCJcbkBpbXBvcnQgJ2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcyc7XG5cbi5ib2R5IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBwYWRkaW5nOiAxZW07XG59XG5cbmFwcC1pY29uIHtcbiAgICBmb250LXNpemU6IDNlbTtcbn1cblxuLmNvbnRlbnQge1xuICAgIG1pbi13aWR0aDogMTZyZW07XG4gICAgbWF4LXdpZHRoOiAyNHJlbTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1zaXplOiAuOGVtO1xufVxuXG5mb290ZXIge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuc3Bhbi53YXJuaW5ne1xuICAgIGNvbG9yOiByZ2IoMjExLCA0NywgNDcpIWltcG9ydGFudDtcbn1cblxubWF0LWRpYWxvZy1hY3Rpb25zIHtcbiAgICBidXR0b24ge1xuICAgICAgICBtaW4td2lkdGg6IDhlbTtcbiAgICB9XG59XG4iLCIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4uYm9keSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHBhZGRpbmc6IDFlbTtcbn1cblxuYXBwLWljb24ge1xuICBmb250LXNpemU6IDNlbTtcbn1cblxuLmNvbnRlbnQge1xuICBtaW4td2lkdGg6IDE2cmVtO1xuICBtYXgtd2lkdGg6IDI0cmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG59XG5cbmZvb3RlciB7XG4gIHdpZHRoOiAxMDAlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbnNwYW4ud2FybmluZyB7XG4gIGNvbG9yOiAjZDMyZjJmICFpbXBvcnRhbnQ7XG59XG5cbm1hdC1kaWFsb2ctYWN0aW9ucyBidXR0b24ge1xuICBtaW4td2lkdGg6IDhlbTtcbn0iXX0= */"] }); /*@__PURE__*/ @@ -22537,15 +22762,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super31 = _createSuper(NewUserModalComponent); function NewUserModalComponent() { - var _this100; + var _this99; _classCallCheck(this, NewUserModalComponent); - _this100 = _super31.apply(this, arguments); + _this99 = _super31.apply(this, arguments); /** Emitter for user action on the modal */ - _this100.event = new core_1.EventEmitter(); - return _this100; + _this99.event = new core_1.EventEmitter(); + return _this99; } _createClass(NewUserModalComponent, [{ @@ -22697,15 +22922,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super32 = _createSuper(NoCateringModalComponent); function NoCateringModalComponent(_dialog_ref) { - var _this101; + var _this100; _classCallCheck(this, NoCateringModalComponent); - _this101 = _super32.call(this); - _this101._dialog_ref = _dialog_ref; // /** Emitter for user action on the modal */ + _this100 = _super32.call(this); + _this100._dialog_ref = _dialog_ref; // /** Emitter for user action on the modal */ - _this101.event = new core_1.EventEmitter(); - return _this101; + _this100.event = new core_1.EventEmitter(); + return _this100; } // Submit the Survey in it's current state. @@ -23201,22 +23426,22 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "submit", value: function submit() { - var _this102 = this; + var _this101 = this; // Get the email of the first space var firstSpaceEmail = this.space_list[0].email; // Copy values from the first space's form controls to all other spaces this.space_list.forEach(function (space) { if (space.email !== firstSpaceEmail) { - _this102.form[space.email].controls.notes.setValue(_this102.form[firstSpaceEmail].controls.notes.value); + _this101.form[space.email].controls.notes.setValue(_this101.form[firstSpaceEmail].controls.notes.value); - _this102.form[space.email].controls.code.setValue(_this102.form[firstSpaceEmail].controls.code.value); + _this101.form[space.email].controls.code.setValue(_this101.form[firstSpaceEmail].controls.code.value); - _this102.form[space.email].controls.head_count.setValue(_this102.form[firstSpaceEmail].controls.head_count.value); + _this101.form[space.email].controls.head_count.setValue(_this101.form[firstSpaceEmail].controls.head_count.value); } }); this.space_list.forEach(function (space) { - return _this102.form[space.email].markAllAsTouched(); + return _this101.form[space.email].markAllAsTouched(); }); /* istanbul ignore else */ @@ -23228,9 +23453,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var new_notes = this.space_list.map(function (space) { return { - author: _this102._users.current.name, + author: _this101._users.current.name, type: 'equipment', - message: _this102.form[space.email].controls.notes.value.trim(), + message: _this101.form[space.email].controls.notes.value.trim(), space: space.email, date: date_tz_1.DateNow(new Date()).ms }; @@ -23241,12 +23466,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons })); this._data.codes_field.setValue(this.space_list.reduce(function (map, space) { - map[space.email] = _this102.form[space.email].controls.code.value; + map[space.email] = _this101.form[space.email].controls.code.value; return map; }, {})); this._data.head_counts_field.setValue(this.space_list.reduce(function (map, space) { - map[space.email] = _this102.form[space.email].controls.head_count.value; + map[space.email] = _this101.form[space.email].controls.head_count.value; return map; }, {})); @@ -23287,7 +23512,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "generateFormFields", value: function generateFormFields() { - var _this103 = this; + var _this102 = this; var _a; // Initialize a variable to determine if any space needs a charge code @@ -23301,7 +23526,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _loop6 = function _loop6() { var space = _step29.value; - var building = _this103._org.buildings.find(function (bld) { + var building = _this102._org.buildings.find(function (bld) { return bld.id === (space === null || space === void 0 ? void 0 : space.level.building_id); }); @@ -23312,10 +23537,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (roomBasedEqCode || officeBasedEqCode) { anySpaceNeedsChargeCode = true; - _this103.needs_charge_code = true; + _this102.needs_charge_code = true; return "break"; } else { - _this103.needs_charge_code = false; + _this102.needs_charge_code = false; } }; @@ -23378,11 +23603,11 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "is_valid", get: function get() { - var _this104 = this; + var _this103 = this; // return this.space_list.reduce((valid, space) => valid && this.form[space.email].valid, true); return this.space_list.length > 0 && this.space_list.reduce(function (valid, space) { - return valid && _this104.form[space.email].valid; + return valid && _this103.form[space.email].valid; }, true); } }]); @@ -24039,55 +24264,55 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super33 = _createSuper(SpaceSelectModalComponent); function SpaceSelectModalComponent(_org, _users, _spaces, _settings, _dialog, _data) { - var _this105; + var _this104; _classCallCheck(this, SpaceSelectModalComponent); - _this105 = _super33.call(this); - _this105._org = _org; - _this105._users = _users; - _this105._spaces = _spaces; - _this105._settings = _settings; - _this105._dialog = _dialog; - _this105._data = _data; + _this104 = _super33.call(this); + _this104._org = _org; + _this104._users = _users; + _this104._spaces = _spaces; + _this104._settings = _settings; + _this104._dialog = _dialog; + _this104._data = _data; /** Emitter for user action on the modal */ - _this105.event = new core_1.EventEmitter(); + _this104.event = new core_1.EventEmitter(); /** List of available spaces to select from */ - _this105.spaces = []; + _this104.spaces = []; /** Subject holding the value of the search */ - _this105.change$ = new rxjs_1.Subject(); + _this104.change$ = new rxjs_1.Subject(); /** List of currently selected spaces */ - _this105.selected_spaces = []; + _this104.selected_spaces = []; /** Mapping as to whether a space is by request */ - _this105.request_map = {}; + _this104.request_map = {}; /** List of available buildings */ - _this105.types = []; - _this105.formGroup = new forms_1.FormGroup({ + _this104.types = []; + _this104.formGroup = new forms_1.FormGroup({ location: new forms_1.FormControl([]) }); - _this105.options = new rxjs_1.BehaviorSubject([]); - _this105.selectedOptions = new rxjs_1.BehaviorSubject([]); + _this104.options = new rxjs_1.BehaviorSubject([]); + _this104.selectedOptions = new rxjs_1.BehaviorSubject([]); /** List of zones to filter the spaces on */ - _this105.zone_ids = []; + _this104.zone_ids = []; - _this105.triggerSearch = function () { - if (_this105.savedSelection.length) { - _this105.change$.next(_this105.savedSelection); + _this104.triggerSearch = function () { + if (_this104.savedSelection.length) { + _this104.change$.next(_this104.savedSelection); } else { - _this105.spaces = []; + _this104.spaces = []; } }; - _this105.isConcierge = _settings.concierge; - _this105.frontend = _settings.frontend; - return _this105; + _this104.isConcierge = _settings.concierge; + _this104.frontend = _settings.frontend; + return _this104; } /** List of available buildings */ @@ -24095,7 +24320,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons _createClass(SpaceSelectModalComponent, [{ key: "ngOnInit", value: function ngOnInit() { - var _this106 = this; + var _this105 = this; this._spaces.initialised.pipe(operators_1.first(function (_) { return _; @@ -24104,26 +24329,26 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var request_id = 0; // Listen for input changes - _this106.search_results$ = _this106.change$.pipe(operators_1.debounceTime(400), operators_1.distinctUntilChanged(), operators_1.switchMap(function (bld) { - _this106.loading = true; + _this105.search_results$ = _this105.change$.pipe(operators_1.debounceTime(400), operators_1.distinctUntilChanged(), operators_1.switchMap(function (bld) { + _this105.loading = true; var zone_ids = []; /* istanbul ignore else */ - if (_this106.active_building) { - zone_ids.push(_this106.active_building.id); + if (_this105.active_building) { + zone_ids.push(_this105.active_building.id); } if (bld === null || bld === void 0 ? void 0 : bld.includes('|')) { - bld = _this106.savedSelection; + bld = _this105.savedSelection; } var id = request_id; - return _this106._spaces.available({ - zone_ids: (bld === null || bld === void 0 ? void 0 : bld.length) ? bld : _this106._data.spaces[0].building.id || zone_ids.join(','), - dateTz: _this106._data.dateTz, - duration: _this106._data.duration + return _this105._spaces.available({ + zone_ids: (bld === null || bld === void 0 ? void 0 : bld.length) ? bld : _this105._data.spaces[0].building.id || zone_ids.join(','), + dateTz: _this105._data.dateTz, + duration: _this105._data.duration }).then(function (list) { - return tslib_1.__awaiter(_this106, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee23() { + return tslib_1.__awaiter(_this105, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee23() { return regeneratorRuntime.wrap(function _callee23$(_context23) { while (1) { switch (_context23.prev = _context23.next) { @@ -24148,34 +24373,34 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons error: _ }); }), operators_1.map(function (resp) { - _this106.loading = false; + _this105.loading = false; var filtered_list = resp.list.filter(function (space) { // if concierge skip rules check. - if (_this106._settings.concierge) { - return (_this106.active_type && _this106.active_type.id ? space.zones.includes("".concat(_this106.active_type.id)) : true) && !_this106.selected_spaces.find(function (s) { + if (_this105._settings.concierge) { + return (_this105.active_type && _this105.active_type.id ? space.zones.includes("".concat(_this105.active_type.id)) : true) && !_this105.selected_spaces.find(function (s) { return s.id === space.id; }); } var rules = space.rulesFor({ - dateTz: _this106._data.dateTz, - duration: _this106._data.duration, - host: _this106.host || _this106._data.host + dateTz: _this105._data.dateTz, + duration: _this105._data.duration, + host: _this105.host || _this105._data.host }); - return rules.hide !== true && (_this106.active_type && _this106.active_type.id ? space.zones.includes("".concat(_this106.active_type.id)) : true) && !_this106.selected_spaces.find(function (_space) { + return rules.hide !== true && (_this105.active_type && _this105.active_type.id ? space.zones.includes("".concat(_this105.active_type.id)) : true) && !_this105.selected_spaces.find(function (_space) { return _space.id === space.id; }); }); - return resp.id === request_id ? filtered_list : _this106.spaces; + return resp.id === request_id ? filtered_list : _this105.spaces; })); // Process API results - _this106.subscription('search_results', _this106.search_results$.subscribe(function (list) { - _this106.spaces = list.filter(function (space) { + _this105.subscription('search_results', _this105.search_results$.subscribe(function (list) { + _this105.spaces = list.filter(function (space) { if (!space.available) { return false; } - var _iterator31 = _createForOfIteratorHelper(_this106.zone_ids), + var _iterator31 = _createForOfIteratorHelper(_this105.zone_ids), _step31; try { @@ -24192,33 +24417,33 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons _iterator31.f(); } - return !_this106.zone_ids.length; + return !_this105.zone_ids.length; }); - _this106.spaces.sort(function (a, b) { - return _this106.sort(a, b); + _this105.spaces.sort(function (a, b) { + return _this105.sort(a, b); }); - if (!_this106.selectedOptions.value.length) { - _this106.setDefaultBuilding(); + if (!_this105.selectedOptions.value.length) { + _this105.setDefaultBuilding(); } })); - _this106.active_building = ((_a = _this106._data.spaces) === null || _a === void 0 ? void 0 : _a.length) ? _this106._org.buildings.find(function (i) { - return i.id === _this106._data.spaces[0].level.building_id; - }) : _this106._org.building; - _this106.types = [{ + _this105.active_building = ((_a = _this105._data.spaces) === null || _a === void 0 ? void 0 : _a.length) ? _this105._org.buildings.find(function (i) { + return i.id === _this105._data.spaces[0].level.building_id; + }) : _this105._org.building; + _this105.types = [{ id: '', name: 'Any Space Type' - }].concat(_this106._org.space_types || []); - _this106.active_type = _this106.types[0]; + }].concat(_this105._org.space_types || []); + _this105.active_type = _this105.types[0]; - _this106.change$.next(''); + _this105.change$.next(''); }); this.subscription('buildings', this._org.listen('buildings').subscribe(function (bld_list) { - var city = _this106._org.building.city; - var timezone = _this106._org.building.timezone; + var city = _this105._org.building.city; + var timezone = _this105._org.building.timezone; var grouped_by_city = { key: { name: city, @@ -24233,7 +24458,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }); var buildings = [data_common_1.mapCityToAllSelectOption(grouped_by_city.key)].concat(_toConsumableArray(city_buildings)); - _this106.options.next(buildings); + _this105.options.next(buildings); })); } /** Add space to selected list */ @@ -24258,7 +24483,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "save", value: function save(list) { - var _this107 = this; + var _this106 = this; if (!this._data.needsCatering) { // No catering order to warn about @@ -24286,14 +24511,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }); this.subscription('no-catering-modal', this.noCateringDialogRef.componentInstance.event.subscribe(function (event) { if (event.reason === 'done') { - _this107.event.emit({ + _this106.event.emit({ reason: 'done', metadata: list }); } if (event.reason === 'close') { - _this107.event.emit({ + _this106.event.emit({ reason: 'close' }); } @@ -24319,10 +24544,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "setDefaultBuilding", value: function setDefaultBuilding() { - var _this108 = this; + var _this107 = this; var defaultBld = this.options.value.filter(function (opt) { - return opt.value === _this108._org.building.id; + return opt.value === _this107._org.building.id; }); this.selectedOptions.next(defaultBld); } @@ -24383,7 +24608,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "toggle", value: function toggle(option) { - var _this109 = this; + var _this108 = this; // update the selected value this.selectedOptions.pipe(operators_1.take(1), operators_1.withLatestFrom(this.options), operators_1.map(function (_ref3) { @@ -24393,15 +24618,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons return data_common_1.toggleSelectedByGroup(options, selectedOptions, option); })).subscribe(function (next) { - var formData = _this109.formGroup.value; + var formData = _this108.formGroup.value; - _this109.formGroup.setValue({ + _this108.formGroup.setValue({ location: formData.location }); - _this109.selectedOptions.next(next); + _this108.selectedOptions.next(next); - _this109.savedSelection = next.map(function (bld) { + _this108.savedSelection = next.map(function (bld) { return bld.value; }); }); @@ -25438,18 +25663,18 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super34 = _createSuper(CateringMenuItemComponent); function CateringMenuItemComponent(_service, _dialog, settings) { - var _this110; + var _this109; _classCallCheck(this, CateringMenuItemComponent); - _this110 = _super34.call(this); - _this110._service = _service; - _this110._dialog = _dialog; - _this110.settings = settings; - _this110.initial_state = null; // on the item selection set the revert/close state + _this109 = _super34.call(this); + _this109._service = _service; + _this109._dialog = _dialog; + _this109.settings = settings; + _this109.initial_state = null; // on the item selection set the revert/close state - _this110.initial_state = _this110.item; - return _this110; + _this109.initial_state = _this109.item; + return _this109; } /** List of contents of the package */ @@ -25457,14 +25682,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons _createClass(CateringMenuItemComponent, [{ key: "ngOnChanges", value: function ngOnChanges(changes) { - var _this111 = this; + var _this110 = this; /* istanbul ignore else */ if (changes.field && this.field) { var list = this.field.value; // check the category var item = list.find(function (an_cat) { - return an_cat.id === _this111.item.id; + return an_cat.id === _this110.item.id; }); if (item) { @@ -25479,7 +25704,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons for (_iterator34.s(); !(_step34 = _iterator34.n()).done;) { var cat = _step34.value; item = cat === null || cat === void 0 ? void 0 : cat.items.find(function (an_item) { - return an_item.id === _this111.item.id; + return an_item.id === _this110.item.id; }); if (item) { @@ -25503,12 +25728,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this.subscription('field_change', this.field.valueChanges.subscribe(function (list) { var item = list.find(function (an_item) { - return an_item.id === _this111.item.id; + return an_item.id === _this110.item.id; }); - _this111.item.setAmount(item ? item.amount : 0); + _this110.item.setAmount(item ? item.amount : 0); - _this111.updatePackageSelection(); + _this110.updatePackageSelection(); })); } } @@ -25520,13 +25745,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "updateAmount", value: function updateAmount(value) { - var _this112 = this; + var _this111 = this; /* istanbul ignore else */ if (this.field) { var list = this.field.value; var item = list.find(function (an_item) { - return an_item.id === _this112.item.id; + return an_item.id === _this111.item.id; }); if (item) { @@ -25543,17 +25768,17 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this.selectPackageOptions().then(function (confirmed_item) { list.push(new data_common_1.CateringCategory(confirmed_item)); - _this112.field.setValue(list.filter(function (an_item) { + _this111.field.setValue(list.filter(function (an_item) { return an_item.amount; })); }, function () { - _this112.item.setAmount(999); + _this111.item.setAmount(999); - _this112.timeout('amount', function () { - return _this112.item.setAmount(0); + _this111.timeout('amount', function () { + return _this111.item.setAmount(0); }, 5); - _this112._service.notifyWarn('Package options not selected. Item removed from order'); + _this111._service.notifyWarn('Package options not selected. Item removed from order'); }); } else { list.push(new data_common_1.CateringItem(this.item)); @@ -25568,16 +25793,16 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "updatePackageSelection", value: function updatePackageSelection() { - var _this113 = this; + var _this112 = this; var cart_item = this.field.value.find(function (item) { - return item.id === _this113.item.id; + return item.id === _this112.item.id; }); if (cart_item) { var active_items = getActiveList(cart_item); this.timeout('update_package', function () { - _this113.item.items.forEach(function (item) { + _this112.item.items.forEach(function (item) { item.setAmount(active_items.includes(item.id) ? 1 : 0); if (item.items) { @@ -25594,12 +25819,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "updatePackageOptions", value: function updatePackageOptions() { - var _this114 = this; + var _this113 = this; var updatedList = []; this.selectPackageOptions().then(function (confirmed_item) { // Update the existing category package - _this114.field.value.forEach(function (category) { + _this113.field.value.forEach(function (category) { if (category.id === confirmed_item.id) { updatedList.push(new data_common_1.CateringCategory(confirmed_item)); } else { @@ -25607,17 +25832,17 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } }); - _this114.field.setValue(updatedList.filter(function (an_item) { + _this113.field.setValue(updatedList.filter(function (an_item) { return an_item.amount; })); }, function () { - _this114.item.setAmount(999); + _this113.item.setAmount(999); - _this114.timeout('amount', function () { - return _this114.item.setAmount(0); + _this113.timeout('amount', function () { + return _this113.item.setAmount(0); }, 5); - _this114._service.notifyWarn('Package options not selected. Item removed from order'); + _this113._service.notifyWarn('Package options not selected. Item removed from order'); }); } /** @@ -25627,13 +25852,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "selectPackageOptions", value: function selectPackageOptions() { - var _this115 = this; + var _this114 = this; return new Promise(function (resolve, reject) { - var ref = _this115._dialog.open(package_options_modal_component_1.PackageOptionsModalComponent, { + var ref = _this114._dialog.open(package_options_modal_component_1.PackageOptionsModalComponent, { maxWidth: '95vw', data: { - item: new data_common_1.CateringCategory(_this115.item) + item: new data_common_1.CateringCategory(_this114.item) }, autoFocus: false, backdropClass: 'mck-modal-backdrop' @@ -25645,15 +25870,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (event.reason === 'done') { done = true; resolve(ref.componentInstance.item); - _this115.initial_state = _this115.item; + _this114.initial_state = _this114.item; ref.close(); } }); ref.afterClosed().subscribe(function () { /* istanbul ignore else */ if (!done) { - if (_this115.initial_state) { - resolve(_this115.initial_state); + if (_this114.initial_state) { + resolve(_this114.initial_state); } else { reject(); } @@ -26350,14 +26575,21 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons // Emit the search string if it's not empty if (value) { this.search.emit(value); + } else { + this.clearSearch(); } } // Method to clear the search input and reset related configurations }, { key: "clearSearch", - value: function clearSearch(box) { + value: function clearSearch() { + var box = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; this.searchStr = ''; - box.value = ''; + + if (box) { + box.value = ''; + } + this.config.showSrchWarning = false; this.config.totalFoundItem = 0; this.search.emit(''); @@ -26506,10 +26738,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "update", value: function update(action) { - var _this116 = this; + var _this115 = this; this.hoverClass.split(' ').forEach(function (item) { - return _this116.elementRef.nativeElement.classList[action](item); + return _this115.elementRef.nativeElement.classList[action](item); }); } }]); @@ -26622,18 +26854,18 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super35 = _createSuper(ActionFieldComponent); function ActionFieldComponent() { - var _this117; + var _this116; _classCallCheck(this, ActionFieldComponent); - _this117 = _super35.apply(this, arguments); + _this116 = _super35.apply(this, arguments); /** Emitter for user interaction events */ - _this117.on_action = new core_1.EventEmitter(); + _this116.on_action = new core_1.EventEmitter(); /** Whether to show tooltip */ - _this117.show_tooltip = false; - return _this117; + _this116.show_tooltip = false; + return _this116; } /** * Emit that the user has performed an action on the field @@ -26895,7 +27127,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "onInputChange", value: function onInputChange(new_value) { - var _this118 = this; + var _this117 = this; if (this.handleTimeout) { clearTimeout(this.handleTimeout); @@ -26903,7 +27135,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } this.handleTimeout = setTimeout(function () { - return _this118.changeInput(new_value); + return _this117.changeInput(new_value); }, 500); } }, { @@ -27169,24 +27401,24 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super36 = _createSuper(DateFieldComponent); function DateFieldComponent() { - var _this119; + var _this118; _classCallCheck(this, DateFieldComponent); - _this119 = _super36.apply(this, arguments); + _this118 = _super36.apply(this, arguments); /** Earliest date available the user is allowed to pick */ - _this119._from = date_tz_1.DateNow(new Date()).ms; + _this118._from = date_tz_1.DateNow(new Date()).ms; /** Position of the tooltip */ - _this119.position = 'right'; + _this118.position = 'right'; /** Offset of the tooltip */ - _this119.offset = 'bottom'; + _this118.offset = 'bottom'; /** Optional event emitter for changes */ - _this119.onChange = new core_1.EventEmitter(); - return _this119; + _this118.onChange = new core_1.EventEmitter(); + return _this118; } /** First allowed date on the calendar */ @@ -27540,28 +27772,28 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super37 = _createSuper(DurationFieldComponent); function DurationFieldComponent() { - var _this120; + var _this119; _classCallCheck(this, DurationFieldComponent); - _this120 = _super37.apply(this, arguments); + _this119 = _super37.apply(this, arguments); /** Maximum duration option available */ - _this120.max = 240; + _this119.max = 240; /** Minimum duration option available */ - _this120.min = 15; + _this119.min = 15; /** Step value between options */ - _this120.step = 15; + _this119.step = 15; /** Special case prepopulation i.e. out of step options */ - _this120.specialPreprops = []; + _this119.specialPreprops = []; /** Whether form all_day is enabled. */ - _this120.all_day = false; - _this120.duration = 60; - return _this120; + _this119.all_day = false; + _this119.duration = 60; + return _this119; } _createClass(DurationFieldComponent, [{ @@ -27969,36 +28201,36 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super38 = _createSuper(TimeFieldComponent); function TimeFieldComponent() { - var _this121; + var _this120; _classCallCheck(this, TimeFieldComponent); - _this121 = _super38.apply(this, arguments); + _this120 = _super38.apply(this, arguments); /** Time step between each allowed time option */ - _this121.step = 15; + _this120.step = 15; /** Whether past times are allowed */ - _this121.no_past_times = true; + _this120.no_past_times = true; /** String representing the currently set time */ - _this121.date = date_tz_1.DateNow(new Date()).ms; + _this120.date = date_tz_1.DateNow(new Date()).ms; /** String representing the currently set time */ - _this121.time = date_tz_1.DateNow(new Date()).formatDate('HH:mm'); - return _this121; + _this120.time = date_tz_1.DateNow(new Date()).formatDate('HH:mm'); + return _this120; } // R--- This is the form input that needs to be TZ active. _createClass(TimeFieldComponent, [{ key: "ngOnInit", value: function ngOnInit() { - var _this122 = this; + var _this121 = this; this.show_select = true; this._time_options = this.generateAvailableTimes(this.date, !this.no_past_times, this.step); this.timeout('hide', function () { - return _this122.show_select = false; + return _this121.show_select = false; }); } }, { @@ -28080,18 +28312,18 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "showSelect", value: function showSelect() { - var _this123 = this; + var _this122 = this; this.show_select = true; this.timeout('on_shown', function () { - if (_this123.select_field) { - _this123.select_field.focus(); + if (_this122.select_field) { + _this122.select_field.focus(); - _this123.select_field.open(); + _this122.select_field.open(); - _this123.subscription('listen_close', _this123.select_field.openedChange.subscribe(function (state) { + _this122.subscription('listen_close', _this122.select_field.openedChange.subscribe(function (state) { if (!state) { - _this123.show_select = false; + _this122.show_select = false; } })); } @@ -28535,55 +28767,55 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super39 = _createSuper(UserListFieldComponent); function UserListFieldComponent(_service, _users, cdRef) { - var _this124; + var _this123; _classCallCheck(this, UserListFieldComponent); - _this124 = _super39.call(this); - _this124._service = _service; - _this124._users = _users; - _this124.cdRef = cdRef; + _this123 = _super39.call(this); + _this123._service = _service; + _this123._users = _users; + _this123.cdRef = cdRef; /** Number of characters needed before a search will start */ - _this124.limit = 3; + _this123.limit = 3; /** Emitter for action to make a new user */ - _this124.new_user = new core_1.EventEmitter(); + _this123.new_user = new core_1.EventEmitter(); /** Subject holding the value of the search */ - _this124.search$ = new rxjs_1.Subject(); - return _this124; + _this123.search$ = new rxjs_1.Subject(); + return _this123; } _createClass(UserListFieldComponent, [{ key: "ngOnInit", value: function ngOnInit() { - var _this125 = this; + var _this124 = this; // Listen for input changes this.search_results$ = this.search$.pipe(operators_1.debounceTime(100), operators_1.distinctUntilChanged(), operators_1.switchMap(function (query) { - _this125.loading = true; - return query.length >= _this125.limit ? _this125._users.query({ - q: query.slice(0, Math.max(_this125.limit, 3)), + _this124.loading = true; + return query.length >= _this124.limit ? _this124._users.query({ + q: query.slice(0, Math.max(_this124.limit, 3)), cache: 60 * 1000 }) : Promise.resolve([]); }), operators_1.catchError(function (_) { return rxjs_1.of([]); }), operators_1.map(function (list) { - _this125.loading = false; - return base_2.filterList(_this125.search_str, list, ['name', 'email']); + _this124.loading = false; + return base_2.filterList(_this124.search_str, list, ['name', 'email']); })); // Process API results this.subscription('search_results', this.search_results$.subscribe(function (list) { - _this125.user_list = list; + _this124.user_list = list; - _this125.user_list.forEach(function (i) { + _this124.user_list.forEach(function (i) { i.match_name = base_2.matchToHighlight(i.match_name); i.match_email = base_2.matchToHighlight(i.match_email); return i; }); - _this125.user_list.length ? _this125.inputAutoComplete.openPanel() : _this125.inputAutoComplete.closePanel(); + _this124.user_list.length ? _this124.inputAutoComplete.openPanel() : _this124.inputAutoComplete.closePanel(); })); } /** @@ -28632,7 +28864,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "addUsersFromFile", value: function addUsersFromFile(event) { - var _this126 = this; + var _this125 = this; /* istanbul ignore else */ if (event.target) { @@ -28643,14 +28875,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var reader = new FileReader(); reader.readAsText(file, 'UTF-8'); reader.addEventListener('load', function (evt) { - _this126.processCsvData(evt.srcElement.result); + _this125.processCsvData(evt.srcElement.result); event.target.value = ''; - _this126.cdRef.detectChanges(); + _this125.cdRef.detectChanges(); }); reader.addEventListener('error', function (_) { - return _this126._service.notifyError('Error reading file.'); + return _this125._service.notifyError('Error reading file.'); }); } } @@ -28663,7 +28895,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "processCsvData", value: function processCsvData(data) { - var _this127 = this; + var _this126 = this; var list = base_2.csvToJson(data) || []; var id = this._users.current.staff_code; @@ -28685,7 +28917,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons el.type = 'external'; el.external = !el.email.endsWith("@mckinsey.com") && !el.email.endsWith("@external.mckinsey.com"); - _this127.addUser(new data_common_1.User(el)); + _this126.addUser(new data_common_1.User(el)); }); } /* istanbul ignore next */ @@ -29060,47 +29292,47 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super40 = _createSuper(UserSearchFieldComponent); function UserSearchFieldComponent(_users) { - var _this128; + var _this127; _classCallCheck(this, UserSearchFieldComponent); - _this128 = _super40.call(this); - _this128._users = _users; + _this127 = _super40.call(this); + _this127._users = _users; /** Subject holding the value of the search */ - _this128.search$ = new rxjs_1.Subject(); - return _this128; + _this127.search$ = new rxjs_1.Subject(); + return _this127; } _createClass(UserSearchFieldComponent, [{ key: "ngOnInit", value: function ngOnInit() { - var _this129 = this; + var _this128 = this; // Listen for input changes this.search_results$ = this.search$.pipe(operators_1.debounceTime(400), operators_1.distinctUntilChanged(), operators_1.switchMap(function (query) { - _this129.loading = true; - return _this129.options && _this129.options.length > 0 ? Promise.resolve(_this129.options) : query.length >= 3 ? _this129._users.query({ + _this128.loading = true; + return _this128.options && _this128.options.length > 0 ? Promise.resolve(_this128.options) : query.length >= 3 ? _this128._users.query({ q: query, cache: 60 * 1000 }) : Promise.resolve([]); }), operators_1.catchError(function (err) { return rxjs_1.of([]); }), operators_1.map(function (list) { - _this129.loading = false; - return base_2.filterList(_this129.search_str, list, ['name', 'email']); + _this128.loading = false; + return base_2.filterList(_this128.search_str, list, ['name', 'email']); })); // Process API results this.subscription('search_results', this.search_results$.subscribe(function (list) { - _this129.user_list = list; + _this128.user_list = list; - _this129.user_list.forEach(function (i) { + _this128.user_list.forEach(function (i) { i.match_name = base_2.matchToHighlight(i.match_name); i.match_email = base_2.matchToHighlight(i.match_email); return i; }); - _this129.user_list.length ? _this129.inputAutoComplete.openPanel() : _this129.inputAutoComplete.closePanel(); + _this128.user_list.length ? _this128.inputAutoComplete.openPanel() : _this128.inputAutoComplete.closePanel(); })); } /** @@ -29351,29 +29583,29 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super41 = _createSuper(FeedbackComponent); function FeedbackComponent(_router) { - var _this130; + var _this129; _classCallCheck(this, FeedbackComponent); - _this130 = _super41.call(this); - _this130._router = _router; - return _this130; + _this129 = _super41.call(this); + _this129._router = _router; + return _this129; } _createClass(FeedbackComponent, [{ key: "ngOnInit", value: function ngOnInit() { - var _this131 = this; + var _this130 = this; this.timeout('Getting Title', function () { - return _this131.updateRoute(document.title); + return _this130.updateRoute(document.title); }, 1000); this._router.events.subscribe(function (event) { /* istanbul ignore else */ if (event instanceof router_1.NavigationEnd) { - _this131.timeout('Getting Title', function () { - return _this131.updateRoute(document.title); + _this130.timeout('Getting Title', function () { + return _this130.updateRoute(document.title); }); } }); @@ -29867,27 +30099,27 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super43 = _createSuper(PopoutMenuComponent); function PopoutMenuComponent() { - var _this132; + var _this131; _classCallCheck(this, PopoutMenuComponent); - _this132 = _super43.apply(this, arguments); + _this131 = _super43.apply(this, arguments); /** List of available actions */ - _this132.actions = []; + _this131.actions = []; /** Emitter for user actions */ - _this132.action = new core_1.EventEmitter(); - return _this132; + _this131.action = new core_1.EventEmitter(); + return _this131; } _createClass(PopoutMenuComponent, [{ key: "close", value: function close() { - var _this133 = this; + var _this132 = this; this.timeout('close', function () { - _this133.show = false; + _this132.show = false; }); } }]); @@ -30030,15 +30262,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super44 = _createSuper(SearchbarComponent); function SearchbarComponent() { - var _this134; + var _this133; _classCallCheck(this, SearchbarComponent); - _this134 = _super44.apply(this, arguments); + _this133 = _super44.apply(this, arguments); /** Emitter for changes to the searchbar value */ - _this134.valueChange = new core_1.EventEmitter(); - return _this134; + _this133.valueChange = new core_1.EventEmitter(); + return _this133; } _createClass(SearchbarComponent, [{ @@ -30375,7 +30607,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons function libsLoadingSrcLibLoadingActionsTs(module, exports, __webpack_require__) { "use strict"; - var _this135 = this; + var _this134 = this; Object.defineProperty(exports, "__esModule", { value: true @@ -30462,7 +30694,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons store_1.on(error, function (state, action) { return Object.assign(Object.assign({}, state), _defineProperty({}, stateKey, loading_model_1.LoadingModel.error(action.payload))); }), store_1.on(clear, function () { - return Object.assign(Object.assign({}, _this135.state), _defineProperty({}, stateKey, loading_model_1.LoadingModel.empty())); + return Object.assign(Object.assign({}, _this134.state), _defineProperty({}, stateKey, loading_model_1.LoadingModel.empty())); })]; var selectData = function selectData(state) { @@ -30574,7 +30806,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var LoadingModel = /*#__PURE__*/function () { function LoadingModel(isLoading, hasError, hasSuccess, _success, error) { - var _this136 = this; + var _this135 = this; _classCallCheck(this, LoadingModel); @@ -30589,36 +30821,36 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons */ this.mutate = function (success) { - return new LoadingModel(_this136.isLoading, _this136.hasError, !!success, !success ? undefined : success); + return new LoadingModel(_this135.isLoading, _this135.hasError, !!success, !success ? undefined : success); }; this.loading = function () { - var success = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _this136.success; - return new LoadingModel(true, false, !!success && _this136.hasSuccess, !success ? undefined : success); + var success = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _this135.success; + return new LoadingModel(true, false, !!success && _this135.hasSuccess, !success ? undefined : success); }; this.isEmpty = function () { - return !_this136.isSuccess() && !_this136.isError(); + return !_this135.isSuccess() && !_this135.isError(); }; this.hasLoaded = function () { - return !_this136.isEmpty() && !_this136.isLoading; + return !_this135.isEmpty() && !_this135.isLoading; }; this.isSuccess = function () { - return _this136.hasSuccess; + return _this135.hasSuccess; }; this.isError = function () { - return _this136.hasError; + return _this135.hasError; }; this.shouldLoad = function () { - return !_this136.isSuccess() && !_this136.isLoading; + return !_this135.isSuccess() && !_this135.isLoading; }; this.toString = function () { - return "Loading: ".concat(_this136.isLoading, ", Success: ").concat(_this136.hasSuccess, ":**").concat(_this136._success, "**, ") + "Error: ".concat(_this136.hasError, ":").concat(_this136.error); + return "Loading: ".concat(_this135.isLoading, ", Success: ").concat(_this135.hasSuccess, ":**").concat(_this135._success, "**, ") + "Error: ".concat(_this135.hasError, ":").concat(_this135.error); }; } @@ -30938,14 +31170,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons "../../libs/data-common/src/index.ts"); var OrganisationEffects = function OrganisationEffects(actions, organisationService) { - var _this137 = this; + var _this136 = this; _classCallCheck(this, OrganisationEffects); this.actions = actions; this.organisationService = organisationService; this.loadOrganisations = loading_1.createLoadingEffect(this.actions, organisation_actions_1.loadOrganisations, function () { - return _this137.organisationService.loadOrganisation(); + return _this136.organisationService.loadOrganisation(); }); }; @@ -31249,7 +31481,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons "../../libs/data-common/src/index.ts"); var RoomsEffects = function RoomsEffects(actions, spaceService) { - var _this138 = this; + var _this137 = this; _classCallCheck(this, RoomsEffects); @@ -31272,22 +31504,22 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }))]; })); this.loadRoomsForResultsEffect = loading_1.createLoadingEffect(this.actions, rooms_actions_1.loadRoomsForResults, function (action) { - return _this138.spaceService.available(rooms_types_1.roomQueryOptionsToSpaceAvailabilityOptions(action), 'rooms'); + return _this137.spaceService.available(rooms_types_1.roomQueryOptionsToSpaceAvailabilityOptions(action), 'rooms'); }); this.loadRoomsForResultsMapEffect = loading_1.createLoadingEffect(this.actions, rooms_actions_1.loadRoomsForResultsMap, function (action) { - return _this138.spaceService.available(rooms_types_1.roomQueryOptionsToSpaceAvailabilityOptions(action), 'rooms for maps', false); + return _this137.spaceService.available(rooms_types_1.roomQueryOptionsToSpaceAvailabilityOptions(action), 'rooms for maps', false); }); this.loadLaterThatDayResultsEffect = loading_1.createLoadingEffect(this.actions, rooms_actions_1.loadLaterThatDayResults, function (action) { - return _this138.spaceService.available(rooms_types_1.roomQueryOptionsToSpaceAvailabilityOptions(action), 'laterResults'); + return _this137.spaceService.available(rooms_types_1.roomQueryOptionsToSpaceAvailabilityOptions(action), 'laterResults'); }); this.loadNextDayResultsEffect = loading_1.createLoadingEffect(this.actions, rooms_actions_1.loadNextDayResults, function (action) { - return _this138.spaceService.available(rooms_types_1.roomQueryOptionsToSpaceAvailabilityOptions(action), 'nextDay'); + return _this137.spaceService.available(rooms_types_1.roomQueryOptionsToSpaceAvailabilityOptions(action), 'nextDay'); }); this.loadDiffSizeResultsEffect = loading_1.createLoadingEffect(this.actions, rooms_actions_1.loadDiffSizeResults, function (action) { - return _this138.spaceService.available(rooms_types_1.roomQueryOptionsToSpaceAvailabilityOptions(action), 'diffSize'); + return _this137.spaceService.available(rooms_types_1.roomQueryOptionsToSpaceAvailabilityOptions(action), 'diffSize'); }); this.loadRoomByIdResultsEffect = loading_1.createLoadingEffect(this.actions, rooms_actions_1.loadByIdResults, function (action) { - return _this138.spaceService.available(rooms_types_1.roomByIdQueryOptionsToSpaceAvailabilityOptions(action), 'byId', false); + return _this137.spaceService.available(rooms_types_1.roomByIdQueryOptionsToSpaceAvailabilityOptions(action), 'byId', false); }); }; @@ -31494,6 +31726,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons /** Fields to include recurrence in the availability search */ is_recurrent: options === null || options === void 0 ? void 0 : options.is_recurrent, is_multiroom: options === null || options === void 0 ? void 0 : options.is_multiroom, + merged: options === null || options === void 0 ? void 0 : options.merged, recurrence_period: options === null || options === void 0 ? void 0 : options.recurrence_period, recurrence_interval: options === null || options === void 0 ? void 0 : options.recurrence_interval, recurrence_endTz: options === null || options === void 0 ? void 0 : options.recurrence_endTz, @@ -31854,6 +32087,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons tslib_1.__exportStar(__webpack_require__( /*! ./lib/zoom-warning-modal/components/zoom-warning/zoom-warning.component */ "../../libs/ui/src/lib/zoom-warning-modal/components/zoom-warning/zoom-warning.component.ts"), exports); + + tslib_1.__exportStar(__webpack_require__( + /*! ./lib/catering-drop-modal/components/catering-drop/catering-drop-modal.component */ + "../../libs/ui/src/lib/catering-drop-modal/components/catering-drop/catering-drop-modal.component.ts"), exports); /***/ }, @@ -32178,7 +32415,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var date = date_tz_1.DateNow(new Date()).startOfValue('week'); this.days_of_week = []; - for (var _i15 = 0; _i15 < 7; _i15++) { + for (var _i16 = 0; _i16 < 7; _i16++) { this.days_of_week.push(date.formatDate(this.day_format)); date = date.addValue({ days: 1 @@ -32194,35 +32431,35 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "changeMonth", value: function changeMonth(value) { - var _this139 = this; + var _this138 = this; if (this._change_timer) { clearTimeout(this._change_timer); } this._change_timer = setTimeout(function () { - var new_offset = _this139.offset + value; + var new_offset = _this138.offset + value; var now = date_tz_1.DateNow(new Date()); var date = now.addValue({ months: new_offset, days: now.dateMonth === 2 ? 2 : 0 }); //add 2 days if month is february to avoid calc errors - if (_this139.from && date.isBeforeDate(_this139.from, 'month')) { + if (_this138.from && date.isBeforeDate(_this138.from, 'month')) { return; } - if (_this139.to && date.isAfterDate(_this139.to, 'month')) { + if (_this138.to && date.isAfterDate(_this138.to, 'month')) { return; } - _this139.offset = new_offset; + _this138.offset = new_offset; - _this139.month.emit(_this139.offset); + _this138.month.emit(_this138.offset); - _this139.generateMonth(); + _this138.generateMonth(); - _this139._change_timer = null; + _this138._change_timer = null; }, 100); } /** @@ -32996,38 +33233,38 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super45 = _createSuper(AutoCompleteChipSelectItemComponent); function AutoCompleteChipSelectItemComponent(control) { - var _this140; + var _this139; _classCallCheck(this, AutoCompleteChipSelectItemComponent); - _this140 = _super45.call(this); - _this140.control = control; - _this140.optionSelected = new core_1.EventEmitter(); - _this140.feedbackOutput = new core_1.EventEmitter(); - _this140.chipsCleared = new core_1.EventEmitter(); - _this140.onClickConfirm = new core_1.EventEmitter(); + _this139 = _super45.call(this); + _this139.control = control; + _this139.optionSelected = new core_1.EventEmitter(); + _this139.feedbackOutput = new core_1.EventEmitter(); + _this139.chipsCleared = new core_1.EventEmitter(); + _this139.onClickConfirm = new core_1.EventEmitter(); /** * If true, only allow 1 group at a time to get selected. Show others as disabled. */ - _this140.selectOnlyOneGroup = false; - _this140.localFilter = true; - _this140.selectOnlyOneGroupChange = new rxjs_1.BehaviorSubject(false); - _this140.separatorKeysCodes = [keycodes_1.ENTER, keycodes_1.COMMA]; - _this140.filterFormControl = new forms_1.FormControl(); - _this140.focused = false; - _this140.mobileFullScreen = false; - _this140.autocompleteOptions = new rxjs_1.BehaviorSubject([]); - _this140.filteredAutocompleteOptions = new rxjs_1.BehaviorSubject([]); + _this139.selectOnlyOneGroup = false; + _this139.localFilter = true; + _this139.selectOnlyOneGroupChange = new rxjs_1.BehaviorSubject(false); + _this139.separatorKeysCodes = [keycodes_1.ENTER, keycodes_1.COMMA]; + _this139.filterFormControl = new forms_1.FormControl(); + _this139.focused = false; + _this139.mobileFullScreen = false; + _this139.autocompleteOptions = new rxjs_1.BehaviorSubject([]); + _this139.filteredAutocompleteOptions = new rxjs_1.BehaviorSubject([]); /** List shown to user, filters children if a group header is added **/ - _this140.chipOptions = new rxjs_1.BehaviorSubject([]); - _this140.value = new rxjs_1.BehaviorSubject([]); - _this140.enableCTAs = false; - _this140.hasChips = false; + _this139.chipOptions = new rxjs_1.BehaviorSubject([]); + _this139.value = new rxjs_1.BehaviorSubject([]); + _this139.enableCTAs = false; + _this139.hasChips = false; - _this140.scrollEvent = function (event) { - if (_this140.trigger === null) { + _this139.scrollEvent = function (event) { + if (_this139.trigger === null) { return; } /** @@ -33035,18 +33272,18 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons */ - if (_this140.trigger.panelOpen && event.target.closest('.mat-autocomplete-panel') === null && !event.srcElement.classList.contains('mat-form-field-autofill-control')) { - _this140.onFocus(false); + if (_this139.trigger.panelOpen && event.target.closest('.mat-autocomplete-panel') === null && !event.srcElement.classList.contains('mat-form-field-autofill-control')) { + _this139.onFocus(false); - _this140.trigger['_element'].nativeElement.blur(); + _this139.trigger['_element'].nativeElement.blur(); } }; - if (_this140.control) { - _this140.control.valueAccessor = _assertThisInitialized(_this140); + if (_this139.control) { + _this139.control.valueAccessor = _assertThisInitialized(_this139); } - return _this140; + return _this139; } _createClass(AutoCompleteChipSelectItemComponent, [{ @@ -33057,7 +33294,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "ngOnInit", value: function ngOnInit() { - var _this141 = this; + var _this140 = this; this.subscription('autoCompleteOptions', rxjs_1.combineLatest([this.options, this.selectedOptions, this.selectOnlyOneGroupChange]).pipe(operators_1.map(function (_ref7) { var _ref8 = _slicedToArray(_ref7, 3), @@ -33065,7 +33302,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons selectedOptions = _ref8[1], selectOnlyOneGroup = _ref8[2]; - _this141.hasChips = !!selectedOptions.length; + _this140.hasChips = !!selectedOptions.length; return options.map(function (option) { var selected = !!selectedOptions.find(function (s) { return s.value === option.value; @@ -33079,7 +33316,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }); // if no options chosen, enable it, otherwise only allow selections from other options. enabled = selectedOptions.length === 0 || (selectedGroupHeader ? selectedGroupHeader.groupId === option.groupId : false); - _this141.enableCTAs = selectedOptions.length !== 0; + _this140.enableCTAs = selectedOptions.length !== 0; } return Object.assign(Object.assign({}, option), { @@ -33098,15 +33335,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons return b.groupId > a.groupId ? -1 : 1; }); - _this141.autocompleteOptions.next(options); + _this140.autocompleteOptions.next(options); - _this141.filteredAutocompleteOptions.next(_this141.getFilteredAutocompleteOptions((_a = _this141.filterFormControl.value) === null || _a === void 0 ? void 0 : _a.trim())); + _this140.filteredAutocompleteOptions.next(_this140.getFilteredAutocompleteOptions((_a = _this140.filterFormControl.value) === null || _a === void 0 ? void 0 : _a.trim())); })); this.subscription('filterFormControlChanges', this.filterFormControl.valueChanges.subscribe(function (value) { - if (_this141.localFilter && value.length) { - _this141.filteredAutocompleteOptions.next(_this141.getFilteredAutocompleteOptions(value)); + if (_this140.localFilter && value.length) { + _this140.filteredAutocompleteOptions.next(_this140.getFilteredAutocompleteOptions(value)); } else { - _this141.filteredAutocompleteOptions.next(_this141.getFilteredAutocompleteOptions()); + _this140.filteredAutocompleteOptions.next(_this140.getFilteredAutocompleteOptions()); } })); this.subscription('chipOptions', this.selectedOptions.pipe(operators_1.map(function (selectedOptions) { @@ -33121,17 +33358,17 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }); }); })).subscribe(function (next) { - _this141.chipOptions.next(next); + _this140.chipOptions.next(next); })); this.subscription('formData', this.selectedOptions.pipe(operators_1.map(function (selected) { // group headers always contain children, so only pick out children for data return selected; })).subscribe(function (next) { - _this141.value.next(next); + _this140.value.next(next); })); // tie value changes to change. this.subscription('valueChanges', this.value.pipe(operators_1.distinctUntilChanged()).subscribe(function (next) { - if (_this141._onChange) { + if (_this140._onChange) { // rewrote this to avoid read only error var values = []; next.forEach(function (v, i) { @@ -33146,7 +33383,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons values.push(value); }); - _this141._onChange(values); + _this140._onChange(values); } })); window.addEventListener('scroll', this.scrollEvent, true); @@ -33225,7 +33462,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "selectOption", value: function selectOption(value) { - var _this142 = this; + var _this141 = this; this.options.pipe(operators_1.take(1), operators_1.map(function (options) { return options.find(function (o) { @@ -33233,7 +33470,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }); })).subscribe(function (next) { if (next) { - _this142.optionSelected.emit(next); + _this141.optionSelected.emit(next); } }); } @@ -33268,7 +33505,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "onFocus", value: function onFocus(focusIn, fromPanel) { - var _this143 = this; + var _this142 = this; if (!focusIn && this.useCTAs) { this.onClickConfirm.emit(); @@ -33281,7 +33518,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this.timeout('showDefaults', function () { // All results do not show as expected unless I focus again. // Something about the mobile styles. - _this143.onFocus(true); + _this142.onFocus(true); }, 100); } @@ -33345,7 +33582,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "writeValue", value: function writeValue(obj) { - var _this144 = this; + var _this143 = this; var _a; // update selected options when this value is written @@ -33357,7 +33594,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }) : false; }); })).subscribe(function (next) { - _this144.selectedOptions.next(next); + _this143.selectedOptions.next(next); }); } }, { @@ -33812,7 +34049,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var AutoCompleteSelectOptionComponent = /*#__PURE__*/function () { function AutoCompleteSelectOptionComponent() { - var _this145 = this; + var _this144 = this; _classCallCheck(this, AutoCompleteSelectOptionComponent); @@ -33829,7 +34066,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this._options = new rxjs_1.BehaviorSubject(this.options); this.scrollEvent = function (event) { - if (_this145.trigger === null) { + if (_this144.trigger === null) { return; } /** @@ -33837,10 +34074,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons */ - if (_this145.trigger.panelOpen && event.target.closest('.mat-autocomplete-panel') === null) { - _this145.trigger.closePanel(); + if (_this144.trigger.panelOpen && event.target.closest('.mat-autocomplete-panel') === null) { + _this144.trigger.closePanel(); - _this145.trigger['_element'].nativeElement.blur(); + _this144.trigger['_element'].nativeElement.blur(); } }; } @@ -33871,12 +34108,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "updateFilteredOptions", value: function updateFilteredOptions() { - var _this146 = this; + var _this145 = this; this.filteredOptions = this.filterFormControl.valueChanges.pipe(operators_1.startWith(''), operators_1.map(function (value) { return typeof value === 'string' ? value : value && (value === null || value === void 0 ? void 0 : value.display) ? value.display : ''; }), operators_1.map(function (name) { - return name ? _this146._filter(name) : _this146.options.slice(); + return name ? _this145._filter(name) : _this145.options.slice(); })); } }, { @@ -34164,14 +34401,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super46 = _createSuper(BaseTemplateComponent); function BaseTemplateComponent(vcRef) { - var _this147; + var _this146; _classCallCheck(this, BaseTemplateComponent); - _this147 = _super46.call(this); - _this147.vcRef = vcRef; - _this147.isRendered = false; - return _this147; + _this146 = _super46.call(this); + _this146.vcRef = vcRef; + _this146.isRendered = false; + return _this146; } _createClass(BaseTemplateComponent, [{ @@ -34194,17 +34431,17 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "ngAfterViewInit", value: function ngAfterViewInit() { - var _this148 = this; + var _this147 = this; if (!this.isRendered) { console.log('View not rendered yet, attempting to post initialization'); setTimeout(function () { - console.log('Timeout ended, trying again', _this148.template); + console.log('Timeout ended, trying again', _this147.template); - if (!_this148.attemptViewEmbed()) { + if (!_this147.attemptViewEmbed()) { console.log('Attempting render in after view initialization'); setTimeout(function () { - if (!_this148.attemptViewEmbed()) { + if (!_this147.attemptViewEmbed()) { console.error('FAILED TO LOAD TEMPLATE'); } }, 1000); @@ -34248,6 +34485,133 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons /***/ }, + /***/ + "../../libs/ui/src/lib/catering-drop-modal/components/catering-drop/catering-drop-modal.component.ts": + /*!***********************************************************************************************************************************************************!*\ + !*** /home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/catering-drop-modal/components/catering-drop/catering-drop-modal.component.ts ***! + \***********************************************************************************************************************************************************/ + + /*! no static exports found */ + + /***/ + function libsUiSrcLibCateringDropModalComponentsCateringDropCateringDropModalComponentTs(module, exports, __webpack_require__) { + "use strict"; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var core_1 = __webpack_require__( + /*! @angular/core */ + "../../node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); + + var dialog_1 = __webpack_require__( + /*! @angular/material/dialog */ + "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/dialog.js"); + + var i0 = __webpack_require__( + /*! @angular/core */ + "../../node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); + + var i1 = __webpack_require__( + /*! @angular/material/dialog */ + "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/dialog.js"); + + var i2 = __webpack_require__( + /*! @angular/material/button */ + "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/button.js"); + + var CateringDropComponent = /*#__PURE__*/function () { + function CateringDropComponent(dialogRef) { + _classCallCheck(this, CateringDropComponent); + + this.dialogRef = dialogRef; + } + + _createClass(CateringDropComponent, [{ + key: "onConfirm", + value: function onConfirm() { + this.dialogRef.close(true); + } + }, { + key: "onCancel", + value: function onCancel() { + this.dialogRef.close(false); + } + }]); + + return CateringDropComponent; + }(); + + exports.CateringDropComponent = CateringDropComponent; + + CateringDropComponent.ɵfac = function CateringDropComponent_Factory(t) { + return new (t || CateringDropComponent)(i0.ɵɵdirectiveInject(i1.MatDialogRef)); + }; + + CateringDropComponent.ɵcmp = i0.ɵɵdefineComponent({ + type: CateringDropComponent, + selectors: [["catering-drop-modal"]], + decls: 14, + vars: 0, + consts: [[1, "body"], [1, "content"], ["mat-button", "", 1, "outline", 3, "click"], ["mat-button", "", 3, "click"]], + template: function CateringDropComponent_Template(rf, ctx) { + if (rf & 1) { + i0.ɵɵelementStart(0, "header"); + i0.ɵɵelementStart(1, "h3"); + i0.ɵɵtext(2, "Catering conflict"); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(3, "mat-dialog-content"); + i0.ɵɵelementStart(4, "div", 0); + i0.ɵɵelementStart(5, "div", 1); + i0.ɵɵelementStart(6, "p"); + i0.ɵɵtext(7, "Proceed without catering?"); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(8, "mat-dialog-actions"); + i0.ɵɵelementStart(9, "footer"); + i0.ɵɵelementStart(10, "button", 2); + i0.ɵɵlistener("click", function CateringDropComponent_Template_button_click_10_listener() { + return ctx.onCancel(); + }); + i0.ɵɵtext(11, "Go Back"); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(12, "button", 3); + i0.ɵɵlistener("click", function CateringDropComponent_Template_button_click_12_listener() { + return ctx.onConfirm(); + }); + i0.ɵɵtext(13, "Yes"); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + } + }, + directives: [i1.MatDialogContent, i1.MatDialogActions, i2.MatButton], + styles: [".body[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n flex-direction: column;\n padding: 1em;\n}\n\n.content[_ngcontent-%COMP%] {\n min-width: 16rem;\n max-width: 24rem;\n text-align: center;\n font-size: 0.8em;\n}\n\nfooter[_ngcontent-%COMP%] {\n width: 100%;\n text-align: center;\n}\n\nmat-dialog-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n min-width: 8em;\n}\n\n.outline[_ngcontent-%COMP%] {\n background-color: #fff;\n color: #1937ea;\n border: 1px solid #2251FF;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9jYXRlcmluZy1kcm9wLW1vZGFsL2NvbXBvbmVudHMvY2F0ZXJpbmctZHJvcC9jYXRlcmluZy1kcm9wLW1vZGFsLmNvbXBvbmVudC5zY3NzIiwibGlicy91aS9zcmMvbGliL2NhdGVyaW5nLWRyb3AtbW9kYWwvY29tcG9uZW50cy9jYXRlcmluZy1kcm9wL2NhdGVyaW5nLWRyb3AtbW9kYWwuY29tcG9uZW50LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0E7RUFDSSxhQUFBO0VBQ0EsbUJBQUE7RUFDQSxzQkFBQTtFQUNBLFlBQUE7QUNBSjs7QURHQTtFQUNJLGdCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxrQkFBQTtFQUNBLGdCQUFBO0FDQUo7O0FER0E7RUFDSSxXQUFBO0VBQ0Esa0JBQUE7QUNBSjs7QURJSTtFQUNJLGNBQUE7QUNEUjs7QURLQTtFQUNJLHNCQUFBO0VBQ0EsY0FBQTtFQUNBLHlCQUFBO0FDRkoiLCJmaWxlIjoibGlicy91aS9zcmMvbGliL2NhdGVyaW5nLWRyb3AtbW9kYWwvY29tcG9uZW50cy9jYXRlcmluZy1kcm9wL2NhdGVyaW5nLWRyb3AtbW9kYWwuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyJcbi5ib2R5IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBwYWRkaW5nOiAxZW07XG59XG5cbi5jb250ZW50IHtcbiAgICBtaW4td2lkdGg6IDE2cmVtO1xuICAgIG1heC13aWR0aDogMjRyZW07XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtc2l6ZTogLjhlbTtcbn1cblxuZm9vdGVyIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbm1hdC1kaWFsb2ctYWN0aW9ucyB7XG4gICAgYnV0dG9uIHtcbiAgICAgICAgbWluLXdpZHRoOiA4ZW07XG4gICAgfVxufVxuXG4ub3V0bGluZXtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgIGNvbG9yOiAjMTkzN2VhO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICMyMjUxRkY7XG59IiwiLmJvZHkge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBwYWRkaW5nOiAxZW07XG59XG5cbi5jb250ZW50IHtcbiAgbWluLXdpZHRoOiAxNnJlbTtcbiAgbWF4LXdpZHRoOiAyNHJlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXNpemU6IDAuOGVtO1xufVxuXG5mb290ZXIge1xuICB3aWR0aDogMTAwJTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5tYXQtZGlhbG9nLWFjdGlvbnMgYnV0dG9uIHtcbiAgbWluLXdpZHRoOiA4ZW07XG59XG5cbi5vdXRsaW5lIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgY29sb3I6ICMxOTM3ZWE7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMyMjUxRkY7XG59Il19 */"] + }); + /*@__PURE__*/ + + (function () { + i0.ɵsetClassMetadata(CateringDropComponent, [{ + type: core_1.Component, + args: [{ + selector: 'catering-drop-modal', + templateUrl: './catering-drop-modal.component.html', + styleUrls: ['./catering-drop-modal.component.scss'] + }] + }], function () { + return [{ + type: i1.MatDialogRef + }]; + }, null); + })(); + /***/ + + }, + /***/ "../../libs/ui/src/lib/cng-select/cng-select-options.component.ts": /*!************************************************************************************************************************!*\ @@ -34633,7 +34997,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "openDropdown", value: function openDropdown() { - var _this149 = this; + var _this148 = this; var ddWidth = this.dropdownPanel.ddWidth; this.dropdownPanel.ddWidth = ddWidth !== '' ? ddWidth : "".concat(this.elementRef.nativeElement.offsetWidth, "px"); @@ -34654,7 +35018,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var templatePortal = new portal_1.TemplatePortal(this.dropdownPanel.templateRef, this.viewContainerRef); this.overlayRef.attach(templatePortal); this.dropdownClosingActionsSub = this.dropdownClosingActions().subscribe(function () { - return _this149.destroyDropdown(); + return _this148.destroyDropdown(); }); } }, { @@ -34866,11 +35230,11 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons _createClass(CollapseHeaderComponent, [{ key: "ngOnInit", value: function ngOnInit() { - var _this150 = this; + var _this149 = this; this.collapseSubscription = this.collapseService.collapse$.subscribe(function () { - if (_this150.expansionPanel) { - _this150.expansionPanel.close(); // Close the panel + if (_this149.expansionPanel) { + _this149.expansionPanel.close(); // Close the panel } }); @@ -35449,6 +35813,253 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, + /***/ + "../../libs/ui/src/lib/custom-snackbar-component/custom-snackbar-component.component.ts": + /*!**********************************************************************************************************************************************!*\ + !*** /home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/custom-snackbar-component/custom-snackbar-component.component.ts ***! + \**********************************************************************************************************************************************/ + + /*! no static exports found */ + + /***/ + function libsUiSrcLibCustomSnackbarComponentCustomSnackbarComponentComponentTs(module, exports, __webpack_require__) { + "use strict"; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var core_1 = __webpack_require__( + /*! @angular/core */ + "../../node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); + + var snack_bar_1 = __webpack_require__( + /*! @angular/material/snack-bar */ + "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/snack-bar.js"); + + var i0 = __webpack_require__( + /*! @angular/core */ + "../../node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); + + var CustomSnackbarComponent = /*#__PURE__*/function () { + function CustomSnackbarComponent(data) { + _classCallCheck(this, CustomSnackbarComponent); + + this.data = data; + } + + _createClass(CustomSnackbarComponent, [{ + key: "ngOnInit", + value: function ngOnInit() {} + }, { + key: "closeSnackbar", + value: function closeSnackbar() { + this.data.snackBar.dismiss(); + } + }, { + key: "getIcon", + get: function get() { + switch (this.data.snackType) { + case 'success': + return { + type: this.data.snackType, + iconPath: 'assets/icon/toast-success.svg' + }; + + case 'error': + return { + type: this.data.snackType, + iconPath: 'assets/icon/toast-failure.svg' + }; + + case 'warn': + return { + type: this.data.snackType, + iconPath: 'assets/icon/toast-warning.svg' + }; + + case 'info': + return { + type: this.data.snackType, + iconPath: 'assets/icon/toast-info.svg' + }; + + default: + return { + type: 'info', + iconPath: 'assets/icon/toast-info.svg' + }; + } + } + }]); + + return CustomSnackbarComponent; + }(); + + exports.CustomSnackbarComponent = CustomSnackbarComponent; + + CustomSnackbarComponent.ɵfac = function CustomSnackbarComponent_Factory(t) { + return new (t || CustomSnackbarComponent)(i0.ɵɵdirectiveInject(snack_bar_1.MAT_SNACK_BAR_DATA)); + }; + + CustomSnackbarComponent.ɵcmp = i0.ɵɵdefineComponent({ + type: CustomSnackbarComponent, + selectors: [["custom-snackbar"]], + decls: 10, + vars: 6, + consts: [[1, "snack-container-message"], [3, "src", "alt"], [1, "snack-container-icon", "icon"], [1, "fas", "material-icons", "close", 3, "click"]], + template: function CustomSnackbarComponent_Template(rf, ctx) { + if (rf & 1) { + i0.ɵɵelementStart(0, "div"); + i0.ɵɵelementStart(1, "div", 0); + i0.ɵɵelementStart(2, "div"); + i0.ɵɵelement(3, "img", 1); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(4, "div"); + i0.ɵɵelementStart(5, "span"); + i0.ɵɵtext(6); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(7, "div", 2); + i0.ɵɵelementStart(8, "div", 3); + i0.ɵɵlistener("click", function CustomSnackbarComponent_Template_div_click_8_listener() { + return ctx.closeSnackbar(); + }); + i0.ɵɵtext(9, "close"); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + } + + if (rf & 2) { + i0.ɵɵclassMapInterpolate1("snack-container box-", ctx.getIcon.type, ""); + i0.ɵɵadvance(3); + i0.ɵɵpropertyInterpolate1("alt", "", ctx.getIcon.type, " icon"); + i0.ɵɵproperty("src", ctx.getIcon.iconPath, i0.ɵɵsanitizeUrl); + i0.ɵɵadvance(3); + i0.ɵɵtextInterpolate(ctx.data.message); + } + }, + styles: [".snack-container[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.material-icons[_ngcontent-%COMP%] {\n font-size: 1.5em;\n}\n\n.snack-container-message[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n align-items: center;\n width: 100%;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9jdXN0b20tc25hY2tiYXItY29tcG9uZW50L2N1c3RvbS1zbmFja2Jhci1jb21wb25lbnQuY29tcG9uZW50LnNjc3MiLCJsaWJzL3VpL3NyYy9saWIvY3VzdG9tLXNuYWNrYmFyLWNvbXBvbmVudC9jdXN0b20tc25hY2tiYXItY29tcG9uZW50LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0ksYUFBQTtFQUNBLDhCQUFBO0VBQ0EsbUJBQUE7QUNDSjs7QURFQTtFQUNJLGdCQUFBO0FDQ0o7O0FERUE7RUFDSSxhQUFBO0VBQ0EsU0FBQTtFQUNBLG1CQUFBO0VBQ0EsV0FBQTtBQ0NKIiwiZmlsZSI6ImxpYnMvdWkvc3JjL2xpYi9jdXN0b20tc25hY2tiYXItY29tcG9uZW50L2N1c3RvbS1zbmFja2Jhci1jb21wb25lbnQuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuc25hY2stY29udGFpbmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4ubWF0ZXJpYWwtaWNvbnMge1xuICAgIGZvbnQtc2l6ZTogMS41ZW07XG59XG5cbi5zbmFjay1jb250YWluZXItbWVzc2FnZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBnYXA6IDEwcHg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB3aWR0aDogMTAwJTtcbn0iLCIuc25hY2stY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4ubWF0ZXJpYWwtaWNvbnMge1xuICBmb250LXNpemU6IDEuNWVtO1xufVxuXG4uc25hY2stY29udGFpbmVyLW1lc3NhZ2Uge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDEwcHg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHdpZHRoOiAxMDAlO1xufSJdfQ== */"] + }); + /*@__PURE__*/ + + (function () { + i0.ɵsetClassMetadata(CustomSnackbarComponent, [{ + type: core_1.Component, + args: [{ + selector: 'custom-snackbar', + templateUrl: './custom-snackbar-component.component.html', + styleUrls: ['./custom-snackbar-component.component.scss'] + }] + }], function () { + return [{ + type: undefined, + decorators: [{ + type: core_1.Inject, + args: [snack_bar_1.MAT_SNACK_BAR_DATA] + }] + }]; + }, null); + })(); + /***/ + + }, + + /***/ + "../../libs/ui/src/lib/custom-snackbar-component/custom-snackbar-component.service.ts": + /*!********************************************************************************************************************************************!*\ + !*** /home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/custom-snackbar-component/custom-snackbar-component.service.ts ***! + \********************************************************************************************************************************************/ + + /*! no static exports found */ + + /***/ + function libsUiSrcLibCustomSnackbarComponentCustomSnackbarComponentServiceTs(module, exports, __webpack_require__) { + "use strict"; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var core_1 = __webpack_require__( + /*! @angular/core */ + "../../node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); + + var snack_bar_1 = __webpack_require__( + /*! @angular/material/snack-bar */ + "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/snack-bar.js"); + + var custom_snackbar_component_component_1 = __webpack_require__( + /*! ./custom-snackbar-component.component */ + "../../libs/ui/src/lib/custom-snackbar-component/custom-snackbar-component.component.ts"); + + var i0 = __webpack_require__( + /*! @angular/core */ + "../../node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); + + var i1 = __webpack_require__( + /*! @angular/material/snack-bar */ + "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/snack-bar.js"); + + var SnackBarService = /*#__PURE__*/function () { + function SnackBarService(snackBar) { + _classCallCheck(this, SnackBarService); + + this.snackBar = snackBar; + } + + _createClass(SnackBarService, [{ + key: "openSnackBar", + value: function openSnackBar(message, type, duration, verticalPosition, horizontalPosition) { + var _snackType = type !== undefined ? type : 'success'; + + this.snackBar.openFromComponent(custom_snackbar_component_component_1.CustomSnackbarComponent, { + duration: duration || 4000, + horizontalPosition: horizontalPosition || 'end', + verticalPosition: verticalPosition || 'top', + data: { + message: message, + snackType: _snackType, + snackBar: this.snackBar + } + }); + } + }]); + + return SnackBarService; + }(); + + exports.SnackBarService = SnackBarService; + + SnackBarService.ɵfac = function SnackBarService_Factory(t) { + return new (t || SnackBarService)(i0.ɵɵinject(i1.MatSnackBar)); + }; + + SnackBarService.ɵprov = i0.ɵɵdefineInjectable({ + token: SnackBarService, + factory: SnackBarService.ɵfac, + providedIn: 'root' + }); + /*@__PURE__*/ + + (function () { + i0.ɵsetClassMetadata(SnackBarService, [{ + type: core_1.Injectable, + args: [{ + providedIn: 'root' + }] + }], function () { + return [{ + type: i1.MatSnackBar + }]; + }, null); + })(); + /***/ + + }, + /***/ "../../libs/ui/src/lib/date-tz-calendar-widget/date-tz-calendar-widget.component.ts": /*!******************************************************************************************************************************************!*\ @@ -35582,55 +36193,55 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super47 = _createSuper(DateTzCalendarWidgetComponent); function DateTzCalendarWidgetComponent() { - var _this151; + var _this150; _classCallCheck(this, DateTzCalendarWidgetComponent); - _this151 = _super47.apply(this, arguments); + _this150 = _super47.apply(this, arguments); /** CSS class to add to the root element of the component */ - _this151.className = 'default'; + _this150.className = 'default'; /** Offset of the display month from the current month */ - _this151.month = new core_1.EventEmitter(); - _this151.weeks = new Array(6).fill(0); - _this151.selectedDateTz = date_tz_1.DateNow(); // R--- this is the date picker that needs to be TZ aware + _this150.month = new core_1.EventEmitter(); + _this150.weeks = new Array(6).fill(0); + _this150.selectedDateTz = date_tz_1.DateNow(); // R--- this is the date picker that needs to be TZ aware /** Offset of the month displayed from the current month */ - _this151.offset = 0; + _this150.offset = 0; /** Minimum offset for changing the month */ - _this151.min_offset = -999999; + _this150.min_offset = -999999; /** Maximum offset for changing the month */ - _this151.max_offset = 999999; + _this150.max_offset = 999999; /** Blocks representing the rendering details of the display days of the month */ - _this151.date_list = []; + _this150.date_list = []; /** Name of the actively displayed month */ - _this151.month_name = date_tz_1.DateNow(new Date()).formatDate('MMMM yyyy'); + _this150.month_name = date_tz_1.DateNow(new Date()).formatDate('MMMM yyyy'); /** Name of the days of the week to display */ - _this151.days_of_week = []; + _this150.days_of_week = []; /** Luxon format string for formatting days of the week. Defaults to `dd` */ - _this151.day_format = 'EEE'; + _this150.day_format = 'EEE'; /** Luxon format string for formatting active month. Defaults to `MMMM yyyy` */ - _this151.month_format = 'MMMM yyyy'; - _this151._today = date_tz_1.DateNow(); + _this150.month_format = 'MMMM yyyy'; + _this150._today = date_tz_1.DateNow(); - _this151.registerOnChange = function (fn) { - return _this151._onChange = fn; + _this150.registerOnChange = function (fn) { + return _this150._onChange = fn; }; - _this151.registerOnTouched = function (fn) { - return _this151._onTouch = fn; + _this150.registerOnTouched = function (fn) { + return _this150._onTouch = fn; }; - return _this151; + return _this150; } _createClass(DateTzCalendarWidgetComponent, [{ @@ -35760,7 +36371,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }); this.date_list = []; - for (var _i16 = 0; _i16 < 42; _i16++) { + for (var _i17 = 0; _i17 < 42; _i17++) { this.date_list.push({ value: startDate, display: startDate.formatDate('d'), @@ -35788,7 +36399,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this.days_of_week = []; - for (var _i17 = 0; _i17 < 7; _i17++) { + for (var _i18 = 0; _i18 < 7; _i18++) { this.days_of_week.push(date.formatDate(this.day_format)); date = date.addValue({ days: 1 @@ -36102,49 +36713,49 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super48 = _createSuper(DateTzDatePickerComponent); function DateTzDatePickerComponent() { - var _this152; + var _this151; _classCallCheck(this, DateTzDatePickerComponent); - _this152 = _super48.apply(this, arguments); + _this151 = _super48.apply(this, arguments); /** Earliest date available the user is allowed to pick */ - _this152.fromDateTz = date_tz_1.DateNow(new Date()); + _this151.fromDateTz = date_tz_1.DateNow(new Date()); /** Latest date available the user is allowed to pick */ - _this152.untilDateTz = date_tz_1.DateNow(new Date()).endOfValue('day').addValue({ + _this151.untilDateTz = date_tz_1.DateNow(new Date()).endOfValue('day').addValue({ years: 1 }); /** Position of the tooltip */ - _this152.position = 'right'; + _this151.position = 'right'; /** Offset of the tooltip */ - _this152.offset = 'bottom'; // R-- possible TODO, address all_day that disables this input and displays "Add Day for the value like the time picker" + _this151.offset = 'bottom'; // R-- possible TODO, address all_day that disables this input and displays "Add Day for the value like the time picker" - _this152.all_day = false; + _this151.all_day = false; /** Whether to show the calendar tooltip */ - _this152.icon_only = false; - _this152.onSelect = new core_1.EventEmitter(); - _this152.can_pick_today = true; + _this151.icon_only = false; + _this151.onSelect = new core_1.EventEmitter(); + _this151.can_pick_today = true; /** Currently selected date */ - _this152.selectedDateTzValue = new rxjs_1.BehaviorSubject(date_tz_1.DateNow(new Date())); + _this151.selectedDateTzValue = new rxjs_1.BehaviorSubject(date_tz_1.DateNow(new Date())); - _this152.resetToLastSelection = function () { - return _this152._acaDatePicker.updateDate(); + _this151.resetToLastSelection = function () { + return _this151._acaDatePicker.updateDate(); }; - _this152.registerOnChange = function (fn) { - return _this152._onChange = fn; + _this151.registerOnChange = function (fn) { + return _this151._onChange = fn; }; - _this152.registerOnTouched = function (fn) { - return _this152._onTouch = fn; + _this151.registerOnTouched = function (fn) { + return _this151._onTouch = fn; }; - return _this152; + return _this151; } _createClass(DateTzDatePickerComponent, [{ @@ -36586,26 +37197,26 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super49 = _createSuper(DateTzDurationFieldComponent); function DateTzDurationFieldComponent() { - var _this153; + var _this152; _classCallCheck(this, DateTzDurationFieldComponent); - _this153 = _super49.apply(this, arguments); + _this152 = _super49.apply(this, arguments); /** Whether form all_day is enabled. */ // R-- need to address all_day that disables this input and displays "Add Day for the value" - _this153.all_day = false; + _this152.all_day = false; /** * Specify the slice of durations to use when generating options. */ - _this153.durationGroups = time_utils_1.defaultDurationGroups; + _this152.durationGroups = time_utils_1.defaultDurationGroups; /** Component will return a number of minutes */ - _this153.value = new rxjs_1.BehaviorSubject(time_utils_1.DEFAULT_DURATION); - _this153.currentStartDateTz = new rxjs_1.BehaviorSubject(date_tz_1.DateNow(new Date())); - _this153.filterFormControl = new forms_1.FormControl(); - _this153.nearestStep = rxjs_1.combineLatest([_this153.filterFormControl.valueChanges, _this153.currentStartDateTz]).pipe(operators_1.map(function (_ref9) { + _this152.value = new rxjs_1.BehaviorSubject(time_utils_1.DEFAULT_DURATION); + _this152.currentStartDateTz = new rxjs_1.BehaviorSubject(date_tz_1.DateNow(new Date())); + _this152.filterFormControl = new forms_1.FormControl(); + _this152.nearestStep = rxjs_1.combineLatest([_this152.filterFormControl.valueChanges, _this152.currentStartDateTz]).pipe(operators_1.map(function (_ref9) { var _ref10 = _slicedToArray(_ref9, 2), value = _ref10[0], currentStartDate = _ref10[1]; @@ -36615,15 +37226,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * */ var ms = date_tz_1.convertTimezonedTimestampToLocalDateTz(currentStartDate.ms, currentStartDate.building_tz).ms; - return base_1.nearestDurationToInput(_this153.durationGroups, ms, value); + return base_1.nearestDurationToInput(_this152.durationGroups, ms, value); })); - _this153.options = new rxjs_1.BehaviorSubject([]); - _this153.placeHolderOption = _this153.options.pipe(operators_1.map(function (options) { + _this152.options = new rxjs_1.BehaviorSubject([]); + _this152.placeHolderOption = _this152.options.pipe(operators_1.map(function (options) { return options.find(function (o) { return o.value === time_utils_1.DEFAULT_DURATION; }); })); - _this153.selectedOption = rxjs_1.combineLatest([_this153.options, _this153.value]).pipe(operators_1.map(function (_ref11) { + _this152.selectedOption = rxjs_1.combineLatest([_this152.options, _this152.value]).pipe(operators_1.map(function (_ref11) { var _ref12 = _slicedToArray(_ref11, 2), options = _ref12[0], value = _ref12[1]; @@ -36632,7 +37243,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons return o.value === value; }); })); - return _this153; + return _this152; } _createClass(DateTzDurationFieldComponent, [{ @@ -36650,12 +37261,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "ngOnInit", value: function ngOnInit() { - var _this154 = this; + var _this153 = this; this.subscription('OptionsCalculation', this.currentStartDateTz.pipe(operators_1.map(function (d) { - return time_utils_1.generateDurationOptionsFromGroups(d, _this154.durationGroups, _this154.extended); + return time_utils_1.generateDurationOptionsFromGroups(d, _this153.durationGroups, _this153.extended); })).subscribe(function (next) { - _this154.options.next(next); + _this153.options.next(next); })); } }, { @@ -37003,60 +37614,60 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super50 = _createSuper(DateTzTimeFieldComponent); function DateTzTimeFieldComponent() { - var _this155; + var _this154; _classCallCheck(this, DateTzTimeFieldComponent); - _this155 = _super50.apply(this, arguments); + _this154 = _super50.apply(this, arguments); /** Time step between each allowed time option */ - _this155.step = 15; + _this154.step = 15; /** Whether form field is disabled */ // @Input() public disabled: boolean; /** Whether past times are allowed */ - _this155.noPastTimes = true; + _this154.noPastTimes = true; /** Representing the DateTZ object datetime to start time options from **/ - _this155.fromDateTz = date_tz_1.DateNow(new Date()); // Disables this input and displays R--- "All Day" for the value + _this154.fromDateTz = date_tz_1.DateNow(new Date()); // Disables this input and displays R--- "All Day" for the value - _this155.all_day = false; - _this155.show_current = false; - _this155.startFromDateTz = false; + _this154.all_day = false; + _this154.show_current = false; + _this154.startFromDateTz = false; /** DateTZ object representing the currently set datetime */ - _this155.selectedDateTz = new rxjs_1.BehaviorSubject(base_1.closestToTimeSlotTz(date_tz_1.DateNow(new Date()), _this155.step)); + _this154.selectedDateTz = new rxjs_1.BehaviorSubject(base_1.closestToTimeSlotTz(date_tz_1.DateNow(new Date()), _this154.step)); /** string representing the currently set datetime display value, needed for the input to display the slected value */ - _this155.selectedTimeString = new rxjs_1.BehaviorSubject(base_1.timeWithGmtOffsetFormatString(_this155.selectedDateTz.value)); - _this155.filterFormControl = new forms_1.FormControl(); + _this154.selectedTimeString = new rxjs_1.BehaviorSubject(base_1.timeWithGmtOffsetFormatString(_this154.selectedDateTz.value)); + _this154.filterFormControl = new forms_1.FormControl(); /** Available time blocks for the selected date */ - _this155.options = new rxjs_1.BehaviorSubject(time_utils_1.generateAvailableTimesTz(date_tz_1.DateNow(), !_this155.noPastTimes, _this155.step, _this155.timezone, _this155.all_day, _this155.show_current ? [generateOptionForDateTz(date_tz_1.DateNow())] : [], _this155.startFromDateTz)); + _this154.options = new rxjs_1.BehaviorSubject(time_utils_1.generateAvailableTimesTz(date_tz_1.DateNow(), !_this154.noPastTimes, _this154.step, _this154.timezone, _this154.all_day, _this154.show_current ? [generateOptionForDateTz(date_tz_1.DateNow())] : [], _this154.startFromDateTz)); /** * A filter for finding a matching value when using the input text search */ - _this155.nearestStep = rxjs_1.combineLatest([_this155.filterFormControl.valueChanges, _this155.selectedDateTz]).pipe(operators_1.map(function (_ref13) { + _this154.nearestStep = rxjs_1.combineLatest([_this154.filterFormControl.valueChanges, _this154.selectedDateTz]).pipe(operators_1.map(function (_ref13) { var _ref14 = _slicedToArray(_ref13, 2), value = _ref14[0], selectedDateTz = _ref14[1]; - return base_1.nearestStepToInput(_this155.step, value, luxon_1.DateTime.now().valueOf()); + return base_1.nearestStepToInput(_this154.step, value, luxon_1.DateTime.now().valueOf()); })); /** * Default text displayed in the search field when the component initializes */ - _this155.placeHolderOption = _this155.options.pipe(operators_1.map(function (os) { + _this154.placeHolderOption = _this154.options.pipe(operators_1.map(function (os) { return os.length > 0 && os[0]; })); /** * Returns the selected option object by matching the selectedDateTz formated string with the option.display string */ - _this155.selectedOption = rxjs_1.combineLatest([_this155.options, _this155.selectedDateTz]).pipe(operators_1.map(function (_ref15) { + _this154.selectedOption = rxjs_1.combineLatest([_this154.options, _this154.selectedDateTz]).pipe(operators_1.map(function (_ref15) { var _ref16 = _slicedToArray(_ref15, 2), options = _ref16[0], selectedDateTz = _ref16[1]; @@ -37065,13 +37676,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons return o.display === base_1.timeWithGmtOffsetFormatString(selectedDateTz); }); })); - return _this155; + return _this154; } _createClass(DateTzTimeFieldComponent, [{ key: "ngOnInit", value: function ngOnInit() { - var _this156 = this; + var _this155 = this; // Generate the time input options for the booking date this.options.next(time_utils_1.generateAvailableTimesTz(this.selectedDateTz.value, !this.noPastTimes, this.step, this.timezone, this.all_day, this.show_current ? [generateOptionForDateTz(this.selectedDateTz.value)] : [], this.startFromDateTz)); // Subscribe to selected option changes @@ -37084,7 +37695,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * The selectedDateTz should already be pegged to the closest time slot, but * if the selected time rolls into the past this can correct it. // R--- verify this statement */ - return base_1.closestToTimeSlotTz(selectedDateTz, _this156.step); + return base_1.closestToTimeSlotTz(selectedDateTz, _this155.step); }), operators_1.withLatestFrom(this.options), operators_1.filter(function (_ref19) { var _ref20 = _slicedToArray(_ref19, 2), date = _ref20[0], @@ -37112,7 +37723,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }); return timeOptions; })).subscribe(function (next) { - return _this156.options.next(next); + return _this155.options.next(next); })); } }, { @@ -37514,38 +38125,38 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super51 = _createSuper(DurationFieldComponent); function DurationFieldComponent() { - var _this157; + var _this156; _classCallCheck(this, DurationFieldComponent); - _this157 = _super51.apply(this, arguments); + _this156 = _super51.apply(this, arguments); /** Representing desired timezone **/ - _this157.timezone = new date_tz_1.DateTZ({ + _this156.timezone = new date_tz_1.DateTZ({ date: Date.now() }).local_tz; /** * Specify the slice of durations to use when generating options. */ - _this157.durationGroups = time_utils_1.defaultDurationGroups; - _this157.value = new rxjs_1.BehaviorSubject(time_utils_1.DEFAULT_DURATION); - _this157.currentStartDate = new rxjs_1.BehaviorSubject(date_tz_1.DateNow(new Date())); - _this157.filterFormControl = new forms_1.FormControl(); - _this157.nearestStep = rxjs_1.combineLatest([_this157.filterFormControl.valueChanges, _this157.currentStartDate]).pipe(operators_1.map(function (_ref23) { + _this156.durationGroups = time_utils_1.defaultDurationGroups; + _this156.value = new rxjs_1.BehaviorSubject(time_utils_1.DEFAULT_DURATION); + _this156.currentStartDate = new rxjs_1.BehaviorSubject(date_tz_1.DateNow(new Date())); + _this156.filterFormControl = new forms_1.FormControl(); + _this156.nearestStep = rxjs_1.combineLatest([_this156.filterFormControl.valueChanges, _this156.currentStartDate]).pipe(operators_1.map(function (_ref23) { var _ref24 = _slicedToArray(_ref23, 2), value = _ref24[0], currentStartDate = _ref24[1]; - return base_1.nearestDurationToInput(_this157.durationGroups, currentStartDate.ms, value); + return base_1.nearestDurationToInput(_this156.durationGroups, currentStartDate.ms, value); })); - _this157.options = new rxjs_1.BehaviorSubject([]); - _this157.placeHolderOption = _this157.options.pipe(operators_1.map(function (options) { + _this156.options = new rxjs_1.BehaviorSubject([]); + _this156.placeHolderOption = _this156.options.pipe(operators_1.map(function (options) { return options.find(function (o) { return o.value === time_utils_1.DEFAULT_DURATION; }); })); - _this157.selectedOption = rxjs_1.combineLatest([_this157.options, _this157.value]).pipe(operators_1.map(function (_ref25) { + _this156.selectedOption = rxjs_1.combineLatest([_this156.options, _this156.value]).pipe(operators_1.map(function (_ref25) { var _ref26 = _slicedToArray(_ref25, 2), options = _ref26[0], value = _ref26[1]; @@ -37554,7 +38165,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons return o.value === value; }); })); - return _this157; + return _this156; } _createClass(DurationFieldComponent, [{ @@ -37572,12 +38183,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "ngOnInit", value: function ngOnInit() { - var _this158 = this; + var _this157 = this; this.subscription('OptionsCalculation', this.currentStartDate.pipe(operators_1.map(function (d) { - return time_utils_1.generateDurationOptionsFromGroups(d.toZone(_this158.timezone), _this158.durationGroups, _this158.extended); + return time_utils_1.generateDurationOptionsFromGroups(d.toZone(_this157.timezone), _this157.durationGroups, _this157.extended); })).subscribe(function (next) { - _this158.options.next(next); + _this157.options.next(next); })); } }, { @@ -38378,13 +38989,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super55 = _createSuper(LabelComponent); function LabelComponent(vcRef) { - var _this159; + var _this158; _classCallCheck(this, LabelComponent); - _this159 = _super55.call(this, vcRef); - _this159.required = false; - return _this159; + _this158 = _super55.call(this, vcRef); + _this158.required = false; + return _this158; } return LabelComponent; @@ -38754,33 +39365,33 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super56 = _createSuper(MckDatePickerComponent); function MckDatePickerComponent() { - var _this160; + var _this159; _classCallCheck(this, MckDatePickerComponent); - _this160 = _super56.apply(this, arguments); + _this159 = _super56.apply(this, arguments); /** Earliest date available the user is allowed to pick */ - _this160._from = date_tz_1.DateNow(new Date()).ms; + _this159._from = date_tz_1.DateNow(new Date()).ms; /** Position of the tooltip */ - _this160.position = 'right'; + _this159.position = 'right'; /** Offset of the tooltip */ - _this160.offset = 'bottom'; + _this159.offset = 'bottom'; /** Whether to show the calendar tooltip */ - _this160.icon_only = false; - _this160.onSelect = new core_1.EventEmitter(); + _this159.icon_only = false; + _this159.onSelect = new core_1.EventEmitter(); /** Currently selected date */ - _this160.dateValue = new rxjs_1.BehaviorSubject(date_tz_1.DateNow(new Date())); + _this159.dateValue = new rxjs_1.BehaviorSubject(date_tz_1.DateNow(new Date())); - _this160.resetToLastSelection = function () { - return _this160._acaDatePicker.updateDate(); + _this159.resetToLastSelection = function () { + return _this159._acaDatePicker.updateDate(); }; - return _this160; + return _this159; } // R--- or is this the date picker to refactor. too tired. @@ -39224,34 +39835,34 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super57 = _createSuper(ModalButtonRowComponent); function ModalButtonRowComponent(vcRef) { - var _this161; + var _this160; _classCallCheck(this, ModalButtonRowComponent); - _this161 = _super57.call(this, vcRef); + _this160 = _super57.call(this, vcRef); /** * Specify if you want to disable the primary button */ - _this161.primaryDisabled = false; + _this160.primaryDisabled = false; /** * Used only if primaryLabel is specified. */ - _this161.primarySubmit = new core_1.EventEmitter(); - _this161.disableFixed = false; + _this160.primarySubmit = new core_1.EventEmitter(); + _this160.disableFixed = false; /** * Specify if you want to disable the secondary button */ - _this161.secondaryDisabled = false; + _this160.secondaryDisabled = false; /** * Used only if secondaryLabel is specified. */ - _this161.secondarySubmit = new core_1.EventEmitter(); - _this161.smallButtons = false; - return _this161; + _this160.secondarySubmit = new core_1.EventEmitter(); + _this160.smallButtons = false; + return _this160; } return ModalButtonRowComponent; @@ -39288,7 +39899,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } }, directives: [i1.SpacerComponent, i2.NgIf, i3.MatButton], - styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n.mck-inherit-font[_ngcontent-%COMP%] {\n font: inherit;\n}\n.mck-content-expand[_ngcontent-%COMP%], .mck-content-page[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n}\n.mck-content-expand-width[_ngcontent-%COMP%] {\n width: 100%;\n}\n.mck-content-expand-height[_ngcontent-%COMP%] {\n height: 100%;\n}\n.mck-content-with-footer-height[_ngcontent-%COMP%] {\n height: calc(100vh - 58px);\n}\n.mck-content-full-height[_ngcontent-%COMP%], .mck-content-page-container[_ngcontent-%COMP%] {\n height: 100vh;\n}\n.mck-content-page[_ngcontent-%COMP%] {\n background: #F8F9FA;\n}\n.mck-content-body[_ngcontent-%COMP%] {\n width: 100%;\n display: block;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-content-body[_ngcontent-%COMP%] {\n max-width: 1024px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-content-body[_ngcontent-%COMP%] {\n max-width: 1024px;\n }\n}\n.mck-content-group[_ngcontent-%COMP%] {\n padding-left: 1rem;\n padding-right: 1rem;\n width: 100%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-content-group[_ngcontent-%COMP%] {\n max-width: 759px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-content-group[_ngcontent-%COMP%] {\n max-width: 759px;\n }\n}\n.mck-shadow[_ngcontent-%COMP%] {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n}\n.mck-flex-1[_ngcontent-%COMP%] {\n flex: 1;\n}\n.mck-row[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .mck-row-flow[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n}\n.mck-row.mck-center-justify[_ngcontent-%COMP%], .mck-center-justify.mck-row-flow[_ngcontent-%COMP%], .mck-row.mck-center[_ngcontent-%COMP%], .mck-row.mck-button.mat-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .mck-center.mck-row-flow[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: center;\n}\n.mck-row.mck-center-align[_ngcontent-%COMP%], .mck-center-align.mck-row-flow[_ngcontent-%COMP%], .mck-row.mck-center[_ngcontent-%COMP%], .mck-row.mck-button.mat-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .mck-center.mck-row-flow[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n align-items: center;\n}\n.mck-row.mck-stretch[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mck-stretch.mat-form-field-infix[_ngcontent-%COMP%], .mck-stretch.mck-row-flow[_ngcontent-%COMP%] {\n align-items: stretch;\n}\n.mck-row-flow[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n}\n.mck-row.mck-scroll[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mck-scroll.mat-form-field-infix[_ngcontent-%COMP%], .mck-scroll.mck-row-flow[_ngcontent-%COMP%] {\n overflow-x: scroll;\n}\n.mck-column[_ngcontent-%COMP%], .button-wrapper[_ngcontent-%COMP%], .mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n.mck-column.mck-center[_ngcontent-%COMP%], .mck-center.button-wrapper[_ngcontent-%COMP%], .mck-column.mck-button.mat-button[_ngcontent-%COMP%], .mck-button.mat-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mck-stroked-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mck-warning-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mck-secondary-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-button.mck-primary-button[_ngcontent-%COMP%], .mat-button.mck-primary-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mck-stroked-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mck-warning-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mck-secondary-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mat-stroked-button.mck-primary-button.button-wrapper[_ngcontent-%COMP%], .mck-center.mck-button.mat-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-button[_ngcontent-%COMP%], .mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-button.mat-stroked-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-center.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mck-column.mat-form-field-infix[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.button-wrapper[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mck-button.mat-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: center;\n align-items: center;\n}\n.mck-column.mck-space-between[_ngcontent-%COMP%], .mck-space-between.button-wrapper[_ngcontent-%COMP%], .mck-space-between.mck-button.mat-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-space-between.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: space-between;\n}\n.mck-column.mck-stretch[_ngcontent-%COMP%], .mck-stretch.button-wrapper[_ngcontent-%COMP%], .mck-stretch.mck-button.mat-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-stretch.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n align-items: stretch;\n}\n.mck-column.mck-scroll[_ngcontent-%COMP%], .mck-scroll.button-wrapper[_ngcontent-%COMP%], .mck-scroll.mck-button.mat-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-scroll.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n overflow-y: scroll;\n overflow-y: overlay;\n}\n.mck-column.mck-flex-end[_ngcontent-%COMP%], .mck-flex-end.button-wrapper[_ngcontent-%COMP%], .mck-flex-end.mck-button.mat-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-flex-end.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: flex-end;\n}\n.mck-overflow[_ngcontent-%COMP%] {\n overflow: auto;\n}\n.mck-bordered[_ngcontent-%COMP%], .mck-input[_ngcontent-%COMP%] {\n border-radius: 0;\n border: 1px solid #B3B3B3;\n}\n.mck-bordered[_ngcontent-%COMP%]:hover, .mck-input[_ngcontent-%COMP%]:hover {\n border-color: #464646;\n}\n.mck-bordered[_ngcontent-%COMP%]:focus, .mck-input[_ngcontent-%COMP%]:focus {\n border-color: #1F40E6;\n}\n.mck-bordered[disabled=true][_ngcontent-%COMP%], .mck-input[disabled=true][_ngcontent-%COMP%] {\n pointer-events: none;\n border-color: #f0f0f0;\n color: #ccc;\n}\n.mck-date-display[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n height: 43px;\n padding: 1rem 0.5rem;\n transition: border 200ms, box-shadow 200ms;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-form-field-wrapper[_ngcontent-%COMP%] {\n padding-bottom: 0.5rem;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] {\n min-width: auto !important;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n width: 100%;\n padding-top: 0.7rem !important;\n padding-bottom: 0.5rem !important;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] {\n min-height: 2.7rem;\n color: rgba(0, 0, 0, 0.27);\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n margin-top: 2px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-flex[_ngcontent-%COMP%] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-flex[_ngcontent-%COMP%] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 2rem;\n min-height: 2rem;\n }\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 2rem;\n min-height: 2rem;\n }\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field.mat-s[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-select[_ngcontent-%COMP%] {\n margin-top: 0.2rem;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-select[_ngcontent-%COMP%] .mat-select-arrow[_ngcontent-%COMP%] {\n visibility: hidden;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-select[_ngcontent-%COMP%] .mat-select-value[_ngcontent-%COMP%] > .mat-select-value-text[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 400;\n font-family: \"McKinsey Sans\";\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #B3B3B3;\n border-width: 1px;\n border-radius: 0;\n}\n.mck-form-input[_ngcontent-%COMP%] .available[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .available[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .available[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #3aa537;\n}\n.mck-form-input[_ngcontent-%COMP%] .booked[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .booked[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .booked[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #e12e41;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline-thick[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline-thick[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline-thick[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #1F40E6;\n border-width: 1px;\n border-radius: 0;\n}\n.mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-wrapper[_ngcontent-%COMP%] {\n padding-bottom: 0;\n}\n.mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #E12E40;\n}\n.mck-form-input[_ngcontent-%COMP%] mck-close-icon.mat-chip-remove.mat-chip-remove[_ngcontent-%COMP%] {\n opacity: 1;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-label[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 400;\n text-align: left;\n margin-bottom: 0.5rem;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-radio-button[_ngcontent-%COMP%] {\n margin-right: 1rem;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-radio-label-content[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-radio-outer-circle[_ngcontent-%COMP%] {\n border-color: #1F40E6 !important;\n border-width: 1px !important;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-radio-inner-circle[_ngcontent-%COMP%] {\n background-color: #1F40E6 !important;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-radio-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-radio-group[_ngcontent-%COMP%] > mat-radio-button[_ngcontent-%COMP%]:last-child {\n margin-right: 0;\n}\n.mck-form-input-container[_ngcontent-%COMP%] > .mck-form-input[_ngcontent-%COMP%], .mck-form-input-container[_ngcontent-%COMP%] > mck-select[_ngcontent-%COMP%] {\n margin-bottom: 0.5rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-form-input-container[_ngcontent-%COMP%] > .mck-form-input[_ngcontent-%COMP%], .mck-form-input-container[_ngcontent-%COMP%] > mck-select[_ngcontent-%COMP%] {\n margin-bottom: 1.75rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-form-input-container[_ngcontent-%COMP%] > .mck-form-input[_ngcontent-%COMP%], .mck-form-input-container[_ngcontent-%COMP%] > mck-select[_ngcontent-%COMP%] {\n margin-bottom: 1.75rem;\n }\n}\n.mck-form-input-container[_ngcontent-%COMP%] .mck-radio-select[_ngcontent-%COMP%] {\n margin-bottom: 1rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-form-input-container[_ngcontent-%COMP%] .mck-radio-select[_ngcontent-%COMP%] {\n margin-bottom: 1.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-form-input-container[_ngcontent-%COMP%] .mck-radio-select[_ngcontent-%COMP%] {\n margin-bottom: 1.5rem;\n }\n}\n.mck-form-input[_ngcontent-%COMP%] mat-chip.mat-standard-chip.mat-standard-chip[_ngcontent-%COMP%] {\n border-radius: 3px;\n min-height: 1.5rem;\n background-color: #333333;\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 0.75rem;\n line-height: 1.5rem;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input[_ngcontent-%COMP%] mat-chip.mat-standard-chip.mat-standard-chip[_ngcontent-%COMP%] {\n line-height: inherit;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input[_ngcontent-%COMP%] mat-chip.mat-standard-chip.mat-standard-chip[_ngcontent-%COMP%] {\n line-height: inherit;\n }\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox.mat-checkbox.mat-checkbox[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] {\n background-color: #D0D0D0;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n color: #B3B3B3;\n}\n.mck-borderless[_ngcontent-%COMP%] {\n border: none;\n}\n.mck-borderless[_ngcontent-%COMP%]:hover, .mck-borderless[_ngcontent-%COMP%]:focus, .mck-borderless[_ngcontent-%COMP%]:disabled {\n border: none;\n}\n.mck-select-panel[_ngcontent-%COMP%] {\n margin-top: 0 !important;\n border-radius: unset !important;\n margin-top: 35px !important;\n margin-left: 5px;\n}\n.mck-select-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] {\n padding-left: 0;\n padding-right: 0;\n}\n.mck-select-panel[_ngcontent-%COMP%] mat-option.mat-option-text[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-select-panel.mck-margin-top[_ngcontent-%COMP%] {\n margin-top: 1.5rem !important;\n}\n.mck-checkbox-panel.mat-autocomplete-panel.mat-autocomplete-panel[_ngcontent-%COMP%] {\n top: -10px;\n max-height: 278px;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option.mck-truncated[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] {\n padding-left: 0;\n padding-right: 0;\n line-height: 24px;\n height: unset;\n min-height: 36px;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n flex: 1;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n text-align: left;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option.mck-checkbox-group-header[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option.mck-checkbox-group-child[_ngcontent-%COMP%] {\n margin-left: 2rem;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] label.mat-checkbox-layout[_ngcontent-%COMP%] {\n width: 100%;\n padding-left: 16px;\n padding-right: 16px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] label.mat-checkbox-layout[_ngcontent-%COMP%] {\n padding-left: 2px;\n padding-right: 2px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] label.mat-checkbox-layout[_ngcontent-%COMP%] {\n padding-left: 2px;\n padding-right: 2px;\n }\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] div.mat-checkbox-frame.mat-checkbox-frame[_ngcontent-%COMP%] {\n border: 1px solid #B3B3B3;\n border-radius: 0;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox.mat-checkbox-checked[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background[_ngcontent-%COMP%] {\n background-color: #D0D0D0;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n color: #B3B3B3;\n text-align: left;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] .mat-checkbox-inner-container[_ngcontent-%COMP%] {\n width: 1.25rem;\n height: 1.25rem;\n}\n.mck-select-option-selected[_ngcontent-%COMP%] {\n font-weight: 500;\n font-family: \"McKinsey Sans\";\n color: black;\n background-color: #E6E6E6;\n}\n.mck-select-option-selected[_ngcontent-%COMP%] .mck-spacer-content[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n margin-right: 0.75rem;\n}\n.mck-select-option-unselected[_ngcontent-%COMP%] {\n font-weight: 400;\n font-family: \"McKinsey Sans\";\n}\n.mck-select-option-unselected.mck-ignore-disabled[_ngcontent-%COMP%] {\n color: black;\n}\n.mck-select-option-unselected[_ngcontent-%COMP%] .mck-spacer-content[_ngcontent-%COMP%] {\n visibility: hidden;\n margin-right: 0.75rem;\n}\n.mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n height: 40px;\n border-radius: 0;\n border: none;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n }\n}\n.mck-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: normal;\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n }\n}\n.mck-button.mat-button.mat-button.mck-short[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button[_ngcontent-%COMP%] {\n height: 32px;\n min-width: 83px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-short[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-short[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%] {\n height: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%] {\n height: 40px;\n }\n}\n.mck-button.mat-button.mat-button.mck-square[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-square[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n min-width: 32px;\n padding: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-square[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-square[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-square[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-square[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n }\n}\n.mck-primary-button.mat-button.mat-button[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n}\n.mck-primary-button.mat-button.mat-button[disabled][_ngcontent-%COMP%], .mck-primary-button.mat-button.mat-button.disabled[_ngcontent-%COMP%] {\n background-color: #D0D0D0;\n color: #757575;\n cursor: not-allowed;\n}\n.mck-primary-button.mat-button.mat-button[disabled][_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-primary-button.mat-button.mat-button.disabled[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: #757575;\n}\n.mck-primary-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: white;\n}\n.mck-secondary-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] {\n border: 1px solid #D0D0D0;\n border-radius: 0;\n border: 1px solid #2251FF;\n color: #2251FF;\n}\n.mck-secondary-button.mat-stroked-button.mat-stroked-button[disabled][_ngcontent-%COMP%], .mck-secondary-button.mat-stroked-button.mat-stroked-button.disabled[_ngcontent-%COMP%] {\n border: 1px solid #D0D0D0;\n color: #333333;\n cursor: not-allowed;\n}\n.mck-secondary-button.mat-button.mat-button[_ngcontent-%COMP%] {\n background-color: white;\n}\n.mck-secondary-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: #333333;\n}\n.mck-warning-button.mat-button.mat-button[_ngcontent-%COMP%] {\n background-color: #ffd048;\n}\n.mck-warning-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: black;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] {\n border: 2px solid #B3B3B3;\n border-radius: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding-left: 1.75rem;\n padding-right: 1.75rem;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%] {\n height: 32px;\n min-width: 83px;\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-primary[_ngcontent-%COMP%] {\n border-width: 1px;\n border-color: #1F40E6;\n color: #1F40E6;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-thin-border-light[_ngcontent-%COMP%] {\n border-color: #D0D0D0;\n border-width: 1px;\n}\n.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: normal;\n color: #1F40E6;\n}\n.mck-toggle-button[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n border: 1px solid #B3B3B3;\n border-color: #D0D0D0;\n min-width: 59px;\n background-color: white;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-toggle-button[_ngcontent-%COMP%] {\n min-width: 132px;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-toggle-button[_ngcontent-%COMP%] {\n min-width: 132px;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n }\n}\n.mck-toggle-button-selected[_ngcontent-%COMP%] {\n color: #1F40E6;\n}\n.mck-date-picker[_ngcontent-%COMP%] {\n width: 100% !important;\n height: 100% !important;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-date-picker[_ngcontent-%COMP%] {\n max-width: 23rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-date-picker[_ngcontent-%COMP%] {\n max-width: 23rem;\n }\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n color: #051C2C;\n margin-top: 1.25rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] {\n width: 2.375rem;\n height: 2rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] > .icon.icon[_ngcontent-%COMP%] {\n width: 1rem;\n height: 1rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] > .next.next[_ngcontent-%COMP%] {\n background-image: url('arrow-forward.svg');\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] > .previous.previous[_ngcontent-%COMP%] {\n background-image: url('arrow-backward.svg');\n}\n.mck-date-picker[_ngcontent-%COMP%] > .month[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .week[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n color: #767676;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date[_ngcontent-%COMP%] > .dot[_ngcontent-%COMP%] {\n display: none;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date.disabled[_ngcontent-%COMP%] {\n background-color: transparent;\n border-radius: 0;\n color: #767676;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date.active[_ngcontent-%COMP%] {\n border-radius: 0;\n background-color: #1F40E6;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date.non-month[_ngcontent-%COMP%] {\n color: #767676;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-spacer-content-expand-mobile[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-spacer-content-expand-mobile[_ngcontent-%COMP%] {\n display: none;\n }\n}\n.mck-spacer-content-divider[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n border-radius: 0;\n border-top: 1px solid #E6E6E6;\n border-bottom: 1px solid #E6E6E6;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] {\n background-color: #F0F0F0;\n border-bottom: none;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n background-image: url('chevron-close.svg');\n background-size: contain;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-close-large.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-close-large.svg');\n background-size: contain;\n }\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] {\n padding-left: 0;\n padding-right: 0;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 0.75rem;\n line-height: 1.4;\n padding-left: 1rem;\n padding-right: 1rem;\n text-align: left;\n color: black;\n font-weight: normal;\n padding-bottom: 0.5rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-size: 1rem;\n line-height: 1.6;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-size: 1rem;\n line-height: 1.6;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n }\n}\n.mck-expansion-panel[_ngcontent-%COMP%] mat-expansion-panel-header[_ngcontent-%COMP%] {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.mck-expansion-panel[_ngcontent-%COMP%] mat-expansion-panel-header[_ngcontent-%COMP%] > span.mat-content[_ngcontent-%COMP%] {\n align-items: center;\n}\n.mck-expansion-panel[_ngcontent-%COMP%] mat-panel-title[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n color: black;\n font-weight: normal;\n}\n.mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n background-image: url('chevron-open.svg');\n background-size: contain;\n transform: rotate(0deg);\n transition: transform 0.5s ease;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-open-large.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-open-large.svg');\n background-size: contain;\n }\n}\n.mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon.expanded[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n}\n.mck-icon-fill-open[_ngcontent-%COMP%] {\n fill: #1F40E6;\n}\n.mck-icon-fill-close[_ngcontent-%COMP%] {\n fill: #767676;\n}\n.mck-icon-fill-black[_ngcontent-%COMP%] {\n fill: black;\n stroke: black;\n}\n.mck-icon-fill-white[_ngcontent-%COMP%] {\n fill: white;\n stroke: white;\n}\n.mck-icon-fill-gray[_ngcontent-%COMP%] {\n fill: #333333;\n stroke: #333333;\n}\n.mck-min[_ngcontent-%COMP%] {\n max-width: 581px !important;\n width: 80vw;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-min[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-min[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-min[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-min[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-noexpand[_ngcontent-%COMP%] {\n max-width: 581px !important;\n width: 80vw !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-noexpand[_ngcontent-%COMP%] {\n width: calc(100vw - 32px) !important;\n max-height: 100vh;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-noexpand[_ngcontent-%COMP%] {\n width: calc(100vw - 32px) !important;\n max-height: 100vh;\n }\n}\n.mck-modal[_ngcontent-%COMP%] {\n max-width: 800px !important;\n width: 80vw;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-mini[_ngcontent-%COMP%] {\n max-width: 580px !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-mini[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-mini[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-mini[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-mini[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-survey[_ngcontent-%COMP%] {\n max-width: 691px !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-survey[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-survey[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-wide[_ngcontent-%COMP%] {\n max-width: 1024px !important;\n width: 100vw;\n height: 95vh;\n max-height: 100vh;\n}\n.mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] {\n background-color: #F8F9FA;\n padding: 0 !important;\n overflow: hidden;\n}\n.mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] {\n position: relative;\n right: 32px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-wide-manage-booking[_ngcontent-%COMP%] {\n max-width: 1024px !important;\n width: 100vw;\n max-height: 95vh;\n}\n.mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] {\n background-color: #F8F9FA;\n padding: 0 !important;\n overflow: hidden;\n}\n.mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] {\n position: relative;\n right: 32px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-alert[_ngcontent-%COMP%] {\n max-width: 100vw !important;\n width: 100vw;\n margin-left: 1rem;\n margin-right: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-alert[_ngcontent-%COMP%] {\n max-width: 100vw !important;\n width: 100vw;\n margin-left: 1rem;\n margin-right: 1rem;\n }\n}\n.mck-alert-backdrop[_ngcontent-%COMP%] {\n background: rgba(5, 28, 44, 0.85);\n}\n.mck-slide-toggle.mat-slide-toggle.mat-checked[_ngcontent-%COMP%]:not(.mat-disabled) .mat-slide-toggle-bar.mat-slide-toggle-bar[_ngcontent-%COMP%] {\n background-color: #2251FF;\n}\n.mck-slide-toggle.mat-slide-toggle.mat-checked[_ngcontent-%COMP%]:not(.mat-disabled) .mat-slide-toggle-thumb.mat-slide-toggle-thumb[_ngcontent-%COMP%] {\n background-color: white;\n}\n.mck-slide-toggle.mat-slide-toggle[_ngcontent-%COMP%] {\n height: auto;\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-content.mat-slide-toggle-content[_ngcontent-%COMP%] {\n flex: 1;\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n white-space: normal;\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-thumb.mat-slide-toggle-thumb[_ngcontent-%COMP%] {\n width: 14px;\n height: 14px;\n transform: translate(50%, 50%);\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-thumb-container.mat-slide-toggle-thumb-container[_ngcontent-%COMP%] {\n top: -4px;\n left: -4px;\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-bar.mat-slide-toggle-bar[_ngcontent-%COMP%] {\n height: 20px;\n background-color: #D0D0D0;\n border-radius: 20px;\n}\n.mck-skeleton[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n}\n.mck-skeleton-checkbox[_ngcontent-%COMP%] {\n float: left;\n}\n.mck-skeleton-checkbox[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 20px;\n height: 20px;\n margin-bottom: 0;\n}\n.mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 100vw;\n margin-bottom: 0;\n max-width: 215px;\n}\n.mck-skeleton-image[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 81px;\n height: 82px;\n margin-bottom: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-skeleton-image[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 219px;\n height: 119px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-skeleton-image[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 219px;\n height: 119px;\n }\n}\n.mck-skeleton-status[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 117px;\n height: 78px;\n margin-top: 10px;\n margin-bottom: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-skeleton-status[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 117px;\n height: 78px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-skeleton-status[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 117px;\n height: 78px;\n }\n}\n.mck-skeleton-line-1[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 23px;\n max-width: 176px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-1[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 219px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-1[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 219px;\n }\n}\n.mck-skeleton-line-2[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 165px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-2[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-2[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n.mck-skeleton-line-3[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 147px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-3[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-3[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n.mck-skeleton-line-30p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 30%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-30p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 30%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-30p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 30%;\n }\n}\n.mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-45p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 45%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-45p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 45%;\n margin-right: 45%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-45p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 45%;\n margin-right: 45%;\n }\n}\n.mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-50p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 50%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-50p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 50%;\n margin-right: 45%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-50p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 50%;\n margin-right: 45%;\n }\n}\n.mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-60p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 60%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-60p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 60%;\n margin-right: 35%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-60p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 60%;\n margin-right: 35%;\n }\n}\n.mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-70p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 70%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-70p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 70%;\n margin-right: 25%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-70p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 70%;\n margin-right: 25%;\n }\n}\n.mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-80p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 80%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-80p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 80%;\n margin-right: 15%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-80p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 80%;\n margin-right: 15%;\n }\n}\n.mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-90p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 90%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-90p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 90%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-90p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 90%;\n }\n}\n.mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-load-more[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n width: calc(100vw - (2 * 1rem));\n height: 40px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-load-more[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 320px;\n height: 50px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-load-more[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 320px;\n height: 50px;\n }\n}\n.mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n width: calc(100vw - (2 * 1rem));\n height: 40px;\n max-width: none;\n width: 100%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: none;\n width: 100%;\n height: 50px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: none;\n width: 100%;\n height: 50px;\n }\n}\n.mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 124px;\n margin-bottom: 4px;\n}\n.mck-heading-5[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 1.5rem;\n line-height: 1.333;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-heading-5[_ngcontent-%COMP%] {\n font-size: 1.75rem;\n line-height: 1.142;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-heading-5[_ngcontent-%COMP%] {\n font-size: 1.75rem;\n line-height: 1.142;\n }\n}\nngx-mat-select-search[_ngcontent-%COMP%] .mat-select-search-no-entries-found[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\nngx-mat-select-search[_ngcontent-%COMP%] .mat-select-search-input[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\nngx-mat-select-search[_ngcontent-%COMP%] button.mat-button.mat-select-search-clear[_ngcontent-%COMP%] {\n background-color: transparent;\n border: none;\n color: black;\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 16px;\n height: 18px;\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n height: 1.5rem;\n border: 4px solid rgba(0, 0, 0, 0);\n background-clip: padding-box;\n border-radius: 8px;\n background-color: #757575;\n -webkit-box-shadow: inset -1px -1px 0px rgba(0, 0, 0, 0.05), inset 1px 1px 0px rgba(0, 0, 0, 0.05);\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar-button {\n width: 0;\n height: 0;\n display: none;\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar-corner {\n background-color: transparent;\n}\nheader[_ngcontent-%COMP%] {\n z-index: 2;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mb-block[_ngcontent-%COMP%] {\n display: block;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mb-block[_ngcontent-%COMP%] {\n display: block;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mb-bottom[_ngcontent-%COMP%] {\n padding-bottom: 110px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mb-bottom[_ngcontent-%COMP%] {\n padding-bottom: 110px;\n }\n}\n.map-filters-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n top: 5px;\n}\n.map-filters-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] {\n height: 48px;\n background-color: white;\n}\n.map-filters-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n padding-top: 0.5rem !important;\n}\n.office-level-row[_ngcontent-%COMP%] .mat-select-placeholder[_ngcontent-%COMP%] {\n color: #333333;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .office-level-row[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .office-level-row[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 45px !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .office-level-row[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .office-level-row[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 45px !important;\n }\n}\n.office-level-row[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n display: block;\n top: 0 !important;\n width: 44px !important;\n right: -11px !important;\n background: transparent !important;\n border-width: 0 0 0 1px;\n border-color: #c6c6c6;\n border-style: solid;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .office-level-row[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 1px) !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .office-level-row[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 1px) !important;\n }\n}\n.office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n background: #F0F0F0 !important;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 2px) !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 2px) !important;\n }\n}\n.office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-chevron[_ngcontent-%COMP%] {\n opacity: 0.5;\n margin-left: 10px;\n}\n.office-level-row[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .office-level-row[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .map-controls[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .map-controls[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n display: flex !important;\n width: 100% !important;\n justify-content: space-between !important;\n}\n.booking-form-container[_ngcontent-%COMP%] {\n overflow-y: auto;\n max-height: calc(100vh - 345px);\n}\n.booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-label[_ngcontent-%COMP%], .booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] .mat-radio-label-content[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\" !important;\n color: #333333;\n}\n.booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::-moz-placeholder {\n font-family: \"McKinsey Sans\";\n color: #B3B3B3;\n}\n.booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:-ms-input-placeholder {\n font-family: \"McKinsey Sans\";\n color: #B3B3B3;\n}\n.booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%], .booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder {\n font-family: \"McKinsey Sans\";\n color: #B3B3B3;\n}\n.button-wrapper[_ngcontent-%COMP%] {\n flex-basis: 100%;\n justify-content: end;\n background-color: white;\n z-index: 2;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .button-wrapper[_ngcontent-%COMP%] {\n bottom: -0.5rem;\n position: sticky;\n padding-top: 1.75rem;\n padding-bottom: 1.75rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .button-wrapper[_ngcontent-%COMP%] {\n bottom: -0.5rem;\n position: sticky;\n padding-top: 1.75rem;\n padding-bottom: 1.75rem;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .button-wrapper.has-fixed[_ngcontent-%COMP%] {\n z-index: 2;\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .button-wrapper.has-fixed[_ngcontent-%COMP%] {\n z-index: 2;\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n }\n}\n.button-wrapper-spacer[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .button-wrapper[_ngcontent-%COMP%] > .button-row[_ngcontent-%COMP%] {\n padding: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .button-wrapper[_ngcontent-%COMP%] > .button-row[_ngcontent-%COMP%] {\n padding: 1rem;\n }\n}\n.mck-modal-primary-button[_ngcontent-%COMP%] {\n flex: 1;\n width: 100%;\n margin: 0 0.75rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-modal-primary-button[_ngcontent-%COMP%] {\n max-width: 320px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-modal-primary-button[_ngcontent-%COMP%] {\n max-width: 320px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-primary-button[_ngcontent-%COMP%] {\n max-width: 100% !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-primary-button[_ngcontent-%COMP%] {\n max-width: 100% !important;\n }\n}\n.mck-modal-secondary-button[_ngcontent-%COMP%] {\n flex: 1;\n width: 100%;\n margin: 0 0.75rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-modal-secondary-button[_ngcontent-%COMP%] {\n max-width: 320px;\n margin-right: 0 0.75rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-modal-secondary-button[_ngcontent-%COMP%] {\n max-width: 320px;\n margin-right: 0 0.75rem;\n }\n}\n.small-buttons[_ngcontent-%COMP%] .mck-modal-primary-button[_ngcontent-%COMP%] {\n flex: 1;\n width: 100%;\n margin: 0 0.75rem;\n max-width: 134px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .small-buttons[_ngcontent-%COMP%] .mck-modal-primary-button[_ngcontent-%COMP%] {\n max-width: 100% !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .small-buttons[_ngcontent-%COMP%] .mck-modal-primary-button[_ngcontent-%COMP%] {\n max-width: 100% !important;\n }\n}\n.small-buttons[_ngcontent-%COMP%] .mck-modal-secondary-button[_ngcontent-%COMP%] {\n flex: 1;\n width: 100%;\n margin: 0 0.75rem;\n max-width: 134px;\n margin-right: 0 0.75rem;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .small-buttons[_ngcontent-%COMP%] .mck-modal-secondary-button[_ngcontent-%COMP%] {\n max-width: 100% !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .small-buttons[_ngcontent-%COMP%] .mck-modal-secondary-button[_ngcontent-%COMP%] {\n max-width: 100% !important;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJsaWJzL3VpL3NyYy9saWIvbW9kYWwtYnV0dG9uLXJvdy9tb2RhbC1idXR0b24tcm93LmNvbXBvbmVudC5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy91aS9zcmMvbGliL21peGlucy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2Uvbm9kZV9tb2R1bGVzL0Bhbmd1bGFyL21hdGVyaWFsL190aGVtaW5nLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvc3R5bGVzLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvbW9kYWwtYnV0dG9uLXJvdy9tb2RhbC1idXR0b24tcm93LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTJDQTs7RUFBQTtBQXFDQTs7c0JBQUE7QUFhQTtFQUNJLGdCQTlGTTtFQStGTix1QkE3RmM7QUNPbEI7QUR5RkE7O3NCQUFBO0FFa09BOzs7RUFBQTtBRnpSQTs7RUFBQTtBQXFDQTs7c0JBQUE7QUFhQTtFQUNJLGdCQTlGTTtFQStGTix1QkE3RmM7QUN5QmxCO0FEdUVBOztzQkFBQTtBR216Q0Esa0NBQUE7QUF1aURBLDJDQUFBO0FBd0NBLHFCQUFBO0FDOTlGUTtFQUVJLGFBQUE7QUg2Qlo7QUd4QlE7RUFDSSxXQUFBO0VBQ0EsWUFBQTtBSDBCWjtBR3hCWTtFQUNJLFdBQUE7QUgwQmhCO0FHdkJZO0VBQ0ksWUFBQTtBSHlCaEI7QUdyQlE7RUFDSSww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QSx5QkZ6VmM7QUNrcUNsQjtBRzVIUTtFQUNJLFdBQUE7QUg4SFo7QUc3SFk7RUYvc0JSLHlCRnpWYztFSTBpQ0YsV0FBQTtFQUNBLFlBQUE7RUFDQSxnQkFBQTtBSCtIaEI7QUczSFE7RUZ2dEJKLHlCRnpWYztFSWtqQ04sWUFBQTtFQUNBLGdCQUFBO0VBQ0EsZ0JBQUE7QUg2SFo7QUcxSFE7RUY5dEJKLHlCRnpWYztFRTZWZCxXQUFBO0VBQ0EsWUFBQTtFRTR0QlEsZ0JBQUE7QUg2SFo7QUMzckNZO0VFMmpDSjtJRnR0QkEsWUFBQTtJQUNBLGFBQUE7RUQwMUJOO0FBQ0Y7QUNqc0NZO0VFMmpDSjtJRnR0QkEsWUFBQTtJQUNBLGFBQUE7RURnMkJOO0FBQ0Y7QUd0SVE7RUZwdUJKLHlCRnpWYztFRXVXZCxZQUFBO0VBQ0EsWUFBQTtFRXd0QlEsZ0JBQUE7RUFDQSxnQkFBQTtBSHlJWjtBQzlzQ1k7RUVpa0NKO0lGbHRCQSxZQUFBO0lBQ0EsWUFBQTtFRG0yQk47QUFDRjtBQ3B0Q1k7RUVpa0NKO0lGbHRCQSxZQUFBO0lBQ0EsWUFBQTtFRHkyQk47QUFDRjtBR2xKUTtFRjN1QkoseUJGelZjO0VJc2tDTixZQUFBO0VBQ0EsZ0JBQUE7QUhvSlo7QUMvdENZO0VFd2tDSjtJQU1RLGdCQUFBO0VIcUpkO0FBQ0Y7QUNwdUNZO0VFd2tDSjtJQU1RLGdCQUFBO0VIMEpkO0FBQ0Y7QUd2SlE7RUZydkJKLHlCRnpWYztFSWdsQ04sWUFBQTtFQUNBLGdCQUFBO0FIeUpaO0FDOXVDWTtFRWtsQ0o7SUFNUSxnQkFBQTtFSDBKZDtBQUNGO0FDbnZDWTtFRWtsQ0o7SUFNUSxnQkFBQTtFSCtKZDtBQUNGO0FHNUpRO0VGL3ZCSix5QkZ6VmM7RUkwbENOLFlBQUE7RUFDQSxnQkFBQTtBSDhKWjtBQzd2Q1k7RUU0bENKO0lBTVEsZ0JBQUE7RUgrSmQ7QUFDRjtBQ2x3Q1k7RUU0bENKO0lBTVEsZ0JBQUE7RUhvS2Q7QUFDRjtBR2hLWTtFRjF3QlIseUJGelZjO0VJcW1DRixZQUFBO0VBQ0EsY0FBQTtBSGtLaEI7QUM1d0NZO0VFdW1DQTtJQUtRLGNBQUE7RUhvS2xCO0FBQ0Y7QUNqeENZO0VFdW1DQTtJQUtRLGNBQUE7RUh5S2xCO0FBQ0Y7QUd0S2dCO0VBQ0ksWUFBQTtFQUNBLGtCQUFBO0FId0twQjtBR2xLWTtFRjN4QlIseUJGelZjO0VJc25DRixZQUFBO0VBQ0EsY0FBQTtBSG9LaEI7QUMveENZO0VFd25DQTtJQUtRLGNBQUE7SUFDQSxpQkFBQTtFSHNLbEI7QUFDRjtBQ3J5Q1k7RUV3bkNBO0lBS1EsY0FBQTtJQUNBLGlCQUFBO0VINEtsQjtBQUNGO0FHektnQjtFQUNJLFlBQUE7RUFDQSxrQkFBQTtBSDJLcEI7QUdyS1k7RUY3eUJSLHlCRnpWYztFSXdvQ0YsWUFBQTtFQUNBLGNBQUE7QUh1S2hCO0FDcHpDWTtFRTBvQ0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUh5S2xCO0FBQ0Y7QUMxekNZO0VFMG9DQTtJQUtRLGNBQUE7SUFDQSxpQkFBQTtFSCtLbEI7QUFDRjtBRzVLZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUg4S3BCO0FHMUtnQjtFQUNJLFlBQUE7RUFDQSxrQkFBQTtBSDRLcEI7QUd0S1k7RUZyMEJSLHlCRnpWYztFSWdxQ0YsWUFBQTtFQUNBLGNBQUE7QUh3S2hCO0FDNzBDWTtFRWtxQ0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUgwS2xCO0FBQ0Y7QUNuMUNZO0VFa3FDQTtJQUtRLGNBQUE7SUFDQSxpQkFBQTtFSGdMbEI7QUFDRjtBRzdLZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUgrS3BCO0FHM0tnQjtFQUNJLFlBQUE7RUFDQSxrQkFBQTtBSDZLcEI7QUd2S1k7RUY3MUJSLHlCRnpWYztFSXdyQ0YsWUFBQTtFQUNBLGNBQUE7QUh5S2hCO0FDdDJDWTtFRTByQ0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUgyS2xCO0FBQ0Y7QUM1MkNZO0VFMHJDQTtJQUtRLGNBQUE7SUFDQSxpQkFBQTtFSGlMbEI7QUFDRjtBRzlLZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUhnTHBCO0FHNUtnQjtFQUNJLFlBQUE7RUFDQSxrQkFBQTtBSDhLcEI7QUd4S1k7RUZyM0JSLHlCRnpWYztFSWd0Q0YsWUFBQTtFQUNBLGNBQUE7QUgwS2hCO0FDLzNDWTtFRWt0Q0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUg0S2xCO0FBQ0Y7QUNyNENZO0VFa3RDQTtJQUtRLGNBQUE7SUFDQSxpQkFBQTtFSGtMbEI7QUFDRjtBRy9LZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUhpTHBCO0FHN0tnQjtFQUNJLFlBQUE7RUFDQSxrQkFBQTtBSCtLcEI7QUd6S1k7RUY3NEJSLHlCRnpWYztFSXd1Q0YsWUFBQTtFQUNBLGNBQUE7QUgyS2hCO0FDeDVDWTtFRTB1Q0E7SUFLUSxjQUFBO0VINktsQjtBQUNGO0FDNzVDWTtFRTB1Q0E7SUFLUSxjQUFBO0VIa0xsQjtBQUNGO0FHL0tnQjtFQUNJLFlBQUE7RUFDQSxrQkFBQTtBSGlMcEI7QUc1S1E7RUY3NUJKLHlCRnpWYztFSXd2Q04sa0JKOXNDTTtFSStzQ04scUJKL3NDTTtFSWd0Q04sK0JBQUE7RUFDQSxZQUFBO0FIOEtaO0FDNzZDWTtFRTB2Q0o7SUFRUSxnQkFBQTtJQUNBLFlBQUE7RUgrS2Q7QUFDRjtBQ243Q1k7RUUwdkNKO0lBUVEsZ0JBQUE7SUFDQSxZQUFBO0VIcUxkO0FBQ0Y7QUdqTFk7RUYzNkJSLHlCRnpWYztFSXN3Q0Ysa0JKNXRDRTtFSTZ0Q0YscUJKN3RDRTtFSTh0Q0YsK0JBQUE7RUFDQSxZQUFBO0VBQ0EsZUFBQTtFQUNBLFdBQUE7QUhtTGhCO0FDbDhDWTtFRXd3Q0E7SUFTUSxlQUFBO0lBQ0EsV0FBQTtJQUNBLFlBQUE7RUhxTGxCO0FBQ0Y7QUN6OENZO0VFd3dDQTtJQVNRLGVBQUE7SUFDQSxXQUFBO0lBQ0EsWUFBQTtFSDRMbEI7QUFDRjtBRzFMb0I7RUFDSSxhQUFBO0VBQ0Esa0JBQUE7QUg0THhCO0FHaExJO0VGdnNDQSw0QkFaaUI7RUFhakIsa0JBQUE7RUFDQSxrQkFBQTtFQW1IQSxpQkFBQTtFQUNBLGtCQUFBO0FEeXdDSjtBQzU5Q1k7RUVveUNSO0lGOWtDSSxrQkFBQTtJQUNBLGtCQUFBO0VEMHdDTjtBQUNGO0FDbCtDWTtFRW95Q1I7SUY5a0NJLGtCQUFBO0lBQ0Esa0JBQUE7RURneENOO0FBQ0Y7QUc5TEk7RUY1aUNBLGtCQUFBO0VBQ0Esa0JBQUE7RUFDQSw4REE5S2M7RUErS2QsZUFBQTtFQUNBLG1CQUFBO0VFMGlDSSxnQkFBQTtBSHFNUjtBR2xNSTtFRmpqQ0Esa0JBQUE7RUFDQSxrQkFBQTtFQUNBLDhEQTlLYztFQStLZCxlQUFBO0VBQ0EsbUJBQUE7RUUraUNJLGdCQUFBO0FId01SO0FHck1JO0VBQ0ksNkJBQUE7RUFDQSxZQUFBO0VBQ0EsWUFBQTtBSHVNUjtBR25NQTtFQUNJLFdBQUE7RUFDQSxZQUFBO0FIc01KO0FHcE1BO0VBQ0ksY0p0d0NhO0VJdXdDYixrQ0FBQTtFQUNBLDRCQUFBO0VBQ0Esa0JBQUE7RUFDQSx5Qkp4ekNjO0VJeXpDZCxrR0FBQTtBSHVNSjtBR3JNQTtFQUNJLFFBQUE7RUFDQSxTQUFBO0VBQ0EsYUFBQTtBSHdNSjtBR3RNQTtFQUNJLDZCQUFBO0FIeU1KO0FHdk1BO0VBQ0ksVUFBQTtBSDBNSjtBQ3RoRFk7RUU4MENaO0lBRVEsY0FBQTtFSDJNTjtBQUNGO0FDNWhEWTtFRTgwQ1o7SUFFUSxjQUFBO0VIZ05OO0FBQ0Y7QUNqaURZO0VFbTFDWjtJQUVRLHFCQUFBO0VIaU5OO0FBQ0Y7QUN2aURZO0VFbTFDWjtJQUVRLHFCQUFBO0VIc05OO0FBQ0Y7QUdsTkk7RUFDSSxRQUFBO0FIcU5SO0FHbk5JO0VBQ0ksWUFBQTtFQUNBLHVCQUFBO0FIcU5SO0FHbE5JO0VBQ0ksOEJBQUE7QUhvTlI7QUc5TUk7RUFDSSxjQUFBO0VBQ0EsNEJGOXhDYTtBRCsrQ3JCO0FDNWpEWTtFRTgyQ1I7SUFFUSx1QkFBQTtFSGdOVjtBQUNGO0FDamtEWTtFRTgyQ1I7SUFFUSx1QkFBQTtFSHFOVjtBQUNGO0FHbE5JO0VBQ0ksY0FBQTtFQUNBLGlCQUFBO0VBQ0Esc0JBQUE7RUFDQSx1QkFBQTtFQUNBLGtDQUFBO0VBQ0EsdUJBQUE7RUFDQSxxQkFBQTtFQUNBLG1CQUFBO0FIb05SO0FDcGxEWTtFRXczQ1I7SUFVUSxtQ0FBQTtFSHNOVjtBQUNGO0FDemxEWTtFRXczQ1I7SUFVUSxtQ0FBQTtFSDJOVjtBQUNGO0FHdk5RO0VBQ0ksOEJBQUE7QUh5Tlo7QUNqbURZO0VFdTRDSjtJQUdRLG1DQUFBO0VIMk5kO0FBQ0Y7QUN0bURZO0VFdTRDSjtJQUdRLG1DQUFBO0VIZ09kO0FBQ0Y7QUc5TlE7RUFDSSxZQUFBO0VBQ0EsaUJBQUE7QUhnT1o7QUcxTkk7RUFDSSx3QkFBQTtFQUNBLHNCQUFBO0VBQ0EseUNBQUE7QUg2TlI7QUd6TkE7RUFDSSxnQkFBQTtFQUNBLCtCQUFBO0FINE5KO0FHbE5JO0VBQ0ksdUNBQUE7RUFDQSxjQUFBO0FIcU5SO0FHbE5JO0VBQ0ksNEJGNzFDYTtFRTgxQ2IsY0FBQTtBSG9OUjtBR3ROSTtFQUNJLDRCRjcxQ2E7RUU4MUNiLGNBQUE7QUhvTlI7QUd0Tkk7RUFDSSw0QkY3MUNhO0VFODFDYixjQUFBO0FIb05SO0FJdG9EQTtFQUVJLGdCQUFBO0VBQ0Esb0JBQUE7RUFDQSx1QkFBQTtFQUNBLFVBQUE7QUp3b0RKO0FDMW9EWTtFR0haO0lBT1EsZUFBQTtJQUNBLGdCQUFBO0lBQ0Esb0JMdURlO0lLdERmLHVCTHNEZTtFQ29sRHJCO0FBQ0Y7QUNscERZO0VHSFo7SUFPUSxlQUFBO0lBQ0EsZ0JBQUE7SUFDQSxvQkx1RGU7SUt0RGYsdUJMc0RlO0VDNGxEckI7QUFDRjtBQ3RwRFk7RUdNUjtJQUVRLFVBQUE7SUFDQSxlQUFBO0lBQ0EsU0FBQTtJQUNBLE9BQUE7SUFDQSxRQUFBO0VKa3BEVjtBQUNGO0FDL3BEWTtFR01SO0lBRVEsVUFBQTtJQUNBLGVBQUE7SUFDQSxTQUFBO0lBQ0EsT0FBQTtJQUNBLFFBQUE7RUoycERWO0FBQ0Y7QUl4cERJO0VBQ0kseUJMakJVO0FDMnFEbEI7QUMzcURZO0VHb0JSO0lBR1EsYUx5Qkk7RUMrbkRkO0FBQ0Y7QUNockRZO0VHb0JSO0lBR1EsYUx5Qkk7RUNvb0RkO0FBQ0Y7QUl6cERBO0VBQ0ksT0FBQTtFQUNBLFdBQUE7RUFDQSxpQkFBQTtBSjRwREo7QUMvckRZO0VHZ0NaO0lBS1EsZ0JBQUE7RUo4cEROO0FBQ0Y7QUNwc0RZO0VHZ0NaO0lBS1EsZ0JBQUE7RUptcUROO0FBQ0Y7QUNyc0RZO0VHNEJaO0lBU1EsMEJBQUE7RUpvcUROO0FBQ0Y7QUMxc0RZO0VHNEJaO0lBU1EsMEJBQUE7RUp5cUROO0FBQ0Y7QUl0cURBO0VBQ0ksT0FBQTtFQUNBLFdBQUE7RUFDQSxpQkFBQTtBSnlxREo7QUN6dERZO0VHNkNaO0lBS1EsZ0JBQUE7SUFDQSx1QkFBQTtFSjJxRE47QUFDRjtBQy90RFk7RUc2Q1o7SUFLUSxnQkFBQTtJQUNBLHVCQUFBO0VKaXJETjtBQUNGO0FJNXFESTtFQUNJLE9BQUE7RUFDQSxXQUFBO0VBQ0EsaUJBQUE7RUFDQSxnQkFBQTtBSitxRFI7QUN4dURZO0VHcURSO0lBT1EsMEJBQUE7RUpnckRWO0FBQ0Y7QUM3dURZO0VHcURSO0lBT1EsMEJBQUE7RUpxckRWO0FBQ0Y7QUlsckRJO0VBQ0ksT0FBQTtFQUNBLFdBQUE7RUFDQSxpQkFBQTtFQUNBLGdCQUFBO0VBQ0EsdUJBQUE7QUpvckRSO0FDenZEWTtFR2dFUjtJQVFRLDBCQUFBO0VKcXJEVjtBQUNGO0FDOXZEWTtFR2dFUjtJQVFRLDBCQUFBO0VKMHJEVjtBQUNGIiwiZmlsZSI6ImxpYnMvdWkvc3JjL2xpYi9tb2RhbC1idXR0b24tcm93L21vZGFsLWJ1dHRvbi1yb3cuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIkcHJpbWFyeTogIzFGNDBFNjtcbiRmb3JtLWxhYmVsOiAjMDUxQzJDO1xuJHNlY29uZGFyeS1sYWJlbDogIzc2NzY3NjtcbiRib3JkZXI6ICNCM0IzQjM7XG4kYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDogI0QwRDBEMDtcbiRjaGlwLWNvbG9yOiAjMzMzMzMzO1xuJHBsYWNlaG9sZGVyLWNvbG9yOiAjN0Y3RjdGO1xuJGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4kcGFnZS1iYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuJHNlbGVjdGVkLW9wdGlvbjogI0U2RTZFNjtcbiRjb2xvci1icmFuZC15ZWxsb3c6ICNmZmQwNDg7XG4kbGlnaHQteWVsbG93OiAjZmZmM2NlO1xuJGNvYWNobWFyay10ZXh0OiAjNmY0ZDAwO1xuJGVycm9yLWNvbG9yOiAjRTEyRTQwO1xuJG5vLWZpbHRlcnMtY29sb3I6ICNCQ0JDQkM7XG4kcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I6ICNGNEY0RjQ7XG4kcHJpbWFyeS1oaWdobGlnaHQ6ICMyMjUxRkY7XG4kc2Nyb2xsYmFyLWNvbG9yOiAjNzU3NTc1O1xuXG4kYXZhaWxhYmxlLWNvbG9yOiAjNUQ5RDUyO1xuJGF2YWlsYWJsZS1ieS1yZXF1ZXN0LWNvbG9yOiAjRjVCNTNGO1xuJGluLXVzZS1jb2xvcjogI0Q0NDgzRTtcbiRub3QtYm9va2FibGUtY29sb3I6ICNDQ0NDQ0M7XG5cbiRtb2RhbC1ib2R5LWhlYWRpbmc6ICM0RDRENEQ7XG4kYWxlcnQtb3ZlcmxheS1iZzogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2FjaG1hcmstYmc6ICNFQkVCRjY7XG4kY29hY2htYXJrLWRhcmstdGV4dDogIzFCMUIxOTtcbiRlcnJvci10ZXh0OiAjZmZmO1xuXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuXG4vLyA0cHhcbiRzcGFjaW5nLXNtYWxsZXN0OiAwLjI1cmVtO1xuXG4vLyA4cHhcbiRzcGFjaW5nLXh4c21hbGw6IDAuNXJlbTtcblxuLy8gMTJweFxuJHNwYWNpbmcteHNtYWxsOiAwLjc1cmVtO1xuXG4vLyAxNnB4XG4kc3BhY2luZy1zbWFsbDogMXJlbTtcblxuLy8gMjBweFxuJHNwYWNpbmctc21hbGwtbWVkaXVtOiAxLjI1cmVtO1xuXG4vLyAyNHB4XG4kc3BhY2luZy1tZWRpdW06IDEuNXJlbTtcblxuLy8gMjhweFxuJHNwYWNpbmctbWVkaXVtLWxhcmdlOiAxLjc1cmVtO1xuXG4vLyAzMnB4XG4kc3BhY2luZy1sYXJnZTogMnJlbTtcblxuLy8gNDhweFxuJHNwYWNpbmcteGxhcmdlOiAzcmVtO1xuXG4vLyA2NHB4XG4kc3BhY2luZy14eGxhcmdlOiA0cmVtO1xuXG4vLyA5NnB4XG4kc3BhY2luZy1sYXJnZXN0OiA2cmVtO1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGRldmljZS1tb2JpbGUtc2l6ZTogNDUwcHg7XG4kZGV2aWNlLXRhYmxldC1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFwdG9wLXNpemU6IDEwMjRweDtcblxuJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemU6IDgwMHB4O1xuJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemU6IDEwNDhweDtcbiRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplOiAxMjgwcHg7XG5cblxuOmV4cG9ydCB7XG4gICAgcHJpbWFyeTogJHByaW1hcnk7XG4gICAgc2Vjb25kYXJ5TGFiZWw6ICRzZWNvbmRhcnktbGFiZWw7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4kaWNvbi1zbWFsbDogMTZweDtcbiRpY29uLW1lZGl1bTogMjRweDtcbiRpY29uLWxhcmdlOiAzMnB4O1xuJGljb24teGxhcmdlOiA0OHB4O1xuIiwiLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKiBUaGVtZSBmb3IgdGhlIHJpcHBsZSBlbGVtZW50cy4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF0ZXJpYWwvbm8tcHJlZml4ZXMgKi9cbi8qIHN0eWxlbGludC1lbmFibGUgKi9cbi5tY2staW5oZXJpdC1mb250IHtcbiAgZm9udDogaW5oZXJpdDtcbn1cbi5tY2stY29udGVudC1leHBhbmQsIC5tY2stY29udGVudC1wYWdlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbn1cbi5tY2stY29udGVudC1leHBhbmQtd2lkdGgge1xuICB3aWR0aDogMTAwJTtcbn1cbi5tY2stY29udGVudC1leHBhbmQtaGVpZ2h0IHtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLm1jay1jb250ZW50LXdpdGgtZm9vdGVyLWhlaWdodCB7XG4gIGhlaWdodDogY2FsYygxMDB2aCAtIDU4cHgpO1xufVxuLm1jay1jb250ZW50LWZ1bGwtaGVpZ2h0LCAubWNrLWNvbnRlbnQtcGFnZS1jb250YWluZXIge1xuICBoZWlnaHQ6IDEwMHZoO1xufVxuLm1jay1jb250ZW50LXBhZ2Uge1xuICBiYWNrZ3JvdW5kOiAjRjhGOUZBO1xufVxuLm1jay1jb250ZW50LWJvZHkge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWNvbnRlbnQtYm9keSB7XG4gICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWNvbnRlbnQtYm9keSB7XG4gICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIH1cbn1cbi5tY2stY29udGVudC1ncm91cCB7XG4gIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcbiAgd2lkdGg6IDEwMCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWNvbnRlbnQtZ3JvdXAge1xuICAgIG1heC13aWR0aDogNzU5cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWNvbnRlbnQtZ3JvdXAge1xuICAgIG1heC13aWR0aDogNzU5cHg7XG4gIH1cbn1cbi5tY2stc2hhZG93IHtcbiAgYm94LXNoYWRvdzogMHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtcbn1cbi5tY2stZmxleC0xIHtcbiAgZmxleDogMTtcbn1cbi5tY2stcm93LCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4LCAubWNrLXJvdy1mbG93IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbn1cbi5tY2stcm93Lm1jay1jZW50ZXItanVzdGlmeSwgLm1jay1jZW50ZXItanVzdGlmeS5tY2stcm93LWZsb3csIC5tY2stcm93Lm1jay1jZW50ZXIsIC5tY2stcm93Lm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1yb3cubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93Lm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXJvdy5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXJvdy5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1yb3cubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1yb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1jZW50ZXItc3VmZml4IC5tYXQtZm9ybS1maWVsZC1pbmZpeCwgLm1jay1jZW50ZXIubWNrLXJvdy1mbG93LCAubWNrLXJvdy1mbG93Lm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuLm1jay1yb3cubWNrLWNlbnRlci1hbGlnbiwgLm1jay1jZW50ZXItYWxpZ24ubWNrLXJvdy1mbG93LCAubWNrLXJvdy5tY2stY2VudGVyLCAubWNrLXJvdy5tY2stYnV0dG9uLm1hdC1idXR0b24sIC5tY2stcm93Lm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1yb3cubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1yb3cubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stcm93Lm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXJvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stY2VudGVyLm1jay1yb3ctZmxvdywgLm1jay1yb3ctZmxvdy5tY2stYnV0dG9uLm1hdC1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24ge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLm1jay1yb3cubWNrLXN0cmV0Y2gsIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWNrLXN0cmV0Y2gubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stc3RyZXRjaC5tY2stcm93LWZsb3cge1xuICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbn1cbi5tY2stcm93LWZsb3cge1xuICBmbGV4LXdyYXA6IHdyYXA7XG59XG4ubWNrLXJvdy5tY2stc2Nyb2xsLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1jay1zY3JvbGwubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stc2Nyb2xsLm1jay1yb3ctZmxvdyB7XG4gIG92ZXJmbG93LXg6IHNjcm9sbDtcbn1cbi5tY2stY29sdW1uLCAuYnV0dG9uLXdyYXBwZXIsIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuLm1jay1jb2x1bW4ubWNrLWNlbnRlciwgLm1jay1jZW50ZXIuYnV0dG9uLXdyYXBwZXIsIC5tY2stY29sdW1uLm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LWJ1dHRvbi5idXR0b24td3JhcHBlciwgLm1jay1jb2x1bW4ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbi5idXR0b24td3JhcHBlciwgLm1jay1jb2x1bW4ubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbi5idXR0b24td3JhcHBlciwgLm1jay1jb2x1bW4ubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24uYnV0dG9uLXdyYXBwZXIsIC5tY2stY29sdW1uLm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24uYnV0dG9uLXdyYXBwZXIsIC5tY2stY29sdW1uLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24uYnV0dG9uLXdyYXBwZXIsIC5tY2stY29sdW1uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLmJ1dHRvbi13cmFwcGVyLCAubWNrLWNvbHVtbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbi5idXR0b24td3JhcHBlciwgLm1jay1jb2x1bW4ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLmJ1dHRvbi13cmFwcGVyLCAubWNrLWNvbHVtbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbi5idXR0b24td3JhcHBlciwgLm1jay1jZW50ZXIubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWNrLWNlbnRlci5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1jZW50ZXIubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stY2VudGVyLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stY2VudGVyLm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1jZW50ZXIubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stY2VudGVyLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stY2VudGVyLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stY2VudGVyLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1jZW50ZXIubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1jay1jb2x1bW4ubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXguYnV0dG9uLXdyYXBwZXIsIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1jZW50ZXItc3VmZml4IC5tYXQtZm9ybS1maWVsZC1pbmZpeC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1jZW50ZXItc3VmZml4IC5tYXQtZm9ybS1maWVsZC1pbmZpeC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4ubWNrLWNvbHVtbi5tY2stc3BhY2UtYmV0d2VlbiwgLm1jay1zcGFjZS1iZXR3ZWVuLmJ1dHRvbi13cmFwcGVyLCAubWNrLXNwYWNlLWJldHdlZW4ubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWNrLXNwYWNlLWJldHdlZW4ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stc3BhY2UtYmV0d2Vlbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1zcGFjZS1iZXR3ZWVuLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stc3BhY2UtYmV0d2Vlbi5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1zcGFjZS1iZXR3ZWVuLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLXNwYWNlLWJldHdlZW4ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1zcGFjZS1iZXR3ZWVuLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stc3BhY2UtYmV0d2Vlbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stc3BhY2UtYmV0d2Vlbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuLm1jay1jb2x1bW4ubWNrLXN0cmV0Y2gsIC5tY2stc3RyZXRjaC5idXR0b24td3JhcHBlciwgLm1jay1zdHJldGNoLm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1zdHJldGNoLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXN0cmV0Y2gubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stc3RyZXRjaC5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXN0cmV0Y2gubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stc3RyZXRjaC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1jay1zdHJldGNoLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stc3RyZXRjaC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXN0cmV0Y2gubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXN0cmV0Y2gubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xufVxuLm1jay1jb2x1bW4ubWNrLXNjcm9sbCwgLm1jay1zY3JvbGwuYnV0dG9uLXdyYXBwZXIsIC5tY2stc2Nyb2xsLm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1zY3JvbGwubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stc2Nyb2xsLm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXNjcm9sbC5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXNjcm9sbC5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1zY3JvbGwubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stc2Nyb2xsLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stc2Nyb2xsLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stc2Nyb2xsLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1zY3JvbGwubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgb3ZlcmZsb3cteTogb3ZlcmxheTtcbn1cbi5tY2stY29sdW1uLm1jay1mbGV4LWVuZCwgLm1jay1mbGV4LWVuZC5idXR0b24td3JhcHBlciwgLm1jay1mbGV4LWVuZC5tY2stYnV0dG9uLm1hdC1idXR0b24sIC5tY2stZmxleC1lbmQubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stZmxleC1lbmQubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stZmxleC1lbmQubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1mbGV4LWVuZC5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1mbGV4LWVuZC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1jay1mbGV4LWVuZC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLWZsZXgtZW5kLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stZmxleC1lbmQubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLWZsZXgtZW5kLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24ge1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xufVxuLm1jay1vdmVyZmxvdyB7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLm1jay1ib3JkZXJlZCwgLm1jay1pbnB1dCB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNCM0IzQjM7XG59XG4ubWNrLWJvcmRlcmVkOmhvdmVyLCAubWNrLWlucHV0OmhvdmVyIHtcbiAgYm9yZGVyLWNvbG9yOiAjNDY0NjQ2O1xufVxuLm1jay1ib3JkZXJlZDpmb2N1cywgLm1jay1pbnB1dDpmb2N1cyB7XG4gIGJvcmRlci1jb2xvcjogIzFGNDBFNjtcbn1cbi5tY2stYm9yZGVyZWRbZGlzYWJsZWQ9dHJ1ZV0sIC5tY2staW5wdXRbZGlzYWJsZWQ9dHJ1ZV0ge1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgYm9yZGVyLWNvbG9yOiAjZjBmMGYwO1xuICBjb2xvcjogI2NjYztcbn1cbi5tY2stZGF0ZS1kaXNwbGF5IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiA0M3B4O1xuICBwYWRkaW5nOiAxcmVtIDAuNXJlbTtcbiAgdHJhbnNpdGlvbjogYm9yZGVyIDIwMG1zLCBib3gtc2hhZG93IDIwMG1zO1xufVxuLm1jay1mb3JtLWlucHV0IC5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgcGFkZGluZy1ib3R0b206IDAuNXJlbTtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCB7XG4gIG1pbi13aWR0aDogYXV0byAhaW1wb3J0YW50O1xufVxuLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nLXRvcDogMC43cmVtICFpbXBvcnRhbnQ7XG4gIHBhZGRpbmctYm90dG9tOiAwLjVyZW0gIWltcG9ydGFudDtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gIG1pbi1oZWlnaHQ6IDIuN3JlbTtcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNyk7XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24gLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgbWFyZ2luLXRvcDogMnB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1zZWxlY3QtZHJvcGRvd24tYnV0dG9uIC5tYXQtZm9ybS1maWVsZC1mbGV4IHtcbiAgICBwYWRkaW5nLWxlZnQ6IDAuNXJlbTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24gLm1hdC1mb3JtLWZpZWxkLWZsZXgge1xuICAgIHBhZGRpbmctbGVmdDogMC41cmVtO1xuICAgIHBhZGRpbmctcmlnaHQ6IDAuNXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1zZWxlY3QtZHJvcGRvd24tYnV0dG9uIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24gLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICBoZWlnaHQ6IDJyZW07XG4gICAgbWluLWhlaWdodDogMnJlbTtcbiAgfVxuICAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24gLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stc2VsZWN0LWRyb3Bkb3duLWJ1dHRvbiAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgIGhlaWdodDogMnJlbTtcbiAgICBtaW4taGVpZ2h0OiAycmVtO1xuICB9XG4gIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stc2VsZWN0LWRyb3Bkb3duLWJ1dHRvbiAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7XG4gICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcbiAgfVxufVxuLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1hdC1zIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuLm1jay1mb3JtLWlucHV0IG1hdC1zZWxlY3Qge1xuICBtYXJnaW4tdG9wOiAwLjJyZW07XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LXNlbGVjdCAubWF0LXNlbGVjdC1hcnJvdyB7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtc2VsZWN0IC5tYXQtc2VsZWN0LXZhbHVlID4gLm1hdC1zZWxlY3QtdmFsdWUtdGV4dCA+IHNwYW4ge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbi5tY2stZm9ybS1pbnB1dCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Lm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsIC5tY2stZm9ybS1pbnB1dCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcCwgLm1jay1mb3JtLWlucHV0IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kIHtcbiAgYm9yZGVyLWNvbG9yOiAjQjNCM0IzO1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cbi5tY2stZm9ybS1pbnB1dCAuYXZhaWxhYmxlIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCwgLm1jay1mb3JtLWlucHV0IC5hdmFpbGFibGUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsIC5tY2stZm9ybS1pbnB1dCAuYXZhaWxhYmxlIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kIHtcbiAgYm9yZGVyLWNvbG9yOiAjM2FhNTM3O1xufVxuLm1jay1mb3JtLWlucHV0IC5ib29rZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LCAubWNrLWZvcm0taW5wdXQgLmJvb2tlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcCwgLm1jay1mb3JtLWlucHV0IC5ib29rZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICBib3JkZXItY29sb3I6ICNlMTJlNDE7XG59XG4ubWNrLWZvcm0taW5wdXQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LCAubWNrLWZvcm0taW5wdXQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsIC5tY2stZm9ybS1pbnB1dCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gIGJvcmRlci1jb2xvcjogIzFGNDBFNjtcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4ubWNrLWZvcm0taW5wdXQgPiBtYXQtZm9ybS1maWVsZC5tY2stZXJyb3IgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICBwYWRkaW5nLWJvdHRvbTogMDtcbn1cbi5tY2stZm9ybS1pbnB1dCA+IG1hdC1mb3JtLWZpZWxkLm1jay1lcnJvciAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Lm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsIC5tY2stZm9ybS1pbnB1dCA+IG1hdC1mb3JtLWZpZWxkLm1jay1lcnJvciAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcCwgLm1jay1mb3JtLWlucHV0ID4gbWF0LWZvcm0tZmllbGQubWNrLWVycm9yIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kIHtcbiAgYm9yZGVyLWNvbG9yOiAjRTEyRTQwO1xufVxuLm1jay1mb3JtLWlucHV0IG1jay1jbG9zZS1pY29uLm1hdC1jaGlwLXJlbW92ZS5tYXQtY2hpcC1yZW1vdmUge1xuICBvcGFjaXR5OiAxO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtbGFiZWwge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtcmFkaW8tYnV0dG9uIHtcbiAgbWFyZ2luLXJpZ2h0OiAxcmVtO1xufVxuLm1jay1mb3JtLWlucHV0IC5tYXQtcmFkaW8tbGFiZWwtY29udGVudCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbi5tY2stZm9ybS1pbnB1dCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSB7XG4gIGJvcmRlci1jb2xvcjogIzFGNDBFNiAhaW1wb3J0YW50O1xuICBib3JkZXItd2lkdGg6IDFweCAhaW1wb3J0YW50O1xufVxuLm1jay1mb3JtLWlucHV0IC5tYXQtcmFkaW8taW5uZXItY2lyY2xlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFGNDBFNiAhaW1wb3J0YW50O1xufVxuLm1jay1mb3JtLWlucHV0IG1hdC1yYWRpby1ncm91cCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGZsZXgtd3JhcDogd3JhcDtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtcmFkaW8tZ3JvdXAgPiBtYXQtcmFkaW8tYnV0dG9uOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tcmlnaHQ6IDA7XG59XG4ubWNrLWZvcm0taW5wdXQtY29udGFpbmVyID4gLm1jay1mb3JtLWlucHV0LCAubWNrLWZvcm0taW5wdXQtY29udGFpbmVyID4gbWNrLXNlbGVjdCB7XG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stZm9ybS1pbnB1dC1jb250YWluZXIgPiAubWNrLWZvcm0taW5wdXQsIC5tY2stZm9ybS1pbnB1dC1jb250YWluZXIgPiBtY2stc2VsZWN0IHtcbiAgICBtYXJnaW4tYm90dG9tOiAxLjc1cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogMTA0OHB4KSB7XG4gIC5tY2stZm9ybS1pbnB1dC1jb250YWluZXIgPiAubWNrLWZvcm0taW5wdXQsIC5tY2stZm9ybS1pbnB1dC1jb250YWluZXIgPiBtY2stc2VsZWN0IHtcbiAgICBtYXJnaW4tYm90dG9tOiAxLjc1cmVtO1xuICB9XG59XG4ubWNrLWZvcm0taW5wdXQtY29udGFpbmVyIC5tY2stcmFkaW8tc2VsZWN0IHtcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stZm9ybS1pbnB1dC1jb250YWluZXIgLm1jay1yYWRpby1zZWxlY3Qge1xuICAgIG1hcmdpbi1ib3R0b206IDEuNXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDEwNDhweCkge1xuICAubWNrLWZvcm0taW5wdXQtY29udGFpbmVyIC5tY2stcmFkaW8tc2VsZWN0IHtcbiAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG4gIH1cbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcCB7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgbWluLWhlaWdodDogMS41cmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzMzMzO1xuICBwYWRkaW5nLXRvcDogMC4yNXJlbTtcbiAgcGFkZGluZy1ib3R0b206IDAuMjVyZW07XG4gIHBhZGRpbmctbGVmdDogMC41cmVtO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLWZvcm0taW5wdXQgbWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LXN0YW5kYXJkLWNoaXAge1xuICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1mb3JtLWlucHV0IG1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwIHtcbiAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgfVxufVxuLm1jay1mb3JtLWlucHV0IG1hdC1jaGVja2JveC5tYXQtY2hlY2tib3gubWF0LWNoZWNrYm94IHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogMzAwO1xuICBjb2xvcjogYmxhY2s7XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWNoZWNrYm94IGRpdi5tYXQtY2hlY2tib3gtYmFja2dyb3VuZC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxRjQwRTY7XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWNoZWNrYm94IGRpdi5tYXQtY2hlY2tib3gtYmFja2dyb3VuZC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZC5tY2stY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWRpc2FibGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0QwRDBEMDtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtY2hlY2tib3gubWNrLWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1kaXNhYmxlZCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgY29sb3I6IGJsYWNrO1xuICBjb2xvcjogI0IzQjNCMztcbn1cbi5tY2stYm9yZGVybGVzcyB7XG4gIGJvcmRlcjogbm9uZTtcbn1cbi5tY2stYm9yZGVybGVzczpob3ZlciwgLm1jay1ib3JkZXJsZXNzOmZvY3VzLCAubWNrLWJvcmRlcmxlc3M6ZGlzYWJsZWQge1xuICBib3JkZXI6IG5vbmU7XG59XG4ubWNrLXNlbGVjdC1wYW5lbCB7XG4gIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDtcbiAgYm9yZGVyLXJhZGl1czogdW5zZXQgIWltcG9ydGFudDtcbiAgbWFyZ2luLXRvcDogMzVweCAhaW1wb3J0YW50O1xuICBtYXJnaW4tbGVmdDogNXB4O1xufVxuLm1jay1zZWxlY3QtcGFuZWwgbWF0LW9wdGlvbiB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgcGFkZGluZy1yaWdodDogMDtcbn1cbi5tY2stc2VsZWN0LXBhbmVsIG1hdC1vcHRpb24ubWF0LW9wdGlvbi10ZXh0IHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuLm1jay1zZWxlY3QtcGFuZWwubWNrLW1hcmdpbi10b3Age1xuICBtYXJnaW4tdG9wOiAxLjVyZW0gIWltcG9ydGFudDtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwubWF0LWF1dG9jb21wbGV0ZS1wYW5lbC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIHtcbiAgdG9wOiAtMTBweDtcbiAgbWF4LWhlaWdodDogMjc4cHg7XG59XG4ubWNrLWNoZWNrYm94LXBhbmVsIG1hdC1vcHRpb24ubWNrLXRydW5jYXRlZCAubWF0LWNoZWNrYm94LWxhYmVsLm1hdC1jaGVja2JveC1sYWJlbCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICAtd2Via2l0LWxpbmUtY2xhbXA6IDI7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG59XG4ubWNrLWNoZWNrYm94LXBhbmVsIG1hdC1vcHRpb24ge1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIHBhZGRpbmctcmlnaHQ6IDA7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBoZWlnaHQ6IHVuc2V0O1xuICBtaW4taGVpZ2h0OiAzNnB4O1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIC5tYXQtY2hlY2tib3gtbGFiZWwubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgZmxleDogMTtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiAubWF0LWNoZWNrYm94LWxhYmVsLm1hdC1jaGVja2JveC1sYWJlbCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgY29sb3I6IGJsYWNrO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uLm1jay1jaGVja2JveC1ncm91cC1oZWFkZXIgLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICBmb250LXdlaWdodDogNTAwO1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uLm1jay1jaGVja2JveC1ncm91cC1jaGlsZCB7XG4gIG1hcmdpbi1sZWZ0OiAycmVtO1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIG1hdC1jaGVja2JveCBsYWJlbC5tYXQtY2hlY2tib3gtbGF5b3V0IHtcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmctbGVmdDogMTZweDtcbiAgcGFkZGluZy1yaWdodDogMTZweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiBtYXQtY2hlY2tib3ggbGFiZWwubWF0LWNoZWNrYm94LWxheW91dCB7XG4gICAgcGFkZGluZy1sZWZ0OiAycHg7XG4gICAgcGFkZGluZy1yaWdodDogMnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIG1hdC1jaGVja2JveCBsYWJlbC5tYXQtY2hlY2tib3gtbGF5b3V0IHtcbiAgICBwYWRkaW5nLWxlZnQ6IDJweDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAycHg7XG4gIH1cbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiBtYXQtY2hlY2tib3ggZGl2Lm1hdC1jaGVja2JveC1mcmFtZS5tYXQtY2hlY2tib3gtZnJhbWUge1xuICBib3JkZXI6IDFweCBzb2xpZCAjQjNCM0IzO1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIG1hdC1jaGVja2JveC5tYXQtY2hlY2tib3gtY2hlY2tlZCBkaXYubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMUY0MEU2O1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIG1hdC1jaGVja2JveC5tY2stY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWRpc2FibGVkIGRpdi5tYXQtY2hlY2tib3gtYmFja2dyb3VuZC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNEMEQwRDA7XG59XG4ubWNrLWNoZWNrYm94LXBhbmVsIG1hdC1vcHRpb24gbWF0LWNoZWNrYm94Lm1jay1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtZGlzYWJsZWQgLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIGNvbG9yOiBibGFjaztcbiAgY29sb3I6ICNCM0IzQjM7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG4ubWNrLWNoZWNrYm94LXBhbmVsIG1hdC1vcHRpb24gbWF0LWNoZWNrYm94IC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyIHtcbiAgd2lkdGg6IDEuMjVyZW07XG4gIGhlaWdodDogMS4yNXJlbTtcbn1cbi5tY2stc2VsZWN0LW9wdGlvbi1zZWxlY3RlZCB7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgY29sb3I6IGJsYWNrO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xufVxuLm1jay1zZWxlY3Qtb3B0aW9uLXNlbGVjdGVkIC5tY2stc3BhY2VyLWNvbnRlbnQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMUY0MEU2O1xuICBtYXJnaW4tcmlnaHQ6IDAuNzVyZW07XG59XG4ubWNrLXNlbGVjdC1vcHRpb24tdW5zZWxlY3RlZCB7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbi5tY2stc2VsZWN0LW9wdGlvbi11bnNlbGVjdGVkLm1jay1pZ25vcmUtZGlzYWJsZWQge1xuICBjb2xvcjogYmxhY2s7XG59XG4ubWNrLXNlbGVjdC1vcHRpb24tdW5zZWxlY3RlZCAubWNrLXNwYWNlci1jb250ZW50IHtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICBtYXJnaW4tcmlnaHQ6IDAuNzVyZW07XG59XG4ubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgaGVpZ2h0OiA0MHB4O1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBib3JkZXI6IG5vbmU7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24ge1xuICAgIGhlaWdodDogNDhweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24ge1xuICAgIGhlaWdodDogNDhweDtcbiAgfVxufVxuLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBwYWRkaW5nLWxlZnQ6IDAuMjVyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDAuMjVyZW07XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgfVxufVxuLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydCwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0LCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stcHJpbWFyeS1idXR0b24ge1xuICBoZWlnaHQ6IDMycHg7XG4gIG1pbi13aWR0aDogODNweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydCwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgbWluLXdpZHRoOiAxNTVweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydCwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgbWluLXdpZHRoOiAxNTVweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0LCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0LCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0LCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0LCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICB9XG59XG4ubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZSwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2stcHJpbWFyeS1idXR0b24ge1xuICBoZWlnaHQ6IDMycHg7XG4gIHdpZHRoOiAzMnB4O1xuICBtaW4td2lkdGg6IDMycHg7XG4gIHBhZGRpbmc6IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZSwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2stcHJpbWFyeS1idXR0b24ge1xuICAgIHdpZHRoOiA0MHB4O1xuICAgIGhlaWdodDogNDBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZS5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZSwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgd2lkdGg6IDQwcHg7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICB9XG59XG4ubWNrLXByaW1hcnktYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxRjQwRTY7XG59XG4ubWNrLXByaW1hcnktYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbltkaXNhYmxlZF0sIC5tY2stcHJpbWFyeS1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLmRpc2FibGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0QwRDBEMDtcbiAgY29sb3I6ICM3NTc1NzU7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG4ubWNrLXByaW1hcnktYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbltkaXNhYmxlZF0gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1jay1wcmltYXJ5LWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24uZGlzYWJsZWQgPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gIGNvbG9yOiAjNzU3NTc1O1xufVxuLm1jay1wcmltYXJ5LWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gIGNvbG9yOiB3aGl0ZTtcbn1cbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgYm9yZGVyOiAxcHggc29saWQgIzIyNTFGRjtcbiAgY29sb3I6ICMyMjUxRkY7XG59XG4ubWNrLXNlY29uZGFyeS1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbltkaXNhYmxlZF0sIC5tY2stc2Vjb25kYXJ5LWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLmRpc2FibGVkIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgY29sb3I6ICMzMzMzMzM7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG4ubWNrLXNlY29uZGFyeS1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG59XG4ubWNrLXNlY29uZGFyeS1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICBjb2xvcjogIzMzMzMzMztcbn1cbi5tY2std2FybmluZy1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZDA0ODtcbn1cbi5tY2std2FybmluZy1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICBjb2xvcjogYmxhY2s7XG59XG4ubWNrLXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ge1xuICBib3JkZXI6IDJweCBzb2xpZCAjQjNCM0IzO1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgcGFkZGluZy1sZWZ0OiAxLjc1cmVtO1xuICBwYWRkaW5nLXJpZ2h0OiAxLjc1cmVtO1xufVxuLm1jay1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydCB7XG4gIGhlaWdodDogMzJweDtcbiAgbWluLXdpZHRoOiA4M3B4O1xuICBwYWRkaW5nLWxlZnQ6IDAuMjVyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDAuMjVyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0IHtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgbWluLXdpZHRoOiAxNTVweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQge1xuICAgIGhlaWdodDogNDhweDtcbiAgICBtaW4td2lkdGg6IDE1NXB4O1xuICB9XG59XG4ubWNrLXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnkge1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLWNvbG9yOiAjMUY0MEU2O1xuICBjb2xvcjogIzFGNDBFNjtcbn1cbi5tY2stc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stdGhpbi1ib3JkZXItbGlnaHQge1xuICBib3JkZXItY29sb3I6ICNEMEQwRDA7XG4gIGJvcmRlci13aWR0aDogMXB4O1xufVxuLm1jay1zdHJva2VkLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBjb2xvcjogIzFGNDBFNjtcbn1cbi5tY2stdG9nZ2xlLWJ1dHRvbiB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgYm9yZGVyOiAxcHggc29saWQgI0IzQjNCMztcbiAgYm9yZGVyLWNvbG9yOiAjRDBEMEQwO1xuICBtaW4td2lkdGg6IDU5cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay10b2dnbGUtYnV0dG9uIHtcbiAgICBtaW4td2lkdGg6IDEzMnB4O1xuICAgIHBhZGRpbmctdG9wOiAwLjVyZW07XG4gICAgcGFkZGluZy1ib3R0b206IDAuNXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stdG9nZ2xlLWJ1dHRvbiB7XG4gICAgbWluLXdpZHRoOiAxMzJweDtcbiAgICBwYWRkaW5nLXRvcDogMC41cmVtO1xuICAgIHBhZGRpbmctYm90dG9tOiAwLjVyZW07XG4gIH1cbn1cbi5tY2stdG9nZ2xlLWJ1dHRvbi1zZWxlY3RlZCB7XG4gIGNvbG9yOiAjMUY0MEU2O1xufVxuLm1jay1kYXRlLXBpY2tlciB7XG4gIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1kYXRlLXBpY2tlciB7XG4gICAgbWF4LXdpZHRoOiAyM3JlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stZGF0ZS1waWNrZXIge1xuICAgIG1heC13aWR0aDogMjNyZW07XG4gIH1cbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAuaGVhZGVyLmhlYWRlciB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6ICMwNTFDMkM7XG4gIG1hcmdpbi10b3A6IDEuMjVyZW07XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmhlYWRlci5oZWFkZXIgPiAuYXJyb3cuYXJyb3cge1xuICB3aWR0aDogMi4zNzVyZW07XG4gIGhlaWdodDogMnJlbTtcbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAuaGVhZGVyLmhlYWRlciA+IC5hcnJvdy5hcnJvdyA+IC5pY29uLmljb24ge1xuICB3aWR0aDogMXJlbTtcbiAgaGVpZ2h0OiAxcmVtO1xufVxuLm1jay1kYXRlLXBpY2tlciA+IC5oZWFkZXIuaGVhZGVyID4gLmFycm93LmFycm93ID4gLm5leHQubmV4dCB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9hcnJvdy1mb3J3YXJkLnN2Z1wiKTtcbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAuaGVhZGVyLmhlYWRlciA+IC5hcnJvdy5hcnJvdyA+IC5wcmV2aW91cy5wcmV2aW91cyB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9hcnJvdy1iYWNrd2FyZC5zdmdcIik7XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLm1vbnRoIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuLm1jay1kYXRlLXBpY2tlciA+IC53ZWVrIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogNTAwO1xuICBjb2xvcjogIzc2NzY3Njtcbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAuYm9keSB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAuYm9keSA+IGRpdiA+IGRpdi5kYXRlID4gLmRvdCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmJvZHkgPiBkaXYgPiBkaXYuZGF0ZS5kaXNhYmxlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBjb2xvcjogIzc2NzY3Njtcbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAuYm9keSA+IGRpdiA+IGRpdi5kYXRlLmFjdGl2ZSB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxRjQwRTY7XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmJvZHkgPiBkaXYgPiBkaXYuZGF0ZS5ub24tbW9udGgge1xuICBjb2xvcjogIzc2NzY3Njtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stc3BhY2VyLWNvbnRlbnQtY29sbGFwc2UtdGFibGV0IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1zcGFjZXItY29udGVudC1jb2xsYXBzZS10YWJsZXQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1zcGFjZXItY29udGVudC1jb2xsYXBzZS10YWJsZXQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkgYW5kIChtYXgtd2lkdGg6IDEwNDhweCkge1xuICAubWNrLXNwYWNlci1jb250ZW50LWNvbGxhcHNlLXRhYmxldCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1zcGFjZXItY29udGVudC1leHBhbmQtbW9iaWxlIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1zcGFjZXItY29udGVudC1leHBhbmQtbW9iaWxlIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4ubWNrLXNwYWNlci1jb250ZW50LWRpdmlkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xufVxuLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsIHtcbiAgYm94LXNoYWRvdzogMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI0U2RTZFNjtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNFNkU2RTY7XG59XG4ubWNrLWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWNrLWV4cGFuZGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDtcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tY2stZXhwYW5kZWQgLm1jay1jb2xsYXBzZS1pY29uIHtcbiAgd2lkdGg6IDI0cHg7XG4gIGhlaWdodDogMjRweDtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwibGlicy91aS9zcmMvbGliL2ljb25zL2NoZXZyb24tY2xvc2Uuc3ZnXCIpO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWNrLWV4cGFuZGVkIC5tY2stY29sbGFwc2UtaWNvbiB7XG4gICAgd2lkdGg6IDQ4cHg7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9jaGV2cm9uLWNsb3NlLWxhcmdlLnN2Z1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWNrLWV4cGFuZGVkIC5tY2stY29sbGFwc2UtaWNvbiB7XG4gICAgd2lkdGg6IDQ4cHg7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9jaGV2cm9uLWNsb3NlLWxhcmdlLnN2Z1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIH1cbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1ib2R5IHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xufVxuLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWJvZHkgPiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ge1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgY29sb3I6IGJsYWNrO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBwYWRkaW5nLWJvdHRvbTogMC41cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWJvZHkgPiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ge1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS42O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWJvZHkgPiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ge1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS42O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtYm9keSA+IC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbi5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtYm9keSA+IC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbi5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIH1cbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsIG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIHtcbiAgcGFkZGluZy1sZWZ0OiAxcmVtO1xuICBwYWRkaW5nLXJpZ2h0OiAxcmVtO1xufVxuLm1jay1leHBhbnNpb24tcGFuZWwgbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgPiBzcGFuLm1hdC1jb250ZW50IHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsIG1hdC1wYW5lbC10aXRsZSB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgY29sb3I6IGJsYWNrO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xufVxuLm1jay1leHBhbnNpb24tcGFuZWwgLm1jay1jb2xsYXBzZS1pY29uIHtcbiAgd2lkdGg6IDI0cHg7XG4gIGhlaWdodDogMjRweDtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwibGlicy91aS9zcmMvbGliL2ljb25zL2NoZXZyb24tb3Blbi5zdmdcIik7XG4gIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbiAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjVzIGVhc2U7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWV4cGFuc2lvbi1wYW5lbCAubWNrLWNvbGxhcHNlLWljb24ge1xuICAgIHdpZHRoOiA0OHB4O1xuICAgIGhlaWdodDogNDhweDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvY2hldnJvbi1vcGVuLWxhcmdlLnN2Z1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWV4cGFuc2lvbi1wYW5lbCAubWNrLWNvbGxhcHNlLWljb24ge1xuICAgIHdpZHRoOiA0OHB4O1xuICAgIGhlaWdodDogNDhweDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvY2hldnJvbi1vcGVuLWxhcmdlLnN2Z1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIH1cbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsIC5tY2stY29sbGFwc2UtaWNvbi5leHBhbmRlZCB7XG4gIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG59XG4ubWNrLWljb24tZmlsbC1vcGVuIHtcbiAgZmlsbDogIzFGNDBFNjtcbn1cbi5tY2staWNvbi1maWxsLWNsb3NlIHtcbiAgZmlsbDogIzc2NzY3Njtcbn1cbi5tY2staWNvbi1maWxsLWJsYWNrIHtcbiAgZmlsbDogYmxhY2s7XG4gIHN0cm9rZTogYmxhY2s7XG59XG4ubWNrLWljb24tZmlsbC13aGl0ZSB7XG4gIGZpbGw6IHdoaXRlO1xuICBzdHJva2U6IHdoaXRlO1xufVxuLm1jay1pY29uLWZpbGwtZ3JheSB7XG4gIGZpbGw6ICMzMzMzMzM7XG4gIHN0cm9rZTogIzMzMzMzMztcbn1cbi5tY2stbWluIHtcbiAgbWF4LXdpZHRoOiA1ODFweCAhaW1wb3J0YW50O1xuICB3aWR0aDogODB2dztcbiAgbWF4LWhlaWdodDogMTAwdmg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLW1pbiB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1pbiAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbWluIHtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICB9XG4gIC5tY2stbWluIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG4ubWNrLW5vZXhwYW5kIHtcbiAgbWF4LXdpZHRoOiA1ODFweCAhaW1wb3J0YW50O1xuICB3aWR0aDogODB2dyAhaW1wb3J0YW50O1xuICBtYXgtaGVpZ2h0OiAxMDB2aDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stbm9leHBhbmQge1xuICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gMzJweCkgIWltcG9ydGFudDtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbm9leHBhbmQge1xuICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gMzJweCkgIWltcG9ydGFudDtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxufVxuLm1jay1tb2RhbCB7XG4gIG1heC13aWR0aDogODAwcHggIWltcG9ydGFudDtcbiAgd2lkdGg6IDgwdnc7XG4gIG1heC1oZWlnaHQ6IDEwMHZoO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1tb2RhbCB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1tb2RhbCB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG4ubWNrLW1vZGFsLW1pbmkge1xuICBtYXgtd2lkdGg6IDU4MHB4ICFpbXBvcnRhbnQ7XG4gIG1heC1oZWlnaHQ6IDEwMHZoO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1tb2RhbC1taW5pIHtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICB9XG4gIC5tY2stbW9kYWwtbWluaSAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwtbWluaSB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsLW1pbmkgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi5tY2stbW9kYWwtc3VydmV5IHtcbiAgbWF4LXdpZHRoOiA2OTFweCAhaW1wb3J0YW50O1xuICBtYXgtaGVpZ2h0OiAxMDB2aDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stbW9kYWwtc3VydmV5IC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1tb2RhbC1zdXJ2ZXkgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi5tY2stbW9kYWwtd2lkZSB7XG4gIG1heC13aWR0aDogMTAyNHB4ICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiAxMDB2dztcbiAgaGVpZ2h0OiA5NXZoO1xuICBtYXgtaGVpZ2h0OiAxMDB2aDtcbn1cbi5tY2stbW9kYWwtd2lkZSAubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0Y4RjlGQTtcbiAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm1jay1tb2RhbC13aWRlIC5tYXQtZGlhbG9nLWNvbnRlbnQgLm1hdC1pY29uLWJ1dHRvbltuYW1lPUNsb3NlQnV0dG9uXSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcmlnaHQ6IDMycHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLW1vZGFsLXdpZGUgLm1hdC1kaWFsb2ctY29udGVudCAubWF0LWljb24tYnV0dG9uW25hbWU9Q2xvc2VCdXR0b25dIC5jbG9zZS1pbWFnZSB7XG4gICAgaGVpZ2h0OiAzMnB4O1xuICAgIHdpZHRoOiAzMnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1tb2RhbC13aWRlIC5tYXQtZGlhbG9nLWNvbnRlbnQgLm1hdC1pY29uLWJ1dHRvbltuYW1lPUNsb3NlQnV0dG9uXSAuY2xvc2UtaW1hZ2Uge1xuICAgIGhlaWdodDogMzJweDtcbiAgICB3aWR0aDogMzJweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1tb2RhbC13aWRlIHtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICB9XG4gIC5tY2stbW9kYWwtd2lkZSAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwtd2lkZSB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsLXdpZGUgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi5tY2stbW9kYWwtd2lkZS1tYW5hZ2UtYm9va2luZyB7XG4gIG1heC13aWR0aDogMTAyNHB4ICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiAxMDB2dztcbiAgbWF4LWhlaWdodDogOTV2aDtcbn1cbi5tY2stbW9kYWwtd2lkZS1tYW5hZ2UtYm9va2luZyAubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0Y4RjlGQTtcbiAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm1jay1tb2RhbC13aWRlLW1hbmFnZS1ib29raW5nIC5tYXQtZGlhbG9nLWNvbnRlbnQgLm1hdC1pY29uLWJ1dHRvbltuYW1lPUNsb3NlQnV0dG9uXSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcmlnaHQ6IDMycHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLW1vZGFsLXdpZGUtbWFuYWdlLWJvb2tpbmcgLm1hdC1kaWFsb2ctY29udGVudCAubWF0LWljb24tYnV0dG9uW25hbWU9Q2xvc2VCdXR0b25dIC5jbG9zZS1pbWFnZSB7XG4gICAgaGVpZ2h0OiAzMnB4O1xuICAgIHdpZHRoOiAzMnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1tb2RhbC13aWRlLW1hbmFnZS1ib29raW5nIC5tYXQtZGlhbG9nLWNvbnRlbnQgLm1hdC1pY29uLWJ1dHRvbltuYW1lPUNsb3NlQnV0dG9uXSAuY2xvc2UtaW1hZ2Uge1xuICAgIGhlaWdodDogMzJweDtcbiAgICB3aWR0aDogMzJweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1tb2RhbC13aWRlLW1hbmFnZS1ib29raW5nIHtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICB9XG4gIC5tY2stbW9kYWwtd2lkZS1tYW5hZ2UtYm9va2luZyAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwtd2lkZS1tYW5hZ2UtYm9va2luZyB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsLXdpZGUtbWFuYWdlLWJvb2tpbmcgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stYWxlcnQge1xuICAgIG1heC13aWR0aDogMTAwdncgIWltcG9ydGFudDtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgbWFyZ2luLWxlZnQ6IDFyZW07XG4gICAgbWFyZ2luLXJpZ2h0OiAxcmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1hbGVydCB7XG4gICAgbWF4LXdpZHRoOiAxMDB2dyAhaW1wb3J0YW50O1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBtYXJnaW4tbGVmdDogMXJlbTtcbiAgICBtYXJnaW4tcmlnaHQ6IDFyZW07XG4gIH1cbn1cbi5tY2stYWxlcnQtYmFja2Ryb3Age1xuICBiYWNrZ3JvdW5kOiByZ2JhKDUsIDI4LCA0NCwgMC44NSk7XG59XG4ubWNrLXNsaWRlLXRvZ2dsZS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkOm5vdCgubWF0LWRpc2FibGVkKSAubWF0LXNsaWRlLXRvZ2dsZS1iYXIubWF0LXNsaWRlLXRvZ2dsZS1iYXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjI1MUZGO1xufVxuLm1jay1zbGlkZS10b2dnbGUubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIubWF0LXNsaWRlLXRvZ2dsZS10aHVtYiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xufVxuLm1jay1zbGlkZS10b2dnbGUubWF0LXNsaWRlLXRvZ2dsZSB7XG4gIGhlaWdodDogYXV0bztcbn1cbi5tY2stc2xpZGUtdG9nZ2xlIC5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnQubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50IHtcbiAgZmxleDogMTtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgLXdlYmtpdC1saW5lLWNsYW1wOiAyO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xufVxuLm1jay1zbGlkZS10b2dnbGUgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIubWF0LXNsaWRlLXRvZ2dsZS10aHVtYiB7XG4gIHdpZHRoOiAxNHB4O1xuICBoZWlnaHQ6IDE0cHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDUwJSwgNTAlKTtcbn1cbi5tY2stc2xpZGUtdG9nZ2xlIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLWNvbnRhaW5lci5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLWNvbnRhaW5lciB7XG4gIHRvcDogLTRweDtcbiAgbGVmdDogLTRweDtcbn1cbi5tY2stc2xpZGUtdG9nZ2xlIC5tYXQtc2xpZGUtdG9nZ2xlLWJhci5tYXQtc2xpZGUtdG9nZ2xlLWJhciB7XG4gIGhlaWdodDogMjBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0QwRDBEMDtcbiAgYm9yZGVyLXJhZGl1czogMjBweDtcbn1cbi5tY2stc2tlbGV0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xufVxuLm1jay1za2VsZXRvbi1jaGVja2JveCB7XG4gIGZsb2F0OiBsZWZ0O1xufVxuLm1jay1za2VsZXRvbi1jaGVja2JveCA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgd2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMjBweDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbi5tY2stc2tlbGV0b24taGVhZGVyID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICB3aWR0aDogMTAwdnc7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIG1heC13aWR0aDogMjE1cHg7XG59XG4ubWNrLXNrZWxldG9uLWltYWdlID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICB3aWR0aDogODFweDtcbiAgaGVpZ2h0OiA4MnB4O1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogODAwcHgpIHtcbiAgLm1jay1za2VsZXRvbi1pbWFnZSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICB3aWR0aDogMjE5cHg7XG4gICAgaGVpZ2h0OiAxMTlweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDEwNDhweCkge1xuICAubWNrLXNrZWxldG9uLWltYWdlID4gLmxvYWRlci5sb2FkZXIge1xuICAgIHdpZHRoOiAyMTlweDtcbiAgICBoZWlnaHQ6IDExOXB4O1xuICB9XG59XG4ubWNrLXNrZWxldG9uLXN0YXR1cyA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgd2lkdGg6IDExN3B4O1xuICBoZWlnaHQ6IDc4cHg7XG4gIG1hcmdpbi10b3A6IDEwcHg7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA4MDBweCkge1xuICAubWNrLXNrZWxldG9uLXN0YXR1cyA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogMTA0OHB4KSB7XG4gIC5tY2stc2tlbGV0b24tc3RhdHVzID4gLmxvYWRlci5sb2FkZXIge1xuICAgIHdpZHRoOiAxMTdweDtcbiAgICBoZWlnaHQ6IDc4cHg7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS0xID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDIzcHg7XG4gIG1heC13aWR0aDogMTc2cHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtMSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDIxOXB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTEgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAyMTlweDtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTIgPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIGhlaWdodDogMThweDtcbiAgbWF4LXdpZHRoOiAxNjVweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS0yID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogMTg5cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtMiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDE4OXB4O1xuICB9XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtMyA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgaGVpZ2h0OiAxOHB4O1xuICBtYXgtd2lkdGg6IDE0N3B4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTMgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAxODlweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS0zID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogMTg5cHg7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS0zMHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTMwcC10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogMzAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTMwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtMzBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAzMCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtMzBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS0zMHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDMwJTtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTMwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS0zMHAtdGhpbi10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDE2cHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbi5tY2stc2tlbGV0b24tbGluZS00NXAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTQ1cC10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogNDUlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTQ1cCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNDVwLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA0NSU7XG4gICAgbWFyZ2luLXJpZ2h0OiA0NSU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtNDVwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS00NXAtdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDQ1JTtcbiAgICBtYXJnaW4tcmlnaHQ6IDQ1JTtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTQ1cC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS00NXAtdGhpbi10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDE2cHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbi5tY2stc2tlbGV0b24tbGluZS01MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTUwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIGhlaWdodDogMThweDtcbiAgbWF4LXdpZHRoOiA1MCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtNTBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogNTAlO1xuICAgIG1hcmdpbi1yaWdodDogNDUlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTUwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTUwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDUwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDQ1JTtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTUwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpbi10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpY2stdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpbi10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaWNrLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDMycHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbi5tY2stc2tlbGV0b24tbGluZS02MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTYwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIGhlaWdodDogMThweDtcbiAgbWF4LXdpZHRoOiA2MCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtNjBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogNjAlO1xuICAgIG1hcmdpbi1yaWdodDogMzUlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTYwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTYwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDYwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDM1JTtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTYwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpbi10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpY2stdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpbi10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaWNrLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDMycHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbi5tY2stc2tlbGV0b24tbGluZS03MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTcwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIGhlaWdodDogMThweDtcbiAgbWF4LXdpZHRoOiA3MCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtNzBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogNzAlO1xuICAgIG1hcmdpbi1yaWdodDogMjUlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTcwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTcwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDcwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDI1JTtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTcwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpbi10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpY2stdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpbi10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaWNrLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDMycHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbi5tY2stc2tlbGV0b24tbGluZS04MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTgwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIGhlaWdodDogMThweDtcbiAgbWF4LXdpZHRoOiA4MCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtODBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogODAlO1xuICAgIG1hcmdpbi1yaWdodDogMTUlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTgwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTgwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDgwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDE1JTtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTgwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpbi10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpY2stdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpbi10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaWNrLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDMycHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbi5tY2stc2tlbGV0b24tbGluZS05MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTkwcC10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogOTAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTkwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtOTBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA5MCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtOTBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS05MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDkwJTtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTkwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS05MHAtdGhpbi10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDE2cHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbi5tY2stc2tlbGV0b24tbG9hZC1tb3JlID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBtYXJnaW4tdG9wOiAwLjVyZW07XG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbiAgd2lkdGg6IGNhbGMoMTAwdncgLSAoMiAqIDFyZW0pKTtcbiAgaGVpZ2h0OiA0MHB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1sb2FkLW1vcmUgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAzMjBweDtcbiAgICBoZWlnaHQ6IDUwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXNrZWxldG9uLWxvYWQtbW9yZSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDMyMHB4O1xuICAgIGhlaWdodDogNTBweDtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1sb2FkLW1vcmUtMTAwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWhlYWRlciA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLXJvb20tYXZhaWxhYmlsaXR5ID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBtYXJnaW4tdG9wOiAwLjVyZW07XG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbiAgd2lkdGg6IGNhbGMoMTAwdncgLSAoMiAqIDFyZW0pKTtcbiAgaGVpZ2h0OiA0MHB4O1xuICBtYXgtd2lkdGg6IG5vbmU7XG4gIHdpZHRoOiAxMDAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1sb2FkLW1vcmUtMTAwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWhlYWRlciA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLXJvb20tYXZhaWxhYmlsaXR5ID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDUwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXNrZWxldG9uLWxvYWQtbW9yZS0xMDBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24taGVhZGVyID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tcm9vbS1hdmFpbGFiaWxpdHkgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiBub25lO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogNTBweDtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1sb2FkLW1vcmUtMTAwcCA+IC5sb2FkZXIubG9hZGVyLXJvb20tYXZhaWxhYmlsaXR5ID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24taGVhZGVyID4gLmxvYWRlci5sb2FkZXItcm9vbS1hdmFpbGFiaWxpdHkgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1yb29tLWF2YWlsYWJpbGl0eSA+IC5sb2FkZXIubG9hZGVyLXJvb20tYXZhaWxhYmlsaXR5ID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDEyNHB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG5cbi5tY2staGVhZGluZy01IHtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1zaXplOiAxLjVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjMzMztcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2staGVhZGluZy01IHtcbiAgICBmb250LXNpemU6IDEuNzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMTQyO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1oZWFkaW5nLTUge1xuICAgIGZvbnQtc2l6ZTogMS43NXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xNDI7XG4gIH1cbn1cblxubmd4LW1hdC1zZWxlY3Qtc2VhcmNoIC5tYXQtc2VsZWN0LXNlYXJjaC1uby1lbnRyaWVzLWZvdW5kIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxubmd4LW1hdC1zZWxlY3Qtc2VhcmNoIC5tYXQtc2VsZWN0LXNlYXJjaC1pbnB1dCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbm5neC1tYXQtc2VsZWN0LXNlYXJjaCBidXR0b24ubWF0LWJ1dHRvbi5tYXQtc2VsZWN0LXNlYXJjaC1jbGVhciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IG5vbmU7XG4gIGNvbG9yOiBibGFjaztcbn1cblxuOjotd2Via2l0LXNjcm9sbGJhciB7XG4gIHdpZHRoOiAxNnB4O1xuICBoZWlnaHQ6IDE4cHg7XG59XG5cbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICBoZWlnaHQ6IDEuNXJlbTtcbiAgYm9yZGVyOiA0cHggc29saWQgcmdiYSgwLCAwLCAwLCAwKTtcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzU3NTc1O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IC0xcHggLTFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjA1KSwgaW5zZXQgMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cblxuOjotd2Via2l0LXNjcm9sbGJhci1idXR0b24ge1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBkaXNwbGF5OiBub25lO1xufVxuXG46Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG5oZWFkZXIge1xuICB6LWluZGV4OiAyO1xufVxuXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWItYmxvY2sge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1iLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWItYm90dG9tIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTEwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWItYm90dG9tIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTEwcHg7XG4gIH1cbn1cblxuLm1hcC1maWx0ZXJzLWNvbnRhaW5lciAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgdG9wOiA1cHg7XG59XG4ubWFwLWZpbHRlcnMtY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gIGhlaWdodDogNDhweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG59XG4ubWFwLWZpbHRlcnMtY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICBwYWRkaW5nLXRvcDogMC41cmVtICFpbXBvcnRhbnQ7XG59XG5cbi5vZmZpY2UtbGV2ZWwtcm93IC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVyIHtcbiAgY29sb3I6ICMzMzMzMzM7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5vZmZpY2UtbGV2ZWwtcm93IC5sZWdlbmQtY29udGFpbmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAub2ZmaWNlLWxldmVsLXJvdyAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgIGhlaWdodDogNDVweCAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm9mZmljZS1sZXZlbC1yb3cgLmxlZ2VuZC1jb250YWluZXIgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsIC5vZmZpY2UtbGV2ZWwtcm93IC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgaGVpZ2h0OiA0NXB4ICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi5vZmZpY2UtbGV2ZWwtcm93IC5zZWxlY3QtZGl2aWRlciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB0b3A6IDAgIWltcG9ydGFudDtcbiAgd2lkdGg6IDQ0cHggIWltcG9ydGFudDtcbiAgcmlnaHQ6IC0xMXB4ICFpbXBvcnRhbnQ7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gIGJvcmRlci13aWR0aDogMCAwIDAgMXB4O1xuICBib3JkZXItY29sb3I6ICNjNmM2YzY7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAub2ZmaWNlLWxldmVsLXJvdyAuc2VsZWN0LWRpdmlkZXIge1xuICAgIGhlaWdodDogY2FsYygxMDAlIC0gMXB4KSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm9mZmljZS1sZXZlbC1yb3cgLnNlbGVjdC1kaXZpZGVyIHtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDFweCkgIWltcG9ydGFudDtcbiAgfVxufVxuLm9mZmljZS1sZXZlbC1yb3cgLmRpc2FibGVkIC5zZWxlY3QtZGl2aWRlciB7XG4gIGJhY2tncm91bmQ6ICNGMEYwRjAgIWltcG9ydGFudDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5vZmZpY2UtbGV2ZWwtcm93IC5kaXNhYmxlZCAuc2VsZWN0LWRpdmlkZXIge1xuICAgIGhlaWdodDogY2FsYygxMDAlIC0gMnB4KSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm9mZmljZS1sZXZlbC1yb3cgLmRpc2FibGVkIC5zZWxlY3QtZGl2aWRlciB7XG4gICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAycHgpICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi5vZmZpY2UtbGV2ZWwtcm93IC5kaXNhYmxlZCAuc2VsZWN0LWNoZXZyb24ge1xuICBvcGFjaXR5OiAwLjU7XG4gIG1hcmdpbi1sZWZ0OiAxMHB4O1xufVxuXG4ub2ZmaWNlLWxldmVsLXJvdyAubGVnZW5kLWNvbnRhaW5lciAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwgLm9mZmljZS1sZXZlbC1yb3cgLm1hdC1mb3JtLWZpZWxkLWluZml4LCAubWFwLWNvbnRyb2xzIC5sZWdlbmQtY29udGFpbmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAubWFwLWNvbnRyb2xzIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcbiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnQ7XG59XG5cbi5ib29raW5nLWZvcm0tY29udGFpbmVyIHtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDM0NXB4KTtcbn1cblxuLmJvb2tpbmctZm9ybS1jb250YWluZXIgLm1jay1mb3JtLWlucHV0IG1hdC1sYWJlbCwgLmJvb2tpbmctZm9ybS1jb250YWluZXIgLm1jay1mb3JtLWlucHV0IC5tYXQtcmFkaW8tbGFiZWwtY29udGVudCB7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIiAhaW1wb3J0YW50O1xuICBjb2xvcjogIzMzMzMzMztcbn1cbi5ib29raW5nLWZvcm0tY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dCBpbnB1dCwgLmJvb2tpbmctZm9ybS1jb250YWluZXIgLm1jay1mb3JtLWlucHV0IGlucHV0OjpwbGFjZWhvbGRlciB7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgY29sb3I6ICNCM0IzQjM7XG59XG5cbi5idXR0b24td3JhcHBlciB7XG4gIGZsZXgtYmFzaXM6IDEwMCU7XG4gIGp1c3RpZnktY29udGVudDogZW5kO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgei1pbmRleDogMjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5idXR0b24td3JhcHBlciB7XG4gICAgYm90dG9tOiAtMC41cmVtO1xuICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgcGFkZGluZy10b3A6IDEuNzVyZW07XG4gICAgcGFkZGluZy1ib3R0b206IDEuNzVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAuYnV0dG9uLXdyYXBwZXIge1xuICAgIGJvdHRvbTogLTAuNXJlbTtcbiAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgIHBhZGRpbmctdG9wOiAxLjc1cmVtO1xuICAgIHBhZGRpbmctYm90dG9tOiAxLjc1cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYnV0dG9uLXdyYXBwZXIuaGFzLWZpeGVkIHtcbiAgICB6LWluZGV4OiAyO1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5idXR0b24td3JhcHBlci5oYXMtZml4ZWQge1xuICAgIHotaW5kZXg6IDI7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuICB9XG59XG4uYnV0dG9uLXdyYXBwZXItc3BhY2VyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5idXR0b24td3JhcHBlciA+IC5idXR0b24tcm93IHtcbiAgICBwYWRkaW5nOiAxcmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJ1dHRvbi13cmFwcGVyID4gLmJ1dHRvbi1yb3cge1xuICAgIHBhZGRpbmc6IDFyZW07XG4gIH1cbn1cblxuLm1jay1tb2RhbC1wcmltYXJ5LWJ1dHRvbiB7XG4gIGZsZXg6IDE7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW46IDAgMC43NXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwtcHJpbWFyeS1idXR0b24ge1xuICAgIG1heC13aWR0aDogMzIwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAxMDQ4cHgpIHtcbiAgLm1jay1tb2RhbC1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgbWF4LXdpZHRoOiAzMjBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1tb2RhbC1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLW1vZGFsLXByaW1hcnktYnV0dG9uIHtcbiAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgfVxufVxuXG4ubWNrLW1vZGFsLXNlY29uZGFyeS1idXR0b24ge1xuICBmbGV4OiAxO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwIDAuNzVyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA4MDBweCkge1xuICAubWNrLW1vZGFsLXNlY29uZGFyeS1idXR0b24ge1xuICAgIG1heC13aWR0aDogMzIwcHg7XG4gICAgbWFyZ2luLXJpZ2h0OiAwIDAuNzVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAxMDQ4cHgpIHtcbiAgLm1jay1tb2RhbC1zZWNvbmRhcnktYnV0dG9uIHtcbiAgICBtYXgtd2lkdGg6IDMyMHB4O1xuICAgIG1hcmdpbi1yaWdodDogMCAwLjc1cmVtO1xuICB9XG59XG5cbi5zbWFsbC1idXR0b25zIC5tY2stbW9kYWwtcHJpbWFyeS1idXR0b24ge1xuICBmbGV4OiAxO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwIDAuNzVyZW07XG4gIG1heC13aWR0aDogMTM0cHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuc21hbGwtYnV0dG9ucyAubWNrLW1vZGFsLXByaW1hcnktYnV0dG9uIHtcbiAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5zbWFsbC1idXR0b25zIC5tY2stbW9kYWwtcHJpbWFyeS1idXR0b24ge1xuICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICB9XG59XG4uc21hbGwtYnV0dG9ucyAubWNrLW1vZGFsLXNlY29uZGFyeS1idXR0b24ge1xuICBmbGV4OiAxO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwIDAuNzVyZW07XG4gIG1heC13aWR0aDogMTM0cHg7XG4gIG1hcmdpbi1yaWdodDogMCAwLjc1cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLnNtYWxsLWJ1dHRvbnMgLm1jay1tb2RhbC1zZWNvbmRhcnktYnV0dG9uIHtcbiAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5zbWFsbC1idXR0b25zIC5tY2stbW9kYWwtc2Vjb25kYXJ5LWJ1dHRvbiB7XG4gICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gIH1cbn0iLCJAaW1wb3J0IFwidmFyc1wiO1xuXG5AbWl4aW4gcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkc2l6ZSwgJHF1YWxpZmllcikge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQGlmICgkcXVhbGlmaWVyID09IG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2UgaWYgKCRxdWFsaWZpZXIgPT0gbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1heC13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuQG1peGluIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkbWluLCAkbWF4KSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyB0aGlzIGlzIGEgY29weSBvZiByZXNwb25kLXRvLiB3ZSBkb24ndCB3YW50IHRvIHByZXNlcnZlIHRoYXQgbWV0aG9kIHNpbmNlIHRoZSBicmVha3BvaW50cyBtYXkgZGl2ZXJnZSBmcm9tIHRoZSBvbGQgVUkuXG5AbWl4aW4gaXMtc2NyZWVuLXNpemUoJG1lZGlhOiBhbGwsICRvcmllbnRhdGlvbjogbm9uZSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5cbkBtaXhpbiBwYWdlLXBhZGRpbmcge1xuICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctc21hbGw7XG4gICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctc21hbGw7XG59XG5cbi8vIEZvbnQgTWl4aW5zXG4kZm9udC1tY2tpbnNleS1zYW5zOiBcIk1jS2luc2V5IFNhbnNcIjtcbiRmb250LXRoZWluaGFyZHQ6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuJGZvbnQtYm93ZXI6IFwiQm93ZXJcIjtcblxuQG1peGluIGJvd2VyLWJvbGQge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1ib3dlcjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gbWNraW5zZXktc2FucyB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIGRpc3BsYXktMSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNHJlbTsgLy8gNjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODc7IC8vIDc2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTIge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTMge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2MHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNCB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDNyZW07IC8vIDQ4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNjY7IC8vIDU2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjRweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMwcHhcbiAgICBsaW5lLWhlaWdodDogMS44MzM7IC8vIDM0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY0MjsgLy8gNDBweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0xIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNDhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNzVyZW07IC8vIDQ0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA1MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0yIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjExMTsgLy8gNDRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDQ4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTMge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMjI7IC8vIDQ0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTUge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTYge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTU7IC8vIDI4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBib2R5LWRlZmF1bHQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjZweFxuICAgIH1cbn1cblxuLy8vIERvZXNudCBleGlzdCBpbiBNRFMuXG5AbWl4aW4gYm9keS10aW55IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTsgLy8gMTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDIwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBmb3JtLWxhYmVsIHtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC10aGVpbmhhcmR0O1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBjb2xvcjogJHBsYWNlaG9sZGVyLWNvbG9yO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG59XG5cbkBtaXhpbiBjaGlwLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gY2hlY2tib3gtbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICBjb2xvcjogYmxhY2s7XG59XG5cbi8vIGJvcmRlcnNcblxuQG1peGluIG1jay1jaGVja2JveC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stdGhpbi1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYm9yZGVyLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQtbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlci1saWdodDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cblxuLy8gZnVuY3Rpb25zXG5cbi8qKlxuICogTWFrZXMgdGV4dCBoYXZlIG1heGltdW0gbGluZXMgd2l0aCBlbGxpcHNpcy4gV29ya3Mgb24gbW9zdCBtb2Rlcm4gYnJvd3NlcnMgZXhjZXB0XG4gKiBvZiBGaXJlZm94Li5cbiAqL1xuQG1peGluIG1heC1saW5lcygkY291bnQpIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIC13ZWJraXQtbGluZS1jbGFtcDogJGNvdW50O1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG59XG5cbi8vIGltYWdlc1xuQG1peGluIG1jay1pY29uKCR3aWR0aCwgJGFzc2V0LCAkaGVpZ2h0OiAkd2lkdGgsICAkYXNzZXRQYXRoOiBcImxpYnMvdWkvc3JjL2xpYi9pY29uc1wiLCkge1xuICAgIHdpZHRoOiAkd2lkdGg7XG4gICAgaGVpZ2h0OiAkaGVpZ2h0O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiN7JGFzc2V0UGF0aH0vI3skYXNzZXR9XCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbn1cblxuXG5AbWl4aW4gbWNrLXNtYWxsLWljb24oJG1vYmlsZS1hc3NldCwgJGRlc2t0b3AtYXNzZXQ6ICRtb2JpbGUtYXNzZXQpIHtcbiAgICBAaW5jbHVkZSBtY2staWNvbigxNnB4LCAkYXNzZXQ6ICRtb2JpbGUtYXNzZXQpO1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBAaW5jbHVkZSBtY2staWNvbigyNHB4LCAkYXNzZXQ6ICRkZXNrdG9wLWFzc2V0KTtcbiAgICB9XG59XG5cbi8vIHNrZWxldG9uXG5AbWl4aW4gc2tlbGV0b24tYmcge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1pbWFnZS1zaXplIHtcbiAgICB3aWR0aDogODFweDtcbiAgICBoZWlnaHQ6IDgycHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAyMTlweDtcbiAgICAgICAgaGVpZ2h0OiAxMTlweDtcbiAgICB9XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1zdGF0dXMtc2l6ZSB7XG4gICAgd2lkdGg6IDExN3B4O1xuICAgIGhlaWdodDogNzhweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDExN3B4O1xuICAgICAgICBoZWlnaHQ6IDc4cHg7XG4gICAgfVxufVxuIiwiLy8gSW1wb3J0IGFsbCB0aGUgdGhlbWluZyBmdW5jdGlvbmFsaXR5LlxuLy8gV2Ugd2FudCBvdmVybGF5cyB0byBhbHdheXMgYXBwZWFyIG92ZXIgdXNlciBjb250ZW50LCBzbyBzZXQgYSBiYXNlbGluZVxuLy8gdmVyeSBoaWdoIHotaW5kZXggZm9yIHRoZSBvdmVybGF5IGNvbnRhaW5lciwgd2hpY2ggaXMgd2hlcmUgd2UgY3JlYXRlIHRoZSBuZXdcbi8vIHN0YWNraW5nIGNvbnRleHQgZm9yIGFsbCBvdmVybGF5cy5cbiRjZGstei1pbmRleC1vdmVybGF5LWNvbnRhaW5lcjogMTAwMCAhZGVmYXVsdDtcbiRjZGstei1pbmRleC1vdmVybGF5OiAxMDAwICFkZWZhdWx0O1xuJGNkay16LWluZGV4LW92ZXJsYXktYmFja2Ryb3A6IDEwMDAgIWRlZmF1bHQ7XG5cbi8vIEJhY2tncm91bmQgY29sb3IgZm9yIGFsbCBvZiB0aGUgYmFja2Ryb3BzXG4kY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcC1iYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMzIpICFkZWZhdWx0O1xuXG4vLyBEZWZhdWx0IGJhY2tkcm9wIGFuaW1hdGlvbiBpcyBiYXNlZCBvbiB0aGUgTWF0ZXJpYWwgRGVzaWduIHN3aWZ0LWVhc2Utb3V0LlxuJGJhY2tkcm9wLWFuaW1hdGlvbi1kdXJhdGlvbjogNDAwbXMgIWRlZmF1bHQ7XG4kYmFja2Ryb3AtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSkgIWRlZmF1bHQ7XG5cblxuQG1peGluIGNkay1vdmVybGF5KCkge1xuICAuY2RrLW92ZXJsYXktY29udGFpbmVyLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXIge1xuICAgIC8vIERpc2FibGUgZXZlbnRzIGZyb20gYmVpbmcgY2FwdHVyZWQgb24gdGhlIG92ZXJsYXkgY29udGFpbmVyLlxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuXG4gICAgLy8gVGhlIGNvbnRhaW5lciBzaG91bGQgYmUgdGhlIHNpemUgb2YgdGhlIHZpZXdwb3J0LlxuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuXG4gIC8vIFRoZSBvdmVybGF5LWNvbnRhaW5lciBpcyBhbiBpbnZpc2libGUgZWxlbWVudCB3aGljaCBjb250YWlucyBhbGwgaW5kaXZpZHVhbCBvdmVybGF5cy5cbiAgLmNkay1vdmVybGF5LWNvbnRhaW5lciB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHotaW5kZXg6ICRjZGstei1pbmRleC1vdmVybGF5LWNvbnRhaW5lcjtcblxuICAgICY6ZW1wdHkge1xuICAgICAgLy8gSGlkZSB0aGUgZWxlbWVudCB3aGVuIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgY2hpbGQgbm9kZXMuIFRoaXMgZG9lc24ndFxuICAgICAgLy8gaW5jbHVkZSBvdmVybGF5cyB0aGF0IGhhdmUgYmVlbiBkZXRhY2hlZCwgcmF0aGVyIHRoYW4gZGlzcG9zZWQuXG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdlIHVzZSBhbiBleHRyYSB3cmFwcGVyIGVsZW1lbnQgaW4gb3JkZXIgdG8gdXNlIG1ha2UgdGhlIG92ZXJsYXkgaXRzZWxmIGEgZmxleCBpdGVtLlxuICAvLyBUaGlzIG1ha2VzIGNlbnRlcmluZyB0aGUgb3ZlcmxheSBlYXN5IHdpdGhvdXQgcnVubmluZyBpbnRvIHRoZSBzdWJwaXhlbCByZW5kZXJpbmdcbiAgLy8gcHJvYmxlbXMgdGllZCB0byB1c2luZyBgdHJhbnNmb3JtYCBhbmQgd2l0aG91dCBpbnRlcmZlcmluZyB3aXRoIHRoZSBvdGhlciBwb3NpdGlvblxuICAvLyBzdHJhdGVnaWVzLlxuICAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHotaW5kZXg6ICRjZGstei1pbmRleC1vdmVybGF5O1xuICB9XG5cbiAgLy8gQSBzaW5nbGUgb3ZlcmxheSBwYW5lLlxuICAuY2RrLW92ZXJsYXktcGFuZSB7XG4gICAgLy8gTm90ZTogaXQncyBpbXBvcnRhbnQgZm9yIHRoaXMgb25lIHRvIHN0YXJ0IG9mZiBgYWJzb2x1dGVgLFxuICAgIC8vIGluIG9yZGVyIGZvciB1cyB0byBiZSBhYmxlIHRvIG1lYXN1cmUgaXQgY29ycmVjdGx5LlxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIHotaW5kZXg6ICRjZGstei1pbmRleC1vdmVybGF5O1xuXG4gICAgLy8gRm9yIGNvbm5lY3RlZC1wb3NpdGlvbiBvdmVybGF5cywgd2Ugc2V0IGBkaXNwbGF5OiBmbGV4YCBpblxuICAgIC8vIG9yZGVyIHRvIGZvcmNlIGBtYXgtd2lkdGhgIGFuZCBgbWF4LWhlaWdodGAgdG8gdGFrZSBlZmZlY3QuXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgbWF4LWhlaWdodDogMTAwJTtcbiAgfVxuXG4gIC5jZGstb3ZlcmxheS1iYWNrZHJvcCB7XG4gICAgLy8gVE9ETyhqZWxib3Vybik6IHJldXNlIHNpZGVuYXYgZnVsbHNjcmVlbiBtaXhpbi5cbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuXG4gICAgei1pbmRleDogJGNkay16LWluZGV4LW92ZXJsYXktYmFja2Ryb3A7XG4gICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5ICRiYWNrZHJvcC1hbmltYXRpb24tZHVyYXRpb24gJGJhY2tkcm9wLWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb247XG4gICAgb3BhY2l0eTogMDtcblxuICAgICYuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyB7XG4gICAgICBvcGFjaXR5OiAxO1xuXG4gICAgICAvLyBJbiBoaWdoIGNvbnRyYXN0IG1vZGUgdGhlIHJnYmEgYmFja2dyb3VuZCB3aWxsIGJlY29tZSBzb2xpZCBzbyB3ZSBuZWVkIHRvIGZhbGwgYmFja1xuICAgICAgLy8gdG8gbWFraW5nIGl0IG9wYXF1ZSB1c2luZyBgb3BhY2l0eWAuIE5vdGUgdGhhdCB3ZSBjYW4ndCB1c2UgdGhlIGBjZGstaGlnaC1jb250cmFzdGBcbiAgICAgIC8vIG1peGluLCBiZWNhdXNlIHdlIGNhbid0IG5vcm1hbGl6ZSB0aGUgaW1wb3J0IHBhdGggdG8gdGhlIF9hMTF5LnNjc3MgYm90aCBmb3IgdGhlXG4gICAgICAvLyBzb3VyY2UgYW5kIHdoZW4gdGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkLiBTZWUgIzEwOTA4LlxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpIHtcbiAgICAgICAgb3BhY2l0eTogMC42O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wIHtcbiAgICBiYWNrZ3JvdW5kOiAkY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcC1iYWNrZ3JvdW5kO1xuICB9XG5cbiAgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wIHtcbiAgICAvLyBOb3RlOiBhcyBvZiBGaXJlZm94IDU3LCBoYXZpbmcgdGhlIGJhY2tkcm9wIGJlIGBiYWNrZ3JvdW5kOiBub25lYCB3aWxsIHByZXZlbnQgaXQgZnJvbVxuICAgIC8vIGNhcHR1cmluZyB0aGUgdXNlcidzIG1vdXNlIHNjcm9sbCBldmVudHMuIFNpbmNlIHdlIGFsc28gY2FuJ3QgdXNlIHNvbWV0aGluZyBsaWtlXG4gICAgLy8gYHJnYmEoMCwgMCwgMCwgMClgLCB3ZSB3b3JrIGFyb3VuZCB0aGUgaW5jb25zaXN0ZW5jeSBieSBub3Qgc2V0dGluZyB0aGUgYmFja2dyb3VuZCBhdFxuICAgIC8vIGFsbCBhbmQgdXNpbmcgYG9wYWNpdHlgIHRvIG1ha2UgdGhlIGVsZW1lbnQgdHJhbnNwYXJlbnQuXG4gICAgJiwgJi5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIHtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICB9XG5cbiAgLy8gT3ZlcmxheSBwYXJlbnQgZWxlbWVudCB1c2VkIHdpdGggdGhlIGNvbm5lY3RlZCBwb3NpdGlvbiBzdHJhdGVneS4gVXNlZCB0byBjb25zdHJhaW4gdGhlXG4gIC8vIG92ZXJsYXkgZWxlbWVudCdzIHNpemUgdG8gZml0IHdpdGhpbiB0aGUgdmlld3BvcnQuXG4gIC5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogJGNkay16LWluZGV4LW92ZXJsYXk7XG5cbiAgICAvLyBXZSB1c2UgYGRpc3BsYXk6IGZsZXhgIG9uIHRoaXMgZWxlbWVudCBleGNsdXNpdmVseSBmb3IgY2VudGVyaW5nIGNvbm5lY3RlZCBvdmVybGF5cy5cbiAgICAvLyBXaGVuICpub3QqIGNlbnRlcmluZywgYSB0b3AvbGVmdC9ib3R0b20vcmlnaHQgd2lsbCBiZSBzZXQgd2hpY2ggb3ZlcnJpZGVzIHRoZSBub3JtYWxcbiAgICAvLyBmbGV4IGxheW91dC5cbiAgICBkaXNwbGF5OiBmbGV4O1xuXG4gICAgLy8gV2UgdXNlIHRoZSBgY29sdW1uYCBkaXJlY3Rpb24gaGVyZSB0byBhdm9pZCBzb21lIGZsZXhib3ggaXNzdWVzIGluIEVkZ2VcbiAgICAvLyB3aGVuIHVzaW5nIHRoZSBcImdyb3cgYWZ0ZXIgb3BlblwiIG9wdGlvbnMuXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuICAgIC8vIEFkZCBzb21lIGRpbWVuc2lvbnMgc28gdGhlIGVsZW1lbnQgaGFzIGFuIGBpbm5lclRleHRgIHdoaWNoIHNvbWUgcGVvcGxlIGRlcGVuZCBvbiBpbiB0ZXN0cy5cbiAgICBtaW4td2lkdGg6IDFweDtcbiAgICBtaW4taGVpZ2h0OiAxcHg7XG4gIH1cblxuICAvLyBVc2VkIHdoZW4gZGlzYWJsaW5nIGdsb2JhbCBzY3JvbGxpbmcuXG4gIC5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG5cbiAgICAvLyBOZWNlc3NhcnkgZm9yIHRoZSBjb250ZW50IG5vdCB0byBsb3NlIGl0cyB3aWR0aC4gTm90ZSB0aGF0IHdlJ3JlIHVzaW5nIDEwMCUsIGluc3RlYWQgb2ZcbiAgICAvLyAxMDB2dywgYmVjYXVzZSAxMDB2dyBpbmNsdWRlcyB0aGUgd2lkdGggcGx1cyB0aGUgc2Nyb2xsYmFyLCB3aGVyZWFzIDEwMCUgaXMgdGhlIHdpZHRoXG4gICAgLy8gdGhhdCB0aGUgZWxlbWVudCBoYWQgYmVmb3JlIHdlIG1hZGUgaXQgYGZpeGVkYC5cbiAgICB3aWR0aDogMTAwJTtcblxuICAgIC8vIE5vdGU6IHRoaXMgd2lsbCBhbHdheXMgYWRkIGEgc2Nyb2xsYmFyIHRvIHdoYXRldmVyIGVsZW1lbnQgaXQgaXMgb24sIHdoaWNoIGNhblxuICAgIC8vIHBvdGVudGlhbGx5IHJlc3VsdCBpbiBkb3VibGUgc2Nyb2xsYmFycy4gSXQgc2hvdWxkbid0IGJlIGFuIGlzc3VlLCBiZWNhdXNlIHdlIHdvbid0XG4gICAgLy8gYmxvY2sgc2Nyb2xsaW5nIG9uIGEgcGFnZSB0aGF0IGRvZXNuJ3QgaGF2ZSBhIHNjcm9sbGJhciBpbiB0aGUgZmlyc3QgcGxhY2UuXG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICB9XG59XG5cbkBtaXhpbiBjZGstYTExeSB7XG4gIC5jZGstdmlzdWFsbHktaGlkZGVuIHtcbiAgICBib3JkZXI6IDA7XG4gICAgY2xpcDogcmVjdCgwIDAgMCAwKTtcbiAgICBoZWlnaHQ6IDFweDtcbiAgICBtYXJnaW46IC0xcHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwYWRkaW5nOiAwO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMXB4O1xuXG4gICAgLy8gQXZvaWQgYnJvd3NlcnMgcmVuZGVyaW5nIHRoZSBmb2N1cyByaW5nIGluIHNvbWUgY2FzZXMuXG4gICAgb3V0bGluZTogMDtcblxuICAgIC8vIEF2b2lkIHNvbWUgY2FzZXMgd2hlcmUgdGhlIGJyb3dzZXIgd2lsbCBzdGlsbCByZW5kZXIgdGhlIG5hdGl2ZSBjb250cm9scyAoc2VlICM5MDQ5KS5cbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xuICB9XG59XG5cbi8vLyBFbWl0cyB0aGUgbWl4aW4ncyBjb250ZW50IG5lc3RlZCB1bmRlciBgJHNlbGVjdG9yLWNvbnRleHRgIGlmIGAkc2VsZWN0b3ItY29udGV4dGBcbi8vLyBpcyBub24tZW1wdHkuXG4vLy8gQHBhcmFtIHNlbGVjdG9yLWNvbnRleHQgVGhlIHNlbGVjdG9yIHVuZGVyIHdoaWNoIHRvIG5lc3QgdGhlIG1peGluJ3MgY29udGVudC5cbkBtaXhpbiBfY2RrLW9wdGlvbmFsbHktbmVzdC1jb250ZW50KCRzZWxlY3Rvci1jb250ZXh0KSB7XG4gIEBpZiAoJHNlbGVjdG9yLWNvbnRleHQgPT0gJycpIHtcbiAgICBAY29udGVudDtcbiAgfVxuICBAZWxzZSB7XG4gICAgI3skc2VsZWN0b3ItY29udGV4dH0ge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9XG59XG5cbi8vLyBBcHBsaWVzIHN0eWxlcyBmb3IgdXNlcnMgaW4gaGlnaCBjb250cmFzdCBtb2RlLiBOb3RlIHRoYXQgdGhpcyBvbmx5IGFwcGxpZXNcbi8vLyB0byBNaWNyb3NvZnQgYnJvd3NlcnMuIENocm9tZSBjYW4gYmUgaW5jbHVkZWQgYnkgY2hlY2tpbmcgZm9yIHRoZSBgaHRtbFtoY11gXG4vLy8gYXR0cmlidXRlLCBob3dldmVyIENocm9tZSBoYW5kbGVzIGhpZ2ggY29udHJhc3QgZGlmZmVyZW50bHkuXG4vLy9cbi8vLyBAcGFyYW0gdGFyZ2V0IFdoaWNoIGtpbmQgb2YgaGlnaCBjb250cmFzdCBzZXR0aW5nIHRvIHRhcmdldC4gRGVmYXVsdHMgdG8gYGFjdGl2ZWAsIGNhbiBiZVxuLy8vICAgIGB3aGl0ZS1vbi1ibGFja2Agb3IgYGJsYWNrLW9uLXdoaXRlYC5cbi8vLyBAcGFyYW0gZW5jYXBzdWxhdGlvbiBXaGV0aGVyIHRvIGVtaXQgc3R5bGVzIGZvciB2aWV3IGVuY2Fwc3VsYXRpb24uIFZhbHVlcyBhcmU6XG4vLy8gICAgICogYG9uYCAtIHdvcmtzIGZvciBgRW11bGF0ZWRgLCBgTmF0aXZlYCwgYW5kIGBTaGFkb3dEb21gXG4vLy8gICAgICogYG9mZmAgLSB3b3JrcyBmb3IgYE5vbmVgXG4vLy8gICAgICogYGFueWAgLSB3b3JrcyBmb3IgYWxsIGVuY2Fwc3VsYXRpb24gbW9kZXMgYnkgZW1pdHRpbmcgdGhlIENTUyB0d2ljZSAoZGVmYXVsdCkuXG5AbWl4aW4gY2RrLWhpZ2gtY29udHJhc3QoJHRhcmdldDogYWN0aXZlLCAkZW5jYXBzdWxhdGlvbjogJ2FueScpIHtcbiAgQGlmICgkdGFyZ2V0ICE9ICdhY3RpdmUnIGFuZCAkdGFyZ2V0ICE9ICdibGFjay1vbi13aGl0ZScgYW5kICR0YXJnZXQgIT0gJ3doaXRlLW9uLWJsYWNrJykge1xuICAgIEBlcnJvciAnVW5rbm93biBjZGstaGlnaC1jb250cmFzdCB2YWx1ZSBcIiN7JHRhcmdldH1cIiBwcm92aWRlZC4gJyArXG4gICAgICAgICAgICdBbGxvd2VkIHZhbHVlcyBhcmUgXCJhY3RpdmVcIiwgXCJibGFjay1vbi13aGl0ZVwiLCBhbmQgXCJ3aGl0ZS1vbi1ibGFja1wiJztcbiAgfVxuXG4gIEBpZiAoJGVuY2Fwc3VsYXRpb24gIT0gJ29uJyBhbmQgJGVuY2Fwc3VsYXRpb24gIT0gJ29mZicgYW5kICRlbmNhcHN1bGF0aW9uICE9ICdhbnknKSB7XG4gICAgQGVycm9yICdVbmtub3duIGNkay1oaWdoLWNvbnRyYXN0IGVuY2Fwc3VsYXRpb24gXCIjeyRlbmNhcHN1bGF0aW9ufVwiIHByb3ZpZGVkLiAnICtcbiAgICAgICAgICAgJ0FsbG93ZWQgdmFsdWVzIGFyZSBcIm9uXCIsIFwib2ZmXCIsIGFuZCBcImFueVwiJztcbiAgfVxuXG4gIC8vIElmIHRoZSBzZWxlY3RvciBjb250ZXh0IGhhcyBtdWx0aXBsZSBwYXJ0cywgc3VjaCBhcyBgLnNlY3Rpb24sIC5yZWdpb25gLCBqdXN0IGRvaW5nXG4gIC8vIGAuY2RrLWhpZ2gtY29udHJhc3QteHh4ICN7Jn1gIHdpbGwgb25seSBhcHBseSB0aGUgcGFyZW50IHNlbGVjdG9yIHRvIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZVxuICAvLyBjb250ZXh0LiBXZSBhZGRyZXNzIHRoaXMgYnkgbmVzdGluZyB0aGUgc2VsZWN0b3IgY29udGV4dCB1bmRlciAuY2RrLWhpZ2gtY29udHJhc3QuXG4gIEBhdC1yb290IHtcbiAgICAkc2VsZWN0b3ItY29udGV4dDogI3smfTtcblxuICAgIEBpZiAoJGVuY2Fwc3VsYXRpb24gIT0gJ29uJykge1xuICAgICAgLmNkay1oaWdoLWNvbnRyYXN0LSN7JHRhcmdldH0ge1xuICAgICAgICBAaW5jbHVkZSBfY2RrLW9wdGlvbmFsbHktbmVzdC1jb250ZW50KCRzZWxlY3Rvci1jb250ZXh0KSB7XG4gICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBAaWYgKCRlbmNhcHN1bGF0aW9uICE9ICdvZmYnKSB7XG4gICAgICAuY2RrLWhpZ2gtY29udHJhc3QtI3skdGFyZ2V0fSA6aG9zdCB7XG4gICAgICAgIEBpbmNsdWRlIF9jZGstb3B0aW9uYWxseS1uZXN0LWNvbnRlbnQoJHNlbGVjdG9yLWNvbnRleHQpIHtcbiAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBDb3JlIHN0eWxlcyB0aGF0IGVuYWJsZSBtb25pdG9yaW5nIGF1dG9maWxsIHN0YXRlIG9mIHRleHQgZmllbGRzLlxuQG1peGluIGNkay10ZXh0LWZpZWxkIHtcbiAgLy8gS2V5ZnJhbWVzIHRoYXQgYXBwbHkgbm8gc3R5bGVzLCBidXQgYWxsb3cgdXMgdG8gbW9uaXRvciB3aGVuIGFuIHRleHQgZmllbGQgYmVjb21lcyBhdXRvZmlsbGVkXG4gIC8vIGJ5IHdhdGNoaW5nIGZvciB0aGUgYW5pbWF0aW9uIGV2ZW50cyB0aGF0IGFyZSBmaXJlZCB3aGVuIHRoZXkgc3RhcnQuIE5vdGU6IHRoZSAvKiEqLyBjb21tZW50IGlzXG4gIC8vIG5lZWRlZCB0byBwcmV2ZW50IExpYlNhc3MgZnJvbSBzdHJpcHBpbmcgdGhlIGtleWZyYW1lcyBvdXQuXG4gIC8vIEJhc2VkIG9uOiBodHRwczovL21lZGl1bS5jb20vQGJydW5uL2RldGVjdGluZy1hdXRvZmlsbGVkLWZpZWxkcy1pbi1qYXZhc2NyaXB0LWFlZDU5OGQyNWRhN1xuICBAa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IHsvKiEqL31cbiAgQGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgey8qISovfVxuXG4gIC5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWQ6LXdlYmtpdC1hdXRvZmlsbCB7XG4gICAgLy8gU2luY2UgQ2hyb21lIDgwIHdlIG5lZWQgYSAxbXMgZGVsYXksIG9yIHRoZSBhbmltYXRpb25zdGFydCBldmVudCB3b24ndCBmaXJlLlxuICAgIGFuaW1hdGlvbjogY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zO1xuICB9XG5cbiAgLmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDpub3QoOi13ZWJraXQtYXV0b2ZpbGwpIHtcbiAgICAvLyBTaW5jZSBDaHJvbWUgODAgd2UgbmVlZCBhIDFtcyBkZWxheSwgb3IgdGhlIGFuaW1hdGlvbnN0YXJ0IGV2ZW50IHdvbid0IGZpcmUuXG4gICAgYW5pbWF0aW9uOiBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zO1xuICB9XG5cbiAgLy8gUmVtb3ZlIHRoZSByZXNpemUgaGFuZGxlIG9uIGF1dG9zaXppbmcgdGV4dGFyZWFzLCBiZWNhdXNlIHdoYXRldmVyIGhlaWdodFxuICAvLyB0aGUgdXNlciByZXNpemVkIHRvIHdpbGwgYmUgb3ZlcndyaXR0ZW4gb25jZSB0aGV5IHN0YXJ0IHR5cGluZyBhZ2Fpbi5cbiAgdGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplIHtcbiAgICByZXNpemU6IG5vbmU7XG4gIH1cblxuICAvLyBUaGlzIGNsYXNzIGlzIHRlbXBvcmFyaWx5IGFwcGxpZWQgdG8gdGhlIHRleHRhcmVhIHdoZW4gaXQgaXMgYmVpbmcgbWVhc3VyZWQuIEl0IGlzIGltbWVkaWF0ZWx5XG4gIC8vIHJlbW92ZWQgd2hlbiBtZWFzdXJpbmcgaXMgY29tcGxldGUuIFdlIHVzZSBgIWltcG9ydGFudGAgcnVsZXMgaGVyZSB0byBtYWtlIHN1cmUgdXNlci1zcGVjaWZpZWRcbiAgLy8gcnVsZXMgZG8gbm90IGludGVyZmVyZSB3aXRoIHRoZSBtZWFzdXJlbWVudC5cbiAgdGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZyB7XG4gICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xuICAgIC8vIEhhdmluZyAycHggdG9wIGFuZCBib3R0b20gcGFkZGluZyBzZWVtcyB0byBmaXggYSBidWcgd2hlcmUgQ2hyb21lIGdldHMgYW4gaW5jb3JyZWN0XG4gICAgLy8gbWVhc3VyZW1lbnQuIFdlIGp1c3QgaGF2ZSB0byBhY2NvdW50IGZvciBpdCBsYXRlciBhbmQgc3VidHJhY3QgaXQgb2ZmIHRoZSBmaW5hbCByZXN1bHQuXG4gICAgcGFkZGluZzogMnB4IDAgIWltcG9ydGFudDtcbiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveCAhaW1wb3J0YW50O1xuICB9XG59XG5cbi8vIFVzZWQgdG8gZ2VuZXJhdGUgVUlEcyBmb3Iga2V5ZnJhbWVzIHVzZWQgdG8gY2hhbmdlIHRoZSB0ZXh0IGZpZWxkIGF1dG9maWxsIHN0eWxlcy5cbiRjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci1mcmFtZS1jb3VudDogMDtcblxuLy8gTWl4aW4gdXNlZCB0byBhcHBseSBjdXN0b20gYmFja2dyb3VuZCBhbmQgZm9yZWdyb3VuZCBjb2xvcnMgdG8gYW4gYXV0b2ZpbGxlZCB0ZXh0IGZpZWxkLlxuLy8gQmFzZWQgb246IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI3ODE1NDkvXG4vLyByZW1vdmluZy1pbnB1dC1iYWNrZ3JvdW5kLWNvbG91ci1mb3ItY2hyb21lLWF1dG9jb21wbGV0ZSNhbnN3ZXItMzc0MzIyNjBcbkBtaXhpbiBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvcigkYmFja2dyb3VuZCwgJGZvcmVncm91bmQ6JycpIHtcbiAgQGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci0jeyRjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci1mcmFtZS1jb3VudH0ge1xuICAgIHRvIHtcbiAgICAgIGJhY2tncm91bmQ6ICRiYWNrZ3JvdW5kO1xuICAgICAgQGlmICRmb3JlZ3JvdW5kICE9ICcnIHsgY29sb3I6ICRmb3JlZ3JvdW5kOyB9XG4gICAgfVxuICB9XG5cbiAgJjotd2Via2l0LWF1dG9maWxsIHtcbiAgICBhbmltYXRpb246IGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLSN7JGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLWZyYW1lLWNvdW50fSBib3RoO1xuICB9XG5cbiAgJi5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWQ6LXdlYmtpdC1hdXRvZmlsbCB7XG4gICAgLy8gU2luY2UgQ2hyb21lIDgwIHdlIG5lZWQgYSAxbXMgZGVsYXkgZm9yIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0LCBvciB0aGUgYW5pbWF0aW9uc3RhcnRcbiAgICAvLyBldmVudCB3b24ndCBmaXJlLlxuICAgIGFuaW1hdGlvbjogY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zLFxuICAgICAgICAgICAgICAgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItI3skY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItZnJhbWUtY291bnR9IGJvdGg7XG4gIH1cblxuICAkY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItZnJhbWUtY291bnQ6XG4gICAgICAkY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItZnJhbWUtY291bnQgKyAxICFnbG9iYWw7XG59XG5cblxuLy8gQ29yZSBzdHlsZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBhcHBseSBtYXRlcmlhbCBkZXNpZ24gdHJlYXRtZW50cyB0byBhbnkgZWxlbWVudC5cbi8vIE1lZGlhIHF1ZXJpZXNcbi8vIFRPRE8oam9zZXBocGVycm90dCk6IENoYW5nZSAkbWF0LXhzbWFsbCBhbmQgJG1hdC1zbWFsbCB1c2FnZXMgdG8gcmVseSBvbiBCcmVha3BvaW50T2JzZXJ2ZXIsXG4kbWF0LXhzbWFsbDogJ21heC13aWR0aDogNTk5cHgnO1xuJG1hdC1zbWFsbDogJ21heC13aWR0aDogOTU5cHgnO1xuXG4vLyBUT0RPOiBSZXZpc2l0IGFsbCB6LWluZGljZXMgYmVmb3JlIGJldGFcbi8vIHotaW5kZXggbWFzdGVyIGxpc3RcblxuJHotaW5kZXgtZmFiOiAyMCAhZGVmYXVsdDtcbiR6LWluZGV4LWRyYXdlcjogMTAwICFkZWZhdWx0O1xuXG4vLyBHbG9iYWwgY29uc3RhbnRzXG4kcGk6IDMuMTQxNTkyNjU7XG5cbi8vIFBhZGRpbmcgYmV0d2VlbiBpbnB1dCB0b2dnbGVzIGFuZCB0aGVpciBsYWJlbHNcbiRtYXQtdG9nZ2xlLXBhZGRpbmc6IDhweCAhZGVmYXVsdDtcbi8vIFdpZHRoIGFuZCBoZWlnaHQgb2YgaW5wdXQgdG9nZ2xlc1xuJG1hdC10b2dnbGUtc2l6ZTogMjBweCAhZGVmYXVsdDtcblxuLy8gRWFzaW5nIEN1cnZlc1xuLy8gVE9ETyhqZWxib3Vybik6IGFsbCBvZiB0aGVzZSBuZWVkIHRvIGJlIHJldmlzaXRlZFxuXG4vLyBUaGUgZGVmYXVsdCBhbmltYXRpb24gY3VydmVzIHVzZWQgYnkgbWF0ZXJpYWwgZGVzaWduLlxuJG1hdC1saW5lYXItb3V0LXNsb3ctaW4tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpICFkZWZhdWx0O1xuJG1hdC1mYXN0LW91dC1zbG93LWluLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSAhZGVmYXVsdDtcbiRtYXQtZmFzdC1vdXQtbGluZWFyLWluLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMSwgMSkgIWRlZmF1bHQ7XG5cbiRlYXNlLWluLW91dC1jdXJ2ZS1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpICFkZWZhdWx0O1xuXG4kc3dpZnQtZWFzZS1vdXQtZHVyYXRpb246IDQwMG1zICFkZWZhdWx0O1xuJHN3aWZ0LWVhc2Utb3V0LXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSkgIWRlZmF1bHQ7XG4kc3dpZnQtZWFzZS1vdXQ6IGFsbCAkc3dpZnQtZWFzZS1vdXQtZHVyYXRpb24gJHN3aWZ0LWVhc2Utb3V0LXRpbWluZy1mdW5jdGlvbiAhZGVmYXVsdDtcblxuJHN3aWZ0LWVhc2UtaW4tZHVyYXRpb246IDMwMG1zICFkZWZhdWx0O1xuJHN3aWZ0LWVhc2UtaW4tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC41NSwgMCwgMC41NSwgMC4yKSAhZGVmYXVsdDtcbiRzd2lmdC1lYXNlLWluOiBhbGwgJHN3aWZ0LWVhc2UtaW4tZHVyYXRpb24gJHN3aWZ0LWVhc2UtaW4tdGltaW5nLWZ1bmN0aW9uICFkZWZhdWx0O1xuXG4kc3dpZnQtZWFzZS1pbi1vdXQtZHVyYXRpb246IDUwMG1zICFkZWZhdWx0O1xuJHN3aWZ0LWVhc2UtaW4tb3V0LXRpbWluZy1mdW5jdGlvbjogJGVhc2UtaW4tb3V0LWN1cnZlLWZ1bmN0aW9uICFkZWZhdWx0O1xuJHN3aWZ0LWVhc2UtaW4tb3V0OiBhbGwgJHN3aWZ0LWVhc2UtaW4tb3V0LWR1cmF0aW9uICRzd2lmdC1lYXNlLWluLW91dC10aW1pbmctZnVuY3Rpb24gIWRlZmF1bHQ7XG5cbiRzd2lmdC1saW5lYXItZHVyYXRpb246IDgwbXMgIWRlZmF1bHQ7XG4kc3dpZnQtbGluZWFyLXRpbWluZy1mdW5jdGlvbjogbGluZWFyICFkZWZhdWx0O1xuJHN3aWZ0LWxpbmVhcjogYWxsICRzd2lmdC1saW5lYXItZHVyYXRpb24gJHN3aWZ0LWxpbmVhci10aW1pbmctZnVuY3Rpb24gIWRlZmF1bHQ7XG5cblxuXG4vLyBBIGNvbGxlY3Rpb24gb2YgbWl4aW5zIGFuZCBDU1MgY2xhc3NlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGFwcGx5IGVsZXZhdGlvbiB0byBhIG1hdGVyaWFsXG4vLyBlbGVtZW50LlxuLy8gU2VlOiBodHRwczovL21hdGVyaWFsLmlvL2Rlc2lnbi9lbnZpcm9ubWVudC9lbGV2YXRpb24uaHRtbFxuLy8gRXhhbXBsZXM6XG4vL1xuLy9cbi8vIC5tYXQtZm9vIHtcbi8vICAgQGluY2x1ZGUgJG1hdC1lbGV2YXRpb24oMik7XG4vL1xuLy8gICAmOmFjdGl2ZSB7XG4vLyAgICAgQGluY2x1ZGUgJG1hdC1lbGV2YXRpb24oOCk7XG4vLyAgIH1cbi8vIH1cbi8vXG4vLyA8ZGl2IGlkPVwiZXh0ZXJuYWwtY2FyZFwiIGNsYXNzPVwibWF0LWVsZXZhdGlvbi16MlwiPjxwPlNvbWUgY29udGVudDwvcD48L2Rpdj5cbi8vXG4vLyBGb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIGRlc2lnbiBiZWhpbmQgaG93IGVsZXZhdGlvbiBpcyBpbXBsZW1lbnRlZCwgc2VlIHRoZSBkZXNpZ24gZG9jIGF0XG4vLyBodHRwczovL2dvby5nbC9LcTBrOVouXG5cbi8vIENvbG9ycyBmb3IgdW1icmEsIHBlbnVtYnJhLCBhbmQgYW1iaWVudCBzaGFkb3dzLiBBcyBkZXNjcmliZWQgaW4gdGhlIGRlc2lnbiBkb2MsIGVhY2ggZWxldmF0aW9uXG4vLyBsZXZlbCBpcyBjcmVhdGVkIHVzaW5nIGEgc2V0IG9mIDMgc2hhZG93IHZhbHVlcywgb25lIGZvciB1bWJyYSAodGhlIHNoYWRvdyByZXByZXNlbnRpbmcgdGhlXG4vLyBzcGFjZSBjb21wbGV0ZWx5IG9ic2N1cmVkIGJ5IGFuIG9iamVjdCByZWxhdGl2ZSB0byBpdHMgbGlnaHQgc291cmNlKSwgb25lIGZvciBwZW51bWJyYSAodGhlXG4vLyBzcGFjZSBwYXJ0aWFsbHkgb2JzY3VyZWQgYnkgYW4gb2JqZWN0KSwgYW5kIG9uZSBmb3IgYW1iaWVudCAodGhlIHNwYWNlIHdoaWNoIGNvbnRhaW5zIHRoZSBvYmplY3Rcbi8vIGl0c2VsZikuIEZvciBhIGZ1cnRoZXIgZXhwbGFuYXRpb24gb2YgdGhlc2UgdGVybXMgYW5kIHRoZWlyIG1lYW5pbmdzLCBzZWVcbi8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VtYnJhLF9wZW51bWJyYV9hbmRfYW50dW1icmEuXG5cbi8vIE1hcHMgZm9yIHRoZSBkaWZmZXJlbnQgc2hhZG93IHNldHMgYW5kIHRoZWlyIHZhbHVlcyB3aXRoaW4gZWFjaCB6LXNwYWNlLiBUaGVzZSB2YWx1ZXMgd2VyZVxuLy8gY3JlYXRlZCBieSB0YWtpbmcgYSBmZXcgcmVmZXJlbmNlIHNoYWRvdyBzZXRzIGNyZWF0ZWQgYnkgR29vZ2xlJ3MgRGVzaWduZXJzIGFuZCBpbnRlcnBvbGF0aW5nXG4vLyBhbGwgb2YgdGhlIHZhbHVlcyBiZXR3ZWVuIHRoZW0uXG5cbkBmdW5jdGlvbiBfZ2V0LXVtYnJhLW1hcCgkY29sb3IsICRvcGFjaXR5KSB7XG4gICRzaGFkb3ctY29sb3I6IGlmKHR5cGUtb2YoJGNvbG9yKSA9PSBjb2xvciwgcmdiYSgkY29sb3IsICRvcGFjaXR5ICogMC4yKSwgJGNvbG9yKTtcblxuICBAcmV0dXJuIChcbiAgICAwOiAnMHB4IDBweCAwcHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE6ICcwcHggMnB4IDFweCAtMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDI6ICcwcHggM3B4IDFweCAtMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDM6ICcwcHggM3B4IDNweCAtMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDQ6ICcwcHggMnB4IDRweCAtMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDU6ICcwcHggM3B4IDVweCAtMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDY6ICcwcHggM3B4IDVweCAtMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDc6ICcwcHggNHB4IDVweCAtMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDg6ICcwcHggNXB4IDVweCAtM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDk6ICcwcHggNXB4IDZweCAtM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEwOiAnMHB4IDZweCA2cHggLTNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMTogJzBweCA2cHggN3B4IC00cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTI6ICcwcHggN3B4IDhweCAtNHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEzOiAnMHB4IDdweCA4cHggLTRweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNDogJzBweCA3cHggOXB4IC00cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTU6ICcwcHggOHB4IDlweCAtNXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE2OiAnMHB4IDhweCAxMHB4IC01cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTc6ICcwcHggOHB4IDExcHggLTVweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxODogJzBweCA5cHggMTFweCAtNXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE5OiAnMHB4IDlweCAxMnB4IC02cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjA6ICcwcHggMTBweCAxM3B4IC02cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjE6ICcwcHggMTBweCAxM3B4IC02cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjI6ICcwcHggMTBweCAxNHB4IC02cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjM6ICcwcHggMTFweCAxNHB4IC03cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjQ6ICcwcHggMTFweCAxNXB4IC03cHggI3skc2hhZG93LWNvbG9yfSdcbiAgKTtcbn1cblxuQGZ1bmN0aW9uIF9nZXQtcGVudW1icmEtbWFwKCRjb2xvciwgJG9wYWNpdHkpIHtcbiAgJHNoYWRvdy1jb2xvcjogaWYodHlwZS1vZigkY29sb3IpID09IGNvbG9yLCByZ2JhKCRjb2xvciwgJG9wYWNpdHkgKiAwLjE0KSwgJGNvbG9yKTtcblxuICBAcmV0dXJuIChcbiAgICAwOiAnMHB4IDBweCAwcHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE6ICcwcHggMXB4IDFweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjogJzBweCAycHggMnB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAzOiAnMHB4IDNweCA0cHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDQ6ICcwcHggNHB4IDVweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNTogJzBweCA1cHggOHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA2OiAnMHB4IDZweCAxMHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA3OiAnMHB4IDdweCAxMHB4IDFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA4OiAnMHB4IDhweCAxMHB4IDFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA5OiAnMHB4IDlweCAxMnB4IDFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMDogJzBweCAxMHB4IDE0cHggMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDExOiAnMHB4IDExcHggMTVweCAxcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTI6ICcwcHggMTJweCAxN3B4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMzogJzBweCAxM3B4IDE5cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE0OiAnMHB4IDE0cHggMjFweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTU6ICcwcHggMTVweCAyMnB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNjogJzBweCAxNnB4IDI0cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE3OiAnMHB4IDE3cHggMjZweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTg6ICcwcHggMThweCAyOHB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxOTogJzBweCAxOXB4IDI5cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIwOiAnMHB4IDIwcHggMzFweCAzcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjE6ICcwcHggMjFweCAzM3B4IDNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMjogJzBweCAyMnB4IDM1cHggM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIzOiAnMHB4IDIzcHggMzZweCAzcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjQ6ICcwcHggMjRweCAzOHB4IDNweCAjeyRzaGFkb3ctY29sb3J9J1xuICApO1xufVxuXG5AZnVuY3Rpb24gX2dldC1hbWJpZW50LW1hcCgkY29sb3IsICRvcGFjaXR5KSB7XG4gICRzaGFkb3ctY29sb3I6IGlmKHR5cGUtb2YoJGNvbG9yKSA9PSBjb2xvciwgcmdiYSgkY29sb3IsICRvcGFjaXR5ICogMC4xMiksICRjb2xvcik7XG5cbiAgQHJldHVybiAoXG4gICAgMDogJzBweCAwcHggMHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxOiAnMHB4IDFweCAzcHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDI6ICcwcHggMXB4IDVweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMzogJzBweCAxcHggOHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA0OiAnMHB4IDFweCAxMHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA1OiAnMHB4IDFweCAxNHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA2OiAnMHB4IDFweCAxOHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA3OiAnMHB4IDJweCAxNnB4IDFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA4OiAnMHB4IDNweCAxNHB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA5OiAnMHB4IDNweCAxNnB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMDogJzBweCA0cHggMThweCAzcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTE6ICcwcHggNHB4IDIwcHggM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEyOiAnMHB4IDVweCAyMnB4IDRweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMzogJzBweCA1cHggMjRweCA0cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTQ6ICcwcHggNXB4IDI2cHggNHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE1OiAnMHB4IDZweCAyOHB4IDVweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNjogJzBweCA2cHggMzBweCA1cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTc6ICcwcHggNnB4IDMycHggNXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE4OiAnMHB4IDdweCAzNHB4IDZweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxOTogJzBweCA3cHggMzZweCA2cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjA6ICcwcHggOHB4IDM4cHggN3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIxOiAnMHB4IDhweCA0MHB4IDdweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMjogJzBweCA4cHggNDJweCA3cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjM6ICcwcHggOXB4IDQ0cHggOHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDI0OiAnMHB4IDlweCA0NnB4IDhweCAjeyRzaGFkb3ctY29sb3J9J1xuICApO1xufVxuXG4vLyBUaGUgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgZWxldmF0aW9uIHRyYW5zaXRpb25zLlxuJG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi1kdXJhdGlvbjogMjgwbXMgIWRlZmF1bHQ7XG5cbi8vIFRoZSBkZWZhdWx0IGVhc2luZyB2YWx1ZSBmb3IgZWxldmF0aW9uIHRyYW5zaXRpb25zLlxuJG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ICRtYXQtZmFzdC1vdXQtc2xvdy1pbi10aW1pbmctZnVuY3Rpb247XG5cbi8vIFRoZSBkZWZhdWx0IGNvbG9yIGZvciBlbGV2YXRpb24gc2hhZG93cy5cbiRtYXQtZWxldmF0aW9uLWNvbG9yOiBibGFjayAhZGVmYXVsdDtcblxuLy8gVGhlIGRlZmF1bHQgb3BhY2l0eSBzY2FsaW5nIHZhbHVlIGZvciBlbGV2YXRpb24gc2hhZG93cy5cbiRtYXQtZWxldmF0aW9uLW9wYWNpdHk6IDEgIWRlZmF1bHQ7XG5cbi8vIFByZWZpeCBmb3IgZWxldmF0aW9uLXJlbGF0ZWQgc2VsZWN0b3JzLlxuJF9tYXQtZWxldmF0aW9uLXByZWZpeDogJ21hdC1lbGV2YXRpb24teic7XG5cbi8vIEFwcGxpZXMgdGhlIGNvcnJlY3QgY3NzIHJ1bGVzIHRvIGFuIGVsZW1lbnQgdG8gZ2l2ZSBpdCB0aGUgZWxldmF0aW9uIHNwZWNpZmllZCBieSAkelZhbHVlLlxuLy8gVGhlICR6VmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDI0LlxuQG1peGluIG1hdC1lbGV2YXRpb24oJHpWYWx1ZSwgJGNvbG9yOiAkbWF0LWVsZXZhdGlvbi1jb2xvciwgJG9wYWNpdHk6ICRtYXQtZWxldmF0aW9uLW9wYWNpdHkpIHtcbiAgQGlmIHR5cGUtb2YoJHpWYWx1ZSkgIT0gbnVtYmVyIG9yIG5vdCB1bml0bGVzcygkelZhbHVlKSB7XG4gICAgQGVycm9yICckelZhbHVlIG11c3QgYmUgYSB1bml0bGVzcyBudW1iZXInO1xuICB9XG4gIEBpZiAkelZhbHVlIDwgMCBvciAkelZhbHVlID4gMjQge1xuICAgIEBlcnJvciAnJHpWYWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjQnO1xuICB9XG5cbiAgYm94LXNoYWRvdzogI3ttYXAtZ2V0KF9nZXQtdW1icmEtbWFwKCRjb2xvciwgJG9wYWNpdHkpLCAkelZhbHVlKX0sXG4gICAgICAgICAgICAgICN7bWFwLWdldChfZ2V0LXBlbnVtYnJhLW1hcCgkY29sb3IsICRvcGFjaXR5KSwgJHpWYWx1ZSl9LFxuICAgICAgICAgICAgICAje21hcC1nZXQoX2dldC1hbWJpZW50LW1hcCgkY29sb3IsICRvcGFjaXR5KSwgJHpWYWx1ZSl9O1xufVxuXG5AbWl4aW4gX21hdC10aGVtZS1lbGV2YXRpb24oJHpWYWx1ZSwgJHRoZW1lLCAkb3BhY2l0eTogJG1hdC1lbGV2YXRpb24tb3BhY2l0eSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkZWxldmF0aW9uLWNvbG9yOiBtYXAtZ2V0KCRmb3JlZ3JvdW5kLCBlbGV2YXRpb24pO1xuICAkZWxldmF0aW9uLWNvbG9yLW9yLWRlZmF1bHQ6IGlmKCRlbGV2YXRpb24tY29sb3IgPT0gbnVsbCwgJG1hdC1lbGV2YXRpb24tY29sb3IsICRlbGV2YXRpb24tY29sb3IpO1xuXG4gIEBpbmNsdWRlIG1hdC1lbGV2YXRpb24oJHpWYWx1ZSwgJGVsZXZhdGlvbi1jb2xvci1vci1kZWZhdWx0LCAkb3BhY2l0eSk7XG59XG5cbi8vIEFwcGxpZXMgdGhlIGVsZXZhdGlvbiB0byBhbiBlbGVtZW50IGluIGEgbWFubmVyIHRoYXQgYWxsb3dzXG4vLyBjb25zdW1lcnMgdG8gb3ZlcnJpZGUgaXQgdmlhIHRoZSBNYXRlcmlhbCBlbGV2YXRpb24gY2xhc3Nlcy5cbkBtaXhpbiBtYXQtb3ZlcnJpZGFibGUtZWxldmF0aW9uKFxuICAgICR6VmFsdWUsXG4gICAgJGNvbG9yOiAkbWF0LWVsZXZhdGlvbi1jb2xvcixcbiAgICAkb3BhY2l0eTogJG1hdC1lbGV2YXRpb24tb3BhY2l0eSkge1xuICAmOm5vdChbY2xhc3MqPScjeyRfbWF0LWVsZXZhdGlvbi1wcmVmaXh9J10pIHtcbiAgICBAaW5jbHVkZSBtYXQtZWxldmF0aW9uKCR6VmFsdWUsICRjb2xvciwgJG9wYWNpdHkpO1xuICB9XG59XG5cbkBtaXhpbiBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigkelZhbHVlLCAkdGhlbWUsICRvcGFjaXR5OiAkbWF0LWVsZXZhdGlvbi1vcGFjaXR5KSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRlbGV2YXRpb24tY29sb3I6IG1hcC1nZXQoJGZvcmVncm91bmQsIGVsZXZhdGlvbik7XG4gICRlbGV2YXRpb24tY29sb3Itb3ItZGVmYXVsdDogaWYoJGVsZXZhdGlvbi1jb2xvciA9PSBudWxsLCAkbWF0LWVsZXZhdGlvbi1jb2xvciwgJGVsZXZhdGlvbi1jb2xvcik7XG5cbiAgQGluY2x1ZGUgbWF0LW92ZXJyaWRhYmxlLWVsZXZhdGlvbigkelZhbHVlLCAkZWxldmF0aW9uLWNvbG9yLW9yLWRlZmF1bHQsICRvcGFjaXR5KTtcbn1cblxuLy8gUmV0dXJucyBhIHN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBmb3IgYSB0cmFuc2l0aW9uIHByb3BlcnR5IGZvciBlbGV2YXRpb24uXG4vLyBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgaXMgdXNlZnVsIGluIHNpdHVhdGlvbnMgd2hlcmUgYSBjb21wb25lbnQgbmVlZHMgdG8gdHJhbnNpdGlvblxuLy8gbW9yZSB0aGFuIG9uZSBwcm9wZXJ0eS5cbi8vXG4vLyAuZm9vIHtcbi8vICAgdHJhbnNpdGlvbjogbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLXByb3BlcnR5LXZhbHVlKCksIG9wYWNpdHkgMTAwbXMgZWFzZTtcbi8vIH1cbkBmdW5jdGlvbiBtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tcHJvcGVydHktdmFsdWUoXG4gICAgJGR1cmF0aW9uOiAkbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLWR1cmF0aW9uLFxuICAgICRlYXNpbmc6ICRtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSB7XG4gIEByZXR1cm4gYm94LXNoYWRvdyAjeyRkdXJhdGlvbn0gI3skZWFzaW5nfTtcbn1cblxuLy8gQXBwbGllcyB0aGUgY29ycmVjdCBjc3MgcnVsZXMgbmVlZGVkIHRvIGhhdmUgYW4gZWxlbWVudCB0cmFuc2l0aW9uIGJldHdlZW4gZWxldmF0aW9ucy5cbi8vIFRoaXMgbWl4aW4gc2hvdWxkIGJlIGFwcGxpZWQgdG8gZWxlbWVudHMgd2hvc2UgZWxldmF0aW9uIHZhbHVlcyB3aWxsIGNoYW5nZSBkZXBlbmRpbmcgb24gdGhlaXJcbi8vIGNvbnRleHQgKGUuZy4gd2hlbiBhY3RpdmUgb3IgZGlzYWJsZWQpLlxuLy9cbi8vIE5PVEUodHJhdmlza2F1Zm1hbik6IEJvdGggdGhpcyBtaXhpbiBhbmQgdGhlIGFib3ZlIGZ1bmN0aW9uIHVzZSBkZWZhdWx0IHBhcmFtZXRlcnMgc28gdGhleSBjYW5cbi8vIGJlIHVzZWQgaW4gdGhlIHNhbWUgd2F5IGJ5IGNsaWVudHMuXG5AbWl4aW4gbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uKFxuICAgICRkdXJhdGlvbjogJG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi1kdXJhdGlvbixcbiAgICAkZWFzaW5nOiAkbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikge1xuICB0cmFuc2l0aW9uOiBtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tcHJvcGVydHktdmFsdWUoJGR1cmF0aW9uLCAkZWFzaW5nKTtcbn1cblxuLy8gQ29sb3IgcGFsZXR0ZXMgZnJvbSB0aGUgTWF0ZXJpYWwgRGVzaWduIHNwZWMuXG4vLyBTZWUgaHR0cHM6Ly9tYXRlcmlhbC5pby9kZXNpZ24vY29sb3IvXG4vL1xuLy8gQ29udHJhc3QgY29sb3JzIGFyZSBoYXJkLWNvZGVkIGJlY2F1c2UgaXQgaXMgdG9vIGRpZmZpY3VsdCAocHJvYmFibHkgaW1wb3NzaWJsZSkgdG9cbi8vIGNhbGN1bGF0ZSB0aGVtLiBUaGVzZSBjb250cmFzdCBjb2xvcnMgYXJlIHB1bGxlZCBmcm9tIHRoZSBwdWJsaWMgTWF0ZXJpYWwgRGVzaWduIHNwZWMgc3dhdGNoZXMuXG4vLyBXaGlsZSB0aGUgY29udHJhc3QgY29sb3JzIGluIHRoZSBzcGVjIGFyZSBub3QgcHJlc2NyaXB0aXZlLCB3ZSB1c2UgdGhlbSBmb3IgY29udmVuaWVuY2UuXG5cblxuLy8gQGRlcHJlY2F0ZWQgcmVuYW1lZCB0byAkZGFyay1wcmltYXJ5LXRleHQuXG4vLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wXG4kYmxhY2stODctb3BhY2l0eTogcmdiYShibGFjaywgMC44Nyk7XG4vLyBAZGVwcmVjYXRlZCByZW5hbWVkIHRvICRsaWdodC1wcmltYXJ5LXRleHQuXG4vLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wXG4kd2hpdGUtODctb3BhY2l0eTogcmdiYSh3aGl0ZSwgMC44Nyk7XG4vLyBAZGVwcmVjYXRlZCB1c2UgJGRhcmstW3NlY29uZGFyeS10ZXh0LGRpc2FibGVkLXRleHQsZGl2aWRlcnMsZm9jdXNlZF0gaW5zdGVhZC5cbi8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjBcbiRibGFjay0xMi1vcGFjaXR5OiByZ2JhKGJsYWNrLCAwLjEyKTtcbi8vIEBkZXByZWNhdGVkIHVzZSAkbGlnaHQtW3NlY29uZGFyeS10ZXh0LGRpc2FibGVkLXRleHQsZGl2aWRlcnMsZm9jdXNlZF0gaW5zdGVhZC5cbi8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjBcbiR3aGl0ZS0xMi1vcGFjaXR5OiByZ2JhKHdoaXRlLCAwLjEyKTtcbi8vIEBkZXByZWNhdGVkIHVzZSAkZGFyay1bc2Vjb25kYXJ5LXRleHQsZGlzYWJsZWQtdGV4dCxkaXZpZGVycyxmb2N1c2VkXSBpbnN0ZWFkLlxuLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMFxuJGJsYWNrLTYtb3BhY2l0eTogcmdiYShibGFjaywgMC4wNik7XG4vLyBAZGVwcmVjYXRlZCB1c2UgJGxpZ2h0LVtzZWNvbmRhcnktdGV4dCxkaXNhYmxlZC10ZXh0LGRpdmlkZXJzLGZvY3VzZWRdIGluc3RlYWQuXG4vLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wXG4kd2hpdGUtNi1vcGFjaXR5OiByZ2JhKHdoaXRlLCAwLjA2KTtcblxuJGRhcmstcHJpbWFyeS10ZXh0OiByZ2JhKGJsYWNrLCAwLjg3KTtcbiRkYXJrLXNlY29uZGFyeS10ZXh0OiByZ2JhKGJsYWNrLCAwLjU0KTtcbiRkYXJrLWRpc2FibGVkLXRleHQ6IHJnYmEoYmxhY2ssIDAuMzgpO1xuJGRhcmstZGl2aWRlcnM6IHJnYmEoYmxhY2ssIDAuMTIpO1xuJGRhcmstZm9jdXNlZDogcmdiYShibGFjaywgMC4xMik7XG4kbGlnaHQtcHJpbWFyeS10ZXh0OiB3aGl0ZTtcbiRsaWdodC1zZWNvbmRhcnktdGV4dDogcmdiYSh3aGl0ZSwgMC43KTtcbiRsaWdodC1kaXNhYmxlZC10ZXh0OiByZ2JhKHdoaXRlLCAwLjUpO1xuJGxpZ2h0LWRpdmlkZXJzOiByZ2JhKHdoaXRlLCAwLjEyKTtcbiRsaWdodC1mb2N1c2VkOiByZ2JhKHdoaXRlLCAwLjEyKTtcblxuJG1hdC1yZWQ6IChcbiAgNTA6ICNmZmViZWUsXG4gIDEwMDogI2ZmY2RkMixcbiAgMjAwOiAjZWY5YTlhLFxuICAzMDA6ICNlNTczNzMsXG4gIDQwMDogI2VmNTM1MCxcbiAgNTAwOiAjZjQ0MzM2LFxuICA2MDA6ICNlNTM5MzUsXG4gIDcwMDogI2QzMmYyZixcbiAgODAwOiAjYzYyODI4LFxuICA5MDA6ICNiNzFjMWMsXG4gIEExMDA6ICNmZjhhODAsXG4gIEEyMDA6ICNmZjUyNTIsXG4gIEE0MDA6ICNmZjE3NDQsXG4gIEE3MDA6ICNkNTAwMDAsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1waW5rOiAoXG4gIDUwOiAjZmNlNGVjLFxuICAxMDA6ICNmOGJiZDAsXG4gIDIwMDogI2Y0OGZiMSxcbiAgMzAwOiAjZjA2MjkyLFxuICA0MDA6ICNlYzQwN2EsXG4gIDUwMDogI2U5MWU2MyxcbiAgNjAwOiAjZDgxYjYwLFxuICA3MDA6ICNjMjE4NWIsXG4gIDgwMDogI2FkMTQ1NyxcbiAgOTAwOiAjODgwZTRmLFxuICBBMTAwOiAjZmY4MGFiLFxuICBBMjAwOiAjZmY0MDgxLFxuICBBNDAwOiAjZjUwMDU3LFxuICBBNzAwOiAjYzUxMTYyLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtcHVycGxlOiAoXG4gIDUwOiAjZjNlNWY1LFxuICAxMDA6ICNlMWJlZTcsXG4gIDIwMDogI2NlOTNkOCxcbiAgMzAwOiAjYmE2OGM4LFxuICA0MDA6ICNhYjQ3YmMsXG4gIDUwMDogIzljMjdiMCxcbiAgNjAwOiAjOGUyNGFhLFxuICA3MDA6ICM3YjFmYTIsXG4gIDgwMDogIzZhMWI5YSxcbiAgOTAwOiAjNGExNDhjLFxuICBBMTAwOiAjZWE4MGZjLFxuICBBMjAwOiAjZTA0MGZiLFxuICBBNDAwOiAjZDUwMGY5LFxuICBBNzAwOiAjYWEwMGZmLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1kZWVwLXB1cnBsZTogKFxuICA1MDogI2VkZTdmNixcbiAgMTAwOiAjZDFjNGU5LFxuICAyMDA6ICNiMzlkZGIsXG4gIDMwMDogIzk1NzVjZCxcbiAgNDAwOiAjN2U1N2MyLFxuICA1MDA6ICM2NzNhYjcsXG4gIDYwMDogIzVlMzViMSxcbiAgNzAwOiAjNTEyZGE4LFxuICA4MDA6ICM0NTI3YTAsXG4gIDkwMDogIzMxMWI5MixcbiAgQTEwMDogI2IzODhmZixcbiAgQTIwMDogIzdjNGRmZixcbiAgQTQwMDogIzY1MWZmZixcbiAgQTcwMDogIzYyMDBlYSxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtaW5kaWdvOiAoXG4gIDUwOiAjZThlYWY2LFxuICAxMDA6ICNjNWNhZTksXG4gIDIwMDogIzlmYThkYSxcbiAgMzAwOiAjNzk4NmNiLFxuICA0MDA6ICM1YzZiYzAsXG4gIDUwMDogIzNmNTFiNSxcbiAgNjAwOiAjMzk0OWFiLFxuICA3MDA6ICMzMDNmOWYsXG4gIDgwMDogIzI4MzU5MyxcbiAgOTAwOiAjMWEyMzdlLFxuICBBMTAwOiAjOGM5ZWZmLFxuICBBMjAwOiAjNTM2ZGZlLFxuICBBNDAwOiAjM2Q1YWZlLFxuICBBNzAwOiAjMzA0ZmZlLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1ibHVlOiAoXG4gIDUwOiAjZTNmMmZkLFxuICAxMDA6ICNiYmRlZmIsXG4gIDIwMDogIzkwY2FmOSxcbiAgMzAwOiAjNjRiNWY2LFxuICA0MDA6ICM0MmE1ZjUsXG4gIDUwMDogIzIxOTZmMyxcbiAgNjAwOiAjMWU4OGU1LFxuICA3MDA6ICMxOTc2ZDIsXG4gIDgwMDogIzE1NjVjMCxcbiAgOTAwOiAjMGQ0N2ExLFxuICBBMTAwOiAjODJiMWZmLFxuICBBMjAwOiAjNDQ4YWZmLFxuICBBNDAwOiAjMjk3OWZmLFxuICBBNzAwOiAjMjk2MmZmLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtbGlnaHQtYmx1ZTogKFxuICA1MDogI2UxZjVmZSxcbiAgMTAwOiAjYjNlNWZjLFxuICAyMDA6ICM4MWQ0ZmEsXG4gIDMwMDogIzRmYzNmNyxcbiAgNDAwOiAjMjliNmY2LFxuICA1MDA6ICMwM2E5ZjQsXG4gIDYwMDogIzAzOWJlNSxcbiAgNzAwOiAjMDI4OGQxLFxuICA4MDA6ICMwMjc3YmQsXG4gIDkwMDogIzAxNTc5YixcbiAgQTEwMDogIzgwZDhmZixcbiAgQTIwMDogIzQwYzRmZixcbiAgQTQwMDogIzAwYjBmZixcbiAgQTcwMDogIzAwOTFlYSxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1jeWFuOiAoXG4gIDUwOiAjZTBmN2ZhLFxuICAxMDA6ICNiMmViZjIsXG4gIDIwMDogIzgwZGVlYSxcbiAgMzAwOiAjNGRkMGUxLFxuICA0MDA6ICMyNmM2ZGEsXG4gIDUwMDogIzAwYmNkNCxcbiAgNjAwOiAjMDBhY2MxLFxuICA3MDA6ICMwMDk3YTcsXG4gIDgwMDogIzAwODM4ZixcbiAgOTAwOiAjMDA2MDY0LFxuICBBMTAwOiAjODRmZmZmLFxuICBBMjAwOiAjMThmZmZmLFxuICBBNDAwOiAjMDBlNWZmLFxuICBBNzAwOiAjMDBiOGQ0LFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtdGVhbDogKFxuICA1MDogI2UwZjJmMSxcbiAgMTAwOiAjYjJkZmRiLFxuICAyMDA6ICM4MGNiYzQsXG4gIDMwMDogIzRkYjZhYyxcbiAgNDAwOiAjMjZhNjlhLFxuICA1MDA6ICMwMDk2ODgsXG4gIDYwMDogIzAwODk3YixcbiAgNzAwOiAjMDA3OTZiLFxuICA4MDA6ICMwMDY5NWMsXG4gIDkwMDogIzAwNGQ0MCxcbiAgQTEwMDogI2E3ZmZlYixcbiAgQTIwMDogIzY0ZmZkYSxcbiAgQTQwMDogIzFkZTliNixcbiAgQTcwMDogIzAwYmZhNSxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWdyZWVuOiAoXG4gIDUwOiAjZThmNWU5LFxuICAxMDA6ICNjOGU2YzksXG4gIDIwMDogI2E1ZDZhNyxcbiAgMzAwOiAjODFjNzg0LFxuICA0MDA6ICM2NmJiNmEsXG4gIDUwMDogIzRjYWY1MCxcbiAgNjAwOiAjNDNhMDQ3LFxuICA3MDA6ICMzODhlM2MsXG4gIDgwMDogIzJlN2QzMixcbiAgOTAwOiAjMWI1ZTIwLFxuICBBMTAwOiAjYjlmNmNhLFxuICBBMjAwOiAjNjlmMGFlLFxuICBBNDAwOiAjMDBlNjc2LFxuICBBNzAwOiAjMDBjODUzLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1saWdodC1ncmVlbjogKFxuICA1MDogI2YxZjhlOSxcbiAgMTAwOiAjZGNlZGM4LFxuICAyMDA6ICNjNWUxYTUsXG4gIDMwMDogI2FlZDU4MSxcbiAgNDAwOiAjOWNjYzY1LFxuICA1MDA6ICM4YmMzNGEsXG4gIDYwMDogIzdjYjM0MixcbiAgNzAwOiAjNjg5ZjM4LFxuICA4MDA6ICM1NThiMmYsXG4gIDkwMDogIzMzNjkxZSxcbiAgQTEwMDogI2NjZmY5MCxcbiAgQTIwMDogI2IyZmY1OSxcbiAgQTQwMDogIzc2ZmYwMyxcbiAgQTcwMDogIzY0ZGQxNyxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1saW1lOiAoXG4gIDUwOiAjZjlmYmU3LFxuICAxMDA6ICNmMGY0YzMsXG4gIDIwMDogI2U2ZWU5YyxcbiAgMzAwOiAjZGNlNzc1LFxuICA0MDA6ICNkNGUxNTcsXG4gIDUwMDogI2NkZGMzOSxcbiAgNjAwOiAjYzBjYTMzLFxuICA3MDA6ICNhZmI0MmIsXG4gIDgwMDogIzllOWQyNCxcbiAgOTAwOiAjODI3NzE3LFxuICBBMTAwOiAjZjRmZjgxLFxuICBBMjAwOiAjZWVmZjQxLFxuICBBNDAwOiAjYzZmZjAwLFxuICBBNzAwOiAjYWVlYTAwLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC15ZWxsb3c6IChcbiAgNTA6ICNmZmZkZTcsXG4gIDEwMDogI2ZmZjljNCxcbiAgMjAwOiAjZmZmNTlkLFxuICAzMDA6ICNmZmYxNzYsXG4gIDQwMDogI2ZmZWU1OCxcbiAgNTAwOiAjZmZlYjNiLFxuICA2MDA6ICNmZGQ4MzUsXG4gIDcwMDogI2ZiYzAyZCxcbiAgODAwOiAjZjlhODI1LFxuICA5MDA6ICNmNTdmMTcsXG4gIEExMDA6ICNmZmZmOGQsXG4gIEEyMDA6ICNmZmZmMDAsXG4gIEE0MDA6ICNmZmVhMDAsXG4gIEE3MDA6ICNmZmQ2MDAsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtYW1iZXI6IChcbiAgNTA6ICNmZmY4ZTEsXG4gIDEwMDogI2ZmZWNiMyxcbiAgMjAwOiAjZmZlMDgyLFxuICAzMDA6ICNmZmQ1NGYsXG4gIDQwMDogI2ZmY2EyOCxcbiAgNTAwOiAjZmZjMTA3LFxuICA2MDA6ICNmZmIzMDAsXG4gIDcwMDogI2ZmYTAwMCxcbiAgODAwOiAjZmY4ZjAwLFxuICA5MDA6ICNmZjZmMDAsXG4gIEExMDA6ICNmZmU1N2YsXG4gIEEyMDA6ICNmZmQ3NDAsXG4gIEE0MDA6ICNmZmM0MDAsXG4gIEE3MDA6ICNmZmFiMDAsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtb3JhbmdlOiAoXG4gIDUwOiAjZmZmM2UwLFxuICAxMDA6ICNmZmUwYjIsXG4gIDIwMDogI2ZmY2M4MCxcbiAgMzAwOiAjZmZiNzRkLFxuICA0MDA6ICNmZmE3MjYsXG4gIDUwMDogI2ZmOTgwMCxcbiAgNjAwOiAjZmI4YzAwLFxuICA3MDA6ICNmNTdjMDAsXG4gIDgwMDogI2VmNmMwMCxcbiAgOTAwOiAjZTY1MTAwLFxuICBBMTAwOiAjZmZkMTgwLFxuICBBMjAwOiAjZmZhYjQwLFxuICBBNDAwOiAjZmY5MTAwLFxuICBBNzAwOiAjZmY2ZDAwLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiBibGFjayxcbiAgKVxuKTtcblxuJG1hdC1kZWVwLW9yYW5nZTogKFxuICA1MDogI2ZiZTllNyxcbiAgMTAwOiAjZmZjY2JjLFxuICAyMDA6ICNmZmFiOTEsXG4gIDMwMDogI2ZmOGE2NSxcbiAgNDAwOiAjZmY3MDQzLFxuICA1MDA6ICNmZjU3MjIsXG4gIDYwMDogI2Y0NTExZSxcbiAgNzAwOiAjZTY0YTE5LFxuICA4MDA6ICNkODQzMTUsXG4gIDkwMDogI2JmMzYwYyxcbiAgQTEwMDogI2ZmOWU4MCxcbiAgQTIwMDogI2ZmNmU0MCxcbiAgQTQwMDogI2ZmM2QwMCxcbiAgQTcwMDogI2RkMmMwMCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtYnJvd246IChcbiAgNTA6ICNlZmViZTksXG4gIDEwMDogI2Q3Y2NjOCxcbiAgMjAwOiAjYmNhYWE0LFxuICAzMDA6ICNhMTg4N2YsXG4gIDQwMDogIzhkNmU2MyxcbiAgNTAwOiAjNzk1NTQ4LFxuICA2MDA6ICM2ZDRjNDEsXG4gIDcwMDogIzVkNDAzNyxcbiAgODAwOiAjNGUzNDJlLFxuICA5MDA6ICMzZTI3MjMsXG4gIEExMDA6ICNkN2NjYzgsXG4gIEEyMDA6ICNiY2FhYTQsXG4gIEE0MDA6ICM4ZDZlNjMsXG4gIEE3MDA6ICM1ZDQwMzcsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtZ3JleTogKFxuICA1MDogI2ZhZmFmYSxcbiAgMTAwOiAjZjVmNWY1LFxuICAyMDA6ICNlZWVlZWUsXG4gIDMwMDogI2UwZTBlMCxcbiAgNDAwOiAjYmRiZGJkLFxuICA1MDA6ICM5ZTllOWUsXG4gIDYwMDogIzc1NzU3NSxcbiAgNzAwOiAjNjE2MTYxLFxuICA4MDA6ICM0MjQyNDIsXG4gIDkwMDogIzIxMjEyMSxcbiAgQTEwMDogI2ZmZmZmZixcbiAgQTIwMDogI2VlZWVlZSxcbiAgQTQwMDogI2JkYmRiZCxcbiAgQTcwMDogIzYxNjE2MSxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4vLyBBbGlhcyBmb3IgYWx0ZXJuYXRlIHNwZWxsaW5nLlxuJG1hdC1ncmF5OiAkbWF0LWdyZXk7XG5cbiRtYXQtYmx1ZS1ncmV5OiAoXG4gIDUwOiAjZWNlZmYxLFxuICAxMDA6ICNjZmQ4ZGMsXG4gIDIwMDogI2IwYmVjNSxcbiAgMzAwOiAjOTBhNGFlLFxuICA0MDA6ICM3ODkwOWMsXG4gIDUwMDogIzYwN2Q4YixcbiAgNjAwOiAjNTQ2ZTdhLFxuICA3MDA6ICM0NTVhNjQsXG4gIDgwMDogIzM3NDc0ZixcbiAgOTAwOiAjMjYzMjM4LFxuICBBMTAwOiAjY2ZkOGRjLFxuICBBMjAwOiAjYjBiZWM1LFxuICBBNDAwOiAjNzg5MDljLFxuICBBNzAwOiAjNDU1YTY0LFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbi8vIEFsaWFzIGZvciBhbHRlcm5hdGUgc3BlbGxpbmcuXG4kbWF0LWJsdWUtZ3JheTogJG1hdC1ibHVlLWdyZXk7XG5cblxuLy8gQmFja2dyb3VuZCBwYWxldHRlIGZvciBsaWdodCB0aGVtZXMuXG4kbWF0LWxpZ2h0LXRoZW1lLWJhY2tncm91bmQ6IChcbiAgc3RhdHVzLWJhcjogbWFwX2dldCgkbWF0LWdyZXksIDMwMCksXG4gIGFwcC1iYXI6ICAgIG1hcF9nZXQoJG1hdC1ncmV5LCAxMDApLFxuICBiYWNrZ3JvdW5kOiBtYXBfZ2V0KCRtYXQtZ3JleSwgNTApLFxuICBob3ZlcjogICAgICByZ2JhKGJsYWNrLCAwLjA0KSwgLy8gVE9ETyhrYXJhKTogY2hlY2sgc3R5bGUgd2l0aCBNYXRlcmlhbCBEZXNpZ24gVVhcbiAgY2FyZDogICAgICAgd2hpdGUsXG4gIGRpYWxvZzogICAgIHdoaXRlLFxuICBkaXNhYmxlZC1idXR0b246IHJnYmEoYmxhY2ssIDAuMTIpLFxuICByYWlzZWQtYnV0dG9uOiB3aGl0ZSxcbiAgZm9jdXNlZC1idXR0b246ICRkYXJrLWZvY3VzZWQsXG4gIHNlbGVjdGVkLWJ1dHRvbjogbWFwX2dldCgkbWF0LWdyZXksIDMwMCksXG4gIHNlbGVjdGVkLWRpc2FibGVkLWJ1dHRvbjogbWFwX2dldCgkbWF0LWdyZXksIDQwMCksXG4gIGRpc2FibGVkLWJ1dHRvbi10b2dnbGU6IG1hcF9nZXQoJG1hdC1ncmV5LCAyMDApLFxuICB1bnNlbGVjdGVkLWNoaXA6IG1hcF9nZXQoJG1hdC1ncmV5LCAzMDApLFxuICBkaXNhYmxlZC1saXN0LW9wdGlvbjogbWFwX2dldCgkbWF0LWdyZXksIDIwMCksXG4gIHRvb2x0aXA6IG1hcF9nZXQoJG1hdC1ncmV5LCA3MDApLFxuKTtcblxuLy8gQmFja2dyb3VuZCBwYWxldHRlIGZvciBkYXJrIHRoZW1lcy5cbiRtYXQtZGFyay10aGVtZS1iYWNrZ3JvdW5kOiAoXG4gIHN0YXR1cy1iYXI6IGJsYWNrLFxuICBhcHAtYmFyOiAgICBtYXBfZ2V0KCRtYXQtZ3JleSwgOTAwKSxcbiAgYmFja2dyb3VuZDogIzMwMzAzMCxcbiAgaG92ZXI6ICAgICAgcmdiYSh3aGl0ZSwgMC4wNCksIC8vIFRPRE8oa2FyYSk6IGNoZWNrIHN0eWxlIHdpdGggTWF0ZXJpYWwgRGVzaWduIFVYXG4gIGNhcmQ6ICAgICAgIG1hcF9nZXQoJG1hdC1ncmV5LCA4MDApLFxuICBkaWFsb2c6ICAgICBtYXBfZ2V0KCRtYXQtZ3JleSwgODAwKSxcbiAgZGlzYWJsZWQtYnV0dG9uOiByZ2JhKHdoaXRlLCAwLjEyKSxcbiAgcmFpc2VkLWJ1dHRvbjogbWFwLWdldCgkbWF0LWdyZXksIDgwMCksXG4gIGZvY3VzZWQtYnV0dG9uOiAkbGlnaHQtZm9jdXNlZCxcbiAgc2VsZWN0ZWQtYnV0dG9uOiBtYXBfZ2V0KCRtYXQtZ3JleSwgOTAwKSxcbiAgc2VsZWN0ZWQtZGlzYWJsZWQtYnV0dG9uOiBtYXBfZ2V0KCRtYXQtZ3JleSwgODAwKSxcbiAgZGlzYWJsZWQtYnV0dG9uLXRvZ2dsZTogYmxhY2ssXG4gIHVuc2VsZWN0ZWQtY2hpcDogbWFwX2dldCgkbWF0LWdyZXksIDcwMCksXG4gIGRpc2FibGVkLWxpc3Qtb3B0aW9uOiBibGFjayxcbiAgdG9vbHRpcDogbWFwX2dldCgkbWF0LWdyZXksIDcwMCksXG4pO1xuXG4vLyBGb3JlZ3JvdW5kIHBhbGV0dGUgZm9yIGxpZ2h0IHRoZW1lcy5cbiRtYXQtbGlnaHQtdGhlbWUtZm9yZWdyb3VuZDogKFxuICBiYXNlOiAgICAgICAgICAgICAgYmxhY2ssXG4gIGRpdmlkZXI6ICAgICAgICAgICAkZGFyay1kaXZpZGVycyxcbiAgZGl2aWRlcnM6ICAgICAgICAgICRkYXJrLWRpdmlkZXJzLFxuICBkaXNhYmxlZDogICAgICAgICAgJGRhcmstZGlzYWJsZWQtdGV4dCxcbiAgZGlzYWJsZWQtYnV0dG9uOiAgIHJnYmEoYmxhY2ssIDAuMjYpLFxuICBkaXNhYmxlZC10ZXh0OiAgICAgJGRhcmstZGlzYWJsZWQtdGV4dCxcbiAgZWxldmF0aW9uOiAgICAgICAgIGJsYWNrLFxuICBoaW50LXRleHQ6ICAgICAgICAgJGRhcmstZGlzYWJsZWQtdGV4dCxcbiAgc2Vjb25kYXJ5LXRleHQ6ICAgICRkYXJrLXNlY29uZGFyeS10ZXh0LFxuICBpY29uOiAgICAgICAgICAgICAgcmdiYShibGFjaywgMC41NCksXG4gIGljb25zOiAgICAgICAgICAgICByZ2JhKGJsYWNrLCAwLjU0KSxcbiAgdGV4dDogICAgICAgICAgICAgIHJnYmEoYmxhY2ssIDAuODcpLFxuICBzbGlkZXItbWluOiAgICAgICAgcmdiYShibGFjaywgMC44NyksXG4gIHNsaWRlci1vZmY6ICAgICAgICByZ2JhKGJsYWNrLCAwLjI2KSxcbiAgc2xpZGVyLW9mZi1hY3RpdmU6IHJnYmEoYmxhY2ssIDAuMzgpLFxuKTtcblxuLy8gRm9yZWdyb3VuZCBwYWxldHRlIGZvciBkYXJrIHRoZW1lcy5cbiRtYXQtZGFyay10aGVtZS1mb3JlZ3JvdW5kOiAoXG4gIGJhc2U6ICAgICAgICAgICAgICB3aGl0ZSxcbiAgZGl2aWRlcjogICAgICAgICAgICRsaWdodC1kaXZpZGVycyxcbiAgZGl2aWRlcnM6ICAgICAgICAgICRsaWdodC1kaXZpZGVycyxcbiAgZGlzYWJsZWQ6ICAgICAgICAgICRsaWdodC1kaXNhYmxlZC10ZXh0LFxuICBkaXNhYmxlZC1idXR0b246ICAgcmdiYSh3aGl0ZSwgMC4zKSxcbiAgZGlzYWJsZWQtdGV4dDogICAgICRsaWdodC1kaXNhYmxlZC10ZXh0LFxuICBlbGV2YXRpb246ICAgICAgICAgYmxhY2ssXG4gIGhpbnQtdGV4dDogICAgICAgICAkbGlnaHQtZGlzYWJsZWQtdGV4dCxcbiAgc2Vjb25kYXJ5LXRleHQ6ICAgICRsaWdodC1zZWNvbmRhcnktdGV4dCxcbiAgaWNvbjogICAgICAgICAgICAgIHdoaXRlLFxuICBpY29uczogICAgICAgICAgICAgd2hpdGUsXG4gIHRleHQ6ICAgICAgICAgICAgICB3aGl0ZSxcbiAgc2xpZGVyLW1pbjogICAgICAgIHdoaXRlLFxuICBzbGlkZXItb2ZmOiAgICAgICAgcmdiYSh3aGl0ZSwgMC4zKSxcbiAgc2xpZGVyLW9mZi1hY3RpdmU6IHJnYmEod2hpdGUsIDAuMyksXG4pO1xuXG5cblxuLy8gRm9yIGEgZ2l2ZW4gaHVlIGluIGEgcGFsZXR0ZSwgcmV0dXJuIHRoZSBjb250cmFzdCBjb2xvciBmcm9tIHRoZSBtYXAgb2YgY29udHJhc3QgcGFsZXR0ZXMuXG4vLyBAcGFyYW0gJGNvbG9yLW1hcFxuLy8gQHBhcmFtICRodWVcbkBmdW5jdGlvbiBtYXQtY29udHJhc3QoJHBhbGV0dGUsICRodWUpIHtcbiAgQHJldHVybiBtYXAtZ2V0KG1hcC1nZXQoJHBhbGV0dGUsIGNvbnRyYXN0KSwgJGh1ZSk7XG59XG5cblxuLy8gQ3JlYXRlcyBhIG1hcCBvZiBodWVzIHRvIGNvbG9ycyBmb3IgYSB0aGVtZS4gVGhpcyBpcyB1c2VkIHRvIGRlZmluZSBhIHRoZW1lIHBhbGV0dGUgaW4gdGVybXNcbi8vIG9mIHRoZSBNYXRlcmlhbCBEZXNpZ24gaHVlcy5cbi8vIEBwYXJhbSAkY29sb3ItbWFwXG4vLyBAcGFyYW0gJHByaW1hcnlcbi8vIEBwYXJhbSAkbGlnaHRlclxuQGZ1bmN0aW9uIG1hdC1wYWxldHRlKCRiYXNlLXBhbGV0dGUsICRkZWZhdWx0OiA1MDAsICRsaWdodGVyOiAxMDAsICRkYXJrZXI6IDcwMCwgJHRleHQ6ICRkZWZhdWx0KSB7XG4gICRyZXN1bHQ6IG1hcF9tZXJnZSgkYmFzZS1wYWxldHRlLCAoXG4gICAgZGVmYXVsdDogbWFwLWdldCgkYmFzZS1wYWxldHRlLCAkZGVmYXVsdCksXG4gICAgbGlnaHRlcjogbWFwLWdldCgkYmFzZS1wYWxldHRlLCAkbGlnaHRlciksXG4gICAgZGFya2VyOiBtYXAtZ2V0KCRiYXNlLXBhbGV0dGUsICRkYXJrZXIpLFxuICAgIHRleHQ6IG1hcC1nZXQoJGJhc2UtcGFsZXR0ZSwgJHRleHQpLFxuXG4gICAgZGVmYXVsdC1jb250cmFzdDogbWF0LWNvbnRyYXN0KCRiYXNlLXBhbGV0dGUsICRkZWZhdWx0KSxcbiAgICBsaWdodGVyLWNvbnRyYXN0OiBtYXQtY29udHJhc3QoJGJhc2UtcGFsZXR0ZSwgJGxpZ2h0ZXIpLFxuICAgIGRhcmtlci1jb250cmFzdDogbWF0LWNvbnRyYXN0KCRiYXNlLXBhbGV0dGUsICRkYXJrZXIpXG4gICkpO1xuXG4gIC8vIEZvciBlYWNoIGh1ZSBpbiB0aGUgcGFsZXR0ZSwgYWRkIGEgXCItY29udHJhc3RcIiBjb2xvciB0byB0aGUgbWFwLlxuICBAZWFjaCAkaHVlLCAkY29sb3IgaW4gJGJhc2UtcGFsZXR0ZSB7XG4gICAgJHJlc3VsdDogbWFwX21lcmdlKCRyZXN1bHQsIChcbiAgICAgICcjeyRodWV9LWNvbnRyYXN0JzogbWF0LWNvbnRyYXN0KCRiYXNlLXBhbGV0dGUsICRodWUpXG4gICAgKSk7XG4gIH1cblxuICBAcmV0dXJuICRyZXN1bHQ7XG59XG5cblxuLy8gR2V0cyBhIGNvbG9yIGZyb20gYSB0aGVtZSBwYWxldHRlICh0aGUgb3V0cHV0IG9mIG1hdC1wYWxldHRlKS5cbi8vIFRoZSBodWUgY2FuIGJlIG9uZSBvZiB0aGUgc3RhbmRhcmQgdmFsdWVzICg1MDAsIEE0MDAsIGV0Yy4pLCBvbmUgb2YgdGhlIHRocmVlIHByZWNvbmZpZ3VyZWRcbi8vIGh1ZXMgKGRlZmF1bHQsIGxpZ2h0ZXIsIGRhcmtlciksIG9yIGFueSBvZiB0aGUgYWZvcmVtZW50aW9uZWQgcHJlZml4ZWQgd2l0aCBcIi1jb250cmFzdFwiLlxuLy9cbi8vIEBwYXJhbSAkY29sb3ItbWFwIFRoZSB0aGVtZSBwYWxldHRlIChvdXRwdXQgb2YgbWF0LXBhbGV0dGUpLlxuLy8gQHBhcmFtICRodWUgVGhlIGh1ZSBmcm9tIHRoZSBwYWxldHRlIHRvIHVzZS4gSWYgdGhpcyBpcyBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMSwgaXQgd2lsbFxuLy8gICAgIGJlIHRyZWF0ZWQgYXMgb3BhY2l0eS5cbi8vIEBwYXJhbSAkb3BhY2l0eSBUaGUgYWxwaGEgY2hhbm5lbCB2YWx1ZSBmb3IgdGhlIGNvbG9yLlxuQGZ1bmN0aW9uIG1hdC1jb2xvcigkcGFsZXR0ZSwgJGh1ZTogZGVmYXVsdCwgJG9wYWNpdHk6IG51bGwpIHtcbiAgLy8gSWYgaHVlS2V5IGlzIGEgbnVtYmVyIGJldHdlZW4gemVybyBhbmQgb25lLCB0aGVuIGl0IGFjdHVhbGx5IGNvbnRhaW5zIGFuXG4gIC8vIG9wYWNpdHkgdmFsdWUsIHNvIHJlY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlIGRlZmF1bHQgaHVlIGFuZCB0aGF0IGdpdmVuIG9wYWNpdHkuXG4gIEBpZiB0eXBlLW9mKCRodWUpID09IG51bWJlciBhbmQgJGh1ZSA+PSAwIGFuZCAkaHVlIDw9IDEge1xuICAgIEByZXR1cm4gbWF0LWNvbG9yKCRwYWxldHRlLCBkZWZhdWx0LCAkaHVlKTtcbiAgfVxuXG4gICRjb2xvcjogbWFwLWdldCgkcGFsZXR0ZSwgJGh1ZSk7XG5cbiAgQGlmICh0eXBlLW9mKCRjb2xvcikgIT0gY29sb3IpIHtcbiAgICAvLyBJZiB0aGUgJGNvbG9yIHJlc29sdmVkIHRvIHNvbWV0aGluZyBkaWZmZXJlbnQgZnJvbSBhIGNvbG9yIChlLmcuIGEgQ1NTIHZhcmlhYmxlKSxcbiAgICAvLyB3ZSBjYW4ndCBhcHBseSB0aGUgb3BhY2l0eSBhbnl3YXkgc28gd2UgcmV0dXJuIHRoZSB2YWx1ZSBhcyBpcywgb3RoZXJ3aXNlIFNhc3MgY2FuXG4gICAgLy8gdGhyb3cgYW4gZXJyb3Igb3Igb3V0cHV0IHNvbWV0aGluZyBpbnZhbGlkLlxuICAgIEByZXR1cm4gJGNvbG9yO1xuICB9XG5cbiAgQHJldHVybiByZ2JhKCRjb2xvciwgaWYoJG9wYWNpdHkgPT0gbnVsbCwgb3BhY2l0eSgkY29sb3IpLCAkb3BhY2l0eSkpO1xufVxuXG5cbi8vIENyZWF0ZXMgYSBjb250YWluZXIgb2JqZWN0IGZvciBhIGxpZ2h0IHRoZW1lIHRvIGJlIGdpdmVuIHRvIGluZGl2aWR1YWwgY29tcG9uZW50IHRoZW1lIG1peGlucy5cbkBmdW5jdGlvbiBtYXQtbGlnaHQtdGhlbWUoJHByaW1hcnksICRhY2NlbnQsICR3YXJuOiBtYXQtcGFsZXR0ZSgkbWF0LXJlZCkpIHtcbiAgQHJldHVybiAoXG4gICAgcHJpbWFyeTogJHByaW1hcnksXG4gICAgYWNjZW50OiAkYWNjZW50LFxuICAgIHdhcm46ICR3YXJuLFxuICAgIGlzLWRhcms6IGZhbHNlLFxuICAgIGZvcmVncm91bmQ6ICRtYXQtbGlnaHQtdGhlbWUtZm9yZWdyb3VuZCxcbiAgICBiYWNrZ3JvdW5kOiAkbWF0LWxpZ2h0LXRoZW1lLWJhY2tncm91bmQsXG4gICk7XG59XG5cblxuLy8gQ3JlYXRlcyBhIGNvbnRhaW5lciBvYmplY3QgZm9yIGEgZGFyayB0aGVtZSB0byBiZSBnaXZlbiB0byBpbmRpdmlkdWFsIGNvbXBvbmVudCB0aGVtZSBtaXhpbnMuXG5AZnVuY3Rpb24gbWF0LWRhcmstdGhlbWUoJHByaW1hcnksICRhY2NlbnQsICR3YXJuOiBtYXQtcGFsZXR0ZSgkbWF0LXJlZCkpIHtcbiAgQHJldHVybiAoXG4gICAgcHJpbWFyeTogJHByaW1hcnksXG4gICAgYWNjZW50OiAkYWNjZW50LFxuICAgIHdhcm46ICR3YXJuLFxuICAgIGlzLWRhcms6IHRydWUsXG4gICAgZm9yZWdyb3VuZDogJG1hdC1kYXJrLXRoZW1lLWZvcmVncm91bmQsXG4gICAgYmFja2dyb3VuZDogJG1hdC1kYXJrLXRoZW1lLWJhY2tncm91bmQsXG4gICk7XG59XG5cblxuXG4kbWF0LXJpcHBsZS1jb2xvci1vcGFjaXR5OiAwLjE7XG5cbkBtaXhpbiBtYXQtcmlwcGxlKCkge1xuXG4gIC8vIFRoZSBob3N0IGVsZW1lbnQgb2YgYW4gbWF0LXJpcHBsZSBkaXJlY3RpdmUgc2hvdWxkIGFsd2F5cyBoYXZlIGEgcG9zaXRpb24gb2YgXCJhYnNvbHV0ZVwiIG9yXG4gIC8vIFwicmVsYXRpdmVcIiBzbyB0aGF0IHRoZSByaXBwbGVzIGluc2lkZSBhcmUgY29ycmVjdGx5IHBvc2l0aW9uZWQgcmVsYXRpdmVseSB0byB0aGUgY29udGFpbmVyLlxuICAubWF0LXJpcHBsZSB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgIC8vIEJ5IGRlZmF1bHQsIGV2ZXJ5IHJpcHBsZSBjb250YWluZXIgc2hvdWxkIGhhdmUgcG9zaXRpb246IHJlbGF0aXZlIGluIGZhdm9yIG9mIGNyZWF0aW5nIGFuXG4gICAgLy8gZWFzeSBBUEkgZm9yIGRldmVsb3BlcnMgdXNpbmcgdGhlIE1hdFJpcHBsZSBkaXJlY3RpdmUuXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgLy8gUHJvbW90ZSBjb250YWluZXJzIHRoYXQgaGF2ZSByaXBwbGVzIHRvIGEgbmV3IGxheWVyLiBXZSB3YW50IHRvIHRhcmdldCBgOm5vdCg6ZW1wdHkpYCxcbiAgICAvLyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgYWxsIHJpcHBsZSBjb250YWluZXJzIHRvIGhhdmUgdGhlaXIgb3duIGxheWVyIHNpbmNlIHRoZXkncmUgdXNlZCBpbiBhXG4gICAgLy8gbG90IG9mIHBsYWNlcyBhbmQgdGhlIGxheWVyIGlzIG9ubHkgcmVsZXZhbnQgd2hpbGUgYW5pbWF0aW5nLiBOb3RlIHRoYXQgaWRlYWxseSB3ZSdkIHVzZVxuICAgIC8vIHRoZSBgY29udGFpbmAgcHJvcGVydHkgaGVyZSAoc2VlICMxMzE3NSksIGJlY2F1c2UgYDplbXB0eWAgY2FuIGJlIGJyb2tlbiBieSBoYXZpbmcgZXh0cmFcbiAgICAvLyB0ZXh0IGluc2lkZSB0aGUgZWxlbWVudCwgYnV0IGl0IGlzbid0IHZlcnkgd2VsbCBzdXBwb3J0ZWQgeWV0LlxuICAgICY6bm90KDplbXB0eSkge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkIHtcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgfVxuXG4gIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5cbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5LCB0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XG5cbiAgICAvLyBJbiBoaWdoIGNvbnRyYXN0IG1vZGUgdGhlIHJpcHBsZSBpcyBvcGFxdWUsIGNhdXNpbmcgaXQgdG8gb2JzdHJ1Y3QgdGhlIGNvbnRlbnQuXG4gICAgQGluY2x1ZGUgY2RrLWhpZ2gtY29udHJhc3QoYWN0aXZlLCBvZmYpIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG59XG5cbi8qIFRoZW1lIGZvciB0aGUgcmlwcGxlIGVsZW1lbnRzLiovXG5AbWl4aW4gbWF0LXJpcHBsZS10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcF9nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQtYmFzZTogbWFwX2dldCgkZm9yZWdyb3VuZCwgYmFzZSk7XG5cbiAgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgLy8gSWYgdGhlIHJpcHBsZSBjb2xvciBpcyByZXNvbHZlcyB0byBhIGNvbG9yICp0eXBlKiwgd2UgY2FuIHVzZSBpdCBkaXJlY3RseSwgb3RoZXJ3aXNlXG4gICAgLy8gKGUuZy4gaXQgcmVzb2x2ZXMgdG8gYSBDU1MgdmFyaWFibGUpIHdlIGZhbGwgYmFjayB0byB1c2luZyB0aGUgY29sb3IgYW5kIHNldHRpbmcgYW4gb3BhY2l0eS5cbiAgICBAaWYgKHR5cGUtb2YoJGZvcmVncm91bmQtYmFzZSkgPT0gY29sb3IpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoJGZvcmVncm91bmQtYmFzZSwgJG1hdC1yaXBwbGUtY29sb3Itb3BhY2l0eSk7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRmb3JlZ3JvdW5kLWJhc2U7XG4gICAgICBvcGFjaXR5OiAkbWF0LXJpcHBsZS1jb2xvci1vcGFjaXR5O1xuICAgIH1cbiAgfVxufVxuXG5cblxuLy8gVXRpbGl0eSBmb3IgZmV0Y2hpbmcgYSBuZXN0ZWQgdmFsdWUgZnJvbSBhIHR5cG9ncmFwaHkgY29uZmlnLlxuQGZ1bmN0aW9uIF9tYXQtZ2V0LXR5cGUtdmFsdWUoJGNvbmZpZywgJGxldmVsLCAkbmFtZSkge1xuICBAcmV0dXJuIG1hcC1nZXQobWFwLWdldCgkY29uZmlnLCAkbGV2ZWwpLCAkbmFtZSk7XG59XG5cbi8vIEdldHMgdGhlIGZvbnQgc2l6ZSBmb3IgYSBsZXZlbCBpbnNpZGUgYSB0eXBvZ3JhcGh5IGNvbmZpZy5cbkBmdW5jdGlvbiBtYXQtZm9udC1zaXplKCRjb25maWcsICRsZXZlbCkge1xuICBAcmV0dXJuIF9tYXQtZ2V0LXR5cGUtdmFsdWUoJGNvbmZpZywgJGxldmVsLCBmb250LXNpemUpO1xufVxuXG4vLyBHZXRzIHRoZSBsaW5lIGhlaWdodCBmb3IgYSBsZXZlbCBpbnNpZGUgYSB0eXBvZ3JhcGh5IGNvbmZpZy5cbkBmdW5jdGlvbiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgJGxldmVsKSB7XG4gIEByZXR1cm4gX21hdC1nZXQtdHlwZS12YWx1ZSgkY29uZmlnLCAkbGV2ZWwsIGxpbmUtaGVpZ2h0KTtcbn1cblxuLy8gR2V0cyB0aGUgZm9udCB3ZWlnaHQgZm9yIGEgbGV2ZWwgaW5zaWRlIGEgdHlwb2dyYXBoeSBjb25maWcuXG5AZnVuY3Rpb24gbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsICRsZXZlbCkge1xuICBAcmV0dXJuIF9tYXQtZ2V0LXR5cGUtdmFsdWUoJGNvbmZpZywgJGxldmVsLCBmb250LXdlaWdodCk7XG59XG5cbi8vIEdldHMgdGhlIGxldHRlciBzcGFjaW5nIGZvciBhIGxldmVsIGluc2lkZSBhIHR5cG9ncmFwaHkgY29uZmlnLlxuQGZ1bmN0aW9uIG1hdC1sZXR0ZXItc3BhY2luZygkY29uZmlnLCAkbGV2ZWwpIHtcbiAgQHJldHVybiBfbWF0LWdldC10eXBlLXZhbHVlKCRjb25maWcsICRsZXZlbCwgbGV0dGVyLXNwYWNpbmcpO1xufVxuXG4vLyBHZXRzIHRoZSBmb250LWZhbWlseSBmcm9tIGEgdHlwb2dyYXBoeSBjb25maWcgYW5kIHJlbW92ZXMgdGhlIHF1b3RlcyBhcm91bmQgaXQuXG5AZnVuY3Rpb24gbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsICRsZXZlbDogbnVsbCkge1xuICAkZm9udC1mYW1pbHk6IG1hcC1nZXQoJGNvbmZpZywgZm9udC1mYW1pbHkpO1xuXG4gIEBpZiAkbGV2ZWwgIT0gbnVsbCB7XG4gICAgJGZvbnQtZmFtaWx5OiBfbWF0LWdldC10eXBlLXZhbHVlKCRjb25maWcsICRsZXZlbCwgZm9udC1mYW1pbHkpO1xuICB9XG5cbiAgLy8gR3VhcmQgYWdhaW5zdCB1bnF1b3Rpbmcgbm9uLXN0cmluZyB2YWx1ZXMsIGJlY2F1c2UgaXQncyBkZXByZWNhdGVkLlxuICBAcmV0dXJuIGlmKHR5cGUtb2YoJGZvbnQtZmFtaWx5KSA9PSBzdHJpbmcsIHVucXVvdGUoJGZvbnQtZmFtaWx5KSwgJGZvbnQtZmFtaWx5KTtcbn1cblxuLy8gT3V0cHV0cyB0aGUgc2hvcnRoYW5kIGBmb250YCBDU1MgcHJvcGVydHksIGJhc2VkIG9uIGEgc2V0IG9mIHR5cG9ncmFwaHkgdmFsdWVzLiBGYWxscyBiYWNrIHRvXG4vLyB0aGUgaW5kaXZpZHVhbCBwcm9wZXJ0aWVzIGlmIGEgdmFsdWUgdGhhdCBpc24ndCBhbGxvd2VkIGluIHRoZSBzaG9ydGhhbmQgaXMgcGFzc2VkIGluLlxuQG1peGluIG1hdC10eXBvZ3JhcGh5LWZvbnQtc2hvcnRoYW5kKCRmb250LXNpemUsICRmb250LXdlaWdodCwgJGxpbmUtaGVpZ2h0LCAkZm9udC1mYW1pbHkpIHtcbiAgLy8gSWYgYW55IG9mIHRoZSB2YWx1ZXMgYXJlIHNldCB0byBgaW5oZXJpdGAsIHdlIGNhbid0IHVzZSB0aGUgc2hvcnRoYW5kXG4gIC8vIHNvIHdlIGZhbGwgYmFjayB0byBwYXNzaW5nIGluIHRoZSBpbmRpdmlkdWFsIHByb3BlcnRpZXMuXG4gIEBpZiAoJGZvbnQtc2l6ZSA9PSBpbmhlcml0IG9yXG4gICAgICAgJGZvbnQtd2VpZ2h0ID09IGluaGVyaXQgb3JcbiAgICAgICAkbGluZS1oZWlnaHQgPT0gaW5oZXJpdCBvclxuICAgICAgICRmb250LWZhbWlseSA9PSBpbmhlcml0IG9yXG4gICAgICAgJGZvbnQtc2l6ZSA9PSBudWxsIG9yXG4gICAgICAgJGZvbnQtd2VpZ2h0ID09IG51bGwgb3JcbiAgICAgICAkbGluZS1oZWlnaHQgPT0gbnVsbCBvclxuICAgICAgICRmb250LWZhbWlseSA9PSBudWxsKSB7XG5cbiAgICBmb250LXNpemU6ICRmb250LXNpemU7XG4gICAgZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodDtcbiAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0O1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHk7XG4gIH1cbiAgQGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZSB1c2UgdGhlIHNob3J0aGFuZCBgZm9udGAsIGJlY2F1c2UgaXQncyB0aGUgbGVhc3QgYW1vdW50IG9mIGJ5dGVzLiBOb3RlXG4gICAgLy8gdGhhdCB3ZSBuZWVkIHRvIHVzZSBpbnRlcnBvbGF0aW9uIGZvciBgZm9udC1zaXplL2xpbmUtaGVpZ2h0YCBpbiBvcmRlciB0byBwcmV2ZW50XG4gICAgLy8gU2FzcyBmcm9tIGRpdmlkaW5nIHRoZSB0d28gdmFsdWVzLlxuICAgIGZvbnQ6ICRmb250LXdlaWdodCAjeyRmb250LXNpemV9LyN7JGxpbmUtaGVpZ2h0fSAkZm9udC1mYW1pbHk7XG4gIH1cbn1cblxuLy8gQ29udmVydHMgYSB0eXBvZ3JhcGh5IGxldmVsIGludG8gQ1NTIHN0eWxlcy5cbkBtaXhpbiBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgJGxldmVsKSB7XG4gICRmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgJGxldmVsKTtcbiAgJGZvbnQtd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgJGxldmVsKTtcbiAgJGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgJGxldmVsKTtcbiAgJGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgJGxldmVsKTtcblxuICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1mb250LXNob3J0aGFuZCgkZm9udC1zaXplLCAkZm9udC13ZWlnaHQsICRsaW5lLWhlaWdodCwgJGZvbnQtZmFtaWx5KTtcbiAgbGV0dGVyLXNwYWNpbmc6IG1hdC1sZXR0ZXItc3BhY2luZygkY29uZmlnLCAkbGV2ZWwpO1xufVxuXG5cbkBtaXhpbiBtYXQtb3B0aW9uLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcblxuICAubWF0LW9wdGlvbiB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgICAmOmhvdmVyOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCksXG4gICAgJjpmb2N1czpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIpO1xuICAgIH1cblxuICAgIC8vIEluIG11bHRpcGxlIG1vZGUgdGhlcmUgaXMgYSBjaGVja2JveCB0byBzaG93IHRoYXQgdGhlIG9wdGlvbiBpcyBzZWxlY3RlZC5cbiAgICAmLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3Zlcik7XG4gICAgfVxuXG4gICAgJi5tYXQtYWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIpO1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgfVxuXG4gICAgJi5tYXQtb3B0aW9uLWRpc2FibGVkIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGhpbnQtdGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1wcmltYXJ5IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtYWNjZW50IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIHRleHQpO1xuICB9XG5cbiAgLm1hdC13YXJuIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LW9wdGlvbi10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1vcHRpb24ge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBzdWJoZWFkaW5nLTIpO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtb3B0Z3JvdXAtdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1vcHRncm91cC1sYWJlbCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1vcHRncm91cC1kaXNhYmxlZCAubWF0LW9wdGdyb3VwLWxhYmVsIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBoaW50LXRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtb3B0Z3JvdXAtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtb3B0Z3JvdXAtbGFiZWwge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBib2R5LTIpO1xuICB9XG59XG5cblxuXG5AbWl4aW4gbWF0LXBzZXVkby1jaGVja2JveC10aGVtZSgkdGhlbWUpIHtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG5cbiAgLy8gTk9URSh0cmF2aXNrYXVmbWFuKTogV2hpbGUgdGhlIHNwZWMgY2FsbHMgZm9yIHRyYW5zbHVjZW50IGJsYWNrcy93aGl0ZXMgZm9yIGRpc2FibGVkIGNvbG9ycyxcbiAgLy8gdGhpcyBkb2VzIG5vdCB3b3JrIHdlbGwgd2l0aCBlbGVtZW50cyBsYXllcmVkIG9uIHRvcCBvZiBvbmUgYW5vdGhlci4gVG8gZ2V0IGFyb3VuZCB0aGlzIHdlXG4gIC8vIGJsZW5kIHRoZSBjb2xvcnMgdG9nZXRoZXIgYmFzZWQgb24gdGhlIGJhc2UgY29sb3IgYW5kIHRoZSB0aGVtZSBiYWNrZ3JvdW5kLlxuICAkd2hpdGUtMzBwY3Qtb3BhY2l0eS1vbi1kYXJrOiAjNjg2ODY4O1xuICAkYmxhY2stMjZwY3Qtb3BhY2l0eS1vbi1saWdodDogI2IwYjBiMDtcbiAgJGRpc2FibGVkLWNvbG9yOiBpZigkaXMtZGFyay10aGVtZSwgJHdoaXRlLTMwcGN0LW9wYWNpdHktb24tZGFyaywgJGJsYWNrLTI2cGN0LW9wYWNpdHktb24tbGlnaHQpO1xuICAkY29sb3JlZC1ib3gtc2VsZWN0b3I6ICcubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlJztcblxuICAubWF0LXBzZXVkby1jaGVja2JveCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCksIHNlY29uZGFyeS10ZXh0KTtcblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGJhY2tncm91bmQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkIHtcbiAgICBjb2xvcjogJGRpc2FibGVkLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsXG4gIC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IobWFwLWdldCgkdGhlbWUsIHByaW1hcnkpKTtcbiAgfVxuXG4gIC8vIERlZmF1bHQgdG8gdGhlIGFjY2VudCBjb2xvci4gTm90ZSB0aGF0IHRoZSBwc2V1ZG8gY2hlY2tib3hlcyBhcmUgbWVhbnQgdG8gaW5oZXJpdCB0aGVcbiAgLy8gdGhlbWUgZnJvbSB0aGVpciBwYXJlbnQsIHJhdGhlciB0aGFuIGltcGxlbWVudGluZyB0aGVpciBvd24gdGhlbWluZywgd2hpY2ggaXMgd2h5IHdlXG4gIC8vIGRvbid0IGF0dGFjaCB0byB0aGUgYG1hdC0qYCBjbGFzc2VzLiBBbHNvIG5vdGUgdGhhdCB0aGlzIG5lZWRzIHRvIGJlIGJlbG93IGAubWF0LXByaW1hcnlgXG4gIC8vIGluIG9yZGVyIHRvIGFsbG93IGZvciB0aGUgY29sb3IgdG8gYmUgb3ZlcndyaXR0ZW4gaWYgdGhlIGNoZWNrYm94IGlzIGluc2lkZSBhIHBhcmVudCB0aGF0XG4gIC8vIGhhcyBgbWF0LWFjY2VudGAgYW5kIGlzIHBsYWNlZCBpbnNpZGUgYW5vdGhlciBwYXJlbnQgdGhhdCBoYXMgYG1hdC1wcmltYXJ5YC5cbiAgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxcbiAgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSxcbiAgLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxcbiAgLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpKTtcbiAgfVxuXG4gIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLFxuICAubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKG1hcC1nZXQoJHRoZW1lLCB3YXJuKSk7XG4gIH1cblxuICAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLFxuICAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlIHtcbiAgICAmLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQge1xuICAgICAgYmFja2dyb3VuZDogJGRpc2FibGVkLWNvbG9yO1xuICAgIH1cbiAgfVxufVxuXG5cblxuLy8gUmVwcmVzZW50cyBhIHR5cG9ncmFwaHkgbGV2ZWwgZnJvbSB0aGUgTWF0ZXJpYWwgZGVzaWduIHNwZWMuXG5AZnVuY3Rpb24gbWF0LXR5cG9ncmFwaHktbGV2ZWwoXG4gICRmb250LXNpemUsXG4gICRsaW5lLWhlaWdodDogJGZvbnQtc2l6ZSxcbiAgJGZvbnQtd2VpZ2h0OiA0MDAsXG4gICRmb250LWZhbWlseTogbnVsbCxcbiAgJGxldHRlci1zcGFjaW5nOiBub3JtYWwpIHtcblxuICBAcmV0dXJuIChcbiAgICBmb250LXNpemU6ICRmb250LXNpemUsXG4gICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodCxcbiAgICBmb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LFxuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHksXG4gICAgbGV0dGVyLXNwYWNpbmc6ICRsZXR0ZXItc3BhY2luZ1xuICApO1xufVxuXG4vLyBSZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiB0eXBvZ3JhcGh5IGxldmVscy5cbi8vIERlZmF1bHRzIGNvbWUgZnJvbSBodHRwczovL21hdGVyaWFsLmlvL2d1aWRlbGluZXMvc3R5bGUvdHlwb2dyYXBoeS5odG1sXG4vLyBOb3RlOiBUaGUgc3BlYyBkb2Vzbid0IG1lbnRpb24gbGV0dGVyIHNwYWNpbmcuIFRoZSB2YWx1ZXMgaGVyZSBjb21lIGZyb21cbi8vIGV5ZWJhbGxpbmcgaXQgdW50aWwgaXQgbG9va2VkIGV4YWN0bHkgbGlrZSB0aGUgc3BlYyBleGFtcGxlcy5cbkBmdW5jdGlvbiBtYXQtdHlwb2dyYXBoeS1jb25maWcoXG4gICRmb250LWZhbWlseTogICAnUm9ib3RvLCBcIkhlbHZldGljYSBOZXVlXCIsIHNhbnMtc2VyaWYnLFxuICAkZGlzcGxheS00OiAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMTEycHgsIDExMnB4LCAzMDAsICRsZXR0ZXItc3BhY2luZzogLTAuMDVlbSksXG4gICRkaXNwbGF5LTM6ICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCg1NnB4LCA1NnB4LCA0MDAsICRsZXR0ZXItc3BhY2luZzogLTAuMDJlbSksXG4gICRkaXNwbGF5LTI6ICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCg0NXB4LCA0OHB4LCA0MDAsICRsZXR0ZXItc3BhY2luZzogLTAuMDA1ZW0pLFxuICAkZGlzcGxheS0xOiAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMzRweCwgNDBweCwgNDAwKSxcbiAgJGhlYWRsaW5lOiAgICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDI0cHgsIDMycHgsIDQwMCksXG4gICR0aXRsZTogICAgICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgyMHB4LCAzMnB4LCA1MDApLFxuICAkc3ViaGVhZGluZy0yOiAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMTZweCwgMjhweCwgNDAwKSxcbiAgJHN1YmhlYWRpbmctMTogIG1hdC10eXBvZ3JhcGh5LWxldmVsKDE1cHgsIDI0cHgsIDQwMCksXG4gICRib2R5LTI6ICAgICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgxNHB4LCAyNHB4LCA1MDApLFxuICAkYm9keS0xOiAgICAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMTRweCwgMjBweCwgNDAwKSxcbiAgJGNhcHRpb246ICAgICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDEycHgsIDIwcHgsIDQwMCksXG4gICRidXR0b246ICAgICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgxNHB4LCAxNHB4LCA1MDApLFxuICAvLyBMaW5lLWhlaWdodCBtdXN0IGJlIHVuaXQtbGVzcyBmcmFjdGlvbiBvZiB0aGUgZm9udC1zaXplLlxuICAkaW5wdXQ6ICAgICAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoaW5oZXJpdCwgMS4xMjUsIDQwMClcbikge1xuXG4gIC8vIERlY2xhcmUgYW4gaW5pdGlhbCBtYXAgd2l0aCBhbGwgb2YgdGhlIGxldmVscy5cbiAgJGNvbmZpZzogKFxuICAgIGRpc3BsYXktNDogICAgICAkZGlzcGxheS00LFxuICAgIGRpc3BsYXktMzogICAgICAkZGlzcGxheS0zLFxuICAgIGRpc3BsYXktMjogICAgICAkZGlzcGxheS0yLFxuICAgIGRpc3BsYXktMTogICAgICAkZGlzcGxheS0xLFxuICAgIGhlYWRsaW5lOiAgICAgICAkaGVhZGxpbmUsXG4gICAgdGl0bGU6ICAgICAgICAgICR0aXRsZSxcbiAgICBzdWJoZWFkaW5nLTI6ICAgJHN1YmhlYWRpbmctMixcbiAgICBzdWJoZWFkaW5nLTE6ICAgJHN1YmhlYWRpbmctMSxcbiAgICBib2R5LTI6ICAgICAgICAgJGJvZHktMixcbiAgICBib2R5LTE6ICAgICAgICAgJGJvZHktMSxcbiAgICBjYXB0aW9uOiAgICAgICAgJGNhcHRpb24sXG4gICAgYnV0dG9uOiAgICAgICAgICRidXR0b24sXG4gICAgaW5wdXQ6ICAgICAgICAgICRpbnB1dCxcbiAgKTtcblxuICAvLyBMb29wIHRocm91Z2ggdGhlIGxldmVscyBhbmQgc2V0IHRoZSBgZm9udC1mYW1pbHlgIG9mIHRoZSBvbmVzIHRoYXQgZG9uJ3QgaGF2ZSBvbmUgdG8gdGhlIGJhc2UuXG4gIC8vIE5vdGUgdGhhdCBTYXNzIGNhbid0IG1vZGlmeSBtYXBzIGluIHBsYWNlLCB3aGljaCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gbWVyZ2UgYW5kIHJlLWFzc2lnbi5cbiAgQGVhY2ggJGtleSwgJGxldmVsIGluICRjb25maWcge1xuICAgIEBpZiBtYXAtZ2V0KCRsZXZlbCwgZm9udC1mYW1pbHkpID09IG51bGwge1xuICAgICAgJG5ldy1sZXZlbDogbWFwLW1lcmdlKCRsZXZlbCwgKGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHkpKTtcbiAgICAgICRjb25maWc6IG1hcC1tZXJnZSgkY29uZmlnLCAoJGtleTogJG5ldy1sZXZlbCkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCB0aGUgYmFzZSBmb250IGZhbWlseSB0byB0aGUgY29uZmlnLlxuICBAcmV0dXJuIG1hcC1tZXJnZSgkY29uZmlnLCAoZm9udC1mYW1pbHk6ICRmb250LWZhbWlseSkpO1xufVxuXG4vLyBBZGRzIHRoZSBiYXNlIHR5cG9ncmFwaHkgc3R5bGVzLCBiYXNlZCBvbiBhIGNvbmZpZy5cbkBtaXhpbiBtYXQtYmFzZS10eXBvZ3JhcGh5KCRjb25maWcsICRzZWxlY3RvcjogJy5tYXQtdHlwb2dyYXBoeScpIHtcbiAgLm1hdC1oMSwgLm1hdC1oZWFkbGluZSwgI3skc2VsZWN0b3J9IGgxIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgaGVhZGxpbmUpO1xuICAgIG1hcmdpbjogMCAwIDE2cHg7XG4gIH1cblxuICAubWF0LWgyLCAubWF0LXRpdGxlLCAjeyRzZWxlY3Rvcn0gaDIge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCB0aXRsZSk7XG4gICAgbWFyZ2luOiAwIDAgMTZweDtcbiAgfVxuXG4gIC5tYXQtaDMsIC5tYXQtc3ViaGVhZGluZy0yLCAjeyRzZWxlY3Rvcn0gaDMge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBzdWJoZWFkaW5nLTIpO1xuICAgIG1hcmdpbjogMCAwIDE2cHg7XG4gIH1cblxuICAubWF0LWg0LCAubWF0LXN1YmhlYWRpbmctMSwgI3skc2VsZWN0b3J9IGg0IHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgc3ViaGVhZGluZy0xKTtcbiAgICBtYXJnaW46IDAgMCAxNnB4O1xuICB9XG5cbiAgLy8gTm90ZTogdGhlIHNwZWMgZG9lc24ndCBoYXZlIGFueXRoaW5nIHRoYXQgd291bGQgY29ycmVzcG9uZCB0byBoNSBhbmQgaDYsIGJ1dCB3ZSBhZGQgdGhlc2UgZm9yXG4gIC8vIGNvbnNpc3RlbmN5LiBUaGUgZm9udCBzaXplcyBjb21lIGZyb20gdGhlIENocm9tZSB1c2VyIGFnZW50IHN0eWxlcyB3aGljaCBoYXZlIGg1IGF0IDAuODNlbVxuICAvLyBhbmQgaDYgYXQgMC42N2VtLlxuICAubWF0LWg1LCAjeyRzZWxlY3Rvcn0gaDUge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWZvbnQtc2hvcnRoYW5kKFxuICAgICAgIC8vIGNhbGMgaXMgdXNlZCBoZXJlIHRvIHN1cHBvcnQgY3NzIHZhcmlhYmxlc1xuICAgICAgY2FsYygje21hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKX0gKiAwLjgzKSxcbiAgICAgIG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTEpLFxuICAgICAgbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGJvZHktMSksXG4gICAgICBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgYm9keS0xKVxuICAgICk7XG5cbiAgICBtYXJnaW46IDAgMCAxMnB4O1xuICB9XG5cbiAgLm1hdC1oNiwgI3skc2VsZWN0b3J9IGg2IHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1mb250LXNob3J0aGFuZChcbiAgICAgICAvLyBjYWxjIGlzIHVzZWQgaGVyZSB0byBzdXBwb3J0IGNzcyB2YXJpYWJsZXNcbiAgICAgIGNhbGMoI3ttYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSl9ICogMC42NyksXG4gICAgICBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0xKSxcbiAgICAgIG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBib2R5LTEpLFxuICAgICAgbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGJvZHktMSlcbiAgICApO1xuXG4gICAgbWFyZ2luOiAwIDAgMTJweDtcbiAgfVxuXG4gIC5tYXQtYm9keS1zdHJvbmcsIC5tYXQtYm9keS0yIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgYm9keS0yKTtcbiAgfVxuXG4gIC5tYXQtYm9keSwgLm1hdC1ib2R5LTEsICN7JHNlbGVjdG9yfSB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGJvZHktMSk7XG5cbiAgICBwIHtcbiAgICAgIG1hcmdpbjogMCAwIDEycHg7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbWFsbCwgLm1hdC1jYXB0aW9uIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgY2FwdGlvbik7XG4gIH1cblxuICAubWF0LWRpc3BsYXktNCwgI3skc2VsZWN0b3J9IC5tYXQtZGlzcGxheS00IHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgZGlzcGxheS00KTtcbiAgICBtYXJnaW46IDAgMCA1NnB4O1xuICB9XG5cbiAgLm1hdC1kaXNwbGF5LTMsICN7JHNlbGVjdG9yfSAubWF0LWRpc3BsYXktMyB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGRpc3BsYXktMyk7XG4gICAgbWFyZ2luOiAwIDAgNjRweDtcbiAgfVxuXG4gIC5tYXQtZGlzcGxheS0yLCAjeyRzZWxlY3Rvcn0gLm1hdC1kaXNwbGF5LTIge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBkaXNwbGF5LTIpO1xuICAgIG1hcmdpbjogMCAwIDY0cHg7XG4gIH1cblxuICAubWF0LWRpc3BsYXktMSwgI3skc2VsZWN0b3J9IC5tYXQtZGlzcGxheS0xIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgZGlzcGxheS0xKTtcbiAgICBtYXJnaW46IDAgMCA2NHB4O1xuICB9XG59XG5cblxuXG5cbkBtaXhpbiBtYXQtYXV0b2NvbXBsZXRlLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuXG4gIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbig0LCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgICAvLyBTZWxlY3RlZCBvcHRpb25zIGluIGF1dG9jb21wbGV0ZXMgc2hvdWxkIG5vdCBiZSBncmF5LCBidXQgd2VcbiAgICAvLyBvbmx5IHdhbnQgdG8gb3ZlcnJpZGUgdGhlIGJhY2tncm91bmQgZm9yIHNlbGVjdGVkIG9wdGlvbnMgaWZcbiAgICAvLyB0aGV5IGFyZSAqbm90KiBpbiBob3ZlciBvciBmb2N1cyBzdGF0ZS4gVGhpcyBjaGFuZ2UgaGFzIHRvIGJlXG4gICAgLy8gbWFkZSBoZXJlIGJlY2F1c2UgYmFzZSBvcHRpb24gc3R5bGVzIGFyZSBzaGFyZWQgYmV0d2VlbiB0aGVcbiAgICAvLyBhdXRvY29tcGxldGUgYW5kIHRoZSBzZWxlY3QuXG4gICAgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcikge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcblxuICAgICAgJjpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpIHtcbiAgICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbn1cblxuQG1peGluIG1hdC1hdXRvY29tcGxldGUtdHlwb2dyYXBoeSgkY29uZmlnKSB7IH1cblxuLy8gVGhpcyBjb250YWlucyBhbGwgb2YgdGhlIHN0eWxlcyBmb3IgdGhlIGJhZGdlXG4vLyByYXRoZXIgdGhhbiBqdXN0IHRoZSBjb2xvci90aGVtZSBiZWNhdXNlIG9mXG4vLyBubyBzdHlsZSBzaGVldCBzdXBwb3J0IGZvciBkaXJlY3RpdmVzLlxuXG5cblxuXG5cbiRtYXQtYmFkZ2UtZm9udC1zaXplOiAxMnB4O1xuJG1hdC1iYWRnZS1mb250LXdlaWdodDogNjAwO1xuJG1hdC1iYWRnZS1kZWZhdWx0LXNpemU6IDIycHggIWRlZmF1bHQ7XG4kbWF0LWJhZGdlLXNtYWxsLXNpemU6ICRtYXQtYmFkZ2UtZGVmYXVsdC1zaXplIC0gNjtcbiRtYXQtYmFkZ2UtbGFyZ2Utc2l6ZTogJG1hdC1iYWRnZS1kZWZhdWx0LXNpemUgKyA2O1xuXG4vLyBNaXhpbiBmb3IgYnVpbGRpbmcgb2Zmc2V0IGdpdmVuIGRpZmZlcmVudCBzaXplc1xuQG1peGluIF9tYXQtYmFkZ2Utc2l6ZSgkc2l6ZSkge1xuICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgIHdpZHRoOiAkc2l6ZTtcbiAgICBoZWlnaHQ6ICRzaXplO1xuICAgIGxpbmUtaGVpZ2h0OiAkc2l6ZTtcbiAgfVxuXG4gICYubWF0LWJhZGdlLWFib3ZlIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgdG9wOiAtJHNpemUgLyAyO1xuICAgIH1cbiAgfVxuXG4gICYubWF0LWJhZGdlLWJlbG93IHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgYm90dG9tOiAtJHNpemUgLyAyO1xuICAgIH1cbiAgfVxuXG4gICYubWF0LWJhZGdlLWJlZm9yZSB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIGxlZnQ6IC0kc2l6ZTtcbiAgICB9XG4gIH1cblxuICBbZGlyPSdydGwnXSAmLm1hdC1iYWRnZS1iZWZvcmUge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICBsZWZ0OiBhdXRvO1xuICAgICAgcmlnaHQ6IC0kc2l6ZTtcbiAgICB9XG4gIH1cblxuICAmLm1hdC1iYWRnZS1hZnRlciB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIHJpZ2h0OiAtJHNpemU7XG4gICAgfVxuICB9XG5cbiAgW2Rpcj0ncnRsJ10gJi5tYXQtYmFkZ2UtYWZ0ZXIge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICByaWdodDogYXV0bztcbiAgICAgIGxlZnQ6IC0kc2l6ZTtcbiAgICB9XG4gIH1cblxuICAmLm1hdC1iYWRnZS1vdmVybGFwIHtcbiAgICAmLm1hdC1iYWRnZS1iZWZvcmUge1xuICAgICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgICAgbGVmdDogLSRzaXplIC8gMjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBbZGlyPSdydGwnXSAmLm1hdC1iYWRnZS1iZWZvcmUge1xuICAgICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgICAgbGVmdDogYXV0bztcbiAgICAgICAgcmlnaHQ6IC0kc2l6ZSAvIDI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5tYXQtYmFkZ2UtYWZ0ZXIge1xuICAgICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgICAgcmlnaHQ6IC0kc2l6ZSAvIDI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgW2Rpcj0ncnRsJ10gJi5tYXQtYmFkZ2UtYWZ0ZXIge1xuICAgICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgICAgcmlnaHQ6IGF1dG87XG4gICAgICAgIGxlZnQ6IC0kc2l6ZSAvIDI7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtYmFkZ2UtdGhlbWUoJHRoZW1lKSB7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgZGVmYXVsdC1jb250cmFzdCk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRwcmltYXJ5KTtcblxuICAgIEBpbmNsdWRlIGNkay1oaWdoLWNvbnRyYXN0KGFjdGl2ZSwgb2ZmKSB7XG4gICAgICBvdXRsaW5lOiBzb2xpZCAxcHg7XG4gICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYmFkZ2UtYWNjZW50IHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRhY2NlbnQpO1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJhZGdlLXdhcm4ge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkd2Fybik7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1iYWRnZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG5cbiAgLm1hdC1iYWRnZS1oaWRkZW4ge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYmFkZ2UtZGlzYWJsZWQge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICAkYXBwLWJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2JhY2tncm91bmQnKTtcbiAgICAgICRiYWRnZS1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC1idXR0b24pO1xuXG4gICAgICAvLyBUaGUgZGlzYWJsZWQgY29sb3IgdXN1YWxseSBoYXMgc29tZSBraW5kIG9mIG9wYWNpdHksIGJ1dCBiZWNhdXNlIHRoZSBiYWRnZSBpcyBvdmVybGF5ZWRcbiAgICAgIC8vIG9uIHRvcCBvZiBzb21ldGhpbmcgZWxzZSwgaXQgd29uJ3QgbG9vayBnb29kIGlmIGl0J3Mgb3BhcXVlLiBJZiBpdCBpcyBhIGNvbG9yICp0eXBlKixcbiAgICAgIC8vIHdlIGNvbnZlcnQgaXQgaW50byBhIHNvbGlkIGNvbG9yIGJ5IHRha2luZyB0aGUgb3BhY2l0eSBmcm9tIHRoZSByZ2JhIHZhbHVlIGFuZCB1c2luZ1xuICAgICAgLy8gdGhlIHZhbHVlIHRvIGRldGVybWluZSB0aGUgcGVyY2VudGFnZSBvZiB0aGUgYmFja2dyb3VuZCB0byBwdXQgaW50byBmb3JlZ3JvdW5kIHdoZW5cbiAgICAgIC8vIG1peGluZyB0aGUgY29sb3JzIHRvZ2V0aGVyLlxuICAgICAgQGlmICh0eXBlLW9mKCRiYWRnZS1jb2xvcikgPT0gY29sb3IgYW5kIHR5cGUtb2YoJGFwcC1iYWNrZ3JvdW5kKSA9PSBjb2xvcikge1xuICAgICAgICAkYmFkZ2Utb3BhY2l0eTogb3BhY2l0eSgkYmFkZ2UtY29sb3IpO1xuICAgICAgICBiYWNrZ3JvdW5kOiBtaXgoJGFwcC1iYWNrZ3JvdW5kLCByZ2JhKCRiYWRnZS1jb2xvciwgMSksICgxIC0gJGJhZGdlLW9wYWNpdHkpICogMTAwJSk7XG4gICAgICB9XG4gICAgICBAZWxzZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRiYWRnZS1jb2xvcjtcbiAgICAgIH1cblxuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDIwMG1zIGVhc2UtaW4tb3V0O1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC42KTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIH1cblxuICAubmctYW5pbWF0ZS1kaXNhYmxlZCAubWF0LWJhZGdlLWNvbnRlbnQsXG4gIC5tYXQtYmFkZ2UtY29udGVudC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSB7XG4gICAgdHJhbnNpdGlvbjogbm9uZTtcbiAgfVxuXG4gIC8vIFRoZSBhY3RpdmUgY2xhc3MgaXMgYWRkZWQgYWZ0ZXIgdGhlIGVsZW1lbnQgaXMgYWRkZWRcbiAgLy8gc28gaXQgY2FuIGFuaW1hdGUgc2NhbGUgdG8gZGVmYXVsdFxuICAubWF0LWJhZGdlLWNvbnRlbnQubWF0LWJhZGdlLWFjdGl2ZSB7XG4gICAgLy8gU2NhbGUgdG8gYG5vbmVgIGluc3RlYWQgb2YgYDFgIHRvIGF2b2lkIGJsdXJyeSB0ZXh0IGluIHNvbWUgYnJvd3NlcnMuXG4gICAgdHJhbnNmb3JtOiBub25lO1xuICB9XG5cbiAgLm1hdC1iYWRnZS1zbWFsbCB7XG4gICAgQGluY2x1ZGUgX21hdC1iYWRnZS1zaXplKCRtYXQtYmFkZ2Utc21hbGwtc2l6ZSk7XG4gIH1cbiAgLm1hdC1iYWRnZS1tZWRpdW0ge1xuICAgIEBpbmNsdWRlIF9tYXQtYmFkZ2Utc2l6ZSgkbWF0LWJhZGdlLWRlZmF1bHQtc2l6ZSk7XG4gIH1cbiAgLm1hdC1iYWRnZS1sYXJnZSB7XG4gICAgQGluY2x1ZGUgX21hdC1iYWRnZS1zaXplKCRtYXQtYmFkZ2UtbGFyZ2Utc2l6ZSk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1iYWRnZS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICBmb250LXdlaWdodDogJG1hdC1iYWRnZS1mb250LXdlaWdodDtcbiAgICBmb250LXNpemU6ICRtYXQtYmFkZ2UtZm9udC1zaXplO1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgLy8gU2V0IHRoZSBmb250IHNpemUgdG8gNzUlIG9mIHRoZSBvcmlnaW5hbC5cbiAgICBmb250LXNpemU6ICRtYXQtYmFkZ2UtZm9udC1zaXplICogMC43NTtcbiAgfVxuXG4gIC5tYXQtYmFkZ2UtbGFyZ2UgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICBmb250LXNpemU6ICRtYXQtYmFkZ2UtZm9udC1zaXplICogMjtcbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtYm90dG9tLXNoZWV0LXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lciB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oMTYsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBkaWFsb2cpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtYm90dG9tLXNoZWV0LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXIge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBib2R5LTEpO1xuICB9XG59XG5cblxuXG5cblxuJF9tYXQtYnV0dG9uLXJpcHBsZS1vcGFjaXR5OiAwLjE7XG5cbi8vIEFwcGxpZXMgYSBmb2N1cyBzdHlsZSB0byBhbiBtYXQtYnV0dG9uIGVsZW1lbnQgZm9yIGVhY2ggb2YgdGhlIHN1cHBvcnRlZCBwYWxldHRlcy5cbkBtaXhpbiBfbWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LWNvbG9yKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcblxuICAmLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG4gIH1cblxuICAmLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQpO1xuICB9XG5cbiAgJi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHdhcm4pO1xuICB9XG5cbiAgJltkaXNhYmxlZF0gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIH1cbn1cblxuLy8gQXBwbGllcyB0aGUgYmFja2dyb3VuZCBjb2xvciBmb3IgYSByaXBwbGUuIElmIHRoZSB2YWx1ZSBwcm92aWRlZCBpcyBub3QgYSBTYXNzIGNvbG9yLFxuLy8gd2UgYXNzdW1lIHRoYXQgd2UndmUgYmVlbiBnaXZlbiBhIENTUyB2YXJpYWJsZS4gU2luY2Ugd2UgY2FuJ3QgcGVyZm9ybSBhbHBoYS1ibGVuZGluZ1xuLy8gb24gYSBDU1MgdmFyaWFibGUsIHdlIGluc3RlYWQgYWRkIHRoZSBvcGFjaXR5IGRpcmVjdGx5IHRvIHRoZSByaXBwbGUgZWxlbWVudC5cbkBtaXhpbiBfbWF0LWJ1dHRvbi1yaXBwbGUtYmFja2dyb3VuZCgkcGFsZXR0ZSwgJGh1ZSwgJG9wYWNpdHkpIHtcbiAgJGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgJGh1ZSwgJG9wYWNpdHkpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1jb2xvcjtcbiAgQGlmICh0eXBlLW9mKCRiYWNrZ3JvdW5kLWNvbG9yKSAhPSBjb2xvcikge1xuICAgIG9wYWNpdHk6ICRvcGFjaXR5O1xuICB9XG59XG5cbkBtaXhpbiBfbWF0LWJ1dHRvbi1yaXBwbGUtY29sb3IoJHRoZW1lLCAkaHVlLCAkb3BhY2l0eTogJF9tYXQtYnV0dG9uLXJpcHBsZS1vcGFjaXR5KSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuXG4gICYubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tcmlwcGxlLWJhY2tncm91bmQoJHByaW1hcnksICRodWUsICRvcGFjaXR5KTtcbiAgfVxuXG4gICYubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi1yaXBwbGUtYmFja2dyb3VuZCgkYWNjZW50LCAkaHVlLCAkb3BhY2l0eSk7XG4gIH1cblxuICAmLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLXJpcHBsZS1iYWNrZ3JvdW5kKCR3YXJuLCAkaHVlLCAkb3BhY2l0eSk7XG4gIH1cbn1cblxuLy8gQXBwbGllcyBhIHByb3BlcnR5IHRvIGFuIG1hdC1idXR0b24gZWxlbWVudCBmb3IgZWFjaCBvZiB0aGUgc3VwcG9ydGVkIHBhbGV0dGVzLlxuQG1peGluIF9tYXQtYnV0dG9uLXRoZW1lLXByb3BlcnR5KCR0aGVtZSwgJHByb3BlcnR5LCAkaHVlKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gICYubWF0LXByaW1hcnkge1xuICAgICN7JHByb3BlcnR5fTogbWF0LWNvbG9yKCRwcmltYXJ5LCAkaHVlKTtcbiAgfVxuICAmLm1hdC1hY2NlbnQge1xuICAgICN7JHByb3BlcnR5fTogbWF0LWNvbG9yKCRhY2NlbnQsICRodWUpO1xuICB9XG4gICYubWF0LXdhcm4ge1xuICAgICN7JHByb3BlcnR5fTogbWF0LWNvbG9yKCR3YXJuLCAkaHVlKTtcbiAgfVxuXG4gICYubWF0LXByaW1hcnksICYubWF0LWFjY2VudCwgJi5tYXQtd2FybiwgJltkaXNhYmxlZF0ge1xuICAgICZbZGlzYWJsZWRdIHtcbiAgICAgICRwYWxldHRlOiBpZigkcHJvcGVydHkgPT0gJ2NvbG9yJywgJGZvcmVncm91bmQsICRiYWNrZ3JvdW5kKTtcbiAgICAgICN7JHByb3BlcnR5fTogbWF0LWNvbG9yKCRwYWxldHRlLCBkaXNhYmxlZC1idXR0b24pO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWJ1dHRvbi10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1idXR0b24sIC5tYXQtaWNvbi1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ge1xuICAgIC8vIEJ1dHRvbnMgd2l0aG91dCBhIGJhY2tncm91bmQgY29sb3Igc2hvdWxkIGluaGVyaXQgdGhlIGZvbnQgY29sb3IuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvXG4gICAgLy8gZW5zdXJlIHRoYXQgdGhlIGJ1dHRvbiBpcyByZWFkYWJsZSBvbiBjdXN0b20gYmFja2dyb3VuZCBjb2xvcnMuIEl0J3Mgd3JvbmcgdG8gYWx3YXlzIGFzc3VtZVxuICAgIC8vIHRoYXQgdGhvc2UgYnV0dG9ucyBhcmUgYWx3YXlzIHBsYWNlZCBpbnNpZGUgb2YgY29udGFpbmVycyB3aXRoIHRoZSBkZWZhdWx0IGJhY2tncm91bmRcbiAgICAvLyBjb2xvciBvZiB0aGUgdGhlbWUgKGUuZy4gdGhlbWVkIHRvb2xiYXJzKS5cbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblxuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLXRoZW1lLXByb3BlcnR5KCR0aGVtZSwgJ2NvbG9yJywgdGV4dCk7XG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tZm9jdXMtb3ZlcmxheS1jb2xvcigkdGhlbWUpO1xuXG4gICAgLy8gU2V0dXAgdGhlIHJpcHBsZSBjb2xvciB0byBiZSBiYXNlZCBvbiB0aGUgdGV4dCBjb2xvci4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHJpcHBsZXNcbiAgICAvLyBhcmUgbWF0Y2hpbmcgd2l0aCB0aGUgY3VycmVudCB0aGVtZSBwYWxldHRlIGFuZCBhcmUgaW4gY29udHJhc3QgdG8gdGhlIGJhY2tncm91bmQgY29sb3JcbiAgICAvLyAoZS5nIGluIHRoZW1lZCB0b29sYmFycykuXG4gICAgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgICBvcGFjaXR5OiAkX21hdC1idXR0b24tcmlwcGxlLW9wYWNpdHk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Q29sb3I7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSB7XG4gICAgYmFja2dyb3VuZDogbWFwX2dldCgkZm9yZWdyb3VuZCwgYmFzZSk7XG4gIH1cblxuICAvLyBOb3RlOiB0aGlzIG5lZWRzIGEgYml0IGV4dHJhIHNwZWNpZmljaXR5LCBiZWNhdXNlIHdlJ3JlIG5vdCBndWFyYW50ZWVkIHRoZSBpbmNsdXNpb25cbiAgLy8gb3JkZXIgb2YgdGhlIHRoZW1lIHN0eWxlcyBhbmQgdGhlIGJ1dHRvbiByZXNldCBtYXkgZW5kIHVwIHJlc2V0dGluZyB0aGlzIGFzIHdlbGwuXG4gIC5tYXQtc3Ryb2tlZC1idXR0b246bm90KFtkaXNhYmxlZF0pIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cblxuICAubWF0LWZsYXQtYnV0dG9uLCAubWF0LXJhaXNlZC1idXR0b24sIC5tYXQtZmFiLCAubWF0LW1pbmktZmFiIHtcbiAgICAvLyBEZWZhdWx0IGZvbnQgYW5kIGJhY2tncm91bmQgY29sb3Igd2hlbiBub3QgdXNpbmcgYW55IGNvbG9yIHBhbGV0dGUuXG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCByYWlzZWQtYnV0dG9uKTtcblxuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLXRoZW1lLXByb3BlcnR5KCR0aGVtZSwgJ2NvbG9yJywgZGVmYXVsdC1jb250cmFzdCk7XG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tdGhlbWUtcHJvcGVydHkoJHRoZW1lLCAnYmFja2dyb3VuZC1jb2xvcicsIGRlZmF1bHQpO1xuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLXJpcHBsZS1jb2xvcigkdGhlbWUsIGRlZmF1bHQtY29udHJhc3QpO1xuICB9XG5cbiAgLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1hdC1mbGF0LWJ1dHRvbiB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMCwgJHRoZW1lKTtcbiAgfVxuXG4gIC5tYXQtcmFpc2VkLWJ1dHRvbiB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMiwgJHRoZW1lKTtcblxuICAgICY6bm90KFtkaXNhYmxlZF0pOmFjdGl2ZSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbig4LCAkdGhlbWUpO1xuICAgIH1cblxuICAgICZbZGlzYWJsZWRdIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDAsICR0aGVtZSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1mYWIsIC5tYXQtbWluaS1mYWIge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDYsICR0aGVtZSk7XG5cbiAgICAmOm5vdChbZGlzYWJsZWRdKTphY3RpdmUge1xuICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMTIsICR0aGVtZSk7XG4gICAgfVxuXG4gICAgJltkaXNhYmxlZF0ge1xuICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMCwgJHRoZW1lKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1idXR0b24tdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtYnV0dG9uLCAubWF0LXJhaXNlZC1idXR0b24sIC5tYXQtaWNvbi1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24sXG4gIC5tYXQtZmxhdC1idXR0b24sIC5tYXQtZmFiLCAubWF0LW1pbmktZmFiIHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBidXR0b24pO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBidXR0b24pO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYnV0dG9uKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtYnV0dG9uLXRvZ2dsZS10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGRpdmlkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUsXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cCB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oMiwgJHRoZW1lKTtcbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQsXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIHtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBoaW50LXRleHQpO1xuXG4gICAgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBmb2N1c2VkLWJ1dHRvbik7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG5cbiAgICAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGZvY3VzZWQtYnV0dG9uLCAxKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUgKyAubWF0LWJ1dHRvbi10b2dnbGUge1xuICAgIGJvcmRlci1sZWZ0OiBzb2xpZCAxcHggJGRpdmlkZXItY29sb3I7XG4gIH1cblxuICBbZGlyPSdydGwnXSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUgKyAubWF0LWJ1dHRvbi10b2dnbGUge1xuICAgIGJvcmRlci1sZWZ0OiBub25lO1xuICAgIGJvcmRlci1yaWdodDogc29saWQgMXB4ICRkaXZpZGVyLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwge1xuICAgIC5tYXQtYnV0dG9uLXRvZ2dsZSArIC5tYXQtYnV0dG9uLXRvZ2dsZSB7XG4gICAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICAgIGJvcmRlci1yaWdodDogbm9uZTtcbiAgICAgIGJvcmRlci10b3A6IHNvbGlkIDFweCAkZGl2aWRlci1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBzZWxlY3RlZC1idXR0b24pO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcblxuICAgICYubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLWJ1dHRvbik7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBkaXNhYmxlZC1idXR0b24tdG9nZ2xlKTtcblxuICAgICYubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICAgIH1cblxuICAgICYubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIHNlbGVjdGVkLWRpc2FibGVkLWJ1dHRvbik7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCxcbiAgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQge1xuICAgIGJvcmRlcjogc29saWQgMXB4ICRkaXZpZGVyLWNvbG9yO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtYnV0dG9uLXRvZ2dsZS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1idXR0b24tdG9nZ2xlIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG59XG5cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtY2FyZC10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWNhcmQge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDEsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAgIC8vIE5lZWRzIGV4dHJhIHNwZWNpZmljaXR5IHRvIGJlIGFibGUgdG8gb3ZlcnJpZGUgdGhlIGVsZXZhdGlvbiBzZWxlY3RvcnMuXG4gICAgJi5tYXQtY2FyZC1mbGF0IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDAsICR0aGVtZSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1jYXJkLXN1YnRpdGxlIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1jYXJkLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWNhcmQge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LWNhcmQtdGl0bGUge1xuICAgIGZvbnQ6IHtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgaGVhZGxpbmUpO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgdGl0bGUpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtY2FyZC1oZWFkZXIgLm1hdC1jYXJkLXRpdGxlIHtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgdGl0bGUpO1xuICB9XG5cbiAgLm1hdC1jYXJkLXN1YnRpdGxlLFxuICAubWF0LWNhcmQtY29udGVudCB7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSk7XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LWNoZWNrYm94LXRoZW1lKCR0aGVtZSkge1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuXG4gIC8vIFRoZSBjb2xvciBvZiB0aGUgY2hlY2tib3gncyBjaGVja21hcmsgLyBtaXhlZG1hcmsuXG4gICRjaGVja2JveC1tYXJrLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGJhY2tncm91bmQpO1xuXG4gIC8vIE5PVEUodHJhdmlza2F1Zm1hbik6IFdoaWxlIHRoZSBzcGVjIGNhbGxzIGZvciB0cmFuc2x1Y2VudCBibGFja3Mvd2hpdGVzIGZvciBkaXNhYmxlZCBjb2xvcnMsXG4gIC8vIHRoaXMgZG9lcyBub3Qgd29yayB3ZWxsIHdpdGggZWxlbWVudHMgbGF5ZXJlZCBvbiB0b3Agb2Ygb25lIGFub3RoZXIuIFRvIGdldCBhcm91bmQgdGhpcyB3ZVxuICAvLyBibGVuZCB0aGUgY29sb3JzIHRvZ2V0aGVyIGJhc2VkIG9uIHRoZSBiYXNlIGNvbG9yIGFuZCB0aGUgdGhlbWUgYmFja2dyb3VuZC5cbiAgJHdoaXRlLTMwcGN0LW9wYWNpdHktb24tZGFyazogIzY4Njg2ODtcbiAgJGJsYWNrLTI2cGN0LW9wYWNpdHktb24tbGlnaHQ6ICNiMGIwYjA7XG4gICRkaXNhYmxlZC1jb2xvcjogaWYoJGlzLWRhcmstdGhlbWUsICR3aGl0ZS0zMHBjdC1vcGFjaXR5LW9uLWRhcmssICRibGFjay0yNnBjdC1vcGFjaXR5LW9uLWxpZ2h0KTtcblxuICAubWF0LWNoZWNrYm94LWZyYW1lIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1jaGVja2JveC1jaGVja21hcmsge1xuICAgIGZpbGw6ICRjaGVja2JveC1tYXJrLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aCB7XG4gICAgLy8gIWltcG9ydGFudCBpcyBuZWVkZWQgaGVyZSBiZWNhdXNlIGEgc3Ryb2tlIG11c3QgYmUgc2V0IGFzIGFuXG4gICAgLy8gYXR0cmlidXRlIG9uIHRoZSBTVkcgaW4gb3JkZXIgZm9yIGxpbmUgYW5pbWF0aW9uIHRvIHdvcmsgcHJvcGVybHkuXG4gICAgc3Ryb2tlOiAkY2hlY2tib3gtbWFyay1jb2xvciAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm1hdC1jaGVja2JveC1taXhlZG1hcmsge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRjaGVja2JveC1tYXJrLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLCAubWF0LWNoZWNrYm94LWNoZWNrZWQge1xuICAgICYubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiAubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCR3YXJuKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWNoZWNrYm94LWRpc2FibGVkIHtcbiAgICAmLm1hdC1jaGVja2JveC1jaGVja2VkLFxuICAgICYubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUge1xuICAgICAgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGRpc2FibGVkLWNvbG9yO1xuICAgICAgfVxuICAgIH1cblxuICAgICY6bm90KC5tYXQtY2hlY2tib3gtY2hlY2tlZCkge1xuICAgICAgLm1hdC1jaGVja2JveC1mcmFtZSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJGRpc2FibGVkLWNvbG9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN3aXRjaCB0aGlzIHRvIGEgc29saWQgY29sb3Igc2luY2Ugd2UncmUgdXNpbmcgYG9wYWNpdHlgXG4gIC8vIHRvIGNvbnRyb2wgaG93IG9wYXF1ZSB0aGUgcmlwcGxlIHNob3VsZCBiZS5cbiAgLm1hdC1jaGVja2JveCAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXBfZ2V0KG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKSwgYmFzZSk7XG4gIH1cblxuICAubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLFxuICAubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkge1xuICAgICYubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJHByaW1hcnkpO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYWNjZW50KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCR3YXJuKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1jaGVja2JveC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1jaGVja2JveCB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC8vIFRPRE8oa2FyYSk6IFJlbW92ZSB0aGlzIHN0eWxlIHdoZW4gZml4aW5nIHZlcnRpY2FsIGJhc2VsaW5lXG4gIC5tYXQtY2hlY2tib3gtbGF5b3V0IC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICAgIGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgYm9keS0yKTtcbiAgfVxufVxuXG5cblxuXG5cblxuJG1hdC1jaGlwLXJlbW92ZS1mb250LXNpemU6IDE4cHg7XG5cbkBtaXhpbiBtYXQtY2hpcHMtY29sb3IoJGZvcmVncm91bmQsICRiYWNrZ3JvdW5kKSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kO1xuICBjb2xvcjogJGZvcmVncm91bmQ7XG5cbiAgLm1hdC1jaGlwLXJlbW92ZSB7XG4gICAgY29sb3I6ICRmb3JlZ3JvdW5kO1xuICAgIG9wYWNpdHk6IDAuNDtcbiAgfVxufVxuXG5cbi8vIEFwcGxpZXMgdGhlIGJhY2tncm91bmQgY29sb3IgZm9yIGEgcmlwcGxlIGVsZW1lbnQuXG4vLyBJZiB0aGUgY29sb3IgdmFsdWUgcHJvdmlkZWQgaXMgbm90IGEgU2FzcyBjb2xvcixcbi8vIHdlIGFzc3VtZSB0aGF0IHdlJ3ZlIGJlZW4gZ2l2ZW4gYSBDU1MgdmFyaWFibGUuXG4vLyBTaW5jZSB3ZSBjYW4ndCBwZXJmb3JtIGFscGhhLWJsZW5kaW5nIG9uIGEgQ1NTIHZhcmlhYmxlLFxuLy8gd2UgaW5zdGVhZCBhZGQgdGhlIG9wYWNpdHkgZGlyZWN0bHkgdG8gdGhlIHJpcHBsZSBlbGVtZW50LlxuQG1peGluIF9tYXQtY2hpcHMtcmlwcGxlLWJhY2tncm91bmQoJHBhbGV0dGUsICRkZWZhdWx0LWNvbnRyYXN0LCAkb3BhY2l0eSkge1xuICAkYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCAkZGVmYXVsdC1jb250cmFzdCwgJG9wYWNpdHkpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1jb2xvcjtcbiAgQGlmICh0eXBlLW9mKCRiYWNrZ3JvdW5kLWNvbG9yKSAhPSBjb2xvcikge1xuICAgIG9wYWNpdHk6ICRvcGFjaXR5O1xuICB9XG59XG5cbkBtaXhpbiBtYXQtY2hpcHMtdGhlbWUtY29sb3IoJHBhbGV0dGUpIHtcbiAgQGluY2x1ZGUgbWF0LWNoaXBzLWNvbG9yKG1hdC1jb2xvcigkcGFsZXR0ZSwgZGVmYXVsdC1jb250cmFzdCksIG1hdC1jb2xvcigkcGFsZXR0ZSkpO1xuXG4gIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgQGluY2x1ZGUgX21hdC1jaGlwcy1yaXBwbGUtYmFja2dyb3VuZCgkcGFsZXR0ZSwgZGVmYXVsdC1jb250cmFzdCwgMC4xKTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWNoaXBzLXRoZW1lKCR0aGVtZSkge1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAkdW5zZWxlY3RlZC1iYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIHVuc2VsZWN0ZWQtY2hpcCk7XG4gICR1bnNlbGVjdGVkLWZvcmVncm91bmQ6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwIHtcbiAgICBAaW5jbHVkZSBtYXQtY2hpcHMtY29sb3IoJHVuc2VsZWN0ZWQtZm9yZWdyb3VuZCwgJHVuc2VsZWN0ZWQtYmFja2dyb3VuZCk7XG5cbiAgICAmOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpIHtcbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oMywgJHRoZW1lKTtcbiAgICAgIH1cblxuICAgICAgLm1hdC1jaGlwLXJlbW92ZTpob3ZlciB7XG4gICAgICAgIG9wYWNpdHk6IDAuNTQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5tYXQtY2hpcC1kaXNhYmxlZCB7XG4gICAgICBvcGFjaXR5OiAwLjQ7XG4gICAgfVxuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZDogbWFwX2dldCgkZm9yZWdyb3VuZCwgYmFzZSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkIHtcbiAgICAmLm1hdC1wcmltYXJ5IHtcbiAgICAgIEBpbmNsdWRlIG1hdC1jaGlwcy10aGVtZS1jb2xvcigkcHJpbWFyeSk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBAaW5jbHVkZSBtYXQtY2hpcHMtdGhlbWUtY29sb3IoJHdhcm4pO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICBAaW5jbHVkZSBtYXQtY2hpcHMtdGhlbWUtY29sb3IoJGFjY2VudCk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtY2hpcHMtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtY2hpcCB7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMik7XG4gICAgZm9udC13ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTIpO1xuXG4gICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb24sXG4gICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbiB7XG4gICAgICBmb250LXNpemU6ICRtYXQtY2hpcC1yZW1vdmUtZm9udC1zaXplO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtdGFibGUtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC10YWJsZSB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnY2FyZCcpO1xuICB9XG5cbiAgLm1hdC10YWJsZSB0aGVhZCwgLm1hdC10YWJsZSB0Ym9keSwgLm1hdC10YWJsZSB0Zm9vdCxcbiAgbWF0LWhlYWRlci1yb3csIG1hdC1yb3csIG1hdC1mb290ZXItcm93LFxuICBbbWF0LWhlYWRlci1yb3ddLCBbbWF0LXJvd10sIFttYXQtZm9vdGVyLXJvd10sXG4gIC5tYXQtdGFibGUtc3RpY2t5IHtcbiAgICBiYWNrZ3JvdW5kOiBpbmhlcml0O1xuICB9XG5cbiAgbWF0LXJvdywgbWF0LWhlYWRlci1yb3csIG1hdC1mb290ZXItcm93LFxuICB0aC5tYXQtaGVhZGVyLWNlbGwsIHRkLm1hdC1jZWxsLCB0ZC5tYXQtZm9vdGVyLWNlbGwge1xuICAgIGJvcmRlci1ib3R0b20tY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cblxuICAubWF0LWhlYWRlci1jZWxsIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LWNlbGwsIC5tYXQtZm9vdGVyLWNlbGwge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtdGFibGUtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtdGFibGUge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LWhlYWRlci1jZWxsIHtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbik7XG4gICAgZm9udC13ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTIpO1xuICB9XG5cbiAgLm1hdC1jZWxsLCAubWF0LWZvb3Rlci1jZWxsIHtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKTtcbiAgfVxufVxuXG5cblxuXG5cblxuXG4kbWF0LWRhdGVwaWNrZXItc2VsZWN0ZWQtdG9kYXktYm94LXNoYWRvdy13aWR0aDogMXB4O1xuJG1hdC1kYXRlcGlja2VyLXNlbGVjdGVkLWZhZGUtYW1vdW50OiAwLjY7XG4kbWF0LWRhdGVwaWNrZXItdG9kYXktZmFkZS1hbW91bnQ6IDAuMjtcbiRtYXQtY2FsZW5kYXItYm9keS1mb250LXNpemU6IDEzcHggIWRlZmF1bHQ7XG4kbWF0LWNhbGVuZGFyLXdlZWtkYXktdGFibGUtZm9udC1zaXplOiAxMXB4ICFkZWZhdWx0O1xuXG5AbWl4aW4gX21hdC1kYXRlcGlja2VyLWNvbG9yKCRwYWxldHRlKSB7XG4gIC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCA+IC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCB7XG4gICAgJGJhY2tncm91bmQ6IG1hdC1jb2xvcigkcGFsZXR0ZSk7XG5cbiAgICBAaWYgKHR5cGUtb2YoJGJhY2tncm91bmQpID09IGNvbG9yKSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBmYWRlLW91dCgkYmFja2dyb3VuZCwgJG1hdC1kYXRlcGlja2VyLXNlbGVjdGVkLWZhZGUtYW1vdW50KTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgLy8gSWYgd2UgY291bGRuJ3QgcmVzb2x2ZSB0byBiYWNrZ3JvdW5kIHRvIGEgY29sb3IgKGUuZy4gaXQncyBhIENTUyB2YXJpYWJsZSksXG4gICAgICAvLyBmYWxsIGJhY2sgdG8gZmFkaW5nIHRoZSBjb250ZW50IG91dCB2aWEgYG9wYWNpdHlgLlxuICAgICAgb3BhY2l0eTogJG1hdC1kYXRlcGlja2VyLXRvZGF5LWZhZGUtYW1vdW50O1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCB7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgJG1hdC1kYXRlcGlja2VyLXNlbGVjdGVkLXRvZGF5LWJveC1zaGFkb3ctd2lkdGhcbiAgICAgICAgICAgICAgICBtYXQtY29sb3IoJHBhbGV0dGUsIGRlZmF1bHQtY29udHJhc3QpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtZGF0ZXBpY2tlci10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcblxuICAubWF0LWNhbGVuZGFyLWFycm93IHtcbiAgICBib3JkZXItdG9wLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGljb24pO1xuICB9XG5cbiAgLy8gVGhlIHByZXYvbmV4dCBidXR0b25zIG5lZWQgYSBiaXQgbW9yZSBzcGVjaWZpY2l0eSB0b1xuICAvLyBhdm9pZCBiZWluZyBvdmVyd3JpdHRlbiBieSB0aGUgLm1hdC1pY29uLWJ1dHRvbi5cbiAgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZSxcbiAgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1uZXh0LWJ1dHRvbixcbiAgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1wcmV2aW91cy1idXR0b24ge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGljb24pO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGhpbnQtdGV4dCk7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlci1kaXZpZGVyOjphZnRlciB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS1sYWJlbCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCA+IC5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCkge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXIsXG4gIC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlLFxuICAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlIHtcbiAgICAmID4gLm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCkge1xuICAgIC8vIE5vdGU6IHRob3VnaCBpdCdzIG5vdCB0ZXh0LCB0aGUgYm9yZGVyIGlzIGEgaGludCBhYm91dCB0aGUgZmFjdCB0aGF0IHRoaXMgaXMgdG9kYXkncyBkYXRlLFxuICAgIC8vIHNvIHdlIHVzZSB0aGUgaGludCBjb2xvci5cbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaGludC10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCA+IC5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKSB7XG4gICAgJGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGhpbnQtdGV4dCk7XG5cbiAgICBAaWYgKHR5cGUtb2YoJGNvbG9yKSA9PSBjb2xvcikge1xuICAgICAgYm9yZGVyLWNvbG9yOiBmYWRlLW91dCgkY29sb3IsICRtYXQtZGF0ZXBpY2tlci10b2RheS1mYWRlLWFtb3VudCk7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIC8vIElmIHRoZSBjb2xvciBkaWRuJ3QgcmVzb2x2ZSB0byBhIGNvbG9yIHZhbHVlLCBidXQgc29tZXRoaW5nIGxpa2UgYSBDU1MgdmFyaWFibGUsIHdlIGNhbid0XG4gICAgICAvLyBmYWRlIGl0IG91dCBzbyB3ZSBmYWxsIGJhY2sgdG8gcmVkdWNpbmcgdGhlIGVsZW1lbnQgb3BhY2l0eS4gTm90ZSB0aGF0IHdlIGRvbid0IHVzZSB0aGVcbiAgICAgIC8vICRtYXQtZGF0ZXBpY2tlci10b2RheS1mYWRlLWFtb3VudCwgYmVjYXVzZSBoaW50IHRleHQgdXN1YWxseSBoYXMgc29tZSBvcGFjaXR5IGFwcGxpZWRcbiAgICAgIC8vIHRvIGl0IGFscmVhZHkgYW5kIHdlIGRvbid0IHdhbnQgdGhlbSB0byBzdGFjayBvbiB0b3Agb2YgZWFjaCBvdGhlci5cbiAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICB9XG4gIH1cblxuICBAaW5jbHVkZSBfbWF0LWRhdGVwaWNrZXItY29sb3IobWFwLWdldCgkdGhlbWUsIHByaW1hcnkpKTtcblxuICAubWF0LWRhdGVwaWNrZXItY29udGVudCB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oNCwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gICAgJi5tYXQtYWNjZW50IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtZGF0ZXBpY2tlci1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KSk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBAaW5jbHVkZSBfbWF0LWRhdGVwaWNrZXItY29sb3IobWFwLWdldCgkdGhlbWUsIHdhcm4pKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWRhdGVwaWNrZXItY29udGVudC10b3VjaCB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oMCwgJHRoZW1lKTtcbiAgfVxuXG4gIC5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KSwgdGV4dCk7XG5cbiAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KSwgdGV4dCk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKG1hcC1nZXQoJHRoZW1lLCB3YXJuKSwgdGV4dCk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtZGF0ZXBpY2tlci10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1jYWxlbmRhciB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keSB7XG4gICAgZm9udC1zaXplOiAkbWF0LWNhbGVuZGFyLWJvZHktZm9udC1zaXplO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsLFxuICAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b24ge1xuICAgIGZvbnQ6IHtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYnV0dG9uKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJ1dHRvbik7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIgdGgge1xuICAgIGZvbnQ6IHtcbiAgICAgIHNpemU6ICRtYXQtY2FsZW5kYXItd2Vla2RheS10YWJsZS1mb250LXNpemU7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTEpO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LWRpYWxvZy10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDI0LCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZGlhbG9nKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWRpYWxvZy10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1kaWFsb2ctdGl0bGUge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCB0aXRsZSk7XG4gIH1cbn1cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtZXhwYW5zaW9uLXBhbmVsLXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtZXhwYW5zaW9uLXBhbmVsIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigyLCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cblxuICAubWF0LWFjdGlvbi1yb3cge1xuICAgIGJvcmRlci10b3AtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cblxuICAubWF0LWV4cGFuc2lvbi1wYW5lbCB7XG4gICAgJiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQsXG4gICAgJiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZCxcbiAgICAmOm5vdCgubWF0LWV4cGFuZGVkKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXIge1xuICAgICAgJjpub3QoW2FyaWEtZGlzYWJsZWQ9J3RydWUnXSkge1xuICAgICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBEaXNhYmxlIHRoZSBob3ZlciBvbiB0b3VjaCBkZXZpY2VzIHNpbmNlIGl0IGNhbiBhcHBlYXIgbGlrZSBpdCBpcyBzdHVjay4gV2UgY2FuJ3QgdXNlXG4gIC8vIGBAbWVkaWEgKGhvdmVyKWAgYWJvdmUsIGJlY2F1c2UgdGhlIGRlc2t0b3Agc3VwcG9ydCBicm93c2VyIHN1cHBvcnQgaXNuJ3QgZ3JlYXQuXG4gIEBtZWRpYSAoaG92ZXI6IG5vbmUpIHtcbiAgICAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCk6bm90KFthcmlhLWRpc2FibGVkPSd0cnVlJ10pXG4gICAgICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG5cbiAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLFxuICAubWF0LWV4cGFuc2lvbi1pbmRpY2F0b3I6OmFmdGVyIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD0ndHJ1ZSddIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC1idXR0b24pO1xuXG4gICAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlLFxuICAgIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiB7XG4gICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1leHBhbnNpb24tcGFuZWwtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgc3ViaGVhZGluZy0xKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgc3ViaGVhZGluZy0xKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIHN1YmhlYWRpbmctMSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudCB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGJvZHktMSk7XG4gIH1cbn1cblxuXG5cblxuLy8gVGhpcyBtaXhpbiB3aWxsIGVuc3VyZSB0aGF0IGxpbmVzIHRoYXQgb3ZlcmZsb3cgdGhlIGNvbnRhaW5lciB3aWxsIGhpZGUgdGhlIG92ZXJmbG93IGFuZFxuLy8gdHJ1bmNhdGUgbmVhdGx5IHdpdGggYW4gZWxsaXBzaXMuXG5AbWl4aW4gbWF0LXRydW5jYXRlLWxpbmUoKSB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG4vLyBNaXhpbiB0byBwcm92aWRlIGFsbCBtYXQtbGluZSBzdHlsZXMsIGNoYW5naW5nIHNlY29uZGFyeSBmb250IHNpemUgYmFzZWQgb24gd2hldGhlciB0aGUgbGlzdFxuLy8gaXMgaW4gZGVuc2UgbW9kZS5cbkBtaXhpbiBtYXQtbGluZS1iYXNlKCRzZWNvbmRhcnktZm9udC1zaXplKSB7XG4gIC5tYXQtbGluZSB7XG4gICAgQGluY2x1ZGUgbWF0LXRydW5jYXRlLWxpbmUoKTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXG4gICAgLy8gYWxsIGxpbmVzIGJ1dCB0aGUgdG9wIGxpbmUgc2hvdWxkIGhhdmUgc21hbGxlciB0ZXh0XG4gICAgJjpudGgtY2hpbGQobisyKSB7XG4gICAgICBmb250LXNpemU6ICRzZWNvbmRhcnktZm9udC1zaXplO1xuICAgIH1cbiAgfVxufVxuXG4vLyBUaGlzIG1peGluIG5vcm1hbGl6ZXMgZGVmYXVsdCBlbGVtZW50IHN0eWxlcywgZS5nLiBmb250IHdlaWdodCBmb3IgaGVhZGluZyB0ZXh0LlxuQG1peGluIG1hdC1ub3JtYWxpemUtdGV4dCgpIHtcbiAgJiA+ICoge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xuICB9XG59XG5cbi8vIFRoaXMgbWl4aW4gcHJvdmlkZXMgYmFzZSBzdHlsZXMgZm9yIHRoZSB3cmFwcGVyIGFyb3VuZCBtYXQtbGluZSBlbGVtZW50cyBpbiBhIGxpc3QuXG5AbWl4aW4gbWF0LWxpbmUtd3JhcHBlci1iYXNlKCkge1xuICBAaW5jbHVkZSBtYXQtbm9ybWFsaXplLXRleHQoKTtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB3aWR0aDogMTAwJTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAvLyBNdXN0IHJlbW92ZSB3cmFwcGVyIHdoZW4gbGluZXMgYXJlIGVtcHR5IG9yIGl0IHRha2VzIHVwIGhvcml6b250YWxcbiAgLy8gc3BhY2UgYW5kIHB1c2hlcyBvdGhlciBlbGVtZW50cyB0byB0aGUgcmlnaHQuXG4gICY6ZW1wdHkge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuXG5cbi8vIEluY2x1ZGUgdGhpcyBlbXB0eSBtaXhpbiBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgb3RoZXIgY29tcG9uZW50cy5cbkBtaXhpbiBtYXQtZ3JpZC1saXN0LXRoZW1lKCR0aGVtZSkgeyB9XG5cbkBtaXhpbiBtYXQtZ3JpZC1saXN0LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWdyaWQtdGlsZS1oZWFkZXIsXG4gIC5tYXQtZ3JpZC10aWxlLWZvb3RlciB7XG4gICAgQGluY2x1ZGUgbWF0LWxpbmUtYmFzZShtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pKTtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKTtcbiAgfVxufVxuXG5cblxuXG4vLyBJbmNsdWRlIHRoaXMgZW1wdHkgbWl4aW4gZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIG90aGVyIGNvbXBvbmVudHMuXG5AbWl4aW4gbWF0LWljb24tdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtaWNvbiB7XG4gICAgJi5tYXQtcHJpbWFyeSB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCB0ZXh0KTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCB0ZXh0KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWljb24tdHlwb2dyYXBoeSgkY29uZmlnKSB7IH1cblxuXG5cblxuXG4vLyBSZW5kZXJzIGEgZ3JhZGllbnQgZm9yIHNob3dpbmcgdGhlIGRhc2hlZCBsaW5lIHdoZW4gdGhlIGlucHV0IGlzIGRpc2FibGVkLlxuLy8gVW5saWtlIHVzaW5nIGEgYm9yZGVyLCBhIGdyYWRpZW50IGFsbG93cyB1cyB0byBhZGp1c3QgdGhlIHNwYWNpbmcgb2YgdGhlIGRvdHRlZCBsaW5lXG4vLyB0byBtYXRjaCB0aGUgTWF0ZXJpYWwgRGVzaWduIHNwZWMuXG5AbWl4aW4gbWF0LWNvbnRyb2wtZGlzYWJsZWQtdW5kZXJsaW5lKCRjb2xvcikge1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICRjb2xvciAwJSwgJGNvbG9yIDMzJSwgdHJhbnNwYXJlbnQgMCUpO1xuICBiYWNrZ3JvdW5kLXNpemU6IDRweCAxMDAlO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7XG59XG5cbi8vIEZpZ3VyZXMgb3V0IHRoZSBjb2xvciBvZiB0aGUgcGxhY2Vob2xkZXIgZm9yIGEgZm9ybSBjb250cm9sLlxuLy8gVXNlZCBwcmltYXJpbHkgdG8gcHJldmVudCB0aGUgdmFyaW91cyBmb3JtIGNvbnRyb2xzIGZyb21cbi8vIGJlY29taW5nIG91dCBvZiBzeW5jIHNpbmNlIHRoZXNlIGNvbG9ycyBhcmVuJ3QgaW4gYSBwYWxldHRlLlxuQGZ1bmN0aW9uIF9tYXQtY29udHJvbC1wbGFjZWhvbGRlci1jb2xvcigkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcbiAgQHJldHVybiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0LCBpZigkaXMtZGFyay10aGVtZSwgMC41LCAwLjQyKSk7XG59XG5cblxuLyogc3R5bGVsaW50LWRpc2FibGUgbWF0ZXJpYWwvbm8tcHJlZml4ZXMgKi9cbkBtaXhpbiB1c2VyLXNlbGVjdCgkdmFsdWUpIHtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogJHZhbHVlO1xuICAtbW96LXVzZXItc2VsZWN0OiAkdmFsdWU7XG4gIC1tcy11c2VyLXNlbGVjdDogJHZhbHVlO1xuICB1c2VyLXNlbGVjdDogJHZhbHVlO1xufVxuXG5AbWl4aW4gaW5wdXQtcGxhY2Vob2xkZXIge1xuICAmOjpwbGFjZWhvbGRlciB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cblxuICAmOjotbW96LXBsYWNlaG9sZGVyIHtcbiAgICBAY29udGVudDtcbiAgfVxuXG4gICY6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIEBjb250ZW50O1xuICB9XG5cbiAgJjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIEBjb250ZW50O1xuICB9XG59XG5cbkBtaXhpbiBjdXJzb3ItZ3JhYiB7XG4gIGN1cnNvcjogLXdlYmtpdC1ncmFiO1xuICBjdXJzb3I6IGdyYWI7XG59XG5cbkBtaXhpbiBjdXJzb3ItZ3JhYmJpbmcge1xuICBjdXJzb3I6IC13ZWJraXQtZ3JhYmJpbmc7XG4gIGN1cnNvcjogZ3JhYmJpbmc7XG59XG5cbkBtaXhpbiBiYWNrZmFjZS12aXNpYmlsaXR5KCR2YWx1ZSkge1xuICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6ICR2YWx1ZTtcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogJHZhbHVlO1xufVxuLyogc3R5bGVsaW50LWVuYWJsZSAqL1xuXG5cblxuQG1peGluIG1hdC1pbnB1dC10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlciB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1pbnB1dC1lbGVtZW50OmRpc2FibGVkLFxuICAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVyIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtaW5wdXQtZWxlbWVudCB7XG4gICAgY2FyZXQtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgdGV4dCk7XG5cbiAgICBAaW5jbHVkZSBpbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgICBjb2xvcjogX21hdC1jb250cm9sLXBsYWNlaG9sZGVyLWNvbG9yKCR0aGVtZSk7XG4gICAgfVxuXG4gICAgLy8gT24gZGFyayB0aGVtZXMgd2Ugc2V0IHRoZSBuYXRpdmUgYHNlbGVjdGAgY29sb3IgdG8gc29tZSBzaGFkZSBvZiB3aGl0ZSxcbiAgICAvLyBob3dldmVyIHRoZSBjb2xvciBwcm9wYWdhdGVzIHRvIGFsbCBvZiB0aGUgYG9wdGlvbmAgZWxlbWVudHMsIHdoaWNoIGFyZVxuICAgIC8vIGFsd2F5cyBvbiBhIHdoaXRlIGJhY2tncm91bmQgaW5zaWRlIHRoZSBkcm9wZG93biwgY2F1c2luZyB0aGVtIHRvIGJsZW5kIGluLlxuICAgIC8vIFNpbmNlIHdlIGNhbid0IGNoYW5nZSBiYWNrZ3JvdW5kIG9mIHRoZSBkcm9wZG93biwgd2UgbmVlZCB0byBleHBsaWNpdGx5XG4gICAgLy8gcmVzZXQgdGhlIGNvbG9yIG9mIHRoZSBvcHRpb25zIHRvIHNvbWV0aGluZyBkYXJrLlxuICAgIEBpZiAobWFwLWdldCgkdGhlbWUsIGlzLWRhcmspKSB7XG4gICAgICBvcHRpb24ge1xuICAgICAgICBjb2xvcjogJGRhcmstcHJpbWFyeS10ZXh0O1xuICAgICAgfVxuXG4gICAgICBvcHRpb246ZGlzYWJsZWQge1xuICAgICAgICBjb2xvcjogJGRhcmstZGlzYWJsZWQtdGV4dDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubWF0LWFjY2VudCAubWF0LWlucHV0LWVsZW1lbnQge1xuICAgIGNhcmV0LWNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgdGV4dCk7XG4gIH1cblxuICAubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50LFxuICAubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWlucHV0LWVsZW1lbnQge1xuICAgIGNhcmV0LWNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVyIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWlucHV0LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAvLyBUaGUgdW5pdC1sZXNzIGxpbmUtaGVpZ2h0IGZyb20gdGhlIGZvbnQgY29uZmlnLlxuICAkbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBpbnB1dCk7XG5cbiAgLy8gVGhlIGFtb3VudCBvZiBzcGFjZSBiZXR3ZWVuIHRoZSB0b3Agb2YgdGhlIGxpbmUgYW5kIHRoZSB0b3Agb2YgdGhlIGFjdHVhbCB0ZXh0XG4gIC8vIChhcyBhIGZyYWN0aW9uIG9mIHRoZSBmb250LXNpemUpLlxuICAkbGluZS1zcGFjaW5nOiAoJGxpbmUtaGVpZ2h0IC0gMSkgLyAyO1xuXG4gIC8vIDxpbnB1dD4gZWxlbWVudHMgc2VlbSB0byBoYXZlIHRoZWlyIGhlaWdodCBzZXQgc2xpZ2h0bHkgdG9vIGxhcmdlIG9uIFNhZmFyaSBjYXVzaW5nIHRoZSB0ZXh0IHRvXG4gIC8vIGJlIG1pc2FsaWduZWQgdy5yLnQuIHRoZSBwbGFjZWhvbGRlci4gQWRkaW5nIHRoaXMgbWFyZ2luIGNvcnJlY3RzIGl0LlxuICBpbnB1dC5tYXQtaW5wdXQtZWxlbWVudCB7XG4gICAgbWFyZ2luLXRvcDogLSRsaW5lLXNwYWNpbmcgKiAxZW07XG4gIH1cbn1cblxuXG5cblxuXG5cblxuQG1peGluIG1hdC1saXN0LXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtbGlzdC1iYXNlIHtcbiAgICAubWF0LWxpc3QtaXRlbSB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICB9XG5cbiAgICAubWF0LWxpc3Qtb3B0aW9uIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIH1cblxuICAgIC5tYXQtc3ViaGVhZGVyIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgICB9XG4gIH1cblxuICAubWF0LWxpc3QtaXRlbS1kaXNhYmxlZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBkaXNhYmxlZC1saXN0LW9wdGlvbik7XG4gIH1cblxuICAubWF0LWxpc3Qtb3B0aW9uLFxuICAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLFxuICAubWF0LWFjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIHtcbiAgICAmOmhvdmVyLCAmOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2hvdmVyJyk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb24ge1xuICAgICYsICY6aG92ZXIsICY6Zm9jdXMge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3ZlciwgMC4xMik7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtbGlzdC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgJGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG5cbiAgLm1hdC1saXN0LWl0ZW0ge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHk7XG4gIH1cblxuICAubWF0LWxpc3Qtb3B0aW9uIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5O1xuICB9XG5cbiAgLy8gRGVmYXVsdCBsaXN0XG4gIC5tYXQtbGlzdC1iYXNlIHtcbiAgICAubWF0LWxpc3QtaXRlbSB7XG4gICAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgc3ViaGVhZGluZy0yKTtcbiAgICAgIEBpbmNsdWRlIG1hdC1saW5lLWJhc2UobWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpKTtcbiAgICB9XG5cbiAgICAubWF0LWxpc3Qtb3B0aW9uIHtcbiAgICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBzdWJoZWFkaW5nLTIpO1xuICAgICAgQGluY2x1ZGUgbWF0LWxpbmUtYmFzZShtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSkpO1xuICAgIH1cblxuICAgIC5tYXQtc3ViaGVhZGVyIHtcbiAgICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgYm9keS0yKTtcbiAgICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTIpO1xuICAgICAgZm9udC13ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIERlbnNlIGxpc3RcbiAgLm1hdC1saXN0LWJhc2VbZGVuc2VdIHtcbiAgICAubWF0LWxpc3QtaXRlbSB7XG4gICAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbik7XG4gICAgICBAaW5jbHVkZSBtYXQtbGluZS1iYXNlKG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbikpO1xuICAgIH1cblxuICAgIC5tYXQtbGlzdC1vcHRpb24ge1xuICAgICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pO1xuICAgICAgQGluY2x1ZGUgbWF0LWxpbmUtYmFzZShtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pKTtcbiAgICB9XG5cbiAgICAubWF0LXN1YmhlYWRlciB7XG4gICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5O1xuICAgICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pO1xuICAgICAgZm9udC13ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTIpO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LW1lbnUtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1tZW51LXBhbmVsIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbig0LCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2NhcmQnKTtcbiAgfVxuXG4gIC5tYXQtbWVudS1pdGVtIHtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCAndGV4dCcpO1xuXG4gICAgJltkaXNhYmxlZF0ge1xuICAgICAgJiwgJjo6YWZ0ZXIge1xuICAgICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCAnZGlzYWJsZWQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubWF0LW1lbnUtaXRlbSAubWF0LWljb24tbm8tY29sb3IsXG4gIC5tYXQtbWVudS1pdGVtLXN1Ym1lbnUtdHJpZ2dlcjo6YWZ0ZXIge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsICdpY29uJyk7XG4gIH1cblxuICAubWF0LW1lbnUtaXRlbTpob3ZlcixcbiAgLm1hdC1tZW51LWl0ZW0uY2RrLXByb2dyYW0tZm9jdXNlZCxcbiAgLm1hdC1tZW51LWl0ZW0uY2RrLWtleWJvYXJkLWZvY3VzZWQsXG4gIC5tYXQtbWVudS1pdGVtLWhpZ2hsaWdodGVkIHtcbiAgICAmOm5vdChbZGlzYWJsZWRdKSB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdob3ZlcicpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LW1lbnUtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtbWVudS1pdGVtIHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBib2R5LTEpO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0xKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtcGFnaW5hdG9yLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuXG4gIC5tYXQtcGFnaW5hdG9yIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdjYXJkJyk7XG4gIH1cblxuICAubWF0LXBhZ2luYXRvcixcbiAgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXIge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtcGFnaW5hdG9yLWRlY3JlbWVudCxcbiAgLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50IHtcbiAgICBib3JkZXItdG9wOiAycHggc29saWQgbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCAnaWNvbicpO1xuICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkIG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgJ2ljb24nKTtcbiAgfVxuXG4gIC5tYXQtcGFnaW5hdG9yLWZpcnN0LFxuICAubWF0LXBhZ2luYXRvci1sYXN0IHtcbiAgICBib3JkZXItdG9wOiAycHggc29saWQgbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCAnaWNvbicpO1xuICB9XG5cbiAgLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0ge1xuICAgIC5tYXQtcGFnaW5hdG9yLWRlY3JlbWVudCxcbiAgICAubWF0LXBhZ2luYXRvci1pbmNyZW1lbnQsXG4gICAgLm1hdC1wYWdpbmF0b3ItZmlyc3QsXG4gICAgLm1hdC1wYWdpbmF0b3ItbGFzdCB7XG4gICAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgJ2Rpc2FibGVkJyk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtcGFnaW5hdG9yLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXBhZ2luYXRvcixcbiAgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXIge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGNhcHRpb24pO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LXByb2dyZXNzLWJhci10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG5cbiAgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZCB7XG4gICAgZmlsbDogbWF0LWNvbG9yKCRwcmltYXJ5LCBsaWdodGVyKTtcbiAgfVxuXG4gIC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCBsaWdodGVyKTtcbiAgfVxuXG4gIC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnkpO1xuICB9XG5cbiAgLm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCB7XG4gICAgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZCB7XG4gICAgICBmaWxsOiBtYXQtY29sb3IoJGFjY2VudCwgbGlnaHRlcik7XG4gICAgfVxuXG4gICAgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCBsaWdodGVyKTtcbiAgICB9XG5cbiAgICAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4ge1xuICAgIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmQge1xuICAgICAgZmlsbDogbWF0LWNvbG9yKCR3YXJuLCBsaWdodGVyKTtcbiAgICB9XG5cbiAgICAubWF0LXByb2dyZXNzLWJhci1idWZmZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCR3YXJuLCBsaWdodGVyKTtcbiAgICB9XG5cbiAgICAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHdhcm4pO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXByb2dyZXNzLWJhci10eXBvZ3JhcGh5KCRjb25maWcpIHsgfVxuXG5cblxuXG5cblxuQG1peGluIG1hdC1wcm9ncmVzcy1zcGlubmVyLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcblxuICAubWF0LXByb2dyZXNzLXNwaW5uZXIsIC5tYXQtc3Bpbm5lciB7XG4gICAgY2lyY2xlIHtcbiAgICAgIHN0cm9rZTogbWF0LWNvbG9yKCRwcmltYXJ5KTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQgY2lyY2xlIHtcbiAgICAgIHN0cm9rZTogbWF0LWNvbG9yKCRhY2NlbnQpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4gY2lyY2xlIHtcbiAgICAgIHN0cm9rZTogbWF0LWNvbG9yKCR3YXJuKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1wcm9ncmVzcy1zcGlubmVyLXR5cG9ncmFwaHkoJGNvbmZpZykgeyB9XG5cblxuXG5cblxuQG1peGluIF9tYXQtcmFkaW8tY29sb3IoJHBhbGV0dGUpIHtcbiAgJi5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUpO1xuICB9XG5cbiAgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsXG4gIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUpLFxuICAmLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsXG4gICY6YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1yYWRpby10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1yYWRpby1vdXRlci1jaXJjbGUge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LXJhZGlvLWJ1dHRvbiB7XG4gICAgJi5tYXQtcHJpbWFyeSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXJhZGlvLWNvbG9yKCRwcmltYXJ5KTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgQGluY2x1ZGUgX21hdC1yYWRpby1jb2xvcigkYWNjZW50KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtcmFkaW8tY29sb3IoJHdhcm4pO1xuICAgIH1cblxuICAgIC8vIFRoaXMgbmVlZHMgZXh0cmEgc3BlY2lmaWNpdHksIGJlY2F1c2UgdGhlIGNsYXNzZXMgYWJvdmUgYXJlIGNvbWJpbmVkXG4gICAgLy8gKGUuZy4gYC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnRgKSB3aGljaCBpbmNyZWFzZXMgdGhlaXIgc3BlY2lmaWNpdHkgYSBsb3QuXG4gICAgLy8gVE9ETzogY29uc2lkZXIgbWFraW5nIHRoZSBzZWxlY3RvcnMgaW50byBkZXNjZW5kYW50cyAoYC5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLWJ1dHRvbmApLlxuICAgICYubWF0LXJhZGlvLWRpc2FibGVkIHtcbiAgICAgICYubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGUsXG4gICAgICAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZCk7XG4gICAgICB9XG5cbiAgICAgIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQsXG4gICAgICAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQpO1xuICAgICAgfVxuXG4gICAgICAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnQge1xuICAgICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3dpdGNoIHRoaXMgdG8gYSBzb2xpZCBjb2xvciBzaW5jZSB3ZSdyZSB1c2luZyBgb3BhY2l0eWBcbiAgICAvLyB0byBjb250cm9sIGhvdyBvcGFxdWUgdGhlIHJpcHBsZSBzaG91bGQgYmUuXG4gICAgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXBfZ2V0KCRmb3JlZ3JvdW5kLCBiYXNlKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1yYWRpby10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1yYWRpby1idXR0b24ge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cbn1cblxuXG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LXNlbGVjdC10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG5cbiAgLm1hdC1zZWxlY3QtdmFsdWUge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG5cbiAgLm1hdC1zZWxlY3QtcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiBfbWF0LWNvbnRyb2wtcGxhY2Vob2xkZXItY29sb3IoJHRoZW1lKTtcbiAgfVxuXG4gIC5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LXZhbHVlIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LXNlbGVjdC1wYW5lbCB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbig0LCAkdGhlbWUpO1xuXG4gICAgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSkge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3ZlciwgMC4xMik7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkIHtcbiAgICAmLm1hdC1mb2N1c2VkIHtcbiAgICAgICYubWF0LXByaW1hcnkgLm1hdC1zZWxlY3QtYXJyb3cge1xuICAgICAgICBjb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCB0ZXh0KTtcbiAgICAgIH1cblxuICAgICAgJi5tYXQtYWNjZW50IC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICAgICAgY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCB0ZXh0KTtcbiAgICAgIH1cblxuICAgICAgJi5tYXQtd2FybiAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtaW52YWxpZCAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgICB9XG5cbiAgICAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNlbGVjdC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLy8gVGhlIHVuaXQtbGVzcyBsaW5lLWhlaWdodCBmcm9tIHRoZSBmb250IGNvbmZpZy5cbiAgJGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgaW5wdXQpO1xuXG4gIC5tYXQtc2VsZWN0IHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC1zZWxlY3QtdHJpZ2dlciB7XG4gICAgaGVpZ2h0OiAkbGluZS1oZWlnaHQgKiAxZW07XG4gIH1cbn1cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtc2lkZW5hdi10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgJGRyYXdlci1iYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGRpYWxvZyk7XG4gICRkcmF3ZXItY29udGFpbmVyLWJhY2tncm91bmQtY29sb3I6ICBtYXQtY29sb3IoJGJhY2tncm91bmQsIGJhY2tncm91bmQpO1xuICAkZHJhd2VyLXB1c2gtYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBkaWFsb2cpO1xuICAkZHJhd2VyLXNpZGUtYm9yZGVyOiBzb2xpZCAxcHggbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcblxuICAubWF0LWRyYXdlci1jb250YWluZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRkcmF3ZXItY29udGFpbmVyLWJhY2tncm91bmQtY29sb3I7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cblxuICAubWF0LWRyYXdlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGRyYXdlci1iYWNrZ3JvdW5kLWNvbG9yO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gICAgJi5tYXQtZHJhd2VyLXB1c2gge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGRyYXdlci1wdXNoLWJhY2tncm91bmQtY29sb3I7XG4gICAgfVxuXG4gICAgJjpub3QoLm1hdC1kcmF3ZXItc2lkZSkge1xuICAgICAgLy8gVGhlIGVsZXZhdGlvbiBvZiB6LTE2IGlzIG5vdGVkIGluIHRoZSBkZXNpZ24gc3BlY2lmaWNhdGlvbnMuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9tYXRlcmlhbC5pby9kZXNpZ24vY29tcG9uZW50cy9uYXZpZ2F0aW9uLWRyYXdlci5odG1sXG4gICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigxNiwgJHRoZW1lKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWRyYXdlci1zaWRlIHtcbiAgICBib3JkZXItcmlnaHQ6ICRkcmF3ZXItc2lkZS1ib3JkZXI7XG5cbiAgICAmLm1hdC1kcmF3ZXItZW5kIHtcbiAgICAgIGJvcmRlci1sZWZ0OiAkZHJhd2VyLXNpZGUtYm9yZGVyO1xuICAgICAgYm9yZGVyLXJpZ2h0OiBub25lO1xuICAgIH1cbiAgfVxuXG4gIFtkaXI9J3J0bCddIC5tYXQtZHJhd2VyLXNpZGUge1xuICAgIGJvcmRlci1sZWZ0OiAkZHJhd2VyLXNpZGUtYm9yZGVyO1xuICAgIGJvcmRlci1yaWdodDogbm9uZTtcblxuICAgICYubWF0LWRyYXdlci1lbmQge1xuICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gICAgICBib3JkZXItcmlnaHQ6ICRkcmF3ZXItc2lkZS1ib3JkZXI7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1kcmF3ZXItYmFja2Ryb3AubWF0LWRyYXdlci1zaG93biB7XG4gICAgJG9wYWNpdHk6IDAuNjtcbiAgICAkYmFja2Ryb3AtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCwgJG9wYWNpdHkpO1xuXG4gICAgQGlmICh0eXBlLW9mKCRiYWNrZHJvcC1jb2xvcikgPT0gY29sb3IpIHtcbiAgICAgIC8vIFdlIHVzZSBpbnZlcnQoKSBoZXJlIHRvIGhhdmUgdGhlIGRhcmtlbiB0aGUgYmFja2dyb3VuZCBjb2xvciBleHBlY3RlZCB0byBiZSB1c2VkLiBJZiB0aGVcbiAgICAgIC8vIGJhY2tncm91bmQgaXMgbGlnaHQsIHdlIHVzZSBhIGRhcmsgYmFja2Ryb3AuIElmIHRoZSBiYWNrZ3JvdW5kIGlzIGRhcmssXG4gICAgICAvLyB3ZSB1c2UgYSBsaWdodCBiYWNrZHJvcC5cbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGludmVydCgkYmFja2Ryb3AtY29sb3IpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICAvLyBJZiB3ZSBjb3VsZG4ndCByZXNvbHZlIHRoZSBiYWNrZHJvcCBjb2xvciB0byBhIGNvbG9yIHZhbHVlLCBmYWxsIGJhY2sgdG8gdXNpbmdcbiAgICAgIC8vIGBvcGFjaXR5YCB0byBtYWtlIGl0IG9wYXF1ZSBzaW5jZSBpdHMgZW5kIHZhbHVlIGNvdWxkIGJlIGEgc29saWQgY29sb3IuXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2Ryb3AtY29sb3I7XG4gICAgICBvcGFjaXR5OiAkb3BhY2l0eTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1zaWRlbmF2LXR5cG9ncmFwaHkoJGNvbmZpZykgeyB9XG5cblxuXG5cblxuXG5AbWl4aW4gX21hdC1zbGlkZS10b2dnbGUtY2hlY2tlZCgkcGFsZXR0ZSwgJHRodW1iLWNoZWNrZWQtaHVlKSB7XG4gICYubWF0LWNoZWNrZWQge1xuICAgIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgJHRodW1iLWNoZWNrZWQtaHVlKTtcbiAgICB9XG5cbiAgICAubWF0LXNsaWRlLXRvZ2dsZS1iYXIge1xuICAgICAgLy8gT3BhY2l0eSBpcyBkZXRlcm1pbmVkIGZyb20gdGhlIHNwZWNzIGZvciB0aGUgc2VsZWN0aW9uIGNvbnRyb2xzLlxuICAgICAgLy8gU2VlOiBodHRwczovL21hdGVyaWFsLmlvL2Rlc2lnbi9jb21wb25lbnRzL3NlbGVjdGlvbi1jb250cm9scy5odG1sI3NwZWNzXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsICR0aHVtYi1jaGVja2VkLWh1ZSwgMC41NCk7XG4gICAgfVxuXG4gICAgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgICAvLyBTZXQgbm8gb3BhY2l0eSBmb3IgdGhlIHJpcHBsZXMgYmVjYXVzZSB0aGUgcmlwcGxlIG9wYWNpdHkgd2lsbCBiZSBhZGp1c3RlZCBkeW5hbWljYWxseVxuICAgICAgLy8gYmFzZWQgb24gdGhlIHR5cGUgb2YgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc2xpZGUtdG9nZ2xlIChlLmcuIGZvciBob3ZlciwgZm9jdXMpXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsICR0aHVtYi1jaGVja2VkLWh1ZSk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtc2xpZGUtdG9nZ2xlLXRoZW1lKCR0aGVtZSkge1xuICAkaXMtZGFyazogbWFwX2dldCgkdGhlbWUsIGlzLWRhcmspO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAvLyBDb2xvciBodWVzIGFyZSBiYXNlZCBvbiB0aGUgc3BlY3Mgd2hpY2ggYnJpZWZseSBzaG93IHRoZSBodWVzIHRoYXQgYXJlIGFwcGxpZWQgdG8gYSBzd2l0Y2guXG4gIC8vIFRoZSAyMDE4IHNwZWNzIG5vIGxvbmdlciBkZXNjcmliZSBob3cgZGFyayBzd2l0Y2hlcyBzaG91bGQgbG9vayBsaWtlLiBEdWUgdG8gdGhlIGxhY2sgb2ZcbiAgLy8gaW5mb3JtYXRpb24gZm9yIGRhcmsgdGhlbWVkIHN3aXRjaGVzLCB3ZSBwYXJ0aWFsbHkga2VlcCB0aGUgb2xkIGJlaGF2aW9yIHRoYXQgaXMgYmFzZWQgb25cbiAgLy8gdGhlIHByZXZpb3VzIHNwZWNpZmljYXRpb25zLiBGb3IgdGhlIGNoZWNrZWQgY29sb3Igd2UgYWx3YXlzIHVzZSB0aGUgYGRlZmF1bHRgIGh1ZSBiZWNhdXNlXG4gIC8vIHRoYXQgZm9sbG93cyBNREMgYW5kIGFsc28gbWFrZXMgaXQgZWFzaWVyIGZvciBwZW9wbGUgdG8gY3JlYXRlIGEgY3VzdG9tIHRoZW1lIHdpdGhvdXQgbmVlZGluZ1xuICAvLyB0byBzcGVjaWZ5IGVhY2ggaHVlIGluZGl2aWR1YWxseS5cbiAgJHRodW1iLXVuY2hlY2tlZC1odWU6IGlmKCRpcy1kYXJrLCA0MDAsIDUwKTtcbiAgJHRodW1iLWNoZWNrZWQtaHVlOiBkZWZhdWx0O1xuXG4gICRiYXItdW5jaGVja2VkLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkKTtcbiAgJHJpcHBsZS11bmNoZWNrZWQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgYmFzZSk7XG5cbiAgLm1hdC1zbGlkZS10b2dnbGUge1xuICAgIEBpbmNsdWRlIF9tYXQtc2xpZGUtdG9nZ2xlLWNoZWNrZWQoJGFjY2VudCwgJHRodW1iLWNoZWNrZWQtaHVlKTtcblxuICAgICYubWF0LXByaW1hcnkge1xuICAgICAgQGluY2x1ZGUgX21hdC1zbGlkZS10b2dnbGUtY2hlY2tlZCgkcHJpbWFyeSwgJHRodW1iLWNoZWNrZWQtaHVlKTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtc2xpZGUtdG9nZ2xlLWNoZWNrZWQoJHdhcm4sICR0aHVtYi1jaGVja2VkLWh1ZSk7XG4gICAgfVxuXG4gICAgJjpub3QoLm1hdC1jaGVja2VkKSAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAgIC8vIFNldCBubyBvcGFjaXR5IGZvciB0aGUgcmlwcGxlcyBiZWNhdXNlIHRoZSByaXBwbGUgb3BhY2l0eSB3aWxsIGJlIGFkanVzdGVkIGR5bmFtaWNhbGx5XG4gICAgICAvLyBiYXNlZCBvbiB0aGUgdHlwZSBvZiBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzbGlkZS10b2dnbGUgKGUuZy4gZm9yIGhvdmVyLCBmb2N1cylcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRyaXBwbGUtdW5jaGVja2VkLWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigxLCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkbWF0LWdyZXksICR0aHVtYi11bmNoZWNrZWQtaHVlKTtcbiAgfVxuXG4gIC5tYXQtc2xpZGUtdG9nZ2xlLWJhciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGJhci11bmNoZWNrZWQtY29sb3I7XG4gIH1cbn1cblxuQG1peGluIG1hdC1zbGlkZS10b2dnbGUtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnQge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gX21hdC1zbGlkZXItaW5uZXItY29udGVudC10aGVtZSgkcGFsZXR0ZSkge1xuICAubWF0LXNsaWRlci10cmFjay1maWxsLFxuICAubWF0LXNsaWRlci10aHVtYixcbiAgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSk7XG4gIH1cblxuICAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0IHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNsaWRlci10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgJG1hdC1zbGlkZXItb2ZmLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNsaWRlci1vZmYpO1xuICAkbWF0LXNsaWRlci1vZmYtZm9jdXNlZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzbGlkZXItb2ZmLWFjdGl2ZSk7XG4gICRtYXQtc2xpZGVyLWRpc2FibGVkLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNsaWRlci1vZmYpO1xuICAkbWF0LXNsaWRlci1sYWJlbGVkLW1pbi12YWx1ZS10aHVtYi1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzbGlkZXItbWluKTtcbiAgJG1hdC1zbGlkZXItbGFiZWxlZC1taW4tdmFsdWUtdGh1bWItbGFiZWwtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2xpZGVyLW9mZik7XG4gICRtYXQtc2xpZGVyLXRpY2stb3BhY2l0eTogMC43O1xuICAkbWF0LXNsaWRlci10aWNrLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGJhc2UsICRtYXQtc2xpZGVyLXRpY2stb3BhY2l0eSk7XG4gICRtYXQtc2xpZGVyLXRpY2stc2l6ZTogMnB4O1xuXG4gIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRtYXQtc2xpZGVyLW9mZi1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtcHJpbWFyeSB7XG4gICAgQGluY2x1ZGUgX21hdC1zbGlkZXItaW5uZXItY29udGVudC10aGVtZSgkcHJpbWFyeSk7XG4gIH1cblxuICAubWF0LWFjY2VudCB7XG4gICAgQGluY2x1ZGUgX21hdC1zbGlkZXItaW5uZXItY29udGVudC10aGVtZSgkYWNjZW50KTtcbiAgfVxuXG4gIC5tYXQtd2FybiB7XG4gICAgQGluY2x1ZGUgX21hdC1zbGlkZXItaW5uZXItY29udGVudC10aGVtZSgkd2Fybik7XG4gIH1cblxuICAubWF0LXNsaWRlci1mb2N1cy1yaW5nIHtcbiAgICAkb3BhY2l0eTogMC4yO1xuICAgICRjb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIGRlZmF1bHQsICRvcGFjaXR5KTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3I7XG5cbiAgICAvLyBgbWF0LWNvbG9yYCB1c2VzIGByZ2JhYCBmb3IgdGhlIG9wYWNpdHkgd2hpY2ggd29uJ3Qgd29yayB3aXRoXG4gICAgLy8gQ1NTIHZhcmlhYmxlcyBzbyB3ZSBuZWVkIHRvIHVzZSBgb3BhY2l0eWAgYXMgYSBmYWxsYmFjay5cbiAgICBAaWYgKHR5cGUtb2YoJGNvbG9yKSAhPSBjb2xvcikge1xuICAgICAgb3BhY2l0eTogJG9wYWNpdHk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbGlkZXI6aG92ZXIsXG4gIC5jZGstZm9jdXNlZCB7XG4gICAgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbWF0LXNsaWRlci1vZmYtZm9jdXNlZC1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAubWF0LXNsaWRlci1kaXNhYmxlZCB7XG4gICAgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCxcbiAgICAubWF0LXNsaWRlci10cmFjay1maWxsLFxuICAgIC5tYXQtc2xpZGVyLXRodW1iIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRtYXQtc2xpZGVyLWRpc2FibGVkLWNvbG9yO1xuICAgIH1cblxuICAgICY6aG92ZXIge1xuICAgICAgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRtYXQtc2xpZGVyLWRpc2FibGVkLWNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2xpZGVyLW1pbi12YWx1ZSB7XG4gICAgLm1hdC1zbGlkZXItZm9jdXMtcmluZyB7XG4gICAgICAkb3BhY2l0eTogMC4xMjtcbiAgICAgICRjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBiYXNlLCAkb3BhY2l0eSk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3I7XG5cbiAgICAgIC8vIGBtYXQtY29sb3JgIHVzZXMgYHJnYmFgIGZvciB0aGUgb3BhY2l0eSB3aGljaCB3b24ndCB3b3JrIHdpdGhcbiAgICAgIC8vIENTUyB2YXJpYWJsZXMgc28gd2UgbmVlZCB0byB1c2UgYG9wYWNpdHlgIGFzIGEgZmFsbGJhY2suXG4gICAgICBAaWYgKHR5cGUtb2YoJGNvbG9yKSAhPSBjb2xvcikge1xuICAgICAgICBvcGFjaXR5OiAkb3BhY2l0eTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyB7XG4gICAgICAubWF0LXNsaWRlci10aHVtYixcbiAgICAgIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG1hdC1zbGlkZXItbGFiZWxlZC1taW4tdmFsdWUtdGh1bWItY29sb3I7XG4gICAgICB9XG5cbiAgICAgICYuY2RrLWZvY3VzZWQge1xuICAgICAgICAubWF0LXNsaWRlci10aHVtYixcbiAgICAgICAgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRtYXQtc2xpZGVyLWxhYmVsZWQtbWluLXZhbHVlLXRodW1iLWxhYmVsLWNvbG9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykge1xuICAgICAgLm1hdC1zbGlkZXItdGh1bWIge1xuICAgICAgICBib3JkZXItY29sb3I6ICRtYXQtc2xpZGVyLW9mZi1jb2xvcjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXIsXG4gICAgICAmLmNkay1mb2N1c2VkIHtcbiAgICAgICAgLm1hdC1zbGlkZXItdGh1bWIge1xuICAgICAgICAgIGJvcmRlci1jb2xvcjogJG1hdC1zbGlkZXItb2ZmLWZvY3VzZWQtY29sb3I7XG4gICAgICAgIH1cblxuICAgICAgICAmLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWIge1xuICAgICAgICAgIGJvcmRlci1jb2xvcjogJG1hdC1zbGlkZXItZGlzYWJsZWQtY29sb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubWF0LXNsaWRlci1oYXMtdGlja3MgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXIge1xuICAgIGJvcmRlci1jb2xvcjogJG1hdC1zbGlkZXItdGljay1jb2xvcjtcblxuICAgIC8vIGBtYXQtY29sb3JgIHVzZXMgYHJnYmFgIGZvciB0aGUgb3BhY2l0eSB3aGljaCB3b24ndCB3b3JrIHdpdGhcbiAgICAvLyBDU1MgdmFyaWFibGVzIHNvIHdlIG5lZWQgdG8gdXNlIGBvcGFjaXR5YCBhcyBhIGZhbGxiYWNrLlxuICAgIEBpZiAodHlwZS1vZigkbWF0LXNsaWRlci10aWNrLWNvbG9yKSAhPSBjb2xvcikge1xuICAgICAgb3BhY2l0eTogJG1hdC1zbGlkZXItdGljay1vcGFjaXR5O1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGlja3Mge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICRtYXQtc2xpZGVyLXRpY2stY29sb3IsXG4gICAgICAgICRtYXQtc2xpZGVyLXRpY2stY29sb3IgJG1hdC1zbGlkZXItdGljay1zaXplLCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCk7XG4gICAgLy8gRmlyZWZveCBkb2Vzbid0IGRyYXcgdGhlIGdyYWRpZW50IGNvcnJlY3RseSB3aXRoICd0byByaWdodCdcbiAgICAvLyAoc2VlIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTQzMTkpLlxuICAgIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgwLjAwMDFkZWcsICRtYXQtc2xpZGVyLXRpY2stY29sb3IsXG4gICAgICAgICRtYXQtc2xpZGVyLXRpY2stY29sb3IgJG1hdC1zbGlkZXItdGljay1zaXplLCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCk7XG5cbiAgICAvLyBgbWF0LWNvbG9yYCB1c2VzIGByZ2JhYCBmb3IgdGhlIG9wYWNpdHkgd2hpY2ggd29uJ3Qgd29yayB3aXRoXG4gICAgLy8gQ1NTIHZhcmlhYmxlcyBzbyB3ZSBuZWVkIHRvIHVzZSBgb3BhY2l0eWAgYXMgYSBmYWxsYmFjay5cbiAgICBAaWYgKHR5cGUtb2YoJG1hdC1zbGlkZXItdGljay1jb2xvcikgIT0gY29sb3IpIHtcbiAgICAgIG9wYWNpdHk6ICRtYXQtc2xpZGVyLXRpY2stb3BhY2l0eTtcbiAgICB9XG4gIH1cblxuICAubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrcyB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICRtYXQtc2xpZGVyLXRpY2stY29sb3IsXG4gICAgICAgICRtYXQtc2xpZGVyLXRpY2stY29sb3IgJG1hdC1zbGlkZXItdGljay1zaXplLCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCk7XG5cbiAgICAvLyBgbWF0LWNvbG9yYCB1c2VzIGByZ2JhYCBmb3IgdGhlIG9wYWNpdHkgd2hpY2ggd29uJ3Qgd29yayB3aXRoXG4gICAgLy8gQ1NTIHZhcmlhYmxlcyBzbyB3ZSBuZWVkIHRvIHVzZSBgb3BhY2l0eWAgYXMgYSBmYWxsYmFjay5cbiAgICBAaWYgKHR5cGUtb2YoJG1hdC1zbGlkZXItdGljay1jb2xvcikgIT0gY29sb3IpIHtcbiAgICAgIG9wYWNpdHk6ICRtYXQtc2xpZGVyLXRpY2stb3BhY2l0eTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1zbGlkZXItdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHQge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMik7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuQG1peGluIG1hdC1zdGVwcGVyLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuXG4gIC5tYXQtc3RlcC1oZWFkZXIge1xuICAgICYuY2RrLWtleWJvYXJkLWZvY3VzZWQsXG4gICAgJi5jZGstcHJvZ3JhbS1mb2N1c2VkLFxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3Zlcik7XG4gICAgfVxuXG4gICAgLy8gT24gdG91Y2ggZGV2aWNlcyB0aGUgOmhvdmVyIHN0YXRlIHdpbGwgbGluZ2VyIG9uIHRoZSBlbGVtZW50IGFmdGVyIGEgdGFwLlxuICAgIC8vIFJlc2V0IGl0IHZpYSBgQG1lZGlhYCBhZnRlciB0aGUgZGVjbGFyYXRpb24sIGJlY2F1c2UgdGhlIG1lZGlhIHF1ZXJ5IGlzbid0XG4gICAgLy8gc3VwcG9ydGVkIGJ5IGFsbCBicm93c2VycyB5ZXQuXG4gICAgQG1lZGlhIChob3Zlcjogbm9uZSkge1xuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLm1hdC1zdGVwLWxhYmVsLFxuICAgIC5tYXQtc3RlcC1vcHRpb25hbCB7XG4gICAgICAvLyBUT0RPKGpvc2VwaHBlcnJvdHQpOiBVcGRhdGUgdG8gdXNpbmcgYSBjb3JyZWN0ZWQgZGlzYWJsZWQtdGV4dCBjb250cmFzdFxuICAgICAgLy8gaW5zdGVhZCBvZiBzZWNvbmRhcnktdGV4dC5cbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgICB9XG5cbiAgICAubWF0LXN0ZXAtaWNvbiB7XG4gICAgICAvLyBUT0RPKGpvc2VwaHBlcnJvdHQpOiBVcGRhdGUgdG8gdXNpbmcgYSBjb3JyZWN0ZWQgZGlzYWJsZWQtdGV4dCBjb250cmFzdFxuICAgICAgLy8gaW5zdGVhZCBvZiBzZWNvbmRhcnktdGV4dC5cbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgZGVmYXVsdC1jb250cmFzdCk7XG4gICAgfVxuXG4gICAgLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsXG4gICAgLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSxcbiAgICAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgICB9XG5cbiAgICAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lcnJvciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICAgIH1cblxuICAgIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1hY3RpdmUge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgfVxuXG4gICAgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWVycm9yIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLCAubWF0LXN0ZXBwZXItdmVydGljYWwge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gIH1cblxuICAubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3JlIHtcbiAgICBib3JkZXItbGVmdC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxuXG4gIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3JlLFxuICAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLFxuICAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5lIHtcbiAgICBib3JkZXItdG9wLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtc3RlcHBlci10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1zdGVwcGVyLXZlcnRpY2FsLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbCB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtc3RlcC1sYWJlbCB7XG4gICAgZm9udDoge1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0xKTtcbiAgICB9O1xuICB9XG5cbiAgLm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvciB7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgfVxuXG4gIC5tYXQtc3RlcC1sYWJlbC1lcnJvciB7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMik7XG4gIH1cblxuICAubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWQge1xuICAgIGZvbnQ6IHtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0yKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMik7XG4gICAgfTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNvcnQtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1zb3J0LWhlYWRlci1hcnJvdyB7XG4gICAgJHRhYmxlLWJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2NhcmQnKTtcbiAgICAkdGV4dC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG5cbiAgICAvLyBCZWNhdXNlIHRoZSBhcnJvdyBpcyBtYWRlIHVwIG9mIG11bHRpcGxlIGVsZW1lbnRzIHRoYXQgYXJlIHN0YWNrZWQgb24gdG9wIG9mIGVhY2ggb3RoZXIsXG4gICAgLy8gd2UgY2FuJ3QgdXNlIHRoZSBzZW1pLXRyYXNwYXJlbnQgY29sb3IgZnJvbSB0aGUgdGhlbWUgZGlyZWN0bHkuIElmIHRoZSB2YWx1ZSBpcyBhIGNvbG9yXG4gICAgLy8gKnR5cGUqLCB3ZSBjb252ZXJ0IGl0IGludG8gYSBzb2xpZCBjb2xvciBieSB0YWtpbmcgdGhlIG9wYWNpdHkgZnJvbSB0aGUgcmdiYSB2YWx1ZSBhbmRcbiAgICAvLyB1c2luZyB0aGUgdmFsdWUgdG8gZGV0ZXJtaW5lIHRoZSBwZXJjZW50YWdlIG9mIHRoZSBiYWNrZ3JvdW5kIHRvIHB1dCBpbnRvIGZvcmVncm91bmRcbiAgICAvLyB3aGVuIG1peGluZyB0aGUgY29sb3JzIHRvZ2V0aGVyLiBPdGhlcndpc2UsIGlmIGl0IHJlc29sdmVzIHRvIHNvbWV0aGluZyBkaWZmZXJlbnRcbiAgICAvLyAoZS5nLiBpdCByZXNvbHZlcyB0byBhIENTUyB2YXJpYWJsZSksIHdlIHVzZSB0aGUgY29sb3IgZGlyZWN0bHkuXG4gICAgQGlmICh0eXBlLW9mKCR0YWJsZS1iYWNrZ3JvdW5kKSA9PSBjb2xvciBhbmQgdHlwZS1vZigkdGV4dC1jb2xvcikgPT0gY29sb3IpIHtcbiAgICAgICR0ZXh0LW9wYWNpdHk6IG9wYWNpdHkoJHRleHQtY29sb3IpO1xuICAgICAgY29sb3I6IG1peCgkdGFibGUtYmFja2dyb3VuZCwgcmdiYSgkdGV4dC1jb2xvciwgMSksICgxIC0gJHRleHQtb3BhY2l0eSkgKiAxMDAlKTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgY29sb3I6ICR0ZXh0LWNvbG9yO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNvcnQtdHlwb2dyYXBoeSgkY29uZmlnKSB7IH1cblxuXG5cblxuXG5AbWl4aW4gbWF0LXRhYnMtdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkaGVhZGVyLWJvcmRlcjogMXB4IHNvbGlkIG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG5cbiAgLm1hdC10YWItbmF2LWJhcixcbiAgLm1hdC10YWItaGVhZGVyIHtcbiAgICBib3JkZXItYm90dG9tOiAkaGVhZGVyLWJvcmRlcjtcbiAgfVxuXG4gIC5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciB7XG4gICAgLm1hdC10YWItbmF2LWJhcixcbiAgICAubWF0LXRhYi1oZWFkZXIge1xuICAgICAgYm9yZGVyLXRvcDogJGhlYWRlci1ib3JkZXI7XG4gICAgICBib3JkZXItYm90dG9tOiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtdGFiLWxhYmVsLCAubWF0LXRhYi1saW5rIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAgICYubWF0LXRhYi1kaXNhYmxlZCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgICB9XG4gIH1cblxuICAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cblxuICAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gIH1cblxuICAvLyBSZW1vdmUgaGVhZGVyIGJvcmRlciB3aGVuIHRoZXJlIGlzIGEgYmFja2dyb3VuZCBjb2xvclxuICAubWF0LXRhYi1ncm91cFtjbGFzcyo9J21hdC1iYWNrZ3JvdW5kLSddIC5tYXQtdGFiLWhlYWRlcixcbiAgLm1hdC10YWItbmF2LWJhcltjbGFzcyo9J21hdC1iYWNrZ3JvdW5kLSddIHtcbiAgICBib3JkZXItYm90dG9tOiBub25lO1xuICAgIGJvcmRlci10b3A6IG5vbmU7XG4gIH1cblxuICAubWF0LXRhYi1ncm91cCwgLm1hdC10YWItbmF2LWJhciB7XG4gICAgJHRoZW1lLWNvbG9yczogKFxuICAgICAgcHJpbWFyeTogJHByaW1hcnksXG4gICAgICBhY2NlbnQ6ICRhY2NlbnQsXG4gICAgICB3YXJuOiAkd2FyblxuICAgICk7XG5cbiAgICBAZWFjaCAkbmFtZSwgJGNvbG9yIGluICR0aGVtZS1jb2xvcnMge1xuICAgICAgLy8gU2V0IHRoZSBmb3JlZ3JvdW5kIGNvbG9yIG9mIHRoZSB0YWJzXG4gICAgICAmLm1hdC0jeyRuYW1lfSB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtdGFiLWxhYmVsLWZvY3VzKCRjb2xvcik7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtaW5rLWJhcigkY29sb3IpO1xuXG4gICAgICAgIC8vIE92ZXJyaWRlIGluayBiYXIgd2hlbiBiYWNrZ3JvdW5kIGNvbG9yIGlzIHRoZSBzYW1lXG4gICAgICAgICYubWF0LWJhY2tncm91bmQtI3skbmFtZX0ge1xuICAgICAgICAgIEBpbmNsdWRlIF9tYXQtaW5rLWJhcigkY29sb3IsIGRlZmF1bHQtY29udHJhc3QpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGVhY2ggJG5hbWUsICRjb2xvciBpbiAkdGhlbWUtY29sb3JzIHtcbiAgICAgIC8vIFNldCBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSB0YWJzIGFuZCBvdmVycmlkZSBmb2N1cyBjb2xvclxuICAgICAgJi5tYXQtYmFja2dyb3VuZC0jeyRuYW1lfSB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtdGFiLWxhYmVsLWZvY3VzKCRjb2xvcik7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtdGFicy1iYWNrZ3JvdW5kKCRjb2xvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBfbWF0LWluay1iYXIoJGNvbG9yLCAkaHVlOiBkZWZhdWx0KSB7XG4gIC5tYXQtaW5rLWJhciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRjb2xvciwgJGh1ZSk7XG4gIH1cbn1cblxuQG1peGluIF9tYXQtdGFiLWxhYmVsLWZvY3VzKCR0YWItZm9jdXMtY29sb3IpIHtcbiAgLm1hdC10YWItbGFiZWwsXG4gIC5tYXQtdGFiLWxpbmsge1xuICAgICYuY2RrLWtleWJvYXJkLWZvY3VzZWQsXG4gICAgJi5jZGstcHJvZ3JhbS1mb2N1c2VkIHtcbiAgICAgICY6bm90KC5tYXQtdGFiLWRpc2FibGVkKSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkdGFiLWZvY3VzLWNvbG9yLCBsaWdodGVyLCAwLjMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gX21hdC10YWJzLWJhY2tncm91bmQoJGJhY2tncm91bmQtY29sb3IpIHtcbiAgLy8gU2V0IGJhY2tncm91bmQgY29sb3IgZm9yIHRoZSB0YWIgZ3JvdXBcbiAgLm1hdC10YWItaGVhZGVyLCAubWF0LXRhYi1saW5rcywgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24ge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZC1jb2xvcik7XG4gIH1cblxuICAvLyBTZXQgbGFiZWxzIHRvIGNvbnRyYXN0IGFnYWluc3QgYmFja2dyb3VuZFxuICAubWF0LXRhYi1sYWJlbCwgLm1hdC10YWItbGluayB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZC1jb2xvciwgZGVmYXVsdC1jb250cmFzdCk7XG5cbiAgICAmLm1hdC10YWItZGlzYWJsZWQge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZC1jb2xvciwgZGVmYXVsdC1jb250cmFzdCwgMC40KTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXQgcGFnaW5hdGlvbiBjaGV2cm9ucyB0byBjb250cmFzdCBiYWNrZ3JvdW5kXG4gIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24ge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLWNvbG9yLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgfVxuXG4gIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24ge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLWNvbG9yLCBkZWZhdWx0LWNvbnRyYXN0LCAwLjQpO1xuICB9XG5cbiAgLy8gU2V0IHJpcHBsZXMgY29sb3IgdG8gYmUgdGhlIGNvbnRyYXN0IGNvbG9yIG9mIHRoZSBuZXcgYmFja2dyb3VuZC4gT3RoZXJ3aXNlIHRoZSByaXBwbGVcbiAgLy8gY29sb3Igd2lsbCBiZSBiYXNlZCBvbiB0aGUgYXBwIGJhY2tncm91bmQgY29sb3IuXG4gIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZC1jb2xvciwgZGVmYXVsdC1jb250cmFzdCwgMC4xMik7XG4gIH1cbn1cblxuQG1peGluIG1hdC10YWJzLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXRhYi1ncm91cCB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtdGFiLWxhYmVsLCAubWF0LXRhYi1saW5rIHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBidXR0b24pO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBidXR0b24pO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYnV0dG9uKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cbkBtaXhpbiBfbWF0LXRvb2xiYXItY29sb3IoJHBhbGV0dGUpIHtcbiAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRwYWxldHRlKTtcbiAgY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgZGVmYXVsdC1jb250cmFzdCk7XG59XG5cbkBtaXhpbiBfbWF0LXRvb2xiYXItZm9ybS1maWVsZC1vdmVycmlkZXMge1xuICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lLFxuICAubWF0LWZvcm0tZmllbGQtcmlwcGxlLFxuICAubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLFxuICAubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLFxuICAubWF0LXNlbGVjdC12YWx1ZSxcbiAgLm1hdC1zZWxlY3QtYXJyb3csXG4gIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgY29sb3I6IGluaGVyaXQ7XG4gIH1cblxuICAubWF0LWlucHV0LWVsZW1lbnQge1xuICAgIGNhcmV0LWNvbG9yOiBjdXJyZW50Q29sb3I7XG4gIH1cbn1cblxuQG1peGluIG1hdC10b29sYmFyLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LXRvb2xiYXIge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgYXBwLWJhcik7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgICAmLm1hdC1wcmltYXJ5IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdG9vbGJhci1jb2xvcigkcHJpbWFyeSk7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdG9vbGJhci1jb2xvcigkYWNjZW50KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdG9vbGJhci1jb2xvcigkd2Fybik7XG4gICAgfVxuXG4gICAgQGluY2x1ZGUgX21hdC10b29sYmFyLWZvcm0tZmllbGQtb3ZlcnJpZGVzO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtdG9vbGJhci10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC10b29sYmFyLFxuICAubWF0LXRvb2xiYXIgaDEsXG4gIC5tYXQtdG9vbGJhciBoMixcbiAgLm1hdC10b29sYmFyIGgzLFxuICAubWF0LXRvb2xiYXIgaDQsXG4gIC5tYXQtdG9vbGJhciBoNSxcbiAgLm1hdC10b29sYmFyIGg2IHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgdGl0bGUpO1xuICAgIG1hcmdpbjogMDtcbiAgfVxufVxuXG5cblxuXG5cbiRtYXQtdG9vbHRpcC10YXJnZXQtaGVpZ2h0OiAyMnB4O1xuJG1hdC10b29sdGlwLWZvbnQtc2l6ZTogMTBweDtcbiRtYXQtdG9vbHRpcC12ZXJ0aWNhbC1wYWRkaW5nOiAoJG1hdC10b29sdGlwLXRhcmdldC1oZWlnaHQgLSAkbWF0LXRvb2x0aXAtZm9udC1zaXplKSAvIDI7XG5cbiRtYXQtdG9vbHRpcC1oYW5kc2V0LXRhcmdldC1oZWlnaHQ6IDMwcHg7XG4kbWF0LXRvb2x0aXAtaGFuZHNldC1mb250LXNpemU6IDE0cHg7XG4kbWF0LXRvb2x0aXAtaGFuZHNldC12ZXJ0aWNhbC1wYWRkaW5nOlxuICAgICgkbWF0LXRvb2x0aXAtaGFuZHNldC10YXJnZXQtaGVpZ2h0IC0gJG1hdC10b29sdGlwLWhhbmRzZXQtZm9udC1zaXplKSAvIDI7XG5cbkBtaXhpbiBtYXQtdG9vbHRpcC10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcblxuICAubWF0LXRvb2x0aXAge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgdG9vbHRpcCwgMC45KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXRvb2x0aXAtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtdG9vbHRpcCB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgICBmb250LXNpemU6ICRtYXQtdG9vbHRpcC1mb250LXNpemU7XG4gICAgcGFkZGluZy10b3A6ICRtYXQtdG9vbHRpcC12ZXJ0aWNhbC1wYWRkaW5nO1xuICAgIHBhZGRpbmctYm90dG9tOiAkbWF0LXRvb2x0aXAtdmVydGljYWwtcGFkZGluZztcbiAgfVxuXG4gIC5tYXQtdG9vbHRpcC1oYW5kc2V0IHtcbiAgICBmb250LXNpemU6ICRtYXQtdG9vbHRpcC1oYW5kc2V0LWZvbnQtc2l6ZTtcbiAgICBwYWRkaW5nLXRvcDogJG1hdC10b29sdGlwLWhhbmRzZXQtdmVydGljYWwtcGFkZGluZztcbiAgICBwYWRkaW5nLWJvdHRvbTogJG1hdC10b29sdGlwLWhhbmRzZXQtdmVydGljYWwtcGFkZGluZztcbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtc25hY2stYmFyLXRoZW1lKCR0aGVtZSkge1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcblxuICAubWF0LXNuYWNrLWJhci1jb250YWluZXIge1xuICAgIC8vIFVzZSB0aGUgcHJpbWFyeSB0ZXh0IG9uIHRoZSBkYXJrIHRoZW1lLCBldmVuIHRob3VnaCB0aGUgbGlnaHRlciBvbmUgdXNlc1xuICAgIC8vIGEgc2Vjb25kYXJ5LCBiZWNhdXNlIHRoZSBjb250cmFzdCBvbiB0aGUgbGlnaHQgcHJpbWFyeSB0ZXh0IGlzIHBvb3IuXG4gICAgY29sb3I6IGlmKCRpcy1kYXJrLXRoZW1lLCAkZGFyay1wcmltYXJ5LXRleHQsICRsaWdodC1zZWNvbmRhcnktdGV4dCk7XG4gICAgYmFja2dyb3VuZDogaWYoJGlzLWRhcmstdGhlbWUsIG1hcC1nZXQoJG1hdC1ncmV5LCA1MCksICMzMjMyMzIpO1xuXG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oNiwgJHRoZW1lKTtcbiAgfVxuXG4gIC5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbiB7XG4gICAgY29sb3I6IGlmKCRpcy1kYXJrLXRoZW1lLCBpbmhlcml0LCBtYXQtY29sb3IoJGFjY2VudCwgdGV4dCkpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtc25hY2stYmFyLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXNpbXBsZS1zbmFja2JhciB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgYm9keS0xKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKTtcbiAgICB9XG4gIH1cblxuICAubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb24ge1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogaW5oZXJpdDtcbiAgICAgIHNpemU6IGluaGVyaXQ7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBidXR0b24pO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8vIFRoZW1lIHN0eWxlcyB0aGF0IG9ubHkgYXBwbHkgdG8gdGhlIGZpbGwgYXBwZWFyYW5jZSBvZiB0aGUgZm9ybS1maWVsZC5cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLWZpbGwtdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG5cbiAgJGZpbGwtYmFja2dyb3VuZDogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBiYXNlLCBpZigkaXMtZGFyay10aGVtZSwgMC4xLCAwLjA0KSk7XG4gICRmaWxsLWRpc2FibGVkLWJhY2tncm91bmQ6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgYmFzZSwgaWYoJGlzLWRhcmstdGhlbWUsIDAuMDUsIDAuMDIpKTtcbiAgJHVuZGVybGluZS1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyLCBpZigkaXMtZGFyay10aGVtZSwgMC41LCAwLjQyKSk7XG4gICRsYWJlbC1kaXNhYmxlZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcblxuICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIHtcbiAgICAubWF0LWZvcm0tZmllbGQtZmxleCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZmlsbC1iYWNrZ3JvdW5kO1xuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWZsZXgge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGZpbGwtZGlzYWJsZWQtYmFja2dyb3VuZDtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1jb2xvcjtcbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIHtcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIGNvbG9yOiAkbGFiZWwtZGlzYWJsZWQtY29sb3I7XG4gICAgICB9XG5cbiAgICAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBVc2VkIHRvIG1ha2UgaW5zdGFuY2VzIG9mIHRoZSBfbWF0LWZvcm0tZmllbGQtbGFiZWwtZmxvYXRpbmcgbWl4aW4gbmVnbGlnaWJseSBkaWZmZXJlbnQsXG4vLyBhbmQgcHJldmVudCBHb29nbGUncyBDU1MgT3B0aW1pemVyIGZyb20gY29sbGFwc2luZyB0aGUgZGVjbGFyYXRpb25zLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHNvbWVcbi8vIG9mIHRoZSBzZWxlY3RvcnMgY29udGFpbiBwc2V1ZG8tY2xhc3NlcyBub3QgcmVjb2duaXplZCBpbiBhbGwgYnJvd3NlcnMuIElmIGEgYnJvd3NlciBlbmNvdW50ZXJzXG4vLyBhbiB1bmtub3duIHBzZXVkby1jbGFzcyBpdCB3aWxsIGRpc2NhcmQgdGhlIGVudGlyZSBydWxlIHNldC5cbiRtYXQtZm9ybS1maWVsZC1maWxsLWRlZHVwZTogMDtcblxuLy8gQXBwbGllcyBhIGZsb2F0aW5nIGxhYmVsIGFib3ZlIHRoZSBmb3JtIGZpZWxkIGNvbnRyb2wgaXRzZWxmLlxuQG1peGluIF9tYXQtZm9ybS1maWVsZC1maWxsLWxhYmVsLWZsb2F0aW5nKCRmb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kaW5maXgtbWFyZ2luLXRvcCAtICRpbmZpeC1wYWRkaW5nICsgJG1hdC1mb3JtLWZpZWxkLWZpbGwtZGVkdXBlKVxuICAgICAgICAgICAgIHNjYWxlKCRmb250LXNjYWxlKTtcbiAgd2lkdGg6IDEwMCUgLyAkZm9udC1zY2FsZSArICRtYXQtZm9ybS1maWVsZC1maWxsLWRlZHVwZTtcblxuICAkbWF0LWZvcm0tZmllbGQtZmlsbC1kZWR1cGU6ICRtYXQtZm9ybS1maWVsZC1maWxsLWRlZHVwZSArIDAuMDAwMDEgIWdsb2JhbDtcbn1cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLWZpbGwtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC8vIFRoZSB1bml0LWxlc3MgbGluZS1oZWlnaHQgZnJvbSB0aGUgZm9udCBjb25maWcuXG4gICRsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGlucHV0KTtcbiAgLy8gVGhlIGFtb3VudCB0byBzY2FsZSB0aGUgZm9udCBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsIGFuZCBzdWJzY3JpcHQuXG4gICRzdWJzY3JpcHQtZm9udC1zY2FsZTogMC43NTtcbiAgLy8gVGhlIHBhZGRpbmcgb24gdG9wIG9mIHRoZSBpbmZpeC5cbiAgJGluZml4LXBhZGRpbmctdG9wOiAwLjI1ZW07XG4gIC8vIFRoZSBwYWRkaW5nIGJlbG93IHRoZSBpbmZpeC5cbiAgJGluZml4LXBhZGRpbmctYm90dG9tOiAwLjc1ZW07XG4gIC8vIFRoZSBtYXJnaW4gYXBwbGllZCB0byB0aGUgZm9ybS1maWVsZC1pbmZpeCB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgZmxvYXRpbmcgbGFiZWwuXG4gICRpbmZpeC1tYXJnaW4tdG9wOiAxZW0gKiAkbGluZS1oZWlnaHQgKiAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG4gIC8vIFRoZSBhbW91bnQgd2Ugb2Zmc2V0IHRoZSBsYWJlbCBmcm9tIHRoZSBpbnB1dCB0ZXh0IGluIHRoZSBmaWxsIGFwcGVhcmFuY2UuXG4gICRmaWxsLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0OiAtMC41ZW07XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgIHBhZGRpbmc6ICRpbmZpeC1wYWRkaW5nLXRvcCAwICRpbmZpeC1wYWRkaW5nLWJvdHRvbSAwO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICB0b3A6ICRpbmZpeC1tYXJnaW4tdG9wICsgJGluZml4LXBhZGRpbmctdG9wO1xuICAgICAgbWFyZ2luLXRvcDogJGZpbGwtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQ7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQge1xuICAgICAgJi5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLFxuICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtZmlsbC1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLXRvcCArICRmaWxsLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0LFxuICAgICAgICAgICAgICAgICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2VydmVyLXNpZGUgcmVuZGVyZWQgbWF0SW5wdXQgd2l0aCBhIGxhYmVsIGF0dHJpYnV0ZSBidXQgbGFiZWwgbm90IHNob3duXG4gICAgICAvLyAodXNlZCBhcyBhIHB1cmUgQ1NTIHN0YW5kLWluIGZvciBtYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQpLlxuICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1maWxsLWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmctdG9wICsgJGZpbGwtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQsXG4gICAgICAgICAgICAgICAgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuXG4vLyBUaGVtZSBzdHlsZXMgdGhhdCBvbmx5IGFwcGx5IHRvIHRoZSBsZWdhY3kgYXBwZWFyYW5jZSBvZiB0aGUgZm9ybS1maWVsZC5cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcblxuICAkbGFiZWwtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICAkdW5kZXJsaW5lLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjcsIDAuNDIpKTtcblxuICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kge1xuICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICBjb2xvcjogJGxhYmVsLWNvbG9yO1xuICAgIH1cblxuICAgIC5tYXQtaGludCB7XG4gICAgICBjb2xvcjogJGxhYmVsLWNvbG9yO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1jb2xvcjtcbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUge1xuICAgICAgQGluY2x1ZGUgbWF0LWNvbnRyb2wtZGlzYWJsZWQtdW5kZXJsaW5lKCR1bmRlcmxpbmUtY29sb3IpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBVc2VkIHRvIG1ha2UgaW5zdGFuY2VzIG9mIHRoZSBfbWF0LWZvcm0tZmllbGQtbGFiZWwtZmxvYXRpbmcgbWl4aW4gbmVnbGlnaWJseSBkaWZmZXJlbnQsXG4vLyBhbmQgcHJldmVudCBHb29nbGUncyBDU1MgT3B0aW1pemVyIGZyb20gY29sbGFwc2luZyB0aGUgZGVjbGFyYXRpb25zLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHNvbWVcbi8vIG9mIHRoZSBzZWxlY3RvcnMgY29udGFpbiBwc2V1ZG8tY2xhc3NlcyBub3QgcmVjb2duaXplZCBpbiBhbGwgYnJvd3NlcnMuIElmIGEgYnJvd3NlciBlbmNvdW50ZXJzXG4vLyBhbiB1bmtub3duIHBzZXVkby1jbGFzcyBpdCB3aWxsIGRpc2NhcmQgdGhlIGVudGlyZSBydWxlIHNldC5cbiRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlOiAwO1xuXG4vLyBBcHBsaWVzIGEgZmxvYXRpbmcgbGFiZWwgYWJvdmUgdGhlIGZvcm0gZmllbGQgY29udHJvbCBpdHNlbGYuXG5AbWl4aW4gX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZygkZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKSB7XG4gIC8vIFdlIHVzZSBwZXJzcGVjdGl2ZSB0byBmaXggdGhlIHRleHQgYmx1cnJpbmVzcyBhcyBkZXNjcmliZWQgaGVyZTpcbiAgLy8gaHR0cDovL3d3dy51c2VyYWdlbnRtYW4uY29tL2Jsb2cvMjAxNC8wNS8wNC9maXhpbmctdHlwb2dyYXBoeS1pbnNpZGUtb2YtMi1kLWNzcy10cmFuc2Zvcm1zL1xuICAvLyBUaGlzIHJlc3VsdHMgaW4gYSBzbWFsbCBqaXR0ZXIgYWZ0ZXIgdGhlIGxhYmVsIGZsb2F0cyBvbiBGaXJlZm94LCB3aGljaCB0aGVcbiAgLy8gdHJhbnNsYXRlWiBmaXhlcy5cbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kaW5maXgtbWFyZ2luLXRvcCAtICRpbmZpeC1wYWRkaW5nKSBzY2FsZSgkZm9udC1zY2FsZSkgcGVyc3BlY3RpdmUoMTAwcHgpXG4gIHRyYW5zbGF0ZVooMC4wMDFweCArICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlKTtcbiAgLy8gVGhlIHRyaWNrcyBhYm92ZSB1c2VkIHRvIHNtb290aCBvdXQgdGhlIGFuaW1hdGlvbiBvbiBjaHJvbWUgYW5kIGZpcmVmb3ggYWN0dWFsbHkgbWFrZSB0aGluZ3NcbiAgLy8gd29yc2Ugb24gSUUsIHNvIHdlIGRvbid0IGluY2x1ZGUgdGhlbSBpbiB0aGUgSUUgdmVyc2lvbi5cbiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtJGluZml4LW1hcmdpbi10b3AgLSAkaW5maXgtcGFkZGluZyArICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlKVxuICAgICAgICAgICAgICAgICAgc2NhbGUoJGZvbnQtc2NhbGUpO1xuXG4gIHdpZHRoOiAxMDAlIC8gJGZvbnQtc2NhbGUgKyAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZTtcblxuICAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZTogJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGUgKyAwLjAwMDAxICFnbG9iYWw7XG59XG5cbi8vIFNhbWUgYXMgbWl4aW4gYWJvdmUsIGJ1dCBvbWl0cyB0aGUgdHJhbnNsYXRlWiBmb3IgcHJpbnRpbmcgcHVycG9zZXMuXG5AbWl4aW4gX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZy1wcmludCgkZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKSB7XG4gIC8vIFRoaXMgcmVzdWx0cyBpbiBhIHNtYWxsIGppdHRlciBhZnRlciB0aGUgbGFiZWwgZmxvYXRzIG9uIEZpcmVmb3gsIHdoaWNoIHRoZVxuICAvLyB0cmFuc2xhdGVaIGZpeGVzLlxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRpbmZpeC1tYXJnaW4tdG9wIC0gJGluZml4LXBhZGRpbmcgKyAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZSlcbiAgICAgICAgICAgICAgICAgIHNjYWxlKCRmb250LXNjYWxlKTtcbiAgLy8gVGhlIHRyaWNrcyBhYm92ZSB1c2VkIHRvIHNtb290aCBvdXQgdGhlIGFuaW1hdGlvbiBvbiBjaHJvbWUgYW5kIGZpcmVmb3ggYWN0dWFsbHkgbWFrZSB0aGluZ3NcbiAgLy8gd29yc2Ugb24gSUUsIHNvIHdlIGRvbid0IGluY2x1ZGUgdGhlbSBpbiB0aGUgSUUgdmVyc2lvbi5cbiAgJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGU6ICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlICsgMC4wMDAwMSAhZ2xvYmFsO1xufVxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtbGVnYWN5LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAvLyBUaGUgdW5pdC1sZXNzIGxpbmUtaGVpZ2h0IGZyb20gdGhlIGZvbnQgY29uZmlnLlxuICAkbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBpbnB1dCk7XG4gIC8vIFRoZSBhbW91bnQgdG8gc2NhbGUgdGhlIGZvbnQgZm9yIHRoZSBmbG9hdGluZyBsYWJlbCBhbmQgc3Vic2NyaXB0LlxuICAkc3Vic2NyaXB0LWZvbnQtc2NhbGU6IDAuNzU7XG4gIC8vIFRoZSBhbW91bnQgb2Ygc3BhY2UgYmV0d2VlbiB0aGUgdG9wIG9mIHRoZSBsaW5lIGFuZCB0aGUgdG9wIG9mIHRoZSBhY3R1YWwgdGV4dFxuICAvLyAoYXMgYSBmcmFjdGlvbiBvZiB0aGUgZm9udC1zaXplKS5cbiAgJGxpbmUtc3BhY2luZzogKCRsaW5lLWhlaWdodCAtIDEpIC8gMjtcbiAgLy8gVGhlIHBhZGRpbmcgb24gdGhlIGluZml4LiBNb2NrcyBzaG93IGhhbGYgb2YgdGhlIHRleHQgc2l6ZSwgYnV0IHNlZW0gdG8gbWVhc3VyZSBmcm9tIHRoZSBlZGdlXG4gIC8vIG9mIHRoZSB0ZXh0IGl0c2VsZiwgbm90IHRoZSBlZGdlIG9mIHRoZSBsaW5lOyB0aGVyZWZvcmUgd2Ugc3VidHJhY3Qgb2ZmIHRoZSBsaW5lIHNwYWNpbmcuXG4gICRpbmZpeC1wYWRkaW5nOiAwLjVlbSAtICRsaW5lLXNwYWNpbmc7XG4gIC8vIFRoZSBtYXJnaW4gYXBwbGllZCB0byB0aGUgZm9ybS1maWVsZC1pbmZpeCB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgZmxvYXRpbmcgbGFiZWwuXG4gICRpbmZpeC1tYXJnaW4tdG9wOiAxZW0gKiAkbGluZS1oZWlnaHQgKiAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG4gIC8vIFRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBib3R0b20gb2YgdGhlIC5tYXQtZm9ybS1maWVsZC1mbGV4IGFyZWEgYW5kIHRoZSBzdWJzY3JpcHQgd3JhcHBlci5cbiAgLy8gTW9ja3Mgc2hvdyBoYWxmIG9mIHRoZSB0ZXh0IHNpemUsIGJ1dCB0aGlzIG1hcmdpbiBpcyBhcHBsaWVkIHRvIGFuIGVsZW1lbnQgd2l0aCB0aGUgc3Vic2NyaXB0XG4gIC8vIHRleHQgZm9udCBzaXplLCBzbyB3ZSBuZWVkIHRvIGRpdmlkZSBieSB0aGUgc2NhbGUgZmFjdG9yIHRvIG1ha2UgaXQgaGFsZiBvZiB0aGUgb3JpZ2luYWwgdGV4dFxuICAvLyBzaXplLiBXZSBhZ2FpbiBuZWVkIHRvIHN1YnRyYWN0IG9mZiB0aGUgbGluZSBzcGFjaW5nIHNpbmNlIHRoZSBtb2NrcyBtZWFzdXJlIHRvIHRoZSBlZGdlIG9mIHRoZVxuICAvLyB0ZXh0LCBub3QgdGhlICBlZGdlIG9mIHRoZSBsaW5lLlxuICAkc3Vic2NyaXB0LW1hcmdpbi10b3A6IDAuNWVtIC8gJHN1YnNjcmlwdC1mb250LXNjYWxlIC0gKCRsaW5lLXNwYWNpbmcgKiAyKTtcbiAgLy8gVGhlIHBhZGRpbmcgYXBwbGllZCB0byB0aGUgZm9ybS1maWVsZC13cmFwcGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBzdWJzY3JpcHQsIHNpbmNlIGl0J3NcbiAgLy8gYWJzb2x1dGVseSBwb3NpdGlvbmVkLiBUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgdGhlIHN1YnNjcmlwdCdzIG1hcmdpbiBhbmQgbGluZS1oZWlnaHQsIGJ1dCB3ZVxuICAvLyBuZWVkIHRvIG11bHRpcGx5IGJ5IHRoZSBzdWJzY3JpcHQgZm9udCBzY2FsZSBmYWN0b3Igc2luY2UgdGhlIHdyYXBwZXIgaGFzIGEgbGFyZ2VyIGZvbnQgc2l6ZS5cbiAgJHdyYXBwZXItcGFkZGluZy1ib3R0b206ICgkc3Vic2NyaXB0LW1hcmdpbi10b3AgKyAkbGluZS1oZWlnaHQpICogJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICAgICAgcGFkZGluZy1ib3R0b206ICR3cmFwcGVyLXBhZGRpbmctYm90dG9tO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICBwYWRkaW5nOiAkaW5maXgtcGFkZGluZyAwO1xuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IHtcbiAgICAgICYubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCxcbiAgICAgIC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjAgd2lsbCByZWx5IG9uIEF1dG9maWxsTW9uaXRvciBpbnN0ZWFkLlxuICAgICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXG4gICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2VydmVyLXNpZGUgcmVuZGVyZWQgbWF0SW5wdXQgd2l0aCBhIGxhYmVsIGF0dHJpYnV0ZSBidXQgbGFiZWwgbm90IHNob3duXG4gICAgICAvLyAodXNlZCBhcyBhIHB1cmUgQ1NTIHN0YW5kLWluIGZvciBtYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQpLlxuICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICB0b3A6ICRpbmZpeC1tYXJnaW4tdG9wICsgJGluZml4LXBhZGRpbmc7XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSB7XG4gICAgICAvLyBXZSB3YW50IHRoZSB1bmRlcmxpbmUgdG8gc3RhcnQgYXQgdGhlIGVuZCBvZiB0aGUgY29udGVudCBib3gsIG5vdCB0aGUgcGFkZGluZyBib3gsXG4gICAgICAvLyBzbyB3ZSBtb3ZlIGl0IHVwIGJ5IHRoZSBwYWRkaW5nIGFtb3VudC5cbiAgICAgIGJvdHRvbTogJHdyYXBwZXItcGFkZGluZy1ib3R0b207XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyIHtcbiAgICAgIG1hcmdpbi10b3A6ICRzdWJzY3JpcHQtbWFyZ2luLXRvcDtcblxuICAgICAgLy8gV2Ugd2FudCB0aGUgc3Vic2NyaXB0IHRvIHN0YXJ0IGF0IHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgYm94LCBub3QgdGhlIHBhZGRpbmcgYm94LFxuICAgICAgLy8gc28gd2UgbW92ZSBpdCB1cCBieSB0aGUgcGFkZGluZyBhbW91bnQgKGFkanVzdGVkIGZvciB0aGUgc21hbGxlciBmb250IHNpemUpO1xuICAgICAgdG9wOiBjYWxjKDEwMCUgLSAjeyR3cmFwcGVyLXBhZGRpbmctYm90dG9tIC8gJHN1YnNjcmlwdC1mb250LXNjYWxlfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gdHJhbnNsYXRlWiBjYXVzZXMgdGhlIGxhYmVsIHRvIG5vdCBhcHBlYXIgd2hpbGUgcHJpbnRpbmcsIHNvIHdlIG92ZXJyaWRlIGl0IHRvIG5vdFxuICAvLyBhcHBseSB0cmFuc2xhdGVaIHdoaWxlIHByaW50aW5nXG4gIEBtZWRpYSBwcmludCB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IHtcbiAgICAgICYubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IHtcbiAgICAgICAgJi5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLFxuICAgICAgICAubWF0LWlucHV0LXNlcnZlcjpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZy1wcmludChcbiAgICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjAgd2lsbCByZWx5IG9uIEF1dG9maWxsTW9uaXRvciBpbnN0ZWFkLlxuICAgICAgICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJcbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nLXByaW50KFxuICAgICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2VydmVyLXNpZGUgcmVuZGVyZWQgbWF0SW5wdXQgd2l0aCBhIGxhYmVsIGF0dHJpYnV0ZSBidXQgbGFiZWwgbm90IHNob3duXG4gICAgICAgIC8vICh1c2VkIGFzIGEgcHVyZSBDU1Mgc3RhbmQtaW4gZm9yIG1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCkuXG4gICAgICAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXG4gICAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZy1wcmludChcbiAgICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuXG4vLyBUaGVtZSBzdHlsZXMgdGhhdCBvbmx5IGFwcGx5IHRvIHRoZSBvdXRsaW5lIGFwcGVhcmFuY2Ugb2YgdGhlIGZvcm0tZmllbGQuXG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcblxuICAkbGFiZWwtZGlzYWJsZWQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gICRvdXRsaW5lLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjMsIDAuMTIpKTtcbiAgJG91dGxpbmUtY29sb3ItaG92ZXI6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlciwgaWYoJGlzLWRhcmstdGhlbWUsIDEsIDAuODcpKTtcbiAgJG91dGxpbmUtY29sb3ItcHJpbWFyeTogbWF0LWNvbG9yKCRwcmltYXJ5KTtcbiAgJG91dGxpbmUtY29sb3ItYWNjZW50OiBtYXQtY29sb3IoJGFjY2VudCk7XG4gICRvdXRsaW5lLWNvbG9yLXdhcm46IG1hdC1jb2xvcigkd2Fybik7XG4gICRvdXRsaW5lLWNvbG9yLWRpc2FibGVkOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjE1LCAwLjA2KSk7XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICAgICAgY29sb3I6ICRvdXRsaW5lLWNvbG9yO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIHtcbiAgICAgIGNvbG9yOiAkb3V0bGluZS1jb2xvci1ob3ZlcjtcbiAgICB9XG5cbiAgICAmLm1hdC1mb2N1c2VkIHtcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIHtcbiAgICAgICAgY29sb3I6ICRvdXRsaW5lLWNvbG9yLXByaW1hcnk7XG4gICAgICB9XG5cbiAgICAgICYubWF0LWFjY2VudCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayB7XG4gICAgICAgIGNvbG9yOiAkb3V0bGluZS1jb2xvci1hY2NlbnQ7XG4gICAgICB9XG5cbiAgICAgICYubWF0LXdhcm4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sge1xuICAgICAgICBjb2xvcjogJG91dGxpbmUtY29sb3Itd2FybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDbGFzcyByZXBlYXRlZCBzbyB0aGF0IHJ1bGUgaXMgc3BlY2lmaWMgZW5vdWdoIHRvIG92ZXJyaWRlIGZvY3VzZWQgYWNjZW50IGNvbG9yIGNhc2UuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1pbnZhbGlkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQge1xuICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sge1xuICAgICAgICBjb2xvcjogJG91dGxpbmUtY29sb3Itd2FybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIHtcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIGNvbG9yOiAkbGFiZWwtZGlzYWJsZWQtY29sb3I7XG4gICAgICB9XG5cbiAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lIHtcbiAgICAgICAgY29sb3I6ICRvdXRsaW5lLWNvbG9yLWRpc2FibGVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBVc2VkIHRvIG1ha2UgaW5zdGFuY2VzIG9mIHRoZSBfbWF0LWZvcm0tZmllbGQtbGFiZWwtZmxvYXRpbmcgbWl4aW4gbmVnbGlnaWJseSBkaWZmZXJlbnQsXG4vLyBhbmQgcHJldmVudCBHb29nbGUncyBDU1MgT3B0aW1pemVyIGZyb20gY29sbGFwc2luZyB0aGUgZGVjbGFyYXRpb25zLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHNvbWVcbi8vIG9mIHRoZSBzZWxlY3RvcnMgY29udGFpbiBwc2V1ZG8tY2xhc3NlcyBub3QgcmVjb2duaXplZCBpbiBhbGwgYnJvd3NlcnMuIElmIGEgYnJvd3NlciBlbmNvdW50ZXJzXG4vLyBhbiB1bmtub3duIHBzZXVkby1jbGFzcyBpdCB3aWxsIGRpc2NhcmQgdGhlIGVudGlyZSBydWxlIHNldC5cbiRtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWRlZHVwZTogMDtcblxuLy8gQXBwbGllcyBhIGZsb2F0aW5nIGxhYmVsIGFib3ZlIHRoZSBmb3JtIGZpZWxkIGNvbnRyb2wgaXRzZWxmLlxuQG1peGluIF9tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWxhYmVsLWZsb2F0aW5nKCRmb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kaW5maXgtbWFyZ2luLXRvcCAtICRpbmZpeC1wYWRkaW5nICsgJG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZGVkdXBlKVxuICBzY2FsZSgkZm9udC1zY2FsZSk7XG4gIHdpZHRoOiAxMDAlIC8gJGZvbnQtc2NhbGUgKyAkbWF0LWZvcm0tZmllbGQtb3V0bGluZS1kZWR1cGU7XG5cbiAgJG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZGVkdXBlOiAkbWF0LWZvcm0tZmllbGQtb3V0bGluZS1kZWR1cGUgKyAwLjAwMDAxICFnbG9iYWw7XG59XG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1vdXRsaW5lLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAvLyBUaGUgdW5pdC1sZXNzIGxpbmUtaGVpZ2h0IGZyb20gdGhlIGZvbnQgY29uZmlnLlxuICAkbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBpbnB1dCk7XG4gIC8vIFRoZSBhbW91bnQgdG8gc2NhbGUgdGhlIGZvbnQgZm9yIHRoZSBmbG9hdGluZyBsYWJlbCBhbmQgc3Vic2NyaXB0LlxuICAkc3Vic2NyaXB0LWZvbnQtc2NhbGU6IDAuNzU7XG4gIC8vIFRoZSBwYWRkaW5nIGFib3ZlIGFuZCBiZWxvdyB0aGUgaW5maXguXG4gICRpbmZpeC1wYWRkaW5nOiAxZW07XG4gIC8vIFRoZSBtYXJnaW4gYXBwbGllZCB0byB0aGUgZm9ybS1maWVsZC1pbmZpeCB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgZmxvYXRpbmcgbGFiZWwuXG4gICRpbmZpeC1tYXJnaW4tdG9wOiAxZW0gKiAkbGluZS1oZWlnaHQgKiAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG4gIC8vIFRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBib3R0b20gb2YgdGhlIC5tYXQtZm9ybS1maWVsZC1mbGV4IGFyZWEgYW5kIHRoZSBzdWJzY3JpcHQgd3JhcHBlci5cbiAgLy8gTW9ja3Mgc2hvdyBoYWxmIG9mIHRoZSB0ZXh0IHNpemUsIGJ1dCB0aGlzIG1hcmdpbiBpcyBhcHBsaWVkIHRvIGFuIGVsZW1lbnQgd2l0aCB0aGUgc3Vic2NyaXB0XG4gIC8vIHRleHQgZm9udCBzaXplLCBzbyB3ZSBuZWVkIHRvIGRpdmlkZSBieSB0aGUgc2NhbGUgZmFjdG9yIHRvIG1ha2UgaXQgaGFsZiBvZiB0aGUgb3JpZ2luYWwgdGV4dFxuICAvLyBzaXplLlxuICAkc3Vic2NyaXB0LW1hcmdpbi10b3A6IDAuNWVtIC8gJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuICAvLyBUaGUgcGFkZGluZyBhcHBsaWVkIHRvIHRoZSBmb3JtLWZpZWxkLXdyYXBwZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIHN1YnNjcmlwdCwgc2luY2UgaXQnc1xuICAvLyBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQuIFRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgc3Vic2NyaXB0J3MgbWFyZ2luIGFuZCBsaW5lLWhlaWdodCwgYnV0IHdlXG4gIC8vIG5lZWQgdG8gbXVsdGlwbHkgYnkgdGhlIHN1YnNjcmlwdCBmb250IHNjYWxlIGZhY3RvciBzaW5jZSB0aGUgd3JhcHBlciBoYXMgYSBsYXJnZXIgZm9udCBzaXplLlxuICAkd3JhcHBlci1wYWRkaW5nLWJvdHRvbTogKCRzdWJzY3JpcHQtbWFyZ2luLXRvcCArICRsaW5lLWhlaWdodCkgKiAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG4gIC8vIFRoZSBhbW91bnQgd2Ugb2Zmc2V0IHRoZSBsYWJlbCBmcm9tIHRoZSBpbnB1dCB0ZXh0IGluIHRoZSBvdXRsaW5lIGFwcGVhcmFuY2UuXG4gICRvdXRsaW5lLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0OiAtMC4yNWVtO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUge1xuICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICBwYWRkaW5nOiAkaW5maXgtcGFkZGluZyAwICRpbmZpeC1wYWRkaW5nIDA7XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgIHRvcDogJGluZml4LW1hcmdpbi10b3AgKyAkaW5maXgtcGFkZGluZztcbiAgICAgIG1hcmdpbi10b3A6ICRvdXRsaW5lLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0O1xuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IHtcbiAgICAgICYubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCxcbiAgICAgIC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLW91dGxpbmUtbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZyArICRvdXRsaW5lLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0LFxuICAgICAgICAgICAgICAgICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2VydmVyLXNpZGUgcmVuZGVyZWQgbWF0SW5wdXQgd2l0aCBhIGxhYmVsIGF0dHJpYnV0ZSBidXQgbGFiZWwgbm90IHNob3duXG4gICAgICAvLyAodXNlZCBhcyBhIHB1cmUgQ1NTIHN0YW5kLWluIGZvciBtYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQpLlxuICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcgKyAkb3V0bGluZS1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldCxcbiAgICAgICAgICAgICAgICAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5cbi8vIFRoZW1lIHN0eWxlcyB0aGF0IG9ubHkgYXBwbHkgdG8gdGhlIHN0YW5kYXJkIGFwcGVhcmFuY2Ugb2YgdGhlIGZvcm0tZmllbGQuXG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1zdGFuZGFyZC10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcblxuICAkdW5kZXJsaW5lLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjcsIDAuNDIpKTtcblxuICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yO1xuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSB7XG4gICAgICBAaW5jbHVkZSBtYXQtY29udHJvbC1kaXNhYmxlZC11bmRlcmxpbmUoJHVuZGVybGluZS1jb2xvcik7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1zdGFuZGFyZC10eXBvZ3JhcGh5KCRjb25maWcpIHt9XG5cblxuLy8gVGhlbWUgc3R5bGVzIHRoYXQgYXBwbHkgdG8gYWxsIGFwcGVhcmFuY2VzIG9mIHRoZSBmb3JtLWZpZWxkLlxuQG1peGluIG1hdC1mb3JtLWZpZWxkLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcblxuICAvLyBMYWJlbCBjb2xvcnMuIFJlcXVpcmVkIGlzIHVzZWQgZm9yIHRoZSBgKmAgc3RhciBzaG93biBpbiB0aGUgbGFiZWwuXG4gICRsYWJlbC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCwgaWYoJGlzLWRhcmstdGhlbWUsIDAuNywgMC42KSk7XG4gICRmb2N1c2VkLWxhYmVsLWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIHRleHQpO1xuICAkcmVxdWlyZWQtbGFiZWwtY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCB0ZXh0KTtcblxuICAvLyBVbmRlcmxpbmUgY29sb3JzLlxuICAkdW5kZXJsaW5lLWNvbG9yLWJhc2U6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlciwgaWYoJGlzLWRhcmstdGhlbWUsIDEsIDAuODcpKTtcbiAgJHVuZGVybGluZS1jb2xvci1hY2NlbnQ6IG1hdC1jb2xvcigkYWNjZW50LCB0ZXh0KTtcbiAgJHVuZGVybGluZS1jb2xvci13YXJuOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICAkdW5kZXJsaW5lLWZvY3VzZWQtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgdGV4dCk7XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICBjb2xvcjogJGxhYmVsLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1oaW50IHtcbiAgICBjb2xvcjogJGxhYmVsLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgY29sb3I6ICRmb2N1c2VkLWxhYmVsLWNvbG9yO1xuXG4gICAgJi5tYXQtYWNjZW50IHtcbiAgICAgIGNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLWFjY2VudDtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIGNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLXdhcm47XG4gICAgfVxuICB9XG5cbiAgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXIge1xuICAgIGNvbG9yOiAkcmVxdWlyZWQtbGFiZWwtY29sb3I7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtcmlwcGxlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLWJhc2U7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQge1xuICAgIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1mb2N1c2VkLWNvbG9yO1xuXG4gICAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLWFjY2VudDtcbiAgICAgIH1cblxuICAgICAgJi5tYXQtd2FybiB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtY29sb3Itd2FybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpIHtcbiAgICAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVyIHtcbiAgICAgIGNvbG9yOiAkdW5kZXJsaW5lLWZvY3VzZWQtY29sb3I7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXIge1xuICAgICAgY29sb3I6ICR1bmRlcmxpbmUtY29sb3ItYWNjZW50O1xuICAgIH1cblxuICAgICYubWF0LXdhcm4gLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlciB7XG4gICAgICBjb2xvcjogJHVuZGVybGluZS1jb2xvci13YXJuO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN0eWxpbmcgZm9yIHRoZSBlcnJvciBzdGF0ZSBvZiB0aGUgZm9ybSBmaWVsZC4gTm90ZSB0aGF0IHdoaWxlIHRoZSBzYW1lIGNhbiBiZVxuICAvLyBhY2hpZXZlZCB3aXRoIHRoZSBuZy0qIGNsYXNzZXMsIHdlIHVzZSB0aGlzIGFwcHJvYWNoIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IHRoZSBzYW1lXG4gIC8vIGxvZ2ljIGlzIHVzZWQgdG8gc3R5bGUgdGhlIGVycm9yIHN0YXRlIGFuZCB0byBzaG93IHRoZSBlcnJvciBtZXNzYWdlcy5cbiAgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQge1xuICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICBjb2xvcjogJHVuZGVybGluZS1jb2xvci13YXJuO1xuXG4gICAgICAmLm1hdC1hY2NlbnQsXG4gICAgICAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2VyIHtcbiAgICAgICAgY29sb3I6ICR1bmRlcmxpbmUtY29sb3Itd2FybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtcmlwcGxlLFxuICAgIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLXdhcm47XG4gICAgfVxuICB9XG5cbiAgLm1hdC1lcnJvciB7XG4gICAgY29sb3I6ICR1bmRlcmxpbmUtY29sb3Itd2FybjtcbiAgfVxuXG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1zdGFuZGFyZC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1maWxsLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhlbWUoJHRoZW1lKTtcbn1cblxuLy8gVXNlZCB0byBtYWtlIGluc3RhbmNlcyBvZiB0aGUgX21hdC1mb3JtLWZpZWxkLWxhYmVsLWZsb2F0aW5nIG1peGluIG5lZ2xpZ2libHkgZGlmZmVyZW50LFxuLy8gYW5kIHByZXZlbnQgR29vZ2xlJ3MgQ1NTIE9wdGltaXplciBmcm9tIGNvbGxhcHNpbmcgdGhlIGRlY2xhcmF0aW9ucy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBzb21lXG4vLyBvZiB0aGUgc2VsZWN0b3JzIGNvbnRhaW4gcHNldWRvLWNsYXNzZXMgbm90IHJlY29nbml6ZWQgaW4gYWxsIGJyb3dzZXJzLiBJZiBhIGJyb3dzZXIgZW5jb3VudGVyc1xuLy8gYW4gdW5rbm93biBwc2V1ZG8tY2xhc3MgaXQgd2lsbCBkaXNjYXJkIHRoZSBlbnRpcmUgcnVsZSBzZXQuXG4kbWF0LWZvcm0tZmllbGQtZGVkdXBlOiAwO1xuXG4vLyBBcHBsaWVzIGEgZmxvYXRpbmcgbGFiZWwgYWJvdmUgdGhlIGZvcm0gZmllbGQgY29udHJvbCBpdHNlbGYuXG5AbWl4aW4gX21hdC1mb3JtLWZpZWxkLWxhYmVsLWZsb2F0aW5nKCRmb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kaW5maXgtbWFyZ2luLXRvcCAtICRpbmZpeC1wYWRkaW5nICsgJG1hdC1mb3JtLWZpZWxkLWRlZHVwZSlcbiAgICAgICAgICAgICBzY2FsZSgkZm9udC1zY2FsZSk7XG4gIHdpZHRoOiAxMDAlIC8gJGZvbnQtc2NhbGUgKyAkbWF0LWZvcm0tZmllbGQtZGVkdXBlO1xuXG4gICRtYXQtZm9ybS1maWVsZC1kZWR1cGU6ICRtYXQtZm9ybS1maWVsZC1kZWR1cGUgKyAwLjAwMDAxICFnbG9iYWw7XG59XG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLy8gVGhlIHVuaXQtbGVzcyBsaW5lLWhlaWdodCBmcm9tIHRoZSBmb250IGNvbmZpZy5cbiAgJGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgaW5wdXQpO1xuXG4gIC8vIFRoZSBhbW91bnQgdG8gc2NhbGUgdGhlIGZvbnQgZm9yIHRoZSBmbG9hdGluZyBsYWJlbCBhbmQgc3Vic2NyaXB0LlxuICAkc3Vic2NyaXB0LWZvbnQtc2NhbGU6IDAuNzU7XG4gIC8vIFRoZSBhbW91bnQgdG8gc2NhbGUgdGhlIGZvbnQgZm9yIHRoZSBwcmVmaXggYW5kIHN1ZmZpeCBpY29ucy5cbiAgJHByZWZpeC1zdWZmaXgtaWNvbi1mb250LXNjYWxlOiAxLjU7XG5cbiAgLy8gVGhlIHBhZGRpbmcgb24gdGhlIGluZml4LiBNb2NrcyBzaG93IGhhbGYgb2YgdGhlIHRleHQgc2l6ZS5cbiAgJGluZml4LXBhZGRpbmc6IDAuNWVtO1xuICAvLyBUaGUgbWFyZ2luIGFwcGxpZWQgdG8gdGhlIGZvcm0tZmllbGQtaW5maXggdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsLlxuICAkaW5maXgtbWFyZ2luLXRvcDogMWVtICogJGxpbmUtaGVpZ2h0ICogJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuICAvLyBGb250IHNpemUgdG8gdXNlIGZvciB0aGUgbGFiZWwgYW5kIHN1YnNjcmlwdCB0ZXh0LlxuICAkc3Vic2NyaXB0LWZvbnQtc2l6ZTogJHN1YnNjcmlwdC1mb250LXNjYWxlICogMTAwJTtcbiAgLy8gRm9udCBzaXplIHRvIHVzZSBmb3IgdGhlIGZvciB0aGUgcHJlZml4IGFuZCBzdWZmaXggaWNvbnMuXG4gICRwcmVmaXgtc3VmZml4LWljb24tZm9udC1zaXplOiAkcHJlZml4LXN1ZmZpeC1pY29uLWZvbnQtc2NhbGUgKiAxMDAlO1xuICAvLyBUaGUgc3BhY2UgYmV0d2VlbiB0aGUgYm90dG9tIG9mIHRoZSAubWF0LWZvcm0tZmllbGQtZmxleCBhcmVhIGFuZCB0aGUgc3Vic2NyaXB0IHdyYXBwZXIuXG4gIC8vIE1vY2tzIHNob3cgaGFsZiBvZiB0aGUgdGV4dCBzaXplLCBidXQgdGhpcyBtYXJnaW4gaXMgYXBwbGllZCB0byBhbiBlbGVtZW50IHdpdGggdGhlIHN1YnNjcmlwdFxuICAvLyB0ZXh0IGZvbnQgc2l6ZSwgc28gd2UgbmVlZCB0byBkaXZpZGUgYnkgdGhlIHNjYWxlIGZhY3RvciB0byBtYWtlIGl0IGhhbGYgb2YgdGhlIG9yaWdpbmFsIHRleHRcbiAgLy8gc2l6ZS5cbiAgJHN1YnNjcmlwdC1tYXJnaW4tdG9wOiAwLjVlbSAvICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcbiAgLy8gVGhlIHBhZGRpbmcgYXBwbGllZCB0byB0aGUgZm9ybS1maWVsZC13cmFwcGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBzdWJzY3JpcHQsIHNpbmNlIGl0J3NcbiAgLy8gYWJzb2x1dGVseSBwb3NpdGlvbmVkLiBUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgdGhlIHN1YnNjcmlwdCdzIG1hcmdpbiBhbmQgbGluZS1oZWlnaHQsIGJ1dCB3ZVxuICAvLyBuZWVkIHRvIG11bHRpcGx5IGJ5IHRoZSBzdWJzY3JpcHQgZm9udCBzY2FsZSBmYWN0b3Igc2luY2UgdGhlIHdyYXBwZXIgaGFzIGEgbGFyZ2VyIGZvbnQgc2l6ZS5cbiAgJHdyYXBwZXItcGFkZGluZy1ib3R0b206ICgkc3Vic2NyaXB0LW1hcmdpbi10b3AgKyAkbGluZS1oZWlnaHQpICogJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuXG4gIC5tYXQtZm9ybS1maWVsZCB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGlucHV0KTtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogJHdyYXBwZXItcGFkZGluZy1ib3R0b207XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtcHJlZml4LFxuICAubWF0LWZvcm0tZmllbGQtc3VmZml4IHtcbiAgICAvLyBBbGxvdyBpY29ucyBpbiBhIHByZWZpeCBvciBzdWZmaXggdG8gYWRhcHQgdG8gdGhlIGNvcnJlY3Qgc2l6ZS5cbiAgICAubWF0LWljb24ge1xuICAgICAgZm9udC1zaXplOiAkcHJlZml4LXN1ZmZpeC1pY29uLWZvbnQtc2l6ZTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQ7XG4gICAgfVxuXG4gICAgLy8gQWxsb3cgaWNvbiBidXR0b25zIGluIGEgcHJlZml4IG9yIHN1ZmZpeCB0byBhZGFwdCB0byB0aGUgY29ycmVjdCBzaXplLlxuICAgIC5tYXQtaWNvbi1idXR0b24ge1xuICAgICAgaGVpZ2h0OiAkcHJlZml4LXN1ZmZpeC1pY29uLWZvbnQtc2NhbGUgKiAxZW07XG4gICAgICB3aWR0aDogJHByZWZpeC1zdWZmaXgtaWNvbi1mb250LXNjYWxlICogMWVtO1xuXG4gICAgICAubWF0LWljb24ge1xuICAgICAgICBoZWlnaHQ6ICRsaW5lLWhlaWdodCAqIDFlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgIHBhZGRpbmc6ICRpbmZpeC1wYWRkaW5nIDA7XG4gICAgLy8gVGhyb3dzIG9mZiB0aGUgYmFzZWxpbmUgaWYgd2UgZG8gaXQgYXMgYSByZWFsIG1hcmdpbiwgc28gd2UgZG8gaXQgYXMgYSBib3JkZXIgaW5zdGVhZC5cbiAgICBib3JkZXItdG9wOiAkaW5maXgtbWFyZ2luLXRvcCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQge1xuICAgICYubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCxcbiAgICAubWF0LWlucHV0LXNlcnZlcjpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICB9XG5cbiAgICAvLyBTZXJ2ZXItc2lkZSByZW5kZXJlZCBtYXRJbnB1dCB3aXRoIGEgbGFiZWwgYXR0cmlidXRlIGJ1dCBsYWJlbCBub3Qgc2hvd25cbiAgICAvLyAodXNlZCBhcyBhIHB1cmUgQ1NTIHN0YW5kLWluIGZvciBtYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQpLlxuICAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXG4gICAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciB7XG4gICAgdG9wOiAtJGluZml4LW1hcmdpbi10b3A7XG4gICAgcGFkZGluZy10b3A6ICRpbmZpeC1tYXJnaW4tdG9wO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICB0b3A6ICRpbmZpeC1tYXJnaW4tdG9wICsgJGluZml4LXBhZGRpbmc7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIHtcbiAgICAvLyBXZSB3YW50IHRoZSB1bmRlcmxpbmUgdG8gc3RhcnQgYXQgdGhlIGVuZCBvZiB0aGUgY29udGVudCBib3gsIG5vdCB0aGUgcGFkZGluZyBib3gsXG4gICAgLy8gc28gd2UgbW92ZSBpdCB1cCBieSB0aGUgcGFkZGluZyBhbW91bnQuXG4gICAgYm90dG9tOiAkd3JhcHBlci1wYWRkaW5nLWJvdHRvbTtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlciB7XG4gICAgZm9udC1zaXplOiAkc3Vic2NyaXB0LWZvbnQtc2l6ZTtcbiAgICBtYXJnaW4tdG9wOiAkc3Vic2NyaXB0LW1hcmdpbi10b3A7XG5cbiAgICAvLyBXZSB3YW50IHRoZSBzdWJzY3JpcHQgdG8gc3RhcnQgYXQgdGhlIGVuZCBvZiB0aGUgY29udGVudCBib3gsIG5vdCB0aGUgcGFkZGluZyBib3gsXG4gICAgLy8gc28gd2UgbW92ZSBpdCB1cCBieSB0aGUgcGFkZGluZyBhbW91bnQgKGFkanVzdGVkIGZvciB0aGUgc21hbGxlciBmb250IHNpemUpO1xuICAgIHRvcDogY2FsYygxMDAlIC0gI3skd3JhcHBlci1wYWRkaW5nLWJvdHRvbSAvICRzdWJzY3JpcHQtZm9udC1zY2FsZX0pO1xuICB9XG5cbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtbGVnYWN5LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLXN0YW5kYXJkLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLWZpbGwtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtb3V0bGluZS10eXBvZ3JhcGh5KCRjb25maWcpO1xufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtdHJlZS10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LXRyZWUge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2NhcmQnKTtcbiAgfVxuXG4gIC5tYXQtdHJlZS1ub2RlLFxuICAubWF0LW5lc3RlZC10cmVlLW5vZGUge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtdHJlZS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC10cmVlIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC10cmVlLW5vZGUsXG4gIC5tYXQtbmVzdGVkLXRyZWUtbm9kZSB7XG4gICAgZm9udC13ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTEpO1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpO1xuICB9XG59XG5cblxuXG4vLyBJbmNsdWRlcyBhbGwgb2YgdGhlIHR5cG9ncmFwaGljIHN0eWxlcy5cbkBtaXhpbiBhbmd1bGFyLW1hdGVyaWFsLXR5cG9ncmFwaHkoJGNvbmZpZzogbnVsbCkge1xuICBAaWYgJGNvbmZpZyA9PSBudWxsIHtcbiAgICAkY29uZmlnOiBtYXQtdHlwb2dyYXBoeS1jb25maWcoKTtcbiAgfVxuXG4gIEBpbmNsdWRlIG1hdC1iYWRnZS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtYmFzZS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtYXV0b2NvbXBsZXRlLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1ib3R0b20tc2hlZXQtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWJ1dHRvbi10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtYnV0dG9uLXRvZ2dsZS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtY2FyZC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtY2hlY2tib3gtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWNoaXBzLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC10YWJsZS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZGF0ZXBpY2tlci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZGlhbG9nLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1leHBhbnNpb24tcGFuZWwtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWdyaWQtbGlzdC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtaWNvbi10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtaW5wdXQtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LW1lbnUtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXBhZ2luYXRvci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtcHJvZ3Jlc3MtYmFyLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1wcm9ncmVzcy1zcGlubmVyLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1yYWRpby10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtc2VsZWN0LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1zaWRlbmF2LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1zbGlkZS10b2dnbGUtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXNsaWRlci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtc3RlcHBlci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtc29ydC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtdGFicy10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtdG9vbGJhci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtdG9vbHRpcC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtbGlzdC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtb3B0aW9uLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1vcHRncm91cC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtc25hY2stYmFyLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC10cmVlLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG59XG5cblxuLy8gTWl4aW4gdGhhdCByZW5kZXJzIGFsbCBvZiB0aGUgY29yZSBzdHlsZXMgdGhhdCBhcmUgbm90IHRoZW1lLWRlcGVuZGVudC5cbkBtaXhpbiBtYXQtY29yZSgkdHlwb2dyYXBoeS1jb25maWc6IG51bGwpIHtcbiAgQGluY2x1ZGUgYW5ndWxhci1tYXRlcmlhbC10eXBvZ3JhcGh5KCR0eXBvZ3JhcGh5LWNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1yaXBwbGUoKTtcbiAgQGluY2x1ZGUgY2RrLWExMXkoKTtcbiAgQGluY2x1ZGUgY2RrLW92ZXJsYXkoKTtcbiAgQGluY2x1ZGUgY2RrLXRleHQtZmllbGQoKTtcbn1cblxuLy8gTWl4aW4gdGhhdCByZW5kZXJzIGFsbCBvZiB0aGUgY29yZSBzdHlsZXMgdGhhdCBkZXBlbmQgb24gdGhlIHRoZW1lLlxuQG1peGluIG1hdC1jb3JlLXRoZW1lKCR0aGVtZSkge1xuICBAaW5jbHVkZSBtYXQtcmlwcGxlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1vcHRpb24tdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LW9wdGdyb3VwLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1wc2V1ZG8tY2hlY2tib3gtdGhlbWUoJHRoZW1lKTtcblxuICAvLyBQcm92aWRlcyBleHRlcm5hbCBDU1MgY2xhc3NlcyBmb3IgZWFjaCBlbGV2YXRpb24gdmFsdWUuIEVhY2ggQ1NTIGNsYXNzIGlzIGZvcm1hdHRlZCBhc1xuICAvLyBgbWF0LWVsZXZhdGlvbi16JHpWYWx1ZWAgd2hlcmUgYCR6VmFsdWVgIGNvcnJlc3BvbmRzIHRvIHRoZSB6LXNwYWNlIHRvIHdoaWNoIHRoZSBlbGVtZW50IGlzXG4gIC8vIGVsZXZhdGVkLlxuICBAZm9yICR6VmFsdWUgZnJvbSAwIHRocm91Z2ggMjQge1xuICAgIC4jeyRfbWF0LWVsZXZhdGlvbi1wcmVmaXh9I3skelZhbHVlfSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigkelZhbHVlLCAkdGhlbWUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdyYXBwZXIgZWxlbWVudCB0aGF0IHByb3ZpZGVzIHRoZSB0aGVtZSBiYWNrZ3JvdW5kIHdoZW4gdGhlIHVzZXIncyBjb250ZW50IGlzbid0XG4gIC8vIGluc2lkZSBvZiBhIGBtYXQtc2lkZW5hdi1jb250YWluZXJgLiBOb3RlIHRoYXQgd2UgbmVlZCB0byBleGNsdWRlIHRoZSBhbXBlcnNhbmRcbiAgLy8gc2VsZWN0b3IgaW4gY2FzZSB0aGUgbWl4aW4gaXMgaW5jbHVkZWQgYXQgdGhlIHRvcCBsZXZlbC5cbiAgLm1hdC1hcHAtYmFja2dyb3VuZCN7aWYoJiwgJywgJi5tYXQtYXBwLWJhY2tncm91bmQnLCAnJyl9IHtcbiAgICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAgICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGJhY2tncm91bmQpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG5cbiAgLy8gTWFya2VyIHRoYXQgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgdXNlciBoYXMgYWRkZWQgYSB0aGVtZSB0byB0aGVpciBwYWdlLlxuICBAYXQtcm9vdCB7XG4gICAgLm1hdC10aGVtZS1sb2FkZWQtbWFya2VyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtZGl2aWRlci10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWRpdmlkZXIge1xuICAgIGJvcmRlci10b3AtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cblxuICAubWF0LWRpdmlkZXItdmVydGljYWwge1xuICAgIGJvcmRlci1yaWdodC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxufVxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vLyBDcmVhdGUgYSB0aGVtZS5cbkBtaXhpbiBhbmd1bGFyLW1hdGVyaWFsLXRoZW1lKCR0aGVtZSkge1xuICBAaW5jbHVkZSBtYXQtY29yZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtYXV0b2NvbXBsZXRlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1iYWRnZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtYm90dG9tLXNoZWV0LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1idXR0b24tdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWJ1dHRvbi10b2dnbGUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWNhcmQtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWNoZWNrYm94LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1jaGlwcy10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtdGFibGUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWRhdGVwaWNrZXItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWRpYWxvZy10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZGl2aWRlci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZXhwYW5zaW9uLXBhbmVsLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1ncmlkLWxpc3QtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWljb24tdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWlucHV0LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1saXN0LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1tZW51LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1wYWdpbmF0b3ItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXByb2dyZXNzLWJhci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtcmFkaW8tdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXNlbGVjdC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtc2lkZW5hdi10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtc2xpZGUtdG9nZ2xlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1zbGlkZXItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXN0ZXBwZXItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXNvcnQtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXRhYnMtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXRvb2xiYXItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXRvb2x0aXAtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXRyZWUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXNuYWNrLWJhci10aGVtZSgkdGhlbWUpO1xufVxuIiwiQGltcG9ydCBcIm1peGluc1wiO1xuQGltcG9ydCBcInZhcnNcIjtcbkBpbXBvcnQgXCJ+QGFuZ3VsYXIvbWF0ZXJpYWwvdGhlbWluZ1wiO1xuXG4ubWNrIHtcbiAgICAmLWluaGVyaXQge1xuICAgICAgICAmLWZvbnQge1xuICAgICAgICAgICAgLy8gcGF0Y2hlcyBnbG9iYWwgZm9udCBzdHlsaW5nIGRvbmUgYnkgbGVnYWN5IHVpXG4gICAgICAgICAgICBmb250OiBpbmhlcml0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1jb250ZW50IHtcbiAgICAgICAgJi1leHBhbmQge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG5cbiAgICAgICAgICAgICYtd2lkdGgge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLWhlaWdodCB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi13aXRoLWZvb3Rlci1oZWlnaHQge1xuICAgICAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNThweCk7XG4gICAgICAgIH1cblxuICAgICAgICAmLWZ1bGwtaGVpZ2h0IHtcbiAgICAgICAgICAgIGhlaWdodDogMTAwdmg7XG4gICAgICAgIH1cblxuICAgICAgICAmLXBhZ2Uge1xuICAgICAgICAgICAgQGV4dGVuZCAubWNrLWNvbnRlbnQtZXhwYW5kO1xuICAgICAgICAgICAgYmFja2dyb3VuZDogJHBhZ2UtYmFja2dyb3VuZC1jb2xvcjtcblxuICAgICAgICAgICAgJi1jb250YWluZXIge1xuICAgICAgICAgICAgICAgIEBleHRlbmQgLm1jay1jb250ZW50LWZ1bGwtaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1ib2R5IHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWdyb3VwIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHBhZ2UtcGFkZGluZztcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA3NTlweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtc2hhZG93IHtcbiAgICAgICAgQGluY2x1ZGUgbWF0LWVsZXZhdGlvbigxKTtcbiAgICB9XG5cbiAgICAmLWZsZXgtMSB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgfVxuXG4gICAgJi1yb3cge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuXG4gICAgICAgICYubWNrLWNlbnRlciB7XG4gICAgICAgICAgICAmLWp1c3RpZnkge1xuICAgICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLWFsaWduIHtcbiAgICAgICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAZXh0ZW5kIC5tY2stY2VudGVyLWp1c3RpZnk7XG4gICAgICAgICAgICBAZXh0ZW5kIC5tY2stY2VudGVyLWFsaWduO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5tY2stc3RyZXRjaCB7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICAgICAgfVxuXG4gICAgICAgICYtZmxvdyB7XG4gICAgICAgICAgICBAZXh0ZW5kIC5tY2stcm93O1xuICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5tY2stc2Nyb2xsIHtcbiAgICAgICAgICAgIG92ZXJmbG93LXg6IHNjcm9sbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtY29sdW1uIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuICAgICAgICAmLm1jay1jZW50ZXIge1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5tY2stc3BhY2UtYmV0d2VlbiB7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIH1cblxuICAgICAgICAmLm1jay1zdHJldGNoIHtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5tY2stc2Nyb2xsIHtcbiAgICAgICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgICAgICAgICAgIG92ZXJmbG93LXk6IG92ZXJsYXk7XG4gICAgICAgIH1cblxuICAgICAgICAmLm1jay1mbGV4LWVuZCB7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1vdmVyZmxvdyB7XG4gICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgIH1cblxuICAgICYtYm9yZGVyZWQsICYtaW5wdXQge1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xuXG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjNDY0NjQ2O1xuICAgICAgICB9XG5cbiAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgICBib3JkZXItY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICB9XG5cbiAgICAgICAgJltkaXNhYmxlZD1cInRydWVcIl0ge1xuICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgICAgICBib3JkZXItY29sb3I6ICNmMGYwZjA7XG4gICAgICAgICAgICBjb2xvcjogI2NjYztcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtZGF0ZS1kaXNwbGF5IHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiA0M3B4O1xuICAgICAgICBwYWRkaW5nOiAkc3BhY2luZy1zbWFsbCAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICB0cmFuc2l0aW9uOiBib3JkZXIgMjAwbXMsIGJveC1zaGFkb3cgMjAwbXM7XG4gICAgfVxuXG4gICAgJi1mb3JtLWlucHV0IHtcblxuICAgICAgICAubWF0LWZvcm0tZmllbGQtd3JhcHBlciB7XG4gICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1mb3JtLWZpZWxkIHtcbiAgICAgICAgICAgIG1pbi13aWR0aDogYXV0byAhaW1wb3J0YW50O1xuXG4gICAgICAgICAgICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgIHBhZGRpbmctdG9wOiAwLjdyZW0gIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogJHNwYWNpbmcteHhzbWFsbCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gICAgICAgICAgICAgICAgbWluLWhlaWdodDogMi43cmVtO1xuICAgICAgICAgICAgICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLm1jay1jZW50ZXItc3VmZml4IHtcbiAgICAgICAgICAgICAgICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgICAgICAgICAgICAgICBAZXh0ZW5kIC5tY2stcm93O1xuICAgICAgICAgICAgICAgICAgICBAZXh0ZW5kIC5tY2stY2VudGVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5tY2stc2VsZWN0LWRyb3Bkb3duLWJ1dHRvbiB7XG4gICAgICAgICAgICAgICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMnB4O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1mbGV4IHtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAycmVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWluLWhlaWdodDogMnJlbTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1mb3JtLWZpZWxkLm1hdC1zIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgbWF0LXNlbGVjdCB7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAwLjJyZW07XG5cbiAgICAgICAgICAgIC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYgLm1hdC1zZWxlY3QtdmFsdWUgPiAubWF0LXNlbGVjdC12YWx1ZS10ZXh0ID4gc3BhbiB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICAgICAgICAgIC8vIGNvbG9yOiAjMzMzMzMzICFpbXBvcnRhbnQ7IC8vUi0tLSBibG9ja3MgZGlzYWJsZWQgc3RhdGUgY29sb3JcbiAgICAgICAgICAgICAgICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCxcbiAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsXG4gICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICRib3JkZXI7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5hdmFpbGFibGUge1xuICAgICAgICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICAgICAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LFxuICAgICAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsXG4gICAgICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzNhYTUzNztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAuYm9va2VkIHtcbiAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lIHtcbiAgICAgICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCxcbiAgICAgICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLFxuICAgICAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNlMTJlNDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sge1xuICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Lm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsXG4gICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLFxuICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgICAgICAgICBib3JkZXItd2lkdGg6IDFweDtcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgPiBtYXQtZm9ybS1maWVsZC5tY2stZXJyb3Ige1xuICAgICAgICAgICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgIC8vIGxlc3MganVtcGluZyBmb3IgZXJyb3IgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICAgICAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LFxuICAgICAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsXG4gICAgICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogJGVycm9yLWNvbG9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG1jay1jbG9zZS1pY29uLm1hdC1jaGlwLXJlbW92ZS5tYXQtY2hpcC1yZW1vdmUge1xuICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgbWF0LWxhYmVsIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgIH1cblxuICAgICAgICBtYXQtcmFkaW8tYnV0dG9uIHtcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHNwYWNpbmctc21hbGw7XG4gICAgICAgIH1cblxuICAgICAgICAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnQge1xuICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIH1cblxuICAgICAgICAubWF0LXJhZGlvIHtcbiAgICAgICAgICAgICYtb3V0ZXItY2lyY2xlIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICRwcmltYXJ5ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAxcHggIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi1pbm5lci1jaXJjbGUge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBtYXQtcmFkaW8tZ3JvdXAge1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG5cbiAgICAgICAgICAgICYgPiBtYXQtcmFkaW8tYnV0dG9uOmxhc3QtY2hpbGQge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtY29udGFpbmVyIHtcbiAgICAgICAgICAgID4gLm1jay1mb3JtLWlucHV0LCA+IG1jay1zZWxlY3Qge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nLXh4c21hbGw7XG5cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nLW1lZGl1bS1sYXJnZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tY2stcmFkaW8tc2VsZWN0IHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy1zbWFsbDtcblxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogJHNwYWNpbmctbWVkaXVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwIHtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDEuNXJlbTtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjaGlwLWNvbG9yO1xuICAgICAgICAgICAgcGFkZGluZy10b3A6ICRzcGFjaW5nLXNtYWxsZXN0O1xuICAgICAgICAgICAgcGFkZGluZy1ib3R0b206ICRzcGFjaW5nLXNtYWxsZXN0O1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICAgICAgQGluY2x1ZGUgY2hpcC1sYWJlbDtcbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbWF0LWNoZWNrYm94IHtcbiAgICAgICAgICAgICYubWF0LWNoZWNrYm94Lm1hdC1jaGVja2JveCB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgY2hlY2tib3gtbGFiZWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRpdi5tYXQtY2hlY2tib3gtYmFja2dyb3VuZC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnk7XG5cbiAgICAgICAgICAgICAgICAmLm1jay1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtZGlzYWJsZWQge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYubWNrLWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1kaXNhYmxlZCB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgY2hlY2tib3gtbGFiZWw7XG4gICAgICAgICAgICAgICAgY29sb3I6ICRib3JkZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWJvcmRlcmxlc3Mge1xuICAgICAgICBib3JkZXI6IG5vbmU7XG5cbiAgICAgICAgJjpob3ZlciwgJjpmb2N1cywgJjpkaXNhYmxlZCB7XG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXNlbGVjdC1wYW5lbCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdW5zZXQgIWltcG9ydGFudDtcbiAgICAgICAgbWFyZ2luLXRvcDogMzVweCAhaW1wb3J0YW50O1xuICAgICAgICBtYXJnaW4tbGVmdDogNXB4O1xuXG4gICAgICAgIG1hdC1vcHRpb24ge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMDtcblxuICAgICAgICAgICAgJi5tYXQtb3B0aW9uLXRleHQge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYubWNrLW1hcmdpbi10b3Age1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogJHNwYWNpbmctbWVkaXVtICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWNoZWNrYm94LXBhbmVsIHtcbiAgICAgICAgJi5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsLm1hdC1hdXRvY29tcGxldGUtcGFuZWwge1xuICAgICAgICAgICAgdG9wOiAtMTBweDtcbiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDI3OHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgbWF0LW9wdGlvbi5tY2stdHJ1bmNhdGVkIHtcbiAgICAgICAgICAgICYgLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIG1heC1saW5lcygyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1vcHRpb24ge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICAgICAgICAgICAgaGVpZ2h0OiB1bnNldDtcbiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDM2cHg7XG5cbiAgICAgICAgICAgICYgLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICAgICAgICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYgLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGNoZWNrYm94LWxhYmVsO1xuICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYubWNrLWNoZWNrYm94LWdyb3VwLWhlYWRlciB7XG4gICAgICAgICAgICAgICAgJiAubWF0LWNoZWNrYm94LWxhYmVsLm1hdC1jaGVja2JveC1sYWJlbCB7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLm1jay1jaGVja2JveC1ncm91cC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6ICRzcGFjaW5nLWxhcmdlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtYXQtY2hlY2tib3gge1xuICAgICAgICAgICAgICAgIGxhYmVsLm1hdC1jaGVja2JveC1sYXlvdXQge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMnB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMnB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZGl2Lm1hdC1jaGVja2JveC1mcmFtZS5tYXQtY2hlY2tib3gtZnJhbWUge1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBtY2stY2hlY2tib3gtYm9yZGVyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICYubWF0LWNoZWNrYm94LWNoZWNrZWQge1xuICAgICAgICAgICAgICAgICAgICBkaXYubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmLm1jay1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtZGlzYWJsZWQge1xuICAgICAgICAgICAgICAgICAgICBkaXYubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmLm1jay1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtZGlzYWJsZWQge1xuICAgICAgICAgICAgICAgICAgICAmIC5tYXQtY2hlY2tib3gtbGFiZWwubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGNoZWNrYm94LWxhYmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICRib3JkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXIge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJHNwYWNpbmctc21hbGwtbWVkaXVtO1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICRzcGFjaW5nLXNtYWxsLW1lZGl1bTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXNlbGVjdC1vcHRpb24ge1xuICAgICAgICAmLXNlbGVjdGVkIHtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICAgICAgICAgIGNvbG9yOiBibGFjaztcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG5cbiAgICAgICAgICAgIC5tY2stc3BhY2VyLWNvbnRlbnQge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHNwYWNpbmcteHNtYWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi11bnNlbGVjdGVkIHtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcblxuICAgICAgICAgICAgJi5tY2staWdub3JlLWRpc2FibGVkIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tY2stc3BhY2VyLWNvbnRlbnQge1xuICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6ICRzcGFjaW5nLXhzbWFsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtYnV0dG9uIHtcbiAgICAgICAgJi5tYXQtYnV0dG9uLm1hdC1idXR0b24sICYubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiB7XG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICAgICAgQGV4dGVuZCAubWNrLWNvbHVtbjtcbiAgICAgICAgICAgIEBleHRlbmQgLm1jay1jZW50ZXI7XG4gICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcblxuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbGVzdDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbGVzdDtcbiAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcblxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5tY2stc2hvcnQge1xuICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDgzcHg7XG5cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiAxNTVweDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBzb21lIGNhc2VzIGJ1dHRvbnMgaW4gZGVza3RvcCBhcmUgNDAgdnMgNDhweFxuICAgICAgICAgICAgICAgICYubWNrLXNob3J0LWhlaWdodCB7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogNDBweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5tY2stc3F1YXJlIHtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDMycHg7XG4gICAgICAgICAgICAgICAgbWluLXdpZHRoOiAzMnB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7XG5cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiA0MHB4O1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgICAgIEBleHRlbmQgLm1jay1idXR0b247XG5cbiAgICAgICAgJi5tYXQtYnV0dG9uLm1hdC1idXR0b24ge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnk7XG5cbiAgICAgICAgICAgICZbZGlzYWJsZWRdLCAmLmRpc2FibGVkIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzc1NzU3NTtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuXG4gICAgICAgICAgICAgICAgJiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICM3NTc1NzU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtc2Vjb25kYXJ5LWJ1dHRvbiB7XG4gICAgICAgIEBleHRlbmQgLm1jay1idXR0b247XG5cbiAgICAgICAgJi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIG1jay10aGluLWJ1dHRvbi1ib3JkZXI7XG4gICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjMjI1MUZGO1xuICAgICAgICAgICAgY29sb3I6ICMyMjUxRkY7XG4gICAgICAgICAgICAmW2Rpc2FibGVkXSwgJi5kaXNhYmxlZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgICAgICAgICAgICAgY29sb3I6ICMzMzMzMzM7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYubWF0LWJ1dHRvbi5tYXQtYnV0dG9uIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuXG4gICAgICAgICAgICAmID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkY2hpcC1jb2xvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtd2FybmluZy1idXR0b24ge1xuICAgICAgICBAZXh0ZW5kIC5tY2stYnV0dG9uO1xuXG4gICAgICAgICYubWF0LWJ1dHRvbi5tYXQtYnV0dG9uIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci1icmFuZC15ZWxsb3c7XG5cbiAgICAgICAgICAgICYgPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6IGJsYWNrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1zdHJva2VkLWJ1dHRvbiB7XG4gICAgICAgIEBleHRlbmQgLm1jay1idXR0b247XG5cbiAgICAgICAgJi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIG1jay1idXR0b24tYm9yZGVyO1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctbWVkaXVtLWxhcmdlO1xuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctbWVkaXVtLWxhcmdlO1xuXG4gICAgICAgICAgICAmLm1jay1zaG9ydCB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgICAgICAgICAgIG1pbi13aWR0aDogODNweDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsZXN0O1xuICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsZXN0O1xuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMTU1cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBwcmltYXJ5IGNvbG9yc1xuICAgICAgICAgICAgJi5tY2stcHJpbWFyeSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgICAgICAgICBjb2xvcjogJHByaW1hcnk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYubWNrLXRoaW4tYm9yZGVyLWxpZ2h0IHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMXB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICAgICAgY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi10b2dnbGUtYnV0dG9uIHtcbiAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgICAgICBib3JkZXItY29sb3I6ICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgICAgICBtaW4td2lkdGg6IDU5cHg7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgIG1pbi13aWR0aDogMTMycHg7XG4gICAgICAgICAgICBwYWRkaW5nLXRvcDogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgJi1zZWxlY3RlZCB7XG4gICAgICAgICAgICBjb2xvcjogJHByaW1hcnk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWRhdGUtcGlja2VyIHtcbiAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgICAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7XG5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAyM3JlbTtcbiAgICAgICAgfVxuXG4gICAgICAgICYgPiAuaGVhZGVyLmhlYWRlciB7XG4gICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgICAgIGNvbG9yOiAkZm9ybS1sYWJlbDtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6ICRzcGFjaW5nLXNtYWxsLW1lZGl1bTtcblxuICAgICAgICAgICAgJiA+IC5hcnJvdy5hcnJvdyB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDIuMzc1cmVtO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMnJlbTtcblxuICAgICAgICAgICAgICAgICYgPiAuaWNvbi5pY29uIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDFyZW07XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMXJlbTtcbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICYgPiAubmV4dC5uZXh0IHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdsaWJzL3VpL3NyYy9saWIvaWNvbnMvYXJyb3ctZm9yd2FyZC5zdmcnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmID4gLnByZXZpb3VzLnByZXZpb3VzIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdsaWJzL3VpL3NyYy9saWIvaWNvbnMvYXJyb3ctYmFja3dhcmQuc3ZnJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgfVxuXG4gICAgICAgICYgPiAubW9udGgge1xuICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgIH1cblxuICAgICAgICAmID4gLndlZWsge1xuICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICBjb2xvcjogJHNlY29uZGFyeS1sYWJlbDtcbiAgICAgICAgfVxuXG4gICAgICAgICYgPiAuYm9keSB7XG4gICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuXG4gICAgICAgICAgICAmID4gZGl2ID4gZGl2LmRhdGUge1xuICAgICAgICAgICAgICAgICYgPiAuZG90IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmLmRpc2FibGVkIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAkc2Vjb25kYXJ5LWxhYmVsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICYuYWN0aXZlIHtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJi5ub24tbW9udGgge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJHNlY29uZGFyeS1sYWJlbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXNwYWNlci1jb250ZW50IHtcbiAgICAgICAgJi1jb2xsYXBzZS10YWJsZXQge1xuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKHRhYmxldCkge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWV4cGFuZC1tb2JpbGUge1xuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWRpdmlkZXIge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtZXhwYW5zaW9uLXBhbmVsIHtcbiAgICAgICAgJi5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwge1xuICAgICAgICAgICAgQGluY2x1ZGUgbWF0LWVsZXZhdGlvbigwKTtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHNlbGVjdGVkLW9wdGlvbjtcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkc2VsZWN0ZWQtb3B0aW9uO1xuXG4gICAgICAgICAgICAmLm1jay1leHBhbmRlZCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY29sb3I7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcblxuICAgICAgICAgICAgICAgICYgLm1jay1jb2xsYXBzZS1pY29uIHtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oMjRweCwgJ2NoZXZyb24tY2xvc2Uuc3ZnJyk7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDQ4cHgsICdjaGV2cm9uLWNsb3NlLWxhcmdlLnN2ZycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWF0LWV4cGFuc2lvbi1wYW5lbC1ib2R5IHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMDtcblxuICAgICAgICAgICAgICAgICYgPiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ge1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBib2R5LXRpbnk7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctc21hbGw7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiBibGFjaztcbiAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJiBtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciB7XG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctc21hbGw7XG5cbiAgICAgICAgICAgICYgPiBzcGFuLm1hdC1jb250ZW50IHtcbiAgICAgICAgICAgICAgICAvLyBjZW50ZXIgdGV4dCBhbmQgaWNvbnNcbiAgICAgICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJiBtYXQtcGFuZWwtdGl0bGUge1xuICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICB9XG5cbiAgICAgICAgLm1jay1jb2xsYXBzZS1pY29uIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICdjaGV2cm9uLW9wZW4uc3ZnJyk7XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oNDhweCwgJ2NoZXZyb24tb3Blbi1sYXJnZS5zdmcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNXMgZWFzZTtcbiAgICAgICAgICAgICYuZXhwYW5kZWQge1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWljb24tZmlsbC1vcGVuIHtcbiAgICAgICAgZmlsbDogJHByaW1hcnk7XG4gICAgfVxuXG4gICAgJi1pY29uLWZpbGwtY2xvc2Uge1xuICAgICAgICBmaWxsOiAkc2Vjb25kYXJ5LWxhYmVsO1xuICAgIH1cblxuICAgICYtaWNvbi1maWxsLWJsYWNrIHtcbiAgICAgICAgZmlsbDogYmxhY2s7XG4gICAgICAgIHN0cm9rZTogYmxhY2s7XG4gICAgfVxuXG4gICAgJi1pY29uLWZpbGwtd2hpdGUge1xuICAgICAgICBmaWxsOiB3aGl0ZTtcbiAgICAgICAgc3Ryb2tlOiB3aGl0ZTtcbiAgICB9XG5cbiAgICAmLWljb24tZmlsbC1ncmF5IHtcbiAgICAgICAgZmlsbDogIzMzMzMzMztcbiAgICAgICAgc3Ryb2tlOiAjMzMzMzMzO1xuICAgIH1cblxuICAgICYtbWluIHtcbiAgICAgICAgbWF4LXdpZHRoOiA1ODFweCAhaW1wb3J0YW50O1xuICAgICAgICB3aWR0aDogODB2dztcbiAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgbW9kYWwgaW50byBhIG1vcmUgJ2Z1bGwtc2NyZWVuJyBhcHBlYXJhbmNlIG9uIG1vYmlsZS5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICB3aWR0aDogMTAwdnc7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcblxuICAgICAgICAgICAgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLW5vZXhwYW5kIHtcbiAgICAgICAgbWF4LXdpZHRoOiA1ODFweCAhaW1wb3J0YW50O1xuICAgICAgICB3aWR0aDogODB2dyAhaW1wb3J0YW50O1xuICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBtb2RhbCBpbnRvIGEgbW9yZSAnZnVsbC1zY3JlZW4nIGFwcGVhcmFuY2Ugb24gbW9iaWxlLlxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gMzJweCkgIWltcG9ydGFudDtcbiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1tb2RhbCB7XG4gICAgICAgIG1heC13aWR0aDogODAwcHggIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDgwdnc7XG4gICAgICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIG1vZGFsIGludG8gYSBtb3JlICdmdWxsLXNjcmVlbicgYXBwZWFyYW5jZSBvbiBtb2JpbGUuXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG5cbiAgICAgICAgICAgIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1tb2RhbC1taW5pIHtcbiAgICAgICAgbWF4LXdpZHRoOiA1ODBweCAhaW1wb3J0YW50O1xuICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBtb2RhbCBpbnRvIGEgbW9yZSAnZnVsbC1zY3JlZW4nIGFwcGVhcmFuY2Ugb24gbW9iaWxlLlxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDB2dztcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuXG4gICAgICAgICAgICAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtbW9kYWwtc3VydmV5IHtcbiAgICAgICAgbWF4LXdpZHRoOiA2OTFweCAhaW1wb3J0YW50O1xuICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBtb2RhbCBpbnRvIGEgbW9yZSAnZnVsbC1zY3JlZW4nIGFwcGVhcmFuY2Ugb24gbW9iaWxlLlxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1tb2RhbC13aWRlIHtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDI0cHggIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgICBoZWlnaHQ6IDk1dmg7XG4gICAgICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICAgICAgICAubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4gICAgICAgICAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgLm1hdC1pY29uLWJ1dHRvbltuYW1lPVwiQ2xvc2VCdXR0b25cIl0ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICByaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLmNsb3NlLWltYWdlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMnB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgbW9kYWwgaW50byBhIG1vcmUgJ2Z1bGwtc2NyZWVuJyBhcHBlYXJhbmNlIG9uIG1vYmlsZS5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICB3aWR0aDogMTAwdnc7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgICAgIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICAmLW1vZGFsLXdpZGUtbWFuYWdlLWJvb2tpbmcge1xuICAgICAgICBtYXgtd2lkdGg6IDEwMjRweCAhaW1wb3J0YW50O1xuICAgICAgICB3aWR0aDogMTAwdnc7XG4gICAgICAgIC8vIGhlaWdodDogOTV2aDtcbiAgICAgICAgbWF4LWhlaWdodDogOTV2aDtcbiAgICAgICAgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuICAgICAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgIC5tYXQtaWNvbi1idXR0b25bbmFtZT1cIkNsb3NlQnV0dG9uXCJdIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgcmlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIC5jbG9zZS1pbWFnZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMzJweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIG1vZGFsIGludG8gYSBtb3JlICdmdWxsLXNjcmVlbicgYXBwZWFyYW5jZSBvbiBtb2JpbGUuXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgICAgICAgICAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgJi1hbGVydCB7XG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDB2dyAhaW1wb3J0YW50O1xuICAgICAgICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAkc3BhY2luZy1zbWFsbDtcbiAgICAgICAgfVxuXG4gICAgICAgICYtYmFja2Ryb3Age1xuICAgICAgICAgICAgYmFja2dyb3VuZDogJGFsZXJ0LW92ZXJsYXktYmc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXNsaWRlLXRvZ2dsZSB7XG4gICAgICAgICYubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkge1xuICAgICAgICAgICAgJiAubWF0LXNsaWRlLXRvZ2dsZS1iYXIubWF0LXNsaWRlLXRvZ2dsZS1iYXIge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5LWhpZ2hsaWdodDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJiAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYubWF0LXNsaWRlLXRvZ2dsZSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICAgIH1cblxuICAgICAgICAubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudCB7XG4gICAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgICBAaW5jbHVkZSBtYXgtbGluZXMoMik7XG4gICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICAgICAgICB9XG5cbiAgICAgICAgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIubWF0LXNsaWRlLXRvZ2dsZS10aHVtYiB7XG4gICAgICAgICAgICB3aWR0aDogMTRweDtcbiAgICAgICAgICAgIGhlaWdodDogMTRweDtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDUwJSwgNTAlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLWNvbnRhaW5lci5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLWNvbnRhaW5lciB7XG4gICAgICAgICAgICB0b3A6IC00cHg7XG4gICAgICAgICAgICBsZWZ0OiAtNHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLm1hdC1zbGlkZS10b2dnbGUtYmFyLm1hdC1zbGlkZS10b2dnbGUtYmFyIHtcbiAgICAgICAgICAgIGhlaWdodDogMjBweDtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMjBweDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtc2tlbGV0b24ge1xuICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcblxuICAgICAgICAmLWNoZWNrYm94IHtcbiAgICAgICAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDIwcHg7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAyMHB4O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWhlYWRlciA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgICAgIG1heC13aWR0aDogMjE1cHg7XG4gICAgICAgIH1cblxuICAgICAgICAmLWltYWdlID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICBAaW5jbHVkZSBwbGFjZWhvbGRlci1pbWFnZS1zaXplO1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgfVxuXG4gICAgICAgICYtc3RhdHVzID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICBAaW5jbHVkZSBwbGFjZWhvbGRlci1zdGF0dXMtc2l6ZTtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgJi1saW5lLTEgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgIGhlaWdodDogMjNweDtcbiAgICAgICAgICAgIG1heC13aWR0aDogMTc2cHg7XG5cbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDIxOXB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1saW5lLTIgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgIGhlaWdodDogMThweDtcbiAgICAgICAgICAgIG1heC13aWR0aDogMTY1cHg7XG5cbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDE4OXB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1saW5lLTMgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgIGhlaWdodDogMThweDtcbiAgICAgICAgICAgIG1heC13aWR0aDogMTQ3cHg7XG5cbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDE4OXB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1saW5lLTMwcCwgJi1saW5lLTMwcC10aGluIHtcbiAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMThweDtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDMwJTtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1heC13aWR0aDogMzAlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYtdGhpbiB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS00NXAsICYtbGluZS00NXAtdGhpbiB7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA0NSU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDQ1JTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiA0NSU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGluIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1saW5lLTUwcCwgJi1saW5lLTUwcC10aGluLCAmLWxpbmUtNTBwLXRoaWNrIHtcbiAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMThweDtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDUwJTtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1heC13aWR0aDogNTAlO1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDQ1JTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLXRoaW4ge1xuICAgICAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLXRoaWNrIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1saW5lLTYwcCwgJi1saW5lLTYwcC10aGluLCAmLWxpbmUtNjBwLXRoaWNrIHtcbiAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMThweDtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDYwJTtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1heC13aWR0aDogNjAlO1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDM1JTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLXRoaW4ge1xuICAgICAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLXRoaWNrIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1saW5lLTcwcCwgJi1saW5lLTcwcC10aGluLCAmLWxpbmUtNzBwLXRoaWNrIHtcbiAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMThweDtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDcwJTtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1heC13aWR0aDogNzAlO1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDI1JTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLXRoaW4ge1xuICAgICAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLXRoaWNrIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1saW5lLTgwcCwgJi1saW5lLTgwcC10aGluLCAmLWxpbmUtODBwLXRoaWNrIHtcbiAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMThweDtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDgwJTtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1heC13aWR0aDogODAlO1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDE1JTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLXRoaW4ge1xuICAgICAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLXRoaWNrIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1saW5lLTkwcCwgJi1saW5lLTkwcC10aGluIHtcbiAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMThweDtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDkwJTtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1heC13aWR0aDogOTAlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYtdGhpbiB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbG9hZC1tb3JlID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gKDIgKiAjeyRzcGFjaW5nLXNtYWxsfSkpO1xuICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAzMjBweDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDUwcHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWxvYWQtbW9yZS0xMDBwLCAmLWhlYWRlciwgJi1yb29tLWF2YWlsYWJpbGl0eSB7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgICAgICAgICAgd2lkdGg6IGNhbGMoMTAwdncgLSAoMiAqICN7JHNwYWNpbmctc21hbGx9KSk7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogbm9uZTtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1heC13aWR0aDogbm9uZTtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogNTBweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJi1yb29tLWF2YWlsYWJpbGl0eSB7XG4gICAgICAgICAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMjRweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG5cbiAgICB9XG59XG5cblxuLm1jayB7XG4gICAgJi1oZWFkaW5nLTUge1xuICAgICAgICBAaW5jbHVkZSBoZWFkaW5nLTU7XG4gICAgfVxufVxuXG5uZ3gtbWF0LXNlbGVjdC1zZWFyY2gge1xuICAgIC5tYXQtc2VsZWN0LXNlYXJjaC1uby1lbnRyaWVzLWZvdW5kIHtcbiAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICB9XG5cbiAgICAubWF0LXNlbGVjdC1zZWFyY2gtaW5wdXQge1xuICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIH1cblxuICAgIGJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1zZWxlY3Qtc2VhcmNoLWNsZWFyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgY29sb3I6IGJsYWNrO1xuICAgIH1cbn1cblxuOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgd2lkdGg6IDE2cHg7XG4gICAgaGVpZ2h0OiAxOHB4O1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgaGVpZ2h0OiAkc3BhY2luZy1tZWRpdW07XG4gICAgYm9yZGVyOiA0cHggc29saWQgcmdiYSgwLCAwLCAwLCAwKTtcbiAgICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2Nyb2xsYmFyLWNvbG9yO1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgLTFweCAtMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMDUpLCBpbnNldCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xufVxuOjotd2Via2l0LXNjcm9sbGJhci1idXR0b24ge1xuICAgIHdpZHRoOiAwO1xuICAgIGhlaWdodDogMDtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuaGVhZGVyIHtcbiAgICB6LWluZGV4OiAyO1xufVxuLm1iLWJsb2NrIHtcbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxufVxuLm1iLWJvdHRvbSB7XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAxMTBweDtcbiAgICB9XG59XG5cbi5tYXAtZmlsdGVycy1jb250YWluZXIgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkIHtcbiAgICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgICB0b3A6IDVweDtcbiAgICB9XG4gICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7XG4gICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgICAgcGFkZGluZy10b3A6ICRzcGFjaW5nLXh4c21hbGwgIWltcG9ydGFudDtcbiAgICB9XG59XG5cbi5vZmZpY2UtbGV2ZWwtcm93e1xuXG4gICAgLm1hdC1zZWxlY3QtcGxhY2Vob2xkZXJ7XG4gICAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICB9XG5cbiAgICAubGVnZW5kLWNvbnRhaW5lciAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICBoZWlnaHQ6IDQ1cHggIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5zZWxlY3QtZGl2aWRlcntcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHRvcDogMCAhaW1wb3J0YW50O1xuICAgICAgICB3aWR0aDogNDRweCAhaW1wb3J0YW50O1xuICAgICAgICByaWdodDogLTExcHggIWltcG9ydGFudDtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICAgICAgYm9yZGVyLXdpZHRoOiAwIDAgMCAxcHg7XG4gICAgICAgIGJvcmRlci1jb2xvcjogI2M2YzZjNjtcbiAgICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAxcHgpICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuZGlzYWJsZWR7XG4gICAgICAgIC5zZWxlY3QtZGl2aWRlcntcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGMEYwRjAgIWltcG9ydGFudDtcbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDJweCkgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAuc2VsZWN0LWNoZXZyb257XG4gICAgICAgICAgICBvcGFjaXR5OiAwLjU7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogMTBweDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLm9mZmljZS1sZXZlbC1yb3csIC5tYXAtY29udHJvbHN7XG4gICAgLmxlZ2VuZC1jb250YWluZXIgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnQ7XG4gICAgfVxufVxuXG4uYm9va2luZy1mb3JtLWNvbnRhaW5lciB7XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMzQ1cHgpO1xufVxuLmJvb2tpbmctZm9ybS1jb250YWluZXIgLm1jay1mb3JtLWlucHV0e1xuXG4gICAgbWF0LXNlbGVjdCB7XG4gICAgICAgICYgLm1hdC1zZWxlY3QtdmFsdWUgPiAubWF0LXNlbGVjdC12YWx1ZS10ZXh0ID4gc3BhbiB7XG4gICAgICAgICAgICAvLyBjb2xvcjogIzA1MWMyYyAhaW1wb3J0YW50OyAvL1ItLS0gYmxvY2tzIGRpc2FibGVkIHN0YXRlIGNvbG9yXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtYXQtbGFiZWwsIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudCB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zICFpbXBvcnRhbnQ7XG4gICAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgIH1cblxuICAgIGlucHV0LCBpbnB1dDo6cGxhY2Vob2xkZXJ7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgICAgICBjb2xvcjogI0IzQjNCMztcbiAgICB9XG59IiwiQGltcG9ydCBcIi4uL3N0eWxlc1wiO1xuXG4uYnV0dG9uLXdyYXBwZXIge1xuICAgIEBleHRlbmQgLm1jay1jb2x1bW47XG4gICAgZmxleC1iYXNpczogMTAwJTtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGVuZDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICB6LWluZGV4OiAyO1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgYm90dG9tOiAtMC41cmVtO1xuICAgICAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgICAgICBwYWRkaW5nLXRvcDogJHNwYWNpbmctbWVkaXVtLWxhcmdlO1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogJHNwYWNpbmctbWVkaXVtLWxhcmdlO1xuICAgIH1cblxuICAgICYuaGFzLWZpeGVkIHtcbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICB6LWluZGV4OiAyO1xuICAgICAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICB9ICAgICAgICBcbiAgICB9XG5cbiAgICAmLXNwYWNlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG4gICAgfVxuXG4gICAgJiA+IC5idXR0b24tcm93IHtcbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAvLyBtb2JpbGUgaXMgc3R1Y2sgdG8gdGhlIGJvdHRvbSBvZiBzY3JlZW4sIHNvIHdlIG5lZWQgdG8gYWRkIHBhZGRpbmcgYXJvdW5kIGl0LlxuICAgICAgICAgICAgcGFkZGluZzogJHNwYWNpbmctc21hbGw7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5tY2stbW9kYWwtcHJpbWFyeS1idXR0b24ge1xuICAgIGZsZXg6IDE7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luOiAwICRzcGFjaW5nLXhzbWFsbDtcbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIG1heC13aWR0aDogMzIwcHg7XG4gICAgfVxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICAgIH1cbn1cblxuLm1jay1tb2RhbC1zZWNvbmRhcnktYnV0dG9uIHtcbiAgICBmbGV4OiAxO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbjogMCAkc3BhY2luZy14c21hbGw7XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICBtYXgtd2lkdGg6IDMyMHB4O1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDAgJHNwYWNpbmcteHNtYWxsO1xuICAgIH1cbn1cblxuXG4uc21hbGwtYnV0dG9ucyB7XG4gICAgLm1jay1tb2RhbC1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtYXJnaW46IDAgJHNwYWNpbmcteHNtYWxsO1xuICAgICAgICBtYXgtd2lkdGg6IDEzNHB4O1xuICAgIFxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIC5tY2stbW9kYWwtc2Vjb25kYXJ5LWJ1dHRvbiB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtYXJnaW46IDAgJHNwYWNpbmcteHNtYWxsO1xuICAgICAgICBtYXgtd2lkdGg6IDEzNHB4O1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDAgJHNwYWNpbmcteHNtYWxsO1xuICAgICAgICAgICAgXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICB9XG59Il19 */"] + styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n.mck-inherit-font[_ngcontent-%COMP%] {\n font: inherit;\n}\n.mck-content-expand[_ngcontent-%COMP%], .mck-content-page[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n}\n.mck-content-expand-width[_ngcontent-%COMP%] {\n width: 100%;\n}\n.mck-content-expand-height[_ngcontent-%COMP%] {\n height: 100%;\n}\n.mck-content-with-footer-height[_ngcontent-%COMP%] {\n height: calc(100vh - 58px);\n}\n.mck-content-full-height[_ngcontent-%COMP%], .mck-content-page-container[_ngcontent-%COMP%] {\n height: 100vh;\n}\n.mck-content-page[_ngcontent-%COMP%] {\n background: #F8F9FA;\n}\n.mck-content-body[_ngcontent-%COMP%] {\n width: 100%;\n display: block;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-content-body[_ngcontent-%COMP%] {\n max-width: 1024px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-content-body[_ngcontent-%COMP%] {\n max-width: 1024px;\n }\n}\n.mck-content-group[_ngcontent-%COMP%] {\n padding-left: 1rem;\n padding-right: 1rem;\n width: 100%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-content-group[_ngcontent-%COMP%] {\n max-width: 759px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-content-group[_ngcontent-%COMP%] {\n max-width: 759px;\n }\n}\n.mck-shadow[_ngcontent-%COMP%] {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n}\n.mck-flex-1[_ngcontent-%COMP%] {\n flex: 1;\n}\n.mck-row[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .mck-row-flow[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n}\n.mck-row.mck-center-justify[_ngcontent-%COMP%], .mck-center-justify.mck-row-flow[_ngcontent-%COMP%], .mck-row.mck-center[_ngcontent-%COMP%], .mck-row.mck-button.mat-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .mck-center.mck-row-flow[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: center;\n}\n.mck-row.mck-center-align[_ngcontent-%COMP%], .mck-center-align.mck-row-flow[_ngcontent-%COMP%], .mck-row.mck-center[_ngcontent-%COMP%], .mck-row.mck-button.mat-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .mck-center.mck-row-flow[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n align-items: center;\n}\n.mck-row.mck-stretch[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mck-stretch.mat-form-field-infix[_ngcontent-%COMP%], .mck-stretch.mck-row-flow[_ngcontent-%COMP%] {\n align-items: stretch;\n}\n.mck-row-flow[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n}\n.mck-row.mck-scroll[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mck-scroll.mat-form-field-infix[_ngcontent-%COMP%], .mck-scroll.mck-row-flow[_ngcontent-%COMP%] {\n overflow-x: scroll;\n}\n.mck-column[_ngcontent-%COMP%], .button-wrapper[_ngcontent-%COMP%], .mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n.mck-column.mck-center[_ngcontent-%COMP%], .mck-center.button-wrapper[_ngcontent-%COMP%], .mck-column.mck-button.mat-button[_ngcontent-%COMP%], .mck-button.mat-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mck-stroked-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mck-warning-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mck-secondary-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-button.mck-primary-button[_ngcontent-%COMP%], .mat-button.mck-primary-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mck-stroked-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mck-warning-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mck-secondary-button.button-wrapper[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mat-stroked-button.mck-primary-button.button-wrapper[_ngcontent-%COMP%], .mck-center.mck-button.mat-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-button[_ngcontent-%COMP%], .mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-button.mat-stroked-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-center.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mck-column.mat-form-field-infix[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.button-wrapper[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mck-button.mat-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: center;\n align-items: center;\n}\n.mck-column.mck-space-between[_ngcontent-%COMP%], .mck-space-between.button-wrapper[_ngcontent-%COMP%], .mck-space-between.mck-button.mat-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-space-between.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: space-between;\n}\n.mck-column.mck-stretch[_ngcontent-%COMP%], .mck-stretch.button-wrapper[_ngcontent-%COMP%], .mck-stretch.mck-button.mat-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-stretch.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n align-items: stretch;\n}\n.mck-column.mck-scroll[_ngcontent-%COMP%], .mck-scroll.button-wrapper[_ngcontent-%COMP%], .mck-scroll.mck-button.mat-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-scroll.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n overflow-y: scroll;\n overflow-y: overlay;\n}\n.mck-column.mck-flex-end[_ngcontent-%COMP%], .mck-flex-end.button-wrapper[_ngcontent-%COMP%], .mck-flex-end.mck-button.mat-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-flex-end.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: flex-end;\n}\n.mck-overflow[_ngcontent-%COMP%] {\n overflow: auto;\n}\n.mck-bordered[_ngcontent-%COMP%], .mck-input[_ngcontent-%COMP%] {\n border-radius: 0;\n border: 1px solid #B3B3B3;\n}\n.mck-bordered[_ngcontent-%COMP%]:hover, .mck-input[_ngcontent-%COMP%]:hover {\n border-color: #464646;\n}\n.mck-bordered[_ngcontent-%COMP%]:focus, .mck-input[_ngcontent-%COMP%]:focus {\n border-color: #1F40E6;\n}\n.mck-bordered[disabled=true][_ngcontent-%COMP%], .mck-input[disabled=true][_ngcontent-%COMP%] {\n pointer-events: none;\n border-color: #f0f0f0;\n color: #ccc;\n}\n.mck-date-display[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n height: 43px;\n padding: 1rem 0.5rem;\n transition: border 200ms, box-shadow 200ms;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-form-field-wrapper[_ngcontent-%COMP%] {\n padding-bottom: 0.5rem;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] {\n min-width: auto !important;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n width: 100%;\n padding-top: 0.7rem !important;\n padding-bottom: 0.5rem !important;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] {\n min-height: 2.7rem;\n color: rgba(0, 0, 0, 0.27);\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n margin-top: 2px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-flex[_ngcontent-%COMP%] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-flex[_ngcontent-%COMP%] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 2rem;\n min-height: 2rem;\n }\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 2rem;\n min-height: 2rem;\n }\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field.mat-s[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-select[_ngcontent-%COMP%] {\n margin-top: 0.2rem;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-select[_ngcontent-%COMP%] .mat-select-arrow[_ngcontent-%COMP%] {\n visibility: hidden;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-select[_ngcontent-%COMP%] .mat-select-value[_ngcontent-%COMP%] > .mat-select-value-text[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 400;\n font-family: \"McKinsey Sans\";\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #B3B3B3;\n border-width: 1px;\n border-radius: 0;\n}\n.mck-form-input[_ngcontent-%COMP%] .available[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .available[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .available[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #3aa537;\n}\n.mck-form-input[_ngcontent-%COMP%] .booked[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .booked[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .booked[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #e12e41;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline-thick[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline-thick[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline-thick[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #1F40E6;\n border-width: 1px;\n border-radius: 0;\n}\n.mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-wrapper[_ngcontent-%COMP%] {\n padding-bottom: 0;\n}\n.mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #E12E40;\n}\n.mck-form-input[_ngcontent-%COMP%] mck-close-icon.mat-chip-remove.mat-chip-remove[_ngcontent-%COMP%] {\n opacity: 1;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-label[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 400;\n text-align: left;\n margin-bottom: 0.5rem;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-radio-button[_ngcontent-%COMP%] {\n margin-right: 1rem;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-radio-label-content[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-radio-outer-circle[_ngcontent-%COMP%] {\n border-color: #1F40E6 !important;\n border-width: 1px !important;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-radio-inner-circle[_ngcontent-%COMP%] {\n background-color: #1F40E6 !important;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-radio-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-radio-group[_ngcontent-%COMP%] > mat-radio-button[_ngcontent-%COMP%]:last-child {\n margin-right: 0;\n}\n.mck-form-input-container[_ngcontent-%COMP%] > .mck-form-input[_ngcontent-%COMP%], .mck-form-input-container[_ngcontent-%COMP%] > mck-select[_ngcontent-%COMP%] {\n margin-bottom: 0.5rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-form-input-container[_ngcontent-%COMP%] > .mck-form-input[_ngcontent-%COMP%], .mck-form-input-container[_ngcontent-%COMP%] > mck-select[_ngcontent-%COMP%] {\n margin-bottom: 1.75rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-form-input-container[_ngcontent-%COMP%] > .mck-form-input[_ngcontent-%COMP%], .mck-form-input-container[_ngcontent-%COMP%] > mck-select[_ngcontent-%COMP%] {\n margin-bottom: 1.75rem;\n }\n}\n.mck-form-input-container[_ngcontent-%COMP%] .mck-radio-select[_ngcontent-%COMP%] {\n margin-bottom: 1rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-form-input-container[_ngcontent-%COMP%] .mck-radio-select[_ngcontent-%COMP%] {\n margin-bottom: 1.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-form-input-container[_ngcontent-%COMP%] .mck-radio-select[_ngcontent-%COMP%] {\n margin-bottom: 1.5rem;\n }\n}\n.mck-form-input[_ngcontent-%COMP%] mat-chip.mat-standard-chip.mat-standard-chip[_ngcontent-%COMP%] {\n border-radius: 3px;\n min-height: 1.5rem;\n background-color: #333333;\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 0.75rem;\n line-height: 1.5rem;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input[_ngcontent-%COMP%] mat-chip.mat-standard-chip.mat-standard-chip[_ngcontent-%COMP%] {\n line-height: inherit;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input[_ngcontent-%COMP%] mat-chip.mat-standard-chip.mat-standard-chip[_ngcontent-%COMP%] {\n line-height: inherit;\n }\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox.mat-checkbox.mat-checkbox[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] {\n background-color: #D0D0D0;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n color: #B3B3B3;\n}\n.mck-borderless[_ngcontent-%COMP%] {\n border: none;\n}\n.mck-borderless[_ngcontent-%COMP%]:hover, .mck-borderless[_ngcontent-%COMP%]:focus, .mck-borderless[_ngcontent-%COMP%]:disabled {\n border: none;\n}\n.mck-select-panel[_ngcontent-%COMP%] {\n margin-top: 0 !important;\n border-radius: unset !important;\n margin-top: 35px !important;\n margin-left: 5px;\n}\n.mck-select-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] {\n padding-left: 0;\n padding-right: 0;\n}\n.mck-select-panel[_ngcontent-%COMP%] mat-option.mat-option-text[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-select-panel.mck-margin-top[_ngcontent-%COMP%] {\n margin-top: 1.5rem !important;\n}\n.mck-checkbox-panel.mat-autocomplete-panel.mat-autocomplete-panel[_ngcontent-%COMP%] {\n top: -10px;\n max-height: 278px;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option.mck-truncated[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] {\n padding-left: 0;\n padding-right: 0;\n line-height: 24px;\n height: unset;\n min-height: 36px;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n flex: 1;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n text-align: left;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option.mck-checkbox-group-header[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option.mck-checkbox-group-child[_ngcontent-%COMP%] {\n margin-left: 2rem;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] label.mat-checkbox-layout[_ngcontent-%COMP%] {\n width: 100%;\n padding-left: 16px;\n padding-right: 16px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] label.mat-checkbox-layout[_ngcontent-%COMP%] {\n padding-left: 2px;\n padding-right: 2px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] label.mat-checkbox-layout[_ngcontent-%COMP%] {\n padding-left: 2px;\n padding-right: 2px;\n }\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] div.mat-checkbox-frame.mat-checkbox-frame[_ngcontent-%COMP%] {\n border: 1px solid #B3B3B3;\n border-radius: 0;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox.mat-checkbox-checked[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background[_ngcontent-%COMP%] {\n background-color: #D0D0D0;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n color: #B3B3B3;\n text-align: left;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] .mat-checkbox-inner-container[_ngcontent-%COMP%] {\n width: 1.25rem;\n height: 1.25rem;\n}\n.mck-select-option-selected[_ngcontent-%COMP%] {\n font-weight: 500;\n font-family: \"McKinsey Sans\";\n color: black;\n background-color: #E6E6E6;\n}\n.mck-select-option-selected[_ngcontent-%COMP%] .mck-spacer-content[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n margin-right: 0.75rem;\n}\n.mck-select-option-unselected[_ngcontent-%COMP%] {\n font-weight: 400;\n font-family: \"McKinsey Sans\";\n}\n.mck-select-option-unselected.mck-ignore-disabled[_ngcontent-%COMP%] {\n color: black;\n}\n.mck-select-option-unselected[_ngcontent-%COMP%] .mck-spacer-content[_ngcontent-%COMP%] {\n visibility: hidden;\n margin-right: 0.75rem;\n}\n.mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n height: 40px;\n border-radius: 0;\n border: none;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n }\n}\n.mck-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: normal;\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n }\n}\n.mck-button.mat-button.mat-button.mck-short[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button[_ngcontent-%COMP%] {\n height: 32px;\n min-width: 83px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-short[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-short[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%] {\n height: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%] {\n height: 40px;\n }\n}\n.mck-button.mat-button.mat-button.mck-square[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-square[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n min-width: 32px;\n padding: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-square[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-square[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-square[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-square[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n }\n}\n.mck-primary-button.mat-button.mat-button[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n}\n.mck-primary-button.mat-button.mat-button[disabled][_ngcontent-%COMP%], .mck-primary-button.mat-button.mat-button.disabled[_ngcontent-%COMP%] {\n background-color: #D0D0D0;\n color: #757575;\n cursor: not-allowed;\n}\n.mck-primary-button.mat-button.mat-button[disabled][_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-primary-button.mat-button.mat-button.disabled[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: #757575;\n}\n.mck-primary-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: white;\n}\n.mck-secondary-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] {\n border: 1px solid #D0D0D0;\n border-radius: 0;\n border: 1px solid #2251FF;\n color: #2251FF;\n}\n.mck-secondary-button.mat-stroked-button.mat-stroked-button[disabled][_ngcontent-%COMP%], .mck-secondary-button.mat-stroked-button.mat-stroked-button.disabled[_ngcontent-%COMP%] {\n border: 1px solid #D0D0D0;\n color: #333333;\n cursor: not-allowed;\n}\n.mck-secondary-button.mat-button.mat-button[_ngcontent-%COMP%] {\n background-color: white;\n}\n.mck-secondary-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: #333333;\n}\n.mck-warning-button.mat-button.mat-button[_ngcontent-%COMP%] {\n background-color: #ffd048;\n}\n.mck-warning-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: black;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] {\n border: 2px solid #B3B3B3;\n border-radius: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding-left: 1.75rem;\n padding-right: 1.75rem;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%] {\n height: 32px;\n min-width: 83px;\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-primary[_ngcontent-%COMP%] {\n border-width: 1px;\n border-color: #1F40E6;\n color: #1F40E6;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-thin-border-light[_ngcontent-%COMP%] {\n border-color: #D0D0D0;\n border-width: 1px;\n}\n.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: normal;\n color: #1F40E6;\n}\n.mck-toggle-button[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n border: 1px solid #B3B3B3;\n border-color: #D0D0D0;\n min-width: 59px;\n background-color: white;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-toggle-button[_ngcontent-%COMP%] {\n min-width: 132px;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-toggle-button[_ngcontent-%COMP%] {\n min-width: 132px;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n }\n}\n.mck-toggle-button-selected[_ngcontent-%COMP%] {\n color: #1F40E6;\n}\n.mck-date-picker[_ngcontent-%COMP%] {\n width: 100% !important;\n height: 100% !important;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-date-picker[_ngcontent-%COMP%] {\n max-width: 23rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-date-picker[_ngcontent-%COMP%] {\n max-width: 23rem;\n }\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n color: #051C2C;\n margin-top: 1.25rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] {\n width: 2.375rem;\n height: 2rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] > .icon.icon[_ngcontent-%COMP%] {\n width: 1rem;\n height: 1rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] > .next.next[_ngcontent-%COMP%] {\n background-image: url('arrow-forward.svg');\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] > .previous.previous[_ngcontent-%COMP%] {\n background-image: url('arrow-backward.svg');\n}\n.mck-date-picker[_ngcontent-%COMP%] > .month[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .week[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n color: #767676;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date[_ngcontent-%COMP%] > .dot[_ngcontent-%COMP%] {\n display: none;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date.disabled[_ngcontent-%COMP%] {\n background-color: transparent;\n border-radius: 0;\n color: #767676;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date.active[_ngcontent-%COMP%] {\n border-radius: 0;\n background-color: #1F40E6;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date.non-month[_ngcontent-%COMP%] {\n color: #767676;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-spacer-content-expand-mobile[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-spacer-content-expand-mobile[_ngcontent-%COMP%] {\n display: none;\n }\n}\n.mck-spacer-content-divider[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n border-radius: 0;\n border-top: 1px solid #E6E6E6;\n border-bottom: 1px solid #E6E6E6;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] {\n background-color: #F0F0F0;\n border-bottom: none;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n background-image: url('chevron-close.svg');\n background-size: contain;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-close-large.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-close-large.svg');\n background-size: contain;\n }\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] {\n padding-left: 0;\n padding-right: 0;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 0.75rem;\n line-height: 1.4;\n padding-left: 1rem;\n padding-right: 1rem;\n text-align: left;\n color: black;\n font-weight: normal;\n padding-bottom: 0.5rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-size: 1rem;\n line-height: 1.6;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-size: 1rem;\n line-height: 1.6;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n }\n}\n.mck-expansion-panel[_ngcontent-%COMP%] mat-expansion-panel-header[_ngcontent-%COMP%] {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.mck-expansion-panel[_ngcontent-%COMP%] mat-expansion-panel-header[_ngcontent-%COMP%] > span.mat-content[_ngcontent-%COMP%] {\n align-items: center;\n}\n.mck-expansion-panel[_ngcontent-%COMP%] mat-panel-title[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n color: black;\n font-weight: normal;\n}\n.mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n background-image: url('chevron-open.svg');\n background-size: contain;\n transform: rotate(0deg);\n transition: transform 0.5s ease;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-open-large.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-open-large.svg');\n background-size: contain;\n }\n}\n.mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon.expanded[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n}\n.mck-icon-fill-open[_ngcontent-%COMP%] {\n fill: #1F40E6;\n}\n.mck-icon-fill-close[_ngcontent-%COMP%] {\n fill: #767676;\n}\n.mck-icon-fill-black[_ngcontent-%COMP%] {\n fill: black;\n stroke: black;\n}\n.mck-icon-fill-white[_ngcontent-%COMP%] {\n fill: white;\n stroke: white;\n}\n.mck-icon-fill-gray[_ngcontent-%COMP%] {\n fill: #333333;\n stroke: #333333;\n}\n.mck-min[_ngcontent-%COMP%] {\n max-width: 581px !important;\n width: 80vw;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-min[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-min[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-min[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-min[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-noexpand[_ngcontent-%COMP%] {\n max-width: 581px !important;\n width: 80vw !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-noexpand[_ngcontent-%COMP%] {\n width: calc(100vw - 32px) !important;\n max-height: 100vh;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-noexpand[_ngcontent-%COMP%] {\n width: calc(100vw - 32px) !important;\n max-height: 100vh;\n }\n}\n.mck-modal[_ngcontent-%COMP%] {\n max-width: 800px !important;\n width: 80vw;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-mini[_ngcontent-%COMP%] {\n max-width: 580px !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-mini[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-mini[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-mini[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-mini[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-survey[_ngcontent-%COMP%] {\n max-width: 691px !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-survey[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-survey[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-wide[_ngcontent-%COMP%] {\n max-width: 1024px !important;\n width: 100vw;\n height: 95vh;\n max-height: 100vh;\n}\n.mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] {\n background-color: #F8F9FA;\n padding: 0 !important;\n overflow: hidden;\n}\n.mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] {\n position: relative;\n right: 32px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-wide-manage-booking[_ngcontent-%COMP%] {\n max-width: 1250px !important;\n width: 100vw;\n max-height: 95vh;\n}\n.mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] {\n background-color: #F8F9FA;\n padding: 0 !important;\n overflow: hidden;\n}\n.mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] {\n position: relative;\n right: 32px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-alert[_ngcontent-%COMP%] {\n max-width: 100vw !important;\n width: 100vw;\n margin-left: 1rem;\n margin-right: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-alert[_ngcontent-%COMP%] {\n max-width: 100vw !important;\n width: 100vw;\n margin-left: 1rem;\n margin-right: 1rem;\n }\n}\n.mck-alert-backdrop[_ngcontent-%COMP%] {\n background: rgba(5, 28, 44, 0.85);\n}\n.mck-slide-toggle.mat-slide-toggle.mat-checked[_ngcontent-%COMP%]:not(.mat-disabled) .mat-slide-toggle-bar.mat-slide-toggle-bar[_ngcontent-%COMP%] {\n background-color: #2251FF;\n}\n.mck-slide-toggle.mat-slide-toggle.mat-checked[_ngcontent-%COMP%]:not(.mat-disabled) .mat-slide-toggle-thumb.mat-slide-toggle-thumb[_ngcontent-%COMP%] {\n background-color: white;\n}\n.mck-slide-toggle.mat-slide-toggle[_ngcontent-%COMP%] {\n height: auto;\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-content.mat-slide-toggle-content[_ngcontent-%COMP%] {\n flex: 1;\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n white-space: normal;\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-thumb.mat-slide-toggle-thumb[_ngcontent-%COMP%] {\n width: 14px;\n height: 14px;\n transform: translate(50%, 50%);\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-thumb-container.mat-slide-toggle-thumb-container[_ngcontent-%COMP%] {\n top: -4px;\n left: -4px;\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-bar.mat-slide-toggle-bar[_ngcontent-%COMP%] {\n height: 20px;\n background-color: #D0D0D0;\n border-radius: 20px;\n}\n.mck-skeleton[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n}\n.mck-skeleton-checkbox[_ngcontent-%COMP%] {\n float: left;\n}\n.mck-skeleton-checkbox[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 20px;\n height: 20px;\n margin-bottom: 0;\n}\n.mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 100vw;\n margin-bottom: 0;\n max-width: 215px;\n}\n.mck-skeleton-image[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 81px;\n height: 82px;\n margin-bottom: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-skeleton-image[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 219px;\n height: 119px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-skeleton-image[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 219px;\n height: 119px;\n }\n}\n.mck-skeleton-status[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 117px;\n height: 78px;\n margin-top: 10px;\n margin-bottom: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-skeleton-status[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 117px;\n height: 78px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-skeleton-status[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 117px;\n height: 78px;\n }\n}\n.mck-skeleton-line-1[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 23px;\n max-width: 176px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-1[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 219px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-1[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 219px;\n }\n}\n.mck-skeleton-line-2[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 165px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-2[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-2[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n.mck-skeleton-line-3[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 147px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-3[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-3[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n.mck-skeleton-line-30p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 30%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-30p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 30%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-30p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 30%;\n }\n}\n.mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-45p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 45%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-45p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 45%;\n margin-right: 45%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-45p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 45%;\n margin-right: 45%;\n }\n}\n.mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-50p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 50%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-50p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 50%;\n margin-right: 45%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-50p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 50%;\n margin-right: 45%;\n }\n}\n.mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-60p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 60%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-60p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 60%;\n margin-right: 35%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-60p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 60%;\n margin-right: 35%;\n }\n}\n.mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-70p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 70%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-70p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 70%;\n margin-right: 25%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-70p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 70%;\n margin-right: 25%;\n }\n}\n.mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-80p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 80%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-80p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 80%;\n margin-right: 15%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-80p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 80%;\n margin-right: 15%;\n }\n}\n.mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-90p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 90%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-90p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 90%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-90p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 90%;\n }\n}\n.mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-load-more[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n width: calc(100vw - (2 * 1rem));\n height: 40px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-load-more[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 320px;\n height: 50px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-load-more[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 320px;\n height: 50px;\n }\n}\n.mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n width: calc(100vw - (2 * 1rem));\n height: 40px;\n max-width: none;\n width: 100%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: none;\n width: 100%;\n height: 50px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: none;\n width: 100%;\n height: 50px;\n }\n}\n.mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 124px;\n margin-bottom: 4px;\n}\n.mck-heading-5[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 1.5rem;\n line-height: 1.333;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-heading-5[_ngcontent-%COMP%] {\n font-size: 1.75rem;\n line-height: 1.142;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-heading-5[_ngcontent-%COMP%] {\n font-size: 1.75rem;\n line-height: 1.142;\n }\n}\nngx-mat-select-search[_ngcontent-%COMP%] .mat-select-search-no-entries-found[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\nngx-mat-select-search[_ngcontent-%COMP%] .mat-select-search-input[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\nngx-mat-select-search[_ngcontent-%COMP%] button.mat-button.mat-select-search-clear[_ngcontent-%COMP%] {\n background-color: transparent;\n border: none;\n color: black;\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 16px;\n height: 18px;\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n height: 1.5rem;\n border: 4px solid rgba(0, 0, 0, 0);\n background-clip: padding-box;\n border-radius: 8px;\n background-color: #757575;\n -webkit-box-shadow: inset -1px -1px 0px rgba(0, 0, 0, 0.05), inset 1px 1px 0px rgba(0, 0, 0, 0.05);\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar-button {\n width: 0;\n height: 0;\n display: none;\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar-corner {\n background-color: transparent;\n}\nheader[_ngcontent-%COMP%] {\n z-index: 2;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mb-block[_ngcontent-%COMP%] {\n display: block;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mb-block[_ngcontent-%COMP%] {\n display: block;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mb-bottom[_ngcontent-%COMP%] {\n padding-bottom: 110px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mb-bottom[_ngcontent-%COMP%] {\n padding-bottom: 110px;\n }\n}\n.map-filters-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n top: 5px;\n}\n.map-filters-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] {\n height: 48px;\n background-color: white;\n}\n.map-filters-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n padding-top: 0.5rem !important;\n}\n.office-level-row[_ngcontent-%COMP%] .mat-select-placeholder[_ngcontent-%COMP%] {\n color: #333333;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .office-level-row[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .office-level-row[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 45px !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .office-level-row[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .office-level-row[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 45px !important;\n }\n}\n.office-level-row[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n display: block;\n top: 0 !important;\n width: 44px !important;\n right: -11px !important;\n background: transparent !important;\n border-width: 0 0 0 1px;\n border-color: #c6c6c6;\n border-style: solid;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .office-level-row[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 1px) !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .office-level-row[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 1px) !important;\n }\n}\n.office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n background: #F0F0F0 !important;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 2px) !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 2px) !important;\n }\n}\n.office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-chevron[_ngcontent-%COMP%] {\n opacity: 0.5;\n margin-left: 10px;\n}\n.office-level-row[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .office-level-row[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .map-controls[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .map-controls[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n display: flex !important;\n width: 100% !important;\n justify-content: space-between !important;\n}\n.booking-form-container[_ngcontent-%COMP%] {\n overflow-y: auto;\n max-height: calc(100vh - 310px);\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-form-container[_ngcontent-%COMP%] {\n max-height: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-form-container[_ngcontent-%COMP%] {\n max-height: none;\n }\n}\n.booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-label[_ngcontent-%COMP%], .booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] .mat-radio-label-content[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\" !important;\n color: #333333;\n}\n.booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::-moz-placeholder {\n font-family: \"McKinsey Sans\";\n color: #B3B3B3;\n}\n.booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:-ms-input-placeholder {\n font-family: \"McKinsey Sans\";\n color: #B3B3B3;\n}\n.booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%], .booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder {\n font-family: \"McKinsey Sans\";\n color: #B3B3B3;\n}\n.button-wrapper[_ngcontent-%COMP%] {\n flex-basis: 100%;\n justify-content: end;\n background-color: white;\n z-index: 2;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .button-wrapper[_ngcontent-%COMP%] {\n bottom: -0.5rem;\n position: sticky;\n padding-top: 1.75rem;\n padding-bottom: 1.75rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .button-wrapper[_ngcontent-%COMP%] {\n bottom: -0.5rem;\n position: sticky;\n padding-top: 1.75rem;\n padding-bottom: 1.75rem;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .button-wrapper.has-fixed[_ngcontent-%COMP%] {\n z-index: 2;\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .button-wrapper.has-fixed[_ngcontent-%COMP%] {\n z-index: 2;\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n }\n}\n.button-wrapper-spacer[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .button-wrapper[_ngcontent-%COMP%] > .button-row[_ngcontent-%COMP%] {\n padding: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .button-wrapper[_ngcontent-%COMP%] > .button-row[_ngcontent-%COMP%] {\n padding: 1rem;\n }\n}\n.mck-modal-primary-button[_ngcontent-%COMP%] {\n flex: 1;\n width: 100%;\n margin: 0 0.75rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-modal-primary-button[_ngcontent-%COMP%] {\n max-width: 320px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-modal-primary-button[_ngcontent-%COMP%] {\n max-width: 320px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-primary-button[_ngcontent-%COMP%] {\n max-width: 100% !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-primary-button[_ngcontent-%COMP%] {\n max-width: 100% !important;\n }\n}\n.mck-modal-secondary-button[_ngcontent-%COMP%] {\n flex: 1;\n width: 100%;\n margin: 0 0.75rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-modal-secondary-button[_ngcontent-%COMP%] {\n max-width: 320px;\n margin-right: 0 0.75rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-modal-secondary-button[_ngcontent-%COMP%] {\n max-width: 320px;\n margin-right: 0 0.75rem;\n }\n}\n.small-buttons[_ngcontent-%COMP%] .mck-modal-primary-button[_ngcontent-%COMP%] {\n flex: 1;\n width: 100%;\n margin: 0 0.75rem;\n max-width: 134px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .small-buttons[_ngcontent-%COMP%] .mck-modal-primary-button[_ngcontent-%COMP%] {\n max-width: 100% !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .small-buttons[_ngcontent-%COMP%] .mck-modal-primary-button[_ngcontent-%COMP%] {\n max-width: 100% !important;\n }\n}\n.small-buttons[_ngcontent-%COMP%] .mck-modal-secondary-button[_ngcontent-%COMP%] {\n flex: 1;\n width: 100%;\n margin: 0 0.75rem;\n max-width: 134px;\n margin-right: 0 0.75rem;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .small-buttons[_ngcontent-%COMP%] .mck-modal-secondary-button[_ngcontent-%COMP%] {\n max-width: 100% !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .small-buttons[_ngcontent-%COMP%] .mck-modal-secondary-button[_ngcontent-%COMP%] {\n max-width: 100% !important;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJsaWJzL3VpL3NyYy9saWIvbW9kYWwtYnV0dG9uLXJvdy9tb2RhbC1idXR0b24tcm93LmNvbXBvbmVudC5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy91aS9zcmMvbGliL21peGlucy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2Uvbm9kZV9tb2R1bGVzL0Bhbmd1bGFyL21hdGVyaWFsL190aGVtaW5nLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvc3R5bGVzLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvbW9kYWwtYnV0dG9uLXJvdy9tb2RhbC1idXR0b24tcm93LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTJDQTs7RUFBQTtBQXFDQTs7c0JBQUE7QUFhQTtFQUNJLGdCQTlGTTtFQStGTix1QkE3RmM7QUNPbEI7QUR5RkE7O3NCQUFBO0FFa09BOzs7RUFBQTtBRnpSQTs7RUFBQTtBQXFDQTs7c0JBQUE7QUFhQTtFQUNJLGdCQTlGTTtFQStGTix1QkE3RmM7QUN5QmxCO0FEdUVBOztzQkFBQTtBR216Q0Esa0NBQUE7QUF1aURBLDJDQUFBO0FBd0NBLHFCQUFBO0FDOTlGUTtFQUVJLGFBQUE7QUg2Qlo7QUd4QlE7RUFDSSxXQUFBO0VBQ0EsWUFBQTtBSDBCWjtBR3hCWTtFQUNJLFdBQUE7QUgwQmhCO0FHdkJZO0VBQ0ksWUFBQTtBSHlCaEI7QUdyQlE7RUFDSSww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QSx5QkZ6VmM7QUNrcUNsQjtBRzFIUTtFQUNJLFdBQUE7QUg0SFo7QUczSFk7RUZqdEJSLHlCRnpWYztFSTRpQ0YsV0FBQTtFQUNBLFlBQUE7RUFDQSxnQkFBQTtBSDZIaEI7QUd6SFE7RUZ6dEJKLHlCRnpWYztFSW9qQ04sWUFBQTtFQUNBLGdCQUFBO0VBQ0EsZ0JBQUE7QUgySFo7QUd4SFE7RUZodUJKLHlCRnpWYztFRTZWZCxXQUFBO0VBQ0EsWUFBQTtFRTh0QlEsZ0JBQUE7QUgySFo7QUMzckNZO0VFNmpDSjtJRnh0QkEsWUFBQTtJQUNBLGFBQUE7RUQwMUJOO0FBQ0Y7QUNqc0NZO0VFNmpDSjtJRnh0QkEsWUFBQTtJQUNBLGFBQUE7RURnMkJOO0FBQ0Y7QUdwSVE7RUZ0dUJKLHlCRnpWYztFRXVXZCxZQUFBO0VBQ0EsWUFBQTtFRTB0QlEsZ0JBQUE7RUFDQSxnQkFBQTtBSHVJWjtBQzlzQ1k7RUVta0NKO0lGcHRCQSxZQUFBO0lBQ0EsWUFBQTtFRG0yQk47QUFDRjtBQ3B0Q1k7RUVta0NKO0lGcHRCQSxZQUFBO0lBQ0EsWUFBQTtFRHkyQk47QUFDRjtBR2hKUTtFRjd1QkoseUJGelZjO0VJd2tDTixZQUFBO0VBQ0EsZ0JBQUE7QUhrSlo7QUMvdENZO0VFMGtDSjtJQU1RLGdCQUFBO0VIbUpkO0FBQ0Y7QUNwdUNZO0VFMGtDSjtJQU1RLGdCQUFBO0VId0pkO0FBQ0Y7QUdySlE7RUZ2dkJKLHlCRnpWYztFSWtsQ04sWUFBQTtFQUNBLGdCQUFBO0FIdUpaO0FDOXVDWTtFRW9sQ0o7SUFNUSxnQkFBQTtFSHdKZDtBQUNGO0FDbnZDWTtFRW9sQ0o7SUFNUSxnQkFBQTtFSDZKZDtBQUNGO0FHMUpRO0VGandCSix5QkZ6VmM7RUk0bENOLFlBQUE7RUFDQSxnQkFBQTtBSDRKWjtBQzd2Q1k7RUU4bENKO0lBTVEsZ0JBQUE7RUg2SmQ7QUFDRjtBQ2x3Q1k7RUU4bENKO0lBTVEsZ0JBQUE7RUhrS2Q7QUFDRjtBRzlKWTtFRjV3QlIseUJGelZjO0VJdW1DRixZQUFBO0VBQ0EsY0FBQTtBSGdLaEI7QUM1d0NZO0VFeW1DQTtJQUtRLGNBQUE7RUhrS2xCO0FBQ0Y7QUNqeENZO0VFeW1DQTtJQUtRLGNBQUE7RUh1S2xCO0FBQ0Y7QUdwS2dCO0VBQ0ksWUFBQTtFQUNBLGtCQUFBO0FIc0twQjtBR2hLWTtFRjd4QlIseUJGelZjO0VJd25DRixZQUFBO0VBQ0EsY0FBQTtBSGtLaEI7QUMveENZO0VFMG5DQTtJQUtRLGNBQUE7SUFDQSxpQkFBQTtFSG9LbEI7QUFDRjtBQ3J5Q1k7RUUwbkNBO0lBS1EsY0FBQTtJQUNBLGlCQUFBO0VIMEtsQjtBQUNGO0FHdktnQjtFQUNJLFlBQUE7RUFDQSxrQkFBQTtBSHlLcEI7QUduS1k7RUYveUJSLHlCRnpWYztFSTBvQ0YsWUFBQTtFQUNBLGNBQUE7QUhxS2hCO0FDcHpDWTtFRTRvQ0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUh1S2xCO0FBQ0Y7QUMxekNZO0VFNG9DQTtJQUtRLGNBQUE7SUFDQSxpQkFBQTtFSDZLbEI7QUFDRjtBRzFLZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUg0S3BCO0FHeEtnQjtFQUNJLFlBQUE7RUFDQSxrQkFBQTtBSDBLcEI7QUdwS1k7RUZ2MEJSLHlCRnpWYztFSWtxQ0YsWUFBQTtFQUNBLGNBQUE7QUhzS2hCO0FDNzBDWTtFRW9xQ0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUh3S2xCO0FBQ0Y7QUNuMUNZO0VFb3FDQTtJQUtRLGNBQUE7SUFDQSxpQkFBQTtFSDhLbEI7QUFDRjtBRzNLZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUg2S3BCO0FHektnQjtFQUNJLFlBQUE7RUFDQSxrQkFBQTtBSDJLcEI7QUdyS1k7RUYvMUJSLHlCRnpWYztFSTByQ0YsWUFBQTtFQUNBLGNBQUE7QUh1S2hCO0FDdDJDWTtFRTRyQ0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUh5S2xCO0FBQ0Y7QUM1MkNZO0VFNHJDQTtJQUtRLGNBQUE7SUFDQSxpQkFBQTtFSCtLbEI7QUFDRjtBRzVLZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUg4S3BCO0FHMUtnQjtFQUNJLFlBQUE7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O0lBR1EsYUx5Qkk7RUN5b0RkO0FBQ0Y7QUMxckRZO0VHb0JSO0lBR1EsYUx5Qkk7RUM4b0RkO0FBQ0Y7QUlucURBO0VBQ0ksT0FBQTtFQUNBLFdBQUE7RUFDQSxpQkFBQTtBSnNxREo7QUN6c0RZO0VHZ0NaO0lBS1EsZ0JBQUE7RUp3cUROO0FBQ0Y7QUM5c0RZO0VHZ0NaO0lBS1EsZ0JBQUE7RUo2cUROO0FBQ0Y7QUMvc0RZO0VHNEJaO0lBU1EsMEJBQUE7RUo4cUROO0FBQ0Y7QUNwdERZO0VHNEJaO0lBU1EsMEJBQUE7RUptckROO0FBQ0Y7QUlockRBO0VBQ0ksT0FBQTtFQUNBLFdBQUE7RUFDQSxpQkFBQTtBSm1yREo7QUNudURZO0VHNkNaO0lBS1EsZ0JBQUE7SUFDQSx1QkFBQTtFSnFyRE47QUFDRjtBQ3p1RFk7RUc2Q1o7SUFLUSxnQkFBQTtJQUNBLHVCQUFBO0VKMnJETjtBQUNGO0FJdHJESTtFQUNJLE9BQUE7RUFDQSxXQUFBO0VBQ0EsaUJBQUE7RUFDQSxnQkFBQTtBSnlyRFI7QUNsdkRZO0VHcURSO0lBT1EsMEJBQUE7RUowckRWO0FBQ0Y7QUN2dkRZO0VHcURSO0lBT1EsMEJBQUE7RUorckRWO0FBQ0Y7QUk1ckRJO0VBQ0ksT0FBQTtFQUNBLFdBQUE7RUFDQSxpQkFBQTtFQUNBLGdCQUFBO0VBQ0EsdUJBQUE7QUo4ckRSO0FDbndEWTtFR2dFUjtJQVFRLDBCQUFBO0VKK3JEVjtBQUNGO0FDeHdEWTtFR2dFUjtJQVFRLDBCQUFBO0VKb3NEVjtBQUNGIiwiZmlsZSI6ImxpYnMvdWkvc3JjL2xpYi9tb2RhbC1idXR0b24tcm93L21vZGFsLWJ1dHRvbi1yb3cuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIkcHJpbWFyeTogIzFGNDBFNjtcbiRmb3JtLWxhYmVsOiAjMDUxQzJDO1xuJHNlY29uZGFyeS1sYWJlbDogIzc2NzY3NjtcbiRib3JkZXI6ICNCM0IzQjM7XG4kYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDogI0QwRDBEMDtcbiRjaGlwLWNvbG9yOiAjMzMzMzMzO1xuJHBsYWNlaG9sZGVyLWNvbG9yOiAjN0Y3RjdGO1xuJGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4kcGFnZS1iYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuJHNlbGVjdGVkLW9wdGlvbjogI0U2RTZFNjtcbiRjb2xvci1icmFuZC15ZWxsb3c6ICNmZmQwNDg7XG4kbGlnaHQteWVsbG93OiAjZmZmM2NlO1xuJGNvYWNobWFyay10ZXh0OiAjNmY0ZDAwO1xuJGVycm9yLWNvbG9yOiAjRTEyRTQwO1xuJG5vLWZpbHRlcnMtY29sb3I6ICNCQ0JDQkM7XG4kcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I6ICNGNEY0RjQ7XG4kcHJpbWFyeS1oaWdobGlnaHQ6ICMyMjUxRkY7XG4kc2Nyb2xsYmFyLWNvbG9yOiAjNzU3NTc1O1xuXG4kYXZhaWxhYmxlLWNvbG9yOiAjNUQ5RDUyO1xuJGF2YWlsYWJsZS1ieS1yZXF1ZXN0LWNvbG9yOiAjRjVCNTNGO1xuJGluLXVzZS1jb2xvcjogI0Q0NDgzRTtcbiRub3QtYm9va2FibGUtY29sb3I6ICNDQ0NDQ0M7XG5cbiRtb2RhbC1ib2R5LWhlYWRpbmc6ICM0RDRENEQ7XG4kYWxlcnQtb3ZlcmxheS1iZzogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2FjaG1hcmstYmc6ICNFQkVCRjY7XG4kY29hY2htYXJrLWRhcmstdGV4dDogIzFCMUIxOTtcbiRlcnJvci10ZXh0OiAjZmZmO1xuXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuXG4vLyA0cHhcbiRzcGFjaW5nLXNtYWxsZXN0OiAwLjI1cmVtO1xuXG4vLyA4cHhcbiRzcGFjaW5nLXh4c21hbGw6IDAuNXJlbTtcblxuLy8gMTJweFxuJHNwYWNpbmcteHNtYWxsOiAwLjc1cmVtO1xuXG4vLyAxNnB4XG4kc3BhY2luZy1zbWFsbDogMXJlbTtcblxuLy8gMjBweFxuJHNwYWNpbmctc21hbGwtbWVkaXVtOiAxLjI1cmVtO1xuXG4vLyAyNHB4XG4kc3BhY2luZy1tZWRpdW06IDEuNXJlbTtcblxuLy8gMjhweFxuJHNwYWNpbmctbWVkaXVtLWxhcmdlOiAxLjc1cmVtO1xuXG4vLyAzMnB4XG4kc3BhY2luZy1sYXJnZTogMnJlbTtcblxuLy8gNDhweFxuJHNwYWNpbmcteGxhcmdlOiAzcmVtO1xuXG4vLyA2NHB4XG4kc3BhY2luZy14eGxhcmdlOiA0cmVtO1xuXG4vLyA5NnB4XG4kc3BhY2luZy1sYXJnZXN0OiA2cmVtO1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGRldmljZS1tb2JpbGUtc2l6ZTogNDUwcHg7XG4kZGV2aWNlLXRhYmxldC1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFwdG9wLXNpemU6IDEwMjRweDtcblxuJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemU6IDgwMHB4O1xuJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemU6IDEwNDhweDtcbiRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplOiAxMjgwcHg7XG5cblxuOmV4cG9ydCB7XG4gICAgcHJpbWFyeTogJHByaW1hcnk7XG4gICAgc2Vjb25kYXJ5TGFiZWw6ICRzZWNvbmRhcnktbGFiZWw7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4kaWNvbi1zbWFsbDogMTZweDtcbiRpY29uLW1lZGl1bTogMjRweDtcbiRpY29uLWxhcmdlOiAzMnB4O1xuJGljb24teGxhcmdlOiA0OHB4O1xuIiwiLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKiBUaGVtZSBmb3IgdGhlIHJpcHBsZSBlbGVtZW50cy4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF0ZXJpYWwvbm8tcHJlZml4ZXMgKi9cbi8qIHN0eWxlbGludC1lbmFibGUgKi9cbi5tY2staW5oZXJpdC1mb250IHtcbiAgZm9udDogaW5oZXJpdDtcbn1cbi5tY2stY29udGVudC1leHBhbmQsIC5tY2stY29udGVudC1wYWdlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbn1cbi5tY2stY29udGVudC1leHBhbmQtd2lkdGgge1xuICB3aWR0aDogMTAwJTtcbn1cbi5tY2stY29udGVudC1leHBhbmQtaGVpZ2h0IHtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLm1jay1jb250ZW50LXdpdGgtZm9vdGVyLWhlaWdodCB7XG4gIGhlaWdodDogY2FsYygxMDB2aCAtIDU4cHgpO1xufVxuLm1jay1jb250ZW50LWZ1bGwtaGVpZ2h0LCAubWNrLWNvbnRlbnQtcGFnZS1jb250YWluZXIge1xuICBoZWlnaHQ6IDEwMHZoO1xufVxuLm1jay1jb250ZW50LXBhZ2Uge1xuICBiYWNrZ3JvdW5kOiAjRjhGOUZBO1xufVxuLm1jay1jb250ZW50LWJvZHkge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWNvbnRlbnQtYm9keSB7XG4gICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWNvbnRlbnQtYm9keSB7XG4gICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIH1cbn1cbi5tY2stY29udGVudC1ncm91cCB7XG4gIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcbiAgd2lkdGg6IDEwMCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWNvbnRlbnQtZ3JvdXAge1xuICAgIG1heC13aWR0aDogNzU5cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWNvbnRlbnQtZ3JvdXAge1xuICAgIG1heC13aWR0aDogNzU5cHg7XG4gIH1cbn1cbi5tY2stc2hhZG93IHtcbiAgYm94LXNoYWRvdzogMHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtcbn1cbi5tY2stZmxleC0xIHtcbiAgZmxleDogMTtcbn1cbi5tY2stcm93LCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4LCAubWNrLXJvdy1mbG93IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbn1cbi5tY2stcm93Lm1jay1jZW50ZXItanVzdGlmeSwgLm1jay1jZW50ZXItanVzdGlmeS5tY2stcm93LWZsb3csIC5tY2stcm93Lm1jay1jZW50ZXIsIC5tY2stcm93Lm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1yb3cubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93Lm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXJvdy5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXJvdy5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1yb3cubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1yb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1jZW50ZXItc3VmZml4IC5tYXQtZm9ybS1maWVsZC1pbmZpeCwgLm1jay1jZW50ZXIubWNrLXJvdy1mbG93LCAubWNrLXJvdy1mbG93Lm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuLm1jay1yb3cubWNrLWNlbnRlci1hbGlnbiwgLm1jay1jZW50ZXItYWxpZ24ubWNrLXJvdy1mbG93LCAubWNrLXJvdy5tY2stY2VudGVyLCAubWNrLXJvdy5tY2stYnV0dG9uLm1hdC1idXR0b24sIC5tY2stcm93Lm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1yb3cubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1yb3cubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stcm93Lm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXJvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stY2VudGVyLm1jay1yb3ctZmxvdywgLm1jay1yb3ctZmxvdy5tY2stYnV0dG9uLm1hdC1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24ge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLm1jay1yb3cubWNrLXN0cmV0Y2gsIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWNrLXN0cmV0Y2gubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stc3RyZXRjaC5tY2stcm93LWZsb3cge1xuICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbn1cbi5tY2stcm93LWZsb3cge1xuICBmbGV4LXdyYXA6IHdyYXA7XG59XG4ubWNrLXJvdy5tY2stc2Nyb2xsLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1jay1zY3JvbGwubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stc2Nyb2xsLm1jay1yb3ctZmxvdyB7XG4gIG92ZXJmbG93LXg6IHNjcm9sbDtcbn1cbi5tY2stY29sdW1uLCAuYnV0dG9uLXdyYXBwZXIsIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuLm1jay1jb2x1bW4ubWNrLWNlbnRlciwgLm1jay1jZW50ZXIuYnV0dG9uLXdyYXBwZXIsIC5tY2stY29sdW1uLm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LWJ1dHRvbi5idXR0b24td3JhcHBlciwgLm1jay1jb2x1bW4ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbi5idXR0b24td3JhcHBlciwgLm1jay1jb2x1bW4ubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbi5idXR0b24td3JhcHBlciwgLm1jay1jb2x1bW4ubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24uYnV0dG9uLXdyYXBwZXIsIC5tY2stY29sdW1uLm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24uYnV0dG9uLXdyYXBwZXIsIC5tY2stY29sdW1uLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24uYnV0dG9uLXdyYXBwZXIsIC5tY2stY29sdW1uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLmJ1dHRvbi13cmFwcGVyLCAubWNrLWNvbHVtbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbi5idXR0b24td3JhcHBlciwgLm1jay1jb2x1bW4ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLmJ1dHRvbi13cmFwcGVyLCAubWNrLWNvbHVtbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbi5idXR0b24td3JhcHBlciwgLm1jay1jZW50ZXIubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWNrLWNlbnRlci5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1jZW50ZXIubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stY2VudGVyLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stY2VudGVyLm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1jZW50ZXIubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stY2VudGVyLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stY2VudGVyLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stY2VudGVyLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1jZW50ZXIubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1jay1jb2x1bW4ubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXguYnV0dG9uLXdyYXBwZXIsIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1jZW50ZXItc3VmZml4IC5tYXQtZm9ybS1maWVsZC1pbmZpeC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1jZW50ZXItc3VmZml4IC5tYXQtZm9ybS1maWVsZC1pbmZpeC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4ubWNrLWNvbHVtbi5tY2stc3BhY2UtYmV0d2VlbiwgLm1jay1zcGFjZS1iZXR3ZWVuLmJ1dHRvbi13cmFwcGVyLCAubWNrLXNwYWNlLWJldHdlZW4ubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWNrLXNwYWNlLWJldHdlZW4ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stc3BhY2UtYmV0d2Vlbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1zcGFjZS1iZXR3ZWVuLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stc3BhY2UtYmV0d2Vlbi5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1zcGFjZS1iZXR3ZWVuLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLXNwYWNlLWJldHdlZW4ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1zcGFjZS1iZXR3ZWVuLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stc3BhY2UtYmV0d2Vlbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stc3BhY2UtYmV0d2Vlbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuLm1jay1jb2x1bW4ubWNrLXN0cmV0Y2gsIC5tY2stc3RyZXRjaC5idXR0b24td3JhcHBlciwgLm1jay1zdHJldGNoLm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1zdHJldGNoLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXN0cmV0Y2gubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stc3RyZXRjaC5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXN0cmV0Y2gubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stc3RyZXRjaC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1jay1zdHJldGNoLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stc3RyZXRjaC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXN0cmV0Y2gubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXN0cmV0Y2gubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xufVxuLm1jay1jb2x1bW4ubWNrLXNjcm9sbCwgLm1jay1zY3JvbGwuYnV0dG9uLXdyYXBwZXIsIC5tY2stc2Nyb2xsLm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1zY3JvbGwubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stc2Nyb2xsLm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXNjcm9sbC5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXNjcm9sbC5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1zY3JvbGwubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stc2Nyb2xsLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stc2Nyb2xsLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stc2Nyb2xsLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1zY3JvbGwubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgb3ZlcmZsb3cteTogb3ZlcmxheTtcbn1cbi5tY2stY29sdW1uLm1jay1mbGV4LWVuZCwgLm1jay1mbGV4LWVuZC5idXR0b24td3JhcHBlciwgLm1jay1mbGV4LWVuZC5tY2stYnV0dG9uLm1hdC1idXR0b24sIC5tY2stZmxleC1lbmQubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stZmxleC1lbmQubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stZmxleC1lbmQubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1mbGV4LWVuZC5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1mbGV4LWVuZC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1jay1mbGV4LWVuZC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLWZsZXgtZW5kLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stZmxleC1lbmQubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLWZsZXgtZW5kLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24ge1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xufVxuLm1jay1vdmVyZmxvdyB7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLm1jay1ib3JkZXJlZCwgLm1jay1pbnB1dCB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNCM0IzQjM7XG59XG4ubWNrLWJvcmRlcmVkOmhvdmVyLCAubWNrLWlucHV0OmhvdmVyIHtcbiAgYm9yZGVyLWNvbG9yOiAjNDY0NjQ2O1xufVxuLm1jay1ib3JkZXJlZDpmb2N1cywgLm1jay1pbnB1dDpmb2N1cyB7XG4gIGJvcmRlci1jb2xvcjogIzFGNDBFNjtcbn1cbi5tY2stYm9yZGVyZWRbZGlzYWJsZWQ9dHJ1ZV0sIC5tY2staW5wdXRbZGlzYWJsZWQ9dHJ1ZV0ge1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgYm9yZGVyLWNvbG9yOiAjZjBmMGYwO1xuICBjb2xvcjogI2NjYztcbn1cbi5tY2stZGF0ZS1kaXNwbGF5IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiA0M3B4O1xuICBwYWRkaW5nOiAxcmVtIDAuNXJlbTtcbiAgdHJhbnNpdGlvbjogYm9yZGVyIDIwMG1zLCBib3gtc2hhZG93IDIwMG1zO1xufVxuLm1jay1mb3JtLWlucHV0IC5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgcGFkZGluZy1ib3R0b206IDAuNXJlbTtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCB7XG4gIG1pbi13aWR0aDogYXV0byAhaW1wb3J0YW50O1xufVxuLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nLXRvcDogMC43cmVtICFpbXBvcnRhbnQ7XG4gIHBhZGRpbmctYm90dG9tOiAwLjVyZW0gIWltcG9ydGFudDtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gIG1pbi1oZWlnaHQ6IDIuN3JlbTtcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNyk7XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24gLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgbWFyZ2luLXRvcDogMnB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1zZWxlY3QtZHJvcGRvd24tYnV0dG9uIC5tYXQtZm9ybS1maWVsZC1mbGV4IHtcbiAgICBwYWRkaW5nLWxlZnQ6IDAuNXJlbTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24gLm1hdC1mb3JtLWZpZWxkLWZsZXgge1xuICAgIHBhZGRpbmctbGVmdDogMC41cmVtO1xuICAgIHBhZGRpbmctcmlnaHQ6IDAuNXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1zZWxlY3QtZHJvcGRvd24tYnV0dG9uIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24gLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICBoZWlnaHQ6IDJyZW07XG4gICAgbWluLWhlaWdodDogMnJlbTtcbiAgfVxuICAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24gLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stc2VsZWN0LWRyb3Bkb3duLWJ1dHRvbiAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgIGhlaWdodDogMnJlbTtcbiAgICBtaW4taGVpZ2h0OiAycmVtO1xuICB9XG4gIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stc2VsZWN0LWRyb3Bkb3duLWJ1dHRvbiAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7XG4gICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcbiAgfVxufVxuLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1hdC1zIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuLm1jay1mb3JtLWlucHV0IG1hdC1zZWxlY3Qge1xuICBtYXJnaW4tdG9wOiAwLjJyZW07XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LXNlbGVjdCAubWF0LXNlbGVjdC1hcnJvdyB7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtc2VsZWN0IC5tYXQtc2VsZWN0LXZhbHVlID4gLm1hdC1zZWxlY3QtdmFsdWUtdGV4dCA+IHNwYW4ge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbi5tY2stZm9ybS1pbnB1dCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Lm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsIC5tY2stZm9ybS1pbnB1dCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcCwgLm1jay1mb3JtLWlucHV0IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kIHtcbiAgYm9yZGVyLWNvbG9yOiAjQjNCM0IzO1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cbi5tY2stZm9ybS1pbnB1dCAuYXZhaWxhYmxlIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCwgLm1jay1mb3JtLWlucHV0IC5hdmFpbGFibGUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsIC5tY2stZm9ybS1pbnB1dCAuYXZhaWxhYmxlIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kIHtcbiAgYm9yZGVyLWNvbG9yOiAjM2FhNTM3O1xufVxuLm1jay1mb3JtLWlucHV0IC5ib29rZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LCAubWNrLWZvcm0taW5wdXQgLmJvb2tlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcCwgLm1jay1mb3JtLWlucHV0IC5ib29rZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICBib3JkZXItY29sb3I6ICNlMTJlNDE7XG59XG4ubWNrLWZvcm0taW5wdXQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LCAubWNrLWZvcm0taW5wdXQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsIC5tY2stZm9ybS1pbnB1dCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gIGJvcmRlci1jb2xvcjogIzFGNDBFNjtcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4ubWNrLWZvcm0taW5wdXQgPiBtYXQtZm9ybS1maWVsZC5tY2stZXJyb3IgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICBwYWRkaW5nLWJvdHRvbTogMDtcbn1cbi5tY2stZm9ybS1pbnB1dCA+IG1hdC1mb3JtLWZpZWxkLm1jay1lcnJvciAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Lm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsIC5tY2stZm9ybS1pbnB1dCA+IG1hdC1mb3JtLWZpZWxkLm1jay1lcnJvciAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcCwgLm1jay1mb3JtLWlucHV0ID4gbWF0LWZvcm0tZmllbGQubWNrLWVycm9yIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kIHtcbiAgYm9yZGVyLWNvbG9yOiAjRTEyRTQwO1xufVxuLm1jay1mb3JtLWlucHV0IG1jay1jbG9zZS1pY29uLm1hdC1jaGlwLXJlbW92ZS5tYXQtY2hpcC1yZW1vdmUge1xuICBvcGFjaXR5OiAxO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtbGFiZWwge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtcmFkaW8tYnV0dG9uIHtcbiAgbWFyZ2luLXJpZ2h0OiAxcmVtO1xufVxuLm1jay1mb3JtLWlucHV0IC5tYXQtcmFkaW8tbGFiZWwtY29udGVudCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbi5tY2stZm9ybS1pbnB1dCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSB7XG4gIGJvcmRlci1jb2xvcjogIzFGNDBFNiAhaW1wb3J0YW50O1xuICBib3JkZXItd2lkdGg6IDFweCAhaW1wb3J0YW50O1xufVxuLm1jay1mb3JtLWlucHV0IC5tYXQtcmFkaW8taW5uZXItY2lyY2xlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFGNDBFNiAhaW1wb3J0YW50O1xufVxuLm1jay1mb3JtLWlucHV0IG1hdC1yYWRpby1ncm91cCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGZsZXgtd3JhcDogd3JhcDtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtcmFkaW8tZ3JvdXAgPiBtYXQtcmFkaW8tYnV0dG9uOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tcmlnaHQ6IDA7XG59XG4ubWNrLWZvcm0taW5wdXQtY29udGFpbmVyID4gLm1jay1mb3JtLWlucHV0LCAubWNrLWZvcm0taW5wdXQtY29udGFpbmVyID4gbWNrLXNlbGVjdCB7XG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stZm9ybS1pbnB1dC1jb250YWluZXIgPiAubWNrLWZvcm0taW5wdXQsIC5tY2stZm9ybS1pbnB1dC1jb250YWluZXIgPiBtY2stc2VsZWN0IHtcbiAgICBtYXJnaW4tYm90dG9tOiAxLjc1cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogMTA0OHB4KSB7XG4gIC5tY2stZm9ybS1pbnB1dC1jb250YWluZXIgPiAubWNrLWZvcm0taW5wdXQsIC5tY2stZm9ybS1pbnB1dC1jb250YWluZXIgPiBtY2stc2VsZWN0IHtcbiAgICBtYXJnaW4tYm90dG9tOiAxLjc1cmVtO1xuICB9XG59XG4ubWNrLWZvcm0taW5wdXQtY29udGFpbmVyIC5tY2stcmFkaW8tc2VsZWN0IHtcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stZm9ybS1pbnB1dC1jb250YWluZXIgLm1jay1yYWRpby1zZWxlY3Qge1xuICAgIG1hcmdpbi1ib3R0b206IDEuNXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDEwNDhweCkge1xuICAubWNrLWZvcm0taW5wdXQtY29udGFpbmVyIC5tY2stcmFkaW8tc2VsZWN0IHtcbiAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG4gIH1cbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcCB7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgbWluLWhlaWdodDogMS41cmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzMzMzO1xuICBwYWRkaW5nLXRvcDogMC4yNXJlbTtcbiAgcGFkZGluZy1ib3R0b206IDAuMjVyZW07XG4gIHBhZGRpbmctbGVmdDogMC41cmVtO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLWZvcm0taW5wdXQgbWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LXN0YW5kYXJkLWNoaXAge1xuICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1mb3JtLWlucHV0IG1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwIHtcbiAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgfVxufVxuLm1jay1mb3JtLWlucHV0IG1hdC1jaGVja2JveC5tYXQtY2hlY2tib3gubWF0LWNoZWNrYm94IHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogMzAwO1xuICBjb2xvcjogYmxhY2s7XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWNoZWNrYm94IGRpdi5tYXQtY2hlY2tib3gtYmFja2dyb3VuZC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxRjQwRTY7XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWNoZWNrYm94IGRpdi5tYXQtY2hlY2tib3gtYmFja2dyb3VuZC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZC5tY2stY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWRpc2FibGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0QwRDBEMDtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtY2hlY2tib3gubWNrLWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1kaXNhYmxlZCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgY29sb3I6IGJsYWNrO1xuICBjb2xvcjogI0IzQjNCMztcbn1cbi5tY2stYm9yZGVybGVzcyB7XG4gIGJvcmRlcjogbm9uZTtcbn1cbi5tY2stYm9yZGVybGVzczpob3ZlciwgLm1jay1ib3JkZXJsZXNzOmZvY3VzLCAubWNrLWJvcmRlcmxlc3M6ZGlzYWJsZWQge1xuICBib3JkZXI6IG5vbmU7XG59XG4ubWNrLXNlbGVjdC1wYW5lbCB7XG4gIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDtcbiAgYm9yZGVyLXJhZGl1czogdW5zZXQgIWltcG9ydGFudDtcbiAgbWFyZ2luLXRvcDogMzVweCAhaW1wb3J0YW50O1xuICBtYXJnaW4tbGVmdDogNXB4O1xufVxuLm1jay1zZWxlY3QtcGFuZWwgbWF0LW9wdGlvbiB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgcGFkZGluZy1yaWdodDogMDtcbn1cbi5tY2stc2VsZWN0LXBhbmVsIG1hdC1vcHRpb24ubWF0LW9wdGlvbi10ZXh0IHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuLm1jay1zZWxlY3QtcGFuZWwubWNrLW1hcmdpbi10b3Age1xuICBtYXJnaW4tdG9wOiAxLjVyZW0gIWltcG9ydGFudDtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwubWF0LWF1dG9jb21wbGV0ZS1wYW5lbC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIHtcbiAgdG9wOiAtMTBweDtcbiAgbWF4LWhlaWdodDogMjc4cHg7XG59XG4ubWNrLWNoZWNrYm94LXBhbmVsIG1hdC1vcHRpb24ubWNrLXRydW5jYXRlZCAubWF0LWNoZWNrYm94LWxhYmVsLm1hdC1jaGVja2JveC1sYWJlbCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICAtd2Via2l0LWxpbmUtY2xhbXA6IDI7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG59XG4ubWNrLWNoZWNrYm94LXBhbmVsIG1hdC1vcHRpb24ge1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIHBhZGRpbmctcmlnaHQ6IDA7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBoZWlnaHQ6IHVuc2V0O1xuICBtaW4taGVpZ2h0OiAzNnB4O1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIC5tYXQtY2hlY2tib3gtbGFiZWwubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgZmxleDogMTtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiAubWF0LWNoZWNrYm94LWxhYmVsLm1hdC1jaGVja2JveC1sYWJlbCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgY29sb3I6IGJsYWNrO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uLm1jay1jaGVja2JveC1ncm91cC1oZWFkZXIgLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICBmb250LXdlaWdodDogNTAwO1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uLm1jay1jaGVja2JveC1ncm91cC1jaGlsZCB7XG4gIG1hcmdpbi1sZWZ0OiAycmVtO1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIG1hdC1jaGVja2JveCBsYWJlbC5tYXQtY2hlY2tib3gtbGF5b3V0IHtcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmctbGVmdDogMTZweDtcbiAgcGFkZGluZy1yaWdodDogMTZweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiBtYXQtY2hlY2tib3ggbGFiZWwubWF0LWNoZWNrYm94LWxheW91dCB7XG4gICAgcGFkZGluZy1sZWZ0OiAycHg7XG4gICAgcGFkZGluZy1yaWdodDogMnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIG1hdC1jaGVja2JveCBsYWJlbC5tYXQtY2hlY2tib3gtbGF5b3V0IHtcbiAgICBwYWRkaW5nLWxlZnQ6IDJweDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAycHg7XG4gIH1cbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiBtYXQtY2hlY2tib3ggZGl2Lm1hdC1jaGVja2JveC1mcmFtZS5tYXQtY2hlY2tib3gtZnJhbWUge1xuICBib3JkZXI6IDFweCBzb2xpZCAjQjNCM0IzO1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIG1hdC1jaGVja2JveC5tYXQtY2hlY2tib3gtY2hlY2tlZCBkaXYubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMUY0MEU2O1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIG1hdC1jaGVja2JveC5tY2stY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWRpc2FibGVkIGRpdi5tYXQtY2hlY2tib3gtYmFja2dyb3VuZC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNEMEQwRDA7XG59XG4ubWNrLWNoZWNrYm94LXBhbmVsIG1hdC1vcHRpb24gbWF0LWNoZWNrYm94Lm1jay1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtZGlzYWJsZWQgLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIGNvbG9yOiBibGFjaztcbiAgY29sb3I6ICNCM0IzQjM7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG4ubWNrLWNoZWNrYm94LXBhbmVsIG1hdC1vcHRpb24gbWF0LWNoZWNrYm94IC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyIHtcbiAgd2lkdGg6IDEuMjVyZW07XG4gIGhlaWdodDogMS4yNXJlbTtcbn1cbi5tY2stc2VsZWN0LW9wdGlvbi1zZWxlY3RlZCB7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgY29sb3I6IGJsYWNrO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xufVxuLm1jay1zZWxlY3Qtb3B0aW9uLXNlbGVjdGVkIC5tY2stc3BhY2VyLWNvbnRlbnQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMUY0MEU2O1xuICBtYXJnaW4tcmlnaHQ6IDAuNzVyZW07XG59XG4ubWNrLXNlbGVjdC1vcHRpb24tdW5zZWxlY3RlZCB7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbi5tY2stc2VsZWN0LW9wdGlvbi11bnNlbGVjdGVkLm1jay1pZ25vcmUtZGlzYWJsZWQge1xuICBjb2xvcjogYmxhY2s7XG59XG4ubWNrLXNlbGVjdC1vcHRpb24tdW5zZWxlY3RlZCAubWNrLXNwYWNlci1jb250ZW50IHtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICBtYXJnaW4tcmlnaHQ6IDAuNzVyZW07XG59XG4ubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgaGVpZ2h0OiA0MHB4O1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBib3JkZXI6IG5vbmU7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24ge1xuICAgIGhlaWdodDogNDhweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24ge1xuICAgIGhlaWdodDogNDhweDtcbiAgfVxufVxuLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBwYWRkaW5nLWxlZnQ6IDAuMjVyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDAuMjVyZW07XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgfVxufVxuLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydCwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0LCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stcHJpbWFyeS1idXR0b24ge1xuICBoZWlnaHQ6IDMycHg7XG4gIG1pbi13aWR0aDogODNweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydCwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgbWluLXdpZHRoOiAxNTVweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydCwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgbWluLXdpZHRoOiAxNTVweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0LCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0LCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0LCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0LCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICB9XG59XG4ubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZSwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2stcHJpbWFyeS1idXR0b24ge1xuICBoZWlnaHQ6IDMycHg7XG4gIHdpZHRoOiAzMnB4O1xuICBtaW4td2lkdGg6IDMycHg7XG4gIHBhZGRpbmc6IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZSwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2stcHJpbWFyeS1idXR0b24ge1xuICAgIHdpZHRoOiA0MHB4O1xuICAgIGhlaWdodDogNDBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZS5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZSwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgd2lkdGg6IDQwcHg7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICB9XG59XG4ubWNrLXByaW1hcnktYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxRjQwRTY7XG59XG4ubWNrLXByaW1hcnktYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbltkaXNhYmxlZF0sIC5tY2stcHJpbWFyeS1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLmRpc2FibGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0QwRDBEMDtcbiAgY29sb3I6ICM3NTc1NzU7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG4ubWNrLXByaW1hcnktYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbltkaXNhYmxlZF0gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1jay1wcmltYXJ5LWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24uZGlzYWJsZWQgPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gIGNvbG9yOiAjNzU3NTc1O1xufVxuLm1jay1wcmltYXJ5LWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gIGNvbG9yOiB3aGl0ZTtcbn1cbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgYm9yZGVyOiAxcHggc29saWQgIzIyNTFGRjtcbiAgY29sb3I6ICMyMjUxRkY7XG59XG4ubWNrLXNlY29uZGFyeS1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbltkaXNhYmxlZF0sIC5tY2stc2Vjb25kYXJ5LWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLmRpc2FibGVkIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgY29sb3I6ICMzMzMzMzM7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG4ubWNrLXNlY29uZGFyeS1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG59XG4ubWNrLXNlY29uZGFyeS1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICBjb2xvcjogIzMzMzMzMztcbn1cbi5tY2std2FybmluZy1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZDA0ODtcbn1cbi5tY2std2FybmluZy1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICBjb2xvcjogYmxhY2s7XG59XG4ubWNrLXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ge1xuICBib3JkZXI6IDJweCBzb2xpZCAjQjNCM0IzO1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgcGFkZGluZy1sZWZ0OiAxLjc1cmVtO1xuICBwYWRkaW5nLXJpZ2h0OiAxLjc1cmVtO1xufVxuLm1jay1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydCB7XG4gIGhlaWdodDogMzJweDtcbiAgbWluLXdpZHRoOiA4M3B4O1xuICBwYWRkaW5nLWxlZnQ6IDAuMjVyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDAuMjVyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0IHtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgbWluLXdpZHRoOiAxNTVweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQge1xuICAgIGhlaWdodDogNDhweDtcbiAgICBtaW4td2lkdGg6IDE1NXB4O1xuICB9XG59XG4ubWNrLXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnkge1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLWNvbG9yOiAjMUY0MEU2O1xuICBjb2xvcjogIzFGNDBFNjtcbn1cbi5tY2stc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stdGhpbi1ib3JkZXItbGlnaHQge1xuICBib3JkZXItY29sb3I6ICNEMEQwRDA7XG4gIGJvcmRlci13aWR0aDogMXB4O1xufVxuLm1jay1zdHJva2VkLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBjb2xvcjogIzFGNDBFNjtcbn1cbi5tY2stdG9nZ2xlLWJ1dHRvbiB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgYm9yZGVyOiAxcHggc29saWQgI0IzQjNCMztcbiAgYm9yZGVyLWNvbG9yOiAjRDBEMEQwO1xuICBtaW4td2lkdGg6IDU5cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay10b2dnbGUtYnV0dG9uIHtcbiAgICBtaW4td2lkdGg6IDEzMnB4O1xuICAgIHBhZGRpbmctdG9wOiAwLjVyZW07XG4gICAgcGFkZGluZy1ib3R0b206IDAuNXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stdG9nZ2xlLWJ1dHRvbiB7XG4gICAgbWluLXdpZHRoOiAxMzJweDtcbiAgICBwYWRkaW5nLXRvcDogMC41cmVtO1xuICAgIHBhZGRpbmctYm90dG9tOiAwLjVyZW07XG4gIH1cbn1cbi5tY2stdG9nZ2xlLWJ1dHRvbi1zZWxlY3RlZCB7XG4gIGNvbG9yOiAjMUY0MEU2O1xufVxuLm1jay1kYXRlLXBpY2tlciB7XG4gIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1kYXRlLXBpY2tlciB7XG4gICAgbWF4LXdpZHRoOiAyM3JlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stZGF0ZS1waWNrZXIge1xuICAgIG1heC13aWR0aDogMjNyZW07XG4gIH1cbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAuaGVhZGVyLmhlYWRlciB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6ICMwNTFDMkM7XG4gIG1hcmdpbi10b3A6IDEuMjVyZW07XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmhlYWRlci5oZWFkZXIgPiAuYXJyb3cuYXJyb3cge1xuICB3aWR0aDogMi4zNzVyZW07XG4gIGhlaWdodDogMnJlbTtcbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAuaGVhZGVyLmhlYWRlciA+IC5hcnJvdy5hcnJvdyA+IC5pY29uLmljb24ge1xuICB3aWR0aDogMXJlbTtcbiAgaGVpZ2h0OiAxcmVtO1xufVxuLm1jay1kYXRlLXBpY2tlciA+IC5oZWFkZXIuaGVhZGVyID4gLmFycm93LmFycm93ID4gLm5leHQubmV4dCB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9hcnJvdy1mb3J3YXJkLnN2Z1wiKTtcbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAuaGVhZGVyLmhlYWRlciA+IC5hcnJvdy5hcnJvdyA+IC5wcmV2aW91cy5wcmV2aW91cyB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9hcnJvdy1iYWNrd2FyZC5zdmdcIik7XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLm1vbnRoIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuLm1jay1kYXRlLXBpY2tlciA+IC53ZWVrIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogNTAwO1xuICBjb2xvcjogIzc2NzY3Njtcbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAuYm9keSB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAuYm9keSA+IGRpdiA+IGRpdi5kYXRlID4gLmRvdCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmJvZHkgPiBkaXYgPiBkaXYuZGF0ZS5kaXNhYmxlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBjb2xvcjogIzc2NzY3Njtcbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAuYm9keSA+IGRpdiA+IGRpdi5kYXRlLmFjdGl2ZSB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxRjQwRTY7XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmJvZHkgPiBkaXYgPiBkaXYuZGF0ZS5ub24tbW9udGgge1xuICBjb2xvcjogIzc2NzY3Njtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stc3BhY2VyLWNvbnRlbnQtY29sbGFwc2UtdGFibGV0IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1zcGFjZXItY29udGVudC1jb2xsYXBzZS10YWJsZXQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1zcGFjZXItY29udGVudC1jb2xsYXBzZS10YWJsZXQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkgYW5kIChtYXgtd2lkdGg6IDEwNDhweCkge1xuICAubWNrLXNwYWNlci1jb250ZW50LWNvbGxhcHNlLXRhYmxldCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1zcGFjZXItY29udGVudC1leHBhbmQtbW9iaWxlIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1zcGFjZXItY29udGVudC1leHBhbmQtbW9iaWxlIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4ubWNrLXNwYWNlci1jb250ZW50LWRpdmlkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xufVxuLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsIHtcbiAgYm94LXNoYWRvdzogMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI0U2RTZFNjtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNFNkU2RTY7XG59XG4ubWNrLWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWNrLWV4cGFuZGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDtcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tY2stZXhwYW5kZWQgLm1jay1jb2xsYXBzZS1pY29uIHtcbiAgd2lkdGg6IDI0cHg7XG4gIGhlaWdodDogMjRweDtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwibGlicy91aS9zcmMvbGliL2ljb25zL2NoZXZyb24tY2xvc2Uuc3ZnXCIpO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWNrLWV4cGFuZGVkIC5tY2stY29sbGFwc2UtaWNvbiB7XG4gICAgd2lkdGg6IDQ4cHg7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9jaGV2cm9uLWNsb3NlLWxhcmdlLnN2Z1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWNrLWV4cGFuZGVkIC5tY2stY29sbGFwc2UtaWNvbiB7XG4gICAgd2lkdGg6IDQ4cHg7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9jaGV2cm9uLWNsb3NlLWxhcmdlLnN2Z1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIH1cbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1ib2R5IHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xufVxuLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWJvZHkgPiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ge1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgY29sb3I6IGJsYWNrO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBwYWRkaW5nLWJvdHRvbTogMC41cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWJvZHkgPiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ge1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS42O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWJvZHkgPiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ge1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS42O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtYm9keSA+IC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbi5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtYm9keSA+IC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbi5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIH1cbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsIG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIHtcbiAgcGFkZGluZy1sZWZ0OiAxcmVtO1xuICBwYWRkaW5nLXJpZ2h0OiAxcmVtO1xufVxuLm1jay1leHBhbnNpb24tcGFuZWwgbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgPiBzcGFuLm1hdC1jb250ZW50IHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsIG1hdC1wYW5lbC10aXRsZSB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgY29sb3I6IGJsYWNrO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xufVxuLm1jay1leHBhbnNpb24tcGFuZWwgLm1jay1jb2xsYXBzZS1pY29uIHtcbiAgd2lkdGg6IDI0cHg7XG4gIGhlaWdodDogMjRweDtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwibGlicy91aS9zcmMvbGliL2ljb25zL2NoZXZyb24tb3Blbi5zdmdcIik7XG4gIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbiAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjVzIGVhc2U7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWV4cGFuc2lvbi1wYW5lbCAubWNrLWNvbGxhcHNlLWljb24ge1xuICAgIHdpZHRoOiA0OHB4O1xuICAgIGhlaWdodDogNDhweDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvY2hldnJvbi1vcGVuLWxhcmdlLnN2Z1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWV4cGFuc2lvbi1wYW5lbCAubWNrLWNvbGxhcHNlLWljb24ge1xuICAgIHdpZHRoOiA0OHB4O1xuICAgIGhlaWdodDogNDhweDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvY2hldnJvbi1vcGVuLWxhcmdlLnN2Z1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIH1cbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsIC5tY2stY29sbGFwc2UtaWNvbi5leHBhbmRlZCB7XG4gIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG59XG4ubWNrLWljb24tZmlsbC1vcGVuIHtcbiAgZmlsbDogIzFGNDBFNjtcbn1cbi5tY2staWNvbi1maWxsLWNsb3NlIHtcbiAgZmlsbDogIzc2NzY3Njtcbn1cbi5tY2staWNvbi1maWxsLWJsYWNrIHtcbiAgZmlsbDogYmxhY2s7XG4gIHN0cm9rZTogYmxhY2s7XG59XG4ubWNrLWljb24tZmlsbC13aGl0ZSB7XG4gIGZpbGw6IHdoaXRlO1xuICBzdHJva2U6IHdoaXRlO1xufVxuLm1jay1pY29uLWZpbGwtZ3JheSB7XG4gIGZpbGw6ICMzMzMzMzM7XG4gIHN0cm9rZTogIzMzMzMzMztcbn1cbi5tY2stbWluIHtcbiAgbWF4LXdpZHRoOiA1ODFweCAhaW1wb3J0YW50O1xuICB3aWR0aDogODB2dztcbiAgbWF4LWhlaWdodDogMTAwdmg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLW1pbiB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1pbiAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbWluIHtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICB9XG4gIC5tY2stbWluIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG4ubWNrLW5vZXhwYW5kIHtcbiAgbWF4LXdpZHRoOiA1ODFweCAhaW1wb3J0YW50O1xuICB3aWR0aDogODB2dyAhaW1wb3J0YW50O1xuICBtYXgtaGVpZ2h0OiAxMDB2aDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stbm9leHBhbmQge1xuICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gMzJweCkgIWltcG9ydGFudDtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbm9leHBhbmQge1xuICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gMzJweCkgIWltcG9ydGFudDtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxufVxuLm1jay1tb2RhbCB7XG4gIG1heC13aWR0aDogODAwcHggIWltcG9ydGFudDtcbiAgd2lkdGg6IDgwdnc7XG4gIG1heC1oZWlnaHQ6IDEwMHZoO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1tb2RhbCB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1tb2RhbCB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG4ubWNrLW1vZGFsLW1pbmkge1xuICBtYXgtd2lkdGg6IDU4MHB4ICFpbXBvcnRhbnQ7XG4gIG1heC1oZWlnaHQ6IDEwMHZoO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1tb2RhbC1taW5pIHtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICB9XG4gIC5tY2stbW9kYWwtbWluaSAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwtbWluaSB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsLW1pbmkgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi5tY2stbW9kYWwtc3VydmV5IHtcbiAgbWF4LXdpZHRoOiA2OTFweCAhaW1wb3J0YW50O1xuICBtYXgtaGVpZ2h0OiAxMDB2aDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stbW9kYWwtc3VydmV5IC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1tb2RhbC1zdXJ2ZXkgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi5tY2stbW9kYWwtd2lkZSB7XG4gIG1heC13aWR0aDogMTAyNHB4ICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiAxMDB2dztcbiAgaGVpZ2h0OiA5NXZoO1xuICBtYXgtaGVpZ2h0OiAxMDB2aDtcbn1cbi5tY2stbW9kYWwtd2lkZSAubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0Y4RjlGQTtcbiAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm1jay1tb2RhbC13aWRlIC5tYXQtZGlhbG9nLWNvbnRlbnQgLm1hdC1pY29uLWJ1dHRvbltuYW1lPUNsb3NlQnV0dG9uXSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcmlnaHQ6IDMycHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLW1vZGFsLXdpZGUgLm1hdC1kaWFsb2ctY29udGVudCAubWF0LWljb24tYnV0dG9uW25hbWU9Q2xvc2VCdXR0b25dIC5jbG9zZS1pbWFnZSB7XG4gICAgaGVpZ2h0OiAzMnB4O1xuICAgIHdpZHRoOiAzMnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1tb2RhbC13aWRlIC5tYXQtZGlhbG9nLWNvbnRlbnQgLm1hdC1pY29uLWJ1dHRvbltuYW1lPUNsb3NlQnV0dG9uXSAuY2xvc2UtaW1hZ2Uge1xuICAgIGhlaWdodDogMzJweDtcbiAgICB3aWR0aDogMzJweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1tb2RhbC13aWRlIHtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICB9XG4gIC5tY2stbW9kYWwtd2lkZSAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwtd2lkZSB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsLXdpZGUgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi5tY2stbW9kYWwtd2lkZS1tYW5hZ2UtYm9va2luZyB7XG4gIG1heC13aWR0aDogMTI1MHB4ICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiAxMDB2dztcbiAgbWF4LWhlaWdodDogOTV2aDtcbn1cbi5tY2stbW9kYWwtd2lkZS1tYW5hZ2UtYm9va2luZyAubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0Y4RjlGQTtcbiAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm1jay1tb2RhbC13aWRlLW1hbmFnZS1ib29raW5nIC5tYXQtZGlhbG9nLWNvbnRlbnQgLm1hdC1pY29uLWJ1dHRvbltuYW1lPUNsb3NlQnV0dG9uXSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcmlnaHQ6IDMycHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLW1vZGFsLXdpZGUtbWFuYWdlLWJvb2tpbmcgLm1hdC1kaWFsb2ctY29udGVudCAubWF0LWljb24tYnV0dG9uW25hbWU9Q2xvc2VCdXR0b25dIC5jbG9zZS1pbWFnZSB7XG4gICAgaGVpZ2h0OiAzMnB4O1xuICAgIHdpZHRoOiAzMnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1tb2RhbC13aWRlLW1hbmFnZS1ib29raW5nIC5tYXQtZGlhbG9nLWNvbnRlbnQgLm1hdC1pY29uLWJ1dHRvbltuYW1lPUNsb3NlQnV0dG9uXSAuY2xvc2UtaW1hZ2Uge1xuICAgIGhlaWdodDogMzJweDtcbiAgICB3aWR0aDogMzJweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1tb2RhbC13aWRlLW1hbmFnZS1ib29raW5nIHtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICB9XG4gIC5tY2stbW9kYWwtd2lkZS1tYW5hZ2UtYm9va2luZyAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwtd2lkZS1tYW5hZ2UtYm9va2luZyB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsLXdpZGUtbWFuYWdlLWJvb2tpbmcgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stYWxlcnQge1xuICAgIG1heC13aWR0aDogMTAwdncgIWltcG9ydGFudDtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgbWFyZ2luLWxlZnQ6IDFyZW07XG4gICAgbWFyZ2luLXJpZ2h0OiAxcmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1hbGVydCB7XG4gICAgbWF4LXdpZHRoOiAxMDB2dyAhaW1wb3J0YW50O1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBtYXJnaW4tbGVmdDogMXJlbTtcbiAgICBtYXJnaW4tcmlnaHQ6IDFyZW07XG4gIH1cbn1cbi5tY2stYWxlcnQtYmFja2Ryb3Age1xuICBiYWNrZ3JvdW5kOiByZ2JhKDUsIDI4LCA0NCwgMC44NSk7XG59XG4ubWNrLXNsaWRlLXRvZ2dsZS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkOm5vdCgubWF0LWRpc2FibGVkKSAubWF0LXNsaWRlLXRvZ2dsZS1iYXIubWF0LXNsaWRlLXRvZ2dsZS1iYXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjI1MUZGO1xufVxuLm1jay1zbGlkZS10b2dnbGUubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIubWF0LXNsaWRlLXRvZ2dsZS10aHVtYiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xufVxuLm1jay1zbGlkZS10b2dnbGUubWF0LXNsaWRlLXRvZ2dsZSB7XG4gIGhlaWdodDogYXV0bztcbn1cbi5tY2stc2xpZGUtdG9nZ2xlIC5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnQubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50IHtcbiAgZmxleDogMTtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgLXdlYmtpdC1saW5lLWNsYW1wOiAyO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xufVxuLm1jay1zbGlkZS10b2dnbGUgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIubWF0LXNsaWRlLXRvZ2dsZS10aHVtYiB7XG4gIHdpZHRoOiAxNHB4O1xuICBoZWlnaHQ6IDE0cHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDUwJSwgNTAlKTtcbn1cbi5tY2stc2xpZGUtdG9nZ2xlIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLWNvbnRhaW5lci5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLWNvbnRhaW5lciB7XG4gIHRvcDogLTRweDtcbiAgbGVmdDogLTRweDtcbn1cbi5tY2stc2xpZGUtdG9nZ2xlIC5tYXQtc2xpZGUtdG9nZ2xlLWJhci5tYXQtc2xpZGUtdG9nZ2xlLWJhciB7XG4gIGhlaWdodDogMjBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0QwRDBEMDtcbiAgYm9yZGVyLXJhZGl1czogMjBweDtcbn1cbi5tY2stc2tlbGV0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xufVxuLm1jay1za2VsZXRvbi1jaGVja2JveCB7XG4gIGZsb2F0OiBsZWZ0O1xufVxuLm1jay1za2VsZXRvbi1jaGVja2JveCA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgd2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMjBweDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbi5tY2stc2tlbGV0b24taGVhZGVyID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICB3aWR0aDogMTAwdnc7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIG1heC13aWR0aDogMjE1cHg7XG59XG4ubWNrLXNrZWxldG9uLWltYWdlID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICB3aWR0aDogODFweDtcbiAgaGVpZ2h0OiA4MnB4O1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogODAwcHgpIHtcbiAgLm1jay1za2VsZXRvbi1pbWFnZSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICB3aWR0aDogMjE5cHg7XG4gICAgaGVpZ2h0OiAxMTlweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDEwNDhweCkge1xuICAubWNrLXNrZWxldG9uLWltYWdlID4gLmxvYWRlci5sb2FkZXIge1xuICAgIHdpZHRoOiAyMTlweDtcbiAgICBoZWlnaHQ6IDExOXB4O1xuICB9XG59XG4ubWNrLXNrZWxldG9uLXN0YXR1cyA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgd2lkdGg6IDExN3B4O1xuICBoZWlnaHQ6IDc4cHg7XG4gIG1hcmdpbi10b3A6IDEwcHg7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA4MDBweCkge1xuICAubWNrLXNrZWxldG9uLXN0YXR1cyA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogMTA0OHB4KSB7XG4gIC5tY2stc2tlbGV0b24tc3RhdHVzID4gLmxvYWRlci5sb2FkZXIge1xuICAgIHdpZHRoOiAxMTdweDtcbiAgICBoZWlnaHQ6IDc4cHg7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS0xID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDIzcHg7XG4gIG1heC13aWR0aDogMTc2cHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtMSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDIxOXB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTEgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAyMTlweDtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTIgPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIGhlaWdodDogMThweDtcbiAgbWF4LXdpZHRoOiAxNjVweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS0yID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogMTg5cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtMiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDE4OXB4O1xuICB9XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtMyA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgaGVpZ2h0OiAxOHB4O1xuICBtYXgtd2lkdGg6IDE0N3B4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTMgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAxODlweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS0zID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogMTg5cHg7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS0zMHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTMwcC10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogMzAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTMwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtMzBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAzMCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtMzBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS0zMHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDMwJTtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTMwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS0zMHAtdGhpbi10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDE2cHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbi5tY2stc2tlbGV0b24tbGluZS00NXAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTQ1cC10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogNDUlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTQ1cCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNDVwLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA0NSU7XG4gICAgbWFyZ2luLXJpZ2h0OiA0NSU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtNDVwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS00NXAtdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDQ1JTtcbiAgICBtYXJnaW4tcmlnaHQ6IDQ1JTtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTQ1cC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS00NXAtdGhpbi10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDE2cHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbi5tY2stc2tlbGV0b24tbGluZS01MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTUwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIGhlaWdodDogMThweDtcbiAgbWF4LXdpZHRoOiA1MCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtNTBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogNTAlO1xuICAgIG1hcmdpbi1yaWdodDogNDUlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTUwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTUwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDUwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDQ1JTtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTUwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpbi10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpY2stdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpbi10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaWNrLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDMycHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbi5tY2stc2tlbGV0b24tbGluZS02MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTYwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIGhlaWdodDogMThweDtcbiAgbWF4LXdpZHRoOiA2MCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtNjBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogNjAlO1xuICAgIG1hcmdpbi1yaWdodDogMzUlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTYwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTYwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDYwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDM1JTtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTYwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpbi10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpY2stdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpbi10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaWNrLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDMycHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbi5tY2stc2tlbGV0b24tbGluZS03MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTcwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIGhlaWdodDogMThweDtcbiAgbWF4LXdpZHRoOiA3MCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtNzBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogNzAlO1xuICAgIG1hcmdpbi1yaWdodDogMjUlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTcwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTcwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDcwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDI1JTtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTcwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpbi10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpY2stdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpbi10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaWNrLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDMycHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbi5tY2stc2tlbGV0b24tbGluZS04MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTgwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIGhlaWdodDogMThweDtcbiAgbWF4LXdpZHRoOiA4MCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtODBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogODAlO1xuICAgIG1hcmdpbi1yaWdodDogMTUlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTgwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTgwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDgwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDE1JTtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTgwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpbi10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpY2stdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpbi10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaWNrLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDMycHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbi5tY2stc2tlbGV0b24tbGluZS05MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTkwcC10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogOTAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTkwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtOTBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA5MCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtOTBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS05MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDkwJTtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTkwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS05MHAtdGhpbi10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDE2cHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbi5tY2stc2tlbGV0b24tbG9hZC1tb3JlID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBtYXJnaW4tdG9wOiAwLjVyZW07XG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbiAgd2lkdGg6IGNhbGMoMTAwdncgLSAoMiAqIDFyZW0pKTtcbiAgaGVpZ2h0OiA0MHB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1sb2FkLW1vcmUgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAzMjBweDtcbiAgICBoZWlnaHQ6IDUwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXNrZWxldG9uLWxvYWQtbW9yZSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDMyMHB4O1xuICAgIGhlaWdodDogNTBweDtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1sb2FkLW1vcmUtMTAwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWhlYWRlciA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLXJvb20tYXZhaWxhYmlsaXR5ID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBtYXJnaW4tdG9wOiAwLjVyZW07XG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbiAgd2lkdGg6IGNhbGMoMTAwdncgLSAoMiAqIDFyZW0pKTtcbiAgaGVpZ2h0OiA0MHB4O1xuICBtYXgtd2lkdGg6IG5vbmU7XG4gIHdpZHRoOiAxMDAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1sb2FkLW1vcmUtMTAwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWhlYWRlciA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLXJvb20tYXZhaWxhYmlsaXR5ID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDUwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXNrZWxldG9uLWxvYWQtbW9yZS0xMDBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24taGVhZGVyID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tcm9vbS1hdmFpbGFiaWxpdHkgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiBub25lO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogNTBweDtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1sb2FkLW1vcmUtMTAwcCA+IC5sb2FkZXIubG9hZGVyLXJvb20tYXZhaWxhYmlsaXR5ID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24taGVhZGVyID4gLmxvYWRlci5sb2FkZXItcm9vbS1hdmFpbGFiaWxpdHkgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1yb29tLWF2YWlsYWJpbGl0eSA+IC5sb2FkZXIubG9hZGVyLXJvb20tYXZhaWxhYmlsaXR5ID4gLmxvYWRlci5sb2FkZXIge1xuICBoZWlnaHQ6IDEyNHB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG5cbi5tY2staGVhZGluZy01IHtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1zaXplOiAxLjVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjMzMztcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2staGVhZGluZy01IHtcbiAgICBmb250LXNpemU6IDEuNzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMTQyO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1oZWFkaW5nLTUge1xuICAgIGZvbnQtc2l6ZTogMS43NXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xNDI7XG4gIH1cbn1cblxubmd4LW1hdC1zZWxlY3Qtc2VhcmNoIC5tYXQtc2VsZWN0LXNlYXJjaC1uby1lbnRyaWVzLWZvdW5kIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxubmd4LW1hdC1zZWxlY3Qtc2VhcmNoIC5tYXQtc2VsZWN0LXNlYXJjaC1pbnB1dCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbm5neC1tYXQtc2VsZWN0LXNlYXJjaCBidXR0b24ubWF0LWJ1dHRvbi5tYXQtc2VsZWN0LXNlYXJjaC1jbGVhciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IG5vbmU7XG4gIGNvbG9yOiBibGFjaztcbn1cblxuOjotd2Via2l0LXNjcm9sbGJhciB7XG4gIHdpZHRoOiAxNnB4O1xuICBoZWlnaHQ6IDE4cHg7XG59XG5cbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICBoZWlnaHQ6IDEuNXJlbTtcbiAgYm9yZGVyOiA0cHggc29saWQgcmdiYSgwLCAwLCAwLCAwKTtcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzU3NTc1O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IC0xcHggLTFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjA1KSwgaW5zZXQgMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cblxuOjotd2Via2l0LXNjcm9sbGJhci1idXR0b24ge1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBkaXNwbGF5OiBub25lO1xufVxuXG46Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG5oZWFkZXIge1xuICB6LWluZGV4OiAyO1xufVxuXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWItYmxvY2sge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1iLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWItYm90dG9tIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTEwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWItYm90dG9tIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTEwcHg7XG4gIH1cbn1cblxuLm1hcC1maWx0ZXJzLWNvbnRhaW5lciAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgdG9wOiA1cHg7XG59XG4ubWFwLWZpbHRlcnMtY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gIGhlaWdodDogNDhweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG59XG4ubWFwLWZpbHRlcnMtY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICBwYWRkaW5nLXRvcDogMC41cmVtICFpbXBvcnRhbnQ7XG59XG5cbi5vZmZpY2UtbGV2ZWwtcm93IC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVyIHtcbiAgY29sb3I6ICMzMzMzMzM7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5vZmZpY2UtbGV2ZWwtcm93IC5sZWdlbmQtY29udGFpbmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAub2ZmaWNlLWxldmVsLXJvdyAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgIGhlaWdodDogNDVweCAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm9mZmljZS1sZXZlbC1yb3cgLmxlZ2VuZC1jb250YWluZXIgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsIC5vZmZpY2UtbGV2ZWwtcm93IC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgaGVpZ2h0OiA0NXB4ICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi5vZmZpY2UtbGV2ZWwtcm93IC5zZWxlY3QtZGl2aWRlciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB0b3A6IDAgIWltcG9ydGFudDtcbiAgd2lkdGg6IDQ0cHggIWltcG9ydGFudDtcbiAgcmlnaHQ6IC0xMXB4ICFpbXBvcnRhbnQ7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gIGJvcmRlci13aWR0aDogMCAwIDAgMXB4O1xuICBib3JkZXItY29sb3I6ICNjNmM2YzY7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAub2ZmaWNlLWxldmVsLXJvdyAuc2VsZWN0LWRpdmlkZXIge1xuICAgIGhlaWdodDogY2FsYygxMDAlIC0gMXB4KSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm9mZmljZS1sZXZlbC1yb3cgLnNlbGVjdC1kaXZpZGVyIHtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDFweCkgIWltcG9ydGFudDtcbiAgfVxufVxuLm9mZmljZS1sZXZlbC1yb3cgLmRpc2FibGVkIC5zZWxlY3QtZGl2aWRlciB7XG4gIGJhY2tncm91bmQ6ICNGMEYwRjAgIWltcG9ydGFudDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5vZmZpY2UtbGV2ZWwtcm93IC5kaXNhYmxlZCAuc2VsZWN0LWRpdmlkZXIge1xuICAgIGhlaWdodDogY2FsYygxMDAlIC0gMnB4KSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm9mZmljZS1sZXZlbC1yb3cgLmRpc2FibGVkIC5zZWxlY3QtZGl2aWRlciB7XG4gICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAycHgpICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi5vZmZpY2UtbGV2ZWwtcm93IC5kaXNhYmxlZCAuc2VsZWN0LWNoZXZyb24ge1xuICBvcGFjaXR5OiAwLjU7XG4gIG1hcmdpbi1sZWZ0OiAxMHB4O1xufVxuXG4ub2ZmaWNlLWxldmVsLXJvdyAubGVnZW5kLWNvbnRhaW5lciAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwgLm9mZmljZS1sZXZlbC1yb3cgLm1hdC1mb3JtLWZpZWxkLWluZml4LCAubWFwLWNvbnRyb2xzIC5sZWdlbmQtY29udGFpbmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAubWFwLWNvbnRyb2xzIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcbiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnQ7XG59XG5cbi5ib29raW5nLWZvcm0tY29udGFpbmVyIHtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDMxMHB4KTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWZvcm0tY29udGFpbmVyIHtcbiAgICBtYXgtaGVpZ2h0OiBub25lO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctZm9ybS1jb250YWluZXIge1xuICAgIG1heC1oZWlnaHQ6IG5vbmU7XG4gIH1cbn1cblxuLmJvb2tpbmctZm9ybS1jb250YWluZXIgLm1jay1mb3JtLWlucHV0IG1hdC1sYWJlbCwgLmJvb2tpbmctZm9ybS1jb250YWluZXIgLm1jay1mb3JtLWlucHV0IC5tYXQtcmFkaW8tbGFiZWwtY29udGVudCB7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIiAhaW1wb3J0YW50O1xuICBjb2xvcjogIzMzMzMzMztcbn1cbi5ib29raW5nLWZvcm0tY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dCBpbnB1dCwgLmJvb2tpbmctZm9ybS1jb250YWluZXIgLm1jay1mb3JtLWlucHV0IGlucHV0OjpwbGFjZWhvbGRlciB7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgY29sb3I6ICNCM0IzQjM7XG59XG5cbi5idXR0b24td3JhcHBlciB7XG4gIGZsZXgtYmFzaXM6IDEwMCU7XG4gIGp1c3RpZnktY29udGVudDogZW5kO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgei1pbmRleDogMjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5idXR0b24td3JhcHBlciB7XG4gICAgYm90dG9tOiAtMC41cmVtO1xuICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgcGFkZGluZy10b3A6IDEuNzVyZW07XG4gICAgcGFkZGluZy1ib3R0b206IDEuNzVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAuYnV0dG9uLXdyYXBwZXIge1xuICAgIGJvdHRvbTogLTAuNXJlbTtcbiAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgIHBhZGRpbmctdG9wOiAxLjc1cmVtO1xuICAgIHBhZGRpbmctYm90dG9tOiAxLjc1cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYnV0dG9uLXdyYXBwZXIuaGFzLWZpeGVkIHtcbiAgICB6LWluZGV4OiAyO1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5idXR0b24td3JhcHBlci5oYXMtZml4ZWQge1xuICAgIHotaW5kZXg6IDI7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuICB9XG59XG4uYnV0dG9uLXdyYXBwZXItc3BhY2VyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5idXR0b24td3JhcHBlciA+IC5idXR0b24tcm93IHtcbiAgICBwYWRkaW5nOiAxcmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJ1dHRvbi13cmFwcGVyID4gLmJ1dHRvbi1yb3cge1xuICAgIHBhZGRpbmc6IDFyZW07XG4gIH1cbn1cblxuLm1jay1tb2RhbC1wcmltYXJ5LWJ1dHRvbiB7XG4gIGZsZXg6IDE7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW46IDAgMC43NXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwtcHJpbWFyeS1idXR0b24ge1xuICAgIG1heC13aWR0aDogMzIwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAxMDQ4cHgpIHtcbiAgLm1jay1tb2RhbC1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgbWF4LXdpZHRoOiAzMjBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1tb2RhbC1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLW1vZGFsLXByaW1hcnktYnV0dG9uIHtcbiAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgfVxufVxuXG4ubWNrLW1vZGFsLXNlY29uZGFyeS1idXR0b24ge1xuICBmbGV4OiAxO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwIDAuNzVyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA4MDBweCkge1xuICAubWNrLW1vZGFsLXNlY29uZGFyeS1idXR0b24ge1xuICAgIG1heC13aWR0aDogMzIwcHg7XG4gICAgbWFyZ2luLXJpZ2h0OiAwIDAuNzVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAxMDQ4cHgpIHtcbiAgLm1jay1tb2RhbC1zZWNvbmRhcnktYnV0dG9uIHtcbiAgICBtYXgtd2lkdGg6IDMyMHB4O1xuICAgIG1hcmdpbi1yaWdodDogMCAwLjc1cmVtO1xuICB9XG59XG5cbi5zbWFsbC1idXR0b25zIC5tY2stbW9kYWwtcHJpbWFyeS1idXR0b24ge1xuICBmbGV4OiAxO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwIDAuNzVyZW07XG4gIG1heC13aWR0aDogMTM0cHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuc21hbGwtYnV0dG9ucyAubWNrLW1vZGFsLXByaW1hcnktYnV0dG9uIHtcbiAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5zbWFsbC1idXR0b25zIC5tY2stbW9kYWwtcHJpbWFyeS1idXR0b24ge1xuICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICB9XG59XG4uc21hbGwtYnV0dG9ucyAubWNrLW1vZGFsLXNlY29uZGFyeS1idXR0b24ge1xuICBmbGV4OiAxO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwIDAuNzVyZW07XG4gIG1heC13aWR0aDogMTM0cHg7XG4gIG1hcmdpbi1yaWdodDogMCAwLjc1cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLnNtYWxsLWJ1dHRvbnMgLm1jay1tb2RhbC1zZWNvbmRhcnktYnV0dG9uIHtcbiAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5zbWFsbC1idXR0b25zIC5tY2stbW9kYWwtc2Vjb25kYXJ5LWJ1dHRvbiB7XG4gICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gIH1cbn0iLCJAaW1wb3J0IFwidmFyc1wiO1xuXG5AbWl4aW4gcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkc2l6ZSwgJHF1YWxpZmllcikge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQGlmICgkcXVhbGlmaWVyID09IG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2UgaWYgKCRxdWFsaWZpZXIgPT0gbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1heC13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuQG1peGluIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkbWluLCAkbWF4KSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyB0aGlzIGlzIGEgY29weSBvZiByZXNwb25kLXRvLiB3ZSBkb24ndCB3YW50IHRvIHByZXNlcnZlIHRoYXQgbWV0aG9kIHNpbmNlIHRoZSBicmVha3BvaW50cyBtYXkgZGl2ZXJnZSBmcm9tIHRoZSBvbGQgVUkuXG5AbWl4aW4gaXMtc2NyZWVuLXNpemUoJG1lZGlhOiBhbGwsICRvcmllbnRhdGlvbjogbm9uZSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5cbkBtaXhpbiBwYWdlLXBhZGRpbmcge1xuICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctc21hbGw7XG4gICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctc21hbGw7XG59XG5cbi8vIEZvbnQgTWl4aW5zXG4kZm9udC1tY2tpbnNleS1zYW5zOiBcIk1jS2luc2V5IFNhbnNcIjtcbiRmb250LXRoZWluaGFyZHQ6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuJGZvbnQtYm93ZXI6IFwiQm93ZXJcIjtcblxuQG1peGluIGJvd2VyLWJvbGQge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1ib3dlcjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gbWNraW5zZXktc2FucyB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIGRpc3BsYXktMSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNHJlbTsgLy8gNjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODc7IC8vIDc2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTIge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTMge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2MHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNCB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDNyZW07IC8vIDQ4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNjY7IC8vIDU2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjRweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMwcHhcbiAgICBsaW5lLWhlaWdodDogMS44MzM7IC8vIDM0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY0MjsgLy8gNDBweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0xIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNDhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNzVyZW07IC8vIDQ0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA1MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0yIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjExMTsgLy8gNDRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDQ4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTMge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMjI7IC8vIDQ0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTUge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTYge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTU7IC8vIDI4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBib2R5LWRlZmF1bHQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjZweFxuICAgIH1cbn1cblxuLy8vIERvZXNudCBleGlzdCBpbiBNRFMuXG5AbWl4aW4gYm9keS10aW55IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTsgLy8gMTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDIwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBmb3JtLWxhYmVsIHtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC10aGVpbmhhcmR0O1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBjb2xvcjogJHBsYWNlaG9sZGVyLWNvbG9yO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG59XG5cbkBtaXhpbiBjaGlwLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gY2hlY2tib3gtbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICBjb2xvcjogYmxhY2s7XG59XG5cbi8vIGJvcmRlcnNcblxuQG1peGluIG1jay1jaGVja2JveC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stdGhpbi1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYm9yZGVyLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQtbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlci1saWdodDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cblxuLy8gZnVuY3Rpb25zXG5cbi8qKlxuICogTWFrZXMgdGV4dCBoYXZlIG1heGltdW0gbGluZXMgd2l0aCBlbGxpcHNpcy4gV29ya3Mgb24gbW9zdCBtb2Rlcm4gYnJvd3NlcnMgZXhjZXB0XG4gKiBvZiBGaXJlZm94Li5cbiAqL1xuQG1peGluIG1heC1saW5lcygkY291bnQpIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIC13ZWJraXQtbGluZS1jbGFtcDogJGNvdW50O1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG59XG5cbi8vIGltYWdlc1xuQG1peGluIG1jay1pY29uKCR3aWR0aCwgJGFzc2V0LCAkaGVpZ2h0OiAkd2lkdGgsICAkYXNzZXRQYXRoOiBcImxpYnMvdWkvc3JjL2xpYi9pY29uc1wiLCkge1xuICAgIHdpZHRoOiAkd2lkdGg7XG4gICAgaGVpZ2h0OiAkaGVpZ2h0O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiN7JGFzc2V0UGF0aH0vI3skYXNzZXR9XCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbn1cblxuXG5AbWl4aW4gbWNrLXNtYWxsLWljb24oJG1vYmlsZS1hc3NldCwgJGRlc2t0b3AtYXNzZXQ6ICRtb2JpbGUtYXNzZXQpIHtcbiAgICBAaW5jbHVkZSBtY2staWNvbigxNnB4LCAkYXNzZXQ6ICRtb2JpbGUtYXNzZXQpO1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBAaW5jbHVkZSBtY2staWNvbigyNHB4LCAkYXNzZXQ6ICRkZXNrdG9wLWFzc2V0KTtcbiAgICB9XG59XG5cbi8vIHNrZWxldG9uXG5AbWl4aW4gc2tlbGV0b24tYmcge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1pbWFnZS1zaXplIHtcbiAgICB3aWR0aDogODFweDtcbiAgICBoZWlnaHQ6IDgycHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAyMTlweDtcbiAgICAgICAgaGVpZ2h0OiAxMTlweDtcbiAgICB9XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1zdGF0dXMtc2l6ZSB7XG4gICAgd2lkdGg6IDExN3B4O1xuICAgIGhlaWdodDogNzhweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDExN3B4O1xuICAgICAgICBoZWlnaHQ6IDc4cHg7XG4gICAgfVxufVxuIiwiLy8gSW1wb3J0IGFsbCB0aGUgdGhlbWluZyBmdW5jdGlvbmFsaXR5LlxuLy8gV2Ugd2FudCBvdmVybGF5cyB0byBhbHdheXMgYXBwZWFyIG92ZXIgdXNlciBjb250ZW50LCBzbyBzZXQgYSBiYXNlbGluZVxuLy8gdmVyeSBoaWdoIHotaW5kZXggZm9yIHRoZSBvdmVybGF5IGNvbnRhaW5lciwgd2hpY2ggaXMgd2hlcmUgd2UgY3JlYXRlIHRoZSBuZXdcbi8vIHN0YWNraW5nIGNvbnRleHQgZm9yIGFsbCBvdmVybGF5cy5cbiRjZGstei1pbmRleC1vdmVybGF5LWNvbnRhaW5lcjogMTAwMCAhZGVmYXVsdDtcbiRjZGstei1pbmRleC1vdmVybGF5OiAxMDAwICFkZWZhdWx0O1xuJGNkay16LWluZGV4LW92ZXJsYXktYmFja2Ryb3A6IDEwMDAgIWRlZmF1bHQ7XG5cbi8vIEJhY2tncm91bmQgY29sb3IgZm9yIGFsbCBvZiB0aGUgYmFja2Ryb3BzXG4kY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcC1iYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMzIpICFkZWZhdWx0O1xuXG4vLyBEZWZhdWx0IGJhY2tkcm9wIGFuaW1hdGlvbiBpcyBiYXNlZCBvbiB0aGUgTWF0ZXJpYWwgRGVzaWduIHN3aWZ0LWVhc2Utb3V0LlxuJGJhY2tkcm9wLWFuaW1hdGlvbi1kdXJhdGlvbjogNDAwbXMgIWRlZmF1bHQ7XG4kYmFja2Ryb3AtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSkgIWRlZmF1bHQ7XG5cblxuQG1peGluIGNkay1vdmVybGF5KCkge1xuICAuY2RrLW92ZXJsYXktY29udGFpbmVyLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXIge1xuICAgIC8vIERpc2FibGUgZXZlbnRzIGZyb20gYmVpbmcgY2FwdHVyZWQgb24gdGhlIG92ZXJsYXkgY29udGFpbmVyLlxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuXG4gICAgLy8gVGhlIGNvbnRhaW5lciBzaG91bGQgYmUgdGhlIHNpemUgb2YgdGhlIHZpZXdwb3J0LlxuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuXG4gIC8vIFRoZSBvdmVybGF5LWNvbnRhaW5lciBpcyBhbiBpbnZpc2libGUgZWxlbWVudCB3aGljaCBjb250YWlucyBhbGwgaW5kaXZpZHVhbCBvdmVybGF5cy5cbiAgLmNkay1vdmVybGF5LWNvbnRhaW5lciB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHotaW5kZXg6ICRjZGstei1pbmRleC1vdmVybGF5LWNvbnRhaW5lcjtcblxuICAgICY6ZW1wdHkge1xuICAgICAgLy8gSGlkZSB0aGUgZWxlbWVudCB3aGVuIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgY2hpbGQgbm9kZXMuIFRoaXMgZG9lc24ndFxuICAgICAgLy8gaW5jbHVkZSBvdmVybGF5cyB0aGF0IGhhdmUgYmVlbiBkZXRhY2hlZCwgcmF0aGVyIHRoYW4gZGlzcG9zZWQuXG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdlIHVzZSBhbiBleHRyYSB3cmFwcGVyIGVsZW1lbnQgaW4gb3JkZXIgdG8gdXNlIG1ha2UgdGhlIG92ZXJsYXkgaXRzZWxmIGEgZmxleCBpdGVtLlxuICAvLyBUaGlzIG1ha2VzIGNlbnRlcmluZyB0aGUgb3ZlcmxheSBlYXN5IHdpdGhvdXQgcnVubmluZyBpbnRvIHRoZSBzdWJwaXhlbCByZW5kZXJpbmdcbiAgLy8gcHJvYmxlbXMgdGllZCB0byB1c2luZyBgdHJhbnNmb3JtYCBhbmQgd2l0aG91dCBpbnRlcmZlcmluZyB3aXRoIHRoZSBvdGhlciBwb3NpdGlvblxuICAvLyBzdHJhdGVnaWVzLlxuICAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHotaW5kZXg6ICRjZGstei1pbmRleC1vdmVybGF5O1xuICB9XG5cbiAgLy8gQSBzaW5nbGUgb3ZlcmxheSBwYW5lLlxuICAuY2RrLW92ZXJsYXktcGFuZSB7XG4gICAgLy8gTm90ZTogaXQncyBpbXBvcnRhbnQgZm9yIHRoaXMgb25lIHRvIHN0YXJ0IG9mZiBgYWJzb2x1dGVgLFxuICAgIC8vIGluIG9yZGVyIGZvciB1cyB0byBiZSBhYmxlIHRvIG1lYXN1cmUgaXQgY29ycmVjdGx5LlxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIHotaW5kZXg6ICRjZGstei1pbmRleC1vdmVybGF5O1xuXG4gICAgLy8gRm9yIGNvbm5lY3RlZC1wb3NpdGlvbiBvdmVybGF5cywgd2Ugc2V0IGBkaXNwbGF5OiBmbGV4YCBpblxuICAgIC8vIG9yZGVyIHRvIGZvcmNlIGBtYXgtd2lkdGhgIGFuZCBgbWF4LWhlaWdodGAgdG8gdGFrZSBlZmZlY3QuXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgbWF4LWhlaWdodDogMTAwJTtcbiAgfVxuXG4gIC5jZGstb3ZlcmxheS1iYWNrZHJvcCB7XG4gICAgLy8gVE9ETyhqZWxib3Vybik6IHJldXNlIHNpZGVuYXYgZnVsbHNjcmVlbiBtaXhpbi5cbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuXG4gICAgei1pbmRleDogJGNkay16LWluZGV4LW92ZXJsYXktYmFja2Ryb3A7XG4gICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5ICRiYWNrZHJvcC1hbmltYXRpb24tZHVyYXRpb24gJGJhY2tkcm9wLWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb247XG4gICAgb3BhY2l0eTogMDtcblxuICAgICYuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyB7XG4gICAgICBvcGFjaXR5OiAxO1xuXG4gICAgICAvLyBJbiBoaWdoIGNvbnRyYXN0IG1vZGUgdGhlIHJnYmEgYmFja2dyb3VuZCB3aWxsIGJlY29tZSBzb2xpZCBzbyB3ZSBuZWVkIHRvIGZhbGwgYmFja1xuICAgICAgLy8gdG8gbWFraW5nIGl0IG9wYXF1ZSB1c2luZyBgb3BhY2l0eWAuIE5vdGUgdGhhdCB3ZSBjYW4ndCB1c2UgdGhlIGBjZGstaGlnaC1jb250cmFzdGBcbiAgICAgIC8vIG1peGluLCBiZWNhdXNlIHdlIGNhbid0IG5vcm1hbGl6ZSB0aGUgaW1wb3J0IHBhdGggdG8gdGhlIF9hMTF5LnNjc3MgYm90aCBmb3IgdGhlXG4gICAgICAvLyBzb3VyY2UgYW5kIHdoZW4gdGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkLiBTZWUgIzEwOTA4LlxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpIHtcbiAgICAgICAgb3BhY2l0eTogMC42O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wIHtcbiAgICBiYWNrZ3JvdW5kOiAkY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcC1iYWNrZ3JvdW5kO1xuICB9XG5cbiAgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wIHtcbiAgICAvLyBOb3RlOiBhcyBvZiBGaXJlZm94IDU3LCBoYXZpbmcgdGhlIGJhY2tkcm9wIGJlIGBiYWNrZ3JvdW5kOiBub25lYCB3aWxsIHByZXZlbnQgaXQgZnJvbVxuICAgIC8vIGNhcHR1cmluZyB0aGUgdXNlcidzIG1vdXNlIHNjcm9sbCBldmVudHMuIFNpbmNlIHdlIGFsc28gY2FuJ3QgdXNlIHNvbWV0aGluZyBsaWtlXG4gICAgLy8gYHJnYmEoMCwgMCwgMCwgMClgLCB3ZSB3b3JrIGFyb3VuZCB0aGUgaW5jb25zaXN0ZW5jeSBieSBub3Qgc2V0dGluZyB0aGUgYmFja2dyb3VuZCBhdFxuICAgIC8vIGFsbCBhbmQgdXNpbmcgYG9wYWNpdHlgIHRvIG1ha2UgdGhlIGVsZW1lbnQgdHJhbnNwYXJlbnQuXG4gICAgJiwgJi5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIHtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICB9XG5cbiAgLy8gT3ZlcmxheSBwYXJlbnQgZWxlbWVudCB1c2VkIHdpdGggdGhlIGNvbm5lY3RlZCBwb3NpdGlvbiBzdHJhdGVneS4gVXNlZCB0byBjb25zdHJhaW4gdGhlXG4gIC8vIG92ZXJsYXkgZWxlbWVudCdzIHNpemUgdG8gZml0IHdpdGhpbiB0aGUgdmlld3BvcnQuXG4gIC5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogJGNkay16LWluZGV4LW92ZXJsYXk7XG5cbiAgICAvLyBXZSB1c2UgYGRpc3BsYXk6IGZsZXhgIG9uIHRoaXMgZWxlbWVudCBleGNsdXNpdmVseSBmb3IgY2VudGVyaW5nIGNvbm5lY3RlZCBvdmVybGF5cy5cbiAgICAvLyBXaGVuICpub3QqIGNlbnRlcmluZywgYSB0b3AvbGVmdC9ib3R0b20vcmlnaHQgd2lsbCBiZSBzZXQgd2hpY2ggb3ZlcnJpZGVzIHRoZSBub3JtYWxcbiAgICAvLyBmbGV4IGxheW91dC5cbiAgICBkaXNwbGF5OiBmbGV4O1xuXG4gICAgLy8gV2UgdXNlIHRoZSBgY29sdW1uYCBkaXJlY3Rpb24gaGVyZSB0byBhdm9pZCBzb21lIGZsZXhib3ggaXNzdWVzIGluIEVkZ2VcbiAgICAvLyB3aGVuIHVzaW5nIHRoZSBcImdyb3cgYWZ0ZXIgb3BlblwiIG9wdGlvbnMuXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuICAgIC8vIEFkZCBzb21lIGRpbWVuc2lvbnMgc28gdGhlIGVsZW1lbnQgaGFzIGFuIGBpbm5lclRleHRgIHdoaWNoIHNvbWUgcGVvcGxlIGRlcGVuZCBvbiBpbiB0ZXN0cy5cbiAgICBtaW4td2lkdGg6IDFweDtcbiAgICBtaW4taGVpZ2h0OiAxcHg7XG4gIH1cblxuICAvLyBVc2VkIHdoZW4gZGlzYWJsaW5nIGdsb2JhbCBzY3JvbGxpbmcuXG4gIC5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG5cbiAgICAvLyBOZWNlc3NhcnkgZm9yIHRoZSBjb250ZW50IG5vdCB0byBsb3NlIGl0cyB3aWR0aC4gTm90ZSB0aGF0IHdlJ3JlIHVzaW5nIDEwMCUsIGluc3RlYWQgb2ZcbiAgICAvLyAxMDB2dywgYmVjYXVzZSAxMDB2dyBpbmNsdWRlcyB0aGUgd2lkdGggcGx1cyB0aGUgc2Nyb2xsYmFyLCB3aGVyZWFzIDEwMCUgaXMgdGhlIHdpZHRoXG4gICAgLy8gdGhhdCB0aGUgZWxlbWVudCBoYWQgYmVmb3JlIHdlIG1hZGUgaXQgYGZpeGVkYC5cbiAgICB3aWR0aDogMTAwJTtcblxuICAgIC8vIE5vdGU6IHRoaXMgd2lsbCBhbHdheXMgYWRkIGEgc2Nyb2xsYmFyIHRvIHdoYXRldmVyIGVsZW1lbnQgaXQgaXMgb24sIHdoaWNoIGNhblxuICAgIC8vIHBvdGVudGlhbGx5IHJlc3VsdCBpbiBkb3VibGUgc2Nyb2xsYmFycy4gSXQgc2hvdWxkbid0IGJlIGFuIGlzc3VlLCBiZWNhdXNlIHdlIHdvbid0XG4gICAgLy8gYmxvY2sgc2Nyb2xsaW5nIG9uIGEgcGFnZSB0aGF0IGRvZXNuJ3QgaGF2ZSBhIHNjcm9sbGJhciBpbiB0aGUgZmlyc3QgcGxhY2UuXG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICB9XG59XG5cbkBtaXhpbiBjZGstYTExeSB7XG4gIC5jZGstdmlzdWFsbHktaGlkZGVuIHtcbiAgICBib3JkZXI6IDA7XG4gICAgY2xpcDogcmVjdCgwIDAgMCAwKTtcbiAgICBoZWlnaHQ6IDFweDtcbiAgICBtYXJnaW46IC0xcHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwYWRkaW5nOiAwO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMXB4O1xuXG4gICAgLy8gQXZvaWQgYnJvd3NlcnMgcmVuZGVyaW5nIHRoZSBmb2N1cyByaW5nIGluIHNvbWUgY2FzZXMuXG4gICAgb3V0bGluZTogMDtcblxuICAgIC8vIEF2b2lkIHNvbWUgY2FzZXMgd2hlcmUgdGhlIGJyb3dzZXIgd2lsbCBzdGlsbCByZW5kZXIgdGhlIG5hdGl2ZSBjb250cm9scyAoc2VlICM5MDQ5KS5cbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xuICB9XG59XG5cbi8vLyBFbWl0cyB0aGUgbWl4aW4ncyBjb250ZW50IG5lc3RlZCB1bmRlciBgJHNlbGVjdG9yLWNvbnRleHRgIGlmIGAkc2VsZWN0b3ItY29udGV4dGBcbi8vLyBpcyBub24tZW1wdHkuXG4vLy8gQHBhcmFtIHNlbGVjdG9yLWNvbnRleHQgVGhlIHNlbGVjdG9yIHVuZGVyIHdoaWNoIHRvIG5lc3QgdGhlIG1peGluJ3MgY29udGVudC5cbkBtaXhpbiBfY2RrLW9wdGlvbmFsbHktbmVzdC1jb250ZW50KCRzZWxlY3Rvci1jb250ZXh0KSB7XG4gIEBpZiAoJHNlbGVjdG9yLWNvbnRleHQgPT0gJycpIHtcbiAgICBAY29udGVudDtcbiAgfVxuICBAZWxzZSB7XG4gICAgI3skc2VsZWN0b3ItY29udGV4dH0ge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9XG59XG5cbi8vLyBBcHBsaWVzIHN0eWxlcyBmb3IgdXNlcnMgaW4gaGlnaCBjb250cmFzdCBtb2RlLiBOb3RlIHRoYXQgdGhpcyBvbmx5IGFwcGxpZXNcbi8vLyB0byBNaWNyb3NvZnQgYnJvd3NlcnMuIENocm9tZSBjYW4gYmUgaW5jbHVkZWQgYnkgY2hlY2tpbmcgZm9yIHRoZSBgaHRtbFtoY11gXG4vLy8gYXR0cmlidXRlLCBob3dldmVyIENocm9tZSBoYW5kbGVzIGhpZ2ggY29udHJhc3QgZGlmZmVyZW50bHkuXG4vLy9cbi8vLyBAcGFyYW0gdGFyZ2V0IFdoaWNoIGtpbmQgb2YgaGlnaCBjb250cmFzdCBzZXR0aW5nIHRvIHRhcmdldC4gRGVmYXVsdHMgdG8gYGFjdGl2ZWAsIGNhbiBiZVxuLy8vICAgIGB3aGl0ZS1vbi1ibGFja2Agb3IgYGJsYWNrLW9uLXdoaXRlYC5cbi8vLyBAcGFyYW0gZW5jYXBzdWxhdGlvbiBXaGV0aGVyIHRvIGVtaXQgc3R5bGVzIGZvciB2aWV3IGVuY2Fwc3VsYXRpb24uIFZhbHVlcyBhcmU6XG4vLy8gICAgICogYG9uYCAtIHdvcmtzIGZvciBgRW11bGF0ZWRgLCBgTmF0aXZlYCwgYW5kIGBTaGFkb3dEb21gXG4vLy8gICAgICogYG9mZmAgLSB3b3JrcyBmb3IgYE5vbmVgXG4vLy8gICAgICogYGFueWAgLSB3b3JrcyBmb3IgYWxsIGVuY2Fwc3VsYXRpb24gbW9kZXMgYnkgZW1pdHRpbmcgdGhlIENTUyB0d2ljZSAoZGVmYXVsdCkuXG5AbWl4aW4gY2RrLWhpZ2gtY29udHJhc3QoJHRhcmdldDogYWN0aXZlLCAkZW5jYXBzdWxhdGlvbjogJ2FueScpIHtcbiAgQGlmICgkdGFyZ2V0ICE9ICdhY3RpdmUnIGFuZCAkdGFyZ2V0ICE9ICdibGFjay1vbi13aGl0ZScgYW5kICR0YXJnZXQgIT0gJ3doaXRlLW9uLWJsYWNrJykge1xuICAgIEBlcnJvciAnVW5rbm93biBjZGstaGlnaC1jb250cmFzdCB2YWx1ZSBcIiN7JHRhcmdldH1cIiBwcm92aWRlZC4gJyArXG4gICAgICAgICAgICdBbGxvd2VkIHZhbHVlcyBhcmUgXCJhY3RpdmVcIiwgXCJibGFjay1vbi13aGl0ZVwiLCBhbmQgXCJ3aGl0ZS1vbi1ibGFja1wiJztcbiAgfVxuXG4gIEBpZiAoJGVuY2Fwc3VsYXRpb24gIT0gJ29uJyBhbmQgJGVuY2Fwc3VsYXRpb24gIT0gJ29mZicgYW5kICRlbmNhcHN1bGF0aW9uICE9ICdhbnknKSB7XG4gICAgQGVycm9yICdVbmtub3duIGNkay1oaWdoLWNvbnRyYXN0IGVuY2Fwc3VsYXRpb24gXCIjeyRlbmNhcHN1bGF0aW9ufVwiIHByb3ZpZGVkLiAnICtcbiAgICAgICAgICAgJ0FsbG93ZWQgdmFsdWVzIGFyZSBcIm9uXCIsIFwib2ZmXCIsIGFuZCBcImFueVwiJztcbiAgfVxuXG4gIC8vIElmIHRoZSBzZWxlY3RvciBjb250ZXh0IGhhcyBtdWx0aXBsZSBwYXJ0cywgc3VjaCBhcyBgLnNlY3Rpb24sIC5yZWdpb25gLCBqdXN0IGRvaW5nXG4gIC8vIGAuY2RrLWhpZ2gtY29udHJhc3QteHh4ICN7Jn1gIHdpbGwgb25seSBhcHBseSB0aGUgcGFyZW50IHNlbGVjdG9yIHRvIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZVxuICAvLyBjb250ZXh0LiBXZSBhZGRyZXNzIHRoaXMgYnkgbmVzdGluZyB0aGUgc2VsZWN0b3IgY29udGV4dCB1bmRlciAuY2RrLWhpZ2gtY29udHJhc3QuXG4gIEBhdC1yb290IHtcbiAgICAkc2VsZWN0b3ItY29udGV4dDogI3smfTtcblxuICAgIEBpZiAoJGVuY2Fwc3VsYXRpb24gIT0gJ29uJykge1xuICAgICAgLmNkay1oaWdoLWNvbnRyYXN0LSN7JHRhcmdldH0ge1xuICAgICAgICBAaW5jbHVkZSBfY2RrLW9wdGlvbmFsbHktbmVzdC1jb250ZW50KCRzZWxlY3Rvci1jb250ZXh0KSB7XG4gICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBAaWYgKCRlbmNhcHN1bGF0aW9uICE9ICdvZmYnKSB7XG4gICAgICAuY2RrLWhpZ2gtY29udHJhc3QtI3skdGFyZ2V0fSA6aG9zdCB7XG4gICAgICAgIEBpbmNsdWRlIF9jZGstb3B0aW9uYWxseS1uZXN0LWNvbnRlbnQoJHNlbGVjdG9yLWNvbnRleHQpIHtcbiAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBDb3JlIHN0eWxlcyB0aGF0IGVuYWJsZSBtb25pdG9yaW5nIGF1dG9maWxsIHN0YXRlIG9mIHRleHQgZmllbGRzLlxuQG1peGluIGNkay10ZXh0LWZpZWxkIHtcbiAgLy8gS2V5ZnJhbWVzIHRoYXQgYXBwbHkgbm8gc3R5bGVzLCBidXQgYWxsb3cgdXMgdG8gbW9uaXRvciB3aGVuIGFuIHRleHQgZmllbGQgYmVjb21lcyBhdXRvZmlsbGVkXG4gIC8vIGJ5IHdhdGNoaW5nIGZvciB0aGUgYW5pbWF0aW9uIGV2ZW50cyB0aGF0IGFyZSBmaXJlZCB3aGVuIHRoZXkgc3RhcnQuIE5vdGU6IHRoZSAvKiEqLyBjb21tZW50IGlzXG4gIC8vIG5lZWRlZCB0byBwcmV2ZW50IExpYlNhc3MgZnJvbSBzdHJpcHBpbmcgdGhlIGtleWZyYW1lcyBvdXQuXG4gIC8vIEJhc2VkIG9uOiBodHRwczovL21lZGl1bS5jb20vQGJydW5uL2RldGVjdGluZy1hdXRvZmlsbGVkLWZpZWxkcy1pbi1qYXZhc2NyaXB0LWFlZDU5OGQyNWRhN1xuICBAa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IHsvKiEqL31cbiAgQGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgey8qISovfVxuXG4gIC5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWQ6LXdlYmtpdC1hdXRvZmlsbCB7XG4gICAgLy8gU2luY2UgQ2hyb21lIDgwIHdlIG5lZWQgYSAxbXMgZGVsYXksIG9yIHRoZSBhbmltYXRpb25zdGFydCBldmVudCB3b24ndCBmaXJlLlxuICAgIGFuaW1hdGlvbjogY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zO1xuICB9XG5cbiAgLmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDpub3QoOi13ZWJraXQtYXV0b2ZpbGwpIHtcbiAgICAvLyBTaW5jZSBDaHJvbWUgODAgd2UgbmVlZCBhIDFtcyBkZWxheSwgb3IgdGhlIGFuaW1hdGlvbnN0YXJ0IGV2ZW50IHdvbid0IGZpcmUuXG4gICAgYW5pbWF0aW9uOiBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zO1xuICB9XG5cbiAgLy8gUmVtb3ZlIHRoZSByZXNpemUgaGFuZGxlIG9uIGF1dG9zaXppbmcgdGV4dGFyZWFzLCBiZWNhdXNlIHdoYXRldmVyIGhlaWdodFxuICAvLyB0aGUgdXNlciByZXNpemVkIHRvIHdpbGwgYmUgb3ZlcndyaXR0ZW4gb25jZSB0aGV5IHN0YXJ0IHR5cGluZyBhZ2Fpbi5cbiAgdGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplIHtcbiAgICByZXNpemU6IG5vbmU7XG4gIH1cblxuICAvLyBUaGlzIGNsYXNzIGlzIHRlbXBvcmFyaWx5IGFwcGxpZWQgdG8gdGhlIHRleHRhcmVhIHdoZW4gaXQgaXMgYmVpbmcgbWVhc3VyZWQuIEl0IGlzIGltbWVkaWF0ZWx5XG4gIC8vIHJlbW92ZWQgd2hlbiBtZWFzdXJpbmcgaXMgY29tcGxldGUuIFdlIHVzZSBgIWltcG9ydGFudGAgcnVsZXMgaGVyZSB0byBtYWtlIHN1cmUgdXNlci1zcGVjaWZpZWRcbiAgLy8gcnVsZXMgZG8gbm90IGludGVyZmVyZSB3aXRoIHRoZSBtZWFzdXJlbWVudC5cbiAgdGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZyB7XG4gICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xuICAgIC8vIEhhdmluZyAycHggdG9wIGFuZCBib3R0b20gcGFkZGluZyBzZWVtcyB0byBmaXggYSBidWcgd2hlcmUgQ2hyb21lIGdldHMgYW4gaW5jb3JyZWN0XG4gICAgLy8gbWVhc3VyZW1lbnQuIFdlIGp1c3QgaGF2ZSB0byBhY2NvdW50IGZvciBpdCBsYXRlciBhbmQgc3VidHJhY3QgaXQgb2ZmIHRoZSBmaW5hbCByZXN1bHQuXG4gICAgcGFkZGluZzogMnB4IDAgIWltcG9ydGFudDtcbiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveCAhaW1wb3J0YW50O1xuICB9XG59XG5cbi8vIFVzZWQgdG8gZ2VuZXJhdGUgVUlEcyBmb3Iga2V5ZnJhbWVzIHVzZWQgdG8gY2hhbmdlIHRoZSB0ZXh0IGZpZWxkIGF1dG9maWxsIHN0eWxlcy5cbiRjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci1mcmFtZS1jb3VudDogMDtcblxuLy8gTWl4aW4gdXNlZCB0byBhcHBseSBjdXN0b20gYmFja2dyb3VuZCBhbmQgZm9yZWdyb3VuZCBjb2xvcnMgdG8gYW4gYXV0b2ZpbGxlZCB0ZXh0IGZpZWxkLlxuLy8gQmFzZWQgb246IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI3ODE1NDkvXG4vLyByZW1vdmluZy1pbnB1dC1iYWNrZ3JvdW5kLWNvbG91ci1mb3ItY2hyb21lLWF1dG9jb21wbGV0ZSNhbnN3ZXItMzc0MzIyNjBcbkBtaXhpbiBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvcigkYmFja2dyb3VuZCwgJGZvcmVncm91bmQ6JycpIHtcbiAgQGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci0jeyRjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci1mcmFtZS1jb3VudH0ge1xuICAgIHRvIHtcbiAgICAgIGJhY2tncm91bmQ6ICRiYWNrZ3JvdW5kO1xuICAgICAgQGlmICRmb3JlZ3JvdW5kICE9ICcnIHsgY29sb3I6ICRmb3JlZ3JvdW5kOyB9XG4gICAgfVxuICB9XG5cbiAgJjotd2Via2l0LWF1dG9maWxsIHtcbiAgICBhbmltYXRpb246IGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLSN7JGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLWZyYW1lLWNvdW50fSBib3RoO1xuICB9XG5cbiAgJi5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWQ6LXdlYmtpdC1hdXRvZmlsbCB7XG4gICAgLy8gU2luY2UgQ2hyb21lIDgwIHdlIG5lZWQgYSAxbXMgZGVsYXkgZm9yIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0LCBvciB0aGUgYW5pbWF0aW9uc3RhcnRcbiAgICAvLyBldmVudCB3b24ndCBmaXJlLlxuICAgIGFuaW1hdGlvbjogY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zLFxuICAgICAgICAgICAgICAgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItI3skY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItZnJhbWUtY291bnR9IGJvdGg7XG4gIH1cblxuICAkY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItZnJhbWUtY291bnQ6XG4gICAgICAkY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItZnJhbWUtY291bnQgKyAxICFnbG9iYWw7XG59XG5cblxuLy8gQ29yZSBzdHlsZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBhcHBseSBtYXRlcmlhbCBkZXNpZ24gdHJlYXRtZW50cyB0byBhbnkgZWxlbWVudC5cbi8vIE1lZGlhIHF1ZXJpZXNcbi8vIFRPRE8oam9zZXBocGVycm90dCk6IENoYW5nZSAkbWF0LXhzbWFsbCBhbmQgJG1hdC1zbWFsbCB1c2FnZXMgdG8gcmVseSBvbiBCcmVha3BvaW50T2JzZXJ2ZXIsXG4kbWF0LXhzbWFsbDogJ21heC13aWR0aDogNTk5cHgnO1xuJG1hdC1zbWFsbDogJ21heC13aWR0aDogOTU5cHgnO1xuXG4vLyBUT0RPOiBSZXZpc2l0IGFsbCB6LWluZGljZXMgYmVmb3JlIGJldGFcbi8vIHotaW5kZXggbWFzdGVyIGxpc3RcblxuJHotaW5kZXgtZmFiOiAyMCAhZGVmYXVsdDtcbiR6LWluZGV4LWRyYXdlcjogMTAwICFkZWZhdWx0O1xuXG4vLyBHbG9iYWwgY29uc3RhbnRzXG4kcGk6IDMuMTQxNTkyNjU7XG5cbi8vIFBhZGRpbmcgYmV0d2VlbiBpbnB1dCB0b2dnbGVzIGFuZCB0aGVpciBsYWJlbHNcbiRtYXQtdG9nZ2xlLXBhZGRpbmc6IDhweCAhZGVmYXVsdDtcbi8vIFdpZHRoIGFuZCBoZWlnaHQgb2YgaW5wdXQgdG9nZ2xlc1xuJG1hdC10b2dnbGUtc2l6ZTogMjBweCAhZGVmYXVsdDtcblxuLy8gRWFzaW5nIEN1cnZlc1xuLy8gVE9ETyhqZWxib3Vybik6IGFsbCBvZiB0aGVzZSBuZWVkIHRvIGJlIHJldmlzaXRlZFxuXG4vLyBUaGUgZGVmYXVsdCBhbmltYXRpb24gY3VydmVzIHVzZWQgYnkgbWF0ZXJpYWwgZGVzaWduLlxuJG1hdC1saW5lYXItb3V0LXNsb3ctaW4tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpICFkZWZhdWx0O1xuJG1hdC1mYXN0LW91dC1zbG93LWluLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSAhZGVmYXVsdDtcbiRtYXQtZmFzdC1vdXQtbGluZWFyLWluLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMSwgMSkgIWRlZmF1bHQ7XG5cbiRlYXNlLWluLW91dC1jdXJ2ZS1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpICFkZWZhdWx0O1xuXG4kc3dpZnQtZWFzZS1vdXQtZHVyYXRpb246IDQwMG1zICFkZWZhdWx0O1xuJHN3aWZ0LWVhc2Utb3V0LXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSkgIWRlZmF1bHQ7XG4kc3dpZnQtZWFzZS1vdXQ6IGFsbCAkc3dpZnQtZWFzZS1vdXQtZHVyYXRpb24gJHN3aWZ0LWVhc2Utb3V0LXRpbWluZy1mdW5jdGlvbiAhZGVmYXVsdDtcblxuJHN3aWZ0LWVhc2UtaW4tZHVyYXRpb246IDMwMG1zICFkZWZhdWx0O1xuJHN3aWZ0LWVhc2UtaW4tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC41NSwgMCwgMC41NSwgMC4yKSAhZGVmYXVsdDtcbiRzd2lmdC1lYXNlLWluOiBhbGwgJHN3aWZ0LWVhc2UtaW4tZHVyYXRpb24gJHN3aWZ0LWVhc2UtaW4tdGltaW5nLWZ1bmN0aW9uICFkZWZhdWx0O1xuXG4kc3dpZnQtZWFzZS1pbi1vdXQtZHVyYXRpb246IDUwMG1zICFkZWZhdWx0O1xuJHN3aWZ0LWVhc2UtaW4tb3V0LXRpbWluZy1mdW5jdGlvbjogJGVhc2UtaW4tb3V0LWN1cnZlLWZ1bmN0aW9uICFkZWZhdWx0O1xuJHN3aWZ0LWVhc2UtaW4tb3V0OiBhbGwgJHN3aWZ0LWVhc2UtaW4tb3V0LWR1cmF0aW9uICRzd2lmdC1lYXNlLWluLW91dC10aW1pbmctZnVuY3Rpb24gIWRlZmF1bHQ7XG5cbiRzd2lmdC1saW5lYXItZHVyYXRpb246IDgwbXMgIWRlZmF1bHQ7XG4kc3dpZnQtbGluZWFyLXRpbWluZy1mdW5jdGlvbjogbGluZWFyICFkZWZhdWx0O1xuJHN3aWZ0LWxpbmVhcjogYWxsICRzd2lmdC1saW5lYXItZHVyYXRpb24gJHN3aWZ0LWxpbmVhci10aW1pbmctZnVuY3Rpb24gIWRlZmF1bHQ7XG5cblxuXG4vLyBBIGNvbGxlY3Rpb24gb2YgbWl4aW5zIGFuZCBDU1MgY2xhc3NlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGFwcGx5IGVsZXZhdGlvbiB0byBhIG1hdGVyaWFsXG4vLyBlbGVtZW50LlxuLy8gU2VlOiBodHRwczovL21hdGVyaWFsLmlvL2Rlc2lnbi9lbnZpcm9ubWVudC9lbGV2YXRpb24uaHRtbFxuLy8gRXhhbXBsZXM6XG4vL1xuLy9cbi8vIC5tYXQtZm9vIHtcbi8vICAgQGluY2x1ZGUgJG1hdC1lbGV2YXRpb24oMik7XG4vL1xuLy8gICAmOmFjdGl2ZSB7XG4vLyAgICAgQGluY2x1ZGUgJG1hdC1lbGV2YXRpb24oOCk7XG4vLyAgIH1cbi8vIH1cbi8vXG4vLyA8ZGl2IGlkPVwiZXh0ZXJuYWwtY2FyZFwiIGNsYXNzPVwibWF0LWVsZXZhdGlvbi16MlwiPjxwPlNvbWUgY29udGVudDwvcD48L2Rpdj5cbi8vXG4vLyBGb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIGRlc2lnbiBiZWhpbmQgaG93IGVsZXZhdGlvbiBpcyBpbXBsZW1lbnRlZCwgc2VlIHRoZSBkZXNpZ24gZG9jIGF0XG4vLyBodHRwczovL2dvby5nbC9LcTBrOVouXG5cbi8vIENvbG9ycyBmb3IgdW1icmEsIHBlbnVtYnJhLCBhbmQgYW1iaWVudCBzaGFkb3dzLiBBcyBkZXNjcmliZWQgaW4gdGhlIGRlc2lnbiBkb2MsIGVhY2ggZWxldmF0aW9uXG4vLyBsZXZlbCBpcyBjcmVhdGVkIHVzaW5nIGEgc2V0IG9mIDMgc2hhZG93IHZhbHVlcywgb25lIGZvciB1bWJyYSAodGhlIHNoYWRvdyByZXByZXNlbnRpbmcgdGhlXG4vLyBzcGFjZSBjb21wbGV0ZWx5IG9ic2N1cmVkIGJ5IGFuIG9iamVjdCByZWxhdGl2ZSB0byBpdHMgbGlnaHQgc291cmNlKSwgb25lIGZvciBwZW51bWJyYSAodGhlXG4vLyBzcGFjZSBwYXJ0aWFsbHkgb2JzY3VyZWQgYnkgYW4gb2JqZWN0KSwgYW5kIG9uZSBmb3IgYW1iaWVudCAodGhlIHNwYWNlIHdoaWNoIGNvbnRhaW5zIHRoZSBvYmplY3Rcbi8vIGl0c2VsZikuIEZvciBhIGZ1cnRoZXIgZXhwbGFuYXRpb24gb2YgdGhlc2UgdGVybXMgYW5kIHRoZWlyIG1lYW5pbmdzLCBzZWVcbi8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VtYnJhLF9wZW51bWJyYV9hbmRfYW50dW1icmEuXG5cbi8vIE1hcHMgZm9yIHRoZSBkaWZmZXJlbnQgc2hhZG93IHNldHMgYW5kIHRoZWlyIHZhbHVlcyB3aXRoaW4gZWFjaCB6LXNwYWNlLiBUaGVzZSB2YWx1ZXMgd2VyZVxuLy8gY3JlYXRlZCBieSB0YWtpbmcgYSBmZXcgcmVmZXJlbmNlIHNoYWRvdyBzZXRzIGNyZWF0ZWQgYnkgR29vZ2xlJ3MgRGVzaWduZXJzIGFuZCBpbnRlcnBvbGF0aW5nXG4vLyBhbGwgb2YgdGhlIHZhbHVlcyBiZXR3ZWVuIHRoZW0uXG5cbkBmdW5jdGlvbiBfZ2V0LXVtYnJhLW1hcCgkY29sb3IsICRvcGFjaXR5KSB7XG4gICRzaGFkb3ctY29sb3I6IGlmKHR5cGUtb2YoJGNvbG9yKSA9PSBjb2xvciwgcmdiYSgkY29sb3IsICRvcGFjaXR5ICogMC4yKSwgJGNvbG9yKTtcblxuICBAcmV0dXJuIChcbiAgICAwOiAnMHB4IDBweCAwcHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE6ICcwcHggMnB4IDFweCAtMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDI6ICcwcHggM3B4IDFweCAtMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDM6ICcwcHggM3B4IDNweCAtMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDQ6ICcwcHggMnB4IDRweCAtMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDU6ICcwcHggM3B4IDVweCAtMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDY6ICcwcHggM3B4IDVweCAtMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDc6ICcwcHggNHB4IDVweCAtMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDg6ICcwcHggNXB4IDVweCAtM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDk6ICcwcHggNXB4IDZweCAtM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEwOiAnMHB4IDZweCA2cHggLTNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMTogJzBweCA2cHggN3B4IC00cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTI6ICcwcHggN3B4IDhweCAtNHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEzOiAnMHB4IDdweCA4cHggLTRweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNDogJzBweCA3cHggOXB4IC00cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTU6ICcwcHggOHB4IDlweCAtNXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE2OiAnMHB4IDhweCAxMHB4IC01cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTc6ICcwcHggOHB4IDExcHggLTVweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxODogJzBweCA5cHggMTFweCAtNXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE5OiAnMHB4IDlweCAxMnB4IC02cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjA6ICcwcHggMTBweCAxM3B4IC02cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjE6ICcwcHggMTBweCAxM3B4IC02cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjI6ICcwcHggMTBweCAxNHB4IC02cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjM6ICcwcHggMTFweCAxNHB4IC03cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjQ6ICcwcHggMTFweCAxNXB4IC03cHggI3skc2hhZG93LWNvbG9yfSdcbiAgKTtcbn1cblxuQGZ1bmN0aW9uIF9nZXQtcGVudW1icmEtbWFwKCRjb2xvciwgJG9wYWNpdHkpIHtcbiAgJHNoYWRvdy1jb2xvcjogaWYodHlwZS1vZigkY29sb3IpID09IGNvbG9yLCByZ2JhKCRjb2xvciwgJG9wYWNpdHkgKiAwLjE0KSwgJGNvbG9yKTtcblxuICBAcmV0dXJuIChcbiAgICAwOiAnMHB4IDBweCAwcHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE6ICcwcHggMXB4IDFweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjogJzBweCAycHggMnB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAzOiAnMHB4IDNweCA0cHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDQ6ICcwcHggNHB4IDVweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNTogJzBweCA1cHggOHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA2OiAnMHB4IDZweCAxMHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA3OiAnMHB4IDdweCAxMHB4IDFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA4OiAnMHB4IDhweCAxMHB4IDFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA5OiAnMHB4IDlweCAxMnB4IDFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMDogJzBweCAxMHB4IDE0cHggMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDExOiAnMHB4IDExcHggMTVweCAxcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTI6ICcwcHggMTJweCAxN3B4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMzogJzBweCAxM3B4IDE5cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE0OiAnMHB4IDE0cHggMjFweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTU6ICcwcHggMTVweCAyMnB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNjogJzBweCAxNnB4IDI0cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE3OiAnMHB4IDE3cHggMjZweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTg6ICcwcHggMThweCAyOHB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxOTogJzBweCAxOXB4IDI5cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIwOiAnMHB4IDIwcHggMzFweCAzcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjE6ICcwcHggMjFweCAzM3B4IDNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMjogJzBweCAyMnB4IDM1cHggM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIzOiAnMHB4IDIzcHggMzZweCAzcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjQ6ICcwcHggMjRweCAzOHB4IDNweCAjeyRzaGFkb3ctY29sb3J9J1xuICApO1xufVxuXG5AZnVuY3Rpb24gX2dldC1hbWJpZW50LW1hcCgkY29sb3IsICRvcGFjaXR5KSB7XG4gICRzaGFkb3ctY29sb3I6IGlmKHR5cGUtb2YoJGNvbG9yKSA9PSBjb2xvciwgcmdiYSgkY29sb3IsICRvcGFjaXR5ICogMC4xMiksICRjb2xvcik7XG5cbiAgQHJldHVybiAoXG4gICAgMDogJzBweCAwcHggMHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxOiAnMHB4IDFweCAzcHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDI6ICcwcHggMXB4IDVweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMzogJzBweCAxcHggOHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA0OiAnMHB4IDFweCAxMHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA1OiAnMHB4IDFweCAxNHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA2OiAnMHB4IDFweCAxOHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA3OiAnMHB4IDJweCAxNnB4IDFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA4OiAnMHB4IDNweCAxNHB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA5OiAnMHB4IDNweCAxNnB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMDogJzBweCA0cHggMThweCAzcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTE6ICcwcHggNHB4IDIwcHggM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEyOiAnMHB4IDVweCAyMnB4IDRweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMzogJzBweCA1cHggMjRweCA0cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTQ6ICcwcHggNXB4IDI2cHggNHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE1OiAnMHB4IDZweCAyOHB4IDVweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNjogJzBweCA2cHggMzBweCA1cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTc6ICcwcHggNnB4IDMycHggNXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE4OiAnMHB4IDdweCAzNHB4IDZweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxOTogJzBweCA3cHggMzZweCA2cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjA6ICcwcHggOHB4IDM4cHggN3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIxOiAnMHB4IDhweCA0MHB4IDdweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMjogJzBweCA4cHggNDJweCA3cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjM6ICcwcHggOXB4IDQ0cHggOHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDI0OiAnMHB4IDlweCA0NnB4IDhweCAjeyRzaGFkb3ctY29sb3J9J1xuICApO1xufVxuXG4vLyBUaGUgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgZWxldmF0aW9uIHRyYW5zaXRpb25zLlxuJG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi1kdXJhdGlvbjogMjgwbXMgIWRlZmF1bHQ7XG5cbi8vIFRoZSBkZWZhdWx0IGVhc2luZyB2YWx1ZSBmb3IgZWxldmF0aW9uIHRyYW5zaXRpb25zLlxuJG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ICRtYXQtZmFzdC1vdXQtc2xvdy1pbi10aW1pbmctZnVuY3Rpb247XG5cbi8vIFRoZSBkZWZhdWx0IGNvbG9yIGZvciBlbGV2YXRpb24gc2hhZG93cy5cbiRtYXQtZWxldmF0aW9uLWNvbG9yOiBibGFjayAhZGVmYXVsdDtcblxuLy8gVGhlIGRlZmF1bHQgb3BhY2l0eSBzY2FsaW5nIHZhbHVlIGZvciBlbGV2YXRpb24gc2hhZG93cy5cbiRtYXQtZWxldmF0aW9uLW9wYWNpdHk6IDEgIWRlZmF1bHQ7XG5cbi8vIFByZWZpeCBmb3IgZWxldmF0aW9uLXJlbGF0ZWQgc2VsZWN0b3JzLlxuJF9tYXQtZWxldmF0aW9uLXByZWZpeDogJ21hdC1lbGV2YXRpb24teic7XG5cbi8vIEFwcGxpZXMgdGhlIGNvcnJlY3QgY3NzIHJ1bGVzIHRvIGFuIGVsZW1lbnQgdG8gZ2l2ZSBpdCB0aGUgZWxldmF0aW9uIHNwZWNpZmllZCBieSAkelZhbHVlLlxuLy8gVGhlICR6VmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDI0LlxuQG1peGluIG1hdC1lbGV2YXRpb24oJHpWYWx1ZSwgJGNvbG9yOiAkbWF0LWVsZXZhdGlvbi1jb2xvciwgJG9wYWNpdHk6ICRtYXQtZWxldmF0aW9uLW9wYWNpdHkpIHtcbiAgQGlmIHR5cGUtb2YoJHpWYWx1ZSkgIT0gbnVtYmVyIG9yIG5vdCB1bml0bGVzcygkelZhbHVlKSB7XG4gICAgQGVycm9yICckelZhbHVlIG11c3QgYmUgYSB1bml0bGVzcyBudW1iZXInO1xuICB9XG4gIEBpZiAkelZhbHVlIDwgMCBvciAkelZhbHVlID4gMjQge1xuICAgIEBlcnJvciAnJHpWYWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjQnO1xuICB9XG5cbiAgYm94LXNoYWRvdzogI3ttYXAtZ2V0KF9nZXQtdW1icmEtbWFwKCRjb2xvciwgJG9wYWNpdHkpLCAkelZhbHVlKX0sXG4gICAgICAgICAgICAgICN7bWFwLWdldChfZ2V0LXBlbnVtYnJhLW1hcCgkY29sb3IsICRvcGFjaXR5KSwgJHpWYWx1ZSl9LFxuICAgICAgICAgICAgICAje21hcC1nZXQoX2dldC1hbWJpZW50LW1hcCgkY29sb3IsICRvcGFjaXR5KSwgJHpWYWx1ZSl9O1xufVxuXG5AbWl4aW4gX21hdC10aGVtZS1lbGV2YXRpb24oJHpWYWx1ZSwgJHRoZW1lLCAkb3BhY2l0eTogJG1hdC1lbGV2YXRpb24tb3BhY2l0eSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkZWxldmF0aW9uLWNvbG9yOiBtYXAtZ2V0KCRmb3JlZ3JvdW5kLCBlbGV2YXRpb24pO1xuICAkZWxldmF0aW9uLWNvbG9yLW9yLWRlZmF1bHQ6IGlmKCRlbGV2YXRpb24tY29sb3IgPT0gbnVsbCwgJG1hdC1lbGV2YXRpb24tY29sb3IsICRlbGV2YXRpb24tY29sb3IpO1xuXG4gIEBpbmNsdWRlIG1hdC1lbGV2YXRpb24oJHpWYWx1ZSwgJGVsZXZhdGlvbi1jb2xvci1vci1kZWZhdWx0LCAkb3BhY2l0eSk7XG59XG5cbi8vIEFwcGxpZXMgdGhlIGVsZXZhdGlvbiB0byBhbiBlbGVtZW50IGluIGEgbWFubmVyIHRoYXQgYWxsb3dzXG4vLyBjb25zdW1lcnMgdG8gb3ZlcnJpZGUgaXQgdmlhIHRoZSBNYXRlcmlhbCBlbGV2YXRpb24gY2xhc3Nlcy5cbkBtaXhpbiBtYXQtb3ZlcnJpZGFibGUtZWxldmF0aW9uKFxuICAgICR6VmFsdWUsXG4gICAgJGNvbG9yOiAkbWF0LWVsZXZhdGlvbi1jb2xvcixcbiAgICAkb3BhY2l0eTogJG1hdC1lbGV2YXRpb24tb3BhY2l0eSkge1xuICAmOm5vdChbY2xhc3MqPScjeyRfbWF0LWVsZXZhdGlvbi1wcmVmaXh9J10pIHtcbiAgICBAaW5jbHVkZSBtYXQtZWxldmF0aW9uKCR6VmFsdWUsICRjb2xvciwgJG9wYWNpdHkpO1xuICB9XG59XG5cbkBtaXhpbiBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigkelZhbHVlLCAkdGhlbWUsICRvcGFjaXR5OiAkbWF0LWVsZXZhdGlvbi1vcGFjaXR5KSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRlbGV2YXRpb24tY29sb3I6IG1hcC1nZXQoJGZvcmVncm91bmQsIGVsZXZhdGlvbik7XG4gICRlbGV2YXRpb24tY29sb3Itb3ItZGVmYXVsdDogaWYoJGVsZXZhdGlvbi1jb2xvciA9PSBudWxsLCAkbWF0LWVsZXZhdGlvbi1jb2xvciwgJGVsZXZhdGlvbi1jb2xvcik7XG5cbiAgQGluY2x1ZGUgbWF0LW92ZXJyaWRhYmxlLWVsZXZhdGlvbigkelZhbHVlLCAkZWxldmF0aW9uLWNvbG9yLW9yLWRlZmF1bHQsICRvcGFjaXR5KTtcbn1cblxuLy8gUmV0dXJucyBhIHN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBmb3IgYSB0cmFuc2l0aW9uIHByb3BlcnR5IGZvciBlbGV2YXRpb24uXG4vLyBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgaXMgdXNlZnVsIGluIHNpdHVhdGlvbnMgd2hlcmUgYSBjb21wb25lbnQgbmVlZHMgdG8gdHJhbnNpdGlvblxuLy8gbW9yZSB0aGFuIG9uZSBwcm9wZXJ0eS5cbi8vXG4vLyAuZm9vIHtcbi8vICAgdHJhbnNpdGlvbjogbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLXByb3BlcnR5LXZhbHVlKCksIG9wYWNpdHkgMTAwbXMgZWFzZTtcbi8vIH1cbkBmdW5jdGlvbiBtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tcHJvcGVydHktdmFsdWUoXG4gICAgJGR1cmF0aW9uOiAkbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLWR1cmF0aW9uLFxuICAgICRlYXNpbmc6ICRtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSB7XG4gIEByZXR1cm4gYm94LXNoYWRvdyAjeyRkdXJhdGlvbn0gI3skZWFzaW5nfTtcbn1cblxuLy8gQXBwbGllcyB0aGUgY29ycmVjdCBjc3MgcnVsZXMgbmVlZGVkIHRvIGhhdmUgYW4gZWxlbWVudCB0cmFuc2l0aW9uIGJldHdlZW4gZWxldmF0aW9ucy5cbi8vIFRoaXMgbWl4aW4gc2hvdWxkIGJlIGFwcGxpZWQgdG8gZWxlbWVudHMgd2hvc2UgZWxldmF0aW9uIHZhbHVlcyB3aWxsIGNoYW5nZSBkZXBlbmRpbmcgb24gdGhlaXJcbi8vIGNvbnRleHQgKGUuZy4gd2hlbiBhY3RpdmUgb3IgZGlzYWJsZWQpLlxuLy9cbi8vIE5PVEUodHJhdmlza2F1Zm1hbik6IEJvdGggdGhpcyBtaXhpbiBhbmQgdGhlIGFib3ZlIGZ1bmN0aW9uIHVzZSBkZWZhdWx0IHBhcmFtZXRlcnMgc28gdGhleSBjYW5cbi8vIGJlIHVzZWQgaW4gdGhlIHNhbWUgd2F5IGJ5IGNsaWVudHMuXG5AbWl4aW4gbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uKFxuICAgICRkdXJhdGlvbjogJG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi1kdXJhdGlvbixcbiAgICAkZWFzaW5nOiAkbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikge1xuICB0cmFuc2l0aW9uOiBtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tcHJvcGVydHktdmFsdWUoJGR1cmF0aW9uLCAkZWFzaW5nKTtcbn1cblxuLy8gQ29sb3IgcGFsZXR0ZXMgZnJvbSB0aGUgTWF0ZXJpYWwgRGVzaWduIHNwZWMuXG4vLyBTZWUgaHR0cHM6Ly9tYXRlcmlhbC5pby9kZXNpZ24vY29sb3IvXG4vL1xuLy8gQ29udHJhc3QgY29sb3JzIGFyZSBoYXJkLWNvZGVkIGJlY2F1c2UgaXQgaXMgdG9vIGRpZmZpY3VsdCAocHJvYmFibHkgaW1wb3NzaWJsZSkgdG9cbi8vIGNhbGN1bGF0ZSB0aGVtLiBUaGVzZSBjb250cmFzdCBjb2xvcnMgYXJlIHB1bGxlZCBmcm9tIHRoZSBwdWJsaWMgTWF0ZXJpYWwgRGVzaWduIHNwZWMgc3dhdGNoZXMuXG4vLyBXaGlsZSB0aGUgY29udHJhc3QgY29sb3JzIGluIHRoZSBzcGVjIGFyZSBub3QgcHJlc2NyaXB0aXZlLCB3ZSB1c2UgdGhlbSBmb3IgY29udmVuaWVuY2UuXG5cblxuLy8gQGRlcHJlY2F0ZWQgcmVuYW1lZCB0byAkZGFyay1wcmltYXJ5LXRleHQuXG4vLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wXG4kYmxhY2stODctb3BhY2l0eTogcmdiYShibGFjaywgMC44Nyk7XG4vLyBAZGVwcmVjYXRlZCByZW5hbWVkIHRvICRsaWdodC1wcmltYXJ5LXRleHQuXG4vLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wXG4kd2hpdGUtODctb3BhY2l0eTogcmdiYSh3aGl0ZSwgMC44Nyk7XG4vLyBAZGVwcmVjYXRlZCB1c2UgJGRhcmstW3NlY29uZGFyeS10ZXh0LGRpc2FibGVkLXRleHQsZGl2aWRlcnMsZm9jdXNlZF0gaW5zdGVhZC5cbi8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjBcbiRibGFjay0xMi1vcGFjaXR5OiByZ2JhKGJsYWNrLCAwLjEyKTtcbi8vIEBkZXByZWNhdGVkIHVzZSAkbGlnaHQtW3NlY29uZGFyeS10ZXh0LGRpc2FibGVkLXRleHQsZGl2aWRlcnMsZm9jdXNlZF0gaW5zdGVhZC5cbi8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjBcbiR3aGl0ZS0xMi1vcGFjaXR5OiByZ2JhKHdoaXRlLCAwLjEyKTtcbi8vIEBkZXByZWNhdGVkIHVzZSAkZGFyay1bc2Vjb25kYXJ5LXRleHQsZGlzYWJsZWQtdGV4dCxkaXZpZGVycyxmb2N1c2VkXSBpbnN0ZWFkLlxuLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMFxuJGJsYWNrLTYtb3BhY2l0eTogcmdiYShibGFjaywgMC4wNik7XG4vLyBAZGVwcmVjYXRlZCB1c2UgJGxpZ2h0LVtzZWNvbmRhcnktdGV4dCxkaXNhYmxlZC10ZXh0LGRpdmlkZXJzLGZvY3VzZWRdIGluc3RlYWQuXG4vLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wXG4kd2hpdGUtNi1vcGFjaXR5OiByZ2JhKHdoaXRlLCAwLjA2KTtcblxuJGRhcmstcHJpbWFyeS10ZXh0OiByZ2JhKGJsYWNrLCAwLjg3KTtcbiRkYXJrLXNlY29uZGFyeS10ZXh0OiByZ2JhKGJsYWNrLCAwLjU0KTtcbiRkYXJrLWRpc2FibGVkLXRleHQ6IHJnYmEoYmxhY2ssIDAuMzgpO1xuJGRhcmstZGl2aWRlcnM6IHJnYmEoYmxhY2ssIDAuMTIpO1xuJGRhcmstZm9jdXNlZDogcmdiYShibGFjaywgMC4xMik7XG4kbGlnaHQtcHJpbWFyeS10ZXh0OiB3aGl0ZTtcbiRsaWdodC1zZWNvbmRhcnktdGV4dDogcmdiYSh3aGl0ZSwgMC43KTtcbiRsaWdodC1kaXNhYmxlZC10ZXh0OiByZ2JhKHdoaXRlLCAwLjUpO1xuJGxpZ2h0LWRpdmlkZXJzOiByZ2JhKHdoaXRlLCAwLjEyKTtcbiRsaWdodC1mb2N1c2VkOiByZ2JhKHdoaXRlLCAwLjEyKTtcblxuJG1hdC1yZWQ6IChcbiAgNTA6ICNmZmViZWUsXG4gIDEwMDogI2ZmY2RkMixcbiAgMjAwOiAjZWY5YTlhLFxuICAzMDA6ICNlNTczNzMsXG4gIDQwMDogI2VmNTM1MCxcbiAgNTAwOiAjZjQ0MzM2LFxuICA2MDA6ICNlNTM5MzUsXG4gIDcwMDogI2QzMmYyZixcbiAgODAwOiAjYzYyODI4LFxuICA5MDA6ICNiNzFjMWMsXG4gIEExMDA6ICNmZjhhODAsXG4gIEEyMDA6ICNmZjUyNTIsXG4gIEE0MDA6ICNmZjE3NDQsXG4gIEE3MDA6ICNkNTAwMDAsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1waW5rOiAoXG4gIDUwOiAjZmNlNGVjLFxuICAxMDA6ICNmOGJiZDAsXG4gIDIwMDogI2Y0OGZiMSxcbiAgMzAwOiAjZjA2MjkyLFxuICA0MDA6ICNlYzQwN2EsXG4gIDUwMDogI2U5MWU2MyxcbiAgNjAwOiAjZDgxYjYwLFxuICA3MDA6ICNjMjE4NWIsXG4gIDgwMDogI2FkMTQ1NyxcbiAgOTAwOiAjODgwZTRmLFxuICBBMTAwOiAjZmY4MGFiLFxuICBBMjAwOiAjZmY0MDgxLFxuICBBNDAwOiAjZjUwMDU3LFxuICBBNzAwOiAjYzUxMTYyLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtcHVycGxlOiAoXG4gIDUwOiAjZjNlNWY1LFxuICAxMDA6ICNlMWJlZTcsXG4gIDIwMDogI2NlOTNkOCxcbiAgMzAwOiAjYmE2OGM4LFxuICA0MDA6ICNhYjQ3YmMsXG4gIDUwMDogIzljMjdiMCxcbiAgNjAwOiAjOGUyNGFhLFxuICA3MDA6ICM3YjFmYTIsXG4gIDgwMDogIzZhMWI5YSxcbiAgOTAwOiAjNGExNDhjLFxuICBBMTAwOiAjZWE4MGZjLFxuICBBMjAwOiAjZTA0MGZiLFxuICBBNDAwOiAjZDUwMGY5LFxuICBBNzAwOiAjYWEwMGZmLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1kZWVwLXB1cnBsZTogKFxuICA1MDogI2VkZTdmNixcbiAgMTAwOiAjZDFjNGU5LFxuICAyMDA6ICNiMzlkZGIsXG4gIDMwMDogIzk1NzVjZCxcbiAgNDAwOiAjN2U1N2MyLFxuICA1MDA6ICM2NzNhYjcsXG4gIDYwMDogIzVlMzViMSxcbiAgNzAwOiAjNTEyZGE4LFxuICA4MDA6ICM0NTI3YTAsXG4gIDkwMDogIzMxMWI5MixcbiAgQTEwMDogI2IzODhmZixcbiAgQTIwMDogIzdjNGRmZixcbiAgQTQwMDogIzY1MWZmZixcbiAgQTcwMDogIzYyMDBlYSxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtaW5kaWdvOiAoXG4gIDUwOiAjZThlYWY2LFxuICAxMDA6ICNjNWNhZTksXG4gIDIwMDogIzlmYThkYSxcbiAgMzAwOiAjNzk4NmNiLFxuICA0MDA6ICM1YzZiYzAsXG4gIDUwMDogIzNmNTFiNSxcbiAgNjAwOiAjMzk0OWFiLFxuICA3MDA6ICMzMDNmOWYsXG4gIDgwMDogIzI4MzU5MyxcbiAgOTAwOiAjMWEyMzdlLFxuICBBMTAwOiAjOGM5ZWZmLFxuICBBMjAwOiAjNTM2ZGZlLFxuICBBNDAwOiAjM2Q1YWZlLFxuICBBNzAwOiAjMzA0ZmZlLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1ibHVlOiAoXG4gIDUwOiAjZTNmMmZkLFxuICAxMDA6ICNiYmRlZmIsXG4gIDIwMDogIzkwY2FmOSxcbiAgMzAwOiAjNjRiNWY2LFxuICA0MDA6ICM0MmE1ZjUsXG4gIDUwMDogIzIxOTZmMyxcbiAgNjAwOiAjMWU4OGU1LFxuICA3MDA6ICMxOTc2ZDIsXG4gIDgwMDogIzE1NjVjMCxcbiAgOTAwOiAjMGQ0N2ExLFxuICBBMTAwOiAjODJiMWZmLFxuICBBMjAwOiAjNDQ4YWZmLFxuICBBNDAwOiAjMjk3OWZmLFxuICBBNzAwOiAjMjk2MmZmLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtbGlnaHQtYmx1ZTogKFxuICA1MDogI2UxZjVmZSxcbiAgMTAwOiAjYjNlNWZjLFxuICAyMDA6ICM4MWQ0ZmEsXG4gIDMwMDogIzRmYzNmNyxcbiAgNDAwOiAjMjliNmY2LFxuICA1MDA6ICMwM2E5ZjQsXG4gIDYwMDogIzAzOWJlNSxcbiAgNzAwOiAjMDI4OGQxLFxuICA4MDA6ICMwMjc3YmQsXG4gIDkwMDogIzAxNTc5YixcbiAgQTEwMDogIzgwZDhmZixcbiAgQTIwMDogIzQwYzRmZixcbiAgQTQwMDogIzAwYjBmZixcbiAgQTcwMDogIzAwOTFlYSxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1jeWFuOiAoXG4gIDUwOiAjZTBmN2ZhLFxuICAxMDA6ICNiMmViZjIsXG4gIDIwMDogIzgwZGVlYSxcbiAgMzAwOiAjNGRkMGUxLFxuICA0MDA6ICMyNmM2ZGEsXG4gIDUwMDogIzAwYmNkNCxcbiAgNjAwOiAjMDBhY2MxLFxuICA3MDA6ICMwMDk3YTcsXG4gIDgwMDogIzAwODM4ZixcbiAgOTAwOiAjMDA2MDY0LFxuICBBMTAwOiAjODRmZmZmLFxuICBBMjAwOiAjMThmZmZmLFxuICBBNDAwOiAjMDBlNWZmLFxuICBBNzAwOiAjMDBiOGQ0LFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtdGVhbDogKFxuICA1MDogI2UwZjJmMSxcbiAgMTAwOiAjYjJkZmRiLFxuICAyMDA6ICM4MGNiYzQsXG4gIDMwMDogIzRkYjZhYyxcbiAgNDAwOiAjMjZhNjlhLFxuICA1MDA6ICMwMDk2ODgsXG4gIDYwMDogIzAwODk3YixcbiAgNzAwOiAjMDA3OTZiLFxuICA4MDA6ICMwMDY5NWMsXG4gIDkwMDogIzAwNGQ0MCxcbiAgQTEwMDogI2E3ZmZlYixcbiAgQTIwMDogIzY0ZmZkYSxcbiAgQTQwMDogIzFkZTliNixcbiAgQTcwMDogIzAwYmZhNSxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWdyZWVuOiAoXG4gIDUwOiAjZThmNWU5LFxuICAxMDA6ICNjOGU2YzksXG4gIDIwMDogI2E1ZDZhNyxcbiAgMzAwOiAjODFjNzg0LFxuICA0MDA6ICM2NmJiNmEsXG4gIDUwMDogIzRjYWY1MCxcbiAgNjAwOiAjNDNhMDQ3LFxuICA3MDA6ICMzODhlM2MsXG4gIDgwMDogIzJlN2QzMixcbiAgOTAwOiAjMWI1ZTIwLFxuICBBMTAwOiAjYjlmNmNhLFxuICBBMjAwOiAjNjlmMGFlLFxuICBBNDAwOiAjMDBlNjc2LFxuICBBNzAwOiAjMDBjODUzLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1saWdodC1ncmVlbjogKFxuICA1MDogI2YxZjhlOSxcbiAgMTAwOiAjZGNlZGM4LFxuICAyMDA6ICNjNWUxYTUsXG4gIDMwMDogI2FlZDU4MSxcbiAgNDAwOiAjOWNjYzY1LFxuICA1MDA6ICM4YmMzNGEsXG4gIDYwMDogIzdjYjM0MixcbiAgNzAwOiAjNjg5ZjM4LFxuICA4MDA6ICM1NThiMmYsXG4gIDkwMDogIzMzNjkxZSxcbiAgQTEwMDogI2NjZmY5MCxcbiAgQTIwMDogI2IyZmY1OSxcbiAgQTQwMDogIzc2ZmYwMyxcbiAgQTcwMDogIzY0ZGQxNyxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1saW1lOiAoXG4gIDUwOiAjZjlmYmU3LFxuICAxMDA6ICNmMGY0YzMsXG4gIDIwMDogI2U2ZWU5YyxcbiAgMzAwOiAjZGNlNzc1LFxuICA0MDA6ICNkNGUxNTcsXG4gIDUwMDogI2NkZGMzOSxcbiAgNjAwOiAjYzBjYTMzLFxuICA3MDA6ICNhZmI0MmIsXG4gIDgwMDogIzllOWQyNCxcbiAgOTAwOiAjODI3NzE3LFxuICBBMTAwOiAjZjRmZjgxLFxuICBBMjAwOiAjZWVmZjQxLFxuICBBNDAwOiAjYzZmZjAwLFxuICBBNzAwOiAjYWVlYTAwLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC15ZWxsb3c6IChcbiAgNTA6ICNmZmZkZTcsXG4gIDEwMDogI2ZmZjljNCxcbiAgMjAwOiAjZmZmNTlkLFxuICAzMDA6ICNmZmYxNzYsXG4gIDQwMDogI2ZmZWU1OCxcbiAgNTAwOiAjZmZlYjNiLFxuICA2MDA6ICNmZGQ4MzUsXG4gIDcwMDogI2ZiYzAyZCxcbiAgODAwOiAjZjlhODI1LFxuICA5MDA6ICNmNTdmMTcsXG4gIEExMDA6ICNmZmZmOGQsXG4gIEEyMDA6ICNmZmZmMDAsXG4gIEE0MDA6ICNmZmVhMDAsXG4gIEE3MDA6ICNmZmQ2MDAsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtYW1iZXI6IChcbiAgNTA6ICNmZmY4ZTEsXG4gIDEwMDogI2ZmZWNiMyxcbiAgMjAwOiAjZmZlMDgyLFxuICAzMDA6ICNmZmQ1NGYsXG4gIDQwMDogI2ZmY2EyOCxcbiAgNTAwOiAjZmZjMTA3LFxuICA2MDA6ICNmZmIzMDAsXG4gIDcwMDogI2ZmYTAwMCxcbiAgODAwOiAjZmY4ZjAwLFxuICA5MDA6ICNmZjZmMDAsXG4gIEExMDA6ICNmZmU1N2YsXG4gIEEyMDA6ICNmZmQ3NDAsXG4gIEE0MDA6ICNmZmM0MDAsXG4gIEE3MDA6ICNmZmFiMDAsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtb3JhbmdlOiAoXG4gIDUwOiAjZmZmM2UwLFxuICAxMDA6ICNmZmUwYjIsXG4gIDIwMDogI2ZmY2M4MCxcbiAgMzAwOiAjZmZiNzRkLFxuICA0MDA6ICNmZmE3MjYsXG4gIDUwMDogI2ZmOTgwMCxcbiAgNjAwOiAjZmI4YzAwLFxuICA3MDA6ICNmNTdjMDAsXG4gIDgwMDogI2VmNmMwMCxcbiAgOTAwOiAjZTY1MTAwLFxuICBBMTAwOiAjZmZkMTgwLFxuICBBMjAwOiAjZmZhYjQwLFxuICBBNDAwOiAjZmY5MTAwLFxuICBBNzAwOiAjZmY2ZDAwLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiBibGFjayxcbiAgKVxuKTtcblxuJG1hdC1kZWVwLW9yYW5nZTogKFxuICA1MDogI2ZiZTllNyxcbiAgMTAwOiAjZmZjY2JjLFxuICAyMDA6ICNmZmFiOTEsXG4gIDMwMDogI2ZmOGE2NSxcbiAgNDAwOiAjZmY3MDQzLFxuICA1MDA6ICNmZjU3MjIsXG4gIDYwMDogI2Y0NTExZSxcbiAgNzAwOiAjZTY0YTE5LFxuICA4MDA6ICNkODQzMTUsXG4gIDkwMDogI2JmMzYwYyxcbiAgQTEwMDogI2ZmOWU4MCxcbiAgQTIwMDogI2ZmNmU0MCxcbiAgQTQwMDogI2ZmM2QwMCxcbiAgQTcwMDogI2RkMmMwMCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtYnJvd246IChcbiAgNTA6ICNlZmViZTksXG4gIDEwMDogI2Q3Y2NjOCxcbiAgMjAwOiAjYmNhYWE0LFxuICAzMDA6ICNhMTg4N2YsXG4gIDQwMDogIzhkNmU2MyxcbiAgNTAwOiAjNzk1NTQ4LFxuICA2MDA6ICM2ZDRjNDEsXG4gIDcwMDogIzVkNDAzNyxcbiAgODAwOiAjNGUzNDJlLFxuICA5MDA6ICMzZTI3MjMsXG4gIEExMDA6ICNkN2NjYzgsXG4gIEEyMDA6ICNiY2FhYTQsXG4gIEE0MDA6ICM4ZDZlNjMsXG4gIEE3MDA6ICM1ZDQwMzcsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtZ3JleTogKFxuICA1MDogI2ZhZmFmYSxcbiAgMTAwOiAjZjVmNWY1LFxuICAyMDA6ICNlZWVlZWUsXG4gIDMwMDogI2UwZTBlMCxcbiAgNDAwOiAjYmRiZGJkLFxuICA1MDA6ICM5ZTllOWUsXG4gIDYwMDogIzc1NzU3NSxcbiAgNzAwOiAjNjE2MTYxLFxuICA4MDA6ICM0MjQyNDIsXG4gIDkwMDogIzIxMjEyMSxcbiAgQTEwMDogI2ZmZmZmZixcbiAgQTIwMDogI2VlZWVlZSxcbiAgQTQwMDogI2JkYmRiZCxcbiAgQTcwMDogIzYxNjE2MSxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4vLyBBbGlhcyBmb3IgYWx0ZXJuYXRlIHNwZWxsaW5nLlxuJG1hdC1ncmF5OiAkbWF0LWdyZXk7XG5cbiRtYXQtYmx1ZS1ncmV5OiAoXG4gIDUwOiAjZWNlZmYxLFxuICAxMDA6ICNjZmQ4ZGMsXG4gIDIwMDogI2IwYmVjNSxcbiAgMzAwOiAjOTBhNGFlLFxuICA0MDA6ICM3ODkwOWMsXG4gIDUwMDogIzYwN2Q4YixcbiAgNjAwOiAjNTQ2ZTdhLFxuICA3MDA6ICM0NTVhNjQsXG4gIDgwMDogIzM3NDc0ZixcbiAgOTAwOiAjMjYzMjM4LFxuICBBMTAwOiAjY2ZkOGRjLFxuICBBMjAwOiAjYjBiZWM1LFxuICBBNDAwOiAjNzg5MDljLFxuICBBNzAwOiAjNDU1YTY0LFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbi8vIEFsaWFzIGZvciBhbHRlcm5hdGUgc3BlbGxpbmcuXG4kbWF0LWJsdWUtZ3JheTogJG1hdC1ibHVlLWdyZXk7XG5cblxuLy8gQmFja2dyb3VuZCBwYWxldHRlIGZvciBsaWdodCB0aGVtZXMuXG4kbWF0LWxpZ2h0LXRoZW1lLWJhY2tncm91bmQ6IChcbiAgc3RhdHVzLWJhcjogbWFwX2dldCgkbWF0LWdyZXksIDMwMCksXG4gIGFwcC1iYXI6ICAgIG1hcF9nZXQoJG1hdC1ncmV5LCAxMDApLFxuICBiYWNrZ3JvdW5kOiBtYXBfZ2V0KCRtYXQtZ3JleSwgNTApLFxuICBob3ZlcjogICAgICByZ2JhKGJsYWNrLCAwLjA0KSwgLy8gVE9ETyhrYXJhKTogY2hlY2sgc3R5bGUgd2l0aCBNYXRlcmlhbCBEZXNpZ24gVVhcbiAgY2FyZDogICAgICAgd2hpdGUsXG4gIGRpYWxvZzogICAgIHdoaXRlLFxuICBkaXNhYmxlZC1idXR0b246IHJnYmEoYmxhY2ssIDAuMTIpLFxuICByYWlzZWQtYnV0dG9uOiB3aGl0ZSxcbiAgZm9jdXNlZC1idXR0b246ICRkYXJrLWZvY3VzZWQsXG4gIHNlbGVjdGVkLWJ1dHRvbjogbWFwX2dldCgkbWF0LWdyZXksIDMwMCksXG4gIHNlbGVjdGVkLWRpc2FibGVkLWJ1dHRvbjogbWFwX2dldCgkbWF0LWdyZXksIDQwMCksXG4gIGRpc2FibGVkLWJ1dHRvbi10b2dnbGU6IG1hcF9nZXQoJG1hdC1ncmV5LCAyMDApLFxuICB1bnNlbGVjdGVkLWNoaXA6IG1hcF9nZXQoJG1hdC1ncmV5LCAzMDApLFxuICBkaXNhYmxlZC1saXN0LW9wdGlvbjogbWFwX2dldCgkbWF0LWdyZXksIDIwMCksXG4gIHRvb2x0aXA6IG1hcF9nZXQoJG1hdC1ncmV5LCA3MDApLFxuKTtcblxuLy8gQmFja2dyb3VuZCBwYWxldHRlIGZvciBkYXJrIHRoZW1lcy5cbiRtYXQtZGFyay10aGVtZS1iYWNrZ3JvdW5kOiAoXG4gIHN0YXR1cy1iYXI6IGJsYWNrLFxuICBhcHAtYmFyOiAgICBtYXBfZ2V0KCRtYXQtZ3JleSwgOTAwKSxcbiAgYmFja2dyb3VuZDogIzMwMzAzMCxcbiAgaG92ZXI6ICAgICAgcmdiYSh3aGl0ZSwgMC4wNCksIC8vIFRPRE8oa2FyYSk6IGNoZWNrIHN0eWxlIHdpdGggTWF0ZXJpYWwgRGVzaWduIFVYXG4gIGNhcmQ6ICAgICAgIG1hcF9nZXQoJG1hdC1ncmV5LCA4MDApLFxuICBkaWFsb2c6ICAgICBtYXBfZ2V0KCRtYXQtZ3JleSwgODAwKSxcbiAgZGlzYWJsZWQtYnV0dG9uOiByZ2JhKHdoaXRlLCAwLjEyKSxcbiAgcmFpc2VkLWJ1dHRvbjogbWFwLWdldCgkbWF0LWdyZXksIDgwMCksXG4gIGZvY3VzZWQtYnV0dG9uOiAkbGlnaHQtZm9jdXNlZCxcbiAgc2VsZWN0ZWQtYnV0dG9uOiBtYXBfZ2V0KCRtYXQtZ3JleSwgOTAwKSxcbiAgc2VsZWN0ZWQtZGlzYWJsZWQtYnV0dG9uOiBtYXBfZ2V0KCRtYXQtZ3JleSwgODAwKSxcbiAgZGlzYWJsZWQtYnV0dG9uLXRvZ2dsZTogYmxhY2ssXG4gIHVuc2VsZWN0ZWQtY2hpcDogbWFwX2dldCgkbWF0LWdyZXksIDcwMCksXG4gIGRpc2FibGVkLWxpc3Qtb3B0aW9uOiBibGFjayxcbiAgdG9vbHRpcDogbWFwX2dldCgkbWF0LWdyZXksIDcwMCksXG4pO1xuXG4vLyBGb3JlZ3JvdW5kIHBhbGV0dGUgZm9yIGxpZ2h0IHRoZW1lcy5cbiRtYXQtbGlnaHQtdGhlbWUtZm9yZWdyb3VuZDogKFxuICBiYXNlOiAgICAgICAgICAgICAgYmxhY2ssXG4gIGRpdmlkZXI6ICAgICAgICAgICAkZGFyay1kaXZpZGVycyxcbiAgZGl2aWRlcnM6ICAgICAgICAgICRkYXJrLWRpdmlkZXJzLFxuICBkaXNhYmxlZDogICAgICAgICAgJGRhcmstZGlzYWJsZWQtdGV4dCxcbiAgZGlzYWJsZWQtYnV0dG9uOiAgIHJnYmEoYmxhY2ssIDAuMjYpLFxuICBkaXNhYmxlZC10ZXh0OiAgICAgJGRhcmstZGlzYWJsZWQtdGV4dCxcbiAgZWxldmF0aW9uOiAgICAgICAgIGJsYWNrLFxuICBoaW50LXRleHQ6ICAgICAgICAgJGRhcmstZGlzYWJsZWQtdGV4dCxcbiAgc2Vjb25kYXJ5LXRleHQ6ICAgICRkYXJrLXNlY29uZGFyeS10ZXh0LFxuICBpY29uOiAgICAgICAgICAgICAgcmdiYShibGFjaywgMC41NCksXG4gIGljb25zOiAgICAgICAgICAgICByZ2JhKGJsYWNrLCAwLjU0KSxcbiAgdGV4dDogICAgICAgICAgICAgIHJnYmEoYmxhY2ssIDAuODcpLFxuICBzbGlkZXItbWluOiAgICAgICAgcmdiYShibGFjaywgMC44NyksXG4gIHNsaWRlci1vZmY6ICAgICAgICByZ2JhKGJsYWNrLCAwLjI2KSxcbiAgc2xpZGVyLW9mZi1hY3RpdmU6IHJnYmEoYmxhY2ssIDAuMzgpLFxuKTtcblxuLy8gRm9yZWdyb3VuZCBwYWxldHRlIGZvciBkYXJrIHRoZW1lcy5cbiRtYXQtZGFyay10aGVtZS1mb3JlZ3JvdW5kOiAoXG4gIGJhc2U6ICAgICAgICAgICAgICB3aGl0ZSxcbiAgZGl2aWRlcjogICAgICAgICAgICRsaWdodC1kaXZpZGVycyxcbiAgZGl2aWRlcnM6ICAgICAgICAgICRsaWdodC1kaXZpZGVycyxcbiAgZGlzYWJsZWQ6ICAgICAgICAgICRsaWdodC1kaXNhYmxlZC10ZXh0LFxuICBkaXNhYmxlZC1idXR0b246ICAgcmdiYSh3aGl0ZSwgMC4zKSxcbiAgZGlzYWJsZWQtdGV4dDogICAgICRsaWdodC1kaXNhYmxlZC10ZXh0LFxuICBlbGV2YXRpb246ICAgICAgICAgYmxhY2ssXG4gIGhpbnQtdGV4dDogICAgICAgICAkbGlnaHQtZGlzYWJsZWQtdGV4dCxcbiAgc2Vjb25kYXJ5LXRleHQ6ICAgICRsaWdodC1zZWNvbmRhcnktdGV4dCxcbiAgaWNvbjogICAgICAgICAgICAgIHdoaXRlLFxuICBpY29uczogICAgICAgICAgICAgd2hpdGUsXG4gIHRleHQ6ICAgICAgICAgICAgICB3aGl0ZSxcbiAgc2xpZGVyLW1pbjogICAgICAgIHdoaXRlLFxuICBzbGlkZXItb2ZmOiAgICAgICAgcmdiYSh3aGl0ZSwgMC4zKSxcbiAgc2xpZGVyLW9mZi1hY3RpdmU6IHJnYmEod2hpdGUsIDAuMyksXG4pO1xuXG5cblxuLy8gRm9yIGEgZ2l2ZW4gaHVlIGluIGEgcGFsZXR0ZSwgcmV0dXJuIHRoZSBjb250cmFzdCBjb2xvciBmcm9tIHRoZSBtYXAgb2YgY29udHJhc3QgcGFsZXR0ZXMuXG4vLyBAcGFyYW0gJGNvbG9yLW1hcFxuLy8gQHBhcmFtICRodWVcbkBmdW5jdGlvbiBtYXQtY29udHJhc3QoJHBhbGV0dGUsICRodWUpIHtcbiAgQHJldHVybiBtYXAtZ2V0KG1hcC1nZXQoJHBhbGV0dGUsIGNvbnRyYXN0KSwgJGh1ZSk7XG59XG5cblxuLy8gQ3JlYXRlcyBhIG1hcCBvZiBodWVzIHRvIGNvbG9ycyBmb3IgYSB0aGVtZS4gVGhpcyBpcyB1c2VkIHRvIGRlZmluZSBhIHRoZW1lIHBhbGV0dGUgaW4gdGVybXNcbi8vIG9mIHRoZSBNYXRlcmlhbCBEZXNpZ24gaHVlcy5cbi8vIEBwYXJhbSAkY29sb3ItbWFwXG4vLyBAcGFyYW0gJHByaW1hcnlcbi8vIEBwYXJhbSAkbGlnaHRlclxuQGZ1bmN0aW9uIG1hdC1wYWxldHRlKCRiYXNlLXBhbGV0dGUsICRkZWZhdWx0OiA1MDAsICRsaWdodGVyOiAxMDAsICRkYXJrZXI6IDcwMCwgJHRleHQ6ICRkZWZhdWx0KSB7XG4gICRyZXN1bHQ6IG1hcF9tZXJnZSgkYmFzZS1wYWxldHRlLCAoXG4gICAgZGVmYXVsdDogbWFwLWdldCgkYmFzZS1wYWxldHRlLCAkZGVmYXVsdCksXG4gICAgbGlnaHRlcjogbWFwLWdldCgkYmFzZS1wYWxldHRlLCAkbGlnaHRlciksXG4gICAgZGFya2VyOiBtYXAtZ2V0KCRiYXNlLXBhbGV0dGUsICRkYXJrZXIpLFxuICAgIHRleHQ6IG1hcC1nZXQoJGJhc2UtcGFsZXR0ZSwgJHRleHQpLFxuXG4gICAgZGVmYXVsdC1jb250cmFzdDogbWF0LWNvbnRyYXN0KCRiYXNlLXBhbGV0dGUsICRkZWZhdWx0KSxcbiAgICBsaWdodGVyLWNvbnRyYXN0OiBtYXQtY29udHJhc3QoJGJhc2UtcGFsZXR0ZSwgJGxpZ2h0ZXIpLFxuICAgIGRhcmtlci1jb250cmFzdDogbWF0LWNvbnRyYXN0KCRiYXNlLXBhbGV0dGUsICRkYXJrZXIpXG4gICkpO1xuXG4gIC8vIEZvciBlYWNoIGh1ZSBpbiB0aGUgcGFsZXR0ZSwgYWRkIGEgXCItY29udHJhc3RcIiBjb2xvciB0byB0aGUgbWFwLlxuICBAZWFjaCAkaHVlLCAkY29sb3IgaW4gJGJhc2UtcGFsZXR0ZSB7XG4gICAgJHJlc3VsdDogbWFwX21lcmdlKCRyZXN1bHQsIChcbiAgICAgICcjeyRodWV9LWNvbnRyYXN0JzogbWF0LWNvbnRyYXN0KCRiYXNlLXBhbGV0dGUsICRodWUpXG4gICAgKSk7XG4gIH1cblxuICBAcmV0dXJuICRyZXN1bHQ7XG59XG5cblxuLy8gR2V0cyBhIGNvbG9yIGZyb20gYSB0aGVtZSBwYWxldHRlICh0aGUgb3V0cHV0IG9mIG1hdC1wYWxldHRlKS5cbi8vIFRoZSBodWUgY2FuIGJlIG9uZSBvZiB0aGUgc3RhbmRhcmQgdmFsdWVzICg1MDAsIEE0MDAsIGV0Yy4pLCBvbmUgb2YgdGhlIHRocmVlIHByZWNvbmZpZ3VyZWRcbi8vIGh1ZXMgKGRlZmF1bHQsIGxpZ2h0ZXIsIGRhcmtlciksIG9yIGFueSBvZiB0aGUgYWZvcmVtZW50aW9uZWQgcHJlZml4ZWQgd2l0aCBcIi1jb250cmFzdFwiLlxuLy9cbi8vIEBwYXJhbSAkY29sb3ItbWFwIFRoZSB0aGVtZSBwYWxldHRlIChvdXRwdXQgb2YgbWF0LXBhbGV0dGUpLlxuLy8gQHBhcmFtICRodWUgVGhlIGh1ZSBmcm9tIHRoZSBwYWxldHRlIHRvIHVzZS4gSWYgdGhpcyBpcyBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMSwgaXQgd2lsbFxuLy8gICAgIGJlIHRyZWF0ZWQgYXMgb3BhY2l0eS5cbi8vIEBwYXJhbSAkb3BhY2l0eSBUaGUgYWxwaGEgY2hhbm5lbCB2YWx1ZSBmb3IgdGhlIGNvbG9yLlxuQGZ1bmN0aW9uIG1hdC1jb2xvcigkcGFsZXR0ZSwgJGh1ZTogZGVmYXVsdCwgJG9wYWNpdHk6IG51bGwpIHtcbiAgLy8gSWYgaHVlS2V5IGlzIGEgbnVtYmVyIGJldHdlZW4gemVybyBhbmQgb25lLCB0aGVuIGl0IGFjdHVhbGx5IGNvbnRhaW5zIGFuXG4gIC8vIG9wYWNpdHkgdmFsdWUsIHNvIHJlY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlIGRlZmF1bHQgaHVlIGFuZCB0aGF0IGdpdmVuIG9wYWNpdHkuXG4gIEBpZiB0eXBlLW9mKCRodWUpID09IG51bWJlciBhbmQgJGh1ZSA+PSAwIGFuZCAkaHVlIDw9IDEge1xuICAgIEByZXR1cm4gbWF0LWNvbG9yKCRwYWxldHRlLCBkZWZhdWx0LCAkaHVlKTtcbiAgfVxuXG4gICRjb2xvcjogbWFwLWdldCgkcGFsZXR0ZSwgJGh1ZSk7XG5cbiAgQGlmICh0eXBlLW9mKCRjb2xvcikgIT0gY29sb3IpIHtcbiAgICAvLyBJZiB0aGUgJGNvbG9yIHJlc29sdmVkIHRvIHNvbWV0aGluZyBkaWZmZXJlbnQgZnJvbSBhIGNvbG9yIChlLmcuIGEgQ1NTIHZhcmlhYmxlKSxcbiAgICAvLyB3ZSBjYW4ndCBhcHBseSB0aGUgb3BhY2l0eSBhbnl3YXkgc28gd2UgcmV0dXJuIHRoZSB2YWx1ZSBhcyBpcywgb3RoZXJ3aXNlIFNhc3MgY2FuXG4gICAgLy8gdGhyb3cgYW4gZXJyb3Igb3Igb3V0cHV0IHNvbWV0aGluZyBpbnZhbGlkLlxuICAgIEByZXR1cm4gJGNvbG9yO1xuICB9XG5cbiAgQHJldHVybiByZ2JhKCRjb2xvciwgaWYoJG9wYWNpdHkgPT0gbnVsbCwgb3BhY2l0eSgkY29sb3IpLCAkb3BhY2l0eSkpO1xufVxuXG5cbi8vIENyZWF0ZXMgYSBjb250YWluZXIgb2JqZWN0IGZvciBhIGxpZ2h0IHRoZW1lIHRvIGJlIGdpdmVuIHRvIGluZGl2aWR1YWwgY29tcG9uZW50IHRoZW1lIG1peGlucy5cbkBmdW5jdGlvbiBtYXQtbGlnaHQtdGhlbWUoJHByaW1hcnksICRhY2NlbnQsICR3YXJuOiBtYXQtcGFsZXR0ZSgkbWF0LXJlZCkpIHtcbiAgQHJldHVybiAoXG4gICAgcHJpbWFyeTogJHByaW1hcnksXG4gICAgYWNjZW50OiAkYWNjZW50LFxuICAgIHdhcm46ICR3YXJuLFxuICAgIGlzLWRhcms6IGZhbHNlLFxuICAgIGZvcmVncm91bmQ6ICRtYXQtbGlnaHQtdGhlbWUtZm9yZWdyb3VuZCxcbiAgICBiYWNrZ3JvdW5kOiAkbWF0LWxpZ2h0LXRoZW1lLWJhY2tncm91bmQsXG4gICk7XG59XG5cblxuLy8gQ3JlYXRlcyBhIGNvbnRhaW5lciBvYmplY3QgZm9yIGEgZGFyayB0aGVtZSB0byBiZSBnaXZlbiB0byBpbmRpdmlkdWFsIGNvbXBvbmVudCB0aGVtZSBtaXhpbnMuXG5AZnVuY3Rpb24gbWF0LWRhcmstdGhlbWUoJHByaW1hcnksICRhY2NlbnQsICR3YXJuOiBtYXQtcGFsZXR0ZSgkbWF0LXJlZCkpIHtcbiAgQHJldHVybiAoXG4gICAgcHJpbWFyeTogJHByaW1hcnksXG4gICAgYWNjZW50OiAkYWNjZW50LFxuICAgIHdhcm46ICR3YXJuLFxuICAgIGlzLWRhcms6IHRydWUsXG4gICAgZm9yZWdyb3VuZDogJG1hdC1kYXJrLXRoZW1lLWZvcmVncm91bmQsXG4gICAgYmFja2dyb3VuZDogJG1hdC1kYXJrLXRoZW1lLWJhY2tncm91bmQsXG4gICk7XG59XG5cblxuXG4kbWF0LXJpcHBsZS1jb2xvci1vcGFjaXR5OiAwLjE7XG5cbkBtaXhpbiBtYXQtcmlwcGxlKCkge1xuXG4gIC8vIFRoZSBob3N0IGVsZW1lbnQgb2YgYW4gbWF0LXJpcHBsZSBkaXJlY3RpdmUgc2hvdWxkIGFsd2F5cyBoYXZlIGEgcG9zaXRpb24gb2YgXCJhYnNvbHV0ZVwiIG9yXG4gIC8vIFwicmVsYXRpdmVcIiBzbyB0aGF0IHRoZSByaXBwbGVzIGluc2lkZSBhcmUgY29ycmVjdGx5IHBvc2l0aW9uZWQgcmVsYXRpdmVseSB0byB0aGUgY29udGFpbmVyLlxuICAubWF0LXJpcHBsZSB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgIC8vIEJ5IGRlZmF1bHQsIGV2ZXJ5IHJpcHBsZSBjb250YWluZXIgc2hvdWxkIGhhdmUgcG9zaXRpb246IHJlbGF0aXZlIGluIGZhdm9yIG9mIGNyZWF0aW5nIGFuXG4gICAgLy8gZWFzeSBBUEkgZm9yIGRldmVsb3BlcnMgdXNpbmcgdGhlIE1hdFJpcHBsZSBkaXJlY3RpdmUuXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgLy8gUHJvbW90ZSBjb250YWluZXJzIHRoYXQgaGF2ZSByaXBwbGVzIHRvIGEgbmV3IGxheWVyLiBXZSB3YW50IHRvIHRhcmdldCBgOm5vdCg6ZW1wdHkpYCxcbiAgICAvLyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgYWxsIHJpcHBsZSBjb250YWluZXJzIHRvIGhhdmUgdGhlaXIgb3duIGxheWVyIHNpbmNlIHRoZXkncmUgdXNlZCBpbiBhXG4gICAgLy8gbG90IG9mIHBsYWNlcyBhbmQgdGhlIGxheWVyIGlzIG9ubHkgcmVsZXZhbnQgd2hpbGUgYW5pbWF0aW5nLiBOb3RlIHRoYXQgaWRlYWxseSB3ZSdkIHVzZVxuICAgIC8vIHRoZSBgY29udGFpbmAgcHJvcGVydHkgaGVyZSAoc2VlICMxMzE3NSksIGJlY2F1c2UgYDplbXB0eWAgY2FuIGJlIGJyb2tlbiBieSBoYXZpbmcgZXh0cmFcbiAgICAvLyB0ZXh0IGluc2lkZSB0aGUgZWxlbWVudCwgYnV0IGl0IGlzbid0IHZlcnkgd2VsbCBzdXBwb3J0ZWQgeWV0LlxuICAgICY6bm90KDplbXB0eSkge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkIHtcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgfVxuXG4gIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5cbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5LCB0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XG5cbiAgICAvLyBJbiBoaWdoIGNvbnRyYXN0IG1vZGUgdGhlIHJpcHBsZSBpcyBvcGFxdWUsIGNhdXNpbmcgaXQgdG8gb2JzdHJ1Y3QgdGhlIGNvbnRlbnQuXG4gICAgQGluY2x1ZGUgY2RrLWhpZ2gtY29udHJhc3QoYWN0aXZlLCBvZmYpIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG59XG5cbi8qIFRoZW1lIGZvciB0aGUgcmlwcGxlIGVsZW1lbnRzLiovXG5AbWl4aW4gbWF0LXJpcHBsZS10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcF9nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQtYmFzZTogbWFwX2dldCgkZm9yZWdyb3VuZCwgYmFzZSk7XG5cbiAgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgLy8gSWYgdGhlIHJpcHBsZSBjb2xvciBpcyByZXNvbHZlcyB0byBhIGNvbG9yICp0eXBlKiwgd2UgY2FuIHVzZSBpdCBkaXJlY3RseSwgb3RoZXJ3aXNlXG4gICAgLy8gKGUuZy4gaXQgcmVzb2x2ZXMgdG8gYSBDU1MgdmFyaWFibGUpIHdlIGZhbGwgYmFjayB0byB1c2luZyB0aGUgY29sb3IgYW5kIHNldHRpbmcgYW4gb3BhY2l0eS5cbiAgICBAaWYgKHR5cGUtb2YoJGZvcmVncm91bmQtYmFzZSkgPT0gY29sb3IpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoJGZvcmVncm91bmQtYmFzZSwgJG1hdC1yaXBwbGUtY29sb3Itb3BhY2l0eSk7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRmb3JlZ3JvdW5kLWJhc2U7XG4gICAgICBvcGFjaXR5OiAkbWF0LXJpcHBsZS1jb2xvci1vcGFjaXR5O1xuICAgIH1cbiAgfVxufVxuXG5cblxuLy8gVXRpbGl0eSBmb3IgZmV0Y2hpbmcgYSBuZXN0ZWQgdmFsdWUgZnJvbSBhIHR5cG9ncmFwaHkgY29uZmlnLlxuQGZ1bmN0aW9uIF9tYXQtZ2V0LXR5cGUtdmFsdWUoJGNvbmZpZywgJGxldmVsLCAkbmFtZSkge1xuICBAcmV0dXJuIG1hcC1nZXQobWFwLWdldCgkY29uZmlnLCAkbGV2ZWwpLCAkbmFtZSk7XG59XG5cbi8vIEdldHMgdGhlIGZvbnQgc2l6ZSBmb3IgYSBsZXZlbCBpbnNpZGUgYSB0eXBvZ3JhcGh5IGNvbmZpZy5cbkBmdW5jdGlvbiBtYXQtZm9udC1zaXplKCRjb25maWcsICRsZXZlbCkge1xuICBAcmV0dXJuIF9tYXQtZ2V0LXR5cGUtdmFsdWUoJGNvbmZpZywgJGxldmVsLCBmb250LXNpemUpO1xufVxuXG4vLyBHZXRzIHRoZSBsaW5lIGhlaWdodCBmb3IgYSBsZXZlbCBpbnNpZGUgYSB0eXBvZ3JhcGh5IGNvbmZpZy5cbkBmdW5jdGlvbiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgJGxldmVsKSB7XG4gIEByZXR1cm4gX21hdC1nZXQtdHlwZS12YWx1ZSgkY29uZmlnLCAkbGV2ZWwsIGxpbmUtaGVpZ2h0KTtcbn1cblxuLy8gR2V0cyB0aGUgZm9udCB3ZWlnaHQgZm9yIGEgbGV2ZWwgaW5zaWRlIGEgdHlwb2dyYXBoeSBjb25maWcuXG5AZnVuY3Rpb24gbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsICRsZXZlbCkge1xuICBAcmV0dXJuIF9tYXQtZ2V0LXR5cGUtdmFsdWUoJGNvbmZpZywgJGxldmVsLCBmb250LXdlaWdodCk7XG59XG5cbi8vIEdldHMgdGhlIGxldHRlciBzcGFjaW5nIGZvciBhIGxldmVsIGluc2lkZSBhIHR5cG9ncmFwaHkgY29uZmlnLlxuQGZ1bmN0aW9uIG1hdC1sZXR0ZXItc3BhY2luZygkY29uZmlnLCAkbGV2ZWwpIHtcbiAgQHJldHVybiBfbWF0LWdldC10eXBlLXZhbHVlKCRjb25maWcsICRsZXZlbCwgbGV0dGVyLXNwYWNpbmcpO1xufVxuXG4vLyBHZXRzIHRoZSBmb250LWZhbWlseSBmcm9tIGEgdHlwb2dyYXBoeSBjb25maWcgYW5kIHJlbW92ZXMgdGhlIHF1b3RlcyBhcm91bmQgaXQuXG5AZnVuY3Rpb24gbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsICRsZXZlbDogbnVsbCkge1xuICAkZm9udC1mYW1pbHk6IG1hcC1nZXQoJGNvbmZpZywgZm9udC1mYW1pbHkpO1xuXG4gIEBpZiAkbGV2ZWwgIT0gbnVsbCB7XG4gICAgJGZvbnQtZmFtaWx5OiBfbWF0LWdldC10eXBlLXZhbHVlKCRjb25maWcsICRsZXZlbCwgZm9udC1mYW1pbHkpO1xuICB9XG5cbiAgLy8gR3VhcmQgYWdhaW5zdCB1bnF1b3Rpbmcgbm9uLXN0cmluZyB2YWx1ZXMsIGJlY2F1c2UgaXQncyBkZXByZWNhdGVkLlxuICBAcmV0dXJuIGlmKHR5cGUtb2YoJGZvbnQtZmFtaWx5KSA9PSBzdHJpbmcsIHVucXVvdGUoJGZvbnQtZmFtaWx5KSwgJGZvbnQtZmFtaWx5KTtcbn1cblxuLy8gT3V0cHV0cyB0aGUgc2hvcnRoYW5kIGBmb250YCBDU1MgcHJvcGVydHksIGJhc2VkIG9uIGEgc2V0IG9mIHR5cG9ncmFwaHkgdmFsdWVzLiBGYWxscyBiYWNrIHRvXG4vLyB0aGUgaW5kaXZpZHVhbCBwcm9wZXJ0aWVzIGlmIGEgdmFsdWUgdGhhdCBpc24ndCBhbGxvd2VkIGluIHRoZSBzaG9ydGhhbmQgaXMgcGFzc2VkIGluLlxuQG1peGluIG1hdC10eXBvZ3JhcGh5LWZvbnQtc2hvcnRoYW5kKCRmb250LXNpemUsICRmb250LXdlaWdodCwgJGxpbmUtaGVpZ2h0LCAkZm9udC1mYW1pbHkpIHtcbiAgLy8gSWYgYW55IG9mIHRoZSB2YWx1ZXMgYXJlIHNldCB0byBgaW5oZXJpdGAsIHdlIGNhbid0IHVzZSB0aGUgc2hvcnRoYW5kXG4gIC8vIHNvIHdlIGZhbGwgYmFjayB0byBwYXNzaW5nIGluIHRoZSBpbmRpdmlkdWFsIHByb3BlcnRpZXMuXG4gIEBpZiAoJGZvbnQtc2l6ZSA9PSBpbmhlcml0IG9yXG4gICAgICAgJGZvbnQtd2VpZ2h0ID09IGluaGVyaXQgb3JcbiAgICAgICAkbGluZS1oZWlnaHQgPT0gaW5oZXJpdCBvclxuICAgICAgICRmb250LWZhbWlseSA9PSBpbmhlcml0IG9yXG4gICAgICAgJGZvbnQtc2l6ZSA9PSBudWxsIG9yXG4gICAgICAgJGZvbnQtd2VpZ2h0ID09IG51bGwgb3JcbiAgICAgICAkbGluZS1oZWlnaHQgPT0gbnVsbCBvclxuICAgICAgICRmb250LWZhbWlseSA9PSBudWxsKSB7XG5cbiAgICBmb250LXNpemU6ICRmb250LXNpemU7XG4gICAgZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodDtcbiAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0O1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHk7XG4gIH1cbiAgQGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZSB1c2UgdGhlIHNob3J0aGFuZCBgZm9udGAsIGJlY2F1c2UgaXQncyB0aGUgbGVhc3QgYW1vdW50IG9mIGJ5dGVzLiBOb3RlXG4gICAgLy8gdGhhdCB3ZSBuZWVkIHRvIHVzZSBpbnRlcnBvbGF0aW9uIGZvciBgZm9udC1zaXplL2xpbmUtaGVpZ2h0YCBpbiBvcmRlciB0byBwcmV2ZW50XG4gICAgLy8gU2FzcyBmcm9tIGRpdmlkaW5nIHRoZSB0d28gdmFsdWVzLlxuICAgIGZvbnQ6ICRmb250LXdlaWdodCAjeyRmb250LXNpemV9LyN7JGxpbmUtaGVpZ2h0fSAkZm9udC1mYW1pbHk7XG4gIH1cbn1cblxuLy8gQ29udmVydHMgYSB0eXBvZ3JhcGh5IGxldmVsIGludG8gQ1NTIHN0eWxlcy5cbkBtaXhpbiBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgJGxldmVsKSB7XG4gICRmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgJGxldmVsKTtcbiAgJGZvbnQtd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgJGxldmVsKTtcbiAgJGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgJGxldmVsKTtcbiAgJGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgJGxldmVsKTtcblxuICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1mb250LXNob3J0aGFuZCgkZm9udC1zaXplLCAkZm9udC13ZWlnaHQsICRsaW5lLWhlaWdodCwgJGZvbnQtZmFtaWx5KTtcbiAgbGV0dGVyLXNwYWNpbmc6IG1hdC1sZXR0ZXItc3BhY2luZygkY29uZmlnLCAkbGV2ZWwpO1xufVxuXG5cbkBtaXhpbiBtYXQtb3B0aW9uLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcblxuICAubWF0LW9wdGlvbiB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgICAmOmhvdmVyOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCksXG4gICAgJjpmb2N1czpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIpO1xuICAgIH1cblxuICAgIC8vIEluIG11bHRpcGxlIG1vZGUgdGhlcmUgaXMgYSBjaGVja2JveCB0byBzaG93IHRoYXQgdGhlIG9wdGlvbiBpcyBzZWxlY3RlZC5cbiAgICAmLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3Zlcik7XG4gICAgfVxuXG4gICAgJi5tYXQtYWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIpO1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgfVxuXG4gICAgJi5tYXQtb3B0aW9uLWRpc2FibGVkIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGhpbnQtdGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1wcmltYXJ5IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtYWNjZW50IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIHRleHQpO1xuICB9XG5cbiAgLm1hdC13YXJuIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LW9wdGlvbi10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1vcHRpb24ge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBzdWJoZWFkaW5nLTIpO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtb3B0Z3JvdXAtdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1vcHRncm91cC1sYWJlbCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1vcHRncm91cC1kaXNhYmxlZCAubWF0LW9wdGdyb3VwLWxhYmVsIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBoaW50LXRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtb3B0Z3JvdXAtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtb3B0Z3JvdXAtbGFiZWwge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBib2R5LTIpO1xuICB9XG59XG5cblxuXG5AbWl4aW4gbWF0LXBzZXVkby1jaGVja2JveC10aGVtZSgkdGhlbWUpIHtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG5cbiAgLy8gTk9URSh0cmF2aXNrYXVmbWFuKTogV2hpbGUgdGhlIHNwZWMgY2FsbHMgZm9yIHRyYW5zbHVjZW50IGJsYWNrcy93aGl0ZXMgZm9yIGRpc2FibGVkIGNvbG9ycyxcbiAgLy8gdGhpcyBkb2VzIG5vdCB3b3JrIHdlbGwgd2l0aCBlbGVtZW50cyBsYXllcmVkIG9uIHRvcCBvZiBvbmUgYW5vdGhlci4gVG8gZ2V0IGFyb3VuZCB0aGlzIHdlXG4gIC8vIGJsZW5kIHRoZSBjb2xvcnMgdG9nZXRoZXIgYmFzZWQgb24gdGhlIGJhc2UgY29sb3IgYW5kIHRoZSB0aGVtZSBiYWNrZ3JvdW5kLlxuICAkd2hpdGUtMzBwY3Qtb3BhY2l0eS1vbi1kYXJrOiAjNjg2ODY4O1xuICAkYmxhY2stMjZwY3Qtb3BhY2l0eS1vbi1saWdodDogI2IwYjBiMDtcbiAgJGRpc2FibGVkLWNvbG9yOiBpZigkaXMtZGFyay10aGVtZSwgJHdoaXRlLTMwcGN0LW9wYWNpdHktb24tZGFyaywgJGJsYWNrLTI2cGN0LW9wYWNpdHktb24tbGlnaHQpO1xuICAkY29sb3JlZC1ib3gtc2VsZWN0b3I6ICcubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlJztcblxuICAubWF0LXBzZXVkby1jaGVja2JveCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCksIHNlY29uZGFyeS10ZXh0KTtcblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGJhY2tncm91bmQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkIHtcbiAgICBjb2xvcjogJGRpc2FibGVkLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsXG4gIC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IobWFwLWdldCgkdGhlbWUsIHByaW1hcnkpKTtcbiAgfVxuXG4gIC8vIERlZmF1bHQgdG8gdGhlIGFjY2VudCBjb2xvci4gTm90ZSB0aGF0IHRoZSBwc2V1ZG8gY2hlY2tib3hlcyBhcmUgbWVhbnQgdG8gaW5oZXJpdCB0aGVcbiAgLy8gdGhlbWUgZnJvbSB0aGVpciBwYXJlbnQsIHJhdGhlciB0aGFuIGltcGxlbWVudGluZyB0aGVpciBvd24gdGhlbWluZywgd2hpY2ggaXMgd2h5IHdlXG4gIC8vIGRvbid0IGF0dGFjaCB0byB0aGUgYG1hdC0qYCBjbGFzc2VzLiBBbHNvIG5vdGUgdGhhdCB0aGlzIG5lZWRzIHRvIGJlIGJlbG93IGAubWF0LXByaW1hcnlgXG4gIC8vIGluIG9yZGVyIHRvIGFsbG93IGZvciB0aGUgY29sb3IgdG8gYmUgb3ZlcndyaXR0ZW4gaWYgdGhlIGNoZWNrYm94IGlzIGluc2lkZSBhIHBhcmVudCB0aGF0XG4gIC8vIGhhcyBgbWF0LWFjY2VudGAgYW5kIGlzIHBsYWNlZCBpbnNpZGUgYW5vdGhlciBwYXJlbnQgdGhhdCBoYXMgYG1hdC1wcmltYXJ5YC5cbiAgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxcbiAgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSxcbiAgLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxcbiAgLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpKTtcbiAgfVxuXG4gIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLFxuICAubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKG1hcC1nZXQoJHRoZW1lLCB3YXJuKSk7XG4gIH1cblxuICAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLFxuICAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlIHtcbiAgICAmLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQge1xuICAgICAgYmFja2dyb3VuZDogJGRpc2FibGVkLWNvbG9yO1xuICAgIH1cbiAgfVxufVxuXG5cblxuLy8gUmVwcmVzZW50cyBhIHR5cG9ncmFwaHkgbGV2ZWwgZnJvbSB0aGUgTWF0ZXJpYWwgZGVzaWduIHNwZWMuXG5AZnVuY3Rpb24gbWF0LXR5cG9ncmFwaHktbGV2ZWwoXG4gICRmb250LXNpemUsXG4gICRsaW5lLWhlaWdodDogJGZvbnQtc2l6ZSxcbiAgJGZvbnQtd2VpZ2h0OiA0MDAsXG4gICRmb250LWZhbWlseTogbnVsbCxcbiAgJGxldHRlci1zcGFjaW5nOiBub3JtYWwpIHtcblxuICBAcmV0dXJuIChcbiAgICBmb250LXNpemU6ICRmb250LXNpemUsXG4gICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodCxcbiAgICBmb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LFxuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHksXG4gICAgbGV0dGVyLXNwYWNpbmc6ICRsZXR0ZXItc3BhY2luZ1xuICApO1xufVxuXG4vLyBSZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiB0eXBvZ3JhcGh5IGxldmVscy5cbi8vIERlZmF1bHRzIGNvbWUgZnJvbSBodHRwczovL21hdGVyaWFsLmlvL2d1aWRlbGluZXMvc3R5bGUvdHlwb2dyYXBoeS5odG1sXG4vLyBOb3RlOiBUaGUgc3BlYyBkb2Vzbid0IG1lbnRpb24gbGV0dGVyIHNwYWNpbmcuIFRoZSB2YWx1ZXMgaGVyZSBjb21lIGZyb21cbi8vIGV5ZWJhbGxpbmcgaXQgdW50aWwgaXQgbG9va2VkIGV4YWN0bHkgbGlrZSB0aGUgc3BlYyBleGFtcGxlcy5cbkBmdW5jdGlvbiBtYXQtdHlwb2dyYXBoeS1jb25maWcoXG4gICRmb250LWZhbWlseTogICAnUm9ib3RvLCBcIkhlbHZldGljYSBOZXVlXCIsIHNhbnMtc2VyaWYnLFxuICAkZGlzcGxheS00OiAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMTEycHgsIDExMnB4LCAzMDAsICRsZXR0ZXItc3BhY2luZzogLTAuMDVlbSksXG4gICRkaXNwbGF5LTM6ICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCg1NnB4LCA1NnB4LCA0MDAsICRsZXR0ZXItc3BhY2luZzogLTAuMDJlbSksXG4gICRkaXNwbGF5LTI6ICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCg0NXB4LCA0OHB4LCA0MDAsICRsZXR0ZXItc3BhY2luZzogLTAuMDA1ZW0pLFxuICAkZGlzcGxheS0xOiAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMzRweCwgNDBweCwgNDAwKSxcbiAgJGhlYWRsaW5lOiAgICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDI0cHgsIDMycHgsIDQwMCksXG4gICR0aXRsZTogICAgICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgyMHB4LCAzMnB4LCA1MDApLFxuICAkc3ViaGVhZGluZy0yOiAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMTZweCwgMjhweCwgNDAwKSxcbiAgJHN1YmhlYWRpbmctMTogIG1hdC10eXBvZ3JhcGh5LWxldmVsKDE1cHgsIDI0cHgsIDQwMCksXG4gICRib2R5LTI6ICAgICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgxNHB4LCAyNHB4LCA1MDApLFxuICAkYm9keS0xOiAgICAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMTRweCwgMjBweCwgNDAwKSxcbiAgJGNhcHRpb246ICAgICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDEycHgsIDIwcHgsIDQwMCksXG4gICRidXR0b246ICAgICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgxNHB4LCAxNHB4LCA1MDApLFxuICAvLyBMaW5lLWhlaWdodCBtdXN0IGJlIHVuaXQtbGVzcyBmcmFjdGlvbiBvZiB0aGUgZm9udC1zaXplLlxuICAkaW5wdXQ6ICAgICAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoaW5oZXJpdCwgMS4xMjUsIDQwMClcbikge1xuXG4gIC8vIERlY2xhcmUgYW4gaW5pdGlhbCBtYXAgd2l0aCBhbGwgb2YgdGhlIGxldmVscy5cbiAgJGNvbmZpZzogKFxuICAgIGRpc3BsYXktNDogICAgICAkZGlzcGxheS00LFxuICAgIGRpc3BsYXktMzogICAgICAkZGlzcGxheS0zLFxuICAgIGRpc3BsYXktMjogICAgICAkZGlzcGxheS0yLFxuICAgIGRpc3BsYXktMTogICAgICAkZGlzcGxheS0xLFxuICAgIGhlYWRsaW5lOiAgICAgICAkaGVhZGxpbmUsXG4gICAgdGl0bGU6ICAgICAgICAgICR0aXRsZSxcbiAgICBzdWJoZWFkaW5nLTI6ICAgJHN1YmhlYWRpbmctMixcbiAgICBzdWJoZWFkaW5nLTE6ICAgJHN1YmhlYWRpbmctMSxcbiAgICBib2R5LTI6ICAgICAgICAgJGJvZHktMixcbiAgICBib2R5LTE6ICAgICAgICAgJGJvZHktMSxcbiAgICBjYXB0aW9uOiAgICAgICAgJGNhcHRpb24sXG4gICAgYnV0dG9uOiAgICAgICAgICRidXR0b24sXG4gICAgaW5wdXQ6ICAgICAgICAgICRpbnB1dCxcbiAgKTtcblxuICAvLyBMb29wIHRocm91Z2ggdGhlIGxldmVscyBhbmQgc2V0IHRoZSBgZm9udC1mYW1pbHlgIG9mIHRoZSBvbmVzIHRoYXQgZG9uJ3QgaGF2ZSBvbmUgdG8gdGhlIGJhc2UuXG4gIC8vIE5vdGUgdGhhdCBTYXNzIGNhbid0IG1vZGlmeSBtYXBzIGluIHBsYWNlLCB3aGljaCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gbWVyZ2UgYW5kIHJlLWFzc2lnbi5cbiAgQGVhY2ggJGtleSwgJGxldmVsIGluICRjb25maWcge1xuICAgIEBpZiBtYXAtZ2V0KCRsZXZlbCwgZm9udC1mYW1pbHkpID09IG51bGwge1xuICAgICAgJG5ldy1sZXZlbDogbWFwLW1lcmdlKCRsZXZlbCwgKGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHkpKTtcbiAgICAgICRjb25maWc6IG1hcC1tZXJnZSgkY29uZmlnLCAoJGtleTogJG5ldy1sZXZlbCkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCB0aGUgYmFzZSBmb250IGZhbWlseSB0byB0aGUgY29uZmlnLlxuICBAcmV0dXJuIG1hcC1tZXJnZSgkY29uZmlnLCAoZm9udC1mYW1pbHk6ICRmb250LWZhbWlseSkpO1xufVxuXG4vLyBBZGRzIHRoZSBiYXNlIHR5cG9ncmFwaHkgc3R5bGVzLCBiYXNlZCBvbiBhIGNvbmZpZy5cbkBtaXhpbiBtYXQtYmFzZS10eXBvZ3JhcGh5KCRjb25maWcsICRzZWxlY3RvcjogJy5tYXQtdHlwb2dyYXBoeScpIHtcbiAgLm1hdC1oMSwgLm1hdC1oZWFkbGluZSwgI3skc2VsZWN0b3J9IGgxIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgaGVhZGxpbmUpO1xuICAgIG1hcmdpbjogMCAwIDE2cHg7XG4gIH1cblxuICAubWF0LWgyLCAubWF0LXRpdGxlLCAjeyRzZWxlY3Rvcn0gaDIge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCB0aXRsZSk7XG4gICAgbWFyZ2luOiAwIDAgMTZweDtcbiAgfVxuXG4gIC5tYXQtaDMsIC5tYXQtc3ViaGVhZGluZy0yLCAjeyRzZWxlY3Rvcn0gaDMge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBzdWJoZWFkaW5nLTIpO1xuICAgIG1hcmdpbjogMCAwIDE2cHg7XG4gIH1cblxuICAubWF0LWg0LCAubWF0LXN1YmhlYWRpbmctMSwgI3skc2VsZWN0b3J9IGg0IHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgc3ViaGVhZGluZy0xKTtcbiAgICBtYXJnaW46IDAgMCAxNnB4O1xuICB9XG5cbiAgLy8gTm90ZTogdGhlIHNwZWMgZG9lc24ndCBoYXZlIGFueXRoaW5nIHRoYXQgd291bGQgY29ycmVzcG9uZCB0byBoNSBhbmQgaDYsIGJ1dCB3ZSBhZGQgdGhlc2UgZm9yXG4gIC8vIGNvbnNpc3RlbmN5LiBUaGUgZm9udCBzaXplcyBjb21lIGZyb20gdGhlIENocm9tZSB1c2VyIGFnZW50IHN0eWxlcyB3aGljaCBoYXZlIGg1IGF0IDAuODNlbVxuICAvLyBhbmQgaDYgYXQgMC42N2VtLlxuICAubWF0LWg1LCAjeyRzZWxlY3Rvcn0gaDUge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWZvbnQtc2hvcnRoYW5kKFxuICAgICAgIC8vIGNhbGMgaXMgdXNlZCBoZXJlIHRvIHN1cHBvcnQgY3NzIHZhcmlhYmxlc1xuICAgICAgY2FsYygje21hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKX0gKiAwLjgzKSxcbiAgICAgIG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTEpLFxuICAgICAgbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGJvZHktMSksXG4gICAgICBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgYm9keS0xKVxuICAgICk7XG5cbiAgICBtYXJnaW46IDAgMCAxMnB4O1xuICB9XG5cbiAgLm1hdC1oNiwgI3skc2VsZWN0b3J9IGg2IHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1mb250LXNob3J0aGFuZChcbiAgICAgICAvLyBjYWxjIGlzIHVzZWQgaGVyZSB0byBzdXBwb3J0IGNzcyB2YXJpYWJsZXNcbiAgICAgIGNhbGMoI3ttYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSl9ICogMC42NyksXG4gICAgICBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0xKSxcbiAgICAgIG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBib2R5LTEpLFxuICAgICAgbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGJvZHktMSlcbiAgICApO1xuXG4gICAgbWFyZ2luOiAwIDAgMTJweDtcbiAgfVxuXG4gIC5tYXQtYm9keS1zdHJvbmcsIC5tYXQtYm9keS0yIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgYm9keS0yKTtcbiAgfVxuXG4gIC5tYXQtYm9keSwgLm1hdC1ib2R5LTEsICN7JHNlbGVjdG9yfSB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGJvZHktMSk7XG5cbiAgICBwIHtcbiAgICAgIG1hcmdpbjogMCAwIDEycHg7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbWFsbCwgLm1hdC1jYXB0aW9uIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgY2FwdGlvbik7XG4gIH1cblxuICAubWF0LWRpc3BsYXktNCwgI3skc2VsZWN0b3J9IC5tYXQtZGlzcGxheS00IHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgZGlzcGxheS00KTtcbiAgICBtYXJnaW46IDAgMCA1NnB4O1xuICB9XG5cbiAgLm1hdC1kaXNwbGF5LTMsICN7JHNlbGVjdG9yfSAubWF0LWRpc3BsYXktMyB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGRpc3BsYXktMyk7XG4gICAgbWFyZ2luOiAwIDAgNjRweDtcbiAgfVxuXG4gIC5tYXQtZGlzcGxheS0yLCAjeyRzZWxlY3Rvcn0gLm1hdC1kaXNwbGF5LTIge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBkaXNwbGF5LTIpO1xuICAgIG1hcmdpbjogMCAwIDY0cHg7XG4gIH1cblxuICAubWF0LWRpc3BsYXktMSwgI3skc2VsZWN0b3J9IC5tYXQtZGlzcGxheS0xIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgZGlzcGxheS0xKTtcbiAgICBtYXJnaW46IDAgMCA2NHB4O1xuICB9XG59XG5cblxuXG5cbkBtaXhpbiBtYXQtYXV0b2NvbXBsZXRlLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuXG4gIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbig0LCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgICAvLyBTZWxlY3RlZCBvcHRpb25zIGluIGF1dG9jb21wbGV0ZXMgc2hvdWxkIG5vdCBiZSBncmF5LCBidXQgd2VcbiAgICAvLyBvbmx5IHdhbnQgdG8gb3ZlcnJpZGUgdGhlIGJhY2tncm91bmQgZm9yIHNlbGVjdGVkIG9wdGlvbnMgaWZcbiAgICAvLyB0aGV5IGFyZSAqbm90KiBpbiBob3ZlciBvciBmb2N1cyBzdGF0ZS4gVGhpcyBjaGFuZ2UgaGFzIHRvIGJlXG4gICAgLy8gbWFkZSBoZXJlIGJlY2F1c2UgYmFzZSBvcHRpb24gc3R5bGVzIGFyZSBzaGFyZWQgYmV0d2VlbiB0aGVcbiAgICAvLyBhdXRvY29tcGxldGUgYW5kIHRoZSBzZWxlY3QuXG4gICAgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcikge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcblxuICAgICAgJjpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpIHtcbiAgICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbn1cblxuQG1peGluIG1hdC1hdXRvY29tcGxldGUtdHlwb2dyYXBoeSgkY29uZmlnKSB7IH1cblxuLy8gVGhpcyBjb250YWlucyBhbGwgb2YgdGhlIHN0eWxlcyBmb3IgdGhlIGJhZGdlXG4vLyByYXRoZXIgdGhhbiBqdXN0IHRoZSBjb2xvci90aGVtZSBiZWNhdXNlIG9mXG4vLyBubyBzdHlsZSBzaGVldCBzdXBwb3J0IGZvciBkaXJlY3RpdmVzLlxuXG5cblxuXG5cbiRtYXQtYmFkZ2UtZm9udC1zaXplOiAxMnB4O1xuJG1hdC1iYWRnZS1mb250LXdlaWdodDogNjAwO1xuJG1hdC1iYWRnZS1kZWZhdWx0LXNpemU6IDIycHggIWRlZmF1bHQ7XG4kbWF0LWJhZGdlLXNtYWxsLXNpemU6ICRtYXQtYmFkZ2UtZGVmYXVsdC1zaXplIC0gNjtcbiRtYXQtYmFkZ2UtbGFyZ2Utc2l6ZTogJG1hdC1iYWRnZS1kZWZhdWx0LXNpemUgKyA2O1xuXG4vLyBNaXhpbiBmb3IgYnVpbGRpbmcgb2Zmc2V0IGdpdmVuIGRpZmZlcmVudCBzaXplc1xuQG1peGluIF9tYXQtYmFkZ2Utc2l6ZSgkc2l6ZSkge1xuICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgIHdpZHRoOiAkc2l6ZTtcbiAgICBoZWlnaHQ6ICRzaXplO1xuICAgIGxpbmUtaGVpZ2h0OiAkc2l6ZTtcbiAgfVxuXG4gICYubWF0LWJhZGdlLWFib3ZlIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgdG9wOiAtJHNpemUgLyAyO1xuICAgIH1cbiAgfVxuXG4gICYubWF0LWJhZGdlLWJlbG93IHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgYm90dG9tOiAtJHNpemUgLyAyO1xuICAgIH1cbiAgfVxuXG4gICYubWF0LWJhZGdlLWJlZm9yZSB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIGxlZnQ6IC0kc2l6ZTtcbiAgICB9XG4gIH1cblxuICBbZGlyPSdydGwnXSAmLm1hdC1iYWRnZS1iZWZvcmUge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICBsZWZ0OiBhdXRvO1xuICAgICAgcmlnaHQ6IC0kc2l6ZTtcbiAgICB9XG4gIH1cblxuICAmLm1hdC1iYWRnZS1hZnRlciB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIHJpZ2h0OiAtJHNpemU7XG4gICAgfVxuICB9XG5cbiAgW2Rpcj0ncnRsJ10gJi5tYXQtYmFkZ2UtYWZ0ZXIge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICByaWdodDogYXV0bztcbiAgICAgIGxlZnQ6IC0kc2l6ZTtcbiAgICB9XG4gIH1cblxuICAmLm1hdC1iYWRnZS1vdmVybGFwIHtcbiAgICAmLm1hdC1iYWRnZS1iZWZvcmUge1xuICAgICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgICAgbGVmdDogLSRzaXplIC8gMjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBbZGlyPSdydGwnXSAmLm1hdC1iYWRnZS1iZWZvcmUge1xuICAgICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgICAgbGVmdDogYXV0bztcbiAgICAgICAgcmlnaHQ6IC0kc2l6ZSAvIDI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5tYXQtYmFkZ2UtYWZ0ZXIge1xuICAgICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgICAgcmlnaHQ6IC0kc2l6ZSAvIDI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgW2Rpcj0ncnRsJ10gJi5tYXQtYmFkZ2UtYWZ0ZXIge1xuICAgICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgICAgcmlnaHQ6IGF1dG87XG4gICAgICAgIGxlZnQ6IC0kc2l6ZSAvIDI7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtYmFkZ2UtdGhlbWUoJHRoZW1lKSB7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgZGVmYXVsdC1jb250cmFzdCk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRwcmltYXJ5KTtcblxuICAgIEBpbmNsdWRlIGNkay1oaWdoLWNvbnRyYXN0KGFjdGl2ZSwgb2ZmKSB7XG4gICAgICBvdXRsaW5lOiBzb2xpZCAxcHg7XG4gICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYmFkZ2UtYWNjZW50IHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRhY2NlbnQpO1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJhZGdlLXdhcm4ge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkd2Fybik7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1iYWRnZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG5cbiAgLm1hdC1iYWRnZS1oaWRkZW4ge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYmFkZ2UtZGlzYWJsZWQge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICAkYXBwLWJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2JhY2tncm91bmQnKTtcbiAgICAgICRiYWRnZS1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC1idXR0b24pO1xuXG4gICAgICAvLyBUaGUgZGlzYWJsZWQgY29sb3IgdXN1YWxseSBoYXMgc29tZSBraW5kIG9mIG9wYWNpdHksIGJ1dCBiZWNhdXNlIHRoZSBiYWRnZSBpcyBvdmVybGF5ZWRcbiAgICAgIC8vIG9uIHRvcCBvZiBzb21ldGhpbmcgZWxzZSwgaXQgd29uJ3QgbG9vayBnb29kIGlmIGl0J3Mgb3BhcXVlLiBJZiBpdCBpcyBhIGNvbG9yICp0eXBlKixcbiAgICAgIC8vIHdlIGNvbnZlcnQgaXQgaW50byBhIHNvbGlkIGNvbG9yIGJ5IHRha2luZyB0aGUgb3BhY2l0eSBmcm9tIHRoZSByZ2JhIHZhbHVlIGFuZCB1c2luZ1xuICAgICAgLy8gdGhlIHZhbHVlIHRvIGRldGVybWluZSB0aGUgcGVyY2VudGFnZSBvZiB0aGUgYmFja2dyb3VuZCB0byBwdXQgaW50byBmb3JlZ3JvdW5kIHdoZW5cbiAgICAgIC8vIG1peGluZyB0aGUgY29sb3JzIHRvZ2V0aGVyLlxuICAgICAgQGlmICh0eXBlLW9mKCRiYWRnZS1jb2xvcikgPT0gY29sb3IgYW5kIHR5cGUtb2YoJGFwcC1iYWNrZ3JvdW5kKSA9PSBjb2xvcikge1xuICAgICAgICAkYmFkZ2Utb3BhY2l0eTogb3BhY2l0eSgkYmFkZ2UtY29sb3IpO1xuICAgICAgICBiYWNrZ3JvdW5kOiBtaXgoJGFwcC1iYWNrZ3JvdW5kLCByZ2JhKCRiYWRnZS1jb2xvciwgMSksICgxIC0gJGJhZGdlLW9wYWNpdHkpICogMTAwJSk7XG4gICAgICB9XG4gICAgICBAZWxzZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRiYWRnZS1jb2xvcjtcbiAgICAgIH1cblxuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDIwMG1zIGVhc2UtaW4tb3V0O1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC42KTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIH1cblxuICAubmctYW5pbWF0ZS1kaXNhYmxlZCAubWF0LWJhZGdlLWNvbnRlbnQsXG4gIC5tYXQtYmFkZ2UtY29udGVudC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSB7XG4gICAgdHJhbnNpdGlvbjogbm9uZTtcbiAgfVxuXG4gIC8vIFRoZSBhY3RpdmUgY2xhc3MgaXMgYWRkZWQgYWZ0ZXIgdGhlIGVsZW1lbnQgaXMgYWRkZWRcbiAgLy8gc28gaXQgY2FuIGFuaW1hdGUgc2NhbGUgdG8gZGVmYXVsdFxuICAubWF0LWJhZGdlLWNvbnRlbnQubWF0LWJhZGdlLWFjdGl2ZSB7XG4gICAgLy8gU2NhbGUgdG8gYG5vbmVgIGluc3RlYWQgb2YgYDFgIHRvIGF2b2lkIGJsdXJyeSB0ZXh0IGluIHNvbWUgYnJvd3NlcnMuXG4gICAgdHJhbnNmb3JtOiBub25lO1xuICB9XG5cbiAgLm1hdC1iYWRnZS1zbWFsbCB7XG4gICAgQGluY2x1ZGUgX21hdC1iYWRnZS1zaXplKCRtYXQtYmFkZ2Utc21hbGwtc2l6ZSk7XG4gIH1cbiAgLm1hdC1iYWRnZS1tZWRpdW0ge1xuICAgIEBpbmNsdWRlIF9tYXQtYmFkZ2Utc2l6ZSgkbWF0LWJhZGdlLWRlZmF1bHQtc2l6ZSk7XG4gIH1cbiAgLm1hdC1iYWRnZS1sYXJnZSB7XG4gICAgQGluY2x1ZGUgX21hdC1iYWRnZS1zaXplKCRtYXQtYmFkZ2UtbGFyZ2Utc2l6ZSk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1iYWRnZS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICBmb250LXdlaWdodDogJG1hdC1iYWRnZS1mb250LXdlaWdodDtcbiAgICBmb250LXNpemU6ICRtYXQtYmFkZ2UtZm9udC1zaXplO1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgLy8gU2V0IHRoZSBmb250IHNpemUgdG8gNzUlIG9mIHRoZSBvcmlnaW5hbC5cbiAgICBmb250LXNpemU6ICRtYXQtYmFkZ2UtZm9udC1zaXplICogMC43NTtcbiAgfVxuXG4gIC5tYXQtYmFkZ2UtbGFyZ2UgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICBmb250LXNpemU6ICRtYXQtYmFkZ2UtZm9udC1zaXplICogMjtcbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtYm90dG9tLXNoZWV0LXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lciB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oMTYsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBkaWFsb2cpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtYm90dG9tLXNoZWV0LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXIge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBib2R5LTEpO1xuICB9XG59XG5cblxuXG5cblxuJF9tYXQtYnV0dG9uLXJpcHBsZS1vcGFjaXR5OiAwLjE7XG5cbi8vIEFwcGxpZXMgYSBmb2N1cyBzdHlsZSB0byBhbiBtYXQtYnV0dG9uIGVsZW1lbnQgZm9yIGVhY2ggb2YgdGhlIHN1cHBvcnRlZCBwYWxldHRlcy5cbkBtaXhpbiBfbWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LWNvbG9yKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcblxuICAmLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG4gIH1cblxuICAmLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQpO1xuICB9XG5cbiAgJi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHdhcm4pO1xuICB9XG5cbiAgJltkaXNhYmxlZF0gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIH1cbn1cblxuLy8gQXBwbGllcyB0aGUgYmFja2dyb3VuZCBjb2xvciBmb3IgYSByaXBwbGUuIElmIHRoZSB2YWx1ZSBwcm92aWRlZCBpcyBub3QgYSBTYXNzIGNvbG9yLFxuLy8gd2UgYXNzdW1lIHRoYXQgd2UndmUgYmVlbiBnaXZlbiBhIENTUyB2YXJpYWJsZS4gU2luY2Ugd2UgY2FuJ3QgcGVyZm9ybSBhbHBoYS1ibGVuZGluZ1xuLy8gb24gYSBDU1MgdmFyaWFibGUsIHdlIGluc3RlYWQgYWRkIHRoZSBvcGFjaXR5IGRpcmVjdGx5IHRvIHRoZSByaXBwbGUgZWxlbWVudC5cbkBtaXhpbiBfbWF0LWJ1dHRvbi1yaXBwbGUtYmFja2dyb3VuZCgkcGFsZXR0ZSwgJGh1ZSwgJG9wYWNpdHkpIHtcbiAgJGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgJGh1ZSwgJG9wYWNpdHkpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1jb2xvcjtcbiAgQGlmICh0eXBlLW9mKCRiYWNrZ3JvdW5kLWNvbG9yKSAhPSBjb2xvcikge1xuICAgIG9wYWNpdHk6ICRvcGFjaXR5O1xuICB9XG59XG5cbkBtaXhpbiBfbWF0LWJ1dHRvbi1yaXBwbGUtY29sb3IoJHRoZW1lLCAkaHVlLCAkb3BhY2l0eTogJF9tYXQtYnV0dG9uLXJpcHBsZS1vcGFjaXR5KSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuXG4gICYubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tcmlwcGxlLWJhY2tncm91bmQoJHByaW1hcnksICRodWUsICRvcGFjaXR5KTtcbiAgfVxuXG4gICYubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi1yaXBwbGUtYmFja2dyb3VuZCgkYWNjZW50LCAkaHVlLCAkb3BhY2l0eSk7XG4gIH1cblxuICAmLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLXJpcHBsZS1iYWNrZ3JvdW5kKCR3YXJuLCAkaHVlLCAkb3BhY2l0eSk7XG4gIH1cbn1cblxuLy8gQXBwbGllcyBhIHByb3BlcnR5IHRvIGFuIG1hdC1idXR0b24gZWxlbWVudCBmb3IgZWFjaCBvZiB0aGUgc3VwcG9ydGVkIHBhbGV0dGVzLlxuQG1peGluIF9tYXQtYnV0dG9uLXRoZW1lLXByb3BlcnR5KCR0aGVtZSwgJHByb3BlcnR5LCAkaHVlKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gICYubWF0LXByaW1hcnkge1xuICAgICN7JHByb3BlcnR5fTogbWF0LWNvbG9yKCRwcmltYXJ5LCAkaHVlKTtcbiAgfVxuICAmLm1hdC1hY2NlbnQge1xuICAgICN7JHByb3BlcnR5fTogbWF0LWNvbG9yKCRhY2NlbnQsICRodWUpO1xuICB9XG4gICYubWF0LXdhcm4ge1xuICAgICN7JHByb3BlcnR5fTogbWF0LWNvbG9yKCR3YXJuLCAkaHVlKTtcbiAgfVxuXG4gICYubWF0LXByaW1hcnksICYubWF0LWFjY2VudCwgJi5tYXQtd2FybiwgJltkaXNhYmxlZF0ge1xuICAgICZbZGlzYWJsZWRdIHtcbiAgICAgICRwYWxldHRlOiBpZigkcHJvcGVydHkgPT0gJ2NvbG9yJywgJGZvcmVncm91bmQsICRiYWNrZ3JvdW5kKTtcbiAgICAgICN7JHByb3BlcnR5fTogbWF0LWNvbG9yKCRwYWxldHRlLCBkaXNhYmxlZC1idXR0b24pO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWJ1dHRvbi10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1idXR0b24sIC5tYXQtaWNvbi1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ge1xuICAgIC8vIEJ1dHRvbnMgd2l0aG91dCBhIGJhY2tncm91bmQgY29sb3Igc2hvdWxkIGluaGVyaXQgdGhlIGZvbnQgY29sb3IuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvXG4gICAgLy8gZW5zdXJlIHRoYXQgdGhlIGJ1dHRvbiBpcyByZWFkYWJsZSBvbiBjdXN0b20gYmFja2dyb3VuZCBjb2xvcnMuIEl0J3Mgd3JvbmcgdG8gYWx3YXlzIGFzc3VtZVxuICAgIC8vIHRoYXQgdGhvc2UgYnV0dG9ucyBhcmUgYWx3YXlzIHBsYWNlZCBpbnNpZGUgb2YgY29udGFpbmVycyB3aXRoIHRoZSBkZWZhdWx0IGJhY2tncm91bmRcbiAgICAvLyBjb2xvciBvZiB0aGUgdGhlbWUgKGUuZy4gdGhlbWVkIHRvb2xiYXJzKS5cbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblxuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLXRoZW1lLXByb3BlcnR5KCR0aGVtZSwgJ2NvbG9yJywgdGV4dCk7XG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tZm9jdXMtb3ZlcmxheS1jb2xvcigkdGhlbWUpO1xuXG4gICAgLy8gU2V0dXAgdGhlIHJpcHBsZSBjb2xvciB0byBiZSBiYXNlZCBvbiB0aGUgdGV4dCBjb2xvci4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHJpcHBsZXNcbiAgICAvLyBhcmUgbWF0Y2hpbmcgd2l0aCB0aGUgY3VycmVudCB0aGVtZSBwYWxldHRlIGFuZCBhcmUgaW4gY29udHJhc3QgdG8gdGhlIGJhY2tncm91bmQgY29sb3JcbiAgICAvLyAoZS5nIGluIHRoZW1lZCB0b29sYmFycykuXG4gICAgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgICBvcGFjaXR5OiAkX21hdC1idXR0b24tcmlwcGxlLW9wYWNpdHk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Q29sb3I7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSB7XG4gICAgYmFja2dyb3VuZDogbWFwX2dldCgkZm9yZWdyb3VuZCwgYmFzZSk7XG4gIH1cblxuICAvLyBOb3RlOiB0aGlzIG5lZWRzIGEgYml0IGV4dHJhIHNwZWNpZmljaXR5LCBiZWNhdXNlIHdlJ3JlIG5vdCBndWFyYW50ZWVkIHRoZSBpbmNsdXNpb25cbiAgLy8gb3JkZXIgb2YgdGhlIHRoZW1lIHN0eWxlcyBhbmQgdGhlIGJ1dHRvbiByZXNldCBtYXkgZW5kIHVwIHJlc2V0dGluZyB0aGlzIGFzIHdlbGwuXG4gIC5tYXQtc3Ryb2tlZC1idXR0b246bm90KFtkaXNhYmxlZF0pIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cblxuICAubWF0LWZsYXQtYnV0dG9uLCAubWF0LXJhaXNlZC1idXR0b24sIC5tYXQtZmFiLCAubWF0LW1pbmktZmFiIHtcbiAgICAvLyBEZWZhdWx0IGZvbnQgYW5kIGJhY2tncm91bmQgY29sb3Igd2hlbiBub3QgdXNpbmcgYW55IGNvbG9yIHBhbGV0dGUuXG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCByYWlzZWQtYnV0dG9uKTtcblxuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLXRoZW1lLXByb3BlcnR5KCR0aGVtZSwgJ2NvbG9yJywgZGVmYXVsdC1jb250cmFzdCk7XG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tdGhlbWUtcHJvcGVydHkoJHRoZW1lLCAnYmFja2dyb3VuZC1jb2xvcicsIGRlZmF1bHQpO1xuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLXJpcHBsZS1jb2xvcigkdGhlbWUsIGRlZmF1bHQtY29udHJhc3QpO1xuICB9XG5cbiAgLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1hdC1mbGF0LWJ1dHRvbiB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMCwgJHRoZW1lKTtcbiAgfVxuXG4gIC5tYXQtcmFpc2VkLWJ1dHRvbiB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMiwgJHRoZW1lKTtcblxuICAgICY6bm90KFtkaXNhYmxlZF0pOmFjdGl2ZSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbig4LCAkdGhlbWUpO1xuICAgIH1cblxuICAgICZbZGlzYWJsZWRdIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDAsICR0aGVtZSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1mYWIsIC5tYXQtbWluaS1mYWIge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDYsICR0aGVtZSk7XG5cbiAgICAmOm5vdChbZGlzYWJsZWRdKTphY3RpdmUge1xuICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMTIsICR0aGVtZSk7XG4gICAgfVxuXG4gICAgJltkaXNhYmxlZF0ge1xuICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMCwgJHRoZW1lKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1idXR0b24tdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtYnV0dG9uLCAubWF0LXJhaXNlZC1idXR0b24sIC5tYXQtaWNvbi1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24sXG4gIC5tYXQtZmxhdC1idXR0b24sIC5tYXQtZmFiLCAubWF0LW1pbmktZmFiIHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBidXR0b24pO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBidXR0b24pO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYnV0dG9uKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtYnV0dG9uLXRvZ2dsZS10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGRpdmlkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUsXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cCB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oMiwgJHRoZW1lKTtcbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQsXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIHtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBoaW50LXRleHQpO1xuXG4gICAgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBmb2N1c2VkLWJ1dHRvbik7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG5cbiAgICAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGZvY3VzZWQtYnV0dG9uLCAxKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUgKyAubWF0LWJ1dHRvbi10b2dnbGUge1xuICAgIGJvcmRlci1sZWZ0OiBzb2xpZCAxcHggJGRpdmlkZXItY29sb3I7XG4gIH1cblxuICBbZGlyPSdydGwnXSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUgKyAubWF0LWJ1dHRvbi10b2dnbGUge1xuICAgIGJvcmRlci1sZWZ0OiBub25lO1xuICAgIGJvcmRlci1yaWdodDogc29saWQgMXB4ICRkaXZpZGVyLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwge1xuICAgIC5tYXQtYnV0dG9uLXRvZ2dsZSArIC5tYXQtYnV0dG9uLXRvZ2dsZSB7XG4gICAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICAgIGJvcmRlci1yaWdodDogbm9uZTtcbiAgICAgIGJvcmRlci10b3A6IHNvbGlkIDFweCAkZGl2aWRlci1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBzZWxlY3RlZC1idXR0b24pO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcblxuICAgICYubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLWJ1dHRvbik7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBkaXNhYmxlZC1idXR0b24tdG9nZ2xlKTtcblxuICAgICYubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICAgIH1cblxuICAgICYubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIHNlbGVjdGVkLWRpc2FibGVkLWJ1dHRvbik7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCxcbiAgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQge1xuICAgIGJvcmRlcjogc29saWQgMXB4ICRkaXZpZGVyLWNvbG9yO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtYnV0dG9uLXRvZ2dsZS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1idXR0b24tdG9nZ2xlIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG59XG5cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtY2FyZC10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWNhcmQge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDEsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAgIC8vIE5lZWRzIGV4dHJhIHNwZWNpZmljaXR5IHRvIGJlIGFibGUgdG8gb3ZlcnJpZGUgdGhlIGVsZXZhdGlvbiBzZWxlY3RvcnMuXG4gICAgJi5tYXQtY2FyZC1mbGF0IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDAsICR0aGVtZSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1jYXJkLXN1YnRpdGxlIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1jYXJkLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWNhcmQge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LWNhcmQtdGl0bGUge1xuICAgIGZvbnQ6IHtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgaGVhZGxpbmUpO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgdGl0bGUpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtY2FyZC1oZWFkZXIgLm1hdC1jYXJkLXRpdGxlIHtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgdGl0bGUpO1xuICB9XG5cbiAgLm1hdC1jYXJkLXN1YnRpdGxlLFxuICAubWF0LWNhcmQtY29udGVudCB7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSk7XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LWNoZWNrYm94LXRoZW1lKCR0aGVtZSkge1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuXG4gIC8vIFRoZSBjb2xvciBvZiB0aGUgY2hlY2tib3gncyBjaGVja21hcmsgLyBtaXhlZG1hcmsuXG4gICRjaGVja2JveC1tYXJrLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGJhY2tncm91bmQpO1xuXG4gIC8vIE5PVEUodHJhdmlza2F1Zm1hbik6IFdoaWxlIHRoZSBzcGVjIGNhbGxzIGZvciB0cmFuc2x1Y2VudCBibGFja3Mvd2hpdGVzIGZvciBkaXNhYmxlZCBjb2xvcnMsXG4gIC8vIHRoaXMgZG9lcyBub3Qgd29yayB3ZWxsIHdpdGggZWxlbWVudHMgbGF5ZXJlZCBvbiB0b3Agb2Ygb25lIGFub3RoZXIuIFRvIGdldCBhcm91bmQgdGhpcyB3ZVxuICAvLyBibGVuZCB0aGUgY29sb3JzIHRvZ2V0aGVyIGJhc2VkIG9uIHRoZSBiYXNlIGNvbG9yIGFuZCB0aGUgdGhlbWUgYmFja2dyb3VuZC5cbiAgJHdoaXRlLTMwcGN0LW9wYWNpdHktb24tZGFyazogIzY4Njg2ODtcbiAgJGJsYWNrLTI2cGN0LW9wYWNpdHktb24tbGlnaHQ6ICNiMGIwYjA7XG4gICRkaXNhYmxlZC1jb2xvcjogaWYoJGlzLWRhcmstdGhlbWUsICR3aGl0ZS0zMHBjdC1vcGFjaXR5LW9uLWRhcmssICRibGFjay0yNnBjdC1vcGFjaXR5LW9uLWxpZ2h0KTtcblxuICAubWF0LWNoZWNrYm94LWZyYW1lIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1jaGVja2JveC1jaGVja21hcmsge1xuICAgIGZpbGw6ICRjaGVja2JveC1tYXJrLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aCB7XG4gICAgLy8gIWltcG9ydGFudCBpcyBuZWVkZWQgaGVyZSBiZWNhdXNlIGEgc3Ryb2tlIG11c3QgYmUgc2V0IGFzIGFuXG4gICAgLy8gYXR0cmlidXRlIG9uIHRoZSBTVkcgaW4gb3JkZXIgZm9yIGxpbmUgYW5pbWF0aW9uIHRvIHdvcmsgcHJvcGVybHkuXG4gICAgc3Ryb2tlOiAkY2hlY2tib3gtbWFyay1jb2xvciAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm1hdC1jaGVja2JveC1taXhlZG1hcmsge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRjaGVja2JveC1tYXJrLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLCAubWF0LWNoZWNrYm94LWNoZWNrZWQge1xuICAgICYubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiAubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCR3YXJuKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWNoZWNrYm94LWRpc2FibGVkIHtcbiAgICAmLm1hdC1jaGVja2JveC1jaGVja2VkLFxuICAgICYubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUge1xuICAgICAgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGRpc2FibGVkLWNvbG9yO1xuICAgICAgfVxuICAgIH1cblxuICAgICY6bm90KC5tYXQtY2hlY2tib3gtY2hlY2tlZCkge1xuICAgICAgLm1hdC1jaGVja2JveC1mcmFtZSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJGRpc2FibGVkLWNvbG9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN3aXRjaCB0aGlzIHRvIGEgc29saWQgY29sb3Igc2luY2Ugd2UncmUgdXNpbmcgYG9wYWNpdHlgXG4gIC8vIHRvIGNvbnRyb2wgaG93IG9wYXF1ZSB0aGUgcmlwcGxlIHNob3VsZCBiZS5cbiAgLm1hdC1jaGVja2JveCAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXBfZ2V0KG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKSwgYmFzZSk7XG4gIH1cblxuICAubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLFxuICAubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkge1xuICAgICYubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJHByaW1hcnkpO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYWNjZW50KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCR3YXJuKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1jaGVja2JveC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1jaGVja2JveCB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC8vIFRPRE8oa2FyYSk6IFJlbW92ZSB0aGlzIHN0eWxlIHdoZW4gZml4aW5nIHZlcnRpY2FsIGJhc2VsaW5lXG4gIC5tYXQtY2hlY2tib3gtbGF5b3V0IC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICAgIGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgYm9keS0yKTtcbiAgfVxufVxuXG5cblxuXG5cblxuJG1hdC1jaGlwLXJlbW92ZS1mb250LXNpemU6IDE4cHg7XG5cbkBtaXhpbiBtYXQtY2hpcHMtY29sb3IoJGZvcmVncm91bmQsICRiYWNrZ3JvdW5kKSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kO1xuICBjb2xvcjogJGZvcmVncm91bmQ7XG5cbiAgLm1hdC1jaGlwLXJlbW92ZSB7XG4gICAgY29sb3I6ICRmb3JlZ3JvdW5kO1xuICAgIG9wYWNpdHk6IDAuNDtcbiAgfVxufVxuXG5cbi8vIEFwcGxpZXMgdGhlIGJhY2tncm91bmQgY29sb3IgZm9yIGEgcmlwcGxlIGVsZW1lbnQuXG4vLyBJZiB0aGUgY29sb3IgdmFsdWUgcHJvdmlkZWQgaXMgbm90IGEgU2FzcyBjb2xvcixcbi8vIHdlIGFzc3VtZSB0aGF0IHdlJ3ZlIGJlZW4gZ2l2ZW4gYSBDU1MgdmFyaWFibGUuXG4vLyBTaW5jZSB3ZSBjYW4ndCBwZXJmb3JtIGFscGhhLWJsZW5kaW5nIG9uIGEgQ1NTIHZhcmlhYmxlLFxuLy8gd2UgaW5zdGVhZCBhZGQgdGhlIG9wYWNpdHkgZGlyZWN0bHkgdG8gdGhlIHJpcHBsZSBlbGVtZW50LlxuQG1peGluIF9tYXQtY2hpcHMtcmlwcGxlLWJhY2tncm91bmQoJHBhbGV0dGUsICRkZWZhdWx0LWNvbnRyYXN0LCAkb3BhY2l0eSkge1xuICAkYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCAkZGVmYXVsdC1jb250cmFzdCwgJG9wYWNpdHkpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1jb2xvcjtcbiAgQGlmICh0eXBlLW9mKCRiYWNrZ3JvdW5kLWNvbG9yKSAhPSBjb2xvcikge1xuICAgIG9wYWNpdHk6ICRvcGFjaXR5O1xuICB9XG59XG5cbkBtaXhpbiBtYXQtY2hpcHMtdGhlbWUtY29sb3IoJHBhbGV0dGUpIHtcbiAgQGluY2x1ZGUgbWF0LWNoaXBzLWNvbG9yKG1hdC1jb2xvcigkcGFsZXR0ZSwgZGVmYXVsdC1jb250cmFzdCksIG1hdC1jb2xvcigkcGFsZXR0ZSkpO1xuXG4gIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgQGluY2x1ZGUgX21hdC1jaGlwcy1yaXBwbGUtYmFja2dyb3VuZCgkcGFsZXR0ZSwgZGVmYXVsdC1jb250cmFzdCwgMC4xKTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWNoaXBzLXRoZW1lKCR0aGVtZSkge1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAkdW5zZWxlY3RlZC1iYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIHVuc2VsZWN0ZWQtY2hpcCk7XG4gICR1bnNlbGVjdGVkLWZvcmVncm91bmQ6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwIHtcbiAgICBAaW5jbHVkZSBtYXQtY2hpcHMtY29sb3IoJHVuc2VsZWN0ZWQtZm9yZWdyb3VuZCwgJHVuc2VsZWN0ZWQtYmFja2dyb3VuZCk7XG5cbiAgICAmOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpIHtcbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oMywgJHRoZW1lKTtcbiAgICAgIH1cblxuICAgICAgLm1hdC1jaGlwLXJlbW92ZTpob3ZlciB7XG4gICAgICAgIG9wYWNpdHk6IDAuNTQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5tYXQtY2hpcC1kaXNhYmxlZCB7XG4gICAgICBvcGFjaXR5OiAwLjQ7XG4gICAgfVxuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZDogbWFwX2dldCgkZm9yZWdyb3VuZCwgYmFzZSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkIHtcbiAgICAmLm1hdC1wcmltYXJ5IHtcbiAgICAgIEBpbmNsdWRlIG1hdC1jaGlwcy10aGVtZS1jb2xvcigkcHJpbWFyeSk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBAaW5jbHVkZSBtYXQtY2hpcHMtdGhlbWUtY29sb3IoJHdhcm4pO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICBAaW5jbHVkZSBtYXQtY2hpcHMtdGhlbWUtY29sb3IoJGFjY2VudCk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtY2hpcHMtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtY2hpcCB7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMik7XG4gICAgZm9udC13ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTIpO1xuXG4gICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb24sXG4gICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbiB7XG4gICAgICBmb250LXNpemU6ICRtYXQtY2hpcC1yZW1vdmUtZm9udC1zaXplO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtdGFibGUtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC10YWJsZSB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnY2FyZCcpO1xuICB9XG5cbiAgLm1hdC10YWJsZSB0aGVhZCwgLm1hdC10YWJsZSB0Ym9keSwgLm1hdC10YWJsZSB0Zm9vdCxcbiAgbWF0LWhlYWRlci1yb3csIG1hdC1yb3csIG1hdC1mb290ZXItcm93LFxuICBbbWF0LWhlYWRlci1yb3ddLCBbbWF0LXJvd10sIFttYXQtZm9vdGVyLXJvd10sXG4gIC5tYXQtdGFibGUtc3RpY2t5IHtcbiAgICBiYWNrZ3JvdW5kOiBpbmhlcml0O1xuICB9XG5cbiAgbWF0LXJvdywgbWF0LWhlYWRlci1yb3csIG1hdC1mb290ZXItcm93LFxuICB0aC5tYXQtaGVhZGVyLWNlbGwsIHRkLm1hdC1jZWxsLCB0ZC5tYXQtZm9vdGVyLWNlbGwge1xuICAgIGJvcmRlci1ib3R0b20tY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cblxuICAubWF0LWhlYWRlci1jZWxsIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LWNlbGwsIC5tYXQtZm9vdGVyLWNlbGwge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtdGFibGUtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtdGFibGUge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LWhlYWRlci1jZWxsIHtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbik7XG4gICAgZm9udC13ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTIpO1xuICB9XG5cbiAgLm1hdC1jZWxsLCAubWF0LWZvb3Rlci1jZWxsIHtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKTtcbiAgfVxufVxuXG5cblxuXG5cblxuXG4kbWF0LWRhdGVwaWNrZXItc2VsZWN0ZWQtdG9kYXktYm94LXNoYWRvdy13aWR0aDogMXB4O1xuJG1hdC1kYXRlcGlja2VyLXNlbGVjdGVkLWZhZGUtYW1vdW50OiAwLjY7XG4kbWF0LWRhdGVwaWNrZXItdG9kYXktZmFkZS1hbW91bnQ6IDAuMjtcbiRtYXQtY2FsZW5kYXItYm9keS1mb250LXNpemU6IDEzcHggIWRlZmF1bHQ7XG4kbWF0LWNhbGVuZGFyLXdlZWtkYXktdGFibGUtZm9udC1zaXplOiAxMXB4ICFkZWZhdWx0O1xuXG5AbWl4aW4gX21hdC1kYXRlcGlja2VyLWNvbG9yKCRwYWxldHRlKSB7XG4gIC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCA+IC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCB7XG4gICAgJGJhY2tncm91bmQ6IG1hdC1jb2xvcigkcGFsZXR0ZSk7XG5cbiAgICBAaWYgKHR5cGUtb2YoJGJhY2tncm91bmQpID09IGNvbG9yKSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBmYWRlLW91dCgkYmFja2dyb3VuZCwgJG1hdC1kYXRlcGlja2VyLXNlbGVjdGVkLWZhZGUtYW1vdW50KTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgLy8gSWYgd2UgY291bGRuJ3QgcmVzb2x2ZSB0byBiYWNrZ3JvdW5kIHRvIGEgY29sb3IgKGUuZy4gaXQncyBhIENTUyB2YXJpYWJsZSksXG4gICAgICAvLyBmYWxsIGJhY2sgdG8gZmFkaW5nIHRoZSBjb250ZW50IG91dCB2aWEgYG9wYWNpdHlgLlxuICAgICAgb3BhY2l0eTogJG1hdC1kYXRlcGlja2VyLXRvZGF5LWZhZGUtYW1vdW50O1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCB7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgJG1hdC1kYXRlcGlja2VyLXNlbGVjdGVkLXRvZGF5LWJveC1zaGFkb3ctd2lkdGhcbiAgICAgICAgICAgICAgICBtYXQtY29sb3IoJHBhbGV0dGUsIGRlZmF1bHQtY29udHJhc3QpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtZGF0ZXBpY2tlci10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcblxuICAubWF0LWNhbGVuZGFyLWFycm93IHtcbiAgICBib3JkZXItdG9wLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGljb24pO1xuICB9XG5cbiAgLy8gVGhlIHByZXYvbmV4dCBidXR0b25zIG5lZWQgYSBiaXQgbW9yZSBzcGVjaWZpY2l0eSB0b1xuICAvLyBhdm9pZCBiZWluZyBvdmVyd3JpdHRlbiBieSB0aGUgLm1hdC1pY29uLWJ1dHRvbi5cbiAgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZSxcbiAgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1uZXh0LWJ1dHRvbixcbiAgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1wcmV2aW91cy1idXR0b24ge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGljb24pO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGhpbnQtdGV4dCk7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlci1kaXZpZGVyOjphZnRlciB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS1sYWJlbCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCA+IC5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCkge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXIsXG4gIC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlLFxuICAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlIHtcbiAgICAmID4gLm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCkge1xuICAgIC8vIE5vdGU6IHRob3VnaCBpdCdzIG5vdCB0ZXh0LCB0aGUgYm9yZGVyIGlzIGEgaGludCBhYm91dCB0aGUgZmFjdCB0aGF0IHRoaXMgaXMgdG9kYXkncyBkYXRlLFxuICAgIC8vIHNvIHdlIHVzZSB0aGUgaGludCBjb2xvci5cbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaGludC10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCA+IC5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKSB7XG4gICAgJGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGhpbnQtdGV4dCk7XG5cbiAgICBAaWYgKHR5cGUtb2YoJGNvbG9yKSA9PSBjb2xvcikge1xuICAgICAgYm9yZGVyLWNvbG9yOiBmYWRlLW91dCgkY29sb3IsICRtYXQtZGF0ZXBpY2tlci10b2RheS1mYWRlLWFtb3VudCk7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIC8vIElmIHRoZSBjb2xvciBkaWRuJ3QgcmVzb2x2ZSB0byBhIGNvbG9yIHZhbHVlLCBidXQgc29tZXRoaW5nIGxpa2UgYSBDU1MgdmFyaWFibGUsIHdlIGNhbid0XG4gICAgICAvLyBmYWRlIGl0IG91dCBzbyB3ZSBmYWxsIGJhY2sgdG8gcmVkdWNpbmcgdGhlIGVsZW1lbnQgb3BhY2l0eS4gTm90ZSB0aGF0IHdlIGRvbid0IHVzZSB0aGVcbiAgICAgIC8vICRtYXQtZGF0ZXBpY2tlci10b2RheS1mYWRlLWFtb3VudCwgYmVjYXVzZSBoaW50IHRleHQgdXN1YWxseSBoYXMgc29tZSBvcGFjaXR5IGFwcGxpZWRcbiAgICAgIC8vIHRvIGl0IGFscmVhZHkgYW5kIHdlIGRvbid0IHdhbnQgdGhlbSB0byBzdGFjayBvbiB0b3Agb2YgZWFjaCBvdGhlci5cbiAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICB9XG4gIH1cblxuICBAaW5jbHVkZSBfbWF0LWRhdGVwaWNrZXItY29sb3IobWFwLWdldCgkdGhlbWUsIHByaW1hcnkpKTtcblxuICAubWF0LWRhdGVwaWNrZXItY29udGVudCB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oNCwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gICAgJi5tYXQtYWNjZW50IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtZGF0ZXBpY2tlci1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KSk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBAaW5jbHVkZSBfbWF0LWRhdGVwaWNrZXItY29sb3IobWFwLWdldCgkdGhlbWUsIHdhcm4pKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWRhdGVwaWNrZXItY29udGVudC10b3VjaCB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oMCwgJHRoZW1lKTtcbiAgfVxuXG4gIC5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KSwgdGV4dCk7XG5cbiAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KSwgdGV4dCk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKG1hcC1nZXQoJHRoZW1lLCB3YXJuKSwgdGV4dCk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtZGF0ZXBpY2tlci10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1jYWxlbmRhciB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keSB7XG4gICAgZm9udC1zaXplOiAkbWF0LWNhbGVuZGFyLWJvZHktZm9udC1zaXplO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsLFxuICAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b24ge1xuICAgIGZvbnQ6IHtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYnV0dG9uKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJ1dHRvbik7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIgdGgge1xuICAgIGZvbnQ6IHtcbiAgICAgIHNpemU6ICRtYXQtY2FsZW5kYXItd2Vla2RheS10YWJsZS1mb250LXNpemU7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTEpO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LWRpYWxvZy10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDI0LCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZGlhbG9nKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWRpYWxvZy10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1kaWFsb2ctdGl0bGUge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCB0aXRsZSk7XG4gIH1cbn1cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtZXhwYW5zaW9uLXBhbmVsLXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtZXhwYW5zaW9uLXBhbmVsIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigyLCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cblxuICAubWF0LWFjdGlvbi1yb3cge1xuICAgIGJvcmRlci10b3AtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cblxuICAubWF0LWV4cGFuc2lvbi1wYW5lbCB7XG4gICAgJiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQsXG4gICAgJiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZCxcbiAgICAmOm5vdCgubWF0LWV4cGFuZGVkKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXIge1xuICAgICAgJjpub3QoW2FyaWEtZGlzYWJsZWQ9J3RydWUnXSkge1xuICAgICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBEaXNhYmxlIHRoZSBob3ZlciBvbiB0b3VjaCBkZXZpY2VzIHNpbmNlIGl0IGNhbiBhcHBlYXIgbGlrZSBpdCBpcyBzdHVjay4gV2UgY2FuJ3QgdXNlXG4gIC8vIGBAbWVkaWEgKGhvdmVyKWAgYWJvdmUsIGJlY2F1c2UgdGhlIGRlc2t0b3Agc3VwcG9ydCBicm93c2VyIHN1cHBvcnQgaXNuJ3QgZ3JlYXQuXG4gIEBtZWRpYSAoaG92ZXI6IG5vbmUpIHtcbiAgICAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCk6bm90KFthcmlhLWRpc2FibGVkPSd0cnVlJ10pXG4gICAgICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG5cbiAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLFxuICAubWF0LWV4cGFuc2lvbi1pbmRpY2F0b3I6OmFmdGVyIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD0ndHJ1ZSddIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC1idXR0b24pO1xuXG4gICAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlLFxuICAgIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiB7XG4gICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1leHBhbnNpb24tcGFuZWwtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgc3ViaGVhZGluZy0xKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgc3ViaGVhZGluZy0xKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIHN1YmhlYWRpbmctMSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudCB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGJvZHktMSk7XG4gIH1cbn1cblxuXG5cblxuLy8gVGhpcyBtaXhpbiB3aWxsIGVuc3VyZSB0aGF0IGxpbmVzIHRoYXQgb3ZlcmZsb3cgdGhlIGNvbnRhaW5lciB3aWxsIGhpZGUgdGhlIG92ZXJmbG93IGFuZFxuLy8gdHJ1bmNhdGUgbmVhdGx5IHdpdGggYW4gZWxsaXBzaXMuXG5AbWl4aW4gbWF0LXRydW5jYXRlLWxpbmUoKSB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG4vLyBNaXhpbiB0byBwcm92aWRlIGFsbCBtYXQtbGluZSBzdHlsZXMsIGNoYW5naW5nIHNlY29uZGFyeSBmb250IHNpemUgYmFzZWQgb24gd2hldGhlciB0aGUgbGlzdFxuLy8gaXMgaW4gZGVuc2UgbW9kZS5cbkBtaXhpbiBtYXQtbGluZS1iYXNlKCRzZWNvbmRhcnktZm9udC1zaXplKSB7XG4gIC5tYXQtbGluZSB7XG4gICAgQGluY2x1ZGUgbWF0LXRydW5jYXRlLWxpbmUoKTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXG4gICAgLy8gYWxsIGxpbmVzIGJ1dCB0aGUgdG9wIGxpbmUgc2hvdWxkIGhhdmUgc21hbGxlciB0ZXh0XG4gICAgJjpudGgtY2hpbGQobisyKSB7XG4gICAgICBmb250LXNpemU6ICRzZWNvbmRhcnktZm9udC1zaXplO1xuICAgIH1cbiAgfVxufVxuXG4vLyBUaGlzIG1peGluIG5vcm1hbGl6ZXMgZGVmYXVsdCBlbGVtZW50IHN0eWxlcywgZS5nLiBmb250IHdlaWdodCBmb3IgaGVhZGluZyB0ZXh0LlxuQG1peGluIG1hdC1ub3JtYWxpemUtdGV4dCgpIHtcbiAgJiA+ICoge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xuICB9XG59XG5cbi8vIFRoaXMgbWl4aW4gcHJvdmlkZXMgYmFzZSBzdHlsZXMgZm9yIHRoZSB3cmFwcGVyIGFyb3VuZCBtYXQtbGluZSBlbGVtZW50cyBpbiBhIGxpc3QuXG5AbWl4aW4gbWF0LWxpbmUtd3JhcHBlci1iYXNlKCkge1xuICBAaW5jbHVkZSBtYXQtbm9ybWFsaXplLXRleHQoKTtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB3aWR0aDogMTAwJTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAvLyBNdXN0IHJlbW92ZSB3cmFwcGVyIHdoZW4gbGluZXMgYXJlIGVtcHR5IG9yIGl0IHRha2VzIHVwIGhvcml6b250YWxcbiAgLy8gc3BhY2UgYW5kIHB1c2hlcyBvdGhlciBlbGVtZW50cyB0byB0aGUgcmlnaHQuXG4gICY6ZW1wdHkge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuXG5cbi8vIEluY2x1ZGUgdGhpcyBlbXB0eSBtaXhpbiBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgb3RoZXIgY29tcG9uZW50cy5cbkBtaXhpbiBtYXQtZ3JpZC1saXN0LXRoZW1lKCR0aGVtZSkgeyB9XG5cbkBtaXhpbiBtYXQtZ3JpZC1saXN0LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWdyaWQtdGlsZS1oZWFkZXIsXG4gIC5tYXQtZ3JpZC10aWxlLWZvb3RlciB7XG4gICAgQGluY2x1ZGUgbWF0LWxpbmUtYmFzZShtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pKTtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKTtcbiAgfVxufVxuXG5cblxuXG4vLyBJbmNsdWRlIHRoaXMgZW1wdHkgbWl4aW4gZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIG90aGVyIGNvbXBvbmVudHMuXG5AbWl4aW4gbWF0LWljb24tdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtaWNvbiB7XG4gICAgJi5tYXQtcHJpbWFyeSB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCB0ZXh0KTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCB0ZXh0KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWljb24tdHlwb2dyYXBoeSgkY29uZmlnKSB7IH1cblxuXG5cblxuXG4vLyBSZW5kZXJzIGEgZ3JhZGllbnQgZm9yIHNob3dpbmcgdGhlIGRhc2hlZCBsaW5lIHdoZW4gdGhlIGlucHV0IGlzIGRpc2FibGVkLlxuLy8gVW5saWtlIHVzaW5nIGEgYm9yZGVyLCBhIGdyYWRpZW50IGFsbG93cyB1cyB0byBhZGp1c3QgdGhlIHNwYWNpbmcgb2YgdGhlIGRvdHRlZCBsaW5lXG4vLyB0byBtYXRjaCB0aGUgTWF0ZXJpYWwgRGVzaWduIHNwZWMuXG5AbWl4aW4gbWF0LWNvbnRyb2wtZGlzYWJsZWQtdW5kZXJsaW5lKCRjb2xvcikge1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICRjb2xvciAwJSwgJGNvbG9yIDMzJSwgdHJhbnNwYXJlbnQgMCUpO1xuICBiYWNrZ3JvdW5kLXNpemU6IDRweCAxMDAlO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7XG59XG5cbi8vIEZpZ3VyZXMgb3V0IHRoZSBjb2xvciBvZiB0aGUgcGxhY2Vob2xkZXIgZm9yIGEgZm9ybSBjb250cm9sLlxuLy8gVXNlZCBwcmltYXJpbHkgdG8gcHJldmVudCB0aGUgdmFyaW91cyBmb3JtIGNvbnRyb2xzIGZyb21cbi8vIGJlY29taW5nIG91dCBvZiBzeW5jIHNpbmNlIHRoZXNlIGNvbG9ycyBhcmVuJ3QgaW4gYSBwYWxldHRlLlxuQGZ1bmN0aW9uIF9tYXQtY29udHJvbC1wbGFjZWhvbGRlci1jb2xvcigkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcbiAgQHJldHVybiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0LCBpZigkaXMtZGFyay10aGVtZSwgMC41LCAwLjQyKSk7XG59XG5cblxuLyogc3R5bGVsaW50LWRpc2FibGUgbWF0ZXJpYWwvbm8tcHJlZml4ZXMgKi9cbkBtaXhpbiB1c2VyLXNlbGVjdCgkdmFsdWUpIHtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogJHZhbHVlO1xuICAtbW96LXVzZXItc2VsZWN0OiAkdmFsdWU7XG4gIC1tcy11c2VyLXNlbGVjdDogJHZhbHVlO1xuICB1c2VyLXNlbGVjdDogJHZhbHVlO1xufVxuXG5AbWl4aW4gaW5wdXQtcGxhY2Vob2xkZXIge1xuICAmOjpwbGFjZWhvbGRlciB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cblxuICAmOjotbW96LXBsYWNlaG9sZGVyIHtcbiAgICBAY29udGVudDtcbiAgfVxuXG4gICY6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIEBjb250ZW50O1xuICB9XG5cbiAgJjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIEBjb250ZW50O1xuICB9XG59XG5cbkBtaXhpbiBjdXJzb3ItZ3JhYiB7XG4gIGN1cnNvcjogLXdlYmtpdC1ncmFiO1xuICBjdXJzb3I6IGdyYWI7XG59XG5cbkBtaXhpbiBjdXJzb3ItZ3JhYmJpbmcge1xuICBjdXJzb3I6IC13ZWJraXQtZ3JhYmJpbmc7XG4gIGN1cnNvcjogZ3JhYmJpbmc7XG59XG5cbkBtaXhpbiBiYWNrZmFjZS12aXNpYmlsaXR5KCR2YWx1ZSkge1xuICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6ICR2YWx1ZTtcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogJHZhbHVlO1xufVxuLyogc3R5bGVsaW50LWVuYWJsZSAqL1xuXG5cblxuQG1peGluIG1hdC1pbnB1dC10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlciB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1pbnB1dC1lbGVtZW50OmRpc2FibGVkLFxuICAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVyIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtaW5wdXQtZWxlbWVudCB7XG4gICAgY2FyZXQtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgdGV4dCk7XG5cbiAgICBAaW5jbHVkZSBpbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgICBjb2xvcjogX21hdC1jb250cm9sLXBsYWNlaG9sZGVyLWNvbG9yKCR0aGVtZSk7XG4gICAgfVxuXG4gICAgLy8gT24gZGFyayB0aGVtZXMgd2Ugc2V0IHRoZSBuYXRpdmUgYHNlbGVjdGAgY29sb3IgdG8gc29tZSBzaGFkZSBvZiB3aGl0ZSxcbiAgICAvLyBob3dldmVyIHRoZSBjb2xvciBwcm9wYWdhdGVzIHRvIGFsbCBvZiB0aGUgYG9wdGlvbmAgZWxlbWVudHMsIHdoaWNoIGFyZVxuICAgIC8vIGFsd2F5cyBvbiBhIHdoaXRlIGJhY2tncm91bmQgaW5zaWRlIHRoZSBkcm9wZG93biwgY2F1c2luZyB0aGVtIHRvIGJsZW5kIGluLlxuICAgIC8vIFNpbmNlIHdlIGNhbid0IGNoYW5nZSBiYWNrZ3JvdW5kIG9mIHRoZSBkcm9wZG93biwgd2UgbmVlZCB0byBleHBsaWNpdGx5XG4gICAgLy8gcmVzZXQgdGhlIGNvbG9yIG9mIHRoZSBvcHRpb25zIHRvIHNvbWV0aGluZyBkYXJrLlxuICAgIEBpZiAobWFwLWdldCgkdGhlbWUsIGlzLWRhcmspKSB7XG4gICAgICBvcHRpb24ge1xuICAgICAgICBjb2xvcjogJGRhcmstcHJpbWFyeS10ZXh0O1xuICAgICAgfVxuXG4gICAgICBvcHRpb246ZGlzYWJsZWQge1xuICAgICAgICBjb2xvcjogJGRhcmstZGlzYWJsZWQtdGV4dDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubWF0LWFjY2VudCAubWF0LWlucHV0LWVsZW1lbnQge1xuICAgIGNhcmV0LWNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgdGV4dCk7XG4gIH1cblxuICAubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50LFxuICAubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWlucHV0LWVsZW1lbnQge1xuICAgIGNhcmV0LWNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVyIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWlucHV0LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAvLyBUaGUgdW5pdC1sZXNzIGxpbmUtaGVpZ2h0IGZyb20gdGhlIGZvbnQgY29uZmlnLlxuICAkbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBpbnB1dCk7XG5cbiAgLy8gVGhlIGFtb3VudCBvZiBzcGFjZSBiZXR3ZWVuIHRoZSB0b3Agb2YgdGhlIGxpbmUgYW5kIHRoZSB0b3Agb2YgdGhlIGFjdHVhbCB0ZXh0XG4gIC8vIChhcyBhIGZyYWN0aW9uIG9mIHRoZSBmb250LXNpemUpLlxuICAkbGluZS1zcGFjaW5nOiAoJGxpbmUtaGVpZ2h0IC0gMSkgLyAyO1xuXG4gIC8vIDxpbnB1dD4gZWxlbWVudHMgc2VlbSB0byBoYXZlIHRoZWlyIGhlaWdodCBzZXQgc2xpZ2h0bHkgdG9vIGxhcmdlIG9uIFNhZmFyaSBjYXVzaW5nIHRoZSB0ZXh0IHRvXG4gIC8vIGJlIG1pc2FsaWduZWQgdy5yLnQuIHRoZSBwbGFjZWhvbGRlci4gQWRkaW5nIHRoaXMgbWFyZ2luIGNvcnJlY3RzIGl0LlxuICBpbnB1dC5tYXQtaW5wdXQtZWxlbWVudCB7XG4gICAgbWFyZ2luLXRvcDogLSRsaW5lLXNwYWNpbmcgKiAxZW07XG4gIH1cbn1cblxuXG5cblxuXG5cblxuQG1peGluIG1hdC1saXN0LXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtbGlzdC1iYXNlIHtcbiAgICAubWF0LWxpc3QtaXRlbSB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICB9XG5cbiAgICAubWF0LWxpc3Qtb3B0aW9uIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIH1cblxuICAgIC5tYXQtc3ViaGVhZGVyIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgICB9XG4gIH1cblxuICAubWF0LWxpc3QtaXRlbS1kaXNhYmxlZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBkaXNhYmxlZC1saXN0LW9wdGlvbik7XG4gIH1cblxuICAubWF0LWxpc3Qtb3B0aW9uLFxuICAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLFxuICAubWF0LWFjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIHtcbiAgICAmOmhvdmVyLCAmOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2hvdmVyJyk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb24ge1xuICAgICYsICY6aG92ZXIsICY6Zm9jdXMge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3ZlciwgMC4xMik7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtbGlzdC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgJGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG5cbiAgLm1hdC1saXN0LWl0ZW0ge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHk7XG4gIH1cblxuICAubWF0LWxpc3Qtb3B0aW9uIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5O1xuICB9XG5cbiAgLy8gRGVmYXVsdCBsaXN0XG4gIC5tYXQtbGlzdC1iYXNlIHtcbiAgICAubWF0LWxpc3QtaXRlbSB7XG4gICAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgc3ViaGVhZGluZy0yKTtcbiAgICAgIEBpbmNsdWRlIG1hdC1saW5lLWJhc2UobWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpKTtcbiAgICB9XG5cbiAgICAubWF0LWxpc3Qtb3B0aW9uIHtcbiAgICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBzdWJoZWFkaW5nLTIpO1xuICAgICAgQGluY2x1ZGUgbWF0LWxpbmUtYmFzZShtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSkpO1xuICAgIH1cblxuICAgIC5tYXQtc3ViaGVhZGVyIHtcbiAgICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgYm9keS0yKTtcbiAgICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTIpO1xuICAgICAgZm9udC13ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIERlbnNlIGxpc3RcbiAgLm1hdC1saXN0LWJhc2VbZGVuc2VdIHtcbiAgICAubWF0LWxpc3QtaXRlbSB7XG4gICAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbik7XG4gICAgICBAaW5jbHVkZSBtYXQtbGluZS1iYXNlKG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbikpO1xuICAgIH1cblxuICAgIC5tYXQtbGlzdC1vcHRpb24ge1xuICAgICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pO1xuICAgICAgQGluY2x1ZGUgbWF0LWxpbmUtYmFzZShtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pKTtcbiAgICB9XG5cbiAgICAubWF0LXN1YmhlYWRlciB7XG4gICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5O1xuICAgICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pO1xuICAgICAgZm9udC13ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTIpO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LW1lbnUtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1tZW51LXBhbmVsIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbig0LCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2NhcmQnKTtcbiAgfVxuXG4gIC5tYXQtbWVudS1pdGVtIHtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCAndGV4dCcpO1xuXG4gICAgJltkaXNhYmxlZF0ge1xuICAgICAgJiwgJjo6YWZ0ZXIge1xuICAgICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCAnZGlzYWJsZWQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubWF0LW1lbnUtaXRlbSAubWF0LWljb24tbm8tY29sb3IsXG4gIC5tYXQtbWVudS1pdGVtLXN1Ym1lbnUtdHJpZ2dlcjo6YWZ0ZXIge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsICdpY29uJyk7XG4gIH1cblxuICAubWF0LW1lbnUtaXRlbTpob3ZlcixcbiAgLm1hdC1tZW51LWl0ZW0uY2RrLXByb2dyYW0tZm9jdXNlZCxcbiAgLm1hdC1tZW51LWl0ZW0uY2RrLWtleWJvYXJkLWZvY3VzZWQsXG4gIC5tYXQtbWVudS1pdGVtLWhpZ2hsaWdodGVkIHtcbiAgICAmOm5vdChbZGlzYWJsZWRdKSB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdob3ZlcicpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LW1lbnUtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtbWVudS1pdGVtIHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBib2R5LTEpO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0xKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtcGFnaW5hdG9yLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuXG4gIC5tYXQtcGFnaW5hdG9yIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdjYXJkJyk7XG4gIH1cblxuICAubWF0LXBhZ2luYXRvcixcbiAgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXIge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtcGFnaW5hdG9yLWRlY3JlbWVudCxcbiAgLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50IHtcbiAgICBib3JkZXItdG9wOiAycHggc29saWQgbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCAnaWNvbicpO1xuICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkIG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgJ2ljb24nKTtcbiAgfVxuXG4gIC5tYXQtcGFnaW5hdG9yLWZpcnN0LFxuICAubWF0LXBhZ2luYXRvci1sYXN0IHtcbiAgICBib3JkZXItdG9wOiAycHggc29saWQgbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCAnaWNvbicpO1xuICB9XG5cbiAgLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0ge1xuICAgIC5tYXQtcGFnaW5hdG9yLWRlY3JlbWVudCxcbiAgICAubWF0LXBhZ2luYXRvci1pbmNyZW1lbnQsXG4gICAgLm1hdC1wYWdpbmF0b3ItZmlyc3QsXG4gICAgLm1hdC1wYWdpbmF0b3ItbGFzdCB7XG4gICAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgJ2Rpc2FibGVkJyk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtcGFnaW5hdG9yLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXBhZ2luYXRvcixcbiAgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXIge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGNhcHRpb24pO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LXByb2dyZXNzLWJhci10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG5cbiAgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZCB7XG4gICAgZmlsbDogbWF0LWNvbG9yKCRwcmltYXJ5LCBsaWdodGVyKTtcbiAgfVxuXG4gIC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCBsaWdodGVyKTtcbiAgfVxuXG4gIC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnkpO1xuICB9XG5cbiAgLm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCB7XG4gICAgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZCB7XG4gICAgICBmaWxsOiBtYXQtY29sb3IoJGFjY2VudCwgbGlnaHRlcik7XG4gICAgfVxuXG4gICAgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCBsaWdodGVyKTtcbiAgICB9XG5cbiAgICAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4ge1xuICAgIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmQge1xuICAgICAgZmlsbDogbWF0LWNvbG9yKCR3YXJuLCBsaWdodGVyKTtcbiAgICB9XG5cbiAgICAubWF0LXByb2dyZXNzLWJhci1idWZmZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCR3YXJuLCBsaWdodGVyKTtcbiAgICB9XG5cbiAgICAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHdhcm4pO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXByb2dyZXNzLWJhci10eXBvZ3JhcGh5KCRjb25maWcpIHsgfVxuXG5cblxuXG5cblxuQG1peGluIG1hdC1wcm9ncmVzcy1zcGlubmVyLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcblxuICAubWF0LXByb2dyZXNzLXNwaW5uZXIsIC5tYXQtc3Bpbm5lciB7XG4gICAgY2lyY2xlIHtcbiAgICAgIHN0cm9rZTogbWF0LWNvbG9yKCRwcmltYXJ5KTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQgY2lyY2xlIHtcbiAgICAgIHN0cm9rZTogbWF0LWNvbG9yKCRhY2NlbnQpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4gY2lyY2xlIHtcbiAgICAgIHN0cm9rZTogbWF0LWNvbG9yKCR3YXJuKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1wcm9ncmVzcy1zcGlubmVyLXR5cG9ncmFwaHkoJGNvbmZpZykgeyB9XG5cblxuXG5cblxuQG1peGluIF9tYXQtcmFkaW8tY29sb3IoJHBhbGV0dGUpIHtcbiAgJi5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUpO1xuICB9XG5cbiAgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsXG4gIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUpLFxuICAmLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsXG4gICY6YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1yYWRpby10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1yYWRpby1vdXRlci1jaXJjbGUge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LXJhZGlvLWJ1dHRvbiB7XG4gICAgJi5tYXQtcHJpbWFyeSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXJhZGlvLWNvbG9yKCRwcmltYXJ5KTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgQGluY2x1ZGUgX21hdC1yYWRpby1jb2xvcigkYWNjZW50KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtcmFkaW8tY29sb3IoJHdhcm4pO1xuICAgIH1cblxuICAgIC8vIFRoaXMgbmVlZHMgZXh0cmEgc3BlY2lmaWNpdHksIGJlY2F1c2UgdGhlIGNsYXNzZXMgYWJvdmUgYXJlIGNvbWJpbmVkXG4gICAgLy8gKGUuZy4gYC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnRgKSB3aGljaCBpbmNyZWFzZXMgdGhlaXIgc3BlY2lmaWNpdHkgYSBsb3QuXG4gICAgLy8gVE9ETzogY29uc2lkZXIgbWFraW5nIHRoZSBzZWxlY3RvcnMgaW50byBkZXNjZW5kYW50cyAoYC5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLWJ1dHRvbmApLlxuICAgICYubWF0LXJhZGlvLWRpc2FibGVkIHtcbiAgICAgICYubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGUsXG4gICAgICAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZCk7XG4gICAgICB9XG5cbiAgICAgIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQsXG4gICAgICAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQpO1xuICAgICAgfVxuXG4gICAgICAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnQge1xuICAgICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3dpdGNoIHRoaXMgdG8gYSBzb2xpZCBjb2xvciBzaW5jZSB3ZSdyZSB1c2luZyBgb3BhY2l0eWBcbiAgICAvLyB0byBjb250cm9sIGhvdyBvcGFxdWUgdGhlIHJpcHBsZSBzaG91bGQgYmUuXG4gICAgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXBfZ2V0KCRmb3JlZ3JvdW5kLCBiYXNlKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1yYWRpby10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1yYWRpby1idXR0b24ge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cbn1cblxuXG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LXNlbGVjdC10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG5cbiAgLm1hdC1zZWxlY3QtdmFsdWUge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG5cbiAgLm1hdC1zZWxlY3QtcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiBfbWF0LWNvbnRyb2wtcGxhY2Vob2xkZXItY29sb3IoJHRoZW1lKTtcbiAgfVxuXG4gIC5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LXZhbHVlIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LXNlbGVjdC1wYW5lbCB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbig0LCAkdGhlbWUpO1xuXG4gICAgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSkge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3ZlciwgMC4xMik7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkIHtcbiAgICAmLm1hdC1mb2N1c2VkIHtcbiAgICAgICYubWF0LXByaW1hcnkgLm1hdC1zZWxlY3QtYXJyb3cge1xuICAgICAgICBjb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCB0ZXh0KTtcbiAgICAgIH1cblxuICAgICAgJi5tYXQtYWNjZW50IC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICAgICAgY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCB0ZXh0KTtcbiAgICAgIH1cblxuICAgICAgJi5tYXQtd2FybiAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtaW52YWxpZCAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgICB9XG5cbiAgICAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNlbGVjdC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLy8gVGhlIHVuaXQtbGVzcyBsaW5lLWhlaWdodCBmcm9tIHRoZSBmb250IGNvbmZpZy5cbiAgJGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgaW5wdXQpO1xuXG4gIC5tYXQtc2VsZWN0IHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC1zZWxlY3QtdHJpZ2dlciB7XG4gICAgaGVpZ2h0OiAkbGluZS1oZWlnaHQgKiAxZW07XG4gIH1cbn1cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtc2lkZW5hdi10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgJGRyYXdlci1iYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGRpYWxvZyk7XG4gICRkcmF3ZXItY29udGFpbmVyLWJhY2tncm91bmQtY29sb3I6ICBtYXQtY29sb3IoJGJhY2tncm91bmQsIGJhY2tncm91bmQpO1xuICAkZHJhd2VyLXB1c2gtYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBkaWFsb2cpO1xuICAkZHJhd2VyLXNpZGUtYm9yZGVyOiBzb2xpZCAxcHggbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcblxuICAubWF0LWRyYXdlci1jb250YWluZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRkcmF3ZXItY29udGFpbmVyLWJhY2tncm91bmQtY29sb3I7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cblxuICAubWF0LWRyYXdlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGRyYXdlci1iYWNrZ3JvdW5kLWNvbG9yO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gICAgJi5tYXQtZHJhd2VyLXB1c2gge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGRyYXdlci1wdXNoLWJhY2tncm91bmQtY29sb3I7XG4gICAgfVxuXG4gICAgJjpub3QoLm1hdC1kcmF3ZXItc2lkZSkge1xuICAgICAgLy8gVGhlIGVsZXZhdGlvbiBvZiB6LTE2IGlzIG5vdGVkIGluIHRoZSBkZXNpZ24gc3BlY2lmaWNhdGlvbnMuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9tYXRlcmlhbC5pby9kZXNpZ24vY29tcG9uZW50cy9uYXZpZ2F0aW9uLWRyYXdlci5odG1sXG4gICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigxNiwgJHRoZW1lKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWRyYXdlci1zaWRlIHtcbiAgICBib3JkZXItcmlnaHQ6ICRkcmF3ZXItc2lkZS1ib3JkZXI7XG5cbiAgICAmLm1hdC1kcmF3ZXItZW5kIHtcbiAgICAgIGJvcmRlci1sZWZ0OiAkZHJhd2VyLXNpZGUtYm9yZGVyO1xuICAgICAgYm9yZGVyLXJpZ2h0OiBub25lO1xuICAgIH1cbiAgfVxuXG4gIFtkaXI9J3J0bCddIC5tYXQtZHJhd2VyLXNpZGUge1xuICAgIGJvcmRlci1sZWZ0OiAkZHJhd2VyLXNpZGUtYm9yZGVyO1xuICAgIGJvcmRlci1yaWdodDogbm9uZTtcblxuICAgICYubWF0LWRyYXdlci1lbmQge1xuICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gICAgICBib3JkZXItcmlnaHQ6ICRkcmF3ZXItc2lkZS1ib3JkZXI7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1kcmF3ZXItYmFja2Ryb3AubWF0LWRyYXdlci1zaG93biB7XG4gICAgJG9wYWNpdHk6IDAuNjtcbiAgICAkYmFja2Ryb3AtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCwgJG9wYWNpdHkpO1xuXG4gICAgQGlmICh0eXBlLW9mKCRiYWNrZHJvcC1jb2xvcikgPT0gY29sb3IpIHtcbiAgICAgIC8vIFdlIHVzZSBpbnZlcnQoKSBoZXJlIHRvIGhhdmUgdGhlIGRhcmtlbiB0aGUgYmFja2dyb3VuZCBjb2xvciBleHBlY3RlZCB0byBiZSB1c2VkLiBJZiB0aGVcbiAgICAgIC8vIGJhY2tncm91bmQgaXMgbGlnaHQsIHdlIHVzZSBhIGRhcmsgYmFja2Ryb3AuIElmIHRoZSBiYWNrZ3JvdW5kIGlzIGRhcmssXG4gICAgICAvLyB3ZSB1c2UgYSBsaWdodCBiYWNrZHJvcC5cbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGludmVydCgkYmFja2Ryb3AtY29sb3IpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICAvLyBJZiB3ZSBjb3VsZG4ndCByZXNvbHZlIHRoZSBiYWNrZHJvcCBjb2xvciB0byBhIGNvbG9yIHZhbHVlLCBmYWxsIGJhY2sgdG8gdXNpbmdcbiAgICAgIC8vIGBvcGFjaXR5YCB0byBtYWtlIGl0IG9wYXF1ZSBzaW5jZSBpdHMgZW5kIHZhbHVlIGNvdWxkIGJlIGEgc29saWQgY29sb3IuXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2Ryb3AtY29sb3I7XG4gICAgICBvcGFjaXR5OiAkb3BhY2l0eTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1zaWRlbmF2LXR5cG9ncmFwaHkoJGNvbmZpZykgeyB9XG5cblxuXG5cblxuXG5AbWl4aW4gX21hdC1zbGlkZS10b2dnbGUtY2hlY2tlZCgkcGFsZXR0ZSwgJHRodW1iLWNoZWNrZWQtaHVlKSB7XG4gICYubWF0LWNoZWNrZWQge1xuICAgIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgJHRodW1iLWNoZWNrZWQtaHVlKTtcbiAgICB9XG5cbiAgICAubWF0LXNsaWRlLXRvZ2dsZS1iYXIge1xuICAgICAgLy8gT3BhY2l0eSBpcyBkZXRlcm1pbmVkIGZyb20gdGhlIHNwZWNzIGZvciB0aGUgc2VsZWN0aW9uIGNvbnRyb2xzLlxuICAgICAgLy8gU2VlOiBodHRwczovL21hdGVyaWFsLmlvL2Rlc2lnbi9jb21wb25lbnRzL3NlbGVjdGlvbi1jb250cm9scy5odG1sI3NwZWNzXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsICR0aHVtYi1jaGVja2VkLWh1ZSwgMC41NCk7XG4gICAgfVxuXG4gICAgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgICAvLyBTZXQgbm8gb3BhY2l0eSBmb3IgdGhlIHJpcHBsZXMgYmVjYXVzZSB0aGUgcmlwcGxlIG9wYWNpdHkgd2lsbCBiZSBhZGp1c3RlZCBkeW5hbWljYWxseVxuICAgICAgLy8gYmFzZWQgb24gdGhlIHR5cGUgb2YgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc2xpZGUtdG9nZ2xlIChlLmcuIGZvciBob3ZlciwgZm9jdXMpXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsICR0aHVtYi1jaGVja2VkLWh1ZSk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtc2xpZGUtdG9nZ2xlLXRoZW1lKCR0aGVtZSkge1xuICAkaXMtZGFyazogbWFwX2dldCgkdGhlbWUsIGlzLWRhcmspO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAvLyBDb2xvciBodWVzIGFyZSBiYXNlZCBvbiB0aGUgc3BlY3Mgd2hpY2ggYnJpZWZseSBzaG93IHRoZSBodWVzIHRoYXQgYXJlIGFwcGxpZWQgdG8gYSBzd2l0Y2guXG4gIC8vIFRoZSAyMDE4IHNwZWNzIG5vIGxvbmdlciBkZXNjcmliZSBob3cgZGFyayBzd2l0Y2hlcyBzaG91bGQgbG9vayBsaWtlLiBEdWUgdG8gdGhlIGxhY2sgb2ZcbiAgLy8gaW5mb3JtYXRpb24gZm9yIGRhcmsgdGhlbWVkIHN3aXRjaGVzLCB3ZSBwYXJ0aWFsbHkga2VlcCB0aGUgb2xkIGJlaGF2aW9yIHRoYXQgaXMgYmFzZWQgb25cbiAgLy8gdGhlIHByZXZpb3VzIHNwZWNpZmljYXRpb25zLiBGb3IgdGhlIGNoZWNrZWQgY29sb3Igd2UgYWx3YXlzIHVzZSB0aGUgYGRlZmF1bHRgIGh1ZSBiZWNhdXNlXG4gIC8vIHRoYXQgZm9sbG93cyBNREMgYW5kIGFsc28gbWFrZXMgaXQgZWFzaWVyIGZvciBwZW9wbGUgdG8gY3JlYXRlIGEgY3VzdG9tIHRoZW1lIHdpdGhvdXQgbmVlZGluZ1xuICAvLyB0byBzcGVjaWZ5IGVhY2ggaHVlIGluZGl2aWR1YWxseS5cbiAgJHRodW1iLXVuY2hlY2tlZC1odWU6IGlmKCRpcy1kYXJrLCA0MDAsIDUwKTtcbiAgJHRodW1iLWNoZWNrZWQtaHVlOiBkZWZhdWx0O1xuXG4gICRiYXItdW5jaGVja2VkLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkKTtcbiAgJHJpcHBsZS11bmNoZWNrZWQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgYmFzZSk7XG5cbiAgLm1hdC1zbGlkZS10b2dnbGUge1xuICAgIEBpbmNsdWRlIF9tYXQtc2xpZGUtdG9nZ2xlLWNoZWNrZWQoJGFjY2VudCwgJHRodW1iLWNoZWNrZWQtaHVlKTtcblxuICAgICYubWF0LXByaW1hcnkge1xuICAgICAgQGluY2x1ZGUgX21hdC1zbGlkZS10b2dnbGUtY2hlY2tlZCgkcHJpbWFyeSwgJHRodW1iLWNoZWNrZWQtaHVlKTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtc2xpZGUtdG9nZ2xlLWNoZWNrZWQoJHdhcm4sICR0aHVtYi1jaGVja2VkLWh1ZSk7XG4gICAgfVxuXG4gICAgJjpub3QoLm1hdC1jaGVja2VkKSAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAgIC8vIFNldCBubyBvcGFjaXR5IGZvciB0aGUgcmlwcGxlcyBiZWNhdXNlIHRoZSByaXBwbGUgb3BhY2l0eSB3aWxsIGJlIGFkanVzdGVkIGR5bmFtaWNhbGx5XG4gICAgICAvLyBiYXNlZCBvbiB0aGUgdHlwZSBvZiBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzbGlkZS10b2dnbGUgKGUuZy4gZm9yIGhvdmVyLCBmb2N1cylcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRyaXBwbGUtdW5jaGVja2VkLWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigxLCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkbWF0LWdyZXksICR0aHVtYi11bmNoZWNrZWQtaHVlKTtcbiAgfVxuXG4gIC5tYXQtc2xpZGUtdG9nZ2xlLWJhciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGJhci11bmNoZWNrZWQtY29sb3I7XG4gIH1cbn1cblxuQG1peGluIG1hdC1zbGlkZS10b2dnbGUtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnQge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gX21hdC1zbGlkZXItaW5uZXItY29udGVudC10aGVtZSgkcGFsZXR0ZSkge1xuICAubWF0LXNsaWRlci10cmFjay1maWxsLFxuICAubWF0LXNsaWRlci10aHVtYixcbiAgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSk7XG4gIH1cblxuICAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0IHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNsaWRlci10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgJG1hdC1zbGlkZXItb2ZmLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNsaWRlci1vZmYpO1xuICAkbWF0LXNsaWRlci1vZmYtZm9jdXNlZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzbGlkZXItb2ZmLWFjdGl2ZSk7XG4gICRtYXQtc2xpZGVyLWRpc2FibGVkLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNsaWRlci1vZmYpO1xuICAkbWF0LXNsaWRlci1sYWJlbGVkLW1pbi12YWx1ZS10aHVtYi1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzbGlkZXItbWluKTtcbiAgJG1hdC1zbGlkZXItbGFiZWxlZC1taW4tdmFsdWUtdGh1bWItbGFiZWwtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2xpZGVyLW9mZik7XG4gICRtYXQtc2xpZGVyLXRpY2stb3BhY2l0eTogMC43O1xuICAkbWF0LXNsaWRlci10aWNrLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGJhc2UsICRtYXQtc2xpZGVyLXRpY2stb3BhY2l0eSk7XG4gICRtYXQtc2xpZGVyLXRpY2stc2l6ZTogMnB4O1xuXG4gIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRtYXQtc2xpZGVyLW9mZi1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtcHJpbWFyeSB7XG4gICAgQGluY2x1ZGUgX21hdC1zbGlkZXItaW5uZXItY29udGVudC10aGVtZSgkcHJpbWFyeSk7XG4gIH1cblxuICAubWF0LWFjY2VudCB7XG4gICAgQGluY2x1ZGUgX21hdC1zbGlkZXItaW5uZXItY29udGVudC10aGVtZSgkYWNjZW50KTtcbiAgfVxuXG4gIC5tYXQtd2FybiB7XG4gICAgQGluY2x1ZGUgX21hdC1zbGlkZXItaW5uZXItY29udGVudC10aGVtZSgkd2Fybik7XG4gIH1cblxuICAubWF0LXNsaWRlci1mb2N1cy1yaW5nIHtcbiAgICAkb3BhY2l0eTogMC4yO1xuICAgICRjb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIGRlZmF1bHQsICRvcGFjaXR5KTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3I7XG5cbiAgICAvLyBgbWF0LWNvbG9yYCB1c2VzIGByZ2JhYCBmb3IgdGhlIG9wYWNpdHkgd2hpY2ggd29uJ3Qgd29yayB3aXRoXG4gICAgLy8gQ1NTIHZhcmlhYmxlcyBzbyB3ZSBuZWVkIHRvIHVzZSBgb3BhY2l0eWAgYXMgYSBmYWxsYmFjay5cbiAgICBAaWYgKHR5cGUtb2YoJGNvbG9yKSAhPSBjb2xvcikge1xuICAgICAgb3BhY2l0eTogJG9wYWNpdHk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbGlkZXI6aG92ZXIsXG4gIC5jZGstZm9jdXNlZCB7XG4gICAgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbWF0LXNsaWRlci1vZmYtZm9jdXNlZC1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAubWF0LXNsaWRlci1kaXNhYmxlZCB7XG4gICAgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCxcbiAgICAubWF0LXNsaWRlci10cmFjay1maWxsLFxuICAgIC5tYXQtc2xpZGVyLXRodW1iIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRtYXQtc2xpZGVyLWRpc2FibGVkLWNvbG9yO1xuICAgIH1cblxuICAgICY6aG92ZXIge1xuICAgICAgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRtYXQtc2xpZGVyLWRpc2FibGVkLWNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2xpZGVyLW1pbi12YWx1ZSB7XG4gICAgLm1hdC1zbGlkZXItZm9jdXMtcmluZyB7XG4gICAgICAkb3BhY2l0eTogMC4xMjtcbiAgICAgICRjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBiYXNlLCAkb3BhY2l0eSk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3I7XG5cbiAgICAgIC8vIGBtYXQtY29sb3JgIHVzZXMgYHJnYmFgIGZvciB0aGUgb3BhY2l0eSB3aGljaCB3b24ndCB3b3JrIHdpdGhcbiAgICAgIC8vIENTUyB2YXJpYWJsZXMgc28gd2UgbmVlZCB0byB1c2UgYG9wYWNpdHlgIGFzIGEgZmFsbGJhY2suXG4gICAgICBAaWYgKHR5cGUtb2YoJGNvbG9yKSAhPSBjb2xvcikge1xuICAgICAgICBvcGFjaXR5OiAkb3BhY2l0eTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyB7XG4gICAgICAubWF0LXNsaWRlci10aHVtYixcbiAgICAgIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG1hdC1zbGlkZXItbGFiZWxlZC1taW4tdmFsdWUtdGh1bWItY29sb3I7XG4gICAgICB9XG5cbiAgICAgICYuY2RrLWZvY3VzZWQge1xuICAgICAgICAubWF0LXNsaWRlci10aHVtYixcbiAgICAgICAgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRtYXQtc2xpZGVyLWxhYmVsZWQtbWluLXZhbHVlLXRodW1iLWxhYmVsLWNvbG9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykge1xuICAgICAgLm1hdC1zbGlkZXItdGh1bWIge1xuICAgICAgICBib3JkZXItY29sb3I6ICRtYXQtc2xpZGVyLW9mZi1jb2xvcjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXIsXG4gICAgICAmLmNkay1mb2N1c2VkIHtcbiAgICAgICAgLm1hdC1zbGlkZXItdGh1bWIge1xuICAgICAgICAgIGJvcmRlci1jb2xvcjogJG1hdC1zbGlkZXItb2ZmLWZvY3VzZWQtY29sb3I7XG4gICAgICAgIH1cblxuICAgICAgICAmLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWIge1xuICAgICAgICAgIGJvcmRlci1jb2xvcjogJG1hdC1zbGlkZXItZGlzYWJsZWQtY29sb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubWF0LXNsaWRlci1oYXMtdGlja3MgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXIge1xuICAgIGJvcmRlci1jb2xvcjogJG1hdC1zbGlkZXItdGljay1jb2xvcjtcblxuICAgIC8vIGBtYXQtY29sb3JgIHVzZXMgYHJnYmFgIGZvciB0aGUgb3BhY2l0eSB3aGljaCB3b24ndCB3b3JrIHdpdGhcbiAgICAvLyBDU1MgdmFyaWFibGVzIHNvIHdlIG5lZWQgdG8gdXNlIGBvcGFjaXR5YCBhcyBhIGZhbGxiYWNrLlxuICAgIEBpZiAodHlwZS1vZigkbWF0LXNsaWRlci10aWNrLWNvbG9yKSAhPSBjb2xvcikge1xuICAgICAgb3BhY2l0eTogJG1hdC1zbGlkZXItdGljay1vcGFjaXR5O1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGlja3Mge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICRtYXQtc2xpZGVyLXRpY2stY29sb3IsXG4gICAgICAgICRtYXQtc2xpZGVyLXRpY2stY29sb3IgJG1hdC1zbGlkZXItdGljay1zaXplLCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCk7XG4gICAgLy8gRmlyZWZveCBkb2Vzbid0IGRyYXcgdGhlIGdyYWRpZW50IGNvcnJlY3RseSB3aXRoICd0byByaWdodCdcbiAgICAvLyAoc2VlIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTQzMTkpLlxuICAgIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgwLjAwMDFkZWcsICRtYXQtc2xpZGVyLXRpY2stY29sb3IsXG4gICAgICAgICRtYXQtc2xpZGVyLXRpY2stY29sb3IgJG1hdC1zbGlkZXItdGljay1zaXplLCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCk7XG5cbiAgICAvLyBgbWF0LWNvbG9yYCB1c2VzIGByZ2JhYCBmb3IgdGhlIG9wYWNpdHkgd2hpY2ggd29uJ3Qgd29yayB3aXRoXG4gICAgLy8gQ1NTIHZhcmlhYmxlcyBzbyB3ZSBuZWVkIHRvIHVzZSBgb3BhY2l0eWAgYXMgYSBmYWxsYmFjay5cbiAgICBAaWYgKHR5cGUtb2YoJG1hdC1zbGlkZXItdGljay1jb2xvcikgIT0gY29sb3IpIHtcbiAgICAgIG9wYWNpdHk6ICRtYXQtc2xpZGVyLXRpY2stb3BhY2l0eTtcbiAgICB9XG4gIH1cblxuICAubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrcyB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICRtYXQtc2xpZGVyLXRpY2stY29sb3IsXG4gICAgICAgICRtYXQtc2xpZGVyLXRpY2stY29sb3IgJG1hdC1zbGlkZXItdGljay1zaXplLCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCk7XG5cbiAgICAvLyBgbWF0LWNvbG9yYCB1c2VzIGByZ2JhYCBmb3IgdGhlIG9wYWNpdHkgd2hpY2ggd29uJ3Qgd29yayB3aXRoXG4gICAgLy8gQ1NTIHZhcmlhYmxlcyBzbyB3ZSBuZWVkIHRvIHVzZSBgb3BhY2l0eWAgYXMgYSBmYWxsYmFjay5cbiAgICBAaWYgKHR5cGUtb2YoJG1hdC1zbGlkZXItdGljay1jb2xvcikgIT0gY29sb3IpIHtcbiAgICAgIG9wYWNpdHk6ICRtYXQtc2xpZGVyLXRpY2stb3BhY2l0eTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1zbGlkZXItdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHQge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMik7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuQG1peGluIG1hdC1zdGVwcGVyLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuXG4gIC5tYXQtc3RlcC1oZWFkZXIge1xuICAgICYuY2RrLWtleWJvYXJkLWZvY3VzZWQsXG4gICAgJi5jZGstcHJvZ3JhbS1mb2N1c2VkLFxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3Zlcik7XG4gICAgfVxuXG4gICAgLy8gT24gdG91Y2ggZGV2aWNlcyB0aGUgOmhvdmVyIHN0YXRlIHdpbGwgbGluZ2VyIG9uIHRoZSBlbGVtZW50IGFmdGVyIGEgdGFwLlxuICAgIC8vIFJlc2V0IGl0IHZpYSBgQG1lZGlhYCBhZnRlciB0aGUgZGVjbGFyYXRpb24sIGJlY2F1c2UgdGhlIG1lZGlhIHF1ZXJ5IGlzbid0XG4gICAgLy8gc3VwcG9ydGVkIGJ5IGFsbCBicm93c2VycyB5ZXQuXG4gICAgQG1lZGlhIChob3Zlcjogbm9uZSkge1xuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLm1hdC1zdGVwLWxhYmVsLFxuICAgIC5tYXQtc3RlcC1vcHRpb25hbCB7XG4gICAgICAvLyBUT0RPKGpvc2VwaHBlcnJvdHQpOiBVcGRhdGUgdG8gdXNpbmcgYSBjb3JyZWN0ZWQgZGlzYWJsZWQtdGV4dCBjb250cmFzdFxuICAgICAgLy8gaW5zdGVhZCBvZiBzZWNvbmRhcnktdGV4dC5cbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgICB9XG5cbiAgICAubWF0LXN0ZXAtaWNvbiB7XG4gICAgICAvLyBUT0RPKGpvc2VwaHBlcnJvdHQpOiBVcGRhdGUgdG8gdXNpbmcgYSBjb3JyZWN0ZWQgZGlzYWJsZWQtdGV4dCBjb250cmFzdFxuICAgICAgLy8gaW5zdGVhZCBvZiBzZWNvbmRhcnktdGV4dC5cbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgZGVmYXVsdC1jb250cmFzdCk7XG4gICAgfVxuXG4gICAgLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsXG4gICAgLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSxcbiAgICAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgICB9XG5cbiAgICAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lcnJvciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICAgIH1cblxuICAgIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1hY3RpdmUge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgfVxuXG4gICAgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWVycm9yIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLCAubWF0LXN0ZXBwZXItdmVydGljYWwge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gIH1cblxuICAubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3JlIHtcbiAgICBib3JkZXItbGVmdC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxuXG4gIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3JlLFxuICAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLFxuICAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5lIHtcbiAgICBib3JkZXItdG9wLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtc3RlcHBlci10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1zdGVwcGVyLXZlcnRpY2FsLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbCB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtc3RlcC1sYWJlbCB7XG4gICAgZm9udDoge1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0xKTtcbiAgICB9O1xuICB9XG5cbiAgLm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvciB7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgfVxuXG4gIC5tYXQtc3RlcC1sYWJlbC1lcnJvciB7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMik7XG4gIH1cblxuICAubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWQge1xuICAgIGZvbnQ6IHtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0yKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMik7XG4gICAgfTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNvcnQtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1zb3J0LWhlYWRlci1hcnJvdyB7XG4gICAgJHRhYmxlLWJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2NhcmQnKTtcbiAgICAkdGV4dC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG5cbiAgICAvLyBCZWNhdXNlIHRoZSBhcnJvdyBpcyBtYWRlIHVwIG9mIG11bHRpcGxlIGVsZW1lbnRzIHRoYXQgYXJlIHN0YWNrZWQgb24gdG9wIG9mIGVhY2ggb3RoZXIsXG4gICAgLy8gd2UgY2FuJ3QgdXNlIHRoZSBzZW1pLXRyYXNwYXJlbnQgY29sb3IgZnJvbSB0aGUgdGhlbWUgZGlyZWN0bHkuIElmIHRoZSB2YWx1ZSBpcyBhIGNvbG9yXG4gICAgLy8gKnR5cGUqLCB3ZSBjb252ZXJ0IGl0IGludG8gYSBzb2xpZCBjb2xvciBieSB0YWtpbmcgdGhlIG9wYWNpdHkgZnJvbSB0aGUgcmdiYSB2YWx1ZSBhbmRcbiAgICAvLyB1c2luZyB0aGUgdmFsdWUgdG8gZGV0ZXJtaW5lIHRoZSBwZXJjZW50YWdlIG9mIHRoZSBiYWNrZ3JvdW5kIHRvIHB1dCBpbnRvIGZvcmVncm91bmRcbiAgICAvLyB3aGVuIG1peGluZyB0aGUgY29sb3JzIHRvZ2V0aGVyLiBPdGhlcndpc2UsIGlmIGl0IHJlc29sdmVzIHRvIHNvbWV0aGluZyBkaWZmZXJlbnRcbiAgICAvLyAoZS5nLiBpdCByZXNvbHZlcyB0byBhIENTUyB2YXJpYWJsZSksIHdlIHVzZSB0aGUgY29sb3IgZGlyZWN0bHkuXG4gICAgQGlmICh0eXBlLW9mKCR0YWJsZS1iYWNrZ3JvdW5kKSA9PSBjb2xvciBhbmQgdHlwZS1vZigkdGV4dC1jb2xvcikgPT0gY29sb3IpIHtcbiAgICAgICR0ZXh0LW9wYWNpdHk6IG9wYWNpdHkoJHRleHQtY29sb3IpO1xuICAgICAgY29sb3I6IG1peCgkdGFibGUtYmFja2dyb3VuZCwgcmdiYSgkdGV4dC1jb2xvciwgMSksICgxIC0gJHRleHQtb3BhY2l0eSkgKiAxMDAlKTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgY29sb3I6ICR0ZXh0LWNvbG9yO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNvcnQtdHlwb2dyYXBoeSgkY29uZmlnKSB7IH1cblxuXG5cblxuXG5AbWl4aW4gbWF0LXRhYnMtdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkaGVhZGVyLWJvcmRlcjogMXB4IHNvbGlkIG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG5cbiAgLm1hdC10YWItbmF2LWJhcixcbiAgLm1hdC10YWItaGVhZGVyIHtcbiAgICBib3JkZXItYm90dG9tOiAkaGVhZGVyLWJvcmRlcjtcbiAgfVxuXG4gIC5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciB7XG4gICAgLm1hdC10YWItbmF2LWJhcixcbiAgICAubWF0LXRhYi1oZWFkZXIge1xuICAgICAgYm9yZGVyLXRvcDogJGhlYWRlci1ib3JkZXI7XG4gICAgICBib3JkZXItYm90dG9tOiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtdGFiLWxhYmVsLCAubWF0LXRhYi1saW5rIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAgICYubWF0LXRhYi1kaXNhYmxlZCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgICB9XG4gIH1cblxuICAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cblxuICAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gIH1cblxuICAvLyBSZW1vdmUgaGVhZGVyIGJvcmRlciB3aGVuIHRoZXJlIGlzIGEgYmFja2dyb3VuZCBjb2xvclxuICAubWF0LXRhYi1ncm91cFtjbGFzcyo9J21hdC1iYWNrZ3JvdW5kLSddIC5tYXQtdGFiLWhlYWRlcixcbiAgLm1hdC10YWItbmF2LWJhcltjbGFzcyo9J21hdC1iYWNrZ3JvdW5kLSddIHtcbiAgICBib3JkZXItYm90dG9tOiBub25lO1xuICAgIGJvcmRlci10b3A6IG5vbmU7XG4gIH1cblxuICAubWF0LXRhYi1ncm91cCwgLm1hdC10YWItbmF2LWJhciB7XG4gICAgJHRoZW1lLWNvbG9yczogKFxuICAgICAgcHJpbWFyeTogJHByaW1hcnksXG4gICAgICBhY2NlbnQ6ICRhY2NlbnQsXG4gICAgICB3YXJuOiAkd2FyblxuICAgICk7XG5cbiAgICBAZWFjaCAkbmFtZSwgJGNvbG9yIGluICR0aGVtZS1jb2xvcnMge1xuICAgICAgLy8gU2V0IHRoZSBmb3JlZ3JvdW5kIGNvbG9yIG9mIHRoZSB0YWJzXG4gICAgICAmLm1hdC0jeyRuYW1lfSB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtdGFiLWxhYmVsLWZvY3VzKCRjb2xvcik7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtaW5rLWJhcigkY29sb3IpO1xuXG4gICAgICAgIC8vIE92ZXJyaWRlIGluayBiYXIgd2hlbiBiYWNrZ3JvdW5kIGNvbG9yIGlzIHRoZSBzYW1lXG4gICAgICAgICYubWF0LWJhY2tncm91bmQtI3skbmFtZX0ge1xuICAgICAgICAgIEBpbmNsdWRlIF9tYXQtaW5rLWJhcigkY29sb3IsIGRlZmF1bHQtY29udHJhc3QpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGVhY2ggJG5hbWUsICRjb2xvciBpbiAkdGhlbWUtY29sb3JzIHtcbiAgICAgIC8vIFNldCBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSB0YWJzIGFuZCBvdmVycmlkZSBmb2N1cyBjb2xvclxuICAgICAgJi5tYXQtYmFja2dyb3VuZC0jeyRuYW1lfSB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtdGFiLWxhYmVsLWZvY3VzKCRjb2xvcik7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtdGFicy1iYWNrZ3JvdW5kKCRjb2xvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBfbWF0LWluay1iYXIoJGNvbG9yLCAkaHVlOiBkZWZhdWx0KSB7XG4gIC5tYXQtaW5rLWJhciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRjb2xvciwgJGh1ZSk7XG4gIH1cbn1cblxuQG1peGluIF9tYXQtdGFiLWxhYmVsLWZvY3VzKCR0YWItZm9jdXMtY29sb3IpIHtcbiAgLm1hdC10YWItbGFiZWwsXG4gIC5tYXQtdGFiLWxpbmsge1xuICAgICYuY2RrLWtleWJvYXJkLWZvY3VzZWQsXG4gICAgJi5jZGstcHJvZ3JhbS1mb2N1c2VkIHtcbiAgICAgICY6bm90KC5tYXQtdGFiLWRpc2FibGVkKSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkdGFiLWZvY3VzLWNvbG9yLCBsaWdodGVyLCAwLjMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gX21hdC10YWJzLWJhY2tncm91bmQoJGJhY2tncm91bmQtY29sb3IpIHtcbiAgLy8gU2V0IGJhY2tncm91bmQgY29sb3IgZm9yIHRoZSB0YWIgZ3JvdXBcbiAgLm1hdC10YWItaGVhZGVyLCAubWF0LXRhYi1saW5rcywgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24ge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZC1jb2xvcik7XG4gIH1cblxuICAvLyBTZXQgbGFiZWxzIHRvIGNvbnRyYXN0IGFnYWluc3QgYmFja2dyb3VuZFxuICAubWF0LXRhYi1sYWJlbCwgLm1hdC10YWItbGluayB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZC1jb2xvciwgZGVmYXVsdC1jb250cmFzdCk7XG5cbiAgICAmLm1hdC10YWItZGlzYWJsZWQge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZC1jb2xvciwgZGVmYXVsdC1jb250cmFzdCwgMC40KTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXQgcGFnaW5hdGlvbiBjaGV2cm9ucyB0byBjb250cmFzdCBiYWNrZ3JvdW5kXG4gIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24ge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLWNvbG9yLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgfVxuXG4gIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24ge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLWNvbG9yLCBkZWZhdWx0LWNvbnRyYXN0LCAwLjQpO1xuICB9XG5cbiAgLy8gU2V0IHJpcHBsZXMgY29sb3IgdG8gYmUgdGhlIGNvbnRyYXN0IGNvbG9yIG9mIHRoZSBuZXcgYmFja2dyb3VuZC4gT3RoZXJ3aXNlIHRoZSByaXBwbGVcbiAgLy8gY29sb3Igd2lsbCBiZSBiYXNlZCBvbiB0aGUgYXBwIGJhY2tncm91bmQgY29sb3IuXG4gIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZC1jb2xvciwgZGVmYXVsdC1jb250cmFzdCwgMC4xMik7XG4gIH1cbn1cblxuQG1peGluIG1hdC10YWJzLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXRhYi1ncm91cCB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtdGFiLWxhYmVsLCAubWF0LXRhYi1saW5rIHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBidXR0b24pO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBidXR0b24pO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYnV0dG9uKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cbkBtaXhpbiBfbWF0LXRvb2xiYXItY29sb3IoJHBhbGV0dGUpIHtcbiAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRwYWxldHRlKTtcbiAgY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgZGVmYXVsdC1jb250cmFzdCk7XG59XG5cbkBtaXhpbiBfbWF0LXRvb2xiYXItZm9ybS1maWVsZC1vdmVycmlkZXMge1xuICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lLFxuICAubWF0LWZvcm0tZmllbGQtcmlwcGxlLFxuICAubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLFxuICAubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLFxuICAubWF0LXNlbGVjdC12YWx1ZSxcbiAgLm1hdC1zZWxlY3QtYXJyb3csXG4gIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgY29sb3I6IGluaGVyaXQ7XG4gIH1cblxuICAubWF0LWlucHV0LWVsZW1lbnQge1xuICAgIGNhcmV0LWNvbG9yOiBjdXJyZW50Q29sb3I7XG4gIH1cbn1cblxuQG1peGluIG1hdC10b29sYmFyLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LXRvb2xiYXIge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgYXBwLWJhcik7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgICAmLm1hdC1wcmltYXJ5IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdG9vbGJhci1jb2xvcigkcHJpbWFyeSk7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdG9vbGJhci1jb2xvcigkYWNjZW50KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdG9vbGJhci1jb2xvcigkd2Fybik7XG4gICAgfVxuXG4gICAgQGluY2x1ZGUgX21hdC10b29sYmFyLWZvcm0tZmllbGQtb3ZlcnJpZGVzO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtdG9vbGJhci10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC10b29sYmFyLFxuICAubWF0LXRvb2xiYXIgaDEsXG4gIC5tYXQtdG9vbGJhciBoMixcbiAgLm1hdC10b29sYmFyIGgzLFxuICAubWF0LXRvb2xiYXIgaDQsXG4gIC5tYXQtdG9vbGJhciBoNSxcbiAgLm1hdC10b29sYmFyIGg2IHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgdGl0bGUpO1xuICAgIG1hcmdpbjogMDtcbiAgfVxufVxuXG5cblxuXG5cbiRtYXQtdG9vbHRpcC10YXJnZXQtaGVpZ2h0OiAyMnB4O1xuJG1hdC10b29sdGlwLWZvbnQtc2l6ZTogMTBweDtcbiRtYXQtdG9vbHRpcC12ZXJ0aWNhbC1wYWRkaW5nOiAoJG1hdC10b29sdGlwLXRhcmdldC1oZWlnaHQgLSAkbWF0LXRvb2x0aXAtZm9udC1zaXplKSAvIDI7XG5cbiRtYXQtdG9vbHRpcC1oYW5kc2V0LXRhcmdldC1oZWlnaHQ6IDMwcHg7XG4kbWF0LXRvb2x0aXAtaGFuZHNldC1mb250LXNpemU6IDE0cHg7XG4kbWF0LXRvb2x0aXAtaGFuZHNldC12ZXJ0aWNhbC1wYWRkaW5nOlxuICAgICgkbWF0LXRvb2x0aXAtaGFuZHNldC10YXJnZXQtaGVpZ2h0IC0gJG1hdC10b29sdGlwLWhhbmRzZXQtZm9udC1zaXplKSAvIDI7XG5cbkBtaXhpbiBtYXQtdG9vbHRpcC10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcblxuICAubWF0LXRvb2x0aXAge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgdG9vbHRpcCwgMC45KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXRvb2x0aXAtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtdG9vbHRpcCB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgICBmb250LXNpemU6ICRtYXQtdG9vbHRpcC1mb250LXNpemU7XG4gICAgcGFkZGluZy10b3A6ICRtYXQtdG9vbHRpcC12ZXJ0aWNhbC1wYWRkaW5nO1xuICAgIHBhZGRpbmctYm90dG9tOiAkbWF0LXRvb2x0aXAtdmVydGljYWwtcGFkZGluZztcbiAgfVxuXG4gIC5tYXQtdG9vbHRpcC1oYW5kc2V0IHtcbiAgICBmb250LXNpemU6ICRtYXQtdG9vbHRpcC1oYW5kc2V0LWZvbnQtc2l6ZTtcbiAgICBwYWRkaW5nLXRvcDogJG1hdC10b29sdGlwLWhhbmRzZXQtdmVydGljYWwtcGFkZGluZztcbiAgICBwYWRkaW5nLWJvdHRvbTogJG1hdC10b29sdGlwLWhhbmRzZXQtdmVydGljYWwtcGFkZGluZztcbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtc25hY2stYmFyLXRoZW1lKCR0aGVtZSkge1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcblxuICAubWF0LXNuYWNrLWJhci1jb250YWluZXIge1xuICAgIC8vIFVzZSB0aGUgcHJpbWFyeSB0ZXh0IG9uIHRoZSBkYXJrIHRoZW1lLCBldmVuIHRob3VnaCB0aGUgbGlnaHRlciBvbmUgdXNlc1xuICAgIC8vIGEgc2Vjb25kYXJ5LCBiZWNhdXNlIHRoZSBjb250cmFzdCBvbiB0aGUgbGlnaHQgcHJpbWFyeSB0ZXh0IGlzIHBvb3IuXG4gICAgY29sb3I6IGlmKCRpcy1kYXJrLXRoZW1lLCAkZGFyay1wcmltYXJ5LXRleHQsICRsaWdodC1zZWNvbmRhcnktdGV4dCk7XG4gICAgYmFja2dyb3VuZDogaWYoJGlzLWRhcmstdGhlbWUsIG1hcC1nZXQoJG1hdC1ncmV5LCA1MCksICMzMjMyMzIpO1xuXG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oNiwgJHRoZW1lKTtcbiAgfVxuXG4gIC5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbiB7XG4gICAgY29sb3I6IGlmKCRpcy1kYXJrLXRoZW1lLCBpbmhlcml0LCBtYXQtY29sb3IoJGFjY2VudCwgdGV4dCkpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtc25hY2stYmFyLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXNpbXBsZS1zbmFja2JhciB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgYm9keS0xKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKTtcbiAgICB9XG4gIH1cblxuICAubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb24ge1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogaW5oZXJpdDtcbiAgICAgIHNpemU6IGluaGVyaXQ7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBidXR0b24pO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8vIFRoZW1lIHN0eWxlcyB0aGF0IG9ubHkgYXBwbHkgdG8gdGhlIGZpbGwgYXBwZWFyYW5jZSBvZiB0aGUgZm9ybS1maWVsZC5cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLWZpbGwtdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG5cbiAgJGZpbGwtYmFja2dyb3VuZDogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBiYXNlLCBpZigkaXMtZGFyay10aGVtZSwgMC4xLCAwLjA0KSk7XG4gICRmaWxsLWRpc2FibGVkLWJhY2tncm91bmQ6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgYmFzZSwgaWYoJGlzLWRhcmstdGhlbWUsIDAuMDUsIDAuMDIpKTtcbiAgJHVuZGVybGluZS1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyLCBpZigkaXMtZGFyay10aGVtZSwgMC41LCAwLjQyKSk7XG4gICRsYWJlbC1kaXNhYmxlZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcblxuICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIHtcbiAgICAubWF0LWZvcm0tZmllbGQtZmxleCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZmlsbC1iYWNrZ3JvdW5kO1xuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWZsZXgge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGZpbGwtZGlzYWJsZWQtYmFja2dyb3VuZDtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1jb2xvcjtcbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIHtcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIGNvbG9yOiAkbGFiZWwtZGlzYWJsZWQtY29sb3I7XG4gICAgICB9XG5cbiAgICAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBVc2VkIHRvIG1ha2UgaW5zdGFuY2VzIG9mIHRoZSBfbWF0LWZvcm0tZmllbGQtbGFiZWwtZmxvYXRpbmcgbWl4aW4gbmVnbGlnaWJseSBkaWZmZXJlbnQsXG4vLyBhbmQgcHJldmVudCBHb29nbGUncyBDU1MgT3B0aW1pemVyIGZyb20gY29sbGFwc2luZyB0aGUgZGVjbGFyYXRpb25zLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHNvbWVcbi8vIG9mIHRoZSBzZWxlY3RvcnMgY29udGFpbiBwc2V1ZG8tY2xhc3NlcyBub3QgcmVjb2duaXplZCBpbiBhbGwgYnJvd3NlcnMuIElmIGEgYnJvd3NlciBlbmNvdW50ZXJzXG4vLyBhbiB1bmtub3duIHBzZXVkby1jbGFzcyBpdCB3aWxsIGRpc2NhcmQgdGhlIGVudGlyZSBydWxlIHNldC5cbiRtYXQtZm9ybS1maWVsZC1maWxsLWRlZHVwZTogMDtcblxuLy8gQXBwbGllcyBhIGZsb2F0aW5nIGxhYmVsIGFib3ZlIHRoZSBmb3JtIGZpZWxkIGNvbnRyb2wgaXRzZWxmLlxuQG1peGluIF9tYXQtZm9ybS1maWVsZC1maWxsLWxhYmVsLWZsb2F0aW5nKCRmb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kaW5maXgtbWFyZ2luLXRvcCAtICRpbmZpeC1wYWRkaW5nICsgJG1hdC1mb3JtLWZpZWxkLWZpbGwtZGVkdXBlKVxuICAgICAgICAgICAgIHNjYWxlKCRmb250LXNjYWxlKTtcbiAgd2lkdGg6IDEwMCUgLyAkZm9udC1zY2FsZSArICRtYXQtZm9ybS1maWVsZC1maWxsLWRlZHVwZTtcblxuICAkbWF0LWZvcm0tZmllbGQtZmlsbC1kZWR1cGU6ICRtYXQtZm9ybS1maWVsZC1maWxsLWRlZHVwZSArIDAuMDAwMDEgIWdsb2JhbDtcbn1cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLWZpbGwtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC8vIFRoZSB1bml0LWxlc3MgbGluZS1oZWlnaHQgZnJvbSB0aGUgZm9udCBjb25maWcuXG4gICRsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGlucHV0KTtcbiAgLy8gVGhlIGFtb3VudCB0byBzY2FsZSB0aGUgZm9udCBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsIGFuZCBzdWJzY3JpcHQuXG4gICRzdWJzY3JpcHQtZm9udC1zY2FsZTogMC43NTtcbiAgLy8gVGhlIHBhZGRpbmcgb24gdG9wIG9mIHRoZSBpbmZpeC5cbiAgJGluZml4LXBhZGRpbmctdG9wOiAwLjI1ZW07XG4gIC8vIFRoZSBwYWRkaW5nIGJlbG93IHRoZSBpbmZpeC5cbiAgJGluZml4LXBhZGRpbmctYm90dG9tOiAwLjc1ZW07XG4gIC8vIFRoZSBtYXJnaW4gYXBwbGllZCB0byB0aGUgZm9ybS1maWVsZC1pbmZpeCB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgZmxvYXRpbmcgbGFiZWwuXG4gICRpbmZpeC1tYXJnaW4tdG9wOiAxZW0gKiAkbGluZS1oZWlnaHQgKiAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG4gIC8vIFRoZSBhbW91bnQgd2Ugb2Zmc2V0IHRoZSBsYWJlbCBmcm9tIHRoZSBpbnB1dCB0ZXh0IGluIHRoZSBmaWxsIGFwcGVhcmFuY2UuXG4gICRmaWxsLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0OiAtMC41ZW07XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgIHBhZGRpbmc6ICRpbmZpeC1wYWRkaW5nLXRvcCAwICRpbmZpeC1wYWRkaW5nLWJvdHRvbSAwO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICB0b3A6ICRpbmZpeC1tYXJnaW4tdG9wICsgJGluZml4LXBhZGRpbmctdG9wO1xuICAgICAgbWFyZ2luLXRvcDogJGZpbGwtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQ7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQge1xuICAgICAgJi5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLFxuICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtZmlsbC1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLXRvcCArICRmaWxsLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0LFxuICAgICAgICAgICAgICAgICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2VydmVyLXNpZGUgcmVuZGVyZWQgbWF0SW5wdXQgd2l0aCBhIGxhYmVsIGF0dHJpYnV0ZSBidXQgbGFiZWwgbm90IHNob3duXG4gICAgICAvLyAodXNlZCBhcyBhIHB1cmUgQ1NTIHN0YW5kLWluIGZvciBtYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQpLlxuICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1maWxsLWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmctdG9wICsgJGZpbGwtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQsXG4gICAgICAgICAgICAgICAgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuXG4vLyBUaGVtZSBzdHlsZXMgdGhhdCBvbmx5IGFwcGx5IHRvIHRoZSBsZWdhY3kgYXBwZWFyYW5jZSBvZiB0aGUgZm9ybS1maWVsZC5cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcblxuICAkbGFiZWwtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICAkdW5kZXJsaW5lLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjcsIDAuNDIpKTtcblxuICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kge1xuICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICBjb2xvcjogJGxhYmVsLWNvbG9yO1xuICAgIH1cblxuICAgIC5tYXQtaGludCB7XG4gICAgICBjb2xvcjogJGxhYmVsLWNvbG9yO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1jb2xvcjtcbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUge1xuICAgICAgQGluY2x1ZGUgbWF0LWNvbnRyb2wtZGlzYWJsZWQtdW5kZXJsaW5lKCR1bmRlcmxpbmUtY29sb3IpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBVc2VkIHRvIG1ha2UgaW5zdGFuY2VzIG9mIHRoZSBfbWF0LWZvcm0tZmllbGQtbGFiZWwtZmxvYXRpbmcgbWl4aW4gbmVnbGlnaWJseSBkaWZmZXJlbnQsXG4vLyBhbmQgcHJldmVudCBHb29nbGUncyBDU1MgT3B0aW1pemVyIGZyb20gY29sbGFwc2luZyB0aGUgZGVjbGFyYXRpb25zLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHNvbWVcbi8vIG9mIHRoZSBzZWxlY3RvcnMgY29udGFpbiBwc2V1ZG8tY2xhc3NlcyBub3QgcmVjb2duaXplZCBpbiBhbGwgYnJvd3NlcnMuIElmIGEgYnJvd3NlciBlbmNvdW50ZXJzXG4vLyBhbiB1bmtub3duIHBzZXVkby1jbGFzcyBpdCB3aWxsIGRpc2NhcmQgdGhlIGVudGlyZSBydWxlIHNldC5cbiRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlOiAwO1xuXG4vLyBBcHBsaWVzIGEgZmxvYXRpbmcgbGFiZWwgYWJvdmUgdGhlIGZvcm0gZmllbGQgY29udHJvbCBpdHNlbGYuXG5AbWl4aW4gX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZygkZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKSB7XG4gIC8vIFdlIHVzZSBwZXJzcGVjdGl2ZSB0byBmaXggdGhlIHRleHQgYmx1cnJpbmVzcyBhcyBkZXNjcmliZWQgaGVyZTpcbiAgLy8gaHR0cDovL3d3dy51c2VyYWdlbnRtYW4uY29tL2Jsb2cvMjAxNC8wNS8wNC9maXhpbmctdHlwb2dyYXBoeS1pbnNpZGUtb2YtMi1kLWNzcy10cmFuc2Zvcm1zL1xuICAvLyBUaGlzIHJlc3VsdHMgaW4gYSBzbWFsbCBqaXR0ZXIgYWZ0ZXIgdGhlIGxhYmVsIGZsb2F0cyBvbiBGaXJlZm94LCB3aGljaCB0aGVcbiAgLy8gdHJhbnNsYXRlWiBmaXhlcy5cbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kaW5maXgtbWFyZ2luLXRvcCAtICRpbmZpeC1wYWRkaW5nKSBzY2FsZSgkZm9udC1zY2FsZSkgcGVyc3BlY3RpdmUoMTAwcHgpXG4gIHRyYW5zbGF0ZVooMC4wMDFweCArICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlKTtcbiAgLy8gVGhlIHRyaWNrcyBhYm92ZSB1c2VkIHRvIHNtb290aCBvdXQgdGhlIGFuaW1hdGlvbiBvbiBjaHJvbWUgYW5kIGZpcmVmb3ggYWN0dWFsbHkgbWFrZSB0aGluZ3NcbiAgLy8gd29yc2Ugb24gSUUsIHNvIHdlIGRvbid0IGluY2x1ZGUgdGhlbSBpbiB0aGUgSUUgdmVyc2lvbi5cbiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtJGluZml4LW1hcmdpbi10b3AgLSAkaW5maXgtcGFkZGluZyArICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlKVxuICAgICAgICAgICAgICAgICAgc2NhbGUoJGZvbnQtc2NhbGUpO1xuXG4gIHdpZHRoOiAxMDAlIC8gJGZvbnQtc2NhbGUgKyAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZTtcblxuICAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZTogJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGUgKyAwLjAwMDAxICFnbG9iYWw7XG59XG5cbi8vIFNhbWUgYXMgbWl4aW4gYWJvdmUsIGJ1dCBvbWl0cyB0aGUgdHJhbnNsYXRlWiBmb3IgcHJpbnRpbmcgcHVycG9zZXMuXG5AbWl4aW4gX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZy1wcmludCgkZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKSB7XG4gIC8vIFRoaXMgcmVzdWx0cyBpbiBhIHNtYWxsIGppdHRlciBhZnRlciB0aGUgbGFiZWwgZmxvYXRzIG9uIEZpcmVmb3gsIHdoaWNoIHRoZVxuICAvLyB0cmFuc2xhdGVaIGZpeGVzLlxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRpbmZpeC1tYXJnaW4tdG9wIC0gJGluZml4LXBhZGRpbmcgKyAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZSlcbiAgICAgICAgICAgICAgICAgIHNjYWxlKCRmb250LXNjYWxlKTtcbiAgLy8gVGhlIHRyaWNrcyBhYm92ZSB1c2VkIHRvIHNtb290aCBvdXQgdGhlIGFuaW1hdGlvbiBvbiBjaHJvbWUgYW5kIGZpcmVmb3ggYWN0dWFsbHkgbWFrZSB0aGluZ3NcbiAgLy8gd29yc2Ugb24gSUUsIHNvIHdlIGRvbid0IGluY2x1ZGUgdGhlbSBpbiB0aGUgSUUgdmVyc2lvbi5cbiAgJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGU6ICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlICsgMC4wMDAwMSAhZ2xvYmFsO1xufVxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtbGVnYWN5LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAvLyBUaGUgdW5pdC1sZXNzIGxpbmUtaGVpZ2h0IGZyb20gdGhlIGZvbnQgY29uZmlnLlxuICAkbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBpbnB1dCk7XG4gIC8vIFRoZSBhbW91bnQgdG8gc2NhbGUgdGhlIGZvbnQgZm9yIHRoZSBmbG9hdGluZyBsYWJlbCBhbmQgc3Vic2NyaXB0LlxuICAkc3Vic2NyaXB0LWZvbnQtc2NhbGU6IDAuNzU7XG4gIC8vIFRoZSBhbW91bnQgb2Ygc3BhY2UgYmV0d2VlbiB0aGUgdG9wIG9mIHRoZSBsaW5lIGFuZCB0aGUgdG9wIG9mIHRoZSBhY3R1YWwgdGV4dFxuICAvLyAoYXMgYSBmcmFjdGlvbiBvZiB0aGUgZm9udC1zaXplKS5cbiAgJGxpbmUtc3BhY2luZzogKCRsaW5lLWhlaWdodCAtIDEpIC8gMjtcbiAgLy8gVGhlIHBhZGRpbmcgb24gdGhlIGluZml4LiBNb2NrcyBzaG93IGhhbGYgb2YgdGhlIHRleHQgc2l6ZSwgYnV0IHNlZW0gdG8gbWVhc3VyZSBmcm9tIHRoZSBlZGdlXG4gIC8vIG9mIHRoZSB0ZXh0IGl0c2VsZiwgbm90IHRoZSBlZGdlIG9mIHRoZSBsaW5lOyB0aGVyZWZvcmUgd2Ugc3VidHJhY3Qgb2ZmIHRoZSBsaW5lIHNwYWNpbmcuXG4gICRpbmZpeC1wYWRkaW5nOiAwLjVlbSAtICRsaW5lLXNwYWNpbmc7XG4gIC8vIFRoZSBtYXJnaW4gYXBwbGllZCB0byB0aGUgZm9ybS1maWVsZC1pbmZpeCB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgZmxvYXRpbmcgbGFiZWwuXG4gICRpbmZpeC1tYXJnaW4tdG9wOiAxZW0gKiAkbGluZS1oZWlnaHQgKiAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG4gIC8vIFRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBib3R0b20gb2YgdGhlIC5tYXQtZm9ybS1maWVsZC1mbGV4IGFyZWEgYW5kIHRoZSBzdWJzY3JpcHQgd3JhcHBlci5cbiAgLy8gTW9ja3Mgc2hvdyBoYWxmIG9mIHRoZSB0ZXh0IHNpemUsIGJ1dCB0aGlzIG1hcmdpbiBpcyBhcHBsaWVkIHRvIGFuIGVsZW1lbnQgd2l0aCB0aGUgc3Vic2NyaXB0XG4gIC8vIHRleHQgZm9udCBzaXplLCBzbyB3ZSBuZWVkIHRvIGRpdmlkZSBieSB0aGUgc2NhbGUgZmFjdG9yIHRvIG1ha2UgaXQgaGFsZiBvZiB0aGUgb3JpZ2luYWwgdGV4dFxuICAvLyBzaXplLiBXZSBhZ2FpbiBuZWVkIHRvIHN1YnRyYWN0IG9mZiB0aGUgbGluZSBzcGFjaW5nIHNpbmNlIHRoZSBtb2NrcyBtZWFzdXJlIHRvIHRoZSBlZGdlIG9mIHRoZVxuICAvLyB0ZXh0LCBub3QgdGhlICBlZGdlIG9mIHRoZSBsaW5lLlxuICAkc3Vic2NyaXB0LW1hcmdpbi10b3A6IDAuNWVtIC8gJHN1YnNjcmlwdC1mb250LXNjYWxlIC0gKCRsaW5lLXNwYWNpbmcgKiAyKTtcbiAgLy8gVGhlIHBhZGRpbmcgYXBwbGllZCB0byB0aGUgZm9ybS1maWVsZC13cmFwcGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBzdWJzY3JpcHQsIHNpbmNlIGl0J3NcbiAgLy8gYWJzb2x1dGVseSBwb3NpdGlvbmVkLiBUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgdGhlIHN1YnNjcmlwdCdzIG1hcmdpbiBhbmQgbGluZS1oZWlnaHQsIGJ1dCB3ZVxuICAvLyBuZWVkIHRvIG11bHRpcGx5IGJ5IHRoZSBzdWJzY3JpcHQgZm9udCBzY2FsZSBmYWN0b3Igc2luY2UgdGhlIHdyYXBwZXIgaGFzIGEgbGFyZ2VyIGZvbnQgc2l6ZS5cbiAgJHdyYXBwZXItcGFkZGluZy1ib3R0b206ICgkc3Vic2NyaXB0LW1hcmdpbi10b3AgKyAkbGluZS1oZWlnaHQpICogJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICAgICAgcGFkZGluZy1ib3R0b206ICR3cmFwcGVyLXBhZGRpbmctYm90dG9tO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICBwYWRkaW5nOiAkaW5maXgtcGFkZGluZyAwO1xuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IHtcbiAgICAgICYubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCxcbiAgICAgIC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjAgd2lsbCByZWx5IG9uIEF1dG9maWxsTW9uaXRvciBpbnN0ZWFkLlxuICAgICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXG4gICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2VydmVyLXNpZGUgcmVuZGVyZWQgbWF0SW5wdXQgd2l0aCBhIGxhYmVsIGF0dHJpYnV0ZSBidXQgbGFiZWwgbm90IHNob3duXG4gICAgICAvLyAodXNlZCBhcyBhIHB1cmUgQ1NTIHN0YW5kLWluIGZvciBtYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQpLlxuICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICB0b3A6ICRpbmZpeC1tYXJnaW4tdG9wICsgJGluZml4LXBhZGRpbmc7XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSB7XG4gICAgICAvLyBXZSB3YW50IHRoZSB1bmRlcmxpbmUgdG8gc3RhcnQgYXQgdGhlIGVuZCBvZiB0aGUgY29udGVudCBib3gsIG5vdCB0aGUgcGFkZGluZyBib3gsXG4gICAgICAvLyBzbyB3ZSBtb3ZlIGl0IHVwIGJ5IHRoZSBwYWRkaW5nIGFtb3VudC5cbiAgICAgIGJvdHRvbTogJHdyYXBwZXItcGFkZGluZy1ib3R0b207XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyIHtcbiAgICAgIG1hcmdpbi10b3A6ICRzdWJzY3JpcHQtbWFyZ2luLXRvcDtcblxuICAgICAgLy8gV2Ugd2FudCB0aGUgc3Vic2NyaXB0IHRvIHN0YXJ0IGF0IHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgYm94LCBub3QgdGhlIHBhZGRpbmcgYm94LFxuICAgICAgLy8gc28gd2UgbW92ZSBpdCB1cCBieSB0aGUgcGFkZGluZyBhbW91bnQgKGFkanVzdGVkIGZvciB0aGUgc21hbGxlciBmb250IHNpemUpO1xuICAgICAgdG9wOiBjYWxjKDEwMCUgLSAjeyR3cmFwcGVyLXBhZGRpbmctYm90dG9tIC8gJHN1YnNjcmlwdC1mb250LXNjYWxlfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gdHJhbnNsYXRlWiBjYXVzZXMgdGhlIGxhYmVsIHRvIG5vdCBhcHBlYXIgd2hpbGUgcHJpbnRpbmcsIHNvIHdlIG92ZXJyaWRlIGl0IHRvIG5vdFxuICAvLyBhcHBseSB0cmFuc2xhdGVaIHdoaWxlIHByaW50aW5nXG4gIEBtZWRpYSBwcmludCB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IHtcbiAgICAgICYubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IHtcbiAgICAgICAgJi5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLFxuICAgICAgICAubWF0LWlucHV0LXNlcnZlcjpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZy1wcmludChcbiAgICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjAgd2lsbCByZWx5IG9uIEF1dG9maWxsTW9uaXRvciBpbnN0ZWFkLlxuICAgICAgICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJcbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nLXByaW50KFxuICAgICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2VydmVyLXNpZGUgcmVuZGVyZWQgbWF0SW5wdXQgd2l0aCBhIGxhYmVsIGF0dHJpYnV0ZSBidXQgbGFiZWwgbm90IHNob3duXG4gICAgICAgIC8vICh1c2VkIGFzIGEgcHVyZSBDU1Mgc3RhbmQtaW4gZm9yIG1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCkuXG4gICAgICAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXG4gICAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZy1wcmludChcbiAgICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuXG4vLyBUaGVtZSBzdHlsZXMgdGhhdCBvbmx5IGFwcGx5IHRvIHRoZSBvdXRsaW5lIGFwcGVhcmFuY2Ugb2YgdGhlIGZvcm0tZmllbGQuXG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcblxuICAkbGFiZWwtZGlzYWJsZWQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gICRvdXRsaW5lLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjMsIDAuMTIpKTtcbiAgJG91dGxpbmUtY29sb3ItaG92ZXI6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlciwgaWYoJGlzLWRhcmstdGhlbWUsIDEsIDAuODcpKTtcbiAgJG91dGxpbmUtY29sb3ItcHJpbWFyeTogbWF0LWNvbG9yKCRwcmltYXJ5KTtcbiAgJG91dGxpbmUtY29sb3ItYWNjZW50OiBtYXQtY29sb3IoJGFjY2VudCk7XG4gICRvdXRsaW5lLWNvbG9yLXdhcm46IG1hdC1jb2xvcigkd2Fybik7XG4gICRvdXRsaW5lLWNvbG9yLWRpc2FibGVkOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjE1LCAwLjA2KSk7XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICAgICAgY29sb3I6ICRvdXRsaW5lLWNvbG9yO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIHtcbiAgICAgIGNvbG9yOiAkb3V0bGluZS1jb2xvci1ob3ZlcjtcbiAgICB9XG5cbiAgICAmLm1hdC1mb2N1c2VkIHtcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIHtcbiAgICAgICAgY29sb3I6ICRvdXRsaW5lLWNvbG9yLXByaW1hcnk7XG4gICAgICB9XG5cbiAgICAgICYubWF0LWFjY2VudCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayB7XG4gICAgICAgIGNvbG9yOiAkb3V0bGluZS1jb2xvci1hY2NlbnQ7XG4gICAgICB9XG5cbiAgICAgICYubWF0LXdhcm4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sge1xuICAgICAgICBjb2xvcjogJG91dGxpbmUtY29sb3Itd2FybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDbGFzcyByZXBlYXRlZCBzbyB0aGF0IHJ1bGUgaXMgc3BlY2lmaWMgZW5vdWdoIHRvIG92ZXJyaWRlIGZvY3VzZWQgYWNjZW50IGNvbG9yIGNhc2UuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1pbnZhbGlkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQge1xuICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sge1xuICAgICAgICBjb2xvcjogJG91dGxpbmUtY29sb3Itd2FybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIHtcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIGNvbG9yOiAkbGFiZWwtZGlzYWJsZWQtY29sb3I7XG4gICAgICB9XG5cbiAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lIHtcbiAgICAgICAgY29sb3I6ICRvdXRsaW5lLWNvbG9yLWRpc2FibGVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBVc2VkIHRvIG1ha2UgaW5zdGFuY2VzIG9mIHRoZSBfbWF0LWZvcm0tZmllbGQtbGFiZWwtZmxvYXRpbmcgbWl4aW4gbmVnbGlnaWJseSBkaWZmZXJlbnQsXG4vLyBhbmQgcHJldmVudCBHb29nbGUncyBDU1MgT3B0aW1pemVyIGZyb20gY29sbGFwc2luZyB0aGUgZGVjbGFyYXRpb25zLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHNvbWVcbi8vIG9mIHRoZSBzZWxlY3RvcnMgY29udGFpbiBwc2V1ZG8tY2xhc3NlcyBub3QgcmVjb2duaXplZCBpbiBhbGwgYnJvd3NlcnMuIElmIGEgYnJvd3NlciBlbmNvdW50ZXJzXG4vLyBhbiB1bmtub3duIHBzZXVkby1jbGFzcyBpdCB3aWxsIGRpc2NhcmQgdGhlIGVudGlyZSBydWxlIHNldC5cbiRtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWRlZHVwZTogMDtcblxuLy8gQXBwbGllcyBhIGZsb2F0aW5nIGxhYmVsIGFib3ZlIHRoZSBmb3JtIGZpZWxkIGNvbnRyb2wgaXRzZWxmLlxuQG1peGluIF9tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWxhYmVsLWZsb2F0aW5nKCRmb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kaW5maXgtbWFyZ2luLXRvcCAtICRpbmZpeC1wYWRkaW5nICsgJG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZGVkdXBlKVxuICBzY2FsZSgkZm9udC1zY2FsZSk7XG4gIHdpZHRoOiAxMDAlIC8gJGZvbnQtc2NhbGUgKyAkbWF0LWZvcm0tZmllbGQtb3V0bGluZS1kZWR1cGU7XG5cbiAgJG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZGVkdXBlOiAkbWF0LWZvcm0tZmllbGQtb3V0bGluZS1kZWR1cGUgKyAwLjAwMDAxICFnbG9iYWw7XG59XG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1vdXRsaW5lLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAvLyBUaGUgdW5pdC1sZXNzIGxpbmUtaGVpZ2h0IGZyb20gdGhlIGZvbnQgY29uZmlnLlxuICAkbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBpbnB1dCk7XG4gIC8vIFRoZSBhbW91bnQgdG8gc2NhbGUgdGhlIGZvbnQgZm9yIHRoZSBmbG9hdGluZyBsYWJlbCBhbmQgc3Vic2NyaXB0LlxuICAkc3Vic2NyaXB0LWZvbnQtc2NhbGU6IDAuNzU7XG4gIC8vIFRoZSBwYWRkaW5nIGFib3ZlIGFuZCBiZWxvdyB0aGUgaW5maXguXG4gICRpbmZpeC1wYWRkaW5nOiAxZW07XG4gIC8vIFRoZSBtYXJnaW4gYXBwbGllZCB0byB0aGUgZm9ybS1maWVsZC1pbmZpeCB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgZmxvYXRpbmcgbGFiZWwuXG4gICRpbmZpeC1tYXJnaW4tdG9wOiAxZW0gKiAkbGluZS1oZWlnaHQgKiAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG4gIC8vIFRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBib3R0b20gb2YgdGhlIC5tYXQtZm9ybS1maWVsZC1mbGV4IGFyZWEgYW5kIHRoZSBzdWJzY3JpcHQgd3JhcHBlci5cbiAgLy8gTW9ja3Mgc2hvdyBoYWxmIG9mIHRoZSB0ZXh0IHNpemUsIGJ1dCB0aGlzIG1hcmdpbiBpcyBhcHBsaWVkIHRvIGFuIGVsZW1lbnQgd2l0aCB0aGUgc3Vic2NyaXB0XG4gIC8vIHRleHQgZm9udCBzaXplLCBzbyB3ZSBuZWVkIHRvIGRpdmlkZSBieSB0aGUgc2NhbGUgZmFjdG9yIHRvIG1ha2UgaXQgaGFsZiBvZiB0aGUgb3JpZ2luYWwgdGV4dFxuICAvLyBzaXplLlxuICAkc3Vic2NyaXB0LW1hcmdpbi10b3A6IDAuNWVtIC8gJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuICAvLyBUaGUgcGFkZGluZyBhcHBsaWVkIHRvIHRoZSBmb3JtLWZpZWxkLXdyYXBwZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIHN1YnNjcmlwdCwgc2luY2UgaXQnc1xuICAvLyBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQuIFRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgc3Vic2NyaXB0J3MgbWFyZ2luIGFuZCBsaW5lLWhlaWdodCwgYnV0IHdlXG4gIC8vIG5lZWQgdG8gbXVsdGlwbHkgYnkgdGhlIHN1YnNjcmlwdCBmb250IHNjYWxlIGZhY3RvciBzaW5jZSB0aGUgd3JhcHBlciBoYXMgYSBsYXJnZXIgZm9udCBzaXplLlxuICAkd3JhcHBlci1wYWRkaW5nLWJvdHRvbTogKCRzdWJzY3JpcHQtbWFyZ2luLXRvcCArICRsaW5lLWhlaWdodCkgKiAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG4gIC8vIFRoZSBhbW91bnQgd2Ugb2Zmc2V0IHRoZSBsYWJlbCBmcm9tIHRoZSBpbnB1dCB0ZXh0IGluIHRoZSBvdXRsaW5lIGFwcGVhcmFuY2UuXG4gICRvdXRsaW5lLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0OiAtMC4yNWVtO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUge1xuICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICBwYWRkaW5nOiAkaW5maXgtcGFkZGluZyAwICRpbmZpeC1wYWRkaW5nIDA7XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgIHRvcDogJGluZml4LW1hcmdpbi10b3AgKyAkaW5maXgtcGFkZGluZztcbiAgICAgIG1hcmdpbi10b3A6ICRvdXRsaW5lLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0O1xuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IHtcbiAgICAgICYubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCxcbiAgICAgIC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLW91dGxpbmUtbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZyArICRvdXRsaW5lLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0LFxuICAgICAgICAgICAgICAgICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2VydmVyLXNpZGUgcmVuZGVyZWQgbWF0SW5wdXQgd2l0aCBhIGxhYmVsIGF0dHJpYnV0ZSBidXQgbGFiZWwgbm90IHNob3duXG4gICAgICAvLyAodXNlZCBhcyBhIHB1cmUgQ1NTIHN0YW5kLWluIGZvciBtYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQpLlxuICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcgKyAkb3V0bGluZS1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldCxcbiAgICAgICAgICAgICAgICAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5cbi8vIFRoZW1lIHN0eWxlcyB0aGF0IG9ubHkgYXBwbHkgdG8gdGhlIHN0YW5kYXJkIGFwcGVhcmFuY2Ugb2YgdGhlIGZvcm0tZmllbGQuXG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1zdGFuZGFyZC10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcblxuICAkdW5kZXJsaW5lLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjcsIDAuNDIpKTtcblxuICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yO1xuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSB7XG4gICAgICBAaW5jbHVkZSBtYXQtY29udHJvbC1kaXNhYmxlZC11bmRlcmxpbmUoJHVuZGVybGluZS1jb2xvcik7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1zdGFuZGFyZC10eXBvZ3JhcGh5KCRjb25maWcpIHt9XG5cblxuLy8gVGhlbWUgc3R5bGVzIHRoYXQgYXBwbHkgdG8gYWxsIGFwcGVhcmFuY2VzIG9mIHRoZSBmb3JtLWZpZWxkLlxuQG1peGluIG1hdC1mb3JtLWZpZWxkLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcblxuICAvLyBMYWJlbCBjb2xvcnMuIFJlcXVpcmVkIGlzIHVzZWQgZm9yIHRoZSBgKmAgc3RhciBzaG93biBpbiB0aGUgbGFiZWwuXG4gICRsYWJlbC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCwgaWYoJGlzLWRhcmstdGhlbWUsIDAuNywgMC42KSk7XG4gICRmb2N1c2VkLWxhYmVsLWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIHRleHQpO1xuICAkcmVxdWlyZWQtbGFiZWwtY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCB0ZXh0KTtcblxuICAvLyBVbmRlcmxpbmUgY29sb3JzLlxuICAkdW5kZXJsaW5lLWNvbG9yLWJhc2U6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlciwgaWYoJGlzLWRhcmstdGhlbWUsIDEsIDAuODcpKTtcbiAgJHVuZGVybGluZS1jb2xvci1hY2NlbnQ6IG1hdC1jb2xvcigkYWNjZW50LCB0ZXh0KTtcbiAgJHVuZGVybGluZS1jb2xvci13YXJuOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICAkdW5kZXJsaW5lLWZvY3VzZWQtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgdGV4dCk7XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICBjb2xvcjogJGxhYmVsLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1oaW50IHtcbiAgICBjb2xvcjogJGxhYmVsLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgY29sb3I6ICRmb2N1c2VkLWxhYmVsLWNvbG9yO1xuXG4gICAgJi5tYXQtYWNjZW50IHtcbiAgICAgIGNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLWFjY2VudDtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIGNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLXdhcm47XG4gICAgfVxuICB9XG5cbiAgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXIge1xuICAgIGNvbG9yOiAkcmVxdWlyZWQtbGFiZWwtY29sb3I7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtcmlwcGxlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLWJhc2U7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQge1xuICAgIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1mb2N1c2VkLWNvbG9yO1xuXG4gICAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLWFjY2VudDtcbiAgICAgIH1cblxuICAgICAgJi5tYXQtd2FybiB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtY29sb3Itd2FybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpIHtcbiAgICAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVyIHtcbiAgICAgIGNvbG9yOiAkdW5kZXJsaW5lLWZvY3VzZWQtY29sb3I7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXIge1xuICAgICAgY29sb3I6ICR1bmRlcmxpbmUtY29sb3ItYWNjZW50O1xuICAgIH1cblxuICAgICYubWF0LXdhcm4gLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlciB7XG4gICAgICBjb2xvcjogJHVuZGVybGluZS1jb2xvci13YXJuO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN0eWxpbmcgZm9yIHRoZSBlcnJvciBzdGF0ZSBvZiB0aGUgZm9ybSBmaWVsZC4gTm90ZSB0aGF0IHdoaWxlIHRoZSBzYW1lIGNhbiBiZVxuICAvLyBhY2hpZXZlZCB3aXRoIHRoZSBuZy0qIGNsYXNzZXMsIHdlIHVzZSB0aGlzIGFwcHJvYWNoIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IHRoZSBzYW1lXG4gIC8vIGxvZ2ljIGlzIHVzZWQgdG8gc3R5bGUgdGhlIGVycm9yIHN0YXRlIGFuZCB0byBzaG93IHRoZSBlcnJvciBtZXNzYWdlcy5cbiAgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQge1xuICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICBjb2xvcjogJHVuZGVybGluZS1jb2xvci13YXJuO1xuXG4gICAgICAmLm1hdC1hY2NlbnQsXG4gICAgICAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2VyIHtcbiAgICAgICAgY29sb3I6ICR1bmRlcmxpbmUtY29sb3Itd2FybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtcmlwcGxlLFxuICAgIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLXdhcm47XG4gICAgfVxuICB9XG5cbiAgLm1hdC1lcnJvciB7XG4gICAgY29sb3I6ICR1bmRlcmxpbmUtY29sb3Itd2FybjtcbiAgfVxuXG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1zdGFuZGFyZC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1maWxsLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhlbWUoJHRoZW1lKTtcbn1cblxuLy8gVXNlZCB0byBtYWtlIGluc3RhbmNlcyBvZiB0aGUgX21hdC1mb3JtLWZpZWxkLWxhYmVsLWZsb2F0aW5nIG1peGluIG5lZ2xpZ2libHkgZGlmZmVyZW50LFxuLy8gYW5kIHByZXZlbnQgR29vZ2xlJ3MgQ1NTIE9wdGltaXplciBmcm9tIGNvbGxhcHNpbmcgdGhlIGRlY2xhcmF0aW9ucy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBzb21lXG4vLyBvZiB0aGUgc2VsZWN0b3JzIGNvbnRhaW4gcHNldWRvLWNsYXNzZXMgbm90IHJlY29nbml6ZWQgaW4gYWxsIGJyb3dzZXJzLiBJZiBhIGJyb3dzZXIgZW5jb3VudGVyc1xuLy8gYW4gdW5rbm93biBwc2V1ZG8tY2xhc3MgaXQgd2lsbCBkaXNjYXJkIHRoZSBlbnRpcmUgcnVsZSBzZXQuXG4kbWF0LWZvcm0tZmllbGQtZGVkdXBlOiAwO1xuXG4vLyBBcHBsaWVzIGEgZmxvYXRpbmcgbGFiZWwgYWJvdmUgdGhlIGZvcm0gZmllbGQgY29udHJvbCBpdHNlbGYuXG5AbWl4aW4gX21hdC1mb3JtLWZpZWxkLWxhYmVsLWZsb2F0aW5nKCRmb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kaW5maXgtbWFyZ2luLXRvcCAtICRpbmZpeC1wYWRkaW5nICsgJG1hdC1mb3JtLWZpZWxkLWRlZHVwZSlcbiAgICAgICAgICAgICBzY2FsZSgkZm9udC1zY2FsZSk7XG4gIHdpZHRoOiAxMDAlIC8gJGZvbnQtc2NhbGUgKyAkbWF0LWZvcm0tZmllbGQtZGVkdXBlO1xuXG4gICRtYXQtZm9ybS1maWVsZC1kZWR1cGU6ICRtYXQtZm9ybS1maWVsZC1kZWR1cGUgKyAwLjAwMDAxICFnbG9iYWw7XG59XG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLy8gVGhlIHVuaXQtbGVzcyBsaW5lLWhlaWdodCBmcm9tIHRoZSBmb250IGNvbmZpZy5cbiAgJGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgaW5wdXQpO1xuXG4gIC8vIFRoZSBhbW91bnQgdG8gc2NhbGUgdGhlIGZvbnQgZm9yIHRoZSBmbG9hdGluZyBsYWJlbCBhbmQgc3Vic2NyaXB0LlxuICAkc3Vic2NyaXB0LWZvbnQtc2NhbGU6IDAuNzU7XG4gIC8vIFRoZSBhbW91bnQgdG8gc2NhbGUgdGhlIGZvbnQgZm9yIHRoZSBwcmVmaXggYW5kIHN1ZmZpeCBpY29ucy5cbiAgJHByZWZpeC1zdWZmaXgtaWNvbi1mb250LXNjYWxlOiAxLjU7XG5cbiAgLy8gVGhlIHBhZGRpbmcgb24gdGhlIGluZml4LiBNb2NrcyBzaG93IGhhbGYgb2YgdGhlIHRleHQgc2l6ZS5cbiAgJGluZml4LXBhZGRpbmc6IDAuNWVtO1xuICAvLyBUaGUgbWFyZ2luIGFwcGxpZWQgdG8gdGhlIGZvcm0tZmllbGQtaW5maXggdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsLlxuICAkaW5maXgtbWFyZ2luLXRvcDogMWVtICogJGxpbmUtaGVpZ2h0ICogJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuICAvLyBGb250IHNpemUgdG8gdXNlIGZvciB0aGUgbGFiZWwgYW5kIHN1YnNjcmlwdCB0ZXh0LlxuICAkc3Vic2NyaXB0LWZvbnQtc2l6ZTogJHN1YnNjcmlwdC1mb250LXNjYWxlICogMTAwJTtcbiAgLy8gRm9udCBzaXplIHRvIHVzZSBmb3IgdGhlIGZvciB0aGUgcHJlZml4IGFuZCBzdWZmaXggaWNvbnMuXG4gICRwcmVmaXgtc3VmZml4LWljb24tZm9udC1zaXplOiAkcHJlZml4LXN1ZmZpeC1pY29uLWZvbnQtc2NhbGUgKiAxMDAlO1xuICAvLyBUaGUgc3BhY2UgYmV0d2VlbiB0aGUgYm90dG9tIG9mIHRoZSAubWF0LWZvcm0tZmllbGQtZmxleCBhcmVhIGFuZCB0aGUgc3Vic2NyaXB0IHdyYXBwZXIuXG4gIC8vIE1vY2tzIHNob3cgaGFsZiBvZiB0aGUgdGV4dCBzaXplLCBidXQgdGhpcyBtYXJnaW4gaXMgYXBwbGllZCB0byBhbiBlbGVtZW50IHdpdGggdGhlIHN1YnNjcmlwdFxuICAvLyB0ZXh0IGZvbnQgc2l6ZSwgc28gd2UgbmVlZCB0byBkaXZpZGUgYnkgdGhlIHNjYWxlIGZhY3RvciB0byBtYWtlIGl0IGhhbGYgb2YgdGhlIG9yaWdpbmFsIHRleHRcbiAgLy8gc2l6ZS5cbiAgJHN1YnNjcmlwdC1tYXJnaW4tdG9wOiAwLjVlbSAvICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcbiAgLy8gVGhlIHBhZGRpbmcgYXBwbGllZCB0byB0aGUgZm9ybS1maWVsZC13cmFwcGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBzdWJzY3JpcHQsIHNpbmNlIGl0J3NcbiAgLy8gYWJzb2x1dGVseSBwb3NpdGlvbmVkLiBUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgdGhlIHN1YnNjcmlwdCdzIG1hcmdpbiBhbmQgbGluZS1oZWlnaHQsIGJ1dCB3ZVxuICAvLyBuZWVkIHRvIG11bHRpcGx5IGJ5IHRoZSBzdWJzY3JpcHQgZm9udCBzY2FsZSBmYWN0b3Igc2luY2UgdGhlIHdyYXBwZXIgaGFzIGEgbGFyZ2VyIGZvbnQgc2l6ZS5cbiAgJHdyYXBwZXItcGFkZGluZy1ib3R0b206ICgkc3Vic2NyaXB0LW1hcmdpbi10b3AgKyAkbGluZS1oZWlnaHQpICogJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuXG4gIC5tYXQtZm9ybS1maWVsZCB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGlucHV0KTtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogJHdyYXBwZXItcGFkZGluZy1ib3R0b207XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtcHJlZml4LFxuICAubWF0LWZvcm0tZmllbGQtc3VmZml4IHtcbiAgICAvLyBBbGxvdyBpY29ucyBpbiBhIHByZWZpeCBvciBzdWZmaXggdG8gYWRhcHQgdG8gdGhlIGNvcnJlY3Qgc2l6ZS5cbiAgICAubWF0LWljb24ge1xuICAgICAgZm9udC1zaXplOiAkcHJlZml4LXN1ZmZpeC1pY29uLWZvbnQtc2l6ZTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQ7XG4gICAgfVxuXG4gICAgLy8gQWxsb3cgaWNvbiBidXR0b25zIGluIGEgcHJlZml4IG9yIHN1ZmZpeCB0byBhZGFwdCB0byB0aGUgY29ycmVjdCBzaXplLlxuICAgIC5tYXQtaWNvbi1idXR0b24ge1xuICAgICAgaGVpZ2h0OiAkcHJlZml4LXN1ZmZpeC1pY29uLWZvbnQtc2NhbGUgKiAxZW07XG4gICAgICB3aWR0aDogJHByZWZpeC1zdWZmaXgtaWNvbi1mb250LXNjYWxlICogMWVtO1xuXG4gICAgICAubWF0LWljb24ge1xuICAgICAgICBoZWlnaHQ6ICRsaW5lLWhlaWdodCAqIDFlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgIHBhZGRpbmc6ICRpbmZpeC1wYWRkaW5nIDA7XG4gICAgLy8gVGhyb3dzIG9mZiB0aGUgYmFzZWxpbmUgaWYgd2UgZG8gaXQgYXMgYSByZWFsIG1hcmdpbiwgc28gd2UgZG8gaXQgYXMgYSBib3JkZXIgaW5zdGVhZC5cbiAgICBib3JkZXItdG9wOiAkaW5maXgtbWFyZ2luLXRvcCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQge1xuICAgICYubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCxcbiAgICAubWF0LWlucHV0LXNlcnZlcjpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICB9XG5cbiAgICAvLyBTZXJ2ZXItc2lkZSByZW5kZXJlZCBtYXRJbnB1dCB3aXRoIGEgbGFiZWwgYXR0cmlidXRlIGJ1dCBsYWJlbCBub3Qgc2hvd25cbiAgICAvLyAodXNlZCBhcyBhIHB1cmUgQ1NTIHN0YW5kLWluIGZvciBtYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQpLlxuICAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXG4gICAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciB7XG4gICAgdG9wOiAtJGluZml4LW1hcmdpbi10b3A7XG4gICAgcGFkZGluZy10b3A6ICRpbmZpeC1tYXJnaW4tdG9wO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICB0b3A6ICRpbmZpeC1tYXJnaW4tdG9wICsgJGluZml4LXBhZGRpbmc7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIHtcbiAgICAvLyBXZSB3YW50IHRoZSB1bmRlcmxpbmUgdG8gc3RhcnQgYXQgdGhlIGVuZCBvZiB0aGUgY29udGVudCBib3gsIG5vdCB0aGUgcGFkZGluZyBib3gsXG4gICAgLy8gc28gd2UgbW92ZSBpdCB1cCBieSB0aGUgcGFkZGluZyBhbW91bnQuXG4gICAgYm90dG9tOiAkd3JhcHBlci1wYWRkaW5nLWJvdHRvbTtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlciB7XG4gICAgZm9udC1zaXplOiAkc3Vic2NyaXB0LWZvbnQtc2l6ZTtcbiAgICBtYXJnaW4tdG9wOiAkc3Vic2NyaXB0LW1hcmdpbi10b3A7XG5cbiAgICAvLyBXZSB3YW50IHRoZSBzdWJzY3JpcHQgdG8gc3RhcnQgYXQgdGhlIGVuZCBvZiB0aGUgY29udGVudCBib3gsIG5vdCB0aGUgcGFkZGluZyBib3gsXG4gICAgLy8gc28gd2UgbW92ZSBpdCB1cCBieSB0aGUgcGFkZGluZyBhbW91bnQgKGFkanVzdGVkIGZvciB0aGUgc21hbGxlciBmb250IHNpemUpO1xuICAgIHRvcDogY2FsYygxMDAlIC0gI3skd3JhcHBlci1wYWRkaW5nLWJvdHRvbSAvICRzdWJzY3JpcHQtZm9udC1zY2FsZX0pO1xuICB9XG5cbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtbGVnYWN5LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLXN0YW5kYXJkLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLWZpbGwtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtb3V0bGluZS10eXBvZ3JhcGh5KCRjb25maWcpO1xufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtdHJlZS10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LXRyZWUge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2NhcmQnKTtcbiAgfVxuXG4gIC5tYXQtdHJlZS1ub2RlLFxuICAubWF0LW5lc3RlZC10cmVlLW5vZGUge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtdHJlZS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC10cmVlIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC10cmVlLW5vZGUsXG4gIC5tYXQtbmVzdGVkLXRyZWUtbm9kZSB7XG4gICAgZm9udC13ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTEpO1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpO1xuICB9XG59XG5cblxuXG4vLyBJbmNsdWRlcyBhbGwgb2YgdGhlIHR5cG9ncmFwaGljIHN0eWxlcy5cbkBtaXhpbiBhbmd1bGFyLW1hdGVyaWFsLXR5cG9ncmFwaHkoJGNvbmZpZzogbnVsbCkge1xuICBAaWYgJGNvbmZpZyA9PSBudWxsIHtcbiAgICAkY29uZmlnOiBtYXQtdHlwb2dyYXBoeS1jb25maWcoKTtcbiAgfVxuXG4gIEBpbmNsdWRlIG1hdC1iYWRnZS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtYmFzZS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtYXV0b2NvbXBsZXRlLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1ib3R0b20tc2hlZXQtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWJ1dHRvbi10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtYnV0dG9uLXRvZ2dsZS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtY2FyZC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtY2hlY2tib3gtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWNoaXBzLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC10YWJsZS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZGF0ZXBpY2tlci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZGlhbG9nLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1leHBhbnNpb24tcGFuZWwtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWdyaWQtbGlzdC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtaWNvbi10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtaW5wdXQtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LW1lbnUtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXBhZ2luYXRvci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtcHJvZ3Jlc3MtYmFyLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1wcm9ncmVzcy1zcGlubmVyLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1yYWRpby10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtc2VsZWN0LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1zaWRlbmF2LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1zbGlkZS10b2dnbGUtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXNsaWRlci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtc3RlcHBlci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtc29ydC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtdGFicy10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtdG9vbGJhci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtdG9vbHRpcC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtbGlzdC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtb3B0aW9uLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1vcHRncm91cC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtc25hY2stYmFyLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC10cmVlLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG59XG5cblxuLy8gTWl4aW4gdGhhdCByZW5kZXJzIGFsbCBvZiB0aGUgY29yZSBzdHlsZXMgdGhhdCBhcmUgbm90IHRoZW1lLWRlcGVuZGVudC5cbkBtaXhpbiBtYXQtY29yZSgkdHlwb2dyYXBoeS1jb25maWc6IG51bGwpIHtcbiAgQGluY2x1ZGUgYW5ndWxhci1tYXRlcmlhbC10eXBvZ3JhcGh5KCR0eXBvZ3JhcGh5LWNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1yaXBwbGUoKTtcbiAgQGluY2x1ZGUgY2RrLWExMXkoKTtcbiAgQGluY2x1ZGUgY2RrLW92ZXJsYXkoKTtcbiAgQGluY2x1ZGUgY2RrLXRleHQtZmllbGQoKTtcbn1cblxuLy8gTWl4aW4gdGhhdCByZW5kZXJzIGFsbCBvZiB0aGUgY29yZSBzdHlsZXMgdGhhdCBkZXBlbmQgb24gdGhlIHRoZW1lLlxuQG1peGluIG1hdC1jb3JlLXRoZW1lKCR0aGVtZSkge1xuICBAaW5jbHVkZSBtYXQtcmlwcGxlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1vcHRpb24tdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LW9wdGdyb3VwLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1wc2V1ZG8tY2hlY2tib3gtdGhlbWUoJHRoZW1lKTtcblxuICAvLyBQcm92aWRlcyBleHRlcm5hbCBDU1MgY2xhc3NlcyBmb3IgZWFjaCBlbGV2YXRpb24gdmFsdWUuIEVhY2ggQ1NTIGNsYXNzIGlzIGZvcm1hdHRlZCBhc1xuICAvLyBgbWF0LWVsZXZhdGlvbi16JHpWYWx1ZWAgd2hlcmUgYCR6VmFsdWVgIGNvcnJlc3BvbmRzIHRvIHRoZSB6LXNwYWNlIHRvIHdoaWNoIHRoZSBlbGVtZW50IGlzXG4gIC8vIGVsZXZhdGVkLlxuICBAZm9yICR6VmFsdWUgZnJvbSAwIHRocm91Z2ggMjQge1xuICAgIC4jeyRfbWF0LWVsZXZhdGlvbi1wcmVmaXh9I3skelZhbHVlfSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigkelZhbHVlLCAkdGhlbWUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdyYXBwZXIgZWxlbWVudCB0aGF0IHByb3ZpZGVzIHRoZSB0aGVtZSBiYWNrZ3JvdW5kIHdoZW4gdGhlIHVzZXIncyBjb250ZW50IGlzbid0XG4gIC8vIGluc2lkZSBvZiBhIGBtYXQtc2lkZW5hdi1jb250YWluZXJgLiBOb3RlIHRoYXQgd2UgbmVlZCB0byBleGNsdWRlIHRoZSBhbXBlcnNhbmRcbiAgLy8gc2VsZWN0b3IgaW4gY2FzZSB0aGUgbWl4aW4gaXMgaW5jbHVkZWQgYXQgdGhlIHRvcCBsZXZlbC5cbiAgLm1hdC1hcHAtYmFja2dyb3VuZCN7aWYoJiwgJywgJi5tYXQtYXBwLWJhY2tncm91bmQnLCAnJyl9IHtcbiAgICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAgICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGJhY2tncm91bmQpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG5cbiAgLy8gTWFya2VyIHRoYXQgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgdXNlciBoYXMgYWRkZWQgYSB0aGVtZSB0byB0aGVpciBwYWdlLlxuICBAYXQtcm9vdCB7XG4gICAgLm1hdC10aGVtZS1sb2FkZWQtbWFya2VyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtZGl2aWRlci10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWRpdmlkZXIge1xuICAgIGJvcmRlci10b3AtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cblxuICAubWF0LWRpdmlkZXItdmVydGljYWwge1xuICAgIGJvcmRlci1yaWdodC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxufVxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vLyBDcmVhdGUgYSB0aGVtZS5cbkBtaXhpbiBhbmd1bGFyLW1hdGVyaWFsLXRoZW1lKCR0aGVtZSkge1xuICBAaW5jbHVkZSBtYXQtY29yZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtYXV0b2NvbXBsZXRlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1iYWRnZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtYm90dG9tLXNoZWV0LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1idXR0b24tdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWJ1dHRvbi10b2dnbGUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWNhcmQtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWNoZWNrYm94LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1jaGlwcy10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtdGFibGUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWRhdGVwaWNrZXItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWRpYWxvZy10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZGl2aWRlci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZXhwYW5zaW9uLXBhbmVsLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1ncmlkLWxpc3QtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWljb24tdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWlucHV0LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1saXN0LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1tZW51LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1wYWdpbmF0b3ItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXByb2dyZXNzLWJhci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtcmFkaW8tdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXNlbGVjdC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtc2lkZW5hdi10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtc2xpZGUtdG9nZ2xlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1zbGlkZXItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXN0ZXBwZXItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXNvcnQtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXRhYnMtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXRvb2xiYXItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXRvb2x0aXAtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXRyZWUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXNuYWNrLWJhci10aGVtZSgkdGhlbWUpO1xufVxuIiwiQGltcG9ydCBcIm1peGluc1wiO1xuQGltcG9ydCBcInZhcnNcIjtcbkBpbXBvcnQgXCJ+QGFuZ3VsYXIvbWF0ZXJpYWwvdGhlbWluZ1wiO1xuXG4ubWNrIHtcbiAgICAmLWluaGVyaXQge1xuICAgICAgICAmLWZvbnQge1xuICAgICAgICAgICAgLy8gcGF0Y2hlcyBnbG9iYWwgZm9udCBzdHlsaW5nIGRvbmUgYnkgbGVnYWN5IHVpXG4gICAgICAgICAgICBmb250OiBpbmhlcml0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1jb250ZW50IHtcbiAgICAgICAgJi1leHBhbmQge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG5cbiAgICAgICAgICAgICYtd2lkdGgge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLWhlaWdodCB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi13aXRoLWZvb3Rlci1oZWlnaHQge1xuICAgICAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNThweCk7XG4gICAgICAgIH1cblxuICAgICAgICAmLWZ1bGwtaGVpZ2h0IHtcbiAgICAgICAgICAgIGhlaWdodDogMTAwdmg7XG4gICAgICAgIH1cblxuICAgICAgICAmLXBhZ2Uge1xuICAgICAgICAgICAgQGV4dGVuZCAubWNrLWNvbnRlbnQtZXhwYW5kO1xuICAgICAgICAgICAgYmFja2dyb3VuZDogJHBhZ2UtYmFja2dyb3VuZC1jb2xvcjtcblxuICAgICAgICAgICAgJi1jb250YWluZXIge1xuICAgICAgICAgICAgICAgIEBleHRlbmQgLm1jay1jb250ZW50LWZ1bGwtaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1ib2R5IHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWdyb3VwIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHBhZ2UtcGFkZGluZztcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA3NTlweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtc2hhZG93IHtcbiAgICAgICAgQGluY2x1ZGUgbWF0LWVsZXZhdGlvbigxKTtcbiAgICB9XG5cbiAgICAmLWZsZXgtMSB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgfVxuXG4gICAgJi1yb3cge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuXG4gICAgICAgICYubWNrLWNlbnRlciB7XG4gICAgICAgICAgICAmLWp1c3RpZnkge1xuICAgICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLWFsaWduIHtcbiAgICAgICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAZXh0ZW5kIC5tY2stY2VudGVyLWp1c3RpZnk7XG4gICAgICAgICAgICBAZXh0ZW5kIC5tY2stY2VudGVyLWFsaWduO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5tY2stc3RyZXRjaCB7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICAgICAgfVxuXG4gICAgICAgICYtZmxvdyB7XG4gICAgICAgICAgICBAZXh0ZW5kIC5tY2stcm93O1xuICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5tY2stc2Nyb2xsIHtcbiAgICAgICAgICAgIG92ZXJmbG93LXg6IHNjcm9sbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtY29sdW1uIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuICAgICAgICAmLm1jay1jZW50ZXIge1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5tY2stc3BhY2UtYmV0d2VlbiB7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIH1cblxuICAgICAgICAmLm1jay1zdHJldGNoIHtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5tY2stc2Nyb2xsIHtcbiAgICAgICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgICAgICAgICAgIG92ZXJmbG93LXk6IG92ZXJsYXk7XG4gICAgICAgIH1cblxuICAgICAgICAmLm1jay1mbGV4LWVuZCB7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1vdmVyZmxvdyB7XG4gICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgIH1cblxuICAgICYtYm9yZGVyZWQsICYtaW5wdXQge1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xuXG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjNDY0NjQ2O1xuICAgICAgICB9XG5cbiAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgICBib3JkZXItY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICB9XG5cbiAgICAgICAgJltkaXNhYmxlZD1cInRydWVcIl0ge1xuICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgICAgICBib3JkZXItY29sb3I6ICNmMGYwZjA7XG4gICAgICAgICAgICBjb2xvcjogI2NjYztcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtZGF0ZS1kaXNwbGF5IHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiA0M3B4O1xuICAgICAgICBwYWRkaW5nOiAkc3BhY2luZy1zbWFsbCAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICB0cmFuc2l0aW9uOiBib3JkZXIgMjAwbXMsIGJveC1zaGFkb3cgMjAwbXM7XG4gICAgfVxuXG4gICAgJi1mb3JtLWlucHV0IHtcblxuICAgICAgICAubWF0LWZvcm0tZmllbGQtd3JhcHBlciB7XG4gICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1mb3JtLWZpZWxkIHtcbiAgICAgICAgICAgIG1pbi13aWR0aDogYXV0byAhaW1wb3J0YW50O1xuXG4gICAgICAgICAgICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgIHBhZGRpbmctdG9wOiAwLjdyZW0gIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogJHNwYWNpbmcteHhzbWFsbCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gICAgICAgICAgICAgICAgbWluLWhlaWdodDogMi43cmVtO1xuICAgICAgICAgICAgICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLm1jay1jZW50ZXItc3VmZml4IHtcbiAgICAgICAgICAgICAgICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgICAgICAgICAgICAgICBAZXh0ZW5kIC5tY2stcm93O1xuICAgICAgICAgICAgICAgICAgICBAZXh0ZW5kIC5tY2stY2VudGVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5tY2stc2VsZWN0LWRyb3Bkb3duLWJ1dHRvbiB7XG4gICAgICAgICAgICAgICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMnB4O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1mbGV4IHtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAycmVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWluLWhlaWdodDogMnJlbTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1mb3JtLWZpZWxkLm1hdC1zIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgbWF0LXNlbGVjdCB7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAwLjJyZW07XG5cbiAgICAgICAgICAgIC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYgLm1hdC1zZWxlY3QtdmFsdWUgPiAubWF0LXNlbGVjdC12YWx1ZS10ZXh0ID4gc3BhbiB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICAgICAgICAgIC8vIGNvbG9yOiAjMzMzMzMzICFpbXBvcnRhbnQ7IC8vUi0tLSBibG9ja3MgZGlzYWJsZWQgc3RhdGUgY29sb3JcbiAgICAgICAgICAgICAgICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCxcbiAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsXG4gICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICRib3JkZXI7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5hdmFpbGFibGUge1xuICAgICAgICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICAgICAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LFxuICAgICAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsXG4gICAgICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzNhYTUzNztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAuYm9va2VkIHtcbiAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lIHtcbiAgICAgICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCxcbiAgICAgICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLFxuICAgICAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNlMTJlNDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sge1xuICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Lm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsXG4gICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLFxuICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgICAgICAgICBib3JkZXItd2lkdGg6IDFweDtcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgPiBtYXQtZm9ybS1maWVsZC5tY2stZXJyb3Ige1xuICAgICAgICAgICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgIC8vIGxlc3MganVtcGluZyBmb3IgZXJyb3IgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICAgICAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LFxuICAgICAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsXG4gICAgICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogJGVycm9yLWNvbG9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG1jay1jbG9zZS1pY29uLm1hdC1jaGlwLXJlbW92ZS5tYXQtY2hpcC1yZW1vdmUge1xuICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgbWF0LWxhYmVsIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgIH1cblxuICAgICAgICBtYXQtcmFkaW8tYnV0dG9uIHtcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHNwYWNpbmctc21hbGw7XG4gICAgICAgIH1cblxuICAgICAgICAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnQge1xuICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIH1cblxuICAgICAgICAubWF0LXJhZGlvIHtcbiAgICAgICAgICAgICYtb3V0ZXItY2lyY2xlIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICRwcmltYXJ5ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAxcHggIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi1pbm5lci1jaXJjbGUge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBtYXQtcmFkaW8tZ3JvdXAge1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG5cbiAgICAgICAgICAgICYgPiBtYXQtcmFkaW8tYnV0dG9uOmxhc3QtY2hpbGQge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtY29udGFpbmVyIHtcbiAgICAgICAgICAgID4gLm1jay1mb3JtLWlucHV0LCA+IG1jay1zZWxlY3Qge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nLXh4c21hbGw7XG5cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nLW1lZGl1bS1sYXJnZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tY2stcmFkaW8tc2VsZWN0IHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy1zbWFsbDtcblxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogJHNwYWNpbmctbWVkaXVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwIHtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDEuNXJlbTtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjaGlwLWNvbG9yO1xuICAgICAgICAgICAgcGFkZGluZy10b3A6ICRzcGFjaW5nLXNtYWxsZXN0O1xuICAgICAgICAgICAgcGFkZGluZy1ib3R0b206ICRzcGFjaW5nLXNtYWxsZXN0O1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICAgICAgQGluY2x1ZGUgY2hpcC1sYWJlbDtcbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbWF0LWNoZWNrYm94IHtcbiAgICAgICAgICAgICYubWF0LWNoZWNrYm94Lm1hdC1jaGVja2JveCB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgY2hlY2tib3gtbGFiZWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRpdi5tYXQtY2hlY2tib3gtYmFja2dyb3VuZC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnk7XG5cbiAgICAgICAgICAgICAgICAmLm1jay1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtZGlzYWJsZWQge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYubWNrLWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1kaXNhYmxlZCB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgY2hlY2tib3gtbGFiZWw7XG4gICAgICAgICAgICAgICAgY29sb3I6ICRib3JkZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWJvcmRlcmxlc3Mge1xuICAgICAgICBib3JkZXI6IG5vbmU7XG5cbiAgICAgICAgJjpob3ZlciwgJjpmb2N1cywgJjpkaXNhYmxlZCB7XG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXNlbGVjdC1wYW5lbCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdW5zZXQgIWltcG9ydGFudDtcbiAgICAgICAgbWFyZ2luLXRvcDogMzVweCAhaW1wb3J0YW50O1xuICAgICAgICBtYXJnaW4tbGVmdDogNXB4O1xuXG4gICAgICAgIG1hdC1vcHRpb24ge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMDtcblxuICAgICAgICAgICAgJi5tYXQtb3B0aW9uLXRleHQge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYubWNrLW1hcmdpbi10b3Age1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogJHNwYWNpbmctbWVkaXVtICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWNoZWNrYm94LXBhbmVsIHtcbiAgICAgICAgJi5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsLm1hdC1hdXRvY29tcGxldGUtcGFuZWwge1xuICAgICAgICAgICAgdG9wOiAtMTBweDtcbiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDI3OHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgbWF0LW9wdGlvbi5tY2stdHJ1bmNhdGVkIHtcbiAgICAgICAgICAgICYgLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIG1heC1saW5lcygyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1vcHRpb24ge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICAgICAgICAgICAgaGVpZ2h0OiB1bnNldDtcbiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDM2cHg7XG5cbiAgICAgICAgICAgICYgLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICAgICAgICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYgLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGNoZWNrYm94LWxhYmVsO1xuICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYubWNrLWNoZWNrYm94LWdyb3VwLWhlYWRlciB7XG4gICAgICAgICAgICAgICAgJiAubWF0LWNoZWNrYm94LWxhYmVsLm1hdC1jaGVja2JveC1sYWJlbCB7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLm1jay1jaGVja2JveC1ncm91cC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6ICRzcGFjaW5nLWxhcmdlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtYXQtY2hlY2tib3gge1xuICAgICAgICAgICAgICAgIGxhYmVsLm1hdC1jaGVja2JveC1sYXlvdXQge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMnB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMnB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZGl2Lm1hdC1jaGVja2JveC1mcmFtZS5tYXQtY2hlY2tib3gtZnJhbWUge1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBtY2stY2hlY2tib3gtYm9yZGVyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICYubWF0LWNoZWNrYm94LWNoZWNrZWQge1xuICAgICAgICAgICAgICAgICAgICBkaXYubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmLm1jay1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtZGlzYWJsZWQge1xuICAgICAgICAgICAgICAgICAgICBkaXYubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmLm1jay1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtZGlzYWJsZWQge1xuICAgICAgICAgICAgICAgICAgICAmIC5tYXQtY2hlY2tib3gtbGFiZWwubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGNoZWNrYm94LWxhYmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICRib3JkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXIge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJHNwYWNpbmctc21hbGwtbWVkaXVtO1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICRzcGFjaW5nLXNtYWxsLW1lZGl1bTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXNlbGVjdC1vcHRpb24ge1xuICAgICAgICAmLXNlbGVjdGVkIHtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICAgICAgICAgIGNvbG9yOiBibGFjaztcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG5cbiAgICAgICAgICAgIC5tY2stc3BhY2VyLWNvbnRlbnQge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHNwYWNpbmcteHNtYWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi11bnNlbGVjdGVkIHtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcblxuICAgICAgICAgICAgJi5tY2staWdub3JlLWRpc2FibGVkIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tY2stc3BhY2VyLWNvbnRlbnQge1xuICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6ICRzcGFjaW5nLXhzbWFsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtYnV0dG9uIHtcbiAgICAgICAgJi5tYXQtYnV0dG9uLm1hdC1idXR0b24sICYubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiB7XG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICAgICAgQGV4dGVuZCAubWNrLWNvbHVtbjtcbiAgICAgICAgICAgIEBleHRlbmQgLm1jay1jZW50ZXI7XG4gICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcblxuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbGVzdDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbGVzdDtcbiAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcblxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5tY2stc2hvcnQge1xuICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDgzcHg7XG5cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiAxNTVweDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBzb21lIGNhc2VzIGJ1dHRvbnMgaW4gZGVza3RvcCBhcmUgNDAgdnMgNDhweFxuICAgICAgICAgICAgICAgICYubWNrLXNob3J0LWhlaWdodCB7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogNDBweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5tY2stc3F1YXJlIHtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDMycHg7XG4gICAgICAgICAgICAgICAgbWluLXdpZHRoOiAzMnB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7XG5cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiA0MHB4O1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgICAgIEBleHRlbmQgLm1jay1idXR0b247XG5cbiAgICAgICAgJi5tYXQtYnV0dG9uLm1hdC1idXR0b24ge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnk7XG5cbiAgICAgICAgICAgICZbZGlzYWJsZWRdLCAmLmRpc2FibGVkIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzc1NzU3NTtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuXG4gICAgICAgICAgICAgICAgJiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICM3NTc1NzU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtc2Vjb25kYXJ5LWJ1dHRvbiB7XG4gICAgICAgIEBleHRlbmQgLm1jay1idXR0b247XG5cbiAgICAgICAgJi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIG1jay10aGluLWJ1dHRvbi1ib3JkZXI7XG4gICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjMjI1MUZGO1xuICAgICAgICAgICAgY29sb3I6ICMyMjUxRkY7XG4gICAgICAgICAgICAmW2Rpc2FibGVkXSwgJi5kaXNhYmxlZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgICAgICAgICAgICAgY29sb3I6ICMzMzMzMzM7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYubWF0LWJ1dHRvbi5tYXQtYnV0dG9uIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuXG4gICAgICAgICAgICAmID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkY2hpcC1jb2xvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtd2FybmluZy1idXR0b24ge1xuICAgICAgICBAZXh0ZW5kIC5tY2stYnV0dG9uO1xuXG4gICAgICAgICYubWF0LWJ1dHRvbi5tYXQtYnV0dG9uIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci1icmFuZC15ZWxsb3c7XG5cbiAgICAgICAgICAgICYgPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6IGJsYWNrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1zdHJva2VkLWJ1dHRvbiB7XG4gICAgICAgIEBleHRlbmQgLm1jay1idXR0b247XG5cbiAgICAgICAgJi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIG1jay1idXR0b24tYm9yZGVyO1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctbWVkaXVtLWxhcmdlO1xuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctbWVkaXVtLWxhcmdlO1xuXG4gICAgICAgICAgICAmLm1jay1zaG9ydCB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgICAgICAgICAgIG1pbi13aWR0aDogODNweDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsZXN0O1xuICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsZXN0O1xuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMTU1cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBwcmltYXJ5IGNvbG9yc1xuICAgICAgICAgICAgJi5tY2stcHJpbWFyeSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgICAgICAgICBjb2xvcjogJHByaW1hcnk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYubWNrLXRoaW4tYm9yZGVyLWxpZ2h0IHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMXB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICAgICAgY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi10b2dnbGUtYnV0dG9uIHtcbiAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgICAgICBib3JkZXItY29sb3I6ICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgICAgICBtaW4td2lkdGg6IDU5cHg7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgIG1pbi13aWR0aDogMTMycHg7XG4gICAgICAgICAgICBwYWRkaW5nLXRvcDogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgJi1zZWxlY3RlZCB7XG4gICAgICAgICAgICBjb2xvcjogJHByaW1hcnk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWRhdGUtcGlja2VyIHtcbiAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgICAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7XG5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAyM3JlbTtcbiAgICAgICAgfVxuXG4gICAgICAgICYgPiAuaGVhZGVyLmhlYWRlciB7XG4gICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgICAgIGNvbG9yOiAkZm9ybS1sYWJlbDtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6ICRzcGFjaW5nLXNtYWxsLW1lZGl1bTtcblxuICAgICAgICAgICAgJiA+IC5hcnJvdy5hcnJvdyB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDIuMzc1cmVtO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMnJlbTtcblxuICAgICAgICAgICAgICAgICYgPiAuaWNvbi5pY29uIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDFyZW07XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMXJlbTtcbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICYgPiAubmV4dC5uZXh0IHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdsaWJzL3VpL3NyYy9saWIvaWNvbnMvYXJyb3ctZm9yd2FyZC5zdmcnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmID4gLnByZXZpb3VzLnByZXZpb3VzIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdsaWJzL3VpL3NyYy9saWIvaWNvbnMvYXJyb3ctYmFja3dhcmQuc3ZnJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgfVxuXG4gICAgICAgICYgPiAubW9udGgge1xuICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgIH1cblxuICAgICAgICAmID4gLndlZWsge1xuICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICBjb2xvcjogJHNlY29uZGFyeS1sYWJlbDtcbiAgICAgICAgfVxuXG4gICAgICAgICYgPiAuYm9keSB7XG4gICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuXG4gICAgICAgICAgICAmID4gZGl2ID4gZGl2LmRhdGUge1xuICAgICAgICAgICAgICAgICYgPiAuZG90IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmLmRpc2FibGVkIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAkc2Vjb25kYXJ5LWxhYmVsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICYuYWN0aXZlIHtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJi5ub24tbW9udGgge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJHNlY29uZGFyeS1sYWJlbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXNwYWNlci1jb250ZW50IHtcbiAgICAgICAgJi1jb2xsYXBzZS10YWJsZXQge1xuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKHRhYmxldCkge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWV4cGFuZC1tb2JpbGUge1xuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWRpdmlkZXIge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtZXhwYW5zaW9uLXBhbmVsIHtcbiAgICAgICAgJi5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwge1xuICAgICAgICAgICAgQGluY2x1ZGUgbWF0LWVsZXZhdGlvbigwKTtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHNlbGVjdGVkLW9wdGlvbjtcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkc2VsZWN0ZWQtb3B0aW9uO1xuXG4gICAgICAgICAgICAmLm1jay1leHBhbmRlZCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY29sb3I7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcblxuICAgICAgICAgICAgICAgICYgLm1jay1jb2xsYXBzZS1pY29uIHtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oMjRweCwgJ2NoZXZyb24tY2xvc2Uuc3ZnJyk7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDQ4cHgsICdjaGV2cm9uLWNsb3NlLWxhcmdlLnN2ZycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWF0LWV4cGFuc2lvbi1wYW5lbC1ib2R5IHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMDtcblxuICAgICAgICAgICAgICAgICYgPiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ge1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBib2R5LXRpbnk7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctc21hbGw7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiBibGFjaztcbiAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJiBtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciB7XG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctc21hbGw7XG5cbiAgICAgICAgICAgICYgPiBzcGFuLm1hdC1jb250ZW50IHtcbiAgICAgICAgICAgICAgICAvLyBjZW50ZXIgdGV4dCBhbmQgaWNvbnNcbiAgICAgICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJiBtYXQtcGFuZWwtdGl0bGUge1xuICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICB9XG5cbiAgICAgICAgLm1jay1jb2xsYXBzZS1pY29uIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICdjaGV2cm9uLW9wZW4uc3ZnJyk7XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oNDhweCwgJ2NoZXZyb24tb3Blbi1sYXJnZS5zdmcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNXMgZWFzZTtcbiAgICAgICAgICAgICYuZXhwYW5kZWQge1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWljb24tZmlsbC1vcGVuIHtcbiAgICAgICAgZmlsbDogJHByaW1hcnk7XG4gICAgfVxuXG4gICAgJi1pY29uLWZpbGwtY2xvc2Uge1xuICAgICAgICBmaWxsOiAkc2Vjb25kYXJ5LWxhYmVsO1xuICAgIH1cblxuICAgICYtaWNvbi1maWxsLWJsYWNrIHtcbiAgICAgICAgZmlsbDogYmxhY2s7XG4gICAgICAgIHN0cm9rZTogYmxhY2s7XG4gICAgfVxuXG4gICAgJi1pY29uLWZpbGwtd2hpdGUge1xuICAgICAgICBmaWxsOiB3aGl0ZTtcbiAgICAgICAgc3Ryb2tlOiB3aGl0ZTtcbiAgICB9XG5cbiAgICAmLWljb24tZmlsbC1ncmF5IHtcbiAgICAgICAgZmlsbDogIzMzMzMzMztcbiAgICAgICAgc3Ryb2tlOiAjMzMzMzMzO1xuICAgIH1cblxuICAgICYtbWluIHtcbiAgICAgICAgbWF4LXdpZHRoOiA1ODFweCAhaW1wb3J0YW50O1xuICAgICAgICB3aWR0aDogODB2dztcbiAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgbW9kYWwgaW50byBhIG1vcmUgJ2Z1bGwtc2NyZWVuJyBhcHBlYXJhbmNlIG9uIG1vYmlsZS5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICB3aWR0aDogMTAwdnc7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcblxuICAgICAgICAgICAgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLW5vZXhwYW5kIHtcbiAgICAgICAgbWF4LXdpZHRoOiA1ODFweCAhaW1wb3J0YW50O1xuICAgICAgICB3aWR0aDogODB2dyAhaW1wb3J0YW50O1xuICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBtb2RhbCBpbnRvIGEgbW9yZSAnZnVsbC1zY3JlZW4nIGFwcGVhcmFuY2Ugb24gbW9iaWxlLlxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gMzJweCkgIWltcG9ydGFudDtcbiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1tb2RhbCB7XG4gICAgICAgIG1heC13aWR0aDogODAwcHggIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDgwdnc7XG4gICAgICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIG1vZGFsIGludG8gYSBtb3JlICdmdWxsLXNjcmVlbicgYXBwZWFyYW5jZSBvbiBtb2JpbGUuXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG5cbiAgICAgICAgICAgIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1tb2RhbC1taW5pIHtcbiAgICAgICAgbWF4LXdpZHRoOiA1ODBweCAhaW1wb3J0YW50O1xuICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBtb2RhbCBpbnRvIGEgbW9yZSAnZnVsbC1zY3JlZW4nIGFwcGVhcmFuY2Ugb24gbW9iaWxlLlxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDB2dztcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuXG4gICAgICAgICAgICAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtbW9kYWwtc3VydmV5IHtcbiAgICAgICAgbWF4LXdpZHRoOiA2OTFweCAhaW1wb3J0YW50O1xuICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBtb2RhbCBpbnRvIGEgbW9yZSAnZnVsbC1zY3JlZW4nIGFwcGVhcmFuY2Ugb24gbW9iaWxlLlxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1tb2RhbC13aWRlIHtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDI0cHggIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgICBoZWlnaHQ6IDk1dmg7XG4gICAgICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICAgICAgICAubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4gICAgICAgICAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgLm1hdC1pY29uLWJ1dHRvbltuYW1lPVwiQ2xvc2VCdXR0b25cIl0ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICByaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLmNsb3NlLWltYWdlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMnB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgbW9kYWwgaW50byBhIG1vcmUgJ2Z1bGwtc2NyZWVuJyBhcHBlYXJhbmNlIG9uIG1vYmlsZS5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICB3aWR0aDogMTAwdnc7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgICAgIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICAmLW1vZGFsLXdpZGUtbWFuYWdlLWJvb2tpbmcge1xuICAgICAgICBtYXgtd2lkdGg6IDEyNTBweCAhaW1wb3J0YW50O1xuICAgICAgICB3aWR0aDogMTAwdnc7XG4gICAgICAgIC8vIGhlaWdodDogOTV2aDtcbiAgICAgICAgbWF4LWhlaWdodDogOTV2aDtcbiAgICAgICAgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuICAgICAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgIC8vIG92ZXJmbG93LXk6IGhpZGRlbiAhaW1wb3J0YW50O1xuXG4gICAgICAgICAgICAubWF0LWljb24tYnV0dG9uW25hbWU9XCJDbG9zZUJ1dHRvblwiXSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIHJpZ2h0OiAzMnB4O1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAuY2xvc2UtaW1hZ2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMycHg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBtb2RhbCBpbnRvIGEgbW9yZSAnZnVsbC1zY3JlZW4nIGFwcGVhcmFuY2Ugb24gbW9iaWxlLlxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDB2dztcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICAgICAgICAgICAgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgICYtYWxlcnQge1xuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIG1heC13aWR0aDogMTAwdncgIWltcG9ydGFudDtcbiAgICAgICAgICAgIHdpZHRoOiAxMDB2dztcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHNwYWNpbmctc21hbGw7XG4gICAgICAgIH1cblxuICAgICAgICAmLWJhY2tkcm9wIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICRhbGVydC1vdmVybGF5LWJnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1zbGlkZS10b2dnbGUge1xuICAgICAgICAmLm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQ6bm90KC5tYXQtZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICYgLm1hdC1zbGlkZS10b2dnbGUtYmFyLm1hdC1zbGlkZS10b2dnbGUtYmFyIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeS1oaWdobGlnaHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIubWF0LXNsaWRlLXRvZ2dsZS10aHVtYiB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLm1hdC1zbGlkZS10b2dnbGUge1xuICAgICAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICB9XG5cbiAgICAgICAgLm1hdC1zbGlkZS10b2dnbGUtY29udGVudC5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnQge1xuICAgICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICAgICAgQGluY2x1ZGUgbWF4LWxpbmVzKDIpO1xuICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIge1xuICAgICAgICAgICAgd2lkdGg6IDE0cHg7XG4gICAgICAgICAgICBoZWlnaHQ6IDE0cHg7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg1MCUsIDUwJSk7XG4gICAgICAgIH1cblxuICAgICAgICAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXIubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXIge1xuICAgICAgICAgICAgdG9wOiAtNHB4O1xuICAgICAgICAgICAgbGVmdDogLTRweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5tYXQtc2xpZGUtdG9nZ2xlLWJhci5tYXQtc2xpZGUtdG9nZ2xlLWJhciB7XG4gICAgICAgICAgICBoZWlnaHQ6IDIwcHg7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXNrZWxldG9uIHtcbiAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG5cbiAgICAgICAgJi1jaGVja2JveCB7XG4gICAgICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgICAgICAgICAgIGhlaWdodDogMjBweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1oZWFkZXIgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgIHdpZHRoOiAxMDB2dztcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDIxNXB4O1xuICAgICAgICB9XG5cbiAgICAgICAgJi1pbWFnZSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgQGluY2x1ZGUgcGxhY2Vob2xkZXItaW1hZ2Utc2l6ZTtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgIH1cblxuICAgICAgICAmLXN0YXR1cyA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgQGluY2x1ZGUgcGxhY2Vob2xkZXItc3RhdHVzLXNpemU7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS0xID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICBoZWlnaHQ6IDIzcHg7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDE3NnB4O1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAyMTlweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS0yID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDE2NXB4O1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAxODlweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS0zID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDE0N3B4O1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAxODlweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS0zMHAsICYtbGluZS0zMHAtdGhpbiB7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAzMCU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDMwJTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLXRoaW4ge1xuICAgICAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWxpbmUtNDVwLCAmLWxpbmUtNDVwLXRoaW4ge1xuICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogNDUlO1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA0NSU7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNDUlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYtdGhpbiB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS01MHAsICYtbGluZS01MHAtdGhpbiwgJi1saW5lLTUwcC10aGljayB7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA1MCU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDUwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiA0NSU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGluIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGljayB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS02MHAsICYtbGluZS02MHAtdGhpbiwgJi1saW5lLTYwcC10aGljayB7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA2MCU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDYwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAzNSU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGluIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGljayB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS03MHAsICYtbGluZS03MHAtdGhpbiwgJi1saW5lLTcwcC10aGljayB7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA3MCU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDcwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAyNSU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGluIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGljayB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS04MHAsICYtbGluZS04MHAtdGhpbiwgJi1saW5lLTgwcC10aGljayB7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA4MCU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDgwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNSU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGluIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGljayB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS05MHAsICYtbGluZS05MHAtdGhpbiB7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA5MCU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDkwJTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLXRoaW4ge1xuICAgICAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWxvYWQtbW9yZSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgICAgICB3aWR0aDogY2FsYygxMDB2dyAtICgyICogI3skc3BhY2luZy1zbWFsbH0pKTtcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcblxuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMzIwcHg7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA1MHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1sb2FkLW1vcmUtMTAwcCwgJi1oZWFkZXIsICYtcm9vbS1hdmFpbGFiaWxpdHkge1xuICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICAgICAgICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gKDIgKiAjeyRzcGFjaW5nLXNtYWxsfSkpO1xuICAgICAgICAgICAgICAgIGhlaWdodDogNDBweDtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IG5vbmU7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IG5vbmU7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDUwcHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICYtcm9vbS1hdmFpbGFiaWxpdHkge1xuICAgICAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTI0cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuXG4gICAgfVxufVxuXG5cbi5tY2sge1xuICAgICYtaGVhZGluZy01IHtcbiAgICAgICAgQGluY2x1ZGUgaGVhZGluZy01O1xuICAgIH1cbn1cblxubmd4LW1hdC1zZWxlY3Qtc2VhcmNoIHtcbiAgICAubWF0LXNlbGVjdC1zZWFyY2gtbm8tZW50cmllcy1mb3VuZCB7XG4gICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgfVxuXG4gICAgLm1hdC1zZWxlY3Qtc2VhcmNoLWlucHV0IHtcbiAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICB9XG5cbiAgICBidXR0b24ubWF0LWJ1dHRvbi5tYXQtc2VsZWN0LXNlYXJjaC1jbGVhciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIGNvbG9yOiBibGFjaztcbiAgICB9XG59XG5cbjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgIHdpZHRoOiAxNnB4O1xuICAgIGhlaWdodDogMThweDtcbn1cbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICAgIGhlaWdodDogJHNwYWNpbmctbWVkaXVtO1xuICAgIGJvcmRlcjogNHB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMCk7XG4gICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHNjcm9sbGJhci1jb2xvcjtcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IC0xcHggLTFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjA1KSwgaW5zZXQgMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cbjo6LXdlYmtpdC1zY3JvbGxiYXItYnV0dG9uIHtcbiAgICB3aWR0aDogMDtcbiAgICBoZWlnaHQ6IDA7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cbjo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cbmhlYWRlciB7XG4gICAgei1pbmRleDogMjtcbn1cbi5tYi1ibG9jayB7XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbn1cbi5tYi1ib3R0b20ge1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTEwcHg7XG4gICAgfVxufVxuXG4ubWFwLWZpbHRlcnMtY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgICAgdG9wOiA1cHg7XG4gICAgfVxuICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le1xuICAgICAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICAgIHBhZGRpbmctdG9wOiAkc3BhY2luZy14eHNtYWxsICFpbXBvcnRhbnQ7XG4gICAgfVxufVxuXG4ub2ZmaWNlLWxldmVsLXJvd3tcblxuICAgIC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye1xuICAgICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgfVxuXG4gICAgLmxlZ2VuZC1jb250YWluZXIgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgaGVpZ2h0OiA0NXB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuc2VsZWN0LWRpdmlkZXJ7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB0b3A6IDAgIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDQ0cHggIWltcG9ydGFudDtcbiAgICAgICAgcmlnaHQ6IC0xMXB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICAgIGJvcmRlci13aWR0aDogMCAwIDAgMXB4O1xuICAgICAgICBib3JkZXItY29sb3I6ICNjNmM2YzY7XG4gICAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gMXB4KSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmRpc2FibGVke1xuICAgICAgICAuc2VsZWN0LWRpdmlkZXJ7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjBGMEYwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAycHgpICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLnNlbGVjdC1jaGV2cm9ue1xuICAgICAgICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5vZmZpY2UtbGV2ZWwtcm93LCAubWFwLWNvbnRyb2xze1xuICAgIC5sZWdlbmQtY29udGFpbmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XG4gICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50O1xuICAgIH1cbn1cblxuLmJvb2tpbmctZm9ybS1jb250YWluZXIge1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDMxMHB4KTtcbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgbWF4LWhlaWdodDogbm9uZTtcbiAgICB9XG59XG4uYm9va2luZy1mb3JtLWNvbnRhaW5lciAubWNrLWZvcm0taW5wdXR7XG5cbiAgICBtYXQtc2VsZWN0IHtcbiAgICAgICAgJiAubWF0LXNlbGVjdC12YWx1ZSA+IC5tYXQtc2VsZWN0LXZhbHVlLXRleHQgPiBzcGFuIHtcbiAgICAgICAgICAgIC8vIGNvbG9yOiAjMDUxYzJjICFpbXBvcnRhbnQ7IC8vUi0tLSBibG9ja3MgZGlzYWJsZWQgc3RhdGUgY29sb3JcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG1hdC1sYWJlbCwgLm1hdC1yYWRpby1sYWJlbC1jb250ZW50IHtcbiAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnMgIWltcG9ydGFudDtcbiAgICAgICAgY29sb3I6ICMzMzMzMzM7XG4gICAgfVxuXG4gICAgaW5wdXQsIGlucHV0OjpwbGFjZWhvbGRlcntcbiAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgICAgIGNvbG9yOiAjQjNCM0IzO1xuICAgIH1cbn0iLCJAaW1wb3J0IFwiLi4vc3R5bGVzXCI7XG5cbi5idXR0b24td3JhcHBlciB7XG4gICAgQGV4dGVuZCAubWNrLWNvbHVtbjtcbiAgICBmbGV4LWJhc2lzOiAxMDAlO1xuICAgIGp1c3RpZnktY29udGVudDogZW5kO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIHotaW5kZXg6IDI7XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBib3R0b206IC0wLjVyZW07XG4gICAgICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgICAgIHBhZGRpbmctdG9wOiAkc3BhY2luZy1tZWRpdW0tbGFyZ2U7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAkc3BhY2luZy1tZWRpdW0tbGFyZ2U7XG4gICAgfVxuXG4gICAgJi5oYXMtZml4ZWQge1xuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIHotaW5kZXg6IDI7XG4gICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIH0gICAgICAgIFxuICAgIH1cblxuICAgICYtc3BhY2VyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbiAgICB9XG5cbiAgICAmID4gLmJ1dHRvbi1yb3cge1xuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIC8vIG1vYmlsZSBpcyBzdHVjayB0byB0aGUgYm90dG9tIG9mIHNjcmVlbiwgc28gd2UgbmVlZCB0byBhZGQgcGFkZGluZyBhcm91bmQgaXQuXG4gICAgICAgICAgICBwYWRkaW5nOiAkc3BhY2luZy1zbWFsbDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLm1jay1tb2RhbC1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgZmxleDogMTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW46IDAgJHNwYWNpbmcteHNtYWxsO1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgbWF4LXdpZHRoOiAzMjBweDtcbiAgICB9XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgfVxufVxuXG4ubWNrLW1vZGFsLXNlY29uZGFyeS1idXR0b24ge1xuICAgIGZsZXg6IDE7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luOiAwICRzcGFjaW5nLXhzbWFsbDtcbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIG1heC13aWR0aDogMzIwcHg7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMCAkc3BhY2luZy14c21hbGw7XG4gICAgfVxufVxuXG5cbi5zbWFsbC1idXR0b25zIHtcbiAgICAubWNrLW1vZGFsLXByaW1hcnktYnV0dG9uIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1hcmdpbjogMCAkc3BhY2luZy14c21hbGw7XG4gICAgICAgIG1heC13aWR0aDogMTM0cHg7XG4gICAgXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLm1jay1tb2RhbC1zZWNvbmRhcnktYnV0dG9uIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1hcmdpbjogMCAkc3BhY2luZy14c21hbGw7XG4gICAgICAgIG1heC13aWR0aDogMTM0cHg7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMCAkc3BhY2luZy14c21hbGw7XG4gICAgICAgICAgICBcbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgIH1cbn0iXX0= */"] }); /*@__PURE__*/ @@ -39465,7 +40076,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } }, directives: [i1.MatDialogContent, i2.NgIf, i3.MatButton], - styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n.modal-header[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 2.25rem;\n line-height: 1.111;\n text-align: left;\n -webkit-margin-before: 0;\n margin-block-start: 0;\n -webkit-margin-after: 0;\n margin-block-end: 0;\n margin-bottom: 1.5rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .modal-header[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n line-height: 1.181;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .modal-header[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n line-height: 1.181;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .modal-header[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 2.25rem;\n line-height: 1.111;\n text-align: center;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (orientation: portrait) and (min-width: 451px) {\n .modal-header[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n line-height: 1.181;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (orientation: landscape) and (min-width: 801px) {\n .modal-header[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n line-height: 1.181;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .modal-header[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 2.25rem;\n line-height: 1.111;\n text-align: center;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (orientation: portrait) and (min-width: 451px) {\n .modal-header[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n line-height: 1.181;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (orientation: landscape) and (min-width: 801px) {\n .modal-header[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n line-height: 1.181;\n }\n}\n.modal-container.mat-dialog-content.mat-dialog-content[_ngcontent-%COMP%] {\n padding: 0 1rem 1rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .modal-container.mat-dialog-content.mat-dialog-content[_ngcontent-%COMP%] {\n padding: 0 3rem 0;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .modal-container.mat-dialog-content.mat-dialog-content[_ngcontent-%COMP%] {\n padding: 0 3rem 0;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .modal-container.mat-dialog-content.mat-dialog-content[_ngcontent-%COMP%] {\n max-height: calc(100vh - 58px);\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .modal-container.mat-dialog-content.mat-dialog-content[_ngcontent-%COMP%] {\n max-height: calc(100vh - 58px);\n }\n}\n.modal-top[_ngcontent-%COMP%] {\n background-color: white;\n left: 0;\n right: 0;\n top: 0;\n z-index: 3;\n position: sticky;\n padding-top: 1rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .modal-top[_ngcontent-%COMP%] {\n padding-top: 1.75rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .modal-top[_ngcontent-%COMP%] {\n padding-top: 1.75rem;\n }\n}\n.close-image[_ngcontent-%COMP%] {\n background-repeat: no-repeat;\n cursor: pointer;\n width: 16px;\n height: 16px;\n background-image: url('modal-close.svg');\n background-size: contain;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .close-image[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n background-image: url('modal-close-desktop.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .close-image[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n background-image: url('modal-close-desktop.svg');\n background-size: contain;\n }\n}\n.mat-icon-button[_ngcontent-%COMP%]:hover .mat-button-focus-overlay[_ngcontent-%COMP%] {\n opacity: 0.12 !important;\n}\n.button-row[_ngcontent-%COMP%] {\n height: 30px;\n}\n.button-row[_ngcontent-%COMP%] .mat-icon-button[_ngcontent-%COMP%] {\n position: absolute;\n right: 10px;\n top: 10px;\n}\n.button-row[_ngcontent-%COMP%] .mat-icon-button[_ngcontent-%COMP%]:hover {\n background-color: rgba(0, 0, 0, 0.12);\n}\n.button-row[_ngcontent-%COMP%] .mat-icon-button[_ngcontent-%COMP%]:hover .mat-button-focus-overlay[_ngcontent-%COMP%] {\n opacity: 0.12 !important;\n}\n.modal-container[_ngcontent-%COMP%] .mck-row[_ngcontent-%COMP%] {\n justify-content: end;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJsaWJzL3VpL3NyYy9saWIvbW9kYWwvbW9kYWwuY29tcG9uZW50LnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvbW9kYWwvbW9kYWwuY29tcG9uZW50LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMkNBOztFQUFBO0FBcUNBOztzQkFBQTtBQWFBO0VBQ0ksZ0JBOUZNO0VBK0ZOLHVCQTdGYztBQ09sQjtBRHlGQTs7c0JBQUE7QUVrT0E7OztFQUFBO0FDbFVBO0VEZ0dJLDRCQVppQjtFQWFqQixrQkFBQTtFQUNBLGtCQUFBO0VBa0ZBLGtCQUFBO0VBQ0Esa0JBQUE7RUM5S0EsZ0JBQUE7RUFDQSx3QkFBQTtVQUFBLHFCQUFBO0VBQ0EsdUJBQUE7VUFBQSxtQkFBQTtFQUVBLHFCSGtEYTtBQ25DakI7QUN2Qlk7RUNIWjtJRHdMUSxpQkFBQTtJQUNBLGtCQUFBO0VEMUpOO0FBQ0Y7QUM3Qlk7RUNIWjtJRHdMUSxpQkFBQTtJQUNBLGtCQUFBO0VEcEpOO0FBQ0Y7QUNuQ1k7RUNIWjtJRGdHSSw0QkFaaUI7SUFhakIsa0JBQUE7SUFDQSxrQkFBQTtJQWtGQSxrQkFBQTtJQUNBLGtCQUFBO0lDakxJLGtCQUFBO0VGMkNOO0FBQ0Y7QUM3Q1k7RUNIWjtJRHdMUSxpQkFBQTtJQUNBLGtCQUFBO0VEcElOO0FBQ0Y7QUNuRFk7RUNIWjtJRHdMUSxpQkFBQTtJQUNBLGtCQUFBO0VEOUhOO0FBQ0Y7QUN6RFk7RUNIWjtJRGdHSSw0QkFaaUI7SUFhakIsa0JBQUE7SUFDQSxrQkFBQTtJQWtGQSxrQkFBQTtJQUNBLGtCQUFBO0lDakxJLGtCQUFBO0VGaUVOO0FBQ0Y7QUNuRVk7RUNIWjtJRHdMUSxpQkFBQTtJQUNBLGtCQUFBO0VEOUdOO0FBQ0Y7QUN6RVk7RUNIWjtJRHdMUSxpQkFBQTtJQUNBLGtCQUFBO0VEeEdOO0FBQ0Y7QUVwRUE7RUFDSSxvQkFBQTtBRnVFSjtBQ25GWTtFQ1daO0lBR1EsaUJBQUE7RUZ5RU47QUFDRjtBQ3hGWTtFQ1daO0lBR1EsaUJBQUE7RUY4RU47QUFDRjtBQ3pGWTtFQ09aO0lBTVEsOEJBQUE7RUZnRk47QUFDRjtBQzlGWTtFQ09aO0lBTVEsOEJBQUE7RUZxRk47QUFDRjtBRWxGQTtFQUNJLHVCQUFBO0VBQ0EsT0FBQTtFQUNBLFFBQUE7RUFDQSxNQUFBO0VBQ0EsVUFBQTtFQUNBLGdCQUFBO0VBRUEsaUJIdUJZO0FDNkRoQjtBQ2pIWTtFQ3FCWjtJQVVRLG9CSDhCZTtFQ3dEckI7QUFDRjtBQ3RIWTtFQ3FCWjtJQVVRLG9CSDhCZTtFQzZEckI7QUFDRjtBRXhGQTtFQUNJLDRCQUFBO0VBQ0EsZUFBQTtFRHVTQSxXRjVPUztFRTZPVCxZRjdPUztFRThPVCx3Q0FBQTtFQUNBLHdCQUFBO0FEM01KO0FDcElZO0VDbUNaO0lEeVNJLFdGM09VO0lFNE9WLFlGNU9VO0lFNk9WLGdEQUFBO0lBQ0Esd0JBQUE7RURwTUY7QUFDRjtBQzVJWTtFQ21DWjtJRHlTSSxXRjNPVTtJRTRPVixZRjVPVTtJRTZPVixnREFBQTtJQUNBLHdCQUFBO0VENUxGO0FBQ0Y7QUV2R0c7RUFDSyx3QkFBQTtBRjBHUjtBRXRHQTtFQUNJLFlBQUE7QUZ5R0o7QUV4R0k7RUFDSSxrQkFBQTtFQUNBLFdBQUE7RUFDQSxTQUFBO0FGMEdSO0FFeEdJO0VBQ0kscUNBQUE7QUYwR1I7QUV6R1E7RUFDTSx3QkFBQTtBRjJHZDtBRXJHQTtFQUNJLG9CQUFBO0FGd0dKIiwiZmlsZSI6ImxpYnMvdWkvc3JjL2xpYi9tb2RhbC9tb2RhbC5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIiRwcmltYXJ5OiAjMUY0MEU2O1xuJGZvcm0tbGFiZWw6ICMwNTFDMkM7XG4kc2Vjb25kYXJ5LWxhYmVsOiAjNzY3Njc2O1xuJGJvcmRlcjogI0IzQjNCMztcbiRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkOiAjRDBEMEQwO1xuJGNoaXAtY29sb3I6ICMzMzMzMzM7XG4kcGxhY2Vob2xkZXItY29sb3I6ICM3RjdGN0Y7XG4kYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDtcbiRwYWdlLWJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4kc2VsZWN0ZWQtb3B0aW9uOiAjRTZFNkU2O1xuJGNvbG9yLWJyYW5kLXllbGxvdzogI2ZmZDA0ODtcbiRsaWdodC15ZWxsb3c6ICNmZmYzY2U7XG4kY29hY2htYXJrLXRleHQ6ICM2ZjRkMDA7XG4kZXJyb3ItY29sb3I6ICNFMTJFNDA7XG4kbm8tZmlsdGVycy1jb2xvcjogI0JDQkNCQztcbiRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjogI0Y0RjRGNDtcbiRwcmltYXJ5LWhpZ2hsaWdodDogIzIyNTFGRjtcbiRzY3JvbGxiYXItY29sb3I6ICM3NTc1NzU7XG5cbiRhdmFpbGFibGUtY29sb3I6ICM1RDlENTI7XG4kYXZhaWxhYmxlLWJ5LXJlcXVlc3QtY29sb3I6ICNGNUI1M0Y7XG4kaW4tdXNlLWNvbG9yOiAjRDQ0ODNFO1xuJG5vdC1ib29rYWJsZS1jb2xvcjogI0NDQ0NDQztcblxuJG1vZGFsLWJvZHktaGVhZGluZzogIzRENEQ0RDtcbiRhbGVydC1vdmVybGF5LWJnOiByZ2JhKDUsIDI4LCA0NCwgMC44NSk7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvYWNobWFyay1iZzogI0VCRUJGNjtcbiRjb2FjaG1hcmstZGFyay10ZXh0OiAjMUIxQjE5O1xuJGVycm9yLXRleHQ6ICNmZmY7XG5cbi8qKlxuICogU3BhY2luZ1xuICovXG5cbi8vIDRweFxuJHNwYWNpbmctc21hbGxlc3Q6IDAuMjVyZW07XG5cbi8vIDhweFxuJHNwYWNpbmcteHhzbWFsbDogMC41cmVtO1xuXG4vLyAxMnB4XG4kc3BhY2luZy14c21hbGw6IDAuNzVyZW07XG5cbi8vIDE2cHhcbiRzcGFjaW5nLXNtYWxsOiAxcmVtO1xuXG4vLyAyMHB4XG4kc3BhY2luZy1zbWFsbC1tZWRpdW06IDEuMjVyZW07XG5cbi8vIDI0cHhcbiRzcGFjaW5nLW1lZGl1bTogMS41cmVtO1xuXG4vLyAyOHB4XG4kc3BhY2luZy1tZWRpdW0tbGFyZ2U6IDEuNzVyZW07XG5cbi8vIDMycHhcbiRzcGFjaW5nLWxhcmdlOiAycmVtO1xuXG4vLyA0OHB4XG4kc3BhY2luZy14bGFyZ2U6IDNyZW07XG5cbi8vIDY0cHhcbiRzcGFjaW5nLXh4bGFyZ2U6IDRyZW07XG5cbi8vIDk2cHhcbiRzcGFjaW5nLWxhcmdlc3Q6IDZyZW07XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kZGV2aWNlLW1vYmlsZS1zaXplOiA0NTBweDtcbiRkZXZpY2UtdGFibGV0LXNpemU6IDgwMHB4O1xuJGRldmljZS1sYXB0b3Atc2l6ZTogMTAyNHB4O1xuXG4kZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZTogMTA0OHB4O1xuJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemU6IDEyODBweDtcblxuXG46ZXhwb3J0IHtcbiAgICBwcmltYXJ5OiAkcHJpbWFyeTtcbiAgICBzZWNvbmRhcnlMYWJlbDogJHNlY29uZGFyeS1sYWJlbDtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbiRpY29uLXNtYWxsOiAxNnB4O1xuJGljb24tbWVkaXVtOiAyNHB4O1xuJGljb24tbGFyZ2U6IDMycHg7XG4kaWNvbi14bGFyZ2U6IDQ4cHg7XG4iLCIvKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbi5tb2RhbC1oZWFkZXIge1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXNpemU6IDIuMjVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjExMTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgbWFyZ2luLWJsb2NrLXN0YXJ0OiAwO1xuICBtYXJnaW4tYmxvY2stZW5kOiAwO1xuICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubW9kYWwtaGVhZGVyIHtcbiAgICBmb250LXNpemU6IDIuNXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xODE7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubW9kYWwtaGVhZGVyIHtcbiAgICBmb250LXNpemU6IDIuNXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xODE7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tb2RhbC1oZWFkZXIge1xuICAgIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtc2l6ZTogMi4yNXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xMTE7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubW9kYWwtaGVhZGVyIHtcbiAgICBmb250LXNpemU6IDIuNXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xODE7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubW9kYWwtaGVhZGVyIHtcbiAgICBmb250LXNpemU6IDIuNXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xODE7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubW9kYWwtaGVhZGVyIHtcbiAgICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LXNpemU6IDIuMjVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMTExO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tb2RhbC1oZWFkZXIge1xuICAgIGZvbnQtc2l6ZTogMi41cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubW9kYWwtaGVhZGVyIHtcbiAgICBmb250LXNpemU6IDIuNXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xODE7XG4gIH1cbn1cblxuLm1vZGFsLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRlbnQubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgcGFkZGluZzogMCAxcmVtIDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubW9kYWwtY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGVudC5tYXQtZGlhbG9nLWNvbnRlbnQge1xuICAgIHBhZGRpbmc6IDAgM3JlbSAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1vZGFsLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRlbnQubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwIDNyZW0gMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1vZGFsLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRlbnQubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNThweCk7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubW9kYWwtY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGVudC5tYXQtZGlhbG9nLWNvbnRlbnQge1xuICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSA1OHB4KTtcbiAgfVxufVxuXG4ubW9kYWwtdG9wIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICB0b3A6IDA7XG4gIHotaW5kZXg6IDM7XG4gIHBvc2l0aW9uOiBzdGlja3k7XG4gIHBhZGRpbmctdG9wOiAxcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1vZGFsLXRvcCB7XG4gICAgcGFkZGluZy10b3A6IDEuNzVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubW9kYWwtdG9wIHtcbiAgICBwYWRkaW5nLXRvcDogMS43NXJlbTtcbiAgfVxufVxuXG4uY2xvc2UtaW1hZ2Uge1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHdpZHRoOiAxNnB4O1xuICBoZWlnaHQ6IDE2cHg7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9tb2RhbC1jbG9zZS5zdmdcIik7XG4gIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5jbG9zZS1pbWFnZSB7XG4gICAgd2lkdGg6IDI0cHg7XG4gICAgaGVpZ2h0OiAyNHB4O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9tb2RhbC1jbG9zZS1kZXNrdG9wLnN2Z1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAuY2xvc2UtaW1hZ2Uge1xuICAgIHdpZHRoOiAyNHB4O1xuICAgIGhlaWdodDogMjRweDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvbW9kYWwtY2xvc2UtZGVza3RvcC5zdmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICB9XG59XG5cbi5tYXQtaWNvbi1idXR0b246aG92ZXIgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSB7XG4gIG9wYWNpdHk6IDAuMTIgIWltcG9ydGFudDtcbn1cblxuLmJ1dHRvbi1yb3cge1xuICBoZWlnaHQ6IDMwcHg7XG59XG4uYnV0dG9uLXJvdyAubWF0LWljb24tYnV0dG9uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMTBweDtcbiAgdG9wOiAxMHB4O1xufVxuLmJ1dHRvbi1yb3cgLm1hdC1pY29uLWJ1dHRvbjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xMik7XG59XG4uYnV0dG9uLXJvdyAubWF0LWljb24tYnV0dG9uOmhvdmVyIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkge1xuICBvcGFjaXR5OiAwLjEyICFpbXBvcnRhbnQ7XG59XG5cbi5tb2RhbC1jb250YWluZXIgLm1jay1yb3cge1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGVuZDtcbn0iLCJAaW1wb3J0IFwidmFyc1wiO1xuXG5AbWl4aW4gcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkc2l6ZSwgJHF1YWxpZmllcikge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQGlmICgkcXVhbGlmaWVyID09IG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2UgaWYgKCRxdWFsaWZpZXIgPT0gbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1heC13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuQG1peGluIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkbWluLCAkbWF4KSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyB0aGlzIGlzIGEgY29weSBvZiByZXNwb25kLXRvLiB3ZSBkb24ndCB3YW50IHRvIHByZXNlcnZlIHRoYXQgbWV0aG9kIHNpbmNlIHRoZSBicmVha3BvaW50cyBtYXkgZGl2ZXJnZSBmcm9tIHRoZSBvbGQgVUkuXG5AbWl4aW4gaXMtc2NyZWVuLXNpemUoJG1lZGlhOiBhbGwsICRvcmllbnRhdGlvbjogbm9uZSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5cbkBtaXhpbiBwYWdlLXBhZGRpbmcge1xuICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctc21hbGw7XG4gICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctc21hbGw7XG59XG5cbi8vIEZvbnQgTWl4aW5zXG4kZm9udC1tY2tpbnNleS1zYW5zOiBcIk1jS2luc2V5IFNhbnNcIjtcbiRmb250LXRoZWluaGFyZHQ6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuJGZvbnQtYm93ZXI6IFwiQm93ZXJcIjtcblxuQG1peGluIGJvd2VyLWJvbGQge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1ib3dlcjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gbWNraW5zZXktc2FucyB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIGRpc3BsYXktMSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNHJlbTsgLy8gNjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODc7IC8vIDc2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTIge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTMge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2MHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNCB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDNyZW07IC8vIDQ4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNjY7IC8vIDU2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjRweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMwcHhcbiAgICBsaW5lLWhlaWdodDogMS44MzM7IC8vIDM0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY0MjsgLy8gNDBweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0xIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNDhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNzVyZW07IC8vIDQ0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA1MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0yIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjExMTsgLy8gNDRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDQ4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTMge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMjI7IC8vIDQ0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTUge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTYge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTU7IC8vIDI4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBib2R5LWRlZmF1bHQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjZweFxuICAgIH1cbn1cblxuLy8vIERvZXNudCBleGlzdCBpbiBNRFMuXG5AbWl4aW4gYm9keS10aW55IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTsgLy8gMTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDIwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBmb3JtLWxhYmVsIHtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC10aGVpbmhhcmR0O1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBjb2xvcjogJHBsYWNlaG9sZGVyLWNvbG9yO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG59XG5cbkBtaXhpbiBjaGlwLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gY2hlY2tib3gtbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICBjb2xvcjogYmxhY2s7XG59XG5cbi8vIGJvcmRlcnNcblxuQG1peGluIG1jay1jaGVja2JveC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stdGhpbi1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYm9yZGVyLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQtbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlci1saWdodDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cblxuLy8gZnVuY3Rpb25zXG5cbi8qKlxuICogTWFrZXMgdGV4dCBoYXZlIG1heGltdW0gbGluZXMgd2l0aCBlbGxpcHNpcy4gV29ya3Mgb24gbW9zdCBtb2Rlcm4gYnJvd3NlcnMgZXhjZXB0XG4gKiBvZiBGaXJlZm94Li5cbiAqL1xuQG1peGluIG1heC1saW5lcygkY291bnQpIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIC13ZWJraXQtbGluZS1jbGFtcDogJGNvdW50O1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG59XG5cbi8vIGltYWdlc1xuQG1peGluIG1jay1pY29uKCR3aWR0aCwgJGFzc2V0LCAkaGVpZ2h0OiAkd2lkdGgsICAkYXNzZXRQYXRoOiBcImxpYnMvdWkvc3JjL2xpYi9pY29uc1wiLCkge1xuICAgIHdpZHRoOiAkd2lkdGg7XG4gICAgaGVpZ2h0OiAkaGVpZ2h0O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiN7JGFzc2V0UGF0aH0vI3skYXNzZXR9XCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbn1cblxuXG5AbWl4aW4gbWNrLXNtYWxsLWljb24oJG1vYmlsZS1hc3NldCwgJGRlc2t0b3AtYXNzZXQ6ICRtb2JpbGUtYXNzZXQpIHtcbiAgICBAaW5jbHVkZSBtY2staWNvbigxNnB4LCAkYXNzZXQ6ICRtb2JpbGUtYXNzZXQpO1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBAaW5jbHVkZSBtY2staWNvbigyNHB4LCAkYXNzZXQ6ICRkZXNrdG9wLWFzc2V0KTtcbiAgICB9XG59XG5cbi8vIHNrZWxldG9uXG5AbWl4aW4gc2tlbGV0b24tYmcge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1pbWFnZS1zaXplIHtcbiAgICB3aWR0aDogODFweDtcbiAgICBoZWlnaHQ6IDgycHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAyMTlweDtcbiAgICAgICAgaGVpZ2h0OiAxMTlweDtcbiAgICB9XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1zdGF0dXMtc2l6ZSB7XG4gICAgd2lkdGg6IDExN3B4O1xuICAgIGhlaWdodDogNzhweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDExN3B4O1xuICAgICAgICBoZWlnaHQ6IDc4cHg7XG4gICAgfVxufVxuIiwiQGltcG9ydCBcIi4uL21peGluc1wiO1xuXG4ubW9kYWwtaGVhZGVyIHtcbiAgICBAaW5jbHVkZSBoZWFkaW5nLTI7XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBAaW5jbHVkZSBoZWFkaW5nLTI7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG5cbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIG1hcmdpbi1ibG9jay1zdGFydDogMDtcbiAgICBtYXJnaW4tYmxvY2stZW5kOiAwO1xuXG4gICAgbWFyZ2luLWJvdHRvbTogJHNwYWNpbmctbWVkaXVtO1xufVxuXG4ubW9kYWwtY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGVudC5tYXQtZGlhbG9nLWNvbnRlbnQge1xuICAgIHBhZGRpbmc6IDAgJHNwYWNpbmctc21hbGwgJHNwYWNpbmctc21hbGw7XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBwYWRkaW5nOiAwICRzcGFjaW5nLXhsYXJnZSAwO1xuICAgIH1cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDU4cHgpO1xuICAgIH1cbn1cblxuLm1vZGFsLXRvcCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICB0b3A6IDA7XG4gICAgei1pbmRleDogMztcbiAgICBwb3NpdGlvbjogc3RpY2t5O1xuXG4gICAgcGFkZGluZy10b3A6ICRzcGFjaW5nLXNtYWxsO1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgcGFkZGluZy10b3A6ICRzcGFjaW5nLW1lZGl1bS1sYXJnZTtcbiAgICB9XG59XG5cbi5jbG9zZS1pbWFnZSB7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgQGluY2x1ZGUgbWNrLWljb24oJGljb24tc21hbGwsICdtb2RhbC1jbG9zZS5zdmcnKTtcbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIEBpbmNsdWRlIG1jay1pY29uKCRpY29uLW1lZGl1bSwgJ21vZGFsLWNsb3NlLWRlc2t0b3Auc3ZnJyk7XG4gICAgfVxufVxuXG4ubWF0LWljb24tYnV0dG9uOmhvdmVyIHtcbiAgIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkge1xuICAgICAgICBvcGFjaXR5OiAwLjEyICFpbXBvcnRhbnQ7XG4gICAgfVxufVxuXG4uYnV0dG9uLXJvdyB7XG4gICAgaGVpZ2h0OiAzMHB4O1xuICAgIC5tYXQtaWNvbi1idXR0b24gIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogMTBweDtcbiAgICAgICAgdG9wOiAxMHB4O1xuICAgIH1cbiAgICAubWF0LWljb24tYnV0dG9uOmhvdmVyICB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwwLDAsIDAuMTIpO1xuICAgICAgICAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5IHtcbiAgICAgICAgICAgICAgb3BhY2l0eTogMC4xMiAhaW1wb3J0YW50O1xuXG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5tb2RhbC1jb250YWluZXIgLm1jay1yb3d7XG4gICAganVzdGlmeS1jb250ZW50OiBlbmQ7XG59XG5cbiJdfQ== */"] + styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n.modal-header[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 2.25rem;\n line-height: 1.111;\n text-align: left;\n -webkit-margin-before: 0;\n margin-block-start: 0;\n -webkit-margin-after: 0;\n margin-block-end: 0;\n margin-bottom: 1.5rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .modal-header[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n line-height: 1.181;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .modal-header[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n line-height: 1.181;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .modal-header[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 2.25rem;\n line-height: 1.111;\n text-align: center;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (orientation: portrait) and (min-width: 451px) {\n .modal-header[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n line-height: 1.181;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (orientation: landscape) and (min-width: 801px) {\n .modal-header[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n line-height: 1.181;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .modal-header[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 2.25rem;\n line-height: 1.111;\n text-align: center;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (orientation: portrait) and (min-width: 451px) {\n .modal-header[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n line-height: 1.181;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (orientation: landscape) and (min-width: 801px) {\n .modal-header[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n line-height: 1.181;\n }\n}\n.modal-container.mat-dialog-content.mat-dialog-content[_ngcontent-%COMP%] {\n padding: 0 1rem 1rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .modal-container.mat-dialog-content.mat-dialog-content[_ngcontent-%COMP%] {\n padding: 0 3rem 0;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .modal-container.mat-dialog-content.mat-dialog-content[_ngcontent-%COMP%] {\n padding: 0 3rem 0;\n }\n}\n.modal-top[_ngcontent-%COMP%] {\n background-color: white;\n left: 0;\n right: 0;\n top: 0;\n z-index: 3;\n position: sticky;\n padding-top: 1rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .modal-top[_ngcontent-%COMP%] {\n padding-top: 1.75rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .modal-top[_ngcontent-%COMP%] {\n padding-top: 1.75rem;\n }\n}\n.close-image[_ngcontent-%COMP%] {\n background-repeat: no-repeat;\n cursor: pointer;\n width: 16px;\n height: 16px;\n background-image: url('modal-close.svg');\n background-size: contain;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .close-image[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n background-image: url('modal-close-desktop.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .close-image[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n background-image: url('modal-close-desktop.svg');\n background-size: contain;\n }\n}\n.mat-icon-button[_ngcontent-%COMP%]:hover .mat-button-focus-overlay[_ngcontent-%COMP%] {\n opacity: 0.12 !important;\n}\n.button-row[_ngcontent-%COMP%] {\n height: 30px;\n}\n.button-row[_ngcontent-%COMP%] .mat-icon-button[_ngcontent-%COMP%] {\n position: absolute;\n right: 10px;\n top: 10px;\n}\n.button-row[_ngcontent-%COMP%] .mat-icon-button[_ngcontent-%COMP%]:hover {\n background-color: rgba(0, 0, 0, 0.12);\n}\n.button-row[_ngcontent-%COMP%] .mat-icon-button[_ngcontent-%COMP%]:hover .mat-button-focus-overlay[_ngcontent-%COMP%] {\n opacity: 0.12 !important;\n}\n.modal-container[_ngcontent-%COMP%] .mck-row[_ngcontent-%COMP%] {\n justify-content: end;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJsaWJzL3VpL3NyYy9saWIvbW9kYWwvbW9kYWwuY29tcG9uZW50LnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvbW9kYWwvbW9kYWwuY29tcG9uZW50LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMkNBOztFQUFBO0FBcUNBOztzQkFBQTtBQWFBO0VBQ0ksZ0JBOUZNO0VBK0ZOLHVCQTdGYztBQ09sQjtBRHlGQTs7c0JBQUE7QUVrT0E7OztFQUFBO0FDbFVBO0VEZ0dJLDRCQVppQjtFQWFqQixrQkFBQTtFQUNBLGtCQUFBO0VBa0ZBLGtCQUFBO0VBQ0Esa0JBQUE7RUM5S0EsZ0JBQUE7RUFDQSx3QkFBQTtVQUFBLHFCQUFBO0VBQ0EsdUJBQUE7VUFBQSxtQkFBQTtFQUVBLHFCSGtEYTtBQ25DakI7QUN2Qlk7RUNIWjtJRHdMUSxpQkFBQTtJQUNBLGtCQUFBO0VEMUpOO0FBQ0Y7QUM3Qlk7RUNIWjtJRHdMUSxpQkFBQTtJQUNBLGtCQUFBO0VEcEpOO0FBQ0Y7QUNuQ1k7RUNIWjtJRGdHSSw0QkFaaUI7SUFhakIsa0JBQUE7SUFDQSxrQkFBQTtJQWtGQSxrQkFBQTtJQUNBLGtCQUFBO0lDakxJLGtCQUFBO0VGMkNOO0FBQ0Y7QUM3Q1k7RUNIWjtJRHdMUSxpQkFBQTtJQUNBLGtCQUFBO0VEcElOO0FBQ0Y7QUNuRFk7RUNIWjtJRHdMUSxpQkFBQTtJQUNBLGtCQUFBO0VEOUhOO0FBQ0Y7QUN6RFk7RUNIWjtJRGdHSSw0QkFaaUI7SUFhakIsa0JBQUE7SUFDQSxrQkFBQTtJQWtGQSxrQkFBQTtJQUNBLGtCQUFBO0lDakxJLGtCQUFBO0VGaUVOO0FBQ0Y7QUNuRVk7RUNIWjtJRHdMUSxpQkFBQTtJQUNBLGtCQUFBO0VEOUdOO0FBQ0Y7QUN6RVk7RUNIWjtJRHdMUSxpQkFBQTtJQUNBLGtCQUFBO0VEeEdOO0FBQ0Y7QUVwRUE7RUFDSSxvQkFBQTtBRnVFSjtBQ25GWTtFQ1daO0lBR1EsaUJBQUE7RUZ5RU47QUFDRjtBQ3hGWTtFQ1daO0lBR1EsaUJBQUE7RUY4RU47QUFDRjtBRXhFQTtFQUNJLHVCQUFBO0VBQ0EsT0FBQTtFQUNBLFFBQUE7RUFDQSxNQUFBO0VBQ0EsVUFBQTtFQUNBLGdCQUFBO0VBRUEsaUJIdUJZO0FDa0RoQjtBQ3RHWTtFQ3FCWjtJQVVRLG9CSDhCZTtFQzZDckI7QUFDRjtBQzNHWTtFQ3FCWjtJQVVRLG9CSDhCZTtFQ2tEckI7QUFDRjtBRTdFQTtFQUNJLDRCQUFBO0VBQ0EsZUFBQTtFRHVTQSxXRjVPUztFRTZPVCxZRjdPUztFRThPVCx3Q0FBQTtFQUNBLHdCQUFBO0FEdE5KO0FDekhZO0VDbUNaO0lEeVNJLFdGM09VO0lFNE9WLFlGNU9VO0lFNk9WLGdEQUFBO0lBQ0Esd0JBQUE7RUQvTUY7QUFDRjtBQ2pJWTtFQ21DWjtJRHlTSSxXRjNPVTtJRTRPVixZRjVPVTtJRTZPVixnREFBQTtJQUNBLHdCQUFBO0VEdk1GO0FBQ0Y7QUU1Rkc7RUFDSyx3QkFBQTtBRitGUjtBRTNGQTtFQUNJLFlBQUE7QUY4Rko7QUU3Rkk7RUFDSSxrQkFBQTtFQUNBLFdBQUE7RUFDQSxTQUFBO0FGK0ZSO0FFN0ZJO0VBQ0kscUNBQUE7QUYrRlI7QUU5RlE7RUFDTSx3QkFBQTtBRmdHZDtBRTFGQTtFQUNJLG9CQUFBO0FGNkZKIiwiZmlsZSI6ImxpYnMvdWkvc3JjL2xpYi9tb2RhbC9tb2RhbC5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIiRwcmltYXJ5OiAjMUY0MEU2O1xuJGZvcm0tbGFiZWw6ICMwNTFDMkM7XG4kc2Vjb25kYXJ5LWxhYmVsOiAjNzY3Njc2O1xuJGJvcmRlcjogI0IzQjNCMztcbiRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkOiAjRDBEMEQwO1xuJGNoaXAtY29sb3I6ICMzMzMzMzM7XG4kcGxhY2Vob2xkZXItY29sb3I6ICM3RjdGN0Y7XG4kYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDtcbiRwYWdlLWJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4kc2VsZWN0ZWQtb3B0aW9uOiAjRTZFNkU2O1xuJGNvbG9yLWJyYW5kLXllbGxvdzogI2ZmZDA0ODtcbiRsaWdodC15ZWxsb3c6ICNmZmYzY2U7XG4kY29hY2htYXJrLXRleHQ6ICM2ZjRkMDA7XG4kZXJyb3ItY29sb3I6ICNFMTJFNDA7XG4kbm8tZmlsdGVycy1jb2xvcjogI0JDQkNCQztcbiRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjogI0Y0RjRGNDtcbiRwcmltYXJ5LWhpZ2hsaWdodDogIzIyNTFGRjtcbiRzY3JvbGxiYXItY29sb3I6ICM3NTc1NzU7XG5cbiRhdmFpbGFibGUtY29sb3I6ICM1RDlENTI7XG4kYXZhaWxhYmxlLWJ5LXJlcXVlc3QtY29sb3I6ICNGNUI1M0Y7XG4kaW4tdXNlLWNvbG9yOiAjRDQ0ODNFO1xuJG5vdC1ib29rYWJsZS1jb2xvcjogI0NDQ0NDQztcblxuJG1vZGFsLWJvZHktaGVhZGluZzogIzRENEQ0RDtcbiRhbGVydC1vdmVybGF5LWJnOiByZ2JhKDUsIDI4LCA0NCwgMC44NSk7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvYWNobWFyay1iZzogI0VCRUJGNjtcbiRjb2FjaG1hcmstZGFyay10ZXh0OiAjMUIxQjE5O1xuJGVycm9yLXRleHQ6ICNmZmY7XG5cbi8qKlxuICogU3BhY2luZ1xuICovXG5cbi8vIDRweFxuJHNwYWNpbmctc21hbGxlc3Q6IDAuMjVyZW07XG5cbi8vIDhweFxuJHNwYWNpbmcteHhzbWFsbDogMC41cmVtO1xuXG4vLyAxMnB4XG4kc3BhY2luZy14c21hbGw6IDAuNzVyZW07XG5cbi8vIDE2cHhcbiRzcGFjaW5nLXNtYWxsOiAxcmVtO1xuXG4vLyAyMHB4XG4kc3BhY2luZy1zbWFsbC1tZWRpdW06IDEuMjVyZW07XG5cbi8vIDI0cHhcbiRzcGFjaW5nLW1lZGl1bTogMS41cmVtO1xuXG4vLyAyOHB4XG4kc3BhY2luZy1tZWRpdW0tbGFyZ2U6IDEuNzVyZW07XG5cbi8vIDMycHhcbiRzcGFjaW5nLWxhcmdlOiAycmVtO1xuXG4vLyA0OHB4XG4kc3BhY2luZy14bGFyZ2U6IDNyZW07XG5cbi8vIDY0cHhcbiRzcGFjaW5nLXh4bGFyZ2U6IDRyZW07XG5cbi8vIDk2cHhcbiRzcGFjaW5nLWxhcmdlc3Q6IDZyZW07XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kZGV2aWNlLW1vYmlsZS1zaXplOiA0NTBweDtcbiRkZXZpY2UtdGFibGV0LXNpemU6IDgwMHB4O1xuJGRldmljZS1sYXB0b3Atc2l6ZTogMTAyNHB4O1xuXG4kZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZTogMTA0OHB4O1xuJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemU6IDEyODBweDtcblxuXG46ZXhwb3J0IHtcbiAgICBwcmltYXJ5OiAkcHJpbWFyeTtcbiAgICBzZWNvbmRhcnlMYWJlbDogJHNlY29uZGFyeS1sYWJlbDtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbiRpY29uLXNtYWxsOiAxNnB4O1xuJGljb24tbWVkaXVtOiAyNHB4O1xuJGljb24tbGFyZ2U6IDMycHg7XG4kaWNvbi14bGFyZ2U6IDQ4cHg7XG4iLCIvKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbi5tb2RhbC1oZWFkZXIge1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXNpemU6IDIuMjVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjExMTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgbWFyZ2luLWJsb2NrLXN0YXJ0OiAwO1xuICBtYXJnaW4tYmxvY2stZW5kOiAwO1xuICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubW9kYWwtaGVhZGVyIHtcbiAgICBmb250LXNpemU6IDIuNXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xODE7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubW9kYWwtaGVhZGVyIHtcbiAgICBmb250LXNpemU6IDIuNXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xODE7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tb2RhbC1oZWFkZXIge1xuICAgIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtc2l6ZTogMi4yNXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xMTE7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubW9kYWwtaGVhZGVyIHtcbiAgICBmb250LXNpemU6IDIuNXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xODE7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubW9kYWwtaGVhZGVyIHtcbiAgICBmb250LXNpemU6IDIuNXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xODE7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubW9kYWwtaGVhZGVyIHtcbiAgICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LXNpemU6IDIuMjVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMTExO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tb2RhbC1oZWFkZXIge1xuICAgIGZvbnQtc2l6ZTogMi41cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubW9kYWwtaGVhZGVyIHtcbiAgICBmb250LXNpemU6IDIuNXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xODE7XG4gIH1cbn1cblxuLm1vZGFsLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRlbnQubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgcGFkZGluZzogMCAxcmVtIDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubW9kYWwtY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGVudC5tYXQtZGlhbG9nLWNvbnRlbnQge1xuICAgIHBhZGRpbmc6IDAgM3JlbSAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1vZGFsLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRlbnQubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwIDNyZW0gMDtcbiAgfVxufVxuLm1vZGFsLXRvcCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgdG9wOiAwO1xuICB6LWluZGV4OiAzO1xuICBwb3NpdGlvbjogc3RpY2t5O1xuICBwYWRkaW5nLXRvcDogMXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tb2RhbC10b3Age1xuICAgIHBhZGRpbmctdG9wOiAxLjc1cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1vZGFsLXRvcCB7XG4gICAgcGFkZGluZy10b3A6IDEuNzVyZW07XG4gIH1cbn1cblxuLmNsb3NlLWltYWdlIHtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB3aWR0aDogMTZweDtcbiAgaGVpZ2h0OiAxNnB4O1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvbW9kYWwtY2xvc2Uuc3ZnXCIpO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAuY2xvc2UtaW1hZ2Uge1xuICAgIHdpZHRoOiAyNHB4O1xuICAgIGhlaWdodDogMjRweDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvbW9kYWwtY2xvc2UtZGVza3RvcC5zdmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLmNsb3NlLWltYWdlIHtcbiAgICB3aWR0aDogMjRweDtcbiAgICBoZWlnaHQ6IDI0cHg7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwibGlicy91aS9zcmMvbGliL2ljb25zL21vZGFsLWNsb3NlLWRlc2t0b3Auc3ZnXCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbiAgfVxufVxuXG4ubWF0LWljb24tYnV0dG9uOmhvdmVyIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkge1xuICBvcGFjaXR5OiAwLjEyICFpbXBvcnRhbnQ7XG59XG5cbi5idXR0b24tcm93IHtcbiAgaGVpZ2h0OiAzMHB4O1xufVxuLmJ1dHRvbi1yb3cgLm1hdC1pY29uLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDEwcHg7XG4gIHRvcDogMTBweDtcbn1cbi5idXR0b24tcm93IC5tYXQtaWNvbi1idXR0b246aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMTIpO1xufVxuLmJ1dHRvbi1yb3cgLm1hdC1pY29uLWJ1dHRvbjpob3ZlciAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5IHtcbiAgb3BhY2l0eTogMC4xMiAhaW1wb3J0YW50O1xufVxuXG4ubW9kYWwtY29udGFpbmVyIC5tY2stcm93IHtcbiAganVzdGlmeS1jb250ZW50OiBlbmQ7XG59IiwiQGltcG9ydCBcInZhcnNcIjtcblxuQG1peGluIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJHNpemUsICRxdWFsaWZpZXIpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBpZiAoJHF1YWxpZmllciA9PSBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIGlmICgkcXVhbGlmaWVyID09IG1heC13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtYXgtd2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBtaXhpbiBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJG1pbiwgJG1heCkge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gdGhpcyBpcyBhIGNvcHkgb2YgcmVzcG9uZC10by4gd2UgZG9uJ3Qgd2FudCB0byBwcmVzZXJ2ZSB0aGF0IG1ldGhvZCBzaW5jZSB0aGUgYnJlYWtwb2ludHMgbWF5IGRpdmVyZ2UgZnJvbSB0aGUgb2xkIFVJLlxuQG1peGluIGlzLXNjcmVlbi1zaXplKCRtZWRpYTogYWxsLCAkb3JpZW50YXRpb246IG5vbmUpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuXG5AbWl4aW4gcGFnZS1wYWRkaW5nIHtcbiAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xufVxuXG4vLyBGb250IE1peGluc1xuJGZvbnQtbWNraW5zZXktc2FuczogXCJNY0tpbnNleSBTYW5zXCI7XG4kZm9udC10aGVpbmhhcmR0OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiRmb250LWJvd2VyOiBcIkJvd2VyXCI7XG5cbkBtaXhpbiBib3dlci1ib2xkIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtYm93ZXI7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIG1ja2luc2V5LXNhbnMge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBkaXNwbGF5LTEge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDRyZW07IC8vIDY0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTg3OyAvLyA3NnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0yIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0zIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTQge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzcmVtOyAvLyA0OHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTY2OyAvLyA1NnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDY0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTUge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuODMzOyAvLyAzNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42NDI7IC8vIDQwcHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTcge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDQ4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjc1cmVtOyAvLyA0NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNTJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICBsaW5lLWhlaWdodDogMS4xMTE7IC8vIDQ0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA0OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0zIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjIyOyAvLyA0NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy00IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy01IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyODhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy02IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTU1OyAvLyAyOHB4XG4gICAgfVxufVxuXG5AbWl4aW4gYm9keS1kZWZhdWx0IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI2cHhcbiAgICB9XG59XG5cbi8vLyBEb2VzbnQgZXhpc3QgaW4gTURTLlxuQG1peGluIGJvZHktdGlueSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07IC8vIDEycHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyMHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZm9ybS1sYWJlbCB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LWZhbWlseTogJGZvbnQtdGhlaW5oYXJkdDtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgY29sb3I6ICRwbGFjZWhvbGRlci1jb2xvcjtcbiAgICBmb250LXdlaWdodDogMzAwO1xufVxuXG5AbWl4aW4gY2hpcC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIGNoZWNrYm94LWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgY29sb3I6IGJsYWNrO1xufVxuXG4vLyBib3JkZXJzXG5cbkBtaXhpbiBtY2stY2hlY2tib3gtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAycHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLXRoaW4tYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlci1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJvcmRlci1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50LWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXItbGlnaHQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5cbi8vIGZ1bmN0aW9uc1xuXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbkBtaXhpbiBtYXgtbGluZXMoJGNvdW50KSB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAtd2Via2l0LWxpbmUtY2xhbXA6ICRjb3VudDtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuXG4vLyBpbWFnZXNcbkBtaXhpbiBtY2staWNvbigkd2lkdGgsICRhc3NldCwgJGhlaWdodDogJHdpZHRoLCAgJGFzc2V0UGF0aDogXCJsaWJzL3VpL3NyYy9saWIvaWNvbnNcIiwpIHtcbiAgICB3aWR0aDogJHdpZHRoO1xuICAgIGhlaWdodDogJGhlaWdodDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIjeyRhc3NldFBhdGh9LyN7JGFzc2V0fVwiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG59XG5cblxuQG1peGluIG1jay1zbWFsbC1pY29uKCRtb2JpbGUtYXNzZXQsICRkZXNrdG9wLWFzc2V0OiAkbW9iaWxlLWFzc2V0KSB7XG4gICAgQGluY2x1ZGUgbWNrLWljb24oMTZweCwgJGFzc2V0OiAkbW9iaWxlLWFzc2V0KTtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oMjRweCwgJGFzc2V0OiAkZGVza3RvcC1hc3NldCk7XG4gICAgfVxufVxuXG4vLyBza2VsZXRvblxuQG1peGluIHNrZWxldG9uLWJnIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItaW1hZ2Utc2l6ZSB7XG4gICAgd2lkdGg6IDgxcHg7XG4gICAgaGVpZ2h0OiA4MnB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMjE5cHg7XG4gICAgICAgIGhlaWdodDogMTE5cHg7XG4gICAgfVxufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItc3RhdHVzLXNpemUge1xuICAgIHdpZHRoOiAxMTdweDtcbiAgICBoZWlnaHQ6IDc4cHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAxMTdweDtcbiAgICAgICAgaGVpZ2h0OiA3OHB4O1xuICAgIH1cbn1cbiIsIkBpbXBvcnQgXCIuLi9taXhpbnNcIjtcblxuLm1vZGFsLWhlYWRlciB7XG4gICAgQGluY2x1ZGUgaGVhZGluZy0yO1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgQGluY2x1ZGUgaGVhZGluZy0yO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgfVxuXG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBtYXJnaW4tYmxvY2stc3RhcnQ6IDA7XG4gICAgbWFyZ2luLWJsb2NrLWVuZDogMDtcblxuICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nLW1lZGl1bTtcbn1cblxuLm1vZGFsLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRlbnQubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwICRzcGFjaW5nLXNtYWxsICRzcGFjaW5nLXNtYWxsO1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgcGFkZGluZzogMCAkc3BhY2luZy14bGFyZ2UgMDtcbiAgICB9XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgIC8vIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSA1OHB4KTtcbiAgICB9XG59XG5cbi5tb2RhbC10b3Age1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgdG9wOiAwO1xuICAgIHotaW5kZXg6IDM7XG4gICAgcG9zaXRpb246IHN0aWNreTtcblxuICAgIHBhZGRpbmctdG9wOiAkc3BhY2luZy1zbWFsbDtcbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIHBhZGRpbmctdG9wOiAkc3BhY2luZy1tZWRpdW0tbGFyZ2U7XG4gICAgfVxufVxuXG4uY2xvc2UtaW1hZ2Uge1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIEBpbmNsdWRlIG1jay1pY29uKCRpY29uLXNtYWxsLCAnbW9kYWwtY2xvc2Uuc3ZnJyk7XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBAaW5jbHVkZSBtY2staWNvbigkaWNvbi1tZWRpdW0sICdtb2RhbC1jbG9zZS1kZXNrdG9wLnN2ZycpO1xuICAgIH1cbn1cblxuLm1hdC1pY29uLWJ1dHRvbjpob3ZlciB7XG4gICAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5IHtcbiAgICAgICAgb3BhY2l0eTogMC4xMiAhaW1wb3J0YW50O1xuICAgIH1cbn1cblxuLmJ1dHRvbi1yb3cge1xuICAgIGhlaWdodDogMzBweDtcbiAgICAubWF0LWljb24tYnV0dG9uICB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgcmlnaHQ6IDEwcHg7XG4gICAgICAgIHRvcDogMTBweDtcbiAgICB9XG4gICAgLm1hdC1pY29uLWJ1dHRvbjpob3ZlciAge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsMCwwLCAwLjEyKTtcbiAgICAgICAgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSB7XG4gICAgICAgICAgICAgIG9wYWNpdHk6IDAuMTIgIWltcG9ydGFudDtcblxuICAgICAgICB9XG4gICAgfVxufVxuXG4ubW9kYWwtY29udGFpbmVyIC5tY2stcm93e1xuICAgIGp1c3RpZnktY29udGVudDogZW5kO1xufVxuXG4iXX0= */"] }); /*@__PURE__*/ @@ -40030,13 +40641,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super58 = _createSuper(RadioSelectComponent); function RadioSelectComponent(vcRef) { - var _this162; + var _this161; _classCallCheck(this, RadioSelectComponent); - _this162 = _super58.call(this, vcRef); - _this162.value = new rxjs_1.BehaviorSubject(undefined); - return _this162; + _this161 = _super58.call(this, vcRef); + _this161.value = new rxjs_1.BehaviorSubject(undefined); + return _this161; } _createClass(RadioSelectComponent, [{ @@ -40244,14 +40855,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons _createClass(RecurringBookingForm, [{ key: "ngOnInit", value: function ngOnInit() { - var _this163 = this; + var _this162 = this; this._org.initialised.pipe(operators_1.first(function (_) { return _; })).subscribe(function () { var _a, _b; - _this163.building_tz = ((_b = (_a = _this163._org) === null || _a === void 0 ? void 0 : _a.building) === null || _b === void 0 ? void 0 : _b.timezone) || 'America/Chicago'; + _this162.building_tz = ((_b = (_a = _this162._org) === null || _a === void 0 ? void 0 : _a.building) === null || _b === void 0 ? void 0 : _b.timezone) || 'America/Chicago'; }); if (this.recurrencePeriod.value === data_common_1.RecurrencePeriod.LIST) { @@ -40511,35 +41122,35 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super59 = _createSuper(RecurrenceDateForm); function RecurrenceDateForm(_org) { - var _this164; + var _this163; _classCallCheck(this, RecurrenceDateForm); - _this164 = _super59.call(this); - _this164._org = _org; - _this164.selected_dates = []; - _this164.timezone = ''; - _this164.nowTz = date_tz_1.DateNow(new Date()); - _this164.fromDateTz = _this164.nowTz.clone(); - _this164.untilDateTz = _this164.fromDateTz.endOfValue('day').addValue({ + _this163 = _super59.call(this); + _this163._org = _org; + _this163.selected_dates = []; + _this163.timezone = ''; + _this163.nowTz = date_tz_1.DateNow(new Date()); + _this163.fromDateTz = _this163.nowTz.clone(); + _this163.untilDateTz = _this163.fromDateTz.endOfValue('day').addValue({ years: 1 }); - _this164.dateTz = date_tz_1.DateNow(new Date()); + _this163.dateTz = date_tz_1.DateNow(new Date()); /** * Function calls on close of date picker without date selection */ - _this164.onDatePickerClose = function () { - _this164.setPickerToGivenDate(_this164.nowTz); + _this163.onDatePickerClose = function () { + _this163.setPickerToGivenDate(_this163.nowTz); }; - return _this164; + return _this163; } _createClass(RecurrenceDateForm, [{ key: "ngOnInit", value: function ngOnInit() { - var _this165 = this; + var _this164 = this; // Setup some data to only run once, the previous giters were hogs this.timezone = this.form.get('timezone').value; @@ -40564,7 +41175,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } this.subscription('ocurrenceChanges', this.recurrenceStarts.valueChanges.subscribe(function () { - _this165.selected_dates = _toConsumableArray(_this165.recurrenceStarts.value); + _this164.selected_dates = _toConsumableArray(_this164.recurrenceStarts.value); })); } /** @@ -41049,22 +41660,22 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super60 = _createSuper(RecurrencePatternForm); function RecurrencePatternForm() { - var _this166; + var _this165; _classCallCheck(this, RecurrencePatternForm); - _this166 = _super60.apply(this, arguments); + _this165 = _super60.apply(this, arguments); /** Range of dates for the Start Date Picker*/ - _this166.nowTz = date_tz_1.DateNow(new Date()); - _this166.fromStartTz = _this166.nowTz.setValue({ - minute: Math.ceil(_this166.nowTz.minutes / 5) * 5 + _this165.nowTz = date_tz_1.DateNow(new Date()); + _this165.fromStartTz = _this165.nowTz.setValue({ + minute: Math.ceil(_this165.nowTz.minutes / 5) * 5 }); - _this166.untilTz = _this166.nowTz.addValue({ + _this165.untilTz = _this165.nowTz.addValue({ years: 1 }).endOfValue('day'); - _this166.timezone = ''; - _this166.repeat_period_options = [{ + _this165.timezone = ''; + _this165.repeat_period_options = [{ label: 'Day', id: data_common_1.RecurrencePeriod.DAILY }, { @@ -41074,22 +41685,22 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons label: 'Month', id: data_common_1.RecurrencePeriod.ABSOLUTE_MONTHLY }]; - _this166.week_days = []; + _this165.week_days = []; /* Check if selected interval is valid and reset to 1 if not*/ - _this166.validateRecurrenceInterval = function () { - if (_this166.repeat_every_options.length < _this166.recurrenceIntervalFormControl.value) { - _this166.recurrenceIntervalFormControl.setValue(1); + _this165.validateRecurrenceInterval = function () { + if (_this165.repeat_every_options.length < _this165.recurrenceIntervalFormControl.value) { + _this165.recurrenceIntervalFormControl.setValue(1); } }; - return _this166; + return _this165; } _createClass(RecurrencePatternForm, [{ key: "ngOnInit", value: function ngOnInit() { - var _this167 = this; + var _this166 = this; // Setup some data to only run once, the previous giters were hogs this.timezone = this.form.get('timezone').value; @@ -41125,7 +41736,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (this.recurrenceDaysFormControl.value.length > 0) { this.week_days = this.week_days.map(function (day) { return Object.assign(Object.assign({}, day), { - active: _this167.recurrenceDaysFormControl.value.includes(day.full_name) + active: _this166.recurrenceDaysFormControl.value.includes(day.full_name) }); }); } @@ -41141,13 +41752,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this.generateOcurrenceList(); this.subscription('startTimeChanges', this.recurrenceDateStartTzFormControl.valueChanges.subscribe(function (next) { - _this167.setEndDateFromStartDate(next); + _this166.setEndDateFromStartDate(next); })); this.subscription('endTimeChanges', this.recurrenceEndFormControl.valueChanges.subscribe(function () { - _this167.generateMaxIntervals(); + _this166.generateMaxIntervals(); })); this.subscription('recurrencePeriodFormControlChanges', this.recurrencePeriodFormControl.valueChanges.subscribe(function () { - _this167.generateMaxIntervals(); + _this166.generateMaxIntervals(); })); } }, { @@ -41284,10 +41895,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * Update active weekday in the weekdays array */ value: function updateActiveWeekday() { - var _this168 = this; + var _this167 = this; var _week_days = this.week_days.map(function (day) { - if (_this168.recurrenceDaysFormControl.value.includes(day.full_name)) { + if (_this167.recurrenceDaysFormControl.value.includes(day.full_name)) { return Object.assign(Object.assign({}, day), { active: true }); @@ -41581,17 +42192,17 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super61 = _createSuper(SelectOptionComponent); function SelectOptionComponent(vcRef) { - var _this169; + var _this168; _classCallCheck(this, SelectOptionComponent); - _this169 = _super61.call(this, vcRef); + _this168 = _super61.call(this, vcRef); /** * If true, we still display as if it wasn't disabled. */ - _this169.ignoreDisabled = false; - return _this169; + _this168.ignoreDisabled = false; + return _this168; } return SelectOptionComponent; @@ -42260,14 +42871,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super62 = _createSuper(SpacerComponent); function SpacerComponent(vcRef) { - var _this170; + var _this169; _classCallCheck(this, SpacerComponent); - _this170 = _super62.call(this, vcRef); - _this170.SpacerMode = SpacerMode; - _this170.mode = SpacerMode.Horizontal; - return _this170; + _this169 = _super62.call(this, vcRef); + _this169.SpacerMode = SpacerMode; + _this169.mode = SpacerMode.Horizontal; + return _this169; } return SpacerComponent; @@ -42612,40 +43223,40 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super63 = _createSuper(TimeFieldComponent); function TimeFieldComponent() { - var _this171; + var _this170; _classCallCheck(this, TimeFieldComponent); - _this171 = _super63.apply(this, arguments); + _this170 = _super63.apply(this, arguments); /** Time step between each allowed time option */ - _this171.step = 15; + _this170.step = 15; /** Whether past times are allowed */ - _this171.noPastTimes = true; + _this170.noPastTimes = true; /** Representing desired timezone **/ - _this171.timezone = new date_tz_1.DateTZ({ + _this170.timezone = new date_tz_1.DateTZ({ date: Date.now() }).local_tz; /** String representing the currently set date */ - _this171.date = new rxjs_1.BehaviorSubject(date_tz_1.DateNow(new Date()).ms); - _this171.filterFormControl = new forms_1.FormControl(); - _this171.nearestStep = rxjs_1.combineLatest([_this171.filterFormControl.valueChanges, _this171.date]).pipe(operators_1.map(function (_ref29) { + _this170.date = new rxjs_1.BehaviorSubject(date_tz_1.DateNow(new Date()).ms); + _this170.filterFormControl = new forms_1.FormControl(); + _this170.nearestStep = rxjs_1.combineLatest([_this170.filterFormControl.valueChanges, _this170.date]).pipe(operators_1.map(function (_ref29) { var _ref30 = _slicedToArray(_ref29, 2), value = _ref30[0], date = _ref30[1]; - return base_1.nearestStepToInput(_this171.step, value, luxon_1.DateTime.now().valueOf()); + return base_1.nearestStepToInput(_this170.step, value, luxon_1.DateTime.now().valueOf()); })); /** String representing the currently set time */ - _this171.value = new rxjs_1.BehaviorSubject(base_1.closestToTimeSlot(luxon_1.DateTime.now(), _this171.step).toFormat('HH:mm')); + _this170.value = new rxjs_1.BehaviorSubject(base_1.closestToTimeSlot(luxon_1.DateTime.now(), _this170.step).toFormat('HH:mm')); /** Available time blocks for the selected date */ - _this171.options = new rxjs_1.BehaviorSubject(time_utils_1.generateAvailableTimes(date_tz_1.DateNow(new Date()).ms, !_this171.noPastTimes, _this171.step, _this171.timezone)); - _this171.selectedOption = rxjs_1.combineLatest([_this171.options, _this171.value]).pipe(operators_1.map(function (_ref31) { + _this170.options = new rxjs_1.BehaviorSubject(time_utils_1.generateAvailableTimes(date_tz_1.DateNow(new Date()).ms, !_this170.noPastTimes, _this170.step, _this170.timezone)); + _this170.selectedOption = rxjs_1.combineLatest([_this170.options, _this170.value]).pipe(operators_1.map(function (_ref31) { var _ref32 = _slicedToArray(_ref31, 2), options = _ref32[0], value = _ref32[1]; @@ -42654,10 +43265,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons return o.value === value; }); })); - _this171.placeHolderOption = _this171.options.pipe(operators_1.map(function (os) { + _this170.placeHolderOption = _this170.options.pipe(operators_1.map(function (os) { return os.length > 0 && os[0]; })); - return _this171; + return _this170; } _createClass(TimeFieldComponent, [{ @@ -42670,7 +43281,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "ngOnInit", value: function ngOnInit() { - var _this172 = this; + var _this171 = this; // Generate the time input options for the booking date this.options.next(time_utils_1.generateAvailableTimes(this.date.value, !this.noPastTimes, this.step, this.timezone)); // Subscribe to selected option changes @@ -42680,12 +43291,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons date = _ref34[0]; // R--- The time input needing to be TZ aware. - var closestTimeSlot = base_1.closestToTimeSlot(luxon_1.DateTime.fromMillis(date.valueOf()), _this172.step); // Need to return the date with building timezone or the HH:mm representation will no match the option values + var closestTimeSlot = base_1.closestToTimeSlot(luxon_1.DateTime.fromMillis(date.valueOf()), _this171.step); // Need to return the date with building timezone or the HH:mm representation will no match the option values return new date_tz_1.DateTZ({ date: closestTimeSlot.valueOf(), is_local_tz: false, - building_tz: _this172.timezone + building_tz: _this171.timezone }); }), operators_1.withLatestFrom(this.options), operators_1.filter(function (_ref35) { var _ref36 = _slicedToArray(_ref35, 2), @@ -42713,7 +43324,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }); return timeOptions; })).subscribe(function (next) { - return _this172.options.next(next); + return _this171.options.next(next); })); } }, { @@ -43136,7 +43747,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons /*! @angular/common */ "../../node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js"); - function TooltipComponent_div_1_Template(rf, ctx) { + function TooltipComponent_div_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div"); i0.ɵɵtext(1); @@ -43176,13 +43787,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons TooltipComponent.ɵcmp = i0.ɵɵdefineComponent({ type: TooltipComponent, selectors: [["app-tooltip"]], - decls: 2, + decls: 3, vars: 11, - consts: [[1, "tooltip", 3, "ngClass"], [4, "ngFor", "ngForOf"]], + consts: [[1, "tooltip", 3, "ngClass"], [1, "tooltip-inner-box"], [4, "ngFor", "ngForOf"]], template: function TooltipComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 0); - i0.ɵɵtemplate(1, TooltipComponent_div_1_Template, 2, 1, "div", 1); + i0.ɵɵelementStart(1, "div", 1); + i0.ɵɵtemplate(2, TooltipComponent_div_2_Template, 2, 1, "div", 2); + i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } @@ -43190,12 +43803,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons i0.ɵɵstyleProp("left", ctx.left + "px")("top", ctx.top + "px"); i0.ɵɵclassProp("tooltip--visible", ctx.visible); i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(8, _c0, "tooltip--" + ctx.position, "tooltip--" + ctx.theme)); - i0.ɵɵadvance(1); + i0.ɵɵadvance(2); i0.ɵɵproperty("ngForOf", ctx.tooltip); } }, directives: [i1.NgClass, i1.NgForOf], - styles: [".tooltip[_ngcontent-%COMP%] {\n position: fixed;\n background-color: black;\n border-radius: 4px;\n color: #ffffff;\n font-family: Arial;\n padding: 3px 6px;\n font-size: 13px;\n opacity: 0;\n}\n.tooltip[_ngcontent-%COMP%]::before {\n content: \"\";\n width: 0;\n height: 0;\n position: absolute;\n}\n.tooltip--visible[_ngcontent-%COMP%] {\n opacity: 1;\n transition: opacity 300ms;\n}\n.tooltip--light[_ngcontent-%COMP%] {\n background-color: white;\n color: black;\n}\n.tooltip--light[_ngcontent-%COMP%]::before {\n border: 5px solid white;\n}\n.tooltip--dark[_ngcontent-%COMP%] {\n background-color: black;\n color: white;\n}\n.tooltip--dark[_ngcontent-%COMP%]::before {\n border: 5px solid black;\n}\n.tooltip--below[_ngcontent-%COMP%] {\n transform: translateX(-50%);\n margin-top: 7px;\n}\n.tooltip--below[_ngcontent-%COMP%]::before {\n border-left-color: transparent;\n border-right-color: transparent;\n border-top: none;\n left: calc(50% - 5px);\n top: -5px;\n}\n.tooltip--above[_ngcontent-%COMP%] {\n transform: translate(-50%, -100%);\n margin-bottom: 7px;\n}\n.tooltip--above[_ngcontent-%COMP%]::before {\n border-left-color: transparent;\n border-right-color: transparent;\n border-bottom: none;\n left: calc(50% - 5px);\n bottom: -5px;\n}\n.tooltip--left[_ngcontent-%COMP%] {\n transform: translate(calc(-100% - 7px), -50%);\n}\n.tooltip--left[_ngcontent-%COMP%]::before {\n border-top-color: transparent;\n border-bottom-color: transparent;\n border-right: none;\n right: -5px;\n top: calc(50% - 5px);\n}\n.tooltip--right[_ngcontent-%COMP%] {\n transform: translateY(-50%);\n margin-left: 7px;\n}\n.tooltip--right[_ngcontent-%COMP%]::before {\n border-top-color: transparent;\n border-bottom-color: transparent;\n border-left: none;\n left: -5px;\n top: calc(50% - 5px);\n}\n.tooltip--dynamic[_ngcontent-%COMP%] {\n margin-left: 20px;\n}\n.tooltip--dynamic[_ngcontent-%COMP%]::before {\n display: none;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi90b29sdGlwL3Rvb2x0aXAuY29tcG9uZW50LnNjc3MiLCJsaWJzL3VpL3NyYy9saWIvdG9vbHRpcC90b29sdGlwLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ1EsZUFBQTtFQUNBLHVCQUFBO0VBQ0Esa0JBQUE7RUFDQSxjQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLGVBQUE7RUFDQSxVQUFBO0FDQ1I7QURDUTtFQUNFLFdBQUE7RUFDQSxRQUFBO0VBQ0EsU0FBQTtFQUNBLGtCQUFBO0FDQ1Y7QURFUTtFQUNFLFVBQUE7RUFDQSx5QkFBQTtBQ0FWO0FER1E7RUFDRSx1QkFBQTtFQUNBLFlBQUE7QUNEVjtBREdVO0VBQ0UsdUJBQUE7QUNEWjtBREtRO0VBQ0UsdUJBQUE7RUFDQSxZQUFBO0FDSFY7QURLVTtFQUNFLHVCQUFBO0FDSFo7QURPUTtFQUNFLDJCQUFBO0VBQ0EsZUFBQTtBQ0xWO0FET1U7RUFDRSw4QkFBQTtFQUNBLCtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxxQkFBQTtFQUNBLFNBQUE7QUNMWjtBRFNRO0VBQ0UsaUNBQUE7RUFDQSxrQkFBQTtBQ1BWO0FEU1U7RUFDRSw4QkFBQTtFQUNBLCtCQUFBO0VBQ0EsbUJBQUE7RUFDQSxxQkFBQTtFQUNBLFlBQUE7QUNQWjtBRFdRO0VBQ0UsNkNBQUE7QUNUVjtBRFdVO0VBQ0UsNkJBQUE7RUFDQSxnQ0FBQTtFQUNBLGtCQUFBO0VBQ0EsV0FBQTtFQUNBLG9CQUFBO0FDVFo7QURhUTtFQUNFLDJCQUFBO0VBQ0EsZ0JBQUE7QUNYVjtBRGFVO0VBQ0UsNkJBQUE7RUFDQSxnQ0FBQTtFQUNBLGlCQUFBO0VBQ0EsVUFBQTtFQUNBLG9CQUFBO0FDWFo7QURlUTtFQUNFLGlCQUFBO0FDYlY7QURlVTtFQUNFLGFBQUE7QUNiWiIsImZpbGUiOiJsaWJzL3VpL3NyYy9saWIvdG9vbHRpcC90b29sdGlwLmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLnRvb2x0aXAge1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgICAgICBmb250LWZhbWlseTogQXJpYWw7XG4gICAgICAgIHBhZGRpbmc6IDNweCA2cHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgIFxuICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgIHdpZHRoOiAwO1xuICAgICAgICAgIGhlaWdodDogMDtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIH1cbiAgICAgIFxuICAgICAgICAmLS12aXNpYmxlIHtcbiAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMzAwbXM7XG4gICAgICAgIH1cbiAgICAgIFxuICAgICAgICAmLS1saWdodCB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgICAgY29sb3I6IGJsYWNrO1xuICAgICAgXG4gICAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICAgIGJvcmRlcjogNXB4IHNvbGlkIHdoaXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXG4gICAgICAgICYtLWRhcmsge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xuICAgICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgIFxuICAgICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgICBib3JkZXI6IDVweCBzb2xpZCBibGFjaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIFxuICAgICAgICAmLS1iZWxvdyB7XG4gICAgICAgICAgdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgICAgICAgbWFyZ2luLXRvcDogN3B4O1xuICAgICAgXG4gICAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgICBib3JkZXItdG9wOiBub25lO1xuICAgICAgICAgICAgbGVmdDogY2FsYyg1MCUgLSA1cHgpO1xuICAgICAgICAgICAgdG9wOiAtNXB4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXG4gICAgICAgICYtLWFib3ZlIHtcbiAgICAgICAgICB0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC0xMDAlKTtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiA3cHg7XG4gICAgICBcbiAgICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgICAgYm9yZGVyLWxlZnQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG4gICAgICAgICAgICBsZWZ0OiBjYWxjKDUwJSAtIDVweCk7XG4gICAgICAgICAgICBib3R0b206IC01cHg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBcbiAgICAgICAgJi0tbGVmdCB7XG4gICAgICAgICAgdHJhbnNmb3JtOnRyYW5zbGF0ZShjYWxjKC0xMDAlIC0gN3B4KSwgLTUwJSk7XG4gICAgICBcbiAgICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgIGJvcmRlci1yaWdodDogbm9uZTtcbiAgICAgICAgICAgIHJpZ2h0OiAtNXB4O1xuICAgICAgICAgICAgdG9wOiBjYWxjKDUwJSAtIDVweCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBcbiAgICAgICAgJi0tcmlnaHQge1xuICAgICAgICAgIHRyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiA3cHg7XG4gICAgICBcbiAgICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgIGJvcmRlci1sZWZ0OiBub25lO1xuICAgICAgICAgICAgbGVmdDogLTVweDtcbiAgICAgICAgICAgIHRvcDogY2FsYyg1MCUgLSA1cHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXG4gICAgICAgICYtLWR5bmFtaWMge1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAyMHB4O1xuICAgICAgXG4gICAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAiLCIudG9vbHRpcCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgY29sb3I6ICNmZmZmZmY7XG4gIGZvbnQtZmFtaWx5OiBBcmlhbDtcbiAgcGFkZGluZzogM3B4IDZweDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBvcGFjaXR5OiAwO1xufVxuLnRvb2x0aXA6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbn1cbi50b29sdGlwLS12aXNpYmxlIHtcbiAgb3BhY2l0eTogMTtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAzMDBtcztcbn1cbi50b29sdGlwLS1saWdodCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBjb2xvcjogYmxhY2s7XG59XG4udG9vbHRpcC0tbGlnaHQ6OmJlZm9yZSB7XG4gIGJvcmRlcjogNXB4IHNvbGlkIHdoaXRlO1xufVxuLnRvb2x0aXAtLWRhcmsge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjaztcbiAgY29sb3I6IHdoaXRlO1xufVxuLnRvb2x0aXAtLWRhcms6OmJlZm9yZSB7XG4gIGJvcmRlcjogNXB4IHNvbGlkIGJsYWNrO1xufVxuLnRvb2x0aXAtLWJlbG93IHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICBtYXJnaW4tdG9wOiA3cHg7XG59XG4udG9vbHRpcC0tYmVsb3c6OmJlZm9yZSB7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXRvcDogbm9uZTtcbiAgbGVmdDogY2FsYyg1MCUgLSA1cHgpO1xuICB0b3A6IC01cHg7XG59XG4udG9vbHRpcC0tYWJvdmUge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtMTAwJSk7XG4gIG1hcmdpbi1ib3R0b206IDdweDtcbn1cbi50b29sdGlwLS1hYm92ZTo6YmVmb3JlIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItYm90dG9tOiBub25lO1xuICBsZWZ0OiBjYWxjKDUwJSAtIDVweCk7XG4gIGJvdHRvbTogLTVweDtcbn1cbi50b29sdGlwLS1sZWZ0IHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoY2FsYygtMTAwJSAtIDdweCksIC01MCUpO1xufVxuLnRvb2x0aXAtLWxlZnQ6OmJlZm9yZSB7XG4gIGJvcmRlci10b3AtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJpZ2h0OiBub25lO1xuICByaWdodDogLTVweDtcbiAgdG9wOiBjYWxjKDUwJSAtIDVweCk7XG59XG4udG9vbHRpcC0tcmlnaHQge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIG1hcmdpbi1sZWZ0OiA3cHg7XG59XG4udG9vbHRpcC0tcmlnaHQ6OmJlZm9yZSB7XG4gIGJvcmRlci10b3AtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gIGxlZnQ6IC01cHg7XG4gIHRvcDogY2FsYyg1MCUgLSA1cHgpO1xufVxuLnRvb2x0aXAtLWR5bmFtaWMge1xuICBtYXJnaW4tbGVmdDogMjBweDtcbn1cbi50b29sdGlwLS1keW5hbWljOjpiZWZvcmUge1xuICBkaXNwbGF5OiBub25lO1xufSJdfQ== */"] + styles: [".tooltip[_ngcontent-%COMP%] {\n position: fixed;\n background-color: black;\n border-radius: 4px;\n color: #ffffff;\n font-family: Arial;\n padding: 3px 6px;\n font-size: 13px;\n opacity: 0;\n}\n.tooltip[_ngcontent-%COMP%]::before {\n content: \"\";\n width: 0;\n height: 0;\n position: absolute;\n}\n.tooltip--visible[_ngcontent-%COMP%] {\n opacity: 1;\n transition: opacity 300ms;\n}\n.tooltip--light[_ngcontent-%COMP%] {\n background-color: white;\n color: black;\n}\n.tooltip--light[_ngcontent-%COMP%]::before {\n border: 5px solid white;\n}\n.tooltip--dark[_ngcontent-%COMP%] {\n background-color: black;\n color: white;\n}\n.tooltip--dark[_ngcontent-%COMP%]::before {\n border: 5px solid black;\n}\n.tooltip--below[_ngcontent-%COMP%] {\n transform: translateX(-50%);\n margin-top: 7px;\n}\n.tooltip--below[_ngcontent-%COMP%]::before {\n border-left-color: transparent;\n border-right-color: transparent;\n border-top: none;\n left: calc(50% - 5px);\n top: -5px;\n}\n.tooltip--above[_ngcontent-%COMP%] {\n transform: translate(-50%, -100%);\n margin-bottom: 7px;\n}\n.tooltip--above[_ngcontent-%COMP%]::before {\n border-left-color: transparent;\n border-right-color: transparent;\n border-bottom: none;\n left: calc(50% - 5px);\n bottom: -5px;\n}\n.tooltip--left[_ngcontent-%COMP%] {\n transform: translate(calc(-100% - 7px), -50%);\n}\n.tooltip--left[_ngcontent-%COMP%]::before {\n border-top-color: transparent;\n border-bottom-color: transparent;\n border-right: none;\n right: -5px;\n top: calc(50% - 5px);\n}\n.tooltip--right[_ngcontent-%COMP%] {\n transform: translateY(-50%);\n margin-left: 7px;\n}\n.tooltip--right[_ngcontent-%COMP%]::before {\n border-top-color: transparent;\n border-bottom-color: transparent;\n border-left: none;\n left: -5px;\n top: calc(50% - 5px);\n}\n.tooltip--dynamic[_ngcontent-%COMP%] {\n margin-left: 20px;\n}\n.tooltip--dynamic[_ngcontent-%COMP%]::before {\n display: none;\n}\n.tooltip[_ngcontent-%COMP%] .tooltip-inner-box[_ngcontent-%COMP%] {\n max-height: 100px;\n overflow-y: auto;\n width: 85px;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi90b29sdGlwL3Rvb2x0aXAuY29tcG9uZW50LnNjc3MiLCJsaWJzL3VpL3NyYy9saWIvdG9vbHRpcC90b29sdGlwLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ1EsZUFBQTtFQUNBLHVCQUFBO0VBQ0Esa0JBQUE7RUFDQSxjQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLGVBQUE7RUFDQSxVQUFBO0FDQ1I7QURDUTtFQUNFLFdBQUE7RUFDQSxRQUFBO0VBQ0EsU0FBQTtFQUNBLGtCQUFBO0FDQ1Y7QURFUTtFQUNFLFVBQUE7RUFDQSx5QkFBQTtBQ0FWO0FER1E7RUFDRSx1QkFBQTtFQUNBLFlBQUE7QUNEVjtBREdVO0VBQ0UsdUJBQUE7QUNEWjtBREtRO0VBQ0UsdUJBQUE7RUFDQSxZQUFBO0FDSFY7QURLVTtFQUNFLHVCQUFBO0FDSFo7QURPUTtFQUNFLDJCQUFBO0VBQ0EsZUFBQTtBQ0xWO0FET1U7RUFDRSw4QkFBQTtFQUNBLCtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxxQkFBQTtFQUNBLFNBQUE7QUNMWjtBRFNRO0VBQ0UsaUNBQUE7RUFDQSxrQkFBQTtBQ1BWO0FEU1U7RUFDRSw4QkFBQTtFQUNBLCtCQUFBO0VBQ0EsbUJBQUE7RUFDQSxxQkFBQTtFQUNBLFlBQUE7QUNQWjtBRFdRO0VBQ0UsNkNBQUE7QUNUVjtBRFdVO0VBQ0UsNkJBQUE7RUFDQSxnQ0FBQTtFQUNBLGtCQUFBO0VBQ0EsV0FBQTtFQUNBLG9CQUFBO0FDVFo7QURhUTtFQUNFLDJCQUFBO0VBQ0EsZ0JBQUE7QUNYVjtBRGFVO0VBQ0UsNkJBQUE7RUFDQSxnQ0FBQTtFQUNBLGlCQUFBO0VBQ0EsVUFBQTtFQUNBLG9CQUFBO0FDWFo7QURlUTtFQUNFLGlCQUFBO0FDYlY7QURlVTtFQUNFLGFBQUE7QUNiWjtBRGlCUTtFQUNFLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxXQUFBO0FDZlYiLCJmaWxlIjoibGlicy91aS9zcmMvbGliL3Rvb2x0aXAvdG9vbHRpcC5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi50b29sdGlwIHtcbiAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjaztcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgICAgZm9udC1mYW1pbHk6IEFyaWFsO1xuICAgICAgICBwYWRkaW5nOiAzcHggNnB4O1xuICAgICAgICBmb250LXNpemU6IDEzcHg7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICBcbiAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICB3aWR0aDogMDtcbiAgICAgICAgICBoZWlnaHQ6IDA7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB9XG4gICAgICBcbiAgICAgICAgJi0tdmlzaWJsZSB7XG4gICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDMwMG1zO1xuICAgICAgICB9XG4gICAgICBcbiAgICAgICAgJi0tbGlnaHQge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICAgIGNvbG9yOiBibGFjaztcbiAgICAgIFxuICAgICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgICBib3JkZXI6IDVweCBzb2xpZCB3aGl0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIFxuICAgICAgICAmLS1kYXJrIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjaztcbiAgICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICBcbiAgICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgICAgYm9yZGVyOiA1cHggc29saWQgYmxhY2s7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBcbiAgICAgICAgJi0tYmVsb3cge1xuICAgICAgICAgIHRyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgICAgIG1hcmdpbi10b3A6IDdweDtcbiAgICAgIFxuICAgICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgYm9yZGVyLXRvcDogbm9uZTtcbiAgICAgICAgICAgIGxlZnQ6IGNhbGMoNTAlIC0gNXB4KTtcbiAgICAgICAgICAgIHRvcDogLTVweDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIFxuICAgICAgICAmLS1hYm92ZSB7XG4gICAgICAgICAgdHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtMTAwJSk7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogN3B4O1xuICAgICAgXG4gICAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgICBib3JkZXItYm90dG9tOiBub25lO1xuICAgICAgICAgICAgbGVmdDogY2FsYyg1MCUgLSA1cHgpO1xuICAgICAgICAgICAgYm90dG9tOiAtNXB4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXG4gICAgICAgICYtLWxlZnQge1xuICAgICAgICAgIHRyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYygtMTAwJSAtIDdweCksIC01MCUpO1xuICAgICAgXG4gICAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICAgIGJvcmRlci10b3AtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgICBib3JkZXItcmlnaHQ6IG5vbmU7XG4gICAgICAgICAgICByaWdodDogLTVweDtcbiAgICAgICAgICAgIHRvcDogY2FsYyg1MCUgLSA1cHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXG4gICAgICAgICYtLXJpZ2h0IHtcbiAgICAgICAgICB0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogN3B4O1xuICAgICAgXG4gICAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICAgIGJvcmRlci10b3AtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICAgICAgICAgIGxlZnQ6IC01cHg7XG4gICAgICAgICAgICB0b3A6IGNhbGMoNTAlIC0gNXB4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIFxuICAgICAgICAmLS1keW5hbWljIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogMjBweDtcbiAgICAgIFxuICAgICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC50b29sdGlwLWlubmVyLWJveCB7XG4gICAgICAgICAgbWF4LWhlaWdodDogMTAwcHg7XG4gICAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgICAgICB3aWR0aDogODVweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgIiwiLnRvb2x0aXAge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICBmb250LWZhbWlseTogQXJpYWw7XG4gIHBhZGRpbmc6IDNweCA2cHg7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgb3BhY2l0eTogMDtcbn1cbi50b29sdGlwOjpiZWZvcmUge1xuICBjb250ZW50OiBcIlwiO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG59XG4udG9vbHRpcC0tdmlzaWJsZSB7XG4gIG9wYWNpdHk6IDE7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMzAwbXM7XG59XG4udG9vbHRpcC0tbGlnaHQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgY29sb3I6IGJsYWNrO1xufVxuLnRvb2x0aXAtLWxpZ2h0OjpiZWZvcmUge1xuICBib3JkZXI6IDVweCBzb2xpZCB3aGl0ZTtcbn1cbi50b29sdGlwLS1kYXJrIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG4gIGNvbG9yOiB3aGl0ZTtcbn1cbi50b29sdGlwLS1kYXJrOjpiZWZvcmUge1xuICBib3JkZXI6IDVweCBzb2xpZCBibGFjaztcbn1cbi50b29sdGlwLS1iZWxvdyB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgbWFyZ2luLXRvcDogN3B4O1xufVxuLnRvb2x0aXAtLWJlbG93OjpiZWZvcmUge1xuICBib3JkZXItbGVmdC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1yaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci10b3A6IG5vbmU7XG4gIGxlZnQ6IGNhbGMoNTAlIC0gNXB4KTtcbiAgdG9wOiAtNXB4O1xufVxuLnRvb2x0aXAtLWFib3ZlIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTEwMCUpO1xuICBtYXJnaW4tYm90dG9tOiA3cHg7XG59XG4udG9vbHRpcC0tYWJvdmU6OmJlZm9yZSB7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbiAgbGVmdDogY2FsYyg1MCUgLSA1cHgpO1xuICBib3R0b206IC01cHg7XG59XG4udG9vbHRpcC0tbGVmdCB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKGNhbGMoLTEwMCUgLSA3cHgpLCAtNTAlKTtcbn1cbi50b29sdGlwLS1sZWZ0OjpiZWZvcmUge1xuICBib3JkZXItdG9wLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1yaWdodDogbm9uZTtcbiAgcmlnaHQ6IC01cHg7XG4gIHRvcDogY2FsYyg1MCUgLSA1cHgpO1xufVxuLnRvb2x0aXAtLXJpZ2h0IHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICBtYXJnaW4tbGVmdDogN3B4O1xufVxuLnRvb2x0aXAtLXJpZ2h0OjpiZWZvcmUge1xuICBib3JkZXItdG9wLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1sZWZ0OiBub25lO1xuICBsZWZ0OiAtNXB4O1xuICB0b3A6IGNhbGMoNTAlIC0gNXB4KTtcbn1cbi50b29sdGlwLS1keW5hbWljIHtcbiAgbWFyZ2luLWxlZnQ6IDIwcHg7XG59XG4udG9vbHRpcC0tZHluYW1pYzo6YmVmb3JlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi50b29sdGlwIC50b29sdGlwLWlubmVyLWJveCB7XG4gIG1heC1oZWlnaHQ6IDEwMHB4O1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICB3aWR0aDogODVweDtcbn0iXX0= */"] }); /*@__PURE__*/ @@ -43855,6 +44468,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons /*! ./zoom-warning-modal/components/zoom-warning/zoom-warning.component */ "../../libs/ui/src/lib/zoom-warning-modal/components/zoom-warning/zoom-warning.component.ts"); + var custom_snackbar_component_component_1 = __webpack_require__( + /*! ./custom-snackbar-component/custom-snackbar-component.component */ + "../../libs/ui/src/lib/custom-snackbar-component/custom-snackbar-component.component.ts"); + + var catering_drop_modal_component_1 = __webpack_require__( + /*! ./catering-drop-modal/components/catering-drop/catering-drop-modal.component */ + "../../libs/ui/src/lib/catering-drop-modal/components/catering-drop/catering-drop-modal.component.ts"); + var i0 = __webpack_require__( /*! @angular/core */ "../../node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); @@ -43873,13 +44494,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons factory: function UiModule_Factory(t) { return new (t || UiModule)(); }, - imports: [[common_1.CommonModule].concat(_toConsumableArray(exports.MATERIAL_MODULES), [forms_1.ReactiveFormsModule, forms_1.FormsModule, ngx_mat_select_search_1.NgxMatSelectSearchModule, ngx_skeleton_loader_1.NgxSkeletonLoaderModule]), forms_1.ReactiveFormsModule, forms_1.FormsModule] + imports: [[common_1.CommonModule].concat(_toConsumableArray(exports.MATERIAL_MODULES), [forms_1.ReactiveFormsModule, forms_1.FormsModule, ngx_mat_select_search_1.NgxMatSelectSearchModule, ngx_skeleton_loader_1.NgxSkeletonLoaderModule, snack_bar_1.MatSnackBarModule]), forms_1.ReactiveFormsModule, forms_1.FormsModule] }); (function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(UiModule, { - declarations: [auto_complete_chip_select_item_component_1.AutoCompleteChipSelectItemComponent, auto_complete_select_option_component_1.AutoCompleteSelectOptionComponent, aca_date_picker_component_1.AcaDatePickerComponent, mck_date_picker_component_1.MckDatePickerComponent, date_tz_calendar_widget_component_1.DateTzCalendarWidgetComponent, date_tz_date_picker_component_1.DateTzDatePickerComponent, time_field_component_1.TimeFieldComponent, date_tz_time_field_component_1.DateTzTimeFieldComponent, duration_field_component_1.DurationFieldComponent, date_tz_duration_field_component_1.DateTzDurationFieldComponent, groupHeader_pipe_1.GroupHeaderPipe, radio_select_component_1.RadioSelectComponent, filter_pipe_1.FilterPipe, sanitise_pipe_1.SanitizePipe, spacer_component_1.SpacerComponent, calendar_icon_component_1.CalendarIconComponent, chevron_icon_component_1.ChevronIconComponent, select_option_component_1.SelectOptionComponent, close_icon_component_1.CloseIconComponent, selected_chip_count_component_1.SelectedChipCountComponent, alert_banner_component_1.AlertBannerComponent, error_message_component_1.ErrorMessageComponent, toggle_component_1.ToggleComponent, label_component_1.LabelComponent, modal_component_1.ModalComponent, collapse_header_component_1.CollapseHeaderComponent, switch_group_component_1.SwitchGroupComponent, modal_button_row_component_1.ModalButtonRowComponent, informational_image_component_1.InformationalImageComponent, select_component_1.SelectComponent, legend_dropdown_component_1.LegendDropdownComponent, recurrence_pattern_form_component_1.RecurrencePatternForm, recurrence_date_form_component_1.RecurrenceDateForm, recurrence_booking_form_component_1.RecurringBookingForm, conflicts_modal_component_1.ConflictsModalComponent, override_changes_modal_component_1.OverrideChangesModalComponent, conflict_alert_modal_component_1.ConflictAlertModalComponent, cng_select_component_1.CngSelectComponent, dropdown_trigger_for_directive_1.DropdownTriggerForDirective, cng_select_options_component_1.CngSelectOptionsComponent, tooltip_component_1.TooltipComponent, tooltip_directive_1.TooltipDirective, zoom_warning_component_1.ZoomWarningComponent], - imports: [common_1.CommonModule, button_1.MatButtonModule, snack_bar_1.MatSnackBarModule, dialog_1.MatDialogModule, form_field_1.MatFormFieldModule, icon_1.MatIconModule, input_1.MatInputModule, progress_spinner_1.MatProgressSpinnerModule, progress_bar_1.MatProgressBarModule, autocomplete_1.MatAutocompleteModule, select_1.MatSelectModule, chips_1.MatChipsModule, core_2.MatRippleModule, menu_1.MatMenuModule, checkbox_1.MatCheckboxModule, tooltip_1.MatTooltipModule, radio_1.MatRadioModule, tabs_1.MatTabsModule, slide_toggle_1.MatSlideToggleModule, expansion_1.MatExpansionModule, overlay_1.OverlayModule, forms_1.ReactiveFormsModule, forms_1.FormsModule, ngx_mat_select_search_1.NgxMatSelectSearchModule, ngx_skeleton_loader_1.NgxSkeletonLoaderModule], + declarations: [auto_complete_chip_select_item_component_1.AutoCompleteChipSelectItemComponent, auto_complete_select_option_component_1.AutoCompleteSelectOptionComponent, aca_date_picker_component_1.AcaDatePickerComponent, mck_date_picker_component_1.MckDatePickerComponent, date_tz_calendar_widget_component_1.DateTzCalendarWidgetComponent, date_tz_date_picker_component_1.DateTzDatePickerComponent, time_field_component_1.TimeFieldComponent, date_tz_time_field_component_1.DateTzTimeFieldComponent, duration_field_component_1.DurationFieldComponent, date_tz_duration_field_component_1.DateTzDurationFieldComponent, groupHeader_pipe_1.GroupHeaderPipe, radio_select_component_1.RadioSelectComponent, filter_pipe_1.FilterPipe, sanitise_pipe_1.SanitizePipe, spacer_component_1.SpacerComponent, calendar_icon_component_1.CalendarIconComponent, chevron_icon_component_1.ChevronIconComponent, select_option_component_1.SelectOptionComponent, close_icon_component_1.CloseIconComponent, selected_chip_count_component_1.SelectedChipCountComponent, alert_banner_component_1.AlertBannerComponent, error_message_component_1.ErrorMessageComponent, toggle_component_1.ToggleComponent, label_component_1.LabelComponent, modal_component_1.ModalComponent, collapse_header_component_1.CollapseHeaderComponent, switch_group_component_1.SwitchGroupComponent, modal_button_row_component_1.ModalButtonRowComponent, informational_image_component_1.InformationalImageComponent, select_component_1.SelectComponent, legend_dropdown_component_1.LegendDropdownComponent, recurrence_pattern_form_component_1.RecurrencePatternForm, recurrence_date_form_component_1.RecurrenceDateForm, recurrence_booking_form_component_1.RecurringBookingForm, conflicts_modal_component_1.ConflictsModalComponent, override_changes_modal_component_1.OverrideChangesModalComponent, conflict_alert_modal_component_1.ConflictAlertModalComponent, cng_select_component_1.CngSelectComponent, dropdown_trigger_for_directive_1.DropdownTriggerForDirective, cng_select_options_component_1.CngSelectOptionsComponent, tooltip_component_1.TooltipComponent, tooltip_directive_1.TooltipDirective, zoom_warning_component_1.ZoomWarningComponent, custom_snackbar_component_component_1.CustomSnackbarComponent, catering_drop_modal_component_1.CateringDropComponent], + imports: [common_1.CommonModule, button_1.MatButtonModule, snack_bar_1.MatSnackBarModule, dialog_1.MatDialogModule, form_field_1.MatFormFieldModule, icon_1.MatIconModule, input_1.MatInputModule, progress_spinner_1.MatProgressSpinnerModule, progress_bar_1.MatProgressBarModule, autocomplete_1.MatAutocompleteModule, select_1.MatSelectModule, chips_1.MatChipsModule, core_2.MatRippleModule, menu_1.MatMenuModule, checkbox_1.MatCheckboxModule, tooltip_1.MatTooltipModule, radio_1.MatRadioModule, tabs_1.MatTabsModule, slide_toggle_1.MatSlideToggleModule, expansion_1.MatExpansionModule, overlay_1.OverlayModule, forms_1.ReactiveFormsModule, forms_1.FormsModule, ngx_mat_select_search_1.NgxMatSelectSearchModule, ngx_skeleton_loader_1.NgxSkeletonLoaderModule, snack_bar_1.MatSnackBarModule], exports: [auto_complete_chip_select_item_component_1.AutoCompleteChipSelectItemComponent, auto_complete_select_option_component_1.AutoCompleteSelectOptionComponent, aca_date_picker_component_1.AcaDatePickerComponent, mck_date_picker_component_1.MckDatePickerComponent, date_tz_calendar_widget_component_1.DateTzCalendarWidgetComponent, date_tz_date_picker_component_1.DateTzDatePickerComponent, time_field_component_1.TimeFieldComponent, date_tz_time_field_component_1.DateTzTimeFieldComponent, duration_field_component_1.DurationFieldComponent, date_tz_duration_field_component_1.DateTzDurationFieldComponent, radio_select_component_1.RadioSelectComponent, filter_pipe_1.FilterPipe, sanitise_pipe_1.SanitizePipe, spacer_component_1.SpacerComponent, calendar_icon_component_1.CalendarIconComponent, chevron_icon_component_1.ChevronIconComponent, alert_banner_component_1.AlertBannerComponent, forms_1.ReactiveFormsModule, forms_1.FormsModule, toggle_component_1.ToggleComponent, label_component_1.LabelComponent, modal_component_1.ModalComponent, collapse_header_component_1.CollapseHeaderComponent, switch_group_component_1.SwitchGroupComponent, modal_button_row_component_1.ModalButtonRowComponent, informational_image_component_1.InformationalImageComponent, select_component_1.SelectComponent, legend_dropdown_component_1.LegendDropdownComponent, recurrence_pattern_form_component_1.RecurrencePatternForm, recurrence_date_form_component_1.RecurrenceDateForm, recurrence_booking_form_component_1.RecurringBookingForm, conflicts_modal_component_1.ConflictsModalComponent, override_changes_modal_component_1.OverrideChangesModalComponent, conflict_alert_modal_component_1.ConflictAlertModalComponent, cng_select_component_1.CngSelectComponent, dropdown_trigger_for_directive_1.DropdownTriggerForDirective, cng_select_options_component_1.CngSelectOptionsComponent, tooltip_component_1.TooltipComponent, tooltip_directive_1.TooltipDirective, zoom_warning_component_1.ZoomWarningComponent] }); })(); @@ -43890,9 +44511,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons i0.ɵsetClassMetadata(UiModule, [{ type: core_1.NgModule, args: [{ - imports: [common_1.CommonModule].concat(_toConsumableArray(exports.MATERIAL_MODULES), [forms_1.ReactiveFormsModule, forms_1.FormsModule, ngx_mat_select_search_1.NgxMatSelectSearchModule, ngx_skeleton_loader_1.NgxSkeletonLoaderModule]), - declarations: [auto_complete_chip_select_item_component_1.AutoCompleteChipSelectItemComponent, auto_complete_select_option_component_1.AutoCompleteSelectOptionComponent, aca_date_picker_component_1.AcaDatePickerComponent, mck_date_picker_component_1.MckDatePickerComponent, date_tz_calendar_widget_component_1.DateTzCalendarWidgetComponent, date_tz_date_picker_component_1.DateTzDatePickerComponent, time_field_component_1.TimeFieldComponent, date_tz_time_field_component_1.DateTzTimeFieldComponent, duration_field_component_1.DurationFieldComponent, date_tz_duration_field_component_1.DateTzDurationFieldComponent, groupHeader_pipe_1.GroupHeaderPipe, radio_select_component_1.RadioSelectComponent, filter_pipe_1.FilterPipe, sanitise_pipe_1.SanitizePipe, spacer_component_1.SpacerComponent, calendar_icon_component_1.CalendarIconComponent, chevron_icon_component_1.ChevronIconComponent, select_option_component_1.SelectOptionComponent, close_icon_component_1.CloseIconComponent, selected_chip_count_component_1.SelectedChipCountComponent, alert_banner_component_1.AlertBannerComponent, error_message_component_1.ErrorMessageComponent, toggle_component_1.ToggleComponent, label_component_1.LabelComponent, modal_component_1.ModalComponent, collapse_header_component_1.CollapseHeaderComponent, switch_group_component_1.SwitchGroupComponent, modal_button_row_component_1.ModalButtonRowComponent, informational_image_component_1.InformationalImageComponent, select_component_1.SelectComponent, legend_dropdown_component_1.LegendDropdownComponent, recurrence_pattern_form_component_1.RecurrencePatternForm, recurrence_date_form_component_1.RecurrenceDateForm, recurrence_booking_form_component_1.RecurringBookingForm, conflicts_modal_component_1.ConflictsModalComponent, override_changes_modal_component_1.OverrideChangesModalComponent, conflict_alert_modal_component_1.ConflictAlertModalComponent, cng_select_component_1.CngSelectComponent, dropdown_trigger_for_directive_1.DropdownTriggerForDirective, cng_select_options_component_1.CngSelectOptionsComponent, tooltip_component_1.TooltipComponent, tooltip_directive_1.TooltipDirective, zoom_warning_component_1.ZoomWarningComponent], - exports: [auto_complete_chip_select_item_component_1.AutoCompleteChipSelectItemComponent, auto_complete_select_option_component_1.AutoCompleteSelectOptionComponent, aca_date_picker_component_1.AcaDatePickerComponent, mck_date_picker_component_1.MckDatePickerComponent, date_tz_calendar_widget_component_1.DateTzCalendarWidgetComponent, date_tz_date_picker_component_1.DateTzDatePickerComponent, time_field_component_1.TimeFieldComponent, date_tz_time_field_component_1.DateTzTimeFieldComponent, duration_field_component_1.DurationFieldComponent, date_tz_duration_field_component_1.DateTzDurationFieldComponent, radio_select_component_1.RadioSelectComponent, filter_pipe_1.FilterPipe, sanitise_pipe_1.SanitizePipe, spacer_component_1.SpacerComponent, calendar_icon_component_1.CalendarIconComponent, chevron_icon_component_1.ChevronIconComponent, alert_banner_component_1.AlertBannerComponent, forms_1.ReactiveFormsModule, forms_1.FormsModule, toggle_component_1.ToggleComponent, label_component_1.LabelComponent, modal_component_1.ModalComponent, collapse_header_component_1.CollapseHeaderComponent, switch_group_component_1.SwitchGroupComponent, modal_button_row_component_1.ModalButtonRowComponent, informational_image_component_1.InformationalImageComponent, select_component_1.SelectComponent, legend_dropdown_component_1.LegendDropdownComponent, recurrence_pattern_form_component_1.RecurrencePatternForm, recurrence_date_form_component_1.RecurrenceDateForm, recurrence_booking_form_component_1.RecurringBookingForm, conflicts_modal_component_1.ConflictsModalComponent, override_changes_modal_component_1.OverrideChangesModalComponent, conflict_alert_modal_component_1.ConflictAlertModalComponent, cng_select_component_1.CngSelectComponent, dropdown_trigger_for_directive_1.DropdownTriggerForDirective, cng_select_options_component_1.CngSelectOptionsComponent, tooltip_component_1.TooltipComponent, tooltip_directive_1.TooltipDirective, zoom_warning_component_1.ZoomWarningComponent] + imports: [common_1.CommonModule].concat(_toConsumableArray(exports.MATERIAL_MODULES), [forms_1.ReactiveFormsModule, forms_1.FormsModule, ngx_mat_select_search_1.NgxMatSelectSearchModule, ngx_skeleton_loader_1.NgxSkeletonLoaderModule, snack_bar_1.MatSnackBarModule]), + declarations: [auto_complete_chip_select_item_component_1.AutoCompleteChipSelectItemComponent, auto_complete_select_option_component_1.AutoCompleteSelectOptionComponent, aca_date_picker_component_1.AcaDatePickerComponent, mck_date_picker_component_1.MckDatePickerComponent, date_tz_calendar_widget_component_1.DateTzCalendarWidgetComponent, date_tz_date_picker_component_1.DateTzDatePickerComponent, time_field_component_1.TimeFieldComponent, date_tz_time_field_component_1.DateTzTimeFieldComponent, duration_field_component_1.DurationFieldComponent, date_tz_duration_field_component_1.DateTzDurationFieldComponent, groupHeader_pipe_1.GroupHeaderPipe, radio_select_component_1.RadioSelectComponent, filter_pipe_1.FilterPipe, sanitise_pipe_1.SanitizePipe, spacer_component_1.SpacerComponent, calendar_icon_component_1.CalendarIconComponent, chevron_icon_component_1.ChevronIconComponent, select_option_component_1.SelectOptionComponent, close_icon_component_1.CloseIconComponent, selected_chip_count_component_1.SelectedChipCountComponent, alert_banner_component_1.AlertBannerComponent, error_message_component_1.ErrorMessageComponent, toggle_component_1.ToggleComponent, label_component_1.LabelComponent, modal_component_1.ModalComponent, collapse_header_component_1.CollapseHeaderComponent, switch_group_component_1.SwitchGroupComponent, modal_button_row_component_1.ModalButtonRowComponent, informational_image_component_1.InformationalImageComponent, select_component_1.SelectComponent, legend_dropdown_component_1.LegendDropdownComponent, recurrence_pattern_form_component_1.RecurrencePatternForm, recurrence_date_form_component_1.RecurrenceDateForm, recurrence_booking_form_component_1.RecurringBookingForm, conflicts_modal_component_1.ConflictsModalComponent, override_changes_modal_component_1.OverrideChangesModalComponent, conflict_alert_modal_component_1.ConflictAlertModalComponent, cng_select_component_1.CngSelectComponent, dropdown_trigger_for_directive_1.DropdownTriggerForDirective, cng_select_options_component_1.CngSelectOptionsComponent, tooltip_component_1.TooltipComponent, tooltip_directive_1.TooltipDirective, zoom_warning_component_1.ZoomWarningComponent, custom_snackbar_component_component_1.CustomSnackbarComponent, catering_drop_modal_component_1.CateringDropComponent], + exports: [auto_complete_chip_select_item_component_1.AutoCompleteChipSelectItemComponent, auto_complete_select_option_component_1.AutoCompleteSelectOptionComponent, aca_date_picker_component_1.AcaDatePickerComponent, mck_date_picker_component_1.MckDatePickerComponent, date_tz_calendar_widget_component_1.DateTzCalendarWidgetComponent, date_tz_date_picker_component_1.DateTzDatePickerComponent, time_field_component_1.TimeFieldComponent, date_tz_time_field_component_1.DateTzTimeFieldComponent, duration_field_component_1.DurationFieldComponent, date_tz_duration_field_component_1.DateTzDurationFieldComponent, radio_select_component_1.RadioSelectComponent, filter_pipe_1.FilterPipe, sanitise_pipe_1.SanitizePipe, spacer_component_1.SpacerComponent, calendar_icon_component_1.CalendarIconComponent, chevron_icon_component_1.ChevronIconComponent, alert_banner_component_1.AlertBannerComponent, forms_1.ReactiveFormsModule, forms_1.FormsModule, toggle_component_1.ToggleComponent, label_component_1.LabelComponent, modal_component_1.ModalComponent, collapse_header_component_1.CollapseHeaderComponent, switch_group_component_1.SwitchGroupComponent, modal_button_row_component_1.ModalButtonRowComponent, informational_image_component_1.InformationalImageComponent, select_component_1.SelectComponent, legend_dropdown_component_1.LegendDropdownComponent, recurrence_pattern_form_component_1.RecurrencePatternForm, recurrence_date_form_component_1.RecurrenceDateForm, recurrence_booking_form_component_1.RecurringBookingForm, conflicts_modal_component_1.ConflictsModalComponent, override_changes_modal_component_1.OverrideChangesModalComponent, conflict_alert_modal_component_1.ConflictAlertModalComponent, cng_select_component_1.CngSelectComponent, dropdown_trigger_for_directive_1.DropdownTriggerForDirective, cng_select_options_component_1.CngSelectOptionsComponent, tooltip_component_1.TooltipComponent, tooltip_directive_1.TooltipDirective, zoom_warning_component_1.ZoomWarningComponent], + entryComponents: [custom_snackbar_component_component_1.CustomSnackbarComponent, catering_drop_modal_component_1.CateringDropComponent] }] }], null, null); })(); @@ -44366,14 +44988,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons "../../libs/data-common/src/lib/users/users.service.ts"); var UserEffects = function UserEffects(actions, userService) { - var _this173 = this; + var _this172 = this; _classCallCheck(this, UserEffects); this.actions = actions; this.userService = userService; this.loadUser = loading_1.createLoadingEffect(this.actions, user_actions_1.loadUser, function () { - return _this173.userService.loadCurrentUser(); + return _this172.userService.loadCurrentUser(); }); }; @@ -44726,18 +45348,18 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super64 = _createSuper(AppComponent); function AppComponent(_app, _org, _spaces, _bookings, _router, _route, _dialog) { - var _this174; + var _this173; _classCallCheck(this, AppComponent); - _this174 = _super64.call(this); - _this174._app = _app; - _this174._org = _org; - _this174._spaces = _spaces; - _this174._bookings = _bookings; - _this174._router = _router; - _this174._route = _route; - _this174._dialog = _dialog; // ensure app is trusted in dev mode so we can preserve login. + _this173 = _super64.call(this); + _this173._app = _app; + _this173._org = _org; + _this173._spaces = _spaces; + _this173._bookings = _bookings; + _this173._router = _router; + _this173._route = _route; + _this173._dialog = _dialog; // ensure app is trusted in dev mode so we can preserve login. if (!environment_1.environment.production) { localStorage.setItem('trusted', 'true'); @@ -44745,10 +45367,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (base_1.detectIE() && base_1.detectIE() < 12) { location.href = "".concat(location.origin).concat(location.pathname, "assets/not-supported.html"); - return _possibleConstructorReturn(_this174); + return _possibleConstructorReturn(_this173); } - return _this174; + return _this173; } _createClass(AppComponent, [{ @@ -44799,8 +45421,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var mobileAgents = ['Android', 'webOS', 'iPhone', 'iPad', 'iPod', 'BlackBerry', 'IEMobile', 'Opera Mini']; - for (var _i18 = 0, _mobileAgents = mobileAgents; _i18 < _mobileAgents.length; _i18++) { - var agent = _mobileAgents[_i18]; + for (var _i19 = 0, _mobileAgents = mobileAgents; _i19 < _mobileAgents.length; _i19++) { + var agent = _mobileAgents[_i19]; if (userAgent.indexOf(agent) > -1) { return true; @@ -44835,7 +45457,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } }, directives: [i2.RouterOutlet], - styles: ["/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n@font-face {\n font-family: 'Material Icons';\n font-style: normal;\n font-weight: 400;\n src: url(MaterialIcons-Regular.eot); /* For IE6-8 */\n src: local('Material Icons'),\n local('MaterialIcons-Regular'),\n url(MaterialIcons-Regular.woff2) format('woff2'),\n url(MaterialIcons-Regular.woff) format('woff'),\n url(MaterialIcons-Regular.ttf) format('truetype');\n}\n.material-icons {\n font-family: 'Material Icons';\n font-weight: normal;\n font-style: normal;\n font-size: 24px; /* Preferred icon size */\n display: inline-block;\n line-height: 1;\n text-transform: none;\n letter-spacing: normal;\n word-wrap: normal;\n white-space: nowrap;\n direction: ltr;\n\n /* Support for all WebKit browsers. */\n -webkit-font-smoothing: antialiased;\n /* Support for Safari and Chrome. */\n text-rendering: optimizeLegibility;\n\n /* Support for Firefox. */\n -moz-osx-font-smoothing: grayscale;\n\n /* Support for IE. */\n font-feature-settings: 'liga';\n}\n@font-face {\n font-family: 'Custom-Icons';\n src: url('Custom-Icons.eot?lqqb85');\n src: url('Custom-Icons.eot?lqqb85#iefix') format('embedded-opentype'),\n url('Custom-Icons.woff2?lqqb85') format('woff2'),\n url('Custom-Icons.ttf?lqqb85') format('truetype'),\n url('Custom-Icons.woff?lqqb85') format('woff'),\n url('Custom-Icons.svg?lqqb85#Custom-Icons') format('svg');\n font-weight: normal;\n font-style: normal;\n}\n[class^=\"custom-\"], [class*=\" custom-\"] {\n /* use !important to prevent issues with browser extensions that change fonts */\n font-family: 'Custom-Icons' !important;\n speak: none;\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n line-height: 1;\n\n /* Better Font Rendering =========== */\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.custom-zones:before {\n content: \"\\e90d\";\n}\n.custom-schedule:before {\n content: \"\\e902\";\n}\n.custom-tick:before {\n content: \"\\e904\";\n}\n.custom-Microphone:before {\n content: \"\\e90c\";\n}\n.custom-book:before {\n content: \"\\e903\";\n}\n.custom-desk:before {\n content: \"\\e905\";\n}\n.custom-spaces:before {\n content: \"\\e906\";\n}\n.custom-private:before {\n content: \"\\e907\";\n}\n.custom-not-found:before {\n content: \"\\e908\";\n}\n/* .custom-dropdown:before {\n content: \"\\e909\";\n} */\n.custom-catering:before {\n content: \"\\e90a\";\n}\n.custom-add-attendee:before {\n content: \"\\e90b\";\n}\n.custom-new-event:before {\n content: \"\\e901\";\n}\n.custom-add-user:before {\n content: \"\\e900\";\n}\n/* McKinsey Larish - Regular - Latin */\n@font-face {\n font-family: 'LarishMcKinsey';\n font-style: normal;\n font-weight: 400;\n src: url('Larish_McKinsey_Regular.eot'); /* IE9 Compat Modes */\n src: local('LarishMcKinsey'), local('LarishMcKinseyRegular'),\n url('Larish_McKinsey_Regular.eot?#iefix') format('embedded-opentype'), \n url('Larish_McKinsey_Regular.woff2') format('woff2'), \n url('Larish_McKinsey_Regular.woff') format('woff'), \n url('Larish_McKinsey_Regular.ttf') format('truetype'), \n url('Larish_McKinsey_Regular.svg#LarishMcKinseyRegular') format('svg'); /* Legacy iOS */\n}\n/* McKinsey Larish - Semi-bold - Latin */\n@font-face {\n font-family: 'LarishMcKinsey';\n font-style: normal;\n font-weight: 500;\n src: url('Larish_McKinsey_Semibold.eot'); /* IE9 Compat Modes */\n src: local('LarishMcKinsey'), local('LarishMcKinseySemibold'),\n url('Larish_McKinsey_Semibold.eot?#iefix') format('embedded-opentype'), \n url('Larish_McKinsey_Semibold.woff2') format('woff2'), \n url('Larish_McKinsey_Semibold.woff') format('woff'), \n url('Larish_McKinsey_Semibold.ttf') format('truetype'), \n url('Larish_McKinsey_Semibold.svg#LarishMcKinseySemibold') format('svg'); /* Legacy iOS */\n}\n/* Theinhardt - Light - Latin */\n@font-face {\n font-family: 'Theinhardt';\n font-style: normal;\n font-weight: 300;\n src: local('Theinhardt'),\n url('TheinhardtTT-Light.ttf') format('truetype'), /* Safari, Android, iOS */\n}\n/* Theinhardt - Light Italic - Latin */\n@font-face {\n font-family: 'Theinhardt';\n font-style: italic;\n font-weight: 300;\n src: local('Theinhardt'),\n url('TheinhardtTT-LightItalic.ttf') format('truetype'), /* Safari, Android, iOS */\n}\n/* Theinhardt - Regular - Latin */\n@font-face {\n font-family: 'Theinhardt';\n font-style: normal;\n font-weight: 400;\n src: local('Theinhardt'),\n url('TheinhardtTT-Regular.ttf') format('truetype'), /* Safari, Android, iOS */\n}\n/* Theinhardt - Italic - Latin */\n@font-face {\n font-family: 'Theinhardt';\n font-style: italic;\n font-weight: 400;\n src: local('Theinhardt'),\n url('TheinhardtTT-Italic.ttf') format('truetype'), /* Safari, Android, iOS */\n}\n/* Theinhardt - Medium - Latin */\n@font-face {\n font-family: 'Theinhardt';\n font-style: normal;\n font-weight: 500;\n src: local('Theinhardt'),\n url('TheinhardtTT-Medium.ttf') format('truetype'), /* Safari, Android, iOS */\n}\n/* Theinhardt - Medium Italic - Latin */\n@font-face {\n font-family: 'Theinhardt';\n font-style: italic;\n font-weight: 500;\n src: local('Theinhardt'),\n url('TheinhardtTT-MediumItalic.ttf') format('truetype'), /* Safari, Android, iOS */\n}\n@font-face {\n font-display: swap;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n font-weight: normal;\n src: url('McKinseySans-Regular.woff')\n}\n@font-face {\n font-display: swap;\n font-family: \"McKinsey Sans\";\n font-style: italic;\n font-weight: normal;\n src: url('McKinseySans-Italic.woff')\n}\n@font-face {\n font-display: swap;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n font-weight: 500;\n src: url('McKinseySans-Medium.woff')\n}\n@font-face {\n font-display: swap;\n font-family: \"McKinsey Sans\";\n font-style: italic;\n font-weight: 500;\n src: url('McKinseySans-MediumItalic.woff')\n}\n@font-face {\n font-display: swap;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n font-weight: 400;\n src: local('McKinsey-Sans'),\n url('McKinseySans-Light.woff')\n}\n@font-face {\n font-display: swap;\n font-family: \"McKinsey Sans\";\n font-style: italic;\n font-weight: 400;\n src: url('McKinseySans-LightItalic.woff')\n}\n@font-face {\n font-display: swap;\n font-family: \"Bower\";\n font-style: normal;\n font-weight: bold;\n src: url('Bower-Bold.woff')\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n html,\nbody {\n font-size: 16px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n html,\nbody {\n font-size: 16px;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n html,\nbody {\n font-size: 16px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n html,\nbody {\n font-size: 16px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n html,\nbody {\n font-size: 16px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n html,\nbody {\n font-size: 16px;\n }\n}\n* {\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n box-sizing: border-box;\n}\n.material-icons {\n font-size: 1em;\n}\nspan.highlight {\n color: #1937ea;\n}\n/*=======================*\\\n|| Font size styles ||\n\\*=======================*/\n.fs-small {\n font-size: 0.8rem;\n}\n.fs-normal {\n font-size: 1rem;\n}\n.fs-big {\n font-size: 1.2rem;\n}\n.fs-large {\n font-size: 1.5rem;\n}\n/*==============*\\\n|| Media Styles ||\n\\*==============*/\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mobile-only,\n.mobile {\n display: none !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mobile-only,\n.mobile {\n display: none !important;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .not-desktop,\n.mobile,\n.mobile-only {\n display: none !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .not-desktop,\n.mobile,\n.mobile-only {\n display: none !important;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .desktop,\n.desktop-only,\n.not-tablet,\n.mobile,\n.mobile-only {\n display: none !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .desktop,\n.desktop-only,\n.not-tablet,\n.mobile,\n.mobile-only {\n display: none !important;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .desktop-only,\n.desktop,\n.mobile-hide,\n.not-mobile {\n display: none !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .desktop-only,\n.desktop,\n.mobile-hide,\n.not-mobile {\n display: none !important;\n }\n}\n/*========================*\\\n|| Application styles ||\n\\*========================*/\n.info-block {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n margin: 0.5em;\n width: 100%;\n}\n.info-block .icon {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 1.2em;\n width: 1.2em;\n font-size: 2em;\n}\n.info-block .icon a-spinner {\n font-size: 0.25em;\n}\n.info-block .text {\n margin: 0.5em 0 0;\n}\n/*=====================*\\\n|| TinyMCE overrides ||\n\\*=====================*/\ndiv.tox-silver-sink {\n z-index: 9999;\n}\ndiv.tox-silver-sink .tox-notification {\n display: none;\n}\ndiv.tox-editor-container .tox-menubar button:first-child {\n display: none;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n div.tox-tinymce {\n min-height: 20em;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n div.tox-tinymce {\n min-height: 20em;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCJub2RlX21vZHVsZXMvbWF0ZXJpYWwtZGVzaWduLWljb25zL2ljb25mb250L21hdGVyaWFsLWljb25zLmNzcyIsImFwcHMvc3RhZmYvc3JjL2ZvbnRzL2ljb25zL3N0eWxlLmNzcyIsImxpYnMvdWkvc3JjL2xpYi9mb250cy9mb250cy5jc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvc3R5bGVzL2FwcC5jb21wb25lbnQuc2NzcyIsImFwcHMvc3RhZmYvc3JjL2FwcC9zdHlsZXMvYXBwLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzswQkFBQTtBQVFBOzswQkFBQTtBQWtDQTs7Y0FBQTtBQWdCQTs7c0JBQUE7QUM1Q0E7O3NCQUFBO0FDZEE7RUFDRSw2QkFBNkI7RUFDN0Isa0JBQWtCO0VBQ2xCLGdCQUFnQjtFQUNoQixtQ0FBbUMsRUFBRSxjQUFjO0VBQ25EOzs7O3dEQUlzRDtBQUN4RDtBQUVBO0VBQ0UsNkJBQTZCO0VBQzdCLG1CQUFtQjtFQUNuQixrQkFBa0I7RUFDbEIsZUFBZSxHQUFHLHdCQUF3QjtFQUMxQyxxQkFBcUI7RUFDckIsY0FBYztFQUNkLG9CQUFvQjtFQUNwQixzQkFBc0I7RUFDdEIsaUJBQWlCO0VBQ2pCLG1CQUFtQjtFQUNuQixjQUFjOztFQUVkLHFDQUFxQztFQUNyQyxtQ0FBbUM7RUFDbkMsbUNBQW1DO0VBQ25DLGtDQUFrQzs7RUFFbEMseUJBQXlC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Q0ksaUJBQUE7QUMyRFo7QUR2REk7RUFDSSxpQkFBQTtBQ3lEUjtBRHJEQTs7d0JBQUE7QUFJQTtFQUNJLGFBQUE7QUN1REo7QURyREk7RUFDSSxhQUFBO0FDdURSO0FEakRRO0VBQ0ksYUFBQTtBQ29EWjtBTHRLUTtFSXVIUjtJQUVRLGdCQUFBO0VDa0ROO0FBQ0Y7QUx6S1E7RUlvSFI7SUFFUSxnQkFBQTtFQ3VETjtBQUNGIiwiZmlsZSI6ImFwcHMvc3RhZmYvc3JjL2FwcC9zdHlsZXMvYXBwLmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kY29sb3ItYnJhbmQtZWxlY3RyaWMtYmx1ZTogIzIyNTFmZjtcbiRjb2xvci1icmFuZC1kZWVwLWJsdWU6ICMwNTFjMmM7XG4kY29sb3ItYnJhbmQtY3lhbjogIzAwYTlmNDtcblxuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRmb250LWRhcms6ICMwMDA7XG4kZm9udC1saWdodDogI2ZmZjtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG4kZ3JlZW4xOiAjMjE5NjUzO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvbG9yLXByaW1hcnk6ICMxOTM3ZWE7XG4kY29sb3ItcHJpbWFyeS1saWdodDogbGlnaHRlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuJGNvbG9yLXByaW1hcnktZGFyazogZGFya2VuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG5cbiRjb2xvci1zZWNvbmRhcnk6ICM0Mjg1RjQ7XG4kY29sb3Itc2Vjb25kYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcbiRjb2xvci1zZWNvbmRhcnktZGFyazogZGFya2VuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcblxuJGJhY2tncm91bmQ6ICNmMGYwZjA7XG4kZm9vdGVyLWJhY2s6ICMyNjMyMzg7XG4kaGVhZGVyLWJhY2s6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzA1MUMyQywgIzA1MUMyQyA0MCUsICMwQjI0NTMgNjAlLCAjMUY0MEU2IDEwMCUpO1xuXG4kY29sb3ItdGVybmFyeTogIzA1MWMyYztcblxuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG5cbiRmb250LXN0YWNrOiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcblxuJGhlYWRpbmctZm9udDogXCJMYXJpc2hNY0tpbnNleVwiLCAnR2VvcmdpYScsIHNlcmlmO1xuJGZvbnQ6ICRmb250LXN0YWNrO1xuXG4kZm9udC1mYW1pbHktcHJpbWFyeTogXCJNY0tpbnNleSBTYW5zXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQ2FsaWJyaSwgQ29yYmVsLCBIZWx2ZXRpY2EsIFJvYm90bywgRHJvaWQsIHNhbnMtc2VyaWY7XG4kZm9udC1mYW1pbHktc2Vjb25kYXJ5OiBcIkJvd2VyXCIsIEdlb3JnaWEsIFwiVGltZXMgTmV3IFJvbWFuXCIgc2VyaWY7XG5cbiRiYXNlLXNpemU6IDE2cHg7XG4kdGFibGV0LXNpemU6IDE2cHg7XG4kbW9iaWxlLXNpemU6IDE2cHg7XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kYnJlYWstbW9iaWxlOiA0NTBweDtcbiRicmVhay10YWJsZXQ6IDgwMHB4O1xuJGJyZWFrLWxhcHRvcDogMTAyNHB4O1xuXG4kYnJlYWstbGFuZHNjYXBlLW1vYmlsZTogODAwcHg7XG4kYnJlYWstbGFuZHNjYXBlLXRhYmxldDogMTA0OHB4O1xuJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3A6IDEyODBweDtcbiIsIkBpbXBvcnQgJy4vdmFyaWFibGVzJztcblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5AbWl4aW4gYm94LXNoYWRvdygkY29sb3I6ICMwMDAsICRkZXB0aDogMSkge1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCAxcHggKiAoJGRlcHRoIC0gMSkgcmdiYSgjMDAwLCAuMiksXG4gICAgICAgICAgICAgICAgMCAxcHggMXB4IDAgcmdiYSgjMDAwLCAuMTQpLFxuICAgICAgICAgICAgICAgIDAgMnB4IDFweCAtMXB4IHJnYmEoIzAwMCwgLjEyKTtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbkBtaXhpbiByZXNwb25kLXRvKCRtZWRpYSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSAgQGVsc2UgaWYgJG1lZGlhID09IGxhdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfUBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJAZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdNYXRlcmlhbCBJY29ucyc7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgc3JjOiB1cmwoTWF0ZXJpYWxJY29ucy1SZWd1bGFyLmVvdCk7IC8qIEZvciBJRTYtOCAqL1xuICBzcmM6IGxvY2FsKCdNYXRlcmlhbCBJY29ucycpLFxuICAgICAgIGxvY2FsKCdNYXRlcmlhbEljb25zLVJlZ3VsYXInKSxcbiAgICAgICB1cmwoTWF0ZXJpYWxJY29ucy1SZWd1bGFyLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyksXG4gICAgICAgdXJsKE1hdGVyaWFsSWNvbnMtUmVndWxhci53b2ZmKSBmb3JtYXQoJ3dvZmYnKSxcbiAgICAgICB1cmwoTWF0ZXJpYWxJY29ucy1SZWd1bGFyLnR0ZikgZm9ybWF0KCd0cnVldHlwZScpO1xufVxuXG4ubWF0ZXJpYWwtaWNvbnMge1xuICBmb250LWZhbWlseTogJ01hdGVyaWFsIEljb25zJztcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXNpemU6IDI0cHg7ICAvKiBQcmVmZXJyZWQgaWNvbiBzaXplICovXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xuICB3b3JkLXdyYXA6IG5vcm1hbDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgZGlyZWN0aW9uOiBsdHI7XG5cbiAgLyogU3VwcG9ydCBmb3IgYWxsIFdlYktpdCBicm93c2Vycy4gKi9cbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIC8qIFN1cHBvcnQgZm9yIFNhZmFyaSBhbmQgQ2hyb21lLiAqL1xuICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5O1xuXG4gIC8qIFN1cHBvcnQgZm9yIEZpcmVmb3guICovXG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG5cbiAgLyogU3VwcG9ydCBmb3IgSUUuICovXG4gIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2xpZ2EnO1xufVxuIiwiQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnQ3VzdG9tLUljb25zJztcbiAgc3JjOiAgdXJsKCdmb250cy9DdXN0b20tSWNvbnMuZW90P2xxcWI4NScpO1xuICBzcmM6ICB1cmwoJ2ZvbnRzL0N1c3RvbS1JY29ucy5lb3Q/bHFxYjg1I2llZml4JykgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLFxuICAgIHVybCgnZm9udHMvQ3VzdG9tLUljb25zLndvZmYyP2xxcWI4NScpIGZvcm1hdCgnd29mZjInKSxcbiAgICB1cmwoJ2ZvbnRzL0N1c3RvbS1JY29ucy50dGY/bHFxYjg1JykgZm9ybWF0KCd0cnVldHlwZScpLFxuICAgIHVybCgnZm9udHMvQ3VzdG9tLUljb25zLndvZmY/bHFxYjg1JykgZm9ybWF0KCd3b2ZmJyksXG4gICAgdXJsKCdmb250cy9DdXN0b20tSWNvbnMuc3ZnP2xxcWI4NSNDdXN0b20tSWNvbnMnKSBmb3JtYXQoJ3N2ZycpO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG59XG5cbltjbGFzc149XCJjdXN0b20tXCJdLCBbY2xhc3MqPVwiIGN1c3RvbS1cIl0ge1xuICAvKiB1c2UgIWltcG9ydGFudCB0byBwcmV2ZW50IGlzc3VlcyB3aXRoIGJyb3dzZXIgZXh0ZW5zaW9ucyB0aGF0IGNoYW5nZSBmb250cyAqL1xuICBmb250LWZhbWlseTogJ0N1c3RvbS1JY29ucycgIWltcG9ydGFudDtcbiAgc3BlYWs6IG5vbmU7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC12YXJpYW50OiBub3JtYWw7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICBsaW5lLWhlaWdodDogMTtcblxuICAvKiBCZXR0ZXIgRm9udCBSZW5kZXJpbmcgPT09PT09PT09PT0gKi9cbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG59XG5cbi5jdXN0b20tem9uZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGU5MGRcIjtcbn1cbi5jdXN0b20tc2NoZWR1bGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGU5MDJcIjtcbn1cbi5jdXN0b20tdGljazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTkwNFwiO1xufVxuLmN1c3RvbS1NaWNyb3Bob25lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlOTBjXCI7XG59XG4uY3VzdG9tLWJvb2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGU5MDNcIjtcbn1cbi5jdXN0b20tZGVzazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTkwNVwiO1xufVxuLmN1c3RvbS1zcGFjZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGU5MDZcIjtcbn1cbi5jdXN0b20tcHJpdmF0ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTkwN1wiO1xufVxuLmN1c3RvbS1ub3QtZm91bmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGU5MDhcIjtcbn1cbi8qIC5jdXN0b20tZHJvcGRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGU5MDlcIjtcbn0gKi9cbi5jdXN0b20tY2F0ZXJpbmc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGU5MGFcIjtcbn1cbi5jdXN0b20tYWRkLWF0dGVuZGVlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlOTBiXCI7XG59XG4uY3VzdG9tLW5ldy1ldmVudDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTkwMVwiO1xufVxuLmN1c3RvbS1hZGQtdXNlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTkwMFwiO1xufVxuIiwiLyogTWNLaW5zZXkgTGFyaXNoIC0gUmVndWxhciAtIExhdGluICovXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ0xhcmlzaE1jS2luc2V5JztcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBzcmM6IHVybCgnbGlicy91aS9zcmMvbGliL2ZvbnRzL21ja2luc2V5X2xhcmlzaC9MYXJpc2hfTWNLaW5zZXlfUmVndWxhci5lb3QnKTsgLyogSUU5IENvbXBhdCBNb2RlcyAqL1xuICAgIHNyYzogbG9jYWwoJ0xhcmlzaE1jS2luc2V5JyksIGxvY2FsKCdMYXJpc2hNY0tpbnNleVJlZ3VsYXInKSxcbiAgICB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy9tY2tpbnNleV9sYXJpc2gvTGFyaXNoX01jS2luc2V5X1JlZ3VsYXIuZW90PyNpZWZpeCcpIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSwgLyogSUU2LUlFOCAqL1xuICAgIHVybCgnbGlicy91aS9zcmMvbGliL2ZvbnRzL21ja2luc2V5X2xhcmlzaC9MYXJpc2hfTWNLaW5zZXlfUmVndWxhci53b2ZmMicpIGZvcm1hdCgnd29mZjInKSwgLyogU3VwZXIgTW9kZXJuIEJyb3dzZXJzICovXG4gICAgdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXlfbGFyaXNoL0xhcmlzaF9NY0tpbnNleV9SZWd1bGFyLndvZmYnKSBmb3JtYXQoJ3dvZmYnKSwgLyogTW9kZXJuIEJyb3dzZXJzICovXG4gICAgdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXlfbGFyaXNoL0xhcmlzaF9NY0tpbnNleV9SZWd1bGFyLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKSwgLyogU2FmYXJpLCBBbmRyb2lkLCBpT1MgKi9cbiAgICB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy9tY2tpbnNleV9sYXJpc2gvTGFyaXNoX01jS2luc2V5X1JlZ3VsYXIuc3ZnI0xhcmlzaE1jS2luc2V5UmVndWxhcicpIGZvcm1hdCgnc3ZnJyk7IC8qIExlZ2FjeSBpT1MgKi9cbn1cblxuLyogTWNLaW5zZXkgTGFyaXNoIC0gU2VtaS1ib2xkIC0gTGF0aW4gKi9cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnTGFyaXNoTWNLaW5zZXknO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIHNyYzogdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXlfbGFyaXNoL0xhcmlzaF9NY0tpbnNleV9TZW1pYm9sZC5lb3QnKTsgLyogSUU5IENvbXBhdCBNb2RlcyAqL1xuICAgIHNyYzogbG9jYWwoJ0xhcmlzaE1jS2luc2V5JyksIGxvY2FsKCdMYXJpc2hNY0tpbnNleVNlbWlib2xkJyksXG4gICAgdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXlfbGFyaXNoL0xhcmlzaF9NY0tpbnNleV9TZW1pYm9sZC5lb3Q/I2llZml4JykgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLCAvKiBJRTYtSUU4ICovXG4gICAgdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXlfbGFyaXNoL0xhcmlzaF9NY0tpbnNleV9TZW1pYm9sZC53b2ZmMicpIGZvcm1hdCgnd29mZjInKSwgLyogU3VwZXIgTW9kZXJuIEJyb3dzZXJzICovXG4gICAgdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXlfbGFyaXNoL0xhcmlzaF9NY0tpbnNleV9TZW1pYm9sZC53b2ZmJykgZm9ybWF0KCd3b2ZmJyksIC8qIE1vZGVybiBCcm93c2VycyAqL1xuICAgIHVybCgnbGlicy91aS9zcmMvbGliL2ZvbnRzL21ja2luc2V5X2xhcmlzaC9MYXJpc2hfTWNLaW5zZXlfU2VtaWJvbGQudHRmJykgZm9ybWF0KCd0cnVldHlwZScpLCAvKiBTYWZhcmksIEFuZHJvaWQsIGlPUyAqL1xuICAgIHVybCgnbGlicy91aS9zcmMvbGliL2ZvbnRzL21ja2luc2V5X2xhcmlzaC9MYXJpc2hfTWNLaW5zZXlfU2VtaWJvbGQuc3ZnI0xhcmlzaE1jS2luc2V5U2VtaWJvbGQnKSBmb3JtYXQoJ3N2ZycpOyAvKiBMZWdhY3kgaU9TICovXG59XG5cbi8qIFRoZWluaGFyZHQgLSBMaWdodCAtIExhdGluICovXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ1RoZWluaGFyZHQnO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIHNyYzogbG9jYWwoJ1RoZWluaGFyZHQnKSxcbiAgICB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy90aGVpbmhhcmR0L1RoZWluaGFyZHRUVC1MaWdodC50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyksIC8qIFNhZmFyaSwgQW5kcm9pZCwgaU9TICovXG59XG5cbi8qIFRoZWluaGFyZHQgLSBMaWdodCBJdGFsaWMgLSBMYXRpbiAqL1xuQGZvbnQtZmFjZSB7XG4gICAgZm9udC1mYW1pbHk6ICdUaGVpbmhhcmR0JztcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICBzcmM6IGxvY2FsKCdUaGVpbmhhcmR0JyksXG4gICAgdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvdGhlaW5oYXJkdC9UaGVpbmhhcmR0VFQtTGlnaHRJdGFsaWMudHRmJykgZm9ybWF0KCd0cnVldHlwZScpLCAvKiBTYWZhcmksIEFuZHJvaWQsIGlPUyAqL1xufVxuXG4vKiBUaGVpbmhhcmR0IC0gUmVndWxhciAtIExhdGluICovXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ1RoZWluaGFyZHQnO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIHNyYzogbG9jYWwoJ1RoZWluaGFyZHQnKSxcbiAgICB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy90aGVpbmhhcmR0L1RoZWluaGFyZHRUVC1SZWd1bGFyLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKSwgLyogU2FmYXJpLCBBbmRyb2lkLCBpT1MgKi9cbn1cblxuLyogVGhlaW5oYXJkdCAtIEl0YWxpYyAtIExhdGluICovXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ1RoZWluaGFyZHQnO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIHNyYzogbG9jYWwoJ1RoZWluaGFyZHQnKSxcbiAgICB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy90aGVpbmhhcmR0L1RoZWluaGFyZHRUVC1JdGFsaWMudHRmJykgZm9ybWF0KCd0cnVldHlwZScpLCAvKiBTYWZhcmksIEFuZHJvaWQsIGlPUyAqL1xufVxuXG4vKiBUaGVpbmhhcmR0IC0gTWVkaXVtIC0gTGF0aW4gKi9cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnVGhlaW5oYXJkdCc7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgc3JjOiBsb2NhbCgnVGhlaW5oYXJkdCcpLFxuICAgIHVybCgnbGlicy91aS9zcmMvbGliL2ZvbnRzL3RoZWluaGFyZHQvVGhlaW5oYXJkdFRULU1lZGl1bS50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyksIC8qIFNhZmFyaSwgQW5kcm9pZCwgaU9TICovXG59XG5cbi8qIFRoZWluaGFyZHQgLSBNZWRpdW0gSXRhbGljIC0gTGF0aW4gKi9cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnVGhlaW5oYXJkdCc7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgc3JjOiBsb2NhbCgnVGhlaW5oYXJkdCcpLFxuICAgIHVybCgnbGlicy91aS9zcmMvbGliL2ZvbnRzL3RoZWluaGFyZHQvVGhlaW5oYXJkdFRULU1lZGl1bUl0YWxpYy50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyksIC8qIFNhZmFyaSwgQW5kcm9pZCwgaU9TICovXG59XG5cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZGlzcGxheTogc3dhcDtcbiAgICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgc3JjOiB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy9tY2tpbnNleS1zYW5zL01jS2luc2V5U2Fucy1SZWd1bGFyLndvZmYnKVxufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG4gICAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIHNyYzogdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXktc2Fucy9NY0tpbnNleVNhbnMtSXRhbGljLndvZmYnKVxufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG4gICAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIHNyYzogdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXktc2Fucy9NY0tpbnNleVNhbnMtTWVkaXVtLndvZmYnKVxufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG4gICAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIHNyYzogdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXktc2Fucy9NY0tpbnNleVNhbnMtTWVkaXVtSXRhbGljLndvZmYnKVxufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG4gICAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIHNyYzogbG9jYWwoJ01jS2luc2V5LVNhbnMnKSxcbiAgICB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy9tY2tpbnNleS1zYW5zL01jS2luc2V5U2Fucy1MaWdodC53b2ZmJylcbn1cblxuQGZvbnQtZmFjZSB7XG4gICAgZm9udC1kaXNwbGF5OiBzd2FwO1xuICAgIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBzcmM6IHVybCgnbGlicy91aS9zcmMvbGliL2ZvbnRzL21ja2luc2V5LXNhbnMvTWNLaW5zZXlTYW5zLUxpZ2h0SXRhbGljLndvZmYnKVxufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG4gICAgZm9udC1mYW1pbHk6IFwiQm93ZXJcIjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgc3JjOiB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy9ib3dlci9Cb3dlci1Cb2xkLndvZmYnKVxufVxuIiwiQGltcG9ydCAnbWl4aW5zJztcbkBpbXBvcnQgXCJ+bWF0ZXJpYWwtZGVzaWduLWljb25zL2ljb25mb250L21hdGVyaWFsLWljb25zLmNzc1wiO1xuQGltcG9ydCAnLi4vLi4vZm9udHMvaWNvbnMvc3R5bGUuY3NzJztcbkBpbXBvcnQgJy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvc3JjL2xpYi9mb250cy9mb250cy5jc3MnO1xuXG5odG1sLFxuYm9keSB7XG4gICAgQGluY2x1ZGUgcmVzcG9uZC10byhkZXNrdG9wKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogJGJhc2Utc2l6ZTtcbiAgICB9XG4gICAgQGluY2x1ZGUgcmVzcG9uZC10byh0YWJsZXQpIHtcbiAgICAgICAgZm9udC1zaXplOiAkdGFibGV0LXNpemU7XG4gICAgfVxuICAgIEBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogJG1vYmlsZS1zaXplO1xuICAgIH1cbn1cblxuKiB7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1wcmltYXJ5O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi5tYXRlcmlhbC1pY29ucyB7XG4gICAgZm9udC1zaXplOiAxZW07XG59XG5cbnNwYW4uaGlnaGxpZ2h0IHtcbiAgICBjb2xvcjogJGNvbG9yLXByaW1hcnk7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgIEZvbnQgc2l6ZSBzdHlsZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4uZnMge1xuICAgICYtc21hbGwge1xuICAgICAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICB9XG4gICAgJi1ub3JtYWwge1xuICAgICAgICBmb250LXNpemU6IDFyZW07XG4gICAgfVxuICAgICYtYmlnIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjJyZW07XG4gICAgfVxuICAgICYtbGFyZ2Uge1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTtcbiAgICB9XG59XG5cbi8qPT09PT09PT09PT09PT0qXFxcbnx8IE1lZGlhIFN0eWxlcyB8fFxuXFwqPT09PT09PT09PT09PT0qL1xuXG5AaW5jbHVkZSByZXNwb25kLXRvKG5vdC1tb2JpbGUpIHtcbiAgICAubW9iaWxlLW9ubHksXG4gICAgLm1vYmlsZSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG59XG5cbkBpbmNsdWRlIHJlc3BvbmQtdG8oZGVza3RvcCkge1xuICAgIC5ub3QtZGVza3RvcCxcbiAgICAubW9iaWxlLFxuICAgIC5tb2JpbGUtb25seSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG59XG5cbkBpbmNsdWRlIHJlc3BvbmQtdG8odGFibGV0KSB7XG4gICAgLmRlc2t0b3AsXG4gICAgLmRlc2t0b3Atb25seSxcbiAgICAubm90LXRhYmxldCxcbiAgICAubW9iaWxlLFxuICAgIC5tb2JpbGUtb25seSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG59XG5cbkBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgLmRlc2t0b3Atb25seSxcbiAgICAuZGVza3RvcCxcbiAgICAubW9iaWxlLWhpZGUsXG4gICAgLm5vdC1tb2JpbGUge1xuICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxufVxuXG4vKj09PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBBcHBsaWNhdGlvbiBzdHlsZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuLmluZm8tYmxvY2sge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIG1hcmdpbjogLjVlbTtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgIC5pY29uIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGhlaWdodDogMS4yZW07XG4gICAgICAgIHdpZHRoOiAxLjJlbTtcbiAgICAgICAgZm9udC1zaXplOiAyZW07XG5cbiAgICAgICAgYS1zcGlubmVyIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogLjI1ZW07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAudGV4dCB7XG4gICAgICAgIG1hcmdpbjogLjVlbSAwIDA7XG4gICAgfVxufVxuXG4vKj09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIFRpbnlNQ0Ugb3ZlcnJpZGVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09Ki9cblxuZGl2LnRveC1zaWx2ZXItc2luayB7XG4gICAgei1pbmRleDogOTk5OTtcblxuICAgIC50b3gtbm90aWZpY2F0aW9uIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG59XG5cbmRpdi50b3gtZWRpdG9yLWNvbnRhaW5lciB7XG4gICAgLnRveC1tZW51YmFyIHtcbiAgICAgICAgYnV0dG9uOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmRpdi50b3gtdGlueW1jZSB7XG4gICAgQGluY2x1ZGUgcmVzcG9uZC10byhtb2JpbGUpIHtcbiAgICAgICAgbWluLWhlaWdodDogMjBlbTtcbiAgICB9XG59XG4iLCIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbkBpbXBvcnQgXCJ+bWF0ZXJpYWwtZGVzaWduLWljb25zL2ljb25mb250L21hdGVyaWFsLWljb25zLmNzc1wiO1xuQGltcG9ydCAnLi4vLi4vZm9udHMvaWNvbnMvc3R5bGUuY3NzJztcbkBpbXBvcnQgJy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvc3JjL2xpYi9mb250cy9mb250cy5jc3MnO1xuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogODAwcHgpIHtcbiAgaHRtbCxcbmJvZHkge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDEwNDhweCkge1xuICBodG1sLFxuYm9keSB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIGh0bWwsXG5ib2R5IHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkgYW5kIChtYXgtd2lkdGg6IDEwNDhweCkge1xuICBodG1sLFxuYm9keSB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICBodG1sLFxuYm9keSB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgaHRtbCxcbmJvZHkge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgfVxufVxuXG4qIHtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLm1hdGVyaWFsLWljb25zIHtcbiAgZm9udC1zaXplOiAxZW07XG59XG5cbnNwYW4uaGlnaGxpZ2h0IHtcbiAgY29sb3I6ICMxOTM3ZWE7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgIEZvbnQgc2l6ZSBzdHlsZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLmZzLXNtYWxsIHtcbiAgZm9udC1zaXplOiAwLjhyZW07XG59XG4uZnMtbm9ybWFsIHtcbiAgZm9udC1zaXplOiAxcmVtO1xufVxuLmZzLWJpZyB7XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xufVxuLmZzLWxhcmdlIHtcbiAgZm9udC1zaXplOiAxLjVyZW07XG59XG5cbi8qPT09PT09PT09PT09PT0qXFxcbnx8IE1lZGlhIFN0eWxlcyB8fFxuXFwqPT09PT09PT09PT09PT0qL1xuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1vYmlsZS1vbmx5LFxuLm1vYmlsZSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1vYmlsZS1vbmx5LFxuLm1vYmlsZSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA4MDBweCkge1xuICAubm90LWRlc2t0b3AsXG4ubW9iaWxlLFxuLm1vYmlsZS1vbmx5IHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAxMDQ4cHgpIHtcbiAgLm5vdC1kZXNrdG9wLFxuLm1vYmlsZSxcbi5tb2JpbGUtb25seSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5kZXNrdG9wLFxuLmRlc2t0b3Atb25seSxcbi5ub3QtdGFibGV0LFxuLm1vYmlsZSxcbi5tb2JpbGUtb25seSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDQ4cHgpIHtcbiAgLmRlc2t0b3AsXG4uZGVza3RvcC1vbmx5LFxuLm5vdC10YWJsZXQsXG4ubW9iaWxlLFxuLm1vYmlsZS1vbmx5IHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5kZXNrdG9wLW9ubHksXG4uZGVza3RvcCxcbi5tb2JpbGUtaGlkZSxcbi5ub3QtbW9iaWxlIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuZGVza3RvcC1vbmx5LFxuLmRlc2t0b3AsXG4ubW9iaWxlLWhpZGUsXG4ubm90LW1vYmlsZSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG4vKj09PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBBcHBsaWNhdGlvbiBzdHlsZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT09Ki9cbi5pbmZvLWJsb2NrIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1hcmdpbjogMC41ZW07XG4gIHdpZHRoOiAxMDAlO1xufVxuLmluZm8tYmxvY2sgLmljb24ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgaGVpZ2h0OiAxLjJlbTtcbiAgd2lkdGg6IDEuMmVtO1xuICBmb250LXNpemU6IDJlbTtcbn1cbi5pbmZvLWJsb2NrIC5pY29uIGEtc3Bpbm5lciB7XG4gIGZvbnQtc2l6ZTogMC4yNWVtO1xufVxuLmluZm8tYmxvY2sgLnRleHQge1xuICBtYXJnaW46IDAuNWVtIDAgMDtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBUaW55TUNFIG92ZXJyaWRlcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PSovXG5kaXYudG94LXNpbHZlci1zaW5rIHtcbiAgei1pbmRleDogOTk5OTtcbn1cbmRpdi50b3gtc2lsdmVyLXNpbmsgLnRveC1ub3RpZmljYXRpb24ge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG5kaXYudG94LWVkaXRvci1jb250YWluZXIgLnRveC1tZW51YmFyIGJ1dHRvbjpmaXJzdC1jaGlsZCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIGRpdi50b3gtdGlueW1jZSB7XG4gICAgbWluLWhlaWdodDogMjBlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIGRpdi50b3gtdGlueW1jZSB7XG4gICAgbWluLWhlaWdodDogMjBlbTtcbiAgfVxufSJdfQ== */", "/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n.dropdown[widget] {\n border-radius: 4px;\n}\n.dropdown[widget].fill {\n width: 100%;\n}\n.dropdown-list[widget] {\n border-radius: 4px;\n}\n.spinner svg {\n width: 100%;\n}\nbutton.mat-button,\na[button] {\n background-color: #1937ea;\n border: 1px solid #1937ea;\n color: #fff;\n}\nbutton.mat-button.inverse,\na[button].inverse {\n background-color: #fff;\n color: #1937ea;\n}\nbutton.mat-button.success,\na[button].success {\n background-color: #43a047;\n border-color: #43a047;\n}\nbutton.mat-button[disabled],\na[button][disabled] {\n background-color: #CCC;\n pointer-events: none;\n border-color: #AAA;\n}\n.mat-icon-button {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 2em;\n width: 2em;\n font-size: 1em;\n}\n.mat-icon-button .mat-button-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.mat-icon-button app-icon {\n font-size: 1.5em;\n}\n.dropdown[widget].default {\n width: 9.5em;\n}\n.dynamic-field[widget] .details {\n min-width: 100%;\n}\n.dynamic-field[widget] label {\n margin-left: 0;\n}\n.dynamic-field[widget] .control {\n min-width: 10em;\n}\n.overlay-backdrop {\n background-color: rgba(0, 0, 0, 0.6);\n}\nmat-dialog-container.mat-dialog-container {\n padding: 0;\n overflow: visible;\n border-radius: 0;\n}\nmat-dialog-container.mat-dialog-container .mat-dialog-actions {\n margin: 0 auto;\n}\nmat-dialog-container.mat-dialog-container .mat-dialog-content {\n margin: 0;\n padding: 0;\n max-height: 95vh;\n}\nmat-dialog-container.mat-dialog-container .mat-dialog-content.package-options {\n max-height: 85vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n mat-dialog-container.mat-dialog-container .mat-dialog-content {\n max-height: 100vh;\n width: 100vw;\n height: 100%;\n }\n mat-dialog-container.mat-dialog-container .mat-dialog-content.cancel-dialog-content, mat-dialog-container.mat-dialog-container .mat-dialog-content.booking-duration-content {\n height: auto;\n width: auto;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n mat-dialog-container.mat-dialog-container .mat-dialog-content {\n max-height: 100vh;\n width: 100vw;\n height: 100%;\n }\n mat-dialog-container.mat-dialog-container .mat-dialog-content.cancel-dialog-content, mat-dialog-container.mat-dialog-container .mat-dialog-content.booking-duration-content {\n height: auto;\n width: auto;\n }\n}\nmat-dialog-container.mat-dialog-container header {\n display: flex;\n align-items: center;\n padding: 0.5em 1em;\n width: 100%;\n background-color: #051c2c;\n color: #fff;\n}\nmat-dialog-container.mat-dialog-container header h1, mat-dialog-container.mat-dialog-container header h2, mat-dialog-container.mat-dialog-container header h3, mat-dialog-container.mat-dialog-container header h4 {\n flex: 1;\n min-width: 50%;\n}\nmat-dialog-container.mat-dialog-container header > * {\n margin: 0;\n}\nmat-dialog-container.mat-dialog-container .body {\n padding: 1em;\n pointer-events: auto;\n overflow: hidden auto;\n}\nmat-form-field.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick {\n color: #1937ea;\n}\nmat-form-field.map .mat-form-field-wrapper {\n padding: 0;\n}\nmat-form-field.map .mat-form-field-outline {\n background-color: #fff;\n box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12);\n border-radius: 4px;\n}\nmat-form-field.desk .mat-form-field-flex {\n background-color: #fff;\n padding: 0.3em;\n}\nmat-form-field.rounded .mat-form-field-outline-start {\n border-radius: 2em 0 0 2em;\n min-width: 2em;\n}\nmat-form-field.rounded .mat-form-field-outline-end {\n border-radius: 0 2em 2em 0;\n}\n.mat-form-field-infix {\n border-top: none;\n}\n.mat-select-panel .mat-option.mat-selected:not(.mat-option-disabled) {\n color: #1937ea;\n}\nmat-select .mat-select-trigger .mat-select-arrow-wrapper {\n transform: none;\n}\n.mat-simple-snackbar button.mat-button {\n background: none;\n border: none;\n}\n.mat-snack-bar-container.success {\n background-color: #43a047;\n color: #fff;\n}\n.mat-snack-bar-container.warn {\n background-color: #ffb300;\n color: #fff;\n}\n.mat-snack-bar-container.error {\n background-color: #e53935;\n color: #fff;\n}\n.mat-snack-bar-container.info {\n background-color: #4285F4;\n color: #fff;\n}\n.mat-chip.mat-standard-chip.mat-primary {\n background-color: #1937ea;\n color: #fff;\n}\n.mat-chip.mat-standard-chip.mat-accent {\n background-color: #ffb300;\n}\n.mat-spinner circle {\n stroke: #1937ea;\n}\n.mat-progress-bar-fill::after {\n background-color: #1937ea;\n}\n.mat-tooltip {\n white-space: pre-line;\n}\ndiv.mat-menu-panel {\n max-width: calc(100vw - 1em);\n max-height: 65vh;\n}\ndiv.mat-menu-panel.dark-mode {\n background-color: #363636;\n}\nmat-radio-button .mat-radio-label-content {\n white-space: initial;\n}\nmat-checkbox .mat-checkbox-label-content {\n white-space: initial;\n}\ndiv.mat-select-panel {\n max-width: 90vw;\n}\na-map svg text {\n pointer-events: none;\n}\na-map .zooming [id^=chair] {\n display: none;\n}\n.map-outlet {\n position: absolute !important;\n}\nlabel.mat-checkbox-layout, label.mat-radio-label {\n white-space: normal;\n}\n/*\n Flex box layout common classes\n*/\n.flex-row {\n height: 100%;\n flex-direction: row;\n box-sizing: border-box;\n display: flex;\n place-content: center flex-start;\n align-items: center;\n}\n.flex-column {\n height: 100%;\n flex-direction: column;\n box-sizing: border-box;\n display: flex;\n place-content: stretch flex-start;\n align-items: stretch;\n max-width: 100%;\n}\n.flex-center {\n display: flex;\n place-content: center;\n align-items: center;\n}\n.flex-row-end {\n place-content: center flex-end;\n}\n.flex-grow {\n flex: 1;\n}\n.flex-space-between {\n place-content: space-between;\n}\n/*\n ^^^ Flex box layout common classes ^^^\n*/\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvc3R5bGVzL2N1c3RvbS1lbGVtZW50LnN0eWxlcy5zY3NzIiwiYXBwcy9zdGFmZi9zcmMvYXBwL3N0eWxlcy9jdXN0b20tZWxlbWVudC5zdHlsZXMuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FBMURBOzswQkFBQTtBQVFBOzswQkFBQTtBQWtDQTs7Y0FBQTtBQWdCQTs7c0JBQUE7QUM1Q0E7O3NCQUFBO0FDWEE7RUFDSSxrQkFBQTtBQ3lCSjtBRHZCSTtFQUNJLFdBQUE7QUN5QlI7QURyQkE7RUFDSSxrQkFBQTtBQ3dCSjtBRHBCSTtFQUNJLFdBQUE7QUN1QlI7QURuQkE7O0VBRUkseUJGS1k7RUVKWix5QkFBQTtFQUNBLFdGWlM7QUdrQ2I7QURwQkk7O0VBQ0ksc0JBQUE7RUFDQSxjRkRRO0FHd0JoQjtBRHBCSTs7RUFDSSx5QkZsQkU7RUVtQkYscUJGbkJFO0FHMENWO0FEcEJJOztFQUNJLHNCQUFBO0VBQ0Esb0JBQUE7RUFDQSxrQkFBQTtBQ3VCUjtBRG5CQTtFQUNJLGFBQUE7RUFDQSxtQkFBQTtFQUNBLHVCQUFBO0VBQ0EsV0FBQTtFQUNBLFVBQUE7RUFDQSxjQUFBO0FDc0JKO0FEcEJJO0VBQ0ksYUFBQTtFQUNBLG1CQUFBO0VBQ0EsdUJBQUE7QUNzQlI7QURuQkk7RUFDSSxnQkFBQTtBQ3FCUjtBRGhCSTtFQUNJLFlBQUE7QUNtQlI7QURkSTtFQUNJLGVBQUE7QUNpQlI7QURkSTtFQUNJLGNBQUE7QUNnQlI7QURiSTtFQUNJLGVBQUE7QUNlUjtBRFhBO0VBQ0ksb0NBQUE7QUNjSjtBRFhBO0VBQ0ksVUFBQTtFQUNBLGlCQUFBO0VBQ0EsZ0JBQUE7QUNjSjtBRFpJO0VBQ0ksY0FBQTtBQ2NSO0FEWEk7RUFDSSxTQUFBO0VBQ0EsVUFBQTtFQUNBLGdCQUFBO0FDYVI7QURaUTtFQUNJLGdCQUFBO0FDY1o7QUYvRlE7RUM0RUo7SUFRUSxpQkFBQTtJQUNBLFlBQUE7SUFDQSxZQUFBO0VDZVY7RURkVTtJQUNJLFlBQUE7SUFDQSxXQUFBO0VDZ0JkO0FBQ0Y7QUZ2R1E7RUN5RUo7SUFRUSxpQkFBQTtJQUNBLFlBQUE7SUFDQSxZQUFBO0VDMEJWO0VEekJVO0lBQ0ksWUFBQTtJQUNBLFdBQUE7RUMyQmQ7QUFDRjtBRHZCSTtFQUNJLGFBQUE7RUFDQSxtQkFBQTtFQUNBLGtCQUFBO0VBQ0EsV0FBQTtFQUNBLHlCRi9FUTtFRWdGUixXRjNHSztBR29JYjtBRHZCUTtFQUNJLE9BQUE7RUFDQSxjQUFBO0FDeUJaO0FEdEJRO0VBQ0ksU0FBQTtBQ3dCWjtBRHBCSTtFQUNJLFlBQUE7RUFDQSxvQkFBQTtFQUNBLHFCQUFBO0FDc0JSO0FEaEJRO0VBQ0ksY0ZsSEk7QUdxSWhCO0FEZFE7RUFDSSxVQUFBO0FDZ0JaO0FEYlE7RUFDSSxzQkFBQTtFRC9JUixpSEFBQTtFQ2lKUSxrQkFBQTtBQ2VaO0FEVlE7RUFDSSxzQkFBQTtFQUNBLGNBQUE7QUNZWjtBRFBRO0VBQ0ksMEJBQUE7RUFDQSxjQUFBO0FDU1o7QURQUTtFQUNJLDBCQUFBO0FDU1o7QURIQTtFQUNJLGdCQUFBO0FDTUo7QURBWTtFQUNJLGNGN0pBO0FHZ0toQjtBREtRO0VBQ0ksZUFBQTtBQ0ZaO0FEUUk7RUFDSSxnQkFBQTtFQUNBLFlBQUE7QUNMUjtBRFVJO0VBQ0kseUJGak1FO0VFa01GLFdBQUE7QUNQUjtBRFNJO0VBQ0kseUJGaE1FO0VFaU1GLFdBQUE7QUNQUjtBRFNJO0VBQ0kseUJGaE1BO0VFaU1BLFdBQUE7QUNQUjtBRFNJO0VBQ0kseUJGNUxVO0VFNkxWLFdBQUE7QUNQUjtBRFlJO0VBQ0kseUJGdk1RO0VFd01SLFdBQUE7QUNUUjtBRFdJO0VBQ0kseUJGbk5FO0FHME1WO0FEY0k7RUFDSSxlRmpOUTtBR3NNaEI7QURnQkk7RUFDSSx5QkZ2TlE7QUcwTWhCO0FEaUJBO0VBQ0kscUJBQUE7QUNkSjtBRGlCQTtFQUNJLDRCQUFBO0VBQ0EsZ0JBQUE7QUNkSjtBRGdCSTtFQUNJLHlCQUFBO0FDZFI7QURtQkk7RUFDSSxvQkFBQTtBQ2hCUjtBRHFCSTtFQUNJLG9CQUFBO0FDbEJSO0FEc0JBO0VBQ0ksZUFBQTtBQ25CSjtBRHdCUTtFQUNJLG9CQUFBO0FDckJaO0FEMEJRO0VBQ0ksYUFBQTtBQ3hCWjtBRDZCQTtFQUNJLDZCQUFBO0FDMUJKO0FEOEJJO0VBRUksbUJBQUE7QUM1QlI7QURrQ0E7O0NBQUE7QUFHQTtFQUNJLFlBQUE7RUFDQSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0EsYUFBQTtFQUNBLGdDQUFBO0VBQ0EsbUJBQUE7QUMvQko7QURrQ0E7RUFDSSxZQUFBO0VBQ0Esc0JBQUE7RUFDQSxzQkFBQTtFQUNBLGFBQUE7RUFDQSxpQ0FBQTtFQUNBLG9CQUFBO0VBQ0EsZUFBQTtBQy9CSjtBRGtDQTtFQUNJLGFBQUE7RUFDQSxxQkFBQTtFQUNBLG1CQUFBO0FDL0JKO0FEa0NBO0VBQ0ksOEJBQUE7QUMvQko7QURrQ0E7RUFDSSxPQUFBO0FDL0JKO0FEa0NBO0VBQ0ksNEJBQUE7QUMvQko7QURpQ0E7O0NBQUEiLCJmaWxlIjoiYXBwcy9zdGFmZi9zcmMvYXBwL3N0eWxlcy9jdXN0b20tZWxlbWVudC5zdHlsZXMuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGNvbG9yLWJyYW5kLWVsZWN0cmljLWJsdWU6ICMyMjUxZmY7XG4kY29sb3ItYnJhbmQtZGVlcC1ibHVlOiAjMDUxYzJjO1xuJGNvbG9yLWJyYW5kLWN5YW46ICMwMGE5ZjQ7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kZm9udC1kYXJrOiAjMDAwO1xuJGZvbnQtbGlnaHQ6ICNmZmY7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuJGdyZWVuMTogIzIxOTY1MztcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2xvci1wcmltYXJ5OiAjMTkzN2VhO1xuJGNvbG9yLXByaW1hcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcbiRjb2xvci1wcmltYXJ5LWRhcms6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuXG4kY29sb3Itc2Vjb25kYXJ5OiAjNDI4NUY0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodDogbGlnaHRlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG4kY29sb3Itc2Vjb25kYXJ5LWRhcms6IGRhcmtlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG5cbiRiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuJGZvb3Rlci1iYWNrOiAjMjYzMjM4O1xuJGhlYWRlci1iYWNrOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNTFDMkMsICMwNTFDMkMgNDAlLCAjMEIyNDUzIDYwJSwgIzFGNDBFNiAxMDAlKTtcblxuJGNvbG9yLXRlcm5hcnk6ICMwNTFjMmM7XG5cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuXG4kZm9udC1zdGFjazogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiRoZWFkaW5nLWZvbnQ6IFwiTGFyaXNoTWNLaW5zZXlcIiwgJ0dlb3JnaWEnLCBzZXJpZjtcbiRmb250OiAkZm9udC1zdGFjaztcblxuJGZvbnQtZmFtaWx5LXByaW1hcnk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LXNlY29uZGFyeTogXCJCb3dlclwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiIHNlcmlmO1xuXG4kYmFzZS1zaXplOiAxNnB4O1xuJHRhYmxldC1zaXplOiAxNnB4O1xuJG1vYmlsZS1zaXplOiAxNnB4O1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGJyZWFrLW1vYmlsZTogNDUwcHg7XG4kYnJlYWstdGFibGV0OiA4MDBweDtcbiRicmVhay1sYXB0b3A6IDEwMjRweDtcblxuJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGU6IDgwMHB4O1xuJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQ6IDEwNDhweDtcbiRicmVhay1sYW5kc2NhcGUtbGFwdG9wOiAxMjgwcHg7XG4iLCJAaW1wb3J0ICcuL3ZhcmlhYmxlcyc7XG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuQG1peGluIGJveC1zaGFkb3coJGNvbG9yOiAjMDAwLCAkZGVwdGg6IDEpIHtcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMXB4ICogKCRkZXB0aCAtIDEpIHJnYmEoIzAwMCwgLjIpLFxuICAgICAgICAgICAgICAgIDAgMXB4IDFweCAwIHJnYmEoIzAwMCwgLjE0KSxcbiAgICAgICAgICAgICAgICAwIDJweCAxcHggLTFweCByZ2JhKCMwMDAsIC4xMik7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG5AbWl4aW4gcmVzcG9uZC10bygkbWVkaWEpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gIEBlbHNlIGlmICRtZWRpYSA9PSBsYXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1AZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQGltcG9ydCAndmFyaWFibGVzJztcbkBpbXBvcnQgJ21peGlucyc7XG5cbi5kcm9wZG93blt3aWRnZXRdIHtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG5cbiAgICAmLmZpbGwge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG59XG5cbi5kcm9wZG93bi1saXN0W3dpZGdldF0ge1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cblxuLnNwaW5uZXIge1xuICAgIHN2ZyB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbn1cblxuYnV0dG9uLm1hdC1idXR0b24sXG5hW2J1dHRvbl0ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci1wcmltYXJ5O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRjb2xvci1wcmltYXJ5O1xuICAgIGNvbG9yOiAkZm9udC1saWdodDtcblxuICAgICYuaW52ZXJzZSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItcHJpbWFyeTtcbiAgICB9XG5cbiAgICAmLnN1Y2Nlc3Mge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc3VjY2VzcztcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkc3VjY2VzcztcbiAgICB9XG5cbiAgICAmW2Rpc2FibGVkXSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNDQ0M7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICBib3JkZXItY29sb3I6ICNBQUE7XG4gICAgfVxufVxuXG4ubWF0LWljb24tYnV0dG9uIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgaGVpZ2h0OiAyZW07XG4gICAgd2lkdGg6IDJlbTtcbiAgICBmb250LXNpemU6IDFlbTtcblxuICAgIC5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICB9XG5cbiAgICBhcHAtaWNvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41ZW07XG4gICAgfVxufVxuXG4uZHJvcGRvd25bd2lkZ2V0XSB7XG4gICAgJi5kZWZhdWx0IHtcbiAgICAgICAgd2lkdGg6IDkuNWVtO1xuICAgIH1cbn1cblxuLmR5bmFtaWMtZmllbGRbd2lkZ2V0XSB7XG4gICAgLmRldGFpbHMge1xuICAgICAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgfVxuXG4gICAgbGFiZWwge1xuICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICB9XG5cbiAgICAuY29udHJvbCB7XG4gICAgICAgIG1pbi13aWR0aDogMTBlbTtcbiAgICB9XG59XG5cbi5vdmVybGF5LWJhY2tkcm9wIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCMwMDAsIDAuNik7XG59XG5cbm1hdC1kaWFsb2ctY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG5cbiAgICAubWF0LWRpYWxvZy1hY3Rpb25zIHtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgfVxuXG4gICAgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgbWF4LWhlaWdodDogOTV2aDtcbiAgICAgICAgJi5wYWNrYWdlLW9wdGlvbnMge1xuICAgICAgICAgICAgbWF4LWhlaWdodDogODV2aDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgICAgICAgICB3aWR0aDogMTAwdnc7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICAmLmNhbmNlbC1kaWFsb2ctY29udGVudCwgJi5ib29raW5nLWR1cmF0aW9uLWNvbnRlbnQge1xuICAgICAgICAgICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgICAgICAgICB3aWR0aDogYXV0bztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhlYWRlciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIHBhZGRpbmc6IC41ZW0gMWVtO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXRlcm5hcnk7XG4gICAgICAgIGNvbG9yOiAkZm9udC1saWdodDtcblxuICAgICAgICBoMSwgaDIsIGgzLCBoNCB7XG4gICAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgICAgbWluLXdpZHRoOiA1MCU7XG4gICAgICAgIH1cblxuICAgICAgICA+ICoge1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmJvZHkge1xuICAgICAgICBwYWRkaW5nOiAxZW07XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuIGF1dG87XG4gICAgfVxufVxuXG5tYXQtZm9ybS1maWVsZCB7XG4gICAgJi5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQge1xuICAgICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayB7XG4gICAgICAgICAgICBjb2xvcjogJGNvbG9yLXByaW1hcnk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLm1hcCB7XG4gICAgICAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIH1cblxuICAgICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgICAgICAgICAgQGluY2x1ZGUgYm94LXNoYWRvdztcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYuZGVzayB7XG4gICAgICAgIC5tYXQtZm9ybS1maWVsZC1mbGV4IHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgICAgICAgICBwYWRkaW5nOiAwLjNlbVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi5yb3VuZGVkIHtcbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQge1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMmVtIDAgMCAyZW07XG4gICAgICAgICAgICBtaW4td2lkdGg6IDJlbTtcbiAgICAgICAgfVxuICAgICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAyZW0gMmVtIDA7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICBib3JkZXItdG9wOiBub25lO1xufVxuXG4ubWF0LXNlbGVjdC1wYW5lbCB7XG4gICAgLm1hdC1vcHRpb24ge1xuICAgICAgICAmLm1hdC1zZWxlY3RlZCB7XG4gICAgICAgICAgICAmOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkY29sb3ItcHJpbWFyeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxubWF0LXNlbGVjdCB7XG4gICAgLm1hdC1zZWxlY3QtdHJpZ2dlciB7XG4gICAgICAgIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXIge1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBub25lO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4ubWF0LXNpbXBsZS1zbmFja2JhciB7XG4gICAgYnV0dG9uLm1hdC1idXR0b24ge1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgfVxufVxuXG4ubWF0LXNuYWNrLWJhci1jb250YWluZXIge1xuICAgICYuc3VjY2VzcyB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzdWNjZXNzO1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICB9XG4gICAgJi53YXJuIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHBlbmRpbmc7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgIH1cbiAgICAmLmVycm9yIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGVycm9yO1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICB9XG4gICAgJi5pbmZvIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXNlY29uZGFyeTtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgfVxufVxuXG4ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAge1xuICAgICYubWF0LXByaW1hcnkge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3ItcHJpbWFyeTtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgfVxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwZW5kaW5nO1xuICAgIH1cbn1cblxuLm1hdC1zcGlubmVyIHtcbiAgICBjaXJjbGUge1xuICAgICAgICBzdHJva2U6ICRjb2xvci1wcmltYXJ5O1xuICAgIH1cbn1cblxuLm1hdC1wcm9ncmVzcy1iYXItZmlsbCB7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3ItcHJpbWFyeTtcbiAgICB9XG59XG5cbi5tYXQtdG9vbHRpcCB7XG4gICAgd2hpdGUtc3BhY2U6IHByZS1saW5lO1xufVxuXG5kaXYubWF0LW1lbnUtcGFuZWwge1xuICAgIG1heC13aWR0aDogY2FsYygxMDB2dyAtIDFlbSk7XG4gICAgbWF4LWhlaWdodDogNjV2aDtcblxuICAgICYuZGFyay1tb2RlIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzM2MzYzNjtcbiAgICB9XG59XG5cbm1hdC1yYWRpby1idXR0b24ge1xuICAgIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudCB7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBpbml0aWFsO1xuICAgIH1cbn1cblxubWF0LWNoZWNrYm94IHtcbiAgICAubWF0LWNoZWNrYm94LWxhYmVsLWNvbnRlbnQge1xuICAgICAgICB3aGl0ZS1zcGFjZTogaW5pdGlhbDtcbiAgICB9XG59XG5cbmRpdi5tYXQtc2VsZWN0LXBhbmVsIHtcbiAgICBtYXgtd2lkdGg6IDkwdnc7XG59XG5cbmEtbWFwIHtcbiAgICBzdmcge1xuICAgICAgICB0ZXh0IHtcbiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLnpvb21pbmcge1xuICAgICAgICBbaWRePVwiY2hhaXJcIl0ge1xuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLm1hcC1vdXRsZXQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O1xufVxuXG5sYWJlbCB7XG4gICAgJi5tYXQtY2hlY2tib3gtbGF5b3V0LFxuICAgICYubWF0LXJhZGlvLWxhYmVsIHtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgICB9XG59XG5cblxuXG4vKlxuICAgIEZsZXggYm94IGxheW91dCBjb21tb24gY2xhc3Nlc1xuKi9cbi5mbGV4LXJvdyB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBsYWNlLWNvbnRlbnQ6IGNlbnRlciBmbGV4LXN0YXJ0O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbn1cbi5mbGV4LWNvbHVtbiB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBsYWNlLWNvbnRlbnQ6IHN0cmV0Y2ggZmxleC1zdGFydDtcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG59XG5cbi5mbGV4LWNlbnRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwbGFjZS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLmZsZXgtcm93LWVuZCB7XG4gICAgcGxhY2UtY29udGVudDogY2VudGVyIGZsZXgtZW5kO1xufVxuXG4uZmxleC1ncm93IHtcbiAgICBmbGV4OiAxO1xufVxuXG4uZmxleC1zcGFjZS1iZXR3ZWVuIHtcbiAgICBwbGFjZS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuLypcbiAgIF5eXiBGbGV4IGJveCBsYXlvdXQgY29tbW9uIGNsYXNzZXMgXl5eXG4qLyIsIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLmRyb3Bkb3duW3dpZGdldF0ge1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG4uZHJvcGRvd25bd2lkZ2V0XS5maWxsIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5kcm9wZG93bi1saXN0W3dpZGdldF0ge1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG5cbi5zcGlubmVyIHN2ZyB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG5idXR0b24ubWF0LWJ1dHRvbixcbmFbYnV0dG9uXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxOTM3ZWE7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMxOTM3ZWE7XG4gIGNvbG9yOiAjZmZmO1xufVxuYnV0dG9uLm1hdC1idXR0b24uaW52ZXJzZSxcbmFbYnV0dG9uXS5pbnZlcnNlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgY29sb3I6ICMxOTM3ZWE7XG59XG5idXR0b24ubWF0LWJ1dHRvbi5zdWNjZXNzLFxuYVtidXR0b25dLnN1Y2Nlc3Mge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDNhMDQ3O1xuICBib3JkZXItY29sb3I6ICM0M2EwNDc7XG59XG5idXR0b24ubWF0LWJ1dHRvbltkaXNhYmxlZF0sXG5hW2J1dHRvbl1bZGlzYWJsZWRdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0NDQztcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIGJvcmRlci1jb2xvcjogI0FBQTtcbn1cblxuLm1hdC1pY29uLWJ1dHRvbiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBoZWlnaHQ6IDJlbTtcbiAgd2lkdGg6IDJlbTtcbiAgZm9udC1zaXplOiAxZW07XG59XG4ubWF0LWljb24tYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cbi5tYXQtaWNvbi1idXR0b24gYXBwLWljb24ge1xuICBmb250LXNpemU6IDEuNWVtO1xufVxuXG4uZHJvcGRvd25bd2lkZ2V0XS5kZWZhdWx0IHtcbiAgd2lkdGg6IDkuNWVtO1xufVxuXG4uZHluYW1pYy1maWVsZFt3aWRnZXRdIC5kZXRhaWxzIHtcbiAgbWluLXdpZHRoOiAxMDAlO1xufVxuLmR5bmFtaWMtZmllbGRbd2lkZ2V0XSBsYWJlbCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLmR5bmFtaWMtZmllbGRbd2lkZ2V0XSAuY29udHJvbCB7XG4gIG1pbi13aWR0aDogMTBlbTtcbn1cblxuLm92ZXJsYXktYmFja2Ryb3Age1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNik7XG59XG5cbm1hdC1kaWFsb2ctY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgcGFkZGluZzogMDtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG5tYXQtZGlhbG9nLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRhaW5lciAubWF0LWRpYWxvZy1hY3Rpb25zIHtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG5tYXQtZGlhbG9nLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRhaW5lciAubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBtYXgtaGVpZ2h0OiA5NXZoO1xufVxubWF0LWRpYWxvZy1jb250YWluZXIubWF0LWRpYWxvZy1jb250YWluZXIgLm1hdC1kaWFsb2ctY29udGVudC5wYWNrYWdlLW9wdGlvbnMge1xuICBtYXgtaGVpZ2h0OiA4NXZoO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgbWF0LWRpYWxvZy1jb250YWluZXIubWF0LWRpYWxvZy1jb250YWluZXIgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgfVxuICBtYXQtZGlhbG9nLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRhaW5lciAubWF0LWRpYWxvZy1jb250ZW50LmNhbmNlbC1kaWFsb2ctY29udGVudCwgbWF0LWRpYWxvZy1jb250YWluZXIubWF0LWRpYWxvZy1jb250YWluZXIgLm1hdC1kaWFsb2ctY29udGVudC5ib29raW5nLWR1cmF0aW9uLWNvbnRlbnQge1xuICAgIGhlaWdodDogYXV0bztcbiAgICB3aWR0aDogYXV0bztcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIG1hdC1kaWFsb2ctY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGFpbmVyIC5tYXQtZGlhbG9nLWNvbnRlbnQge1xuICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gIH1cbiAgbWF0LWRpYWxvZy1jb250YWluZXIubWF0LWRpYWxvZy1jb250YWluZXIgLm1hdC1kaWFsb2ctY29udGVudC5jYW5jZWwtZGlhbG9nLWNvbnRlbnQsIG1hdC1kaWFsb2ctY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGFpbmVyIC5tYXQtZGlhbG9nLWNvbnRlbnQuYm9va2luZy1kdXJhdGlvbi1jb250ZW50IHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgd2lkdGg6IGF1dG87XG4gIH1cbn1cbm1hdC1kaWFsb2ctY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGFpbmVyIGhlYWRlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDAuNWVtIDFlbTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwNTFjMmM7XG4gIGNvbG9yOiAjZmZmO1xufVxubWF0LWRpYWxvZy1jb250YWluZXIubWF0LWRpYWxvZy1jb250YWluZXIgaGVhZGVyIGgxLCBtYXQtZGlhbG9nLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRhaW5lciBoZWFkZXIgaDIsIG1hdC1kaWFsb2ctY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGFpbmVyIGhlYWRlciBoMywgbWF0LWRpYWxvZy1jb250YWluZXIubWF0LWRpYWxvZy1jb250YWluZXIgaGVhZGVyIGg0IHtcbiAgZmxleDogMTtcbiAgbWluLXdpZHRoOiA1MCU7XG59XG5tYXQtZGlhbG9nLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRhaW5lciBoZWFkZXIgPiAqIHtcbiAgbWFyZ2luOiAwO1xufVxubWF0LWRpYWxvZy1jb250YWluZXIubWF0LWRpYWxvZy1jb250YWluZXIgLmJvZHkge1xuICBwYWRkaW5nOiAxZW07XG4gIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICBvdmVyZmxvdzogaGlkZGVuIGF1dG87XG59XG5cbm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayB7XG4gIGNvbG9yOiAjMTkzN2VhO1xufVxubWF0LWZvcm0tZmllbGQubWFwIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgcGFkZGluZzogMDtcbn1cbm1hdC1mb3JtLWZpZWxkLm1hcCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJveC1zaGFkb3c6IDAgMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwIDFweCAxcHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG5tYXQtZm9ybS1maWVsZC5kZXNrIC5tYXQtZm9ybS1maWVsZC1mbGV4IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgcGFkZGluZzogMC4zZW07XG59XG5tYXQtZm9ybS1maWVsZC5yb3VuZGVkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0IHtcbiAgYm9yZGVyLXJhZGl1czogMmVtIDAgMCAyZW07XG4gIG1pbi13aWR0aDogMmVtO1xufVxubWF0LWZvcm0tZmllbGQucm91bmRlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICBib3JkZXItcmFkaXVzOiAwIDJlbSAyZW0gMDtcbn1cblxuLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgYm9yZGVyLXRvcDogbm9uZTtcbn1cblxuLm1hdC1zZWxlY3QtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICBjb2xvcjogIzE5MzdlYTtcbn1cblxubWF0LXNlbGVjdCAubWF0LXNlbGVjdC10cmlnZ2VyIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXIge1xuICB0cmFuc2Zvcm06IG5vbmU7XG59XG5cbi5tYXQtc2ltcGxlLXNuYWNrYmFyIGJ1dHRvbi5tYXQtYnV0dG9uIHtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgYm9yZGVyOiBub25lO1xufVxuXG4ubWF0LXNuYWNrLWJhci1jb250YWluZXIuc3VjY2VzcyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0M2EwNDc7XG4gIGNvbG9yOiAjZmZmO1xufVxuLm1hdC1zbmFjay1iYXItY29udGFpbmVyLndhcm4ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZiMzAwO1xuICBjb2xvcjogI2ZmZjtcbn1cbi5tYXQtc25hY2stYmFyLWNvbnRhaW5lci5lcnJvciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlNTM5MzU7XG4gIGNvbG9yOiAjZmZmO1xufVxuLm1hdC1zbmFjay1iYXItY29udGFpbmVyLmluZm8ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDI4NUY0O1xuICBjb2xvcjogI2ZmZjtcbn1cblxuLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1wcmltYXJ5IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE5MzdlYTtcbiAgY29sb3I6ICNmZmY7XG59XG4ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWFjY2VudCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmIzMDA7XG59XG5cbi5tYXQtc3Bpbm5lciBjaXJjbGUge1xuICBzdHJva2U6ICMxOTM3ZWE7XG59XG5cbi5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE5MzdlYTtcbn1cblxuLm1hdC10b29sdGlwIHtcbiAgd2hpdGUtc3BhY2U6IHByZS1saW5lO1xufVxuXG5kaXYubWF0LW1lbnUtcGFuZWwge1xuICBtYXgtd2lkdGg6IGNhbGMoMTAwdncgLSAxZW0pO1xuICBtYXgtaGVpZ2h0OiA2NXZoO1xufVxuZGl2Lm1hdC1tZW51LXBhbmVsLmRhcmstbW9kZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzNjM2MzY7XG59XG5cbm1hdC1yYWRpby1idXR0b24gLm1hdC1yYWRpby1sYWJlbC1jb250ZW50IHtcbiAgd2hpdGUtc3BhY2U6IGluaXRpYWw7XG59XG5cbm1hdC1jaGVja2JveCAubWF0LWNoZWNrYm94LWxhYmVsLWNvbnRlbnQge1xuICB3aGl0ZS1zcGFjZTogaW5pdGlhbDtcbn1cblxuZGl2Lm1hdC1zZWxlY3QtcGFuZWwge1xuICBtYXgtd2lkdGg6IDkwdnc7XG59XG5cbmEtbWFwIHN2ZyB0ZXh0IHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5hLW1hcCAuem9vbWluZyBbaWRePWNoYWlyXSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5tYXAtb3V0bGV0IHtcbiAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XG59XG5cbmxhYmVsLm1hdC1jaGVja2JveC1sYXlvdXQsIGxhYmVsLm1hdC1yYWRpby1sYWJlbCB7XG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG59XG5cbi8qXG4gICAgRmxleCBib3ggbGF5b3V0IGNvbW1vbiBjbGFzc2VzXG4qL1xuLmZsZXgtcm93IHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBkaXNwbGF5OiBmbGV4O1xuICBwbGFjZS1jb250ZW50OiBjZW50ZXIgZmxleC1zdGFydDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLmZsZXgtY29sdW1uIHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBkaXNwbGF5OiBmbGV4O1xuICBwbGFjZS1jb250ZW50OiBzdHJldGNoIGZsZXgtc3RhcnQ7XG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICBtYXgtd2lkdGg6IDEwMCU7XG59XG5cbi5mbGV4LWNlbnRlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBsYWNlLWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLmZsZXgtcm93LWVuZCB7XG4gIHBsYWNlLWNvbnRlbnQ6IGNlbnRlciBmbGV4LWVuZDtcbn1cblxuLmZsZXgtZ3JvdyB7XG4gIGZsZXg6IDE7XG59XG5cbi5mbGV4LXNwYWNlLWJldHdlZW4ge1xuICBwbGFjZS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuXG4vKlxuICAgXl5eIEZsZXggYm94IGxheW91dCBjb21tb24gY2xhc3NlcyBeXl5cbiovIl19 */", "/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\ninput,\ntextarea {\n -webkit-user-select: text;\n -moz-user-select: text;\n user-select: text;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvYXBwcy9zdGFmZi9zcmMvYXBwL3N0eWxlcy9uYXRpdmUtZWxlbWVudC5zdHlsZXMuc2NzcyIsImFwcHMvc3RhZmYvc3JjL2FwcC9zdHlsZXMvbmF0aXZlLWVsZW1lbnQuc3R5bGVzLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQ3ZEQTs7RUFFSSx5QkFBQTtLQUFBLHNCQUFBO1VBQUEsaUJBQUE7QUNVSiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvc3R5bGVzL25hdGl2ZS1lbGVtZW50LnN0eWxlcy5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kY29sb3ItYnJhbmQtZWxlY3RyaWMtYmx1ZTogIzIyNTFmZjtcbiRjb2xvci1icmFuZC1kZWVwLWJsdWU6ICMwNTFjMmM7XG4kY29sb3ItYnJhbmQtY3lhbjogIzAwYTlmNDtcblxuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRmb250LWRhcms6ICMwMDA7XG4kZm9udC1saWdodDogI2ZmZjtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG4kZ3JlZW4xOiAjMjE5NjUzO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvbG9yLXByaW1hcnk6ICMxOTM3ZWE7XG4kY29sb3ItcHJpbWFyeS1saWdodDogbGlnaHRlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuJGNvbG9yLXByaW1hcnktZGFyazogZGFya2VuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG5cbiRjb2xvci1zZWNvbmRhcnk6ICM0Mjg1RjQ7XG4kY29sb3Itc2Vjb25kYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcbiRjb2xvci1zZWNvbmRhcnktZGFyazogZGFya2VuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcblxuJGJhY2tncm91bmQ6ICNmMGYwZjA7XG4kZm9vdGVyLWJhY2s6ICMyNjMyMzg7XG4kaGVhZGVyLWJhY2s6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzA1MUMyQywgIzA1MUMyQyA0MCUsICMwQjI0NTMgNjAlLCAjMUY0MEU2IDEwMCUpO1xuXG4kY29sb3ItdGVybmFyeTogIzA1MWMyYztcblxuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG5cbiRmb250LXN0YWNrOiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcblxuJGhlYWRpbmctZm9udDogXCJMYXJpc2hNY0tpbnNleVwiLCAnR2VvcmdpYScsIHNlcmlmO1xuJGZvbnQ6ICRmb250LXN0YWNrO1xuXG4kZm9udC1mYW1pbHktcHJpbWFyeTogXCJNY0tpbnNleSBTYW5zXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQ2FsaWJyaSwgQ29yYmVsLCBIZWx2ZXRpY2EsIFJvYm90bywgRHJvaWQsIHNhbnMtc2VyaWY7XG4kZm9udC1mYW1pbHktc2Vjb25kYXJ5OiBcIkJvd2VyXCIsIEdlb3JnaWEsIFwiVGltZXMgTmV3IFJvbWFuXCIgc2VyaWY7XG5cbiRiYXNlLXNpemU6IDE2cHg7XG4kdGFibGV0LXNpemU6IDE2cHg7XG4kbW9iaWxlLXNpemU6IDE2cHg7XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kYnJlYWstbW9iaWxlOiA0NTBweDtcbiRicmVhay10YWJsZXQ6IDgwMHB4O1xuJGJyZWFrLWxhcHRvcDogMTAyNHB4O1xuXG4kYnJlYWstbGFuZHNjYXBlLW1vYmlsZTogODAwcHg7XG4kYnJlYWstbGFuZHNjYXBlLXRhYmxldDogMTA0OHB4O1xuJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3A6IDEyODBweDtcbiIsIlxuQGltcG9ydCAndmFyaWFibGVzJztcblxuaW5wdXQsXG50ZXh0YXJlYSB7XG4gICAgdXNlci1zZWxlY3Q6IHRleHQ7XG59XG4iLCIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5pbnB1dCxcbnRleHRhcmVhIHtcbiAgdXNlci1zZWxlY3Q6IHRleHQ7XG59Il19 */"], + styles: ["/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n@font-face {\n font-family: 'Material Icons';\n font-style: normal;\n font-weight: 400;\n src: url(MaterialIcons-Regular.eot); /* For IE6-8 */\n src: local('Material Icons'),\n local('MaterialIcons-Regular'),\n url(MaterialIcons-Regular.woff2) format('woff2'),\n url(MaterialIcons-Regular.woff) format('woff'),\n url(MaterialIcons-Regular.ttf) format('truetype');\n}\n.material-icons {\n font-family: 'Material Icons';\n font-weight: normal;\n font-style: normal;\n font-size: 24px; /* Preferred icon size */\n display: inline-block;\n line-height: 1;\n text-transform: none;\n letter-spacing: normal;\n word-wrap: normal;\n white-space: nowrap;\n direction: ltr;\n\n /* Support for all WebKit browsers. */\n -webkit-font-smoothing: antialiased;\n /* Support for Safari and Chrome. */\n text-rendering: optimizeLegibility;\n\n /* Support for Firefox. */\n -moz-osx-font-smoothing: grayscale;\n\n /* Support for IE. */\n font-feature-settings: 'liga';\n}\n@font-face {\n font-family: 'Custom-Icons';\n src: url('Custom-Icons.eot?lqqb85');\n src: url('Custom-Icons.eot?lqqb85#iefix') format('embedded-opentype'),\n url('Custom-Icons.woff2?lqqb85') format('woff2'),\n url('Custom-Icons.ttf?lqqb85') format('truetype'),\n url('Custom-Icons.woff?lqqb85') format('woff'),\n url('Custom-Icons.svg?lqqb85#Custom-Icons') format('svg');\n font-weight: normal;\n font-style: normal;\n}\n[class^=\"custom-\"], [class*=\" custom-\"] {\n /* use !important to prevent issues with browser extensions that change fonts */\n font-family: 'Custom-Icons' !important;\n speak: none;\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n line-height: 1;\n\n /* Better Font Rendering =========== */\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.custom-zones:before {\n content: \"\\e90d\";\n}\n.custom-schedule:before {\n content: \"\\e902\";\n}\n.custom-tick:before {\n content: \"\\e904\";\n}\n.custom-Microphone:before {\n content: \"\\e90c\";\n}\n.custom-book:before {\n content: \"\\e903\";\n}\n.custom-desk:before {\n content: \"\\e905\";\n}\n.custom-spaces:before {\n content: \"\\e906\";\n}\n.custom-private:before {\n content: \"\\e907\";\n}\n.custom-not-found:before {\n content: \"\\e908\";\n}\n/* .custom-dropdown:before {\n content: \"\\e909\";\n} */\n.custom-catering:before {\n content: \"\\e90a\";\n}\n.custom-add-attendee:before {\n content: \"\\e90b\";\n}\n.custom-new-event:before {\n content: \"\\e901\";\n}\n.custom-add-user:before {\n content: \"\\e900\";\n}\n/* McKinsey Larish - Regular - Latin */\n@font-face {\n font-family: 'LarishMcKinsey';\n font-style: normal;\n font-weight: 400;\n src: url('Larish_McKinsey_Regular.eot'); /* IE9 Compat Modes */\n src: local('LarishMcKinsey'), local('LarishMcKinseyRegular'),\n url('Larish_McKinsey_Regular.eot?#iefix') format('embedded-opentype'), \n url('Larish_McKinsey_Regular.woff2') format('woff2'), \n url('Larish_McKinsey_Regular.woff') format('woff'), \n url('Larish_McKinsey_Regular.ttf') format('truetype'), \n url('Larish_McKinsey_Regular.svg#LarishMcKinseyRegular') format('svg'); /* Legacy iOS */\n}\n/* McKinsey Larish - Semi-bold - Latin */\n@font-face {\n font-family: 'LarishMcKinsey';\n font-style: normal;\n font-weight: 500;\n src: url('Larish_McKinsey_Semibold.eot'); /* IE9 Compat Modes */\n src: local('LarishMcKinsey'), local('LarishMcKinseySemibold'),\n url('Larish_McKinsey_Semibold.eot?#iefix') format('embedded-opentype'), \n url('Larish_McKinsey_Semibold.woff2') format('woff2'), \n url('Larish_McKinsey_Semibold.woff') format('woff'), \n url('Larish_McKinsey_Semibold.ttf') format('truetype'), \n url('Larish_McKinsey_Semibold.svg#LarishMcKinseySemibold') format('svg'); /* Legacy iOS */\n}\n/* Theinhardt - Light - Latin */\n@font-face {\n font-family: 'Theinhardt';\n font-style: normal;\n font-weight: 300;\n src: local('Theinhardt'),\n url('TheinhardtTT-Light.ttf') format('truetype'), /* Safari, Android, iOS */\n}\n/* Theinhardt - Light Italic - Latin */\n@font-face {\n font-family: 'Theinhardt';\n font-style: italic;\n font-weight: 300;\n src: local('Theinhardt'),\n url('TheinhardtTT-LightItalic.ttf') format('truetype'), /* Safari, Android, iOS */\n}\n/* Theinhardt - Regular - Latin */\n@font-face {\n font-family: 'Theinhardt';\n font-style: normal;\n font-weight: 400;\n src: local('Theinhardt'),\n url('TheinhardtTT-Regular.ttf') format('truetype'), /* Safari, Android, iOS */\n}\n/* Theinhardt - Italic - Latin */\n@font-face {\n font-family: 'Theinhardt';\n font-style: italic;\n font-weight: 400;\n src: local('Theinhardt'),\n url('TheinhardtTT-Italic.ttf') format('truetype'), /* Safari, Android, iOS */\n}\n/* Theinhardt - Medium - Latin */\n@font-face {\n font-family: 'Theinhardt';\n font-style: normal;\n font-weight: 500;\n src: local('Theinhardt'),\n url('TheinhardtTT-Medium.ttf') format('truetype'), /* Safari, Android, iOS */\n}\n/* Theinhardt - Medium Italic - Latin */\n@font-face {\n font-family: 'Theinhardt';\n font-style: italic;\n font-weight: 500;\n src: local('Theinhardt'),\n url('TheinhardtTT-MediumItalic.ttf') format('truetype'), /* Safari, Android, iOS */\n}\n@font-face {\n font-display: swap;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n font-weight: normal;\n src: url('McKinseySans-Regular.woff')\n}\n@font-face {\n font-display: swap;\n font-family: \"McKinsey Sans\";\n font-style: italic;\n font-weight: normal;\n src: url('McKinseySans-Italic.woff')\n}\n@font-face {\n font-display: swap;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n font-weight: 500;\n src: url('McKinseySans-Medium.woff')\n}\n@font-face {\n font-display: swap;\n font-family: \"McKinsey Sans\";\n font-style: italic;\n font-weight: 500;\n src: url('McKinseySans-MediumItalic.woff')\n}\n@font-face {\n font-display: swap;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n font-weight: 400;\n src: local('McKinsey-Sans'),\n url('McKinseySans-Light.woff')\n}\n@font-face {\n font-display: swap;\n font-family: \"McKinsey Sans\";\n font-style: italic;\n font-weight: 400;\n src: url('McKinseySans-LightItalic.woff')\n}\n@font-face {\n font-display: swap;\n font-family: \"Bower\";\n font-style: normal;\n font-weight: bold;\n src: url('Bower-Bold.woff')\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n html,\nbody {\n font-size: 16px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n html,\nbody {\n font-size: 16px;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n html,\nbody {\n font-size: 16px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n html,\nbody {\n font-size: 16px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n html,\nbody {\n font-size: 16px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n html,\nbody {\n font-size: 16px;\n }\n}\n* {\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n box-sizing: border-box;\n}\n.material-icons {\n font-size: 1em;\n}\nspan.highlight {\n color: #1937ea;\n}\n/*=======================*\\\n|| Font size styles ||\n\\*=======================*/\n.fs-small {\n font-size: 0.8rem;\n}\n.fs-normal {\n font-size: 1rem;\n}\n.fs-big {\n font-size: 1.2rem;\n}\n.fs-large {\n font-size: 1.5rem;\n}\n/*==============*\\\n|| Media Styles ||\n\\*==============*/\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mobile-only,\n.mobile {\n display: none !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mobile-only,\n.mobile {\n display: none !important;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .not-desktop,\n.mobile,\n.mobile-only {\n display: none !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .not-desktop,\n.mobile,\n.mobile-only {\n display: none !important;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .desktop,\n.desktop-only,\n.not-tablet,\n.mobile,\n.mobile-only {\n display: none !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .desktop,\n.desktop-only,\n.not-tablet,\n.mobile,\n.mobile-only {\n display: none !important;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .desktop-only,\n.desktop,\n.mobile-hide,\n.not-mobile {\n display: none !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .desktop-only,\n.desktop,\n.mobile-hide,\n.not-mobile {\n display: none !important;\n }\n}\n/*========================*\\\n|| Application styles ||\n\\*========================*/\n.info-block {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n margin: 0.5em;\n width: 100%;\n}\n.info-block .icon {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 1.2em;\n width: 1.2em;\n font-size: 2em;\n}\n.info-block .icon a-spinner {\n font-size: 0.25em;\n}\n.info-block .text {\n margin: 0.5em 0 0;\n}\n/*=====================*\\\n|| TinyMCE overrides ||\n\\*=====================*/\ndiv.tox-silver-sink {\n z-index: 9999;\n}\ndiv.tox-silver-sink .tox-notification {\n display: none;\n}\ndiv.tox-editor-container .tox-menubar button:first-child {\n display: none;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n div.tox-tinymce {\n min-height: 20em;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n div.tox-tinymce {\n min-height: 20em;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCJub2RlX21vZHVsZXMvbWF0ZXJpYWwtZGVzaWduLWljb25zL2ljb25mb250L21hdGVyaWFsLWljb25zLmNzcyIsImFwcHMvc3RhZmYvc3JjL2ZvbnRzL2ljb25zL3N0eWxlLmNzcyIsImxpYnMvdWkvc3JjL2xpYi9mb250cy9mb250cy5jc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvc3R5bGVzL2FwcC5jb21wb25lbnQuc2NzcyIsImFwcHMvc3RhZmYvc3JjL2FwcC9zdHlsZXMvYXBwLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzswQkFBQTtBQVFBOzswQkFBQTtBQWtDQTs7Y0FBQTtBQWdCQTs7c0JBQUE7QUM1Q0E7O3NCQUFBO0FDZEE7RUFDRSw2QkFBNkI7RUFDN0Isa0JBQWtCO0VBQ2xCLGdCQUFnQjtFQUNoQixtQ0FBbUMsRUFBRSxjQUFjO0VBQ25EOzs7O3dEQUlzRDtBQUN4RDtBQUVBO0VBQ0UsNkJBQTZCO0VBQzdCLG1CQUFtQjtFQUNuQixrQkFBa0I7RUFDbEIsZUFBZSxHQUFHLHdCQUF3QjtFQUMxQyxxQkFBcUI7RUFDckIsY0FBYztFQUNkLG9CQUFvQjtFQUNwQixzQkFBc0I7RUFDdEIsaUJBQWlCO0VBQ2pCLG1CQUFtQjtFQUNuQixjQUFjOztFQUVkLHFDQUFxQztFQUNyQyxtQ0FBbUM7RUFDbkMsbUNBQW1DO0VBQ25DLGtDQUFrQzs7RUFFbEMseUJBQXlC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Q0ksaUJBQUE7QUMyRFo7QUR2REk7RUFDSSxpQkFBQTtBQ3lEUjtBRHJEQTs7d0JBQUE7QUFJQTtFQUNJLGFBQUE7QUN1REo7QURyREk7RUFDSSxhQUFBO0FDdURSO0FEakRRO0VBQ0ksYUFBQTtBQ29EWjtBTHRLUTtFSXVIUjtJQUVRLGdCQUFBO0VDa0ROO0FBQ0Y7QUx6S1E7RUlvSFI7SUFFUSxnQkFBQTtFQ3VETjtBQUNGIiwiZmlsZSI6ImFwcHMvc3RhZmYvc3JjL2FwcC9zdHlsZXMvYXBwLmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kY29sb3ItYnJhbmQtZWxlY3RyaWMtYmx1ZTogIzIyNTFmZjtcbiRjb2xvci1icmFuZC1kZWVwLWJsdWU6ICMwNTFjMmM7XG4kY29sb3ItYnJhbmQtY3lhbjogIzAwYTlmNDtcblxuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRmb250LWRhcms6ICMwMDA7XG4kZm9udC1saWdodDogI2ZmZjtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG4kZ3JlZW4xOiAjMjE5NjUzO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvbG9yLXByaW1hcnk6ICMxOTM3ZWE7XG4kY29sb3ItcHJpbWFyeS1saWdodDogbGlnaHRlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuJGNvbG9yLXByaW1hcnktZGFyazogZGFya2VuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG5cbiRjb2xvci1zZWNvbmRhcnk6ICM0Mjg1RjQ7XG4kY29sb3Itc2Vjb25kYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcbiRjb2xvci1zZWNvbmRhcnktZGFyazogZGFya2VuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcblxuJGJhY2tncm91bmQ6ICNmMGYwZjA7XG4kZm9vdGVyLWJhY2s6ICMyNjMyMzg7XG4kaGVhZGVyLWJhY2s6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzA1MUMyQywgIzA1MUMyQyA0MCUsICMwQjI0NTMgNjAlLCAjMUY0MEU2IDEwMCUpO1xuXG4kY29sb3ItdGVybmFyeTogIzA1MWMyYztcblxuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG5cbiRmb250LXN0YWNrOiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcblxuJGhlYWRpbmctZm9udDogXCJMYXJpc2hNY0tpbnNleVwiLCAnR2VvcmdpYScsIHNlcmlmO1xuJGZvbnQ6ICRmb250LXN0YWNrO1xuXG4kZm9udC1mYW1pbHktcHJpbWFyeTogXCJNY0tpbnNleSBTYW5zXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQ2FsaWJyaSwgQ29yYmVsLCBIZWx2ZXRpY2EsIFJvYm90bywgRHJvaWQsIHNhbnMtc2VyaWY7XG4kZm9udC1mYW1pbHktc2Vjb25kYXJ5OiBcIkJvd2VyXCIsIEdlb3JnaWEsIFwiVGltZXMgTmV3IFJvbWFuXCIgc2VyaWY7XG5cbiRiYXNlLXNpemU6IDE2cHg7XG4kdGFibGV0LXNpemU6IDE2cHg7XG4kbW9iaWxlLXNpemU6IDE2cHg7XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kYnJlYWstbW9iaWxlOiA0NTBweDtcbiRicmVhay10YWJsZXQ6IDgwMHB4O1xuJGJyZWFrLWxhcHRvcDogMTAyNHB4O1xuXG4kYnJlYWstbGFuZHNjYXBlLW1vYmlsZTogODAwcHg7XG4kYnJlYWstbGFuZHNjYXBlLXRhYmxldDogMTA0OHB4O1xuJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3A6IDEyODBweDtcbiIsIkBpbXBvcnQgJy4vdmFyaWFibGVzJztcblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5AbWl4aW4gYm94LXNoYWRvdygkY29sb3I6ICMwMDAsICRkZXB0aDogMSkge1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCAxcHggKiAoJGRlcHRoIC0gMSkgcmdiYSgjMDAwLCAuMiksXG4gICAgICAgICAgICAgICAgMCAxcHggMXB4IDAgcmdiYSgjMDAwLCAuMTQpLFxuICAgICAgICAgICAgICAgIDAgMnB4IDFweCAtMXB4IHJnYmEoIzAwMCwgLjEyKTtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbkBtaXhpbiByZXNwb25kLXRvKCRtZWRpYSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSAgQGVsc2UgaWYgJG1lZGlhID09IGxhdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfUBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJAZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdNYXRlcmlhbCBJY29ucyc7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgc3JjOiB1cmwoTWF0ZXJpYWxJY29ucy1SZWd1bGFyLmVvdCk7IC8qIEZvciBJRTYtOCAqL1xuICBzcmM6IGxvY2FsKCdNYXRlcmlhbCBJY29ucycpLFxuICAgICAgIGxvY2FsKCdNYXRlcmlhbEljb25zLVJlZ3VsYXInKSxcbiAgICAgICB1cmwoTWF0ZXJpYWxJY29ucy1SZWd1bGFyLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyksXG4gICAgICAgdXJsKE1hdGVyaWFsSWNvbnMtUmVndWxhci53b2ZmKSBmb3JtYXQoJ3dvZmYnKSxcbiAgICAgICB1cmwoTWF0ZXJpYWxJY29ucy1SZWd1bGFyLnR0ZikgZm9ybWF0KCd0cnVldHlwZScpO1xufVxuXG4ubWF0ZXJpYWwtaWNvbnMge1xuICBmb250LWZhbWlseTogJ01hdGVyaWFsIEljb25zJztcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXNpemU6IDI0cHg7ICAvKiBQcmVmZXJyZWQgaWNvbiBzaXplICovXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xuICB3b3JkLXdyYXA6IG5vcm1hbDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgZGlyZWN0aW9uOiBsdHI7XG5cbiAgLyogU3VwcG9ydCBmb3IgYWxsIFdlYktpdCBicm93c2Vycy4gKi9cbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIC8qIFN1cHBvcnQgZm9yIFNhZmFyaSBhbmQgQ2hyb21lLiAqL1xuICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5O1xuXG4gIC8qIFN1cHBvcnQgZm9yIEZpcmVmb3guICovXG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG5cbiAgLyogU3VwcG9ydCBmb3IgSUUuICovXG4gIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2xpZ2EnO1xufVxuIiwiQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnQ3VzdG9tLUljb25zJztcbiAgc3JjOiAgdXJsKCdmb250cy9DdXN0b20tSWNvbnMuZW90P2xxcWI4NScpO1xuICBzcmM6ICB1cmwoJ2ZvbnRzL0N1c3RvbS1JY29ucy5lb3Q/bHFxYjg1I2llZml4JykgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLFxuICAgIHVybCgnZm9udHMvQ3VzdG9tLUljb25zLndvZmYyP2xxcWI4NScpIGZvcm1hdCgnd29mZjInKSxcbiAgICB1cmwoJ2ZvbnRzL0N1c3RvbS1JY29ucy50dGY/bHFxYjg1JykgZm9ybWF0KCd0cnVldHlwZScpLFxuICAgIHVybCgnZm9udHMvQ3VzdG9tLUljb25zLndvZmY/bHFxYjg1JykgZm9ybWF0KCd3b2ZmJyksXG4gICAgdXJsKCdmb250cy9DdXN0b20tSWNvbnMuc3ZnP2xxcWI4NSNDdXN0b20tSWNvbnMnKSBmb3JtYXQoJ3N2ZycpO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG59XG5cbltjbGFzc149XCJjdXN0b20tXCJdLCBbY2xhc3MqPVwiIGN1c3RvbS1cIl0ge1xuICAvKiB1c2UgIWltcG9ydGFudCB0byBwcmV2ZW50IGlzc3VlcyB3aXRoIGJyb3dzZXIgZXh0ZW5zaW9ucyB0aGF0IGNoYW5nZSBmb250cyAqL1xuICBmb250LWZhbWlseTogJ0N1c3RvbS1JY29ucycgIWltcG9ydGFudDtcbiAgc3BlYWs6IG5vbmU7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC12YXJpYW50OiBub3JtYWw7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICBsaW5lLWhlaWdodDogMTtcblxuICAvKiBCZXR0ZXIgRm9udCBSZW5kZXJpbmcgPT09PT09PT09PT0gKi9cbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG59XG5cbi5jdXN0b20tem9uZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGU5MGRcIjtcbn1cbi5jdXN0b20tc2NoZWR1bGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGU5MDJcIjtcbn1cbi5jdXN0b20tdGljazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTkwNFwiO1xufVxuLmN1c3RvbS1NaWNyb3Bob25lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlOTBjXCI7XG59XG4uY3VzdG9tLWJvb2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGU5MDNcIjtcbn1cbi5jdXN0b20tZGVzazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTkwNVwiO1xufVxuLmN1c3RvbS1zcGFjZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGU5MDZcIjtcbn1cbi5jdXN0b20tcHJpdmF0ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTkwN1wiO1xufVxuLmN1c3RvbS1ub3QtZm91bmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGU5MDhcIjtcbn1cbi8qIC5jdXN0b20tZHJvcGRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGU5MDlcIjtcbn0gKi9cbi5jdXN0b20tY2F0ZXJpbmc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGU5MGFcIjtcbn1cbi5jdXN0b20tYWRkLWF0dGVuZGVlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlOTBiXCI7XG59XG4uY3VzdG9tLW5ldy1ldmVudDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTkwMVwiO1xufVxuLmN1c3RvbS1hZGQtdXNlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTkwMFwiO1xufVxuIiwiLyogTWNLaW5zZXkgTGFyaXNoIC0gUmVndWxhciAtIExhdGluICovXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ0xhcmlzaE1jS2luc2V5JztcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBzcmM6IHVybCgnbGlicy91aS9zcmMvbGliL2ZvbnRzL21ja2luc2V5X2xhcmlzaC9MYXJpc2hfTWNLaW5zZXlfUmVndWxhci5lb3QnKTsgLyogSUU5IENvbXBhdCBNb2RlcyAqL1xuICAgIHNyYzogbG9jYWwoJ0xhcmlzaE1jS2luc2V5JyksIGxvY2FsKCdMYXJpc2hNY0tpbnNleVJlZ3VsYXInKSxcbiAgICB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy9tY2tpbnNleV9sYXJpc2gvTGFyaXNoX01jS2luc2V5X1JlZ3VsYXIuZW90PyNpZWZpeCcpIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSwgLyogSUU2LUlFOCAqL1xuICAgIHVybCgnbGlicy91aS9zcmMvbGliL2ZvbnRzL21ja2luc2V5X2xhcmlzaC9MYXJpc2hfTWNLaW5zZXlfUmVndWxhci53b2ZmMicpIGZvcm1hdCgnd29mZjInKSwgLyogU3VwZXIgTW9kZXJuIEJyb3dzZXJzICovXG4gICAgdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXlfbGFyaXNoL0xhcmlzaF9NY0tpbnNleV9SZWd1bGFyLndvZmYnKSBmb3JtYXQoJ3dvZmYnKSwgLyogTW9kZXJuIEJyb3dzZXJzICovXG4gICAgdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXlfbGFyaXNoL0xhcmlzaF9NY0tpbnNleV9SZWd1bGFyLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKSwgLyogU2FmYXJpLCBBbmRyb2lkLCBpT1MgKi9cbiAgICB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy9tY2tpbnNleV9sYXJpc2gvTGFyaXNoX01jS2luc2V5X1JlZ3VsYXIuc3ZnI0xhcmlzaE1jS2luc2V5UmVndWxhcicpIGZvcm1hdCgnc3ZnJyk7IC8qIExlZ2FjeSBpT1MgKi9cbn1cblxuLyogTWNLaW5zZXkgTGFyaXNoIC0gU2VtaS1ib2xkIC0gTGF0aW4gKi9cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnTGFyaXNoTWNLaW5zZXknO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIHNyYzogdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXlfbGFyaXNoL0xhcmlzaF9NY0tpbnNleV9TZW1pYm9sZC5lb3QnKTsgLyogSUU5IENvbXBhdCBNb2RlcyAqL1xuICAgIHNyYzogbG9jYWwoJ0xhcmlzaE1jS2luc2V5JyksIGxvY2FsKCdMYXJpc2hNY0tpbnNleVNlbWlib2xkJyksXG4gICAgdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXlfbGFyaXNoL0xhcmlzaF9NY0tpbnNleV9TZW1pYm9sZC5lb3Q/I2llZml4JykgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLCAvKiBJRTYtSUU4ICovXG4gICAgdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXlfbGFyaXNoL0xhcmlzaF9NY0tpbnNleV9TZW1pYm9sZC53b2ZmMicpIGZvcm1hdCgnd29mZjInKSwgLyogU3VwZXIgTW9kZXJuIEJyb3dzZXJzICovXG4gICAgdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXlfbGFyaXNoL0xhcmlzaF9NY0tpbnNleV9TZW1pYm9sZC53b2ZmJykgZm9ybWF0KCd3b2ZmJyksIC8qIE1vZGVybiBCcm93c2VycyAqL1xuICAgIHVybCgnbGlicy91aS9zcmMvbGliL2ZvbnRzL21ja2luc2V5X2xhcmlzaC9MYXJpc2hfTWNLaW5zZXlfU2VtaWJvbGQudHRmJykgZm9ybWF0KCd0cnVldHlwZScpLCAvKiBTYWZhcmksIEFuZHJvaWQsIGlPUyAqL1xuICAgIHVybCgnbGlicy91aS9zcmMvbGliL2ZvbnRzL21ja2luc2V5X2xhcmlzaC9MYXJpc2hfTWNLaW5zZXlfU2VtaWJvbGQuc3ZnI0xhcmlzaE1jS2luc2V5U2VtaWJvbGQnKSBmb3JtYXQoJ3N2ZycpOyAvKiBMZWdhY3kgaU9TICovXG59XG5cbi8qIFRoZWluaGFyZHQgLSBMaWdodCAtIExhdGluICovXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ1RoZWluaGFyZHQnO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIHNyYzogbG9jYWwoJ1RoZWluaGFyZHQnKSxcbiAgICB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy90aGVpbmhhcmR0L1RoZWluaGFyZHRUVC1MaWdodC50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyksIC8qIFNhZmFyaSwgQW5kcm9pZCwgaU9TICovXG59XG5cbi8qIFRoZWluaGFyZHQgLSBMaWdodCBJdGFsaWMgLSBMYXRpbiAqL1xuQGZvbnQtZmFjZSB7XG4gICAgZm9udC1mYW1pbHk6ICdUaGVpbmhhcmR0JztcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICBzcmM6IGxvY2FsKCdUaGVpbmhhcmR0JyksXG4gICAgdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvdGhlaW5oYXJkdC9UaGVpbmhhcmR0VFQtTGlnaHRJdGFsaWMudHRmJykgZm9ybWF0KCd0cnVldHlwZScpLCAvKiBTYWZhcmksIEFuZHJvaWQsIGlPUyAqL1xufVxuXG4vKiBUaGVpbmhhcmR0IC0gUmVndWxhciAtIExhdGluICovXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ1RoZWluaGFyZHQnO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIHNyYzogbG9jYWwoJ1RoZWluaGFyZHQnKSxcbiAgICB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy90aGVpbmhhcmR0L1RoZWluaGFyZHRUVC1SZWd1bGFyLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKSwgLyogU2FmYXJpLCBBbmRyb2lkLCBpT1MgKi9cbn1cblxuLyogVGhlaW5oYXJkdCAtIEl0YWxpYyAtIExhdGluICovXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ1RoZWluaGFyZHQnO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIHNyYzogbG9jYWwoJ1RoZWluaGFyZHQnKSxcbiAgICB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy90aGVpbmhhcmR0L1RoZWluaGFyZHRUVC1JdGFsaWMudHRmJykgZm9ybWF0KCd0cnVldHlwZScpLCAvKiBTYWZhcmksIEFuZHJvaWQsIGlPUyAqL1xufVxuXG4vKiBUaGVpbmhhcmR0IC0gTWVkaXVtIC0gTGF0aW4gKi9cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnVGhlaW5oYXJkdCc7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgc3JjOiBsb2NhbCgnVGhlaW5oYXJkdCcpLFxuICAgIHVybCgnbGlicy91aS9zcmMvbGliL2ZvbnRzL3RoZWluaGFyZHQvVGhlaW5oYXJkdFRULU1lZGl1bS50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyksIC8qIFNhZmFyaSwgQW5kcm9pZCwgaU9TICovXG59XG5cbi8qIFRoZWluaGFyZHQgLSBNZWRpdW0gSXRhbGljIC0gTGF0aW4gKi9cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnVGhlaW5oYXJkdCc7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgc3JjOiBsb2NhbCgnVGhlaW5oYXJkdCcpLFxuICAgIHVybCgnbGlicy91aS9zcmMvbGliL2ZvbnRzL3RoZWluaGFyZHQvVGhlaW5oYXJkdFRULU1lZGl1bUl0YWxpYy50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyksIC8qIFNhZmFyaSwgQW5kcm9pZCwgaU9TICovXG59XG5cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZGlzcGxheTogc3dhcDtcbiAgICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgc3JjOiB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy9tY2tpbnNleS1zYW5zL01jS2luc2V5U2Fucy1SZWd1bGFyLndvZmYnKVxufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG4gICAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIHNyYzogdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXktc2Fucy9NY0tpbnNleVNhbnMtSXRhbGljLndvZmYnKVxufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG4gICAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIHNyYzogdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXktc2Fucy9NY0tpbnNleVNhbnMtTWVkaXVtLndvZmYnKVxufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG4gICAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIHNyYzogdXJsKCdsaWJzL3VpL3NyYy9saWIvZm9udHMvbWNraW5zZXktc2Fucy9NY0tpbnNleVNhbnMtTWVkaXVtSXRhbGljLndvZmYnKVxufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG4gICAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIHNyYzogbG9jYWwoJ01jS2luc2V5LVNhbnMnKSxcbiAgICB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy9tY2tpbnNleS1zYW5zL01jS2luc2V5U2Fucy1MaWdodC53b2ZmJylcbn1cblxuQGZvbnQtZmFjZSB7XG4gICAgZm9udC1kaXNwbGF5OiBzd2FwO1xuICAgIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBzcmM6IHVybCgnbGlicy91aS9zcmMvbGliL2ZvbnRzL21ja2luc2V5LXNhbnMvTWNLaW5zZXlTYW5zLUxpZ2h0SXRhbGljLndvZmYnKVxufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWRpc3BsYXk6IHN3YXA7XG4gICAgZm9udC1mYW1pbHk6IFwiQm93ZXJcIjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgc3JjOiB1cmwoJ2xpYnMvdWkvc3JjL2xpYi9mb250cy9ib3dlci9Cb3dlci1Cb2xkLndvZmYnKVxufVxuIiwiQGltcG9ydCAnbWl4aW5zJztcbkBpbXBvcnQgXCJ+bWF0ZXJpYWwtZGVzaWduLWljb25zL2ljb25mb250L21hdGVyaWFsLWljb25zLmNzc1wiO1xuQGltcG9ydCAnLi4vLi4vZm9udHMvaWNvbnMvc3R5bGUuY3NzJztcbkBpbXBvcnQgJy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvc3JjL2xpYi9mb250cy9mb250cy5jc3MnO1xuXG5odG1sLFxuYm9keSB7XG4gICAgQGluY2x1ZGUgcmVzcG9uZC10byhkZXNrdG9wKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogJGJhc2Utc2l6ZTtcbiAgICB9XG4gICAgQGluY2x1ZGUgcmVzcG9uZC10byh0YWJsZXQpIHtcbiAgICAgICAgZm9udC1zaXplOiAkdGFibGV0LXNpemU7XG4gICAgfVxuICAgIEBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogJG1vYmlsZS1zaXplO1xuICAgIH1cbn1cblxuKiB7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1wcmltYXJ5O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi5tYXRlcmlhbC1pY29ucyB7XG4gICAgZm9udC1zaXplOiAxZW07XG59XG5cbnNwYW4uaGlnaGxpZ2h0IHtcbiAgICBjb2xvcjogJGNvbG9yLXByaW1hcnk7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgIEZvbnQgc2l6ZSBzdHlsZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4uZnMge1xuICAgICYtc21hbGwge1xuICAgICAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICB9XG4gICAgJi1ub3JtYWwge1xuICAgICAgICBmb250LXNpemU6IDFyZW07XG4gICAgfVxuICAgICYtYmlnIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjJyZW07XG4gICAgfVxuICAgICYtbGFyZ2Uge1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTtcbiAgICB9XG59XG5cbi8qPT09PT09PT09PT09PT0qXFxcbnx8IE1lZGlhIFN0eWxlcyB8fFxuXFwqPT09PT09PT09PT09PT0qL1xuXG5AaW5jbHVkZSByZXNwb25kLXRvKG5vdC1tb2JpbGUpIHtcbiAgICAubW9iaWxlLW9ubHksXG4gICAgLm1vYmlsZSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG59XG5cbkBpbmNsdWRlIHJlc3BvbmQtdG8oZGVza3RvcCkge1xuICAgIC5ub3QtZGVza3RvcCxcbiAgICAubW9iaWxlLFxuICAgIC5tb2JpbGUtb25seSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG59XG5cbkBpbmNsdWRlIHJlc3BvbmQtdG8odGFibGV0KSB7XG4gICAgLmRlc2t0b3AsXG4gICAgLmRlc2t0b3Atb25seSxcbiAgICAubm90LXRhYmxldCxcbiAgICAubW9iaWxlLFxuICAgIC5tb2JpbGUtb25seSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG59XG5cbkBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgLmRlc2t0b3Atb25seSxcbiAgICAuZGVza3RvcCxcbiAgICAubW9iaWxlLWhpZGUsXG4gICAgLm5vdC1tb2JpbGUge1xuICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxufVxuXG4vKj09PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBBcHBsaWNhdGlvbiBzdHlsZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuLmluZm8tYmxvY2sge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIG1hcmdpbjogLjVlbTtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgIC5pY29uIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGhlaWdodDogMS4yZW07XG4gICAgICAgIHdpZHRoOiAxLjJlbTtcbiAgICAgICAgZm9udC1zaXplOiAyZW07XG5cbiAgICAgICAgYS1zcGlubmVyIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogLjI1ZW07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAudGV4dCB7XG4gICAgICAgIG1hcmdpbjogLjVlbSAwIDA7XG4gICAgfVxufVxuXG4vKj09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIFRpbnlNQ0Ugb3ZlcnJpZGVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09Ki9cblxuZGl2LnRveC1zaWx2ZXItc2luayB7XG4gICAgei1pbmRleDogOTk5OTtcblxuICAgIC50b3gtbm90aWZpY2F0aW9uIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG59XG5cbmRpdi50b3gtZWRpdG9yLWNvbnRhaW5lciB7XG4gICAgLnRveC1tZW51YmFyIHtcbiAgICAgICAgYnV0dG9uOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmRpdi50b3gtdGlueW1jZSB7XG4gICAgQGluY2x1ZGUgcmVzcG9uZC10byhtb2JpbGUpIHtcbiAgICAgICAgbWluLWhlaWdodDogMjBlbTtcbiAgICB9XG59XG4iLCIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbkBpbXBvcnQgXCJ+bWF0ZXJpYWwtZGVzaWduLWljb25zL2ljb25mb250L21hdGVyaWFsLWljb25zLmNzc1wiO1xuQGltcG9ydCAnLi4vLi4vZm9udHMvaWNvbnMvc3R5bGUuY3NzJztcbkBpbXBvcnQgJy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvc3JjL2xpYi9mb250cy9mb250cy5jc3MnO1xuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogODAwcHgpIHtcbiAgaHRtbCxcbmJvZHkge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDEwNDhweCkge1xuICBodG1sLFxuYm9keSB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIGh0bWwsXG5ib2R5IHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkgYW5kIChtYXgtd2lkdGg6IDEwNDhweCkge1xuICBodG1sLFxuYm9keSB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICBodG1sLFxuYm9keSB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgaHRtbCxcbmJvZHkge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgfVxufVxuXG4qIHtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLm1hdGVyaWFsLWljb25zIHtcbiAgZm9udC1zaXplOiAxZW07XG59XG5cbnNwYW4uaGlnaGxpZ2h0IHtcbiAgY29sb3I6ICMxOTM3ZWE7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgIEZvbnQgc2l6ZSBzdHlsZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLmZzLXNtYWxsIHtcbiAgZm9udC1zaXplOiAwLjhyZW07XG59XG4uZnMtbm9ybWFsIHtcbiAgZm9udC1zaXplOiAxcmVtO1xufVxuLmZzLWJpZyB7XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xufVxuLmZzLWxhcmdlIHtcbiAgZm9udC1zaXplOiAxLjVyZW07XG59XG5cbi8qPT09PT09PT09PT09PT0qXFxcbnx8IE1lZGlhIFN0eWxlcyB8fFxuXFwqPT09PT09PT09PT09PT0qL1xuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1vYmlsZS1vbmx5LFxuLm1vYmlsZSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1vYmlsZS1vbmx5LFxuLm1vYmlsZSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA4MDBweCkge1xuICAubm90LWRlc2t0b3AsXG4ubW9iaWxlLFxuLm1vYmlsZS1vbmx5IHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAxMDQ4cHgpIHtcbiAgLm5vdC1kZXNrdG9wLFxuLm1vYmlsZSxcbi5tb2JpbGUtb25seSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5kZXNrdG9wLFxuLmRlc2t0b3Atb25seSxcbi5ub3QtdGFibGV0LFxuLm1vYmlsZSxcbi5tb2JpbGUtb25seSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDQ4cHgpIHtcbiAgLmRlc2t0b3AsXG4uZGVza3RvcC1vbmx5LFxuLm5vdC10YWJsZXQsXG4ubW9iaWxlLFxuLm1vYmlsZS1vbmx5IHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5kZXNrdG9wLW9ubHksXG4uZGVza3RvcCxcbi5tb2JpbGUtaGlkZSxcbi5ub3QtbW9iaWxlIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuZGVza3RvcC1vbmx5LFxuLmRlc2t0b3AsXG4ubW9iaWxlLWhpZGUsXG4ubm90LW1vYmlsZSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG4vKj09PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBBcHBsaWNhdGlvbiBzdHlsZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT09Ki9cbi5pbmZvLWJsb2NrIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1hcmdpbjogMC41ZW07XG4gIHdpZHRoOiAxMDAlO1xufVxuLmluZm8tYmxvY2sgLmljb24ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgaGVpZ2h0OiAxLjJlbTtcbiAgd2lkdGg6IDEuMmVtO1xuICBmb250LXNpemU6IDJlbTtcbn1cbi5pbmZvLWJsb2NrIC5pY29uIGEtc3Bpbm5lciB7XG4gIGZvbnQtc2l6ZTogMC4yNWVtO1xufVxuLmluZm8tYmxvY2sgLnRleHQge1xuICBtYXJnaW46IDAuNWVtIDAgMDtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBUaW55TUNFIG92ZXJyaWRlcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PSovXG5kaXYudG94LXNpbHZlci1zaW5rIHtcbiAgei1pbmRleDogOTk5OTtcbn1cbmRpdi50b3gtc2lsdmVyLXNpbmsgLnRveC1ub3RpZmljYXRpb24ge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG5kaXYudG94LWVkaXRvci1jb250YWluZXIgLnRveC1tZW51YmFyIGJ1dHRvbjpmaXJzdC1jaGlsZCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIGRpdi50b3gtdGlueW1jZSB7XG4gICAgbWluLWhlaWdodDogMjBlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIGRpdi50b3gtdGlueW1jZSB7XG4gICAgbWluLWhlaWdodDogMjBlbTtcbiAgfVxufSJdfQ== */", "/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n.dropdown[widget] {\n border-radius: 4px;\n}\n.dropdown[widget].fill {\n width: 100%;\n}\n.dropdown-list[widget] {\n border-radius: 4px;\n}\n.spinner svg {\n width: 100%;\n}\nbutton.mat-button,\na[button] {\n background-color: #1937ea;\n border: 1px solid #1937ea;\n color: #fff;\n}\nbutton.mat-button.inverse,\na[button].inverse {\n background-color: #fff;\n color: #1937ea;\n}\nbutton.mat-button.success,\na[button].success {\n background-color: #43a047;\n border-color: #43a047;\n}\nbutton.mat-button[disabled],\na[button][disabled] {\n background-color: #CCC;\n pointer-events: none;\n border-color: #AAA;\n}\n.mat-icon-button {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 2em;\n width: 2em;\n font-size: 1em;\n}\n.mat-icon-button .mat-button-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.mat-icon-button app-icon {\n font-size: 1.5em;\n}\n.dropdown[widget].default {\n width: 9.5em;\n}\n.dynamic-field[widget] .details {\n min-width: 100%;\n}\n.dynamic-field[widget] label {\n margin-left: 0;\n}\n.dynamic-field[widget] .control {\n min-width: 10em;\n}\n.overlay-backdrop {\n background-color: rgba(0, 0, 0, 0.6);\n}\nmat-dialog-container.mat-dialog-container {\n padding: 0;\n overflow: visible;\n border-radius: 0;\n}\nmat-dialog-container.mat-dialog-container .mat-dialog-actions {\n margin: 0 auto;\n}\nmat-dialog-container.mat-dialog-container .mat-dialog-content {\n margin: 0;\n padding: 0;\n max-height: 93vh;\n}\nmat-dialog-container.mat-dialog-container .mat-dialog-content.package-options {\n max-height: 85vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n mat-dialog-container.mat-dialog-container .mat-dialog-content {\n max-height: 100vh;\n width: 100vw;\n height: 100%;\n }\n mat-dialog-container.mat-dialog-container .mat-dialog-content.cancel-dialog-content, mat-dialog-container.mat-dialog-container .mat-dialog-content.booking-duration-content {\n height: auto;\n width: auto;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n mat-dialog-container.mat-dialog-container .mat-dialog-content {\n max-height: 100vh;\n width: 100vw;\n height: 100%;\n }\n mat-dialog-container.mat-dialog-container .mat-dialog-content.cancel-dialog-content, mat-dialog-container.mat-dialog-container .mat-dialog-content.booking-duration-content {\n height: auto;\n width: auto;\n }\n}\nmat-dialog-container.mat-dialog-container header {\n display: flex;\n align-items: center;\n padding: 0.5em 1em;\n width: 100%;\n background-color: #051c2c;\n color: #fff;\n}\nmat-dialog-container.mat-dialog-container header h1, mat-dialog-container.mat-dialog-container header h2, mat-dialog-container.mat-dialog-container header h3, mat-dialog-container.mat-dialog-container header h4 {\n flex: 1;\n min-width: 50%;\n}\nmat-dialog-container.mat-dialog-container header > * {\n margin: 0;\n}\nmat-dialog-container.mat-dialog-container .body {\n padding: 1em;\n pointer-events: auto;\n overflow: hidden auto;\n}\nmat-form-field.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick {\n color: #1937ea;\n}\nmat-form-field.map .mat-form-field-wrapper {\n padding: 0;\n}\nmat-form-field.map .mat-form-field-outline {\n background-color: #fff;\n box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12);\n border-radius: 4px;\n}\nmat-form-field.desk .mat-form-field-flex {\n background-color: #fff;\n padding: 0.3em;\n}\nmat-form-field.rounded .mat-form-field-outline-start {\n border-radius: 2em 0 0 2em;\n min-width: 2em;\n}\nmat-form-field.rounded .mat-form-field-outline-end {\n border-radius: 0 2em 2em 0;\n}\n.mat-form-field-infix {\n border-top: none;\n}\n.mat-select-panel .mat-option.mat-selected:not(.mat-option-disabled) {\n color: #1937ea;\n}\nmat-select .mat-select-trigger .mat-select-arrow-wrapper {\n transform: none;\n}\n.mat-simple-snackbar button.mat-button {\n background: none;\n border: none;\n}\n.mat-snack-bar-container.success {\n background-color: #43a047;\n color: #fff;\n}\n.mat-snack-bar-container.warn {\n background-color: #ffb300;\n color: #fff;\n}\n.mat-snack-bar-container.error {\n background-color: #e53935;\n color: #fff;\n}\n.mat-snack-bar-container.info {\n background-color: #4285F4;\n color: #fff;\n}\n.mat-chip.mat-standard-chip.mat-primary {\n background-color: #1937ea;\n color: #fff;\n}\n.mat-chip.mat-standard-chip.mat-accent {\n background-color: #ffb300;\n}\n.mat-spinner circle {\n stroke: #1937ea;\n}\n.mat-progress-bar-fill::after {\n background-color: #1937ea;\n}\n.mat-tooltip {\n white-space: pre-line;\n}\ndiv.mat-menu-panel {\n max-width: calc(100vw - 1em);\n max-height: 65vh;\n}\ndiv.mat-menu-panel.dark-mode {\n background-color: #363636;\n}\nmat-radio-button .mat-radio-label-content {\n white-space: initial;\n}\nmat-checkbox .mat-checkbox-label-content {\n white-space: initial;\n}\ndiv.mat-select-panel {\n max-width: 90vw;\n}\na-map svg text {\n pointer-events: none;\n}\na-map .zooming [id^=chair] {\n display: none;\n}\n.map-outlet {\n position: absolute !important;\n}\nlabel.mat-checkbox-layout, label.mat-radio-label {\n white-space: normal;\n}\n.tag .multiroom {\n border-radius: 4px;\n padding: 2px 13px;\n max-height: 24px;\n background-color: #FFD048;\n}\n.tag .merged {\n background-color: #d32f2f;\n color: #FFFFFF !important;\n}\n/*\n Flex box layout common classes\n*/\n.flex-row {\n height: 100%;\n flex-direction: row;\n box-sizing: border-box;\n display: flex;\n place-content: center flex-start;\n align-items: center;\n}\n.flex-column {\n height: 100%;\n flex-direction: column;\n box-sizing: border-box;\n display: flex;\n place-content: stretch flex-start;\n align-items: stretch;\n max-width: 100%;\n}\n.flex-center {\n display: flex;\n place-content: center;\n align-items: center;\n}\n.flex-row-end {\n place-content: center flex-end;\n}\n.flex-grow {\n flex: 1;\n}\n.flex-space-between {\n place-content: space-between;\n}\n/*\n ^^^ Flex box layout common classes ^^^\n*/\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvc3R5bGVzL2N1c3RvbS1lbGVtZW50LnN0eWxlcy5zY3NzIiwiYXBwcy9zdGFmZi9zcmMvYXBwL3N0eWxlcy9jdXN0b20tZWxlbWVudC5zdHlsZXMuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FBMURBOzswQkFBQTtBQVFBOzswQkFBQTtBQWtDQTs7Y0FBQTtBQWdCQTs7c0JBQUE7QUM1Q0E7O3NCQUFBO0FDWEE7RUFDSSxrQkFBQTtBQ3lCSjtBRHZCSTtFQUNJLFdBQUE7QUN5QlI7QURyQkE7RUFDSSxrQkFBQTtBQ3dCSjtBRHBCSTtFQUNJLFdBQUE7QUN1QlI7QURuQkE7O0VBRUkseUJGS1k7RUVKWix5QkFBQTtFQUNBLFdGWlM7QUdrQ2I7QURwQkk7O0VBQ0ksc0JBQUE7RUFDQSxjRkRRO0FHd0JoQjtBRHBCSTs7RUFDSSx5QkZsQkU7RUVtQkYscUJGbkJFO0FHMENWO0FEcEJJOztFQUNJLHNCQUFBO0VBQ0Esb0JBQUE7RUFDQSxrQkFBQTtBQ3VCUjtBRG5CQTtFQUNJLGFBQUE7RUFDQSxtQkFBQTtFQUNBLHVCQUFBO0VBQ0EsV0FBQTtFQUNBLFVBQUE7RUFDQSxjQUFBO0FDc0JKO0FEcEJJO0VBQ0ksYUFBQTtFQUNBLG1CQUFBO0VBQ0EsdUJBQUE7QUNzQlI7QURuQkk7RUFDSSxnQkFBQTtBQ3FCUjtBRGhCSTtFQUNJLFlBQUE7QUNtQlI7QURkSTtFQUNJLGVBQUE7QUNpQlI7QURkSTtFQUNJLGNBQUE7QUNnQlI7QURiSTtFQUNJLGVBQUE7QUNlUjtBRFhBO0VBQ0ksb0NBQUE7QUNjSjtBRFhBO0VBQ0ksVUFBQTtFQUNBLGlCQUFBO0VBQ0EsZ0JBQUE7QUNjSjtBRFpJO0VBQ0ksY0FBQTtBQ2NSO0FEWEk7RUFDSSxTQUFBO0VBQ0EsVUFBQTtFQUNBLGdCQUFBO0FDYVI7QURaUTtFQUNJLGdCQUFBO0FDY1o7QUYvRlE7RUM0RUo7SUFRUSxpQkFBQTtJQUNBLFlBQUE7SUFDQSxZQUFBO0VDZVY7RURkVTtJQUNJLFlBQUE7SUFDQSxXQUFBO0VDZ0JkO0FBQ0Y7QUZ2R1E7RUN5RUo7SUFRUSxpQkFBQTtJQUNBLFlBQUE7SUFDQSxZQUFBO0VDMEJWO0VEekJVO0lBQ0ksWUFBQTtJQUNBLFdBQUE7RUMyQmQ7QUFDRjtBRHZCSTtFQUNJLGFBQUE7RUFDQSxtQkFBQTtFQUNBLGtCQUFBO0VBQ0EsV0FBQTtFQUNBLHlCRi9FUTtFRWdGUixXRjNHSztBR29JYjtBRHZCUTtFQUNJLE9BQUE7RUFDQSxjQUFBO0FDeUJaO0FEdEJRO0VBQ0ksU0FBQTtBQ3dCWjtBRHBCSTtFQUNJLFlBQUE7RUFDQSxvQkFBQTtFQUNBLHFCQUFBO0FDc0JSO0FEaEJRO0VBQ0ksY0ZsSEk7QUdxSWhCO0FEZFE7RUFDSSxVQUFBO0FDZ0JaO0FEYlE7RUFDSSxzQkFBQTtFRC9JUixpSEFBQTtFQ2lKUSxrQkFBQTtBQ2VaO0FEVlE7RUFDSSxzQkFBQTtFQUNBLGNBQUE7QUNZWjtBRFBRO0VBQ0ksMEJBQUE7RUFDQSxjQUFBO0FDU1o7QURQUTtFQUNJLDBCQUFBO0FDU1o7QURIQTtFQUNJLGdCQUFBO0FDTUo7QURBWTtFQUNJLGNGN0pBO0FHZ0toQjtBREtRO0VBQ0ksZUFBQTtBQ0ZaO0FEUUk7RUFDSSxnQkFBQTtFQUNBLFlBQUE7QUNMUjtBRFVJO0VBQ0kseUJGak1FO0VFa01GLFdBQUE7QUNQUjtBRFNJO0VBQ0kseUJGaE1FO0VFaU1GLFdBQUE7QUNQUjtBRFNJO0VBQ0kseUJGaE1BO0VFaU1BLFdBQUE7QUNQUjtBRFNJO0VBQ0kseUJGNUxVO0VFNkxWLFdBQUE7QUNQUjtBRFlJO0VBQ0kseUJGdk1RO0VFd01SLFdBQUE7QUNUUjtBRFdJO0VBQ0kseUJGbk5FO0FHME1WO0FEY0k7RUFDSSxlRmpOUTtBR3NNaEI7QURnQkk7RUFDSSx5QkZ2TlE7QUcwTWhCO0FEaUJBO0VBQ0kscUJBQUE7QUNkSjtBRGlCQTtFQUNJLDRCQUFBO0VBQ0EsZ0JBQUE7QUNkSjtBRGdCSTtFQUNJLHlCQUFBO0FDZFI7QURtQkk7RUFDSSxvQkFBQTtBQ2hCUjtBRHFCSTtFQUNJLG9CQUFBO0FDbEJSO0FEc0JBO0VBQ0ksZUFBQTtBQ25CSjtBRHdCUTtFQUNJLG9CQUFBO0FDckJaO0FEMEJRO0VBQ0ksYUFBQTtBQ3hCWjtBRDZCQTtFQUNJLDZCQUFBO0FDMUJKO0FEOEJJO0VBRUksbUJBQUE7QUM1QlI7QURrQ0k7RUFDSSxrQkFBQTtFQUNBLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSx5QkFBQTtBQy9CUjtBRGtDSTtFQUNJLHlCQUFBO0VBQ0EseUJBQUE7QUNoQ1I7QURzQ0E7O0NBQUE7QUFHQTtFQUNJLFlBQUE7RUFDQSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0EsYUFBQTtFQUNBLGdDQUFBO0VBQ0EsbUJBQUE7QUNuQ0o7QURzQ0E7RUFDSSxZQUFBO0VBQ0Esc0JBQUE7RUFDQSxzQkFBQTtFQUNBLGFBQUE7RUFDQSxpQ0FBQTtFQUNBLG9CQUFBO0VBQ0EsZUFBQTtBQ25DSjtBRHNDQTtFQUNJLGFBQUE7RUFDQSxxQkFBQTtFQUNBLG1CQUFBO0FDbkNKO0FEc0NBO0VBQ0ksOEJBQUE7QUNuQ0o7QURzQ0E7RUFDSSxPQUFBO0FDbkNKO0FEc0NBO0VBQ0ksNEJBQUE7QUNuQ0o7QURxQ0E7O0NBQUEiLCJmaWxlIjoiYXBwcy9zdGFmZi9zcmMvYXBwL3N0eWxlcy9jdXN0b20tZWxlbWVudC5zdHlsZXMuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGNvbG9yLWJyYW5kLWVsZWN0cmljLWJsdWU6ICMyMjUxZmY7XG4kY29sb3ItYnJhbmQtZGVlcC1ibHVlOiAjMDUxYzJjO1xuJGNvbG9yLWJyYW5kLWN5YW46ICMwMGE5ZjQ7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kZm9udC1kYXJrOiAjMDAwO1xuJGZvbnQtbGlnaHQ6ICNmZmY7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuJGdyZWVuMTogIzIxOTY1MztcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2xvci1wcmltYXJ5OiAjMTkzN2VhO1xuJGNvbG9yLXByaW1hcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcbiRjb2xvci1wcmltYXJ5LWRhcms6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuXG4kY29sb3Itc2Vjb25kYXJ5OiAjNDI4NUY0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodDogbGlnaHRlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG4kY29sb3Itc2Vjb25kYXJ5LWRhcms6IGRhcmtlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG5cbiRiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuJGZvb3Rlci1iYWNrOiAjMjYzMjM4O1xuJGhlYWRlci1iYWNrOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNTFDMkMsICMwNTFDMkMgNDAlLCAjMEIyNDUzIDYwJSwgIzFGNDBFNiAxMDAlKTtcblxuJGNvbG9yLXRlcm5hcnk6ICMwNTFjMmM7XG5cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuXG4kZm9udC1zdGFjazogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiRoZWFkaW5nLWZvbnQ6IFwiTGFyaXNoTWNLaW5zZXlcIiwgJ0dlb3JnaWEnLCBzZXJpZjtcbiRmb250OiAkZm9udC1zdGFjaztcblxuJGZvbnQtZmFtaWx5LXByaW1hcnk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LXNlY29uZGFyeTogXCJCb3dlclwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiIHNlcmlmO1xuXG4kYmFzZS1zaXplOiAxNnB4O1xuJHRhYmxldC1zaXplOiAxNnB4O1xuJG1vYmlsZS1zaXplOiAxNnB4O1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGJyZWFrLW1vYmlsZTogNDUwcHg7XG4kYnJlYWstdGFibGV0OiA4MDBweDtcbiRicmVhay1sYXB0b3A6IDEwMjRweDtcblxuJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGU6IDgwMHB4O1xuJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQ6IDEwNDhweDtcbiRicmVhay1sYW5kc2NhcGUtbGFwdG9wOiAxMjgwcHg7XG4iLCJAaW1wb3J0ICcuL3ZhcmlhYmxlcyc7XG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuQG1peGluIGJveC1zaGFkb3coJGNvbG9yOiAjMDAwLCAkZGVwdGg6IDEpIHtcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMXB4ICogKCRkZXB0aCAtIDEpIHJnYmEoIzAwMCwgLjIpLFxuICAgICAgICAgICAgICAgIDAgMXB4IDFweCAwIHJnYmEoIzAwMCwgLjE0KSxcbiAgICAgICAgICAgICAgICAwIDJweCAxcHggLTFweCByZ2JhKCMwMDAsIC4xMik7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG5AbWl4aW4gcmVzcG9uZC10bygkbWVkaWEpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gIEBlbHNlIGlmICRtZWRpYSA9PSBsYXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1AZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQGltcG9ydCAndmFyaWFibGVzJztcbkBpbXBvcnQgJ21peGlucyc7XG5cbi5kcm9wZG93blt3aWRnZXRdIHtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG5cbiAgICAmLmZpbGwge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG59XG5cbi5kcm9wZG93bi1saXN0W3dpZGdldF0ge1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cblxuLnNwaW5uZXIge1xuICAgIHN2ZyB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbn1cblxuYnV0dG9uLm1hdC1idXR0b24sXG5hW2J1dHRvbl0ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci1wcmltYXJ5O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRjb2xvci1wcmltYXJ5O1xuICAgIGNvbG9yOiAkZm9udC1saWdodDtcblxuICAgICYuaW52ZXJzZSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItcHJpbWFyeTtcbiAgICB9XG5cbiAgICAmLnN1Y2Nlc3Mge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc3VjY2VzcztcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkc3VjY2VzcztcbiAgICB9XG5cbiAgICAmW2Rpc2FibGVkXSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNDQ0M7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICBib3JkZXItY29sb3I6ICNBQUE7XG4gICAgfVxufVxuXG4ubWF0LWljb24tYnV0dG9uIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgaGVpZ2h0OiAyZW07XG4gICAgd2lkdGg6IDJlbTtcbiAgICBmb250LXNpemU6IDFlbTtcblxuICAgIC5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICB9XG5cbiAgICBhcHAtaWNvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41ZW07XG4gICAgfVxufVxuXG4uZHJvcGRvd25bd2lkZ2V0XSB7XG4gICAgJi5kZWZhdWx0IHtcbiAgICAgICAgd2lkdGg6IDkuNWVtO1xuICAgIH1cbn1cblxuLmR5bmFtaWMtZmllbGRbd2lkZ2V0XSB7XG4gICAgLmRldGFpbHMge1xuICAgICAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgfVxuXG4gICAgbGFiZWwge1xuICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICB9XG5cbiAgICAuY29udHJvbCB7XG4gICAgICAgIG1pbi13aWR0aDogMTBlbTtcbiAgICB9XG59XG5cbi5vdmVybGF5LWJhY2tkcm9wIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCMwMDAsIDAuNik7XG59XG5cbm1hdC1kaWFsb2ctY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG5cbiAgICAubWF0LWRpYWxvZy1hY3Rpb25zIHtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgfVxuXG4gICAgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgbWF4LWhlaWdodDogOTN2aDtcbiAgICAgICAgJi5wYWNrYWdlLW9wdGlvbnMge1xuICAgICAgICAgICAgbWF4LWhlaWdodDogODV2aDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgICAgICAgICB3aWR0aDogMTAwdnc7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICAmLmNhbmNlbC1kaWFsb2ctY29udGVudCwgJi5ib29raW5nLWR1cmF0aW9uLWNvbnRlbnQge1xuICAgICAgICAgICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgICAgICAgICB3aWR0aDogYXV0bztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhlYWRlciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIHBhZGRpbmc6IC41ZW0gMWVtO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXRlcm5hcnk7XG4gICAgICAgIGNvbG9yOiAkZm9udC1saWdodDtcblxuICAgICAgICBoMSwgaDIsIGgzLCBoNCB7XG4gICAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgICAgbWluLXdpZHRoOiA1MCU7XG4gICAgICAgIH1cblxuICAgICAgICA+ICoge1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmJvZHkge1xuICAgICAgICBwYWRkaW5nOiAxZW07XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuIGF1dG87XG4gICAgfVxufVxuXG5tYXQtZm9ybS1maWVsZCB7XG4gICAgJi5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQge1xuICAgICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayB7XG4gICAgICAgICAgICBjb2xvcjogJGNvbG9yLXByaW1hcnk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLm1hcCB7XG4gICAgICAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIH1cblxuICAgICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgICAgICAgICAgQGluY2x1ZGUgYm94LXNoYWRvdztcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYuZGVzayB7XG4gICAgICAgIC5tYXQtZm9ybS1maWVsZC1mbGV4IHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgICAgICAgICBwYWRkaW5nOiAwLjNlbVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi5yb3VuZGVkIHtcbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQge1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMmVtIDAgMCAyZW07XG4gICAgICAgICAgICBtaW4td2lkdGg6IDJlbTtcbiAgICAgICAgfVxuICAgICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAyZW0gMmVtIDA7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICBib3JkZXItdG9wOiBub25lO1xufVxuXG4ubWF0LXNlbGVjdC1wYW5lbCB7XG4gICAgLm1hdC1vcHRpb24ge1xuICAgICAgICAmLm1hdC1zZWxlY3RlZCB7XG4gICAgICAgICAgICAmOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkY29sb3ItcHJpbWFyeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxubWF0LXNlbGVjdCB7XG4gICAgLm1hdC1zZWxlY3QtdHJpZ2dlciB7XG4gICAgICAgIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXIge1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBub25lO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4ubWF0LXNpbXBsZS1zbmFja2JhciB7XG4gICAgYnV0dG9uLm1hdC1idXR0b24ge1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgfVxufVxuXG4ubWF0LXNuYWNrLWJhci1jb250YWluZXIge1xuICAgICYuc3VjY2VzcyB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzdWNjZXNzO1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICB9XG4gICAgJi53YXJuIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHBlbmRpbmc7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgIH1cbiAgICAmLmVycm9yIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGVycm9yO1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICB9XG4gICAgJi5pbmZvIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXNlY29uZGFyeTtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgfVxufVxuXG4ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAge1xuICAgICYubWF0LXByaW1hcnkge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3ItcHJpbWFyeTtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgfVxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwZW5kaW5nO1xuICAgIH1cbn1cblxuLm1hdC1zcGlubmVyIHtcbiAgICBjaXJjbGUge1xuICAgICAgICBzdHJva2U6ICRjb2xvci1wcmltYXJ5O1xuICAgIH1cbn1cblxuLm1hdC1wcm9ncmVzcy1iYXItZmlsbCB7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3ItcHJpbWFyeTtcbiAgICB9XG59XG5cbi5tYXQtdG9vbHRpcCB7XG4gICAgd2hpdGUtc3BhY2U6IHByZS1saW5lO1xufVxuXG5kaXYubWF0LW1lbnUtcGFuZWwge1xuICAgIG1heC13aWR0aDogY2FsYygxMDB2dyAtIDFlbSk7XG4gICAgbWF4LWhlaWdodDogNjV2aDtcblxuICAgICYuZGFyay1tb2RlIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzM2MzYzNjtcbiAgICB9XG59XG5cbm1hdC1yYWRpby1idXR0b24ge1xuICAgIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudCB7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBpbml0aWFsO1xuICAgIH1cbn1cblxubWF0LWNoZWNrYm94IHtcbiAgICAubWF0LWNoZWNrYm94LWxhYmVsLWNvbnRlbnQge1xuICAgICAgICB3aGl0ZS1zcGFjZTogaW5pdGlhbDtcbiAgICB9XG59XG5cbmRpdi5tYXQtc2VsZWN0LXBhbmVsIHtcbiAgICBtYXgtd2lkdGg6IDkwdnc7XG59XG5cbmEtbWFwIHtcbiAgICBzdmcge1xuICAgICAgICB0ZXh0IHtcbiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLnpvb21pbmcge1xuICAgICAgICBbaWRePVwiY2hhaXJcIl0ge1xuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLm1hcC1vdXRsZXQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O1xufVxuXG5sYWJlbCB7XG4gICAgJi5tYXQtY2hlY2tib3gtbGF5b3V0LFxuICAgICYubWF0LXJhZGlvLWxhYmVsIHtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgICB9XG59XG5cbi50YWd7XG4gICAgXG4gICAgLm11bHRpcm9vbSB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgcGFkZGluZzogMnB4IDEzcHg7XG4gICAgICAgIG1heC1oZWlnaHQ6IDI0cHg7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkQwNDg7XG4gICAgICAgIFxuICAgIH1cbiAgICAubWVyZ2VkIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2QzMmYyZjtcbiAgICAgICAgY29sb3I6ICNGRkZGRkYgIWltcG9ydGFudDtcbiAgICB9XG59XG5cblxuXG4vKlxuICAgIEZsZXggYm94IGxheW91dCBjb21tb24gY2xhc3Nlc1xuKi9cbi5mbGV4LXJvdyB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBsYWNlLWNvbnRlbnQ6IGNlbnRlciBmbGV4LXN0YXJ0O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbn1cbi5mbGV4LWNvbHVtbiB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBsYWNlLWNvbnRlbnQ6IHN0cmV0Y2ggZmxleC1zdGFydDtcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG59XG5cbi5mbGV4LWNlbnRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwbGFjZS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLmZsZXgtcm93LWVuZCB7XG4gICAgcGxhY2UtY29udGVudDogY2VudGVyIGZsZXgtZW5kO1xufVxuXG4uZmxleC1ncm93IHtcbiAgICBmbGV4OiAxO1xufVxuXG4uZmxleC1zcGFjZS1iZXR3ZWVuIHtcbiAgICBwbGFjZS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuLypcbiAgIF5eXiBGbGV4IGJveCBsYXlvdXQgY29tbW9uIGNsYXNzZXMgXl5eXG4qLyIsIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLmRyb3Bkb3duW3dpZGdldF0ge1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG4uZHJvcGRvd25bd2lkZ2V0XS5maWxsIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5kcm9wZG93bi1saXN0W3dpZGdldF0ge1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG5cbi5zcGlubmVyIHN2ZyB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG5idXR0b24ubWF0LWJ1dHRvbixcbmFbYnV0dG9uXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxOTM3ZWE7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMxOTM3ZWE7XG4gIGNvbG9yOiAjZmZmO1xufVxuYnV0dG9uLm1hdC1idXR0b24uaW52ZXJzZSxcbmFbYnV0dG9uXS5pbnZlcnNlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgY29sb3I6ICMxOTM3ZWE7XG59XG5idXR0b24ubWF0LWJ1dHRvbi5zdWNjZXNzLFxuYVtidXR0b25dLnN1Y2Nlc3Mge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDNhMDQ3O1xuICBib3JkZXItY29sb3I6ICM0M2EwNDc7XG59XG5idXR0b24ubWF0LWJ1dHRvbltkaXNhYmxlZF0sXG5hW2J1dHRvbl1bZGlzYWJsZWRdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0NDQztcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIGJvcmRlci1jb2xvcjogI0FBQTtcbn1cblxuLm1hdC1pY29uLWJ1dHRvbiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBoZWlnaHQ6IDJlbTtcbiAgd2lkdGg6IDJlbTtcbiAgZm9udC1zaXplOiAxZW07XG59XG4ubWF0LWljb24tYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cbi5tYXQtaWNvbi1idXR0b24gYXBwLWljb24ge1xuICBmb250LXNpemU6IDEuNWVtO1xufVxuXG4uZHJvcGRvd25bd2lkZ2V0XS5kZWZhdWx0IHtcbiAgd2lkdGg6IDkuNWVtO1xufVxuXG4uZHluYW1pYy1maWVsZFt3aWRnZXRdIC5kZXRhaWxzIHtcbiAgbWluLXdpZHRoOiAxMDAlO1xufVxuLmR5bmFtaWMtZmllbGRbd2lkZ2V0XSBsYWJlbCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLmR5bmFtaWMtZmllbGRbd2lkZ2V0XSAuY29udHJvbCB7XG4gIG1pbi13aWR0aDogMTBlbTtcbn1cblxuLm92ZXJsYXktYmFja2Ryb3Age1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNik7XG59XG5cbm1hdC1kaWFsb2ctY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgcGFkZGluZzogMDtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG5tYXQtZGlhbG9nLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRhaW5lciAubWF0LWRpYWxvZy1hY3Rpb25zIHtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG5tYXQtZGlhbG9nLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRhaW5lciAubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBtYXgtaGVpZ2h0OiA5M3ZoO1xufVxubWF0LWRpYWxvZy1jb250YWluZXIubWF0LWRpYWxvZy1jb250YWluZXIgLm1hdC1kaWFsb2ctY29udGVudC5wYWNrYWdlLW9wdGlvbnMge1xuICBtYXgtaGVpZ2h0OiA4NXZoO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgbWF0LWRpYWxvZy1jb250YWluZXIubWF0LWRpYWxvZy1jb250YWluZXIgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgfVxuICBtYXQtZGlhbG9nLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRhaW5lciAubWF0LWRpYWxvZy1jb250ZW50LmNhbmNlbC1kaWFsb2ctY29udGVudCwgbWF0LWRpYWxvZy1jb250YWluZXIubWF0LWRpYWxvZy1jb250YWluZXIgLm1hdC1kaWFsb2ctY29udGVudC5ib29raW5nLWR1cmF0aW9uLWNvbnRlbnQge1xuICAgIGhlaWdodDogYXV0bztcbiAgICB3aWR0aDogYXV0bztcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIG1hdC1kaWFsb2ctY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGFpbmVyIC5tYXQtZGlhbG9nLWNvbnRlbnQge1xuICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gIH1cbiAgbWF0LWRpYWxvZy1jb250YWluZXIubWF0LWRpYWxvZy1jb250YWluZXIgLm1hdC1kaWFsb2ctY29udGVudC5jYW5jZWwtZGlhbG9nLWNvbnRlbnQsIG1hdC1kaWFsb2ctY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGFpbmVyIC5tYXQtZGlhbG9nLWNvbnRlbnQuYm9va2luZy1kdXJhdGlvbi1jb250ZW50IHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgd2lkdGg6IGF1dG87XG4gIH1cbn1cbm1hdC1kaWFsb2ctY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGFpbmVyIGhlYWRlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDAuNWVtIDFlbTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwNTFjMmM7XG4gIGNvbG9yOiAjZmZmO1xufVxubWF0LWRpYWxvZy1jb250YWluZXIubWF0LWRpYWxvZy1jb250YWluZXIgaGVhZGVyIGgxLCBtYXQtZGlhbG9nLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRhaW5lciBoZWFkZXIgaDIsIG1hdC1kaWFsb2ctY29udGFpbmVyLm1hdC1kaWFsb2ctY29udGFpbmVyIGhlYWRlciBoMywgbWF0LWRpYWxvZy1jb250YWluZXIubWF0LWRpYWxvZy1jb250YWluZXIgaGVhZGVyIGg0IHtcbiAgZmxleDogMTtcbiAgbWluLXdpZHRoOiA1MCU7XG59XG5tYXQtZGlhbG9nLWNvbnRhaW5lci5tYXQtZGlhbG9nLWNvbnRhaW5lciBoZWFkZXIgPiAqIHtcbiAgbWFyZ2luOiAwO1xufVxubWF0LWRpYWxvZy1jb250YWluZXIubWF0LWRpYWxvZy1jb250YWluZXIgLmJvZHkge1xuICBwYWRkaW5nOiAxZW07XG4gIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICBvdmVyZmxvdzogaGlkZGVuIGF1dG87XG59XG5cbm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayB7XG4gIGNvbG9yOiAjMTkzN2VhO1xufVxubWF0LWZvcm0tZmllbGQubWFwIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgcGFkZGluZzogMDtcbn1cbm1hdC1mb3JtLWZpZWxkLm1hcCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJveC1zaGFkb3c6IDAgMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwIDFweCAxcHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG5tYXQtZm9ybS1maWVsZC5kZXNrIC5tYXQtZm9ybS1maWVsZC1mbGV4IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgcGFkZGluZzogMC4zZW07XG59XG5tYXQtZm9ybS1maWVsZC5yb3VuZGVkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0IHtcbiAgYm9yZGVyLXJhZGl1czogMmVtIDAgMCAyZW07XG4gIG1pbi13aWR0aDogMmVtO1xufVxubWF0LWZvcm0tZmllbGQucm91bmRlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICBib3JkZXItcmFkaXVzOiAwIDJlbSAyZW0gMDtcbn1cblxuLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgYm9yZGVyLXRvcDogbm9uZTtcbn1cblxuLm1hdC1zZWxlY3QtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICBjb2xvcjogIzE5MzdlYTtcbn1cblxubWF0LXNlbGVjdCAubWF0LXNlbGVjdC10cmlnZ2VyIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXIge1xuICB0cmFuc2Zvcm06IG5vbmU7XG59XG5cbi5tYXQtc2ltcGxlLXNuYWNrYmFyIGJ1dHRvbi5tYXQtYnV0dG9uIHtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgYm9yZGVyOiBub25lO1xufVxuXG4ubWF0LXNuYWNrLWJhci1jb250YWluZXIuc3VjY2VzcyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0M2EwNDc7XG4gIGNvbG9yOiAjZmZmO1xufVxuLm1hdC1zbmFjay1iYXItY29udGFpbmVyLndhcm4ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZiMzAwO1xuICBjb2xvcjogI2ZmZjtcbn1cbi5tYXQtc25hY2stYmFyLWNvbnRhaW5lci5lcnJvciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlNTM5MzU7XG4gIGNvbG9yOiAjZmZmO1xufVxuLm1hdC1zbmFjay1iYXItY29udGFpbmVyLmluZm8ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDI4NUY0O1xuICBjb2xvcjogI2ZmZjtcbn1cblxuLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1wcmltYXJ5IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE5MzdlYTtcbiAgY29sb3I6ICNmZmY7XG59XG4ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWFjY2VudCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmIzMDA7XG59XG5cbi5tYXQtc3Bpbm5lciBjaXJjbGUge1xuICBzdHJva2U6ICMxOTM3ZWE7XG59XG5cbi5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE5MzdlYTtcbn1cblxuLm1hdC10b29sdGlwIHtcbiAgd2hpdGUtc3BhY2U6IHByZS1saW5lO1xufVxuXG5kaXYubWF0LW1lbnUtcGFuZWwge1xuICBtYXgtd2lkdGg6IGNhbGMoMTAwdncgLSAxZW0pO1xuICBtYXgtaGVpZ2h0OiA2NXZoO1xufVxuZGl2Lm1hdC1tZW51LXBhbmVsLmRhcmstbW9kZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzNjM2MzY7XG59XG5cbm1hdC1yYWRpby1idXR0b24gLm1hdC1yYWRpby1sYWJlbC1jb250ZW50IHtcbiAgd2hpdGUtc3BhY2U6IGluaXRpYWw7XG59XG5cbm1hdC1jaGVja2JveCAubWF0LWNoZWNrYm94LWxhYmVsLWNvbnRlbnQge1xuICB3aGl0ZS1zcGFjZTogaW5pdGlhbDtcbn1cblxuZGl2Lm1hdC1zZWxlY3QtcGFuZWwge1xuICBtYXgtd2lkdGg6IDkwdnc7XG59XG5cbmEtbWFwIHN2ZyB0ZXh0IHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5hLW1hcCAuem9vbWluZyBbaWRePWNoYWlyXSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5tYXAtb3V0bGV0IHtcbiAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XG59XG5cbmxhYmVsLm1hdC1jaGVja2JveC1sYXlvdXQsIGxhYmVsLm1hdC1yYWRpby1sYWJlbCB7XG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG59XG5cbi50YWcgLm11bHRpcm9vbSB7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgcGFkZGluZzogMnB4IDEzcHg7XG4gIG1heC1oZWlnaHQ6IDI0cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGRkQwNDg7XG59XG4udGFnIC5tZXJnZWQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDMyZjJmO1xuICBjb2xvcjogI0ZGRkZGRiAhaW1wb3J0YW50O1xufVxuXG4vKlxuICAgIEZsZXggYm94IGxheW91dCBjb21tb24gY2xhc3Nlc1xuKi9cbi5mbGV4LXJvdyB7XG4gIGhlaWdodDogMTAwJTtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgcGxhY2UtY29udGVudDogY2VudGVyIGZsZXgtc3RhcnQ7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5mbGV4LWNvbHVtbiB7XG4gIGhlaWdodDogMTAwJTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgcGxhY2UtY29udGVudDogc3RyZXRjaCBmbGV4LXN0YXJ0O1xuICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgbWF4LXdpZHRoOiAxMDAlO1xufVxuXG4uZmxleC1jZW50ZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBwbGFjZS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5mbGV4LXJvdy1lbmQge1xuICBwbGFjZS1jb250ZW50OiBjZW50ZXIgZmxleC1lbmQ7XG59XG5cbi5mbGV4LWdyb3cge1xuICBmbGV4OiAxO1xufVxuXG4uZmxleC1zcGFjZS1iZXR3ZWVuIHtcbiAgcGxhY2UtY29udGVudDogc3BhY2UtYmV0d2Vlbjtcbn1cblxuLypcbiAgIF5eXiBGbGV4IGJveCBsYXlvdXQgY29tbW9uIGNsYXNzZXMgXl5eXG4qLyJdfQ== */", "/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\ninput,\ntextarea {\n -webkit-user-select: text;\n -moz-user-select: text;\n user-select: text;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvYXBwcy9zdGFmZi9zcmMvYXBwL3N0eWxlcy9uYXRpdmUtZWxlbWVudC5zdHlsZXMuc2NzcyIsImFwcHMvc3RhZmYvc3JjL2FwcC9zdHlsZXMvbmF0aXZlLWVsZW1lbnQuc3R5bGVzLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQ3ZEQTs7RUFFSSx5QkFBQTtLQUFBLHNCQUFBO1VBQUEsaUJBQUE7QUNVSiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvc3R5bGVzL25hdGl2ZS1lbGVtZW50LnN0eWxlcy5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kY29sb3ItYnJhbmQtZWxlY3RyaWMtYmx1ZTogIzIyNTFmZjtcbiRjb2xvci1icmFuZC1kZWVwLWJsdWU6ICMwNTFjMmM7XG4kY29sb3ItYnJhbmQtY3lhbjogIzAwYTlmNDtcblxuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRmb250LWRhcms6ICMwMDA7XG4kZm9udC1saWdodDogI2ZmZjtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG4kZ3JlZW4xOiAjMjE5NjUzO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvbG9yLXByaW1hcnk6ICMxOTM3ZWE7XG4kY29sb3ItcHJpbWFyeS1saWdodDogbGlnaHRlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuJGNvbG9yLXByaW1hcnktZGFyazogZGFya2VuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG5cbiRjb2xvci1zZWNvbmRhcnk6ICM0Mjg1RjQ7XG4kY29sb3Itc2Vjb25kYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcbiRjb2xvci1zZWNvbmRhcnktZGFyazogZGFya2VuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcblxuJGJhY2tncm91bmQ6ICNmMGYwZjA7XG4kZm9vdGVyLWJhY2s6ICMyNjMyMzg7XG4kaGVhZGVyLWJhY2s6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzA1MUMyQywgIzA1MUMyQyA0MCUsICMwQjI0NTMgNjAlLCAjMUY0MEU2IDEwMCUpO1xuXG4kY29sb3ItdGVybmFyeTogIzA1MWMyYztcblxuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG5cbiRmb250LXN0YWNrOiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcblxuJGhlYWRpbmctZm9udDogXCJMYXJpc2hNY0tpbnNleVwiLCAnR2VvcmdpYScsIHNlcmlmO1xuJGZvbnQ6ICRmb250LXN0YWNrO1xuXG4kZm9udC1mYW1pbHktcHJpbWFyeTogXCJNY0tpbnNleSBTYW5zXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQ2FsaWJyaSwgQ29yYmVsLCBIZWx2ZXRpY2EsIFJvYm90bywgRHJvaWQsIHNhbnMtc2VyaWY7XG4kZm9udC1mYW1pbHktc2Vjb25kYXJ5OiBcIkJvd2VyXCIsIEdlb3JnaWEsIFwiVGltZXMgTmV3IFJvbWFuXCIgc2VyaWY7XG5cbiRiYXNlLXNpemU6IDE2cHg7XG4kdGFibGV0LXNpemU6IDE2cHg7XG4kbW9iaWxlLXNpemU6IDE2cHg7XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kYnJlYWstbW9iaWxlOiA0NTBweDtcbiRicmVhay10YWJsZXQ6IDgwMHB4O1xuJGJyZWFrLWxhcHRvcDogMTAyNHB4O1xuXG4kYnJlYWstbGFuZHNjYXBlLW1vYmlsZTogODAwcHg7XG4kYnJlYWstbGFuZHNjYXBlLXRhYmxldDogMTA0OHB4O1xuJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3A6IDEyODBweDtcbiIsIlxuQGltcG9ydCAndmFyaWFibGVzJztcblxuaW5wdXQsXG50ZXh0YXJlYSB7XG4gICAgdXNlci1zZWxlY3Q6IHRleHQ7XG59XG4iLCIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5pbnB1dCxcbnRleHRhcmVhIHtcbiAgdXNlci1zZWxlY3Q6IHRleHQ7XG59Il19 */"], encapsulation: 2 }); /*@__PURE__*/ @@ -45195,41 +45817,41 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super65 = _createSuper(CalendarDateWidgetComponent); function CalendarDateWidgetComponent(_bookings, _org) { - var _this175; + var _this174; _classCallCheck(this, CalendarDateWidgetComponent); - _this175 = _super65.call(this); - _this175._bookings = _bookings; - _this175._org = _org; + _this174 = _super65.call(this); + _this174._bookings = _bookings; + _this174._org = _org; /** Currently selected date */ - _this175.dateTz = date_tz_1.DateNow(new Date()); + _this174.dateTz = date_tz_1.DateNow(new Date()); /** Whether to show new item button */ - _this175.show_add_item = false; + _this174.show_add_item = false; /** Whether to show the events for the active month */ - _this175.show_events = false; + _this174.show_events = false; /** Preserve last selected date */ - _this175.retainSelectedDate = false; + _this174.retainSelectedDate = false; /** Emitter for changes selected date */ - _this175.dateChangeTz = new core_1.EventEmitter(); + _this174.dateChangeTz = new core_1.EventEmitter(); /** Emitter for add item button */ - _this175.event = new core_1.EventEmitter(); - _this175.fromDateTz = date_tz_1.DateNow().subtractValue({ + _this174.event = new core_1.EventEmitter(); + _this174.fromDateTz = date_tz_1.DateNow().subtractValue({ months: 6 }); - return _this175; + return _this174; } _createClass(CalendarDateWidgetComponent, [{ key: "ngOnInit", value: function ngOnInit() { - var _this176 = this; + var _this175 = this; // CONCIERGE.date: Get the localstorage date and timezone when changing pages. var date; @@ -45245,21 +45867,21 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (date && (date !== this.dateTz.ms || this.timezone_value !== this.dateTz.building_tz)) { // CONCIERGE.date Reapply the localstorage date and timezone when changing pages. this.timeout('init', function () { - _this176.dateTz = new date_tz_1.DateTZ({ + _this175.dateTz = new date_tz_1.DateTZ({ date: date, is_local_tz: false, - building_tz: _this176.timezone_value + building_tz: _this175.timezone_value }); - _this176.dateChangeTz.emit(_this176.dateTz); + _this175.dateChangeTz.emit(_this175.dateTz); - _this176.updateDate(); + _this175.updateDate(); }, 10); } this.subscription('events', this._bookings._noOfMeetings.subscribe(function (list) { - _this176.event_map = {}; - _this176.event_map = list[0]; + _this175.event_map = {}; + _this175.event_map = list[0]; })); } }, { @@ -45312,10 +45934,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "updateDate", value: function updateDate() { - var _this177 = this; + var _this176 = this; this.timeout('update_date', function () { - return _this177._bookings.setDate(_this177.dateTz); + return _this176._bookings.setDate(_this176.dateTz); }); } /** Reset date to the current date */ @@ -45675,31 +46297,31 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super66 = _createSuper(BookingCalendarWrapperComponent); function BookingCalendarWrapperComponent(_org, _spaces, _bookings, settingService, store) { - var _this178; + var _this177; _classCallCheck(this, BookingCalendarWrapperComponent); - _this178 = _super66.call(this); - _this178._org = _org; - _this178._spaces = _spaces; - _this178._bookings = _bookings; - _this178.settingService = settingService; - _this178.store = store; - _this178.TopBarHeaderMode = topbar_header_component_1.TopBarHeaderMode; - _this178.backRoute = { + _this177 = _super66.call(this); + _this177._org = _org; + _this177._spaces = _spaces; + _this177._bookings = _bookings; + _this177.settingService = settingService; + _this177.store = store; + _this177.TopBarHeaderMode = topbar_header_component_1.TopBarHeaderMode; + _this177.backRoute = { route: ['/home', 'results'], queryParams: { display: 'list' } }; - _this178.orgBuildings = []; - return _this178; + _this177.orgBuildings = []; + return _this177; } _createClass(BookingCalendarWrapperComponent, [{ key: "ngOnInit", value: function ngOnInit() { - var _this179 = this; + var _this178 = this; /** allow booking bypass to receive bookings for staff calendar view only */ this.settingService.bypass_bookings = true; @@ -45709,7 +46331,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons localStorage.setItem('CONCIERGE.date', "".concat(next.dateTz.ms)); localStorage.setItem('CONCIERGE.timezone', "".concat(next.timezone)); - var building = _this179._org.buildings.find(function (_) { + var building = _this178._org.buildings.find(function (_) { var _a, _b, _c; return _.id === ((_c = (_b = (_a = next.location.filter(function (el) { @@ -45718,7 +46340,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }); if (building) { - _this179._org.building = building; + _this178._org.building = building; } } })); @@ -45726,7 +46348,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this._org.initialised.pipe(operators_1.first(function (_) { return _; })).subscribe(function () { - _this179.orgBuildings = _this179._org.buildings; + _this178.orgBuildings = _this178._org.buildings; }); } }, { @@ -46502,34 +47124,34 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super67 = _createSuper(DayViewSpaceEventComponent); function DayViewSpaceEventComponent(_service, store, _dialog, _router, cdRef, closeDialogService) { - var _this180; + var _this179; _classCallCheck(this, DayViewSpaceEventComponent); - _this180 = _super67.call(this); - _this180._service = _service; - _this180.store = store; - _this180._dialog = _dialog; - _this180._router = _router; - _this180.cdRef = cdRef; - _this180.closeDialogService = closeDialogService; + _this179 = _super67.call(this); + _this179._service = _service; + _this179.store = store; + _this179._dialog = _dialog; + _this179._router = _router; + _this179.cdRef = cdRef; + _this179.closeDialogService = closeDialogService; /** Date to display bookings for */ - _this180.dateTz = date_tz_1.DateNow(new Date()); + _this179.dateTz = date_tz_1.DateNow(new Date()); /** Emitter for the current position of the booking within the timeline */ - _this180.position = new core_1.EventEmitter(); - return _this180; + _this179.position = new core_1.EventEmitter(); + return _this179; } _createClass(DayViewSpaceEventComponent, [{ key: "ngOnInit", value: function ngOnInit() { - var _this181 = this; + var _this180 = this; this.subscription('currentUser', this.store.select(user_1.selectCurrentUser).pipe(operators_1.take(1)).subscribe(function (user) { // Once we know we have the user loaded. - _this181.currentUser = new data_common_1.User(user); + _this180.currentUser = new data_common_1.User(user); })); this.approved = this.booking.status === data_common_1.BOOKING_STATUS.approved; this.declined = this.booking.status === data_common_1.BOOKING_STATUS.declined; // test comment @@ -46684,10 +47306,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "order", get: function get() { - var _this182 = this; + var _this181 = this; return this.booking.catering.find(function (order) { - return order.location_id === _this182.space.email; + return order.location_id === _this181.space.email; }); } /** Whether booking is active */ @@ -46986,53 +47608,53 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super68 = _createSuper(DayViewSpaceComponent); function DayViewSpaceComponent(_service, _spaces, _booking_state_service, _bookings, _dialog, cdr, _org) { - var _this183; + var _this182; _classCallCheck(this, DayViewSpaceComponent); - _this183 = _super68.call(this); - _this183._service = _service; - _this183._spaces = _spaces; - _this183._booking_state_service = _booking_state_service; - _this183._bookings = _bookings; - _this183._dialog = _dialog; - _this183.cdr = cdr; - _this183._org = _org; + _this182 = _super68.call(this); + _this182._service = _service; + _this182._spaces = _spaces; + _this182._booking_state_service = _booking_state_service; + _this182._bookings = _bookings; + _this182._dialog = _dialog; + _this182.cdr = cdr; + _this182._org = _org; /** Mapping of whether to show events with a given legend id */ - _this183.legend = {}; - _this183.eventMovingLoader = {}; + _this182.legend = {}; + _this182.eventMovingLoader = {}; /** Emitter for whether the space column is in view */ - _this183.inView = new core_1.EventEmitter(); + _this182.inView = new core_1.EventEmitter(); /** Emitter for whether an event is being dragged */ - _this183.dragging = new core_1.EventEmitter(); + _this182.dragging = new core_1.EventEmitter(); /** Emitter for whether an event is being dropped and moving in progress */ - _this183.moving = new core_1.EventEmitter(); + _this182.moving = new core_1.EventEmitter(); /** List of bookings for the current date and space */ - _this183.event_list = []; + _this182.event_list = []; /** Mapping of event IDs to overlap details */ - _this183.overlap_details = {}; + _this182.overlap_details = {}; /** Mapping of positions of event in the day */ - _this183.position_list = {}; + _this182.position_list = {}; /** Map of bookings to whether they are loading */ - _this183.loading = {}; + _this182.loading = {}; /** Settings for day view */ - _this183.settings = {}; + _this182.settings = {}; /** List of timeblocks to display */ - _this183.time_blocks = _this183.generateTimeBlocks(); + _this182.time_blocks = _this182.generateTimeBlocks(); /** Events to display for the active date */ - _this183.events = []; - return _this183; + _this182.events = []; + return _this182; } /** Generate time blocks to display on the day view */ @@ -47043,13 +47665,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var blocks = []; var date = date_tz_1.DateNow(new Date()).startOfValue('hour'); - for (var _i19 = 0; _i19 < 24; _i19++) { + for (var _i20 = 0; _i20 < 24; _i20++) { blocks.push({ id: date.setValue({ - hour: _i19 + hour: _i20 }).formatDate('HH:mm'), name: date.setValue({ - hour: _i19 + hour: _i20 }).formatDate('h:mma').toLocaleLowerCase() }); } @@ -47059,14 +47681,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "ngOnInit", value: function ngOnInit() { - var _this184 = this; + var _this183 = this; this.events = this.filterEvents(); this._service.initialised.pipe(operators_1.first(function (_) { return _; })).subscribe(function () { - _this184.settings = _this184._service.setting('app.day_view') || {}; // this.subscription( + _this183.settings = _this183._service.setting('app.day_view') || {}; // this.subscription( // 'breakdown', // this._service // .listen('APP.breakdown') @@ -47082,20 +47704,20 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons // .subscribe((state) => (this.legend = state || {})) // ); - _this184.subscription('bookings', _this184._booking_state_service.filtered.subscribe(function (list) { - _this184.event_list = _toConsumableArray(list); - _this184.events = _toConsumableArray(_this184.filterEvents()); + _this183.subscription('bookings', _this183._booking_state_service.filtered.subscribe(function (list) { + _this183.event_list = _toConsumableArray(list); + _this183.events = _toConsumableArray(_this183.filterEvents()); - _this184.cdr.detectChanges(); + _this183.cdr.detectChanges(); })); - _this184.checkInView(); + _this183.checkInView(); }); } }, { key: "ngOnChanges", value: function ngOnChanges(changes) { - var _this185 = this; + var _this184 = this; /* istanbul ignore else */ if (changes.scroll) { @@ -47105,7 +47727,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (changes.space) { this.event_list = _toConsumableArray(this.event_list); this.timeout('in_view', function () { - return _this185.checkInView(); + return _this184.checkInView(); }, 100); } /* istanbul ignore else */ @@ -47113,7 +47735,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (changes.last_update) { this.timeout('update_overlaps', function () { - return _this185.calculateOverlaps(); + return _this184.calculateOverlaps(); }, 1000); } } //replace this with concierge space.comp filterEvents @@ -47141,7 +47763,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "filterEvents", value: function filterEvents() { - var _this186 = this; + var _this185 = this; if (!this.space) { return []; @@ -47149,19 +47771,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons return this.event_list.filter(function (event) { // Mark as loading if override state matches. - if (_this186.override_state && _this186.override_state === event.icaluid) { - _this186.loading[event.id] = true; + if (_this185.override_state && _this185.override_state === event.icaluid) { + _this185.loading[event.id] = true; } var isRecurrentMaster = event.is_recurrent && event.recurrence_type === 'master'; var isRoomEmailMatch = event.multi_rooms.some(function (room) { - return room.email === _this186.space.email; + return room.email === _this185.space.email; }); // Determine if the event should be included based on setup or breakdown conditions. var isIncludedInSetupOrBreakdown = event.multi_rooms.some(function (room) { return event.setup[room.email] || event.breakdown[room.email]; }); - return !isRecurrentMaster && isRoomEmailMatch && (!_this186.overflow_only || isIncludedInSetupOrBreakdown); + return !isRecurrentMaster && isRoomEmailMatch && (!_this185.overflow_only || isIncludedInSetupOrBreakdown); }).map(function (event) { return new data_common_3.Booking(Object.assign({}, event.toJSON())); }); @@ -47186,13 +47808,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "calculateOverlaps", value: function calculateOverlaps() { - var _this187 = this; + var _this186 = this; var events = this.events.sort(function (a, b) { return a.startDateTz.ms - b.startDateTz.ms || a.duration - b.duration || (a.title || '').localeCompare(b.title || ''); }); events.forEach(function (i) { - return _this187.overlap_details[i.id] = { + return _this186.overlap_details[i.id] = { index: 0, total: 1 }; @@ -47248,7 +47870,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons _iterator37.f(); } - _this187.overlap_details[bkn.id] = { + _this186.overlap_details[bkn.id] = { index: Math.max(0, index), total: count }; @@ -47294,10 +47916,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "endDrag", value: function endDrag() { - var _this188 = this; + var _this187 = this; this.timeout('end_drag', function () { - return _this188.top = 0; + return _this187.top = 0; }, 10); this.dragging.emit(false); } @@ -47770,47 +48392,47 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super69 = _createSuper(StaffCalendarComponent); function StaffCalendarComponent(_service, _org, _dialog, _router, _route, _booking_state_service, _spaces, store) { - var _this189; + var _this188; _classCallCheck(this, StaffCalendarComponent); - _this189 = _super69.call(this); - _this189._service = _service; - _this189._org = _org; - _this189._dialog = _dialog; - _this189._router = _router; - _this189._route = _route; - _this189._booking_state_service = _booking_state_service; - _this189._spaces = _spaces; - _this189.store = store; + _this188 = _super69.call(this); + _this188._service = _service; + _this188._org = _org; + _this188._dialog = _dialog; + _this188._router = _router; + _this188._route = _route; + _this188._booking_state_service = _booking_state_service; + _this188._spaces = _spaces; + _this188.store = store; /** Currently selected date, starts out with no timezone data, gets updated later */ - _this189.dateTz = date_tz_1.DateNow(new Date()); + _this188.dateTz = date_tz_1.DateNow(new Date()); /** ID of the currently selected level */ - _this189.active_level = ''; + _this188.active_level = ''; /** ID of the currently selected type */ - _this189.active_type = ''; + _this188.active_type = ''; /** List of levels available for the active building */ - _this189.levels = []; + _this188.levels = []; /** List of space types available for the active building */ - _this189.space_types = []; - _this189.event_list = []; - _this189.foundSearchLength = 0; - _this189.searchedCounter = 1; - _this189.totalFoundItem = 0; - _this189.spaces = []; - _this189.levelsDD = []; - return _this189; + _this188.space_types = []; + _this188.event_list = []; + _this188.foundSearchLength = 0; + _this188.searchedCounter = 1; + _this188.totalFoundItem = 0; + _this188.spaces = []; + _this188.levelsDD = []; + return _this188; } _createClass(StaffCalendarComponent, [{ key: "ngOnInit", value: function ngOnInit() { - var _this190 = this; + var _this189 = this; this._service.title = 'Day View'; @@ -47818,100 +48440,100 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons return _; })).subscribe(function () { // Init dateTz here once the organization data is loaded. - _this190.dateTz = new date_tz_1.DateTZ({ - date: _this190.dateTz.ms, + _this189.dateTz = new date_tz_1.DateTZ({ + date: _this189.dateTz.ms, is_local_tz: false, - building_tz: _this190.timezone + building_tz: _this189.timezone }); - _this190.subscription('route.params', _this190._route.paramMap.subscribe(function (params) { + _this189.subscription('route.params', _this189._route.paramMap.subscribe(function (params) { /* istanbul ignore else */ - if (params.has('level') && _this190.active_level !== params.get('level')) { - var level = _this190._org.levelWithID(params.get('level')); + if (params.has('level') && _this189.active_level !== params.get('level')) { + var level = _this189._org.levelWithID(params.get('level')); /* istanbul ignore else */ if (level) { - var building = _this190._org.buildings.find(function (bld) { + var building = _this189._org.buildings.find(function (bld) { return bld.id === level.building_id; }); /* istanbul ignore else */ if (building) { - _this190.active_level = level.id; - _this190._org.building = building; + _this189.active_level = level.id; + _this189._org.building = building; - _this190._booking_state_service.setZone(_this190.active_level || _this190._org.building.id); + _this189._booking_state_service.setZone(_this189.active_level || _this189._org.building.id); } } } })); - _this190.subscription('building', _this190._org.listen('active_building').subscribe(function () { + _this189.subscription('building', _this189._org.listen('active_building').subscribe(function () { var _a; - _this190._booking_state_service.updateRoomList(); // Update dateTz here when the building is changed. + _this189._booking_state_service.updateRoomList(); // Update dateTz here when the building is changed. - _this190.dateTz = new date_tz_1.DateTZ({ - date: _this190.dateTz.ms, + _this189.dateTz = new date_tz_1.DateTZ({ + date: _this189.dateTz.ms, is_local_tz: false, - building_tz: _this190.timezone + building_tz: _this189.timezone }); - var building = _this190._org.building; + var building = _this189._org.building; /* istanbul ignore else */ if (!building.levels.find(function (lvl) { - return lvl.id === _this190.active_level; + return lvl.id === _this189.active_level; })) { - _this190.active_level = (_a = building === null || building === void 0 ? void 0 : building.levels[0]) === null || _a === void 0 ? void 0 : _a.id; + _this189.active_level = (_a = building === null || building === void 0 ? void 0 : building.levels[0]) === null || _a === void 0 ? void 0 : _a.id; - _this190.updateLevel(); + _this189.updateLevel(); } - _this190.initSpace(); + _this189.initSpace(); - _this190.levels = [{ + _this189.levels = [{ id: '', name: 'All Levels' }].concat(building.levels); - _this190.levels.sort(function (a, b) { + _this189.levels.sort(function (a, b) { return b.name.localeCompare(a.name, undefined, { numeric: true, ignorePunctuation: true }); }); - _this190.levelsDD = []; + _this189.levelsDD = []; - _this190.levels.forEach(function (el) { - _this190.levelsDD.push({ + _this189.levels.forEach(function (el) { + _this189.levelsDD.push({ display: el.name, value: el.id, meta: {} }); }); - _this190.roomLevelDD = { + _this189.roomLevelDD = { ddBoxClass: 'room-level', - options: _this190.levelsDD, - defaultSelected: _this190.levelsDD.filter(function (el) { - return el.value === _this190.active_level; + options: _this189.levelsDD, + defaultSelected: _this189.levelsDD.filter(function (el) { + return el.value === _this189.active_level; })[0], - onChangeCallback: _this190.onChangeActiveLevel.bind(_this190) + onChangeCallback: _this189.onChangeActiveLevel.bind(_this189) }; - _this190.buildingsInSameCity = _this190._org.buildings.filter(function (_) { + _this189.buildingsInSameCity = _this189._org.buildings.filter(function (_) { return _.city === building.city; }); - _this190.generateBuildingMenu(); + _this189.generateBuildingMenu(); })); }); this.subscription('bookings', this._booking_state_service.filtered.subscribe(function (list) { - _this190.event_list = _toConsumableArray(_this190.filterEvents(list)); + _this189.event_list = _toConsumableArray(_this189.filterEvents(list)); })); } }, { @@ -47927,11 +48549,11 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "initSpace", value: function initSpace() { - var _this191 = this; + var _this190 = this; this.subscription('spaces', this._spaces.listen('list').subscribe(function (spaces) { - var zone_id = !_this191.active_level ? _this191._org.building.id : _this191.active_level; - _this191.spaces = _this191._spaces.filter(function (_) { + var zone_id = !_this190.active_level ? _this190._org.building.id : _this190.active_level; + _this190.spaces = _this190._spaces.filter(function (_) { return _.zones.indexOf(zone_id) >= 0 && _.bookable; }); })); @@ -48033,7 +48655,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "updateActiveBuilding", value: function updateActiveBuilding(node) { - var _this192 = this; + var _this191 = this; // console.log(node); var building = this.buildingsInSameCity.filter(function (bld) { @@ -48053,7 +48675,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }); this.active_level = node.meta.level_id; this.roomLevelDD.defaultSelected = this.levelsDD.filter(function (el) { - return el.value === _this192.active_level; + return el.value === _this191.active_level; })[0]; this.updateLevel(); } @@ -48433,61 +49055,61 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super70 = _createSuper(DayViewTimelineComponent); function DayViewTimelineComponent(_service, _spaces, _booking_state_service, _org, _route, _renderer, _dialog, _zone, cdr) { - var _this193; + var _this192; _classCallCheck(this, DayViewTimelineComponent); - _this193 = _super70.call(this); - _this193._service = _service; - _this193._spaces = _spaces; - _this193._booking_state_service = _booking_state_service; - _this193._org = _org; - _this193._route = _route; - _this193._renderer = _renderer; - _this193._dialog = _dialog; - _this193._zone = _zone; - _this193.cdr = cdr; + _this192 = _super70.call(this); + _this192._service = _service; + _this192._spaces = _spaces; + _this192._booking_state_service = _booking_state_service; + _this192._org = _org; + _this192._route = _route; + _this192._renderer = _renderer; + _this192._dialog = _dialog; + _this192._zone = _zone; + _this192.cdr = cdr; /** DateTZ object of the active date */ - _this193.dateTz = date_tz_1.DateNow(new Date()); + _this192.dateTz = date_tz_1.DateNow(new Date()); /** List of shown legend items */ - _this193.legend = {}; + _this192.legend = {}; /** List of timeblocks to display */ - _this193.time_blocks = _this193.generateTimeBlocks(); + _this192.time_blocks = _this192.generateTimeBlocks(); /** Top value of the content scroll */ - _this193.scroll_top = 0; + _this192.scroll_top = 0; /** Left value of the content scroll */ - _this193.scroll_left = 0; + _this192.scroll_left = 0; /** Offset of the scroll value when starting a drag */ - _this193.scroll_offset = 0; + _this192.scroll_offset = 0; /** List of spaces to display for */ - _this193.spaces = []; + _this192.spaces = []; /** List of spaces to display for */ - _this193.filtered_spaces = []; + _this192.filtered_spaces = []; /** Mapping of space ids to whether they are in view */ - _this193.in_view = {}; + _this192.in_view = {}; /** Mapping of spaces loading booking date */ - _this193.loading_space = {}; + _this192.loading_space = {}; /** Last update time for the space bookings */ - _this193.last_update = 0; + _this192.last_update = 0; /** Whether to show the holding bay */ // public show_holding_bay: boolean = true; - _this193.space_zones = []; - _this193.is_today = _this193.isToday(); - _this193.modalInitialized = false; - _this193.isEventMoving = false; - return _this193; + _this192.space_zones = []; + _this192.is_today = _this192.isToday(); + _this192.modalInitialized = false; + _this192.isEventMoving = false; + return _this192; } /** Update scroll box when the window is resized */ @@ -48517,55 +49139,55 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "ngOnInit", value: function ngOnInit() { - var _this194 = this; + var _this193 = this; this._spaces.initialised.pipe(operators_1.first(function (_) { return _; })).subscribe(function () { - _this194._org.initialised.pipe(operators_1.first(function (_) { + _this193._org.initialised.pipe(operators_1.first(function (_) { return _; })).subscribe(function () { - _this194._booking_state_service.startPollingEveryFiveMin(); + _this193._booking_state_service.startPollingEveryFiveMin(); - var zone_id = !_this194.level ? _this194._org.building.id : _this194.level; - _this194.spaces = _this194._spaces.filter(function (_) { + var zone_id = !_this193.level ? _this193._org.building.id : _this193.level; + _this193.spaces = _this193._spaces.filter(function (_) { return _.zones.indexOf(zone_id) >= 0; }); - _this194.init(); + _this193.init(); - _this194.initSpaces(); // Update time + _this193.initSpaces(); // Update time - _this194.updateTime(); + _this193.updateTime(); - _this194._zone.runOutsideAngular(function () { - _this194.interval('time', function () { - return _this194.updateTime(); + _this193._zone.runOutsideAngular(function () { + _this193.interval('time', function () { + return _this193.updateTime(); }, 15 * 1000); }); // R--- return to see if the booking service needs updating - _this194.subscription('dateTz', _this194._booking_state_service.dateTz.subscribe(function (dateTz) { + _this193.subscription('dateTz', _this193._booking_state_service.dateTz.subscribe(function (dateTz) { // const dateTz = new DateTZ({date}); - _this194.dateTz = dateTz; + _this193.dateTz = dateTz; })); }); }); this.is_today = this.isToday(); this.subscription('spaces', this._spaces.listen('list').subscribe(function (spaces) { - var zone_id = !_this194.level ? _this194._org.building.id : _this194.level; - _this194.spaces = _this194._spaces.filter(function (_) { + var zone_id = !_this193.level ? _this193._org.building.id : _this193.level; + _this193.spaces = _this193._spaces.filter(function (_) { return _.zones.indexOf(zone_id) >= 0; }); - _this194.init(); + _this193.init(); - _this194.initSpaces(); // Update time + _this193.initSpaces(); // Update time - _this194.updateTime(); + _this193.updateTime(); })); } }, { @@ -48604,17 +49226,17 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "init", value: function init() { - var _this195 = this; + var _this194 = this; this._service.title = 'Day View'; this.subscription('viewing', this._service.listen('CONCIERGE.day_view.viewing').subscribe(function (event) { - return _this195.scrollIntoView(event); + return _this194.scrollIntoView(event); })); // Subscribe to route query changes this.subscription('route.query', this._route.queryParamMap.subscribe(function (params) { /* istanbul ignore else */ if (params.has('view') || localStorage.getItem('CONCIERGE.view_booking')) { - _this195.view_id = params.get('view'); + _this194.view_id = params.get('view'); var details = localStorage.getItem('CONCIERGE.view_booking'); var spaceJson = localStorage.getItem('CONCIERGE.view_booking_space'); /* istanbul ignore else */ @@ -48625,8 +49247,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons room: space })); - if (!_this195.modalInitialized) { - _this195.modalInitialized = true; // this.view(booking, space); + if (!_this194.modalInitialized) { + _this194.modalInitialized = true; // this.view(booking, space); localStorage.removeItem('CONCIERGE.view_booking'); localStorage.removeItem('CONCIERGE.view_booking_space'); @@ -48659,13 +49281,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var blocks = []; var date = date_tz_1.DateNow(new Date()).startOfValue('hour'); - for (var _i20 = 0; _i20 < 24; _i20++) { + for (var _i21 = 0; _i21 < 24; _i21++) { blocks.push({ id: date.setValue({ - hour: _i20 + hour: _i21 }).formatDate('HH:mm'), name: date.setValue({ - hour: _i20 + hour: _i21 }).formatDate('h:mma').toLocaleLowerCase() }); } @@ -48697,7 +49319,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "scrollIntoView", value: function scrollIntoView(searchData) { - var _this196 = this; + var _this195 = this; var _a; @@ -48737,8 +49359,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons behavior: 'smooth' }); this.timeoutID = setTimeout(function () { - element && _this196._renderer.removeClass(element, 'wild'); - _this196.bookingEl && _this196._renderer.removeClass(_this196.bookingEl, 'wild'); + element && _this195._renderer.removeClass(element, 'wild'); + _this195.bookingEl && _this195._renderer.removeClass(_this195.bookingEl, 'wild'); }, 3000); } } @@ -48811,11 +49433,11 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "initSpaces", value: function initSpaces() { - var _this197 = this; + var _this196 = this; var holding_bay = this.holding_bay; this.filtered_spaces = this.spaces.filter(function (i) { - return (!_this197.space_type || i.zones.indexOf(_this197.space_type) >= 0) && (!holding_bay || i.id !== holding_bay.id) && i.bookable; + return (!_this196.space_type || i.zones.indexOf(_this196.space_type) >= 0) && (!holding_bay || i.id !== holding_bay.id) && i.bookable; }); this.filtered_spaces.sort(function (a, b) { return a.local_name.localeCompare(b.local_name); @@ -49068,6 +49690,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons /*! @mckinsey-converge/data-common */ "../../libs/data-common/src/index.ts"); + var date_tz_1 = __webpack_require__( + /*! @mckinsey-converge/date-tz */ + "../../libs/date-tz/src/index.ts"); + var i0 = __webpack_require__( /*! @angular/core */ "../../node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); @@ -49093,10 +49719,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons "../../node_modules/ngx-skeleton-loader/__ivy_ngcc__/fesm2015/ngx-skeleton-loader.js"); var i6 = __webpack_require__( + /*! ../../../../../../libs/ui/src/lib/tooltip/tooltip.directive */ + "../../libs/ui/src/lib/tooltip/tooltip.directive.ts"); + + var i7 = __webpack_require__( /*! @angular/material/button */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/button.js"); - var i7 = __webpack_require__( + var i8 = __webpack_require__( /*! ../catering/order-table/order-table.component */ "./src/app/booking/catering/order-table/order-table.component.ts"); @@ -49228,12 +49858,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } } - function BookingConfirmationComponent_div_0_ng_container_12_div_2_span_4_Template(rf, ctx) { + function BookingConfirmationComponent_div_0_ng_container_12_div_2_span_5_Template(rf, ctx) { if (rf & 1) { var _r24 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "span", 23); - i0.ɵɵlistener("click", function BookingConfirmationComponent_div_0_ng_container_12_div_2_span_4_Template_span_click_0_listener() { + i0.ɵɵelementStart(0, "span", 24); + i0.ɵɵlistener("click", function BookingConfirmationComponent_div_0_ng_container_12_div_2_span_5_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r24); var ctx_r23 = i0.ɵɵnextContext(4); return ctx_r23.data == null ? null : ctx_r23.data.openRecurrenceConflictsModal(ctx_r23.booking == null ? null : ctx_r23.booking.room); @@ -49254,33 +49884,37 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (rf & 1) { i0.ɵɵelementStart(0, "div", 10); i0.ɵɵelementStart(1, "div", 21); - i0.ɵɵtext(2); - i0.ɵɵpipe(3, "titlecase"); - i0.ɵɵtemplate(4, BookingConfirmationComponent_div_0_ng_container_12_div_2_span_4_Template, 2, 1, "span", 22); + i0.ɵɵelementStart(2, "span", 22); + i0.ɵɵtext(3); + i0.ɵɵpipe(4, "titlecase"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(5, "div"); - i0.ɵɵtext(6); + i0.ɵɵtemplate(5, BookingConfirmationComponent_div_0_ng_container_12_div_2_span_5_Template, 2, 1, "span", 23); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(7, "div"); - i0.ɵɵtext(8); + i0.ɵɵelementStart(6, "div"); + i0.ɵɵtext(7); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(9, "div"); - i0.ɵɵtext(10); + i0.ɵɵelementStart(8, "div"); + i0.ɵɵtext(9); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(11, "div"); - i0.ɵɵtext(12); + i0.ɵɵelementStart(10, "div"); + i0.ɵɵtext(11); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(12, "div"); + i0.ɵɵtext(13); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { var ctx_r20 = i0.ɵɵnextContext(3); - var tmp_1_0 = null; - var currVal_1 = ctx_r20.data == null ? null : (tmp_1_0 = ctx_r20.data.isConflictWithOccurences()) == null ? null : tmp_1_0.is_conflict; + var tmp_2_0 = null; + var currVal_2 = ctx_r20.data == null ? null : (tmp_2_0 = ctx_r20.data.isConflictWithOccurences()) == null ? null : tmp_2_0.is_conflict; i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("", (ctx_r20.booking == null ? null : ctx_r20.booking.recurrence_period) === "list" ? "Specific dates" : i0.ɵɵpipeBind1(3, 7, ctx_r20.booking == null ? null : ctx_r20.booking.recurrence_period), " "); + i0.ɵɵproperty("tooltip", ctx_r20.getTooltipText()); + i0.ɵɵadvance(1); + i0.ɵɵtextInterpolate1(" ", (ctx_r20.booking == null ? null : ctx_r20.booking.recurrence_period) === "list" ? "Specific dates" : i0.ɵɵpipeBind1(4, 8, ctx_r20.booking == null ? null : ctx_r20.booking.recurrence_period), " "); i0.ɵɵadvance(2); - i0.ɵɵproperty("ngIf", currVal_1); + i0.ɵɵproperty("ngIf", currVal_2); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate1("Start date: ", ctx_r20.data == null ? null : ctx_r20.data.dateString, ""); i0.ɵɵadvance(2); @@ -49296,7 +49930,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (rf & 1) { i0.ɵɵelementContainerStart(0); i0.ɵɵtemplate(1, BookingConfirmationComponent_div_0_ng_container_12_div_1_Template, 8, 5, "div", 18); - i0.ɵɵtemplate(2, BookingConfirmationComponent_div_0_ng_container_12_div_2_Template, 13, 9, "div", 18); + i0.ɵɵtemplate(2, BookingConfirmationComponent_div_0_ng_container_12_div_2_Template, 14, 10, "div", 18); i0.ɵɵelementContainerEnd(); } @@ -49312,18 +49946,18 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons function BookingConfirmationComponent_div_0_ng_container_13_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); - i0.ɵɵelementStart(1, "div", 24); + i0.ɵɵelementStart(1, "div", 25); i0.ɵɵelementStart(2, "div"); - i0.ɵɵelement(3, "ngx-skeleton-loader", 25); + i0.ɵɵelement(3, "ngx-skeleton-loader", 26); i0.ɵɵelementEnd(); i0.ɵɵelementStart(4, "div"); - i0.ɵɵelement(5, "ngx-skeleton-loader", 26); + i0.ɵɵelement(5, "ngx-skeleton-loader", 27); i0.ɵɵelementEnd(); - i0.ɵɵelement(6, "div", 27); + i0.ɵɵelement(6, "div", 28); i0.ɵɵelementStart(7, "div"); - i0.ɵɵelement(8, "ngx-skeleton-loader", 28); - i0.ɵɵelement(9, "ngx-skeleton-loader", 29); - i0.ɵɵelement(10, "ngx-skeleton-loader", 28); + i0.ɵɵelement(8, "ngx-skeleton-loader", 29); + i0.ɵɵelement(9, "ngx-skeleton-loader", 30); + i0.ɵɵelement(10, "ngx-skeleton-loader", 29); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); i0.ɵɵelementContainerEnd(); @@ -49359,11 +49993,11 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons function BookingConfirmationComponent_div_0_ng_container_16_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); - i0.ɵɵelement(1, "div", 30); - i0.ɵɵelement(2, "ngx-skeleton-loader", 29); - i0.ɵɵelement(3, "ngx-skeleton-loader", 28); - i0.ɵɵelement(4, "ngx-skeleton-loader", 28); - i0.ɵɵelement(5, "ngx-skeleton-loader", 28); + i0.ɵɵelement(1, "div", 31); + i0.ɵɵelement(2, "ngx-skeleton-loader", 30); + i0.ɵɵelement(3, "ngx-skeleton-loader", 29); + i0.ɵɵelement(4, "ngx-skeleton-loader", 29); + i0.ɵɵelement(5, "ngx-skeleton-loader", 29); i0.ɵɵelementContainerEnd(); } } @@ -49372,7 +50006,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (rf & 1) { i0.ɵɵelementContainerStart(0); i0.ɵɵelementStart(1, "div"); - i0.ɵɵelement(2, "img", 31); + i0.ɵɵelement(2, "img", 32); i0.ɵɵelementStart(3, "p"); i0.ɵɵtext(4); i0.ɵɵelementEnd(); @@ -49393,9 +50027,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (rf & 1) { i0.ɵɵelementContainerStart(0); i0.ɵɵelementStart(1, "div"); - i0.ɵɵelement(2, "ngx-skeleton-loader", 25); + i0.ɵɵelement(2, "ngx-skeleton-loader", 26); i0.ɵɵelementStart(3, "p"); - i0.ɵɵelement(4, "ngx-skeleton-loader", 25); + i0.ɵɵelement(4, "ngx-skeleton-loader", 26); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); i0.ɵɵelementContainerEnd(); @@ -49490,24 +50124,24 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (rf & 1) { i0.ɵɵelementContainerStart(0); i0.ɵɵelementStart(1, "p"); - i0.ɵɵelement(2, "ngx-skeleton-loader", 28); + i0.ɵɵelement(2, "ngx-skeleton-loader", 29); i0.ɵɵelementEnd(); i0.ɵɵelementStart(3, "p"); - i0.ɵɵelement(4, "ngx-skeleton-loader", 28); + i0.ɵɵelement(4, "ngx-skeleton-loader", 29); i0.ɵɵelementEnd(); i0.ɵɵelementStart(5, "p"); - i0.ɵɵelement(6, "ngx-skeleton-loader", 28); + i0.ɵɵelement(6, "ngx-skeleton-loader", 29); i0.ɵɵelementEnd(); i0.ɵɵelementStart(7, "p"); - i0.ɵɵelement(8, "ngx-skeleton-loader", 26); + i0.ɵɵelement(8, "ngx-skeleton-loader", 27); i0.ɵɵelementEnd(); i0.ɵɵelementStart(9, "p"); - i0.ɵɵelement(10, "ngx-skeleton-loader", 26); + i0.ɵɵelement(10, "ngx-skeleton-loader", 27); i0.ɵɵelementEnd(); i0.ɵɵelementStart(11, "p"); - i0.ɵɵelement(12, "ngx-skeleton-loader", 28); - i0.ɵɵelement(13, "ngx-skeleton-loader", 29); - i0.ɵɵelement(14, "ngx-skeleton-loader", 26); + i0.ɵɵelement(12, "ngx-skeleton-loader", 29); + i0.ɵɵelement(13, "ngx-skeleton-loader", 30); + i0.ɵɵelement(14, "ngx-skeleton-loader", 27); i0.ɵɵelementEnd(); i0.ɵɵelementContainerEnd(); } @@ -49517,13 +50151,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (rf & 1) { var _r32 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div", 34); + i0.ɵɵelementStart(0, "div", 35); i0.ɵɵelementStart(1, "div"); i0.ɵɵelementStart(2, "h2"); - i0.ɵɵelement(3, "img", 35); + i0.ɵɵelement(3, "img", 36); i0.ɵɵtext(4, " Catering is available for this meeting room"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(5, "button", 36); + i0.ɵɵelementStart(5, "button", 37); i0.ɵɵlistener("click", function BookingConfirmationComponent_div_0_div_21_div_4_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r32); var ctx_r31 = i0.ɵɵnextContext(3); @@ -49533,7 +50167,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons i0.ɵɵtext(7, "Add catering"); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); - i0.ɵɵelement(8, "catering-order-table", 37); + i0.ɵɵelement(8, "catering-order-table", 38); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } @@ -49550,19 +50184,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons function BookingConfirmationComponent_div_0_div_21_div_5_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 38); + i0.ɵɵelementStart(0, "div", 39); i0.ɵɵelementStart(1, "div"); - i0.ɵɵelement(2, "ngx-skeleton-loader", 39); + i0.ɵɵelement(2, "ngx-skeleton-loader", 40); i0.ɵɵelementStart(3, "h2"); - i0.ɵɵelement(4, "ngx-skeleton-loader", 40); + i0.ɵɵelement(4, "ngx-skeleton-loader", 41); i0.ɵɵelementEnd(); i0.ɵɵelementStart(5, "h2"); - i0.ɵɵelement(6, "ngx-skeleton-loader", 40); + i0.ɵɵelement(6, "ngx-skeleton-loader", 41); i0.ɵɵelementEnd(); i0.ɵɵelementStart(7, "p"); i0.ɵɵtext(8, "\xA0"); i0.ɵɵelementEnd(); - i0.ɵɵelement(9, "ngx-skeleton-loader", 41); + i0.ɵɵelement(9, "ngx-skeleton-loader", 42); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } @@ -49575,8 +50209,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons i0.ɵɵtemplate(2, BookingConfirmationComponent_div_0_div_21_ng_container_2_Template, 23, 7, "ng-container", 8); i0.ɵɵtemplate(3, BookingConfirmationComponent_div_0_div_21_ng_container_3_Template, 15, 0, "ng-container", 8); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(4, BookingConfirmationComponent_div_0_div_21_div_4_Template, 9, 4, "div", 32); - i0.ɵɵtemplate(5, BookingConfirmationComponent_div_0_div_21_div_5_Template, 10, 0, "div", 33); + i0.ɵɵtemplate(4, BookingConfirmationComponent_div_0_div_21_div_4_Template, 9, 4, "div", 33); + i0.ɵɵtemplate(5, BookingConfirmationComponent_div_0_div_21_div_5_Template, 10, 0, "div", 34); i0.ɵɵelementEnd(); } @@ -49595,7 +50229,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons function BookingConfirmationComponent_div_0_div_22_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 42); + i0.ɵɵelementStart(0, "div", 43); i0.ɵɵelementStart(1, "h2"); i0.ɵɵtext(2, "Ooops - we're sorry!"); i0.ɵɵelementEnd(); @@ -49615,7 +50249,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons i0.ɵɵelementContainerStart(0); i0.ɵɵelementStart(1, "div"); - i0.ɵɵelementStart(2, "button", 43); + i0.ɵɵelementStart(2, "button", 44); i0.ɵɵlistener("click", function BookingConfirmationComponent_div_0_ng_container_24_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r34); var ctx_r33 = i0.ɵɵnextContext(2); @@ -49637,13 +50271,25 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons function BookingConfirmationComponent_div_0_ng_container_25_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); - i0.ɵɵelementStart(1, "div", 24); - i0.ɵɵelement(2, "ngx-skeleton-loader", 44); + i0.ɵɵelementStart(1, "div", 25); + i0.ɵɵelement(2, "ngx-skeleton-loader", 45); i0.ɵɵelementEnd(); i0.ɵɵelementContainerEnd(); } } + var _c0 = function _c0(a0) { + return { + "fixed": a0 + }; + }; + + var _c1 = function _c1(a0) { + return { + "padding-100": a0 + }; + }; + function BookingConfirmationComponent_div_0_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 1); @@ -49689,8 +50335,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (rf & 2) { var ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx_r0.hasData()); - i0.ɵɵadvance(5); + i0.ɵɵproperty("ngIf", ctx_r0.hasData() && !ctx_r0.placeIntoModal); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(25, _c0, !ctx_r0.placeIntoModal)); + i0.ɵɵadvance(3); + i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(27, _c1, !ctx_r0.placeIntoModal)); + i0.ɵɵadvance(1); i0.ɵɵclassProp("skeleton", !ctx_r0.hasData()); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx_r0.hasData()); @@ -49739,20 +50389,26 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super71 = _createSuper(BookingConfirmationComponent); function BookingConfirmationComponent(store, _router) { - var _this198; + var _this197; _classCallCheck(this, BookingConfirmationComponent); - _this198 = _super71.call(this); - _this198.store = store; - _this198._router = _router; + _this197 = _super71.call(this); + _this197.store = store; + _this197._router = _router; /** The theme to use **/ - _this198.mode = TopBarHeaderMode.Light; + _this197.mode = TopBarHeaderMode.Light; + /** + * placeIntoModal: Input decorator indecate as a flag to adapt component design into a dialog modal + * (by hiding header and adjusting height so that fit into a modal) + */ + + _this197.placeIntoModal = false; /** Emitter for close events */ - _this198.callback = new core_1.EventEmitter(); - return _this198; + _this197.callback = new core_1.EventEmitter(); + return _this197; } _createClass(BookingConfirmationComponent, [{ @@ -49803,7 +50459,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons while (1) { switch (_context24.prev = _context24.next) { case 0: - if (!this.modal) { + if (!(this.modal || this.placeIntoModal)) { _context24.next = 6; break; } @@ -49877,6 +50533,25 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons return ((_a = this.data) === null || _a === void 0 ? void 0 : _a.status.text.toLowerCase()) === 'unavailable'; } + }, { + key: "getTooltipText", + value: function getTooltipText() { + var _this198 = this; + + var _a; + + return (_a = this.data.booking.occurrence_details) === null || _a === void 0 ? void 0 : _a.filter(function (ocurrence) { + return ocurrence.id !== _this198.data.booking.id; + }).map(function (item) { + var date = item.start_epoch * 1000; + var specificDates = new date_tz_1.DateTZ({ + date: date, + is_local_tz: false, + building_tz: _this198.data.booking.timezone + }); + return base_1.shorterBuildingDateFormatString(specificDates).slice(3); + }); + } }, { key: "booking", get: function get() { @@ -49970,6 +50645,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons confirmed: "confirmed", loading: "loading", modal: "modal", + placeIntoModal: "placeIntoModal", data: ["dataForConfirmation", "data"] }, outputs: { @@ -49978,19 +50654,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, - consts: [["class", "booking-confirmation mck-row", 4, "ngIf"], [1, "booking-confirmation", "mck-row"], ["class", "header", 4, "ngIf"], [1, "confirm-wrapper"], [1, "mck-column", "mck-center", "results-container", "mck-scroll"], [1, "mck-column", "mck-scroll", "mck-content-expand-width"], [1, "content", "mck-column", "mck-center", "mck-content-body"], [1, "section"], [4, "ngIf"], ["class", "title", 4, "ngIf"], [1, "booking-data"], [1, "details"], ["class", "unavailable-details", 4, "ngIf"], [1, "footer", "mck-column", "mck-center"], [1, "header"], [3, "mode", "backModal", "noSurvey", "closeCallback"], [1, "mck-skeleton-line-1", "header"], [1, "title"], ["class", "booking-data", 4, "ngIf"], ["class", "pb", 4, "ngIf"], [1, "pb"], [1, "rec-details-period"], [3, "click", 4, "ngIf"], [3, "click"], [1, "skeleton"], [1, "mck-skeleton-line-1"], [1, "mck-skeleton-line-50p-thin"], [1, "gap-a"], [1, "mck-skeleton-line-60p-thin"], [1, "mck-skeleton-line-90p-thin"], [1, "gap-b"], [3, "src"], ["class", "catering", 3, "skeleton", 4, "ngIf"], ["class", "catering skeleton", 4, "ngIf"], [1, "catering"], ["src", "assets/icon/catering.svg"], ["mat-stroked-button", "", "color", "primary", 1, "mck-stroked-button", "mck-short", "mck-column", "mck-center", "mck-primary", 3, "disabled", "click"], [3, "booking"], [1, "catering", "skeleton"], [1, "mck-skeleton-checkbox"], [1, "mck-skeleton-line-70p-thin"], [1, "mck-skeleton-load-more-100p"], [1, "unavailable-details"], ["mat-button", "", "color", "primary", 1, "mck-primary-button", 3, "click"], [1, "mck-skeleton-load-more"]], + consts: [["class", "booking-confirmation mck-row", 4, "ngIf"], [1, "booking-confirmation", "mck-row"], ["class", "header", 4, "ngIf"], [1, "confirm-wrapper", 3, "ngClass"], [1, "mck-column", "mck-center", "results-container", "mck-scroll"], [1, "mck-column", "mck-scroll", "mck-content-expand-width"], [1, "content", "mck-column", "mck-center", "mck-content-body", 3, "ngClass"], [1, "section"], [4, "ngIf"], ["class", "title", 4, "ngIf"], [1, "booking-data"], [1, "details"], ["class", "unavailable-details", 4, "ngIf"], [1, "footer", "mck-column", "mck-center"], [1, "header"], [3, "mode", "backModal", "noSurvey", "closeCallback"], [1, "mck-skeleton-line-1", "header"], [1, "title"], ["class", "booking-data", 4, "ngIf"], ["class", "pb", 4, "ngIf"], [1, "pb"], [1, "rec-details-period"], ["trigger", "click", 3, "tooltip"], [3, "click", 4, "ngIf"], [3, "click"], [1, "skeleton"], [1, "mck-skeleton-line-1"], [1, "mck-skeleton-line-50p-thin"], [1, "gap-a"], [1, "mck-skeleton-line-60p-thin"], [1, "mck-skeleton-line-90p-thin"], [1, "gap-b"], [3, "src"], ["class", "catering", 3, "skeleton", 4, "ngIf"], ["class", "catering skeleton", 4, "ngIf"], [1, "catering"], ["src", "assets/icon/catering.svg"], ["mat-stroked-button", "", "color", "primary", 1, "mck-stroked-button", "mck-short", "mck-column", "mck-center", "mck-primary", 3, "disabled", "click"], [3, "booking"], [1, "catering", "skeleton"], [1, "mck-skeleton-checkbox"], [1, "mck-skeleton-line-70p-thin"], [1, "mck-skeleton-load-more-100p"], [1, "unavailable-details"], ["mat-button", "", "color", "primary", 1, "mck-primary-button", 3, "click"], [1, "mck-skeleton-load-more"]], template: function BookingConfirmationComponent_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵtemplate(0, BookingConfirmationComponent_div_0_Template, 26, 23, "div", 0); + i0.ɵɵtemplate(0, BookingConfirmationComponent_div_0_Template, 26, 29, "div", 0); } if (rf & 2) { i0.ɵɵproperty("ngIf", ctx.confirmed || ctx.loading); } }, - directives: [i3.NgIf, i4.TopbarHeaderComponent, i5.NgxSkeletonLoaderComponent, i6.MatButton, i7.OrderTableComponent], + directives: [i3.NgIf, i3.NgClass, i4.TopbarHeaderComponent, i5.NgxSkeletonLoaderComponent, i6.TooltipDirective, i7.MatButton, i8.OrderTableComponent], pipes: [i3.TitleCasePipe], - styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\n\n\n.booking-confirmation[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n display: block;\n z-index: 10;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n padding: 0;\n}\n.confirm-wrapper[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n z-index: 4;\n background-color: #f0f0f0;\n overflow: hidden;\n border: 1px solid #a19f9f;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .gap-a[_ngcontent-%COMP%] {\n height: 14px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .gap-b[_ngcontent-%COMP%] {\n height: 40px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .content[_ngcontent-%COMP%] {\n margin: 0 auto 100px auto;\n padding: 1px 20px 0 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .content[_ngcontent-%COMP%] {\n margin: 0 auto 82px auto;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .content[_ngcontent-%COMP%] {\n margin: 0 auto 82px auto;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .content[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 100%;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] {\n padding: 26px;\n padding-top: 100px;\n font-size: 18px;\n font-weight: 400;\n font-size: 16px;\n color: #333333;\n background-color: #e6e6e6;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section.skeleton[_ngcontent-%COMP%] {\n padding-top: 40px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section.skeleton[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n filter: brightness(95%);\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 32px;\n font-weight: 400;\n margin: 20px 0 20PX 0;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 24px;\n padding-top: 15px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 24px;\n padding-top: 15px;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 500;\n margin: 0;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background-color: #ffffff;\n display: flex;\n flex-wrap: wrap;\n margin: 0 auto;\n box-shadow: 0px 2px 4px rgba(5, 28, 44, 0.2), 0px 0px 1px rgba(5, 28, 44, 0.2);\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex-wrap: wrap-reverse;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex-wrap: wrap-reverse;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .pb[_ngcontent-%COMP%] {\n padding-bottom: 10px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n padding: 20px;\n flex: 3.4;\n line-height: 24px;\n padding-bottom: 15px;\n min-width: 200px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: block;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: block;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .title[_ngcontent-%COMP%] {\n width: 100%;\n flex: none;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .title[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] {\n flex: 1;\n font-size: 18px;\n font-weight: 500;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status.skeleton[_ngcontent-%COMP%] {\n background: #f8f8f8;\n color: #f8f8f8;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n text-align: center;\n margin: auto;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin-bottom: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin-top: 0;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 30px;\n margin-right: 10px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin-top: 0;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 30px;\n margin-right: 10px;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n width: 100%;\n display: block;\n color: #333333;\n margin: 0 0 20px 0;\n font-weight: 400;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] .booking-data[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n font-size: 18px;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] .booking-data[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] .booking-data[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] .booking-data[_ngcontent-%COMP%]:nth-child(2n) {\n margin-bottom: 10px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] .booking-data[_ngcontent-%COMP%] .rec-details-period[_ngcontent-%COMP%] {\n cursor: pointer;\n text-decoration: underline;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] {\n padding-top: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] {\n padding-top: 0;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding: 10px 40px 30px;\n border: 1px solid #e6e6e6;\n background-color: white;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details.skeleton[_ngcontent-%COMP%] {\n padding-top: 30px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details.skeleton[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 9px 0;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details.skeleton[_ngcontent-%COMP%] p[_ngcontent-%COMP%] .loader[_ngcontent-%COMP%] {\n margin-bottom: 5px !important;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 100%;\n max-width: 1024px;\n margin: 0 auto;\n display: flex;\n flex-wrap: wrap;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-weight: 400;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] {\n margin-top: 20px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding: 25px 35px;\n border: 1px solid #E6E6E6;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div.skeleton[_ngcontent-%COMP%] {\n margin-top: 0;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n margin-left: 26px;\n width: 306px;\n position: relative;\n margin-top: 0;\n font-weight: 500;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n position: absolute;\n left: -30px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n width: 100%;\n margin: 0 auto;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] span[_ngcontent-%COMP%], .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] .plus[_ngcontent-%COMP%] {\n color: #1F40E6;\n font-size: 16px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] .plus[_ngcontent-%COMP%] {\n font-size: 26px;\n font-weight: 300;\n position: relative;\n top: 2px;\n padding-left: 3px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%] {\n color: rgba(0, 0, 0, 0.26) !important;\n border: 1px solid #D0D0D0;\n cursor: not-allowed;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%] .mat-button-wrapper[_ngcontent-%COMP%] {\n color: rgba(0, 0, 0, 0.26) !important;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%] .mat-button-wrapper[_ngcontent-%COMP%], .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: rgba(0, 0, 0, 0.26);\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%] .mat-button-wrapper[_ngcontent-%COMP%] span[_ngcontent-%COMP%], .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%] span[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: rgba(0, 0, 0, 0.26);\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering.skeleton[_ngcontent-%COMP%] {\n margin-top: 0;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering.skeleton[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin-bottom: 0px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding: 10px 0;\n margin-bottom: 100px;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .booking-data[_ngcontent-%COMP%] {\n padding: 0 26px;\n min-width: 100%;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] {\n width: 100%;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding: 25px 26px;\n border: none;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 18px;\n width: 100%;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding: 10px 0;\n margin-bottom: 100px;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .booking-data[_ngcontent-%COMP%] {\n padding: 0 26px;\n min-width: 100%;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] {\n width: 100%;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding: 25px 26px;\n border: none;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 18px;\n width: 100%;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .unavailable-details[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n width: 100%;\n font-family: \"McKinsey Sans\";\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .unavailable-details[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n width: 100%;\n font-weight: 500;\n color: #333333;\n font-size: 20px;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .unavailable-details[_ngcontent-%COMP%] {\n padding: 0 26px;\n min-width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .unavailable-details[_ngcontent-%COMP%] {\n padding: 0 26px;\n min-width: 100%;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] {\n position: absolute;\n bottom: 0;\n left: 0;\n padding: 24px 16px;\n border: 1px solid #e6e6e6;\n height: 96px;\n width: 100%;\n background-color: white;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 100%;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%], .confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] .skeleton[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n width: 383px;\n margin: 0 auto;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%], .confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] .skeleton[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%], .confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] .skeleton[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .mck-content-body[_ngcontent-%COMP%] {\n height: calc(100vh - 80px);\n overflow-y: scroll;\n top: 0;\n left: 0;\n padding: 100px 0;\n box-sizing: border-box;\n display: block;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .mck-content-body[_ngcontent-%COMP%] {\n position: fixed;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .mck-content-body[_ngcontent-%COMP%] {\n position: fixed;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNvbmZpcm1hdGlvbi9ib29raW5nLWNvbmZpcm1hdGlvbi5jb21wb25lbnQuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9taXhpbnMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNvbmZpcm1hdGlvbi9ib29raW5nLWNvbmZpcm1hdGlvbi5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNwVUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQzVDQTs7c0JBQUE7QUNWSTtFQUNJLGNBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7RUFDQSxNQUFBO0VBQ0EsT0FBQTtFQUNBLFdBQUE7RUFDQSxVQUFBO0FKOEJSO0FJM0JBO0VBQ0ksZUFBQTtFQUNBLE1BQUE7RUFD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V0FBQTtFSmdHdEI7QUFDRjtBSTFGWTtFQUNJLFdBQUE7RUFDQSw0QkgxTUs7QURzU3JCO0FJMUZZO0VBQ0ksV0FBQTtFQUNBLGdCQUFBO0VBQ0EsY0FBQTtFQUNBLGVBQUE7RUFDQSw0QkhqTks7QUQ2U3JCO0FDMVhZO0VHb1JKO0lBY1EsZUFBQTtJQUNBLGVBQUE7RUo0RmQ7QUFDRjtBQ2hZWTtFR29SSjtJQWNRLGVBQUE7SUFDQSxlQUFBO0VKa0dkO0FBQ0Y7QUk5Rkk7RUFDSSxrQkFBQTtFQUNBLFNBQUE7RUFDQSxPQUFBO0VBQ0Esa0JBQUE7RUFDQSx5QkFBQTtFQUNBLFlBQUE7RUFDQSxXQUFBO0VBQ0EsdUJBQUE7QUpnR1I7QUkvRlE7RUFDSSxXQUFBO0FKaUdaO0FJOUZRO0VBQ0kscUdGNVFVO0VFNlFWLFlBQUE7RUFDQSxjQUFBO0FKZ0daO0FHN1lRO0VDMFNBO0lBS1EsV0FBQTtFSmtHZDtBQUNGO0FHL1lRO0VDdVNBO0lBS1EsV0FBQTtFSnVHZDtBQUNGO0FJbkdJO0VBQ0ksMEJBQUE7RUFDQSxrQkFBQTtFQUNBLE1BQUE7RUFDQSxPQUFBO0VBQ0EsZ0JBQUE7RUFDQSxzQkFBQTtFQUNBLGNBQUE7QUpxR1I7QUMzYVk7RUd5VUo7SUFDSSxlQUFBO0VKcUdWO0FBQ0Y7QUNoYlk7RUd5VUo7SUFDSSxlQUFBO0VKMEdWO0FBQ0YiLCJmaWxlIjoiYXBwcy9zdGFmZi9zcmMvYXBwL2Jvb2tpbmcvYm9va2luZy1jb25maXJtYXRpb24vYm9va2luZy1jb25maXJtYXRpb24uY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIkcHJpbWFyeTogIzFGNDBFNjtcbiRmb3JtLWxhYmVsOiAjMDUxQzJDO1xuJHNlY29uZGFyeS1sYWJlbDogIzc2NzY3NjtcbiRib3JkZXI6ICNCM0IzQjM7XG4kYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDogI0QwRDBEMDtcbiRjaGlwLWNvbG9yOiAjMzMzMzMzO1xuJHBsYWNlaG9sZGVyLWNvbG9yOiAjN0Y3RjdGO1xuJGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4kcGFnZS1iYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuJHNlbGVjdGVkLW9wdGlvbjogI0U2RTZFNjtcbiRjb2xvci1icmFuZC15ZWxsb3c6ICNmZmQwNDg7XG4kbGlnaHQteWVsbG93OiAjZmZmM2NlO1xuJGNvYWNobWFyay10ZXh0OiAjNmY0ZDAwO1xuJGVycm9yLWNvbG9yOiAjRTEyRTQwO1xuJG5vLWZpbHRlcnMtY29sb3I6ICNCQ0JDQkM7XG4kcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I6ICNGNEY0RjQ7XG4kcHJpbWFyeS1oaWdobGlnaHQ6ICMyMjUxRkY7XG4kc2Nyb2xsYmFyLWNvbG9yOiAjNzU3NTc1O1xuXG4kYXZhaWxhYmxlLWNvbG9yOiAjNUQ5RDUyO1xuJGF2YWlsYWJsZS1ieS1yZXF1ZXN0LWNvbG9yOiAjRjVCNTNGO1xuJGluLXVzZS1jb2xvcjogI0Q0NDgzRTtcbiRub3QtYm9va2FibGUtY29sb3I6ICNDQ0NDQ0M7XG5cbiRtb2RhbC1ib2R5LWhlYWRpbmc6ICM0RDRENEQ7XG4kYWxlcnQtb3ZlcmxheS1iZzogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2FjaG1hcmstYmc6ICNFQkVCRjY7XG4kY29hY2htYXJrLWRhcmstdGV4dDogIzFCMUIxOTtcbiRlcnJvci10ZXh0OiAjZmZmO1xuXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuXG4vLyA0cHhcbiRzcGFjaW5nLXNtYWxsZXN0OiAwLjI1cmVtO1xuXG4vLyA4cHhcbiRzcGFjaW5nLXh4c21hbGw6IDAuNXJlbTtcblxuLy8gMTJweFxuJHNwYWNpbmcteHNtYWxsOiAwLjc1cmVtO1xuXG4vLyAxNnB4XG4kc3BhY2luZy1zbWFsbDogMXJlbTtcblxuLy8gMjBweFxuJHNwYWNpbmctc21hbGwtbWVkaXVtOiAxLjI1cmVtO1xuXG4vLyAyNHB4XG4kc3BhY2luZy1tZWRpdW06IDEuNXJlbTtcblxuLy8gMjhweFxuJHNwYWNpbmctbWVkaXVtLWxhcmdlOiAxLjc1cmVtO1xuXG4vLyAzMnB4XG4kc3BhY2luZy1sYXJnZTogMnJlbTtcblxuLy8gNDhweFxuJHNwYWNpbmcteGxhcmdlOiAzcmVtO1xuXG4vLyA2NHB4XG4kc3BhY2luZy14eGxhcmdlOiA0cmVtO1xuXG4vLyA5NnB4XG4kc3BhY2luZy1sYXJnZXN0OiA2cmVtO1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGRldmljZS1tb2JpbGUtc2l6ZTogNDUwcHg7XG4kZGV2aWNlLXRhYmxldC1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFwdG9wLXNpemU6IDEwMjRweDtcblxuJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemU6IDgwMHB4O1xuJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemU6IDEwNDhweDtcbiRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplOiAxMjgwcHg7XG5cblxuOmV4cG9ydCB7XG4gICAgcHJpbWFyeTogJHByaW1hcnk7XG4gICAgc2Vjb25kYXJ5TGFiZWw6ICRzZWNvbmRhcnktbGFiZWw7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4kaWNvbi1zbWFsbDogMTZweDtcbiRpY29uLW1lZGl1bTogMjRweDtcbiRpY29uLWxhcmdlOiAzMnB4O1xuJGljb24teGxhcmdlOiA0OHB4O1xuIiwiLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi5ib29raW5nLWNvbmZpcm1hdGlvbiAuaGVhZGVyIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHotaW5kZXg6IDEwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDA7XG59XG5cbi5jb25maXJtLXdyYXBwZXIge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbiAgei1pbmRleDogNDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYm9yZGVyOiAxcHggc29saWQgI2ExOWY5Zjtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmdhcC1hIHtcbiAgaGVpZ2h0OiAxNHB4O1xufVxuLmNvbmZpcm0td3JhcHBlciAuZ2FwLWIge1xuICBoZWlnaHQ6IDQwcHg7XG59XG4uY29uZmlybS13cmFwcGVyIC5jb250ZW50IHtcbiAgbWFyZ2luOiAwIGF1dG8gMTAwcHggYXV0bztcbiAgcGFkZGluZzogMXB4IDIwcHggMCAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuY29udGVudCB7XG4gICAgbWFyZ2luOiAwIGF1dG8gODJweCBhdXRvO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuY29udGVudCB7XG4gICAgbWFyZ2luOiAwIGF1dG8gODJweCBhdXRvO1xuICB9XG59XG4uY29uZmlybS13cmFwcGVyIC5jb250ZW50ID4gZGl2IHtcbiAgd2lkdGg6IDEwMCU7XG59XG4uY29uZmlybS13cmFwcGVyIC5zZWN0aW9uIHtcbiAgcGFkZGluZzogMjZweDtcbiAgcGFkZGluZy10b3A6IDEwMHB4O1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgY29sb3I6ICMzMzMzMzM7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlNmU2ZTY7XG59XG4uY29uZmlybS13cmFwcGVyIC5zZWN0aW9uLnNrZWxldG9uIHtcbiAgcGFkZGluZy10b3A6IDQwcHg7XG59XG4uY29uZmlybS13cmFwcGVyIC5zZWN0aW9uLnNrZWxldG9uIC5oZWFkZXIge1xuICBmaWx0ZXI6IGJyaWdodG5lc3MoOTUlKTtcbn1cbi5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gaDEge1xuICBmb250LXNpemU6IDMycHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIG1hcmdpbjogMjBweCAwIDIwUFggMDtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiBoMSB7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIHBhZGRpbmctdG9wOiAxNXB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiBoMSB7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIHBhZGRpbmctdG9wOiAxNXB4O1xuICB9XG59XG4uY29uZmlybS13cmFwcGVyIC5zZWN0aW9uIGgyIHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBtYXJnaW46IDA7XG59XG4uY29uZmlybS13cmFwcGVyIC5zZWN0aW9uID4gZGl2IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBtYXJnaW46IDAgYXV0bztcbiAgYm94LXNoYWRvdzogMHB4IDJweCA0cHggcmdiYSg1LCAyOCwgNDQsIDAuMiksIDBweCAwcHggMXB4IHJnYmEoNSwgMjgsIDQ0LCAwLjIpO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiA+IGRpdiB7XG4gICAgZmxleC13cmFwOiB3cmFwLXJldmVyc2U7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuY29uZmlybS13cmFwcGVyIC5zZWN0aW9uID4gZGl2IHtcbiAgICBmbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTtcbiAgfVxufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiA+IGRpdiAucGIge1xuICBwYWRkaW5nLWJvdHRvbTogMTBweDtcbn1cbi5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgPiBkaXYge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIHBhZGRpbmc6IDIwcHg7XG4gIGZsZXg6IDMuNDtcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gIHBhZGRpbmctYm90dG9tOiAxNXB4O1xuICBtaW4td2lkdGg6IDIwMHB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiA+IGRpdiA+IGRpdiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuY29uZmlybS13cmFwcGVyIC5zZWN0aW9uID4gZGl2ID4gZGl2IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiA+IGRpdiA+IGRpdiA+IGRpdiB7XG4gIGZsZXg6IDE7XG59XG4uY29uZmlybS13cmFwcGVyIC5zZWN0aW9uID4gZGl2ID4gZGl2IC50aXRsZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBmbGV4OiBub25lO1xufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiA+IGRpdiA+IGRpdiAudGl0bGUgaDIge1xuICBmb250LXdlaWdodDogNTAwO1xufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiA+IGRpdiAuc3RhdHVzIHtcbiAgZmxleDogMTtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBmb250LXdlaWdodDogNTAwO1xufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiA+IGRpdiAuc3RhdHVzLnNrZWxldG9uIHtcbiAgYmFja2dyb3VuZDogI2Y4ZjhmODtcbiAgY29sb3I6ICNmOGY4Zjg7XG59XG4uY29uZmlybS13cmFwcGVyIC5zZWN0aW9uID4gZGl2IC5zdGF0dXMgPiBkaXYge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG1hcmdpbjogYXV0bztcbn1cbi5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgLnN0YXR1cyA+IGRpdiBwIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgLnN0YXR1cyA+IGRpdiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB9XG4gIC5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgLnN0YXR1cyA+IGRpdiBwIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICB9XG4gIC5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgLnN0YXR1cyA+IGRpdiBpbWcge1xuICAgIHdpZHRoOiAzMHB4O1xuICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgLnN0YXR1cyA+IGRpdiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB9XG4gIC5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgLnN0YXR1cyA+IGRpdiBwIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICB9XG4gIC5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgLnN0YXR1cyA+IGRpdiBpbWcge1xuICAgIHdpZHRoOiAzMHB4O1xuICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgfVxufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiA+IGRpdiBoMiB7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgY29sb3I6ICMzMzMzMzM7XG4gIG1hcmdpbjogMCAwIDIwcHggMDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbi5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gLmJvb2tpbmctZGF0YSA+IGRpdiB7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiAuYm9va2luZy1kYXRhID4gZGl2IHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuY29uZmlybS13cmFwcGVyIC5zZWN0aW9uIC5ib29raW5nLWRhdGEgPiBkaXYge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgfVxufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiAuYm9va2luZy1kYXRhOm50aC1jaGlsZCgybikge1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiAuYm9va2luZy1kYXRhIC5yZWMtZGV0YWlscy1wZXJpb2Qge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiB7XG4gICAgcGFkZGluZy10b3A6IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuY29uZmlybS13cmFwcGVyIC5zZWN0aW9uIHtcbiAgICBwYWRkaW5nLXRvcDogMDtcbiAgfVxufVxuLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyB7XG4gIHBhZGRpbmc6IDEwcHggNDBweCAzMHB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTZlNmU2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMuc2tlbGV0b24ge1xuICBwYWRkaW5nLXRvcDogMzBweDtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMuc2tlbGV0b24gcCB7XG4gIG1hcmdpbjogOXB4IDA7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzLnNrZWxldG9uIHAgLmxvYWRlciB7XG4gIG1hcmdpbi1ib3R0b206IDVweCAhaW1wb3J0YW50O1xufVxuLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyA+IGRpdiB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMjRweDtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgPiBkaXYgPiBkaXYge1xuICBmbGV4OiAxO1xufVxuLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyBsYWJlbCB7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyB7XG4gIG1hcmdpbi10b3A6IDIwcHg7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiB7XG4gIHBhZGRpbmc6IDI1cHggMzVweDtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2LnNrZWxldG9uIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2IGgyIHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBtYXJnaW4tbGVmdDogMjZweDtcbiAgd2lkdGg6IDMwNnB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi10b3A6IDA7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2IGgyIGltZyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogLTMwcHg7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiBidXR0b24ge1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiBidXR0b24gc3BhbiwgLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAuY2F0ZXJpbmcgPiBkaXYgYnV0dG9uIC5wbHVzIHtcbiAgY29sb3I6ICMxRjQwRTY7XG4gIGZvbnQtc2l6ZTogMTZweDtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2IGJ1dHRvbiAucGx1cyB7XG4gIGZvbnQtc2l6ZTogMjZweDtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IDJweDtcbiAgcGFkZGluZy1sZWZ0OiAzcHg7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiBidXR0b25bZGlzYWJsZWRdIHtcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNikgIWltcG9ydGFudDtcbiAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2IGJ1dHRvbltkaXNhYmxlZF0gLm1hdC1idXR0b24td3JhcHBlciB7XG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjYpICFpbXBvcnRhbnQ7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiBidXR0b25bZGlzYWJsZWRdIC5tYXQtYnV0dG9uLXdyYXBwZXIsIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2IGJ1dHRvbltkaXNhYmxlZF0gc3BhbiB7XG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjYpO1xufVxuLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAuY2F0ZXJpbmcgPiBkaXYgYnV0dG9uW2Rpc2FibGVkXSAubWF0LWJ1dHRvbi13cmFwcGVyIHNwYW4sIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2IGJ1dHRvbltkaXNhYmxlZF0gc3BhbiBzcGFuIHtcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNik7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZy5za2VsZXRvbiB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZy5za2VsZXRvbiBoMiB7XG4gIG1hcmdpbi1ib3R0b206IDBweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMge1xuICAgIHBhZGRpbmc6IDEwcHggMDtcbiAgICBtYXJnaW4tYm90dG9tOiAxMDBweDtcbiAgfVxuICAuY29uZmlybS13cmFwcGVyIC5kZXRhaWxzID4gZGl2IC5ib29raW5nLWRhdGEge1xuICAgIHBhZGRpbmc6IDAgMjZweDtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gIH1cbiAgLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAuY2F0ZXJpbmcge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2IHtcbiAgICBwYWRkaW5nOiAyNXB4IDI2cHg7XG4gICAgYm9yZGVyOiBub25lO1xuICB9XG4gIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2IGgyIHtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbiAgLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAuY2F0ZXJpbmcgPiBkaXYgYnV0dG9uIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMge1xuICAgIHBhZGRpbmc6IDEwcHggMDtcbiAgICBtYXJnaW4tYm90dG9tOiAxMDBweDtcbiAgfVxuICAuY29uZmlybS13cmFwcGVyIC5kZXRhaWxzID4gZGl2IC5ib29raW5nLWRhdGEge1xuICAgIHBhZGRpbmc6IDAgMjZweDtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gIH1cbiAgLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAuY2F0ZXJpbmcge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2IHtcbiAgICBwYWRkaW5nOiAyNXB4IDI2cHg7XG4gICAgYm9yZGVyOiBub25lO1xuICB9XG4gIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2IGgyIHtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbiAgLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAuY2F0ZXJpbmcgPiBkaXYgYnV0dG9uIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAudW5hdmFpbGFibGUtZGV0YWlscyBwIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLnVuYXZhaWxhYmxlLWRldGFpbHMgaDIge1xuICB3aWR0aDogMTAwJTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6ICMzMzMzMzM7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAudW5hdmFpbGFibGUtZGV0YWlscyB7XG4gICAgcGFkZGluZzogMCAyNnB4O1xuICAgIG1pbi13aWR0aDogMTAwJTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLnVuYXZhaWxhYmxlLWRldGFpbHMge1xuICAgIHBhZGRpbmc6IDAgMjZweDtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gIH1cbn1cbi5jb25maXJtLXdyYXBwZXIgLmZvb3RlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICBwYWRkaW5nOiAyNHB4IDE2cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNmU2ZTY7XG4gIGhlaWdodDogOTZweDtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xufVxuLmNvbmZpcm0td3JhcHBlciAuZm9vdGVyID4gZGl2IHtcbiAgd2lkdGg6IDEwMCU7XG59XG4uY29uZmlybS13cmFwcGVyIC5mb290ZXIgYnV0dG9uLCAuY29uZmlybS13cmFwcGVyIC5mb290ZXIgLnNrZWxldG9uIHtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuICB3aWR0aDogMzgzcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuZm9vdGVyIGJ1dHRvbiwgLmNvbmZpcm0td3JhcHBlciAuZm9vdGVyIC5za2VsZXRvbiB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuY29uZmlybS13cmFwcGVyIC5mb290ZXIgYnV0dG9uLCAuY29uZmlybS13cmFwcGVyIC5mb290ZXIgLnNrZWxldG9uIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuLmNvbmZpcm0td3JhcHBlciAubWNrLWNvbnRlbnQtYm9keSB7XG4gIGhlaWdodDogY2FsYygxMDB2aCAtIDgwcHgpO1xuICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgcGFkZGluZzogMTAwcHggMDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuY29uZmlybS13cmFwcGVyIC5tY2stY29udGVudC1ib2R5IHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuY29uZmlybS13cmFwcGVyIC5tY2stY29udGVudC1ib2R5IHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gIH1cbn0iLCJAaW1wb3J0IFwidmFyc1wiO1xuXG5AbWl4aW4gcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkc2l6ZSwgJHF1YWxpZmllcikge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQGlmICgkcXVhbGlmaWVyID09IG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2UgaWYgKCRxdWFsaWZpZXIgPT0gbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1heC13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuQG1peGluIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkbWluLCAkbWF4KSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyB0aGlzIGlzIGEgY29weSBvZiByZXNwb25kLXRvLiB3ZSBkb24ndCB3YW50IHRvIHByZXNlcnZlIHRoYXQgbWV0aG9kIHNpbmNlIHRoZSBicmVha3BvaW50cyBtYXkgZGl2ZXJnZSBmcm9tIHRoZSBvbGQgVUkuXG5AbWl4aW4gaXMtc2NyZWVuLXNpemUoJG1lZGlhOiBhbGwsICRvcmllbnRhdGlvbjogbm9uZSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5cbkBtaXhpbiBwYWdlLXBhZGRpbmcge1xuICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctc21hbGw7XG4gICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctc21hbGw7XG59XG5cbi8vIEZvbnQgTWl4aW5zXG4kZm9udC1tY2tpbnNleS1zYW5zOiBcIk1jS2luc2V5IFNhbnNcIjtcbiRmb250LXRoZWluaGFyZHQ6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuJGZvbnQtYm93ZXI6IFwiQm93ZXJcIjtcblxuQG1peGluIGJvd2VyLWJvbGQge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1ib3dlcjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gbWNraW5zZXktc2FucyB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIGRpc3BsYXktMSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNHJlbTsgLy8gNjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODc7IC8vIDc2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTIge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTMge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2MHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNCB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDNyZW07IC8vIDQ4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNjY7IC8vIDU2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjRweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMwcHhcbiAgICBsaW5lLWhlaWdodDogMS44MzM7IC8vIDM0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY0MjsgLy8gNDBweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0xIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNDhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNzVyZW07IC8vIDQ0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA1MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0yIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjExMTsgLy8gNDRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDQ4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTMge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMjI7IC8vIDQ0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTUge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTYge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTU7IC8vIDI4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBib2R5LWRlZmF1bHQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjZweFxuICAgIH1cbn1cblxuLy8vIERvZXNudCBleGlzdCBpbiBNRFMuXG5AbWl4aW4gYm9keS10aW55IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTsgLy8gMTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDIwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBmb3JtLWxhYmVsIHtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC10aGVpbmhhcmR0O1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBjb2xvcjogJHBsYWNlaG9sZGVyLWNvbG9yO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG59XG5cbkBtaXhpbiBjaGlwLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gY2hlY2tib3gtbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICBjb2xvcjogYmxhY2s7XG59XG5cbi8vIGJvcmRlcnNcblxuQG1peGluIG1jay1jaGVja2JveC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stdGhpbi1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYm9yZGVyLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQtbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlci1saWdodDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cblxuLy8gZnVuY3Rpb25zXG5cbi8qKlxuICogTWFrZXMgdGV4dCBoYXZlIG1heGltdW0gbGluZXMgd2l0aCBlbGxpcHNpcy4gV29ya3Mgb24gbW9zdCBtb2Rlcm4gYnJvd3NlcnMgZXhjZXB0XG4gKiBvZiBGaXJlZm94Li5cbiAqL1xuQG1peGluIG1heC1saW5lcygkY291bnQpIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIC13ZWJraXQtbGluZS1jbGFtcDogJGNvdW50O1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG59XG5cbi8vIGltYWdlc1xuQG1peGluIG1jay1pY29uKCR3aWR0aCwgJGFzc2V0LCAkaGVpZ2h0OiAkd2lkdGgsICAkYXNzZXRQYXRoOiBcImxpYnMvdWkvc3JjL2xpYi9pY29uc1wiLCkge1xuICAgIHdpZHRoOiAkd2lkdGg7XG4gICAgaGVpZ2h0OiAkaGVpZ2h0O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiN7JGFzc2V0UGF0aH0vI3skYXNzZXR9XCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbn1cblxuXG5AbWl4aW4gbWNrLXNtYWxsLWljb24oJG1vYmlsZS1hc3NldCwgJGRlc2t0b3AtYXNzZXQ6ICRtb2JpbGUtYXNzZXQpIHtcbiAgICBAaW5jbHVkZSBtY2staWNvbigxNnB4LCAkYXNzZXQ6ICRtb2JpbGUtYXNzZXQpO1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBAaW5jbHVkZSBtY2staWNvbigyNHB4LCAkYXNzZXQ6ICRkZXNrdG9wLWFzc2V0KTtcbiAgICB9XG59XG5cbi8vIHNrZWxldG9uXG5AbWl4aW4gc2tlbGV0b24tYmcge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1pbWFnZS1zaXplIHtcbiAgICB3aWR0aDogODFweDtcbiAgICBoZWlnaHQ6IDgycHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAyMTlweDtcbiAgICAgICAgaGVpZ2h0OiAxMTlweDtcbiAgICB9XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1zdGF0dXMtc2l6ZSB7XG4gICAgd2lkdGg6IDExN3B4O1xuICAgIGhlaWdodDogNzhweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDExN3B4O1xuICAgICAgICBoZWlnaHQ6IDc4cHg7XG4gICAgfVxufVxuIiwiLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kY29sb3ItYnJhbmQtZWxlY3RyaWMtYmx1ZTogIzIyNTFmZjtcbiRjb2xvci1icmFuZC1kZWVwLWJsdWU6ICMwNTFjMmM7XG4kY29sb3ItYnJhbmQtY3lhbjogIzAwYTlmNDtcblxuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRmb250LWRhcms6ICMwMDA7XG4kZm9udC1saWdodDogI2ZmZjtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG4kZ3JlZW4xOiAjMjE5NjUzO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvbG9yLXByaW1hcnk6ICMxOTM3ZWE7XG4kY29sb3ItcHJpbWFyeS1saWdodDogbGlnaHRlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuJGNvbG9yLXByaW1hcnktZGFyazogZGFya2VuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG5cbiRjb2xvci1zZWNvbmRhcnk6ICM0Mjg1RjQ7XG4kY29sb3Itc2Vjb25kYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcbiRjb2xvci1zZWNvbmRhcnktZGFyazogZGFya2VuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcblxuJGJhY2tncm91bmQ6ICNmMGYwZjA7XG4kZm9vdGVyLWJhY2s6ICMyNjMyMzg7XG4kaGVhZGVyLWJhY2s6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzA1MUMyQywgIzA1MUMyQyA0MCUsICMwQjI0NTMgNjAlLCAjMUY0MEU2IDEwMCUpO1xuXG4kY29sb3ItdGVybmFyeTogIzA1MWMyYztcblxuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG5cbiRmb250LXN0YWNrOiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcblxuJGhlYWRpbmctZm9udDogXCJMYXJpc2hNY0tpbnNleVwiLCAnR2VvcmdpYScsIHNlcmlmO1xuJGZvbnQ6ICRmb250LXN0YWNrO1xuXG4kZm9udC1mYW1pbHktcHJpbWFyeTogXCJNY0tpbnNleSBTYW5zXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQ2FsaWJyaSwgQ29yYmVsLCBIZWx2ZXRpY2EsIFJvYm90bywgRHJvaWQsIHNhbnMtc2VyaWY7XG4kZm9udC1mYW1pbHktc2Vjb25kYXJ5OiBcIkJvd2VyXCIsIEdlb3JnaWEsIFwiVGltZXMgTmV3IFJvbWFuXCIgc2VyaWY7XG5cbiRiYXNlLXNpemU6IDE2cHg7XG4kdGFibGV0LXNpemU6IDE2cHg7XG4kbW9iaWxlLXNpemU6IDE2cHg7XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kYnJlYWstbW9iaWxlOiA0NTBweDtcbiRicmVhay10YWJsZXQ6IDgwMHB4O1xuJGJyZWFrLWxhcHRvcDogMTAyNHB4O1xuXG4kYnJlYWstbGFuZHNjYXBlLW1vYmlsZTogODAwcHg7XG4kYnJlYWstbGFuZHNjYXBlLXRhYmxldDogMTA0OHB4O1xuJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3A6IDEyODBweDtcbiIsIkBpbXBvcnQgJy4vdmFyaWFibGVzJztcblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5AbWl4aW4gYm94LXNoYWRvdygkY29sb3I6ICMwMDAsICRkZXB0aDogMSkge1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCAxcHggKiAoJGRlcHRoIC0gMSkgcmdiYSgjMDAwLCAuMiksXG4gICAgICAgICAgICAgICAgMCAxcHggMXB4IDAgcmdiYSgjMDAwLCAuMTQpLFxuICAgICAgICAgICAgICAgIDAgMnB4IDFweCAtMXB4IHJnYmEoIzAwMCwgLjEyKTtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbkBtaXhpbiByZXNwb25kLXRvKCRtZWRpYSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSAgQGVsc2UgaWYgJG1lZGlhID09IGxhdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfUBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJAaW1wb3J0ICdsaWJzL3VpL3NyYy9saWIvbWl4aW5zJztcbkBpbXBvcnQgJ21peGlucyc7XG5cbi5ib29raW5nLWNvbmZpcm1hdGlvbiB7XG4gICAgLmhlYWRlciB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB6LWluZGV4OiAxMDtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgIH0gIFxufVxuLmNvbmZpcm0td3JhcHBlciB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICB6LWluZGV4OiA0O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjYTE5ZjlmO1xuXG4gICAgLmdhcCB7XG4gICAgICAgICYtYSB7XG4gICAgICAgICAgICBoZWlnaHQ6IDE0cHg7XG4gICAgICAgIH1cbiAgICAgICAgJi1iIHtcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5jb250ZW50IHtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG8gMTAwcHggYXV0bztcbiAgICAgICAgcGFkZGluZzogMXB4IDIwcHggMCAwO1xuICAgICAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG8gODJweCBhdXRvO1xuICAgICAgICB9XG4gICAgICAgID4gZGl2IHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLnNlY3Rpb24ge1xuICAgICAgICBwYWRkaW5nOiAyNnB4O1xuICAgICAgICBwYWRkaW5nLXRvcDogMTAwcHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjtcbiAgICAgICAgJi5za2VsZXRvbiB7XG4gICAgICAgICAgICBwYWRkaW5nLXRvcDogNDBweDtcbiAgICAgICAgICAgIC5oZWFkZXIge1xuICAgICAgICAgICAgICAgIGZpbHRlcjogYnJpZ2h0bmVzcyg5NSUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGgxIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMzJweDtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgICBtYXJnaW46IDIwcHggMCAyMFBYIDA7XG4gICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtc3RhY2s7XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDI0cHg7XG4gICAgICAgICAgICAgICAgcGFkZGluZy10b3A6IDE1cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaDIge1xuICAgICAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgfVxuICAgICAgICA+IGRpdiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgICAgICAgYm94LXNoYWRvdzogMHB4IDJweCA0cHggcmdiYSg1LCAyOCwgNDQsIDAuMiksIDBweCAwcHggMXB4IHJnYmEoNSwgMjgsIDQ0LCAwLjIpO1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLnBiIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTBweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgID4gZGl2IHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAyMHB4O1xuICAgICAgICAgICAgICAgIGZsZXg6IDMuNDtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMjRweDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTVweDtcbiAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDIwMHB4O1xuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgID4gZGl2IHtcbiAgICAgICAgICAgICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLnRpdGxlIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgIGZsZXg6IG5vbmU7XG5cbiAgICAgICAgICAgICAgICAgICAgaDJ7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLnN0YXR1cyB7XG4gICAgICAgICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgICAgICAgICAmLnNrZWxldG9uIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2Y4ZjhmODtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICNmOGY4Zjg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID4gZGl2IHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IGF1dG87XG4gICAgICAgICAgICAgICAgICAgIHAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaW1ne1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGgyIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgICAgICAgICAgICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5ib29raW5nLWRhdGF7IFxuICAgICAgICAgICAgPmRpdiB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktcHJpbWFyeTtcblxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmOm50aC1jaGlsZCgybikge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAucmVjLWRldGFpbHMtcGVyaW9kIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgcGFkZGluZy10b3A6IDA7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC5kZXRhaWxzIHtcbiAgICAgICAgcGFkZGluZzogMTBweCA0MHB4IDMwcHg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlNmU2ZTY7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICAmLnNrZWxldG9uIHtcbiAgICAgICAgICAgIHBhZGRpbmctdG9wOiAzMHB4O1xuICAgICAgICAgICAgcCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiA5cHggMDtcbiAgICAgICAgICAgICAgICAubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgID4gZGl2IHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gICAgICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICAgICAgICA+IGRpdiB7XG4gICAgICAgICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsYWJlbCB7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICB9XG4gICAgICAgIC5jYXRlcmluZyB7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAyMHB4O1xuICAgICAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDI1cHggMzVweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICAgICAgICAgICAgICAgICYuc2tlbGV0b24ge1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoMiB7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDI2cHg7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMDZweDtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LXByaW1hcnk7XG4gICAgICAgICAgICAgICAgICAgIGltZyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiAtMzBweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBidXR0b24ge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICAgICAgICAgIHNwYW4sIC5wbHVzIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAucGx1cyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDI2cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogMzAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiAycHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDNweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAmW2Rpc2FibGVkXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI2KSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI2KSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hdC1idXR0b24td3JhcHBlciwgc3BhbiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhbiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYuc2tlbGV0b24ge1xuICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgICAgICAgICAgaDIge1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwcHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICBwYWRkaW5nOiAxMHB4IDA7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMDBweDtcblxuICAgICAgICAgICAgPiBkaXYgLmJvb2tpbmctZGF0YXsgXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAgMjZweDtcbiAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuY2F0ZXJpbmcge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgID4gZGl2IHtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMjVweCAyNnB4O1xuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IG5vbmU7XG5cbiAgICAgICAgICAgICAgICAgICAgaDIge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlOyAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC51bmF2YWlsYWJsZS1kZXRhaWxze1xuICAgICAgICAgICAgcCB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoMiB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAgMjZweDtcbiAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuZm9vdGVyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHBhZGRpbmc6IDI0cHggMTZweDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2U2ZTZlNjtcbiAgICAgICAgaGVpZ2h0OiA5NnB4O1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgID4gZGl2IHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG4gICAgICAgXG4gICAgICAgIGJ1dHRvbiwgLnNrZWxldG9uIHtcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktcHJpbWFyeTtcbiAgICAgICAgICAgIHdpZHRoOiAzODNweDtcbiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgICAgICAgQGluY2x1ZGUgcmVzcG9uZC10byhtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5tY2stY29udGVudC1ib2R5e1xuICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwdmggLSA4MHB4KTtcbiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHBhZGRpbmc6IDEwMHB4IDA7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgLm1jay1jb250ZW50LWJvZHl7XG4gICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG59XG4iXX0= */"] + styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\n\n\n.booking-confirmation[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n display: block;\n z-index: 10;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n padding: 0;\n}\n.confirm-wrapper[_ngcontent-%COMP%] {\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n z-index: 4;\n background-color: #f0f0f0;\n overflow: hidden;\n border: 1px solid #a19f9f;\n}\n.confirm-wrapper.fixed[_ngcontent-%COMP%] {\n position: fixed;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .gap-a[_ngcontent-%COMP%] {\n height: 14px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .gap-b[_ngcontent-%COMP%] {\n height: 40px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .content[_ngcontent-%COMP%] {\n margin: 0 auto 100px auto;\n padding: 1px 20px 0 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .content[_ngcontent-%COMP%] {\n margin: 0 auto 82px auto;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .content[_ngcontent-%COMP%] {\n margin: 0 auto 82px auto;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .content[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 100%;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] {\n padding: 26px;\n padding-top: 100px;\n font-size: 18px;\n font-weight: 400;\n font-size: 16px;\n color: #333333;\n background-color: #e6e6e6;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section.skeleton[_ngcontent-%COMP%] {\n padding-top: 40px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section.skeleton[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n filter: brightness(95%);\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 32px;\n font-weight: 400;\n margin: 20px 0 20PX 0;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 24px;\n padding-top: 15px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 24px;\n padding-top: 15px;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 500;\n margin: 0;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background-color: #ffffff;\n display: flex;\n flex-wrap: wrap;\n margin: 0 auto;\n box-shadow: 0px 2px 4px rgba(5, 28, 44, 0.2), 0px 0px 1px rgba(5, 28, 44, 0.2);\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex-wrap: wrap-reverse;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex-wrap: wrap-reverse;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .pb[_ngcontent-%COMP%] {\n padding-bottom: 10px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n padding: 20px;\n flex: 3.4;\n line-height: 24px;\n padding-bottom: 15px;\n min-width: 200px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: block;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: block;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .title[_ngcontent-%COMP%] {\n width: 100%;\n flex: none;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .title[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] {\n flex: 1;\n font-size: 18px;\n font-weight: 500;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status.skeleton[_ngcontent-%COMP%] {\n background: #f8f8f8;\n color: #f8f8f8;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n text-align: center;\n margin: auto;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin-bottom: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin-top: 0;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 30px;\n margin-right: 10px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin-top: 0;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 30px;\n margin-right: 10px;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n width: 100%;\n display: block;\n color: #333333;\n margin: 0 0 20px 0;\n font-weight: 400;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] .booking-data[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n font-size: 18px;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] .booking-data[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] .booking-data[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] .booking-data[_ngcontent-%COMP%]:nth-child(2n) {\n margin-bottom: 10px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] .booking-data[_ngcontent-%COMP%] .rec-details-period[_ngcontent-%COMP%] {\n cursor: pointer;\n text-decoration: underline;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] {\n padding-top: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] {\n padding-top: 0;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding: 10px 40px 30px;\n border: 1px solid #e6e6e6;\n background-color: white;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details.skeleton[_ngcontent-%COMP%] {\n padding-top: 30px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details.skeleton[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 9px 0;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details.skeleton[_ngcontent-%COMP%] p[_ngcontent-%COMP%] .loader[_ngcontent-%COMP%] {\n margin-bottom: 5px !important;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 100%;\n max-width: 1024px;\n margin: 0 auto;\n display: flex;\n flex-wrap: wrap;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-weight: 400;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] {\n margin-top: 20px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding: 25px 35px;\n border: 1px solid #E6E6E6;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div.skeleton[_ngcontent-%COMP%] {\n margin-top: 0;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n margin-left: 26px;\n width: 306px;\n position: relative;\n margin-top: 0;\n font-weight: 500;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n position: absolute;\n left: -30px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n width: 100%;\n margin: 0 auto;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] span[_ngcontent-%COMP%], .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] .plus[_ngcontent-%COMP%] {\n color: #1F40E6;\n font-size: 16px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] .plus[_ngcontent-%COMP%] {\n font-size: 26px;\n font-weight: 300;\n position: relative;\n top: 2px;\n padding-left: 3px;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%] {\n color: rgba(0, 0, 0, 0.26) !important;\n border: 1px solid #D0D0D0;\n cursor: not-allowed;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%] .mat-button-wrapper[_ngcontent-%COMP%] {\n color: rgba(0, 0, 0, 0.26) !important;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%] .mat-button-wrapper[_ngcontent-%COMP%], .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: rgba(0, 0, 0, 0.26);\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%] .mat-button-wrapper[_ngcontent-%COMP%] span[_ngcontent-%COMP%], .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%] span[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: rgba(0, 0, 0, 0.26);\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering.skeleton[_ngcontent-%COMP%] {\n margin-top: 0;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering.skeleton[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin-bottom: 0px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding: 10px 0;\n margin-bottom: 100px;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .booking-data[_ngcontent-%COMP%] {\n padding: 0 26px;\n min-width: 100%;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] {\n width: 100%;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding: 25px 26px;\n border: none;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 18px;\n width: 100%;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding: 10px 0;\n margin-bottom: 100px;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .booking-data[_ngcontent-%COMP%] {\n padding: 0 26px;\n min-width: 100%;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] {\n width: 100%;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding: 25px 26px;\n border: none;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 18px;\n width: 100%;\n }\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .catering[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .unavailable-details[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n width: 100%;\n font-family: \"McKinsey Sans\";\n}\n.confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .unavailable-details[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n width: 100%;\n font-weight: 500;\n color: #333333;\n font-size: 20px;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .unavailable-details[_ngcontent-%COMP%] {\n padding: 0 26px;\n min-width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .unavailable-details[_ngcontent-%COMP%] {\n padding: 0 26px;\n min-width: 100%;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] {\n position: absolute;\n bottom: 0;\n left: 0;\n padding: 24px 16px;\n border: 1px solid #e6e6e6;\n height: 96px;\n width: 100%;\n background-color: white;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 100%;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%], .confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] .skeleton[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n width: 383px;\n margin: 0 auto;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%], .confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] .skeleton[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%], .confirm-wrapper[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] .skeleton[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n.confirm-wrapper[_ngcontent-%COMP%] .mck-content-body[_ngcontent-%COMP%] {\n overflow-y: scroll;\n top: 0;\n left: 0;\n box-sizing: border-box;\n display: block;\n}\n.confirm-wrapper[_ngcontent-%COMP%] .mck-content-body.padding-100[_ngcontent-%COMP%] {\n padding: 100px 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .confirm-wrapper[_ngcontent-%COMP%] .mck-content-body[_ngcontent-%COMP%] {\n position: fixed;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .confirm-wrapper[_ngcontent-%COMP%] .mck-content-body[_ngcontent-%COMP%] {\n position: fixed;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNvbmZpcm1hdGlvbi9ib29raW5nLWNvbmZpcm1hdGlvbi5jb21wb25lbnQuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9taXhpbnMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNvbmZpcm1hdGlvbi9ib29raW5nLWNvbmZpcm1hdGlvbi5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNwVUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQzVDQTs7c0JBQUE7QUNWSTtFQUNJLGNBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7RUFDQSxNQUFBO0VBQ0EsT0FBQTtFQUNBLFdBQUE7RUFDQSxVQUFBO0FKOEJSO0FJM0JBO0VBRUksTUFBQTtFQUNBLE9BQUE7RUFD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O0VJN0ZrQjtJQUNJLFdBQUE7RUorRnRCO0FBQ0Y7QUl6Rlk7RUFDSSxXQUFBO0VBQ0EsNEJIN01LO0FEd1NyQjtBSXpGWTtFQUNJLFdBQUE7RUFDQSxnQkFBQTtFQUNBLGNBQUE7RUFDQSxlQUFBO0VBQ0EsNEJIcE5LO0FEK1NyQjtBQzVYWTtFR3VSSjtJQWNRLGVBQUE7SUFDQSxlQUFBO0VKMkZkO0FBQ0Y7QUNsWVk7RUd1Uko7SUFjUSxlQUFBO0lBQ0EsZUFBQTtFSmlHZDtBQUNGO0FJN0ZJO0VBQ0ksa0JBQUE7RUFDQSxTQUFBO0VBQ0EsT0FBQTtFQUNBLGtCQUFBO0VBQ0EseUJBQUE7RUFDQSxZQUFBO0VBQ0EsV0FBQTtFQUNBLHVCQUFBO0FKK0ZSO0FJOUZRO0VBQ0ksV0FBQTtBSmdHWjtBSTdGUTtFQUNJLHFHRi9RVTtFRWdSVixZQUFBO0VBQ0EsY0FBQTtBSitGWjtBRy9ZUTtFQzZTQTtJQUtRLFdBQUE7RUppR2Q7QUFDRjtBR2paUTtFQzBTQTtJQUtRLFdBQUE7RUpzR2Q7QUFDRjtBSWxHSTtFQUVJLGtCQUFBO0VBQ0EsTUFBQTtFQUNBLE9BQUE7RUFFQSxzQkFBQTtFQUNBLGNBQUE7QUprR1I7QUlqR1E7RUFDSSxnQkFBQTtBSm1HWjtBQzlhWTtFRytVSjtJQUNJLGVBQUE7RUprR1Y7QUFDRjtBQ25iWTtFRytVSjtJQUNJLGVBQUE7RUp1R1Y7QUFDRiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNvbmZpcm1hdGlvbi9ib29raW5nLWNvbmZpcm1hdGlvbi5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIiRwcmltYXJ5OiAjMUY0MEU2O1xuJGZvcm0tbGFiZWw6ICMwNTFDMkM7XG4kc2Vjb25kYXJ5LWxhYmVsOiAjNzY3Njc2O1xuJGJvcmRlcjogI0IzQjNCMztcbiRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkOiAjRDBEMEQwO1xuJGNoaXAtY29sb3I6ICMzMzMzMzM7XG4kcGxhY2Vob2xkZXItY29sb3I6ICM3RjdGN0Y7XG4kYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDtcbiRwYWdlLWJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4kc2VsZWN0ZWQtb3B0aW9uOiAjRTZFNkU2O1xuJGNvbG9yLWJyYW5kLXllbGxvdzogI2ZmZDA0ODtcbiRsaWdodC15ZWxsb3c6ICNmZmYzY2U7XG4kY29hY2htYXJrLXRleHQ6ICM2ZjRkMDA7XG4kZXJyb3ItY29sb3I6ICNFMTJFNDA7XG4kbm8tZmlsdGVycy1jb2xvcjogI0JDQkNCQztcbiRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjogI0Y0RjRGNDtcbiRwcmltYXJ5LWhpZ2hsaWdodDogIzIyNTFGRjtcbiRzY3JvbGxiYXItY29sb3I6ICM3NTc1NzU7XG5cbiRhdmFpbGFibGUtY29sb3I6ICM1RDlENTI7XG4kYXZhaWxhYmxlLWJ5LXJlcXVlc3QtY29sb3I6ICNGNUI1M0Y7XG4kaW4tdXNlLWNvbG9yOiAjRDQ0ODNFO1xuJG5vdC1ib29rYWJsZS1jb2xvcjogI0NDQ0NDQztcblxuJG1vZGFsLWJvZHktaGVhZGluZzogIzRENEQ0RDtcbiRhbGVydC1vdmVybGF5LWJnOiByZ2JhKDUsIDI4LCA0NCwgMC44NSk7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvYWNobWFyay1iZzogI0VCRUJGNjtcbiRjb2FjaG1hcmstZGFyay10ZXh0OiAjMUIxQjE5O1xuJGVycm9yLXRleHQ6ICNmZmY7XG5cbi8qKlxuICogU3BhY2luZ1xuICovXG5cbi8vIDRweFxuJHNwYWNpbmctc21hbGxlc3Q6IDAuMjVyZW07XG5cbi8vIDhweFxuJHNwYWNpbmcteHhzbWFsbDogMC41cmVtO1xuXG4vLyAxMnB4XG4kc3BhY2luZy14c21hbGw6IDAuNzVyZW07XG5cbi8vIDE2cHhcbiRzcGFjaW5nLXNtYWxsOiAxcmVtO1xuXG4vLyAyMHB4XG4kc3BhY2luZy1zbWFsbC1tZWRpdW06IDEuMjVyZW07XG5cbi8vIDI0cHhcbiRzcGFjaW5nLW1lZGl1bTogMS41cmVtO1xuXG4vLyAyOHB4XG4kc3BhY2luZy1tZWRpdW0tbGFyZ2U6IDEuNzVyZW07XG5cbi8vIDMycHhcbiRzcGFjaW5nLWxhcmdlOiAycmVtO1xuXG4vLyA0OHB4XG4kc3BhY2luZy14bGFyZ2U6IDNyZW07XG5cbi8vIDY0cHhcbiRzcGFjaW5nLXh4bGFyZ2U6IDRyZW07XG5cbi8vIDk2cHhcbiRzcGFjaW5nLWxhcmdlc3Q6IDZyZW07XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kZGV2aWNlLW1vYmlsZS1zaXplOiA0NTBweDtcbiRkZXZpY2UtdGFibGV0LXNpemU6IDgwMHB4O1xuJGRldmljZS1sYXB0b3Atc2l6ZTogMTAyNHB4O1xuXG4kZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZTogMTA0OHB4O1xuJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemU6IDEyODBweDtcblxuXG46ZXhwb3J0IHtcbiAgICBwcmltYXJ5OiAkcHJpbWFyeTtcbiAgICBzZWNvbmRhcnlMYWJlbDogJHNlY29uZGFyeS1sYWJlbDtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbiRpY29uLXNtYWxsOiAxNnB4O1xuJGljb24tbWVkaXVtOiAyNHB4O1xuJGljb24tbGFyZ2U6IDMycHg7XG4kaWNvbi14bGFyZ2U6IDQ4cHg7XG4iLCIvKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLmJvb2tpbmctY29uZmlybWF0aW9uIC5oZWFkZXIge1xuICBkaXNwbGF5OiBibG9jaztcbiAgei1pbmRleDogMTA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMDtcbn1cblxuLmNvbmZpcm0td3JhcHBlciB7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbiAgei1pbmRleDogNDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYm9yZGVyOiAxcHggc29saWQgI2ExOWY5Zjtcbn1cbi5jb25maXJtLXdyYXBwZXIuZml4ZWQge1xuICBwb3NpdGlvbjogZml4ZWQ7XG59XG4uY29uZmlybS13cmFwcGVyIC5nYXAtYSB7XG4gIGhlaWdodDogMTRweDtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmdhcC1iIHtcbiAgaGVpZ2h0OiA0MHB4O1xufVxuLmNvbmZpcm0td3JhcHBlciAuY29udGVudCB7XG4gIG1hcmdpbjogMCBhdXRvIDEwMHB4IGF1dG87XG4gIHBhZGRpbmc6IDFweCAyMHB4IDAgMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLmNvbnRlbnQge1xuICAgIG1hcmdpbjogMCBhdXRvIDgycHggYXV0bztcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLmNvbnRlbnQge1xuICAgIG1hcmdpbjogMCBhdXRvIDgycHggYXV0bztcbiAgfVxufVxuLmNvbmZpcm0td3JhcHBlciAuY29udGVudCA+IGRpdiB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiB7XG4gIHBhZGRpbmc6IDI2cHg7XG4gIHBhZGRpbmctdG9wOiAxMDBweDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2O1xufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbi5za2VsZXRvbiB7XG4gIHBhZGRpbmctdG9wOiA0MHB4O1xufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbi5za2VsZXRvbiAuaGVhZGVyIHtcbiAgZmlsdGVyOiBicmlnaHRuZXNzKDk1JSk7XG59XG4uY29uZmlybS13cmFwcGVyIC5zZWN0aW9uIGgxIHtcbiAgZm9udC1zaXplOiAzMnB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBtYXJnaW46IDIwcHggMCAyMFBYIDA7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gaDEge1xuICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICBwYWRkaW5nLXRvcDogMTVweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gaDEge1xuICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICBwYWRkaW5nLXRvcDogMTVweDtcbiAgfVxufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiBoMiB7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgbWFyZ2luOiAwO1xufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiA+IGRpdiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGJveC1zaGFkb3c6IDBweCAycHggNHB4IHJnYmEoNSwgMjgsIDQ0LCAwLjIpLCAwcHggMHB4IDFweCByZ2JhKDUsIDI4LCA0NCwgMC4yKTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYge1xuICAgIGZsZXgtd3JhcDogd3JhcC1yZXZlcnNlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiA+IGRpdiB7XG4gICAgZmxleC13cmFwOiB3cmFwLXJldmVyc2U7XG4gIH1cbn1cbi5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgLnBiIHtcbiAgcGFkZGluZy1ib3R0b206IDEwcHg7XG59XG4uY29uZmlybS13cmFwcGVyIC5zZWN0aW9uID4gZGl2ID4gZGl2IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBwYWRkaW5nOiAyMHB4O1xuICBmbGV4OiAzLjQ7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMTVweDtcbiAgbWluLXdpZHRoOiAyMDBweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgPiBkaXYge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiA+IGRpdiA+IGRpdiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cbi5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgPiBkaXYgPiBkaXYge1xuICBmbGV4OiAxO1xufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiA+IGRpdiA+IGRpdiAudGl0bGUge1xuICB3aWR0aDogMTAwJTtcbiAgZmxleDogbm9uZTtcbn1cbi5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgPiBkaXYgLnRpdGxlIGgyIHtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbi5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgLnN0YXR1cyB7XG4gIGZsZXg6IDE7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbi5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgLnN0YXR1cy5za2VsZXRvbiB7XG4gIGJhY2tncm91bmQ6ICNmOGY4Zjg7XG4gIGNvbG9yOiAjZjhmOGY4O1xufVxuLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiA+IGRpdiAuc3RhdHVzID4gZGl2IHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXJnaW46IGF1dG87XG59XG4uY29uZmlybS13cmFwcGVyIC5zZWN0aW9uID4gZGl2IC5zdGF0dXMgPiBkaXYgcCB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuY29uZmlybS13cmFwcGVyIC5zZWN0aW9uID4gZGl2IC5zdGF0dXMgPiBkaXYge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgfVxuICAuY29uZmlybS13cmFwcGVyIC5zZWN0aW9uID4gZGl2IC5zdGF0dXMgPiBkaXYgcCB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgfVxuICAuY29uZmlybS13cmFwcGVyIC5zZWN0aW9uID4gZGl2IC5zdGF0dXMgPiBkaXYgaW1nIHtcbiAgICB3aWR0aDogMzBweDtcbiAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuY29uZmlybS13cmFwcGVyIC5zZWN0aW9uID4gZGl2IC5zdGF0dXMgPiBkaXYge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgfVxuICAuY29uZmlybS13cmFwcGVyIC5zZWN0aW9uID4gZGl2IC5zdGF0dXMgPiBkaXYgcCB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgfVxuICAuY29uZmlybS13cmFwcGVyIC5zZWN0aW9uID4gZGl2IC5zdGF0dXMgPiBkaXYgaW1nIHtcbiAgICB3aWR0aDogMzBweDtcbiAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gIH1cbn1cbi5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gPiBkaXYgaDIge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG59XG4uY29uZmlybS13cmFwcGVyIC5zZWN0aW9uIC5ib29raW5nLWRhdGEgPiBkaXYge1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gLmJvb2tpbmctZGF0YSA+IGRpdiB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiAuYm9va2luZy1kYXRhID4gZGl2IHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gIH1cbn1cbi5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gLmJvb2tpbmctZGF0YTpudGgtY2hpbGQoMm4pIHtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cbi5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24gLmJvb2tpbmctZGF0YSAucmVjLWRldGFpbHMtcGVyaW9kIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLnNlY3Rpb24ge1xuICAgIHBhZGRpbmctdG9wOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuc2VjdGlvbiB7XG4gICAgcGFkZGluZy10b3A6IDA7XG4gIH1cbn1cbi5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMge1xuICBwYWRkaW5nOiAxMHB4IDQwcHggMzBweDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U2ZTZlNjtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzLnNrZWxldG9uIHtcbiAgcGFkZGluZy10b3A6IDMwcHg7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzLnNrZWxldG9uIHAge1xuICBtYXJnaW46IDlweCAwO1xufVxuLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscy5za2VsZXRvbiBwIC5sb2FkZXIge1xuICBtYXJnaW4tYm90dG9tOiA1cHggIWltcG9ydGFudDtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgPiBkaXYge1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzID4gZGl2ID4gZGl2IHtcbiAgZmxleDogMTtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgbGFiZWwge1xuICBmb250LXdlaWdodDogNDAwO1xufVxuLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAuY2F0ZXJpbmcge1xuICBtYXJnaW4tdG9wOiAyMHB4O1xufVxuLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAuY2F0ZXJpbmcgPiBkaXYge1xuICBwYWRkaW5nOiAyNXB4IDM1cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdi5za2VsZXRvbiB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiBoMiB7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgbWFyZ2luLWxlZnQ6IDI2cHg7XG4gIHdpZHRoOiAzMDZweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tdG9wOiAwO1xuICBmb250LXdlaWdodDogNTAwO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQ2FsaWJyaSwgQ29yYmVsLCBIZWx2ZXRpY2EsIFJvYm90bywgRHJvaWQsIHNhbnMtc2VyaWY7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiBoMiBpbWcge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IC0zMHB4O1xufVxuLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAuY2F0ZXJpbmcgPiBkaXYgYnV0dG9uIHtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAuY2F0ZXJpbmcgPiBkaXYgYnV0dG9uIHNwYW4sIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2IGJ1dHRvbiAucGx1cyB7XG4gIGNvbG9yOiAjMUY0MEU2O1xuICBmb250LXNpemU6IDE2cHg7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiBidXR0b24gLnBsdXMge1xuICBmb250LXNpemU6IDI2cHg7XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAycHg7XG4gIHBhZGRpbmctbGVmdDogM3B4O1xufVxuLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAuY2F0ZXJpbmcgPiBkaXYgYnV0dG9uW2Rpc2FibGVkXSB7XG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjYpICFpbXBvcnRhbnQ7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiBidXR0b25bZGlzYWJsZWRdIC5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI2KSAhaW1wb3J0YW50O1xufVxuLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAuY2F0ZXJpbmcgPiBkaXYgYnV0dG9uW2Rpc2FibGVkXSAubWF0LWJ1dHRvbi13cmFwcGVyLCAuY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiBidXR0b25bZGlzYWJsZWRdIHNwYW4ge1xuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI2KTtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2IGJ1dHRvbltkaXNhYmxlZF0gLm1hdC1idXR0b24td3JhcHBlciBzcGFuLCAuY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiBidXR0b25bZGlzYWJsZWRdIHNwYW4gc3BhbiB7XG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjYpO1xufVxuLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAuY2F0ZXJpbmcuc2tlbGV0b24ge1xuICBtYXJnaW4tdG9wOiAwO1xufVxuLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyAuY2F0ZXJpbmcuc2tlbGV0b24gaDIge1xuICBtYXJnaW4tYm90dG9tOiAwcHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIHtcbiAgICBwYWRkaW5nOiAxMHB4IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMTAwcHg7XG4gIH1cbiAgLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyA+IGRpdiAuYm9va2luZy1kYXRhIHtcbiAgICBwYWRkaW5nOiAwIDI2cHg7XG4gICAgbWluLXdpZHRoOiAxMDAlO1xuICB9XG4gIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAuY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiB7XG4gICAgcGFkZGluZzogMjVweCAyNnB4O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgfVxuICAuY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiBoMiB7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2IGJ1dHRvbiB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIHtcbiAgICBwYWRkaW5nOiAxMHB4IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMTAwcHg7XG4gIH1cbiAgLmNvbmZpcm0td3JhcHBlciAuZGV0YWlscyA+IGRpdiAuYm9va2luZy1kYXRhIHtcbiAgICBwYWRkaW5nOiAwIDI2cHg7XG4gICAgbWluLXdpZHRoOiAxMDAlO1xuICB9XG4gIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAuY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiB7XG4gICAgcGFkZGluZzogMjVweCAyNnB4O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgfVxuICAuY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC5jYXRlcmluZyA+IGRpdiBoMiB7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLmNhdGVyaW5nID4gZGl2IGJ1dHRvbiB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbi5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLnVuYXZhaWxhYmxlLWRldGFpbHMgcCB7XG4gIHdpZHRoOiAxMDAlO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG4uY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC51bmF2YWlsYWJsZS1kZXRhaWxzIGgyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBmb250LXNpemU6IDIwcHg7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLmRldGFpbHMgLnVuYXZhaWxhYmxlLWRldGFpbHMge1xuICAgIHBhZGRpbmc6IDAgMjZweDtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuY29uZmlybS13cmFwcGVyIC5kZXRhaWxzIC51bmF2YWlsYWJsZS1kZXRhaWxzIHtcbiAgICBwYWRkaW5nOiAwIDI2cHg7XG4gICAgbWluLXdpZHRoOiAxMDAlO1xuICB9XG59XG4uY29uZmlybS13cmFwcGVyIC5mb290ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgcGFkZGluZzogMjRweCAxNnB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTZlNmU2O1xuICBoZWlnaHQ6IDk2cHg7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbn1cbi5jb25maXJtLXdyYXBwZXIgLmZvb3RlciA+IGRpdiB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLmNvbmZpcm0td3JhcHBlciAuZm9vdGVyIGJ1dHRvbiwgLmNvbmZpcm0td3JhcHBlciAuZm9vdGVyIC5za2VsZXRvbiB7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbiAgd2lkdGg6IDM4M3B4O1xuICBtYXJnaW46IDAgYXV0bztcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLmZvb3RlciBidXR0b24sIC5jb25maXJtLXdyYXBwZXIgLmZvb3RlciAuc2tlbGV0b24ge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmNvbmZpcm0td3JhcHBlciAuZm9vdGVyIGJ1dHRvbiwgLmNvbmZpcm0td3JhcHBlciAuZm9vdGVyIC5za2VsZXRvbiB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbi5jb25maXJtLXdyYXBwZXIgLm1jay1jb250ZW50LWJvZHkge1xuICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4uY29uZmlybS13cmFwcGVyIC5tY2stY29udGVudC1ib2R5LnBhZGRpbmctMTAwIHtcbiAgcGFkZGluZzogMTAwcHggMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLm1jay1jb250ZW50LWJvZHkge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5jb25maXJtLXdyYXBwZXIgLm1jay1jb250ZW50LWJvZHkge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgfVxufSIsIkBpbXBvcnQgXCJ2YXJzXCI7XG5cbkBtaXhpbiBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRzaXplLCAkcXVhbGlmaWVyKSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAaWYgKCRxdWFsaWZpZXIgPT0gbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSBpZiAoJHF1YWxpZmllciA9PSBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWF4LXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5AbWl4aW4gYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRtaW4sICRtYXgpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkbWluKSBhbmQgKG1heC13aWR0aDogJG1heCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIHRoaXMgaXMgYSBjb3B5IG9mIHJlc3BvbmQtdG8uIHdlIGRvbid0IHdhbnQgdG8gcHJlc2VydmUgdGhhdCBtZXRob2Qgc2luY2UgdGhlIGJyZWFrcG9pbnRzIG1heSBkaXZlcmdlIGZyb20gdGhlIG9sZCBVSS5cbkBtaXhpbiBpcy1zY3JlZW4tc2l6ZSgkbWVkaWE6IGFsbCwgJG9yaWVudGF0aW9uOiBub25lKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cblxuQG1peGluIHBhZ2UtcGFkZGluZyB7XG4gICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbDtcbn1cblxuLy8gRm9udCBNaXhpbnNcbiRmb250LW1ja2luc2V5LXNhbnM6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuJGZvbnQtdGhlaW5oYXJkdDogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4kZm9udC1ib3dlcjogXCJCb3dlclwiO1xuXG5AbWl4aW4gYm93ZXItYm9sZCB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWJvd2VyO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBtY2tpbnNleS1zYW5zIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gZGlzcGxheS0xIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiA0cmVtOyAvLyA2NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4NzsgLy8gNzZweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMiB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDYwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS00IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogM3JlbTsgLy8gNDhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE2NjsgLy8gNTZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS01IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjgzMzsgLy8gMzRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjQyOyAvLyA0MHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS03IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyOHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTEge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA0OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi43NXJlbTsgLy8gNDRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDUycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTIge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTExOyAvLyA0NHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNDhweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMyB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIyMjsgLy8gNDRweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjg4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1NTsgLy8gMjhweFxuICAgIH1cbn1cblxuQG1peGluIGJvZHktZGVmYXVsdCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNnB4XG4gICAgfVxufVxuXG4vLy8gRG9lc250IGV4aXN0IGluIE1EUy5cbkBtaXhpbiBib2R5LXRpbnkge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtOyAvLyAxMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjRweFxuICAgIH1cbn1cblxuQG1peGluIGZvcm0tbGFiZWwge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LXRoZWluaGFyZHQ7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGNvbG9yOiAkcGxhY2Vob2xkZXItY29sb3I7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbn1cblxuQG1peGluIGNoaXAtbGFiZWwge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBjaGVja2JveC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGNvbG9yOiBibGFjaztcbn1cblxuLy8gYm9yZGVyc1xuXG5AbWl4aW4gbWNrLWNoZWNrYm94LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay10aGluLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXItbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBib3JkZXItY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudC1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuXG4vLyBmdW5jdGlvbnNcblxuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG5AbWl4aW4gbWF4LWxpbmVzKCRjb3VudCkge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiAkY291bnQ7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbn1cblxuLy8gaW1hZ2VzXG5AbWl4aW4gbWNrLWljb24oJHdpZHRoLCAkYXNzZXQsICRoZWlnaHQ6ICR3aWR0aCwgICRhc3NldFBhdGg6IFwibGlicy91aS9zcmMvbGliL2ljb25zXCIsKSB7XG4gICAgd2lkdGg6ICR3aWR0aDtcbiAgICBoZWlnaHQ6ICRoZWlnaHQ7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiI3skYXNzZXRQYXRofS8jeyRhc3NldH1cIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuXG5cbkBtaXhpbiBtY2stc21hbGwtaWNvbigkbW9iaWxlLWFzc2V0LCAkZGVza3RvcC1hc3NldDogJG1vYmlsZS1hc3NldCkge1xuICAgIEBpbmNsdWRlIG1jay1pY29uKDE2cHgsICRhc3NldDogJG1vYmlsZS1hc3NldCk7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICRhc3NldDogJGRlc2t0b3AtYXNzZXQpO1xuICAgIH1cbn1cblxuLy8gc2tlbGV0b25cbkBtaXhpbiBza2VsZXRvbi1iZyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWltYWdlLXNpemUge1xuICAgIHdpZHRoOiA4MXB4O1xuICAgIGhlaWdodDogODJweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDIxOXB4O1xuICAgICAgICBoZWlnaHQ6IDExOXB4O1xuICAgIH1cbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLXN0YXR1cy1zaXplIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMTE3cHg7XG4gICAgICAgIGhlaWdodDogNzhweDtcbiAgICB9XG59XG4iLCIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRjb2xvci1icmFuZC1lbGVjdHJpYy1ibHVlOiAjMjI1MWZmO1xuJGNvbG9yLWJyYW5kLWRlZXAtYmx1ZTogIzA1MWMyYztcbiRjb2xvci1icmFuZC1jeWFuOiAjMDBhOWY0O1xuXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGZvbnQtZGFyazogIzAwMDtcbiRmb250LWxpZ2h0OiAjZmZmO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcbiRncmVlbjE6ICMyMTk2NTM7XG5cbiRwZW5kaW5nOiAjZmZiMzAwO1xuJHBlbmRpbmctbGlnaHQ6IGxpZ2h0ZW4oJHBlbmRpbmcsIDEwKTtcbiRwZW5kaW5nLWRhcms6IGRhcmtlbigkcGVuZGluZywgMTApO1xuXG4kZXJyb3I6ICNlNTM5MzU7XG4kZXJyb3ItbGlnaHQ6IGxpZ2h0ZW4oJGVycm9yLCAxMCk7XG4kZXJyb3ItZGFyazogZGFya2VuKCRlcnJvciwgMTApO1xuXG4kY29sb3ItcHJpbWFyeTogIzE5MzdlYTtcbiRjb2xvci1wcmltYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG4kY29sb3ItcHJpbWFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcblxuJGNvbG9yLXNlY29uZGFyeTogIzQyODVGNDtcbiRjb2xvci1zZWNvbmRhcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuJGNvbG9yLXNlY29uZGFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuXG4kYmFja2dyb3VuZDogI2YwZjBmMDtcbiRmb290ZXItYmFjazogIzI2MzIzODtcbiRoZWFkZXItYmFjazogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMDUxQzJDLCAjMDUxQzJDIDQwJSwgIzBCMjQ1MyA2MCUsICMxRjQwRTYgMTAwJSk7XG5cbiRjb2xvci10ZXJuYXJ5OiAjMDUxYzJjO1xuXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cblxuJGZvbnQtc3RhY2s6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuXG4kaGVhZGluZy1mb250OiBcIkxhcmlzaE1jS2luc2V5XCIsICdHZW9yZ2lhJywgc2VyaWY7XG4kZm9udDogJGZvbnQtc3RhY2s7XG5cbiRmb250LWZhbWlseS1wcmltYXJ5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbiRmb250LWZhbWlseS1zZWNvbmRhcnk6IFwiQm93ZXJcIiwgR2VvcmdpYSwgXCJUaW1lcyBOZXcgUm9tYW5cIiBzZXJpZjtcblxuJGJhc2Utc2l6ZTogMTZweDtcbiR0YWJsZXQtc2l6ZTogMTZweDtcbiRtb2JpbGUtc2l6ZTogMTZweDtcblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbiRicmVhay1tb2JpbGU6IDQ1MHB4O1xuJGJyZWFrLXRhYmxldDogODAwcHg7XG4kYnJlYWstbGFwdG9wOiAxMDI0cHg7XG5cbiRicmVhay1sYW5kc2NhcGUtbW9iaWxlOiA4MDBweDtcbiRicmVhay1sYW5kc2NhcGUtdGFibGV0OiAxMDQ4cHg7XG4kYnJlYWstbGFuZHNjYXBlLWxhcHRvcDogMTI4MHB4O1xuIiwiQGltcG9ydCAnLi92YXJpYWJsZXMnO1xuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbkBtaXhpbiBib3gtc2hhZG93KCRjb2xvcjogIzAwMCwgJGRlcHRoOiAxKSB7XG4gICAgYm94LXNoYWRvdzogMCAxcHggM3B4IDFweCAqICgkZGVwdGggLSAxKSByZ2JhKCMwMDAsIC4yKSxcbiAgICAgICAgICAgICAgICAwIDFweCAxcHggMCByZ2JhKCMwMDAsIC4xNCksXG4gICAgICAgICAgICAgICAgMCAycHggMXB4IC0xcHggcmdiYSgjMDAwLCAuMTIpO1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuQG1peGluIHJlc3BvbmQtdG8oJG1lZGlhKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9ICBAZWxzZSBpZiAkbWVkaWEgPT0gbGF0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9QGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIkBpbXBvcnQgJ2xpYnMvdWkvc3JjL2xpYi9taXhpbnMnO1xuQGltcG9ydCAnbWl4aW5zJztcblxuLmJvb2tpbmctY29uZmlybWF0aW9uIHtcbiAgICAuaGVhZGVyIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHotaW5kZXg6IDEwO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgfSAgXG59XG4uY29uZmlybS13cmFwcGVyIHtcbiAgICAvLyBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHotaW5kZXg6IDQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNhMTlmOWY7XG4gICAgJi5maXhlZCB7XG4gICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB9XG5cbiAgICAuZ2FwIHtcbiAgICAgICAgJi1hIHtcbiAgICAgICAgICAgIGhlaWdodDogMTRweDtcbiAgICAgICAgfVxuICAgICAgICAmLWIge1xuICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmNvbnRlbnQge1xuICAgICAgICBtYXJnaW46IDAgYXV0byAxMDBweCBhdXRvO1xuICAgICAgICBwYWRkaW5nOiAxcHggMjBweCAwIDA7XG4gICAgICAgIEBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgICAgICAgICBtYXJnaW46IDAgYXV0byA4MnB4IGF1dG87XG4gICAgICAgIH1cbiAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuc2VjdGlvbiB7XG4gICAgICAgIHBhZGRpbmc6IDI2cHg7XG4gICAgICAgIHBhZGRpbmctdG9wOiAxMDBweDtcbiAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2O1xuICAgICAgICAmLnNrZWxldG9uIHtcbiAgICAgICAgICAgIHBhZGRpbmctdG9wOiA0MHB4O1xuICAgICAgICAgICAgLmhlYWRlciB7XG4gICAgICAgICAgICAgICAgZmlsdGVyOiBicmlnaHRuZXNzKDk1JSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaDEge1xuICAgICAgICAgICAgZm9udC1zaXplOiAzMnB4O1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgICAgIG1hcmdpbjogMjBweCAwIDIwUFggMDtcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1zdGFjaztcbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLXRvcDogMTVweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBoMiB7XG4gICAgICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICB9XG4gICAgICAgID4gZGl2IHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICBib3gtc2hhZG93OiAwcHggMnB4IDRweCByZ2JhKDUsIDI4LCA0NCwgMC4yKSwgMHB4IDBweCAxcHggcmdiYSg1LCAyOCwgNDQsIDAuMik7XG5cbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcC1yZXZlcnNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucGIge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICAgICAgICAgICAgZmxleDogMy40O1xuICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAxNXB4O1xuICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMjAwcHg7XG5cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAudGl0bGUge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICAgICAgZmxleDogbm9uZTtcblxuICAgICAgICAgICAgICAgICAgICBoMntcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAuc3RhdHVzIHtcbiAgICAgICAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgICAgICYuc2tlbGV0b24ge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZjhmOGY4O1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogI2Y4ZjhmODtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogYXV0bztcbiAgICAgICAgICAgICAgICAgICAgcCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICBwe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpbWd7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMwcHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OyAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaDIge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMCAwIDIwcHggMDtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLmJvb2tpbmctZGF0YXsgXG4gICAgICAgICAgICA+ZGl2IHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1wcmltYXJ5O1xuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICY6bnRoLWNoaWxkKDJuKSB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC5yZWMtZGV0YWlscy1wZXJpb2Qge1xuICAgICAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICBwYWRkaW5nLXRvcDogMDtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLmRldGFpbHMge1xuICAgICAgICBwYWRkaW5nOiAxMHB4IDQwcHggMzBweDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2U2ZTZlNjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgICYuc2tlbGV0b24ge1xuICAgICAgICAgICAgcGFkZGluZy10b3A6IDMwcHg7XG4gICAgICAgICAgICBwIHtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDlweCAwO1xuICAgICAgICAgICAgICAgIC5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHggIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDEwMjRweDtcbiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgICAgID4gZGl2IHtcbiAgICAgICAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxhYmVsIHtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgIH1cbiAgICAgICAgLmNhdGVyaW5nIHtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgICAgICAgICA+IGRpdiB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMjVweCAzNXB4O1xuICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gICAgICAgICAgICAgICAgJi5za2VsZXRvbiB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGgyIHtcbiAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogMjZweDtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMwNnB4O1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktcHJpbWFyeTtcbiAgICAgICAgICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IC0zMHB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgICAgICAgICAgICAgICAgc3BhbiwgLnBsdXMge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC5wbHVzIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjZweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3A6IDJweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogM3B4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICZbZGlzYWJsZWRdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjYpICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRDBEMEQwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjYpICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAubWF0LWJ1dHRvbi13cmFwcGVyLCBzcGFuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi5za2VsZXRvbiB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgICAgICAgICBoMiB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDBweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHggMDtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwMHB4O1xuXG4gICAgICAgICAgICA+IGRpdiAuYm9va2luZy1kYXRheyBcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMCAyNnB4O1xuICAgICAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5jYXRlcmluZyB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAyNXB4IDI2cHg7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcblxuICAgICAgICAgICAgICAgICAgICBoMiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBidXR0b24ge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7ICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLnVuYXZhaWxhYmxlLWRldGFpbHN7XG4gICAgICAgICAgICBwIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGgyIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMCAyNnB4O1xuICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5mb290ZXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcGFkZGluZzogMjRweCAxNnB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZTZlNmU2O1xuICAgICAgICBoZWlnaHQ6IDk2cHg7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cbiAgICAgICBcbiAgICAgICAgYnV0dG9uLCAuc2tlbGV0b24ge1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1wcmltYXJ5O1xuICAgICAgICAgICAgd2lkdGg6IDM4M3B4O1xuICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLm1jay1jb250ZW50LWJvZHl7XG4gICAgICAgIC8vIGhlaWdodDogY2FsYygxMDB2aCAtIDgwcHgpO1xuICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgLy8gcGFkZGluZzogMTAwcHggMDtcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICYucGFkZGluZy0xMDAge1xuICAgICAgICAgICAgcGFkZGluZzogMTAwcHggMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgLm1jay1jb250ZW50LWJvZHl7XG4gICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG59XG4iXX0= */"] }); /*@__PURE__*/ @@ -49999,7 +50675,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons type: core_1.Component, args: [{ selector: 'booking-confirmation', - template: "\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n

{{ data?.isEditSeries || (booking.is_recurrent && booking.recurrence_type === 'master') ? 'Recurring Series' : 'Booking' }} {{data?.status.title}}

\n
\n \n \n \n
\n
\n
\n

{{ booking.title }}

\n

Room is no longer available for your chosen date and time

\n
\n \n
\n
Status: {{data?.status.text}}
\n
Date: {{data?.dateString}}
\n
Time: {{data?.timeString}}
\n
{{data?.typeString}} meeting ({{data?.durationString}})
\n
\n
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
{{booking?.recurrence_period === 'list' ? 'Specific dates' : booking?.recurrence_period | titlecase}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t - Conflicts({{data?.isConflictWithOccurences()?.total_Conflicts}}) \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
Start date: {{data?.dateString}}
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
End date: {{data?.endDateString}}
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
Time: {{data?.timeString}}
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
{{data?.type}} meeting ({{data?.durationString}})
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\n
\n \n
\n
\n
\n
\n
\n \n \n \n
\n
\n
\n
\n \n
\n Address: {{building.address}},\n {{building.city}}\n
\n
Room: {{booking.space.local_name}}
\n
Room Capacity: {{booking.space.capacity}}
\n
\n \n
\n \n \n \n \n
\n
\n
\n
\n \n
\n \n

{{ data?.status.text }}

\n
\n
\n \n
\n \n

\n \n

\n
\n
\n
\n
\n
\n
\n
\n
\n \n

{{booking.organiser.name}}

\n

{{attendees}}

\n

{{company}}

\n

{{charge_code}}

\n

{{headcount}}

\n

{{notes}}

\n

\n
\n \n

\n

\n

\n

\n

\n

\n \n \n \n

\n
\n
\n
\n
\n

Catering is available for this meeting room

\n Add catering\n\n \n
\n
\n
\n
\n \n

\n

\n

 

\n \n
\n\n
\n
\n
\n

Ooops - we're sorry!

\n

Unfortunately your selected room has been booked by another user

\n

Please try searching for another room.

\n
\n
\n
\n
\n
\n \n
\n \n
\n
\n \n
\n \n
\n
\n
\n
\n
\n ", + template: "\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n

{{ data?.isEditSeries || (booking.is_recurrent && booking.recurrence_type === 'master') ? 'Recurring Series' : 'Booking' }} {{data?.status.title}}

\n
\n \n \n \n
\n
\n
\n

{{ booking.title }}

\n

Room is no longer available for your chosen date and time

\n
\n \n
\n
Status: {{data?.status.text}}
\n
Date: {{data?.dateString}}
\n
Time: {{data?.timeString}}
\n
{{data?.typeString}} meeting ({{data?.durationString}})
\n
\n
\n
\n \n {{booking?.recurrence_period === 'list' ? 'Specific dates' : booking?.recurrence_period | titlecase}}\n \n - Conflicts({{data?.isConflictWithOccurences()?.total_Conflicts}}) \n
\n
Start date: {{data?.dateString}}
\n
End date: {{data?.endDateString}}
\n
Time: {{data?.timeString}}
\n
{{data?.type}} meeting ({{data?.durationString}})
\n
\n\n
\n \n
\n
\n
\n
\n
\n \n \n \n
\n
\n
\n
\n \n
\n Address: {{building.address}},\n {{building.city}}\n
\n
Room: {{booking.space.local_name}}
\n
Room Capacity: {{booking.space.capacity}}
\n
\n \n
\n \n \n \n \n
\n
\n
\n
\n \n
\n \n

{{ data?.status.text }}

\n
\n
\n \n
\n \n

\n \n

\n
\n
\n
\n
\n
\n
\n
\n
\n \n

{{booking.organiser.name}}

\n

{{attendees}}

\n

{{company}}

\n

{{charge_code}}

\n

{{headcount}}

\n

{{notes}}

\n

\n
\n \n

\n

\n

\n

\n

\n

\n \n \n \n

\n
\n
\n
\n
\n

Catering is available for this meeting room

\n Add catering\n\n \n
\n
\n
\n
\n \n

\n

\n

 

\n \n
\n\n
\n
\n
\n

Ooops - we're sorry!

\n

Unfortunately your selected room has been booked by another user

\n

Please try searching for another room.

\n
\n
\n
\n
\n
\n \n
\n \n
\n
\n \n
\n \n
\n
\n
\n
\n
\n ", styleUrls: ['./booking-confirmation.component.scss'] }] }], function () { @@ -50021,6 +50697,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons modal: [{ type: core_1.Input }], + placeIntoModal: [{ + type: core_1.Input + }], data: [{ type: core_1.Input, args: ['dataForConfirmation'] @@ -50079,35 +50758,35 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons "../../node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js"); var i2 = __webpack_require__( - /*! ../room-booking-details-form/room-booking-details-form.component */ - "./src/app/booking/room-booking-details-form/room-booking-details-form.component.ts"); - - var i3 = __webpack_require__( /*! ../booking-confirmation/booking-confirmation.component */ "./src/app/booking/booking-confirmation/booking-confirmation.component.ts"); - var i4 = __webpack_require__( + var i3 = __webpack_require__( /*! ../../components/topbar-header/topbar-header.component */ "./src/app/components/topbar-header/topbar-header.component.ts"); + var i4 = __webpack_require__( + /*! ../room-booking-details-form/room-booking-details-form.component */ + "./src/app/booking/room-booking-details-form/room-booking-details-form.component.ts"); + var i5 = __webpack_require__( /*! @angular/material/button */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/button.js"); function BookingCreateComponent_div_1_Template(rf, ctx) { if (rf & 1) { - var _r8 = i0.ɵɵgetCurrentView(); + var _r5 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div", 16); - i0.ɵɵelement(1, "img", 17); - i0.ɵɵelementStart(2, "p", 18); + i0.ɵɵelementStart(0, "div", 6); + i0.ɵɵelement(1, "img", 7); + i0.ɵɵelementStart(2, "p", 8); i0.ɵɵtext(3); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(4, "img", 19); + i0.ɵɵelementStart(4, "img", 9); i0.ɵɵlistener("click", function BookingCreateComponent_div_1_Template_img_click_4_listener() { - i0.ɵɵrestoreView(_r8); - var ctx_r7 = i0.ɵɵnextContext(); - return ctx_r7.hideWarningBanner(); + i0.ɵɵrestoreView(_r5); + var ctx_r4 = i0.ɵɵnextContext(); + return ctx_r4.hideWarningBanner(); }); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); @@ -50120,37 +50799,54 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } } - function BookingCreateComponent_a_topbar_header_3_Template(rf, ctx) { + function BookingCreateComponent_div_2_a_topbar_header_1_Template(rf, ctx) { if (rf & 1) { - var _r10 = i0.ɵɵgetCurrentView(); + var _r9 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "a-topbar-header", 20); - i0.ɵɵlistener("closeCallback", function BookingCreateComponent_a_topbar_header_3_Template_a_topbar_header_closeCallback_0_listener() { - i0.ɵɵrestoreView(_r10); - var ctx_r9 = i0.ɵɵnextContext(); - return ctx_r9.discardChanges(); + i0.ɵɵelementStart(0, "a-topbar-header", 13); + i0.ɵɵlistener("closeCallback", function BookingCreateComponent_div_2_a_topbar_header_1_Template_a_topbar_header_closeCallback_0_listener() { + i0.ɵɵrestoreView(_r9); + var ctx_r8 = i0.ɵɵnextContext(2); + return ctx_r8.discardChanges(); }); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r1 = i0.ɵɵnextContext(); - i0.ɵɵproperty("mode", ctx_r1.TopBarHeaderMode.Light)("modal", true)("noSurvey", true); + var ctx_r6 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("mode", ctx_r6.TopBarHeaderMode.Light)("modal", true)("noSurvey", true); } } - function BookingCreateComponent_a_topbar_header_4_Template(rf, ctx) { + function BookingCreateComponent_div_2_a_topbar_header_2_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelement(0, "a-topbar-header", 21); + i0.ɵɵelement(0, "a-topbar-header", 14); } if (rf & 2) { - var ctx_r2 = i0.ɵɵnextContext(); - i0.ɵɵproperty("mode", ctx_r2.TopBarHeaderMode.Light)("back", ctx_r2.backRoute); + var ctx_r7 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("mode", ctx_r7.TopBarHeaderMode.Light)("back", ctx_r7.backRoute); + } + } + + function BookingCreateComponent_div_2_Template(rf, ctx) { + if (rf & 1) { + i0.ɵɵelementStart(0, "div", 10); + i0.ɵɵtemplate(1, BookingCreateComponent_div_2_a_topbar_header_1_Template, 1, 3, "a-topbar-header", 11); + i0.ɵɵtemplate(2, BookingCreateComponent_div_2_a_topbar_header_2_Template, 1, 2, "a-topbar-header", 12); + i0.ɵɵelementEnd(); + } + + if (rf & 2) { + var ctx_r1 = i0.ɵɵnextContext(); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r1.modal); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", !ctx_r1.modal); } } - function BookingCreateComponent_div_19_Template(rf, ctx) { + function BookingCreateComponent_div_3_div_14_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div"); i0.ɵɵelementStart(1, "div"); @@ -50166,45 +50862,45 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } if (rf & 2) { - var ctx_r3 = i0.ɵɵnextContext(); + var ctx_r10 = i0.ɵɵnextContext(2); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Date: ", ctx_r3.dateString, ""); + i0.ɵɵtextInterpolate1("Date: ", ctx_r10.dateString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Time: ", ctx_r3.timeString, ""); + i0.ɵɵtextInterpolate1("Time: ", ctx_r10.timeString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate2("", ctx_r3.type, " meeting (", ctx_r3.durationString, ")"); + i0.ɵɵtextInterpolate2("", ctx_r10.type, " meeting (", ctx_r10.durationString, ")"); } } - function BookingCreateComponent_div_20_span_4_Template(rf, ctx) { + function BookingCreateComponent_div_3_div_15_span_4_Template(rf, ctx) { if (rf & 1) { - var _r13 = i0.ɵɵgetCurrentView(); + var _r14 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "span", 24); - i0.ɵɵlistener("click", function BookingCreateComponent_div_20_span_4_Template_span_click_0_listener() { - i0.ɵɵrestoreView(_r13); - var ctx_r12 = i0.ɵɵnextContext(2); - return ctx_r12.openRecurrenceConflictsModal(ctx_r12.booking == null ? null : ctx_r12.booking.room); + i0.ɵɵelementStart(0, "span", 25); + i0.ɵɵlistener("click", function BookingCreateComponent_div_3_div_15_span_4_Template_span_click_0_listener() { + i0.ɵɵrestoreView(_r14); + var ctx_r13 = i0.ɵɵnextContext(3); + return ctx_r13.openRecurrenceConflictsModal(ctx_r13.booking == null ? null : ctx_r13.booking.room); }); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r11 = i0.ɵɵnextContext(2); + var ctx_r12 = i0.ɵɵnextContext(3); var tmp_0_0 = null; i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate1(" - Conflicts(", (tmp_0_0 = ctx_r11.isConflictWithOccurences()) == null ? null : tmp_0_0.total_Conflicts, ") "); + i0.ɵɵtextInterpolate1(" - Conflicts(", (tmp_0_0 = ctx_r12.isConflictWithOccurences()) == null ? null : tmp_0_0.total_Conflicts, ") "); } } - function BookingCreateComponent_div_20_Template(rf, ctx) { + function BookingCreateComponent_div_3_div_15_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div"); - i0.ɵɵelementStart(1, "div", 22); + i0.ɵɵelementStart(1, "div", 23); i0.ɵɵtext(2); i0.ɵɵpipe(3, "titlecase"); - i0.ɵɵtemplate(4, BookingCreateComponent_div_20_span_4_Template, 2, 1, "span", 23); + i0.ɵɵtemplate(4, BookingCreateComponent_div_3_div_15_span_4_Template, 2, 1, "span", 24); i0.ɵɵelementEnd(); i0.ɵɵelementStart(5, "div"); i0.ɵɵtext(6); @@ -50222,42 +50918,117 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } if (rf & 2) { - var ctx_r4 = i0.ɵɵnextContext(); + var ctx_r11 = i0.ɵɵnextContext(2); var tmp_1_0 = null; - var currVal_1 = (tmp_1_0 = ctx_r4.isConflictWithOccurences()) == null ? null : tmp_1_0.is_conflict; + var currVal_1 = (tmp_1_0 = ctx_r11.isConflictWithOccurences()) == null ? null : tmp_1_0.is_conflict; i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("", (ctx_r4.data == null ? null : ctx_r4.data.value == null ? null : ctx_r4.data.value.recurrence_period) === "list" ? "Specific dates" : i0.ɵɵpipeBind1(3, 7, ctx_r4.data == null ? null : ctx_r4.data.value == null ? null : ctx_r4.data.value.recurrence_period), " "); + i0.ɵɵtextInterpolate1("", (ctx_r11.data == null ? null : ctx_r11.data.value == null ? null : ctx_r11.data.value.recurrence_period) === "list" ? "Specific dates" : i0.ɵɵpipeBind1(3, 7, ctx_r11.data == null ? null : ctx_r11.data.value == null ? null : ctx_r11.data.value.recurrence_period), " "); i0.ɵɵadvance(2); i0.ɵɵproperty("ngIf", currVal_1); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Start date: ", ctx_r4.dateString, ""); + i0.ɵɵtextInterpolate1("Start date: ", ctx_r11.dateString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("End date: ", ctx_r4.endDateString, ""); + i0.ɵɵtextInterpolate1("End date: ", ctx_r11.endDateString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Time: ", ctx_r4.timeString, ""); + i0.ɵɵtextInterpolate1("Time: ", ctx_r11.timeString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate2("", ctx_r4.type, " meeting (", ctx_r4.durationString, ")"); + i0.ɵɵtextInterpolate2("", ctx_r11.type, " meeting (", ctx_r11.durationString, ")"); } } - function BookingCreateComponent_div_30_Template(rf, ctx) { + function BookingCreateComponent_div_3_Template(rf, ctx) { if (rf & 1) { - var _r15 = i0.ɵɵgetCurrentView(); + var _r16 = i0.ɵɵgetCurrentView(); + + i0.ɵɵelementStart(0, "div", 15); + i0.ɵɵelementStart(1, "div", 16); + i0.ɵɵelementStart(2, "div", 17); + i0.ɵɵelementStart(3, "div", 18); + i0.ɵɵelementStart(4, "div"); + i0.ɵɵelementStart(5, "h1"); + i0.ɵɵtext(6); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(7, "div", 19); + i0.ɵɵelementStart(8, "div"); + i0.ɵɵelementStart(9, "app-room-booking-details-form", 20); + i0.ɵɵlistener("submitForm", function BookingCreateComponent_div_3_Template_app_room_booking_details_form_submitForm_9_listener($event) { + i0.ɵɵrestoreView(_r16); + var ctx_r15 = i0.ɵɵnextContext(); + return ctx_r15.submitForm($event); + })("validateForm", function BookingCreateComponent_div_3_Template_app_room_booking_details_form_validateForm_9_listener($event) { + i0.ɵɵrestoreView(_r16); + var ctx_r17 = i0.ɵɵnextContext(); + return ctx_r17.validateForm($event); + }); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(10, "div", 21); + i0.ɵɵelementStart(11, "div"); + i0.ɵɵelementStart(12, "h2"); + i0.ɵɵtext(13); + i0.ɵɵelementEnd(); + i0.ɵɵtemplate(14, BookingCreateComponent_div_3_div_14_Template, 7, 4, "div", 22); + i0.ɵɵtemplate(15, BookingCreateComponent_div_3_div_15_Template, 13, 9, "div", 22); + i0.ɵɵelementStart(16, "div"); + i0.ɵɵelementStart(17, "div"); + i0.ɵɵtext(18); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(19, "div"); + i0.ɵɵtext(20); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(21, "div"); + i0.ɵɵtext(22); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + } + + if (rf & 2) { + var ctx_r2 = i0.ɵɵnextContext(); + i0.ɵɵadvance(6); + i0.ɵɵtextInterpolate1("Book ", ctx_r2.booking == null ? null : ctx_r2.booking.space == null ? null : ctx_r2.booking.space.local_name, ""); + i0.ɵɵadvance(3); + i0.ɵɵproperty("booking", ctx_r2.booking)("triggerSubmit", ctx_r2.submitTimestamp); + i0.ɵɵadvance(4); + i0.ɵɵtextInterpolate1("", (ctx_r2.data == null ? null : ctx_r2.data.value == null ? null : ctx_r2.data.value.is_recurrent) ? "Recurring" : "Room", " Booking Details"); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", !(ctx_r2.data == null ? null : ctx_r2.data.value == null ? null : ctx_r2.data.value.is_recurrent)); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r2.data == null ? null : ctx_r2.data.value == null ? null : ctx_r2.data.value.is_recurrent); + i0.ɵɵadvance(3); + i0.ɵɵtextInterpolate2("Address: ", ctx_r2.building == null ? null : ctx_r2.building.address, ", ", ctx_r2.building == null ? null : ctx_r2.building.city, ""); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate1("Room: ", ctx_r2.booking == null ? null : ctx_r2.booking.space == null ? null : ctx_r2.booking.space.local_name, ""); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate1("Capacity: ", ctx_r2.booking == null ? null : ctx_r2.booking.space == null ? null : ctx_r2.booking.space.capacity, ""); + } + } + + function BookingCreateComponent_div_4_div_2_Template(rf, ctx) { + if (rf & 1) { + var _r21 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "div"); - i0.ɵɵelementStart(1, "button", 25); - i0.ɵɵlistener("click", function BookingCreateComponent_div_30_Template_button_click_1_listener() { - i0.ɵɵrestoreView(_r15); - var ctx_r14 = i0.ɵɵnextContext(); - return ctx_r14.goToBackRoute(); + i0.ɵɵelementStart(1, "button", 28); + i0.ɵɵlistener("click", function BookingCreateComponent_div_4_div_2_Template_button_click_1_listener() { + i0.ɵɵrestoreView(_r21); + var ctx_r20 = i0.ɵɵnextContext(2); + return ctx_r20.goToBackRoute(); }); i0.ɵɵtext(2, "Back"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(3, "button", 26); - i0.ɵɵlistener("click", function BookingCreateComponent_div_30_Template_button_click_3_listener() { - i0.ɵɵrestoreView(_r15); - var ctx_r16 = i0.ɵɵnextContext(); - return ctx_r16.createBooking(); + i0.ɵɵelementStart(3, "button", 29); + i0.ɵɵlistener("click", function BookingCreateComponent_div_4_div_2_Template_button_click_3_listener() { + i0.ɵɵrestoreView(_r21); + var ctx_r22 = i0.ɵɵnextContext(2); + return ctx_r22.createBooking(); }); i0.ɵɵtext(4); i0.ɵɵelementEnd(); @@ -50265,35 +51036,35 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } if (rf & 2) { - var ctx_r5 = i0.ɵɵnextContext(); + var ctx_r18 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); - i0.ɵɵproperty("disabled", ctx_r5.loading); + i0.ɵɵproperty("disabled", ctx_r18.loading); i0.ɵɵadvance(2); - i0.ɵɵclassProp("disabled", ctx_r5.invalidForm); - i0.ɵɵproperty("disabled", ctx_r5.loading || ctx_r5.invalidForm); + i0.ɵɵclassProp("disabled", ctx_r18.invalidForm); + i0.ɵɵproperty("disabled", ctx_r18.loading || ctx_r18.invalidForm); i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate2("", ctx_r5.isEditSeries ? "Update" : "Create", " Booking", ctx_r5.is_request ? " Request" : "", ""); + i0.ɵɵtextInterpolate2("", ctx_r18.isEditSeries ? "Update" : "Create", " Booking", ctx_r18.is_request ? " Request" : "", ""); } } - function BookingCreateComponent_div_31_Template(rf, ctx) { + function BookingCreateComponent_div_4_div_3_Template(rf, ctx) { if (rf & 1) { - var _r18 = i0.ɵɵgetCurrentView(); + var _r24 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "div"); - i0.ɵɵelementStart(1, "button", 25); - i0.ɵɵlistener("click", function BookingCreateComponent_div_31_Template_button_click_1_listener() { - i0.ɵɵrestoreView(_r18); - var ctx_r17 = i0.ɵɵnextContext(); - return ctx_r17.discardChanges(); + i0.ɵɵelementStart(1, "button", 28); + i0.ɵɵlistener("click", function BookingCreateComponent_div_4_div_3_Template_button_click_1_listener() { + i0.ɵɵrestoreView(_r24); + var ctx_r23 = i0.ɵɵnextContext(2); + return ctx_r23.discardChanges(); }); i0.ɵɵtext(2, "Back"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(3, "button", 26); - i0.ɵɵlistener("click", function BookingCreateComponent_div_31_Template_button_click_3_listener() { - i0.ɵɵrestoreView(_r18); - var ctx_r19 = i0.ɵɵnextContext(); - return ctx_r19.createBooking(); + i0.ɵɵelementStart(3, "button", 29); + i0.ɵɵlistener("click", function BookingCreateComponent_div_4_div_3_Template_button_click_3_listener() { + i0.ɵɵrestoreView(_r24); + var ctx_r25 = i0.ɵɵnextContext(2); + return ctx_r25.createBooking(); }); i0.ɵɵtext(4, "Update Booking"); i0.ɵɵelementEnd(); @@ -50301,12 +51072,38 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } if (rf & 2) { - var ctx_r6 = i0.ɵɵnextContext(); + var ctx_r19 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); - i0.ɵɵproperty("disabled", ctx_r6.loading); + i0.ɵɵproperty("disabled", ctx_r19.loading); i0.ɵɵadvance(2); - i0.ɵɵclassProp("disabled", ctx_r6.invalidForm); - i0.ɵɵproperty("disabled", ctx_r6.loading || ctx_r6.invalidForm); + i0.ɵɵclassProp("disabled", ctx_r19.invalidForm); + i0.ɵɵproperty("disabled", ctx_r19.loading || ctx_r19.invalidForm); + } + } + + var _c0 = function _c0(a0) { + return { + "fixed": a0 + }; + }; + + function BookingCreateComponent_div_4_Template(rf, ctx) { + if (rf & 1) { + i0.ɵɵelementStart(0, "div", 26); + i0.ɵɵelementStart(1, "div", 27); + i0.ɵɵtemplate(2, BookingCreateComponent_div_4_div_2_Template, 5, 6, "div", 22); + i0.ɵɵtemplate(3, BookingCreateComponent_div_4_div_3_Template, 5, 4, "div", 22); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + } + + if (rf & 2) { + var ctx_r3 = i0.ɵɵnextContext(); + i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3, _c0, !ctx_r3.placeIntoModal)); + i0.ɵɵadvance(2); + i0.ɵɵproperty("ngIf", !ctx_r3.modal && !ctx_r3.placeIntoModal); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r3.placeIntoModal); } } @@ -50399,69 +51196,18 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons type: BookingCreateComponent, selectors: [["app-booking-create"]], features: [i0.ɵɵInheritDefinitionFeature], - decls: 33, - vars: 21, - consts: [[1, "mck-column", "mck-content-expand", "mck-content-page-container", "booking-form-base-container"], ["class", "fixed warning banner", 4, "ngIf"], [1, "header"], [3, "mode", "modal", "noSurvey", "closeCallback", 4, "ngIf"], [3, "mode", "back", 4, "ngIf"], [1, "mck-column", "mck-center", "results-container", "mck-scroll"], [1, "mck-column", "mck-scroll", "mck-content-expand-width"], [1, "booking-content", "mck-column", "mck-center", "mck-content-body"], [1, "details"], [1, "section"], [3, "booking", "triggerSubmit", "submitForm", "validateForm"], [1, "section", "bottom"], [4, "ngIf"], [1, "bottom-panel"], [1, "buttons"], [3, "confirmed", "loading", "modal", "dataForConfirmation", "callback"], [1, "fixed", "warning", "banner"], ["src", "assets/icon/booking_cancelled.svg"], [1, "banner-text"], ["src", "assets/icon/close-red.svg", 3, "click"], [3, "mode", "modal", "noSurvey", "closeCallback"], [3, "mode", "back"], [1, "rec-details-period"], [3, "click", 4, "ngIf"], [3, "click"], ["mat-button", "", "color", "secondary", 1, "mck-secondary-button", 3, "disabled", "click"], ["mat-button", "", "color", "primary", 1, "mck-primary-button", 3, "disabled", "click"]], + decls: 6, + vars: 13, + consts: [[1, "mck-column", "mck-content-expand", "mck-content-page-container", "booking-form-base-container"], ["class", "fixed warning banner", 4, "ngIf"], ["class", "header", 4, "ngIf"], ["class", "mck-column mck-center results-container mck-scroll", 4, "ngIf"], ["class", "bottom-panel", 3, "ngClass", 4, "ngIf"], [3, "confirmed", "loading", "placeIntoModal", "modal", "dataForConfirmation", "callback"], [1, "fixed", "warning", "banner"], ["src", "assets/icon/booking_cancelled.svg"], [1, "banner-text"], ["src", "assets/icon/close-red.svg", 3, "click"], [1, "header"], [3, "mode", "modal", "noSurvey", "closeCallback", 4, "ngIf"], [3, "mode", "back", 4, "ngIf"], [3, "mode", "modal", "noSurvey", "closeCallback"], [3, "mode", "back"], [1, "mck-column", "mck-center", "results-container", "mck-scroll"], [1, "mck-column", "mck-scroll", "mck-content-expand-width"], [1, "booking-content", "mck-column", "mck-center", "mck-content-body"], [1, "details"], [1, "section"], [3, "booking", "triggerSubmit", "submitForm", "validateForm"], [1, "section", "bottom"], [4, "ngIf"], [1, "rec-details-period"], [3, "click", 4, "ngIf"], [3, "click"], [1, "bottom-panel", 3, "ngClass"], [1, "buttons"], ["mat-button", "", "color", "secondary", 1, "mck-secondary-button", 3, "disabled", "click"], ["mat-button", "", "color", "primary", 1, "mck-primary-button", 3, "disabled", "click"]], template: function BookingCreateComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 0); i0.ɵɵtemplate(1, BookingCreateComponent_div_1_Template, 5, 1, "div", 1); - i0.ɵɵelementStart(2, "div", 2); - i0.ɵɵtemplate(3, BookingCreateComponent_a_topbar_header_3_Template, 1, 3, "a-topbar-header", 3); - i0.ɵɵtemplate(4, BookingCreateComponent_a_topbar_header_4_Template, 1, 2, "a-topbar-header", 4); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(5, "div", 5); - i0.ɵɵelementStart(6, "div", 6); - i0.ɵɵelementStart(7, "div", 7); - i0.ɵɵelementStart(8, "div", 8); - i0.ɵɵelementStart(9, "div"); - i0.ɵɵelementStart(10, "h1"); - i0.ɵɵtext(11); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(12, "div", 9); - i0.ɵɵelementStart(13, "div"); - i0.ɵɵelementStart(14, "app-room-booking-details-form", 10); - i0.ɵɵlistener("submitForm", function BookingCreateComponent_Template_app_room_booking_details_form_submitForm_14_listener($event) { - return ctx.submitForm($event); - })("validateForm", function BookingCreateComponent_Template_app_room_booking_details_form_validateForm_14_listener($event) { - return ctx.validateForm($event); - }); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(15, "div", 11); - i0.ɵɵelementStart(16, "div"); - i0.ɵɵelementStart(17, "h2"); - i0.ɵɵtext(18); - i0.ɵɵelementEnd(); - i0.ɵɵtemplate(19, BookingCreateComponent_div_19_Template, 7, 4, "div", 12); - i0.ɵɵtemplate(20, BookingCreateComponent_div_20_Template, 13, 9, "div", 12); - i0.ɵɵelementStart(21, "div"); - i0.ɵɵelementStart(22, "div"); - i0.ɵɵtext(23); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(24, "div"); - i0.ɵɵtext(25); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(26, "div"); - i0.ɵɵtext(27); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(28, "div", 13); - i0.ɵɵelementStart(29, "div", 14); - i0.ɵɵtemplate(30, BookingCreateComponent_div_30_Template, 5, 6, "div", 12); - i0.ɵɵtemplate(31, BookingCreateComponent_div_31_Template, 5, 4, "div", 12); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(32, "booking-confirmation", 15); - i0.ɵɵlistener("callback", function BookingCreateComponent_Template_booking_confirmation_callback_32_listener() { + i0.ɵɵtemplate(2, BookingCreateComponent_div_2_Template, 3, 2, "div", 2); + i0.ɵɵtemplate(3, BookingCreateComponent_div_3_Template, 23, 10, "div", 3); + i0.ɵɵtemplate(4, BookingCreateComponent_div_4_Template, 4, 5, "div", 4); + i0.ɵɵelementStart(5, "booking-confirmation", 5); + i0.ɵɵlistener("callback", function BookingCreateComponent_Template_booking_confirmation_callback_5_listener() { return ctx.callback(); }); i0.ɵɵelementEnd(); @@ -50469,40 +51215,22 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } if (rf & 2) { - i0.ɵɵclassProp("fullpage-modal", ctx.modal); + i0.ɵɵclassProp("fullpage-modal", ctx.modal)("limit-height", ctx.placeIntoModal); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.showWarningBanner); - i0.ɵɵadvance(2); - i0.ɵɵproperty("ngIf", ctx.modal); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", !ctx.modal); - i0.ɵɵadvance(7); - i0.ɵɵtextInterpolate1("Book ", ctx.booking == null ? null : ctx.booking.space == null ? null : ctx.booking.space.local_name, ""); - i0.ɵɵadvance(3); - i0.ɵɵproperty("booking", ctx.booking)("triggerSubmit", ctx.submitTimestamp); - i0.ɵɵadvance(4); - i0.ɵɵtextInterpolate1("", (ctx.data == null ? null : ctx.data.value == null ? null : ctx.data.value.is_recurrent) ? "Recurring" : "Room", " Booking Details"); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", !(ctx.data == null ? null : ctx.data.value == null ? null : ctx.data.value.is_recurrent)); + i0.ɵɵproperty("ngIf", !ctx.placeIntoModal); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.data == null ? null : ctx.data.value == null ? null : ctx.data.value.is_recurrent); - i0.ɵɵadvance(3); - i0.ɵɵtextInterpolate2("Address: ", ctx.building == null ? null : ctx.building.address, ", ", ctx.building == null ? null : ctx.building.city, ""); - i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Room: ", ctx.booking == null ? null : ctx.booking.space == null ? null : ctx.booking.space.local_name, ""); - i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Capacity: ", ctx.booking == null ? null : ctx.booking.space == null ? null : ctx.booking.space.capacity, ""); - i0.ɵɵadvance(3); - i0.ɵɵproperty("ngIf", !ctx.modal); + i0.ɵɵproperty("ngIf", !ctx.confirmed && !ctx.loading); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.modal); + i0.ɵɵproperty("ngIf", !ctx.confirmed && !ctx.loading); i0.ɵɵadvance(1); - i0.ɵɵproperty("confirmed", ctx.confirmed)("loading", ctx.loading)("modal", ctx.modal)("dataForConfirmation", ctx.dataForConfirmation); + i0.ɵɵproperty("confirmed", ctx.confirmed)("loading", ctx.loading)("placeIntoModal", ctx.placeIntoModal)("modal", ctx.modal)("dataForConfirmation", ctx.dataForConfirmation); } }, - directives: [i1.NgIf, i2.RoomBookingDetailsFormComponent, i3.BookingConfirmationComponent, i4.TopbarHeaderComponent, i5.MatButton], + directives: [i1.NgIf, i2.BookingConfirmationComponent, i3.TopbarHeaderComponent, i4.RoomBookingDetailsFormComponent, i1.NgClass, i5.MatButton], pipes: [i1.TitleCasePipe], - styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\n\n\n\n\n\n\n.loading[_ngcontent-%COMP%] {\n background-color: rgba(255, 255, 255, 0.5);\n padding: 3em;\n}\n.booking-content[_ngcontent-%COMP%] {\n margin: 0 auto 0 auto;\n padding: 1px 20px 120px 0;\n}\n.booking-content[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 100%;\n}\n.booking-content.open[_ngcontent-%COMP%] {\n margin: 0 auto 280px auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n border: 1px solid #E6E6E6;\n background-color: white;\n padding: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 1024px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 32px;\n margin: 10px 0 40px;\n font-weight: 500;\n width: 100%;\n text-align: center;\n font-family: \"Bower\";\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-size: 16px;\n padding: 4px 0 20px 0;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n padding: 0 18px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 400;\n font-size: 16px;\n color: #333333;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 400;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n max-width: 671px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n line-height: 24px;\n padding-bottom: 15px;\n min-width: 200px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n width: 100%;\n display: block;\n color: #333333;\n margin: 0 0 20px 0;\n font-weight: 500;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n padding: 28px 20px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] .rec-details-period[_ngcontent-%COMP%] {\n cursor: pointer;\n text-decoration: underline;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background-color: white;\n padding: 20px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0px 0px 100px 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0px 0px 100px 0;\n }\n}\n.bottom-panel[_ngcontent-%COMP%] {\n position: fixed;\n bottom: 0;\n width: 100%;\n min-height: 80px;\n background-color: white;\n border: 1px solid #E6E6E6;\n z-index: 2;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 24px 16px;\n border: 1px solid #E6E6E6;\n width: 100%;\n max-width: none;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 880px;\n margin: 0 auto;\n display: flex;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex: 1;\n height: 48px;\n font-size: 16px;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 5px;\n border: 1px solid #D0D0D0;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 5px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9taXhpbnMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNwVUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQTFEQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDNUNBOztzQkFBQTtBQ1BBO0VBQ0UsMENBQUE7RUFDQSxZQUFBO0FKdUNGO0FJckNBO0VBQ0UscUJBQUE7RUFDQSx5QkFBQTtBSndDRjtBSXZDRTtFQUNFLFdBQUE7QUp5Q0o7QUl2Q0U7RUFDRSx5QkFBQTtBSnlDSjtBSXZDRTtFQUNFLHlCQUFBO0VBQ0EsdUJBQUE7RUFDQSxVQUFBO0FKeUNKO0FHNUNRO0VDQU47SUFLSSxvQkFBQTtFSjJDSjtBQUNGO0FHOUNRO0VDSE47SUFLSSxvQkFBQTtFSmdESjtBQUNGO0FJL0NJO0VBQ0UsaUJBQUE7RUFDQSxjQUFBO0FKaUROO0FJL0NJO0VBQ0UsZUFBQTtFQUNBLG1CQUFBO0VBQ0EsZ0JBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7RUFDQSxvQkFBQTtBSmlETjtBSS9DSTtFQUNFLGNBQUE7RUFDQSxlQUFBO0VBQ0EscUJBQUE7QUppRE47QUloRE07RUFDRSxlQUFBO0FKa0RSO0FJL0NJO0VBQ0UsZUFBQTtFQUNBLGdCQUFBO0VBQ0EsZUFBQTtFQUNBLGNBQUE7QUppRE47QUloRE07RUFDRSxlQUFBO0VBQ0EsZ0JBQUE7QUprRFI7QUloRE07RUFDRSxhQUFBO0VBQ0EsZUFBQTtFQUNBLGdCQUFBO0VBQ0EsY0FBQTtBSmtEUjtBSWpEUTtFQUNFLE9BQUE7RUFDQSxpQkFBQTtFQUNBLG9CQUFBO0VBQ0EsZ0JBQUE7QUptRFY7QUlqRFE7RUFDRSxXQUFBO0VBQ0EsY0FBQTtFQUNBLGNBQUE7RUFDQSxrQkFBQTtFQUNBLGdCQUFBO0VBQ0EscUdGdEJZO0FGeUV0QjtBQ25IWTtFRzBESjtJQVFJLGVBQUE7RUpxRFY7QUFDRjtBQ3hIWTtFRzBESjtJQVFJLGVBQUE7RUowRFY7QUFDRjtBSXZETTtFQUNFLHlCQUFBO0VBQ0Esa0JBQUE7QUp5RFI7QUl4RFE7RUFDRSxlQUFBO0VBQ0EsMEJBQUE7QUowRFY7QUNySVk7RUdzRU47SUFRSSxxQkFBQTtFSjJEUjtBQUNGO0FDMUlZO0VHc0VOO0lBUUkscUJBQUE7RUpnRVI7QUFDRjtBSS9EUTtFQUNFLHVCQUFBO0VBQ0EsYUFBQTtBSmlFVjtBQ25KWTtFR3FGQTtJQUNFLGlCQUFBO0VKaUVaO0FBQ0Y7QUN4Slk7RUdxRkE7SUFDRSxpQkFBQTtFSnNFWjtBQUNGO0FDN0pZO0VHRVo7SUE2Rkksd0JBQUE7RUprRUY7QUFDRjtBQ2xLWTtFR0VaO0lBNkZJLHdCQUFBO0VKdUVGO0FBQ0Y7QUlyRUE7RUFDRSxlQUFBO0VBQ0EsU0FBQTtFQUNBLFdBQUE7RUFDQSxnQkFBQTtFQUNBLHVCQUFBO0VBQ0EseUJBQUE7RUFDQSxVQUFBO0FKd0VGO0FJdEVFO0VBQ0Usa0JBQUE7RUFDQSx5QkFBQTtFQUNBLFdBQUE7RUFDQSxlQUFBO0FKd0VKO0FJdEVJO0VBQ0UsZ0JBQUE7RUFDQSxjQUFBO0VBQ0EsYUFBQTtBSndFTjtBSXZFTTtFQUNFLE9BQUE7RUFDQSxZQUFBO0VBQ0EsZUFBQTtBSnlFUjtBSXZFTTtFQUNFLGlCQUFBO0VBQ0EseUJBQUE7QUp5RVI7QUl2RU07RUFDRSxnQkFBQTtBSnlFUjtBQ3hNWTtFRzJHVjtJQXdCSSxlQUFBO0VKeUVKO0VJdkVNO0lBQ0UsY0FBQTtFSnlFUjtFSXZFTTtJQUNFLGlCQUFBO0VKeUVSO0VJdkVNO0lBQ0UsZ0JBQUE7RUp5RVI7QUFDRjtBQ3ROWTtFRzJHVjtJQXdCSSxlQUFBO0VKdUZKO0VJckZNO0lBQ0UsY0FBQTtFSnVGUjtFSXJGTTtJQUNFLGlCQUFBO0VKdUZSO0VJckZNO0lBQ0UsZ0JBQUE7RUp1RlI7QUFDRjtBQ3BPWTtFR3dKUjtJQUNFLFlBQUE7RUpnRko7RUkvRUk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUppRk47QUFDRjtBQzlPWTtFR3dKUjtJQUNFLFlBQUE7RUp5Rko7RUl4Rkk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUowRk47QUFDRiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIiRwcmltYXJ5OiAjMUY0MEU2O1xuJGZvcm0tbGFiZWw6ICMwNTFDMkM7XG4kc2Vjb25kYXJ5LWxhYmVsOiAjNzY3Njc2O1xuJGJvcmRlcjogI0IzQjNCMztcbiRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkOiAjRDBEMEQwO1xuJGNoaXAtY29sb3I6ICMzMzMzMzM7XG4kcGxhY2Vob2xkZXItY29sb3I6ICM3RjdGN0Y7XG4kYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDtcbiRwYWdlLWJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4kc2VsZWN0ZWQtb3B0aW9uOiAjRTZFNkU2O1xuJGNvbG9yLWJyYW5kLXllbGxvdzogI2ZmZDA0ODtcbiRsaWdodC15ZWxsb3c6ICNmZmYzY2U7XG4kY29hY2htYXJrLXRleHQ6ICM2ZjRkMDA7XG4kZXJyb3ItY29sb3I6ICNFMTJFNDA7XG4kbm8tZmlsdGVycy1jb2xvcjogI0JDQkNCQztcbiRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjogI0Y0RjRGNDtcbiRwcmltYXJ5LWhpZ2hsaWdodDogIzIyNTFGRjtcbiRzY3JvbGxiYXItY29sb3I6ICM3NTc1NzU7XG5cbiRhdmFpbGFibGUtY29sb3I6ICM1RDlENTI7XG4kYXZhaWxhYmxlLWJ5LXJlcXVlc3QtY29sb3I6ICNGNUI1M0Y7XG4kaW4tdXNlLWNvbG9yOiAjRDQ0ODNFO1xuJG5vdC1ib29rYWJsZS1jb2xvcjogI0NDQ0NDQztcblxuJG1vZGFsLWJvZHktaGVhZGluZzogIzRENEQ0RDtcbiRhbGVydC1vdmVybGF5LWJnOiByZ2JhKDUsIDI4LCA0NCwgMC44NSk7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvYWNobWFyay1iZzogI0VCRUJGNjtcbiRjb2FjaG1hcmstZGFyay10ZXh0OiAjMUIxQjE5O1xuJGVycm9yLXRleHQ6ICNmZmY7XG5cbi8qKlxuICogU3BhY2luZ1xuICovXG5cbi8vIDRweFxuJHNwYWNpbmctc21hbGxlc3Q6IDAuMjVyZW07XG5cbi8vIDhweFxuJHNwYWNpbmcteHhzbWFsbDogMC41cmVtO1xuXG4vLyAxMnB4XG4kc3BhY2luZy14c21hbGw6IDAuNzVyZW07XG5cbi8vIDE2cHhcbiRzcGFjaW5nLXNtYWxsOiAxcmVtO1xuXG4vLyAyMHB4XG4kc3BhY2luZy1zbWFsbC1tZWRpdW06IDEuMjVyZW07XG5cbi8vIDI0cHhcbiRzcGFjaW5nLW1lZGl1bTogMS41cmVtO1xuXG4vLyAyOHB4XG4kc3BhY2luZy1tZWRpdW0tbGFyZ2U6IDEuNzVyZW07XG5cbi8vIDMycHhcbiRzcGFjaW5nLWxhcmdlOiAycmVtO1xuXG4vLyA0OHB4XG4kc3BhY2luZy14bGFyZ2U6IDNyZW07XG5cbi8vIDY0cHhcbiRzcGFjaW5nLXh4bGFyZ2U6IDRyZW07XG5cbi8vIDk2cHhcbiRzcGFjaW5nLWxhcmdlc3Q6IDZyZW07XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kZGV2aWNlLW1vYmlsZS1zaXplOiA0NTBweDtcbiRkZXZpY2UtdGFibGV0LXNpemU6IDgwMHB4O1xuJGRldmljZS1sYXB0b3Atc2l6ZTogMTAyNHB4O1xuXG4kZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZTogMTA0OHB4O1xuJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemU6IDEyODBweDtcblxuXG46ZXhwb3J0IHtcbiAgICBwcmltYXJ5OiAkcHJpbWFyeTtcbiAgICBzZWNvbmRhcnlMYWJlbDogJHNlY29uZGFyeS1sYWJlbDtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbiRpY29uLXNtYWxsOiAxNnB4O1xuJGljb24tbWVkaXVtOiAyNHB4O1xuJGljb24tbGFyZ2U6IDMycHg7XG4kaWNvbi14bGFyZ2U6IDQ4cHg7XG4iLCIvKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLmxvYWRpbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gIHBhZGRpbmc6IDNlbTtcbn1cblxuLmJvb2tpbmctY29udGVudCB7XG4gIG1hcmdpbjogMCBhdXRvIDAgYXV0bztcbiAgcGFkZGluZzogMXB4IDIwcHggMTIwcHggMDtcbn1cbi5ib29raW5nLWNvbnRlbnQgPiBkaXYge1xuICB3aWR0aDogMTAwJTtcbn1cbi5ib29raW5nLWNvbnRlbnQub3BlbiB7XG4gIG1hcmdpbjogMCBhdXRvIDI4MHB4IGF1dG87XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogNDBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMge1xuICAgIHBhZGRpbmctYm90dG9tOiA0MHB4O1xuICB9XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzID4gZGl2IHtcbiAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyBoMSB7XG4gIGZvbnQtc2l6ZTogMzJweDtcbiAgbWFyZ2luOiAxMHB4IDAgNDBweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgd2lkdGg6IDEwMCU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiQm93ZXJcIjtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgbGFiZWwge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZm9udC1zaXplOiAxNnB4O1xuICBwYWRkaW5nOiA0cHggMCAyMHB4IDA7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIGxhYmVsIHNwYW4ge1xuICBwYWRkaW5nOiAwIDE4cHg7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uIHtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGNvbG9yOiAjMzMzMzMzO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiBoMSB7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIG1heC13aWR0aDogNjcxcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiA+IGRpdiB7XG4gIGZsZXg6IDE7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMTVweDtcbiAgbWluLXdpZHRoOiAyMDBweDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYgaDIge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYgaDIge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYgaDIge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgfVxufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBwYWRkaW5nOiAyOHB4IDIwcHg7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSAucmVjLWRldGFpbHMtcGVyaW9kIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSB7XG4gICAgcGFkZGluZy1ib3R0b206IDEwMHB4O1xuICB9XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSA+IGRpdiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBwYWRkaW5nOiAyMHB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20gPiBkaXYgPiBkaXYge1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20gPiBkaXYgPiBkaXYge1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwcHggMHB4IDEwMHB4IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwcHggMHB4IDEwMHB4IDA7XG4gIH1cbn1cblxuLmJvdHRvbS1wYW5lbCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogODBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gIHotaW5kZXg6IDI7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zIHtcbiAgcGFkZGluZzogMjRweCAxNnB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiBub25lO1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiB7XG4gIG1heC13aWR0aDogODgwcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBkaXNwbGF5OiBmbGV4O1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b24ge1xuICBmbGV4OiAxO1xuICBoZWlnaHQ6IDQ4cHg7XG4gIGZvbnQtc2l6ZTogMTZweDtcbn1cbi5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gIG1hcmdpbi1yaWdodDogNXB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjRDBEMEQwO1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgbWFyZ2luLWxlZnQ6IDVweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMge1xuICAgIHBhZGRpbmc6IDE2cHggMDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbiB7XG4gICAgbWFyZ2luOiAwIDE2cHg7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMikge1xuICAgIG1hcmdpbi1sZWZ0OiA4cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm90dG9tLXBhbmVsIC5idXR0b25zIHtcbiAgICBwYWRkaW5nOiAxNnB4IDA7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b24ge1xuICAgIG1hcmdpbjogMCAxNnB4O1xuICB9XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gICAgbWFyZ2luLXJpZ2h0OiA4cHg7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgICBtYXJnaW4tbGVmdDogOHB4O1xuICB9XG59XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCwgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCAuZGV0YWlscywgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCAuZGV0YWlscyB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCwgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCAuZGV0YWlscywgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCAuZGV0YWlscyB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxufSIsIkBpbXBvcnQgXCJ2YXJzXCI7XG5cbkBtaXhpbiBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRzaXplLCAkcXVhbGlmaWVyKSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAaWYgKCRxdWFsaWZpZXIgPT0gbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSBpZiAoJHF1YWxpZmllciA9PSBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWF4LXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5AbWl4aW4gYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRtaW4sICRtYXgpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkbWluKSBhbmQgKG1heC13aWR0aDogJG1heCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIHRoaXMgaXMgYSBjb3B5IG9mIHJlc3BvbmQtdG8uIHdlIGRvbid0IHdhbnQgdG8gcHJlc2VydmUgdGhhdCBtZXRob2Qgc2luY2UgdGhlIGJyZWFrcG9pbnRzIG1heSBkaXZlcmdlIGZyb20gdGhlIG9sZCBVSS5cbkBtaXhpbiBpcy1zY3JlZW4tc2l6ZSgkbWVkaWE6IGFsbCwgJG9yaWVudGF0aW9uOiBub25lKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cblxuQG1peGluIHBhZ2UtcGFkZGluZyB7XG4gICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbDtcbn1cblxuLy8gRm9udCBNaXhpbnNcbiRmb250LW1ja2luc2V5LXNhbnM6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuJGZvbnQtdGhlaW5oYXJkdDogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4kZm9udC1ib3dlcjogXCJCb3dlclwiO1xuXG5AbWl4aW4gYm93ZXItYm9sZCB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWJvd2VyO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBtY2tpbnNleS1zYW5zIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gZGlzcGxheS0xIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiA0cmVtOyAvLyA2NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4NzsgLy8gNzZweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMiB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDYwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS00IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogM3JlbTsgLy8gNDhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE2NjsgLy8gNTZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS01IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjgzMzsgLy8gMzRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjQyOyAvLyA0MHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS03IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyOHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTEge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA0OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi43NXJlbTsgLy8gNDRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDUycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTIge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTExOyAvLyA0NHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNDhweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMyB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIyMjsgLy8gNDRweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjg4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1NTsgLy8gMjhweFxuICAgIH1cbn1cblxuQG1peGluIGJvZHktZGVmYXVsdCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNnB4XG4gICAgfVxufVxuXG4vLy8gRG9lc250IGV4aXN0IGluIE1EUy5cbkBtaXhpbiBib2R5LXRpbnkge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtOyAvLyAxMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjRweFxuICAgIH1cbn1cblxuQG1peGluIGZvcm0tbGFiZWwge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LXRoZWluaGFyZHQ7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGNvbG9yOiAkcGxhY2Vob2xkZXItY29sb3I7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbn1cblxuQG1peGluIGNoaXAtbGFiZWwge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBjaGVja2JveC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGNvbG9yOiBibGFjaztcbn1cblxuLy8gYm9yZGVyc1xuXG5AbWl4aW4gbWNrLWNoZWNrYm94LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay10aGluLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXItbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBib3JkZXItY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudC1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuXG4vLyBmdW5jdGlvbnNcblxuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG5AbWl4aW4gbWF4LWxpbmVzKCRjb3VudCkge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiAkY291bnQ7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbn1cblxuLy8gaW1hZ2VzXG5AbWl4aW4gbWNrLWljb24oJHdpZHRoLCAkYXNzZXQsICRoZWlnaHQ6ICR3aWR0aCwgICRhc3NldFBhdGg6IFwibGlicy91aS9zcmMvbGliL2ljb25zXCIsKSB7XG4gICAgd2lkdGg6ICR3aWR0aDtcbiAgICBoZWlnaHQ6ICRoZWlnaHQ7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiI3skYXNzZXRQYXRofS8jeyRhc3NldH1cIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuXG5cbkBtaXhpbiBtY2stc21hbGwtaWNvbigkbW9iaWxlLWFzc2V0LCAkZGVza3RvcC1hc3NldDogJG1vYmlsZS1hc3NldCkge1xuICAgIEBpbmNsdWRlIG1jay1pY29uKDE2cHgsICRhc3NldDogJG1vYmlsZS1hc3NldCk7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICRhc3NldDogJGRlc2t0b3AtYXNzZXQpO1xuICAgIH1cbn1cblxuLy8gc2tlbGV0b25cbkBtaXhpbiBza2VsZXRvbi1iZyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWltYWdlLXNpemUge1xuICAgIHdpZHRoOiA4MXB4O1xuICAgIGhlaWdodDogODJweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDIxOXB4O1xuICAgICAgICBoZWlnaHQ6IDExOXB4O1xuICAgIH1cbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLXN0YXR1cy1zaXplIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMTE3cHg7XG4gICAgICAgIGhlaWdodDogNzhweDtcbiAgICB9XG59XG4iLCIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRjb2xvci1icmFuZC1lbGVjdHJpYy1ibHVlOiAjMjI1MWZmO1xuJGNvbG9yLWJyYW5kLWRlZXAtYmx1ZTogIzA1MWMyYztcbiRjb2xvci1icmFuZC1jeWFuOiAjMDBhOWY0O1xuXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGZvbnQtZGFyazogIzAwMDtcbiRmb250LWxpZ2h0OiAjZmZmO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcbiRncmVlbjE6ICMyMTk2NTM7XG5cbiRwZW5kaW5nOiAjZmZiMzAwO1xuJHBlbmRpbmctbGlnaHQ6IGxpZ2h0ZW4oJHBlbmRpbmcsIDEwKTtcbiRwZW5kaW5nLWRhcms6IGRhcmtlbigkcGVuZGluZywgMTApO1xuXG4kZXJyb3I6ICNlNTM5MzU7XG4kZXJyb3ItbGlnaHQ6IGxpZ2h0ZW4oJGVycm9yLCAxMCk7XG4kZXJyb3ItZGFyazogZGFya2VuKCRlcnJvciwgMTApO1xuXG4kY29sb3ItcHJpbWFyeTogIzE5MzdlYTtcbiRjb2xvci1wcmltYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG4kY29sb3ItcHJpbWFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcblxuJGNvbG9yLXNlY29uZGFyeTogIzQyODVGNDtcbiRjb2xvci1zZWNvbmRhcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuJGNvbG9yLXNlY29uZGFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuXG4kYmFja2dyb3VuZDogI2YwZjBmMDtcbiRmb290ZXItYmFjazogIzI2MzIzODtcbiRoZWFkZXItYmFjazogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMDUxQzJDLCAjMDUxQzJDIDQwJSwgIzBCMjQ1MyA2MCUsICMxRjQwRTYgMTAwJSk7XG5cbiRjb2xvci10ZXJuYXJ5OiAjMDUxYzJjO1xuXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cblxuJGZvbnQtc3RhY2s6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuXG4kaGVhZGluZy1mb250OiBcIkxhcmlzaE1jS2luc2V5XCIsICdHZW9yZ2lhJywgc2VyaWY7XG4kZm9udDogJGZvbnQtc3RhY2s7XG5cbiRmb250LWZhbWlseS1wcmltYXJ5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbiRmb250LWZhbWlseS1zZWNvbmRhcnk6IFwiQm93ZXJcIiwgR2VvcmdpYSwgXCJUaW1lcyBOZXcgUm9tYW5cIiBzZXJpZjtcblxuJGJhc2Utc2l6ZTogMTZweDtcbiR0YWJsZXQtc2l6ZTogMTZweDtcbiRtb2JpbGUtc2l6ZTogMTZweDtcblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbiRicmVhay1tb2JpbGU6IDQ1MHB4O1xuJGJyZWFrLXRhYmxldDogODAwcHg7XG4kYnJlYWstbGFwdG9wOiAxMDI0cHg7XG5cbiRicmVhay1sYW5kc2NhcGUtbW9iaWxlOiA4MDBweDtcbiRicmVhay1sYW5kc2NhcGUtdGFibGV0OiAxMDQ4cHg7XG4kYnJlYWstbGFuZHNjYXBlLWxhcHRvcDogMTI4MHB4O1xuIiwiQGltcG9ydCAnLi92YXJpYWJsZXMnO1xuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbkBtaXhpbiBib3gtc2hhZG93KCRjb2xvcjogIzAwMCwgJGRlcHRoOiAxKSB7XG4gICAgYm94LXNoYWRvdzogMCAxcHggM3B4IDFweCAqICgkZGVwdGggLSAxKSByZ2JhKCMwMDAsIC4yKSxcbiAgICAgICAgICAgICAgICAwIDFweCAxcHggMCByZ2JhKCMwMDAsIC4xNCksXG4gICAgICAgICAgICAgICAgMCAycHggMXB4IC0xcHggcmdiYSgjMDAwLCAuMTIpO1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuQG1peGluIHJlc3BvbmQtdG8oJG1lZGlhKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9ICBAZWxzZSBpZiAkbWVkaWEgPT0gbGF0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9QGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIkBpbXBvcnQgXCJsaWJzL3VpL3NyYy9saWIvbWl4aW5zXCI7XG5AaW1wb3J0ICd2YXJpYWJsZXMnO1xuQGltcG9ydCAnbWl4aW5zJztcblxuXG5cblxuLmxvYWRpbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCNmZmZmZmYsIDAuNSk7XG4gIHBhZGRpbmc6IDNlbTtcbn1cbi5ib29raW5nLWNvbnRlbnQge1xuICBtYXJnaW46IDAgYXV0byAwIGF1dG87XG4gIHBhZGRpbmc6IDFweCAyMHB4IDEyMHB4IDA7XG4gID5kaXYge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gICYub3BlbiB7XG4gICAgbWFyZ2luOiAwIGF1dG8gMjgwcHggYXV0bztcbiAgfVxuICAuZGV0YWlscyB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIEBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNDBweDtcbiAgICB9XG4gICAgPmRpdiB7XG4gICAgICBtYXgtd2lkdGg6IDEwMjRweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIH1cbiAgICBoMSB7XG4gICAgICBmb250LXNpemU6IDMycHg7XG4gICAgICBtYXJnaW46IDEwcHggMCA0MHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgZm9udC1mYW1pbHk6ICdCb3dlcic7XG4gICAgfVxuICAgIGxhYmVsIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgcGFkZGluZzogNHB4IDAgMjBweCAwO1xuICAgICAgc3BhbiB7XG4gICAgICAgIHBhZGRpbmc6IDAgMThweDtcbiAgICAgIH1cbiAgICB9XG4gICAgLnNlY3Rpb24ge1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgICAgaDEge1xuICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICB9XG4gICAgICA+ZGl2IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBtYXgtd2lkdGg6IDY3MXB4O1xuICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgICAgPmRpdiB7XG4gICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICBsaW5lLWhlaWdodDogMjRweDtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTVweDtcbiAgICAgICAgICBtaW4td2lkdGg6IDIwMHB4O1xuICAgICAgICB9XG4gICAgICAgIGgyIHtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgICAgICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LXByaW1hcnk7XG4gICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgICAgfVxuICAgICAgICB9ICAgICAgIFxuICAgICAgfVxuICAgICAgJi5ib3R0b20ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICAgICAgICBwYWRkaW5nOiAyOHB4IDIwcHg7XG4gICAgICAgIC5yZWMtZGV0YWlscy1wZXJpb2Qge1xuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG4gICAgICAgIH1cbiAgICAgICAgPmRpdiB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgICAgcGFkZGluZzogMjBweDtcblxuICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgPiBkaXZ7XG4gICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgIHBhZGRpbmc6IDBweCAwcHggMTAwcHggMDtcbiAgfVxufVxuLmJvdHRvbS1wYW5lbCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogODBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gIHotaW5kZXg6IDI7XG4gIFxuICAuYnV0dG9ucyB7XG4gICAgcGFkZGluZzogMjRweCAxNnB4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiBub25lO1xuXG4gICAgPmRpdiB7XG4gICAgICBtYXgtd2lkdGg6IDg4MHB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYnV0dG9uIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgaGVpZ2h0OiA0OHB4O1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICB9XG4gICAgICBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gICAgICB9XG4gICAgICBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgIH1cbiAgICB9XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICBwYWRkaW5nOiAxNnB4IDA7XG4gICAgICA+ZGl2IHtcbiAgICAgICAgYnV0dG9uIHtcbiAgICAgICAgICBtYXJnaW46IDAgMTZweDtcbiAgICAgICAgfVxuICAgICAgICBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgICAgICAgfVxuICAgICAgICBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogOHB4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lcntcblxuICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcblxuICAgIC5ib29raW5nLWNvbnRlbnQsIC5tY2stc2Nyb2xse1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgLmRldGFpbHN7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgICAgfVxuICAgIH1cblxuICB9XG59Il19 */"] + styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\n\n\n\n\n\n\n.loading[_ngcontent-%COMP%] {\n background-color: rgba(255, 255, 255, 0.5);\n padding: 3em;\n}\n.booking-content[_ngcontent-%COMP%] {\n margin: 0 auto 0 auto;\n padding: 1px 0px 120px 0;\n}\n.booking-content[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 100%;\n}\n.booking-content.open[_ngcontent-%COMP%] {\n margin: 0 auto 280px auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n border: 1px solid #E6E6E6;\n background-color: white;\n padding: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 1024px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 32px;\n margin: 10px 0 40px;\n font-weight: 500;\n width: 100%;\n text-align: center;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-size: 16px;\n padding: 4px 0 20px 0;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n padding: 0 18px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 400;\n font-size: 16px;\n color: #333333;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 400;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n max-width: 671px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n line-height: 24px;\n padding-bottom: 15px;\n min-width: 200px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n width: 100%;\n display: block;\n color: #333333;\n margin: 0 0 20px 0;\n font-weight: 500;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n padding: 28px 20px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] .rec-details-period[_ngcontent-%COMP%] {\n cursor: pointer;\n text-decoration: underline;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background-color: white;\n padding: 20px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0 0 0 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0 0 0 0;\n }\n}\n.bottom-panel[_ngcontent-%COMP%] {\n position: absolute;\n bottom: 0;\n width: 100%;\n min-height: 80px;\n background-color: white;\n border: 1px solid #E6E6E6;\n z-index: 2;\n flex-direction: row;\n display: flex;\n align-items: center;\n}\n.bottom-panel.fixed[_ngcontent-%COMP%] {\n position: fixed !important;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n width: 100%;\n max-width: none;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 880px;\n margin: 0 auto;\n display: flex;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex: 1;\n height: 48px;\n font-size: 16px;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 5px;\n border: 1px solid #D0D0D0;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 5px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n.booking-form-base-container.limit-height[_ngcontent-%COMP%] {\n height: 84vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-form-base-container.limit-height[_ngcontent-%COMP%] {\n height: 95vh;\n max-height: 886px;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-form-base-container.limit-height[_ngcontent-%COMP%] {\n height: 95vh;\n max-height: 886px;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9taXhpbnMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNwVUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQTFEQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDNUNBOztzQkFBQTtBQ1BBO0VBQ0UsMENBQUE7RUFDQSxZQUFBO0FKdUNGO0FJckNBO0VBQ0UscUJBQUE7RUFDQSx3QkFBQTtBSndDRjtBSXZDRTtFQUNFLFdBQUE7QUp5Q0o7QUl2Q0U7RUFDRSx5QkFBQTtBSnlDSjtBSXZDRTtFQUNFLHlCQUFBO0VBQ0EsdUJBQUE7RUFDQSxVQUFBO0FKeUNKO0FHNUNRO0VDQU47SUFLSSxvQkFBQTtFSjJDSjtBQUNGO0FHOUNRO0VDSE47SUFLSSxvQkFBQTtFSmdESjtBQUNGO0FJL0NJO0VBQ0UsaUJBQUE7RUFDQSxjQUFBO0FKaUROO0FJL0NJO0VBQ0UsZUFBQTtFQUNBLG1CQUFBO0VBQ0EsZ0JBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7QUppRE47QUk5Q0k7RUFDRSxjQUFBO0VBQ0EsZUFBQTtFQUNBLHFCQUFBO0FKZ0ROO0FJL0NNO0VBQ0UsZUFBQTtBSmlEUjtBSTlDSTtFQUNFLGVBQUE7RUFDQSxnQkFBQTtFQUNBLGVBQUE7RUFDQSxjQUFBO0FKZ0ROO0FJL0NNO0VBQ0UsZUFBQTtFQUNBLGdCQUFBO0FKaURSO0FJL0NNO0VBQ0UsYUFBQTtFQUNBLGVBQUE7RUFDQSxnQkFBQTtFQUNBLGNBQUE7QUppRFI7QUloRFE7RUFDRSxPQUFBO0VBQ0EsaUJBQUE7RUFDQSxvQkFBQTtFQUNBLGdCQUFBO0FKa0RWO0FJaERRO0VBQ0UsV0FBQTtFQUNBLGNBQUE7RUFDQSxjQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLHFHRnRCWTtBRndFdEI7QUNsSFk7RUcwREo7SUFRSSxlQUFBO0VKb0RWO0FBQ0Y7QUN2SFk7RUcwREo7SUFRSSxlQUFBO0VKeURWO0FBQ0Y7QUl0RE07RUFDRSx5QkFBQTtFQUNBLGtCQUFBO0FKd0RSO0FJdkRRO0VBQ0UsZUFBQTtFQUNBLDBCQUFBO0FKeURWO0FDcElZO0VHc0VOO0lBUUkscUJBQUE7RUowRFI7QUFDRjtBQ3pJWTtFR3NFTjtJQVFJLHFCQUFBO0VKK0RSO0FBQ0Y7QUk5RFE7RUFDRSx1QkFBQTtFQUNBLGFBQUE7QUpnRVY7QUNsSlk7RUdxRkE7SUFDRSxpQkFBQTtFSmdFWjtBQUNGO0FDdkpZO0VHcUZBO0lBQ0UsaUJBQUE7RUpxRVo7QUFDRjtBQzVKWTtFR0VaO0lBNkZJLGdCQUFBO0VKaUVGO0FBQ0Y7QUNqS1k7RUdFWjtJQTZGSSxnQkFBQTtFSnNFRjtBQUNGO0FJcEVBO0VBQ0Usa0JBQUE7RUFDQSxTQUFBO0VBQ0EsV0FBQTtFQUNBLGdCQUFBO0VBQ0EsdUJBQUE7RUFDQSx5QkFBQTtFQUNBLFVBQUE7RUFDQSxtQkFBQTtFQUNBLGFBQUE7RUFDQSxtQkFBQTtBSnVFRjtBSXJFRTtFQUNFLDBCQUFBO0FKdUVKO0FJcEVFO0VBR0UsV0FBQTtFQUNBLGVBQUE7QUpvRUo7QUlsRUk7RUFDRSxnQkFBQTtFQUNBLGNBQUE7RUFDQSxhQUFBO0FKb0VOO0FJbkVNO0VBQ0UsT0FBQTtFQUNBLFlBQUE7RUFDQSxlQUFBO0FKcUVSO0FJbkVNO0VBQ0UsaUJBQUE7RUFDQSx5QkFBQTtBSnFFUjtBSW5FTTtFQUNFLGdCQUFBO0FKcUVSO0FDM01ZO0VHa0hWO0lBd0JJLGVBQUE7RUpxRUo7RUluRU07SUFDRSxjQUFBO0VKcUVSO0VJbkVNO0lBQ0UsaUJBQUE7RUpxRVI7RUluRU07SUFDRSxnQkFBQTtFSnFFUjtBQUNGO0FDek5ZO0VHa0hWO0lBd0JJLGVBQUE7RUptRko7RUlqRk07SUFDRSxjQUFBO0VKbUZSO0VJakZNO0lBQ0UsaUJBQUE7RUptRlI7RUlqRk07SUFDRSxnQkFBQTtFSm1GUjtBQUNGO0FJMUVFO0VBRUUsWUFBQTtBSjRFSjtBQzNPWTtFR29LUjtJQUNFLFlBQUE7SUFDQSxpQkFBQTtFSjBFSjtFSXZFRTtJQUNFLFlBQUE7RUp5RUo7RUl4RUk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUowRU47QUFDRjtBQ3hQWTtFR29LUjtJQUNFLFlBQUE7SUFDQSxpQkFBQTtFSnVGSjtFSXBGRTtJQUNFLFlBQUE7RUpzRko7RUlyRkk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUp1Rk47QUFDRiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIiRwcmltYXJ5OiAjMUY0MEU2O1xuJGZvcm0tbGFiZWw6ICMwNTFDMkM7XG4kc2Vjb25kYXJ5LWxhYmVsOiAjNzY3Njc2O1xuJGJvcmRlcjogI0IzQjNCMztcbiRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkOiAjRDBEMEQwO1xuJGNoaXAtY29sb3I6ICMzMzMzMzM7XG4kcGxhY2Vob2xkZXItY29sb3I6ICM3RjdGN0Y7XG4kYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDtcbiRwYWdlLWJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4kc2VsZWN0ZWQtb3B0aW9uOiAjRTZFNkU2O1xuJGNvbG9yLWJyYW5kLXllbGxvdzogI2ZmZDA0ODtcbiRsaWdodC15ZWxsb3c6ICNmZmYzY2U7XG4kY29hY2htYXJrLXRleHQ6ICM2ZjRkMDA7XG4kZXJyb3ItY29sb3I6ICNFMTJFNDA7XG4kbm8tZmlsdGVycy1jb2xvcjogI0JDQkNCQztcbiRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjogI0Y0RjRGNDtcbiRwcmltYXJ5LWhpZ2hsaWdodDogIzIyNTFGRjtcbiRzY3JvbGxiYXItY29sb3I6ICM3NTc1NzU7XG5cbiRhdmFpbGFibGUtY29sb3I6ICM1RDlENTI7XG4kYXZhaWxhYmxlLWJ5LXJlcXVlc3QtY29sb3I6ICNGNUI1M0Y7XG4kaW4tdXNlLWNvbG9yOiAjRDQ0ODNFO1xuJG5vdC1ib29rYWJsZS1jb2xvcjogI0NDQ0NDQztcblxuJG1vZGFsLWJvZHktaGVhZGluZzogIzRENEQ0RDtcbiRhbGVydC1vdmVybGF5LWJnOiByZ2JhKDUsIDI4LCA0NCwgMC44NSk7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvYWNobWFyay1iZzogI0VCRUJGNjtcbiRjb2FjaG1hcmstZGFyay10ZXh0OiAjMUIxQjE5O1xuJGVycm9yLXRleHQ6ICNmZmY7XG5cbi8qKlxuICogU3BhY2luZ1xuICovXG5cbi8vIDRweFxuJHNwYWNpbmctc21hbGxlc3Q6IDAuMjVyZW07XG5cbi8vIDhweFxuJHNwYWNpbmcteHhzbWFsbDogMC41cmVtO1xuXG4vLyAxMnB4XG4kc3BhY2luZy14c21hbGw6IDAuNzVyZW07XG5cbi8vIDE2cHhcbiRzcGFjaW5nLXNtYWxsOiAxcmVtO1xuXG4vLyAyMHB4XG4kc3BhY2luZy1zbWFsbC1tZWRpdW06IDEuMjVyZW07XG5cbi8vIDI0cHhcbiRzcGFjaW5nLW1lZGl1bTogMS41cmVtO1xuXG4vLyAyOHB4XG4kc3BhY2luZy1tZWRpdW0tbGFyZ2U6IDEuNzVyZW07XG5cbi8vIDMycHhcbiRzcGFjaW5nLWxhcmdlOiAycmVtO1xuXG4vLyA0OHB4XG4kc3BhY2luZy14bGFyZ2U6IDNyZW07XG5cbi8vIDY0cHhcbiRzcGFjaW5nLXh4bGFyZ2U6IDRyZW07XG5cbi8vIDk2cHhcbiRzcGFjaW5nLWxhcmdlc3Q6IDZyZW07XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kZGV2aWNlLW1vYmlsZS1zaXplOiA0NTBweDtcbiRkZXZpY2UtdGFibGV0LXNpemU6IDgwMHB4O1xuJGRldmljZS1sYXB0b3Atc2l6ZTogMTAyNHB4O1xuXG4kZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZTogMTA0OHB4O1xuJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemU6IDEyODBweDtcblxuXG46ZXhwb3J0IHtcbiAgICBwcmltYXJ5OiAkcHJpbWFyeTtcbiAgICBzZWNvbmRhcnlMYWJlbDogJHNlY29uZGFyeS1sYWJlbDtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbiRpY29uLXNtYWxsOiAxNnB4O1xuJGljb24tbWVkaXVtOiAyNHB4O1xuJGljb24tbGFyZ2U6IDMycHg7XG4kaWNvbi14bGFyZ2U6IDQ4cHg7XG4iLCIvKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLmxvYWRpbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gIHBhZGRpbmc6IDNlbTtcbn1cblxuLmJvb2tpbmctY29udGVudCB7XG4gIG1hcmdpbjogMCBhdXRvIDAgYXV0bztcbiAgcGFkZGluZzogMXB4IDBweCAxMjBweCAwO1xufVxuLmJvb2tpbmctY29udGVudCA+IGRpdiB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLmJvb2tpbmctY29udGVudC5vcGVuIHtcbiAgbWFyZ2luOiAwIGF1dG8gMjgwcHggYXV0bztcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMge1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcGFkZGluZzogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMge1xuICAgIHBhZGRpbmctYm90dG9tOiA0MHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyB7XG4gICAgcGFkZGluZy1ib3R0b206IDQwcHg7XG4gIH1cbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgPiBkaXYge1xuICBtYXgtd2lkdGg6IDEwMjRweDtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIGgxIHtcbiAgZm9udC1zaXplOiAzMnB4O1xuICBtYXJnaW46IDEwcHggMCA0MHB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICB3aWR0aDogMTAwJTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyBsYWJlbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXNpemU6IDE2cHg7XG4gIHBhZGRpbmc6IDRweCAwIDIwcHggMDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgbGFiZWwgc3BhbiB7XG4gIHBhZGRpbmc6IDAgMThweDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24ge1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgY29sb3I6ICMzMzMzMzM7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uIGgxIHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBmb250LXdlaWdodDogNDAwO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgbWF4LXdpZHRoOiA2NzFweDtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uID4gZGl2ID4gZGl2IHtcbiAgZmxleDogMTtcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gIHBhZGRpbmctYm90dG9tOiAxNXB4O1xuICBtaW4td2lkdGg6IDIwMHB4O1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiBoMiB7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgY29sb3I6ICMzMzMzMzM7XG4gIG1hcmdpbjogMCAwIDIwcHggMDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiBoMiB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiBoMiB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICB9XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIHBhZGRpbmc6IDI4cHggMjBweDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tIC5yZWMtZGV0YWlscy1wZXJpb2Qge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20ge1xuICAgIHBhZGRpbmctYm90dG9tOiAxMDBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG4gIH1cbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tID4gZGl2IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDIwcHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSA+IGRpdiA+IGRpdiB7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSA+IGRpdiA+IGRpdiB7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQge1xuICAgIHBhZGRpbmc6IDAgMCAwIDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwIDAgMCAwO1xuICB9XG59XG5cbi5ib3R0b20tcGFuZWwge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDgwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICB6LWluZGV4OiAyO1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLmJvdHRvbS1wYW5lbC5maXhlZCB7XG4gIHBvc2l0aW9uOiBmaXhlZCAhaW1wb3J0YW50O1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IG5vbmU7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IHtcbiAgbWF4LXdpZHRoOiA4ODBweDtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGRpc3BsYXk6IGZsZXg7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbiB7XG4gIGZsZXg6IDE7XG4gIGhlaWdodDogNDhweDtcbiAgZm9udC1zaXplOiAxNnB4O1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMikge1xuICBtYXJnaW4tbGVmdDogNXB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyB7XG4gICAgcGFkZGluZzogMTZweCAwO1xuICB9XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uIHtcbiAgICBtYXJnaW46IDAgMTZweDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMSkge1xuICAgIG1hcmdpbi1yaWdodDogOHB4O1xuICB9XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uOm50aC1jaGlsZCgyKSB7XG4gICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMge1xuICAgIHBhZGRpbmc6IDE2cHggMDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbiB7XG4gICAgbWFyZ2luOiAwIDE2cHg7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMikge1xuICAgIG1hcmdpbi1sZWZ0OiA4cHg7XG4gIH1cbn1cblxuLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lci5saW1pdC1oZWlnaHQge1xuICBoZWlnaHQ6IDg0dmg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1mb3JtLWJhc2UtY29udGFpbmVyLmxpbWl0LWhlaWdodCB7XG4gICAgaGVpZ2h0OiA5NXZoO1xuICAgIG1heC1oZWlnaHQ6IDg4NnB4O1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCwgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCAuZGV0YWlscywgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCAuZGV0YWlscyB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIubGltaXQtaGVpZ2h0IHtcbiAgICBoZWlnaHQ6IDk1dmg7XG4gICAgbWF4LWhlaWdodDogODg2cHg7XG4gIH1cbiAgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAuYm9va2luZy1jb250ZW50LCAuYm9va2luZy1mb3JtLWJhc2UtY29udGFpbmVyIC5tY2stc2Nyb2xsIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gIH1cbiAgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzLCAuYm9va2luZy1mb3JtLWJhc2UtY29udGFpbmVyIC5tY2stc2Nyb2xsIC5kZXRhaWxzIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICB9XG59IiwiQGltcG9ydCBcInZhcnNcIjtcblxuQG1peGluIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJHNpemUsICRxdWFsaWZpZXIpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBpZiAoJHF1YWxpZmllciA9PSBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIGlmICgkcXVhbGlmaWVyID09IG1heC13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtYXgtd2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBtaXhpbiBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJG1pbiwgJG1heCkge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gdGhpcyBpcyBhIGNvcHkgb2YgcmVzcG9uZC10by4gd2UgZG9uJ3Qgd2FudCB0byBwcmVzZXJ2ZSB0aGF0IG1ldGhvZCBzaW5jZSB0aGUgYnJlYWtwb2ludHMgbWF5IGRpdmVyZ2UgZnJvbSB0aGUgb2xkIFVJLlxuQG1peGluIGlzLXNjcmVlbi1zaXplKCRtZWRpYTogYWxsLCAkb3JpZW50YXRpb246IG5vbmUpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuXG5AbWl4aW4gcGFnZS1wYWRkaW5nIHtcbiAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xufVxuXG4vLyBGb250IE1peGluc1xuJGZvbnQtbWNraW5zZXktc2FuczogXCJNY0tpbnNleSBTYW5zXCI7XG4kZm9udC10aGVpbmhhcmR0OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiRmb250LWJvd2VyOiBcIkJvd2VyXCI7XG5cbkBtaXhpbiBib3dlci1ib2xkIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtYm93ZXI7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIG1ja2luc2V5LXNhbnMge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBkaXNwbGF5LTEge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDRyZW07IC8vIDY0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTg3OyAvLyA3NnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0yIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0zIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTQge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzcmVtOyAvLyA0OHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTY2OyAvLyA1NnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDY0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTUge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuODMzOyAvLyAzNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42NDI7IC8vIDQwcHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTcge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDQ4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjc1cmVtOyAvLyA0NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNTJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICBsaW5lLWhlaWdodDogMS4xMTE7IC8vIDQ0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA0OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0zIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjIyOyAvLyA0NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy00IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy01IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyODhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy02IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTU1OyAvLyAyOHB4XG4gICAgfVxufVxuXG5AbWl4aW4gYm9keS1kZWZhdWx0IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI2cHhcbiAgICB9XG59XG5cbi8vLyBEb2VzbnQgZXhpc3QgaW4gTURTLlxuQG1peGluIGJvZHktdGlueSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07IC8vIDEycHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyMHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZm9ybS1sYWJlbCB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LWZhbWlseTogJGZvbnQtdGhlaW5oYXJkdDtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgY29sb3I6ICRwbGFjZWhvbGRlci1jb2xvcjtcbiAgICBmb250LXdlaWdodDogMzAwO1xufVxuXG5AbWl4aW4gY2hpcC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIGNoZWNrYm94LWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgY29sb3I6IGJsYWNrO1xufVxuXG4vLyBib3JkZXJzXG5cbkBtaXhpbiBtY2stY2hlY2tib3gtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAycHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLXRoaW4tYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlci1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJvcmRlci1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50LWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXItbGlnaHQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5cbi8vIGZ1bmN0aW9uc1xuXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbkBtaXhpbiBtYXgtbGluZXMoJGNvdW50KSB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAtd2Via2l0LWxpbmUtY2xhbXA6ICRjb3VudDtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuXG4vLyBpbWFnZXNcbkBtaXhpbiBtY2staWNvbigkd2lkdGgsICRhc3NldCwgJGhlaWdodDogJHdpZHRoLCAgJGFzc2V0UGF0aDogXCJsaWJzL3VpL3NyYy9saWIvaWNvbnNcIiwpIHtcbiAgICB3aWR0aDogJHdpZHRoO1xuICAgIGhlaWdodDogJGhlaWdodDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIjeyRhc3NldFBhdGh9LyN7JGFzc2V0fVwiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG59XG5cblxuQG1peGluIG1jay1zbWFsbC1pY29uKCRtb2JpbGUtYXNzZXQsICRkZXNrdG9wLWFzc2V0OiAkbW9iaWxlLWFzc2V0KSB7XG4gICAgQGluY2x1ZGUgbWNrLWljb24oMTZweCwgJGFzc2V0OiAkbW9iaWxlLWFzc2V0KTtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oMjRweCwgJGFzc2V0OiAkZGVza3RvcC1hc3NldCk7XG4gICAgfVxufVxuXG4vLyBza2VsZXRvblxuQG1peGluIHNrZWxldG9uLWJnIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItaW1hZ2Utc2l6ZSB7XG4gICAgd2lkdGg6IDgxcHg7XG4gICAgaGVpZ2h0OiA4MnB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMjE5cHg7XG4gICAgICAgIGhlaWdodDogMTE5cHg7XG4gICAgfVxufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItc3RhdHVzLXNpemUge1xuICAgIHdpZHRoOiAxMTdweDtcbiAgICBoZWlnaHQ6IDc4cHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAxMTdweDtcbiAgICAgICAgaGVpZ2h0OiA3OHB4O1xuICAgIH1cbn1cbiIsIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGNvbG9yLWJyYW5kLWVsZWN0cmljLWJsdWU6ICMyMjUxZmY7XG4kY29sb3ItYnJhbmQtZGVlcC1ibHVlOiAjMDUxYzJjO1xuJGNvbG9yLWJyYW5kLWN5YW46ICMwMGE5ZjQ7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kZm9udC1kYXJrOiAjMDAwO1xuJGZvbnQtbGlnaHQ6ICNmZmY7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuJGdyZWVuMTogIzIxOTY1MztcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2xvci1wcmltYXJ5OiAjMTkzN2VhO1xuJGNvbG9yLXByaW1hcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcbiRjb2xvci1wcmltYXJ5LWRhcms6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuXG4kY29sb3Itc2Vjb25kYXJ5OiAjNDI4NUY0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodDogbGlnaHRlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG4kY29sb3Itc2Vjb25kYXJ5LWRhcms6IGRhcmtlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG5cbiRiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuJGZvb3Rlci1iYWNrOiAjMjYzMjM4O1xuJGhlYWRlci1iYWNrOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNTFDMkMsICMwNTFDMkMgNDAlLCAjMEIyNDUzIDYwJSwgIzFGNDBFNiAxMDAlKTtcblxuJGNvbG9yLXRlcm5hcnk6ICMwNTFjMmM7XG5cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuXG4kZm9udC1zdGFjazogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiRoZWFkaW5nLWZvbnQ6IFwiTGFyaXNoTWNLaW5zZXlcIiwgJ0dlb3JnaWEnLCBzZXJpZjtcbiRmb250OiAkZm9udC1zdGFjaztcblxuJGZvbnQtZmFtaWx5LXByaW1hcnk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LXNlY29uZGFyeTogXCJCb3dlclwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiIHNlcmlmO1xuXG4kYmFzZS1zaXplOiAxNnB4O1xuJHRhYmxldC1zaXplOiAxNnB4O1xuJG1vYmlsZS1zaXplOiAxNnB4O1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGJyZWFrLW1vYmlsZTogNDUwcHg7XG4kYnJlYWstdGFibGV0OiA4MDBweDtcbiRicmVhay1sYXB0b3A6IDEwMjRweDtcblxuJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGU6IDgwMHB4O1xuJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQ6IDEwNDhweDtcbiRicmVhay1sYW5kc2NhcGUtbGFwdG9wOiAxMjgwcHg7XG4iLCJAaW1wb3J0ICcuL3ZhcmlhYmxlcyc7XG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuQG1peGluIGJveC1zaGFkb3coJGNvbG9yOiAjMDAwLCAkZGVwdGg6IDEpIHtcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMXB4ICogKCRkZXB0aCAtIDEpIHJnYmEoIzAwMCwgLjIpLFxuICAgICAgICAgICAgICAgIDAgMXB4IDFweCAwIHJnYmEoIzAwMCwgLjE0KSxcbiAgICAgICAgICAgICAgICAwIDJweCAxcHggLTFweCByZ2JhKCMwMDAsIC4xMik7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG5AbWl4aW4gcmVzcG9uZC10bygkbWVkaWEpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gIEBlbHNlIGlmICRtZWRpYSA9PSBsYXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1AZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQGltcG9ydCBcImxpYnMvdWkvc3JjL2xpYi9taXhpbnNcIjtcbkBpbXBvcnQgJ3ZhcmlhYmxlcyc7XG5AaW1wb3J0ICdtaXhpbnMnO1xuXG5cblxuXG4ubG9hZGluZyB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoI2ZmZmZmZiwgMC41KTtcbiAgcGFkZGluZzogM2VtO1xufVxuLmJvb2tpbmctY29udGVudCB7XG4gIG1hcmdpbjogMCBhdXRvIDAgYXV0bztcbiAgcGFkZGluZzogMXB4IDBweCAxMjBweCAwO1xuICA+ZGl2IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAmLm9wZW4ge1xuICAgIG1hcmdpbjogMCBhdXRvIDI4MHB4IGF1dG87XG4gIH1cbiAgLmRldGFpbHMge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgcGFkZGluZzogMDtcbiAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgcGFkZGluZy1ib3R0b206IDQwcHg7XG4gICAgfVxuICAgID5kaXYge1xuICAgICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICB9XG4gICAgaDEge1xuICAgICAgZm9udC1zaXplOiAzMnB4O1xuICAgICAgbWFyZ2luOiAxMHB4IDAgNDBweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIC8vIGZvbnQtZmFtaWx5OiAnQm93ZXInO1xuICAgIH1cbiAgICBsYWJlbCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIHBhZGRpbmc6IDRweCAwIDIwcHggMDtcbiAgICAgIHNwYW4ge1xuICAgICAgICBwYWRkaW5nOiAwIDE4cHg7XG4gICAgICB9XG4gICAgfVxuICAgIC5zZWN0aW9uIHtcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgIGgxIHtcbiAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgfVxuICAgICAgPmRpdiB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgbWF4LXdpZHRoOiA2NzFweDtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgID5kaXYge1xuICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDE1cHg7XG4gICAgICAgICAgbWluLXdpZHRoOiAyMDBweDtcbiAgICAgICAgfVxuICAgICAgICBoMiB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgY29sb3I6ICMzMzMzMzM7XG4gICAgICAgICAgbWFyZ2luOiAwIDAgMjBweCAwO1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1wcmltYXJ5O1xuICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICAgIH1cbiAgICAgICAgfSAgICAgICBcbiAgICAgIH1cbiAgICAgICYuYm90dG9tIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgICAgICAgcGFkZGluZzogMjhweCAyMHB4O1xuICAgICAgICAucmVjLWRldGFpbHMtcGVyaW9kIHtcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDEwMHB4O1xuICAgICAgICB9XG4gICAgICAgID5kaXYge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICAgIHBhZGRpbmc6IDIwcHg7XG5cbiAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgID4gZGl2e1xuICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICBwYWRkaW5nOiAwIDAgMCAwO1xuICB9XG59XG4uYm90dG9tLXBhbmVsIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiA4MHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgei1pbmRleDogMjtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAmLmZpeGVkIHtcbiAgICBwb3NpdGlvbjogZml4ZWQgIWltcG9ydGFudDtcbiAgfVxuICBcbiAgLmJ1dHRvbnMge1xuICAgIC8vIHBhZGRpbmc6IDI0cHggMTZweDtcbiAgICAvLyBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1heC13aWR0aDogbm9uZTtcblxuICAgID5kaXYge1xuICAgICAgbWF4LXdpZHRoOiA4ODBweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGJ1dHRvbiB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgfVxuICAgICAgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogNXB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRDBEMEQwO1xuICAgICAgfVxuICAgICAgYnV0dG9uOm50aC1jaGlsZCgyKSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gICAgICB9XG4gICAgfVxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgcGFkZGluZzogMTZweCAwO1xuICAgICAgPmRpdiB7XG4gICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgbWFyZ2luOiAwIDE2cHg7XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiA4cHg7XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9uOm50aC1jaGlsZCgyKSB7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cbi5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXJ7XG5cbiAgJi5saW1pdC1oZWlnaHQge1xuICAgIC8vIG1heC1oZWlnaHQ6IDg0MnB4O1xuICAgIGhlaWdodDogODR2aDtcbiAgICAvLyBtYXgtaGVpZ2h0OiA5M3ZoO1xuICB9XG5cbiAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgJi5saW1pdC1oZWlnaHQge1xuICAgICAgaGVpZ2h0OiA5NXZoO1xuICAgICAgbWF4LWhlaWdodDogODg2cHg7XG4gICAgfVxuXG4gICAgLmJvb2tpbmctY29udGVudCwgLm1jay1zY3JvbGx7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAuZGV0YWlsc3tcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cbn0iXX0= */"] }); var ɵBookingCreateComponent_BaseFactory = i0.ɵɵgetInheritedFactory(BookingCreateComponent); /*@__PURE__*/ @@ -50665,7 +51393,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } }, directives: [i2.NgIf, i3.BookingEditComponent, i4.NgxSkeletonLoaderComponent], - styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\n\n\n\n\n\n\n.loading[_ngcontent-%COMP%] {\n background-color: rgba(255, 255, 255, 0.5);\n padding: 3em;\n}\n.booking-content[_ngcontent-%COMP%] {\n margin: 0 auto 0 auto;\n padding: 1px 20px 120px 0;\n}\n.booking-content[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 100%;\n}\n.booking-content.open[_ngcontent-%COMP%] {\n margin: 0 auto 280px auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n border: 1px solid #E6E6E6;\n background-color: white;\n padding: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 1024px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 32px;\n margin: 10px 0 40px;\n font-weight: 500;\n width: 100%;\n text-align: center;\n font-family: \"Bower\";\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-size: 16px;\n padding: 4px 0 20px 0;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n padding: 0 18px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 400;\n font-size: 16px;\n color: #333333;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 400;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n max-width: 671px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n line-height: 24px;\n padding-bottom: 15px;\n min-width: 200px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n width: 100%;\n display: block;\n color: #333333;\n margin: 0 0 20px 0;\n font-weight: 500;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n padding: 28px 20px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] .rec-details-period[_ngcontent-%COMP%] {\n cursor: pointer;\n text-decoration: underline;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background-color: white;\n padding: 20px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0px 0px 100px 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0px 0px 100px 0;\n }\n}\n.bottom-panel[_ngcontent-%COMP%] {\n position: fixed;\n bottom: 0;\n width: 100%;\n min-height: 80px;\n background-color: white;\n border: 1px solid #E6E6E6;\n z-index: 2;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 24px 16px;\n border: 1px solid #E6E6E6;\n width: 100%;\n max-width: none;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 880px;\n margin: 0 auto;\n display: flex;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex: 1;\n height: 48px;\n font-size: 16px;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 5px;\n border: 1px solid #D0D0D0;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 5px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9taXhpbnMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNwVUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQTFEQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDNUNBOztzQkFBQTtBQ1BBO0VBQ0UsMENBQUE7RUFDQSxZQUFBO0FKdUNGO0FJckNBO0VBQ0UscUJBQUE7RUFDQSx5QkFBQTtBSndDRjtBSXZDRTtFQUNFLFdBQUE7QUp5Q0o7QUl2Q0U7RUFDRSx5QkFBQTtBSnlDSjtBSXZDRTtFQUNFLHlCQUFBO0VBQ0EsdUJBQUE7RUFDQSxVQUFBO0FKeUNKO0FHNUNRO0VDQU47SUFLSSxvQkFBQTtFSjJDSjtBQUNGO0FHOUNRO0VDSE47SUFLSSxvQkFBQTtFSmdESjtBQUNGO0FJL0NJO0VBQ0UsaUJBQUE7RUFDQSxjQUFBO0FKaUROO0FJL0NJO0VBQ0UsZUFBQTtFQUNBLG1CQUFBO0VBQ0EsZ0JBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7RUFDQSxvQkFBQTtBSmlETjtBSS9DSTtFQUNFLGNBQUE7RUFDQSxlQUFBO0VBQ0EscUJBQUE7QUppRE47QUloRE07RUFDRSxlQUFBO0FKa0RSO0FJL0NJO0VBQ0UsZUFBQTtFQUNBLGdCQUFBO0VBQ0EsZUFBQTtFQUNBLGNBQUE7QUppRE47QUloRE07RUFDRSxlQUFBO0VBQ0EsZ0JBQUE7QUprRFI7QUloRE07RUFDRSxhQUFBO0VBQ0EsZUFBQTtFQUNBLGdCQUFBO0VBQ0EsY0FBQTtBSmtEUjtBSWpEUTtFQUNFLE9BQUE7RUFDQSxpQkFBQTtFQUNBLG9CQUFBO0VBQ0EsZ0JBQUE7QUptRFY7QUlqRFE7RUFDRSxXQUFBO0VBQ0EsY0FBQTtFQUNBLGNBQUE7RUFDQSxrQkFBQTtFQUNBLGdCQUFBO0VBQ0EscUdGdEJZO0FGeUV0QjtBQ25IWTtFRzBESjtJQVFJLGVBQUE7RUpxRFY7QUFDRjtBQ3hIWTtFRzBESjtJQVFJLGVBQUE7RUowRFY7QUFDRjtBSXZETTtFQUNFLHlCQUFBO0VBQ0Esa0JBQUE7QUp5RFI7QUl4RFE7RUFDRSxlQUFBO0VBQ0EsMEJBQUE7QUowRFY7QUNySVk7RUdzRU47SUFRSSxxQkFBQTtFSjJEUjtBQUNGO0FDMUlZO0VHc0VOO0lBUUkscUJBQUE7RUpnRVI7QUFDRjtBSS9EUTtFQUNFLHVCQUFBO0VBQ0EsYUFBQTtBSmlFVjtBQ25KWTtFR3FGQTtJQUNFLGlCQUFBO0VKaUVaO0FBQ0Y7QUN4Slk7RUdxRkE7SUFDRSxpQkFBQTtFSnNFWjtBQUNGO0FDN0pZO0VHRVo7SUE2Rkksd0JBQUE7RUprRUY7QUFDRjtBQ2xLWTtFR0VaO0lBNkZJLHdCQUFBO0VKdUVGO0FBQ0Y7QUlyRUE7RUFDRSxlQUFBO0VBQ0EsU0FBQTtFQUNBLFdBQUE7RUFDQSxnQkFBQTtFQUNBLHVCQUFBO0VBQ0EseUJBQUE7RUFDQSxVQUFBO0FKd0VGO0FJdEVFO0VBQ0Usa0JBQUE7RUFDQSx5QkFBQTtFQUNBLFdBQUE7RUFDQSxlQUFBO0FKd0VKO0FJdEVJO0VBQ0UsZ0JBQUE7RUFDQSxjQUFBO0VBQ0EsYUFBQTtBSndFTjtBSXZFTTtFQUNFLE9BQUE7RUFDQSxZQUFBO0VBQ0EsZUFBQTtBSnlFUjtBSXZFTTtFQUNFLGlCQUFBO0VBQ0EseUJBQUE7QUp5RVI7QUl2RU07RUFDRSxnQkFBQTtBSnlFUjtBQ3hNWTtFRzJHVjtJQXdCSSxlQUFBO0VKeUVKO0VJdkVNO0lBQ0UsY0FBQTtFSnlFUjtFSXZFTTtJQUNFLGlCQUFBO0VKeUVSO0VJdkVNO0lBQ0UsZ0JBQUE7RUp5RVI7QUFDRjtBQ3ROWTtFRzJHVjtJQXdCSSxlQUFBO0VKdUZKO0VJckZNO0lBQ0UsY0FBQTtFSnVGUjtFSXJGTTtJQUNFLGlCQUFBO0VKdUZSO0VJckZNO0lBQ0UsZ0JBQUE7RUp1RlI7QUFDRjtBQ3BPWTtFR3dKUjtJQUNFLFlBQUE7RUpnRko7RUkvRUk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUppRk47QUFDRjtBQzlPWTtFR3dKUjtJQUNFLFlBQUE7RUp5Rko7RUl4Rkk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUowRk47QUFDRiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIiRwcmltYXJ5OiAjMUY0MEU2O1xuJGZvcm0tbGFiZWw6ICMwNTFDMkM7XG4kc2Vjb25kYXJ5LWxhYmVsOiAjNzY3Njc2O1xuJGJvcmRlcjogI0IzQjNCMztcbiRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkOiAjRDBEMEQwO1xuJGNoaXAtY29sb3I6ICMzMzMzMzM7XG4kcGxhY2Vob2xkZXItY29sb3I6ICM3RjdGN0Y7XG4kYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDtcbiRwYWdlLWJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4kc2VsZWN0ZWQtb3B0aW9uOiAjRTZFNkU2O1xuJGNvbG9yLWJyYW5kLXllbGxvdzogI2ZmZDA0ODtcbiRsaWdodC15ZWxsb3c6ICNmZmYzY2U7XG4kY29hY2htYXJrLXRleHQ6ICM2ZjRkMDA7XG4kZXJyb3ItY29sb3I6ICNFMTJFNDA7XG4kbm8tZmlsdGVycy1jb2xvcjogI0JDQkNCQztcbiRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjogI0Y0RjRGNDtcbiRwcmltYXJ5LWhpZ2hsaWdodDogIzIyNTFGRjtcbiRzY3JvbGxiYXItY29sb3I6ICM3NTc1NzU7XG5cbiRhdmFpbGFibGUtY29sb3I6ICM1RDlENTI7XG4kYXZhaWxhYmxlLWJ5LXJlcXVlc3QtY29sb3I6ICNGNUI1M0Y7XG4kaW4tdXNlLWNvbG9yOiAjRDQ0ODNFO1xuJG5vdC1ib29rYWJsZS1jb2xvcjogI0NDQ0NDQztcblxuJG1vZGFsLWJvZHktaGVhZGluZzogIzRENEQ0RDtcbiRhbGVydC1vdmVybGF5LWJnOiByZ2JhKDUsIDI4LCA0NCwgMC44NSk7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvYWNobWFyay1iZzogI0VCRUJGNjtcbiRjb2FjaG1hcmstZGFyay10ZXh0OiAjMUIxQjE5O1xuJGVycm9yLXRleHQ6ICNmZmY7XG5cbi8qKlxuICogU3BhY2luZ1xuICovXG5cbi8vIDRweFxuJHNwYWNpbmctc21hbGxlc3Q6IDAuMjVyZW07XG5cbi8vIDhweFxuJHNwYWNpbmcteHhzbWFsbDogMC41cmVtO1xuXG4vLyAxMnB4XG4kc3BhY2luZy14c21hbGw6IDAuNzVyZW07XG5cbi8vIDE2cHhcbiRzcGFjaW5nLXNtYWxsOiAxcmVtO1xuXG4vLyAyMHB4XG4kc3BhY2luZy1zbWFsbC1tZWRpdW06IDEuMjVyZW07XG5cbi8vIDI0cHhcbiRzcGFjaW5nLW1lZGl1bTogMS41cmVtO1xuXG4vLyAyOHB4XG4kc3BhY2luZy1tZWRpdW0tbGFyZ2U6IDEuNzVyZW07XG5cbi8vIDMycHhcbiRzcGFjaW5nLWxhcmdlOiAycmVtO1xuXG4vLyA0OHB4XG4kc3BhY2luZy14bGFyZ2U6IDNyZW07XG5cbi8vIDY0cHhcbiRzcGFjaW5nLXh4bGFyZ2U6IDRyZW07XG5cbi8vIDk2cHhcbiRzcGFjaW5nLWxhcmdlc3Q6IDZyZW07XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kZGV2aWNlLW1vYmlsZS1zaXplOiA0NTBweDtcbiRkZXZpY2UtdGFibGV0LXNpemU6IDgwMHB4O1xuJGRldmljZS1sYXB0b3Atc2l6ZTogMTAyNHB4O1xuXG4kZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZTogMTA0OHB4O1xuJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemU6IDEyODBweDtcblxuXG46ZXhwb3J0IHtcbiAgICBwcmltYXJ5OiAkcHJpbWFyeTtcbiAgICBzZWNvbmRhcnlMYWJlbDogJHNlY29uZGFyeS1sYWJlbDtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbiRpY29uLXNtYWxsOiAxNnB4O1xuJGljb24tbWVkaXVtOiAyNHB4O1xuJGljb24tbGFyZ2U6IDMycHg7XG4kaWNvbi14bGFyZ2U6IDQ4cHg7XG4iLCIvKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLmxvYWRpbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gIHBhZGRpbmc6IDNlbTtcbn1cblxuLmJvb2tpbmctY29udGVudCB7XG4gIG1hcmdpbjogMCBhdXRvIDAgYXV0bztcbiAgcGFkZGluZzogMXB4IDIwcHggMTIwcHggMDtcbn1cbi5ib29raW5nLWNvbnRlbnQgPiBkaXYge1xuICB3aWR0aDogMTAwJTtcbn1cbi5ib29raW5nLWNvbnRlbnQub3BlbiB7XG4gIG1hcmdpbjogMCBhdXRvIDI4MHB4IGF1dG87XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogNDBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMge1xuICAgIHBhZGRpbmctYm90dG9tOiA0MHB4O1xuICB9XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzID4gZGl2IHtcbiAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyBoMSB7XG4gIGZvbnQtc2l6ZTogMzJweDtcbiAgbWFyZ2luOiAxMHB4IDAgNDBweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgd2lkdGg6IDEwMCU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiQm93ZXJcIjtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgbGFiZWwge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZm9udC1zaXplOiAxNnB4O1xuICBwYWRkaW5nOiA0cHggMCAyMHB4IDA7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIGxhYmVsIHNwYW4ge1xuICBwYWRkaW5nOiAwIDE4cHg7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uIHtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGNvbG9yOiAjMzMzMzMzO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiBoMSB7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIG1heC13aWR0aDogNjcxcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiA+IGRpdiB7XG4gIGZsZXg6IDE7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMTVweDtcbiAgbWluLXdpZHRoOiAyMDBweDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYgaDIge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYgaDIge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYgaDIge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgfVxufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBwYWRkaW5nOiAyOHB4IDIwcHg7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSAucmVjLWRldGFpbHMtcGVyaW9kIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSB7XG4gICAgcGFkZGluZy1ib3R0b206IDEwMHB4O1xuICB9XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSA+IGRpdiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBwYWRkaW5nOiAyMHB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20gPiBkaXYgPiBkaXYge1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20gPiBkaXYgPiBkaXYge1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwcHggMHB4IDEwMHB4IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwcHggMHB4IDEwMHB4IDA7XG4gIH1cbn1cblxuLmJvdHRvbS1wYW5lbCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogODBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gIHotaW5kZXg6IDI7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zIHtcbiAgcGFkZGluZzogMjRweCAxNnB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiBub25lO1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiB7XG4gIG1heC13aWR0aDogODgwcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBkaXNwbGF5OiBmbGV4O1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b24ge1xuICBmbGV4OiAxO1xuICBoZWlnaHQ6IDQ4cHg7XG4gIGZvbnQtc2l6ZTogMTZweDtcbn1cbi5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gIG1hcmdpbi1yaWdodDogNXB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjRDBEMEQwO1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgbWFyZ2luLWxlZnQ6IDVweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMge1xuICAgIHBhZGRpbmc6IDE2cHggMDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbiB7XG4gICAgbWFyZ2luOiAwIDE2cHg7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMikge1xuICAgIG1hcmdpbi1sZWZ0OiA4cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm90dG9tLXBhbmVsIC5idXR0b25zIHtcbiAgICBwYWRkaW5nOiAxNnB4IDA7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b24ge1xuICAgIG1hcmdpbjogMCAxNnB4O1xuICB9XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gICAgbWFyZ2luLXJpZ2h0OiA4cHg7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgICBtYXJnaW4tbGVmdDogOHB4O1xuICB9XG59XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCwgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCAuZGV0YWlscywgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCAuZGV0YWlscyB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCwgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCAuZGV0YWlscywgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCAuZGV0YWlscyB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxufSIsIkBpbXBvcnQgXCJ2YXJzXCI7XG5cbkBtaXhpbiBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRzaXplLCAkcXVhbGlmaWVyKSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAaWYgKCRxdWFsaWZpZXIgPT0gbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSBpZiAoJHF1YWxpZmllciA9PSBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWF4LXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5AbWl4aW4gYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRtaW4sICRtYXgpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkbWluKSBhbmQgKG1heC13aWR0aDogJG1heCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIHRoaXMgaXMgYSBjb3B5IG9mIHJlc3BvbmQtdG8uIHdlIGRvbid0IHdhbnQgdG8gcHJlc2VydmUgdGhhdCBtZXRob2Qgc2luY2UgdGhlIGJyZWFrcG9pbnRzIG1heSBkaXZlcmdlIGZyb20gdGhlIG9sZCBVSS5cbkBtaXhpbiBpcy1zY3JlZW4tc2l6ZSgkbWVkaWE6IGFsbCwgJG9yaWVudGF0aW9uOiBub25lKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cblxuQG1peGluIHBhZ2UtcGFkZGluZyB7XG4gICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbDtcbn1cblxuLy8gRm9udCBNaXhpbnNcbiRmb250LW1ja2luc2V5LXNhbnM6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuJGZvbnQtdGhlaW5oYXJkdDogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4kZm9udC1ib3dlcjogXCJCb3dlclwiO1xuXG5AbWl4aW4gYm93ZXItYm9sZCB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWJvd2VyO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBtY2tpbnNleS1zYW5zIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gZGlzcGxheS0xIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiA0cmVtOyAvLyA2NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4NzsgLy8gNzZweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMiB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDYwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS00IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogM3JlbTsgLy8gNDhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE2NjsgLy8gNTZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS01IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjgzMzsgLy8gMzRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjQyOyAvLyA0MHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS03IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyOHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTEge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA0OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi43NXJlbTsgLy8gNDRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDUycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTIge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTExOyAvLyA0NHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNDhweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMyB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIyMjsgLy8gNDRweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjg4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1NTsgLy8gMjhweFxuICAgIH1cbn1cblxuQG1peGluIGJvZHktZGVmYXVsdCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNnB4XG4gICAgfVxufVxuXG4vLy8gRG9lc250IGV4aXN0IGluIE1EUy5cbkBtaXhpbiBib2R5LXRpbnkge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtOyAvLyAxMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjRweFxuICAgIH1cbn1cblxuQG1peGluIGZvcm0tbGFiZWwge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LXRoZWluaGFyZHQ7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGNvbG9yOiAkcGxhY2Vob2xkZXItY29sb3I7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbn1cblxuQG1peGluIGNoaXAtbGFiZWwge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBjaGVja2JveC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGNvbG9yOiBibGFjaztcbn1cblxuLy8gYm9yZGVyc1xuXG5AbWl4aW4gbWNrLWNoZWNrYm94LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay10aGluLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXItbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBib3JkZXItY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudC1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuXG4vLyBmdW5jdGlvbnNcblxuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG5AbWl4aW4gbWF4LWxpbmVzKCRjb3VudCkge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiAkY291bnQ7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbn1cblxuLy8gaW1hZ2VzXG5AbWl4aW4gbWNrLWljb24oJHdpZHRoLCAkYXNzZXQsICRoZWlnaHQ6ICR3aWR0aCwgICRhc3NldFBhdGg6IFwibGlicy91aS9zcmMvbGliL2ljb25zXCIsKSB7XG4gICAgd2lkdGg6ICR3aWR0aDtcbiAgICBoZWlnaHQ6ICRoZWlnaHQ7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiI3skYXNzZXRQYXRofS8jeyRhc3NldH1cIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuXG5cbkBtaXhpbiBtY2stc21hbGwtaWNvbigkbW9iaWxlLWFzc2V0LCAkZGVza3RvcC1hc3NldDogJG1vYmlsZS1hc3NldCkge1xuICAgIEBpbmNsdWRlIG1jay1pY29uKDE2cHgsICRhc3NldDogJG1vYmlsZS1hc3NldCk7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICRhc3NldDogJGRlc2t0b3AtYXNzZXQpO1xuICAgIH1cbn1cblxuLy8gc2tlbGV0b25cbkBtaXhpbiBza2VsZXRvbi1iZyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWltYWdlLXNpemUge1xuICAgIHdpZHRoOiA4MXB4O1xuICAgIGhlaWdodDogODJweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDIxOXB4O1xuICAgICAgICBoZWlnaHQ6IDExOXB4O1xuICAgIH1cbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLXN0YXR1cy1zaXplIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMTE3cHg7XG4gICAgICAgIGhlaWdodDogNzhweDtcbiAgICB9XG59XG4iLCIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRjb2xvci1icmFuZC1lbGVjdHJpYy1ibHVlOiAjMjI1MWZmO1xuJGNvbG9yLWJyYW5kLWRlZXAtYmx1ZTogIzA1MWMyYztcbiRjb2xvci1icmFuZC1jeWFuOiAjMDBhOWY0O1xuXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGZvbnQtZGFyazogIzAwMDtcbiRmb250LWxpZ2h0OiAjZmZmO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcbiRncmVlbjE6ICMyMTk2NTM7XG5cbiRwZW5kaW5nOiAjZmZiMzAwO1xuJHBlbmRpbmctbGlnaHQ6IGxpZ2h0ZW4oJHBlbmRpbmcsIDEwKTtcbiRwZW5kaW5nLWRhcms6IGRhcmtlbigkcGVuZGluZywgMTApO1xuXG4kZXJyb3I6ICNlNTM5MzU7XG4kZXJyb3ItbGlnaHQ6IGxpZ2h0ZW4oJGVycm9yLCAxMCk7XG4kZXJyb3ItZGFyazogZGFya2VuKCRlcnJvciwgMTApO1xuXG4kY29sb3ItcHJpbWFyeTogIzE5MzdlYTtcbiRjb2xvci1wcmltYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG4kY29sb3ItcHJpbWFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcblxuJGNvbG9yLXNlY29uZGFyeTogIzQyODVGNDtcbiRjb2xvci1zZWNvbmRhcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuJGNvbG9yLXNlY29uZGFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuXG4kYmFja2dyb3VuZDogI2YwZjBmMDtcbiRmb290ZXItYmFjazogIzI2MzIzODtcbiRoZWFkZXItYmFjazogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMDUxQzJDLCAjMDUxQzJDIDQwJSwgIzBCMjQ1MyA2MCUsICMxRjQwRTYgMTAwJSk7XG5cbiRjb2xvci10ZXJuYXJ5OiAjMDUxYzJjO1xuXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cblxuJGZvbnQtc3RhY2s6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuXG4kaGVhZGluZy1mb250OiBcIkxhcmlzaE1jS2luc2V5XCIsICdHZW9yZ2lhJywgc2VyaWY7XG4kZm9udDogJGZvbnQtc3RhY2s7XG5cbiRmb250LWZhbWlseS1wcmltYXJ5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbiRmb250LWZhbWlseS1zZWNvbmRhcnk6IFwiQm93ZXJcIiwgR2VvcmdpYSwgXCJUaW1lcyBOZXcgUm9tYW5cIiBzZXJpZjtcblxuJGJhc2Utc2l6ZTogMTZweDtcbiR0YWJsZXQtc2l6ZTogMTZweDtcbiRtb2JpbGUtc2l6ZTogMTZweDtcblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbiRicmVhay1tb2JpbGU6IDQ1MHB4O1xuJGJyZWFrLXRhYmxldDogODAwcHg7XG4kYnJlYWstbGFwdG9wOiAxMDI0cHg7XG5cbiRicmVhay1sYW5kc2NhcGUtbW9iaWxlOiA4MDBweDtcbiRicmVhay1sYW5kc2NhcGUtdGFibGV0OiAxMDQ4cHg7XG4kYnJlYWstbGFuZHNjYXBlLWxhcHRvcDogMTI4MHB4O1xuIiwiQGltcG9ydCAnLi92YXJpYWJsZXMnO1xuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbkBtaXhpbiBib3gtc2hhZG93KCRjb2xvcjogIzAwMCwgJGRlcHRoOiAxKSB7XG4gICAgYm94LXNoYWRvdzogMCAxcHggM3B4IDFweCAqICgkZGVwdGggLSAxKSByZ2JhKCMwMDAsIC4yKSxcbiAgICAgICAgICAgICAgICAwIDFweCAxcHggMCByZ2JhKCMwMDAsIC4xNCksXG4gICAgICAgICAgICAgICAgMCAycHggMXB4IC0xcHggcmdiYSgjMDAwLCAuMTIpO1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuQG1peGluIHJlc3BvbmQtdG8oJG1lZGlhKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9ICBAZWxzZSBpZiAkbWVkaWEgPT0gbGF0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9QGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIkBpbXBvcnQgXCJsaWJzL3VpL3NyYy9saWIvbWl4aW5zXCI7XG5AaW1wb3J0ICd2YXJpYWJsZXMnO1xuQGltcG9ydCAnbWl4aW5zJztcblxuXG5cblxuLmxvYWRpbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCNmZmZmZmYsIDAuNSk7XG4gIHBhZGRpbmc6IDNlbTtcbn1cbi5ib29raW5nLWNvbnRlbnQge1xuICBtYXJnaW46IDAgYXV0byAwIGF1dG87XG4gIHBhZGRpbmc6IDFweCAyMHB4IDEyMHB4IDA7XG4gID5kaXYge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gICYub3BlbiB7XG4gICAgbWFyZ2luOiAwIGF1dG8gMjgwcHggYXV0bztcbiAgfVxuICAuZGV0YWlscyB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIEBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNDBweDtcbiAgICB9XG4gICAgPmRpdiB7XG4gICAgICBtYXgtd2lkdGg6IDEwMjRweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIH1cbiAgICBoMSB7XG4gICAgICBmb250LXNpemU6IDMycHg7XG4gICAgICBtYXJnaW46IDEwcHggMCA0MHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgZm9udC1mYW1pbHk6ICdCb3dlcic7XG4gICAgfVxuICAgIGxhYmVsIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgcGFkZGluZzogNHB4IDAgMjBweCAwO1xuICAgICAgc3BhbiB7XG4gICAgICAgIHBhZGRpbmc6IDAgMThweDtcbiAgICAgIH1cbiAgICB9XG4gICAgLnNlY3Rpb24ge1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgICAgaDEge1xuICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICB9XG4gICAgICA+ZGl2IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBtYXgtd2lkdGg6IDY3MXB4O1xuICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgICAgPmRpdiB7XG4gICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICBsaW5lLWhlaWdodDogMjRweDtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTVweDtcbiAgICAgICAgICBtaW4td2lkdGg6IDIwMHB4O1xuICAgICAgICB9XG4gICAgICAgIGgyIHtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgICAgICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LXByaW1hcnk7XG4gICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgICAgfVxuICAgICAgICB9ICAgICAgIFxuICAgICAgfVxuICAgICAgJi5ib3R0b20ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICAgICAgICBwYWRkaW5nOiAyOHB4IDIwcHg7XG4gICAgICAgIC5yZWMtZGV0YWlscy1wZXJpb2Qge1xuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG4gICAgICAgIH1cbiAgICAgICAgPmRpdiB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgICAgcGFkZGluZzogMjBweDtcblxuICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgPiBkaXZ7XG4gICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgIHBhZGRpbmc6IDBweCAwcHggMTAwcHggMDtcbiAgfVxufVxuLmJvdHRvbS1wYW5lbCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogODBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gIHotaW5kZXg6IDI7XG4gIFxuICAuYnV0dG9ucyB7XG4gICAgcGFkZGluZzogMjRweCAxNnB4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiBub25lO1xuXG4gICAgPmRpdiB7XG4gICAgICBtYXgtd2lkdGg6IDg4MHB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYnV0dG9uIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgaGVpZ2h0OiA0OHB4O1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICB9XG4gICAgICBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gICAgICB9XG4gICAgICBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgIH1cbiAgICB9XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICBwYWRkaW5nOiAxNnB4IDA7XG4gICAgICA+ZGl2IHtcbiAgICAgICAgYnV0dG9uIHtcbiAgICAgICAgICBtYXJnaW46IDAgMTZweDtcbiAgICAgICAgfVxuICAgICAgICBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgICAgICAgfVxuICAgICAgICBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogOHB4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lcntcblxuICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcblxuICAgIC5ib29raW5nLWNvbnRlbnQsIC5tY2stc2Nyb2xse1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgLmRldGFpbHN7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgICAgfVxuICAgIH1cblxuICB9XG59Il19 */"] + styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\n\n\n\n\n\n\n.loading[_ngcontent-%COMP%] {\n background-color: rgba(255, 255, 255, 0.5);\n padding: 3em;\n}\n.booking-content[_ngcontent-%COMP%] {\n margin: 0 auto 0 auto;\n padding: 1px 0px 120px 0;\n}\n.booking-content[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 100%;\n}\n.booking-content.open[_ngcontent-%COMP%] {\n margin: 0 auto 280px auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n border: 1px solid #E6E6E6;\n background-color: white;\n padding: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 1024px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 32px;\n margin: 10px 0 40px;\n font-weight: 500;\n width: 100%;\n text-align: center;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-size: 16px;\n padding: 4px 0 20px 0;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n padding: 0 18px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 400;\n font-size: 16px;\n color: #333333;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 400;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n max-width: 671px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n line-height: 24px;\n padding-bottom: 15px;\n min-width: 200px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n width: 100%;\n display: block;\n color: #333333;\n margin: 0 0 20px 0;\n font-weight: 500;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n padding: 28px 20px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] .rec-details-period[_ngcontent-%COMP%] {\n cursor: pointer;\n text-decoration: underline;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background-color: white;\n padding: 20px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0 0 0 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0 0 0 0;\n }\n}\n.bottom-panel[_ngcontent-%COMP%] {\n position: absolute;\n bottom: 0;\n width: 100%;\n min-height: 80px;\n background-color: white;\n border: 1px solid #E6E6E6;\n z-index: 2;\n flex-direction: row;\n display: flex;\n align-items: center;\n}\n.bottom-panel.fixed[_ngcontent-%COMP%] {\n position: fixed !important;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n width: 100%;\n max-width: none;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 880px;\n margin: 0 auto;\n display: flex;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex: 1;\n height: 48px;\n font-size: 16px;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 5px;\n border: 1px solid #D0D0D0;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 5px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n.booking-form-base-container.limit-height[_ngcontent-%COMP%] {\n height: 84vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-form-base-container.limit-height[_ngcontent-%COMP%] {\n height: 95vh;\n max-height: 886px;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-form-base-container.limit-height[_ngcontent-%COMP%] {\n height: 95vh;\n max-height: 886px;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9taXhpbnMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNwVUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQTFEQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDNUNBOztzQkFBQTtBQ1BBO0VBQ0UsMENBQUE7RUFDQSxZQUFBO0FKdUNGO0FJckNBO0VBQ0UscUJBQUE7RUFDQSx3QkFBQTtBSndDRjtBSXZDRTtFQUNFLFdBQUE7QUp5Q0o7QUl2Q0U7RUFDRSx5QkFBQTtBSnlDSjtBSXZDRTtFQUNFLHlCQUFBO0VBQ0EsdUJBQUE7RUFDQSxVQUFBO0FKeUNKO0FHNUNRO0VDQU47SUFLSSxvQkFBQTtFSjJDSjtBQUNGO0FHOUNRO0VDSE47SUFLSSxvQkFBQTtFSmdESjtBQUNGO0FJL0NJO0VBQ0UsaUJBQUE7RUFDQSxjQUFBO0FKaUROO0FJL0NJO0VBQ0UsZUFBQTtFQUNBLG1CQUFBO0VBQ0EsZ0JBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7QUppRE47QUk5Q0k7RUFDRSxjQUFBO0VBQ0EsZUFBQTtFQUNBLHFCQUFBO0FKZ0ROO0FJL0NNO0VBQ0UsZUFBQTtBSmlEUjtBSTlDSTtFQUNFLGVBQUE7RUFDQSxnQkFBQTtFQUNBLGVBQUE7RUFDQSxjQUFBO0FKZ0ROO0FJL0NNO0VBQ0UsZUFBQTtFQUNBLGdCQUFBO0FKaURSO0FJL0NNO0VBQ0UsYUFBQTtFQUNBLGVBQUE7RUFDQSxnQkFBQTtFQUNBLGNBQUE7QUppRFI7QUloRFE7RUFDRSxPQUFBO0VBQ0EsaUJBQUE7RUFDQSxvQkFBQTtFQUNBLGdCQUFBO0FKa0RWO0FJaERRO0VBQ0UsV0FBQTtFQUNBLGNBQUE7RUFDQSxjQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLHFHRnRCWTtBRndFdEI7QUNsSFk7RUcwREo7SUFRSSxlQUFBO0VKb0RWO0FBQ0Y7QUN2SFk7RUcwREo7SUFRSSxlQUFBO0VKeURWO0FBQ0Y7QUl0RE07RUFDRSx5QkFBQTtFQUNBLGtCQUFBO0FKd0RSO0FJdkRRO0VBQ0UsZUFBQTtFQUNBLDBCQUFBO0FKeURWO0FDcElZO0VHc0VOO0lBUUkscUJBQUE7RUowRFI7QUFDRjtBQ3pJWTtFR3NFTjtJQVFJLHFCQUFBO0VKK0RSO0FBQ0Y7QUk5RFE7RUFDRSx1QkFBQTtFQUNBLGFBQUE7QUpnRVY7QUNsSlk7RUdxRkE7SUFDRSxpQkFBQTtFSmdFWjtBQUNGO0FDdkpZO0VHcUZBO0lBQ0UsaUJBQUE7RUpxRVo7QUFDRjtBQzVKWTtFR0VaO0lBNkZJLGdCQUFBO0VKaUVGO0FBQ0Y7QUNqS1k7RUdFWjtJQTZGSSxnQkFBQTtFSnNFRjtBQUNGO0FJcEVBO0VBQ0Usa0JBQUE7RUFDQSxTQUFBO0VBQ0EsV0FBQTtFQUNBLGdCQUFBO0VBQ0EsdUJBQUE7RUFDQSx5QkFBQTtFQUNBLFVBQUE7RUFDQSxtQkFBQTtFQUNBLGFBQUE7RUFDQSxtQkFBQTtBSnVFRjtBSXJFRTtFQUNFLDBCQUFBO0FKdUVKO0FJcEVFO0VBR0UsV0FBQTtFQUNBLGVBQUE7QUpvRUo7QUlsRUk7RUFDRSxnQkFBQTtFQUNBLGNBQUE7RUFDQSxhQUFBO0FKb0VOO0FJbkVNO0VBQ0UsT0FBQTtFQUNBLFlBQUE7RUFDQSxlQUFBO0FKcUVSO0FJbkVNO0VBQ0UsaUJBQUE7RUFDQSx5QkFBQTtBSnFFUjtBSW5FTTtFQUNFLGdCQUFBO0FKcUVSO0FDM01ZO0VHa0hWO0lBd0JJLGVBQUE7RUpxRUo7RUluRU07SUFDRSxjQUFBO0VKcUVSO0VJbkVNO0lBQ0UsaUJBQUE7RUpxRVI7RUluRU07SUFDRSxnQkFBQTtFSnFFUjtBQUNGO0FDek5ZO0VHa0hWO0lBd0JJLGVBQUE7RUptRko7RUlqRk07SUFDRSxjQUFBO0VKbUZSO0VJakZNO0lBQ0UsaUJBQUE7RUptRlI7RUlqRk07SUFDRSxnQkFBQTtFSm1GUjtBQUNGO0FJMUVFO0VBRUUsWUFBQTtBSjRFSjtBQzNPWTtFR29LUjtJQUNFLFlBQUE7SUFDQSxpQkFBQTtFSjBFSjtFSXZFRTtJQUNFLFlBQUE7RUp5RUo7RUl4RUk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUowRU47QUFDRjtBQ3hQWTtFR29LUjtJQUNFLFlBQUE7SUFDQSxpQkFBQTtFSnVGSjtFSXBGRTtJQUNFLFlBQUE7RUpzRko7RUlyRkk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUp1Rk47QUFDRiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIiRwcmltYXJ5OiAjMUY0MEU2O1xuJGZvcm0tbGFiZWw6ICMwNTFDMkM7XG4kc2Vjb25kYXJ5LWxhYmVsOiAjNzY3Njc2O1xuJGJvcmRlcjogI0IzQjNCMztcbiRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkOiAjRDBEMEQwO1xuJGNoaXAtY29sb3I6ICMzMzMzMzM7XG4kcGxhY2Vob2xkZXItY29sb3I6ICM3RjdGN0Y7XG4kYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDtcbiRwYWdlLWJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4kc2VsZWN0ZWQtb3B0aW9uOiAjRTZFNkU2O1xuJGNvbG9yLWJyYW5kLXllbGxvdzogI2ZmZDA0ODtcbiRsaWdodC15ZWxsb3c6ICNmZmYzY2U7XG4kY29hY2htYXJrLXRleHQ6ICM2ZjRkMDA7XG4kZXJyb3ItY29sb3I6ICNFMTJFNDA7XG4kbm8tZmlsdGVycy1jb2xvcjogI0JDQkNCQztcbiRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjogI0Y0RjRGNDtcbiRwcmltYXJ5LWhpZ2hsaWdodDogIzIyNTFGRjtcbiRzY3JvbGxiYXItY29sb3I6ICM3NTc1NzU7XG5cbiRhdmFpbGFibGUtY29sb3I6ICM1RDlENTI7XG4kYXZhaWxhYmxlLWJ5LXJlcXVlc3QtY29sb3I6ICNGNUI1M0Y7XG4kaW4tdXNlLWNvbG9yOiAjRDQ0ODNFO1xuJG5vdC1ib29rYWJsZS1jb2xvcjogI0NDQ0NDQztcblxuJG1vZGFsLWJvZHktaGVhZGluZzogIzRENEQ0RDtcbiRhbGVydC1vdmVybGF5LWJnOiByZ2JhKDUsIDI4LCA0NCwgMC44NSk7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvYWNobWFyay1iZzogI0VCRUJGNjtcbiRjb2FjaG1hcmstZGFyay10ZXh0OiAjMUIxQjE5O1xuJGVycm9yLXRleHQ6ICNmZmY7XG5cbi8qKlxuICogU3BhY2luZ1xuICovXG5cbi8vIDRweFxuJHNwYWNpbmctc21hbGxlc3Q6IDAuMjVyZW07XG5cbi8vIDhweFxuJHNwYWNpbmcteHhzbWFsbDogMC41cmVtO1xuXG4vLyAxMnB4XG4kc3BhY2luZy14c21hbGw6IDAuNzVyZW07XG5cbi8vIDE2cHhcbiRzcGFjaW5nLXNtYWxsOiAxcmVtO1xuXG4vLyAyMHB4XG4kc3BhY2luZy1zbWFsbC1tZWRpdW06IDEuMjVyZW07XG5cbi8vIDI0cHhcbiRzcGFjaW5nLW1lZGl1bTogMS41cmVtO1xuXG4vLyAyOHB4XG4kc3BhY2luZy1tZWRpdW0tbGFyZ2U6IDEuNzVyZW07XG5cbi8vIDMycHhcbiRzcGFjaW5nLWxhcmdlOiAycmVtO1xuXG4vLyA0OHB4XG4kc3BhY2luZy14bGFyZ2U6IDNyZW07XG5cbi8vIDY0cHhcbiRzcGFjaW5nLXh4bGFyZ2U6IDRyZW07XG5cbi8vIDk2cHhcbiRzcGFjaW5nLWxhcmdlc3Q6IDZyZW07XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kZGV2aWNlLW1vYmlsZS1zaXplOiA0NTBweDtcbiRkZXZpY2UtdGFibGV0LXNpemU6IDgwMHB4O1xuJGRldmljZS1sYXB0b3Atc2l6ZTogMTAyNHB4O1xuXG4kZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZTogMTA0OHB4O1xuJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemU6IDEyODBweDtcblxuXG46ZXhwb3J0IHtcbiAgICBwcmltYXJ5OiAkcHJpbWFyeTtcbiAgICBzZWNvbmRhcnlMYWJlbDogJHNlY29uZGFyeS1sYWJlbDtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbiRpY29uLXNtYWxsOiAxNnB4O1xuJGljb24tbWVkaXVtOiAyNHB4O1xuJGljb24tbGFyZ2U6IDMycHg7XG4kaWNvbi14bGFyZ2U6IDQ4cHg7XG4iLCIvKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLmxvYWRpbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gIHBhZGRpbmc6IDNlbTtcbn1cblxuLmJvb2tpbmctY29udGVudCB7XG4gIG1hcmdpbjogMCBhdXRvIDAgYXV0bztcbiAgcGFkZGluZzogMXB4IDBweCAxMjBweCAwO1xufVxuLmJvb2tpbmctY29udGVudCA+IGRpdiB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLmJvb2tpbmctY29udGVudC5vcGVuIHtcbiAgbWFyZ2luOiAwIGF1dG8gMjgwcHggYXV0bztcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMge1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcGFkZGluZzogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMge1xuICAgIHBhZGRpbmctYm90dG9tOiA0MHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyB7XG4gICAgcGFkZGluZy1ib3R0b206IDQwcHg7XG4gIH1cbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgPiBkaXYge1xuICBtYXgtd2lkdGg6IDEwMjRweDtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIGgxIHtcbiAgZm9udC1zaXplOiAzMnB4O1xuICBtYXJnaW46IDEwcHggMCA0MHB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICB3aWR0aDogMTAwJTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyBsYWJlbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXNpemU6IDE2cHg7XG4gIHBhZGRpbmc6IDRweCAwIDIwcHggMDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgbGFiZWwgc3BhbiB7XG4gIHBhZGRpbmc6IDAgMThweDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24ge1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgY29sb3I6ICMzMzMzMzM7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uIGgxIHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBmb250LXdlaWdodDogNDAwO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgbWF4LXdpZHRoOiA2NzFweDtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uID4gZGl2ID4gZGl2IHtcbiAgZmxleDogMTtcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gIHBhZGRpbmctYm90dG9tOiAxNXB4O1xuICBtaW4td2lkdGg6IDIwMHB4O1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiBoMiB7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgY29sb3I6ICMzMzMzMzM7XG4gIG1hcmdpbjogMCAwIDIwcHggMDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiBoMiB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiBoMiB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICB9XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIHBhZGRpbmc6IDI4cHggMjBweDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tIC5yZWMtZGV0YWlscy1wZXJpb2Qge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20ge1xuICAgIHBhZGRpbmctYm90dG9tOiAxMDBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG4gIH1cbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tID4gZGl2IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDIwcHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSA+IGRpdiA+IGRpdiB7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSA+IGRpdiA+IGRpdiB7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQge1xuICAgIHBhZGRpbmc6IDAgMCAwIDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwIDAgMCAwO1xuICB9XG59XG5cbi5ib3R0b20tcGFuZWwge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDgwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICB6LWluZGV4OiAyO1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLmJvdHRvbS1wYW5lbC5maXhlZCB7XG4gIHBvc2l0aW9uOiBmaXhlZCAhaW1wb3J0YW50O1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IG5vbmU7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IHtcbiAgbWF4LXdpZHRoOiA4ODBweDtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGRpc3BsYXk6IGZsZXg7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbiB7XG4gIGZsZXg6IDE7XG4gIGhlaWdodDogNDhweDtcbiAgZm9udC1zaXplOiAxNnB4O1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMikge1xuICBtYXJnaW4tbGVmdDogNXB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyB7XG4gICAgcGFkZGluZzogMTZweCAwO1xuICB9XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uIHtcbiAgICBtYXJnaW46IDAgMTZweDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMSkge1xuICAgIG1hcmdpbi1yaWdodDogOHB4O1xuICB9XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uOm50aC1jaGlsZCgyKSB7XG4gICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMge1xuICAgIHBhZGRpbmc6IDE2cHggMDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbiB7XG4gICAgbWFyZ2luOiAwIDE2cHg7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMikge1xuICAgIG1hcmdpbi1sZWZ0OiA4cHg7XG4gIH1cbn1cblxuLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lci5saW1pdC1oZWlnaHQge1xuICBoZWlnaHQ6IDg0dmg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1mb3JtLWJhc2UtY29udGFpbmVyLmxpbWl0LWhlaWdodCB7XG4gICAgaGVpZ2h0OiA5NXZoO1xuICAgIG1heC1oZWlnaHQ6IDg4NnB4O1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCwgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCAuZGV0YWlscywgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCAuZGV0YWlscyB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIubGltaXQtaGVpZ2h0IHtcbiAgICBoZWlnaHQ6IDk1dmg7XG4gICAgbWF4LWhlaWdodDogODg2cHg7XG4gIH1cbiAgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAuYm9va2luZy1jb250ZW50LCAuYm9va2luZy1mb3JtLWJhc2UtY29udGFpbmVyIC5tY2stc2Nyb2xsIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gIH1cbiAgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzLCAuYm9va2luZy1mb3JtLWJhc2UtY29udGFpbmVyIC5tY2stc2Nyb2xsIC5kZXRhaWxzIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICB9XG59IiwiQGltcG9ydCBcInZhcnNcIjtcblxuQG1peGluIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJHNpemUsICRxdWFsaWZpZXIpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBpZiAoJHF1YWxpZmllciA9PSBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIGlmICgkcXVhbGlmaWVyID09IG1heC13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtYXgtd2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBtaXhpbiBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJG1pbiwgJG1heCkge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gdGhpcyBpcyBhIGNvcHkgb2YgcmVzcG9uZC10by4gd2UgZG9uJ3Qgd2FudCB0byBwcmVzZXJ2ZSB0aGF0IG1ldGhvZCBzaW5jZSB0aGUgYnJlYWtwb2ludHMgbWF5IGRpdmVyZ2UgZnJvbSB0aGUgb2xkIFVJLlxuQG1peGluIGlzLXNjcmVlbi1zaXplKCRtZWRpYTogYWxsLCAkb3JpZW50YXRpb246IG5vbmUpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuXG5AbWl4aW4gcGFnZS1wYWRkaW5nIHtcbiAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xufVxuXG4vLyBGb250IE1peGluc1xuJGZvbnQtbWNraW5zZXktc2FuczogXCJNY0tpbnNleSBTYW5zXCI7XG4kZm9udC10aGVpbmhhcmR0OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiRmb250LWJvd2VyOiBcIkJvd2VyXCI7XG5cbkBtaXhpbiBib3dlci1ib2xkIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtYm93ZXI7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIG1ja2luc2V5LXNhbnMge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBkaXNwbGF5LTEge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDRyZW07IC8vIDY0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTg3OyAvLyA3NnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0yIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0zIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTQge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzcmVtOyAvLyA0OHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTY2OyAvLyA1NnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDY0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTUge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuODMzOyAvLyAzNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42NDI7IC8vIDQwcHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTcge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDQ4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjc1cmVtOyAvLyA0NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNTJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICBsaW5lLWhlaWdodDogMS4xMTE7IC8vIDQ0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA0OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0zIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjIyOyAvLyA0NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy00IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy01IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyODhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy02IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTU1OyAvLyAyOHB4XG4gICAgfVxufVxuXG5AbWl4aW4gYm9keS1kZWZhdWx0IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI2cHhcbiAgICB9XG59XG5cbi8vLyBEb2VzbnQgZXhpc3QgaW4gTURTLlxuQG1peGluIGJvZHktdGlueSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07IC8vIDEycHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyMHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZm9ybS1sYWJlbCB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LWZhbWlseTogJGZvbnQtdGhlaW5oYXJkdDtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgY29sb3I6ICRwbGFjZWhvbGRlci1jb2xvcjtcbiAgICBmb250LXdlaWdodDogMzAwO1xufVxuXG5AbWl4aW4gY2hpcC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIGNoZWNrYm94LWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgY29sb3I6IGJsYWNrO1xufVxuXG4vLyBib3JkZXJzXG5cbkBtaXhpbiBtY2stY2hlY2tib3gtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAycHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLXRoaW4tYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlci1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJvcmRlci1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50LWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXItbGlnaHQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5cbi8vIGZ1bmN0aW9uc1xuXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbkBtaXhpbiBtYXgtbGluZXMoJGNvdW50KSB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAtd2Via2l0LWxpbmUtY2xhbXA6ICRjb3VudDtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuXG4vLyBpbWFnZXNcbkBtaXhpbiBtY2staWNvbigkd2lkdGgsICRhc3NldCwgJGhlaWdodDogJHdpZHRoLCAgJGFzc2V0UGF0aDogXCJsaWJzL3VpL3NyYy9saWIvaWNvbnNcIiwpIHtcbiAgICB3aWR0aDogJHdpZHRoO1xuICAgIGhlaWdodDogJGhlaWdodDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIjeyRhc3NldFBhdGh9LyN7JGFzc2V0fVwiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG59XG5cblxuQG1peGluIG1jay1zbWFsbC1pY29uKCRtb2JpbGUtYXNzZXQsICRkZXNrdG9wLWFzc2V0OiAkbW9iaWxlLWFzc2V0KSB7XG4gICAgQGluY2x1ZGUgbWNrLWljb24oMTZweCwgJGFzc2V0OiAkbW9iaWxlLWFzc2V0KTtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oMjRweCwgJGFzc2V0OiAkZGVza3RvcC1hc3NldCk7XG4gICAgfVxufVxuXG4vLyBza2VsZXRvblxuQG1peGluIHNrZWxldG9uLWJnIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItaW1hZ2Utc2l6ZSB7XG4gICAgd2lkdGg6IDgxcHg7XG4gICAgaGVpZ2h0OiA4MnB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMjE5cHg7XG4gICAgICAgIGhlaWdodDogMTE5cHg7XG4gICAgfVxufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItc3RhdHVzLXNpemUge1xuICAgIHdpZHRoOiAxMTdweDtcbiAgICBoZWlnaHQ6IDc4cHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAxMTdweDtcbiAgICAgICAgaGVpZ2h0OiA3OHB4O1xuICAgIH1cbn1cbiIsIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGNvbG9yLWJyYW5kLWVsZWN0cmljLWJsdWU6ICMyMjUxZmY7XG4kY29sb3ItYnJhbmQtZGVlcC1ibHVlOiAjMDUxYzJjO1xuJGNvbG9yLWJyYW5kLWN5YW46ICMwMGE5ZjQ7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kZm9udC1kYXJrOiAjMDAwO1xuJGZvbnQtbGlnaHQ6ICNmZmY7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuJGdyZWVuMTogIzIxOTY1MztcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2xvci1wcmltYXJ5OiAjMTkzN2VhO1xuJGNvbG9yLXByaW1hcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcbiRjb2xvci1wcmltYXJ5LWRhcms6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuXG4kY29sb3Itc2Vjb25kYXJ5OiAjNDI4NUY0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodDogbGlnaHRlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG4kY29sb3Itc2Vjb25kYXJ5LWRhcms6IGRhcmtlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG5cbiRiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuJGZvb3Rlci1iYWNrOiAjMjYzMjM4O1xuJGhlYWRlci1iYWNrOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNTFDMkMsICMwNTFDMkMgNDAlLCAjMEIyNDUzIDYwJSwgIzFGNDBFNiAxMDAlKTtcblxuJGNvbG9yLXRlcm5hcnk6ICMwNTFjMmM7XG5cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuXG4kZm9udC1zdGFjazogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiRoZWFkaW5nLWZvbnQ6IFwiTGFyaXNoTWNLaW5zZXlcIiwgJ0dlb3JnaWEnLCBzZXJpZjtcbiRmb250OiAkZm9udC1zdGFjaztcblxuJGZvbnQtZmFtaWx5LXByaW1hcnk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LXNlY29uZGFyeTogXCJCb3dlclwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiIHNlcmlmO1xuXG4kYmFzZS1zaXplOiAxNnB4O1xuJHRhYmxldC1zaXplOiAxNnB4O1xuJG1vYmlsZS1zaXplOiAxNnB4O1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGJyZWFrLW1vYmlsZTogNDUwcHg7XG4kYnJlYWstdGFibGV0OiA4MDBweDtcbiRicmVhay1sYXB0b3A6IDEwMjRweDtcblxuJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGU6IDgwMHB4O1xuJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQ6IDEwNDhweDtcbiRicmVhay1sYW5kc2NhcGUtbGFwdG9wOiAxMjgwcHg7XG4iLCJAaW1wb3J0ICcuL3ZhcmlhYmxlcyc7XG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuQG1peGluIGJveC1zaGFkb3coJGNvbG9yOiAjMDAwLCAkZGVwdGg6IDEpIHtcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMXB4ICogKCRkZXB0aCAtIDEpIHJnYmEoIzAwMCwgLjIpLFxuICAgICAgICAgICAgICAgIDAgMXB4IDFweCAwIHJnYmEoIzAwMCwgLjE0KSxcbiAgICAgICAgICAgICAgICAwIDJweCAxcHggLTFweCByZ2JhKCMwMDAsIC4xMik7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG5AbWl4aW4gcmVzcG9uZC10bygkbWVkaWEpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gIEBlbHNlIGlmICRtZWRpYSA9PSBsYXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1AZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQGltcG9ydCBcImxpYnMvdWkvc3JjL2xpYi9taXhpbnNcIjtcbkBpbXBvcnQgJ3ZhcmlhYmxlcyc7XG5AaW1wb3J0ICdtaXhpbnMnO1xuXG5cblxuXG4ubG9hZGluZyB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoI2ZmZmZmZiwgMC41KTtcbiAgcGFkZGluZzogM2VtO1xufVxuLmJvb2tpbmctY29udGVudCB7XG4gIG1hcmdpbjogMCBhdXRvIDAgYXV0bztcbiAgcGFkZGluZzogMXB4IDBweCAxMjBweCAwO1xuICA+ZGl2IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAmLm9wZW4ge1xuICAgIG1hcmdpbjogMCBhdXRvIDI4MHB4IGF1dG87XG4gIH1cbiAgLmRldGFpbHMge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgcGFkZGluZzogMDtcbiAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgcGFkZGluZy1ib3R0b206IDQwcHg7XG4gICAgfVxuICAgID5kaXYge1xuICAgICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICB9XG4gICAgaDEge1xuICAgICAgZm9udC1zaXplOiAzMnB4O1xuICAgICAgbWFyZ2luOiAxMHB4IDAgNDBweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIC8vIGZvbnQtZmFtaWx5OiAnQm93ZXInO1xuICAgIH1cbiAgICBsYWJlbCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIHBhZGRpbmc6IDRweCAwIDIwcHggMDtcbiAgICAgIHNwYW4ge1xuICAgICAgICBwYWRkaW5nOiAwIDE4cHg7XG4gICAgICB9XG4gICAgfVxuICAgIC5zZWN0aW9uIHtcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgIGgxIHtcbiAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgfVxuICAgICAgPmRpdiB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgbWF4LXdpZHRoOiA2NzFweDtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgID5kaXYge1xuICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDE1cHg7XG4gICAgICAgICAgbWluLXdpZHRoOiAyMDBweDtcbiAgICAgICAgfVxuICAgICAgICBoMiB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgY29sb3I6ICMzMzMzMzM7XG4gICAgICAgICAgbWFyZ2luOiAwIDAgMjBweCAwO1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1wcmltYXJ5O1xuICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICAgIH1cbiAgICAgICAgfSAgICAgICBcbiAgICAgIH1cbiAgICAgICYuYm90dG9tIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgICAgICAgcGFkZGluZzogMjhweCAyMHB4O1xuICAgICAgICAucmVjLWRldGFpbHMtcGVyaW9kIHtcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDEwMHB4O1xuICAgICAgICB9XG4gICAgICAgID5kaXYge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICAgIHBhZGRpbmc6IDIwcHg7XG5cbiAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgID4gZGl2e1xuICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICBwYWRkaW5nOiAwIDAgMCAwO1xuICB9XG59XG4uYm90dG9tLXBhbmVsIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiA4MHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgei1pbmRleDogMjtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAmLmZpeGVkIHtcbiAgICBwb3NpdGlvbjogZml4ZWQgIWltcG9ydGFudDtcbiAgfVxuICBcbiAgLmJ1dHRvbnMge1xuICAgIC8vIHBhZGRpbmc6IDI0cHggMTZweDtcbiAgICAvLyBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1heC13aWR0aDogbm9uZTtcblxuICAgID5kaXYge1xuICAgICAgbWF4LXdpZHRoOiA4ODBweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGJ1dHRvbiB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgfVxuICAgICAgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogNXB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRDBEMEQwO1xuICAgICAgfVxuICAgICAgYnV0dG9uOm50aC1jaGlsZCgyKSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gICAgICB9XG4gICAgfVxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgcGFkZGluZzogMTZweCAwO1xuICAgICAgPmRpdiB7XG4gICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgbWFyZ2luOiAwIDE2cHg7XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiA4cHg7XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9uOm50aC1jaGlsZCgyKSB7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cbi5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXJ7XG5cbiAgJi5saW1pdC1oZWlnaHQge1xuICAgIC8vIG1heC1oZWlnaHQ6IDg0MnB4O1xuICAgIGhlaWdodDogODR2aDtcbiAgICAvLyBtYXgtaGVpZ2h0OiA5M3ZoO1xuICB9XG5cbiAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgJi5saW1pdC1oZWlnaHQge1xuICAgICAgaGVpZ2h0OiA5NXZoO1xuICAgICAgbWF4LWhlaWdodDogODg2cHg7XG4gICAgfVxuXG4gICAgLmJvb2tpbmctY29udGVudCwgLm1jay1zY3JvbGx7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAuZGV0YWlsc3tcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cbn0iXX0= */"] }); /*@__PURE__*/ @@ -50736,35 +51464,35 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons "../../node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js"); var i2 = __webpack_require__( - /*! ../room-booking-details-form/room-booking-details-form.component */ - "./src/app/booking/room-booking-details-form/room-booking-details-form.component.ts"); - - var i3 = __webpack_require__( /*! ../booking-confirmation/booking-confirmation.component */ "./src/app/booking/booking-confirmation/booking-confirmation.component.ts"); - var i4 = __webpack_require__( + var i3 = __webpack_require__( /*! ../../components/topbar-header/topbar-header.component */ "./src/app/components/topbar-header/topbar-header.component.ts"); + var i4 = __webpack_require__( + /*! ../room-booking-details-form/room-booking-details-form.component */ + "./src/app/booking/room-booking-details-form/room-booking-details-form.component.ts"); + var i5 = __webpack_require__( /*! @angular/material/button */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/button.js"); function BookingEditComponent_div_1_Template(rf, ctx) { if (rf & 1) { - var _r8 = i0.ɵɵgetCurrentView(); + var _r5 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div", 16); - i0.ɵɵelement(1, "img", 17); - i0.ɵɵelementStart(2, "p", 18); + i0.ɵɵelementStart(0, "div", 6); + i0.ɵɵelement(1, "img", 7); + i0.ɵɵelementStart(2, "p", 8); i0.ɵɵtext(3); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(4, "img", 19); + i0.ɵɵelementStart(4, "img", 9); i0.ɵɵlistener("click", function BookingEditComponent_div_1_Template_img_click_4_listener() { - i0.ɵɵrestoreView(_r8); - var ctx_r7 = i0.ɵɵnextContext(); - return ctx_r7.hideWarningBanner(); + i0.ɵɵrestoreView(_r5); + var ctx_r4 = i0.ɵɵnextContext(); + return ctx_r4.hideWarningBanner(); }); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); @@ -50777,37 +51505,54 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } } - function BookingEditComponent_a_topbar_header_3_Template(rf, ctx) { + function BookingEditComponent_div_2_a_topbar_header_1_Template(rf, ctx) { if (rf & 1) { - var _r10 = i0.ɵɵgetCurrentView(); + var _r9 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "a-topbar-header", 20); - i0.ɵɵlistener("closeCallback", function BookingEditComponent_a_topbar_header_3_Template_a_topbar_header_closeCallback_0_listener() { - i0.ɵɵrestoreView(_r10); - var ctx_r9 = i0.ɵɵnextContext(); - return ctx_r9.discardChanges(); + i0.ɵɵelementStart(0, "a-topbar-header", 13); + i0.ɵɵlistener("closeCallback", function BookingEditComponent_div_2_a_topbar_header_1_Template_a_topbar_header_closeCallback_0_listener() { + i0.ɵɵrestoreView(_r9); + var ctx_r8 = i0.ɵɵnextContext(2); + return ctx_r8.discardChanges(); }); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r1 = i0.ɵɵnextContext(); - i0.ɵɵproperty("mode", ctx_r1.TopBarHeaderMode.Light)("modal", true)("noSurvey", true); + var ctx_r6 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("mode", ctx_r6.TopBarHeaderMode.Light)("modal", true)("noSurvey", true); } } - function BookingEditComponent_a_topbar_header_4_Template(rf, ctx) { + function BookingEditComponent_div_2_a_topbar_header_2_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelement(0, "a-topbar-header", 21); + i0.ɵɵelement(0, "a-topbar-header", 14); } if (rf & 2) { - var ctx_r2 = i0.ɵɵnextContext(); - i0.ɵɵproperty("mode", ctx_r2.TopBarHeaderMode.Light)("back", ctx_r2.backRoute); + var ctx_r7 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("mode", ctx_r7.TopBarHeaderMode.Light)("back", ctx_r7.backRoute); + } + } + + function BookingEditComponent_div_2_Template(rf, ctx) { + if (rf & 1) { + i0.ɵɵelementStart(0, "div", 10); + i0.ɵɵtemplate(1, BookingEditComponent_div_2_a_topbar_header_1_Template, 1, 3, "a-topbar-header", 11); + i0.ɵɵtemplate(2, BookingEditComponent_div_2_a_topbar_header_2_Template, 1, 2, "a-topbar-header", 12); + i0.ɵɵelementEnd(); + } + + if (rf & 2) { + var ctx_r1 = i0.ɵɵnextContext(); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r1.modal); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", !ctx_r1.modal); } } - function BookingEditComponent_div_19_Template(rf, ctx) { + function BookingEditComponent_div_3_div_14_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div"); i0.ɵɵelementStart(1, "div"); @@ -50823,45 +51568,45 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } if (rf & 2) { - var ctx_r3 = i0.ɵɵnextContext(); + var ctx_r10 = i0.ɵɵnextContext(2); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Date: ", ctx_r3.dateString, ""); + i0.ɵɵtextInterpolate1("Date: ", ctx_r10.dateString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Time: ", ctx_r3.timeString, ""); + i0.ɵɵtextInterpolate1("Time: ", ctx_r10.timeString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate2("", ctx_r3.type, " meeting (", ctx_r3.durationString, ")"); + i0.ɵɵtextInterpolate2("", ctx_r10.type, " meeting (", ctx_r10.durationString, ")"); } } - function BookingEditComponent_div_20_span_4_Template(rf, ctx) { + function BookingEditComponent_div_3_div_15_span_4_Template(rf, ctx) { if (rf & 1) { - var _r13 = i0.ɵɵgetCurrentView(); + var _r14 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "span", 24); - i0.ɵɵlistener("click", function BookingEditComponent_div_20_span_4_Template_span_click_0_listener() { - i0.ɵɵrestoreView(_r13); - var ctx_r12 = i0.ɵɵnextContext(2); - return ctx_r12.openRecurrenceConflictsModal(ctx_r12.booking == null ? null : ctx_r12.booking.room); + i0.ɵɵelementStart(0, "span", 25); + i0.ɵɵlistener("click", function BookingEditComponent_div_3_div_15_span_4_Template_span_click_0_listener() { + i0.ɵɵrestoreView(_r14); + var ctx_r13 = i0.ɵɵnextContext(3); + return ctx_r13.openRecurrenceConflictsModal(ctx_r13.booking == null ? null : ctx_r13.booking.room); }); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r11 = i0.ɵɵnextContext(2); + var ctx_r12 = i0.ɵɵnextContext(3); var tmp_0_0 = null; i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate1(" - Conflicts(", (tmp_0_0 = ctx_r11.isConflictWithOccurences()) == null ? null : tmp_0_0.total_Conflicts, ") "); + i0.ɵɵtextInterpolate1(" - Conflicts(", (tmp_0_0 = ctx_r12.isConflictWithOccurences()) == null ? null : tmp_0_0.total_Conflicts, ") "); } } - function BookingEditComponent_div_20_Template(rf, ctx) { + function BookingEditComponent_div_3_div_15_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div"); - i0.ɵɵelementStart(1, "div", 22); + i0.ɵɵelementStart(1, "div", 23); i0.ɵɵtext(2); i0.ɵɵpipe(3, "titlecase"); - i0.ɵɵtemplate(4, BookingEditComponent_div_20_span_4_Template, 2, 1, "span", 23); + i0.ɵɵtemplate(4, BookingEditComponent_div_3_div_15_span_4_Template, 2, 1, "span", 24); i0.ɵɵelementEnd(); i0.ɵɵelementStart(5, "div"); i0.ɵɵtext(6); @@ -50879,42 +51624,117 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } if (rf & 2) { - var ctx_r4 = i0.ɵɵnextContext(); + var ctx_r11 = i0.ɵɵnextContext(2); var tmp_1_0 = null; - var currVal_1 = (tmp_1_0 = ctx_r4.isConflictWithOccurences()) == null ? null : tmp_1_0.is_conflict; + var currVal_1 = (tmp_1_0 = ctx_r11.isConflictWithOccurences()) == null ? null : tmp_1_0.is_conflict; i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("", (ctx_r4.data == null ? null : ctx_r4.data.value == null ? null : ctx_r4.data.value.recurrence_period) === "list" ? "Specific dates" : i0.ɵɵpipeBind1(3, 7, ctx_r4.data == null ? null : ctx_r4.data.value == null ? null : ctx_r4.data.value.recurrence_period), " "); + i0.ɵɵtextInterpolate1("", (ctx_r11.data == null ? null : ctx_r11.data.value == null ? null : ctx_r11.data.value.recurrence_period) === "list" ? "Specific dates" : i0.ɵɵpipeBind1(3, 7, ctx_r11.data == null ? null : ctx_r11.data.value == null ? null : ctx_r11.data.value.recurrence_period), " "); i0.ɵɵadvance(2); i0.ɵɵproperty("ngIf", currVal_1); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Start date: ", ctx_r4.dateString, ""); + i0.ɵɵtextInterpolate1("Start date: ", ctx_r11.dateString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("End date: ", ctx_r4.endDateString, ""); + i0.ɵɵtextInterpolate1("End date: ", ctx_r11.endDateString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Time: ", ctx_r4.timeString, ""); + i0.ɵɵtextInterpolate1("Time: ", ctx_r11.timeString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate2("", ctx_r4.type, " meeting (", ctx_r4.durationString, ")"); + i0.ɵɵtextInterpolate2("", ctx_r11.type, " meeting (", ctx_r11.durationString, ")"); } } - function BookingEditComponent_div_30_Template(rf, ctx) { + function BookingEditComponent_div_3_Template(rf, ctx) { if (rf & 1) { - var _r15 = i0.ɵɵgetCurrentView(); + var _r16 = i0.ɵɵgetCurrentView(); + + i0.ɵɵelementStart(0, "div", 15); + i0.ɵɵelementStart(1, "div", 16); + i0.ɵɵelementStart(2, "div", 17); + i0.ɵɵelementStart(3, "div", 18); + i0.ɵɵelementStart(4, "div"); + i0.ɵɵelementStart(5, "h1"); + i0.ɵɵtext(6); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(7, "div", 19); + i0.ɵɵelementStart(8, "div"); + i0.ɵɵelementStart(9, "app-room-booking-details-form", 20); + i0.ɵɵlistener("submitForm", function BookingEditComponent_div_3_Template_app_room_booking_details_form_submitForm_9_listener($event) { + i0.ɵɵrestoreView(_r16); + var ctx_r15 = i0.ɵɵnextContext(); + return ctx_r15.submitForm($event); + })("validateForm", function BookingEditComponent_div_3_Template_app_room_booking_details_form_validateForm_9_listener($event) { + i0.ɵɵrestoreView(_r16); + var ctx_r17 = i0.ɵɵnextContext(); + return ctx_r17.validateForm($event); + }); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(10, "div", 21); + i0.ɵɵelementStart(11, "div"); + i0.ɵɵelementStart(12, "h2"); + i0.ɵɵtext(13); + i0.ɵɵelementEnd(); + i0.ɵɵtemplate(14, BookingEditComponent_div_3_div_14_Template, 7, 4, "div", 22); + i0.ɵɵtemplate(15, BookingEditComponent_div_3_div_15_Template, 13, 9, "div", 22); + i0.ɵɵelementStart(16, "div"); + i0.ɵɵelementStart(17, "div"); + i0.ɵɵtext(18); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(19, "div"); + i0.ɵɵtext(20); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(21, "div"); + i0.ɵɵtext(22); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + } + + if (rf & 2) { + var ctx_r2 = i0.ɵɵnextContext(); + i0.ɵɵadvance(6); + i0.ɵɵtextInterpolate1("Book ", ctx_r2.booking == null ? null : ctx_r2.booking.space == null ? null : ctx_r2.booking.space.local_name, ""); + i0.ɵɵadvance(3); + i0.ɵɵproperty("booking", ctx_r2.booking)("triggerSubmit", ctx_r2.submitTimestamp); + i0.ɵɵadvance(4); + i0.ɵɵtextInterpolate1("", (ctx_r2.data == null ? null : ctx_r2.data.value == null ? null : ctx_r2.data.value.is_recurrent) ? "Recurring" : "Room", " Booking Details"); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", !(ctx_r2.data == null ? null : ctx_r2.data.value == null ? null : ctx_r2.data.value.is_recurrent)); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r2.data == null ? null : ctx_r2.data.value == null ? null : ctx_r2.data.value.is_recurrent); + i0.ɵɵadvance(3); + i0.ɵɵtextInterpolate2("Address: ", ctx_r2.building == null ? null : ctx_r2.building.address, ", ", ctx_r2.building == null ? null : ctx_r2.building.city, ""); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate1("Room: ", ctx_r2.booking == null ? null : ctx_r2.booking.space == null ? null : ctx_r2.booking.space.local_name, ""); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate1("Capacity: ", ctx_r2.booking == null ? null : ctx_r2.booking.space == null ? null : ctx_r2.booking.space.capacity, ""); + } + } + + function BookingEditComponent_div_4_div_2_Template(rf, ctx) { + if (rf & 1) { + var _r21 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "div"); - i0.ɵɵelementStart(1, "button", 25); - i0.ɵɵlistener("click", function BookingEditComponent_div_30_Template_button_click_1_listener() { - i0.ɵɵrestoreView(_r15); - var ctx_r14 = i0.ɵɵnextContext(); - return ctx_r14.goToBackRoute(); + i0.ɵɵelementStart(1, "button", 28); + i0.ɵɵlistener("click", function BookingEditComponent_div_4_div_2_Template_button_click_1_listener() { + i0.ɵɵrestoreView(_r21); + var ctx_r20 = i0.ɵɵnextContext(2); + return ctx_r20.goToBackRoute(); }); i0.ɵɵtext(2, "Back"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(3, "button", 26); - i0.ɵɵlistener("click", function BookingEditComponent_div_30_Template_button_click_3_listener() { - i0.ɵɵrestoreView(_r15); - var ctx_r16 = i0.ɵɵnextContext(); - return ctx_r16.createBooking(); + i0.ɵɵelementStart(3, "button", 29); + i0.ɵɵlistener("click", function BookingEditComponent_div_4_div_2_Template_button_click_3_listener() { + i0.ɵɵrestoreView(_r21); + var ctx_r22 = i0.ɵɵnextContext(2); + return ctx_r22.createBooking(); }); i0.ɵɵtext(4); i0.ɵɵelementEnd(); @@ -50922,35 +51742,35 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } if (rf & 2) { - var ctx_r5 = i0.ɵɵnextContext(); + var ctx_r18 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); - i0.ɵɵproperty("disabled", ctx_r5.loading); + i0.ɵɵproperty("disabled", ctx_r18.loading); i0.ɵɵadvance(2); - i0.ɵɵclassProp("disabled", ctx_r5.invalidForm); - i0.ɵɵproperty("disabled", ctx_r5.loading || ctx_r5.invalidForm); + i0.ɵɵclassProp("disabled", ctx_r18.invalidForm); + i0.ɵɵproperty("disabled", ctx_r18.loading || ctx_r18.invalidForm); i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate2("", ctx_r5.isEditSeries ? "Update" : "Create", " Booking", ctx_r5.is_request ? " Request" : "", ""); + i0.ɵɵtextInterpolate2("", ctx_r18.isEditSeries ? "Update" : "Create", " Booking", ctx_r18.is_request ? " Request" : "", ""); } } - function BookingEditComponent_div_31_Template(rf, ctx) { + function BookingEditComponent_div_4_div_3_Template(rf, ctx) { if (rf & 1) { - var _r18 = i0.ɵɵgetCurrentView(); + var _r24 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "div"); - i0.ɵɵelementStart(1, "button", 25); - i0.ɵɵlistener("click", function BookingEditComponent_div_31_Template_button_click_1_listener() { - i0.ɵɵrestoreView(_r18); - var ctx_r17 = i0.ɵɵnextContext(); - return ctx_r17.discardChanges(); + i0.ɵɵelementStart(1, "button", 28); + i0.ɵɵlistener("click", function BookingEditComponent_div_4_div_3_Template_button_click_1_listener() { + i0.ɵɵrestoreView(_r24); + var ctx_r23 = i0.ɵɵnextContext(2); + return ctx_r23.discardChanges(); }); i0.ɵɵtext(2, "Back"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(3, "button", 26); - i0.ɵɵlistener("click", function BookingEditComponent_div_31_Template_button_click_3_listener() { - i0.ɵɵrestoreView(_r18); - var ctx_r19 = i0.ɵɵnextContext(); - return ctx_r19.createBooking(); + i0.ɵɵelementStart(3, "button", 29); + i0.ɵɵlistener("click", function BookingEditComponent_div_4_div_3_Template_button_click_3_listener() { + i0.ɵɵrestoreView(_r24); + var ctx_r25 = i0.ɵɵnextContext(2); + return ctx_r25.createBooking(); }); i0.ɵɵtext(4, "Update Booking"); i0.ɵɵelementEnd(); @@ -50958,12 +51778,38 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } if (rf & 2) { - var ctx_r6 = i0.ɵɵnextContext(); + var ctx_r19 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); - i0.ɵɵproperty("disabled", ctx_r6.loading); + i0.ɵɵproperty("disabled", ctx_r19.loading); + i0.ɵɵadvance(2); + i0.ɵɵclassProp("disabled", ctx_r19.invalidForm); + i0.ɵɵproperty("disabled", ctx_r19.loading || ctx_r19.invalidForm); + } + } + + var _c0 = function _c0(a0) { + return { + "fixed": a0 + }; + }; + + function BookingEditComponent_div_4_Template(rf, ctx) { + if (rf & 1) { + i0.ɵɵelementStart(0, "div", 26); + i0.ɵɵelementStart(1, "div", 27); + i0.ɵɵtemplate(2, BookingEditComponent_div_4_div_2_Template, 5, 6, "div", 22); + i0.ɵɵtemplate(3, BookingEditComponent_div_4_div_3_Template, 5, 4, "div", 22); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + } + + if (rf & 2) { + var ctx_r3 = i0.ɵɵnextContext(); + i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3, _c0, !ctx_r3.placeIntoModal)); i0.ɵɵadvance(2); - i0.ɵɵclassProp("disabled", ctx_r6.invalidForm); - i0.ɵɵproperty("disabled", ctx_r6.loading || ctx_r6.invalidForm); + i0.ɵɵproperty("ngIf", !ctx_r3.modal && !ctx_r3.placeIntoModal); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r3.placeIntoModal); } } @@ -50979,6 +51825,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons _this203 = _super74.apply(this, arguments); _this203.updateCallback = new core_1.EventEmitter(); + /** + * placeIntoModal: Input decorator indecate as a flag to adapt component design into a dialog modal + * (by hiding header and adjusting height so that fit into a modal) + */ + + _this203.placeIntoModal = false; return _this203; } @@ -51000,7 +51852,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons _this204.isEditSeries = next.action === data_common_1.SeriesAction.EDIT; } })); - this.modal = !this.isEditSeries; + this.modal = !this.isEditSeries && !this.placeIntoModal; this.roomEmail = this.booking.space.email; var attendees = ((_c = (_b = (_a = this.data) === null || _a === void 0 ? void 0 : _a.value) === null || _b === void 0 ? void 0 : _b.attendees) === null || _c === void 0 ? void 0 : _c.length) && ((_f = (_e = (_d = this.data) === null || _d === void 0 ? void 0 : _d.value) === null || _e === void 0 ? void 0 : _e.attendees[0]) === null || _f === void 0 ? void 0 : _f.meta) ? this.data.value.attendees : this.booking.attendees.filter(function (bk) { return bk.name !== '' && bk.email !== ''; @@ -51193,75 +52045,25 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons type: BookingEditComponent, selectors: [["app-booking-edit"]], inputs: { - booking: "booking" + booking: "booking", + placeIntoModal: "placeIntoModal" }, outputs: { updateCallback: "updateCallback" }, features: [i0.ɵɵInheritDefinitionFeature], - decls: 33, - vars: 21, - consts: [[1, "mck-column", "mck-content-expand", "mck-content-page-container", "booking-form-base-container"], ["class", "fixed warning banner", 4, "ngIf"], [1, "header"], [3, "mode", "modal", "noSurvey", "closeCallback", 4, "ngIf"], [3, "mode", "back", 4, "ngIf"], [1, "mck-column", "mck-center", "results-container", "mck-scroll"], [1, "mck-column", "mck-scroll", "mck-content-expand-width"], [1, "booking-content", "mck-column", "mck-center", "mck-content-body"], [1, "details"], [1, "section"], [3, "booking", "triggerSubmit", "submitForm", "validateForm"], [1, "section", "bottom"], [4, "ngIf"], [1, "bottom-panel"], [1, "buttons"], [3, "confirmed", "loading", "modal", "dataForConfirmation", "callback"], [1, "fixed", "warning", "banner"], ["src", "assets/icon/booking_cancelled.svg"], [1, "banner-text"], ["src", "assets/icon/close-red.svg", 3, "click"], [3, "mode", "modal", "noSurvey", "closeCallback"], [3, "mode", "back"], [1, "rec-details-period"], [3, "click", 4, "ngIf"], [3, "click"], ["mat-button", "", "color", "secondary", 1, "mck-secondary-button", 3, "disabled", "click"], ["mat-button", "", "color", "primary", 1, "mck-primary-button", 3, "disabled", "click"]], + decls: 6, + vars: 13, + consts: [[1, "mck-column", "mck-content-expand", "mck-content-page-container", "booking-form-base-container"], ["class", "fixed warning banner", 4, "ngIf"], ["class", "header", 4, "ngIf"], ["class", "mck-column mck-center results-container mck-scroll", 4, "ngIf"], ["class", "bottom-panel", 3, "ngClass", 4, "ngIf"], [3, "confirmed", "loading", "placeIntoModal", "modal", "dataForConfirmation", "callback"], [1, "fixed", "warning", "banner"], ["src", "assets/icon/booking_cancelled.svg"], [1, "banner-text"], ["src", "assets/icon/close-red.svg", 3, "click"], [1, "header"], [3, "mode", "modal", "noSurvey", "closeCallback", 4, "ngIf"], [3, "mode", "back", 4, "ngIf"], [3, "mode", "modal", "noSurvey", "closeCallback"], [3, "mode", "back"], [1, "mck-column", "mck-center", "results-container", "mck-scroll"], [1, "mck-column", "mck-scroll", "mck-content-expand-width"], [1, "booking-content", "mck-column", "mck-center", "mck-content-body"], [1, "details"], [1, "section"], [3, "booking", "triggerSubmit", "submitForm", "validateForm"], [1, "section", "bottom"], [4, "ngIf"], [1, "rec-details-period"], [3, "click", 4, "ngIf"], [3, "click"], [1, "bottom-panel", 3, "ngClass"], [1, "buttons"], ["mat-button", "", "color", "secondary", 1, "mck-secondary-button", 3, "disabled", "click"], ["mat-button", "", "color", "primary", 1, "mck-primary-button", 3, "disabled", "click"]], template: function BookingEditComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 0); i0.ɵɵtemplate(1, BookingEditComponent_div_1_Template, 5, 1, "div", 1); - i0.ɵɵelementStart(2, "div", 2); - i0.ɵɵtemplate(3, BookingEditComponent_a_topbar_header_3_Template, 1, 3, "a-topbar-header", 3); - i0.ɵɵtemplate(4, BookingEditComponent_a_topbar_header_4_Template, 1, 2, "a-topbar-header", 4); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(5, "div", 5); - i0.ɵɵelementStart(6, "div", 6); - i0.ɵɵelementStart(7, "div", 7); - i0.ɵɵelementStart(8, "div", 8); - i0.ɵɵelementStart(9, "div"); - i0.ɵɵelementStart(10, "h1"); - i0.ɵɵtext(11); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(12, "div", 9); - i0.ɵɵelementStart(13, "div"); - i0.ɵɵelementStart(14, "app-room-booking-details-form", 10); - i0.ɵɵlistener("submitForm", function BookingEditComponent_Template_app_room_booking_details_form_submitForm_14_listener($event) { - return ctx.submitForm($event); - })("validateForm", function BookingEditComponent_Template_app_room_booking_details_form_validateForm_14_listener($event) { - return ctx.validateForm($event); - }); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(15, "div", 11); - i0.ɵɵelementStart(16, "div"); - i0.ɵɵelementStart(17, "h2"); - i0.ɵɵtext(18); - i0.ɵɵelementEnd(); - i0.ɵɵtemplate(19, BookingEditComponent_div_19_Template, 7, 4, "div", 12); - i0.ɵɵtemplate(20, BookingEditComponent_div_20_Template, 13, 9, "div", 12); - i0.ɵɵelementStart(21, "div"); - i0.ɵɵelementStart(22, "div"); - i0.ɵɵtext(23); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(24, "div"); - i0.ɵɵtext(25); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(26, "div"); - i0.ɵɵtext(27); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(28, "div", 13); - i0.ɵɵelementStart(29, "div", 14); - i0.ɵɵtemplate(30, BookingEditComponent_div_30_Template, 5, 6, "div", 12); - i0.ɵɵtemplate(31, BookingEditComponent_div_31_Template, 5, 4, "div", 12); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(32, "booking-confirmation", 15); - i0.ɵɵlistener("callback", function BookingEditComponent_Template_booking_confirmation_callback_32_listener() { + i0.ɵɵtemplate(2, BookingEditComponent_div_2_Template, 3, 2, "div", 2); + i0.ɵɵtemplate(3, BookingEditComponent_div_3_Template, 23, 10, "div", 3); + i0.ɵɵtemplate(4, BookingEditComponent_div_4_Template, 4, 5, "div", 4); + i0.ɵɵelementStart(5, "booking-confirmation", 5); + i0.ɵɵlistener("callback", function BookingEditComponent_Template_booking_confirmation_callback_5_listener() { return ctx.callback(); }); i0.ɵɵelementEnd(); @@ -51269,40 +52071,22 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } if (rf & 2) { - i0.ɵɵclassProp("fullpage-modal", ctx.modal); + i0.ɵɵclassProp("fullpage-modal", ctx.modal)("limit-height", ctx.placeIntoModal); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.showWarningBanner); - i0.ɵɵadvance(2); - i0.ɵɵproperty("ngIf", ctx.modal); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", !ctx.modal); - i0.ɵɵadvance(7); - i0.ɵɵtextInterpolate1("Book ", ctx.booking == null ? null : ctx.booking.space == null ? null : ctx.booking.space.local_name, ""); - i0.ɵɵadvance(3); - i0.ɵɵproperty("booking", ctx.booking)("triggerSubmit", ctx.submitTimestamp); - i0.ɵɵadvance(4); - i0.ɵɵtextInterpolate1("", (ctx.data == null ? null : ctx.data.value == null ? null : ctx.data.value.is_recurrent) ? "Recurring" : "Room", " Booking Details"); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", !(ctx.data == null ? null : ctx.data.value == null ? null : ctx.data.value.is_recurrent)); + i0.ɵɵproperty("ngIf", !ctx.placeIntoModal); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.data == null ? null : ctx.data.value == null ? null : ctx.data.value.is_recurrent); - i0.ɵɵadvance(3); - i0.ɵɵtextInterpolate2("Address: ", ctx.building == null ? null : ctx.building.address, ", ", ctx.building == null ? null : ctx.building.city, ""); - i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Room: ", ctx.booking == null ? null : ctx.booking.space == null ? null : ctx.booking.space.local_name, ""); - i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Capacity: ", ctx.booking == null ? null : ctx.booking.space == null ? null : ctx.booking.space.capacity, ""); - i0.ɵɵadvance(3); - i0.ɵɵproperty("ngIf", !ctx.modal); + i0.ɵɵproperty("ngIf", !ctx.confirmed && !ctx.loading); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.modal); + i0.ɵɵproperty("ngIf", !ctx.confirmed && !ctx.loading); i0.ɵɵadvance(1); - i0.ɵɵproperty("confirmed", ctx.confirmed)("loading", ctx.loading)("modal", ctx.modal)("dataForConfirmation", ctx.dataForConfirmation); + i0.ɵɵproperty("confirmed", ctx.confirmed)("loading", ctx.loading)("placeIntoModal", ctx.placeIntoModal)("modal", ctx.modal)("dataForConfirmation", ctx.dataForConfirmation); } }, - directives: [i1.NgIf, i2.RoomBookingDetailsFormComponent, i3.BookingConfirmationComponent, i4.TopbarHeaderComponent, i5.MatButton], + directives: [i1.NgIf, i2.BookingConfirmationComponent, i3.TopbarHeaderComponent, i4.RoomBookingDetailsFormComponent, i1.NgClass, i5.MatButton], pipes: [i1.TitleCasePipe], - styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\n\n\n\n\n\n\n.loading[_ngcontent-%COMP%] {\n background-color: rgba(255, 255, 255, 0.5);\n padding: 3em;\n}\n.booking-content[_ngcontent-%COMP%] {\n margin: 0 auto 0 auto;\n padding: 1px 20px 120px 0;\n}\n.booking-content[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 100%;\n}\n.booking-content.open[_ngcontent-%COMP%] {\n margin: 0 auto 280px auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n border: 1px solid #E6E6E6;\n background-color: white;\n padding: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 1024px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 32px;\n margin: 10px 0 40px;\n font-weight: 500;\n width: 100%;\n text-align: center;\n font-family: \"Bower\";\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-size: 16px;\n padding: 4px 0 20px 0;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n padding: 0 18px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 400;\n font-size: 16px;\n color: #333333;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 400;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n max-width: 671px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n line-height: 24px;\n padding-bottom: 15px;\n min-width: 200px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n width: 100%;\n display: block;\n color: #333333;\n margin: 0 0 20px 0;\n font-weight: 500;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n padding: 28px 20px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] .rec-details-period[_ngcontent-%COMP%] {\n cursor: pointer;\n text-decoration: underline;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background-color: white;\n padding: 20px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0px 0px 100px 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0px 0px 100px 0;\n }\n}\n.bottom-panel[_ngcontent-%COMP%] {\n position: fixed;\n bottom: 0;\n width: 100%;\n min-height: 80px;\n background-color: white;\n border: 1px solid #E6E6E6;\n z-index: 2;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 24px 16px;\n border: 1px solid #E6E6E6;\n width: 100%;\n max-width: none;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 880px;\n margin: 0 auto;\n display: flex;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex: 1;\n height: 48px;\n font-size: 16px;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 5px;\n border: 1px solid #D0D0D0;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 5px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9taXhpbnMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNwVUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQTFEQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDNUNBOztzQkFBQTtBQ1BBO0VBQ0UsMENBQUE7RUFDQSxZQUFBO0FKdUNGO0FJckNBO0VBQ0UscUJBQUE7RUFDQSx5QkFBQTtBSndDRjtBSXZDRTtFQUNFLFdBQUE7QUp5Q0o7QUl2Q0U7RUFDRSx5QkFBQTtBSnlDSjtBSXZDRTtFQUNFLHlCQUFBO0VBQ0EsdUJBQUE7RUFDQSxVQUFBO0FKeUNKO0FHNUNRO0VDQU47SUFLSSxvQkFBQTtFSjJDSjtBQUNGO0FHOUNRO0VDSE47SUFLSSxvQkFBQTtFSmdESjtBQUNGO0FJL0NJO0VBQ0UsaUJBQUE7RUFDQSxjQUFBO0FKaUROO0FJL0NJO0VBQ0UsZUFBQTtFQUNBLG1CQUFBO0VBQ0EsZ0JBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7RUFDQSxvQkFBQTtBSmlETjtBSS9DSTtFQUNFLGNBQUE7RUFDQSxlQUFBO0VBQ0EscUJBQUE7QUppRE47QUloRE07RUFDRSxlQUFBO0FKa0RSO0FJL0NJO0VBQ0UsZUFBQTtFQUNBLGdCQUFBO0VBQ0EsZUFBQTtFQUNBLGNBQUE7QUppRE47QUloRE07RUFDRSxlQUFBO0VBQ0EsZ0JBQUE7QUprRFI7QUloRE07RUFDRSxhQUFBO0VBQ0EsZUFBQTtFQUNBLGdCQUFBO0VBQ0EsY0FBQTtBSmtEUjtBSWpEUTtFQUNFLE9BQUE7RUFDQSxpQkFBQTtFQUNBLG9CQUFBO0VBQ0EsZ0JBQUE7QUptRFY7QUlqRFE7RUFDRSxXQUFBO0VBQ0EsY0FBQTtFQUNBLGNBQUE7RUFDQSxrQkFBQTtFQUNBLGdCQUFBO0VBQ0EscUdGdEJZO0FGeUV0QjtBQ25IWTtFRzBESjtJQVFJLGVBQUE7RUpxRFY7QUFDRjtBQ3hIWTtFRzBESjtJQVFJLGVBQUE7RUowRFY7QUFDRjtBSXZETTtFQUNFLHlCQUFBO0VBQ0Esa0JBQUE7QUp5RFI7QUl4RFE7RUFDRSxlQUFBO0VBQ0EsMEJBQUE7QUowRFY7QUNySVk7RUdzRU47SUFRSSxxQkFBQTtFSjJEUjtBQUNGO0FDMUlZO0VHc0VOO0lBUUkscUJBQUE7RUpnRVI7QUFDRjtBSS9EUTtFQUNFLHVCQUFBO0VBQ0EsYUFBQTtBSmlFVjtBQ25KWTtFR3FGQTtJQUNFLGlCQUFBO0VKaUVaO0FBQ0Y7QUN4Slk7RUdxRkE7SUFDRSxpQkFBQTtFSnNFWjtBQUNGO0FDN0pZO0VHRVo7SUE2Rkksd0JBQUE7RUprRUY7QUFDRjtBQ2xLWTtFR0VaO0lBNkZJLHdCQUFBO0VKdUVGO0FBQ0Y7QUlyRUE7RUFDRSxlQUFBO0VBQ0EsU0FBQTtFQUNBLFdBQUE7RUFDQSxnQkFBQTtFQUNBLHVCQUFBO0VBQ0EseUJBQUE7RUFDQSxVQUFBO0FKd0VGO0FJdEVFO0VBQ0Usa0JBQUE7RUFDQSx5QkFBQTtFQUNBLFdBQUE7RUFDQSxlQUFBO0FKd0VKO0FJdEVJO0VBQ0UsZ0JBQUE7RUFDQSxjQUFBO0VBQ0EsYUFBQTtBSndFTjtBSXZFTTtFQUNFLE9BQUE7RUFDQSxZQUFBO0VBQ0EsZUFBQTtBSnlFUjtBSXZFTTtFQUNFLGlCQUFBO0VBQ0EseUJBQUE7QUp5RVI7QUl2RU07RUFDRSxnQkFBQTtBSnlFUjtBQ3hNWTtFRzJHVjtJQXdCSSxlQUFBO0VKeUVKO0VJdkVNO0lBQ0UsY0FBQTtFSnlFUjtFSXZFTTtJQUNFLGlCQUFBO0VKeUVSO0VJdkVNO0lBQ0UsZ0JBQUE7RUp5RVI7QUFDRjtBQ3ROWTtFRzJHVjtJQXdCSSxlQUFBO0VKdUZKO0VJckZNO0lBQ0UsY0FBQTtFSnVGUjtFSXJGTTtJQUNFLGlCQUFBO0VKdUZSO0VJckZNO0lBQ0UsZ0JBQUE7RUp1RlI7QUFDRjtBQ3BPWTtFR3dKUjtJQUNFLFlBQUE7RUpnRko7RUkvRUk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUppRk47QUFDRjtBQzlPWTtFR3dKUjtJQUNFLFlBQUE7RUp5Rko7RUl4Rkk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUowRk47QUFDRiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIiRwcmltYXJ5OiAjMUY0MEU2O1xuJGZvcm0tbGFiZWw6ICMwNTFDMkM7XG4kc2Vjb25kYXJ5LWxhYmVsOiAjNzY3Njc2O1xuJGJvcmRlcjogI0IzQjNCMztcbiRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkOiAjRDBEMEQwO1xuJGNoaXAtY29sb3I6ICMzMzMzMzM7XG4kcGxhY2Vob2xkZXItY29sb3I6ICM3RjdGN0Y7XG4kYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDtcbiRwYWdlLWJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4kc2VsZWN0ZWQtb3B0aW9uOiAjRTZFNkU2O1xuJGNvbG9yLWJyYW5kLXllbGxvdzogI2ZmZDA0ODtcbiRsaWdodC15ZWxsb3c6ICNmZmYzY2U7XG4kY29hY2htYXJrLXRleHQ6ICM2ZjRkMDA7XG4kZXJyb3ItY29sb3I6ICNFMTJFNDA7XG4kbm8tZmlsdGVycy1jb2xvcjogI0JDQkNCQztcbiRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjogI0Y0RjRGNDtcbiRwcmltYXJ5LWhpZ2hsaWdodDogIzIyNTFGRjtcbiRzY3JvbGxiYXItY29sb3I6ICM3NTc1NzU7XG5cbiRhdmFpbGFibGUtY29sb3I6ICM1RDlENTI7XG4kYXZhaWxhYmxlLWJ5LXJlcXVlc3QtY29sb3I6ICNGNUI1M0Y7XG4kaW4tdXNlLWNvbG9yOiAjRDQ0ODNFO1xuJG5vdC1ib29rYWJsZS1jb2xvcjogI0NDQ0NDQztcblxuJG1vZGFsLWJvZHktaGVhZGluZzogIzRENEQ0RDtcbiRhbGVydC1vdmVybGF5LWJnOiByZ2JhKDUsIDI4LCA0NCwgMC44NSk7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvYWNobWFyay1iZzogI0VCRUJGNjtcbiRjb2FjaG1hcmstZGFyay10ZXh0OiAjMUIxQjE5O1xuJGVycm9yLXRleHQ6ICNmZmY7XG5cbi8qKlxuICogU3BhY2luZ1xuICovXG5cbi8vIDRweFxuJHNwYWNpbmctc21hbGxlc3Q6IDAuMjVyZW07XG5cbi8vIDhweFxuJHNwYWNpbmcteHhzbWFsbDogMC41cmVtO1xuXG4vLyAxMnB4XG4kc3BhY2luZy14c21hbGw6IDAuNzVyZW07XG5cbi8vIDE2cHhcbiRzcGFjaW5nLXNtYWxsOiAxcmVtO1xuXG4vLyAyMHB4XG4kc3BhY2luZy1zbWFsbC1tZWRpdW06IDEuMjVyZW07XG5cbi8vIDI0cHhcbiRzcGFjaW5nLW1lZGl1bTogMS41cmVtO1xuXG4vLyAyOHB4XG4kc3BhY2luZy1tZWRpdW0tbGFyZ2U6IDEuNzVyZW07XG5cbi8vIDMycHhcbiRzcGFjaW5nLWxhcmdlOiAycmVtO1xuXG4vLyA0OHB4XG4kc3BhY2luZy14bGFyZ2U6IDNyZW07XG5cbi8vIDY0cHhcbiRzcGFjaW5nLXh4bGFyZ2U6IDRyZW07XG5cbi8vIDk2cHhcbiRzcGFjaW5nLWxhcmdlc3Q6IDZyZW07XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kZGV2aWNlLW1vYmlsZS1zaXplOiA0NTBweDtcbiRkZXZpY2UtdGFibGV0LXNpemU6IDgwMHB4O1xuJGRldmljZS1sYXB0b3Atc2l6ZTogMTAyNHB4O1xuXG4kZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZTogMTA0OHB4O1xuJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemU6IDEyODBweDtcblxuXG46ZXhwb3J0IHtcbiAgICBwcmltYXJ5OiAkcHJpbWFyeTtcbiAgICBzZWNvbmRhcnlMYWJlbDogJHNlY29uZGFyeS1sYWJlbDtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbiRpY29uLXNtYWxsOiAxNnB4O1xuJGljb24tbWVkaXVtOiAyNHB4O1xuJGljb24tbGFyZ2U6IDMycHg7XG4kaWNvbi14bGFyZ2U6IDQ4cHg7XG4iLCIvKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLmxvYWRpbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gIHBhZGRpbmc6IDNlbTtcbn1cblxuLmJvb2tpbmctY29udGVudCB7XG4gIG1hcmdpbjogMCBhdXRvIDAgYXV0bztcbiAgcGFkZGluZzogMXB4IDIwcHggMTIwcHggMDtcbn1cbi5ib29raW5nLWNvbnRlbnQgPiBkaXYge1xuICB3aWR0aDogMTAwJTtcbn1cbi5ib29raW5nLWNvbnRlbnQub3BlbiB7XG4gIG1hcmdpbjogMCBhdXRvIDI4MHB4IGF1dG87XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogNDBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMge1xuICAgIHBhZGRpbmctYm90dG9tOiA0MHB4O1xuICB9XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzID4gZGl2IHtcbiAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyBoMSB7XG4gIGZvbnQtc2l6ZTogMzJweDtcbiAgbWFyZ2luOiAxMHB4IDAgNDBweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgd2lkdGg6IDEwMCU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiQm93ZXJcIjtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgbGFiZWwge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZm9udC1zaXplOiAxNnB4O1xuICBwYWRkaW5nOiA0cHggMCAyMHB4IDA7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIGxhYmVsIHNwYW4ge1xuICBwYWRkaW5nOiAwIDE4cHg7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uIHtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGNvbG9yOiAjMzMzMzMzO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiBoMSB7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIG1heC13aWR0aDogNjcxcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiA+IGRpdiB7XG4gIGZsZXg6IDE7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMTVweDtcbiAgbWluLXdpZHRoOiAyMDBweDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYgaDIge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYgaDIge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYgaDIge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgfVxufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBwYWRkaW5nOiAyOHB4IDIwcHg7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSAucmVjLWRldGFpbHMtcGVyaW9kIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSB7XG4gICAgcGFkZGluZy1ib3R0b206IDEwMHB4O1xuICB9XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSA+IGRpdiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBwYWRkaW5nOiAyMHB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20gPiBkaXYgPiBkaXYge1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20gPiBkaXYgPiBkaXYge1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwcHggMHB4IDEwMHB4IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwcHggMHB4IDEwMHB4IDA7XG4gIH1cbn1cblxuLmJvdHRvbS1wYW5lbCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogODBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gIHotaW5kZXg6IDI7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zIHtcbiAgcGFkZGluZzogMjRweCAxNnB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiBub25lO1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiB7XG4gIG1heC13aWR0aDogODgwcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBkaXNwbGF5OiBmbGV4O1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b24ge1xuICBmbGV4OiAxO1xuICBoZWlnaHQ6IDQ4cHg7XG4gIGZvbnQtc2l6ZTogMTZweDtcbn1cbi5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gIG1hcmdpbi1yaWdodDogNXB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjRDBEMEQwO1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgbWFyZ2luLWxlZnQ6IDVweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMge1xuICAgIHBhZGRpbmc6IDE2cHggMDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbiB7XG4gICAgbWFyZ2luOiAwIDE2cHg7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMikge1xuICAgIG1hcmdpbi1sZWZ0OiA4cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm90dG9tLXBhbmVsIC5idXR0b25zIHtcbiAgICBwYWRkaW5nOiAxNnB4IDA7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b24ge1xuICAgIG1hcmdpbjogMCAxNnB4O1xuICB9XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gICAgbWFyZ2luLXJpZ2h0OiA4cHg7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgICBtYXJnaW4tbGVmdDogOHB4O1xuICB9XG59XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCwgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCAuZGV0YWlscywgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCAuZGV0YWlscyB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCwgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCAuZGV0YWlscywgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCAuZGV0YWlscyB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxufSIsIkBpbXBvcnQgXCJ2YXJzXCI7XG5cbkBtaXhpbiBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRzaXplLCAkcXVhbGlmaWVyKSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAaWYgKCRxdWFsaWZpZXIgPT0gbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSBpZiAoJHF1YWxpZmllciA9PSBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWF4LXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5AbWl4aW4gYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRtaW4sICRtYXgpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkbWluKSBhbmQgKG1heC13aWR0aDogJG1heCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIHRoaXMgaXMgYSBjb3B5IG9mIHJlc3BvbmQtdG8uIHdlIGRvbid0IHdhbnQgdG8gcHJlc2VydmUgdGhhdCBtZXRob2Qgc2luY2UgdGhlIGJyZWFrcG9pbnRzIG1heSBkaXZlcmdlIGZyb20gdGhlIG9sZCBVSS5cbkBtaXhpbiBpcy1zY3JlZW4tc2l6ZSgkbWVkaWE6IGFsbCwgJG9yaWVudGF0aW9uOiBub25lKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cblxuQG1peGluIHBhZ2UtcGFkZGluZyB7XG4gICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbDtcbn1cblxuLy8gRm9udCBNaXhpbnNcbiRmb250LW1ja2luc2V5LXNhbnM6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuJGZvbnQtdGhlaW5oYXJkdDogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4kZm9udC1ib3dlcjogXCJCb3dlclwiO1xuXG5AbWl4aW4gYm93ZXItYm9sZCB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWJvd2VyO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBtY2tpbnNleS1zYW5zIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gZGlzcGxheS0xIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiA0cmVtOyAvLyA2NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4NzsgLy8gNzZweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMiB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDYwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS00IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogM3JlbTsgLy8gNDhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE2NjsgLy8gNTZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS01IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjgzMzsgLy8gMzRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjQyOyAvLyA0MHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS03IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyOHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTEge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA0OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi43NXJlbTsgLy8gNDRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDUycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTIge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTExOyAvLyA0NHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNDhweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMyB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIyMjsgLy8gNDRweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjg4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1NTsgLy8gMjhweFxuICAgIH1cbn1cblxuQG1peGluIGJvZHktZGVmYXVsdCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNnB4XG4gICAgfVxufVxuXG4vLy8gRG9lc250IGV4aXN0IGluIE1EUy5cbkBtaXhpbiBib2R5LXRpbnkge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtOyAvLyAxMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjRweFxuICAgIH1cbn1cblxuQG1peGluIGZvcm0tbGFiZWwge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LXRoZWluaGFyZHQ7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGNvbG9yOiAkcGxhY2Vob2xkZXItY29sb3I7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbn1cblxuQG1peGluIGNoaXAtbGFiZWwge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBjaGVja2JveC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGNvbG9yOiBibGFjaztcbn1cblxuLy8gYm9yZGVyc1xuXG5AbWl4aW4gbWNrLWNoZWNrYm94LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay10aGluLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXItbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBib3JkZXItY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudC1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuXG4vLyBmdW5jdGlvbnNcblxuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG5AbWl4aW4gbWF4LWxpbmVzKCRjb3VudCkge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiAkY291bnQ7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbn1cblxuLy8gaW1hZ2VzXG5AbWl4aW4gbWNrLWljb24oJHdpZHRoLCAkYXNzZXQsICRoZWlnaHQ6ICR3aWR0aCwgICRhc3NldFBhdGg6IFwibGlicy91aS9zcmMvbGliL2ljb25zXCIsKSB7XG4gICAgd2lkdGg6ICR3aWR0aDtcbiAgICBoZWlnaHQ6ICRoZWlnaHQ7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiI3skYXNzZXRQYXRofS8jeyRhc3NldH1cIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuXG5cbkBtaXhpbiBtY2stc21hbGwtaWNvbigkbW9iaWxlLWFzc2V0LCAkZGVza3RvcC1hc3NldDogJG1vYmlsZS1hc3NldCkge1xuICAgIEBpbmNsdWRlIG1jay1pY29uKDE2cHgsICRhc3NldDogJG1vYmlsZS1hc3NldCk7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICRhc3NldDogJGRlc2t0b3AtYXNzZXQpO1xuICAgIH1cbn1cblxuLy8gc2tlbGV0b25cbkBtaXhpbiBza2VsZXRvbi1iZyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWltYWdlLXNpemUge1xuICAgIHdpZHRoOiA4MXB4O1xuICAgIGhlaWdodDogODJweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDIxOXB4O1xuICAgICAgICBoZWlnaHQ6IDExOXB4O1xuICAgIH1cbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLXN0YXR1cy1zaXplIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMTE3cHg7XG4gICAgICAgIGhlaWdodDogNzhweDtcbiAgICB9XG59XG4iLCIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRjb2xvci1icmFuZC1lbGVjdHJpYy1ibHVlOiAjMjI1MWZmO1xuJGNvbG9yLWJyYW5kLWRlZXAtYmx1ZTogIzA1MWMyYztcbiRjb2xvci1icmFuZC1jeWFuOiAjMDBhOWY0O1xuXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGZvbnQtZGFyazogIzAwMDtcbiRmb250LWxpZ2h0OiAjZmZmO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcbiRncmVlbjE6ICMyMTk2NTM7XG5cbiRwZW5kaW5nOiAjZmZiMzAwO1xuJHBlbmRpbmctbGlnaHQ6IGxpZ2h0ZW4oJHBlbmRpbmcsIDEwKTtcbiRwZW5kaW5nLWRhcms6IGRhcmtlbigkcGVuZGluZywgMTApO1xuXG4kZXJyb3I6ICNlNTM5MzU7XG4kZXJyb3ItbGlnaHQ6IGxpZ2h0ZW4oJGVycm9yLCAxMCk7XG4kZXJyb3ItZGFyazogZGFya2VuKCRlcnJvciwgMTApO1xuXG4kY29sb3ItcHJpbWFyeTogIzE5MzdlYTtcbiRjb2xvci1wcmltYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG4kY29sb3ItcHJpbWFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcblxuJGNvbG9yLXNlY29uZGFyeTogIzQyODVGNDtcbiRjb2xvci1zZWNvbmRhcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuJGNvbG9yLXNlY29uZGFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuXG4kYmFja2dyb3VuZDogI2YwZjBmMDtcbiRmb290ZXItYmFjazogIzI2MzIzODtcbiRoZWFkZXItYmFjazogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMDUxQzJDLCAjMDUxQzJDIDQwJSwgIzBCMjQ1MyA2MCUsICMxRjQwRTYgMTAwJSk7XG5cbiRjb2xvci10ZXJuYXJ5OiAjMDUxYzJjO1xuXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cblxuJGZvbnQtc3RhY2s6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuXG4kaGVhZGluZy1mb250OiBcIkxhcmlzaE1jS2luc2V5XCIsICdHZW9yZ2lhJywgc2VyaWY7XG4kZm9udDogJGZvbnQtc3RhY2s7XG5cbiRmb250LWZhbWlseS1wcmltYXJ5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbiRmb250LWZhbWlseS1zZWNvbmRhcnk6IFwiQm93ZXJcIiwgR2VvcmdpYSwgXCJUaW1lcyBOZXcgUm9tYW5cIiBzZXJpZjtcblxuJGJhc2Utc2l6ZTogMTZweDtcbiR0YWJsZXQtc2l6ZTogMTZweDtcbiRtb2JpbGUtc2l6ZTogMTZweDtcblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbiRicmVhay1tb2JpbGU6IDQ1MHB4O1xuJGJyZWFrLXRhYmxldDogODAwcHg7XG4kYnJlYWstbGFwdG9wOiAxMDI0cHg7XG5cbiRicmVhay1sYW5kc2NhcGUtbW9iaWxlOiA4MDBweDtcbiRicmVhay1sYW5kc2NhcGUtdGFibGV0OiAxMDQ4cHg7XG4kYnJlYWstbGFuZHNjYXBlLWxhcHRvcDogMTI4MHB4O1xuIiwiQGltcG9ydCAnLi92YXJpYWJsZXMnO1xuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbkBtaXhpbiBib3gtc2hhZG93KCRjb2xvcjogIzAwMCwgJGRlcHRoOiAxKSB7XG4gICAgYm94LXNoYWRvdzogMCAxcHggM3B4IDFweCAqICgkZGVwdGggLSAxKSByZ2JhKCMwMDAsIC4yKSxcbiAgICAgICAgICAgICAgICAwIDFweCAxcHggMCByZ2JhKCMwMDAsIC4xNCksXG4gICAgICAgICAgICAgICAgMCAycHggMXB4IC0xcHggcmdiYSgjMDAwLCAuMTIpO1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuQG1peGluIHJlc3BvbmQtdG8oJG1lZGlhKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9ICBAZWxzZSBpZiAkbWVkaWEgPT0gbGF0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9QGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIkBpbXBvcnQgXCJsaWJzL3VpL3NyYy9saWIvbWl4aW5zXCI7XG5AaW1wb3J0ICd2YXJpYWJsZXMnO1xuQGltcG9ydCAnbWl4aW5zJztcblxuXG5cblxuLmxvYWRpbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCNmZmZmZmYsIDAuNSk7XG4gIHBhZGRpbmc6IDNlbTtcbn1cbi5ib29raW5nLWNvbnRlbnQge1xuICBtYXJnaW46IDAgYXV0byAwIGF1dG87XG4gIHBhZGRpbmc6IDFweCAyMHB4IDEyMHB4IDA7XG4gID5kaXYge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gICYub3BlbiB7XG4gICAgbWFyZ2luOiAwIGF1dG8gMjgwcHggYXV0bztcbiAgfVxuICAuZGV0YWlscyB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIEBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNDBweDtcbiAgICB9XG4gICAgPmRpdiB7XG4gICAgICBtYXgtd2lkdGg6IDEwMjRweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIH1cbiAgICBoMSB7XG4gICAgICBmb250LXNpemU6IDMycHg7XG4gICAgICBtYXJnaW46IDEwcHggMCA0MHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgZm9udC1mYW1pbHk6ICdCb3dlcic7XG4gICAgfVxuICAgIGxhYmVsIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgcGFkZGluZzogNHB4IDAgMjBweCAwO1xuICAgICAgc3BhbiB7XG4gICAgICAgIHBhZGRpbmc6IDAgMThweDtcbiAgICAgIH1cbiAgICB9XG4gICAgLnNlY3Rpb24ge1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgICAgaDEge1xuICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICB9XG4gICAgICA+ZGl2IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBtYXgtd2lkdGg6IDY3MXB4O1xuICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgICAgPmRpdiB7XG4gICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICBsaW5lLWhlaWdodDogMjRweDtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTVweDtcbiAgICAgICAgICBtaW4td2lkdGg6IDIwMHB4O1xuICAgICAgICB9XG4gICAgICAgIGgyIHtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgICAgICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LXByaW1hcnk7XG4gICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgICAgfVxuICAgICAgICB9ICAgICAgIFxuICAgICAgfVxuICAgICAgJi5ib3R0b20ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICAgICAgICBwYWRkaW5nOiAyOHB4IDIwcHg7XG4gICAgICAgIC5yZWMtZGV0YWlscy1wZXJpb2Qge1xuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG4gICAgICAgIH1cbiAgICAgICAgPmRpdiB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgICAgcGFkZGluZzogMjBweDtcblxuICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgPiBkaXZ7XG4gICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgIHBhZGRpbmc6IDBweCAwcHggMTAwcHggMDtcbiAgfVxufVxuLmJvdHRvbS1wYW5lbCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogODBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gIHotaW5kZXg6IDI7XG4gIFxuICAuYnV0dG9ucyB7XG4gICAgcGFkZGluZzogMjRweCAxNnB4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiBub25lO1xuXG4gICAgPmRpdiB7XG4gICAgICBtYXgtd2lkdGg6IDg4MHB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYnV0dG9uIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgaGVpZ2h0OiA0OHB4O1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICB9XG4gICAgICBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gICAgICB9XG4gICAgICBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgIH1cbiAgICB9XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICBwYWRkaW5nOiAxNnB4IDA7XG4gICAgICA+ZGl2IHtcbiAgICAgICAgYnV0dG9uIHtcbiAgICAgICAgICBtYXJnaW46IDAgMTZweDtcbiAgICAgICAgfVxuICAgICAgICBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgICAgICAgfVxuICAgICAgICBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogOHB4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lcntcblxuICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcblxuICAgIC5ib29raW5nLWNvbnRlbnQsIC5tY2stc2Nyb2xse1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgLmRldGFpbHN7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgICAgfVxuICAgIH1cblxuICB9XG59Il19 */"] + styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\n\n\n\n\n\n\n.loading[_ngcontent-%COMP%] {\n background-color: rgba(255, 255, 255, 0.5);\n padding: 3em;\n}\n.booking-content[_ngcontent-%COMP%] {\n margin: 0 auto 0 auto;\n padding: 1px 0px 120px 0;\n}\n.booking-content[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 100%;\n}\n.booking-content.open[_ngcontent-%COMP%] {\n margin: 0 auto 280px auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n border: 1px solid #E6E6E6;\n background-color: white;\n padding: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 1024px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 32px;\n margin: 10px 0 40px;\n font-weight: 500;\n width: 100%;\n text-align: center;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-size: 16px;\n padding: 4px 0 20px 0;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n padding: 0 18px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 400;\n font-size: 16px;\n color: #333333;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 400;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n max-width: 671px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n line-height: 24px;\n padding-bottom: 15px;\n min-width: 200px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n width: 100%;\n display: block;\n color: #333333;\n margin: 0 0 20px 0;\n font-weight: 500;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n padding: 28px 20px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] .rec-details-period[_ngcontent-%COMP%] {\n cursor: pointer;\n text-decoration: underline;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background-color: white;\n padding: 20px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0 0 0 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0 0 0 0;\n }\n}\n.bottom-panel[_ngcontent-%COMP%] {\n position: absolute;\n bottom: 0;\n width: 100%;\n min-height: 80px;\n background-color: white;\n border: 1px solid #E6E6E6;\n z-index: 2;\n flex-direction: row;\n display: flex;\n align-items: center;\n}\n.bottom-panel.fixed[_ngcontent-%COMP%] {\n position: fixed !important;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n width: 100%;\n max-width: none;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 880px;\n margin: 0 auto;\n display: flex;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex: 1;\n height: 48px;\n font-size: 16px;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 5px;\n border: 1px solid #D0D0D0;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 5px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n.booking-form-base-container.limit-height[_ngcontent-%COMP%] {\n height: 84vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-form-base-container.limit-height[_ngcontent-%COMP%] {\n height: 95vh;\n max-height: 886px;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-form-base-container.limit-height[_ngcontent-%COMP%] {\n height: 95vh;\n max-height: 886px;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9taXhpbnMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNwVUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQTFEQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDNUNBOztzQkFBQTtBQ1BBO0VBQ0UsMENBQUE7RUFDQSxZQUFBO0FKdUNGO0FJckNBO0VBQ0UscUJBQUE7RUFDQSx3QkFBQTtBSndDRjtBSXZDRTtFQUNFLFdBQUE7QUp5Q0o7QUl2Q0U7RUFDRSx5QkFBQTtBSnlDSjtBSXZDRTtFQUNFLHlCQUFBO0VBQ0EsdUJBQUE7RUFDQSxVQUFBO0FKeUNKO0FHNUNRO0VDQU47SUFLSSxvQkFBQTtFSjJDSjtBQUNGO0FHOUNRO0VDSE47SUFLSSxvQkFBQTtFSmdESjtBQUNGO0FJL0NJO0VBQ0UsaUJBQUE7RUFDQSxjQUFBO0FKaUROO0FJL0NJO0VBQ0UsZUFBQTtFQUNBLG1CQUFBO0VBQ0EsZ0JBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7QUppRE47QUk5Q0k7RUFDRSxjQUFBO0VBQ0EsZUFBQTtFQUNBLHFCQUFBO0FKZ0ROO0FJL0NNO0VBQ0UsZUFBQTtBSmlEUjtBSTlDSTtFQUNFLGVBQUE7RUFDQSxnQkFBQTtFQUNBLGVBQUE7RUFDQSxjQUFBO0FKZ0ROO0FJL0NNO0VBQ0UsZUFBQTtFQUNBLGdCQUFBO0FKaURSO0FJL0NNO0VBQ0UsYUFBQTtFQUNBLGVBQUE7RUFDQSxnQkFBQTtFQUNBLGNBQUE7QUppRFI7QUloRFE7RUFDRSxPQUFBO0VBQ0EsaUJBQUE7RUFDQSxvQkFBQTtFQUNBLGdCQUFBO0FKa0RWO0FJaERRO0VBQ0UsV0FBQTtFQUNBLGNBQUE7RUFDQSxjQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLHFHRnRCWTtBRndFdEI7QUNsSFk7RUcwREo7SUFRSSxlQUFBO0VKb0RWO0FBQ0Y7QUN2SFk7RUcwREo7SUFRSSxlQUFBO0VKeURWO0FBQ0Y7QUl0RE07RUFDRSx5QkFBQTtFQUNBLGtCQUFBO0FKd0RSO0FJdkRRO0VBQ0UsZUFBQTtFQUNBLDBCQUFBO0FKeURWO0FDcElZO0VHc0VOO0lBUUkscUJBQUE7RUowRFI7QUFDRjtBQ3pJWTtFR3NFTjtJQVFJLHFCQUFBO0VKK0RSO0FBQ0Y7QUk5RFE7RUFDRSx1QkFBQTtFQUNBLGFBQUE7QUpnRVY7QUNsSlk7RUdxRkE7SUFDRSxpQkFBQTtFSmdFWjtBQUNGO0FDdkpZO0VHcUZBO0lBQ0UsaUJBQUE7RUpxRVo7QUFDRjtBQzVKWTtFR0VaO0lBNkZJLGdCQUFBO0VKaUVGO0FBQ0Y7QUNqS1k7RUdFWjtJQTZGSSxnQkFBQTtFSnNFRjtBQUNGO0FJcEVBO0VBQ0Usa0JBQUE7RUFDQSxTQUFBO0VBQ0EsV0FBQTtFQUNBLGdCQUFBO0VBQ0EsdUJBQUE7RUFDQSx5QkFBQTtFQUNBLFVBQUE7RUFDQSxtQkFBQTtFQUNBLGFBQUE7RUFDQSxtQkFBQTtBSnVFRjtBSXJFRTtFQUNFLDBCQUFBO0FKdUVKO0FJcEVFO0VBR0UsV0FBQTtFQUNBLGVBQUE7QUpvRUo7QUlsRUk7RUFDRSxnQkFBQTtFQUNBLGNBQUE7RUFDQSxhQUFBO0FKb0VOO0FJbkVNO0VBQ0UsT0FBQTtFQUNBLFlBQUE7RUFDQSxlQUFBO0FKcUVSO0FJbkVNO0VBQ0UsaUJBQUE7RUFDQSx5QkFBQTtBSnFFUjtBSW5FTTtFQUNFLGdCQUFBO0FKcUVSO0FDM01ZO0VHa0hWO0lBd0JJLGVBQUE7RUpxRUo7RUluRU07SUFDRSxjQUFBO0VKcUVSO0VJbkVNO0lBQ0UsaUJBQUE7RUpxRVI7RUluRU07SUFDRSxnQkFBQTtFSnFFUjtBQUNGO0FDek5ZO0VHa0hWO0lBd0JJLGVBQUE7RUptRko7RUlqRk07SUFDRSxjQUFBO0VKbUZSO0VJakZNO0lBQ0UsaUJBQUE7RUptRlI7RUlqRk07SUFDRSxnQkFBQTtFSm1GUjtBQUNGO0FJMUVFO0VBRUUsWUFBQTtBSjRFSjtBQzNPWTtFR29LUjtJQUNFLFlBQUE7SUFDQSxpQkFBQTtFSjBFSjtFSXZFRTtJQUNFLFlBQUE7RUp5RUo7RUl4RUk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUowRU47QUFDRjtBQ3hQWTtFR29LUjtJQUNFLFlBQUE7SUFDQSxpQkFBQTtFSnVGSjtFSXBGRTtJQUNFLFlBQUE7RUpzRko7RUlyRkk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUp1Rk47QUFDRiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIiRwcmltYXJ5OiAjMUY0MEU2O1xuJGZvcm0tbGFiZWw6ICMwNTFDMkM7XG4kc2Vjb25kYXJ5LWxhYmVsOiAjNzY3Njc2O1xuJGJvcmRlcjogI0IzQjNCMztcbiRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkOiAjRDBEMEQwO1xuJGNoaXAtY29sb3I6ICMzMzMzMzM7XG4kcGxhY2Vob2xkZXItY29sb3I6ICM3RjdGN0Y7XG4kYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDtcbiRwYWdlLWJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4kc2VsZWN0ZWQtb3B0aW9uOiAjRTZFNkU2O1xuJGNvbG9yLWJyYW5kLXllbGxvdzogI2ZmZDA0ODtcbiRsaWdodC15ZWxsb3c6ICNmZmYzY2U7XG4kY29hY2htYXJrLXRleHQ6ICM2ZjRkMDA7XG4kZXJyb3ItY29sb3I6ICNFMTJFNDA7XG4kbm8tZmlsdGVycy1jb2xvcjogI0JDQkNCQztcbiRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjogI0Y0RjRGNDtcbiRwcmltYXJ5LWhpZ2hsaWdodDogIzIyNTFGRjtcbiRzY3JvbGxiYXItY29sb3I6ICM3NTc1NzU7XG5cbiRhdmFpbGFibGUtY29sb3I6ICM1RDlENTI7XG4kYXZhaWxhYmxlLWJ5LXJlcXVlc3QtY29sb3I6ICNGNUI1M0Y7XG4kaW4tdXNlLWNvbG9yOiAjRDQ0ODNFO1xuJG5vdC1ib29rYWJsZS1jb2xvcjogI0NDQ0NDQztcblxuJG1vZGFsLWJvZHktaGVhZGluZzogIzRENEQ0RDtcbiRhbGVydC1vdmVybGF5LWJnOiByZ2JhKDUsIDI4LCA0NCwgMC44NSk7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvYWNobWFyay1iZzogI0VCRUJGNjtcbiRjb2FjaG1hcmstZGFyay10ZXh0OiAjMUIxQjE5O1xuJGVycm9yLXRleHQ6ICNmZmY7XG5cbi8qKlxuICogU3BhY2luZ1xuICovXG5cbi8vIDRweFxuJHNwYWNpbmctc21hbGxlc3Q6IDAuMjVyZW07XG5cbi8vIDhweFxuJHNwYWNpbmcteHhzbWFsbDogMC41cmVtO1xuXG4vLyAxMnB4XG4kc3BhY2luZy14c21hbGw6IDAuNzVyZW07XG5cbi8vIDE2cHhcbiRzcGFjaW5nLXNtYWxsOiAxcmVtO1xuXG4vLyAyMHB4XG4kc3BhY2luZy1zbWFsbC1tZWRpdW06IDEuMjVyZW07XG5cbi8vIDI0cHhcbiRzcGFjaW5nLW1lZGl1bTogMS41cmVtO1xuXG4vLyAyOHB4XG4kc3BhY2luZy1tZWRpdW0tbGFyZ2U6IDEuNzVyZW07XG5cbi8vIDMycHhcbiRzcGFjaW5nLWxhcmdlOiAycmVtO1xuXG4vLyA0OHB4XG4kc3BhY2luZy14bGFyZ2U6IDNyZW07XG5cbi8vIDY0cHhcbiRzcGFjaW5nLXh4bGFyZ2U6IDRyZW07XG5cbi8vIDk2cHhcbiRzcGFjaW5nLWxhcmdlc3Q6IDZyZW07XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kZGV2aWNlLW1vYmlsZS1zaXplOiA0NTBweDtcbiRkZXZpY2UtdGFibGV0LXNpemU6IDgwMHB4O1xuJGRldmljZS1sYXB0b3Atc2l6ZTogMTAyNHB4O1xuXG4kZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZTogMTA0OHB4O1xuJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemU6IDEyODBweDtcblxuXG46ZXhwb3J0IHtcbiAgICBwcmltYXJ5OiAkcHJpbWFyeTtcbiAgICBzZWNvbmRhcnlMYWJlbDogJHNlY29uZGFyeS1sYWJlbDtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbiRpY29uLXNtYWxsOiAxNnB4O1xuJGljb24tbWVkaXVtOiAyNHB4O1xuJGljb24tbGFyZ2U6IDMycHg7XG4kaWNvbi14bGFyZ2U6IDQ4cHg7XG4iLCIvKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLmxvYWRpbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gIHBhZGRpbmc6IDNlbTtcbn1cblxuLmJvb2tpbmctY29udGVudCB7XG4gIG1hcmdpbjogMCBhdXRvIDAgYXV0bztcbiAgcGFkZGluZzogMXB4IDBweCAxMjBweCAwO1xufVxuLmJvb2tpbmctY29udGVudCA+IGRpdiB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLmJvb2tpbmctY29udGVudC5vcGVuIHtcbiAgbWFyZ2luOiAwIGF1dG8gMjgwcHggYXV0bztcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMge1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcGFkZGluZzogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMge1xuICAgIHBhZGRpbmctYm90dG9tOiA0MHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyB7XG4gICAgcGFkZGluZy1ib3R0b206IDQwcHg7XG4gIH1cbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgPiBkaXYge1xuICBtYXgtd2lkdGg6IDEwMjRweDtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIGgxIHtcbiAgZm9udC1zaXplOiAzMnB4O1xuICBtYXJnaW46IDEwcHggMCA0MHB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICB3aWR0aDogMTAwJTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyBsYWJlbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXNpemU6IDE2cHg7XG4gIHBhZGRpbmc6IDRweCAwIDIwcHggMDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgbGFiZWwgc3BhbiB7XG4gIHBhZGRpbmc6IDAgMThweDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24ge1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgY29sb3I6ICMzMzMzMzM7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uIGgxIHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBmb250LXdlaWdodDogNDAwO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgbWF4LXdpZHRoOiA2NzFweDtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uID4gZGl2ID4gZGl2IHtcbiAgZmxleDogMTtcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gIHBhZGRpbmctYm90dG9tOiAxNXB4O1xuICBtaW4td2lkdGg6IDIwMHB4O1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiBoMiB7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgY29sb3I6ICMzMzMzMzM7XG4gIG1hcmdpbjogMCAwIDIwcHggMDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiBoMiB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiBoMiB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICB9XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIHBhZGRpbmc6IDI4cHggMjBweDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tIC5yZWMtZGV0YWlscy1wZXJpb2Qge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20ge1xuICAgIHBhZGRpbmctYm90dG9tOiAxMDBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG4gIH1cbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tID4gZGl2IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDIwcHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSA+IGRpdiA+IGRpdiB7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSA+IGRpdiA+IGRpdiB7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQge1xuICAgIHBhZGRpbmc6IDAgMCAwIDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwIDAgMCAwO1xuICB9XG59XG5cbi5ib3R0b20tcGFuZWwge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDgwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICB6LWluZGV4OiAyO1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLmJvdHRvbS1wYW5lbC5maXhlZCB7XG4gIHBvc2l0aW9uOiBmaXhlZCAhaW1wb3J0YW50O1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IG5vbmU7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IHtcbiAgbWF4LXdpZHRoOiA4ODBweDtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGRpc3BsYXk6IGZsZXg7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbiB7XG4gIGZsZXg6IDE7XG4gIGhlaWdodDogNDhweDtcbiAgZm9udC1zaXplOiAxNnB4O1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMikge1xuICBtYXJnaW4tbGVmdDogNXB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyB7XG4gICAgcGFkZGluZzogMTZweCAwO1xuICB9XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uIHtcbiAgICBtYXJnaW46IDAgMTZweDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMSkge1xuICAgIG1hcmdpbi1yaWdodDogOHB4O1xuICB9XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uOm50aC1jaGlsZCgyKSB7XG4gICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMge1xuICAgIHBhZGRpbmc6IDE2cHggMDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbiB7XG4gICAgbWFyZ2luOiAwIDE2cHg7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMikge1xuICAgIG1hcmdpbi1sZWZ0OiA4cHg7XG4gIH1cbn1cblxuLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lci5saW1pdC1oZWlnaHQge1xuICBoZWlnaHQ6IDg0dmg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1mb3JtLWJhc2UtY29udGFpbmVyLmxpbWl0LWhlaWdodCB7XG4gICAgaGVpZ2h0OiA5NXZoO1xuICAgIG1heC1oZWlnaHQ6IDg4NnB4O1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCwgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCAuZGV0YWlscywgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCAuZGV0YWlscyB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIubGltaXQtaGVpZ2h0IHtcbiAgICBoZWlnaHQ6IDk1dmg7XG4gICAgbWF4LWhlaWdodDogODg2cHg7XG4gIH1cbiAgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAuYm9va2luZy1jb250ZW50LCAuYm9va2luZy1mb3JtLWJhc2UtY29udGFpbmVyIC5tY2stc2Nyb2xsIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gIH1cbiAgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzLCAuYm9va2luZy1mb3JtLWJhc2UtY29udGFpbmVyIC5tY2stc2Nyb2xsIC5kZXRhaWxzIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICB9XG59IiwiQGltcG9ydCBcInZhcnNcIjtcblxuQG1peGluIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJHNpemUsICRxdWFsaWZpZXIpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBpZiAoJHF1YWxpZmllciA9PSBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIGlmICgkcXVhbGlmaWVyID09IG1heC13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtYXgtd2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBtaXhpbiBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJG1pbiwgJG1heCkge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gdGhpcyBpcyBhIGNvcHkgb2YgcmVzcG9uZC10by4gd2UgZG9uJ3Qgd2FudCB0byBwcmVzZXJ2ZSB0aGF0IG1ldGhvZCBzaW5jZSB0aGUgYnJlYWtwb2ludHMgbWF5IGRpdmVyZ2UgZnJvbSB0aGUgb2xkIFVJLlxuQG1peGluIGlzLXNjcmVlbi1zaXplKCRtZWRpYTogYWxsLCAkb3JpZW50YXRpb246IG5vbmUpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuXG5AbWl4aW4gcGFnZS1wYWRkaW5nIHtcbiAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xufVxuXG4vLyBGb250IE1peGluc1xuJGZvbnQtbWNraW5zZXktc2FuczogXCJNY0tpbnNleSBTYW5zXCI7XG4kZm9udC10aGVpbmhhcmR0OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiRmb250LWJvd2VyOiBcIkJvd2VyXCI7XG5cbkBtaXhpbiBib3dlci1ib2xkIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtYm93ZXI7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIG1ja2luc2V5LXNhbnMge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBkaXNwbGF5LTEge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDRyZW07IC8vIDY0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTg3OyAvLyA3NnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0yIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0zIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTQge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzcmVtOyAvLyA0OHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTY2OyAvLyA1NnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDY0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTUge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuODMzOyAvLyAzNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42NDI7IC8vIDQwcHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTcge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDQ4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjc1cmVtOyAvLyA0NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNTJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICBsaW5lLWhlaWdodDogMS4xMTE7IC8vIDQ0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA0OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0zIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjIyOyAvLyA0NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy00IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy01IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyODhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy02IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTU1OyAvLyAyOHB4XG4gICAgfVxufVxuXG5AbWl4aW4gYm9keS1kZWZhdWx0IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI2cHhcbiAgICB9XG59XG5cbi8vLyBEb2VzbnQgZXhpc3QgaW4gTURTLlxuQG1peGluIGJvZHktdGlueSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07IC8vIDEycHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyMHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZm9ybS1sYWJlbCB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LWZhbWlseTogJGZvbnQtdGhlaW5oYXJkdDtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgY29sb3I6ICRwbGFjZWhvbGRlci1jb2xvcjtcbiAgICBmb250LXdlaWdodDogMzAwO1xufVxuXG5AbWl4aW4gY2hpcC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIGNoZWNrYm94LWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgY29sb3I6IGJsYWNrO1xufVxuXG4vLyBib3JkZXJzXG5cbkBtaXhpbiBtY2stY2hlY2tib3gtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAycHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLXRoaW4tYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlci1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJvcmRlci1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50LWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXItbGlnaHQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5cbi8vIGZ1bmN0aW9uc1xuXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbkBtaXhpbiBtYXgtbGluZXMoJGNvdW50KSB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAtd2Via2l0LWxpbmUtY2xhbXA6ICRjb3VudDtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuXG4vLyBpbWFnZXNcbkBtaXhpbiBtY2staWNvbigkd2lkdGgsICRhc3NldCwgJGhlaWdodDogJHdpZHRoLCAgJGFzc2V0UGF0aDogXCJsaWJzL3VpL3NyYy9saWIvaWNvbnNcIiwpIHtcbiAgICB3aWR0aDogJHdpZHRoO1xuICAgIGhlaWdodDogJGhlaWdodDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIjeyRhc3NldFBhdGh9LyN7JGFzc2V0fVwiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG59XG5cblxuQG1peGluIG1jay1zbWFsbC1pY29uKCRtb2JpbGUtYXNzZXQsICRkZXNrdG9wLWFzc2V0OiAkbW9iaWxlLWFzc2V0KSB7XG4gICAgQGluY2x1ZGUgbWNrLWljb24oMTZweCwgJGFzc2V0OiAkbW9iaWxlLWFzc2V0KTtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oMjRweCwgJGFzc2V0OiAkZGVza3RvcC1hc3NldCk7XG4gICAgfVxufVxuXG4vLyBza2VsZXRvblxuQG1peGluIHNrZWxldG9uLWJnIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItaW1hZ2Utc2l6ZSB7XG4gICAgd2lkdGg6IDgxcHg7XG4gICAgaGVpZ2h0OiA4MnB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMjE5cHg7XG4gICAgICAgIGhlaWdodDogMTE5cHg7XG4gICAgfVxufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItc3RhdHVzLXNpemUge1xuICAgIHdpZHRoOiAxMTdweDtcbiAgICBoZWlnaHQ6IDc4cHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAxMTdweDtcbiAgICAgICAgaGVpZ2h0OiA3OHB4O1xuICAgIH1cbn1cbiIsIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGNvbG9yLWJyYW5kLWVsZWN0cmljLWJsdWU6ICMyMjUxZmY7XG4kY29sb3ItYnJhbmQtZGVlcC1ibHVlOiAjMDUxYzJjO1xuJGNvbG9yLWJyYW5kLWN5YW46ICMwMGE5ZjQ7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kZm9udC1kYXJrOiAjMDAwO1xuJGZvbnQtbGlnaHQ6ICNmZmY7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuJGdyZWVuMTogIzIxOTY1MztcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2xvci1wcmltYXJ5OiAjMTkzN2VhO1xuJGNvbG9yLXByaW1hcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcbiRjb2xvci1wcmltYXJ5LWRhcms6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuXG4kY29sb3Itc2Vjb25kYXJ5OiAjNDI4NUY0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodDogbGlnaHRlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG4kY29sb3Itc2Vjb25kYXJ5LWRhcms6IGRhcmtlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG5cbiRiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuJGZvb3Rlci1iYWNrOiAjMjYzMjM4O1xuJGhlYWRlci1iYWNrOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNTFDMkMsICMwNTFDMkMgNDAlLCAjMEIyNDUzIDYwJSwgIzFGNDBFNiAxMDAlKTtcblxuJGNvbG9yLXRlcm5hcnk6ICMwNTFjMmM7XG5cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuXG4kZm9udC1zdGFjazogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiRoZWFkaW5nLWZvbnQ6IFwiTGFyaXNoTWNLaW5zZXlcIiwgJ0dlb3JnaWEnLCBzZXJpZjtcbiRmb250OiAkZm9udC1zdGFjaztcblxuJGZvbnQtZmFtaWx5LXByaW1hcnk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LXNlY29uZGFyeTogXCJCb3dlclwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiIHNlcmlmO1xuXG4kYmFzZS1zaXplOiAxNnB4O1xuJHRhYmxldC1zaXplOiAxNnB4O1xuJG1vYmlsZS1zaXplOiAxNnB4O1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGJyZWFrLW1vYmlsZTogNDUwcHg7XG4kYnJlYWstdGFibGV0OiA4MDBweDtcbiRicmVhay1sYXB0b3A6IDEwMjRweDtcblxuJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGU6IDgwMHB4O1xuJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQ6IDEwNDhweDtcbiRicmVhay1sYW5kc2NhcGUtbGFwdG9wOiAxMjgwcHg7XG4iLCJAaW1wb3J0ICcuL3ZhcmlhYmxlcyc7XG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuQG1peGluIGJveC1zaGFkb3coJGNvbG9yOiAjMDAwLCAkZGVwdGg6IDEpIHtcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMXB4ICogKCRkZXB0aCAtIDEpIHJnYmEoIzAwMCwgLjIpLFxuICAgICAgICAgICAgICAgIDAgMXB4IDFweCAwIHJnYmEoIzAwMCwgLjE0KSxcbiAgICAgICAgICAgICAgICAwIDJweCAxcHggLTFweCByZ2JhKCMwMDAsIC4xMik7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG5AbWl4aW4gcmVzcG9uZC10bygkbWVkaWEpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gIEBlbHNlIGlmICRtZWRpYSA9PSBsYXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1AZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQGltcG9ydCBcImxpYnMvdWkvc3JjL2xpYi9taXhpbnNcIjtcbkBpbXBvcnQgJ3ZhcmlhYmxlcyc7XG5AaW1wb3J0ICdtaXhpbnMnO1xuXG5cblxuXG4ubG9hZGluZyB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoI2ZmZmZmZiwgMC41KTtcbiAgcGFkZGluZzogM2VtO1xufVxuLmJvb2tpbmctY29udGVudCB7XG4gIG1hcmdpbjogMCBhdXRvIDAgYXV0bztcbiAgcGFkZGluZzogMXB4IDBweCAxMjBweCAwO1xuICA+ZGl2IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAmLm9wZW4ge1xuICAgIG1hcmdpbjogMCBhdXRvIDI4MHB4IGF1dG87XG4gIH1cbiAgLmRldGFpbHMge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgcGFkZGluZzogMDtcbiAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgcGFkZGluZy1ib3R0b206IDQwcHg7XG4gICAgfVxuICAgID5kaXYge1xuICAgICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICB9XG4gICAgaDEge1xuICAgICAgZm9udC1zaXplOiAzMnB4O1xuICAgICAgbWFyZ2luOiAxMHB4IDAgNDBweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIC8vIGZvbnQtZmFtaWx5OiAnQm93ZXInO1xuICAgIH1cbiAgICBsYWJlbCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIHBhZGRpbmc6IDRweCAwIDIwcHggMDtcbiAgICAgIHNwYW4ge1xuICAgICAgICBwYWRkaW5nOiAwIDE4cHg7XG4gICAgICB9XG4gICAgfVxuICAgIC5zZWN0aW9uIHtcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgIGgxIHtcbiAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgfVxuICAgICAgPmRpdiB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgbWF4LXdpZHRoOiA2NzFweDtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgID5kaXYge1xuICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDE1cHg7XG4gICAgICAgICAgbWluLXdpZHRoOiAyMDBweDtcbiAgICAgICAgfVxuICAgICAgICBoMiB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgY29sb3I6ICMzMzMzMzM7XG4gICAgICAgICAgbWFyZ2luOiAwIDAgMjBweCAwO1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1wcmltYXJ5O1xuICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICAgIH1cbiAgICAgICAgfSAgICAgICBcbiAgICAgIH1cbiAgICAgICYuYm90dG9tIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgICAgICAgcGFkZGluZzogMjhweCAyMHB4O1xuICAgICAgICAucmVjLWRldGFpbHMtcGVyaW9kIHtcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDEwMHB4O1xuICAgICAgICB9XG4gICAgICAgID5kaXYge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICAgIHBhZGRpbmc6IDIwcHg7XG5cbiAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgID4gZGl2e1xuICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICBwYWRkaW5nOiAwIDAgMCAwO1xuICB9XG59XG4uYm90dG9tLXBhbmVsIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiA4MHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgei1pbmRleDogMjtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAmLmZpeGVkIHtcbiAgICBwb3NpdGlvbjogZml4ZWQgIWltcG9ydGFudDtcbiAgfVxuICBcbiAgLmJ1dHRvbnMge1xuICAgIC8vIHBhZGRpbmc6IDI0cHggMTZweDtcbiAgICAvLyBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1heC13aWR0aDogbm9uZTtcblxuICAgID5kaXYge1xuICAgICAgbWF4LXdpZHRoOiA4ODBweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGJ1dHRvbiB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgfVxuICAgICAgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogNXB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRDBEMEQwO1xuICAgICAgfVxuICAgICAgYnV0dG9uOm50aC1jaGlsZCgyKSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gICAgICB9XG4gICAgfVxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgcGFkZGluZzogMTZweCAwO1xuICAgICAgPmRpdiB7XG4gICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgbWFyZ2luOiAwIDE2cHg7XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiA4cHg7XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9uOm50aC1jaGlsZCgyKSB7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cbi5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXJ7XG5cbiAgJi5saW1pdC1oZWlnaHQge1xuICAgIC8vIG1heC1oZWlnaHQ6IDg0MnB4O1xuICAgIGhlaWdodDogODR2aDtcbiAgICAvLyBtYXgtaGVpZ2h0OiA5M3ZoO1xuICB9XG5cbiAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgJi5saW1pdC1oZWlnaHQge1xuICAgICAgaGVpZ2h0OiA5NXZoO1xuICAgICAgbWF4LWhlaWdodDogODg2cHg7XG4gICAgfVxuXG4gICAgLmJvb2tpbmctY29udGVudCwgLm1jay1zY3JvbGx7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAuZGV0YWlsc3tcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cbn0iXX0= */"] }); var ɵBookingEditComponent_BaseFactory = i0.ɵɵgetInheritedFactory(BookingEditComponent); /*@__PURE__*/ @@ -51321,6 +52105,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }], updateCallback: [{ type: core_1.Output + }], + placeIntoModal: [{ + type: core_1.Input }] }); })(); @@ -51421,35 +52208,35 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons "../../node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js"); var i6 = __webpack_require__( - /*! ../room-booking-details-form/room-booking-details-form.component */ - "./src/app/booking/room-booking-details-form/room-booking-details-form.component.ts"); - - var i7 = __webpack_require__( /*! ../booking-confirmation/booking-confirmation.component */ "./src/app/booking/booking-confirmation/booking-confirmation.component.ts"); - var i8 = __webpack_require__( + var i7 = __webpack_require__( /*! ../../components/topbar-header/topbar-header.component */ "./src/app/components/topbar-header/topbar-header.component.ts"); + var i8 = __webpack_require__( + /*! ../room-booking-details-form/room-booking-details-form.component */ + "./src/app/booking/room-booking-details-form/room-booking-details-form.component.ts"); + var i9 = __webpack_require__( /*! @angular/material/button */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/button.js"); function BookingFormBaseComponent_div_1_Template(rf, ctx) { if (rf & 1) { - var _r8 = i0.ɵɵgetCurrentView(); + var _r5 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div", 16); - i0.ɵɵelement(1, "img", 17); - i0.ɵɵelementStart(2, "p", 18); + i0.ɵɵelementStart(0, "div", 6); + i0.ɵɵelement(1, "img", 7); + i0.ɵɵelementStart(2, "p", 8); i0.ɵɵtext(3); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(4, "img", 19); + i0.ɵɵelementStart(4, "img", 9); i0.ɵɵlistener("click", function BookingFormBaseComponent_div_1_Template_img_click_4_listener() { - i0.ɵɵrestoreView(_r8); - var ctx_r7 = i0.ɵɵnextContext(); - return ctx_r7.hideWarningBanner(); + i0.ɵɵrestoreView(_r5); + var ctx_r4 = i0.ɵɵnextContext(); + return ctx_r4.hideWarningBanner(); }); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); @@ -51462,37 +52249,54 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } } - function BookingFormBaseComponent_a_topbar_header_3_Template(rf, ctx) { + function BookingFormBaseComponent_div_2_a_topbar_header_1_Template(rf, ctx) { if (rf & 1) { - var _r10 = i0.ɵɵgetCurrentView(); + var _r9 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "a-topbar-header", 20); - i0.ɵɵlistener("closeCallback", function BookingFormBaseComponent_a_topbar_header_3_Template_a_topbar_header_closeCallback_0_listener() { - i0.ɵɵrestoreView(_r10); - var ctx_r9 = i0.ɵɵnextContext(); - return ctx_r9.discardChanges(); + i0.ɵɵelementStart(0, "a-topbar-header", 13); + i0.ɵɵlistener("closeCallback", function BookingFormBaseComponent_div_2_a_topbar_header_1_Template_a_topbar_header_closeCallback_0_listener() { + i0.ɵɵrestoreView(_r9); + var ctx_r8 = i0.ɵɵnextContext(2); + return ctx_r8.discardChanges(); }); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r1 = i0.ɵɵnextContext(); - i0.ɵɵproperty("mode", ctx_r1.TopBarHeaderMode.Light)("modal", true)("noSurvey", true); + var ctx_r6 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("mode", ctx_r6.TopBarHeaderMode.Light)("modal", true)("noSurvey", true); } } - function BookingFormBaseComponent_a_topbar_header_4_Template(rf, ctx) { + function BookingFormBaseComponent_div_2_a_topbar_header_2_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelement(0, "a-topbar-header", 21); + i0.ɵɵelement(0, "a-topbar-header", 14); } if (rf & 2) { - var ctx_r2 = i0.ɵɵnextContext(); - i0.ɵɵproperty("mode", ctx_r2.TopBarHeaderMode.Light)("back", ctx_r2.backRoute); + var ctx_r7 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("mode", ctx_r7.TopBarHeaderMode.Light)("back", ctx_r7.backRoute); + } + } + + function BookingFormBaseComponent_div_2_Template(rf, ctx) { + if (rf & 1) { + i0.ɵɵelementStart(0, "div", 10); + i0.ɵɵtemplate(1, BookingFormBaseComponent_div_2_a_topbar_header_1_Template, 1, 3, "a-topbar-header", 11); + i0.ɵɵtemplate(2, BookingFormBaseComponent_div_2_a_topbar_header_2_Template, 1, 2, "a-topbar-header", 12); + i0.ɵɵelementEnd(); + } + + if (rf & 2) { + var ctx_r1 = i0.ɵɵnextContext(); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r1.modal); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", !ctx_r1.modal); } } - function BookingFormBaseComponent_div_19_Template(rf, ctx) { + function BookingFormBaseComponent_div_3_div_14_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div"); i0.ɵɵelementStart(1, "div"); @@ -51508,45 +52312,45 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } if (rf & 2) { - var ctx_r3 = i0.ɵɵnextContext(); + var ctx_r10 = i0.ɵɵnextContext(2); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Date: ", ctx_r3.dateString, ""); + i0.ɵɵtextInterpolate1("Date: ", ctx_r10.dateString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Time: ", ctx_r3.timeString, ""); + i0.ɵɵtextInterpolate1("Time: ", ctx_r10.timeString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate2("", ctx_r3.type, " meeting (", ctx_r3.durationString, ")"); + i0.ɵɵtextInterpolate2("", ctx_r10.type, " meeting (", ctx_r10.durationString, ")"); } } - function BookingFormBaseComponent_div_20_span_4_Template(rf, ctx) { + function BookingFormBaseComponent_div_3_div_15_span_4_Template(rf, ctx) { if (rf & 1) { - var _r13 = i0.ɵɵgetCurrentView(); + var _r14 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "span", 24); - i0.ɵɵlistener("click", function BookingFormBaseComponent_div_20_span_4_Template_span_click_0_listener() { - i0.ɵɵrestoreView(_r13); - var ctx_r12 = i0.ɵɵnextContext(2); - return ctx_r12.openRecurrenceConflictsModal(ctx_r12.booking == null ? null : ctx_r12.booking.room); + i0.ɵɵelementStart(0, "span", 25); + i0.ɵɵlistener("click", function BookingFormBaseComponent_div_3_div_15_span_4_Template_span_click_0_listener() { + i0.ɵɵrestoreView(_r14); + var ctx_r13 = i0.ɵɵnextContext(3); + return ctx_r13.openRecurrenceConflictsModal(ctx_r13.booking == null ? null : ctx_r13.booking.room); }); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r11 = i0.ɵɵnextContext(2); + var ctx_r12 = i0.ɵɵnextContext(3); var tmp_0_0 = null; i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate1(" - Conflicts(", (tmp_0_0 = ctx_r11.isConflictWithOccurences()) == null ? null : tmp_0_0.total_Conflicts, ") "); + i0.ɵɵtextInterpolate1(" - Conflicts(", (tmp_0_0 = ctx_r12.isConflictWithOccurences()) == null ? null : tmp_0_0.total_Conflicts, ") "); } } - function BookingFormBaseComponent_div_20_Template(rf, ctx) { + function BookingFormBaseComponent_div_3_div_15_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div"); - i0.ɵɵelementStart(1, "div", 22); + i0.ɵɵelementStart(1, "div", 23); i0.ɵɵtext(2); i0.ɵɵpipe(3, "titlecase"); - i0.ɵɵtemplate(4, BookingFormBaseComponent_div_20_span_4_Template, 2, 1, "span", 23); + i0.ɵɵtemplate(4, BookingFormBaseComponent_div_3_div_15_span_4_Template, 2, 1, "span", 24); i0.ɵɵelementEnd(); i0.ɵɵelementStart(5, "div"); i0.ɵɵtext(6); @@ -51564,42 +52368,117 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } if (rf & 2) { - var ctx_r4 = i0.ɵɵnextContext(); + var ctx_r11 = i0.ɵɵnextContext(2); var tmp_1_0 = null; - var currVal_1 = (tmp_1_0 = ctx_r4.isConflictWithOccurences()) == null ? null : tmp_1_0.is_conflict; + var currVal_1 = (tmp_1_0 = ctx_r11.isConflictWithOccurences()) == null ? null : tmp_1_0.is_conflict; i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("", (ctx_r4.data == null ? null : ctx_r4.data.value == null ? null : ctx_r4.data.value.recurrence_period) === "list" ? "Specific dates" : i0.ɵɵpipeBind1(3, 7, ctx_r4.data == null ? null : ctx_r4.data.value == null ? null : ctx_r4.data.value.recurrence_period), " "); + i0.ɵɵtextInterpolate1("", (ctx_r11.data == null ? null : ctx_r11.data.value == null ? null : ctx_r11.data.value.recurrence_period) === "list" ? "Specific dates" : i0.ɵɵpipeBind1(3, 7, ctx_r11.data == null ? null : ctx_r11.data.value == null ? null : ctx_r11.data.value.recurrence_period), " "); i0.ɵɵadvance(2); i0.ɵɵproperty("ngIf", currVal_1); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Start date: ", ctx_r4.dateString, ""); + i0.ɵɵtextInterpolate1("Start date: ", ctx_r11.dateString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("End date: ", ctx_r4.endDateString, ""); + i0.ɵɵtextInterpolate1("End date: ", ctx_r11.endDateString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Time: ", ctx_r4.timeString, ""); + i0.ɵɵtextInterpolate1("Time: ", ctx_r11.timeString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate2("", ctx_r4.type, " meeting (", ctx_r4.durationString, ")"); + i0.ɵɵtextInterpolate2("", ctx_r11.type, " meeting (", ctx_r11.durationString, ")"); } } - function BookingFormBaseComponent_div_30_Template(rf, ctx) { + function BookingFormBaseComponent_div_3_Template(rf, ctx) { if (rf & 1) { - var _r15 = i0.ɵɵgetCurrentView(); + var _r16 = i0.ɵɵgetCurrentView(); + + i0.ɵɵelementStart(0, "div", 15); + i0.ɵɵelementStart(1, "div", 16); + i0.ɵɵelementStart(2, "div", 17); + i0.ɵɵelementStart(3, "div", 18); + i0.ɵɵelementStart(4, "div"); + i0.ɵɵelementStart(5, "h1"); + i0.ɵɵtext(6); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(7, "div", 19); + i0.ɵɵelementStart(8, "div"); + i0.ɵɵelementStart(9, "app-room-booking-details-form", 20); + i0.ɵɵlistener("submitForm", function BookingFormBaseComponent_div_3_Template_app_room_booking_details_form_submitForm_9_listener($event) { + i0.ɵɵrestoreView(_r16); + var ctx_r15 = i0.ɵɵnextContext(); + return ctx_r15.submitForm($event); + })("validateForm", function BookingFormBaseComponent_div_3_Template_app_room_booking_details_form_validateForm_9_listener($event) { + i0.ɵɵrestoreView(_r16); + var ctx_r17 = i0.ɵɵnextContext(); + return ctx_r17.validateForm($event); + }); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(10, "div", 21); + i0.ɵɵelementStart(11, "div"); + i0.ɵɵelementStart(12, "h2"); + i0.ɵɵtext(13); + i0.ɵɵelementEnd(); + i0.ɵɵtemplate(14, BookingFormBaseComponent_div_3_div_14_Template, 7, 4, "div", 22); + i0.ɵɵtemplate(15, BookingFormBaseComponent_div_3_div_15_Template, 13, 9, "div", 22); + i0.ɵɵelementStart(16, "div"); + i0.ɵɵelementStart(17, "div"); + i0.ɵɵtext(18); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(19, "div"); + i0.ɵɵtext(20); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(21, "div"); + i0.ɵɵtext(22); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + } + + if (rf & 2) { + var ctx_r2 = i0.ɵɵnextContext(); + i0.ɵɵadvance(6); + i0.ɵɵtextInterpolate1("Book ", ctx_r2.booking == null ? null : ctx_r2.booking.space == null ? null : ctx_r2.booking.space.local_name, ""); + i0.ɵɵadvance(3); + i0.ɵɵproperty("booking", ctx_r2.booking)("triggerSubmit", ctx_r2.submitTimestamp); + i0.ɵɵadvance(4); + i0.ɵɵtextInterpolate1("", (ctx_r2.data == null ? null : ctx_r2.data.value == null ? null : ctx_r2.data.value.is_recurrent) ? "Recurring" : "Room", " Booking Details"); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", !(ctx_r2.data == null ? null : ctx_r2.data.value == null ? null : ctx_r2.data.value.is_recurrent)); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r2.data == null ? null : ctx_r2.data.value == null ? null : ctx_r2.data.value.is_recurrent); + i0.ɵɵadvance(3); + i0.ɵɵtextInterpolate2("Address: ", ctx_r2.building == null ? null : ctx_r2.building.address, ", ", ctx_r2.building == null ? null : ctx_r2.building.city, ""); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate1("Room: ", ctx_r2.booking == null ? null : ctx_r2.booking.space == null ? null : ctx_r2.booking.space.local_name, ""); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate1("Capacity: ", ctx_r2.booking == null ? null : ctx_r2.booking.space == null ? null : ctx_r2.booking.space.capacity, ""); + } + } + + function BookingFormBaseComponent_div_4_div_2_Template(rf, ctx) { + if (rf & 1) { + var _r21 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "div"); - i0.ɵɵelementStart(1, "button", 25); - i0.ɵɵlistener("click", function BookingFormBaseComponent_div_30_Template_button_click_1_listener() { - i0.ɵɵrestoreView(_r15); - var ctx_r14 = i0.ɵɵnextContext(); - return ctx_r14.goToBackRoute(); + i0.ɵɵelementStart(1, "button", 28); + i0.ɵɵlistener("click", function BookingFormBaseComponent_div_4_div_2_Template_button_click_1_listener() { + i0.ɵɵrestoreView(_r21); + var ctx_r20 = i0.ɵɵnextContext(2); + return ctx_r20.goToBackRoute(); }); i0.ɵɵtext(2, "Back"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(3, "button", 26); - i0.ɵɵlistener("click", function BookingFormBaseComponent_div_30_Template_button_click_3_listener() { - i0.ɵɵrestoreView(_r15); - var ctx_r16 = i0.ɵɵnextContext(); - return ctx_r16.createBooking(); + i0.ɵɵelementStart(3, "button", 29); + i0.ɵɵlistener("click", function BookingFormBaseComponent_div_4_div_2_Template_button_click_3_listener() { + i0.ɵɵrestoreView(_r21); + var ctx_r22 = i0.ɵɵnextContext(2); + return ctx_r22.createBooking(); }); i0.ɵɵtext(4); i0.ɵɵelementEnd(); @@ -51607,35 +52486,35 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } if (rf & 2) { - var ctx_r5 = i0.ɵɵnextContext(); + var ctx_r18 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); - i0.ɵɵproperty("disabled", ctx_r5.loading); + i0.ɵɵproperty("disabled", ctx_r18.loading); i0.ɵɵadvance(2); - i0.ɵɵclassProp("disabled", ctx_r5.invalidForm); - i0.ɵɵproperty("disabled", ctx_r5.loading || ctx_r5.invalidForm); + i0.ɵɵclassProp("disabled", ctx_r18.invalidForm); + i0.ɵɵproperty("disabled", ctx_r18.loading || ctx_r18.invalidForm); i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate2("", ctx_r5.isEditSeries ? "Update" : "Create", " Booking", ctx_r5.is_request ? " Request" : "", ""); + i0.ɵɵtextInterpolate2("", ctx_r18.isEditSeries ? "Update" : "Create", " Booking", ctx_r18.is_request ? " Request" : "", ""); } } - function BookingFormBaseComponent_div_31_Template(rf, ctx) { + function BookingFormBaseComponent_div_4_div_3_Template(rf, ctx) { if (rf & 1) { - var _r18 = i0.ɵɵgetCurrentView(); + var _r24 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "div"); - i0.ɵɵelementStart(1, "button", 25); - i0.ɵɵlistener("click", function BookingFormBaseComponent_div_31_Template_button_click_1_listener() { - i0.ɵɵrestoreView(_r18); - var ctx_r17 = i0.ɵɵnextContext(); - return ctx_r17.discardChanges(); + i0.ɵɵelementStart(1, "button", 28); + i0.ɵɵlistener("click", function BookingFormBaseComponent_div_4_div_3_Template_button_click_1_listener() { + i0.ɵɵrestoreView(_r24); + var ctx_r23 = i0.ɵɵnextContext(2); + return ctx_r23.discardChanges(); }); i0.ɵɵtext(2, "Back"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(3, "button", 26); - i0.ɵɵlistener("click", function BookingFormBaseComponent_div_31_Template_button_click_3_listener() { - i0.ɵɵrestoreView(_r18); - var ctx_r19 = i0.ɵɵnextContext(); - return ctx_r19.createBooking(); + i0.ɵɵelementStart(3, "button", 29); + i0.ɵɵlistener("click", function BookingFormBaseComponent_div_4_div_3_Template_button_click_3_listener() { + i0.ɵɵrestoreView(_r24); + var ctx_r25 = i0.ɵɵnextContext(2); + return ctx_r25.createBooking(); }); i0.ɵɵtext(4, "Update Booking"); i0.ɵɵelementEnd(); @@ -51643,12 +52522,38 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } if (rf & 2) { - var ctx_r6 = i0.ɵɵnextContext(); + var ctx_r19 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); - i0.ɵɵproperty("disabled", ctx_r6.loading); + i0.ɵɵproperty("disabled", ctx_r19.loading); + i0.ɵɵadvance(2); + i0.ɵɵclassProp("disabled", ctx_r19.invalidForm); + i0.ɵɵproperty("disabled", ctx_r19.loading || ctx_r19.invalidForm); + } + } + + var _c0 = function _c0(a0) { + return { + "fixed": a0 + }; + }; + + function BookingFormBaseComponent_div_4_Template(rf, ctx) { + if (rf & 1) { + i0.ɵɵelementStart(0, "div", 26); + i0.ɵɵelementStart(1, "div", 27); + i0.ɵɵtemplate(2, BookingFormBaseComponent_div_4_div_2_Template, 5, 6, "div", 22); + i0.ɵɵtemplate(3, BookingFormBaseComponent_div_4_div_3_Template, 5, 4, "div", 22); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + } + + if (rf & 2) { + var ctx_r3 = i0.ɵɵnextContext(); + i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3, _c0, !ctx_r3.placeIntoModal)); i0.ɵɵadvance(2); - i0.ɵɵclassProp("disabled", ctx_r6.invalidForm); - i0.ɵɵproperty("disabled", ctx_r6.loading || ctx_r6.invalidForm); + i0.ɵɵproperty("ngIf", !ctx_r3.modal && !ctx_r3.placeIntoModal); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r3.placeIntoModal); } } @@ -51677,11 +52582,20 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons route: ['/home', 'results', 'room'], queryParams: {} }; - _this207.closeCallback = new core_1.EventEmitter(); // Eliminate selectedRoom (room building capacity ) + _this207.closeCallback = new core_1.EventEmitter(); + /** + * placeIntoModal: Input decorator indecate as a flag to adapt component design into a dialog modal + * (by hiding header and adjusting height so that fit into a modal) + */ + + _this207.placeIntoModal = false; // Eliminate selectedRoom (room building capacity ) _this207.modal = false; _this207.data = new rxjs_1.BehaviorSubject(undefined); _this207.confirmed = false; + /** Display loading template */ + + _this207.loading = false; _this207.booking = new data_common_1.Booking({}); _this207.invalidForm = true; _this207.showWarningBanner = false; @@ -52079,7 +52993,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons this.booking.multi_rooms.forEach(function (room) { totalConflicts += Math.max(room.totalOccurrences - room.availableOccurrences, 0); }); - } else if (this.booking.room) { + } + + if (this.booking.room) { totalConflicts = ((_b = (_a = this === null || this === void 0 ? void 0 : this.booking) === null || _a === void 0 ? void 0 : _a.room) === null || _b === void 0 ? void 0 : _b.totalOccurrences) - ((_d = (_c = this === null || this === void 0 ? void 0 : this.booking) === null || _c === void 0 ? void 0 : _c.room) === null || _d === void 0 ? void 0 : _d.availableOccurrences); } @@ -52256,69 +53172,18 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons closeCallback: "closeCallback" }, features: [i0.ɵɵInheritDefinitionFeature], - decls: 33, - vars: 21, - consts: [[1, "mck-column", "mck-content-expand", "mck-content-page-container", "booking-form-base-container"], ["class", "fixed warning banner", 4, "ngIf"], [1, "header"], [3, "mode", "modal", "noSurvey", "closeCallback", 4, "ngIf"], [3, "mode", "back", 4, "ngIf"], [1, "mck-column", "mck-center", "results-container", "mck-scroll"], [1, "mck-column", "mck-scroll", "mck-content-expand-width"], [1, "booking-content", "mck-column", "mck-center", "mck-content-body"], [1, "details"], [1, "section"], [3, "booking", "triggerSubmit", "submitForm", "validateForm"], [1, "section", "bottom"], [4, "ngIf"], [1, "bottom-panel"], [1, "buttons"], [3, "confirmed", "loading", "modal", "dataForConfirmation", "callback"], [1, "fixed", "warning", "banner"], ["src", "assets/icon/booking_cancelled.svg"], [1, "banner-text"], ["src", "assets/icon/close-red.svg", 3, "click"], [3, "mode", "modal", "noSurvey", "closeCallback"], [3, "mode", "back"], [1, "rec-details-period"], [3, "click", 4, "ngIf"], [3, "click"], ["mat-button", "", "color", "secondary", 1, "mck-secondary-button", 3, "disabled", "click"], ["mat-button", "", "color", "primary", 1, "mck-primary-button", 3, "disabled", "click"]], + decls: 6, + vars: 13, + consts: [[1, "mck-column", "mck-content-expand", "mck-content-page-container", "booking-form-base-container"], ["class", "fixed warning banner", 4, "ngIf"], ["class", "header", 4, "ngIf"], ["class", "mck-column mck-center results-container mck-scroll", 4, "ngIf"], ["class", "bottom-panel", 3, "ngClass", 4, "ngIf"], [3, "confirmed", "loading", "placeIntoModal", "modal", "dataForConfirmation", "callback"], [1, "fixed", "warning", "banner"], ["src", "assets/icon/booking_cancelled.svg"], [1, "banner-text"], ["src", "assets/icon/close-red.svg", 3, "click"], [1, "header"], [3, "mode", "modal", "noSurvey", "closeCallback", 4, "ngIf"], [3, "mode", "back", 4, "ngIf"], [3, "mode", "modal", "noSurvey", "closeCallback"], [3, "mode", "back"], [1, "mck-column", "mck-center", "results-container", "mck-scroll"], [1, "mck-column", "mck-scroll", "mck-content-expand-width"], [1, "booking-content", "mck-column", "mck-center", "mck-content-body"], [1, "details"], [1, "section"], [3, "booking", "triggerSubmit", "submitForm", "validateForm"], [1, "section", "bottom"], [4, "ngIf"], [1, "rec-details-period"], [3, "click", 4, "ngIf"], [3, "click"], [1, "bottom-panel", 3, "ngClass"], [1, "buttons"], ["mat-button", "", "color", "secondary", 1, "mck-secondary-button", 3, "disabled", "click"], ["mat-button", "", "color", "primary", 1, "mck-primary-button", 3, "disabled", "click"]], template: function BookingFormBaseComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 0); i0.ɵɵtemplate(1, BookingFormBaseComponent_div_1_Template, 5, 1, "div", 1); - i0.ɵɵelementStart(2, "div", 2); - i0.ɵɵtemplate(3, BookingFormBaseComponent_a_topbar_header_3_Template, 1, 3, "a-topbar-header", 3); - i0.ɵɵtemplate(4, BookingFormBaseComponent_a_topbar_header_4_Template, 1, 2, "a-topbar-header", 4); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(5, "div", 5); - i0.ɵɵelementStart(6, "div", 6); - i0.ɵɵelementStart(7, "div", 7); - i0.ɵɵelementStart(8, "div", 8); - i0.ɵɵelementStart(9, "div"); - i0.ɵɵelementStart(10, "h1"); - i0.ɵɵtext(11); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(12, "div", 9); - i0.ɵɵelementStart(13, "div"); - i0.ɵɵelementStart(14, "app-room-booking-details-form", 10); - i0.ɵɵlistener("submitForm", function BookingFormBaseComponent_Template_app_room_booking_details_form_submitForm_14_listener($event) { - return ctx.submitForm($event); - })("validateForm", function BookingFormBaseComponent_Template_app_room_booking_details_form_validateForm_14_listener($event) { - return ctx.validateForm($event); - }); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(15, "div", 11); - i0.ɵɵelementStart(16, "div"); - i0.ɵɵelementStart(17, "h2"); - i0.ɵɵtext(18); - i0.ɵɵelementEnd(); - i0.ɵɵtemplate(19, BookingFormBaseComponent_div_19_Template, 7, 4, "div", 12); - i0.ɵɵtemplate(20, BookingFormBaseComponent_div_20_Template, 13, 9, "div", 12); - i0.ɵɵelementStart(21, "div"); - i0.ɵɵelementStart(22, "div"); - i0.ɵɵtext(23); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(24, "div"); - i0.ɵɵtext(25); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(26, "div"); - i0.ɵɵtext(27); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(28, "div", 13); - i0.ɵɵelementStart(29, "div", 14); - i0.ɵɵtemplate(30, BookingFormBaseComponent_div_30_Template, 5, 6, "div", 12); - i0.ɵɵtemplate(31, BookingFormBaseComponent_div_31_Template, 5, 4, "div", 12); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(32, "booking-confirmation", 15); - i0.ɵɵlistener("callback", function BookingFormBaseComponent_Template_booking_confirmation_callback_32_listener() { + i0.ɵɵtemplate(2, BookingFormBaseComponent_div_2_Template, 3, 2, "div", 2); + i0.ɵɵtemplate(3, BookingFormBaseComponent_div_3_Template, 23, 10, "div", 3); + i0.ɵɵtemplate(4, BookingFormBaseComponent_div_4_Template, 4, 5, "div", 4); + i0.ɵɵelementStart(5, "booking-confirmation", 5); + i0.ɵɵlistener("callback", function BookingFormBaseComponent_Template_booking_confirmation_callback_5_listener() { return ctx.callback(); }); i0.ɵɵelementEnd(); @@ -52326,40 +53191,22 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } if (rf & 2) { - i0.ɵɵclassProp("fullpage-modal", ctx.modal); + i0.ɵɵclassProp("fullpage-modal", ctx.modal)("limit-height", ctx.placeIntoModal); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.showWarningBanner); - i0.ɵɵadvance(2); - i0.ɵɵproperty("ngIf", ctx.modal); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", !ctx.modal); - i0.ɵɵadvance(7); - i0.ɵɵtextInterpolate1("Book ", ctx.booking == null ? null : ctx.booking.space == null ? null : ctx.booking.space.local_name, ""); - i0.ɵɵadvance(3); - i0.ɵɵproperty("booking", ctx.booking)("triggerSubmit", ctx.submitTimestamp); - i0.ɵɵadvance(4); - i0.ɵɵtextInterpolate1("", (ctx.data == null ? null : ctx.data.value == null ? null : ctx.data.value.is_recurrent) ? "Recurring" : "Room", " Booking Details"); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", !(ctx.data == null ? null : ctx.data.value == null ? null : ctx.data.value.is_recurrent)); + i0.ɵɵproperty("ngIf", !ctx.placeIntoModal); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.data == null ? null : ctx.data.value == null ? null : ctx.data.value.is_recurrent); - i0.ɵɵadvance(3); - i0.ɵɵtextInterpolate2("Address: ", ctx.building == null ? null : ctx.building.address, ", ", ctx.building == null ? null : ctx.building.city, ""); - i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Room: ", ctx.booking == null ? null : ctx.booking.space == null ? null : ctx.booking.space.local_name, ""); - i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1("Capacity: ", ctx.booking == null ? null : ctx.booking.space == null ? null : ctx.booking.space.capacity, ""); - i0.ɵɵadvance(3); - i0.ɵɵproperty("ngIf", !ctx.modal); + i0.ɵɵproperty("ngIf", !ctx.confirmed && !ctx.loading); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.modal); + i0.ɵɵproperty("ngIf", !ctx.confirmed && !ctx.loading); i0.ɵɵadvance(1); - i0.ɵɵproperty("confirmed", ctx.confirmed)("loading", ctx.loading)("modal", ctx.modal)("dataForConfirmation", ctx.dataForConfirmation); + i0.ɵɵproperty("confirmed", ctx.confirmed)("loading", ctx.loading)("placeIntoModal", ctx.placeIntoModal)("modal", ctx.modal)("dataForConfirmation", ctx.dataForConfirmation); } }, - directives: [i5.NgIf, i6.RoomBookingDetailsFormComponent, i7.BookingConfirmationComponent, i8.TopbarHeaderComponent, i9.MatButton], + directives: [i5.NgIf, i6.BookingConfirmationComponent, i7.TopbarHeaderComponent, i8.RoomBookingDetailsFormComponent, i5.NgClass, i9.MatButton], pipes: [i5.TitleCasePipe], - styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\n\n\n\n\n\n\n.loading[_ngcontent-%COMP%] {\n background-color: rgba(255, 255, 255, 0.5);\n padding: 3em;\n}\n.booking-content[_ngcontent-%COMP%] {\n margin: 0 auto 0 auto;\n padding: 1px 20px 120px 0;\n}\n.booking-content[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 100%;\n}\n.booking-content.open[_ngcontent-%COMP%] {\n margin: 0 auto 280px auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n border: 1px solid #E6E6E6;\n background-color: white;\n padding: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 1024px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 32px;\n margin: 10px 0 40px;\n font-weight: 500;\n width: 100%;\n text-align: center;\n font-family: \"Bower\";\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-size: 16px;\n padding: 4px 0 20px 0;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n padding: 0 18px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 400;\n font-size: 16px;\n color: #333333;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 400;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n max-width: 671px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n line-height: 24px;\n padding-bottom: 15px;\n min-width: 200px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n width: 100%;\n display: block;\n color: #333333;\n margin: 0 0 20px 0;\n font-weight: 500;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n padding: 28px 20px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] .rec-details-period[_ngcontent-%COMP%] {\n cursor: pointer;\n text-decoration: underline;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background-color: white;\n padding: 20px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0px 0px 100px 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0px 0px 100px 0;\n }\n}\n.bottom-panel[_ngcontent-%COMP%] {\n position: fixed;\n bottom: 0;\n width: 100%;\n min-height: 80px;\n background-color: white;\n border: 1px solid #E6E6E6;\n z-index: 2;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 24px 16px;\n border: 1px solid #E6E6E6;\n width: 100%;\n max-width: none;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 880px;\n margin: 0 auto;\n display: flex;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex: 1;\n height: 48px;\n font-size: 16px;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 5px;\n border: 1px solid #D0D0D0;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 5px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9taXhpbnMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNwVUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQTFEQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDNUNBOztzQkFBQTtBQ1BBO0VBQ0UsMENBQUE7RUFDQSxZQUFBO0FKdUNGO0FJckNBO0VBQ0UscUJBQUE7RUFDQSx5QkFBQTtBSndDRjtBSXZDRTtFQUNFLFdBQUE7QUp5Q0o7QUl2Q0U7RUFDRSx5QkFBQTtBSnlDSjtBSXZDRTtFQUNFLHlCQUFBO0VBQ0EsdUJBQUE7RUFDQSxVQUFBO0FKeUNKO0FHNUNRO0VDQU47SUFLSSxvQkFBQTtFSjJDSjtBQUNGO0FHOUNRO0VDSE47SUFLSSxvQkFBQTtFSmdESjtBQUNGO0FJL0NJO0VBQ0UsaUJBQUE7RUFDQSxjQUFBO0FKaUROO0FJL0NJO0VBQ0UsZUFBQTtFQUNBLG1CQUFBO0VBQ0EsZ0JBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7RUFDQSxvQkFBQTtBSmlETjtBSS9DSTtFQUNFLGNBQUE7RUFDQSxlQUFBO0VBQ0EscUJBQUE7QUppRE47QUloRE07RUFDRSxlQUFBO0FKa0RSO0FJL0NJO0VBQ0UsZUFBQTtFQUNBLGdCQUFBO0VBQ0EsZUFBQTtFQUNBLGNBQUE7QUppRE47QUloRE07RUFDRSxlQUFBO0VBQ0EsZ0JBQUE7QUprRFI7QUloRE07RUFDRSxhQUFBO0VBQ0EsZUFBQTtFQUNBLGdCQUFBO0VBQ0EsY0FBQTtBSmtEUjtBSWpEUTtFQUNFLE9BQUE7RUFDQSxpQkFBQTtFQUNBLG9CQUFBO0VBQ0EsZ0JBQUE7QUptRFY7QUlqRFE7RUFDRSxXQUFBO0VBQ0EsY0FBQTtFQUNBLGNBQUE7RUFDQSxrQkFBQTtFQUNBLGdCQUFBO0VBQ0EscUdGdEJZO0FGeUV0QjtBQ25IWTtFRzBESjtJQVFJLGVBQUE7RUpxRFY7QUFDRjtBQ3hIWTtFRzBESjtJQVFJLGVBQUE7RUowRFY7QUFDRjtBSXZETTtFQUNFLHlCQUFBO0VBQ0Esa0JBQUE7QUp5RFI7QUl4RFE7RUFDRSxlQUFBO0VBQ0EsMEJBQUE7QUowRFY7QUNySVk7RUdzRU47SUFRSSxxQkFBQTtFSjJEUjtBQUNGO0FDMUlZO0VHc0VOO0lBUUkscUJBQUE7RUpnRVI7QUFDRjtBSS9EUTtFQUNFLHVCQUFBO0VBQ0EsYUFBQTtBSmlFVjtBQ25KWTtFR3FGQTtJQUNFLGlCQUFBO0VKaUVaO0FBQ0Y7QUN4Slk7RUdxRkE7SUFDRSxpQkFBQTtFSnNFWjtBQUNGO0FDN0pZO0VHRVo7SUE2Rkksd0JBQUE7RUprRUY7QUFDRjtBQ2xLWTtFR0VaO0lBNkZJLHdCQUFBO0VKdUVGO0FBQ0Y7QUlyRUE7RUFDRSxlQUFBO0VBQ0EsU0FBQTtFQUNBLFdBQUE7RUFDQSxnQkFBQTtFQUNBLHVCQUFBO0VBQ0EseUJBQUE7RUFDQSxVQUFBO0FKd0VGO0FJdEVFO0VBQ0Usa0JBQUE7RUFDQSx5QkFBQTtFQUNBLFdBQUE7RUFDQSxlQUFBO0FKd0VKO0FJdEVJO0VBQ0UsZ0JBQUE7RUFDQSxjQUFBO0VBQ0EsYUFBQTtBSndFTjtBSXZFTTtFQUNFLE9BQUE7RUFDQSxZQUFBO0VBQ0EsZUFBQTtBSnlFUjtBSXZFTTtFQUNFLGlCQUFBO0VBQ0EseUJBQUE7QUp5RVI7QUl2RU07RUFDRSxnQkFBQTtBSnlFUjtBQ3hNWTtFRzJHVjtJQXdCSSxlQUFBO0VKeUVKO0VJdkVNO0lBQ0UsY0FBQTtFSnlFUjtFSXZFTTtJQUNFLGlCQUFBO0VKeUVSO0VJdkVNO0lBQ0UsZ0JBQUE7RUp5RVI7QUFDRjtBQ3ROWTtFRzJHVjtJQXdCSSxlQUFBO0VKdUZKO0VJckZNO0lBQ0UsY0FBQTtFSnVGUjtFSXJGTTtJQUNFLGlCQUFBO0VKdUZSO0VJckZNO0lBQ0UsZ0JBQUE7RUp1RlI7QUFDRjtBQ3BPWTtFR3dKUjtJQUNFLFlBQUE7RUpnRko7RUkvRUk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUppRk47QUFDRjtBQzlPWTtFR3dKUjtJQUNFLFlBQUE7RUp5Rko7RUl4Rkk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUowRk47QUFDRiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIiRwcmltYXJ5OiAjMUY0MEU2O1xuJGZvcm0tbGFiZWw6ICMwNTFDMkM7XG4kc2Vjb25kYXJ5LWxhYmVsOiAjNzY3Njc2O1xuJGJvcmRlcjogI0IzQjNCMztcbiRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkOiAjRDBEMEQwO1xuJGNoaXAtY29sb3I6ICMzMzMzMzM7XG4kcGxhY2Vob2xkZXItY29sb3I6ICM3RjdGN0Y7XG4kYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDtcbiRwYWdlLWJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4kc2VsZWN0ZWQtb3B0aW9uOiAjRTZFNkU2O1xuJGNvbG9yLWJyYW5kLXllbGxvdzogI2ZmZDA0ODtcbiRsaWdodC15ZWxsb3c6ICNmZmYzY2U7XG4kY29hY2htYXJrLXRleHQ6ICM2ZjRkMDA7XG4kZXJyb3ItY29sb3I6ICNFMTJFNDA7XG4kbm8tZmlsdGVycy1jb2xvcjogI0JDQkNCQztcbiRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjogI0Y0RjRGNDtcbiRwcmltYXJ5LWhpZ2hsaWdodDogIzIyNTFGRjtcbiRzY3JvbGxiYXItY29sb3I6ICM3NTc1NzU7XG5cbiRhdmFpbGFibGUtY29sb3I6ICM1RDlENTI7XG4kYXZhaWxhYmxlLWJ5LXJlcXVlc3QtY29sb3I6ICNGNUI1M0Y7XG4kaW4tdXNlLWNvbG9yOiAjRDQ0ODNFO1xuJG5vdC1ib29rYWJsZS1jb2xvcjogI0NDQ0NDQztcblxuJG1vZGFsLWJvZHktaGVhZGluZzogIzRENEQ0RDtcbiRhbGVydC1vdmVybGF5LWJnOiByZ2JhKDUsIDI4LCA0NCwgMC44NSk7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvYWNobWFyay1iZzogI0VCRUJGNjtcbiRjb2FjaG1hcmstZGFyay10ZXh0OiAjMUIxQjE5O1xuJGVycm9yLXRleHQ6ICNmZmY7XG5cbi8qKlxuICogU3BhY2luZ1xuICovXG5cbi8vIDRweFxuJHNwYWNpbmctc21hbGxlc3Q6IDAuMjVyZW07XG5cbi8vIDhweFxuJHNwYWNpbmcteHhzbWFsbDogMC41cmVtO1xuXG4vLyAxMnB4XG4kc3BhY2luZy14c21hbGw6IDAuNzVyZW07XG5cbi8vIDE2cHhcbiRzcGFjaW5nLXNtYWxsOiAxcmVtO1xuXG4vLyAyMHB4XG4kc3BhY2luZy1zbWFsbC1tZWRpdW06IDEuMjVyZW07XG5cbi8vIDI0cHhcbiRzcGFjaW5nLW1lZGl1bTogMS41cmVtO1xuXG4vLyAyOHB4XG4kc3BhY2luZy1tZWRpdW0tbGFyZ2U6IDEuNzVyZW07XG5cbi8vIDMycHhcbiRzcGFjaW5nLWxhcmdlOiAycmVtO1xuXG4vLyA0OHB4XG4kc3BhY2luZy14bGFyZ2U6IDNyZW07XG5cbi8vIDY0cHhcbiRzcGFjaW5nLXh4bGFyZ2U6IDRyZW07XG5cbi8vIDk2cHhcbiRzcGFjaW5nLWxhcmdlc3Q6IDZyZW07XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kZGV2aWNlLW1vYmlsZS1zaXplOiA0NTBweDtcbiRkZXZpY2UtdGFibGV0LXNpemU6IDgwMHB4O1xuJGRldmljZS1sYXB0b3Atc2l6ZTogMTAyNHB4O1xuXG4kZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZTogMTA0OHB4O1xuJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemU6IDEyODBweDtcblxuXG46ZXhwb3J0IHtcbiAgICBwcmltYXJ5OiAkcHJpbWFyeTtcbiAgICBzZWNvbmRhcnlMYWJlbDogJHNlY29uZGFyeS1sYWJlbDtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbiRpY29uLXNtYWxsOiAxNnB4O1xuJGljb24tbWVkaXVtOiAyNHB4O1xuJGljb24tbGFyZ2U6IDMycHg7XG4kaWNvbi14bGFyZ2U6IDQ4cHg7XG4iLCIvKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLmxvYWRpbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gIHBhZGRpbmc6IDNlbTtcbn1cblxuLmJvb2tpbmctY29udGVudCB7XG4gIG1hcmdpbjogMCBhdXRvIDAgYXV0bztcbiAgcGFkZGluZzogMXB4IDIwcHggMTIwcHggMDtcbn1cbi5ib29raW5nLWNvbnRlbnQgPiBkaXYge1xuICB3aWR0aDogMTAwJTtcbn1cbi5ib29raW5nLWNvbnRlbnQub3BlbiB7XG4gIG1hcmdpbjogMCBhdXRvIDI4MHB4IGF1dG87XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogNDBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMge1xuICAgIHBhZGRpbmctYm90dG9tOiA0MHB4O1xuICB9XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzID4gZGl2IHtcbiAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyBoMSB7XG4gIGZvbnQtc2l6ZTogMzJweDtcbiAgbWFyZ2luOiAxMHB4IDAgNDBweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgd2lkdGg6IDEwMCU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiQm93ZXJcIjtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgbGFiZWwge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZm9udC1zaXplOiAxNnB4O1xuICBwYWRkaW5nOiA0cHggMCAyMHB4IDA7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIGxhYmVsIHNwYW4ge1xuICBwYWRkaW5nOiAwIDE4cHg7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uIHtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGNvbG9yOiAjMzMzMzMzO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiBoMSB7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIG1heC13aWR0aDogNjcxcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiA+IGRpdiB7XG4gIGZsZXg6IDE7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMTVweDtcbiAgbWluLXdpZHRoOiAyMDBweDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYgaDIge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYgaDIge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24gPiBkaXYgaDIge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgfVxufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBwYWRkaW5nOiAyOHB4IDIwcHg7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSAucmVjLWRldGFpbHMtcGVyaW9kIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSB7XG4gICAgcGFkZGluZy1ib3R0b206IDEwMHB4O1xuICB9XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSA+IGRpdiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBwYWRkaW5nOiAyMHB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20gPiBkaXYgPiBkaXYge1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20gPiBkaXYgPiBkaXYge1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwcHggMHB4IDEwMHB4IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwcHggMHB4IDEwMHB4IDA7XG4gIH1cbn1cblxuLmJvdHRvbS1wYW5lbCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogODBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gIHotaW5kZXg6IDI7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zIHtcbiAgcGFkZGluZzogMjRweCAxNnB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiBub25lO1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiB7XG4gIG1heC13aWR0aDogODgwcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBkaXNwbGF5OiBmbGV4O1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b24ge1xuICBmbGV4OiAxO1xuICBoZWlnaHQ6IDQ4cHg7XG4gIGZvbnQtc2l6ZTogMTZweDtcbn1cbi5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gIG1hcmdpbi1yaWdodDogNXB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjRDBEMEQwO1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgbWFyZ2luLWxlZnQ6IDVweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMge1xuICAgIHBhZGRpbmc6IDE2cHggMDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbiB7XG4gICAgbWFyZ2luOiAwIDE2cHg7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMikge1xuICAgIG1hcmdpbi1sZWZ0OiA4cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm90dG9tLXBhbmVsIC5idXR0b25zIHtcbiAgICBwYWRkaW5nOiAxNnB4IDA7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b24ge1xuICAgIG1hcmdpbjogMCAxNnB4O1xuICB9XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gICAgbWFyZ2luLXJpZ2h0OiA4cHg7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgICBtYXJnaW4tbGVmdDogOHB4O1xuICB9XG59XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCwgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCAuZGV0YWlscywgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCAuZGV0YWlscyB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCwgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCAuZGV0YWlscywgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCAuZGV0YWlscyB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxufSIsIkBpbXBvcnQgXCJ2YXJzXCI7XG5cbkBtaXhpbiBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRzaXplLCAkcXVhbGlmaWVyKSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAaWYgKCRxdWFsaWZpZXIgPT0gbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSBpZiAoJHF1YWxpZmllciA9PSBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWF4LXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5AbWl4aW4gYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRtaW4sICRtYXgpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkbWluKSBhbmQgKG1heC13aWR0aDogJG1heCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIHRoaXMgaXMgYSBjb3B5IG9mIHJlc3BvbmQtdG8uIHdlIGRvbid0IHdhbnQgdG8gcHJlc2VydmUgdGhhdCBtZXRob2Qgc2luY2UgdGhlIGJyZWFrcG9pbnRzIG1heSBkaXZlcmdlIGZyb20gdGhlIG9sZCBVSS5cbkBtaXhpbiBpcy1zY3JlZW4tc2l6ZSgkbWVkaWE6IGFsbCwgJG9yaWVudGF0aW9uOiBub25lKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cblxuQG1peGluIHBhZ2UtcGFkZGluZyB7XG4gICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbDtcbn1cblxuLy8gRm9udCBNaXhpbnNcbiRmb250LW1ja2luc2V5LXNhbnM6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuJGZvbnQtdGhlaW5oYXJkdDogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4kZm9udC1ib3dlcjogXCJCb3dlclwiO1xuXG5AbWl4aW4gYm93ZXItYm9sZCB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWJvd2VyO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBtY2tpbnNleS1zYW5zIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gZGlzcGxheS0xIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiA0cmVtOyAvLyA2NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4NzsgLy8gNzZweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMiB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDYwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS00IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogM3JlbTsgLy8gNDhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE2NjsgLy8gNTZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS01IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjgzMzsgLy8gMzRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjQyOyAvLyA0MHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS03IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyOHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTEge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA0OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi43NXJlbTsgLy8gNDRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDUycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTIge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTExOyAvLyA0NHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNDhweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMyB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIyMjsgLy8gNDRweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjg4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1NTsgLy8gMjhweFxuICAgIH1cbn1cblxuQG1peGluIGJvZHktZGVmYXVsdCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNnB4XG4gICAgfVxufVxuXG4vLy8gRG9lc250IGV4aXN0IGluIE1EUy5cbkBtaXhpbiBib2R5LXRpbnkge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtOyAvLyAxMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjRweFxuICAgIH1cbn1cblxuQG1peGluIGZvcm0tbGFiZWwge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LXRoZWluaGFyZHQ7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGNvbG9yOiAkcGxhY2Vob2xkZXItY29sb3I7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbn1cblxuQG1peGluIGNoaXAtbGFiZWwge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBjaGVja2JveC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGNvbG9yOiBibGFjaztcbn1cblxuLy8gYm9yZGVyc1xuXG5AbWl4aW4gbWNrLWNoZWNrYm94LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay10aGluLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXItbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBib3JkZXItY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudC1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuXG4vLyBmdW5jdGlvbnNcblxuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG5AbWl4aW4gbWF4LWxpbmVzKCRjb3VudCkge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiAkY291bnQ7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbn1cblxuLy8gaW1hZ2VzXG5AbWl4aW4gbWNrLWljb24oJHdpZHRoLCAkYXNzZXQsICRoZWlnaHQ6ICR3aWR0aCwgICRhc3NldFBhdGg6IFwibGlicy91aS9zcmMvbGliL2ljb25zXCIsKSB7XG4gICAgd2lkdGg6ICR3aWR0aDtcbiAgICBoZWlnaHQ6ICRoZWlnaHQ7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiI3skYXNzZXRQYXRofS8jeyRhc3NldH1cIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuXG5cbkBtaXhpbiBtY2stc21hbGwtaWNvbigkbW9iaWxlLWFzc2V0LCAkZGVza3RvcC1hc3NldDogJG1vYmlsZS1hc3NldCkge1xuICAgIEBpbmNsdWRlIG1jay1pY29uKDE2cHgsICRhc3NldDogJG1vYmlsZS1hc3NldCk7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICRhc3NldDogJGRlc2t0b3AtYXNzZXQpO1xuICAgIH1cbn1cblxuLy8gc2tlbGV0b25cbkBtaXhpbiBza2VsZXRvbi1iZyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWltYWdlLXNpemUge1xuICAgIHdpZHRoOiA4MXB4O1xuICAgIGhlaWdodDogODJweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDIxOXB4O1xuICAgICAgICBoZWlnaHQ6IDExOXB4O1xuICAgIH1cbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLXN0YXR1cy1zaXplIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMTE3cHg7XG4gICAgICAgIGhlaWdodDogNzhweDtcbiAgICB9XG59XG4iLCIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRjb2xvci1icmFuZC1lbGVjdHJpYy1ibHVlOiAjMjI1MWZmO1xuJGNvbG9yLWJyYW5kLWRlZXAtYmx1ZTogIzA1MWMyYztcbiRjb2xvci1icmFuZC1jeWFuOiAjMDBhOWY0O1xuXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGZvbnQtZGFyazogIzAwMDtcbiRmb250LWxpZ2h0OiAjZmZmO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcbiRncmVlbjE6ICMyMTk2NTM7XG5cbiRwZW5kaW5nOiAjZmZiMzAwO1xuJHBlbmRpbmctbGlnaHQ6IGxpZ2h0ZW4oJHBlbmRpbmcsIDEwKTtcbiRwZW5kaW5nLWRhcms6IGRhcmtlbigkcGVuZGluZywgMTApO1xuXG4kZXJyb3I6ICNlNTM5MzU7XG4kZXJyb3ItbGlnaHQ6IGxpZ2h0ZW4oJGVycm9yLCAxMCk7XG4kZXJyb3ItZGFyazogZGFya2VuKCRlcnJvciwgMTApO1xuXG4kY29sb3ItcHJpbWFyeTogIzE5MzdlYTtcbiRjb2xvci1wcmltYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG4kY29sb3ItcHJpbWFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcblxuJGNvbG9yLXNlY29uZGFyeTogIzQyODVGNDtcbiRjb2xvci1zZWNvbmRhcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuJGNvbG9yLXNlY29uZGFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuXG4kYmFja2dyb3VuZDogI2YwZjBmMDtcbiRmb290ZXItYmFjazogIzI2MzIzODtcbiRoZWFkZXItYmFjazogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMDUxQzJDLCAjMDUxQzJDIDQwJSwgIzBCMjQ1MyA2MCUsICMxRjQwRTYgMTAwJSk7XG5cbiRjb2xvci10ZXJuYXJ5OiAjMDUxYzJjO1xuXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cblxuJGZvbnQtc3RhY2s6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuXG4kaGVhZGluZy1mb250OiBcIkxhcmlzaE1jS2luc2V5XCIsICdHZW9yZ2lhJywgc2VyaWY7XG4kZm9udDogJGZvbnQtc3RhY2s7XG5cbiRmb250LWZhbWlseS1wcmltYXJ5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbiRmb250LWZhbWlseS1zZWNvbmRhcnk6IFwiQm93ZXJcIiwgR2VvcmdpYSwgXCJUaW1lcyBOZXcgUm9tYW5cIiBzZXJpZjtcblxuJGJhc2Utc2l6ZTogMTZweDtcbiR0YWJsZXQtc2l6ZTogMTZweDtcbiRtb2JpbGUtc2l6ZTogMTZweDtcblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbiRicmVhay1tb2JpbGU6IDQ1MHB4O1xuJGJyZWFrLXRhYmxldDogODAwcHg7XG4kYnJlYWstbGFwdG9wOiAxMDI0cHg7XG5cbiRicmVhay1sYW5kc2NhcGUtbW9iaWxlOiA4MDBweDtcbiRicmVhay1sYW5kc2NhcGUtdGFibGV0OiAxMDQ4cHg7XG4kYnJlYWstbGFuZHNjYXBlLWxhcHRvcDogMTI4MHB4O1xuIiwiQGltcG9ydCAnLi92YXJpYWJsZXMnO1xuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbkBtaXhpbiBib3gtc2hhZG93KCRjb2xvcjogIzAwMCwgJGRlcHRoOiAxKSB7XG4gICAgYm94LXNoYWRvdzogMCAxcHggM3B4IDFweCAqICgkZGVwdGggLSAxKSByZ2JhKCMwMDAsIC4yKSxcbiAgICAgICAgICAgICAgICAwIDFweCAxcHggMCByZ2JhKCMwMDAsIC4xNCksXG4gICAgICAgICAgICAgICAgMCAycHggMXB4IC0xcHggcmdiYSgjMDAwLCAuMTIpO1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuQG1peGluIHJlc3BvbmQtdG8oJG1lZGlhKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9ICBAZWxzZSBpZiAkbWVkaWEgPT0gbGF0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9QGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIkBpbXBvcnQgXCJsaWJzL3VpL3NyYy9saWIvbWl4aW5zXCI7XG5AaW1wb3J0ICd2YXJpYWJsZXMnO1xuQGltcG9ydCAnbWl4aW5zJztcblxuXG5cblxuLmxvYWRpbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCNmZmZmZmYsIDAuNSk7XG4gIHBhZGRpbmc6IDNlbTtcbn1cbi5ib29raW5nLWNvbnRlbnQge1xuICBtYXJnaW46IDAgYXV0byAwIGF1dG87XG4gIHBhZGRpbmc6IDFweCAyMHB4IDEyMHB4IDA7XG4gID5kaXYge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gICYub3BlbiB7XG4gICAgbWFyZ2luOiAwIGF1dG8gMjgwcHggYXV0bztcbiAgfVxuICAuZGV0YWlscyB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIEBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNDBweDtcbiAgICB9XG4gICAgPmRpdiB7XG4gICAgICBtYXgtd2lkdGg6IDEwMjRweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIH1cbiAgICBoMSB7XG4gICAgICBmb250LXNpemU6IDMycHg7XG4gICAgICBtYXJnaW46IDEwcHggMCA0MHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgZm9udC1mYW1pbHk6ICdCb3dlcic7XG4gICAgfVxuICAgIGxhYmVsIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgcGFkZGluZzogNHB4IDAgMjBweCAwO1xuICAgICAgc3BhbiB7XG4gICAgICAgIHBhZGRpbmc6IDAgMThweDtcbiAgICAgIH1cbiAgICB9XG4gICAgLnNlY3Rpb24ge1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgICAgaDEge1xuICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICB9XG4gICAgICA+ZGl2IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBtYXgtd2lkdGg6IDY3MXB4O1xuICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgICAgPmRpdiB7XG4gICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICBsaW5lLWhlaWdodDogMjRweDtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTVweDtcbiAgICAgICAgICBtaW4td2lkdGg6IDIwMHB4O1xuICAgICAgICB9XG4gICAgICAgIGgyIHtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgICAgICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LXByaW1hcnk7XG4gICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgICAgfVxuICAgICAgICB9ICAgICAgIFxuICAgICAgfVxuICAgICAgJi5ib3R0b20ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICAgICAgICBwYWRkaW5nOiAyOHB4IDIwcHg7XG4gICAgICAgIC5yZWMtZGV0YWlscy1wZXJpb2Qge1xuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG4gICAgICAgIH1cbiAgICAgICAgPmRpdiB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgICAgcGFkZGluZzogMjBweDtcblxuICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgPiBkaXZ7XG4gICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgIHBhZGRpbmc6IDBweCAwcHggMTAwcHggMDtcbiAgfVxufVxuLmJvdHRvbS1wYW5lbCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogODBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gIHotaW5kZXg6IDI7XG4gIFxuICAuYnV0dG9ucyB7XG4gICAgcGFkZGluZzogMjRweCAxNnB4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiBub25lO1xuXG4gICAgPmRpdiB7XG4gICAgICBtYXgtd2lkdGg6IDg4MHB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYnV0dG9uIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgaGVpZ2h0OiA0OHB4O1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICB9XG4gICAgICBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gICAgICB9XG4gICAgICBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgIH1cbiAgICB9XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICBwYWRkaW5nOiAxNnB4IDA7XG4gICAgICA+ZGl2IHtcbiAgICAgICAgYnV0dG9uIHtcbiAgICAgICAgICBtYXJnaW46IDAgMTZweDtcbiAgICAgICAgfVxuICAgICAgICBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgICAgICAgfVxuICAgICAgICBidXR0b246bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogOHB4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lcntcblxuICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcblxuICAgIC5ib29raW5nLWNvbnRlbnQsIC5tY2stc2Nyb2xse1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgLmRldGFpbHN7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgICAgfVxuICAgIH1cblxuICB9XG59Il19 */"] + styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\n\n\n\n\n\n\n.loading[_ngcontent-%COMP%] {\n background-color: rgba(255, 255, 255, 0.5);\n padding: 3em;\n}\n.booking-content[_ngcontent-%COMP%] {\n margin: 0 auto 0 auto;\n padding: 1px 0px 120px 0;\n}\n.booking-content[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 100%;\n}\n.booking-content.open[_ngcontent-%COMP%] {\n margin: 0 auto 280px auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n border: 1px solid #E6E6E6;\n background-color: white;\n padding: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n padding-bottom: 40px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 1024px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 32px;\n margin: 10px 0 40px;\n font-weight: 500;\n width: 100%;\n text-align: center;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-size: 16px;\n padding: 4px 0 20px 0;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] label[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n padding: 0 18px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 400;\n font-size: 16px;\n color: #333333;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 400;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n max-width: 671px;\n margin: 0 auto;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n line-height: 24px;\n padding-bottom: 15px;\n min-width: 200px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n width: 100%;\n display: block;\n color: #333333;\n margin: 0 0 20px 0;\n font-weight: 500;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n padding: 28px 20px;\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] .rec-details-period[_ngcontent-%COMP%] {\n cursor: pointer;\n text-decoration: underline;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] {\n padding-bottom: 100px;\n }\n}\n.booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background-color: white;\n padding: 20px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] .section.bottom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding-bottom: 0;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0 0 0 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-content[_ngcontent-%COMP%] {\n padding: 0 0 0 0;\n }\n}\n.bottom-panel[_ngcontent-%COMP%] {\n position: absolute;\n bottom: 0;\n width: 100%;\n min-height: 80px;\n background-color: white;\n border: 1px solid #E6E6E6;\n z-index: 2;\n flex-direction: row;\n display: flex;\n align-items: center;\n}\n.bottom-panel.fixed[_ngcontent-%COMP%] {\n position: fixed !important;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n width: 100%;\n max-width: none;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n max-width: 880px;\n margin: 0 auto;\n display: flex;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex: 1;\n height: 48px;\n font-size: 16px;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 5px;\n border: 1px solid #D0D0D0;\n}\n.bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 5px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] {\n padding: 16px 0;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin: 0 16px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel[_ngcontent-%COMP%] .buttons[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 8px;\n }\n}\n.booking-form-base-container.limit-height[_ngcontent-%COMP%] {\n height: 84vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-form-base-container.limit-height[_ngcontent-%COMP%] {\n height: 95vh;\n max-height: 886px;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-form-base-container.limit-height[_ngcontent-%COMP%] {\n height: 95vh;\n max-height: 886px;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: 100%;\n }\n .booking-form-base-container[_ngcontent-%COMP%] .booking-content[_ngcontent-%COMP%] .details[_ngcontent-%COMP%], .booking-form-base-container[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] .details[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: scroll;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9taXhpbnMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNwVUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQTFEQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDNUNBOztzQkFBQTtBQ1BBO0VBQ0UsMENBQUE7RUFDQSxZQUFBO0FKdUNGO0FJckNBO0VBQ0UscUJBQUE7RUFDQSx3QkFBQTtBSndDRjtBSXZDRTtFQUNFLFdBQUE7QUp5Q0o7QUl2Q0U7RUFDRSx5QkFBQTtBSnlDSjtBSXZDRTtFQUNFLHlCQUFBO0VBQ0EsdUJBQUE7RUFDQSxVQUFBO0FKeUNKO0FHNUNRO0VDQU47SUFLSSxvQkFBQTtFSjJDSjtBQUNGO0FHOUNRO0VDSE47SUFLSSxvQkFBQTtFSmdESjtBQUNGO0FJL0NJO0VBQ0UsaUJBQUE7RUFDQSxjQUFBO0FKaUROO0FJL0NJO0VBQ0UsZUFBQTtFQUNBLG1CQUFBO0VBQ0EsZ0JBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7QUppRE47QUk5Q0k7RUFDRSxjQUFBO0VBQ0EsZUFBQTtFQUNBLHFCQUFBO0FKZ0ROO0FJL0NNO0VBQ0UsZUFBQTtBSmlEUjtBSTlDSTtFQUNFLGVBQUE7RUFDQSxnQkFBQTtFQUNBLGVBQUE7RUFDQSxjQUFBO0FKZ0ROO0FJL0NNO0VBQ0UsZUFBQTtFQUNBLGdCQUFBO0FKaURSO0FJL0NNO0VBQ0UsYUFBQTtFQUNBLGVBQUE7RUFDQSxnQkFBQTtFQUNBLGNBQUE7QUppRFI7QUloRFE7RUFDRSxPQUFBO0VBQ0EsaUJBQUE7RUFDQSxvQkFBQTtFQUNBLGdCQUFBO0FKa0RWO0FJaERRO0VBQ0UsV0FBQTtFQUNBLGNBQUE7RUFDQSxjQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLHFHRnRCWTtBRndFdEI7QUNsSFk7RUcwREo7SUFRSSxlQUFBO0VKb0RWO0FBQ0Y7QUN2SFk7RUcwREo7SUFRSSxlQUFBO0VKeURWO0FBQ0Y7QUl0RE07RUFDRSx5QkFBQTtFQUNBLGtCQUFBO0FKd0RSO0FJdkRRO0VBQ0UsZUFBQTtFQUNBLDBCQUFBO0FKeURWO0FDcElZO0VHc0VOO0lBUUkscUJBQUE7RUowRFI7QUFDRjtBQ3pJWTtFR3NFTjtJQVFJLHFCQUFBO0VKK0RSO0FBQ0Y7QUk5RFE7RUFDRSx1QkFBQTtFQUNBLGFBQUE7QUpnRVY7QUNsSlk7RUdxRkE7SUFDRSxpQkFBQTtFSmdFWjtBQUNGO0FDdkpZO0VHcUZBO0lBQ0UsaUJBQUE7RUpxRVo7QUFDRjtBQzVKWTtFR0VaO0lBNkZJLGdCQUFBO0VKaUVGO0FBQ0Y7QUNqS1k7RUdFWjtJQTZGSSxnQkFBQTtFSnNFRjtBQUNGO0FJcEVBO0VBQ0Usa0JBQUE7RUFDQSxTQUFBO0VBQ0EsV0FBQTtFQUNBLGdCQUFBO0VBQ0EsdUJBQUE7RUFDQSx5QkFBQTtFQUNBLFVBQUE7RUFDQSxtQkFBQTtFQUNBLGFBQUE7RUFDQSxtQkFBQTtBSnVFRjtBSXJFRTtFQUNFLDBCQUFBO0FKdUVKO0FJcEVFO0VBR0UsV0FBQTtFQUNBLGVBQUE7QUpvRUo7QUlsRUk7RUFDRSxnQkFBQTtFQUNBLGNBQUE7RUFDQSxhQUFBO0FKb0VOO0FJbkVNO0VBQ0UsT0FBQTtFQUNBLFlBQUE7RUFDQSxlQUFBO0FKcUVSO0FJbkVNO0VBQ0UsaUJBQUE7RUFDQSx5QkFBQTtBSnFFUjtBSW5FTTtFQUNFLGdCQUFBO0FKcUVSO0FDM01ZO0VHa0hWO0lBd0JJLGVBQUE7RUpxRUo7RUluRU07SUFDRSxjQUFBO0VKcUVSO0VJbkVNO0lBQ0UsaUJBQUE7RUpxRVI7RUluRU07SUFDRSxnQkFBQTtFSnFFUjtBQUNGO0FDek5ZO0VHa0hWO0lBd0JJLGVBQUE7RUptRko7RUlqRk07SUFDRSxjQUFBO0VKbUZSO0VJakZNO0lBQ0UsaUJBQUE7RUptRlI7RUlqRk07SUFDRSxnQkFBQTtFSm1GUjtBQUNGO0FJMUVFO0VBRUUsWUFBQTtBSjRFSjtBQzNPWTtFR29LUjtJQUNFLFlBQUE7SUFDQSxpQkFBQTtFSjBFSjtFSXZFRTtJQUNFLFlBQUE7RUp5RUo7RUl4RUk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUowRU47QUFDRjtBQ3hQWTtFR29LUjtJQUNFLFlBQUE7SUFDQSxpQkFBQTtFSnVGSjtFSXBGRTtJQUNFLFlBQUE7RUpzRko7RUlyRkk7SUFDRSxZQUFBO0lBQ0Esa0JBQUE7RUp1Rk47QUFDRiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWNyZWF0ZS9ib29raW5nLWNyZWF0ZS5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIiRwcmltYXJ5OiAjMUY0MEU2O1xuJGZvcm0tbGFiZWw6ICMwNTFDMkM7XG4kc2Vjb25kYXJ5LWxhYmVsOiAjNzY3Njc2O1xuJGJvcmRlcjogI0IzQjNCMztcbiRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkOiAjRDBEMEQwO1xuJGNoaXAtY29sb3I6ICMzMzMzMzM7XG4kcGxhY2Vob2xkZXItY29sb3I6ICM3RjdGN0Y7XG4kYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDtcbiRwYWdlLWJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4kc2VsZWN0ZWQtb3B0aW9uOiAjRTZFNkU2O1xuJGNvbG9yLWJyYW5kLXllbGxvdzogI2ZmZDA0ODtcbiRsaWdodC15ZWxsb3c6ICNmZmYzY2U7XG4kY29hY2htYXJrLXRleHQ6ICM2ZjRkMDA7XG4kZXJyb3ItY29sb3I6ICNFMTJFNDA7XG4kbm8tZmlsdGVycy1jb2xvcjogI0JDQkNCQztcbiRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjogI0Y0RjRGNDtcbiRwcmltYXJ5LWhpZ2hsaWdodDogIzIyNTFGRjtcbiRzY3JvbGxiYXItY29sb3I6ICM3NTc1NzU7XG5cbiRhdmFpbGFibGUtY29sb3I6ICM1RDlENTI7XG4kYXZhaWxhYmxlLWJ5LXJlcXVlc3QtY29sb3I6ICNGNUI1M0Y7XG4kaW4tdXNlLWNvbG9yOiAjRDQ0ODNFO1xuJG5vdC1ib29rYWJsZS1jb2xvcjogI0NDQ0NDQztcblxuJG1vZGFsLWJvZHktaGVhZGluZzogIzRENEQ0RDtcbiRhbGVydC1vdmVybGF5LWJnOiByZ2JhKDUsIDI4LCA0NCwgMC44NSk7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvYWNobWFyay1iZzogI0VCRUJGNjtcbiRjb2FjaG1hcmstZGFyay10ZXh0OiAjMUIxQjE5O1xuJGVycm9yLXRleHQ6ICNmZmY7XG5cbi8qKlxuICogU3BhY2luZ1xuICovXG5cbi8vIDRweFxuJHNwYWNpbmctc21hbGxlc3Q6IDAuMjVyZW07XG5cbi8vIDhweFxuJHNwYWNpbmcteHhzbWFsbDogMC41cmVtO1xuXG4vLyAxMnB4XG4kc3BhY2luZy14c21hbGw6IDAuNzVyZW07XG5cbi8vIDE2cHhcbiRzcGFjaW5nLXNtYWxsOiAxcmVtO1xuXG4vLyAyMHB4XG4kc3BhY2luZy1zbWFsbC1tZWRpdW06IDEuMjVyZW07XG5cbi8vIDI0cHhcbiRzcGFjaW5nLW1lZGl1bTogMS41cmVtO1xuXG4vLyAyOHB4XG4kc3BhY2luZy1tZWRpdW0tbGFyZ2U6IDEuNzVyZW07XG5cbi8vIDMycHhcbiRzcGFjaW5nLWxhcmdlOiAycmVtO1xuXG4vLyA0OHB4XG4kc3BhY2luZy14bGFyZ2U6IDNyZW07XG5cbi8vIDY0cHhcbiRzcGFjaW5nLXh4bGFyZ2U6IDRyZW07XG5cbi8vIDk2cHhcbiRzcGFjaW5nLWxhcmdlc3Q6IDZyZW07XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kZGV2aWNlLW1vYmlsZS1zaXplOiA0NTBweDtcbiRkZXZpY2UtdGFibGV0LXNpemU6IDgwMHB4O1xuJGRldmljZS1sYXB0b3Atc2l6ZTogMTAyNHB4O1xuXG4kZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZTogMTA0OHB4O1xuJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemU6IDEyODBweDtcblxuXG46ZXhwb3J0IHtcbiAgICBwcmltYXJ5OiAkcHJpbWFyeTtcbiAgICBzZWNvbmRhcnlMYWJlbDogJHNlY29uZGFyeS1sYWJlbDtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbiRpY29uLXNtYWxsOiAxNnB4O1xuJGljb24tbWVkaXVtOiAyNHB4O1xuJGljb24tbGFyZ2U6IDMycHg7XG4kaWNvbi14bGFyZ2U6IDQ4cHg7XG4iLCIvKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLmxvYWRpbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gIHBhZGRpbmc6IDNlbTtcbn1cblxuLmJvb2tpbmctY29udGVudCB7XG4gIG1hcmdpbjogMCBhdXRvIDAgYXV0bztcbiAgcGFkZGluZzogMXB4IDBweCAxMjBweCAwO1xufVxuLmJvb2tpbmctY29udGVudCA+IGRpdiB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLmJvb2tpbmctY29udGVudC5vcGVuIHtcbiAgbWFyZ2luOiAwIGF1dG8gMjgwcHggYXV0bztcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMge1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcGFkZGluZzogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMge1xuICAgIHBhZGRpbmctYm90dG9tOiA0MHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyB7XG4gICAgcGFkZGluZy1ib3R0b206IDQwcHg7XG4gIH1cbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgPiBkaXYge1xuICBtYXgtd2lkdGg6IDEwMjRweDtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIGgxIHtcbiAgZm9udC1zaXplOiAzMnB4O1xuICBtYXJnaW46IDEwcHggMCA0MHB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICB3aWR0aDogMTAwJTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyBsYWJlbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXNpemU6IDE2cHg7XG4gIHBhZGRpbmc6IDRweCAwIDIwcHggMDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgbGFiZWwgc3BhbiB7XG4gIHBhZGRpbmc6IDAgMThweDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24ge1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgY29sb3I6ICMzMzMzMzM7XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uIGgxIHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBmb250LXdlaWdodDogNDAwO1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgbWF4LXdpZHRoOiA2NzFweDtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uID4gZGl2ID4gZGl2IHtcbiAgZmxleDogMTtcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gIHBhZGRpbmctYm90dG9tOiAxNXB4O1xuICBtaW4td2lkdGg6IDIwMHB4O1xufVxuLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiBoMiB7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgY29sb3I6ICMzMzMzMzM7XG4gIG1hcmdpbjogMCAwIDIwcHggMDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiBoMiB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbiA+IGRpdiBoMiB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICB9XG59XG4uYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIHBhZGRpbmc6IDI4cHggMjBweDtcbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tIC5yZWMtZGV0YWlscy1wZXJpb2Qge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctY29udGVudCAuZGV0YWlscyAuc2VjdGlvbi5ib3R0b20ge1xuICAgIHBhZGRpbmctYm90dG9tOiAxMDBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG4gIH1cbn1cbi5ib29raW5nLWNvbnRlbnQgLmRldGFpbHMgLnNlY3Rpb24uYm90dG9tID4gZGl2IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDIwcHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSA+IGRpdiA+IGRpdiB7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzIC5zZWN0aW9uLmJvdHRvbSA+IGRpdiA+IGRpdiB7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWNvbnRlbnQge1xuICAgIHBhZGRpbmc6IDAgMCAwIDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwIDAgMCAwO1xuICB9XG59XG5cbi5ib3R0b20tcGFuZWwge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDgwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICB6LWluZGV4OiAyO1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLmJvdHRvbS1wYW5lbC5maXhlZCB7XG4gIHBvc2l0aW9uOiBmaXhlZCAhaW1wb3J0YW50O1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IG5vbmU7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IHtcbiAgbWF4LXdpZHRoOiA4ODBweDtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGRpc3BsYXk6IGZsZXg7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbiB7XG4gIGZsZXg6IDE7XG4gIGhlaWdodDogNDhweDtcbiAgZm9udC1zaXplOiAxNnB4O1xufVxuLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG59XG4uYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMikge1xuICBtYXJnaW4tbGVmdDogNXB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyB7XG4gICAgcGFkZGluZzogMTZweCAwO1xuICB9XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uIHtcbiAgICBtYXJnaW46IDAgMTZweDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMSkge1xuICAgIG1hcmdpbi1yaWdodDogOHB4O1xuICB9XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMgPiBkaXYgYnV0dG9uOm50aC1jaGlsZCgyKSB7XG4gICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib3R0b20tcGFuZWwgLmJ1dHRvbnMge1xuICAgIHBhZGRpbmc6IDE2cHggMDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbiB7XG4gICAgbWFyZ2luOiAwIDE2cHg7XG4gIH1cbiAgLmJvdHRvbS1wYW5lbCAuYnV0dG9ucyA+IGRpdiBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgfVxuICAuYm90dG9tLXBhbmVsIC5idXR0b25zID4gZGl2IGJ1dHRvbjpudGgtY2hpbGQoMikge1xuICAgIG1hcmdpbi1sZWZ0OiA4cHg7XG4gIH1cbn1cblxuLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lci5saW1pdC1oZWlnaHQge1xuICBoZWlnaHQ6IDg0dmg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1mb3JtLWJhc2UtY29udGFpbmVyLmxpbWl0LWhlaWdodCB7XG4gICAgaGVpZ2h0OiA5NXZoO1xuICAgIG1heC1oZWlnaHQ6IDg4NnB4O1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCwgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIgLmJvb2tpbmctY29udGVudCAuZGV0YWlscywgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAubWNrLXNjcm9sbCAuZGV0YWlscyB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXIubGltaXQtaGVpZ2h0IHtcbiAgICBoZWlnaHQ6IDk1dmg7XG4gICAgbWF4LWhlaWdodDogODg2cHg7XG4gIH1cbiAgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAuYm9va2luZy1jb250ZW50LCAuYm9va2luZy1mb3JtLWJhc2UtY29udGFpbmVyIC5tY2stc2Nyb2xsIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gIH1cbiAgLmJvb2tpbmctZm9ybS1iYXNlLWNvbnRhaW5lciAuYm9va2luZy1jb250ZW50IC5kZXRhaWxzLCAuYm9va2luZy1mb3JtLWJhc2UtY29udGFpbmVyIC5tY2stc2Nyb2xsIC5kZXRhaWxzIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICB9XG59IiwiQGltcG9ydCBcInZhcnNcIjtcblxuQG1peGluIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJHNpemUsICRxdWFsaWZpZXIpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBpZiAoJHF1YWxpZmllciA9PSBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIGlmICgkcXVhbGlmaWVyID09IG1heC13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtYXgtd2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBtaXhpbiBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJG1pbiwgJG1heCkge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gdGhpcyBpcyBhIGNvcHkgb2YgcmVzcG9uZC10by4gd2UgZG9uJ3Qgd2FudCB0byBwcmVzZXJ2ZSB0aGF0IG1ldGhvZCBzaW5jZSB0aGUgYnJlYWtwb2ludHMgbWF5IGRpdmVyZ2UgZnJvbSB0aGUgb2xkIFVJLlxuQG1peGluIGlzLXNjcmVlbi1zaXplKCRtZWRpYTogYWxsLCAkb3JpZW50YXRpb246IG5vbmUpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuXG5AbWl4aW4gcGFnZS1wYWRkaW5nIHtcbiAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xufVxuXG4vLyBGb250IE1peGluc1xuJGZvbnQtbWNraW5zZXktc2FuczogXCJNY0tpbnNleSBTYW5zXCI7XG4kZm9udC10aGVpbmhhcmR0OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiRmb250LWJvd2VyOiBcIkJvd2VyXCI7XG5cbkBtaXhpbiBib3dlci1ib2xkIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtYm93ZXI7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIG1ja2luc2V5LXNhbnMge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBkaXNwbGF5LTEge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDRyZW07IC8vIDY0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTg3OyAvLyA3NnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0yIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0zIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTQge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzcmVtOyAvLyA0OHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTY2OyAvLyA1NnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDY0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTUge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuODMzOyAvLyAzNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42NDI7IC8vIDQwcHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTcge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDQ4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjc1cmVtOyAvLyA0NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNTJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICBsaW5lLWhlaWdodDogMS4xMTE7IC8vIDQ0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA0OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0zIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjIyOyAvLyA0NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy00IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy01IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyODhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy02IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTU1OyAvLyAyOHB4XG4gICAgfVxufVxuXG5AbWl4aW4gYm9keS1kZWZhdWx0IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI2cHhcbiAgICB9XG59XG5cbi8vLyBEb2VzbnQgZXhpc3QgaW4gTURTLlxuQG1peGluIGJvZHktdGlueSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07IC8vIDEycHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyMHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZm9ybS1sYWJlbCB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LWZhbWlseTogJGZvbnQtdGhlaW5oYXJkdDtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgY29sb3I6ICRwbGFjZWhvbGRlci1jb2xvcjtcbiAgICBmb250LXdlaWdodDogMzAwO1xufVxuXG5AbWl4aW4gY2hpcC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIGNoZWNrYm94LWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgY29sb3I6IGJsYWNrO1xufVxuXG4vLyBib3JkZXJzXG5cbkBtaXhpbiBtY2stY2hlY2tib3gtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAycHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLXRoaW4tYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlci1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJvcmRlci1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50LWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXItbGlnaHQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5cbi8vIGZ1bmN0aW9uc1xuXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbkBtaXhpbiBtYXgtbGluZXMoJGNvdW50KSB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAtd2Via2l0LWxpbmUtY2xhbXA6ICRjb3VudDtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuXG4vLyBpbWFnZXNcbkBtaXhpbiBtY2staWNvbigkd2lkdGgsICRhc3NldCwgJGhlaWdodDogJHdpZHRoLCAgJGFzc2V0UGF0aDogXCJsaWJzL3VpL3NyYy9saWIvaWNvbnNcIiwpIHtcbiAgICB3aWR0aDogJHdpZHRoO1xuICAgIGhlaWdodDogJGhlaWdodDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIjeyRhc3NldFBhdGh9LyN7JGFzc2V0fVwiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG59XG5cblxuQG1peGluIG1jay1zbWFsbC1pY29uKCRtb2JpbGUtYXNzZXQsICRkZXNrdG9wLWFzc2V0OiAkbW9iaWxlLWFzc2V0KSB7XG4gICAgQGluY2x1ZGUgbWNrLWljb24oMTZweCwgJGFzc2V0OiAkbW9iaWxlLWFzc2V0KTtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oMjRweCwgJGFzc2V0OiAkZGVza3RvcC1hc3NldCk7XG4gICAgfVxufVxuXG4vLyBza2VsZXRvblxuQG1peGluIHNrZWxldG9uLWJnIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItaW1hZ2Utc2l6ZSB7XG4gICAgd2lkdGg6IDgxcHg7XG4gICAgaGVpZ2h0OiA4MnB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMjE5cHg7XG4gICAgICAgIGhlaWdodDogMTE5cHg7XG4gICAgfVxufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItc3RhdHVzLXNpemUge1xuICAgIHdpZHRoOiAxMTdweDtcbiAgICBoZWlnaHQ6IDc4cHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAxMTdweDtcbiAgICAgICAgaGVpZ2h0OiA3OHB4O1xuICAgIH1cbn1cbiIsIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGNvbG9yLWJyYW5kLWVsZWN0cmljLWJsdWU6ICMyMjUxZmY7XG4kY29sb3ItYnJhbmQtZGVlcC1ibHVlOiAjMDUxYzJjO1xuJGNvbG9yLWJyYW5kLWN5YW46ICMwMGE5ZjQ7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kZm9udC1kYXJrOiAjMDAwO1xuJGZvbnQtbGlnaHQ6ICNmZmY7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuJGdyZWVuMTogIzIxOTY1MztcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2xvci1wcmltYXJ5OiAjMTkzN2VhO1xuJGNvbG9yLXByaW1hcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcbiRjb2xvci1wcmltYXJ5LWRhcms6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuXG4kY29sb3Itc2Vjb25kYXJ5OiAjNDI4NUY0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodDogbGlnaHRlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG4kY29sb3Itc2Vjb25kYXJ5LWRhcms6IGRhcmtlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG5cbiRiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuJGZvb3Rlci1iYWNrOiAjMjYzMjM4O1xuJGhlYWRlci1iYWNrOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNTFDMkMsICMwNTFDMkMgNDAlLCAjMEIyNDUzIDYwJSwgIzFGNDBFNiAxMDAlKTtcblxuJGNvbG9yLXRlcm5hcnk6ICMwNTFjMmM7XG5cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuXG4kZm9udC1zdGFjazogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiRoZWFkaW5nLWZvbnQ6IFwiTGFyaXNoTWNLaW5zZXlcIiwgJ0dlb3JnaWEnLCBzZXJpZjtcbiRmb250OiAkZm9udC1zdGFjaztcblxuJGZvbnQtZmFtaWx5LXByaW1hcnk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LXNlY29uZGFyeTogXCJCb3dlclwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiIHNlcmlmO1xuXG4kYmFzZS1zaXplOiAxNnB4O1xuJHRhYmxldC1zaXplOiAxNnB4O1xuJG1vYmlsZS1zaXplOiAxNnB4O1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGJyZWFrLW1vYmlsZTogNDUwcHg7XG4kYnJlYWstdGFibGV0OiA4MDBweDtcbiRicmVhay1sYXB0b3A6IDEwMjRweDtcblxuJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGU6IDgwMHB4O1xuJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQ6IDEwNDhweDtcbiRicmVhay1sYW5kc2NhcGUtbGFwdG9wOiAxMjgwcHg7XG4iLCJAaW1wb3J0ICcuL3ZhcmlhYmxlcyc7XG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuQG1peGluIGJveC1zaGFkb3coJGNvbG9yOiAjMDAwLCAkZGVwdGg6IDEpIHtcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMXB4ICogKCRkZXB0aCAtIDEpIHJnYmEoIzAwMCwgLjIpLFxuICAgICAgICAgICAgICAgIDAgMXB4IDFweCAwIHJnYmEoIzAwMCwgLjE0KSxcbiAgICAgICAgICAgICAgICAwIDJweCAxcHggLTFweCByZ2JhKCMwMDAsIC4xMik7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG5AbWl4aW4gcmVzcG9uZC10bygkbWVkaWEpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gIEBlbHNlIGlmICRtZWRpYSA9PSBsYXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1AZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQGltcG9ydCBcImxpYnMvdWkvc3JjL2xpYi9taXhpbnNcIjtcbkBpbXBvcnQgJ3ZhcmlhYmxlcyc7XG5AaW1wb3J0ICdtaXhpbnMnO1xuXG5cblxuXG4ubG9hZGluZyB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoI2ZmZmZmZiwgMC41KTtcbiAgcGFkZGluZzogM2VtO1xufVxuLmJvb2tpbmctY29udGVudCB7XG4gIG1hcmdpbjogMCBhdXRvIDAgYXV0bztcbiAgcGFkZGluZzogMXB4IDBweCAxMjBweCAwO1xuICA+ZGl2IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAmLm9wZW4ge1xuICAgIG1hcmdpbjogMCBhdXRvIDI4MHB4IGF1dG87XG4gIH1cbiAgLmRldGFpbHMge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgcGFkZGluZzogMDtcbiAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgcGFkZGluZy1ib3R0b206IDQwcHg7XG4gICAgfVxuICAgID5kaXYge1xuICAgICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICB9XG4gICAgaDEge1xuICAgICAgZm9udC1zaXplOiAzMnB4O1xuICAgICAgbWFyZ2luOiAxMHB4IDAgNDBweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIC8vIGZvbnQtZmFtaWx5OiAnQm93ZXInO1xuICAgIH1cbiAgICBsYWJlbCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIHBhZGRpbmc6IDRweCAwIDIwcHggMDtcbiAgICAgIHNwYW4ge1xuICAgICAgICBwYWRkaW5nOiAwIDE4cHg7XG4gICAgICB9XG4gICAgfVxuICAgIC5zZWN0aW9uIHtcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgIGgxIHtcbiAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgfVxuICAgICAgPmRpdiB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgbWF4LXdpZHRoOiA2NzFweDtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgID5kaXYge1xuICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDE1cHg7XG4gICAgICAgICAgbWluLXdpZHRoOiAyMDBweDtcbiAgICAgICAgfVxuICAgICAgICBoMiB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgY29sb3I6ICMzMzMzMzM7XG4gICAgICAgICAgbWFyZ2luOiAwIDAgMjBweCAwO1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1wcmltYXJ5O1xuICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICAgIH1cbiAgICAgICAgfSAgICAgICBcbiAgICAgIH1cbiAgICAgICYuYm90dG9tIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgICAgICAgcGFkZGluZzogMjhweCAyMHB4O1xuICAgICAgICAucmVjLWRldGFpbHMtcGVyaW9kIHtcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDEwMHB4O1xuICAgICAgICB9XG4gICAgICAgID5kaXYge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICAgIHBhZGRpbmc6IDIwcHg7XG5cbiAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgID4gZGl2e1xuICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICBwYWRkaW5nOiAwIDAgMCAwO1xuICB9XG59XG4uYm90dG9tLXBhbmVsIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiA4MHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgei1pbmRleDogMjtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAmLmZpeGVkIHtcbiAgICBwb3NpdGlvbjogZml4ZWQgIWltcG9ydGFudDtcbiAgfVxuICBcbiAgLmJ1dHRvbnMge1xuICAgIC8vIHBhZGRpbmc6IDI0cHggMTZweDtcbiAgICAvLyBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1heC13aWR0aDogbm9uZTtcblxuICAgID5kaXYge1xuICAgICAgbWF4LXdpZHRoOiA4ODBweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGJ1dHRvbiB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgfVxuICAgICAgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogNXB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRDBEMEQwO1xuICAgICAgfVxuICAgICAgYnV0dG9uOm50aC1jaGlsZCgyKSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gICAgICB9XG4gICAgfVxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgcGFkZGluZzogMTZweCAwO1xuICAgICAgPmRpdiB7XG4gICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgbWFyZ2luOiAwIDE2cHg7XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiA4cHg7XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9uOm50aC1jaGlsZCgyKSB7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cbi5ib29raW5nLWZvcm0tYmFzZS1jb250YWluZXJ7XG5cbiAgJi5saW1pdC1oZWlnaHQge1xuICAgIC8vIG1heC1oZWlnaHQ6IDg0MnB4O1xuICAgIGhlaWdodDogODR2aDtcbiAgICAvLyBtYXgtaGVpZ2h0OiA5M3ZoO1xuICB9XG5cbiAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgJi5saW1pdC1oZWlnaHQge1xuICAgICAgaGVpZ2h0OiA5NXZoO1xuICAgICAgbWF4LWhlaWdodDogODg2cHg7XG4gICAgfVxuXG4gICAgLmJvb2tpbmctY29udGVudCwgLm1jay1zY3JvbGx7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAuZGV0YWlsc3tcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cbn0iXX0= */"] }); /*@__PURE__*/ @@ -52550,105 +53397,105 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons "../../libs/ui/src/lib/modal-button-row/modal-button-row.component.ts"); var i12 = __webpack_require__( - /*! ../room-availability-preview/room-availability-preview.component */ - "./src/app/booking/room-availability-preview/room-availability-preview.component.ts"); - - var i13 = __webpack_require__( /*! ../booking-create/booking-edit.component */ "./src/app/booking/booking-create/booking-edit.component.ts"); + var i13 = __webpack_require__( + /*! ../room-availability-preview/room-availability-preview.component */ + "./src/app/booking/room-availability-preview/room-availability-preview.component.ts"); + var i14 = __webpack_require__( /*! ../catering/catering.component */ "./src/app/booking/catering/catering.component.ts"); - function BookingDetailsModalComponent_div_1_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_div_1_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 20); + i0.ɵɵelementStart(0, "div", 26); i0.ɵɵtext(1, "\xA0"); i0.ɵɵelementEnd(); } } - function BookingDetailsModalComponent_div_2_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_div_2_Template(rf, ctx) { if (rf & 1) { - var _r22 = i0.ɵɵgetCurrentView(); + var _r24 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div", 21); - i0.ɵɵelement(1, "img", 22); - i0.ɵɵelementStart(2, "p", 23); + i0.ɵɵelementStart(0, "div", 27); + i0.ɵɵelement(1, "img", 28); + i0.ɵɵelementStart(2, "p", 29); i0.ɵɵtext(3, "Your booking date and/or time was successfully updated"); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(4, "img", 24); - i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_2_Template_img_click_4_listener() { - i0.ɵɵrestoreView(_r22); - var ctx_r21 = i0.ɵɵnextContext(); - return ctx_r21.hideInfoBanner(); + i0.ɵɵelementStart(4, "img", 30); + i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_1_div_2_Template_img_click_4_listener() { + i0.ɵɵrestoreView(_r24); + var ctx_r23 = i0.ɵɵnextContext(2); + return ctx_r23.hideInfoBanner(); }); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } } - function BookingDetailsModalComponent_div_3_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_div_3_Template(rf, ctx) { if (rf & 1) { - var _r24 = i0.ɵɵgetCurrentView(); + var _r26 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div", 25); - i0.ɵɵelement(1, "img", 26); - i0.ɵɵelementStart(2, "p", 23); + i0.ɵɵelementStart(0, "div", 31); + i0.ɵɵelement(1, "img", 32); + i0.ɵɵelementStart(2, "p", 29); i0.ɵɵtext(3); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(4, "img", 27); - i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_3_Template_img_click_4_listener() { - i0.ɵɵrestoreView(_r24); - var ctx_r23 = i0.ɵɵnextContext(); - return ctx_r23.hideWarningBanner(); + i0.ɵɵelementStart(4, "img", 33); + i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_1_div_3_Template_img_click_4_listener() { + i0.ɵɵrestoreView(_r26); + var ctx_r25 = i0.ɵɵnextContext(2); + return ctx_r25.hideWarningBanner(); }); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r2 = i0.ɵɵnextContext(); + var ctx_r6 = i0.ɵɵnextContext(2); i0.ɵɵadvance(3); - i0.ɵɵtextInterpolate(ctx_r2.warningMessage); + i0.ɵɵtextInterpolate(ctx_r6.warningMessage); } } - function BookingDetailsModalComponent_div_6_ng_template_9_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_div_6_ng_template_9_Template(rf, ctx) { if (rf & 1) { i0.ɵɵtext(0); } if (rf & 2) { - var ctx_r25 = i0.ɵɵnextContext(2); - i0.ɵɵtextInterpolate3(" This is one occurrence in a recurring series which occurs every ", ctx_r25.recurrence_interval > 1 ? ctx_r25.recurrence_interval + " Days" : "Day", " effective ", ctx_r25._data == null ? null : ctx_r25._data.master_booking == null ? null : ctx_r25._data.master_booking.dateString, " until ", ctx_r25._data == null ? null : ctx_r25._data.master_booking == null ? null : ctx_r25._data.master_booking.endDateString, ". "); + var ctx_r27 = i0.ɵɵnextContext(3); + i0.ɵɵtextInterpolate3(" This is one occurrence in a recurring series which occurs every ", ctx_r27.recurrence_interval > 1 ? ctx_r27.recurrence_interval + " Days" : "Day", " effective ", ctx_r27._data == null ? null : ctx_r27._data.master_booking == null ? null : ctx_r27._data.master_booking.dateString, " until ", ctx_r27._data == null ? null : ctx_r27._data.master_booking == null ? null : ctx_r27._data.master_booking.endDateString, ". "); } } - function BookingDetailsModalComponent_div_6_ng_template_10_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_div_6_ng_template_10_Template(rf, ctx) { if (rf & 1) { i0.ɵɵtext(0); } if (rf & 2) { - var ctx_r26 = i0.ɵɵnextContext(2); - i0.ɵɵtextInterpolate3(" This is one occurrence in a recurring series which occurs every ", ctx_r26.recurrence_interval > 1 ? ctx_r26.recurrence_interval + " Weeks" : "Week", " effective ", ctx_r26._data == null ? null : ctx_r26._data.master_booking == null ? null : ctx_r26._data.master_booking.dateString, " until ", ctx_r26._data == null ? null : ctx_r26._data.master_booking == null ? null : ctx_r26._data.master_booking.endDateString, ". "); + var ctx_r28 = i0.ɵɵnextContext(3); + i0.ɵɵtextInterpolate3(" This is one occurrence in a recurring series which occurs every ", ctx_r28.recurrence_interval > 1 ? ctx_r28.recurrence_interval + " Weeks" : "Week", " effective ", ctx_r28._data == null ? null : ctx_r28._data.master_booking == null ? null : ctx_r28._data.master_booking.dateString, " until ", ctx_r28._data == null ? null : ctx_r28._data.master_booking == null ? null : ctx_r28._data.master_booking.endDateString, ". "); } } - function BookingDetailsModalComponent_div_6_ng_template_11_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_div_6_ng_template_11_Template(rf, ctx) { if (rf & 1) { i0.ɵɵtext(0); } if (rf & 2) { - var ctx_r27 = i0.ɵɵnextContext(2); - i0.ɵɵtextInterpolate3(" This is one occurrence in a recurring series which occurs every ", ctx_r27.recurrence_interval > 1 ? ctx_r27.recurrence_interval + " Months" : "Month", " effective ", ctx_r27._data == null ? null : ctx_r27._data.master_booking == null ? null : ctx_r27._data.master_booking.dateString, " until ", ctx_r27._data == null ? null : ctx_r27._data.master_booking == null ? null : ctx_r27._data.master_booking.endDateString, ". "); + var ctx_r29 = i0.ɵɵnextContext(3); + i0.ɵɵtextInterpolate3(" This is one occurrence in a recurring series which occurs every ", ctx_r29.recurrence_interval > 1 ? ctx_r29.recurrence_interval + " Months" : "Month", " effective ", ctx_r29._data == null ? null : ctx_r29._data.master_booking == null ? null : ctx_r29._data.master_booking.dateString, " until ", ctx_r29._data == null ? null : ctx_r29._data.master_booking == null ? null : ctx_r29._data.master_booking.endDateString, ". "); } } - function BookingDetailsModalComponent_div_6_ng_template_12_div_4_div_3_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_div_6_ng_template_12_div_4_div_3_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div"); i0.ɵɵtext(1); @@ -52656,84 +53503,84 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } if (rf & 2) { - var occurrence_r34 = ctx.$implicit; + var occurrence_r36 = ctx.$implicit; i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate(occurrence_r34.dateTz.formatDate("dd MMM yyyy")); + i0.ɵɵtextInterpolate(occurrence_r36.dateTz.formatDate("dd MMM yyyy")); } } - function BookingDetailsModalComponent_div_6_ng_template_12_div_4_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_div_6_ng_template_12_div_4_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 43); - i0.ɵɵelement(1, "div", 44); - i0.ɵɵelementStart(2, "div", 45); - i0.ɵɵtemplate(3, BookingDetailsModalComponent_div_6_ng_template_12_div_4_div_3_Template, 2, 1, "div", 46); + i0.ɵɵelementStart(0, "div", 49); + i0.ɵɵelement(1, "div", 50); + i0.ɵɵelementStart(2, "div", 51); + i0.ɵɵtemplate(3, BookingDetailsModalComponent_div_1_div_6_ng_template_12_div_4_div_3_Template, 2, 1, "div", 52); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r32 = i0.ɵɵnextContext(3); + var ctx_r34 = i0.ɵɵnextContext(4); i0.ɵɵadvance(3); - i0.ɵɵproperty("ngForOf", ctx_r32.occurrence_details); + i0.ɵɵproperty("ngForOf", ctx_r34.occurrence_details); } } - function BookingDetailsModalComponent_div_6_ng_template_12_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_div_6_ng_template_12_Template(rf, ctx) { if (rf & 1) { - var _r36 = i0.ɵɵgetCurrentView(); + var _r38 = i0.ɵɵgetCurrentView(); i0.ɵɵtext(0, " This is one occurrence in a recurring series which occurs on "); - i0.ɵɵelementStart(1, "span", 41); - i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_6_ng_template_12_Template_span_click_1_listener() { - i0.ɵɵrestoreView(_r36); - var ctx_r35 = i0.ɵɵnextContext(2); - return ctx_r35.toggleSpecificDates(); + i0.ɵɵelementStart(1, "span", 47); + i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_1_div_6_ng_template_12_Template_span_click_1_listener() { + i0.ɵɵrestoreView(_r38); + var ctx_r37 = i0.ɵɵnextContext(3); + return ctx_r37.toggleSpecificDates(); }); i0.ɵɵtext(2, "Specific Dates"); i0.ɵɵelementEnd(); i0.ɵɵtext(3); - i0.ɵɵtemplate(4, BookingDetailsModalComponent_div_6_ng_template_12_div_4_Template, 4, 1, "div", 42); + i0.ɵɵtemplate(4, BookingDetailsModalComponent_div_1_div_6_ng_template_12_div_4_Template, 4, 1, "div", 48); } if (rf & 2) { - var ctx_r28 = i0.ɵɵnextContext(2); + var ctx_r30 = i0.ɵɵnextContext(3); i0.ɵɵadvance(3); - i0.ɵɵtextInterpolate2(" effective ", ctx_r28._data == null ? null : ctx_r28._data.master_booking == null ? null : ctx_r28._data.master_booking.dateString, " until ", ctx_r28._data == null ? null : ctx_r28._data.master_booking == null ? null : ctx_r28._data.master_booking.endDateString, " "); + i0.ɵɵtextInterpolate2(" effective ", ctx_r30._data == null ? null : ctx_r30._data.master_booking == null ? null : ctx_r30._data.master_booking.dateString, " until ", ctx_r30._data == null ? null : ctx_r30._data.master_booking == null ? null : ctx_r30._data.master_booking.endDateString, " "); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx_r28.specific_dates); + i0.ɵɵproperty("ngIf", ctx_r30.specific_dates); } } - function BookingDetailsModalComponent_div_6_button_14_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_div_6_button_14_Template(rf, ctx) { if (rf & 1) { - var _r38 = i0.ɵɵgetCurrentView(); + var _r40 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "button", 47); - i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_6_button_14_Template_button_click_0_listener() { - i0.ɵɵrestoreView(_r38); - var ctx_r37 = i0.ɵɵnextContext(2); - return ctx_r37.editRecurringSeries(); + i0.ɵɵelementStart(0, "button", 53); + i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_1_div_6_button_14_Template_button_click_0_listener() { + i0.ɵɵrestoreView(_r40); + var ctx_r39 = i0.ɵɵnextContext(3); + return ctx_r39.editRecurringSeries(); }); i0.ɵɵtext(1, " Edit series "); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r29 = i0.ɵɵnextContext(2); - i0.ɵɵproperty("disabled", ctx_r29.disableSeriesEditButton); + var ctx_r31 = i0.ɵɵnextContext(3); + i0.ɵɵproperty("disabled", ctx_r31.disableSeriesEditButton); } } - function BookingDetailsModalComponent_div_6_button_15_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_div_6_button_15_Template(rf, ctx) { if (rf & 1) { - var _r40 = i0.ɵɵgetCurrentView(); + var _r42 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "button", 48); - i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_6_button_15_Template_button_click_0_listener() { - i0.ɵɵrestoreView(_r40); - var ctx_r39 = i0.ɵɵnextContext(2); - return ctx_r39.cancelBooking({ + i0.ɵɵelementStart(0, "button", 54); + i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_1_div_6_button_15_Template_button_click_0_listener() { + i0.ɵɵrestoreView(_r42); + var ctx_r41 = i0.ɵɵnextContext(3); + return ctx_r41.cancelBooking({ series: true }); }); @@ -52742,48 +53589,48 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } } - function BookingDetailsModalComponent_div_6_ngx_skeleton_loader_16_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_div_6_ngx_skeleton_loader_16_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelement(0, "ngx-skeleton-loader", 49); + i0.ɵɵelement(0, "ngx-skeleton-loader", 55); } } - function BookingDetailsModalComponent_div_6_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_div_6_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 28); - i0.ɵɵelementStart(1, "div", 29); - i0.ɵɵelementStart(2, "div", 30); - i0.ɵɵelement(3, "img", 31); - i0.ɵɵelementStart(4, "span", 32); + i0.ɵɵelementStart(0, "div", 34); + i0.ɵɵelementStart(1, "div", 35); + i0.ɵɵelementStart(2, "div", 36); + i0.ɵɵelement(3, "img", 37); + i0.ɵɵelementStart(4, "span", 38); i0.ɵɵtext(5); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(6, "div", 33); - i0.ɵɵelement(7, "img", 34); - i0.ɵɵelementStart(8, "div", 35); - i0.ɵɵtemplate(9, BookingDetailsModalComponent_div_6_ng_template_9_Template, 1, 3, "ng-template", 36); - i0.ɵɵtemplate(10, BookingDetailsModalComponent_div_6_ng_template_10_Template, 1, 3, "ng-template", 36); - i0.ɵɵtemplate(11, BookingDetailsModalComponent_div_6_ng_template_11_Template, 1, 3, "ng-template", 36); - i0.ɵɵtemplate(12, BookingDetailsModalComponent_div_6_ng_template_12_Template, 5, 3, "ng-template", 37); + i0.ɵɵelementStart(6, "div", 39); + i0.ɵɵelement(7, "img", 40); + i0.ɵɵelementStart(8, "div", 41); + i0.ɵɵtemplate(9, BookingDetailsModalComponent_div_1_div_6_ng_template_9_Template, 1, 3, "ng-template", 42); + i0.ɵɵtemplate(10, BookingDetailsModalComponent_div_1_div_6_ng_template_10_Template, 1, 3, "ng-template", 42); + i0.ɵɵtemplate(11, BookingDetailsModalComponent_div_1_div_6_ng_template_11_Template, 1, 3, "ng-template", 42); + i0.ɵɵtemplate(12, BookingDetailsModalComponent_div_1_div_6_ng_template_12_Template, 5, 3, "ng-template", 43); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(13, "div", 38); - i0.ɵɵtemplate(14, BookingDetailsModalComponent_div_6_button_14_Template, 2, 1, "button", 39); - i0.ɵɵtemplate(15, BookingDetailsModalComponent_div_6_button_15_Template, 2, 0, "button", 40); - i0.ɵɵtemplate(16, BookingDetailsModalComponent_div_6_ngx_skeleton_loader_16_Template, 1, 0, "ngx-skeleton-loader", 13); + i0.ɵɵelementStart(13, "div", 44); + i0.ɵɵtemplate(14, BookingDetailsModalComponent_div_1_div_6_button_14_Template, 2, 1, "button", 45); + i0.ɵɵtemplate(15, BookingDetailsModalComponent_div_1_div_6_button_15_Template, 2, 0, "button", 46); + i0.ɵɵtemplate(16, BookingDetailsModalComponent_div_1_div_6_ngx_skeleton_loader_16_Template, 1, 0, "ngx-skeleton-loader", 17); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r3 = i0.ɵɵnextContext(); + var ctx_r7 = i0.ɵɵnextContext(2); i0.ɵɵadvance(3); - i0.ɵɵproperty("src", ctx_r3.statusImage, i0.ɵɵsanitizeUrl); + i0.ɵɵproperty("src", ctx_r7.statusImage, i0.ɵɵsanitizeUrl); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1(" Recurring booking status: ", ctx_r3.statusText, " "); + i0.ɵɵtextInterpolate1(" Recurring booking status: ", ctx_r7.statusText, " "); i0.ɵɵadvance(3); - i0.ɵɵproperty("ngSwitch", ctx_r3.recurrence_period); + i0.ɵɵproperty("ngSwitch", ctx_r7.recurrence_period); i0.ɵɵadvance(1); i0.ɵɵproperty("ngSwitchCase", "daily"); i0.ɵɵadvance(1); @@ -52791,20 +53638,20 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons i0.ɵɵadvance(1); i0.ɵɵproperty("ngSwitchCase", "monthly"); i0.ɵɵadvance(3); - i0.ɵɵproperty("ngIf", !ctx_r3.loading && !ctx_r3.disableCancelButton); + i0.ɵɵproperty("ngIf", !ctx_r7.loading && !ctx_r7.disableCancelButton); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", !ctx_r3.loading); + i0.ɵɵproperty("ngIf", !ctx_r7.loading); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx_r3.loading); + i0.ɵɵproperty("ngIf", ctx_r7.loading); } } - function BookingDetailsModalComponent_div_7_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_div_7_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 50); - i0.ɵɵelementStart(1, "div", 51); + i0.ɵɵelementStart(0, "div", 56); + i0.ɵɵelementStart(1, "div", 57); i0.ɵɵelementStart(2, "p"); - i0.ɵɵelement(3, "img", 31); + i0.ɵɵelement(3, "img", 37); i0.ɵɵtext(4); i0.ɵɵelementEnd(); i0.ɵɵelementStart(5, "span"); @@ -52815,21 +53662,21 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } if (rf & 2) { - var ctx_r4 = i0.ɵɵnextContext(); - i0.ɵɵproperty("ngClass", ctx_r4.status); + var ctx_r8 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("ngClass", ctx_r8.status); i0.ɵɵadvance(3); - i0.ɵɵproperty("src", ctx_r4.statusImage, i0.ɵɵsanitizeUrl); + i0.ɵɵproperty("src", ctx_r8.statusImage, i0.ɵɵsanitizeUrl); i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate1(" Booking ", ctx_r4.statusText.toLowerCase(), ""); + i0.ɵɵtextInterpolate(ctx_r8.statusText); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1(" ", ctx_r4.timeString, " "); + i0.ɵɵtextInterpolate1(" ", ctx_r8.timeString, " "); } } - function BookingDetailsModalComponent_div_8_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_div_8_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 52); - i0.ɵɵelement(1, "img", 53); + i0.ɵɵelementStart(0, "div", 58); + i0.ɵɵelement(1, "img", 59); i0.ɵɵelementStart(2, "div"); i0.ɵɵelementStart(3, "p"); i0.ɵɵtext(4, "This is a multiroom booking. To request edits, please contact your local backoffice team."); @@ -52839,208 +53686,135 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } } - function BookingDetailsModalComponent_div_9_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_div_9_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div"); i0.ɵɵelementStart(1, "div"); - i0.ɵɵelement(2, "ngx-skeleton-loader", 54); - i0.ɵɵelementEnd(); + i0.ɵɵelement(2, "ngx-skeleton-loader", 60); i0.ɵɵelementEnd(); - } - } - - function BookingDetailsModalComponent_h1_13_Template(rf, ctx) { - if (rf & 1) { - i0.ɵɵelementStart(0, "h1"); - i0.ɵɵtext(1); i0.ɵɵelementEnd(); } - - if (rf & 2) { - var ctx_r7 = i0.ɵɵnextContext(); - i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate1("Booking Status: ", ctx_r7.statusText, ""); - } } - function BookingDetailsModalComponent_h1_14_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_a_21_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "h1"); - i0.ɵɵelement(1, "ngx-skeleton-loader", 55); - i0.ɵɵelementEnd(); - } - } - - function BookingDetailsModalComponent_a_17_Template(rf, ctx) { - if (rf & 1) { - i0.ɵɵelementStart(0, "a", 56); + i0.ɵɵelementStart(0, "a", 61); i0.ɵɵtext(1, " Contact front of house"); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r9 = i0.ɵɵnextContext(); - i0.ɵɵproperty("href", ctx_r9.emailURL, i0.ɵɵsanitizeUrl); + var ctx_r11 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("href", ctx_r11.emailURL, i0.ɵɵsanitizeUrl); } } - function BookingDetailsModalComponent_ngx_skeleton_loader_18_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_ngx_skeleton_loader_22_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelement(0, "ngx-skeleton-loader", 49); + i0.ɵɵelement(0, "ngx-skeleton-loader", 55); } } - function BookingDetailsModalComponent_button_20_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_button_24_Template(rf, ctx) { if (rf & 1) { - var _r42 = i0.ɵɵgetCurrentView(); + var _r44 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "button", 57); - i0.ɵɵlistener("click", function BookingDetailsModalComponent_button_20_Template_button_click_0_listener() { - i0.ɵɵrestoreView(_r42); - var ctx_r41 = i0.ɵɵnextContext(); - return ctx_r41.cancelBooking(); + i0.ɵɵelementStart(0, "button", 62); + i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_1_button_24_Template_button_click_0_listener() { + i0.ɵɵrestoreView(_r44); + var ctx_r43 = i0.ɵɵnextContext(2); + return ctx_r43.cancelBooking(); }); i0.ɵɵtext(1, " Cancel booking"); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r11 = i0.ɵɵnextContext(); - i0.ɵɵproperty("disabled", ctx_r11.isMultiroomBooking); - } - } - - function BookingDetailsModalComponent_ngx_skeleton_loader_21_Template(rf, ctx) { - if (rf & 1) { - i0.ɵɵelement(0, "ngx-skeleton-loader", 49); + var ctx_r13 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("disabled", ctx_r13.isMultiroomBooking); } } - function BookingDetailsModalComponent_div_24_div_19_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_ngx_skeleton_loader_25_Template(rf, ctx) { if (rf & 1) { - var _r45 = i0.ɵɵgetCurrentView(); - - i0.ɵɵelementStart(0, "div"); - i0.ɵɵelementStart(1, "input", 62); - i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_24_div_19_Template_input_click_1_listener() { - i0.ɵɵrestoreView(_r45); - var ctx_r44 = i0.ɵɵnextContext(2); - return ctx_r44.expandLocation(); - }); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); + i0.ɵɵelement(0, "ngx-skeleton-loader", 55); } } - function BookingDetailsModalComponent_div_24_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_div_28_Template(rf, ctx) { if (rf & 1) { - var _r47 = i0.ɵɵgetCurrentView(); + var _r46 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div"); - i0.ɵɵelementStart(1, "h2"); - i0.ɵɵelement(2, "img", 58); - i0.ɵɵtext(3); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(4, "p"); - i0.ɵɵtext(5); - i0.ɵɵelement(6, "br"); - i0.ɵɵtext(7); - i0.ɵɵelement(8, "br"); - i0.ɵɵtext(9); + i0.ɵɵelementStart(0, "div", 63); + i0.ɵɵelementStart(1, "div", 64); + i0.ɵɵelementStart(2, "div", 65); + i0.ɵɵelementStart(3, "h2"); + i0.ɵɵtext(4, " Schedule "); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(10, "button", 59); - i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_24_Template_button_click_10_listener() { - i0.ɵɵrestoreView(_r47); - var ctx_r46 = i0.ɵɵnextContext(); - return ctx_r46.toggleEditView(); + i0.ɵɵelementStart(5, "button", 66); + i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_1_div_28_Template_button_click_5_listener() { + i0.ɵɵrestoreView(_r46); + var ctx_r45 = i0.ɵɵnextContext(2); + return ctx_r45.toggleEditView(); }); - i0.ɵɵtext(11, " Edit date or time "); + i0.ɵɵelement(6, "img", 67); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(12, "p"); - i0.ɵɵtext(13); - i0.ɵɵelement(14, "br"); - i0.ɵɵtext(15); - i0.ɵɵelement(16, "br"); - i0.ɵɵtext(17); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(18, "div", 60); - i0.ɵɵtemplate(19, BookingDetailsModalComponent_div_24_div_19_Template, 2, 0, "div", 9); - i0.ɵɵelementStart(20, "room-location-preview", 61); - i0.ɵɵlistener("handleExpand", function BookingDetailsModalComponent_div_24_Template_room_location_preview_handleExpand_20_listener() { - i0.ɵɵrestoreView(_r47); - var ctx_r48 = i0.ɵɵnextContext(); - return ctx_r48.handleClose(false); - }); i0.ɵɵelementEnd(); + i0.ɵɵelementStart(7, "p"); + i0.ɵɵtext(8); + i0.ɵɵelement(9, "br"); + i0.ɵɵtext(10); + i0.ɵɵelement(11, "br"); + i0.ɵɵtext(12); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(21, "button", 59); - i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_24_Template_button_click_21_listener() { - i0.ɵɵrestoreView(_r47); - var ctx_r49 = i0.ɵɵnextContext(); - return ctx_r49.extendBooking(); + i0.ɵɵelementStart(13, "button", 68); + i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_1_div_28_Template_button_click_13_listener() { + i0.ɵɵrestoreView(_r46); + var ctx_r47 = i0.ɵɵnextContext(2); + return ctx_r47.extendBooking(); }); - i0.ɵɵtext(22); + i0.ɵɵtext(14); + i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r13 = i0.ɵɵnextContext(); - i0.ɵɵadvance(3); - i0.ɵɵtextInterpolate1(" ", ctx_r13.title, " "); - i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1(" Date: ", ctx_r13.dateString, ""); - i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1(" Time: ", ctx_r13.timeString, ""); - i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate2(" ", ctx_r13.type, " meeting (", ctx_r13.durationString, ") "); - i0.ɵɵadvance(1); - i0.ɵɵproperty("disabled", ctx_r13.disableEditTimeButton || ctx_r13.isMultiroomBooking); + var ctx_r15 = i0.ɵɵnextContext(2); + i0.ɵɵadvance(5); + i0.ɵɵproperty("disabled", ctx_r15.disableEditTimeButton || ctx_r15.isMultiroomBooking); i0.ɵɵadvance(3); - i0.ɵɵtextInterpolate1(" Address: ", ctx_r13.roomLocation, ""); - i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1(" Room: ", ctx_r13.roomName, ""); + i0.ɵɵtextInterpolate1(" Date: ", ctx_r15.dateString, ""); i0.ɵɵadvance(2); - i0.ɵɵtextInterpolate1(" Capacity: ", ctx_r13.capacity, " "); + i0.ɵɵtextInterpolate1(" Time: ", ctx_r15.timeString, ""); i0.ɵɵadvance(2); - i0.ɵɵproperty("ngIf", !ctx_r13.expandedLocation); - i0.ɵɵadvance(1); - i0.ɵɵproperty("mapUrl", ctx_r13.mapUrl)("focus", ctx_r13.focusedRoom)("expanded", ctx_r13.expandedLocation)("building", ctx_r13._data.booking.room.building)("level", ctx_r13._data.booking.room.level)("space", ctx_r13._data.booking.room)("mode", ctx_r13.TopBarHeaderMode.Light); + i0.ɵɵtextInterpolate2(" ", ctx_r15.type, " meeting (", ctx_r15.durationString, ") "); i0.ɵɵadvance(1); - i0.ɵɵproperty("disabled", ctx_r13.extendableMaximum === 0 || ctx_r13.isMultiroomBooking); + i0.ɵɵproperty("disabled", ctx_r15.extendableMaximum === 0 || ctx_r15.isMultiroomBooking); i0.ɵɵadvance(1); - i0.ɵɵtextInterpolate1(" ", ctx_r13.checkingExtendable ? "Checking availability..." : "Extend booking duration", " "); + i0.ɵɵtextInterpolate1(" ", ctx_r15.checkingExtendable ? "Checking availability..." : "Extend booking duration", " "); } } - function BookingDetailsModalComponent_div_25_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_div_29_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div"); + i0.ɵɵelementStart(0, "div", 63); i0.ɵɵelementStart(1, "h2"); - i0.ɵɵelement(2, "ngx-skeleton-loader", 63); + i0.ɵɵelement(2, "ngx-skeleton-loader", 69); i0.ɵɵelementEnd(); i0.ɵɵelementStart(3, "p"); - i0.ɵɵelement(4, "ngx-skeleton-loader", 64); - i0.ɵɵelement(5, "ngx-skeleton-loader", 64); - i0.ɵɵelement(6, "ngx-skeleton-loader", 65); + i0.ɵɵelement(4, "ngx-skeleton-loader", 70); + i0.ɵɵelement(5, "ngx-skeleton-loader", 70); + i0.ɵɵelement(6, "ngx-skeleton-loader", 71); i0.ɵɵelementEnd(); - i0.ɵɵelement(7, "ngx-skeleton-loader", 55); - i0.ɵɵelement(8, "ngx-skeleton-loader", 66); - i0.ɵɵelementStart(9, "p"); - i0.ɵɵelement(10, "ngx-skeleton-loader", 67); - i0.ɵɵelement(11, "ngx-skeleton-loader", 65); - i0.ɵɵelement(12, "ngx-skeleton-loader", 65); - i0.ɵɵelementEnd(); - i0.ɵɵelement(13, "ngx-skeleton-loader", 68); - i0.ɵɵelement(14, "ngx-skeleton-loader", 69); i0.ɵɵelementEnd(); } } - function BookingDetailsModalComponent_div_26_p_13_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_div_30_div_20_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "p"); - i0.ɵɵelementStart(1, "strong"); + i0.ɵɵelementStart(0, "div"); + i0.ɵɵelementStart(1, "span", 75); i0.ɵɵtext(2, "Company:"); i0.ɵɵelementEnd(); i0.ɵɵtext(3); @@ -53048,246 +53822,420 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } if (rf & 2) { - var ctx_r50 = i0.ɵɵnextContext(2); + var ctx_r48 = i0.ɵɵnextContext(3); i0.ɵɵadvance(3); - i0.ɵɵtextInterpolate1(" ", ctx_r50.companyString, ""); + i0.ɵɵtextInterpolate1(" \xA0 ", ctx_r48.companyString, ""); } } - function BookingDetailsModalComponent_div_26_p_26_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_div_30_div_33_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "p"); - i0.ɵɵtext(1, "Email notification for this booking has been opt out. "); + i0.ɵɵelementStart(0, "div"); + i0.ɵɵelementStart(1, "span", 75); + i0.ɵɵtext(2, "Email notification for this booking has been opt out."); + i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } } - function BookingDetailsModalComponent_div_26_div_29_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_div_30_Template(rf, ctx) { if (rf & 1) { - var _r54 = i0.ɵɵgetCurrentView(); + var _r51 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div"); - i0.ɵɵelementStart(1, "h2"); - i0.ɵɵelement(2, "img", 71); - i0.ɵɵtext(3, " Catering "); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(4, "h3"); - i0.ɵɵtext(5, "Catering available for this room"); + i0.ɵɵelementStart(0, "div", 72); + i0.ɵɵelementStart(1, "div", 64); + i0.ɵɵelementStart(2, "div", 65); + i0.ɵɵelementStart(3, "h2"); + i0.ɵɵtext(4, " Meeting "); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(6, "button", 57); - i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_26_div_29_Template_button_click_6_listener() { - i0.ɵɵrestoreView(_r54); - var ctx_r53 = i0.ɵɵnextContext(2); - return ctx_r53.addCatering(); + i0.ɵɵelementStart(5, "button", 73); + i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_1_div_30_Template_button_click_5_listener() { + i0.ɵɵrestoreView(_r51); + var ctx_r50 = i0.ɵɵnextContext(2); + return ctx_r50.toggleUpdateView(); }); - i0.ɵɵtext(7, " Add catering "); + i0.ɵɵelement(6, "img", 67); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(7, "div", 74); + i0.ɵɵelementStart(8, "div"); + i0.ɵɵelementStart(9, "span", 75); + i0.ɵɵtext(10, "Meeting title:"); + i0.ɵɵelementEnd(); + i0.ɵɵtext(11); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(12, "div"); + i0.ɵɵelementStart(13, "span", 75); + i0.ɵɵtext(14, "Host:"); + i0.ɵɵelementEnd(); + i0.ɵɵtext(15); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(16, "div"); + i0.ɵɵelementStart(17, "span", 75); + i0.ɵɵtext(18, "Attendees:"); + i0.ɵɵelementEnd(); + i0.ɵɵtext(19); + i0.ɵɵelementEnd(); + i0.ɵɵtemplate(20, BookingDetailsModalComponent_div_1_div_30_div_20_Template, 4, 1, "div", 1); + i0.ɵɵelementStart(21, "div"); + i0.ɵɵelementStart(22, "span", 75); + i0.ɵɵtext(23, "Charge code:"); + i0.ɵɵelementEnd(); + i0.ɵɵtext(24); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(25, "div"); + i0.ɵɵelementStart(26, "span", 75); + i0.ɵɵtext(27, "Headcount estimate:"); + i0.ɵɵelementEnd(); + i0.ɵɵtext(28); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(29, "div"); + i0.ɵɵelementStart(30, "span", 75); + i0.ɵɵtext(31, "Additional requirements:"); + i0.ɵɵelementEnd(); + i0.ɵɵtext(32); + i0.ɵɵelementEnd(); + i0.ɵɵtemplate(33, BookingDetailsModalComponent_div_1_div_30_div_33_Template, 3, 0, "div", 1); + i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); - i0.ɵɵelement(8, "catering-order-table", 72); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r52 = i0.ɵɵnextContext(2); + var ctx_r17 = i0.ɵɵnextContext(2); + i0.ɵɵadvance(5); + i0.ɵɵproperty("disabled", ctx_r17.disableUpdateDetailsButton || ctx_r17.isMultiroomBooking); i0.ɵɵadvance(6); - i0.ɵɵproperty("disabled", ctx_r52.disableCateringButton || ctx_r52.isMultiroomBooking); - i0.ɵɵadvance(2); - i0.ɵɵproperty("booking", ctx_r52._data == null ? null : ctx_r52._data.booking); + i0.ɵɵtextInterpolate1(" \xA0 ", ctx_r17.title, ""); + i0.ɵɵadvance(4); + i0.ɵɵtextInterpolate1(" \xA0 ", ctx_r17.host, ""); + i0.ɵɵadvance(4); + i0.ɵɵtextInterpolate1(" \xA0 ", ctx_r17.attendeesString, " "); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r17.companyString); + i0.ɵɵadvance(4); + i0.ɵɵtextInterpolate1(" \xA0 ", ctx_r17.chargeCode, ""); + i0.ɵɵadvance(4); + i0.ɵɵtextInterpolate1(" \xA0 ", ctx_r17.headcount, ""); + i0.ɵɵadvance(4); + i0.ɵɵtextInterpolate1(" \xA0 ", ctx_r17.requirements, ""); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r17.opt_out); } } - function BookingDetailsModalComponent_div_26_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_div_31_Template(rf, ctx) { if (rf & 1) { - var _r56 = i0.ɵɵgetCurrentView(); - - i0.ɵɵelementStart(0, "div", 16); + i0.ɵɵelementStart(0, "div"); i0.ɵɵelementStart(1, "div"); i0.ɵɵelementStart(2, "h2"); - i0.ɵɵelement(3, "img", 70); - i0.ɵɵtext(4, " Booking Details "); + i0.ɵɵelement(3, "ngx-skeleton-loader", 76); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(5, "p"); - i0.ɵɵelementStart(6, "strong"); - i0.ɵɵtext(7, "Host:"); + i0.ɵɵelement(4, "ngx-skeleton-loader", 77); + i0.ɵɵelement(5, "ngx-skeleton-loader", 70); + i0.ɵɵelement(6, "ngx-skeleton-loader", 71); + i0.ɵɵelement(7, "ngx-skeleton-loader", 78); + i0.ɵɵelement(8, "ngx-skeleton-loader", 77); + i0.ɵɵelement(9, "ngx-skeleton-loader", 71); i0.ɵɵelementEnd(); - i0.ɵɵtext(8); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(9, "p"); - i0.ɵɵelementStart(10, "strong"); - i0.ɵɵtext(11, "Attendees:"); + } + } + + function BookingDetailsModalComponent_div_1_div_33_div_2_Template(rf, ctx) { + if (rf & 1) { + var _r54 = i0.ɵɵgetCurrentView(); + + i0.ɵɵelementStart(0, "div"); + i0.ɵɵelementStart(1, "input", 81); + i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_1_div_33_div_2_Template_input_click_1_listener() { + i0.ɵɵrestoreView(_r54); + var ctx_r53 = i0.ɵɵnextContext(3); + return ctx_r53.expandLocation(); + }); i0.ɵɵelementEnd(); - i0.ɵɵtext(12); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(13, BookingDetailsModalComponent_div_26_p_13_Template, 4, 1, "p", 9); - i0.ɵɵelementStart(14, "p"); - i0.ɵɵelementStart(15, "strong"); - i0.ɵɵtext(16, "Charge code:"); + } + } + + function BookingDetailsModalComponent_div_1_div_33_Template(rf, ctx) { + if (rf & 1) { + var _r56 = i0.ɵɵgetCurrentView(); + + i0.ɵɵelementStart(0, "div", 79); + i0.ɵɵelementStart(1, "div"); + i0.ɵɵtemplate(2, BookingDetailsModalComponent_div_1_div_33_div_2_Template, 2, 0, "div", 1); + i0.ɵɵelementStart(3, "room-location-preview", 80); + i0.ɵɵlistener("handleExpand", function BookingDetailsModalComponent_div_1_div_33_Template_room_location_preview_handleExpand_3_listener() { + i0.ɵɵrestoreView(_r56); + var ctx_r55 = i0.ɵɵnextContext(2); + return ctx_r55.handleClose(false); + }); i0.ɵɵelementEnd(); - i0.ɵɵtext(17); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(18, "p"); - i0.ɵɵelementStart(19, "strong"); - i0.ɵɵtext(20, "Headcount estimate:"); i0.ɵɵelementEnd(); - i0.ɵɵtext(21); + } + + if (rf & 2) { + var ctx_r19 = i0.ɵɵnextContext(2); + i0.ɵɵadvance(2); + i0.ɵɵproperty("ngIf", !ctx_r19.expandedLocation); + i0.ɵɵadvance(1); + i0.ɵɵproperty("mapUrl", ctx_r19.mapUrl)("focus", ctx_r19.focusedRoom)("expanded", ctx_r19.expandedLocation)("building", ctx_r19._data.booking.room.building)("level", ctx_r19._data.booking.room.level)("space", ctx_r19._data.booking.room)("mode", ctx_r19.TopBarHeaderMode.Light); + } + } + + function BookingDetailsModalComponent_div_1_div_34_Template(rf, ctx) { + if (rf & 1) { + i0.ɵɵelementStart(0, "div"); + i0.ɵɵelement(1, "ngx-skeleton-loader", 82); + i0.ɵɵelement(2, "ngx-skeleton-loader", 83); + i0.ɵɵelementStart(3, "p"); + i0.ɵɵelement(4, "ngx-skeleton-loader", 84); + i0.ɵɵelement(5, "ngx-skeleton-loader", 71); + i0.ɵɵelement(6, "ngx-skeleton-loader", 71); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(22, "p"); - i0.ɵɵelementStart(23, "strong"); - i0.ɵɵtext(24, "Additional requirements:"); + i0.ɵɵelement(7, "ngx-skeleton-loader", 85); + i0.ɵɵelement(8, "ngx-skeleton-loader", 76); i0.ɵɵelementEnd(); - i0.ɵɵtext(25); + } + } + + function BookingDetailsModalComponent_div_1_div_35_div_1_Template(rf, ctx) { + if (rf & 1) { + var _r60 = i0.ɵɵgetCurrentView(); + + i0.ɵɵelementStart(0, "div"); + i0.ɵɵelementStart(1, "div", 65); + i0.ɵɵelementStart(2, "h2"); + i0.ɵɵtext(3, " Catering "); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(26, BookingDetailsModalComponent_div_26_p_26_Template, 2, 0, "p", 9); - i0.ɵɵelementStart(27, "button", 57); - i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_26_Template_button_click_27_listener() { - i0.ɵɵrestoreView(_r56); - var ctx_r55 = i0.ɵɵnextContext(); - return ctx_r55.toggleUpdateView(); + i0.ɵɵelementStart(4, "button", 73); + i0.ɵɵlistener("click", function BookingDetailsModalComponent_div_1_div_35_div_1_Template_button_click_4_listener() { + i0.ɵɵrestoreView(_r60); + var ctx_r59 = i0.ɵɵnextContext(3); + return ctx_r59.addCatering(); }); - i0.ɵɵtext(28, " Update details "); + i0.ɵɵelement(5, "img", 67); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(6, "span"); + i0.ɵɵtext(7, "Catering available for this room"); i0.ɵɵelementEnd(); + i0.ɵɵelementStart(8, "div", 87); + i0.ɵɵelement(9, "catering-order-table", 88); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(29, BookingDetailsModalComponent_div_26_div_29_Template, 9, 2, "div", 9); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r15 = i0.ɵɵnextContext(); - i0.ɵɵadvance(8); - i0.ɵɵtextInterpolate1(" ", ctx_r15.host, ""); - i0.ɵɵadvance(4); - i0.ɵɵtextInterpolate1(" ", ctx_r15.attendeesString, ""); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx_r15.companyString); - i0.ɵɵadvance(4); - i0.ɵɵtextInterpolate1(" ", ctx_r15.chargeCode, ""); + var ctx_r57 = i0.ɵɵnextContext(3); i0.ɵɵadvance(4); - i0.ɵɵtextInterpolate1(" ", ctx_r15.headcount, ""); - i0.ɵɵadvance(4); - i0.ɵɵtextInterpolate1(" ", ctx_r15.requirements, ""); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx_r15.opt_out); - i0.ɵɵadvance(1); - i0.ɵɵproperty("disabled", ctx_r15.disableUpdateDetailsButton || ctx_r15.isMultiroomBooking); - i0.ɵɵadvance(2); - i0.ɵɵproperty("ngIf", ctx_r15.roomHasCatering); + i0.ɵɵproperty("disabled", ctx_r57.disableCateringButton || ctx_r57.isMultiroomBooking); + i0.ɵɵadvance(5); + i0.ɵɵproperty("booking", ctx_r57._data == null ? null : ctx_r57._data.booking); } } - function BookingDetailsModalComponent_div_27_div_10_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_div_35_div_2_div_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div"); i0.ɵɵelementStart(1, "h2"); - i0.ɵɵelement(2, "ngx-skeleton-loader", 69); + i0.ɵɵelement(2, "ngx-skeleton-loader", 76); i0.ɵɵelementEnd(); i0.ɵɵelementStart(3, "h3"); - i0.ɵɵelement(4, "ngx-skeleton-loader", 63); + i0.ɵɵelement(4, "ngx-skeleton-loader", 69); i0.ɵɵelementEnd(); - i0.ɵɵelement(5, "ngx-skeleton-loader", 65); + i0.ɵɵelement(5, "ngx-skeleton-loader", 71); i0.ɵɵelementEnd(); } } - function BookingDetailsModalComponent_div_27_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_div_35_div_2_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 16); - i0.ɵɵelementStart(1, "div"); - i0.ɵɵelementStart(2, "h2"); - i0.ɵɵelement(3, "ngx-skeleton-loader", 69); - i0.ɵɵelementEnd(); - i0.ɵɵelement(4, "ngx-skeleton-loader", 73); - i0.ɵɵelement(5, "ngx-skeleton-loader", 64); - i0.ɵɵelement(6, "ngx-skeleton-loader", 65); - i0.ɵɵelement(7, "ngx-skeleton-loader", 74); - i0.ɵɵelement(8, "ngx-skeleton-loader", 73); - i0.ɵɵelement(9, "ngx-skeleton-loader", 65); + i0.ɵɵelementStart(0, "div"); + i0.ɵɵtemplate(1, BookingDetailsModalComponent_div_1_div_35_div_2_div_1_Template, 6, 0, "div", 1); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(10, BookingDetailsModalComponent_div_27_div_10_Template, 6, 0, "div", 9); + } + + if (rf & 2) { + var ctx_r58 = i0.ɵɵnextContext(3); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", !ctx_r58.roomHasCatering); + } + } + + function BookingDetailsModalComponent_div_1_div_35_Template(rf, ctx) { + if (rf & 1) { + i0.ɵɵelementStart(0, "div", 86); + i0.ɵɵtemplate(1, BookingDetailsModalComponent_div_1_div_35_div_1_Template, 10, 2, "div", 1); + i0.ɵɵtemplate(2, BookingDetailsModalComponent_div_1_div_35_div_2_Template, 2, 1, "div", 1); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r16 = i0.ɵɵnextContext(); - i0.ɵɵadvance(10); - i0.ɵɵproperty("ngIf", ctx_r16.roomHasCatering); + var ctx_r21 = i0.ɵɵnextContext(2); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", !ctx_r21.loading); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r21.loading); } } - function BookingDetailsModalComponent_div_28_mck_modal_button_row_2_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_div_36_mck_modal_button_row_2_Template(rf, ctx) { if (rf & 1) { - var _r61 = i0.ɵɵgetCurrentView(); + var _r65 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "mck-modal-button-row", 78); - i0.ɵɵlistener("primarySubmit", function BookingDetailsModalComponent_div_28_mck_modal_button_row_2_Template_mck_modal_button_row_primarySubmit_0_listener() { - i0.ɵɵrestoreView(_r61); - var ctx_r60 = i0.ɵɵnextContext(2); - return ctx_r60.close(); + i0.ɵɵelementStart(0, "mck-modal-button-row", 92); + i0.ɵɵlistener("primarySubmit", function BookingDetailsModalComponent_div_1_div_36_mck_modal_button_row_2_Template_mck_modal_button_row_primarySubmit_0_listener() { + i0.ɵɵrestoreView(_r65); + var ctx_r64 = i0.ɵɵnextContext(3); + return ctx_r64.close(); }); i0.ɵɵelementEnd(); } } - function BookingDetailsModalComponent_div_28_ngx_skeleton_loader_3_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_div_36_ngx_skeleton_loader_3_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelement(0, "ngx-skeleton-loader", 55); + i0.ɵɵelement(0, "ngx-skeleton-loader", 82); } } - function BookingDetailsModalComponent_div_28_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_div_36_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 75); + i0.ɵɵelementStart(0, "div", 89); i0.ɵɵelementStart(1, "mat-dialog-actions"); - i0.ɵɵtemplate(2, BookingDetailsModalComponent_div_28_mck_modal_button_row_2_Template, 1, 0, "mck-modal-button-row", 76); - i0.ɵɵtemplate(3, BookingDetailsModalComponent_div_28_ngx_skeleton_loader_3_Template, 1, 0, "ngx-skeleton-loader", 77); + i0.ɵɵtemplate(2, BookingDetailsModalComponent_div_1_div_36_mck_modal_button_row_2_Template, 1, 0, "mck-modal-button-row", 90); + i0.ɵɵtemplate(3, BookingDetailsModalComponent_div_1_div_36_ngx_skeleton_loader_3_Template, 1, 0, "ngx-skeleton-loader", 91); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r17 = i0.ɵɵnextContext(); + var ctx_r22 = i0.ɵɵnextContext(2); i0.ɵɵadvance(2); - i0.ɵɵproperty("ngIf", !ctx_r17.loading); + i0.ɵɵproperty("ngIf", !ctx_r22.loading); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx_r17.loading); + i0.ɵɵproperty("ngIf", ctx_r22.loading); } } - function BookingDetailsModalComponent_room_availability_preview_29_Template(rf, ctx) { + function BookingDetailsModalComponent_div_1_Template(rf, ctx) { if (rf & 1) { - var _r63 = i0.ɵɵgetCurrentView(); - - i0.ɵɵelementStart(0, "room-availability-preview", 79); - i0.ɵɵlistener("handleExpand", function BookingDetailsModalComponent_room_availability_preview_29_Template_room_availability_preview_handleExpand_0_listener() { - i0.ɵɵrestoreView(_r63); - var ctx_r62 = i0.ɵɵnextContext(); - return ctx_r62.handleClose(true); - })("updateCalendarWeekView", function BookingDetailsModalComponent_room_availability_preview_29_Template_room_availability_preview_updateCalendarWeekView_0_listener($event) { - i0.ɵɵrestoreView(_r63); - var ctx_r64 = i0.ɵɵnextContext(); - return ctx_r64.updateCalendarWeekView($event); - })("confirmChanges", function BookingDetailsModalComponent_room_availability_preview_29_Template_room_availability_preview_confirmChanges_0_listener($event) { - i0.ɵɵrestoreView(_r63); - var ctx_r65 = i0.ɵɵnextContext(); - return ctx_r65.confirmChanges($event); - }); + i0.ɵɵelementStart(0, "div"); + i0.ɵɵtemplate(1, BookingDetailsModalComponent_div_1_div_1_Template, 2, 0, "div", 2); + i0.ɵɵtemplate(2, BookingDetailsModalComponent_div_1_div_2_Template, 5, 0, "div", 3); + i0.ɵɵtemplate(3, BookingDetailsModalComponent_div_1_div_3_Template, 5, 1, "div", 4); + i0.ɵɵelementStart(4, "mck-modal", 5); + i0.ɵɵelementStart(5, "div", 6); + i0.ɵɵtemplate(6, BookingDetailsModalComponent_div_1_div_6_Template, 17, 9, "div", 7); + i0.ɵɵtemplate(7, BookingDetailsModalComponent_div_1_div_7_Template, 7, 4, "div", 8); + i0.ɵɵtemplate(8, BookingDetailsModalComponent_div_1_div_8_Template, 5, 0, "div", 9); + i0.ɵɵtemplate(9, BookingDetailsModalComponent_div_1_div_9_Template, 3, 0, "div", 1); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(10, "div", 10); + i0.ɵɵelementStart(11, "div", 11); + i0.ɵɵelementStart(12, "div", 12); + i0.ɵɵelementStart(13, "div", 13); + i0.ɵɵtext(14); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(15, "div", 14); + i0.ɵɵtext(16); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(17, "div", 14); + i0.ɵɵtext(18); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(19, "div", 15); + i0.ɵɵelementStart(20, "div"); + i0.ɵɵtemplate(21, BookingDetailsModalComponent_div_1_a_21_Template, 2, 1, "a", 16); + i0.ɵɵtemplate(22, BookingDetailsModalComponent_div_1_ngx_skeleton_loader_22_Template, 1, 0, "ngx-skeleton-loader", 17); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(23, "div"); + i0.ɵɵtemplate(24, BookingDetailsModalComponent_div_1_button_24_Template, 2, 1, "button", 18); + i0.ɵɵtemplate(25, BookingDetailsModalComponent_div_1_ngx_skeleton_loader_25_Template, 1, 0, "ngx-skeleton-loader", 17); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(26, "div", 19); + i0.ɵɵelementStart(27, "div", 20); + i0.ɵɵtemplate(28, BookingDetailsModalComponent_div_1_div_28_Template, 15, 7, "div", 21); + i0.ɵɵtemplate(29, BookingDetailsModalComponent_div_1_div_29_Template, 7, 0, "div", 21); + i0.ɵɵtemplate(30, BookingDetailsModalComponent_div_1_div_30_Template, 34, 9, "div", 22); + i0.ɵɵtemplate(31, BookingDetailsModalComponent_div_1_div_31_Template, 10, 0, "div", 1); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(32, "div", 20); + i0.ɵɵtemplate(33, BookingDetailsModalComponent_div_1_div_33_Template, 4, 8, "div", 23); + i0.ɵɵtemplate(34, BookingDetailsModalComponent_div_1_div_34_Template, 9, 0, "div", 1); + i0.ɵɵtemplate(35, BookingDetailsModalComponent_div_1_div_35_Template, 3, 2, "div", 24); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵtemplate(36, BookingDetailsModalComponent_div_1_div_36_Template, 4, 2, "div", 25); + i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r18 = i0.ɵɵnextContext(); - i0.ɵɵproperty("dateTz", ctx_r18._data == null ? null : ctx_r18._data.booking == null ? null : ctx_r18._data.booking.startDateTz)("alternativeWeekStartDateTz", ctx_r18.alternativeWeekStartDateTz)("duration", ctx_r18._data == null ? null : ctx_r18._data.booking == null ? null : ctx_r18._data.booking.duration)("currentBooking", ctx_r18._data.booking)("bookings", ctx_r18.byIdResults.value)("bookingId", ctx_r18._data == null ? null : ctx_r18._data.booking == null ? null : ctx_r18._data.booking.id)("building", ctx_r18._data.booking.room.building)("level", ctx_r18._data == null ? null : ctx_r18._data.booking == null ? null : ctx_r18._data.booking.space == null ? null : ctx_r18._data.booking.space.level)("space", ctx_r18._data == null ? null : ctx_r18._data.booking == null ? null : ctx_r18._data.booking.space)("expanded", ctx_r18.expandedAvailability)("currentUser", ctx_r18.currentUser); + var ctx_r0 = i0.ɵɵnextContext(); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r0._data.hasLoaderUrl); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r0.showInfoBanner); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r0.showWarningBanner); + i0.ɵɵadvance(3); + i0.ɵɵproperty("ngIf", ctx_r0.isRecurrentBooking && !ctx_r0.disableCancelButton); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", !ctx_r0.loading); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r0.isMultiroomBooking); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r0.loading); + i0.ɵɵadvance(5); + i0.ɵɵtextInterpolate1(" ", ctx_r0.roomName, " "); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate1(" ", ctx_r0.roomLocation, " "); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate1(" Capacity: ", ctx_r0.capacity, " "); + i0.ɵɵadvance(3); + i0.ɵɵproperty("ngIf", !ctx_r0.loading); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r0.loading); + i0.ɵɵadvance(2); + i0.ɵɵproperty("ngIf", !ctx_r0.loading && !ctx_r0.disableCancelButton); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r0.loading); + i0.ɵɵadvance(3); + i0.ɵɵproperty("ngIf", !ctx_r0.loading); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r0.loading); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", !ctx_r0.loading); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r0.loading); + i0.ɵɵadvance(2); + i0.ɵɵproperty("ngIf", !ctx_r0.loading); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r0.loading); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r0.roomHasCatering); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", !ctx_r0.expandedAvailability); } } - function BookingDetailsModalComponent_div_30_app_booking_edit_1_Template(rf, ctx) { + function BookingDetailsModalComponent_div_2_app_booking_edit_3_Template(rf, ctx) { if (rf & 1) { var _r69 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "app-booking-edit", 81); - i0.ɵɵlistener("closeCallback", function BookingDetailsModalComponent_div_30_app_booking_edit_1_Template_app_booking_edit_closeCallback_0_listener($event) { + i0.ɵɵelementStart(0, "app-booking-edit", 94); + i0.ɵɵlistener("closeCallback", function BookingDetailsModalComponent_div_2_app_booking_edit_3_Template_app_booking_edit_closeCallback_0_listener($event) { i0.ɵɵrestoreView(_r69); var ctx_r68 = i0.ɵɵnextContext(2); return ctx_r68.toggleUpdateView($event); - })("updateCallback", function BookingDetailsModalComponent_div_30_app_booking_edit_1_Template_app_booking_edit_updateCallback_0_listener($event) { + })("updateCallback", function BookingDetailsModalComponent_div_2_app_booking_edit_3_Template_app_booking_edit_updateCallback_0_listener($event) { i0.ɵɵrestoreView(_r69); var ctx_r70 = i0.ɵɵnextContext(2); return ctx_r70.updateBookingState($event); @@ -53297,56 +54245,94 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (rf & 2) { var ctx_r66 = i0.ɵɵnextContext(2); - i0.ɵɵproperty("booking", ctx_r66._data == null ? null : ctx_r66._data.booking); + i0.ɵɵproperty("booking", ctx_r66._data == null ? null : ctx_r66._data.booking)("placeIntoModal", true); } } - function BookingDetailsModalComponent_div_30_ngx_skeleton_loader_2_Template(rf, ctx) { + function BookingDetailsModalComponent_div_2_ngx_skeleton_loader_4_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelement(0, "ngx-skeleton-loader", 49); + i0.ɵɵelement(0, "ngx-skeleton-loader", 55); } } - function BookingDetailsModalComponent_div_30_Template(rf, ctx) { + function BookingDetailsModalComponent_div_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div"); - i0.ɵɵtemplate(1, BookingDetailsModalComponent_div_30_app_booking_edit_1_Template, 1, 1, "app-booking-edit", 80); - i0.ɵɵtemplate(2, BookingDetailsModalComponent_div_30_ngx_skeleton_loader_2_Template, 1, 0, "ngx-skeleton-loader", 13); + i0.ɵɵelementStart(1, "mck-modal"); + i0.ɵɵelementStart(2, "div"); + i0.ɵɵtemplate(3, BookingDetailsModalComponent_div_2_app_booking_edit_3_Template, 1, 2, "app-booking-edit", 93); + i0.ɵɵtemplate(4, BookingDetailsModalComponent_div_2_ngx_skeleton_loader_4_Template, 1, 0, "ngx-skeleton-loader", 17); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r19 = i0.ɵɵnextContext(); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", !ctx_r19.loading); + var ctx_r1 = i0.ɵɵnextContext(); + i0.ɵɵadvance(3); + i0.ɵɵproperty("ngIf", !ctx_r1.loading); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx_r19.loading); + i0.ɵɵproperty("ngIf", ctx_r1.loading); } } - function BookingDetailsModalComponent_div_31_Template(rf, ctx) { + function BookingDetailsModalComponent_div_3_Template(rf, ctx) { if (rf & 1) { var _r72 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "div"); - i0.ɵɵelementStart(1, "booking-catering", 82); - i0.ɵɵlistener("event", function BookingDetailsModalComponent_div_31_Template_booking_catering_event_1_listener($event) { + i0.ɵɵelementStart(1, "room-availability-preview", 95); + i0.ɵɵlistener("handleExpand", function BookingDetailsModalComponent_div_3_Template_room_availability_preview_handleExpand_1_listener() { i0.ɵɵrestoreView(_r72); var ctx_r71 = i0.ɵɵnextContext(); - return ctx_r71.saveBookingWithCatering($event); - })("showCatering", function BookingDetailsModalComponent_div_31_Template_booking_catering_showCatering_1_listener() { + return ctx_r71.handleClose(true); + })("updateCalendarWeekView", function BookingDetailsModalComponent_div_3_Template_room_availability_preview_updateCalendarWeekView_1_listener($event) { i0.ɵɵrestoreView(_r72); var ctx_r73 = i0.ɵɵnextContext(); - return ctx_r73.addCatering(); + return ctx_r73.updateCalendarWeekView($event); + })("confirmChanges", function BookingDetailsModalComponent_div_3_Template_room_availability_preview_confirmChanges_1_listener($event) { + i0.ɵɵrestoreView(_r72); + var ctx_r74 = i0.ɵɵnextContext(); + return ctx_r74.confirmChanges($event); }); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r20 = i0.ɵɵnextContext(); + var ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵadvance(1); - i0.ɵɵproperty("form", ctx_r20.form)("isOccurence", true)("booking", ctx_r20._data == null ? null : ctx_r20._data.booking); + i0.ɵɵproperty("dateTz", ctx_r2._data == null ? null : ctx_r2._data.booking == null ? null : ctx_r2._data.booking.startDateTz)("alternativeWeekStartDateTz", ctx_r2.alternativeWeekStartDateTz)("duration", ctx_r2._data == null ? null : ctx_r2._data.booking == null ? null : ctx_r2._data.booking.duration)("currentBooking", ctx_r2._data.booking)("bookings", ctx_r2.byIdResults.value)("bookingId", ctx_r2._data == null ? null : ctx_r2._data.booking == null ? null : ctx_r2._data.booking.id)("building", ctx_r2._data.booking.room.building)("level", ctx_r2._data == null ? null : ctx_r2._data.booking == null ? null : ctx_r2._data.booking.space == null ? null : ctx_r2._data.booking.space.level)("space", ctx_r2._data == null ? null : ctx_r2._data.booking == null ? null : ctx_r2._data.booking.space)("expanded", ctx_r2.expandedAvailability)("currentUser", ctx_r2.currentUser)("placeIntoModal", true); + } + } + + function BookingDetailsModalComponent_div_4_Template(rf, ctx) { + if (rf & 1) { + var _r76 = i0.ɵɵgetCurrentView(); + + i0.ɵɵelementStart(0, "div"); + i0.ɵɵelementStart(1, "mck-modal"); + i0.ɵɵelementStart(2, "div"); + i0.ɵɵelementStart(3, "booking-catering", 96); + i0.ɵɵlistener("event", function BookingDetailsModalComponent_div_4_Template_booking_catering_event_3_listener($event) { + i0.ɵɵrestoreView(_r76); + var ctx_r75 = i0.ɵɵnextContext(); + return ctx_r75.saveBookingWithCatering($event); + })("showCatering", function BookingDetailsModalComponent_div_4_Template_booking_catering_showCatering_3_listener() { + i0.ɵɵrestoreView(_r76); + var ctx_r77 = i0.ɵɵnextContext(); + return ctx_r77.addCatering(); + }); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + } + + if (rf & 2) { + var ctx_r3 = i0.ɵɵnextContext(); + i0.ɵɵadvance(3); + i0.ɵɵproperty("form", ctx_r3.form)("isOccurence", true)("booking", ctx_r3._data == null ? null : ctx_r3._data.booking)("placeIntoModal", true); } } @@ -53488,7 +54474,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons _this212.buildings = next; !_this212.showDetails && _this212.dispatchToGetFloorCurrentStatus(_this212._data.booking); })); - } + } // public get isCateringAdded() + }, { key: "formatDeliveryTime", value: function formatDeliveryTime(order) { @@ -54284,107 +55271,32 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons type: BookingDetailsModalComponent, selectors: [["app-booking-details-modal"]], features: [i0.ɵɵInheritDefinitionFeature], - decls: 32, - vars: 25, - consts: [[1, "booking-details"], ["class", "modal_mask", 4, "ngIf"], ["class", "fixed info banner", 4, "ngIf"], ["class", "fixed warning banner", 4, "ngIf"], ["header", ""], [1, "header"], ["class", "reccuring-banner", 4, "ngIf"], ["class", "status", 3, "ngClass", 4, "ngIf"], ["class", "blue-banner", 4, "ngIf"], [4, "ngIf"], [1, "detail-body"], [1, "status-cta-block"], ["type", "button", "mat-stroked-button", "", "class", "mck-secondary-button mck-modal-secondary-button", "target", "email", 3, "href", 4, "ngIf"], ["class", "mck-skeleton-load-more-100p", 4, "ngIf"], ["mat-stroked-button", "", "class", "mck-secondary-button mck-modal-secondary-button", 3, "disabled", "click", 4, "ngIf"], [1, "v-panels"], [1, "v-panel"], ["class", "v-panel", 4, "ngIf"], ["class", "booking-details-modal-actions", 4, "ngIf"], [3, "dateTz", "alternativeWeekStartDateTz", "duration", "currentBooking", "bookings", "bookingId", "building", "level", "space", "expanded", "currentUser", "handleExpand", "updateCalendarWeekView", "confirmChanges", 4, "ngIf"], [1, "modal_mask"], [1, "fixed", "info", "banner"], ["src", "assets/icon/info-bg-blue.svg"], [1, "banner-text"], ["src", "assets/icon/close-blue.svg", 3, "click"], [1, "fixed", "warning", "banner"], ["src", "assets/icon/booking_cancelled.svg"], ["src", "assets/icon/close-red.svg", 3, "click"], [1, "reccuring-banner"], [1, "flex-column", "status-info"], [1, "flex-row", "status-head"], [3, "src"], [1, "recurring-status"], [1, "flex-row"], ["src", "assets/icon/recurring-data-icon.svg", 1, "recurring-info-icon"], [1, "banner-info-txt", 3, "ngSwitch"], [3, "ngSwitchCase"], ["ngSwitchDefault", ""], [1, "flex-column"], ["mat-stroked-button", "", "class", "mck-secondary-button mck-modal-secondary-button edit-recrring-cta", 3, "disabled", "click", 4, "ngIf"], ["mat-stroked-button", "", "class", "mck-secondary-button mck-modal-secondary-button", 3, "click", 4, "ngIf"], [1, "spcific-date-toggle", 3, "click"], ["class", "hint", 4, "ngIf"], [1, "hint"], [1, "triangle"], [1, "hint-wrapper"], [4, "ngFor", "ngForOf"], ["mat-stroked-button", "", 1, "mck-secondary-button", "mck-modal-secondary-button", "edit-recrring-cta", 3, "disabled", "click"], ["mat-stroked-button", "", 1, "mck-secondary-button", "mck-modal-secondary-button", 3, "click"], [1, "mck-skeleton-load-more-100p"], [1, "status", 3, "ngClass"], [1, "flex-row", "flex-space-between"], [1, "blue-banner"], ["src", "assets/icon/info-icon.svg"], [1, "mck-skeleton-header"], [1, "mck-skeleton-load-more"], ["type", "button", "mat-stroked-button", "", "target", "email", 1, "mck-secondary-button", "mck-modal-secondary-button", 3, "href"], ["mat-stroked-button", "", 1, "mck-secondary-button", "mck-modal-secondary-button", 3, "disabled", "click"], ["src", "assets/icon/location-pin.svg"], ["mat-stroked-button", "", 1, "mck-secondary-button", "mck-modal-secondary-button", "cancel-button", 3, "disabled", "click"], [1, "room-map"], ["viewMode", "booking_preview", 3, "mapUrl", "focus", "expanded", "building", "level", "space", "mode", "handleExpand"], ["type", "image", "src", "assets/icon/expand-button.svg", 1, "zoom", 3, "click"], [1, "mck-skeleton-line-70p-thick"], [1, "mck-skeleton-line-70p-thin"], [1, "mck-skeleton-line-50p-thin"], [1, "mck-skeleton-line-80p-thin"], [1, "mck-skeleton-line-30p-thin"], [1, "mck-skeleton-room-availability"], [1, "mck-skeleton-line-50p-thick"], ["src", "assets/icon/details-note.svg"], ["src", "assets/icon/catering.svg"], [3, "booking"], [1, "mck-skeleton-line-45p-thin"], [1, "mck-skeleton-line-60p-thin"], [1, "booking-details-modal-actions"], ["primaryLabel", "Close", 3, "primarySubmit", 4, "ngIf"], ["class", "mck-skeleton-load-more", 4, "ngIf"], ["primaryLabel", "Close", 3, "primarySubmit"], [3, "dateTz", "alternativeWeekStartDateTz", "duration", "currentBooking", "bookings", "bookingId", "building", "level", "space", "expanded", "currentUser", "handleExpand", "updateCalendarWeekView", "confirmChanges"], [3, "booking", "closeCallback", "updateCallback", 4, "ngIf"], [3, "booking", "closeCallback", "updateCallback"], [3, "form", "isOccurence", "booking", "event", "showCatering"]], + decls: 5, + vars: 4, + consts: [[1, "booking-details"], [4, "ngIf"], ["class", "modal_mask", 4, "ngIf"], ["class", "fixed info banner", 4, "ngIf"], ["class", "fixed warning banner", 4, "ngIf"], ["header", ""], [1, "header"], ["class", "reccuring-banner", 4, "ngIf"], ["class", "status", 3, "ngClass", 4, "ngIf"], ["class", "blue-banner", 4, "ngIf"], [1, "detail-body", "flex-column"], [1, "flex-row", "room-cta-block"], [1, "flex-column", "room-address"], [1, "name"], [1, "address-details"], [1, "flex-row", "cta-block"], ["type", "button", "mat-stroked-button", "", "class", "mck-secondary-button mck-modal-secondary-button", "target", "email", 3, "href", 4, "ngIf"], ["class", "mck-skeleton-load-more-100p", 4, "ngIf"], ["mat-stroked-button", "", "class", "mck-secondary-button mck-modal-secondary-button", 3, "disabled", "click", 4, "ngIf"], [1, "v-panels"], [1, "v-panel"], ["class", "schedule", 4, "ngIf"], ["class", "meeting-box", 4, "ngIf"], ["class", "room-map", 4, "ngIf"], ["class", "room-has-catering", 4, "ngIf"], ["class", "booking-details-modal-actions", 4, "ngIf"], [1, "modal_mask"], [1, "fixed", "info", "banner"], ["src", "assets/icon/info-bg-blue.svg"], [1, "banner-text"], ["src", "assets/icon/close-blue.svg", 3, "click"], [1, "fixed", "warning", "banner"], ["src", "assets/icon/booking_cancelled.svg"], ["src", "assets/icon/close-red.svg", 3, "click"], [1, "reccuring-banner"], [1, "flex-column", "status-info"], [1, "flex-row", "status-head"], [3, "src"], [1, "recurring-status"], [1, "flex-row"], ["src", "assets/icon/recurring-data-icon.svg", 1, "recurring-info-icon"], [1, "banner-info-txt", 3, "ngSwitch"], [3, "ngSwitchCase"], ["ngSwitchDefault", ""], [1, "flex-column"], ["mat-stroked-button", "", "class", "mck-secondary-button mck-modal-secondary-button edit-recrring-cta", 3, "disabled", "click", 4, "ngIf"], ["mat-stroked-button", "", "class", "mck-secondary-button mck-modal-secondary-button", 3, "click", 4, "ngIf"], [1, "spcific-date-toggle", 3, "click"], ["class", "hint", 4, "ngIf"], [1, "hint"], [1, "triangle"], [1, "hint-wrapper"], [4, "ngFor", "ngForOf"], ["mat-stroked-button", "", 1, "mck-secondary-button", "mck-modal-secondary-button", "edit-recrring-cta", 3, "disabled", "click"], ["mat-stroked-button", "", 1, "mck-secondary-button", "mck-modal-secondary-button", 3, "click"], [1, "mck-skeleton-load-more-100p"], [1, "status", 3, "ngClass"], [1, "flex-row", "flex-space-between"], [1, "blue-banner"], ["src", "assets/icon/info-icon.svg"], [1, "mck-skeleton-header"], ["type", "button", "mat-stroked-button", "", "target", "email", 1, "mck-secondary-button", "mck-modal-secondary-button", 3, "href"], ["mat-stroked-button", "", 1, "mck-secondary-button", "mck-modal-secondary-button", 3, "disabled", "click"], [1, "schedule"], [1, "flex-column", "box"], [1, "flex-row", "height-58"], ["mat-stroked-button", "", 1, "mck-secondary-button", "mck-modal-secondary-button", "cancel-button", 3, "disabled", "click"], ["src", "assets/icon/pen-01-MB-view-details.svg"], ["mat-stroked-button", "", 1, "mck-secondary-button", "mck-modal-secondary-button", "cancel-button", "cta", 3, "disabled", "click"], [1, "mck-skeleton-line-70p-thick"], [1, "mck-skeleton-line-70p-thin"], [1, "mck-skeleton-line-50p-thin"], [1, "meeting-box"], ["mat-stroked-button", "", 1, "mck-secondary-button", "mck-modal-secondary-button", "flex-row-end", 3, "disabled", "click"], [1, "flex-column", "content"], [1, "mv-label"], [1, "mck-skeleton-line-50p-thick"], [1, "mck-skeleton-line-45p-thin"], [1, "mck-skeleton-line-60p-thin"], [1, "room-map"], ["viewMode", "booking_preview", 3, "mapUrl", "focus", "expanded", "building", "level", "space", "mode", "handleExpand"], ["type", "image", "src", "assets/icon/expand-button.svg", 1, "zoom", 3, "click"], [1, "mck-skeleton-load-more"], [1, "mck-skeleton-line-80p-thin"], [1, "mck-skeleton-line-30p-thin"], [1, "mck-skeleton-room-availability"], [1, "room-has-catering"], [1, "catering-table"], [3, "booking"], [1, "booking-details-modal-actions"], ["primaryLabel", "Close", 3, "primarySubmit", 4, "ngIf"], ["class", "mck-skeleton-load-more", 4, "ngIf"], ["primaryLabel", "Close", 3, "primarySubmit"], [3, "booking", "placeIntoModal", "closeCallback", "updateCallback", 4, "ngIf"], [3, "booking", "placeIntoModal", "closeCallback", "updateCallback"], [3, "dateTz", "alternativeWeekStartDateTz", "duration", "currentBooking", "bookings", "bookingId", "building", "level", "space", "expanded", "currentUser", "placeIntoModal", "handleExpand", "updateCalendarWeekView", "confirmChanges"], [3, "form", "isOccurence", "booking", "placeIntoModal", "event", "showCatering"]], template: function BookingDetailsModalComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 0); - i0.ɵɵtemplate(1, BookingDetailsModalComponent_div_1_Template, 2, 0, "div", 1); - i0.ɵɵtemplate(2, BookingDetailsModalComponent_div_2_Template, 5, 0, "div", 2); - i0.ɵɵtemplate(3, BookingDetailsModalComponent_div_3_Template, 5, 1, "div", 3); - i0.ɵɵelementStart(4, "mck-modal", 4); - i0.ɵɵelementStart(5, "div", 5); - i0.ɵɵtemplate(6, BookingDetailsModalComponent_div_6_Template, 17, 9, "div", 6); - i0.ɵɵtemplate(7, BookingDetailsModalComponent_div_7_Template, 7, 4, "div", 7); - i0.ɵɵtemplate(8, BookingDetailsModalComponent_div_8_Template, 5, 0, "div", 8); - i0.ɵɵtemplate(9, BookingDetailsModalComponent_div_9_Template, 3, 0, "div", 9); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(10, "div", 10); - i0.ɵɵelementStart(11, "div", 11); - i0.ɵɵelementStart(12, "div"); - i0.ɵɵtemplate(13, BookingDetailsModalComponent_h1_13_Template, 2, 1, "h1", 9); - i0.ɵɵtemplate(14, BookingDetailsModalComponent_h1_14_Template, 2, 0, "h1", 9); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(15, "div"); - i0.ɵɵelementStart(16, "div"); - i0.ɵɵtemplate(17, BookingDetailsModalComponent_a_17_Template, 2, 1, "a", 12); - i0.ɵɵtemplate(18, BookingDetailsModalComponent_ngx_skeleton_loader_18_Template, 1, 0, "ngx-skeleton-loader", 13); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(19, "div"); - i0.ɵɵtemplate(20, BookingDetailsModalComponent_button_20_Template, 2, 1, "button", 14); - i0.ɵɵtemplate(21, BookingDetailsModalComponent_ngx_skeleton_loader_21_Template, 1, 0, "ngx-skeleton-loader", 13); + i0.ɵɵtemplate(1, BookingDetailsModalComponent_div_1_Template, 37, 22, "div", 1); + i0.ɵɵtemplate(2, BookingDetailsModalComponent_div_2_Template, 5, 2, "div", 1); + i0.ɵɵtemplate(3, BookingDetailsModalComponent_div_3_Template, 2, 12, "div", 1); + i0.ɵɵtemplate(4, BookingDetailsModalComponent_div_4_Template, 4, 4, "div", 1); i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(22, "div", 15); - i0.ɵɵelementStart(23, "div", 16); - i0.ɵɵtemplate(24, BookingDetailsModalComponent_div_24_Template, 23, 19, "div", 9); - i0.ɵɵtemplate(25, BookingDetailsModalComponent_div_25_Template, 15, 0, "div", 9); - i0.ɵɵelementEnd(); - i0.ɵɵtemplate(26, BookingDetailsModalComponent_div_26_Template, 30, 9, "div", 17); - i0.ɵɵtemplate(27, BookingDetailsModalComponent_div_27_Template, 11, 1, "div", 17); - i0.ɵɵelementEnd(); - i0.ɵɵtemplate(28, BookingDetailsModalComponent_div_28_Template, 4, 2, "div", 18); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵtemplate(29, BookingDetailsModalComponent_room_availability_preview_29_Template, 1, 11, "room-availability-preview", 19); - i0.ɵɵtemplate(30, BookingDetailsModalComponent_div_30_Template, 3, 2, "div", 9); - i0.ɵɵtemplate(31, BookingDetailsModalComponent_div_31_Template, 2, 3, "div", 9); } if (rf & 2) { i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx._data.hasLoaderUrl); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.showInfoBanner); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.showWarningBanner); - i0.ɵɵadvance(2); - i0.ɵɵclassProp("is-recurring-body", ctx.isRecurrentBooking && !ctx.disableCancelButton); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.isRecurrentBooking && !ctx.disableCancelButton); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", !ctx.loading); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.isMultiroomBooking); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.loading); - i0.ɵɵadvance(1); - i0.ɵɵclassProp("is-recurring-body", ctx.isRecurrentBooking && !ctx.disableCancelButton); - i0.ɵɵadvance(3); - i0.ɵɵproperty("ngIf", !ctx.loading); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.loading); - i0.ɵɵadvance(3); - i0.ɵɵproperty("ngIf", !ctx.loading); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.loading); - i0.ɵɵadvance(2); - i0.ɵɵproperty("ngIf", !ctx.loading && !ctx.disableCancelButton); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.loading); - i0.ɵɵadvance(3); - i0.ɵɵproperty("ngIf", !ctx.loading); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.loading); + i0.ɵɵproperty("ngIf", !ctx.showDetails && !ctx.expandedAvailability && !ctx.showCatering); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", !ctx.loading); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.loading); - i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", !ctx.expandedAvailability); + i0.ɵɵproperty("ngIf", ctx.showDetails); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.expandedAvailability); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx.showDetails); - i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.showCatering); } }, - directives: [i5.NgIf, i6.ModalComponent, i5.NgSwitch, i5.NgSwitchCase, i5.NgSwitchDefault, i5.NgForOf, i7.MatButton, i8.NgxSkeletonLoaderComponent, i5.NgClass, i7.MatAnchor, i9.RoomLocationPreviewComponent, i10.OrderTableComponent, i2.MatDialogActions, i11.ModalButtonRowComponent, i12.RoomAvailabilityPreviewComponent, i13.BookingEditComponent, i14.BookingCateringComponent], - styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n[_nghost-%COMP%] .mat-dialog-content {\n background-color: #F8F9FA;\n overflow-y: auto;\n}\n.booking-details[_ngcontent-%COMP%] {\n position: relative;\n top: 0;\n left: 0;\n}\n.booking-details[_ngcontent-%COMP%] mck-modal[_ngcontent-%COMP%] {\n max-width: 1024px !important;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n width: 100%;\n background-color: white;\n padding: 0px 56px 20px 56px;\n border-bottom: 1px solid #E6E6E6;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n padding: 0px 0 0 0;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n padding: 0px 0 0 0;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n padding: 0px 0 0 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n padding: 0px 0 0 0;\n }\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] {\n width: 100%;\n height: 56px;\n padding: 16px 25px 16px 25px;\n justify-content: flex-start;\n font-size: 16px;\n font-weight: 500;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 24px;\n margin-right: 14px;\n vertical-align: middle;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n min-height: 125px;\n padding: 15px 25px;\n color: #000000;\n flex-direction: row;\n box-sizing: border-box;\n display: flex;\n place-content: center flex-start;\n align-items: flex-start;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] {\n flex-direction: column;\n box-sizing: border-box;\n display: flex;\n place-content: stretch flex-start;\n align-items: stretch;\n max-width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] {\n flex-direction: column;\n box-sizing: border-box;\n display: flex;\n place-content: stretch flex-start;\n align-items: stretch;\n max-width: 100%;\n }\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 24px;\n margin-right: 14px;\n vertical-align: middle;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] {\n margin-right: 100px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] {\n margin-right: 0px;\n margin-bottom: 15px;\n }\n .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .recurring-info-icon[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] {\n margin-right: 0px;\n margin-bottom: 15px;\n }\n .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .recurring-info-icon[_ngcontent-%COMP%] {\n display: none;\n }\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-head[_ngcontent-%COMP%] {\n margin-bottom: 15px;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-head[_ngcontent-%COMP%] .recurring-status[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 500;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-head[_ngcontent-%COMP%] {\n min-height: 35px;\n align-items: start;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-head[_ngcontent-%COMP%] {\n min-height: 35px;\n align-items: start;\n }\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .edit-recrring-cta[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] {\n position: relative;\n font-size: 18px;\n font-weight: 400;\n line-height: 22px;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .spcific-date-toggle[_ngcontent-%COMP%] {\n text-decoration: underline;\n cursor: pointer;\n font-weight: 500;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n width: 140px;\n background-color: black;\n color: white;\n position: absolute;\n padding: 10px;\n top: 28px;\n z-index: 2;\n font-size: calc(1em - 2px);\n font-weight: 400;\n right: 0;\n box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.2);\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n width: 100%;\n position: relative;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n width: 100%;\n position: relative;\n }\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] .triangle[_ngcontent-%COMP%] {\n position: absolute;\n top: -6px;\n left: 64px;\n width: 12px;\n height: 12px;\n background-color: black;\n transform: rotate(45deg);\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint-wrapper[_ngcontent-%COMP%] {\n max-height: 106px;\n overflow: hidden;\n overflow-y: scroll;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint-wrapper[_ngcontent-%COMP%] div[_ngcontent-%COMP%] {\n padding: 0.2em 0;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint-wrapper[_ngcontent-%COMP%] div[_ngcontent-%COMP%]:first-child {\n padding-bottom: 0;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint-wrapper[_ngcontent-%COMP%] div[_ngcontent-%COMP%]:last-child {\n padding-bottom: 0;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .blue-banner[_ngcontent-%COMP%] {\n background: #E6ECFF;\n padding: 16px;\n display: flex;\n font-weight: 500;\n align-items: flex-start;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .blue-banner[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 24px;\n margin-right: 14px;\n vertical-align: middle;\n}\n.booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .blue-banner[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: #1E32E6;\n font-size: 16px;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] {\n background-color: transparent;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 801px) and (max-width: 1024px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] {\n margin: 0;\n height: calc(100vh + 56px);\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1049px) and (max-width: 1280px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] {\n margin: 0;\n height: calc(100vh + 56px);\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] {\n margin: 0;\n height: calc(100vh - 181px);\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] {\n margin: 0;\n height: calc(100vh - 181px);\n }\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n border-bottom: 1px solid #E6E6E6;\n padding: 16px 55px;\n background: white;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] {\n padding: 16px 16px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] {\n padding: 16px 16px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] {\n padding: 16px 16px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] {\n padding: 16px 16px;\n }\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n color: #222222;\n font-family: \"Bower\";\n font-size: 24px;\n margin: 10px 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n text-align: center;\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n text-align: center;\n width: 100%;\n }\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background-color: white;\n flex: 1;\n display: flex;\n flex-wrap: wrap;\n min-width: 300px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n min-width: 100%;\n }\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n min-width: calc(100% - 32px);\n padding-left: 0 !important;\n margin-left: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n min-width: 100%;\n }\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n min-width: calc(100% - 32px);\n padding-left: 0 !important;\n margin-left: 0;\n }\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n margin: 0;\n padding-left: 20px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding: 5px 0;\n margin: 0;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding: 5px 0;\n margin: 0;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding: 5px 0;\n margin: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n padding: 5px 0;\n margin: 0;\n }\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2) button[_ngcontent-%COMP%] {\n color: #E12E40;\n border: 1px solid #E12E40;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%], .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] a[_ngcontent-%COMP%] {\n flex: 1;\n width: 202px;\n min-width: 202px;\n color: #2251FF;\n border: 1px solid #2251FF;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%], .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] a[disabled][_ngcontent-%COMP%] {\n color: #757575;\n background: #D0D0D0;\n border: 1px solid #D0D0D0;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%] > span[_ngcontent-%COMP%], .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] a[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%], .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] a[_ngcontent-%COMP%] {\n min-width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] button[_ngcontent-%COMP%], .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .status-cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] a[_ngcontent-%COMP%] {\n min-width: 100%;\n }\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n margin: 16px 55px;\n min-width: 300px;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n width: 202px;\n color: #2251FF;\n border: 1px solid #2251FF;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n min-width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n min-width: 100%;\n }\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%] {\n color: #757575;\n background: #D0D0D0;\n border: 1px solid #D0D0D0;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .requirements[_ngcontent-%COMP%] {\n color: #2251FF;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(1) {\n margin: 16px 10px 0 10px;\n }\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(2) {\n margin: 16px 10px;\n }\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(1) {\n margin: 16px 10px 0 10px;\n }\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(2) {\n margin: 16px 10px;\n }\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] {\n min-width: calc(100% - 32px);\n }\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(1) {\n margin: 16px 10px 0 10px;\n }\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(2) {\n margin: 16px 10px;\n }\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n margin-bottom: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] {\n min-width: calc(100% - 32px);\n }\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(1) {\n margin: 16px 10px 0 10px;\n }\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(2) {\n margin: 16px 10px;\n }\n .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n margin-bottom: 0;\n }\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background-color: white;\n padding: 20px;\n padding-bottom: 26px;\n border: 1px solid #E6E6E6;\n flex: 1;\n margin-bottom: 20px;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-size: 18px;\n line-height: 28px;\n margin: 14px 0px;\n font-weight: 400;\n color: #333;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] p[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 10px;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 10px;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 500;\n margin-bottom: 0;\n color: #000;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n height: 32px;\n vertical-align: middle;\n margin: 0 4px 4px 0;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 500;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .room-map[_ngcontent-%COMP%] {\n position: relative;\n}\n.booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .room-map[_ngcontent-%COMP%] .zoom[_ngcontent-%COMP%] {\n position: absolute;\n right: 20px;\n top: 20px;\n z-index: 1;\n}\n.booking-details-modal-actions[_ngcontent-%COMP%] {\n left: 0;\n bottom: 0;\n width: 100%;\n background-color: white;\n border-top: 1px solid #E6E6E6;\n position: relative;\n max-height: 121px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details-modal-actions[_ngcontent-%COMP%] {\n height: 16px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details-modal-actions[_ngcontent-%COMP%] {\n height: 16px;\n }\n}\n.booking-details-modal-actions[_ngcontent-%COMP%] .mat-dialog-actions[_ngcontent-%COMP%] {\n max-width: 220px;\n margin: 0 auto;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-details-modal-actions[_ngcontent-%COMP%] .mat-dialog-actions[_ngcontent-%COMP%] {\n padding: 5px 0;\n height: 20px;\n max-height: 20px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-details-modal-actions[_ngcontent-%COMP%] .mat-dialog-actions[_ngcontent-%COMP%] {\n padding: 5px 0;\n height: 20px;\n max-height: 20px;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWRldGFpbHMtbW9kYWwvYm9va2luZy1kZXRhaWxzLW1vZGFsLmNvbXBvbmVudC5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy91aS9zcmMvbGliL21peGlucy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvYXBwcy9zdGFmZi9zcmMvYXBwL2Jvb2tpbmcvYm9va2luZy1kZXRhaWxzLW1vZGFsL2Jvb2tpbmctZGV0YWlscy1tb2RhbC5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNoVVE7RUFDSSx5QkFBQTtFQUNBLGdCQUFBO0FGZVo7QUVUQTtFQUNJLGtCQUFBO0VBQ0EsTUFBQTtFQUNBLE9BQUE7QUZZSjtBRVhJO0VBQ0ksNEJBQUE7QUZhUjtBRVhJO0VBS0ksV0FBQTtFQUVBLHVCQUFBO0VBQ0EsMkJBQUE7RUFDQSxnQ0FBQTtBRlFSO0FDbEJRO0VDQ0o7SUFXUSxrQkFBQTtFRlVWO0FBQ0Y7QUN2QlE7RUNDSjtJQVdRLGtCQUFBO0VGZVY7QUFDRjtBQ3JDWTtFQ1VSO0lBZVEsa0JBQUE7RUZnQlY7QUFDRjtBQzFDWTtFQ1VSO0lBZVEsa0JBQUE7RUZxQlY7QUFDRjtBRWRRO0VBQ0ksV0FBQTtFQUNBLFlBQUE7RUFDQSw0QkFBQTtFQUNBLDJCQUFBO0VBQ0EsZUFBQTtFQUNBLGdCQUFBO0FGZ0JaO0FFZGdCO0VBQ0ksV0FBQTtF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Q0EsV0FBQTtBRjZIcEI7QUU1SG9CO0VBQ0ksZ0JBQUE7QUY4SHhCO0FFM0hnQjtFQUNJLGtCQUFBO0FGNkhwQjtBRTNIZ0I7RUFDSSxpQkFBQTtBRjZIcEI7QUUzSGdCO0VBQ0ksZUFBQTtFQUNBLGdCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxXQUFBO0FGNkhwQjtBRTVIb0I7RUFDSSxZQUFBO0VBQ0Esc0JBQUE7RUFDQSxtQkFBQTtBRjhIeEI7QUUzSGdCO0VBQ0ksZUFBQTtFQUNBLGdCQUFBO0FGNkhwQjtBRTNIZ0I7RUFDSSxrQkFBQTtBRjZIcEI7QUU1SG9CO0VBQ0ksa0JBQUE7RUFDQSxXQUFBO0VBQ0EsU0FBQTtFQUNBLFVBQUE7QUY4SHhCO0FFdEhBO0VBRUksT0FBQTtFQUNBLFNBQUE7RUFDQSxXQUFBO0VBQ0EsdUJBQUE7RUFDQSw2QkFBQTtFQUVBLGtCQUFBO0VBQ0EsaUJBQUE7QUZ1SEo7QUMzaEJZO0VDMlpaO0lBWU8sWUFBQTtFRndITDtBQUNGO0FDaGlCWTtFQzJaWjtJQVlPLFlBQUE7RUY2SEw7QUFDRjtBRTVISTtFQUNJLGdCQUFBO0VBQ0EsY0FBQTtBRjhIUjtBQ3ppQlk7RUN5YVI7SUFJUSxjQUFBO0lBQ0EsWUFBQTtJQUNBLGdCQUFBO0VGZ0lWO0FBQ0Y7QUNoakJZO0VDeWFSO0lBSVEsY0FBQTtJQUNBLFlBQUE7SUFDQSxnQkFBQTtFRnVJVjtBQUNGIiwiZmlsZSI6ImFwcHMvc3RhZmYvc3JjL2FwcC9ib29raW5nL2Jvb2tpbmctZGV0YWlscy1tb2RhbC9ib29raW5nLWRldGFpbHMtbW9kYWwuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIkcHJpbWFyeTogIzFGNDBFNjtcbiRmb3JtLWxhYmVsOiAjMDUxQzJDO1xuJHNlY29uZGFyeS1sYWJlbDogIzc2NzY3NjtcbiRib3JkZXI6ICNCM0IzQjM7XG4kYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDogI0QwRDBEMDtcbiRjaGlwLWNvbG9yOiAjMzMzMzMzO1xuJHBsYWNlaG9sZGVyLWNvbG9yOiAjN0Y3RjdGO1xuJGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4kcGFnZS1iYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuJHNlbGVjdGVkLW9wdGlvbjogI0U2RTZFNjtcbiRjb2xvci1icmFuZC15ZWxsb3c6ICNmZmQwNDg7XG4kbGlnaHQteWVsbG93OiAjZmZmM2NlO1xuJGNvYWNobWFyay10ZXh0OiAjNmY0ZDAwO1xuJGVycm9yLWNvbG9yOiAjRTEyRTQwO1xuJG5vLWZpbHRlcnMtY29sb3I6ICNCQ0JDQkM7XG4kcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I6ICNGNEY0RjQ7XG4kcHJpbWFyeS1oaWdobGlnaHQ6ICMyMjUxRkY7XG4kc2Nyb2xsYmFyLWNvbG9yOiAjNzU3NTc1O1xuXG4kYXZhaWxhYmxlLWNvbG9yOiAjNUQ5RDUyO1xuJGF2YWlsYWJsZS1ieS1yZXF1ZXN0LWNvbG9yOiAjRjVCNTNGO1xuJGluLXVzZS1jb2xvcjogI0Q0NDgzRTtcbiRub3QtYm9va2FibGUtY29sb3I6ICNDQ0NDQ0M7XG5cbiRtb2RhbC1ib2R5LWhlYWRpbmc6ICM0RDRENEQ7XG4kYWxlcnQtb3ZlcmxheS1iZzogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2FjaG1hcmstYmc6ICNFQkVCRjY7XG4kY29hY2htYXJrLWRhcmstdGV4dDogIzFCMUIxOTtcbiRlcnJvci10ZXh0OiAjZmZmO1xuXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuXG4vLyA0cHhcbiRzcGFjaW5nLXNtYWxsZXN0OiAwLjI1cmVtO1xuXG4vLyA4cHhcbiRzcGFjaW5nLXh4c21hbGw6IDAuNXJlbTtcblxuLy8gMTJweFxuJHNwYWNpbmcteHNtYWxsOiAwLjc1cmVtO1xuXG4vLyAxNnB4XG4kc3BhY2luZy1zbWFsbDogMXJlbTtcblxuLy8gMjBweFxuJHNwYWNpbmctc21hbGwtbWVkaXVtOiAxLjI1cmVtO1xuXG4vLyAyNHB4XG4kc3BhY2luZy1tZWRpdW06IDEuNXJlbTtcblxuLy8gMjhweFxuJHNwYWNpbmctbWVkaXVtLWxhcmdlOiAxLjc1cmVtO1xuXG4vLyAzMnB4XG4kc3BhY2luZy1sYXJnZTogMnJlbTtcblxuLy8gNDhweFxuJHNwYWNpbmcteGxhcmdlOiAzcmVtO1xuXG4vLyA2NHB4XG4kc3BhY2luZy14eGxhcmdlOiA0cmVtO1xuXG4vLyA5NnB4XG4kc3BhY2luZy1sYXJnZXN0OiA2cmVtO1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGRldmljZS1tb2JpbGUtc2l6ZTogNDUwcHg7XG4kZGV2aWNlLXRhYmxldC1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFwdG9wLXNpemU6IDEwMjRweDtcblxuJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemU6IDgwMHB4O1xuJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemU6IDEwNDhweDtcbiRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplOiAxMjgwcHg7XG5cblxuOmV4cG9ydCB7XG4gICAgcHJpbWFyeTogJHByaW1hcnk7XG4gICAgc2Vjb25kYXJ5TGFiZWw6ICRzZWNvbmRhcnktbGFiZWw7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4kaWNvbi1zbWFsbDogMTZweDtcbiRpY29uLW1lZGl1bTogMjRweDtcbiRpY29uLWxhcmdlOiAzMnB4O1xuJGljb24teGxhcmdlOiA0OHB4O1xuIiwiLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG46aG9zdCA6Om5nLWRlZXAgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG5cbi5ib29raW5nLWRldGFpbHMge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbn1cbi5ib29raW5nLWRldGFpbHMgbWNrLW1vZGFsIHtcbiAgbWF4LXdpZHRoOiAxMDI0cHggIWltcG9ydGFudDtcbn1cbi5ib29raW5nLWRldGFpbHMgLmhlYWRlciB7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcGFkZGluZzogMHB4IDU2cHggMjBweCA1NnB4O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0U2RTZFNjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIHtcbiAgICBwYWRkaW5nOiAwcHggMCAwIDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkgYW5kIChtYXgtd2lkdGg6IDEwNDhweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIge1xuICAgIHBhZGRpbmc6IDBweCAwIDAgMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIHtcbiAgICBwYWRkaW5nOiAwcHggMCAwIDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIge1xuICAgIHBhZGRpbmc6IDBweCAwIDAgMDtcbiAgfVxufVxuLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5zdGF0dXMge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiA1NnB4O1xuICBwYWRkaW5nOiAxNnB4IDI1cHggMTZweCAyNXB4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbi5ib29raW5nLWRldGFpbHMgLmhlYWRlciAuc3RhdHVzID4gZGl2IGltZyB7XG4gIHdpZHRoOiAyNHB4O1xuICBtYXJnaW4tcmlnaHQ6IDE0cHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnN0YXR1cyA+IGRpdiBwIHtcbiAgbWFyZ2luOiAwO1xufVxuLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgbWluLWhlaWdodDogMTI1cHg7XG4gIHBhZGRpbmc6IDE1cHggMjVweDtcbiAgY29sb3I6ICMwMDAwMDA7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBsYWNlLWNvbnRlbnQ6IGNlbnRlciBmbGV4LXN0YXJ0O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWRldGFpbHMgLmhlYWRlciAucmVjY3VyaW5nLWJhbm5lciB7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgcGxhY2UtY29udGVudDogc3RyZXRjaCBmbGV4LXN0YXJ0O1xuICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWRldGFpbHMgLmhlYWRlciAucmVjY3VyaW5nLWJhbm5lciB7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgcGxhY2UtY29udGVudDogc3RyZXRjaCBmbGV4LXN0YXJ0O1xuICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgfVxufVxuLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIGltZyB7XG4gIHdpZHRoOiAyNHB4O1xuICBtYXJnaW4tcmlnaHQ6IDE0cHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1pbmZvIHtcbiAgbWFyZ2luLXJpZ2h0OiAxMDBweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWRldGFpbHMgLmhlYWRlciAucmVjY3VyaW5nLWJhbm5lciAuc3RhdHVzLWluZm8ge1xuICAgIG1hcmdpbi1yaWdodDogMHB4O1xuICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gIH1cbiAgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIC5zdGF0dXMtaW5mbyAucmVjdXJyaW5nLWluZm8taWNvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWRldGFpbHMgLmhlYWRlciAucmVjY3VyaW5nLWJhbm5lciAuc3RhdHVzLWluZm8ge1xuICAgIG1hcmdpbi1yaWdodDogMHB4O1xuICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gIH1cbiAgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIC5zdGF0dXMtaW5mbyAucmVjdXJyaW5nLWluZm8taWNvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIC5zdGF0dXMtaGVhZCB7XG4gIG1hcmdpbi1ib3R0b206IDE1cHg7XG59XG4uYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1oZWFkIC5yZWN1cnJpbmctc3RhdHVzIHtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBmb250LXdlaWdodDogNTAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIC5zdGF0dXMtaGVhZCB7XG4gICAgbWluLWhlaWdodDogMzVweDtcbiAgICBhbGlnbi1pdGVtczogc3RhcnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1oZWFkIHtcbiAgICBtaW4taGVpZ2h0OiAzNXB4O1xuICAgIGFsaWduLWl0ZW1zOiBzdGFydDtcbiAgfVxufVxuLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIC5lZGl0LXJlY3JyaW5nLWN0YSB7XG4gIG1hcmdpbi1ib3R0b206IDE2cHg7XG59XG4uYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLmJhbm5lci1pbmZvLXR4dCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBsaW5lLWhlaWdodDogMjJweDtcbn1cbi5ib29raW5nLWRldGFpbHMgLmhlYWRlciAucmVjY3VyaW5nLWJhbm5lciAuYmFubmVyLWluZm8tdHh0IC5zcGNpZmljLWRhdGUtdG9nZ2xlIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbi5ib29raW5nLWRldGFpbHMgLmhlYWRlciAucmVjY3VyaW5nLWJhbm5lciAuYmFubmVyLWluZm8tdHh0IC5oaW50IHtcbiAgd2lkdGg6IDE0MHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjaztcbiAgY29sb3I6IHdoaXRlO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHBhZGRpbmc6IDEwcHg7XG4gIHRvcDogMjhweDtcbiAgei1pbmRleDogMjtcbiAgZm9udC1zaXplOiBjYWxjKDFlbSAtIDJweCk7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIHJpZ2h0OiAwO1xuICBib3gtc2hhZG93OiAwcHggMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMik7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLmJhbm5lci1pbmZvLXR4dCAuaGludCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIC5iYW5uZXItaW5mby10eHQgLmhpbnQge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxufVxuLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIC5iYW5uZXItaW5mby10eHQgLmhpbnQgLnRyaWFuZ2xlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IC02cHg7XG4gIGxlZnQ6IDY0cHg7XG4gIHdpZHRoOiAxMnB4O1xuICBoZWlnaHQ6IDEycHg7XG4gIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xuICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG59XG4uYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLmJhbm5lci1pbmZvLXR4dCAuaGludC13cmFwcGVyIHtcbiAgbWF4LWhlaWdodDogMTA2cHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcbn1cbi5ib29raW5nLWRldGFpbHMgLmhlYWRlciAucmVjY3VyaW5nLWJhbm5lciAuYmFubmVyLWluZm8tdHh0IC5oaW50LXdyYXBwZXIgZGl2IHtcbiAgcGFkZGluZzogMC4yZW0gMDtcbn1cbi5ib29raW5nLWRldGFpbHMgLmhlYWRlciAucmVjY3VyaW5nLWJhbm5lciAuYmFubmVyLWluZm8tdHh0IC5oaW50LXdyYXBwZXIgZGl2OmZpcnN0LWNoaWxkIHtcbiAgcGFkZGluZy1ib3R0b206IDA7XG59XG4uYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLmJhbm5lci1pbmZvLXR4dCAuaGludC13cmFwcGVyIGRpdjpsYXN0LWNoaWxkIHtcbiAgcGFkZGluZy1ib3R0b206IDA7XG59XG4uYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLmJsdWUtYmFubmVyIHtcbiAgYmFja2dyb3VuZDogI0U2RUNGRjtcbiAgcGFkZGluZzogMTZweDtcbiAgZGlzcGxheTogZmxleDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG59XG4uYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLmJsdWUtYmFubmVyIGltZyB7XG4gIHdpZHRoOiAyNHB4O1xuICBtYXJnaW4tcmlnaHQ6IDE0cHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLmJsdWUtYmFubmVyID4gZGl2IHAge1xuICBtYXJnaW46IDA7XG4gIGNvbG9yOiAjMUUzMkU2O1xuICBmb250LXNpemU6IDE2cHg7XG59XG4uYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDQ4cHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkge1xuICAgIG1hcmdpbjogMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogODAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkge1xuICAgIG1hcmdpbjogMDtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwdmggKyA1NnB4KTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDEwNDlweCkgYW5kIChtYXgtd2lkdGg6IDEyODBweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSB7XG4gICAgbWFyZ2luOiAwO1xuICAgIGhlaWdodDogY2FsYygxMDB2aCArIDU2cHgpO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSB7XG4gICAgbWFyZ2luOiAwO1xuICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDE4MXB4KTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IHtcbiAgICBtYXJnaW46IDA7XG4gICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMTgxcHgpO1xuICB9XG59XG4uYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAuc3RhdHVzLWN0YS1ibG9jayB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNFNkU2RTY7XG4gIHBhZGRpbmc6IDE2cHggNTVweDtcbiAgYmFja2dyb3VuZDogd2hpdGU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5zdGF0dXMtY3RhLWJsb2NrIHtcbiAgICBwYWRkaW5nOiAxNnB4IDE2cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkgYW5kIChtYXgtd2lkdGg6IDEwNDhweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAuc3RhdHVzLWN0YS1ibG9jayB7XG4gICAgcGFkZGluZzogMTZweCAxNnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAuc3RhdHVzLWN0YS1ibG9jayB7XG4gICAgcGFkZGluZzogMTZweCAxNnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnN0YXR1cy1jdGEtYmxvY2sge1xuICAgIHBhZGRpbmc6IDE2cHggMTZweDtcbiAgfVxufVxuLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnN0YXR1cy1jdGEtYmxvY2sgaDEge1xuICBjb2xvcjogIzIyMjIyMjtcbiAgZm9udC1mYW1pbHk6IFwiQm93ZXJcIjtcbiAgZm9udC1zaXplOiAyNHB4O1xuICBtYXJnaW46IDEwcHggMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnN0YXR1cy1jdGEtYmxvY2sgaDEge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDQ4cHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnN0YXR1cy1jdGEtYmxvY2sgaDEge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAuc3RhdHVzLWN0YS1ibG9jayBoMSB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnN0YXR1cy1jdGEtYmxvY2sgaDEge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnN0YXR1cy1jdGEtYmxvY2sgPiBkaXYge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgZmxleDogMTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBtaW4td2lkdGg6IDMwMHB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnN0YXR1cy1jdGEtYmxvY2sgPiBkaXYge1xuICAgIG1pbi13aWR0aDogMTAwJTtcbiAgfVxuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAuc3RhdHVzLWN0YS1ibG9jayA+IGRpdiA+IGRpdiB7XG4gICAgbWluLXdpZHRoOiBjYWxjKDEwMCUgLSAzMnB4KTtcbiAgICBwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5zdGF0dXMtY3RhLWJsb2NrID4gZGl2IHtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gIH1cbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnN0YXR1cy1jdGEtYmxvY2sgPiBkaXYgPiBkaXYge1xuICAgIG1pbi13aWR0aDogY2FsYygxMDAlIC0gMzJweCk7XG4gICAgcGFkZGluZy1sZWZ0OiAwICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gIH1cbn1cbi5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5zdGF0dXMtY3RhLWJsb2NrID4gZGl2ID4gZGl2IHtcbiAgZmxleDogMTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5zdGF0dXMtY3RhLWJsb2NrID4gZGl2ID4gZGl2IHtcbiAgICBwYWRkaW5nOiA1cHggMDtcbiAgICBtYXJnaW46IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkgYW5kIChtYXgtd2lkdGg6IDEwNDhweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAuc3RhdHVzLWN0YS1ibG9jayA+IGRpdiA+IGRpdiB7XG4gICAgcGFkZGluZzogNXB4IDA7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAuc3RhdHVzLWN0YS1ibG9jayA+IGRpdiA+IGRpdiB7XG4gICAgcGFkZGluZzogNXB4IDA7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnN0YXR1cy1jdGEtYmxvY2sgPiBkaXYgPiBkaXYge1xuICAgIHBhZGRpbmc6IDVweCAwO1xuICAgIG1hcmdpbjogMDtcbiAgfVxufVxuLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnN0YXR1cy1jdGEtYmxvY2sgPiBkaXYgPiBkaXY6bnRoLWNoaWxkKDIpIGJ1dHRvbiB7XG4gIGNvbG9yOiAjRTEyRTQwO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTEyRTQwO1xufVxuLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnN0YXR1cy1jdGEtYmxvY2sgPiBkaXYgPiBkaXYgYnV0dG9uLCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAuc3RhdHVzLWN0YS1ibG9jayA+IGRpdiA+IGRpdiBhIHtcbiAgZmxleDogMTtcbiAgd2lkdGg6IDIwMnB4O1xuICBtaW4td2lkdGg6IDIwMnB4O1xuICBjb2xvcjogIzIyNTFGRjtcbiAgYm9yZGVyOiAxcHggc29saWQgIzIyNTFGRjtcbn1cbi5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5zdGF0dXMtY3RhLWJsb2NrID4gZGl2ID4gZGl2IGJ1dHRvbltkaXNhYmxlZF0sIC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5zdGF0dXMtY3RhLWJsb2NrID4gZGl2ID4gZGl2IGFbZGlzYWJsZWRdIHtcbiAgY29sb3I6ICM3NTc1NzU7XG4gIGJhY2tncm91bmQ6ICNEMEQwRDA7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG59XG4uYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAuc3RhdHVzLWN0YS1ibG9jayA+IGRpdiA+IGRpdiBidXR0b24gPiBzcGFuLCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAuc3RhdHVzLWN0YS1ibG9jayA+IGRpdiA+IGRpdiBhID4gc3BhbiB7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5zdGF0dXMtY3RhLWJsb2NrID4gZGl2ID4gZGl2IGJ1dHRvbiwgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnN0YXR1cy1jdGEtYmxvY2sgPiBkaXYgPiBkaXYgYSB7XG4gICAgbWluLXdpZHRoOiAxMDAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnN0YXR1cy1jdGEtYmxvY2sgPiBkaXYgPiBkaXYgYnV0dG9uLCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAuc3RhdHVzLWN0YS1ibG9jayA+IGRpdiA+IGRpdiBhIHtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gIH1cbn1cbi5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGZsZXgtd3JhcDogd3JhcDtcbn1cbi5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCB7XG4gIGZsZXg6IDE7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1hcmdpbjogMTZweCA1NXB4O1xuICBtaW4td2lkdGg6IDMwMHB4O1xufVxuLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsIGJ1dHRvbiB7XG4gIHdpZHRoOiAyMDJweDtcbiAgY29sb3I6ICMyMjUxRkY7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMyMjUxRkY7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgYnV0dG9uIHtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgYnV0dG9uIHtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gIH1cbn1cbi5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCBidXR0b25bZGlzYWJsZWRdIHtcbiAgY29sb3I6ICM3NTc1NzU7XG4gIGJhY2tncm91bmQ6ICNEMEQwRDA7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG59XG4uYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgLnJlcXVpcmVtZW50cyB7XG4gIGNvbG9yOiAjMjI1MUZGO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWw6bnRoLWNoaWxkKDEpIHtcbiAgICBtYXJnaW46IDE2cHggMTBweCAwIDEwcHg7XG4gIH1cbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsOm50aC1jaGlsZCgyKSB7XG4gICAgbWFyZ2luOiAxNnB4IDEwcHg7XG4gIH1cbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsID4gZGl2IHtcbiAgICBtYXJnaW46IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkgYW5kIChtYXgtd2lkdGg6IDEwNDhweCkge1xuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWw6bnRoLWNoaWxkKDEpIHtcbiAgICBtYXJnaW46IDE2cHggMTBweCAwIDEwcHg7XG4gIH1cbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsOm50aC1jaGlsZCgyKSB7XG4gICAgbWFyZ2luOiAxNnB4IDEwcHg7XG4gIH1cbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsID4gZGl2IHtcbiAgICBtYXJnaW46IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCB7XG4gICAgbWluLXdpZHRoOiBjYWxjKDEwMCUgLSAzMnB4KTtcbiAgfVxuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWw6bnRoLWNoaWxkKDEpIHtcbiAgICBtYXJnaW46IDE2cHggMTBweCAwIDEwcHg7XG4gIH1cbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsOm50aC1jaGlsZCgyKSB7XG4gICAgbWFyZ2luOiAxNnB4IDEwcHg7XG4gIH1cbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsID4gZGl2IHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsIHtcbiAgICBtaW4td2lkdGg6IGNhbGMoMTAwJSAtIDMycHgpO1xuICB9XG4gIC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbDpudGgtY2hpbGQoMSkge1xuICAgIG1hcmdpbjogMTZweCAxMHB4IDAgMTBweDtcbiAgfVxuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWw6bnRoLWNoaWxkKDIpIHtcbiAgICBtYXJnaW46IDE2cHggMTBweDtcbiAgfVxuICAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgPiBkaXYge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbn1cbi5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCA+IGRpdiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBwYWRkaW5nOiAyMHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMjZweDtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgZmxleDogMTtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cbi5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCBwIHtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAyOHB4O1xuICBtYXJnaW46IDE0cHggMHB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBjb2xvcjogIzMzMztcbn1cbi5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCBwIHN0cm9uZyB7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG4uYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWw6bnRoLWNoaWxkKDEpIHtcbiAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xufVxuLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsOm50aC1jaGlsZCgyKSB7XG4gIG1hcmdpbi1sZWZ0OiAxMHB4O1xufVxuLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsIGgyIHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBjb2xvcjogIzAwMDtcbn1cbi5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCBoMiBpbWcge1xuICBoZWlnaHQ6IDMycHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIG1hcmdpbjogMCA0cHggNHB4IDA7XG59XG4uYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgaDMge1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG4uYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgLnJvb20tbWFwIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsIC5yb29tLW1hcCAuem9vbSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDIwcHg7XG4gIHRvcDogMjBweDtcbiAgei1pbmRleDogMTtcbn1cblxuLmJvb2tpbmctZGV0YWlscy1tb2RhbC1hY3Rpb25zIHtcbiAgbGVmdDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjRTZFNkU2O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1heC1oZWlnaHQ6IDEyMXB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2tpbmctZGV0YWlscy1tb2RhbC1hY3Rpb25zIHtcbiAgICBoZWlnaHQ6IDE2cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYm9va2luZy1kZXRhaWxzLW1vZGFsLWFjdGlvbnMge1xuICAgIGhlaWdodDogMTZweDtcbiAgfVxufVxuLmJvb2tpbmctZGV0YWlscy1tb2RhbC1hY3Rpb25zIC5tYXQtZGlhbG9nLWFjdGlvbnMge1xuICBtYXgtd2lkdGg6IDIyMHB4O1xuICBtYXJnaW46IDAgYXV0bztcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5ib29raW5nLWRldGFpbHMtbW9kYWwtYWN0aW9ucyAubWF0LWRpYWxvZy1hY3Rpb25zIHtcbiAgICBwYWRkaW5nOiA1cHggMDtcbiAgICBoZWlnaHQ6IDIwcHg7XG4gICAgbWF4LWhlaWdodDogMjBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWRldGFpbHMtbW9kYWwtYWN0aW9ucyAubWF0LWRpYWxvZy1hY3Rpb25zIHtcbiAgICBwYWRkaW5nOiA1cHggMDtcbiAgICBoZWlnaHQ6IDIwcHg7XG4gICAgbWF4LWhlaWdodDogMjBweDtcbiAgfVxufSIsIkBpbXBvcnQgXCJ2YXJzXCI7XG5cbkBtaXhpbiBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRzaXplLCAkcXVhbGlmaWVyKSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAaWYgKCRxdWFsaWZpZXIgPT0gbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSBpZiAoJHF1YWxpZmllciA9PSBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWF4LXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5AbWl4aW4gYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRtaW4sICRtYXgpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkbWluKSBhbmQgKG1heC13aWR0aDogJG1heCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIHRoaXMgaXMgYSBjb3B5IG9mIHJlc3BvbmQtdG8uIHdlIGRvbid0IHdhbnQgdG8gcHJlc2VydmUgdGhhdCBtZXRob2Qgc2luY2UgdGhlIGJyZWFrcG9pbnRzIG1heSBkaXZlcmdlIGZyb20gdGhlIG9sZCBVSS5cbkBtaXhpbiBpcy1zY3JlZW4tc2l6ZSgkbWVkaWE6IGFsbCwgJG9yaWVudGF0aW9uOiBub25lKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cblxuQG1peGluIHBhZ2UtcGFkZGluZyB7XG4gICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbDtcbn1cblxuLy8gRm9udCBNaXhpbnNcbiRmb250LW1ja2luc2V5LXNhbnM6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuJGZvbnQtdGhlaW5oYXJkdDogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4kZm9udC1ib3dlcjogXCJCb3dlclwiO1xuXG5AbWl4aW4gYm93ZXItYm9sZCB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWJvd2VyO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBtY2tpbnNleS1zYW5zIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gZGlzcGxheS0xIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiA0cmVtOyAvLyA2NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4NzsgLy8gNzZweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMiB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDYwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS00IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogM3JlbTsgLy8gNDhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE2NjsgLy8gNTZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS01IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjgzMzsgLy8gMzRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjQyOyAvLyA0MHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS03IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyOHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTEge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA0OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi43NXJlbTsgLy8gNDRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDUycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTIge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTExOyAvLyA0NHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNDhweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMyB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIyMjsgLy8gNDRweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjg4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1NTsgLy8gMjhweFxuICAgIH1cbn1cblxuQG1peGluIGJvZHktZGVmYXVsdCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNnB4XG4gICAgfVxufVxuXG4vLy8gRG9lc250IGV4aXN0IGluIE1EUy5cbkBtaXhpbiBib2R5LXRpbnkge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtOyAvLyAxMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjRweFxuICAgIH1cbn1cblxuQG1peGluIGZvcm0tbGFiZWwge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LXRoZWluaGFyZHQ7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGNvbG9yOiAkcGxhY2Vob2xkZXItY29sb3I7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbn1cblxuQG1peGluIGNoaXAtbGFiZWwge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBjaGVja2JveC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGNvbG9yOiBibGFjaztcbn1cblxuLy8gYm9yZGVyc1xuXG5AbWl4aW4gbWNrLWNoZWNrYm94LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay10aGluLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXItbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBib3JkZXItY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudC1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuXG4vLyBmdW5jdGlvbnNcblxuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG5AbWl4aW4gbWF4LWxpbmVzKCRjb3VudCkge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiAkY291bnQ7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbn1cblxuLy8gaW1hZ2VzXG5AbWl4aW4gbWNrLWljb24oJHdpZHRoLCAkYXNzZXQsICRoZWlnaHQ6ICR3aWR0aCwgICRhc3NldFBhdGg6IFwibGlicy91aS9zcmMvbGliL2ljb25zXCIsKSB7XG4gICAgd2lkdGg6ICR3aWR0aDtcbiAgICBoZWlnaHQ6ICRoZWlnaHQ7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiI3skYXNzZXRQYXRofS8jeyRhc3NldH1cIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuXG5cbkBtaXhpbiBtY2stc21hbGwtaWNvbigkbW9iaWxlLWFzc2V0LCAkZGVza3RvcC1hc3NldDogJG1vYmlsZS1hc3NldCkge1xuICAgIEBpbmNsdWRlIG1jay1pY29uKDE2cHgsICRhc3NldDogJG1vYmlsZS1hc3NldCk7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICRhc3NldDogJGRlc2t0b3AtYXNzZXQpO1xuICAgIH1cbn1cblxuLy8gc2tlbGV0b25cbkBtaXhpbiBza2VsZXRvbi1iZyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWltYWdlLXNpemUge1xuICAgIHdpZHRoOiA4MXB4O1xuICAgIGhlaWdodDogODJweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDIxOXB4O1xuICAgICAgICBoZWlnaHQ6IDExOXB4O1xuICAgIH1cbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLXN0YXR1cy1zaXplIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMTE3cHg7XG4gICAgICAgIGhlaWdodDogNzhweDtcbiAgICB9XG59XG4iLCJAaW1wb3J0IFwibGlicy91aS9zcmMvbGliL21peGluc1wiO1xuXG46aG9zdCB7XG4gICAgOjpuZy1kZWVwIHtcbiAgICAgICAgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuICAgICAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG4uYm9va2luZy1kZXRhaWxzIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgbWNrLW1vZGFsIHtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDI0cHggIWltcG9ydGFudDtcbiAgICB9XG4gICAgLmhlYWRlciB7XG4gICAgICAgIC8vIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgLy8gei1pbmRleDogMjtcbiAgICAgICAgLy8gdG9wOiAwO1xuICAgICAgICAvLyBsZWZ0OiAwO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgLy8gaGVpZ2h0OiAxNzFweDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgIHBhZGRpbmc6IDBweCA1NnB4IDIwcHggNTZweDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNFNkU2RTY7XG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKHRhYmxldCkge1xuICAgICAgICAgICAgcGFkZGluZzogMHB4IDAgMCAwO1xuICAgICAgICAgICAgLy8gaGVpZ2h0OiAxMzhweDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDBweCAwIDAgMDtcbiAgICAgICAgICAgIC8vIGhlaWdodDogMTM4cHg7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAmLmlzLXJlY3VycmluZy1ib2R5IHtcbiAgICAgICAgLy8gICAgIGhlaWdodDogMjE3cHg7XG4gICAgICAgIC8vIH1cblxuICAgICAgICAuc3RhdHVzIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgaGVpZ2h0OiA1NnB4O1xuICAgICAgICAgICAgcGFkZGluZzogMTZweCAyNXB4IDE2cHggMjVweDtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICA+IGRpdiB7XG4gICAgICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDI0cHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMTRweDtcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcCB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAucmVjY3VyaW5nLWJhbm5lciB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICAgICAgICAgICAgbWluLWhlaWdodDogMTI1cHg7XG4gICAgICAgICAgICBwYWRkaW5nOiAxNXB4IDI1cHg7XG4gICAgICAgICAgICBjb2xvcjogIzAwMDAwMDtcblxuICAgICAgICAgICAgLy8gQGV4dGVuZCAuZmxleC1yb3c7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBwbGFjZS1jb250ZW50OiBjZW50ZXIgZmxleC1zdGFydDtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAvLyBAZXh0ZW5kIC5mbGV4LWNvbHVtblxuICAgICAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIHBsYWNlLWNvbnRlbnQ6IHN0cmV0Y2ggZmxleC1zdGFydDtcbiAgICAgICAgICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGltZyB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDI0cHg7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNHB4O1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAuc3RhdHVzLWluZm8ge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMTAwcHg7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMHB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xuICAgICAgICAgICAgICAgICAgICAucmVjdXJyaW5nLWluZm8taWNvbntcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAuc3RhdHVzLWhlYWQge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gICAgICAgICAgICAgICAgLnJlY3VycmluZy1zdGF0dXMge1xuICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtaW4taGVpZ2h0OiAzNXB4O1xuICAgICAgICAgICAgICAgICAgICBhbGlnbi1pdGVtczogc3RhcnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5lZGl0LXJlY3JyaW5nLWN0YSB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJhbm5lci1pbmZvLXR4dCB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuXHRcdFx0XHRcdFx0XHRcdGxpbmUtaGVpZ2h0OiAyMnB4O1xuXG5cdFx0XHRcdFx0XHRcdFx0LnNwY2lmaWMtZGF0ZS10b2dnbGUge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJzb3I6IHBvaW50ZXI7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb250LXdlaWdodDogNTAwO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuICAgICAgICAgICAgICAgIC5oaW50IHtcbiAgICAgICAgICAgICAgICAgICAgJHdpZHRoOiAxNDBweDtcbiAgICAgICAgICAgICAgICAgICAgJHRyaWFuZ2xlX3dpZHRoOiAxMnB4O1xuXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAkd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMTBweDtcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAyOHB4O1xuICAgICAgICAgICAgICAgICAgICB6LWluZGV4OiAyO1xuICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IGNhbGMoMWVtIC0gMnB4KTtcbiAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IDBweCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcblxuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC50cmlhbmdsZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3A6IC02cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiAoJHdpZHRoIC0gJHRyaWFuZ2xlX3dpZHRoKS8yO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICR0cmlhbmdsZV93aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJHRyaWFuZ2xlX3dpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAmLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF4LWhlaWdodDogMTA2cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXYge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAuMmVtIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgLmJsdWUtYmFubmVyIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNFNkVDRkY7XG4gICAgICAgICAgICBwYWRkaW5nOiAxNnB4O1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcblxuICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMjRweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDE0cHg7XG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPmRpdiB7XG4gICAgICAgICAgICAgICAgcCB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjowO1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogIzFFMzJFNjtcbiAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC5kZXRhaWwtYm9keSB7XG4gICAgICAgIC8vIHBhZGRpbmc6IDEwNHB4IDAgMTIycHggMDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgIC8vIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgICAgICAgLy8gaGVpZ2h0OiBjYWxjKDEwMHZoICsgNTZweCk7XG5cbiAgICAgICAgLy8gJi5pcy1yZWN1cnJpbmctYm9keSB7XG4gICAgICAgIC8vICAgICAvLyBwYWRkaW5nLXRvcDogMTYwcHg7XG4gICAgICAgIC8vICAgICBoZWlnaHQ6IGNhbGMoMTAwdmggKyAzMDBweCk7XG4gICAgICAgIC8vIH1cblxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZSh0YWJsZXQpIHtcbiAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgIC8vIHBhZGRpbmc6IDBweCAwIDEwNnB4IDA7XG5cbiAgICAgICAgICAgIC8vICYuaXMtcmVjdXJyaW5nLWJvZHkge1xuICAgICAgICAgICAgLy8gICAgIC8vIHBhZGRpbmctdG9wOiAxNTJweDtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShsYXB0b3ApIHtcbiAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgIC8vIHBhZGRpbmc6IDBweCAwIDEwNnB4IDA7XG4gICAgICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwdmggKyA1NnB4KTtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgIC8vIHBhZGRpbmc6IDBweCAwIDgwcHggMDtcbiAgICAgICAgICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDE4MXB4KTtcblxuICAgICAgICAgICAgLy8gJi5pcy1yZWN1cnJpbmctYm9keSB7XG4gICAgICAgICAgICAvLyAgICAgLy8gcGFkZGluZy10b3A6IDE3MHB4O1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICB9XG5cbiAgICAgICAgLnN0YXR1cy1jdGEtYmxvY2sge1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRTZFNkU2O1xuICAgICAgICAgICAgcGFkZGluZzogMTZweCA1NXB4O1xuICAgICAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZSh0YWJsZXQpIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNnB4IDE2cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNnB4IDE2cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoMSB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICMyMjIyMjI7XG4gICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LWJvd2VyO1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDEwcHggMDtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZSh0YWJsZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgID5kaXYge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICAgICAgICAgICAgbWluLXdpZHRoOiAzMDBweDtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgICAgICA+ZGl2IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbi13aWR0aDogY2FsYygxMDAlIC0gMzJweCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID5kaXYge1xuICAgICAgICAgICAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMjBweDtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUodGFibGV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiA1cHggMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDVweCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICY6bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICRlcnJvci1jb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAkZXJyb3ItY29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uLCBhIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMjAycHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDIwMnB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IzIyNTFGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMyMjUxRkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAmW2Rpc2FibGVkXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICM3NTc1NzU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI0QwRDBEMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRDBEMEQwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPnNwYW4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC52LXBhbmVscyB7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDtcblxuICAgICAgICAgICAgLnYtcGFuZWwge1xuICAgICAgICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMTZweCA1NXB4O1xuICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMzAwcHg7XG5cbiAgICAgICAgICAgICAgICBidXR0b24ge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMjAycHg7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiMyMjUxRkY7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMyMjUxRkY7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICZbZGlzYWJsZWRdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjNzU3NTc1O1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI0QwRDBEMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAucmVxdWlyZW1lbnRzIHtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IzIyNTFGRjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUodGFibGV0KSB7XG4gICAgICAgICAgICAgICAgICAgICY6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMTZweCAxMHB4IDAgMTBweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAmOm50aC1jaGlsZCgyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDE2cHggMTBweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA+ZGl2IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiBjYWxjKDEwMCUgLSAgMzJweCk7XG4gICAgICAgICAgICAgICAgICAgICY6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMTZweCAxMHB4IDAgMTBweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAmOm50aC1jaGlsZCgyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDE2cHggMTBweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA+ZGl2IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMjBweDtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDI2cHg7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gICAgICAgICAgICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHAge1xuICAgICAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMjhweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxNHB4IDBweDtcbiAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICMzMzM7XG4gICAgICAgICAgICAgICAgICAgIHN0cm9uZyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICY6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAmOm50aC1jaGlsZCgyKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoMiB7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICMwMDA7XG4gICAgICAgICAgICAgICAgICAgIGltZyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwIDRweCA0cHggMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoMyB7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLnJvb20tbWFwIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgICAgICAuem9vbSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodDogMjBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogMjBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5ib29raW5nLWRldGFpbHMtbW9kYWwtYWN0aW9ucyB7XG4gICAgLy8gcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjRTZFNkU2O1xuICAgIC8vIHotaW5kZXg6IDE7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyBcbiAgICBtYXgtaGVpZ2h0OiAxMjFweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgIGhlaWdodDogMTZweDtcbiAgICB9XG4gICAgLm1hdC1kaWFsb2ctYWN0aW9ucyB7XG4gICAgICAgIG1heC13aWR0aDogMjIwcHg7XG4gICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDVweCAwO1xuICAgICAgICAgICAgaGVpZ2h0OiAyMHB4O1xuICAgICAgICAgICAgbWF4LWhlaWdodDogMjBweDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuIl19 */"] + directives: [i5.NgIf, i6.ModalComponent, i5.NgSwitch, i5.NgSwitchCase, i5.NgSwitchDefault, i5.NgForOf, i7.MatButton, i8.NgxSkeletonLoaderComponent, i5.NgClass, i7.MatAnchor, i9.RoomLocationPreviewComponent, i10.OrderTableComponent, i2.MatDialogActions, i11.ModalButtonRowComponent, i12.BookingEditComponent, i13.RoomAvailabilityPreviewComponent, i14.BookingCateringComponent], + styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n[_nghost-%COMP%] .mat-dialog-content {\n background-color: #F8F9FA;\n overflow-y: auto;\n}\n[_nghost-%COMP%] .mv-label[_ngcontent-%COMP%] {\n color: #757575;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] {\n position: relative;\n top: 0;\n left: 0;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] mck-modal[_ngcontent-%COMP%] {\n max-width: 1024px !important;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n width: 100%;\n background-color: white;\n padding: 0px 56px 20px 56px;\n border-bottom: 1px solid #E6E6E6;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n padding: 0px 0 0 0;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n padding: 0px 0 0 0;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n padding: 0px 0 0 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n padding: 0px 0 0 0;\n }\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n min-height: 125px;\n padding: 15px 25px;\n color: #000000;\n flex-direction: row;\n box-sizing: border-box;\n display: flex;\n place-content: center flex-start;\n align-items: flex-start;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] {\n flex-direction: column;\n box-sizing: border-box;\n display: flex;\n place-content: stretch flex-start;\n align-items: stretch;\n max-width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] {\n flex-direction: column;\n box-sizing: border-box;\n display: flex;\n place-content: stretch flex-start;\n align-items: stretch;\n max-width: 100%;\n }\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 24px;\n margin-right: 14px;\n vertical-align: middle;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .edit-recrring-cta[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] {\n margin-right: 100px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] {\n margin-right: 0px;\n margin-bottom: 15px;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .recurring-info-icon[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] {\n margin-right: 0px;\n margin-bottom: 15px;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .recurring-info-icon[_ngcontent-%COMP%] {\n display: none;\n }\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .status-head[_ngcontent-%COMP%] {\n margin-bottom: 15px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .status-head[_ngcontent-%COMP%] .recurring-status[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 500;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .status-head[_ngcontent-%COMP%] {\n margin-bottom: 0px;\n min-height: 35px;\n align-items: start;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .status-head[_ngcontent-%COMP%] {\n margin-bottom: 0px;\n min-height: 35px;\n align-items: start;\n }\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] {\n position: relative;\n font-size: 18px;\n font-weight: 400;\n line-height: 22px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .spcific-date-toggle[_ngcontent-%COMP%] {\n text-decoration: underline;\n cursor: pointer;\n font-weight: 500;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n width: 140px;\n background-color: black;\n color: white;\n position: absolute;\n padding: 10px;\n top: 28px;\n z-index: 2;\n font-size: calc(1em - 2px);\n font-weight: 400;\n right: 0;\n box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.2);\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n width: 100%;\n position: relative;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n width: 100%;\n position: relative;\n }\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] .triangle[_ngcontent-%COMP%] {\n position: absolute;\n top: -6px;\n left: 64px;\n width: 12px;\n height: 12px;\n background-color: black;\n transform: rotate(45deg);\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint-wrapper[_ngcontent-%COMP%] {\n max-height: 106px;\n overflow: hidden;\n overflow-y: scroll;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint-wrapper[_ngcontent-%COMP%] div[_ngcontent-%COMP%] {\n padding: 0.2em 0;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint-wrapper[_ngcontent-%COMP%] div[_ngcontent-%COMP%]:first-child {\n padding-bottom: 0;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .reccuring-banner[_ngcontent-%COMP%] .status-info[_ngcontent-%COMP%] .banner-info-txt[_ngcontent-%COMP%] .hint-wrapper[_ngcontent-%COMP%] div[_ngcontent-%COMP%]:last-child {\n padding-bottom: 0;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] {\n width: 100%;\n height: 56px;\n padding: 16px 25px 16px 25px;\n justify-content: flex-start;\n font-size: 16px;\n font-weight: 500;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 24px;\n margin-right: 14px;\n vertical-align: middle;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] {\n font-size: 14px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] {\n font-size: 14px;\n }\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .blue-banner[_ngcontent-%COMP%] {\n background: #E6ECFF;\n padding: 16px;\n display: flex;\n font-weight: 500;\n align-items: center;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .blue-banner[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 24px;\n margin-right: 14px;\n vertical-align: middle;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .blue-banner[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: #1E32E6;\n font-size: 16px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] {\n background-color: transparent;\n \n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 801px) and (max-width: 1024px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] {\n margin: 0;\n max-height: calc(100vh + 56px);\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1049px) and (max-width: 1280px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] {\n margin: 0;\n max-height: calc(100vh + 56px);\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] {\n padding: 0px 55px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] .cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 21px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] .cta-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2) button[_ngcontent-%COMP%] {\n color: #E12E40;\n border: 1px solid #E12E40;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] .cta-block[_ngcontent-%COMP%] button[_ngcontent-%COMP%], [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] .cta-block[_ngcontent-%COMP%] a[_ngcontent-%COMP%] {\n flex: 1;\n width: 202px;\n min-width: 202px;\n color: #2251FF;\n border: 1px solid #2251FF;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] .cta-block[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%], [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] .cta-block[_ngcontent-%COMP%] a[disabled][_ngcontent-%COMP%] {\n color: #757575;\n background: #D0D0D0;\n border: 1px solid #D0D0D0;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] .cta-block[_ngcontent-%COMP%] button[_ngcontent-%COMP%] > span[_ngcontent-%COMP%], [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] .cta-block[_ngcontent-%COMP%] a[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] .cta-block[_ngcontent-%COMP%] button[_ngcontent-%COMP%], [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] .cta-block[_ngcontent-%COMP%] a[_ngcontent-%COMP%] {\n width: 185px;\n min-width: 185px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] .cta-block[_ngcontent-%COMP%] button[_ngcontent-%COMP%], [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] .cta-block[_ngcontent-%COMP%] a[_ngcontent-%COMP%] {\n width: 185px;\n min-width: 185px;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] .cta-block[_ngcontent-%COMP%] {\n place-content: stretch flex-end;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] .cta-block[_ngcontent-%COMP%] {\n place-content: stretch flex-end;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] {\n padding: 0px 10px;\n height: 100%;\n flex-direction: column;\n box-sizing: border-box;\n display: flex;\n place-content: stretch flex-start;\n align-items: stretch;\n max-width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] {\n padding: 0px 10px;\n height: 100%;\n flex-direction: column;\n box-sizing: border-box;\n display: flex;\n place-content: stretch flex-start;\n align-items: stretch;\n max-width: 100%;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] {\n padding: 0px 10px;\n height: 100%;\n flex-direction: column;\n box-sizing: border-box;\n display: flex;\n place-content: stretch flex-start;\n align-items: stretch;\n max-width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-cta-block[_ngcontent-%COMP%] {\n padding: 0px 10px;\n height: 100%;\n flex-direction: column;\n box-sizing: border-box;\n display: flex;\n place-content: stretch flex-start;\n align-items: stretch;\n max-width: 100%;\n }\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-address[_ngcontent-%COMP%] {\n max-height: 110px;\n padding: 0px 20px;\n flex: 1 1 auto;\n margin-bottom: 20px;\n margin-top: 16px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-address[_ngcontent-%COMP%] .name[_ngcontent-%COMP%] {\n font-weight: 700;\n font-size: 42px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-address[_ngcontent-%COMP%] .address-details[_ngcontent-%COMP%] {\n font-size: 18px;\n line-height: 18px;\n padding-top: 4px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-address[_ngcontent-%COMP%] {\n padding: unset;\n margin-left: 15px;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-address[_ngcontent-%COMP%] .name[_ngcontent-%COMP%] {\n font-weight: 500;\n font-size: 28px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-address[_ngcontent-%COMP%] {\n padding: unset;\n margin-left: 15px;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-address[_ngcontent-%COMP%] .name[_ngcontent-%COMP%] {\n font-weight: 500;\n font-size: 28px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-address[_ngcontent-%COMP%] {\n padding: unset;\n margin-left: 15px;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-address[_ngcontent-%COMP%] .name[_ngcontent-%COMP%] {\n font-weight: 500;\n font-size: 28px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-address[_ngcontent-%COMP%] {\n padding: unset;\n margin-left: 15px;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .room-address[_ngcontent-%COMP%] .name[_ngcontent-%COMP%] {\n font-weight: 500;\n font-size: 28px;\n }\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n margin-bottom: 50px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n margin: 16px 55px;\n min-width: 300px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .schedule[_ngcontent-%COMP%] {\n height: 100px;\n max-height: 270px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .box[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin-bottom: 14px !important;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .box[_ngcontent-%COMP%] .content[_ngcontent-%COMP%] {\n font-size: 18px;\n line-height: 28px;\n margin: 1px 0px;\n font-weight: 400;\n color: #333;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .box[_ngcontent-%COMP%] .content[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .height-58[_ngcontent-%COMP%] {\n height: 58px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .height-58[_ngcontent-%COMP%] > h2[_ngcontent-%COMP%]:first-of-type {\n flex: 1 1 auto;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n color: #2251FF;\n display: flex;\n border: none;\n border-radius: 50%;\n width: 53px;\n height: 52px;\n padding: unset;\n min-width: unset;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] button.cta[_ngcontent-%COMP%] {\n border-radius: inherit;\n width: 202px;\n color: #2251FF;\n border: 1px solid #2251FF;\n height: 48px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] button.cta[disabled][_ngcontent-%COMP%] {\n background: #D0D0D0;\n border: 1px solid #D0D0D0;\n opacity: 1;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] button[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 24px;\n vertical-align: middle;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] button[disabled][_ngcontent-%COMP%] {\n color: #757575;\n opacity: 0.5;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .meeting-box[_ngcontent-%COMP%] {\n max-height: 300px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .meeting-box[_ngcontent-%COMP%] .content[_ngcontent-%COMP%] {\n max-height: 180px;\n overflow-y: auto;\n margin-top: 15px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .room-map[_ngcontent-%COMP%] {\n position: relative;\n height: 271px;\n flex: none;\n padding: inherit;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .room-map[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n position: relative;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .room-map[_ngcontent-%COMP%] .zoom[_ngcontent-%COMP%] {\n position: absolute;\n right: 20px;\n top: 20px;\n z-index: 1;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .room-has-catering[_ngcontent-%COMP%] {\n flex: none;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .room-has-catering[_ngcontent-%COMP%] .catering-table[_ngcontent-%COMP%] {\n max-height: 258px;\n overflow-y: auto;\n margin-top: 14px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .room-has-catering[_ngcontent-%COMP%] .catering-table[_ngcontent-%COMP%] {\n max-height: none;\n overflow-y: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .room-has-catering[_ngcontent-%COMP%] .catering-table[_ngcontent-%COMP%] {\n max-height: none;\n overflow-y: none;\n }\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .requirements[_ngcontent-%COMP%] {\n color: #2251FF;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(1) {\n margin: 16px 10px 0 10px;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(2) {\n margin: 16px 10px;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(1) {\n margin: 16px 10px 0 10px;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(2) {\n margin: 16px 10px;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] {\n min-width: calc(100% - 32px);\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(1) {\n margin: 16px 10px 0 10px;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(2) {\n margin: 16px 10px;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n margin-bottom: 0;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .meeting-box[_ngcontent-%COMP%] {\n max-height: none;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .meeting-box[_ngcontent-%COMP%] .content[_ngcontent-%COMP%] {\n max-height: none;\n overflow-y: none;\n margin-top: 15px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] {\n min-width: calc(100% - 32px);\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(1) {\n margin: 16px 10px 0 10px;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(2) {\n margin: 16px 10px;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n margin-bottom: 0;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .meeting-box[_ngcontent-%COMP%] {\n max-height: none;\n }\n [_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] .meeting-box[_ngcontent-%COMP%] .content[_ngcontent-%COMP%] {\n max-height: none;\n overflow-y: none;\n margin-top: 15px;\n }\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background-color: white;\n padding: 6px 11px 26px 20px;\n border: 1px solid #E6E6E6;\n flex: 1;\n margin-bottom: 20px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-size: 18px;\n line-height: 28px;\n margin: 15px 0px 14px 0px;\n font-weight: 400;\n color: #333;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] p[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(1) {\n margin-right: 10px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 10px;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 500;\n color: #000;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n height: 32px;\n vertical-align: middle;\n margin: 0 4px 4px 0;\n}\n[_nghost-%COMP%] .booking-details[_ngcontent-%COMP%] .detail-body[_ngcontent-%COMP%] .v-panels[_ngcontent-%COMP%] .v-panel[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 500;\n}\n[_nghost-%COMP%] .booking-details-modal-actions[_ngcontent-%COMP%] {\n left: 0;\n bottom: 0;\n width: 100%;\n background-color: white;\n border-top: 1px solid #E6E6E6;\n position: relative;\n max-height: 121px;\n display: flex;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .booking-details-modal-actions[_ngcontent-%COMP%] {\n height: 16px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details-modal-actions[_ngcontent-%COMP%] {\n height: 16px;\n }\n}\n[_nghost-%COMP%] .booking-details-modal-actions[_ngcontent-%COMP%] .mat-dialog-actions[_ngcontent-%COMP%] {\n max-width: 220px;\n margin: 0 auto;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .booking-details-modal-actions[_ngcontent-%COMP%] .mat-dialog-actions[_ngcontent-%COMP%] {\n padding: 5px 0;\n height: 20px;\n max-height: 20px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .booking-details-modal-actions[_ngcontent-%COMP%] .mat-dialog-actions[_ngcontent-%COMP%] {\n padding: 5px 0;\n height: 20px;\n max-height: 20px;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLWRldGFpbHMtbW9kYWwvYm9va2luZy1kZXRhaWxzLW1vZGFsLmNvbXBvbmVudC5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy91aS9zcmMvbGliL21peGlucy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvYXBwcy9zdGFmZi9zcmMvYXBwL2Jvb2tpbmcvYm9va2luZy1kZXRhaWxzLW1vZGFsL2Jvb2tpbmctZGV0YWlscy1tb2RhbC5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNoVVE7RUFDSSx5QkFBQTtFQUNBLGdCQUFBO0FGZVo7QUVUSTtFQUNJLGNBQUE7QUZXUjtBRURJO0VBQ0ksa0JBQUE7RUFDQSxNQUFBO0VBQ0EsT0FBQTtBRkdSO0FFRFE7RUFDSSw0QkFBQTtBRkdaO0FFRFE7RUFDSSxXQUFBO0VBQ0EsdUJBQUE7RUFDQSwyQkFBQTtFQUNBLGdDQUFBO0FGR1o7QUNwQlE7RUNhQTtJQU1RLGtCQUFBO0VGS2Q7QUFDRjtBQ3pCUTtFQ2FBO0lBTVEsa0JBQUE7RUZVZDtBQUNGO0FDdkNZO0VDc0JKO0lBU1Esa0JBQUE7RUZZZDtBQUNGO0FDNUNZO0VDc0JKO0lBU1Esa0JBQUE7RUZpQmQ7QUFDRjtBRVhZO0VBQ0kseUJBQUE7RUFDQSxpQkFBQTtFQUNBLGtCQUFBO0VBQ0EsY0FBQTtFQUdBLG1CQUFBO0VBQ0Esc0JBQUE7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ZmYvc3JjL2FwcC9ib29raW5nL2Jvb2tpbmctZGV0YWlscy1tb2RhbC9ib29raW5nLWRldGFpbHMtbW9kYWwuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIkcHJpbWFyeTogIzFGNDBFNjtcbiRmb3JtLWxhYmVsOiAjMDUxQzJDO1xuJHNlY29uZGFyeS1sYWJlbDogIzc2NzY3NjtcbiRib3JkZXI6ICNCM0IzQjM7XG4kYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDogI0QwRDBEMDtcbiRjaGlwLWNvbG9yOiAjMzMzMzMzO1xuJHBsYWNlaG9sZGVyLWNvbG9yOiAjN0Y3RjdGO1xuJGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4kcGFnZS1iYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuJHNlbGVjdGVkLW9wdGlvbjogI0U2RTZFNjtcbiRjb2xvci1icmFuZC15ZWxsb3c6ICNmZmQwNDg7XG4kbGlnaHQteWVsbG93OiAjZmZmM2NlO1xuJGNvYWNobWFyay10ZXh0OiAjNmY0ZDAwO1xuJGVycm9yLWNvbG9yOiAjRTEyRTQwO1xuJG5vLWZpbHRlcnMtY29sb3I6ICNCQ0JDQkM7XG4kcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I6ICNGNEY0RjQ7XG4kcHJpbWFyeS1oaWdobGlnaHQ6ICMyMjUxRkY7XG4kc2Nyb2xsYmFyLWNvbG9yOiAjNzU3NTc1O1xuXG4kYXZhaWxhYmxlLWNvbG9yOiAjNUQ5RDUyO1xuJGF2YWlsYWJsZS1ieS1yZXF1ZXN0LWNvbG9yOiAjRjVCNTNGO1xuJGluLXVzZS1jb2xvcjogI0Q0NDgzRTtcbiRub3QtYm9va2FibGUtY29sb3I6ICNDQ0NDQ0M7XG5cbiRtb2RhbC1ib2R5LWhlYWRpbmc6ICM0RDRENEQ7XG4kYWxlcnQtb3ZlcmxheS1iZzogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2FjaG1hcmstYmc6ICNFQkVCRjY7XG4kY29hY2htYXJrLWRhcmstdGV4dDogIzFCMUIxOTtcbiRlcnJvci10ZXh0OiAjZmZmO1xuXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuXG4vLyA0cHhcbiRzcGFjaW5nLXNtYWxsZXN0OiAwLjI1cmVtO1xuXG4vLyA4cHhcbiRzcGFjaW5nLXh4c21hbGw6IDAuNXJlbTtcblxuLy8gMTJweFxuJHNwYWNpbmcteHNtYWxsOiAwLjc1cmVtO1xuXG4vLyAxNnB4XG4kc3BhY2luZy1zbWFsbDogMXJlbTtcblxuLy8gMjBweFxuJHNwYWNpbmctc21hbGwtbWVkaXVtOiAxLjI1cmVtO1xuXG4vLyAyNHB4XG4kc3BhY2luZy1tZWRpdW06IDEuNXJlbTtcblxuLy8gMjhweFxuJHNwYWNpbmctbWVkaXVtLWxhcmdlOiAxLjc1cmVtO1xuXG4vLyAzMnB4XG4kc3BhY2luZy1sYXJnZTogMnJlbTtcblxuLy8gNDhweFxuJHNwYWNpbmcteGxhcmdlOiAzcmVtO1xuXG4vLyA2NHB4XG4kc3BhY2luZy14eGxhcmdlOiA0cmVtO1xuXG4vLyA5NnB4XG4kc3BhY2luZy1sYXJnZXN0OiA2cmVtO1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGRldmljZS1tb2JpbGUtc2l6ZTogNDUwcHg7XG4kZGV2aWNlLXRhYmxldC1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFwdG9wLXNpemU6IDEwMjRweDtcblxuJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemU6IDgwMHB4O1xuJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemU6IDEwNDhweDtcbiRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplOiAxMjgwcHg7XG5cblxuOmV4cG9ydCB7XG4gICAgcHJpbWFyeTogJHByaW1hcnk7XG4gICAgc2Vjb25kYXJ5TGFiZWw6ICRzZWNvbmRhcnktbGFiZWw7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4kaWNvbi1zbWFsbDogMTZweDtcbiRpY29uLW1lZGl1bTogMjRweDtcbiRpY29uLWxhcmdlOiAzMnB4O1xuJGljb24teGxhcmdlOiA0OHB4O1xuIiwiLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG46aG9zdCA6Om5nLWRlZXAgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG46aG9zdCAubXYtbGFiZWwge1xuICBjb2xvcjogIzc1NzU3NTtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgbWNrLW1vZGFsIHtcbiAgbWF4LXdpZHRoOiAxMDI0cHggIWltcG9ydGFudDtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmhlYWRlciB7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcGFkZGluZzogMHB4IDU2cHggMjBweCA1NnB4O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0U2RTZFNjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIHtcbiAgICBwYWRkaW5nOiAwcHggMCAwIDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkgYW5kIChtYXgtd2lkdGg6IDEwNDhweCkge1xuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIge1xuICAgIHBhZGRpbmc6IDBweCAwIDAgMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIHtcbiAgICBwYWRkaW5nOiAwcHggMCAwIDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIge1xuICAgIHBhZGRpbmc6IDBweCAwIDAgMDtcbiAgfVxufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgbWluLWhlaWdodDogMTI1cHg7XG4gIHBhZGRpbmc6IDE1cHggMjVweDtcbiAgY29sb3I6ICMwMDAwMDA7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBsYWNlLWNvbnRlbnQ6IGNlbnRlciBmbGV4LXN0YXJ0O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmhlYWRlciAucmVjY3VyaW5nLWJhbm5lciB7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgcGxhY2UtY29udGVudDogc3RyZXRjaCBmbGV4LXN0YXJ0O1xuICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmhlYWRlciAucmVjY3VyaW5nLWJhbm5lciB7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgcGxhY2UtY29udGVudDogc3RyZXRjaCBmbGV4LXN0YXJ0O1xuICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgfVxufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIGltZyB7XG4gIHdpZHRoOiAyNHB4O1xuICBtYXJnaW4tcmlnaHQ6IDE0cHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLmVkaXQtcmVjcnJpbmctY3RhIHtcbiAgbWFyZ2luLWJvdHRvbTogMTZweDtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmhlYWRlciAucmVjY3VyaW5nLWJhbm5lciAuc3RhdHVzLWluZm8ge1xuICBtYXJnaW4tcmlnaHQ6IDEwMHB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIC5zdGF0dXMtaW5mbyB7XG4gICAgbWFyZ2luLXJpZ2h0OiAwcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTVweDtcbiAgfVxuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1pbmZvIC5yZWN1cnJpbmctaW5mby1pY29uIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIC5zdGF0dXMtaW5mbyB7XG4gICAgbWFyZ2luLXJpZ2h0OiAwcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTVweDtcbiAgfVxuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1pbmZvIC5yZWN1cnJpbmctaW5mby1pY29uIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1pbmZvIC5zdGF0dXMtaGVhZCB7XG4gIG1hcmdpbi1ib3R0b206IDE1cHg7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1pbmZvIC5zdGF0dXMtaGVhZCAucmVjdXJyaW5nLXN0YXR1cyB7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmhlYWRlciAucmVjY3VyaW5nLWJhbm5lciAuc3RhdHVzLWluZm8gLnN0YXR1cy1oZWFkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwcHg7XG4gICAgbWluLWhlaWdodDogMzVweDtcbiAgICBhbGlnbi1pdGVtczogc3RhcnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1pbmZvIC5zdGF0dXMtaGVhZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMHB4O1xuICAgIG1pbi1oZWlnaHQ6IDM1cHg7XG4gICAgYWxpZ24taXRlbXM6IHN0YXJ0O1xuICB9XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1pbmZvIC5iYW5uZXItaW5mby10eHQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGluZS1oZWlnaHQ6IDIycHg7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1pbmZvIC5iYW5uZXItaW5mby10eHQgLnNwY2lmaWMtZGF0ZS10b2dnbGUge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIC5zdGF0dXMtaW5mbyAuYmFubmVyLWluZm8tdHh0IC5oaW50IHtcbiAgd2lkdGg6IDE0MHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjaztcbiAgY29sb3I6IHdoaXRlO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHBhZGRpbmc6IDEwcHg7XG4gIHRvcDogMjhweDtcbiAgei1pbmRleDogMjtcbiAgZm9udC1zaXplOiBjYWxjKDFlbSAtIDJweCk7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIHJpZ2h0OiAwO1xuICBib3gtc2hhZG93OiAwcHggMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMik7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1pbmZvIC5iYW5uZXItaW5mby10eHQgLmhpbnQge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmhlYWRlciAucmVjY3VyaW5nLWJhbm5lciAuc3RhdHVzLWluZm8gLmJhbm5lci1pbmZvLXR4dCAuaGludCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1pbmZvIC5iYW5uZXItaW5mby10eHQgLmhpbnQgLnRyaWFuZ2xlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IC02cHg7XG4gIGxlZnQ6IDY0cHg7XG4gIHdpZHRoOiAxMnB4O1xuICBoZWlnaHQ6IDEycHg7XG4gIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xuICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1pbmZvIC5iYW5uZXItaW5mby10eHQgLmhpbnQtd3JhcHBlciB7XG4gIG1heC1oZWlnaHQ6IDEwNnB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBvdmVyZmxvdy15OiBzY3JvbGw7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1pbmZvIC5iYW5uZXItaW5mby10eHQgLmhpbnQtd3JhcHBlciBkaXYge1xuICBwYWRkaW5nOiAwLjJlbSAwO1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5yZWNjdXJpbmctYmFubmVyIC5zdGF0dXMtaW5mbyAuYmFubmVyLWluZm8tdHh0IC5oaW50LXdyYXBwZXIgZGl2OmZpcnN0LWNoaWxkIHtcbiAgcGFkZGluZy1ib3R0b206IDA7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnJlY2N1cmluZy1iYW5uZXIgLnN0YXR1cy1pbmZvIC5iYW5uZXItaW5mby10eHQgLmhpbnQtd3JhcHBlciBkaXY6bGFzdC1jaGlsZCB7XG4gIHBhZGRpbmctYm90dG9tOiAwO1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5zdGF0dXMge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiA1NnB4O1xuICBwYWRkaW5nOiAxNnB4IDI1cHggMTZweCAyNXB4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmhlYWRlciAuc3RhdHVzID4gZGl2IGltZyB7XG4gIHdpZHRoOiAyNHB4O1xuICBtYXJnaW4tcmlnaHQ6IDE0cHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5oZWFkZXIgLnN0YXR1cyA+IGRpdiBwIHtcbiAgbWFyZ2luOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5zdGF0dXMge1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmhlYWRlciAuc3RhdHVzIHtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gIH1cbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmhlYWRlciAuYmx1ZS1iYW5uZXIge1xuICBiYWNrZ3JvdW5kOiAjRTZFQ0ZGO1xuICBwYWRkaW5nOiAxNnB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5ibHVlLWJhbm5lciBpbWcge1xuICB3aWR0aDogMjRweDtcbiAgbWFyZ2luLXJpZ2h0OiAxNHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuaGVhZGVyIC5ibHVlLWJhbm5lciA+IGRpdiBwIHtcbiAgbWFyZ2luOiAwO1xuICBjb2xvcjogIzFFMzJFNjtcbiAgZm9udC1zaXplOiAxNnB4O1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgLyogLnN0YXR1cy1jdGEtYmxvY2sge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRTZFNkU2O1xuICAgICAgICAgIHBhZGRpbmc6IDE2cHggNTVweDtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZSh0YWJsZXQpIHtcbiAgICAgICAgICAgICAgcGFkZGluZzogMTZweCAxNnB4O1xuICAgICAgICAgIH1cbiAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgcGFkZGluZzogMTZweCAxNnB4O1xuICAgICAgICAgIH1cbiAgICAgICAgICBoMSB7XG4gICAgICAgICAgICAgIGNvbG9yOiAjMjIyMjIyO1xuICAgICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtYm93ZXI7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICAgICAgICAgICAgbWFyZ2luOiAxMHB4IDA7XG4gICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKHRhYmxldCkge1xuICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICA+ZGl2IHtcbiAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgICAgICAgbWluLXdpZHRoOiAzMDBweDtcbiAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgICA+ZGl2IHtcbiAgICAgICAgICAgICAgICAgICAgICBtaW4td2lkdGg6IGNhbGMoMTAwJSAtIDMycHgpO1xuICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgID5kaXYge1xuICAgICAgICAgICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMjBweDtcbiAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKHRhYmxldCkge1xuICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDVweCAwO1xuICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDVweCAwO1xuICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICY6bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICBidXR0b24ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJGVycm9yLWNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAkZXJyb3ItY29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnV0dG9uLCBhIHtcbiAgICAgICAgICAgICAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAyMDJweDtcbiAgICAgICAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDIwMnB4O1xuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiMyMjUxRkY7XG4gICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzIyNTFGRjtcbiAgICAgICAgICAgICAgICAgICAgICAmW2Rpc2FibGVkXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjNzU3NTc1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRDBEMEQwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRDBEMEQwO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA+c3BhbiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH0qL1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDQ4cHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkge1xuICAgIG1hcmdpbjogMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogODAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkge1xuICAgIG1hcmdpbjogMDtcbiAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoICsgNTZweCk7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAxMDQ5cHgpIGFuZCAobWF4LXdpZHRoOiAxMjgwcHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkge1xuICAgIG1hcmdpbjogMDtcbiAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoICsgNTZweCk7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IHtcbiAgICBtYXJnaW46IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAucm9vbS1jdGEtYmxvY2sge1xuICBwYWRkaW5nOiAwcHggNTVweDtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5yb29tLWN0YS1ibG9jayAuY3RhLWJsb2NrID4gZGl2Om50aC1jaGlsZCgyKSB7XG4gIG1hcmdpbi1sZWZ0OiAyMXB4O1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnJvb20tY3RhLWJsb2NrIC5jdGEtYmxvY2sgPiBkaXY6bnRoLWNoaWxkKDIpIGJ1dHRvbiB7XG4gIGNvbG9yOiAjRTEyRTQwO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTEyRTQwO1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnJvb20tY3RhLWJsb2NrIC5jdGEtYmxvY2sgYnV0dG9uLCA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAucm9vbS1jdGEtYmxvY2sgLmN0YS1ibG9jayBhIHtcbiAgZmxleDogMTtcbiAgd2lkdGg6IDIwMnB4O1xuICBtaW4td2lkdGg6IDIwMnB4O1xuICBjb2xvcjogIzIyNTFGRjtcbiAgYm9yZGVyOiAxcHggc29saWQgIzIyNTFGRjtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5yb29tLWN0YS1ibG9jayAuY3RhLWJsb2NrIGJ1dHRvbltkaXNhYmxlZF0sIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5yb29tLWN0YS1ibG9jayAuY3RhLWJsb2NrIGFbZGlzYWJsZWRdIHtcbiAgY29sb3I6ICM3NTc1NzU7XG4gIGJhY2tncm91bmQ6ICNEMEQwRDA7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAucm9vbS1jdGEtYmxvY2sgLmN0YS1ibG9jayBidXR0b24gPiBzcGFuLCA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAucm9vbS1jdGEtYmxvY2sgLmN0YS1ibG9jayBhID4gc3BhbiB7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5yb29tLWN0YS1ibG9jayAuY3RhLWJsb2NrIGJ1dHRvbiwgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnJvb20tY3RhLWJsb2NrIC5jdGEtYmxvY2sgYSB7XG4gICAgd2lkdGg6IDE4NXB4O1xuICAgIG1pbi13aWR0aDogMTg1cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAucm9vbS1jdGEtYmxvY2sgLmN0YS1ibG9jayBidXR0b24sIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5yb29tLWN0YS1ibG9jayAuY3RhLWJsb2NrIGEge1xuICAgIHdpZHRoOiAxODVweDtcbiAgICBtaW4td2lkdGg6IDE4NXB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5yb29tLWN0YS1ibG9jayAuY3RhLWJsb2NrIHtcbiAgICBwbGFjZS1jb250ZW50OiBzdHJldGNoIGZsZXgtZW5kO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDQ4cHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnJvb20tY3RhLWJsb2NrIC5jdGEtYmxvY2sge1xuICAgIHBsYWNlLWNvbnRlbnQ6IHN0cmV0Y2ggZmxleC1lbmQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5yb29tLWN0YS1ibG9jayB7XG4gICAgcGFkZGluZzogMHB4IDEwcHg7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBsYWNlLWNvbnRlbnQ6IHN0cmV0Y2ggZmxleC1zdGFydDtcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAucm9vbS1jdGEtYmxvY2sge1xuICAgIHBhZGRpbmc6IDBweCAxMHB4O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwbGFjZS1jb250ZW50OiBzdHJldGNoIGZsZXgtc3RhcnQ7XG4gICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5yb29tLWN0YS1ibG9jayB7XG4gICAgcGFkZGluZzogMHB4IDEwcHg7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBsYWNlLWNvbnRlbnQ6IHN0cmV0Y2ggZmxleC1zdGFydDtcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkgYW5kIChtYXgtd2lkdGg6IDEwNDhweCkge1xuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAucm9vbS1jdGEtYmxvY2sge1xuICAgIHBhZGRpbmc6IDBweCAxMHB4O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwbGFjZS1jb250ZW50OiBzdHJldGNoIGZsZXgtc3RhcnQ7XG4gICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICB9XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAucm9vbS1hZGRyZXNzIHtcbiAgbWF4LWhlaWdodDogMTEwcHg7XG4gIHBhZGRpbmc6IDBweCAyMHB4O1xuICBmbGV4OiAxIDEgYXV0bztcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgbWFyZ2luLXRvcDogMTZweDtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5yb29tLWFkZHJlc3MgLm5hbWUge1xuICBmb250LXdlaWdodDogNzAwO1xuICBmb250LXNpemU6IDQycHg7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAucm9vbS1hZGRyZXNzIC5hZGRyZXNzLWRldGFpbHMge1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAxOHB4O1xuICBwYWRkaW5nLXRvcDogNHB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAucm9vbS1hZGRyZXNzIHtcbiAgICBwYWRkaW5nOiB1bnNldDtcbiAgICBtYXJnaW4tbGVmdDogMTVweDtcbiAgfVxuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAucm9vbS1hZGRyZXNzIC5uYW1lIHtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIGZvbnQtc2l6ZTogMjhweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSBhbmQgKG1heC13aWR0aDogMTA0OHB4KSB7XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5yb29tLWFkZHJlc3Mge1xuICAgIHBhZGRpbmc6IHVuc2V0O1xuICAgIG1hcmdpbi1sZWZ0OiAxNXB4O1xuICB9XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5yb29tLWFkZHJlc3MgLm5hbWUge1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgZm9udC1zaXplOiAyOHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAucm9vbS1hZGRyZXNzIHtcbiAgICBwYWRkaW5nOiB1bnNldDtcbiAgICBtYXJnaW4tbGVmdDogMTVweDtcbiAgfVxuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAucm9vbS1hZGRyZXNzIC5uYW1lIHtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIGZvbnQtc2l6ZTogMjhweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5yb29tLWFkZHJlc3Mge1xuICAgIHBhZGRpbmc6IHVuc2V0O1xuICAgIG1hcmdpbi1sZWZ0OiAxNXB4O1xuICB9XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC5yb29tLWFkZHJlc3MgLm5hbWUge1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgZm9udC1zaXplOiAyOHB4O1xuICB9XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIG1hcmdpbi1ib3R0b206IDUwcHg7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwge1xuICBmbGV4OiAxO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBtYXJnaW46IDE2cHggNTVweDtcbiAgbWluLXdpZHRoOiAzMDBweDtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCAuc2NoZWR1bGUge1xuICBoZWlnaHQ6IDEwMHB4O1xuICBtYXgtaGVpZ2h0OiAyNzBweDtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCAuYm94IGgyIHtcbiAgbWFyZ2luLWJvdHRvbTogMTRweCAhaW1wb3J0YW50O1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsIC5ib3ggLmNvbnRlbnQge1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAyOHB4O1xuICBtYXJnaW46IDFweCAwcHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGNvbG9yOiAjMzMzO1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsIC5ib3ggLmNvbnRlbnQgPiBkaXYge1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCAuaGVpZ2h0LTU4IHtcbiAgaGVpZ2h0OiA1OHB4O1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsIC5oZWlnaHQtNTggPiBoMjpmaXJzdC1vZi10eXBlIHtcbiAgZmxleDogMSAxIGF1dG87XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgYnV0dG9uIHtcbiAgY29sb3I6ICMyMjUxRkY7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGJvcmRlcjogbm9uZTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICB3aWR0aDogNTNweDtcbiAgaGVpZ2h0OiA1MnB4O1xuICBwYWRkaW5nOiB1bnNldDtcbiAgbWluLXdpZHRoOiB1bnNldDtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCBidXR0b24uY3RhIHtcbiAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDtcbiAgd2lkdGg6IDIwMnB4O1xuICBjb2xvcjogIzIyNTFGRjtcbiAgYm9yZGVyOiAxcHggc29saWQgIzIyNTFGRjtcbiAgaGVpZ2h0OiA0OHB4O1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsIGJ1dHRvbi5jdGFbZGlzYWJsZWRdIHtcbiAgYmFja2dyb3VuZDogI0QwRDBEMDtcbiAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgb3BhY2l0eTogMTtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCBidXR0b24gaW1nIHtcbiAgd2lkdGg6IDI0cHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgYnV0dG9uW2Rpc2FibGVkXSB7XG4gIGNvbG9yOiAjNzU3NTc1O1xuICBvcGFjaXR5OiAwLjU7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgLm1lZXRpbmctYm94IHtcbiAgbWF4LWhlaWdodDogMzAwcHg7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgLm1lZXRpbmctYm94IC5jb250ZW50IHtcbiAgbWF4LWhlaWdodDogMTgwcHg7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIG1hcmdpbi10b3A6IDE1cHg7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgLnJvb20tbWFwIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IDI3MXB4O1xuICBmbGV4OiBub25lO1xuICBwYWRkaW5nOiBpbmhlcml0O1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsIC5yb29tLW1hcCA+IGRpdiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCAucm9vbS1tYXAgLnpvb20ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAyMHB4O1xuICB0b3A6IDIwcHg7XG4gIHotaW5kZXg6IDE7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgLnJvb20taGFzLWNhdGVyaW5nIHtcbiAgZmxleDogbm9uZTtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCAucm9vbS1oYXMtY2F0ZXJpbmcgLmNhdGVyaW5nLXRhYmxlIHtcbiAgbWF4LWhlaWdodDogMjU4cHg7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIG1hcmdpbi10b3A6IDE0cHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgLnJvb20taGFzLWNhdGVyaW5nIC5jYXRlcmluZy10YWJsZSB7XG4gICAgbWF4LWhlaWdodDogbm9uZTtcbiAgICBvdmVyZmxvdy15OiBub25lO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsIC5yb29tLWhhcy1jYXRlcmluZyAuY2F0ZXJpbmctdGFibGUge1xuICAgIG1heC1oZWlnaHQ6IG5vbmU7XG4gICAgb3ZlcmZsb3cteTogbm9uZTtcbiAgfVxufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsIC5yZXF1aXJlbWVudHMge1xuICBjb2xvcjogIzIyNTFGRjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsOm50aC1jaGlsZCgxKSB7XG4gICAgbWFyZ2luOiAxNnB4IDEwcHggMCAxMHB4O1xuICB9XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbDpudGgtY2hpbGQoMikge1xuICAgIG1hcmdpbjogMTZweCAxMHB4O1xuICB9XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCA+IGRpdiB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDQ4cHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsOm50aC1jaGlsZCgxKSB7XG4gICAgbWFyZ2luOiAxNnB4IDEwcHggMCAxMHB4O1xuICB9XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbDpudGgtY2hpbGQoMikge1xuICAgIG1hcmdpbjogMTZweCAxMHB4O1xuICB9XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCA+IGRpdiB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwge1xuICAgIG1pbi13aWR0aDogY2FsYygxMDAlIC0gMzJweCk7XG4gIH1cbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsOm50aC1jaGlsZCgxKSB7XG4gICAgbWFyZ2luOiAxNnB4IDEwcHggMCAxMHB4O1xuICB9XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbDpudGgtY2hpbGQoMikge1xuICAgIG1hcmdpbjogMTZweCAxMHB4O1xuICB9XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCA+IGRpdiB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgLm1lZXRpbmctYm94IHtcbiAgICBtYXgtaGVpZ2h0OiBub25lO1xuICB9XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCAubWVldGluZy1ib3ggLmNvbnRlbnQge1xuICAgIG1heC1oZWlnaHQ6IG5vbmU7XG4gICAgb3ZlcmZsb3cteTogbm9uZTtcbiAgICBtYXJnaW4tdG9wOiAxNXB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsIHtcbiAgICBtaW4td2lkdGg6IGNhbGMoMTAwJSAtIDMycHgpO1xuICB9XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbDpudGgtY2hpbGQoMSkge1xuICAgIG1hcmdpbjogMTZweCAxMHB4IDAgMTBweDtcbiAgfVxuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWw6bnRoLWNoaWxkKDIpIHtcbiAgICBtYXJnaW46IDE2cHggMTBweDtcbiAgfVxuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgPiBkaXYge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsIC5tZWV0aW5nLWJveCB7XG4gICAgbWF4LWhlaWdodDogbm9uZTtcbiAgfVxuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgLm1lZXRpbmctYm94IC5jb250ZW50IHtcbiAgICBtYXgtaGVpZ2h0OiBub25lO1xuICAgIG92ZXJmbG93LXk6IG5vbmU7XG4gICAgbWFyZ2luLXRvcDogMTVweDtcbiAgfVxufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsID4gZGl2IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDZweCAxMXB4IDI2cHggMjBweDtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgZmxleDogMTtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCBwIHtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAyOHB4O1xuICBtYXJnaW46IDE1cHggMHB4IDE0cHggMHB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBjb2xvcjogIzMzMztcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCBwIHN0cm9uZyB7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWw6bnRoLWNoaWxkKDEpIHtcbiAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsOm50aC1jaGlsZCgyKSB7XG4gIG1hcmdpbi1sZWZ0OiAxMHB4O1xufVxuOmhvc3QgLmJvb2tpbmctZGV0YWlscyAuZGV0YWlsLWJvZHkgLnYtcGFuZWxzIC52LXBhbmVsIGgyIHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBjb2xvcjogIzAwMDtcbn1cbjpob3N0IC5ib29raW5nLWRldGFpbHMgLmRldGFpbC1ib2R5IC52LXBhbmVscyAudi1wYW5lbCBoMiBpbWcge1xuICBoZWlnaHQ6IDMycHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIG1hcmdpbjogMCA0cHggNHB4IDA7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzIC5kZXRhaWwtYm9keSAudi1wYW5lbHMgLnYtcGFuZWwgaDMge1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzLW1vZGFsLWFjdGlvbnMge1xuICBsZWZ0OiAwO1xuICBib3R0b206IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNFNkU2RTY7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWF4LWhlaWdodDogMTIxcHg7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICA6aG9zdCAuYm9va2luZy1kZXRhaWxzLW1vZGFsLWFjdGlvbnMge1xuICAgIGhlaWdodDogMTZweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIDpob3N0IC5ib29raW5nLWRldGFpbHMtbW9kYWwtYWN0aW9ucyB7XG4gICAgaGVpZ2h0OiAxNnB4O1xuICB9XG59XG46aG9zdCAuYm9va2luZy1kZXRhaWxzLW1vZGFsLWFjdGlvbnMgLm1hdC1kaWFsb2ctYWN0aW9ucyB7XG4gIG1heC13aWR0aDogMjIwcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscy1tb2RhbC1hY3Rpb25zIC5tYXQtZGlhbG9nLWFjdGlvbnMge1xuICAgIHBhZGRpbmc6IDVweCAwO1xuICAgIGhlaWdodDogMjBweDtcbiAgICBtYXgtaGVpZ2h0OiAyMHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgOmhvc3QgLmJvb2tpbmctZGV0YWlscy1tb2RhbC1hY3Rpb25zIC5tYXQtZGlhbG9nLWFjdGlvbnMge1xuICAgIHBhZGRpbmc6IDVweCAwO1xuICAgIGhlaWdodDogMjBweDtcbiAgICBtYXgtaGVpZ2h0OiAyMHB4O1xuICB9XG59IiwiQGltcG9ydCBcInZhcnNcIjtcblxuQG1peGluIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJHNpemUsICRxdWFsaWZpZXIpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBpZiAoJHF1YWxpZmllciA9PSBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIGlmICgkcXVhbGlmaWVyID09IG1heC13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtYXgtd2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBtaXhpbiBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJG1pbiwgJG1heCkge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gdGhpcyBpcyBhIGNvcHkgb2YgcmVzcG9uZC10by4gd2UgZG9uJ3Qgd2FudCB0byBwcmVzZXJ2ZSB0aGF0IG1ldGhvZCBzaW5jZSB0aGUgYnJlYWtwb2ludHMgbWF5IGRpdmVyZ2UgZnJvbSB0aGUgb2xkIFVJLlxuQG1peGluIGlzLXNjcmVlbi1zaXplKCRtZWRpYTogYWxsLCAkb3JpZW50YXRpb246IG5vbmUpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuXG5AbWl4aW4gcGFnZS1wYWRkaW5nIHtcbiAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xufVxuXG4vLyBGb250IE1peGluc1xuJGZvbnQtbWNraW5zZXktc2FuczogXCJNY0tpbnNleSBTYW5zXCI7XG4kZm9udC10aGVpbmhhcmR0OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiRmb250LWJvd2VyOiBcIkJvd2VyXCI7XG5cbkBtaXhpbiBib3dlci1ib2xkIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtYm93ZXI7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIG1ja2luc2V5LXNhbnMge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBkaXNwbGF5LTEge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDRyZW07IC8vIDY0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTg3OyAvLyA3NnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0yIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0zIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTQge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzcmVtOyAvLyA0OHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTY2OyAvLyA1NnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDY0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTUge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuODMzOyAvLyAzNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42NDI7IC8vIDQwcHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTcge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDQ4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjc1cmVtOyAvLyA0NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNTJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICBsaW5lLWhlaWdodDogMS4xMTE7IC8vIDQ0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA0OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0zIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjIyOyAvLyA0NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy00IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy01IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyODhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy02IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTU1OyAvLyAyOHB4XG4gICAgfVxufVxuXG5AbWl4aW4gYm9keS1kZWZhdWx0IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI2cHhcbiAgICB9XG59XG5cbi8vLyBEb2VzbnQgZXhpc3QgaW4gTURTLlxuQG1peGluIGJvZHktdGlueSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07IC8vIDEycHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyMHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZm9ybS1sYWJlbCB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LWZhbWlseTogJGZvbnQtdGhlaW5oYXJkdDtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgY29sb3I6ICRwbGFjZWhvbGRlci1jb2xvcjtcbiAgICBmb250LXdlaWdodDogMzAwO1xufVxuXG5AbWl4aW4gY2hpcC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIGNoZWNrYm94LWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgY29sb3I6IGJsYWNrO1xufVxuXG4vLyBib3JkZXJzXG5cbkBtaXhpbiBtY2stY2hlY2tib3gtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAycHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLXRoaW4tYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlci1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJvcmRlci1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50LWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXItbGlnaHQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5cbi8vIGZ1bmN0aW9uc1xuXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbkBtaXhpbiBtYXgtbGluZXMoJGNvdW50KSB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAtd2Via2l0LWxpbmUtY2xhbXA6ICRjb3VudDtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuXG4vLyBpbWFnZXNcbkBtaXhpbiBtY2staWNvbigkd2lkdGgsICRhc3NldCwgJGhlaWdodDogJHdpZHRoLCAgJGFzc2V0UGF0aDogXCJsaWJzL3VpL3NyYy9saWIvaWNvbnNcIiwpIHtcbiAgICB3aWR0aDogJHdpZHRoO1xuICAgIGhlaWdodDogJGhlaWdodDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIjeyRhc3NldFBhdGh9LyN7JGFzc2V0fVwiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG59XG5cblxuQG1peGluIG1jay1zbWFsbC1pY29uKCRtb2JpbGUtYXNzZXQsICRkZXNrdG9wLWFzc2V0OiAkbW9iaWxlLWFzc2V0KSB7XG4gICAgQGluY2x1ZGUgbWNrLWljb24oMTZweCwgJGFzc2V0OiAkbW9iaWxlLWFzc2V0KTtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oMjRweCwgJGFzc2V0OiAkZGVza3RvcC1hc3NldCk7XG4gICAgfVxufVxuXG4vLyBza2VsZXRvblxuQG1peGluIHNrZWxldG9uLWJnIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItaW1hZ2Utc2l6ZSB7XG4gICAgd2lkdGg6IDgxcHg7XG4gICAgaGVpZ2h0OiA4MnB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMjE5cHg7XG4gICAgICAgIGhlaWdodDogMTE5cHg7XG4gICAgfVxufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItc3RhdHVzLXNpemUge1xuICAgIHdpZHRoOiAxMTdweDtcbiAgICBoZWlnaHQ6IDc4cHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAxMTdweDtcbiAgICAgICAgaGVpZ2h0OiA3OHB4O1xuICAgIH1cbn1cbiIsIkBpbXBvcnQgXCJsaWJzL3VpL3NyYy9saWIvbWl4aW5zXCI7XG5cbjpob3N0IHtcbiAgICA6Om5nLWRlZXAge1xuICAgICAgICAubWF0LWRpYWxvZy1jb250ZW50IHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4gICAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgXG5cbiAgICAubXYtbGFiZWx7XG4gICAgICAgIGNvbG9yOiAjNzU3NTc1O1xuXG4gICAgfVxuXG4gICAgXG5cbiAgICBcblxuXG5cbiAgICAuYm9va2luZy1kZXRhaWxzIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIFxuICAgICAgICBtY2stbW9kYWwge1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDI0cHggIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgICAgICAuaGVhZGVyIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgICAgICBwYWRkaW5nOiAwcHggNTZweCAyMHB4IDU2cHg7XG4gICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0U2RTZFNjtcbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKHRhYmxldCkge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDBweCAwIDAgMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDBweCAwIDAgMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gJi5pcy1yZWN1cnJpbmctYm9keSB7XG4gICAgICAgICAgICAvLyAgICAgaGVpZ2h0OiAyMTdweDtcbiAgICAgICAgICAgIC8vIH1cblxuICAgICAgICAgICAgLnJlY2N1cmluZy1iYW5uZXIge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gICAgICAgICAgICAgICAgbWluLWhlaWdodDogMTI1cHg7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMTVweCAyNXB4O1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMDAwMDAwO1xuXG4gICAgICAgICAgICAgICAgLy8gQGV4dGVuZCAuZmxleC1yb3c7XG4gICAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICAgICAgcGxhY2UtY29udGVudDogY2VudGVyIGZsZXgtc3RhcnQ7XG4gICAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG5cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQGV4dGVuZCAuZmxleC1jb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgcGxhY2UtY29udGVudDogc3RyZXRjaCBmbGV4LXN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICAgICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGltZyB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAyNHB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDE0cHg7XG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC5lZGl0LXJlY3JyaW5nLWN0YSB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLnN0YXR1cy1pbmZvIHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMDBweDtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAucmVjdXJyaW5nLWluZm8taWNvbntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLnN0YXR1cy1oZWFkIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAucmVjdXJyaW5nLXN0YXR1cyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwcHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluLWhlaWdodDogMzVweDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbi1pdGVtczogc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLmJhbm5lci1pbmZvLXR4dCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC5zcGNpZmljLWRhdGUtdG9nZ2xlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAuaGludCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdpZHRoOiAxNDBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHJpYW5nbGVfd2lkdGg6IDEycHg7XG4gICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAkd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogMjhweDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6LWluZGV4OiAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogY2FsYygxZW0gLSAycHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94LXNoYWRvdzogMHB4IDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjIpO1xuICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRyaWFuZ2xlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IC02cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6ICgkd2lkdGggLSAkdHJpYW5nbGVfd2lkdGgpLzI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAkdHJpYW5nbGVfd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJHRyaWFuZ2xlX3dpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJi13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4LWhlaWdodDogMTA2cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLjJlbSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuc3RhdHVzIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDU2cHg7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMTZweCAyNXB4IDE2cHggMjVweDtcbiAgICAgICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgICAgICAgICBpbWcge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDI0cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDE0cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIFxuXG4gICAgICAgICAgICAuYmx1ZS1iYW5uZXIge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNFNkVDRkY7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMTZweDtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICAgICAgLy8gYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAgICAgICAgICAgICAgIGltZyB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAyNHB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDE0cHg7XG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPmRpdiB7XG4gICAgICAgICAgICAgICAgICAgIHAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOjA7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogIzFFMzJFNjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDtcblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IC8vIGhlYWRlclxuXG5cbiAgICAgICAgLmRldGFpbC1ib2R5IHtcbiAgICAgICAgICAgIC8vIHBhZGRpbmc6IDEwNHB4IDAgMTIycHggMDtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgLy8gb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgICAgICAgICAgLy8gaGVpZ2h0OiBjYWxjKDEwMHZoICsgNTZweCk7XG5cbiAgICAgICAgICAgIC8vICYuaXMtcmVjdXJyaW5nLWJvZHkge1xuICAgICAgICAgICAgLy8gICAgIC8vIHBhZGRpbmctdG9wOiAxNjBweDtcbiAgICAgICAgICAgIC8vICAgICBoZWlnaHQ6IGNhbGMoMTAwdmggKyAzMDBweCk7XG4gICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKHRhYmxldCkge1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICAvLyBwYWRkaW5nOiAwcHggMCAxMDZweCAwO1xuXG4gICAgICAgICAgICAgICAgLy8gJi5pcy1yZWN1cnJpbmctYm9keSB7XG4gICAgICAgICAgICAgICAgLy8gICAgIC8vIHBhZGRpbmctdG9wOiAxNTJweDtcbiAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShsYXB0b3ApIHtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICAgICAgLy8gcGFkZGluZzogMHB4IDAgMTA2cHggMDtcbiAgICAgICAgICAgICAgICAvLyBoZWlnaHQ6IGNhbGMoMTAwdmggKyA1NnB4KTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoICsgNTZweCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICAgICAgLy8gcGFkZGluZzogMHB4IDAgODBweCAwO1xuICAgICAgICAgICAgICAgIC8vIGhlaWdodDogY2FsYygxMDB2aCAtIDE4MXB4KTtcbiAgICAgICAgICAgICAgICAvLyBvdmVyZmxvdzogYXV0bztcbiAgICAgICAgICAgICAgICAvLyAmLmlzLXJlY3VycmluZy1ib2R5IHtcbiAgICAgICAgICAgICAgICAvLyAgICAgLy8gcGFkZGluZy10b3A6IDE3MHB4O1xuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAucm9vbS1jdGEtYmxvY2sge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDBweCA1NXB4O1xuICAgICAgICAgICAgICAgIC5jdGEtYmxvY2sge1xuICAgICAgICAgICAgICAgICAgICA+ZGl2Om50aC1jaGlsZCgyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDoyMXB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJGVycm9yLWNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICRlcnJvci1jb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uLCBhIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMjAycHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDIwMnB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IzIyNTFGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMyMjUxRkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAmW2Rpc2FibGVkXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICM3NTc1NzU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI0QwRDBEMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRDBEMEQwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9wYWNpdHk6IDAuNztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5zcGFuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1pbi13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTg1cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiAxODVweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKHRhYmxldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2UtY29udGVudDogc3RyZXRjaCBmbGV4LWVuZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwcHggMTBweDtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgICAgICBwbGFjZS1jb250ZW50OiBzdHJldGNoIGZsZXgtc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUodGFibGV0KSB7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDBweCAxMHB4O1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlLWNvbnRlbnQ6IHN0cmV0Y2ggZmxleC1zdGFydDtcbiAgICAgICAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gICAgICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5yb29tLWFkZHJlc3Mge1xuICAgICAgICAgICAgICAgIG1heC1oZWlnaHQ6IDExMHB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDBweCAyMHB4O1xuICAgICAgICAgICAgICAgIGZsZXg6IDEgMSBhdXRvO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgICAgICAgICAgICAgLy8gbWFyZ2luOiAxNnB4IDU1cHggMHB4IDU1cHg7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMTZweDtcbiAgICAgICAgICAgICAgICAubmFtZSB7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogNDJweDtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAuYWRkcmVzcy1kZXRhaWxzIHtcbiAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMThweDtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZy10b3A6IDRweDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZSh0YWJsZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogdW5zZXQ7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxNXB4O1xuICAgICAgICAgICAgICAgICAgICAubmFtZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAyOHB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiB1bnNldDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDE1cHg7XG4gICAgICAgICAgICAgICAgICAgIC5uYW1lIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDI4cHg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC52LXBhbmVscyB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA1MHB4O1xuICAgICAgICAgICAgICAgIC52LXBhbmVsIHtcbiAgICAgICAgICAgICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxNnB4IDU1cHg7XG4gICAgICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMzAwcHg7XG5cbiAgICAgICAgICAgICAgICAgICAgLnNjaGVkdWxlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTAwcHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiAyNzBweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC5ib3h7XG4gICAgICAgICAgICAgICAgICAgICAgICBoMntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAuY29udGVudHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxcHggMHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICMzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPmRpdiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC5oZWlnaHQtNTgge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA1OHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgPmgyOmZpcnN0LW9mLXR5cGUge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXg6IDEgMSBhdXRvO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpZHRoOiAyMDJweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiMyMjUxRkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBib3JkZXI6IDFweCBzb2xpZCAjMjI1MUZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hcmdpbi1yaWdodDogMTNweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhlaWdodDogNzNweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpZHRoOiBhdXRvO1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDUzcHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDUycHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiB1bnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbi13aWR0aDogdW5zZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICYuY3Rhe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDIwMnB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjMjI1MUZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMyMjUxRkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0OHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICZbZGlzYWJsZWRdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI0QwRDBEMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGltZyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDI0cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICZbZGlzYWJsZWRdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogIzc1NzU3NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1pbi13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbWcge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB3aWR0aDogMjRweDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgbWFyZ2luLXJpZ2h0OiAxNHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAubWVldGluZy1ib3h7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiAzMDBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jb250ZW50IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiAxODBweDsgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAxNXB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLnJvb20tbWFwIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMjcxcHg7IFxuICAgICAgICAgICAgICAgICAgICAgICAgZmxleDogbm9uZTsgXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBpbmhlcml0O1xuICAgICAgICAgICAgICAgICAgICAgICAgPmRpdiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLnpvb20ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodDogMjBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IDIwcHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC5yb29tLWhhcy1jYXRlcmluZyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbGV4Om5vbmU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRlcmluZy10YWJsZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4LWhlaWdodDogMjU4cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAxNHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKHRhYmxldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4LWhlaWdodDogbm9uZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3cteTogbm9uZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAucmVxdWlyZW1lbnRzIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiMyMjUxRkY7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBcblxuXG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKHRhYmxldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJjpudGgtY2hpbGQoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMTZweCAxMHB4IDAgMTBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICY6bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDE2cHggMTBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5kaXYge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbi13aWR0aDogY2FsYygxMDAlIC0gIDMycHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJjpudGgtY2hpbGQoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMTZweCAxMHB4IDAgMTBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICY6bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDE2cHggMTBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5kaXYge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAubWVldGluZy1ib3h7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4LWhlaWdodDogbm9uZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY29udGVudCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heC1oZWlnaHQ6IG5vbmU7IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdy15OiBub25lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAxNXB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA+IGRpdiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDZweCAxMXB4IDI2cHggMjBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDE1cHggMHB4IDE0cHggMHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb25nIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICY6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAmOm50aC1jaGlsZCgyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogMTBweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBoMiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDAgNHB4IDRweCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGgzIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cblxuXG4gICAgICAgIC8qIC5zdGF0dXMtY3RhLWJsb2NrIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0U2RTZFNjtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNnB4IDU1cHg7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUodGFibGV0KSB7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDE2cHggMTZweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDE2cHggMTZweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaDEge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogIzIyMjIyMjtcbiAgICAgICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LWJvd2VyO1xuICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDI0cHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMTBweCAwO1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZSh0YWJsZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPmRpdiB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICAgICAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMzAwcHg7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgICAgICAgICAgPmRpdiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiBjYWxjKDEwMCUgLSAzMnB4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA+ZGl2IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZSh0YWJsZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiA1cHggMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiA1cHggMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAmOm50aC1jaGlsZCgyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICRlcnJvci1jb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJGVycm9yLWNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbiwgYSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMjAycHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiAyMDJweDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjojMjI1MUZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMyMjUxRkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJltkaXNhYmxlZF0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogIzc1NzU3NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI0QwRDBEMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPnNwYW4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9Ki9cblxuICAgICAgICAgICAgXG5cbiAgICAgICAgXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuYm9va2luZy1kZXRhaWxzLW1vZGFsLWFjdGlvbnMge1xuICAgICAgICAvLyBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI0U2RTZFNjtcbiAgICAgICAgLy8gei1pbmRleDogMTtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyBcbiAgICAgICAgbWF4LWhlaWdodDogMTIxcHg7XG5cbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgfVxuICAgICAgICAubWF0LWRpYWxvZy1hY3Rpb25zIHtcbiAgICAgICAgICAgIG1heC13aWR0aDogMjIwcHg7XG4gICAgICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDVweCAwO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMjBweDtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG59XG5cbiJdfQ== */"] }); /*@__PURE__*/ @@ -54393,7 +55305,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons type: core_1.Component, args: [{ selector: 'app-booking-details-modal', - template: "\n
\n
 
\n
\n \n

Your booking date and/or time was successfully updated

\n \n
\n
\n \n

{{ warningMessage }}

\n \n
\n \n
\n
\n
\n
\n \n Recurring booking status: {{ statusText }} \n
\n
\n \n
\n \n This is one occurrence in a recurring series which occurs every {{recurrence_interval > 1 ? recurrence_interval + ' Days' : 'Day'}} effective {{ _data?.master_booking?.dateString }} until {{ _data?.master_booking?.endDateString }}.\n \n \n This is one occurrence in a recurring series which occurs every {{recurrence_interval > 1 ? recurrence_interval + ' Weeks' : 'Week'}} effective {{ _data?.master_booking?.dateString }} until {{ _data?.master_booking?.endDateString }}.\n \n \n This is one occurrence in a recurring series which occurs every {{recurrence_interval > 1 ? recurrence_interval + ' Months' : 'Month'}} effective {{ _data?.master_booking?.dateString }} until {{ _data?.master_booking?.endDateString }}.\n \n \n This is one occurrence in a recurring series which occurs on Specific Dates effective {{ _data?.master_booking?.dateString }} until {{ _data?.master_booking?.endDateString }}\n
\n
\n
\n
{{ occurrence.dateTz.formatDate('dd MMM yyyy') }}
\n
\n
\n
\n
\n
\n
\n
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n Edit series\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n
\n
\n\n
\n
\n

Booking {{ statusText.toLowerCase() }}

\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t {{timeString}} \n
\n
\n
\n \n
\n

This is a multiroom booking. To request edits, please contact your local backoffice team.

\n
\n
\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n
\n

\n \n {{title}}\n

\n

\n Date: {{dateString}}
\n Time: {{timeString}}
\n {{type}} meeting ({{durationString}})\n

\n\n \n Edit date or time\n \n\n

\n Address: {{roomLocation}}
\n Room: {{roomName}}
\n Capacity: {{capacity}}\n

\n\n
\n
\n \n
\n\n \n
\n\n \n {{ checkingExtendable ? 'Checking availability...' : 'Extend booking duration'}}\n \n
\n
\n

\n \n

\n

\n \n \n \n

\n \n \n

\n \n \n \n

\n \n \n
\n
\n
\n
\n

\n \n Booking Details\n

\n

Host: {{host}}

\n

Attendees: {{attendeesString}}

\n

Company: {{companyString}}

\n

Charge code: {{chargeCode}}

\n

Headcount estimate: {{headcount}}

\n

Additional requirements: {{requirements}}

\n\t\t\t\t\t\t\t\t

Email notification for this booking has been opt out.

\n\n \n Update details\n \n
\n
\n

\n \n Catering\n

\n

Catering available for this room

\n \n Add catering\n \n\n \n
\n
\n
\n
\n

\n \n

\n \n \n \n \n \n \n
\n
\n

\n \n

\n

\n \n

\n \n
\n
\n
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n
\n\t\t\t\t\n \n\n \n
\n\n \n\n
\n \n \n
\n
\n \n
\n ", + templateUrl: 'booking-details-modal.component.html', styleUrls: ['./booking-details-modal.component.scss'] }] }], function () { @@ -54909,10 +55821,17 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons function BookingResultItemComponent_ng_container_12_span_6_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "span", 29); - i0.ɵɵtext(1, " Multiroom "); + i0.ɵɵelementStart(0, "span", 25); + i0.ɵɵtext(1); i0.ɵɵelementEnd(); } + + if (rf & 2) { + var ctx_r14 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("ngClass", ctx_r14.viewModel.booking.merged ? "merged" : "multiroom"); + i0.ɵɵadvance(1); + i0.ɵɵtextInterpolate1(" ", (ctx_r14.viewModel.booking == null ? null : ctx_r14.viewModel.booking.merged) ? "Merged" : "Multiroom", " "); + } } function BookingResultItemComponent_ng_container_12_Template(rf, ctx) { @@ -54927,7 +55846,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons i0.ɵɵelementStart(4, "span", 25); i0.ɵɵtext(5); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(6, BookingResultItemComponent_ng_container_12_span_6_Template, 2, 0, "span", 26); + i0.ɵɵtemplate(6, BookingResultItemComponent_ng_container_12_span_6_Template, 2, 2, "span", 26); i0.ɵɵelementStart(7, "button", 27); i0.ɵɵlistener("click", function BookingResultItemComponent_ng_container_12_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r16); @@ -54957,7 +55876,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons function BookingResultItemComponent_ng_container_13_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); - i0.ɵɵelement(1, "ngx-skeleton-loader", 30); + i0.ɵɵelement(1, "ngx-skeleton-loader", 29); i0.ɵɵelementContainerEnd(); } } @@ -54965,7 +55884,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons function BookingResultItemComponent_ng_container_15_span_13_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span"); - i0.ɵɵelement(1, "img", 36); + i0.ɵɵelement(1, "img", 35); i0.ɵɵtext(2, "Catered"); i0.ɵɵelementEnd(); } @@ -54974,20 +55893,20 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons function BookingResultItemComponent_ng_container_15_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); - i0.ɵɵelementStart(1, "span", 31); - i0.ɵɵelement(2, "img", 32); + i0.ɵɵelementStart(1, "span", 30); + i0.ɵɵelement(2, "img", 31); i0.ɵɵtext(3); i0.ɵɵelementEnd(); i0.ɵɵelementStart(4, "span"); - i0.ɵɵelement(5, "img", 33); + i0.ɵɵelement(5, "img", 32); i0.ɵɵtext(6); i0.ɵɵelementEnd(); i0.ɵɵelementStart(7, "span"); - i0.ɵɵelement(8, "img", 34); + i0.ɵɵelement(8, "img", 33); i0.ɵɵtext(9); i0.ɵɵelementEnd(); i0.ɵɵelementStart(10, "span"); - i0.ɵɵelement(11, "img", 35); + i0.ɵɵelement(11, "img", 34); i0.ɵɵtext(12); i0.ɵɵelementEnd(); i0.ɵɵtemplate(13, BookingResultItemComponent_ng_container_15_span_13_Template, 3, 0, "span", 0); @@ -55014,11 +55933,11 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons function BookingResultItemComponent_ng_container_16_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); - i0.ɵɵelement(1, "ngx-skeleton-loader", 37); - i0.ɵɵelement(2, "ngx-skeleton-loader", 38); - i0.ɵɵelement(3, "ngx-skeleton-loader", 37); - i0.ɵɵelement(4, "ngx-skeleton-loader", 30); - i0.ɵɵelement(5, "ngx-skeleton-loader", 30); + i0.ɵɵelement(1, "ngx-skeleton-loader", 36); + i0.ɵɵelement(2, "ngx-skeleton-loader", 37); + i0.ɵɵelement(3, "ngx-skeleton-loader", 36); + i0.ɵɵelement(4, "ngx-skeleton-loader", 29); + i0.ɵɵelement(5, "ngx-skeleton-loader", 29); i0.ɵɵelementContainerEnd(); } } @@ -55220,7 +56139,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons features: [i0.ɵɵInheritDefinitionFeature], decls: 17, vars: 13, - consts: [[4, "ngIf"], [1, "mck-row", "result-container"], [1, "result-row", "datetime"], [1, "card"], [1, "result-row", "status", 3, "ngClass"], ["class", "mck-skeleton-status", 4, "ngIf"], [1, "result-row", "panel"], ["class", "mobile-only-cta", 3, "click", 4, "ngIf"], [1, "result-row", "title"], [1, "result-row", "text"], [1, "status-block"], [1, "booking-tz-display"], ["class", "local-tz-display", 4, "ngIf"], [1, "local-tz-display"], [1, "mck-skeleton-line-80p"], [1, "mck-skeleton-line-2"], [1, "mck-skeleton-line-30p"], [1, "message"], [3, "src"], [1, "time"], [1, "mck-skeleton-status"], [1, "mobile-only-cta", 3, "click"], ["alt", "Right Arrow", "aria-label", "Details Arrow", 1, "right-arrow"], ["trigger", "hover", "position", "below", "class", "recurring-info-icon", "src", "assets/icon/recurring-data-icon.svg", 3, "tooltip", 4, "ngIf"], [1, "type-title"], [1, "type-text", 3, "ngClass"], ["class", "type-text multiroom", 4, "ngIf"], ["mat-ripple", "", 3, "click"], ["trigger", "hover", "position", "below", "src", "assets/icon/recurring-data-icon.svg", 1, "recurring-info-icon", 3, "tooltip"], [1, "type-text", "multiroom"], [1, "mck-skeleton-line-50p"], ["trigger", "hover", "position", "below", 3, "tooltip"], ["src", "assets/icon/room-icon.svg"], ["src", "assets/icon/location-icon.svg"], ["src", "assets/icon/host-icon.svg"], ["src", "assets/icon/attendees-icon.svg"], ["src", "assets/icon/catering-icon.svg"], [1, "mck-skeleton-line-3"], [1, "mck-skeleton-line-70p"]], + consts: [[4, "ngIf"], [1, "mck-row", "result-container"], [1, "result-row", "datetime"], [1, "card"], [1, "result-row", "status", 3, "ngClass"], ["class", "mck-skeleton-status", 4, "ngIf"], [1, "result-row", "panel"], ["class", "mobile-only-cta", 3, "click", 4, "ngIf"], [1, "result-row", "title", "tag"], [1, "result-row", "text"], [1, "status-block"], [1, "booking-tz-display"], ["class", "local-tz-display", 4, "ngIf"], [1, "local-tz-display"], [1, "mck-skeleton-line-80p"], [1, "mck-skeleton-line-2"], [1, "mck-skeleton-line-30p"], [1, "message"], [3, "src"], [1, "time"], [1, "mck-skeleton-status"], [1, "mobile-only-cta", 3, "click"], ["alt", "Right Arrow", "aria-label", "Details Arrow", 1, "right-arrow"], ["trigger", "hover", "position", "below", "class", "recurring-info-icon", "src", "assets/icon/recurring-data-icon.svg", 3, "tooltip", 4, "ngIf"], [1, "type-title"], [1, "type-text", 3, "ngClass"], ["class", "type-text ", 3, "ngClass", 4, "ngIf"], ["mat-ripple", "", 3, "click"], ["trigger", "hover", "position", "below", "src", "assets/icon/recurring-data-icon.svg", 1, "recurring-info-icon", 3, "tooltip"], [1, "mck-skeleton-line-50p"], ["trigger", "hover", "position", "below", 3, "tooltip"], ["src", "assets/icon/room-icon.svg"], ["src", "assets/icon/location-icon.svg"], ["src", "assets/icon/host-icon.svg"], ["src", "assets/icon/attendees-icon.svg"], ["src", "assets/icon/catering-icon.svg"], [1, "mck-skeleton-line-3"], [1, "mck-skeleton-line-70p"]], template: function BookingResultItemComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵtemplate(0, BookingResultItemComponent_h3_0_Template, 4, 2, "h3", 0); @@ -55276,7 +56195,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } }, directives: [i2.NgIf, i2.NgClass, i3.NgxSkeletonLoaderComponent, i4.MatRipple, i5.TooltipDirective], - styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\nh3[_ngcontent-%COMP%] {\n color: #000000;\n font-family: \"McKinsey Sans\";\n font-size: 24px;\n font-weight: 500;\n padding: 20px 0 0 0;\n margin: 0;\n}\nh3[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-weight: 100;\n}\n.result-container[_ngcontent-%COMP%] {\n width: 100%;\n padding: 0;\n display: block;\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n position: relative;\n}\n.result-container[_ngcontent-%COMP%] .card[_ngcontent-%COMP%]:hover {\n box-shadow: rgba(0, 0, 0, 0.2) 0px 2px 21px;\n transition: box-shadow 0.3s ease-in-out;\n cursor: pointer;\n}\n.result-container[_ngcontent-%COMP%] .result-row[_ngcontent-%COMP%] {\n width: 100%;\n padding: 0;\n position: relative;\n display: block;\n clear: both;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n font-weight: normal;\n font-size: 16px;\n line-height: 20px;\n}\n.result-container[_ngcontent-%COMP%] .result-row[_ngcontent-%COMP%] img.recurring-info-icon[_ngcontent-%COMP%] {\n width: 20px;\n margin-right: 14px;\n vertical-align: middle;\n}\n.result-container[_ngcontent-%COMP%] .result-row.datetime[_ngcontent-%COMP%] {\n padding: 15px 0;\n color: #000;\n font-size: 18px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.datetime[_ngcontent-%COMP%] .status-block[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n.result-container[_ngcontent-%COMP%] .result-row.datetime[_ngcontent-%COMP%] .status-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n}\n.result-container[_ngcontent-%COMP%] .result-row.datetime[_ngcontent-%COMP%] .status-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n.result-container[_ngcontent-%COMP%] .result-row.status[_ngcontent-%COMP%] {\n padding: 16px 18px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n position: relative;\n font-size: 16px;\n line-height: 24px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .message[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n}\n.result-container[_ngcontent-%COMP%] .result-row.status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .message[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 20px;\n vertical-align: sub;\n margin-right: 5px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .time[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n position: absolute;\n top: 0;\n right: 0;\n}\n.result-container[_ngcontent-%COMP%] .result-row.status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n min-width: 88px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.panel[_ngcontent-%COMP%] {\n padding: 20px 18px;\n background-color: white;\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2);\n}\n.result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] {\n color: #000;\n font-weight: 500;\n font-size: 18px;\n width: 100%;\n position: relative;\n line-height: 26px;\n display: flex;\n padding-right: 120px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-text[_ngcontent-%COMP%] {\n margin-left: 15px;\n border-radius: 4px;\n padding: 0 10px;\n font-family: \"McKinsey Sans\";\n font-size: 14px;\n color: #333333;\n max-height: 24px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-text.internal[_ngcontent-%COMP%] {\n background-color: #033B6F;\n color: white;\n}\n.result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-text.external[_ngcontent-%COMP%] {\n background-color: #FAA082;\n}\n.result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-text.partner[_ngcontent-%COMP%] {\n background-color: #39BDF3;\n}\n.result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-text.multiroom[_ngcontent-%COMP%] {\n background-color: #FFD048;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-text[_ngcontent-%COMP%] {\n position: absolute;\n right: 0;\n top: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-text[_ngcontent-%COMP%] {\n position: absolute;\n right: 0;\n top: 0;\n }\n}\n.result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n position: absolute;\n right: 0;\n top: -6px;\n display: block;\n color: #333333;\n border: 1px solid #D0D0D0;\n background-color: transparent;\n padding: 6px 10px;\n font-size: 16px;\n line-height: 24px;\n cursor: pointer;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] {\n padding-right: 10px;\n }\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-title[_ngcontent-%COMP%] {\n width: calc(100% - 75px);\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] {\n padding-right: 10px;\n }\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-title[_ngcontent-%COMP%] {\n width: calc(100% - 75px);\n }\n}\n.result-container[_ngcontent-%COMP%] .result-row.text[_ngcontent-%COMP%] {\n color: #333333;\n padding: 18px 10px 0 0;\n}\n.result-container[_ngcontent-%COMP%] .result-row.text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n display: inline-block;\n padding: 3px 12px;\n border-right: 1px solid #979797;\n}\n.result-container[_ngcontent-%COMP%] .result-row.text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n margin-right: 5px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.text[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:nth-child(1) {\n padding-left: 0;\n}\n.result-container[_ngcontent-%COMP%] .result-row.text[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:last-child {\n border-right: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .result-container[_ngcontent-%COMP%] .result-row.text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: block;\n clear: both;\n border: 0;\n padding: 3px 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .result-container[_ngcontent-%COMP%] .result-row.text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: block;\n clear: both;\n border: 0;\n padding: 3px 0;\n }\n}\n.result-container[_ngcontent-%COMP%] .result-row[_ngcontent-%COMP%] .mobile-only-cta[_ngcontent-%COMP%] {\n display: none;\n z-index: 2;\n position: absolute;\n right: 0;\n top: 0;\n width: 100%;\n height: 100%;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .result-container[_ngcontent-%COMP%] .result-row[_ngcontent-%COMP%] .mobile-only-cta[_ngcontent-%COMP%] {\n display: block;\n cursor: pointer;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .result-container[_ngcontent-%COMP%] .result-row[_ngcontent-%COMP%] .mobile-only-cta[_ngcontent-%COMP%] {\n display: block;\n cursor: pointer;\n }\n}\n.result-container[_ngcontent-%COMP%] .result-row[_ngcontent-%COMP%] .mobile-only-cta[_ngcontent-%COMP%] .right-arrow[_ngcontent-%COMP%] {\n position: absolute;\n right: 10px;\n top: 72px;\n}\n.right-arrow[_ngcontent-%COMP%] {\n width: 30px !important;\n height: 30px !important;\n width: 24px;\n height: 24px;\n background-image: url('arrow-right.svg');\n background-size: contain;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .right-arrow[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('arrow-right-large.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .right-arrow[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('arrow-right-large.svg');\n background-size: contain;\n }\n}\n.booking-tz-display[_ngcontent-%COMP%] {\n font-size: 1.25rem;\n}\n.local-tz-display[_ngcontent-%COMP%] {\n font-size: 1rem;\n color: #757575;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLXJlc3VsdC1pdGVtL2Jvb2tpbmctcmVzdWx0LWl0ZW0uY29tcG9uZW50LnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9ub2RlX21vZHVsZXMvQGFuZ3VsYXIvbWF0ZXJpYWwvX3RoZW1pbmcuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2FwcHMvc3RhZmYvc3JjL2FwcC9ib29raW5nL2Jvb2tpbmctcmVzdWx0LWl0ZW0vYm9va2luZy1yZXN1bHQtaXRlbS5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNpbENBLGtDQUFBO0FBdWlEQSwyQ0FBQTtBQXdDQSxxQkFBQTtBQ2wrRkE7RUFDSSxjQUFBO0VBQ0EsNEJGa0ZpQjtFRWpGakIsZUFBQTtFQUNBLGdCQUFBO0VBQ0EsbUJBQUE7RUFDQSxTQUFBO0FIb0JKO0FHbkJJO0VBQ0ksZ0JBQUE7QUhxQlI7QUdsQkE7RUFDSSxXQUFBO0VBQ0EsVUFBQTtFQUNBLGNBQUE7RUR5ZEYsd0hBQUE7RUN2ZEUsa0JBQUE7QUhxQko7QUdwQkk7RUFDSSwyQ0FBQTtFQUNBLHVDQUFBO0VBQ0EsZUFBQTtBSHNCUjtBR3BCSTtFQUNJLFdBQUE7RUFDQSxVQUFB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QUFBO0VBQ0EsdUJBQUE7RUZtSUEsV0YzT1U7RUU0T1YsWUY1T1U7RUU2T1Ysd0NBQUE7RUFDQSx3QkFBQTtBRDVFSjtBQ25RWTtFRXVNWjtJRnFJSSxXRnpPVTtJRTBPVixZRjFPVTtJRTJPViw4Q0FBQTtJQUNBLHdCQUFBO0VEckVGO0FBQ0Y7QUMzUVk7RUV1TVo7SUZxSUksV0Z6T1U7SUUwT1YsWUYxT1U7SUUyT1YsOENBQUE7SUFDQSx3QkFBQTtFRDdERjtBQUNGO0FHbkVBO0VBQ0ksa0JBQUE7QUhzRUo7QUduRUE7RUFDSSxlQUFBO0VBQ0EsY0FBQTtBSHNFSiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLXJlc3VsdC1pdGVtL2Jvb2tpbmctcmVzdWx0LWl0ZW0uY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIkcHJpbWFyeTogIzFGNDBFNjtcbiRmb3JtLWxhYmVsOiAjMDUxQzJDO1xuJHNlY29uZGFyeS1sYWJlbDogIzc2NzY3NjtcbiRib3JkZXI6ICNCM0IzQjM7XG4kYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDogI0QwRDBEMDtcbiRjaGlwLWNvbG9yOiAjMzMzMzMzO1xuJHBsYWNlaG9sZGVyLWNvbG9yOiAjN0Y3RjdGO1xuJGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4kcGFnZS1iYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuJHNlbGVjdGVkLW9wdGlvbjogI0U2RTZFNjtcbiRjb2xvci1icmFuZC15ZWxsb3c6ICNmZmQwNDg7XG4kbGlnaHQteWVsbG93OiAjZmZmM2NlO1xuJGNvYWNobWFyay10ZXh0OiAjNmY0ZDAwO1xuJGVycm9yLWNvbG9yOiAjRTEyRTQwO1xuJG5vLWZpbHRlcnMtY29sb3I6ICNCQ0JDQkM7XG4kcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I6ICNGNEY0RjQ7XG4kcHJpbWFyeS1oaWdobGlnaHQ6ICMyMjUxRkY7XG4kc2Nyb2xsYmFyLWNvbG9yOiAjNzU3NTc1O1xuXG4kYXZhaWxhYmxlLWNvbG9yOiAjNUQ5RDUyO1xuJGF2YWlsYWJsZS1ieS1yZXF1ZXN0LWNvbG9yOiAjRjVCNTNGO1xuJGluLXVzZS1jb2xvcjogI0Q0NDgzRTtcbiRub3QtYm9va2FibGUtY29sb3I6ICNDQ0NDQ0M7XG5cbiRtb2RhbC1ib2R5LWhlYWRpbmc6ICM0RDRENEQ7XG4kYWxlcnQtb3ZlcmxheS1iZzogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2FjaG1hcmstYmc6ICNFQkVCRjY7XG4kY29hY2htYXJrLWRhcmstdGV4dDogIzFCMUIxOTtcbiRlcnJvci10ZXh0OiAjZmZmO1xuXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuXG4vLyA0cHhcbiRzcGFjaW5nLXNtYWxsZXN0OiAwLjI1cmVtO1xuXG4vLyA4cHhcbiRzcGFjaW5nLXh4c21hbGw6IDAuNXJlbTtcblxuLy8gMTJweFxuJHNwYWNpbmcteHNtYWxsOiAwLjc1cmVtO1xuXG4vLyAxNnB4XG4kc3BhY2luZy1zbWFsbDogMXJlbTtcblxuLy8gMjBweFxuJHNwYWNpbmctc21hbGwtbWVkaXVtOiAxLjI1cmVtO1xuXG4vLyAyNHB4XG4kc3BhY2luZy1tZWRpdW06IDEuNXJlbTtcblxuLy8gMjhweFxuJHNwYWNpbmctbWVkaXVtLWxhcmdlOiAxLjc1cmVtO1xuXG4vLyAzMnB4XG4kc3BhY2luZy1sYXJnZTogMnJlbTtcblxuLy8gNDhweFxuJHNwYWNpbmcteGxhcmdlOiAzcmVtO1xuXG4vLyA2NHB4XG4kc3BhY2luZy14eGxhcmdlOiA0cmVtO1xuXG4vLyA5NnB4XG4kc3BhY2luZy1sYXJnZXN0OiA2cmVtO1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGRldmljZS1tb2JpbGUtc2l6ZTogNDUwcHg7XG4kZGV2aWNlLXRhYmxldC1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFwdG9wLXNpemU6IDEwMjRweDtcblxuJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemU6IDgwMHB4O1xuJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemU6IDEwNDhweDtcbiRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplOiAxMjgwcHg7XG5cblxuOmV4cG9ydCB7XG4gICAgcHJpbWFyeTogJHByaW1hcnk7XG4gICAgc2Vjb25kYXJ5TGFiZWw6ICRzZWNvbmRhcnktbGFiZWw7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4kaWNvbi1zbWFsbDogMTZweDtcbiRpY29uLW1lZGl1bTogMjRweDtcbiRpY29uLWxhcmdlOiAzMnB4O1xuJGljb24teGxhcmdlOiA0OHB4O1xuIiwiLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG4vKiBUaGVtZSBmb3IgdGhlIHJpcHBsZSBlbGVtZW50cy4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF0ZXJpYWwvbm8tcHJlZml4ZXMgKi9cbi8qIHN0eWxlbGludC1lbmFibGUgKi9cbmgzIHtcbiAgY29sb3I6ICMwMDAwMDA7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgZm9udC1zaXplOiAyNHB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBwYWRkaW5nOiAyMHB4IDAgMCAwO1xuICBtYXJnaW46IDA7XG59XG5oMyBzcGFuIHtcbiAgZm9udC13ZWlnaHQ6IDEwMDtcbn1cblxuLnJlc3VsdC1jb250YWluZXIge1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJveC1zaGFkb3c6IDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLnJlc3VsdC1jb250YWluZXIgLmNhcmQ6aG92ZXIge1xuICBib3gtc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMikgMHB4IDJweCAyMXB4O1xuICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuM3MgZWFzZS1pbi1vdXQ7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93IHtcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGNsZWFyOiBib3RoO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBsaW5lLWhlaWdodDogMjBweDtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93IGltZy5yZWN1cnJpbmctaW5mby1pY29uIHtcbiAgd2lkdGg6IDIwcHg7XG4gIG1hcmdpbi1yaWdodDogMTRweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LmRhdGV0aW1lIHtcbiAgcGFkZGluZzogMTVweCAwO1xuICBjb2xvcjogIzAwMDtcbiAgZm9udC1zaXplOiAxOHB4O1xufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cuZGF0ZXRpbWUgLnN0YXR1cy1ibG9jayB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LmRhdGV0aW1lIC5zdGF0dXMtYmxvY2sgPiBkaXYge1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy5kYXRldGltZSAuc3RhdHVzLWJsb2NrID4gZGl2IHNwYW4ge1xuICBmb250LXdlaWdodDogNTAwO1xufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cuc3RhdHVzIHtcbiAgcGFkZGluZzogMTZweCAxOHB4O1xufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cuc3RhdHVzID4gZGl2IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cuc3RhdHVzID4gZGl2IC5tZXNzYWdlIHtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cuc3RhdHVzID4gZGl2IC5tZXNzYWdlIGltZyB7XG4gIHdpZHRoOiAyMHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogc3ViO1xuICBtYXJnaW4tcmlnaHQ6IDVweDtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnN0YXR1cyA+IGRpdiAudGltZSB7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cuc3RhdHVzID4gZGl2IHAge1xuICBtYXJnaW46IDA7XG4gIG1pbi13aWR0aDogODhweDtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnBhbmVsIHtcbiAgcGFkZGluZzogMjBweCAxOHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm94LXNoYWRvdzogMHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMik7XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSB7XG4gIGNvbG9yOiAjMDAwO1xuICBmb250LXdlaWdodDogNTAwO1xuICBmb250LXNpemU6IDE4cHg7XG4gIHdpZHRoOiAxMDAlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGxpbmUtaGVpZ2h0OiAyNnB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nLXJpZ2h0OiAxMjBweDtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnRpdGxlIC50eXBlLXRleHQge1xuICBtYXJnaW4tbGVmdDogMTVweDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBwYWRkaW5nOiAwIDEwcHg7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBjb2xvcjogIzMzMzMzMztcbiAgbWF4LWhlaWdodDogMjRweDtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnRpdGxlIC50eXBlLXRleHQuaW50ZXJuYWwge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDMzQjZGO1xuICBjb2xvcjogd2hpdGU7XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSAudHlwZS10ZXh0LmV4dGVybmFsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0ZBQTA4Mjtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnRpdGxlIC50eXBlLXRleHQucGFydG5lciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzOUJERjM7XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSAudHlwZS10ZXh0Lm11bHRpcm9vbSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGRkQwNDg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSAudHlwZS10ZXh0IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IDA7XG4gICAgdG9wOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cudGl0bGUgLnR5cGUtdGV4dCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAwO1xuICAgIHRvcDogMDtcbiAgfVxufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cudGl0bGUgYnV0dG9uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMDtcbiAgdG9wOiAtNnB4O1xuICBkaXNwbGF5OiBibG9jaztcbiAgY29sb3I6ICMzMzMzMzM7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBwYWRkaW5nOiA2cHggMTBweDtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBsaW5lLWhlaWdodDogMjRweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSBidXR0b24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSBidXR0b24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnRpdGxlIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xuICB9XG4gIC5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnRpdGxlIC50eXBlLXRpdGxlIHtcbiAgICB3aWR0aDogY2FsYygxMDAlIC0gNzVweCk7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSB7XG4gICAgcGFkZGluZy1yaWdodDogMTBweDtcbiAgfVxuICAucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSAudHlwZS10aXRsZSB7XG4gICAgd2lkdGg6IGNhbGMoMTAwJSAtIDc1cHgpO1xuICB9XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50ZXh0IHtcbiAgY29sb3I6ICMzMzMzMzM7XG4gIHBhZGRpbmc6IDE4cHggMTBweCAwIDA7XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50ZXh0IHNwYW4ge1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogM3B4IDEycHg7XG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICM5Nzk3OTc7XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50ZXh0IHNwYW4gaW1nIHtcbiAgbWFyZ2luLXJpZ2h0OiA1cHg7XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50ZXh0IHNwYW46bnRoLWNoaWxkKDEpIHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cudGV4dCBzcGFuOmxhc3QtY2hpbGQge1xuICBib3JkZXItcmlnaHQ6IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50ZXh0IHNwYW4ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGNsZWFyOiBib3RoO1xuICAgIGJvcmRlcjogMDtcbiAgICBwYWRkaW5nOiAzcHggMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnRleHQgc3BhbiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgY2xlYXI6IGJvdGg7XG4gICAgYm9yZGVyOiAwO1xuICAgIHBhZGRpbmc6IDNweCAwO1xuICB9XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdyAubW9iaWxlLW9ubHktY3RhIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgei1pbmRleDogMjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMDtcbiAgdG9wOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cgLm1vYmlsZS1vbmx5LWN0YSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cgLm1vYmlsZS1vbmx5LWN0YSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdyAubW9iaWxlLW9ubHktY3RhIC5yaWdodC1hcnJvdyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDEwcHg7XG4gIHRvcDogNzJweDtcbn1cblxuLnJpZ2h0LWFycm93IHtcbiAgd2lkdGg6IDMwcHggIWltcG9ydGFudDtcbiAgaGVpZ2h0OiAzMHB4ICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiAyNHB4O1xuICBoZWlnaHQ6IDI0cHg7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9hcnJvdy1yaWdodC5zdmdcIik7XG4gIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5yaWdodC1hcnJvdyB7XG4gICAgd2lkdGg6IDQ4cHg7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9hcnJvdy1yaWdodC1sYXJnZS5zdmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLnJpZ2h0LWFycm93IHtcbiAgICB3aWR0aDogNDhweDtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwibGlicy91aS9zcmMvbGliL2ljb25zL2Fycm93LXJpZ2h0LWxhcmdlLnN2Z1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIH1cbn1cblxuLmJvb2tpbmctdHotZGlzcGxheSB7XG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcbn1cblxuLmxvY2FsLXR6LWRpc3BsYXkge1xuICBmb250LXNpemU6IDFyZW07XG4gIGNvbG9yOiAjNzU3NTc1O1xufSIsIkBpbXBvcnQgXCJ2YXJzXCI7XG5cbkBtaXhpbiBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRzaXplLCAkcXVhbGlmaWVyKSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAaWYgKCRxdWFsaWZpZXIgPT0gbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSBpZiAoJHF1YWxpZmllciA9PSBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWF4LXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5AbWl4aW4gYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRtaW4sICRtYXgpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkbWluKSBhbmQgKG1heC13aWR0aDogJG1heCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIHRoaXMgaXMgYSBjb3B5IG9mIHJlc3BvbmQtdG8uIHdlIGRvbid0IHdhbnQgdG8gcHJlc2VydmUgdGhhdCBtZXRob2Qgc2luY2UgdGhlIGJyZWFrcG9pbnRzIG1heSBkaXZlcmdlIGZyb20gdGhlIG9sZCBVSS5cbkBtaXhpbiBpcy1zY3JlZW4tc2l6ZSgkbWVkaWE6IGFsbCwgJG9yaWVudGF0aW9uOiBub25lKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cblxuQG1peGluIHBhZ2UtcGFkZGluZyB7XG4gICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbDtcbn1cblxuLy8gRm9udCBNaXhpbnNcbiRmb250LW1ja2luc2V5LXNhbnM6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuJGZvbnQtdGhlaW5oYXJkdDogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4kZm9udC1ib3dlcjogXCJCb3dlclwiO1xuXG5AbWl4aW4gYm93ZXItYm9sZCB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWJvd2VyO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBtY2tpbnNleS1zYW5zIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gZGlzcGxheS0xIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiA0cmVtOyAvLyA2NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4NzsgLy8gNzZweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMiB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDYwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS00IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogM3JlbTsgLy8gNDhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE2NjsgLy8gNTZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS01IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjgzMzsgLy8gMzRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjQyOyAvLyA0MHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS03IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyOHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTEge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA0OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi43NXJlbTsgLy8gNDRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDUycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTIge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTExOyAvLyA0NHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNDhweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMyB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIyMjsgLy8gNDRweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjg4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1NTsgLy8gMjhweFxuICAgIH1cbn1cblxuQG1peGluIGJvZHktZGVmYXVsdCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNnB4XG4gICAgfVxufVxuXG4vLy8gRG9lc250IGV4aXN0IGluIE1EUy5cbkBtaXhpbiBib2R5LXRpbnkge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtOyAvLyAxMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjRweFxuICAgIH1cbn1cblxuQG1peGluIGZvcm0tbGFiZWwge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LXRoZWluaGFyZHQ7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGNvbG9yOiAkcGxhY2Vob2xkZXItY29sb3I7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbn1cblxuQG1peGluIGNoaXAtbGFiZWwge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBjaGVja2JveC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGNvbG9yOiBibGFjaztcbn1cblxuLy8gYm9yZGVyc1xuXG5AbWl4aW4gbWNrLWNoZWNrYm94LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay10aGluLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXItbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBib3JkZXItY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudC1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuXG4vLyBmdW5jdGlvbnNcblxuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG5AbWl4aW4gbWF4LWxpbmVzKCRjb3VudCkge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiAkY291bnQ7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbn1cblxuLy8gaW1hZ2VzXG5AbWl4aW4gbWNrLWljb24oJHdpZHRoLCAkYXNzZXQsICRoZWlnaHQ6ICR3aWR0aCwgICRhc3NldFBhdGg6IFwibGlicy91aS9zcmMvbGliL2ljb25zXCIsKSB7XG4gICAgd2lkdGg6ICR3aWR0aDtcbiAgICBoZWlnaHQ6ICRoZWlnaHQ7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiI3skYXNzZXRQYXRofS8jeyRhc3NldH1cIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuXG5cbkBtaXhpbiBtY2stc21hbGwtaWNvbigkbW9iaWxlLWFzc2V0LCAkZGVza3RvcC1hc3NldDogJG1vYmlsZS1hc3NldCkge1xuICAgIEBpbmNsdWRlIG1jay1pY29uKDE2cHgsICRhc3NldDogJG1vYmlsZS1hc3NldCk7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICRhc3NldDogJGRlc2t0b3AtYXNzZXQpO1xuICAgIH1cbn1cblxuLy8gc2tlbGV0b25cbkBtaXhpbiBza2VsZXRvbi1iZyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWltYWdlLXNpemUge1xuICAgIHdpZHRoOiA4MXB4O1xuICAgIGhlaWdodDogODJweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDIxOXB4O1xuICAgICAgICBoZWlnaHQ6IDExOXB4O1xuICAgIH1cbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLXN0YXR1cy1zaXplIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMTE3cHg7XG4gICAgICAgIGhlaWdodDogNzhweDtcbiAgICB9XG59XG4iLCIvLyBJbXBvcnQgYWxsIHRoZSB0aGVtaW5nIGZ1bmN0aW9uYWxpdHkuXG4vLyBXZSB3YW50IG92ZXJsYXlzIHRvIGFsd2F5cyBhcHBlYXIgb3ZlciB1c2VyIGNvbnRlbnQsIHNvIHNldCBhIGJhc2VsaW5lXG4vLyB2ZXJ5IGhpZ2ggei1pbmRleCBmb3IgdGhlIG92ZXJsYXkgY29udGFpbmVyLCB3aGljaCBpcyB3aGVyZSB3ZSBjcmVhdGUgdGhlIG5ld1xuLy8gc3RhY2tpbmcgY29udGV4dCBmb3IgYWxsIG92ZXJsYXlzLlxuJGNkay16LWluZGV4LW92ZXJsYXktY29udGFpbmVyOiAxMDAwICFkZWZhdWx0O1xuJGNkay16LWluZGV4LW92ZXJsYXk6IDEwMDAgIWRlZmF1bHQ7XG4kY2RrLXotaW5kZXgtb3ZlcmxheS1iYWNrZHJvcDogMTAwMCAhZGVmYXVsdDtcblxuLy8gQmFja2dyb3VuZCBjb2xvciBmb3IgYWxsIG9mIHRoZSBiYWNrZHJvcHNcbiRjZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wLWJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4zMikgIWRlZmF1bHQ7XG5cbi8vIERlZmF1bHQgYmFja2Ryb3AgYW5pbWF0aW9uIGlzIGJhc2VkIG9uIHRoZSBNYXRlcmlhbCBEZXNpZ24gc3dpZnQtZWFzZS1vdXQuXG4kYmFja2Ryb3AtYW5pbWF0aW9uLWR1cmF0aW9uOiA0MDBtcyAhZGVmYXVsdDtcbiRiYWNrZHJvcC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSAhZGVmYXVsdDtcblxuXG5AbWl4aW4gY2RrLW92ZXJsYXkoKSB7XG4gIC5jZGstb3ZlcmxheS1jb250YWluZXIsIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlciB7XG4gICAgLy8gRGlzYWJsZSBldmVudHMgZnJvbSBiZWluZyBjYXB0dXJlZCBvbiB0aGUgb3ZlcmxheSBjb250YWluZXIuXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5cbiAgICAvLyBUaGUgY29udGFpbmVyIHNob3VsZCBiZSB0aGUgc2l6ZSBvZiB0aGUgdmlld3BvcnQuXG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG5cbiAgLy8gVGhlIG92ZXJsYXktY29udGFpbmVyIGlzIGFuIGludmlzaWJsZSBlbGVtZW50IHdoaWNoIGNvbnRhaW5zIGFsbCBpbmRpdmlkdWFsIG92ZXJsYXlzLlxuICAuY2RrLW92ZXJsYXktY29udGFpbmVyIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgei1pbmRleDogJGNkay16LWluZGV4LW92ZXJsYXktY29udGFpbmVyO1xuXG4gICAgJjplbXB0eSB7XG4gICAgICAvLyBIaWRlIHRoZSBlbGVtZW50IHdoZW4gaXQgZG9lc24ndCBoYXZlIGFueSBjaGlsZCBub2Rlcy4gVGhpcyBkb2Vzbid0XG4gICAgICAvLyBpbmNsdWRlIG92ZXJsYXlzIHRoYXQgaGF2ZSBiZWVuIGRldGFjaGVkLCByYXRoZXIgdGhhbiBkaXNwb3NlZC5cbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgLy8gV2UgdXNlIGFuIGV4dHJhIHdyYXBwZXIgZWxlbWVudCBpbiBvcmRlciB0byB1c2UgbWFrZSB0aGUgb3ZlcmxheSBpdHNlbGYgYSBmbGV4IGl0ZW0uXG4gIC8vIFRoaXMgbWFrZXMgY2VudGVyaW5nIHRoZSBvdmVybGF5IGVhc3kgd2l0aG91dCBydW5uaW5nIGludG8gdGhlIHN1YnBpeGVsIHJlbmRlcmluZ1xuICAvLyBwcm9ibGVtcyB0aWVkIHRvIHVzaW5nIGB0cmFuc2Zvcm1gIGFuZCB3aXRob3V0IGludGVyZmVyaW5nIHdpdGggdGhlIG90aGVyIHBvc2l0aW9uXG4gIC8vIHN0cmF0ZWdpZXMuXG4gIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogJGNkay16LWluZGV4LW92ZXJsYXk7XG4gIH1cblxuICAvLyBBIHNpbmdsZSBvdmVybGF5IHBhbmUuXG4gIC5jZGstb3ZlcmxheS1wYW5lIHtcbiAgICAvLyBOb3RlOiBpdCdzIGltcG9ydGFudCBmb3IgdGhpcyBvbmUgdG8gc3RhcnQgb2ZmIGBhYnNvbHV0ZWAsXG4gICAgLy8gaW4gb3JkZXIgZm9yIHVzIHRvIGJlIGFibGUgdG8gbWVhc3VyZSBpdCBjb3JyZWN0bHkuXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgei1pbmRleDogJGNkay16LWluZGV4LW92ZXJsYXk7XG5cbiAgICAvLyBGb3IgY29ubmVjdGVkLXBvc2l0aW9uIG92ZXJsYXlzLCB3ZSBzZXQgYGRpc3BsYXk6IGZsZXhgIGluXG4gICAgLy8gb3JkZXIgdG8gZm9yY2UgYG1heC13aWR0aGAgYW5kIGBtYXgtaGVpZ2h0YCB0byB0YWtlIGVmZmVjdC5cbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuICB9XG5cbiAgLmNkay1vdmVybGF5LWJhY2tkcm9wIHtcbiAgICAvLyBUT0RPKGplbGJvdXJuKTogcmV1c2Ugc2lkZW5hdiBmdWxsc2NyZWVuIG1peGluLlxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG5cbiAgICB6LWluZGV4OiAkY2RrLXotaW5kZXgtb3ZlcmxheS1iYWNrZHJvcDtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgJGJhY2tkcm9wLWFuaW1hdGlvbi1kdXJhdGlvbiAkYmFja2Ryb3AtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjtcbiAgICBvcGFjaXR5OiAwO1xuXG4gICAgJi5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIHtcbiAgICAgIG9wYWNpdHk6IDE7XG5cbiAgICAgIC8vIEluIGhpZ2ggY29udHJhc3QgbW9kZSB0aGUgcmdiYSBiYWNrZ3JvdW5kIHdpbGwgYmVjb21lIHNvbGlkIHNvIHdlIG5lZWQgdG8gZmFsbCBiYWNrXG4gICAgICAvLyB0byBtYWtpbmcgaXQgb3BhcXVlIHVzaW5nIGBvcGFjaXR5YC4gTm90ZSB0aGF0IHdlIGNhbid0IHVzZSB0aGUgYGNkay1oaWdoLWNvbnRyYXN0YFxuICAgICAgLy8gbWl4aW4sIGJlY2F1c2Ugd2UgY2FuJ3Qgbm9ybWFsaXplIHRoZSBpbXBvcnQgcGF0aCB0byB0aGUgX2ExMXkuc2NzcyBib3RoIGZvciB0aGVcbiAgICAgIC8vIHNvdXJjZSBhbmQgd2hlbiB0aGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQuIFNlZSAjMTA5MDguXG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSkge1xuICAgICAgICBvcGFjaXR5OiAwLjY7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3Age1xuICAgIGJhY2tncm91bmQ6ICRjZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wLWJhY2tncm91bmQ7XG4gIH1cblxuICAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3Age1xuICAgIC8vIE5vdGU6IGFzIG9mIEZpcmVmb3ggNTcsIGhhdmluZyB0aGUgYmFja2Ryb3AgYmUgYGJhY2tncm91bmQ6IG5vbmVgIHdpbGwgcHJldmVudCBpdCBmcm9tXG4gICAgLy8gY2FwdHVyaW5nIHRoZSB1c2VyJ3MgbW91c2Ugc2Nyb2xsIGV2ZW50cy4gU2luY2Ugd2UgYWxzbyBjYW4ndCB1c2Ugc29tZXRoaW5nIGxpa2VcbiAgICAvLyBgcmdiYSgwLCAwLCAwLCAwKWAsIHdlIHdvcmsgYXJvdW5kIHRoZSBpbmNvbnNpc3RlbmN5IGJ5IG5vdCBzZXR0aW5nIHRoZSBiYWNrZ3JvdW5kIGF0XG4gICAgLy8gYWxsIGFuZCB1c2luZyBgb3BhY2l0eWAgdG8gbWFrZSB0aGUgZWxlbWVudCB0cmFuc3BhcmVudC5cbiAgICAmLCAmLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmcge1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gIH1cblxuICAvLyBPdmVybGF5IHBhcmVudCBlbGVtZW50IHVzZWQgd2l0aCB0aGUgY29ubmVjdGVkIHBvc2l0aW9uIHN0cmF0ZWd5LiBVc2VkIHRvIGNvbnN0cmFpbiB0aGVcbiAgLy8gb3ZlcmxheSBlbGVtZW50J3Mgc2l6ZSB0byBmaXQgd2l0aGluIHRoZSB2aWV3cG9ydC5cbiAgLmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3gge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB6LWluZGV4OiAkY2RrLXotaW5kZXgtb3ZlcmxheTtcblxuICAgIC8vIFdlIHVzZSBgZGlzcGxheTogZmxleGAgb24gdGhpcyBlbGVtZW50IGV4Y2x1c2l2ZWx5IGZvciBjZW50ZXJpbmcgY29ubmVjdGVkIG92ZXJsYXlzLlxuICAgIC8vIFdoZW4gKm5vdCogY2VudGVyaW5nLCBhIHRvcC9sZWZ0L2JvdHRvbS9yaWdodCB3aWxsIGJlIHNldCB3aGljaCBvdmVycmlkZXMgdGhlIG5vcm1hbFxuICAgIC8vIGZsZXggbGF5b3V0LlxuICAgIGRpc3BsYXk6IGZsZXg7XG5cbiAgICAvLyBXZSB1c2UgdGhlIGBjb2x1bW5gIGRpcmVjdGlvbiBoZXJlIHRvIGF2b2lkIHNvbWUgZmxleGJveCBpc3N1ZXMgaW4gRWRnZVxuICAgIC8vIHdoZW4gdXNpbmcgdGhlIFwiZ3JvdyBhZnRlciBvcGVuXCIgb3B0aW9ucy5cbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG4gICAgLy8gQWRkIHNvbWUgZGltZW5zaW9ucyBzbyB0aGUgZWxlbWVudCBoYXMgYW4gYGlubmVyVGV4dGAgd2hpY2ggc29tZSBwZW9wbGUgZGVwZW5kIG9uIGluIHRlc3RzLlxuICAgIG1pbi13aWR0aDogMXB4O1xuICAgIG1pbi1oZWlnaHQ6IDFweDtcbiAgfVxuXG4gIC8vIFVzZWQgd2hlbiBkaXNhYmxpbmcgZ2xvYmFsIHNjcm9sbGluZy5cbiAgLmNkay1nbG9iYWwtc2Nyb2xsYmxvY2sge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcblxuICAgIC8vIE5lY2Vzc2FyeSBmb3IgdGhlIGNvbnRlbnQgbm90IHRvIGxvc2UgaXRzIHdpZHRoLiBOb3RlIHRoYXQgd2UncmUgdXNpbmcgMTAwJSwgaW5zdGVhZCBvZlxuICAgIC8vIDEwMHZ3LCBiZWNhdXNlIDEwMHZ3IGluY2x1ZGVzIHRoZSB3aWR0aCBwbHVzIHRoZSBzY3JvbGxiYXIsIHdoZXJlYXMgMTAwJSBpcyB0aGUgd2lkdGhcbiAgICAvLyB0aGF0IHRoZSBlbGVtZW50IGhhZCBiZWZvcmUgd2UgbWFkZSBpdCBgZml4ZWRgLlxuICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgLy8gTm90ZTogdGhpcyB3aWxsIGFsd2F5cyBhZGQgYSBzY3JvbGxiYXIgdG8gd2hhdGV2ZXIgZWxlbWVudCBpdCBpcyBvbiwgd2hpY2ggY2FuXG4gICAgLy8gcG90ZW50aWFsbHkgcmVzdWx0IGluIGRvdWJsZSBzY3JvbGxiYXJzLiBJdCBzaG91bGRuJ3QgYmUgYW4gaXNzdWUsIGJlY2F1c2Ugd2Ugd29uJ3RcbiAgICAvLyBibG9jayBzY3JvbGxpbmcgb24gYSBwYWdlIHRoYXQgZG9lc24ndCBoYXZlIGEgc2Nyb2xsYmFyIGluIHRoZSBmaXJzdCBwbGFjZS5cbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gIH1cbn1cblxuQG1peGluIGNkay1hMTF5IHtcbiAgLmNkay12aXN1YWxseS1oaWRkZW4ge1xuICAgIGJvcmRlcjogMDtcbiAgICBjbGlwOiByZWN0KDAgMCAwIDApO1xuICAgIGhlaWdodDogMXB4O1xuICAgIG1hcmdpbjogLTFweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHdpZHRoOiAxcHg7XG5cbiAgICAvLyBBdm9pZCBicm93c2VycyByZW5kZXJpbmcgdGhlIGZvY3VzIHJpbmcgaW4gc29tZSBjYXNlcy5cbiAgICBvdXRsaW5lOiAwO1xuXG4gICAgLy8gQXZvaWQgc29tZSBjYXNlcyB3aGVyZSB0aGUgYnJvd3NlciB3aWxsIHN0aWxsIHJlbmRlciB0aGUgbmF0aXZlIGNvbnRyb2xzIChzZWUgIzkwNDkpLlxuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7XG4gIH1cbn1cblxuLy8vIEVtaXRzIHRoZSBtaXhpbidzIGNvbnRlbnQgbmVzdGVkIHVuZGVyIGAkc2VsZWN0b3ItY29udGV4dGAgaWYgYCRzZWxlY3Rvci1jb250ZXh0YFxuLy8vIGlzIG5vbi1lbXB0eS5cbi8vLyBAcGFyYW0gc2VsZWN0b3ItY29udGV4dCBUaGUgc2VsZWN0b3IgdW5kZXIgd2hpY2ggdG8gbmVzdCB0aGUgbWl4aW4ncyBjb250ZW50LlxuQG1peGluIF9jZGstb3B0aW9uYWxseS1uZXN0LWNvbnRlbnQoJHNlbGVjdG9yLWNvbnRleHQpIHtcbiAgQGlmICgkc2VsZWN0b3ItY29udGV4dCA9PSAnJykge1xuICAgIEBjb250ZW50O1xuICB9XG4gIEBlbHNlIHtcbiAgICAjeyRzZWxlY3Rvci1jb250ZXh0fSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH1cbn1cblxuLy8vIEFwcGxpZXMgc3R5bGVzIGZvciB1c2VycyBpbiBoaWdoIGNvbnRyYXN0IG1vZGUuIE5vdGUgdGhhdCB0aGlzIG9ubHkgYXBwbGllc1xuLy8vIHRvIE1pY3Jvc29mdCBicm93c2Vycy4gQ2hyb21lIGNhbiBiZSBpbmNsdWRlZCBieSBjaGVja2luZyBmb3IgdGhlIGBodG1sW2hjXWBcbi8vLyBhdHRyaWJ1dGUsIGhvd2V2ZXIgQ2hyb21lIGhhbmRsZXMgaGlnaCBjb250cmFzdCBkaWZmZXJlbnRseS5cbi8vL1xuLy8vIEBwYXJhbSB0YXJnZXQgV2hpY2gga2luZCBvZiBoaWdoIGNvbnRyYXN0IHNldHRpbmcgdG8gdGFyZ2V0LiBEZWZhdWx0cyB0byBgYWN0aXZlYCwgY2FuIGJlXG4vLy8gICAgYHdoaXRlLW9uLWJsYWNrYCBvciBgYmxhY2stb24td2hpdGVgLlxuLy8vIEBwYXJhbSBlbmNhcHN1bGF0aW9uIFdoZXRoZXIgdG8gZW1pdCBzdHlsZXMgZm9yIHZpZXcgZW5jYXBzdWxhdGlvbi4gVmFsdWVzIGFyZTpcbi8vLyAgICAgKiBgb25gIC0gd29ya3MgZm9yIGBFbXVsYXRlZGAsIGBOYXRpdmVgLCBhbmQgYFNoYWRvd0RvbWBcbi8vLyAgICAgKiBgb2ZmYCAtIHdvcmtzIGZvciBgTm9uZWBcbi8vLyAgICAgKiBgYW55YCAtIHdvcmtzIGZvciBhbGwgZW5jYXBzdWxhdGlvbiBtb2RlcyBieSBlbWl0dGluZyB0aGUgQ1NTIHR3aWNlIChkZWZhdWx0KS5cbkBtaXhpbiBjZGstaGlnaC1jb250cmFzdCgkdGFyZ2V0OiBhY3RpdmUsICRlbmNhcHN1bGF0aW9uOiAnYW55Jykge1xuICBAaWYgKCR0YXJnZXQgIT0gJ2FjdGl2ZScgYW5kICR0YXJnZXQgIT0gJ2JsYWNrLW9uLXdoaXRlJyBhbmQgJHRhcmdldCAhPSAnd2hpdGUtb24tYmxhY2snKSB7XG4gICAgQGVycm9yICdVbmtub3duIGNkay1oaWdoLWNvbnRyYXN0IHZhbHVlIFwiI3skdGFyZ2V0fVwiIHByb3ZpZGVkLiAnICtcbiAgICAgICAgICAgJ0FsbG93ZWQgdmFsdWVzIGFyZSBcImFjdGl2ZVwiLCBcImJsYWNrLW9uLXdoaXRlXCIsIGFuZCBcIndoaXRlLW9uLWJsYWNrXCInO1xuICB9XG5cbiAgQGlmICgkZW5jYXBzdWxhdGlvbiAhPSAnb24nIGFuZCAkZW5jYXBzdWxhdGlvbiAhPSAnb2ZmJyBhbmQgJGVuY2Fwc3VsYXRpb24gIT0gJ2FueScpIHtcbiAgICBAZXJyb3IgJ1Vua25vd24gY2RrLWhpZ2gtY29udHJhc3QgZW5jYXBzdWxhdGlvbiBcIiN7JGVuY2Fwc3VsYXRpb259XCIgcHJvdmlkZWQuICcgK1xuICAgICAgICAgICAnQWxsb3dlZCB2YWx1ZXMgYXJlIFwib25cIiwgXCJvZmZcIiwgYW5kIFwiYW55XCInO1xuICB9XG5cbiAgLy8gSWYgdGhlIHNlbGVjdG9yIGNvbnRleHQgaGFzIG11bHRpcGxlIHBhcnRzLCBzdWNoIGFzIGAuc2VjdGlvbiwgLnJlZ2lvbmAsIGp1c3QgZG9pbmdcbiAgLy8gYC5jZGstaGlnaC1jb250cmFzdC14eHggI3smfWAgd2lsbCBvbmx5IGFwcGx5IHRoZSBwYXJlbnQgc2VsZWN0b3IgdG8gdGhlIGZpcnN0IHBhcnQgb2YgdGhlXG4gIC8vIGNvbnRleHQuIFdlIGFkZHJlc3MgdGhpcyBieSBuZXN0aW5nIHRoZSBzZWxlY3RvciBjb250ZXh0IHVuZGVyIC5jZGstaGlnaC1jb250cmFzdC5cbiAgQGF0LXJvb3Qge1xuICAgICRzZWxlY3Rvci1jb250ZXh0OiAjeyZ9O1xuXG4gICAgQGlmICgkZW5jYXBzdWxhdGlvbiAhPSAnb24nKSB7XG4gICAgICAuY2RrLWhpZ2gtY29udHJhc3QtI3skdGFyZ2V0fSB7XG4gICAgICAgIEBpbmNsdWRlIF9jZGstb3B0aW9uYWxseS1uZXN0LWNvbnRlbnQoJHNlbGVjdG9yLWNvbnRleHQpIHtcbiAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiAoJGVuY2Fwc3VsYXRpb24gIT0gJ29mZicpIHtcbiAgICAgIC5jZGstaGlnaC1jb250cmFzdC0jeyR0YXJnZXR9IDpob3N0IHtcbiAgICAgICAgQGluY2x1ZGUgX2Nkay1vcHRpb25hbGx5LW5lc3QtY29udGVudCgkc2VsZWN0b3ItY29udGV4dCkge1xuICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIENvcmUgc3R5bGVzIHRoYXQgZW5hYmxlIG1vbml0b3JpbmcgYXV0b2ZpbGwgc3RhdGUgb2YgdGV4dCBmaWVsZHMuXG5AbWl4aW4gY2RrLXRleHQtZmllbGQge1xuICAvLyBLZXlmcmFtZXMgdGhhdCBhcHBseSBubyBzdHlsZXMsIGJ1dCBhbGxvdyB1cyB0byBtb25pdG9yIHdoZW4gYW4gdGV4dCBmaWVsZCBiZWNvbWVzIGF1dG9maWxsZWRcbiAgLy8gYnkgd2F0Y2hpbmcgZm9yIHRoZSBhbmltYXRpb24gZXZlbnRzIHRoYXQgYXJlIGZpcmVkIHdoZW4gdGhleSBzdGFydC4gTm90ZTogdGhlIC8qISovIGNvbW1lbnQgaXNcbiAgLy8gbmVlZGVkIHRvIHByZXZlbnQgTGliU2FzcyBmcm9tIHN0cmlwcGluZyB0aGUga2V5ZnJhbWVzIG91dC5cbiAgLy8gQmFzZWQgb246IGh0dHBzOi8vbWVkaXVtLmNvbS9AYnJ1bm4vZGV0ZWN0aW5nLWF1dG9maWxsZWQtZmllbGRzLWluLWphdmFzY3JpcHQtYWVkNTk4ZDI1ZGE3XG4gIEBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgey8qISovfVxuICBAa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCB7LyohKi99XG5cbiAgLmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDotd2Via2l0LWF1dG9maWxsIHtcbiAgICAvLyBTaW5jZSBDaHJvbWUgODAgd2UgbmVlZCBhIDFtcyBkZWxheSwgb3IgdGhlIGFuaW1hdGlvbnN0YXJ0IGV2ZW50IHdvbid0IGZpcmUuXG4gICAgYW5pbWF0aW9uOiBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXM7XG4gIH1cblxuICAuY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCkge1xuICAgIC8vIFNpbmNlIENocm9tZSA4MCB3ZSBuZWVkIGEgMW1zIGRlbGF5LCBvciB0aGUgYW5pbWF0aW9uc3RhcnQgZXZlbnQgd29uJ3QgZmlyZS5cbiAgICBhbmltYXRpb246IGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXM7XG4gIH1cblxuICAvLyBSZW1vdmUgdGhlIHJlc2l6ZSBoYW5kbGUgb24gYXV0b3NpemluZyB0ZXh0YXJlYXMsIGJlY2F1c2Ugd2hhdGV2ZXIgaGVpZ2h0XG4gIC8vIHRoZSB1c2VyIHJlc2l6ZWQgdG8gd2lsbCBiZSBvdmVyd3JpdHRlbiBvbmNlIHRoZXkgc3RhcnQgdHlwaW5nIGFnYWluLlxuICB0ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUge1xuICAgIHJlc2l6ZTogbm9uZTtcbiAgfVxuXG4gIC8vIFRoaXMgY2xhc3MgaXMgdGVtcG9yYXJpbHkgYXBwbGllZCB0byB0aGUgdGV4dGFyZWEgd2hlbiBpdCBpcyBiZWluZyBtZWFzdXJlZC4gSXQgaXMgaW1tZWRpYXRlbHlcbiAgLy8gcmVtb3ZlZCB3aGVuIG1lYXN1cmluZyBpcyBjb21wbGV0ZS4gV2UgdXNlIGAhaW1wb3J0YW50YCBydWxlcyBoZXJlIHRvIG1ha2Ugc3VyZSB1c2VyLXNwZWNpZmllZFxuICAvLyBydWxlcyBkbyBub3QgaW50ZXJmZXJlIHdpdGggdGhlIG1lYXN1cmVtZW50LlxuICB0ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nIHtcbiAgICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDtcbiAgICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7XG4gICAgLy8gSGF2aW5nIDJweCB0b3AgYW5kIGJvdHRvbSBwYWRkaW5nIHNlZW1zIHRvIGZpeCBhIGJ1ZyB3aGVyZSBDaHJvbWUgZ2V0cyBhbiBpbmNvcnJlY3RcbiAgICAvLyBtZWFzdXJlbWVudC4gV2UganVzdCBoYXZlIHRvIGFjY291bnQgZm9yIGl0IGxhdGVyIGFuZCBzdWJ0cmFjdCBpdCBvZmYgdGhlIGZpbmFsIHJlc3VsdC5cbiAgICBwYWRkaW5nOiAycHggMCAhaW1wb3J0YW50O1xuICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLy8gVXNlZCB0byBnZW5lcmF0ZSBVSURzIGZvciBrZXlmcmFtZXMgdXNlZCB0byBjaGFuZ2UgdGhlIHRleHQgZmllbGQgYXV0b2ZpbGwgc3R5bGVzLlxuJGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLWZyYW1lLWNvdW50OiAwO1xuXG4vLyBNaXhpbiB1c2VkIHRvIGFwcGx5IGN1c3RvbSBiYWNrZ3JvdW5kIGFuZCBmb3JlZ3JvdW5kIGNvbG9ycyB0byBhbiBhdXRvZmlsbGVkIHRleHQgZmllbGQuXG4vLyBCYXNlZCBvbjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjc4MTU0OS9cbi8vIHJlbW92aW5nLWlucHV0LWJhY2tncm91bmQtY29sb3VyLWZvci1jaHJvbWUtYXV0b2NvbXBsZXRlI2Fuc3dlci0zNzQzMjI2MFxuQG1peGluIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yKCRiYWNrZ3JvdW5kLCAkZm9yZWdyb3VuZDonJykge1xuICBAa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLSN7JGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLWZyYW1lLWNvdW50fSB7XG4gICAgdG8ge1xuICAgICAgYmFja2dyb3VuZDogJGJhY2tncm91bmQ7XG4gICAgICBAaWYgJGZvcmVncm91bmQgIT0gJycgeyBjb2xvcjogJGZvcmVncm91bmQ7IH1cbiAgICB9XG4gIH1cblxuICAmOi13ZWJraXQtYXV0b2ZpbGwge1xuICAgIGFuaW1hdGlvbjogY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItI3skY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItZnJhbWUtY291bnR9IGJvdGg7XG4gIH1cblxuICAmLmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDotd2Via2l0LWF1dG9maWxsIHtcbiAgICAvLyBTaW5jZSBDaHJvbWUgODAgd2UgbmVlZCBhIDFtcyBkZWxheSBmb3IgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQsIG9yIHRoZSBhbmltYXRpb25zdGFydFxuICAgIC8vIGV2ZW50IHdvbid0IGZpcmUuXG4gICAgYW5pbWF0aW9uOiBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXMsXG4gICAgICAgICAgICAgICBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci0jeyRjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci1mcmFtZS1jb3VudH0gYm90aDtcbiAgfVxuXG4gICRjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci1mcmFtZS1jb3VudDpcbiAgICAgICRjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci1mcmFtZS1jb3VudCArIDEgIWdsb2JhbDtcbn1cblxuXG4vLyBDb3JlIHN0eWxlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGFwcGx5IG1hdGVyaWFsIGRlc2lnbiB0cmVhdG1lbnRzIHRvIGFueSBlbGVtZW50LlxuLy8gTWVkaWEgcXVlcmllc1xuLy8gVE9ETyhqb3NlcGhwZXJyb3R0KTogQ2hhbmdlICRtYXQteHNtYWxsIGFuZCAkbWF0LXNtYWxsIHVzYWdlcyB0byByZWx5IG9uIEJyZWFrcG9pbnRPYnNlcnZlcixcbiRtYXQteHNtYWxsOiAnbWF4LXdpZHRoOiA1OTlweCc7XG4kbWF0LXNtYWxsOiAnbWF4LXdpZHRoOiA5NTlweCc7XG5cbi8vIFRPRE86IFJldmlzaXQgYWxsIHotaW5kaWNlcyBiZWZvcmUgYmV0YVxuLy8gei1pbmRleCBtYXN0ZXIgbGlzdFxuXG4kei1pbmRleC1mYWI6IDIwICFkZWZhdWx0O1xuJHotaW5kZXgtZHJhd2VyOiAxMDAgIWRlZmF1bHQ7XG5cbi8vIEdsb2JhbCBjb25zdGFudHNcbiRwaTogMy4xNDE1OTI2NTtcblxuLy8gUGFkZGluZyBiZXR3ZWVuIGlucHV0IHRvZ2dsZXMgYW5kIHRoZWlyIGxhYmVsc1xuJG1hdC10b2dnbGUtcGFkZGluZzogOHB4ICFkZWZhdWx0O1xuLy8gV2lkdGggYW5kIGhlaWdodCBvZiBpbnB1dCB0b2dnbGVzXG4kbWF0LXRvZ2dsZS1zaXplOiAyMHB4ICFkZWZhdWx0O1xuXG4vLyBFYXNpbmcgQ3VydmVzXG4vLyBUT0RPKGplbGJvdXJuKTogYWxsIG9mIHRoZXNlIG5lZWQgdG8gYmUgcmV2aXNpdGVkXG5cbi8vIFRoZSBkZWZhdWx0IGFuaW1hdGlvbiBjdXJ2ZXMgdXNlZCBieSBtYXRlcmlhbCBkZXNpZ24uXG4kbWF0LWxpbmVhci1vdXQtc2xvdy1pbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSkgIWRlZmF1bHQ7XG4kbWF0LWZhc3Qtb3V0LXNsb3ctaW4tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpICFkZWZhdWx0O1xuJG1hdC1mYXN0LW91dC1saW5lYXItaW4tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAxLCAxKSAhZGVmYXVsdDtcblxuJGVhc2UtaW4tb3V0LWN1cnZlLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSkgIWRlZmF1bHQ7XG5cbiRzd2lmdC1lYXNlLW91dC1kdXJhdGlvbjogNDAwbXMgIWRlZmF1bHQ7XG4kc3dpZnQtZWFzZS1vdXQtdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSAhZGVmYXVsdDtcbiRzd2lmdC1lYXNlLW91dDogYWxsICRzd2lmdC1lYXNlLW91dC1kdXJhdGlvbiAkc3dpZnQtZWFzZS1vdXQtdGltaW5nLWZ1bmN0aW9uICFkZWZhdWx0O1xuXG4kc3dpZnQtZWFzZS1pbi1kdXJhdGlvbjogMzAwbXMgIWRlZmF1bHQ7XG4kc3dpZnQtZWFzZS1pbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjU1LCAwLCAwLjU1LCAwLjIpICFkZWZhdWx0O1xuJHN3aWZ0LWVhc2UtaW46IGFsbCAkc3dpZnQtZWFzZS1pbi1kdXJhdGlvbiAkc3dpZnQtZWFzZS1pbi10aW1pbmctZnVuY3Rpb24gIWRlZmF1bHQ7XG5cbiRzd2lmdC1lYXNlLWluLW91dC1kdXJhdGlvbjogNTAwbXMgIWRlZmF1bHQ7XG4kc3dpZnQtZWFzZS1pbi1vdXQtdGltaW5nLWZ1bmN0aW9uOiAkZWFzZS1pbi1vdXQtY3VydmUtZnVuY3Rpb24gIWRlZmF1bHQ7XG4kc3dpZnQtZWFzZS1pbi1vdXQ6IGFsbCAkc3dpZnQtZWFzZS1pbi1vdXQtZHVyYXRpb24gJHN3aWZ0LWVhc2UtaW4tb3V0LXRpbWluZy1mdW5jdGlvbiAhZGVmYXVsdDtcblxuJHN3aWZ0LWxpbmVhci1kdXJhdGlvbjogODBtcyAhZGVmYXVsdDtcbiRzd2lmdC1saW5lYXItdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXIgIWRlZmF1bHQ7XG4kc3dpZnQtbGluZWFyOiBhbGwgJHN3aWZ0LWxpbmVhci1kdXJhdGlvbiAkc3dpZnQtbGluZWFyLXRpbWluZy1mdW5jdGlvbiAhZGVmYXVsdDtcblxuXG5cbi8vIEEgY29sbGVjdGlvbiBvZiBtaXhpbnMgYW5kIENTUyBjbGFzc2VzIHRoYXQgY2FuIGJlIHVzZWQgdG8gYXBwbHkgZWxldmF0aW9uIHRvIGEgbWF0ZXJpYWxcbi8vIGVsZW1lbnQuXG4vLyBTZWU6IGh0dHBzOi8vbWF0ZXJpYWwuaW8vZGVzaWduL2Vudmlyb25tZW50L2VsZXZhdGlvbi5odG1sXG4vLyBFeGFtcGxlczpcbi8vXG4vL1xuLy8gLm1hdC1mb28ge1xuLy8gICBAaW5jbHVkZSAkbWF0LWVsZXZhdGlvbigyKTtcbi8vXG4vLyAgICY6YWN0aXZlIHtcbi8vICAgICBAaW5jbHVkZSAkbWF0LWVsZXZhdGlvbig4KTtcbi8vICAgfVxuLy8gfVxuLy9cbi8vIDxkaXYgaWQ9XCJleHRlcm5hbC1jYXJkXCIgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXoyXCI+PHA+U29tZSBjb250ZW50PC9wPjwvZGl2PlxuLy9cbi8vIEZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgZGVzaWduIGJlaGluZCBob3cgZWxldmF0aW9uIGlzIGltcGxlbWVudGVkLCBzZWUgdGhlIGRlc2lnbiBkb2MgYXRcbi8vIGh0dHBzOi8vZ29vLmdsL0txMGs5Wi5cblxuLy8gQ29sb3JzIGZvciB1bWJyYSwgcGVudW1icmEsIGFuZCBhbWJpZW50IHNoYWRvd3MuIEFzIGRlc2NyaWJlZCBpbiB0aGUgZGVzaWduIGRvYywgZWFjaCBlbGV2YXRpb25cbi8vIGxldmVsIGlzIGNyZWF0ZWQgdXNpbmcgYSBzZXQgb2YgMyBzaGFkb3cgdmFsdWVzLCBvbmUgZm9yIHVtYnJhICh0aGUgc2hhZG93IHJlcHJlc2VudGluZyB0aGVcbi8vIHNwYWNlIGNvbXBsZXRlbHkgb2JzY3VyZWQgYnkgYW4gb2JqZWN0IHJlbGF0aXZlIHRvIGl0cyBsaWdodCBzb3VyY2UpLCBvbmUgZm9yIHBlbnVtYnJhICh0aGVcbi8vIHNwYWNlIHBhcnRpYWxseSBvYnNjdXJlZCBieSBhbiBvYmplY3QpLCBhbmQgb25lIGZvciBhbWJpZW50ICh0aGUgc3BhY2Ugd2hpY2ggY29udGFpbnMgdGhlIG9iamVjdFxuLy8gaXRzZWxmKS4gRm9yIGEgZnVydGhlciBleHBsYW5hdGlvbiBvZiB0aGVzZSB0ZXJtcyBhbmQgdGhlaXIgbWVhbmluZ3MsIHNlZVxuLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVW1icmEsX3BlbnVtYnJhX2FuZF9hbnR1bWJyYS5cblxuLy8gTWFwcyBmb3IgdGhlIGRpZmZlcmVudCBzaGFkb3cgc2V0cyBhbmQgdGhlaXIgdmFsdWVzIHdpdGhpbiBlYWNoIHotc3BhY2UuIFRoZXNlIHZhbHVlcyB3ZXJlXG4vLyBjcmVhdGVkIGJ5IHRha2luZyBhIGZldyByZWZlcmVuY2Ugc2hhZG93IHNldHMgY3JlYXRlZCBieSBHb29nbGUncyBEZXNpZ25lcnMgYW5kIGludGVycG9sYXRpbmdcbi8vIGFsbCBvZiB0aGUgdmFsdWVzIGJldHdlZW4gdGhlbS5cblxuQGZ1bmN0aW9uIF9nZXQtdW1icmEtbWFwKCRjb2xvciwgJG9wYWNpdHkpIHtcbiAgJHNoYWRvdy1jb2xvcjogaWYodHlwZS1vZigkY29sb3IpID09IGNvbG9yLCByZ2JhKCRjb2xvciwgJG9wYWNpdHkgKiAwLjIpLCAkY29sb3IpO1xuXG4gIEByZXR1cm4gKFxuICAgIDA6ICcwcHggMHB4IDBweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTogJzBweCAycHggMXB4IC0xcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjogJzBweCAzcHggMXB4IC0ycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMzogJzBweCAzcHggM3B4IC0ycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNDogJzBweCAycHggNHB4IC0xcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNTogJzBweCAzcHggNXB4IC0xcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNjogJzBweCAzcHggNXB4IC0xcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNzogJzBweCA0cHggNXB4IC0ycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgODogJzBweCA1cHggNXB4IC0zcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgOTogJzBweCA1cHggNnB4IC0zcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTA6ICcwcHggNnB4IDZweCAtM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDExOiAnMHB4IDZweCA3cHggLTRweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMjogJzBweCA3cHggOHB4IC00cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTM6ICcwcHggN3B4IDhweCAtNHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE0OiAnMHB4IDdweCA5cHggLTRweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNTogJzBweCA4cHggOXB4IC01cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTY6ICcwcHggOHB4IDEwcHggLTVweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNzogJzBweCA4cHggMTFweCAtNXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE4OiAnMHB4IDlweCAxMXB4IC01cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTk6ICcwcHggOXB4IDEycHggLTZweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMDogJzBweCAxMHB4IDEzcHggLTZweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMTogJzBweCAxMHB4IDEzcHggLTZweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMjogJzBweCAxMHB4IDE0cHggLTZweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMzogJzBweCAxMXB4IDE0cHggLTdweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyNDogJzBweCAxMXB4IDE1cHggLTdweCAjeyRzaGFkb3ctY29sb3J9J1xuICApO1xufVxuXG5AZnVuY3Rpb24gX2dldC1wZW51bWJyYS1tYXAoJGNvbG9yLCAkb3BhY2l0eSkge1xuICAkc2hhZG93LWNvbG9yOiBpZih0eXBlLW9mKCRjb2xvcikgPT0gY29sb3IsIHJnYmEoJGNvbG9yLCAkb3BhY2l0eSAqIDAuMTQpLCAkY29sb3IpO1xuXG4gIEByZXR1cm4gKFxuICAgIDA6ICcwcHggMHB4IDBweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTogJzBweCAxcHggMXB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyOiAnMHB4IDJweCAycHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDM6ICcwcHggM3B4IDRweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNDogJzBweCA0cHggNXB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA1OiAnMHB4IDVweCA4cHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDY6ICcwcHggNnB4IDEwcHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDc6ICcwcHggN3B4IDEwcHggMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDg6ICcwcHggOHB4IDEwcHggMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDk6ICcwcHggOXB4IDEycHggMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEwOiAnMHB4IDEwcHggMTRweCAxcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTE6ICcwcHggMTFweCAxNXB4IDFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMjogJzBweCAxMnB4IDE3cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEzOiAnMHB4IDEzcHggMTlweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTQ6ICcwcHggMTRweCAyMXB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNTogJzBweCAxNXB4IDIycHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE2OiAnMHB4IDE2cHggMjRweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTc6ICcwcHggMTdweCAyNnB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxODogJzBweCAxOHB4IDI4cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE5OiAnMHB4IDE5cHggMjlweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjA6ICcwcHggMjBweCAzMXB4IDNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMTogJzBweCAyMXB4IDMzcHggM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIyOiAnMHB4IDIycHggMzVweCAzcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjM6ICcwcHggMjNweCAzNnB4IDNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyNDogJzBweCAyNHB4IDM4cHggM3B4ICN7JHNoYWRvdy1jb2xvcn0nXG4gICk7XG59XG5cbkBmdW5jdGlvbiBfZ2V0LWFtYmllbnQtbWFwKCRjb2xvciwgJG9wYWNpdHkpIHtcbiAgJHNoYWRvdy1jb2xvcjogaWYodHlwZS1vZigkY29sb3IpID09IGNvbG9yLCByZ2JhKCRjb2xvciwgJG9wYWNpdHkgKiAwLjEyKSwgJGNvbG9yKTtcblxuICBAcmV0dXJuIChcbiAgICAwOiAnMHB4IDBweCAwcHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE6ICcwcHggMXB4IDNweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjogJzBweCAxcHggNXB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAzOiAnMHB4IDFweCA4cHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDQ6ICcwcHggMXB4IDEwcHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDU6ICcwcHggMXB4IDE0cHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDY6ICcwcHggMXB4IDE4cHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDc6ICcwcHggMnB4IDE2cHggMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDg6ICcwcHggM3B4IDE0cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDk6ICcwcHggM3B4IDE2cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEwOiAnMHB4IDRweCAxOHB4IDNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMTogJzBweCA0cHggMjBweCAzcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTI6ICcwcHggNXB4IDIycHggNHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEzOiAnMHB4IDVweCAyNHB4IDRweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNDogJzBweCA1cHggMjZweCA0cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTU6ICcwcHggNnB4IDI4cHggNXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE2OiAnMHB4IDZweCAzMHB4IDVweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNzogJzBweCA2cHggMzJweCA1cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTg6ICcwcHggN3B4IDM0cHggNnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE5OiAnMHB4IDdweCAzNnB4IDZweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMDogJzBweCA4cHggMzhweCA3cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjE6ICcwcHggOHB4IDQwcHggN3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIyOiAnMHB4IDhweCA0MnB4IDdweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMzogJzBweCA5cHggNDRweCA4cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjQ6ICcwcHggOXB4IDQ2cHggOHB4ICN7JHNoYWRvdy1jb2xvcn0nXG4gICk7XG59XG5cbi8vIFRoZSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciBlbGV2YXRpb24gdHJhbnNpdGlvbnMuXG4kbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLWR1cmF0aW9uOiAyODBtcyAhZGVmYXVsdDtcblxuLy8gVGhlIGRlZmF1bHQgZWFzaW5nIHZhbHVlIGZvciBlbGV2YXRpb24gdHJhbnNpdGlvbnMuXG4kbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogJG1hdC1mYXN0LW91dC1zbG93LWluLXRpbWluZy1mdW5jdGlvbjtcblxuLy8gVGhlIGRlZmF1bHQgY29sb3IgZm9yIGVsZXZhdGlvbiBzaGFkb3dzLlxuJG1hdC1lbGV2YXRpb24tY29sb3I6IGJsYWNrICFkZWZhdWx0O1xuXG4vLyBUaGUgZGVmYXVsdCBvcGFjaXR5IHNjYWxpbmcgdmFsdWUgZm9yIGVsZXZhdGlvbiBzaGFkb3dzLlxuJG1hdC1lbGV2YXRpb24tb3BhY2l0eTogMSAhZGVmYXVsdDtcblxuLy8gUHJlZml4IGZvciBlbGV2YXRpb24tcmVsYXRlZCBzZWxlY3RvcnMuXG4kX21hdC1lbGV2YXRpb24tcHJlZml4OiAnbWF0LWVsZXZhdGlvbi16JztcblxuLy8gQXBwbGllcyB0aGUgY29ycmVjdCBjc3MgcnVsZXMgdG8gYW4gZWxlbWVudCB0byBnaXZlIGl0IHRoZSBlbGV2YXRpb24gc3BlY2lmaWVkIGJ5ICR6VmFsdWUuXG4vLyBUaGUgJHpWYWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjQuXG5AbWl4aW4gbWF0LWVsZXZhdGlvbigkelZhbHVlLCAkY29sb3I6ICRtYXQtZWxldmF0aW9uLWNvbG9yLCAkb3BhY2l0eTogJG1hdC1lbGV2YXRpb24tb3BhY2l0eSkge1xuICBAaWYgdHlwZS1vZigkelZhbHVlKSAhPSBudW1iZXIgb3Igbm90IHVuaXRsZXNzKCR6VmFsdWUpIHtcbiAgICBAZXJyb3IgJyR6VmFsdWUgbXVzdCBiZSBhIHVuaXRsZXNzIG51bWJlcic7XG4gIH1cbiAgQGlmICR6VmFsdWUgPCAwIG9yICR6VmFsdWUgPiAyNCB7XG4gICAgQGVycm9yICckelZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyNCc7XG4gIH1cblxuICBib3gtc2hhZG93OiAje21hcC1nZXQoX2dldC11bWJyYS1tYXAoJGNvbG9yLCAkb3BhY2l0eSksICR6VmFsdWUpfSxcbiAgICAgICAgICAgICAgI3ttYXAtZ2V0KF9nZXQtcGVudW1icmEtbWFwKCRjb2xvciwgJG9wYWNpdHkpLCAkelZhbHVlKX0sXG4gICAgICAgICAgICAgICN7bWFwLWdldChfZ2V0LWFtYmllbnQtbWFwKCRjb2xvciwgJG9wYWNpdHkpLCAkelZhbHVlKX07XG59XG5cbkBtaXhpbiBfbWF0LXRoZW1lLWVsZXZhdGlvbigkelZhbHVlLCAkdGhlbWUsICRvcGFjaXR5OiAkbWF0LWVsZXZhdGlvbi1vcGFjaXR5KSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRlbGV2YXRpb24tY29sb3I6IG1hcC1nZXQoJGZvcmVncm91bmQsIGVsZXZhdGlvbik7XG4gICRlbGV2YXRpb24tY29sb3Itb3ItZGVmYXVsdDogaWYoJGVsZXZhdGlvbi1jb2xvciA9PSBudWxsLCAkbWF0LWVsZXZhdGlvbi1jb2xvciwgJGVsZXZhdGlvbi1jb2xvcik7XG5cbiAgQGluY2x1ZGUgbWF0LWVsZXZhdGlvbigkelZhbHVlLCAkZWxldmF0aW9uLWNvbG9yLW9yLWRlZmF1bHQsICRvcGFjaXR5KTtcbn1cblxuLy8gQXBwbGllcyB0aGUgZWxldmF0aW9uIHRvIGFuIGVsZW1lbnQgaW4gYSBtYW5uZXIgdGhhdCBhbGxvd3Ncbi8vIGNvbnN1bWVycyB0byBvdmVycmlkZSBpdCB2aWEgdGhlIE1hdGVyaWFsIGVsZXZhdGlvbiBjbGFzc2VzLlxuQG1peGluIG1hdC1vdmVycmlkYWJsZS1lbGV2YXRpb24oXG4gICAgJHpWYWx1ZSxcbiAgICAkY29sb3I6ICRtYXQtZWxldmF0aW9uLWNvbG9yLFxuICAgICRvcGFjaXR5OiAkbWF0LWVsZXZhdGlvbi1vcGFjaXR5KSB7XG4gICY6bm90KFtjbGFzcyo9JyN7JF9tYXQtZWxldmF0aW9uLXByZWZpeH0nXSkge1xuICAgIEBpbmNsdWRlIG1hdC1lbGV2YXRpb24oJHpWYWx1ZSwgJGNvbG9yLCAkb3BhY2l0eSk7XG4gIH1cbn1cblxuQG1peGluIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKCR6VmFsdWUsICR0aGVtZSwgJG9wYWNpdHk6ICRtYXQtZWxldmF0aW9uLW9wYWNpdHkpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGVsZXZhdGlvbi1jb2xvcjogbWFwLWdldCgkZm9yZWdyb3VuZCwgZWxldmF0aW9uKTtcbiAgJGVsZXZhdGlvbi1jb2xvci1vci1kZWZhdWx0OiBpZigkZWxldmF0aW9uLWNvbG9yID09IG51bGwsICRtYXQtZWxldmF0aW9uLWNvbG9yLCAkZWxldmF0aW9uLWNvbG9yKTtcblxuICBAaW5jbHVkZSBtYXQtb3ZlcnJpZGFibGUtZWxldmF0aW9uKCR6VmFsdWUsICRlbGV2YXRpb24tY29sb3Itb3ItZGVmYXVsdCwgJG9wYWNpdHkpO1xufVxuXG4vLyBSZXR1cm5zIGEgc3RyaW5nIHRoYXQgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvciBhIHRyYW5zaXRpb24gcHJvcGVydHkgZm9yIGVsZXZhdGlvbi5cbi8vIENhbGxpbmcgdGhpcyBmdW5jdGlvbiBkaXJlY3RseSBpcyB1c2VmdWwgaW4gc2l0dWF0aW9ucyB3aGVyZSBhIGNvbXBvbmVudCBuZWVkcyB0byB0cmFuc2l0aW9uXG4vLyBtb3JlIHRoYW4gb25lIHByb3BlcnR5LlxuLy9cbi8vIC5mb28ge1xuLy8gICB0cmFuc2l0aW9uOiBtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tcHJvcGVydHktdmFsdWUoKSwgb3BhY2l0eSAxMDBtcyBlYXNlO1xuLy8gfVxuQGZ1bmN0aW9uIG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi1wcm9wZXJ0eS12YWx1ZShcbiAgICAkZHVyYXRpb246ICRtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tZHVyYXRpb24sXG4gICAgJGVhc2luZzogJG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pIHtcbiAgQHJldHVybiBib3gtc2hhZG93ICN7JGR1cmF0aW9ufSAjeyRlYXNpbmd9O1xufVxuXG4vLyBBcHBsaWVzIHRoZSBjb3JyZWN0IGNzcyBydWxlcyBuZWVkZWQgdG8gaGF2ZSBhbiBlbGVtZW50IHRyYW5zaXRpb24gYmV0d2VlbiBlbGV2YXRpb25zLlxuLy8gVGhpcyBtaXhpbiBzaG91bGQgYmUgYXBwbGllZCB0byBlbGVtZW50cyB3aG9zZSBlbGV2YXRpb24gdmFsdWVzIHdpbGwgY2hhbmdlIGRlcGVuZGluZyBvbiB0aGVpclxuLy8gY29udGV4dCAoZS5nLiB3aGVuIGFjdGl2ZSBvciBkaXNhYmxlZCkuXG4vL1xuLy8gTk9URSh0cmF2aXNrYXVmbWFuKTogQm90aCB0aGlzIG1peGluIGFuZCB0aGUgYWJvdmUgZnVuY3Rpb24gdXNlIGRlZmF1bHQgcGFyYW1ldGVycyBzbyB0aGV5IGNhblxuLy8gYmUgdXNlZCBpbiB0aGUgc2FtZSB3YXkgYnkgY2xpZW50cy5cbkBtaXhpbiBtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24oXG4gICAgJGR1cmF0aW9uOiAkbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLWR1cmF0aW9uLFxuICAgICRlYXNpbmc6ICRtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSB7XG4gIHRyYW5zaXRpb246IG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi1wcm9wZXJ0eS12YWx1ZSgkZHVyYXRpb24sICRlYXNpbmcpO1xufVxuXG4vLyBDb2xvciBwYWxldHRlcyBmcm9tIHRoZSBNYXRlcmlhbCBEZXNpZ24gc3BlYy5cbi8vIFNlZSBodHRwczovL21hdGVyaWFsLmlvL2Rlc2lnbi9jb2xvci9cbi8vXG4vLyBDb250cmFzdCBjb2xvcnMgYXJlIGhhcmQtY29kZWQgYmVjYXVzZSBpdCBpcyB0b28gZGlmZmljdWx0IChwcm9iYWJseSBpbXBvc3NpYmxlKSB0b1xuLy8gY2FsY3VsYXRlIHRoZW0uIFRoZXNlIGNvbnRyYXN0IGNvbG9ycyBhcmUgcHVsbGVkIGZyb20gdGhlIHB1YmxpYyBNYXRlcmlhbCBEZXNpZ24gc3BlYyBzd2F0Y2hlcy5cbi8vIFdoaWxlIHRoZSBjb250cmFzdCBjb2xvcnMgaW4gdGhlIHNwZWMgYXJlIG5vdCBwcmVzY3JpcHRpdmUsIHdlIHVzZSB0aGVtIGZvciBjb252ZW5pZW5jZS5cblxuXG4vLyBAZGVwcmVjYXRlZCByZW5hbWVkIHRvICRkYXJrLXByaW1hcnktdGV4dC5cbi8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjBcbiRibGFjay04Ny1vcGFjaXR5OiByZ2JhKGJsYWNrLCAwLjg3KTtcbi8vIEBkZXByZWNhdGVkIHJlbmFtZWQgdG8gJGxpZ2h0LXByaW1hcnktdGV4dC5cbi8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjBcbiR3aGl0ZS04Ny1vcGFjaXR5OiByZ2JhKHdoaXRlLCAwLjg3KTtcbi8vIEBkZXByZWNhdGVkIHVzZSAkZGFyay1bc2Vjb25kYXJ5LXRleHQsZGlzYWJsZWQtdGV4dCxkaXZpZGVycyxmb2N1c2VkXSBpbnN0ZWFkLlxuLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMFxuJGJsYWNrLTEyLW9wYWNpdHk6IHJnYmEoYmxhY2ssIDAuMTIpO1xuLy8gQGRlcHJlY2F0ZWQgdXNlICRsaWdodC1bc2Vjb25kYXJ5LXRleHQsZGlzYWJsZWQtdGV4dCxkaXZpZGVycyxmb2N1c2VkXSBpbnN0ZWFkLlxuLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMFxuJHdoaXRlLTEyLW9wYWNpdHk6IHJnYmEod2hpdGUsIDAuMTIpO1xuLy8gQGRlcHJlY2F0ZWQgdXNlICRkYXJrLVtzZWNvbmRhcnktdGV4dCxkaXNhYmxlZC10ZXh0LGRpdmlkZXJzLGZvY3VzZWRdIGluc3RlYWQuXG4vLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wXG4kYmxhY2stNi1vcGFjaXR5OiByZ2JhKGJsYWNrLCAwLjA2KTtcbi8vIEBkZXByZWNhdGVkIHVzZSAkbGlnaHQtW3NlY29uZGFyeS10ZXh0LGRpc2FibGVkLXRleHQsZGl2aWRlcnMsZm9jdXNlZF0gaW5zdGVhZC5cbi8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjBcbiR3aGl0ZS02LW9wYWNpdHk6IHJnYmEod2hpdGUsIDAuMDYpO1xuXG4kZGFyay1wcmltYXJ5LXRleHQ6IHJnYmEoYmxhY2ssIDAuODcpO1xuJGRhcmstc2Vjb25kYXJ5LXRleHQ6IHJnYmEoYmxhY2ssIDAuNTQpO1xuJGRhcmstZGlzYWJsZWQtdGV4dDogcmdiYShibGFjaywgMC4zOCk7XG4kZGFyay1kaXZpZGVyczogcmdiYShibGFjaywgMC4xMik7XG4kZGFyay1mb2N1c2VkOiByZ2JhKGJsYWNrLCAwLjEyKTtcbiRsaWdodC1wcmltYXJ5LXRleHQ6IHdoaXRlO1xuJGxpZ2h0LXNlY29uZGFyeS10ZXh0OiByZ2JhKHdoaXRlLCAwLjcpO1xuJGxpZ2h0LWRpc2FibGVkLXRleHQ6IHJnYmEod2hpdGUsIDAuNSk7XG4kbGlnaHQtZGl2aWRlcnM6IHJnYmEod2hpdGUsIDAuMTIpO1xuJGxpZ2h0LWZvY3VzZWQ6IHJnYmEod2hpdGUsIDAuMTIpO1xuXG4kbWF0LXJlZDogKFxuICA1MDogI2ZmZWJlZSxcbiAgMTAwOiAjZmZjZGQyLFxuICAyMDA6ICNlZjlhOWEsXG4gIDMwMDogI2U1NzM3MyxcbiAgNDAwOiAjZWY1MzUwLFxuICA1MDA6ICNmNDQzMzYsXG4gIDYwMDogI2U1MzkzNSxcbiAgNzAwOiAjZDMyZjJmLFxuICA4MDA6ICNjNjI4MjgsXG4gIDkwMDogI2I3MWMxYyxcbiAgQTEwMDogI2ZmOGE4MCxcbiAgQTIwMDogI2ZmNTI1MixcbiAgQTQwMDogI2ZmMTc0NCxcbiAgQTcwMDogI2Q1MDAwMCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LXBpbms6IChcbiAgNTA6ICNmY2U0ZWMsXG4gIDEwMDogI2Y4YmJkMCxcbiAgMjAwOiAjZjQ4ZmIxLFxuICAzMDA6ICNmMDYyOTIsXG4gIDQwMDogI2VjNDA3YSxcbiAgNTAwOiAjZTkxZTYzLFxuICA2MDA6ICNkODFiNjAsXG4gIDcwMDogI2MyMTg1YixcbiAgODAwOiAjYWQxNDU3LFxuICA5MDA6ICM4ODBlNGYsXG4gIEExMDA6ICNmZjgwYWIsXG4gIEEyMDA6ICNmZjQwODEsXG4gIEE0MDA6ICNmNTAwNTcsXG4gIEE3MDA6ICNjNTExNjIsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1wdXJwbGU6IChcbiAgNTA6ICNmM2U1ZjUsXG4gIDEwMDogI2UxYmVlNyxcbiAgMjAwOiAjY2U5M2Q4LFxuICAzMDA6ICNiYTY4YzgsXG4gIDQwMDogI2FiNDdiYyxcbiAgNTAwOiAjOWMyN2IwLFxuICA2MDA6ICM4ZTI0YWEsXG4gIDcwMDogIzdiMWZhMixcbiAgODAwOiAjNmExYjlhLFxuICA5MDA6ICM0YTE0OGMsXG4gIEExMDA6ICNlYTgwZmMsXG4gIEEyMDA6ICNlMDQwZmIsXG4gIEE0MDA6ICNkNTAwZjksXG4gIEE3MDA6ICNhYTAwZmYsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWRlZXAtcHVycGxlOiAoXG4gIDUwOiAjZWRlN2Y2LFxuICAxMDA6ICNkMWM0ZTksXG4gIDIwMDogI2IzOWRkYixcbiAgMzAwOiAjOTU3NWNkLFxuICA0MDA6ICM3ZTU3YzIsXG4gIDUwMDogIzY3M2FiNyxcbiAgNjAwOiAjNWUzNWIxLFxuICA3MDA6ICM1MTJkYTgsXG4gIDgwMDogIzQ1MjdhMCxcbiAgOTAwOiAjMzExYjkyLFxuICBBMTAwOiAjYjM4OGZmLFxuICBBMjAwOiAjN2M0ZGZmLFxuICBBNDAwOiAjNjUxZmZmLFxuICBBNzAwOiAjNjIwMGVhLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1pbmRpZ286IChcbiAgNTA6ICNlOGVhZjYsXG4gIDEwMDogI2M1Y2FlOSxcbiAgMjAwOiAjOWZhOGRhLFxuICAzMDA6ICM3OTg2Y2IsXG4gIDQwMDogIzVjNmJjMCxcbiAgNTAwOiAjM2Y1MWI1LFxuICA2MDA6ICMzOTQ5YWIsXG4gIDcwMDogIzMwM2Y5ZixcbiAgODAwOiAjMjgzNTkzLFxuICA5MDA6ICMxYTIzN2UsXG4gIEExMDA6ICM4YzllZmYsXG4gIEEyMDA6ICM1MzZkZmUsXG4gIEE0MDA6ICMzZDVhZmUsXG4gIEE3MDA6ICMzMDRmZmUsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWJsdWU6IChcbiAgNTA6ICNlM2YyZmQsXG4gIDEwMDogI2JiZGVmYixcbiAgMjAwOiAjOTBjYWY5LFxuICAzMDA6ICM2NGI1ZjYsXG4gIDQwMDogIzQyYTVmNSxcbiAgNTAwOiAjMjE5NmYzLFxuICA2MDA6ICMxZTg4ZTUsXG4gIDcwMDogIzE5NzZkMixcbiAgODAwOiAjMTU2NWMwLFxuICA5MDA6ICMwZDQ3YTEsXG4gIEExMDA6ICM4MmIxZmYsXG4gIEEyMDA6ICM0NDhhZmYsXG4gIEE0MDA6ICMyOTc5ZmYsXG4gIEE3MDA6ICMyOTYyZmYsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1saWdodC1ibHVlOiAoXG4gIDUwOiAjZTFmNWZlLFxuICAxMDA6ICNiM2U1ZmMsXG4gIDIwMDogIzgxZDRmYSxcbiAgMzAwOiAjNGZjM2Y3LFxuICA0MDA6ICMyOWI2ZjYsXG4gIDUwMDogIzAzYTlmNCxcbiAgNjAwOiAjMDM5YmU1LFxuICA3MDA6ICMwMjg4ZDEsXG4gIDgwMDogIzAyNzdiZCxcbiAgOTAwOiAjMDE1NzliLFxuICBBMTAwOiAjODBkOGZmLFxuICBBMjAwOiAjNDBjNGZmLFxuICBBNDAwOiAjMDBiMGZmLFxuICBBNzAwOiAjMDA5MWVhLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWN5YW46IChcbiAgNTA6ICNlMGY3ZmEsXG4gIDEwMDogI2IyZWJmMixcbiAgMjAwOiAjODBkZWVhLFxuICAzMDA6ICM0ZGQwZTEsXG4gIDQwMDogIzI2YzZkYSxcbiAgNTAwOiAjMDBiY2Q0LFxuICA2MDA6ICMwMGFjYzEsXG4gIDcwMDogIzAwOTdhNyxcbiAgODAwOiAjMDA4MzhmLFxuICA5MDA6ICMwMDYwNjQsXG4gIEExMDA6ICM4NGZmZmYsXG4gIEEyMDA6ICMxOGZmZmYsXG4gIEE0MDA6ICMwMGU1ZmYsXG4gIEE3MDA6ICMwMGI4ZDQsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC10ZWFsOiAoXG4gIDUwOiAjZTBmMmYxLFxuICAxMDA6ICNiMmRmZGIsXG4gIDIwMDogIzgwY2JjNCxcbiAgMzAwOiAjNGRiNmFjLFxuICA0MDA6ICMyNmE2OWEsXG4gIDUwMDogIzAwOTY4OCxcbiAgNjAwOiAjMDA4OTdiLFxuICA3MDA6ICMwMDc5NmIsXG4gIDgwMDogIzAwNjk1YyxcbiAgOTAwOiAjMDA0ZDQwLFxuICBBMTAwOiAjYTdmZmViLFxuICBBMjAwOiAjNjRmZmRhLFxuICBBNDAwOiAjMWRlOWI2LFxuICBBNzAwOiAjMDBiZmE1LFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtZ3JlZW46IChcbiAgNTA6ICNlOGY1ZTksXG4gIDEwMDogI2M4ZTZjOSxcbiAgMjAwOiAjYTVkNmE3LFxuICAzMDA6ICM4MWM3ODQsXG4gIDQwMDogIzY2YmI2YSxcbiAgNTAwOiAjNGNhZjUwLFxuICA2MDA6ICM0M2EwNDcsXG4gIDcwMDogIzM4OGUzYyxcbiAgODAwOiAjMmU3ZDMyLFxuICA5MDA6ICMxYjVlMjAsXG4gIEExMDA6ICNiOWY2Y2EsXG4gIEEyMDA6ICM2OWYwYWUsXG4gIEE0MDA6ICMwMGU2NzYsXG4gIEE3MDA6ICMwMGM4NTMsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWxpZ2h0LWdyZWVuOiAoXG4gIDUwOiAjZjFmOGU5LFxuICAxMDA6ICNkY2VkYzgsXG4gIDIwMDogI2M1ZTFhNSxcbiAgMzAwOiAjYWVkNTgxLFxuICA0MDA6ICM5Y2NjNjUsXG4gIDUwMDogIzhiYzM0YSxcbiAgNjAwOiAjN2NiMzQyLFxuICA3MDA6ICM2ODlmMzgsXG4gIDgwMDogIzU1OGIyZixcbiAgOTAwOiAjMzM2OTFlLFxuICBBMTAwOiAjY2NmZjkwLFxuICBBMjAwOiAjYjJmZjU5LFxuICBBNDAwOiAjNzZmZjAzLFxuICBBNzAwOiAjNjRkZDE3LFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWxpbWU6IChcbiAgNTA6ICNmOWZiZTcsXG4gIDEwMDogI2YwZjRjMyxcbiAgMjAwOiAjZTZlZTljLFxuICAzMDA6ICNkY2U3NzUsXG4gIDQwMDogI2Q0ZTE1NyxcbiAgNTAwOiAjY2RkYzM5LFxuICA2MDA6ICNjMGNhMzMsXG4gIDcwMDogI2FmYjQyYixcbiAgODAwOiAjOWU5ZDI0LFxuICA5MDA6ICM4Mjc3MTcsXG4gIEExMDA6ICNmNGZmODEsXG4gIEEyMDA6ICNlZWZmNDEsXG4gIEE0MDA6ICNjNmZmMDAsXG4gIEE3MDA6ICNhZWVhMDAsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LXllbGxvdzogKFxuICA1MDogI2ZmZmRlNyxcbiAgMTAwOiAjZmZmOWM0LFxuICAyMDA6ICNmZmY1OWQsXG4gIDMwMDogI2ZmZjE3NixcbiAgNDAwOiAjZmZlZTU4LFxuICA1MDA6ICNmZmViM2IsXG4gIDYwMDogI2ZkZDgzNSxcbiAgNzAwOiAjZmJjMDJkLFxuICA4MDA6ICNmOWE4MjUsXG4gIDkwMDogI2Y1N2YxNyxcbiAgQTEwMDogI2ZmZmY4ZCxcbiAgQTIwMDogI2ZmZmYwMCxcbiAgQTQwMDogI2ZmZWEwMCxcbiAgQTcwMDogI2ZmZDYwMCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1hbWJlcjogKFxuICA1MDogI2ZmZjhlMSxcbiAgMTAwOiAjZmZlY2IzLFxuICAyMDA6ICNmZmUwODIsXG4gIDMwMDogI2ZmZDU0ZixcbiAgNDAwOiAjZmZjYTI4LFxuICA1MDA6ICNmZmMxMDcsXG4gIDYwMDogI2ZmYjMwMCxcbiAgNzAwOiAjZmZhMDAwLFxuICA4MDA6ICNmZjhmMDAsXG4gIDkwMDogI2ZmNmYwMCxcbiAgQTEwMDogI2ZmZTU3ZixcbiAgQTIwMDogI2ZmZDc0MCxcbiAgQTQwMDogI2ZmYzQwMCxcbiAgQTcwMDogI2ZmYWIwMCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1vcmFuZ2U6IChcbiAgNTA6ICNmZmYzZTAsXG4gIDEwMDogI2ZmZTBiMixcbiAgMjAwOiAjZmZjYzgwLFxuICAzMDA6ICNmZmI3NGQsXG4gIDQwMDogI2ZmYTcyNixcbiAgNTAwOiAjZmY5ODAwLFxuICA2MDA6ICNmYjhjMDAsXG4gIDcwMDogI2Y1N2MwMCxcbiAgODAwOiAjZWY2YzAwLFxuICA5MDA6ICNlNjUxMDAsXG4gIEExMDA6ICNmZmQxODAsXG4gIEEyMDA6ICNmZmFiNDAsXG4gIEE0MDA6ICNmZjkxMDAsXG4gIEE3MDA6ICNmZjZkMDAsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6IGJsYWNrLFxuICApXG4pO1xuXG4kbWF0LWRlZXAtb3JhbmdlOiAoXG4gIDUwOiAjZmJlOWU3LFxuICAxMDA6ICNmZmNjYmMsXG4gIDIwMDogI2ZmYWI5MSxcbiAgMzAwOiAjZmY4YTY1LFxuICA0MDA6ICNmZjcwNDMsXG4gIDUwMDogI2ZmNTcyMixcbiAgNjAwOiAjZjQ1MTFlLFxuICA3MDA6ICNlNjRhMTksXG4gIDgwMDogI2Q4NDMxNSxcbiAgOTAwOiAjYmYzNjBjLFxuICBBMTAwOiAjZmY5ZTgwLFxuICBBMjAwOiAjZmY2ZTQwLFxuICBBNDAwOiAjZmYzZDAwLFxuICBBNzAwOiAjZGQyYzAwLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1icm93bjogKFxuICA1MDogI2VmZWJlOSxcbiAgMTAwOiAjZDdjY2M4LFxuICAyMDA6ICNiY2FhYTQsXG4gIDMwMDogI2ExODg3ZixcbiAgNDAwOiAjOGQ2ZTYzLFxuICA1MDA6ICM3OTU1NDgsXG4gIDYwMDogIzZkNGM0MSxcbiAgNzAwOiAjNWQ0MDM3LFxuICA4MDA6ICM0ZTM0MmUsXG4gIDkwMDogIzNlMjcyMyxcbiAgQTEwMDogI2Q3Y2NjOCxcbiAgQTIwMDogI2JjYWFhNCxcbiAgQTQwMDogIzhkNmU2MyxcbiAgQTcwMDogIzVkNDAzNyxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1ncmV5OiAoXG4gIDUwOiAjZmFmYWZhLFxuICAxMDA6ICNmNWY1ZjUsXG4gIDIwMDogI2VlZWVlZSxcbiAgMzAwOiAjZTBlMGUwLFxuICA0MDA6ICNiZGJkYmQsXG4gIDUwMDogIzllOWU5ZSxcbiAgNjAwOiAjNzU3NTc1LFxuICA3MDA6ICM2MTYxNjEsXG4gIDgwMDogIzQyNDI0MixcbiAgOTAwOiAjMjEyMTIxLFxuICBBMTAwOiAjZmZmZmZmLFxuICBBMjAwOiAjZWVlZWVlLFxuICBBNDAwOiAjYmRiZGJkLFxuICBBNzAwOiAjNjE2MTYxLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbi8vIEFsaWFzIGZvciBhbHRlcm5hdGUgc3BlbGxpbmcuXG4kbWF0LWdyYXk6ICRtYXQtZ3JleTtcblxuJG1hdC1ibHVlLWdyZXk6IChcbiAgNTA6ICNlY2VmZjEsXG4gIDEwMDogI2NmZDhkYyxcbiAgMjAwOiAjYjBiZWM1LFxuICAzMDA6ICM5MGE0YWUsXG4gIDQwMDogIzc4OTA5YyxcbiAgNTAwOiAjNjA3ZDhiLFxuICA2MDA6ICM1NDZlN2EsXG4gIDcwMDogIzQ1NWE2NCxcbiAgODAwOiAjMzc0NzRmLFxuICA5MDA6ICMyNjMyMzgsXG4gIEExMDA6ICNjZmQ4ZGMsXG4gIEEyMDA6ICNiMGJlYzUsXG4gIEE0MDA6ICM3ODkwOWMsXG4gIEE3MDA6ICM0NTVhNjQsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuLy8gQWxpYXMgZm9yIGFsdGVybmF0ZSBzcGVsbGluZy5cbiRtYXQtYmx1ZS1ncmF5OiAkbWF0LWJsdWUtZ3JleTtcblxuXG4vLyBCYWNrZ3JvdW5kIHBhbGV0dGUgZm9yIGxpZ2h0IHRoZW1lcy5cbiRtYXQtbGlnaHQtdGhlbWUtYmFja2dyb3VuZDogKFxuICBzdGF0dXMtYmFyOiBtYXBfZ2V0KCRtYXQtZ3JleSwgMzAwKSxcbiAgYXBwLWJhcjogICAgbWFwX2dldCgkbWF0LWdyZXksIDEwMCksXG4gIGJhY2tncm91bmQ6IG1hcF9nZXQoJG1hdC1ncmV5LCA1MCksXG4gIGhvdmVyOiAgICAgIHJnYmEoYmxhY2ssIDAuMDQpLCAvLyBUT0RPKGthcmEpOiBjaGVjayBzdHlsZSB3aXRoIE1hdGVyaWFsIERlc2lnbiBVWFxuICBjYXJkOiAgICAgICB3aGl0ZSxcbiAgZGlhbG9nOiAgICAgd2hpdGUsXG4gIGRpc2FibGVkLWJ1dHRvbjogcmdiYShibGFjaywgMC4xMiksXG4gIHJhaXNlZC1idXR0b246IHdoaXRlLFxuICBmb2N1c2VkLWJ1dHRvbjogJGRhcmstZm9jdXNlZCxcbiAgc2VsZWN0ZWQtYnV0dG9uOiBtYXBfZ2V0KCRtYXQtZ3JleSwgMzAwKSxcbiAgc2VsZWN0ZWQtZGlzYWJsZWQtYnV0dG9uOiBtYXBfZ2V0KCRtYXQtZ3JleSwgNDAwKSxcbiAgZGlzYWJsZWQtYnV0dG9uLXRvZ2dsZTogbWFwX2dldCgkbWF0LWdyZXksIDIwMCksXG4gIHVuc2VsZWN0ZWQtY2hpcDogbWFwX2dldCgkbWF0LWdyZXksIDMwMCksXG4gIGRpc2FibGVkLWxpc3Qtb3B0aW9uOiBtYXBfZ2V0KCRtYXQtZ3JleSwgMjAwKSxcbiAgdG9vbHRpcDogbWFwX2dldCgkbWF0LWdyZXksIDcwMCksXG4pO1xuXG4vLyBCYWNrZ3JvdW5kIHBhbGV0dGUgZm9yIGRhcmsgdGhlbWVzLlxuJG1hdC1kYXJrLXRoZW1lLWJhY2tncm91bmQ6IChcbiAgc3RhdHVzLWJhcjogYmxhY2ssXG4gIGFwcC1iYXI6ICAgIG1hcF9nZXQoJG1hdC1ncmV5LCA5MDApLFxuICBiYWNrZ3JvdW5kOiAjMzAzMDMwLFxuICBob3ZlcjogICAgICByZ2JhKHdoaXRlLCAwLjA0KSwgLy8gVE9ETyhrYXJhKTogY2hlY2sgc3R5bGUgd2l0aCBNYXRlcmlhbCBEZXNpZ24gVVhcbiAgY2FyZDogICAgICAgbWFwX2dldCgkbWF0LWdyZXksIDgwMCksXG4gIGRpYWxvZzogICAgIG1hcF9nZXQoJG1hdC1ncmV5LCA4MDApLFxuICBkaXNhYmxlZC1idXR0b246IHJnYmEod2hpdGUsIDAuMTIpLFxuICByYWlzZWQtYnV0dG9uOiBtYXAtZ2V0KCRtYXQtZ3JleSwgODAwKSxcbiAgZm9jdXNlZC1idXR0b246ICRsaWdodC1mb2N1c2VkLFxuICBzZWxlY3RlZC1idXR0b246IG1hcF9nZXQoJG1hdC1ncmV5LCA5MDApLFxuICBzZWxlY3RlZC1kaXNhYmxlZC1idXR0b246IG1hcF9nZXQoJG1hdC1ncmV5LCA4MDApLFxuICBkaXNhYmxlZC1idXR0b24tdG9nZ2xlOiBibGFjayxcbiAgdW5zZWxlY3RlZC1jaGlwOiBtYXBfZ2V0KCRtYXQtZ3JleSwgNzAwKSxcbiAgZGlzYWJsZWQtbGlzdC1vcHRpb246IGJsYWNrLFxuICB0b29sdGlwOiBtYXBfZ2V0KCRtYXQtZ3JleSwgNzAwKSxcbik7XG5cbi8vIEZvcmVncm91bmQgcGFsZXR0ZSBmb3IgbGlnaHQgdGhlbWVzLlxuJG1hdC1saWdodC10aGVtZS1mb3JlZ3JvdW5kOiAoXG4gIGJhc2U6ICAgICAgICAgICAgICBibGFjayxcbiAgZGl2aWRlcjogICAgICAgICAgICRkYXJrLWRpdmlkZXJzLFxuICBkaXZpZGVyczogICAgICAgICAgJGRhcmstZGl2aWRlcnMsXG4gIGRpc2FibGVkOiAgICAgICAgICAkZGFyay1kaXNhYmxlZC10ZXh0LFxuICBkaXNhYmxlZC1idXR0b246ICAgcmdiYShibGFjaywgMC4yNiksXG4gIGRpc2FibGVkLXRleHQ6ICAgICAkZGFyay1kaXNhYmxlZC10ZXh0LFxuICBlbGV2YXRpb246ICAgICAgICAgYmxhY2ssXG4gIGhpbnQtdGV4dDogICAgICAgICAkZGFyay1kaXNhYmxlZC10ZXh0LFxuICBzZWNvbmRhcnktdGV4dDogICAgJGRhcmstc2Vjb25kYXJ5LXRleHQsXG4gIGljb246ICAgICAgICAgICAgICByZ2JhKGJsYWNrLCAwLjU0KSxcbiAgaWNvbnM6ICAgICAgICAgICAgIHJnYmEoYmxhY2ssIDAuNTQpLFxuICB0ZXh0OiAgICAgICAgICAgICAgcmdiYShibGFjaywgMC44NyksXG4gIHNsaWRlci1taW46ICAgICAgICByZ2JhKGJsYWNrLCAwLjg3KSxcbiAgc2xpZGVyLW9mZjogICAgICAgIHJnYmEoYmxhY2ssIDAuMjYpLFxuICBzbGlkZXItb2ZmLWFjdGl2ZTogcmdiYShibGFjaywgMC4zOCksXG4pO1xuXG4vLyBGb3JlZ3JvdW5kIHBhbGV0dGUgZm9yIGRhcmsgdGhlbWVzLlxuJG1hdC1kYXJrLXRoZW1lLWZvcmVncm91bmQ6IChcbiAgYmFzZTogICAgICAgICAgICAgIHdoaXRlLFxuICBkaXZpZGVyOiAgICAgICAgICAgJGxpZ2h0LWRpdmlkZXJzLFxuICBkaXZpZGVyczogICAgICAgICAgJGxpZ2h0LWRpdmlkZXJzLFxuICBkaXNhYmxlZDogICAgICAgICAgJGxpZ2h0LWRpc2FibGVkLXRleHQsXG4gIGRpc2FibGVkLWJ1dHRvbjogICByZ2JhKHdoaXRlLCAwLjMpLFxuICBkaXNhYmxlZC10ZXh0OiAgICAgJGxpZ2h0LWRpc2FibGVkLXRleHQsXG4gIGVsZXZhdGlvbjogICAgICAgICBibGFjayxcbiAgaGludC10ZXh0OiAgICAgICAgICRsaWdodC1kaXNhYmxlZC10ZXh0LFxuICBzZWNvbmRhcnktdGV4dDogICAgJGxpZ2h0LXNlY29uZGFyeS10ZXh0LFxuICBpY29uOiAgICAgICAgICAgICAgd2hpdGUsXG4gIGljb25zOiAgICAgICAgICAgICB3aGl0ZSxcbiAgdGV4dDogICAgICAgICAgICAgIHdoaXRlLFxuICBzbGlkZXItbWluOiAgICAgICAgd2hpdGUsXG4gIHNsaWRlci1vZmY6ICAgICAgICByZ2JhKHdoaXRlLCAwLjMpLFxuICBzbGlkZXItb2ZmLWFjdGl2ZTogcmdiYSh3aGl0ZSwgMC4zKSxcbik7XG5cblxuXG4vLyBGb3IgYSBnaXZlbiBodWUgaW4gYSBwYWxldHRlLCByZXR1cm4gdGhlIGNvbnRyYXN0IGNvbG9yIGZyb20gdGhlIG1hcCBvZiBjb250cmFzdCBwYWxldHRlcy5cbi8vIEBwYXJhbSAkY29sb3ItbWFwXG4vLyBAcGFyYW0gJGh1ZVxuQGZ1bmN0aW9uIG1hdC1jb250cmFzdCgkcGFsZXR0ZSwgJGh1ZSkge1xuICBAcmV0dXJuIG1hcC1nZXQobWFwLWdldCgkcGFsZXR0ZSwgY29udHJhc3QpLCAkaHVlKTtcbn1cblxuXG4vLyBDcmVhdGVzIGEgbWFwIG9mIGh1ZXMgdG8gY29sb3JzIGZvciBhIHRoZW1lLiBUaGlzIGlzIHVzZWQgdG8gZGVmaW5lIGEgdGhlbWUgcGFsZXR0ZSBpbiB0ZXJtc1xuLy8gb2YgdGhlIE1hdGVyaWFsIERlc2lnbiBodWVzLlxuLy8gQHBhcmFtICRjb2xvci1tYXBcbi8vIEBwYXJhbSAkcHJpbWFyeVxuLy8gQHBhcmFtICRsaWdodGVyXG5AZnVuY3Rpb24gbWF0LXBhbGV0dGUoJGJhc2UtcGFsZXR0ZSwgJGRlZmF1bHQ6IDUwMCwgJGxpZ2h0ZXI6IDEwMCwgJGRhcmtlcjogNzAwLCAkdGV4dDogJGRlZmF1bHQpIHtcbiAgJHJlc3VsdDogbWFwX21lcmdlKCRiYXNlLXBhbGV0dGUsIChcbiAgICBkZWZhdWx0OiBtYXAtZ2V0KCRiYXNlLXBhbGV0dGUsICRkZWZhdWx0KSxcbiAgICBsaWdodGVyOiBtYXAtZ2V0KCRiYXNlLXBhbGV0dGUsICRsaWdodGVyKSxcbiAgICBkYXJrZXI6IG1hcC1nZXQoJGJhc2UtcGFsZXR0ZSwgJGRhcmtlciksXG4gICAgdGV4dDogbWFwLWdldCgkYmFzZS1wYWxldHRlLCAkdGV4dCksXG5cbiAgICBkZWZhdWx0LWNvbnRyYXN0OiBtYXQtY29udHJhc3QoJGJhc2UtcGFsZXR0ZSwgJGRlZmF1bHQpLFxuICAgIGxpZ2h0ZXItY29udHJhc3Q6IG1hdC1jb250cmFzdCgkYmFzZS1wYWxldHRlLCAkbGlnaHRlciksXG4gICAgZGFya2VyLWNvbnRyYXN0OiBtYXQtY29udHJhc3QoJGJhc2UtcGFsZXR0ZSwgJGRhcmtlcilcbiAgKSk7XG5cbiAgLy8gRm9yIGVhY2ggaHVlIGluIHRoZSBwYWxldHRlLCBhZGQgYSBcIi1jb250cmFzdFwiIGNvbG9yIHRvIHRoZSBtYXAuXG4gIEBlYWNoICRodWUsICRjb2xvciBpbiAkYmFzZS1wYWxldHRlIHtcbiAgICAkcmVzdWx0OiBtYXBfbWVyZ2UoJHJlc3VsdCwgKFxuICAgICAgJyN7JGh1ZX0tY29udHJhc3QnOiBtYXQtY29udHJhc3QoJGJhc2UtcGFsZXR0ZSwgJGh1ZSlcbiAgICApKTtcbiAgfVxuXG4gIEByZXR1cm4gJHJlc3VsdDtcbn1cblxuXG4vLyBHZXRzIGEgY29sb3IgZnJvbSBhIHRoZW1lIHBhbGV0dGUgKHRoZSBvdXRwdXQgb2YgbWF0LXBhbGV0dGUpLlxuLy8gVGhlIGh1ZSBjYW4gYmUgb25lIG9mIHRoZSBzdGFuZGFyZCB2YWx1ZXMgKDUwMCwgQTQwMCwgZXRjLiksIG9uZSBvZiB0aGUgdGhyZWUgcHJlY29uZmlndXJlZFxuLy8gaHVlcyAoZGVmYXVsdCwgbGlnaHRlciwgZGFya2VyKSwgb3IgYW55IG9mIHRoZSBhZm9yZW1lbnRpb25lZCBwcmVmaXhlZCB3aXRoIFwiLWNvbnRyYXN0XCIuXG4vL1xuLy8gQHBhcmFtICRjb2xvci1tYXAgVGhlIHRoZW1lIHBhbGV0dGUgKG91dHB1dCBvZiBtYXQtcGFsZXR0ZSkuXG4vLyBAcGFyYW0gJGh1ZSBUaGUgaHVlIGZyb20gdGhlIHBhbGV0dGUgdG8gdXNlLiBJZiB0aGlzIGlzIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLCBpdCB3aWxsXG4vLyAgICAgYmUgdHJlYXRlZCBhcyBvcGFjaXR5LlxuLy8gQHBhcmFtICRvcGFjaXR5IFRoZSBhbHBoYSBjaGFubmVsIHZhbHVlIGZvciB0aGUgY29sb3IuXG5AZnVuY3Rpb24gbWF0LWNvbG9yKCRwYWxldHRlLCAkaHVlOiBkZWZhdWx0LCAkb3BhY2l0eTogbnVsbCkge1xuICAvLyBJZiBodWVLZXkgaXMgYSBudW1iZXIgYmV0d2VlbiB6ZXJvIGFuZCBvbmUsIHRoZW4gaXQgYWN0dWFsbHkgY29udGFpbnMgYW5cbiAgLy8gb3BhY2l0eSB2YWx1ZSwgc28gcmVjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCB0aGUgZGVmYXVsdCBodWUgYW5kIHRoYXQgZ2l2ZW4gb3BhY2l0eS5cbiAgQGlmIHR5cGUtb2YoJGh1ZSkgPT0gbnVtYmVyIGFuZCAkaHVlID49IDAgYW5kICRodWUgPD0gMSB7XG4gICAgQHJldHVybiBtYXQtY29sb3IoJHBhbGV0dGUsIGRlZmF1bHQsICRodWUpO1xuICB9XG5cbiAgJGNvbG9yOiBtYXAtZ2V0KCRwYWxldHRlLCAkaHVlKTtcblxuICBAaWYgKHR5cGUtb2YoJGNvbG9yKSAhPSBjb2xvcikge1xuICAgIC8vIElmIHRoZSAkY29sb3IgcmVzb2x2ZWQgdG8gc29tZXRoaW5nIGRpZmZlcmVudCBmcm9tIGEgY29sb3IgKGUuZy4gYSBDU1MgdmFyaWFibGUpLFxuICAgIC8vIHdlIGNhbid0IGFwcGx5IHRoZSBvcGFjaXR5IGFueXdheSBzbyB3ZSByZXR1cm4gdGhlIHZhbHVlIGFzIGlzLCBvdGhlcndpc2UgU2FzcyBjYW5cbiAgICAvLyB0aHJvdyBhbiBlcnJvciBvciBvdXRwdXQgc29tZXRoaW5nIGludmFsaWQuXG4gICAgQHJldHVybiAkY29sb3I7XG4gIH1cblxuICBAcmV0dXJuIHJnYmEoJGNvbG9yLCBpZigkb3BhY2l0eSA9PSBudWxsLCBvcGFjaXR5KCRjb2xvciksICRvcGFjaXR5KSk7XG59XG5cblxuLy8gQ3JlYXRlcyBhIGNvbnRhaW5lciBvYmplY3QgZm9yIGEgbGlnaHQgdGhlbWUgdG8gYmUgZ2l2ZW4gdG8gaW5kaXZpZHVhbCBjb21wb25lbnQgdGhlbWUgbWl4aW5zLlxuQGZ1bmN0aW9uIG1hdC1saWdodC10aGVtZSgkcHJpbWFyeSwgJGFjY2VudCwgJHdhcm46IG1hdC1wYWxldHRlKCRtYXQtcmVkKSkge1xuICBAcmV0dXJuIChcbiAgICBwcmltYXJ5OiAkcHJpbWFyeSxcbiAgICBhY2NlbnQ6ICRhY2NlbnQsXG4gICAgd2FybjogJHdhcm4sXG4gICAgaXMtZGFyazogZmFsc2UsXG4gICAgZm9yZWdyb3VuZDogJG1hdC1saWdodC10aGVtZS1mb3JlZ3JvdW5kLFxuICAgIGJhY2tncm91bmQ6ICRtYXQtbGlnaHQtdGhlbWUtYmFja2dyb3VuZCxcbiAgKTtcbn1cblxuXG4vLyBDcmVhdGVzIGEgY29udGFpbmVyIG9iamVjdCBmb3IgYSBkYXJrIHRoZW1lIHRvIGJlIGdpdmVuIHRvIGluZGl2aWR1YWwgY29tcG9uZW50IHRoZW1lIG1peGlucy5cbkBmdW5jdGlvbiBtYXQtZGFyay10aGVtZSgkcHJpbWFyeSwgJGFjY2VudCwgJHdhcm46IG1hdC1wYWxldHRlKCRtYXQtcmVkKSkge1xuICBAcmV0dXJuIChcbiAgICBwcmltYXJ5OiAkcHJpbWFyeSxcbiAgICBhY2NlbnQ6ICRhY2NlbnQsXG4gICAgd2FybjogJHdhcm4sXG4gICAgaXMtZGFyazogdHJ1ZSxcbiAgICBmb3JlZ3JvdW5kOiAkbWF0LWRhcmstdGhlbWUtZm9yZWdyb3VuZCxcbiAgICBiYWNrZ3JvdW5kOiAkbWF0LWRhcmstdGhlbWUtYmFja2dyb3VuZCxcbiAgKTtcbn1cblxuXG5cbiRtYXQtcmlwcGxlLWNvbG9yLW9wYWNpdHk6IDAuMTtcblxuQG1peGluIG1hdC1yaXBwbGUoKSB7XG5cbiAgLy8gVGhlIGhvc3QgZWxlbWVudCBvZiBhbiBtYXQtcmlwcGxlIGRpcmVjdGl2ZSBzaG91bGQgYWx3YXlzIGhhdmUgYSBwb3NpdGlvbiBvZiBcImFic29sdXRlXCIgb3JcbiAgLy8gXCJyZWxhdGl2ZVwiIHNvIHRoYXQgdGhlIHJpcHBsZXMgaW5zaWRlIGFyZSBjb3JyZWN0bHkgcG9zaXRpb25lZCByZWxhdGl2ZWx5IHRvIHRoZSBjb250YWluZXIuXG4gIC5tYXQtcmlwcGxlIHtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgLy8gQnkgZGVmYXVsdCwgZXZlcnkgcmlwcGxlIGNvbnRhaW5lciBzaG91bGQgaGF2ZSBwb3NpdGlvbjogcmVsYXRpdmUgaW4gZmF2b3Igb2YgY3JlYXRpbmcgYW5cbiAgICAvLyBlYXN5IEFQSSBmb3IgZGV2ZWxvcGVycyB1c2luZyB0aGUgTWF0UmlwcGxlIGRpcmVjdGl2ZS5cbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAvLyBQcm9tb3RlIGNvbnRhaW5lcnMgdGhhdCBoYXZlIHJpcHBsZXMgdG8gYSBuZXcgbGF5ZXIuIFdlIHdhbnQgdG8gdGFyZ2V0IGA6bm90KDplbXB0eSlgLFxuICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCBhbGwgcmlwcGxlIGNvbnRhaW5lcnMgdG8gaGF2ZSB0aGVpciBvd24gbGF5ZXIgc2luY2UgdGhleSdyZSB1c2VkIGluIGFcbiAgICAvLyBsb3Qgb2YgcGxhY2VzIGFuZCB0aGUgbGF5ZXIgaXMgb25seSByZWxldmFudCB3aGlsZSBhbmltYXRpbmcuIE5vdGUgdGhhdCBpZGVhbGx5IHdlJ2QgdXNlXG4gICAgLy8gdGhlIGBjb250YWluYCBwcm9wZXJ0eSBoZXJlIChzZWUgIzEzMTc1KSwgYmVjYXVzZSBgOmVtcHR5YCBjYW4gYmUgYnJva2VuIGJ5IGhhdmluZyBleHRyYVxuICAgIC8vIHRleHQgaW5zaWRlIHRoZSBlbGVtZW50LCBidXQgaXQgaXNuJ3QgdmVyeSB3ZWxsIHN1cHBvcnRlZCB5ZXQuXG4gICAgJjpub3QoOmVtcHR5KSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWQge1xuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICB9XG5cbiAgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcblxuICAgIHRyYW5zaXRpb246IG9wYWNpdHksIHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwKTtcblxuICAgIC8vIEluIGhpZ2ggY29udHJhc3QgbW9kZSB0aGUgcmlwcGxlIGlzIG9wYXF1ZSwgY2F1c2luZyBpdCB0byBvYnN0cnVjdCB0aGUgY29udGVudC5cbiAgICBAaW5jbHVkZSBjZGstaGlnaC1jb250cmFzdChhY3RpdmUsIG9mZikge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cbn1cblxuLyogVGhlbWUgZm9yIHRoZSByaXBwbGUgZWxlbWVudHMuKi9cbkBtaXhpbiBtYXQtcmlwcGxlLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwX2dldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkZm9yZWdyb3VuZC1iYXNlOiBtYXBfZ2V0KCRmb3JlZ3JvdW5kLCBiYXNlKTtcblxuICAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAvLyBJZiB0aGUgcmlwcGxlIGNvbG9yIGlzIHJlc29sdmVzIHRvIGEgY29sb3IgKnR5cGUqLCB3ZSBjYW4gdXNlIGl0IGRpcmVjdGx5LCBvdGhlcndpc2VcbiAgICAvLyAoZS5nLiBpdCByZXNvbHZlcyB0byBhIENTUyB2YXJpYWJsZSkgd2UgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBjb2xvciBhbmQgc2V0dGluZyBhbiBvcGFjaXR5LlxuICAgIEBpZiAodHlwZS1vZigkZm9yZWdyb3VuZC1iYXNlKSA9PSBjb2xvcikge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgkZm9yZWdyb3VuZC1iYXNlLCAkbWF0LXJpcHBsZS1jb2xvci1vcGFjaXR5KTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGZvcmVncm91bmQtYmFzZTtcbiAgICAgIG9wYWNpdHk6ICRtYXQtcmlwcGxlLWNvbG9yLW9wYWNpdHk7XG4gICAgfVxuICB9XG59XG5cblxuXG4vLyBVdGlsaXR5IGZvciBmZXRjaGluZyBhIG5lc3RlZCB2YWx1ZSBmcm9tIGEgdHlwb2dyYXBoeSBjb25maWcuXG5AZnVuY3Rpb24gX21hdC1nZXQtdHlwZS12YWx1ZSgkY29uZmlnLCAkbGV2ZWwsICRuYW1lKSB7XG4gIEByZXR1cm4gbWFwLWdldChtYXAtZ2V0KCRjb25maWcsICRsZXZlbCksICRuYW1lKTtcbn1cblxuLy8gR2V0cyB0aGUgZm9udCBzaXplIGZvciBhIGxldmVsIGluc2lkZSBhIHR5cG9ncmFwaHkgY29uZmlnLlxuQGZ1bmN0aW9uIG1hdC1mb250LXNpemUoJGNvbmZpZywgJGxldmVsKSB7XG4gIEByZXR1cm4gX21hdC1nZXQtdHlwZS12YWx1ZSgkY29uZmlnLCAkbGV2ZWwsIGZvbnQtc2l6ZSk7XG59XG5cbi8vIEdldHMgdGhlIGxpbmUgaGVpZ2h0IGZvciBhIGxldmVsIGluc2lkZSBhIHR5cG9ncmFwaHkgY29uZmlnLlxuQGZ1bmN0aW9uIG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCAkbGV2ZWwpIHtcbiAgQHJldHVybiBfbWF0LWdldC10eXBlLXZhbHVlKCRjb25maWcsICRsZXZlbCwgbGluZS1oZWlnaHQpO1xufVxuXG4vLyBHZXRzIHRoZSBmb250IHdlaWdodCBmb3IgYSBsZXZlbCBpbnNpZGUgYSB0eXBvZ3JhcGh5IGNvbmZpZy5cbkBmdW5jdGlvbiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgJGxldmVsKSB7XG4gIEByZXR1cm4gX21hdC1nZXQtdHlwZS12YWx1ZSgkY29uZmlnLCAkbGV2ZWwsIGZvbnQtd2VpZ2h0KTtcbn1cblxuLy8gR2V0cyB0aGUgbGV0dGVyIHNwYWNpbmcgZm9yIGEgbGV2ZWwgaW5zaWRlIGEgdHlwb2dyYXBoeSBjb25maWcuXG5AZnVuY3Rpb24gbWF0LWxldHRlci1zcGFjaW5nKCRjb25maWcsICRsZXZlbCkge1xuICBAcmV0dXJuIF9tYXQtZ2V0LXR5cGUtdmFsdWUoJGNvbmZpZywgJGxldmVsLCBsZXR0ZXItc3BhY2luZyk7XG59XG5cbi8vIEdldHMgdGhlIGZvbnQtZmFtaWx5IGZyb20gYSB0eXBvZ3JhcGh5IGNvbmZpZyBhbmQgcmVtb3ZlcyB0aGUgcXVvdGVzIGFyb3VuZCBpdC5cbkBmdW5jdGlvbiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgJGxldmVsOiBudWxsKSB7XG4gICRmb250LWZhbWlseTogbWFwLWdldCgkY29uZmlnLCBmb250LWZhbWlseSk7XG5cbiAgQGlmICRsZXZlbCAhPSBudWxsIHtcbiAgICAkZm9udC1mYW1pbHk6IF9tYXQtZ2V0LXR5cGUtdmFsdWUoJGNvbmZpZywgJGxldmVsLCBmb250LWZhbWlseSk7XG4gIH1cblxuICAvLyBHdWFyZCBhZ2FpbnN0IHVucXVvdGluZyBub24tc3RyaW5nIHZhbHVlcywgYmVjYXVzZSBpdCdzIGRlcHJlY2F0ZWQuXG4gIEByZXR1cm4gaWYodHlwZS1vZigkZm9udC1mYW1pbHkpID09IHN0cmluZywgdW5xdW90ZSgkZm9udC1mYW1pbHkpLCAkZm9udC1mYW1pbHkpO1xufVxuXG4vLyBPdXRwdXRzIHRoZSBzaG9ydGhhbmQgYGZvbnRgIENTUyBwcm9wZXJ0eSwgYmFzZWQgb24gYSBzZXQgb2YgdHlwb2dyYXBoeSB2YWx1ZXMuIEZhbGxzIGJhY2sgdG9cbi8vIHRoZSBpbmRpdmlkdWFsIHByb3BlcnRpZXMgaWYgYSB2YWx1ZSB0aGF0IGlzbid0IGFsbG93ZWQgaW4gdGhlIHNob3J0aGFuZCBpcyBwYXNzZWQgaW4uXG5AbWl4aW4gbWF0LXR5cG9ncmFwaHktZm9udC1zaG9ydGhhbmQoJGZvbnQtc2l6ZSwgJGZvbnQtd2VpZ2h0LCAkbGluZS1oZWlnaHQsICRmb250LWZhbWlseSkge1xuICAvLyBJZiBhbnkgb2YgdGhlIHZhbHVlcyBhcmUgc2V0IHRvIGBpbmhlcml0YCwgd2UgY2FuJ3QgdXNlIHRoZSBzaG9ydGhhbmRcbiAgLy8gc28gd2UgZmFsbCBiYWNrIHRvIHBhc3NpbmcgaW4gdGhlIGluZGl2aWR1YWwgcHJvcGVydGllcy5cbiAgQGlmICgkZm9udC1zaXplID09IGluaGVyaXQgb3JcbiAgICAgICAkZm9udC13ZWlnaHQgPT0gaW5oZXJpdCBvclxuICAgICAgICRsaW5lLWhlaWdodCA9PSBpbmhlcml0IG9yXG4gICAgICAgJGZvbnQtZmFtaWx5ID09IGluaGVyaXQgb3JcbiAgICAgICAkZm9udC1zaXplID09IG51bGwgb3JcbiAgICAgICAkZm9udC13ZWlnaHQgPT0gbnVsbCBvclxuICAgICAgICRsaW5lLWhlaWdodCA9PSBudWxsIG9yXG4gICAgICAgJGZvbnQtZmFtaWx5ID09IG51bGwpIHtcblxuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZTtcbiAgICBmb250LXdlaWdodDogJGZvbnQtd2VpZ2h0O1xuICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQ7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseTtcbiAgfVxuICBAZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlIHVzZSB0aGUgc2hvcnRoYW5kIGBmb250YCwgYmVjYXVzZSBpdCdzIHRoZSBsZWFzdCBhbW91bnQgb2YgYnl0ZXMuIE5vdGVcbiAgICAvLyB0aGF0IHdlIG5lZWQgdG8gdXNlIGludGVycG9sYXRpb24gZm9yIGBmb250LXNpemUvbGluZS1oZWlnaHRgIGluIG9yZGVyIHRvIHByZXZlbnRcbiAgICAvLyBTYXNzIGZyb20gZGl2aWRpbmcgdGhlIHR3byB2YWx1ZXMuXG4gICAgZm9udDogJGZvbnQtd2VpZ2h0ICN7JGZvbnQtc2l6ZX0vI3skbGluZS1oZWlnaHR9ICRmb250LWZhbWlseTtcbiAgfVxufVxuXG4vLyBDb252ZXJ0cyBhIHR5cG9ncmFwaHkgbGV2ZWwgaW50byBDU1Mgc3R5bGVzLlxuQG1peGluIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCAkbGV2ZWwpIHtcbiAgJGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCAkbGV2ZWwpO1xuICAkZm9udC13ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCAkbGV2ZWwpO1xuICAkbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCAkbGV2ZWwpO1xuICAkZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCAkbGV2ZWwpO1xuXG4gIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWZvbnQtc2hvcnRoYW5kKCRmb250LXNpemUsICRmb250LXdlaWdodCwgJGxpbmUtaGVpZ2h0LCAkZm9udC1mYW1pbHkpO1xuICBsZXR0ZXItc3BhY2luZzogbWF0LWxldHRlci1zcGFjaW5nKCRjb25maWcsICRsZXZlbCk7XG59XG5cblxuQG1peGluIG1hdC1vcHRpb24tdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuXG4gIC5tYXQtb3B0aW9uIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAgICY6aG92ZXI6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSxcbiAgICAmOmZvY3VzOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3Zlcik7XG4gICAgfVxuXG4gICAgLy8gSW4gbXVsdGlwbGUgbW9kZSB0aGVyZSBpcyBhIGNoZWNrYm94IHRvIHNob3cgdGhhdCB0aGUgb3B0aW9uIGlzIHNlbGVjdGVkLlxuICAgICYubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSk6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyKTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY3RpdmUge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3Zlcik7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICB9XG5cbiAgICAmLm1hdC1vcHRpb24tZGlzYWJsZWQge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaGludC10ZXh0KTtcbiAgICB9XG4gIH1cblxuICAubWF0LXByaW1hcnkgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIHRleHQpO1xuICB9XG5cbiAgLm1hdC1hY2NlbnQgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgdGV4dCk7XG4gIH1cblxuICAubWF0LXdhcm4gLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtb3B0aW9uLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LW9wdGlvbiB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIHN1YmhlYWRpbmctMik7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuQG1peGluIG1hdC1vcHRncm91cC10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LW9wdGdyb3VwLWxhYmVsIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LW9wdGdyb3VwLWRpc2FibGVkIC5tYXQtb3B0Z3JvdXAtbGFiZWwge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGhpbnQtdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1vcHRncm91cC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1vcHRncm91cC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGJvZHktMik7XG4gIH1cbn1cblxuXG5cbkBtaXhpbiBtYXQtcHNldWRvLWNoZWNrYm94LXRoZW1lKCR0aGVtZSkge1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcblxuICAvLyBOT1RFKHRyYXZpc2thdWZtYW4pOiBXaGlsZSB0aGUgc3BlYyBjYWxscyBmb3IgdHJhbnNsdWNlbnQgYmxhY2tzL3doaXRlcyBmb3IgZGlzYWJsZWQgY29sb3JzLFxuICAvLyB0aGlzIGRvZXMgbm90IHdvcmsgd2VsbCB3aXRoIGVsZW1lbnRzIGxheWVyZWQgb24gdG9wIG9mIG9uZSBhbm90aGVyLiBUbyBnZXQgYXJvdW5kIHRoaXMgd2VcbiAgLy8gYmxlbmQgdGhlIGNvbG9ycyB0b2dldGhlciBiYXNlZCBvbiB0aGUgYmFzZSBjb2xvciBhbmQgdGhlIHRoZW1lIGJhY2tncm91bmQuXG4gICR3aGl0ZS0zMHBjdC1vcGFjaXR5LW9uLWRhcms6ICM2ODY4Njg7XG4gICRibGFjay0yNnBjdC1vcGFjaXR5LW9uLWxpZ2h0OiAjYjBiMGIwO1xuICAkZGlzYWJsZWQtY29sb3I6IGlmKCRpcy1kYXJrLXRoZW1lLCAkd2hpdGUtMzBwY3Qtb3BhY2l0eS1vbi1kYXJrLCAkYmxhY2stMjZwY3Qtb3BhY2l0eS1vbi1saWdodCk7XG4gICRjb2xvcmVkLWJveC1zZWxlY3RvcjogJy5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUnO1xuXG4gIC5tYXQtcHNldWRvLWNoZWNrYm94IHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKSwgc2Vjb25kYXJ5LXRleHQpO1xuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgYmFja2dyb3VuZCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQge1xuICAgIGNvbG9yOiAkZGlzYWJsZWQtY29sb3I7XG4gIH1cblxuICAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxcbiAgLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSkpO1xuICB9XG5cbiAgLy8gRGVmYXVsdCB0byB0aGUgYWNjZW50IGNvbG9yLiBOb3RlIHRoYXQgdGhlIHBzZXVkbyBjaGVja2JveGVzIGFyZSBtZWFudCB0byBpbmhlcml0IHRoZVxuICAvLyB0aGVtZSBmcm9tIHRoZWlyIHBhcmVudCwgcmF0aGVyIHRoYW4gaW1wbGVtZW50aW5nIHRoZWlyIG93biB0aGVtaW5nLCB3aGljaCBpcyB3aHkgd2VcbiAgLy8gZG9uJ3QgYXR0YWNoIHRvIHRoZSBgbWF0LSpgIGNsYXNzZXMuIEFsc28gbm90ZSB0aGF0IHRoaXMgbmVlZHMgdG8gYmUgYmVsb3cgYC5tYXQtcHJpbWFyeWBcbiAgLy8gaW4gb3JkZXIgdG8gYWxsb3cgZm9yIHRoZSBjb2xvciB0byBiZSBvdmVyd3JpdHRlbiBpZiB0aGUgY2hlY2tib3ggaXMgaW5zaWRlIGEgcGFyZW50IHRoYXRcbiAgLy8gaGFzIGBtYXQtYWNjZW50YCBhbmQgaXMgcGxhY2VkIGluc2lkZSBhbm90aGVyIHBhcmVudCB0aGF0IGhhcyBgbWF0LXByaW1hcnlgLlxuICAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLFxuICAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLFxuICAubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLFxuICAubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IobWFwLWdldCgkdGhlbWUsIGFjY2VudCkpO1xuICB9XG5cbiAgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsXG4gIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IobWFwLWdldCgkdGhlbWUsIHdhcm4pKTtcbiAgfVxuXG4gIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsXG4gIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUge1xuICAgICYubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZCB7XG4gICAgICBiYWNrZ3JvdW5kOiAkZGlzYWJsZWQtY29sb3I7XG4gICAgfVxuICB9XG59XG5cblxuXG4vLyBSZXByZXNlbnRzIGEgdHlwb2dyYXBoeSBsZXZlbCBmcm9tIHRoZSBNYXRlcmlhbCBkZXNpZ24gc3BlYy5cbkBmdW5jdGlvbiBtYXQtdHlwb2dyYXBoeS1sZXZlbChcbiAgJGZvbnQtc2l6ZSxcbiAgJGxpbmUtaGVpZ2h0OiAkZm9udC1zaXplLFxuICAkZm9udC13ZWlnaHQ6IDQwMCxcbiAgJGZvbnQtZmFtaWx5OiBudWxsLFxuICAkbGV0dGVyLXNwYWNpbmc6IG5vcm1hbCkge1xuXG4gIEByZXR1cm4gKFxuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZSxcbiAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LFxuICAgIGZvbnQtd2VpZ2h0OiAkZm9udC13ZWlnaHQsXG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseSxcbiAgICBsZXR0ZXItc3BhY2luZzogJGxldHRlci1zcGFjaW5nXG4gICk7XG59XG5cbi8vIFJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIHR5cG9ncmFwaHkgbGV2ZWxzLlxuLy8gRGVmYXVsdHMgY29tZSBmcm9tIGh0dHBzOi8vbWF0ZXJpYWwuaW8vZ3VpZGVsaW5lcy9zdHlsZS90eXBvZ3JhcGh5Lmh0bWxcbi8vIE5vdGU6IFRoZSBzcGVjIGRvZXNuJ3QgbWVudGlvbiBsZXR0ZXIgc3BhY2luZy4gVGhlIHZhbHVlcyBoZXJlIGNvbWUgZnJvbVxuLy8gZXllYmFsbGluZyBpdCB1bnRpbCBpdCBsb29rZWQgZXhhY3RseSBsaWtlIHRoZSBzcGVjIGV4YW1wbGVzLlxuQGZ1bmN0aW9uIG1hdC10eXBvZ3JhcGh5LWNvbmZpZyhcbiAgJGZvbnQtZmFtaWx5OiAgICdSb2JvdG8sIFwiSGVsdmV0aWNhIE5ldWVcIiwgc2Fucy1zZXJpZicsXG4gICRkaXNwbGF5LTQ6ICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgxMTJweCwgMTEycHgsIDMwMCwgJGxldHRlci1zcGFjaW5nOiAtMC4wNWVtKSxcbiAgJGRpc3BsYXktMzogICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDU2cHgsIDU2cHgsIDQwMCwgJGxldHRlci1zcGFjaW5nOiAtMC4wMmVtKSxcbiAgJGRpc3BsYXktMjogICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDQ1cHgsIDQ4cHgsIDQwMCwgJGxldHRlci1zcGFjaW5nOiAtMC4wMDVlbSksXG4gICRkaXNwbGF5LTE6ICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgzNHB4LCA0MHB4LCA0MDApLFxuICAkaGVhZGxpbmU6ICAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMjRweCwgMzJweCwgNDAwKSxcbiAgJHRpdGxlOiAgICAgICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDIwcHgsIDMycHgsIDUwMCksXG4gICRzdWJoZWFkaW5nLTI6ICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgxNnB4LCAyOHB4LCA0MDApLFxuICAkc3ViaGVhZGluZy0xOiAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMTVweCwgMjRweCwgNDAwKSxcbiAgJGJvZHktMjogICAgICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDE0cHgsIDI0cHgsIDUwMCksXG4gICRib2R5LTE6ICAgICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgxNHB4LCAyMHB4LCA0MDApLFxuICAkY2FwdGlvbjogICAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMTJweCwgMjBweCwgNDAwKSxcbiAgJGJ1dHRvbjogICAgICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDE0cHgsIDE0cHgsIDUwMCksXG4gIC8vIExpbmUtaGVpZ2h0IG11c3QgYmUgdW5pdC1sZXNzIGZyYWN0aW9uIG9mIHRoZSBmb250LXNpemUuXG4gICRpbnB1dDogICAgICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbChpbmhlcml0LCAxLjEyNSwgNDAwKVxuKSB7XG5cbiAgLy8gRGVjbGFyZSBhbiBpbml0aWFsIG1hcCB3aXRoIGFsbCBvZiB0aGUgbGV2ZWxzLlxuICAkY29uZmlnOiAoXG4gICAgZGlzcGxheS00OiAgICAgICRkaXNwbGF5LTQsXG4gICAgZGlzcGxheS0zOiAgICAgICRkaXNwbGF5LTMsXG4gICAgZGlzcGxheS0yOiAgICAgICRkaXNwbGF5LTIsXG4gICAgZGlzcGxheS0xOiAgICAgICRkaXNwbGF5LTEsXG4gICAgaGVhZGxpbmU6ICAgICAgICRoZWFkbGluZSxcbiAgICB0aXRsZTogICAgICAgICAgJHRpdGxlLFxuICAgIHN1YmhlYWRpbmctMjogICAkc3ViaGVhZGluZy0yLFxuICAgIHN1YmhlYWRpbmctMTogICAkc3ViaGVhZGluZy0xLFxuICAgIGJvZHktMjogICAgICAgICAkYm9keS0yLFxuICAgIGJvZHktMTogICAgICAgICAkYm9keS0xLFxuICAgIGNhcHRpb246ICAgICAgICAkY2FwdGlvbixcbiAgICBidXR0b246ICAgICAgICAgJGJ1dHRvbixcbiAgICBpbnB1dDogICAgICAgICAgJGlucHV0LFxuICApO1xuXG4gIC8vIExvb3AgdGhyb3VnaCB0aGUgbGV2ZWxzIGFuZCBzZXQgdGhlIGBmb250LWZhbWlseWAgb2YgdGhlIG9uZXMgdGhhdCBkb24ndCBoYXZlIG9uZSB0byB0aGUgYmFzZS5cbiAgLy8gTm90ZSB0aGF0IFNhc3MgY2FuJ3QgbW9kaWZ5IG1hcHMgaW4gcGxhY2UsIHdoaWNoIG1lYW5zIHRoYXQgd2UgbmVlZCB0byBtZXJnZSBhbmQgcmUtYXNzaWduLlxuICBAZWFjaCAka2V5LCAkbGV2ZWwgaW4gJGNvbmZpZyB7XG4gICAgQGlmIG1hcC1nZXQoJGxldmVsLCBmb250LWZhbWlseSkgPT0gbnVsbCB7XG4gICAgICAkbmV3LWxldmVsOiBtYXAtbWVyZ2UoJGxldmVsLCAoZm9udC1mYW1pbHk6ICRmb250LWZhbWlseSkpO1xuICAgICAgJGNvbmZpZzogbWFwLW1lcmdlKCRjb25maWcsICgka2V5OiAkbmV3LWxldmVsKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIHRoZSBiYXNlIGZvbnQgZmFtaWx5IHRvIHRoZSBjb25maWcuXG4gIEByZXR1cm4gbWFwLW1lcmdlKCRjb25maWcsIChmb250LWZhbWlseTogJGZvbnQtZmFtaWx5KSk7XG59XG5cbi8vIEFkZHMgdGhlIGJhc2UgdHlwb2dyYXBoeSBzdHlsZXMsIGJhc2VkIG9uIGEgY29uZmlnLlxuQG1peGluIG1hdC1iYXNlLXR5cG9ncmFwaHkoJGNvbmZpZywgJHNlbGVjdG9yOiAnLm1hdC10eXBvZ3JhcGh5Jykge1xuICAubWF0LWgxLCAubWF0LWhlYWRsaW5lLCAjeyRzZWxlY3Rvcn0gaDEge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBoZWFkbGluZSk7XG4gICAgbWFyZ2luOiAwIDAgMTZweDtcbiAgfVxuXG4gIC5tYXQtaDIsIC5tYXQtdGl0bGUsICN7JHNlbGVjdG9yfSBoMiB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIHRpdGxlKTtcbiAgICBtYXJnaW46IDAgMCAxNnB4O1xuICB9XG5cbiAgLm1hdC1oMywgLm1hdC1zdWJoZWFkaW5nLTIsICN7JHNlbGVjdG9yfSBoMyB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIHN1YmhlYWRpbmctMik7XG4gICAgbWFyZ2luOiAwIDAgMTZweDtcbiAgfVxuXG4gIC5tYXQtaDQsIC5tYXQtc3ViaGVhZGluZy0xLCAjeyRzZWxlY3Rvcn0gaDQge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBzdWJoZWFkaW5nLTEpO1xuICAgIG1hcmdpbjogMCAwIDE2cHg7XG4gIH1cblxuICAvLyBOb3RlOiB0aGUgc3BlYyBkb2Vzbid0IGhhdmUgYW55dGhpbmcgdGhhdCB3b3VsZCBjb3JyZXNwb25kIHRvIGg1IGFuZCBoNiwgYnV0IHdlIGFkZCB0aGVzZSBmb3JcbiAgLy8gY29uc2lzdGVuY3kuIFRoZSBmb250IHNpemVzIGNvbWUgZnJvbSB0aGUgQ2hyb21lIHVzZXIgYWdlbnQgc3R5bGVzIHdoaWNoIGhhdmUgaDUgYXQgMC44M2VtXG4gIC8vIGFuZCBoNiBhdCAwLjY3ZW0uXG4gIC5tYXQtaDUsICN7JHNlbGVjdG9yfSBoNSB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktZm9udC1zaG9ydGhhbmQoXG4gICAgICAgLy8gY2FsYyBpcyB1c2VkIGhlcmUgdG8gc3VwcG9ydCBjc3MgdmFyaWFibGVzXG4gICAgICBjYWxjKCN7bWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpfSAqIDAuODMpLFxuICAgICAgbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMSksXG4gICAgICBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgYm9keS0xKSxcbiAgICAgIG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBib2R5LTEpXG4gICAgKTtcblxuICAgIG1hcmdpbjogMCAwIDEycHg7XG4gIH1cblxuICAubWF0LWg2LCAjeyRzZWxlY3Rvcn0gaDYge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWZvbnQtc2hvcnRoYW5kKFxuICAgICAgIC8vIGNhbGMgaXMgdXNlZCBoZXJlIHRvIHN1cHBvcnQgY3NzIHZhcmlhYmxlc1xuICAgICAgY2FsYygje21hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKX0gKiAwLjY3KSxcbiAgICAgIG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTEpLFxuICAgICAgbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGJvZHktMSksXG4gICAgICBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgYm9keS0xKVxuICAgICk7XG5cbiAgICBtYXJnaW46IDAgMCAxMnB4O1xuICB9XG5cbiAgLm1hdC1ib2R5LXN0cm9uZywgLm1hdC1ib2R5LTIge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBib2R5LTIpO1xuICB9XG5cbiAgLm1hdC1ib2R5LCAubWF0LWJvZHktMSwgI3skc2VsZWN0b3J9IHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgYm9keS0xKTtcblxuICAgIHAge1xuICAgICAgbWFyZ2luOiAwIDAgMTJweDtcbiAgICB9XG4gIH1cblxuICAubWF0LXNtYWxsLCAubWF0LWNhcHRpb24ge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBjYXB0aW9uKTtcbiAgfVxuXG4gIC5tYXQtZGlzcGxheS00LCAjeyRzZWxlY3Rvcn0gLm1hdC1kaXNwbGF5LTQge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBkaXNwbGF5LTQpO1xuICAgIG1hcmdpbjogMCAwIDU2cHg7XG4gIH1cblxuICAubWF0LWRpc3BsYXktMywgI3skc2VsZWN0b3J9IC5tYXQtZGlzcGxheS0zIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgZGlzcGxheS0zKTtcbiAgICBtYXJnaW46IDAgMCA2NHB4O1xuICB9XG5cbiAgLm1hdC1kaXNwbGF5LTIsICN7JHNlbGVjdG9yfSAubWF0LWRpc3BsYXktMiB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGRpc3BsYXktMik7XG4gICAgbWFyZ2luOiAwIDAgNjRweDtcbiAgfVxuXG4gIC5tYXQtZGlzcGxheS0xLCAjeyRzZWxlY3Rvcn0gLm1hdC1kaXNwbGF5LTEge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBkaXNwbGF5LTEpO1xuICAgIG1hcmdpbjogMCAwIDY0cHg7XG4gIH1cbn1cblxuXG5cblxuQG1peGluIG1hdC1hdXRvY29tcGxldGUtdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG5cbiAgLm1hdC1hdXRvY29tcGxldGUtcGFuZWwge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDQsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAgIC8vIFNlbGVjdGVkIG9wdGlvbnMgaW4gYXV0b2NvbXBsZXRlcyBzaG91bGQgbm90IGJlIGdyYXksIGJ1dCB3ZVxuICAgIC8vIG9ubHkgd2FudCB0byBvdmVycmlkZSB0aGUgYmFja2dyb3VuZCBmb3Igc2VsZWN0ZWQgb3B0aW9ucyBpZlxuICAgIC8vIHRoZXkgYXJlICpub3QqIGluIGhvdmVyIG9yIGZvY3VzIHN0YXRlLiBUaGlzIGNoYW5nZSBoYXMgdG8gYmVcbiAgICAvLyBtYWRlIGhlcmUgYmVjYXVzZSBiYXNlIG9wdGlvbiBzdHlsZXMgYXJlIHNoYXJlZCBiZXR3ZWVuIHRoZVxuICAgIC8vIGF1dG9jb21wbGV0ZSBhbmQgdGhlIHNlbGVjdC5cbiAgICAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKSB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuXG4gICAgICAmOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICAgICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufVxuXG5AbWl4aW4gbWF0LWF1dG9jb21wbGV0ZS10eXBvZ3JhcGh5KCRjb25maWcpIHsgfVxuXG4vLyBUaGlzIGNvbnRhaW5zIGFsbCBvZiB0aGUgc3R5bGVzIGZvciB0aGUgYmFkZ2Vcbi8vIHJhdGhlciB0aGFuIGp1c3QgdGhlIGNvbG9yL3RoZW1lIGJlY2F1c2Ugb2Zcbi8vIG5vIHN0eWxlIHNoZWV0IHN1cHBvcnQgZm9yIGRpcmVjdGl2ZXMuXG5cblxuXG5cblxuJG1hdC1iYWRnZS1mb250LXNpemU6IDEycHg7XG4kbWF0LWJhZGdlLWZvbnQtd2VpZ2h0OiA2MDA7XG4kbWF0LWJhZGdlLWRlZmF1bHQtc2l6ZTogMjJweCAhZGVmYXVsdDtcbiRtYXQtYmFkZ2Utc21hbGwtc2l6ZTogJG1hdC1iYWRnZS1kZWZhdWx0LXNpemUgLSA2O1xuJG1hdC1iYWRnZS1sYXJnZS1zaXplOiAkbWF0LWJhZGdlLWRlZmF1bHQtc2l6ZSArIDY7XG5cbi8vIE1peGluIGZvciBidWlsZGluZyBvZmZzZXQgZ2l2ZW4gZGlmZmVyZW50IHNpemVzXG5AbWl4aW4gX21hdC1iYWRnZS1zaXplKCRzaXplKSB7XG4gIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgd2lkdGg6ICRzaXplO1xuICAgIGhlaWdodDogJHNpemU7XG4gICAgbGluZS1oZWlnaHQ6ICRzaXplO1xuICB9XG5cbiAgJi5tYXQtYmFkZ2UtYWJvdmUge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICB0b3A6IC0kc2l6ZSAvIDI7XG4gICAgfVxuICB9XG5cbiAgJi5tYXQtYmFkZ2UtYmVsb3cge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICBib3R0b206IC0kc2l6ZSAvIDI7XG4gICAgfVxuICB9XG5cbiAgJi5tYXQtYmFkZ2UtYmVmb3JlIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgbGVmdDogLSRzaXplO1xuICAgIH1cbiAgfVxuXG4gIFtkaXI9J3J0bCddICYubWF0LWJhZGdlLWJlZm9yZSB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIGxlZnQ6IGF1dG87XG4gICAgICByaWdodDogLSRzaXplO1xuICAgIH1cbiAgfVxuXG4gICYubWF0LWJhZGdlLWFmdGVyIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgcmlnaHQ6IC0kc2l6ZTtcbiAgICB9XG4gIH1cblxuICBbZGlyPSdydGwnXSAmLm1hdC1iYWRnZS1hZnRlciB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgbGVmdDogLSRzaXplO1xuICAgIH1cbiAgfVxuXG4gICYubWF0LWJhZGdlLW92ZXJsYXAge1xuICAgICYubWF0LWJhZGdlLWJlZm9yZSB7XG4gICAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgICBsZWZ0OiAtJHNpemUgLyAyO1xuICAgICAgfVxuICAgIH1cblxuICAgIFtkaXI9J3J0bCddICYubWF0LWJhZGdlLWJlZm9yZSB7XG4gICAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgICBsZWZ0OiBhdXRvO1xuICAgICAgICByaWdodDogLSRzaXplIC8gMjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLm1hdC1iYWRnZS1hZnRlciB7XG4gICAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgICByaWdodDogLSRzaXplIC8gMjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBbZGlyPSdydGwnXSAmLm1hdC1iYWRnZS1hZnRlciB7XG4gICAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgICByaWdodDogYXV0bztcbiAgICAgICAgbGVmdDogLSRzaXplIC8gMjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1iYWRnZS10aGVtZSgkdGhlbWUpIHtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJHByaW1hcnkpO1xuXG4gICAgQGluY2x1ZGUgY2RrLWhpZ2gtY29udHJhc3QoYWN0aXZlLCBvZmYpIHtcbiAgICAgIG91dGxpbmU6IHNvbGlkIDFweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1iYWRnZS1hY2NlbnQge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGFjY2VudCk7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIGRlZmF1bHQtY29udHJhc3QpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYmFkZ2Utd2FybiB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIGRlZmF1bHQtY29udHJhc3QpO1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCR3YXJuKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJhZGdlIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cblxuICAubWF0LWJhZGdlLWhpZGRlbiB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1iYWRnZS1kaXNhYmxlZCB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgICRhcHAtYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnYmFja2dyb3VuZCcpO1xuICAgICAgJGJhZGdlLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLWJ1dHRvbik7XG5cbiAgICAgIC8vIFRoZSBkaXNhYmxlZCBjb2xvciB1c3VhbGx5IGhhcyBzb21lIGtpbmQgb2Ygb3BhY2l0eSwgYnV0IGJlY2F1c2UgdGhlIGJhZGdlIGlzIG92ZXJsYXllZFxuICAgICAgLy8gb24gdG9wIG9mIHNvbWV0aGluZyBlbHNlLCBpdCB3b24ndCBsb29rIGdvb2QgaWYgaXQncyBvcGFxdWUuIElmIGl0IGlzIGEgY29sb3IgKnR5cGUqLFxuICAgICAgLy8gd2UgY29udmVydCBpdCBpbnRvIGEgc29saWQgY29sb3IgYnkgdGFraW5nIHRoZSBvcGFjaXR5IGZyb20gdGhlIHJnYmEgdmFsdWUgYW5kIHVzaW5nXG4gICAgICAvLyB0aGUgdmFsdWUgdG8gZGV0ZXJtaW5lIHRoZSBwZXJjZW50YWdlIG9mIHRoZSBiYWNrZ3JvdW5kIHRvIHB1dCBpbnRvIGZvcmVncm91bmQgd2hlblxuICAgICAgLy8gbWl4aW5nIHRoZSBjb2xvcnMgdG9nZXRoZXIuXG4gICAgICBAaWYgKHR5cGUtb2YoJGJhZGdlLWNvbG9yKSA9PSBjb2xvciBhbmQgdHlwZS1vZigkYXBwLWJhY2tncm91bmQpID09IGNvbG9yKSB7XG4gICAgICAgICRiYWRnZS1vcGFjaXR5OiBvcGFjaXR5KCRiYWRnZS1jb2xvcik7XG4gICAgICAgIGJhY2tncm91bmQ6IG1peCgkYXBwLWJhY2tncm91bmQsIHJnYmEoJGJhZGdlLWNvbG9yLCAxKSwgKDEgLSAkYmFkZ2Utb3BhY2l0eSkgKiAxMDAlKTtcbiAgICAgIH1cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGJhZGdlLWNvbG9yO1xuICAgICAgfVxuXG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjAwbXMgZWFzZS1pbi1vdXQ7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjYpO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgfVxuXG4gIC5uZy1hbmltYXRlLWRpc2FibGVkIC5tYXQtYmFkZ2UtY29udGVudCxcbiAgLm1hdC1iYWRnZS1jb250ZW50Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIHtcbiAgICB0cmFuc2l0aW9uOiBub25lO1xuICB9XG5cbiAgLy8gVGhlIGFjdGl2ZSBjbGFzcyBpcyBhZGRlZCBhZnRlciB0aGUgZWxlbWVudCBpcyBhZGRlZFxuICAvLyBzbyBpdCBjYW4gYW5pbWF0ZSBzY2FsZSB0byBkZWZhdWx0XG4gIC5tYXQtYmFkZ2UtY29udGVudC5tYXQtYmFkZ2UtYWN0aXZlIHtcbiAgICAvLyBTY2FsZSB0byBgbm9uZWAgaW5zdGVhZCBvZiBgMWAgdG8gYXZvaWQgYmx1cnJ5IHRleHQgaW4gc29tZSBicm93c2Vycy5cbiAgICB0cmFuc2Zvcm06IG5vbmU7XG4gIH1cblxuICAubWF0LWJhZGdlLXNtYWxsIHtcbiAgICBAaW5jbHVkZSBfbWF0LWJhZGdlLXNpemUoJG1hdC1iYWRnZS1zbWFsbC1zaXplKTtcbiAgfVxuICAubWF0LWJhZGdlLW1lZGl1bSB7XG4gICAgQGluY2x1ZGUgX21hdC1iYWRnZS1zaXplKCRtYXQtYmFkZ2UtZGVmYXVsdC1zaXplKTtcbiAgfVxuICAubWF0LWJhZGdlLWxhcmdlIHtcbiAgICBAaW5jbHVkZSBfbWF0LWJhZGdlLXNpemUoJG1hdC1iYWRnZS1sYXJnZS1zaXplKTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWJhZGdlLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgIGZvbnQtd2VpZ2h0OiAkbWF0LWJhZGdlLWZvbnQtd2VpZ2h0O1xuICAgIGZvbnQtc2l6ZTogJG1hdC1iYWRnZS1mb250LXNpemU7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtYmFkZ2Utc21hbGwgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAvLyBTZXQgdGhlIGZvbnQgc2l6ZSB0byA3NSUgb2YgdGhlIG9yaWdpbmFsLlxuICAgIGZvbnQtc2l6ZTogJG1hdC1iYWRnZS1mb250LXNpemUgKiAwLjc1O1xuICB9XG5cbiAgLm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgIGZvbnQtc2l6ZTogJG1hdC1iYWRnZS1mb250LXNpemUgKiAyO1xuICB9XG59XG5cblxuXG5cblxuQG1peGluIG1hdC1ib3R0b20tc2hlZXQtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigxNiwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGRpYWxvZyk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1ib3R0b20tc2hlZXQtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lciB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGJvZHktMSk7XG4gIH1cbn1cblxuXG5cblxuXG4kX21hdC1idXR0b24tcmlwcGxlLW9wYWNpdHk6IDAuMTtcblxuLy8gQXBwbGllcyBhIGZvY3VzIHN0eWxlIHRvIGFuIG1hdC1idXR0b24gZWxlbWVudCBmb3IgZWFjaCBvZiB0aGUgc3VwcG9ydGVkIHBhbGV0dGVzLlxuQG1peGluIF9tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXktY29sb3IoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuXG4gICYubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5KTtcbiAgfVxuXG4gICYubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCk7XG4gIH1cblxuICAmLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkd2Fybik7XG4gIH1cblxuICAmW2Rpc2FibGVkXSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxufVxuXG4vLyBBcHBsaWVzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGZvciBhIHJpcHBsZS4gSWYgdGhlIHZhbHVlIHByb3ZpZGVkIGlzIG5vdCBhIFNhc3MgY29sb3IsXG4vLyB3ZSBhc3N1bWUgdGhhdCB3ZSd2ZSBiZWVuIGdpdmVuIGEgQ1NTIHZhcmlhYmxlLiBTaW5jZSB3ZSBjYW4ndCBwZXJmb3JtIGFscGhhLWJsZW5kaW5nXG4vLyBvbiBhIENTUyB2YXJpYWJsZSwgd2UgaW5zdGVhZCBhZGQgdGhlIG9wYWNpdHkgZGlyZWN0bHkgdG8gdGhlIHJpcHBsZSBlbGVtZW50LlxuQG1peGluIF9tYXQtYnV0dG9uLXJpcHBsZS1iYWNrZ3JvdW5kKCRwYWxldHRlLCAkaHVlLCAkb3BhY2l0eSkge1xuICAkYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCAkaHVlLCAkb3BhY2l0eSk7XG4gIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWNvbG9yO1xuICBAaWYgKHR5cGUtb2YoJGJhY2tncm91bmQtY29sb3IpICE9IGNvbG9yKSB7XG4gICAgb3BhY2l0eTogJG9wYWNpdHk7XG4gIH1cbn1cblxuQG1peGluIF9tYXQtYnV0dG9uLXJpcHBsZS1jb2xvcigkdGhlbWUsICRodWUsICRvcGFjaXR5OiAkX21hdC1idXR0b24tcmlwcGxlLW9wYWNpdHkpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG5cbiAgJi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi1yaXBwbGUtYmFja2dyb3VuZCgkcHJpbWFyeSwgJGh1ZSwgJG9wYWNpdHkpO1xuICB9XG5cbiAgJi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLXJpcHBsZS1iYWNrZ3JvdW5kKCRhY2NlbnQsICRodWUsICRvcGFjaXR5KTtcbiAgfVxuXG4gICYubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tcmlwcGxlLWJhY2tncm91bmQoJHdhcm4sICRodWUsICRvcGFjaXR5KTtcbiAgfVxufVxuXG4vLyBBcHBsaWVzIGEgcHJvcGVydHkgdG8gYW4gbWF0LWJ1dHRvbiBlbGVtZW50IGZvciBlYWNoIG9mIHRoZSBzdXBwb3J0ZWQgcGFsZXR0ZXMuXG5AbWl4aW4gX21hdC1idXR0b24tdGhlbWUtcHJvcGVydHkoJHRoZW1lLCAkcHJvcGVydHksICRodWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgJi5tYXQtcHJpbWFyeSB7XG4gICAgI3skcHJvcGVydHl9OiBtYXQtY29sb3IoJHByaW1hcnksICRodWUpO1xuICB9XG4gICYubWF0LWFjY2VudCB7XG4gICAgI3skcHJvcGVydHl9OiBtYXQtY29sb3IoJGFjY2VudCwgJGh1ZSk7XG4gIH1cbiAgJi5tYXQtd2FybiB7XG4gICAgI3skcHJvcGVydHl9OiBtYXQtY29sb3IoJHdhcm4sICRodWUpO1xuICB9XG5cbiAgJi5tYXQtcHJpbWFyeSwgJi5tYXQtYWNjZW50LCAmLm1hdC13YXJuLCAmW2Rpc2FibGVkXSB7XG4gICAgJltkaXNhYmxlZF0ge1xuICAgICAgJHBhbGV0dGU6IGlmKCRwcm9wZXJ0eSA9PSAnY29sb3InLCAkZm9yZWdyb3VuZCwgJGJhY2tncm91bmQpO1xuICAgICAgI3skcHJvcGVydHl9OiBtYXQtY29sb3IoJHBhbGV0dGUsIGRpc2FibGVkLWJ1dHRvbik7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtYnV0dG9uLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWJ1dHRvbiwgLm1hdC1pY29uLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbiB7XG4gICAgLy8gQnV0dG9ucyB3aXRob3V0IGEgYmFja2dyb3VuZCBjb2xvciBzaG91bGQgaW5oZXJpdCB0aGUgZm9udCBjb2xvci4gVGhpcyBpcyBuZWNlc3NhcnkgdG9cbiAgICAvLyBlbnN1cmUgdGhhdCB0aGUgYnV0dG9uIGlzIHJlYWRhYmxlIG9uIGN1c3RvbSBiYWNrZ3JvdW5kIGNvbG9ycy4gSXQncyB3cm9uZyB0byBhbHdheXMgYXNzdW1lXG4gICAgLy8gdGhhdCB0aG9zZSBidXR0b25zIGFyZSBhbHdheXMgcGxhY2VkIGluc2lkZSBvZiBjb250YWluZXJzIHdpdGggdGhlIGRlZmF1bHQgYmFja2dyb3VuZFxuICAgIC8vIGNvbG9yIG9mIHRoZSB0aGVtZSAoZS5nLiB0aGVtZWQgdG9vbGJhcnMpLlxuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tdGhlbWUtcHJvcGVydHkoJHRoZW1lLCAnY29sb3InLCB0ZXh0KTtcbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LWNvbG9yKCR0aGVtZSk7XG5cbiAgICAvLyBTZXR1cCB0aGUgcmlwcGxlIGNvbG9yIHRvIGJlIGJhc2VkIG9uIHRoZSB0ZXh0IGNvbG9yLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgcmlwcGxlc1xuICAgIC8vIGFyZSBtYXRjaGluZyB3aXRoIHRoZSBjdXJyZW50IHRoZW1lIHBhbGV0dGUgYW5kIGFyZSBpbiBjb250cmFzdCB0byB0aGUgYmFja2dyb3VuZCBjb2xvclxuICAgIC8vIChlLmcgaW4gdGhlbWVkIHRvb2xiYXJzKS5cbiAgICAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAgIG9wYWNpdHk6ICRfbWF0LWJ1dHRvbi1yaXBwbGUtb3BhY2l0eTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGN1cnJlbnRDb2xvcjtcbiAgICB9XG4gIH1cblxuICAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5IHtcbiAgICBiYWNrZ3JvdW5kOiBtYXBfZ2V0KCRmb3JlZ3JvdW5kLCBiYXNlKTtcbiAgfVxuXG4gIC8vIE5vdGU6IHRoaXMgbmVlZHMgYSBiaXQgZXh0cmEgc3BlY2lmaWNpdHksIGJlY2F1c2Ugd2UncmUgbm90IGd1YXJhbnRlZWQgdGhlIGluY2x1c2lvblxuICAvLyBvcmRlciBvZiB0aGUgdGhlbWUgc3R5bGVzIGFuZCB0aGUgYnV0dG9uIHJlc2V0IG1heSBlbmQgdXAgcmVzZXR0aW5nIHRoaXMgYXMgd2VsbC5cbiAgLm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoW2Rpc2FibGVkXSkge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxuXG4gIC5tYXQtZmxhdC1idXR0b24sIC5tYXQtcmFpc2VkLWJ1dHRvbiwgLm1hdC1mYWIsIC5tYXQtbWluaS1mYWIge1xuICAgIC8vIERlZmF1bHQgZm9udCBhbmQgYmFja2dyb3VuZCBjb2xvciB3aGVuIG5vdCB1c2luZyBhbnkgY29sb3IgcGFsZXR0ZS5cbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIHJhaXNlZC1idXR0b24pO1xuXG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tdGhlbWUtcHJvcGVydHkoJHRoZW1lLCAnY29sb3InLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi10aGVtZS1wcm9wZXJ0eSgkdGhlbWUsICdiYWNrZ3JvdW5kLWNvbG9yJywgZGVmYXVsdCk7XG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tcmlwcGxlLWNvbG9yKCR0aGVtZSwgZGVmYXVsdC1jb250cmFzdCk7XG4gIH1cblxuICAubWF0LXN0cm9rZWQtYnV0dG9uLCAubWF0LWZsYXQtYnV0dG9uIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigwLCAkdGhlbWUpO1xuICB9XG5cbiAgLm1hdC1yYWlzZWQtYnV0dG9uIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigyLCAkdGhlbWUpO1xuXG4gICAgJjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDgsICR0aGVtZSk7XG4gICAgfVxuXG4gICAgJltkaXNhYmxlZF0ge1xuICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMCwgJHRoZW1lKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWZhYiwgLm1hdC1taW5pLWZhYiB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oNiwgJHRoZW1lKTtcblxuICAgICY6bm90KFtkaXNhYmxlZF0pOmFjdGl2ZSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigxMiwgJHRoZW1lKTtcbiAgICB9XG5cbiAgICAmW2Rpc2FibGVkXSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigwLCAkdGhlbWUpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWJ1dHRvbi10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1idXR0b24sIC5tYXQtcmFpc2VkLWJ1dHRvbiwgLm1hdC1pY29uLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbixcbiAgLm1hdC1mbGF0LWJ1dHRvbiwgLm1hdC1mYWIsIC5tYXQtbWluaS1mYWIge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGJ1dHRvbik7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJ1dHRvbik7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBidXR0b24pO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuQG1peGluIG1hdC1idXR0b24tdG9nZ2xlLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZGl2aWRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcblxuICAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSxcbiAgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigyLCAkdGhlbWUpO1xuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCxcbiAgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQge1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGhpbnQtdGV4dCk7XG5cbiAgICAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGZvY3VzZWQtYnV0dG9uKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcblxuICAgIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZm9jdXNlZC1idXR0b24sIDEpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSArIC5tYXQtYnV0dG9uLXRvZ2dsZSB7XG4gICAgYm9yZGVyLWxlZnQ6IHNvbGlkIDFweCAkZGl2aWRlci1jb2xvcjtcbiAgfVxuXG4gIFtkaXI9J3J0bCddIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSArIC5tYXQtYnV0dG9uLXRvZ2dsZSB7XG4gICAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gICAgYm9yZGVyLXJpZ2h0OiBzb2xpZCAxcHggJGRpdmlkZXItY29sb3I7XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbCB7XG4gICAgLm1hdC1idXR0b24tdG9nZ2xlICsgLm1hdC1idXR0b24tdG9nZ2xlIHtcbiAgICAgIGJvcmRlci1sZWZ0OiBub25lO1xuICAgICAgYm9yZGVyLXJpZ2h0OiBub25lO1xuICAgICAgYm9yZGVyLXRvcDogc29saWQgMXB4ICRkaXZpZGVyLWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIHNlbGVjdGVkLWJ1dHRvbik7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuXG4gICAgJi5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtYnV0dG9uKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGRpc2FibGVkLWJ1dHRvbi10b2dnbGUpO1xuXG4gICAgJi5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gICAgfVxuXG4gICAgJi5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgc2VsZWN0ZWQtZGlzYWJsZWQtYnV0dG9uKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLFxuICAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCB7XG4gICAgYm9yZGVyOiBzb2xpZCAxcHggJGRpdmlkZXItY29sb3I7XG4gIH1cbn1cblxuQG1peGluIG1hdC1idXR0b24tdG9nZ2xlLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWJ1dHRvbi10b2dnbGUge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cbn1cblxuXG5cblxuXG5cblxuQG1peGluIG1hdC1jYXJkLXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtY2FyZCB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMSwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gICAgLy8gTmVlZHMgZXh0cmEgc3BlY2lmaWNpdHkgdG8gYmUgYWJsZSB0byBvdmVycmlkZSB0aGUgZWxldmF0aW9uIHNlbGVjdG9ycy5cbiAgICAmLm1hdC1jYXJkLWZsYXQge1xuICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMCwgJHRoZW1lKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWNhcmQtc3VidGl0bGUge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWNhcmQtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtY2FyZCB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtY2FyZC10aXRsZSB7XG4gICAgZm9udDoge1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBoZWFkbGluZSk7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCB0aXRsZSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1jYXJkLWhlYWRlciAubWF0LWNhcmQtdGl0bGUge1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCB0aXRsZSk7XG4gIH1cblxuICAubWF0LWNhcmQtc3VidGl0bGUsXG4gIC5tYXQtY2FyZC1jb250ZW50IHtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKTtcbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtY2hlY2tib3gtdGhlbWUoJHRoZW1lKSB7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG5cbiAgLy8gVGhlIGNvbG9yIG9mIHRoZSBjaGVja2JveCdzIGNoZWNrbWFyayAvIG1peGVkbWFyay5cbiAgJGNoZWNrYm94LW1hcmstY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgYmFja2dyb3VuZCk7XG5cbiAgLy8gTk9URSh0cmF2aXNrYXVmbWFuKTogV2hpbGUgdGhlIHNwZWMgY2FsbHMgZm9yIHRyYW5zbHVjZW50IGJsYWNrcy93aGl0ZXMgZm9yIGRpc2FibGVkIGNvbG9ycyxcbiAgLy8gdGhpcyBkb2VzIG5vdCB3b3JrIHdlbGwgd2l0aCBlbGVtZW50cyBsYXllcmVkIG9uIHRvcCBvZiBvbmUgYW5vdGhlci4gVG8gZ2V0IGFyb3VuZCB0aGlzIHdlXG4gIC8vIGJsZW5kIHRoZSBjb2xvcnMgdG9nZXRoZXIgYmFzZWQgb24gdGhlIGJhc2UgY29sb3IgYW5kIHRoZSB0aGVtZSBiYWNrZ3JvdW5kLlxuICAkd2hpdGUtMzBwY3Qtb3BhY2l0eS1vbi1kYXJrOiAjNjg2ODY4O1xuICAkYmxhY2stMjZwY3Qtb3BhY2l0eS1vbi1saWdodDogI2IwYjBiMDtcbiAgJGRpc2FibGVkLWNvbG9yOiBpZigkaXMtZGFyay10aGVtZSwgJHdoaXRlLTMwcGN0LW9wYWNpdHktb24tZGFyaywgJGJsYWNrLTI2cGN0LW9wYWNpdHktb24tbGlnaHQpO1xuXG4gIC5tYXQtY2hlY2tib3gtZnJhbWUge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LWNoZWNrYm94LWNoZWNrbWFyayB7XG4gICAgZmlsbDogJGNoZWNrYm94LW1hcmstY29sb3I7XG4gIH1cblxuICAubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoIHtcbiAgICAvLyAhaW1wb3J0YW50IGlzIG5lZWRlZCBoZXJlIGJlY2F1c2UgYSBzdHJva2UgbXVzdCBiZSBzZXQgYXMgYW5cbiAgICAvLyBhdHRyaWJ1dGUgb24gdGhlIFNWRyBpbiBvcmRlciBmb3IgbGluZSBhbmltYXRpb24gdG8gd29yayBwcm9wZXJseS5cbiAgICBzdHJva2U6ICRjaGVja2JveC1tYXJrLWNvbG9yICFpbXBvcnRhbnQ7XG4gIH1cblxuICAubWF0LWNoZWNrYm94LW1peGVkbWFyayB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNoZWNrYm94LW1hcmstY29sb3I7XG4gIH1cblxuICAubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUsIC5tYXQtY2hlY2tib3gtY2hlY2tlZCB7XG4gICAgJi5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5KTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYWNjZW50KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHdhcm4pO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtY2hlY2tib3gtZGlzYWJsZWQge1xuICAgICYubWF0LWNoZWNrYm94LWNoZWNrZWQsXG4gICAgJi5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSB7XG4gICAgICAubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZGlzYWJsZWQtY29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjpub3QoLm1hdC1jaGVja2JveC1jaGVja2VkKSB7XG4gICAgICAubWF0LWNoZWNrYm94LWZyYW1lIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkZGlzYWJsZWQtY29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLm1hdC1jaGVja2JveC1sYWJlbCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU3dpdGNoIHRoaXMgdG8gYSBzb2xpZCBjb2xvciBzaW5jZSB3ZSdyZSB1c2luZyBgb3BhY2l0eWBcbiAgLy8gdG8gY29udHJvbCBob3cgb3BhcXVlIHRoZSByaXBwbGUgc2hvdWxkIGJlLlxuICAubWF0LWNoZWNrYm94IC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hcF9nZXQobWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpLCBiYXNlKTtcbiAgfVxuXG4gIC5tYXQtY2hlY2tib3gtY2hlY2tlZDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCksXG4gIC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKSB7XG4gICAgJi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRhY2NlbnQpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJHdhcm4pO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWNoZWNrYm94LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWNoZWNrYm94IHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLy8gVE9ETyhrYXJhKTogUmVtb3ZlIHRoaXMgc3R5bGUgd2hlbiBmaXhpbmcgdmVydGljYWwgYmFzZWxpbmVcbiAgLm1hdC1jaGVja2JveC1sYXlvdXQgLm1hdC1jaGVja2JveC1sYWJlbCB7XG4gICAgbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBib2R5LTIpO1xuICB9XG59XG5cblxuXG5cblxuXG4kbWF0LWNoaXAtcmVtb3ZlLWZvbnQtc2l6ZTogMThweDtcblxuQG1peGluIG1hdC1jaGlwcy1jb2xvcigkZm9yZWdyb3VuZCwgJGJhY2tncm91bmQpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQ7XG4gIGNvbG9yOiAkZm9yZWdyb3VuZDtcblxuICAubWF0LWNoaXAtcmVtb3ZlIHtcbiAgICBjb2xvcjogJGZvcmVncm91bmQ7XG4gICAgb3BhY2l0eTogMC40O1xuICB9XG59XG5cblxuLy8gQXBwbGllcyB0aGUgYmFja2dyb3VuZCBjb2xvciBmb3IgYSByaXBwbGUgZWxlbWVudC5cbi8vIElmIHRoZSBjb2xvciB2YWx1ZSBwcm92aWRlZCBpcyBub3QgYSBTYXNzIGNvbG9yLFxuLy8gd2UgYXNzdW1lIHRoYXQgd2UndmUgYmVlbiBnaXZlbiBhIENTUyB2YXJpYWJsZS5cbi8vIFNpbmNlIHdlIGNhbid0IHBlcmZvcm0gYWxwaGEtYmxlbmRpbmcgb24gYSBDU1MgdmFyaWFibGUsXG4vLyB3ZSBpbnN0ZWFkIGFkZCB0aGUgb3BhY2l0eSBkaXJlY3RseSB0byB0aGUgcmlwcGxlIGVsZW1lbnQuXG5AbWl4aW4gX21hdC1jaGlwcy1yaXBwbGUtYmFja2dyb3VuZCgkcGFsZXR0ZSwgJGRlZmF1bHQtY29udHJhc3QsICRvcGFjaXR5KSB7XG4gICRiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsICRkZWZhdWx0LWNvbnRyYXN0LCAkb3BhY2l0eSk7XG4gIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWNvbG9yO1xuICBAaWYgKHR5cGUtb2YoJGJhY2tncm91bmQtY29sb3IpICE9IGNvbG9yKSB7XG4gICAgb3BhY2l0eTogJG9wYWNpdHk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1jaGlwcy10aGVtZS1jb2xvcigkcGFsZXR0ZSkge1xuICBAaW5jbHVkZSBtYXQtY2hpcHMtY29sb3IobWF0LWNvbG9yKCRwYWxldHRlLCBkZWZhdWx0LWNvbnRyYXN0KSwgbWF0LWNvbG9yKCRwYWxldHRlKSk7XG5cbiAgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICBAaW5jbHVkZSBfbWF0LWNoaXBzLXJpcHBsZS1iYWNrZ3JvdW5kKCRwYWxldHRlLCBkZWZhdWx0LWNvbnRyYXN0LCAwLjEpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtY2hpcHMtdGhlbWUoJHRoZW1lKSB7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gICR1bnNlbGVjdGVkLWJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgdW5zZWxlY3RlZC1jaGlwKTtcbiAgJHVuc2VsZWN0ZWQtZm9yZWdyb3VuZDogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAge1xuICAgIEBpbmNsdWRlIG1hdC1jaGlwcy1jb2xvcigkdW5zZWxlY3RlZC1mb3JlZ3JvdW5kLCAkdW5zZWxlY3RlZC1iYWNrZ3JvdW5kKTtcblxuICAgICY6bm90KC5tYXQtY2hpcC1kaXNhYmxlZCkge1xuICAgICAgJjphY3RpdmUge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigzLCAkdGhlbWUpO1xuICAgICAgfVxuXG4gICAgICAubWF0LWNoaXAtcmVtb3ZlOmhvdmVyIHtcbiAgICAgICAgb3BhY2l0eTogMC41NDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLm1hdC1jaGlwLWRpc2FibGVkIHtcbiAgICAgIG9wYWNpdHk6IDAuNDtcbiAgICB9XG5cbiAgICAmOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXBfZ2V0KCRmb3JlZ3JvdW5kLCBiYXNlKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQge1xuICAgICYubWF0LXByaW1hcnkge1xuICAgICAgQGluY2x1ZGUgbWF0LWNoaXBzLXRoZW1lLWNvbG9yKCRwcmltYXJ5KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIEBpbmNsdWRlIG1hdC1jaGlwcy10aGVtZS1jb2xvcigkd2Fybik7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IHtcbiAgICAgIEBpbmNsdWRlIG1hdC1jaGlwcy10aGVtZS1jb2xvcigkYWNjZW50KTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1jaGlwcy10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1jaGlwIHtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0yKTtcbiAgICBmb250LXdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMik7XG5cbiAgICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbixcbiAgICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uIHtcbiAgICAgIGZvbnQtc2l6ZTogJG1hdC1jaGlwLXJlbW92ZS1mb250LXNpemU7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuQG1peGluIG1hdC10YWJsZS10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LXRhYmxlIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdjYXJkJyk7XG4gIH1cblxuICAubWF0LXRhYmxlIHRoZWFkLCAubWF0LXRhYmxlIHRib2R5LCAubWF0LXRhYmxlIHRmb290LFxuICBtYXQtaGVhZGVyLXJvdywgbWF0LXJvdywgbWF0LWZvb3Rlci1yb3csXG4gIFttYXQtaGVhZGVyLXJvd10sIFttYXQtcm93XSwgW21hdC1mb290ZXItcm93XSxcbiAgLm1hdC10YWJsZS1zdGlja3kge1xuICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7XG4gIH1cblxuICBtYXQtcm93LCBtYXQtaGVhZGVyLXJvdywgbWF0LWZvb3Rlci1yb3csXG4gIHRoLm1hdC1oZWFkZXItY2VsbCwgdGQubWF0LWNlbGwsIHRkLm1hdC1mb290ZXItY2VsbCB7XG4gICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxuXG4gIC5tYXQtaGVhZGVyLWNlbGwge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtY2VsbCwgLm1hdC1mb290ZXItY2VsbCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC10YWJsZS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC10YWJsZSB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtaGVhZGVyLWNlbGwge1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKTtcbiAgICBmb250LXdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMik7XG4gIH1cblxuICAubWF0LWNlbGwsIC5tYXQtZm9vdGVyLWNlbGwge1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpO1xuICB9XG59XG5cblxuXG5cblxuXG5cbiRtYXQtZGF0ZXBpY2tlci1zZWxlY3RlZC10b2RheS1ib3gtc2hhZG93LXdpZHRoOiAxcHg7XG4kbWF0LWRhdGVwaWNrZXItc2VsZWN0ZWQtZmFkZS1hbW91bnQ6IDAuNjtcbiRtYXQtZGF0ZXBpY2tlci10b2RheS1mYWRlLWFtb3VudDogMC4yO1xuJG1hdC1jYWxlbmRhci1ib2R5LWZvbnQtc2l6ZTogMTNweCAhZGVmYXVsdDtcbiRtYXQtY2FsZW5kYXItd2Vla2RheS10YWJsZS1mb250LXNpemU6IDExcHggIWRlZmF1bHQ7XG5cbkBtaXhpbiBfbWF0LWRhdGVwaWNrZXItY29sb3IoJHBhbGV0dGUpIHtcbiAgLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsIGRlZmF1bHQtY29udHJhc3QpO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkID4gLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkIHtcbiAgICAkYmFja2dyb3VuZDogbWF0LWNvbG9yKCRwYWxldHRlKTtcblxuICAgIEBpZiAodHlwZS1vZigkYmFja2dyb3VuZCkgPT0gY29sb3IpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGZhZGUtb3V0KCRiYWNrZ3JvdW5kLCAkbWF0LWRhdGVwaWNrZXItc2VsZWN0ZWQtZmFkZS1hbW91bnQpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICAvLyBJZiB3ZSBjb3VsZG4ndCByZXNvbHZlIHRvIGJhY2tncm91bmQgdG8gYSBjb2xvciAoZS5nLiBpdCdzIGEgQ1NTIHZhcmlhYmxlKSxcbiAgICAgIC8vIGZhbGwgYmFjayB0byBmYWRpbmcgdGhlIGNvbnRlbnQgb3V0IHZpYSBgb3BhY2l0eWAuXG4gICAgICBvcGFjaXR5OiAkbWF0LWRhdGVwaWNrZXItdG9kYXktZmFkZS1hbW91bnQ7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkIHtcbiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAkbWF0LWRhdGVwaWNrZXItc2VsZWN0ZWQtdG9kYXktYm94LXNoYWRvdy13aWR0aFxuICAgICAgICAgICAgICAgIG1hdC1jb2xvcigkcGFsZXR0ZSwgZGVmYXVsdC1jb250cmFzdCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1kYXRlcGlja2VyLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuXG4gIC5tYXQtY2FsZW5kYXItYXJyb3cge1xuICAgIGJvcmRlci10b3AtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaWNvbik7XG4gIH1cblxuICAvLyBUaGUgcHJldi9uZXh0IGJ1dHRvbnMgbmVlZCBhIGJpdCBtb3JlIHNwZWNpZmljaXR5IHRvXG4gIC8vIGF2b2lkIGJlaW5nIG92ZXJ3cml0dGVuIGJ5IHRoZSAubWF0LWljb24tYnV0dG9uLlxuICAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLFxuICAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLW5leHQtYnV0dG9uLFxuICAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLXByZXZpb3VzLWJ1dHRvbiB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaWNvbik7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlciB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaGludC10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyLWRpdmlkZXI6OmFmdGVyIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50IHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkID4gLm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3ZlcixcbiAgLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmUsXG4gIC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmUge1xuICAgICYgPiAubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKSB7XG4gICAgLy8gTm90ZTogdGhvdWdoIGl0J3Mgbm90IHRleHQsIHRoZSBib3JkZXIgaXMgYSBoaW50IGFib3V0IHRoZSBmYWN0IHRoYXQgdGhpcyBpcyB0b2RheSdzIGRhdGUsXG4gICAgLy8gc28gd2UgdXNlIHRoZSBoaW50IGNvbG9yLlxuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBoaW50LXRleHQpO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkID4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpIHtcbiAgICAkY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaGludC10ZXh0KTtcblxuICAgIEBpZiAodHlwZS1vZigkY29sb3IpID09IGNvbG9yKSB7XG4gICAgICBib3JkZXItY29sb3I6IGZhZGUtb3V0KCRjb2xvciwgJG1hdC1kYXRlcGlja2VyLXRvZGF5LWZhZGUtYW1vdW50KTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgLy8gSWYgdGhlIGNvbG9yIGRpZG4ndCByZXNvbHZlIHRvIGEgY29sb3IgdmFsdWUsIGJ1dCBzb21ldGhpbmcgbGlrZSBhIENTUyB2YXJpYWJsZSwgd2UgY2FuJ3RcbiAgICAgIC8vIGZhZGUgaXQgb3V0IHNvIHdlIGZhbGwgYmFjayB0byByZWR1Y2luZyB0aGUgZWxlbWVudCBvcGFjaXR5LiBOb3RlIHRoYXQgd2UgZG9uJ3QgdXNlIHRoZVxuICAgICAgLy8gJG1hdC1kYXRlcGlja2VyLXRvZGF5LWZhZGUtYW1vdW50LCBiZWNhdXNlIGhpbnQgdGV4dCB1c3VhbGx5IGhhcyBzb21lIG9wYWNpdHkgYXBwbGllZFxuICAgICAgLy8gdG8gaXQgYWxyZWFkeSBhbmQgd2UgZG9uJ3Qgd2FudCB0aGVtIHRvIHN0YWNrIG9uIHRvcCBvZiBlYWNoIG90aGVyLlxuICAgICAgb3BhY2l0eTogMC41O1xuICAgIH1cbiAgfVxuXG4gIEBpbmNsdWRlIF9tYXQtZGF0ZXBpY2tlci1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSkpO1xuXG4gIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbig0LCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgQGluY2x1ZGUgX21hdC1kYXRlcGlja2VyLWNvbG9yKG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpKTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtZGF0ZXBpY2tlci1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgd2FybikpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50LXRvdWNoIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigwLCAkdGhlbWUpO1xuICB9XG5cbiAgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUge1xuICAgIGNvbG9yOiBtYXQtY29sb3IobWFwLWdldCgkdGhlbWUsIHByaW1hcnkpLCB0ZXh0KTtcblxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpLCB0ZXh0KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IobWFwLWdldCgkdGhlbWUsIHdhcm4pLCB0ZXh0KTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1kYXRlcGlja2VyLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWNhbGVuZGFyIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5IHtcbiAgICBmb250LXNpemU6ICRtYXQtY2FsZW5kYXItYm9keS1mb250LXNpemU7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktbGFiZWwsXG4gIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbiB7XG4gICAgZm9udDoge1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBidXR0b24pO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYnV0dG9uKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlciB0aCB7XG4gICAgZm9udDoge1xuICAgICAgc2l6ZTogJG1hdC1jYWxlbmRhci13ZWVrZGF5LXRhYmxlLWZvbnQtc2l6ZTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMSk7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtZGlhbG9nLXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oMjQsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBkaWFsb2cpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtZGlhbG9nLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWRpYWxvZy10aXRsZSB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIHRpdGxlKTtcbiAgfVxufVxuXG5cblxuXG5cblxuQG1peGluIG1hdC1leHBhbnNpb24tcGFuZWwtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1leHBhbnNpb24tcGFuZWwge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDIsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtYWN0aW9uLXJvdyB7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxuXG4gIC5tYXQtZXhwYW5zaW9uLXBhbmVsIHtcbiAgICAmIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZCxcbiAgICAmIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkLFxuICAgICY6bm90KC5tYXQtZXhwYW5kZWQpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3ZlciB7XG4gICAgICAmOm5vdChbYXJpYS1kaXNhYmxlZD0ndHJ1ZSddKSB7XG4gICAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIERpc2FibGUgdGhlIGhvdmVyIG9uIHRvdWNoIGRldmljZXMgc2luY2UgaXQgY2FuIGFwcGVhciBsaWtlIGl0IGlzIHN0dWNrLiBXZSBjYW4ndCB1c2VcbiAgLy8gYEBtZWRpYSAoaG92ZXIpYCBhYm92ZSwgYmVjYXVzZSB0aGUgZGVza3RvcCBzdXBwb3J0IGJyb3dzZXIgc3VwcG9ydCBpc24ndCBncmVhdC5cbiAgQG1lZGlhIChob3Zlcjogbm9uZSkge1xuICAgIC5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKTpub3QoW2FyaWEtZGlzYWJsZWQ9J3RydWUnXSlcbiAgICAgIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cblxuICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sXG4gIC5tYXQtZXhwYW5zaW9uLWluZGljYXRvcjo6YWZ0ZXIge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPSd0cnVlJ10ge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLWJ1dHRvbik7XG5cbiAgICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUsXG4gICAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIHtcbiAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWV4cGFuc2lvbi1wYW5lbC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBzdWJoZWFkaW5nLTEpO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBzdWJoZWFkaW5nLTEpO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgc3ViaGVhZGluZy0xKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgYm9keS0xKTtcbiAgfVxufVxuXG5cblxuXG4vLyBUaGlzIG1peGluIHdpbGwgZW5zdXJlIHRoYXQgbGluZXMgdGhhdCBvdmVyZmxvdyB0aGUgY29udGFpbmVyIHdpbGwgaGlkZSB0aGUgb3ZlcmZsb3cgYW5kXG4vLyB0cnVuY2F0ZSBuZWF0bHkgd2l0aCBhbiBlbGxpcHNpcy5cbkBtaXhpbiBtYXQtdHJ1bmNhdGUtbGluZSgpIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbi8vIE1peGluIHRvIHByb3ZpZGUgYWxsIG1hdC1saW5lIHN0eWxlcywgY2hhbmdpbmcgc2Vjb25kYXJ5IGZvbnQgc2l6ZSBiYXNlZCBvbiB3aGV0aGVyIHRoZSBsaXN0XG4vLyBpcyBpbiBkZW5zZSBtb2RlLlxuQG1peGluIG1hdC1saW5lLWJhc2UoJHNlY29uZGFyeS1mb250LXNpemUpIHtcbiAgLm1hdC1saW5lIHtcbiAgICBAaW5jbHVkZSBtYXQtdHJ1bmNhdGUtbGluZSgpO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cbiAgICAvLyBhbGwgbGluZXMgYnV0IHRoZSB0b3AgbGluZSBzaG91bGQgaGF2ZSBzbWFsbGVyIHRleHRcbiAgICAmOm50aC1jaGlsZChuKzIpIHtcbiAgICAgIGZvbnQtc2l6ZTogJHNlY29uZGFyeS1mb250LXNpemU7XG4gICAgfVxuICB9XG59XG5cbi8vIFRoaXMgbWl4aW4gbm9ybWFsaXplcyBkZWZhdWx0IGVsZW1lbnQgc3R5bGVzLCBlLmcuIGZvbnQgd2VpZ2h0IGZvciBoZWFkaW5nIHRleHQuXG5AbWl4aW4gbWF0LW5vcm1hbGl6ZS10ZXh0KCkge1xuICAmID4gKiB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gIH1cbn1cblxuLy8gVGhpcyBtaXhpbiBwcm92aWRlcyBiYXNlIHN0eWxlcyBmb3IgdGhlIHdyYXBwZXIgYXJvdW5kIG1hdC1saW5lIGVsZW1lbnRzIGluIGEgbGlzdC5cbkBtaXhpbiBtYXQtbGluZS13cmFwcGVyLWJhc2UoKSB7XG4gIEBpbmNsdWRlIG1hdC1ub3JtYWxpemUtdGV4dCgpO1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHdpZHRoOiAxMDAlO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIC8vIE11c3QgcmVtb3ZlIHdyYXBwZXIgd2hlbiBsaW5lcyBhcmUgZW1wdHkgb3IgaXQgdGFrZXMgdXAgaG9yaXpvbnRhbFxuICAvLyBzcGFjZSBhbmQgcHVzaGVzIG90aGVyIGVsZW1lbnRzIHRvIHRoZSByaWdodC5cbiAgJjplbXB0eSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG5cblxuLy8gSW5jbHVkZSB0aGlzIGVtcHR5IG1peGluIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBvdGhlciBjb21wb25lbnRzLlxuQG1peGluIG1hdC1ncmlkLWxpc3QtdGhlbWUoJHRoZW1lKSB7IH1cblxuQG1peGluIG1hdC1ncmlkLWxpc3QtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtZ3JpZC10aWxlLWhlYWRlcixcbiAgLm1hdC1ncmlkLXRpbGUtZm9vdGVyIHtcbiAgICBAaW5jbHVkZSBtYXQtbGluZS1iYXNlKG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbikpO1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpO1xuICB9XG59XG5cblxuXG5cbi8vIEluY2x1ZGUgdGhpcyBlbXB0eSBtaXhpbiBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgb3RoZXIgY29tcG9uZW50cy5cbkBtaXhpbiBtYXQtaWNvbi10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1pY29uIHtcbiAgICAmLm1hdC1wcmltYXJ5IHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIHRleHQpO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIHRleHQpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtaWNvbi10eXBvZ3JhcGh5KCRjb25maWcpIHsgfVxuXG5cblxuXG5cbi8vIFJlbmRlcnMgYSBncmFkaWVudCBmb3Igc2hvd2luZyB0aGUgZGFzaGVkIGxpbmUgd2hlbiB0aGUgaW5wdXQgaXMgZGlzYWJsZWQuXG4vLyBVbmxpa2UgdXNpbmcgYSBib3JkZXIsIGEgZ3JhZGllbnQgYWxsb3dzIHVzIHRvIGFkanVzdCB0aGUgc3BhY2luZyBvZiB0aGUgZG90dGVkIGxpbmVcbi8vIHRvIG1hdGNoIHRoZSBNYXRlcmlhbCBEZXNpZ24gc3BlYy5cbkBtaXhpbiBtYXQtY29udHJvbC1kaXNhYmxlZC11bmRlcmxpbmUoJGNvbG9yKSB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgJGNvbG9yIDAlLCAkY29sb3IgMzMlLCB0cmFuc3BhcmVudCAwJSk7XG4gIGJhY2tncm91bmQtc2l6ZTogNHB4IDEwMCU7XG4gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcbn1cblxuLy8gRmlndXJlcyBvdXQgdGhlIGNvbG9yIG9mIHRoZSBwbGFjZWhvbGRlciBmb3IgYSBmb3JtIGNvbnRyb2wuXG4vLyBVc2VkIHByaW1hcmlseSB0byBwcmV2ZW50IHRoZSB2YXJpb3VzIGZvcm0gY29udHJvbHMgZnJvbVxuLy8gYmVjb21pbmcgb3V0IG9mIHN5bmMgc2luY2UgdGhlc2UgY29sb3JzIGFyZW4ndCBpbiBhIHBhbGV0dGUuXG5AZnVuY3Rpb24gX21hdC1jb250cm9sLXBsYWNlaG9sZGVyLWNvbG9yKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuICBAcmV0dXJuIG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjUsIDAuNDIpKTtcbn1cblxuXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXRlcmlhbC9uby1wcmVmaXhlcyAqL1xuQG1peGluIHVzZXItc2VsZWN0KCR2YWx1ZSkge1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiAkdmFsdWU7XG4gIC1tb3otdXNlci1zZWxlY3Q6ICR2YWx1ZTtcbiAgLW1zLXVzZXItc2VsZWN0OiAkdmFsdWU7XG4gIHVzZXItc2VsZWN0OiAkdmFsdWU7XG59XG5cbkBtaXhpbiBpbnB1dC1wbGFjZWhvbGRlciB7XG4gICY6OnBsYWNlaG9sZGVyIHtcbiAgICBAY29udGVudDtcbiAgfVxuXG4gICY6Oi1tb3otcGxhY2Vob2xkZXIge1xuICAgIEBjb250ZW50O1xuICB9XG5cbiAgJjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cblxuICAmOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cbn1cblxuQG1peGluIGN1cnNvci1ncmFiIHtcbiAgY3Vyc29yOiAtd2Via2l0LWdyYWI7XG4gIGN1cnNvcjogZ3JhYjtcbn1cblxuQG1peGluIGN1cnNvci1ncmFiYmluZyB7XG4gIGN1cnNvcjogLXdlYmtpdC1ncmFiYmluZztcbiAgY3Vyc29yOiBncmFiYmluZztcbn1cblxuQG1peGluIGJhY2tmYWNlLXZpc2liaWxpdHkoJHZhbHVlKSB7XG4gIC13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTogJHZhbHVlO1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiAkdmFsdWU7XG59XG4vKiBzdHlsZWxpbnQtZW5hYmxlICovXG5cblxuXG5AbWl4aW4gbWF0LWlucHV0LXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVyIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LWlucHV0LWVsZW1lbnQ6ZGlzYWJsZWQsXG4gIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXIge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICB9XG5cbiAgLm1hdC1pbnB1dC1lbGVtZW50IHtcbiAgICBjYXJldC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCB0ZXh0KTtcblxuICAgIEBpbmNsdWRlIGlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICAgIGNvbG9yOiBfbWF0LWNvbnRyb2wtcGxhY2Vob2xkZXItY29sb3IoJHRoZW1lKTtcbiAgICB9XG5cbiAgICAvLyBPbiBkYXJrIHRoZW1lcyB3ZSBzZXQgdGhlIG5hdGl2ZSBgc2VsZWN0YCBjb2xvciB0byBzb21lIHNoYWRlIG9mIHdoaXRlLFxuICAgIC8vIGhvd2V2ZXIgdGhlIGNvbG9yIHByb3BhZ2F0ZXMgdG8gYWxsIG9mIHRoZSBgb3B0aW9uYCBlbGVtZW50cywgd2hpY2ggYXJlXG4gICAgLy8gYWx3YXlzIG9uIGEgd2hpdGUgYmFja2dyb3VuZCBpbnNpZGUgdGhlIGRyb3Bkb3duLCBjYXVzaW5nIHRoZW0gdG8gYmxlbmQgaW4uXG4gICAgLy8gU2luY2Ugd2UgY2FuJ3QgY2hhbmdlIGJhY2tncm91bmQgb2YgdGhlIGRyb3Bkb3duLCB3ZSBuZWVkIHRvIGV4cGxpY2l0bHlcbiAgICAvLyByZXNldCB0aGUgY29sb3Igb2YgdGhlIG9wdGlvbnMgdG8gc29tZXRoaW5nIGRhcmsuXG4gICAgQGlmIChtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyaykpIHtcbiAgICAgIG9wdGlvbiB7XG4gICAgICAgIGNvbG9yOiAkZGFyay1wcmltYXJ5LXRleHQ7XG4gICAgICB9XG5cbiAgICAgIG9wdGlvbjpkaXNhYmxlZCB7XG4gICAgICAgIGNvbG9yOiAkZGFyay1kaXNhYmxlZC10ZXh0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5tYXQtYWNjZW50IC5tYXQtaW5wdXQtZWxlbWVudCB7XG4gICAgY2FyZXQtY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtd2FybiAubWF0LWlucHV0LWVsZW1lbnQsXG4gIC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudCB7XG4gICAgY2FyZXQtY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXIge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtaW5wdXQtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC8vIFRoZSB1bml0LWxlc3MgbGluZS1oZWlnaHQgZnJvbSB0aGUgZm9udCBjb25maWcuXG4gICRsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGlucHV0KTtcblxuICAvLyBUaGUgYW1vdW50IG9mIHNwYWNlIGJldHdlZW4gdGhlIHRvcCBvZiB0aGUgbGluZSBhbmQgdGhlIHRvcCBvZiB0aGUgYWN0dWFsIHRleHRcbiAgLy8gKGFzIGEgZnJhY3Rpb24gb2YgdGhlIGZvbnQtc2l6ZSkuXG4gICRsaW5lLXNwYWNpbmc6ICgkbGluZS1oZWlnaHQgLSAxKSAvIDI7XG5cbiAgLy8gPGlucHV0PiBlbGVtZW50cyBzZWVtIHRvIGhhdmUgdGhlaXIgaGVpZ2h0IHNldCBzbGlnaHRseSB0b28gbGFyZ2Ugb24gU2FmYXJpIGNhdXNpbmcgdGhlIHRleHQgdG9cbiAgLy8gYmUgbWlzYWxpZ25lZCB3LnIudC4gdGhlIHBsYWNlaG9sZGVyLiBBZGRpbmcgdGhpcyBtYXJnaW4gY29ycmVjdHMgaXQuXG4gIGlucHV0Lm1hdC1pbnB1dC1lbGVtZW50IHtcbiAgICBtYXJnaW4tdG9wOiAtJGxpbmUtc3BhY2luZyAqIDFlbTtcbiAgfVxufVxuXG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LWxpc3QtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1saXN0LWJhc2Uge1xuICAgIC5tYXQtbGlzdC1pdGVtIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIH1cblxuICAgIC5tYXQtbGlzdC1vcHRpb24ge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgfVxuXG4gICAgLm1hdC1zdWJoZWFkZXIge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtbGlzdC1pdGVtLWRpc2FibGVkIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGRpc2FibGVkLWxpc3Qtb3B0aW9uKTtcbiAgfVxuXG4gIC5tYXQtbGlzdC1vcHRpb24sXG4gIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0sXG4gIC5tYXQtYWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ge1xuICAgICY6aG92ZXIsICY6Zm9jdXMge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnaG92ZXInKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbiB7XG4gICAgJiwgJjpob3ZlciwgJjpmb2N1cyB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyLCAwLjEyKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1saXN0LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAkZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcblxuICAubWF0LWxpc3QtaXRlbSB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseTtcbiAgfVxuXG4gIC5tYXQtbGlzdC1vcHRpb24ge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHk7XG4gIH1cblxuICAvLyBEZWZhdWx0IGxpc3RcbiAgLm1hdC1saXN0LWJhc2Uge1xuICAgIC5tYXQtbGlzdC1pdGVtIHtcbiAgICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBzdWJoZWFkaW5nLTIpO1xuICAgICAgQGluY2x1ZGUgbWF0LWxpbmUtYmFzZShtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSkpO1xuICAgIH1cblxuICAgIC5tYXQtbGlzdC1vcHRpb24ge1xuICAgICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIHN1YmhlYWRpbmctMik7XG4gICAgICBAaW5jbHVkZSBtYXQtbGluZS1iYXNlKG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKSk7XG4gICAgfVxuXG4gICAgLm1hdC1zdWJoZWFkZXIge1xuICAgICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBib2R5LTIpO1xuICAgICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMik7XG4gICAgICBmb250LXdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMik7XG4gICAgfVxuICB9XG5cbiAgLy8gRGVuc2UgbGlzdFxuICAubWF0LWxpc3QtYmFzZVtkZW5zZV0ge1xuICAgIC5tYXQtbGlzdC1pdGVtIHtcbiAgICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKTtcbiAgICAgIEBpbmNsdWRlIG1hdC1saW5lLWJhc2UobWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKSk7XG4gICAgfVxuXG4gICAgLm1hdC1saXN0LW9wdGlvbiB7XG4gICAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbik7XG4gICAgICBAaW5jbHVkZSBtYXQtbGluZS1iYXNlKG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbikpO1xuICAgIH1cblxuICAgIC5tYXQtc3ViaGVhZGVyIHtcbiAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHk7XG4gICAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbik7XG4gICAgICBmb250LXdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMik7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtbWVudS10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LW1lbnUtcGFuZWwge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDQsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnY2FyZCcpO1xuICB9XG5cbiAgLm1hdC1tZW51LWl0ZW0ge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsICd0ZXh0Jyk7XG5cbiAgICAmW2Rpc2FibGVkXSB7XG4gICAgICAmLCAmOjphZnRlciB7XG4gICAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsICdkaXNhYmxlZCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbi1uby1jb2xvcixcbiAgLm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2VyOjphZnRlciB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgJ2ljb24nKTtcbiAgfVxuXG4gIC5tYXQtbWVudS1pdGVtOmhvdmVyLFxuICAubWF0LW1lbnUtaXRlbS5jZGstcHJvZ3JhbS1mb2N1c2VkLFxuICAubWF0LW1lbnUtaXRlbS5jZGsta2V5Ym9hcmQtZm9jdXNlZCxcbiAgLm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWQge1xuICAgICY6bm90KFtkaXNhYmxlZF0pIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2hvdmVyJyk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtbWVudS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1tZW51LWl0ZW0ge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGJvZHktMSk7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSk7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTEpO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuQG1peGluIG1hdC1wYWdpbmF0b3ItdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG5cbiAgLm1hdC1wYWdpbmF0b3Ige1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2NhcmQnKTtcbiAgfVxuXG4gIC5tYXQtcGFnaW5hdG9yLFxuICAubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlciB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LFxuICAubWF0LXBhZ2luYXRvci1pbmNyZW1lbnQge1xuICAgIGJvcmRlci10b3A6IDJweCBzb2xpZCBtYXQtY29sb3IoJGZvcmVncm91bmQsICdpY29uJyk7XG4gICAgYm9yZGVyLXJpZ2h0OiAycHggc29saWQgbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCAnaWNvbicpO1xuICB9XG5cbiAgLm1hdC1wYWdpbmF0b3ItZmlyc3QsXG4gIC5tYXQtcGFnaW5hdG9yLWxhc3Qge1xuICAgIGJvcmRlci10b3A6IDJweCBzb2xpZCBtYXQtY29sb3IoJGZvcmVncm91bmQsICdpY29uJyk7XG4gIH1cblxuICAubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSB7XG4gICAgLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LFxuICAgIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudCxcbiAgICAubWF0LXBhZ2luYXRvci1maXJzdCxcbiAgICAubWF0LXBhZ2luYXRvci1sYXN0IHtcbiAgICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCAnZGlzYWJsZWQnKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1wYWdpbmF0b3ItdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtcGFnaW5hdG9yLFxuICAubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlciB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgY2FwdGlvbik7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtcHJvZ3Jlc3MtYmFyLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcblxuICAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5kIHtcbiAgICBmaWxsOiBtYXQtY29sb3IoJHByaW1hcnksIGxpZ2h0ZXIpO1xuICB9XG5cbiAgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIGxpZ2h0ZXIpO1xuICB9XG5cbiAgLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG4gIH1cblxuICAubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IHtcbiAgICAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5kIHtcbiAgICAgIGZpbGw6IG1hdC1jb2xvcigkYWNjZW50LCBsaWdodGVyKTtcbiAgICB9XG5cbiAgICAubWF0LXByb2dyZXNzLWJhci1idWZmZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIGxpZ2h0ZXIpO1xuICAgIH1cblxuICAgIC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYWNjZW50KTtcbiAgICB9XG4gIH1cblxuICAubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiB7XG4gICAgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZCB7XG4gICAgICBmaWxsOiBtYXQtY29sb3IoJHdhcm4sIGxpZ2h0ZXIpO1xuICAgIH1cblxuICAgIC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIGxpZ2h0ZXIpO1xuICAgIH1cblxuICAgIC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkd2Fybik7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtcHJvZ3Jlc3MtYmFyLXR5cG9ncmFwaHkoJGNvbmZpZykgeyB9XG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LXByb2dyZXNzLXNwaW5uZXItdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuXG4gIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciwgLm1hdC1zcGlubmVyIHtcbiAgICBjaXJjbGUge1xuICAgICAgc3Ryb2tlOiBtYXQtY29sb3IoJHByaW1hcnkpO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCBjaXJjbGUge1xuICAgICAgc3Ryb2tlOiBtYXQtY29sb3IoJGFjY2VudCk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiBjaXJjbGUge1xuICAgICAgc3Ryb2tlOiBtYXQtY29sb3IoJHdhcm4pO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXByb2dyZXNzLXNwaW5uZXItdHlwb2dyYXBoeSgkY29uZmlnKSB7IH1cblxuXG5cblxuXG5AbWl4aW4gX21hdC1yYWRpby1jb2xvcigkcGFsZXR0ZSkge1xuICAmLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xlIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSk7XG4gIH1cblxuICAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSxcbiAgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksXG4gICYubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSxcbiAgJjphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlKTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXJhZGlvLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtcmFkaW8tYnV0dG9uIHtcbiAgICAmLm1hdC1wcmltYXJ5IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtcmFkaW8tY29sb3IoJHByaW1hcnkpO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXJhZGlvLWNvbG9yKCRhY2NlbnQpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgQGluY2x1ZGUgX21hdC1yYWRpby1jb2xvcigkd2Fybik7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBuZWVkcyBleHRyYSBzcGVjaWZpY2l0eSwgYmVjYXVzZSB0aGUgY2xhc3NlcyBhYm92ZSBhcmUgY29tYmluZWRcbiAgICAvLyAoZS5nLiBgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudGApIHdoaWNoIGluY3JlYXNlcyB0aGVpciBzcGVjaWZpY2l0eSBhIGxvdC5cbiAgICAvLyBUT0RPOiBjb25zaWRlciBtYWtpbmcgdGhlIHNlbGVjdG9ycyBpbnRvIGRlc2NlbmRhbnRzIChgLm1hdC1wcmltYXJ5IC5tYXQtcmFkaW8tYnV0dG9uYCkuXG4gICAgJi5tYXQtcmFkaW8tZGlzYWJsZWQge1xuICAgICAgJi5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSxcbiAgICAgIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xlIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkKTtcbiAgICAgIH1cblxuICAgICAgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudCxcbiAgICAgIC5tYXQtcmFkaW8taW5uZXItY2lyY2xlIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZCk7XG4gICAgICB9XG5cbiAgICAgIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudCB7XG4gICAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTd2l0Y2ggdGhpcyB0byBhIHNvbGlkIGNvbG9yIHNpbmNlIHdlJ3JlIHVzaW5nIGBvcGFjaXR5YFxuICAgIC8vIHRvIGNvbnRyb2wgaG93IG9wYXF1ZSB0aGUgcmlwcGxlIHNob3VsZCBiZS5cbiAgICAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hcF9nZXQoJGZvcmVncm91bmQsIGJhc2UpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXJhZGlvLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXJhZGlvLWJ1dHRvbiB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxufVxuXG5cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtc2VsZWN0LXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcblxuICAubWF0LXNlbGVjdC12YWx1ZSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cblxuICAubWF0LXNlbGVjdC1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6IF9tYXQtY29udHJvbC1wbGFjZWhvbGRlci1jb2xvcigkdGhlbWUpO1xuICB9XG5cbiAgLm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtdmFsdWUge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICB9XG5cbiAgLm1hdC1zZWxlY3QtYXJyb3cge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtc2VsZWN0LXBhbmVsIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDQsICR0aGVtZSk7XG5cbiAgICAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKSB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyLCAwLjEyKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQge1xuICAgICYubWF0LWZvY3VzZWQge1xuICAgICAgJi5tYXQtcHJpbWFyeSAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIHRleHQpO1xuICAgICAgfVxuXG4gICAgICAmLm1hdC1hY2NlbnQgLm1hdC1zZWxlY3QtYXJyb3cge1xuICAgICAgICBjb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIHRleHQpO1xuICAgICAgfVxuXG4gICAgICAmLm1hdC13YXJuIC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICAgICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1pbnZhbGlkIC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICAgIH1cblxuICAgIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtYXJyb3cge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtc2VsZWN0LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAvLyBUaGUgdW5pdC1sZXNzIGxpbmUtaGVpZ2h0IGZyb20gdGhlIGZvbnQgY29uZmlnLlxuICAkbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBpbnB1dCk7XG5cbiAgLm1hdC1zZWxlY3Qge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LXNlbGVjdC10cmlnZ2VyIHtcbiAgICBoZWlnaHQ6ICRsaW5lLWhlaWdodCAqIDFlbTtcbiAgfVxufVxuXG5cblxuXG5cblxuQG1peGluIG1hdC1zaWRlbmF2LXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAkZHJhd2VyLWJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZGlhbG9nKTtcbiAgJGRyYXdlci1jb250YWluZXItYmFja2dyb3VuZC1jb2xvcjogIG1hdC1jb2xvcigkYmFja2dyb3VuZCwgYmFja2dyb3VuZCk7XG4gICRkcmF3ZXItcHVzaC1iYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGRpYWxvZyk7XG4gICRkcmF3ZXItc2lkZS1ib3JkZXI6IHNvbGlkIDFweCBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuXG4gIC5tYXQtZHJhd2VyLWNvbnRhaW5lciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGRyYXdlci1jb250YWluZXItYmFja2dyb3VuZC1jb2xvcjtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtZHJhd2VyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZHJhd2VyLWJhY2tncm91bmQtY29sb3I7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgICAmLm1hdC1kcmF3ZXItcHVzaCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZHJhd2VyLXB1c2gtYmFja2dyb3VuZC1jb2xvcjtcbiAgICB9XG5cbiAgICAmOm5vdCgubWF0LWRyYXdlci1zaWRlKSB7XG4gICAgICAvLyBUaGUgZWxldmF0aW9uIG9mIHotMTYgaXMgbm90ZWQgaW4gdGhlIGRlc2lnbiBzcGVjaWZpY2F0aW9ucy5cbiAgICAgIC8vIFNlZSBodHRwczovL21hdGVyaWFsLmlvL2Rlc2lnbi9jb21wb25lbnRzL25hdmlnYXRpb24tZHJhd2VyLmh0bWxcbiAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDE2LCAkdGhlbWUpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZHJhd2VyLXNpZGUge1xuICAgIGJvcmRlci1yaWdodDogJGRyYXdlci1zaWRlLWJvcmRlcjtcblxuICAgICYubWF0LWRyYXdlci1lbmQge1xuICAgICAgYm9yZGVyLWxlZnQ6ICRkcmF3ZXItc2lkZS1ib3JkZXI7XG4gICAgICBib3JkZXItcmlnaHQ6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgW2Rpcj0ncnRsJ10gLm1hdC1kcmF3ZXItc2lkZSB7XG4gICAgYm9yZGVyLWxlZnQ6ICRkcmF3ZXItc2lkZS1ib3JkZXI7XG4gICAgYm9yZGVyLXJpZ2h0OiBub25lO1xuXG4gICAgJi5tYXQtZHJhd2VyLWVuZCB7XG4gICAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICAgIGJvcmRlci1yaWdodDogJGRyYXdlci1zaWRlLWJvcmRlcjtcbiAgICB9XG4gIH1cblxuICAubWF0LWRyYXdlci1iYWNrZHJvcC5tYXQtZHJhd2VyLXNob3duIHtcbiAgICAkb3BhY2l0eTogMC42O1xuICAgICRiYWNrZHJvcC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkLCAkb3BhY2l0eSk7XG5cbiAgICBAaWYgKHR5cGUtb2YoJGJhY2tkcm9wLWNvbG9yKSA9PSBjb2xvcikge1xuICAgICAgLy8gV2UgdXNlIGludmVydCgpIGhlcmUgdG8gaGF2ZSB0aGUgZGFya2VuIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGV4cGVjdGVkIHRvIGJlIHVzZWQuIElmIHRoZVxuICAgICAgLy8gYmFja2dyb3VuZCBpcyBsaWdodCwgd2UgdXNlIGEgZGFyayBiYWNrZHJvcC4gSWYgdGhlIGJhY2tncm91bmQgaXMgZGFyayxcbiAgICAgIC8vIHdlIHVzZSBhIGxpZ2h0IGJhY2tkcm9wLlxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW52ZXJ0KCRiYWNrZHJvcC1jb2xvcik7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIC8vIElmIHdlIGNvdWxkbid0IHJlc29sdmUgdGhlIGJhY2tkcm9wIGNvbG9yIHRvIGEgY29sb3IgdmFsdWUsIGZhbGwgYmFjayB0byB1c2luZ1xuICAgICAgLy8gYG9wYWNpdHlgIHRvIG1ha2UgaXQgb3BhcXVlIHNpbmNlIGl0cyBlbmQgdmFsdWUgY291bGQgYmUgYSBzb2xpZCBjb2xvci5cbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZHJvcC1jb2xvcjtcbiAgICAgIG9wYWNpdHk6ICRvcGFjaXR5O1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNpZGVuYXYtdHlwb2dyYXBoeSgkY29uZmlnKSB7IH1cblxuXG5cblxuXG5cbkBtaXhpbiBfbWF0LXNsaWRlLXRvZ2dsZS1jaGVja2VkKCRwYWxldHRlLCAkdGh1bWItY2hlY2tlZC1odWUpIHtcbiAgJi5tYXQtY2hlY2tlZCB7XG4gICAgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCAkdGh1bWItY2hlY2tlZC1odWUpO1xuICAgIH1cblxuICAgIC5tYXQtc2xpZGUtdG9nZ2xlLWJhciB7XG4gICAgICAvLyBPcGFjaXR5IGlzIGRldGVybWluZWQgZnJvbSB0aGUgc3BlY3MgZm9yIHRoZSBzZWxlY3Rpb24gY29udHJvbHMuXG4gICAgICAvLyBTZWU6IGh0dHBzOi8vbWF0ZXJpYWwuaW8vZGVzaWduL2NvbXBvbmVudHMvc2VsZWN0aW9uLWNvbnRyb2xzLmh0bWwjc3BlY3NcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgJHRodW1iLWNoZWNrZWQtaHVlLCAwLjU0KTtcbiAgICB9XG5cbiAgICAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAgIC8vIFNldCBubyBvcGFjaXR5IGZvciB0aGUgcmlwcGxlcyBiZWNhdXNlIHRoZSByaXBwbGUgb3BhY2l0eSB3aWxsIGJlIGFkanVzdGVkIGR5bmFtaWNhbGx5XG4gICAgICAvLyBiYXNlZCBvbiB0aGUgdHlwZSBvZiBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzbGlkZS10b2dnbGUgKGUuZy4gZm9yIGhvdmVyLCBmb2N1cylcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgJHRodW1iLWNoZWNrZWQtaHVlKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1zbGlkZS10b2dnbGUtdGhlbWUoJHRoZW1lKSB7XG4gICRpcy1kYXJrOiBtYXBfZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC8vIENvbG9yIGh1ZXMgYXJlIGJhc2VkIG9uIHRoZSBzcGVjcyB3aGljaCBicmllZmx5IHNob3cgdGhlIGh1ZXMgdGhhdCBhcmUgYXBwbGllZCB0byBhIHN3aXRjaC5cbiAgLy8gVGhlIDIwMTggc3BlY3Mgbm8gbG9uZ2VyIGRlc2NyaWJlIGhvdyBkYXJrIHN3aXRjaGVzIHNob3VsZCBsb29rIGxpa2UuIER1ZSB0byB0aGUgbGFjayBvZlxuICAvLyBpbmZvcm1hdGlvbiBmb3IgZGFyayB0aGVtZWQgc3dpdGNoZXMsIHdlIHBhcnRpYWxseSBrZWVwIHRoZSBvbGQgYmVoYXZpb3IgdGhhdCBpcyBiYXNlZCBvblxuICAvLyB0aGUgcHJldmlvdXMgc3BlY2lmaWNhdGlvbnMuIEZvciB0aGUgY2hlY2tlZCBjb2xvciB3ZSBhbHdheXMgdXNlIHRoZSBgZGVmYXVsdGAgaHVlIGJlY2F1c2VcbiAgLy8gdGhhdCBmb2xsb3dzIE1EQyBhbmQgYWxzbyBtYWtlcyBpdCBlYXNpZXIgZm9yIHBlb3BsZSB0byBjcmVhdGUgYSBjdXN0b20gdGhlbWUgd2l0aG91dCBuZWVkaW5nXG4gIC8vIHRvIHNwZWNpZnkgZWFjaCBodWUgaW5kaXZpZHVhbGx5LlxuICAkdGh1bWItdW5jaGVja2VkLWh1ZTogaWYoJGlzLWRhcmssIDQwMCwgNTApO1xuICAkdGh1bWItY2hlY2tlZC1odWU6IGRlZmF1bHQ7XG5cbiAgJGJhci11bmNoZWNrZWQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQpO1xuICAkcmlwcGxlLXVuY2hlY2tlZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBiYXNlKTtcblxuICAubWF0LXNsaWRlLXRvZ2dsZSB7XG4gICAgQGluY2x1ZGUgX21hdC1zbGlkZS10b2dnbGUtY2hlY2tlZCgkYWNjZW50LCAkdGh1bWItY2hlY2tlZC1odWUpO1xuXG4gICAgJi5tYXQtcHJpbWFyeSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXNsaWRlLXRvZ2dsZS1jaGVja2VkKCRwcmltYXJ5LCAkdGh1bWItY2hlY2tlZC1odWUpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgQGluY2x1ZGUgX21hdC1zbGlkZS10b2dnbGUtY2hlY2tlZCgkd2FybiwgJHRodW1iLWNoZWNrZWQtaHVlKTtcbiAgICB9XG5cbiAgICAmOm5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgICAgLy8gU2V0IG5vIG9wYWNpdHkgZm9yIHRoZSByaXBwbGVzIGJlY2F1c2UgdGhlIHJpcHBsZSBvcGFjaXR5IHdpbGwgYmUgYWRqdXN0ZWQgZHluYW1pY2FsbHlcbiAgICAgIC8vIGJhc2VkIG9uIHRoZSB0eXBlIG9mIGludGVyYWN0aW9uIHdpdGggdGhlIHNsaWRlLXRvZ2dsZSAoZS5nLiBmb3IgaG92ZXIsIGZvY3VzKVxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHJpcHBsZS11bmNoZWNrZWQtY29sb3I7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDEsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRtYXQtZ3JleSwgJHRodW1iLXVuY2hlY2tlZC1odWUpO1xuICB9XG5cbiAgLm1hdC1zbGlkZS10b2dnbGUtYmFyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFyLXVuY2hlY2tlZC1jb2xvcjtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNsaWRlLXRvZ2dsZS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1zbGlkZS10b2dnbGUtY29udGVudCB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBfbWF0LXNsaWRlci1pbm5lci1jb250ZW50LXRoZW1lKCRwYWxldHRlKSB7XG4gIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsXG4gIC5tYXQtc2xpZGVyLXRodW1iLFxuICAubWF0LXNsaWRlci10aHVtYi1sYWJlbCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlKTtcbiAgfVxuXG4gIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHQge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsIGRlZmF1bHQtY29udHJhc3QpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtc2xpZGVyLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAkbWF0LXNsaWRlci1vZmYtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2xpZGVyLW9mZik7XG4gICRtYXQtc2xpZGVyLW9mZi1mb2N1c2VkLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNsaWRlci1vZmYtYWN0aXZlKTtcbiAgJG1hdC1zbGlkZXItZGlzYWJsZWQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2xpZGVyLW9mZik7XG4gICRtYXQtc2xpZGVyLWxhYmVsZWQtbWluLXZhbHVlLXRodW1iLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNsaWRlci1taW4pO1xuICAkbWF0LXNsaWRlci1sYWJlbGVkLW1pbi12YWx1ZS10aHVtYi1sYWJlbC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzbGlkZXItb2ZmKTtcbiAgJG1hdC1zbGlkZXItdGljay1vcGFjaXR5OiAwLjc7XG4gICRtYXQtc2xpZGVyLXRpY2stY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgYmFzZSwgJG1hdC1zbGlkZXItdGljay1vcGFjaXR5KTtcbiAgJG1hdC1zbGlkZXItdGljay1zaXplOiAycHg7XG5cbiAgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJG1hdC1zbGlkZXItb2ZmLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1wcmltYXJ5IHtcbiAgICBAaW5jbHVkZSBfbWF0LXNsaWRlci1pbm5lci1jb250ZW50LXRoZW1lKCRwcmltYXJ5KTtcbiAgfVxuXG4gIC5tYXQtYWNjZW50IHtcbiAgICBAaW5jbHVkZSBfbWF0LXNsaWRlci1pbm5lci1jb250ZW50LXRoZW1lKCRhY2NlbnQpO1xuICB9XG5cbiAgLm1hdC13YXJuIHtcbiAgICBAaW5jbHVkZSBfbWF0LXNsaWRlci1pbm5lci1jb250ZW50LXRoZW1lKCR3YXJuKTtcbiAgfVxuXG4gIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmcge1xuICAgICRvcGFjaXR5OiAwLjI7XG4gICAgJGNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgZGVmYXVsdCwgJG9wYWNpdHkpO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvcjtcblxuICAgIC8vIGBtYXQtY29sb3JgIHVzZXMgYHJnYmFgIGZvciB0aGUgb3BhY2l0eSB3aGljaCB3b24ndCB3b3JrIHdpdGhcbiAgICAvLyBDU1MgdmFyaWFibGVzIHNvIHdlIG5lZWQgdG8gdXNlIGBvcGFjaXR5YCBhcyBhIGZhbGxiYWNrLlxuICAgIEBpZiAodHlwZS1vZigkY29sb3IpICE9IGNvbG9yKSB7XG4gICAgICBvcGFjaXR5OiAkb3BhY2l0eTtcbiAgICB9XG4gIH1cblxuICAubWF0LXNsaWRlcjpob3ZlcixcbiAgLmNkay1mb2N1c2VkIHtcbiAgICAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRtYXQtc2xpZGVyLW9mZi1mb2N1c2VkLWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2xpZGVyLWRpc2FibGVkIHtcbiAgICAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLFxuICAgIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsXG4gICAgLm1hdC1zbGlkZXItdGh1bWIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG1hdC1zbGlkZXItZGlzYWJsZWQtY29sb3I7XG4gICAgfVxuXG4gICAgJjpob3ZlciB7XG4gICAgICAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG1hdC1zbGlkZXItZGlzYWJsZWQtY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbGlkZXItbWluLXZhbHVlIHtcbiAgICAubWF0LXNsaWRlci1mb2N1cy1yaW5nIHtcbiAgICAgICRvcGFjaXR5OiAwLjEyO1xuICAgICAgJGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGJhc2UsICRvcGFjaXR5KTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvcjtcblxuICAgICAgLy8gYG1hdC1jb2xvcmAgdXNlcyBgcmdiYWAgZm9yIHRoZSBvcGFjaXR5IHdoaWNoIHdvbid0IHdvcmsgd2l0aFxuICAgICAgLy8gQ1NTIHZhcmlhYmxlcyBzbyB3ZSBuZWVkIHRvIHVzZSBgb3BhY2l0eWAgYXMgYSBmYWxsYmFjay5cbiAgICAgIEBpZiAodHlwZS1vZigkY29sb3IpICE9IGNvbG9yKSB7XG4gICAgICAgIG9wYWNpdHk6ICRvcGFjaXR5O1xuICAgICAgfVxuICAgIH1cblxuICAgICYubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIHtcbiAgICAgIC5tYXQtc2xpZGVyLXRodW1iLFxuICAgICAgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbWF0LXNsaWRlci1sYWJlbGVkLW1pbi12YWx1ZS10aHVtYi1jb2xvcjtcbiAgICAgIH1cblxuICAgICAgJi5jZGstZm9jdXNlZCB7XG4gICAgICAgIC5tYXQtc2xpZGVyLXRodW1iLFxuICAgICAgICAubWF0LXNsaWRlci10aHVtYi1sYWJlbCB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG1hdC1zbGlkZXItbGFiZWxlZC1taW4tdmFsdWUtdGh1bWItbGFiZWwtY29sb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKSB7XG4gICAgICAubWF0LXNsaWRlci10aHVtYiB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJG1hdC1zbGlkZXItb2ZmLWNvbG9yO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIH1cblxuICAgICAgJjpob3ZlcixcbiAgICAgICYuY2RrLWZvY3VzZWQge1xuICAgICAgICAubWF0LXNsaWRlci10aHVtYiB7XG4gICAgICAgICAgYm9yZGVyLWNvbG9yOiAkbWF0LXNsaWRlci1vZmYtZm9jdXNlZC1jb2xvcjtcbiAgICAgICAgfVxuXG4gICAgICAgICYubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYiB7XG4gICAgICAgICAgYm9yZGVyLWNvbG9yOiAkbWF0LXNsaWRlci1kaXNhYmxlZC1jb2xvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlciB7XG4gICAgYm9yZGVyLWNvbG9yOiAkbWF0LXNsaWRlci10aWNrLWNvbG9yO1xuXG4gICAgLy8gYG1hdC1jb2xvcmAgdXNlcyBgcmdiYWAgZm9yIHRoZSBvcGFjaXR5IHdoaWNoIHdvbid0IHdvcmsgd2l0aFxuICAgIC8vIENTUyB2YXJpYWJsZXMgc28gd2UgbmVlZCB0byB1c2UgYG9wYWNpdHlgIGFzIGEgZmFsbGJhY2suXG4gICAgQGlmICh0eXBlLW9mKCRtYXQtc2xpZGVyLXRpY2stY29sb3IpICE9IGNvbG9yKSB7XG4gICAgICBvcGFjaXR5OiAkbWF0LXNsaWRlci10aWNrLW9wYWNpdHk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrcyB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byByaWdodCwgJG1hdC1zbGlkZXItdGljay1jb2xvcixcbiAgICAgICAgJG1hdC1zbGlkZXItdGljay1jb2xvciAkbWF0LXNsaWRlci10aWNrLXNpemUsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KTtcbiAgICAvLyBGaXJlZm94IGRvZXNuJ3QgZHJhdyB0aGUgZ3JhZGllbnQgY29ycmVjdGx5IHdpdGggJ3RvIHJpZ2h0J1xuICAgIC8vIChzZWUgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxNDMxOSkuXG4gICAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1yZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDAuMDAwMWRlZywgJG1hdC1zbGlkZXItdGljay1jb2xvcixcbiAgICAgICAgJG1hdC1zbGlkZXItdGljay1jb2xvciAkbWF0LXNsaWRlci10aWNrLXNpemUsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KTtcblxuICAgIC8vIGBtYXQtY29sb3JgIHVzZXMgYHJnYmFgIGZvciB0aGUgb3BhY2l0eSB3aGljaCB3b24ndCB3b3JrIHdpdGhcbiAgICAvLyBDU1MgdmFyaWFibGVzIHNvIHdlIG5lZWQgdG8gdXNlIGBvcGFjaXR5YCBhcyBhIGZhbGxiYWNrLlxuICAgIEBpZiAodHlwZS1vZigkbWF0LXNsaWRlci10aWNrLWNvbG9yKSAhPSBjb2xvcikge1xuICAgICAgb3BhY2l0eTogJG1hdC1zbGlkZXItdGljay1vcGFjaXR5O1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRpY2tzIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgJG1hdC1zbGlkZXItdGljay1jb2xvcixcbiAgICAgICAgJG1hdC1zbGlkZXItdGljay1jb2xvciAkbWF0LXNsaWRlci10aWNrLXNpemUsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KTtcblxuICAgIC8vIGBtYXQtY29sb3JgIHVzZXMgYHJnYmFgIGZvciB0aGUgb3BhY2l0eSB3aGljaCB3b24ndCB3b3JrIHdpdGhcbiAgICAvLyBDU1MgdmFyaWFibGVzIHNvIHdlIG5lZWQgdG8gdXNlIGBvcGFjaXR5YCBhcyBhIGZhbGxiYWNrLlxuICAgIEBpZiAodHlwZS1vZigkbWF0LXNsaWRlci10aWNrLWNvbG9yKSAhPSBjb2xvcikge1xuICAgICAgb3BhY2l0eTogJG1hdC1zbGlkZXItdGljay1vcGFjaXR5O1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNsaWRlci10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dCB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0yKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LXN0ZXBwZXItdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG5cbiAgLm1hdC1zdGVwLWhlYWRlciB7XG4gICAgJi5jZGsta2V5Ym9hcmQtZm9jdXNlZCxcbiAgICAmLmNkay1wcm9ncmFtLWZvY3VzZWQsXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyKTtcbiAgICB9XG5cbiAgICAvLyBPbiB0b3VjaCBkZXZpY2VzIHRoZSA6aG92ZXIgc3RhdGUgd2lsbCBsaW5nZXIgb24gdGhlIGVsZW1lbnQgYWZ0ZXIgYSB0YXAuXG4gICAgLy8gUmVzZXQgaXQgdmlhIGBAbWVkaWFgIGFmdGVyIHRoZSBkZWNsYXJhdGlvbiwgYmVjYXVzZSB0aGUgbWVkaWEgcXVlcnkgaXNuJ3RcbiAgICAvLyBzdXBwb3J0ZWQgYnkgYWxsIGJyb3dzZXJzIHlldC5cbiAgICBAbWVkaWEgKGhvdmVyOiBub25lKSB7XG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAubWF0LXN0ZXAtbGFiZWwsXG4gICAgLm1hdC1zdGVwLW9wdGlvbmFsIHtcbiAgICAgIC8vIFRPRE8oam9zZXBocGVycm90dCk6IFVwZGF0ZSB0byB1c2luZyBhIGNvcnJlY3RlZCBkaXNhYmxlZC10ZXh0IGNvbnRyYXN0XG4gICAgICAvLyBpbnN0ZWFkIG9mIHNlY29uZGFyeS10ZXh0LlxuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICAgIH1cblxuICAgIC5tYXQtc3RlcC1pY29uIHtcbiAgICAgIC8vIFRPRE8oam9zZXBocGVycm90dCk6IFVwZGF0ZSB0byB1c2luZyBhIGNvcnJlY3RlZCBkaXNhYmxlZC10ZXh0IGNvbnRyYXN0XG4gICAgICAvLyBpbnN0ZWFkIG9mIHNlY29uZGFyeS10ZXh0LlxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgICB9XG5cbiAgICAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCxcbiAgICAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLFxuICAgIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5KTtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIGRlZmF1bHQtY29udHJhc3QpO1xuICAgIH1cblxuICAgIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVycm9yIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gICAgfVxuXG4gICAgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWFjdGl2ZSB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICB9XG5cbiAgICAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtZXJyb3Ige1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zdGVwcGVyLWhvcml6b250YWwsIC5tYXQtc3RlcHBlci12ZXJ0aWNhbCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgfVxuXG4gIC5tYXQtc3RlcHBlci12ZXJ0aWNhbC1saW5lOjpiZWZvcmUge1xuICAgIGJvcmRlci1sZWZ0LWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG5cbiAgLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjpiZWZvcmUsXG4gIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YWZ0ZXIsXG4gIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLWxpbmUge1xuICAgIGJvcmRlci10b3AtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cbn1cblxuQG1peGluIG1hdC1zdGVwcGVyLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXN0ZXBwZXItdmVydGljYWwsIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC1zdGVwLWxhYmVsIHtcbiAgICBmb250OiB7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSk7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTEpO1xuICAgIH07XG4gIH1cblxuICAubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yIHtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICB9XG5cbiAgLm1hdC1zdGVwLWxhYmVsLWVycm9yIHtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0yKTtcbiAgfVxuXG4gIC5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZCB7XG4gICAgZm9udDoge1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTIpO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0yKTtcbiAgICB9O1xuICB9XG59XG5cbkBtaXhpbiBtYXQtc29ydC10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LXNvcnQtaGVhZGVyLWFycm93IHtcbiAgICAkdGFibGUtYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnY2FyZCcpO1xuICAgICR0ZXh0LWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcblxuICAgIC8vIEJlY2F1c2UgdGhlIGFycm93IGlzIG1hZGUgdXAgb2YgbXVsdGlwbGUgZWxlbWVudHMgdGhhdCBhcmUgc3RhY2tlZCBvbiB0b3Agb2YgZWFjaCBvdGhlcixcbiAgICAvLyB3ZSBjYW4ndCB1c2UgdGhlIHNlbWktdHJhc3BhcmVudCBjb2xvciBmcm9tIHRoZSB0aGVtZSBkaXJlY3RseS4gSWYgdGhlIHZhbHVlIGlzIGEgY29sb3JcbiAgICAvLyAqdHlwZSosIHdlIGNvbnZlcnQgaXQgaW50byBhIHNvbGlkIGNvbG9yIGJ5IHRha2luZyB0aGUgb3BhY2l0eSBmcm9tIHRoZSByZ2JhIHZhbHVlIGFuZFxuICAgIC8vIHVzaW5nIHRoZSB2YWx1ZSB0byBkZXRlcm1pbmUgdGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIGJhY2tncm91bmQgdG8gcHV0IGludG8gZm9yZWdyb3VuZFxuICAgIC8vIHdoZW4gbWl4aW5nIHRoZSBjb2xvcnMgdG9nZXRoZXIuIE90aGVyd2lzZSwgaWYgaXQgcmVzb2x2ZXMgdG8gc29tZXRoaW5nIGRpZmZlcmVudFxuICAgIC8vIChlLmcuIGl0IHJlc29sdmVzIHRvIGEgQ1NTIHZhcmlhYmxlKSwgd2UgdXNlIHRoZSBjb2xvciBkaXJlY3RseS5cbiAgICBAaWYgKHR5cGUtb2YoJHRhYmxlLWJhY2tncm91bmQpID09IGNvbG9yIGFuZCB0eXBlLW9mKCR0ZXh0LWNvbG9yKSA9PSBjb2xvcikge1xuICAgICAgJHRleHQtb3BhY2l0eTogb3BhY2l0eSgkdGV4dC1jb2xvcik7XG4gICAgICBjb2xvcjogbWl4KCR0YWJsZS1iYWNrZ3JvdW5kLCByZ2JhKCR0ZXh0LWNvbG9yLCAxKSwgKDEgLSAkdGV4dC1vcGFjaXR5KSAqIDEwMCUpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICBjb2xvcjogJHRleHQtY29sb3I7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtc29ydC10eXBvZ3JhcGh5KCRjb25maWcpIHsgfVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtdGFicy10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRoZWFkZXItYm9yZGVyOiAxcHggc29saWQgbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcblxuICAubWF0LXRhYi1uYXYtYmFyLFxuICAubWF0LXRhYi1oZWFkZXIge1xuICAgIGJvcmRlci1ib3R0b206ICRoZWFkZXItYm9yZGVyO1xuICB9XG5cbiAgLm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIHtcbiAgICAubWF0LXRhYi1uYXYtYmFyLFxuICAgIC5tYXQtdGFiLWhlYWRlciB7XG4gICAgICBib3JkZXItdG9wOiAkaGVhZGVyLWJvcmRlcjtcbiAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgLm1hdC10YWItbGFiZWwsIC5tYXQtdGFiLWxpbmsge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gICAgJi5tYXQtdGFiLWRpc2FibGVkIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24ge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24ge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgfVxuXG4gIC8vIFJlbW92ZSBoZWFkZXIgYm9yZGVyIHdoZW4gdGhlcmUgaXMgYSBiYWNrZ3JvdW5kIGNvbG9yXG4gIC5tYXQtdGFiLWdyb3VwW2NsYXNzKj0nbWF0LWJhY2tncm91bmQtJ10gLm1hdC10YWItaGVhZGVyLFxuICAubWF0LXRhYi1uYXYtYmFyW2NsYXNzKj0nbWF0LWJhY2tncm91bmQtJ10ge1xuICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG4gICAgYm9yZGVyLXRvcDogbm9uZTtcbiAgfVxuXG4gIC5tYXQtdGFiLWdyb3VwLCAubWF0LXRhYi1uYXYtYmFyIHtcbiAgICAkdGhlbWUtY29sb3JzOiAoXG4gICAgICBwcmltYXJ5OiAkcHJpbWFyeSxcbiAgICAgIGFjY2VudDogJGFjY2VudCxcbiAgICAgIHdhcm46ICR3YXJuXG4gICAgKTtcblxuICAgIEBlYWNoICRuYW1lLCAkY29sb3IgaW4gJHRoZW1lLWNvbG9ycyB7XG4gICAgICAvLyBTZXQgdGhlIGZvcmVncm91bmQgY29sb3Igb2YgdGhlIHRhYnNcbiAgICAgICYubWF0LSN7JG5hbWV9IHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC10YWItbGFiZWwtZm9jdXMoJGNvbG9yKTtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1pbmstYmFyKCRjb2xvcik7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgaW5rIGJhciB3aGVuIGJhY2tncm91bmQgY29sb3IgaXMgdGhlIHNhbWVcbiAgICAgICAgJi5tYXQtYmFja2dyb3VuZC0jeyRuYW1lfSB7XG4gICAgICAgICAgQGluY2x1ZGUgX21hdC1pbmstYmFyKCRjb2xvciwgZGVmYXVsdC1jb250cmFzdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBAZWFjaCAkbmFtZSwgJGNvbG9yIGluICR0aGVtZS1jb2xvcnMge1xuICAgICAgLy8gU2V0IGJhY2tncm91bmQgY29sb3Igb2YgdGhlIHRhYnMgYW5kIG92ZXJyaWRlIGZvY3VzIGNvbG9yXG4gICAgICAmLm1hdC1iYWNrZ3JvdW5kLSN7JG5hbWV9IHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC10YWItbGFiZWwtZm9jdXMoJGNvbG9yKTtcbiAgICAgICAgQGluY2x1ZGUgX21hdC10YWJzLWJhY2tncm91bmQoJGNvbG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuQG1peGluIF9tYXQtaW5rLWJhcigkY29sb3IsICRodWU6IGRlZmF1bHQpIHtcbiAgLm1hdC1pbmstYmFyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGNvbG9yLCAkaHVlKTtcbiAgfVxufVxuXG5AbWl4aW4gX21hdC10YWItbGFiZWwtZm9jdXMoJHRhYi1mb2N1cy1jb2xvcikge1xuICAubWF0LXRhYi1sYWJlbCxcbiAgLm1hdC10YWItbGluayB7XG4gICAgJi5jZGsta2V5Ym9hcmQtZm9jdXNlZCxcbiAgICAmLmNkay1wcm9ncmFtLWZvY3VzZWQge1xuICAgICAgJjpub3QoLm1hdC10YWItZGlzYWJsZWQpIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCR0YWItZm9jdXMtY29sb3IsIGxpZ2h0ZXIsIDAuMyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBfbWF0LXRhYnMtYmFja2dyb3VuZCgkYmFja2dyb3VuZC1jb2xvcikge1xuICAvLyBTZXQgYmFja2dyb3VuZCBjb2xvciBmb3IgdGhlIHRhYiBncm91cFxuICAubWF0LXRhYi1oZWFkZXIsIC5tYXQtdGFiLWxpbmtzLCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLWNvbG9yKTtcbiAgfVxuXG4gIC8vIFNldCBsYWJlbHMgdG8gY29udHJhc3QgYWdhaW5zdCBiYWNrZ3JvdW5kXG4gIC5tYXQtdGFiLWxhYmVsLCAubWF0LXRhYi1saW5rIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLWNvbG9yLCBkZWZhdWx0LWNvbnRyYXN0KTtcblxuICAgICYubWF0LXRhYi1kaXNhYmxlZCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLWNvbG9yLCBkZWZhdWx0LWNvbnRyYXN0LCAwLjQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNldCBwYWdpbmF0aW9uIGNoZXZyb25zIHRvIGNvbnRyYXN0IGJhY2tncm91bmRcbiAgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQtY29sb3IsIGRlZmF1bHQtY29udHJhc3QpO1xuICB9XG5cbiAgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQtY29sb3IsIGRlZmF1bHQtY29udHJhc3QsIDAuNCk7XG4gIH1cblxuICAvLyBTZXQgcmlwcGxlcyBjb2xvciB0byBiZSB0aGUgY29udHJhc3QgY29sb3Igb2YgdGhlIG5ldyBiYWNrZ3JvdW5kLiBPdGhlcndpc2UgdGhlIHJpcHBsZVxuICAvLyBjb2xvciB3aWxsIGJlIGJhc2VkIG9uIHRoZSBhcHAgYmFja2dyb3VuZCBjb2xvci5cbiAgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLWNvbG9yLCBkZWZhdWx0LWNvbnRyYXN0LCAwLjEyKTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXRhYnMtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtdGFiLWdyb3VwIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC10YWItbGFiZWwsIC5tYXQtdGFiLWxpbmsge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGJ1dHRvbik7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJ1dHRvbik7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBidXR0b24pO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuQG1peGluIF9tYXQtdG9vbGJhci1jb2xvcigkcGFsZXR0ZSkge1xuICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJHBhbGV0dGUpO1xuICBjb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCBkZWZhdWx0LWNvbnRyYXN0KTtcbn1cblxuQG1peGluIF9tYXQtdG9vbGJhci1mb3JtLWZpZWxkLW92ZXJyaWRlcyB7XG4gIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUsXG4gIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsXG4gIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Q29sb3I7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtbGFiZWwsXG4gIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwsXG4gIC5tYXQtc2VsZWN0LXZhbHVlLFxuICAubWF0LXNlbGVjdC1hcnJvdyxcbiAgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgfVxuXG4gIC5tYXQtaW5wdXQtZWxlbWVudCB7XG4gICAgY2FyZXQtY29sb3I6IGN1cnJlbnRDb2xvcjtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXRvb2xiYXItdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtdG9vbGJhciB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBhcHAtYmFyKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAgICYubWF0LXByaW1hcnkge1xuICAgICAgQGluY2x1ZGUgX21hdC10b29sYmFyLWNvbG9yKCRwcmltYXJ5KTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgQGluY2x1ZGUgX21hdC10b29sYmFyLWNvbG9yKCRhY2NlbnQpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgQGluY2x1ZGUgX21hdC10b29sYmFyLWNvbG9yKCR3YXJuKTtcbiAgICB9XG5cbiAgICBAaW5jbHVkZSBfbWF0LXRvb2xiYXItZm9ybS1maWVsZC1vdmVycmlkZXM7XG4gIH1cbn1cblxuQG1peGluIG1hdC10b29sYmFyLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXRvb2xiYXIsXG4gIC5tYXQtdG9vbGJhciBoMSxcbiAgLm1hdC10b29sYmFyIGgyLFxuICAubWF0LXRvb2xiYXIgaDMsXG4gIC5tYXQtdG9vbGJhciBoNCxcbiAgLm1hdC10b29sYmFyIGg1LFxuICAubWF0LXRvb2xiYXIgaDYge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCB0aXRsZSk7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG5cblxuXG5cblxuJG1hdC10b29sdGlwLXRhcmdldC1oZWlnaHQ6IDIycHg7XG4kbWF0LXRvb2x0aXAtZm9udC1zaXplOiAxMHB4O1xuJG1hdC10b29sdGlwLXZlcnRpY2FsLXBhZGRpbmc6ICgkbWF0LXRvb2x0aXAtdGFyZ2V0LWhlaWdodCAtICRtYXQtdG9vbHRpcC1mb250LXNpemUpIC8gMjtcblxuJG1hdC10b29sdGlwLWhhbmRzZXQtdGFyZ2V0LWhlaWdodDogMzBweDtcbiRtYXQtdG9vbHRpcC1oYW5kc2V0LWZvbnQtc2l6ZTogMTRweDtcbiRtYXQtdG9vbHRpcC1oYW5kc2V0LXZlcnRpY2FsLXBhZGRpbmc6XG4gICAgKCRtYXQtdG9vbHRpcC1oYW5kc2V0LXRhcmdldC1oZWlnaHQgLSAkbWF0LXRvb2x0aXAtaGFuZHNldC1mb250LXNpemUpIC8gMjtcblxuQG1peGluIG1hdC10b29sdGlwLXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuXG4gIC5tYXQtdG9vbHRpcCB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCB0b29sdGlwLCAwLjkpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtdG9vbHRpcC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC10b29sdGlwIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICAgIGZvbnQtc2l6ZTogJG1hdC10b29sdGlwLWZvbnQtc2l6ZTtcbiAgICBwYWRkaW5nLXRvcDogJG1hdC10b29sdGlwLXZlcnRpY2FsLXBhZGRpbmc7XG4gICAgcGFkZGluZy1ib3R0b206ICRtYXQtdG9vbHRpcC12ZXJ0aWNhbC1wYWRkaW5nO1xuICB9XG5cbiAgLm1hdC10b29sdGlwLWhhbmRzZXQge1xuICAgIGZvbnQtc2l6ZTogJG1hdC10b29sdGlwLWhhbmRzZXQtZm9udC1zaXplO1xuICAgIHBhZGRpbmctdG9wOiAkbWF0LXRvb2x0aXAtaGFuZHNldC12ZXJ0aWNhbC1wYWRkaW5nO1xuICAgIHBhZGRpbmctYm90dG9tOiAkbWF0LXRvb2x0aXAtaGFuZHNldC12ZXJ0aWNhbC1wYWRkaW5nO1xuICB9XG59XG5cblxuXG5cblxuQG1peGluIG1hdC1zbmFjay1iYXItdGhlbWUoJHRoZW1lKSB7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuXG4gIC5tYXQtc25hY2stYmFyLWNvbnRhaW5lciB7XG4gICAgLy8gVXNlIHRoZSBwcmltYXJ5IHRleHQgb24gdGhlIGRhcmsgdGhlbWUsIGV2ZW4gdGhvdWdoIHRoZSBsaWdodGVyIG9uZSB1c2VzXG4gICAgLy8gYSBzZWNvbmRhcnksIGJlY2F1c2UgdGhlIGNvbnRyYXN0IG9uIHRoZSBsaWdodCBwcmltYXJ5IHRleHQgaXMgcG9vci5cbiAgICBjb2xvcjogaWYoJGlzLWRhcmstdGhlbWUsICRkYXJrLXByaW1hcnktdGV4dCwgJGxpZ2h0LXNlY29uZGFyeS10ZXh0KTtcbiAgICBiYWNrZ3JvdW5kOiBpZigkaXMtZGFyay10aGVtZSwgbWFwLWdldCgkbWF0LWdyZXksIDUwKSwgIzMyMzIzMik7XG5cbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbig2LCAkdGhlbWUpO1xuICB9XG5cbiAgLm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uIHtcbiAgICBjb2xvcjogaWYoJGlzLWRhcmstdGhlbWUsIGluaGVyaXQsIG1hdC1jb2xvcigkYWNjZW50LCB0ZXh0KSk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1zbmFjay1iYXItdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtc2ltcGxlLXNuYWNrYmFyIHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBib2R5LTEpO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbiB7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBpbmhlcml0O1xuICAgICAgc2l6ZTogaW5oZXJpdDtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJ1dHRvbik7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLy8gVGhlbWUgc3R5bGVzIHRoYXQgb25seSBhcHBseSB0byB0aGUgZmlsbCBhcHBlYXJhbmNlIG9mIHRoZSBmb3JtLWZpZWxkLlxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtZmlsbC10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcblxuICAkZmlsbC1iYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGJhc2UsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjEsIDAuMDQpKTtcbiAgJGZpbGwtZGlzYWJsZWQtYmFja2dyb3VuZDogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBiYXNlLCBpZigkaXMtZGFyay10aGVtZSwgMC4wNSwgMC4wMikpO1xuICAkdW5kZXJsaW5lLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjUsIDAuNDIpKTtcbiAgJGxhYmVsLWRpc2FibGVkLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwge1xuICAgIC5tYXQtZm9ybS1maWVsZC1mbGV4IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRmaWxsLWJhY2tncm91bmQ7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtZmxleCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZmlsbC1kaXNhYmxlZC1iYWNrZ3JvdW5kO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yO1xuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQge1xuICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgY29sb3I6ICRsYWJlbC1kaXNhYmxlZC1jb2xvcjtcbiAgICAgIH1cblxuICAgICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIFVzZWQgdG8gbWFrZSBpbnN0YW5jZXMgb2YgdGhlIF9tYXQtZm9ybS1maWVsZC1sYWJlbC1mbG9hdGluZyBtaXhpbiBuZWdsaWdpYmx5IGRpZmZlcmVudCxcbi8vIGFuZCBwcmV2ZW50IEdvb2dsZSdzIENTUyBPcHRpbWl6ZXIgZnJvbSBjb2xsYXBzaW5nIHRoZSBkZWNsYXJhdGlvbnMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugc29tZVxuLy8gb2YgdGhlIHNlbGVjdG9ycyBjb250YWluIHBzZXVkby1jbGFzc2VzIG5vdCByZWNvZ25pemVkIGluIGFsbCBicm93c2Vycy4gSWYgYSBicm93c2VyIGVuY291bnRlcnNcbi8vIGFuIHVua25vd24gcHNldWRvLWNsYXNzIGl0IHdpbGwgZGlzY2FyZCB0aGUgZW50aXJlIHJ1bGUgc2V0LlxuJG1hdC1mb3JtLWZpZWxkLWZpbGwtZGVkdXBlOiAwO1xuXG4vLyBBcHBsaWVzIGEgZmxvYXRpbmcgbGFiZWwgYWJvdmUgdGhlIGZvcm0gZmllbGQgY29udHJvbCBpdHNlbGYuXG5AbWl4aW4gX21hdC1mb3JtLWZpZWxkLWZpbGwtbGFiZWwtZmxvYXRpbmcoJGZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCkge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRpbmZpeC1tYXJnaW4tdG9wIC0gJGluZml4LXBhZGRpbmcgKyAkbWF0LWZvcm0tZmllbGQtZmlsbC1kZWR1cGUpXG4gICAgICAgICAgICAgc2NhbGUoJGZvbnQtc2NhbGUpO1xuICB3aWR0aDogMTAwJSAvICRmb250LXNjYWxlICsgJG1hdC1mb3JtLWZpZWxkLWZpbGwtZGVkdXBlO1xuXG4gICRtYXQtZm9ybS1maWVsZC1maWxsLWRlZHVwZTogJG1hdC1mb3JtLWZpZWxkLWZpbGwtZGVkdXBlICsgMC4wMDAwMSAhZ2xvYmFsO1xufVxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtZmlsbC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLy8gVGhlIHVuaXQtbGVzcyBsaW5lLWhlaWdodCBmcm9tIHRoZSBmb250IGNvbmZpZy5cbiAgJGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgaW5wdXQpO1xuICAvLyBUaGUgYW1vdW50IHRvIHNjYWxlIHRoZSBmb250IGZvciB0aGUgZmxvYXRpbmcgbGFiZWwgYW5kIHN1YnNjcmlwdC5cbiAgJHN1YnNjcmlwdC1mb250LXNjYWxlOiAwLjc1O1xuICAvLyBUaGUgcGFkZGluZyBvbiB0b3Agb2YgdGhlIGluZml4LlxuICAkaW5maXgtcGFkZGluZy10b3A6IDAuMjVlbTtcbiAgLy8gVGhlIHBhZGRpbmcgYmVsb3cgdGhlIGluZml4LlxuICAkaW5maXgtcGFkZGluZy1ib3R0b206IDAuNzVlbTtcbiAgLy8gVGhlIG1hcmdpbiBhcHBsaWVkIHRvIHRoZSBmb3JtLWZpZWxkLWluZml4IHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBmbG9hdGluZyBsYWJlbC5cbiAgJGluZml4LW1hcmdpbi10b3A6IDFlbSAqICRsaW5lLWhlaWdodCAqICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcbiAgLy8gVGhlIGFtb3VudCB3ZSBvZmZzZXQgdGhlIGxhYmVsIGZyb20gdGhlIGlucHV0IHRleHQgaW4gdGhlIGZpbGwgYXBwZWFyYW5jZS5cbiAgJGZpbGwtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQ6IC0wLjVlbTtcblxuICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIHtcbiAgICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgcGFkZGluZzogJGluZml4LXBhZGRpbmctdG9wIDAgJGluZml4LXBhZGRpbmctYm90dG9tIDA7XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgIHRvcDogJGluZml4LW1hcmdpbi10b3AgKyAkaW5maXgtcGFkZGluZy10b3A7XG4gICAgICBtYXJnaW4tdG9wOiAkZmlsbC1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldDtcbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCB7XG4gICAgICAmLm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsXG4gICAgICAubWF0LWlucHV0LXNlcnZlcjpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1maWxsLWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmctdG9wICsgJGZpbGwtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQsXG4gICAgICAgICAgICAgICAgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXJ2ZXItc2lkZSByZW5kZXJlZCBtYXRJbnB1dCB3aXRoIGEgbGFiZWwgYXR0cmlidXRlIGJ1dCBsYWJlbCBub3Qgc2hvd25cbiAgICAgIC8vICh1c2VkIGFzIGEgcHVyZSBDU1Mgc3RhbmQtaW4gZm9yIG1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCkuXG4gICAgICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlclxuICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWZpbGwtbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZy10b3AgKyAkZmlsbC1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldCxcbiAgICAgICAgICAgICAgICAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5cbi8vIFRoZW1lIHN0eWxlcyB0aGF0IG9ubHkgYXBwbHkgdG8gdGhlIGxlZ2FjeSBhcHBlYXJhbmNlIG9mIHRoZSBmb3JtLWZpZWxkLlxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtbGVnYWN5LXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuXG4gICRsYWJlbC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gICR1bmRlcmxpbmUtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlciwgaWYoJGlzLWRhcmstdGhlbWUsIDAuNywgMC40MikpO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgIGNvbG9yOiAkbGFiZWwtY29sb3I7XG4gICAgfVxuXG4gICAgLm1hdC1oaW50IHtcbiAgICAgIGNvbG9yOiAkbGFiZWwtY29sb3I7XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yO1xuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSB7XG4gICAgICBAaW5jbHVkZSBtYXQtY29udHJvbC1kaXNhYmxlZC11bmRlcmxpbmUoJHVuZGVybGluZS1jb2xvcik7XG4gICAgfVxuICB9XG59XG5cbi8vIFVzZWQgdG8gbWFrZSBpbnN0YW5jZXMgb2YgdGhlIF9tYXQtZm9ybS1maWVsZC1sYWJlbC1mbG9hdGluZyBtaXhpbiBuZWdsaWdpYmx5IGRpZmZlcmVudCxcbi8vIGFuZCBwcmV2ZW50IEdvb2dsZSdzIENTUyBPcHRpbWl6ZXIgZnJvbSBjb2xsYXBzaW5nIHRoZSBkZWNsYXJhdGlvbnMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugc29tZVxuLy8gb2YgdGhlIHNlbGVjdG9ycyBjb250YWluIHBzZXVkby1jbGFzc2VzIG5vdCByZWNvZ25pemVkIGluIGFsbCBicm93c2Vycy4gSWYgYSBicm93c2VyIGVuY291bnRlcnNcbi8vIGFuIHVua25vd24gcHNldWRvLWNsYXNzIGl0IHdpbGwgZGlzY2FyZCB0aGUgZW50aXJlIHJ1bGUgc2V0LlxuJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGU6IDA7XG5cbi8vIEFwcGxpZXMgYSBmbG9hdGluZyBsYWJlbCBhYm92ZSB0aGUgZm9ybSBmaWVsZCBjb250cm9sIGl0c2VsZi5cbkBtaXhpbiBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nKCRmb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApIHtcbiAgLy8gV2UgdXNlIHBlcnNwZWN0aXZlIHRvIGZpeCB0aGUgdGV4dCBibHVycmluZXNzIGFzIGRlc2NyaWJlZCBoZXJlOlxuICAvLyBodHRwOi8vd3d3LnVzZXJhZ2VudG1hbi5jb20vYmxvZy8yMDE0LzA1LzA0L2ZpeGluZy10eXBvZ3JhcGh5LWluc2lkZS1vZi0yLWQtY3NzLXRyYW5zZm9ybXMvXG4gIC8vIFRoaXMgcmVzdWx0cyBpbiBhIHNtYWxsIGppdHRlciBhZnRlciB0aGUgbGFiZWwgZmxvYXRzIG9uIEZpcmVmb3gsIHdoaWNoIHRoZVxuICAvLyB0cmFuc2xhdGVaIGZpeGVzLlxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRpbmZpeC1tYXJnaW4tdG9wIC0gJGluZml4LXBhZGRpbmcpIHNjYWxlKCRmb250LXNjYWxlKSBwZXJzcGVjdGl2ZSgxMDBweClcbiAgdHJhbnNsYXRlWigwLjAwMXB4ICsgJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGUpO1xuICAvLyBUaGUgdHJpY2tzIGFib3ZlIHVzZWQgdG8gc21vb3RoIG91dCB0aGUgYW5pbWF0aW9uIG9uIGNocm9tZSBhbmQgZmlyZWZveCBhY3R1YWxseSBtYWtlIHRoaW5nc1xuICAvLyB3b3JzZSBvbiBJRSwgc28gd2UgZG9uJ3QgaW5jbHVkZSB0aGVtIGluIHRoZSBJRSB2ZXJzaW9uLlxuICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kaW5maXgtbWFyZ2luLXRvcCAtICRpbmZpeC1wYWRkaW5nICsgJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGUpXG4gICAgICAgICAgICAgICAgICBzY2FsZSgkZm9udC1zY2FsZSk7XG5cbiAgd2lkdGg6IDEwMCUgLyAkZm9udC1zY2FsZSArICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlO1xuXG4gICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlOiAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZSArIDAuMDAwMDEgIWdsb2JhbDtcbn1cblxuLy8gU2FtZSBhcyBtaXhpbiBhYm92ZSwgYnV0IG9taXRzIHRoZSB0cmFuc2xhdGVaIGZvciBwcmludGluZyBwdXJwb3Nlcy5cbkBtaXhpbiBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nLXByaW50KCRmb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApIHtcbiAgLy8gVGhpcyByZXN1bHRzIGluIGEgc21hbGwgaml0dGVyIGFmdGVyIHRoZSBsYWJlbCBmbG9hdHMgb24gRmlyZWZveCwgd2hpY2ggdGhlXG4gIC8vIHRyYW5zbGF0ZVogZml4ZXMuXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtJGluZml4LW1hcmdpbi10b3AgLSAkaW5maXgtcGFkZGluZyArICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlKVxuICAgICAgICAgICAgICAgICAgc2NhbGUoJGZvbnQtc2NhbGUpO1xuICAvLyBUaGUgdHJpY2tzIGFib3ZlIHVzZWQgdG8gc21vb3RoIG91dCB0aGUgYW5pbWF0aW9uIG9uIGNocm9tZSBhbmQgZmlyZWZveCBhY3R1YWxseSBtYWtlIHRoaW5nc1xuICAvLyB3b3JzZSBvbiBJRSwgc28gd2UgZG9uJ3QgaW5jbHVkZSB0aGVtIGluIHRoZSBJRSB2ZXJzaW9uLlxuICAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZTogJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGUgKyAwLjAwMDAxICFnbG9iYWw7XG59XG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1sZWdhY3ktdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC8vIFRoZSB1bml0LWxlc3MgbGluZS1oZWlnaHQgZnJvbSB0aGUgZm9udCBjb25maWcuXG4gICRsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGlucHV0KTtcbiAgLy8gVGhlIGFtb3VudCB0byBzY2FsZSB0aGUgZm9udCBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsIGFuZCBzdWJzY3JpcHQuXG4gICRzdWJzY3JpcHQtZm9udC1zY2FsZTogMC43NTtcbiAgLy8gVGhlIGFtb3VudCBvZiBzcGFjZSBiZXR3ZWVuIHRoZSB0b3Agb2YgdGhlIGxpbmUgYW5kIHRoZSB0b3Agb2YgdGhlIGFjdHVhbCB0ZXh0XG4gIC8vIChhcyBhIGZyYWN0aW9uIG9mIHRoZSBmb250LXNpemUpLlxuICAkbGluZS1zcGFjaW5nOiAoJGxpbmUtaGVpZ2h0IC0gMSkgLyAyO1xuICAvLyBUaGUgcGFkZGluZyBvbiB0aGUgaW5maXguIE1vY2tzIHNob3cgaGFsZiBvZiB0aGUgdGV4dCBzaXplLCBidXQgc2VlbSB0byBtZWFzdXJlIGZyb20gdGhlIGVkZ2VcbiAgLy8gb2YgdGhlIHRleHQgaXRzZWxmLCBub3QgdGhlIGVkZ2Ugb2YgdGhlIGxpbmU7IHRoZXJlZm9yZSB3ZSBzdWJ0cmFjdCBvZmYgdGhlIGxpbmUgc3BhY2luZy5cbiAgJGluZml4LXBhZGRpbmc6IDAuNWVtIC0gJGxpbmUtc3BhY2luZztcbiAgLy8gVGhlIG1hcmdpbiBhcHBsaWVkIHRvIHRoZSBmb3JtLWZpZWxkLWluZml4IHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBmbG9hdGluZyBsYWJlbC5cbiAgJGluZml4LW1hcmdpbi10b3A6IDFlbSAqICRsaW5lLWhlaWdodCAqICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcbiAgLy8gVGhlIHNwYWNlIGJldHdlZW4gdGhlIGJvdHRvbSBvZiB0aGUgLm1hdC1mb3JtLWZpZWxkLWZsZXggYXJlYSBhbmQgdGhlIHN1YnNjcmlwdCB3cmFwcGVyLlxuICAvLyBNb2NrcyBzaG93IGhhbGYgb2YgdGhlIHRleHQgc2l6ZSwgYnV0IHRoaXMgbWFyZ2luIGlzIGFwcGxpZWQgdG8gYW4gZWxlbWVudCB3aXRoIHRoZSBzdWJzY3JpcHRcbiAgLy8gdGV4dCBmb250IHNpemUsIHNvIHdlIG5lZWQgdG8gZGl2aWRlIGJ5IHRoZSBzY2FsZSBmYWN0b3IgdG8gbWFrZSBpdCBoYWxmIG9mIHRoZSBvcmlnaW5hbCB0ZXh0XG4gIC8vIHNpemUuIFdlIGFnYWluIG5lZWQgdG8gc3VidHJhY3Qgb2ZmIHRoZSBsaW5lIHNwYWNpbmcgc2luY2UgdGhlIG1vY2tzIG1lYXN1cmUgdG8gdGhlIGVkZ2Ugb2YgdGhlXG4gIC8vIHRleHQsIG5vdCB0aGUgIGVkZ2Ugb2YgdGhlIGxpbmUuXG4gICRzdWJzY3JpcHQtbWFyZ2luLXRvcDogMC41ZW0gLyAkc3Vic2NyaXB0LWZvbnQtc2NhbGUgLSAoJGxpbmUtc3BhY2luZyAqIDIpO1xuICAvLyBUaGUgcGFkZGluZyBhcHBsaWVkIHRvIHRoZSBmb3JtLWZpZWxkLXdyYXBwZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIHN1YnNjcmlwdCwgc2luY2UgaXQnc1xuICAvLyBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQuIFRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgc3Vic2NyaXB0J3MgbWFyZ2luIGFuZCBsaW5lLWhlaWdodCwgYnV0IHdlXG4gIC8vIG5lZWQgdG8gbXVsdGlwbHkgYnkgdGhlIHN1YnNjcmlwdCBmb250IHNjYWxlIGZhY3RvciBzaW5jZSB0aGUgd3JhcHBlciBoYXMgYSBsYXJnZXIgZm9udCBzaXplLlxuICAkd3JhcHBlci1wYWRkaW5nLWJvdHRvbTogKCRzdWJzY3JpcHQtbWFyZ2luLXRvcCArICRsaW5lLWhlaWdodCkgKiAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IHtcbiAgICAubWF0LWZvcm0tZmllbGQtd3JhcHBlciB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogJHdyYXBwZXItcGFkZGluZy1ib3R0b207XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgIHBhZGRpbmc6ICRpbmZpeC1wYWRkaW5nIDA7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQge1xuICAgICAgJi5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLFxuICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgIH1cblxuICAgICAgLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMCB3aWxsIHJlbHkgb24gQXV0b2ZpbGxNb25pdG9yIGluc3RlYWQuXG4gICAgICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXJ2ZXItc2lkZSByZW5kZXJlZCBtYXRJbnB1dCB3aXRoIGEgbGFiZWwgYXR0cmlidXRlIGJ1dCBsYWJlbCBub3Qgc2hvd25cbiAgICAgIC8vICh1c2VkIGFzIGEgcHVyZSBDU1Mgc3RhbmQtaW4gZm9yIG1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCkuXG4gICAgICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlclxuICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgIHRvcDogJGluZml4LW1hcmdpbi10b3AgKyAkaW5maXgtcGFkZGluZztcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIHtcbiAgICAgIC8vIFdlIHdhbnQgdGhlIHVuZGVybGluZSB0byBzdGFydCBhdCB0aGUgZW5kIG9mIHRoZSBjb250ZW50IGJveCwgbm90IHRoZSBwYWRkaW5nIGJveCxcbiAgICAgIC8vIHNvIHdlIG1vdmUgaXQgdXAgYnkgdGhlIHBhZGRpbmcgYW1vdW50LlxuICAgICAgYm90dG9tOiAkd3JhcHBlci1wYWRkaW5nLWJvdHRvbTtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXIge1xuICAgICAgbWFyZ2luLXRvcDogJHN1YnNjcmlwdC1tYXJnaW4tdG9wO1xuXG4gICAgICAvLyBXZSB3YW50IHRoZSBzdWJzY3JpcHQgdG8gc3RhcnQgYXQgdGhlIGVuZCBvZiB0aGUgY29udGVudCBib3gsIG5vdCB0aGUgcGFkZGluZyBib3gsXG4gICAgICAvLyBzbyB3ZSBtb3ZlIGl0IHVwIGJ5IHRoZSBwYWRkaW5nIGFtb3VudCAoYWRqdXN0ZWQgZm9yIHRoZSBzbWFsbGVyIGZvbnQgc2l6ZSk7XG4gICAgICB0b3A6IGNhbGMoMTAwJSAtICN7JHdyYXBwZXItcGFkZGluZy1ib3R0b20gLyAkc3Vic2NyaXB0LWZvbnQtc2NhbGV9KTtcbiAgICB9XG4gIH1cblxuICAvLyB0cmFuc2xhdGVaIGNhdXNlcyB0aGUgbGFiZWwgdG8gbm90IGFwcGVhciB3aGlsZSBwcmludGluZywgc28gd2Ugb3ZlcnJpZGUgaXQgdG8gbm90XG4gIC8vIGFwcGx5IHRyYW5zbGF0ZVogd2hpbGUgcHJpbnRpbmdcbiAgQG1lZGlhIHByaW50IHtcbiAgICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kge1xuICAgICAgJi5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQge1xuICAgICAgICAmLm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsXG4gICAgICAgIC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nLXByaW50KFxuICAgICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMCB3aWxsIHJlbHkgb24gQXV0b2ZpbGxNb25pdG9yIGluc3RlYWQuXG4gICAgICAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlclxuICAgICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmctcHJpbnQoXG4gICAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXJ2ZXItc2lkZSByZW5kZXJlZCBtYXRJbnB1dCB3aXRoIGEgbGFiZWwgYXR0cmlidXRlIGJ1dCBsYWJlbCBub3Qgc2hvd25cbiAgICAgICAgLy8gKHVzZWQgYXMgYSBwdXJlIENTUyBzdGFuZC1pbiBmb3IgbWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0KS5cbiAgICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJcbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nLXByaW50KFxuICAgICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5cbi8vIFRoZW1lIHN0eWxlcyB0aGF0IG9ubHkgYXBwbHkgdG8gdGhlIG91dGxpbmUgYXBwZWFyYW5jZSBvZiB0aGUgZm9ybS1maWVsZC5cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuXG4gICRsYWJlbC1kaXNhYmxlZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgJG91dGxpbmUtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlciwgaWYoJGlzLWRhcmstdGhlbWUsIDAuMywgMC4xMikpO1xuICAkb3V0bGluZS1jb2xvci1ob3ZlcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyLCBpZigkaXMtZGFyay10aGVtZSwgMSwgMC44NykpO1xuICAkb3V0bGluZS1jb2xvci1wcmltYXJ5OiBtYXQtY29sb3IoJHByaW1hcnkpO1xuICAkb3V0bGluZS1jb2xvci1hY2NlbnQ6IG1hdC1jb2xvcigkYWNjZW50KTtcbiAgJG91dGxpbmUtY29sb3Itd2FybjogbWF0LWNvbG9yKCR3YXJuKTtcbiAgJG91dGxpbmUtY29sb3ItZGlzYWJsZWQ6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlciwgaWYoJGlzLWRhcmstdGhlbWUsIDAuMTUsIDAuMDYpKTtcblxuICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIHtcbiAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gICAgICBjb2xvcjogJG91dGxpbmUtY29sb3I7XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sge1xuICAgICAgY29sb3I6ICRvdXRsaW5lLWNvbG9yLWhvdmVyO1xuICAgIH1cblxuICAgICYubWF0LWZvY3VzZWQge1xuICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sge1xuICAgICAgICBjb2xvcjogJG91dGxpbmUtY29sb3ItcHJpbWFyeTtcbiAgICAgIH1cblxuICAgICAgJi5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIHtcbiAgICAgICAgY29sb3I6ICRvdXRsaW5lLWNvbG9yLWFjY2VudDtcbiAgICAgIH1cblxuICAgICAgJi5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayB7XG4gICAgICAgIGNvbG9yOiAkb3V0bGluZS1jb2xvci13YXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENsYXNzIHJlcGVhdGVkIHNvIHRoYXQgcnVsZSBpcyBzcGVjaWZpYyBlbm91Z2ggdG8gb3ZlcnJpZGUgZm9jdXNlZCBhY2NlbnQgY29sb3IgY2FzZS5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWludmFsaWQubWF0LWZvcm0tZmllbGQtaW52YWxpZCB7XG4gICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayB7XG4gICAgICAgIGNvbG9yOiAkb3V0bGluZS1jb2xvci13YXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQge1xuICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgY29sb3I6ICRsYWJlbC1kaXNhYmxlZC1jb2xvcjtcbiAgICAgIH1cblxuICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICAgICAgICBjb2xvcjogJG91dGxpbmUtY29sb3ItZGlzYWJsZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIFVzZWQgdG8gbWFrZSBpbnN0YW5jZXMgb2YgdGhlIF9tYXQtZm9ybS1maWVsZC1sYWJlbC1mbG9hdGluZyBtaXhpbiBuZWdsaWdpYmx5IGRpZmZlcmVudCxcbi8vIGFuZCBwcmV2ZW50IEdvb2dsZSdzIENTUyBPcHRpbWl6ZXIgZnJvbSBjb2xsYXBzaW5nIHRoZSBkZWNsYXJhdGlvbnMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugc29tZVxuLy8gb2YgdGhlIHNlbGVjdG9ycyBjb250YWluIHBzZXVkby1jbGFzc2VzIG5vdCByZWNvZ25pemVkIGluIGFsbCBicm93c2Vycy4gSWYgYSBicm93c2VyIGVuY291bnRlcnNcbi8vIGFuIHVua25vd24gcHNldWRvLWNsYXNzIGl0IHdpbGwgZGlzY2FyZCB0aGUgZW50aXJlIHJ1bGUgc2V0LlxuJG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZGVkdXBlOiAwO1xuXG4vLyBBcHBsaWVzIGEgZmxvYXRpbmcgbGFiZWwgYWJvdmUgdGhlIGZvcm0gZmllbGQgY29udHJvbCBpdHNlbGYuXG5AbWl4aW4gX21hdC1mb3JtLWZpZWxkLW91dGxpbmUtbGFiZWwtZmxvYXRpbmcoJGZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCkge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRpbmZpeC1tYXJnaW4tdG9wIC0gJGluZml4LXBhZGRpbmcgKyAkbWF0LWZvcm0tZmllbGQtb3V0bGluZS1kZWR1cGUpXG4gIHNjYWxlKCRmb250LXNjYWxlKTtcbiAgd2lkdGg6IDEwMCUgLyAkZm9udC1zY2FsZSArICRtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWRlZHVwZTtcblxuICAkbWF0LWZvcm0tZmllbGQtb3V0bGluZS1kZWR1cGU6ICRtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWRlZHVwZSArIDAuMDAwMDEgIWdsb2JhbDtcbn1cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC8vIFRoZSB1bml0LWxlc3MgbGluZS1oZWlnaHQgZnJvbSB0aGUgZm9udCBjb25maWcuXG4gICRsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGlucHV0KTtcbiAgLy8gVGhlIGFtb3VudCB0byBzY2FsZSB0aGUgZm9udCBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsIGFuZCBzdWJzY3JpcHQuXG4gICRzdWJzY3JpcHQtZm9udC1zY2FsZTogMC43NTtcbiAgLy8gVGhlIHBhZGRpbmcgYWJvdmUgYW5kIGJlbG93IHRoZSBpbmZpeC5cbiAgJGluZml4LXBhZGRpbmc6IDFlbTtcbiAgLy8gVGhlIG1hcmdpbiBhcHBsaWVkIHRvIHRoZSBmb3JtLWZpZWxkLWluZml4IHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBmbG9hdGluZyBsYWJlbC5cbiAgJGluZml4LW1hcmdpbi10b3A6IDFlbSAqICRsaW5lLWhlaWdodCAqICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcbiAgLy8gVGhlIHNwYWNlIGJldHdlZW4gdGhlIGJvdHRvbSBvZiB0aGUgLm1hdC1mb3JtLWZpZWxkLWZsZXggYXJlYSBhbmQgdGhlIHN1YnNjcmlwdCB3cmFwcGVyLlxuICAvLyBNb2NrcyBzaG93IGhhbGYgb2YgdGhlIHRleHQgc2l6ZSwgYnV0IHRoaXMgbWFyZ2luIGlzIGFwcGxpZWQgdG8gYW4gZWxlbWVudCB3aXRoIHRoZSBzdWJzY3JpcHRcbiAgLy8gdGV4dCBmb250IHNpemUsIHNvIHdlIG5lZWQgdG8gZGl2aWRlIGJ5IHRoZSBzY2FsZSBmYWN0b3IgdG8gbWFrZSBpdCBoYWxmIG9mIHRoZSBvcmlnaW5hbCB0ZXh0XG4gIC8vIHNpemUuXG4gICRzdWJzY3JpcHQtbWFyZ2luLXRvcDogMC41ZW0gLyAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG4gIC8vIFRoZSBwYWRkaW5nIGFwcGxpZWQgdG8gdGhlIGZvcm0tZmllbGQtd3JhcHBlciB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgc3Vic2NyaXB0LCBzaW5jZSBpdCdzXG4gIC8vIGFic29sdXRlbHkgcG9zaXRpb25lZC4gVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBzdWJzY3JpcHQncyBtYXJnaW4gYW5kIGxpbmUtaGVpZ2h0LCBidXQgd2VcbiAgLy8gbmVlZCB0byBtdWx0aXBseSBieSB0aGUgc3Vic2NyaXB0IGZvbnQgc2NhbGUgZmFjdG9yIHNpbmNlIHRoZSB3cmFwcGVyIGhhcyBhIGxhcmdlciBmb250IHNpemUuXG4gICR3cmFwcGVyLXBhZGRpbmctYm90dG9tOiAoJHN1YnNjcmlwdC1tYXJnaW4tdG9wICsgJGxpbmUtaGVpZ2h0KSAqICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcbiAgLy8gVGhlIGFtb3VudCB3ZSBvZmZzZXQgdGhlIGxhYmVsIGZyb20gdGhlIGlucHV0IHRleHQgaW4gdGhlIG91dGxpbmUgYXBwZWFyYW5jZS5cbiAgJG91dGxpbmUtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQ6IC0wLjI1ZW07XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgIHBhZGRpbmc6ICRpbmZpeC1wYWRkaW5nIDAgJGluZml4LXBhZGRpbmcgMDtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgdG9wOiAkaW5maXgtbWFyZ2luLXRvcCArICRpbmZpeC1wYWRkaW5nO1xuICAgICAgbWFyZ2luLXRvcDogJG91dGxpbmUtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQ7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQge1xuICAgICAgJi5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLFxuICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtb3V0bGluZS1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nICsgJG91dGxpbmUtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQsXG4gICAgICAgICAgICAgICAgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXJ2ZXItc2lkZSByZW5kZXJlZCBtYXRJbnB1dCB3aXRoIGEgbGFiZWwgYXR0cmlidXRlIGJ1dCBsYWJlbCBub3Qgc2hvd25cbiAgICAgIC8vICh1c2VkIGFzIGEgcHVyZSBDU1Mgc3RhbmQtaW4gZm9yIG1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCkuXG4gICAgICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlclxuICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLW91dGxpbmUtbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZyArICRvdXRsaW5lLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0LFxuICAgICAgICAgICAgICAgICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cblxuLy8gVGhlbWUgc3R5bGVzIHRoYXQgb25seSBhcHBseSB0byB0aGUgc3RhbmRhcmQgYXBwZWFyYW5jZSBvZiB0aGUgZm9ybS1maWVsZC5cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLXN0YW5kYXJkLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuXG4gICR1bmRlcmxpbmUtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlciwgaWYoJGlzLWRhcmstdGhlbWUsIDAuNywgMC40MikpO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIHtcbiAgICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtY29sb3I7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIHtcbiAgICAgIEBpbmNsdWRlIG1hdC1jb250cm9sLWRpc2FibGVkLXVuZGVybGluZSgkdW5kZXJsaW5lLWNvbG9yKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLXN0YW5kYXJkLXR5cG9ncmFwaHkoJGNvbmZpZykge31cblxuXG4vLyBUaGVtZSBzdHlsZXMgdGhhdCBhcHBseSB0byBhbGwgYXBwZWFyYW5jZXMgb2YgdGhlIGZvcm0tZmllbGQuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuXG4gIC8vIExhYmVsIGNvbG9ycy4gUmVxdWlyZWQgaXMgdXNlZCBmb3IgdGhlIGAqYCBzdGFyIHNob3duIGluIHRoZSBsYWJlbC5cbiAgJGxhYmVsLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0LCBpZigkaXMtZGFyay10aGVtZSwgMC43LCAwLjYpKTtcbiAgJGZvY3VzZWQtbGFiZWwtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgdGV4dCk7XG4gICRyZXF1aXJlZC1sYWJlbC1jb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIHRleHQpO1xuXG4gIC8vIFVuZGVybGluZSBjb2xvcnMuXG4gICR1bmRlcmxpbmUtY29sb3ItYmFzZTogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyLCBpZigkaXMtZGFyay10aGVtZSwgMSwgMC44NykpO1xuICAkdW5kZXJsaW5lLWNvbG9yLWFjY2VudDogbWF0LWNvbG9yKCRhY2NlbnQsIHRleHQpO1xuICAkdW5kZXJsaW5lLWNvbG9yLXdhcm46IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gICR1bmRlcmxpbmUtZm9jdXNlZC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCB0ZXh0KTtcblxuICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgIGNvbG9yOiAkbGFiZWwtY29sb3I7XG4gIH1cblxuICAubWF0LWhpbnQge1xuICAgIGNvbG9yOiAkbGFiZWwtY29sb3I7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICBjb2xvcjogJGZvY3VzZWQtbGFiZWwtY29sb3I7XG5cbiAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgY29sb3I6ICR1bmRlcmxpbmUtY29sb3ItYWNjZW50O1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgY29sb3I6ICR1bmRlcmxpbmUtY29sb3Itd2FybjtcbiAgICB9XG4gIH1cblxuICAubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlciB7XG4gICAgY29sb3I6ICRyZXF1aXJlZC1sYWJlbC1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtY29sb3ItYmFzZTtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWZvY3VzZWQtY29sb3I7XG5cbiAgICAgICYubWF0LWFjY2VudCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtY29sb3ItYWNjZW50O1xuICAgICAgfVxuXG4gICAgICAmLm1hdC13YXJuIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1jb2xvci13YXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkge1xuICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXIge1xuICAgICAgY29sb3I6ICR1bmRlcmxpbmUtZm9jdXNlZC1jb2xvcjtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlciB7XG4gICAgICBjb2xvcjogJHVuZGVybGluZS1jb2xvci1hY2NlbnQ7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVyIHtcbiAgICAgIGNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLXdhcm47XG4gICAgfVxuICB9XG5cbiAgLy8gU3R5bGluZyBmb3IgdGhlIGVycm9yIHN0YXRlIG9mIHRoZSBmb3JtIGZpZWxkLiBOb3RlIHRoYXQgd2hpbGUgdGhlIHNhbWUgY2FuIGJlXG4gIC8vIGFjaGlldmVkIHdpdGggdGhlIG5nLSogY2xhc3Nlcywgd2UgdXNlIHRoaXMgYXBwcm9hY2ggaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgdGhlIHNhbWVcbiAgLy8gbG9naWMgaXMgdXNlZCB0byBzdHlsZSB0aGUgZXJyb3Igc3RhdGUgYW5kIHRvIHNob3cgdGhlIGVycm9yIG1lc3NhZ2VzLlxuICAubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgIGNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLXdhcm47XG5cbiAgICAgICYubWF0LWFjY2VudCxcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXIge1xuICAgICAgICBjb2xvcjogJHVuZGVybGluZS1jb2xvci13YXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsXG4gICAgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtYWNjZW50IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtY29sb3Itd2FybjtcbiAgICB9XG4gIH1cblxuICAubWF0LWVycm9yIHtcbiAgICBjb2xvcjogJHVuZGVybGluZS1jb2xvci13YXJuO1xuICB9XG5cbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtbGVnYWN5LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLXN0YW5kYXJkLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLWZpbGwtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGVtZSgkdGhlbWUpO1xufVxuXG4vLyBVc2VkIHRvIG1ha2UgaW5zdGFuY2VzIG9mIHRoZSBfbWF0LWZvcm0tZmllbGQtbGFiZWwtZmxvYXRpbmcgbWl4aW4gbmVnbGlnaWJseSBkaWZmZXJlbnQsXG4vLyBhbmQgcHJldmVudCBHb29nbGUncyBDU1MgT3B0aW1pemVyIGZyb20gY29sbGFwc2luZyB0aGUgZGVjbGFyYXRpb25zLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHNvbWVcbi8vIG9mIHRoZSBzZWxlY3RvcnMgY29udGFpbiBwc2V1ZG8tY2xhc3NlcyBub3QgcmVjb2duaXplZCBpbiBhbGwgYnJvd3NlcnMuIElmIGEgYnJvd3NlciBlbmNvdW50ZXJzXG4vLyBhbiB1bmtub3duIHBzZXVkby1jbGFzcyBpdCB3aWxsIGRpc2NhcmQgdGhlIGVudGlyZSBydWxlIHNldC5cbiRtYXQtZm9ybS1maWVsZC1kZWR1cGU6IDA7XG5cbi8vIEFwcGxpZXMgYSBmbG9hdGluZyBsYWJlbCBhYm92ZSB0aGUgZm9ybSBmaWVsZCBjb250cm9sIGl0c2VsZi5cbkBtaXhpbiBfbWF0LWZvcm0tZmllbGQtbGFiZWwtZmxvYXRpbmcoJGZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCkge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRpbmZpeC1tYXJnaW4tdG9wIC0gJGluZml4LXBhZGRpbmcgKyAkbWF0LWZvcm0tZmllbGQtZGVkdXBlKVxuICAgICAgICAgICAgIHNjYWxlKCRmb250LXNjYWxlKTtcbiAgd2lkdGg6IDEwMCUgLyAkZm9udC1zY2FsZSArICRtYXQtZm9ybS1maWVsZC1kZWR1cGU7XG5cbiAgJG1hdC1mb3JtLWZpZWxkLWRlZHVwZTogJG1hdC1mb3JtLWZpZWxkLWRlZHVwZSArIDAuMDAwMDEgIWdsb2JhbDtcbn1cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAvLyBUaGUgdW5pdC1sZXNzIGxpbmUtaGVpZ2h0IGZyb20gdGhlIGZvbnQgY29uZmlnLlxuICAkbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBpbnB1dCk7XG5cbiAgLy8gVGhlIGFtb3VudCB0byBzY2FsZSB0aGUgZm9udCBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsIGFuZCBzdWJzY3JpcHQuXG4gICRzdWJzY3JpcHQtZm9udC1zY2FsZTogMC43NTtcbiAgLy8gVGhlIGFtb3VudCB0byBzY2FsZSB0aGUgZm9udCBmb3IgdGhlIHByZWZpeCBhbmQgc3VmZml4IGljb25zLlxuICAkcHJlZml4LXN1ZmZpeC1pY29uLWZvbnQtc2NhbGU6IDEuNTtcblxuICAvLyBUaGUgcGFkZGluZyBvbiB0aGUgaW5maXguIE1vY2tzIHNob3cgaGFsZiBvZiB0aGUgdGV4dCBzaXplLlxuICAkaW5maXgtcGFkZGluZzogMC41ZW07XG4gIC8vIFRoZSBtYXJnaW4gYXBwbGllZCB0byB0aGUgZm9ybS1maWVsZC1pbmZpeCB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgZmxvYXRpbmcgbGFiZWwuXG4gICRpbmZpeC1tYXJnaW4tdG9wOiAxZW0gKiAkbGluZS1oZWlnaHQgKiAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG4gIC8vIEZvbnQgc2l6ZSB0byB1c2UgZm9yIHRoZSBsYWJlbCBhbmQgc3Vic2NyaXB0IHRleHQuXG4gICRzdWJzY3JpcHQtZm9udC1zaXplOiAkc3Vic2NyaXB0LWZvbnQtc2NhbGUgKiAxMDAlO1xuICAvLyBGb250IHNpemUgdG8gdXNlIGZvciB0aGUgZm9yIHRoZSBwcmVmaXggYW5kIHN1ZmZpeCBpY29ucy5cbiAgJHByZWZpeC1zdWZmaXgtaWNvbi1mb250LXNpemU6ICRwcmVmaXgtc3VmZml4LWljb24tZm9udC1zY2FsZSAqIDEwMCU7XG4gIC8vIFRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBib3R0b20gb2YgdGhlIC5tYXQtZm9ybS1maWVsZC1mbGV4IGFyZWEgYW5kIHRoZSBzdWJzY3JpcHQgd3JhcHBlci5cbiAgLy8gTW9ja3Mgc2hvdyBoYWxmIG9mIHRoZSB0ZXh0IHNpemUsIGJ1dCB0aGlzIG1hcmdpbiBpcyBhcHBsaWVkIHRvIGFuIGVsZW1lbnQgd2l0aCB0aGUgc3Vic2NyaXB0XG4gIC8vIHRleHQgZm9udCBzaXplLCBzbyB3ZSBuZWVkIHRvIGRpdmlkZSBieSB0aGUgc2NhbGUgZmFjdG9yIHRvIG1ha2UgaXQgaGFsZiBvZiB0aGUgb3JpZ2luYWwgdGV4dFxuICAvLyBzaXplLlxuICAkc3Vic2NyaXB0LW1hcmdpbi10b3A6IDAuNWVtIC8gJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuICAvLyBUaGUgcGFkZGluZyBhcHBsaWVkIHRvIHRoZSBmb3JtLWZpZWxkLXdyYXBwZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIHN1YnNjcmlwdCwgc2luY2UgaXQnc1xuICAvLyBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQuIFRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgc3Vic2NyaXB0J3MgbWFyZ2luIGFuZCBsaW5lLWhlaWdodCwgYnV0IHdlXG4gIC8vIG5lZWQgdG8gbXVsdGlwbHkgYnkgdGhlIHN1YnNjcmlwdCBmb250IHNjYWxlIGZhY3RvciBzaW5jZSB0aGUgd3JhcHBlciBoYXMgYSBsYXJnZXIgZm9udCBzaXplLlxuICAkd3JhcHBlci1wYWRkaW5nLWJvdHRvbTogKCRzdWJzY3JpcHQtbWFyZ2luLXRvcCArICRsaW5lLWhlaWdodCkgKiAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG5cbiAgLm1hdC1mb3JtLWZpZWxkIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgaW5wdXQpO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICAgIHBhZGRpbmctYm90dG9tOiAkd3JhcHBlci1wYWRkaW5nLWJvdHRvbTtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1wcmVmaXgsXG4gIC5tYXQtZm9ybS1maWVsZC1zdWZmaXgge1xuICAgIC8vIEFsbG93IGljb25zIGluIGEgcHJlZml4IG9yIHN1ZmZpeCB0byBhZGFwdCB0byB0aGUgY29ycmVjdCBzaXplLlxuICAgIC5tYXQtaWNvbiB7XG4gICAgICBmb250LXNpemU6ICRwcmVmaXgtc3VmZml4LWljb24tZm9udC1zaXplO1xuICAgICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgICB9XG5cbiAgICAvLyBBbGxvdyBpY29uIGJ1dHRvbnMgaW4gYSBwcmVmaXggb3Igc3VmZml4IHRvIGFkYXB0IHRvIHRoZSBjb3JyZWN0IHNpemUuXG4gICAgLm1hdC1pY29uLWJ1dHRvbiB7XG4gICAgICBoZWlnaHQ6ICRwcmVmaXgtc3VmZml4LWljb24tZm9udC1zY2FsZSAqIDFlbTtcbiAgICAgIHdpZHRoOiAkcHJlZml4LXN1ZmZpeC1pY29uLWZvbnQtc2NhbGUgKiAxZW07XG5cbiAgICAgIC5tYXQtaWNvbiB7XG4gICAgICAgIGhlaWdodDogJGxpbmUtaGVpZ2h0ICogMWVtO1xuICAgICAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgcGFkZGluZzogJGluZml4LXBhZGRpbmcgMDtcbiAgICAvLyBUaHJvd3Mgb2ZmIHRoZSBiYXNlbGluZSBpZiB3ZSBkbyBpdCBhcyBhIHJlYWwgbWFyZ2luLCBzbyB3ZSBkbyBpdCBhcyBhIGJvcmRlciBpbnN0ZWFkLlxuICAgIGJvcmRlci10b3A6ICRpbmZpeC1tYXJnaW4tdG9wIHNvbGlkIHRyYW5zcGFyZW50O1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCB7XG4gICAgJi5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLFxuICAgIC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgIH1cblxuICAgIC8vIFNlcnZlci1zaWRlIHJlbmRlcmVkIG1hdElucHV0IHdpdGggYSBsYWJlbCBhdHRyaWJ1dGUgYnV0IGxhYmVsIG5vdCBzaG93blxuICAgIC8vICh1c2VkIGFzIGEgcHVyZSBDU1Mgc3RhbmQtaW4gZm9yIG1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCkuXG4gICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJcbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIHtcbiAgICB0b3A6IC0kaW5maXgtbWFyZ2luLXRvcDtcbiAgICBwYWRkaW5nLXRvcDogJGluZml4LW1hcmdpbi10b3A7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgIHRvcDogJGluZml4LW1hcmdpbi10b3AgKyAkaW5maXgtcGFkZGluZztcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUge1xuICAgIC8vIFdlIHdhbnQgdGhlIHVuZGVybGluZSB0byBzdGFydCBhdCB0aGUgZW5kIG9mIHRoZSBjb250ZW50IGJveCwgbm90IHRoZSBwYWRkaW5nIGJveCxcbiAgICAvLyBzbyB3ZSBtb3ZlIGl0IHVwIGJ5IHRoZSBwYWRkaW5nIGFtb3VudC5cbiAgICBib3R0b206ICR3cmFwcGVyLXBhZGRpbmctYm90dG9tO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyIHtcbiAgICBmb250LXNpemU6ICRzdWJzY3JpcHQtZm9udC1zaXplO1xuICAgIG1hcmdpbi10b3A6ICRzdWJzY3JpcHQtbWFyZ2luLXRvcDtcblxuICAgIC8vIFdlIHdhbnQgdGhlIHN1YnNjcmlwdCB0byBzdGFydCBhdCB0aGUgZW5kIG9mIHRoZSBjb250ZW50IGJveCwgbm90IHRoZSBwYWRkaW5nIGJveCxcbiAgICAvLyBzbyB3ZSBtb3ZlIGl0IHVwIGJ5IHRoZSBwYWRkaW5nIGFtb3VudCAoYWRqdXN0ZWQgZm9yIHRoZSBzbWFsbGVyIGZvbnQgc2l6ZSk7XG4gICAgdG9wOiBjYWxjKDEwMCUgLSAjeyR3cmFwcGVyLXBhZGRpbmctYm90dG9tIC8gJHN1YnNjcmlwdC1mb250LXNjYWxlfSk7XG4gIH1cblxuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1sZWdhY3ktdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtc3RhbmRhcmQtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtZmlsbC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1vdXRsaW5lLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG59XG5cblxuXG5cblxuQG1peGluIG1hdC10cmVlLXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtdHJlZSB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnY2FyZCcpO1xuICB9XG5cbiAgLm1hdC10cmVlLW5vZGUsXG4gIC5tYXQtbmVzdGVkLXRyZWUtbm9kZSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC10cmVlLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXRyZWUge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LXRyZWUtbm9kZSxcbiAgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlIHtcbiAgICBmb250LXdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMSk7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSk7XG4gIH1cbn1cblxuXG5cbi8vIEluY2x1ZGVzIGFsbCBvZiB0aGUgdHlwb2dyYXBoaWMgc3R5bGVzLlxuQG1peGluIGFuZ3VsYXItbWF0ZXJpYWwtdHlwb2dyYXBoeSgkY29uZmlnOiBudWxsKSB7XG4gIEBpZiAkY29uZmlnID09IG51bGwge1xuICAgICRjb25maWc6IG1hdC10eXBvZ3JhcGh5LWNvbmZpZygpO1xuICB9XG5cbiAgQGluY2x1ZGUgbWF0LWJhZGdlLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1iYXNlLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1hdXRvY29tcGxldGUtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWJvdHRvbS1zaGVldC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtYnV0dG9uLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1idXR0b24tdG9nZ2xlLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1jYXJkLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1jaGVja2JveC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtY2hpcHMtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXRhYmxlLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1kYXRlcGlja2VyLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1kaWFsb2ctdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWV4cGFuc2lvbi1wYW5lbC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZ3JpZC1saXN0LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1pY29uLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1pbnB1dC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtbWVudS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtcGFnaW5hdG9yLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1wcm9ncmVzcy1iYXItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXByb2dyZXNzLXNwaW5uZXItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXJhZGlvLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1zZWxlY3QtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXNpZGVuYXYtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXNsaWRlLXRvZ2dsZS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtc2xpZGVyLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1zdGVwcGVyLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1zb3J0LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC10YWJzLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC10b29sYmFyLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC10b29sdGlwLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1saXN0LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1vcHRpb24tdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LW9wdGdyb3VwLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1zbmFjay1iYXItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXRyZWUtdHlwb2dyYXBoeSgkY29uZmlnKTtcbn1cblxuXG4vLyBNaXhpbiB0aGF0IHJlbmRlcnMgYWxsIG9mIHRoZSBjb3JlIHN0eWxlcyB0aGF0IGFyZSBub3QgdGhlbWUtZGVwZW5kZW50LlxuQG1peGluIG1hdC1jb3JlKCR0eXBvZ3JhcGh5LWNvbmZpZzogbnVsbCkge1xuICBAaW5jbHVkZSBhbmd1bGFyLW1hdGVyaWFsLXR5cG9ncmFwaHkoJHR5cG9ncmFwaHktY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXJpcHBsZSgpO1xuICBAaW5jbHVkZSBjZGstYTExeSgpO1xuICBAaW5jbHVkZSBjZGstb3ZlcmxheSgpO1xuICBAaW5jbHVkZSBjZGstdGV4dC1maWVsZCgpO1xufVxuXG4vLyBNaXhpbiB0aGF0IHJlbmRlcnMgYWxsIG9mIHRoZSBjb3JlIHN0eWxlcyB0aGF0IGRlcGVuZCBvbiB0aGUgdGhlbWUuXG5AbWl4aW4gbWF0LWNvcmUtdGhlbWUoJHRoZW1lKSB7XG4gIEBpbmNsdWRlIG1hdC1yaXBwbGUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LW9wdGlvbi10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtb3B0Z3JvdXAtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXBzZXVkby1jaGVja2JveC10aGVtZSgkdGhlbWUpO1xuXG4gIC8vIFByb3ZpZGVzIGV4dGVybmFsIENTUyBjbGFzc2VzIGZvciBlYWNoIGVsZXZhdGlvbiB2YWx1ZS4gRWFjaCBDU1MgY2xhc3MgaXMgZm9ybWF0dGVkIGFzXG4gIC8vIGBtYXQtZWxldmF0aW9uLXokelZhbHVlYCB3aGVyZSBgJHpWYWx1ZWAgY29ycmVzcG9uZHMgdG8gdGhlIHotc3BhY2UgdG8gd2hpY2ggdGhlIGVsZW1lbnQgaXNcbiAgLy8gZWxldmF0ZWQuXG4gIEBmb3IgJHpWYWx1ZSBmcm9tIDAgdGhyb3VnaCAyNCB7XG4gICAgLiN7JF9tYXQtZWxldmF0aW9uLXByZWZpeH0jeyR6VmFsdWV9IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKCR6VmFsdWUsICR0aGVtZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gV3JhcHBlciBlbGVtZW50IHRoYXQgcHJvdmlkZXMgdGhlIHRoZW1lIGJhY2tncm91bmQgd2hlbiB0aGUgdXNlcidzIGNvbnRlbnQgaXNuJ3RcbiAgLy8gaW5zaWRlIG9mIGEgYG1hdC1zaWRlbmF2LWNvbnRhaW5lcmAuIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIGV4Y2x1ZGUgdGhlIGFtcGVyc2FuZFxuICAvLyBzZWxlY3RvciBpbiBjYXNlIHRoZSBtaXhpbiBpcyBpbmNsdWRlZCBhdCB0aGUgdG9wIGxldmVsLlxuICAubWF0LWFwcC1iYWNrZ3JvdW5kI3tpZigmLCAnLCAmLm1hdC1hcHAtYmFja2dyb3VuZCcsICcnKX0ge1xuICAgICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgYmFja2dyb3VuZCk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cblxuICAvLyBNYXJrZXIgdGhhdCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB1c2VyIGhhcyBhZGRlZCBhIHRoZW1lIHRvIHRoZWlyIHBhZ2UuXG4gIEBhdC1yb290IHtcbiAgICAubWF0LXRoZW1lLWxvYWRlZC1tYXJrZXIge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuQG1peGluIG1hdC1kaXZpZGVyLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtZGl2aWRlciB7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxuXG4gIC5tYXQtZGl2aWRlci12ZXJ0aWNhbCB7XG4gICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG59XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8vIENyZWF0ZSBhIHRoZW1lLlxuQG1peGluIGFuZ3VsYXItbWF0ZXJpYWwtdGhlbWUoJHRoZW1lKSB7XG4gIEBpbmNsdWRlIG1hdC1jb3JlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1hdXRvY29tcGxldGUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWJhZGdlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1ib3R0b20tc2hlZXQtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWJ1dHRvbi10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtYnV0dG9uLXRvZ2dsZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtY2FyZC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtY2hlY2tib3gtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWNoaXBzLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC10YWJsZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZGF0ZXBpY2tlci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZGlhbG9nLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1kaXZpZGVyLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1leHBhbnNpb24tcGFuZWwtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWdyaWQtbGlzdC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtaWNvbi10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtaW5wdXQtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWxpc3QtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LW1lbnUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXBhZ2luYXRvci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtcHJvZ3Jlc3MtYmFyLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1wcm9ncmVzcy1zcGlubmVyLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1yYWRpby10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtc2VsZWN0LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1zaWRlbmF2LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1zbGlkZS10b2dnbGUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXNsaWRlci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtc3RlcHBlci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtc29ydC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtdGFicy10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtdG9vbGJhci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtdG9vbHRpcC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtdHJlZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtc25hY2stYmFyLXRoZW1lKCR0aGVtZSk7XG59XG4iLCJAaW1wb3J0IFwibGlicy91aS9zcmMvbGliL21peGluc1wiO1xuQGltcG9ydCBcIn5AYW5ndWxhci9tYXRlcmlhbC90aGVtaW5nXCI7XG5oMyB7XG4gICAgY29sb3I6ICMwMDAwMDA7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgcGFkZGluZzogMjBweCAwIDAgMDtcbiAgICBtYXJnaW46IDA7XG4gICAgc3BhbiB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiAxMDA7XG4gICAgfVxufVxuLnJlc3VsdC1jb250YWluZXIge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgQGluY2x1ZGUgbWF0LWVsZXZhdGlvbigwKTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgLmNhcmQ6aG92ZXJ7XG4gICAgICAgIGJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4yKSAwcHggMnB4IDIxcHg7XG4gICAgICAgIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4zcyBlYXNlLWluLW91dDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIH1cbiAgICAucmVzdWx0LXJvdyB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBjbGVhcjogYm90aDtcbiAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICAgICAgXG4gICAgICAgIGltZy5yZWN1cnJpbmctaW5mby1pY29uIHtcbiAgICAgICAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNHB4O1xuICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgICAgfVxuXG4gICAgICAgICYuZGF0ZXRpbWUge1xuICAgICAgICAgICAgcGFkZGluZzogMTVweCAwO1xuICAgICAgICAgICAgY29sb3I6ICMwMDA7XG4gICAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICAuc3RhdHVzLWJsb2NrIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLnN0YXR1cy1ibG9jayA+IGRpdntcbiAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICAgICAgICAgICAgICBzcGFue1xuICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gICAgIFxuICAgICAgICB9XG5cbiAgICAgICAgJi5zdGF0dXMge1xuICAgICAgICAgICAgcGFkZGluZzogMTZweCAxOHB4O1xuICAgICAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgICAgICAgICAgICAgLm1lc3NhZ2Uge1xuICAgICAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICAgICAgICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IHN1YjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNXB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC50aW1lIHtcbiAgICAgICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgICAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcCB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiA4OHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYucGFuZWwge1xuICAgICAgICAgICAgcGFkZGluZzogMjBweCAxOHB4O1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgICAgICBib3gtc2hhZG93OiAwcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgICAgICAgfVxuXG4gICAgICAgICYudGl0bGUge1xuICAgICAgICAgICAgY29sb3I6ICMwMDA7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMjZweDtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxMjBweDtcbiAgICAgICAgICAgIC50eXBlLXRleHQge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxNXB4O1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwIDEwcHg7XG4gICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgICAgICAgICAgICAgIG1heC1oZWlnaHQ6IDI0cHg7XG4gICAgICAgICAgICAgICAgJi5pbnRlcm5hbCB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMzNCNkY7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJi5leHRlcm5hbCB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGQUEwODI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICYucGFydG5lciB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMzOUJERjM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICYubXVsdGlyb29te1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZEMDQ4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICAgICAgICAgIHRvcDogLTZweDtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRDBEMEQwO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDZweCAxMHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMjRweDtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICAgICAgfSAgICBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMTBweDtcbiAgICAgICAgICAgICAgICAudHlwZS10aXRsZXtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDc1cHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYudGV4dCB7XG4gICAgICAgICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgICAgICAgIHBhZGRpbmc6IDE4cHggMTBweCAwIDA7XG4gICAgICAgICAgICBzcGFuIHtcbiAgICAgICAgICAgICAgICBpbWcge1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDNweCAxMnB4O1xuICAgICAgICAgICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICM5Nzk3OTc7XG4gICAgICAgICAgICAgICAgJjpudGgtY2hpbGQoMSkge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1yaWdodDogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgICAgICBjbGVhcjogYm90aDtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAzcHggMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAubW9iaWxlLW9ubHktY3RhIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB6LWluZGV4OiAyO1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTsgICAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLnJpZ2h0LWFycm93IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgcmlnaHQ6IDEwcHg7XG4gICAgICAgICAgICAgICAgdG9wOiA3MnB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5cblxuLnJpZ2h0LWFycm93IHtcbiAgICB3aWR0aDogMzBweCAhaW1wb3J0YW50O1xuICAgIGhlaWdodDogMzBweCAhaW1wb3J0YW50O1xuICAgIEBpbmNsdWRlIG1jay1pY29uKCRpY29uLW1lZGl1bSwgJ2Fycm93LXJpZ2h0LnN2ZycpO1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oJGljb24teGxhcmdlLCAnYXJyb3ctcmlnaHQtbGFyZ2Uuc3ZnJyk7XG4gICAgfVxufVxuXG4uYm9va2luZy10ei1kaXNwbGF5IHtcbiAgICBmb250LXNpemU6IDEuMjVyZW07XG59XG5cbi5sb2NhbC10ei1kaXNwbGF5IHtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgY29sb3I6ICM3NTc1NzU7XG59XG4iXX0= */"], + styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\nh3[_ngcontent-%COMP%] {\n color: #000000;\n font-family: \"McKinsey Sans\";\n font-size: 24px;\n font-weight: 500;\n padding: 20px 0 0 0;\n margin: 0;\n}\nh3[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-weight: 100;\n}\n.result-container[_ngcontent-%COMP%] {\n width: 100%;\n padding: 0;\n display: block;\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n position: relative;\n}\n.result-container[_ngcontent-%COMP%] .card[_ngcontent-%COMP%]:hover {\n box-shadow: rgba(0, 0, 0, 0.2) 0px 2px 21px;\n transition: box-shadow 0.3s ease-in-out;\n cursor: pointer;\n}\n.result-container[_ngcontent-%COMP%] .result-row[_ngcontent-%COMP%] {\n width: 100%;\n padding: 0;\n position: relative;\n display: block;\n clear: both;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n font-weight: normal;\n font-size: 16px;\n line-height: 20px;\n}\n.result-container[_ngcontent-%COMP%] .result-row[_ngcontent-%COMP%] img.recurring-info-icon[_ngcontent-%COMP%] {\n width: 20px;\n margin-right: 14px;\n vertical-align: middle;\n}\n.result-container[_ngcontent-%COMP%] .result-row.datetime[_ngcontent-%COMP%] {\n padding: 15px 0;\n color: #000;\n font-size: 18px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.datetime[_ngcontent-%COMP%] .status-block[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n.result-container[_ngcontent-%COMP%] .result-row.datetime[_ngcontent-%COMP%] .status-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n}\n.result-container[_ngcontent-%COMP%] .result-row.datetime[_ngcontent-%COMP%] .status-block[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n.result-container[_ngcontent-%COMP%] .result-row.status[_ngcontent-%COMP%] {\n padding: 16px 18px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n position: relative;\n font-size: 16px;\n line-height: 24px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .message[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n}\n.result-container[_ngcontent-%COMP%] .result-row.status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .message[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 20px;\n vertical-align: sub;\n margin-right: 5px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .time[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n position: absolute;\n top: 0;\n right: 0;\n}\n.result-container[_ngcontent-%COMP%] .result-row.status[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n min-width: 88px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.panel[_ngcontent-%COMP%] {\n padding: 20px 18px;\n background-color: white;\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2);\n}\n.result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] {\n color: #000;\n font-weight: 500;\n font-size: 18px;\n width: 100%;\n position: relative;\n line-height: 26px;\n display: flex;\n padding-right: 120px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-text[_ngcontent-%COMP%] {\n margin-left: 15px;\n border-radius: 4px;\n padding: 0 10px;\n font-family: \"McKinsey Sans\";\n font-size: 14px;\n color: #333333;\n max-height: 24px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-text.internal[_ngcontent-%COMP%] {\n background-color: #033B6F;\n color: white;\n}\n.result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-text.external[_ngcontent-%COMP%] {\n background-color: #FAA082;\n}\n.result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-text.partner[_ngcontent-%COMP%] {\n background-color: #39BDF3;\n}\n.result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-text.multiroom[_ngcontent-%COMP%] {\n background-color: #FFD048;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-text[_ngcontent-%COMP%] {\n position: absolute;\n right: 0;\n top: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-text[_ngcontent-%COMP%] {\n position: absolute;\n right: 0;\n top: 0;\n }\n}\n.result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n position: absolute;\n right: 0;\n top: -6px;\n display: block;\n color: #333333;\n border: 1px solid #D0D0D0;\n background-color: transparent;\n padding: 6px 10px;\n font-size: 16px;\n line-height: 24px;\n cursor: pointer;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] {\n padding-right: 10px;\n }\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-title[_ngcontent-%COMP%] {\n width: calc(100% - 75px);\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] {\n padding-right: 10px;\n }\n .result-container[_ngcontent-%COMP%] .result-row.title[_ngcontent-%COMP%] .type-title[_ngcontent-%COMP%] {\n width: calc(100% - 75px);\n }\n}\n.result-container[_ngcontent-%COMP%] .result-row.text[_ngcontent-%COMP%] {\n color: #333333;\n padding: 18px 10px 0 0;\n}\n.result-container[_ngcontent-%COMP%] .result-row.text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n display: inline-block;\n padding: 3px 12px;\n border-right: 1px solid #979797;\n}\n.result-container[_ngcontent-%COMP%] .result-row.text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n margin-right: 5px;\n}\n.result-container[_ngcontent-%COMP%] .result-row.text[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:nth-child(1) {\n padding-left: 0;\n}\n.result-container[_ngcontent-%COMP%] .result-row.text[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:last-child {\n border-right: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .result-container[_ngcontent-%COMP%] .result-row.text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: block;\n clear: both;\n border: 0;\n padding: 3px 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .result-container[_ngcontent-%COMP%] .result-row.text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: block;\n clear: both;\n border: 0;\n padding: 3px 0;\n }\n}\n.result-container[_ngcontent-%COMP%] .result-row[_ngcontent-%COMP%] .mobile-only-cta[_ngcontent-%COMP%] {\n display: none;\n z-index: 2;\n position: absolute;\n right: 0;\n top: 0;\n width: 100%;\n height: 100%;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .result-container[_ngcontent-%COMP%] .result-row[_ngcontent-%COMP%] .mobile-only-cta[_ngcontent-%COMP%] {\n display: block;\n cursor: pointer;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .result-container[_ngcontent-%COMP%] .result-row[_ngcontent-%COMP%] .mobile-only-cta[_ngcontent-%COMP%] {\n display: block;\n cursor: pointer;\n }\n}\n.result-container[_ngcontent-%COMP%] .result-row[_ngcontent-%COMP%] .mobile-only-cta[_ngcontent-%COMP%] .right-arrow[_ngcontent-%COMP%] {\n position: absolute;\n right: 10px;\n top: 72px;\n}\n.right-arrow[_ngcontent-%COMP%] {\n width: 30px !important;\n height: 30px !important;\n width: 24px;\n height: 24px;\n background-image: url('arrow-right.svg');\n background-size: contain;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .right-arrow[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('arrow-right-large.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .right-arrow[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('arrow-right-large.svg');\n background-size: contain;\n }\n}\n.booking-tz-display[_ngcontent-%COMP%] {\n font-size: 1.25rem;\n}\n.local-tz-display[_ngcontent-%COMP%] {\n font-size: 1rem;\n color: #757575;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLXJlc3VsdC1pdGVtL2Jvb2tpbmctcmVzdWx0LWl0ZW0uY29tcG9uZW50LnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9ub2RlX21vZHVsZXMvQGFuZ3VsYXIvbWF0ZXJpYWwvX3RoZW1pbmcuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2FwcHMvc3RhZmYvc3JjL2FwcC9ib29raW5nL2Jvb2tpbmctcmVzdWx0LWl0ZW0vYm9va2luZy1yZXN1bHQtaXRlbS5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNpbENBLGtDQUFBO0FBdWlEQSwyQ0FBQTtBQXdDQSxxQkFBQTtBQ2wrRkE7RUFDSSxjQUFBO0VBQ0EsNEJGa0ZpQjtFRWpGakIsZUFBQTtFQUNBLGdCQUFBO0VBQ0EsbUJBQUE7RUFDQSxTQUFBO0FIb0JKO0FHbkJJO0VBQ0ksZ0JBQUE7QUhxQlI7QUdsQkE7RUFDSSxXQUFBO0VBQ0EsVUFBQTtFQUNBLGNBQUE7RUR5ZEYsd0hBQUE7RUN2ZEUsa0JBQUE7QUhxQko7QUdwQkk7RUFDSSwyQ0FBQTtFQUNBLHVDQUFBO0VBQ0EsZUFBQTtBSHNCUjtBR3BCSTtFQUNJLFdBQUE7RUFDQSxVQUFB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QUFBO0VBQ0EsdUJBQUE7RUZnSUEsV0YzT1U7RUU0T1YsWUY1T1U7RUU2T1Ysd0NBQUE7RUFDQSx3QkFBQTtBRDVFSjtBQ25RWTtFRTBNWjtJRmtJSSxXRnpPVTtJRTBPVixZRjFPVTtJRTJPViw4Q0FBQTtJQUNBLHdCQUFBO0VEckVGO0FBQ0Y7QUMzUVk7RUUwTVo7SUZrSUksV0Z6T1U7SUUwT1YsWUYxT1U7SUUyT1YsOENBQUE7SUFDQSx3QkFBQTtFRDdERjtBQUNGO0FHaEVBO0VBQ0ksa0JBQUE7QUhtRUo7QUdoRUE7RUFDSSxlQUFBO0VBQ0EsY0FBQTtBSG1FSiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9ib29raW5nLXJlc3VsdC1pdGVtL2Jvb2tpbmctcmVzdWx0LWl0ZW0uY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIkcHJpbWFyeTogIzFGNDBFNjtcbiRmb3JtLWxhYmVsOiAjMDUxQzJDO1xuJHNlY29uZGFyeS1sYWJlbDogIzc2NzY3NjtcbiRib3JkZXI6ICNCM0IzQjM7XG4kYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDogI0QwRDBEMDtcbiRjaGlwLWNvbG9yOiAjMzMzMzMzO1xuJHBsYWNlaG9sZGVyLWNvbG9yOiAjN0Y3RjdGO1xuJGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4kcGFnZS1iYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuJHNlbGVjdGVkLW9wdGlvbjogI0U2RTZFNjtcbiRjb2xvci1icmFuZC15ZWxsb3c6ICNmZmQwNDg7XG4kbGlnaHQteWVsbG93OiAjZmZmM2NlO1xuJGNvYWNobWFyay10ZXh0OiAjNmY0ZDAwO1xuJGVycm9yLWNvbG9yOiAjRTEyRTQwO1xuJG5vLWZpbHRlcnMtY29sb3I6ICNCQ0JDQkM7XG4kcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I6ICNGNEY0RjQ7XG4kcHJpbWFyeS1oaWdobGlnaHQ6ICMyMjUxRkY7XG4kc2Nyb2xsYmFyLWNvbG9yOiAjNzU3NTc1O1xuXG4kYXZhaWxhYmxlLWNvbG9yOiAjNUQ5RDUyO1xuJGF2YWlsYWJsZS1ieS1yZXF1ZXN0LWNvbG9yOiAjRjVCNTNGO1xuJGluLXVzZS1jb2xvcjogI0Q0NDgzRTtcbiRub3QtYm9va2FibGUtY29sb3I6ICNDQ0NDQ0M7XG5cbiRtb2RhbC1ib2R5LWhlYWRpbmc6ICM0RDRENEQ7XG4kYWxlcnQtb3ZlcmxheS1iZzogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2FjaG1hcmstYmc6ICNFQkVCRjY7XG4kY29hY2htYXJrLWRhcmstdGV4dDogIzFCMUIxOTtcbiRlcnJvci10ZXh0OiAjZmZmO1xuXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuXG4vLyA0cHhcbiRzcGFjaW5nLXNtYWxsZXN0OiAwLjI1cmVtO1xuXG4vLyA4cHhcbiRzcGFjaW5nLXh4c21hbGw6IDAuNXJlbTtcblxuLy8gMTJweFxuJHNwYWNpbmcteHNtYWxsOiAwLjc1cmVtO1xuXG4vLyAxNnB4XG4kc3BhY2luZy1zbWFsbDogMXJlbTtcblxuLy8gMjBweFxuJHNwYWNpbmctc21hbGwtbWVkaXVtOiAxLjI1cmVtO1xuXG4vLyAyNHB4XG4kc3BhY2luZy1tZWRpdW06IDEuNXJlbTtcblxuLy8gMjhweFxuJHNwYWNpbmctbWVkaXVtLWxhcmdlOiAxLjc1cmVtO1xuXG4vLyAzMnB4XG4kc3BhY2luZy1sYXJnZTogMnJlbTtcblxuLy8gNDhweFxuJHNwYWNpbmcteGxhcmdlOiAzcmVtO1xuXG4vLyA2NHB4XG4kc3BhY2luZy14eGxhcmdlOiA0cmVtO1xuXG4vLyA5NnB4XG4kc3BhY2luZy1sYXJnZXN0OiA2cmVtO1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGRldmljZS1tb2JpbGUtc2l6ZTogNDUwcHg7XG4kZGV2aWNlLXRhYmxldC1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFwdG9wLXNpemU6IDEwMjRweDtcblxuJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemU6IDgwMHB4O1xuJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemU6IDEwNDhweDtcbiRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplOiAxMjgwcHg7XG5cblxuOmV4cG9ydCB7XG4gICAgcHJpbWFyeTogJHByaW1hcnk7XG4gICAgc2Vjb25kYXJ5TGFiZWw6ICRzZWNvbmRhcnktbGFiZWw7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4kaWNvbi1zbWFsbDogMTZweDtcbiRpY29uLW1lZGl1bTogMjRweDtcbiRpY29uLWxhcmdlOiAzMnB4O1xuJGljb24teGxhcmdlOiA0OHB4O1xuIiwiLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG4vKiBUaGVtZSBmb3IgdGhlIHJpcHBsZSBlbGVtZW50cy4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF0ZXJpYWwvbm8tcHJlZml4ZXMgKi9cbi8qIHN0eWxlbGludC1lbmFibGUgKi9cbmgzIHtcbiAgY29sb3I6ICMwMDAwMDA7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgZm9udC1zaXplOiAyNHB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBwYWRkaW5nOiAyMHB4IDAgMCAwO1xuICBtYXJnaW46IDA7XG59XG5oMyBzcGFuIHtcbiAgZm9udC13ZWlnaHQ6IDEwMDtcbn1cblxuLnJlc3VsdC1jb250YWluZXIge1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJveC1zaGFkb3c6IDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLnJlc3VsdC1jb250YWluZXIgLmNhcmQ6aG92ZXIge1xuICBib3gtc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMikgMHB4IDJweCAyMXB4O1xuICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuM3MgZWFzZS1pbi1vdXQ7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93IHtcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGNsZWFyOiBib3RoO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBsaW5lLWhlaWdodDogMjBweDtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93IGltZy5yZWN1cnJpbmctaW5mby1pY29uIHtcbiAgd2lkdGg6IDIwcHg7XG4gIG1hcmdpbi1yaWdodDogMTRweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LmRhdGV0aW1lIHtcbiAgcGFkZGluZzogMTVweCAwO1xuICBjb2xvcjogIzAwMDtcbiAgZm9udC1zaXplOiAxOHB4O1xufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cuZGF0ZXRpbWUgLnN0YXR1cy1ibG9jayB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LmRhdGV0aW1lIC5zdGF0dXMtYmxvY2sgPiBkaXYge1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy5kYXRldGltZSAuc3RhdHVzLWJsb2NrID4gZGl2IHNwYW4ge1xuICBmb250LXdlaWdodDogNTAwO1xufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cuc3RhdHVzIHtcbiAgcGFkZGluZzogMTZweCAxOHB4O1xufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cuc3RhdHVzID4gZGl2IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cuc3RhdHVzID4gZGl2IC5tZXNzYWdlIHtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cuc3RhdHVzID4gZGl2IC5tZXNzYWdlIGltZyB7XG4gIHdpZHRoOiAyMHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogc3ViO1xuICBtYXJnaW4tcmlnaHQ6IDVweDtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnN0YXR1cyA+IGRpdiAudGltZSB7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cuc3RhdHVzID4gZGl2IHAge1xuICBtYXJnaW46IDA7XG4gIG1pbi13aWR0aDogODhweDtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnBhbmVsIHtcbiAgcGFkZGluZzogMjBweCAxOHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm94LXNoYWRvdzogMHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMik7XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSB7XG4gIGNvbG9yOiAjMDAwO1xuICBmb250LXdlaWdodDogNTAwO1xuICBmb250LXNpemU6IDE4cHg7XG4gIHdpZHRoOiAxMDAlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGxpbmUtaGVpZ2h0OiAyNnB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nLXJpZ2h0OiAxMjBweDtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnRpdGxlIC50eXBlLXRleHQge1xuICBtYXJnaW4tbGVmdDogMTVweDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBwYWRkaW5nOiAwIDEwcHg7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBjb2xvcjogIzMzMzMzMztcbiAgbWF4LWhlaWdodDogMjRweDtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnRpdGxlIC50eXBlLXRleHQuaW50ZXJuYWwge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDMzQjZGO1xuICBjb2xvcjogd2hpdGU7XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSAudHlwZS10ZXh0LmV4dGVybmFsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0ZBQTA4Mjtcbn1cbi5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnRpdGxlIC50eXBlLXRleHQucGFydG5lciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzOUJERjM7XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSAudHlwZS10ZXh0Lm11bHRpcm9vbSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGRkQwNDg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSAudHlwZS10ZXh0IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IDA7XG4gICAgdG9wOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cudGl0bGUgLnR5cGUtdGV4dCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAwO1xuICAgIHRvcDogMDtcbiAgfVxufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cudGl0bGUgYnV0dG9uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMDtcbiAgdG9wOiAtNnB4O1xuICBkaXNwbGF5OiBibG9jaztcbiAgY29sb3I6ICMzMzMzMzM7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBwYWRkaW5nOiA2cHggMTBweDtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBsaW5lLWhlaWdodDogMjRweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSBidXR0b24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSBidXR0b24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnRpdGxlIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xuICB9XG4gIC5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnRpdGxlIC50eXBlLXRpdGxlIHtcbiAgICB3aWR0aDogY2FsYygxMDAlIC0gNzVweCk7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSB7XG4gICAgcGFkZGluZy1yaWdodDogMTBweDtcbiAgfVxuICAucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50aXRsZSAudHlwZS10aXRsZSB7XG4gICAgd2lkdGg6IGNhbGMoMTAwJSAtIDc1cHgpO1xuICB9XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50ZXh0IHtcbiAgY29sb3I6ICMzMzMzMzM7XG4gIHBhZGRpbmc6IDE4cHggMTBweCAwIDA7XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50ZXh0IHNwYW4ge1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogM3B4IDEycHg7XG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICM5Nzk3OTc7XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50ZXh0IHNwYW4gaW1nIHtcbiAgbWFyZ2luLXJpZ2h0OiA1cHg7XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50ZXh0IHNwYW46bnRoLWNoaWxkKDEpIHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xufVxuLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cudGV4dCBzcGFuOmxhc3QtY2hpbGQge1xuICBib3JkZXItcmlnaHQ6IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdy50ZXh0IHNwYW4ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGNsZWFyOiBib3RoO1xuICAgIGJvcmRlcjogMDtcbiAgICBwYWRkaW5nOiAzcHggMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5yZXN1bHQtY29udGFpbmVyIC5yZXN1bHQtcm93LnRleHQgc3BhbiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgY2xlYXI6IGJvdGg7XG4gICAgYm9yZGVyOiAwO1xuICAgIHBhZGRpbmc6IDNweCAwO1xuICB9XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdyAubW9iaWxlLW9ubHktY3RhIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgei1pbmRleDogMjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMDtcbiAgdG9wOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cgLm1vYmlsZS1vbmx5LWN0YSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLnJlc3VsdC1jb250YWluZXIgLnJlc3VsdC1yb3cgLm1vYmlsZS1vbmx5LWN0YSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG59XG4ucmVzdWx0LWNvbnRhaW5lciAucmVzdWx0LXJvdyAubW9iaWxlLW9ubHktY3RhIC5yaWdodC1hcnJvdyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDEwcHg7XG4gIHRvcDogNzJweDtcbn1cblxuLnJpZ2h0LWFycm93IHtcbiAgd2lkdGg6IDMwcHggIWltcG9ydGFudDtcbiAgaGVpZ2h0OiAzMHB4ICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiAyNHB4O1xuICBoZWlnaHQ6IDI0cHg7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9hcnJvdy1yaWdodC5zdmdcIik7XG4gIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5yaWdodC1hcnJvdyB7XG4gICAgd2lkdGg6IDQ4cHg7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9hcnJvdy1yaWdodC1sYXJnZS5zdmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLnJpZ2h0LWFycm93IHtcbiAgICB3aWR0aDogNDhweDtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwibGlicy91aS9zcmMvbGliL2ljb25zL2Fycm93LXJpZ2h0LWxhcmdlLnN2Z1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIH1cbn1cblxuLmJvb2tpbmctdHotZGlzcGxheSB7XG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcbn1cblxuLmxvY2FsLXR6LWRpc3BsYXkge1xuICBmb250LXNpemU6IDFyZW07XG4gIGNvbG9yOiAjNzU3NTc1O1xufSIsIkBpbXBvcnQgXCJ2YXJzXCI7XG5cbkBtaXhpbiBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRzaXplLCAkcXVhbGlmaWVyKSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAaWYgKCRxdWFsaWZpZXIgPT0gbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSBpZiAoJHF1YWxpZmllciA9PSBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWF4LXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5AbWl4aW4gYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRtaW4sICRtYXgpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkbWluKSBhbmQgKG1heC13aWR0aDogJG1heCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIHRoaXMgaXMgYSBjb3B5IG9mIHJlc3BvbmQtdG8uIHdlIGRvbid0IHdhbnQgdG8gcHJlc2VydmUgdGhhdCBtZXRob2Qgc2luY2UgdGhlIGJyZWFrcG9pbnRzIG1heSBkaXZlcmdlIGZyb20gdGhlIG9sZCBVSS5cbkBtaXhpbiBpcy1zY3JlZW4tc2l6ZSgkbWVkaWE6IGFsbCwgJG9yaWVudGF0aW9uOiBub25lKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cblxuQG1peGluIHBhZ2UtcGFkZGluZyB7XG4gICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbDtcbn1cblxuLy8gRm9udCBNaXhpbnNcbiRmb250LW1ja2luc2V5LXNhbnM6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuJGZvbnQtdGhlaW5oYXJkdDogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4kZm9udC1ib3dlcjogXCJCb3dlclwiO1xuXG5AbWl4aW4gYm93ZXItYm9sZCB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWJvd2VyO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBtY2tpbnNleS1zYW5zIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gZGlzcGxheS0xIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiA0cmVtOyAvLyA2NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4NzsgLy8gNzZweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMiB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDYwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS00IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogM3JlbTsgLy8gNDhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE2NjsgLy8gNTZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS01IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjgzMzsgLy8gMzRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjQyOyAvLyA0MHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS03IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyOHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTEge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA0OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi43NXJlbTsgLy8gNDRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDUycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTIge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTExOyAvLyA0NHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNDhweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMyB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIyMjsgLy8gNDRweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjg4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1NTsgLy8gMjhweFxuICAgIH1cbn1cblxuQG1peGluIGJvZHktZGVmYXVsdCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNnB4XG4gICAgfVxufVxuXG4vLy8gRG9lc250IGV4aXN0IGluIE1EUy5cbkBtaXhpbiBib2R5LXRpbnkge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtOyAvLyAxMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjRweFxuICAgIH1cbn1cblxuQG1peGluIGZvcm0tbGFiZWwge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LXRoZWluaGFyZHQ7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGNvbG9yOiAkcGxhY2Vob2xkZXItY29sb3I7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbn1cblxuQG1peGluIGNoaXAtbGFiZWwge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBjaGVja2JveC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGNvbG9yOiBibGFjaztcbn1cblxuLy8gYm9yZGVyc1xuXG5AbWl4aW4gbWNrLWNoZWNrYm94LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay10aGluLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXItbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBib3JkZXItY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudC1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuXG4vLyBmdW5jdGlvbnNcblxuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG5AbWl4aW4gbWF4LWxpbmVzKCRjb3VudCkge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiAkY291bnQ7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbn1cblxuLy8gaW1hZ2VzXG5AbWl4aW4gbWNrLWljb24oJHdpZHRoLCAkYXNzZXQsICRoZWlnaHQ6ICR3aWR0aCwgICRhc3NldFBhdGg6IFwibGlicy91aS9zcmMvbGliL2ljb25zXCIsKSB7XG4gICAgd2lkdGg6ICR3aWR0aDtcbiAgICBoZWlnaHQ6ICRoZWlnaHQ7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiI3skYXNzZXRQYXRofS8jeyRhc3NldH1cIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuXG5cbkBtaXhpbiBtY2stc21hbGwtaWNvbigkbW9iaWxlLWFzc2V0LCAkZGVza3RvcC1hc3NldDogJG1vYmlsZS1hc3NldCkge1xuICAgIEBpbmNsdWRlIG1jay1pY29uKDE2cHgsICRhc3NldDogJG1vYmlsZS1hc3NldCk7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICRhc3NldDogJGRlc2t0b3AtYXNzZXQpO1xuICAgIH1cbn1cblxuLy8gc2tlbGV0b25cbkBtaXhpbiBza2VsZXRvbi1iZyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWltYWdlLXNpemUge1xuICAgIHdpZHRoOiA4MXB4O1xuICAgIGhlaWdodDogODJweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDIxOXB4O1xuICAgICAgICBoZWlnaHQ6IDExOXB4O1xuICAgIH1cbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLXN0YXR1cy1zaXplIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMTE3cHg7XG4gICAgICAgIGhlaWdodDogNzhweDtcbiAgICB9XG59XG4iLCIvLyBJbXBvcnQgYWxsIHRoZSB0aGVtaW5nIGZ1bmN0aW9uYWxpdHkuXG4vLyBXZSB3YW50IG92ZXJsYXlzIHRvIGFsd2F5cyBhcHBlYXIgb3ZlciB1c2VyIGNvbnRlbnQsIHNvIHNldCBhIGJhc2VsaW5lXG4vLyB2ZXJ5IGhpZ2ggei1pbmRleCBmb3IgdGhlIG92ZXJsYXkgY29udGFpbmVyLCB3aGljaCBpcyB3aGVyZSB3ZSBjcmVhdGUgdGhlIG5ld1xuLy8gc3RhY2tpbmcgY29udGV4dCBmb3IgYWxsIG92ZXJsYXlzLlxuJGNkay16LWluZGV4LW92ZXJsYXktY29udGFpbmVyOiAxMDAwICFkZWZhdWx0O1xuJGNkay16LWluZGV4LW92ZXJsYXk6IDEwMDAgIWRlZmF1bHQ7XG4kY2RrLXotaW5kZXgtb3ZlcmxheS1iYWNrZHJvcDogMTAwMCAhZGVmYXVsdDtcblxuLy8gQmFja2dyb3VuZCBjb2xvciBmb3IgYWxsIG9mIHRoZSBiYWNrZHJvcHNcbiRjZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wLWJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4zMikgIWRlZmF1bHQ7XG5cbi8vIERlZmF1bHQgYmFja2Ryb3AgYW5pbWF0aW9uIGlzIGJhc2VkIG9uIHRoZSBNYXRlcmlhbCBEZXNpZ24gc3dpZnQtZWFzZS1vdXQuXG4kYmFja2Ryb3AtYW5pbWF0aW9uLWR1cmF0aW9uOiA0MDBtcyAhZGVmYXVsdDtcbiRiYWNrZHJvcC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSAhZGVmYXVsdDtcblxuXG5AbWl4aW4gY2RrLW92ZXJsYXkoKSB7XG4gIC5jZGstb3ZlcmxheS1jb250YWluZXIsIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlciB7XG4gICAgLy8gRGlzYWJsZSBldmVudHMgZnJvbSBiZWluZyBjYXB0dXJlZCBvbiB0aGUgb3ZlcmxheSBjb250YWluZXIuXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5cbiAgICAvLyBUaGUgY29udGFpbmVyIHNob3VsZCBiZSB0aGUgc2l6ZSBvZiB0aGUgdmlld3BvcnQuXG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG5cbiAgLy8gVGhlIG92ZXJsYXktY29udGFpbmVyIGlzIGFuIGludmlzaWJsZSBlbGVtZW50IHdoaWNoIGNvbnRhaW5zIGFsbCBpbmRpdmlkdWFsIG92ZXJsYXlzLlxuICAuY2RrLW92ZXJsYXktY29udGFpbmVyIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgei1pbmRleDogJGNkay16LWluZGV4LW92ZXJsYXktY29udGFpbmVyO1xuXG4gICAgJjplbXB0eSB7XG4gICAgICAvLyBIaWRlIHRoZSBlbGVtZW50IHdoZW4gaXQgZG9lc24ndCBoYXZlIGFueSBjaGlsZCBub2Rlcy4gVGhpcyBkb2Vzbid0XG4gICAgICAvLyBpbmNsdWRlIG92ZXJsYXlzIHRoYXQgaGF2ZSBiZWVuIGRldGFjaGVkLCByYXRoZXIgdGhhbiBkaXNwb3NlZC5cbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgLy8gV2UgdXNlIGFuIGV4dHJhIHdyYXBwZXIgZWxlbWVudCBpbiBvcmRlciB0byB1c2UgbWFrZSB0aGUgb3ZlcmxheSBpdHNlbGYgYSBmbGV4IGl0ZW0uXG4gIC8vIFRoaXMgbWFrZXMgY2VudGVyaW5nIHRoZSBvdmVybGF5IGVhc3kgd2l0aG91dCBydW5uaW5nIGludG8gdGhlIHN1YnBpeGVsIHJlbmRlcmluZ1xuICAvLyBwcm9ibGVtcyB0aWVkIHRvIHVzaW5nIGB0cmFuc2Zvcm1gIGFuZCB3aXRob3V0IGludGVyZmVyaW5nIHdpdGggdGhlIG90aGVyIHBvc2l0aW9uXG4gIC8vIHN0cmF0ZWdpZXMuXG4gIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogJGNkay16LWluZGV4LW92ZXJsYXk7XG4gIH1cblxuICAvLyBBIHNpbmdsZSBvdmVybGF5IHBhbmUuXG4gIC5jZGstb3ZlcmxheS1wYW5lIHtcbiAgICAvLyBOb3RlOiBpdCdzIGltcG9ydGFudCBmb3IgdGhpcyBvbmUgdG8gc3RhcnQgb2ZmIGBhYnNvbHV0ZWAsXG4gICAgLy8gaW4gb3JkZXIgZm9yIHVzIHRvIGJlIGFibGUgdG8gbWVhc3VyZSBpdCBjb3JyZWN0bHkuXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgei1pbmRleDogJGNkay16LWluZGV4LW92ZXJsYXk7XG5cbiAgICAvLyBGb3IgY29ubmVjdGVkLXBvc2l0aW9uIG92ZXJsYXlzLCB3ZSBzZXQgYGRpc3BsYXk6IGZsZXhgIGluXG4gICAgLy8gb3JkZXIgdG8gZm9yY2UgYG1heC13aWR0aGAgYW5kIGBtYXgtaGVpZ2h0YCB0byB0YWtlIGVmZmVjdC5cbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuICB9XG5cbiAgLmNkay1vdmVybGF5LWJhY2tkcm9wIHtcbiAgICAvLyBUT0RPKGplbGJvdXJuKTogcmV1c2Ugc2lkZW5hdiBmdWxsc2NyZWVuIG1peGluLlxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG5cbiAgICB6LWluZGV4OiAkY2RrLXotaW5kZXgtb3ZlcmxheS1iYWNrZHJvcDtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgJGJhY2tkcm9wLWFuaW1hdGlvbi1kdXJhdGlvbiAkYmFja2Ryb3AtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjtcbiAgICBvcGFjaXR5OiAwO1xuXG4gICAgJi5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIHtcbiAgICAgIG9wYWNpdHk6IDE7XG5cbiAgICAgIC8vIEluIGhpZ2ggY29udHJhc3QgbW9kZSB0aGUgcmdiYSBiYWNrZ3JvdW5kIHdpbGwgYmVjb21lIHNvbGlkIHNvIHdlIG5lZWQgdG8gZmFsbCBiYWNrXG4gICAgICAvLyB0byBtYWtpbmcgaXQgb3BhcXVlIHVzaW5nIGBvcGFjaXR5YC4gTm90ZSB0aGF0IHdlIGNhbid0IHVzZSB0aGUgYGNkay1oaWdoLWNvbnRyYXN0YFxuICAgICAgLy8gbWl4aW4sIGJlY2F1c2Ugd2UgY2FuJ3Qgbm9ybWFsaXplIHRoZSBpbXBvcnQgcGF0aCB0byB0aGUgX2ExMXkuc2NzcyBib3RoIGZvciB0aGVcbiAgICAgIC8vIHNvdXJjZSBhbmQgd2hlbiB0aGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQuIFNlZSAjMTA5MDguXG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSkge1xuICAgICAgICBvcGFjaXR5OiAwLjY7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3Age1xuICAgIGJhY2tncm91bmQ6ICRjZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wLWJhY2tncm91bmQ7XG4gIH1cblxuICAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3Age1xuICAgIC8vIE5vdGU6IGFzIG9mIEZpcmVmb3ggNTcsIGhhdmluZyB0aGUgYmFja2Ryb3AgYmUgYGJhY2tncm91bmQ6IG5vbmVgIHdpbGwgcHJldmVudCBpdCBmcm9tXG4gICAgLy8gY2FwdHVyaW5nIHRoZSB1c2VyJ3MgbW91c2Ugc2Nyb2xsIGV2ZW50cy4gU2luY2Ugd2UgYWxzbyBjYW4ndCB1c2Ugc29tZXRoaW5nIGxpa2VcbiAgICAvLyBgcmdiYSgwLCAwLCAwLCAwKWAsIHdlIHdvcmsgYXJvdW5kIHRoZSBpbmNvbnNpc3RlbmN5IGJ5IG5vdCBzZXR0aW5nIHRoZSBiYWNrZ3JvdW5kIGF0XG4gICAgLy8gYWxsIGFuZCB1c2luZyBgb3BhY2l0eWAgdG8gbWFrZSB0aGUgZWxlbWVudCB0cmFuc3BhcmVudC5cbiAgICAmLCAmLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmcge1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gIH1cblxuICAvLyBPdmVybGF5IHBhcmVudCBlbGVtZW50IHVzZWQgd2l0aCB0aGUgY29ubmVjdGVkIHBvc2l0aW9uIHN0cmF0ZWd5LiBVc2VkIHRvIGNvbnN0cmFpbiB0aGVcbiAgLy8gb3ZlcmxheSBlbGVtZW50J3Mgc2l6ZSB0byBmaXQgd2l0aGluIHRoZSB2aWV3cG9ydC5cbiAgLmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3gge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB6LWluZGV4OiAkY2RrLXotaW5kZXgtb3ZlcmxheTtcblxuICAgIC8vIFdlIHVzZSBgZGlzcGxheTogZmxleGAgb24gdGhpcyBlbGVtZW50IGV4Y2x1c2l2ZWx5IGZvciBjZW50ZXJpbmcgY29ubmVjdGVkIG92ZXJsYXlzLlxuICAgIC8vIFdoZW4gKm5vdCogY2VudGVyaW5nLCBhIHRvcC9sZWZ0L2JvdHRvbS9yaWdodCB3aWxsIGJlIHNldCB3aGljaCBvdmVycmlkZXMgdGhlIG5vcm1hbFxuICAgIC8vIGZsZXggbGF5b3V0LlxuICAgIGRpc3BsYXk6IGZsZXg7XG5cbiAgICAvLyBXZSB1c2UgdGhlIGBjb2x1bW5gIGRpcmVjdGlvbiBoZXJlIHRvIGF2b2lkIHNvbWUgZmxleGJveCBpc3N1ZXMgaW4gRWRnZVxuICAgIC8vIHdoZW4gdXNpbmcgdGhlIFwiZ3JvdyBhZnRlciBvcGVuXCIgb3B0aW9ucy5cbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG4gICAgLy8gQWRkIHNvbWUgZGltZW5zaW9ucyBzbyB0aGUgZWxlbWVudCBoYXMgYW4gYGlubmVyVGV4dGAgd2hpY2ggc29tZSBwZW9wbGUgZGVwZW5kIG9uIGluIHRlc3RzLlxuICAgIG1pbi13aWR0aDogMXB4O1xuICAgIG1pbi1oZWlnaHQ6IDFweDtcbiAgfVxuXG4gIC8vIFVzZWQgd2hlbiBkaXNhYmxpbmcgZ2xvYmFsIHNjcm9sbGluZy5cbiAgLmNkay1nbG9iYWwtc2Nyb2xsYmxvY2sge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcblxuICAgIC8vIE5lY2Vzc2FyeSBmb3IgdGhlIGNvbnRlbnQgbm90IHRvIGxvc2UgaXRzIHdpZHRoLiBOb3RlIHRoYXQgd2UncmUgdXNpbmcgMTAwJSwgaW5zdGVhZCBvZlxuICAgIC8vIDEwMHZ3LCBiZWNhdXNlIDEwMHZ3IGluY2x1ZGVzIHRoZSB3aWR0aCBwbHVzIHRoZSBzY3JvbGxiYXIsIHdoZXJlYXMgMTAwJSBpcyB0aGUgd2lkdGhcbiAgICAvLyB0aGF0IHRoZSBlbGVtZW50IGhhZCBiZWZvcmUgd2UgbWFkZSBpdCBgZml4ZWRgLlxuICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgLy8gTm90ZTogdGhpcyB3aWxsIGFsd2F5cyBhZGQgYSBzY3JvbGxiYXIgdG8gd2hhdGV2ZXIgZWxlbWVudCBpdCBpcyBvbiwgd2hpY2ggY2FuXG4gICAgLy8gcG90ZW50aWFsbHkgcmVzdWx0IGluIGRvdWJsZSBzY3JvbGxiYXJzLiBJdCBzaG91bGRuJ3QgYmUgYW4gaXNzdWUsIGJlY2F1c2Ugd2Ugd29uJ3RcbiAgICAvLyBibG9jayBzY3JvbGxpbmcgb24gYSBwYWdlIHRoYXQgZG9lc24ndCBoYXZlIGEgc2Nyb2xsYmFyIGluIHRoZSBmaXJzdCBwbGFjZS5cbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gIH1cbn1cblxuQG1peGluIGNkay1hMTF5IHtcbiAgLmNkay12aXN1YWxseS1oaWRkZW4ge1xuICAgIGJvcmRlcjogMDtcbiAgICBjbGlwOiByZWN0KDAgMCAwIDApO1xuICAgIGhlaWdodDogMXB4O1xuICAgIG1hcmdpbjogLTFweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHdpZHRoOiAxcHg7XG5cbiAgICAvLyBBdm9pZCBicm93c2VycyByZW5kZXJpbmcgdGhlIGZvY3VzIHJpbmcgaW4gc29tZSBjYXNlcy5cbiAgICBvdXRsaW5lOiAwO1xuXG4gICAgLy8gQXZvaWQgc29tZSBjYXNlcyB3aGVyZSB0aGUgYnJvd3NlciB3aWxsIHN0aWxsIHJlbmRlciB0aGUgbmF0aXZlIGNvbnRyb2xzIChzZWUgIzkwNDkpLlxuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7XG4gIH1cbn1cblxuLy8vIEVtaXRzIHRoZSBtaXhpbidzIGNvbnRlbnQgbmVzdGVkIHVuZGVyIGAkc2VsZWN0b3ItY29udGV4dGAgaWYgYCRzZWxlY3Rvci1jb250ZXh0YFxuLy8vIGlzIG5vbi1lbXB0eS5cbi8vLyBAcGFyYW0gc2VsZWN0b3ItY29udGV4dCBUaGUgc2VsZWN0b3IgdW5kZXIgd2hpY2ggdG8gbmVzdCB0aGUgbWl4aW4ncyBjb250ZW50LlxuQG1peGluIF9jZGstb3B0aW9uYWxseS1uZXN0LWNvbnRlbnQoJHNlbGVjdG9yLWNvbnRleHQpIHtcbiAgQGlmICgkc2VsZWN0b3ItY29udGV4dCA9PSAnJykge1xuICAgIEBjb250ZW50O1xuICB9XG4gIEBlbHNlIHtcbiAgICAjeyRzZWxlY3Rvci1jb250ZXh0fSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH1cbn1cblxuLy8vIEFwcGxpZXMgc3R5bGVzIGZvciB1c2VycyBpbiBoaWdoIGNvbnRyYXN0IG1vZGUuIE5vdGUgdGhhdCB0aGlzIG9ubHkgYXBwbGllc1xuLy8vIHRvIE1pY3Jvc29mdCBicm93c2Vycy4gQ2hyb21lIGNhbiBiZSBpbmNsdWRlZCBieSBjaGVja2luZyBmb3IgdGhlIGBodG1sW2hjXWBcbi8vLyBhdHRyaWJ1dGUsIGhvd2V2ZXIgQ2hyb21lIGhhbmRsZXMgaGlnaCBjb250cmFzdCBkaWZmZXJlbnRseS5cbi8vL1xuLy8vIEBwYXJhbSB0YXJnZXQgV2hpY2gga2luZCBvZiBoaWdoIGNvbnRyYXN0IHNldHRpbmcgdG8gdGFyZ2V0LiBEZWZhdWx0cyB0byBgYWN0aXZlYCwgY2FuIGJlXG4vLy8gICAgYHdoaXRlLW9uLWJsYWNrYCBvciBgYmxhY2stb24td2hpdGVgLlxuLy8vIEBwYXJhbSBlbmNhcHN1bGF0aW9uIFdoZXRoZXIgdG8gZW1pdCBzdHlsZXMgZm9yIHZpZXcgZW5jYXBzdWxhdGlvbi4gVmFsdWVzIGFyZTpcbi8vLyAgICAgKiBgb25gIC0gd29ya3MgZm9yIGBFbXVsYXRlZGAsIGBOYXRpdmVgLCBhbmQgYFNoYWRvd0RvbWBcbi8vLyAgICAgKiBgb2ZmYCAtIHdvcmtzIGZvciBgTm9uZWBcbi8vLyAgICAgKiBgYW55YCAtIHdvcmtzIGZvciBhbGwgZW5jYXBzdWxhdGlvbiBtb2RlcyBieSBlbWl0dGluZyB0aGUgQ1NTIHR3aWNlIChkZWZhdWx0KS5cbkBtaXhpbiBjZGstaGlnaC1jb250cmFzdCgkdGFyZ2V0OiBhY3RpdmUsICRlbmNhcHN1bGF0aW9uOiAnYW55Jykge1xuICBAaWYgKCR0YXJnZXQgIT0gJ2FjdGl2ZScgYW5kICR0YXJnZXQgIT0gJ2JsYWNrLW9uLXdoaXRlJyBhbmQgJHRhcmdldCAhPSAnd2hpdGUtb24tYmxhY2snKSB7XG4gICAgQGVycm9yICdVbmtub3duIGNkay1oaWdoLWNvbnRyYXN0IHZhbHVlIFwiI3skdGFyZ2V0fVwiIHByb3ZpZGVkLiAnICtcbiAgICAgICAgICAgJ0FsbG93ZWQgdmFsdWVzIGFyZSBcImFjdGl2ZVwiLCBcImJsYWNrLW9uLXdoaXRlXCIsIGFuZCBcIndoaXRlLW9uLWJsYWNrXCInO1xuICB9XG5cbiAgQGlmICgkZW5jYXBzdWxhdGlvbiAhPSAnb24nIGFuZCAkZW5jYXBzdWxhdGlvbiAhPSAnb2ZmJyBhbmQgJGVuY2Fwc3VsYXRpb24gIT0gJ2FueScpIHtcbiAgICBAZXJyb3IgJ1Vua25vd24gY2RrLWhpZ2gtY29udHJhc3QgZW5jYXBzdWxhdGlvbiBcIiN7JGVuY2Fwc3VsYXRpb259XCIgcHJvdmlkZWQuICcgK1xuICAgICAgICAgICAnQWxsb3dlZCB2YWx1ZXMgYXJlIFwib25cIiwgXCJvZmZcIiwgYW5kIFwiYW55XCInO1xuICB9XG5cbiAgLy8gSWYgdGhlIHNlbGVjdG9yIGNvbnRleHQgaGFzIG11bHRpcGxlIHBhcnRzLCBzdWNoIGFzIGAuc2VjdGlvbiwgLnJlZ2lvbmAsIGp1c3QgZG9pbmdcbiAgLy8gYC5jZGstaGlnaC1jb250cmFzdC14eHggI3smfWAgd2lsbCBvbmx5IGFwcGx5IHRoZSBwYXJlbnQgc2VsZWN0b3IgdG8gdGhlIGZpcnN0IHBhcnQgb2YgdGhlXG4gIC8vIGNvbnRleHQuIFdlIGFkZHJlc3MgdGhpcyBieSBuZXN0aW5nIHRoZSBzZWxlY3RvciBjb250ZXh0IHVuZGVyIC5jZGstaGlnaC1jb250cmFzdC5cbiAgQGF0LXJvb3Qge1xuICAgICRzZWxlY3Rvci1jb250ZXh0OiAjeyZ9O1xuXG4gICAgQGlmICgkZW5jYXBzdWxhdGlvbiAhPSAnb24nKSB7XG4gICAgICAuY2RrLWhpZ2gtY29udHJhc3QtI3skdGFyZ2V0fSB7XG4gICAgICAgIEBpbmNsdWRlIF9jZGstb3B0aW9uYWxseS1uZXN0LWNvbnRlbnQoJHNlbGVjdG9yLWNvbnRleHQpIHtcbiAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiAoJGVuY2Fwc3VsYXRpb24gIT0gJ29mZicpIHtcbiAgICAgIC5jZGstaGlnaC1jb250cmFzdC0jeyR0YXJnZXR9IDpob3N0IHtcbiAgICAgICAgQGluY2x1ZGUgX2Nkay1vcHRpb25hbGx5LW5lc3QtY29udGVudCgkc2VsZWN0b3ItY29udGV4dCkge1xuICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIENvcmUgc3R5bGVzIHRoYXQgZW5hYmxlIG1vbml0b3JpbmcgYXV0b2ZpbGwgc3RhdGUgb2YgdGV4dCBmaWVsZHMuXG5AbWl4aW4gY2RrLXRleHQtZmllbGQge1xuICAvLyBLZXlmcmFtZXMgdGhhdCBhcHBseSBubyBzdHlsZXMsIGJ1dCBhbGxvdyB1cyB0byBtb25pdG9yIHdoZW4gYW4gdGV4dCBmaWVsZCBiZWNvbWVzIGF1dG9maWxsZWRcbiAgLy8gYnkgd2F0Y2hpbmcgZm9yIHRoZSBhbmltYXRpb24gZXZlbnRzIHRoYXQgYXJlIGZpcmVkIHdoZW4gdGhleSBzdGFydC4gTm90ZTogdGhlIC8qISovIGNvbW1lbnQgaXNcbiAgLy8gbmVlZGVkIHRvIHByZXZlbnQgTGliU2FzcyBmcm9tIHN0cmlwcGluZyB0aGUga2V5ZnJhbWVzIG91dC5cbiAgLy8gQmFzZWQgb246IGh0dHBzOi8vbWVkaXVtLmNvbS9AYnJ1bm4vZGV0ZWN0aW5nLWF1dG9maWxsZWQtZmllbGRzLWluLWphdmFzY3JpcHQtYWVkNTk4ZDI1ZGE3XG4gIEBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgey8qISovfVxuICBAa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCB7LyohKi99XG5cbiAgLmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDotd2Via2l0LWF1dG9maWxsIHtcbiAgICAvLyBTaW5jZSBDaHJvbWUgODAgd2UgbmVlZCBhIDFtcyBkZWxheSwgb3IgdGhlIGFuaW1hdGlvbnN0YXJ0IGV2ZW50IHdvbid0IGZpcmUuXG4gICAgYW5pbWF0aW9uOiBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXM7XG4gIH1cblxuICAuY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCkge1xuICAgIC8vIFNpbmNlIENocm9tZSA4MCB3ZSBuZWVkIGEgMW1zIGRlbGF5LCBvciB0aGUgYW5pbWF0aW9uc3RhcnQgZXZlbnQgd29uJ3QgZmlyZS5cbiAgICBhbmltYXRpb246IGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXM7XG4gIH1cblxuICAvLyBSZW1vdmUgdGhlIHJlc2l6ZSBoYW5kbGUgb24gYXV0b3NpemluZyB0ZXh0YXJlYXMsIGJlY2F1c2Ugd2hhdGV2ZXIgaGVpZ2h0XG4gIC8vIHRoZSB1c2VyIHJlc2l6ZWQgdG8gd2lsbCBiZSBvdmVyd3JpdHRlbiBvbmNlIHRoZXkgc3RhcnQgdHlwaW5nIGFnYWluLlxuICB0ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUge1xuICAgIHJlc2l6ZTogbm9uZTtcbiAgfVxuXG4gIC8vIFRoaXMgY2xhc3MgaXMgdGVtcG9yYXJpbHkgYXBwbGllZCB0byB0aGUgdGV4dGFyZWEgd2hlbiBpdCBpcyBiZWluZyBtZWFzdXJlZC4gSXQgaXMgaW1tZWRpYXRlbHlcbiAgLy8gcmVtb3ZlZCB3aGVuIG1lYXN1cmluZyBpcyBjb21wbGV0ZS4gV2UgdXNlIGAhaW1wb3J0YW50YCBydWxlcyBoZXJlIHRvIG1ha2Ugc3VyZSB1c2VyLXNwZWNpZmllZFxuICAvLyBydWxlcyBkbyBub3QgaW50ZXJmZXJlIHdpdGggdGhlIG1lYXN1cmVtZW50LlxuICB0ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nIHtcbiAgICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDtcbiAgICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7XG4gICAgLy8gSGF2aW5nIDJweCB0b3AgYW5kIGJvdHRvbSBwYWRkaW5nIHNlZW1zIHRvIGZpeCBhIGJ1ZyB3aGVyZSBDaHJvbWUgZ2V0cyBhbiBpbmNvcnJlY3RcbiAgICAvLyBtZWFzdXJlbWVudC4gV2UganVzdCBoYXZlIHRvIGFjY291bnQgZm9yIGl0IGxhdGVyIGFuZCBzdWJ0cmFjdCBpdCBvZmYgdGhlIGZpbmFsIHJlc3VsdC5cbiAgICBwYWRkaW5nOiAycHggMCAhaW1wb3J0YW50O1xuICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLy8gVXNlZCB0byBnZW5lcmF0ZSBVSURzIGZvciBrZXlmcmFtZXMgdXNlZCB0byBjaGFuZ2UgdGhlIHRleHQgZmllbGQgYXV0b2ZpbGwgc3R5bGVzLlxuJGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLWZyYW1lLWNvdW50OiAwO1xuXG4vLyBNaXhpbiB1c2VkIHRvIGFwcGx5IGN1c3RvbSBiYWNrZ3JvdW5kIGFuZCBmb3JlZ3JvdW5kIGNvbG9ycyB0byBhbiBhdXRvZmlsbGVkIHRleHQgZmllbGQuXG4vLyBCYXNlZCBvbjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjc4MTU0OS9cbi8vIHJlbW92aW5nLWlucHV0LWJhY2tncm91bmQtY29sb3VyLWZvci1jaHJvbWUtYXV0b2NvbXBsZXRlI2Fuc3dlci0zNzQzMjI2MFxuQG1peGluIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yKCRiYWNrZ3JvdW5kLCAkZm9yZWdyb3VuZDonJykge1xuICBAa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLSN7JGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLWZyYW1lLWNvdW50fSB7XG4gICAgdG8ge1xuICAgICAgYmFja2dyb3VuZDogJGJhY2tncm91bmQ7XG4gICAgICBAaWYgJGZvcmVncm91bmQgIT0gJycgeyBjb2xvcjogJGZvcmVncm91bmQ7IH1cbiAgICB9XG4gIH1cblxuICAmOi13ZWJraXQtYXV0b2ZpbGwge1xuICAgIGFuaW1hdGlvbjogY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItI3skY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItZnJhbWUtY291bnR9IGJvdGg7XG4gIH1cblxuICAmLmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDotd2Via2l0LWF1dG9maWxsIHtcbiAgICAvLyBTaW5jZSBDaHJvbWUgODAgd2UgbmVlZCBhIDFtcyBkZWxheSBmb3IgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQsIG9yIHRoZSBhbmltYXRpb25zdGFydFxuICAgIC8vIGV2ZW50IHdvbid0IGZpcmUuXG4gICAgYW5pbWF0aW9uOiBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXMsXG4gICAgICAgICAgICAgICBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci0jeyRjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci1mcmFtZS1jb3VudH0gYm90aDtcbiAgfVxuXG4gICRjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci1mcmFtZS1jb3VudDpcbiAgICAgICRjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci1mcmFtZS1jb3VudCArIDEgIWdsb2JhbDtcbn1cblxuXG4vLyBDb3JlIHN0eWxlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGFwcGx5IG1hdGVyaWFsIGRlc2lnbiB0cmVhdG1lbnRzIHRvIGFueSBlbGVtZW50LlxuLy8gTWVkaWEgcXVlcmllc1xuLy8gVE9ETyhqb3NlcGhwZXJyb3R0KTogQ2hhbmdlICRtYXQteHNtYWxsIGFuZCAkbWF0LXNtYWxsIHVzYWdlcyB0byByZWx5IG9uIEJyZWFrcG9pbnRPYnNlcnZlcixcbiRtYXQteHNtYWxsOiAnbWF4LXdpZHRoOiA1OTlweCc7XG4kbWF0LXNtYWxsOiAnbWF4LXdpZHRoOiA5NTlweCc7XG5cbi8vIFRPRE86IFJldmlzaXQgYWxsIHotaW5kaWNlcyBiZWZvcmUgYmV0YVxuLy8gei1pbmRleCBtYXN0ZXIgbGlzdFxuXG4kei1pbmRleC1mYWI6IDIwICFkZWZhdWx0O1xuJHotaW5kZXgtZHJhd2VyOiAxMDAgIWRlZmF1bHQ7XG5cbi8vIEdsb2JhbCBjb25zdGFudHNcbiRwaTogMy4xNDE1OTI2NTtcblxuLy8gUGFkZGluZyBiZXR3ZWVuIGlucHV0IHRvZ2dsZXMgYW5kIHRoZWlyIGxhYmVsc1xuJG1hdC10b2dnbGUtcGFkZGluZzogOHB4ICFkZWZhdWx0O1xuLy8gV2lkdGggYW5kIGhlaWdodCBvZiBpbnB1dCB0b2dnbGVzXG4kbWF0LXRvZ2dsZS1zaXplOiAyMHB4ICFkZWZhdWx0O1xuXG4vLyBFYXNpbmcgQ3VydmVzXG4vLyBUT0RPKGplbGJvdXJuKTogYWxsIG9mIHRoZXNlIG5lZWQgdG8gYmUgcmV2aXNpdGVkXG5cbi8vIFRoZSBkZWZhdWx0IGFuaW1hdGlvbiBjdXJ2ZXMgdXNlZCBieSBtYXRlcmlhbCBkZXNpZ24uXG4kbWF0LWxpbmVhci1vdXQtc2xvdy1pbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSkgIWRlZmF1bHQ7XG4kbWF0LWZhc3Qtb3V0LXNsb3ctaW4tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpICFkZWZhdWx0O1xuJG1hdC1mYXN0LW91dC1saW5lYXItaW4tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAxLCAxKSAhZGVmYXVsdDtcblxuJGVhc2UtaW4tb3V0LWN1cnZlLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSkgIWRlZmF1bHQ7XG5cbiRzd2lmdC1lYXNlLW91dC1kdXJhdGlvbjogNDAwbXMgIWRlZmF1bHQ7XG4kc3dpZnQtZWFzZS1vdXQtdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSAhZGVmYXVsdDtcbiRzd2lmdC1lYXNlLW91dDogYWxsICRzd2lmdC1lYXNlLW91dC1kdXJhdGlvbiAkc3dpZnQtZWFzZS1vdXQtdGltaW5nLWZ1bmN0aW9uICFkZWZhdWx0O1xuXG4kc3dpZnQtZWFzZS1pbi1kdXJhdGlvbjogMzAwbXMgIWRlZmF1bHQ7XG4kc3dpZnQtZWFzZS1pbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjU1LCAwLCAwLjU1LCAwLjIpICFkZWZhdWx0O1xuJHN3aWZ0LWVhc2UtaW46IGFsbCAkc3dpZnQtZWFzZS1pbi1kdXJhdGlvbiAkc3dpZnQtZWFzZS1pbi10aW1pbmctZnVuY3Rpb24gIWRlZmF1bHQ7XG5cbiRzd2lmdC1lYXNlLWluLW91dC1kdXJhdGlvbjogNTAwbXMgIWRlZmF1bHQ7XG4kc3dpZnQtZWFzZS1pbi1vdXQtdGltaW5nLWZ1bmN0aW9uOiAkZWFzZS1pbi1vdXQtY3VydmUtZnVuY3Rpb24gIWRlZmF1bHQ7XG4kc3dpZnQtZWFzZS1pbi1vdXQ6IGFsbCAkc3dpZnQtZWFzZS1pbi1vdXQtZHVyYXRpb24gJHN3aWZ0LWVhc2UtaW4tb3V0LXRpbWluZy1mdW5jdGlvbiAhZGVmYXVsdDtcblxuJHN3aWZ0LWxpbmVhci1kdXJhdGlvbjogODBtcyAhZGVmYXVsdDtcbiRzd2lmdC1saW5lYXItdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXIgIWRlZmF1bHQ7XG4kc3dpZnQtbGluZWFyOiBhbGwgJHN3aWZ0LWxpbmVhci1kdXJhdGlvbiAkc3dpZnQtbGluZWFyLXRpbWluZy1mdW5jdGlvbiAhZGVmYXVsdDtcblxuXG5cbi8vIEEgY29sbGVjdGlvbiBvZiBtaXhpbnMgYW5kIENTUyBjbGFzc2VzIHRoYXQgY2FuIGJlIHVzZWQgdG8gYXBwbHkgZWxldmF0aW9uIHRvIGEgbWF0ZXJpYWxcbi8vIGVsZW1lbnQuXG4vLyBTZWU6IGh0dHBzOi8vbWF0ZXJpYWwuaW8vZGVzaWduL2Vudmlyb25tZW50L2VsZXZhdGlvbi5odG1sXG4vLyBFeGFtcGxlczpcbi8vXG4vL1xuLy8gLm1hdC1mb28ge1xuLy8gICBAaW5jbHVkZSAkbWF0LWVsZXZhdGlvbigyKTtcbi8vXG4vLyAgICY6YWN0aXZlIHtcbi8vICAgICBAaW5jbHVkZSAkbWF0LWVsZXZhdGlvbig4KTtcbi8vICAgfVxuLy8gfVxuLy9cbi8vIDxkaXYgaWQ9XCJleHRlcm5hbC1jYXJkXCIgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXoyXCI+PHA+U29tZSBjb250ZW50PC9wPjwvZGl2PlxuLy9cbi8vIEZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgZGVzaWduIGJlaGluZCBob3cgZWxldmF0aW9uIGlzIGltcGxlbWVudGVkLCBzZWUgdGhlIGRlc2lnbiBkb2MgYXRcbi8vIGh0dHBzOi8vZ29vLmdsL0txMGs5Wi5cblxuLy8gQ29sb3JzIGZvciB1bWJyYSwgcGVudW1icmEsIGFuZCBhbWJpZW50IHNoYWRvd3MuIEFzIGRlc2NyaWJlZCBpbiB0aGUgZGVzaWduIGRvYywgZWFjaCBlbGV2YXRpb25cbi8vIGxldmVsIGlzIGNyZWF0ZWQgdXNpbmcgYSBzZXQgb2YgMyBzaGFkb3cgdmFsdWVzLCBvbmUgZm9yIHVtYnJhICh0aGUgc2hhZG93IHJlcHJlc2VudGluZyB0aGVcbi8vIHNwYWNlIGNvbXBsZXRlbHkgb2JzY3VyZWQgYnkgYW4gb2JqZWN0IHJlbGF0aXZlIHRvIGl0cyBsaWdodCBzb3VyY2UpLCBvbmUgZm9yIHBlbnVtYnJhICh0aGVcbi8vIHNwYWNlIHBhcnRpYWxseSBvYnNjdXJlZCBieSBhbiBvYmplY3QpLCBhbmQgb25lIGZvciBhbWJpZW50ICh0aGUgc3BhY2Ugd2hpY2ggY29udGFpbnMgdGhlIG9iamVjdFxuLy8gaXRzZWxmKS4gRm9yIGEgZnVydGhlciBleHBsYW5hdGlvbiBvZiB0aGVzZSB0ZXJtcyBhbmQgdGhlaXIgbWVhbmluZ3MsIHNlZVxuLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVW1icmEsX3BlbnVtYnJhX2FuZF9hbnR1bWJyYS5cblxuLy8gTWFwcyBmb3IgdGhlIGRpZmZlcmVudCBzaGFkb3cgc2V0cyBhbmQgdGhlaXIgdmFsdWVzIHdpdGhpbiBlYWNoIHotc3BhY2UuIFRoZXNlIHZhbHVlcyB3ZXJlXG4vLyBjcmVhdGVkIGJ5IHRha2luZyBhIGZldyByZWZlcmVuY2Ugc2hhZG93IHNldHMgY3JlYXRlZCBieSBHb29nbGUncyBEZXNpZ25lcnMgYW5kIGludGVycG9sYXRpbmdcbi8vIGFsbCBvZiB0aGUgdmFsdWVzIGJldHdlZW4gdGhlbS5cblxuQGZ1bmN0aW9uIF9nZXQtdW1icmEtbWFwKCRjb2xvciwgJG9wYWNpdHkpIHtcbiAgJHNoYWRvdy1jb2xvcjogaWYodHlwZS1vZigkY29sb3IpID09IGNvbG9yLCByZ2JhKCRjb2xvciwgJG9wYWNpdHkgKiAwLjIpLCAkY29sb3IpO1xuXG4gIEByZXR1cm4gKFxuICAgIDA6ICcwcHggMHB4IDBweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTogJzBweCAycHggMXB4IC0xcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjogJzBweCAzcHggMXB4IC0ycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMzogJzBweCAzcHggM3B4IC0ycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNDogJzBweCAycHggNHB4IC0xcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNTogJzBweCAzcHggNXB4IC0xcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNjogJzBweCAzcHggNXB4IC0xcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNzogJzBweCA0cHggNXB4IC0ycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgODogJzBweCA1cHggNXB4IC0zcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgOTogJzBweCA1cHggNnB4IC0zcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTA6ICcwcHggNnB4IDZweCAtM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDExOiAnMHB4IDZweCA3cHggLTRweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMjogJzBweCA3cHggOHB4IC00cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTM6ICcwcHggN3B4IDhweCAtNHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE0OiAnMHB4IDdweCA5cHggLTRweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNTogJzBweCA4cHggOXB4IC01cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTY6ICcwcHggOHB4IDEwcHggLTVweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNzogJzBweCA4cHggMTFweCAtNXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE4OiAnMHB4IDlweCAxMXB4IC01cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTk6ICcwcHggOXB4IDEycHggLTZweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMDogJzBweCAxMHB4IDEzcHggLTZweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMTogJzBweCAxMHB4IDEzcHggLTZweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMjogJzBweCAxMHB4IDE0cHggLTZweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMzogJzBweCAxMXB4IDE0cHggLTdweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyNDogJzBweCAxMXB4IDE1cHggLTdweCAjeyRzaGFkb3ctY29sb3J9J1xuICApO1xufVxuXG5AZnVuY3Rpb24gX2dldC1wZW51bWJyYS1tYXAoJGNvbG9yLCAkb3BhY2l0eSkge1xuICAkc2hhZG93LWNvbG9yOiBpZih0eXBlLW9mKCRjb2xvcikgPT0gY29sb3IsIHJnYmEoJGNvbG9yLCAkb3BhY2l0eSAqIDAuMTQpLCAkY29sb3IpO1xuXG4gIEByZXR1cm4gKFxuICAgIDA6ICcwcHggMHB4IDBweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTogJzBweCAxcHggMXB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyOiAnMHB4IDJweCAycHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDM6ICcwcHggM3B4IDRweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNDogJzBweCA0cHggNXB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA1OiAnMHB4IDVweCA4cHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDY6ICcwcHggNnB4IDEwcHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDc6ICcwcHggN3B4IDEwcHggMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDg6ICcwcHggOHB4IDEwcHggMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDk6ICcwcHggOXB4IDEycHggMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEwOiAnMHB4IDEwcHggMTRweCAxcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTE6ICcwcHggMTFweCAxNXB4IDFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMjogJzBweCAxMnB4IDE3cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEzOiAnMHB4IDEzcHggMTlweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTQ6ICcwcHggMTRweCAyMXB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNTogJzBweCAxNXB4IDIycHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE2OiAnMHB4IDE2cHggMjRweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTc6ICcwcHggMTdweCAyNnB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxODogJzBweCAxOHB4IDI4cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE5OiAnMHB4IDE5cHggMjlweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjA6ICcwcHggMjBweCAzMXB4IDNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMTogJzBweCAyMXB4IDMzcHggM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIyOiAnMHB4IDIycHggMzVweCAzcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjM6ICcwcHggMjNweCAzNnB4IDNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyNDogJzBweCAyNHB4IDM4cHggM3B4ICN7JHNoYWRvdy1jb2xvcn0nXG4gICk7XG59XG5cbkBmdW5jdGlvbiBfZ2V0LWFtYmllbnQtbWFwKCRjb2xvciwgJG9wYWNpdHkpIHtcbiAgJHNoYWRvdy1jb2xvcjogaWYodHlwZS1vZigkY29sb3IpID09IGNvbG9yLCByZ2JhKCRjb2xvciwgJG9wYWNpdHkgKiAwLjEyKSwgJGNvbG9yKTtcblxuICBAcmV0dXJuIChcbiAgICAwOiAnMHB4IDBweCAwcHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE6ICcwcHggMXB4IDNweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjogJzBweCAxcHggNXB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAzOiAnMHB4IDFweCA4cHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDQ6ICcwcHggMXB4IDEwcHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDU6ICcwcHggMXB4IDE0cHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDY6ICcwcHggMXB4IDE4cHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDc6ICcwcHggMnB4IDE2cHggMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDg6ICcwcHggM3B4IDE0cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDk6ICcwcHggM3B4IDE2cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEwOiAnMHB4IDRweCAxOHB4IDNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMTogJzBweCA0cHggMjBweCAzcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTI6ICcwcHggNXB4IDIycHggNHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEzOiAnMHB4IDVweCAyNHB4IDRweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNDogJzBweCA1cHggMjZweCA0cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTU6ICcwcHggNnB4IDI4cHggNXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE2OiAnMHB4IDZweCAzMHB4IDVweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNzogJzBweCA2cHggMzJweCA1cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTg6ICcwcHggN3B4IDM0cHggNnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE5OiAnMHB4IDdweCAzNnB4IDZweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMDogJzBweCA4cHggMzhweCA3cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjE6ICcwcHggOHB4IDQwcHggN3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIyOiAnMHB4IDhweCA0MnB4IDdweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMzogJzBweCA5cHggNDRweCA4cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjQ6ICcwcHggOXB4IDQ2cHggOHB4ICN7JHNoYWRvdy1jb2xvcn0nXG4gICk7XG59XG5cbi8vIFRoZSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciBlbGV2YXRpb24gdHJhbnNpdGlvbnMuXG4kbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLWR1cmF0aW9uOiAyODBtcyAhZGVmYXVsdDtcblxuLy8gVGhlIGRlZmF1bHQgZWFzaW5nIHZhbHVlIGZvciBlbGV2YXRpb24gdHJhbnNpdGlvbnMuXG4kbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogJG1hdC1mYXN0LW91dC1zbG93LWluLXRpbWluZy1mdW5jdGlvbjtcblxuLy8gVGhlIGRlZmF1bHQgY29sb3IgZm9yIGVsZXZhdGlvbiBzaGFkb3dzLlxuJG1hdC1lbGV2YXRpb24tY29sb3I6IGJsYWNrICFkZWZhdWx0O1xuXG4vLyBUaGUgZGVmYXVsdCBvcGFjaXR5IHNjYWxpbmcgdmFsdWUgZm9yIGVsZXZhdGlvbiBzaGFkb3dzLlxuJG1hdC1lbGV2YXRpb24tb3BhY2l0eTogMSAhZGVmYXVsdDtcblxuLy8gUHJlZml4IGZvciBlbGV2YXRpb24tcmVsYXRlZCBzZWxlY3RvcnMuXG4kX21hdC1lbGV2YXRpb24tcHJlZml4OiAnbWF0LWVsZXZhdGlvbi16JztcblxuLy8gQXBwbGllcyB0aGUgY29ycmVjdCBjc3MgcnVsZXMgdG8gYW4gZWxlbWVudCB0byBnaXZlIGl0IHRoZSBlbGV2YXRpb24gc3BlY2lmaWVkIGJ5ICR6VmFsdWUuXG4vLyBUaGUgJHpWYWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjQuXG5AbWl4aW4gbWF0LWVsZXZhdGlvbigkelZhbHVlLCAkY29sb3I6ICRtYXQtZWxldmF0aW9uLWNvbG9yLCAkb3BhY2l0eTogJG1hdC1lbGV2YXRpb24tb3BhY2l0eSkge1xuICBAaWYgdHlwZS1vZigkelZhbHVlKSAhPSBudW1iZXIgb3Igbm90IHVuaXRsZXNzKCR6VmFsdWUpIHtcbiAgICBAZXJyb3IgJyR6VmFsdWUgbXVzdCBiZSBhIHVuaXRsZXNzIG51bWJlcic7XG4gIH1cbiAgQGlmICR6VmFsdWUgPCAwIG9yICR6VmFsdWUgPiAyNCB7XG4gICAgQGVycm9yICckelZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyNCc7XG4gIH1cblxuICBib3gtc2hhZG93OiAje21hcC1nZXQoX2dldC11bWJyYS1tYXAoJGNvbG9yLCAkb3BhY2l0eSksICR6VmFsdWUpfSxcbiAgICAgICAgICAgICAgI3ttYXAtZ2V0KF9nZXQtcGVudW1icmEtbWFwKCRjb2xvciwgJG9wYWNpdHkpLCAkelZhbHVlKX0sXG4gICAgICAgICAgICAgICN7bWFwLWdldChfZ2V0LWFtYmllbnQtbWFwKCRjb2xvciwgJG9wYWNpdHkpLCAkelZhbHVlKX07XG59XG5cbkBtaXhpbiBfbWF0LXRoZW1lLWVsZXZhdGlvbigkelZhbHVlLCAkdGhlbWUsICRvcGFjaXR5OiAkbWF0LWVsZXZhdGlvbi1vcGFjaXR5KSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRlbGV2YXRpb24tY29sb3I6IG1hcC1nZXQoJGZvcmVncm91bmQsIGVsZXZhdGlvbik7XG4gICRlbGV2YXRpb24tY29sb3Itb3ItZGVmYXVsdDogaWYoJGVsZXZhdGlvbi1jb2xvciA9PSBudWxsLCAkbWF0LWVsZXZhdGlvbi1jb2xvciwgJGVsZXZhdGlvbi1jb2xvcik7XG5cbiAgQGluY2x1ZGUgbWF0LWVsZXZhdGlvbigkelZhbHVlLCAkZWxldmF0aW9uLWNvbG9yLW9yLWRlZmF1bHQsICRvcGFjaXR5KTtcbn1cblxuLy8gQXBwbGllcyB0aGUgZWxldmF0aW9uIHRvIGFuIGVsZW1lbnQgaW4gYSBtYW5uZXIgdGhhdCBhbGxvd3Ncbi8vIGNvbnN1bWVycyB0byBvdmVycmlkZSBpdCB2aWEgdGhlIE1hdGVyaWFsIGVsZXZhdGlvbiBjbGFzc2VzLlxuQG1peGluIG1hdC1vdmVycmlkYWJsZS1lbGV2YXRpb24oXG4gICAgJHpWYWx1ZSxcbiAgICAkY29sb3I6ICRtYXQtZWxldmF0aW9uLWNvbG9yLFxuICAgICRvcGFjaXR5OiAkbWF0LWVsZXZhdGlvbi1vcGFjaXR5KSB7XG4gICY6bm90KFtjbGFzcyo9JyN7JF9tYXQtZWxldmF0aW9uLXByZWZpeH0nXSkge1xuICAgIEBpbmNsdWRlIG1hdC1lbGV2YXRpb24oJHpWYWx1ZSwgJGNvbG9yLCAkb3BhY2l0eSk7XG4gIH1cbn1cblxuQG1peGluIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKCR6VmFsdWUsICR0aGVtZSwgJG9wYWNpdHk6ICRtYXQtZWxldmF0aW9uLW9wYWNpdHkpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGVsZXZhdGlvbi1jb2xvcjogbWFwLWdldCgkZm9yZWdyb3VuZCwgZWxldmF0aW9uKTtcbiAgJGVsZXZhdGlvbi1jb2xvci1vci1kZWZhdWx0OiBpZigkZWxldmF0aW9uLWNvbG9yID09IG51bGwsICRtYXQtZWxldmF0aW9uLWNvbG9yLCAkZWxldmF0aW9uLWNvbG9yKTtcblxuICBAaW5jbHVkZSBtYXQtb3ZlcnJpZGFibGUtZWxldmF0aW9uKCR6VmFsdWUsICRlbGV2YXRpb24tY29sb3Itb3ItZGVmYXVsdCwgJG9wYWNpdHkpO1xufVxuXG4vLyBSZXR1cm5zIGEgc3RyaW5nIHRoYXQgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvciBhIHRyYW5zaXRpb24gcHJvcGVydHkgZm9yIGVsZXZhdGlvbi5cbi8vIENhbGxpbmcgdGhpcyBmdW5jdGlvbiBkaXJlY3RseSBpcyB1c2VmdWwgaW4gc2l0dWF0aW9ucyB3aGVyZSBhIGNvbXBvbmVudCBuZWVkcyB0byB0cmFuc2l0aW9uXG4vLyBtb3JlIHRoYW4gb25lIHByb3BlcnR5LlxuLy9cbi8vIC5mb28ge1xuLy8gICB0cmFuc2l0aW9uOiBtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tcHJvcGVydHktdmFsdWUoKSwgb3BhY2l0eSAxMDBtcyBlYXNlO1xuLy8gfVxuQGZ1bmN0aW9uIG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi1wcm9wZXJ0eS12YWx1ZShcbiAgICAkZHVyYXRpb246ICRtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tZHVyYXRpb24sXG4gICAgJGVhc2luZzogJG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pIHtcbiAgQHJldHVybiBib3gtc2hhZG93ICN7JGR1cmF0aW9ufSAjeyRlYXNpbmd9O1xufVxuXG4vLyBBcHBsaWVzIHRoZSBjb3JyZWN0IGNzcyBydWxlcyBuZWVkZWQgdG8gaGF2ZSBhbiBlbGVtZW50IHRyYW5zaXRpb24gYmV0d2VlbiBlbGV2YXRpb25zLlxuLy8gVGhpcyBtaXhpbiBzaG91bGQgYmUgYXBwbGllZCB0byBlbGVtZW50cyB3aG9zZSBlbGV2YXRpb24gdmFsdWVzIHdpbGwgY2hhbmdlIGRlcGVuZGluZyBvbiB0aGVpclxuLy8gY29udGV4dCAoZS5nLiB3aGVuIGFjdGl2ZSBvciBkaXNhYmxlZCkuXG4vL1xuLy8gTk9URSh0cmF2aXNrYXVmbWFuKTogQm90aCB0aGlzIG1peGluIGFuZCB0aGUgYWJvdmUgZnVuY3Rpb24gdXNlIGRlZmF1bHQgcGFyYW1ldGVycyBzbyB0aGV5IGNhblxuLy8gYmUgdXNlZCBpbiB0aGUgc2FtZSB3YXkgYnkgY2xpZW50cy5cbkBtaXhpbiBtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24oXG4gICAgJGR1cmF0aW9uOiAkbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLWR1cmF0aW9uLFxuICAgICRlYXNpbmc6ICRtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSB7XG4gIHRyYW5zaXRpb246IG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi1wcm9wZXJ0eS12YWx1ZSgkZHVyYXRpb24sICRlYXNpbmcpO1xufVxuXG4vLyBDb2xvciBwYWxldHRlcyBmcm9tIHRoZSBNYXRlcmlhbCBEZXNpZ24gc3BlYy5cbi8vIFNlZSBodHRwczovL21hdGVyaWFsLmlvL2Rlc2lnbi9jb2xvci9cbi8vXG4vLyBDb250cmFzdCBjb2xvcnMgYXJlIGhhcmQtY29kZWQgYmVjYXVzZSBpdCBpcyB0b28gZGlmZmljdWx0IChwcm9iYWJseSBpbXBvc3NpYmxlKSB0b1xuLy8gY2FsY3VsYXRlIHRoZW0uIFRoZXNlIGNvbnRyYXN0IGNvbG9ycyBhcmUgcHVsbGVkIGZyb20gdGhlIHB1YmxpYyBNYXRlcmlhbCBEZXNpZ24gc3BlYyBzd2F0Y2hlcy5cbi8vIFdoaWxlIHRoZSBjb250cmFzdCBjb2xvcnMgaW4gdGhlIHNwZWMgYXJlIG5vdCBwcmVzY3JpcHRpdmUsIHdlIHVzZSB0aGVtIGZvciBjb252ZW5pZW5jZS5cblxuXG4vLyBAZGVwcmVjYXRlZCByZW5hbWVkIHRvICRkYXJrLXByaW1hcnktdGV4dC5cbi8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjBcbiRibGFjay04Ny1vcGFjaXR5OiByZ2JhKGJsYWNrLCAwLjg3KTtcbi8vIEBkZXByZWNhdGVkIHJlbmFtZWQgdG8gJGxpZ2h0LXByaW1hcnktdGV4dC5cbi8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjBcbiR3aGl0ZS04Ny1vcGFjaXR5OiByZ2JhKHdoaXRlLCAwLjg3KTtcbi8vIEBkZXByZWNhdGVkIHVzZSAkZGFyay1bc2Vjb25kYXJ5LXRleHQsZGlzYWJsZWQtdGV4dCxkaXZpZGVycyxmb2N1c2VkXSBpbnN0ZWFkLlxuLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMFxuJGJsYWNrLTEyLW9wYWNpdHk6IHJnYmEoYmxhY2ssIDAuMTIpO1xuLy8gQGRlcHJlY2F0ZWQgdXNlICRsaWdodC1bc2Vjb25kYXJ5LXRleHQsZGlzYWJsZWQtdGV4dCxkaXZpZGVycyxmb2N1c2VkXSBpbnN0ZWFkLlxuLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMFxuJHdoaXRlLTEyLW9wYWNpdHk6IHJnYmEod2hpdGUsIDAuMTIpO1xuLy8gQGRlcHJlY2F0ZWQgdXNlICRkYXJrLVtzZWNvbmRhcnktdGV4dCxkaXNhYmxlZC10ZXh0LGRpdmlkZXJzLGZvY3VzZWRdIGluc3RlYWQuXG4vLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wXG4kYmxhY2stNi1vcGFjaXR5OiByZ2JhKGJsYWNrLCAwLjA2KTtcbi8vIEBkZXByZWNhdGVkIHVzZSAkbGlnaHQtW3NlY29uZGFyeS10ZXh0LGRpc2FibGVkLXRleHQsZGl2aWRlcnMsZm9jdXNlZF0gaW5zdGVhZC5cbi8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjBcbiR3aGl0ZS02LW9wYWNpdHk6IHJnYmEod2hpdGUsIDAuMDYpO1xuXG4kZGFyay1wcmltYXJ5LXRleHQ6IHJnYmEoYmxhY2ssIDAuODcpO1xuJGRhcmstc2Vjb25kYXJ5LXRleHQ6IHJnYmEoYmxhY2ssIDAuNTQpO1xuJGRhcmstZGlzYWJsZWQtdGV4dDogcmdiYShibGFjaywgMC4zOCk7XG4kZGFyay1kaXZpZGVyczogcmdiYShibGFjaywgMC4xMik7XG4kZGFyay1mb2N1c2VkOiByZ2JhKGJsYWNrLCAwLjEyKTtcbiRsaWdodC1wcmltYXJ5LXRleHQ6IHdoaXRlO1xuJGxpZ2h0LXNlY29uZGFyeS10ZXh0OiByZ2JhKHdoaXRlLCAwLjcpO1xuJGxpZ2h0LWRpc2FibGVkLXRleHQ6IHJnYmEod2hpdGUsIDAuNSk7XG4kbGlnaHQtZGl2aWRlcnM6IHJnYmEod2hpdGUsIDAuMTIpO1xuJGxpZ2h0LWZvY3VzZWQ6IHJnYmEod2hpdGUsIDAuMTIpO1xuXG4kbWF0LXJlZDogKFxuICA1MDogI2ZmZWJlZSxcbiAgMTAwOiAjZmZjZGQyLFxuICAyMDA6ICNlZjlhOWEsXG4gIDMwMDogI2U1NzM3MyxcbiAgNDAwOiAjZWY1MzUwLFxuICA1MDA6ICNmNDQzMzYsXG4gIDYwMDogI2U1MzkzNSxcbiAgNzAwOiAjZDMyZjJmLFxuICA4MDA6ICNjNjI4MjgsXG4gIDkwMDogI2I3MWMxYyxcbiAgQTEwMDogI2ZmOGE4MCxcbiAgQTIwMDogI2ZmNTI1MixcbiAgQTQwMDogI2ZmMTc0NCxcbiAgQTcwMDogI2Q1MDAwMCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LXBpbms6IChcbiAgNTA6ICNmY2U0ZWMsXG4gIDEwMDogI2Y4YmJkMCxcbiAgMjAwOiAjZjQ4ZmIxLFxuICAzMDA6ICNmMDYyOTIsXG4gIDQwMDogI2VjNDA3YSxcbiAgNTAwOiAjZTkxZTYzLFxuICA2MDA6ICNkODFiNjAsXG4gIDcwMDogI2MyMTg1YixcbiAgODAwOiAjYWQxNDU3LFxuICA5MDA6ICM4ODBlNGYsXG4gIEExMDA6ICNmZjgwYWIsXG4gIEEyMDA6ICNmZjQwODEsXG4gIEE0MDA6ICNmNTAwNTcsXG4gIEE3MDA6ICNjNTExNjIsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1wdXJwbGU6IChcbiAgNTA6ICNmM2U1ZjUsXG4gIDEwMDogI2UxYmVlNyxcbiAgMjAwOiAjY2U5M2Q4LFxuICAzMDA6ICNiYTY4YzgsXG4gIDQwMDogI2FiNDdiYyxcbiAgNTAwOiAjOWMyN2IwLFxuICA2MDA6ICM4ZTI0YWEsXG4gIDcwMDogIzdiMWZhMixcbiAgODAwOiAjNmExYjlhLFxuICA5MDA6ICM0YTE0OGMsXG4gIEExMDA6ICNlYTgwZmMsXG4gIEEyMDA6ICNlMDQwZmIsXG4gIEE0MDA6ICNkNTAwZjksXG4gIEE3MDA6ICNhYTAwZmYsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWRlZXAtcHVycGxlOiAoXG4gIDUwOiAjZWRlN2Y2LFxuICAxMDA6ICNkMWM0ZTksXG4gIDIwMDogI2IzOWRkYixcbiAgMzAwOiAjOTU3NWNkLFxuICA0MDA6ICM3ZTU3YzIsXG4gIDUwMDogIzY3M2FiNyxcbiAgNjAwOiAjNWUzNWIxLFxuICA3MDA6ICM1MTJkYTgsXG4gIDgwMDogIzQ1MjdhMCxcbiAgOTAwOiAjMzExYjkyLFxuICBBMTAwOiAjYjM4OGZmLFxuICBBMjAwOiAjN2M0ZGZmLFxuICBBNDAwOiAjNjUxZmZmLFxuICBBNzAwOiAjNjIwMGVhLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1pbmRpZ286IChcbiAgNTA6ICNlOGVhZjYsXG4gIDEwMDogI2M1Y2FlOSxcbiAgMjAwOiAjOWZhOGRhLFxuICAzMDA6ICM3OTg2Y2IsXG4gIDQwMDogIzVjNmJjMCxcbiAgNTAwOiAjM2Y1MWI1LFxuICA2MDA6ICMzOTQ5YWIsXG4gIDcwMDogIzMwM2Y5ZixcbiAgODAwOiAjMjgzNTkzLFxuICA5MDA6ICMxYTIzN2UsXG4gIEExMDA6ICM4YzllZmYsXG4gIEEyMDA6ICM1MzZkZmUsXG4gIEE0MDA6ICMzZDVhZmUsXG4gIEE3MDA6ICMzMDRmZmUsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWJsdWU6IChcbiAgNTA6ICNlM2YyZmQsXG4gIDEwMDogI2JiZGVmYixcbiAgMjAwOiAjOTBjYWY5LFxuICAzMDA6ICM2NGI1ZjYsXG4gIDQwMDogIzQyYTVmNSxcbiAgNTAwOiAjMjE5NmYzLFxuICA2MDA6ICMxZTg4ZTUsXG4gIDcwMDogIzE5NzZkMixcbiAgODAwOiAjMTU2NWMwLFxuICA5MDA6ICMwZDQ3YTEsXG4gIEExMDA6ICM4MmIxZmYsXG4gIEEyMDA6ICM0NDhhZmYsXG4gIEE0MDA6ICMyOTc5ZmYsXG4gIEE3MDA6ICMyOTYyZmYsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1saWdodC1ibHVlOiAoXG4gIDUwOiAjZTFmNWZlLFxuICAxMDA6ICNiM2U1ZmMsXG4gIDIwMDogIzgxZDRmYSxcbiAgMzAwOiAjNGZjM2Y3LFxuICA0MDA6ICMyOWI2ZjYsXG4gIDUwMDogIzAzYTlmNCxcbiAgNjAwOiAjMDM5YmU1LFxuICA3MDA6ICMwMjg4ZDEsXG4gIDgwMDogIzAyNzdiZCxcbiAgOTAwOiAjMDE1NzliLFxuICBBMTAwOiAjODBkOGZmLFxuICBBMjAwOiAjNDBjNGZmLFxuICBBNDAwOiAjMDBiMGZmLFxuICBBNzAwOiAjMDA5MWVhLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWN5YW46IChcbiAgNTA6ICNlMGY3ZmEsXG4gIDEwMDogI2IyZWJmMixcbiAgMjAwOiAjODBkZWVhLFxuICAzMDA6ICM0ZGQwZTEsXG4gIDQwMDogIzI2YzZkYSxcbiAgNTAwOiAjMDBiY2Q0LFxuICA2MDA6ICMwMGFjYzEsXG4gIDcwMDogIzAwOTdhNyxcbiAgODAwOiAjMDA4MzhmLFxuICA5MDA6ICMwMDYwNjQsXG4gIEExMDA6ICM4NGZmZmYsXG4gIEEyMDA6ICMxOGZmZmYsXG4gIEE0MDA6ICMwMGU1ZmYsXG4gIEE3MDA6ICMwMGI4ZDQsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC10ZWFsOiAoXG4gIDUwOiAjZTBmMmYxLFxuICAxMDA6ICNiMmRmZGIsXG4gIDIwMDogIzgwY2JjNCxcbiAgMzAwOiAjNGRiNmFjLFxuICA0MDA6ICMyNmE2OWEsXG4gIDUwMDogIzAwOTY4OCxcbiAgNjAwOiAjMDA4OTdiLFxuICA3MDA6ICMwMDc5NmIsXG4gIDgwMDogIzAwNjk1YyxcbiAgOTAwOiAjMDA0ZDQwLFxuICBBMTAwOiAjYTdmZmViLFxuICBBMjAwOiAjNjRmZmRhLFxuICBBNDAwOiAjMWRlOWI2LFxuICBBNzAwOiAjMDBiZmE1LFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtZ3JlZW46IChcbiAgNTA6ICNlOGY1ZTksXG4gIDEwMDogI2M4ZTZjOSxcbiAgMjAwOiAjYTVkNmE3LFxuICAzMDA6ICM4MWM3ODQsXG4gIDQwMDogIzY2YmI2YSxcbiAgNTAwOiAjNGNhZjUwLFxuICA2MDA6ICM0M2EwNDcsXG4gIDcwMDogIzM4OGUzYyxcbiAgODAwOiAjMmU3ZDMyLFxuICA5MDA6ICMxYjVlMjAsXG4gIEExMDA6ICNiOWY2Y2EsXG4gIEEyMDA6ICM2OWYwYWUsXG4gIEE0MDA6ICMwMGU2NzYsXG4gIEE3MDA6ICMwMGM4NTMsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWxpZ2h0LWdyZWVuOiAoXG4gIDUwOiAjZjFmOGU5LFxuICAxMDA6ICNkY2VkYzgsXG4gIDIwMDogI2M1ZTFhNSxcbiAgMzAwOiAjYWVkNTgxLFxuICA0MDA6ICM5Y2NjNjUsXG4gIDUwMDogIzhiYzM0YSxcbiAgNjAwOiAjN2NiMzQyLFxuICA3MDA6ICM2ODlmMzgsXG4gIDgwMDogIzU1OGIyZixcbiAgOTAwOiAjMzM2OTFlLFxuICBBMTAwOiAjY2NmZjkwLFxuICBBMjAwOiAjYjJmZjU5LFxuICBBNDAwOiAjNzZmZjAzLFxuICBBNzAwOiAjNjRkZDE3LFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWxpbWU6IChcbiAgNTA6ICNmOWZiZTcsXG4gIDEwMDogI2YwZjRjMyxcbiAgMjAwOiAjZTZlZTljLFxuICAzMDA6ICNkY2U3NzUsXG4gIDQwMDogI2Q0ZTE1NyxcbiAgNTAwOiAjY2RkYzM5LFxuICA2MDA6ICNjMGNhMzMsXG4gIDcwMDogI2FmYjQyYixcbiAgODAwOiAjOWU5ZDI0LFxuICA5MDA6ICM4Mjc3MTcsXG4gIEExMDA6ICNmNGZmODEsXG4gIEEyMDA6ICNlZWZmNDEsXG4gIEE0MDA6ICNjNmZmMDAsXG4gIEE3MDA6ICNhZWVhMDAsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LXllbGxvdzogKFxuICA1MDogI2ZmZmRlNyxcbiAgMTAwOiAjZmZmOWM0LFxuICAyMDA6ICNmZmY1OWQsXG4gIDMwMDogI2ZmZjE3NixcbiAgNDAwOiAjZmZlZTU4LFxuICA1MDA6ICNmZmViM2IsXG4gIDYwMDogI2ZkZDgzNSxcbiAgNzAwOiAjZmJjMDJkLFxuICA4MDA6ICNmOWE4MjUsXG4gIDkwMDogI2Y1N2YxNyxcbiAgQTEwMDogI2ZmZmY4ZCxcbiAgQTIwMDogI2ZmZmYwMCxcbiAgQTQwMDogI2ZmZWEwMCxcbiAgQTcwMDogI2ZmZDYwMCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1hbWJlcjogKFxuICA1MDogI2ZmZjhlMSxcbiAgMTAwOiAjZmZlY2IzLFxuICAyMDA6ICNmZmUwODIsXG4gIDMwMDogI2ZmZDU0ZixcbiAgNDAwOiAjZmZjYTI4LFxuICA1MDA6ICNmZmMxMDcsXG4gIDYwMDogI2ZmYjMwMCxcbiAgNzAwOiAjZmZhMDAwLFxuICA4MDA6ICNmZjhmMDAsXG4gIDkwMDogI2ZmNmYwMCxcbiAgQTEwMDogI2ZmZTU3ZixcbiAgQTIwMDogI2ZmZDc0MCxcbiAgQTQwMDogI2ZmYzQwMCxcbiAgQTcwMDogI2ZmYWIwMCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1vcmFuZ2U6IChcbiAgNTA6ICNmZmYzZTAsXG4gIDEwMDogI2ZmZTBiMixcbiAgMjAwOiAjZmZjYzgwLFxuICAzMDA6ICNmZmI3NGQsXG4gIDQwMDogI2ZmYTcyNixcbiAgNTAwOiAjZmY5ODAwLFxuICA2MDA6ICNmYjhjMDAsXG4gIDcwMDogI2Y1N2MwMCxcbiAgODAwOiAjZWY2YzAwLFxuICA5MDA6ICNlNjUxMDAsXG4gIEExMDA6ICNmZmQxODAsXG4gIEEyMDA6ICNmZmFiNDAsXG4gIEE0MDA6ICNmZjkxMDAsXG4gIEE3MDA6ICNmZjZkMDAsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6IGJsYWNrLFxuICApXG4pO1xuXG4kbWF0LWRlZXAtb3JhbmdlOiAoXG4gIDUwOiAjZmJlOWU3LFxuICAxMDA6ICNmZmNjYmMsXG4gIDIwMDogI2ZmYWI5MSxcbiAgMzAwOiAjZmY4YTY1LFxuICA0MDA6ICNmZjcwNDMsXG4gIDUwMDogI2ZmNTcyMixcbiAgNjAwOiAjZjQ1MTFlLFxuICA3MDA6ICNlNjRhMTksXG4gIDgwMDogI2Q4NDMxNSxcbiAgOTAwOiAjYmYzNjBjLFxuICBBMTAwOiAjZmY5ZTgwLFxuICBBMjAwOiAjZmY2ZTQwLFxuICBBNDAwOiAjZmYzZDAwLFxuICBBNzAwOiAjZGQyYzAwLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1icm93bjogKFxuICA1MDogI2VmZWJlOSxcbiAgMTAwOiAjZDdjY2M4LFxuICAyMDA6ICNiY2FhYTQsXG4gIDMwMDogI2ExODg3ZixcbiAgNDAwOiAjOGQ2ZTYzLFxuICA1MDA6ICM3OTU1NDgsXG4gIDYwMDogIzZkNGM0MSxcbiAgNzAwOiAjNWQ0MDM3LFxuICA4MDA6ICM0ZTM0MmUsXG4gIDkwMDogIzNlMjcyMyxcbiAgQTEwMDogI2Q3Y2NjOCxcbiAgQTIwMDogI2JjYWFhNCxcbiAgQTQwMDogIzhkNmU2MyxcbiAgQTcwMDogIzVkNDAzNyxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1ncmV5OiAoXG4gIDUwOiAjZmFmYWZhLFxuICAxMDA6ICNmNWY1ZjUsXG4gIDIwMDogI2VlZWVlZSxcbiAgMzAwOiAjZTBlMGUwLFxuICA0MDA6ICNiZGJkYmQsXG4gIDUwMDogIzllOWU5ZSxcbiAgNjAwOiAjNzU3NTc1LFxuICA3MDA6ICM2MTYxNjEsXG4gIDgwMDogIzQyNDI0MixcbiAgOTAwOiAjMjEyMTIxLFxuICBBMTAwOiAjZmZmZmZmLFxuICBBMjAwOiAjZWVlZWVlLFxuICBBNDAwOiAjYmRiZGJkLFxuICBBNzAwOiAjNjE2MTYxLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbi8vIEFsaWFzIGZvciBhbHRlcm5hdGUgc3BlbGxpbmcuXG4kbWF0LWdyYXk6ICRtYXQtZ3JleTtcblxuJG1hdC1ibHVlLWdyZXk6IChcbiAgNTA6ICNlY2VmZjEsXG4gIDEwMDogI2NmZDhkYyxcbiAgMjAwOiAjYjBiZWM1LFxuICAzMDA6ICM5MGE0YWUsXG4gIDQwMDogIzc4OTA5YyxcbiAgNTAwOiAjNjA3ZDhiLFxuICA2MDA6ICM1NDZlN2EsXG4gIDcwMDogIzQ1NWE2NCxcbiAgODAwOiAjMzc0NzRmLFxuICA5MDA6ICMyNjMyMzgsXG4gIEExMDA6ICNjZmQ4ZGMsXG4gIEEyMDA6ICNiMGJlYzUsXG4gIEE0MDA6ICM3ODkwOWMsXG4gIEE3MDA6ICM0NTVhNjQsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuLy8gQWxpYXMgZm9yIGFsdGVybmF0ZSBzcGVsbGluZy5cbiRtYXQtYmx1ZS1ncmF5OiAkbWF0LWJsdWUtZ3JleTtcblxuXG4vLyBCYWNrZ3JvdW5kIHBhbGV0dGUgZm9yIGxpZ2h0IHRoZW1lcy5cbiRtYXQtbGlnaHQtdGhlbWUtYmFja2dyb3VuZDogKFxuICBzdGF0dXMtYmFyOiBtYXBfZ2V0KCRtYXQtZ3JleSwgMzAwKSxcbiAgYXBwLWJhcjogICAgbWFwX2dldCgkbWF0LWdyZXksIDEwMCksXG4gIGJhY2tncm91bmQ6IG1hcF9nZXQoJG1hdC1ncmV5LCA1MCksXG4gIGhvdmVyOiAgICAgIHJnYmEoYmxhY2ssIDAuMDQpLCAvLyBUT0RPKGthcmEpOiBjaGVjayBzdHlsZSB3aXRoIE1hdGVyaWFsIERlc2lnbiBVWFxuICBjYXJkOiAgICAgICB3aGl0ZSxcbiAgZGlhbG9nOiAgICAgd2hpdGUsXG4gIGRpc2FibGVkLWJ1dHRvbjogcmdiYShibGFjaywgMC4xMiksXG4gIHJhaXNlZC1idXR0b246IHdoaXRlLFxuICBmb2N1c2VkLWJ1dHRvbjogJGRhcmstZm9jdXNlZCxcbiAgc2VsZWN0ZWQtYnV0dG9uOiBtYXBfZ2V0KCRtYXQtZ3JleSwgMzAwKSxcbiAgc2VsZWN0ZWQtZGlzYWJsZWQtYnV0dG9uOiBtYXBfZ2V0KCRtYXQtZ3JleSwgNDAwKSxcbiAgZGlzYWJsZWQtYnV0dG9uLXRvZ2dsZTogbWFwX2dldCgkbWF0LWdyZXksIDIwMCksXG4gIHVuc2VsZWN0ZWQtY2hpcDogbWFwX2dldCgkbWF0LWdyZXksIDMwMCksXG4gIGRpc2FibGVkLWxpc3Qtb3B0aW9uOiBtYXBfZ2V0KCRtYXQtZ3JleSwgMjAwKSxcbiAgdG9vbHRpcDogbWFwX2dldCgkbWF0LWdyZXksIDcwMCksXG4pO1xuXG4vLyBCYWNrZ3JvdW5kIHBhbGV0dGUgZm9yIGRhcmsgdGhlbWVzLlxuJG1hdC1kYXJrLXRoZW1lLWJhY2tncm91bmQ6IChcbiAgc3RhdHVzLWJhcjogYmxhY2ssXG4gIGFwcC1iYXI6ICAgIG1hcF9nZXQoJG1hdC1ncmV5LCA5MDApLFxuICBiYWNrZ3JvdW5kOiAjMzAzMDMwLFxuICBob3ZlcjogICAgICByZ2JhKHdoaXRlLCAwLjA0KSwgLy8gVE9ETyhrYXJhKTogY2hlY2sgc3R5bGUgd2l0aCBNYXRlcmlhbCBEZXNpZ24gVVhcbiAgY2FyZDogICAgICAgbWFwX2dldCgkbWF0LWdyZXksIDgwMCksXG4gIGRpYWxvZzogICAgIG1hcF9nZXQoJG1hdC1ncmV5LCA4MDApLFxuICBkaXNhYmxlZC1idXR0b246IHJnYmEod2hpdGUsIDAuMTIpLFxuICByYWlzZWQtYnV0dG9uOiBtYXAtZ2V0KCRtYXQtZ3JleSwgODAwKSxcbiAgZm9jdXNlZC1idXR0b246ICRsaWdodC1mb2N1c2VkLFxuICBzZWxlY3RlZC1idXR0b246IG1hcF9nZXQoJG1hdC1ncmV5LCA5MDApLFxuICBzZWxlY3RlZC1kaXNhYmxlZC1idXR0b246IG1hcF9nZXQoJG1hdC1ncmV5LCA4MDApLFxuICBkaXNhYmxlZC1idXR0b24tdG9nZ2xlOiBibGFjayxcbiAgdW5zZWxlY3RlZC1jaGlwOiBtYXBfZ2V0KCRtYXQtZ3JleSwgNzAwKSxcbiAgZGlzYWJsZWQtbGlzdC1vcHRpb246IGJsYWNrLFxuICB0b29sdGlwOiBtYXBfZ2V0KCRtYXQtZ3JleSwgNzAwKSxcbik7XG5cbi8vIEZvcmVncm91bmQgcGFsZXR0ZSBmb3IgbGlnaHQgdGhlbWVzLlxuJG1hdC1saWdodC10aGVtZS1mb3JlZ3JvdW5kOiAoXG4gIGJhc2U6ICAgICAgICAgICAgICBibGFjayxcbiAgZGl2aWRlcjogICAgICAgICAgICRkYXJrLWRpdmlkZXJzLFxuICBkaXZpZGVyczogICAgICAgICAgJGRhcmstZGl2aWRlcnMsXG4gIGRpc2FibGVkOiAgICAgICAgICAkZGFyay1kaXNhYmxlZC10ZXh0LFxuICBkaXNhYmxlZC1idXR0b246ICAgcmdiYShibGFjaywgMC4yNiksXG4gIGRpc2FibGVkLXRleHQ6ICAgICAkZGFyay1kaXNhYmxlZC10ZXh0LFxuICBlbGV2YXRpb246ICAgICAgICAgYmxhY2ssXG4gIGhpbnQtdGV4dDogICAgICAgICAkZGFyay1kaXNhYmxlZC10ZXh0LFxuICBzZWNvbmRhcnktdGV4dDogICAgJGRhcmstc2Vjb25kYXJ5LXRleHQsXG4gIGljb246ICAgICAgICAgICAgICByZ2JhKGJsYWNrLCAwLjU0KSxcbiAgaWNvbnM6ICAgICAgICAgICAgIHJnYmEoYmxhY2ssIDAuNTQpLFxuICB0ZXh0OiAgICAgICAgICAgICAgcmdiYShibGFjaywgMC44NyksXG4gIHNsaWRlci1taW46ICAgICAgICByZ2JhKGJsYWNrLCAwLjg3KSxcbiAgc2xpZGVyLW9mZjogICAgICAgIHJnYmEoYmxhY2ssIDAuMjYpLFxuICBzbGlkZXItb2ZmLWFjdGl2ZTogcmdiYShibGFjaywgMC4zOCksXG4pO1xuXG4vLyBGb3JlZ3JvdW5kIHBhbGV0dGUgZm9yIGRhcmsgdGhlbWVzLlxuJG1hdC1kYXJrLXRoZW1lLWZvcmVncm91bmQ6IChcbiAgYmFzZTogICAgICAgICAgICAgIHdoaXRlLFxuICBkaXZpZGVyOiAgICAgICAgICAgJGxpZ2h0LWRpdmlkZXJzLFxuICBkaXZpZGVyczogICAgICAgICAgJGxpZ2h0LWRpdmlkZXJzLFxuICBkaXNhYmxlZDogICAgICAgICAgJGxpZ2h0LWRpc2FibGVkLXRleHQsXG4gIGRpc2FibGVkLWJ1dHRvbjogICByZ2JhKHdoaXRlLCAwLjMpLFxuICBkaXNhYmxlZC10ZXh0OiAgICAgJGxpZ2h0LWRpc2FibGVkLXRleHQsXG4gIGVsZXZhdGlvbjogICAgICAgICBibGFjayxcbiAgaGludC10ZXh0OiAgICAgICAgICRsaWdodC1kaXNhYmxlZC10ZXh0LFxuICBzZWNvbmRhcnktdGV4dDogICAgJGxpZ2h0LXNlY29uZGFyeS10ZXh0LFxuICBpY29uOiAgICAgICAgICAgICAgd2hpdGUsXG4gIGljb25zOiAgICAgICAgICAgICB3aGl0ZSxcbiAgdGV4dDogICAgICAgICAgICAgIHdoaXRlLFxuICBzbGlkZXItbWluOiAgICAgICAgd2hpdGUsXG4gIHNsaWRlci1vZmY6ICAgICAgICByZ2JhKHdoaXRlLCAwLjMpLFxuICBzbGlkZXItb2ZmLWFjdGl2ZTogcmdiYSh3aGl0ZSwgMC4zKSxcbik7XG5cblxuXG4vLyBGb3IgYSBnaXZlbiBodWUgaW4gYSBwYWxldHRlLCByZXR1cm4gdGhlIGNvbnRyYXN0IGNvbG9yIGZyb20gdGhlIG1hcCBvZiBjb250cmFzdCBwYWxldHRlcy5cbi8vIEBwYXJhbSAkY29sb3ItbWFwXG4vLyBAcGFyYW0gJGh1ZVxuQGZ1bmN0aW9uIG1hdC1jb250cmFzdCgkcGFsZXR0ZSwgJGh1ZSkge1xuICBAcmV0dXJuIG1hcC1nZXQobWFwLWdldCgkcGFsZXR0ZSwgY29udHJhc3QpLCAkaHVlKTtcbn1cblxuXG4vLyBDcmVhdGVzIGEgbWFwIG9mIGh1ZXMgdG8gY29sb3JzIGZvciBhIHRoZW1lLiBUaGlzIGlzIHVzZWQgdG8gZGVmaW5lIGEgdGhlbWUgcGFsZXR0ZSBpbiB0ZXJtc1xuLy8gb2YgdGhlIE1hdGVyaWFsIERlc2lnbiBodWVzLlxuLy8gQHBhcmFtICRjb2xvci1tYXBcbi8vIEBwYXJhbSAkcHJpbWFyeVxuLy8gQHBhcmFtICRsaWdodGVyXG5AZnVuY3Rpb24gbWF0LXBhbGV0dGUoJGJhc2UtcGFsZXR0ZSwgJGRlZmF1bHQ6IDUwMCwgJGxpZ2h0ZXI6IDEwMCwgJGRhcmtlcjogNzAwLCAkdGV4dDogJGRlZmF1bHQpIHtcbiAgJHJlc3VsdDogbWFwX21lcmdlKCRiYXNlLXBhbGV0dGUsIChcbiAgICBkZWZhdWx0OiBtYXAtZ2V0KCRiYXNlLXBhbGV0dGUsICRkZWZhdWx0KSxcbiAgICBsaWdodGVyOiBtYXAtZ2V0KCRiYXNlLXBhbGV0dGUsICRsaWdodGVyKSxcbiAgICBkYXJrZXI6IG1hcC1nZXQoJGJhc2UtcGFsZXR0ZSwgJGRhcmtlciksXG4gICAgdGV4dDogbWFwLWdldCgkYmFzZS1wYWxldHRlLCAkdGV4dCksXG5cbiAgICBkZWZhdWx0LWNvbnRyYXN0OiBtYXQtY29udHJhc3QoJGJhc2UtcGFsZXR0ZSwgJGRlZmF1bHQpLFxuICAgIGxpZ2h0ZXItY29udHJhc3Q6IG1hdC1jb250cmFzdCgkYmFzZS1wYWxldHRlLCAkbGlnaHRlciksXG4gICAgZGFya2VyLWNvbnRyYXN0OiBtYXQtY29udHJhc3QoJGJhc2UtcGFsZXR0ZSwgJGRhcmtlcilcbiAgKSk7XG5cbiAgLy8gRm9yIGVhY2ggaHVlIGluIHRoZSBwYWxldHRlLCBhZGQgYSBcIi1jb250cmFzdFwiIGNvbG9yIHRvIHRoZSBtYXAuXG4gIEBlYWNoICRodWUsICRjb2xvciBpbiAkYmFzZS1wYWxldHRlIHtcbiAgICAkcmVzdWx0OiBtYXBfbWVyZ2UoJHJlc3VsdCwgKFxuICAgICAgJyN7JGh1ZX0tY29udHJhc3QnOiBtYXQtY29udHJhc3QoJGJhc2UtcGFsZXR0ZSwgJGh1ZSlcbiAgICApKTtcbiAgfVxuXG4gIEByZXR1cm4gJHJlc3VsdDtcbn1cblxuXG4vLyBHZXRzIGEgY29sb3IgZnJvbSBhIHRoZW1lIHBhbGV0dGUgKHRoZSBvdXRwdXQgb2YgbWF0LXBhbGV0dGUpLlxuLy8gVGhlIGh1ZSBjYW4gYmUgb25lIG9mIHRoZSBzdGFuZGFyZCB2YWx1ZXMgKDUwMCwgQTQwMCwgZXRjLiksIG9uZSBvZiB0aGUgdGhyZWUgcHJlY29uZmlndXJlZFxuLy8gaHVlcyAoZGVmYXVsdCwgbGlnaHRlciwgZGFya2VyKSwgb3IgYW55IG9mIHRoZSBhZm9yZW1lbnRpb25lZCBwcmVmaXhlZCB3aXRoIFwiLWNvbnRyYXN0XCIuXG4vL1xuLy8gQHBhcmFtICRjb2xvci1tYXAgVGhlIHRoZW1lIHBhbGV0dGUgKG91dHB1dCBvZiBtYXQtcGFsZXR0ZSkuXG4vLyBAcGFyYW0gJGh1ZSBUaGUgaHVlIGZyb20gdGhlIHBhbGV0dGUgdG8gdXNlLiBJZiB0aGlzIGlzIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLCBpdCB3aWxsXG4vLyAgICAgYmUgdHJlYXRlZCBhcyBvcGFjaXR5LlxuLy8gQHBhcmFtICRvcGFjaXR5IFRoZSBhbHBoYSBjaGFubmVsIHZhbHVlIGZvciB0aGUgY29sb3IuXG5AZnVuY3Rpb24gbWF0LWNvbG9yKCRwYWxldHRlLCAkaHVlOiBkZWZhdWx0LCAkb3BhY2l0eTogbnVsbCkge1xuICAvLyBJZiBodWVLZXkgaXMgYSBudW1iZXIgYmV0d2VlbiB6ZXJvIGFuZCBvbmUsIHRoZW4gaXQgYWN0dWFsbHkgY29udGFpbnMgYW5cbiAgLy8gb3BhY2l0eSB2YWx1ZSwgc28gcmVjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCB0aGUgZGVmYXVsdCBodWUgYW5kIHRoYXQgZ2l2ZW4gb3BhY2l0eS5cbiAgQGlmIHR5cGUtb2YoJGh1ZSkgPT0gbnVtYmVyIGFuZCAkaHVlID49IDAgYW5kICRodWUgPD0gMSB7XG4gICAgQHJldHVybiBtYXQtY29sb3IoJHBhbGV0dGUsIGRlZmF1bHQsICRodWUpO1xuICB9XG5cbiAgJGNvbG9yOiBtYXAtZ2V0KCRwYWxldHRlLCAkaHVlKTtcblxuICBAaWYgKHR5cGUtb2YoJGNvbG9yKSAhPSBjb2xvcikge1xuICAgIC8vIElmIHRoZSAkY29sb3IgcmVzb2x2ZWQgdG8gc29tZXRoaW5nIGRpZmZlcmVudCBmcm9tIGEgY29sb3IgKGUuZy4gYSBDU1MgdmFyaWFibGUpLFxuICAgIC8vIHdlIGNhbid0IGFwcGx5IHRoZSBvcGFjaXR5IGFueXdheSBzbyB3ZSByZXR1cm4gdGhlIHZhbHVlIGFzIGlzLCBvdGhlcndpc2UgU2FzcyBjYW5cbiAgICAvLyB0aHJvdyBhbiBlcnJvciBvciBvdXRwdXQgc29tZXRoaW5nIGludmFsaWQuXG4gICAgQHJldHVybiAkY29sb3I7XG4gIH1cblxuICBAcmV0dXJuIHJnYmEoJGNvbG9yLCBpZigkb3BhY2l0eSA9PSBudWxsLCBvcGFjaXR5KCRjb2xvciksICRvcGFjaXR5KSk7XG59XG5cblxuLy8gQ3JlYXRlcyBhIGNvbnRhaW5lciBvYmplY3QgZm9yIGEgbGlnaHQgdGhlbWUgdG8gYmUgZ2l2ZW4gdG8gaW5kaXZpZHVhbCBjb21wb25lbnQgdGhlbWUgbWl4aW5zLlxuQGZ1bmN0aW9uIG1hdC1saWdodC10aGVtZSgkcHJpbWFyeSwgJGFjY2VudCwgJHdhcm46IG1hdC1wYWxldHRlKCRtYXQtcmVkKSkge1xuICBAcmV0dXJuIChcbiAgICBwcmltYXJ5OiAkcHJpbWFyeSxcbiAgICBhY2NlbnQ6ICRhY2NlbnQsXG4gICAgd2FybjogJHdhcm4sXG4gICAgaXMtZGFyazogZmFsc2UsXG4gICAgZm9yZWdyb3VuZDogJG1hdC1saWdodC10aGVtZS1mb3JlZ3JvdW5kLFxuICAgIGJhY2tncm91bmQ6ICRtYXQtbGlnaHQtdGhlbWUtYmFja2dyb3VuZCxcbiAgKTtcbn1cblxuXG4vLyBDcmVhdGVzIGEgY29udGFpbmVyIG9iamVjdCBmb3IgYSBkYXJrIHRoZW1lIHRvIGJlIGdpdmVuIHRvIGluZGl2aWR1YWwgY29tcG9uZW50IHRoZW1lIG1peGlucy5cbkBmdW5jdGlvbiBtYXQtZGFyay10aGVtZSgkcHJpbWFyeSwgJGFjY2VudCwgJHdhcm46IG1hdC1wYWxldHRlKCRtYXQtcmVkKSkge1xuICBAcmV0dXJuIChcbiAgICBwcmltYXJ5OiAkcHJpbWFyeSxcbiAgICBhY2NlbnQ6ICRhY2NlbnQsXG4gICAgd2FybjogJHdhcm4sXG4gICAgaXMtZGFyazogdHJ1ZSxcbiAgICBmb3JlZ3JvdW5kOiAkbWF0LWRhcmstdGhlbWUtZm9yZWdyb3VuZCxcbiAgICBiYWNrZ3JvdW5kOiAkbWF0LWRhcmstdGhlbWUtYmFja2dyb3VuZCxcbiAgKTtcbn1cblxuXG5cbiRtYXQtcmlwcGxlLWNvbG9yLW9wYWNpdHk6IDAuMTtcblxuQG1peGluIG1hdC1yaXBwbGUoKSB7XG5cbiAgLy8gVGhlIGhvc3QgZWxlbWVudCBvZiBhbiBtYXQtcmlwcGxlIGRpcmVjdGl2ZSBzaG91bGQgYWx3YXlzIGhhdmUgYSBwb3NpdGlvbiBvZiBcImFic29sdXRlXCIgb3JcbiAgLy8gXCJyZWxhdGl2ZVwiIHNvIHRoYXQgdGhlIHJpcHBsZXMgaW5zaWRlIGFyZSBjb3JyZWN0bHkgcG9zaXRpb25lZCByZWxhdGl2ZWx5IHRvIHRoZSBjb250YWluZXIuXG4gIC5tYXQtcmlwcGxlIHtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgLy8gQnkgZGVmYXVsdCwgZXZlcnkgcmlwcGxlIGNvbnRhaW5lciBzaG91bGQgaGF2ZSBwb3NpdGlvbjogcmVsYXRpdmUgaW4gZmF2b3Igb2YgY3JlYXRpbmcgYW5cbiAgICAvLyBlYXN5IEFQSSBmb3IgZGV2ZWxvcGVycyB1c2luZyB0aGUgTWF0UmlwcGxlIGRpcmVjdGl2ZS5cbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAvLyBQcm9tb3RlIGNvbnRhaW5lcnMgdGhhdCBoYXZlIHJpcHBsZXMgdG8gYSBuZXcgbGF5ZXIuIFdlIHdhbnQgdG8gdGFyZ2V0IGA6bm90KDplbXB0eSlgLFxuICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCBhbGwgcmlwcGxlIGNvbnRhaW5lcnMgdG8gaGF2ZSB0aGVpciBvd24gbGF5ZXIgc2luY2UgdGhleSdyZSB1c2VkIGluIGFcbiAgICAvLyBsb3Qgb2YgcGxhY2VzIGFuZCB0aGUgbGF5ZXIgaXMgb25seSByZWxldmFudCB3aGlsZSBhbmltYXRpbmcuIE5vdGUgdGhhdCBpZGVhbGx5IHdlJ2QgdXNlXG4gICAgLy8gdGhlIGBjb250YWluYCBwcm9wZXJ0eSBoZXJlIChzZWUgIzEzMTc1KSwgYmVjYXVzZSBgOmVtcHR5YCBjYW4gYmUgYnJva2VuIGJ5IGhhdmluZyBleHRyYVxuICAgIC8vIHRleHQgaW5zaWRlIHRoZSBlbGVtZW50LCBidXQgaXQgaXNuJ3QgdmVyeSB3ZWxsIHN1cHBvcnRlZCB5ZXQuXG4gICAgJjpub3QoOmVtcHR5KSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWQge1xuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICB9XG5cbiAgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcblxuICAgIHRyYW5zaXRpb246IG9wYWNpdHksIHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwKTtcblxuICAgIC8vIEluIGhpZ2ggY29udHJhc3QgbW9kZSB0aGUgcmlwcGxlIGlzIG9wYXF1ZSwgY2F1c2luZyBpdCB0byBvYnN0cnVjdCB0aGUgY29udGVudC5cbiAgICBAaW5jbHVkZSBjZGstaGlnaC1jb250cmFzdChhY3RpdmUsIG9mZikge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cbn1cblxuLyogVGhlbWUgZm9yIHRoZSByaXBwbGUgZWxlbWVudHMuKi9cbkBtaXhpbiBtYXQtcmlwcGxlLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwX2dldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkZm9yZWdyb3VuZC1iYXNlOiBtYXBfZ2V0KCRmb3JlZ3JvdW5kLCBiYXNlKTtcblxuICAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAvLyBJZiB0aGUgcmlwcGxlIGNvbG9yIGlzIHJlc29sdmVzIHRvIGEgY29sb3IgKnR5cGUqLCB3ZSBjYW4gdXNlIGl0IGRpcmVjdGx5LCBvdGhlcndpc2VcbiAgICAvLyAoZS5nLiBpdCByZXNvbHZlcyB0byBhIENTUyB2YXJpYWJsZSkgd2UgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBjb2xvciBhbmQgc2V0dGluZyBhbiBvcGFjaXR5LlxuICAgIEBpZiAodHlwZS1vZigkZm9yZWdyb3VuZC1iYXNlKSA9PSBjb2xvcikge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgkZm9yZWdyb3VuZC1iYXNlLCAkbWF0LXJpcHBsZS1jb2xvci1vcGFjaXR5KTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGZvcmVncm91bmQtYmFzZTtcbiAgICAgIG9wYWNpdHk6ICRtYXQtcmlwcGxlLWNvbG9yLW9wYWNpdHk7XG4gICAgfVxuICB9XG59XG5cblxuXG4vLyBVdGlsaXR5IGZvciBmZXRjaGluZyBhIG5lc3RlZCB2YWx1ZSBmcm9tIGEgdHlwb2dyYXBoeSBjb25maWcuXG5AZnVuY3Rpb24gX21hdC1nZXQtdHlwZS12YWx1ZSgkY29uZmlnLCAkbGV2ZWwsICRuYW1lKSB7XG4gIEByZXR1cm4gbWFwLWdldChtYXAtZ2V0KCRjb25maWcsICRsZXZlbCksICRuYW1lKTtcbn1cblxuLy8gR2V0cyB0aGUgZm9udCBzaXplIGZvciBhIGxldmVsIGluc2lkZSBhIHR5cG9ncmFwaHkgY29uZmlnLlxuQGZ1bmN0aW9uIG1hdC1mb250LXNpemUoJGNvbmZpZywgJGxldmVsKSB7XG4gIEByZXR1cm4gX21hdC1nZXQtdHlwZS12YWx1ZSgkY29uZmlnLCAkbGV2ZWwsIGZvbnQtc2l6ZSk7XG59XG5cbi8vIEdldHMgdGhlIGxpbmUgaGVpZ2h0IGZvciBhIGxldmVsIGluc2lkZSBhIHR5cG9ncmFwaHkgY29uZmlnLlxuQGZ1bmN0aW9uIG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCAkbGV2ZWwpIHtcbiAgQHJldHVybiBfbWF0LWdldC10eXBlLXZhbHVlKCRjb25maWcsICRsZXZlbCwgbGluZS1oZWlnaHQpO1xufVxuXG4vLyBHZXRzIHRoZSBmb250IHdlaWdodCBmb3IgYSBsZXZlbCBpbnNpZGUgYSB0eXBvZ3JhcGh5IGNvbmZpZy5cbkBmdW5jdGlvbiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgJGxldmVsKSB7XG4gIEByZXR1cm4gX21hdC1nZXQtdHlwZS12YWx1ZSgkY29uZmlnLCAkbGV2ZWwsIGZvbnQtd2VpZ2h0KTtcbn1cblxuLy8gR2V0cyB0aGUgbGV0dGVyIHNwYWNpbmcgZm9yIGEgbGV2ZWwgaW5zaWRlIGEgdHlwb2dyYXBoeSBjb25maWcuXG5AZnVuY3Rpb24gbWF0LWxldHRlci1zcGFjaW5nKCRjb25maWcsICRsZXZlbCkge1xuICBAcmV0dXJuIF9tYXQtZ2V0LXR5cGUtdmFsdWUoJGNvbmZpZywgJGxldmVsLCBsZXR0ZXItc3BhY2luZyk7XG59XG5cbi8vIEdldHMgdGhlIGZvbnQtZmFtaWx5IGZyb20gYSB0eXBvZ3JhcGh5IGNvbmZpZyBhbmQgcmVtb3ZlcyB0aGUgcXVvdGVzIGFyb3VuZCBpdC5cbkBmdW5jdGlvbiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgJGxldmVsOiBudWxsKSB7XG4gICRmb250LWZhbWlseTogbWFwLWdldCgkY29uZmlnLCBmb250LWZhbWlseSk7XG5cbiAgQGlmICRsZXZlbCAhPSBudWxsIHtcbiAgICAkZm9udC1mYW1pbHk6IF9tYXQtZ2V0LXR5cGUtdmFsdWUoJGNvbmZpZywgJGxldmVsLCBmb250LWZhbWlseSk7XG4gIH1cblxuICAvLyBHdWFyZCBhZ2FpbnN0IHVucXVvdGluZyBub24tc3RyaW5nIHZhbHVlcywgYmVjYXVzZSBpdCdzIGRlcHJlY2F0ZWQuXG4gIEByZXR1cm4gaWYodHlwZS1vZigkZm9udC1mYW1pbHkpID09IHN0cmluZywgdW5xdW90ZSgkZm9udC1mYW1pbHkpLCAkZm9udC1mYW1pbHkpO1xufVxuXG4vLyBPdXRwdXRzIHRoZSBzaG9ydGhhbmQgYGZvbnRgIENTUyBwcm9wZXJ0eSwgYmFzZWQgb24gYSBzZXQgb2YgdHlwb2dyYXBoeSB2YWx1ZXMuIEZhbGxzIGJhY2sgdG9cbi8vIHRoZSBpbmRpdmlkdWFsIHByb3BlcnRpZXMgaWYgYSB2YWx1ZSB0aGF0IGlzbid0IGFsbG93ZWQgaW4gdGhlIHNob3J0aGFuZCBpcyBwYXNzZWQgaW4uXG5AbWl4aW4gbWF0LXR5cG9ncmFwaHktZm9udC1zaG9ydGhhbmQoJGZvbnQtc2l6ZSwgJGZvbnQtd2VpZ2h0LCAkbGluZS1oZWlnaHQsICRmb250LWZhbWlseSkge1xuICAvLyBJZiBhbnkgb2YgdGhlIHZhbHVlcyBhcmUgc2V0IHRvIGBpbmhlcml0YCwgd2UgY2FuJ3QgdXNlIHRoZSBzaG9ydGhhbmRcbiAgLy8gc28gd2UgZmFsbCBiYWNrIHRvIHBhc3NpbmcgaW4gdGhlIGluZGl2aWR1YWwgcHJvcGVydGllcy5cbiAgQGlmICgkZm9udC1zaXplID09IGluaGVyaXQgb3JcbiAgICAgICAkZm9udC13ZWlnaHQgPT0gaW5oZXJpdCBvclxuICAgICAgICRsaW5lLWhlaWdodCA9PSBpbmhlcml0IG9yXG4gICAgICAgJGZvbnQtZmFtaWx5ID09IGluaGVyaXQgb3JcbiAgICAgICAkZm9udC1zaXplID09IG51bGwgb3JcbiAgICAgICAkZm9udC13ZWlnaHQgPT0gbnVsbCBvclxuICAgICAgICRsaW5lLWhlaWdodCA9PSBudWxsIG9yXG4gICAgICAgJGZvbnQtZmFtaWx5ID09IG51bGwpIHtcblxuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZTtcbiAgICBmb250LXdlaWdodDogJGZvbnQtd2VpZ2h0O1xuICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQ7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseTtcbiAgfVxuICBAZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlIHVzZSB0aGUgc2hvcnRoYW5kIGBmb250YCwgYmVjYXVzZSBpdCdzIHRoZSBsZWFzdCBhbW91bnQgb2YgYnl0ZXMuIE5vdGVcbiAgICAvLyB0aGF0IHdlIG5lZWQgdG8gdXNlIGludGVycG9sYXRpb24gZm9yIGBmb250LXNpemUvbGluZS1oZWlnaHRgIGluIG9yZGVyIHRvIHByZXZlbnRcbiAgICAvLyBTYXNzIGZyb20gZGl2aWRpbmcgdGhlIHR3byB2YWx1ZXMuXG4gICAgZm9udDogJGZvbnQtd2VpZ2h0ICN7JGZvbnQtc2l6ZX0vI3skbGluZS1oZWlnaHR9ICRmb250LWZhbWlseTtcbiAgfVxufVxuXG4vLyBDb252ZXJ0cyBhIHR5cG9ncmFwaHkgbGV2ZWwgaW50byBDU1Mgc3R5bGVzLlxuQG1peGluIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCAkbGV2ZWwpIHtcbiAgJGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCAkbGV2ZWwpO1xuICAkZm9udC13ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCAkbGV2ZWwpO1xuICAkbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCAkbGV2ZWwpO1xuICAkZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCAkbGV2ZWwpO1xuXG4gIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWZvbnQtc2hvcnRoYW5kKCRmb250LXNpemUsICRmb250LXdlaWdodCwgJGxpbmUtaGVpZ2h0LCAkZm9udC1mYW1pbHkpO1xuICBsZXR0ZXItc3BhY2luZzogbWF0LWxldHRlci1zcGFjaW5nKCRjb25maWcsICRsZXZlbCk7XG59XG5cblxuQG1peGluIG1hdC1vcHRpb24tdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuXG4gIC5tYXQtb3B0aW9uIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAgICY6aG92ZXI6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSxcbiAgICAmOmZvY3VzOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3Zlcik7XG4gICAgfVxuXG4gICAgLy8gSW4gbXVsdGlwbGUgbW9kZSB0aGVyZSBpcyBhIGNoZWNrYm94IHRvIHNob3cgdGhhdCB0aGUgb3B0aW9uIGlzIHNlbGVjdGVkLlxuICAgICYubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSk6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyKTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY3RpdmUge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3Zlcik7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICB9XG5cbiAgICAmLm1hdC1vcHRpb24tZGlzYWJsZWQge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaGludC10ZXh0KTtcbiAgICB9XG4gIH1cblxuICAubWF0LXByaW1hcnkgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIHRleHQpO1xuICB9XG5cbiAgLm1hdC1hY2NlbnQgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgdGV4dCk7XG4gIH1cblxuICAubWF0LXdhcm4gLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtb3B0aW9uLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LW9wdGlvbiB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIHN1YmhlYWRpbmctMik7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuQG1peGluIG1hdC1vcHRncm91cC10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LW9wdGdyb3VwLWxhYmVsIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LW9wdGdyb3VwLWRpc2FibGVkIC5tYXQtb3B0Z3JvdXAtbGFiZWwge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGhpbnQtdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1vcHRncm91cC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1vcHRncm91cC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGJvZHktMik7XG4gIH1cbn1cblxuXG5cbkBtaXhpbiBtYXQtcHNldWRvLWNoZWNrYm94LXRoZW1lKCR0aGVtZSkge1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcblxuICAvLyBOT1RFKHRyYXZpc2thdWZtYW4pOiBXaGlsZSB0aGUgc3BlYyBjYWxscyBmb3IgdHJhbnNsdWNlbnQgYmxhY2tzL3doaXRlcyBmb3IgZGlzYWJsZWQgY29sb3JzLFxuICAvLyB0aGlzIGRvZXMgbm90IHdvcmsgd2VsbCB3aXRoIGVsZW1lbnRzIGxheWVyZWQgb24gdG9wIG9mIG9uZSBhbm90aGVyLiBUbyBnZXQgYXJvdW5kIHRoaXMgd2VcbiAgLy8gYmxlbmQgdGhlIGNvbG9ycyB0b2dldGhlciBiYXNlZCBvbiB0aGUgYmFzZSBjb2xvciBhbmQgdGhlIHRoZW1lIGJhY2tncm91bmQuXG4gICR3aGl0ZS0zMHBjdC1vcGFjaXR5LW9uLWRhcms6ICM2ODY4Njg7XG4gICRibGFjay0yNnBjdC1vcGFjaXR5LW9uLWxpZ2h0OiAjYjBiMGIwO1xuICAkZGlzYWJsZWQtY29sb3I6IGlmKCRpcy1kYXJrLXRoZW1lLCAkd2hpdGUtMzBwY3Qtb3BhY2l0eS1vbi1kYXJrLCAkYmxhY2stMjZwY3Qtb3BhY2l0eS1vbi1saWdodCk7XG4gICRjb2xvcmVkLWJveC1zZWxlY3RvcjogJy5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUnO1xuXG4gIC5tYXQtcHNldWRvLWNoZWNrYm94IHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKSwgc2Vjb25kYXJ5LXRleHQpO1xuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgYmFja2dyb3VuZCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQge1xuICAgIGNvbG9yOiAkZGlzYWJsZWQtY29sb3I7XG4gIH1cblxuICAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxcbiAgLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSkpO1xuICB9XG5cbiAgLy8gRGVmYXVsdCB0byB0aGUgYWNjZW50IGNvbG9yLiBOb3RlIHRoYXQgdGhlIHBzZXVkbyBjaGVja2JveGVzIGFyZSBtZWFudCB0byBpbmhlcml0IHRoZVxuICAvLyB0aGVtZSBmcm9tIHRoZWlyIHBhcmVudCwgcmF0aGVyIHRoYW4gaW1wbGVtZW50aW5nIHRoZWlyIG93biB0aGVtaW5nLCB3aGljaCBpcyB3aHkgd2VcbiAgLy8gZG9uJ3QgYXR0YWNoIHRvIHRoZSBgbWF0LSpgIGNsYXNzZXMuIEFsc28gbm90ZSB0aGF0IHRoaXMgbmVlZHMgdG8gYmUgYmVsb3cgYC5tYXQtcHJpbWFyeWBcbiAgLy8gaW4gb3JkZXIgdG8gYWxsb3cgZm9yIHRoZSBjb2xvciB0byBiZSBvdmVyd3JpdHRlbiBpZiB0aGUgY2hlY2tib3ggaXMgaW5zaWRlIGEgcGFyZW50IHRoYXRcbiAgLy8gaGFzIGBtYXQtYWNjZW50YCBhbmQgaXMgcGxhY2VkIGluc2lkZSBhbm90aGVyIHBhcmVudCB0aGF0IGhhcyBgbWF0LXByaW1hcnlgLlxuICAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLFxuICAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLFxuICAubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLFxuICAubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IobWFwLWdldCgkdGhlbWUsIGFjY2VudCkpO1xuICB9XG5cbiAgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsXG4gIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IobWFwLWdldCgkdGhlbWUsIHdhcm4pKTtcbiAgfVxuXG4gIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsXG4gIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUge1xuICAgICYubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZCB7XG4gICAgICBiYWNrZ3JvdW5kOiAkZGlzYWJsZWQtY29sb3I7XG4gICAgfVxuICB9XG59XG5cblxuXG4vLyBSZXByZXNlbnRzIGEgdHlwb2dyYXBoeSBsZXZlbCBmcm9tIHRoZSBNYXRlcmlhbCBkZXNpZ24gc3BlYy5cbkBmdW5jdGlvbiBtYXQtdHlwb2dyYXBoeS1sZXZlbChcbiAgJGZvbnQtc2l6ZSxcbiAgJGxpbmUtaGVpZ2h0OiAkZm9udC1zaXplLFxuICAkZm9udC13ZWlnaHQ6IDQwMCxcbiAgJGZvbnQtZmFtaWx5OiBudWxsLFxuICAkbGV0dGVyLXNwYWNpbmc6IG5vcm1hbCkge1xuXG4gIEByZXR1cm4gKFxuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZSxcbiAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LFxuICAgIGZvbnQtd2VpZ2h0OiAkZm9udC13ZWlnaHQsXG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseSxcbiAgICBsZXR0ZXItc3BhY2luZzogJGxldHRlci1zcGFjaW5nXG4gICk7XG59XG5cbi8vIFJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIHR5cG9ncmFwaHkgbGV2ZWxzLlxuLy8gRGVmYXVsdHMgY29tZSBmcm9tIGh0dHBzOi8vbWF0ZXJpYWwuaW8vZ3VpZGVsaW5lcy9zdHlsZS90eXBvZ3JhcGh5Lmh0bWxcbi8vIE5vdGU6IFRoZSBzcGVjIGRvZXNuJ3QgbWVudGlvbiBsZXR0ZXIgc3BhY2luZy4gVGhlIHZhbHVlcyBoZXJlIGNvbWUgZnJvbVxuLy8gZXllYmFsbGluZyBpdCB1bnRpbCBpdCBsb29rZWQgZXhhY3RseSBsaWtlIHRoZSBzcGVjIGV4YW1wbGVzLlxuQGZ1bmN0aW9uIG1hdC10eXBvZ3JhcGh5LWNvbmZpZyhcbiAgJGZvbnQtZmFtaWx5OiAgICdSb2JvdG8sIFwiSGVsdmV0aWNhIE5ldWVcIiwgc2Fucy1zZXJpZicsXG4gICRkaXNwbGF5LTQ6ICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgxMTJweCwgMTEycHgsIDMwMCwgJGxldHRlci1zcGFjaW5nOiAtMC4wNWVtKSxcbiAgJGRpc3BsYXktMzogICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDU2cHgsIDU2cHgsIDQwMCwgJGxldHRlci1zcGFjaW5nOiAtMC4wMmVtKSxcbiAgJGRpc3BsYXktMjogICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDQ1cHgsIDQ4cHgsIDQwMCwgJGxldHRlci1zcGFjaW5nOiAtMC4wMDVlbSksXG4gICRkaXNwbGF5LTE6ICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgzNHB4LCA0MHB4LCA0MDApLFxuICAkaGVhZGxpbmU6ICAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMjRweCwgMzJweCwgNDAwKSxcbiAgJHRpdGxlOiAgICAgICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDIwcHgsIDMycHgsIDUwMCksXG4gICRzdWJoZWFkaW5nLTI6ICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgxNnB4LCAyOHB4LCA0MDApLFxuICAkc3ViaGVhZGluZy0xOiAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMTVweCwgMjRweCwgNDAwKSxcbiAgJGJvZHktMjogICAgICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDE0cHgsIDI0cHgsIDUwMCksXG4gICRib2R5LTE6ICAgICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgxNHB4LCAyMHB4LCA0MDApLFxuICAkY2FwdGlvbjogICAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMTJweCwgMjBweCwgNDAwKSxcbiAgJGJ1dHRvbjogICAgICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDE0cHgsIDE0cHgsIDUwMCksXG4gIC8vIExpbmUtaGVpZ2h0IG11c3QgYmUgdW5pdC1sZXNzIGZyYWN0aW9uIG9mIHRoZSBmb250LXNpemUuXG4gICRpbnB1dDogICAgICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbChpbmhlcml0LCAxLjEyNSwgNDAwKVxuKSB7XG5cbiAgLy8gRGVjbGFyZSBhbiBpbml0aWFsIG1hcCB3aXRoIGFsbCBvZiB0aGUgbGV2ZWxzLlxuICAkY29uZmlnOiAoXG4gICAgZGlzcGxheS00OiAgICAgICRkaXNwbGF5LTQsXG4gICAgZGlzcGxheS0zOiAgICAgICRkaXNwbGF5LTMsXG4gICAgZGlzcGxheS0yOiAgICAgICRkaXNwbGF5LTIsXG4gICAgZGlzcGxheS0xOiAgICAgICRkaXNwbGF5LTEsXG4gICAgaGVhZGxpbmU6ICAgICAgICRoZWFkbGluZSxcbiAgICB0aXRsZTogICAgICAgICAgJHRpdGxlLFxuICAgIHN1YmhlYWRpbmctMjogICAkc3ViaGVhZGluZy0yLFxuICAgIHN1YmhlYWRpbmctMTogICAkc3ViaGVhZGluZy0xLFxuICAgIGJvZHktMjogICAgICAgICAkYm9keS0yLFxuICAgIGJvZHktMTogICAgICAgICAkYm9keS0xLFxuICAgIGNhcHRpb246ICAgICAgICAkY2FwdGlvbixcbiAgICBidXR0b246ICAgICAgICAgJGJ1dHRvbixcbiAgICBpbnB1dDogICAgICAgICAgJGlucHV0LFxuICApO1xuXG4gIC8vIExvb3AgdGhyb3VnaCB0aGUgbGV2ZWxzIGFuZCBzZXQgdGhlIGBmb250LWZhbWlseWAgb2YgdGhlIG9uZXMgdGhhdCBkb24ndCBoYXZlIG9uZSB0byB0aGUgYmFzZS5cbiAgLy8gTm90ZSB0aGF0IFNhc3MgY2FuJ3QgbW9kaWZ5IG1hcHMgaW4gcGxhY2UsIHdoaWNoIG1lYW5zIHRoYXQgd2UgbmVlZCB0byBtZXJnZSBhbmQgcmUtYXNzaWduLlxuICBAZWFjaCAka2V5LCAkbGV2ZWwgaW4gJGNvbmZpZyB7XG4gICAgQGlmIG1hcC1nZXQoJGxldmVsLCBmb250LWZhbWlseSkgPT0gbnVsbCB7XG4gICAgICAkbmV3LWxldmVsOiBtYXAtbWVyZ2UoJGxldmVsLCAoZm9udC1mYW1pbHk6ICRmb250LWZhbWlseSkpO1xuICAgICAgJGNvbmZpZzogbWFwLW1lcmdlKCRjb25maWcsICgka2V5OiAkbmV3LWxldmVsKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIHRoZSBiYXNlIGZvbnQgZmFtaWx5IHRvIHRoZSBjb25maWcuXG4gIEByZXR1cm4gbWFwLW1lcmdlKCRjb25maWcsIChmb250LWZhbWlseTogJGZvbnQtZmFtaWx5KSk7XG59XG5cbi8vIEFkZHMgdGhlIGJhc2UgdHlwb2dyYXBoeSBzdHlsZXMsIGJhc2VkIG9uIGEgY29uZmlnLlxuQG1peGluIG1hdC1iYXNlLXR5cG9ncmFwaHkoJGNvbmZpZywgJHNlbGVjdG9yOiAnLm1hdC10eXBvZ3JhcGh5Jykge1xuICAubWF0LWgxLCAubWF0LWhlYWRsaW5lLCAjeyRzZWxlY3Rvcn0gaDEge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBoZWFkbGluZSk7XG4gICAgbWFyZ2luOiAwIDAgMTZweDtcbiAgfVxuXG4gIC5tYXQtaDIsIC5tYXQtdGl0bGUsICN7JHNlbGVjdG9yfSBoMiB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIHRpdGxlKTtcbiAgICBtYXJnaW46IDAgMCAxNnB4O1xuICB9XG5cbiAgLm1hdC1oMywgLm1hdC1zdWJoZWFkaW5nLTIsICN7JHNlbGVjdG9yfSBoMyB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIHN1YmhlYWRpbmctMik7XG4gICAgbWFyZ2luOiAwIDAgMTZweDtcbiAgfVxuXG4gIC5tYXQtaDQsIC5tYXQtc3ViaGVhZGluZy0xLCAjeyRzZWxlY3Rvcn0gaDQge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBzdWJoZWFkaW5nLTEpO1xuICAgIG1hcmdpbjogMCAwIDE2cHg7XG4gIH1cblxuICAvLyBOb3RlOiB0aGUgc3BlYyBkb2Vzbid0IGhhdmUgYW55dGhpbmcgdGhhdCB3b3VsZCBjb3JyZXNwb25kIHRvIGg1IGFuZCBoNiwgYnV0IHdlIGFkZCB0aGVzZSBmb3JcbiAgLy8gY29uc2lzdGVuY3kuIFRoZSBmb250IHNpemVzIGNvbWUgZnJvbSB0aGUgQ2hyb21lIHVzZXIgYWdlbnQgc3R5bGVzIHdoaWNoIGhhdmUgaDUgYXQgMC44M2VtXG4gIC8vIGFuZCBoNiBhdCAwLjY3ZW0uXG4gIC5tYXQtaDUsICN7JHNlbGVjdG9yfSBoNSB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktZm9udC1zaG9ydGhhbmQoXG4gICAgICAgLy8gY2FsYyBpcyB1c2VkIGhlcmUgdG8gc3VwcG9ydCBjc3MgdmFyaWFibGVzXG4gICAgICBjYWxjKCN7bWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpfSAqIDAuODMpLFxuICAgICAgbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMSksXG4gICAgICBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgYm9keS0xKSxcbiAgICAgIG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBib2R5LTEpXG4gICAgKTtcblxuICAgIG1hcmdpbjogMCAwIDEycHg7XG4gIH1cblxuICAubWF0LWg2LCAjeyRzZWxlY3Rvcn0gaDYge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWZvbnQtc2hvcnRoYW5kKFxuICAgICAgIC8vIGNhbGMgaXMgdXNlZCBoZXJlIHRvIHN1cHBvcnQgY3NzIHZhcmlhYmxlc1xuICAgICAgY2FsYygje21hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKX0gKiAwLjY3KSxcbiAgICAgIG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTEpLFxuICAgICAgbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGJvZHktMSksXG4gICAgICBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgYm9keS0xKVxuICAgICk7XG5cbiAgICBtYXJnaW46IDAgMCAxMnB4O1xuICB9XG5cbiAgLm1hdC1ib2R5LXN0cm9uZywgLm1hdC1ib2R5LTIge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBib2R5LTIpO1xuICB9XG5cbiAgLm1hdC1ib2R5LCAubWF0LWJvZHktMSwgI3skc2VsZWN0b3J9IHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgYm9keS0xKTtcblxuICAgIHAge1xuICAgICAgbWFyZ2luOiAwIDAgMTJweDtcbiAgICB9XG4gIH1cblxuICAubWF0LXNtYWxsLCAubWF0LWNhcHRpb24ge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBjYXB0aW9uKTtcbiAgfVxuXG4gIC5tYXQtZGlzcGxheS00LCAjeyRzZWxlY3Rvcn0gLm1hdC1kaXNwbGF5LTQge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBkaXNwbGF5LTQpO1xuICAgIG1hcmdpbjogMCAwIDU2cHg7XG4gIH1cblxuICAubWF0LWRpc3BsYXktMywgI3skc2VsZWN0b3J9IC5tYXQtZGlzcGxheS0zIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgZGlzcGxheS0zKTtcbiAgICBtYXJnaW46IDAgMCA2NHB4O1xuICB9XG5cbiAgLm1hdC1kaXNwbGF5LTIsICN7JHNlbGVjdG9yfSAubWF0LWRpc3BsYXktMiB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGRpc3BsYXktMik7XG4gICAgbWFyZ2luOiAwIDAgNjRweDtcbiAgfVxuXG4gIC5tYXQtZGlzcGxheS0xLCAjeyRzZWxlY3Rvcn0gLm1hdC1kaXNwbGF5LTEge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBkaXNwbGF5LTEpO1xuICAgIG1hcmdpbjogMCAwIDY0cHg7XG4gIH1cbn1cblxuXG5cblxuQG1peGluIG1hdC1hdXRvY29tcGxldGUtdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG5cbiAgLm1hdC1hdXRvY29tcGxldGUtcGFuZWwge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDQsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAgIC8vIFNlbGVjdGVkIG9wdGlvbnMgaW4gYXV0b2NvbXBsZXRlcyBzaG91bGQgbm90IGJlIGdyYXksIGJ1dCB3ZVxuICAgIC8vIG9ubHkgd2FudCB0byBvdmVycmlkZSB0aGUgYmFja2dyb3VuZCBmb3Igc2VsZWN0ZWQgb3B0aW9ucyBpZlxuICAgIC8vIHRoZXkgYXJlICpub3QqIGluIGhvdmVyIG9yIGZvY3VzIHN0YXRlLiBUaGlzIGNoYW5nZSBoYXMgdG8gYmVcbiAgICAvLyBtYWRlIGhlcmUgYmVjYXVzZSBiYXNlIG9wdGlvbiBzdHlsZXMgYXJlIHNoYXJlZCBiZXR3ZWVuIHRoZVxuICAgIC8vIGF1dG9jb21wbGV0ZSBhbmQgdGhlIHNlbGVjdC5cbiAgICAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKSB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuXG4gICAgICAmOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCkge1xuICAgICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufVxuXG5AbWl4aW4gbWF0LWF1dG9jb21wbGV0ZS10eXBvZ3JhcGh5KCRjb25maWcpIHsgfVxuXG4vLyBUaGlzIGNvbnRhaW5zIGFsbCBvZiB0aGUgc3R5bGVzIGZvciB0aGUgYmFkZ2Vcbi8vIHJhdGhlciB0aGFuIGp1c3QgdGhlIGNvbG9yL3RoZW1lIGJlY2F1c2Ugb2Zcbi8vIG5vIHN0eWxlIHNoZWV0IHN1cHBvcnQgZm9yIGRpcmVjdGl2ZXMuXG5cblxuXG5cblxuJG1hdC1iYWRnZS1mb250LXNpemU6IDEycHg7XG4kbWF0LWJhZGdlLWZvbnQtd2VpZ2h0OiA2MDA7XG4kbWF0LWJhZGdlLWRlZmF1bHQtc2l6ZTogMjJweCAhZGVmYXVsdDtcbiRtYXQtYmFkZ2Utc21hbGwtc2l6ZTogJG1hdC1iYWRnZS1kZWZhdWx0LXNpemUgLSA2O1xuJG1hdC1iYWRnZS1sYXJnZS1zaXplOiAkbWF0LWJhZGdlLWRlZmF1bHQtc2l6ZSArIDY7XG5cbi8vIE1peGluIGZvciBidWlsZGluZyBvZmZzZXQgZ2l2ZW4gZGlmZmVyZW50IHNpemVzXG5AbWl4aW4gX21hdC1iYWRnZS1zaXplKCRzaXplKSB7XG4gIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgd2lkdGg6ICRzaXplO1xuICAgIGhlaWdodDogJHNpemU7XG4gICAgbGluZS1oZWlnaHQ6ICRzaXplO1xuICB9XG5cbiAgJi5tYXQtYmFkZ2UtYWJvdmUge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICB0b3A6IC0kc2l6ZSAvIDI7XG4gICAgfVxuICB9XG5cbiAgJi5tYXQtYmFkZ2UtYmVsb3cge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICBib3R0b206IC0kc2l6ZSAvIDI7XG4gICAgfVxuICB9XG5cbiAgJi5tYXQtYmFkZ2UtYmVmb3JlIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgbGVmdDogLSRzaXplO1xuICAgIH1cbiAgfVxuXG4gIFtkaXI9J3J0bCddICYubWF0LWJhZGdlLWJlZm9yZSB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIGxlZnQ6IGF1dG87XG4gICAgICByaWdodDogLSRzaXplO1xuICAgIH1cbiAgfVxuXG4gICYubWF0LWJhZGdlLWFmdGVyIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgcmlnaHQ6IC0kc2l6ZTtcbiAgICB9XG4gIH1cblxuICBbZGlyPSdydGwnXSAmLm1hdC1iYWRnZS1hZnRlciB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgbGVmdDogLSRzaXplO1xuICAgIH1cbiAgfVxuXG4gICYubWF0LWJhZGdlLW92ZXJsYXAge1xuICAgICYubWF0LWJhZGdlLWJlZm9yZSB7XG4gICAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgICBsZWZ0OiAtJHNpemUgLyAyO1xuICAgICAgfVxuICAgIH1cblxuICAgIFtkaXI9J3J0bCddICYubWF0LWJhZGdlLWJlZm9yZSB7XG4gICAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgICBsZWZ0OiBhdXRvO1xuICAgICAgICByaWdodDogLSRzaXplIC8gMjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLm1hdC1iYWRnZS1hZnRlciB7XG4gICAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgICByaWdodDogLSRzaXplIC8gMjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBbZGlyPSdydGwnXSAmLm1hdC1iYWRnZS1hZnRlciB7XG4gICAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgICByaWdodDogYXV0bztcbiAgICAgICAgbGVmdDogLSRzaXplIC8gMjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1iYWRnZS10aGVtZSgkdGhlbWUpIHtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJHByaW1hcnkpO1xuXG4gICAgQGluY2x1ZGUgY2RrLWhpZ2gtY29udHJhc3QoYWN0aXZlLCBvZmYpIHtcbiAgICAgIG91dGxpbmU6IHNvbGlkIDFweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1iYWRnZS1hY2NlbnQge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGFjY2VudCk7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIGRlZmF1bHQtY29udHJhc3QpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYmFkZ2Utd2FybiB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIGRlZmF1bHQtY29udHJhc3QpO1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCR3YXJuKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJhZGdlIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cblxuICAubWF0LWJhZGdlLWhpZGRlbiB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1iYWRnZS1kaXNhYmxlZCB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgICRhcHAtYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnYmFja2dyb3VuZCcpO1xuICAgICAgJGJhZGdlLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLWJ1dHRvbik7XG5cbiAgICAgIC8vIFRoZSBkaXNhYmxlZCBjb2xvciB1c3VhbGx5IGhhcyBzb21lIGtpbmQgb2Ygb3BhY2l0eSwgYnV0IGJlY2F1c2UgdGhlIGJhZGdlIGlzIG92ZXJsYXllZFxuICAgICAgLy8gb24gdG9wIG9mIHNvbWV0aGluZyBlbHNlLCBpdCB3b24ndCBsb29rIGdvb2QgaWYgaXQncyBvcGFxdWUuIElmIGl0IGlzIGEgY29sb3IgKnR5cGUqLFxuICAgICAgLy8gd2UgY29udmVydCBpdCBpbnRvIGEgc29saWQgY29sb3IgYnkgdGFraW5nIHRoZSBvcGFjaXR5IGZyb20gdGhlIHJnYmEgdmFsdWUgYW5kIHVzaW5nXG4gICAgICAvLyB0aGUgdmFsdWUgdG8gZGV0ZXJtaW5lIHRoZSBwZXJjZW50YWdlIG9mIHRoZSBiYWNrZ3JvdW5kIHRvIHB1dCBpbnRvIGZvcmVncm91bmQgd2hlblxuICAgICAgLy8gbWl4aW5nIHRoZSBjb2xvcnMgdG9nZXRoZXIuXG4gICAgICBAaWYgKHR5cGUtb2YoJGJhZGdlLWNvbG9yKSA9PSBjb2xvciBhbmQgdHlwZS1vZigkYXBwLWJhY2tncm91bmQpID09IGNvbG9yKSB7XG4gICAgICAgICRiYWRnZS1vcGFjaXR5OiBvcGFjaXR5KCRiYWRnZS1jb2xvcik7XG4gICAgICAgIGJhY2tncm91bmQ6IG1peCgkYXBwLWJhY2tncm91bmQsIHJnYmEoJGJhZGdlLWNvbG9yLCAxKSwgKDEgLSAkYmFkZ2Utb3BhY2l0eSkgKiAxMDAlKTtcbiAgICAgIH1cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGJhZGdlLWNvbG9yO1xuICAgICAgfVxuXG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjAwbXMgZWFzZS1pbi1vdXQ7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjYpO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgfVxuXG4gIC5uZy1hbmltYXRlLWRpc2FibGVkIC5tYXQtYmFkZ2UtY29udGVudCxcbiAgLm1hdC1iYWRnZS1jb250ZW50Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIHtcbiAgICB0cmFuc2l0aW9uOiBub25lO1xuICB9XG5cbiAgLy8gVGhlIGFjdGl2ZSBjbGFzcyBpcyBhZGRlZCBhZnRlciB0aGUgZWxlbWVudCBpcyBhZGRlZFxuICAvLyBzbyBpdCBjYW4gYW5pbWF0ZSBzY2FsZSB0byBkZWZhdWx0XG4gIC5tYXQtYmFkZ2UtY29udGVudC5tYXQtYmFkZ2UtYWN0aXZlIHtcbiAgICAvLyBTY2FsZSB0byBgbm9uZWAgaW5zdGVhZCBvZiBgMWAgdG8gYXZvaWQgYmx1cnJ5IHRleHQgaW4gc29tZSBicm93c2Vycy5cbiAgICB0cmFuc2Zvcm06IG5vbmU7XG4gIH1cblxuICAubWF0LWJhZGdlLXNtYWxsIHtcbiAgICBAaW5jbHVkZSBfbWF0LWJhZGdlLXNpemUoJG1hdC1iYWRnZS1zbWFsbC1zaXplKTtcbiAgfVxuICAubWF0LWJhZGdlLW1lZGl1bSB7XG4gICAgQGluY2x1ZGUgX21hdC1iYWRnZS1zaXplKCRtYXQtYmFkZ2UtZGVmYXVsdC1zaXplKTtcbiAgfVxuICAubWF0LWJhZGdlLWxhcmdlIHtcbiAgICBAaW5jbHVkZSBfbWF0LWJhZGdlLXNpemUoJG1hdC1iYWRnZS1sYXJnZS1zaXplKTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWJhZGdlLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgIGZvbnQtd2VpZ2h0OiAkbWF0LWJhZGdlLWZvbnQtd2VpZ2h0O1xuICAgIGZvbnQtc2l6ZTogJG1hdC1iYWRnZS1mb250LXNpemU7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtYmFkZ2Utc21hbGwgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAvLyBTZXQgdGhlIGZvbnQgc2l6ZSB0byA3NSUgb2YgdGhlIG9yaWdpbmFsLlxuICAgIGZvbnQtc2l6ZTogJG1hdC1iYWRnZS1mb250LXNpemUgKiAwLjc1O1xuICB9XG5cbiAgLm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgIGZvbnQtc2l6ZTogJG1hdC1iYWRnZS1mb250LXNpemUgKiAyO1xuICB9XG59XG5cblxuXG5cblxuQG1peGluIG1hdC1ib3R0b20tc2hlZXQtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigxNiwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGRpYWxvZyk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1ib3R0b20tc2hlZXQtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lciB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGJvZHktMSk7XG4gIH1cbn1cblxuXG5cblxuXG4kX21hdC1idXR0b24tcmlwcGxlLW9wYWNpdHk6IDAuMTtcblxuLy8gQXBwbGllcyBhIGZvY3VzIHN0eWxlIHRvIGFuIG1hdC1idXR0b24gZWxlbWVudCBmb3IgZWFjaCBvZiB0aGUgc3VwcG9ydGVkIHBhbGV0dGVzLlxuQG1peGluIF9tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXktY29sb3IoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuXG4gICYubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5KTtcbiAgfVxuXG4gICYubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCk7XG4gIH1cblxuICAmLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkd2Fybik7XG4gIH1cblxuICAmW2Rpc2FibGVkXSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxufVxuXG4vLyBBcHBsaWVzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGZvciBhIHJpcHBsZS4gSWYgdGhlIHZhbHVlIHByb3ZpZGVkIGlzIG5vdCBhIFNhc3MgY29sb3IsXG4vLyB3ZSBhc3N1bWUgdGhhdCB3ZSd2ZSBiZWVuIGdpdmVuIGEgQ1NTIHZhcmlhYmxlLiBTaW5jZSB3ZSBjYW4ndCBwZXJmb3JtIGFscGhhLWJsZW5kaW5nXG4vLyBvbiBhIENTUyB2YXJpYWJsZSwgd2UgaW5zdGVhZCBhZGQgdGhlIG9wYWNpdHkgZGlyZWN0bHkgdG8gdGhlIHJpcHBsZSBlbGVtZW50LlxuQG1peGluIF9tYXQtYnV0dG9uLXJpcHBsZS1iYWNrZ3JvdW5kKCRwYWxldHRlLCAkaHVlLCAkb3BhY2l0eSkge1xuICAkYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCAkaHVlLCAkb3BhY2l0eSk7XG4gIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWNvbG9yO1xuICBAaWYgKHR5cGUtb2YoJGJhY2tncm91bmQtY29sb3IpICE9IGNvbG9yKSB7XG4gICAgb3BhY2l0eTogJG9wYWNpdHk7XG4gIH1cbn1cblxuQG1peGluIF9tYXQtYnV0dG9uLXJpcHBsZS1jb2xvcigkdGhlbWUsICRodWUsICRvcGFjaXR5OiAkX21hdC1idXR0b24tcmlwcGxlLW9wYWNpdHkpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG5cbiAgJi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi1yaXBwbGUtYmFja2dyb3VuZCgkcHJpbWFyeSwgJGh1ZSwgJG9wYWNpdHkpO1xuICB9XG5cbiAgJi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLXJpcHBsZS1iYWNrZ3JvdW5kKCRhY2NlbnQsICRodWUsICRvcGFjaXR5KTtcbiAgfVxuXG4gICYubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tcmlwcGxlLWJhY2tncm91bmQoJHdhcm4sICRodWUsICRvcGFjaXR5KTtcbiAgfVxufVxuXG4vLyBBcHBsaWVzIGEgcHJvcGVydHkgdG8gYW4gbWF0LWJ1dHRvbiBlbGVtZW50IGZvciBlYWNoIG9mIHRoZSBzdXBwb3J0ZWQgcGFsZXR0ZXMuXG5AbWl4aW4gX21hdC1idXR0b24tdGhlbWUtcHJvcGVydHkoJHRoZW1lLCAkcHJvcGVydHksICRodWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgJi5tYXQtcHJpbWFyeSB7XG4gICAgI3skcHJvcGVydHl9OiBtYXQtY29sb3IoJHByaW1hcnksICRodWUpO1xuICB9XG4gICYubWF0LWFjY2VudCB7XG4gICAgI3skcHJvcGVydHl9OiBtYXQtY29sb3IoJGFjY2VudCwgJGh1ZSk7XG4gIH1cbiAgJi5tYXQtd2FybiB7XG4gICAgI3skcHJvcGVydHl9OiBtYXQtY29sb3IoJHdhcm4sICRodWUpO1xuICB9XG5cbiAgJi5tYXQtcHJpbWFyeSwgJi5tYXQtYWNjZW50LCAmLm1hdC13YXJuLCAmW2Rpc2FibGVkXSB7XG4gICAgJltkaXNhYmxlZF0ge1xuICAgICAgJHBhbGV0dGU6IGlmKCRwcm9wZXJ0eSA9PSAnY29sb3InLCAkZm9yZWdyb3VuZCwgJGJhY2tncm91bmQpO1xuICAgICAgI3skcHJvcGVydHl9OiBtYXQtY29sb3IoJHBhbGV0dGUsIGRpc2FibGVkLWJ1dHRvbik7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtYnV0dG9uLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWJ1dHRvbiwgLm1hdC1pY29uLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbiB7XG4gICAgLy8gQnV0dG9ucyB3aXRob3V0IGEgYmFja2dyb3VuZCBjb2xvciBzaG91bGQgaW5oZXJpdCB0aGUgZm9udCBjb2xvci4gVGhpcyBpcyBuZWNlc3NhcnkgdG9cbiAgICAvLyBlbnN1cmUgdGhhdCB0aGUgYnV0dG9uIGlzIHJlYWRhYmxlIG9uIGN1c3RvbSBiYWNrZ3JvdW5kIGNvbG9ycy4gSXQncyB3cm9uZyB0byBhbHdheXMgYXNzdW1lXG4gICAgLy8gdGhhdCB0aG9zZSBidXR0b25zIGFyZSBhbHdheXMgcGxhY2VkIGluc2lkZSBvZiBjb250YWluZXJzIHdpdGggdGhlIGRlZmF1bHQgYmFja2dyb3VuZFxuICAgIC8vIGNvbG9yIG9mIHRoZSB0aGVtZSAoZS5nLiB0aGVtZWQgdG9vbGJhcnMpLlxuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tdGhlbWUtcHJvcGVydHkoJHRoZW1lLCAnY29sb3InLCB0ZXh0KTtcbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LWNvbG9yKCR0aGVtZSk7XG5cbiAgICAvLyBTZXR1cCB0aGUgcmlwcGxlIGNvbG9yIHRvIGJlIGJhc2VkIG9uIHRoZSB0ZXh0IGNvbG9yLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgcmlwcGxlc1xuICAgIC8vIGFyZSBtYXRjaGluZyB3aXRoIHRoZSBjdXJyZW50IHRoZW1lIHBhbGV0dGUgYW5kIGFyZSBpbiBjb250cmFzdCB0byB0aGUgYmFja2dyb3VuZCBjb2xvclxuICAgIC8vIChlLmcgaW4gdGhlbWVkIHRvb2xiYXJzKS5cbiAgICAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAgIG9wYWNpdHk6ICRfbWF0LWJ1dHRvbi1yaXBwbGUtb3BhY2l0eTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGN1cnJlbnRDb2xvcjtcbiAgICB9XG4gIH1cblxuICAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5IHtcbiAgICBiYWNrZ3JvdW5kOiBtYXBfZ2V0KCRmb3JlZ3JvdW5kLCBiYXNlKTtcbiAgfVxuXG4gIC8vIE5vdGU6IHRoaXMgbmVlZHMgYSBiaXQgZXh0cmEgc3BlY2lmaWNpdHksIGJlY2F1c2Ugd2UncmUgbm90IGd1YXJhbnRlZWQgdGhlIGluY2x1c2lvblxuICAvLyBvcmRlciBvZiB0aGUgdGhlbWUgc3R5bGVzIGFuZCB0aGUgYnV0dG9uIHJlc2V0IG1heSBlbmQgdXAgcmVzZXR0aW5nIHRoaXMgYXMgd2VsbC5cbiAgLm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoW2Rpc2FibGVkXSkge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxuXG4gIC5tYXQtZmxhdC1idXR0b24sIC5tYXQtcmFpc2VkLWJ1dHRvbiwgLm1hdC1mYWIsIC5tYXQtbWluaS1mYWIge1xuICAgIC8vIERlZmF1bHQgZm9udCBhbmQgYmFja2dyb3VuZCBjb2xvciB3aGVuIG5vdCB1c2luZyBhbnkgY29sb3IgcGFsZXR0ZS5cbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIHJhaXNlZC1idXR0b24pO1xuXG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tdGhlbWUtcHJvcGVydHkoJHRoZW1lLCAnY29sb3InLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi10aGVtZS1wcm9wZXJ0eSgkdGhlbWUsICdiYWNrZ3JvdW5kLWNvbG9yJywgZGVmYXVsdCk7XG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tcmlwcGxlLWNvbG9yKCR0aGVtZSwgZGVmYXVsdC1jb250cmFzdCk7XG4gIH1cblxuICAubWF0LXN0cm9rZWQtYnV0dG9uLCAubWF0LWZsYXQtYnV0dG9uIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigwLCAkdGhlbWUpO1xuICB9XG5cbiAgLm1hdC1yYWlzZWQtYnV0dG9uIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigyLCAkdGhlbWUpO1xuXG4gICAgJjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDgsICR0aGVtZSk7XG4gICAgfVxuXG4gICAgJltkaXNhYmxlZF0ge1xuICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMCwgJHRoZW1lKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWZhYiwgLm1hdC1taW5pLWZhYiB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oNiwgJHRoZW1lKTtcblxuICAgICY6bm90KFtkaXNhYmxlZF0pOmFjdGl2ZSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigxMiwgJHRoZW1lKTtcbiAgICB9XG5cbiAgICAmW2Rpc2FibGVkXSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigwLCAkdGhlbWUpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWJ1dHRvbi10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1idXR0b24sIC5tYXQtcmFpc2VkLWJ1dHRvbiwgLm1hdC1pY29uLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbixcbiAgLm1hdC1mbGF0LWJ1dHRvbiwgLm1hdC1mYWIsIC5tYXQtbWluaS1mYWIge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGJ1dHRvbik7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJ1dHRvbik7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBidXR0b24pO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuQG1peGluIG1hdC1idXR0b24tdG9nZ2xlLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZGl2aWRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcblxuICAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSxcbiAgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigyLCAkdGhlbWUpO1xuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCxcbiAgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQge1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGhpbnQtdGV4dCk7XG5cbiAgICAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGZvY3VzZWQtYnV0dG9uKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcblxuICAgIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZm9jdXNlZC1idXR0b24sIDEpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSArIC5tYXQtYnV0dG9uLXRvZ2dsZSB7XG4gICAgYm9yZGVyLWxlZnQ6IHNvbGlkIDFweCAkZGl2aWRlci1jb2xvcjtcbiAgfVxuXG4gIFtkaXI9J3J0bCddIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSArIC5tYXQtYnV0dG9uLXRvZ2dsZSB7XG4gICAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gICAgYm9yZGVyLXJpZ2h0OiBzb2xpZCAxcHggJGRpdmlkZXItY29sb3I7XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbCB7XG4gICAgLm1hdC1idXR0b24tdG9nZ2xlICsgLm1hdC1idXR0b24tdG9nZ2xlIHtcbiAgICAgIGJvcmRlci1sZWZ0OiBub25lO1xuICAgICAgYm9yZGVyLXJpZ2h0OiBub25lO1xuICAgICAgYm9yZGVyLXRvcDogc29saWQgMXB4ICRkaXZpZGVyLWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIHNlbGVjdGVkLWJ1dHRvbik7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuXG4gICAgJi5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtYnV0dG9uKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGRpc2FibGVkLWJ1dHRvbi10b2dnbGUpO1xuXG4gICAgJi5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gICAgfVxuXG4gICAgJi5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgc2VsZWN0ZWQtZGlzYWJsZWQtYnV0dG9uKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLFxuICAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCB7XG4gICAgYm9yZGVyOiBzb2xpZCAxcHggJGRpdmlkZXItY29sb3I7XG4gIH1cbn1cblxuQG1peGluIG1hdC1idXR0b24tdG9nZ2xlLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWJ1dHRvbi10b2dnbGUge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cbn1cblxuXG5cblxuXG5cblxuQG1peGluIG1hdC1jYXJkLXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtY2FyZCB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMSwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gICAgLy8gTmVlZHMgZXh0cmEgc3BlY2lmaWNpdHkgdG8gYmUgYWJsZSB0byBvdmVycmlkZSB0aGUgZWxldmF0aW9uIHNlbGVjdG9ycy5cbiAgICAmLm1hdC1jYXJkLWZsYXQge1xuICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMCwgJHRoZW1lKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWNhcmQtc3VidGl0bGUge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWNhcmQtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtY2FyZCB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtY2FyZC10aXRsZSB7XG4gICAgZm9udDoge1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBoZWFkbGluZSk7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCB0aXRsZSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1jYXJkLWhlYWRlciAubWF0LWNhcmQtdGl0bGUge1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCB0aXRsZSk7XG4gIH1cblxuICAubWF0LWNhcmQtc3VidGl0bGUsXG4gIC5tYXQtY2FyZC1jb250ZW50IHtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKTtcbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtY2hlY2tib3gtdGhlbWUoJHRoZW1lKSB7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG5cbiAgLy8gVGhlIGNvbG9yIG9mIHRoZSBjaGVja2JveCdzIGNoZWNrbWFyayAvIG1peGVkbWFyay5cbiAgJGNoZWNrYm94LW1hcmstY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgYmFja2dyb3VuZCk7XG5cbiAgLy8gTk9URSh0cmF2aXNrYXVmbWFuKTogV2hpbGUgdGhlIHNwZWMgY2FsbHMgZm9yIHRyYW5zbHVjZW50IGJsYWNrcy93aGl0ZXMgZm9yIGRpc2FibGVkIGNvbG9ycyxcbiAgLy8gdGhpcyBkb2VzIG5vdCB3b3JrIHdlbGwgd2l0aCBlbGVtZW50cyBsYXllcmVkIG9uIHRvcCBvZiBvbmUgYW5vdGhlci4gVG8gZ2V0IGFyb3VuZCB0aGlzIHdlXG4gIC8vIGJsZW5kIHRoZSBjb2xvcnMgdG9nZXRoZXIgYmFzZWQgb24gdGhlIGJhc2UgY29sb3IgYW5kIHRoZSB0aGVtZSBiYWNrZ3JvdW5kLlxuICAkd2hpdGUtMzBwY3Qtb3BhY2l0eS1vbi1kYXJrOiAjNjg2ODY4O1xuICAkYmxhY2stMjZwY3Qtb3BhY2l0eS1vbi1saWdodDogI2IwYjBiMDtcbiAgJGRpc2FibGVkLWNvbG9yOiBpZigkaXMtZGFyay10aGVtZSwgJHdoaXRlLTMwcGN0LW9wYWNpdHktb24tZGFyaywgJGJsYWNrLTI2cGN0LW9wYWNpdHktb24tbGlnaHQpO1xuXG4gIC5tYXQtY2hlY2tib3gtZnJhbWUge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LWNoZWNrYm94LWNoZWNrbWFyayB7XG4gICAgZmlsbDogJGNoZWNrYm94LW1hcmstY29sb3I7XG4gIH1cblxuICAubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoIHtcbiAgICAvLyAhaW1wb3J0YW50IGlzIG5lZWRlZCBoZXJlIGJlY2F1c2UgYSBzdHJva2UgbXVzdCBiZSBzZXQgYXMgYW5cbiAgICAvLyBhdHRyaWJ1dGUgb24gdGhlIFNWRyBpbiBvcmRlciBmb3IgbGluZSBhbmltYXRpb24gdG8gd29yayBwcm9wZXJseS5cbiAgICBzdHJva2U6ICRjaGVja2JveC1tYXJrLWNvbG9yICFpbXBvcnRhbnQ7XG4gIH1cblxuICAubWF0LWNoZWNrYm94LW1peGVkbWFyayB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNoZWNrYm94LW1hcmstY29sb3I7XG4gIH1cblxuICAubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUsIC5tYXQtY2hlY2tib3gtY2hlY2tlZCB7XG4gICAgJi5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5KTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYWNjZW50KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHdhcm4pO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtY2hlY2tib3gtZGlzYWJsZWQge1xuICAgICYubWF0LWNoZWNrYm94LWNoZWNrZWQsXG4gICAgJi5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSB7XG4gICAgICAubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZGlzYWJsZWQtY29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjpub3QoLm1hdC1jaGVja2JveC1jaGVja2VkKSB7XG4gICAgICAubWF0LWNoZWNrYm94LWZyYW1lIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkZGlzYWJsZWQtY29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLm1hdC1jaGVja2JveC1sYWJlbCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU3dpdGNoIHRoaXMgdG8gYSBzb2xpZCBjb2xvciBzaW5jZSB3ZSdyZSB1c2luZyBgb3BhY2l0eWBcbiAgLy8gdG8gY29udHJvbCBob3cgb3BhcXVlIHRoZSByaXBwbGUgc2hvdWxkIGJlLlxuICAubWF0LWNoZWNrYm94IC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hcF9nZXQobWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpLCBiYXNlKTtcbiAgfVxuXG4gIC5tYXQtY2hlY2tib3gtY2hlY2tlZDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCksXG4gIC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKSB7XG4gICAgJi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRhY2NlbnQpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJHdhcm4pO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWNoZWNrYm94LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWNoZWNrYm94IHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLy8gVE9ETyhrYXJhKTogUmVtb3ZlIHRoaXMgc3R5bGUgd2hlbiBmaXhpbmcgdmVydGljYWwgYmFzZWxpbmVcbiAgLm1hdC1jaGVja2JveC1sYXlvdXQgLm1hdC1jaGVja2JveC1sYWJlbCB7XG4gICAgbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBib2R5LTIpO1xuICB9XG59XG5cblxuXG5cblxuXG4kbWF0LWNoaXAtcmVtb3ZlLWZvbnQtc2l6ZTogMThweDtcblxuQG1peGluIG1hdC1jaGlwcy1jb2xvcigkZm9yZWdyb3VuZCwgJGJhY2tncm91bmQpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQ7XG4gIGNvbG9yOiAkZm9yZWdyb3VuZDtcblxuICAubWF0LWNoaXAtcmVtb3ZlIHtcbiAgICBjb2xvcjogJGZvcmVncm91bmQ7XG4gICAgb3BhY2l0eTogMC40O1xuICB9XG59XG5cblxuLy8gQXBwbGllcyB0aGUgYmFja2dyb3VuZCBjb2xvciBmb3IgYSByaXBwbGUgZWxlbWVudC5cbi8vIElmIHRoZSBjb2xvciB2YWx1ZSBwcm92aWRlZCBpcyBub3QgYSBTYXNzIGNvbG9yLFxuLy8gd2UgYXNzdW1lIHRoYXQgd2UndmUgYmVlbiBnaXZlbiBhIENTUyB2YXJpYWJsZS5cbi8vIFNpbmNlIHdlIGNhbid0IHBlcmZvcm0gYWxwaGEtYmxlbmRpbmcgb24gYSBDU1MgdmFyaWFibGUsXG4vLyB3ZSBpbnN0ZWFkIGFkZCB0aGUgb3BhY2l0eSBkaXJlY3RseSB0byB0aGUgcmlwcGxlIGVsZW1lbnQuXG5AbWl4aW4gX21hdC1jaGlwcy1yaXBwbGUtYmFja2dyb3VuZCgkcGFsZXR0ZSwgJGRlZmF1bHQtY29udHJhc3QsICRvcGFjaXR5KSB7XG4gICRiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsICRkZWZhdWx0LWNvbnRyYXN0LCAkb3BhY2l0eSk7XG4gIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWNvbG9yO1xuICBAaWYgKHR5cGUtb2YoJGJhY2tncm91bmQtY29sb3IpICE9IGNvbG9yKSB7XG4gICAgb3BhY2l0eTogJG9wYWNpdHk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1jaGlwcy10aGVtZS1jb2xvcigkcGFsZXR0ZSkge1xuICBAaW5jbHVkZSBtYXQtY2hpcHMtY29sb3IobWF0LWNvbG9yKCRwYWxldHRlLCBkZWZhdWx0LWNvbnRyYXN0KSwgbWF0LWNvbG9yKCRwYWxldHRlKSk7XG5cbiAgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICBAaW5jbHVkZSBfbWF0LWNoaXBzLXJpcHBsZS1iYWNrZ3JvdW5kKCRwYWxldHRlLCBkZWZhdWx0LWNvbnRyYXN0LCAwLjEpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtY2hpcHMtdGhlbWUoJHRoZW1lKSB7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gICR1bnNlbGVjdGVkLWJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgdW5zZWxlY3RlZC1jaGlwKTtcbiAgJHVuc2VsZWN0ZWQtZm9yZWdyb3VuZDogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAge1xuICAgIEBpbmNsdWRlIG1hdC1jaGlwcy1jb2xvcigkdW5zZWxlY3RlZC1mb3JlZ3JvdW5kLCAkdW5zZWxlY3RlZC1iYWNrZ3JvdW5kKTtcblxuICAgICY6bm90KC5tYXQtY2hpcC1kaXNhYmxlZCkge1xuICAgICAgJjphY3RpdmUge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigzLCAkdGhlbWUpO1xuICAgICAgfVxuXG4gICAgICAubWF0LWNoaXAtcmVtb3ZlOmhvdmVyIHtcbiAgICAgICAgb3BhY2l0eTogMC41NDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLm1hdC1jaGlwLWRpc2FibGVkIHtcbiAgICAgIG9wYWNpdHk6IDAuNDtcbiAgICB9XG5cbiAgICAmOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXBfZ2V0KCRmb3JlZ3JvdW5kLCBiYXNlKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQge1xuICAgICYubWF0LXByaW1hcnkge1xuICAgICAgQGluY2x1ZGUgbWF0LWNoaXBzLXRoZW1lLWNvbG9yKCRwcmltYXJ5KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIEBpbmNsdWRlIG1hdC1jaGlwcy10aGVtZS1jb2xvcigkd2Fybik7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IHtcbiAgICAgIEBpbmNsdWRlIG1hdC1jaGlwcy10aGVtZS1jb2xvcigkYWNjZW50KTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1jaGlwcy10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1jaGlwIHtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0yKTtcbiAgICBmb250LXdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMik7XG5cbiAgICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbixcbiAgICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uIHtcbiAgICAgIGZvbnQtc2l6ZTogJG1hdC1jaGlwLXJlbW92ZS1mb250LXNpemU7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuQG1peGluIG1hdC10YWJsZS10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LXRhYmxlIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdjYXJkJyk7XG4gIH1cblxuICAubWF0LXRhYmxlIHRoZWFkLCAubWF0LXRhYmxlIHRib2R5LCAubWF0LXRhYmxlIHRmb290LFxuICBtYXQtaGVhZGVyLXJvdywgbWF0LXJvdywgbWF0LWZvb3Rlci1yb3csXG4gIFttYXQtaGVhZGVyLXJvd10sIFttYXQtcm93XSwgW21hdC1mb290ZXItcm93XSxcbiAgLm1hdC10YWJsZS1zdGlja3kge1xuICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7XG4gIH1cblxuICBtYXQtcm93LCBtYXQtaGVhZGVyLXJvdywgbWF0LWZvb3Rlci1yb3csXG4gIHRoLm1hdC1oZWFkZXItY2VsbCwgdGQubWF0LWNlbGwsIHRkLm1hdC1mb290ZXItY2VsbCB7XG4gICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxuXG4gIC5tYXQtaGVhZGVyLWNlbGwge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtY2VsbCwgLm1hdC1mb290ZXItY2VsbCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC10YWJsZS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC10YWJsZSB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtaGVhZGVyLWNlbGwge1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKTtcbiAgICBmb250LXdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMik7XG4gIH1cblxuICAubWF0LWNlbGwsIC5tYXQtZm9vdGVyLWNlbGwge1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpO1xuICB9XG59XG5cblxuXG5cblxuXG5cbiRtYXQtZGF0ZXBpY2tlci1zZWxlY3RlZC10b2RheS1ib3gtc2hhZG93LXdpZHRoOiAxcHg7XG4kbWF0LWRhdGVwaWNrZXItc2VsZWN0ZWQtZmFkZS1hbW91bnQ6IDAuNjtcbiRtYXQtZGF0ZXBpY2tlci10b2RheS1mYWRlLWFtb3VudDogMC4yO1xuJG1hdC1jYWxlbmRhci1ib2R5LWZvbnQtc2l6ZTogMTNweCAhZGVmYXVsdDtcbiRtYXQtY2FsZW5kYXItd2Vla2RheS10YWJsZS1mb250LXNpemU6IDExcHggIWRlZmF1bHQ7XG5cbkBtaXhpbiBfbWF0LWRhdGVwaWNrZXItY29sb3IoJHBhbGV0dGUpIHtcbiAgLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsIGRlZmF1bHQtY29udHJhc3QpO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkID4gLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkIHtcbiAgICAkYmFja2dyb3VuZDogbWF0LWNvbG9yKCRwYWxldHRlKTtcblxuICAgIEBpZiAodHlwZS1vZigkYmFja2dyb3VuZCkgPT0gY29sb3IpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGZhZGUtb3V0KCRiYWNrZ3JvdW5kLCAkbWF0LWRhdGVwaWNrZXItc2VsZWN0ZWQtZmFkZS1hbW91bnQpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICAvLyBJZiB3ZSBjb3VsZG4ndCByZXNvbHZlIHRvIGJhY2tncm91bmQgdG8gYSBjb2xvciAoZS5nLiBpdCdzIGEgQ1NTIHZhcmlhYmxlKSxcbiAgICAgIC8vIGZhbGwgYmFjayB0byBmYWRpbmcgdGhlIGNvbnRlbnQgb3V0IHZpYSBgb3BhY2l0eWAuXG4gICAgICBvcGFjaXR5OiAkbWF0LWRhdGVwaWNrZXItdG9kYXktZmFkZS1hbW91bnQ7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkIHtcbiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAkbWF0LWRhdGVwaWNrZXItc2VsZWN0ZWQtdG9kYXktYm94LXNoYWRvdy13aWR0aFxuICAgICAgICAgICAgICAgIG1hdC1jb2xvcigkcGFsZXR0ZSwgZGVmYXVsdC1jb250cmFzdCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1kYXRlcGlja2VyLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuXG4gIC5tYXQtY2FsZW5kYXItYXJyb3cge1xuICAgIGJvcmRlci10b3AtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaWNvbik7XG4gIH1cblxuICAvLyBUaGUgcHJldi9uZXh0IGJ1dHRvbnMgbmVlZCBhIGJpdCBtb3JlIHNwZWNpZmljaXR5IHRvXG4gIC8vIGF2b2lkIGJlaW5nIG92ZXJ3cml0dGVuIGJ5IHRoZSAubWF0LWljb24tYnV0dG9uLlxuICAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLFxuICAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLW5leHQtYnV0dG9uLFxuICAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLXByZXZpb3VzLWJ1dHRvbiB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaWNvbik7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlciB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaGludC10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyLWRpdmlkZXI6OmFmdGVyIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50IHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkID4gLm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3ZlcixcbiAgLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmUsXG4gIC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmUge1xuICAgICYgPiAubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKSB7XG4gICAgLy8gTm90ZTogdGhvdWdoIGl0J3Mgbm90IHRleHQsIHRoZSBib3JkZXIgaXMgYSBoaW50IGFib3V0IHRoZSBmYWN0IHRoYXQgdGhpcyBpcyB0b2RheSdzIGRhdGUsXG4gICAgLy8gc28gd2UgdXNlIHRoZSBoaW50IGNvbG9yLlxuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBoaW50LXRleHQpO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkID4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpIHtcbiAgICAkY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaGludC10ZXh0KTtcblxuICAgIEBpZiAodHlwZS1vZigkY29sb3IpID09IGNvbG9yKSB7XG4gICAgICBib3JkZXItY29sb3I6IGZhZGUtb3V0KCRjb2xvciwgJG1hdC1kYXRlcGlja2VyLXRvZGF5LWZhZGUtYW1vdW50KTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgLy8gSWYgdGhlIGNvbG9yIGRpZG4ndCByZXNvbHZlIHRvIGEgY29sb3IgdmFsdWUsIGJ1dCBzb21ldGhpbmcgbGlrZSBhIENTUyB2YXJpYWJsZSwgd2UgY2FuJ3RcbiAgICAgIC8vIGZhZGUgaXQgb3V0IHNvIHdlIGZhbGwgYmFjayB0byByZWR1Y2luZyB0aGUgZWxlbWVudCBvcGFjaXR5LiBOb3RlIHRoYXQgd2UgZG9uJ3QgdXNlIHRoZVxuICAgICAgLy8gJG1hdC1kYXRlcGlja2VyLXRvZGF5LWZhZGUtYW1vdW50LCBiZWNhdXNlIGhpbnQgdGV4dCB1c3VhbGx5IGhhcyBzb21lIG9wYWNpdHkgYXBwbGllZFxuICAgICAgLy8gdG8gaXQgYWxyZWFkeSBhbmQgd2UgZG9uJ3Qgd2FudCB0aGVtIHRvIHN0YWNrIG9uIHRvcCBvZiBlYWNoIG90aGVyLlxuICAgICAgb3BhY2l0eTogMC41O1xuICAgIH1cbiAgfVxuXG4gIEBpbmNsdWRlIF9tYXQtZGF0ZXBpY2tlci1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSkpO1xuXG4gIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbig0LCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgQGluY2x1ZGUgX21hdC1kYXRlcGlja2VyLWNvbG9yKG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpKTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtZGF0ZXBpY2tlci1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgd2FybikpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50LXRvdWNoIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigwLCAkdGhlbWUpO1xuICB9XG5cbiAgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUge1xuICAgIGNvbG9yOiBtYXQtY29sb3IobWFwLWdldCgkdGhlbWUsIHByaW1hcnkpLCB0ZXh0KTtcblxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpLCB0ZXh0KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IobWFwLWdldCgkdGhlbWUsIHdhcm4pLCB0ZXh0KTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1kYXRlcGlja2VyLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWNhbGVuZGFyIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5IHtcbiAgICBmb250LXNpemU6ICRtYXQtY2FsZW5kYXItYm9keS1mb250LXNpemU7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktbGFiZWwsXG4gIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbiB7XG4gICAgZm9udDoge1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBidXR0b24pO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYnV0dG9uKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlciB0aCB7XG4gICAgZm9udDoge1xuICAgICAgc2l6ZTogJG1hdC1jYWxlbmRhci13ZWVrZGF5LXRhYmxlLWZvbnQtc2l6ZTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMSk7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtZGlhbG9nLXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oMjQsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBkaWFsb2cpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtZGlhbG9nLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWRpYWxvZy10aXRsZSB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIHRpdGxlKTtcbiAgfVxufVxuXG5cblxuXG5cblxuQG1peGluIG1hdC1leHBhbnNpb24tcGFuZWwtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1leHBhbnNpb24tcGFuZWwge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDIsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtYWN0aW9uLXJvdyB7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxuXG4gIC5tYXQtZXhwYW5zaW9uLXBhbmVsIHtcbiAgICAmIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZCxcbiAgICAmIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkLFxuICAgICY6bm90KC5tYXQtZXhwYW5kZWQpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3ZlciB7XG4gICAgICAmOm5vdChbYXJpYS1kaXNhYmxlZD0ndHJ1ZSddKSB7XG4gICAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIERpc2FibGUgdGhlIGhvdmVyIG9uIHRvdWNoIGRldmljZXMgc2luY2UgaXQgY2FuIGFwcGVhciBsaWtlIGl0IGlzIHN0dWNrLiBXZSBjYW4ndCB1c2VcbiAgLy8gYEBtZWRpYSAoaG92ZXIpYCBhYm92ZSwgYmVjYXVzZSB0aGUgZGVza3RvcCBzdXBwb3J0IGJyb3dzZXIgc3VwcG9ydCBpc24ndCBncmVhdC5cbiAgQG1lZGlhIChob3Zlcjogbm9uZSkge1xuICAgIC5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKTpub3QoW2FyaWEtZGlzYWJsZWQ9J3RydWUnXSlcbiAgICAgIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cblxuICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sXG4gIC5tYXQtZXhwYW5zaW9uLWluZGljYXRvcjo6YWZ0ZXIge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPSd0cnVlJ10ge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLWJ1dHRvbik7XG5cbiAgICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUsXG4gICAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIHtcbiAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWV4cGFuc2lvbi1wYW5lbC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBzdWJoZWFkaW5nLTEpO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBzdWJoZWFkaW5nLTEpO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgc3ViaGVhZGluZy0xKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgYm9keS0xKTtcbiAgfVxufVxuXG5cblxuXG4vLyBUaGlzIG1peGluIHdpbGwgZW5zdXJlIHRoYXQgbGluZXMgdGhhdCBvdmVyZmxvdyB0aGUgY29udGFpbmVyIHdpbGwgaGlkZSB0aGUgb3ZlcmZsb3cgYW5kXG4vLyB0cnVuY2F0ZSBuZWF0bHkgd2l0aCBhbiBlbGxpcHNpcy5cbkBtaXhpbiBtYXQtdHJ1bmNhdGUtbGluZSgpIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbi8vIE1peGluIHRvIHByb3ZpZGUgYWxsIG1hdC1saW5lIHN0eWxlcywgY2hhbmdpbmcgc2Vjb25kYXJ5IGZvbnQgc2l6ZSBiYXNlZCBvbiB3aGV0aGVyIHRoZSBsaXN0XG4vLyBpcyBpbiBkZW5zZSBtb2RlLlxuQG1peGluIG1hdC1saW5lLWJhc2UoJHNlY29uZGFyeS1mb250LXNpemUpIHtcbiAgLm1hdC1saW5lIHtcbiAgICBAaW5jbHVkZSBtYXQtdHJ1bmNhdGUtbGluZSgpO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cbiAgICAvLyBhbGwgbGluZXMgYnV0IHRoZSB0b3AgbGluZSBzaG91bGQgaGF2ZSBzbWFsbGVyIHRleHRcbiAgICAmOm50aC1jaGlsZChuKzIpIHtcbiAgICAgIGZvbnQtc2l6ZTogJHNlY29uZGFyeS1mb250LXNpemU7XG4gICAgfVxuICB9XG59XG5cbi8vIFRoaXMgbWl4aW4gbm9ybWFsaXplcyBkZWZhdWx0IGVsZW1lbnQgc3R5bGVzLCBlLmcuIGZvbnQgd2VpZ2h0IGZvciBoZWFkaW5nIHRleHQuXG5AbWl4aW4gbWF0LW5vcm1hbGl6ZS10ZXh0KCkge1xuICAmID4gKiB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gIH1cbn1cblxuLy8gVGhpcyBtaXhpbiBwcm92aWRlcyBiYXNlIHN0eWxlcyBmb3IgdGhlIHdyYXBwZXIgYXJvdW5kIG1hdC1saW5lIGVsZW1lbnRzIGluIGEgbGlzdC5cbkBtaXhpbiBtYXQtbGluZS13cmFwcGVyLWJhc2UoKSB7XG4gIEBpbmNsdWRlIG1hdC1ub3JtYWxpemUtdGV4dCgpO1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHdpZHRoOiAxMDAlO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIC8vIE11c3QgcmVtb3ZlIHdyYXBwZXIgd2hlbiBsaW5lcyBhcmUgZW1wdHkgb3IgaXQgdGFrZXMgdXAgaG9yaXpvbnRhbFxuICAvLyBzcGFjZSBhbmQgcHVzaGVzIG90aGVyIGVsZW1lbnRzIHRvIHRoZSByaWdodC5cbiAgJjplbXB0eSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG5cblxuLy8gSW5jbHVkZSB0aGlzIGVtcHR5IG1peGluIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBvdGhlciBjb21wb25lbnRzLlxuQG1peGluIG1hdC1ncmlkLWxpc3QtdGhlbWUoJHRoZW1lKSB7IH1cblxuQG1peGluIG1hdC1ncmlkLWxpc3QtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtZ3JpZC10aWxlLWhlYWRlcixcbiAgLm1hdC1ncmlkLXRpbGUtZm9vdGVyIHtcbiAgICBAaW5jbHVkZSBtYXQtbGluZS1iYXNlKG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbikpO1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpO1xuICB9XG59XG5cblxuXG5cbi8vIEluY2x1ZGUgdGhpcyBlbXB0eSBtaXhpbiBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgb3RoZXIgY29tcG9uZW50cy5cbkBtaXhpbiBtYXQtaWNvbi10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1pY29uIHtcbiAgICAmLm1hdC1wcmltYXJ5IHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIHRleHQpO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIHRleHQpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtaWNvbi10eXBvZ3JhcGh5KCRjb25maWcpIHsgfVxuXG5cblxuXG5cbi8vIFJlbmRlcnMgYSBncmFkaWVudCBmb3Igc2hvd2luZyB0aGUgZGFzaGVkIGxpbmUgd2hlbiB0aGUgaW5wdXQgaXMgZGlzYWJsZWQuXG4vLyBVbmxpa2UgdXNpbmcgYSBib3JkZXIsIGEgZ3JhZGllbnQgYWxsb3dzIHVzIHRvIGFkanVzdCB0aGUgc3BhY2luZyBvZiB0aGUgZG90dGVkIGxpbmVcbi8vIHRvIG1hdGNoIHRoZSBNYXRlcmlhbCBEZXNpZ24gc3BlYy5cbkBtaXhpbiBtYXQtY29udHJvbC1kaXNhYmxlZC11bmRlcmxpbmUoJGNvbG9yKSB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgJGNvbG9yIDAlLCAkY29sb3IgMzMlLCB0cmFuc3BhcmVudCAwJSk7XG4gIGJhY2tncm91bmQtc2l6ZTogNHB4IDEwMCU7XG4gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcbn1cblxuLy8gRmlndXJlcyBvdXQgdGhlIGNvbG9yIG9mIHRoZSBwbGFjZWhvbGRlciBmb3IgYSBmb3JtIGNvbnRyb2wuXG4vLyBVc2VkIHByaW1hcmlseSB0byBwcmV2ZW50IHRoZSB2YXJpb3VzIGZvcm0gY29udHJvbHMgZnJvbVxuLy8gYmVjb21pbmcgb3V0IG9mIHN5bmMgc2luY2UgdGhlc2UgY29sb3JzIGFyZW4ndCBpbiBhIHBhbGV0dGUuXG5AZnVuY3Rpb24gX21hdC1jb250cm9sLXBsYWNlaG9sZGVyLWNvbG9yKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuICBAcmV0dXJuIG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjUsIDAuNDIpKTtcbn1cblxuXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXRlcmlhbC9uby1wcmVmaXhlcyAqL1xuQG1peGluIHVzZXItc2VsZWN0KCR2YWx1ZSkge1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiAkdmFsdWU7XG4gIC1tb3otdXNlci1zZWxlY3Q6ICR2YWx1ZTtcbiAgLW1zLXVzZXItc2VsZWN0OiAkdmFsdWU7XG4gIHVzZXItc2VsZWN0OiAkdmFsdWU7XG59XG5cbkBtaXhpbiBpbnB1dC1wbGFjZWhvbGRlciB7XG4gICY6OnBsYWNlaG9sZGVyIHtcbiAgICBAY29udGVudDtcbiAgfVxuXG4gICY6Oi1tb3otcGxhY2Vob2xkZXIge1xuICAgIEBjb250ZW50O1xuICB9XG5cbiAgJjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cblxuICAmOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cbn1cblxuQG1peGluIGN1cnNvci1ncmFiIHtcbiAgY3Vyc29yOiAtd2Via2l0LWdyYWI7XG4gIGN1cnNvcjogZ3JhYjtcbn1cblxuQG1peGluIGN1cnNvci1ncmFiYmluZyB7XG4gIGN1cnNvcjogLXdlYmtpdC1ncmFiYmluZztcbiAgY3Vyc29yOiBncmFiYmluZztcbn1cblxuQG1peGluIGJhY2tmYWNlLXZpc2liaWxpdHkoJHZhbHVlKSB7XG4gIC13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTogJHZhbHVlO1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiAkdmFsdWU7XG59XG4vKiBzdHlsZWxpbnQtZW5hYmxlICovXG5cblxuXG5AbWl4aW4gbWF0LWlucHV0LXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVyIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LWlucHV0LWVsZW1lbnQ6ZGlzYWJsZWQsXG4gIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXIge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICB9XG5cbiAgLm1hdC1pbnB1dC1lbGVtZW50IHtcbiAgICBjYXJldC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCB0ZXh0KTtcblxuICAgIEBpbmNsdWRlIGlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICAgIGNvbG9yOiBfbWF0LWNvbnRyb2wtcGxhY2Vob2xkZXItY29sb3IoJHRoZW1lKTtcbiAgICB9XG5cbiAgICAvLyBPbiBkYXJrIHRoZW1lcyB3ZSBzZXQgdGhlIG5hdGl2ZSBgc2VsZWN0YCBjb2xvciB0byBzb21lIHNoYWRlIG9mIHdoaXRlLFxuICAgIC8vIGhvd2V2ZXIgdGhlIGNvbG9yIHByb3BhZ2F0ZXMgdG8gYWxsIG9mIHRoZSBgb3B0aW9uYCBlbGVtZW50cywgd2hpY2ggYXJlXG4gICAgLy8gYWx3YXlzIG9uIGEgd2hpdGUgYmFja2dyb3VuZCBpbnNpZGUgdGhlIGRyb3Bkb3duLCBjYXVzaW5nIHRoZW0gdG8gYmxlbmQgaW4uXG4gICAgLy8gU2luY2Ugd2UgY2FuJ3QgY2hhbmdlIGJhY2tncm91bmQgb2YgdGhlIGRyb3Bkb3duLCB3ZSBuZWVkIHRvIGV4cGxpY2l0bHlcbiAgICAvLyByZXNldCB0aGUgY29sb3Igb2YgdGhlIG9wdGlvbnMgdG8gc29tZXRoaW5nIGRhcmsuXG4gICAgQGlmIChtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyaykpIHtcbiAgICAgIG9wdGlvbiB7XG4gICAgICAgIGNvbG9yOiAkZGFyay1wcmltYXJ5LXRleHQ7XG4gICAgICB9XG5cbiAgICAgIG9wdGlvbjpkaXNhYmxlZCB7XG4gICAgICAgIGNvbG9yOiAkZGFyay1kaXNhYmxlZC10ZXh0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5tYXQtYWNjZW50IC5tYXQtaW5wdXQtZWxlbWVudCB7XG4gICAgY2FyZXQtY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtd2FybiAubWF0LWlucHV0LWVsZW1lbnQsXG4gIC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudCB7XG4gICAgY2FyZXQtY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXIge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtaW5wdXQtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC8vIFRoZSB1bml0LWxlc3MgbGluZS1oZWlnaHQgZnJvbSB0aGUgZm9udCBjb25maWcuXG4gICRsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGlucHV0KTtcblxuICAvLyBUaGUgYW1vdW50IG9mIHNwYWNlIGJldHdlZW4gdGhlIHRvcCBvZiB0aGUgbGluZSBhbmQgdGhlIHRvcCBvZiB0aGUgYWN0dWFsIHRleHRcbiAgLy8gKGFzIGEgZnJhY3Rpb24gb2YgdGhlIGZvbnQtc2l6ZSkuXG4gICRsaW5lLXNwYWNpbmc6ICgkbGluZS1oZWlnaHQgLSAxKSAvIDI7XG5cbiAgLy8gPGlucHV0PiBlbGVtZW50cyBzZWVtIHRvIGhhdmUgdGhlaXIgaGVpZ2h0IHNldCBzbGlnaHRseSB0b28gbGFyZ2Ugb24gU2FmYXJpIGNhdXNpbmcgdGhlIHRleHQgdG9cbiAgLy8gYmUgbWlzYWxpZ25lZCB3LnIudC4gdGhlIHBsYWNlaG9sZGVyLiBBZGRpbmcgdGhpcyBtYXJnaW4gY29ycmVjdHMgaXQuXG4gIGlucHV0Lm1hdC1pbnB1dC1lbGVtZW50IHtcbiAgICBtYXJnaW4tdG9wOiAtJGxpbmUtc3BhY2luZyAqIDFlbTtcbiAgfVxufVxuXG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LWxpc3QtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1saXN0LWJhc2Uge1xuICAgIC5tYXQtbGlzdC1pdGVtIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIH1cblxuICAgIC5tYXQtbGlzdC1vcHRpb24ge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgfVxuXG4gICAgLm1hdC1zdWJoZWFkZXIge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtbGlzdC1pdGVtLWRpc2FibGVkIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGRpc2FibGVkLWxpc3Qtb3B0aW9uKTtcbiAgfVxuXG4gIC5tYXQtbGlzdC1vcHRpb24sXG4gIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0sXG4gIC5tYXQtYWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ge1xuICAgICY6aG92ZXIsICY6Zm9jdXMge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnaG92ZXInKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbiB7XG4gICAgJiwgJjpob3ZlciwgJjpmb2N1cyB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyLCAwLjEyKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1saXN0LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAkZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcblxuICAubWF0LWxpc3QtaXRlbSB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseTtcbiAgfVxuXG4gIC5tYXQtbGlzdC1vcHRpb24ge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHk7XG4gIH1cblxuICAvLyBEZWZhdWx0IGxpc3RcbiAgLm1hdC1saXN0LWJhc2Uge1xuICAgIC5tYXQtbGlzdC1pdGVtIHtcbiAgICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBzdWJoZWFkaW5nLTIpO1xuICAgICAgQGluY2x1ZGUgbWF0LWxpbmUtYmFzZShtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSkpO1xuICAgIH1cblxuICAgIC5tYXQtbGlzdC1vcHRpb24ge1xuICAgICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIHN1YmhlYWRpbmctMik7XG4gICAgICBAaW5jbHVkZSBtYXQtbGluZS1iYXNlKG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKSk7XG4gICAgfVxuXG4gICAgLm1hdC1zdWJoZWFkZXIge1xuICAgICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBib2R5LTIpO1xuICAgICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMik7XG4gICAgICBmb250LXdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMik7XG4gICAgfVxuICB9XG5cbiAgLy8gRGVuc2UgbGlzdFxuICAubWF0LWxpc3QtYmFzZVtkZW5zZV0ge1xuICAgIC5tYXQtbGlzdC1pdGVtIHtcbiAgICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKTtcbiAgICAgIEBpbmNsdWRlIG1hdC1saW5lLWJhc2UobWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKSk7XG4gICAgfVxuXG4gICAgLm1hdC1saXN0LW9wdGlvbiB7XG4gICAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbik7XG4gICAgICBAaW5jbHVkZSBtYXQtbGluZS1iYXNlKG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbikpO1xuICAgIH1cblxuICAgIC5tYXQtc3ViaGVhZGVyIHtcbiAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHk7XG4gICAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbik7XG4gICAgICBmb250LXdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMik7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtbWVudS10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LW1lbnUtcGFuZWwge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDQsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnY2FyZCcpO1xuICB9XG5cbiAgLm1hdC1tZW51LWl0ZW0ge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsICd0ZXh0Jyk7XG5cbiAgICAmW2Rpc2FibGVkXSB7XG4gICAgICAmLCAmOjphZnRlciB7XG4gICAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsICdkaXNhYmxlZCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbi1uby1jb2xvcixcbiAgLm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2VyOjphZnRlciB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgJ2ljb24nKTtcbiAgfVxuXG4gIC5tYXQtbWVudS1pdGVtOmhvdmVyLFxuICAubWF0LW1lbnUtaXRlbS5jZGstcHJvZ3JhbS1mb2N1c2VkLFxuICAubWF0LW1lbnUtaXRlbS5jZGsta2V5Ym9hcmQtZm9jdXNlZCxcbiAgLm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWQge1xuICAgICY6bm90KFtkaXNhYmxlZF0pIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2hvdmVyJyk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtbWVudS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1tZW51LWl0ZW0ge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGJvZHktMSk7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSk7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTEpO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuQG1peGluIG1hdC1wYWdpbmF0b3ItdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG5cbiAgLm1hdC1wYWdpbmF0b3Ige1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2NhcmQnKTtcbiAgfVxuXG4gIC5tYXQtcGFnaW5hdG9yLFxuICAubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlciB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LFxuICAubWF0LXBhZ2luYXRvci1pbmNyZW1lbnQge1xuICAgIGJvcmRlci10b3A6IDJweCBzb2xpZCBtYXQtY29sb3IoJGZvcmVncm91bmQsICdpY29uJyk7XG4gICAgYm9yZGVyLXJpZ2h0OiAycHggc29saWQgbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCAnaWNvbicpO1xuICB9XG5cbiAgLm1hdC1wYWdpbmF0b3ItZmlyc3QsXG4gIC5tYXQtcGFnaW5hdG9yLWxhc3Qge1xuICAgIGJvcmRlci10b3A6IDJweCBzb2xpZCBtYXQtY29sb3IoJGZvcmVncm91bmQsICdpY29uJyk7XG4gIH1cblxuICAubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSB7XG4gICAgLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LFxuICAgIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudCxcbiAgICAubWF0LXBhZ2luYXRvci1maXJzdCxcbiAgICAubWF0LXBhZ2luYXRvci1sYXN0IHtcbiAgICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCAnZGlzYWJsZWQnKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1wYWdpbmF0b3ItdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtcGFnaW5hdG9yLFxuICAubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlciB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgY2FwdGlvbik7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtcHJvZ3Jlc3MtYmFyLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcblxuICAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5kIHtcbiAgICBmaWxsOiBtYXQtY29sb3IoJHByaW1hcnksIGxpZ2h0ZXIpO1xuICB9XG5cbiAgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIGxpZ2h0ZXIpO1xuICB9XG5cbiAgLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG4gIH1cblxuICAubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IHtcbiAgICAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5kIHtcbiAgICAgIGZpbGw6IG1hdC1jb2xvcigkYWNjZW50LCBsaWdodGVyKTtcbiAgICB9XG5cbiAgICAubWF0LXByb2dyZXNzLWJhci1idWZmZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIGxpZ2h0ZXIpO1xuICAgIH1cblxuICAgIC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYWNjZW50KTtcbiAgICB9XG4gIH1cblxuICAubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiB7XG4gICAgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZCB7XG4gICAgICBmaWxsOiBtYXQtY29sb3IoJHdhcm4sIGxpZ2h0ZXIpO1xuICAgIH1cblxuICAgIC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIGxpZ2h0ZXIpO1xuICAgIH1cblxuICAgIC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkd2Fybik7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtcHJvZ3Jlc3MtYmFyLXR5cG9ncmFwaHkoJGNvbmZpZykgeyB9XG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LXByb2dyZXNzLXNwaW5uZXItdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuXG4gIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciwgLm1hdC1zcGlubmVyIHtcbiAgICBjaXJjbGUge1xuICAgICAgc3Ryb2tlOiBtYXQtY29sb3IoJHByaW1hcnkpO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCBjaXJjbGUge1xuICAgICAgc3Ryb2tlOiBtYXQtY29sb3IoJGFjY2VudCk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiBjaXJjbGUge1xuICAgICAgc3Ryb2tlOiBtYXQtY29sb3IoJHdhcm4pO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXByb2dyZXNzLXNwaW5uZXItdHlwb2dyYXBoeSgkY29uZmlnKSB7IH1cblxuXG5cblxuXG5AbWl4aW4gX21hdC1yYWRpby1jb2xvcigkcGFsZXR0ZSkge1xuICAmLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xlIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSk7XG4gIH1cblxuICAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSxcbiAgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksXG4gICYubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSxcbiAgJjphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlKTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXJhZGlvLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtcmFkaW8tYnV0dG9uIHtcbiAgICAmLm1hdC1wcmltYXJ5IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtcmFkaW8tY29sb3IoJHByaW1hcnkpO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXJhZGlvLWNvbG9yKCRhY2NlbnQpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgQGluY2x1ZGUgX21hdC1yYWRpby1jb2xvcigkd2Fybik7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBuZWVkcyBleHRyYSBzcGVjaWZpY2l0eSwgYmVjYXVzZSB0aGUgY2xhc3NlcyBhYm92ZSBhcmUgY29tYmluZWRcbiAgICAvLyAoZS5nLiBgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudGApIHdoaWNoIGluY3JlYXNlcyB0aGVpciBzcGVjaWZpY2l0eSBhIGxvdC5cbiAgICAvLyBUT0RPOiBjb25zaWRlciBtYWtpbmcgdGhlIHNlbGVjdG9ycyBpbnRvIGRlc2NlbmRhbnRzIChgLm1hdC1wcmltYXJ5IC5tYXQtcmFkaW8tYnV0dG9uYCkuXG4gICAgJi5tYXQtcmFkaW8tZGlzYWJsZWQge1xuICAgICAgJi5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSxcbiAgICAgIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xlIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkKTtcbiAgICAgIH1cblxuICAgICAgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudCxcbiAgICAgIC5tYXQtcmFkaW8taW5uZXItY2lyY2xlIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZCk7XG4gICAgICB9XG5cbiAgICAgIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudCB7XG4gICAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTd2l0Y2ggdGhpcyB0byBhIHNvbGlkIGNvbG9yIHNpbmNlIHdlJ3JlIHVzaW5nIGBvcGFjaXR5YFxuICAgIC8vIHRvIGNvbnRyb2wgaG93IG9wYXF1ZSB0aGUgcmlwcGxlIHNob3VsZCBiZS5cbiAgICAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hcF9nZXQoJGZvcmVncm91bmQsIGJhc2UpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXJhZGlvLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXJhZGlvLWJ1dHRvbiB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxufVxuXG5cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtc2VsZWN0LXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcblxuICAubWF0LXNlbGVjdC12YWx1ZSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cblxuICAubWF0LXNlbGVjdC1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6IF9tYXQtY29udHJvbC1wbGFjZWhvbGRlci1jb2xvcigkdGhlbWUpO1xuICB9XG5cbiAgLm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtdmFsdWUge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICB9XG5cbiAgLm1hdC1zZWxlY3QtYXJyb3cge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtc2VsZWN0LXBhbmVsIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDQsICR0aGVtZSk7XG5cbiAgICAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKSB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyLCAwLjEyKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQge1xuICAgICYubWF0LWZvY3VzZWQge1xuICAgICAgJi5tYXQtcHJpbWFyeSAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIHRleHQpO1xuICAgICAgfVxuXG4gICAgICAmLm1hdC1hY2NlbnQgLm1hdC1zZWxlY3QtYXJyb3cge1xuICAgICAgICBjb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIHRleHQpO1xuICAgICAgfVxuXG4gICAgICAmLm1hdC13YXJuIC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICAgICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1pbnZhbGlkIC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHdhcm4sIHRleHQpO1xuICAgIH1cblxuICAgIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtYXJyb3cge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtc2VsZWN0LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAvLyBUaGUgdW5pdC1sZXNzIGxpbmUtaGVpZ2h0IGZyb20gdGhlIGZvbnQgY29uZmlnLlxuICAkbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBpbnB1dCk7XG5cbiAgLm1hdC1zZWxlY3Qge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LXNlbGVjdC10cmlnZ2VyIHtcbiAgICBoZWlnaHQ6ICRsaW5lLWhlaWdodCAqIDFlbTtcbiAgfVxufVxuXG5cblxuXG5cblxuQG1peGluIG1hdC1zaWRlbmF2LXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAkZHJhd2VyLWJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZGlhbG9nKTtcbiAgJGRyYXdlci1jb250YWluZXItYmFja2dyb3VuZC1jb2xvcjogIG1hdC1jb2xvcigkYmFja2dyb3VuZCwgYmFja2dyb3VuZCk7XG4gICRkcmF3ZXItcHVzaC1iYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGRpYWxvZyk7XG4gICRkcmF3ZXItc2lkZS1ib3JkZXI6IHNvbGlkIDFweCBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuXG4gIC5tYXQtZHJhd2VyLWNvbnRhaW5lciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGRyYXdlci1jb250YWluZXItYmFja2dyb3VuZC1jb2xvcjtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtZHJhd2VyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZHJhd2VyLWJhY2tncm91bmQtY29sb3I7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgICAmLm1hdC1kcmF3ZXItcHVzaCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZHJhd2VyLXB1c2gtYmFja2dyb3VuZC1jb2xvcjtcbiAgICB9XG5cbiAgICAmOm5vdCgubWF0LWRyYXdlci1zaWRlKSB7XG4gICAgICAvLyBUaGUgZWxldmF0aW9uIG9mIHotMTYgaXMgbm90ZWQgaW4gdGhlIGRlc2lnbiBzcGVjaWZpY2F0aW9ucy5cbiAgICAgIC8vIFNlZSBodHRwczovL21hdGVyaWFsLmlvL2Rlc2lnbi9jb21wb25lbnRzL25hdmlnYXRpb24tZHJhd2VyLmh0bWxcbiAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDE2LCAkdGhlbWUpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZHJhd2VyLXNpZGUge1xuICAgIGJvcmRlci1yaWdodDogJGRyYXdlci1zaWRlLWJvcmRlcjtcblxuICAgICYubWF0LWRyYXdlci1lbmQge1xuICAgICAgYm9yZGVyLWxlZnQ6ICRkcmF3ZXItc2lkZS1ib3JkZXI7XG4gICAgICBib3JkZXItcmlnaHQ6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgW2Rpcj0ncnRsJ10gLm1hdC1kcmF3ZXItc2lkZSB7XG4gICAgYm9yZGVyLWxlZnQ6ICRkcmF3ZXItc2lkZS1ib3JkZXI7XG4gICAgYm9yZGVyLXJpZ2h0OiBub25lO1xuXG4gICAgJi5tYXQtZHJhd2VyLWVuZCB7XG4gICAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICAgIGJvcmRlci1yaWdodDogJGRyYXdlci1zaWRlLWJvcmRlcjtcbiAgICB9XG4gIH1cblxuICAubWF0LWRyYXdlci1iYWNrZHJvcC5tYXQtZHJhd2VyLXNob3duIHtcbiAgICAkb3BhY2l0eTogMC42O1xuICAgICRiYWNrZHJvcC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkLCAkb3BhY2l0eSk7XG5cbiAgICBAaWYgKHR5cGUtb2YoJGJhY2tkcm9wLWNvbG9yKSA9PSBjb2xvcikge1xuICAgICAgLy8gV2UgdXNlIGludmVydCgpIGhlcmUgdG8gaGF2ZSB0aGUgZGFya2VuIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGV4cGVjdGVkIHRvIGJlIHVzZWQuIElmIHRoZVxuICAgICAgLy8gYmFja2dyb3VuZCBpcyBsaWdodCwgd2UgdXNlIGEgZGFyayBiYWNrZHJvcC4gSWYgdGhlIGJhY2tncm91bmQgaXMgZGFyayxcbiAgICAgIC8vIHdlIHVzZSBhIGxpZ2h0IGJhY2tkcm9wLlxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW52ZXJ0KCRiYWNrZHJvcC1jb2xvcik7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIC8vIElmIHdlIGNvdWxkbid0IHJlc29sdmUgdGhlIGJhY2tkcm9wIGNvbG9yIHRvIGEgY29sb3IgdmFsdWUsIGZhbGwgYmFjayB0byB1c2luZ1xuICAgICAgLy8gYG9wYWNpdHlgIHRvIG1ha2UgaXQgb3BhcXVlIHNpbmNlIGl0cyBlbmQgdmFsdWUgY291bGQgYmUgYSBzb2xpZCBjb2xvci5cbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZHJvcC1jb2xvcjtcbiAgICAgIG9wYWNpdHk6ICRvcGFjaXR5O1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNpZGVuYXYtdHlwb2dyYXBoeSgkY29uZmlnKSB7IH1cblxuXG5cblxuXG5cbkBtaXhpbiBfbWF0LXNsaWRlLXRvZ2dsZS1jaGVja2VkKCRwYWxldHRlLCAkdGh1bWItY2hlY2tlZC1odWUpIHtcbiAgJi5tYXQtY2hlY2tlZCB7XG4gICAgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCAkdGh1bWItY2hlY2tlZC1odWUpO1xuICAgIH1cblxuICAgIC5tYXQtc2xpZGUtdG9nZ2xlLWJhciB7XG4gICAgICAvLyBPcGFjaXR5IGlzIGRldGVybWluZWQgZnJvbSB0aGUgc3BlY3MgZm9yIHRoZSBzZWxlY3Rpb24gY29udHJvbHMuXG4gICAgICAvLyBTZWU6IGh0dHBzOi8vbWF0ZXJpYWwuaW8vZGVzaWduL2NvbXBvbmVudHMvc2VsZWN0aW9uLWNvbnRyb2xzLmh0bWwjc3BlY3NcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgJHRodW1iLWNoZWNrZWQtaHVlLCAwLjU0KTtcbiAgICB9XG5cbiAgICAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAgIC8vIFNldCBubyBvcGFjaXR5IGZvciB0aGUgcmlwcGxlcyBiZWNhdXNlIHRoZSByaXBwbGUgb3BhY2l0eSB3aWxsIGJlIGFkanVzdGVkIGR5bmFtaWNhbGx5XG4gICAgICAvLyBiYXNlZCBvbiB0aGUgdHlwZSBvZiBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzbGlkZS10b2dnbGUgKGUuZy4gZm9yIGhvdmVyLCBmb2N1cylcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgJHRodW1iLWNoZWNrZWQtaHVlKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1zbGlkZS10b2dnbGUtdGhlbWUoJHRoZW1lKSB7XG4gICRpcy1kYXJrOiBtYXBfZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC8vIENvbG9yIGh1ZXMgYXJlIGJhc2VkIG9uIHRoZSBzcGVjcyB3aGljaCBicmllZmx5IHNob3cgdGhlIGh1ZXMgdGhhdCBhcmUgYXBwbGllZCB0byBhIHN3aXRjaC5cbiAgLy8gVGhlIDIwMTggc3BlY3Mgbm8gbG9uZ2VyIGRlc2NyaWJlIGhvdyBkYXJrIHN3aXRjaGVzIHNob3VsZCBsb29rIGxpa2UuIER1ZSB0byB0aGUgbGFjayBvZlxuICAvLyBpbmZvcm1hdGlvbiBmb3IgZGFyayB0aGVtZWQgc3dpdGNoZXMsIHdlIHBhcnRpYWxseSBrZWVwIHRoZSBvbGQgYmVoYXZpb3IgdGhhdCBpcyBiYXNlZCBvblxuICAvLyB0aGUgcHJldmlvdXMgc3BlY2lmaWNhdGlvbnMuIEZvciB0aGUgY2hlY2tlZCBjb2xvciB3ZSBhbHdheXMgdXNlIHRoZSBgZGVmYXVsdGAgaHVlIGJlY2F1c2VcbiAgLy8gdGhhdCBmb2xsb3dzIE1EQyBhbmQgYWxzbyBtYWtlcyBpdCBlYXNpZXIgZm9yIHBlb3BsZSB0byBjcmVhdGUgYSBjdXN0b20gdGhlbWUgd2l0aG91dCBuZWVkaW5nXG4gIC8vIHRvIHNwZWNpZnkgZWFjaCBodWUgaW5kaXZpZHVhbGx5LlxuICAkdGh1bWItdW5jaGVja2VkLWh1ZTogaWYoJGlzLWRhcmssIDQwMCwgNTApO1xuICAkdGh1bWItY2hlY2tlZC1odWU6IGRlZmF1bHQ7XG5cbiAgJGJhci11bmNoZWNrZWQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQpO1xuICAkcmlwcGxlLXVuY2hlY2tlZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBiYXNlKTtcblxuICAubWF0LXNsaWRlLXRvZ2dsZSB7XG4gICAgQGluY2x1ZGUgX21hdC1zbGlkZS10b2dnbGUtY2hlY2tlZCgkYWNjZW50LCAkdGh1bWItY2hlY2tlZC1odWUpO1xuXG4gICAgJi5tYXQtcHJpbWFyeSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXNsaWRlLXRvZ2dsZS1jaGVja2VkKCRwcmltYXJ5LCAkdGh1bWItY2hlY2tlZC1odWUpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgQGluY2x1ZGUgX21hdC1zbGlkZS10b2dnbGUtY2hlY2tlZCgkd2FybiwgJHRodW1iLWNoZWNrZWQtaHVlKTtcbiAgICB9XG5cbiAgICAmOm5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgICAgLy8gU2V0IG5vIG9wYWNpdHkgZm9yIHRoZSByaXBwbGVzIGJlY2F1c2UgdGhlIHJpcHBsZSBvcGFjaXR5IHdpbGwgYmUgYWRqdXN0ZWQgZHluYW1pY2FsbHlcbiAgICAgIC8vIGJhc2VkIG9uIHRoZSB0eXBlIG9mIGludGVyYWN0aW9uIHdpdGggdGhlIHNsaWRlLXRvZ2dsZSAoZS5nLiBmb3IgaG92ZXIsIGZvY3VzKVxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHJpcHBsZS11bmNoZWNrZWQtY29sb3I7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDEsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRtYXQtZ3JleSwgJHRodW1iLXVuY2hlY2tlZC1odWUpO1xuICB9XG5cbiAgLm1hdC1zbGlkZS10b2dnbGUtYmFyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFyLXVuY2hlY2tlZC1jb2xvcjtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNsaWRlLXRvZ2dsZS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1zbGlkZS10b2dnbGUtY29udGVudCB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBfbWF0LXNsaWRlci1pbm5lci1jb250ZW50LXRoZW1lKCRwYWxldHRlKSB7XG4gIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsXG4gIC5tYXQtc2xpZGVyLXRodW1iLFxuICAubWF0LXNsaWRlci10aHVtYi1sYWJlbCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlKTtcbiAgfVxuXG4gIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHQge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsIGRlZmF1bHQtY29udHJhc3QpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtc2xpZGVyLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAkbWF0LXNsaWRlci1vZmYtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2xpZGVyLW9mZik7XG4gICRtYXQtc2xpZGVyLW9mZi1mb2N1c2VkLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNsaWRlci1vZmYtYWN0aXZlKTtcbiAgJG1hdC1zbGlkZXItZGlzYWJsZWQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2xpZGVyLW9mZik7XG4gICRtYXQtc2xpZGVyLWxhYmVsZWQtbWluLXZhbHVlLXRodW1iLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNsaWRlci1taW4pO1xuICAkbWF0LXNsaWRlci1sYWJlbGVkLW1pbi12YWx1ZS10aHVtYi1sYWJlbC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzbGlkZXItb2ZmKTtcbiAgJG1hdC1zbGlkZXItdGljay1vcGFjaXR5OiAwLjc7XG4gICRtYXQtc2xpZGVyLXRpY2stY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgYmFzZSwgJG1hdC1zbGlkZXItdGljay1vcGFjaXR5KTtcbiAgJG1hdC1zbGlkZXItdGljay1zaXplOiAycHg7XG5cbiAgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJG1hdC1zbGlkZXItb2ZmLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1wcmltYXJ5IHtcbiAgICBAaW5jbHVkZSBfbWF0LXNsaWRlci1pbm5lci1jb250ZW50LXRoZW1lKCRwcmltYXJ5KTtcbiAgfVxuXG4gIC5tYXQtYWNjZW50IHtcbiAgICBAaW5jbHVkZSBfbWF0LXNsaWRlci1pbm5lci1jb250ZW50LXRoZW1lKCRhY2NlbnQpO1xuICB9XG5cbiAgLm1hdC13YXJuIHtcbiAgICBAaW5jbHVkZSBfbWF0LXNsaWRlci1pbm5lci1jb250ZW50LXRoZW1lKCR3YXJuKTtcbiAgfVxuXG4gIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmcge1xuICAgICRvcGFjaXR5OiAwLjI7XG4gICAgJGNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgZGVmYXVsdCwgJG9wYWNpdHkpO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvcjtcblxuICAgIC8vIGBtYXQtY29sb3JgIHVzZXMgYHJnYmFgIGZvciB0aGUgb3BhY2l0eSB3aGljaCB3b24ndCB3b3JrIHdpdGhcbiAgICAvLyBDU1MgdmFyaWFibGVzIHNvIHdlIG5lZWQgdG8gdXNlIGBvcGFjaXR5YCBhcyBhIGZhbGxiYWNrLlxuICAgIEBpZiAodHlwZS1vZigkY29sb3IpICE9IGNvbG9yKSB7XG4gICAgICBvcGFjaXR5OiAkb3BhY2l0eTtcbiAgICB9XG4gIH1cblxuICAubWF0LXNsaWRlcjpob3ZlcixcbiAgLmNkay1mb2N1c2VkIHtcbiAgICAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRtYXQtc2xpZGVyLW9mZi1mb2N1c2VkLWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2xpZGVyLWRpc2FibGVkIHtcbiAgICAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLFxuICAgIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsXG4gICAgLm1hdC1zbGlkZXItdGh1bWIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG1hdC1zbGlkZXItZGlzYWJsZWQtY29sb3I7XG4gICAgfVxuXG4gICAgJjpob3ZlciB7XG4gICAgICAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG1hdC1zbGlkZXItZGlzYWJsZWQtY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbGlkZXItbWluLXZhbHVlIHtcbiAgICAubWF0LXNsaWRlci1mb2N1cy1yaW5nIHtcbiAgICAgICRvcGFjaXR5OiAwLjEyO1xuICAgICAgJGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGJhc2UsICRvcGFjaXR5KTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvcjtcblxuICAgICAgLy8gYG1hdC1jb2xvcmAgdXNlcyBgcmdiYWAgZm9yIHRoZSBvcGFjaXR5IHdoaWNoIHdvbid0IHdvcmsgd2l0aFxuICAgICAgLy8gQ1NTIHZhcmlhYmxlcyBzbyB3ZSBuZWVkIHRvIHVzZSBgb3BhY2l0eWAgYXMgYSBmYWxsYmFjay5cbiAgICAgIEBpZiAodHlwZS1vZigkY29sb3IpICE9IGNvbG9yKSB7XG4gICAgICAgIG9wYWNpdHk6ICRvcGFjaXR5O1xuICAgICAgfVxuICAgIH1cblxuICAgICYubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIHtcbiAgICAgIC5tYXQtc2xpZGVyLXRodW1iLFxuICAgICAgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbWF0LXNsaWRlci1sYWJlbGVkLW1pbi12YWx1ZS10aHVtYi1jb2xvcjtcbiAgICAgIH1cblxuICAgICAgJi5jZGstZm9jdXNlZCB7XG4gICAgICAgIC5tYXQtc2xpZGVyLXRodW1iLFxuICAgICAgICAubWF0LXNsaWRlci10aHVtYi1sYWJlbCB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG1hdC1zbGlkZXItbGFiZWxlZC1taW4tdmFsdWUtdGh1bWItbGFiZWwtY29sb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKSB7XG4gICAgICAubWF0LXNsaWRlci10aHVtYiB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJG1hdC1zbGlkZXItb2ZmLWNvbG9yO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIH1cblxuICAgICAgJjpob3ZlcixcbiAgICAgICYuY2RrLWZvY3VzZWQge1xuICAgICAgICAubWF0LXNsaWRlci10aHVtYiB7XG4gICAgICAgICAgYm9yZGVyLWNvbG9yOiAkbWF0LXNsaWRlci1vZmYtZm9jdXNlZC1jb2xvcjtcbiAgICAgICAgfVxuXG4gICAgICAgICYubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYiB7XG4gICAgICAgICAgYm9yZGVyLWNvbG9yOiAkbWF0LXNsaWRlci1kaXNhYmxlZC1jb2xvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlciB7XG4gICAgYm9yZGVyLWNvbG9yOiAkbWF0LXNsaWRlci10aWNrLWNvbG9yO1xuXG4gICAgLy8gYG1hdC1jb2xvcmAgdXNlcyBgcmdiYWAgZm9yIHRoZSBvcGFjaXR5IHdoaWNoIHdvbid0IHdvcmsgd2l0aFxuICAgIC8vIENTUyB2YXJpYWJsZXMgc28gd2UgbmVlZCB0byB1c2UgYG9wYWNpdHlgIGFzIGEgZmFsbGJhY2suXG4gICAgQGlmICh0eXBlLW9mKCRtYXQtc2xpZGVyLXRpY2stY29sb3IpICE9IGNvbG9yKSB7XG4gICAgICBvcGFjaXR5OiAkbWF0LXNsaWRlci10aWNrLW9wYWNpdHk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrcyB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byByaWdodCwgJG1hdC1zbGlkZXItdGljay1jb2xvcixcbiAgICAgICAgJG1hdC1zbGlkZXItdGljay1jb2xvciAkbWF0LXNsaWRlci10aWNrLXNpemUsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KTtcbiAgICAvLyBGaXJlZm94IGRvZXNuJ3QgZHJhdyB0aGUgZ3JhZGllbnQgY29ycmVjdGx5IHdpdGggJ3RvIHJpZ2h0J1xuICAgIC8vIChzZWUgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxNDMxOSkuXG4gICAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1yZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDAuMDAwMWRlZywgJG1hdC1zbGlkZXItdGljay1jb2xvcixcbiAgICAgICAgJG1hdC1zbGlkZXItdGljay1jb2xvciAkbWF0LXNsaWRlci10aWNrLXNpemUsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KTtcblxuICAgIC8vIGBtYXQtY29sb3JgIHVzZXMgYHJnYmFgIGZvciB0aGUgb3BhY2l0eSB3aGljaCB3b24ndCB3b3JrIHdpdGhcbiAgICAvLyBDU1MgdmFyaWFibGVzIHNvIHdlIG5lZWQgdG8gdXNlIGBvcGFjaXR5YCBhcyBhIGZhbGxiYWNrLlxuICAgIEBpZiAodHlwZS1vZigkbWF0LXNsaWRlci10aWNrLWNvbG9yKSAhPSBjb2xvcikge1xuICAgICAgb3BhY2l0eTogJG1hdC1zbGlkZXItdGljay1vcGFjaXR5O1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRpY2tzIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgJG1hdC1zbGlkZXItdGljay1jb2xvcixcbiAgICAgICAgJG1hdC1zbGlkZXItdGljay1jb2xvciAkbWF0LXNsaWRlci10aWNrLXNpemUsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KTtcblxuICAgIC8vIGBtYXQtY29sb3JgIHVzZXMgYHJnYmFgIGZvciB0aGUgb3BhY2l0eSB3aGljaCB3b24ndCB3b3JrIHdpdGhcbiAgICAvLyBDU1MgdmFyaWFibGVzIHNvIHdlIG5lZWQgdG8gdXNlIGBvcGFjaXR5YCBhcyBhIGZhbGxiYWNrLlxuICAgIEBpZiAodHlwZS1vZigkbWF0LXNsaWRlci10aWNrLWNvbG9yKSAhPSBjb2xvcikge1xuICAgICAgb3BhY2l0eTogJG1hdC1zbGlkZXItdGljay1vcGFjaXR5O1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNsaWRlci10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dCB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0yKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LXN0ZXBwZXItdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG5cbiAgLm1hdC1zdGVwLWhlYWRlciB7XG4gICAgJi5jZGsta2V5Ym9hcmQtZm9jdXNlZCxcbiAgICAmLmNkay1wcm9ncmFtLWZvY3VzZWQsXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyKTtcbiAgICB9XG5cbiAgICAvLyBPbiB0b3VjaCBkZXZpY2VzIHRoZSA6aG92ZXIgc3RhdGUgd2lsbCBsaW5nZXIgb24gdGhlIGVsZW1lbnQgYWZ0ZXIgYSB0YXAuXG4gICAgLy8gUmVzZXQgaXQgdmlhIGBAbWVkaWFgIGFmdGVyIHRoZSBkZWNsYXJhdGlvbiwgYmVjYXVzZSB0aGUgbWVkaWEgcXVlcnkgaXNuJ3RcbiAgICAvLyBzdXBwb3J0ZWQgYnkgYWxsIGJyb3dzZXJzIHlldC5cbiAgICBAbWVkaWEgKGhvdmVyOiBub25lKSB7XG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAubWF0LXN0ZXAtbGFiZWwsXG4gICAgLm1hdC1zdGVwLW9wdGlvbmFsIHtcbiAgICAgIC8vIFRPRE8oam9zZXBocGVycm90dCk6IFVwZGF0ZSB0byB1c2luZyBhIGNvcnJlY3RlZCBkaXNhYmxlZC10ZXh0IGNvbnRyYXN0XG4gICAgICAvLyBpbnN0ZWFkIG9mIHNlY29uZGFyeS10ZXh0LlxuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICAgIH1cblxuICAgIC5tYXQtc3RlcC1pY29uIHtcbiAgICAgIC8vIFRPRE8oam9zZXBocGVycm90dCk6IFVwZGF0ZSB0byB1c2luZyBhIGNvcnJlY3RlZCBkaXNhYmxlZC10ZXh0IGNvbnRyYXN0XG4gICAgICAvLyBpbnN0ZWFkIG9mIHNlY29uZGFyeS10ZXh0LlxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgICB9XG5cbiAgICAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCxcbiAgICAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLFxuICAgIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5KTtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIGRlZmF1bHQtY29udHJhc3QpO1xuICAgIH1cblxuICAgIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVycm9yIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gICAgfVxuXG4gICAgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWFjdGl2ZSB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICB9XG5cbiAgICAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtZXJyb3Ige1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zdGVwcGVyLWhvcml6b250YWwsIC5tYXQtc3RlcHBlci12ZXJ0aWNhbCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgfVxuXG4gIC5tYXQtc3RlcHBlci12ZXJ0aWNhbC1saW5lOjpiZWZvcmUge1xuICAgIGJvcmRlci1sZWZ0LWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG5cbiAgLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjpiZWZvcmUsXG4gIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YWZ0ZXIsXG4gIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLWxpbmUge1xuICAgIGJvcmRlci10b3AtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cbn1cblxuQG1peGluIG1hdC1zdGVwcGVyLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXN0ZXBwZXItdmVydGljYWwsIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC1zdGVwLWxhYmVsIHtcbiAgICBmb250OiB7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSk7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTEpO1xuICAgIH07XG4gIH1cblxuICAubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yIHtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICB9XG5cbiAgLm1hdC1zdGVwLWxhYmVsLWVycm9yIHtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0yKTtcbiAgfVxuXG4gIC5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZCB7XG4gICAgZm9udDoge1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTIpO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0yKTtcbiAgICB9O1xuICB9XG59XG5cbkBtaXhpbiBtYXQtc29ydC10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LXNvcnQtaGVhZGVyLWFycm93IHtcbiAgICAkdGFibGUtYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnY2FyZCcpO1xuICAgICR0ZXh0LWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcblxuICAgIC8vIEJlY2F1c2UgdGhlIGFycm93IGlzIG1hZGUgdXAgb2YgbXVsdGlwbGUgZWxlbWVudHMgdGhhdCBhcmUgc3RhY2tlZCBvbiB0b3Agb2YgZWFjaCBvdGhlcixcbiAgICAvLyB3ZSBjYW4ndCB1c2UgdGhlIHNlbWktdHJhc3BhcmVudCBjb2xvciBmcm9tIHRoZSB0aGVtZSBkaXJlY3RseS4gSWYgdGhlIHZhbHVlIGlzIGEgY29sb3JcbiAgICAvLyAqdHlwZSosIHdlIGNvbnZlcnQgaXQgaW50byBhIHNvbGlkIGNvbG9yIGJ5IHRha2luZyB0aGUgb3BhY2l0eSBmcm9tIHRoZSByZ2JhIHZhbHVlIGFuZFxuICAgIC8vIHVzaW5nIHRoZSB2YWx1ZSB0byBkZXRlcm1pbmUgdGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIGJhY2tncm91bmQgdG8gcHV0IGludG8gZm9yZWdyb3VuZFxuICAgIC8vIHdoZW4gbWl4aW5nIHRoZSBjb2xvcnMgdG9nZXRoZXIuIE90aGVyd2lzZSwgaWYgaXQgcmVzb2x2ZXMgdG8gc29tZXRoaW5nIGRpZmZlcmVudFxuICAgIC8vIChlLmcuIGl0IHJlc29sdmVzIHRvIGEgQ1NTIHZhcmlhYmxlKSwgd2UgdXNlIHRoZSBjb2xvciBkaXJlY3RseS5cbiAgICBAaWYgKHR5cGUtb2YoJHRhYmxlLWJhY2tncm91bmQpID09IGNvbG9yIGFuZCB0eXBlLW9mKCR0ZXh0LWNvbG9yKSA9PSBjb2xvcikge1xuICAgICAgJHRleHQtb3BhY2l0eTogb3BhY2l0eSgkdGV4dC1jb2xvcik7XG4gICAgICBjb2xvcjogbWl4KCR0YWJsZS1iYWNrZ3JvdW5kLCByZ2JhKCR0ZXh0LWNvbG9yLCAxKSwgKDEgLSAkdGV4dC1vcGFjaXR5KSAqIDEwMCUpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICBjb2xvcjogJHRleHQtY29sb3I7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtc29ydC10eXBvZ3JhcGh5KCRjb25maWcpIHsgfVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtdGFicy10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRoZWFkZXItYm9yZGVyOiAxcHggc29saWQgbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcblxuICAubWF0LXRhYi1uYXYtYmFyLFxuICAubWF0LXRhYi1oZWFkZXIge1xuICAgIGJvcmRlci1ib3R0b206ICRoZWFkZXItYm9yZGVyO1xuICB9XG5cbiAgLm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIHtcbiAgICAubWF0LXRhYi1uYXYtYmFyLFxuICAgIC5tYXQtdGFiLWhlYWRlciB7XG4gICAgICBib3JkZXItdG9wOiAkaGVhZGVyLWJvcmRlcjtcbiAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgLm1hdC10YWItbGFiZWwsIC5tYXQtdGFiLWxpbmsge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gICAgJi5tYXQtdGFiLWRpc2FibGVkIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24ge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24ge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgfVxuXG4gIC8vIFJlbW92ZSBoZWFkZXIgYm9yZGVyIHdoZW4gdGhlcmUgaXMgYSBiYWNrZ3JvdW5kIGNvbG9yXG4gIC5tYXQtdGFiLWdyb3VwW2NsYXNzKj0nbWF0LWJhY2tncm91bmQtJ10gLm1hdC10YWItaGVhZGVyLFxuICAubWF0LXRhYi1uYXYtYmFyW2NsYXNzKj0nbWF0LWJhY2tncm91bmQtJ10ge1xuICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG4gICAgYm9yZGVyLXRvcDogbm9uZTtcbiAgfVxuXG4gIC5tYXQtdGFiLWdyb3VwLCAubWF0LXRhYi1uYXYtYmFyIHtcbiAgICAkdGhlbWUtY29sb3JzOiAoXG4gICAgICBwcmltYXJ5OiAkcHJpbWFyeSxcbiAgICAgIGFjY2VudDogJGFjY2VudCxcbiAgICAgIHdhcm46ICR3YXJuXG4gICAgKTtcblxuICAgIEBlYWNoICRuYW1lLCAkY29sb3IgaW4gJHRoZW1lLWNvbG9ycyB7XG4gICAgICAvLyBTZXQgdGhlIGZvcmVncm91bmQgY29sb3Igb2YgdGhlIHRhYnNcbiAgICAgICYubWF0LSN7JG5hbWV9IHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC10YWItbGFiZWwtZm9jdXMoJGNvbG9yKTtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1pbmstYmFyKCRjb2xvcik7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgaW5rIGJhciB3aGVuIGJhY2tncm91bmQgY29sb3IgaXMgdGhlIHNhbWVcbiAgICAgICAgJi5tYXQtYmFja2dyb3VuZC0jeyRuYW1lfSB7XG4gICAgICAgICAgQGluY2x1ZGUgX21hdC1pbmstYmFyKCRjb2xvciwgZGVmYXVsdC1jb250cmFzdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBAZWFjaCAkbmFtZSwgJGNvbG9yIGluICR0aGVtZS1jb2xvcnMge1xuICAgICAgLy8gU2V0IGJhY2tncm91bmQgY29sb3Igb2YgdGhlIHRhYnMgYW5kIG92ZXJyaWRlIGZvY3VzIGNvbG9yXG4gICAgICAmLm1hdC1iYWNrZ3JvdW5kLSN7JG5hbWV9IHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC10YWItbGFiZWwtZm9jdXMoJGNvbG9yKTtcbiAgICAgICAgQGluY2x1ZGUgX21hdC10YWJzLWJhY2tncm91bmQoJGNvbG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuQG1peGluIF9tYXQtaW5rLWJhcigkY29sb3IsICRodWU6IGRlZmF1bHQpIHtcbiAgLm1hdC1pbmstYmFyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGNvbG9yLCAkaHVlKTtcbiAgfVxufVxuXG5AbWl4aW4gX21hdC10YWItbGFiZWwtZm9jdXMoJHRhYi1mb2N1cy1jb2xvcikge1xuICAubWF0LXRhYi1sYWJlbCxcbiAgLm1hdC10YWItbGluayB7XG4gICAgJi5jZGsta2V5Ym9hcmQtZm9jdXNlZCxcbiAgICAmLmNkay1wcm9ncmFtLWZvY3VzZWQge1xuICAgICAgJjpub3QoLm1hdC10YWItZGlzYWJsZWQpIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCR0YWItZm9jdXMtY29sb3IsIGxpZ2h0ZXIsIDAuMyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBfbWF0LXRhYnMtYmFja2dyb3VuZCgkYmFja2dyb3VuZC1jb2xvcikge1xuICAvLyBTZXQgYmFja2dyb3VuZCBjb2xvciBmb3IgdGhlIHRhYiBncm91cFxuICAubWF0LXRhYi1oZWFkZXIsIC5tYXQtdGFiLWxpbmtzLCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLWNvbG9yKTtcbiAgfVxuXG4gIC8vIFNldCBsYWJlbHMgdG8gY29udHJhc3QgYWdhaW5zdCBiYWNrZ3JvdW5kXG4gIC5tYXQtdGFiLWxhYmVsLCAubWF0LXRhYi1saW5rIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLWNvbG9yLCBkZWZhdWx0LWNvbnRyYXN0KTtcblxuICAgICYubWF0LXRhYi1kaXNhYmxlZCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLWNvbG9yLCBkZWZhdWx0LWNvbnRyYXN0LCAwLjQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNldCBwYWdpbmF0aW9uIGNoZXZyb25zIHRvIGNvbnRyYXN0IGJhY2tncm91bmRcbiAgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQtY29sb3IsIGRlZmF1bHQtY29udHJhc3QpO1xuICB9XG5cbiAgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQtY29sb3IsIGRlZmF1bHQtY29udHJhc3QsIDAuNCk7XG4gIH1cblxuICAvLyBTZXQgcmlwcGxlcyBjb2xvciB0byBiZSB0aGUgY29udHJhc3QgY29sb3Igb2YgdGhlIG5ldyBiYWNrZ3JvdW5kLiBPdGhlcndpc2UgdGhlIHJpcHBsZVxuICAvLyBjb2xvciB3aWxsIGJlIGJhc2VkIG9uIHRoZSBhcHAgYmFja2dyb3VuZCBjb2xvci5cbiAgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLWNvbG9yLCBkZWZhdWx0LWNvbnRyYXN0LCAwLjEyKTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXRhYnMtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtdGFiLWdyb3VwIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC10YWItbGFiZWwsIC5tYXQtdGFiLWxpbmsge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGJ1dHRvbik7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJ1dHRvbik7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBidXR0b24pO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuQG1peGluIF9tYXQtdG9vbGJhci1jb2xvcigkcGFsZXR0ZSkge1xuICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJHBhbGV0dGUpO1xuICBjb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCBkZWZhdWx0LWNvbnRyYXN0KTtcbn1cblxuQG1peGluIF9tYXQtdG9vbGJhci1mb3JtLWZpZWxkLW92ZXJyaWRlcyB7XG4gIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUsXG4gIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsXG4gIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Q29sb3I7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtbGFiZWwsXG4gIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwsXG4gIC5tYXQtc2VsZWN0LXZhbHVlLFxuICAubWF0LXNlbGVjdC1hcnJvdyxcbiAgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgfVxuXG4gIC5tYXQtaW5wdXQtZWxlbWVudCB7XG4gICAgY2FyZXQtY29sb3I6IGN1cnJlbnRDb2xvcjtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXRvb2xiYXItdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtdG9vbGJhciB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBhcHAtYmFyKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAgICYubWF0LXByaW1hcnkge1xuICAgICAgQGluY2x1ZGUgX21hdC10b29sYmFyLWNvbG9yKCRwcmltYXJ5KTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgQGluY2x1ZGUgX21hdC10b29sYmFyLWNvbG9yKCRhY2NlbnQpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgQGluY2x1ZGUgX21hdC10b29sYmFyLWNvbG9yKCR3YXJuKTtcbiAgICB9XG5cbiAgICBAaW5jbHVkZSBfbWF0LXRvb2xiYXItZm9ybS1maWVsZC1vdmVycmlkZXM7XG4gIH1cbn1cblxuQG1peGluIG1hdC10b29sYmFyLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXRvb2xiYXIsXG4gIC5tYXQtdG9vbGJhciBoMSxcbiAgLm1hdC10b29sYmFyIGgyLFxuICAubWF0LXRvb2xiYXIgaDMsXG4gIC5tYXQtdG9vbGJhciBoNCxcbiAgLm1hdC10b29sYmFyIGg1LFxuICAubWF0LXRvb2xiYXIgaDYge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCB0aXRsZSk7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG5cblxuXG5cblxuJG1hdC10b29sdGlwLXRhcmdldC1oZWlnaHQ6IDIycHg7XG4kbWF0LXRvb2x0aXAtZm9udC1zaXplOiAxMHB4O1xuJG1hdC10b29sdGlwLXZlcnRpY2FsLXBhZGRpbmc6ICgkbWF0LXRvb2x0aXAtdGFyZ2V0LWhlaWdodCAtICRtYXQtdG9vbHRpcC1mb250LXNpemUpIC8gMjtcblxuJG1hdC10b29sdGlwLWhhbmRzZXQtdGFyZ2V0LWhlaWdodDogMzBweDtcbiRtYXQtdG9vbHRpcC1oYW5kc2V0LWZvbnQtc2l6ZTogMTRweDtcbiRtYXQtdG9vbHRpcC1oYW5kc2V0LXZlcnRpY2FsLXBhZGRpbmc6XG4gICAgKCRtYXQtdG9vbHRpcC1oYW5kc2V0LXRhcmdldC1oZWlnaHQgLSAkbWF0LXRvb2x0aXAtaGFuZHNldC1mb250LXNpemUpIC8gMjtcblxuQG1peGluIG1hdC10b29sdGlwLXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuXG4gIC5tYXQtdG9vbHRpcCB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCB0b29sdGlwLCAwLjkpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtdG9vbHRpcC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC10b29sdGlwIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICAgIGZvbnQtc2l6ZTogJG1hdC10b29sdGlwLWZvbnQtc2l6ZTtcbiAgICBwYWRkaW5nLXRvcDogJG1hdC10b29sdGlwLXZlcnRpY2FsLXBhZGRpbmc7XG4gICAgcGFkZGluZy1ib3R0b206ICRtYXQtdG9vbHRpcC12ZXJ0aWNhbC1wYWRkaW5nO1xuICB9XG5cbiAgLm1hdC10b29sdGlwLWhhbmRzZXQge1xuICAgIGZvbnQtc2l6ZTogJG1hdC10b29sdGlwLWhhbmRzZXQtZm9udC1zaXplO1xuICAgIHBhZGRpbmctdG9wOiAkbWF0LXRvb2x0aXAtaGFuZHNldC12ZXJ0aWNhbC1wYWRkaW5nO1xuICAgIHBhZGRpbmctYm90dG9tOiAkbWF0LXRvb2x0aXAtaGFuZHNldC12ZXJ0aWNhbC1wYWRkaW5nO1xuICB9XG59XG5cblxuXG5cblxuQG1peGluIG1hdC1zbmFjay1iYXItdGhlbWUoJHRoZW1lKSB7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuXG4gIC5tYXQtc25hY2stYmFyLWNvbnRhaW5lciB7XG4gICAgLy8gVXNlIHRoZSBwcmltYXJ5IHRleHQgb24gdGhlIGRhcmsgdGhlbWUsIGV2ZW4gdGhvdWdoIHRoZSBsaWdodGVyIG9uZSB1c2VzXG4gICAgLy8gYSBzZWNvbmRhcnksIGJlY2F1c2UgdGhlIGNvbnRyYXN0IG9uIHRoZSBsaWdodCBwcmltYXJ5IHRleHQgaXMgcG9vci5cbiAgICBjb2xvcjogaWYoJGlzLWRhcmstdGhlbWUsICRkYXJrLXByaW1hcnktdGV4dCwgJGxpZ2h0LXNlY29uZGFyeS10ZXh0KTtcbiAgICBiYWNrZ3JvdW5kOiBpZigkaXMtZGFyay10aGVtZSwgbWFwLWdldCgkbWF0LWdyZXksIDUwKSwgIzMyMzIzMik7XG5cbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbig2LCAkdGhlbWUpO1xuICB9XG5cbiAgLm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uIHtcbiAgICBjb2xvcjogaWYoJGlzLWRhcmstdGhlbWUsIGluaGVyaXQsIG1hdC1jb2xvcigkYWNjZW50LCB0ZXh0KSk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1zbmFjay1iYXItdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtc2ltcGxlLXNuYWNrYmFyIHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBib2R5LTEpO1xuICAgICAgc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbiB7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBpbmhlcml0O1xuICAgICAgc2l6ZTogaW5oZXJpdDtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJ1dHRvbik7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLy8gVGhlbWUgc3R5bGVzIHRoYXQgb25seSBhcHBseSB0byB0aGUgZmlsbCBhcHBlYXJhbmNlIG9mIHRoZSBmb3JtLWZpZWxkLlxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtZmlsbC10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcblxuICAkZmlsbC1iYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGJhc2UsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjEsIDAuMDQpKTtcbiAgJGZpbGwtZGlzYWJsZWQtYmFja2dyb3VuZDogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBiYXNlLCBpZigkaXMtZGFyay10aGVtZSwgMC4wNSwgMC4wMikpO1xuICAkdW5kZXJsaW5lLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjUsIDAuNDIpKTtcbiAgJGxhYmVsLWRpc2FibGVkLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwge1xuICAgIC5tYXQtZm9ybS1maWVsZC1mbGV4IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRmaWxsLWJhY2tncm91bmQ7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtZmxleCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZmlsbC1kaXNhYmxlZC1iYWNrZ3JvdW5kO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yO1xuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQge1xuICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgY29sb3I6ICRsYWJlbC1kaXNhYmxlZC1jb2xvcjtcbiAgICAgIH1cblxuICAgICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIFVzZWQgdG8gbWFrZSBpbnN0YW5jZXMgb2YgdGhlIF9tYXQtZm9ybS1maWVsZC1sYWJlbC1mbG9hdGluZyBtaXhpbiBuZWdsaWdpYmx5IGRpZmZlcmVudCxcbi8vIGFuZCBwcmV2ZW50IEdvb2dsZSdzIENTUyBPcHRpbWl6ZXIgZnJvbSBjb2xsYXBzaW5nIHRoZSBkZWNsYXJhdGlvbnMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugc29tZVxuLy8gb2YgdGhlIHNlbGVjdG9ycyBjb250YWluIHBzZXVkby1jbGFzc2VzIG5vdCByZWNvZ25pemVkIGluIGFsbCBicm93c2Vycy4gSWYgYSBicm93c2VyIGVuY291bnRlcnNcbi8vIGFuIHVua25vd24gcHNldWRvLWNsYXNzIGl0IHdpbGwgZGlzY2FyZCB0aGUgZW50aXJlIHJ1bGUgc2V0LlxuJG1hdC1mb3JtLWZpZWxkLWZpbGwtZGVkdXBlOiAwO1xuXG4vLyBBcHBsaWVzIGEgZmxvYXRpbmcgbGFiZWwgYWJvdmUgdGhlIGZvcm0gZmllbGQgY29udHJvbCBpdHNlbGYuXG5AbWl4aW4gX21hdC1mb3JtLWZpZWxkLWZpbGwtbGFiZWwtZmxvYXRpbmcoJGZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCkge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRpbmZpeC1tYXJnaW4tdG9wIC0gJGluZml4LXBhZGRpbmcgKyAkbWF0LWZvcm0tZmllbGQtZmlsbC1kZWR1cGUpXG4gICAgICAgICAgICAgc2NhbGUoJGZvbnQtc2NhbGUpO1xuICB3aWR0aDogMTAwJSAvICRmb250LXNjYWxlICsgJG1hdC1mb3JtLWZpZWxkLWZpbGwtZGVkdXBlO1xuXG4gICRtYXQtZm9ybS1maWVsZC1maWxsLWRlZHVwZTogJG1hdC1mb3JtLWZpZWxkLWZpbGwtZGVkdXBlICsgMC4wMDAwMSAhZ2xvYmFsO1xufVxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtZmlsbC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLy8gVGhlIHVuaXQtbGVzcyBsaW5lLWhlaWdodCBmcm9tIHRoZSBmb250IGNvbmZpZy5cbiAgJGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgaW5wdXQpO1xuICAvLyBUaGUgYW1vdW50IHRvIHNjYWxlIHRoZSBmb250IGZvciB0aGUgZmxvYXRpbmcgbGFiZWwgYW5kIHN1YnNjcmlwdC5cbiAgJHN1YnNjcmlwdC1mb250LXNjYWxlOiAwLjc1O1xuICAvLyBUaGUgcGFkZGluZyBvbiB0b3Agb2YgdGhlIGluZml4LlxuICAkaW5maXgtcGFkZGluZy10b3A6IDAuMjVlbTtcbiAgLy8gVGhlIHBhZGRpbmcgYmVsb3cgdGhlIGluZml4LlxuICAkaW5maXgtcGFkZGluZy1ib3R0b206IDAuNzVlbTtcbiAgLy8gVGhlIG1hcmdpbiBhcHBsaWVkIHRvIHRoZSBmb3JtLWZpZWxkLWluZml4IHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBmbG9hdGluZyBsYWJlbC5cbiAgJGluZml4LW1hcmdpbi10b3A6IDFlbSAqICRsaW5lLWhlaWdodCAqICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcbiAgLy8gVGhlIGFtb3VudCB3ZSBvZmZzZXQgdGhlIGxhYmVsIGZyb20gdGhlIGlucHV0IHRleHQgaW4gdGhlIGZpbGwgYXBwZWFyYW5jZS5cbiAgJGZpbGwtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQ6IC0wLjVlbTtcblxuICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIHtcbiAgICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgcGFkZGluZzogJGluZml4LXBhZGRpbmctdG9wIDAgJGluZml4LXBhZGRpbmctYm90dG9tIDA7XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgIHRvcDogJGluZml4LW1hcmdpbi10b3AgKyAkaW5maXgtcGFkZGluZy10b3A7XG4gICAgICBtYXJnaW4tdG9wOiAkZmlsbC1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldDtcbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCB7XG4gICAgICAmLm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsXG4gICAgICAubWF0LWlucHV0LXNlcnZlcjpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1maWxsLWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmctdG9wICsgJGZpbGwtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQsXG4gICAgICAgICAgICAgICAgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXJ2ZXItc2lkZSByZW5kZXJlZCBtYXRJbnB1dCB3aXRoIGEgbGFiZWwgYXR0cmlidXRlIGJ1dCBsYWJlbCBub3Qgc2hvd25cbiAgICAgIC8vICh1c2VkIGFzIGEgcHVyZSBDU1Mgc3RhbmQtaW4gZm9yIG1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCkuXG4gICAgICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlclxuICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWZpbGwtbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZy10b3AgKyAkZmlsbC1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldCxcbiAgICAgICAgICAgICAgICAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5cbi8vIFRoZW1lIHN0eWxlcyB0aGF0IG9ubHkgYXBwbHkgdG8gdGhlIGxlZ2FjeSBhcHBlYXJhbmNlIG9mIHRoZSBmb3JtLWZpZWxkLlxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtbGVnYWN5LXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuXG4gICRsYWJlbC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gICR1bmRlcmxpbmUtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlciwgaWYoJGlzLWRhcmstdGhlbWUsIDAuNywgMC40MikpO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgIGNvbG9yOiAkbGFiZWwtY29sb3I7XG4gICAgfVxuXG4gICAgLm1hdC1oaW50IHtcbiAgICAgIGNvbG9yOiAkbGFiZWwtY29sb3I7XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yO1xuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSB7XG4gICAgICBAaW5jbHVkZSBtYXQtY29udHJvbC1kaXNhYmxlZC11bmRlcmxpbmUoJHVuZGVybGluZS1jb2xvcik7XG4gICAgfVxuICB9XG59XG5cbi8vIFVzZWQgdG8gbWFrZSBpbnN0YW5jZXMgb2YgdGhlIF9tYXQtZm9ybS1maWVsZC1sYWJlbC1mbG9hdGluZyBtaXhpbiBuZWdsaWdpYmx5IGRpZmZlcmVudCxcbi8vIGFuZCBwcmV2ZW50IEdvb2dsZSdzIENTUyBPcHRpbWl6ZXIgZnJvbSBjb2xsYXBzaW5nIHRoZSBkZWNsYXJhdGlvbnMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugc29tZVxuLy8gb2YgdGhlIHNlbGVjdG9ycyBjb250YWluIHBzZXVkby1jbGFzc2VzIG5vdCByZWNvZ25pemVkIGluIGFsbCBicm93c2Vycy4gSWYgYSBicm93c2VyIGVuY291bnRlcnNcbi8vIGFuIHVua25vd24gcHNldWRvLWNsYXNzIGl0IHdpbGwgZGlzY2FyZCB0aGUgZW50aXJlIHJ1bGUgc2V0LlxuJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGU6IDA7XG5cbi8vIEFwcGxpZXMgYSBmbG9hdGluZyBsYWJlbCBhYm92ZSB0aGUgZm9ybSBmaWVsZCBjb250cm9sIGl0c2VsZi5cbkBtaXhpbiBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nKCRmb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApIHtcbiAgLy8gV2UgdXNlIHBlcnNwZWN0aXZlIHRvIGZpeCB0aGUgdGV4dCBibHVycmluZXNzIGFzIGRlc2NyaWJlZCBoZXJlOlxuICAvLyBodHRwOi8vd3d3LnVzZXJhZ2VudG1hbi5jb20vYmxvZy8yMDE0LzA1LzA0L2ZpeGluZy10eXBvZ3JhcGh5LWluc2lkZS1vZi0yLWQtY3NzLXRyYW5zZm9ybXMvXG4gIC8vIFRoaXMgcmVzdWx0cyBpbiBhIHNtYWxsIGppdHRlciBhZnRlciB0aGUgbGFiZWwgZmxvYXRzIG9uIEZpcmVmb3gsIHdoaWNoIHRoZVxuICAvLyB0cmFuc2xhdGVaIGZpeGVzLlxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRpbmZpeC1tYXJnaW4tdG9wIC0gJGluZml4LXBhZGRpbmcpIHNjYWxlKCRmb250LXNjYWxlKSBwZXJzcGVjdGl2ZSgxMDBweClcbiAgdHJhbnNsYXRlWigwLjAwMXB4ICsgJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGUpO1xuICAvLyBUaGUgdHJpY2tzIGFib3ZlIHVzZWQgdG8gc21vb3RoIG91dCB0aGUgYW5pbWF0aW9uIG9uIGNocm9tZSBhbmQgZmlyZWZveCBhY3R1YWxseSBtYWtlIHRoaW5nc1xuICAvLyB3b3JzZSBvbiBJRSwgc28gd2UgZG9uJ3QgaW5jbHVkZSB0aGVtIGluIHRoZSBJRSB2ZXJzaW9uLlxuICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kaW5maXgtbWFyZ2luLXRvcCAtICRpbmZpeC1wYWRkaW5nICsgJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGUpXG4gICAgICAgICAgICAgICAgICBzY2FsZSgkZm9udC1zY2FsZSk7XG5cbiAgd2lkdGg6IDEwMCUgLyAkZm9udC1zY2FsZSArICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlO1xuXG4gICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlOiAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZSArIDAuMDAwMDEgIWdsb2JhbDtcbn1cblxuLy8gU2FtZSBhcyBtaXhpbiBhYm92ZSwgYnV0IG9taXRzIHRoZSB0cmFuc2xhdGVaIGZvciBwcmludGluZyBwdXJwb3Nlcy5cbkBtaXhpbiBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nLXByaW50KCRmb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApIHtcbiAgLy8gVGhpcyByZXN1bHRzIGluIGEgc21hbGwgaml0dGVyIGFmdGVyIHRoZSBsYWJlbCBmbG9hdHMgb24gRmlyZWZveCwgd2hpY2ggdGhlXG4gIC8vIHRyYW5zbGF0ZVogZml4ZXMuXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtJGluZml4LW1hcmdpbi10b3AgLSAkaW5maXgtcGFkZGluZyArICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlKVxuICAgICAgICAgICAgICAgICAgc2NhbGUoJGZvbnQtc2NhbGUpO1xuICAvLyBUaGUgdHJpY2tzIGFib3ZlIHVzZWQgdG8gc21vb3RoIG91dCB0aGUgYW5pbWF0aW9uIG9uIGNocm9tZSBhbmQgZmlyZWZveCBhY3R1YWxseSBtYWtlIHRoaW5nc1xuICAvLyB3b3JzZSBvbiBJRSwgc28gd2UgZG9uJ3QgaW5jbHVkZSB0aGVtIGluIHRoZSBJRSB2ZXJzaW9uLlxuICAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZTogJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGUgKyAwLjAwMDAxICFnbG9iYWw7XG59XG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1sZWdhY3ktdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC8vIFRoZSB1bml0LWxlc3MgbGluZS1oZWlnaHQgZnJvbSB0aGUgZm9udCBjb25maWcuXG4gICRsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGlucHV0KTtcbiAgLy8gVGhlIGFtb3VudCB0byBzY2FsZSB0aGUgZm9udCBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsIGFuZCBzdWJzY3JpcHQuXG4gICRzdWJzY3JpcHQtZm9udC1zY2FsZTogMC43NTtcbiAgLy8gVGhlIGFtb3VudCBvZiBzcGFjZSBiZXR3ZWVuIHRoZSB0b3Agb2YgdGhlIGxpbmUgYW5kIHRoZSB0b3Agb2YgdGhlIGFjdHVhbCB0ZXh0XG4gIC8vIChhcyBhIGZyYWN0aW9uIG9mIHRoZSBmb250LXNpemUpLlxuICAkbGluZS1zcGFjaW5nOiAoJGxpbmUtaGVpZ2h0IC0gMSkgLyAyO1xuICAvLyBUaGUgcGFkZGluZyBvbiB0aGUgaW5maXguIE1vY2tzIHNob3cgaGFsZiBvZiB0aGUgdGV4dCBzaXplLCBidXQgc2VlbSB0byBtZWFzdXJlIGZyb20gdGhlIGVkZ2VcbiAgLy8gb2YgdGhlIHRleHQgaXRzZWxmLCBub3QgdGhlIGVkZ2Ugb2YgdGhlIGxpbmU7IHRoZXJlZm9yZSB3ZSBzdWJ0cmFjdCBvZmYgdGhlIGxpbmUgc3BhY2luZy5cbiAgJGluZml4LXBhZGRpbmc6IDAuNWVtIC0gJGxpbmUtc3BhY2luZztcbiAgLy8gVGhlIG1hcmdpbiBhcHBsaWVkIHRvIHRoZSBmb3JtLWZpZWxkLWluZml4IHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBmbG9hdGluZyBsYWJlbC5cbiAgJGluZml4LW1hcmdpbi10b3A6IDFlbSAqICRsaW5lLWhlaWdodCAqICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcbiAgLy8gVGhlIHNwYWNlIGJldHdlZW4gdGhlIGJvdHRvbSBvZiB0aGUgLm1hdC1mb3JtLWZpZWxkLWZsZXggYXJlYSBhbmQgdGhlIHN1YnNjcmlwdCB3cmFwcGVyLlxuICAvLyBNb2NrcyBzaG93IGhhbGYgb2YgdGhlIHRleHQgc2l6ZSwgYnV0IHRoaXMgbWFyZ2luIGlzIGFwcGxpZWQgdG8gYW4gZWxlbWVudCB3aXRoIHRoZSBzdWJzY3JpcHRcbiAgLy8gdGV4dCBmb250IHNpemUsIHNvIHdlIG5lZWQgdG8gZGl2aWRlIGJ5IHRoZSBzY2FsZSBmYWN0b3IgdG8gbWFrZSBpdCBoYWxmIG9mIHRoZSBvcmlnaW5hbCB0ZXh0XG4gIC8vIHNpemUuIFdlIGFnYWluIG5lZWQgdG8gc3VidHJhY3Qgb2ZmIHRoZSBsaW5lIHNwYWNpbmcgc2luY2UgdGhlIG1vY2tzIG1lYXN1cmUgdG8gdGhlIGVkZ2Ugb2YgdGhlXG4gIC8vIHRleHQsIG5vdCB0aGUgIGVkZ2Ugb2YgdGhlIGxpbmUuXG4gICRzdWJzY3JpcHQtbWFyZ2luLXRvcDogMC41ZW0gLyAkc3Vic2NyaXB0LWZvbnQtc2NhbGUgLSAoJGxpbmUtc3BhY2luZyAqIDIpO1xuICAvLyBUaGUgcGFkZGluZyBhcHBsaWVkIHRvIHRoZSBmb3JtLWZpZWxkLXdyYXBwZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIHN1YnNjcmlwdCwgc2luY2UgaXQnc1xuICAvLyBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQuIFRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgc3Vic2NyaXB0J3MgbWFyZ2luIGFuZCBsaW5lLWhlaWdodCwgYnV0IHdlXG4gIC8vIG5lZWQgdG8gbXVsdGlwbHkgYnkgdGhlIHN1YnNjcmlwdCBmb250IHNjYWxlIGZhY3RvciBzaW5jZSB0aGUgd3JhcHBlciBoYXMgYSBsYXJnZXIgZm9udCBzaXplLlxuICAkd3JhcHBlci1wYWRkaW5nLWJvdHRvbTogKCRzdWJzY3JpcHQtbWFyZ2luLXRvcCArICRsaW5lLWhlaWdodCkgKiAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IHtcbiAgICAubWF0LWZvcm0tZmllbGQtd3JhcHBlciB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogJHdyYXBwZXItcGFkZGluZy1ib3R0b207XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgIHBhZGRpbmc6ICRpbmZpeC1wYWRkaW5nIDA7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQge1xuICAgICAgJi5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLFxuICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgIH1cblxuICAgICAgLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMCB3aWxsIHJlbHkgb24gQXV0b2ZpbGxNb25pdG9yIGluc3RlYWQuXG4gICAgICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXJ2ZXItc2lkZSByZW5kZXJlZCBtYXRJbnB1dCB3aXRoIGEgbGFiZWwgYXR0cmlidXRlIGJ1dCBsYWJlbCBub3Qgc2hvd25cbiAgICAgIC8vICh1c2VkIGFzIGEgcHVyZSBDU1Mgc3RhbmQtaW4gZm9yIG1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCkuXG4gICAgICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlclxuICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgIHRvcDogJGluZml4LW1hcmdpbi10b3AgKyAkaW5maXgtcGFkZGluZztcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIHtcbiAgICAgIC8vIFdlIHdhbnQgdGhlIHVuZGVybGluZSB0byBzdGFydCBhdCB0aGUgZW5kIG9mIHRoZSBjb250ZW50IGJveCwgbm90IHRoZSBwYWRkaW5nIGJveCxcbiAgICAgIC8vIHNvIHdlIG1vdmUgaXQgdXAgYnkgdGhlIHBhZGRpbmcgYW1vdW50LlxuICAgICAgYm90dG9tOiAkd3JhcHBlci1wYWRkaW5nLWJvdHRvbTtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXIge1xuICAgICAgbWFyZ2luLXRvcDogJHN1YnNjcmlwdC1tYXJnaW4tdG9wO1xuXG4gICAgICAvLyBXZSB3YW50IHRoZSBzdWJzY3JpcHQgdG8gc3RhcnQgYXQgdGhlIGVuZCBvZiB0aGUgY29udGVudCBib3gsIG5vdCB0aGUgcGFkZGluZyBib3gsXG4gICAgICAvLyBzbyB3ZSBtb3ZlIGl0IHVwIGJ5IHRoZSBwYWRkaW5nIGFtb3VudCAoYWRqdXN0ZWQgZm9yIHRoZSBzbWFsbGVyIGZvbnQgc2l6ZSk7XG4gICAgICB0b3A6IGNhbGMoMTAwJSAtICN7JHdyYXBwZXItcGFkZGluZy1ib3R0b20gLyAkc3Vic2NyaXB0LWZvbnQtc2NhbGV9KTtcbiAgICB9XG4gIH1cblxuICAvLyB0cmFuc2xhdGVaIGNhdXNlcyB0aGUgbGFiZWwgdG8gbm90IGFwcGVhciB3aGlsZSBwcmludGluZywgc28gd2Ugb3ZlcnJpZGUgaXQgdG8gbm90XG4gIC8vIGFwcGx5IHRyYW5zbGF0ZVogd2hpbGUgcHJpbnRpbmdcbiAgQG1lZGlhIHByaW50IHtcbiAgICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kge1xuICAgICAgJi5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQge1xuICAgICAgICAmLm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsXG4gICAgICAgIC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nLXByaW50KFxuICAgICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMCB3aWxsIHJlbHkgb24gQXV0b2ZpbGxNb25pdG9yIGluc3RlYWQuXG4gICAgICAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlclxuICAgICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmctcHJpbnQoXG4gICAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXJ2ZXItc2lkZSByZW5kZXJlZCBtYXRJbnB1dCB3aXRoIGEgbGFiZWwgYXR0cmlidXRlIGJ1dCBsYWJlbCBub3Qgc2hvd25cbiAgICAgICAgLy8gKHVzZWQgYXMgYSBwdXJlIENTUyBzdGFuZC1pbiBmb3IgbWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0KS5cbiAgICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJcbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nLXByaW50KFxuICAgICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5cbi8vIFRoZW1lIHN0eWxlcyB0aGF0IG9ubHkgYXBwbHkgdG8gdGhlIG91dGxpbmUgYXBwZWFyYW5jZSBvZiB0aGUgZm9ybS1maWVsZC5cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuXG4gICRsYWJlbC1kaXNhYmxlZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgJG91dGxpbmUtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlciwgaWYoJGlzLWRhcmstdGhlbWUsIDAuMywgMC4xMikpO1xuICAkb3V0bGluZS1jb2xvci1ob3ZlcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyLCBpZigkaXMtZGFyay10aGVtZSwgMSwgMC44NykpO1xuICAkb3V0bGluZS1jb2xvci1wcmltYXJ5OiBtYXQtY29sb3IoJHByaW1hcnkpO1xuICAkb3V0bGluZS1jb2xvci1hY2NlbnQ6IG1hdC1jb2xvcigkYWNjZW50KTtcbiAgJG91dGxpbmUtY29sb3Itd2FybjogbWF0LWNvbG9yKCR3YXJuKTtcbiAgJG91dGxpbmUtY29sb3ItZGlzYWJsZWQ6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlciwgaWYoJGlzLWRhcmstdGhlbWUsIDAuMTUsIDAuMDYpKTtcblxuICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIHtcbiAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gICAgICBjb2xvcjogJG91dGxpbmUtY29sb3I7XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sge1xuICAgICAgY29sb3I6ICRvdXRsaW5lLWNvbG9yLWhvdmVyO1xuICAgIH1cblxuICAgICYubWF0LWZvY3VzZWQge1xuICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sge1xuICAgICAgICBjb2xvcjogJG91dGxpbmUtY29sb3ItcHJpbWFyeTtcbiAgICAgIH1cblxuICAgICAgJi5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIHtcbiAgICAgICAgY29sb3I6ICRvdXRsaW5lLWNvbG9yLWFjY2VudDtcbiAgICAgIH1cblxuICAgICAgJi5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayB7XG4gICAgICAgIGNvbG9yOiAkb3V0bGluZS1jb2xvci13YXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENsYXNzIHJlcGVhdGVkIHNvIHRoYXQgcnVsZSBpcyBzcGVjaWZpYyBlbm91Z2ggdG8gb3ZlcnJpZGUgZm9jdXNlZCBhY2NlbnQgY29sb3IgY2FzZS5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWludmFsaWQubWF0LWZvcm0tZmllbGQtaW52YWxpZCB7XG4gICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayB7XG4gICAgICAgIGNvbG9yOiAkb3V0bGluZS1jb2xvci13YXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQge1xuICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgY29sb3I6ICRsYWJlbC1kaXNhYmxlZC1jb2xvcjtcbiAgICAgIH1cblxuICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICAgICAgICBjb2xvcjogJG91dGxpbmUtY29sb3ItZGlzYWJsZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIFVzZWQgdG8gbWFrZSBpbnN0YW5jZXMgb2YgdGhlIF9tYXQtZm9ybS1maWVsZC1sYWJlbC1mbG9hdGluZyBtaXhpbiBuZWdsaWdpYmx5IGRpZmZlcmVudCxcbi8vIGFuZCBwcmV2ZW50IEdvb2dsZSdzIENTUyBPcHRpbWl6ZXIgZnJvbSBjb2xsYXBzaW5nIHRoZSBkZWNsYXJhdGlvbnMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugc29tZVxuLy8gb2YgdGhlIHNlbGVjdG9ycyBjb250YWluIHBzZXVkby1jbGFzc2VzIG5vdCByZWNvZ25pemVkIGluIGFsbCBicm93c2Vycy4gSWYgYSBicm93c2VyIGVuY291bnRlcnNcbi8vIGFuIHVua25vd24gcHNldWRvLWNsYXNzIGl0IHdpbGwgZGlzY2FyZCB0aGUgZW50aXJlIHJ1bGUgc2V0LlxuJG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZGVkdXBlOiAwO1xuXG4vLyBBcHBsaWVzIGEgZmxvYXRpbmcgbGFiZWwgYWJvdmUgdGhlIGZvcm0gZmllbGQgY29udHJvbCBpdHNlbGYuXG5AbWl4aW4gX21hdC1mb3JtLWZpZWxkLW91dGxpbmUtbGFiZWwtZmxvYXRpbmcoJGZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCkge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRpbmZpeC1tYXJnaW4tdG9wIC0gJGluZml4LXBhZGRpbmcgKyAkbWF0LWZvcm0tZmllbGQtb3V0bGluZS1kZWR1cGUpXG4gIHNjYWxlKCRmb250LXNjYWxlKTtcbiAgd2lkdGg6IDEwMCUgLyAkZm9udC1zY2FsZSArICRtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWRlZHVwZTtcblxuICAkbWF0LWZvcm0tZmllbGQtb3V0bGluZS1kZWR1cGU6ICRtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWRlZHVwZSArIDAuMDAwMDEgIWdsb2JhbDtcbn1cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC8vIFRoZSB1bml0LWxlc3MgbGluZS1oZWlnaHQgZnJvbSB0aGUgZm9udCBjb25maWcuXG4gICRsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGlucHV0KTtcbiAgLy8gVGhlIGFtb3VudCB0byBzY2FsZSB0aGUgZm9udCBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsIGFuZCBzdWJzY3JpcHQuXG4gICRzdWJzY3JpcHQtZm9udC1zY2FsZTogMC43NTtcbiAgLy8gVGhlIHBhZGRpbmcgYWJvdmUgYW5kIGJlbG93IHRoZSBpbmZpeC5cbiAgJGluZml4LXBhZGRpbmc6IDFlbTtcbiAgLy8gVGhlIG1hcmdpbiBhcHBsaWVkIHRvIHRoZSBmb3JtLWZpZWxkLWluZml4IHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBmbG9hdGluZyBsYWJlbC5cbiAgJGluZml4LW1hcmdpbi10b3A6IDFlbSAqICRsaW5lLWhlaWdodCAqICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcbiAgLy8gVGhlIHNwYWNlIGJldHdlZW4gdGhlIGJvdHRvbSBvZiB0aGUgLm1hdC1mb3JtLWZpZWxkLWZsZXggYXJlYSBhbmQgdGhlIHN1YnNjcmlwdCB3cmFwcGVyLlxuICAvLyBNb2NrcyBzaG93IGhhbGYgb2YgdGhlIHRleHQgc2l6ZSwgYnV0IHRoaXMgbWFyZ2luIGlzIGFwcGxpZWQgdG8gYW4gZWxlbWVudCB3aXRoIHRoZSBzdWJzY3JpcHRcbiAgLy8gdGV4dCBmb250IHNpemUsIHNvIHdlIG5lZWQgdG8gZGl2aWRlIGJ5IHRoZSBzY2FsZSBmYWN0b3IgdG8gbWFrZSBpdCBoYWxmIG9mIHRoZSBvcmlnaW5hbCB0ZXh0XG4gIC8vIHNpemUuXG4gICRzdWJzY3JpcHQtbWFyZ2luLXRvcDogMC41ZW0gLyAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG4gIC8vIFRoZSBwYWRkaW5nIGFwcGxpZWQgdG8gdGhlIGZvcm0tZmllbGQtd3JhcHBlciB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgc3Vic2NyaXB0LCBzaW5jZSBpdCdzXG4gIC8vIGFic29sdXRlbHkgcG9zaXRpb25lZC4gVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBzdWJzY3JpcHQncyBtYXJnaW4gYW5kIGxpbmUtaGVpZ2h0LCBidXQgd2VcbiAgLy8gbmVlZCB0byBtdWx0aXBseSBieSB0aGUgc3Vic2NyaXB0IGZvbnQgc2NhbGUgZmFjdG9yIHNpbmNlIHRoZSB3cmFwcGVyIGhhcyBhIGxhcmdlciBmb250IHNpemUuXG4gICR3cmFwcGVyLXBhZGRpbmctYm90dG9tOiAoJHN1YnNjcmlwdC1tYXJnaW4tdG9wICsgJGxpbmUtaGVpZ2h0KSAqICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcbiAgLy8gVGhlIGFtb3VudCB3ZSBvZmZzZXQgdGhlIGxhYmVsIGZyb20gdGhlIGlucHV0IHRleHQgaW4gdGhlIG91dGxpbmUgYXBwZWFyYW5jZS5cbiAgJG91dGxpbmUtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQ6IC0wLjI1ZW07XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgIHBhZGRpbmc6ICRpbmZpeC1wYWRkaW5nIDAgJGluZml4LXBhZGRpbmcgMDtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgdG9wOiAkaW5maXgtbWFyZ2luLXRvcCArICRpbmZpeC1wYWRkaW5nO1xuICAgICAgbWFyZ2luLXRvcDogJG91dGxpbmUtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQ7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQge1xuICAgICAgJi5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLFxuICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtb3V0bGluZS1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nICsgJG91dGxpbmUtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQsXG4gICAgICAgICAgICAgICAgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXJ2ZXItc2lkZSByZW5kZXJlZCBtYXRJbnB1dCB3aXRoIGEgbGFiZWwgYXR0cmlidXRlIGJ1dCBsYWJlbCBub3Qgc2hvd25cbiAgICAgIC8vICh1c2VkIGFzIGEgcHVyZSBDU1Mgc3RhbmQtaW4gZm9yIG1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCkuXG4gICAgICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlclxuICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLW91dGxpbmUtbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZyArICRvdXRsaW5lLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0LFxuICAgICAgICAgICAgICAgICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cblxuLy8gVGhlbWUgc3R5bGVzIHRoYXQgb25seSBhcHBseSB0byB0aGUgc3RhbmRhcmQgYXBwZWFyYW5jZSBvZiB0aGUgZm9ybS1maWVsZC5cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLXN0YW5kYXJkLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuXG4gICR1bmRlcmxpbmUtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlciwgaWYoJGlzLWRhcmstdGhlbWUsIDAuNywgMC40MikpO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIHtcbiAgICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtY29sb3I7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIHtcbiAgICAgIEBpbmNsdWRlIG1hdC1jb250cm9sLWRpc2FibGVkLXVuZGVybGluZSgkdW5kZXJsaW5lLWNvbG9yKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLXN0YW5kYXJkLXR5cG9ncmFwaHkoJGNvbmZpZykge31cblxuXG4vLyBUaGVtZSBzdHlsZXMgdGhhdCBhcHBseSB0byBhbGwgYXBwZWFyYW5jZXMgb2YgdGhlIGZvcm0tZmllbGQuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuXG4gIC8vIExhYmVsIGNvbG9ycy4gUmVxdWlyZWQgaXMgdXNlZCBmb3IgdGhlIGAqYCBzdGFyIHNob3duIGluIHRoZSBsYWJlbC5cbiAgJGxhYmVsLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0LCBpZigkaXMtZGFyay10aGVtZSwgMC43LCAwLjYpKTtcbiAgJGZvY3VzZWQtbGFiZWwtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgdGV4dCk7XG4gICRyZXF1aXJlZC1sYWJlbC1jb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIHRleHQpO1xuXG4gIC8vIFVuZGVybGluZSBjb2xvcnMuXG4gICR1bmRlcmxpbmUtY29sb3ItYmFzZTogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyLCBpZigkaXMtZGFyay10aGVtZSwgMSwgMC44NykpO1xuICAkdW5kZXJsaW5lLWNvbG9yLWFjY2VudDogbWF0LWNvbG9yKCRhY2NlbnQsIHRleHQpO1xuICAkdW5kZXJsaW5lLWNvbG9yLXdhcm46IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gICR1bmRlcmxpbmUtZm9jdXNlZC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCB0ZXh0KTtcblxuICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgIGNvbG9yOiAkbGFiZWwtY29sb3I7XG4gIH1cblxuICAubWF0LWhpbnQge1xuICAgIGNvbG9yOiAkbGFiZWwtY29sb3I7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICBjb2xvcjogJGZvY3VzZWQtbGFiZWwtY29sb3I7XG5cbiAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgY29sb3I6ICR1bmRlcmxpbmUtY29sb3ItYWNjZW50O1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgY29sb3I6ICR1bmRlcmxpbmUtY29sb3Itd2FybjtcbiAgICB9XG4gIH1cblxuICAubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlciB7XG4gICAgY29sb3I6ICRyZXF1aXJlZC1sYWJlbC1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtY29sb3ItYmFzZTtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWZvY3VzZWQtY29sb3I7XG5cbiAgICAgICYubWF0LWFjY2VudCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtY29sb3ItYWNjZW50O1xuICAgICAgfVxuXG4gICAgICAmLm1hdC13YXJuIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1jb2xvci13YXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkge1xuICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXIge1xuICAgICAgY29sb3I6ICR1bmRlcmxpbmUtZm9jdXNlZC1jb2xvcjtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlciB7XG4gICAgICBjb2xvcjogJHVuZGVybGluZS1jb2xvci1hY2NlbnQ7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVyIHtcbiAgICAgIGNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLXdhcm47XG4gICAgfVxuICB9XG5cbiAgLy8gU3R5bGluZyBmb3IgdGhlIGVycm9yIHN0YXRlIG9mIHRoZSBmb3JtIGZpZWxkLiBOb3RlIHRoYXQgd2hpbGUgdGhlIHNhbWUgY2FuIGJlXG4gIC8vIGFjaGlldmVkIHdpdGggdGhlIG5nLSogY2xhc3Nlcywgd2UgdXNlIHRoaXMgYXBwcm9hY2ggaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgdGhlIHNhbWVcbiAgLy8gbG9naWMgaXMgdXNlZCB0byBzdHlsZSB0aGUgZXJyb3Igc3RhdGUgYW5kIHRvIHNob3cgdGhlIGVycm9yIG1lc3NhZ2VzLlxuICAubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgIGNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLXdhcm47XG5cbiAgICAgICYubWF0LWFjY2VudCxcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXIge1xuICAgICAgICBjb2xvcjogJHVuZGVybGluZS1jb2xvci13YXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsXG4gICAgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtYWNjZW50IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtY29sb3Itd2FybjtcbiAgICB9XG4gIH1cblxuICAubWF0LWVycm9yIHtcbiAgICBjb2xvcjogJHVuZGVybGluZS1jb2xvci13YXJuO1xuICB9XG5cbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtbGVnYWN5LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLXN0YW5kYXJkLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLWZpbGwtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGVtZSgkdGhlbWUpO1xufVxuXG4vLyBVc2VkIHRvIG1ha2UgaW5zdGFuY2VzIG9mIHRoZSBfbWF0LWZvcm0tZmllbGQtbGFiZWwtZmxvYXRpbmcgbWl4aW4gbmVnbGlnaWJseSBkaWZmZXJlbnQsXG4vLyBhbmQgcHJldmVudCBHb29nbGUncyBDU1MgT3B0aW1pemVyIGZyb20gY29sbGFwc2luZyB0aGUgZGVjbGFyYXRpb25zLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHNvbWVcbi8vIG9mIHRoZSBzZWxlY3RvcnMgY29udGFpbiBwc2V1ZG8tY2xhc3NlcyBub3QgcmVjb2duaXplZCBpbiBhbGwgYnJvd3NlcnMuIElmIGEgYnJvd3NlciBlbmNvdW50ZXJzXG4vLyBhbiB1bmtub3duIHBzZXVkby1jbGFzcyBpdCB3aWxsIGRpc2NhcmQgdGhlIGVudGlyZSBydWxlIHNldC5cbiRtYXQtZm9ybS1maWVsZC1kZWR1cGU6IDA7XG5cbi8vIEFwcGxpZXMgYSBmbG9hdGluZyBsYWJlbCBhYm92ZSB0aGUgZm9ybSBmaWVsZCBjb250cm9sIGl0c2VsZi5cbkBtaXhpbiBfbWF0LWZvcm0tZmllbGQtbGFiZWwtZmxvYXRpbmcoJGZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCkge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRpbmZpeC1tYXJnaW4tdG9wIC0gJGluZml4LXBhZGRpbmcgKyAkbWF0LWZvcm0tZmllbGQtZGVkdXBlKVxuICAgICAgICAgICAgIHNjYWxlKCRmb250LXNjYWxlKTtcbiAgd2lkdGg6IDEwMCUgLyAkZm9udC1zY2FsZSArICRtYXQtZm9ybS1maWVsZC1kZWR1cGU7XG5cbiAgJG1hdC1mb3JtLWZpZWxkLWRlZHVwZTogJG1hdC1mb3JtLWZpZWxkLWRlZHVwZSArIDAuMDAwMDEgIWdsb2JhbDtcbn1cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAvLyBUaGUgdW5pdC1sZXNzIGxpbmUtaGVpZ2h0IGZyb20gdGhlIGZvbnQgY29uZmlnLlxuICAkbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBpbnB1dCk7XG5cbiAgLy8gVGhlIGFtb3VudCB0byBzY2FsZSB0aGUgZm9udCBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsIGFuZCBzdWJzY3JpcHQuXG4gICRzdWJzY3JpcHQtZm9udC1zY2FsZTogMC43NTtcbiAgLy8gVGhlIGFtb3VudCB0byBzY2FsZSB0aGUgZm9udCBmb3IgdGhlIHByZWZpeCBhbmQgc3VmZml4IGljb25zLlxuICAkcHJlZml4LXN1ZmZpeC1pY29uLWZvbnQtc2NhbGU6IDEuNTtcblxuICAvLyBUaGUgcGFkZGluZyBvbiB0aGUgaW5maXguIE1vY2tzIHNob3cgaGFsZiBvZiB0aGUgdGV4dCBzaXplLlxuICAkaW5maXgtcGFkZGluZzogMC41ZW07XG4gIC8vIFRoZSBtYXJnaW4gYXBwbGllZCB0byB0aGUgZm9ybS1maWVsZC1pbmZpeCB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgZmxvYXRpbmcgbGFiZWwuXG4gICRpbmZpeC1tYXJnaW4tdG9wOiAxZW0gKiAkbGluZS1oZWlnaHQgKiAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG4gIC8vIEZvbnQgc2l6ZSB0byB1c2UgZm9yIHRoZSBsYWJlbCBhbmQgc3Vic2NyaXB0IHRleHQuXG4gICRzdWJzY3JpcHQtZm9udC1zaXplOiAkc3Vic2NyaXB0LWZvbnQtc2NhbGUgKiAxMDAlO1xuICAvLyBGb250IHNpemUgdG8gdXNlIGZvciB0aGUgZm9yIHRoZSBwcmVmaXggYW5kIHN1ZmZpeCBpY29ucy5cbiAgJHByZWZpeC1zdWZmaXgtaWNvbi1mb250LXNpemU6ICRwcmVmaXgtc3VmZml4LWljb24tZm9udC1zY2FsZSAqIDEwMCU7XG4gIC8vIFRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBib3R0b20gb2YgdGhlIC5tYXQtZm9ybS1maWVsZC1mbGV4IGFyZWEgYW5kIHRoZSBzdWJzY3JpcHQgd3JhcHBlci5cbiAgLy8gTW9ja3Mgc2hvdyBoYWxmIG9mIHRoZSB0ZXh0IHNpemUsIGJ1dCB0aGlzIG1hcmdpbiBpcyBhcHBsaWVkIHRvIGFuIGVsZW1lbnQgd2l0aCB0aGUgc3Vic2NyaXB0XG4gIC8vIHRleHQgZm9udCBzaXplLCBzbyB3ZSBuZWVkIHRvIGRpdmlkZSBieSB0aGUgc2NhbGUgZmFjdG9yIHRvIG1ha2UgaXQgaGFsZiBvZiB0aGUgb3JpZ2luYWwgdGV4dFxuICAvLyBzaXplLlxuICAkc3Vic2NyaXB0LW1hcmdpbi10b3A6IDAuNWVtIC8gJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuICAvLyBUaGUgcGFkZGluZyBhcHBsaWVkIHRvIHRoZSBmb3JtLWZpZWxkLXdyYXBwZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIHN1YnNjcmlwdCwgc2luY2UgaXQnc1xuICAvLyBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQuIFRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgc3Vic2NyaXB0J3MgbWFyZ2luIGFuZCBsaW5lLWhlaWdodCwgYnV0IHdlXG4gIC8vIG5lZWQgdG8gbXVsdGlwbHkgYnkgdGhlIHN1YnNjcmlwdCBmb250IHNjYWxlIGZhY3RvciBzaW5jZSB0aGUgd3JhcHBlciBoYXMgYSBsYXJnZXIgZm9udCBzaXplLlxuICAkd3JhcHBlci1wYWRkaW5nLWJvdHRvbTogKCRzdWJzY3JpcHQtbWFyZ2luLXRvcCArICRsaW5lLWhlaWdodCkgKiAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG5cbiAgLm1hdC1mb3JtLWZpZWxkIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgaW5wdXQpO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICAgIHBhZGRpbmctYm90dG9tOiAkd3JhcHBlci1wYWRkaW5nLWJvdHRvbTtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1wcmVmaXgsXG4gIC5tYXQtZm9ybS1maWVsZC1zdWZmaXgge1xuICAgIC8vIEFsbG93IGljb25zIGluIGEgcHJlZml4IG9yIHN1ZmZpeCB0byBhZGFwdCB0byB0aGUgY29ycmVjdCBzaXplLlxuICAgIC5tYXQtaWNvbiB7XG4gICAgICBmb250LXNpemU6ICRwcmVmaXgtc3VmZml4LWljb24tZm9udC1zaXplO1xuICAgICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgICB9XG5cbiAgICAvLyBBbGxvdyBpY29uIGJ1dHRvbnMgaW4gYSBwcmVmaXggb3Igc3VmZml4IHRvIGFkYXB0IHRvIHRoZSBjb3JyZWN0IHNpemUuXG4gICAgLm1hdC1pY29uLWJ1dHRvbiB7XG4gICAgICBoZWlnaHQ6ICRwcmVmaXgtc3VmZml4LWljb24tZm9udC1zY2FsZSAqIDFlbTtcbiAgICAgIHdpZHRoOiAkcHJlZml4LXN1ZmZpeC1pY29uLWZvbnQtc2NhbGUgKiAxZW07XG5cbiAgICAgIC5tYXQtaWNvbiB7XG4gICAgICAgIGhlaWdodDogJGxpbmUtaGVpZ2h0ICogMWVtO1xuICAgICAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgcGFkZGluZzogJGluZml4LXBhZGRpbmcgMDtcbiAgICAvLyBUaHJvd3Mgb2ZmIHRoZSBiYXNlbGluZSBpZiB3ZSBkbyBpdCBhcyBhIHJlYWwgbWFyZ2luLCBzbyB3ZSBkbyBpdCBhcyBhIGJvcmRlciBpbnN0ZWFkLlxuICAgIGJvcmRlci10b3A6ICRpbmZpeC1tYXJnaW4tdG9wIHNvbGlkIHRyYW5zcGFyZW50O1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCB7XG4gICAgJi5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLFxuICAgIC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgIH1cblxuICAgIC8vIFNlcnZlci1zaWRlIHJlbmRlcmVkIG1hdElucHV0IHdpdGggYSBsYWJlbCBhdHRyaWJ1dGUgYnV0IGxhYmVsIG5vdCBzaG93blxuICAgIC8vICh1c2VkIGFzIGEgcHVyZSBDU1Mgc3RhbmQtaW4gZm9yIG1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCkuXG4gICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJcbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIHtcbiAgICB0b3A6IC0kaW5maXgtbWFyZ2luLXRvcDtcbiAgICBwYWRkaW5nLXRvcDogJGluZml4LW1hcmdpbi10b3A7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgIHRvcDogJGluZml4LW1hcmdpbi10b3AgKyAkaW5maXgtcGFkZGluZztcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUge1xuICAgIC8vIFdlIHdhbnQgdGhlIHVuZGVybGluZSB0byBzdGFydCBhdCB0aGUgZW5kIG9mIHRoZSBjb250ZW50IGJveCwgbm90IHRoZSBwYWRkaW5nIGJveCxcbiAgICAvLyBzbyB3ZSBtb3ZlIGl0IHVwIGJ5IHRoZSBwYWRkaW5nIGFtb3VudC5cbiAgICBib3R0b206ICR3cmFwcGVyLXBhZGRpbmctYm90dG9tO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyIHtcbiAgICBmb250LXNpemU6ICRzdWJzY3JpcHQtZm9udC1zaXplO1xuICAgIG1hcmdpbi10b3A6ICRzdWJzY3JpcHQtbWFyZ2luLXRvcDtcblxuICAgIC8vIFdlIHdhbnQgdGhlIHN1YnNjcmlwdCB0byBzdGFydCBhdCB0aGUgZW5kIG9mIHRoZSBjb250ZW50IGJveCwgbm90IHRoZSBwYWRkaW5nIGJveCxcbiAgICAvLyBzbyB3ZSBtb3ZlIGl0IHVwIGJ5IHRoZSBwYWRkaW5nIGFtb3VudCAoYWRqdXN0ZWQgZm9yIHRoZSBzbWFsbGVyIGZvbnQgc2l6ZSk7XG4gICAgdG9wOiBjYWxjKDEwMCUgLSAjeyR3cmFwcGVyLXBhZGRpbmctYm90dG9tIC8gJHN1YnNjcmlwdC1mb250LXNjYWxlfSk7XG4gIH1cblxuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1sZWdhY3ktdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtc3RhbmRhcmQtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtZmlsbC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1vdXRsaW5lLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG59XG5cblxuXG5cblxuQG1peGluIG1hdC10cmVlLXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtdHJlZSB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnY2FyZCcpO1xuICB9XG5cbiAgLm1hdC10cmVlLW5vZGUsXG4gIC5tYXQtbmVzdGVkLXRyZWUtbm9kZSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC10cmVlLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXRyZWUge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LXRyZWUtbm9kZSxcbiAgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlIHtcbiAgICBmb250LXdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMSk7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSk7XG4gIH1cbn1cblxuXG5cbi8vIEluY2x1ZGVzIGFsbCBvZiB0aGUgdHlwb2dyYXBoaWMgc3R5bGVzLlxuQG1peGluIGFuZ3VsYXItbWF0ZXJpYWwtdHlwb2dyYXBoeSgkY29uZmlnOiBudWxsKSB7XG4gIEBpZiAkY29uZmlnID09IG51bGwge1xuICAgICRjb25maWc6IG1hdC10eXBvZ3JhcGh5LWNvbmZpZygpO1xuICB9XG5cbiAgQGluY2x1ZGUgbWF0LWJhZGdlLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1iYXNlLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1hdXRvY29tcGxldGUtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWJvdHRvbS1zaGVldC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtYnV0dG9uLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1idXR0b24tdG9nZ2xlLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1jYXJkLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1jaGVja2JveC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtY2hpcHMtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXRhYmxlLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1kYXRlcGlja2VyLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1kaWFsb2ctdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWV4cGFuc2lvbi1wYW5lbC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZ3JpZC1saXN0LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1pY29uLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1pbnB1dC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtbWVudS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtcGFnaW5hdG9yLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1wcm9ncmVzcy1iYXItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXByb2dyZXNzLXNwaW5uZXItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXJhZGlvLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1zZWxlY3QtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXNpZGVuYXYtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXNsaWRlLXRvZ2dsZS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtc2xpZGVyLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1zdGVwcGVyLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1zb3J0LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC10YWJzLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC10b29sYmFyLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC10b29sdGlwLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1saXN0LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1vcHRpb24tdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LW9wdGdyb3VwLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1zbmFjay1iYXItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXRyZWUtdHlwb2dyYXBoeSgkY29uZmlnKTtcbn1cblxuXG4vLyBNaXhpbiB0aGF0IHJlbmRlcnMgYWxsIG9mIHRoZSBjb3JlIHN0eWxlcyB0aGF0IGFyZSBub3QgdGhlbWUtZGVwZW5kZW50LlxuQG1peGluIG1hdC1jb3JlKCR0eXBvZ3JhcGh5LWNvbmZpZzogbnVsbCkge1xuICBAaW5jbHVkZSBhbmd1bGFyLW1hdGVyaWFsLXR5cG9ncmFwaHkoJHR5cG9ncmFwaHktY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXJpcHBsZSgpO1xuICBAaW5jbHVkZSBjZGstYTExeSgpO1xuICBAaW5jbHVkZSBjZGstb3ZlcmxheSgpO1xuICBAaW5jbHVkZSBjZGstdGV4dC1maWVsZCgpO1xufVxuXG4vLyBNaXhpbiB0aGF0IHJlbmRlcnMgYWxsIG9mIHRoZSBjb3JlIHN0eWxlcyB0aGF0IGRlcGVuZCBvbiB0aGUgdGhlbWUuXG5AbWl4aW4gbWF0LWNvcmUtdGhlbWUoJHRoZW1lKSB7XG4gIEBpbmNsdWRlIG1hdC1yaXBwbGUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LW9wdGlvbi10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtb3B0Z3JvdXAtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXBzZXVkby1jaGVja2JveC10aGVtZSgkdGhlbWUpO1xuXG4gIC8vIFByb3ZpZGVzIGV4dGVybmFsIENTUyBjbGFzc2VzIGZvciBlYWNoIGVsZXZhdGlvbiB2YWx1ZS4gRWFjaCBDU1MgY2xhc3MgaXMgZm9ybWF0dGVkIGFzXG4gIC8vIGBtYXQtZWxldmF0aW9uLXokelZhbHVlYCB3aGVyZSBgJHpWYWx1ZWAgY29ycmVzcG9uZHMgdG8gdGhlIHotc3BhY2UgdG8gd2hpY2ggdGhlIGVsZW1lbnQgaXNcbiAgLy8gZWxldmF0ZWQuXG4gIEBmb3IgJHpWYWx1ZSBmcm9tIDAgdGhyb3VnaCAyNCB7XG4gICAgLiN7JF9tYXQtZWxldmF0aW9uLXByZWZpeH0jeyR6VmFsdWV9IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKCR6VmFsdWUsICR0aGVtZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gV3JhcHBlciBlbGVtZW50IHRoYXQgcHJvdmlkZXMgdGhlIHRoZW1lIGJhY2tncm91bmQgd2hlbiB0aGUgdXNlcidzIGNvbnRlbnQgaXNuJ3RcbiAgLy8gaW5zaWRlIG9mIGEgYG1hdC1zaWRlbmF2LWNvbnRhaW5lcmAuIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIGV4Y2x1ZGUgdGhlIGFtcGVyc2FuZFxuICAvLyBzZWxlY3RvciBpbiBjYXNlIHRoZSBtaXhpbiBpcyBpbmNsdWRlZCBhdCB0aGUgdG9wIGxldmVsLlxuICAubWF0LWFwcC1iYWNrZ3JvdW5kI3tpZigmLCAnLCAmLm1hdC1hcHAtYmFja2dyb3VuZCcsICcnKX0ge1xuICAgICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgYmFja2dyb3VuZCk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cblxuICAvLyBNYXJrZXIgdGhhdCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB1c2VyIGhhcyBhZGRlZCBhIHRoZW1lIHRvIHRoZWlyIHBhZ2UuXG4gIEBhdC1yb290IHtcbiAgICAubWF0LXRoZW1lLWxvYWRlZC1tYXJrZXIge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuQG1peGluIG1hdC1kaXZpZGVyLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtZGl2aWRlciB7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxuXG4gIC5tYXQtZGl2aWRlci12ZXJ0aWNhbCB7XG4gICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG59XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8vIENyZWF0ZSBhIHRoZW1lLlxuQG1peGluIGFuZ3VsYXItbWF0ZXJpYWwtdGhlbWUoJHRoZW1lKSB7XG4gIEBpbmNsdWRlIG1hdC1jb3JlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1hdXRvY29tcGxldGUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWJhZGdlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1ib3R0b20tc2hlZXQtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWJ1dHRvbi10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtYnV0dG9uLXRvZ2dsZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtY2FyZC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtY2hlY2tib3gtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWNoaXBzLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC10YWJsZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZGF0ZXBpY2tlci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZGlhbG9nLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1kaXZpZGVyLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1leHBhbnNpb24tcGFuZWwtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWdyaWQtbGlzdC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtaWNvbi10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtaW5wdXQtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWxpc3QtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LW1lbnUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXBhZ2luYXRvci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtcHJvZ3Jlc3MtYmFyLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1wcm9ncmVzcy1zcGlubmVyLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1yYWRpby10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtc2VsZWN0LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1zaWRlbmF2LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1zbGlkZS10b2dnbGUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXNsaWRlci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtc3RlcHBlci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtc29ydC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtdGFicy10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtdG9vbGJhci10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtdG9vbHRpcC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtdHJlZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtc25hY2stYmFyLXRoZW1lKCR0aGVtZSk7XG59XG4iLCJAaW1wb3J0IFwibGlicy91aS9zcmMvbGliL21peGluc1wiO1xuQGltcG9ydCBcIn5AYW5ndWxhci9tYXRlcmlhbC90aGVtaW5nXCI7XG5oMyB7XG4gICAgY29sb3I6ICMwMDAwMDA7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgcGFkZGluZzogMjBweCAwIDAgMDtcbiAgICBtYXJnaW46IDA7XG4gICAgc3BhbiB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiAxMDA7XG4gICAgfVxufVxuLnJlc3VsdC1jb250YWluZXIge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgQGluY2x1ZGUgbWF0LWVsZXZhdGlvbigwKTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgLmNhcmQ6aG92ZXJ7XG4gICAgICAgIGJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4yKSAwcHggMnB4IDIxcHg7XG4gICAgICAgIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4zcyBlYXNlLWluLW91dDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIH1cbiAgICAucmVzdWx0LXJvdyB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBjbGVhcjogYm90aDtcbiAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICAgICAgXG4gICAgICAgIGltZy5yZWN1cnJpbmctaW5mby1pY29uIHtcbiAgICAgICAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNHB4O1xuICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgICAgfVxuXG4gICAgICAgICYuZGF0ZXRpbWUge1xuICAgICAgICAgICAgcGFkZGluZzogMTVweCAwO1xuICAgICAgICAgICAgY29sb3I6ICMwMDA7XG4gICAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICAuc3RhdHVzLWJsb2NrIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLnN0YXR1cy1ibG9jayA+IGRpdntcbiAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICAgICAgICAgICAgICBzcGFue1xuICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gICAgIFxuICAgICAgICB9XG5cbiAgICAgICAgJi5zdGF0dXMge1xuICAgICAgICAgICAgcGFkZGluZzogMTZweCAxOHB4O1xuICAgICAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgICAgICAgICAgICAgLm1lc3NhZ2Uge1xuICAgICAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICAgICAgICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IHN1YjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNXB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC50aW1lIHtcbiAgICAgICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgICAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcCB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiA4OHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYucGFuZWwge1xuICAgICAgICAgICAgcGFkZGluZzogMjBweCAxOHB4O1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgICAgICBib3gtc2hhZG93OiAwcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgICAgICAgfVxuXG4gICAgICAgICYudGl0bGUge1xuICAgICAgICAgICAgY29sb3I6ICMwMDA7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMjZweDtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxMjBweDtcbiAgICAgICAgICAgIC50eXBlLXRleHQge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxNXB4O1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwIDEwcHg7XG4gICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgICAgICAgICAgICAgIG1heC1oZWlnaHQ6IDI0cHg7XG4gICAgICAgICAgICAgICAgJi5pbnRlcm5hbCB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMzNCNkY7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJi5leHRlcm5hbCB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGQUEwODI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICYucGFydG5lciB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMzOUJERjM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICYubXVsdGlyb29te1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZEMDQ4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyAmLm11bHRpcm9vbXtcbiAgICAgICAgICAgICAgICAvLyAgICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRDA0ODtcbiAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidXR0b24ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgICAgICAgICB0b3A6IC02cHg7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICAgICAgY29sb3I6ICMzMzMzMzM7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiA2cHggMTBweDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICAgIH0gICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7XG4gICAgICAgICAgICAgICAgLnR5cGUtdGl0bGV7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA3NXB4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLnRleHQge1xuICAgICAgICAgICAgY29sb3I6ICMzMzMzMzM7XG4gICAgICAgICAgICBwYWRkaW5nOiAxOHB4IDEwcHggMCAwO1xuICAgICAgICAgICAgc3BhbiB7XG4gICAgICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAzcHggMTJweDtcbiAgICAgICAgICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjOTc5Nzk3O1xuICAgICAgICAgICAgICAgICY6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItcmlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgICAgICAgICAgY2xlYXI6IGJvdGg7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogM3B4IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLm1vYmlsZS1vbmx5LWN0YSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgei1pbmRleDogMjtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7ICAgICAgICAgICAgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC5yaWdodC1hcnJvdyB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIHJpZ2h0OiAxMHB4O1xuICAgICAgICAgICAgICAgIHRvcDogNzJweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5cbi5yaWdodC1hcnJvdyB7XG4gICAgd2lkdGg6IDMwcHggIWltcG9ydGFudDtcbiAgICBoZWlnaHQ6IDMwcHggIWltcG9ydGFudDtcbiAgICBAaW5jbHVkZSBtY2staWNvbigkaWNvbi1tZWRpdW0sICdhcnJvdy1yaWdodC5zdmcnKTtcbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIEBpbmNsdWRlIG1jay1pY29uKCRpY29uLXhsYXJnZSwgJ2Fycm93LXJpZ2h0LWxhcmdlLnN2ZycpO1xuICAgIH1cbn1cblxuLmJvb2tpbmctdHotZGlzcGxheSB7XG4gICAgZm9udC1zaXplOiAxLjI1cmVtO1xufVxuXG4ubG9jYWwtdHotZGlzcGxheSB7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGNvbG9yOiAjNzU3NTc1O1xufVxuIl19 */"], changeDetection: 0 }); /*@__PURE__*/ @@ -56428,7 +57347,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons i0.ɵɵelementStart(0, "div"); i0.ɵɵelement(1, "img", 18); i0.ɵɵelementStart(2, "p"); - i0.ɵɵtext(3, "You have no upcoming bookings"); + i0.ɵɵtext(3, "End of list. You have no upcoming bookings"); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } @@ -56488,9 +57407,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (rf & 2) { var ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", ctx_r1.showBookings); + i0.ɵɵproperty("ngIf", ctx_r1.showBookings && ctx_r1.pagination.totalRecords); i0.ɵɵadvance(1); - i0.ɵɵproperty("ngIf", !ctx_r1.showBookings || ctx_r1.lastPage); + i0.ɵɵproperty("ngIf", ctx_r1.lastPage || !ctx_r1.pagination.totalRecords || !ctx_r1.showBookings); } } @@ -57641,89 +58560,111 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons /*! @mckinsey-converge/data-common */ "../../libs/data-common/src/index.ts"); - function BookingCateringComponent_div_4_ng_container_2_Template(rf, ctx) { + function BookingCateringComponent_div_1_Template(rf, ctx) { if (rf & 1) { - var _r6 = i0.ɵɵgetCurrentView(); + var _r4 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementContainerStart(0); - i0.ɵɵelementStart(1, "a-catering-order-list", 9); - i0.ɵɵlistener("order", function BookingCateringComponent_div_4_ng_container_2_Template_a_catering_order_list_order_1_listener($event) { - i0.ɵɵrestoreView(_r6); - var ctx_r5 = i0.ɵɵnextContext(2); - return $event ? ctx_r5.active_order = $event : ctx_r5.newOrder(); - })("event", function BookingCateringComponent_div_4_ng_container_2_Template_a_catering_order_list_event_1_listener($event) { - i0.ɵɵrestoreView(_r6); - var ctx_r7 = i0.ɵɵnextContext(2); - return ctx_r7.handleOrderListEvent($event); + i0.ɵɵelementStart(0, "div", 4); + i0.ɵɵelementStart(1, "a-topbar-header", 5); + i0.ɵɵlistener("closeCallback", function BookingCateringComponent_div_1_Template_a_topbar_header_closeCallback_1_listener() { + i0.ɵɵrestoreView(_r4); + var ctx_r3 = i0.ɵɵnextContext(); + return ctx_r3.closeCallback(); }); i0.ɵɵelementEnd(); - i0.ɵɵelementContainerEnd(); + i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r2 = i0.ɵɵnextContext(2); + var ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵadvance(1); - i0.ɵɵproperty("space_list", ctx_r2.space_list)("catering", ctx_r2.catering_field)("date", ctx_r2.date)("all_day", ctx_r2.all_day)("next_disabled", ctx_r2.next_disabled); + i0.ɵɵproperty("mode", ctx_r0.TopBarHeaderMode.Light)("modal", true)("noSurvey", true); } } - function BookingCateringComponent_div_4_ng_template_3_Template(rf, ctx) { + function BookingCateringComponent_div_3_ng_container_2_Template(rf, ctx) { if (rf & 1) { var _r9 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "a-catering-order-details", 10); - i0.ɵɵlistener("event", function BookingCateringComponent_div_4_ng_template_3_Template_a_catering_order_details_event_0_listener($event) { + i0.ɵɵelementContainerStart(0); + i0.ɵɵelementStart(1, "a-catering-order-list", 10); + i0.ɵɵlistener("order", function BookingCateringComponent_div_3_ng_container_2_Template_a_catering_order_list_order_1_listener($event) { i0.ɵɵrestoreView(_r9); var ctx_r8 = i0.ɵɵnextContext(2); - return ctx_r8.handleOrderEvent($event); + return $event ? ctx_r8.active_order = $event : ctx_r8.newOrder(); + })("event", function BookingCateringComponent_div_3_ng_container_2_Template_a_catering_order_list_event_1_listener($event) { + i0.ɵɵrestoreView(_r9); + var ctx_r10 = i0.ɵɵnextContext(2); + return ctx_r10.handleOrderListEvent($event); }); i0.ɵɵelementEnd(); + i0.ɵɵelementContainerEnd(); } if (rf & 2) { - var ctx_r4 = i0.ɵɵnextContext(2); - i0.ɵɵproperty("space_list", ctx_r4.space_list)("order", ctx_r4.active_order)("dateTz", ctx_r4.dateTz)("duration", ctx_r4.duration)("all_day", ctx_r4.all_day); + var ctx_r5 = i0.ɵɵnextContext(2); + i0.ɵɵadvance(1); + i0.ɵɵproperty("space_list", ctx_r5.space_list)("catering", ctx_r5.catering_field)("date", ctx_r5.date)("all_day", ctx_r5.all_day)("next_disabled", ctx_r5.next_disabled)("placeIntoModal", ctx_r5.placeIntoModal); } } - function BookingCateringComponent_div_4_Template(rf, ctx) { + function BookingCateringComponent_div_3_ng_template_3_Template(rf, ctx) { if (rf & 1) { - i0.ɵɵelementStart(0, "div", 5); - i0.ɵɵelementStart(1, "div", 6); - i0.ɵɵtemplate(2, BookingCateringComponent_div_4_ng_container_2_Template, 2, 5, "ng-container", 7); + var _r12 = i0.ɵɵgetCurrentView(); + + i0.ɵɵelementStart(0, "a-catering-order-details", 11); + i0.ɵɵlistener("event", function BookingCateringComponent_div_3_ng_template_3_Template_a_catering_order_details_event_0_listener($event) { + i0.ɵɵrestoreView(_r12); + var ctx_r11 = i0.ɵɵnextContext(2); + return ctx_r11.handleOrderEvent($event); + }); i0.ɵɵelementEnd(); - i0.ɵɵtemplate(3, BookingCateringComponent_div_4_ng_template_3_Template, 1, 5, "ng-template", null, 8, i0.ɵɵtemplateRefExtractor); + } + + if (rf & 2) { + var ctx_r7 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("space_list", ctx_r7.space_list)("order", ctx_r7.active_order)("dateTz", ctx_r7.dateTz)("duration", ctx_r7.duration)("all_day", ctx_r7.all_day)("placeIntoModal", ctx_r7.placeIntoModal); + } + } + + function BookingCateringComponent_div_3_Template(rf, ctx) { + if (rf & 1) { + i0.ɵɵelementStart(0, "div", 6); + i0.ɵɵelementStart(1, "div", 7); + i0.ɵɵtemplate(2, BookingCateringComponent_div_3_ng_container_2_Template, 2, 6, "ng-container", 8); + i0.ɵɵelementEnd(); + i0.ɵɵtemplate(3, BookingCateringComponent_div_3_ng_template_3_Template, 1, 6, "ng-template", null, 9, i0.ɵɵtemplateRefExtractor); i0.ɵɵelementEnd(); } if (rf & 2) { - var _r3 = i0.ɵɵreference(4); + var _r6 = i0.ɵɵreference(4); - var ctx_r0 = i0.ɵɵnextContext(); + var ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵadvance(2); - i0.ɵɵproperty("ngIf", !ctx_r0.active_order)("ngIfElse", _r3); + i0.ɵɵproperty("ngIf", !ctx_r1.active_order)("ngIfElse", _r6); } } - function BookingCateringComponent_div_5_Template(rf, ctx) { + function BookingCateringComponent_div_4_Template(rf, ctx) { if (rf & 1) { - var _r11 = i0.ɵɵgetCurrentView(); + var _r14 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div", 5); - i0.ɵɵelementStart(1, "booking-confirmation", 11); - i0.ɵɵlistener("callback", function BookingCateringComponent_div_5_Template_booking_confirmation_callback_1_listener() { - i0.ɵɵrestoreView(_r11); - var ctx_r10 = i0.ɵɵnextContext(); - return ctx_r10.closeConfirmation(); + i0.ɵɵelementStart(0, "div", 6); + i0.ɵɵelementStart(1, "booking-confirmation", 12); + i0.ɵɵlistener("callback", function BookingCateringComponent_div_4_Template_booking_confirmation_callback_1_listener() { + i0.ɵɵrestoreView(_r14); + var ctx_r13 = i0.ɵɵnextContext(); + return ctx_r13.closeConfirmation(); }); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - var ctx_r1 = i0.ɵɵnextContext(); + var ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵadvance(1); - i0.ɵɵproperty("confirmed", ctx_r1.confirmed)("loading", ctx_r1.loading)("modal", true)("dataForConfirmation", ctx_r1.dataForConfirmation); + i0.ɵɵproperty("confirmed", ctx_r2.confirmed)("loading", ctx_r2.loading)("placeIntoModal", ctx_r2.placeIntoModal)("modal", true)("dataForConfirmation", ctx_r2.dataForConfirmation); } } @@ -57747,6 +58688,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons /** Emitter for open catering */ _this232.showCatering = new core_1.EventEmitter(); + /** + * placeIntoModal: Input decorator indecate as a flag to adapt component design into a dialog modal + * (by hiding header and adjusting height so that fit into a modal) + */ + + _this232.placeIntoModal = false; _this232.isEditSeries = false; _this232.TopBarHeaderMode = topbar_header_component_1.TopBarHeaderMode; _this232.confirmed = false; @@ -58162,43 +59109,39 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons inputs: { form: "form", booking: "booking", - isOccurence: "isOccurence" + isOccurence: "isOccurence", + placeIntoModal: "placeIntoModal" }, outputs: { event: "event", showCatering: "showCatering" }, features: [i0.ɵɵInheritDefinitionFeature], - decls: 6, - vars: 5, - consts: [[1, "mck-column", "mck-content-expand", "mck-content-page-container", "catering-container", "fullpage-modal"], [1, "header"], [3, "mode", "modal", "noSurvey", "closeCallback"], [1, "mck-column", "mck-center"], ["class", "mck-column mck-content-expand-width", 4, "ngIf"], [1, "mck-column", "mck-content-expand-width"], [1, "catering"], [4, "ngIf", "ngIfElse"], ["order_display", ""], [3, "space_list", "catering", "date", "all_day", "next_disabled", "order", "event"], [3, "space_list", "order", "dateTz", "duration", "all_day", "event"], [3, "confirmed", "loading", "modal", "dataForConfirmation", "callback"]], + decls: 5, + vars: 7, + consts: [[1, "mck-column", "catering-container"], ["class", "header", 4, "ngIf"], [1, "mck-column", "mck-center"], ["class", "mck-column mck-content-expand-width", 4, "ngIf"], [1, "header"], [3, "mode", "modal", "noSurvey", "closeCallback"], [1, "mck-column", "mck-content-expand-width"], [1, "catering"], [4, "ngIf", "ngIfElse"], ["order_display", ""], [3, "space_list", "catering", "date", "all_day", "next_disabled", "placeIntoModal", "order", "event"], [3, "space_list", "order", "dateTz", "duration", "all_day", "placeIntoModal", "event"], [3, "confirmed", "loading", "placeIntoModal", "modal", "dataForConfirmation", "callback"]], template: function BookingCateringComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 0); - i0.ɵɵelementStart(1, "div", 1); - i0.ɵɵelementStart(2, "a-topbar-header", 2); - i0.ɵɵlistener("closeCallback", function BookingCateringComponent_Template_a_topbar_header_closeCallback_2_listener() { - return ctx.closeCallback(); - }); - i0.ɵɵelementEnd(); - i0.ɵɵelementEnd(); - i0.ɵɵelementStart(3, "div", 3); - i0.ɵɵtemplate(4, BookingCateringComponent_div_4_Template, 5, 2, "div", 4); - i0.ɵɵtemplate(5, BookingCateringComponent_div_5_Template, 2, 4, "div", 4); + i0.ɵɵtemplate(1, BookingCateringComponent_div_1_Template, 2, 3, "div", 1); + i0.ɵɵelementStart(2, "div", 2); + i0.ɵɵtemplate(3, BookingCateringComponent_div_3_Template, 5, 2, "div", 3); + i0.ɵɵtemplate(4, BookingCateringComponent_div_4_Template, 2, 5, "div", 3); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { - i0.ɵɵadvance(2); - i0.ɵɵproperty("mode", ctx.TopBarHeaderMode.Light)("modal", true)("noSurvey", true); + i0.ɵɵclassProp("fullpage-modal", !ctx.placeIntoModal)("mck-content-page-container", !ctx.placeIntoModal); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", !ctx.placeIntoModal); i0.ɵɵadvance(2); i0.ɵɵproperty("ngIf", !ctx.confirmed); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.confirmed); } }, - styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\n\n[_nghost-%COMP%], .catering[_ngcontent-%COMP%] {\n height: 100vh;\n width: 100vw;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvdmFycy5zY3NzIiwiYXBwcy9zdGFmZi9zcmMvYXBwL2Jvb2tpbmcvY2F0ZXJpbmcvY2F0ZXJpbmcuY29tcG9uZW50LnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9jYXRlcmluZy9jYXRlcmluZy5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDNUNBOztzQkFBQTtBQzZCQTs7RUFBQTtBQXFDQTs7c0JBQUE7QUFhQTtFQUNJLGdCQTlGTTtFQStGTix1QkE3RmM7QUNzQmxCO0FEMEVBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUpwVUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBS3REQTs7RUFFSSxhQUFBO0VBQ0EsWUFBQTtBRjBDSiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9jYXRlcmluZy9jYXRlcmluZy5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGNvbG9yLWJyYW5kLWVsZWN0cmljLWJsdWU6ICMyMjUxZmY7XG4kY29sb3ItYnJhbmQtZGVlcC1ibHVlOiAjMDUxYzJjO1xuJGNvbG9yLWJyYW5kLWN5YW46ICMwMGE5ZjQ7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kZm9udC1kYXJrOiAjMDAwO1xuJGZvbnQtbGlnaHQ6ICNmZmY7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuJGdyZWVuMTogIzIxOTY1MztcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2xvci1wcmltYXJ5OiAjMTkzN2VhO1xuJGNvbG9yLXByaW1hcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcbiRjb2xvci1wcmltYXJ5LWRhcms6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuXG4kY29sb3Itc2Vjb25kYXJ5OiAjNDI4NUY0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodDogbGlnaHRlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG4kY29sb3Itc2Vjb25kYXJ5LWRhcms6IGRhcmtlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG5cbiRiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuJGZvb3Rlci1iYWNrOiAjMjYzMjM4O1xuJGhlYWRlci1iYWNrOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNTFDMkMsICMwNTFDMkMgNDAlLCAjMEIyNDUzIDYwJSwgIzFGNDBFNiAxMDAlKTtcblxuJGNvbG9yLXRlcm5hcnk6ICMwNTFjMmM7XG5cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuXG4kZm9udC1zdGFjazogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiRoZWFkaW5nLWZvbnQ6IFwiTGFyaXNoTWNLaW5zZXlcIiwgJ0dlb3JnaWEnLCBzZXJpZjtcbiRmb250OiAkZm9udC1zdGFjaztcblxuJGZvbnQtZmFtaWx5LXByaW1hcnk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LXNlY29uZGFyeTogXCJCb3dlclwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiIHNlcmlmO1xuXG4kYmFzZS1zaXplOiAxNnB4O1xuJHRhYmxldC1zaXplOiAxNnB4O1xuJG1vYmlsZS1zaXplOiAxNnB4O1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGJyZWFrLW1vYmlsZTogNDUwcHg7XG4kYnJlYWstdGFibGV0OiA4MDBweDtcbiRicmVhay1sYXB0b3A6IDEwMjRweDtcblxuJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGU6IDgwMHB4O1xuJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQ6IDEwNDhweDtcbiRicmVhay1sYW5kc2NhcGUtbGFwdG9wOiAxMjgwcHg7XG4iLCJAaW1wb3J0ICcuL3ZhcmlhYmxlcyc7XG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuQG1peGluIGJveC1zaGFkb3coJGNvbG9yOiAjMDAwLCAkZGVwdGg6IDEpIHtcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMXB4ICogKCRkZXB0aCAtIDEpIHJnYmEoIzAwMCwgLjIpLFxuICAgICAgICAgICAgICAgIDAgMXB4IDFweCAwIHJnYmEoIzAwMCwgLjE0KSxcbiAgICAgICAgICAgICAgICAwIDJweCAxcHggLTFweCByZ2JhKCMwMDAsIC4xMik7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG5AbWl4aW4gcmVzcG9uZC10bygkbWVkaWEpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gIEBlbHNlIGlmICRtZWRpYSA9PSBsYXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1AZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiJHByaW1hcnk6ICMxRjQwRTY7XG4kZm9ybS1sYWJlbDogIzA1MUMyQztcbiRzZWNvbmRhcnktbGFiZWw6ICM3Njc2NzY7XG4kYm9yZGVyOiAjQjNCM0IzO1xuJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ6ICNEMEQwRDA7XG4kY2hpcC1jb2xvcjogIzMzMzMzMztcbiRwbGFjZWhvbGRlci1jb2xvcjogIzdGN0Y3RjtcbiRiYWNrZ3JvdW5kLWNvbG9yOiAjRjBGMEYwO1xuJHBhZ2UtYmFja2dyb3VuZC1jb2xvcjogI0Y4RjlGQTtcbiRzZWxlY3RlZC1vcHRpb246ICNFNkU2RTY7XG4kY29sb3ItYnJhbmQteWVsbG93OiAjZmZkMDQ4O1xuJGxpZ2h0LXllbGxvdzogI2ZmZjNjZTtcbiRjb2FjaG1hcmstdGV4dDogIzZmNGQwMDtcbiRlcnJvci1jb2xvcjogI0UxMkU0MDtcbiRuby1maWx0ZXJzLWNvbG9yOiAjQkNCQ0JDO1xuJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yOiAjRjRGNEY0O1xuJHByaW1hcnktaGlnaGxpZ2h0OiAjMjI1MUZGO1xuJHNjcm9sbGJhci1jb2xvcjogIzc1NzU3NTtcblxuJGF2YWlsYWJsZS1jb2xvcjogIzVEOUQ1MjtcbiRhdmFpbGFibGUtYnktcmVxdWVzdC1jb2xvcjogI0Y1QjUzRjtcbiRpbi11c2UtY29sb3I6ICNENDQ4M0U7XG4kbm90LWJvb2thYmxlLWNvbG9yOiAjQ0NDQ0NDO1xuXG4kbW9kYWwtYm9keS1oZWFkaW5nOiAjNEQ0RDREO1xuJGFsZXJ0LW92ZXJsYXktYmc6IHJnYmEoNSwgMjgsIDQ0LCAwLjg1KTtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG5cbiRwZW5kaW5nOiAjZmZiMzAwO1xuJHBlbmRpbmctbGlnaHQ6IGxpZ2h0ZW4oJHBlbmRpbmcsIDEwKTtcbiRwZW5kaW5nLWRhcms6IGRhcmtlbigkcGVuZGluZywgMTApO1xuXG4kZXJyb3I6ICNlNTM5MzU7XG4kZXJyb3ItbGlnaHQ6IGxpZ2h0ZW4oJGVycm9yLCAxMCk7XG4kZXJyb3ItZGFyazogZGFya2VuKCRlcnJvciwgMTApO1xuXG4kY29hY2htYXJrLWJnOiAjRUJFQkY2O1xuJGNvYWNobWFyay1kYXJrLXRleHQ6ICMxQjFCMTk7XG4kZXJyb3ItdGV4dDogI2ZmZjtcblxuLyoqXG4gKiBTcGFjaW5nXG4gKi9cblxuLy8gNHB4XG4kc3BhY2luZy1zbWFsbGVzdDogMC4yNXJlbTtcblxuLy8gOHB4XG4kc3BhY2luZy14eHNtYWxsOiAwLjVyZW07XG5cbi8vIDEycHhcbiRzcGFjaW5nLXhzbWFsbDogMC43NXJlbTtcblxuLy8gMTZweFxuJHNwYWNpbmctc21hbGw6IDFyZW07XG5cbi8vIDIwcHhcbiRzcGFjaW5nLXNtYWxsLW1lZGl1bTogMS4yNXJlbTtcblxuLy8gMjRweFxuJHNwYWNpbmctbWVkaXVtOiAxLjVyZW07XG5cbi8vIDI4cHhcbiRzcGFjaW5nLW1lZGl1bS1sYXJnZTogMS43NXJlbTtcblxuLy8gMzJweFxuJHNwYWNpbmctbGFyZ2U6IDJyZW07XG5cbi8vIDQ4cHhcbiRzcGFjaW5nLXhsYXJnZTogM3JlbTtcblxuLy8gNjRweFxuJHNwYWNpbmcteHhsYXJnZTogNHJlbTtcblxuLy8gOTZweFxuJHNwYWNpbmctbGFyZ2VzdDogNnJlbTtcblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbiRkZXZpY2UtbW9iaWxlLXNpemU6IDQ1MHB4O1xuJGRldmljZS10YWJsZXQtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhcHRvcC1zaXplOiAxMDI0cHg7XG5cbiRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplOiAxMDQ4cHg7XG4kZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZTogMTI4MHB4O1xuXG5cbjpleHBvcnQge1xuICAgIHByaW1hcnk6ICRwcmltYXJ5O1xuICAgIHNlY29uZGFyeUxhYmVsOiAkc2Vjb25kYXJ5LWxhYmVsO1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuJGljb24tc21hbGw6IDE2cHg7XG4kaWNvbi1tZWRpdW06IDI0cHg7XG4kaWNvbi1sYXJnZTogMzJweDtcbiRpY29uLXhsYXJnZTogNDhweDtcbiIsIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46aG9zdCxcbi5jYXRlcmluZyB7XG4gIGhlaWdodDogMTAwdmg7XG4gIHdpZHRoOiAxMDB2dztcbn0iLCJAaW1wb3J0IFwidmFyc1wiO1xuXG5AbWl4aW4gcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkc2l6ZSwgJHF1YWxpZmllcikge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQGlmICgkcXVhbGlmaWVyID09IG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2UgaWYgKCRxdWFsaWZpZXIgPT0gbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1heC13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuQG1peGluIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkbWluLCAkbWF4KSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyB0aGlzIGlzIGEgY29weSBvZiByZXNwb25kLXRvLiB3ZSBkb24ndCB3YW50IHRvIHByZXNlcnZlIHRoYXQgbWV0aG9kIHNpbmNlIHRoZSBicmVha3BvaW50cyBtYXkgZGl2ZXJnZSBmcm9tIHRoZSBvbGQgVUkuXG5AbWl4aW4gaXMtc2NyZWVuLXNpemUoJG1lZGlhOiBhbGwsICRvcmllbnRhdGlvbjogbm9uZSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5cbkBtaXhpbiBwYWdlLXBhZGRpbmcge1xuICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctc21hbGw7XG4gICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctc21hbGw7XG59XG5cbi8vIEZvbnQgTWl4aW5zXG4kZm9udC1tY2tpbnNleS1zYW5zOiBcIk1jS2luc2V5IFNhbnNcIjtcbiRmb250LXRoZWluaGFyZHQ6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuJGZvbnQtYm93ZXI6IFwiQm93ZXJcIjtcblxuQG1peGluIGJvd2VyLWJvbGQge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1ib3dlcjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gbWNraW5zZXktc2FucyB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIGRpc3BsYXktMSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNHJlbTsgLy8gNjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODc7IC8vIDc2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTIge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTMge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2MHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNCB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDNyZW07IC8vIDQ4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNjY7IC8vIDU2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjRweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMwcHhcbiAgICBsaW5lLWhlaWdodDogMS44MzM7IC8vIDM0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY0MjsgLy8gNDBweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0xIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNDhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNzVyZW07IC8vIDQ0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA1MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0yIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjExMTsgLy8gNDRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDQ4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTMge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMjI7IC8vIDQ0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTUge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTYge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTU7IC8vIDI4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBib2R5LWRlZmF1bHQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjZweFxuICAgIH1cbn1cblxuLy8vIERvZXNudCBleGlzdCBpbiBNRFMuXG5AbWl4aW4gYm9keS10aW55IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTsgLy8gMTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDIwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBmb3JtLWxhYmVsIHtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC10aGVpbmhhcmR0O1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBjb2xvcjogJHBsYWNlaG9sZGVyLWNvbG9yO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG59XG5cbkBtaXhpbiBjaGlwLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gY2hlY2tib3gtbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICBjb2xvcjogYmxhY2s7XG59XG5cbi8vIGJvcmRlcnNcblxuQG1peGluIG1jay1jaGVja2JveC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stdGhpbi1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYm9yZGVyLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQtbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlci1saWdodDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cblxuLy8gZnVuY3Rpb25zXG5cbi8qKlxuICogTWFrZXMgdGV4dCBoYXZlIG1heGltdW0gbGluZXMgd2l0aCBlbGxpcHNpcy4gV29ya3Mgb24gbW9zdCBtb2Rlcm4gYnJvd3NlcnMgZXhjZXB0XG4gKiBvZiBGaXJlZm94Li5cbiAqL1xuQG1peGluIG1heC1saW5lcygkY291bnQpIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIC13ZWJraXQtbGluZS1jbGFtcDogJGNvdW50O1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG59XG5cbi8vIGltYWdlc1xuQG1peGluIG1jay1pY29uKCR3aWR0aCwgJGFzc2V0LCAkaGVpZ2h0OiAkd2lkdGgsICAkYXNzZXRQYXRoOiBcImxpYnMvdWkvc3JjL2xpYi9pY29uc1wiLCkge1xuICAgIHdpZHRoOiAkd2lkdGg7XG4gICAgaGVpZ2h0OiAkaGVpZ2h0O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiN7JGFzc2V0UGF0aH0vI3skYXNzZXR9XCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbn1cblxuXG5AbWl4aW4gbWNrLXNtYWxsLWljb24oJG1vYmlsZS1hc3NldCwgJGRlc2t0b3AtYXNzZXQ6ICRtb2JpbGUtYXNzZXQpIHtcbiAgICBAaW5jbHVkZSBtY2staWNvbigxNnB4LCAkYXNzZXQ6ICRtb2JpbGUtYXNzZXQpO1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBAaW5jbHVkZSBtY2staWNvbigyNHB4LCAkYXNzZXQ6ICRkZXNrdG9wLWFzc2V0KTtcbiAgICB9XG59XG5cbi8vIHNrZWxldG9uXG5AbWl4aW4gc2tlbGV0b24tYmcge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1pbWFnZS1zaXplIHtcbiAgICB3aWR0aDogODFweDtcbiAgICBoZWlnaHQ6IDgycHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAyMTlweDtcbiAgICAgICAgaGVpZ2h0OiAxMTlweDtcbiAgICB9XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1zdGF0dXMtc2l6ZSB7XG4gICAgd2lkdGg6IDExN3B4O1xuICAgIGhlaWdodDogNzhweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDExN3B4O1xuICAgICAgICBoZWlnaHQ6IDc4cHg7XG4gICAgfVxufVxuIiwiQGltcG9ydCAnbWl4aW5zJztcbkBpbXBvcnQgXCJsaWJzL3VpL3NyYy9saWIvbWl4aW5zXCI7XG5AaW1wb3J0ICd2YXJpYWJsZXMnO1xuXG46aG9zdCxcbi5jYXRlcmluZyB7XG4gICAgaGVpZ2h0OiAxMDB2aDtcbiAgICB3aWR0aDogMTAwdnc7XG59XG4iXX0= */"] + styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\n\n[_nghost-%COMP%], .catering[_ngcontent-%COMP%] {\n padding-top: 1px;\n}\n[_nghost-%COMP%] .catering-container[_ngcontent-%COMP%] {\n height: 62rem;\n}\n[_nghost-%COMP%] .catering-container[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(1) {\n height: 100%;\n}\n[_nghost-%COMP%] .catering-container[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(1) .mck-content-expand-width[_ngcontent-%COMP%], [_nghost-%COMP%] .catering-container[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(1) .catering[_ngcontent-%COMP%] {\n height: 100%;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n [_nghost-%COMP%] .catering-container[_ngcontent-%COMP%] {\n height: 55.4rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n [_nghost-%COMP%] .catering-container[_ngcontent-%COMP%] {\n height: 55.4rem;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvdmFycy5zY3NzIiwiYXBwcy9zdGFmZi9zcmMvYXBwL2Jvb2tpbmcvY2F0ZXJpbmcvY2F0ZXJpbmcuY29tcG9uZW50LnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9jYXRlcmluZy9jYXRlcmluZy5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDNUNBOztzQkFBQTtBQzZCQTs7RUFBQTtBQXFDQTs7c0JBQUE7QUFhQTtFQUNJLGdCQTlGTTtFQStGTix1QkE3RmM7QUNzQmxCO0FEMEVBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUpwVUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBS3REQTs7RUFJSSxnQkFBQTtBRndDSjtBRXBDSTtFQUNJLGFBQUE7QUZ1Q1I7QUV0Q1E7RUFDSSxZQUFBO0FGd0NaO0FFdkNZO0VBQ0ksWUFBQTtBRnlDaEI7QUNqRFk7RUNHUjtJQWNRLGVBQUE7RUZvQ1Y7QUFDRjtBQ3REWTtFQ0dSO0lBY1EsZUFBQTtFRnlDVjtBQUNGIiwiZmlsZSI6ImFwcHMvc3RhZmYvc3JjL2FwcC9ib29raW5nL2NhdGVyaW5nL2NhdGVyaW5nLmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kY29sb3ItYnJhbmQtZWxlY3RyaWMtYmx1ZTogIzIyNTFmZjtcbiRjb2xvci1icmFuZC1kZWVwLWJsdWU6ICMwNTFjMmM7XG4kY29sb3ItYnJhbmQtY3lhbjogIzAwYTlmNDtcblxuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRmb250LWRhcms6ICMwMDA7XG4kZm9udC1saWdodDogI2ZmZjtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG4kZ3JlZW4xOiAjMjE5NjUzO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvbG9yLXByaW1hcnk6ICMxOTM3ZWE7XG4kY29sb3ItcHJpbWFyeS1saWdodDogbGlnaHRlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuJGNvbG9yLXByaW1hcnktZGFyazogZGFya2VuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG5cbiRjb2xvci1zZWNvbmRhcnk6ICM0Mjg1RjQ7XG4kY29sb3Itc2Vjb25kYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcbiRjb2xvci1zZWNvbmRhcnktZGFyazogZGFya2VuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcblxuJGJhY2tncm91bmQ6ICNmMGYwZjA7XG4kZm9vdGVyLWJhY2s6ICMyNjMyMzg7XG4kaGVhZGVyLWJhY2s6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzA1MUMyQywgIzA1MUMyQyA0MCUsICMwQjI0NTMgNjAlLCAjMUY0MEU2IDEwMCUpO1xuXG4kY29sb3ItdGVybmFyeTogIzA1MWMyYztcblxuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG5cbiRmb250LXN0YWNrOiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcblxuJGhlYWRpbmctZm9udDogXCJMYXJpc2hNY0tpbnNleVwiLCAnR2VvcmdpYScsIHNlcmlmO1xuJGZvbnQ6ICRmb250LXN0YWNrO1xuXG4kZm9udC1mYW1pbHktcHJpbWFyeTogXCJNY0tpbnNleSBTYW5zXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQ2FsaWJyaSwgQ29yYmVsLCBIZWx2ZXRpY2EsIFJvYm90bywgRHJvaWQsIHNhbnMtc2VyaWY7XG4kZm9udC1mYW1pbHktc2Vjb25kYXJ5OiBcIkJvd2VyXCIsIEdlb3JnaWEsIFwiVGltZXMgTmV3IFJvbWFuXCIgc2VyaWY7XG5cbiRiYXNlLXNpemU6IDE2cHg7XG4kdGFibGV0LXNpemU6IDE2cHg7XG4kbW9iaWxlLXNpemU6IDE2cHg7XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kYnJlYWstbW9iaWxlOiA0NTBweDtcbiRicmVhay10YWJsZXQ6IDgwMHB4O1xuJGJyZWFrLWxhcHRvcDogMTAyNHB4O1xuXG4kYnJlYWstbGFuZHNjYXBlLW1vYmlsZTogODAwcHg7XG4kYnJlYWstbGFuZHNjYXBlLXRhYmxldDogMTA0OHB4O1xuJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3A6IDEyODBweDtcbiIsIkBpbXBvcnQgJy4vdmFyaWFibGVzJztcblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5AbWl4aW4gYm94LXNoYWRvdygkY29sb3I6ICMwMDAsICRkZXB0aDogMSkge1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCAxcHggKiAoJGRlcHRoIC0gMSkgcmdiYSgjMDAwLCAuMiksXG4gICAgICAgICAgICAgICAgMCAxcHggMXB4IDAgcmdiYSgjMDAwLCAuMTQpLFxuICAgICAgICAgICAgICAgIDAgMnB4IDFweCAtMXB4IHJnYmEoIzAwMCwgLjEyKTtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbkBtaXhpbiByZXNwb25kLXRvKCRtZWRpYSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSAgQGVsc2UgaWYgJG1lZGlhID09IGxhdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfUBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCIkcHJpbWFyeTogIzFGNDBFNjtcbiRmb3JtLWxhYmVsOiAjMDUxQzJDO1xuJHNlY29uZGFyeS1sYWJlbDogIzc2NzY3NjtcbiRib3JkZXI6ICNCM0IzQjM7XG4kYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDogI0QwRDBEMDtcbiRjaGlwLWNvbG9yOiAjMzMzMzMzO1xuJHBsYWNlaG9sZGVyLWNvbG9yOiAjN0Y3RjdGO1xuJGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4kcGFnZS1iYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuJHNlbGVjdGVkLW9wdGlvbjogI0U2RTZFNjtcbiRjb2xvci1icmFuZC15ZWxsb3c6ICNmZmQwNDg7XG4kbGlnaHQteWVsbG93OiAjZmZmM2NlO1xuJGNvYWNobWFyay10ZXh0OiAjNmY0ZDAwO1xuJGVycm9yLWNvbG9yOiAjRTEyRTQwO1xuJG5vLWZpbHRlcnMtY29sb3I6ICNCQ0JDQkM7XG4kcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I6ICNGNEY0RjQ7XG4kcHJpbWFyeS1oaWdobGlnaHQ6ICMyMjUxRkY7XG4kc2Nyb2xsYmFyLWNvbG9yOiAjNzU3NTc1O1xuXG4kYXZhaWxhYmxlLWNvbG9yOiAjNUQ5RDUyO1xuJGF2YWlsYWJsZS1ieS1yZXF1ZXN0LWNvbG9yOiAjRjVCNTNGO1xuJGluLXVzZS1jb2xvcjogI0Q0NDgzRTtcbiRub3QtYm9va2FibGUtY29sb3I6ICNDQ0NDQ0M7XG5cbiRtb2RhbC1ib2R5LWhlYWRpbmc6ICM0RDRENEQ7XG4kYWxlcnQtb3ZlcmxheS1iZzogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2FjaG1hcmstYmc6ICNFQkVCRjY7XG4kY29hY2htYXJrLWRhcmstdGV4dDogIzFCMUIxOTtcbiRlcnJvci10ZXh0OiAjZmZmO1xuXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuXG4vLyA0cHhcbiRzcGFjaW5nLXNtYWxsZXN0OiAwLjI1cmVtO1xuXG4vLyA4cHhcbiRzcGFjaW5nLXh4c21hbGw6IDAuNXJlbTtcblxuLy8gMTJweFxuJHNwYWNpbmcteHNtYWxsOiAwLjc1cmVtO1xuXG4vLyAxNnB4XG4kc3BhY2luZy1zbWFsbDogMXJlbTtcblxuLy8gMjBweFxuJHNwYWNpbmctc21hbGwtbWVkaXVtOiAxLjI1cmVtO1xuXG4vLyAyNHB4XG4kc3BhY2luZy1tZWRpdW06IDEuNXJlbTtcblxuLy8gMjhweFxuJHNwYWNpbmctbWVkaXVtLWxhcmdlOiAxLjc1cmVtO1xuXG4vLyAzMnB4XG4kc3BhY2luZy1sYXJnZTogMnJlbTtcblxuLy8gNDhweFxuJHNwYWNpbmcteGxhcmdlOiAzcmVtO1xuXG4vLyA2NHB4XG4kc3BhY2luZy14eGxhcmdlOiA0cmVtO1xuXG4vLyA5NnB4XG4kc3BhY2luZy1sYXJnZXN0OiA2cmVtO1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGRldmljZS1tb2JpbGUtc2l6ZTogNDUwcHg7XG4kZGV2aWNlLXRhYmxldC1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFwdG9wLXNpemU6IDEwMjRweDtcblxuJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemU6IDgwMHB4O1xuJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemU6IDEwNDhweDtcbiRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplOiAxMjgwcHg7XG5cblxuOmV4cG9ydCB7XG4gICAgcHJpbWFyeTogJHByaW1hcnk7XG4gICAgc2Vjb25kYXJ5TGFiZWw6ICRzZWNvbmRhcnktbGFiZWw7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4kaWNvbi1zbWFsbDogMTZweDtcbiRpY29uLW1lZGl1bTogMjRweDtcbiRpY29uLWxhcmdlOiAzMnB4O1xuJGljb24teGxhcmdlOiA0OHB4O1xuIiwiLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbjpob3N0LFxuLmNhdGVyaW5nIHtcbiAgcGFkZGluZy10b3A6IDFweDtcbn1cblxuOmhvc3QgLmNhdGVyaW5nLWNvbnRhaW5lciB7XG4gIGhlaWdodDogNjJyZW07XG59XG46aG9zdCAuY2F0ZXJpbmctY29udGFpbmVyID4gZGl2Om50aC1jaGlsZCgxKSB7XG4gIGhlaWdodDogMTAwJTtcbn1cbjpob3N0IC5jYXRlcmluZy1jb250YWluZXIgPiBkaXY6bnRoLWNoaWxkKDEpIC5tY2stY29udGVudC1leHBhbmQtd2lkdGgsIDpob3N0IC5jYXRlcmluZy1jb250YWluZXIgPiBkaXY6bnRoLWNoaWxkKDEpIC5jYXRlcmluZyB7XG4gIGhlaWdodDogMTAwJTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIDpob3N0IC5jYXRlcmluZy1jb250YWluZXIge1xuICAgIGhlaWdodDogNTUuNHJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIDpob3N0IC5jYXRlcmluZy1jb250YWluZXIge1xuICAgIGhlaWdodDogNTUuNHJlbTtcbiAgfVxufSIsIkBpbXBvcnQgXCJ2YXJzXCI7XG5cbkBtaXhpbiBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRzaXplLCAkcXVhbGlmaWVyKSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAaWYgKCRxdWFsaWZpZXIgPT0gbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSBpZiAoJHF1YWxpZmllciA9PSBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWF4LXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5AbWl4aW4gYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRtaW4sICRtYXgpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkbWluKSBhbmQgKG1heC13aWR0aDogJG1heCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIHRoaXMgaXMgYSBjb3B5IG9mIHJlc3BvbmQtdG8uIHdlIGRvbid0IHdhbnQgdG8gcHJlc2VydmUgdGhhdCBtZXRob2Qgc2luY2UgdGhlIGJyZWFrcG9pbnRzIG1heSBkaXZlcmdlIGZyb20gdGhlIG9sZCBVSS5cbkBtaXhpbiBpcy1zY3JlZW4tc2l6ZSgkbWVkaWE6IGFsbCwgJG9yaWVudGF0aW9uOiBub25lKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cblxuQG1peGluIHBhZ2UtcGFkZGluZyB7XG4gICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbDtcbn1cblxuLy8gRm9udCBNaXhpbnNcbiRmb250LW1ja2luc2V5LXNhbnM6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuJGZvbnQtdGhlaW5oYXJkdDogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4kZm9udC1ib3dlcjogXCJCb3dlclwiO1xuXG5AbWl4aW4gYm93ZXItYm9sZCB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWJvd2VyO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBtY2tpbnNleS1zYW5zIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gZGlzcGxheS0xIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiA0cmVtOyAvLyA2NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4NzsgLy8gNzZweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMiB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDYwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS00IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogM3JlbTsgLy8gNDhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE2NjsgLy8gNTZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS01IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjgzMzsgLy8gMzRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjQyOyAvLyA0MHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS03IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyOHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTEge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA0OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi43NXJlbTsgLy8gNDRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDUycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTIge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTExOyAvLyA0NHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNDhweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMyB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIyMjsgLy8gNDRweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjg4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1NTsgLy8gMjhweFxuICAgIH1cbn1cblxuQG1peGluIGJvZHktZGVmYXVsdCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNnB4XG4gICAgfVxufVxuXG4vLy8gRG9lc250IGV4aXN0IGluIE1EUy5cbkBtaXhpbiBib2R5LXRpbnkge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtOyAvLyAxMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjRweFxuICAgIH1cbn1cblxuQG1peGluIGZvcm0tbGFiZWwge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LXRoZWluaGFyZHQ7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGNvbG9yOiAkcGxhY2Vob2xkZXItY29sb3I7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbn1cblxuQG1peGluIGNoaXAtbGFiZWwge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBjaGVja2JveC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGNvbG9yOiBibGFjaztcbn1cblxuLy8gYm9yZGVyc1xuXG5AbWl4aW4gbWNrLWNoZWNrYm94LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay10aGluLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXItbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBib3JkZXItY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudC1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuXG4vLyBmdW5jdGlvbnNcblxuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG5AbWl4aW4gbWF4LWxpbmVzKCRjb3VudCkge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiAkY291bnQ7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbn1cblxuLy8gaW1hZ2VzXG5AbWl4aW4gbWNrLWljb24oJHdpZHRoLCAkYXNzZXQsICRoZWlnaHQ6ICR3aWR0aCwgICRhc3NldFBhdGg6IFwibGlicy91aS9zcmMvbGliL2ljb25zXCIsKSB7XG4gICAgd2lkdGg6ICR3aWR0aDtcbiAgICBoZWlnaHQ6ICRoZWlnaHQ7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiI3skYXNzZXRQYXRofS8jeyRhc3NldH1cIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuXG5cbkBtaXhpbiBtY2stc21hbGwtaWNvbigkbW9iaWxlLWFzc2V0LCAkZGVza3RvcC1hc3NldDogJG1vYmlsZS1hc3NldCkge1xuICAgIEBpbmNsdWRlIG1jay1pY29uKDE2cHgsICRhc3NldDogJG1vYmlsZS1hc3NldCk7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICRhc3NldDogJGRlc2t0b3AtYXNzZXQpO1xuICAgIH1cbn1cblxuLy8gc2tlbGV0b25cbkBtaXhpbiBza2VsZXRvbi1iZyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWltYWdlLXNpemUge1xuICAgIHdpZHRoOiA4MXB4O1xuICAgIGhlaWdodDogODJweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDIxOXB4O1xuICAgICAgICBoZWlnaHQ6IDExOXB4O1xuICAgIH1cbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLXN0YXR1cy1zaXplIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMTE3cHg7XG4gICAgICAgIGhlaWdodDogNzhweDtcbiAgICB9XG59XG4iLCJAaW1wb3J0ICdtaXhpbnMnO1xuQGltcG9ydCBcImxpYnMvdWkvc3JjL2xpYi9taXhpbnNcIjtcbkBpbXBvcnQgJ3ZhcmlhYmxlcyc7XG5cbjpob3N0LFxuLmNhdGVyaW5nIHtcbiAgICAvLyBoZWlnaHQ6IDEwMHZoO1xuICAgIC8vIHdpZHRoOiAxMDB2dztcbiAgICBwYWRkaW5nLXRvcDogMXB4O1xufVxuXG46aG9zdCB7XG4gICAgLmNhdGVyaW5nLWNvbnRhaW5lciB7XG4gICAgICAgIGhlaWdodDogNjJyZW07XG4gICAgICAgID5kaXY6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgIC5tY2stY29udGVudC1leHBhbmQtd2lkdGgsIC5jYXRlcmluZyB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cblxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZSh0YWJsZXQpIHtcbiAgICAgICAgXG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICBoZWlnaHQ6IDU1LjRyZW07XG4gICAgICAgICAgICBcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICBcbn1cbiJdfQ== */"] }); /*@__PURE__*/ @@ -58233,6 +59176,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }], showCatering: [{ type: core_1.Output + }], + placeIntoModal: [{ + type: core_1.Input }] }); })(); @@ -58817,7 +59763,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var item_r26 = ctx.$implicit; var ctx_r25 = i0.ɵɵnextContext(5); i0.ɵɵstyleProp("background-image", i0.ɵɵpipeBind2(1, 4, "url(" + item_r26.image_path + ")", "style"), i0.ɵɵdefaultStyleSanitizer); - i0.ɵɵproperty("disabled", ctx_r25.within_restricted_time && !item_r26.can_order_anytime); + i0.ɵɵproperty("disabled", ctx_r25.within_category_restricted_time(item_r26) || ctx_r25.within_restricted_time && !item_r26.can_order_anytime); i0.ɵɵadvance(4); i0.ɵɵtextInterpolate(item_r26.name); } @@ -58979,7 +59925,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (rf & 2) { var ctx_r7 = i0.ɵɵnextContext(); - i0.ɵɵproperty("compact", ctx_r7.compact)("category", ctx_r7.active_category)("symbol", ctx_r7.symbol)("items", ctx_r7.form.controls.items)("disabled", ctx_r7.within_restricted_time); + i0.ɵɵproperty("compact", ctx_r7.compact)("category", ctx_r7.active_category)("symbol", ctx_r7.symbol)("items", ctx_r7.form.controls.items)("disabled", ctx_r7.within_category_restricted_time(ctx_r7.item) || ctx_r7.within_restricted_time); } } @@ -59012,12 +59958,42 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons /** List of menu items that match the search string */ _this236.matched_items = []; + /** + * placeIntoModal: Input decorator indecate as a flag to adapt component design into a dialog modal + * (by hiding header and adjusting height so that fit into a modal) + */ + + _this236.placeIntoModal = false; return _this236; } /** Whether user is able to order from the currently selected space */ _createClass(BookingCateringOrderDetailsComponent, [{ + key: "within_category_restricted_time", + + /** Whether booking is with the restricted ordering period */ + value: function within_category_restricted_time(item) { + /** + * Update : https://mckinsey.atlassian.net/browse/CNG-574 + * Right now the frontend is restricting catering orders based off the field .settings.discovery_info.catering_restricted_from, + * so for this ticket change it’s best we keep that field as the default time restriction, then add a new field to catering categories called + * restricted_from which will override the old field if it’s present! + * restricted_from can be set by concierge admin to restrict item from being order before set time ex if it been set to 24 then the item should + * available to order before 24 hours of booking/order time! + */ + if (!!(item === null || item === void 0 ? void 0 : item.restricted_from)) { + var expired = date_tz_1.DateNow(new Date()).addValue({ + hours: item === null || item === void 0 ? void 0 : item.restricted_from + }).startOfValue('minute'); + return this.dateTz.isBeforeDate(expired); + } else { + return false; + } + } + /** Whether items are available for order at anytime */ + + }, { key: "ngOnInit", value: function ngOnInit() { var _this237 = this; @@ -59027,7 +60003,11 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var search = str.toLowerCase(); var items = []; - var _iterator38 = _createForOfIteratorHelper(_this237.category_list), + var available_categories = _this237.category_list.filter(function (item) { + return !_this237.within_category_restricted_time(item); + }); + + var _iterator38 = _createForOfIteratorHelper(available_categories), _step38; try { @@ -59042,7 +60022,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons for (_iterator39.s(); !(_step39 = _iterator39.n()).done;) { var group = _step39.value; - if (group.items) { + if (group.items.length) { if (group["package"] && (group.name.toLowerCase().includes(search) || group.items.find(function (item) { return item.name.toLowerCase().includes(search); }))) { @@ -59429,8 +60409,6 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }).startOfValue('minute'); return this.dateTz.isBeforeDate(expired); } - /** Whether items are available for order at anytime */ - }, { key: "has_available_items", get: function get() { @@ -59470,14 +60448,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons space_list: "space_list", all_day: "all_day", hide_details: "hide_details", - compact: "compact" + compact: "compact", + placeIntoModal: "placeIntoModal" }, outputs: { event: "event" }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 15, - vars: 7, + vars: 9, consts: [[1, "catering", "order-details"], ["class", "header", 4, "ngIf"], ["class", "body", 3, "is-search", 4, "ngIf", "ngIfElse"], [1, "bottom-panel-buttons"], [1, "buttons"], ["mat-button", "", "color", "secondary", "name", "previous", 1, "mck-secondary-button", 3, "click"], ["mat-button", "", "color", "primary", "name", "next", 1, "mck-primary-button", 3, "disabled", "click"], ["empty_state", ""], ["load_state", ""], ["category_display", ""], [1, "header"], [3, "formGroup"], ["class", "field", 4, "ngIf"], [1, "search"], ["mat-icon-button", "", 3, "disabled", "click"], [3, "icon"], [1, "search-input"], [1, "input"], ["appearance", "outline"], ["matInput", "", "placeholder", "Search for items...", 3, "ngModel", "ngModelOptions", "ngModelChange"], ["input", ""], [1, "field"], [1, "cat_field_label"], ["formControlName", "location_id"], [3, "value", 4, "ngFor", "ngForOf"], [3, "value"], ["for", "start", 1, "cat_field_label"], ["name", "start", "formControlName", "delivery_time"], [1, "body"], [4, "ngIf", "ngIfElse"], ["menu", ""], ["class", "item", 4, "ngFor", "ngForOf"], [1, "item"], [3, "compact", "disabled", "symbol", "item", "field"], ["class", "contents", 4, "ngIf", "ngIfElse"], [1, "contents"], ["mat-button", "", "class", "category", 3, "background-image", "disabled", "click", 4, "ngFor", "ngForOf"], ["mat-button", "", 1, "category", 3, "disabled", "click"], [1, "overlay"], [1, "name"], [1, "empty-state", "center"], [1, "icon"], ["alt", "No Catering Available", "src", "assets/img/no-catering.svg"], [1, "bold"], [1, "info-block", "center"], ["diameter", "48"], [1, "text"], [3, "compact", "category", "symbol", "items", "disabled", "close"]], template: function BookingCateringOrderDetailsComponent_Template(rf, ctx) { if (rf & 1) { @@ -59514,7 +60493,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons i0.ɵɵproperty("ngIf", ctx.form); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", !ctx.loading)("ngIfElse", _r4); - i0.ɵɵadvance(5); + i0.ɵɵadvance(1); + i0.ɵɵstyleProp("position", ctx.placeIntoModal ? "absolute" : "fixed"); + i0.ɵɵadvance(4); i0.ɵɵproperty("disabled", !ctx.item_count || ctx.out_of_hours); i0.ɵɵadvance(1); i0.ɵɵi18nExp(ctx.item_count || "0"); @@ -59523,7 +60504,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, directives: [i3.NgIf, i4.MatButton, i5.ɵangular_packages_forms_forms_y, i5.NgControlStatusGroup, i5.FormGroupDirective, i6.IconComponent, i7.MatFormField, i8.MatInput, i5.DefaultValueAccessor, i5.NgControlStatus, i5.NgModel, i9.MatSelect, i5.FormControlName, i3.NgForOf, i10.MatOption, i11.CateringMenuItemComponent, i12.MatSpinner, i13.CateringMenuCategoryComponent], pipes: [i3.AsyncPipe, i14.SafePipe], - styles: ["[_nghost-%COMP%] {\n height: 100%;\n}\n.order-details[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n flex-direction: column;\n height: 100%;\n width: 100%;\n margin: auto;\n max-width: 100vw;\n min-height: 65vh;\n}\n.order-details.compact[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n min-height: 16em;\n}\n.header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n width: 100%;\n background-color: #fff;\n box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12);\n z-index: 99;\n padding-top: 10px;\n border-top: 1px solid #E8E8E8;\n}\n.body[_ngcontent-%COMP%] {\n position: relative;\n flex: 1;\n width: 100%;\n min-height: 50%;\n overflow: hidden auto;\n margin-bottom: 200px;\n}\n.search[_ngcontent-%COMP%] {\n position: relative;\n margin: 0.5em;\n}\n.search.min[_ngcontent-%COMP%] {\n margin-left: 18em;\n}\n.min[_ngcontent-%COMP%] .search-input[_ngcontent-%COMP%] {\n bottom: auto;\n right: auto;\n top: 50%;\n left: 0;\n transform: translate(-100%, -50%);\n}\n.min[_ngcontent-%COMP%] .search-input[_ngcontent-%COMP%] .input[_ngcontent-%COMP%] {\n margin: 0;\n box-shadow: none;\n background-color: none;\n font-size: 1em;\n}\n.search-input[_ngcontent-%COMP%] {\n position: absolute;\n bottom: -6px;\n right: -1em;\n opacity: 0;\n transition: opacity 200ms;\n transform: translateY(100%);\n overflow: hidden;\n}\n.search-input.show[_ngcontent-%COMP%] {\n opacity: 1;\n}\n.search-input[_ngcontent-%COMP%] .input[_ngcontent-%COMP%] {\n margin: 0 1em 1em;\n padding: 0 0.5em;\n height: 3.5em;\n background-color: #fff;\n border-radius: 0 0 4px 4px;\n box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12);\n font-size: 0.8em;\n}\n.item[_ngcontent-%COMP%] {\n position: relative;\n width: 640px;\n margin: 0.5em auto;\n background-color: #fff;\n border: 1px solid #ccc;\n border-radius: 4px;\n overflow: hidden;\n max-width: calc(100% - 1em);\n z-index: 0;\n}\n.is-search[_ngcontent-%COMP%] {\n padding-top: 2em;\n}\n.footer[_ngcontent-%COMP%] {\n width: 100%;\n text-align: center;\n border-top: 1px solid #ccc;\n background-color: #fff;\n box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12);\n}\n.footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n min-width: 8em;\n margin: 0.5em;\n}\nform[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n}\n.field[_ngcontent-%COMP%] {\n margin: 0 0.5em;\n max-height: 3.5em;\n display: flex;\n position: relative;\n}\n.field[_ngcontent-%COMP%] div[_ngcontent-%COMP%] {\n padding: 14px 15px 0 0;\n}\n.field[_ngcontent-%COMP%] div[_ngcontent-%COMP%], .field[_ngcontent-%COMP%] .mat-form-field[_ngcontent-%COMP%] {\n width: -webkit-fit-content;\n width: -moz-fit-content;\n width: fit-content;\n display: inline-block;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .field[_ngcontent-%COMP%] div[_ngcontent-%COMP%], .field[_ngcontent-%COMP%] .mat-form-field[_ngcontent-%COMP%] {\n width: 110px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .field[_ngcontent-%COMP%] div[_ngcontent-%COMP%], .field[_ngcontent-%COMP%] .mat-form-field[_ngcontent-%COMP%] {\n width: 110px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .field[_ngcontent-%COMP%] {\n max-height: 4.75em;\n }\n .field[_ngcontent-%COMP%] .cat_field_label[_ngcontent-%COMP%] {\n position: absolute;\n top: -18px;\n left: 10px;\n }\n .field[_ngcontent-%COMP%] .mat-form-field[_ngcontent-%COMP%] {\n margin-top: 12px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .field[_ngcontent-%COMP%] {\n max-height: 4.75em;\n }\n .field[_ngcontent-%COMP%] .cat_field_label[_ngcontent-%COMP%] {\n position: absolute;\n top: -18px;\n left: 10px;\n }\n .field[_ngcontent-%COMP%] .mat-form-field[_ngcontent-%COMP%] {\n margin-top: 12px;\n }\n}\n.contents[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n max-width: 768px;\n margin: auto;\n}\n.category[_ngcontent-%COMP%] {\n position: relative;\n background-position: center;\n background-size: cover;\n height: 10em;\n width: 10em;\n margin: 1em;\n border-radius: 4px;\n font-size: 1em;\n border: none;\n padding: 0;\n background-color: #fff;\n transition: box-shadow 200ms;\n}\n.category[_ngcontent-%COMP%]:hover {\n box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12);\n}\n.category[_ngcontent-%COMP%] .overlay[_ngcontent-%COMP%] {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.35);\n border-radius: 4px;\n}\n.category[_ngcontent-%COMP%] .name[_ngcontent-%COMP%] {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: 99;\n max-width: 9em;\n white-space: normal;\n line-height: 1.25em;\n margin: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n mat-form-field[_ngcontent-%COMP%] {\n width: 11.75em;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n mat-form-field[_ngcontent-%COMP%] {\n width: 11.75em;\n }\n}\nlabel[_ngcontent-%COMP%] {\n font-weight: 500;\n font-size: 0.8em;\n margin-right: 0.75em;\n}\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n flex-direction: column;\n background-color: #fff;\n border-radius: 4px;\n padding: 1em;\n max-width: calc(100vw - 2em);\n box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12);\n}\n.empty-state[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: #ce1a51;\n}\n.empty-state[_ngcontent-%COMP%] .bold[_ngcontent-%COMP%] {\n font-weight: 400;\n}\n.empty-state[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n height: 6em;\n width: 8em;\n}\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n text-align: center;\n max-width: 24em;\n}\n.info-block[_ngcontent-%COMP%] .icon[_ngcontent-%COMP%] {\n height: 2.5em;\n width: 2.5em;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9jYXRlcmluZy9vcmRlci1kZXRhaWxzL29yZGVyLWRldGFpbHMuY29tcG9uZW50LnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9jYXRlcmluZy9vcmRlci1kZXRhaWxzL29yZGVyLWRldGFpbHMuY29tcG9uZW50LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQTFEQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDNUNBOztzQkFBQTtBQ1hBO0VBQ0ksWUFBQTtBQ3lCSjtBRHRCQTtFQUNJLGFBQUE7RUFDQSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0EsWUFBQTtFQUNBLFdBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7RUFDQSxnQkFBQTtBQ3lCSjtBRHZCSTtFQUNJLGtCQUFBO0VBQ0EsZ0JBQUE7QUN5QlI7QURyQkE7RUFDSSxhQUFBO0VBQ0EsdUJBQUE7RUFDQSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0EsV0FBQTtFQUNBLHNCQUFBO0VEcEJBLGlIQUFBO0VDc0JBLFdBQUE7RUFDQSxpQkFBQTtFQUNBLDZCQUFBO0FDd0JKO0FEckJBO0VBQ0ksa0JBQUE7RUFDQSxPQUFBO0VBQ0EsV0FBQTtFQUNBLGVBQUE7RUFDQSxx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QUNJLGFBQUE7RUFDQSxZQUFBO0FDbUNSIiwiZmlsZSI6ImFwcHMvc3RhZmYvc3JjL2FwcC9ib29raW5nL2NhdGVyaW5nL29yZGVyLWRldGFpbHMvb3JkZXItZGV0YWlscy5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGNvbG9yLWJyYW5kLWVsZWN0cmljLWJsdWU6ICMyMjUxZmY7XG4kY29sb3ItYnJhbmQtZGVlcC1ibHVlOiAjMDUxYzJjO1xuJGNvbG9yLWJyYW5kLWN5YW46ICMwMGE5ZjQ7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kZm9udC1kYXJrOiAjMDAwO1xuJGZvbnQtbGlnaHQ6ICNmZmY7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuJGdyZWVuMTogIzIxOTY1MztcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2xvci1wcmltYXJ5OiAjMTkzN2VhO1xuJGNvbG9yLXByaW1hcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcbiRjb2xvci1wcmltYXJ5LWRhcms6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuXG4kY29sb3Itc2Vjb25kYXJ5OiAjNDI4NUY0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodDogbGlnaHRlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG4kY29sb3Itc2Vjb25kYXJ5LWRhcms6IGRhcmtlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG5cbiRiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuJGZvb3Rlci1iYWNrOiAjMjYzMjM4O1xuJGhlYWRlci1iYWNrOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNTFDMkMsICMwNTFDMkMgNDAlLCAjMEIyNDUzIDYwJSwgIzFGNDBFNiAxMDAlKTtcblxuJGNvbG9yLXRlcm5hcnk6ICMwNTFjMmM7XG5cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuXG4kZm9udC1zdGFjazogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiRoZWFkaW5nLWZvbnQ6IFwiTGFyaXNoTWNLaW5zZXlcIiwgJ0dlb3JnaWEnLCBzZXJpZjtcbiRmb250OiAkZm9udC1zdGFjaztcblxuJGZvbnQtZmFtaWx5LXByaW1hcnk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LXNlY29uZGFyeTogXCJCb3dlclwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiIHNlcmlmO1xuXG4kYmFzZS1zaXplOiAxNnB4O1xuJHRhYmxldC1zaXplOiAxNnB4O1xuJG1vYmlsZS1zaXplOiAxNnB4O1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGJyZWFrLW1vYmlsZTogNDUwcHg7XG4kYnJlYWstdGFibGV0OiA4MDBweDtcbiRicmVhay1sYXB0b3A6IDEwMjRweDtcblxuJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGU6IDgwMHB4O1xuJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQ6IDEwNDhweDtcbiRicmVhay1sYW5kc2NhcGUtbGFwdG9wOiAxMjgwcHg7XG4iLCJAaW1wb3J0ICcuL3ZhcmlhYmxlcyc7XG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuQG1peGluIGJveC1zaGFkb3coJGNvbG9yOiAjMDAwLCAkZGVwdGg6IDEpIHtcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMXB4ICogKCRkZXB0aCAtIDEpIHJnYmEoIzAwMCwgLjIpLFxuICAgICAgICAgICAgICAgIDAgMXB4IDFweCAwIHJnYmEoIzAwMCwgLjE0KSxcbiAgICAgICAgICAgICAgICAwIDJweCAxcHggLTFweCByZ2JhKCMwMDAsIC4xMik7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG5AbWl4aW4gcmVzcG9uZC10bygkbWVkaWEpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gIEBlbHNlIGlmICRtZWRpYSA9PSBsYXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1AZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQGltcG9ydCAndmFyaWFibGVzJztcbkBpbXBvcnQgJ21peGlucyc7XG5cbjpob3N0IHtcbiAgICBoZWlnaHQ6IDEwMCU7XG59XG5cbi5vcmRlci1kZXRhaWxzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luOiBhdXRvO1xuICAgIG1heC13aWR0aDogMTAwdnc7XG4gICAgbWluLWhlaWdodDogNjV2aDtcblxuICAgICYuY29tcGFjdCB7XG4gICAgICAgIGZvbnQtc2l6ZTogLjc1cmVtO1xuICAgICAgICBtaW4taGVpZ2h0OiAxNmVtO1xuICAgIH1cbn1cblxuLmhlYWRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgICBAaW5jbHVkZSBib3gtc2hhZG93O1xuICAgIHotaW5kZXg6IDk5O1xuICAgIHBhZGRpbmctdG9wOiAxMHB4O1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjRThFOEU4O1xufVxuXG4uYm9keSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGZsZXg6IDE7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWluLWhlaWdodDogNTAlO1xuICAgIG92ZXJmbG93OiBoaWRkZW4gYXV0bztcbiAgICBtYXJnaW4tYm90dG9tOiAyMDBweDtcbn1cblxuLnNlYXJjaCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbjogLjVlbTtcblxuICAgICYubWluIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDE4ZW07XG4gICAgfVxufVxuXG4ubWluIHtcbiAgICAuc2VhcmNoLWlucHV0IHtcbiAgICAgICAgYm90dG9tOiBhdXRvO1xuICAgICAgICByaWdodDogYXV0bztcbiAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC0xMDAlLCAtNTAlKTtcblxuICAgICAgICAuaW5wdXQge1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IG5vbmU7XG4gICAgICAgICAgICBmb250LXNpemU6IDFlbTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLnNlYXJjaC1pbnB1dCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvdHRvbTogLTZweDtcbiAgICByaWdodDogLTFlbTtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXM7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgJi5zaG93IHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG5cbiAgICAuaW5wdXQge1xuICAgICAgICBtYXJnaW46IDAgMWVtIDFlbTtcbiAgICAgICAgcGFkZGluZzogMCAuNWVtO1xuICAgICAgICBoZWlnaHQ6IDMuNWVtO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwIDAgNHB4IDRweDtcbiAgICAgICAgQGluY2x1ZGUgYm94LXNoYWRvdygpO1xuICAgICAgICBmb250LXNpemU6IC44ZW07XG4gICAgfVxufVxuXG4uaXRlbSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHdpZHRoOiA2NDBweDtcbiAgICBtYXJnaW46IC41ZW0gYXV0bztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAxZW0pO1xuICAgIHotaW5kZXg6IDA7XG59XG5cbi5pcy1zZWFyY2gge1xuICAgIHBhZGRpbmctdG9wOiAyZW07XG59XG5cbi5mb290ZXIge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2NjYztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3c7XG5cbiAgICBidXR0b24ge1xuICAgICAgICBtaW4td2lkdGg6IDhlbTtcbiAgICAgICAgbWFyZ2luOi41ZW07XG4gICAgfVxufVxuXG5mb3JtIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5maWVsZCB7XG4gICAgbWFyZ2luOiAwIC41ZW07XG4gICAgbWF4LWhlaWdodDogMy41ZW07XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICBkaXYge1xuICAgICAgICBwYWRkaW5nOiAxNHB4IDE1cHggMCAwO1xuICAgIH1cbiAgICBkaXYsIC5tYXQtZm9ybS1maWVsZCB7XG4gICAgICAgIHdpZHRoOiBmaXQtY29udGVudDtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgICAgICAgd2lkdGg6IDExMHB4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQGluY2x1ZGUgcmVzcG9uZC10byhtb2JpbGUpIHtcbiAgICAgICAgbWF4LWhlaWdodDogNC43NWVtO1xuICAgICAgICAuY2F0X2ZpZWxkX2xhYmVsIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHRvcDogLTE4cHg7XG4gICAgICAgICAgICBsZWZ0OiAxMHB4O1xuICAgICAgICB9XG4gICAgICAgIC5tYXQtZm9ybS1maWVsZCB7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4uY29udGVudHMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIG1heC13aWR0aDogNzY4cHg7XG4gICAgbWFyZ2luOiBhdXRvO1xufVxuXG4uY2F0ZWdvcnkge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICBoZWlnaHQ6IDEwZW07XG4gICAgd2lkdGg6IDEwZW07XG4gICAgbWFyZ2luOiAxZW07XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIGZvbnQtc2l6ZTogMWVtO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAyMDBtcztcblxuICAgICY6aG92ZXIge1xuICAgICAgICBAaW5jbHVkZSBib3gtc2hhZG93O1xuICAgIH1cblxuICAgIC5vdmVybGF5IHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoIzAwMCwgLjM1KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIH1cblxuICAgIC5uYW1lIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgICAgei1pbmRleDogOTk7XG4gICAgICAgIG1heC13aWR0aDogOWVtO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4yNWVtO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgfVxufVxuXG5tYXQtZm9ybS1maWVsZCB7XG4gICAgQGluY2x1ZGUgcmVzcG9uZC10byhtb2JpbGUpIHtcbiAgICAgICAgd2lkdGg6IDExLjc1ZW07XG4gICAgfVxufVxuXG5sYWJlbCB7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBmb250LXNpemU6IC44ZW07XG4gICAgbWFyZ2luLXJpZ2h0OiAuNzVlbTtcbn1cblxuLmVtcHR5LXN0YXRlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBwYWRkaW5nOiAxZW07XG4gICAgbWF4LXdpZHRoOiBjYWxjKDEwMHZ3IC0gMmVtKTtcbiAgICBAaW5jbHVkZSBib3gtc2hhZG93O1xuXG4gICAgc3BhbiB7XG4gICAgICAgIGNvbG9yOiAjY2UxYTUxO1xuICAgIH1cblxuICAgIC5ib2xkIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICB9XG5cbiAgICBpbWcge1xuICAgICAgICBoZWlnaHQ6IDZlbTtcbiAgICAgICAgd2lkdGg6IDhlbTtcbiAgICB9XG5cbiAgICBwIHtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICBtYXgtd2lkdGg6IDI0ZW07XG4gICAgfVxufVxuXG4uaW5mby1ibG9jayB7XG4gICAgLmljb24ge1xuICAgICAgICBoZWlnaHQ6IDIuNWVtO1xuICAgICAgICB3aWR0aDogMi41ZW07XG4gICAgfVxufVxuIiwiLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46aG9zdCB7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuLm9yZGVyLWRldGFpbHMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW46IGF1dG87XG4gIG1heC13aWR0aDogMTAwdnc7XG4gIG1pbi1oZWlnaHQ6IDY1dmg7XG59XG4ub3JkZXItZGV0YWlscy5jb21wYWN0IHtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBtaW4taGVpZ2h0OiAxNmVtO1xufVxuXG4uaGVhZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3gtc2hhZG93OiAwIDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMCAxcHggMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwgMCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtcbiAgei1pbmRleDogOTk7XG4gIHBhZGRpbmctdG9wOiAxMHB4O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI0U4RThFODtcbn1cblxuLmJvZHkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsZXg6IDE7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiA1MCU7XG4gIG92ZXJmbG93OiBoaWRkZW4gYXV0bztcbiAgbWFyZ2luLWJvdHRvbTogMjAwcHg7XG59XG5cbi5zZWFyY2gge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbjogMC41ZW07XG59XG4uc2VhcmNoLm1pbiB7XG4gIG1hcmdpbi1sZWZ0OiAxOGVtO1xufVxuXG4ubWluIC5zZWFyY2gtaW5wdXQge1xuICBib3R0b206IGF1dG87XG4gIHJpZ2h0OiBhdXRvO1xuICB0b3A6IDUwJTtcbiAgbGVmdDogMDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTEwMCUsIC01MCUpO1xufVxuLm1pbiAuc2VhcmNoLWlucHV0IC5pbnB1dCB7XG4gIG1hcmdpbjogMDtcbiAgYm94LXNoYWRvdzogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogbm9uZTtcbiAgZm9udC1zaXplOiAxZW07XG59XG5cbi5zZWFyY2gtaW5wdXQge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogLTZweDtcbiAgcmlnaHQ6IC0xZW07XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXM7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5zZWFyY2gtaW5wdXQuc2hvdyB7XG4gIG9wYWNpdHk6IDE7XG59XG4uc2VhcmNoLWlucHV0IC5pbnB1dCB7XG4gIG1hcmdpbjogMCAxZW0gMWVtO1xuICBwYWRkaW5nOiAwIDAuNWVtO1xuICBoZWlnaHQ6IDMuNWVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXItcmFkaXVzOiAwIDAgNHB4IDRweDtcbiAgYm94LXNoYWRvdzogMCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDAgMXB4IDFweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4xMik7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG59XG5cbi5pdGVtIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogNjQwcHg7XG4gIG1hcmdpbjogMC41ZW0gYXV0bztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NjYztcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDFlbSk7XG4gIHotaW5kZXg6IDA7XG59XG5cbi5pcy1zZWFyY2gge1xuICBwYWRkaW5nLXRvcDogMmVtO1xufVxuXG4uZm9vdGVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNjY2M7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJveC1zaGFkb3c6IDAgMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwIDFweCAxcHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xufVxuLmZvb3RlciBidXR0b24ge1xuICBtaW4td2lkdGg6IDhlbTtcbiAgbWFyZ2luOiAwLjVlbTtcbn1cblxuZm9ybSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5maWVsZCB7XG4gIG1hcmdpbjogMCAwLjVlbTtcbiAgbWF4LWhlaWdodDogMy41ZW07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5maWVsZCBkaXYge1xuICBwYWRkaW5nOiAxNHB4IDE1cHggMCAwO1xufVxuLmZpZWxkIGRpdiwgLmZpZWxkIC5tYXQtZm9ybS1maWVsZCB7XG4gIHdpZHRoOiBmaXQtY29udGVudDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmZpZWxkIGRpdiwgLmZpZWxkIC5tYXQtZm9ybS1maWVsZCB7XG4gICAgd2lkdGg6IDExMHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmZpZWxkIGRpdiwgLmZpZWxkIC5tYXQtZm9ybS1maWVsZCB7XG4gICAgd2lkdGg6IDExMHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuZmllbGQge1xuICAgIG1heC1oZWlnaHQ6IDQuNzVlbTtcbiAgfVxuICAuZmllbGQgLmNhdF9maWVsZF9sYWJlbCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogLTE4cHg7XG4gICAgbGVmdDogMTBweDtcbiAgfVxuICAuZmllbGQgLm1hdC1mb3JtLWZpZWxkIHtcbiAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmZpZWxkIHtcbiAgICBtYXgtaGVpZ2h0OiA0Ljc1ZW07XG4gIH1cbiAgLmZpZWxkIC5jYXRfZmllbGRfbGFiZWwge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IC0xOHB4O1xuICAgIGxlZnQ6IDEwcHg7XG4gIH1cbiAgLmZpZWxkIC5tYXQtZm9ybS1maWVsZCB7XG4gICAgbWFyZ2luLXRvcDogMTJweDtcbiAgfVxufVxuXG4uY29udGVudHMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBtYXgtd2lkdGg6IDc2OHB4O1xuICBtYXJnaW46IGF1dG87XG59XG5cbi5jYXRlZ29yeSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICBoZWlnaHQ6IDEwZW07XG4gIHdpZHRoOiAxMGVtO1xuICBtYXJnaW46IDFlbTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBmb250LXNpemU6IDFlbTtcbiAgYm9yZGVyOiBub25lO1xuICBwYWRkaW5nOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDIwMG1zO1xufVxuLmNhdGVnb3J5OmhvdmVyIHtcbiAgYm94LXNoYWRvdzogMCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDAgMXB4IDFweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4xMik7XG59XG4uY2F0ZWdvcnkgLm92ZXJsYXkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjM1KTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuLmNhdGVnb3J5IC5uYW1lIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDUwJTtcbiAgbGVmdDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgei1pbmRleDogOTk7XG4gIG1heC13aWR0aDogOWVtO1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogMS4yNWVtO1xuICBtYXJnaW46IDA7XG59XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIG1hdC1mb3JtLWZpZWxkIHtcbiAgICB3aWR0aDogMTEuNzVlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIG1hdC1mb3JtLWZpZWxkIHtcbiAgICB3aWR0aDogMTEuNzVlbTtcbiAgfVxufVxuXG5sYWJlbCB7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG4gIG1hcmdpbi1yaWdodDogMC43NWVtO1xufVxuXG4uZW1wdHktc3RhdGUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIHBhZGRpbmc6IDFlbTtcbiAgbWF4LXdpZHRoOiBjYWxjKDEwMHZ3IC0gMmVtKTtcbiAgYm94LXNoYWRvdzogMCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDAgMXB4IDFweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4xMik7XG59XG4uZW1wdHktc3RhdGUgc3BhbiB7XG4gIGNvbG9yOiAjY2UxYTUxO1xufVxuLmVtcHR5LXN0YXRlIC5ib2xkIHtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbi5lbXB0eS1zdGF0ZSBpbWcge1xuICBoZWlnaHQ6IDZlbTtcbiAgd2lkdGg6IDhlbTtcbn1cbi5lbXB0eS1zdGF0ZSBwIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXgtd2lkdGg6IDI0ZW07XG59XG5cbi5pbmZvLWJsb2NrIC5pY29uIHtcbiAgaGVpZ2h0OiAyLjVlbTtcbiAgd2lkdGg6IDIuNWVtO1xufSJdfQ== */"] + styles: ["[_nghost-%COMP%] {\n height: 100%;\n}\n.order-details[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n flex-direction: column;\n height: 100%;\n width: 100%;\n margin: auto;\n max-width: 100vw;\n min-height: 63vh;\n}\n.order-details.compact[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n min-height: 16em;\n}\n.header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n width: 100%;\n background-color: #fff;\n box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12);\n z-index: 99;\n padding-top: 10px;\n border-top: 1px solid #E8E8E8;\n}\n.body[_ngcontent-%COMP%] {\n position: relative;\n flex: 1;\n width: 100%;\n min-height: 50%;\n overflow: hidden auto;\n margin-bottom: 200px;\n}\n.search[_ngcontent-%COMP%] {\n position: relative;\n margin: 0.5em;\n}\n.search.min[_ngcontent-%COMP%] {\n margin-left: 18em;\n}\n.min[_ngcontent-%COMP%] .search-input[_ngcontent-%COMP%] {\n bottom: auto;\n right: auto;\n top: 50%;\n left: 0;\n transform: translate(-100%, -50%);\n}\n.min[_ngcontent-%COMP%] .search-input[_ngcontent-%COMP%] .input[_ngcontent-%COMP%] {\n margin: 0;\n box-shadow: none;\n background-color: none;\n font-size: 1em;\n}\n.search-input[_ngcontent-%COMP%] {\n position: absolute;\n bottom: -6px;\n right: -1em;\n opacity: 0;\n transition: opacity 200ms;\n transform: translateY(100%);\n overflow: hidden;\n}\n.search-input.show[_ngcontent-%COMP%] {\n opacity: 1;\n}\n.search-input[_ngcontent-%COMP%] .input[_ngcontent-%COMP%] {\n margin: 0 1em 1em;\n padding: 0 0.5em;\n height: 3.5em;\n background-color: #fff;\n border-radius: 0 0 4px 4px;\n box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12);\n font-size: 0.8em;\n}\n.item[_ngcontent-%COMP%] {\n position: relative;\n width: 640px;\n margin: 0.5em auto;\n background-color: #fff;\n border: 1px solid #ccc;\n border-radius: 4px;\n overflow: hidden;\n max-width: calc(100% - 1em);\n z-index: 0;\n}\n.is-search[_ngcontent-%COMP%] {\n padding-top: 2em;\n}\n.footer[_ngcontent-%COMP%] {\n width: 100%;\n text-align: center;\n border-top: 1px solid #ccc;\n background-color: #fff;\n box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12);\n}\n.footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n min-width: 8em;\n margin: 0.5em;\n}\nform[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n}\n.field[_ngcontent-%COMP%] {\n margin: 0 0.5em;\n max-height: 3.5em;\n display: flex;\n position: relative;\n}\n.field[_ngcontent-%COMP%] div[_ngcontent-%COMP%] {\n padding: 14px 15px 0 0;\n}\n.field[_ngcontent-%COMP%] div[_ngcontent-%COMP%], .field[_ngcontent-%COMP%] .mat-form-field[_ngcontent-%COMP%] {\n width: -webkit-fit-content;\n width: -moz-fit-content;\n width: fit-content;\n display: inline-block;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .field[_ngcontent-%COMP%] div[_ngcontent-%COMP%], .field[_ngcontent-%COMP%] .mat-form-field[_ngcontent-%COMP%] {\n width: 110px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .field[_ngcontent-%COMP%] div[_ngcontent-%COMP%], .field[_ngcontent-%COMP%] .mat-form-field[_ngcontent-%COMP%] {\n width: 110px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .field[_ngcontent-%COMP%] {\n max-height: 4.75em;\n }\n .field[_ngcontent-%COMP%] .cat_field_label[_ngcontent-%COMP%] {\n position: absolute;\n top: -18px;\n left: 10px;\n }\n .field[_ngcontent-%COMP%] .mat-form-field[_ngcontent-%COMP%] {\n margin-top: 12px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .field[_ngcontent-%COMP%] {\n max-height: 4.75em;\n }\n .field[_ngcontent-%COMP%] .cat_field_label[_ngcontent-%COMP%] {\n position: absolute;\n top: -18px;\n left: 10px;\n }\n .field[_ngcontent-%COMP%] .mat-form-field[_ngcontent-%COMP%] {\n margin-top: 12px;\n }\n}\n.contents[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n max-width: 768px;\n margin: auto;\n}\n.category[_ngcontent-%COMP%] {\n position: relative;\n background-position: center;\n background-size: cover;\n height: 10em;\n width: 10em;\n margin: 1em;\n border-radius: 4px;\n font-size: 1em;\n border: none;\n padding: 0;\n background-color: #fff;\n transition: box-shadow 200ms;\n}\n.category[_ngcontent-%COMP%]:hover {\n box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12);\n}\n.category[_ngcontent-%COMP%] .overlay[_ngcontent-%COMP%] {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.35);\n border-radius: 4px;\n}\n.category[_ngcontent-%COMP%] .name[_ngcontent-%COMP%] {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: 99;\n max-width: 9em;\n white-space: normal;\n line-height: 1.25em;\n margin: 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n mat-form-field[_ngcontent-%COMP%] {\n width: 11.75em;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n mat-form-field[_ngcontent-%COMP%] {\n width: 11.75em;\n }\n}\nlabel[_ngcontent-%COMP%] {\n font-weight: 500;\n font-size: 0.8em;\n margin-right: 0.75em;\n}\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n flex-direction: column;\n background-color: #fff;\n border-radius: 4px;\n padding: 1em;\n max-width: calc(100vw - 2em);\n box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12);\n}\n.empty-state[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: #ce1a51;\n}\n.empty-state[_ngcontent-%COMP%] .bold[_ngcontent-%COMP%] {\n font-weight: 400;\n}\n.empty-state[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n height: 6em;\n width: 8em;\n}\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n text-align: center;\n max-width: 24em;\n}\n.info-block[_ngcontent-%COMP%] .icon[_ngcontent-%COMP%] {\n height: 2.5em;\n width: 2.5em;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9jYXRlcmluZy9vcmRlci1kZXRhaWxzL29yZGVyLWRldGFpbHMuY29tcG9uZW50LnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9jYXRlcmluZy9vcmRlci1kZXRhaWxzL29yZGVyLWRldGFpbHMuY29tcG9uZW50LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQTFEQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FDNUNBOztzQkFBQTtBQ1hBO0VBQ0ksWUFBQTtBQ3lCSjtBRHRCQTtFQUNJLGFBQUE7RUFDQSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0EsWUFBQTtFQUNBLFdBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7RUFDQSxnQkFBQTtBQ3lCSjtBRHZCSTtFQUNJLGtCQUFBO0VBQ0EsZ0JBQUE7QUN5QlI7QURyQkE7RUFDSSxhQUFBO0VBQ0EsdUJBQUE7RUFDQSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0EsV0FBQTtFQUNBLHNCQUFBO0VEcEJBLGlIQUFBO0VDc0JBLFdBQUE7RUFDQSxpQkFBQTtFQUNBLDZCQUFBO0FDd0JKO0FEckJBO0VBQ0ksa0JBQUE7RUFDQSxPQUFBO0VBQ0EsV0FBQTtFQUNBLGVBQUE7RUFDQSxx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QUNJLGFBQUE7RUFDQSxZQUFBO0FDbUNSIiwiZmlsZSI6ImFwcHMvc3RhZmYvc3JjL2FwcC9ib29raW5nL2NhdGVyaW5nL29yZGVyLWRldGFpbHMvb3JkZXItZGV0YWlscy5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGNvbG9yLWJyYW5kLWVsZWN0cmljLWJsdWU6ICMyMjUxZmY7XG4kY29sb3ItYnJhbmQtZGVlcC1ibHVlOiAjMDUxYzJjO1xuJGNvbG9yLWJyYW5kLWN5YW46ICMwMGE5ZjQ7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kZm9udC1kYXJrOiAjMDAwO1xuJGZvbnQtbGlnaHQ6ICNmZmY7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuJGdyZWVuMTogIzIxOTY1MztcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2xvci1wcmltYXJ5OiAjMTkzN2VhO1xuJGNvbG9yLXByaW1hcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcbiRjb2xvci1wcmltYXJ5LWRhcms6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuXG4kY29sb3Itc2Vjb25kYXJ5OiAjNDI4NUY0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodDogbGlnaHRlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG4kY29sb3Itc2Vjb25kYXJ5LWRhcms6IGRhcmtlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG5cbiRiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuJGZvb3Rlci1iYWNrOiAjMjYzMjM4O1xuJGhlYWRlci1iYWNrOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNTFDMkMsICMwNTFDMkMgNDAlLCAjMEIyNDUzIDYwJSwgIzFGNDBFNiAxMDAlKTtcblxuJGNvbG9yLXRlcm5hcnk6ICMwNTFjMmM7XG5cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuXG4kZm9udC1zdGFjazogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiRoZWFkaW5nLWZvbnQ6IFwiTGFyaXNoTWNLaW5zZXlcIiwgJ0dlb3JnaWEnLCBzZXJpZjtcbiRmb250OiAkZm9udC1zdGFjaztcblxuJGZvbnQtZmFtaWx5LXByaW1hcnk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LXNlY29uZGFyeTogXCJCb3dlclwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiIHNlcmlmO1xuXG4kYmFzZS1zaXplOiAxNnB4O1xuJHRhYmxldC1zaXplOiAxNnB4O1xuJG1vYmlsZS1zaXplOiAxNnB4O1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGJyZWFrLW1vYmlsZTogNDUwcHg7XG4kYnJlYWstdGFibGV0OiA4MDBweDtcbiRicmVhay1sYXB0b3A6IDEwMjRweDtcblxuJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGU6IDgwMHB4O1xuJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQ6IDEwNDhweDtcbiRicmVhay1sYW5kc2NhcGUtbGFwdG9wOiAxMjgwcHg7XG4iLCJAaW1wb3J0ICcuL3ZhcmlhYmxlcyc7XG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuQG1peGluIGJveC1zaGFkb3coJGNvbG9yOiAjMDAwLCAkZGVwdGg6IDEpIHtcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMXB4ICogKCRkZXB0aCAtIDEpIHJnYmEoIzAwMCwgLjIpLFxuICAgICAgICAgICAgICAgIDAgMXB4IDFweCAwIHJnYmEoIzAwMCwgLjE0KSxcbiAgICAgICAgICAgICAgICAwIDJweCAxcHggLTFweCByZ2JhKCMwMDAsIC4xMik7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG5AbWl4aW4gcmVzcG9uZC10bygkbWVkaWEpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gIEBlbHNlIGlmICRtZWRpYSA9PSBsYXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1AZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQGltcG9ydCAndmFyaWFibGVzJztcbkBpbXBvcnQgJ21peGlucyc7XG5cbjpob3N0IHtcbiAgICBoZWlnaHQ6IDEwMCU7XG59XG5cbi5vcmRlci1kZXRhaWxzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luOiBhdXRvO1xuICAgIG1heC13aWR0aDogMTAwdnc7XG4gICAgbWluLWhlaWdodDogNjN2aDtcblxuICAgICYuY29tcGFjdCB7XG4gICAgICAgIGZvbnQtc2l6ZTogLjc1cmVtO1xuICAgICAgICBtaW4taGVpZ2h0OiAxNmVtO1xuICAgIH1cbn1cblxuLmhlYWRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgICBAaW5jbHVkZSBib3gtc2hhZG93O1xuICAgIHotaW5kZXg6IDk5O1xuICAgIHBhZGRpbmctdG9wOiAxMHB4O1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjRThFOEU4O1xufVxuXG4uYm9keSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGZsZXg6IDE7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWluLWhlaWdodDogNTAlO1xuICAgIG92ZXJmbG93OiBoaWRkZW4gYXV0bztcbiAgICBtYXJnaW4tYm90dG9tOiAyMDBweDtcbn1cblxuLnNlYXJjaCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbjogLjVlbTtcblxuICAgICYubWluIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDE4ZW07XG4gICAgfVxufVxuXG4ubWluIHtcbiAgICAuc2VhcmNoLWlucHV0IHtcbiAgICAgICAgYm90dG9tOiBhdXRvO1xuICAgICAgICByaWdodDogYXV0bztcbiAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC0xMDAlLCAtNTAlKTtcblxuICAgICAgICAuaW5wdXQge1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IG5vbmU7XG4gICAgICAgICAgICBmb250LXNpemU6IDFlbTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLnNlYXJjaC1pbnB1dCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvdHRvbTogLTZweDtcbiAgICByaWdodDogLTFlbTtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXM7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgJi5zaG93IHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG5cbiAgICAuaW5wdXQge1xuICAgICAgICBtYXJnaW46IDAgMWVtIDFlbTtcbiAgICAgICAgcGFkZGluZzogMCAuNWVtO1xuICAgICAgICBoZWlnaHQ6IDMuNWVtO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwIDAgNHB4IDRweDtcbiAgICAgICAgQGluY2x1ZGUgYm94LXNoYWRvdygpO1xuICAgICAgICBmb250LXNpemU6IC44ZW07XG4gICAgfVxufVxuXG4uaXRlbSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHdpZHRoOiA2NDBweDtcbiAgICBtYXJnaW46IC41ZW0gYXV0bztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAxZW0pO1xuICAgIHotaW5kZXg6IDA7XG59XG5cbi5pcy1zZWFyY2gge1xuICAgIHBhZGRpbmctdG9wOiAyZW07XG59XG5cbi5mb290ZXIge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2NjYztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3c7XG5cbiAgICBidXR0b24ge1xuICAgICAgICBtaW4td2lkdGg6IDhlbTtcbiAgICAgICAgbWFyZ2luOi41ZW07XG4gICAgfVxufVxuXG5mb3JtIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5maWVsZCB7XG4gICAgbWFyZ2luOiAwIC41ZW07XG4gICAgbWF4LWhlaWdodDogMy41ZW07XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICBkaXYge1xuICAgICAgICBwYWRkaW5nOiAxNHB4IDE1cHggMCAwO1xuICAgIH1cbiAgICBkaXYsIC5tYXQtZm9ybS1maWVsZCB7XG4gICAgICAgIHdpZHRoOiBmaXQtY29udGVudDtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgICAgICAgd2lkdGg6IDExMHB4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQGluY2x1ZGUgcmVzcG9uZC10byhtb2JpbGUpIHtcbiAgICAgICAgbWF4LWhlaWdodDogNC43NWVtO1xuICAgICAgICAuY2F0X2ZpZWxkX2xhYmVsIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHRvcDogLTE4cHg7XG4gICAgICAgICAgICBsZWZ0OiAxMHB4O1xuICAgICAgICB9XG4gICAgICAgIC5tYXQtZm9ybS1maWVsZCB7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4uY29udGVudHMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIG1heC13aWR0aDogNzY4cHg7XG4gICAgbWFyZ2luOiBhdXRvO1xufVxuXG4uY2F0ZWdvcnkge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICBoZWlnaHQ6IDEwZW07XG4gICAgd2lkdGg6IDEwZW07XG4gICAgbWFyZ2luOiAxZW07XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIGZvbnQtc2l6ZTogMWVtO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAyMDBtcztcblxuICAgICY6aG92ZXIge1xuICAgICAgICBAaW5jbHVkZSBib3gtc2hhZG93O1xuICAgIH1cblxuICAgIC5vdmVybGF5IHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoIzAwMCwgLjM1KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIH1cblxuICAgIC5uYW1lIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgICAgei1pbmRleDogOTk7XG4gICAgICAgIG1heC13aWR0aDogOWVtO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4yNWVtO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgfVxufVxuXG5tYXQtZm9ybS1maWVsZCB7XG4gICAgQGluY2x1ZGUgcmVzcG9uZC10byhtb2JpbGUpIHtcbiAgICAgICAgd2lkdGg6IDExLjc1ZW07XG4gICAgfVxufVxuXG5sYWJlbCB7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBmb250LXNpemU6IC44ZW07XG4gICAgbWFyZ2luLXJpZ2h0OiAuNzVlbTtcbn1cblxuLmVtcHR5LXN0YXRlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBwYWRkaW5nOiAxZW07XG4gICAgbWF4LXdpZHRoOiBjYWxjKDEwMHZ3IC0gMmVtKTtcbiAgICBAaW5jbHVkZSBib3gtc2hhZG93O1xuXG4gICAgc3BhbiB7XG4gICAgICAgIGNvbG9yOiAjY2UxYTUxO1xuICAgIH1cblxuICAgIC5ib2xkIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICB9XG5cbiAgICBpbWcge1xuICAgICAgICBoZWlnaHQ6IDZlbTtcbiAgICAgICAgd2lkdGg6IDhlbTtcbiAgICB9XG5cbiAgICBwIHtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICBtYXgtd2lkdGg6IDI0ZW07XG4gICAgfVxufVxuXG4uaW5mby1ibG9jayB7XG4gICAgLmljb24ge1xuICAgICAgICBoZWlnaHQ6IDIuNWVtO1xuICAgICAgICB3aWR0aDogMi41ZW07XG4gICAgfVxufVxuIiwiLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46aG9zdCB7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuLm9yZGVyLWRldGFpbHMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW46IGF1dG87XG4gIG1heC13aWR0aDogMTAwdnc7XG4gIG1pbi1oZWlnaHQ6IDYzdmg7XG59XG4ub3JkZXItZGV0YWlscy5jb21wYWN0IHtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBtaW4taGVpZ2h0OiAxNmVtO1xufVxuXG4uaGVhZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3gtc2hhZG93OiAwIDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMCAxcHggMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwgMCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtcbiAgei1pbmRleDogOTk7XG4gIHBhZGRpbmctdG9wOiAxMHB4O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI0U4RThFODtcbn1cblxuLmJvZHkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsZXg6IDE7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiA1MCU7XG4gIG92ZXJmbG93OiBoaWRkZW4gYXV0bztcbiAgbWFyZ2luLWJvdHRvbTogMjAwcHg7XG59XG5cbi5zZWFyY2gge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbjogMC41ZW07XG59XG4uc2VhcmNoLm1pbiB7XG4gIG1hcmdpbi1sZWZ0OiAxOGVtO1xufVxuXG4ubWluIC5zZWFyY2gtaW5wdXQge1xuICBib3R0b206IGF1dG87XG4gIHJpZ2h0OiBhdXRvO1xuICB0b3A6IDUwJTtcbiAgbGVmdDogMDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTEwMCUsIC01MCUpO1xufVxuLm1pbiAuc2VhcmNoLWlucHV0IC5pbnB1dCB7XG4gIG1hcmdpbjogMDtcbiAgYm94LXNoYWRvdzogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogbm9uZTtcbiAgZm9udC1zaXplOiAxZW07XG59XG5cbi5zZWFyY2gtaW5wdXQge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogLTZweDtcbiAgcmlnaHQ6IC0xZW07XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXM7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5zZWFyY2gtaW5wdXQuc2hvdyB7XG4gIG9wYWNpdHk6IDE7XG59XG4uc2VhcmNoLWlucHV0IC5pbnB1dCB7XG4gIG1hcmdpbjogMCAxZW0gMWVtO1xuICBwYWRkaW5nOiAwIDAuNWVtO1xuICBoZWlnaHQ6IDMuNWVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXItcmFkaXVzOiAwIDAgNHB4IDRweDtcbiAgYm94LXNoYWRvdzogMCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDAgMXB4IDFweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4xMik7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG59XG5cbi5pdGVtIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogNjQwcHg7XG4gIG1hcmdpbjogMC41ZW0gYXV0bztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NjYztcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDFlbSk7XG4gIHotaW5kZXg6IDA7XG59XG5cbi5pcy1zZWFyY2gge1xuICBwYWRkaW5nLXRvcDogMmVtO1xufVxuXG4uZm9vdGVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNjY2M7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJveC1zaGFkb3c6IDAgMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwIDFweCAxcHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xufVxuLmZvb3RlciBidXR0b24ge1xuICBtaW4td2lkdGg6IDhlbTtcbiAgbWFyZ2luOiAwLjVlbTtcbn1cblxuZm9ybSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5maWVsZCB7XG4gIG1hcmdpbjogMCAwLjVlbTtcbiAgbWF4LWhlaWdodDogMy41ZW07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5maWVsZCBkaXYge1xuICBwYWRkaW5nOiAxNHB4IDE1cHggMCAwO1xufVxuLmZpZWxkIGRpdiwgLmZpZWxkIC5tYXQtZm9ybS1maWVsZCB7XG4gIHdpZHRoOiBmaXQtY29udGVudDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmZpZWxkIGRpdiwgLmZpZWxkIC5tYXQtZm9ybS1maWVsZCB7XG4gICAgd2lkdGg6IDExMHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmZpZWxkIGRpdiwgLmZpZWxkIC5tYXQtZm9ybS1maWVsZCB7XG4gICAgd2lkdGg6IDExMHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuZmllbGQge1xuICAgIG1heC1oZWlnaHQ6IDQuNzVlbTtcbiAgfVxuICAuZmllbGQgLmNhdF9maWVsZF9sYWJlbCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogLTE4cHg7XG4gICAgbGVmdDogMTBweDtcbiAgfVxuICAuZmllbGQgLm1hdC1mb3JtLWZpZWxkIHtcbiAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmZpZWxkIHtcbiAgICBtYXgtaGVpZ2h0OiA0Ljc1ZW07XG4gIH1cbiAgLmZpZWxkIC5jYXRfZmllbGRfbGFiZWwge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IC0xOHB4O1xuICAgIGxlZnQ6IDEwcHg7XG4gIH1cbiAgLmZpZWxkIC5tYXQtZm9ybS1maWVsZCB7XG4gICAgbWFyZ2luLXRvcDogMTJweDtcbiAgfVxufVxuXG4uY29udGVudHMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBtYXgtd2lkdGg6IDc2OHB4O1xuICBtYXJnaW46IGF1dG87XG59XG5cbi5jYXRlZ29yeSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICBoZWlnaHQ6IDEwZW07XG4gIHdpZHRoOiAxMGVtO1xuICBtYXJnaW46IDFlbTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBmb250LXNpemU6IDFlbTtcbiAgYm9yZGVyOiBub25lO1xuICBwYWRkaW5nOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDIwMG1zO1xufVxuLmNhdGVnb3J5OmhvdmVyIHtcbiAgYm94LXNoYWRvdzogMCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDAgMXB4IDFweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4xMik7XG59XG4uY2F0ZWdvcnkgLm92ZXJsYXkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjM1KTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuLmNhdGVnb3J5IC5uYW1lIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDUwJTtcbiAgbGVmdDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgei1pbmRleDogOTk7XG4gIG1heC13aWR0aDogOWVtO1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogMS4yNWVtO1xuICBtYXJnaW46IDA7XG59XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIG1hdC1mb3JtLWZpZWxkIHtcbiAgICB3aWR0aDogMTEuNzVlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIG1hdC1mb3JtLWZpZWxkIHtcbiAgICB3aWR0aDogMTEuNzVlbTtcbiAgfVxufVxuXG5sYWJlbCB7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG4gIG1hcmdpbi1yaWdodDogMC43NWVtO1xufVxuXG4uZW1wdHktc3RhdGUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIHBhZGRpbmc6IDFlbTtcbiAgbWF4LXdpZHRoOiBjYWxjKDEwMHZ3IC0gMmVtKTtcbiAgYm94LXNoYWRvdzogMCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDAgMXB4IDFweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4xMik7XG59XG4uZW1wdHktc3RhdGUgc3BhbiB7XG4gIGNvbG9yOiAjY2UxYTUxO1xufVxuLmVtcHR5LXN0YXRlIC5ib2xkIHtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbi5lbXB0eS1zdGF0ZSBpbWcge1xuICBoZWlnaHQ6IDZlbTtcbiAgd2lkdGg6IDhlbTtcbn1cbi5lbXB0eS1zdGF0ZSBwIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXgtd2lkdGg6IDI0ZW07XG59XG5cbi5pbmZvLWJsb2NrIC5pY29uIHtcbiAgaGVpZ2h0OiAyLjVlbTtcbiAgd2lkdGg6IDIuNWVtO1xufSJdfQ== */"] }); /*@__PURE__*/ @@ -59568,6 +60549,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons event: [{ type: core_1.Output }], + placeIntoModal: [{ + type: core_1.Input + }], _input_el: [{ type: core_1.ViewChild, args: ['input'] @@ -60109,6 +61093,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons /** Emiiter for order events */ this.order = new core_1.EventEmitter(); + /** + * placeIntoModal: Input decorator indecate as a flag to adapt component design into a dialog modal + * (by hiding header and adjusting height so that fit into a modal) + */ + + this.placeIntoModal = false; this["delete"] = false; } /** List of orders in the booking */ @@ -60208,14 +61198,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons date: "date", space_list: "space_list", all_day: "all_day", - next_disabled: "next_disabled" + next_disabled: "next_disabled", + placeIntoModal: "placeIntoModal" }, outputs: { event: "event", order: "order" }, decls: 14, - vars: 3, + vars: 5, consts: [[1, "catering", "order-list"], [1, "header"], [1, "body"], [4, "ngIf", "ngIfElse"], [1, "bottom-panel-buttons"], [1, "buttons"], ["mat-button", "", "color", "secondary", "name", "previous", 1, "mck-secondary-button", 3, "click"], ["mat-button", "", "color", "primary", "name", "next", 1, "mck-primary-button", 3, "disabled", "click"], ["empty_state", ""], [1, "list"], [3, "space_list", "order", "date", "edit", "delete", 4, "ngFor", "ngForOf"], ["mat-button", "", "name", "new", 3, "click"], [3, "space_list", "order", "date", "edit", "delete"], [1, "info-block", "center"], [1, "icon"], [3, "icon"], [1, "text"]], template: function BookingCateringOrderListComponent_Template(rf, ctx) { if (rf & 1) { @@ -60253,12 +61244,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons i0.ɵɵadvance(5); i0.ɵɵproperty("ngIf", ctx.orders && ctx.orders.length)("ngIfElse", _r1); - i0.ɵɵadvance(5); + i0.ɵɵadvance(1); + i0.ɵɵstyleProp("position", ctx.placeIntoModal ? "relative" : "fixed"); + i0.ɵɵadvance(4); i0.ɵɵproperty("disabled", ctx.next_disabled && !ctx["delete"]); } }, directives: [i1.NgIf, i2.MatButton, i1.NgForOf, i3.CateringOrderListItemComponent, i4.IconComponent], - styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n[_nghost-%COMP%] {\n height: 100%;\n}\n.order-list[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n flex-direction: column;\n height: 100%;\n width: 768px;\n margin: auto;\n max-width: 100vw;\n background-color: #fff;\n box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12);\n}\n.body[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n flex-direction: column;\n flex: 1;\n width: 100%;\n min-height: 50%;\n overflow: auto;\n margin-bottom: 210px;\n}\n.body[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n width: 8em;\n}\n.list[_ngcontent-%COMP%] {\n width: 100%;\n}\n.list[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] {\n border: 1px solid #ccc;\n}\n.list[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n.footer[_ngcontent-%COMP%] {\n width: 100vw;\n background-color: white;\n text-align: center;\n border-top: 1px solid #ccc;\n height: 100px;\n}\n.footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n min-width: 8em;\n margin: 0.5em;\n}\n.info-block[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin-top: 1em;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvdmFycy5zY3NzIiwiYXBwcy9zdGFmZi9zcmMvYXBwL2Jvb2tpbmcvY2F0ZXJpbmcvb3JkZXItbGlzdC9vcmRlci1saXN0LmNvbXBvbmVudC5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy91aS9zcmMvbGliL21peGlucy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvYXBwcy9zdGFmZi9zcmMvYXBwL2Jvb2tpbmcvY2F0ZXJpbmcvb3JkZXItbGlzdC9vcmRlci1saXN0LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzswQkFBQTtBQVFBOzswQkFBQTtBQWtDQTs7Y0FBQTtBQWdCQTs7c0JBQUE7QUExREE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQzVDQTs7c0JBQUE7QUM2QkE7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDa0NsQjtBRDhEQTs7c0JBQUE7QUVrT0E7OztFQUFBO0FDaFVBO0VBQ0ksWUFBQTtBRjBDSjtBRXZDQTtFQUNJLGFBQUE7RUFDQSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0EsWUFBQTtFQUNBLFlBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7RUFDQSxzQkFBQTtFSlBBLGlIQUFBO0FFa0RKO0FFdkNBO0VBQ0ksa0JBQUE7RUFDQSxhQUFBO0VBQ0EsbUJBQUE7RUFDQSxzQkFBQTtFQUNBLE9BQUE7RUFDQSxXQUFBO0VBQ0EsZUFBQTtFQUNBLGNBQUE7RUFDQSxvQkFBQTtBRjBDSjtBRXhDSTtFQUNJLFVBQUE7QUYwQ1I7QUV0Q0E7RUFDSSxXQUFBO0FGeUNKO0FFeENJO0VBQ0ksc0JBQUE7QUYwQ1I7QUV6Q1E7RUFDSSxxQ0FBQTtBRjJDWjtBRXRDQTtFQUNJLFlBQUE7RUFDQSx1QkFBQTtFQUNBLGtCQUFBO0VBQ0EsMEJBQUE7RUFDQSxhQUFBO0FGeUNKO0FFeENJO0VBQ0ksY0FBQTtFQUNBLGFBQUE7QUYwQ1I7QUVuQ0k7RUFDSSxlQUFBO0FGc0NSIiwiZmlsZSI6ImFwcHMvc3RhZmYvc3JjL2FwcC9ib29raW5nL2NhdGVyaW5nL29yZGVyLWxpc3Qvb3JkZXItbGlzdC5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGNvbG9yLWJyYW5kLWVsZWN0cmljLWJsdWU6ICMyMjUxZmY7XG4kY29sb3ItYnJhbmQtZGVlcC1ibHVlOiAjMDUxYzJjO1xuJGNvbG9yLWJyYW5kLWN5YW46ICMwMGE5ZjQ7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kZm9udC1kYXJrOiAjMDAwO1xuJGZvbnQtbGlnaHQ6ICNmZmY7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuJGdyZWVuMTogIzIxOTY1MztcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2xvci1wcmltYXJ5OiAjMTkzN2VhO1xuJGNvbG9yLXByaW1hcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcbiRjb2xvci1wcmltYXJ5LWRhcms6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuXG4kY29sb3Itc2Vjb25kYXJ5OiAjNDI4NUY0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodDogbGlnaHRlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG4kY29sb3Itc2Vjb25kYXJ5LWRhcms6IGRhcmtlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG5cbiRiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuJGZvb3Rlci1iYWNrOiAjMjYzMjM4O1xuJGhlYWRlci1iYWNrOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNTFDMkMsICMwNTFDMkMgNDAlLCAjMEIyNDUzIDYwJSwgIzFGNDBFNiAxMDAlKTtcblxuJGNvbG9yLXRlcm5hcnk6ICMwNTFjMmM7XG5cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuXG4kZm9udC1zdGFjazogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiRoZWFkaW5nLWZvbnQ6IFwiTGFyaXNoTWNLaW5zZXlcIiwgJ0dlb3JnaWEnLCBzZXJpZjtcbiRmb250OiAkZm9udC1zdGFjaztcblxuJGZvbnQtZmFtaWx5LXByaW1hcnk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LXNlY29uZGFyeTogXCJCb3dlclwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiIHNlcmlmO1xuXG4kYmFzZS1zaXplOiAxNnB4O1xuJHRhYmxldC1zaXplOiAxNnB4O1xuJG1vYmlsZS1zaXplOiAxNnB4O1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGJyZWFrLW1vYmlsZTogNDUwcHg7XG4kYnJlYWstdGFibGV0OiA4MDBweDtcbiRicmVhay1sYXB0b3A6IDEwMjRweDtcblxuJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGU6IDgwMHB4O1xuJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQ6IDEwNDhweDtcbiRicmVhay1sYW5kc2NhcGUtbGFwdG9wOiAxMjgwcHg7XG4iLCJAaW1wb3J0ICcuL3ZhcmlhYmxlcyc7XG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuQG1peGluIGJveC1zaGFkb3coJGNvbG9yOiAjMDAwLCAkZGVwdGg6IDEpIHtcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMXB4ICogKCRkZXB0aCAtIDEpIHJnYmEoIzAwMCwgLjIpLFxuICAgICAgICAgICAgICAgIDAgMXB4IDFweCAwIHJnYmEoIzAwMCwgLjE0KSxcbiAgICAgICAgICAgICAgICAwIDJweCAxcHggLTFweCByZ2JhKCMwMDAsIC4xMik7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG5AbWl4aW4gcmVzcG9uZC10bygkbWVkaWEpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gIEBlbHNlIGlmICRtZWRpYSA9PSBsYXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1AZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiJHByaW1hcnk6ICMxRjQwRTY7XG4kZm9ybS1sYWJlbDogIzA1MUMyQztcbiRzZWNvbmRhcnktbGFiZWw6ICM3Njc2NzY7XG4kYm9yZGVyOiAjQjNCM0IzO1xuJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ6ICNEMEQwRDA7XG4kY2hpcC1jb2xvcjogIzMzMzMzMztcbiRwbGFjZWhvbGRlci1jb2xvcjogIzdGN0Y3RjtcbiRiYWNrZ3JvdW5kLWNvbG9yOiAjRjBGMEYwO1xuJHBhZ2UtYmFja2dyb3VuZC1jb2xvcjogI0Y4RjlGQTtcbiRzZWxlY3RlZC1vcHRpb246ICNFNkU2RTY7XG4kY29sb3ItYnJhbmQteWVsbG93OiAjZmZkMDQ4O1xuJGxpZ2h0LXllbGxvdzogI2ZmZjNjZTtcbiRjb2FjaG1hcmstdGV4dDogIzZmNGQwMDtcbiRlcnJvci1jb2xvcjogI0UxMkU0MDtcbiRuby1maWx0ZXJzLWNvbG9yOiAjQkNCQ0JDO1xuJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yOiAjRjRGNEY0O1xuJHByaW1hcnktaGlnaGxpZ2h0OiAjMjI1MUZGO1xuJHNjcm9sbGJhci1jb2xvcjogIzc1NzU3NTtcblxuJGF2YWlsYWJsZS1jb2xvcjogIzVEOUQ1MjtcbiRhdmFpbGFibGUtYnktcmVxdWVzdC1jb2xvcjogI0Y1QjUzRjtcbiRpbi11c2UtY29sb3I6ICNENDQ4M0U7XG4kbm90LWJvb2thYmxlLWNvbG9yOiAjQ0NDQ0NDO1xuXG4kbW9kYWwtYm9keS1oZWFkaW5nOiAjNEQ0RDREO1xuJGFsZXJ0LW92ZXJsYXktYmc6IHJnYmEoNSwgMjgsIDQ0LCAwLjg1KTtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG5cbiRwZW5kaW5nOiAjZmZiMzAwO1xuJHBlbmRpbmctbGlnaHQ6IGxpZ2h0ZW4oJHBlbmRpbmcsIDEwKTtcbiRwZW5kaW5nLWRhcms6IGRhcmtlbigkcGVuZGluZywgMTApO1xuXG4kZXJyb3I6ICNlNTM5MzU7XG4kZXJyb3ItbGlnaHQ6IGxpZ2h0ZW4oJGVycm9yLCAxMCk7XG4kZXJyb3ItZGFyazogZGFya2VuKCRlcnJvciwgMTApO1xuXG4kY29hY2htYXJrLWJnOiAjRUJFQkY2O1xuJGNvYWNobWFyay1kYXJrLXRleHQ6ICMxQjFCMTk7XG4kZXJyb3ItdGV4dDogI2ZmZjtcblxuLyoqXG4gKiBTcGFjaW5nXG4gKi9cblxuLy8gNHB4XG4kc3BhY2luZy1zbWFsbGVzdDogMC4yNXJlbTtcblxuLy8gOHB4XG4kc3BhY2luZy14eHNtYWxsOiAwLjVyZW07XG5cbi8vIDEycHhcbiRzcGFjaW5nLXhzbWFsbDogMC43NXJlbTtcblxuLy8gMTZweFxuJHNwYWNpbmctc21hbGw6IDFyZW07XG5cbi8vIDIwcHhcbiRzcGFjaW5nLXNtYWxsLW1lZGl1bTogMS4yNXJlbTtcblxuLy8gMjRweFxuJHNwYWNpbmctbWVkaXVtOiAxLjVyZW07XG5cbi8vIDI4cHhcbiRzcGFjaW5nLW1lZGl1bS1sYXJnZTogMS43NXJlbTtcblxuLy8gMzJweFxuJHNwYWNpbmctbGFyZ2U6IDJyZW07XG5cbi8vIDQ4cHhcbiRzcGFjaW5nLXhsYXJnZTogM3JlbTtcblxuLy8gNjRweFxuJHNwYWNpbmcteHhsYXJnZTogNHJlbTtcblxuLy8gOTZweFxuJHNwYWNpbmctbGFyZ2VzdDogNnJlbTtcblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbiRkZXZpY2UtbW9iaWxlLXNpemU6IDQ1MHB4O1xuJGRldmljZS10YWJsZXQtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhcHRvcC1zaXplOiAxMDI0cHg7XG5cbiRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplOiAxMDQ4cHg7XG4kZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZTogMTI4MHB4O1xuXG5cbjpleHBvcnQge1xuICAgIHByaW1hcnk6ICRwcmltYXJ5O1xuICAgIHNlY29uZGFyeUxhYmVsOiAkc2Vjb25kYXJ5LWxhYmVsO1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuJGljb24tc21hbGw6IDE2cHg7XG4kaWNvbi1tZWRpdW06IDI0cHg7XG4kaWNvbi1sYXJnZTogMzJweDtcbiRpY29uLXhsYXJnZTogNDhweDtcbiIsIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG46aG9zdCB7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuLm9yZGVyLWxpc3Qge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiA3NjhweDtcbiAgbWFyZ2luOiBhdXRvO1xuICBtYXgtd2lkdGg6IDEwMHZ3O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3gtc2hhZG93OiAwIDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMCAxcHggMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwgMCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtcbn1cblxuLmJvZHkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZsZXg6IDE7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiA1MCU7XG4gIG92ZXJmbG93OiBhdXRvO1xuICBtYXJnaW4tYm90dG9tOiAyMTBweDtcbn1cbi5ib2R5IGJ1dHRvbiB7XG4gIHdpZHRoOiA4ZW07XG59XG5cbi5saXN0IHtcbiAgd2lkdGg6IDEwMCU7XG59XG4ubGlzdCA+ICoge1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xufVxuLmxpc3QgPiAqOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cblxuLmZvb3RlciB7XG4gIHdpZHRoOiAxMDB2dztcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNjY2M7XG4gIGhlaWdodDogMTAwcHg7XG59XG4uZm9vdGVyIGJ1dHRvbiB7XG4gIG1pbi13aWR0aDogOGVtO1xuICBtYXJnaW46IDAuNWVtO1xufVxuXG4uaW5mby1ibG9jayBidXR0b24ge1xuICBtYXJnaW4tdG9wOiAxZW07XG59IiwiQGltcG9ydCBcInZhcnNcIjtcblxuQG1peGluIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJHNpemUsICRxdWFsaWZpZXIpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBpZiAoJHF1YWxpZmllciA9PSBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIGlmICgkcXVhbGlmaWVyID09IG1heC13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtYXgtd2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBtaXhpbiBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJG1pbiwgJG1heCkge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gdGhpcyBpcyBhIGNvcHkgb2YgcmVzcG9uZC10by4gd2UgZG9uJ3Qgd2FudCB0byBwcmVzZXJ2ZSB0aGF0IG1ldGhvZCBzaW5jZSB0aGUgYnJlYWtwb2ludHMgbWF5IGRpdmVyZ2UgZnJvbSB0aGUgb2xkIFVJLlxuQG1peGluIGlzLXNjcmVlbi1zaXplKCRtZWRpYTogYWxsLCAkb3JpZW50YXRpb246IG5vbmUpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuXG5AbWl4aW4gcGFnZS1wYWRkaW5nIHtcbiAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xufVxuXG4vLyBGb250IE1peGluc1xuJGZvbnQtbWNraW5zZXktc2FuczogXCJNY0tpbnNleSBTYW5zXCI7XG4kZm9udC10aGVpbmhhcmR0OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiRmb250LWJvd2VyOiBcIkJvd2VyXCI7XG5cbkBtaXhpbiBib3dlci1ib2xkIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtYm93ZXI7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIG1ja2luc2V5LXNhbnMge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBkaXNwbGF5LTEge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDRyZW07IC8vIDY0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTg3OyAvLyA3NnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0yIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0zIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTQge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzcmVtOyAvLyA0OHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTY2OyAvLyA1NnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDY0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTUge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuODMzOyAvLyAzNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42NDI7IC8vIDQwcHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTcge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDQ4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjc1cmVtOyAvLyA0NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNTJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICBsaW5lLWhlaWdodDogMS4xMTE7IC8vIDQ0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA0OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0zIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjIyOyAvLyA0NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy00IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy01IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyODhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy02IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTU1OyAvLyAyOHB4XG4gICAgfVxufVxuXG5AbWl4aW4gYm9keS1kZWZhdWx0IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI2cHhcbiAgICB9XG59XG5cbi8vLyBEb2VzbnQgZXhpc3QgaW4gTURTLlxuQG1peGluIGJvZHktdGlueSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07IC8vIDEycHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyMHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZm9ybS1sYWJlbCB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LWZhbWlseTogJGZvbnQtdGhlaW5oYXJkdDtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgY29sb3I6ICRwbGFjZWhvbGRlci1jb2xvcjtcbiAgICBmb250LXdlaWdodDogMzAwO1xufVxuXG5AbWl4aW4gY2hpcC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIGNoZWNrYm94LWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgY29sb3I6IGJsYWNrO1xufVxuXG4vLyBib3JkZXJzXG5cbkBtaXhpbiBtY2stY2hlY2tib3gtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAycHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLXRoaW4tYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlci1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJvcmRlci1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50LWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXItbGlnaHQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5cbi8vIGZ1bmN0aW9uc1xuXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbkBtaXhpbiBtYXgtbGluZXMoJGNvdW50KSB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAtd2Via2l0LWxpbmUtY2xhbXA6ICRjb3VudDtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuXG4vLyBpbWFnZXNcbkBtaXhpbiBtY2staWNvbigkd2lkdGgsICRhc3NldCwgJGhlaWdodDogJHdpZHRoLCAgJGFzc2V0UGF0aDogXCJsaWJzL3VpL3NyYy9saWIvaWNvbnNcIiwpIHtcbiAgICB3aWR0aDogJHdpZHRoO1xuICAgIGhlaWdodDogJGhlaWdodDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIjeyRhc3NldFBhdGh9LyN7JGFzc2V0fVwiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG59XG5cblxuQG1peGluIG1jay1zbWFsbC1pY29uKCRtb2JpbGUtYXNzZXQsICRkZXNrdG9wLWFzc2V0OiAkbW9iaWxlLWFzc2V0KSB7XG4gICAgQGluY2x1ZGUgbWNrLWljb24oMTZweCwgJGFzc2V0OiAkbW9iaWxlLWFzc2V0KTtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oMjRweCwgJGFzc2V0OiAkZGVza3RvcC1hc3NldCk7XG4gICAgfVxufVxuXG4vLyBza2VsZXRvblxuQG1peGluIHNrZWxldG9uLWJnIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItaW1hZ2Utc2l6ZSB7XG4gICAgd2lkdGg6IDgxcHg7XG4gICAgaGVpZ2h0OiA4MnB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMjE5cHg7XG4gICAgICAgIGhlaWdodDogMTE5cHg7XG4gICAgfVxufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItc3RhdHVzLXNpemUge1xuICAgIHdpZHRoOiAxMTdweDtcbiAgICBoZWlnaHQ6IDc4cHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAxMTdweDtcbiAgICAgICAgaGVpZ2h0OiA3OHB4O1xuICAgIH1cbn1cbiIsIkBpbXBvcnQgJ3ZhcmlhYmxlcyc7XG5AaW1wb3J0ICdtaXhpbnMnO1xuQGltcG9ydCBcImxpYnMvdWkvc3JjL2xpYi9taXhpbnNcIjtcblxuOmhvc3Qge1xuICAgIGhlaWdodDogMTAwJTtcbn1cblxuLm9yZGVyLWxpc3Qge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB3aWR0aDogNzY4cHg7XG4gICAgbWFyZ2luOiBhdXRvO1xuICAgIG1heC13aWR0aDogMTAwdnc7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgICBAaW5jbHVkZSBib3gtc2hhZG93O1xufVxuXG4uYm9keSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGZsZXg6IDE7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWluLWhlaWdodDogNTAlO1xuICAgIG92ZXJmbG93OiBhdXRvO1xuICAgIG1hcmdpbi1ib3R0b206IDIxMHB4O1xuXG4gICAgYnV0dG9uIHtcbiAgICAgICAgd2lkdGg6IDhlbTtcbiAgICB9XG59XG5cbi5saXN0IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICA+ICoge1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoIzAwMCwgLjA1KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmZvb3RlciB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2NjYztcbiAgICBoZWlnaHQ6IDEwMHB4O1xuICAgIGJ1dHRvbiB7XG4gICAgICAgIG1pbi13aWR0aDogOGVtO1xuICAgICAgICBtYXJnaW46LjVlbTtcbiAgICB9XG59XG5cblxuXG4uaW5mby1ibG9jayB7XG4gICAgYnV0dG9uIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMWVtO1xuICAgIH1cbn1cbiJdfQ== */"] + styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n[_nghost-%COMP%] {\n height: 100%;\n}\n[_nghost-%COMP%] .bottom-panel-btn[_ngcontent-%COMP%] {\n width: 100%;\n min-height: 80px;\n background-color: white;\n border: 1px solid #E6E6E6;\n z-index: 1002;\n}\n.order-list[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n flex-direction: column;\n height: 100%;\n width: 768px;\n margin: auto;\n max-width: 100vw;\n background-color: #fff;\n box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12);\n}\n.body[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n flex-direction: column;\n flex: 1;\n width: 100%;\n min-height: 50%;\n overflow: auto;\n overflow-y: auto !important;\n}\n.body[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n width: 8em;\n}\n.list[_ngcontent-%COMP%] {\n width: 100%;\n}\n.list[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] {\n border: 1px solid #ccc;\n}\n.list[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n.footer[_ngcontent-%COMP%] {\n width: 100vw;\n background-color: white;\n text-align: center;\n border-top: 1px solid #ccc;\n height: 100px;\n}\n.footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n min-width: 8em;\n margin: 0.5em;\n}\n.info-block[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin-top: 1em;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvdmFycy5zY3NzIiwiYXBwcy9zdGFmZi9zcmMvYXBwL2Jvb2tpbmcvY2F0ZXJpbmcvb3JkZXItbGlzdC9vcmRlci1saXN0LmNvbXBvbmVudC5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy91aS9zcmMvbGliL21peGlucy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvYXBwcy9zdGFmZi9zcmMvYXBwL2Jvb2tpbmcvY2F0ZXJpbmcvb3JkZXItbGlzdC9vcmRlci1saXN0LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzswQkFBQTtBQVFBOzswQkFBQTtBQWtDQTs7Y0FBQTtBQWdCQTs7c0JBQUE7QUExREE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQzVDQTs7c0JBQUE7QUM2QkE7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDa0NsQjtBRDhEQTs7c0JBQUE7QUVrT0E7OztFQUFBO0FDaFVBO0VBQ0ksWUFBQTtBRjBDSjtBRXhDSTtFQUNJLFdBQUE7RUFDQSxnQkFBQTtFQUNBLHVCQUFBO0VBQ0EseUJBQUE7RUFDQSxhQUFBO0FGMENSO0FFdENBO0VBQ0ksYUFBQTtFQUNBLG1CQUFBO0VBQ0Esc0JBQUE7RUFDQSxZQUFBO0VBQ0EsWUFBQTtFQUNBLFlBQUE7RUFDQSxnQkFBQTtFQUNBLHNCQUFBO0VKZkEsaUhBQUE7QUV5REo7QUV0Q0E7RUFDSSxrQkFBQTtFQUNBLGFBQUE7RUFDQSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0EsT0FBQTtFQUNBLFdBQUE7RUFDQSxlQUFBO0VBQ0EsY0FBQTtFQUVBLDJCQUFBO0FGd0NKO0FFckNJO0VBQ0ksVUFBQTtBRnVDUjtBRW5DQTtFQUNJLFdBQUE7QUZzQ0o7QUVyQ0k7RUFDSSxzQkFBQTtBRnVDUjtBRXRDUTtFQUNJLHFDQUFBO0FGd0NaO0FFbkNBO0VBQ0ksWUFBQTtFQUNBLHVCQUFBO0VBQ0Esa0JBQUE7RUFDQSwwQkFBQTtFQUNBLGFBQUE7QUZzQ0o7QUVyQ0k7RUFDSSxjQUFBO0VBQ0EsYUFBQTtBRnVDUjtBRWhDSTtFQUNJLGVBQUE7QUZtQ1IiLCJmaWxlIjoiYXBwcy9zdGFmZi9zcmMvYXBwL2Jvb2tpbmcvY2F0ZXJpbmcvb3JkZXItbGlzdC9vcmRlci1saXN0LmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kY29sb3ItYnJhbmQtZWxlY3RyaWMtYmx1ZTogIzIyNTFmZjtcbiRjb2xvci1icmFuZC1kZWVwLWJsdWU6ICMwNTFjMmM7XG4kY29sb3ItYnJhbmQtY3lhbjogIzAwYTlmNDtcblxuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRmb250LWRhcms6ICMwMDA7XG4kZm9udC1saWdodDogI2ZmZjtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG4kZ3JlZW4xOiAjMjE5NjUzO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvbG9yLXByaW1hcnk6ICMxOTM3ZWE7XG4kY29sb3ItcHJpbWFyeS1saWdodDogbGlnaHRlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuJGNvbG9yLXByaW1hcnktZGFyazogZGFya2VuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG5cbiRjb2xvci1zZWNvbmRhcnk6ICM0Mjg1RjQ7XG4kY29sb3Itc2Vjb25kYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcbiRjb2xvci1zZWNvbmRhcnktZGFyazogZGFya2VuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcblxuJGJhY2tncm91bmQ6ICNmMGYwZjA7XG4kZm9vdGVyLWJhY2s6ICMyNjMyMzg7XG4kaGVhZGVyLWJhY2s6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzA1MUMyQywgIzA1MUMyQyA0MCUsICMwQjI0NTMgNjAlLCAjMUY0MEU2IDEwMCUpO1xuXG4kY29sb3ItdGVybmFyeTogIzA1MWMyYztcblxuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG5cbiRmb250LXN0YWNrOiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcblxuJGhlYWRpbmctZm9udDogXCJMYXJpc2hNY0tpbnNleVwiLCAnR2VvcmdpYScsIHNlcmlmO1xuJGZvbnQ6ICRmb250LXN0YWNrO1xuXG4kZm9udC1mYW1pbHktcHJpbWFyeTogXCJNY0tpbnNleSBTYW5zXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQ2FsaWJyaSwgQ29yYmVsLCBIZWx2ZXRpY2EsIFJvYm90bywgRHJvaWQsIHNhbnMtc2VyaWY7XG4kZm9udC1mYW1pbHktc2Vjb25kYXJ5OiBcIkJvd2VyXCIsIEdlb3JnaWEsIFwiVGltZXMgTmV3IFJvbWFuXCIgc2VyaWY7XG5cbiRiYXNlLXNpemU6IDE2cHg7XG4kdGFibGV0LXNpemU6IDE2cHg7XG4kbW9iaWxlLXNpemU6IDE2cHg7XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kYnJlYWstbW9iaWxlOiA0NTBweDtcbiRicmVhay10YWJsZXQ6IDgwMHB4O1xuJGJyZWFrLWxhcHRvcDogMTAyNHB4O1xuXG4kYnJlYWstbGFuZHNjYXBlLW1vYmlsZTogODAwcHg7XG4kYnJlYWstbGFuZHNjYXBlLXRhYmxldDogMTA0OHB4O1xuJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3A6IDEyODBweDtcbiIsIkBpbXBvcnQgJy4vdmFyaWFibGVzJztcblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5AbWl4aW4gYm94LXNoYWRvdygkY29sb3I6ICMwMDAsICRkZXB0aDogMSkge1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCAxcHggKiAoJGRlcHRoIC0gMSkgcmdiYSgjMDAwLCAuMiksXG4gICAgICAgICAgICAgICAgMCAxcHggMXB4IDAgcmdiYSgjMDAwLCAuMTQpLFxuICAgICAgICAgICAgICAgIDAgMnB4IDFweCAtMXB4IHJnYmEoIzAwMCwgLjEyKTtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbkBtaXhpbiByZXNwb25kLXRvKCRtZWRpYSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSAgQGVsc2UgaWYgJG1lZGlhID09IGxhdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfUBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCIkcHJpbWFyeTogIzFGNDBFNjtcbiRmb3JtLWxhYmVsOiAjMDUxQzJDO1xuJHNlY29uZGFyeS1sYWJlbDogIzc2NzY3NjtcbiRib3JkZXI6ICNCM0IzQjM7XG4kYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDogI0QwRDBEMDtcbiRjaGlwLWNvbG9yOiAjMzMzMzMzO1xuJHBsYWNlaG9sZGVyLWNvbG9yOiAjN0Y3RjdGO1xuJGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4kcGFnZS1iYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuJHNlbGVjdGVkLW9wdGlvbjogI0U2RTZFNjtcbiRjb2xvci1icmFuZC15ZWxsb3c6ICNmZmQwNDg7XG4kbGlnaHQteWVsbG93OiAjZmZmM2NlO1xuJGNvYWNobWFyay10ZXh0OiAjNmY0ZDAwO1xuJGVycm9yLWNvbG9yOiAjRTEyRTQwO1xuJG5vLWZpbHRlcnMtY29sb3I6ICNCQ0JDQkM7XG4kcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I6ICNGNEY0RjQ7XG4kcHJpbWFyeS1oaWdobGlnaHQ6ICMyMjUxRkY7XG4kc2Nyb2xsYmFyLWNvbG9yOiAjNzU3NTc1O1xuXG4kYXZhaWxhYmxlLWNvbG9yOiAjNUQ5RDUyO1xuJGF2YWlsYWJsZS1ieS1yZXF1ZXN0LWNvbG9yOiAjRjVCNTNGO1xuJGluLXVzZS1jb2xvcjogI0Q0NDgzRTtcbiRub3QtYm9va2FibGUtY29sb3I6ICNDQ0NDQ0M7XG5cbiRtb2RhbC1ib2R5LWhlYWRpbmc6ICM0RDRENEQ7XG4kYWxlcnQtb3ZlcmxheS1iZzogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2FjaG1hcmstYmc6ICNFQkVCRjY7XG4kY29hY2htYXJrLWRhcmstdGV4dDogIzFCMUIxOTtcbiRlcnJvci10ZXh0OiAjZmZmO1xuXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuXG4vLyA0cHhcbiRzcGFjaW5nLXNtYWxsZXN0OiAwLjI1cmVtO1xuXG4vLyA4cHhcbiRzcGFjaW5nLXh4c21hbGw6IDAuNXJlbTtcblxuLy8gMTJweFxuJHNwYWNpbmcteHNtYWxsOiAwLjc1cmVtO1xuXG4vLyAxNnB4XG4kc3BhY2luZy1zbWFsbDogMXJlbTtcblxuLy8gMjBweFxuJHNwYWNpbmctc21hbGwtbWVkaXVtOiAxLjI1cmVtO1xuXG4vLyAyNHB4XG4kc3BhY2luZy1tZWRpdW06IDEuNXJlbTtcblxuLy8gMjhweFxuJHNwYWNpbmctbWVkaXVtLWxhcmdlOiAxLjc1cmVtO1xuXG4vLyAzMnB4XG4kc3BhY2luZy1sYXJnZTogMnJlbTtcblxuLy8gNDhweFxuJHNwYWNpbmcteGxhcmdlOiAzcmVtO1xuXG4vLyA2NHB4XG4kc3BhY2luZy14eGxhcmdlOiA0cmVtO1xuXG4vLyA5NnB4XG4kc3BhY2luZy1sYXJnZXN0OiA2cmVtO1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGRldmljZS1tb2JpbGUtc2l6ZTogNDUwcHg7XG4kZGV2aWNlLXRhYmxldC1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFwdG9wLXNpemU6IDEwMjRweDtcblxuJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemU6IDgwMHB4O1xuJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemU6IDEwNDhweDtcbiRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplOiAxMjgwcHg7XG5cblxuOmV4cG9ydCB7XG4gICAgcHJpbWFyeTogJHByaW1hcnk7XG4gICAgc2Vjb25kYXJ5TGFiZWw6ICRzZWNvbmRhcnktbGFiZWw7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4kaWNvbi1zbWFsbDogMTZweDtcbiRpY29uLW1lZGl1bTogMjRweDtcbiRpY29uLWxhcmdlOiAzMnB4O1xuJGljb24teGxhcmdlOiA0OHB4O1xuIiwiLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbjpob3N0IHtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuOmhvc3QgLmJvdHRvbS1wYW5lbC1idG4ge1xuICB3aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogODBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gIHotaW5kZXg6IDEwMDI7XG59XG5cbi5vcmRlci1saXN0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogNzY4cHg7XG4gIG1hcmdpbjogYXV0bztcbiAgbWF4LXdpZHRoOiAxMDB2dztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm94LXNoYWRvdzogMCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDAgMXB4IDFweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4xMik7XG59XG5cbi5ib2R5IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmbGV4OiAxO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogNTAlO1xuICBvdmVyZmxvdzogYXV0bztcbiAgb3ZlcmZsb3cteTogYXV0byAhaW1wb3J0YW50O1xufVxuLmJvZHkgYnV0dG9uIHtcbiAgd2lkdGg6IDhlbTtcbn1cblxuLmxpc3Qge1xuICB3aWR0aDogMTAwJTtcbn1cbi5saXN0ID4gKiB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG59XG4ubGlzdCA+ICo6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xufVxuXG4uZm9vdGVyIHtcbiAgd2lkdGg6IDEwMHZ3O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2NjYztcbiAgaGVpZ2h0OiAxMDBweDtcbn1cbi5mb290ZXIgYnV0dG9uIHtcbiAgbWluLXdpZHRoOiA4ZW07XG4gIG1hcmdpbjogMC41ZW07XG59XG5cbi5pbmZvLWJsb2NrIGJ1dHRvbiB7XG4gIG1hcmdpbi10b3A6IDFlbTtcbn0iLCJAaW1wb3J0IFwidmFyc1wiO1xuXG5AbWl4aW4gcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkc2l6ZSwgJHF1YWxpZmllcikge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQGlmICgkcXVhbGlmaWVyID09IG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2UgaWYgKCRxdWFsaWZpZXIgPT0gbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1heC13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuQG1peGluIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkbWluLCAkbWF4KSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyB0aGlzIGlzIGEgY29weSBvZiByZXNwb25kLXRvLiB3ZSBkb24ndCB3YW50IHRvIHByZXNlcnZlIHRoYXQgbWV0aG9kIHNpbmNlIHRoZSBicmVha3BvaW50cyBtYXkgZGl2ZXJnZSBmcm9tIHRoZSBvbGQgVUkuXG5AbWl4aW4gaXMtc2NyZWVuLXNpemUoJG1lZGlhOiBhbGwsICRvcmllbnRhdGlvbjogbm9uZSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5cbkBtaXhpbiBwYWdlLXBhZGRpbmcge1xuICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctc21hbGw7XG4gICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctc21hbGw7XG59XG5cbi8vIEZvbnQgTWl4aW5zXG4kZm9udC1tY2tpbnNleS1zYW5zOiBcIk1jS2luc2V5IFNhbnNcIjtcbiRmb250LXRoZWluaGFyZHQ6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuJGZvbnQtYm93ZXI6IFwiQm93ZXJcIjtcblxuQG1peGluIGJvd2VyLWJvbGQge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1ib3dlcjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gbWNraW5zZXktc2FucyB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIGRpc3BsYXktMSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNHJlbTsgLy8gNjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODc7IC8vIDc2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTIge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTMge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2MHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNCB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDNyZW07IC8vIDQ4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNjY7IC8vIDU2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjRweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMwcHhcbiAgICBsaW5lLWhlaWdodDogMS44MzM7IC8vIDM0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY0MjsgLy8gNDBweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0xIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNDhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNzVyZW07IC8vIDQ0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA1MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0yIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjExMTsgLy8gNDRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDQ4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTMge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMjI7IC8vIDQ0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTUge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTYge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTU7IC8vIDI4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBib2R5LWRlZmF1bHQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjZweFxuICAgIH1cbn1cblxuLy8vIERvZXNudCBleGlzdCBpbiBNRFMuXG5AbWl4aW4gYm9keS10aW55IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTsgLy8gMTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDIwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBmb3JtLWxhYmVsIHtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC10aGVpbmhhcmR0O1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBjb2xvcjogJHBsYWNlaG9sZGVyLWNvbG9yO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG59XG5cbkBtaXhpbiBjaGlwLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gY2hlY2tib3gtbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICBjb2xvcjogYmxhY2s7XG59XG5cbi8vIGJvcmRlcnNcblxuQG1peGluIG1jay1jaGVja2JveC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stdGhpbi1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYm9yZGVyLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQtbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlci1saWdodDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cblxuLy8gZnVuY3Rpb25zXG5cbi8qKlxuICogTWFrZXMgdGV4dCBoYXZlIG1heGltdW0gbGluZXMgd2l0aCBlbGxpcHNpcy4gV29ya3Mgb24gbW9zdCBtb2Rlcm4gYnJvd3NlcnMgZXhjZXB0XG4gKiBvZiBGaXJlZm94Li5cbiAqL1xuQG1peGluIG1heC1saW5lcygkY291bnQpIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIC13ZWJraXQtbGluZS1jbGFtcDogJGNvdW50O1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG59XG5cbi8vIGltYWdlc1xuQG1peGluIG1jay1pY29uKCR3aWR0aCwgJGFzc2V0LCAkaGVpZ2h0OiAkd2lkdGgsICAkYXNzZXRQYXRoOiBcImxpYnMvdWkvc3JjL2xpYi9pY29uc1wiLCkge1xuICAgIHdpZHRoOiAkd2lkdGg7XG4gICAgaGVpZ2h0OiAkaGVpZ2h0O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiN7JGFzc2V0UGF0aH0vI3skYXNzZXR9XCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbn1cblxuXG5AbWl4aW4gbWNrLXNtYWxsLWljb24oJG1vYmlsZS1hc3NldCwgJGRlc2t0b3AtYXNzZXQ6ICRtb2JpbGUtYXNzZXQpIHtcbiAgICBAaW5jbHVkZSBtY2staWNvbigxNnB4LCAkYXNzZXQ6ICRtb2JpbGUtYXNzZXQpO1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBAaW5jbHVkZSBtY2staWNvbigyNHB4LCAkYXNzZXQ6ICRkZXNrdG9wLWFzc2V0KTtcbiAgICB9XG59XG5cbi8vIHNrZWxldG9uXG5AbWl4aW4gc2tlbGV0b24tYmcge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1pbWFnZS1zaXplIHtcbiAgICB3aWR0aDogODFweDtcbiAgICBoZWlnaHQ6IDgycHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAyMTlweDtcbiAgICAgICAgaGVpZ2h0OiAxMTlweDtcbiAgICB9XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1zdGF0dXMtc2l6ZSB7XG4gICAgd2lkdGg6IDExN3B4O1xuICAgIGhlaWdodDogNzhweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDExN3B4O1xuICAgICAgICBoZWlnaHQ6IDc4cHg7XG4gICAgfVxufVxuIiwiQGltcG9ydCAndmFyaWFibGVzJztcbkBpbXBvcnQgJ21peGlucyc7XG5AaW1wb3J0IFwibGlicy91aS9zcmMvbGliL21peGluc1wiO1xuXG46aG9zdCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuXG4gICAgLmJvdHRvbS1wYW5lbC1idG4geyBcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDgwcHg7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICAgICAgICB6LWluZGV4OiAxMDAyO1xuICAgICAgICB9XG59XG5cbi5vcmRlci1saXN0IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgd2lkdGg6IDc2OHB4O1xuICAgIG1hcmdpbjogYXV0bztcbiAgICBtYXgtd2lkdGg6IDEwMHZ3O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgQGluY2x1ZGUgYm94LXNoYWRvdztcbn1cblxuLmJvZHkge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBmbGV4OiAxO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1pbi1oZWlnaHQ6IDUwJTtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgICAvLyBtYXJnaW4tYm90dG9tOiAyMTBweDtcbiAgICBvdmVyZmxvdy15OiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgLy8gbWF4LWhlaWdodDogNDd2aCAhaW1wb3J0YW50O1xuXG4gICAgYnV0dG9uIHtcbiAgICAgICAgd2lkdGg6IDhlbTtcbiAgICB9XG59XG5cbi5saXN0IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICA+ICoge1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoIzAwMCwgLjA1KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmZvb3RlciB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2NjYztcbiAgICBoZWlnaHQ6IDEwMHB4O1xuICAgIGJ1dHRvbiB7XG4gICAgICAgIG1pbi13aWR0aDogOGVtO1xuICAgICAgICBtYXJnaW46LjVlbTtcbiAgICB9XG59XG5cblxuXG4uaW5mby1ibG9jayB7XG4gICAgYnV0dG9uIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMWVtO1xuICAgIH1cbn1cbiJdfQ== */"] }); /*@__PURE__*/ @@ -60291,6 +61284,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }], order: [{ type: core_1.Output + }], + placeIntoModal: [{ + type: core_1.Input }] }); })(); @@ -64142,7 +65138,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _r10 = i0.ɵɵreference(27); var ctx_r2 = i0.ɵɵnextContext(); - i0.ɵɵclassProp("has-conflict", ctx_r2.addMarginOnConflict); + i0.ɵɵclassProp("has-conflict", ctx_r2.addMarginOnConflict)("margin-top", ctx_r2.expanded && !ctx_r2.placeIntoModal); i0.ɵɵadvance(6); i0.ɵɵtextInterpolate(ctx_r2.space.local_name); i0.ɵɵadvance(2); @@ -64234,6 +65230,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons _this264.handleExpand = new core_1.EventEmitter(); _this264.updateCalendarWeekView = new core_1.EventEmitter(); _this264.warnIfItHasConflict = new core_1.EventEmitter(); + /** + * placeIntoModal: Input decorator indecate as a flag to adapt component design into a dialog modal + * (by hiding header and adjusting height so that fit into a modal) + */ + + _this264.placeIntoModal = false; _this264.breakpoint = 768; _this264.mobile = false; _this264.showDatePicker = false; @@ -65157,7 +66159,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons expanded: "expanded", level: "level", mode: "mode", - space: "space" + space: "space", + placeIntoModal: "placeIntoModal" }, outputs: { confirmChanges: "confirmChanges", @@ -65167,8 +66170,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 7, - vars: 6, - consts: [[1, "room-availability", "mck-row"], [1, "header"], [3, "mode", "backModal", "noSurvey", "closeCallback", 4, "ngIf"], [1, "room-availability", "scroll-container"], [3, "np", "viewDate", "events", "refresh", "dayStartHour", "dayEndHour", "eventTimesChanged", 4, "ngIf"], ["class", "mck-center", 3, "has-conflict", 4, "ngIf"], ["class", "footer mck-column mck-center", 4, "ngIf"], [3, "mode", "backModal", "noSurvey", "closeCallback"], [3, "viewDate", "events", "refresh", "dayStartHour", "dayEndHour", "eventTimesChanged"], [1, "mck-center"], [1, "mck-column"], [1, "intro"], [1, "cal-controls"], [1, "dir"], ["type", "image", "src", "assets/icon/chevron-left.svg", 3, "click"], [3, "click"], ["type", "image", "src", "assets/icon/chevron-right.svg", 3, "click"], [1, "date"], [1, "time-inputs-calendar", 3, "formControl", "icon_only", "fromDateTz", "timezone", "initialDateSelectionTz", "onSelect"], ["name", "overflow", "labelPosition", "after", "title", "Show weekends on the calendar", 1, "weekends", "mck-toggle", 3, "checked", "change"], ["id", "calendarScrollContainer", 1, "mck-scroll"], ["precision", "minutes", "snapDraggedEvents", "false", 3, "viewDate", "events", "refresh", "daysInWeek", "eventSnapSize", "headerTemplate", "eventTemplate", "eventTimesChanged", "hourSegmentClicked"], ["headerTemplate", ""], ["eventTemplate", ""], [1, "cal-day-headers"], ["class", "cal-header", "mwlDroppable", "", "dragOverClass", "cal-drag-over", 3, "cal-past", "cal-event-date", "cal-future", "cal-weekend", "show-weekend", "ngClass", "mwlClick", "drop", 4, "ngFor", "ngForOf", "ngForTrackBy"], ["mwlDroppable", "", "dragOverClass", "cal-drag-over", 1, "cal-header", 3, "ngClass", "mwlClick", "drop"], ["tabindex", "0", "role", "application", 1, "cal-event", 3, "ngStyle", "mwlCalendarTooltip", "tooltipPlacement", "tooltipEvent", "tooltipTemplate", "tooltipAppendToBody", "tooltipDelay", "mwlClick", "mwlKeydownEnter"], [1, "bumper"], [1, "berry", "top"], [1, "berry", "bot"], [3, "event", "customTemplate"], [3, "event", "customTemplate", "view"], [1, "footer", "mck-column", "mck-center"], ["mat-button", "", "color", "secondary", 1, "mck-secondary-button", 3, "click"], ["mat-button", "", "color", "primary", 1, "mck-primary-button", 3, "disabled", "click"]], + vars: 10, + consts: [[1, "room-availability", "mck-row"], [1, "header"], [3, "mode", "backModal", "noSurvey", "closeCallback", 4, "ngIf"], [1, "room-availability", "scroll-container"], [3, "np", "viewDate", "events", "refresh", "dayStartHour", "dayEndHour", "eventTimesChanged", 4, "ngIf"], ["class", "mck-center", 3, "has-conflict", "margin-top", 4, "ngIf"], ["class", "footer mck-column mck-center", 4, "ngIf"], [3, "mode", "backModal", "noSurvey", "closeCallback"], [3, "viewDate", "events", "refresh", "dayStartHour", "dayEndHour", "eventTimesChanged"], [1, "mck-center"], [1, "mck-column"], [1, "intro"], [1, "cal-controls"], [1, "dir"], ["type", "image", "src", "assets/icon/chevron-left.svg", 3, "click"], [3, "click"], ["type", "image", "src", "assets/icon/chevron-right.svg", 3, "click"], [1, "date"], [1, "time-inputs-calendar", 3, "formControl", "icon_only", "fromDateTz", "timezone", "initialDateSelectionTz", "onSelect"], ["name", "overflow", "labelPosition", "after", "title", "Show weekends on the calendar", 1, "weekends", "mck-toggle", 3, "checked", "change"], ["id", "calendarScrollContainer", 1, "mck-scroll"], ["precision", "minutes", "snapDraggedEvents", "false", 3, "viewDate", "events", "refresh", "daysInWeek", "eventSnapSize", "headerTemplate", "eventTemplate", "eventTimesChanged", "hourSegmentClicked"], ["headerTemplate", ""], ["eventTemplate", ""], [1, "cal-day-headers"], ["class", "cal-header", "mwlDroppable", "", "dragOverClass", "cal-drag-over", 3, "cal-past", "cal-event-date", "cal-future", "cal-weekend", "show-weekend", "ngClass", "mwlClick", "drop", 4, "ngFor", "ngForOf", "ngForTrackBy"], ["mwlDroppable", "", "dragOverClass", "cal-drag-over", 1, "cal-header", 3, "ngClass", "mwlClick", "drop"], ["tabindex", "0", "role", "application", 1, "cal-event", 3, "ngStyle", "mwlCalendarTooltip", "tooltipPlacement", "tooltipEvent", "tooltipTemplate", "tooltipAppendToBody", "tooltipDelay", "mwlClick", "mwlKeydownEnter"], [1, "bumper"], [1, "berry", "top"], [1, "berry", "bot"], [3, "event", "customTemplate"], [3, "event", "customTemplate", "view"], [1, "footer", "mck-column", "mck-center"], ["mat-button", "", "color", "secondary", 1, "mck-secondary-button", 3, "click"], ["mat-button", "", "color", "primary", 1, "mck-primary-button", 3, "disabled", "click"]], template: function RoomAvailabilityPreviewComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 0); @@ -65177,17 +66180,18 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons i0.ɵɵelementEnd(); i0.ɵɵelementStart(3, "div", 3); i0.ɵɵtemplate(4, RoomAvailabilityPreviewComponent_mwl_calendar_day_view_4_Template, 1, 7, "mwl-calendar-day-view", 4); - i0.ɵɵtemplate(5, RoomAvailabilityPreviewComponent_div_5_Template, 28, 26, "div", 5); + i0.ɵɵtemplate(5, RoomAvailabilityPreviewComponent_div_5_Template, 28, 28, "div", 5); i0.ɵɵtemplate(6, RoomAvailabilityPreviewComponent_div_6_Template, 6, 2, "div", 6); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { + i0.ɵɵclassProp("fit-in-modal", ctx.expanded && ctx.placeIntoModal); i0.ɵɵadvance(2); - i0.ɵɵproperty("ngIf", ctx.expanded); + i0.ɵɵproperty("ngIf", ctx.expanded && !ctx.placeIntoModal); i0.ɵɵadvance(1); - i0.ɵɵclassProp("expanded", ctx.expanded); + i0.ɵɵclassProp("expanded", ctx.expanded)("fixed", ctx.expanded && !ctx.placeIntoModal); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", !ctx.expanded); i0.ɵɵadvance(1); @@ -65198,7 +66202,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, directives: [i2.NgIf, i3.TopbarHeaderComponent, i4.CalendarDayViewComponent, i5.DateTzDatePickerComponent, i6.NgControlStatus, i6.FormControlDirective, i7.MatSlideToggle, i4.CalendarWeekViewComponent, i2.NgForOf, i8.ɵa, i2.NgClass, i4.ɵl, i2.NgStyle, i4.ɵe, i4.ɵm, i4.ɵb, i4.ɵc, i9.MatButton], pipes: [i4.ɵi, i4.ɵj, i4.ɵk], - styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n #calendarScrollContainer[_ngcontent-%COMP%] {\n padding-bottom: 130px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n #calendarScrollContainer[_ngcontent-%COMP%] {\n padding-bottom: 130px;\n }\n}\n.mck-alert[_ngcontent-%COMP%] {\n height: 100vh;\n}\n.room-availability[_ngcontent-%COMP%] {\n height: 368px;\n width: 100%;\n overflow: hidden;\n border: 1px solid #A19F9F;\n border-width: thin;\n z-index: 2;\n}\n.room-availability[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n z-index: 10;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n display: block;\n padding: 0;\n}\n.room-availability.expanded[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n height: 100%;\n z-index: 4;\n background-color: #f8f9fa;\n}\n.room-availability[_ngcontent-%COMP%] .mck-center[_ngcontent-%COMP%] {\n margin-top: 120px;\n}\n.room-availability[_ngcontent-%COMP%] .mck-center.has-conflict[_ngcontent-%COMP%] {\n margin-top: 145px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .room-availability[_ngcontent-%COMP%] .mck-center[_ngcontent-%COMP%] {\n margin-top: 80px;\n }\n .room-availability[_ngcontent-%COMP%] .mck-center.has-conflict[_ngcontent-%COMP%] {\n margin-top: 145px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .room-availability[_ngcontent-%COMP%] .mck-center[_ngcontent-%COMP%] {\n margin-top: 80px;\n }\n .room-availability[_ngcontent-%COMP%] .mck-center.has-conflict[_ngcontent-%COMP%] {\n margin-top: 145px;\n }\n}\n.room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] {\n margin: 0 auto 20px;\n}\n.room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n margin: 0 auto;\n width: 100%;\n max-width: 1024px;\n padding: 0;\n}\n.room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] > h1[_ngcontent-%COMP%] {\n font-size: 28px;\n font-weight: 400;\n margin: 0 0 10px 0;\n}\n.room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] > p[_ngcontent-%COMP%] {\n font-size: 18px;\n line-height: 22px;\n margin: 2px 0;\n}\n.room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] .intro[_ngcontent-%COMP%] {\n padding: 0 20px;\n padding-bottom: 20px;\n background-color: #f8f9fa;\n position: relative;\n top: 1px;\n z-index: 200;\n}\n.room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] .intro[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 801px) and (max-width: 1024px) {\n .room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] .intro[_ngcontent-%COMP%] {\n padding: 0 0 20px 0;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1049px) and (max-width: 1280px) {\n .room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] .intro[_ngcontent-%COMP%] {\n padding: 0 0 20px 0;\n }\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] {\n margin-top: 20px;\n position: relative;\n top: 1px;\n z-index: 200;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background: #f0f0f0;\n height: 66px;\n position: relative;\n padding: 0;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n position: absolute;\n top: 50%;\n transform: translate(-50%, -50%);\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div.date-picker[_ngcontent-%COMP%] {\n position: absolute;\n top: 70px;\n left: 33%;\n width: 340px;\n height: auto;\n background: #FFFFFF;\n box-shadow: 0px 16px 32px -1px rgba(5, 28, 44, 0.2), 0px 0px 1px rgba(5, 28, 44, 0.15);\n z-index: 10;\n padding: 20px;\n display: none;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div.date-picker[_ngcontent-%COMP%] {\n position: fixed;\n top: 5%;\n left: 5%;\n width: 90%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div.date-picker[_ngcontent-%COMP%] {\n position: fixed;\n top: 5%;\n left: 5%;\n width: 90%;\n }\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div.date-picker[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n border: 1px solid #D0D0D0;\n background-color: white;\n padding: 15px 35px;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div.date-picker.visible[_ngcontent-%COMP%] {\n display: block;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .dir[_ngcontent-%COMP%] {\n left: 90px;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .dir[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n vertical-align: middle;\n padding: 4px 3px;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .dir[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n background-color: white;\n border: 1px solid #B3B3B3;\n padding: 10px;\n cursor: pointer;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .date[_ngcontent-%COMP%] {\n left: 50%;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .date[_ngcontent-%COMP%] .time-inputs-calendar[_ngcontent-%COMP%] {\n position: absolute;\n right: -32px;\n top: -7px;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .date.right[_ngcontent-%COMP%] {\n top: 24px;\n right: 42px;\n left: auto;\n transform: none;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .date.right[_ngcontent-%COMP%] {\n right: 42px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .date.right[_ngcontent-%COMP%] {\n right: 42px;\n }\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .weekends[_ngcontent-%COMP%] {\n position: absolute;\n top: 20px;\n right: 20px;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .weekends.mobile[_ngcontent-%COMP%] {\n display: none;\n}\n.room-availability[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n overflow: hidden;\n overflow-y: scroll;\n height: calc(100vh - 385px);\n}\n.room-availability[_ngcontent-%COMP%] .mck-scroll.has-conflict[_ngcontent-%COMP%] {\n height: calc(100vh - 442px);\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .room-availability[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: calc(100vh - 370px);\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .room-availability[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: calc(100vh - 370px);\n }\n}\n.room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] {\n position: absolute;\n bottom: 0;\n left: 0;\n padding: 24px 16px;\n border: 1px solid #E6E6E6;\n height: 96px;\n width: 100%;\n background-color: white;\n margin: 0;\n z-index: 4;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] {\n height: auto;\n padding: 8px 10px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] {\n height: auto;\n padding: 8px 10px;\n }\n}\n.room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n max-width: 724px;\n}\n.room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex: 1;\n max-width: 337px;\n margin: 5px auto;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n max-width: none;\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n max-width: none;\n width: 100%;\n }\n}\n.room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n border: 1px solid #D0D0D0;\n margin-right: 10px;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWF2YWlsYWJpbGl0eS1wcmV2aWV3L3Jvb20tYXZhaWxhYmlsaXR5LXByZXZpZXcuY29tcG9uZW50LnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWF2YWlsYWJpbGl0eS1wcmV2aWV3L3Jvb20tYXZhaWxhYmlsaXR5LXByZXZpZXcuY29tcG9uZW50LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMkNBOztFQUFBO0FBcUNBOztzQkFBQTtBQWFBO0VBQ0ksZ0JBOUZNO0VBK0ZOLHVCQTdGYztBQ09sQjtBRHlGQTs7c0JBQUE7QUVrT0E7OztFQUFBO0FBM1RZO0VDUFo7SUFFUSxxQkFBQTtFRmlCTjtBQUNGO0FDYlk7RUNQWjtJQUVRLHFCQUFBO0VGc0JOO0FBQ0Y7QUVwQkE7RUFDSSxhQUFBO0FGdUJKO0FFckJBO0VBQ0ksYUFBQTtFQUNBLFdBQUE7RUFDQSxnQkFBQTtFQUNBLHlCQUFBO0VBQ0Esa0JBQUE7RUFDQSxVQUFBO0FGd0JKO0FFdkJJO0VBQ0ksV0FBQTtFQUNBLGtCQUFBO0VBQ0EsTUFBQTtFQUNBLE9BQUE7RUFDQSxXQUFBO0VBQ0EsY0FBQTtFQUNBLFVBQUE7QUZ5QlI7QUV2Qkk7RUFDSSxlQUFBO0VBQ0EsTUFBQTtFQUNBLE9BQUE7RUFDQSxZQUFBO0VBQ0EsVUFBQTtFQUNBLHlCQUFBO0FGeUJSO0FFdkJJO0VBQ0ksaUJBQUE7QUZ5QlI7QUV4QlE7RUFDSSxp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OUVRO0VBQ0kseUJBQUE7RUFDQSxrQkFBQTtBRmdGWiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWF2YWlsYWJpbGl0eS1wcmV2aWV3L3Jvb20tYXZhaWxhYmlsaXR5LXByZXZpZXcuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIkcHJpbWFyeTogIzFGNDBFNjtcbiRmb3JtLWxhYmVsOiAjMDUxQzJDO1xuJHNlY29uZGFyeS1sYWJlbDogIzc2NzY3NjtcbiRib3JkZXI6ICNCM0IzQjM7XG4kYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDogI0QwRDBEMDtcbiRjaGlwLWNvbG9yOiAjMzMzMzMzO1xuJHBsYWNlaG9sZGVyLWNvbG9yOiAjN0Y3RjdGO1xuJGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4kcGFnZS1iYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuJHNlbGVjdGVkLW9wdGlvbjogI0U2RTZFNjtcbiRjb2xvci1icmFuZC15ZWxsb3c6ICNmZmQwNDg7XG4kbGlnaHQteWVsbG93OiAjZmZmM2NlO1xuJGNvYWNobWFyay10ZXh0OiAjNmY0ZDAwO1xuJGVycm9yLWNvbG9yOiAjRTEyRTQwO1xuJG5vLWZpbHRlcnMtY29sb3I6ICNCQ0JDQkM7XG4kcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I6ICNGNEY0RjQ7XG4kcHJpbWFyeS1oaWdobGlnaHQ6ICMyMjUxRkY7XG4kc2Nyb2xsYmFyLWNvbG9yOiAjNzU3NTc1O1xuXG4kYXZhaWxhYmxlLWNvbG9yOiAjNUQ5RDUyO1xuJGF2YWlsYWJsZS1ieS1yZXF1ZXN0LWNvbG9yOiAjRjVCNTNGO1xuJGluLXVzZS1jb2xvcjogI0Q0NDgzRTtcbiRub3QtYm9va2FibGUtY29sb3I6ICNDQ0NDQ0M7XG5cbiRtb2RhbC1ib2R5LWhlYWRpbmc6ICM0RDRENEQ7XG4kYWxlcnQtb3ZlcmxheS1iZzogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2FjaG1hcmstYmc6ICNFQkVCRjY7XG4kY29hY2htYXJrLWRhcmstdGV4dDogIzFCMUIxOTtcbiRlcnJvci10ZXh0OiAjZmZmO1xuXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuXG4vLyA0cHhcbiRzcGFjaW5nLXNtYWxsZXN0OiAwLjI1cmVtO1xuXG4vLyA4cHhcbiRzcGFjaW5nLXh4c21hbGw6IDAuNXJlbTtcblxuLy8gMTJweFxuJHNwYWNpbmcteHNtYWxsOiAwLjc1cmVtO1xuXG4vLyAxNnB4XG4kc3BhY2luZy1zbWFsbDogMXJlbTtcblxuLy8gMjBweFxuJHNwYWNpbmctc21hbGwtbWVkaXVtOiAxLjI1cmVtO1xuXG4vLyAyNHB4XG4kc3BhY2luZy1tZWRpdW06IDEuNXJlbTtcblxuLy8gMjhweFxuJHNwYWNpbmctbWVkaXVtLWxhcmdlOiAxLjc1cmVtO1xuXG4vLyAzMnB4XG4kc3BhY2luZy1sYXJnZTogMnJlbTtcblxuLy8gNDhweFxuJHNwYWNpbmcteGxhcmdlOiAzcmVtO1xuXG4vLyA2NHB4XG4kc3BhY2luZy14eGxhcmdlOiA0cmVtO1xuXG4vLyA5NnB4XG4kc3BhY2luZy1sYXJnZXN0OiA2cmVtO1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGRldmljZS1tb2JpbGUtc2l6ZTogNDUwcHg7XG4kZGV2aWNlLXRhYmxldC1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFwdG9wLXNpemU6IDEwMjRweDtcblxuJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemU6IDgwMHB4O1xuJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemU6IDEwNDhweDtcbiRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplOiAxMjgwcHg7XG5cblxuOmV4cG9ydCB7XG4gICAgcHJpbWFyeTogJHByaW1hcnk7XG4gICAgc2Vjb25kYXJ5TGFiZWw6ICRzZWNvbmRhcnktbGFiZWw7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4kaWNvbi1zbWFsbDogMTZweDtcbiRpY29uLW1lZGl1bTogMjRweDtcbiRpY29uLWxhcmdlOiAzMnB4O1xuJGljb24teGxhcmdlOiA0OHB4O1xuIiwiLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAjY2FsZW5kYXJTY3JvbGxDb250YWluZXIge1xuICAgIHBhZGRpbmctYm90dG9tOiAxMzBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gICNjYWxlbmRhclNjcm9sbENvbnRhaW5lciB7XG4gICAgcGFkZGluZy1ib3R0b206IDEzMHB4O1xuICB9XG59XG5cbi5tY2stYWxlcnQge1xuICBoZWlnaHQ6IDEwMHZoO1xufVxuXG4ucm9vbS1hdmFpbGFiaWxpdHkge1xuICBoZWlnaHQ6IDM2OHB4O1xuICB3aWR0aDogMTAwJTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYm9yZGVyOiAxcHggc29saWQgI0ExOUY5RjtcbiAgYm9yZGVyLXdpZHRoOiB0aGluO1xuICB6LWluZGV4OiAyO1xufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5oZWFkZXIge1xuICB6LWluZGV4OiAxMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogMDtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eS5leHBhbmRlZCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHotaW5kZXg6IDQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmOGY5ZmE7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1jZW50ZXIge1xuICBtYXJnaW4tdG9wOiAxMjBweDtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSAubWNrLWNlbnRlci5oYXMtY29uZmxpY3Qge1xuICBtYXJnaW4tdG9wOiAxNDVweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5yb29tLWF2YWlsYWJpbGl0eSAubWNrLWNlbnRlciB7XG4gICAgbWFyZ2luLXRvcDogODBweDtcbiAgfVxuICAucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1jZW50ZXIuaGFzLWNvbmZsaWN0IHtcbiAgICBtYXJnaW4tdG9wOiAxNDVweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5yb29tLWF2YWlsYWJpbGl0eSAubWNrLWNlbnRlciB7XG4gICAgbWFyZ2luLXRvcDogODBweDtcbiAgfVxuICAucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1jZW50ZXIuaGFzLWNvbmZsaWN0IHtcbiAgICBtYXJnaW4tdG9wOiAxNDVweDtcbiAgfVxufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5tY2stY29sdW1uIHtcbiAgbWFyZ2luOiAwIGF1dG8gMjBweDtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSAubWNrLWNvbHVtbiA+IGRpdiB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIHBhZGRpbmc6IDA7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1jb2x1bW4gPiBoMSB7XG4gIGZvbnQtc2l6ZTogMjhweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbWFyZ2luOiAwIDAgMTBweCAwO1xufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5tY2stY29sdW1uID4gcCB7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgbGluZS1oZWlnaHQ6IDIycHg7XG4gIG1hcmdpbjogMnB4IDA7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1jb2x1bW4gLmludHJvIHtcbiAgcGFkZGluZzogMCAyMHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMjBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IDFweDtcbiAgei1pbmRleDogMjAwO1xufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5tY2stY29sdW1uIC5pbnRybyBwIHtcbiAgbWFyZ2luOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogODAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgLnJvb20tYXZhaWxhYmlsaXR5IC5tY2stY29sdW1uIC5pbnRybyB7XG4gICAgcGFkZGluZzogMCAwIDIwcHggMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDEwNDlweCkgYW5kIChtYXgtd2lkdGg6IDEyODBweCkge1xuICAucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1jb2x1bW4gLmludHJvIHtcbiAgICBwYWRkaW5nOiAwIDAgMjBweCAwO1xuICB9XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLmNhbC1jb250cm9scyB7XG4gIG1hcmdpbi10b3A6IDIwcHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAxcHg7XG4gIHotaW5kZXg6IDIwMDtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSAuY2FsLWNvbnRyb2xzID4gZGl2IHtcbiAgYmFja2dyb3VuZDogI2YwZjBmMDtcbiAgaGVpZ2h0OiA2NnB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmc6IDA7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLmNhbC1jb250cm9scyA+IGRpdiA+IGRpdiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5jYWwtY29udHJvbHMgPiBkaXYuZGF0ZS1waWNrZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNzBweDtcbiAgbGVmdDogMzMlO1xuICB3aWR0aDogMzQwcHg7XG4gIGhlaWdodDogYXV0bztcbiAgYmFja2dyb3VuZDogI0ZGRkZGRjtcbiAgYm94LXNoYWRvdzogMHB4IDE2cHggMzJweCAtMXB4IHJnYmEoNSwgMjgsIDQ0LCAwLjIpLCAwcHggMHB4IDFweCByZ2JhKDUsIDI4LCA0NCwgMC4xNSk7XG4gIHotaW5kZXg6IDEwO1xuICBwYWRkaW5nOiAyMHB4O1xuICBkaXNwbGF5OiBub25lO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLnJvb20tYXZhaWxhYmlsaXR5IC5jYWwtY29udHJvbHMgPiBkaXYuZGF0ZS1waWNrZXIge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB0b3A6IDUlO1xuICAgIGxlZnQ6IDUlO1xuICAgIHdpZHRoOiA5MCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAucm9vbS1hdmFpbGFiaWxpdHkgLmNhbC1jb250cm9scyA+IGRpdi5kYXRlLXBpY2tlciB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHRvcDogNSU7XG4gICAgbGVmdDogNSU7XG4gICAgd2lkdGg6IDkwJTtcbiAgfVxufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5jYWwtY29udHJvbHMgPiBkaXYuZGF0ZS1waWNrZXIgYnV0dG9uIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDE1cHggMzVweDtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSAuY2FsLWNvbnRyb2xzID4gZGl2LmRhdGUtcGlja2VyLnZpc2libGUge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSAuY2FsLWNvbnRyb2xzID4gZGl2IC5kaXIge1xuICBsZWZ0OiA5MHB4O1xufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5jYWwtY29udHJvbHMgPiBkaXYgLmRpciBpbnB1dCB7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHBhZGRpbmc6IDRweCAzcHg7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLmNhbC1jb250cm9scyA+IGRpdiAuZGlyIGJ1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXI6IDFweCBzb2xpZCAjQjNCM0IzO1xuICBwYWRkaW5nOiAxMHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLmNhbC1jb250cm9scyA+IGRpdiAuZGF0ZSB7XG4gIGxlZnQ6IDUwJTtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSAuY2FsLWNvbnRyb2xzID4gZGl2IC5kYXRlIC50aW1lLWlucHV0cy1jYWxlbmRhciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IC0zMnB4O1xuICB0b3A6IC03cHg7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLmNhbC1jb250cm9scyA+IGRpdiAuZGF0ZS5yaWdodCB7XG4gIHRvcDogMjRweDtcbiAgcmlnaHQ6IDQycHg7XG4gIGxlZnQ6IGF1dG87XG4gIHRyYW5zZm9ybTogbm9uZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5yb29tLWF2YWlsYWJpbGl0eSAuY2FsLWNvbnRyb2xzID4gZGl2IC5kYXRlLnJpZ2h0IHtcbiAgICByaWdodDogNDJweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5yb29tLWF2YWlsYWJpbGl0eSAuY2FsLWNvbnRyb2xzID4gZGl2IC5kYXRlLnJpZ2h0IHtcbiAgICByaWdodDogNDJweDtcbiAgfVxufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5jYWwtY29udHJvbHMgPiBkaXYgLndlZWtlbmRzIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDIwcHg7XG4gIHJpZ2h0OiAyMHB4O1xufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5jYWwtY29udHJvbHMgPiBkaXYgLndlZWtlbmRzLm1vYmlsZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1zY3JvbGwge1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gIGhlaWdodDogY2FsYygxMDB2aCAtIDM4NXB4KTtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSAubWNrLXNjcm9sbC5oYXMtY29uZmxpY3Qge1xuICBoZWlnaHQ6IGNhbGMoMTAwdmggLSA0NDJweCk7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1zY3JvbGwge1xuICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDM3MHB4KTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5yb29tLWF2YWlsYWJpbGl0eSAubWNrLXNjcm9sbCB7XG4gICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMzcwcHgpO1xuICB9XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLmZvb3RlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICBwYWRkaW5nOiAyNHB4IDE2cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gIGhlaWdodDogOTZweDtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBtYXJnaW46IDA7XG4gIHotaW5kZXg6IDQ7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAucm9vbS1hdmFpbGFiaWxpdHkgLmZvb3RlciB7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIHBhZGRpbmc6IDhweCAxMHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLnJvb20tYXZhaWxhYmlsaXR5IC5mb290ZXIge1xuICAgIGhlaWdodDogYXV0bztcbiAgICBwYWRkaW5nOiA4cHggMTBweDtcbiAgfVxufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5mb290ZXIgPiBkaXYge1xuICBkaXNwbGF5OiBmbGV4O1xuICBtYXgtd2lkdGg6IDcyNHB4O1xufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5mb290ZXIgYnV0dG9uIHtcbiAgZmxleDogMTtcbiAgbWF4LXdpZHRoOiAzMzdweDtcbiAgbWFyZ2luOiA1cHggYXV0bztcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLnJvb20tYXZhaWxhYmlsaXR5IC5mb290ZXIgYnV0dG9uIHtcbiAgICBtYXgtd2lkdGg6IG5vbmU7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkgYW5kIChtYXgtd2lkdGg6IDEwNDhweCkge1xuICAucm9vbS1hdmFpbGFiaWxpdHkgLmZvb3RlciBidXR0b24ge1xuICAgIG1heC13aWR0aDogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5mb290ZXIgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gIG1hcmdpbi1yaWdodDogMTBweDtcbn0iLCJAaW1wb3J0IFwidmFyc1wiO1xuXG5AbWl4aW4gcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkc2l6ZSwgJHF1YWxpZmllcikge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQGlmICgkcXVhbGlmaWVyID09IG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2UgaWYgKCRxdWFsaWZpZXIgPT0gbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1heC13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuQG1peGluIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkbWluLCAkbWF4KSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyB0aGlzIGlzIGEgY29weSBvZiByZXNwb25kLXRvLiB3ZSBkb24ndCB3YW50IHRvIHByZXNlcnZlIHRoYXQgbWV0aG9kIHNpbmNlIHRoZSBicmVha3BvaW50cyBtYXkgZGl2ZXJnZSBmcm9tIHRoZSBvbGQgVUkuXG5AbWl4aW4gaXMtc2NyZWVuLXNpemUoJG1lZGlhOiBhbGwsICRvcmllbnRhdGlvbjogbm9uZSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5cbkBtaXhpbiBwYWdlLXBhZGRpbmcge1xuICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctc21hbGw7XG4gICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctc21hbGw7XG59XG5cbi8vIEZvbnQgTWl4aW5zXG4kZm9udC1tY2tpbnNleS1zYW5zOiBcIk1jS2luc2V5IFNhbnNcIjtcbiRmb250LXRoZWluaGFyZHQ6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuJGZvbnQtYm93ZXI6IFwiQm93ZXJcIjtcblxuQG1peGluIGJvd2VyLWJvbGQge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1ib3dlcjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gbWNraW5zZXktc2FucyB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIGRpc3BsYXktMSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNHJlbTsgLy8gNjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODc7IC8vIDc2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTIge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTMge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2MHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNCB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDNyZW07IC8vIDQ4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNjY7IC8vIDU2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjRweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMwcHhcbiAgICBsaW5lLWhlaWdodDogMS44MzM7IC8vIDM0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY0MjsgLy8gNDBweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0xIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNDhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNzVyZW07IC8vIDQ0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA1MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0yIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjExMTsgLy8gNDRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDQ4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTMge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMjI7IC8vIDQ0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTUge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTYge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTU7IC8vIDI4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBib2R5LWRlZmF1bHQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjZweFxuICAgIH1cbn1cblxuLy8vIERvZXNudCBleGlzdCBpbiBNRFMuXG5AbWl4aW4gYm9keS10aW55IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTsgLy8gMTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDIwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBmb3JtLWxhYmVsIHtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC10aGVpbmhhcmR0O1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBjb2xvcjogJHBsYWNlaG9sZGVyLWNvbG9yO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG59XG5cbkBtaXhpbiBjaGlwLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gY2hlY2tib3gtbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICBjb2xvcjogYmxhY2s7XG59XG5cbi8vIGJvcmRlcnNcblxuQG1peGluIG1jay1jaGVja2JveC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stdGhpbi1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYm9yZGVyLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQtbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlci1saWdodDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cblxuLy8gZnVuY3Rpb25zXG5cbi8qKlxuICogTWFrZXMgdGV4dCBoYXZlIG1heGltdW0gbGluZXMgd2l0aCBlbGxpcHNpcy4gV29ya3Mgb24gbW9zdCBtb2Rlcm4gYnJvd3NlcnMgZXhjZXB0XG4gKiBvZiBGaXJlZm94Li5cbiAqL1xuQG1peGluIG1heC1saW5lcygkY291bnQpIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIC13ZWJraXQtbGluZS1jbGFtcDogJGNvdW50O1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG59XG5cbi8vIGltYWdlc1xuQG1peGluIG1jay1pY29uKCR3aWR0aCwgJGFzc2V0LCAkaGVpZ2h0OiAkd2lkdGgsICAkYXNzZXRQYXRoOiBcImxpYnMvdWkvc3JjL2xpYi9pY29uc1wiLCkge1xuICAgIHdpZHRoOiAkd2lkdGg7XG4gICAgaGVpZ2h0OiAkaGVpZ2h0O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiN7JGFzc2V0UGF0aH0vI3skYXNzZXR9XCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbn1cblxuXG5AbWl4aW4gbWNrLXNtYWxsLWljb24oJG1vYmlsZS1hc3NldCwgJGRlc2t0b3AtYXNzZXQ6ICRtb2JpbGUtYXNzZXQpIHtcbiAgICBAaW5jbHVkZSBtY2staWNvbigxNnB4LCAkYXNzZXQ6ICRtb2JpbGUtYXNzZXQpO1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBAaW5jbHVkZSBtY2staWNvbigyNHB4LCAkYXNzZXQ6ICRkZXNrdG9wLWFzc2V0KTtcbiAgICB9XG59XG5cbi8vIHNrZWxldG9uXG5AbWl4aW4gc2tlbGV0b24tYmcge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1pbWFnZS1zaXplIHtcbiAgICB3aWR0aDogODFweDtcbiAgICBoZWlnaHQ6IDgycHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAyMTlweDtcbiAgICAgICAgaGVpZ2h0OiAxMTlweDtcbiAgICB9XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1zdGF0dXMtc2l6ZSB7XG4gICAgd2lkdGg6IDExN3B4O1xuICAgIGhlaWdodDogNzhweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDExN3B4O1xuICAgICAgICBoZWlnaHQ6IDc4cHg7XG4gICAgfVxufVxuIiwiQGltcG9ydCBcImxpYnMvdWkvc3JjL2xpYi9taXhpbnNcIjtcblxuI2NhbGVuZGFyU2Nyb2xsQ29udGFpbmVye1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTMwcHg7XG4gICAgfVxufVxuLm1jay1hbGVydCB7XG4gICAgaGVpZ2h0OiAxMDB2aDtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSB7XG4gICAgaGVpZ2h0OiAzNjhweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNBMTlGOUY7XG4gICAgYm9yZGVyLXdpZHRoOiB0aGluO1xuICAgIHotaW5kZXg6IDI7XG4gICAgLmhlYWRlciB7XG4gICAgICAgIHotaW5kZXg6IDEwO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgIH1cbiAgICAmLmV4cGFuZGVkIHtcbiAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgei1pbmRleDogNDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcbiAgICB9XG4gICAgLm1jay1jZW50ZXIge1xuICAgICAgICBtYXJnaW4tdG9wOiAxMjBweDtcbiAgICAgICAgJi5oYXMtY29uZmxpY3R7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAxNDVweDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDgwcHg7XG4gICAgICAgICAgICAmLmhhcy1jb25mbGljdHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAxNDVweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAubWNrLWNvbHVtbiB7XG4gICAgICAgIG1hcmdpbjogMCBhdXRvIDIwcHg7XG4gICAgICAgID4gZGl2IHtcbiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDEwMjRweDsgXG4gICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICB9XG4gICAgICAgID4gaDEge1xuICAgICAgICAgICAgZm9udC1zaXplOiAyOHB4O1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgICAgIG1hcmdpbjogMCAwIDEwcHggMDtcbiAgICAgICAgfVxuICAgICAgICA+IHAge1xuICAgICAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgICAgICAgICBtYXJnaW46IDJweCAwO1xuICAgICAgICB9XG4gICAgICAgIC5pbnRybyB7XG4gICAgICAgICAgICBwYWRkaW5nOiAwIDIwcHg7XG4gICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMjBweDtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmOGY5ZmE7XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICB0b3A6IDFweDtcbiAgICAgICAgICAgIHotaW5kZXg6IDIwMDtcbiAgICAgICAgICAgIHAge1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGxhcHRvcCkge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAgMCAyMHB4IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLmNhbC1jb250cm9scyB7XG4gICAgICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgdG9wOiAxcHg7XG4gICAgICAgIHotaW5kZXg6IDIwMDtcbiAgICAgICAgXG4gICAgICAgID5kaXYge1xuICAgICAgICAgICAgYmFja2dyb3VuZDogI2YwZjBmMDtcbiAgICAgICAgICAgIGhlaWdodDogNjZweDtcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgICAgICA+ZGl2IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLmRhdGUtcGlja2VyIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgdG9wOiA3MHB4OyBcbiAgICAgICAgICAgICAgICBsZWZ0OiAzMyU7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDM0MHB4O1xuICAgICAgICAgICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRkZGRkZGO1xuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IDBweCAxNnB4IDMycHggLTFweCByZ2JhKDUsIDI4LCA0NCwgMC4yKSwgMHB4IDBweCAxcHggcmdiYSg1LCAyOCwgNDQsIDAuMTUpO1xuICAgICAgICAgICAgICAgIHotaW5kZXg6IDEwO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICAgICAgICAgICAgICB0b3A6IDUlOyBcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogNSU7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiA5MCU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNXB4IDM1cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICYudmlzaWJsZSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC5kaXIge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDkwcHg7XG4gICAgICAgICAgICAgICAgaW5wdXQge1xuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiA0cHggM3B4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBidXR0b24ge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0IzQjNCMztcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMTBweDtcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC5kYXRlIHtcbiAgICAgICAgICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgICAgICAgICAgLnRpbWUtaW5wdXRzLWNhbGVuZGFyIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgICAgICByaWdodDogLTMycHg7XG4gICAgICAgICAgICAgICAgICAgIHRvcDogLTdweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJi5yaWdodCB7XG4gICAgICAgICAgICAgICAgICAgIHRvcDogMjRweDtcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IDQycHg7XG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IGF1dG87XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogbm9uZTtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodDogNDJweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC53ZWVrZW5kcyB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIHRvcDogMjBweDtcbiAgICAgICAgICAgICAgICByaWdodDogMjBweDtcbiAgICAgICAgICAgICAgICAmLm1vYmlsZSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAgICAgICAgICBcbiAgICAgICAgfVxuXG4gICAgfVxuICAgIC5tY2stc2Nyb2xsIHtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwdmggLSAzODVweCk7XG4gICAgICAgICYuaGFzLWNvbmZsaWN0IHtcbiAgICAgICAgICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDQ0MnB4KTtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDM3MHB4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAuZm9vdGVyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHBhZGRpbmc6IDI0cHggMTZweDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgICAgICAgaGVpZ2h0OiA5NnB4O1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgei1pbmRleDogNDtcbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICAgICAgICBwYWRkaW5nOiA4cHggMTBweDtcbiAgICAgICAgfVxuICAgICAgICA+IGRpdiB7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgbWF4LXdpZHRoOiA3MjRweDtcbiAgICAgICAgfVxuICAgICAgICBidXR0b24ge1xuICAgICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICAgIG1heC13aWR0aDogMzM3cHg7XG4gICAgICAgICAgICBtYXJnaW46IDVweCBhdXRvO1xuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUodGFibGV0KSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiBub25lO1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJ1dHRvbjpudGgtY2hpbGQoMSkge1xuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG4iXX0= */"], + styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n.mck-alert[_ngcontent-%COMP%] {\n height: 100vh;\n}\n.room-availability[_ngcontent-%COMP%] {\n height: 368px;\n width: 100%;\n overflow: hidden;\n border: 1px solid #A19F9F;\n border-width: thin;\n z-index: 2;\n}\n.room-availability[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n z-index: 10;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n display: block;\n padding: 0;\n}\n.room-availability.expanded[_ngcontent-%COMP%] {\n position: relative;\n top: 0;\n left: 0;\n height: 100%;\n z-index: 4;\n background-color: #f8f9fa;\n}\n.room-availability.fixed[_ngcontent-%COMP%] {\n position: fixed;\n}\n.room-availability.fit-in-modal[_ngcontent-%COMP%] {\n height: 93vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .room-availability.fit-in-modal[_ngcontent-%COMP%] {\n height: 100vh;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .room-availability.fit-in-modal[_ngcontent-%COMP%] {\n height: 100vh;\n }\n}\n.room-availability[_ngcontent-%COMP%] .mck-center.has-conflict[_ngcontent-%COMP%] {\n margin-top: 145px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .room-availability[_ngcontent-%COMP%] .mck-center.has-conflict[_ngcontent-%COMP%] {\n margin-top: 145px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .room-availability[_ngcontent-%COMP%] .mck-center.has-conflict[_ngcontent-%COMP%] {\n margin-top: 145px;\n }\n}\n.room-availability[_ngcontent-%COMP%] .mck-center.margin-top[_ngcontent-%COMP%] {\n margin-top: 120px;\n}\n.room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] {\n margin: 0 auto 20px;\n}\n.room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n margin: 0 auto;\n width: 100%;\n max-width: 1024px;\n padding: 0;\n}\n.room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] > h1[_ngcontent-%COMP%] {\n font-size: 28px;\n font-weight: 400;\n margin: 0 0 10px 0;\n}\n.room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] > p[_ngcontent-%COMP%] {\n font-size: 18px;\n line-height: 22px;\n margin: 2px 0;\n}\n.room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] .intro[_ngcontent-%COMP%] {\n padding: 0 20px;\n padding-bottom: 20px;\n background-color: #f8f9fa;\n position: relative;\n top: 1px;\n z-index: 200;\n}\n.room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] .intro[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 801px) and (max-width: 1024px) {\n .room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] .intro[_ngcontent-%COMP%] {\n padding: 0 0 20px 0;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1049px) and (max-width: 1280px) {\n .room-availability[_ngcontent-%COMP%] .mck-column[_ngcontent-%COMP%] .intro[_ngcontent-%COMP%] {\n padding: 0 0 20px 0;\n }\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] {\n margin-top: 20px;\n position: relative;\n top: 1px;\n z-index: 200;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n background: #f0f0f0;\n height: 66px;\n position: relative;\n padding: 0;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n position: absolute;\n top: 50%;\n transform: translate(-50%, -50%);\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div.date-picker[_ngcontent-%COMP%] {\n position: absolute;\n top: 70px;\n left: 33%;\n width: 340px;\n height: auto;\n background: #FFFFFF;\n box-shadow: 0px 16px 32px -1px rgba(5, 28, 44, 0.2), 0px 0px 1px rgba(5, 28, 44, 0.15);\n z-index: 10;\n padding: 20px;\n display: none;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div.date-picker[_ngcontent-%COMP%] {\n position: fixed;\n top: 5%;\n left: 5%;\n width: 90%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div.date-picker[_ngcontent-%COMP%] {\n position: fixed;\n top: 5%;\n left: 5%;\n width: 90%;\n }\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div.date-picker[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n border: 1px solid #D0D0D0;\n background-color: white;\n padding: 15px 35px;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div.date-picker.visible[_ngcontent-%COMP%] {\n display: block;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .dir[_ngcontent-%COMP%] {\n left: 90px;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .dir[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n vertical-align: middle;\n padding: 4px 3px;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .dir[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n background-color: white;\n border: 1px solid #B3B3B3;\n padding: 10px;\n cursor: pointer;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .date[_ngcontent-%COMP%] {\n left: 50%;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .date[_ngcontent-%COMP%] .time-inputs-calendar[_ngcontent-%COMP%] {\n position: absolute;\n right: -32px;\n top: -7px;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .date.right[_ngcontent-%COMP%] {\n top: 24px;\n right: 42px;\n left: auto;\n transform: none;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .date.right[_ngcontent-%COMP%] {\n right: 42px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .date.right[_ngcontent-%COMP%] {\n right: 42px;\n }\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .weekends[_ngcontent-%COMP%] {\n position: absolute;\n top: 20px;\n right: 20px;\n}\n.room-availability[_ngcontent-%COMP%] .cal-controls[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] .weekends.mobile[_ngcontent-%COMP%] {\n display: none;\n}\n.room-availability[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n overflow: hidden;\n overflow-y: scroll;\n height: calc(100vh - 388px);\n}\n.room-availability[_ngcontent-%COMP%] .mck-scroll.has-conflict[_ngcontent-%COMP%] {\n height: calc(100vh - 442px);\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .room-availability[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: calc(100vh - 244px);\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .room-availability[_ngcontent-%COMP%] .mck-scroll[_ngcontent-%COMP%] {\n height: calc(100vh - 244px);\n }\n}\n.room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] {\n position: absolute;\n bottom: 0;\n left: 0;\n padding: 24px 16px;\n border: 1px solid #E6E6E6;\n height: 96px;\n width: 100%;\n background-color: white;\n margin: 0;\n z-index: 4;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] {\n height: auto;\n padding: 8px 10px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] {\n height: auto;\n padding: 8px 10px;\n }\n}\n.room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n display: flex;\n max-width: 724px;\n}\n.room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex: 1;\n max-width: 337px;\n margin: 5px auto;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n max-width: none;\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n max-width: none;\n width: 100%;\n }\n}\n.room-availability[_ngcontent-%COMP%] .footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:nth-child(1) {\n border: 1px solid #D0D0D0;\n margin-right: 10px;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWF2YWlsYWJpbGl0eS1wcmV2aWV3L3Jvb20tYXZhaWxhYmlsaXR5LXByZXZpZXcuY29tcG9uZW50LnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWF2YWlsYWJpbGl0eS1wcmV2aWV3L3Jvb20tYXZhaWxhYmlsaXR5LXByZXZpZXcuY29tcG9uZW50LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMkNBOztFQUFBO0FBcUNBOztzQkFBQTtBQWFBO0VBQ0ksZ0JBOUZNO0VBK0ZOLHVCQTdGYztBQ09sQjtBRHlGQTs7c0JBQUE7QUVrT0E7OztFQUFBO0FDN1RBO0VBQ0ksYUFBQTtBRllKO0FFVkE7RUFDSSxhQUFBO0VBQ0EsV0FBQTtFQUNBLGdCQUFBO0VBQ0EseUJBQUE7RUFDQSxrQkFBQTtFQUNBLFVBQUE7QUZhSjtBRVpJO0VBQ0ksV0FBQTtFQUNBLGtCQUFBO0VBQ0EsTUFBQTtFQUNBLE9BQUE7RUFDQSxXQUFBO0VBQ0EsY0FBQTtFQUNBLFVBQUE7QUZjUjtBRVpJO0VBQ0ksa0JBQUE7RUFDQSxNQUFBO0VBQ0EsT0FBQTtFQUNBLFlBQUE7RUFDQSxVQUFBO0VBQ0EseUJBQUE7QUZjUjtBRVhJO0VBQ0ksZUFBQTtBRmFSO0FFWEk7RUFDSSxZQUFBO0FGYVI7QUMzQ1k7RUM2QlI7SUFHUSxhQUFBO0VGZVY7QUFDRjtBQ2hEWTtFQzZCUjtJQUdRLGFBQUE7RUZvQlY7QUFDRjtB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QUE7RUFDQSxrQkFBQTtBRmdFWiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWF2YWlsYWJpbGl0eS1wcmV2aWV3L3Jvb20tYXZhaWxhYmlsaXR5LXByZXZpZXcuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIkcHJpbWFyeTogIzFGNDBFNjtcbiRmb3JtLWxhYmVsOiAjMDUxQzJDO1xuJHNlY29uZGFyeS1sYWJlbDogIzc2NzY3NjtcbiRib3JkZXI6ICNCM0IzQjM7XG4kYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDogI0QwRDBEMDtcbiRjaGlwLWNvbG9yOiAjMzMzMzMzO1xuJHBsYWNlaG9sZGVyLWNvbG9yOiAjN0Y3RjdGO1xuJGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4kcGFnZS1iYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuJHNlbGVjdGVkLW9wdGlvbjogI0U2RTZFNjtcbiRjb2xvci1icmFuZC15ZWxsb3c6ICNmZmQwNDg7XG4kbGlnaHQteWVsbG93OiAjZmZmM2NlO1xuJGNvYWNobWFyay10ZXh0OiAjNmY0ZDAwO1xuJGVycm9yLWNvbG9yOiAjRTEyRTQwO1xuJG5vLWZpbHRlcnMtY29sb3I6ICNCQ0JDQkM7XG4kcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I6ICNGNEY0RjQ7XG4kcHJpbWFyeS1oaWdobGlnaHQ6ICMyMjUxRkY7XG4kc2Nyb2xsYmFyLWNvbG9yOiAjNzU3NTc1O1xuXG4kYXZhaWxhYmxlLWNvbG9yOiAjNUQ5RDUyO1xuJGF2YWlsYWJsZS1ieS1yZXF1ZXN0LWNvbG9yOiAjRjVCNTNGO1xuJGluLXVzZS1jb2xvcjogI0Q0NDgzRTtcbiRub3QtYm9va2FibGUtY29sb3I6ICNDQ0NDQ0M7XG5cbiRtb2RhbC1ib2R5LWhlYWRpbmc6ICM0RDRENEQ7XG4kYWxlcnQtb3ZlcmxheS1iZzogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2FjaG1hcmstYmc6ICNFQkVCRjY7XG4kY29hY2htYXJrLWRhcmstdGV4dDogIzFCMUIxOTtcbiRlcnJvci10ZXh0OiAjZmZmO1xuXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuXG4vLyA0cHhcbiRzcGFjaW5nLXNtYWxsZXN0OiAwLjI1cmVtO1xuXG4vLyA4cHhcbiRzcGFjaW5nLXh4c21hbGw6IDAuNXJlbTtcblxuLy8gMTJweFxuJHNwYWNpbmcteHNtYWxsOiAwLjc1cmVtO1xuXG4vLyAxNnB4XG4kc3BhY2luZy1zbWFsbDogMXJlbTtcblxuLy8gMjBweFxuJHNwYWNpbmctc21hbGwtbWVkaXVtOiAxLjI1cmVtO1xuXG4vLyAyNHB4XG4kc3BhY2luZy1tZWRpdW06IDEuNXJlbTtcblxuLy8gMjhweFxuJHNwYWNpbmctbWVkaXVtLWxhcmdlOiAxLjc1cmVtO1xuXG4vLyAzMnB4XG4kc3BhY2luZy1sYXJnZTogMnJlbTtcblxuLy8gNDhweFxuJHNwYWNpbmcteGxhcmdlOiAzcmVtO1xuXG4vLyA2NHB4XG4kc3BhY2luZy14eGxhcmdlOiA0cmVtO1xuXG4vLyA5NnB4XG4kc3BhY2luZy1sYXJnZXN0OiA2cmVtO1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGRldmljZS1tb2JpbGUtc2l6ZTogNDUwcHg7XG4kZGV2aWNlLXRhYmxldC1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFwdG9wLXNpemU6IDEwMjRweDtcblxuJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemU6IDgwMHB4O1xuJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemU6IDEwNDhweDtcbiRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplOiAxMjgwcHg7XG5cblxuOmV4cG9ydCB7XG4gICAgcHJpbWFyeTogJHByaW1hcnk7XG4gICAgc2Vjb25kYXJ5TGFiZWw6ICRzZWNvbmRhcnktbGFiZWw7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4kaWNvbi1zbWFsbDogMTZweDtcbiRpY29uLW1lZGl1bTogMjRweDtcbiRpY29uLWxhcmdlOiAzMnB4O1xuJGljb24teGxhcmdlOiA0OHB4O1xuIiwiLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG4ubWNrLWFsZXJ0IHtcbiAgaGVpZ2h0OiAxMDB2aDtcbn1cblxuLnJvb20tYXZhaWxhYmlsaXR5IHtcbiAgaGVpZ2h0OiAzNjhweDtcbiAgd2lkdGg6IDEwMCU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJvcmRlcjogMXB4IHNvbGlkICNBMTlGOUY7XG4gIGJvcmRlci13aWR0aDogdGhpbjtcbiAgei1pbmRleDogMjtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSAuaGVhZGVyIHtcbiAgei1pbmRleDogMTA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDA7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkuZXhwYW5kZWQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgaGVpZ2h0OiAxMDAlO1xuICB6LWluZGV4OiA0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOWZhO1xufVxuLnJvb20tYXZhaWxhYmlsaXR5LmZpeGVkIHtcbiAgcG9zaXRpb246IGZpeGVkO1xufVxuLnJvb20tYXZhaWxhYmlsaXR5LmZpdC1pbi1tb2RhbCB7XG4gIGhlaWdodDogOTN2aDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5yb29tLWF2YWlsYWJpbGl0eS5maXQtaW4tbW9kYWwge1xuICAgIGhlaWdodDogMTAwdmg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAucm9vbS1hdmFpbGFiaWxpdHkuZml0LWluLW1vZGFsIHtcbiAgICBoZWlnaHQ6IDEwMHZoO1xuICB9XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1jZW50ZXIuaGFzLWNvbmZsaWN0IHtcbiAgbWFyZ2luLXRvcDogMTQ1cHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1jZW50ZXIuaGFzLWNvbmZsaWN0IHtcbiAgICBtYXJnaW4tdG9wOiAxNDVweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5yb29tLWF2YWlsYWJpbGl0eSAubWNrLWNlbnRlci5oYXMtY29uZmxpY3Qge1xuICAgIG1hcmdpbi10b3A6IDE0NXB4O1xuICB9XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1jZW50ZXIubWFyZ2luLXRvcCB7XG4gIG1hcmdpbi10b3A6IDEyMHB4O1xufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5tY2stY29sdW1uIHtcbiAgbWFyZ2luOiAwIGF1dG8gMjBweDtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSAubWNrLWNvbHVtbiA+IGRpdiB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIHBhZGRpbmc6IDA7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1jb2x1bW4gPiBoMSB7XG4gIGZvbnQtc2l6ZTogMjhweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbWFyZ2luOiAwIDAgMTBweCAwO1xufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5tY2stY29sdW1uID4gcCB7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgbGluZS1oZWlnaHQ6IDIycHg7XG4gIG1hcmdpbjogMnB4IDA7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1jb2x1bW4gLmludHJvIHtcbiAgcGFkZGluZzogMCAyMHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMjBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IDFweDtcbiAgei1pbmRleDogMjAwO1xufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5tY2stY29sdW1uIC5pbnRybyBwIHtcbiAgbWFyZ2luOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogODAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgLnJvb20tYXZhaWxhYmlsaXR5IC5tY2stY29sdW1uIC5pbnRybyB7XG4gICAgcGFkZGluZzogMCAwIDIwcHggMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDEwNDlweCkgYW5kIChtYXgtd2lkdGg6IDEyODBweCkge1xuICAucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1jb2x1bW4gLmludHJvIHtcbiAgICBwYWRkaW5nOiAwIDAgMjBweCAwO1xuICB9XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLmNhbC1jb250cm9scyB7XG4gIG1hcmdpbi10b3A6IDIwcHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAxcHg7XG4gIHotaW5kZXg6IDIwMDtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSAuY2FsLWNvbnRyb2xzID4gZGl2IHtcbiAgYmFja2dyb3VuZDogI2YwZjBmMDtcbiAgaGVpZ2h0OiA2NnB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmc6IDA7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLmNhbC1jb250cm9scyA+IGRpdiA+IGRpdiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5jYWwtY29udHJvbHMgPiBkaXYuZGF0ZS1waWNrZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNzBweDtcbiAgbGVmdDogMzMlO1xuICB3aWR0aDogMzQwcHg7XG4gIGhlaWdodDogYXV0bztcbiAgYmFja2dyb3VuZDogI0ZGRkZGRjtcbiAgYm94LXNoYWRvdzogMHB4IDE2cHggMzJweCAtMXB4IHJnYmEoNSwgMjgsIDQ0LCAwLjIpLCAwcHggMHB4IDFweCByZ2JhKDUsIDI4LCA0NCwgMC4xNSk7XG4gIHotaW5kZXg6IDEwO1xuICBwYWRkaW5nOiAyMHB4O1xuICBkaXNwbGF5OiBub25lO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLnJvb20tYXZhaWxhYmlsaXR5IC5jYWwtY29udHJvbHMgPiBkaXYuZGF0ZS1waWNrZXIge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB0b3A6IDUlO1xuICAgIGxlZnQ6IDUlO1xuICAgIHdpZHRoOiA5MCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAucm9vbS1hdmFpbGFiaWxpdHkgLmNhbC1jb250cm9scyA+IGRpdi5kYXRlLXBpY2tlciB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHRvcDogNSU7XG4gICAgbGVmdDogNSU7XG4gICAgd2lkdGg6IDkwJTtcbiAgfVxufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5jYWwtY29udHJvbHMgPiBkaXYuZGF0ZS1waWNrZXIgYnV0dG9uIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDE1cHggMzVweDtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSAuY2FsLWNvbnRyb2xzID4gZGl2LmRhdGUtcGlja2VyLnZpc2libGUge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSAuY2FsLWNvbnRyb2xzID4gZGl2IC5kaXIge1xuICBsZWZ0OiA5MHB4O1xufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5jYWwtY29udHJvbHMgPiBkaXYgLmRpciBpbnB1dCB7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHBhZGRpbmc6IDRweCAzcHg7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLmNhbC1jb250cm9scyA+IGRpdiAuZGlyIGJ1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXI6IDFweCBzb2xpZCAjQjNCM0IzO1xuICBwYWRkaW5nOiAxMHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLmNhbC1jb250cm9scyA+IGRpdiAuZGF0ZSB7XG4gIGxlZnQ6IDUwJTtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSAuY2FsLWNvbnRyb2xzID4gZGl2IC5kYXRlIC50aW1lLWlucHV0cy1jYWxlbmRhciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IC0zMnB4O1xuICB0b3A6IC03cHg7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLmNhbC1jb250cm9scyA+IGRpdiAuZGF0ZS5yaWdodCB7XG4gIHRvcDogMjRweDtcbiAgcmlnaHQ6IDQycHg7XG4gIGxlZnQ6IGF1dG87XG4gIHRyYW5zZm9ybTogbm9uZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5yb29tLWF2YWlsYWJpbGl0eSAuY2FsLWNvbnRyb2xzID4gZGl2IC5kYXRlLnJpZ2h0IHtcbiAgICByaWdodDogNDJweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5yb29tLWF2YWlsYWJpbGl0eSAuY2FsLWNvbnRyb2xzID4gZGl2IC5kYXRlLnJpZ2h0IHtcbiAgICByaWdodDogNDJweDtcbiAgfVxufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5jYWwtY29udHJvbHMgPiBkaXYgLndlZWtlbmRzIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDIwcHg7XG4gIHJpZ2h0OiAyMHB4O1xufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5jYWwtY29udHJvbHMgPiBkaXYgLndlZWtlbmRzLm1vYmlsZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1zY3JvbGwge1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gIGhlaWdodDogY2FsYygxMDB2aCAtIDM4OHB4KTtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSAubWNrLXNjcm9sbC5oYXMtY29uZmxpY3Qge1xuICBoZWlnaHQ6IGNhbGMoMTAwdmggLSA0NDJweCk7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAucm9vbS1hdmFpbGFiaWxpdHkgLm1jay1zY3JvbGwge1xuICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDI0NHB4KTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5yb29tLWF2YWlsYWJpbGl0eSAubWNrLXNjcm9sbCB7XG4gICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMjQ0cHgpO1xuICB9XG59XG4ucm9vbS1hdmFpbGFiaWxpdHkgLmZvb3RlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICBwYWRkaW5nOiAyNHB4IDE2cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gIGhlaWdodDogOTZweDtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBtYXJnaW46IDA7XG4gIHotaW5kZXg6IDQ7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAucm9vbS1hdmFpbGFiaWxpdHkgLmZvb3RlciB7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIHBhZGRpbmc6IDhweCAxMHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLnJvb20tYXZhaWxhYmlsaXR5IC5mb290ZXIge1xuICAgIGhlaWdodDogYXV0bztcbiAgICBwYWRkaW5nOiA4cHggMTBweDtcbiAgfVxufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5mb290ZXIgPiBkaXYge1xuICBkaXNwbGF5OiBmbGV4O1xuICBtYXgtd2lkdGg6IDcyNHB4O1xufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5mb290ZXIgYnV0dG9uIHtcbiAgZmxleDogMTtcbiAgbWF4LXdpZHRoOiAzMzdweDtcbiAgbWFyZ2luOiA1cHggYXV0bztcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLnJvb20tYXZhaWxhYmlsaXR5IC5mb290ZXIgYnV0dG9uIHtcbiAgICBtYXgtd2lkdGg6IG5vbmU7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkgYW5kIChtYXgtd2lkdGg6IDEwNDhweCkge1xuICAucm9vbS1hdmFpbGFiaWxpdHkgLmZvb3RlciBidXR0b24ge1xuICAgIG1heC13aWR0aDogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuLnJvb20tYXZhaWxhYmlsaXR5IC5mb290ZXIgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gIG1hcmdpbi1yaWdodDogMTBweDtcbn0iLCJAaW1wb3J0IFwidmFyc1wiO1xuXG5AbWl4aW4gcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkc2l6ZSwgJHF1YWxpZmllcikge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQGlmICgkcXVhbGlmaWVyID09IG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2UgaWYgKCRxdWFsaWZpZXIgPT0gbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1heC13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuQG1peGluIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkbWluLCAkbWF4KSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyB0aGlzIGlzIGEgY29weSBvZiByZXNwb25kLXRvLiB3ZSBkb24ndCB3YW50IHRvIHByZXNlcnZlIHRoYXQgbWV0aG9kIHNpbmNlIHRoZSBicmVha3BvaW50cyBtYXkgZGl2ZXJnZSBmcm9tIHRoZSBvbGQgVUkuXG5AbWl4aW4gaXMtc2NyZWVuLXNpemUoJG1lZGlhOiBhbGwsICRvcmllbnRhdGlvbjogbm9uZSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5cbkBtaXhpbiBwYWdlLXBhZGRpbmcge1xuICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctc21hbGw7XG4gICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctc21hbGw7XG59XG5cbi8vIEZvbnQgTWl4aW5zXG4kZm9udC1tY2tpbnNleS1zYW5zOiBcIk1jS2luc2V5IFNhbnNcIjtcbiRmb250LXRoZWluaGFyZHQ6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuJGZvbnQtYm93ZXI6IFwiQm93ZXJcIjtcblxuQG1peGluIGJvd2VyLWJvbGQge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1ib3dlcjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gbWNraW5zZXktc2FucyB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIGRpc3BsYXktMSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNHJlbTsgLy8gNjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODc7IC8vIDc2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTIge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTMge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2MHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNCB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDNyZW07IC8vIDQ4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNjY7IC8vIDU2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjRweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMwcHhcbiAgICBsaW5lLWhlaWdodDogMS44MzM7IC8vIDM0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY0MjsgLy8gNDBweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0xIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNDhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNzVyZW07IC8vIDQ0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA1MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0yIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjExMTsgLy8gNDRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDQ4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTMge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMjI7IC8vIDQ0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTUge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTYge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTU7IC8vIDI4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBib2R5LWRlZmF1bHQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjZweFxuICAgIH1cbn1cblxuLy8vIERvZXNudCBleGlzdCBpbiBNRFMuXG5AbWl4aW4gYm9keS10aW55IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTsgLy8gMTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDIwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBmb3JtLWxhYmVsIHtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC10aGVpbmhhcmR0O1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBjb2xvcjogJHBsYWNlaG9sZGVyLWNvbG9yO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG59XG5cbkBtaXhpbiBjaGlwLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gY2hlY2tib3gtbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICBjb2xvcjogYmxhY2s7XG59XG5cbi8vIGJvcmRlcnNcblxuQG1peGluIG1jay1jaGVja2JveC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stdGhpbi1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYm9yZGVyLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQtbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlci1saWdodDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cblxuLy8gZnVuY3Rpb25zXG5cbi8qKlxuICogTWFrZXMgdGV4dCBoYXZlIG1heGltdW0gbGluZXMgd2l0aCBlbGxpcHNpcy4gV29ya3Mgb24gbW9zdCBtb2Rlcm4gYnJvd3NlcnMgZXhjZXB0XG4gKiBvZiBGaXJlZm94Li5cbiAqL1xuQG1peGluIG1heC1saW5lcygkY291bnQpIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIC13ZWJraXQtbGluZS1jbGFtcDogJGNvdW50O1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG59XG5cbi8vIGltYWdlc1xuQG1peGluIG1jay1pY29uKCR3aWR0aCwgJGFzc2V0LCAkaGVpZ2h0OiAkd2lkdGgsICAkYXNzZXRQYXRoOiBcImxpYnMvdWkvc3JjL2xpYi9pY29uc1wiLCkge1xuICAgIHdpZHRoOiAkd2lkdGg7XG4gICAgaGVpZ2h0OiAkaGVpZ2h0O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiN7JGFzc2V0UGF0aH0vI3skYXNzZXR9XCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbn1cblxuXG5AbWl4aW4gbWNrLXNtYWxsLWljb24oJG1vYmlsZS1hc3NldCwgJGRlc2t0b3AtYXNzZXQ6ICRtb2JpbGUtYXNzZXQpIHtcbiAgICBAaW5jbHVkZSBtY2staWNvbigxNnB4LCAkYXNzZXQ6ICRtb2JpbGUtYXNzZXQpO1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBAaW5jbHVkZSBtY2staWNvbigyNHB4LCAkYXNzZXQ6ICRkZXNrdG9wLWFzc2V0KTtcbiAgICB9XG59XG5cbi8vIHNrZWxldG9uXG5AbWl4aW4gc2tlbGV0b24tYmcge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1pbWFnZS1zaXplIHtcbiAgICB3aWR0aDogODFweDtcbiAgICBoZWlnaHQ6IDgycHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAyMTlweDtcbiAgICAgICAgaGVpZ2h0OiAxMTlweDtcbiAgICB9XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1zdGF0dXMtc2l6ZSB7XG4gICAgd2lkdGg6IDExN3B4O1xuICAgIGhlaWdodDogNzhweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDExN3B4O1xuICAgICAgICBoZWlnaHQ6IDc4cHg7XG4gICAgfVxufVxuIiwiQGltcG9ydCBcImxpYnMvdWkvc3JjL2xpYi9taXhpbnNcIjtcblxuI2NhbGVuZGFyU2Nyb2xsQ29udGFpbmVye1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAvLyBwYWRkaW5nLWJvdHRvbTogMTMwcHg7XG4gICAgfVxufVxuLm1jay1hbGVydCB7XG4gICAgaGVpZ2h0OiAxMDB2aDtcbn1cbi5yb29tLWF2YWlsYWJpbGl0eSB7XG4gICAgaGVpZ2h0OiAzNjhweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNBMTlGOUY7XG4gICAgYm9yZGVyLXdpZHRoOiB0aGluO1xuICAgIHotaW5kZXg6IDI7XG4gICAgLmhlYWRlciB7XG4gICAgICAgIHotaW5kZXg6IDEwO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgIH1cbiAgICAmLmV4cGFuZGVkIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgei1pbmRleDogNDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcblxuICAgIH1cbiAgICAmLmZpeGVke1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgfVxuICAgICYuZml0LWluLW1vZGFse1xuICAgICAgICBoZWlnaHQ6IDkzdmg7XG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAubWNrLWNlbnRlciB7XG4gICAgICAgXG4gICAgICAgICYuaGFzLWNvbmZsaWN0e1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogMTQ1cHg7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAvLyBtYXJnaW4tdG9wOiA4MHB4O1xuICAgICAgICAgICAgJi5oYXMtY29uZmxpY3R7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMTQ1cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLm1hcmdpbi10b3AgXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDEyMHB4O1xuICAgICAgICB9XG4gICAgfVxuICAgIC5tY2stY29sdW1uIHtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG8gMjBweDtcbiAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIG1heC13aWR0aDogMTAyNHB4OyBcbiAgICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIH1cbiAgICAgICAgPiBoMSB7XG4gICAgICAgICAgICBmb250LXNpemU6IDI4cHg7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICAgICAgbWFyZ2luOiAwIDAgMTBweCAwO1xuICAgICAgICB9XG4gICAgICAgID4gcCB7XG4gICAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMjJweDtcbiAgICAgICAgICAgIG1hcmdpbjogMnB4IDA7XG4gICAgICAgIH1cbiAgICAgICAgLmludHJvIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDAgMjBweDtcbiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAyMHB4O1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgIHRvcDogMXB4O1xuICAgICAgICAgICAgei1pbmRleDogMjAwO1xuICAgICAgICAgICAgcCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobGFwdG9wKSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMCAwIDIwcHggMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAuY2FsLWNvbnRyb2xzIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMjBweDtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB0b3A6IDFweDtcbiAgICAgICAgei1pbmRleDogMjAwO1xuICAgICAgICBcbiAgICAgICAgPmRpdiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuICAgICAgICAgICAgaGVpZ2h0OiA2NnB4O1xuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgICAgID5kaXYge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYuZGF0ZS1waWNrZXIge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICB0b3A6IDcwcHg7IFxuICAgICAgICAgICAgICAgIGxlZnQ6IDMzJTtcbiAgICAgICAgICAgICAgICB3aWR0aDogMzQwcHg7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGRkZGRkY7XG4gICAgICAgICAgICAgICAgYm94LXNoYWRvdzogMHB4IDE2cHggMzJweCAtMXB4IHJnYmEoNSwgMjgsIDQ0LCAwLjIpLCAwcHggMHB4IDFweCByZ2JhKDUsIDI4LCA0NCwgMC4xNSk7XG4gICAgICAgICAgICAgICAgei1pbmRleDogMTA7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMjBweDtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgICAgICAgICAgICAgIHRvcDogNSU7IFxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiA1JTtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDkwJTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnV0dG9uIHtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDE1cHggMzVweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJi52aXNpYmxlIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLmRpciB7XG4gICAgICAgICAgICAgICAgbGVmdDogOTBweDtcbiAgICAgICAgICAgICAgICBpbnB1dCB7XG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDRweCAzcHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjQjNCM0IzO1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMHB4O1xuICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLmRhdGUge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgICAgICAgICAudGltZS1pbnB1dHMtY2FsZW5kYXIge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAtMzJweDtcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAtN3B4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAmLnJpZ2h0IHtcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAyNHB4O1xuICAgICAgICAgICAgICAgICAgICByaWdodDogNDJweDtcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogYXV0bztcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBub25lO1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiA0MnB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLndlZWtlbmRzIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgdG9wOiAyMHB4O1xuICAgICAgICAgICAgICAgIHJpZ2h0OiAyMHB4O1xuICAgICAgICAgICAgICAgICYubW9iaWxlIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ICAgICAgICAgIFxuICAgICAgICB9XG5cbiAgICB9XG4gICAgLm1jay1zY3JvbGwge1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDM4OHB4KTtcbiAgICAgICAgJi5oYXMtY29uZmxpY3Qge1xuICAgICAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNDQycHgpO1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMjQ0cHgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC5mb290ZXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcGFkZGluZzogMjRweCAxNnB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICAgICAgICBoZWlnaHQ6IDk2cHg7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICB6LWluZGV4OiA0O1xuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgICAgIHBhZGRpbmc6IDhweCAxMHB4O1xuICAgICAgICB9XG4gICAgICAgID4gZGl2IHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDcyNHB4O1xuICAgICAgICB9XG4gICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAzMzdweDtcbiAgICAgICAgICAgIG1hcmdpbjogNXB4IGF1dG87XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZSh0YWJsZXQpIHtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IG5vbmU7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRDBEMEQwO1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbiJdfQ== */"], changeDetection: 0 }); /*@__PURE__*/ @@ -65268,6 +66272,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }], warnIfItHasConflict: [{ type: core_1.Output + }], + placeIntoModal: [{ + type: core_1.Input }] }); })(); @@ -65748,7 +66755,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super89 = _createSuper(RoomBookingDetailsFormComponent); - function RoomBookingDetailsFormComponent(_spaces, _snackBar, store, vcRef, _users) { + function RoomBookingDetailsFormComponent(_spaces, _snackBar, store, vcRef, _service, _users) { var _this270; _classCallCheck(this, RoomBookingDetailsFormComponent); @@ -65757,6 +66764,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons _this270._spaces = _spaces; _this270._snackBar = _snackBar; _this270.store = store; + _this270._service = _service; _this270._users = _users; /** Number of characters needed before a search will start */ @@ -66064,13 +67072,20 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var inputValue = option.value.split(' ').map(function (word) { return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase(); - }).join(' '); // Check for character limit + }).join(' '); + var inputValueEmail = ''; // Check if inputValue is a valid email + + var emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; + + if (!emailRegex.test(inputValue)) { + // If not, replace all spaces with underscores and append a random guest email string + inputValueEmail = inputValue.replace(/\s+/g, '_') + "".concat(Math.floor(Math.random() * 99999), "@guest.mckinsey.com"); + } // Check for character limit + if ( // this.selectedOptions.value.some((option: SelectOption) => option.value === inputValue) || inputValue.length > 50) { - this._snackBar.open('Attendee name cannot exceed 50 characters', 'Close', { - duration: 5000 - }); + this._service.notifyWarn('Attendee name cannot exceed 50 characters'); return; } @@ -66092,7 +67107,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } else { var color = inputValue.toLowerCase().includes('mckinsey.') ? 'internal' : 'external'; opts.push(Object.assign(Object.assign({}, option), { - value: inputValue, + value: inputValueEmail, display: inputValue, shortDisplay: inputValue, meta: Object.assign(Object.assign({}, option.meta), { @@ -66242,7 +67257,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons exports.RoomBookingDetailsFormComponent = RoomBookingDetailsFormComponent; RoomBookingDetailsFormComponent.ɵfac = function RoomBookingDetailsFormComponent_Factory(t) { - return new (t || RoomBookingDetailsFormComponent)(i0.ɵɵdirectiveInject(i1.SpacesService), i0.ɵɵdirectiveInject(i2.MatSnackBar), i0.ɵɵdirectiveInject(i3.Store), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i1.UsersService)); + return new (t || RoomBookingDetailsFormComponent)(i0.ɵɵdirectiveInject(i1.SpacesService), i0.ɵɵdirectiveInject(i2.MatSnackBar), i0.ɵɵdirectiveInject(i3.Store), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i1.ApplicationService), i0.ɵɵdirectiveInject(i1.UsersService)); }; RoomBookingDetailsFormComponent.ɵcmp = i0.ɵɵdefineComponent({ @@ -66278,7 +67293,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } }, directives: [i4.ɵangular_packages_forms_forms_y, i4.NgControlStatusGroup, i4.FormGroupDirective, i5.LabelComponent, i6.MatFormField, i7.MatInput, i4.DefaultValueAccessor, i4.NgControlStatus, i4.FormControlName, i4.RequiredValidator, i6.MatError, i8.SelectComponent, i9.MatCheckbox, i10.TooltipDirective, i11.AutoCompleteChipSelectItemComponent, i6.MatHint, i12.NgIf, i6.MatLabel, i13.NumbersOnlyDirective, i4.NumberValueAccessor], - styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n.mck-inherit-font[_ngcontent-%COMP%] {\n font: inherit;\n}\n.mck-content-expand[_ngcontent-%COMP%], .mck-content-page[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n}\n.mck-content-expand-width[_ngcontent-%COMP%] {\n width: 100%;\n}\n.mck-content-expand-height[_ngcontent-%COMP%] {\n height: 100%;\n}\n.mck-content-with-footer-height[_ngcontent-%COMP%] {\n height: calc(100vh - 58px);\n}\n.mck-content-full-height[_ngcontent-%COMP%], .mck-content-page-container[_ngcontent-%COMP%] {\n height: 100vh;\n}\n.mck-content-page[_ngcontent-%COMP%] {\n background: #F8F9FA;\n}\n.mck-content-body[_ngcontent-%COMP%] {\n width: 100%;\n display: block;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-content-body[_ngcontent-%COMP%] {\n max-width: 1024px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-content-body[_ngcontent-%COMP%] {\n max-width: 1024px;\n }\n}\n.mck-content-group[_ngcontent-%COMP%] {\n padding-left: 1rem;\n padding-right: 1rem;\n width: 100%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-content-group[_ngcontent-%COMP%] {\n max-width: 759px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-content-group[_ngcontent-%COMP%] {\n max-width: 759px;\n }\n}\n.mck-shadow[_ngcontent-%COMP%] {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n}\n.mck-flex-1[_ngcontent-%COMP%] {\n flex: 1;\n}\n.mck-row[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .mck-row-flow[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n}\n.mck-row.mck-center-justify[_ngcontent-%COMP%], .mck-center-justify.mck-row-flow[_ngcontent-%COMP%], .mck-row.mck-center[_ngcontent-%COMP%], .mck-row.mck-button.mat-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .mck-center.mck-row-flow[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: center;\n}\n.mck-row.mck-center-align[_ngcontent-%COMP%], .mck-center-align.mck-row-flow[_ngcontent-%COMP%], .mck-row.mck-center[_ngcontent-%COMP%], .mck-row.mck-button.mat-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .mck-center.mck-row-flow[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n align-items: center;\n}\n.mck-row.mck-stretch[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mck-stretch.mat-form-field-infix[_ngcontent-%COMP%], .mck-stretch.mck-row-flow[_ngcontent-%COMP%] {\n align-items: stretch;\n}\n.mck-row-flow[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n}\n.mck-row.mck-scroll[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mck-scroll.mat-form-field-infix[_ngcontent-%COMP%], .mck-scroll.mck-row-flow[_ngcontent-%COMP%] {\n overflow-x: scroll;\n}\n.mck-column[_ngcontent-%COMP%], .mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n.mck-column.mck-center[_ngcontent-%COMP%], .mck-column.mck-button.mat-button[_ngcontent-%COMP%], .mck-column.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-column.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-column.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-column.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-column.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-center.mck-button.mat-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-button[_ngcontent-%COMP%], .mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-button.mat-stroked-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-center.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mck-column.mat-form-field-infix[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mck-button.mat-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: center;\n align-items: center;\n}\n.mck-column.mck-space-between[_ngcontent-%COMP%], .mck-space-between.mck-button.mat-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-space-between.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: space-between;\n}\n.mck-column.mck-stretch[_ngcontent-%COMP%], .mck-stretch.mck-button.mat-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-stretch.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n align-items: stretch;\n}\n.mck-column.mck-scroll[_ngcontent-%COMP%], .mck-scroll.mck-button.mat-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-scroll.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n overflow-y: scroll;\n overflow-y: overlay;\n}\n.mck-column.mck-flex-end[_ngcontent-%COMP%], .mck-flex-end.mck-button.mat-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-flex-end.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: flex-end;\n}\n.mck-overflow[_ngcontent-%COMP%] {\n overflow: auto;\n}\n.mck-bordered[_ngcontent-%COMP%], .mck-input[_ngcontent-%COMP%] {\n border-radius: 0;\n border: 1px solid #B3B3B3;\n}\n.mck-bordered[_ngcontent-%COMP%]:hover, .mck-input[_ngcontent-%COMP%]:hover {\n border-color: #464646;\n}\n.mck-bordered[_ngcontent-%COMP%]:focus, .mck-input[_ngcontent-%COMP%]:focus {\n border-color: #1F40E6;\n}\n.mck-bordered[disabled=true][_ngcontent-%COMP%], .mck-input[disabled=true][_ngcontent-%COMP%] {\n pointer-events: none;\n border-color: #f0f0f0;\n color: #ccc;\n}\n.mck-date-display[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n height: 43px;\n padding: 1rem 0.5rem;\n transition: border 200ms, box-shadow 200ms;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-form-field-wrapper[_ngcontent-%COMP%] {\n padding-bottom: 0.5rem;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] {\n min-width: auto !important;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n width: 100%;\n padding-top: 0.7rem !important;\n padding-bottom: 0.5rem !important;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] {\n min-height: 2.7rem;\n color: rgba(0, 0, 0, 0.27);\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n margin-top: 2px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-flex[_ngcontent-%COMP%] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-flex[_ngcontent-%COMP%] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 2rem;\n min-height: 2rem;\n }\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 2rem;\n min-height: 2rem;\n }\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field.mat-s[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-select[_ngcontent-%COMP%] {\n margin-top: 0.2rem;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-select[_ngcontent-%COMP%] .mat-select-arrow[_ngcontent-%COMP%] {\n visibility: hidden;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-select[_ngcontent-%COMP%] .mat-select-value[_ngcontent-%COMP%] > .mat-select-value-text[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 400;\n font-family: \"McKinsey Sans\";\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #B3B3B3;\n border-width: 1px;\n border-radius: 0;\n}\n.mck-form-input[_ngcontent-%COMP%] .available[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .available[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .available[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #3aa537;\n}\n.mck-form-input[_ngcontent-%COMP%] .booked[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .booked[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .booked[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #e12e41;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline-thick[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline-thick[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline-thick[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #1F40E6;\n border-width: 1px;\n border-radius: 0;\n}\n.mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-wrapper[_ngcontent-%COMP%] {\n padding-bottom: 0;\n}\n.mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #E12E40;\n}\n.mck-form-input[_ngcontent-%COMP%] mck-close-icon.mat-chip-remove.mat-chip-remove[_ngcontent-%COMP%] {\n opacity: 1;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-label[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 400;\n text-align: left;\n margin-bottom: 0.5rem;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-radio-button[_ngcontent-%COMP%] {\n margin-right: 1rem;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-radio-label-content[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-radio-outer-circle[_ngcontent-%COMP%] {\n border-color: #1F40E6 !important;\n border-width: 1px !important;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-radio-inner-circle[_ngcontent-%COMP%] {\n background-color: #1F40E6 !important;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-radio-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-radio-group[_ngcontent-%COMP%] > mat-radio-button[_ngcontent-%COMP%]:last-child {\n margin-right: 0;\n}\n.mck-form-input-container[_ngcontent-%COMP%] > .mck-form-input[_ngcontent-%COMP%], .mck-form-input-container[_ngcontent-%COMP%] > mck-select[_ngcontent-%COMP%] {\n margin-bottom: 0.5rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-form-input-container[_ngcontent-%COMP%] > .mck-form-input[_ngcontent-%COMP%], .mck-form-input-container[_ngcontent-%COMP%] > mck-select[_ngcontent-%COMP%] {\n margin-bottom: 1.75rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-form-input-container[_ngcontent-%COMP%] > .mck-form-input[_ngcontent-%COMP%], .mck-form-input-container[_ngcontent-%COMP%] > mck-select[_ngcontent-%COMP%] {\n margin-bottom: 1.75rem;\n }\n}\n.mck-form-input-container[_ngcontent-%COMP%] .mck-radio-select[_ngcontent-%COMP%] {\n margin-bottom: 1rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-form-input-container[_ngcontent-%COMP%] .mck-radio-select[_ngcontent-%COMP%] {\n margin-bottom: 1.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-form-input-container[_ngcontent-%COMP%] .mck-radio-select[_ngcontent-%COMP%] {\n margin-bottom: 1.5rem;\n }\n}\n.mck-form-input[_ngcontent-%COMP%] mat-chip.mat-standard-chip.mat-standard-chip[_ngcontent-%COMP%] {\n border-radius: 3px;\n min-height: 1.5rem;\n background-color: #333333;\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 0.75rem;\n line-height: 1.5rem;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input[_ngcontent-%COMP%] mat-chip.mat-standard-chip.mat-standard-chip[_ngcontent-%COMP%] {\n line-height: inherit;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input[_ngcontent-%COMP%] mat-chip.mat-standard-chip.mat-standard-chip[_ngcontent-%COMP%] {\n line-height: inherit;\n }\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox.mat-checkbox.mat-checkbox[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] {\n background-color: #D0D0D0;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n color: #B3B3B3;\n}\n.mck-borderless[_ngcontent-%COMP%] {\n border: none;\n}\n.mck-borderless[_ngcontent-%COMP%]:hover, .mck-borderless[_ngcontent-%COMP%]:focus, .mck-borderless[_ngcontent-%COMP%]:disabled {\n border: none;\n}\n.mck-select-panel[_ngcontent-%COMP%] {\n margin-top: 0 !important;\n border-radius: unset !important;\n margin-top: 35px !important;\n margin-left: 5px;\n}\n.mck-select-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] {\n padding-left: 0;\n padding-right: 0;\n}\n.mck-select-panel[_ngcontent-%COMP%] mat-option.mat-option-text[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-select-panel.mck-margin-top[_ngcontent-%COMP%] {\n margin-top: 1.5rem !important;\n}\n.mck-checkbox-panel.mat-autocomplete-panel.mat-autocomplete-panel[_ngcontent-%COMP%] {\n top: -10px;\n max-height: 278px;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option.mck-truncated[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] {\n padding-left: 0;\n padding-right: 0;\n line-height: 24px;\n height: unset;\n min-height: 36px;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n flex: 1;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n text-align: left;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option.mck-checkbox-group-header[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option.mck-checkbox-group-child[_ngcontent-%COMP%] {\n margin-left: 2rem;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] label.mat-checkbox-layout[_ngcontent-%COMP%] {\n width: 100%;\n padding-left: 16px;\n padding-right: 16px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] label.mat-checkbox-layout[_ngcontent-%COMP%] {\n padding-left: 2px;\n padding-right: 2px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] label.mat-checkbox-layout[_ngcontent-%COMP%] {\n padding-left: 2px;\n padding-right: 2px;\n }\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] div.mat-checkbox-frame.mat-checkbox-frame[_ngcontent-%COMP%] {\n border: 1px solid #B3B3B3;\n border-radius: 0;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox.mat-checkbox-checked[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background[_ngcontent-%COMP%] {\n background-color: #D0D0D0;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n color: #B3B3B3;\n text-align: left;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] .mat-checkbox-inner-container[_ngcontent-%COMP%] {\n width: 1.25rem;\n height: 1.25rem;\n}\n.mck-select-option-selected[_ngcontent-%COMP%] {\n font-weight: 500;\n font-family: \"McKinsey Sans\";\n color: black;\n background-color: #E6E6E6;\n}\n.mck-select-option-selected[_ngcontent-%COMP%] .mck-spacer-content[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n margin-right: 0.75rem;\n}\n.mck-select-option-unselected[_ngcontent-%COMP%] {\n font-weight: 400;\n font-family: \"McKinsey Sans\";\n}\n.mck-select-option-unselected.mck-ignore-disabled[_ngcontent-%COMP%] {\n color: black;\n}\n.mck-select-option-unselected[_ngcontent-%COMP%] .mck-spacer-content[_ngcontent-%COMP%] {\n visibility: hidden;\n margin-right: 0.75rem;\n}\n.mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n height: 40px;\n border-radius: 0;\n border: none;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n }\n}\n.mck-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: normal;\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n }\n}\n.mck-button.mat-button.mat-button.mck-short[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button[_ngcontent-%COMP%] {\n height: 32px;\n min-width: 83px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-short[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-short[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%] {\n height: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%] {\n height: 40px;\n }\n}\n.mck-button.mat-button.mat-button.mck-square[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-square[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n min-width: 32px;\n padding: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-square[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-square[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-square[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-square[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n }\n}\n.mck-primary-button.mat-button.mat-button[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n}\n.mck-primary-button.mat-button.mat-button[disabled][_ngcontent-%COMP%], .mck-primary-button.mat-button.mat-button.disabled[_ngcontent-%COMP%] {\n background-color: #D0D0D0;\n color: #757575;\n cursor: not-allowed;\n}\n.mck-primary-button.mat-button.mat-button[disabled][_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-primary-button.mat-button.mat-button.disabled[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: #757575;\n}\n.mck-primary-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: white;\n}\n.mck-secondary-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] {\n border: 1px solid #D0D0D0;\n border-radius: 0;\n border: 1px solid #2251FF;\n color: #2251FF;\n}\n.mck-secondary-button.mat-stroked-button.mat-stroked-button[disabled][_ngcontent-%COMP%], .mck-secondary-button.mat-stroked-button.mat-stroked-button.disabled[_ngcontent-%COMP%] {\n border: 1px solid #D0D0D0;\n color: #333333;\n cursor: not-allowed;\n}\n.mck-secondary-button.mat-button.mat-button[_ngcontent-%COMP%] {\n background-color: white;\n}\n.mck-secondary-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: #333333;\n}\n.mck-warning-button.mat-button.mat-button[_ngcontent-%COMP%] {\n background-color: #ffd048;\n}\n.mck-warning-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: black;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] {\n border: 2px solid #B3B3B3;\n border-radius: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding-left: 1.75rem;\n padding-right: 1.75rem;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%] {\n height: 32px;\n min-width: 83px;\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-primary[_ngcontent-%COMP%] {\n border-width: 1px;\n border-color: #1F40E6;\n color: #1F40E6;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-thin-border-light[_ngcontent-%COMP%] {\n border-color: #D0D0D0;\n border-width: 1px;\n}\n.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: normal;\n color: #1F40E6;\n}\n.mck-toggle-button[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n border: 1px solid #B3B3B3;\n border-color: #D0D0D0;\n min-width: 59px;\n background-color: white;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-toggle-button[_ngcontent-%COMP%] {\n min-width: 132px;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-toggle-button[_ngcontent-%COMP%] {\n min-width: 132px;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n }\n}\n.mck-toggle-button-selected[_ngcontent-%COMP%] {\n color: #1F40E6;\n}\n.mck-date-picker[_ngcontent-%COMP%] {\n width: 100% !important;\n height: 100% !important;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-date-picker[_ngcontent-%COMP%] {\n max-width: 23rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-date-picker[_ngcontent-%COMP%] {\n max-width: 23rem;\n }\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n color: #051C2C;\n margin-top: 1.25rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] {\n width: 2.375rem;\n height: 2rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] > .icon.icon[_ngcontent-%COMP%] {\n width: 1rem;\n height: 1rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] > .next.next[_ngcontent-%COMP%] {\n background-image: url('arrow-forward.svg');\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] > .previous.previous[_ngcontent-%COMP%] {\n background-image: url('arrow-backward.svg');\n}\n.mck-date-picker[_ngcontent-%COMP%] > .month[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .week[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n color: #767676;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date[_ngcontent-%COMP%] > .dot[_ngcontent-%COMP%] {\n display: none;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date.disabled[_ngcontent-%COMP%] {\n background-color: transparent;\n border-radius: 0;\n color: #767676;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date.active[_ngcontent-%COMP%] {\n border-radius: 0;\n background-color: #1F40E6;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date.non-month[_ngcontent-%COMP%] {\n color: #767676;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-spacer-content-expand-mobile[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-spacer-content-expand-mobile[_ngcontent-%COMP%] {\n display: none;\n }\n}\n.mck-spacer-content-divider[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n border-radius: 0;\n border-top: 1px solid #E6E6E6;\n border-bottom: 1px solid #E6E6E6;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] {\n background-color: #F0F0F0;\n border-bottom: none;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n background-image: url('chevron-close.svg');\n background-size: contain;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-close-large.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-close-large.svg');\n background-size: contain;\n }\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] {\n padding-left: 0;\n padding-right: 0;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 0.75rem;\n line-height: 1.4;\n padding-left: 1rem;\n padding-right: 1rem;\n text-align: left;\n color: black;\n font-weight: normal;\n padding-bottom: 0.5rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-size: 1rem;\n line-height: 1.6;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-size: 1rem;\n line-height: 1.6;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n }\n}\n.mck-expansion-panel[_ngcontent-%COMP%] mat-expansion-panel-header[_ngcontent-%COMP%] {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.mck-expansion-panel[_ngcontent-%COMP%] mat-expansion-panel-header[_ngcontent-%COMP%] > span.mat-content[_ngcontent-%COMP%] {\n align-items: center;\n}\n.mck-expansion-panel[_ngcontent-%COMP%] mat-panel-title[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n color: black;\n font-weight: normal;\n}\n.mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n background-image: url('chevron-open.svg');\n background-size: contain;\n transform: rotate(0deg);\n transition: transform 0.5s ease;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-open-large.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-open-large.svg');\n background-size: contain;\n }\n}\n.mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon.expanded[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n}\n.mck-icon-fill-open[_ngcontent-%COMP%] {\n fill: #1F40E6;\n}\n.mck-icon-fill-close[_ngcontent-%COMP%] {\n fill: #767676;\n}\n.mck-icon-fill-black[_ngcontent-%COMP%] {\n fill: black;\n stroke: black;\n}\n.mck-icon-fill-white[_ngcontent-%COMP%] {\n fill: white;\n stroke: white;\n}\n.mck-icon-fill-gray[_ngcontent-%COMP%] {\n fill: #333333;\n stroke: #333333;\n}\n.mck-min[_ngcontent-%COMP%] {\n max-width: 581px !important;\n width: 80vw;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-min[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-min[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-min[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-min[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-noexpand[_ngcontent-%COMP%] {\n max-width: 581px !important;\n width: 80vw !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-noexpand[_ngcontent-%COMP%] {\n width: calc(100vw - 32px) !important;\n max-height: 100vh;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-noexpand[_ngcontent-%COMP%] {\n width: calc(100vw - 32px) !important;\n max-height: 100vh;\n }\n}\n.mck-modal[_ngcontent-%COMP%] {\n max-width: 800px !important;\n width: 80vw;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-mini[_ngcontent-%COMP%] {\n max-width: 580px !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-mini[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-mini[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-mini[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-mini[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-survey[_ngcontent-%COMP%] {\n max-width: 691px !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-survey[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-survey[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-wide[_ngcontent-%COMP%] {\n max-width: 1024px !important;\n width: 100vw;\n height: 95vh;\n max-height: 100vh;\n}\n.mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] {\n background-color: #F8F9FA;\n padding: 0 !important;\n overflow: hidden;\n}\n.mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] {\n position: relative;\n right: 32px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-wide-manage-booking[_ngcontent-%COMP%] {\n max-width: 1024px !important;\n width: 100vw;\n max-height: 95vh;\n}\n.mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] {\n background-color: #F8F9FA;\n padding: 0 !important;\n overflow: hidden;\n}\n.mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] {\n position: relative;\n right: 32px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-alert[_ngcontent-%COMP%] {\n max-width: 100vw !important;\n width: 100vw;\n margin-left: 1rem;\n margin-right: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-alert[_ngcontent-%COMP%] {\n max-width: 100vw !important;\n width: 100vw;\n margin-left: 1rem;\n margin-right: 1rem;\n }\n}\n.mck-alert-backdrop[_ngcontent-%COMP%] {\n background: rgba(5, 28, 44, 0.85);\n}\n.mck-slide-toggle.mat-slide-toggle.mat-checked[_ngcontent-%COMP%]:not(.mat-disabled) .mat-slide-toggle-bar.mat-slide-toggle-bar[_ngcontent-%COMP%] {\n background-color: #2251FF;\n}\n.mck-slide-toggle.mat-slide-toggle.mat-checked[_ngcontent-%COMP%]:not(.mat-disabled) .mat-slide-toggle-thumb.mat-slide-toggle-thumb[_ngcontent-%COMP%] {\n background-color: white;\n}\n.mck-slide-toggle.mat-slide-toggle[_ngcontent-%COMP%] {\n height: auto;\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-content.mat-slide-toggle-content[_ngcontent-%COMP%] {\n flex: 1;\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n white-space: normal;\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-thumb.mat-slide-toggle-thumb[_ngcontent-%COMP%] {\n width: 14px;\n height: 14px;\n transform: translate(50%, 50%);\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-thumb-container.mat-slide-toggle-thumb-container[_ngcontent-%COMP%] {\n top: -4px;\n left: -4px;\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-bar.mat-slide-toggle-bar[_ngcontent-%COMP%] {\n height: 20px;\n background-color: #D0D0D0;\n border-radius: 20px;\n}\n.mck-skeleton[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n}\n.mck-skeleton-checkbox[_ngcontent-%COMP%] {\n float: left;\n}\n.mck-skeleton-checkbox[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 20px;\n height: 20px;\n margin-bottom: 0;\n}\n.mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 100vw;\n margin-bottom: 0;\n max-width: 215px;\n}\n.mck-skeleton-image[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 81px;\n height: 82px;\n margin-bottom: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-skeleton-image[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 219px;\n height: 119px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-skeleton-image[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 219px;\n height: 119px;\n }\n}\n.mck-skeleton-status[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 117px;\n height: 78px;\n margin-top: 10px;\n margin-bottom: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-skeleton-status[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 117px;\n height: 78px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-skeleton-status[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 117px;\n height: 78px;\n }\n}\n.mck-skeleton-line-1[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 23px;\n max-width: 176px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-1[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 219px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-1[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 219px;\n }\n}\n.mck-skeleton-line-2[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 165px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-2[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-2[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n.mck-skeleton-line-3[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 147px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-3[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-3[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n.mck-skeleton-line-30p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 30%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-30p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 30%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-30p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 30%;\n }\n}\n.mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-45p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 45%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-45p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 45%;\n margin-right: 45%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-45p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 45%;\n margin-right: 45%;\n }\n}\n.mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-50p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 50%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-50p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 50%;\n margin-right: 45%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-50p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 50%;\n margin-right: 45%;\n }\n}\n.mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-60p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 60%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-60p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 60%;\n margin-right: 35%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-60p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 60%;\n margin-right: 35%;\n }\n}\n.mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-70p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 70%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-70p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 70%;\n margin-right: 25%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-70p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 70%;\n margin-right: 25%;\n }\n}\n.mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-80p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 80%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-80p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 80%;\n margin-right: 15%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-80p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 80%;\n margin-right: 15%;\n }\n}\n.mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-90p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 90%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-90p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 90%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-90p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 90%;\n }\n}\n.mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-load-more[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n width: calc(100vw - (2 * 1rem));\n height: 40px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-load-more[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 320px;\n height: 50px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-load-more[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 320px;\n height: 50px;\n }\n}\n.mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n width: calc(100vw - (2 * 1rem));\n height: 40px;\n max-width: none;\n width: 100%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: none;\n width: 100%;\n height: 50px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: none;\n width: 100%;\n height: 50px;\n }\n}\n.mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 124px;\n margin-bottom: 4px;\n}\n.mck-heading-5[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 1.5rem;\n line-height: 1.333;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-heading-5[_ngcontent-%COMP%] {\n font-size: 1.75rem;\n line-height: 1.142;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-heading-5[_ngcontent-%COMP%] {\n font-size: 1.75rem;\n line-height: 1.142;\n }\n}\nngx-mat-select-search[_ngcontent-%COMP%] .mat-select-search-no-entries-found[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\nngx-mat-select-search[_ngcontent-%COMP%] .mat-select-search-input[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\nngx-mat-select-search[_ngcontent-%COMP%] button.mat-button.mat-select-search-clear[_ngcontent-%COMP%] {\n background-color: transparent;\n border: none;\n color: black;\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 16px;\n height: 18px;\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n height: 1.5rem;\n border: 4px solid rgba(0, 0, 0, 0);\n background-clip: padding-box;\n border-radius: 8px;\n background-color: #757575;\n -webkit-box-shadow: inset -1px -1px 0px rgba(0, 0, 0, 0.05), inset 1px 1px 0px rgba(0, 0, 0, 0.05);\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar-button {\n width: 0;\n height: 0;\n display: none;\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar-corner {\n background-color: transparent;\n}\nheader[_ngcontent-%COMP%] {\n z-index: 2;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mb-block[_ngcontent-%COMP%] {\n display: block;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mb-block[_ngcontent-%COMP%] {\n display: block;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mb-bottom[_ngcontent-%COMP%] {\n padding-bottom: 110px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mb-bottom[_ngcontent-%COMP%] {\n padding-bottom: 110px;\n }\n}\n.map-filters-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n top: 5px;\n}\n.map-filters-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] {\n height: 48px;\n background-color: white;\n}\n.map-filters-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n padding-top: 0.5rem !important;\n}\n.office-level-row[_ngcontent-%COMP%] .mat-select-placeholder[_ngcontent-%COMP%] {\n color: #333333;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .office-level-row[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .office-level-row[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 45px !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .office-level-row[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .office-level-row[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 45px !important;\n }\n}\n.office-level-row[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n display: block;\n top: 0 !important;\n width: 44px !important;\n right: -11px !important;\n background: transparent !important;\n border-width: 0 0 0 1px;\n border-color: #c6c6c6;\n border-style: solid;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .office-level-row[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 1px) !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .office-level-row[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 1px) !important;\n }\n}\n.office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n background: #F0F0F0 !important;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 2px) !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 2px) !important;\n }\n}\n.office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-chevron[_ngcontent-%COMP%] {\n opacity: 0.5;\n margin-left: 10px;\n}\n.office-level-row[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .office-level-row[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .map-controls[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .map-controls[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n display: flex !important;\n width: 100% !important;\n justify-content: space-between !important;\n}\n.booking-form-container[_ngcontent-%COMP%] {\n overflow-y: auto;\n max-height: calc(100vh - 345px);\n}\n.booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-label[_ngcontent-%COMP%], .booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] .mat-radio-label-content[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\" !important;\n color: #333333;\n}\n.booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::-moz-placeholder {\n font-family: \"McKinsey Sans\";\n color: #B3B3B3;\n}\n.booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%], .booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder {\n font-family: \"McKinsey Sans\";\n color: #B3B3B3;\n}\nform[_ngcontent-%COMP%] {\n width: 100%;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n form[_ngcontent-%COMP%] {\n padding: 0 10px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n form[_ngcontent-%COMP%] {\n padding: 0 10px;\n }\n}\n.mck-row-flow[_ngcontent-%COMP%] {\n display: flex;\n}\n.mck-row-flow[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 180px;\n flex-flow: column;\n}\n.mck-row-flow[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 20px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-row-flow[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-row-flow[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 0;\n }\n}\n.company-container[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 0px;\n}\n.row-with-spacing[_ngcontent-%COMP%] {\n margin-bottom: 1.5rem;\n align-items: flex-start;\n}\n.row-with-spacing[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n}\n.row-with-spacing[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n color: #e12e41;\n margin: 0;\n}\n.row-with-spacing[_ngcontent-%COMP%] p.checking[_ngcontent-%COMP%] {\n color: #000000;\n}\n.row-with-spacing[_ngcontent-%COMP%] p.available[_ngcontent-%COMP%] {\n color: #3aa537;\n}\n.row-with-spacing[_ngcontent-%COMP%] p.sb-status[_ngcontent-%COMP%] {\n padding: 0 10px 0 34px;\n position: relative;\n}\n.row-with-spacing[_ngcontent-%COMP%] p.sb-status[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n position: absolute;\n top: 4px;\n left: 4px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .flex-row[_ngcontent-%COMP%] {\n justify-content: space-between;\n align-items: flex-end;\n margin-right: 1em;\n }\n .flex-row[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 47%;\n min-width: 40%;\n margin-right: 0;\n box-sizing: border-box;\n flex: none;\n }\n .flex-row[_ngcontent-%COMP%] .company-field[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .flex-row[_ngcontent-%COMP%] {\n justify-content: space-between;\n align-items: flex-end;\n margin-right: 1em;\n }\n .flex-row[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 47%;\n min-width: 40%;\n margin-right: 0;\n box-sizing: border-box;\n flex: none;\n }\n .flex-row[_ngcontent-%COMP%] .company-field[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n.attendees-input[_ngcontent-%COMP%] {\n margin-right: 1em;\n display: block;\n}\nmat-hint[_ngcontent-%COMP%] {\n position: relative;\n}\nmat-hint[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: #1F40E6;\n font-size: 11px;\n cursor: pointer;\n text-decoration: underline;\n}\nmat-hint[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n width: 429px;\n background-color: black;\n color: white;\n position: absolute;\n padding: 10px;\n top: 26px;\n left: 0;\n z-index: 2;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n mat-hint[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n width: 100%;\n position: relative;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n mat-hint[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n width: 100%;\n position: relative;\n }\n}\nmat-hint[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] .triangle[_ngcontent-%COMP%] {\n position: absolute;\n top: -6px;\n left: 12px;\n width: 12px;\n height: 12px;\n background-color: black;\n transform: rotate(45deg);\n}\n.mck-form-input[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-top: 1.25em;\n margin-right: 1em;\n font-weight: 400;\n font-size: 16px;\n width: 100%;\n margin-top: 0;\n margin-bottom: 0.5em;\n}\n.mck-form-input[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: #d1484f;\n}\n.mck-form-input.error[_ngcontent-%COMP%] {\n color: #e53935;\n}\nmat-form-field[_ngcontent-%COMP%] {\n flex: 1;\n}\nmat-form-field.booked[_ngcontent-%COMP%] {\n color: #d1484f;\n}\nmat-form-field.available[_ngcontent-%COMP%] {\n color: #3aa537;\n}\nmat-form-field[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n font-size: 16px;\n padding-top: 8px;\n}\nmat-form-field[_ngcontent-%COMP%] mat-error[_ngcontent-%COMP%] {\n padding-top: 12px;\n font-size: 11px;\n font-weight: 400;\n position: relative;\n height: 40px;\n}\nmat-form-field[_ngcontent-%COMP%] mat-error[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n position: relative;\n left: 10px;\n top: 2px;\n}\nmat-form-field[_ngcontent-%COMP%] mat-error[_ngcontent-%COMP%] .error-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: -12px;\n width: 16px;\n height: 16px;\n background-image: url('error-close.svg');\n background-size: contain;\n}\nmat-form-field[_ngcontent-%COMP%] .icon[_ngcontent-%COMP%] {\n width: 8px;\n}\nmat-tab[_ngcontent-%COMP%] {\n display: none !important;\n}\n.field[_ngcontent-%COMP%] {\n display: flex;\n min-width: 14em;\n flex: 1;\n flex-wrap: wrap;\n}\ntextarea[_ngcontent-%COMP%] {\n min-height: 7em;\n}\n.fieldset[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n}\n.fieldset[_ngcontent-%COMP%] .field[_ngcontent-%COMP%] {\n margin: 0 0.25em;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .fieldset[_ngcontent-%COMP%] .field[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .fieldset[_ngcontent-%COMP%] .field[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n.fieldset[_ngcontent-%COMP%] .field[_ngcontent-%COMP%]:first-child {\n margin-left: 0;\n}\n.fieldset[_ngcontent-%COMP%] .field[_ngcontent-%COMP%]:last-child {\n margin-right: 0;\n}\n.error[_ngcontent-%COMP%] {\n color: #e53935;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .flex-container[_ngcontent-%COMP%] .full-width[_ngcontent-%COMP%] {\n min-width: calc(100% - 1em);\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .flex-container[_ngcontent-%COMP%] .full-width[_ngcontent-%COMP%] {\n min-width: calc(100% - 1em);\n }\n}\n.flex-container[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] div div {\n height: 47px;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWJvb2tpbmctZGV0YWlscy1mb3JtL3Jvb20tYm9va2luZy1kZXRhaWxzLWZvcm0uY29tcG9uZW50LnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9ub2RlX21vZHVsZXMvQGFuZ3VsYXIvbWF0ZXJpYWwvX3RoZW1pbmcuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9zdHlsZXMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2FwcHMvc3RhZmYvc3JjL2FwcC9ib29raW5nL3Jvb20tYm9va2luZy1kZXRhaWxzLWZvcm0vcm9vbS1ib29raW5nLWRldGFpbHMtZm9ybS5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUZ6UkE7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDeUJsQjtBRHVFQTs7c0JBQUE7QUdtekNBLGtDQUFBO0FBdWlEQSwyQ0FBQTtBQXdDQSxxQkFBQTtBQzk5RlE7RUFFSSxhQUFBO0FINkJaO0FHeEJRO0VBQ0ksV0FBQTtFQUNBLFlBQUE7QUgwQlo7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SFE7RUFDSSxZQUFBO0VBQ0EseUJKbmlDbUI7RUlvaUNuQixtQkFBQTtBSGdJWjtBRzVISTtFRjFzQkEseUJGelZjO0FDa3FDbEI7QUc1SFE7RUFDSSxXQUFBO0FIOEhaO0FHN0hZO0VGL3NCUix5QkZ6VmM7RUkwaUNGLFdBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7QUgrSGhCO0FHM0hRO0VGdnRCSix5QkZ6VmM7RUlrakNOLFlBQUE7RUFDQSxnQkFBQTtFQUNBLGdCQUFBO0FINkhaO0FHMUhRO0VGOXRCSix5QkZ6VmM7RUU2VmQsV0FBQTtFQUNBLFlBQUE7RUU0dEJRLGdCQUFBO0FINkhaO0FDM3JDWTtFRTJqQ0o7SUZ0dEJBLFlBQUE7SUFDQSxhQUFBO0VEMDFCTjtBQUNGO0FDanNDWTtFRTJqQ0o7SUZ0dEJBLFlBQUE7SUFDQSxhQUFBO0VEZzJCTjtBQUNGO0FHdElRO0VGcHVCSix5QkZ6VmM7RUV1V2QsWUFBQTtFQUNBLFlBQUE7RUV3dEJRLGdCQUFBO0VBQ0EsZ0JBQUE7QUh5SVo7QUM5c0NZO0VFaWtDSjtJRmx0QkEsWUFBQTtJQUNBLFlBQUE7RURtMkJOO0FBQ0Y7QUNwdENZO0VFaWtDSjtJRmx0QkEsWUFBQTtJQUNBLFlBQUE7RUR5MkJOO0FBQ0Y7QUdsSlE7RUYzdUJKLHlCRnpWYztFSXNrQ04sWUFBQTtFQUNBLGdCQUFBO0FIb0paO0FDL3RDWTtFRXdrQ0o7SUFNUSxnQkFBQTtFSHFKZDtBQUNGO0FDcHVDWTtFRXdrQ0o7SUFNUSxnQkFBQTtFSDBKZDtBQUNGO0FHdkpRO0VGcnZCSix5QkZ6VmM7RUlnbENOLFlBQUE7RUFDQSxnQkFBQTtBSHlKWjtBQzl1Q1k7RUVrbENKO0lBTVEsZ0JBQUE7RUgwSmQ7QUFDRjtBQ252Q1k7RUVrbENKO0lBTVEsZ0JBQUE7RUgrSmQ7QUFDRjtBRzVKUTtFRi92QkoseUJGelZjO0VJMGxDTixZQUFBO0VBQ0EsZ0JBQUE7QUg4Slo7QUM3dkNZO0VFNGxDSjtJQU1RLGdCQUFBO0VIK0pkO0FBQ0Y7QUNsd0NZO0VFNGxDSjtJQU1RLGdCQUFBO0VIb0tkO0FBQ0Y7QUdoS1k7RUYxd0JSLHlCRnpWYztFSXFtQ0YsWUFBQTtFQUNBLGNBQUE7QUhrS2hCO0FDNXdDWTtFRXVtQ0E7SUFLUSxjQUFBO0VIb0tsQjtBQUNGO0FDanhDWTtFRXVtQ0E7SUFLUSxjQUFBO0VIeUtsQjtBQUNGO0FHdEtnQjtFQUNJLFlBQUE7RUFDQSxrQkFBQTtBSHdLcEI7QUdsS1k7RUYzeEJSLHlCRnpWYztFSXNuQ0YsWUFBQTtFQUNBLGNBQUE7QUhvS2hCO0FDL3hDWTtFRXduQ0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUhzS2xCO0FBQ0Y7QUNyeUNZO0VFd25DQTtJQUtRLGNBQUE7SUFDQSxpQkFBQTtFSDRLbEI7QUFDRjtBR3pLZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUgyS3BCO0FHcktZO0VGN3lCUix5QkZ6VmM7RUl3b0NGLFlBQUE7RUFDQSxjQUFBO0FIdUtoQjtBQ3B6Q1k7RUUwb0NBO0lBS1EsY0FBQTtJQUNBLGlCQUFBO0VIeUtsQjtBQUNGO0FDMXpDWTtFRTBvQ0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUgrS2xCO0FBQ0Y7QUc1S2dCO0VBQ0ksWUFBQTtFQUNBLGtCQUFBO0FIOEtwQjtBRzFLZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUg0S3BCO0FHdEtZO0VGcjBCUix5QkZ6VmM7RUlncUNGLFlBQUE7RUFDQSxjQUFBO0FId0toQjtBQzcwQ1k7RUVrcUNBO0lBS1EsY0FBQTtJQUNBLGlCQUFBO0VIMEtsQjtBQUNGO0FDbjFDWTtFRWtxQ0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUhnTGxCO0FBQ0Y7QUc3S2dCO0VBQ0ksWUFBQTtFQUNBLGtCQUFBO0FIK0twQjtBRzNLZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUg2S3BCO0FHdktZO0VGNzFCUix5QkZ6VmM7RUl3ckNGLFlBQUE7RUFDQSxjQUFBO0FIeUtoQjtBQ3QyQ1k7RUUwckNBO0lBS1EsY0FBQTtJQUNBLGlCQUFBO0VIMktsQjtBQUNGO0FDNTJDWTtFRTByQ0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUhpTGxC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O0VBQ0ksY0w3RkE7QUMyd0RSO0FJMXFEQTtFQUNJLE9BQUE7QUo2cURKO0FJM3FESTtFQUNJLGNBQUE7QUo2cURSO0FJMXFESTtFQUNJLGNBQUE7QUo0cURSO0FJMXFESTtFQUNJLGVBQUE7RUFDQSxnQkFBQTtBSjRxRFI7QUkxcURJO0VBQ0ksaUJBQUE7RUFDQSxlQUFBO0VBQ0EsZ0JBQUE7RUFDQSxrQkFBQTtFQUNBLFlBQUE7QUo0cURSO0FJM3FEUTtFQUNJLDRCSG5FUztFR29FVCxrQkFBQTtFQUNBLGtCQUFBO0VBQ0EsVUFBQTtFQUNBLFFBQUE7QUo2cURaO0FJM3FEUTtFQUNJLGtCQUFBO0VBQ0EsV0FBQTtFSGdMUixXRjVPUztFRTZPVCxZRjdPUztFRThPVCx3Q0FBQTtFQUNBLHdCQUFBO0FEOC9DSjtBSTVxREk7RUFDSSxVQUFBO0FKOHFEUjtBSTFxREE7RUFDSSx3QkFBQTtBSjZxREo7QUkxcURBO0VBQ0ksYUFBQTtFQUNBLGVBQUE7RUFDQSxPQUFBO0VBQ0EsZUFBQTtBSjZxREo7QUkxcURBO0VBQ0ksZUFBQTtBSjZxREo7QUkxcURBO0VBQ0ksYUFBQTtFQUNBLGVBQUE7QUo2cURKO0FJM3FESTtFQUNJLGdCQUFBO0FKNnFEUjtBQ24yRFk7RUdxTFI7SUFJUSxTQUFBO0VKOHFEVjtBQUNGO0FDeDJEWTtFR3FMUjtJQUlRLFNBQUE7RUptckRWO0FBQ0Y7QUlqckRRO0VBQ0ksY0FBQTtBSm1yRFo7QUlockRRO0VBQ0ksZUFBQTtBSmtyRFo7QUk3cURBO0VBQ0ksY0w3S0k7QUM2MURSO0FDdjNEWTtFRzRNSjtJQUNJLDJCQUFBO0VKK3FEVjtBQUNGO0FDNzNEWTtFRzRNSjtJQUNJLDJCQUFBO0VKb3JEVjtBQUNGO0FJL3FEWTtFQUNJLFlBQUE7QUppckRoQiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWJvb2tpbmctZGV0YWlscy1mb3JtL3Jvb20tYm9va2luZy1kZXRhaWxzLWZvcm0uY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIkcHJpbWFyeTogIzFGNDBFNjtcbiRmb3JtLWxhYmVsOiAjMDUxQzJDO1xuJHNlY29uZGFyeS1sYWJlbDogIzc2NzY3NjtcbiRib3JkZXI6ICNCM0IzQjM7XG4kYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDogI0QwRDBEMDtcbiRjaGlwLWNvbG9yOiAjMzMzMzMzO1xuJHBsYWNlaG9sZGVyLWNvbG9yOiAjN0Y3RjdGO1xuJGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4kcGFnZS1iYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuJHNlbGVjdGVkLW9wdGlvbjogI0U2RTZFNjtcbiRjb2xvci1icmFuZC15ZWxsb3c6ICNmZmQwNDg7XG4kbGlnaHQteWVsbG93OiAjZmZmM2NlO1xuJGNvYWNobWFyay10ZXh0OiAjNmY0ZDAwO1xuJGVycm9yLWNvbG9yOiAjRTEyRTQwO1xuJG5vLWZpbHRlcnMtY29sb3I6ICNCQ0JDQkM7XG4kcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I6ICNGNEY0RjQ7XG4kcHJpbWFyeS1oaWdobGlnaHQ6ICMyMjUxRkY7XG4kc2Nyb2xsYmFyLWNvbG9yOiAjNzU3NTc1O1xuXG4kYXZhaWxhYmxlLWNvbG9yOiAjNUQ5RDUyO1xuJGF2YWlsYWJsZS1ieS1yZXF1ZXN0LWNvbG9yOiAjRjVCNTNGO1xuJGluLXVzZS1jb2xvcjogI0Q0NDgzRTtcbiRub3QtYm9va2FibGUtY29sb3I6ICNDQ0NDQ0M7XG5cbiRtb2RhbC1ib2R5LWhlYWRpbmc6ICM0RDRENEQ7XG4kYWxlcnQtb3ZlcmxheS1iZzogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2FjaG1hcmstYmc6ICNFQkVCRjY7XG4kY29hY2htYXJrLWRhcmstdGV4dDogIzFCMUIxOTtcbiRlcnJvci10ZXh0OiAjZmZmO1xuXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuXG4vLyA0cHhcbiRzcGFjaW5nLXNtYWxsZXN0OiAwLjI1cmVtO1xuXG4vLyA4cHhcbiRzcGFjaW5nLXh4c21hbGw6IDAuNXJlbTtcblxuLy8gMTJweFxuJHNwYWNpbmcteHNtYWxsOiAwLjc1cmVtO1xuXG4vLyAxNnB4XG4kc3BhY2luZy1zbWFsbDogMXJlbTtcblxuLy8gMjBweFxuJHNwYWNpbmctc21hbGwtbWVkaXVtOiAxLjI1cmVtO1xuXG4vLyAyNHB4XG4kc3BhY2luZy1tZWRpdW06IDEuNXJlbTtcblxuLy8gMjhweFxuJHNwYWNpbmctbWVkaXVtLWxhcmdlOiAxLjc1cmVtO1xuXG4vLyAzMnB4XG4kc3BhY2luZy1sYXJnZTogMnJlbTtcblxuLy8gNDhweFxuJHNwYWNpbmcteGxhcmdlOiAzcmVtO1xuXG4vLyA2NHB4XG4kc3BhY2luZy14eGxhcmdlOiA0cmVtO1xuXG4vLyA5NnB4XG4kc3BhY2luZy1sYXJnZXN0OiA2cmVtO1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGRldmljZS1tb2JpbGUtc2l6ZTogNDUwcHg7XG4kZGV2aWNlLXRhYmxldC1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFwdG9wLXNpemU6IDEwMjRweDtcblxuJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemU6IDgwMHB4O1xuJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemU6IDEwNDhweDtcbiRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplOiAxMjgwcHg7XG5cblxuOmV4cG9ydCB7XG4gICAgcHJpbWFyeTogJHByaW1hcnk7XG4gICAgc2Vjb25kYXJ5TGFiZWw6ICRzZWNvbmRhcnktbGFiZWw7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4kaWNvbi1zbWFsbDogMTZweDtcbiRpY29uLW1lZGl1bTogMjRweDtcbiRpY29uLWxhcmdlOiAzMnB4O1xuJGljb24teGxhcmdlOiA0OHB4O1xuIiwiLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKiBUaGVtZSBmb3IgdGhlIHJpcHBsZSBlbGVtZW50cy4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF0ZXJpYWwvbm8tcHJlZml4ZXMgKi9cbi8qIHN0eWxlbGludC1lbmFibGUgKi9cbi5tY2staW5oZXJpdC1mb250IHtcbiAgZm9udDogaW5oZXJpdDtcbn1cbi5tY2stY29udGVudC1leHBhbmQsIC5tY2stY29udGVudC1wYWdlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbn1cbi5tY2stY29udGVudC1leHBhbmQtd2lkdGgge1xuICB3aWR0aDogMTAwJTtcbn1cbi5tY2stY29udGVudC1leHBhbmQtaGVpZ2h0IHtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLm1jay1jb250ZW50LXdpdGgtZm9vdGVyLWhlaWdodCB7XG4gIGhlaWdodDogY2FsYygxMDB2aCAtIDU4cHgpO1xufVxuLm1jay1jb250ZW50LWZ1bGwtaGVpZ2h0LCAubWNrLWNvbnRlbnQtcGFnZS1jb250YWluZXIge1xuICBoZWlnaHQ6IDEwMHZoO1xufVxuLm1jay1jb250ZW50LXBhZ2Uge1xuICBiYWNrZ3JvdW5kOiAjRjhGOUZBO1xufVxuLm1jay1jb250ZW50LWJvZHkge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWNvbnRlbnQtYm9keSB7XG4gICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWNvbnRlbnQtYm9keSB7XG4gICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIH1cbn1cbi5tY2stY29udGVudC1ncm91cCB7XG4gIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcbiAgd2lkdGg6IDEwMCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWNvbnRlbnQtZ3JvdXAge1xuICAgIG1heC13aWR0aDogNzU5cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWNvbnRlbnQtZ3JvdXAge1xuICAgIG1heC13aWR0aDogNzU5cHg7XG4gIH1cbn1cbi5tY2stc2hhZG93IHtcbiAgYm94LXNoYWRvdzogMHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtcbn1cbi5tY2stZmxleC0xIHtcbiAgZmxleDogMTtcbn1cbi5tY2stcm93LCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4LCAubWNrLXJvdy1mbG93IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbn1cbi5tY2stcm93Lm1jay1jZW50ZXItanVzdGlmeSwgLm1jay1jZW50ZXItanVzdGlmeS5tY2stcm93LWZsb3csIC5tY2stcm93Lm1jay1jZW50ZXIsIC5tY2stcm93Lm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1yb3cubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93Lm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXJvdy5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXJvdy5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1yb3cubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1yb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1jZW50ZXItc3VmZml4IC5tYXQtZm9ybS1maWVsZC1pbmZpeCwgLm1jay1jZW50ZXIubWNrLXJvdy1mbG93LCAubWNrLXJvdy1mbG93Lm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuLm1jay1yb3cubWNrLWNlbnRlci1hbGlnbiwgLm1jay1jZW50ZXItYWxpZ24ubWNrLXJvdy1mbG93LCAubWNrLXJvdy5tY2stY2VudGVyLCAubWNrLXJvdy5tY2stYnV0dG9uLm1hdC1idXR0b24sIC5tY2stcm93Lm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1yb3cubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1yb3cubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stcm93Lm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXJvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stY2VudGVyLm1jay1yb3ctZmxvdywgLm1jay1yb3ctZmxvdy5tY2stYnV0dG9uLm1hdC1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24ge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLm1jay1yb3cubWNrLXN0cmV0Y2gsIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWNrLXN0cmV0Y2gubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stc3RyZXRjaC5tY2stcm93LWZsb3cge1xuICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbn1cbi5tY2stcm93LWZsb3cge1xuICBmbGV4LXdyYXA6IHdyYXA7XG59XG4ubWNrLXJvdy5tY2stc2Nyb2xsLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1jay1zY3JvbGwubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stc2Nyb2xsLm1jay1yb3ctZmxvdyB7XG4gIG92ZXJmbG93LXg6IHNjcm9sbDtcbn1cbi5tY2stY29sdW1uLCAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cbi5tY2stY29sdW1uLm1jay1jZW50ZXIsIC5tY2stY29sdW1uLm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1jb2x1bW4ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stY29sdW1uLm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLWNvbHVtbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLWNvbHVtbi5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1jb2x1bW4ubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stY29sdW1uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stY29sdW1uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stY29sdW1uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1jb2x1bW4ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1jZW50ZXIubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWNrLWNlbnRlci5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1jZW50ZXIubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stY2VudGVyLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stY2VudGVyLm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1jZW50ZXIubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stY2VudGVyLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stY2VudGVyLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stY2VudGVyLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1jZW50ZXIubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1jay1jb2x1bW4ubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1jZW50ZXItc3VmZml4IC5tYXQtZm9ybS1maWVsZC1pbmZpeC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1jZW50ZXItc3VmZml4IC5tYXQtZm9ybS1maWVsZC1pbmZpeC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4ubWNrLWNvbHVtbi5tY2stc3BhY2UtYmV0d2VlbiwgLm1jay1zcGFjZS1iZXR3ZWVuLm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1zcGFjZS1iZXR3ZWVuLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXNwYWNlLWJldHdlZW4ubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stc3BhY2UtYmV0d2Vlbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXNwYWNlLWJldHdlZW4ubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stc3BhY2UtYmV0d2Vlbi5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1jay1zcGFjZS1iZXR3ZWVuLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stc3BhY2UtYmV0d2Vlbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXNwYWNlLWJldHdlZW4ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXNwYWNlLWJldHdlZW4ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcbn1cbi5tY2stY29sdW1uLm1jay1zdHJldGNoLCAubWNrLXN0cmV0Y2gubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWNrLXN0cmV0Y2gubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stc3RyZXRjaC5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1zdHJldGNoLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stc3RyZXRjaC5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1zdHJldGNoLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLXN0cmV0Y2gubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1zdHJldGNoLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stc3RyZXRjaC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stc3RyZXRjaC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG59XG4ubWNrLWNvbHVtbi5tY2stc2Nyb2xsLCAubWNrLXNjcm9sbC5tY2stYnV0dG9uLm1hdC1idXR0b24sIC5tY2stc2Nyb2xsLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXNjcm9sbC5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1zY3JvbGwubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1zY3JvbGwubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stc2Nyb2xsLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLXNjcm9sbC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXNjcm9sbC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXNjcm9sbC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stc2Nyb2xsLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24ge1xuICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gIG92ZXJmbG93LXk6IG92ZXJsYXk7XG59XG4ubWNrLWNvbHVtbi5tY2stZmxleC1lbmQsIC5tY2stZmxleC1lbmQubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWNrLWZsZXgtZW5kLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLWZsZXgtZW5kLm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLWZsZXgtZW5kLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stZmxleC1lbmQubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stZmxleC1lbmQubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stZmxleC1lbmQubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1mbGV4LWVuZC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLWZsZXgtZW5kLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1mbGV4LWVuZC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbn1cbi5tY2stb3ZlcmZsb3cge1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5tY2stYm9yZGVyZWQsIC5tY2staW5wdXQge1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBib3JkZXI6IDFweCBzb2xpZCAjQjNCM0IzO1xufVxuLm1jay1ib3JkZXJlZDpob3ZlciwgLm1jay1pbnB1dDpob3ZlciB7XG4gIGJvcmRlci1jb2xvcjogIzQ2NDY0Njtcbn1cbi5tY2stYm9yZGVyZWQ6Zm9jdXMsIC5tY2staW5wdXQ6Zm9jdXMge1xuICBib3JkZXItY29sb3I6ICMxRjQwRTY7XG59XG4ubWNrLWJvcmRlcmVkW2Rpc2FibGVkPXRydWVdLCAubWNrLWlucHV0W2Rpc2FibGVkPXRydWVdIHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIGJvcmRlci1jb2xvcjogI2YwZjBmMDtcbiAgY29sb3I6ICNjY2M7XG59XG4ubWNrLWRhdGUtZGlzcGxheSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogNDNweDtcbiAgcGFkZGluZzogMXJlbSAwLjVyZW07XG4gIHRyYW5zaXRpb246IGJvcmRlciAyMDBtcywgYm94LXNoYWRvdyAyMDBtcztcbn1cbi5tY2stZm9ybS1pbnB1dCAubWF0LWZvcm0tZmllbGQtd3JhcHBlciB7XG4gIHBhZGRpbmctYm90dG9tOiAwLjVyZW07XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQge1xuICBtaW4td2lkdGg6IGF1dG8gIWltcG9ydGFudDtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZy10b3A6IDAuN3JlbSAhaW1wb3J0YW50O1xuICBwYWRkaW5nLWJvdHRvbTogMC41cmVtICFpbXBvcnRhbnQ7XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICBtaW4taGVpZ2h0OiAyLjdyZW07XG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjcpO1xufVxuLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1zZWxlY3QtZHJvcGRvd24tYnV0dG9uIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gIG1hcmdpbi10b3A6IDJweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stc2VsZWN0LWRyb3Bkb3duLWJ1dHRvbiAubWF0LWZvcm0tZmllbGQtZmxleCB7XG4gICAgcGFkZGluZy1sZWZ0OiAwLjVyZW07XG4gICAgcGFkZGluZy1yaWdodDogMC41cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1zZWxlY3QtZHJvcGRvd24tYnV0dG9uIC5tYXQtZm9ybS1maWVsZC1mbGV4IHtcbiAgICBwYWRkaW5nLWxlZnQ6IDAuNXJlbTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stc2VsZWN0LWRyb3Bkb3duLWJ1dHRvbiAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1zZWxlY3QtZHJvcGRvd24tYnV0dG9uIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgaGVpZ2h0OiAycmVtO1xuICAgIG1pbi1oZWlnaHQ6IDJyZW07XG4gIH1cbiAgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1zZWxlY3QtZHJvcGRvd24tYnV0dG9uIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1zZWxlY3QtZHJvcGRvd24tYnV0dG9uIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24gLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICBoZWlnaHQ6IDJyZW07XG4gICAgbWluLWhlaWdodDogMnJlbTtcbiAgfVxuICAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24gLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tYXQtcyB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtc2VsZWN0IHtcbiAgbWFyZ2luLXRvcDogMC4ycmVtO1xufVxuLm1jay1mb3JtLWlucHV0IG1hdC1zZWxlY3QgLm1hdC1zZWxlY3QtYXJyb3cge1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LXNlbGVjdCAubWF0LXNlbGVjdC12YWx1ZSA+IC5tYXQtc2VsZWN0LXZhbHVlLXRleHQgPiBzcGFuIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG4ubWNrLWZvcm0taW5wdXQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LCAubWNrLWZvcm0taW5wdXQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsIC5tY2stZm9ybS1pbnB1dCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gIGJvcmRlci1jb2xvcjogI0IzQjNCMztcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4ubWNrLWZvcm0taW5wdXQgLmF2YWlsYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Lm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsIC5tY2stZm9ybS1pbnB1dCAuYXZhaWxhYmxlIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLCAubWNrLWZvcm0taW5wdXQgLmF2YWlsYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gIGJvcmRlci1jb2xvcjogIzNhYTUzNztcbn1cbi5tY2stZm9ybS1pbnB1dCAuYm9va2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCwgLm1jay1mb3JtLWlucHV0IC5ib29rZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsIC5tY2stZm9ybS1pbnB1dCAuYm9va2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kIHtcbiAgYm9yZGVyLWNvbG9yOiAjZTEyZTQxO1xufVxuLm1jay1mb3JtLWlucHV0IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCwgLm1jay1mb3JtLWlucHV0IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLCAubWNrLWZvcm0taW5wdXQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICBib3JkZXItY29sb3I6ICMxRjQwRTY7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuLm1jay1mb3JtLWlucHV0ID4gbWF0LWZvcm0tZmllbGQubWNrLWVycm9yIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgcGFkZGluZy1ib3R0b206IDA7XG59XG4ubWNrLWZvcm0taW5wdXQgPiBtYXQtZm9ybS1maWVsZC5tY2stZXJyb3IgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LCAubWNrLWZvcm0taW5wdXQgPiBtYXQtZm9ybS1maWVsZC5tY2stZXJyb3IgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsIC5tY2stZm9ybS1pbnB1dCA+IG1hdC1mb3JtLWZpZWxkLm1jay1lcnJvciAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gIGJvcmRlci1jb2xvcjogI0UxMkU0MDtcbn1cbi5tY2stZm9ybS1pbnB1dCBtY2stY2xvc2UtaWNvbi5tYXQtY2hpcC1yZW1vdmUubWF0LWNoaXAtcmVtb3ZlIHtcbiAgb3BhY2l0eTogMTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWxhYmVsIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LXJhZGlvLWJ1dHRvbiB7XG4gIG1hcmdpbi1yaWdodDogMXJlbTtcbn1cbi5tY2stZm9ybS1pbnB1dCAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnQge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG4ubWNrLWZvcm0taW5wdXQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGUge1xuICBib3JkZXItY29sb3I6ICMxRjQwRTYgIWltcG9ydGFudDtcbiAgYm9yZGVyLXdpZHRoOiAxcHggIWltcG9ydGFudDtcbn1cbi5tY2stZm9ybS1pbnB1dCAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxRjQwRTYgIWltcG9ydGFudDtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtcmFkaW8tZ3JvdXAge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBmbGV4LXdyYXA6IHdyYXA7XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LXJhZGlvLWdyb3VwID4gbWF0LXJhZGlvLWJ1dHRvbjpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLXJpZ2h0OiAwO1xufVxuLm1jay1mb3JtLWlucHV0LWNvbnRhaW5lciA+IC5tY2stZm9ybS1pbnB1dCwgLm1jay1mb3JtLWlucHV0LWNvbnRhaW5lciA+IG1jay1zZWxlY3Qge1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA4MDBweCkge1xuICAubWNrLWZvcm0taW5wdXQtY29udGFpbmVyID4gLm1jay1mb3JtLWlucHV0LCAubWNrLWZvcm0taW5wdXQtY29udGFpbmVyID4gbWNrLXNlbGVjdCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMS43NXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDEwNDhweCkge1xuICAubWNrLWZvcm0taW5wdXQtY29udGFpbmVyID4gLm1jay1mb3JtLWlucHV0LCAubWNrLWZvcm0taW5wdXQtY29udGFpbmVyID4gbWNrLXNlbGVjdCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMS43NXJlbTtcbiAgfVxufVxuLm1jay1mb3JtLWlucHV0LWNvbnRhaW5lciAubWNrLXJhZGlvLXNlbGVjdCB7XG4gIG1hcmdpbi1ib3R0b206IDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA4MDBweCkge1xuICAubWNrLWZvcm0taW5wdXQtY29udGFpbmVyIC5tY2stcmFkaW8tc2VsZWN0IHtcbiAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAxMDQ4cHgpIHtcbiAgLm1jay1mb3JtLWlucHV0LWNvbnRhaW5lciAubWNrLXJhZGlvLXNlbGVjdCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMS41cmVtO1xuICB9XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LXN0YW5kYXJkLWNoaXAge1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIG1pbi1oZWlnaHQ6IDEuNXJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMzMzMzMztcbiAgcGFkZGluZy10b3A6IDAuMjVyZW07XG4gIHBhZGRpbmctYm90dG9tOiAwLjI1cmVtO1xuICBwYWRkaW5nLWxlZnQ6IDAuNXJlbTtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1mb3JtLWlucHV0IG1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwIHtcbiAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stZm9ybS1pbnB1dCBtYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcCB7XG4gICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG4gIH1cbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtY2hlY2tib3gubWF0LWNoZWNrYm94Lm1hdC1jaGVja2JveCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgY29sb3I6IGJsYWNrO1xufVxuLm1jay1mb3JtLWlucHV0IG1hdC1jaGVja2JveCBkaXYubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMUY0MEU2O1xufVxuLm1jay1mb3JtLWlucHV0IG1hdC1jaGVja2JveCBkaXYubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWNrLWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1kaXNhYmxlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNEMEQwRDA7XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWNoZWNrYm94Lm1jay1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtZGlzYWJsZWQge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIGNvbG9yOiBibGFjaztcbiAgY29sb3I6ICNCM0IzQjM7XG59XG4ubWNrLWJvcmRlcmxlc3Mge1xuICBib3JkZXI6IG5vbmU7XG59XG4ubWNrLWJvcmRlcmxlc3M6aG92ZXIsIC5tY2stYm9yZGVybGVzczpmb2N1cywgLm1jay1ib3JkZXJsZXNzOmRpc2FibGVkIHtcbiAgYm9yZGVyOiBub25lO1xufVxuLm1jay1zZWxlY3QtcGFuZWwge1xuICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7XG4gIGJvcmRlci1yYWRpdXM6IHVuc2V0ICFpbXBvcnRhbnQ7XG4gIG1hcmdpbi10b3A6IDM1cHggIWltcG9ydGFudDtcbiAgbWFyZ2luLWxlZnQ6IDVweDtcbn1cbi5tY2stc2VsZWN0LXBhbmVsIG1hdC1vcHRpb24ge1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIHBhZGRpbmctcmlnaHQ6IDA7XG59XG4ubWNrLXNlbGVjdC1wYW5lbCBtYXQtb3B0aW9uLm1hdC1vcHRpb24tdGV4dCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbi5tY2stc2VsZWN0LXBhbmVsLm1jay1tYXJnaW4tdG9wIHtcbiAgbWFyZ2luLXRvcDogMS41cmVtICFpbXBvcnRhbnQ7XG59XG4ubWNrLWNoZWNrYm94LXBhbmVsLm1hdC1hdXRvY29tcGxldGUtcGFuZWwubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCB7XG4gIHRvcDogLTEwcHg7XG4gIG1heC1oZWlnaHQ6IDI3OHB4O1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uLm1jay10cnVuY2F0ZWQgLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgLXdlYmtpdC1saW5lLWNsYW1wOiAyO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xuICBsaW5lLWhlaWdodDogMjRweDtcbiAgaGVpZ2h0OiB1bnNldDtcbiAgbWluLWhlaWdodDogMzZweDtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiAubWF0LWNoZWNrYm94LWxhYmVsLm1hdC1jaGVja2JveC1sYWJlbCB7XG4gIGZsZXg6IDE7XG59XG4ubWNrLWNoZWNrYm94LXBhbmVsIG1hdC1vcHRpb24gLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIGNvbG9yOiBibGFjaztcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbi5tY2stY2hlY2tib3gtZ3JvdXAtaGVhZGVyIC5tYXQtY2hlY2tib3gtbGFiZWwubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbi5tY2stY2hlY2tib3gtZ3JvdXAtY2hpbGQge1xuICBtYXJnaW4tbGVmdDogMnJlbTtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiBtYXQtY2hlY2tib3ggbGFiZWwubWF0LWNoZWNrYm94LWxheW91dCB7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nLWxlZnQ6IDE2cHg7XG4gIHBhZGRpbmctcmlnaHQ6IDE2cHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLWNoZWNrYm94LXBhbmVsIG1hdC1vcHRpb24gbWF0LWNoZWNrYm94IGxhYmVsLm1hdC1jaGVja2JveC1sYXlvdXQge1xuICAgIHBhZGRpbmctbGVmdDogMnB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDJweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiBtYXQtY2hlY2tib3ggbGFiZWwubWF0LWNoZWNrYm94LWxheW91dCB7XG4gICAgcGFkZGluZy1sZWZ0OiAycHg7XG4gICAgcGFkZGluZy1yaWdodDogMnB4O1xuICB9XG59XG4ubWNrLWNoZWNrYm94LXBhbmVsIG1hdC1vcHRpb24gbWF0LWNoZWNrYm94IGRpdi5tYXQtY2hlY2tib3gtZnJhbWUubWF0LWNoZWNrYm94LWZyYW1lIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI0IzQjNCMztcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiBtYXQtY2hlY2tib3gubWF0LWNoZWNrYm94LWNoZWNrZWQgZGl2Lm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFGNDBFNjtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiBtYXQtY2hlY2tib3gubWNrLWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1kaXNhYmxlZCBkaXYubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDBEMEQwO1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIG1hdC1jaGVja2JveC5tY2stY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWRpc2FibGVkIC5tYXQtY2hlY2tib3gtbGFiZWwubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogMzAwO1xuICBjb2xvcjogYmxhY2s7XG4gIGNvbG9yOiAjQjNCM0IzO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIG1hdC1jaGVja2JveCAubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lciB7XG4gIHdpZHRoOiAxLjI1cmVtO1xuICBoZWlnaHQ6IDEuMjVyZW07XG59XG4ubWNrLXNlbGVjdC1vcHRpb24tc2VsZWN0ZWQge1xuICBmb250LXdlaWdodDogNTAwO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGNvbG9yOiBibGFjaztcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbn1cbi5tY2stc2VsZWN0LW9wdGlvbi1zZWxlY3RlZCAubWNrLXNwYWNlci1jb250ZW50IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFGNDBFNjtcbiAgbWFyZ2luLXJpZ2h0OiAwLjc1cmVtO1xufVxuLm1jay1zZWxlY3Qtb3B0aW9uLXVuc2VsZWN0ZWQge1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG4ubWNrLXNlbGVjdC1vcHRpb24tdW5zZWxlY3RlZC5tY2staWdub3JlLWRpc2FibGVkIHtcbiAgY29sb3I6IGJsYWNrO1xufVxuLm1jay1zZWxlY3Qtb3B0aW9uLXVuc2VsZWN0ZWQgLm1jay1zcGFjZXItY29udGVudCB7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgbWFyZ2luLXJpZ2h0OiAwLjc1cmVtO1xufVxuLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gIGhlaWdodDogNDBweDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgYm9yZGVyOiBub25lO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gIH1cbn1cbi5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgcGFkZGluZy1sZWZ0OiAwLjI1cmVtO1xuICBwYWRkaW5nLXJpZ2h0OiAwLjI1cmVtO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIH1cbn1cbi5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydCwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgaGVpZ2h0OiAzMnB4O1xuICBtaW4td2lkdGg6IDgzcHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0LCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIG1pbi13aWR0aDogMTU1cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0LCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIG1pbi13aWR0aDogMTU1cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodCwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodCwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2stcHJpbWFyeS1idXR0b24ge1xuICAgIGhlaWdodDogNDBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodCwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodCwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2stcHJpbWFyeS1idXR0b24ge1xuICAgIGhlaWdodDogNDBweDtcbiAgfVxufVxuLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZS5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZS5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZS5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgaGVpZ2h0OiAzMnB4O1xuICB3aWR0aDogMzJweDtcbiAgbWluLXdpZHRoOiAzMnB4O1xuICBwYWRkaW5nOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZS5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZS5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZS5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgICB3aWR0aDogNDBweDtcbiAgICBoZWlnaHQ6IDQwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZSwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2stcHJpbWFyeS1idXR0b24ge1xuICAgIHdpZHRoOiA0MHB4O1xuICAgIGhlaWdodDogNDBweDtcbiAgfVxufVxuLm1jay1wcmltYXJ5LWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMUY0MEU2O1xufVxuLm1jay1wcmltYXJ5LWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b25bZGlzYWJsZWRdLCAubWNrLXByaW1hcnktYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5kaXNhYmxlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNEMEQwRDA7XG4gIGNvbG9yOiAjNzU3NTc1O1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuLm1jay1wcmltYXJ5LWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b25bZGlzYWJsZWRdID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tY2stcHJpbWFyeS1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLmRpc2FibGVkID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICBjb2xvcjogIzc1NzU3NTtcbn1cbi5tY2stcHJpbWFyeS1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICBjb2xvcjogd2hpdGU7XG59XG4ubWNrLXNlY29uZGFyeS1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMyMjUxRkY7XG4gIGNvbG9yOiAjMjI1MUZGO1xufVxuLm1jay1zZWNvbmRhcnktYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b25bZGlzYWJsZWRdLCAubWNrLXNlY29uZGFyeS1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5kaXNhYmxlZCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuLm1jay1zZWNvbmRhcnktYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xufVxuLm1jay1zZWNvbmRhcnktYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgY29sb3I6ICMzMzMzMzM7XG59XG4ubWNrLXdhcm5pbmctYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmQwNDg7XG59XG4ubWNrLXdhcm5pbmctYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgY29sb3I6IGJsYWNrO1xufVxuLm1jay1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uIHtcbiAgYm9yZGVyOiAycHggc29saWQgI0IzQjNCMztcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBhZGRpbmctbGVmdDogMS43NXJlbTtcbiAgcGFkZGluZy1yaWdodDogMS43NXJlbTtcbn1cbi5tY2stc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQge1xuICBoZWlnaHQ6IDMycHg7XG4gIG1pbi13aWR0aDogODNweDtcbiAgcGFkZGluZy1sZWZ0OiAwLjI1cmVtO1xuICBwYWRkaW5nLXJpZ2h0OiAwLjI1cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydCB7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIG1pbi13aWR0aDogMTU1cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0IHtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgbWluLXdpZHRoOiAxNTVweDtcbiAgfVxufVxuLm1jay1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5IHtcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1jb2xvcjogIzFGNDBFNjtcbiAgY29sb3I6ICMxRjQwRTY7XG59XG4ubWNrLXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXRoaW4tYm9yZGVyLWxpZ2h0IHtcbiAgYm9yZGVyLWNvbG9yOiAjRDBEMEQwO1xuICBib3JkZXItd2lkdGg6IDFweDtcbn1cbi5tY2stc3Ryb2tlZC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgY29sb3I6ICMxRjQwRTY7XG59XG4ubWNrLXRvZ2dsZS1idXR0b24ge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIGJvcmRlcjogMXB4IHNvbGlkICNCM0IzQjM7XG4gIGJvcmRlci1jb2xvcjogI0QwRDBEMDtcbiAgbWluLXdpZHRoOiA1OXB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stdG9nZ2xlLWJ1dHRvbiB7XG4gICAgbWluLXdpZHRoOiAxMzJweDtcbiAgICBwYWRkaW5nLXRvcDogMC41cmVtO1xuICAgIHBhZGRpbmctYm90dG9tOiAwLjVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXRvZ2dsZS1idXR0b24ge1xuICAgIG1pbi13aWR0aDogMTMycHg7XG4gICAgcGFkZGluZy10b3A6IDAuNXJlbTtcbiAgICBwYWRkaW5nLWJvdHRvbTogMC41cmVtO1xuICB9XG59XG4ubWNrLXRvZ2dsZS1idXR0b24tc2VsZWN0ZWQge1xuICBjb2xvcjogIzFGNDBFNjtcbn1cbi5tY2stZGF0ZS1waWNrZXIge1xuICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stZGF0ZS1waWNrZXIge1xuICAgIG1heC13aWR0aDogMjNyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWRhdGUtcGlja2VyIHtcbiAgICBtYXgtd2lkdGg6IDIzcmVtO1xuICB9XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmhlYWRlci5oZWFkZXIge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGNvbG9yOiAjMDUxQzJDO1xuICBtYXJnaW4tdG9wOiAxLjI1cmVtO1xufVxuLm1jay1kYXRlLXBpY2tlciA+IC5oZWFkZXIuaGVhZGVyID4gLmFycm93LmFycm93IHtcbiAgd2lkdGg6IDIuMzc1cmVtO1xuICBoZWlnaHQ6IDJyZW07XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmhlYWRlci5oZWFkZXIgPiAuYXJyb3cuYXJyb3cgPiAuaWNvbi5pY29uIHtcbiAgd2lkdGg6IDFyZW07XG4gIGhlaWdodDogMXJlbTtcbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAuaGVhZGVyLmhlYWRlciA+IC5hcnJvdy5hcnJvdyA+IC5uZXh0Lm5leHQge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvYXJyb3ctZm9yd2FyZC5zdmdcIik7XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmhlYWRlci5oZWFkZXIgPiAuYXJyb3cuYXJyb3cgPiAucHJldmlvdXMucHJldmlvdXMge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvYXJyb3ctYmFja3dhcmQuc3ZnXCIpO1xufVxuLm1jay1kYXRlLXBpY2tlciA+IC5tb250aCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAud2VlayB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6ICM3Njc2NzY7XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmJvZHkge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmJvZHkgPiBkaXYgPiBkaXYuZGF0ZSA+IC5kb3Qge1xuICBkaXNwbGF5OiBub25lO1xufVxuLm1jay1kYXRlLXBpY2tlciA+IC5ib2R5ID4gZGl2ID4gZGl2LmRhdGUuZGlzYWJsZWQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgY29sb3I6ICM3Njc2NzY7XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmJvZHkgPiBkaXYgPiBkaXYuZGF0ZS5hY3RpdmUge1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMUY0MEU2O1xufVxuLm1jay1kYXRlLXBpY2tlciA+IC5ib2R5ID4gZGl2ID4gZGl2LmRhdGUubm9uLW1vbnRoIHtcbiAgY29sb3I6ICM3Njc2NzY7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLXNwYWNlci1jb250ZW50LWNvbGxhcHNlLXRhYmxldCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stc3BhY2VyLWNvbnRlbnQtY29sbGFwc2UtdGFibGV0IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stc3BhY2VyLWNvbnRlbnQtY29sbGFwc2UtdGFibGV0IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDQ4cHgpIHtcbiAgLm1jay1zcGFjZXItY29udGVudC1jb2xsYXBzZS10YWJsZXQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc3BhY2VyLWNvbnRlbnQtZXhwYW5kLW1vYmlsZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc3BhY2VyLWNvbnRlbnQtZXhwYW5kLW1vYmlsZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuLm1jay1zcGFjZXItY29udGVudC1kaXZpZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbCB7XG4gIGJveC1zaGFkb3c6IDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNFNkU2RTY7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRTZFNkU2O1xufVxuLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1jay1leHBhbmRlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4gIGJvcmRlci1ib3R0b206IG5vbmU7XG59XG4ubWNrLWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWNrLWV4cGFuZGVkIC5tY2stY29sbGFwc2UtaWNvbiB7XG4gIHdpZHRoOiAyNHB4O1xuICBoZWlnaHQ6IDI0cHg7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9jaGV2cm9uLWNsb3NlLnN2Z1wiKTtcbiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1jay1leHBhbmRlZCAubWNrLWNvbGxhcHNlLWljb24ge1xuICAgIHdpZHRoOiA0OHB4O1xuICAgIGhlaWdodDogNDhweDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvY2hldnJvbi1jbG9zZS1sYXJnZS5zdmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1jay1leHBhbmRlZCAubWNrLWNvbGxhcHNlLWljb24ge1xuICAgIHdpZHRoOiA0OHB4O1xuICAgIGhlaWdodDogNDhweDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvY2hldnJvbi1jbG9zZS1sYXJnZS5zdmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICB9XG59XG4ubWNrLWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtYm9keSB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgcGFkZGluZy1yaWdodDogMDtcbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1ib2R5ID4gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIHtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xuICBwYWRkaW5nLWxlZnQ6IDFyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDFyZW07XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGNvbG9yOiBibGFjaztcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgcGFkZGluZy1ib3R0b206IDAuNXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1ib2R5ID4gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIHtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1ib2R5ID4gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIHtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWJvZHkgPiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWJvZHkgPiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xuICB9XG59XG4ubWNrLWV4cGFuc2lvbi1wYW5lbCBtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciB7XG4gIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsIG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyID4gc3Bhbi5tYXQtY29udGVudCB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4ubWNrLWV4cGFuc2lvbi1wYW5lbCBtYXQtcGFuZWwtdGl0bGUge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGNvbG9yOiBibGFjaztcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsIC5tY2stY29sbGFwc2UtaWNvbiB7XG4gIHdpZHRoOiAyNHB4O1xuICBoZWlnaHQ6IDI0cHg7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9jaGV2cm9uLW9wZW4uc3ZnXCIpO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC41cyBlYXNlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwgLm1jay1jb2xsYXBzZS1pY29uIHtcbiAgICB3aWR0aDogNDhweDtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwibGlicy91aS9zcmMvbGliL2ljb25zL2NoZXZyb24tb3Blbi1sYXJnZS5zdmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwgLm1jay1jb2xsYXBzZS1pY29uIHtcbiAgICB3aWR0aDogNDhweDtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwibGlicy91aS9zcmMvbGliL2ljb25zL2NoZXZyb24tb3Blbi1sYXJnZS5zdmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICB9XG59XG4ubWNrLWV4cGFuc2lvbi1wYW5lbCAubWNrLWNvbGxhcHNlLWljb24uZXhwYW5kZWQge1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xufVxuLm1jay1pY29uLWZpbGwtb3BlbiB7XG4gIGZpbGw6ICMxRjQwRTY7XG59XG4ubWNrLWljb24tZmlsbC1jbG9zZSB7XG4gIGZpbGw6ICM3Njc2NzY7XG59XG4ubWNrLWljb24tZmlsbC1ibGFjayB7XG4gIGZpbGw6IGJsYWNrO1xuICBzdHJva2U6IGJsYWNrO1xufVxuLm1jay1pY29uLWZpbGwtd2hpdGUge1xuICBmaWxsOiB3aGl0ZTtcbiAgc3Ryb2tlOiB3aGl0ZTtcbn1cbi5tY2staWNvbi1maWxsLWdyYXkge1xuICBmaWxsOiAjMzMzMzMzO1xuICBzdHJva2U6ICMzMzMzMzM7XG59XG4ubWNrLW1pbiB7XG4gIG1heC13aWR0aDogNTgxcHggIWltcG9ydGFudDtcbiAgd2lkdGg6IDgwdnc7XG4gIG1heC1oZWlnaHQ6IDEwMHZoO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1taW4ge1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbiAgLm1jay1taW4gLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLW1pbiB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1pbiAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuLm1jay1ub2V4cGFuZCB7XG4gIG1heC13aWR0aDogNTgxcHggIWltcG9ydGFudDtcbiAgd2lkdGg6IDgwdncgIWltcG9ydGFudDtcbiAgbWF4LWhlaWdodDogMTAwdmg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLW5vZXhwYW5kIHtcbiAgICB3aWR0aDogY2FsYygxMDB2dyAtIDMycHgpICFpbXBvcnRhbnQ7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLW5vZXhwYW5kIHtcbiAgICB3aWR0aDogY2FsYygxMDB2dyAtIDMycHgpICFpbXBvcnRhbnQ7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbn1cbi5tY2stbW9kYWwge1xuICBtYXgtd2lkdGg6IDgwMHB4ICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiA4MHZ3O1xuICBtYXgtaGVpZ2h0OiAxMDB2aDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stbW9kYWwge1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbiAgLm1jay1tb2RhbCAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwge1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbiAgLm1jay1tb2RhbCAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuLm1jay1tb2RhbC1taW5pIHtcbiAgbWF4LXdpZHRoOiA1ODBweCAhaW1wb3J0YW50O1xuICBtYXgtaGVpZ2h0OiAxMDB2aDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stbW9kYWwtbWluaSB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsLW1pbmkgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLW1vZGFsLW1pbmkge1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbiAgLm1jay1tb2RhbC1taW5pIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG4ubWNrLW1vZGFsLXN1cnZleSB7XG4gIG1heC13aWR0aDogNjkxcHggIWltcG9ydGFudDtcbiAgbWF4LWhlaWdodDogMTAwdmg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLW1vZGFsLXN1cnZleSAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwtc3VydmV5IC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG4ubWNrLW1vZGFsLXdpZGUge1xuICBtYXgtd2lkdGg6IDEwMjRweCAhaW1wb3J0YW50O1xuICB3aWR0aDogMTAwdnc7XG4gIGhlaWdodDogOTV2aDtcbiAgbWF4LWhlaWdodDogMTAwdmg7XG59XG4ubWNrLW1vZGFsLXdpZGUgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4gIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5tY2stbW9kYWwtd2lkZSAubWF0LWRpYWxvZy1jb250ZW50IC5tYXQtaWNvbi1idXR0b25bbmFtZT1DbG9zZUJ1dHRvbl0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHJpZ2h0OiAzMnB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1tb2RhbC13aWRlIC5tYXQtZGlhbG9nLWNvbnRlbnQgLm1hdC1pY29uLWJ1dHRvbltuYW1lPUNsb3NlQnV0dG9uXSAuY2xvc2UtaW1hZ2Uge1xuICAgIGhlaWdodDogMzJweDtcbiAgICB3aWR0aDogMzJweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwtd2lkZSAubWF0LWRpYWxvZy1jb250ZW50IC5tYXQtaWNvbi1idXR0b25bbmFtZT1DbG9zZUJ1dHRvbl0gLmNsb3NlLWltYWdlIHtcbiAgICBoZWlnaHQ6IDMycHg7XG4gICAgd2lkdGg6IDMycHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stbW9kYWwtd2lkZSB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsLXdpZGUgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLW1vZGFsLXdpZGUge1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbiAgLm1jay1tb2RhbC13aWRlIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG4ubWNrLW1vZGFsLXdpZGUtbWFuYWdlLWJvb2tpbmcge1xuICBtYXgtd2lkdGg6IDEwMjRweCAhaW1wb3J0YW50O1xuICB3aWR0aDogMTAwdnc7XG4gIG1heC1oZWlnaHQ6IDk1dmg7XG59XG4ubWNrLW1vZGFsLXdpZGUtbWFuYWdlLWJvb2tpbmcgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4gIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5tY2stbW9kYWwtd2lkZS1tYW5hZ2UtYm9va2luZyAubWF0LWRpYWxvZy1jb250ZW50IC5tYXQtaWNvbi1idXR0b25bbmFtZT1DbG9zZUJ1dHRvbl0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHJpZ2h0OiAzMnB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1tb2RhbC13aWRlLW1hbmFnZS1ib29raW5nIC5tYXQtZGlhbG9nLWNvbnRlbnQgLm1hdC1pY29uLWJ1dHRvbltuYW1lPUNsb3NlQnV0dG9uXSAuY2xvc2UtaW1hZ2Uge1xuICAgIGhlaWdodDogMzJweDtcbiAgICB3aWR0aDogMzJweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwtd2lkZS1tYW5hZ2UtYm9va2luZyAubWF0LWRpYWxvZy1jb250ZW50IC5tYXQtaWNvbi1idXR0b25bbmFtZT1DbG9zZUJ1dHRvbl0gLmNsb3NlLWltYWdlIHtcbiAgICBoZWlnaHQ6IDMycHg7XG4gICAgd2lkdGg6IDMycHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stbW9kYWwtd2lkZS1tYW5hZ2UtYm9va2luZyB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsLXdpZGUtbWFuYWdlLWJvb2tpbmcgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLW1vZGFsLXdpZGUtbWFuYWdlLWJvb2tpbmcge1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbiAgLm1jay1tb2RhbC13aWRlLW1hbmFnZS1ib29raW5nIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLWFsZXJ0IHtcbiAgICBtYXgtd2lkdGg6IDEwMHZ3ICFpbXBvcnRhbnQ7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIG1hcmdpbi1sZWZ0OiAxcmVtO1xuICAgIG1hcmdpbi1yaWdodDogMXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stYWxlcnQge1xuICAgIG1heC13aWR0aDogMTAwdncgIWltcG9ydGFudDtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgbWFyZ2luLWxlZnQ6IDFyZW07XG4gICAgbWFyZ2luLXJpZ2h0OiAxcmVtO1xuICB9XG59XG4ubWNrLWFsZXJ0LWJhY2tkcm9wIHtcbiAgYmFja2dyb3VuZDogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xufVxuLm1jay1zbGlkZS10b2dnbGUubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkgLm1hdC1zbGlkZS10b2dnbGUtYmFyLm1hdC1zbGlkZS10b2dnbGUtYmFyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzIyNTFGRjtcbn1cbi5tY2stc2xpZGUtdG9nZ2xlLm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQ6bm90KC5tYXQtZGlzYWJsZWQpIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbn1cbi5tY2stc2xpZGUtdG9nZ2xlLm1hdC1zbGlkZS10b2dnbGUge1xuICBoZWlnaHQ6IGF1dG87XG59XG4ubWNrLXNsaWRlLXRvZ2dsZSAubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudCB7XG4gIGZsZXg6IDE7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIC13ZWJraXQtbGluZS1jbGFtcDogMjtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbn1cbi5tY2stc2xpZGUtdG9nZ2xlIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIge1xuICB3aWR0aDogMTRweDtcbiAgaGVpZ2h0OiAxNHB4O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg1MCUsIDUwJSk7XG59XG4ubWNrLXNsaWRlLXRvZ2dsZSAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXIubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXIge1xuICB0b3A6IC00cHg7XG4gIGxlZnQ6IC00cHg7XG59XG4ubWNrLXNsaWRlLXRvZ2dsZSAubWF0LXNsaWRlLXRvZ2dsZS1iYXIubWF0LXNsaWRlLXRvZ2dsZS1iYXIge1xuICBoZWlnaHQ6IDIwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNEMEQwRDA7XG4gIGJvcmRlci1yYWRpdXM6IDIwcHg7XG59XG4ubWNrLXNrZWxldG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbn1cbi5tY2stc2tlbGV0b24tY2hlY2tib3gge1xuICBmbG9hdDogbGVmdDtcbn1cbi5tY2stc2tlbGV0b24tY2hlY2tib3ggPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIHdpZHRoOiAyMHB4O1xuICBoZWlnaHQ6IDIwcHg7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG4ubWNrLXNrZWxldG9uLWhlYWRlciA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgd2lkdGg6IDEwMHZ3O1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBtYXgtd2lkdGg6IDIxNXB4O1xufVxuLm1jay1za2VsZXRvbi1pbWFnZSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgd2lkdGg6IDgxcHg7XG4gIGhlaWdodDogODJweDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stc2tlbGV0b24taW1hZ2UgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgd2lkdGg6IDIxOXB4O1xuICAgIGhlaWdodDogMTE5cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAxMDQ4cHgpIHtcbiAgLm1jay1za2VsZXRvbi1pbWFnZSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICB3aWR0aDogMjE5cHg7XG4gICAgaGVpZ2h0OiAxMTlweDtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1zdGF0dXMgPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIHdpZHRoOiAxMTdweDtcbiAgaGVpZ2h0OiA3OHB4O1xuICBtYXJnaW4tdG9wOiAxMHB4O1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogODAwcHgpIHtcbiAgLm1jay1za2VsZXRvbi1zdGF0dXMgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgd2lkdGg6IDExN3B4O1xuICAgIGhlaWdodDogNzhweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDEwNDhweCkge1xuICAubWNrLXNrZWxldG9uLXN0YXR1cyA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuICB9XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtMSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgaGVpZ2h0OiAyM3B4O1xuICBtYXgtd2lkdGg6IDE3NnB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTEgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAyMTlweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS0xID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogMjE5cHg7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS0yID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogMTY1cHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtMiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDE4OXB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTIgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAxODlweDtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTMgPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIGhlaWdodDogMThweDtcbiAgbWF4LXdpZHRoOiAxNDdweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS0zID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogMTg5cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtMyA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDE4OXB4O1xuICB9XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtMzBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS0zMHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgaGVpZ2h0OiAxOHB4O1xuICBtYXgtd2lkdGg6IDMwJTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS0zMHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTMwcC10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogMzAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTMwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtMzBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAzMCU7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS0zMHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtMzBwLXRoaW4tdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtNDVwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS00NXAtdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgaGVpZ2h0OiAxOHB4O1xuICBtYXgtd2lkdGg6IDQ1JTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS00NXAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTQ1cC10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogNDUlO1xuICAgIG1hcmdpbi1yaWdodDogNDUlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTQ1cCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNDVwLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA0NSU7XG4gICAgbWFyZ2luLXJpZ2h0OiA0NSU7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS00NXAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNDVwLXRoaW4tdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtNTBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogNTAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTUwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTUwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDUwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDQ1JTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS01MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTUwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA1MCU7XG4gICAgbWFyZ2luLXJpZ2h0OiA0NSU7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaW4tdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaWNrLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gIGhlaWdodDogMTZweDtcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xufVxuLm1jay1za2VsZXRvbi1saW5lLTUwcC10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaW4tdGhpY2sgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTUwcC10aGljay10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAzMnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtNjBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogNjAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTYwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTYwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDYwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDM1JTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS02MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTYwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA2MCU7XG4gICAgbWFyZ2luLXJpZ2h0OiAzNSU7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaW4tdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaWNrLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gIGhlaWdodDogMTZweDtcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xufVxuLm1jay1za2VsZXRvbi1saW5lLTYwcC10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaW4tdGhpY2sgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTYwcC10aGljay10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAzMnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtNzBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogNzAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTcwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTcwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDcwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDI1JTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS03MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTcwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA3MCU7XG4gICAgbWFyZ2luLXJpZ2h0OiAyNSU7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaW4tdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaWNrLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gIGhlaWdodDogMTZweDtcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xufVxuLm1jay1za2VsZXRvbi1saW5lLTcwcC10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaW4tdGhpY2sgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTcwcC10aGljay10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAzMnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtODBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogODAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTgwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTgwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDgwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDE1JTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS04MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTgwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA4MCU7XG4gICAgbWFyZ2luLXJpZ2h0OiAxNSU7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaW4tdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaWNrLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gIGhlaWdodDogMTZweDtcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xufVxuLm1jay1za2VsZXRvbi1saW5lLTgwcC10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaW4tdGhpY2sgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTgwcC10aGljay10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAzMnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtOTBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS05MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgaGVpZ2h0OiAxOHB4O1xuICBtYXgtd2lkdGg6IDkwJTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS05MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTkwcC10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogOTAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTkwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtOTBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA5MCU7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS05MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtOTBwLXRoaW4tdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxvYWQtbW9yZSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgbWFyZ2luLXRvcDogMC41cmVtO1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG4gIHdpZHRoOiBjYWxjKDEwMHZ3IC0gKDIgKiAxcmVtKSk7XG4gIGhlaWdodDogNDBweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbG9hZC1tb3JlID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogMzIwcHg7XG4gICAgaGVpZ2h0OiA1MHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1sb2FkLW1vcmUgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAzMjBweDtcbiAgICBoZWlnaHQ6IDUwcHg7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbG9hZC1tb3JlLTEwMHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1oZWFkZXIgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1yb29tLWF2YWlsYWJpbGl0eSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgbWFyZ2luLXRvcDogMC41cmVtO1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG4gIHdpZHRoOiBjYWxjKDEwMHZ3IC0gKDIgKiAxcmVtKSk7XG4gIGhlaWdodDogNDBweDtcbiAgbWF4LXdpZHRoOiBub25lO1xuICB3aWR0aDogMTAwJTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbG9hZC1tb3JlLTEwMHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1oZWFkZXIgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1yb29tLWF2YWlsYWJpbGl0eSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IG5vbmU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiA1MHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1sb2FkLW1vcmUtMTAwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWhlYWRlciA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLXJvb20tYXZhaWxhYmlsaXR5ID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDUwcHg7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbG9hZC1tb3JlLTEwMHAgPiAubG9hZGVyLmxvYWRlci1yb29tLWF2YWlsYWJpbGl0eSA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWhlYWRlciA+IC5sb2FkZXIubG9hZGVyLXJvb20tYXZhaWxhYmlsaXR5ID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tcm9vbS1hdmFpbGFiaWxpdHkgPiAubG9hZGVyLmxvYWRlci1yb29tLWF2YWlsYWJpbGl0eSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxMjRweDtcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xufVxuXG4ubWNrLWhlYWRpbmctNSB7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMS41cmVtO1xuICBsaW5lLWhlaWdodDogMS4zMzM7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWhlYWRpbmctNSB7XG4gICAgZm9udC1zaXplOiAxLjc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2staGVhZGluZy01IHtcbiAgICBmb250LXNpemU6IDEuNzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMTQyO1xuICB9XG59XG5cbm5neC1tYXQtc2VsZWN0LXNlYXJjaCAubWF0LXNlbGVjdC1zZWFyY2gtbm8tZW50cmllcy1mb3VuZCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbm5neC1tYXQtc2VsZWN0LXNlYXJjaCAubWF0LXNlbGVjdC1zZWFyY2gtaW5wdXQge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5uZ3gtbWF0LXNlbGVjdC1zZWFyY2ggYnV0dG9uLm1hdC1idXR0b24ubWF0LXNlbGVjdC1zZWFyY2gtY2xlYXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiBub25lO1xuICBjb2xvcjogYmxhY2s7XG59XG5cbjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICB3aWR0aDogMTZweDtcbiAgaGVpZ2h0OiAxOHB4O1xufVxuXG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgaGVpZ2h0OiAxLjVyZW07XG4gIGJvcmRlcjogNHB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMCk7XG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzc1NzU3NTtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAtMXB4IC0xcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4wNSksIGluc2V0IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG59XG5cbjo6LXdlYmtpdC1zY3JvbGxiYXItYnV0dG9uIHtcbiAgd2lkdGg6IDA7XG4gIGhlaWdodDogMDtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuaGVhZGVyIHtcbiAgei1pbmRleDogMjtcbn1cblxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1iLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tYi1ibG9jayB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cblxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1iLWJvdHRvbSB7XG4gICAgcGFkZGluZy1ib3R0b206IDExMHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1iLWJvdHRvbSB7XG4gICAgcGFkZGluZy1ib3R0b206IDExMHB4O1xuICB9XG59XG5cbi5tYXAtZmlsdGVycy1jb250YWluZXIgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gIHRvcDogNXB4O1xufVxuLm1hcC1maWx0ZXJzLWNvbnRhaW5lciAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICBoZWlnaHQ6IDQ4cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xufVxuLm1hcC1maWx0ZXJzLWNvbnRhaW5lciAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgcGFkZGluZy10b3A6IDAuNXJlbSAhaW1wb3J0YW50O1xufVxuXG4ub2ZmaWNlLWxldmVsLXJvdyAubWF0LXNlbGVjdC1wbGFjZWhvbGRlciB7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAub2ZmaWNlLWxldmVsLXJvdyAubGVnZW5kLWNvbnRhaW5lciAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwgLm9mZmljZS1sZXZlbC1yb3cgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICBoZWlnaHQ6IDQ1cHggIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5vZmZpY2UtbGV2ZWwtcm93IC5sZWdlbmQtY29udGFpbmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAub2ZmaWNlLWxldmVsLXJvdyAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgIGhlaWdodDogNDVweCAhaW1wb3J0YW50O1xuICB9XG59XG4ub2ZmaWNlLWxldmVsLXJvdyAuc2VsZWN0LWRpdmlkZXIge1xuICBkaXNwbGF5OiBibG9jaztcbiAgdG9wOiAwICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiA0NHB4ICFpbXBvcnRhbnQ7XG4gIHJpZ2h0OiAtMTFweCAhaW1wb3J0YW50O1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICBib3JkZXItd2lkdGg6IDAgMCAwIDFweDtcbiAgYm9yZGVyLWNvbG9yOiAjYzZjNmM2O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm9mZmljZS1sZXZlbC1yb3cgLnNlbGVjdC1kaXZpZGVyIHtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDFweCkgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5vZmZpY2UtbGV2ZWwtcm93IC5zZWxlY3QtZGl2aWRlciB7XG4gICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAxcHgpICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi5vZmZpY2UtbGV2ZWwtcm93IC5kaXNhYmxlZCAuc2VsZWN0LWRpdmlkZXIge1xuICBiYWNrZ3JvdW5kOiAjRjBGMEYwICFpbXBvcnRhbnQ7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAub2ZmaWNlLWxldmVsLXJvdyAuZGlzYWJsZWQgLnNlbGVjdC1kaXZpZGVyIHtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDJweCkgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5vZmZpY2UtbGV2ZWwtcm93IC5kaXNhYmxlZCAuc2VsZWN0LWRpdmlkZXIge1xuICAgIGhlaWdodDogY2FsYygxMDAlIC0gMnB4KSAhaW1wb3J0YW50O1xuICB9XG59XG4ub2ZmaWNlLWxldmVsLXJvdyAuZGlzYWJsZWQgLnNlbGVjdC1jaGV2cm9uIHtcbiAgb3BhY2l0eTogMC41O1xuICBtYXJnaW4tbGVmdDogMTBweDtcbn1cblxuLm9mZmljZS1sZXZlbC1yb3cgLmxlZ2VuZC1jb250YWluZXIgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsIC5vZmZpY2UtbGV2ZWwtcm93IC5tYXQtZm9ybS1maWVsZC1pbmZpeCwgLm1hcC1jb250cm9scyAubGVnZW5kLWNvbnRhaW5lciAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwgLm1hcC1jb250cm9scyAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50O1xufVxuXG4uYm9va2luZy1mb3JtLWNvbnRhaW5lciB7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAzNDVweCk7XG59XG5cbi5ib29raW5nLWZvcm0tY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dCBtYXQtbGFiZWwsIC5ib29raW5nLWZvcm0tY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dCAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnQge1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCIgIWltcG9ydGFudDtcbiAgY29sb3I6ICMzMzMzMzM7XG59XG4uYm9va2luZy1mb3JtLWNvbnRhaW5lciAubWNrLWZvcm0taW5wdXQgaW5wdXQsIC5ib29raW5nLWZvcm0tY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dCBpbnB1dDo6cGxhY2Vob2xkZXIge1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGNvbG9yOiAjQjNCM0IzO1xufVxuXG5mb3JtIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIGZvcm0ge1xuICAgIHBhZGRpbmc6IDAgMTBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIGZvcm0ge1xuICAgIHBhZGRpbmc6IDAgMTBweDtcbiAgfVxufVxuXG4ubWNrLXJvdy1mbG93IHtcbiAgZGlzcGxheTogZmxleDtcbn1cbi5tY2stcm93LWZsb3cgPiBkaXYge1xuICBmbGV4OiAxO1xuICBtaW4td2lkdGg6IDE4MHB4O1xuICBmbGV4LWZsb3c6IGNvbHVtbjtcbn1cbi5tY2stcm93LWZsb3cgPiBkaXY6bnRoLWNoaWxkKDIpIHtcbiAgbWFyZ2luLWxlZnQ6IDIwcHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLXJvdy1mbG93ID4gZGl2Om50aC1jaGlsZCgyKSB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLXJvdy1mbG93ID4gZGl2Om50aC1jaGlsZCgyKSB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gIH1cbn1cblxuLmNvbXBhbnktY29udGFpbmVyID4gZGl2Om50aC1jaGlsZCgyKSB7XG4gIG1hcmdpbi1sZWZ0OiAwcHg7XG59XG5cbi5yb3ctd2l0aC1zcGFjaW5nIHtcbiAgbWFyZ2luLWJvdHRvbTogMS41cmVtO1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbn1cbi5yb3ctd2l0aC1zcGFjaW5nIGxhYmVsIHtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xufVxuLnJvdy13aXRoLXNwYWNpbmcgcCB7XG4gIGNvbG9yOiAjZTEyZTQxO1xuICBtYXJnaW46IDA7XG59XG4ucm93LXdpdGgtc3BhY2luZyBwLmNoZWNraW5nIHtcbiAgY29sb3I6ICMwMDAwMDA7XG59XG4ucm93LXdpdGgtc3BhY2luZyBwLmF2YWlsYWJsZSB7XG4gIGNvbG9yOiAjM2FhNTM3O1xufVxuLnJvdy13aXRoLXNwYWNpbmcgcC5zYi1zdGF0dXMge1xuICBwYWRkaW5nOiAwIDEwcHggMCAzNHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4ucm93LXdpdGgtc3BhY2luZyBwLnNiLXN0YXR1cyBpbWcge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNHB4O1xuICBsZWZ0OiA0cHg7XG59XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5mbGV4LXJvdyB7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICBtYXJnaW4tcmlnaHQ6IDFlbTtcbiAgfVxuICAuZmxleC1yb3cgPiBkaXYge1xuICAgIHdpZHRoOiA0NyU7XG4gICAgbWluLXdpZHRoOiA0MCU7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgZmxleDogbm9uZTtcbiAgfVxuICAuZmxleC1yb3cgLmNvbXBhbnktZmllbGQge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmZsZXgtcm93IHtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAgIG1hcmdpbi1yaWdodDogMWVtO1xuICB9XG4gIC5mbGV4LXJvdyA+IGRpdiB7XG4gICAgd2lkdGg6IDQ3JTtcbiAgICBtaW4td2lkdGg6IDQwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBmbGV4OiBub25lO1xuICB9XG4gIC5mbGV4LXJvdyAuY29tcGFueS1maWVsZCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLmF0dGVuZGVlcy1pbnB1dCB7XG4gIG1hcmdpbi1yaWdodDogMWVtO1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxubWF0LWhpbnQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5tYXQtaGludCBzcGFuIHtcbiAgY29sb3I6ICMxRjQwRTY7XG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbm1hdC1oaW50IC5oaW50IHtcbiAgd2lkdGg6IDQyOXB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjaztcbiAgY29sb3I6IHdoaXRlO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHBhZGRpbmc6IDEwcHg7XG4gIHRvcDogMjZweDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIG1hdC1oaW50IC5oaW50IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICBtYXQtaGludCAuaGludCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG59XG5tYXQtaGludCAuaGludCAudHJpYW5nbGUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogLTZweDtcbiAgbGVmdDogMTJweDtcbiAgd2lkdGg6IDEycHg7XG4gIGhlaWdodDogMTJweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG4gIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcbn1cblxuLm1jay1mb3JtLWlucHV0IHtcbiAgbWluLXdpZHRoOiAxMDAlO1xuICBtYXJnaW4tdG9wOiAxLjI1ZW07XG4gIG1hcmdpbi1yaWdodDogMWVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LXNpemU6IDE2cHg7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAwLjVlbTtcbn1cbi5tY2stZm9ybS1pbnB1dCBzcGFuIHtcbiAgY29sb3I6ICNkMTQ4NGY7XG59XG4ubWNrLWZvcm0taW5wdXQuZXJyb3Ige1xuICBjb2xvcjogI2U1MzkzNTtcbn1cblxubWF0LWZvcm0tZmllbGQge1xuICBmbGV4OiAxO1xufVxubWF0LWZvcm0tZmllbGQuYm9va2VkIHtcbiAgY29sb3I6ICNkMTQ4NGY7XG59XG5tYXQtZm9ybS1maWVsZC5hdmFpbGFibGUge1xuICBjb2xvcjogIzNhYTUzNztcbn1cbm1hdC1mb3JtLWZpZWxkIGlucHV0IHtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBwYWRkaW5nLXRvcDogOHB4O1xufVxubWF0LWZvcm0tZmllbGQgbWF0LWVycm9yIHtcbiAgcGFkZGluZy10b3A6IDEycHg7XG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IDQwcHg7XG59XG5tYXQtZm9ybS1maWVsZCBtYXQtZXJyb3Igc3BhbiB7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGxlZnQ6IDEwcHg7XG4gIHRvcDogMnB4O1xufVxubWF0LWZvcm0tZmllbGQgbWF0LWVycm9yIC5lcnJvci1pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAtMTJweDtcbiAgd2lkdGg6IDE2cHg7XG4gIGhlaWdodDogMTZweDtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwibGlicy91aS9zcmMvbGliL2ljb25zL2Vycm9yLWNsb3NlLnN2Z1wiKTtcbiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxubWF0LWZvcm0tZmllbGQgLmljb24ge1xuICB3aWR0aDogOHB4O1xufVxuXG5tYXQtdGFiIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4uZmllbGQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBtaW4td2lkdGg6IDE0ZW07XG4gIGZsZXg6IDE7XG4gIGZsZXgtd3JhcDogd3JhcDtcbn1cblxudGV4dGFyZWEge1xuICBtaW4taGVpZ2h0OiA3ZW07XG59XG5cbi5maWVsZHNldCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbn1cbi5maWVsZHNldCAuZmllbGQge1xuICBtYXJnaW46IDAgMC4yNWVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmZpZWxkc2V0IC5maWVsZCB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmZpZWxkc2V0IC5maWVsZCB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG4uZmllbGRzZXQgLmZpZWxkOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLWxlZnQ6IDA7XG59XG4uZmllbGRzZXQgLmZpZWxkOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tcmlnaHQ6IDA7XG59XG5cbi5lcnJvciB7XG4gIGNvbG9yOiAjZTUzOTM1O1xufVxuXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuZmxleC1jb250YWluZXIgLmZ1bGwtd2lkdGgge1xuICAgIG1pbi13aWR0aDogY2FsYygxMDAlIC0gMWVtKTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5mbGV4LWNvbnRhaW5lciAuZnVsbC13aWR0aCB7XG4gICAgbWluLXdpZHRoOiBjYWxjKDEwMCUgLSAxZW0pO1xuICB9XG59XG4uZmxleC1jb250YWluZXIgbWF0LWZvcm0tZmllbGQgOjpuZy1kZWVwIGRpdiBkaXYge1xuICBoZWlnaHQ6IDQ3cHg7XG59IiwiQGltcG9ydCBcInZhcnNcIjtcblxuQG1peGluIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJHNpemUsICRxdWFsaWZpZXIpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBpZiAoJHF1YWxpZmllciA9PSBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIGlmICgkcXVhbGlmaWVyID09IG1heC13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtYXgtd2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBtaXhpbiBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJG1pbiwgJG1heCkge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gdGhpcyBpcyBhIGNvcHkgb2YgcmVzcG9uZC10by4gd2UgZG9uJ3Qgd2FudCB0byBwcmVzZXJ2ZSB0aGF0IG1ldGhvZCBzaW5jZSB0aGUgYnJlYWtwb2ludHMgbWF5IGRpdmVyZ2UgZnJvbSB0aGUgb2xkIFVJLlxuQG1peGluIGlzLXNjcmVlbi1zaXplKCRtZWRpYTogYWxsLCAkb3JpZW50YXRpb246IG5vbmUpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuXG5AbWl4aW4gcGFnZS1wYWRkaW5nIHtcbiAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xufVxuXG4vLyBGb250IE1peGluc1xuJGZvbnQtbWNraW5zZXktc2FuczogXCJNY0tpbnNleSBTYW5zXCI7XG4kZm9udC10aGVpbmhhcmR0OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiRmb250LWJvd2VyOiBcIkJvd2VyXCI7XG5cbkBtaXhpbiBib3dlci1ib2xkIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtYm93ZXI7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIG1ja2luc2V5LXNhbnMge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBkaXNwbGF5LTEge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDRyZW07IC8vIDY0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTg3OyAvLyA3NnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0yIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0zIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTQge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzcmVtOyAvLyA0OHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTY2OyAvLyA1NnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDY0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTUge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuODMzOyAvLyAzNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42NDI7IC8vIDQwcHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTcge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDQ4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjc1cmVtOyAvLyA0NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNTJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICBsaW5lLWhlaWdodDogMS4xMTE7IC8vIDQ0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA0OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0zIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjIyOyAvLyA0NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy00IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy01IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyODhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy02IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTU1OyAvLyAyOHB4XG4gICAgfVxufVxuXG5AbWl4aW4gYm9keS1kZWZhdWx0IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI2cHhcbiAgICB9XG59XG5cbi8vLyBEb2VzbnQgZXhpc3QgaW4gTURTLlxuQG1peGluIGJvZHktdGlueSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07IC8vIDEycHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyMHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZm9ybS1sYWJlbCB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LWZhbWlseTogJGZvbnQtdGhlaW5oYXJkdDtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgY29sb3I6ICRwbGFjZWhvbGRlci1jb2xvcjtcbiAgICBmb250LXdlaWdodDogMzAwO1xufVxuXG5AbWl4aW4gY2hpcC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIGNoZWNrYm94LWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgY29sb3I6IGJsYWNrO1xufVxuXG4vLyBib3JkZXJzXG5cbkBtaXhpbiBtY2stY2hlY2tib3gtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAycHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLXRoaW4tYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlci1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJvcmRlci1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50LWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXItbGlnaHQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5cbi8vIGZ1bmN0aW9uc1xuXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbkBtaXhpbiBtYXgtbGluZXMoJGNvdW50KSB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAtd2Via2l0LWxpbmUtY2xhbXA6ICRjb3VudDtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuXG4vLyBpbWFnZXNcbkBtaXhpbiBtY2staWNvbigkd2lkdGgsICRhc3NldCwgJGhlaWdodDogJHdpZHRoLCAgJGFzc2V0UGF0aDogXCJsaWJzL3VpL3NyYy9saWIvaWNvbnNcIiwpIHtcbiAgICB3aWR0aDogJHdpZHRoO1xuICAgIGhlaWdodDogJGhlaWdodDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIjeyRhc3NldFBhdGh9LyN7JGFzc2V0fVwiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG59XG5cblxuQG1peGluIG1jay1zbWFsbC1pY29uKCRtb2JpbGUtYXNzZXQsICRkZXNrdG9wLWFzc2V0OiAkbW9iaWxlLWFzc2V0KSB7XG4gICAgQGluY2x1ZGUgbWNrLWljb24oMTZweCwgJGFzc2V0OiAkbW9iaWxlLWFzc2V0KTtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oMjRweCwgJGFzc2V0OiAkZGVza3RvcC1hc3NldCk7XG4gICAgfVxufVxuXG4vLyBza2VsZXRvblxuQG1peGluIHNrZWxldG9uLWJnIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItaW1hZ2Utc2l6ZSB7XG4gICAgd2lkdGg6IDgxcHg7XG4gICAgaGVpZ2h0OiA4MnB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMjE5cHg7XG4gICAgICAgIGhlaWdodDogMTE5cHg7XG4gICAgfVxufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItc3RhdHVzLXNpemUge1xuICAgIHdpZHRoOiAxMTdweDtcbiAgICBoZWlnaHQ6IDc4cHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAxMTdweDtcbiAgICAgICAgaGVpZ2h0OiA3OHB4O1xuICAgIH1cbn1cbiIsIi8vIEltcG9ydCBhbGwgdGhlIHRoZW1pbmcgZnVuY3Rpb25hbGl0eS5cbi8vIFdlIHdhbnQgb3ZlcmxheXMgdG8gYWx3YXlzIGFwcGVhciBvdmVyIHVzZXIgY29udGVudCwgc28gc2V0IGEgYmFzZWxpbmVcbi8vIHZlcnkgaGlnaCB6LWluZGV4IGZvciB0aGUgb3ZlcmxheSBjb250YWluZXIsIHdoaWNoIGlzIHdoZXJlIHdlIGNyZWF0ZSB0aGUgbmV3XG4vLyBzdGFja2luZyBjb250ZXh0IGZvciBhbGwgb3ZlcmxheXMuXG4kY2RrLXotaW5kZXgtb3ZlcmxheS1jb250YWluZXI6IDEwMDAgIWRlZmF1bHQ7XG4kY2RrLXotaW5kZXgtb3ZlcmxheTogMTAwMCAhZGVmYXVsdDtcbiRjZGstei1pbmRleC1vdmVybGF5LWJhY2tkcm9wOiAxMDAwICFkZWZhdWx0O1xuXG4vLyBCYWNrZ3JvdW5kIGNvbG9yIGZvciBhbGwgb2YgdGhlIGJhY2tkcm9wc1xuJGNkay1vdmVybGF5LWRhcmstYmFja2Ryb3AtYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjMyKSAhZGVmYXVsdDtcblxuLy8gRGVmYXVsdCBiYWNrZHJvcCBhbmltYXRpb24gaXMgYmFzZWQgb24gdGhlIE1hdGVyaWFsIERlc2lnbiBzd2lmdC1lYXNlLW91dC5cbiRiYWNrZHJvcC1hbmltYXRpb24tZHVyYXRpb246IDQwMG1zICFkZWZhdWx0O1xuJGJhY2tkcm9wLWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpICFkZWZhdWx0O1xuXG5cbkBtaXhpbiBjZGstb3ZlcmxheSgpIHtcbiAgLmNkay1vdmVybGF5LWNvbnRhaW5lciwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyIHtcbiAgICAvLyBEaXNhYmxlIGV2ZW50cyBmcm9tIGJlaW5nIGNhcHR1cmVkIG9uIHRoZSBvdmVybGF5IGNvbnRhaW5lci5cbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcblxuICAgIC8vIFRoZSBjb250YWluZXIgc2hvdWxkIGJlIHRoZSBzaXplIG9mIHRoZSB2aWV3cG9ydC5cbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICAvLyBUaGUgb3ZlcmxheS1jb250YWluZXIgaXMgYW4gaW52aXNpYmxlIGVsZW1lbnQgd2hpY2ggY29udGFpbnMgYWxsIGluZGl2aWR1YWwgb3ZlcmxheXMuXG4gIC5jZGstb3ZlcmxheS1jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB6LWluZGV4OiAkY2RrLXotaW5kZXgtb3ZlcmxheS1jb250YWluZXI7XG5cbiAgICAmOmVtcHR5IHtcbiAgICAgIC8vIEhpZGUgdGhlIGVsZW1lbnQgd2hlbiBpdCBkb2Vzbid0IGhhdmUgYW55IGNoaWxkIG5vZGVzLiBUaGlzIGRvZXNuJ3RcbiAgICAgIC8vIGluY2x1ZGUgb3ZlcmxheXMgdGhhdCBoYXZlIGJlZW4gZGV0YWNoZWQsIHJhdGhlciB0aGFuIGRpc3Bvc2VkLlxuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAvLyBXZSB1c2UgYW4gZXh0cmEgd3JhcHBlciBlbGVtZW50IGluIG9yZGVyIHRvIHVzZSBtYWtlIHRoZSBvdmVybGF5IGl0c2VsZiBhIGZsZXggaXRlbS5cbiAgLy8gVGhpcyBtYWtlcyBjZW50ZXJpbmcgdGhlIG92ZXJsYXkgZWFzeSB3aXRob3V0IHJ1bm5pbmcgaW50byB0aGUgc3VicGl4ZWwgcmVuZGVyaW5nXG4gIC8vIHByb2JsZW1zIHRpZWQgdG8gdXNpbmcgYHRyYW5zZm9ybWAgYW5kIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCB0aGUgb3RoZXIgcG9zaXRpb25cbiAgLy8gc3RyYXRlZ2llcy5cbiAgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB6LWluZGV4OiAkY2RrLXotaW5kZXgtb3ZlcmxheTtcbiAgfVxuXG4gIC8vIEEgc2luZ2xlIG92ZXJsYXkgcGFuZS5cbiAgLmNkay1vdmVybGF5LXBhbmUge1xuICAgIC8vIE5vdGU6IGl0J3MgaW1wb3J0YW50IGZvciB0aGlzIG9uZSB0byBzdGFydCBvZmYgYGFic29sdXRlYCxcbiAgICAvLyBpbiBvcmRlciBmb3IgdXMgdG8gYmUgYWJsZSB0byBtZWFzdXJlIGl0IGNvcnJlY3RseS5cbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB6LWluZGV4OiAkY2RrLXotaW5kZXgtb3ZlcmxheTtcblxuICAgIC8vIEZvciBjb25uZWN0ZWQtcG9zaXRpb24gb3ZlcmxheXMsIHdlIHNldCBgZGlzcGxheTogZmxleGAgaW5cbiAgICAvLyBvcmRlciB0byBmb3JjZSBgbWF4LXdpZHRoYCBhbmQgYG1heC1oZWlnaHRgIHRvIHRha2UgZWZmZWN0LlxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gIH1cblxuICAuY2RrLW92ZXJsYXktYmFja2Ryb3Age1xuICAgIC8vIFRPRE8oamVsYm91cm4pOiByZXVzZSBzaWRlbmF2IGZ1bGxzY3JlZW4gbWl4aW4uXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcblxuICAgIHotaW5kZXg6ICRjZGstei1pbmRleC1vdmVybGF5LWJhY2tkcm9wO1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAkYmFja2Ryb3AtYW5pbWF0aW9uLWR1cmF0aW9uICRiYWNrZHJvcC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uO1xuICAgIG9wYWNpdHk6IDA7XG5cbiAgICAmLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmcge1xuICAgICAgb3BhY2l0eTogMTtcblxuICAgICAgLy8gSW4gaGlnaCBjb250cmFzdCBtb2RlIHRoZSByZ2JhIGJhY2tncm91bmQgd2lsbCBiZWNvbWUgc29saWQgc28gd2UgbmVlZCB0byBmYWxsIGJhY2tcbiAgICAgIC8vIHRvIG1ha2luZyBpdCBvcGFxdWUgdXNpbmcgYG9wYWNpdHlgLiBOb3RlIHRoYXQgd2UgY2FuJ3QgdXNlIHRoZSBgY2RrLWhpZ2gtY29udHJhc3RgXG4gICAgICAvLyBtaXhpbiwgYmVjYXVzZSB3ZSBjYW4ndCBub3JtYWxpemUgdGhlIGltcG9ydCBwYXRoIHRvIHRoZSBfYTExeS5zY3NzIGJvdGggZm9yIHRoZVxuICAgICAgLy8gc291cmNlIGFuZCB3aGVuIHRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZC4gU2VlICMxMDkwOC5cbiAgICAgIEBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSB7XG4gICAgICAgIG9wYWNpdHk6IDAuNjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcCB7XG4gICAgYmFja2dyb3VuZDogJGNkay1vdmVybGF5LWRhcmstYmFja2Ryb3AtYmFja2dyb3VuZDtcbiAgfVxuXG4gIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCB7XG4gICAgLy8gTm90ZTogYXMgb2YgRmlyZWZveCA1NywgaGF2aW5nIHRoZSBiYWNrZHJvcCBiZSBgYmFja2dyb3VuZDogbm9uZWAgd2lsbCBwcmV2ZW50IGl0IGZyb21cbiAgICAvLyBjYXB0dXJpbmcgdGhlIHVzZXIncyBtb3VzZSBzY3JvbGwgZXZlbnRzLiBTaW5jZSB3ZSBhbHNvIGNhbid0IHVzZSBzb21ldGhpbmcgbGlrZVxuICAgIC8vIGByZ2JhKDAsIDAsIDAsIDApYCwgd2Ugd29yayBhcm91bmQgdGhlIGluY29uc2lzdGVuY3kgYnkgbm90IHNldHRpbmcgdGhlIGJhY2tncm91bmQgYXRcbiAgICAvLyBhbGwgYW5kIHVzaW5nIGBvcGFjaXR5YCB0byBtYWtlIHRoZSBlbGVtZW50IHRyYW5zcGFyZW50LlxuICAgICYsICYuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyB7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgfVxuXG4gIC8vIE92ZXJsYXkgcGFyZW50IGVsZW1lbnQgdXNlZCB3aXRoIHRoZSBjb25uZWN0ZWQgcG9zaXRpb24gc3RyYXRlZ3kuIFVzZWQgdG8gY29uc3RyYWluIHRoZVxuICAvLyBvdmVybGF5IGVsZW1lbnQncyBzaXplIHRvIGZpdCB3aXRoaW4gdGhlIHZpZXdwb3J0LlxuICAuY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHotaW5kZXg6ICRjZGstei1pbmRleC1vdmVybGF5O1xuXG4gICAgLy8gV2UgdXNlIGBkaXNwbGF5OiBmbGV4YCBvbiB0aGlzIGVsZW1lbnQgZXhjbHVzaXZlbHkgZm9yIGNlbnRlcmluZyBjb25uZWN0ZWQgb3ZlcmxheXMuXG4gICAgLy8gV2hlbiAqbm90KiBjZW50ZXJpbmcsIGEgdG9wL2xlZnQvYm90dG9tL3JpZ2h0IHdpbGwgYmUgc2V0IHdoaWNoIG92ZXJyaWRlcyB0aGUgbm9ybWFsXG4gICAgLy8gZmxleCBsYXlvdXQuXG4gICAgZGlzcGxheTogZmxleDtcblxuICAgIC8vIFdlIHVzZSB0aGUgYGNvbHVtbmAgZGlyZWN0aW9uIGhlcmUgdG8gYXZvaWQgc29tZSBmbGV4Ym94IGlzc3VlcyBpbiBFZGdlXG4gICAgLy8gd2hlbiB1c2luZyB0aGUgXCJncm93IGFmdGVyIG9wZW5cIiBvcHRpb25zLlxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgICAvLyBBZGQgc29tZSBkaW1lbnNpb25zIHNvIHRoZSBlbGVtZW50IGhhcyBhbiBgaW5uZXJUZXh0YCB3aGljaCBzb21lIHBlb3BsZSBkZXBlbmQgb24gaW4gdGVzdHMuXG4gICAgbWluLXdpZHRoOiAxcHg7XG4gICAgbWluLWhlaWdodDogMXB4O1xuICB9XG5cbiAgLy8gVXNlZCB3aGVuIGRpc2FibGluZyBnbG9iYWwgc2Nyb2xsaW5nLlxuICAuY2RrLWdsb2JhbC1zY3JvbGxibG9jayB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuXG4gICAgLy8gTmVjZXNzYXJ5IGZvciB0aGUgY29udGVudCBub3QgdG8gbG9zZSBpdHMgd2lkdGguIE5vdGUgdGhhdCB3ZSdyZSB1c2luZyAxMDAlLCBpbnN0ZWFkIG9mXG4gICAgLy8gMTAwdncsIGJlY2F1c2UgMTAwdncgaW5jbHVkZXMgdGhlIHdpZHRoIHBsdXMgdGhlIHNjcm9sbGJhciwgd2hlcmVhcyAxMDAlIGlzIHRoZSB3aWR0aFxuICAgIC8vIHRoYXQgdGhlIGVsZW1lbnQgaGFkIGJlZm9yZSB3ZSBtYWRlIGl0IGBmaXhlZGAuXG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICAvLyBOb3RlOiB0aGlzIHdpbGwgYWx3YXlzIGFkZCBhIHNjcm9sbGJhciB0byB3aGF0ZXZlciBlbGVtZW50IGl0IGlzIG9uLCB3aGljaCBjYW5cbiAgICAvLyBwb3RlbnRpYWxseSByZXN1bHQgaW4gZG91YmxlIHNjcm9sbGJhcnMuIEl0IHNob3VsZG4ndCBiZSBhbiBpc3N1ZSwgYmVjYXVzZSB3ZSB3b24ndFxuICAgIC8vIGJsb2NrIHNjcm9sbGluZyBvbiBhIHBhZ2UgdGhhdCBkb2Vzbid0IGhhdmUgYSBzY3JvbGxiYXIgaW4gdGhlIGZpcnN0IHBsYWNlLlxuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxufVxuXG5AbWl4aW4gY2RrLWExMXkge1xuICAuY2RrLXZpc3VhbGx5LWhpZGRlbiB7XG4gICAgYm9yZGVyOiAwO1xuICAgIGNsaXA6IHJlY3QoMCAwIDAgMCk7XG4gICAgaGVpZ2h0OiAxcHg7XG4gICAgbWFyZ2luOiAtMXB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcGFkZGluZzogMDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgd2lkdGg6IDFweDtcblxuICAgIC8vIEF2b2lkIGJyb3dzZXJzIHJlbmRlcmluZyB0aGUgZm9jdXMgcmluZyBpbiBzb21lIGNhc2VzLlxuICAgIG91dGxpbmU6IDA7XG5cbiAgICAvLyBBdm9pZCBzb21lIGNhc2VzIHdoZXJlIHRoZSBicm93c2VyIHdpbGwgc3RpbGwgcmVuZGVyIHRoZSBuYXRpdmUgY29udHJvbHMgKHNlZSAjOTA0OSkuXG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcbiAgfVxufVxuXG4vLy8gRW1pdHMgdGhlIG1peGluJ3MgY29udGVudCBuZXN0ZWQgdW5kZXIgYCRzZWxlY3Rvci1jb250ZXh0YCBpZiBgJHNlbGVjdG9yLWNvbnRleHRgXG4vLy8gaXMgbm9uLWVtcHR5LlxuLy8vIEBwYXJhbSBzZWxlY3Rvci1jb250ZXh0IFRoZSBzZWxlY3RvciB1bmRlciB3aGljaCB0byBuZXN0IHRoZSBtaXhpbidzIGNvbnRlbnQuXG5AbWl4aW4gX2Nkay1vcHRpb25hbGx5LW5lc3QtY29udGVudCgkc2VsZWN0b3ItY29udGV4dCkge1xuICBAaWYgKCRzZWxlY3Rvci1jb250ZXh0ID09ICcnKSB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cbiAgQGVsc2Uge1xuICAgICN7JHNlbGVjdG9yLWNvbnRleHR9IHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfVxufVxuXG4vLy8gQXBwbGllcyBzdHlsZXMgZm9yIHVzZXJzIGluIGhpZ2ggY29udHJhc3QgbW9kZS4gTm90ZSB0aGF0IHRoaXMgb25seSBhcHBsaWVzXG4vLy8gdG8gTWljcm9zb2Z0IGJyb3dzZXJzLiBDaHJvbWUgY2FuIGJlIGluY2x1ZGVkIGJ5IGNoZWNraW5nIGZvciB0aGUgYGh0bWxbaGNdYFxuLy8vIGF0dHJpYnV0ZSwgaG93ZXZlciBDaHJvbWUgaGFuZGxlcyBoaWdoIGNvbnRyYXN0IGRpZmZlcmVudGx5LlxuLy8vXG4vLy8gQHBhcmFtIHRhcmdldCBXaGljaCBraW5kIG9mIGhpZ2ggY29udHJhc3Qgc2V0dGluZyB0byB0YXJnZXQuIERlZmF1bHRzIHRvIGBhY3RpdmVgLCBjYW4gYmVcbi8vLyAgICBgd2hpdGUtb24tYmxhY2tgIG9yIGBibGFjay1vbi13aGl0ZWAuXG4vLy8gQHBhcmFtIGVuY2Fwc3VsYXRpb24gV2hldGhlciB0byBlbWl0IHN0eWxlcyBmb3IgdmlldyBlbmNhcHN1bGF0aW9uLiBWYWx1ZXMgYXJlOlxuLy8vICAgICAqIGBvbmAgLSB3b3JrcyBmb3IgYEVtdWxhdGVkYCwgYE5hdGl2ZWAsIGFuZCBgU2hhZG93RG9tYFxuLy8vICAgICAqIGBvZmZgIC0gd29ya3MgZm9yIGBOb25lYFxuLy8vICAgICAqIGBhbnlgIC0gd29ya3MgZm9yIGFsbCBlbmNhcHN1bGF0aW9uIG1vZGVzIGJ5IGVtaXR0aW5nIHRoZSBDU1MgdHdpY2UgKGRlZmF1bHQpLlxuQG1peGluIGNkay1oaWdoLWNvbnRyYXN0KCR0YXJnZXQ6IGFjdGl2ZSwgJGVuY2Fwc3VsYXRpb246ICdhbnknKSB7XG4gIEBpZiAoJHRhcmdldCAhPSAnYWN0aXZlJyBhbmQgJHRhcmdldCAhPSAnYmxhY2stb24td2hpdGUnIGFuZCAkdGFyZ2V0ICE9ICd3aGl0ZS1vbi1ibGFjaycpIHtcbiAgICBAZXJyb3IgJ1Vua25vd24gY2RrLWhpZ2gtY29udHJhc3QgdmFsdWUgXCIjeyR0YXJnZXR9XCIgcHJvdmlkZWQuICcgK1xuICAgICAgICAgICAnQWxsb3dlZCB2YWx1ZXMgYXJlIFwiYWN0aXZlXCIsIFwiYmxhY2stb24td2hpdGVcIiwgYW5kIFwid2hpdGUtb24tYmxhY2tcIic7XG4gIH1cblxuICBAaWYgKCRlbmNhcHN1bGF0aW9uICE9ICdvbicgYW5kICRlbmNhcHN1bGF0aW9uICE9ICdvZmYnIGFuZCAkZW5jYXBzdWxhdGlvbiAhPSAnYW55Jykge1xuICAgIEBlcnJvciAnVW5rbm93biBjZGstaGlnaC1jb250cmFzdCBlbmNhcHN1bGF0aW9uIFwiI3skZW5jYXBzdWxhdGlvbn1cIiBwcm92aWRlZC4gJyArXG4gICAgICAgICAgICdBbGxvd2VkIHZhbHVlcyBhcmUgXCJvblwiLCBcIm9mZlwiLCBhbmQgXCJhbnlcIic7XG4gIH1cblxuICAvLyBJZiB0aGUgc2VsZWN0b3IgY29udGV4dCBoYXMgbXVsdGlwbGUgcGFydHMsIHN1Y2ggYXMgYC5zZWN0aW9uLCAucmVnaW9uYCwganVzdCBkb2luZ1xuICAvLyBgLmNkay1oaWdoLWNvbnRyYXN0LXh4eCAjeyZ9YCB3aWxsIG9ubHkgYXBwbHkgdGhlIHBhcmVudCBzZWxlY3RvciB0byB0aGUgZmlyc3QgcGFydCBvZiB0aGVcbiAgLy8gY29udGV4dC4gV2UgYWRkcmVzcyB0aGlzIGJ5IG5lc3RpbmcgdGhlIHNlbGVjdG9yIGNvbnRleHQgdW5kZXIgLmNkay1oaWdoLWNvbnRyYXN0LlxuICBAYXQtcm9vdCB7XG4gICAgJHNlbGVjdG9yLWNvbnRleHQ6ICN7Jn07XG5cbiAgICBAaWYgKCRlbmNhcHN1bGF0aW9uICE9ICdvbicpIHtcbiAgICAgIC5jZGstaGlnaC1jb250cmFzdC0jeyR0YXJnZXR9IHtcbiAgICAgICAgQGluY2x1ZGUgX2Nkay1vcHRpb25hbGx5LW5lc3QtY29udGVudCgkc2VsZWN0b3ItY29udGV4dCkge1xuICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGlmICgkZW5jYXBzdWxhdGlvbiAhPSAnb2ZmJykge1xuICAgICAgLmNkay1oaWdoLWNvbnRyYXN0LSN7JHRhcmdldH0gOmhvc3Qge1xuICAgICAgICBAaW5jbHVkZSBfY2RrLW9wdGlvbmFsbHktbmVzdC1jb250ZW50KCRzZWxlY3Rvci1jb250ZXh0KSB7XG4gICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gQ29yZSBzdHlsZXMgdGhhdCBlbmFibGUgbW9uaXRvcmluZyBhdXRvZmlsbCBzdGF0ZSBvZiB0ZXh0IGZpZWxkcy5cbkBtaXhpbiBjZGstdGV4dC1maWVsZCB7XG4gIC8vIEtleWZyYW1lcyB0aGF0IGFwcGx5IG5vIHN0eWxlcywgYnV0IGFsbG93IHVzIHRvIG1vbml0b3Igd2hlbiBhbiB0ZXh0IGZpZWxkIGJlY29tZXMgYXV0b2ZpbGxlZFxuICAvLyBieSB3YXRjaGluZyBmb3IgdGhlIGFuaW1hdGlvbiBldmVudHMgdGhhdCBhcmUgZmlyZWQgd2hlbiB0aGV5IHN0YXJ0LiBOb3RlOiB0aGUgLyohKi8gY29tbWVudCBpc1xuICAvLyBuZWVkZWQgdG8gcHJldmVudCBMaWJTYXNzIGZyb20gc3RyaXBwaW5nIHRoZSBrZXlmcmFtZXMgb3V0LlxuICAvLyBCYXNlZCBvbjogaHR0cHM6Ly9tZWRpdW0uY29tL0BicnVubi9kZXRlY3RpbmctYXV0b2ZpbGxlZC1maWVsZHMtaW4tamF2YXNjcmlwdC1hZWQ1OThkMjVkYTdcbiAgQGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCB7LyohKi99XG4gIEBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIHsvKiEqL31cblxuICAuY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOi13ZWJraXQtYXV0b2ZpbGwge1xuICAgIC8vIFNpbmNlIENocm9tZSA4MCB3ZSBuZWVkIGEgMW1zIGRlbGF5LCBvciB0aGUgYW5pbWF0aW9uc3RhcnQgZXZlbnQgd29uJ3QgZmlyZS5cbiAgICBhbmltYXRpb246IGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtcztcbiAgfVxuXG4gIC5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWQ6bm90KDotd2Via2l0LWF1dG9maWxsKSB7XG4gICAgLy8gU2luY2UgQ2hyb21lIDgwIHdlIG5lZWQgYSAxbXMgZGVsYXksIG9yIHRoZSBhbmltYXRpb25zdGFydCBldmVudCB3b24ndCBmaXJlLlxuICAgIGFuaW1hdGlvbjogY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtcztcbiAgfVxuXG4gIC8vIFJlbW92ZSB0aGUgcmVzaXplIGhhbmRsZSBvbiBhdXRvc2l6aW5nIHRleHRhcmVhcywgYmVjYXVzZSB3aGF0ZXZlciBoZWlnaHRcbiAgLy8gdGhlIHVzZXIgcmVzaXplZCB0byB3aWxsIGJlIG92ZXJ3cml0dGVuIG9uY2UgdGhleSBzdGFydCB0eXBpbmcgYWdhaW4uXG4gIHRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZSB7XG4gICAgcmVzaXplOiBub25lO1xuICB9XG5cbiAgLy8gVGhpcyBjbGFzcyBpcyB0ZW1wb3JhcmlseSBhcHBsaWVkIHRvIHRoZSB0ZXh0YXJlYSB3aGVuIGl0IGlzIGJlaW5nIG1lYXN1cmVkLiBJdCBpcyBpbW1lZGlhdGVseVxuICAvLyByZW1vdmVkIHdoZW4gbWVhc3VyaW5nIGlzIGNvbXBsZXRlLiBXZSB1c2UgYCFpbXBvcnRhbnRgIHJ1bGVzIGhlcmUgdG8gbWFrZSBzdXJlIHVzZXItc3BlY2lmaWVkXG4gIC8vIHJ1bGVzIGRvIG5vdCBpbnRlcmZlcmUgd2l0aCB0aGUgbWVhc3VyZW1lbnQuXG4gIHRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmcge1xuICAgIGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xuICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcbiAgICAvLyBIYXZpbmcgMnB4IHRvcCBhbmQgYm90dG9tIHBhZGRpbmcgc2VlbXMgdG8gZml4IGEgYnVnIHdoZXJlIENocm9tZSBnZXRzIGFuIGluY29ycmVjdFxuICAgIC8vIG1lYXN1cmVtZW50LiBXZSBqdXN0IGhhdmUgdG8gYWNjb3VudCBmb3IgaXQgbGF0ZXIgYW5kIHN1YnRyYWN0IGl0IG9mZiB0aGUgZmluYWwgcmVzdWx0LlxuICAgIHBhZGRpbmc6IDJweCAwICFpbXBvcnRhbnQ7XG4gICAgYm94LXNpemluZzogY29udGVudC1ib3ggIWltcG9ydGFudDtcbiAgfVxufVxuXG4vLyBVc2VkIHRvIGdlbmVyYXRlIFVJRHMgZm9yIGtleWZyYW1lcyB1c2VkIHRvIGNoYW5nZSB0aGUgdGV4dCBmaWVsZCBhdXRvZmlsbCBzdHlsZXMuXG4kY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItZnJhbWUtY291bnQ6IDA7XG5cbi8vIE1peGluIHVzZWQgdG8gYXBwbHkgY3VzdG9tIGJhY2tncm91bmQgYW5kIGZvcmVncm91bmQgY29sb3JzIHRvIGFuIGF1dG9maWxsZWQgdGV4dCBmaWVsZC5cbi8vIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yNzgxNTQ5L1xuLy8gcmVtb3ZpbmctaW5wdXQtYmFja2dyb3VuZC1jb2xvdXItZm9yLWNocm9tZS1hdXRvY29tcGxldGUjYW5zd2VyLTM3NDMyMjYwXG5AbWl4aW4gY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3IoJGJhY2tncm91bmQsICRmb3JlZ3JvdW5kOicnKSB7XG4gIEBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItI3skY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItZnJhbWUtY291bnR9IHtcbiAgICB0byB7XG4gICAgICBiYWNrZ3JvdW5kOiAkYmFja2dyb3VuZDtcbiAgICAgIEBpZiAkZm9yZWdyb3VuZCAhPSAnJyB7IGNvbG9yOiAkZm9yZWdyb3VuZDsgfVxuICAgIH1cbiAgfVxuXG4gICY6LXdlYmtpdC1hdXRvZmlsbCB7XG4gICAgYW5pbWF0aW9uOiBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci0jeyRjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci1mcmFtZS1jb3VudH0gYm90aDtcbiAgfVxuXG4gICYuY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOi13ZWJraXQtYXV0b2ZpbGwge1xuICAgIC8vIFNpbmNlIENocm9tZSA4MCB3ZSBuZWVkIGEgMW1zIGRlbGF5IGZvciBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCwgb3IgdGhlIGFuaW1hdGlvbnN0YXJ0XG4gICAgLy8gZXZlbnQgd29uJ3QgZmlyZS5cbiAgICBhbmltYXRpb246IGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtcyxcbiAgICAgICAgICAgICAgIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLSN7JGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLWZyYW1lLWNvdW50fSBib3RoO1xuICB9XG5cbiAgJGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLWZyYW1lLWNvdW50OlxuICAgICAgJGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLWZyYW1lLWNvdW50ICsgMSAhZ2xvYmFsO1xufVxuXG5cbi8vIENvcmUgc3R5bGVzIHRoYXQgY2FuIGJlIHVzZWQgdG8gYXBwbHkgbWF0ZXJpYWwgZGVzaWduIHRyZWF0bWVudHMgdG8gYW55IGVsZW1lbnQuXG4vLyBNZWRpYSBxdWVyaWVzXG4vLyBUT0RPKGpvc2VwaHBlcnJvdHQpOiBDaGFuZ2UgJG1hdC14c21hbGwgYW5kICRtYXQtc21hbGwgdXNhZ2VzIHRvIHJlbHkgb24gQnJlYWtwb2ludE9ic2VydmVyLFxuJG1hdC14c21hbGw6ICdtYXgtd2lkdGg6IDU5OXB4JztcbiRtYXQtc21hbGw6ICdtYXgtd2lkdGg6IDk1OXB4JztcblxuLy8gVE9ETzogUmV2aXNpdCBhbGwgei1pbmRpY2VzIGJlZm9yZSBiZXRhXG4vLyB6LWluZGV4IG1hc3RlciBsaXN0XG5cbiR6LWluZGV4LWZhYjogMjAgIWRlZmF1bHQ7XG4kei1pbmRleC1kcmF3ZXI6IDEwMCAhZGVmYXVsdDtcblxuLy8gR2xvYmFsIGNvbnN0YW50c1xuJHBpOiAzLjE0MTU5MjY1O1xuXG4vLyBQYWRkaW5nIGJldHdlZW4gaW5wdXQgdG9nZ2xlcyBhbmQgdGhlaXIgbGFiZWxzXG4kbWF0LXRvZ2dsZS1wYWRkaW5nOiA4cHggIWRlZmF1bHQ7XG4vLyBXaWR0aCBhbmQgaGVpZ2h0IG9mIGlucHV0IHRvZ2dsZXNcbiRtYXQtdG9nZ2xlLXNpemU6IDIwcHggIWRlZmF1bHQ7XG5cbi8vIEVhc2luZyBDdXJ2ZXNcbi8vIFRPRE8oamVsYm91cm4pOiBhbGwgb2YgdGhlc2UgbmVlZCB0byBiZSByZXZpc2l0ZWRcblxuLy8gVGhlIGRlZmF1bHQgYW5pbWF0aW9uIGN1cnZlcyB1c2VkIGJ5IG1hdGVyaWFsIGRlc2lnbi5cbiRtYXQtbGluZWFyLW91dC1zbG93LWluLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKSAhZGVmYXVsdDtcbiRtYXQtZmFzdC1vdXQtc2xvdy1pbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgIWRlZmF1bHQ7XG4kbWF0LWZhc3Qtb3V0LWxpbmVhci1pbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDEsIDEpICFkZWZhdWx0O1xuXG4kZWFzZS1pbi1vdXQtY3VydmUtZnVuY3Rpb246IGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKSAhZGVmYXVsdDtcblxuJHN3aWZ0LWVhc2Utb3V0LWR1cmF0aW9uOiA0MDBtcyAhZGVmYXVsdDtcbiRzd2lmdC1lYXNlLW91dC10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpICFkZWZhdWx0O1xuJHN3aWZ0LWVhc2Utb3V0OiBhbGwgJHN3aWZ0LWVhc2Utb3V0LWR1cmF0aW9uICRzd2lmdC1lYXNlLW91dC10aW1pbmctZnVuY3Rpb24gIWRlZmF1bHQ7XG5cbiRzd2lmdC1lYXNlLWluLWR1cmF0aW9uOiAzMDBtcyAhZGVmYXVsdDtcbiRzd2lmdC1lYXNlLWluLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNTUsIDAsIDAuNTUsIDAuMikgIWRlZmF1bHQ7XG4kc3dpZnQtZWFzZS1pbjogYWxsICRzd2lmdC1lYXNlLWluLWR1cmF0aW9uICRzd2lmdC1lYXNlLWluLXRpbWluZy1mdW5jdGlvbiAhZGVmYXVsdDtcblxuJHN3aWZ0LWVhc2UtaW4tb3V0LWR1cmF0aW9uOiA1MDBtcyAhZGVmYXVsdDtcbiRzd2lmdC1lYXNlLWluLW91dC10aW1pbmctZnVuY3Rpb246ICRlYXNlLWluLW91dC1jdXJ2ZS1mdW5jdGlvbiAhZGVmYXVsdDtcbiRzd2lmdC1lYXNlLWluLW91dDogYWxsICRzd2lmdC1lYXNlLWluLW91dC1kdXJhdGlvbiAkc3dpZnQtZWFzZS1pbi1vdXQtdGltaW5nLWZ1bmN0aW9uICFkZWZhdWx0O1xuXG4kc3dpZnQtbGluZWFyLWR1cmF0aW9uOiA4MG1zICFkZWZhdWx0O1xuJHN3aWZ0LWxpbmVhci10aW1pbmctZnVuY3Rpb246IGxpbmVhciAhZGVmYXVsdDtcbiRzd2lmdC1saW5lYXI6IGFsbCAkc3dpZnQtbGluZWFyLWR1cmF0aW9uICRzd2lmdC1saW5lYXItdGltaW5nLWZ1bmN0aW9uICFkZWZhdWx0O1xuXG5cblxuLy8gQSBjb2xsZWN0aW9uIG9mIG1peGlucyBhbmQgQ1NTIGNsYXNzZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBhcHBseSBlbGV2YXRpb24gdG8gYSBtYXRlcmlhbFxuLy8gZWxlbWVudC5cbi8vIFNlZTogaHR0cHM6Ly9tYXRlcmlhbC5pby9kZXNpZ24vZW52aXJvbm1lbnQvZWxldmF0aW9uLmh0bWxcbi8vIEV4YW1wbGVzOlxuLy9cbi8vXG4vLyAubWF0LWZvbyB7XG4vLyAgIEBpbmNsdWRlICRtYXQtZWxldmF0aW9uKDIpO1xuLy9cbi8vICAgJjphY3RpdmUge1xuLy8gICAgIEBpbmNsdWRlICRtYXQtZWxldmF0aW9uKDgpO1xuLy8gICB9XG4vLyB9XG4vL1xuLy8gPGRpdiBpZD1cImV4dGVybmFsLWNhcmRcIiBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejJcIj48cD5Tb21lIGNvbnRlbnQ8L3A+PC9kaXY+XG4vL1xuLy8gRm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBkZXNpZ24gYmVoaW5kIGhvdyBlbGV2YXRpb24gaXMgaW1wbGVtZW50ZWQsIHNlZSB0aGUgZGVzaWduIGRvYyBhdFxuLy8gaHR0cHM6Ly9nb28uZ2wvS3EwazlaLlxuXG4vLyBDb2xvcnMgZm9yIHVtYnJhLCBwZW51bWJyYSwgYW5kIGFtYmllbnQgc2hhZG93cy4gQXMgZGVzY3JpYmVkIGluIHRoZSBkZXNpZ24gZG9jLCBlYWNoIGVsZXZhdGlvblxuLy8gbGV2ZWwgaXMgY3JlYXRlZCB1c2luZyBhIHNldCBvZiAzIHNoYWRvdyB2YWx1ZXMsIG9uZSBmb3IgdW1icmEgKHRoZSBzaGFkb3cgcmVwcmVzZW50aW5nIHRoZVxuLy8gc3BhY2UgY29tcGxldGVseSBvYnNjdXJlZCBieSBhbiBvYmplY3QgcmVsYXRpdmUgdG8gaXRzIGxpZ2h0IHNvdXJjZSksIG9uZSBmb3IgcGVudW1icmEgKHRoZVxuLy8gc3BhY2UgcGFydGlhbGx5IG9ic2N1cmVkIGJ5IGFuIG9iamVjdCksIGFuZCBvbmUgZm9yIGFtYmllbnQgKHRoZSBzcGFjZSB3aGljaCBjb250YWlucyB0aGUgb2JqZWN0XG4vLyBpdHNlbGYpLiBGb3IgYSBmdXJ0aGVyIGV4cGxhbmF0aW9uIG9mIHRoZXNlIHRlcm1zIGFuZCB0aGVpciBtZWFuaW5ncywgc2VlXG4vLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9VbWJyYSxfcGVudW1icmFfYW5kX2FudHVtYnJhLlxuXG4vLyBNYXBzIGZvciB0aGUgZGlmZmVyZW50IHNoYWRvdyBzZXRzIGFuZCB0aGVpciB2YWx1ZXMgd2l0aGluIGVhY2ggei1zcGFjZS4gVGhlc2UgdmFsdWVzIHdlcmVcbi8vIGNyZWF0ZWQgYnkgdGFraW5nIGEgZmV3IHJlZmVyZW5jZSBzaGFkb3cgc2V0cyBjcmVhdGVkIGJ5IEdvb2dsZSdzIERlc2lnbmVycyBhbmQgaW50ZXJwb2xhdGluZ1xuLy8gYWxsIG9mIHRoZSB2YWx1ZXMgYmV0d2VlbiB0aGVtLlxuXG5AZnVuY3Rpb24gX2dldC11bWJyYS1tYXAoJGNvbG9yLCAkb3BhY2l0eSkge1xuICAkc2hhZG93LWNvbG9yOiBpZih0eXBlLW9mKCRjb2xvcikgPT0gY29sb3IsIHJnYmEoJGNvbG9yLCAkb3BhY2l0eSAqIDAuMiksICRjb2xvcik7XG5cbiAgQHJldHVybiAoXG4gICAgMDogJzBweCAwcHggMHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxOiAnMHB4IDJweCAxcHggLTFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyOiAnMHB4IDNweCAxcHggLTJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAzOiAnMHB4IDNweCAzcHggLTJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA0OiAnMHB4IDJweCA0cHggLTFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA1OiAnMHB4IDNweCA1cHggLTFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA2OiAnMHB4IDNweCA1cHggLTFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA3OiAnMHB4IDRweCA1cHggLTJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA4OiAnMHB4IDVweCA1cHggLTNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA5OiAnMHB4IDVweCA2cHggLTNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMDogJzBweCA2cHggNnB4IC0zcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTE6ICcwcHggNnB4IDdweCAtNHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEyOiAnMHB4IDdweCA4cHggLTRweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMzogJzBweCA3cHggOHB4IC00cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTQ6ICcwcHggN3B4IDlweCAtNHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE1OiAnMHB4IDhweCA5cHggLTVweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNjogJzBweCA4cHggMTBweCAtNXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE3OiAnMHB4IDhweCAxMXB4IC01cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTg6ICcwcHggOXB4IDExcHggLTVweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxOTogJzBweCA5cHggMTJweCAtNnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIwOiAnMHB4IDEwcHggMTNweCAtNnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIxOiAnMHB4IDEwcHggMTNweCAtNnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIyOiAnMHB4IDEwcHggMTRweCAtNnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIzOiAnMHB4IDExcHggMTRweCAtN3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDI0OiAnMHB4IDExcHggMTVweCAtN3B4ICN7JHNoYWRvdy1jb2xvcn0nXG4gICk7XG59XG5cbkBmdW5jdGlvbiBfZ2V0LXBlbnVtYnJhLW1hcCgkY29sb3IsICRvcGFjaXR5KSB7XG4gICRzaGFkb3ctY29sb3I6IGlmKHR5cGUtb2YoJGNvbG9yKSA9PSBjb2xvciwgcmdiYSgkY29sb3IsICRvcGFjaXR5ICogMC4xNCksICRjb2xvcik7XG5cbiAgQHJldHVybiAoXG4gICAgMDogJzBweCAwcHggMHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxOiAnMHB4IDFweCAxcHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDI6ICcwcHggMnB4IDJweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMzogJzBweCAzcHggNHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA0OiAnMHB4IDRweCA1cHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDU6ICcwcHggNXB4IDhweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNjogJzBweCA2cHggMTBweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNzogJzBweCA3cHggMTBweCAxcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgODogJzBweCA4cHggMTBweCAxcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgOTogJzBweCA5cHggMTJweCAxcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTA6ICcwcHggMTBweCAxNHB4IDFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMTogJzBweCAxMXB4IDE1cHggMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEyOiAnMHB4IDEycHggMTdweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTM6ICcwcHggMTNweCAxOXB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNDogJzBweCAxNHB4IDIxcHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE1OiAnMHB4IDE1cHggMjJweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTY6ICcwcHggMTZweCAyNHB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNzogJzBweCAxN3B4IDI2cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE4OiAnMHB4IDE4cHggMjhweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTk6ICcwcHggMTlweCAyOXB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMDogJzBweCAyMHB4IDMxcHggM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIxOiAnMHB4IDIxcHggMzNweCAzcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjI6ICcwcHggMjJweCAzNXB4IDNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMzogJzBweCAyM3B4IDM2cHggM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDI0OiAnMHB4IDI0cHggMzhweCAzcHggI3skc2hhZG93LWNvbG9yfSdcbiAgKTtcbn1cblxuQGZ1bmN0aW9uIF9nZXQtYW1iaWVudC1tYXAoJGNvbG9yLCAkb3BhY2l0eSkge1xuICAkc2hhZG93LWNvbG9yOiBpZih0eXBlLW9mKCRjb2xvcikgPT0gY29sb3IsIHJnYmEoJGNvbG9yLCAkb3BhY2l0eSAqIDAuMTIpLCAkY29sb3IpO1xuXG4gIEByZXR1cm4gKFxuICAgIDA6ICcwcHggMHB4IDBweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTogJzBweCAxcHggM3B4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyOiAnMHB4IDFweCA1cHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDM6ICcwcHggMXB4IDhweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNDogJzBweCAxcHggMTBweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNTogJzBweCAxcHggMTRweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNjogJzBweCAxcHggMThweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNzogJzBweCAycHggMTZweCAxcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgODogJzBweCAzcHggMTRweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgOTogJzBweCAzcHggMTZweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTA6ICcwcHggNHB4IDE4cHggM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDExOiAnMHB4IDRweCAyMHB4IDNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMjogJzBweCA1cHggMjJweCA0cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTM6ICcwcHggNXB4IDI0cHggNHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE0OiAnMHB4IDVweCAyNnB4IDRweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNTogJzBweCA2cHggMjhweCA1cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTY6ICcwcHggNnB4IDMwcHggNXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE3OiAnMHB4IDZweCAzMnB4IDVweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxODogJzBweCA3cHggMzRweCA2cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTk6ICcwcHggN3B4IDM2cHggNnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIwOiAnMHB4IDhweCAzOHB4IDdweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMTogJzBweCA4cHggNDBweCA3cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjI6ICcwcHggOHB4IDQycHggN3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIzOiAnMHB4IDlweCA0NHB4IDhweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyNDogJzBweCA5cHggNDZweCA4cHggI3skc2hhZG93LWNvbG9yfSdcbiAgKTtcbn1cblxuLy8gVGhlIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIGVsZXZhdGlvbiB0cmFuc2l0aW9ucy5cbiRtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tZHVyYXRpb246IDI4MG1zICFkZWZhdWx0O1xuXG4vLyBUaGUgZGVmYXVsdCBlYXNpbmcgdmFsdWUgZm9yIGVsZXZhdGlvbiB0cmFuc2l0aW9ucy5cbiRtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkbWF0LWZhc3Qtb3V0LXNsb3ctaW4tdGltaW5nLWZ1bmN0aW9uO1xuXG4vLyBUaGUgZGVmYXVsdCBjb2xvciBmb3IgZWxldmF0aW9uIHNoYWRvd3MuXG4kbWF0LWVsZXZhdGlvbi1jb2xvcjogYmxhY2sgIWRlZmF1bHQ7XG5cbi8vIFRoZSBkZWZhdWx0IG9wYWNpdHkgc2NhbGluZyB2YWx1ZSBmb3IgZWxldmF0aW9uIHNoYWRvd3MuXG4kbWF0LWVsZXZhdGlvbi1vcGFjaXR5OiAxICFkZWZhdWx0O1xuXG4vLyBQcmVmaXggZm9yIGVsZXZhdGlvbi1yZWxhdGVkIHNlbGVjdG9ycy5cbiRfbWF0LWVsZXZhdGlvbi1wcmVmaXg6ICdtYXQtZWxldmF0aW9uLXonO1xuXG4vLyBBcHBsaWVzIHRoZSBjb3JyZWN0IGNzcyBydWxlcyB0byBhbiBlbGVtZW50IHRvIGdpdmUgaXQgdGhlIGVsZXZhdGlvbiBzcGVjaWZpZWQgYnkgJHpWYWx1ZS5cbi8vIFRoZSAkelZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyNC5cbkBtaXhpbiBtYXQtZWxldmF0aW9uKCR6VmFsdWUsICRjb2xvcjogJG1hdC1lbGV2YXRpb24tY29sb3IsICRvcGFjaXR5OiAkbWF0LWVsZXZhdGlvbi1vcGFjaXR5KSB7XG4gIEBpZiB0eXBlLW9mKCR6VmFsdWUpICE9IG51bWJlciBvciBub3QgdW5pdGxlc3MoJHpWYWx1ZSkge1xuICAgIEBlcnJvciAnJHpWYWx1ZSBtdXN0IGJlIGEgdW5pdGxlc3MgbnVtYmVyJztcbiAgfVxuICBAaWYgJHpWYWx1ZSA8IDAgb3IgJHpWYWx1ZSA+IDI0IHtcbiAgICBAZXJyb3IgJyR6VmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDI0JztcbiAgfVxuXG4gIGJveC1zaGFkb3c6ICN7bWFwLWdldChfZ2V0LXVtYnJhLW1hcCgkY29sb3IsICRvcGFjaXR5KSwgJHpWYWx1ZSl9LFxuICAgICAgICAgICAgICAje21hcC1nZXQoX2dldC1wZW51bWJyYS1tYXAoJGNvbG9yLCAkb3BhY2l0eSksICR6VmFsdWUpfSxcbiAgICAgICAgICAgICAgI3ttYXAtZ2V0KF9nZXQtYW1iaWVudC1tYXAoJGNvbG9yLCAkb3BhY2l0eSksICR6VmFsdWUpfTtcbn1cblxuQG1peGluIF9tYXQtdGhlbWUtZWxldmF0aW9uKCR6VmFsdWUsICR0aGVtZSwgJG9wYWNpdHk6ICRtYXQtZWxldmF0aW9uLW9wYWNpdHkpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGVsZXZhdGlvbi1jb2xvcjogbWFwLWdldCgkZm9yZWdyb3VuZCwgZWxldmF0aW9uKTtcbiAgJGVsZXZhdGlvbi1jb2xvci1vci1kZWZhdWx0OiBpZigkZWxldmF0aW9uLWNvbG9yID09IG51bGwsICRtYXQtZWxldmF0aW9uLWNvbG9yLCAkZWxldmF0aW9uLWNvbG9yKTtcblxuICBAaW5jbHVkZSBtYXQtZWxldmF0aW9uKCR6VmFsdWUsICRlbGV2YXRpb24tY29sb3Itb3ItZGVmYXVsdCwgJG9wYWNpdHkpO1xufVxuXG4vLyBBcHBsaWVzIHRoZSBlbGV2YXRpb24gdG8gYW4gZWxlbWVudCBpbiBhIG1hbm5lciB0aGF0IGFsbG93c1xuLy8gY29uc3VtZXJzIHRvIG92ZXJyaWRlIGl0IHZpYSB0aGUgTWF0ZXJpYWwgZWxldmF0aW9uIGNsYXNzZXMuXG5AbWl4aW4gbWF0LW92ZXJyaWRhYmxlLWVsZXZhdGlvbihcbiAgICAkelZhbHVlLFxuICAgICRjb2xvcjogJG1hdC1lbGV2YXRpb24tY29sb3IsXG4gICAgJG9wYWNpdHk6ICRtYXQtZWxldmF0aW9uLW9wYWNpdHkpIHtcbiAgJjpub3QoW2NsYXNzKj0nI3skX21hdC1lbGV2YXRpb24tcHJlZml4fSddKSB7XG4gICAgQGluY2x1ZGUgbWF0LWVsZXZhdGlvbigkelZhbHVlLCAkY29sb3IsICRvcGFjaXR5KTtcbiAgfVxufVxuXG5AbWl4aW4gX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oJHpWYWx1ZSwgJHRoZW1lLCAkb3BhY2l0eTogJG1hdC1lbGV2YXRpb24tb3BhY2l0eSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkZWxldmF0aW9uLWNvbG9yOiBtYXAtZ2V0KCRmb3JlZ3JvdW5kLCBlbGV2YXRpb24pO1xuICAkZWxldmF0aW9uLWNvbG9yLW9yLWRlZmF1bHQ6IGlmKCRlbGV2YXRpb24tY29sb3IgPT0gbnVsbCwgJG1hdC1lbGV2YXRpb24tY29sb3IsICRlbGV2YXRpb24tY29sb3IpO1xuXG4gIEBpbmNsdWRlIG1hdC1vdmVycmlkYWJsZS1lbGV2YXRpb24oJHpWYWx1ZSwgJGVsZXZhdGlvbi1jb2xvci1vci1kZWZhdWx0LCAkb3BhY2l0eSk7XG59XG5cbi8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBjYW4gYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yIGEgdHJhbnNpdGlvbiBwcm9wZXJ0eSBmb3IgZWxldmF0aW9uLlxuLy8gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5IGlzIHVzZWZ1bCBpbiBzaXR1YXRpb25zIHdoZXJlIGEgY29tcG9uZW50IG5lZWRzIHRvIHRyYW5zaXRpb25cbi8vIG1vcmUgdGhhbiBvbmUgcHJvcGVydHkuXG4vL1xuLy8gLmZvbyB7XG4vLyAgIHRyYW5zaXRpb246IG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi1wcm9wZXJ0eS12YWx1ZSgpLCBvcGFjaXR5IDEwMG1zIGVhc2U7XG4vLyB9XG5AZnVuY3Rpb24gbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLXByb3BlcnR5LXZhbHVlKFxuICAgICRkdXJhdGlvbjogJG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi1kdXJhdGlvbixcbiAgICAkZWFzaW5nOiAkbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikge1xuICBAcmV0dXJuIGJveC1zaGFkb3cgI3skZHVyYXRpb259ICN7JGVhc2luZ307XG59XG5cbi8vIEFwcGxpZXMgdGhlIGNvcnJlY3QgY3NzIHJ1bGVzIG5lZWRlZCB0byBoYXZlIGFuIGVsZW1lbnQgdHJhbnNpdGlvbiBiZXR3ZWVuIGVsZXZhdGlvbnMuXG4vLyBUaGlzIG1peGluIHNob3VsZCBiZSBhcHBsaWVkIHRvIGVsZW1lbnRzIHdob3NlIGVsZXZhdGlvbiB2YWx1ZXMgd2lsbCBjaGFuZ2UgZGVwZW5kaW5nIG9uIHRoZWlyXG4vLyBjb250ZXh0IChlLmcuIHdoZW4gYWN0aXZlIG9yIGRpc2FibGVkKS5cbi8vXG4vLyBOT1RFKHRyYXZpc2thdWZtYW4pOiBCb3RoIHRoaXMgbWl4aW4gYW5kIHRoZSBhYm92ZSBmdW5jdGlvbiB1c2UgZGVmYXVsdCBwYXJhbWV0ZXJzIHNvIHRoZXkgY2FuXG4vLyBiZSB1c2VkIGluIHRoZSBzYW1lIHdheSBieSBjbGllbnRzLlxuQG1peGluIG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbihcbiAgICAkZHVyYXRpb246ICRtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tZHVyYXRpb24sXG4gICAgJGVhc2luZzogJG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pIHtcbiAgdHJhbnNpdGlvbjogbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLXByb3BlcnR5LXZhbHVlKCRkdXJhdGlvbiwgJGVhc2luZyk7XG59XG5cbi8vIENvbG9yIHBhbGV0dGVzIGZyb20gdGhlIE1hdGVyaWFsIERlc2lnbiBzcGVjLlxuLy8gU2VlIGh0dHBzOi8vbWF0ZXJpYWwuaW8vZGVzaWduL2NvbG9yL1xuLy9cbi8vIENvbnRyYXN0IGNvbG9ycyBhcmUgaGFyZC1jb2RlZCBiZWNhdXNlIGl0IGlzIHRvbyBkaWZmaWN1bHQgKHByb2JhYmx5IGltcG9zc2libGUpIHRvXG4vLyBjYWxjdWxhdGUgdGhlbS4gVGhlc2UgY29udHJhc3QgY29sb3JzIGFyZSBwdWxsZWQgZnJvbSB0aGUgcHVibGljIE1hdGVyaWFsIERlc2lnbiBzcGVjIHN3YXRjaGVzLlxuLy8gV2hpbGUgdGhlIGNvbnRyYXN0IGNvbG9ycyBpbiB0aGUgc3BlYyBhcmUgbm90IHByZXNjcmlwdGl2ZSwgd2UgdXNlIHRoZW0gZm9yIGNvbnZlbmllbmNlLlxuXG5cbi8vIEBkZXByZWNhdGVkIHJlbmFtZWQgdG8gJGRhcmstcHJpbWFyeS10ZXh0LlxuLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMFxuJGJsYWNrLTg3LW9wYWNpdHk6IHJnYmEoYmxhY2ssIDAuODcpO1xuLy8gQGRlcHJlY2F0ZWQgcmVuYW1lZCB0byAkbGlnaHQtcHJpbWFyeS10ZXh0LlxuLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMFxuJHdoaXRlLTg3LW9wYWNpdHk6IHJnYmEod2hpdGUsIDAuODcpO1xuLy8gQGRlcHJlY2F0ZWQgdXNlICRkYXJrLVtzZWNvbmRhcnktdGV4dCxkaXNhYmxlZC10ZXh0LGRpdmlkZXJzLGZvY3VzZWRdIGluc3RlYWQuXG4vLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wXG4kYmxhY2stMTItb3BhY2l0eTogcmdiYShibGFjaywgMC4xMik7XG4vLyBAZGVwcmVjYXRlZCB1c2UgJGxpZ2h0LVtzZWNvbmRhcnktdGV4dCxkaXNhYmxlZC10ZXh0LGRpdmlkZXJzLGZvY3VzZWRdIGluc3RlYWQuXG4vLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wXG4kd2hpdGUtMTItb3BhY2l0eTogcmdiYSh3aGl0ZSwgMC4xMik7XG4vLyBAZGVwcmVjYXRlZCB1c2UgJGRhcmstW3NlY29uZGFyeS10ZXh0LGRpc2FibGVkLXRleHQsZGl2aWRlcnMsZm9jdXNlZF0gaW5zdGVhZC5cbi8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjBcbiRibGFjay02LW9wYWNpdHk6IHJnYmEoYmxhY2ssIDAuMDYpO1xuLy8gQGRlcHJlY2F0ZWQgdXNlICRsaWdodC1bc2Vjb25kYXJ5LXRleHQsZGlzYWJsZWQtdGV4dCxkaXZpZGVycyxmb2N1c2VkXSBpbnN0ZWFkLlxuLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMFxuJHdoaXRlLTYtb3BhY2l0eTogcmdiYSh3aGl0ZSwgMC4wNik7XG5cbiRkYXJrLXByaW1hcnktdGV4dDogcmdiYShibGFjaywgMC44Nyk7XG4kZGFyay1zZWNvbmRhcnktdGV4dDogcmdiYShibGFjaywgMC41NCk7XG4kZGFyay1kaXNhYmxlZC10ZXh0OiByZ2JhKGJsYWNrLCAwLjM4KTtcbiRkYXJrLWRpdmlkZXJzOiByZ2JhKGJsYWNrLCAwLjEyKTtcbiRkYXJrLWZvY3VzZWQ6IHJnYmEoYmxhY2ssIDAuMTIpO1xuJGxpZ2h0LXByaW1hcnktdGV4dDogd2hpdGU7XG4kbGlnaHQtc2Vjb25kYXJ5LXRleHQ6IHJnYmEod2hpdGUsIDAuNyk7XG4kbGlnaHQtZGlzYWJsZWQtdGV4dDogcmdiYSh3aGl0ZSwgMC41KTtcbiRsaWdodC1kaXZpZGVyczogcmdiYSh3aGl0ZSwgMC4xMik7XG4kbGlnaHQtZm9jdXNlZDogcmdiYSh3aGl0ZSwgMC4xMik7XG5cbiRtYXQtcmVkOiAoXG4gIDUwOiAjZmZlYmVlLFxuICAxMDA6ICNmZmNkZDIsXG4gIDIwMDogI2VmOWE5YSxcbiAgMzAwOiAjZTU3MzczLFxuICA0MDA6ICNlZjUzNTAsXG4gIDUwMDogI2Y0NDMzNixcbiAgNjAwOiAjZTUzOTM1LFxuICA3MDA6ICNkMzJmMmYsXG4gIDgwMDogI2M2MjgyOCxcbiAgOTAwOiAjYjcxYzFjLFxuICBBMTAwOiAjZmY4YTgwLFxuICBBMjAwOiAjZmY1MjUyLFxuICBBNDAwOiAjZmYxNzQ0LFxuICBBNzAwOiAjZDUwMDAwLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtcGluazogKFxuICA1MDogI2ZjZTRlYyxcbiAgMTAwOiAjZjhiYmQwLFxuICAyMDA6ICNmNDhmYjEsXG4gIDMwMDogI2YwNjI5MixcbiAgNDAwOiAjZWM0MDdhLFxuICA1MDA6ICNlOTFlNjMsXG4gIDYwMDogI2Q4MWI2MCxcbiAgNzAwOiAjYzIxODViLFxuICA4MDA6ICNhZDE0NTcsXG4gIDkwMDogIzg4MGU0ZixcbiAgQTEwMDogI2ZmODBhYixcbiAgQTIwMDogI2ZmNDA4MSxcbiAgQTQwMDogI2Y1MDA1NyxcbiAgQTcwMDogI2M1MTE2MixcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LXB1cnBsZTogKFxuICA1MDogI2YzZTVmNSxcbiAgMTAwOiAjZTFiZWU3LFxuICAyMDA6ICNjZTkzZDgsXG4gIDMwMDogI2JhNjhjOCxcbiAgNDAwOiAjYWI0N2JjLFxuICA1MDA6ICM5YzI3YjAsXG4gIDYwMDogIzhlMjRhYSxcbiAgNzAwOiAjN2IxZmEyLFxuICA4MDA6ICM2YTFiOWEsXG4gIDkwMDogIzRhMTQ4YyxcbiAgQTEwMDogI2VhODBmYyxcbiAgQTIwMDogI2UwNDBmYixcbiAgQTQwMDogI2Q1MDBmOSxcbiAgQTcwMDogI2FhMDBmZixcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtZGVlcC1wdXJwbGU6IChcbiAgNTA6ICNlZGU3ZjYsXG4gIDEwMDogI2QxYzRlOSxcbiAgMjAwOiAjYjM5ZGRiLFxuICAzMDA6ICM5NTc1Y2QsXG4gIDQwMDogIzdlNTdjMixcbiAgNTAwOiAjNjczYWI3LFxuICA2MDA6ICM1ZTM1YjEsXG4gIDcwMDogIzUxMmRhOCxcbiAgODAwOiAjNDUyN2EwLFxuICA5MDA6ICMzMTFiOTIsXG4gIEExMDA6ICNiMzg4ZmYsXG4gIEEyMDA6ICM3YzRkZmYsXG4gIEE0MDA6ICM2NTFmZmYsXG4gIEE3MDA6ICM2MjAwZWEsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWluZGlnbzogKFxuICA1MDogI2U4ZWFmNixcbiAgMTAwOiAjYzVjYWU5LFxuICAyMDA6ICM5ZmE4ZGEsXG4gIDMwMDogIzc5ODZjYixcbiAgNDAwOiAjNWM2YmMwLFxuICA1MDA6ICMzZjUxYjUsXG4gIDYwMDogIzM5NDlhYixcbiAgNzAwOiAjMzAzZjlmLFxuICA4MDA6ICMyODM1OTMsXG4gIDkwMDogIzFhMjM3ZSxcbiAgQTEwMDogIzhjOWVmZixcbiAgQTIwMDogIzUzNmRmZSxcbiAgQTQwMDogIzNkNWFmZSxcbiAgQTcwMDogIzMwNGZmZSxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtYmx1ZTogKFxuICA1MDogI2UzZjJmZCxcbiAgMTAwOiAjYmJkZWZiLFxuICAyMDA6ICM5MGNhZjksXG4gIDMwMDogIzY0YjVmNixcbiAgNDAwOiAjNDJhNWY1LFxuICA1MDA6ICMyMTk2ZjMsXG4gIDYwMDogIzFlODhlNSxcbiAgNzAwOiAjMTk3NmQyLFxuICA4MDA6ICMxNTY1YzAsXG4gIDkwMDogIzBkNDdhMSxcbiAgQTEwMDogIzgyYjFmZixcbiAgQTIwMDogIzQ0OGFmZixcbiAgQTQwMDogIzI5NzlmZixcbiAgQTcwMDogIzI5NjJmZixcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWxpZ2h0LWJsdWU6IChcbiAgNTA6ICNlMWY1ZmUsXG4gIDEwMDogI2IzZTVmYyxcbiAgMjAwOiAjODFkNGZhLFxuICAzMDA6ICM0ZmMzZjcsXG4gIDQwMDogIzI5YjZmNixcbiAgNTAwOiAjMDNhOWY0LFxuICA2MDA6ICMwMzliZTUsXG4gIDcwMDogIzAyODhkMSxcbiAgODAwOiAjMDI3N2JkLFxuICA5MDA6ICMwMTU3OWIsXG4gIEExMDA6ICM4MGQ4ZmYsXG4gIEEyMDA6ICM0MGM0ZmYsXG4gIEE0MDA6ICMwMGIwZmYsXG4gIEE3MDA6ICMwMDkxZWEsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtY3lhbjogKFxuICA1MDogI2UwZjdmYSxcbiAgMTAwOiAjYjJlYmYyLFxuICAyMDA6ICM4MGRlZWEsXG4gIDMwMDogIzRkZDBlMSxcbiAgNDAwOiAjMjZjNmRhLFxuICA1MDA6ICMwMGJjZDQsXG4gIDYwMDogIzAwYWNjMSxcbiAgNzAwOiAjMDA5N2E3LFxuICA4MDA6ICMwMDgzOGYsXG4gIDkwMDogIzAwNjA2NCxcbiAgQTEwMDogIzg0ZmZmZixcbiAgQTIwMDogIzE4ZmZmZixcbiAgQTQwMDogIzAwZTVmZixcbiAgQTcwMDogIzAwYjhkNCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LXRlYWw6IChcbiAgNTA6ICNlMGYyZjEsXG4gIDEwMDogI2IyZGZkYixcbiAgMjAwOiAjODBjYmM0LFxuICAzMDA6ICM0ZGI2YWMsXG4gIDQwMDogIzI2YTY5YSxcbiAgNTAwOiAjMDA5Njg4LFxuICA2MDA6ICMwMDg5N2IsXG4gIDcwMDogIzAwNzk2YixcbiAgODAwOiAjMDA2OTVjLFxuICA5MDA6ICMwMDRkNDAsXG4gIEExMDA6ICNhN2ZmZWIsXG4gIEEyMDA6ICM2NGZmZGEsXG4gIEE0MDA6ICMxZGU5YjYsXG4gIEE3MDA6ICMwMGJmYTUsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1ncmVlbjogKFxuICA1MDogI2U4ZjVlOSxcbiAgMTAwOiAjYzhlNmM5LFxuICAyMDA6ICNhNWQ2YTcsXG4gIDMwMDogIzgxYzc4NCxcbiAgNDAwOiAjNjZiYjZhLFxuICA1MDA6ICM0Y2FmNTAsXG4gIDYwMDogIzQzYTA0NyxcbiAgNzAwOiAjMzg4ZTNjLFxuICA4MDA6ICMyZTdkMzIsXG4gIDkwMDogIzFiNWUyMCxcbiAgQTEwMDogI2I5ZjZjYSxcbiAgQTIwMDogIzY5ZjBhZSxcbiAgQTQwMDogIzAwZTY3NixcbiAgQTcwMDogIzAwYzg1MyxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtbGlnaHQtZ3JlZW46IChcbiAgNTA6ICNmMWY4ZTksXG4gIDEwMDogI2RjZWRjOCxcbiAgMjAwOiAjYzVlMWE1LFxuICAzMDA6ICNhZWQ1ODEsXG4gIDQwMDogIzljY2M2NSxcbiAgNTAwOiAjOGJjMzRhLFxuICA2MDA6ICM3Y2IzNDIsXG4gIDcwMDogIzY4OWYzOCxcbiAgODAwOiAjNTU4YjJmLFxuICA5MDA6ICMzMzY5MWUsXG4gIEExMDA6ICNjY2ZmOTAsXG4gIEEyMDA6ICNiMmZmNTksXG4gIEE0MDA6ICM3NmZmMDMsXG4gIEE3MDA6ICM2NGRkMTcsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtbGltZTogKFxuICA1MDogI2Y5ZmJlNyxcbiAgMTAwOiAjZjBmNGMzLFxuICAyMDA6ICNlNmVlOWMsXG4gIDMwMDogI2RjZTc3NSxcbiAgNDAwOiAjZDRlMTU3LFxuICA1MDA6ICNjZGRjMzksXG4gIDYwMDogI2MwY2EzMyxcbiAgNzAwOiAjYWZiNDJiLFxuICA4MDA6ICM5ZTlkMjQsXG4gIDkwMDogIzgyNzcxNyxcbiAgQTEwMDogI2Y0ZmY4MSxcbiAgQTIwMDogI2VlZmY0MSxcbiAgQTQwMDogI2M2ZmYwMCxcbiAgQTcwMDogI2FlZWEwMCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQteWVsbG93OiAoXG4gIDUwOiAjZmZmZGU3LFxuICAxMDA6ICNmZmY5YzQsXG4gIDIwMDogI2ZmZjU5ZCxcbiAgMzAwOiAjZmZmMTc2LFxuICA0MDA6ICNmZmVlNTgsXG4gIDUwMDogI2ZmZWIzYixcbiAgNjAwOiAjZmRkODM1LFxuICA3MDA6ICNmYmMwMmQsXG4gIDgwMDogI2Y5YTgyNSxcbiAgOTAwOiAjZjU3ZjE3LFxuICBBMTAwOiAjZmZmZjhkLFxuICBBMjAwOiAjZmZmZjAwLFxuICBBNDAwOiAjZmZlYTAwLFxuICBBNzAwOiAjZmZkNjAwLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWFtYmVyOiAoXG4gIDUwOiAjZmZmOGUxLFxuICAxMDA6ICNmZmVjYjMsXG4gIDIwMDogI2ZmZTA4MixcbiAgMzAwOiAjZmZkNTRmLFxuICA0MDA6ICNmZmNhMjgsXG4gIDUwMDogI2ZmYzEwNyxcbiAgNjAwOiAjZmZiMzAwLFxuICA3MDA6ICNmZmEwMDAsXG4gIDgwMDogI2ZmOGYwMCxcbiAgOTAwOiAjZmY2ZjAwLFxuICBBMTAwOiAjZmZlNTdmLFxuICBBMjAwOiAjZmZkNzQwLFxuICBBNDAwOiAjZmZjNDAwLFxuICBBNzAwOiAjZmZhYjAwLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LW9yYW5nZTogKFxuICA1MDogI2ZmZjNlMCxcbiAgMTAwOiAjZmZlMGIyLFxuICAyMDA6ICNmZmNjODAsXG4gIDMwMDogI2ZmYjc0ZCxcbiAgNDAwOiAjZmZhNzI2LFxuICA1MDA6ICNmZjk4MDAsXG4gIDYwMDogI2ZiOGMwMCxcbiAgNzAwOiAjZjU3YzAwLFxuICA4MDA6ICNlZjZjMDAsXG4gIDkwMDogI2U2NTEwMCxcbiAgQTEwMDogI2ZmZDE4MCxcbiAgQTIwMDogI2ZmYWI0MCxcbiAgQTQwMDogI2ZmOTEwMCxcbiAgQTcwMDogI2ZmNmQwMCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogYmxhY2ssXG4gIClcbik7XG5cbiRtYXQtZGVlcC1vcmFuZ2U6IChcbiAgNTA6ICNmYmU5ZTcsXG4gIDEwMDogI2ZmY2NiYyxcbiAgMjAwOiAjZmZhYjkxLFxuICAzMDA6ICNmZjhhNjUsXG4gIDQwMDogI2ZmNzA0MyxcbiAgNTAwOiAjZmY1NzIyLFxuICA2MDA6ICNmNDUxMWUsXG4gIDcwMDogI2U2NGExOSxcbiAgODAwOiAjZDg0MzE1LFxuICA5MDA6ICNiZjM2MGMsXG4gIEExMDA6ICNmZjllODAsXG4gIEEyMDA6ICNmZjZlNDAsXG4gIEE0MDA6ICNmZjNkMDAsXG4gIEE3MDA6ICNkZDJjMDAsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWJyb3duOiAoXG4gIDUwOiAjZWZlYmU5LFxuICAxMDA6ICNkN2NjYzgsXG4gIDIwMDogI2JjYWFhNCxcbiAgMzAwOiAjYTE4ODdmLFxuICA0MDA6ICM4ZDZlNjMsXG4gIDUwMDogIzc5NTU0OCxcbiAgNjAwOiAjNmQ0YzQxLFxuICA3MDA6ICM1ZDQwMzcsXG4gIDgwMDogIzRlMzQyZSxcbiAgOTAwOiAjM2UyNzIzLFxuICBBMTAwOiAjZDdjY2M4LFxuICBBMjAwOiAjYmNhYWE0LFxuICBBNDAwOiAjOGQ2ZTYzLFxuICBBNzAwOiAjNWQ0MDM3LFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWdyZXk6IChcbiAgNTA6ICNmYWZhZmEsXG4gIDEwMDogI2Y1ZjVmNSxcbiAgMjAwOiAjZWVlZWVlLFxuICAzMDA6ICNlMGUwZTAsXG4gIDQwMDogI2JkYmRiZCxcbiAgNTAwOiAjOWU5ZTllLFxuICA2MDA6ICM3NTc1NzUsXG4gIDcwMDogIzYxNjE2MSxcbiAgODAwOiAjNDI0MjQyLFxuICA5MDA6ICMyMTIxMjEsXG4gIEExMDA6ICNmZmZmZmYsXG4gIEEyMDA6ICNlZWVlZWUsXG4gIEE0MDA6ICNiZGJkYmQsXG4gIEE3MDA6ICM2MTYxNjEsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuLy8gQWxpYXMgZm9yIGFsdGVybmF0ZSBzcGVsbGluZy5cbiRtYXQtZ3JheTogJG1hdC1ncmV5O1xuXG4kbWF0LWJsdWUtZ3JleTogKFxuICA1MDogI2VjZWZmMSxcbiAgMTAwOiAjY2ZkOGRjLFxuICAyMDA6ICNiMGJlYzUsXG4gIDMwMDogIzkwYTRhZSxcbiAgNDAwOiAjNzg5MDljLFxuICA1MDA6ICM2MDdkOGIsXG4gIDYwMDogIzU0NmU3YSxcbiAgNzAwOiAjNDU1YTY0LFxuICA4MDA6ICMzNzQ3NGYsXG4gIDkwMDogIzI2MzIzOCxcbiAgQTEwMDogI2NmZDhkYyxcbiAgQTIwMDogI2IwYmVjNSxcbiAgQTQwMDogIzc4OTA5YyxcbiAgQTcwMDogIzQ1NWE2NCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4vLyBBbGlhcyBmb3IgYWx0ZXJuYXRlIHNwZWxsaW5nLlxuJG1hdC1ibHVlLWdyYXk6ICRtYXQtYmx1ZS1ncmV5O1xuXG5cbi8vIEJhY2tncm91bmQgcGFsZXR0ZSBmb3IgbGlnaHQgdGhlbWVzLlxuJG1hdC1saWdodC10aGVtZS1iYWNrZ3JvdW5kOiAoXG4gIHN0YXR1cy1iYXI6IG1hcF9nZXQoJG1hdC1ncmV5LCAzMDApLFxuICBhcHAtYmFyOiAgICBtYXBfZ2V0KCRtYXQtZ3JleSwgMTAwKSxcbiAgYmFja2dyb3VuZDogbWFwX2dldCgkbWF0LWdyZXksIDUwKSxcbiAgaG92ZXI6ICAgICAgcmdiYShibGFjaywgMC4wNCksIC8vIFRPRE8oa2FyYSk6IGNoZWNrIHN0eWxlIHdpdGggTWF0ZXJpYWwgRGVzaWduIFVYXG4gIGNhcmQ6ICAgICAgIHdoaXRlLFxuICBkaWFsb2c6ICAgICB3aGl0ZSxcbiAgZGlzYWJsZWQtYnV0dG9uOiByZ2JhKGJsYWNrLCAwLjEyKSxcbiAgcmFpc2VkLWJ1dHRvbjogd2hpdGUsXG4gIGZvY3VzZWQtYnV0dG9uOiAkZGFyay1mb2N1c2VkLFxuICBzZWxlY3RlZC1idXR0b246IG1hcF9nZXQoJG1hdC1ncmV5LCAzMDApLFxuICBzZWxlY3RlZC1kaXNhYmxlZC1idXR0b246IG1hcF9nZXQoJG1hdC1ncmV5LCA0MDApLFxuICBkaXNhYmxlZC1idXR0b24tdG9nZ2xlOiBtYXBfZ2V0KCRtYXQtZ3JleSwgMjAwKSxcbiAgdW5zZWxlY3RlZC1jaGlwOiBtYXBfZ2V0KCRtYXQtZ3JleSwgMzAwKSxcbiAgZGlzYWJsZWQtbGlzdC1vcHRpb246IG1hcF9nZXQoJG1hdC1ncmV5LCAyMDApLFxuICB0b29sdGlwOiBtYXBfZ2V0KCRtYXQtZ3JleSwgNzAwKSxcbik7XG5cbi8vIEJhY2tncm91bmQgcGFsZXR0ZSBmb3IgZGFyayB0aGVtZXMuXG4kbWF0LWRhcmstdGhlbWUtYmFja2dyb3VuZDogKFxuICBzdGF0dXMtYmFyOiBibGFjayxcbiAgYXBwLWJhcjogICAgbWFwX2dldCgkbWF0LWdyZXksIDkwMCksXG4gIGJhY2tncm91bmQ6ICMzMDMwMzAsXG4gIGhvdmVyOiAgICAgIHJnYmEod2hpdGUsIDAuMDQpLCAvLyBUT0RPKGthcmEpOiBjaGVjayBzdHlsZSB3aXRoIE1hdGVyaWFsIERlc2lnbiBVWFxuICBjYXJkOiAgICAgICBtYXBfZ2V0KCRtYXQtZ3JleSwgODAwKSxcbiAgZGlhbG9nOiAgICAgbWFwX2dldCgkbWF0LWdyZXksIDgwMCksXG4gIGRpc2FibGVkLWJ1dHRvbjogcmdiYSh3aGl0ZSwgMC4xMiksXG4gIHJhaXNlZC1idXR0b246IG1hcC1nZXQoJG1hdC1ncmV5LCA4MDApLFxuICBmb2N1c2VkLWJ1dHRvbjogJGxpZ2h0LWZvY3VzZWQsXG4gIHNlbGVjdGVkLWJ1dHRvbjogbWFwX2dldCgkbWF0LWdyZXksIDkwMCksXG4gIHNlbGVjdGVkLWRpc2FibGVkLWJ1dHRvbjogbWFwX2dldCgkbWF0LWdyZXksIDgwMCksXG4gIGRpc2FibGVkLWJ1dHRvbi10b2dnbGU6IGJsYWNrLFxuICB1bnNlbGVjdGVkLWNoaXA6IG1hcF9nZXQoJG1hdC1ncmV5LCA3MDApLFxuICBkaXNhYmxlZC1saXN0LW9wdGlvbjogYmxhY2ssXG4gIHRvb2x0aXA6IG1hcF9nZXQoJG1hdC1ncmV5LCA3MDApLFxuKTtcblxuLy8gRm9yZWdyb3VuZCBwYWxldHRlIGZvciBsaWdodCB0aGVtZXMuXG4kbWF0LWxpZ2h0LXRoZW1lLWZvcmVncm91bmQ6IChcbiAgYmFzZTogICAgICAgICAgICAgIGJsYWNrLFxuICBkaXZpZGVyOiAgICAgICAgICAgJGRhcmstZGl2aWRlcnMsXG4gIGRpdmlkZXJzOiAgICAgICAgICAkZGFyay1kaXZpZGVycyxcbiAgZGlzYWJsZWQ6ICAgICAgICAgICRkYXJrLWRpc2FibGVkLXRleHQsXG4gIGRpc2FibGVkLWJ1dHRvbjogICByZ2JhKGJsYWNrLCAwLjI2KSxcbiAgZGlzYWJsZWQtdGV4dDogICAgICRkYXJrLWRpc2FibGVkLXRleHQsXG4gIGVsZXZhdGlvbjogICAgICAgICBibGFjayxcbiAgaGludC10ZXh0OiAgICAgICAgICRkYXJrLWRpc2FibGVkLXRleHQsXG4gIHNlY29uZGFyeS10ZXh0OiAgICAkZGFyay1zZWNvbmRhcnktdGV4dCxcbiAgaWNvbjogICAgICAgICAgICAgIHJnYmEoYmxhY2ssIDAuNTQpLFxuICBpY29uczogICAgICAgICAgICAgcmdiYShibGFjaywgMC41NCksXG4gIHRleHQ6ICAgICAgICAgICAgICByZ2JhKGJsYWNrLCAwLjg3KSxcbiAgc2xpZGVyLW1pbjogICAgICAgIHJnYmEoYmxhY2ssIDAuODcpLFxuICBzbGlkZXItb2ZmOiAgICAgICAgcmdiYShibGFjaywgMC4yNiksXG4gIHNsaWRlci1vZmYtYWN0aXZlOiByZ2JhKGJsYWNrLCAwLjM4KSxcbik7XG5cbi8vIEZvcmVncm91bmQgcGFsZXR0ZSBmb3IgZGFyayB0aGVtZXMuXG4kbWF0LWRhcmstdGhlbWUtZm9yZWdyb3VuZDogKFxuICBiYXNlOiAgICAgICAgICAgICAgd2hpdGUsXG4gIGRpdmlkZXI6ICAgICAgICAgICAkbGlnaHQtZGl2aWRlcnMsXG4gIGRpdmlkZXJzOiAgICAgICAgICAkbGlnaHQtZGl2aWRlcnMsXG4gIGRpc2FibGVkOiAgICAgICAgICAkbGlnaHQtZGlzYWJsZWQtdGV4dCxcbiAgZGlzYWJsZWQtYnV0dG9uOiAgIHJnYmEod2hpdGUsIDAuMyksXG4gIGRpc2FibGVkLXRleHQ6ICAgICAkbGlnaHQtZGlzYWJsZWQtdGV4dCxcbiAgZWxldmF0aW9uOiAgICAgICAgIGJsYWNrLFxuICBoaW50LXRleHQ6ICAgICAgICAgJGxpZ2h0LWRpc2FibGVkLXRleHQsXG4gIHNlY29uZGFyeS10ZXh0OiAgICAkbGlnaHQtc2Vjb25kYXJ5LXRleHQsXG4gIGljb246ICAgICAgICAgICAgICB3aGl0ZSxcbiAgaWNvbnM6ICAgICAgICAgICAgIHdoaXRlLFxuICB0ZXh0OiAgICAgICAgICAgICAgd2hpdGUsXG4gIHNsaWRlci1taW46ICAgICAgICB3aGl0ZSxcbiAgc2xpZGVyLW9mZjogICAgICAgIHJnYmEod2hpdGUsIDAuMyksXG4gIHNsaWRlci1vZmYtYWN0aXZlOiByZ2JhKHdoaXRlLCAwLjMpLFxuKTtcblxuXG5cbi8vIEZvciBhIGdpdmVuIGh1ZSBpbiBhIHBhbGV0dGUsIHJldHVybiB0aGUgY29udHJhc3QgY29sb3IgZnJvbSB0aGUgbWFwIG9mIGNvbnRyYXN0IHBhbGV0dGVzLlxuLy8gQHBhcmFtICRjb2xvci1tYXBcbi8vIEBwYXJhbSAkaHVlXG5AZnVuY3Rpb24gbWF0LWNvbnRyYXN0KCRwYWxldHRlLCAkaHVlKSB7XG4gIEByZXR1cm4gbWFwLWdldChtYXAtZ2V0KCRwYWxldHRlLCBjb250cmFzdCksICRodWUpO1xufVxuXG5cbi8vIENyZWF0ZXMgYSBtYXAgb2YgaHVlcyB0byBjb2xvcnMgZm9yIGEgdGhlbWUuIFRoaXMgaXMgdXNlZCB0byBkZWZpbmUgYSB0aGVtZSBwYWxldHRlIGluIHRlcm1zXG4vLyBvZiB0aGUgTWF0ZXJpYWwgRGVzaWduIGh1ZXMuXG4vLyBAcGFyYW0gJGNvbG9yLW1hcFxuLy8gQHBhcmFtICRwcmltYXJ5XG4vLyBAcGFyYW0gJGxpZ2h0ZXJcbkBmdW5jdGlvbiBtYXQtcGFsZXR0ZSgkYmFzZS1wYWxldHRlLCAkZGVmYXVsdDogNTAwLCAkbGlnaHRlcjogMTAwLCAkZGFya2VyOiA3MDAsICR0ZXh0OiAkZGVmYXVsdCkge1xuICAkcmVzdWx0OiBtYXBfbWVyZ2UoJGJhc2UtcGFsZXR0ZSwgKFxuICAgIGRlZmF1bHQ6IG1hcC1nZXQoJGJhc2UtcGFsZXR0ZSwgJGRlZmF1bHQpLFxuICAgIGxpZ2h0ZXI6IG1hcC1nZXQoJGJhc2UtcGFsZXR0ZSwgJGxpZ2h0ZXIpLFxuICAgIGRhcmtlcjogbWFwLWdldCgkYmFzZS1wYWxldHRlLCAkZGFya2VyKSxcbiAgICB0ZXh0OiBtYXAtZ2V0KCRiYXNlLXBhbGV0dGUsICR0ZXh0KSxcblxuICAgIGRlZmF1bHQtY29udHJhc3Q6IG1hdC1jb250cmFzdCgkYmFzZS1wYWxldHRlLCAkZGVmYXVsdCksXG4gICAgbGlnaHRlci1jb250cmFzdDogbWF0LWNvbnRyYXN0KCRiYXNlLXBhbGV0dGUsICRsaWdodGVyKSxcbiAgICBkYXJrZXItY29udHJhc3Q6IG1hdC1jb250cmFzdCgkYmFzZS1wYWxldHRlLCAkZGFya2VyKVxuICApKTtcblxuICAvLyBGb3IgZWFjaCBodWUgaW4gdGhlIHBhbGV0dGUsIGFkZCBhIFwiLWNvbnRyYXN0XCIgY29sb3IgdG8gdGhlIG1hcC5cbiAgQGVhY2ggJGh1ZSwgJGNvbG9yIGluICRiYXNlLXBhbGV0dGUge1xuICAgICRyZXN1bHQ6IG1hcF9tZXJnZSgkcmVzdWx0LCAoXG4gICAgICAnI3skaHVlfS1jb250cmFzdCc6IG1hdC1jb250cmFzdCgkYmFzZS1wYWxldHRlLCAkaHVlKVxuICAgICkpO1xuICB9XG5cbiAgQHJldHVybiAkcmVzdWx0O1xufVxuXG5cbi8vIEdldHMgYSBjb2xvciBmcm9tIGEgdGhlbWUgcGFsZXR0ZSAodGhlIG91dHB1dCBvZiBtYXQtcGFsZXR0ZSkuXG4vLyBUaGUgaHVlIGNhbiBiZSBvbmUgb2YgdGhlIHN0YW5kYXJkIHZhbHVlcyAoNTAwLCBBNDAwLCBldGMuKSwgb25lIG9mIHRoZSB0aHJlZSBwcmVjb25maWd1cmVkXG4vLyBodWVzIChkZWZhdWx0LCBsaWdodGVyLCBkYXJrZXIpLCBvciBhbnkgb2YgdGhlIGFmb3JlbWVudGlvbmVkIHByZWZpeGVkIHdpdGggXCItY29udHJhc3RcIi5cbi8vXG4vLyBAcGFyYW0gJGNvbG9yLW1hcCBUaGUgdGhlbWUgcGFsZXR0ZSAob3V0cHV0IG9mIG1hdC1wYWxldHRlKS5cbi8vIEBwYXJhbSAkaHVlIFRoZSBodWUgZnJvbSB0aGUgcGFsZXR0ZSB0byB1c2UuIElmIHRoaXMgaXMgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEsIGl0IHdpbGxcbi8vICAgICBiZSB0cmVhdGVkIGFzIG9wYWNpdHkuXG4vLyBAcGFyYW0gJG9wYWNpdHkgVGhlIGFscGhhIGNoYW5uZWwgdmFsdWUgZm9yIHRoZSBjb2xvci5cbkBmdW5jdGlvbiBtYXQtY29sb3IoJHBhbGV0dGUsICRodWU6IGRlZmF1bHQsICRvcGFjaXR5OiBudWxsKSB7XG4gIC8vIElmIGh1ZUtleSBpcyBhIG51bWJlciBiZXR3ZWVuIHplcm8gYW5kIG9uZSwgdGhlbiBpdCBhY3R1YWxseSBjb250YWlucyBhblxuICAvLyBvcGFjaXR5IHZhbHVlLCBzbyByZWNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIHRoZSBkZWZhdWx0IGh1ZSBhbmQgdGhhdCBnaXZlbiBvcGFjaXR5LlxuICBAaWYgdHlwZS1vZigkaHVlKSA9PSBudW1iZXIgYW5kICRodWUgPj0gMCBhbmQgJGh1ZSA8PSAxIHtcbiAgICBAcmV0dXJuIG1hdC1jb2xvcigkcGFsZXR0ZSwgZGVmYXVsdCwgJGh1ZSk7XG4gIH1cblxuICAkY29sb3I6IG1hcC1nZXQoJHBhbGV0dGUsICRodWUpO1xuXG4gIEBpZiAodHlwZS1vZigkY29sb3IpICE9IGNvbG9yKSB7XG4gICAgLy8gSWYgdGhlICRjb2xvciByZXNvbHZlZCB0byBzb21ldGhpbmcgZGlmZmVyZW50IGZyb20gYSBjb2xvciAoZS5nLiBhIENTUyB2YXJpYWJsZSksXG4gICAgLy8gd2UgY2FuJ3QgYXBwbHkgdGhlIG9wYWNpdHkgYW55d2F5IHNvIHdlIHJldHVybiB0aGUgdmFsdWUgYXMgaXMsIG90aGVyd2lzZSBTYXNzIGNhblxuICAgIC8vIHRocm93IGFuIGVycm9yIG9yIG91dHB1dCBzb21ldGhpbmcgaW52YWxpZC5cbiAgICBAcmV0dXJuICRjb2xvcjtcbiAgfVxuXG4gIEByZXR1cm4gcmdiYSgkY29sb3IsIGlmKCRvcGFjaXR5ID09IG51bGwsIG9wYWNpdHkoJGNvbG9yKSwgJG9wYWNpdHkpKTtcbn1cblxuXG4vLyBDcmVhdGVzIGEgY29udGFpbmVyIG9iamVjdCBmb3IgYSBsaWdodCB0aGVtZSB0byBiZSBnaXZlbiB0byBpbmRpdmlkdWFsIGNvbXBvbmVudCB0aGVtZSBtaXhpbnMuXG5AZnVuY3Rpb24gbWF0LWxpZ2h0LXRoZW1lKCRwcmltYXJ5LCAkYWNjZW50LCAkd2FybjogbWF0LXBhbGV0dGUoJG1hdC1yZWQpKSB7XG4gIEByZXR1cm4gKFxuICAgIHByaW1hcnk6ICRwcmltYXJ5LFxuICAgIGFjY2VudDogJGFjY2VudCxcbiAgICB3YXJuOiAkd2FybixcbiAgICBpcy1kYXJrOiBmYWxzZSxcbiAgICBmb3JlZ3JvdW5kOiAkbWF0LWxpZ2h0LXRoZW1lLWZvcmVncm91bmQsXG4gICAgYmFja2dyb3VuZDogJG1hdC1saWdodC10aGVtZS1iYWNrZ3JvdW5kLFxuICApO1xufVxuXG5cbi8vIENyZWF0ZXMgYSBjb250YWluZXIgb2JqZWN0IGZvciBhIGRhcmsgdGhlbWUgdG8gYmUgZ2l2ZW4gdG8gaW5kaXZpZHVhbCBjb21wb25lbnQgdGhlbWUgbWl4aW5zLlxuQGZ1bmN0aW9uIG1hdC1kYXJrLXRoZW1lKCRwcmltYXJ5LCAkYWNjZW50LCAkd2FybjogbWF0LXBhbGV0dGUoJG1hdC1yZWQpKSB7XG4gIEByZXR1cm4gKFxuICAgIHByaW1hcnk6ICRwcmltYXJ5LFxuICAgIGFjY2VudDogJGFjY2VudCxcbiAgICB3YXJuOiAkd2FybixcbiAgICBpcy1kYXJrOiB0cnVlLFxuICAgIGZvcmVncm91bmQ6ICRtYXQtZGFyay10aGVtZS1mb3JlZ3JvdW5kLFxuICAgIGJhY2tncm91bmQ6ICRtYXQtZGFyay10aGVtZS1iYWNrZ3JvdW5kLFxuICApO1xufVxuXG5cblxuJG1hdC1yaXBwbGUtY29sb3Itb3BhY2l0eTogMC4xO1xuXG5AbWl4aW4gbWF0LXJpcHBsZSgpIHtcblxuICAvLyBUaGUgaG9zdCBlbGVtZW50IG9mIGFuIG1hdC1yaXBwbGUgZGlyZWN0aXZlIHNob3VsZCBhbHdheXMgaGF2ZSBhIHBvc2l0aW9uIG9mIFwiYWJzb2x1dGVcIiBvclxuICAvLyBcInJlbGF0aXZlXCIgc28gdGhhdCB0aGUgcmlwcGxlcyBpbnNpZGUgYXJlIGNvcnJlY3RseSBwb3NpdGlvbmVkIHJlbGF0aXZlbHkgdG8gdGhlIGNvbnRhaW5lci5cbiAgLm1hdC1yaXBwbGUge1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAvLyBCeSBkZWZhdWx0LCBldmVyeSByaXBwbGUgY29udGFpbmVyIHNob3VsZCBoYXZlIHBvc2l0aW9uOiByZWxhdGl2ZSBpbiBmYXZvciBvZiBjcmVhdGluZyBhblxuICAgIC8vIGVhc3kgQVBJIGZvciBkZXZlbG9wZXJzIHVzaW5nIHRoZSBNYXRSaXBwbGUgZGlyZWN0aXZlLlxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIC8vIFByb21vdGUgY29udGFpbmVycyB0aGF0IGhhdmUgcmlwcGxlcyB0byBhIG5ldyBsYXllci4gV2Ugd2FudCB0byB0YXJnZXQgYDpub3QoOmVtcHR5KWAsXG4gICAgLy8gYmVjYXVzZSB3ZSBkb24ndCB3YW50IGFsbCByaXBwbGUgY29udGFpbmVycyB0byBoYXZlIHRoZWlyIG93biBsYXllciBzaW5jZSB0aGV5J3JlIHVzZWQgaW4gYVxuICAgIC8vIGxvdCBvZiBwbGFjZXMgYW5kIHRoZSBsYXllciBpcyBvbmx5IHJlbGV2YW50IHdoaWxlIGFuaW1hdGluZy4gTm90ZSB0aGF0IGlkZWFsbHkgd2UnZCB1c2VcbiAgICAvLyB0aGUgYGNvbnRhaW5gIHByb3BlcnR5IGhlcmUgKHNlZSAjMTMxNzUpLCBiZWNhdXNlIGA6ZW1wdHlgIGNhbiBiZSBicm9rZW4gYnkgaGF2aW5nIGV4dHJhXG4gICAgLy8gdGV4dCBpbnNpZGUgdGhlIGVsZW1lbnQsIGJ1dCBpdCBpc24ndCB2ZXJ5IHdlbGwgc3VwcG9ydGVkIHlldC5cbiAgICAmOm5vdCg6ZW1wdHkpIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTtcbiAgICB9XG4gIH1cblxuICAubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZCB7XG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIH1cblxuICAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuXG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSwgdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDApO1xuXG4gICAgLy8gSW4gaGlnaCBjb250cmFzdCBtb2RlIHRoZSByaXBwbGUgaXMgb3BhcXVlLCBjYXVzaW5nIGl0IHRvIG9ic3RydWN0IHRoZSBjb250ZW50LlxuICAgIEBpbmNsdWRlIGNkay1oaWdoLWNvbnRyYXN0KGFjdGl2ZSwgb2ZmKSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxufVxuXG4vKiBUaGVtZSBmb3IgdGhlIHJpcHBsZSBlbGVtZW50cy4qL1xuQG1peGluIG1hdC1yaXBwbGUtdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXBfZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRmb3JlZ3JvdW5kLWJhc2U6IG1hcF9nZXQoJGZvcmVncm91bmQsIGJhc2UpO1xuXG4gIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgIC8vIElmIHRoZSByaXBwbGUgY29sb3IgaXMgcmVzb2x2ZXMgdG8gYSBjb2xvciAqdHlwZSosIHdlIGNhbiB1c2UgaXQgZGlyZWN0bHksIG90aGVyd2lzZVxuICAgIC8vIChlLmcuIGl0IHJlc29sdmVzIHRvIGEgQ1NTIHZhcmlhYmxlKSB3ZSBmYWxsIGJhY2sgdG8gdXNpbmcgdGhlIGNvbG9yIGFuZCBzZXR0aW5nIGFuIG9wYWNpdHkuXG4gICAgQGlmICh0eXBlLW9mKCRmb3JlZ3JvdW5kLWJhc2UpID09IGNvbG9yKSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCRmb3JlZ3JvdW5kLWJhc2UsICRtYXQtcmlwcGxlLWNvbG9yLW9wYWNpdHkpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZm9yZWdyb3VuZC1iYXNlO1xuICAgICAgb3BhY2l0eTogJG1hdC1yaXBwbGUtY29sb3Itb3BhY2l0eTtcbiAgICB9XG4gIH1cbn1cblxuXG5cbi8vIFV0aWxpdHkgZm9yIGZldGNoaW5nIGEgbmVzdGVkIHZhbHVlIGZyb20gYSB0eXBvZ3JhcGh5IGNvbmZpZy5cbkBmdW5jdGlvbiBfbWF0LWdldC10eXBlLXZhbHVlKCRjb25maWcsICRsZXZlbCwgJG5hbWUpIHtcbiAgQHJldHVybiBtYXAtZ2V0KG1hcC1nZXQoJGNvbmZpZywgJGxldmVsKSwgJG5hbWUpO1xufVxuXG4vLyBHZXRzIHRoZSBmb250IHNpemUgZm9yIGEgbGV2ZWwgaW5zaWRlIGEgdHlwb2dyYXBoeSBjb25maWcuXG5AZnVuY3Rpb24gbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCAkbGV2ZWwpIHtcbiAgQHJldHVybiBfbWF0LWdldC10eXBlLXZhbHVlKCRjb25maWcsICRsZXZlbCwgZm9udC1zaXplKTtcbn1cblxuLy8gR2V0cyB0aGUgbGluZSBoZWlnaHQgZm9yIGEgbGV2ZWwgaW5zaWRlIGEgdHlwb2dyYXBoeSBjb25maWcuXG5AZnVuY3Rpb24gbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsICRsZXZlbCkge1xuICBAcmV0dXJuIF9tYXQtZ2V0LXR5cGUtdmFsdWUoJGNvbmZpZywgJGxldmVsLCBsaW5lLWhlaWdodCk7XG59XG5cbi8vIEdldHMgdGhlIGZvbnQgd2VpZ2h0IGZvciBhIGxldmVsIGluc2lkZSBhIHR5cG9ncmFwaHkgY29uZmlnLlxuQGZ1bmN0aW9uIG1hdC1mb250LXdlaWdodCgkY29uZmlnLCAkbGV2ZWwpIHtcbiAgQHJldHVybiBfbWF0LWdldC10eXBlLXZhbHVlKCRjb25maWcsICRsZXZlbCwgZm9udC13ZWlnaHQpO1xufVxuXG4vLyBHZXRzIHRoZSBsZXR0ZXIgc3BhY2luZyBmb3IgYSBsZXZlbCBpbnNpZGUgYSB0eXBvZ3JhcGh5IGNvbmZpZy5cbkBmdW5jdGlvbiBtYXQtbGV0dGVyLXNwYWNpbmcoJGNvbmZpZywgJGxldmVsKSB7XG4gIEByZXR1cm4gX21hdC1nZXQtdHlwZS12YWx1ZSgkY29uZmlnLCAkbGV2ZWwsIGxldHRlci1zcGFjaW5nKTtcbn1cblxuLy8gR2V0cyB0aGUgZm9udC1mYW1pbHkgZnJvbSBhIHR5cG9ncmFwaHkgY29uZmlnIGFuZCByZW1vdmVzIHRoZSBxdW90ZXMgYXJvdW5kIGl0LlxuQGZ1bmN0aW9uIG1hdC1mb250LWZhbWlseSgkY29uZmlnLCAkbGV2ZWw6IG51bGwpIHtcbiAgJGZvbnQtZmFtaWx5OiBtYXAtZ2V0KCRjb25maWcsIGZvbnQtZmFtaWx5KTtcblxuICBAaWYgJGxldmVsICE9IG51bGwge1xuICAgICRmb250LWZhbWlseTogX21hdC1nZXQtdHlwZS12YWx1ZSgkY29uZmlnLCAkbGV2ZWwsIGZvbnQtZmFtaWx5KTtcbiAgfVxuXG4gIC8vIEd1YXJkIGFnYWluc3QgdW5xdW90aW5nIG5vbi1zdHJpbmcgdmFsdWVzLCBiZWNhdXNlIGl0J3MgZGVwcmVjYXRlZC5cbiAgQHJldHVybiBpZih0eXBlLW9mKCRmb250LWZhbWlseSkgPT0gc3RyaW5nLCB1bnF1b3RlKCRmb250LWZhbWlseSksICRmb250LWZhbWlseSk7XG59XG5cbi8vIE91dHB1dHMgdGhlIHNob3J0aGFuZCBgZm9udGAgQ1NTIHByb3BlcnR5LCBiYXNlZCBvbiBhIHNldCBvZiB0eXBvZ3JhcGh5IHZhbHVlcy4gRmFsbHMgYmFjayB0b1xuLy8gdGhlIGluZGl2aWR1YWwgcHJvcGVydGllcyBpZiBhIHZhbHVlIHRoYXQgaXNuJ3QgYWxsb3dlZCBpbiB0aGUgc2hvcnRoYW5kIGlzIHBhc3NlZCBpbi5cbkBtaXhpbiBtYXQtdHlwb2dyYXBoeS1mb250LXNob3J0aGFuZCgkZm9udC1zaXplLCAkZm9udC13ZWlnaHQsICRsaW5lLWhlaWdodCwgJGZvbnQtZmFtaWx5KSB7XG4gIC8vIElmIGFueSBvZiB0aGUgdmFsdWVzIGFyZSBzZXQgdG8gYGluaGVyaXRgLCB3ZSBjYW4ndCB1c2UgdGhlIHNob3J0aGFuZFxuICAvLyBzbyB3ZSBmYWxsIGJhY2sgdG8gcGFzc2luZyBpbiB0aGUgaW5kaXZpZHVhbCBwcm9wZXJ0aWVzLlxuICBAaWYgKCRmb250LXNpemUgPT0gaW5oZXJpdCBvclxuICAgICAgICRmb250LXdlaWdodCA9PSBpbmhlcml0IG9yXG4gICAgICAgJGxpbmUtaGVpZ2h0ID09IGluaGVyaXQgb3JcbiAgICAgICAkZm9udC1mYW1pbHkgPT0gaW5oZXJpdCBvclxuICAgICAgICRmb250LXNpemUgPT0gbnVsbCBvclxuICAgICAgICRmb250LXdlaWdodCA9PSBudWxsIG9yXG4gICAgICAgJGxpbmUtaGVpZ2h0ID09IG51bGwgb3JcbiAgICAgICAkZm9udC1mYW1pbHkgPT0gbnVsbCkge1xuXG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplO1xuICAgIGZvbnQtd2VpZ2h0OiAkZm9udC13ZWlnaHQ7XG4gICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5O1xuICB9XG4gIEBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2UgdXNlIHRoZSBzaG9ydGhhbmQgYGZvbnRgLCBiZWNhdXNlIGl0J3MgdGhlIGxlYXN0IGFtb3VudCBvZiBieXRlcy4gTm90ZVxuICAgIC8vIHRoYXQgd2UgbmVlZCB0byB1c2UgaW50ZXJwb2xhdGlvbiBmb3IgYGZvbnQtc2l6ZS9saW5lLWhlaWdodGAgaW4gb3JkZXIgdG8gcHJldmVudFxuICAgIC8vIFNhc3MgZnJvbSBkaXZpZGluZyB0aGUgdHdvIHZhbHVlcy5cbiAgICBmb250OiAkZm9udC13ZWlnaHQgI3skZm9udC1zaXplfS8jeyRsaW5lLWhlaWdodH0gJGZvbnQtZmFtaWx5O1xuICB9XG59XG5cbi8vIENvbnZlcnRzIGEgdHlwb2dyYXBoeSBsZXZlbCBpbnRvIENTUyBzdHlsZXMuXG5AbWl4aW4gbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsICRsZXZlbCkge1xuICAkZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsICRsZXZlbCk7XG4gICRmb250LXdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsICRsZXZlbCk7XG4gICRsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsICRsZXZlbCk7XG4gICRmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsICRsZXZlbCk7XG5cbiAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktZm9udC1zaG9ydGhhbmQoJGZvbnQtc2l6ZSwgJGZvbnQtd2VpZ2h0LCAkbGluZS1oZWlnaHQsICRmb250LWZhbWlseSk7XG4gIGxldHRlci1zcGFjaW5nOiBtYXQtbGV0dGVyLXNwYWNpbmcoJGNvbmZpZywgJGxldmVsKTtcbn1cblxuXG5AbWl4aW4gbWF0LW9wdGlvbi10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG5cbiAgLm1hdC1vcHRpb24ge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gICAgJjpob3Zlcjpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpLFxuICAgICY6Zm9jdXM6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyKTtcbiAgICB9XG5cbiAgICAvLyBJbiBtdWx0aXBsZSBtb2RlIHRoZXJlIGlzIGEgY2hlY2tib3ggdG8gc2hvdyB0aGF0IHRoZSBvcHRpb24gaXMgc2VsZWN0ZWQuXG4gICAgJi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIpO1xuICAgIH1cblxuICAgICYubWF0LWFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyKTtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIH1cblxuICAgICYubWF0LW9wdGlvbi1kaXNhYmxlZCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBoaW50LXRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtcHJpbWFyeSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgdGV4dCk7XG4gIH1cblxuICAubWF0LWFjY2VudCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtd2FybiAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1vcHRpb24tdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtb3B0aW9uIHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgc3ViaGVhZGluZy0yKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LW9wdGdyb3VwLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtb3B0Z3JvdXAtbGFiZWwge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtb3B0Z3JvdXAtZGlzYWJsZWQgLm1hdC1vcHRncm91cC1sYWJlbCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaGludC10ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LW9wdGdyb3VwLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LW9wdGdyb3VwLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgYm9keS0yKTtcbiAgfVxufVxuXG5cblxuQG1peGluIG1hdC1wc2V1ZG8tY2hlY2tib3gtdGhlbWUoJHRoZW1lKSB7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuXG4gIC8vIE5PVEUodHJhdmlza2F1Zm1hbik6IFdoaWxlIHRoZSBzcGVjIGNhbGxzIGZvciB0cmFuc2x1Y2VudCBibGFja3Mvd2hpdGVzIGZvciBkaXNhYmxlZCBjb2xvcnMsXG4gIC8vIHRoaXMgZG9lcyBub3Qgd29yayB3ZWxsIHdpdGggZWxlbWVudHMgbGF5ZXJlZCBvbiB0b3Agb2Ygb25lIGFub3RoZXIuIFRvIGdldCBhcm91bmQgdGhpcyB3ZVxuICAvLyBibGVuZCB0aGUgY29sb3JzIHRvZ2V0aGVyIGJhc2VkIG9uIHRoZSBiYXNlIGNvbG9yIGFuZCB0aGUgdGhlbWUgYmFja2dyb3VuZC5cbiAgJHdoaXRlLTMwcGN0LW9wYWNpdHktb24tZGFyazogIzY4Njg2ODtcbiAgJGJsYWNrLTI2cGN0LW9wYWNpdHktb24tbGlnaHQ6ICNiMGIwYjA7XG4gICRkaXNhYmxlZC1jb2xvcjogaWYoJGlzLWRhcmstdGhlbWUsICR3aGl0ZS0zMHBjdC1vcGFjaXR5LW9uLWRhcmssICRibGFjay0yNnBjdC1vcGFjaXR5LW9uLWxpZ2h0KTtcbiAgJGNvbG9yZWQtYm94LXNlbGVjdG9yOiAnLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSc7XG5cbiAgLm1hdC1wc2V1ZG8tY2hlY2tib3gge1xuICAgIGNvbG9yOiBtYXQtY29sb3IobWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpLCBzZWNvbmRhcnktdGV4dCk7XG5cbiAgICAmOjphZnRlciB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kKTtcbiAgICB9XG4gIH1cblxuICAubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZCB7XG4gICAgY29sb3I6ICRkaXNhYmxlZC1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLFxuICAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KSk7XG4gIH1cblxuICAvLyBEZWZhdWx0IHRvIHRoZSBhY2NlbnQgY29sb3IuIE5vdGUgdGhhdCB0aGUgcHNldWRvIGNoZWNrYm94ZXMgYXJlIG1lYW50IHRvIGluaGVyaXQgdGhlXG4gIC8vIHRoZW1lIGZyb20gdGhlaXIgcGFyZW50LCByYXRoZXIgdGhhbiBpbXBsZW1lbnRpbmcgdGhlaXIgb3duIHRoZW1pbmcsIHdoaWNoIGlzIHdoeSB3ZVxuICAvLyBkb24ndCBhdHRhY2ggdG8gdGhlIGBtYXQtKmAgY2xhc3Nlcy4gQWxzbyBub3RlIHRoYXQgdGhpcyBuZWVkcyB0byBiZSBiZWxvdyBgLm1hdC1wcmltYXJ5YFxuICAvLyBpbiBvcmRlciB0byBhbGxvdyBmb3IgdGhlIGNvbG9yIHRvIGJlIG92ZXJ3cml0dGVuIGlmIHRoZSBjaGVja2JveCBpcyBpbnNpZGUgYSBwYXJlbnQgdGhhdFxuICAvLyBoYXMgYG1hdC1hY2NlbnRgIGFuZCBpcyBwbGFjZWQgaW5zaWRlIGFub3RoZXIgcGFyZW50IHRoYXQgaGFzIGBtYXQtcHJpbWFyeWAuXG4gIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsXG4gIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUsXG4gIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsXG4gIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KSk7XG4gIH1cblxuICAubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxcbiAgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgd2FybikpO1xuICB9XG5cbiAgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxcbiAgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSB7XG4gICAgJi5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkIHtcbiAgICAgIGJhY2tncm91bmQ6ICRkaXNhYmxlZC1jb2xvcjtcbiAgICB9XG4gIH1cbn1cblxuXG5cbi8vIFJlcHJlc2VudHMgYSB0eXBvZ3JhcGh5IGxldmVsIGZyb20gdGhlIE1hdGVyaWFsIGRlc2lnbiBzcGVjLlxuQGZ1bmN0aW9uIG1hdC10eXBvZ3JhcGh5LWxldmVsKFxuICAkZm9udC1zaXplLFxuICAkbGluZS1oZWlnaHQ6ICRmb250LXNpemUsXG4gICRmb250LXdlaWdodDogNDAwLFxuICAkZm9udC1mYW1pbHk6IG51bGwsXG4gICRsZXR0ZXItc3BhY2luZzogbm9ybWFsKSB7XG5cbiAgQHJldHVybiAoXG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLFxuICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQsXG4gICAgZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodCxcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LFxuICAgIGxldHRlci1zcGFjaW5nOiAkbGV0dGVyLXNwYWNpbmdcbiAgKTtcbn1cblxuLy8gUmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgdHlwb2dyYXBoeSBsZXZlbHMuXG4vLyBEZWZhdWx0cyBjb21lIGZyb20gaHR0cHM6Ly9tYXRlcmlhbC5pby9ndWlkZWxpbmVzL3N0eWxlL3R5cG9ncmFwaHkuaHRtbFxuLy8gTm90ZTogVGhlIHNwZWMgZG9lc24ndCBtZW50aW9uIGxldHRlciBzcGFjaW5nLiBUaGUgdmFsdWVzIGhlcmUgY29tZSBmcm9tXG4vLyBleWViYWxsaW5nIGl0IHVudGlsIGl0IGxvb2tlZCBleGFjdGx5IGxpa2UgdGhlIHNwZWMgZXhhbXBsZXMuXG5AZnVuY3Rpb24gbWF0LXR5cG9ncmFwaHktY29uZmlnKFxuICAkZm9udC1mYW1pbHk6ICAgJ1JvYm90bywgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBzYW5zLXNlcmlmJyxcbiAgJGRpc3BsYXktNDogICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDExMnB4LCAxMTJweCwgMzAwLCAkbGV0dGVyLXNwYWNpbmc6IC0wLjA1ZW0pLFxuICAkZGlzcGxheS0zOiAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoNTZweCwgNTZweCwgNDAwLCAkbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW0pLFxuICAkZGlzcGxheS0yOiAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoNDVweCwgNDhweCwgNDAwLCAkbGV0dGVyLXNwYWNpbmc6IC0wLjAwNWVtKSxcbiAgJGRpc3BsYXktMTogICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDM0cHgsIDQwcHgsIDQwMCksXG4gICRoZWFkbGluZTogICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgyNHB4LCAzMnB4LCA0MDApLFxuICAkdGl0bGU6ICAgICAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMjBweCwgMzJweCwgNTAwKSxcbiAgJHN1YmhlYWRpbmctMjogIG1hdC10eXBvZ3JhcGh5LWxldmVsKDE2cHgsIDI4cHgsIDQwMCksXG4gICRzdWJoZWFkaW5nLTE6ICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgxNXB4LCAyNHB4LCA0MDApLFxuICAkYm9keS0yOiAgICAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMTRweCwgMjRweCwgNTAwKSxcbiAgJGJvZHktMTogICAgICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDE0cHgsIDIwcHgsIDQwMCksXG4gICRjYXB0aW9uOiAgICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgxMnB4LCAyMHB4LCA0MDApLFxuICAkYnV0dG9uOiAgICAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMTRweCwgMTRweCwgNTAwKSxcbiAgLy8gTGluZS1oZWlnaHQgbXVzdCBiZSB1bml0LWxlc3MgZnJhY3Rpb24gb2YgdGhlIGZvbnQtc2l6ZS5cbiAgJGlucHV0OiAgICAgICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKGluaGVyaXQsIDEuMTI1LCA0MDApXG4pIHtcblxuICAvLyBEZWNsYXJlIGFuIGluaXRpYWwgbWFwIHdpdGggYWxsIG9mIHRoZSBsZXZlbHMuXG4gICRjb25maWc6IChcbiAgICBkaXNwbGF5LTQ6ICAgICAgJGRpc3BsYXktNCxcbiAgICBkaXNwbGF5LTM6ICAgICAgJGRpc3BsYXktMyxcbiAgICBkaXNwbGF5LTI6ICAgICAgJGRpc3BsYXktMixcbiAgICBkaXNwbGF5LTE6ICAgICAgJGRpc3BsYXktMSxcbiAgICBoZWFkbGluZTogICAgICAgJGhlYWRsaW5lLFxuICAgIHRpdGxlOiAgICAgICAgICAkdGl0bGUsXG4gICAgc3ViaGVhZGluZy0yOiAgICRzdWJoZWFkaW5nLTIsXG4gICAgc3ViaGVhZGluZy0xOiAgICRzdWJoZWFkaW5nLTEsXG4gICAgYm9keS0yOiAgICAgICAgICRib2R5LTIsXG4gICAgYm9keS0xOiAgICAgICAgICRib2R5LTEsXG4gICAgY2FwdGlvbjogICAgICAgICRjYXB0aW9uLFxuICAgIGJ1dHRvbjogICAgICAgICAkYnV0dG9uLFxuICAgIGlucHV0OiAgICAgICAgICAkaW5wdXQsXG4gICk7XG5cbiAgLy8gTG9vcCB0aHJvdWdoIHRoZSBsZXZlbHMgYW5kIHNldCB0aGUgYGZvbnQtZmFtaWx5YCBvZiB0aGUgb25lcyB0aGF0IGRvbid0IGhhdmUgb25lIHRvIHRoZSBiYXNlLlxuICAvLyBOb3RlIHRoYXQgU2FzcyBjYW4ndCBtb2RpZnkgbWFwcyBpbiBwbGFjZSwgd2hpY2ggbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIG1lcmdlIGFuZCByZS1hc3NpZ24uXG4gIEBlYWNoICRrZXksICRsZXZlbCBpbiAkY29uZmlnIHtcbiAgICBAaWYgbWFwLWdldCgkbGV2ZWwsIGZvbnQtZmFtaWx5KSA9PSBudWxsIHtcbiAgICAgICRuZXctbGV2ZWw6IG1hcC1tZXJnZSgkbGV2ZWwsIChmb250LWZhbWlseTogJGZvbnQtZmFtaWx5KSk7XG4gICAgICAkY29uZmlnOiBtYXAtbWVyZ2UoJGNvbmZpZywgKCRrZXk6ICRuZXctbGV2ZWwpKTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgdGhlIGJhc2UgZm9udCBmYW1pbHkgdG8gdGhlIGNvbmZpZy5cbiAgQHJldHVybiBtYXAtbWVyZ2UoJGNvbmZpZywgKGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHkpKTtcbn1cblxuLy8gQWRkcyB0aGUgYmFzZSB0eXBvZ3JhcGh5IHN0eWxlcywgYmFzZWQgb24gYSBjb25maWcuXG5AbWl4aW4gbWF0LWJhc2UtdHlwb2dyYXBoeSgkY29uZmlnLCAkc2VsZWN0b3I6ICcubWF0LXR5cG9ncmFwaHknKSB7XG4gIC5tYXQtaDEsIC5tYXQtaGVhZGxpbmUsICN7JHNlbGVjdG9yfSBoMSB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGhlYWRsaW5lKTtcbiAgICBtYXJnaW46IDAgMCAxNnB4O1xuICB9XG5cbiAgLm1hdC1oMiwgLm1hdC10aXRsZSwgI3skc2VsZWN0b3J9IGgyIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgdGl0bGUpO1xuICAgIG1hcmdpbjogMCAwIDE2cHg7XG4gIH1cblxuICAubWF0LWgzLCAubWF0LXN1YmhlYWRpbmctMiwgI3skc2VsZWN0b3J9IGgzIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgc3ViaGVhZGluZy0yKTtcbiAgICBtYXJnaW46IDAgMCAxNnB4O1xuICB9XG5cbiAgLm1hdC1oNCwgLm1hdC1zdWJoZWFkaW5nLTEsICN7JHNlbGVjdG9yfSBoNCB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIHN1YmhlYWRpbmctMSk7XG4gICAgbWFyZ2luOiAwIDAgMTZweDtcbiAgfVxuXG4gIC8vIE5vdGU6IHRoZSBzcGVjIGRvZXNuJ3QgaGF2ZSBhbnl0aGluZyB0aGF0IHdvdWxkIGNvcnJlc3BvbmQgdG8gaDUgYW5kIGg2LCBidXQgd2UgYWRkIHRoZXNlIGZvclxuICAvLyBjb25zaXN0ZW5jeS4gVGhlIGZvbnQgc2l6ZXMgY29tZSBmcm9tIHRoZSBDaHJvbWUgdXNlciBhZ2VudCBzdHlsZXMgd2hpY2ggaGF2ZSBoNSBhdCAwLjgzZW1cbiAgLy8gYW5kIGg2IGF0IDAuNjdlbS5cbiAgLm1hdC1oNSwgI3skc2VsZWN0b3J9IGg1IHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1mb250LXNob3J0aGFuZChcbiAgICAgICAvLyBjYWxjIGlzIHVzZWQgaGVyZSB0byBzdXBwb3J0IGNzcyB2YXJpYWJsZXNcbiAgICAgIGNhbGMoI3ttYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSl9ICogMC44MyksXG4gICAgICBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0xKSxcbiAgICAgIG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBib2R5LTEpLFxuICAgICAgbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGJvZHktMSlcbiAgICApO1xuXG4gICAgbWFyZ2luOiAwIDAgMTJweDtcbiAgfVxuXG4gIC5tYXQtaDYsICN7JHNlbGVjdG9yfSBoNiB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktZm9udC1zaG9ydGhhbmQoXG4gICAgICAgLy8gY2FsYyBpcyB1c2VkIGhlcmUgdG8gc3VwcG9ydCBjc3MgdmFyaWFibGVzXG4gICAgICBjYWxjKCN7bWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpfSAqIDAuNjcpLFxuICAgICAgbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMSksXG4gICAgICBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgYm9keS0xKSxcbiAgICAgIG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBib2R5LTEpXG4gICAgKTtcblxuICAgIG1hcmdpbjogMCAwIDEycHg7XG4gIH1cblxuICAubWF0LWJvZHktc3Ryb25nLCAubWF0LWJvZHktMiB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGJvZHktMik7XG4gIH1cblxuICAubWF0LWJvZHksIC5tYXQtYm9keS0xLCAjeyRzZWxlY3Rvcn0ge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBib2R5LTEpO1xuXG4gICAgcCB7XG4gICAgICBtYXJnaW46IDAgMCAxMnB4O1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc21hbGwsIC5tYXQtY2FwdGlvbiB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGNhcHRpb24pO1xuICB9XG5cbiAgLm1hdC1kaXNwbGF5LTQsICN7JHNlbGVjdG9yfSAubWF0LWRpc3BsYXktNCB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGRpc3BsYXktNCk7XG4gICAgbWFyZ2luOiAwIDAgNTZweDtcbiAgfVxuXG4gIC5tYXQtZGlzcGxheS0zLCAjeyRzZWxlY3Rvcn0gLm1hdC1kaXNwbGF5LTMge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBkaXNwbGF5LTMpO1xuICAgIG1hcmdpbjogMCAwIDY0cHg7XG4gIH1cblxuICAubWF0LWRpc3BsYXktMiwgI3skc2VsZWN0b3J9IC5tYXQtZGlzcGxheS0yIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgZGlzcGxheS0yKTtcbiAgICBtYXJnaW46IDAgMCA2NHB4O1xuICB9XG5cbiAgLm1hdC1kaXNwbGF5LTEsICN7JHNlbGVjdG9yfSAubWF0LWRpc3BsYXktMSB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGRpc3BsYXktMSk7XG4gICAgbWFyZ2luOiAwIDAgNjRweDtcbiAgfVxufVxuXG5cblxuXG5AbWl4aW4gbWF0LWF1dG9jb21wbGV0ZS10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcblxuICAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oNCwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gICAgLy8gU2VsZWN0ZWQgb3B0aW9ucyBpbiBhdXRvY29tcGxldGVzIHNob3VsZCBub3QgYmUgZ3JheSwgYnV0IHdlXG4gICAgLy8gb25seSB3YW50IHRvIG92ZXJyaWRlIHRoZSBiYWNrZ3JvdW5kIGZvciBzZWxlY3RlZCBvcHRpb25zIGlmXG4gICAgLy8gdGhleSBhcmUgKm5vdCogaW4gaG92ZXIgb3IgZm9jdXMgc3RhdGUuIFRoaXMgY2hhbmdlIGhhcyB0byBiZVxuICAgIC8vIG1hZGUgaGVyZSBiZWNhdXNlIGJhc2Ugb3B0aW9uIHN0eWxlcyBhcmUgc2hhcmVkIGJldHdlZW4gdGhlXG4gICAgLy8gYXV0b2NvbXBsZXRlIGFuZCB0aGUgc2VsZWN0LlxuICAgIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1hY3RpdmUpOm5vdCg6aG92ZXIpIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG5cbiAgICAgICY6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSB7XG4gICAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG5cbkBtaXhpbiBtYXQtYXV0b2NvbXBsZXRlLXR5cG9ncmFwaHkoJGNvbmZpZykgeyB9XG5cbi8vIFRoaXMgY29udGFpbnMgYWxsIG9mIHRoZSBzdHlsZXMgZm9yIHRoZSBiYWRnZVxuLy8gcmF0aGVyIHRoYW4ganVzdCB0aGUgY29sb3IvdGhlbWUgYmVjYXVzZSBvZlxuLy8gbm8gc3R5bGUgc2hlZXQgc3VwcG9ydCBmb3IgZGlyZWN0aXZlcy5cblxuXG5cblxuXG4kbWF0LWJhZGdlLWZvbnQtc2l6ZTogMTJweDtcbiRtYXQtYmFkZ2UtZm9udC13ZWlnaHQ6IDYwMDtcbiRtYXQtYmFkZ2UtZGVmYXVsdC1zaXplOiAyMnB4ICFkZWZhdWx0O1xuJG1hdC1iYWRnZS1zbWFsbC1zaXplOiAkbWF0LWJhZGdlLWRlZmF1bHQtc2l6ZSAtIDY7XG4kbWF0LWJhZGdlLWxhcmdlLXNpemU6ICRtYXQtYmFkZ2UtZGVmYXVsdC1zaXplICsgNjtcblxuLy8gTWl4aW4gZm9yIGJ1aWxkaW5nIG9mZnNldCBnaXZlbiBkaWZmZXJlbnQgc2l6ZXNcbkBtaXhpbiBfbWF0LWJhZGdlLXNpemUoJHNpemUpIHtcbiAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICB3aWR0aDogJHNpemU7XG4gICAgaGVpZ2h0OiAkc2l6ZTtcbiAgICBsaW5lLWhlaWdodDogJHNpemU7XG4gIH1cblxuICAmLm1hdC1iYWRnZS1hYm92ZSB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIHRvcDogLSRzaXplIC8gMjtcbiAgICB9XG4gIH1cblxuICAmLm1hdC1iYWRnZS1iZWxvdyB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIGJvdHRvbTogLSRzaXplIC8gMjtcbiAgICB9XG4gIH1cblxuICAmLm1hdC1iYWRnZS1iZWZvcmUge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICBsZWZ0OiAtJHNpemU7XG4gICAgfVxuICB9XG5cbiAgW2Rpcj0ncnRsJ10gJi5tYXQtYmFkZ2UtYmVmb3JlIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgbGVmdDogYXV0bztcbiAgICAgIHJpZ2h0OiAtJHNpemU7XG4gICAgfVxuICB9XG5cbiAgJi5tYXQtYmFkZ2UtYWZ0ZXIge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICByaWdodDogLSRzaXplO1xuICAgIH1cbiAgfVxuXG4gIFtkaXI9J3J0bCddICYubWF0LWJhZGdlLWFmdGVyIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgcmlnaHQ6IGF1dG87XG4gICAgICBsZWZ0OiAtJHNpemU7XG4gICAgfVxuICB9XG5cbiAgJi5tYXQtYmFkZ2Utb3ZlcmxhcCB7XG4gICAgJi5tYXQtYmFkZ2UtYmVmb3JlIHtcbiAgICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICAgIGxlZnQ6IC0kc2l6ZSAvIDI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgW2Rpcj0ncnRsJ10gJi5tYXQtYmFkZ2UtYmVmb3JlIHtcbiAgICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICAgIGxlZnQ6IGF1dG87XG4gICAgICAgIHJpZ2h0OiAtJHNpemUgLyAyO1xuICAgICAgfVxuICAgIH1cblxuICAgICYubWF0LWJhZGdlLWFmdGVyIHtcbiAgICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICAgIHJpZ2h0OiAtJHNpemUgLyAyO1xuICAgICAgfVxuICAgIH1cblxuICAgIFtkaXI9J3J0bCddICYubWF0LWJhZGdlLWFmdGVyIHtcbiAgICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgICBsZWZ0OiAtJHNpemUgLyAyO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWJhZGdlLXRoZW1lKCR0aGVtZSkge1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIGRlZmF1bHQtY29udHJhc3QpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG5cbiAgICBAaW5jbHVkZSBjZGstaGlnaC1jb250cmFzdChhY3RpdmUsIG9mZikge1xuICAgICAgb3V0bGluZTogc29saWQgMXB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICB9XG4gIH1cblxuICAubWF0LWJhZGdlLWFjY2VudCB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYWNjZW50KTtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgZGVmYXVsdC1jb250cmFzdCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1iYWRnZS13YXJuIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgZGVmYXVsdC1jb250cmFzdCk7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJHdhcm4pO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYmFkZ2Uge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxuXG4gIC5tYXQtYmFkZ2UtaGlkZGVuIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJhZGdlLWRpc2FibGVkIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgJGFwcC1iYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdiYWNrZ3JvdW5kJyk7XG4gICAgICAkYmFkZ2UtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtYnV0dG9uKTtcblxuICAgICAgLy8gVGhlIGRpc2FibGVkIGNvbG9yIHVzdWFsbHkgaGFzIHNvbWUga2luZCBvZiBvcGFjaXR5LCBidXQgYmVjYXVzZSB0aGUgYmFkZ2UgaXMgb3ZlcmxheWVkXG4gICAgICAvLyBvbiB0b3Agb2Ygc29tZXRoaW5nIGVsc2UsIGl0IHdvbid0IGxvb2sgZ29vZCBpZiBpdCdzIG9wYXF1ZS4gSWYgaXQgaXMgYSBjb2xvciAqdHlwZSosXG4gICAgICAvLyB3ZSBjb252ZXJ0IGl0IGludG8gYSBzb2xpZCBjb2xvciBieSB0YWtpbmcgdGhlIG9wYWNpdHkgZnJvbSB0aGUgcmdiYSB2YWx1ZSBhbmQgdXNpbmdcbiAgICAgIC8vIHRoZSB2YWx1ZSB0byBkZXRlcm1pbmUgdGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIGJhY2tncm91bmQgdG8gcHV0IGludG8gZm9yZWdyb3VuZCB3aGVuXG4gICAgICAvLyBtaXhpbmcgdGhlIGNvbG9ycyB0b2dldGhlci5cbiAgICAgIEBpZiAodHlwZS1vZigkYmFkZ2UtY29sb3IpID09IGNvbG9yIGFuZCB0eXBlLW9mKCRhcHAtYmFja2dyb3VuZCkgPT0gY29sb3IpIHtcbiAgICAgICAgJGJhZGdlLW9wYWNpdHk6IG9wYWNpdHkoJGJhZGdlLWNvbG9yKTtcbiAgICAgICAgYmFja2dyb3VuZDogbWl4KCRhcHAtYmFja2dyb3VuZCwgcmdiYSgkYmFkZ2UtY29sb3IsIDEpLCAoMSAtICRiYWRnZS1vcGFjaXR5KSAqIDEwMCUpO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkYmFkZ2UtY29sb3I7XG4gICAgICB9XG5cbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyMDBtcyBlYXNlLWluLW91dDtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNik7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG5cbiAgLm5nLWFuaW1hdGUtZGlzYWJsZWQgLm1hdC1iYWRnZS1jb250ZW50LFxuICAubWF0LWJhZGdlLWNvbnRlbnQuX21hdC1hbmltYXRpb24tbm9vcGFibGUge1xuICAgIHRyYW5zaXRpb246IG5vbmU7XG4gIH1cblxuICAvLyBUaGUgYWN0aXZlIGNsYXNzIGlzIGFkZGVkIGFmdGVyIHRoZSBlbGVtZW50IGlzIGFkZGVkXG4gIC8vIHNvIGl0IGNhbiBhbmltYXRlIHNjYWxlIHRvIGRlZmF1bHRcbiAgLm1hdC1iYWRnZS1jb250ZW50Lm1hdC1iYWRnZS1hY3RpdmUge1xuICAgIC8vIFNjYWxlIHRvIGBub25lYCBpbnN0ZWFkIG9mIGAxYCB0byBhdm9pZCBibHVycnkgdGV4dCBpbiBzb21lIGJyb3dzZXJzLlxuICAgIHRyYW5zZm9ybTogbm9uZTtcbiAgfVxuXG4gIC5tYXQtYmFkZ2Utc21hbGwge1xuICAgIEBpbmNsdWRlIF9tYXQtYmFkZ2Utc2l6ZSgkbWF0LWJhZGdlLXNtYWxsLXNpemUpO1xuICB9XG4gIC5tYXQtYmFkZ2UtbWVkaXVtIHtcbiAgICBAaW5jbHVkZSBfbWF0LWJhZGdlLXNpemUoJG1hdC1iYWRnZS1kZWZhdWx0LXNpemUpO1xuICB9XG4gIC5tYXQtYmFkZ2UtbGFyZ2Uge1xuICAgIEBpbmNsdWRlIF9tYXQtYmFkZ2Utc2l6ZSgkbWF0LWJhZGdlLWxhcmdlLXNpemUpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtYmFkZ2UtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgZm9udC13ZWlnaHQ6ICRtYXQtYmFkZ2UtZm9udC13ZWlnaHQ7XG4gICAgZm9udC1zaXplOiAkbWF0LWJhZGdlLWZvbnQtc2l6ZTtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC1iYWRnZS1zbWFsbCAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgIC8vIFNldCB0aGUgZm9udCBzaXplIHRvIDc1JSBvZiB0aGUgb3JpZ2luYWwuXG4gICAgZm9udC1zaXplOiAkbWF0LWJhZGdlLWZvbnQtc2l6ZSAqIDAuNzU7XG4gIH1cblxuICAubWF0LWJhZGdlLWxhcmdlIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgZm9udC1zaXplOiAkbWF0LWJhZGdlLWZvbnQtc2l6ZSAqIDI7XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LWJvdHRvbS1zaGVldC10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXIge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDE2LCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZGlhbG9nKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWJvdHRvbS1zaGVldC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgYm9keS0xKTtcbiAgfVxufVxuXG5cblxuXG5cbiRfbWF0LWJ1dHRvbi1yaXBwbGUtb3BhY2l0eTogMC4xO1xuXG4vLyBBcHBsaWVzIGEgZm9jdXMgc3R5bGUgdG8gYW4gbWF0LWJ1dHRvbiBlbGVtZW50IGZvciBlYWNoIG9mIHRoZSBzdXBwb3J0ZWQgcGFsZXR0ZXMuXG5AbWl4aW4gX21hdC1idXR0b24tZm9jdXMtb3ZlcmxheS1jb2xvcigkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG5cbiAgJi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnkpO1xuICB9XG5cbiAgJi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYWNjZW50KTtcbiAgfVxuXG4gICYubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCR3YXJuKTtcbiAgfVxuXG4gICZbZGlzYWJsZWRdIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG59XG5cbi8vIEFwcGxpZXMgdGhlIGJhY2tncm91bmQgY29sb3IgZm9yIGEgcmlwcGxlLiBJZiB0aGUgdmFsdWUgcHJvdmlkZWQgaXMgbm90IGEgU2FzcyBjb2xvcixcbi8vIHdlIGFzc3VtZSB0aGF0IHdlJ3ZlIGJlZW4gZ2l2ZW4gYSBDU1MgdmFyaWFibGUuIFNpbmNlIHdlIGNhbid0IHBlcmZvcm0gYWxwaGEtYmxlbmRpbmdcbi8vIG9uIGEgQ1NTIHZhcmlhYmxlLCB3ZSBpbnN0ZWFkIGFkZCB0aGUgb3BhY2l0eSBkaXJlY3RseSB0byB0aGUgcmlwcGxlIGVsZW1lbnQuXG5AbWl4aW4gX21hdC1idXR0b24tcmlwcGxlLWJhY2tncm91bmQoJHBhbGV0dGUsICRodWUsICRvcGFjaXR5KSB7XG4gICRiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsICRodWUsICRvcGFjaXR5KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY29sb3I7XG4gIEBpZiAodHlwZS1vZigkYmFja2dyb3VuZC1jb2xvcikgIT0gY29sb3IpIHtcbiAgICBvcGFjaXR5OiAkb3BhY2l0eTtcbiAgfVxufVxuXG5AbWl4aW4gX21hdC1idXR0b24tcmlwcGxlLWNvbG9yKCR0aGVtZSwgJGh1ZSwgJG9wYWNpdHk6ICRfbWF0LWJ1dHRvbi1yaXBwbGUtb3BhY2l0eSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcblxuICAmLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLXJpcHBsZS1iYWNrZ3JvdW5kKCRwcmltYXJ5LCAkaHVlLCAkb3BhY2l0eSk7XG4gIH1cblxuICAmLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tcmlwcGxlLWJhY2tncm91bmQoJGFjY2VudCwgJGh1ZSwgJG9wYWNpdHkpO1xuICB9XG5cbiAgJi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi1yaXBwbGUtYmFja2dyb3VuZCgkd2FybiwgJGh1ZSwgJG9wYWNpdHkpO1xuICB9XG59XG5cbi8vIEFwcGxpZXMgYSBwcm9wZXJ0eSB0byBhbiBtYXQtYnV0dG9uIGVsZW1lbnQgZm9yIGVhY2ggb2YgdGhlIHN1cHBvcnRlZCBwYWxldHRlcy5cbkBtaXhpbiBfbWF0LWJ1dHRvbi10aGVtZS1wcm9wZXJ0eSgkdGhlbWUsICRwcm9wZXJ0eSwgJGh1ZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAmLm1hdC1wcmltYXJ5IHtcbiAgICAjeyRwcm9wZXJ0eX06IG1hdC1jb2xvcigkcHJpbWFyeSwgJGh1ZSk7XG4gIH1cbiAgJi5tYXQtYWNjZW50IHtcbiAgICAjeyRwcm9wZXJ0eX06IG1hdC1jb2xvcigkYWNjZW50LCAkaHVlKTtcbiAgfVxuICAmLm1hdC13YXJuIHtcbiAgICAjeyRwcm9wZXJ0eX06IG1hdC1jb2xvcigkd2FybiwgJGh1ZSk7XG4gIH1cblxuICAmLm1hdC1wcmltYXJ5LCAmLm1hdC1hY2NlbnQsICYubWF0LXdhcm4sICZbZGlzYWJsZWRdIHtcbiAgICAmW2Rpc2FibGVkXSB7XG4gICAgICAkcGFsZXR0ZTogaWYoJHByb3BlcnR5ID09ICdjb2xvcicsICRmb3JlZ3JvdW5kLCAkYmFja2dyb3VuZCk7XG4gICAgICAjeyRwcm9wZXJ0eX06IG1hdC1jb2xvcigkcGFsZXR0ZSwgZGlzYWJsZWQtYnV0dG9uKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1idXR0b24tdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtYnV0dG9uLCAubWF0LWljb24tYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uIHtcbiAgICAvLyBCdXR0b25zIHdpdGhvdXQgYSBiYWNrZ3JvdW5kIGNvbG9yIHNob3VsZCBpbmhlcml0IHRoZSBmb250IGNvbG9yLiBUaGlzIGlzIG5lY2Vzc2FyeSB0b1xuICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBidXR0b24gaXMgcmVhZGFibGUgb24gY3VzdG9tIGJhY2tncm91bmQgY29sb3JzLiBJdCdzIHdyb25nIHRvIGFsd2F5cyBhc3N1bWVcbiAgICAvLyB0aGF0IHRob3NlIGJ1dHRvbnMgYXJlIGFsd2F5cyBwbGFjZWQgaW5zaWRlIG9mIGNvbnRhaW5lcnMgd2l0aCB0aGUgZGVmYXVsdCBiYWNrZ3JvdW5kXG4gICAgLy8gY29sb3Igb2YgdGhlIHRoZW1lIChlLmcuIHRoZW1lZCB0b29sYmFycykuXG4gICAgY29sb3I6IGluaGVyaXQ7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi10aGVtZS1wcm9wZXJ0eSgkdGhlbWUsICdjb2xvcicsIHRleHQpO1xuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXktY29sb3IoJHRoZW1lKTtcblxuICAgIC8vIFNldHVwIHRoZSByaXBwbGUgY29sb3IgdG8gYmUgYmFzZWQgb24gdGhlIHRleHQgY29sb3IuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSByaXBwbGVzXG4gICAgLy8gYXJlIG1hdGNoaW5nIHdpdGggdGhlIGN1cnJlbnQgdGhlbWUgcGFsZXR0ZSBhbmQgYXJlIGluIGNvbnRyYXN0IHRvIHRoZSBiYWNrZ3JvdW5kIGNvbG9yXG4gICAgLy8gKGUuZyBpbiB0aGVtZWQgdG9vbGJhcnMpLlxuICAgIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgICAgb3BhY2l0eTogJF9tYXQtYnV0dG9uLXJpcHBsZS1vcGFjaXR5O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkge1xuICAgIGJhY2tncm91bmQ6IG1hcF9nZXQoJGZvcmVncm91bmQsIGJhc2UpO1xuICB9XG5cbiAgLy8gTm90ZTogdGhpcyBuZWVkcyBhIGJpdCBleHRyYSBzcGVjaWZpY2l0eSwgYmVjYXVzZSB3ZSdyZSBub3QgZ3VhcmFudGVlZCB0aGUgaW5jbHVzaW9uXG4gIC8vIG9yZGVyIG9mIHRoZSB0aGVtZSBzdHlsZXMgYW5kIHRoZSBidXR0b24gcmVzZXQgbWF5IGVuZCB1cCByZXNldHRpbmcgdGhpcyBhcyB3ZWxsLlxuICAubWF0LXN0cm9rZWQtYnV0dG9uOm5vdChbZGlzYWJsZWRdKSB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG5cbiAgLm1hdC1mbGF0LWJ1dHRvbiwgLm1hdC1yYWlzZWQtYnV0dG9uLCAubWF0LWZhYiwgLm1hdC1taW5pLWZhYiB7XG4gICAgLy8gRGVmYXVsdCBmb250IGFuZCBiYWNrZ3JvdW5kIGNvbG9yIHdoZW4gbm90IHVzaW5nIGFueSBjb2xvciBwYWxldHRlLlxuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgcmFpc2VkLWJ1dHRvbik7XG5cbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi10aGVtZS1wcm9wZXJ0eSgkdGhlbWUsICdjb2xvcicsIGRlZmF1bHQtY29udHJhc3QpO1xuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLXRoZW1lLXByb3BlcnR5KCR0aGVtZSwgJ2JhY2tncm91bmQtY29sb3InLCBkZWZhdWx0KTtcbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi1yaXBwbGUtY29sb3IoJHRoZW1lLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgfVxuXG4gIC5tYXQtc3Ryb2tlZC1idXR0b24sIC5tYXQtZmxhdC1idXR0b24ge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDAsICR0aGVtZSk7XG4gIH1cblxuICAubWF0LXJhaXNlZC1idXR0b24ge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDIsICR0aGVtZSk7XG5cbiAgICAmOm5vdChbZGlzYWJsZWRdKTphY3RpdmUge1xuICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oOCwgJHRoZW1lKTtcbiAgICB9XG5cbiAgICAmW2Rpc2FibGVkXSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigwLCAkdGhlbWUpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZmFiLCAubWF0LW1pbmktZmFiIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbig2LCAkdGhlbWUpO1xuXG4gICAgJjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDEyLCAkdGhlbWUpO1xuICAgIH1cblxuICAgICZbZGlzYWJsZWRdIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDAsICR0aGVtZSk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtYnV0dG9uLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWJ1dHRvbiwgLm1hdC1yYWlzZWQtYnV0dG9uLCAubWF0LWljb24tYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLFxuICAubWF0LWZsYXQtYnV0dG9uLCAubWF0LWZhYiwgLm1hdC1taW5pLWZhYiB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgYnV0dG9uKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYnV0dG9uKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJ1dHRvbik7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LWJ1dHRvbi10b2dnbGUtdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRkaXZpZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLFxuICAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDIsICR0aGVtZSk7XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLFxuICAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCB7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaGludC10ZXh0KTtcblxuICAgIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZm9jdXNlZC1idXR0b24pO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuXG4gICAgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBmb2N1c2VkLWJ1dHRvbiwgMSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlICsgLm1hdC1idXR0b24tdG9nZ2xlIHtcbiAgICBib3JkZXItbGVmdDogc29saWQgMXB4ICRkaXZpZGVyLWNvbG9yO1xuICB9XG5cbiAgW2Rpcj0ncnRsJ10gLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlICsgLm1hdC1idXR0b24tdG9nZ2xlIHtcbiAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICBib3JkZXItcmlnaHQ6IHNvbGlkIDFweCAkZGl2aWRlci1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1idXR0b24tdG9nZ2xlLXZlcnRpY2FsIHtcbiAgICAubWF0LWJ1dHRvbi10b2dnbGUgKyAubWF0LWJ1dHRvbi10b2dnbGUge1xuICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gICAgICBib3JkZXItcmlnaHQ6IG5vbmU7XG4gICAgICBib3JkZXItdG9wOiBzb2xpZCAxcHggJGRpdmlkZXItY29sb3I7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgc2VsZWN0ZWQtYnV0dG9uKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG5cbiAgICAmLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC1idXR0b24pO1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZGlzYWJsZWQtYnV0dG9uLXRvZ2dsZSk7XG5cbiAgICAmLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgICB9XG5cbiAgICAmLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBzZWxlY3RlZC1kaXNhYmxlZC1idXR0b24pO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQsXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIHtcbiAgICBib3JkZXI6IHNvbGlkIDFweCAkZGl2aWRlci1jb2xvcjtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWJ1dHRvbi10b2dnbGUtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtYnV0dG9uLXRvZ2dsZSB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxufVxuXG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LWNhcmQtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1jYXJkIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigxLCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgICAvLyBOZWVkcyBleHRyYSBzcGVjaWZpY2l0eSB0byBiZSBhYmxlIHRvIG92ZXJyaWRlIHRoZSBlbGV2YXRpb24gc2VsZWN0b3JzLlxuICAgICYubWF0LWNhcmQtZmxhdCB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigwLCAkdGhlbWUpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtY2FyZC1zdWJ0aXRsZSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtY2FyZC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1jYXJkIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC1jYXJkLXRpdGxlIHtcbiAgICBmb250OiB7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGhlYWRsaW5lKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIHRpdGxlKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWNhcmQtaGVhZGVyIC5tYXQtY2FyZC10aXRsZSB7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIHRpdGxlKTtcbiAgfVxuXG4gIC5tYXQtY2FyZC1zdWJ0aXRsZSxcbiAgLm1hdC1jYXJkLWNvbnRlbnQge1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpO1xuICB9XG59XG5cblxuXG5cblxuQG1peGluIG1hdC1jaGVja2JveC10aGVtZSgkdGhlbWUpIHtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cblxuICAvLyBUaGUgY29sb3Igb2YgdGhlIGNoZWNrYm94J3MgY2hlY2ttYXJrIC8gbWl4ZWRtYXJrLlxuICAkY2hlY2tib3gtbWFyay1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kKTtcblxuICAvLyBOT1RFKHRyYXZpc2thdWZtYW4pOiBXaGlsZSB0aGUgc3BlYyBjYWxscyBmb3IgdHJhbnNsdWNlbnQgYmxhY2tzL3doaXRlcyBmb3IgZGlzYWJsZWQgY29sb3JzLFxuICAvLyB0aGlzIGRvZXMgbm90IHdvcmsgd2VsbCB3aXRoIGVsZW1lbnRzIGxheWVyZWQgb24gdG9wIG9mIG9uZSBhbm90aGVyLiBUbyBnZXQgYXJvdW5kIHRoaXMgd2VcbiAgLy8gYmxlbmQgdGhlIGNvbG9ycyB0b2dldGhlciBiYXNlZCBvbiB0aGUgYmFzZSBjb2xvciBhbmQgdGhlIHRoZW1lIGJhY2tncm91bmQuXG4gICR3aGl0ZS0zMHBjdC1vcGFjaXR5LW9uLWRhcms6ICM2ODY4Njg7XG4gICRibGFjay0yNnBjdC1vcGFjaXR5LW9uLWxpZ2h0OiAjYjBiMGIwO1xuICAkZGlzYWJsZWQtY29sb3I6IGlmKCRpcy1kYXJrLXRoZW1lLCAkd2hpdGUtMzBwY3Qtb3BhY2l0eS1vbi1kYXJrLCAkYmxhY2stMjZwY3Qtb3BhY2l0eS1vbi1saWdodCk7XG5cbiAgLm1hdC1jaGVja2JveC1mcmFtZSB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrIHtcbiAgICBmaWxsOiAkY2hlY2tib3gtbWFyay1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGgge1xuICAgIC8vICFpbXBvcnRhbnQgaXMgbmVlZGVkIGhlcmUgYmVjYXVzZSBhIHN0cm9rZSBtdXN0IGJlIHNldCBhcyBhblxuICAgIC8vIGF0dHJpYnV0ZSBvbiB0aGUgU1ZHIGluIG9yZGVyIGZvciBsaW5lIGFuaW1hdGlvbiB0byB3b3JrIHByb3Blcmx5LlxuICAgIHN0cm9rZTogJGNoZWNrYm94LW1hcmstY29sb3IgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5tYXQtY2hlY2tib3gtbWl4ZWRtYXJrIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY2hlY2tib3gtbWFyay1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSwgLm1hdC1jaGVja2JveC1jaGVja2VkIHtcbiAgICAmLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnkpO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkd2Fybik7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1jaGVja2JveC1kaXNhYmxlZCB7XG4gICAgJi5tYXQtY2hlY2tib3gtY2hlY2tlZCxcbiAgICAmLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIHtcbiAgICAgIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlZC1jb2xvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOm5vdCgubWF0LWNoZWNrYm94LWNoZWNrZWQpIHtcbiAgICAgIC5tYXQtY2hlY2tib3gtZnJhbWUge1xuICAgICAgICBib3JkZXItY29sb3I6ICRkaXNhYmxlZC1jb2xvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgICB9XG4gIH1cblxuICAvLyBTd2l0Y2ggdGhpcyB0byBhIHNvbGlkIGNvbG9yIHNpbmNlIHdlJ3JlIHVzaW5nIGBvcGFjaXR5YFxuICAvLyB0byBjb250cm9sIGhvdyBvcGFxdWUgdGhlIHJpcHBsZSBzaG91bGQgYmUuXG4gIC5tYXQtY2hlY2tib3ggLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWFwX2dldChtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCksIGJhc2UpO1xuICB9XG5cbiAgLm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKSxcbiAgLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpIHtcbiAgICAmLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRwcmltYXJ5KTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGFjY2VudCk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkd2Fybik7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtY2hlY2tib3gtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtY2hlY2tib3gge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAvLyBUT0RPKGthcmEpOiBSZW1vdmUgdGhpcyBzdHlsZSB3aGVuIGZpeGluZyB2ZXJ0aWNhbCBiYXNlbGluZVxuICAubWF0LWNoZWNrYm94LWxheW91dCAubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgICBsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGJvZHktMik7XG4gIH1cbn1cblxuXG5cblxuXG5cbiRtYXQtY2hpcC1yZW1vdmUtZm9udC1zaXplOiAxOHB4O1xuXG5AbWl4aW4gbWF0LWNoaXBzLWNvbG9yKCRmb3JlZ3JvdW5kLCAkYmFja2dyb3VuZCkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZDtcbiAgY29sb3I6ICRmb3JlZ3JvdW5kO1xuXG4gIC5tYXQtY2hpcC1yZW1vdmUge1xuICAgIGNvbG9yOiAkZm9yZWdyb3VuZDtcbiAgICBvcGFjaXR5OiAwLjQ7XG4gIH1cbn1cblxuXG4vLyBBcHBsaWVzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGZvciBhIHJpcHBsZSBlbGVtZW50LlxuLy8gSWYgdGhlIGNvbG9yIHZhbHVlIHByb3ZpZGVkIGlzIG5vdCBhIFNhc3MgY29sb3IsXG4vLyB3ZSBhc3N1bWUgdGhhdCB3ZSd2ZSBiZWVuIGdpdmVuIGEgQ1NTIHZhcmlhYmxlLlxuLy8gU2luY2Ugd2UgY2FuJ3QgcGVyZm9ybSBhbHBoYS1ibGVuZGluZyBvbiBhIENTUyB2YXJpYWJsZSxcbi8vIHdlIGluc3RlYWQgYWRkIHRoZSBvcGFjaXR5IGRpcmVjdGx5IHRvIHRoZSByaXBwbGUgZWxlbWVudC5cbkBtaXhpbiBfbWF0LWNoaXBzLXJpcHBsZS1iYWNrZ3JvdW5kKCRwYWxldHRlLCAkZGVmYXVsdC1jb250cmFzdCwgJG9wYWNpdHkpIHtcbiAgJGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgJGRlZmF1bHQtY29udHJhc3QsICRvcGFjaXR5KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY29sb3I7XG4gIEBpZiAodHlwZS1vZigkYmFja2dyb3VuZC1jb2xvcikgIT0gY29sb3IpIHtcbiAgICBvcGFjaXR5OiAkb3BhY2l0eTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWNoaXBzLXRoZW1lLWNvbG9yKCRwYWxldHRlKSB7XG4gIEBpbmNsdWRlIG1hdC1jaGlwcy1jb2xvcihtYXQtY29sb3IoJHBhbGV0dGUsIGRlZmF1bHQtY29udHJhc3QpLCBtYXQtY29sb3IoJHBhbGV0dGUpKTtcblxuICAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgIEBpbmNsdWRlIF9tYXQtY2hpcHMtcmlwcGxlLWJhY2tncm91bmQoJHBhbGV0dGUsIGRlZmF1bHQtY29udHJhc3QsIDAuMSk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1jaGlwcy10aGVtZSgkdGhlbWUpIHtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgJHVuc2VsZWN0ZWQtYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCB1bnNlbGVjdGVkLWNoaXApO1xuICAkdW5zZWxlY3RlZC1mb3JlZ3JvdW5kOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcCB7XG4gICAgQGluY2x1ZGUgbWF0LWNoaXBzLWNvbG9yKCR1bnNlbGVjdGVkLWZvcmVncm91bmQsICR1bnNlbGVjdGVkLWJhY2tncm91bmQpO1xuXG4gICAgJjpub3QoLm1hdC1jaGlwLWRpc2FibGVkKSB7XG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDMsICR0aGVtZSk7XG4gICAgICB9XG5cbiAgICAgIC5tYXQtY2hpcC1yZW1vdmU6aG92ZXIge1xuICAgICAgICBvcGFjaXR5OiAwLjU0O1xuICAgICAgfVxuICAgIH1cblxuICAgICYubWF0LWNoaXAtZGlzYWJsZWQge1xuICAgICAgb3BhY2l0eTogMC40O1xuICAgIH1cblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hcF9nZXQoJGZvcmVncm91bmQsIGJhc2UpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZCB7XG4gICAgJi5tYXQtcHJpbWFyeSB7XG4gICAgICBAaW5jbHVkZSBtYXQtY2hpcHMtdGhlbWUtY29sb3IoJHByaW1hcnkpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgQGluY2x1ZGUgbWF0LWNoaXBzLXRoZW1lLWNvbG9yKCR3YXJuKTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgQGluY2x1ZGUgbWF0LWNoaXBzLXRoZW1lLWNvbG9yKCRhY2NlbnQpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWNoaXBzLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWNoaXAge1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTIpO1xuICAgIGZvbnQtd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0yKTtcblxuICAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uLFxuICAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb24ge1xuICAgICAgZm9udC1zaXplOiAkbWF0LWNoaXAtcmVtb3ZlLWZvbnQtc2l6ZTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LXRhYmxlLXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtdGFibGUge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2NhcmQnKTtcbiAgfVxuXG4gIC5tYXQtdGFibGUgdGhlYWQsIC5tYXQtdGFibGUgdGJvZHksIC5tYXQtdGFibGUgdGZvb3QsXG4gIG1hdC1oZWFkZXItcm93LCBtYXQtcm93LCBtYXQtZm9vdGVyLXJvdyxcbiAgW21hdC1oZWFkZXItcm93XSwgW21hdC1yb3ddLCBbbWF0LWZvb3Rlci1yb3ddLFxuICAubWF0LXRhYmxlLXN0aWNreSB7XG4gICAgYmFja2dyb3VuZDogaW5oZXJpdDtcbiAgfVxuXG4gIG1hdC1yb3csIG1hdC1oZWFkZXItcm93LCBtYXQtZm9vdGVyLXJvdyxcbiAgdGgubWF0LWhlYWRlci1jZWxsLCB0ZC5tYXQtY2VsbCwgdGQubWF0LWZvb3Rlci1jZWxsIHtcbiAgICBib3JkZXItYm90dG9tLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG5cbiAgLm1hdC1oZWFkZXItY2VsbCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1jZWxsLCAubWF0LWZvb3Rlci1jZWxsIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXRhYmxlLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXRhYmxlIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC1oZWFkZXItY2VsbCB7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pO1xuICAgIGZvbnQtd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0yKTtcbiAgfVxuXG4gIC5tYXQtY2VsbCwgLm1hdC1mb290ZXItY2VsbCB7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSk7XG4gIH1cbn1cblxuXG5cblxuXG5cblxuJG1hdC1kYXRlcGlja2VyLXNlbGVjdGVkLXRvZGF5LWJveC1zaGFkb3ctd2lkdGg6IDFweDtcbiRtYXQtZGF0ZXBpY2tlci1zZWxlY3RlZC1mYWRlLWFtb3VudDogMC42O1xuJG1hdC1kYXRlcGlja2VyLXRvZGF5LWZhZGUtYW1vdW50OiAwLjI7XG4kbWF0LWNhbGVuZGFyLWJvZHktZm9udC1zaXplOiAxM3B4ICFkZWZhdWx0O1xuJG1hdC1jYWxlbmRhci13ZWVrZGF5LXRhYmxlLWZvbnQtc2l6ZTogMTFweCAhZGVmYXVsdDtcblxuQG1peGluIF9tYXQtZGF0ZXBpY2tlci1jb2xvcigkcGFsZXR0ZSkge1xuICAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgZGVmYXVsdC1jb250cmFzdCk7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQgPiAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQge1xuICAgICRiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJHBhbGV0dGUpO1xuXG4gICAgQGlmICh0eXBlLW9mKCRiYWNrZ3JvdW5kKSA9PSBjb2xvcikge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogZmFkZS1vdXQoJGJhY2tncm91bmQsICRtYXQtZGF0ZXBpY2tlci1zZWxlY3RlZC1mYWRlLWFtb3VudCk7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIC8vIElmIHdlIGNvdWxkbid0IHJlc29sdmUgdG8gYmFja2dyb3VuZCB0byBhIGNvbG9yIChlLmcuIGl0J3MgYSBDU1MgdmFyaWFibGUpLFxuICAgICAgLy8gZmFsbCBiYWNrIHRvIGZhZGluZyB0aGUgY29udGVudCBvdXQgdmlhIGBvcGFjaXR5YC5cbiAgICAgIG9wYWNpdHk6ICRtYXQtZGF0ZXBpY2tlci10b2RheS1mYWRlLWFtb3VudDtcbiAgICB9XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQge1xuICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwICRtYXQtZGF0ZXBpY2tlci1zZWxlY3RlZC10b2RheS1ib3gtc2hhZG93LXdpZHRoXG4gICAgICAgICAgICAgICAgbWF0LWNvbG9yKCRwYWxldHRlLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWRhdGVwaWNrZXItdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG5cbiAgLm1hdC1jYWxlbmRhci1hcnJvdyB7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBpY29uKTtcbiAgfVxuXG4gIC8vIFRoZSBwcmV2L25leHQgYnV0dG9ucyBuZWVkIGEgYml0IG1vcmUgc3BlY2lmaWNpdHkgdG9cbiAgLy8gYXZvaWQgYmVpbmcgb3ZlcndyaXR0ZW4gYnkgdGhlIC5tYXQtaWNvbi1idXR0b24uXG4gIC5tYXQtZGF0ZXBpY2tlci10b2dnbGUsXG4gIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItbmV4dC1idXR0b24sXG4gIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItcHJldmlvdXMtYnV0dG9uIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBpY29uKTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBoaW50LXRleHQpO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXItZGl2aWRlcjo6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktbGFiZWwge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQgPiAubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyLFxuICAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZSxcbiAgLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZSB7XG4gICAgJiA+IC5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3Zlcik7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpIHtcbiAgICAvLyBOb3RlOiB0aG91Z2ggaXQncyBub3QgdGV4dCwgdGhlIGJvcmRlciBpcyBhIGhpbnQgYWJvdXQgdGhlIGZhY3QgdGhhdCB0aGlzIGlzIHRvZGF5J3MgZGF0ZSxcbiAgICAvLyBzbyB3ZSB1c2UgdGhlIGhpbnQgY29sb3IuXG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGhpbnQtdGV4dCk7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQgPiAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCkge1xuICAgICRjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBoaW50LXRleHQpO1xuXG4gICAgQGlmICh0eXBlLW9mKCRjb2xvcikgPT0gY29sb3IpIHtcbiAgICAgIGJvcmRlci1jb2xvcjogZmFkZS1vdXQoJGNvbG9yLCAkbWF0LWRhdGVwaWNrZXItdG9kYXktZmFkZS1hbW91bnQpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICAvLyBJZiB0aGUgY29sb3IgZGlkbid0IHJlc29sdmUgdG8gYSBjb2xvciB2YWx1ZSwgYnV0IHNvbWV0aGluZyBsaWtlIGEgQ1NTIHZhcmlhYmxlLCB3ZSBjYW4ndFxuICAgICAgLy8gZmFkZSBpdCBvdXQgc28gd2UgZmFsbCBiYWNrIHRvIHJlZHVjaW5nIHRoZSBlbGVtZW50IG9wYWNpdHkuIE5vdGUgdGhhdCB3ZSBkb24ndCB1c2UgdGhlXG4gICAgICAvLyAkbWF0LWRhdGVwaWNrZXItdG9kYXktZmFkZS1hbW91bnQsIGJlY2F1c2UgaGludCB0ZXh0IHVzdWFsbHkgaGFzIHNvbWUgb3BhY2l0eSBhcHBsaWVkXG4gICAgICAvLyB0byBpdCBhbHJlYWR5IGFuZCB3ZSBkb24ndCB3YW50IHRoZW0gdG8gc3RhY2sgb24gdG9wIG9mIGVhY2ggb3RoZXIuXG4gICAgICBvcGFjaXR5OiAwLjU7XG4gICAgfVxuICB9XG5cbiAgQGluY2x1ZGUgX21hdC1kYXRlcGlja2VyLWNvbG9yKG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KSk7XG5cbiAgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDQsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICBAaW5jbHVkZSBfbWF0LWRhdGVwaWNrZXItY29sb3IobWFwLWdldCgkdGhlbWUsIGFjY2VudCkpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgQGluY2x1ZGUgX21hdC1kYXRlcGlja2VyLWNvbG9yKG1hcC1nZXQoJHRoZW1lLCB3YXJuKSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQtdG91Y2gge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDAsICR0aGVtZSk7XG4gIH1cblxuICAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSksIHRleHQpO1xuXG4gICAgJi5tYXQtYWNjZW50IHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IobWFwLWdldCgkdGhlbWUsIGFjY2VudCksIHRleHQpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgd2FybiksIHRleHQpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWRhdGVwaWNrZXItdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtY2FsZW5kYXIge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHkge1xuICAgIGZvbnQtc2l6ZTogJG1hdC1jYWxlbmRhci1ib2R5LWZvbnQtc2l6ZTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS1sYWJlbCxcbiAgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uIHtcbiAgICBmb250OiB7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJ1dHRvbik7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBidXR0b24pO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyIHRoIHtcbiAgICBmb250OiB7XG4gICAgICBzaXplOiAkbWF0LWNhbGVuZGFyLXdlZWtkYXktdGFibGUtZm9udC1zaXplO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0xKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cblxuQG1peGluIG1hdC1kaWFsb2ctdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigyNCwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGRpYWxvZyk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1kaWFsb2ctdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtZGlhbG9nLXRpdGxlIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgdGl0bGUpO1xuICB9XG59XG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LWV4cGFuc2lvbi1wYW5lbC10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWV4cGFuc2lvbi1wYW5lbCB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMiwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG5cbiAgLm1hdC1hY3Rpb24tcm93IHtcbiAgICBib3JkZXItdG9wLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG5cbiAgLm1hdC1leHBhbnNpb24tcGFuZWwge1xuICAgICYgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkLFxuICAgICYgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQsXG4gICAgJjpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVyIHtcbiAgICAgICY6bm90KFthcmlhLWRpc2FibGVkPSd0cnVlJ10pIHtcbiAgICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3Zlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRGlzYWJsZSB0aGUgaG92ZXIgb24gdG91Y2ggZGV2aWNlcyBzaW5jZSBpdCBjYW4gYXBwZWFyIGxpa2UgaXQgaXMgc3R1Y2suIFdlIGNhbid0IHVzZVxuICAvLyBgQG1lZGlhIChob3ZlcilgIGFib3ZlLCBiZWNhdXNlIHRoZSBkZXNrdG9wIHN1cHBvcnQgYnJvd3NlciBzdXBwb3J0IGlzbid0IGdyZWF0LlxuICBAbWVkaWEgKGhvdmVyOiBub25lKSB7XG4gICAgLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpOm5vdChbYXJpYS1kaXNhYmxlZD0ndHJ1ZSddKVxuICAgICAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbixcbiAgLm1hdC1leHBhbnNpb24taW5kaWNhdG9yOjphZnRlciB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9J3RydWUnXSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtYnV0dG9uKTtcblxuICAgIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZSxcbiAgICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ge1xuICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtZXhwYW5zaW9uLXBhbmVsLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIHN1YmhlYWRpbmctMSk7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIHN1YmhlYWRpbmctMSk7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBzdWJoZWFkaW5nLTEpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBib2R5LTEpO1xuICB9XG59XG5cblxuXG5cbi8vIFRoaXMgbWl4aW4gd2lsbCBlbnN1cmUgdGhhdCBsaW5lcyB0aGF0IG92ZXJmbG93IHRoZSBjb250YWluZXIgd2lsbCBoaWRlIHRoZSBvdmVyZmxvdyBhbmRcbi8vIHRydW5jYXRlIG5lYXRseSB3aXRoIGFuIGVsbGlwc2lzLlxuQG1peGluIG1hdC10cnVuY2F0ZS1saW5lKCkge1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuLy8gTWl4aW4gdG8gcHJvdmlkZSBhbGwgbWF0LWxpbmUgc3R5bGVzLCBjaGFuZ2luZyBzZWNvbmRhcnkgZm9udCBzaXplIGJhc2VkIG9uIHdoZXRoZXIgdGhlIGxpc3Rcbi8vIGlzIGluIGRlbnNlIG1vZGUuXG5AbWl4aW4gbWF0LWxpbmUtYmFzZSgkc2Vjb25kYXJ5LWZvbnQtc2l6ZSkge1xuICAubWF0LWxpbmUge1xuICAgIEBpbmNsdWRlIG1hdC10cnVuY2F0ZS1saW5lKCk7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcblxuICAgIC8vIGFsbCBsaW5lcyBidXQgdGhlIHRvcCBsaW5lIHNob3VsZCBoYXZlIHNtYWxsZXIgdGV4dFxuICAgICY6bnRoLWNoaWxkKG4rMikge1xuICAgICAgZm9udC1zaXplOiAkc2Vjb25kYXJ5LWZvbnQtc2l6ZTtcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhpcyBtaXhpbiBub3JtYWxpemVzIGRlZmF1bHQgZWxlbWVudCBzdHlsZXMsIGUuZy4gZm9udCB3ZWlnaHQgZm9yIGhlYWRpbmcgdGV4dC5cbkBtaXhpbiBtYXQtbm9ybWFsaXplLXRleHQoKSB7XG4gICYgPiAqIHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgfVxufVxuXG4vLyBUaGlzIG1peGluIHByb3ZpZGVzIGJhc2Ugc3R5bGVzIGZvciB0aGUgd3JhcHBlciBhcm91bmQgbWF0LWxpbmUgZWxlbWVudHMgaW4gYSBsaXN0LlxuQG1peGluIG1hdC1saW5lLXdyYXBwZXItYmFzZSgpIHtcbiAgQGluY2x1ZGUgbWF0LW5vcm1hbGl6ZS10ZXh0KCk7XG5cbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6IDEwMCU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgLy8gTXVzdCByZW1vdmUgd3JhcHBlciB3aGVuIGxpbmVzIGFyZSBlbXB0eSBvciBpdCB0YWtlcyB1cCBob3Jpem9udGFsXG4gIC8vIHNwYWNlIGFuZCBwdXNoZXMgb3RoZXIgZWxlbWVudHMgdG8gdGhlIHJpZ2h0LlxuICAmOmVtcHR5IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cblxuXG4vLyBJbmNsdWRlIHRoaXMgZW1wdHkgbWl4aW4gZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIG90aGVyIGNvbXBvbmVudHMuXG5AbWl4aW4gbWF0LWdyaWQtbGlzdC10aGVtZSgkdGhlbWUpIHsgfVxuXG5AbWl4aW4gbWF0LWdyaWQtbGlzdC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1ncmlkLXRpbGUtaGVhZGVyLFxuICAubWF0LWdyaWQtdGlsZS1mb290ZXIge1xuICAgIEBpbmNsdWRlIG1hdC1saW5lLWJhc2UobWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKSk7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSk7XG4gIH1cbn1cblxuXG5cblxuLy8gSW5jbHVkZSB0aGlzIGVtcHR5IG1peGluIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBvdGhlciBjb21wb25lbnRzLlxuQG1peGluIG1hdC1pY29uLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWljb24ge1xuICAgICYubWF0LXByaW1hcnkge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgdGV4dCk7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgdGV4dCk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1pY29uLXR5cG9ncmFwaHkoJGNvbmZpZykgeyB9XG5cblxuXG5cblxuLy8gUmVuZGVycyBhIGdyYWRpZW50IGZvciBzaG93aW5nIHRoZSBkYXNoZWQgbGluZSB3aGVuIHRoZSBpbnB1dCBpcyBkaXNhYmxlZC5cbi8vIFVubGlrZSB1c2luZyBhIGJvcmRlciwgYSBncmFkaWVudCBhbGxvd3MgdXMgdG8gYWRqdXN0IHRoZSBzcGFjaW5nIG9mIHRoZSBkb3R0ZWQgbGluZVxuLy8gdG8gbWF0Y2ggdGhlIE1hdGVyaWFsIERlc2lnbiBzcGVjLlxuQG1peGluIG1hdC1jb250cm9sLWRpc2FibGVkLXVuZGVybGluZSgkY29sb3IpIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAkY29sb3IgMCUsICRjb2xvciAzMyUsIHRyYW5zcGFyZW50IDAlKTtcbiAgYmFja2dyb3VuZC1zaXplOiA0cHggMTAwJTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14O1xufVxuXG4vLyBGaWd1cmVzIG91dCB0aGUgY29sb3Igb2YgdGhlIHBsYWNlaG9sZGVyIGZvciBhIGZvcm0gY29udHJvbC5cbi8vIFVzZWQgcHJpbWFyaWx5IHRvIHByZXZlbnQgdGhlIHZhcmlvdXMgZm9ybSBjb250cm9scyBmcm9tXG4vLyBiZWNvbWluZyBvdXQgb2Ygc3luYyBzaW5jZSB0aGVzZSBjb2xvcnMgYXJlbid0IGluIGEgcGFsZXR0ZS5cbkBmdW5jdGlvbiBfbWF0LWNvbnRyb2wtcGxhY2Vob2xkZXItY29sb3IoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG4gIEByZXR1cm4gbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCwgaWYoJGlzLWRhcmstdGhlbWUsIDAuNSwgMC40MikpO1xufVxuXG5cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1hdGVyaWFsL25vLXByZWZpeGVzICovXG5AbWl4aW4gdXNlci1zZWxlY3QoJHZhbHVlKSB7XG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6ICR2YWx1ZTtcbiAgLW1vei11c2VyLXNlbGVjdDogJHZhbHVlO1xuICAtbXMtdXNlci1zZWxlY3Q6ICR2YWx1ZTtcbiAgdXNlci1zZWxlY3Q6ICR2YWx1ZTtcbn1cblxuQG1peGluIGlucHV0LXBsYWNlaG9sZGVyIHtcbiAgJjo6cGxhY2Vob2xkZXIge1xuICAgIEBjb250ZW50O1xuICB9XG5cbiAgJjo6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cblxuICAmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBAY29udGVudDtcbiAgfVxuXG4gICY6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG5AbWl4aW4gY3Vyc29yLWdyYWIge1xuICBjdXJzb3I6IC13ZWJraXQtZ3JhYjtcbiAgY3Vyc29yOiBncmFiO1xufVxuXG5AbWl4aW4gY3Vyc29yLWdyYWJiaW5nIHtcbiAgY3Vyc29yOiAtd2Via2l0LWdyYWJiaW5nO1xuICBjdXJzb3I6IGdyYWJiaW5nO1xufVxuXG5AbWl4aW4gYmFja2ZhY2UtdmlzaWJpbGl0eSgkdmFsdWUpIHtcbiAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiAkdmFsdWU7XG4gIGJhY2tmYWNlLXZpc2liaWxpdHk6ICR2YWx1ZTtcbn1cbi8qIHN0eWxlbGludC1lbmFibGUgKi9cblxuXG5cbkBtaXhpbiBtYXQtaW5wdXQtdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXIge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtaW5wdXQtZWxlbWVudDpkaXNhYmxlZCxcbiAgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlciB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gIH1cblxuICAubWF0LWlucHV0LWVsZW1lbnQge1xuICAgIGNhcmV0LWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIHRleHQpO1xuXG4gICAgQGluY2x1ZGUgaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgICAgY29sb3I6IF9tYXQtY29udHJvbC1wbGFjZWhvbGRlci1jb2xvcigkdGhlbWUpO1xuICAgIH1cblxuICAgIC8vIE9uIGRhcmsgdGhlbWVzIHdlIHNldCB0aGUgbmF0aXZlIGBzZWxlY3RgIGNvbG9yIHRvIHNvbWUgc2hhZGUgb2Ygd2hpdGUsXG4gICAgLy8gaG93ZXZlciB0aGUgY29sb3IgcHJvcGFnYXRlcyB0byBhbGwgb2YgdGhlIGBvcHRpb25gIGVsZW1lbnRzLCB3aGljaCBhcmVcbiAgICAvLyBhbHdheXMgb24gYSB3aGl0ZSBiYWNrZ3JvdW5kIGluc2lkZSB0aGUgZHJvcGRvd24sIGNhdXNpbmcgdGhlbSB0byBibGVuZCBpbi5cbiAgICAvLyBTaW5jZSB3ZSBjYW4ndCBjaGFuZ2UgYmFja2dyb3VuZCBvZiB0aGUgZHJvcGRvd24sIHdlIG5lZWQgdG8gZXhwbGljaXRseVxuICAgIC8vIHJlc2V0IHRoZSBjb2xvciBvZiB0aGUgb3B0aW9ucyB0byBzb21ldGhpbmcgZGFyay5cbiAgICBAaWYgKG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKSkge1xuICAgICAgb3B0aW9uIHtcbiAgICAgICAgY29sb3I6ICRkYXJrLXByaW1hcnktdGV4dDtcbiAgICAgIH1cblxuICAgICAgb3B0aW9uOmRpc2FibGVkIHtcbiAgICAgICAgY29sb3I6ICRkYXJrLWRpc2FibGVkLXRleHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm1hdC1hY2NlbnQgLm1hdC1pbnB1dC1lbGVtZW50IHtcbiAgICBjYXJldC1jb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIHRleHQpO1xuICB9XG5cbiAgLm1hdC13YXJuIC5tYXQtaW5wdXQtZWxlbWVudCxcbiAgLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1pbnB1dC1lbGVtZW50IHtcbiAgICBjYXJldC1jb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlciB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1pbnB1dC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLy8gVGhlIHVuaXQtbGVzcyBsaW5lLWhlaWdodCBmcm9tIHRoZSBmb250IGNvbmZpZy5cbiAgJGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgaW5wdXQpO1xuXG4gIC8vIFRoZSBhbW91bnQgb2Ygc3BhY2UgYmV0d2VlbiB0aGUgdG9wIG9mIHRoZSBsaW5lIGFuZCB0aGUgdG9wIG9mIHRoZSBhY3R1YWwgdGV4dFxuICAvLyAoYXMgYSBmcmFjdGlvbiBvZiB0aGUgZm9udC1zaXplKS5cbiAgJGxpbmUtc3BhY2luZzogKCRsaW5lLWhlaWdodCAtIDEpIC8gMjtcblxuICAvLyA8aW5wdXQ+IGVsZW1lbnRzIHNlZW0gdG8gaGF2ZSB0aGVpciBoZWlnaHQgc2V0IHNsaWdodGx5IHRvbyBsYXJnZSBvbiBTYWZhcmkgY2F1c2luZyB0aGUgdGV4dCB0b1xuICAvLyBiZSBtaXNhbGlnbmVkIHcuci50LiB0aGUgcGxhY2Vob2xkZXIuIEFkZGluZyB0aGlzIG1hcmdpbiBjb3JyZWN0cyBpdC5cbiAgaW5wdXQubWF0LWlucHV0LWVsZW1lbnQge1xuICAgIG1hcmdpbi10b3A6IC0kbGluZS1zcGFjaW5nICogMWVtO1xuICB9XG59XG5cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtbGlzdC10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWxpc3QtYmFzZSB7XG4gICAgLm1hdC1saXN0LWl0ZW0ge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgfVxuXG4gICAgLm1hdC1saXN0LW9wdGlvbiB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICB9XG5cbiAgICAubWF0LXN1YmhlYWRlciB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1saXN0LWl0ZW0tZGlzYWJsZWQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZGlzYWJsZWQtbGlzdC1vcHRpb24pO1xuICB9XG5cbiAgLm1hdC1saXN0LW9wdGlvbixcbiAgLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSxcbiAgLm1hdC1hY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSB7XG4gICAgJjpob3ZlciwgJjpmb2N1cyB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdob3ZlcicpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtbGlzdC1zaW5nbGUtc2VsZWN0ZWQtb3B0aW9uIHtcbiAgICAmLCAmOmhvdmVyLCAmOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIsIDAuMTIpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWxpc3QtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gICRmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuXG4gIC5tYXQtbGlzdC1pdGVtIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5O1xuICB9XG5cbiAgLm1hdC1saXN0LW9wdGlvbiB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseTtcbiAgfVxuXG4gIC8vIERlZmF1bHQgbGlzdFxuICAubWF0LWxpc3QtYmFzZSB7XG4gICAgLm1hdC1saXN0LWl0ZW0ge1xuICAgICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIHN1YmhlYWRpbmctMik7XG4gICAgICBAaW5jbHVkZSBtYXQtbGluZS1iYXNlKG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKSk7XG4gICAgfVxuXG4gICAgLm1hdC1saXN0LW9wdGlvbiB7XG4gICAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgc3ViaGVhZGluZy0yKTtcbiAgICAgIEBpbmNsdWRlIG1hdC1saW5lLWJhc2UobWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpKTtcbiAgICB9XG5cbiAgICAubWF0LXN1YmhlYWRlciB7XG4gICAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGJvZHktMik7XG4gICAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0yKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0yKTtcbiAgICB9XG4gIH1cblxuICAvLyBEZW5zZSBsaXN0XG4gIC5tYXQtbGlzdC1iYXNlW2RlbnNlXSB7XG4gICAgLm1hdC1saXN0LWl0ZW0ge1xuICAgICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pO1xuICAgICAgQGluY2x1ZGUgbWF0LWxpbmUtYmFzZShtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pKTtcbiAgICB9XG5cbiAgICAubWF0LWxpc3Qtb3B0aW9uIHtcbiAgICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKTtcbiAgICAgIEBpbmNsdWRlIG1hdC1saW5lLWJhc2UobWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKSk7XG4gICAgfVxuXG4gICAgLm1hdC1zdWJoZWFkZXIge1xuICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseTtcbiAgICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0yKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cblxuQG1peGluIG1hdC1tZW51LXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtbWVudS1wYW5lbCB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oNCwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdjYXJkJyk7XG4gIH1cblxuICAubWF0LW1lbnUtaXRlbSB7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgJ3RleHQnKTtcblxuICAgICZbZGlzYWJsZWRdIHtcbiAgICAgICYsICY6OmFmdGVyIHtcbiAgICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgJ2Rpc2FibGVkJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm1hdC1tZW51LWl0ZW0gLm1hdC1pY29uLW5vLWNvbG9yLFxuICAubWF0LW1lbnUtaXRlbS1zdWJtZW51LXRyaWdnZXI6OmFmdGVyIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCAnaWNvbicpO1xuICB9XG5cbiAgLm1hdC1tZW51LWl0ZW06aG92ZXIsXG4gIC5tYXQtbWVudS1pdGVtLmNkay1wcm9ncmFtLWZvY3VzZWQsXG4gIC5tYXQtbWVudS1pdGVtLmNkay1rZXlib2FyZC1mb2N1c2VkLFxuICAubWF0LW1lbnUtaXRlbS1oaWdobGlnaHRlZCB7XG4gICAgJjpub3QoW2Rpc2FibGVkXSkge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnaG92ZXInKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1tZW51LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LW1lbnUtaXRlbSB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgYm9keS0xKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMSk7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LXBhZ2luYXRvci10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcblxuICAubWF0LXBhZ2luYXRvciB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnY2FyZCcpO1xuICB9XG5cbiAgLm1hdC1wYWdpbmF0b3IsXG4gIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSAubWF0LXNlbGVjdC10cmlnZ2VyIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsXG4gIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudCB7XG4gICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkIG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgJ2ljb24nKTtcbiAgICBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCBtYXQtY29sb3IoJGZvcmVncm91bmQsICdpY29uJyk7XG4gIH1cblxuICAubWF0LXBhZ2luYXRvci1maXJzdCxcbiAgLm1hdC1wYWdpbmF0b3ItbGFzdCB7XG4gICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkIG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgJ2ljb24nKTtcbiAgfVxuXG4gIC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIHtcbiAgICAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsXG4gICAgLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50LFxuICAgIC5tYXQtcGFnaW5hdG9yLWZpcnN0LFxuICAgIC5tYXQtcGFnaW5hdG9yLWxhc3Qge1xuICAgICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsICdkaXNhYmxlZCcpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXBhZ2luYXRvci10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1wYWdpbmF0b3IsXG4gIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSAubWF0LXNlbGVjdC10cmlnZ2VyIHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBjYXB0aW9uKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbik7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuQG1peGluIG1hdC1wcm9ncmVzcy1iYXItdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuXG4gIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmQge1xuICAgIGZpbGw6IG1hdC1jb2xvcigkcHJpbWFyeSwgbGlnaHRlcik7XG4gIH1cblxuICAubWF0LXByb2dyZXNzLWJhci1idWZmZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgbGlnaHRlcik7XG4gIH1cblxuICAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5KTtcbiAgfVxuXG4gIC5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQge1xuICAgIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmQge1xuICAgICAgZmlsbDogbWF0LWNvbG9yKCRhY2NlbnQsIGxpZ2h0ZXIpO1xuICAgIH1cblxuICAgIC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgbGlnaHRlcik7XG4gICAgfVxuXG4gICAgLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIHtcbiAgICAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5kIHtcbiAgICAgIGZpbGw6IG1hdC1jb2xvcigkd2FybiwgbGlnaHRlcik7XG4gICAgfVxuXG4gICAgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkd2FybiwgbGlnaHRlcik7XG4gICAgfVxuXG4gICAgLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCR3YXJuKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1wcm9ncmVzcy1iYXItdHlwb2dyYXBoeSgkY29uZmlnKSB7IH1cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG5cbiAgLm1hdC1wcm9ncmVzcy1zcGlubmVyLCAubWF0LXNwaW5uZXIge1xuICAgIGNpcmNsZSB7XG4gICAgICBzdHJva2U6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IGNpcmNsZSB7XG4gICAgICBzdHJva2U6IG1hdC1jb2xvcigkYWNjZW50KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIGNpcmNsZSB7XG4gICAgICBzdHJva2U6IG1hdC1jb2xvcigkd2Fybik7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci10eXBvZ3JhcGh5KCRjb25maWcpIHsgfVxuXG5cblxuXG5cbkBtaXhpbiBfbWF0LXJhZGlvLWNvbG9yKCRwYWxldHRlKSB7XG4gICYubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGUge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlKTtcbiAgfVxuXG4gIC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLFxuICAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSxcbiAgJi5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLFxuICAmOmFjdGl2ZSAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtcmFkaW8tdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xlIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1yYWRpby1idXR0b24ge1xuICAgICYubWF0LXByaW1hcnkge1xuICAgICAgQGluY2x1ZGUgX21hdC1yYWRpby1jb2xvcigkcHJpbWFyeSk7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtcmFkaW8tY29sb3IoJGFjY2VudCk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXJhZGlvLWNvbG9yKCR3YXJuKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIG5lZWRzIGV4dHJhIHNwZWNpZmljaXR5LCBiZWNhdXNlIHRoZSBjbGFzc2VzIGFib3ZlIGFyZSBjb21iaW5lZFxuICAgIC8vIChlLmcuIGAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50YCkgd2hpY2ggaW5jcmVhc2VzIHRoZWlyIHNwZWNpZmljaXR5IGEgbG90LlxuICAgIC8vIFRPRE86IGNvbnNpZGVyIG1ha2luZyB0aGUgc2VsZWN0b3JzIGludG8gZGVzY2VuZGFudHMgKGAubWF0LXByaW1hcnkgLm1hdC1yYWRpby1idXR0b25gKS5cbiAgICAmLm1hdC1yYWRpby1kaXNhYmxlZCB7XG4gICAgICAmLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xlLFxuICAgICAgLm1hdC1yYWRpby1vdXRlci1jaXJjbGUge1xuICAgICAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQpO1xuICAgICAgfVxuXG4gICAgICAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50LFxuICAgICAgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkKTtcbiAgICAgIH1cblxuICAgICAgLm1hdC1yYWRpby1sYWJlbC1jb250ZW50IHtcbiAgICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFN3aXRjaCB0aGlzIHRvIGEgc29saWQgY29sb3Igc2luY2Ugd2UncmUgdXNpbmcgYG9wYWNpdHlgXG4gICAgLy8gdG8gY29udHJvbCBob3cgb3BhcXVlIHRoZSByaXBwbGUgc2hvdWxkIGJlLlxuICAgIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwX2dldCgkZm9yZWdyb3VuZCwgYmFzZSk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtcmFkaW8tdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtcmFkaW8tYnV0dG9uIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG59XG5cblxuXG5cblxuXG5cblxuQG1peGluIG1hdC1zZWxlY3QtdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuXG4gIC5tYXQtc2VsZWN0LXZhbHVlIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogX21hdC1jb250cm9sLXBsYWNlaG9sZGVyLWNvbG9yKCR0aGVtZSk7XG4gIH1cblxuICAubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC12YWx1ZSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gIH1cblxuICAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1zZWxlY3QtcGFuZWwge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oNCwgJHRoZW1lKTtcblxuICAgIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIsIDAuMTIpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZCB7XG4gICAgJi5tYXQtZm9jdXNlZCB7XG4gICAgICAmLm1hdC1wcmltYXJ5IC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICAgICAgY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgdGV4dCk7XG4gICAgICB9XG5cbiAgICAgICYubWF0LWFjY2VudCAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgdGV4dCk7XG4gICAgICB9XG5cbiAgICAgICYubWF0LXdhcm4gLm1hdC1zZWxlY3QtYXJyb3cge1xuICAgICAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWludmFsaWQgLm1hdC1zZWxlY3QtYXJyb3cge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gICAgfVxuXG4gICAgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1zZWxlY3QtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC8vIFRoZSB1bml0LWxlc3MgbGluZS1oZWlnaHQgZnJvbSB0aGUgZm9udCBjb25maWcuXG4gICRsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGlucHV0KTtcblxuICAubWF0LXNlbGVjdCB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtc2VsZWN0LXRyaWdnZXIge1xuICAgIGhlaWdodDogJGxpbmUtaGVpZ2h0ICogMWVtO1xuICB9XG59XG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LXNpZGVuYXYtdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gICRkcmF3ZXItYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBkaWFsb2cpO1xuICAkZHJhd2VyLWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yOiAgbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kKTtcbiAgJGRyYXdlci1wdXNoLWJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZGlhbG9nKTtcbiAgJGRyYXdlci1zaWRlLWJvcmRlcjogc29saWQgMXB4IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG5cbiAgLm1hdC1kcmF3ZXItY29udGFpbmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZHJhd2VyLWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG5cbiAgLm1hdC1kcmF3ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRkcmF3ZXItYmFja2dyb3VuZC1jb2xvcjtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAgICYubWF0LWRyYXdlci1wdXNoIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRkcmF3ZXItcHVzaC1iYWNrZ3JvdW5kLWNvbG9yO1xuICAgIH1cblxuICAgICY6bm90KC5tYXQtZHJhd2VyLXNpZGUpIHtcbiAgICAgIC8vIFRoZSBlbGV2YXRpb24gb2Ygei0xNiBpcyBub3RlZCBpbiB0aGUgZGVzaWduIHNwZWNpZmljYXRpb25zLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vbWF0ZXJpYWwuaW8vZGVzaWduL2NvbXBvbmVudHMvbmF2aWdhdGlvbi1kcmF3ZXIuaHRtbFxuICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oMTYsICR0aGVtZSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1kcmF3ZXItc2lkZSB7XG4gICAgYm9yZGVyLXJpZ2h0OiAkZHJhd2VyLXNpZGUtYm9yZGVyO1xuXG4gICAgJi5tYXQtZHJhd2VyLWVuZCB7XG4gICAgICBib3JkZXItbGVmdDogJGRyYXdlci1zaWRlLWJvcmRlcjtcbiAgICAgIGJvcmRlci1yaWdodDogbm9uZTtcbiAgICB9XG4gIH1cblxuICBbZGlyPSdydGwnXSAubWF0LWRyYXdlci1zaWRlIHtcbiAgICBib3JkZXItbGVmdDogJGRyYXdlci1zaWRlLWJvcmRlcjtcbiAgICBib3JkZXItcmlnaHQ6IG5vbmU7XG5cbiAgICAmLm1hdC1kcmF3ZXItZW5kIHtcbiAgICAgIGJvcmRlci1sZWZ0OiBub25lO1xuICAgICAgYm9yZGVyLXJpZ2h0OiAkZHJhd2VyLXNpZGUtYm9yZGVyO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZHJhd2VyLWJhY2tkcm9wLm1hdC1kcmF3ZXItc2hvd24ge1xuICAgICRvcGFjaXR5OiAwLjY7XG4gICAgJGJhY2tkcm9wLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQsICRvcGFjaXR5KTtcblxuICAgIEBpZiAodHlwZS1vZigkYmFja2Ryb3AtY29sb3IpID09IGNvbG9yKSB7XG4gICAgICAvLyBXZSB1c2UgaW52ZXJ0KCkgaGVyZSB0byBoYXZlIHRoZSBkYXJrZW4gdGhlIGJhY2tncm91bmQgY29sb3IgZXhwZWN0ZWQgdG8gYmUgdXNlZC4gSWYgdGhlXG4gICAgICAvLyBiYWNrZ3JvdW5kIGlzIGxpZ2h0LCB3ZSB1c2UgYSBkYXJrIGJhY2tkcm9wLiBJZiB0aGUgYmFja2dyb3VuZCBpcyBkYXJrLFxuICAgICAgLy8gd2UgdXNlIGEgbGlnaHQgYmFja2Ryb3AuXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbnZlcnQoJGJhY2tkcm9wLWNvbG9yKTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgLy8gSWYgd2UgY291bGRuJ3QgcmVzb2x2ZSB0aGUgYmFja2Ryb3AgY29sb3IgdG8gYSBjb2xvciB2YWx1ZSwgZmFsbCBiYWNrIHRvIHVzaW5nXG4gICAgICAvLyBgb3BhY2l0eWAgdG8gbWFrZSBpdCBvcGFxdWUgc2luY2UgaXRzIGVuZCB2YWx1ZSBjb3VsZCBiZSBhIHNvbGlkIGNvbG9yLlxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tkcm9wLWNvbG9yO1xuICAgICAgb3BhY2l0eTogJG9wYWNpdHk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtc2lkZW5hdi10eXBvZ3JhcGh5KCRjb25maWcpIHsgfVxuXG5cblxuXG5cblxuQG1peGluIF9tYXQtc2xpZGUtdG9nZ2xlLWNoZWNrZWQoJHBhbGV0dGUsICR0aHVtYi1jaGVja2VkLWh1ZSkge1xuICAmLm1hdC1jaGVja2VkIHtcbiAgICAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYiB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsICR0aHVtYi1jaGVja2VkLWh1ZSk7XG4gICAgfVxuXG4gICAgLm1hdC1zbGlkZS10b2dnbGUtYmFyIHtcbiAgICAgIC8vIE9wYWNpdHkgaXMgZGV0ZXJtaW5lZCBmcm9tIHRoZSBzcGVjcyBmb3IgdGhlIHNlbGVjdGlvbiBjb250cm9scy5cbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9tYXRlcmlhbC5pby9kZXNpZ24vY29tcG9uZW50cy9zZWxlY3Rpb24tY29udHJvbHMuaHRtbCNzcGVjc1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCAkdGh1bWItY2hlY2tlZC1odWUsIDAuNTQpO1xuICAgIH1cblxuICAgIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgICAgLy8gU2V0IG5vIG9wYWNpdHkgZm9yIHRoZSByaXBwbGVzIGJlY2F1c2UgdGhlIHJpcHBsZSBvcGFjaXR5IHdpbGwgYmUgYWRqdXN0ZWQgZHluYW1pY2FsbHlcbiAgICAgIC8vIGJhc2VkIG9uIHRoZSB0eXBlIG9mIGludGVyYWN0aW9uIHdpdGggdGhlIHNsaWRlLXRvZ2dsZSAoZS5nLiBmb3IgaG92ZXIsIGZvY3VzKVxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCAkdGh1bWItY2hlY2tlZC1odWUpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNsaWRlLXRvZ2dsZS10aGVtZSgkdGhlbWUpIHtcbiAgJGlzLWRhcms6IG1hcF9nZXQoJHRoZW1lLCBpcy1kYXJrKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLy8gQ29sb3IgaHVlcyBhcmUgYmFzZWQgb24gdGhlIHNwZWNzIHdoaWNoIGJyaWVmbHkgc2hvdyB0aGUgaHVlcyB0aGF0IGFyZSBhcHBsaWVkIHRvIGEgc3dpdGNoLlxuICAvLyBUaGUgMjAxOCBzcGVjcyBubyBsb25nZXIgZGVzY3JpYmUgaG93IGRhcmsgc3dpdGNoZXMgc2hvdWxkIGxvb2sgbGlrZS4gRHVlIHRvIHRoZSBsYWNrIG9mXG4gIC8vIGluZm9ybWF0aW9uIGZvciBkYXJrIHRoZW1lZCBzd2l0Y2hlcywgd2UgcGFydGlhbGx5IGtlZXAgdGhlIG9sZCBiZWhhdmlvciB0aGF0IGlzIGJhc2VkIG9uXG4gIC8vIHRoZSBwcmV2aW91cyBzcGVjaWZpY2F0aW9ucy4gRm9yIHRoZSBjaGVja2VkIGNvbG9yIHdlIGFsd2F5cyB1c2UgdGhlIGBkZWZhdWx0YCBodWUgYmVjYXVzZVxuICAvLyB0aGF0IGZvbGxvd3MgTURDIGFuZCBhbHNvIG1ha2VzIGl0IGVhc2llciBmb3IgcGVvcGxlIHRvIGNyZWF0ZSBhIGN1c3RvbSB0aGVtZSB3aXRob3V0IG5lZWRpbmdcbiAgLy8gdG8gc3BlY2lmeSBlYWNoIGh1ZSBpbmRpdmlkdWFsbHkuXG4gICR0aHVtYi11bmNoZWNrZWQtaHVlOiBpZigkaXMtZGFyaywgNDAwLCA1MCk7XG4gICR0aHVtYi1jaGVja2VkLWh1ZTogZGVmYXVsdDtcblxuICAkYmFyLXVuY2hlY2tlZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZCk7XG4gICRyaXBwbGUtdW5jaGVja2VkLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGJhc2UpO1xuXG4gIC5tYXQtc2xpZGUtdG9nZ2xlIHtcbiAgICBAaW5jbHVkZSBfbWF0LXNsaWRlLXRvZ2dsZS1jaGVja2VkKCRhY2NlbnQsICR0aHVtYi1jaGVja2VkLWh1ZSk7XG5cbiAgICAmLm1hdC1wcmltYXJ5IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtc2xpZGUtdG9nZ2xlLWNoZWNrZWQoJHByaW1hcnksICR0aHVtYi1jaGVja2VkLWh1ZSk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXNsaWRlLXRvZ2dsZS1jaGVja2VkKCR3YXJuLCAkdGh1bWItY2hlY2tlZC1odWUpO1xuICAgIH1cblxuICAgICY6bm90KC5tYXQtY2hlY2tlZCkgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgICAvLyBTZXQgbm8gb3BhY2l0eSBmb3IgdGhlIHJpcHBsZXMgYmVjYXVzZSB0aGUgcmlwcGxlIG9wYWNpdHkgd2lsbCBiZSBhZGp1c3RlZCBkeW5hbWljYWxseVxuICAgICAgLy8gYmFzZWQgb24gdGhlIHR5cGUgb2YgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc2xpZGUtdG9nZ2xlIChlLmcuIGZvciBob3ZlciwgZm9jdXMpXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmlwcGxlLXVuY2hlY2tlZC1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYiB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oMSwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJG1hdC1ncmV5LCAkdGh1bWItdW5jaGVja2VkLWh1ZSk7XG4gIH1cblxuICAubWF0LXNsaWRlLXRvZ2dsZS1iYXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRiYXItdW5jaGVja2VkLWNvbG9yO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtc2xpZGUtdG9nZ2xlLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50IHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG59XG5cblxuXG5cblxuQG1peGluIF9tYXQtc2xpZGVyLWlubmVyLWNvbnRlbnQtdGhlbWUoJHBhbGV0dGUpIHtcbiAgLm1hdC1zbGlkZXItdHJhY2stZmlsbCxcbiAgLm1hdC1zbGlkZXItdGh1bWIsXG4gIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUpO1xuICB9XG5cbiAgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgZGVmYXVsdC1jb250cmFzdCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1zbGlkZXItdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gICRtYXQtc2xpZGVyLW9mZi1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzbGlkZXItb2ZmKTtcbiAgJG1hdC1zbGlkZXItb2ZmLWZvY3VzZWQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2xpZGVyLW9mZi1hY3RpdmUpO1xuICAkbWF0LXNsaWRlci1kaXNhYmxlZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzbGlkZXItb2ZmKTtcbiAgJG1hdC1zbGlkZXItbGFiZWxlZC1taW4tdmFsdWUtdGh1bWItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2xpZGVyLW1pbik7XG4gICRtYXQtc2xpZGVyLWxhYmVsZWQtbWluLXZhbHVlLXRodW1iLWxhYmVsLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNsaWRlci1vZmYpO1xuICAkbWF0LXNsaWRlci10aWNrLW9wYWNpdHk6IDAuNztcbiAgJG1hdC1zbGlkZXItdGljay1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBiYXNlLCAkbWF0LXNsaWRlci10aWNrLW9wYWNpdHkpO1xuICAkbWF0LXNsaWRlci10aWNrLXNpemU6IDJweDtcblxuICAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbWF0LXNsaWRlci1vZmYtY29sb3I7XG4gIH1cblxuICAubWF0LXByaW1hcnkge1xuICAgIEBpbmNsdWRlIF9tYXQtc2xpZGVyLWlubmVyLWNvbnRlbnQtdGhlbWUoJHByaW1hcnkpO1xuICB9XG5cbiAgLm1hdC1hY2NlbnQge1xuICAgIEBpbmNsdWRlIF9tYXQtc2xpZGVyLWlubmVyLWNvbnRlbnQtdGhlbWUoJGFjY2VudCk7XG4gIH1cblxuICAubWF0LXdhcm4ge1xuICAgIEBpbmNsdWRlIF9tYXQtc2xpZGVyLWlubmVyLWNvbnRlbnQtdGhlbWUoJHdhcm4pO1xuICB9XG5cbiAgLm1hdC1zbGlkZXItZm9jdXMtcmluZyB7XG4gICAgJG9wYWNpdHk6IDAuMjtcbiAgICAkY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCBkZWZhdWx0LCAkb3BhY2l0eSk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yO1xuXG4gICAgLy8gYG1hdC1jb2xvcmAgdXNlcyBgcmdiYWAgZm9yIHRoZSBvcGFjaXR5IHdoaWNoIHdvbid0IHdvcmsgd2l0aFxuICAgIC8vIENTUyB2YXJpYWJsZXMgc28gd2UgbmVlZCB0byB1c2UgYG9wYWNpdHlgIGFzIGEgZmFsbGJhY2suXG4gICAgQGlmICh0eXBlLW9mKCRjb2xvcikgIT0gY29sb3IpIHtcbiAgICAgIG9wYWNpdHk6ICRvcGFjaXR5O1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2xpZGVyOmhvdmVyLFxuICAuY2RrLWZvY3VzZWQge1xuICAgIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG1hdC1zbGlkZXItb2ZmLWZvY3VzZWQtY29sb3I7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbGlkZXItZGlzYWJsZWQge1xuICAgIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsXG4gICAgLm1hdC1zbGlkZXItdHJhY2stZmlsbCxcbiAgICAubWF0LXNsaWRlci10aHVtYiB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbWF0LXNsaWRlci1kaXNhYmxlZC1jb2xvcjtcbiAgICB9XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbWF0LXNsaWRlci1kaXNhYmxlZC1jb2xvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubWF0LXNsaWRlci1taW4tdmFsdWUge1xuICAgIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmcge1xuICAgICAgJG9wYWNpdHk6IDAuMTI7XG4gICAgICAkY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgYmFzZSwgJG9wYWNpdHkpO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yO1xuXG4gICAgICAvLyBgbWF0LWNvbG9yYCB1c2VzIGByZ2JhYCBmb3IgdGhlIG9wYWNpdHkgd2hpY2ggd29uJ3Qgd29yayB3aXRoXG4gICAgICAvLyBDU1MgdmFyaWFibGVzIHNvIHdlIG5lZWQgdG8gdXNlIGBvcGFjaXR5YCBhcyBhIGZhbGxiYWNrLlxuICAgICAgQGlmICh0eXBlLW9mKCRjb2xvcikgIT0gY29sb3IpIHtcbiAgICAgICAgb3BhY2l0eTogJG9wYWNpdHk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcge1xuICAgICAgLm1hdC1zbGlkZXItdGh1bWIsXG4gICAgICAubWF0LXNsaWRlci10aHVtYi1sYWJlbCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRtYXQtc2xpZGVyLWxhYmVsZWQtbWluLXZhbHVlLXRodW1iLWNvbG9yO1xuICAgICAgfVxuXG4gICAgICAmLmNkay1mb2N1c2VkIHtcbiAgICAgICAgLm1hdC1zbGlkZXItdGh1bWIsXG4gICAgICAgIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbWF0LXNsaWRlci1sYWJlbGVkLW1pbi12YWx1ZS10aHVtYi1sYWJlbC1jb2xvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICY6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpIHtcbiAgICAgIC5tYXQtc2xpZGVyLXRodW1iIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkbWF0LXNsaWRlci1vZmYtY29sb3I7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyLFxuICAgICAgJi5jZGstZm9jdXNlZCB7XG4gICAgICAgIC5tYXQtc2xpZGVyLXRodW1iIHtcbiAgICAgICAgICBib3JkZXItY29sb3I6ICRtYXQtc2xpZGVyLW9mZi1mb2N1c2VkLWNvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iIHtcbiAgICAgICAgICBib3JkZXItY29sb3I6ICRtYXQtc2xpZGVyLWRpc2FibGVkLWNvbG9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVyIHtcbiAgICBib3JkZXItY29sb3I6ICRtYXQtc2xpZGVyLXRpY2stY29sb3I7XG5cbiAgICAvLyBgbWF0LWNvbG9yYCB1c2VzIGByZ2JhYCBmb3IgdGhlIG9wYWNpdHkgd2hpY2ggd29uJ3Qgd29yayB3aXRoXG4gICAgLy8gQ1NTIHZhcmlhYmxlcyBzbyB3ZSBuZWVkIHRvIHVzZSBgb3BhY2l0eWAgYXMgYSBmYWxsYmFjay5cbiAgICBAaWYgKHR5cGUtb2YoJG1hdC1zbGlkZXItdGljay1jb2xvcikgIT0gY29sb3IpIHtcbiAgICAgIG9wYWNpdHk6ICRtYXQtc2xpZGVyLXRpY2stb3BhY2l0eTtcbiAgICB9XG4gIH1cblxuICAubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tzIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAkbWF0LXNsaWRlci10aWNrLWNvbG9yLFxuICAgICAgICAkbWF0LXNsaWRlci10aWNrLWNvbG9yICRtYXQtc2xpZGVyLXRpY2stc2l6ZSwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpO1xuICAgIC8vIEZpcmVmb3ggZG9lc24ndCBkcmF3IHRoZSBncmFkaWVudCBjb3JyZWN0bHkgd2l0aCAndG8gcmlnaHQnXG4gICAgLy8gKHNlZSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE0MzE5KS5cbiAgICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LXJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoMC4wMDAxZGVnLCAkbWF0LXNsaWRlci10aWNrLWNvbG9yLFxuICAgICAgICAkbWF0LXNsaWRlci10aWNrLWNvbG9yICRtYXQtc2xpZGVyLXRpY2stc2l6ZSwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpO1xuXG4gICAgLy8gYG1hdC1jb2xvcmAgdXNlcyBgcmdiYWAgZm9yIHRoZSBvcGFjaXR5IHdoaWNoIHdvbid0IHdvcmsgd2l0aFxuICAgIC8vIENTUyB2YXJpYWJsZXMgc28gd2UgbmVlZCB0byB1c2UgYG9wYWNpdHlgIGFzIGEgZmFsbGJhY2suXG4gICAgQGlmICh0eXBlLW9mKCRtYXQtc2xpZGVyLXRpY2stY29sb3IpICE9IGNvbG9yKSB7XG4gICAgICBvcGFjaXR5OiAkbWF0LXNsaWRlci10aWNrLW9wYWNpdHk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3Mge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAkbWF0LXNsaWRlci10aWNrLWNvbG9yLFxuICAgICAgICAkbWF0LXNsaWRlci10aWNrLWNvbG9yICRtYXQtc2xpZGVyLXRpY2stc2l6ZSwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpO1xuXG4gICAgLy8gYG1hdC1jb2xvcmAgdXNlcyBgcmdiYWAgZm9yIHRoZSBvcGFjaXR5IHdoaWNoIHdvbid0IHdvcmsgd2l0aFxuICAgIC8vIENTUyB2YXJpYWJsZXMgc28gd2UgbmVlZCB0byB1c2UgYG9wYWNpdHlgIGFzIGEgZmFsbGJhY2suXG4gICAgQGlmICh0eXBlLW9mKCRtYXQtc2xpZGVyLXRpY2stY29sb3IpICE9IGNvbG9yKSB7XG4gICAgICBvcGFjaXR5OiAkbWF0LXNsaWRlci10aWNrLW9wYWNpdHk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtc2xpZGVyLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0IHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbik7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTIpO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtc3RlcHBlci10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcblxuICAubWF0LXN0ZXAtaGVhZGVyIHtcbiAgICAmLmNkay1rZXlib2FyZC1mb2N1c2VkLFxuICAgICYuY2RrLXByb2dyYW0tZm9jdXNlZCxcbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIpO1xuICAgIH1cblxuICAgIC8vIE9uIHRvdWNoIGRldmljZXMgdGhlIDpob3ZlciBzdGF0ZSB3aWxsIGxpbmdlciBvbiB0aGUgZWxlbWVudCBhZnRlciBhIHRhcC5cbiAgICAvLyBSZXNldCBpdCB2aWEgYEBtZWRpYWAgYWZ0ZXIgdGhlIGRlY2xhcmF0aW9uLCBiZWNhdXNlIHRoZSBtZWRpYSBxdWVyeSBpc24ndFxuICAgIC8vIHN1cHBvcnRlZCBieSBhbGwgYnJvd3NlcnMgeWV0LlxuICAgIEBtZWRpYSAoaG92ZXI6IG5vbmUpIHtcbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5tYXQtc3RlcC1sYWJlbCxcbiAgICAubWF0LXN0ZXAtb3B0aW9uYWwge1xuICAgICAgLy8gVE9ETyhqb3NlcGhwZXJyb3R0KTogVXBkYXRlIHRvIHVzaW5nIGEgY29ycmVjdGVkIGRpc2FibGVkLXRleHQgY29udHJhc3RcbiAgICAgIC8vIGluc3RlYWQgb2Ygc2Vjb25kYXJ5LXRleHQuXG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gICAgfVxuXG4gICAgLm1hdC1zdGVwLWljb24ge1xuICAgICAgLy8gVE9ETyhqb3NlcGhwZXJyb3R0KTogVXBkYXRlIHRvIHVzaW5nIGEgY29ycmVjdGVkIGRpc2FibGVkLXRleHQgY29udHJhc3RcbiAgICAgIC8vIGluc3RlYWQgb2Ygc2Vjb25kYXJ5LXRleHQuXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIGRlZmF1bHQtY29udHJhc3QpO1xuICAgIH1cblxuICAgIC5tYXQtc3RlcC1pY29uLXNlbGVjdGVkLFxuICAgIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsXG4gICAgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnkpO1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgZGVmYXVsdC1jb250cmFzdCk7XG4gICAgfVxuXG4gICAgLm1hdC1zdGVwLWljb24tc3RhdGUtZXJyb3Ige1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgICB9XG5cbiAgICAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtYWN0aXZlIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIH1cblxuICAgIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1lcnJvciB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgICB9XG4gIH1cblxuICAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbCwgLm1hdC1zdGVwcGVyLXZlcnRpY2FsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICB9XG5cbiAgLm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZSB7XG4gICAgYm9yZGVyLWxlZnQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cblxuICAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmJlZm9yZSxcbiAgLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjphZnRlcixcbiAgLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZSB7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXN0ZXBwZXItdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtc3RlcHBlci12ZXJ0aWNhbCwgLm1hdC1zdGVwcGVyLWhvcml6b250YWwge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LXN0ZXAtbGFiZWwge1xuICAgIGZvbnQ6IHtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMSk7XG4gICAgfTtcbiAgfVxuXG4gIC5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3Ige1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIH1cblxuICAubWF0LXN0ZXAtbGFiZWwtZXJyb3Ige1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTIpO1xuICB9XG5cbiAgLm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkIHtcbiAgICBmb250OiB7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMik7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTIpO1xuICAgIH07XG4gIH1cbn1cblxuQG1peGluIG1hdC1zb3J0LXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtc29ydC1oZWFkZXItYXJyb3cge1xuICAgICR0YWJsZS1iYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdjYXJkJyk7XG4gICAgJHRleHQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuXG4gICAgLy8gQmVjYXVzZSB0aGUgYXJyb3cgaXMgbWFkZSB1cCBvZiBtdWx0aXBsZSBlbGVtZW50cyB0aGF0IGFyZSBzdGFja2VkIG9uIHRvcCBvZiBlYWNoIG90aGVyLFxuICAgIC8vIHdlIGNhbid0IHVzZSB0aGUgc2VtaS10cmFzcGFyZW50IGNvbG9yIGZyb20gdGhlIHRoZW1lIGRpcmVjdGx5LiBJZiB0aGUgdmFsdWUgaXMgYSBjb2xvclxuICAgIC8vICp0eXBlKiwgd2UgY29udmVydCBpdCBpbnRvIGEgc29saWQgY29sb3IgYnkgdGFraW5nIHRoZSBvcGFjaXR5IGZyb20gdGhlIHJnYmEgdmFsdWUgYW5kXG4gICAgLy8gdXNpbmcgdGhlIHZhbHVlIHRvIGRldGVybWluZSB0aGUgcGVyY2VudGFnZSBvZiB0aGUgYmFja2dyb3VuZCB0byBwdXQgaW50byBmb3JlZ3JvdW5kXG4gICAgLy8gd2hlbiBtaXhpbmcgdGhlIGNvbG9ycyB0b2dldGhlci4gT3RoZXJ3aXNlLCBpZiBpdCByZXNvbHZlcyB0byBzb21ldGhpbmcgZGlmZmVyZW50XG4gICAgLy8gKGUuZy4gaXQgcmVzb2x2ZXMgdG8gYSBDU1MgdmFyaWFibGUpLCB3ZSB1c2UgdGhlIGNvbG9yIGRpcmVjdGx5LlxuICAgIEBpZiAodHlwZS1vZigkdGFibGUtYmFja2dyb3VuZCkgPT0gY29sb3IgYW5kIHR5cGUtb2YoJHRleHQtY29sb3IpID09IGNvbG9yKSB7XG4gICAgICAkdGV4dC1vcGFjaXR5OiBvcGFjaXR5KCR0ZXh0LWNvbG9yKTtcbiAgICAgIGNvbG9yOiBtaXgoJHRhYmxlLWJhY2tncm91bmQsIHJnYmEoJHRleHQtY29sb3IsIDEpLCAoMSAtICR0ZXh0LW9wYWNpdHkpICogMTAwJSk7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIGNvbG9yOiAkdGV4dC1jb2xvcjtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1zb3J0LXR5cG9ncmFwaHkoJGNvbmZpZykgeyB9XG5cblxuXG5cblxuQG1peGluIG1hdC10YWJzLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGhlYWRlci1ib3JkZXI6IDFweCBzb2xpZCBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuXG4gIC5tYXQtdGFiLW5hdi1iYXIsXG4gIC5tYXQtdGFiLWhlYWRlciB7XG4gICAgYm9yZGVyLWJvdHRvbTogJGhlYWRlci1ib3JkZXI7XG4gIH1cblxuICAubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIge1xuICAgIC5tYXQtdGFiLW5hdi1iYXIsXG4gICAgLm1hdC10YWItaGVhZGVyIHtcbiAgICAgIGJvcmRlci10b3A6ICRoZWFkZXItYm9yZGVyO1xuICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAubWF0LXRhYi1sYWJlbCwgLm1hdC10YWItbGluayB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgICAmLm1hdC10YWItZGlzYWJsZWQge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG5cbiAgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICB9XG5cbiAgLy8gUmVtb3ZlIGhlYWRlciBib3JkZXIgd2hlbiB0aGVyZSBpcyBhIGJhY2tncm91bmQgY29sb3JcbiAgLm1hdC10YWItZ3JvdXBbY2xhc3MqPSdtYXQtYmFja2dyb3VuZC0nXSAubWF0LXRhYi1oZWFkZXIsXG4gIC5tYXQtdGFiLW5hdi1iYXJbY2xhc3MqPSdtYXQtYmFja2dyb3VuZC0nXSB7XG4gICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbiAgICBib3JkZXItdG9wOiBub25lO1xuICB9XG5cbiAgLm1hdC10YWItZ3JvdXAsIC5tYXQtdGFiLW5hdi1iYXIge1xuICAgICR0aGVtZS1jb2xvcnM6IChcbiAgICAgIHByaW1hcnk6ICRwcmltYXJ5LFxuICAgICAgYWNjZW50OiAkYWNjZW50LFxuICAgICAgd2FybjogJHdhcm5cbiAgICApO1xuXG4gICAgQGVhY2ggJG5hbWUsICRjb2xvciBpbiAkdGhlbWUtY29sb3JzIHtcbiAgICAgIC8vIFNldCB0aGUgZm9yZWdyb3VuZCBjb2xvciBvZiB0aGUgdGFic1xuICAgICAgJi5tYXQtI3skbmFtZX0ge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LXRhYi1sYWJlbC1mb2N1cygkY29sb3IpO1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWluay1iYXIoJGNvbG9yKTtcblxuICAgICAgICAvLyBPdmVycmlkZSBpbmsgYmFyIHdoZW4gYmFja2dyb3VuZCBjb2xvciBpcyB0aGUgc2FtZVxuICAgICAgICAmLm1hdC1iYWNrZ3JvdW5kLSN7JG5hbWV9IHtcbiAgICAgICAgICBAaW5jbHVkZSBfbWF0LWluay1iYXIoJGNvbG9yLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIEBlYWNoICRuYW1lLCAkY29sb3IgaW4gJHRoZW1lLWNvbG9ycyB7XG4gICAgICAvLyBTZXQgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgdGFicyBhbmQgb3ZlcnJpZGUgZm9jdXMgY29sb3JcbiAgICAgICYubWF0LWJhY2tncm91bmQtI3skbmFtZX0ge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LXRhYi1sYWJlbC1mb2N1cygkY29sb3IpO1xuICAgICAgICBAaW5jbHVkZSBfbWF0LXRhYnMtYmFja2dyb3VuZCgkY29sb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gX21hdC1pbmstYmFyKCRjb2xvciwgJGh1ZTogZGVmYXVsdCkge1xuICAubWF0LWluay1iYXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkY29sb3IsICRodWUpO1xuICB9XG59XG5cbkBtaXhpbiBfbWF0LXRhYi1sYWJlbC1mb2N1cygkdGFiLWZvY3VzLWNvbG9yKSB7XG4gIC5tYXQtdGFiLWxhYmVsLFxuICAubWF0LXRhYi1saW5rIHtcbiAgICAmLmNkay1rZXlib2FyZC1mb2N1c2VkLFxuICAgICYuY2RrLXByb2dyYW0tZm9jdXNlZCB7XG4gICAgICAmOm5vdCgubWF0LXRhYi1kaXNhYmxlZCkge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHRhYi1mb2N1cy1jb2xvciwgbGlnaHRlciwgMC4zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuQG1peGluIF9tYXQtdGFicy1iYWNrZ3JvdW5kKCRiYWNrZ3JvdW5kLWNvbG9yKSB7XG4gIC8vIFNldCBiYWNrZ3JvdW5kIGNvbG9yIGZvciB0aGUgdGFiIGdyb3VwXG4gIC5tYXQtdGFiLWhlYWRlciwgLm1hdC10YWItbGlua3MsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQtY29sb3IpO1xuICB9XG5cbiAgLy8gU2V0IGxhYmVscyB0byBjb250cmFzdCBhZ2FpbnN0IGJhY2tncm91bmRcbiAgLm1hdC10YWItbGFiZWwsIC5tYXQtdGFiLWxpbmsge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQtY29sb3IsIGRlZmF1bHQtY29udHJhc3QpO1xuXG4gICAgJi5tYXQtdGFiLWRpc2FibGVkIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQtY29sb3IsIGRlZmF1bHQtY29udHJhc3QsIDAuNCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IHBhZ2luYXRpb24gY2hldnJvbnMgdG8gY29udHJhc3QgYmFja2dyb3VuZFxuICAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZC1jb2xvciwgZGVmYXVsdC1jb250cmFzdCk7XG4gIH1cblxuICAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZC1jb2xvciwgZGVmYXVsdC1jb250cmFzdCwgMC40KTtcbiAgfVxuXG4gIC8vIFNldCByaXBwbGVzIGNvbG9yIHRvIGJlIHRoZSBjb250cmFzdCBjb2xvciBvZiB0aGUgbmV3IGJhY2tncm91bmQuIE90aGVyd2lzZSB0aGUgcmlwcGxlXG4gIC8vIGNvbG9yIHdpbGwgYmUgYmFzZWQgb24gdGhlIGFwcCBiYWNrZ3JvdW5kIGNvbG9yLlxuICAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQtY29sb3IsIGRlZmF1bHQtY29udHJhc3QsIDAuMTIpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtdGFicy10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC10YWItZ3JvdXAge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LXRhYi1sYWJlbCwgLm1hdC10YWItbGluayB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgYnV0dG9uKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYnV0dG9uKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJ1dHRvbik7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5AbWl4aW4gX21hdC10b29sYmFyLWNvbG9yKCRwYWxldHRlKSB7XG4gIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkcGFsZXR0ZSk7XG4gIGNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsIGRlZmF1bHQtY29udHJhc3QpO1xufVxuXG5AbWl4aW4gX21hdC10b29sYmFyLWZvcm0tZmllbGQtb3ZlcnJpZGVzIHtcbiAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSxcbiAgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSxcbiAgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUge1xuICAgIGJhY2tncm91bmQtY29sb3I6IGN1cnJlbnRDb2xvcjtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1sYWJlbCxcbiAgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCxcbiAgLm1hdC1zZWxlY3QtdmFsdWUsXG4gIC5tYXQtc2VsZWN0LWFycm93LFxuICAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3cge1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICB9XG5cbiAgLm1hdC1pbnB1dC1lbGVtZW50IHtcbiAgICBjYXJldC1jb2xvcjogY3VycmVudENvbG9yO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtdG9vbGJhci10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC10b29sYmFyIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGFwcC1iYXIpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gICAgJi5tYXQtcHJpbWFyeSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRvb2xiYXItY29sb3IoJHByaW1hcnkpO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRvb2xiYXItY29sb3IoJGFjY2VudCk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRvb2xiYXItY29sb3IoJHdhcm4pO1xuICAgIH1cblxuICAgIEBpbmNsdWRlIF9tYXQtdG9vbGJhci1mb3JtLWZpZWxkLW92ZXJyaWRlcztcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXRvb2xiYXItdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtdG9vbGJhcixcbiAgLm1hdC10b29sYmFyIGgxLFxuICAubWF0LXRvb2xiYXIgaDIsXG4gIC5tYXQtdG9vbGJhciBoMyxcbiAgLm1hdC10b29sYmFyIGg0LFxuICAubWF0LXRvb2xiYXIgaDUsXG4gIC5tYXQtdG9vbGJhciBoNiB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIHRpdGxlKTtcbiAgICBtYXJnaW46IDA7XG4gIH1cbn1cblxuXG5cblxuXG4kbWF0LXRvb2x0aXAtdGFyZ2V0LWhlaWdodDogMjJweDtcbiRtYXQtdG9vbHRpcC1mb250LXNpemU6IDEwcHg7XG4kbWF0LXRvb2x0aXAtdmVydGljYWwtcGFkZGluZzogKCRtYXQtdG9vbHRpcC10YXJnZXQtaGVpZ2h0IC0gJG1hdC10b29sdGlwLWZvbnQtc2l6ZSkgLyAyO1xuXG4kbWF0LXRvb2x0aXAtaGFuZHNldC10YXJnZXQtaGVpZ2h0OiAzMHB4O1xuJG1hdC10b29sdGlwLWhhbmRzZXQtZm9udC1zaXplOiAxNHB4O1xuJG1hdC10b29sdGlwLWhhbmRzZXQtdmVydGljYWwtcGFkZGluZzpcbiAgICAoJG1hdC10b29sdGlwLWhhbmRzZXQtdGFyZ2V0LWhlaWdodCAtICRtYXQtdG9vbHRpcC1oYW5kc2V0LWZvbnQtc2l6ZSkgLyAyO1xuXG5AbWl4aW4gbWF0LXRvb2x0aXAtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG5cbiAgLm1hdC10b29sdGlwIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIHRvb2x0aXAsIDAuOSk7XG4gIH1cbn1cblxuQG1peGluIG1hdC10b29sdGlwLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXRvb2x0aXAge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gICAgZm9udC1zaXplOiAkbWF0LXRvb2x0aXAtZm9udC1zaXplO1xuICAgIHBhZGRpbmctdG9wOiAkbWF0LXRvb2x0aXAtdmVydGljYWwtcGFkZGluZztcbiAgICBwYWRkaW5nLWJvdHRvbTogJG1hdC10b29sdGlwLXZlcnRpY2FsLXBhZGRpbmc7XG4gIH1cblxuICAubWF0LXRvb2x0aXAtaGFuZHNldCB7XG4gICAgZm9udC1zaXplOiAkbWF0LXRvb2x0aXAtaGFuZHNldC1mb250LXNpemU7XG4gICAgcGFkZGluZy10b3A6ICRtYXQtdG9vbHRpcC1oYW5kc2V0LXZlcnRpY2FsLXBhZGRpbmc7XG4gICAgcGFkZGluZy1ib3R0b206ICRtYXQtdG9vbHRpcC1oYW5kc2V0LXZlcnRpY2FsLXBhZGRpbmc7XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LXNuYWNrLWJhci10aGVtZSgkdGhlbWUpIHtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG5cbiAgLm1hdC1zbmFjay1iYXItY29udGFpbmVyIHtcbiAgICAvLyBVc2UgdGhlIHByaW1hcnkgdGV4dCBvbiB0aGUgZGFyayB0aGVtZSwgZXZlbiB0aG91Z2ggdGhlIGxpZ2h0ZXIgb25lIHVzZXNcbiAgICAvLyBhIHNlY29uZGFyeSwgYmVjYXVzZSB0aGUgY29udHJhc3Qgb24gdGhlIGxpZ2h0IHByaW1hcnkgdGV4dCBpcyBwb29yLlxuICAgIGNvbG9yOiBpZigkaXMtZGFyay10aGVtZSwgJGRhcmstcHJpbWFyeS10ZXh0LCAkbGlnaHQtc2Vjb25kYXJ5LXRleHQpO1xuICAgIGJhY2tncm91bmQ6IGlmKCRpcy1kYXJrLXRoZW1lLCBtYXAtZ2V0KCRtYXQtZ3JleSwgNTApLCAjMzIzMjMyKTtcblxuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDYsICR0aGVtZSk7XG4gIH1cblxuICAubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb24ge1xuICAgIGNvbG9yOiBpZigkaXMtZGFyay10aGVtZSwgaW5oZXJpdCwgbWF0LWNvbG9yKCRhY2NlbnQsIHRleHQpKTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNuYWNrLWJhci10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1zaW1wbGUtc25hY2tiYXIge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGJvZHktMSk7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uIHtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IGluaGVyaXQ7XG4gICAgICBzaXplOiBpbmhlcml0O1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYnV0dG9uKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vLyBUaGVtZSBzdHlsZXMgdGhhdCBvbmx5IGFwcGx5IHRvIHRoZSBmaWxsIGFwcGVhcmFuY2Ugb2YgdGhlIGZvcm0tZmllbGQuXG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1maWxsLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuXG4gICRmaWxsLWJhY2tncm91bmQ6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgYmFzZSwgaWYoJGlzLWRhcmstdGhlbWUsIDAuMSwgMC4wNCkpO1xuICAkZmlsbC1kaXNhYmxlZC1iYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGJhc2UsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjA1LCAwLjAyKSk7XG4gICR1bmRlcmxpbmUtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlciwgaWYoJGlzLWRhcmstdGhlbWUsIDAuNSwgMC40MikpO1xuICAkbGFiZWwtZGlzYWJsZWQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWZsZXgge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGZpbGwtYmFja2dyb3VuZDtcbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1mbGV4IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRmaWxsLWRpc2FibGVkLWJhY2tncm91bmQ7XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtY29sb3I7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCB7XG4gICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBjb2xvcjogJGxhYmVsLWRpc2FibGVkLWNvbG9yO1xuICAgICAgfVxuXG4gICAgICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gVXNlZCB0byBtYWtlIGluc3RhbmNlcyBvZiB0aGUgX21hdC1mb3JtLWZpZWxkLWxhYmVsLWZsb2F0aW5nIG1peGluIG5lZ2xpZ2libHkgZGlmZmVyZW50LFxuLy8gYW5kIHByZXZlbnQgR29vZ2xlJ3MgQ1NTIE9wdGltaXplciBmcm9tIGNvbGxhcHNpbmcgdGhlIGRlY2xhcmF0aW9ucy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBzb21lXG4vLyBvZiB0aGUgc2VsZWN0b3JzIGNvbnRhaW4gcHNldWRvLWNsYXNzZXMgbm90IHJlY29nbml6ZWQgaW4gYWxsIGJyb3dzZXJzLiBJZiBhIGJyb3dzZXIgZW5jb3VudGVyc1xuLy8gYW4gdW5rbm93biBwc2V1ZG8tY2xhc3MgaXQgd2lsbCBkaXNjYXJkIHRoZSBlbnRpcmUgcnVsZSBzZXQuXG4kbWF0LWZvcm0tZmllbGQtZmlsbC1kZWR1cGU6IDA7XG5cbi8vIEFwcGxpZXMgYSBmbG9hdGluZyBsYWJlbCBhYm92ZSB0aGUgZm9ybSBmaWVsZCBjb250cm9sIGl0c2VsZi5cbkBtaXhpbiBfbWF0LWZvcm0tZmllbGQtZmlsbC1sYWJlbC1mbG9hdGluZygkZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtJGluZml4LW1hcmdpbi10b3AgLSAkaW5maXgtcGFkZGluZyArICRtYXQtZm9ybS1maWVsZC1maWxsLWRlZHVwZSlcbiAgICAgICAgICAgICBzY2FsZSgkZm9udC1zY2FsZSk7XG4gIHdpZHRoOiAxMDAlIC8gJGZvbnQtc2NhbGUgKyAkbWF0LWZvcm0tZmllbGQtZmlsbC1kZWR1cGU7XG5cbiAgJG1hdC1mb3JtLWZpZWxkLWZpbGwtZGVkdXBlOiAkbWF0LWZvcm0tZmllbGQtZmlsbC1kZWR1cGUgKyAwLjAwMDAxICFnbG9iYWw7XG59XG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1maWxsLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAvLyBUaGUgdW5pdC1sZXNzIGxpbmUtaGVpZ2h0IGZyb20gdGhlIGZvbnQgY29uZmlnLlxuICAkbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBpbnB1dCk7XG4gIC8vIFRoZSBhbW91bnQgdG8gc2NhbGUgdGhlIGZvbnQgZm9yIHRoZSBmbG9hdGluZyBsYWJlbCBhbmQgc3Vic2NyaXB0LlxuICAkc3Vic2NyaXB0LWZvbnQtc2NhbGU6IDAuNzU7XG4gIC8vIFRoZSBwYWRkaW5nIG9uIHRvcCBvZiB0aGUgaW5maXguXG4gICRpbmZpeC1wYWRkaW5nLXRvcDogMC4yNWVtO1xuICAvLyBUaGUgcGFkZGluZyBiZWxvdyB0aGUgaW5maXguXG4gICRpbmZpeC1wYWRkaW5nLWJvdHRvbTogMC43NWVtO1xuICAvLyBUaGUgbWFyZ2luIGFwcGxpZWQgdG8gdGhlIGZvcm0tZmllbGQtaW5maXggdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsLlxuICAkaW5maXgtbWFyZ2luLXRvcDogMWVtICogJGxpbmUtaGVpZ2h0ICogJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuICAvLyBUaGUgYW1vdW50IHdlIG9mZnNldCB0aGUgbGFiZWwgZnJvbSB0aGUgaW5wdXQgdGV4dCBpbiB0aGUgZmlsbCBhcHBlYXJhbmNlLlxuICAkZmlsbC1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldDogLTAuNWVtO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwge1xuICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICBwYWRkaW5nOiAkaW5maXgtcGFkZGluZy10b3AgMCAkaW5maXgtcGFkZGluZy1ib3R0b20gMDtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgdG9wOiAkaW5maXgtbWFyZ2luLXRvcCArICRpbmZpeC1wYWRkaW5nLXRvcDtcbiAgICAgIG1hcmdpbi10b3A6ICRmaWxsLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0O1xuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IHtcbiAgICAgICYubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCxcbiAgICAgIC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWZpbGwtbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZy10b3AgKyAkZmlsbC1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldCxcbiAgICAgICAgICAgICAgICAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNlcnZlci1zaWRlIHJlbmRlcmVkIG1hdElucHV0IHdpdGggYSBsYWJlbCBhdHRyaWJ1dGUgYnV0IGxhYmVsIG5vdCBzaG93blxuICAgICAgLy8gKHVzZWQgYXMgYSBwdXJlIENTUyBzdGFuZC1pbiBmb3IgbWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0KS5cbiAgICAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXG4gICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtZmlsbC1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLXRvcCArICRmaWxsLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0LFxuICAgICAgICAgICAgICAgICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cblxuLy8gVGhlbWUgc3R5bGVzIHRoYXQgb25seSBhcHBseSB0byB0aGUgbGVnYWN5IGFwcGVhcmFuY2Ugb2YgdGhlIGZvcm0tZmllbGQuXG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1sZWdhY3ktdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG5cbiAgJGxhYmVsLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgJHVuZGVybGluZS1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyLCBpZigkaXMtZGFyay10aGVtZSwgMC43LCAwLjQyKSk7XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IHtcbiAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgY29sb3I6ICRsYWJlbC1jb2xvcjtcbiAgICB9XG5cbiAgICAubWF0LWhpbnQge1xuICAgICAgY29sb3I6ICRsYWJlbC1jb2xvcjtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtY29sb3I7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIHtcbiAgICAgIEBpbmNsdWRlIG1hdC1jb250cm9sLWRpc2FibGVkLXVuZGVybGluZSgkdW5kZXJsaW5lLWNvbG9yKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gVXNlZCB0byBtYWtlIGluc3RhbmNlcyBvZiB0aGUgX21hdC1mb3JtLWZpZWxkLWxhYmVsLWZsb2F0aW5nIG1peGluIG5lZ2xpZ2libHkgZGlmZmVyZW50LFxuLy8gYW5kIHByZXZlbnQgR29vZ2xlJ3MgQ1NTIE9wdGltaXplciBmcm9tIGNvbGxhcHNpbmcgdGhlIGRlY2xhcmF0aW9ucy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBzb21lXG4vLyBvZiB0aGUgc2VsZWN0b3JzIGNvbnRhaW4gcHNldWRvLWNsYXNzZXMgbm90IHJlY29nbml6ZWQgaW4gYWxsIGJyb3dzZXJzLiBJZiBhIGJyb3dzZXIgZW5jb3VudGVyc1xuLy8gYW4gdW5rbm93biBwc2V1ZG8tY2xhc3MgaXQgd2lsbCBkaXNjYXJkIHRoZSBlbnRpcmUgcnVsZSBzZXQuXG4kbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZTogMDtcblxuLy8gQXBwbGllcyBhIGZsb2F0aW5nIGxhYmVsIGFib3ZlIHRoZSBmb3JtIGZpZWxkIGNvbnRyb2wgaXRzZWxmLlxuQG1peGluIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmcoJGZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCkge1xuICAvLyBXZSB1c2UgcGVyc3BlY3RpdmUgdG8gZml4IHRoZSB0ZXh0IGJsdXJyaW5lc3MgYXMgZGVzY3JpYmVkIGhlcmU6XG4gIC8vIGh0dHA6Ly93d3cudXNlcmFnZW50bWFuLmNvbS9ibG9nLzIwMTQvMDUvMDQvZml4aW5nLXR5cG9ncmFwaHktaW5zaWRlLW9mLTItZC1jc3MtdHJhbnNmb3Jtcy9cbiAgLy8gVGhpcyByZXN1bHRzIGluIGEgc21hbGwgaml0dGVyIGFmdGVyIHRoZSBsYWJlbCBmbG9hdHMgb24gRmlyZWZveCwgd2hpY2ggdGhlXG4gIC8vIHRyYW5zbGF0ZVogZml4ZXMuXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtJGluZml4LW1hcmdpbi10b3AgLSAkaW5maXgtcGFkZGluZykgc2NhbGUoJGZvbnQtc2NhbGUpIHBlcnNwZWN0aXZlKDEwMHB4KVxuICB0cmFuc2xhdGVaKDAuMDAxcHggKyAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZSk7XG4gIC8vIFRoZSB0cmlja3MgYWJvdmUgdXNlZCB0byBzbW9vdGggb3V0IHRoZSBhbmltYXRpb24gb24gY2hyb21lIGFuZCBmaXJlZm94IGFjdHVhbGx5IG1ha2UgdGhpbmdzXG4gIC8vIHdvcnNlIG9uIElFLCBzbyB3ZSBkb24ndCBpbmNsdWRlIHRoZW0gaW4gdGhlIElFIHZlcnNpb24uXG4gIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRpbmZpeC1tYXJnaW4tdG9wIC0gJGluZml4LXBhZGRpbmcgKyAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZSlcbiAgICAgICAgICAgICAgICAgIHNjYWxlKCRmb250LXNjYWxlKTtcblxuICB3aWR0aDogMTAwJSAvICRmb250LXNjYWxlICsgJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGU7XG5cbiAgJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGU6ICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlICsgMC4wMDAwMSAhZ2xvYmFsO1xufVxuXG4vLyBTYW1lIGFzIG1peGluIGFib3ZlLCBidXQgb21pdHMgdGhlIHRyYW5zbGF0ZVogZm9yIHByaW50aW5nIHB1cnBvc2VzLlxuQG1peGluIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmctcHJpbnQoJGZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCkge1xuICAvLyBUaGlzIHJlc3VsdHMgaW4gYSBzbWFsbCBqaXR0ZXIgYWZ0ZXIgdGhlIGxhYmVsIGZsb2F0cyBvbiBGaXJlZm94LCB3aGljaCB0aGVcbiAgLy8gdHJhbnNsYXRlWiBmaXhlcy5cbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kaW5maXgtbWFyZ2luLXRvcCAtICRpbmZpeC1wYWRkaW5nICsgJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGUpXG4gICAgICAgICAgICAgICAgICBzY2FsZSgkZm9udC1zY2FsZSk7XG4gIC8vIFRoZSB0cmlja3MgYWJvdmUgdXNlZCB0byBzbW9vdGggb3V0IHRoZSBhbmltYXRpb24gb24gY2hyb21lIGFuZCBmaXJlZm94IGFjdHVhbGx5IG1ha2UgdGhpbmdzXG4gIC8vIHdvcnNlIG9uIElFLCBzbyB3ZSBkb24ndCBpbmNsdWRlIHRoZW0gaW4gdGhlIElFIHZlcnNpb24uXG4gICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlOiAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZSArIDAuMDAwMDEgIWdsb2JhbDtcbn1cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLy8gVGhlIHVuaXQtbGVzcyBsaW5lLWhlaWdodCBmcm9tIHRoZSBmb250IGNvbmZpZy5cbiAgJGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgaW5wdXQpO1xuICAvLyBUaGUgYW1vdW50IHRvIHNjYWxlIHRoZSBmb250IGZvciB0aGUgZmxvYXRpbmcgbGFiZWwgYW5kIHN1YnNjcmlwdC5cbiAgJHN1YnNjcmlwdC1mb250LXNjYWxlOiAwLjc1O1xuICAvLyBUaGUgYW1vdW50IG9mIHNwYWNlIGJldHdlZW4gdGhlIHRvcCBvZiB0aGUgbGluZSBhbmQgdGhlIHRvcCBvZiB0aGUgYWN0dWFsIHRleHRcbiAgLy8gKGFzIGEgZnJhY3Rpb24gb2YgdGhlIGZvbnQtc2l6ZSkuXG4gICRsaW5lLXNwYWNpbmc6ICgkbGluZS1oZWlnaHQgLSAxKSAvIDI7XG4gIC8vIFRoZSBwYWRkaW5nIG9uIHRoZSBpbmZpeC4gTW9ja3Mgc2hvdyBoYWxmIG9mIHRoZSB0ZXh0IHNpemUsIGJ1dCBzZWVtIHRvIG1lYXN1cmUgZnJvbSB0aGUgZWRnZVxuICAvLyBvZiB0aGUgdGV4dCBpdHNlbGYsIG5vdCB0aGUgZWRnZSBvZiB0aGUgbGluZTsgdGhlcmVmb3JlIHdlIHN1YnRyYWN0IG9mZiB0aGUgbGluZSBzcGFjaW5nLlxuICAkaW5maXgtcGFkZGluZzogMC41ZW0gLSAkbGluZS1zcGFjaW5nO1xuICAvLyBUaGUgbWFyZ2luIGFwcGxpZWQgdG8gdGhlIGZvcm0tZmllbGQtaW5maXggdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsLlxuICAkaW5maXgtbWFyZ2luLXRvcDogMWVtICogJGxpbmUtaGVpZ2h0ICogJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuICAvLyBUaGUgc3BhY2UgYmV0d2VlbiB0aGUgYm90dG9tIG9mIHRoZSAubWF0LWZvcm0tZmllbGQtZmxleCBhcmVhIGFuZCB0aGUgc3Vic2NyaXB0IHdyYXBwZXIuXG4gIC8vIE1vY2tzIHNob3cgaGFsZiBvZiB0aGUgdGV4dCBzaXplLCBidXQgdGhpcyBtYXJnaW4gaXMgYXBwbGllZCB0byBhbiBlbGVtZW50IHdpdGggdGhlIHN1YnNjcmlwdFxuICAvLyB0ZXh0IGZvbnQgc2l6ZSwgc28gd2UgbmVlZCB0byBkaXZpZGUgYnkgdGhlIHNjYWxlIGZhY3RvciB0byBtYWtlIGl0IGhhbGYgb2YgdGhlIG9yaWdpbmFsIHRleHRcbiAgLy8gc2l6ZS4gV2UgYWdhaW4gbmVlZCB0byBzdWJ0cmFjdCBvZmYgdGhlIGxpbmUgc3BhY2luZyBzaW5jZSB0aGUgbW9ja3MgbWVhc3VyZSB0byB0aGUgZWRnZSBvZiB0aGVcbiAgLy8gdGV4dCwgbm90IHRoZSAgZWRnZSBvZiB0aGUgbGluZS5cbiAgJHN1YnNjcmlwdC1tYXJnaW4tdG9wOiAwLjVlbSAvICRzdWJzY3JpcHQtZm9udC1zY2FsZSAtICgkbGluZS1zcGFjaW5nICogMik7XG4gIC8vIFRoZSBwYWRkaW5nIGFwcGxpZWQgdG8gdGhlIGZvcm0tZmllbGQtd3JhcHBlciB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgc3Vic2NyaXB0LCBzaW5jZSBpdCdzXG4gIC8vIGFic29sdXRlbHkgcG9zaXRpb25lZC4gVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBzdWJzY3JpcHQncyBtYXJnaW4gYW5kIGxpbmUtaGVpZ2h0LCBidXQgd2VcbiAgLy8gbmVlZCB0byBtdWx0aXBseSBieSB0aGUgc3Vic2NyaXB0IGZvbnQgc2NhbGUgZmFjdG9yIHNpbmNlIHRoZSB3cmFwcGVyIGhhcyBhIGxhcmdlciBmb250IHNpemUuXG4gICR3cmFwcGVyLXBhZGRpbmctYm90dG9tOiAoJHN1YnNjcmlwdC1tYXJnaW4tdG9wICsgJGxpbmUtaGVpZ2h0KSAqICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcblxuICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kge1xuICAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAkd3JhcHBlci1wYWRkaW5nLWJvdHRvbTtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgcGFkZGluZzogJGluZml4LXBhZGRpbmcgMDtcbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCB7XG4gICAgICAmLm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsXG4gICAgICAubWF0LWlucHV0LXNlcnZlcjpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgfVxuXG4gICAgICAvLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wIHdpbGwgcmVseSBvbiBBdXRvZmlsbE1vbml0b3IgaW5zdGVhZC5cbiAgICAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlclxuICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNlcnZlci1zaWRlIHJlbmRlcmVkIG1hdElucHV0IHdpdGggYSBsYWJlbCBhdHRyaWJ1dGUgYnV0IGxhYmVsIG5vdCBzaG93blxuICAgICAgLy8gKHVzZWQgYXMgYSBwdXJlIENTUyBzdGFuZC1pbiBmb3IgbWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0KS5cbiAgICAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXG4gICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgdG9wOiAkaW5maXgtbWFyZ2luLXRvcCArICRpbmZpeC1wYWRkaW5nO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUge1xuICAgICAgLy8gV2Ugd2FudCB0aGUgdW5kZXJsaW5lIHRvIHN0YXJ0IGF0IHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgYm94LCBub3QgdGhlIHBhZGRpbmcgYm94LFxuICAgICAgLy8gc28gd2UgbW92ZSBpdCB1cCBieSB0aGUgcGFkZGluZyBhbW91bnQuXG4gICAgICBib3R0b206ICR3cmFwcGVyLXBhZGRpbmctYm90dG9tO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlciB7XG4gICAgICBtYXJnaW4tdG9wOiAkc3Vic2NyaXB0LW1hcmdpbi10b3A7XG5cbiAgICAgIC8vIFdlIHdhbnQgdGhlIHN1YnNjcmlwdCB0byBzdGFydCBhdCB0aGUgZW5kIG9mIHRoZSBjb250ZW50IGJveCwgbm90IHRoZSBwYWRkaW5nIGJveCxcbiAgICAgIC8vIHNvIHdlIG1vdmUgaXQgdXAgYnkgdGhlIHBhZGRpbmcgYW1vdW50IChhZGp1c3RlZCBmb3IgdGhlIHNtYWxsZXIgZm9udCBzaXplKTtcbiAgICAgIHRvcDogY2FsYygxMDAlIC0gI3skd3JhcHBlci1wYWRkaW5nLWJvdHRvbSAvICRzdWJzY3JpcHQtZm9udC1zY2FsZX0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIHRyYW5zbGF0ZVogY2F1c2VzIHRoZSBsYWJlbCB0byBub3QgYXBwZWFyIHdoaWxlIHByaW50aW5nLCBzbyB3ZSBvdmVycmlkZSBpdCB0byBub3RcbiAgLy8gYXBwbHkgdHJhbnNsYXRlWiB3aGlsZSBwcmludGluZ1xuICBAbWVkaWEgcHJpbnQge1xuICAgIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSB7XG4gICAgICAmLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCB7XG4gICAgICAgICYubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCxcbiAgICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmctcHJpbnQoXG4gICAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wIHdpbGwgcmVseSBvbiBBdXRvZmlsbE1vbml0b3IgaW5zdGVhZC5cbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXG4gICAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZy1wcmludChcbiAgICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNlcnZlci1zaWRlIHJlbmRlcmVkIG1hdElucHV0IHdpdGggYSBsYWJlbCBhdHRyaWJ1dGUgYnV0IGxhYmVsIG5vdCBzaG93blxuICAgICAgICAvLyAodXNlZCBhcyBhIHB1cmUgQ1NTIHN0YW5kLWluIGZvciBtYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQpLlxuICAgICAgICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlclxuICAgICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmctcHJpbnQoXG4gICAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cblxuLy8gVGhlbWUgc3R5bGVzIHRoYXQgb25seSBhcHBseSB0byB0aGUgb3V0bGluZSBhcHBlYXJhbmNlIG9mIHRoZSBmb3JtLWZpZWxkLlxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG5cbiAgJGxhYmVsLWRpc2FibGVkLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICAkb3V0bGluZS1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyLCBpZigkaXMtZGFyay10aGVtZSwgMC4zLCAwLjEyKSk7XG4gICRvdXRsaW5lLWNvbG9yLWhvdmVyOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIsIGlmKCRpcy1kYXJrLXRoZW1lLCAxLCAwLjg3KSk7XG4gICRvdXRsaW5lLWNvbG9yLXByaW1hcnk6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG4gICRvdXRsaW5lLWNvbG9yLWFjY2VudDogbWF0LWNvbG9yKCRhY2NlbnQpO1xuICAkb3V0bGluZS1jb2xvci13YXJuOiBtYXQtY29sb3IoJHdhcm4pO1xuICAkb3V0bGluZS1jb2xvci1kaXNhYmxlZDogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyLCBpZigkaXMtZGFyay10aGVtZSwgMC4xNSwgMC4wNikpO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUge1xuICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lIHtcbiAgICAgIGNvbG9yOiAkb3V0bGluZS1jb2xvcjtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayB7XG4gICAgICBjb2xvcjogJG91dGxpbmUtY29sb3ItaG92ZXI7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9jdXNlZCB7XG4gICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayB7XG4gICAgICAgIGNvbG9yOiAkb3V0bGluZS1jb2xvci1wcmltYXJ5O1xuICAgICAgfVxuXG4gICAgICAmLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sge1xuICAgICAgICBjb2xvcjogJG91dGxpbmUtY29sb3ItYWNjZW50O1xuICAgICAgfVxuXG4gICAgICAmLm1hdC13YXJuIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIHtcbiAgICAgICAgY29sb3I6ICRvdXRsaW5lLWNvbG9yLXdhcm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2xhc3MgcmVwZWF0ZWQgc28gdGhhdCBydWxlIGlzIHNwZWNpZmljIGVub3VnaCB0byBvdmVycmlkZSBmb2N1c2VkIGFjY2VudCBjb2xvciBjYXNlLlxuICAgICYubWF0LWZvcm0tZmllbGQtaW52YWxpZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIHtcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIHtcbiAgICAgICAgY29sb3I6ICRvdXRsaW5lLWNvbG9yLXdhcm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCB7XG4gICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBjb2xvcjogJGxhYmVsLWRpc2FibGVkLWNvbG9yO1xuICAgICAgfVxuXG4gICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gICAgICAgIGNvbG9yOiAkb3V0bGluZS1jb2xvci1kaXNhYmxlZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gVXNlZCB0byBtYWtlIGluc3RhbmNlcyBvZiB0aGUgX21hdC1mb3JtLWZpZWxkLWxhYmVsLWZsb2F0aW5nIG1peGluIG5lZ2xpZ2libHkgZGlmZmVyZW50LFxuLy8gYW5kIHByZXZlbnQgR29vZ2xlJ3MgQ1NTIE9wdGltaXplciBmcm9tIGNvbGxhcHNpbmcgdGhlIGRlY2xhcmF0aW9ucy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBzb21lXG4vLyBvZiB0aGUgc2VsZWN0b3JzIGNvbnRhaW4gcHNldWRvLWNsYXNzZXMgbm90IHJlY29nbml6ZWQgaW4gYWxsIGJyb3dzZXJzLiBJZiBhIGJyb3dzZXIgZW5jb3VudGVyc1xuLy8gYW4gdW5rbm93biBwc2V1ZG8tY2xhc3MgaXQgd2lsbCBkaXNjYXJkIHRoZSBlbnRpcmUgcnVsZSBzZXQuXG4kbWF0LWZvcm0tZmllbGQtb3V0bGluZS1kZWR1cGU6IDA7XG5cbi8vIEFwcGxpZXMgYSBmbG9hdGluZyBsYWJlbCBhYm92ZSB0aGUgZm9ybSBmaWVsZCBjb250cm9sIGl0c2VsZi5cbkBtaXhpbiBfbWF0LWZvcm0tZmllbGQtb3V0bGluZS1sYWJlbC1mbG9hdGluZygkZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtJGluZml4LW1hcmdpbi10b3AgLSAkaW5maXgtcGFkZGluZyArICRtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWRlZHVwZSlcbiAgc2NhbGUoJGZvbnQtc2NhbGUpO1xuICB3aWR0aDogMTAwJSAvICRmb250LXNjYWxlICsgJG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZGVkdXBlO1xuXG4gICRtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWRlZHVwZTogJG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZGVkdXBlICsgMC4wMDAwMSAhZ2xvYmFsO1xufVxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtb3V0bGluZS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLy8gVGhlIHVuaXQtbGVzcyBsaW5lLWhlaWdodCBmcm9tIHRoZSBmb250IGNvbmZpZy5cbiAgJGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgaW5wdXQpO1xuICAvLyBUaGUgYW1vdW50IHRvIHNjYWxlIHRoZSBmb250IGZvciB0aGUgZmxvYXRpbmcgbGFiZWwgYW5kIHN1YnNjcmlwdC5cbiAgJHN1YnNjcmlwdC1mb250LXNjYWxlOiAwLjc1O1xuICAvLyBUaGUgcGFkZGluZyBhYm92ZSBhbmQgYmVsb3cgdGhlIGluZml4LlxuICAkaW5maXgtcGFkZGluZzogMWVtO1xuICAvLyBUaGUgbWFyZ2luIGFwcGxpZWQgdG8gdGhlIGZvcm0tZmllbGQtaW5maXggdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsLlxuICAkaW5maXgtbWFyZ2luLXRvcDogMWVtICogJGxpbmUtaGVpZ2h0ICogJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuICAvLyBUaGUgc3BhY2UgYmV0d2VlbiB0aGUgYm90dG9tIG9mIHRoZSAubWF0LWZvcm0tZmllbGQtZmxleCBhcmVhIGFuZCB0aGUgc3Vic2NyaXB0IHdyYXBwZXIuXG4gIC8vIE1vY2tzIHNob3cgaGFsZiBvZiB0aGUgdGV4dCBzaXplLCBidXQgdGhpcyBtYXJnaW4gaXMgYXBwbGllZCB0byBhbiBlbGVtZW50IHdpdGggdGhlIHN1YnNjcmlwdFxuICAvLyB0ZXh0IGZvbnQgc2l6ZSwgc28gd2UgbmVlZCB0byBkaXZpZGUgYnkgdGhlIHNjYWxlIGZhY3RvciB0byBtYWtlIGl0IGhhbGYgb2YgdGhlIG9yaWdpbmFsIHRleHRcbiAgLy8gc2l6ZS5cbiAgJHN1YnNjcmlwdC1tYXJnaW4tdG9wOiAwLjVlbSAvICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcbiAgLy8gVGhlIHBhZGRpbmcgYXBwbGllZCB0byB0aGUgZm9ybS1maWVsZC13cmFwcGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBzdWJzY3JpcHQsIHNpbmNlIGl0J3NcbiAgLy8gYWJzb2x1dGVseSBwb3NpdGlvbmVkLiBUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgdGhlIHN1YnNjcmlwdCdzIG1hcmdpbiBhbmQgbGluZS1oZWlnaHQsIGJ1dCB3ZVxuICAvLyBuZWVkIHRvIG11bHRpcGx5IGJ5IHRoZSBzdWJzY3JpcHQgZm9udCBzY2FsZSBmYWN0b3Igc2luY2UgdGhlIHdyYXBwZXIgaGFzIGEgbGFyZ2VyIGZvbnQgc2l6ZS5cbiAgJHdyYXBwZXItcGFkZGluZy1ib3R0b206ICgkc3Vic2NyaXB0LW1hcmdpbi10b3AgKyAkbGluZS1oZWlnaHQpICogJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuICAvLyBUaGUgYW1vdW50IHdlIG9mZnNldCB0aGUgbGFiZWwgZnJvbSB0aGUgaW5wdXQgdGV4dCBpbiB0aGUgb3V0bGluZSBhcHBlYXJhbmNlLlxuICAkb3V0bGluZS1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldDogLTAuMjVlbTtcblxuICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIHtcbiAgICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgcGFkZGluZzogJGluZml4LXBhZGRpbmcgMCAkaW5maXgtcGFkZGluZyAwO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICB0b3A6ICRpbmZpeC1tYXJnaW4tdG9wICsgJGluZml4LXBhZGRpbmc7XG4gICAgICBtYXJnaW4tdG9wOiAkb3V0bGluZS1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldDtcbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCB7XG4gICAgICAmLm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsXG4gICAgICAubWF0LWlucHV0LXNlcnZlcjpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcgKyAkb3V0bGluZS1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldCxcbiAgICAgICAgICAgICAgICAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNlcnZlci1zaWRlIHJlbmRlcmVkIG1hdElucHV0IHdpdGggYSBsYWJlbCBhdHRyaWJ1dGUgYnV0IGxhYmVsIG5vdCBzaG93blxuICAgICAgLy8gKHVzZWQgYXMgYSBwdXJlIENTUyBzdGFuZC1pbiBmb3IgbWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0KS5cbiAgICAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXG4gICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtb3V0bGluZS1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nICsgJG91dGxpbmUtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQsXG4gICAgICAgICAgICAgICAgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuXG4vLyBUaGVtZSBzdHlsZXMgdGhhdCBvbmx5IGFwcGx5IHRvIHRoZSBzdGFuZGFyZCBhcHBlYXJhbmNlIG9mIHRoZSBmb3JtLWZpZWxkLlxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtc3RhbmRhcmQtdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG5cbiAgJHVuZGVybGluZS1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyLCBpZigkaXMtZGFyay10aGVtZSwgMC43LCAwLjQyKSk7XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQge1xuICAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1jb2xvcjtcbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUge1xuICAgICAgQGluY2x1ZGUgbWF0LWNvbnRyb2wtZGlzYWJsZWQtdW5kZXJsaW5lKCR1bmRlcmxpbmUtY29sb3IpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtc3RhbmRhcmQtdHlwb2dyYXBoeSgkY29uZmlnKSB7fVxuXG5cbi8vIFRoZW1lIHN0eWxlcyB0aGF0IGFwcGx5IHRvIGFsbCBhcHBlYXJhbmNlcyBvZiB0aGUgZm9ybS1maWVsZC5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG5cbiAgLy8gTGFiZWwgY29sb3JzLiBSZXF1aXJlZCBpcyB1c2VkIGZvciB0aGUgYCpgIHN0YXIgc2hvd24gaW4gdGhlIGxhYmVsLlxuICAkbGFiZWwtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjcsIDAuNikpO1xuICAkZm9jdXNlZC1sYWJlbC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCB0ZXh0KTtcbiAgJHJlcXVpcmVkLWxhYmVsLWNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgdGV4dCk7XG5cbiAgLy8gVW5kZXJsaW5lIGNvbG9ycy5cbiAgJHVuZGVybGluZS1jb2xvci1iYXNlOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIsIGlmKCRpcy1kYXJrLXRoZW1lLCAxLCAwLjg3KSk7XG4gICR1bmRlcmxpbmUtY29sb3ItYWNjZW50OiBtYXQtY29sb3IoJGFjY2VudCwgdGV4dCk7XG4gICR1bmRlcmxpbmUtY29sb3Itd2FybjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgJHVuZGVybGluZS1mb2N1c2VkLWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIHRleHQpO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgY29sb3I6ICRsYWJlbC1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtaGludCB7XG4gICAgY29sb3I6ICRsYWJlbC1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgIGNvbG9yOiAkZm9jdXNlZC1sYWJlbC1jb2xvcjtcblxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICBjb2xvcjogJHVuZGVybGluZS1jb2xvci1hY2NlbnQ7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBjb2xvcjogJHVuZGVybGluZS1jb2xvci13YXJuO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2VyIHtcbiAgICBjb2xvcjogJHJlcXVpcmVkLWxhYmVsLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1jb2xvci1iYXNlO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIHtcbiAgICAubWF0LWZvcm0tZmllbGQtcmlwcGxlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtZm9jdXNlZC1jb2xvcjtcblxuICAgICAgJi5tYXQtYWNjZW50IHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1jb2xvci1hY2NlbnQ7XG4gICAgICB9XG5cbiAgICAgICYubWF0LXdhcm4ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLXdhcm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQ6bm90KC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkKSB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlciB7XG4gICAgICBjb2xvcjogJHVuZGVybGluZS1mb2N1c2VkLWNvbG9yO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVyIHtcbiAgICAgIGNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLWFjY2VudDtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXIge1xuICAgICAgY29sb3I6ICR1bmRlcmxpbmUtY29sb3Itd2FybjtcbiAgICB9XG4gIH1cblxuICAvLyBTdHlsaW5nIGZvciB0aGUgZXJyb3Igc3RhdGUgb2YgdGhlIGZvcm0gZmllbGQuIE5vdGUgdGhhdCB3aGlsZSB0aGUgc2FtZSBjYW4gYmVcbiAgLy8gYWNoaWV2ZWQgd2l0aCB0aGUgbmctKiBjbGFzc2VzLCB3ZSB1c2UgdGhpcyBhcHByb2FjaCBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCB0aGUgc2FtZVxuICAvLyBsb2dpYyBpcyB1c2VkIHRvIHN0eWxlIHRoZSBlcnJvciBzdGF0ZSBhbmQgdG8gc2hvdyB0aGUgZXJyb3IgbWVzc2FnZXMuXG4gIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIHtcbiAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgY29sb3I6ICR1bmRlcmxpbmUtY29sb3Itd2FybjtcblxuICAgICAgJi5tYXQtYWNjZW50LFxuICAgICAgLm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlciB7XG4gICAgICAgIGNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLXdhcm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSxcbiAgICAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1jb2xvci13YXJuO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZXJyb3Ige1xuICAgIGNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLXdhcm47XG4gIH1cblxuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1sZWdhY3ktdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtc3RhbmRhcmQtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtZmlsbC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoZW1lKCR0aGVtZSk7XG59XG5cbi8vIFVzZWQgdG8gbWFrZSBpbnN0YW5jZXMgb2YgdGhlIF9tYXQtZm9ybS1maWVsZC1sYWJlbC1mbG9hdGluZyBtaXhpbiBuZWdsaWdpYmx5IGRpZmZlcmVudCxcbi8vIGFuZCBwcmV2ZW50IEdvb2dsZSdzIENTUyBPcHRpbWl6ZXIgZnJvbSBjb2xsYXBzaW5nIHRoZSBkZWNsYXJhdGlvbnMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugc29tZVxuLy8gb2YgdGhlIHNlbGVjdG9ycyBjb250YWluIHBzZXVkby1jbGFzc2VzIG5vdCByZWNvZ25pemVkIGluIGFsbCBicm93c2Vycy4gSWYgYSBicm93c2VyIGVuY291bnRlcnNcbi8vIGFuIHVua25vd24gcHNldWRvLWNsYXNzIGl0IHdpbGwgZGlzY2FyZCB0aGUgZW50aXJlIHJ1bGUgc2V0LlxuJG1hdC1mb3JtLWZpZWxkLWRlZHVwZTogMDtcblxuLy8gQXBwbGllcyBhIGZsb2F0aW5nIGxhYmVsIGFib3ZlIHRoZSBmb3JtIGZpZWxkIGNvbnRyb2wgaXRzZWxmLlxuQG1peGluIF9tYXQtZm9ybS1maWVsZC1sYWJlbC1mbG9hdGluZygkZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtJGluZml4LW1hcmdpbi10b3AgLSAkaW5maXgtcGFkZGluZyArICRtYXQtZm9ybS1maWVsZC1kZWR1cGUpXG4gICAgICAgICAgICAgc2NhbGUoJGZvbnQtc2NhbGUpO1xuICB3aWR0aDogMTAwJSAvICRmb250LXNjYWxlICsgJG1hdC1mb3JtLWZpZWxkLWRlZHVwZTtcblxuICAkbWF0LWZvcm0tZmllbGQtZGVkdXBlOiAkbWF0LWZvcm0tZmllbGQtZGVkdXBlICsgMC4wMDAwMSAhZ2xvYmFsO1xufVxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC8vIFRoZSB1bml0LWxlc3MgbGluZS1oZWlnaHQgZnJvbSB0aGUgZm9udCBjb25maWcuXG4gICRsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGlucHV0KTtcblxuICAvLyBUaGUgYW1vdW50IHRvIHNjYWxlIHRoZSBmb250IGZvciB0aGUgZmxvYXRpbmcgbGFiZWwgYW5kIHN1YnNjcmlwdC5cbiAgJHN1YnNjcmlwdC1mb250LXNjYWxlOiAwLjc1O1xuICAvLyBUaGUgYW1vdW50IHRvIHNjYWxlIHRoZSBmb250IGZvciB0aGUgcHJlZml4IGFuZCBzdWZmaXggaWNvbnMuXG4gICRwcmVmaXgtc3VmZml4LWljb24tZm9udC1zY2FsZTogMS41O1xuXG4gIC8vIFRoZSBwYWRkaW5nIG9uIHRoZSBpbmZpeC4gTW9ja3Mgc2hvdyBoYWxmIG9mIHRoZSB0ZXh0IHNpemUuXG4gICRpbmZpeC1wYWRkaW5nOiAwLjVlbTtcbiAgLy8gVGhlIG1hcmdpbiBhcHBsaWVkIHRvIHRoZSBmb3JtLWZpZWxkLWluZml4IHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBmbG9hdGluZyBsYWJlbC5cbiAgJGluZml4LW1hcmdpbi10b3A6IDFlbSAqICRsaW5lLWhlaWdodCAqICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcbiAgLy8gRm9udCBzaXplIHRvIHVzZSBmb3IgdGhlIGxhYmVsIGFuZCBzdWJzY3JpcHQgdGV4dC5cbiAgJHN1YnNjcmlwdC1mb250LXNpemU6ICRzdWJzY3JpcHQtZm9udC1zY2FsZSAqIDEwMCU7XG4gIC8vIEZvbnQgc2l6ZSB0byB1c2UgZm9yIHRoZSBmb3IgdGhlIHByZWZpeCBhbmQgc3VmZml4IGljb25zLlxuICAkcHJlZml4LXN1ZmZpeC1pY29uLWZvbnQtc2l6ZTogJHByZWZpeC1zdWZmaXgtaWNvbi1mb250LXNjYWxlICogMTAwJTtcbiAgLy8gVGhlIHNwYWNlIGJldHdlZW4gdGhlIGJvdHRvbSBvZiB0aGUgLm1hdC1mb3JtLWZpZWxkLWZsZXggYXJlYSBhbmQgdGhlIHN1YnNjcmlwdCB3cmFwcGVyLlxuICAvLyBNb2NrcyBzaG93IGhhbGYgb2YgdGhlIHRleHQgc2l6ZSwgYnV0IHRoaXMgbWFyZ2luIGlzIGFwcGxpZWQgdG8gYW4gZWxlbWVudCB3aXRoIHRoZSBzdWJzY3JpcHRcbiAgLy8gdGV4dCBmb250IHNpemUsIHNvIHdlIG5lZWQgdG8gZGl2aWRlIGJ5IHRoZSBzY2FsZSBmYWN0b3IgdG8gbWFrZSBpdCBoYWxmIG9mIHRoZSBvcmlnaW5hbCB0ZXh0XG4gIC8vIHNpemUuXG4gICRzdWJzY3JpcHQtbWFyZ2luLXRvcDogMC41ZW0gLyAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG4gIC8vIFRoZSBwYWRkaW5nIGFwcGxpZWQgdG8gdGhlIGZvcm0tZmllbGQtd3JhcHBlciB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgc3Vic2NyaXB0LCBzaW5jZSBpdCdzXG4gIC8vIGFic29sdXRlbHkgcG9zaXRpb25lZC4gVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBzdWJzY3JpcHQncyBtYXJnaW4gYW5kIGxpbmUtaGVpZ2h0LCBidXQgd2VcbiAgLy8gbmVlZCB0byBtdWx0aXBseSBieSB0aGUgc3Vic2NyaXB0IGZvbnQgc2NhbGUgZmFjdG9yIHNpbmNlIHRoZSB3cmFwcGVyIGhhcyBhIGxhcmdlciBmb250IHNpemUuXG4gICR3cmFwcGVyLXBhZGRpbmctYm90dG9tOiAoJHN1YnNjcmlwdC1tYXJnaW4tdG9wICsgJGxpbmUtaGVpZ2h0KSAqICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcblxuICAubWF0LWZvcm0tZmllbGQge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBpbnB1dCk7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtd3JhcHBlciB7XG4gICAgcGFkZGluZy1ib3R0b206ICR3cmFwcGVyLXBhZGRpbmctYm90dG9tO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCxcbiAgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCB7XG4gICAgLy8gQWxsb3cgaWNvbnMgaW4gYSBwcmVmaXggb3Igc3VmZml4IHRvIGFkYXB0IHRvIHRoZSBjb3JyZWN0IHNpemUuXG4gICAgLm1hdC1pY29uIHtcbiAgICAgIGZvbnQtc2l6ZTogJHByZWZpeC1zdWZmaXgtaWNvbi1mb250LXNpemU7XG4gICAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0O1xuICAgIH1cblxuICAgIC8vIEFsbG93IGljb24gYnV0dG9ucyBpbiBhIHByZWZpeCBvciBzdWZmaXggdG8gYWRhcHQgdG8gdGhlIGNvcnJlY3Qgc2l6ZS5cbiAgICAubWF0LWljb24tYnV0dG9uIHtcbiAgICAgIGhlaWdodDogJHByZWZpeC1zdWZmaXgtaWNvbi1mb250LXNjYWxlICogMWVtO1xuICAgICAgd2lkdGg6ICRwcmVmaXgtc3VmZml4LWljb24tZm9udC1zY2FsZSAqIDFlbTtcblxuICAgICAgLm1hdC1pY29uIHtcbiAgICAgICAgaGVpZ2h0OiAkbGluZS1oZWlnaHQgKiAxZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICBwYWRkaW5nOiAkaW5maXgtcGFkZGluZyAwO1xuICAgIC8vIFRocm93cyBvZmYgdGhlIGJhc2VsaW5lIGlmIHdlIGRvIGl0IGFzIGEgcmVhbCBtYXJnaW4sIHNvIHdlIGRvIGl0IGFzIGEgYm9yZGVyIGluc3RlYWQuXG4gICAgYm9yZGVyLXRvcDogJGluZml4LW1hcmdpbi10b3Agc29saWQgdHJhbnNwYXJlbnQ7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IHtcbiAgICAmLm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsXG4gICAgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgfVxuXG4gICAgLy8gU2VydmVyLXNpZGUgcmVuZGVyZWQgbWF0SW5wdXQgd2l0aCBhIGxhYmVsIGF0dHJpYnV0ZSBidXQgbGFiZWwgbm90IHNob3duXG4gICAgLy8gKHVzZWQgYXMgYSBwdXJlIENTUyBzdGFuZC1pbiBmb3IgbWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0KS5cbiAgICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlclxuICAgICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIge1xuICAgIHRvcDogLSRpbmZpeC1tYXJnaW4tdG9wO1xuICAgIHBhZGRpbmctdG9wOiAkaW5maXgtbWFyZ2luLXRvcDtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgdG9wOiAkaW5maXgtbWFyZ2luLXRvcCArICRpbmZpeC1wYWRkaW5nO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSB7XG4gICAgLy8gV2Ugd2FudCB0aGUgdW5kZXJsaW5lIHRvIHN0YXJ0IGF0IHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgYm94LCBub3QgdGhlIHBhZGRpbmcgYm94LFxuICAgIC8vIHNvIHdlIG1vdmUgaXQgdXAgYnkgdGhlIHBhZGRpbmcgYW1vdW50LlxuICAgIGJvdHRvbTogJHdyYXBwZXItcGFkZGluZy1ib3R0b207XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXIge1xuICAgIGZvbnQtc2l6ZTogJHN1YnNjcmlwdC1mb250LXNpemU7XG4gICAgbWFyZ2luLXRvcDogJHN1YnNjcmlwdC1tYXJnaW4tdG9wO1xuXG4gICAgLy8gV2Ugd2FudCB0aGUgc3Vic2NyaXB0IHRvIHN0YXJ0IGF0IHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgYm94LCBub3QgdGhlIHBhZGRpbmcgYm94LFxuICAgIC8vIHNvIHdlIG1vdmUgaXQgdXAgYnkgdGhlIHBhZGRpbmcgYW1vdW50IChhZGp1c3RlZCBmb3IgdGhlIHNtYWxsZXIgZm9udCBzaXplKTtcbiAgICB0b3A6IGNhbGMoMTAwJSAtICN7JHdyYXBwZXItcGFkZGluZy1ib3R0b20gLyAkc3Vic2NyaXB0LWZvbnQtc2NhbGV9KTtcbiAgfVxuXG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1zdGFuZGFyZC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1maWxsLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdHlwb2dyYXBoeSgkY29uZmlnKTtcbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LXRyZWUtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC10cmVlIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdjYXJkJyk7XG4gIH1cblxuICAubWF0LXRyZWUtbm9kZSxcbiAgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXRyZWUtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtdHJlZSB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtdHJlZS1ub2RlLFxuICAubWF0LW5lc3RlZC10cmVlLW5vZGUge1xuICAgIGZvbnQtd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0xKTtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKTtcbiAgfVxufVxuXG5cblxuLy8gSW5jbHVkZXMgYWxsIG9mIHRoZSB0eXBvZ3JhcGhpYyBzdHlsZXMuXG5AbWl4aW4gYW5ndWxhci1tYXRlcmlhbC10eXBvZ3JhcGh5KCRjb25maWc6IG51bGwpIHtcbiAgQGlmICRjb25maWcgPT0gbnVsbCB7XG4gICAgJGNvbmZpZzogbWF0LXR5cG9ncmFwaHktY29uZmlnKCk7XG4gIH1cblxuICBAaW5jbHVkZSBtYXQtYmFkZ2UtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWJhc2UtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWF1dG9jb21wbGV0ZS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtYm90dG9tLXNoZWV0LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1idXR0b24tdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWJ1dHRvbi10b2dnbGUtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWNhcmQtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWNoZWNrYm94LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1jaGlwcy10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtdGFibGUtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWRhdGVwaWNrZXItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWRpYWxvZy10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZXhwYW5zaW9uLXBhbmVsLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1ncmlkLWxpc3QtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWljb24tdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWlucHV0LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1tZW51LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1wYWdpbmF0b3ItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXByb2dyZXNzLWJhci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtcmFkaW8tdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXNlbGVjdC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtc2lkZW5hdi10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtc2xpZGUtdG9nZ2xlLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1zbGlkZXItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXN0ZXBwZXItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXNvcnQtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXRhYnMtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXRvb2xiYXItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXRvb2x0aXAtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWxpc3QtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LW9wdGlvbi10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtb3B0Z3JvdXAtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXNuYWNrLWJhci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtdHJlZS10eXBvZ3JhcGh5KCRjb25maWcpO1xufVxuXG5cbi8vIE1peGluIHRoYXQgcmVuZGVycyBhbGwgb2YgdGhlIGNvcmUgc3R5bGVzIHRoYXQgYXJlIG5vdCB0aGVtZS1kZXBlbmRlbnQuXG5AbWl4aW4gbWF0LWNvcmUoJHR5cG9ncmFwaHktY29uZmlnOiBudWxsKSB7XG4gIEBpbmNsdWRlIGFuZ3VsYXItbWF0ZXJpYWwtdHlwb2dyYXBoeSgkdHlwb2dyYXBoeS1jb25maWcpO1xuICBAaW5jbHVkZSBtYXQtcmlwcGxlKCk7XG4gIEBpbmNsdWRlIGNkay1hMTF5KCk7XG4gIEBpbmNsdWRlIGNkay1vdmVybGF5KCk7XG4gIEBpbmNsdWRlIGNkay10ZXh0LWZpZWxkKCk7XG59XG5cbi8vIE1peGluIHRoYXQgcmVuZGVycyBhbGwgb2YgdGhlIGNvcmUgc3R5bGVzIHRoYXQgZGVwZW5kIG9uIHRoZSB0aGVtZS5cbkBtaXhpbiBtYXQtY29yZS10aGVtZSgkdGhlbWUpIHtcbiAgQGluY2x1ZGUgbWF0LXJpcHBsZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtb3B0aW9uLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1vcHRncm91cC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtcHNldWRvLWNoZWNrYm94LXRoZW1lKCR0aGVtZSk7XG5cbiAgLy8gUHJvdmlkZXMgZXh0ZXJuYWwgQ1NTIGNsYXNzZXMgZm9yIGVhY2ggZWxldmF0aW9uIHZhbHVlLiBFYWNoIENTUyBjbGFzcyBpcyBmb3JtYXR0ZWQgYXNcbiAgLy8gYG1hdC1lbGV2YXRpb24teiR6VmFsdWVgIHdoZXJlIGAkelZhbHVlYCBjb3JyZXNwb25kcyB0byB0aGUgei1zcGFjZSB0byB3aGljaCB0aGUgZWxlbWVudCBpc1xuICAvLyBlbGV2YXRlZC5cbiAgQGZvciAkelZhbHVlIGZyb20gMCB0aHJvdWdoIDI0IHtcbiAgICAuI3skX21hdC1lbGV2YXRpb24tcHJlZml4fSN7JHpWYWx1ZX0ge1xuICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oJHpWYWx1ZSwgJHRoZW1lKTtcbiAgICB9XG4gIH1cblxuICAvLyBXcmFwcGVyIGVsZW1lbnQgdGhhdCBwcm92aWRlcyB0aGUgdGhlbWUgYmFja2dyb3VuZCB3aGVuIHRoZSB1c2VyJ3MgY29udGVudCBpc24ndFxuICAvLyBpbnNpZGUgb2YgYSBgbWF0LXNpZGVuYXYtY29udGFpbmVyYC4gTm90ZSB0aGF0IHdlIG5lZWQgdG8gZXhjbHVkZSB0aGUgYW1wZXJzYW5kXG4gIC8vIHNlbGVjdG9yIGluIGNhc2UgdGhlIG1peGluIGlzIGluY2x1ZGVkIGF0IHRoZSB0b3AgbGV2ZWwuXG4gIC5tYXQtYXBwLWJhY2tncm91bmQje2lmKCYsICcsICYubWF0LWFwcC1iYWNrZ3JvdW5kJywgJycpfSB7XG4gICAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxuXG4gIC8vIE1hcmtlciB0aGF0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHVzZXIgaGFzIGFkZGVkIGEgdGhlbWUgdG8gdGhlaXIgcGFnZS5cbiAgQGF0LXJvb3Qge1xuICAgIC5tYXQtdGhlbWUtbG9hZGVkLW1hcmtlciB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LWRpdmlkZXItdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1kaXZpZGVyIHtcbiAgICBib3JkZXItdG9wLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG5cbiAgLm1hdC1kaXZpZGVyLXZlcnRpY2FsIHtcbiAgICBib3JkZXItcmlnaHQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cbn1cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLy8gQ3JlYXRlIGEgdGhlbWUuXG5AbWl4aW4gYW5ndWxhci1tYXRlcmlhbC10aGVtZSgkdGhlbWUpIHtcbiAgQGluY2x1ZGUgbWF0LWNvcmUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWF1dG9jb21wbGV0ZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtYmFkZ2UtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWJvdHRvbS1zaGVldC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtYnV0dG9uLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1idXR0b24tdG9nZ2xlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1jYXJkLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1jaGVja2JveC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtY2hpcHMtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXRhYmxlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1kYXRlcGlja2VyLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1kaWFsb2ctdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWRpdmlkZXItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWV4cGFuc2lvbi1wYW5lbC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZ3JpZC1saXN0LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1pY29uLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1pbnB1dC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtbGlzdC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtbWVudS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtcGFnaW5hdG9yLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1wcm9ncmVzcy1iYXItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXByb2dyZXNzLXNwaW5uZXItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXJhZGlvLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1zZWxlY3QtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXNpZGVuYXYtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXNsaWRlLXRvZ2dsZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtc2xpZGVyLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1zdGVwcGVyLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1zb3J0LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC10YWJzLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC10b29sYmFyLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC10b29sdGlwLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC10cmVlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1zbmFjay1iYXItdGhlbWUoJHRoZW1lKTtcbn1cbiIsIkBpbXBvcnQgXCJtaXhpbnNcIjtcbkBpbXBvcnQgXCJ2YXJzXCI7XG5AaW1wb3J0IFwifkBhbmd1bGFyL21hdGVyaWFsL3RoZW1pbmdcIjtcblxuLm1jayB7XG4gICAgJi1pbmhlcml0IHtcbiAgICAgICAgJi1mb250IHtcbiAgICAgICAgICAgIC8vIHBhdGNoZXMgZ2xvYmFsIGZvbnQgc3R5bGluZyBkb25lIGJ5IGxlZ2FjeSB1aVxuICAgICAgICAgICAgZm9udDogaW5oZXJpdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtY29udGVudCB7XG4gICAgICAgICYtZXhwYW5kIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuXG4gICAgICAgICAgICAmLXdpZHRoIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi1oZWlnaHQge1xuICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtd2l0aC1mb290ZXItaGVpZ2h0IHtcbiAgICAgICAgICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDU4cHgpO1xuICAgICAgICB9XG5cbiAgICAgICAgJi1mdWxsLWhlaWdodCB7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMHZoO1xuICAgICAgICB9XG5cbiAgICAgICAgJi1wYWdlIHtcbiAgICAgICAgICAgIEBleHRlbmQgLm1jay1jb250ZW50LWV4cGFuZDtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICRwYWdlLWJhY2tncm91bmQtY29sb3I7XG5cbiAgICAgICAgICAgICYtY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICBAZXh0ZW5kIC5tY2stY29udGVudC1mdWxsLWhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtYm9keSB7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAyNHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1ncm91cCB7XG4gICAgICAgICAgICBAaW5jbHVkZSBwYWdlLXBhZGRpbmc7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcblxuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogNzU5cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXNoYWRvdyB7XG4gICAgICAgIEBpbmNsdWRlIG1hdC1lbGV2YXRpb24oMSk7XG4gICAgfVxuXG4gICAgJi1mbGV4LTEge1xuICAgICAgICBmbGV4OiAxO1xuICAgIH1cblxuICAgICYtcm93IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcblxuICAgICAgICAmLm1jay1jZW50ZXIge1xuICAgICAgICAgICAgJi1qdXN0aWZ5IHtcbiAgICAgICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi1hbGlnbiB7XG4gICAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGV4dGVuZCAubWNrLWNlbnRlci1qdXN0aWZ5O1xuICAgICAgICAgICAgQGV4dGVuZCAubWNrLWNlbnRlci1hbGlnbjtcbiAgICAgICAgfVxuXG4gICAgICAgICYubWNrLXN0cmV0Y2gge1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gICAgICAgIH1cblxuICAgICAgICAmLWZsb3cge1xuICAgICAgICAgICAgQGV4dGVuZCAubWNrLXJvdztcbiAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgfVxuXG4gICAgICAgICYubWNrLXNjcm9sbCB7XG4gICAgICAgICAgICBvdmVyZmxvdy14OiBzY3JvbGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWNvbHVtbiB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgICAgICAgJi5tY2stY2VudGVyIHtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgICYubWNrLXNwYWNlLWJldHdlZW4ge1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5tY2stc3RyZXRjaCB7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICAgICAgfVxuXG4gICAgICAgICYubWNrLXNjcm9sbCB7XG4gICAgICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgICAgICAgICBvdmVyZmxvdy15OiBvdmVybGF5O1xuICAgICAgICB9XG5cbiAgICAgICAgJi5tY2stZmxleC1lbmQge1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtb3ZlcmZsb3cge1xuICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICB9XG5cbiAgICAmLWJvcmRlcmVkLCAmLWlucHV0IHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzQ2NDY0NjtcbiAgICAgICAgfVxuXG4gICAgICAgICY6Zm9jdXMge1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgfVxuXG4gICAgICAgICZbZGlzYWJsZWQ9XCJ0cnVlXCJdIHtcbiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjZjBmMGYwO1xuICAgICAgICAgICAgY29sb3I6ICNjY2M7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWRhdGUtZGlzcGxheSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogNDNweDtcbiAgICAgICAgcGFkZGluZzogJHNwYWNpbmctc21hbGwgJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgdHJhbnNpdGlvbjogYm9yZGVyIDIwMG1zLCBib3gtc2hhZG93IDIwMG1zO1xuICAgIH1cblxuICAgICYtZm9ybS1pbnB1dCB7XG5cbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICAgICAgICAgICAgcGFkZGluZy1ib3R0b206ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgIH1cblxuICAgICAgICBtYXQtZm9ybS1maWVsZCB7XG4gICAgICAgICAgICBtaW4td2lkdGg6IGF1dG8gIWltcG9ydGFudDtcblxuICAgICAgICAgICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLXRvcDogMC43cmVtICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206ICRzcGFjaW5nLXh4c21hbGwgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICAgICAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDIuN3JlbTtcbiAgICAgICAgICAgICAgICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI3KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5tY2stY2VudGVyLXN1ZmZpeCB7XG4gICAgICAgICAgICAgICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgICAgICAgICAgICAgICAgQGV4dGVuZCAubWNrLXJvdztcbiAgICAgICAgICAgICAgICAgICAgQGV4dGVuZCAubWNrLWNlbnRlcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24ge1xuICAgICAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDJweDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAubWF0LWZvcm0tZmllbGQtZmxleCB7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMnJlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDJyZW07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBtYXQtZm9ybS1maWVsZC5tYXQtcyB7XG4gICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1zZWxlY3Qge1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogMC4ycmVtO1xuXG4gICAgICAgICAgICAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmIC5tYXQtc2VsZWN0LXZhbHVlID4gLm1hdC1zZWxlY3QtdmFsdWUtdGV4dCA+IHNwYW4ge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgICAgICAgICAvLyBjb2xvcjogIzMzMzMzMyAhaW1wb3J0YW50OyAvL1ItLS0gYmxvY2tzIGRpc2FibGVkIHN0YXRlIGNvbG9yXG4gICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Lm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsXG4gICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLFxuICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyO1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMXB4O1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAuYXZhaWxhYmxlIHtcbiAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lIHtcbiAgICAgICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCxcbiAgICAgICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLFxuICAgICAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICMzYWE1Mzc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLmJvb2tlZCB7XG4gICAgICAgICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gICAgICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Lm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsXG4gICAgICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcCxcbiAgICAgICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kIHtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjZTEyZTQxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIHtcbiAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LFxuICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcCxcbiAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogJHByaW1hcnk7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgID4gbWF0LWZvcm0tZmllbGQubWNrLWVycm9yIHtcbiAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICAvLyBsZXNzIGp1bXBpbmcgZm9yIGVycm9yIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lIHtcbiAgICAgICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCxcbiAgICAgICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLFxuICAgICAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICRlcnJvci1jb2xvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBtY2stY2xvc2UtaWNvbi5tYXQtY2hpcC1yZW1vdmUubWF0LWNoaXAtcmVtb3ZlIHtcbiAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1sYWJlbCB7XG4gICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbWF0LXJhZGlvLWJ1dHRvbiB7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLm1hdC1yYWRpby1sYWJlbC1jb250ZW50IHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgLm1hdC1yYWRpbyB7XG4gICAgICAgICAgICAmLW91dGVyLWNpcmNsZSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkcHJpbWFyeSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMXB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYtaW5uZXItY2lyY2xlIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbWF0LXJhZGlvLWdyb3VwIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuXG4gICAgICAgICAgICAmID4gbWF0LXJhZGlvLWJ1dHRvbjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWNvbnRhaW5lciB7XG4gICAgICAgICAgICA+IC5tY2stZm9ybS1pbnB1dCwgPiBtY2stc2VsZWN0IHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy14eHNtYWxsO1xuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy1tZWRpdW0tbGFyZ2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWNrLXJhZGlvLXNlbGVjdCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogJHNwYWNpbmctc21hbGw7XG5cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nLW1lZGl1bTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBtYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcCB7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgICAgICAgICBtaW4taGVpZ2h0OiAxLjVyZW07XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY2hpcC1jb2xvcjtcbiAgICAgICAgICAgIHBhZGRpbmctdG9wOiAkc3BhY2luZy1zbWFsbGVzdDtcbiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAkc3BhY2luZy1zbWFsbGVzdDtcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgICAgIEBpbmNsdWRlIGNoaXAtbGFiZWw7XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1jaGVja2JveCB7XG4gICAgICAgICAgICAmLm1hdC1jaGVja2JveC5tYXQtY2hlY2tib3gge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGNoZWNrYm94LWxhYmVsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkaXYubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5O1xuXG4gICAgICAgICAgICAgICAgJi5tY2stY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWRpc2FibGVkIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLm1jay1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtZGlzYWJsZWQge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGNoZWNrYm94LWxhYmVsO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkYm9yZGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1ib3JkZXJsZXNzIHtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuXG4gICAgICAgICY6aG92ZXIsICY6Zm9jdXMsICY6ZGlzYWJsZWQge1xuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1zZWxlY3QtcGFuZWwge1xuICAgICAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHVuc2V0ICFpbXBvcnRhbnQ7XG4gICAgICAgIG1hcmdpbi10b3A6IDM1cHggIWltcG9ydGFudDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcblxuICAgICAgICBtYXQtb3B0aW9uIHtcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG5cbiAgICAgICAgICAgICYubWF0LW9wdGlvbi10ZXh0IHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLm1jay1tYXJnaW4tdG9wIHtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6ICRzcGFjaW5nLW1lZGl1bSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1jaGVja2JveC1wYW5lbCB7XG4gICAgICAgICYubWF0LWF1dG9jb21wbGV0ZS1wYW5lbC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIHtcbiAgICAgICAgICAgIHRvcDogLTEwcHg7XG4gICAgICAgICAgICBtYXgtaGVpZ2h0OiAyNzhweDtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1vcHRpb24ubWNrLXRydW5jYXRlZCB7XG4gICAgICAgICAgICAmIC5tYXQtY2hlY2tib3gtbGFiZWwubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBtYXgtbGluZXMoMik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBtYXQtb3B0aW9uIHtcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMjRweDtcbiAgICAgICAgICAgIGhlaWdodDogdW5zZXQ7XG4gICAgICAgICAgICBtaW4taGVpZ2h0OiAzNnB4O1xuXG4gICAgICAgICAgICAmIC5tYXQtY2hlY2tib3gtbGFiZWwubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgICAgICAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmIC5tYXQtY2hlY2tib3gtbGFiZWwubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBjaGVja2JveC1sYWJlbDtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLm1jay1jaGVja2JveC1ncm91cC1oZWFkZXIge1xuICAgICAgICAgICAgICAgICYgLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5tY2stY2hlY2tib3gtZ3JvdXAtY2hpbGQge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAkc3BhY2luZy1sYXJnZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbWF0LWNoZWNrYm94IHtcbiAgICAgICAgICAgICAgICBsYWJlbC5tYXQtY2hlY2tib3gtbGF5b3V0IHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDJweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRpdi5tYXQtY2hlY2tib3gtZnJhbWUubWF0LWNoZWNrYm94LWZyYW1lIHtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgbWNrLWNoZWNrYm94LWJvcmRlcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmLm1hdC1jaGVja2JveC1jaGVja2VkIHtcbiAgICAgICAgICAgICAgICAgICAgZGl2Lm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJi5tY2stY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWRpc2FibGVkIHtcbiAgICAgICAgICAgICAgICAgICAgZGl2Lm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJi5tY2stY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWRpc2FibGVkIHtcbiAgICAgICAgICAgICAgICAgICAgJiAubWF0LWNoZWNrYm94LWxhYmVsLm1hdC1jaGVja2JveC1sYWJlbCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBjaGVja2JveC1sYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAkYm9yZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICRzcGFjaW5nLXNtYWxsLW1lZGl1bTtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAkc3BhY2luZy1zbWFsbC1tZWRpdW07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1zZWxlY3Qtb3B0aW9uIHtcbiAgICAgICAgJi1zZWxlY3RlZCB7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xuXG4gICAgICAgICAgICAubWNrLXNwYWNlci1jb250ZW50IHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6ICRzcGFjaW5nLXhzbWFsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtdW5zZWxlY3RlZCB7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG5cbiAgICAgICAgICAgICYubWNrLWlnbm9yZS1kaXNhYmxlZCB7XG4gICAgICAgICAgICAgICAgY29sb3I6IGJsYWNrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWNrLXNwYWNlci1jb250ZW50IHtcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAkc3BhY2luZy14c21hbGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWJ1dHRvbiB7XG4gICAgICAgICYubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLCAmLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ge1xuICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgICAgIEBleHRlbmQgLm1jay1jb2x1bW47XG4gICAgICAgICAgICBAZXh0ZW5kIC5tY2stY2VudGVyO1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG5cbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYgPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctc21hbGxlc3Q7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctc21hbGxlc3Q7XG4gICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG5cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYubWNrLXNob3J0IHtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgbWluLXdpZHRoOiA4M3B4O1xuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMTU1cHg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gc29tZSBjYXNlcyBidXR0b25zIGluIGRlc2t0b3AgYXJlIDQwIHZzIDQ4cHhcbiAgICAgICAgICAgICAgICAmLm1jay1zaG9ydC1oZWlnaHQge1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYubWNrLXNxdWFyZSB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgICAgICAgICAgIHdpZHRoOiAzMnB4O1xuICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMzJweDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogNDBweDtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtcHJpbWFyeS1idXR0b24ge1xuICAgICAgICBAZXh0ZW5kIC5tY2stYnV0dG9uO1xuXG4gICAgICAgICYubWF0LWJ1dHRvbi5tYXQtYnV0dG9uIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5O1xuXG4gICAgICAgICAgICAmW2Rpc2FibGVkXSwgJi5kaXNhYmxlZCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgICAgICAgICAgICAgY29sb3I6ICM3NTc1NzU7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcblxuICAgICAgICAgICAgICAgICYgPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjNzU3NTc1O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXNlY29uZGFyeS1idXR0b24ge1xuICAgICAgICBAZXh0ZW5kIC5tY2stYnV0dG9uO1xuXG4gICAgICAgICYubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiB7XG4gICAgICAgICAgICBAaW5jbHVkZSBtY2stdGhpbi1idXR0b24tYm9yZGVyO1xuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzIyNTFGRjtcbiAgICAgICAgICAgIGNvbG9yOiAjMjI1MUZGO1xuICAgICAgICAgICAgJltkaXNhYmxlZF0sICYuZGlzYWJsZWQge1xuICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgICAgICAgICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLm1hdC1idXR0b24ubWF0LWJ1dHRvbiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcblxuICAgICAgICAgICAgJiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogJGNoaXAtY29sb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXdhcm5pbmctYnV0dG9uIHtcbiAgICAgICAgQGV4dGVuZCAubWNrLWJ1dHRvbjtcblxuICAgICAgICAmLm1hdC1idXR0b24ubWF0LWJ1dHRvbiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3ItYnJhbmQteWVsbG93O1xuXG4gICAgICAgICAgICAmID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgIGNvbG9yOiBibGFjaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtc3Ryb2tlZC1idXR0b24ge1xuICAgICAgICBAZXh0ZW5kIC5tY2stYnV0dG9uO1xuXG4gICAgICAgICYubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiB7XG4gICAgICAgICAgICBAaW5jbHVkZSBtY2stYnV0dG9uLWJvcmRlcjtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLW1lZGl1bS1sYXJnZTtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLW1lZGl1bS1sYXJnZTtcblxuICAgICAgICAgICAgJi5tY2stc2hvcnQge1xuICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDgzcHg7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbGVzdDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbGVzdDtcblxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0OHB4O1xuICAgICAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDE1NXB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gcHJpbWFyeSBjb2xvcnNcbiAgICAgICAgICAgICYubWNrLXByaW1hcnkge1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMXB4O1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogJHByaW1hcnk7XG4gICAgICAgICAgICAgICAgY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLm1jay10aGluLWJvcmRlci1saWdodCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICAgICAgICAgICAgICBib3JkZXItd2lkdGg6IDFweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYgPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgICAgIGNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtdG9nZ2xlLWJ1dHRvbiB7XG4gICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICAgICAgbWluLXdpZHRoOiA1OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcblxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICBtaW4td2lkdGg6IDEzMnB4O1xuICAgICAgICAgICAgcGFkZGluZy10b3A6ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgfVxuXG4gICAgICAgICYtc2VsZWN0ZWQge1xuICAgICAgICAgICAgY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1kYXRlLXBpY2tlciB7XG4gICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xuXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgIG1heC13aWR0aDogMjNyZW07XG4gICAgICAgIH1cblxuICAgICAgICAmID4gLmhlYWRlci5oZWFkZXIge1xuICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICBjb2xvcjogJGZvcm0tbGFiZWw7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAkc3BhY2luZy1zbWFsbC1tZWRpdW07XG5cbiAgICAgICAgICAgICYgPiAuYXJyb3cuYXJyb3cge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAyLjM3NXJlbTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDJyZW07XG5cbiAgICAgICAgICAgICAgICAmID4gLmljb24uaWNvbiB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxcmVtO1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDFyZW07XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAmID4gLm5leHQubmV4dCB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnbGlicy91aS9zcmMvbGliL2ljb25zL2Fycm93LWZvcndhcmQuc3ZnJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJiA+IC5wcmV2aW91cy5wcmV2aW91cyB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnbGlicy91aS9zcmMvbGliL2ljb25zL2Fycm93LWJhY2t3YXJkLnN2ZycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgIH1cblxuICAgICAgICAmID4gLm1vbnRoIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICB9XG5cbiAgICAgICAgJiA+IC53ZWVrIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgY29sb3I6ICRzZWNvbmRhcnktbGFiZWw7XG4gICAgICAgIH1cblxuICAgICAgICAmID4gLmJvZHkge1xuICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcblxuICAgICAgICAgICAgJiA+IGRpdiA+IGRpdi5kYXRlIHtcbiAgICAgICAgICAgICAgICAmID4gLmRvdCB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJi5kaXNhYmxlZCB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJHNlY29uZGFyeS1sYWJlbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmLmFjdGl2ZSB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICYubm9uLW1vbnRoIHtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICRzZWNvbmRhcnktbGFiZWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1zcGFjZXItY29udGVudCB7XG4gICAgICAgICYtY29sbGFwc2UtdGFibGV0IHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZSh0YWJsZXQpIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1leHBhbmQtbW9iaWxlIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1kaXZpZGVyIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWV4cGFuc2lvbi1wYW5lbCB7XG4gICAgICAgICYubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIG1hdC1lbGV2YXRpb24oMCk7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICRzZWxlY3RlZC1vcHRpb247XG4gICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHNlbGVjdGVkLW9wdGlvbjtcblxuICAgICAgICAgICAgJi5tY2stZXhwYW5kZWQge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWNvbG9yO1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG5cbiAgICAgICAgICAgICAgICAmIC5tY2stY29sbGFwc2UtaWNvbiB7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICdjaGV2cm9uLWNsb3NlLnN2ZycpO1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBtY2staWNvbig0OHB4LCAnY2hldnJvbi1jbG9zZS1sYXJnZS5zdmcnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1hdC1leHBhbnNpb24tcGFuZWwtYm9keSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG5cbiAgICAgICAgICAgICAgICAmID4gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIHtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgYm9keS10aW55O1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbDtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYgbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xuXG4gICAgICAgICAgICAmID4gc3Bhbi5tYXQtY29udGVudCB7XG4gICAgICAgICAgICAgICAgLy8gY2VudGVyIHRleHQgYW5kIGljb25zXG4gICAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYgbWF0LXBhbmVsLXRpdGxlIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICAgICAgY29sb3I6IGJsYWNrO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5tY2stY29sbGFwc2UtaWNvbiB7XG4gICAgICAgICAgICBAaW5jbHVkZSBtY2staWNvbigyNHB4LCAnY2hldnJvbi1vcGVuLnN2ZycpO1xuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDQ4cHgsICdjaGV2cm9uLW9wZW4tbGFyZ2Uuc3ZnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICAgICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjVzIGVhc2U7XG4gICAgICAgICAgICAmLmV4cGFuZGVkIHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1pY29uLWZpbGwtb3BlbiB7XG4gICAgICAgIGZpbGw6ICRwcmltYXJ5O1xuICAgIH1cblxuICAgICYtaWNvbi1maWxsLWNsb3NlIHtcbiAgICAgICAgZmlsbDogJHNlY29uZGFyeS1sYWJlbDtcbiAgICB9XG5cbiAgICAmLWljb24tZmlsbC1ibGFjayB7XG4gICAgICAgIGZpbGw6IGJsYWNrO1xuICAgICAgICBzdHJva2U6IGJsYWNrO1xuICAgIH1cblxuICAgICYtaWNvbi1maWxsLXdoaXRlIHtcbiAgICAgICAgZmlsbDogd2hpdGU7XG4gICAgICAgIHN0cm9rZTogd2hpdGU7XG4gICAgfVxuXG4gICAgJi1pY29uLWZpbGwtZ3JheSB7XG4gICAgICAgIGZpbGw6ICMzMzMzMzM7XG4gICAgICAgIHN0cm9rZTogIzMzMzMzMztcbiAgICB9XG5cbiAgICAmLW1pbiB7XG4gICAgICAgIG1heC13aWR0aDogNTgxcHggIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDgwdnc7XG4gICAgICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIG1vZGFsIGludG8gYSBtb3JlICdmdWxsLXNjcmVlbicgYXBwZWFyYW5jZSBvbiBtb2JpbGUuXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG5cbiAgICAgICAgICAgIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1ub2V4cGFuZCB7XG4gICAgICAgIG1heC13aWR0aDogNTgxcHggIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDgwdncgIWltcG9ydGFudDtcbiAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgbW9kYWwgaW50byBhIG1vcmUgJ2Z1bGwtc2NyZWVuJyBhcHBlYXJhbmNlIG9uIG1vYmlsZS5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICB3aWR0aDogY2FsYygxMDB2dyAtIDMycHgpICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtbW9kYWwge1xuICAgICAgICBtYXgtd2lkdGg6IDgwMHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIHdpZHRoOiA4MHZ3O1xuICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBtb2RhbCBpbnRvIGEgbW9yZSAnZnVsbC1zY3JlZW4nIGFwcGVhcmFuY2Ugb24gbW9iaWxlLlxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDB2dztcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuXG4gICAgICAgICAgICAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtbW9kYWwtbWluaSB7XG4gICAgICAgIG1heC13aWR0aDogNTgwcHggIWltcG9ydGFudDtcbiAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgbW9kYWwgaW50byBhIG1vcmUgJ2Z1bGwtc2NyZWVuJyBhcHBlYXJhbmNlIG9uIG1vYmlsZS5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICB3aWR0aDogMTAwdnc7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcblxuICAgICAgICAgICAgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLW1vZGFsLXN1cnZleSB7XG4gICAgICAgIG1heC13aWR0aDogNjkxcHggIWltcG9ydGFudDtcbiAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgbW9kYWwgaW50byBhIG1vcmUgJ2Z1bGwtc2NyZWVuJyBhcHBlYXJhbmNlIG9uIG1vYmlsZS5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtbW9kYWwtd2lkZSB7XG4gICAgICAgIG1heC13aWR0aDogMTAyNHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIHdpZHRoOiAxMDB2dztcbiAgICAgICAgaGVpZ2h0OiA5NXZoO1xuICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuICAgICAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgIC5tYXQtaWNvbi1idXR0b25bbmFtZT1cIkNsb3NlQnV0dG9uXCJdIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgcmlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIC5jbG9zZS1pbWFnZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMzJweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIG1vZGFsIGludG8gYSBtb3JlICdmdWxsLXNjcmVlbicgYXBwZWFyYW5jZSBvbiBtb2JpbGUuXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgICAgICAgICAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgJi1tb2RhbC13aWRlLW1hbmFnZS1ib29raW5nIHtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDI0cHggIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgICAvLyBoZWlnaHQ6IDk1dmg7XG4gICAgICAgIG1heC1oZWlnaHQ6IDk1dmg7XG4gICAgICAgIC5tYXQtZGlhbG9nLWNvbnRlbnQge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Y4RjlGQTtcbiAgICAgICAgICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAubWF0LWljb24tYnV0dG9uW25hbWU9XCJDbG9zZUJ1dHRvblwiXSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIHJpZ2h0OiAzMnB4O1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAuY2xvc2UtaW1hZ2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMycHg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBtb2RhbCBpbnRvIGEgbW9yZSAnZnVsbC1zY3JlZW4nIGFwcGVhcmFuY2Ugb24gbW9iaWxlLlxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDB2dztcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICAgICAgICAgICAgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgICYtYWxlcnQge1xuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIG1heC13aWR0aDogMTAwdncgIWltcG9ydGFudDtcbiAgICAgICAgICAgIHdpZHRoOiAxMDB2dztcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHNwYWNpbmctc21hbGw7XG4gICAgICAgIH1cblxuICAgICAgICAmLWJhY2tkcm9wIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICRhbGVydC1vdmVybGF5LWJnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1zbGlkZS10b2dnbGUge1xuICAgICAgICAmLm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQ6bm90KC5tYXQtZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICYgLm1hdC1zbGlkZS10b2dnbGUtYmFyLm1hdC1zbGlkZS10b2dnbGUtYmFyIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeS1oaWdobGlnaHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIubWF0LXNsaWRlLXRvZ2dsZS10aHVtYiB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLm1hdC1zbGlkZS10b2dnbGUge1xuICAgICAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICB9XG5cbiAgICAgICAgLm1hdC1zbGlkZS10b2dnbGUtY29udGVudC5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnQge1xuICAgICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICAgICAgQGluY2x1ZGUgbWF4LWxpbmVzKDIpO1xuICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIge1xuICAgICAgICAgICAgd2lkdGg6IDE0cHg7XG4gICAgICAgICAgICBoZWlnaHQ6IDE0cHg7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg1MCUsIDUwJSk7XG4gICAgICAgIH1cblxuICAgICAgICAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXIubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXIge1xuICAgICAgICAgICAgdG9wOiAtNHB4O1xuICAgICAgICAgICAgbGVmdDogLTRweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5tYXQtc2xpZGUtdG9nZ2xlLWJhci5tYXQtc2xpZGUtdG9nZ2xlLWJhciB7XG4gICAgICAgICAgICBoZWlnaHQ6IDIwcHg7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXNrZWxldG9uIHtcbiAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG5cbiAgICAgICAgJi1jaGVja2JveCB7XG4gICAgICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgICAgICAgICAgIGhlaWdodDogMjBweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1oZWFkZXIgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgIHdpZHRoOiAxMDB2dztcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDIxNXB4O1xuICAgICAgICB9XG5cbiAgICAgICAgJi1pbWFnZSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgQGluY2x1ZGUgcGxhY2Vob2xkZXItaW1hZ2Utc2l6ZTtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgIH1cblxuICAgICAgICAmLXN0YXR1cyA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgQGluY2x1ZGUgcGxhY2Vob2xkZXItc3RhdHVzLXNpemU7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS0xID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICBoZWlnaHQ6IDIzcHg7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDE3NnB4O1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAyMTlweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS0yID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDE2NXB4O1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAxODlweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS0zID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDE0N3B4O1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAxODlweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS0zMHAsICYtbGluZS0zMHAtdGhpbiB7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAzMCU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDMwJTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLXRoaW4ge1xuICAgICAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWxpbmUtNDVwLCAmLWxpbmUtNDVwLXRoaW4ge1xuICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogNDUlO1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA0NSU7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNDUlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYtdGhpbiB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS01MHAsICYtbGluZS01MHAtdGhpbiwgJi1saW5lLTUwcC10aGljayB7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA1MCU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDUwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiA0NSU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGluIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGljayB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS02MHAsICYtbGluZS02MHAtdGhpbiwgJi1saW5lLTYwcC10aGljayB7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA2MCU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDYwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAzNSU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGluIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGljayB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS03MHAsICYtbGluZS03MHAtdGhpbiwgJi1saW5lLTcwcC10aGljayB7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA3MCU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDcwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAyNSU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGluIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGljayB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS04MHAsICYtbGluZS04MHAtdGhpbiwgJi1saW5lLTgwcC10aGljayB7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA4MCU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDgwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNSU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGluIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGljayB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbGluZS05MHAsICYtbGluZS05MHAtdGhpbiB7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA5MCU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDkwJTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLXRoaW4ge1xuICAgICAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWxvYWQtbW9yZSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgICAgICB3aWR0aDogY2FsYygxMDB2dyAtICgyICogI3skc3BhY2luZy1zbWFsbH0pKTtcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcblxuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMzIwcHg7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA1MHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1sb2FkLW1vcmUtMTAwcCwgJi1oZWFkZXIsICYtcm9vbS1hdmFpbGFiaWxpdHkge1xuICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICAgICAgICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gKDIgKiAjeyRzcGFjaW5nLXNtYWxsfSkpO1xuICAgICAgICAgICAgICAgIGhlaWdodDogNDBweDtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IG5vbmU7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IG5vbmU7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDUwcHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICYtcm9vbS1hdmFpbGFiaWxpdHkge1xuICAgICAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTI0cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuXG4gICAgfVxufVxuXG5cbi5tY2sge1xuICAgICYtaGVhZGluZy01IHtcbiAgICAgICAgQGluY2x1ZGUgaGVhZGluZy01O1xuICAgIH1cbn1cblxubmd4LW1hdC1zZWxlY3Qtc2VhcmNoIHtcbiAgICAubWF0LXNlbGVjdC1zZWFyY2gtbm8tZW50cmllcy1mb3VuZCB7XG4gICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgfVxuXG4gICAgLm1hdC1zZWxlY3Qtc2VhcmNoLWlucHV0IHtcbiAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICB9XG5cbiAgICBidXR0b24ubWF0LWJ1dHRvbi5tYXQtc2VsZWN0LXNlYXJjaC1jbGVhciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIGNvbG9yOiBibGFjaztcbiAgICB9XG59XG5cbjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgIHdpZHRoOiAxNnB4O1xuICAgIGhlaWdodDogMThweDtcbn1cbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICAgIGhlaWdodDogJHNwYWNpbmctbWVkaXVtO1xuICAgIGJvcmRlcjogNHB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMCk7XG4gICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHNjcm9sbGJhci1jb2xvcjtcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IC0xcHggLTFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjA1KSwgaW5zZXQgMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cbjo6LXdlYmtpdC1zY3JvbGxiYXItYnV0dG9uIHtcbiAgICB3aWR0aDogMDtcbiAgICBoZWlnaHQ6IDA7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cbjo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cbmhlYWRlciB7XG4gICAgei1pbmRleDogMjtcbn1cbi5tYi1ibG9jayB7XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbn1cbi5tYi1ib3R0b20ge1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTEwcHg7XG4gICAgfVxufVxuXG4ubWFwLWZpbHRlcnMtY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgICAgdG9wOiA1cHg7XG4gICAgfVxuICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le1xuICAgICAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICAgIHBhZGRpbmctdG9wOiAkc3BhY2luZy14eHNtYWxsICFpbXBvcnRhbnQ7XG4gICAgfVxufVxuXG4ub2ZmaWNlLWxldmVsLXJvd3tcblxuICAgIC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye1xuICAgICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgfVxuXG4gICAgLmxlZ2VuZC1jb250YWluZXIgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgaGVpZ2h0OiA0NXB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuc2VsZWN0LWRpdmlkZXJ7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB0b3A6IDAgIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDQ0cHggIWltcG9ydGFudDtcbiAgICAgICAgcmlnaHQ6IC0xMXB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICAgIGJvcmRlci13aWR0aDogMCAwIDAgMXB4O1xuICAgICAgICBib3JkZXItY29sb3I6ICNjNmM2YzY7XG4gICAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gMXB4KSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmRpc2FibGVke1xuICAgICAgICAuc2VsZWN0LWRpdmlkZXJ7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjBGMEYwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAycHgpICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLnNlbGVjdC1jaGV2cm9ue1xuICAgICAgICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5vZmZpY2UtbGV2ZWwtcm93LCAubWFwLWNvbnRyb2xze1xuICAgIC5sZWdlbmQtY29udGFpbmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XG4gICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50O1xuICAgIH1cbn1cblxuLmJvb2tpbmctZm9ybS1jb250YWluZXIge1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDM0NXB4KTtcbn1cbi5ib29raW5nLWZvcm0tY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dHtcblxuICAgIG1hdC1zZWxlY3Qge1xuICAgICAgICAmIC5tYXQtc2VsZWN0LXZhbHVlID4gLm1hdC1zZWxlY3QtdmFsdWUtdGV4dCA+IHNwYW4ge1xuICAgICAgICAgICAgLy8gY29sb3I6ICMwNTFjMmMgIWltcG9ydGFudDsgLy9SLS0tIGJsb2NrcyBkaXNhYmxlZCBzdGF0ZSBjb2xvclxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbWF0LWxhYmVsLCAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnQge1xuICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucyAhaW1wb3J0YW50O1xuICAgICAgICBjb2xvcjogIzMzMzMzMztcbiAgICB9XG5cbiAgICBpbnB1dCwgaW5wdXQ6OnBsYWNlaG9sZGVye1xuICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICAgICAgY29sb3I6ICNCM0IzQjM7XG4gICAgfVxufSIsIkBpbXBvcnQgXCJsaWJzL3VpL3NyYy9saWIvc3R5bGVzXCI7XG5cbmZvcm0ge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICBwYWRkaW5nOiAwIDEwcHg7XG4gICAgfVxufVxuXG4ubWNrLXJvdy1mbG93IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgID5kaXYge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBtaW4td2lkdGg6IDE4MHB4O1xuICAgICAgICBmbGV4LWZsb3c6IGNvbHVtbjtcbiAgICB9XG4gICAgPmRpdjpudGgtY2hpbGQoMikge1xuICAgICAgICBtYXJnaW4tbGVmdDogMjBweDtcbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmNvbXBhbnktY29udGFpbmVye1xuICAgID5kaXY6bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDBweDtcbiAgICB9XG59XG5cbi5yb3ctd2l0aC1zcGFjaW5nIHtcbiAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy1tZWRpdW07XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgbGFiZWwge1xuICAgICAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICB9XG4gICAgcCB7XG4gICAgICAgIGNvbG9yOiAjZTEyZTQxO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICYuY2hlY2tpbmcge1xuICAgICAgICAgICAgY29sb3I6ICMwMDAwMDA7XG4gICAgICAgIH1cbiAgICAgICAgJi5hdmFpbGFibGUge1xuICAgICAgICAgICAgY29sb3I6ICMzYWE1Mzc7XG4gICAgICAgIH1cbiAgICAgICAgJi5zYi1zdGF0dXMge1xuICAgICAgICAgICAgcGFkZGluZzogMCAxMHB4IDAgMzRweDtcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgIGltZyB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIHRvcDogNHB4O1xuICAgICAgICAgICAgICAgIGxlZnQ6IDRweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmZsZXgtcm93e1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxZW07XG4gICAgICAgID4gZGl2IHtcbiAgICAgICAgICAgIHdpZHRoOiA0NyU7XG4gICAgICAgICAgICBtaW4td2lkdGg6IDQwJTtcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgICBmbGV4OiBub25lO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNvbXBhbnktZmllbGR7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmF0dGVuZGVlcy1pbnB1dCB7XG4gICAgbWFyZ2luLXJpZ2h0OiAxZW07XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG5cbm1hdC1oaW50IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgc3BhbiB7XG4gICAgICAgIGNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgZm9udC1zaXplOiAxMXB4O1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgIH1cbiAgICAuaGludCB7XG4gICAgICAgIHdpZHRoOiA0MjlweDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG4gICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBwYWRkaW5nOiAxMHB4O1xuICAgICAgICB0b3A6IDI2cHg7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIH1cbiAgICAgICAgLnRyaWFuZ2xlIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHRvcDogLTZweDtcbiAgICAgICAgICAgIGxlZnQ6IDEycHg7XG4gICAgICAgICAgICB3aWR0aDogMTJweDtcbiAgICAgICAgICAgIGhlaWdodDogMTJweDtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4ubWNrLWZvcm0taW5wdXQge1xuICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tdG9wOiAxLjI1ZW07XG4gICAgbWFyZ2luLXJpZ2h0OiAxZW07XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAuNWVtO1xuICAgIHNwYW4ge1xuICAgICAgICBjb2xvcjogI2QxNDg0ZjsvLyRwZW5kaW5nO1xuICAgIH1cbiAgICAmLmVycm9yIHtcbiAgICAgICAgY29sb3I6ICRlcnJvcjtcbiAgICB9XG59XG5cbm1hdC1mb3JtLWZpZWxkIHtcbiAgICBmbGV4OiAxO1xuXG4gICAgJi5ib29rZWR7XG4gICAgICAgIGNvbG9yOiAjZDE0ODRmO1xuICAgIH1cblxuICAgICYuYXZhaWxhYmxle1xuICAgICAgICBjb2xvcjogIzNhYTUzNztcbiAgICB9XG4gICAgaW5wdXQge1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgIHBhZGRpbmctdG9wOiA4cHg7XG4gICAgfVxuICAgIG1hdC1lcnJvciB7XG4gICAgICAgIHBhZGRpbmctdG9wOiAxMnB4O1xuICAgICAgICBmb250LXNpemU6IDExcHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgICBzcGFuIHtcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgICAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgbGVmdDogMTBweDtcbiAgICAgICAgICAgIHRvcDogMnB4O1xuICAgICAgICB9XG4gICAgICAgIC5lcnJvci1pY29uIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIGxlZnQ6IC0xMnB4O1xuICAgICAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oJGljb24tc21hbGwsICRhc3NldDogJ2Vycm9yLWNsb3NlLnN2ZycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmljb24ge1xuICAgICAgICB3aWR0aDogOHB4O1xuICAgIH1cbn1cblxubWF0LXRhYiB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4uZmllbGQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgbWluLXdpZHRoOiAxNGVtO1xuICAgIGZsZXg6IDE7XG4gICAgZmxleC13cmFwOiB3cmFwO1xufVxuXG50ZXh0YXJlYSB7XG4gICAgbWluLWhlaWdodDogN2VtO1xufVxuXG4uZmllbGRzZXQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuXG4gICAgLmZpZWxkIHtcbiAgICAgICAgbWFyZ2luOiAwIC4yNWVtO1xuXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5lcnJvciB7XG4gICAgY29sb3I6ICRlcnJvcjtcbn1cblxuLmZsZXgtY29udGFpbmVye1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAuZnVsbC13aWR0aHtcbiAgICAgICAgICAgIG1pbi13aWR0aDogY2FsYygxMDAlIC0gMWVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG1hdC1mb3JtLWZpZWxkIHtcbiAgICAgICAgOjpuZy1kZWVwIHtcbiAgICAgICAgICAgIGRpdiBkaXYge1xuICAgICAgICAgICAgICAgIGhlaWdodDogNDdweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ== */"] + styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n.mck-inherit-font[_ngcontent-%COMP%] {\n font: inherit;\n}\n.mck-content-expand[_ngcontent-%COMP%], .mck-content-page[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n}\n.mck-content-expand-width[_ngcontent-%COMP%] {\n width: 100%;\n}\n.mck-content-expand-height[_ngcontent-%COMP%] {\n height: 100%;\n}\n.mck-content-with-footer-height[_ngcontent-%COMP%] {\n height: calc(100vh - 58px);\n}\n.mck-content-full-height[_ngcontent-%COMP%], .mck-content-page-container[_ngcontent-%COMP%] {\n height: 100vh;\n}\n.mck-content-page[_ngcontent-%COMP%] {\n background: #F8F9FA;\n}\n.mck-content-body[_ngcontent-%COMP%] {\n width: 100%;\n display: block;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-content-body[_ngcontent-%COMP%] {\n max-width: 1024px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-content-body[_ngcontent-%COMP%] {\n max-width: 1024px;\n }\n}\n.mck-content-group[_ngcontent-%COMP%] {\n padding-left: 1rem;\n padding-right: 1rem;\n width: 100%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-content-group[_ngcontent-%COMP%] {\n max-width: 759px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-content-group[_ngcontent-%COMP%] {\n max-width: 759px;\n }\n}\n.mck-shadow[_ngcontent-%COMP%] {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n}\n.mck-flex-1[_ngcontent-%COMP%] {\n flex: 1;\n}\n.mck-row[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .mck-row-flow[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n}\n.mck-row.mck-center-justify[_ngcontent-%COMP%], .mck-center-justify.mck-row-flow[_ngcontent-%COMP%], .mck-row.mck-center[_ngcontent-%COMP%], .mck-row.mck-button.mat-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .mck-center.mck-row-flow[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: center;\n}\n.mck-row.mck-center-align[_ngcontent-%COMP%], .mck-center-align.mck-row-flow[_ngcontent-%COMP%], .mck-row.mck-center[_ngcontent-%COMP%], .mck-row.mck-button.mat-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .mck-center.mck-row-flow[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-row-flow.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-row-flow.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n align-items: center;\n}\n.mck-row.mck-stretch[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mck-stretch.mat-form-field-infix[_ngcontent-%COMP%], .mck-stretch.mck-row-flow[_ngcontent-%COMP%] {\n align-items: stretch;\n}\n.mck-row-flow[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n}\n.mck-row.mck-scroll[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mck-scroll.mat-form-field-infix[_ngcontent-%COMP%], .mck-scroll.mck-row-flow[_ngcontent-%COMP%] {\n overflow-x: scroll;\n}\n.mck-column[_ngcontent-%COMP%], .mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n.mck-column.mck-center[_ngcontent-%COMP%], .mck-column.mck-button.mat-button[_ngcontent-%COMP%], .mck-column.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-column.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-column.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-column.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-column.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-column.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-center.mck-button.mat-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-center.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-button[_ngcontent-%COMP%], .mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-button.mat-stroked-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-center.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-center.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mck-column.mat-form-field-infix[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mck-button.mat-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-center-suffix[_ngcontent-%COMP%] .mat-form-field-infix.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: center;\n align-items: center;\n}\n.mck-column.mck-space-between[_ngcontent-%COMP%], .mck-space-between.mck-button.mat-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-space-between.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-space-between.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-space-between.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: space-between;\n}\n.mck-column.mck-stretch[_ngcontent-%COMP%], .mck-stretch.mck-button.mat-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-stretch.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-stretch.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-stretch.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n align-items: stretch;\n}\n.mck-column.mck-scroll[_ngcontent-%COMP%], .mck-scroll.mck-button.mat-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-scroll.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-scroll.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-scroll.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n overflow-y: scroll;\n overflow-y: overlay;\n}\n.mck-column.mck-flex-end[_ngcontent-%COMP%], .mck-flex-end.mck-button.mat-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-warning-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mck-flex-end.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-flex-end.mck-button.mat-stroked-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mck-flex-end.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n justify-content: flex-end;\n}\n.mck-overflow[_ngcontent-%COMP%] {\n overflow: auto;\n}\n.mck-bordered[_ngcontent-%COMP%], .mck-input[_ngcontent-%COMP%] {\n border-radius: 0;\n border: 1px solid #B3B3B3;\n}\n.mck-bordered[_ngcontent-%COMP%]:hover, .mck-input[_ngcontent-%COMP%]:hover {\n border-color: #464646;\n}\n.mck-bordered[_ngcontent-%COMP%]:focus, .mck-input[_ngcontent-%COMP%]:focus {\n border-color: #1F40E6;\n}\n.mck-bordered[disabled=true][_ngcontent-%COMP%], .mck-input[disabled=true][_ngcontent-%COMP%] {\n pointer-events: none;\n border-color: #f0f0f0;\n color: #ccc;\n}\n.mck-date-display[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n height: 43px;\n padding: 1rem 0.5rem;\n transition: border 200ms, box-shadow 200ms;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-form-field-wrapper[_ngcontent-%COMP%] {\n padding-bottom: 0.5rem;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] {\n min-width: auto !important;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n width: 100%;\n padding-top: 0.7rem !important;\n padding-bottom: 0.5rem !important;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] {\n min-height: 2.7rem;\n color: rgba(0, 0, 0, 0.27);\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n margin-top: 2px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-flex[_ngcontent-%COMP%] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-flex[_ngcontent-%COMP%] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 2rem;\n min-height: 2rem;\n }\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 2rem;\n min-height: 2rem;\n }\n .mck-form-input[_ngcontent-%COMP%] mat-form-field.mck-select-dropdown-button[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n}\n.mck-form-input[_ngcontent-%COMP%] mat-form-field.mat-s[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-select[_ngcontent-%COMP%] {\n margin-top: 0.2rem;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-select[_ngcontent-%COMP%] .mat-select-arrow[_ngcontent-%COMP%] {\n visibility: hidden;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-select[_ngcontent-%COMP%] .mat-select-value[_ngcontent-%COMP%] > .mat-select-value-text[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 400;\n font-family: \"McKinsey Sans\";\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #B3B3B3;\n border-width: 1px;\n border-radius: 0;\n}\n.mck-form-input[_ngcontent-%COMP%] .available[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .available[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .available[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #3aa537;\n}\n.mck-form-input[_ngcontent-%COMP%] .booked[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .booked[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .booked[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #e12e41;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline-thick[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline-thick[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] .mat-form-field-outline-thick[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #1F40E6;\n border-width: 1px;\n border-radius: 0;\n}\n.mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-wrapper[_ngcontent-%COMP%] {\n padding-bottom: 0;\n}\n.mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-start.mat-form-field-outline-start[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-gap.mat-form-field-outline-gap[_ngcontent-%COMP%], .mck-form-input[_ngcontent-%COMP%] > mat-form-field.mck-error[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] > .mat-form-field-outline-end.mat-form-field-outline-end[_ngcontent-%COMP%] {\n border-color: #E12E40;\n}\n.mck-form-input[_ngcontent-%COMP%] mck-close-icon.mat-chip-remove.mat-chip-remove[_ngcontent-%COMP%] {\n opacity: 1;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-label[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 400;\n text-align: left;\n margin-bottom: 0.5rem;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-radio-button[_ngcontent-%COMP%] {\n margin-right: 1rem;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-radio-label-content[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-radio-outer-circle[_ngcontent-%COMP%] {\n border-color: #1F40E6 !important;\n border-width: 1px !important;\n}\n.mck-form-input[_ngcontent-%COMP%] .mat-radio-inner-circle[_ngcontent-%COMP%] {\n background-color: #1F40E6 !important;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-radio-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-radio-group[_ngcontent-%COMP%] > mat-radio-button[_ngcontent-%COMP%]:last-child {\n margin-right: 0;\n}\n.mck-form-input-container[_ngcontent-%COMP%] > .mck-form-input[_ngcontent-%COMP%], .mck-form-input-container[_ngcontent-%COMP%] > mck-select[_ngcontent-%COMP%] {\n margin-bottom: 0.5rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-form-input-container[_ngcontent-%COMP%] > .mck-form-input[_ngcontent-%COMP%], .mck-form-input-container[_ngcontent-%COMP%] > mck-select[_ngcontent-%COMP%] {\n margin-bottom: 1.75rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-form-input-container[_ngcontent-%COMP%] > .mck-form-input[_ngcontent-%COMP%], .mck-form-input-container[_ngcontent-%COMP%] > mck-select[_ngcontent-%COMP%] {\n margin-bottom: 1.75rem;\n }\n}\n.mck-form-input-container[_ngcontent-%COMP%] .mck-radio-select[_ngcontent-%COMP%] {\n margin-bottom: 1rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-form-input-container[_ngcontent-%COMP%] .mck-radio-select[_ngcontent-%COMP%] {\n margin-bottom: 1.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-form-input-container[_ngcontent-%COMP%] .mck-radio-select[_ngcontent-%COMP%] {\n margin-bottom: 1.5rem;\n }\n}\n.mck-form-input[_ngcontent-%COMP%] mat-chip.mat-standard-chip.mat-standard-chip[_ngcontent-%COMP%] {\n border-radius: 3px;\n min-height: 1.5rem;\n background-color: #333333;\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 0.75rem;\n line-height: 1.5rem;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input[_ngcontent-%COMP%] mat-chip.mat-standard-chip.mat-standard-chip[_ngcontent-%COMP%] {\n line-height: inherit;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input[_ngcontent-%COMP%] mat-chip.mat-standard-chip.mat-standard-chip[_ngcontent-%COMP%] {\n line-height: inherit;\n }\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox.mat-checkbox.mat-checkbox[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] {\n background-color: #D0D0D0;\n}\n.mck-form-input[_ngcontent-%COMP%] mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n color: #B3B3B3;\n}\n.mck-borderless[_ngcontent-%COMP%] {\n border: none;\n}\n.mck-borderless[_ngcontent-%COMP%]:hover, .mck-borderless[_ngcontent-%COMP%]:focus, .mck-borderless[_ngcontent-%COMP%]:disabled {\n border: none;\n}\n.mck-select-panel[_ngcontent-%COMP%] {\n margin-top: 0 !important;\n border-radius: unset !important;\n margin-top: 35px !important;\n margin-left: 5px;\n}\n.mck-select-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] {\n padding-left: 0;\n padding-right: 0;\n}\n.mck-select-panel[_ngcontent-%COMP%] mat-option.mat-option-text[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-select-panel.mck-margin-top[_ngcontent-%COMP%] {\n margin-top: 1.5rem !important;\n}\n.mck-checkbox-panel.mat-autocomplete-panel.mat-autocomplete-panel[_ngcontent-%COMP%] {\n top: -10px;\n max-height: 278px;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option.mck-truncated[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] {\n padding-left: 0;\n padding-right: 0;\n line-height: 24px;\n height: unset;\n min-height: 36px;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n flex: 1;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n text-align: left;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option.mck-checkbox-group-header[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option.mck-checkbox-group-child[_ngcontent-%COMP%] {\n margin-left: 2rem;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] label.mat-checkbox-layout[_ngcontent-%COMP%] {\n width: 100%;\n padding-left: 16px;\n padding-right: 16px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] label.mat-checkbox-layout[_ngcontent-%COMP%] {\n padding-left: 2px;\n padding-right: 2px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] label.mat-checkbox-layout[_ngcontent-%COMP%] {\n padding-left: 2px;\n padding-right: 2px;\n }\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] div.mat-checkbox-frame.mat-checkbox-frame[_ngcontent-%COMP%] {\n border: 1px solid #B3B3B3;\n border-radius: 0;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox.mat-checkbox-checked[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] div.mat-checkbox-background.mat-checkbox-background[_ngcontent-%COMP%] {\n background-color: #D0D0D0;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled[_ngcontent-%COMP%] .mat-checkbox-label.mat-checkbox-label[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n color: #B3B3B3;\n text-align: left;\n}\n.mck-checkbox-panel[_ngcontent-%COMP%] mat-option[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%] .mat-checkbox-inner-container[_ngcontent-%COMP%] {\n width: 1.25rem;\n height: 1.25rem;\n}\n.mck-select-option-selected[_ngcontent-%COMP%] {\n font-weight: 500;\n font-family: \"McKinsey Sans\";\n color: black;\n background-color: #E6E6E6;\n}\n.mck-select-option-selected[_ngcontent-%COMP%] .mck-spacer-content[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n margin-right: 0.75rem;\n}\n.mck-select-option-unselected[_ngcontent-%COMP%] {\n font-weight: 400;\n font-family: \"McKinsey Sans\";\n}\n.mck-select-option-unselected.mck-ignore-disabled[_ngcontent-%COMP%] {\n color: black;\n}\n.mck-select-option-unselected[_ngcontent-%COMP%] .mck-spacer-content[_ngcontent-%COMP%] {\n visibility: hidden;\n margin-right: 0.75rem;\n}\n.mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n height: 40px;\n border-radius: 0;\n border: none;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n }\n}\n.mck-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: normal;\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-button.mat-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-warning-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-secondary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-primary-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n }\n}\n.mck-button.mat-button.mat-button.mck-short[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button[_ngcontent-%COMP%] {\n height: 32px;\n min-width: 83px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-short[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-short[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%] {\n height: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-short.mck-short-height[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-primary-button[_ngcontent-%COMP%] {\n height: 40px;\n }\n}\n.mck-button.mat-button.mat-button.mck-square[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-square[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n min-width: 32px;\n padding: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-square[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-square[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-square[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-button.mat-button.mck-square.mck-primary-button[_ngcontent-%COMP%], .mck-button.mat-stroked-button.mat-stroked-button.mck-square[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button[_ngcontent-%COMP%], .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n }\n}\n.mck-primary-button.mat-button.mat-button[_ngcontent-%COMP%] {\n background-color: #1F40E6;\n}\n.mck-primary-button.mat-button.mat-button[disabled][_ngcontent-%COMP%], .mck-primary-button.mat-button.mat-button.disabled[_ngcontent-%COMP%] {\n background-color: #D0D0D0;\n color: #757575;\n cursor: not-allowed;\n}\n.mck-primary-button.mat-button.mat-button[disabled][_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%], .mck-primary-button.mat-button.mat-button.disabled[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: #757575;\n}\n.mck-primary-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: white;\n}\n.mck-secondary-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] {\n border: 1px solid #D0D0D0;\n border-radius: 0;\n border: 1px solid #2251FF;\n color: #2251FF;\n}\n.mck-secondary-button.mat-stroked-button.mat-stroked-button[disabled][_ngcontent-%COMP%], .mck-secondary-button.mat-stroked-button.mat-stroked-button.disabled[_ngcontent-%COMP%] {\n border: 1px solid #D0D0D0;\n color: #333333;\n cursor: not-allowed;\n}\n.mck-secondary-button.mat-button.mat-button[_ngcontent-%COMP%] {\n background-color: white;\n}\n.mck-secondary-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: #333333;\n}\n.mck-warning-button.mat-button.mat-button[_ngcontent-%COMP%] {\n background-color: #ffd048;\n}\n.mck-warning-button.mat-button.mat-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n color: black;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button[_ngcontent-%COMP%] {\n border: 2px solid #B3B3B3;\n border-radius: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding-left: 1.75rem;\n padding-right: 1.75rem;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%] {\n height: 32px;\n min-width: 83px;\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short[_ngcontent-%COMP%] {\n height: 48px;\n min-width: 155px;\n }\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-primary[_ngcontent-%COMP%] {\n border-width: 1px;\n border-color: #1F40E6;\n color: #1F40E6;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-thin-border-light[_ngcontent-%COMP%] {\n border-color: #D0D0D0;\n border-width: 1px;\n}\n.mck-stroked-button[_ngcontent-%COMP%] > .mat-button-wrapper.mat-button-wrapper[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: normal;\n color: #1F40E6;\n}\n.mck-toggle-button[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n border: 1px solid #B3B3B3;\n border-color: #D0D0D0;\n min-width: 59px;\n background-color: white;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-toggle-button[_ngcontent-%COMP%] {\n min-width: 132px;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-toggle-button[_ngcontent-%COMP%] {\n min-width: 132px;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n }\n}\n.mck-toggle-button-selected[_ngcontent-%COMP%] {\n color: #1F40E6;\n}\n.mck-date-picker[_ngcontent-%COMP%] {\n width: 100% !important;\n height: 100% !important;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-date-picker[_ngcontent-%COMP%] {\n max-width: 23rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-date-picker[_ngcontent-%COMP%] {\n max-width: 23rem;\n }\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n color: #051C2C;\n margin-top: 1.25rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] {\n width: 2.375rem;\n height: 2rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] > .icon.icon[_ngcontent-%COMP%] {\n width: 1rem;\n height: 1rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] > .next.next[_ngcontent-%COMP%] {\n background-image: url('arrow-forward.svg');\n}\n.mck-date-picker[_ngcontent-%COMP%] > .header.header[_ngcontent-%COMP%] > .arrow.arrow[_ngcontent-%COMP%] > .previous.previous[_ngcontent-%COMP%] {\n background-image: url('arrow-backward.svg');\n}\n.mck-date-picker[_ngcontent-%COMP%] > .month[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .week[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n color: #767676;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date[_ngcontent-%COMP%] > .dot[_ngcontent-%COMP%] {\n display: none;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date.disabled[_ngcontent-%COMP%] {\n background-color: transparent;\n border-radius: 0;\n color: #767676;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date.active[_ngcontent-%COMP%] {\n border-radius: 0;\n background-color: #1F40E6;\n}\n.mck-date-picker[_ngcontent-%COMP%] > .body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] > div.date.non-month[_ngcontent-%COMP%] {\n color: #767676;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .mck-spacer-content-collapse-tablet[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-spacer-content-expand-mobile[_ngcontent-%COMP%] {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-spacer-content-expand-mobile[_ngcontent-%COMP%] {\n display: none;\n }\n}\n.mck-spacer-content-divider[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n border-radius: 0;\n border-top: 1px solid #E6E6E6;\n border-bottom: 1px solid #E6E6E6;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] {\n background-color: #F0F0F0;\n border-bottom: none;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n background-image: url('chevron-close.svg');\n background-size: contain;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-close-large.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-close-large.svg');\n background-size: contain;\n }\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] {\n padding-left: 0;\n padding-right: 0;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 0.75rem;\n line-height: 1.4;\n padding-left: 1rem;\n padding-right: 1rem;\n text-align: left;\n color: black;\n font-weight: normal;\n padding-bottom: 0.5rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-size: 1rem;\n line-height: 1.6;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-size: 1rem;\n line-height: 1.6;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel[_ngcontent-%COMP%] .mat-expansion-panel-body[_ngcontent-%COMP%] > .mat-expansion-panel-header-description.mat-expansion-panel-header-description[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n }\n}\n.mck-expansion-panel[_ngcontent-%COMP%] mat-expansion-panel-header[_ngcontent-%COMP%] {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.mck-expansion-panel[_ngcontent-%COMP%] mat-expansion-panel-header[_ngcontent-%COMP%] > span.mat-content[_ngcontent-%COMP%] {\n align-items: center;\n}\n.mck-expansion-panel[_ngcontent-%COMP%] mat-panel-title[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n color: black;\n font-weight: normal;\n}\n.mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n background-image: url('chevron-open.svg');\n background-size: contain;\n transform: rotate(0deg);\n transition: transform 0.5s ease;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-open-large.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-image: url('chevron-open-large.svg');\n background-size: contain;\n }\n}\n.mck-expansion-panel[_ngcontent-%COMP%] .mck-collapse-icon.expanded[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n}\n.mck-icon-fill-open[_ngcontent-%COMP%] {\n fill: #1F40E6;\n}\n.mck-icon-fill-close[_ngcontent-%COMP%] {\n fill: #767676;\n}\n.mck-icon-fill-black[_ngcontent-%COMP%] {\n fill: black;\n stroke: black;\n}\n.mck-icon-fill-white[_ngcontent-%COMP%] {\n fill: white;\n stroke: white;\n}\n.mck-icon-fill-gray[_ngcontent-%COMP%] {\n fill: #333333;\n stroke: #333333;\n}\n.mck-min[_ngcontent-%COMP%] {\n max-width: 581px !important;\n width: 80vw;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-min[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-min[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-min[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-min[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-noexpand[_ngcontent-%COMP%] {\n max-width: 581px !important;\n width: 80vw !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-noexpand[_ngcontent-%COMP%] {\n width: calc(100vw - 32px) !important;\n max-height: 100vh;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-noexpand[_ngcontent-%COMP%] {\n width: calc(100vw - 32px) !important;\n max-height: 100vh;\n }\n}\n.mck-modal[_ngcontent-%COMP%] {\n max-width: 800px !important;\n width: 80vw;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-mini[_ngcontent-%COMP%] {\n max-width: 580px !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-mini[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-mini[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-mini[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-mini[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-survey[_ngcontent-%COMP%] {\n max-width: 691px !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-survey[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-survey[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-wide[_ngcontent-%COMP%] {\n max-width: 1024px !important;\n width: 100vw;\n height: 95vh;\n max-height: 100vh;\n}\n.mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] {\n background-color: #F8F9FA;\n padding: 0 !important;\n overflow: hidden;\n}\n.mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] {\n position: relative;\n right: 32px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n.mck-modal-wide-manage-booking[_ngcontent-%COMP%] {\n max-width: 1250px !important;\n width: 100vw;\n max-height: 95vh;\n}\n.mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] {\n background-color: #F8F9FA;\n padding: 0 !important;\n overflow: hidden;\n}\n.mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] {\n position: relative;\n right: 32px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%] .mat-icon-button[name=CloseButton][_ngcontent-%COMP%] .close-image[_ngcontent-%COMP%] {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide-manage-booking[_ngcontent-%COMP%] .mat-dialog-container[_ngcontent-%COMP%] {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-alert[_ngcontent-%COMP%] {\n max-width: 100vw !important;\n width: 100vw;\n margin-left: 1rem;\n margin-right: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-alert[_ngcontent-%COMP%] {\n max-width: 100vw !important;\n width: 100vw;\n margin-left: 1rem;\n margin-right: 1rem;\n }\n}\n.mck-alert-backdrop[_ngcontent-%COMP%] {\n background: rgba(5, 28, 44, 0.85);\n}\n.mck-slide-toggle.mat-slide-toggle.mat-checked[_ngcontent-%COMP%]:not(.mat-disabled) .mat-slide-toggle-bar.mat-slide-toggle-bar[_ngcontent-%COMP%] {\n background-color: #2251FF;\n}\n.mck-slide-toggle.mat-slide-toggle.mat-checked[_ngcontent-%COMP%]:not(.mat-disabled) .mat-slide-toggle-thumb.mat-slide-toggle-thumb[_ngcontent-%COMP%] {\n background-color: white;\n}\n.mck-slide-toggle.mat-slide-toggle[_ngcontent-%COMP%] {\n height: auto;\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-content.mat-slide-toggle-content[_ngcontent-%COMP%] {\n flex: 1;\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n white-space: normal;\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-thumb.mat-slide-toggle-thumb[_ngcontent-%COMP%] {\n width: 14px;\n height: 14px;\n transform: translate(50%, 50%);\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-thumb-container.mat-slide-toggle-thumb-container[_ngcontent-%COMP%] {\n top: -4px;\n left: -4px;\n}\n.mck-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-bar.mat-slide-toggle-bar[_ngcontent-%COMP%] {\n height: 20px;\n background-color: #D0D0D0;\n border-radius: 20px;\n}\n.mck-skeleton[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n}\n.mck-skeleton-checkbox[_ngcontent-%COMP%] {\n float: left;\n}\n.mck-skeleton-checkbox[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 20px;\n height: 20px;\n margin-bottom: 0;\n}\n.mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 100vw;\n margin-bottom: 0;\n max-width: 215px;\n}\n.mck-skeleton-image[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 81px;\n height: 82px;\n margin-bottom: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-skeleton-image[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 219px;\n height: 119px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-skeleton-image[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 219px;\n height: 119px;\n }\n}\n.mck-skeleton-status[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n width: 117px;\n height: 78px;\n margin-top: 10px;\n margin-bottom: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-skeleton-status[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 117px;\n height: 78px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-skeleton-status[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n width: 117px;\n height: 78px;\n }\n}\n.mck-skeleton-line-1[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 23px;\n max-width: 176px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-1[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 219px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-1[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 219px;\n }\n}\n.mck-skeleton-line-2[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 165px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-2[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-2[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n.mck-skeleton-line-3[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 147px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-3[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-3[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 189px;\n }\n}\n.mck-skeleton-line-30p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 30%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-30p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 30%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-30p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 30%;\n }\n}\n.mck-skeleton-line-30p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-30p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-45p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 45%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-45p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 45%;\n margin-right: 45%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-45p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 45%;\n margin-right: 45%;\n }\n}\n.mck-skeleton-line-45p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-45p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-50p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 50%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-50p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 50%;\n margin-right: 45%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-50p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 50%;\n margin-right: 45%;\n }\n}\n.mck-skeleton-line-50p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-50p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-50p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-60p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 60%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-60p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 60%;\n margin-right: 35%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-60p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 60%;\n margin-right: 35%;\n }\n}\n.mck-skeleton-line-60p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-60p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-60p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-70p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 70%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-70p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 70%;\n margin-right: 25%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-70p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 70%;\n margin-right: 25%;\n }\n}\n.mck-skeleton-line-70p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-70p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-70p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-80p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 80%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-80p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 80%;\n margin-right: 15%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-80p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 80%;\n margin-right: 15%;\n }\n}\n.mck-skeleton-line-80p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-80p-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thin-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-80p-thick-thick[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-90p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 90%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-90p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 90%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-90p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 90%;\n }\n}\n.mck-skeleton-line-90p-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-line-90p-thin-thin[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-load-more[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n width: calc(100vw - (2 * 1rem));\n height: 40px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-load-more[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 320px;\n height: 50px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-load-more[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: 320px;\n height: 50px;\n }\n}\n.mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n background-color: #E6E6E6;\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n width: calc(100vw - (2 * 1rem));\n height: 40px;\n max-width: none;\n width: 100%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: none;\n width: 100%;\n height: 50px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n max-width: none;\n width: 100%;\n height: 50px;\n }\n}\n.mck-skeleton-load-more-100p[_ngcontent-%COMP%] > .loader.loader-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-header[_ngcontent-%COMP%] > .loader.loader-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%], .mck-skeleton-room-availability[_ngcontent-%COMP%] > .loader.loader-room-availability[_ngcontent-%COMP%] > .loader.loader[_ngcontent-%COMP%] {\n height: 124px;\n margin-bottom: 4px;\n}\n.mck-heading-5[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 1.5rem;\n line-height: 1.333;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-heading-5[_ngcontent-%COMP%] {\n font-size: 1.75rem;\n line-height: 1.142;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-heading-5[_ngcontent-%COMP%] {\n font-size: 1.75rem;\n line-height: 1.142;\n }\n}\nngx-mat-select-search[_ngcontent-%COMP%] .mat-select-search-no-entries-found[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\nngx-mat-select-search[_ngcontent-%COMP%] .mat-select-search-input[_ngcontent-%COMP%] {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\nngx-mat-select-search[_ngcontent-%COMP%] button.mat-button.mat-select-search-clear[_ngcontent-%COMP%] {\n background-color: transparent;\n border: none;\n color: black;\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 16px;\n height: 18px;\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n height: 1.5rem;\n border: 4px solid rgba(0, 0, 0, 0);\n background-clip: padding-box;\n border-radius: 8px;\n background-color: #757575;\n -webkit-box-shadow: inset -1px -1px 0px rgba(0, 0, 0, 0.05), inset 1px 1px 0px rgba(0, 0, 0, 0.05);\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar-button {\n width: 0;\n height: 0;\n display: none;\n}\n[_ngcontent-%COMP%]::-webkit-scrollbar-corner {\n background-color: transparent;\n}\nheader[_ngcontent-%COMP%] {\n z-index: 2;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mb-block[_ngcontent-%COMP%] {\n display: block;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mb-block[_ngcontent-%COMP%] {\n display: block;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mb-bottom[_ngcontent-%COMP%] {\n padding-bottom: 110px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mb-bottom[_ngcontent-%COMP%] {\n padding-bottom: 110px;\n }\n}\n.map-filters-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n top: 5px;\n}\n.map-filters-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%] {\n height: 48px;\n background-color: white;\n}\n.map-filters-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n padding-top: 0.5rem !important;\n}\n.office-level-row[_ngcontent-%COMP%] .mat-select-placeholder[_ngcontent-%COMP%] {\n color: #333333;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .office-level-row[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .office-level-row[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 45px !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .office-level-row[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .office-level-row[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n height: 45px !important;\n }\n}\n.office-level-row[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n display: block;\n top: 0 !important;\n width: 44px !important;\n right: -11px !important;\n background: transparent !important;\n border-width: 0 0 0 1px;\n border-color: #c6c6c6;\n border-style: solid;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .office-level-row[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 1px) !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .office-level-row[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 1px) !important;\n }\n}\n.office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n background: #F0F0F0 !important;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 2px) !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-divider[_ngcontent-%COMP%] {\n height: calc(100% - 2px) !important;\n }\n}\n.office-level-row[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%] .select-chevron[_ngcontent-%COMP%] {\n opacity: 0.5;\n margin-left: 10px;\n}\n.office-level-row[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .office-level-row[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%], .map-controls[_ngcontent-%COMP%] .legend-container[_ngcontent-%COMP%] .mat-form-field-outline[_ngcontent-%COMP%], .map-controls[_ngcontent-%COMP%] .mat-form-field-infix[_ngcontent-%COMP%] {\n display: flex !important;\n width: 100% !important;\n justify-content: space-between !important;\n}\n.booking-form-container[_ngcontent-%COMP%] {\n overflow-y: auto;\n max-height: calc(100vh - 310px);\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-form-container[_ngcontent-%COMP%] {\n max-height: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-form-container[_ngcontent-%COMP%] {\n max-height: none;\n }\n}\n.booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] mat-label[_ngcontent-%COMP%], .booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] .mat-radio-label-content[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\" !important;\n color: #333333;\n}\n.booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::-moz-placeholder {\n font-family: \"McKinsey Sans\";\n color: #B3B3B3;\n}\n.booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%], .booking-form-container[_ngcontent-%COMP%] .mck-form-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder {\n font-family: \"McKinsey Sans\";\n color: #B3B3B3;\n}\nform[_ngcontent-%COMP%] {\n width: 100%;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n form[_ngcontent-%COMP%] {\n padding: 0 10px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n form[_ngcontent-%COMP%] {\n padding: 0 10px;\n }\n}\n.mck-row-flow[_ngcontent-%COMP%] {\n display: flex;\n}\n.mck-row-flow[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 180px;\n flex-flow: column;\n}\n.mck-row-flow[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 20px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-row-flow[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-row-flow[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 0;\n }\n}\n.company-container[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2) {\n margin-left: 0px;\n}\n.row-with-spacing[_ngcontent-%COMP%] {\n margin-bottom: 1.5rem;\n align-items: flex-start;\n}\n.row-with-spacing[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n}\n.row-with-spacing[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n color: #e12e41;\n margin: 0;\n}\n.row-with-spacing[_ngcontent-%COMP%] p.checking[_ngcontent-%COMP%] {\n color: #000000;\n}\n.row-with-spacing[_ngcontent-%COMP%] p.available[_ngcontent-%COMP%] {\n color: #3aa537;\n}\n.row-with-spacing[_ngcontent-%COMP%] p.sb-status[_ngcontent-%COMP%] {\n padding: 0 10px 0 34px;\n position: relative;\n}\n.row-with-spacing[_ngcontent-%COMP%] p.sb-status[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n position: absolute;\n top: 4px;\n left: 4px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .flex-row[_ngcontent-%COMP%] {\n justify-content: space-between;\n align-items: flex-end;\n margin-right: 1em;\n }\n .flex-row[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 47%;\n min-width: 40%;\n margin-right: 0;\n box-sizing: border-box;\n flex: none;\n }\n .flex-row[_ngcontent-%COMP%] .company-field[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .flex-row[_ngcontent-%COMP%] {\n justify-content: space-between;\n align-items: flex-end;\n margin-right: 1em;\n }\n .flex-row[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n width: 47%;\n min-width: 40%;\n margin-right: 0;\n box-sizing: border-box;\n flex: none;\n }\n .flex-row[_ngcontent-%COMP%] .company-field[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n.attendees-input[_ngcontent-%COMP%] {\n margin-right: 1em;\n display: block;\n}\nmat-hint[_ngcontent-%COMP%] {\n position: relative;\n}\nmat-hint[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: #1F40E6;\n font-size: 11px;\n cursor: pointer;\n text-decoration: underline;\n}\nmat-hint[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n width: 429px;\n background-color: black;\n color: white;\n position: absolute;\n padding: 10px;\n top: 26px;\n left: 0;\n z-index: 2;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n mat-hint[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n width: 100%;\n position: relative;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n mat-hint[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n width: 100%;\n position: relative;\n }\n}\nmat-hint[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] .triangle[_ngcontent-%COMP%] {\n position: absolute;\n top: -6px;\n left: 12px;\n width: 12px;\n height: 12px;\n background-color: black;\n transform: rotate(45deg);\n}\n.mck-form-input[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-top: 1.25em;\n margin-right: 1em;\n font-weight: 400;\n font-size: 16px;\n width: 100%;\n margin-top: 0;\n margin-bottom: 0.5em;\n}\n.mck-form-input[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: #d1484f;\n}\n.mck-form-input.error[_ngcontent-%COMP%] {\n color: #e53935;\n}\nmat-form-field[_ngcontent-%COMP%] {\n flex: 1;\n}\nmat-form-field.booked[_ngcontent-%COMP%] {\n color: #d1484f;\n}\nmat-form-field.available[_ngcontent-%COMP%] {\n color: #3aa537;\n}\nmat-form-field[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n font-size: 16px;\n padding-top: 8px;\n}\nmat-form-field[_ngcontent-%COMP%] mat-error[_ngcontent-%COMP%] {\n padding-top: 12px;\n font-size: 11px;\n font-weight: 400;\n position: relative;\n height: 40px;\n}\nmat-form-field[_ngcontent-%COMP%] mat-error[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n position: relative;\n left: 10px;\n top: 2px;\n}\nmat-form-field[_ngcontent-%COMP%] mat-error[_ngcontent-%COMP%] .error-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: -12px;\n width: 16px;\n height: 16px;\n background-image: url('error-close.svg');\n background-size: contain;\n}\nmat-form-field[_ngcontent-%COMP%] .icon[_ngcontent-%COMP%] {\n width: 8px;\n}\nmat-tab[_ngcontent-%COMP%] {\n display: none !important;\n}\n.field[_ngcontent-%COMP%] {\n display: flex;\n min-width: 14em;\n flex: 1;\n flex-wrap: wrap;\n}\ntextarea[_ngcontent-%COMP%] {\n min-height: 7em;\n}\n.fieldset[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n}\n.fieldset[_ngcontent-%COMP%] .field[_ngcontent-%COMP%] {\n margin: 0 0.25em;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .fieldset[_ngcontent-%COMP%] .field[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .fieldset[_ngcontent-%COMP%] .field[_ngcontent-%COMP%] {\n margin: 0;\n }\n}\n.fieldset[_ngcontent-%COMP%] .field[_ngcontent-%COMP%]:first-child {\n margin-left: 0;\n}\n.fieldset[_ngcontent-%COMP%] .field[_ngcontent-%COMP%]:last-child {\n margin-right: 0;\n}\n.error[_ngcontent-%COMP%] {\n color: #e53935;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .flex-container[_ngcontent-%COMP%] .full-width[_ngcontent-%COMP%] {\n min-width: calc(100% - 1em);\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .flex-container[_ngcontent-%COMP%] .full-width[_ngcontent-%COMP%] {\n min-width: calc(100% - 1em);\n }\n}\n.flex-container[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] div div {\n height: 47px;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWJvb2tpbmctZGV0YWlscy1mb3JtL3Jvb20tYm9va2luZy1kZXRhaWxzLWZvcm0uY29tcG9uZW50LnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL3VpL3NyYy9saWIvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9ub2RlX21vZHVsZXMvQGFuZ3VsYXIvbWF0ZXJpYWwvX3RoZW1pbmcuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9zdHlsZXMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2FwcHMvc3RhZmYvc3JjL2FwcC9ib29raW5nL3Jvb20tYm9va2luZy1kZXRhaWxzLWZvcm0vcm9vbS1ib29raW5nLWRldGFpbHMtZm9ybS5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUZ6UkE7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDeUJsQjtBRHVFQTs7c0JBQUE7QUdtekNBLGtDQUFBO0FBdWlEQSwyQ0FBQTtBQXdDQSxxQkFBQTtBQzk5RlE7RUFFSSxhQUFBO0FINkJaO0FHeEJRO0VBQ0ksV0FBQTtFQUNBLFlBQUE7QUgwQlo7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SFE7RUFDSSxZQUFBO0VBQ0EseUJKcmlDbUI7RUlzaUNuQixtQkFBQTtBSDhIWjtBRzFISTtFRjVzQkEseUJGelZjO0FDa3FDbEI7QUcxSFE7RUFDSSxXQUFBO0FINEhaO0FHM0hZO0VGanRCUix5QkZ6VmM7RUk0aUNGLFdBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7QUg2SGhCO0FHekhRO0VGenRCSix5QkZ6VmM7RUlvakNOLFlBQUE7RUFDQSxnQkFBQTtFQUNBLGdCQUFBO0FIMkhaO0FHeEhRO0VGaHVCSix5QkZ6VmM7RUU2VmQsV0FBQTtFQUNBLFlBQUE7RUU4dEJRLGdCQUFBO0FIMkhaO0FDM3JDWTtFRTZqQ0o7SUZ4dEJBLFlBQUE7SUFDQSxhQUFBO0VEMDFCTjtBQUNGO0FDanNDWTtFRTZqQ0o7SUZ4dEJBLFlBQUE7SUFDQSxhQUFBO0VEZzJCTjtBQUNGO0FHcElRO0VGdHVCSix5QkZ6VmM7RUV1V2QsWUFBQTtFQUNBLFlBQUE7RUUwdEJRLGdCQUFBO0VBQ0EsZ0JBQUE7QUh1SVo7QUM5c0NZO0VFbWtDSjtJRnB0QkEsWUFBQTtJQUNBLFlBQUE7RURtMkJOO0FBQ0Y7QUNwdENZO0VFbWtDSjtJRnB0QkEsWUFBQTtJQUNBLFlBQUE7RUR5MkJOO0FBQ0Y7QUdoSlE7RUY3dUJKLHlCRnpWYztFSXdrQ04sWUFBQTtFQUNBLGdCQUFBO0FIa0paO0FDL3RDWTtFRTBrQ0o7SUFNUSxnQkFBQTtFSG1KZDtBQUNGO0FDcHVDWTtFRTBrQ0o7SUFNUSxnQkFBQTtFSHdKZDtBQUNGO0FHckpRO0VGdnZCSix5QkZ6VmM7RUlrbENOLFlBQUE7RUFDQSxnQkFBQTtBSHVKWjtBQzl1Q1k7RUVvbENKO0lBTVEsZ0JBQUE7RUh3SmQ7QUFDRjtBQ252Q1k7RUVvbENKO0lBTVEsZ0JBQUE7RUg2SmQ7QUFDRjtBRzFKUTtFRmp3QkoseUJGelZjO0VJNGxDTixZQUFBO0VBQ0EsZ0JBQUE7QUg0Slo7QUM3dkNZO0VFOGxDSjtJQU1RLGdCQUFBO0VINkpkO0FBQ0Y7QUNsd0NZO0VFOGxDSjtJQU1RLGdCQUFBO0VIa0tkO0FBQ0Y7QUc5Slk7RUY1d0JSLHlCRnpWYztFSXVtQ0YsWUFBQTtFQUNBLGNBQUE7QUhnS2hCO0FDNXdDWTtFRXltQ0E7SUFLUSxjQUFBO0VIa0tsQjtBQUNGO0FDanhDWTtFRXltQ0E7SUFLUSxjQUFBO0VIdUtsQjtBQUNGO0FHcEtnQjtFQUNJLFlBQUE7RUFDQSxrQkFBQTtBSHNLcEI7QUdoS1k7RUY3eEJSLHlCRnpWYztFSXduQ0YsWUFBQTtFQUNBLGNBQUE7QUhrS2hCO0FDL3hDWTtFRTBuQ0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUhvS2xCO0FBQ0Y7QUNyeUNZO0VFMG5DQTtJQUtRLGNBQUE7SUFDQSxpQkFBQTtFSDBLbEI7QUFDRjtBR3ZLZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUh5S3BCO0FHbktZO0VGL3lCUix5QkZ6VmM7RUkwb0NGLFlBQUE7RUFDQSxjQUFBO0FIcUtoQjtBQ3B6Q1k7RUU0b0NBO0lBS1EsY0FBQTtJQUNBLGlCQUFBO0VIdUtsQjtBQUNGO0FDMXpDWTtFRTRvQ0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUg2S2xCO0FBQ0Y7QUcxS2dCO0VBQ0ksWUFBQTtFQUNBLGtCQUFBO0FINEtwQjtBR3hLZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUgwS3BCO0FHcEtZO0VGdjBCUix5QkZ6VmM7RUlrcUNGLFlBQUE7RUFDQSxjQUFBO0FIc0toQjtBQzcwQ1k7RUVvcUNBO0lBS1EsY0FBQTtJQUNBLGlCQUFBO0VId0tsQjtBQUNGO0FDbjFDWTtFRW9xQ0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUg4S2xCO0FBQ0Y7QUczS2dCO0VBQ0ksWUFBQTtFQUNBLGtCQUFBO0FINktwQjtBR3pLZ0I7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUgyS3BCO0FHcktZO0VGLzFCUix5QkZ6VmM7RUkwckNGLFlBQUE7RUFDQSxjQUFBO0FIdUtoQjtBQ3QyQ1k7RUU0ckNBO0lBS1EsY0FBQTtJQUNBLGlCQUFBO0VIeUtsQjtBQUNGO0FDNTJDWTtFRTRyQ0E7SUFLUSxjQUFBO0lBQ0EsaUJBQUE7RUgrS2xC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b3JtL3Jvb20tYm9va2luZy1kZXRhaWxzLWZvcm0uY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIkcHJpbWFyeTogIzFGNDBFNjtcbiRmb3JtLWxhYmVsOiAjMDUxQzJDO1xuJHNlY29uZGFyeS1sYWJlbDogIzc2NzY3NjtcbiRib3JkZXI6ICNCM0IzQjM7XG4kYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDogI0QwRDBEMDtcbiRjaGlwLWNvbG9yOiAjMzMzMzMzO1xuJHBsYWNlaG9sZGVyLWNvbG9yOiAjN0Y3RjdGO1xuJGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4kcGFnZS1iYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuJHNlbGVjdGVkLW9wdGlvbjogI0U2RTZFNjtcbiRjb2xvci1icmFuZC15ZWxsb3c6ICNmZmQwNDg7XG4kbGlnaHQteWVsbG93OiAjZmZmM2NlO1xuJGNvYWNobWFyay10ZXh0OiAjNmY0ZDAwO1xuJGVycm9yLWNvbG9yOiAjRTEyRTQwO1xuJG5vLWZpbHRlcnMtY29sb3I6ICNCQ0JDQkM7XG4kcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I6ICNGNEY0RjQ7XG4kcHJpbWFyeS1oaWdobGlnaHQ6ICMyMjUxRkY7XG4kc2Nyb2xsYmFyLWNvbG9yOiAjNzU3NTc1O1xuXG4kYXZhaWxhYmxlLWNvbG9yOiAjNUQ5RDUyO1xuJGF2YWlsYWJsZS1ieS1yZXF1ZXN0LWNvbG9yOiAjRjVCNTNGO1xuJGluLXVzZS1jb2xvcjogI0Q0NDgzRTtcbiRub3QtYm9va2FibGUtY29sb3I6ICNDQ0NDQ0M7XG5cbiRtb2RhbC1ib2R5LWhlYWRpbmc6ICM0RDRENEQ7XG4kYWxlcnQtb3ZlcmxheS1iZzogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2FjaG1hcmstYmc6ICNFQkVCRjY7XG4kY29hY2htYXJrLWRhcmstdGV4dDogIzFCMUIxOTtcbiRlcnJvci10ZXh0OiAjZmZmO1xuXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuXG4vLyA0cHhcbiRzcGFjaW5nLXNtYWxsZXN0OiAwLjI1cmVtO1xuXG4vLyA4cHhcbiRzcGFjaW5nLXh4c21hbGw6IDAuNXJlbTtcblxuLy8gMTJweFxuJHNwYWNpbmcteHNtYWxsOiAwLjc1cmVtO1xuXG4vLyAxNnB4XG4kc3BhY2luZy1zbWFsbDogMXJlbTtcblxuLy8gMjBweFxuJHNwYWNpbmctc21hbGwtbWVkaXVtOiAxLjI1cmVtO1xuXG4vLyAyNHB4XG4kc3BhY2luZy1tZWRpdW06IDEuNXJlbTtcblxuLy8gMjhweFxuJHNwYWNpbmctbWVkaXVtLWxhcmdlOiAxLjc1cmVtO1xuXG4vLyAzMnB4XG4kc3BhY2luZy1sYXJnZTogMnJlbTtcblxuLy8gNDhweFxuJHNwYWNpbmcteGxhcmdlOiAzcmVtO1xuXG4vLyA2NHB4XG4kc3BhY2luZy14eGxhcmdlOiA0cmVtO1xuXG4vLyA5NnB4XG4kc3BhY2luZy1sYXJnZXN0OiA2cmVtO1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGRldmljZS1tb2JpbGUtc2l6ZTogNDUwcHg7XG4kZGV2aWNlLXRhYmxldC1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFwdG9wLXNpemU6IDEwMjRweDtcblxuJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemU6IDgwMHB4O1xuJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemU6IDEwNDhweDtcbiRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplOiAxMjgwcHg7XG5cblxuOmV4cG9ydCB7XG4gICAgcHJpbWFyeTogJHByaW1hcnk7XG4gICAgc2Vjb25kYXJ5TGFiZWw6ICRzZWNvbmRhcnktbGFiZWw7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4kaWNvbi1zbWFsbDogMTZweDtcbiRpY29uLW1lZGl1bTogMjRweDtcbiRpY29uLWxhcmdlOiAzMnB4O1xuJGljb24teGxhcmdlOiA0OHB4O1xuIiwiLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG46ZXhwb3J0IHtcbiAgcHJpbWFyeTogIzFGNDBFNjtcbiAgc2Vjb25kYXJ5TGFiZWw6ICM3Njc2NzY7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKiBUaGVtZSBmb3IgdGhlIHJpcHBsZSBlbGVtZW50cy4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF0ZXJpYWwvbm8tcHJlZml4ZXMgKi9cbi8qIHN0eWxlbGludC1lbmFibGUgKi9cbi5tY2staW5oZXJpdC1mb250IHtcbiAgZm9udDogaW5oZXJpdDtcbn1cbi5tY2stY29udGVudC1leHBhbmQsIC5tY2stY29udGVudC1wYWdlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbn1cbi5tY2stY29udGVudC1leHBhbmQtd2lkdGgge1xuICB3aWR0aDogMTAwJTtcbn1cbi5tY2stY29udGVudC1leHBhbmQtaGVpZ2h0IHtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLm1jay1jb250ZW50LXdpdGgtZm9vdGVyLWhlaWdodCB7XG4gIGhlaWdodDogY2FsYygxMDB2aCAtIDU4cHgpO1xufVxuLm1jay1jb250ZW50LWZ1bGwtaGVpZ2h0LCAubWNrLWNvbnRlbnQtcGFnZS1jb250YWluZXIge1xuICBoZWlnaHQ6IDEwMHZoO1xufVxuLm1jay1jb250ZW50LXBhZ2Uge1xuICBiYWNrZ3JvdW5kOiAjRjhGOUZBO1xufVxuLm1jay1jb250ZW50LWJvZHkge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWNvbnRlbnQtYm9keSB7XG4gICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWNvbnRlbnQtYm9keSB7XG4gICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIH1cbn1cbi5tY2stY29udGVudC1ncm91cCB7XG4gIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcbiAgd2lkdGg6IDEwMCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWNvbnRlbnQtZ3JvdXAge1xuICAgIG1heC13aWR0aDogNzU5cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWNvbnRlbnQtZ3JvdXAge1xuICAgIG1heC13aWR0aDogNzU5cHg7XG4gIH1cbn1cbi5tY2stc2hhZG93IHtcbiAgYm94LXNoYWRvdzogMHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtcbn1cbi5tY2stZmxleC0xIHtcbiAgZmxleDogMTtcbn1cbi5tY2stcm93LCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4LCAubWNrLXJvdy1mbG93IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbn1cbi5tY2stcm93Lm1jay1jZW50ZXItanVzdGlmeSwgLm1jay1jZW50ZXItanVzdGlmeS5tY2stcm93LWZsb3csIC5tY2stcm93Lm1jay1jZW50ZXIsIC5tY2stcm93Lm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1yb3cubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93Lm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXJvdy5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXJvdy5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1yb3cubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1yb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1jZW50ZXItc3VmZml4IC5tYXQtZm9ybS1maWVsZC1pbmZpeCwgLm1jay1jZW50ZXIubWNrLXJvdy1mbG93LCAubWNrLXJvdy1mbG93Lm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuLm1jay1yb3cubWNrLWNlbnRlci1hbGlnbiwgLm1jay1jZW50ZXItYWxpZ24ubWNrLXJvdy1mbG93LCAubWNrLXJvdy5tY2stY2VudGVyLCAubWNrLXJvdy5tY2stYnV0dG9uLm1hdC1idXR0b24sIC5tY2stcm93Lm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1yb3cubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1yb3cubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stcm93Lm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXJvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stcm93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stY2VudGVyLm1jay1yb3ctZmxvdywgLm1jay1yb3ctZmxvdy5tY2stYnV0dG9uLm1hdC1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1jay1yb3ctZmxvdy5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stcm93LWZsb3cubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXJvdy1mbG93Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24ge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLm1jay1yb3cubWNrLXN0cmV0Y2gsIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWNrLXN0cmV0Y2gubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stc3RyZXRjaC5tY2stcm93LWZsb3cge1xuICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbn1cbi5tY2stcm93LWZsb3cge1xuICBmbGV4LXdyYXA6IHdyYXA7XG59XG4ubWNrLXJvdy5tY2stc2Nyb2xsLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1jay1zY3JvbGwubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stc2Nyb2xsLm1jay1yb3ctZmxvdyB7XG4gIG92ZXJmbG93LXg6IHNjcm9sbDtcbn1cbi5tY2stY29sdW1uLCAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cbi5tY2stY29sdW1uLm1jay1jZW50ZXIsIC5tY2stY29sdW1uLm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1jb2x1bW4ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stY29sdW1uLm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLWNvbHVtbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLWNvbHVtbi5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1jb2x1bW4ubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stY29sdW1uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stY29sdW1uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stY29sdW1uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1jb2x1bW4ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1jZW50ZXIubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWNrLWNlbnRlci5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1jZW50ZXIubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stY2VudGVyLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stY2VudGVyLm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1jZW50ZXIubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stY2VudGVyLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stY2VudGVyLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stY2VudGVyLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1jZW50ZXIubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1jay1jb2x1bW4ubWF0LWZvcm0tZmllbGQtaW5maXgsIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stY2VudGVyLXN1ZmZpeCAubWF0LWZvcm0tZmllbGQtaW5maXgubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1jZW50ZXItc3VmZml4IC5tYXQtZm9ybS1maWVsZC1pbmZpeC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLWNlbnRlci1zdWZmaXggLm1hdC1mb3JtLWZpZWxkLWluZml4Lm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1jZW50ZXItc3VmZml4IC5tYXQtZm9ybS1maWVsZC1pbmZpeC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4ubWNrLWNvbHVtbi5tY2stc3BhY2UtYmV0d2VlbiwgLm1jay1zcGFjZS1iZXR3ZWVuLm1jay1idXR0b24ubWF0LWJ1dHRvbiwgLm1jay1zcGFjZS1iZXR3ZWVuLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXNwYWNlLWJldHdlZW4ubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stc3BhY2UtYmV0d2Vlbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXNwYWNlLWJldHdlZW4ubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stc3BhY2UtYmV0d2Vlbi5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiwgLm1jay1zcGFjZS1iZXR3ZWVuLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stc3BhY2UtYmV0d2Vlbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXNwYWNlLWJldHdlZW4ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWNrLXNwYWNlLWJldHdlZW4ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcbn1cbi5tY2stY29sdW1uLm1jay1zdHJldGNoLCAubWNrLXN0cmV0Y2gubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWNrLXN0cmV0Y2gubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tY2stc3RyZXRjaC5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1zdHJldGNoLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stc3RyZXRjaC5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1zdHJldGNoLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLXN0cmV0Y2gubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1zdHJldGNoLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tY2stc3RyZXRjaC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stc3RyZXRjaC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG59XG4ubWNrLWNvbHVtbi5tY2stc2Nyb2xsLCAubWNrLXNjcm9sbC5tY2stYnV0dG9uLm1hdC1idXR0b24sIC5tY2stc2Nyb2xsLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXNjcm9sbC5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1jay1zY3JvbGwubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1zY3JvbGwubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stc2Nyb2xsLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWNrLXNjcm9sbC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLXNjcm9sbC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLXNjcm9sbC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stc2Nyb2xsLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24ge1xuICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gIG92ZXJmbG93LXk6IG92ZXJsYXk7XG59XG4ubWNrLWNvbHVtbi5tY2stZmxleC1lbmQsIC5tY2stZmxleC1lbmQubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLCAubWNrLWZsZXgtZW5kLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWNrLWZsZXgtZW5kLm1hdC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLWZsZXgtZW5kLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tY2stZmxleC1lbmQubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stZmxleC1lbmQubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tY2stZmxleC1lbmQubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1jay1mbGV4LWVuZC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWNrLWZsZXgtZW5kLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1jay1mbGV4LWVuZC5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbn1cbi5tY2stb3ZlcmZsb3cge1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5tY2stYm9yZGVyZWQsIC5tY2staW5wdXQge1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBib3JkZXI6IDFweCBzb2xpZCAjQjNCM0IzO1xufVxuLm1jay1ib3JkZXJlZDpob3ZlciwgLm1jay1pbnB1dDpob3ZlciB7XG4gIGJvcmRlci1jb2xvcjogIzQ2NDY0Njtcbn1cbi5tY2stYm9yZGVyZWQ6Zm9jdXMsIC5tY2staW5wdXQ6Zm9jdXMge1xuICBib3JkZXItY29sb3I6ICMxRjQwRTY7XG59XG4ubWNrLWJvcmRlcmVkW2Rpc2FibGVkPXRydWVdLCAubWNrLWlucHV0W2Rpc2FibGVkPXRydWVdIHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIGJvcmRlci1jb2xvcjogI2YwZjBmMDtcbiAgY29sb3I6ICNjY2M7XG59XG4ubWNrLWRhdGUtZGlzcGxheSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogNDNweDtcbiAgcGFkZGluZzogMXJlbSAwLjVyZW07XG4gIHRyYW5zaXRpb246IGJvcmRlciAyMDBtcywgYm94LXNoYWRvdyAyMDBtcztcbn1cbi5tY2stZm9ybS1pbnB1dCAubWF0LWZvcm0tZmllbGQtd3JhcHBlciB7XG4gIHBhZGRpbmctYm90dG9tOiAwLjVyZW07XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQge1xuICBtaW4td2lkdGg6IGF1dG8gIWltcG9ydGFudDtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZy10b3A6IDAuN3JlbSAhaW1wb3J0YW50O1xuICBwYWRkaW5nLWJvdHRvbTogMC41cmVtICFpbXBvcnRhbnQ7XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICBtaW4taGVpZ2h0OiAyLjdyZW07XG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjcpO1xufVxuLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1zZWxlY3QtZHJvcGRvd24tYnV0dG9uIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gIG1hcmdpbi10b3A6IDJweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stc2VsZWN0LWRyb3Bkb3duLWJ1dHRvbiAubWF0LWZvcm0tZmllbGQtZmxleCB7XG4gICAgcGFkZGluZy1sZWZ0OiAwLjVyZW07XG4gICAgcGFkZGluZy1yaWdodDogMC41cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1zZWxlY3QtZHJvcGRvd24tYnV0dG9uIC5tYXQtZm9ybS1maWVsZC1mbGV4IHtcbiAgICBwYWRkaW5nLWxlZnQ6IDAuNXJlbTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tY2stc2VsZWN0LWRyb3Bkb3duLWJ1dHRvbiAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1zZWxlY3QtZHJvcGRvd24tYnV0dG9uIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgaGVpZ2h0OiAycmVtO1xuICAgIG1pbi1oZWlnaHQ6IDJyZW07XG4gIH1cbiAgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1zZWxlY3QtZHJvcGRvd24tYnV0dG9uIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkLm1jay1zZWxlY3QtZHJvcGRvd24tYnV0dG9uIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24gLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICBoZWlnaHQ6IDJyZW07XG4gICAgbWluLWhlaWdodDogMnJlbTtcbiAgfVxuICAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24gLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZC5tYXQtcyB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtc2VsZWN0IHtcbiAgbWFyZ2luLXRvcDogMC4ycmVtO1xufVxuLm1jay1mb3JtLWlucHV0IG1hdC1zZWxlY3QgLm1hdC1zZWxlY3QtYXJyb3cge1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LXNlbGVjdCAubWF0LXNlbGVjdC12YWx1ZSA+IC5tYXQtc2VsZWN0LXZhbHVlLXRleHQgPiBzcGFuIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG4ubWNrLWZvcm0taW5wdXQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LCAubWNrLWZvcm0taW5wdXQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsIC5tY2stZm9ybS1pbnB1dCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gIGJvcmRlci1jb2xvcjogI0IzQjNCMztcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4ubWNrLWZvcm0taW5wdXQgLmF2YWlsYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Lm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsIC5tY2stZm9ybS1pbnB1dCAuYXZhaWxhYmxlIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLCAubWNrLWZvcm0taW5wdXQgLmF2YWlsYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gIGJvcmRlci1jb2xvcjogIzNhYTUzNztcbn1cbi5tY2stZm9ybS1pbnB1dCAuYm9va2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCwgLm1jay1mb3JtLWlucHV0IC5ib29rZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsIC5tY2stZm9ybS1pbnB1dCAuYm9va2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kIHtcbiAgYm9yZGVyLWNvbG9yOiAjZTEyZTQxO1xufVxuLm1jay1mb3JtLWlucHV0IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCwgLm1jay1mb3JtLWlucHV0IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLCAubWNrLWZvcm0taW5wdXQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICBib3JkZXItY29sb3I6ICMxRjQwRTY7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuLm1jay1mb3JtLWlucHV0ID4gbWF0LWZvcm0tZmllbGQubWNrLWVycm9yIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgcGFkZGluZy1ib3R0b206IDA7XG59XG4ubWNrLWZvcm0taW5wdXQgPiBtYXQtZm9ybS1maWVsZC5tY2stZXJyb3IgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LCAubWNrLWZvcm0taW5wdXQgPiBtYXQtZm9ybS1maWVsZC5tY2stZXJyb3IgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsIC5tY2stZm9ybS1pbnB1dCA+IG1hdC1mb3JtLWZpZWxkLm1jay1lcnJvciAubWF0LWZvcm0tZmllbGQtb3V0bGluZSA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gIGJvcmRlci1jb2xvcjogI0UxMkU0MDtcbn1cbi5tY2stZm9ybS1pbnB1dCBtY2stY2xvc2UtaWNvbi5tYXQtY2hpcC1yZW1vdmUubWF0LWNoaXAtcmVtb3ZlIHtcbiAgb3BhY2l0eTogMTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWxhYmVsIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LXJhZGlvLWJ1dHRvbiB7XG4gIG1hcmdpbi1yaWdodDogMXJlbTtcbn1cbi5tY2stZm9ybS1pbnB1dCAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnQge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG4ubWNrLWZvcm0taW5wdXQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGUge1xuICBib3JkZXItY29sb3I6ICMxRjQwRTYgIWltcG9ydGFudDtcbiAgYm9yZGVyLXdpZHRoOiAxcHggIWltcG9ydGFudDtcbn1cbi5tY2stZm9ybS1pbnB1dCAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxRjQwRTYgIWltcG9ydGFudDtcbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtcmFkaW8tZ3JvdXAge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBmbGV4LXdyYXA6IHdyYXA7XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LXJhZGlvLWdyb3VwID4gbWF0LXJhZGlvLWJ1dHRvbjpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLXJpZ2h0OiAwO1xufVxuLm1jay1mb3JtLWlucHV0LWNvbnRhaW5lciA+IC5tY2stZm9ybS1pbnB1dCwgLm1jay1mb3JtLWlucHV0LWNvbnRhaW5lciA+IG1jay1zZWxlY3Qge1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA4MDBweCkge1xuICAubWNrLWZvcm0taW5wdXQtY29udGFpbmVyID4gLm1jay1mb3JtLWlucHV0LCAubWNrLWZvcm0taW5wdXQtY29udGFpbmVyID4gbWNrLXNlbGVjdCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMS43NXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDEwNDhweCkge1xuICAubWNrLWZvcm0taW5wdXQtY29udGFpbmVyID4gLm1jay1mb3JtLWlucHV0LCAubWNrLWZvcm0taW5wdXQtY29udGFpbmVyID4gbWNrLXNlbGVjdCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMS43NXJlbTtcbiAgfVxufVxuLm1jay1mb3JtLWlucHV0LWNvbnRhaW5lciAubWNrLXJhZGlvLXNlbGVjdCB7XG4gIG1hcmdpbi1ib3R0b206IDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA4MDBweCkge1xuICAubWNrLWZvcm0taW5wdXQtY29udGFpbmVyIC5tY2stcmFkaW8tc2VsZWN0IHtcbiAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAxMDQ4cHgpIHtcbiAgLm1jay1mb3JtLWlucHV0LWNvbnRhaW5lciAubWNrLXJhZGlvLXNlbGVjdCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMS41cmVtO1xuICB9XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LXN0YW5kYXJkLWNoaXAge1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIG1pbi1oZWlnaHQ6IDEuNXJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMzMzMzMztcbiAgcGFkZGluZy10b3A6IDAuMjVyZW07XG4gIHBhZGRpbmctYm90dG9tOiAwLjI1cmVtO1xuICBwYWRkaW5nLWxlZnQ6IDAuNXJlbTtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1mb3JtLWlucHV0IG1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwIHtcbiAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stZm9ybS1pbnB1dCBtYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcCB7XG4gICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG4gIH1cbn1cbi5tY2stZm9ybS1pbnB1dCBtYXQtY2hlY2tib3gubWF0LWNoZWNrYm94Lm1hdC1jaGVja2JveCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgY29sb3I6IGJsYWNrO1xufVxuLm1jay1mb3JtLWlucHV0IG1hdC1jaGVja2JveCBkaXYubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMUY0MEU2O1xufVxuLm1jay1mb3JtLWlucHV0IG1hdC1jaGVja2JveCBkaXYubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWNrLWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1kaXNhYmxlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNEMEQwRDA7XG59XG4ubWNrLWZvcm0taW5wdXQgbWF0LWNoZWNrYm94Lm1jay1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtZGlzYWJsZWQge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIGNvbG9yOiBibGFjaztcbiAgY29sb3I6ICNCM0IzQjM7XG59XG4ubWNrLWJvcmRlcmxlc3Mge1xuICBib3JkZXI6IG5vbmU7XG59XG4ubWNrLWJvcmRlcmxlc3M6aG92ZXIsIC5tY2stYm9yZGVybGVzczpmb2N1cywgLm1jay1ib3JkZXJsZXNzOmRpc2FibGVkIHtcbiAgYm9yZGVyOiBub25lO1xufVxuLm1jay1zZWxlY3QtcGFuZWwge1xuICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7XG4gIGJvcmRlci1yYWRpdXM6IHVuc2V0ICFpbXBvcnRhbnQ7XG4gIG1hcmdpbi10b3A6IDM1cHggIWltcG9ydGFudDtcbiAgbWFyZ2luLWxlZnQ6IDVweDtcbn1cbi5tY2stc2VsZWN0LXBhbmVsIG1hdC1vcHRpb24ge1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIHBhZGRpbmctcmlnaHQ6IDA7XG59XG4ubWNrLXNlbGVjdC1wYW5lbCBtYXQtb3B0aW9uLm1hdC1vcHRpb24tdGV4dCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbi5tY2stc2VsZWN0LXBhbmVsLm1jay1tYXJnaW4tdG9wIHtcbiAgbWFyZ2luLXRvcDogMS41cmVtICFpbXBvcnRhbnQ7XG59XG4ubWNrLWNoZWNrYm94LXBhbmVsLm1hdC1hdXRvY29tcGxldGUtcGFuZWwubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCB7XG4gIHRvcDogLTEwcHg7XG4gIG1heC1oZWlnaHQ6IDI3OHB4O1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uLm1jay10cnVuY2F0ZWQgLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgLXdlYmtpdC1saW5lLWNsYW1wOiAyO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xuICBsaW5lLWhlaWdodDogMjRweDtcbiAgaGVpZ2h0OiB1bnNldDtcbiAgbWluLWhlaWdodDogMzZweDtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiAubWF0LWNoZWNrYm94LWxhYmVsLm1hdC1jaGVja2JveC1sYWJlbCB7XG4gIGZsZXg6IDE7XG59XG4ubWNrLWNoZWNrYm94LXBhbmVsIG1hdC1vcHRpb24gLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIGNvbG9yOiBibGFjaztcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbi5tY2stY2hlY2tib3gtZ3JvdXAtaGVhZGVyIC5tYXQtY2hlY2tib3gtbGFiZWwubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbi5tY2stY2hlY2tib3gtZ3JvdXAtY2hpbGQge1xuICBtYXJnaW4tbGVmdDogMnJlbTtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiBtYXQtY2hlY2tib3ggbGFiZWwubWF0LWNoZWNrYm94LWxheW91dCB7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nLWxlZnQ6IDE2cHg7XG4gIHBhZGRpbmctcmlnaHQ6IDE2cHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLWNoZWNrYm94LXBhbmVsIG1hdC1vcHRpb24gbWF0LWNoZWNrYm94IGxhYmVsLm1hdC1jaGVja2JveC1sYXlvdXQge1xuICAgIHBhZGRpbmctbGVmdDogMnB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDJweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiBtYXQtY2hlY2tib3ggbGFiZWwubWF0LWNoZWNrYm94LWxheW91dCB7XG4gICAgcGFkZGluZy1sZWZ0OiAycHg7XG4gICAgcGFkZGluZy1yaWdodDogMnB4O1xuICB9XG59XG4ubWNrLWNoZWNrYm94LXBhbmVsIG1hdC1vcHRpb24gbWF0LWNoZWNrYm94IGRpdi5tYXQtY2hlY2tib3gtZnJhbWUubWF0LWNoZWNrYm94LWZyYW1lIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI0IzQjNCMztcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiBtYXQtY2hlY2tib3gubWF0LWNoZWNrYm94LWNoZWNrZWQgZGl2Lm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFGNDBFNjtcbn1cbi5tY2stY2hlY2tib3gtcGFuZWwgbWF0LW9wdGlvbiBtYXQtY2hlY2tib3gubWNrLWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1kaXNhYmxlZCBkaXYubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDBEMEQwO1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIG1hdC1jaGVja2JveC5tY2stY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWRpc2FibGVkIC5tYXQtY2hlY2tib3gtbGFiZWwubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41cmVtO1xuICBmb250LXdlaWdodDogMzAwO1xuICBjb2xvcjogYmxhY2s7XG4gIGNvbG9yOiAjQjNCM0IzO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuLm1jay1jaGVja2JveC1wYW5lbCBtYXQtb3B0aW9uIG1hdC1jaGVja2JveCAubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lciB7XG4gIHdpZHRoOiAxLjI1cmVtO1xuICBoZWlnaHQ6IDEuMjVyZW07XG59XG4ubWNrLXNlbGVjdC1vcHRpb24tc2VsZWN0ZWQge1xuICBmb250LXdlaWdodDogNTAwO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGNvbG9yOiBibGFjaztcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbn1cbi5tY2stc2VsZWN0LW9wdGlvbi1zZWxlY3RlZCAubWNrLXNwYWNlci1jb250ZW50IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFGNDBFNjtcbiAgbWFyZ2luLXJpZ2h0OiAwLjc1cmVtO1xufVxuLm1jay1zZWxlY3Qtb3B0aW9uLXVuc2VsZWN0ZWQge1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG4ubWNrLXNlbGVjdC1vcHRpb24tdW5zZWxlY3RlZC5tY2staWdub3JlLWRpc2FibGVkIHtcbiAgY29sb3I6IGJsYWNrO1xufVxuLm1jay1zZWxlY3Qtb3B0aW9uLXVuc2VsZWN0ZWQgLm1jay1zcGFjZXItY29udGVudCB7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgbWFyZ2luLXJpZ2h0OiAwLjc1cmVtO1xufVxuLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gIGhlaWdodDogNDBweDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgYm9yZGVyOiBub25lO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24sIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gIH1cbn1cbi5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zZWNvbmRhcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tY2stYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXN0cm9rZWQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay13YXJuaW5nLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stcHJpbWFyeS1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgcGFkZGluZy1sZWZ0OiAwLjI1cmVtO1xuICBwYWRkaW5nLXJpZ2h0OiAwLjI1cmVtO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3Ryb2tlZC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2std2FybmluZy1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2Vjb25kYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1wcmltYXJ5LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zdHJva2VkLWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2std2FybmluZy1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNlY29uZGFyeS1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXByaW1hcnktYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIH1cbn1cbi5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydCwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgaGVpZ2h0OiAzMnB4O1xuICBtaW4td2lkdGg6IDgzcHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0LCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIG1pbi13aWR0aDogMTU1cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0LCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1wcmltYXJ5LWJ1dHRvbiB7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIG1pbi13aWR0aDogMTU1cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodCwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodCwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2stcHJpbWFyeS1idXR0b24ge1xuICAgIGhlaWdodDogNDBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodCwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXdhcm5pbmctYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodCwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0Lm1jay1zaG9ydC1oZWlnaHQubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydC5tY2stc2hvcnQtaGVpZ2h0Lm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQubWNrLXNob3J0LWhlaWdodC5tY2stcHJpbWFyeS1idXR0b24ge1xuICAgIGhlaWdodDogNDBweDtcbiAgfVxufVxuLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZS5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZS5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZS5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgaGVpZ2h0OiAzMnB4O1xuICB3aWR0aDogMzJweDtcbiAgbWluLXdpZHRoOiAzMnB4O1xuICBwYWRkaW5nOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUsIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZS5tY2stc3Ryb2tlZC1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZS5tY2std2FybmluZy1idXR0b24sIC5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZS5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1wcmltYXJ5LWJ1dHRvbiwgLm1jay1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2std2FybmluZy1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXNlY29uZGFyeS1idXR0b24sIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXByaW1hcnktYnV0dG9uIHtcbiAgICB3aWR0aDogNDBweDtcbiAgICBoZWlnaHQ6IDQwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24ubWNrLXNxdWFyZSwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zdHJva2VkLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5tY2stc3F1YXJlLm1jay1zZWNvbmRhcnktYnV0dG9uLCAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXByaW1hcnktYnV0dG9uLCAubWNrLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUsIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zcXVhcmUubWNrLXN0cm9rZWQtYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc3F1YXJlLm1jay13YXJuaW5nLWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2stc2Vjb25kYXJ5LWJ1dHRvbiwgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNxdWFyZS5tY2stcHJpbWFyeS1idXR0b24ge1xuICAgIHdpZHRoOiA0MHB4O1xuICAgIGhlaWdodDogNDBweDtcbiAgfVxufVxuLm1jay1wcmltYXJ5LWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMUY0MEU2O1xufVxuLm1jay1wcmltYXJ5LWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b25bZGlzYWJsZWRdLCAubWNrLXByaW1hcnktYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbi5kaXNhYmxlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNEMEQwRDA7XG4gIGNvbG9yOiAjNzU3NTc1O1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuLm1jay1wcmltYXJ5LWJ1dHRvbi5tYXQtYnV0dG9uLm1hdC1idXR0b25bZGlzYWJsZWRdID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIsIC5tY2stcHJpbWFyeS1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLmRpc2FibGVkID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICBjb2xvcjogIzc1NzU3NTtcbn1cbi5tY2stcHJpbWFyeS1idXR0b24ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICBjb2xvcjogd2hpdGU7XG59XG4ubWNrLXNlY29uZGFyeS1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMyMjUxRkY7XG4gIGNvbG9yOiAjMjI1MUZGO1xufVxuLm1jay1zZWNvbmRhcnktYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b25bZGlzYWJsZWRdLCAubWNrLXNlY29uZGFyeS1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5kaXNhYmxlZCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuLm1jay1zZWNvbmRhcnktYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xufVxuLm1jay1zZWNvbmRhcnktYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgY29sb3I6ICMzMzMzMzM7XG59XG4ubWNrLXdhcm5pbmctYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmQwNDg7XG59XG4ubWNrLXdhcm5pbmctYnV0dG9uLm1hdC1idXR0b24ubWF0LWJ1dHRvbiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgY29sb3I6IGJsYWNrO1xufVxuLm1jay1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uIHtcbiAgYm9yZGVyOiAycHggc29saWQgI0IzQjNCMztcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBhZGRpbmctbGVmdDogMS43NXJlbTtcbiAgcGFkZGluZy1yaWdodDogMS43NXJlbTtcbn1cbi5tY2stc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tY2stc2hvcnQge1xuICBoZWlnaHQ6IDMycHg7XG4gIG1pbi13aWR0aDogODNweDtcbiAgcGFkZGluZy1sZWZ0OiAwLjI1cmVtO1xuICBwYWRkaW5nLXJpZ2h0OiAwLjI1cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1zaG9ydCB7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIG1pbi13aWR0aDogMTU1cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXNob3J0IHtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgbWluLXdpZHRoOiAxNTVweDtcbiAgfVxufVxuLm1jay1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uLm1jay1wcmltYXJ5IHtcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1jb2xvcjogIzFGNDBFNjtcbiAgY29sb3I6ICMxRjQwRTY7XG59XG4ubWNrLXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ubWNrLXRoaW4tYm9yZGVyLWxpZ2h0IHtcbiAgYm9yZGVyLWNvbG9yOiAjRDBEMEQwO1xuICBib3JkZXItd2lkdGg6IDFweDtcbn1cbi5tY2stc3Ryb2tlZC1idXR0b24gPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgY29sb3I6ICMxRjQwRTY7XG59XG4ubWNrLXRvZ2dsZS1idXR0b24ge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIGJvcmRlcjogMXB4IHNvbGlkICNCM0IzQjM7XG4gIGJvcmRlci1jb2xvcjogI0QwRDBEMDtcbiAgbWluLXdpZHRoOiA1OXB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stdG9nZ2xlLWJ1dHRvbiB7XG4gICAgbWluLXdpZHRoOiAxMzJweDtcbiAgICBwYWRkaW5nLXRvcDogMC41cmVtO1xuICAgIHBhZGRpbmctYm90dG9tOiAwLjVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXRvZ2dsZS1idXR0b24ge1xuICAgIG1pbi13aWR0aDogMTMycHg7XG4gICAgcGFkZGluZy10b3A6IDAuNXJlbTtcbiAgICBwYWRkaW5nLWJvdHRvbTogMC41cmVtO1xuICB9XG59XG4ubWNrLXRvZ2dsZS1idXR0b24tc2VsZWN0ZWQge1xuICBjb2xvcjogIzFGNDBFNjtcbn1cbi5tY2stZGF0ZS1waWNrZXIge1xuICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stZGF0ZS1waWNrZXIge1xuICAgIG1heC13aWR0aDogMjNyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLWRhdGUtcGlja2VyIHtcbiAgICBtYXgtd2lkdGg6IDIzcmVtO1xuICB9XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmhlYWRlci5oZWFkZXIge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGNvbG9yOiAjMDUxQzJDO1xuICBtYXJnaW4tdG9wOiAxLjI1cmVtO1xufVxuLm1jay1kYXRlLXBpY2tlciA+IC5oZWFkZXIuaGVhZGVyID4gLmFycm93LmFycm93IHtcbiAgd2lkdGg6IDIuMzc1cmVtO1xuICBoZWlnaHQ6IDJyZW07XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmhlYWRlci5oZWFkZXIgPiAuYXJyb3cuYXJyb3cgPiAuaWNvbi5pY29uIHtcbiAgd2lkdGg6IDFyZW07XG4gIGhlaWdodDogMXJlbTtcbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAuaGVhZGVyLmhlYWRlciA+IC5hcnJvdy5hcnJvdyA+IC5uZXh0Lm5leHQge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvYXJyb3ctZm9yd2FyZC5zdmdcIik7XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmhlYWRlci5oZWFkZXIgPiAuYXJyb3cuYXJyb3cgPiAucHJldmlvdXMucHJldmlvdXMge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvYXJyb3ctYmFja3dhcmQuc3ZnXCIpO1xufVxuLm1jay1kYXRlLXBpY2tlciA+IC5tb250aCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbi5tY2stZGF0ZS1waWNrZXIgPiAud2VlayB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6ICM3Njc2NzY7XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmJvZHkge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmJvZHkgPiBkaXYgPiBkaXYuZGF0ZSA+IC5kb3Qge1xuICBkaXNwbGF5OiBub25lO1xufVxuLm1jay1kYXRlLXBpY2tlciA+IC5ib2R5ID4gZGl2ID4gZGl2LmRhdGUuZGlzYWJsZWQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgY29sb3I6ICM3Njc2NzY7XG59XG4ubWNrLWRhdGUtcGlja2VyID4gLmJvZHkgPiBkaXYgPiBkaXYuZGF0ZS5hY3RpdmUge1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMUY0MEU2O1xufVxuLm1jay1kYXRlLXBpY2tlciA+IC5ib2R5ID4gZGl2ID4gZGl2LmRhdGUubm9uLW1vbnRoIHtcbiAgY29sb3I6ICM3Njc2NzY7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLXNwYWNlci1jb250ZW50LWNvbGxhcHNlLXRhYmxldCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stc3BhY2VyLWNvbnRlbnQtY29sbGFwc2UtdGFibGV0IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stc3BhY2VyLWNvbnRlbnQtY29sbGFwc2UtdGFibGV0IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDQ4cHgpIHtcbiAgLm1jay1zcGFjZXItY29udGVudC1jb2xsYXBzZS10YWJsZXQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc3BhY2VyLWNvbnRlbnQtZXhwYW5kLW1vYmlsZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc3BhY2VyLWNvbnRlbnQtZXhwYW5kLW1vYmlsZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuLm1jay1zcGFjZXItY29udGVudC1kaXZpZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbCB7XG4gIGJveC1zaGFkb3c6IDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNFNkU2RTY7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRTZFNkU2O1xufVxuLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1jay1leHBhbmRlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4gIGJvcmRlci1ib3R0b206IG5vbmU7XG59XG4ubWNrLWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWNrLWV4cGFuZGVkIC5tY2stY29sbGFwc2UtaWNvbiB7XG4gIHdpZHRoOiAyNHB4O1xuICBoZWlnaHQ6IDI0cHg7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9jaGV2cm9uLWNsb3NlLnN2Z1wiKTtcbiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1jay1leHBhbmRlZCAubWNrLWNvbGxhcHNlLWljb24ge1xuICAgIHdpZHRoOiA0OHB4O1xuICAgIGhlaWdodDogNDhweDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvY2hldnJvbi1jbG9zZS1sYXJnZS5zdmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1jay1leHBhbmRlZCAubWNrLWNvbGxhcHNlLWljb24ge1xuICAgIHdpZHRoOiA0OHB4O1xuICAgIGhlaWdodDogNDhweDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvY2hldnJvbi1jbG9zZS1sYXJnZS5zdmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICB9XG59XG4ubWNrLWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtYm9keSB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgcGFkZGluZy1yaWdodDogMDtcbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1ib2R5ID4gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIHtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xuICBwYWRkaW5nLWxlZnQ6IDFyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDFyZW07XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGNvbG9yOiBibGFjaztcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgcGFkZGluZy1ib3R0b206IDAuNXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1ib2R5ID4gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIHtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stZXhwYW5zaW9uLXBhbmVsLm1hdC1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1ib2R5ID4gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIHtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWJvZHkgPiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWJvZHkgPiAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xuICB9XG59XG4ubWNrLWV4cGFuc2lvbi1wYW5lbCBtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciB7XG4gIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsIG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyID4gc3Bhbi5tYXQtY29udGVudCB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4ubWNrLWV4cGFuc2lvbi1wYW5lbCBtYXQtcGFuZWwtdGl0bGUge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGNvbG9yOiBibGFjaztcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbn1cbi5tY2stZXhwYW5zaW9uLXBhbmVsIC5tY2stY29sbGFwc2UtaWNvbiB7XG4gIHdpZHRoOiAyNHB4O1xuICBoZWlnaHQ6IDI0cHg7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9jaGV2cm9uLW9wZW4uc3ZnXCIpO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC41cyBlYXNlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwgLm1jay1jb2xsYXBzZS1pY29uIHtcbiAgICB3aWR0aDogNDhweDtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwibGlicy91aS9zcmMvbGliL2ljb25zL2NoZXZyb24tb3Blbi1sYXJnZS5zdmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1leHBhbnNpb24tcGFuZWwgLm1jay1jb2xsYXBzZS1pY29uIHtcbiAgICB3aWR0aDogNDhweDtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwibGlicy91aS9zcmMvbGliL2ljb25zL2NoZXZyb24tb3Blbi1sYXJnZS5zdmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICB9XG59XG4ubWNrLWV4cGFuc2lvbi1wYW5lbCAubWNrLWNvbGxhcHNlLWljb24uZXhwYW5kZWQge1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xufVxuLm1jay1pY29uLWZpbGwtb3BlbiB7XG4gIGZpbGw6ICMxRjQwRTY7XG59XG4ubWNrLWljb24tZmlsbC1jbG9zZSB7XG4gIGZpbGw6ICM3Njc2NzY7XG59XG4ubWNrLWljb24tZmlsbC1ibGFjayB7XG4gIGZpbGw6IGJsYWNrO1xuICBzdHJva2U6IGJsYWNrO1xufVxuLm1jay1pY29uLWZpbGwtd2hpdGUge1xuICBmaWxsOiB3aGl0ZTtcbiAgc3Ryb2tlOiB3aGl0ZTtcbn1cbi5tY2staWNvbi1maWxsLWdyYXkge1xuICBmaWxsOiAjMzMzMzMzO1xuICBzdHJva2U6ICMzMzMzMzM7XG59XG4ubWNrLW1pbiB7XG4gIG1heC13aWR0aDogNTgxcHggIWltcG9ydGFudDtcbiAgd2lkdGg6IDgwdnc7XG4gIG1heC1oZWlnaHQ6IDEwMHZoO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1taW4ge1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbiAgLm1jay1taW4gLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLW1pbiB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1pbiAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuLm1jay1ub2V4cGFuZCB7XG4gIG1heC13aWR0aDogNTgxcHggIWltcG9ydGFudDtcbiAgd2lkdGg6IDgwdncgIWltcG9ydGFudDtcbiAgbWF4LWhlaWdodDogMTAwdmg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLW5vZXhwYW5kIHtcbiAgICB3aWR0aDogY2FsYygxMDB2dyAtIDMycHgpICFpbXBvcnRhbnQ7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLW5vZXhwYW5kIHtcbiAgICB3aWR0aDogY2FsYygxMDB2dyAtIDMycHgpICFpbXBvcnRhbnQ7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbn1cbi5tY2stbW9kYWwge1xuICBtYXgtd2lkdGg6IDgwMHB4ICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiA4MHZ3O1xuICBtYXgtaGVpZ2h0OiAxMDB2aDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stbW9kYWwge1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbiAgLm1jay1tb2RhbCAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwge1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbiAgLm1jay1tb2RhbCAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuLm1jay1tb2RhbC1taW5pIHtcbiAgbWF4LXdpZHRoOiA1ODBweCAhaW1wb3J0YW50O1xuICBtYXgtaGVpZ2h0OiAxMDB2aDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stbW9kYWwtbWluaSB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsLW1pbmkgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLW1vZGFsLW1pbmkge1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbiAgLm1jay1tb2RhbC1taW5pIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG4ubWNrLW1vZGFsLXN1cnZleSB7XG4gIG1heC13aWR0aDogNjkxcHggIWltcG9ydGFudDtcbiAgbWF4LWhlaWdodDogMTAwdmg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLW1vZGFsLXN1cnZleSAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwtc3VydmV5IC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG4ubWNrLW1vZGFsLXdpZGUge1xuICBtYXgtd2lkdGg6IDEwMjRweCAhaW1wb3J0YW50O1xuICB3aWR0aDogMTAwdnc7XG4gIGhlaWdodDogOTV2aDtcbiAgbWF4LWhlaWdodDogMTAwdmg7XG59XG4ubWNrLW1vZGFsLXdpZGUgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4gIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5tY2stbW9kYWwtd2lkZSAubWF0LWRpYWxvZy1jb250ZW50IC5tYXQtaWNvbi1idXR0b25bbmFtZT1DbG9zZUJ1dHRvbl0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHJpZ2h0OiAzMnB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1tb2RhbC13aWRlIC5tYXQtZGlhbG9nLWNvbnRlbnQgLm1hdC1pY29uLWJ1dHRvbltuYW1lPUNsb3NlQnV0dG9uXSAuY2xvc2UtaW1hZ2Uge1xuICAgIGhlaWdodDogMzJweDtcbiAgICB3aWR0aDogMzJweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwtd2lkZSAubWF0LWRpYWxvZy1jb250ZW50IC5tYXQtaWNvbi1idXR0b25bbmFtZT1DbG9zZUJ1dHRvbl0gLmNsb3NlLWltYWdlIHtcbiAgICBoZWlnaHQ6IDMycHg7XG4gICAgd2lkdGg6IDMycHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stbW9kYWwtd2lkZSB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsLXdpZGUgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLW1vZGFsLXdpZGUge1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbiAgLm1jay1tb2RhbC13aWRlIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG4ubWNrLW1vZGFsLXdpZGUtbWFuYWdlLWJvb2tpbmcge1xuICBtYXgtd2lkdGg6IDEyNTBweCAhaW1wb3J0YW50O1xuICB3aWR0aDogMTAwdnc7XG4gIG1heC1oZWlnaHQ6IDk1dmg7XG59XG4ubWNrLW1vZGFsLXdpZGUtbWFuYWdlLWJvb2tpbmcgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGOEY5RkE7XG4gIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5tY2stbW9kYWwtd2lkZS1tYW5hZ2UtYm9va2luZyAubWF0LWRpYWxvZy1jb250ZW50IC5tYXQtaWNvbi1idXR0b25bbmFtZT1DbG9zZUJ1dHRvbl0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHJpZ2h0OiAzMnB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1jay1tb2RhbC13aWRlLW1hbmFnZS1ib29raW5nIC5tYXQtZGlhbG9nLWNvbnRlbnQgLm1hdC1pY29uLWJ1dHRvbltuYW1lPUNsb3NlQnV0dG9uXSAuY2xvc2UtaW1hZ2Uge1xuICAgIGhlaWdodDogMzJweDtcbiAgICB3aWR0aDogMzJweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stbW9kYWwtd2lkZS1tYW5hZ2UtYm9va2luZyAubWF0LWRpYWxvZy1jb250ZW50IC5tYXQtaWNvbi1idXR0b25bbmFtZT1DbG9zZUJ1dHRvbl0gLmNsb3NlLWltYWdlIHtcbiAgICBoZWlnaHQ6IDMycHg7XG4gICAgd2lkdGg6IDMycHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tY2stbW9kYWwtd2lkZS1tYW5hZ2UtYm9va2luZyB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgfVxuICAubWNrLW1vZGFsLXdpZGUtbWFuYWdlLWJvb2tpbmcgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLW1vZGFsLXdpZGUtbWFuYWdlLWJvb2tpbmcge1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWF4LWhlaWdodDogMTAwdmg7XG4gIH1cbiAgLm1jay1tb2RhbC13aWRlLW1hbmFnZS1ib29raW5nIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLWFsZXJ0IHtcbiAgICBtYXgtd2lkdGg6IDEwMHZ3ICFpbXBvcnRhbnQ7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIG1hcmdpbi1sZWZ0OiAxcmVtO1xuICAgIG1hcmdpbi1yaWdodDogMXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stYWxlcnQge1xuICAgIG1heC13aWR0aDogMTAwdncgIWltcG9ydGFudDtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgbWFyZ2luLWxlZnQ6IDFyZW07XG4gICAgbWFyZ2luLXJpZ2h0OiAxcmVtO1xuICB9XG59XG4ubWNrLWFsZXJ0LWJhY2tkcm9wIHtcbiAgYmFja2dyb3VuZDogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xufVxuLm1jay1zbGlkZS10b2dnbGUubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkgLm1hdC1zbGlkZS10b2dnbGUtYmFyLm1hdC1zbGlkZS10b2dnbGUtYmFyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzIyNTFGRjtcbn1cbi5tY2stc2xpZGUtdG9nZ2xlLm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQ6bm90KC5tYXQtZGlzYWJsZWQpIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbn1cbi5tY2stc2xpZGUtdG9nZ2xlLm1hdC1zbGlkZS10b2dnbGUge1xuICBoZWlnaHQ6IGF1dG87XG59XG4ubWNrLXNsaWRlLXRvZ2dsZSAubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudCB7XG4gIGZsZXg6IDE7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIC13ZWJraXQtbGluZS1jbGFtcDogMjtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbn1cbi5tY2stc2xpZGUtdG9nZ2xlIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIge1xuICB3aWR0aDogMTRweDtcbiAgaGVpZ2h0OiAxNHB4O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg1MCUsIDUwJSk7XG59XG4ubWNrLXNsaWRlLXRvZ2dsZSAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXIubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXIge1xuICB0b3A6IC00cHg7XG4gIGxlZnQ6IC00cHg7XG59XG4ubWNrLXNsaWRlLXRvZ2dsZSAubWF0LXNsaWRlLXRvZ2dsZS1iYXIubWF0LXNsaWRlLXRvZ2dsZS1iYXIge1xuICBoZWlnaHQ6IDIwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNEMEQwRDA7XG4gIGJvcmRlci1yYWRpdXM6IDIwcHg7XG59XG4ubWNrLXNrZWxldG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbn1cbi5tY2stc2tlbGV0b24tY2hlY2tib3gge1xuICBmbG9hdDogbGVmdDtcbn1cbi5tY2stc2tlbGV0b24tY2hlY2tib3ggPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIHdpZHRoOiAyMHB4O1xuICBoZWlnaHQ6IDIwcHg7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG4ubWNrLXNrZWxldG9uLWhlYWRlciA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgd2lkdGg6IDEwMHZ3O1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBtYXgtd2lkdGg6IDIxNXB4O1xufVxuLm1jay1za2VsZXRvbi1pbWFnZSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgd2lkdGg6IDgxcHg7XG4gIGhlaWdodDogODJweDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDgwMHB4KSB7XG4gIC5tY2stc2tlbGV0b24taW1hZ2UgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgd2lkdGg6IDIxOXB4O1xuICAgIGhlaWdodDogMTE5cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAxMDQ4cHgpIHtcbiAgLm1jay1za2VsZXRvbi1pbWFnZSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICB3aWR0aDogMjE5cHg7XG4gICAgaGVpZ2h0OiAxMTlweDtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1zdGF0dXMgPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIHdpZHRoOiAxMTdweDtcbiAgaGVpZ2h0OiA3OHB4O1xuICBtYXJnaW4tdG9wOiAxMHB4O1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogODAwcHgpIHtcbiAgLm1jay1za2VsZXRvbi1zdGF0dXMgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgd2lkdGg6IDExN3B4O1xuICAgIGhlaWdodDogNzhweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDEwNDhweCkge1xuICAubWNrLXNrZWxldG9uLXN0YXR1cyA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuICB9XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtMSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgaGVpZ2h0OiAyM3B4O1xuICBtYXgtd2lkdGg6IDE3NnB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTEgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAyMTlweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS0xID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogMjE5cHg7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS0yID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogMTY1cHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtMiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDE4OXB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTIgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAxODlweDtcbiAgfVxufVxuLm1jay1za2VsZXRvbi1saW5lLTMgPiAubG9hZGVyLmxvYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7XG4gIGhlaWdodDogMThweDtcbiAgbWF4LXdpZHRoOiAxNDdweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS0zID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogMTg5cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWNrLXNrZWxldG9uLWxpbmUtMyA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDE4OXB4O1xuICB9XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtMzBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS0zMHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgaGVpZ2h0OiAxOHB4O1xuICBtYXgtd2lkdGg6IDMwJTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS0zMHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTMwcC10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogMzAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTMwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtMzBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAzMCU7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS0zMHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtMzBwLXRoaW4tdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtNDVwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS00NXAtdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgaGVpZ2h0OiAxOHB4O1xuICBtYXgtd2lkdGg6IDQ1JTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS00NXAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTQ1cC10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogNDUlO1xuICAgIG1hcmdpbi1yaWdodDogNDUlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTQ1cCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNDVwLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA0NSU7XG4gICAgbWFyZ2luLXJpZ2h0OiA0NSU7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS00NXAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNDVwLXRoaW4tdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtNTBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogNTAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTUwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTUwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDUwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDQ1JTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS01MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTUwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA1MCU7XG4gICAgbWFyZ2luLXJpZ2h0OiA0NSU7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS01MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaW4tdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaWNrLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gIGhlaWdodDogMTZweDtcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xufVxuLm1jay1za2VsZXRvbi1saW5lLTUwcC10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNTBwLXRoaW4tdGhpY2sgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTUwcC10aGljay10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAzMnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtNjBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogNjAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTYwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTYwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDYwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDM1JTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS02MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTYwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA2MCU7XG4gICAgbWFyZ2luLXJpZ2h0OiAzNSU7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS02MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaW4tdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaWNrLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gIGhlaWdodDogMTZweDtcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xufVxuLm1jay1za2VsZXRvbi1saW5lLTYwcC10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNjBwLXRoaW4tdGhpY2sgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTYwcC10aGljay10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAzMnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtNzBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogNzAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTcwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTcwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDcwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDI1JTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS03MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTcwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA3MCU7XG4gICAgbWFyZ2luLXJpZ2h0OiAyNSU7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS03MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaW4tdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaWNrLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gIGhlaWdodDogMTZweDtcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xufVxuLm1jay1za2VsZXRvbi1saW5lLTcwcC10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtNzBwLXRoaW4tdGhpY2sgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTcwcC10aGljay10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAzMnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtODBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaWNrID4gLmxvYWRlci5sb2FkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTZFNkU2O1xuICBoZWlnaHQ6IDE4cHg7XG4gIG1heC13aWR0aDogODAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTgwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTgwcC10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IDgwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDE1JTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS04MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTgwcC10aGluID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpY2sgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA4MCU7XG4gICAgbWFyZ2luLXJpZ2h0OiAxNSU7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS04MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaW4tdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaWNrLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gIGhlaWdodDogMTZweDtcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xufVxuLm1jay1za2VsZXRvbi1saW5lLTgwcC10aGljayA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtODBwLXRoaW4tdGhpY2sgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTgwcC10aGljay10aGljayA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAzMnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxpbmUtOTBwID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tbGluZS05MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgaGVpZ2h0OiAxOHB4O1xuICBtYXgtd2lkdGg6IDkwJTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbGluZS05MHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1saW5lLTkwcC10aGluID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogOTAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1saW5lLTkwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtOTBwLXRoaW4gPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiA5MCU7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbGluZS05MHAtdGhpbiA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWxpbmUtOTBwLXRoaW4tdGhpbiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG4ubWNrLXNrZWxldG9uLWxvYWQtbW9yZSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgbWFyZ2luLXRvcDogMC41cmVtO1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG4gIHdpZHRoOiBjYWxjKDEwMHZ3IC0gKDIgKiAxcmVtKSk7XG4gIGhlaWdodDogNDBweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbG9hZC1tb3JlID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogMzIwcHg7XG4gICAgaGVpZ2h0OiA1MHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1sb2FkLW1vcmUgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgbWF4LXdpZHRoOiAzMjBweDtcbiAgICBoZWlnaHQ6IDUwcHg7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbG9hZC1tb3JlLTEwMHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1oZWFkZXIgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1yb29tLWF2YWlsYWJpbGl0eSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U2RTZFNjtcbiAgbWFyZ2luLXRvcDogMC41cmVtO1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG4gIHdpZHRoOiBjYWxjKDEwMHZ3IC0gKDIgKiAxcmVtKSk7XG4gIGhlaWdodDogNDBweDtcbiAgbWF4LXdpZHRoOiBub25lO1xuICB3aWR0aDogMTAwJTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDQ1MXB4KSB7XG4gIC5tY2stc2tlbGV0b24tbG9hZC1tb3JlLTEwMHAgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1oZWFkZXIgPiAubG9hZGVyLmxvYWRlciwgLm1jay1za2VsZXRvbi1yb29tLWF2YWlsYWJpbGl0eSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICBtYXgtd2lkdGg6IG5vbmU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiA1MHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgLm1jay1za2VsZXRvbi1sb2FkLW1vcmUtMTAwcCA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWhlYWRlciA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLXJvb20tYXZhaWxhYmlsaXR5ID4gLmxvYWRlci5sb2FkZXIge1xuICAgIG1heC13aWR0aDogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDUwcHg7XG4gIH1cbn1cbi5tY2stc2tlbGV0b24tbG9hZC1tb3JlLTEwMHAgPiAubG9hZGVyLmxvYWRlci1yb29tLWF2YWlsYWJpbGl0eSA+IC5sb2FkZXIubG9hZGVyLCAubWNrLXNrZWxldG9uLWhlYWRlciA+IC5sb2FkZXIubG9hZGVyLXJvb20tYXZhaWxhYmlsaXR5ID4gLmxvYWRlci5sb2FkZXIsIC5tY2stc2tlbGV0b24tcm9vbS1hdmFpbGFiaWxpdHkgPiAubG9hZGVyLmxvYWRlci1yb29tLWF2YWlsYWJpbGl0eSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgaGVpZ2h0OiAxMjRweDtcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xufVxuXG4ubWNrLWhlYWRpbmctNSB7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMS41cmVtO1xuICBsaW5lLWhlaWdodDogMS4zMzM7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWNrLWhlYWRpbmctNSB7XG4gICAgZm9udC1zaXplOiAxLjc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tY2staGVhZGluZy01IHtcbiAgICBmb250LXNpemU6IDEuNzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMTQyO1xuICB9XG59XG5cbm5neC1tYXQtc2VsZWN0LXNlYXJjaCAubWF0LXNlbGVjdC1zZWFyY2gtbm8tZW50cmllcy1mb3VuZCB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LWZhbWlseTogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbm5neC1tYXQtc2VsZWN0LXNlYXJjaCAubWF0LXNlbGVjdC1zZWFyY2gtaW5wdXQge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1mYW1pbHk6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5uZ3gtbWF0LXNlbGVjdC1zZWFyY2ggYnV0dG9uLm1hdC1idXR0b24ubWF0LXNlbGVjdC1zZWFyY2gtY2xlYXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiBub25lO1xuICBjb2xvcjogYmxhY2s7XG59XG5cbjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICB3aWR0aDogMTZweDtcbiAgaGVpZ2h0OiAxOHB4O1xufVxuXG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgaGVpZ2h0OiAxLjVyZW07XG4gIGJvcmRlcjogNHB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMCk7XG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzc1NzU3NTtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAtMXB4IC0xcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4wNSksIGluc2V0IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG59XG5cbjo6LXdlYmtpdC1zY3JvbGxiYXItYnV0dG9uIHtcbiAgd2lkdGg6IDA7XG4gIGhlaWdodDogMDtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuaGVhZGVyIHtcbiAgei1pbmRleDogMjtcbn1cblxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1iLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tYi1ibG9jayB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cblxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1iLWJvdHRvbSB7XG4gICAgcGFkZGluZy1ib3R0b206IDExMHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1iLWJvdHRvbSB7XG4gICAgcGFkZGluZy1ib3R0b206IDExMHB4O1xuICB9XG59XG5cbi5tYXAtZmlsdGVycy1jb250YWluZXIgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gIHRvcDogNXB4O1xufVxuLm1hcC1maWx0ZXJzLWNvbnRhaW5lciAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICBoZWlnaHQ6IDQ4cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xufVxuLm1hcC1maWx0ZXJzLWNvbnRhaW5lciAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgcGFkZGluZy10b3A6IDAuNXJlbSAhaW1wb3J0YW50O1xufVxuXG4ub2ZmaWNlLWxldmVsLXJvdyAubWF0LXNlbGVjdC1wbGFjZWhvbGRlciB7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAub2ZmaWNlLWxldmVsLXJvdyAubGVnZW5kLWNvbnRhaW5lciAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwgLm9mZmljZS1sZXZlbC1yb3cgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICBoZWlnaHQ6IDQ1cHggIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5vZmZpY2UtbGV2ZWwtcm93IC5sZWdlbmQtY29udGFpbmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAub2ZmaWNlLWxldmVsLXJvdyAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgIGhlaWdodDogNDVweCAhaW1wb3J0YW50O1xuICB9XG59XG4ub2ZmaWNlLWxldmVsLXJvdyAuc2VsZWN0LWRpdmlkZXIge1xuICBkaXNwbGF5OiBibG9jaztcbiAgdG9wOiAwICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiA0NHB4ICFpbXBvcnRhbnQ7XG4gIHJpZ2h0OiAtMTFweCAhaW1wb3J0YW50O1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICBib3JkZXItd2lkdGg6IDAgMCAwIDFweDtcbiAgYm9yZGVyLWNvbG9yOiAjYzZjNmM2O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm9mZmljZS1sZXZlbC1yb3cgLnNlbGVjdC1kaXZpZGVyIHtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDFweCkgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5vZmZpY2UtbGV2ZWwtcm93IC5zZWxlY3QtZGl2aWRlciB7XG4gICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAxcHgpICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi5vZmZpY2UtbGV2ZWwtcm93IC5kaXNhYmxlZCAuc2VsZWN0LWRpdmlkZXIge1xuICBiYWNrZ3JvdW5kOiAjRjBGMEYwICFpbXBvcnRhbnQ7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAub2ZmaWNlLWxldmVsLXJvdyAuZGlzYWJsZWQgLnNlbGVjdC1kaXZpZGVyIHtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDJweCkgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5vZmZpY2UtbGV2ZWwtcm93IC5kaXNhYmxlZCAuc2VsZWN0LWRpdmlkZXIge1xuICAgIGhlaWdodDogY2FsYygxMDAlIC0gMnB4KSAhaW1wb3J0YW50O1xuICB9XG59XG4ub2ZmaWNlLWxldmVsLXJvdyAuZGlzYWJsZWQgLnNlbGVjdC1jaGV2cm9uIHtcbiAgb3BhY2l0eTogMC41O1xuICBtYXJnaW4tbGVmdDogMTBweDtcbn1cblxuLm9mZmljZS1sZXZlbC1yb3cgLmxlZ2VuZC1jb250YWluZXIgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsIC5vZmZpY2UtbGV2ZWwtcm93IC5tYXQtZm9ybS1maWVsZC1pbmZpeCwgLm1hcC1jb250cm9scyAubGVnZW5kLWNvbnRhaW5lciAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwgLm1hcC1jb250cm9scyAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50O1xufVxuXG4uYm9va2luZy1mb3JtLWNvbnRhaW5lciB7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAzMTBweCk7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuYm9va2luZy1mb3JtLWNvbnRhaW5lciB7XG4gICAgbWF4LWhlaWdodDogbm9uZTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5ib29raW5nLWZvcm0tY29udGFpbmVyIHtcbiAgICBtYXgtaGVpZ2h0OiBub25lO1xuICB9XG59XG5cbi5ib29raW5nLWZvcm0tY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dCBtYXQtbGFiZWwsIC5ib29raW5nLWZvcm0tY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dCAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnQge1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCIgIWltcG9ydGFudDtcbiAgY29sb3I6ICMzMzMzMzM7XG59XG4uYm9va2luZy1mb3JtLWNvbnRhaW5lciAubWNrLWZvcm0taW5wdXQgaW5wdXQsIC5ib29raW5nLWZvcm0tY29udGFpbmVyIC5tY2stZm9ybS1pbnB1dCBpbnB1dDo6cGxhY2Vob2xkZXIge1xuICBmb250LWZhbWlseTogXCJNY0tpbnNleSBTYW5zXCI7XG4gIGNvbG9yOiAjQjNCM0IzO1xufVxuXG5mb3JtIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIGZvcm0ge1xuICAgIHBhZGRpbmc6IDAgMTBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIGZvcm0ge1xuICAgIHBhZGRpbmc6IDAgMTBweDtcbiAgfVxufVxuXG4ubWNrLXJvdy1mbG93IHtcbiAgZGlzcGxheTogZmxleDtcbn1cbi5tY2stcm93LWZsb3cgPiBkaXYge1xuICBmbGV4OiAxO1xuICBtaW4td2lkdGg6IDE4MHB4O1xuICBmbGV4LWZsb3c6IGNvbHVtbjtcbn1cbi5tY2stcm93LWZsb3cgPiBkaXY6bnRoLWNoaWxkKDIpIHtcbiAgbWFyZ2luLWxlZnQ6IDIwcHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWNrLXJvdy1mbG93ID4gZGl2Om50aC1jaGlsZCgyKSB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWNrLXJvdy1mbG93ID4gZGl2Om50aC1jaGlsZCgyKSB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gIH1cbn1cblxuLmNvbXBhbnktY29udGFpbmVyID4gZGl2Om50aC1jaGlsZCgyKSB7XG4gIG1hcmdpbi1sZWZ0OiAwcHg7XG59XG5cbi5yb3ctd2l0aC1zcGFjaW5nIHtcbiAgbWFyZ2luLWJvdHRvbTogMS41cmVtO1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbn1cbi5yb3ctd2l0aC1zcGFjaW5nIGxhYmVsIHtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xufVxuLnJvdy13aXRoLXNwYWNpbmcgcCB7XG4gIGNvbG9yOiAjZTEyZTQxO1xuICBtYXJnaW46IDA7XG59XG4ucm93LXdpdGgtc3BhY2luZyBwLmNoZWNraW5nIHtcbiAgY29sb3I6ICMwMDAwMDA7XG59XG4ucm93LXdpdGgtc3BhY2luZyBwLmF2YWlsYWJsZSB7XG4gIGNvbG9yOiAjM2FhNTM3O1xufVxuLnJvdy13aXRoLXNwYWNpbmcgcC5zYi1zdGF0dXMge1xuICBwYWRkaW5nOiAwIDEwcHggMCAzNHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4ucm93LXdpdGgtc3BhY2luZyBwLnNiLXN0YXR1cyBpbWcge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNHB4O1xuICBsZWZ0OiA0cHg7XG59XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5mbGV4LXJvdyB7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICBtYXJnaW4tcmlnaHQ6IDFlbTtcbiAgfVxuICAuZmxleC1yb3cgPiBkaXYge1xuICAgIHdpZHRoOiA0NyU7XG4gICAgbWluLXdpZHRoOiA0MCU7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgZmxleDogbm9uZTtcbiAgfVxuICAuZmxleC1yb3cgLmNvbXBhbnktZmllbGQge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmZsZXgtcm93IHtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAgIG1hcmdpbi1yaWdodDogMWVtO1xuICB9XG4gIC5mbGV4LXJvdyA+IGRpdiB7XG4gICAgd2lkdGg6IDQ3JTtcbiAgICBtaW4td2lkdGg6IDQwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBmbGV4OiBub25lO1xuICB9XG4gIC5mbGV4LXJvdyAuY29tcGFueS1maWVsZCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLmF0dGVuZGVlcy1pbnB1dCB7XG4gIG1hcmdpbi1yaWdodDogMWVtO1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxubWF0LWhpbnQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5tYXQtaGludCBzcGFuIHtcbiAgY29sb3I6ICMxRjQwRTY7XG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbm1hdC1oaW50IC5oaW50IHtcbiAgd2lkdGg6IDQyOXB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjaztcbiAgY29sb3I6IHdoaXRlO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHBhZGRpbmc6IDEwcHg7XG4gIHRvcDogMjZweDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIG1hdC1oaW50IC5oaW50IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICBtYXQtaGludCAuaGludCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG59XG5tYXQtaGludCAuaGludCAudHJpYW5nbGUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogLTZweDtcbiAgbGVmdDogMTJweDtcbiAgd2lkdGg6IDEycHg7XG4gIGhlaWdodDogMTJweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG4gIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcbn1cblxuLm1jay1mb3JtLWlucHV0IHtcbiAgbWluLXdpZHRoOiAxMDAlO1xuICBtYXJnaW4tdG9wOiAxLjI1ZW07XG4gIG1hcmdpbi1yaWdodDogMWVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LXNpemU6IDE2cHg7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAwLjVlbTtcbn1cbi5tY2stZm9ybS1pbnB1dCBzcGFuIHtcbiAgY29sb3I6ICNkMTQ4NGY7XG59XG4ubWNrLWZvcm0taW5wdXQuZXJyb3Ige1xuICBjb2xvcjogI2U1MzkzNTtcbn1cblxubWF0LWZvcm0tZmllbGQge1xuICBmbGV4OiAxO1xufVxubWF0LWZvcm0tZmllbGQuYm9va2VkIHtcbiAgY29sb3I6ICNkMTQ4NGY7XG59XG5tYXQtZm9ybS1maWVsZC5hdmFpbGFibGUge1xuICBjb2xvcjogIzNhYTUzNztcbn1cbm1hdC1mb3JtLWZpZWxkIGlucHV0IHtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBwYWRkaW5nLXRvcDogOHB4O1xufVxubWF0LWZvcm0tZmllbGQgbWF0LWVycm9yIHtcbiAgcGFkZGluZy10b3A6IDEycHg7XG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IDQwcHg7XG59XG5tYXQtZm9ybS1maWVsZCBtYXQtZXJyb3Igc3BhbiB7XG4gIGZvbnQtZmFtaWx5OiBcIk1jS2luc2V5IFNhbnNcIjtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGxlZnQ6IDEwcHg7XG4gIHRvcDogMnB4O1xufVxubWF0LWZvcm0tZmllbGQgbWF0LWVycm9yIC5lcnJvci1pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAtMTJweDtcbiAgd2lkdGg6IDE2cHg7XG4gIGhlaWdodDogMTZweDtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwibGlicy91aS9zcmMvbGliL2ljb25zL2Vycm9yLWNsb3NlLnN2Z1wiKTtcbiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxubWF0LWZvcm0tZmllbGQgLmljb24ge1xuICB3aWR0aDogOHB4O1xufVxuXG5tYXQtdGFiIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4uZmllbGQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBtaW4td2lkdGg6IDE0ZW07XG4gIGZsZXg6IDE7XG4gIGZsZXgtd3JhcDogd3JhcDtcbn1cblxudGV4dGFyZWEge1xuICBtaW4taGVpZ2h0OiA3ZW07XG59XG5cbi5maWVsZHNldCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbn1cbi5maWVsZHNldCAuZmllbGQge1xuICBtYXJnaW46IDAgMC4yNWVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmZpZWxkc2V0IC5maWVsZCB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmZpZWxkc2V0IC5maWVsZCB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG4uZmllbGRzZXQgLmZpZWxkOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLWxlZnQ6IDA7XG59XG4uZmllbGRzZXQgLmZpZWxkOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tcmlnaHQ6IDA7XG59XG5cbi5lcnJvciB7XG4gIGNvbG9yOiAjZTUzOTM1O1xufVxuXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAuZmxleC1jb250YWluZXIgLmZ1bGwtd2lkdGgge1xuICAgIG1pbi13aWR0aDogY2FsYygxMDAlIC0gMWVtKTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5mbGV4LWNvbnRhaW5lciAuZnVsbC13aWR0aCB7XG4gICAgbWluLXdpZHRoOiBjYWxjKDEwMCUgLSAxZW0pO1xuICB9XG59XG4uZmxleC1jb250YWluZXIgbWF0LWZvcm0tZmllbGQgOjpuZy1kZWVwIGRpdiBkaXYge1xuICBoZWlnaHQ6IDQ3cHg7XG59IiwiQGltcG9ydCBcInZhcnNcIjtcblxuQG1peGluIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJHNpemUsICRxdWFsaWZpZXIpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBpZiAoJHF1YWxpZmllciA9PSBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIGlmICgkcXVhbGlmaWVyID09IG1heC13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtYXgtd2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBtaXhpbiBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJG1pbiwgJG1heCkge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gdGhpcyBpcyBhIGNvcHkgb2YgcmVzcG9uZC10by4gd2UgZG9uJ3Qgd2FudCB0byBwcmVzZXJ2ZSB0aGF0IG1ldGhvZCBzaW5jZSB0aGUgYnJlYWtwb2ludHMgbWF5IGRpdmVyZ2UgZnJvbSB0aGUgb2xkIFVJLlxuQG1peGluIGlzLXNjcmVlbi1zaXplKCRtZWRpYTogYWxsLCAkb3JpZW50YXRpb246IG5vbmUpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuXG5AbWl4aW4gcGFnZS1wYWRkaW5nIHtcbiAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xufVxuXG4vLyBGb250IE1peGluc1xuJGZvbnQtbWNraW5zZXktc2FuczogXCJNY0tpbnNleSBTYW5zXCI7XG4kZm9udC10aGVpbmhhcmR0OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiRmb250LWJvd2VyOiBcIkJvd2VyXCI7XG5cbkBtaXhpbiBib3dlci1ib2xkIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtYm93ZXI7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIG1ja2luc2V5LXNhbnMge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBkaXNwbGF5LTEge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDRyZW07IC8vIDY0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTg3OyAvLyA3NnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0yIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0zIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTQge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzcmVtOyAvLyA0OHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTY2OyAvLyA1NnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDY0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTUge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuODMzOyAvLyAzNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42NDI7IC8vIDQwcHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTcge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDQ4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjc1cmVtOyAvLyA0NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNTJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICBsaW5lLWhlaWdodDogMS4xMTE7IC8vIDQ0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA0OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0zIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjIyOyAvLyA0NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy00IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy01IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyODhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy02IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTU1OyAvLyAyOHB4XG4gICAgfVxufVxuXG5AbWl4aW4gYm9keS1kZWZhdWx0IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI2cHhcbiAgICB9XG59XG5cbi8vLyBEb2VzbnQgZXhpc3QgaW4gTURTLlxuQG1peGluIGJvZHktdGlueSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07IC8vIDEycHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyMHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZm9ybS1sYWJlbCB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LWZhbWlseTogJGZvbnQtdGhlaW5oYXJkdDtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgY29sb3I6ICRwbGFjZWhvbGRlci1jb2xvcjtcbiAgICBmb250LXdlaWdodDogMzAwO1xufVxuXG5AbWl4aW4gY2hpcC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIGNoZWNrYm94LWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgY29sb3I6IGJsYWNrO1xufVxuXG4vLyBib3JkZXJzXG5cbkBtaXhpbiBtY2stY2hlY2tib3gtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAycHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLXRoaW4tYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlci1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJvcmRlci1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50LWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXItbGlnaHQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5cbi8vIGZ1bmN0aW9uc1xuXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbkBtaXhpbiBtYXgtbGluZXMoJGNvdW50KSB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAtd2Via2l0LWxpbmUtY2xhbXA6ICRjb3VudDtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuXG4vLyBpbWFnZXNcbkBtaXhpbiBtY2staWNvbigkd2lkdGgsICRhc3NldCwgJGhlaWdodDogJHdpZHRoLCAgJGFzc2V0UGF0aDogXCJsaWJzL3VpL3NyYy9saWIvaWNvbnNcIiwpIHtcbiAgICB3aWR0aDogJHdpZHRoO1xuICAgIGhlaWdodDogJGhlaWdodDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIjeyRhc3NldFBhdGh9LyN7JGFzc2V0fVwiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG59XG5cblxuQG1peGluIG1jay1zbWFsbC1pY29uKCRtb2JpbGUtYXNzZXQsICRkZXNrdG9wLWFzc2V0OiAkbW9iaWxlLWFzc2V0KSB7XG4gICAgQGluY2x1ZGUgbWNrLWljb24oMTZweCwgJGFzc2V0OiAkbW9iaWxlLWFzc2V0KTtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oMjRweCwgJGFzc2V0OiAkZGVza3RvcC1hc3NldCk7XG4gICAgfVxufVxuXG4vLyBza2VsZXRvblxuQG1peGluIHNrZWxldG9uLWJnIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItaW1hZ2Utc2l6ZSB7XG4gICAgd2lkdGg6IDgxcHg7XG4gICAgaGVpZ2h0OiA4MnB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMjE5cHg7XG4gICAgICAgIGhlaWdodDogMTE5cHg7XG4gICAgfVxufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItc3RhdHVzLXNpemUge1xuICAgIHdpZHRoOiAxMTdweDtcbiAgICBoZWlnaHQ6IDc4cHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAxMTdweDtcbiAgICAgICAgaGVpZ2h0OiA3OHB4O1xuICAgIH1cbn1cbiIsIi8vIEltcG9ydCBhbGwgdGhlIHRoZW1pbmcgZnVuY3Rpb25hbGl0eS5cbi8vIFdlIHdhbnQgb3ZlcmxheXMgdG8gYWx3YXlzIGFwcGVhciBvdmVyIHVzZXIgY29udGVudCwgc28gc2V0IGEgYmFzZWxpbmVcbi8vIHZlcnkgaGlnaCB6LWluZGV4IGZvciB0aGUgb3ZlcmxheSBjb250YWluZXIsIHdoaWNoIGlzIHdoZXJlIHdlIGNyZWF0ZSB0aGUgbmV3XG4vLyBzdGFja2luZyBjb250ZXh0IGZvciBhbGwgb3ZlcmxheXMuXG4kY2RrLXotaW5kZXgtb3ZlcmxheS1jb250YWluZXI6IDEwMDAgIWRlZmF1bHQ7XG4kY2RrLXotaW5kZXgtb3ZlcmxheTogMTAwMCAhZGVmYXVsdDtcbiRjZGstei1pbmRleC1vdmVybGF5LWJhY2tkcm9wOiAxMDAwICFkZWZhdWx0O1xuXG4vLyBCYWNrZ3JvdW5kIGNvbG9yIGZvciBhbGwgb2YgdGhlIGJhY2tkcm9wc1xuJGNkay1vdmVybGF5LWRhcmstYmFja2Ryb3AtYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjMyKSAhZGVmYXVsdDtcblxuLy8gRGVmYXVsdCBiYWNrZHJvcCBhbmltYXRpb24gaXMgYmFzZWQgb24gdGhlIE1hdGVyaWFsIERlc2lnbiBzd2lmdC1lYXNlLW91dC5cbiRiYWNrZHJvcC1hbmltYXRpb24tZHVyYXRpb246IDQwMG1zICFkZWZhdWx0O1xuJGJhY2tkcm9wLWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpICFkZWZhdWx0O1xuXG5cbkBtaXhpbiBjZGstb3ZlcmxheSgpIHtcbiAgLmNkay1vdmVybGF5LWNvbnRhaW5lciwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyIHtcbiAgICAvLyBEaXNhYmxlIGV2ZW50cyBmcm9tIGJlaW5nIGNhcHR1cmVkIG9uIHRoZSBvdmVybGF5IGNvbnRhaW5lci5cbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcblxuICAgIC8vIFRoZSBjb250YWluZXIgc2hvdWxkIGJlIHRoZSBzaXplIG9mIHRoZSB2aWV3cG9ydC5cbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICAvLyBUaGUgb3ZlcmxheS1jb250YWluZXIgaXMgYW4gaW52aXNpYmxlIGVsZW1lbnQgd2hpY2ggY29udGFpbnMgYWxsIGluZGl2aWR1YWwgb3ZlcmxheXMuXG4gIC5jZGstb3ZlcmxheS1jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB6LWluZGV4OiAkY2RrLXotaW5kZXgtb3ZlcmxheS1jb250YWluZXI7XG5cbiAgICAmOmVtcHR5IHtcbiAgICAgIC8vIEhpZGUgdGhlIGVsZW1lbnQgd2hlbiBpdCBkb2Vzbid0IGhhdmUgYW55IGNoaWxkIG5vZGVzLiBUaGlzIGRvZXNuJ3RcbiAgICAgIC8vIGluY2x1ZGUgb3ZlcmxheXMgdGhhdCBoYXZlIGJlZW4gZGV0YWNoZWQsIHJhdGhlciB0aGFuIGRpc3Bvc2VkLlxuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAvLyBXZSB1c2UgYW4gZXh0cmEgd3JhcHBlciBlbGVtZW50IGluIG9yZGVyIHRvIHVzZSBtYWtlIHRoZSBvdmVybGF5IGl0c2VsZiBhIGZsZXggaXRlbS5cbiAgLy8gVGhpcyBtYWtlcyBjZW50ZXJpbmcgdGhlIG92ZXJsYXkgZWFzeSB3aXRob3V0IHJ1bm5pbmcgaW50byB0aGUgc3VicGl4ZWwgcmVuZGVyaW5nXG4gIC8vIHByb2JsZW1zIHRpZWQgdG8gdXNpbmcgYHRyYW5zZm9ybWAgYW5kIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCB0aGUgb3RoZXIgcG9zaXRpb25cbiAgLy8gc3RyYXRlZ2llcy5cbiAgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB6LWluZGV4OiAkY2RrLXotaW5kZXgtb3ZlcmxheTtcbiAgfVxuXG4gIC8vIEEgc2luZ2xlIG92ZXJsYXkgcGFuZS5cbiAgLmNkay1vdmVybGF5LXBhbmUge1xuICAgIC8vIE5vdGU6IGl0J3MgaW1wb3J0YW50IGZvciB0aGlzIG9uZSB0byBzdGFydCBvZmYgYGFic29sdXRlYCxcbiAgICAvLyBpbiBvcmRlciBmb3IgdXMgdG8gYmUgYWJsZSB0byBtZWFzdXJlIGl0IGNvcnJlY3RseS5cbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB6LWluZGV4OiAkY2RrLXotaW5kZXgtb3ZlcmxheTtcblxuICAgIC8vIEZvciBjb25uZWN0ZWQtcG9zaXRpb24gb3ZlcmxheXMsIHdlIHNldCBgZGlzcGxheTogZmxleGAgaW5cbiAgICAvLyBvcmRlciB0byBmb3JjZSBgbWF4LXdpZHRoYCBhbmQgYG1heC1oZWlnaHRgIHRvIHRha2UgZWZmZWN0LlxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gIH1cblxuICAuY2RrLW92ZXJsYXktYmFja2Ryb3Age1xuICAgIC8vIFRPRE8oamVsYm91cm4pOiByZXVzZSBzaWRlbmF2IGZ1bGxzY3JlZW4gbWl4aW4uXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcblxuICAgIHotaW5kZXg6ICRjZGstei1pbmRleC1vdmVybGF5LWJhY2tkcm9wO1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAkYmFja2Ryb3AtYW5pbWF0aW9uLWR1cmF0aW9uICRiYWNrZHJvcC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uO1xuICAgIG9wYWNpdHk6IDA7XG5cbiAgICAmLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmcge1xuICAgICAgb3BhY2l0eTogMTtcblxuICAgICAgLy8gSW4gaGlnaCBjb250cmFzdCBtb2RlIHRoZSByZ2JhIGJhY2tncm91bmQgd2lsbCBiZWNvbWUgc29saWQgc28gd2UgbmVlZCB0byBmYWxsIGJhY2tcbiAgICAgIC8vIHRvIG1ha2luZyBpdCBvcGFxdWUgdXNpbmcgYG9wYWNpdHlgLiBOb3RlIHRoYXQgd2UgY2FuJ3QgdXNlIHRoZSBgY2RrLWhpZ2gtY29udHJhc3RgXG4gICAgICAvLyBtaXhpbiwgYmVjYXVzZSB3ZSBjYW4ndCBub3JtYWxpemUgdGhlIGltcG9ydCBwYXRoIHRvIHRoZSBfYTExeS5zY3NzIGJvdGggZm9yIHRoZVxuICAgICAgLy8gc291cmNlIGFuZCB3aGVuIHRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZC4gU2VlICMxMDkwOC5cbiAgICAgIEBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSB7XG4gICAgICAgIG9wYWNpdHk6IDAuNjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcCB7XG4gICAgYmFja2dyb3VuZDogJGNkay1vdmVybGF5LWRhcmstYmFja2Ryb3AtYmFja2dyb3VuZDtcbiAgfVxuXG4gIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCB7XG4gICAgLy8gTm90ZTogYXMgb2YgRmlyZWZveCA1NywgaGF2aW5nIHRoZSBiYWNrZHJvcCBiZSBgYmFja2dyb3VuZDogbm9uZWAgd2lsbCBwcmV2ZW50IGl0IGZyb21cbiAgICAvLyBjYXB0dXJpbmcgdGhlIHVzZXIncyBtb3VzZSBzY3JvbGwgZXZlbnRzLiBTaW5jZSB3ZSBhbHNvIGNhbid0IHVzZSBzb21ldGhpbmcgbGlrZVxuICAgIC8vIGByZ2JhKDAsIDAsIDAsIDApYCwgd2Ugd29yayBhcm91bmQgdGhlIGluY29uc2lzdGVuY3kgYnkgbm90IHNldHRpbmcgdGhlIGJhY2tncm91bmQgYXRcbiAgICAvLyBhbGwgYW5kIHVzaW5nIGBvcGFjaXR5YCB0byBtYWtlIHRoZSBlbGVtZW50IHRyYW5zcGFyZW50LlxuICAgICYsICYuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyB7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgfVxuXG4gIC8vIE92ZXJsYXkgcGFyZW50IGVsZW1lbnQgdXNlZCB3aXRoIHRoZSBjb25uZWN0ZWQgcG9zaXRpb24gc3RyYXRlZ3kuIFVzZWQgdG8gY29uc3RyYWluIHRoZVxuICAvLyBvdmVybGF5IGVsZW1lbnQncyBzaXplIHRvIGZpdCB3aXRoaW4gdGhlIHZpZXdwb3J0LlxuICAuY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHotaW5kZXg6ICRjZGstei1pbmRleC1vdmVybGF5O1xuXG4gICAgLy8gV2UgdXNlIGBkaXNwbGF5OiBmbGV4YCBvbiB0aGlzIGVsZW1lbnQgZXhjbHVzaXZlbHkgZm9yIGNlbnRlcmluZyBjb25uZWN0ZWQgb3ZlcmxheXMuXG4gICAgLy8gV2hlbiAqbm90KiBjZW50ZXJpbmcsIGEgdG9wL2xlZnQvYm90dG9tL3JpZ2h0IHdpbGwgYmUgc2V0IHdoaWNoIG92ZXJyaWRlcyB0aGUgbm9ybWFsXG4gICAgLy8gZmxleCBsYXlvdXQuXG4gICAgZGlzcGxheTogZmxleDtcblxuICAgIC8vIFdlIHVzZSB0aGUgYGNvbHVtbmAgZGlyZWN0aW9uIGhlcmUgdG8gYXZvaWQgc29tZSBmbGV4Ym94IGlzc3VlcyBpbiBFZGdlXG4gICAgLy8gd2hlbiB1c2luZyB0aGUgXCJncm93IGFmdGVyIG9wZW5cIiBvcHRpb25zLlxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgICAvLyBBZGQgc29tZSBkaW1lbnNpb25zIHNvIHRoZSBlbGVtZW50IGhhcyBhbiBgaW5uZXJUZXh0YCB3aGljaCBzb21lIHBlb3BsZSBkZXBlbmQgb24gaW4gdGVzdHMuXG4gICAgbWluLXdpZHRoOiAxcHg7XG4gICAgbWluLWhlaWdodDogMXB4O1xuICB9XG5cbiAgLy8gVXNlZCB3aGVuIGRpc2FibGluZyBnbG9iYWwgc2Nyb2xsaW5nLlxuICAuY2RrLWdsb2JhbC1zY3JvbGxibG9jayB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuXG4gICAgLy8gTmVjZXNzYXJ5IGZvciB0aGUgY29udGVudCBub3QgdG8gbG9zZSBpdHMgd2lkdGguIE5vdGUgdGhhdCB3ZSdyZSB1c2luZyAxMDAlLCBpbnN0ZWFkIG9mXG4gICAgLy8gMTAwdncsIGJlY2F1c2UgMTAwdncgaW5jbHVkZXMgdGhlIHdpZHRoIHBsdXMgdGhlIHNjcm9sbGJhciwgd2hlcmVhcyAxMDAlIGlzIHRoZSB3aWR0aFxuICAgIC8vIHRoYXQgdGhlIGVsZW1lbnQgaGFkIGJlZm9yZSB3ZSBtYWRlIGl0IGBmaXhlZGAuXG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICAvLyBOb3RlOiB0aGlzIHdpbGwgYWx3YXlzIGFkZCBhIHNjcm9sbGJhciB0byB3aGF0ZXZlciBlbGVtZW50IGl0IGlzIG9uLCB3aGljaCBjYW5cbiAgICAvLyBwb3RlbnRpYWxseSByZXN1bHQgaW4gZG91YmxlIHNjcm9sbGJhcnMuIEl0IHNob3VsZG4ndCBiZSBhbiBpc3N1ZSwgYmVjYXVzZSB3ZSB3b24ndFxuICAgIC8vIGJsb2NrIHNjcm9sbGluZyBvbiBhIHBhZ2UgdGhhdCBkb2Vzbid0IGhhdmUgYSBzY3JvbGxiYXIgaW4gdGhlIGZpcnN0IHBsYWNlLlxuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxufVxuXG5AbWl4aW4gY2RrLWExMXkge1xuICAuY2RrLXZpc3VhbGx5LWhpZGRlbiB7XG4gICAgYm9yZGVyOiAwO1xuICAgIGNsaXA6IHJlY3QoMCAwIDAgMCk7XG4gICAgaGVpZ2h0OiAxcHg7XG4gICAgbWFyZ2luOiAtMXB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcGFkZGluZzogMDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgd2lkdGg6IDFweDtcblxuICAgIC8vIEF2b2lkIGJyb3dzZXJzIHJlbmRlcmluZyB0aGUgZm9jdXMgcmluZyBpbiBzb21lIGNhc2VzLlxuICAgIG91dGxpbmU6IDA7XG5cbiAgICAvLyBBdm9pZCBzb21lIGNhc2VzIHdoZXJlIHRoZSBicm93c2VyIHdpbGwgc3RpbGwgcmVuZGVyIHRoZSBuYXRpdmUgY29udHJvbHMgKHNlZSAjOTA0OSkuXG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcbiAgfVxufVxuXG4vLy8gRW1pdHMgdGhlIG1peGluJ3MgY29udGVudCBuZXN0ZWQgdW5kZXIgYCRzZWxlY3Rvci1jb250ZXh0YCBpZiBgJHNlbGVjdG9yLWNvbnRleHRgXG4vLy8gaXMgbm9uLWVtcHR5LlxuLy8vIEBwYXJhbSBzZWxlY3Rvci1jb250ZXh0IFRoZSBzZWxlY3RvciB1bmRlciB3aGljaCB0byBuZXN0IHRoZSBtaXhpbidzIGNvbnRlbnQuXG5AbWl4aW4gX2Nkay1vcHRpb25hbGx5LW5lc3QtY29udGVudCgkc2VsZWN0b3ItY29udGV4dCkge1xuICBAaWYgKCRzZWxlY3Rvci1jb250ZXh0ID09ICcnKSB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cbiAgQGVsc2Uge1xuICAgICN7JHNlbGVjdG9yLWNvbnRleHR9IHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfVxufVxuXG4vLy8gQXBwbGllcyBzdHlsZXMgZm9yIHVzZXJzIGluIGhpZ2ggY29udHJhc3QgbW9kZS4gTm90ZSB0aGF0IHRoaXMgb25seSBhcHBsaWVzXG4vLy8gdG8gTWljcm9zb2Z0IGJyb3dzZXJzLiBDaHJvbWUgY2FuIGJlIGluY2x1ZGVkIGJ5IGNoZWNraW5nIGZvciB0aGUgYGh0bWxbaGNdYFxuLy8vIGF0dHJpYnV0ZSwgaG93ZXZlciBDaHJvbWUgaGFuZGxlcyBoaWdoIGNvbnRyYXN0IGRpZmZlcmVudGx5LlxuLy8vXG4vLy8gQHBhcmFtIHRhcmdldCBXaGljaCBraW5kIG9mIGhpZ2ggY29udHJhc3Qgc2V0dGluZyB0byB0YXJnZXQuIERlZmF1bHRzIHRvIGBhY3RpdmVgLCBjYW4gYmVcbi8vLyAgICBgd2hpdGUtb24tYmxhY2tgIG9yIGBibGFjay1vbi13aGl0ZWAuXG4vLy8gQHBhcmFtIGVuY2Fwc3VsYXRpb24gV2hldGhlciB0byBlbWl0IHN0eWxlcyBmb3IgdmlldyBlbmNhcHN1bGF0aW9uLiBWYWx1ZXMgYXJlOlxuLy8vICAgICAqIGBvbmAgLSB3b3JrcyBmb3IgYEVtdWxhdGVkYCwgYE5hdGl2ZWAsIGFuZCBgU2hhZG93RG9tYFxuLy8vICAgICAqIGBvZmZgIC0gd29ya3MgZm9yIGBOb25lYFxuLy8vICAgICAqIGBhbnlgIC0gd29ya3MgZm9yIGFsbCBlbmNhcHN1bGF0aW9uIG1vZGVzIGJ5IGVtaXR0aW5nIHRoZSBDU1MgdHdpY2UgKGRlZmF1bHQpLlxuQG1peGluIGNkay1oaWdoLWNvbnRyYXN0KCR0YXJnZXQ6IGFjdGl2ZSwgJGVuY2Fwc3VsYXRpb246ICdhbnknKSB7XG4gIEBpZiAoJHRhcmdldCAhPSAnYWN0aXZlJyBhbmQgJHRhcmdldCAhPSAnYmxhY2stb24td2hpdGUnIGFuZCAkdGFyZ2V0ICE9ICd3aGl0ZS1vbi1ibGFjaycpIHtcbiAgICBAZXJyb3IgJ1Vua25vd24gY2RrLWhpZ2gtY29udHJhc3QgdmFsdWUgXCIjeyR0YXJnZXR9XCIgcHJvdmlkZWQuICcgK1xuICAgICAgICAgICAnQWxsb3dlZCB2YWx1ZXMgYXJlIFwiYWN0aXZlXCIsIFwiYmxhY2stb24td2hpdGVcIiwgYW5kIFwid2hpdGUtb24tYmxhY2tcIic7XG4gIH1cblxuICBAaWYgKCRlbmNhcHN1bGF0aW9uICE9ICdvbicgYW5kICRlbmNhcHN1bGF0aW9uICE9ICdvZmYnIGFuZCAkZW5jYXBzdWxhdGlvbiAhPSAnYW55Jykge1xuICAgIEBlcnJvciAnVW5rbm93biBjZGstaGlnaC1jb250cmFzdCBlbmNhcHN1bGF0aW9uIFwiI3skZW5jYXBzdWxhdGlvbn1cIiBwcm92aWRlZC4gJyArXG4gICAgICAgICAgICdBbGxvd2VkIHZhbHVlcyBhcmUgXCJvblwiLCBcIm9mZlwiLCBhbmQgXCJhbnlcIic7XG4gIH1cblxuICAvLyBJZiB0aGUgc2VsZWN0b3IgY29udGV4dCBoYXMgbXVsdGlwbGUgcGFydHMsIHN1Y2ggYXMgYC5zZWN0aW9uLCAucmVnaW9uYCwganVzdCBkb2luZ1xuICAvLyBgLmNkay1oaWdoLWNvbnRyYXN0LXh4eCAjeyZ9YCB3aWxsIG9ubHkgYXBwbHkgdGhlIHBhcmVudCBzZWxlY3RvciB0byB0aGUgZmlyc3QgcGFydCBvZiB0aGVcbiAgLy8gY29udGV4dC4gV2UgYWRkcmVzcyB0aGlzIGJ5IG5lc3RpbmcgdGhlIHNlbGVjdG9yIGNvbnRleHQgdW5kZXIgLmNkay1oaWdoLWNvbnRyYXN0LlxuICBAYXQtcm9vdCB7XG4gICAgJHNlbGVjdG9yLWNvbnRleHQ6ICN7Jn07XG5cbiAgICBAaWYgKCRlbmNhcHN1bGF0aW9uICE9ICdvbicpIHtcbiAgICAgIC5jZGstaGlnaC1jb250cmFzdC0jeyR0YXJnZXR9IHtcbiAgICAgICAgQGluY2x1ZGUgX2Nkay1vcHRpb25hbGx5LW5lc3QtY29udGVudCgkc2VsZWN0b3ItY29udGV4dCkge1xuICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGlmICgkZW5jYXBzdWxhdGlvbiAhPSAnb2ZmJykge1xuICAgICAgLmNkay1oaWdoLWNvbnRyYXN0LSN7JHRhcmdldH0gOmhvc3Qge1xuICAgICAgICBAaW5jbHVkZSBfY2RrLW9wdGlvbmFsbHktbmVzdC1jb250ZW50KCRzZWxlY3Rvci1jb250ZXh0KSB7XG4gICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gQ29yZSBzdHlsZXMgdGhhdCBlbmFibGUgbW9uaXRvcmluZyBhdXRvZmlsbCBzdGF0ZSBvZiB0ZXh0IGZpZWxkcy5cbkBtaXhpbiBjZGstdGV4dC1maWVsZCB7XG4gIC8vIEtleWZyYW1lcyB0aGF0IGFwcGx5IG5vIHN0eWxlcywgYnV0IGFsbG93IHVzIHRvIG1vbml0b3Igd2hlbiBhbiB0ZXh0IGZpZWxkIGJlY29tZXMgYXV0b2ZpbGxlZFxuICAvLyBieSB3YXRjaGluZyBmb3IgdGhlIGFuaW1hdGlvbiBldmVudHMgdGhhdCBhcmUgZmlyZWQgd2hlbiB0aGV5IHN0YXJ0LiBOb3RlOiB0aGUgLyohKi8gY29tbWVudCBpc1xuICAvLyBuZWVkZWQgdG8gcHJldmVudCBMaWJTYXNzIGZyb20gc3RyaXBwaW5nIHRoZSBrZXlmcmFtZXMgb3V0LlxuICAvLyBCYXNlZCBvbjogaHR0cHM6Ly9tZWRpdW0uY29tL0BicnVubi9kZXRlY3RpbmctYXV0b2ZpbGxlZC1maWVsZHMtaW4tamF2YXNjcmlwdC1hZWQ1OThkMjVkYTdcbiAgQGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCB7LyohKi99XG4gIEBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIHsvKiEqL31cblxuICAuY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOi13ZWJraXQtYXV0b2ZpbGwge1xuICAgIC8vIFNpbmNlIENocm9tZSA4MCB3ZSBuZWVkIGEgMW1zIGRlbGF5LCBvciB0aGUgYW5pbWF0aW9uc3RhcnQgZXZlbnQgd29uJ3QgZmlyZS5cbiAgICBhbmltYXRpb246IGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtcztcbiAgfVxuXG4gIC5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWQ6bm90KDotd2Via2l0LWF1dG9maWxsKSB7XG4gICAgLy8gU2luY2UgQ2hyb21lIDgwIHdlIG5lZWQgYSAxbXMgZGVsYXksIG9yIHRoZSBhbmltYXRpb25zdGFydCBldmVudCB3b24ndCBmaXJlLlxuICAgIGFuaW1hdGlvbjogY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtcztcbiAgfVxuXG4gIC8vIFJlbW92ZSB0aGUgcmVzaXplIGhhbmRsZSBvbiBhdXRvc2l6aW5nIHRleHRhcmVhcywgYmVjYXVzZSB3aGF0ZXZlciBoZWlnaHRcbiAgLy8gdGhlIHVzZXIgcmVzaXplZCB0byB3aWxsIGJlIG92ZXJ3cml0dGVuIG9uY2UgdGhleSBzdGFydCB0eXBpbmcgYWdhaW4uXG4gIHRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZSB7XG4gICAgcmVzaXplOiBub25lO1xuICB9XG5cbiAgLy8gVGhpcyBjbGFzcyBpcyB0ZW1wb3JhcmlseSBhcHBsaWVkIHRvIHRoZSB0ZXh0YXJlYSB3aGVuIGl0IGlzIGJlaW5nIG1lYXN1cmVkLiBJdCBpcyBpbW1lZGlhdGVseVxuICAvLyByZW1vdmVkIHdoZW4gbWVhc3VyaW5nIGlzIGNvbXBsZXRlLiBXZSB1c2UgYCFpbXBvcnRhbnRgIHJ1bGVzIGhlcmUgdG8gbWFrZSBzdXJlIHVzZXItc3BlY2lmaWVkXG4gIC8vIHJ1bGVzIGRvIG5vdCBpbnRlcmZlcmUgd2l0aCB0aGUgbWVhc3VyZW1lbnQuXG4gIHRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmcge1xuICAgIGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xuICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcbiAgICAvLyBIYXZpbmcgMnB4IHRvcCBhbmQgYm90dG9tIHBhZGRpbmcgc2VlbXMgdG8gZml4IGEgYnVnIHdoZXJlIENocm9tZSBnZXRzIGFuIGluY29ycmVjdFxuICAgIC8vIG1lYXN1cmVtZW50LiBXZSBqdXN0IGhhdmUgdG8gYWNjb3VudCBmb3IgaXQgbGF0ZXIgYW5kIHN1YnRyYWN0IGl0IG9mZiB0aGUgZmluYWwgcmVzdWx0LlxuICAgIHBhZGRpbmc6IDJweCAwICFpbXBvcnRhbnQ7XG4gICAgYm94LXNpemluZzogY29udGVudC1ib3ggIWltcG9ydGFudDtcbiAgfVxufVxuXG4vLyBVc2VkIHRvIGdlbmVyYXRlIFVJRHMgZm9yIGtleWZyYW1lcyB1c2VkIHRvIGNoYW5nZSB0aGUgdGV4dCBmaWVsZCBhdXRvZmlsbCBzdHlsZXMuXG4kY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItZnJhbWUtY291bnQ6IDA7XG5cbi8vIE1peGluIHVzZWQgdG8gYXBwbHkgY3VzdG9tIGJhY2tncm91bmQgYW5kIGZvcmVncm91bmQgY29sb3JzIHRvIGFuIGF1dG9maWxsZWQgdGV4dCBmaWVsZC5cbi8vIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yNzgxNTQ5L1xuLy8gcmVtb3ZpbmctaW5wdXQtYmFja2dyb3VuZC1jb2xvdXItZm9yLWNocm9tZS1hdXRvY29tcGxldGUjYW5zd2VyLTM3NDMyMjYwXG5AbWl4aW4gY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3IoJGJhY2tncm91bmQsICRmb3JlZ3JvdW5kOicnKSB7XG4gIEBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItI3skY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtY29sb3ItZnJhbWUtY291bnR9IHtcbiAgICB0byB7XG4gICAgICBiYWNrZ3JvdW5kOiAkYmFja2dyb3VuZDtcbiAgICAgIEBpZiAkZm9yZWdyb3VuZCAhPSAnJyB7IGNvbG9yOiAkZm9yZWdyb3VuZDsgfVxuICAgIH1cbiAgfVxuXG4gICY6LXdlYmtpdC1hdXRvZmlsbCB7XG4gICAgYW5pbWF0aW9uOiBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci0jeyRjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1jb2xvci1mcmFtZS1jb3VudH0gYm90aDtcbiAgfVxuXG4gICYuY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOi13ZWJraXQtYXV0b2ZpbGwge1xuICAgIC8vIFNpbmNlIENocm9tZSA4MCB3ZSBuZWVkIGEgMW1zIGRlbGF5IGZvciBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCwgb3IgdGhlIGFuaW1hdGlvbnN0YXJ0XG4gICAgLy8gZXZlbnQgd29uJ3QgZmlyZS5cbiAgICBhbmltYXRpb246IGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtcyxcbiAgICAgICAgICAgICAgIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLSN7JGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLWZyYW1lLWNvdW50fSBib3RoO1xuICB9XG5cbiAgJGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLWZyYW1lLWNvdW50OlxuICAgICAgJGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yLWZyYW1lLWNvdW50ICsgMSAhZ2xvYmFsO1xufVxuXG5cbi8vIENvcmUgc3R5bGVzIHRoYXQgY2FuIGJlIHVzZWQgdG8gYXBwbHkgbWF0ZXJpYWwgZGVzaWduIHRyZWF0bWVudHMgdG8gYW55IGVsZW1lbnQuXG4vLyBNZWRpYSBxdWVyaWVzXG4vLyBUT0RPKGpvc2VwaHBlcnJvdHQpOiBDaGFuZ2UgJG1hdC14c21hbGwgYW5kICRtYXQtc21hbGwgdXNhZ2VzIHRvIHJlbHkgb24gQnJlYWtwb2ludE9ic2VydmVyLFxuJG1hdC14c21hbGw6ICdtYXgtd2lkdGg6IDU5OXB4JztcbiRtYXQtc21hbGw6ICdtYXgtd2lkdGg6IDk1OXB4JztcblxuLy8gVE9ETzogUmV2aXNpdCBhbGwgei1pbmRpY2VzIGJlZm9yZSBiZXRhXG4vLyB6LWluZGV4IG1hc3RlciBsaXN0XG5cbiR6LWluZGV4LWZhYjogMjAgIWRlZmF1bHQ7XG4kei1pbmRleC1kcmF3ZXI6IDEwMCAhZGVmYXVsdDtcblxuLy8gR2xvYmFsIGNvbnN0YW50c1xuJHBpOiAzLjE0MTU5MjY1O1xuXG4vLyBQYWRkaW5nIGJldHdlZW4gaW5wdXQgdG9nZ2xlcyBhbmQgdGhlaXIgbGFiZWxzXG4kbWF0LXRvZ2dsZS1wYWRkaW5nOiA4cHggIWRlZmF1bHQ7XG4vLyBXaWR0aCBhbmQgaGVpZ2h0IG9mIGlucHV0IHRvZ2dsZXNcbiRtYXQtdG9nZ2xlLXNpemU6IDIwcHggIWRlZmF1bHQ7XG5cbi8vIEVhc2luZyBDdXJ2ZXNcbi8vIFRPRE8oamVsYm91cm4pOiBhbGwgb2YgdGhlc2UgbmVlZCB0byBiZSByZXZpc2l0ZWRcblxuLy8gVGhlIGRlZmF1bHQgYW5pbWF0aW9uIGN1cnZlcyB1c2VkIGJ5IG1hdGVyaWFsIGRlc2lnbi5cbiRtYXQtbGluZWFyLW91dC1zbG93LWluLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKSAhZGVmYXVsdDtcbiRtYXQtZmFzdC1vdXQtc2xvdy1pbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgIWRlZmF1bHQ7XG4kbWF0LWZhc3Qtb3V0LWxpbmVhci1pbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDEsIDEpICFkZWZhdWx0O1xuXG4kZWFzZS1pbi1vdXQtY3VydmUtZnVuY3Rpb246IGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKSAhZGVmYXVsdDtcblxuJHN3aWZ0LWVhc2Utb3V0LWR1cmF0aW9uOiA0MDBtcyAhZGVmYXVsdDtcbiRzd2lmdC1lYXNlLW91dC10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpICFkZWZhdWx0O1xuJHN3aWZ0LWVhc2Utb3V0OiBhbGwgJHN3aWZ0LWVhc2Utb3V0LWR1cmF0aW9uICRzd2lmdC1lYXNlLW91dC10aW1pbmctZnVuY3Rpb24gIWRlZmF1bHQ7XG5cbiRzd2lmdC1lYXNlLWluLWR1cmF0aW9uOiAzMDBtcyAhZGVmYXVsdDtcbiRzd2lmdC1lYXNlLWluLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNTUsIDAsIDAuNTUsIDAuMikgIWRlZmF1bHQ7XG4kc3dpZnQtZWFzZS1pbjogYWxsICRzd2lmdC1lYXNlLWluLWR1cmF0aW9uICRzd2lmdC1lYXNlLWluLXRpbWluZy1mdW5jdGlvbiAhZGVmYXVsdDtcblxuJHN3aWZ0LWVhc2UtaW4tb3V0LWR1cmF0aW9uOiA1MDBtcyAhZGVmYXVsdDtcbiRzd2lmdC1lYXNlLWluLW91dC10aW1pbmctZnVuY3Rpb246ICRlYXNlLWluLW91dC1jdXJ2ZS1mdW5jdGlvbiAhZGVmYXVsdDtcbiRzd2lmdC1lYXNlLWluLW91dDogYWxsICRzd2lmdC1lYXNlLWluLW91dC1kdXJhdGlvbiAkc3dpZnQtZWFzZS1pbi1vdXQtdGltaW5nLWZ1bmN0aW9uICFkZWZhdWx0O1xuXG4kc3dpZnQtbGluZWFyLWR1cmF0aW9uOiA4MG1zICFkZWZhdWx0O1xuJHN3aWZ0LWxpbmVhci10aW1pbmctZnVuY3Rpb246IGxpbmVhciAhZGVmYXVsdDtcbiRzd2lmdC1saW5lYXI6IGFsbCAkc3dpZnQtbGluZWFyLWR1cmF0aW9uICRzd2lmdC1saW5lYXItdGltaW5nLWZ1bmN0aW9uICFkZWZhdWx0O1xuXG5cblxuLy8gQSBjb2xsZWN0aW9uIG9mIG1peGlucyBhbmQgQ1NTIGNsYXNzZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBhcHBseSBlbGV2YXRpb24gdG8gYSBtYXRlcmlhbFxuLy8gZWxlbWVudC5cbi8vIFNlZTogaHR0cHM6Ly9tYXRlcmlhbC5pby9kZXNpZ24vZW52aXJvbm1lbnQvZWxldmF0aW9uLmh0bWxcbi8vIEV4YW1wbGVzOlxuLy9cbi8vXG4vLyAubWF0LWZvbyB7XG4vLyAgIEBpbmNsdWRlICRtYXQtZWxldmF0aW9uKDIpO1xuLy9cbi8vICAgJjphY3RpdmUge1xuLy8gICAgIEBpbmNsdWRlICRtYXQtZWxldmF0aW9uKDgpO1xuLy8gICB9XG4vLyB9XG4vL1xuLy8gPGRpdiBpZD1cImV4dGVybmFsLWNhcmRcIiBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejJcIj48cD5Tb21lIGNvbnRlbnQ8L3A+PC9kaXY+XG4vL1xuLy8gRm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBkZXNpZ24gYmVoaW5kIGhvdyBlbGV2YXRpb24gaXMgaW1wbGVtZW50ZWQsIHNlZSB0aGUgZGVzaWduIGRvYyBhdFxuLy8gaHR0cHM6Ly9nb28uZ2wvS3EwazlaLlxuXG4vLyBDb2xvcnMgZm9yIHVtYnJhLCBwZW51bWJyYSwgYW5kIGFtYmllbnQgc2hhZG93cy4gQXMgZGVzY3JpYmVkIGluIHRoZSBkZXNpZ24gZG9jLCBlYWNoIGVsZXZhdGlvblxuLy8gbGV2ZWwgaXMgY3JlYXRlZCB1c2luZyBhIHNldCBvZiAzIHNoYWRvdyB2YWx1ZXMsIG9uZSBmb3IgdW1icmEgKHRoZSBzaGFkb3cgcmVwcmVzZW50aW5nIHRoZVxuLy8gc3BhY2UgY29tcGxldGVseSBvYnNjdXJlZCBieSBhbiBvYmplY3QgcmVsYXRpdmUgdG8gaXRzIGxpZ2h0IHNvdXJjZSksIG9uZSBmb3IgcGVudW1icmEgKHRoZVxuLy8gc3BhY2UgcGFydGlhbGx5IG9ic2N1cmVkIGJ5IGFuIG9iamVjdCksIGFuZCBvbmUgZm9yIGFtYmllbnQgKHRoZSBzcGFjZSB3aGljaCBjb250YWlucyB0aGUgb2JqZWN0XG4vLyBpdHNlbGYpLiBGb3IgYSBmdXJ0aGVyIGV4cGxhbmF0aW9uIG9mIHRoZXNlIHRlcm1zIGFuZCB0aGVpciBtZWFuaW5ncywgc2VlXG4vLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9VbWJyYSxfcGVudW1icmFfYW5kX2FudHVtYnJhLlxuXG4vLyBNYXBzIGZvciB0aGUgZGlmZmVyZW50IHNoYWRvdyBzZXRzIGFuZCB0aGVpciB2YWx1ZXMgd2l0aGluIGVhY2ggei1zcGFjZS4gVGhlc2UgdmFsdWVzIHdlcmVcbi8vIGNyZWF0ZWQgYnkgdGFraW5nIGEgZmV3IHJlZmVyZW5jZSBzaGFkb3cgc2V0cyBjcmVhdGVkIGJ5IEdvb2dsZSdzIERlc2lnbmVycyBhbmQgaW50ZXJwb2xhdGluZ1xuLy8gYWxsIG9mIHRoZSB2YWx1ZXMgYmV0d2VlbiB0aGVtLlxuXG5AZnVuY3Rpb24gX2dldC11bWJyYS1tYXAoJGNvbG9yLCAkb3BhY2l0eSkge1xuICAkc2hhZG93LWNvbG9yOiBpZih0eXBlLW9mKCRjb2xvcikgPT0gY29sb3IsIHJnYmEoJGNvbG9yLCAkb3BhY2l0eSAqIDAuMiksICRjb2xvcik7XG5cbiAgQHJldHVybiAoXG4gICAgMDogJzBweCAwcHggMHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxOiAnMHB4IDJweCAxcHggLTFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyOiAnMHB4IDNweCAxcHggLTJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAzOiAnMHB4IDNweCAzcHggLTJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA0OiAnMHB4IDJweCA0cHggLTFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA1OiAnMHB4IDNweCA1cHggLTFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA2OiAnMHB4IDNweCA1cHggLTFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA3OiAnMHB4IDRweCA1cHggLTJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA4OiAnMHB4IDVweCA1cHggLTNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA5OiAnMHB4IDVweCA2cHggLTNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMDogJzBweCA2cHggNnB4IC0zcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTE6ICcwcHggNnB4IDdweCAtNHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEyOiAnMHB4IDdweCA4cHggLTRweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMzogJzBweCA3cHggOHB4IC00cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTQ6ICcwcHggN3B4IDlweCAtNHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE1OiAnMHB4IDhweCA5cHggLTVweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNjogJzBweCA4cHggMTBweCAtNXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE3OiAnMHB4IDhweCAxMXB4IC01cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTg6ICcwcHggOXB4IDExcHggLTVweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxOTogJzBweCA5cHggMTJweCAtNnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIwOiAnMHB4IDEwcHggMTNweCAtNnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIxOiAnMHB4IDEwcHggMTNweCAtNnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIyOiAnMHB4IDEwcHggMTRweCAtNnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIzOiAnMHB4IDExcHggMTRweCAtN3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDI0OiAnMHB4IDExcHggMTVweCAtN3B4ICN7JHNoYWRvdy1jb2xvcn0nXG4gICk7XG59XG5cbkBmdW5jdGlvbiBfZ2V0LXBlbnVtYnJhLW1hcCgkY29sb3IsICRvcGFjaXR5KSB7XG4gICRzaGFkb3ctY29sb3I6IGlmKHR5cGUtb2YoJGNvbG9yKSA9PSBjb2xvciwgcmdiYSgkY29sb3IsICRvcGFjaXR5ICogMC4xNCksICRjb2xvcik7XG5cbiAgQHJldHVybiAoXG4gICAgMDogJzBweCAwcHggMHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxOiAnMHB4IDFweCAxcHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDI6ICcwcHggMnB4IDJweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMzogJzBweCAzcHggNHB4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICA0OiAnMHB4IDRweCA1cHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDU6ICcwcHggNXB4IDhweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNjogJzBweCA2cHggMTBweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNzogJzBweCA3cHggMTBweCAxcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgODogJzBweCA4cHggMTBweCAxcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgOTogJzBweCA5cHggMTJweCAxcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTA6ICcwcHggMTBweCAxNHB4IDFweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMTogJzBweCAxMXB4IDE1cHggMXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDEyOiAnMHB4IDEycHggMTdweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTM6ICcwcHggMTNweCAxOXB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNDogJzBweCAxNHB4IDIxcHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE1OiAnMHB4IDE1cHggMjJweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTY6ICcwcHggMTZweCAyNHB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNzogJzBweCAxN3B4IDI2cHggMnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE4OiAnMHB4IDE4cHggMjhweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTk6ICcwcHggMTlweCAyOXB4IDJweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMDogJzBweCAyMHB4IDMxcHggM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIxOiAnMHB4IDIxcHggMzNweCAzcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjI6ICcwcHggMjJweCAzNXB4IDNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMzogJzBweCAyM3B4IDM2cHggM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDI0OiAnMHB4IDI0cHggMzhweCAzcHggI3skc2hhZG93LWNvbG9yfSdcbiAgKTtcbn1cblxuQGZ1bmN0aW9uIF9nZXQtYW1iaWVudC1tYXAoJGNvbG9yLCAkb3BhY2l0eSkge1xuICAkc2hhZG93LWNvbG9yOiBpZih0eXBlLW9mKCRjb2xvcikgPT0gY29sb3IsIHJnYmEoJGNvbG9yLCAkb3BhY2l0eSAqIDAuMTIpLCAkY29sb3IpO1xuXG4gIEByZXR1cm4gKFxuICAgIDA6ICcwcHggMHB4IDBweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTogJzBweCAxcHggM3B4IDBweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyOiAnMHB4IDFweCA1cHggMHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDM6ICcwcHggMXB4IDhweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNDogJzBweCAxcHggMTBweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNTogJzBweCAxcHggMTRweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNjogJzBweCAxcHggMThweCAwcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgNzogJzBweCAycHggMTZweCAxcHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgODogJzBweCAzcHggMTRweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgOTogJzBweCAzcHggMTZweCAycHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTA6ICcwcHggNHB4IDE4cHggM3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDExOiAnMHB4IDRweCAyMHB4IDNweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxMjogJzBweCA1cHggMjJweCA0cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTM6ICcwcHggNXB4IDI0cHggNHB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE0OiAnMHB4IDVweCAyNnB4IDRweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxNTogJzBweCA2cHggMjhweCA1cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTY6ICcwcHggNnB4IDMwcHggNXB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDE3OiAnMHB4IDZweCAzMnB4IDVweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAxODogJzBweCA3cHggMzRweCA2cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMTk6ICcwcHggN3B4IDM2cHggNnB4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIwOiAnMHB4IDhweCAzOHB4IDdweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyMTogJzBweCA4cHggNDBweCA3cHggI3skc2hhZG93LWNvbG9yfScsXG4gICAgMjI6ICcwcHggOHB4IDQycHggN3B4ICN7JHNoYWRvdy1jb2xvcn0nLFxuICAgIDIzOiAnMHB4IDlweCA0NHB4IDhweCAjeyRzaGFkb3ctY29sb3J9JyxcbiAgICAyNDogJzBweCA5cHggNDZweCA4cHggI3skc2hhZG93LWNvbG9yfSdcbiAgKTtcbn1cblxuLy8gVGhlIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIGVsZXZhdGlvbiB0cmFuc2l0aW9ucy5cbiRtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tZHVyYXRpb246IDI4MG1zICFkZWZhdWx0O1xuXG4vLyBUaGUgZGVmYXVsdCBlYXNpbmcgdmFsdWUgZm9yIGVsZXZhdGlvbiB0cmFuc2l0aW9ucy5cbiRtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkbWF0LWZhc3Qtb3V0LXNsb3ctaW4tdGltaW5nLWZ1bmN0aW9uO1xuXG4vLyBUaGUgZGVmYXVsdCBjb2xvciBmb3IgZWxldmF0aW9uIHNoYWRvd3MuXG4kbWF0LWVsZXZhdGlvbi1jb2xvcjogYmxhY2sgIWRlZmF1bHQ7XG5cbi8vIFRoZSBkZWZhdWx0IG9wYWNpdHkgc2NhbGluZyB2YWx1ZSBmb3IgZWxldmF0aW9uIHNoYWRvd3MuXG4kbWF0LWVsZXZhdGlvbi1vcGFjaXR5OiAxICFkZWZhdWx0O1xuXG4vLyBQcmVmaXggZm9yIGVsZXZhdGlvbi1yZWxhdGVkIHNlbGVjdG9ycy5cbiRfbWF0LWVsZXZhdGlvbi1wcmVmaXg6ICdtYXQtZWxldmF0aW9uLXonO1xuXG4vLyBBcHBsaWVzIHRoZSBjb3JyZWN0IGNzcyBydWxlcyB0byBhbiBlbGVtZW50IHRvIGdpdmUgaXQgdGhlIGVsZXZhdGlvbiBzcGVjaWZpZWQgYnkgJHpWYWx1ZS5cbi8vIFRoZSAkelZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyNC5cbkBtaXhpbiBtYXQtZWxldmF0aW9uKCR6VmFsdWUsICRjb2xvcjogJG1hdC1lbGV2YXRpb24tY29sb3IsICRvcGFjaXR5OiAkbWF0LWVsZXZhdGlvbi1vcGFjaXR5KSB7XG4gIEBpZiB0eXBlLW9mKCR6VmFsdWUpICE9IG51bWJlciBvciBub3QgdW5pdGxlc3MoJHpWYWx1ZSkge1xuICAgIEBlcnJvciAnJHpWYWx1ZSBtdXN0IGJlIGEgdW5pdGxlc3MgbnVtYmVyJztcbiAgfVxuICBAaWYgJHpWYWx1ZSA8IDAgb3IgJHpWYWx1ZSA+IDI0IHtcbiAgICBAZXJyb3IgJyR6VmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDI0JztcbiAgfVxuXG4gIGJveC1zaGFkb3c6ICN7bWFwLWdldChfZ2V0LXVtYnJhLW1hcCgkY29sb3IsICRvcGFjaXR5KSwgJHpWYWx1ZSl9LFxuICAgICAgICAgICAgICAje21hcC1nZXQoX2dldC1wZW51bWJyYS1tYXAoJGNvbG9yLCAkb3BhY2l0eSksICR6VmFsdWUpfSxcbiAgICAgICAgICAgICAgI3ttYXAtZ2V0KF9nZXQtYW1iaWVudC1tYXAoJGNvbG9yLCAkb3BhY2l0eSksICR6VmFsdWUpfTtcbn1cblxuQG1peGluIF9tYXQtdGhlbWUtZWxldmF0aW9uKCR6VmFsdWUsICR0aGVtZSwgJG9wYWNpdHk6ICRtYXQtZWxldmF0aW9uLW9wYWNpdHkpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGVsZXZhdGlvbi1jb2xvcjogbWFwLWdldCgkZm9yZWdyb3VuZCwgZWxldmF0aW9uKTtcbiAgJGVsZXZhdGlvbi1jb2xvci1vci1kZWZhdWx0OiBpZigkZWxldmF0aW9uLWNvbG9yID09IG51bGwsICRtYXQtZWxldmF0aW9uLWNvbG9yLCAkZWxldmF0aW9uLWNvbG9yKTtcblxuICBAaW5jbHVkZSBtYXQtZWxldmF0aW9uKCR6VmFsdWUsICRlbGV2YXRpb24tY29sb3Itb3ItZGVmYXVsdCwgJG9wYWNpdHkpO1xufVxuXG4vLyBBcHBsaWVzIHRoZSBlbGV2YXRpb24gdG8gYW4gZWxlbWVudCBpbiBhIG1hbm5lciB0aGF0IGFsbG93c1xuLy8gY29uc3VtZXJzIHRvIG92ZXJyaWRlIGl0IHZpYSB0aGUgTWF0ZXJpYWwgZWxldmF0aW9uIGNsYXNzZXMuXG5AbWl4aW4gbWF0LW92ZXJyaWRhYmxlLWVsZXZhdGlvbihcbiAgICAkelZhbHVlLFxuICAgICRjb2xvcjogJG1hdC1lbGV2YXRpb24tY29sb3IsXG4gICAgJG9wYWNpdHk6ICRtYXQtZWxldmF0aW9uLW9wYWNpdHkpIHtcbiAgJjpub3QoW2NsYXNzKj0nI3skX21hdC1lbGV2YXRpb24tcHJlZml4fSddKSB7XG4gICAgQGluY2x1ZGUgbWF0LWVsZXZhdGlvbigkelZhbHVlLCAkY29sb3IsICRvcGFjaXR5KTtcbiAgfVxufVxuXG5AbWl4aW4gX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oJHpWYWx1ZSwgJHRoZW1lLCAkb3BhY2l0eTogJG1hdC1lbGV2YXRpb24tb3BhY2l0eSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkZWxldmF0aW9uLWNvbG9yOiBtYXAtZ2V0KCRmb3JlZ3JvdW5kLCBlbGV2YXRpb24pO1xuICAkZWxldmF0aW9uLWNvbG9yLW9yLWRlZmF1bHQ6IGlmKCRlbGV2YXRpb24tY29sb3IgPT0gbnVsbCwgJG1hdC1lbGV2YXRpb24tY29sb3IsICRlbGV2YXRpb24tY29sb3IpO1xuXG4gIEBpbmNsdWRlIG1hdC1vdmVycmlkYWJsZS1lbGV2YXRpb24oJHpWYWx1ZSwgJGVsZXZhdGlvbi1jb2xvci1vci1kZWZhdWx0LCAkb3BhY2l0eSk7XG59XG5cbi8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBjYW4gYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yIGEgdHJhbnNpdGlvbiBwcm9wZXJ0eSBmb3IgZWxldmF0aW9uLlxuLy8gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5IGlzIHVzZWZ1bCBpbiBzaXR1YXRpb25zIHdoZXJlIGEgY29tcG9uZW50IG5lZWRzIHRvIHRyYW5zaXRpb25cbi8vIG1vcmUgdGhhbiBvbmUgcHJvcGVydHkuXG4vL1xuLy8gLmZvbyB7XG4vLyAgIHRyYW5zaXRpb246IG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi1wcm9wZXJ0eS12YWx1ZSgpLCBvcGFjaXR5IDEwMG1zIGVhc2U7XG4vLyB9XG5AZnVuY3Rpb24gbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLXByb3BlcnR5LXZhbHVlKFxuICAgICRkdXJhdGlvbjogJG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi1kdXJhdGlvbixcbiAgICAkZWFzaW5nOiAkbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikge1xuICBAcmV0dXJuIGJveC1zaGFkb3cgI3skZHVyYXRpb259ICN7JGVhc2luZ307XG59XG5cbi8vIEFwcGxpZXMgdGhlIGNvcnJlY3QgY3NzIHJ1bGVzIG5lZWRlZCB0byBoYXZlIGFuIGVsZW1lbnQgdHJhbnNpdGlvbiBiZXR3ZWVuIGVsZXZhdGlvbnMuXG4vLyBUaGlzIG1peGluIHNob3VsZCBiZSBhcHBsaWVkIHRvIGVsZW1lbnRzIHdob3NlIGVsZXZhdGlvbiB2YWx1ZXMgd2lsbCBjaGFuZ2UgZGVwZW5kaW5nIG9uIHRoZWlyXG4vLyBjb250ZXh0IChlLmcuIHdoZW4gYWN0aXZlIG9yIGRpc2FibGVkKS5cbi8vXG4vLyBOT1RFKHRyYXZpc2thdWZtYW4pOiBCb3RoIHRoaXMgbWl4aW4gYW5kIHRoZSBhYm92ZSBmdW5jdGlvbiB1c2UgZGVmYXVsdCBwYXJhbWV0ZXJzIHNvIHRoZXkgY2FuXG4vLyBiZSB1c2VkIGluIHRoZSBzYW1lIHdheSBieSBjbGllbnRzLlxuQG1peGluIG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbihcbiAgICAkZHVyYXRpb246ICRtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tZHVyYXRpb24sXG4gICAgJGVhc2luZzogJG1hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pIHtcbiAgdHJhbnNpdGlvbjogbWF0LWVsZXZhdGlvbi10cmFuc2l0aW9uLXByb3BlcnR5LXZhbHVlKCRkdXJhdGlvbiwgJGVhc2luZyk7XG59XG5cbi8vIENvbG9yIHBhbGV0dGVzIGZyb20gdGhlIE1hdGVyaWFsIERlc2lnbiBzcGVjLlxuLy8gU2VlIGh0dHBzOi8vbWF0ZXJpYWwuaW8vZGVzaWduL2NvbG9yL1xuLy9cbi8vIENvbnRyYXN0IGNvbG9ycyBhcmUgaGFyZC1jb2RlZCBiZWNhdXNlIGl0IGlzIHRvbyBkaWZmaWN1bHQgKHByb2JhYmx5IGltcG9zc2libGUpIHRvXG4vLyBjYWxjdWxhdGUgdGhlbS4gVGhlc2UgY29udHJhc3QgY29sb3JzIGFyZSBwdWxsZWQgZnJvbSB0aGUgcHVibGljIE1hdGVyaWFsIERlc2lnbiBzcGVjIHN3YXRjaGVzLlxuLy8gV2hpbGUgdGhlIGNvbnRyYXN0IGNvbG9ycyBpbiB0aGUgc3BlYyBhcmUgbm90IHByZXNjcmlwdGl2ZSwgd2UgdXNlIHRoZW0gZm9yIGNvbnZlbmllbmNlLlxuXG5cbi8vIEBkZXByZWNhdGVkIHJlbmFtZWQgdG8gJGRhcmstcHJpbWFyeS10ZXh0LlxuLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMFxuJGJsYWNrLTg3LW9wYWNpdHk6IHJnYmEoYmxhY2ssIDAuODcpO1xuLy8gQGRlcHJlY2F0ZWQgcmVuYW1lZCB0byAkbGlnaHQtcHJpbWFyeS10ZXh0LlxuLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMFxuJHdoaXRlLTg3LW9wYWNpdHk6IHJnYmEod2hpdGUsIDAuODcpO1xuLy8gQGRlcHJlY2F0ZWQgdXNlICRkYXJrLVtzZWNvbmRhcnktdGV4dCxkaXNhYmxlZC10ZXh0LGRpdmlkZXJzLGZvY3VzZWRdIGluc3RlYWQuXG4vLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wXG4kYmxhY2stMTItb3BhY2l0eTogcmdiYShibGFjaywgMC4xMik7XG4vLyBAZGVwcmVjYXRlZCB1c2UgJGxpZ2h0LVtzZWNvbmRhcnktdGV4dCxkaXNhYmxlZC10ZXh0LGRpdmlkZXJzLGZvY3VzZWRdIGluc3RlYWQuXG4vLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wXG4kd2hpdGUtMTItb3BhY2l0eTogcmdiYSh3aGl0ZSwgMC4xMik7XG4vLyBAZGVwcmVjYXRlZCB1c2UgJGRhcmstW3NlY29uZGFyeS10ZXh0LGRpc2FibGVkLXRleHQsZGl2aWRlcnMsZm9jdXNlZF0gaW5zdGVhZC5cbi8vIEBicmVha2luZy1jaGFuZ2UgOC4wLjBcbiRibGFjay02LW9wYWNpdHk6IHJnYmEoYmxhY2ssIDAuMDYpO1xuLy8gQGRlcHJlY2F0ZWQgdXNlICRsaWdodC1bc2Vjb25kYXJ5LXRleHQsZGlzYWJsZWQtdGV4dCxkaXZpZGVycyxmb2N1c2VkXSBpbnN0ZWFkLlxuLy8gQGJyZWFraW5nLWNoYW5nZSA4LjAuMFxuJHdoaXRlLTYtb3BhY2l0eTogcmdiYSh3aGl0ZSwgMC4wNik7XG5cbiRkYXJrLXByaW1hcnktdGV4dDogcmdiYShibGFjaywgMC44Nyk7XG4kZGFyay1zZWNvbmRhcnktdGV4dDogcmdiYShibGFjaywgMC41NCk7XG4kZGFyay1kaXNhYmxlZC10ZXh0OiByZ2JhKGJsYWNrLCAwLjM4KTtcbiRkYXJrLWRpdmlkZXJzOiByZ2JhKGJsYWNrLCAwLjEyKTtcbiRkYXJrLWZvY3VzZWQ6IHJnYmEoYmxhY2ssIDAuMTIpO1xuJGxpZ2h0LXByaW1hcnktdGV4dDogd2hpdGU7XG4kbGlnaHQtc2Vjb25kYXJ5LXRleHQ6IHJnYmEod2hpdGUsIDAuNyk7XG4kbGlnaHQtZGlzYWJsZWQtdGV4dDogcmdiYSh3aGl0ZSwgMC41KTtcbiRsaWdodC1kaXZpZGVyczogcmdiYSh3aGl0ZSwgMC4xMik7XG4kbGlnaHQtZm9jdXNlZDogcmdiYSh3aGl0ZSwgMC4xMik7XG5cbiRtYXQtcmVkOiAoXG4gIDUwOiAjZmZlYmVlLFxuICAxMDA6ICNmZmNkZDIsXG4gIDIwMDogI2VmOWE5YSxcbiAgMzAwOiAjZTU3MzczLFxuICA0MDA6ICNlZjUzNTAsXG4gIDUwMDogI2Y0NDMzNixcbiAgNjAwOiAjZTUzOTM1LFxuICA3MDA6ICNkMzJmMmYsXG4gIDgwMDogI2M2MjgyOCxcbiAgOTAwOiAjYjcxYzFjLFxuICBBMTAwOiAjZmY4YTgwLFxuICBBMjAwOiAjZmY1MjUyLFxuICBBNDAwOiAjZmYxNzQ0LFxuICBBNzAwOiAjZDUwMDAwLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtcGluazogKFxuICA1MDogI2ZjZTRlYyxcbiAgMTAwOiAjZjhiYmQwLFxuICAyMDA6ICNmNDhmYjEsXG4gIDMwMDogI2YwNjI5MixcbiAgNDAwOiAjZWM0MDdhLFxuICA1MDA6ICNlOTFlNjMsXG4gIDYwMDogI2Q4MWI2MCxcbiAgNzAwOiAjYzIxODViLFxuICA4MDA6ICNhZDE0NTcsXG4gIDkwMDogIzg4MGU0ZixcbiAgQTEwMDogI2ZmODBhYixcbiAgQTIwMDogI2ZmNDA4MSxcbiAgQTQwMDogI2Y1MDA1NyxcbiAgQTcwMDogI2M1MTE2MixcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LXB1cnBsZTogKFxuICA1MDogI2YzZTVmNSxcbiAgMTAwOiAjZTFiZWU3LFxuICAyMDA6ICNjZTkzZDgsXG4gIDMwMDogI2JhNjhjOCxcbiAgNDAwOiAjYWI0N2JjLFxuICA1MDA6ICM5YzI3YjAsXG4gIDYwMDogIzhlMjRhYSxcbiAgNzAwOiAjN2IxZmEyLFxuICA4MDA6ICM2YTFiOWEsXG4gIDkwMDogIzRhMTQ4YyxcbiAgQTEwMDogI2VhODBmYyxcbiAgQTIwMDogI2UwNDBmYixcbiAgQTQwMDogI2Q1MDBmOSxcbiAgQTcwMDogI2FhMDBmZixcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtZGVlcC1wdXJwbGU6IChcbiAgNTA6ICNlZGU3ZjYsXG4gIDEwMDogI2QxYzRlOSxcbiAgMjAwOiAjYjM5ZGRiLFxuICAzMDA6ICM5NTc1Y2QsXG4gIDQwMDogIzdlNTdjMixcbiAgNTAwOiAjNjczYWI3LFxuICA2MDA6ICM1ZTM1YjEsXG4gIDcwMDogIzUxMmRhOCxcbiAgODAwOiAjNDUyN2EwLFxuICA5MDA6ICMzMTFiOTIsXG4gIEExMDA6ICNiMzg4ZmYsXG4gIEEyMDA6ICM3YzRkZmYsXG4gIEE0MDA6ICM2NTFmZmYsXG4gIEE3MDA6ICM2MjAwZWEsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWluZGlnbzogKFxuICA1MDogI2U4ZWFmNixcbiAgMTAwOiAjYzVjYWU5LFxuICAyMDA6ICM5ZmE4ZGEsXG4gIDMwMDogIzc5ODZjYixcbiAgNDAwOiAjNWM2YmMwLFxuICA1MDA6ICMzZjUxYjUsXG4gIDYwMDogIzM5NDlhYixcbiAgNzAwOiAjMzAzZjlmLFxuICA4MDA6ICMyODM1OTMsXG4gIDkwMDogIzFhMjM3ZSxcbiAgQTEwMDogIzhjOWVmZixcbiAgQTIwMDogIzUzNmRmZSxcbiAgQTQwMDogIzNkNWFmZSxcbiAgQTcwMDogIzMwNGZmZSxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtYmx1ZTogKFxuICA1MDogI2UzZjJmZCxcbiAgMTAwOiAjYmJkZWZiLFxuICAyMDA6ICM5MGNhZjksXG4gIDMwMDogIzY0YjVmNixcbiAgNDAwOiAjNDJhNWY1LFxuICA1MDA6ICMyMTk2ZjMsXG4gIDYwMDogIzFlODhlNSxcbiAgNzAwOiAjMTk3NmQyLFxuICA4MDA6ICMxNTY1YzAsXG4gIDkwMDogIzBkNDdhMSxcbiAgQTEwMDogIzgyYjFmZixcbiAgQTIwMDogIzQ0OGFmZixcbiAgQTQwMDogIzI5NzlmZixcbiAgQTcwMDogIzI5NjJmZixcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWxpZ2h0LWJsdWU6IChcbiAgNTA6ICNlMWY1ZmUsXG4gIDEwMDogI2IzZTVmYyxcbiAgMjAwOiAjODFkNGZhLFxuICAzMDA6ICM0ZmMzZjcsXG4gIDQwMDogIzI5YjZmNixcbiAgNTAwOiAjMDNhOWY0LFxuICA2MDA6ICMwMzliZTUsXG4gIDcwMDogIzAyODhkMSxcbiAgODAwOiAjMDI3N2JkLFxuICA5MDA6ICMwMTU3OWIsXG4gIEExMDA6ICM4MGQ4ZmYsXG4gIEEyMDA6ICM0MGM0ZmYsXG4gIEE0MDA6ICMwMGIwZmYsXG4gIEE3MDA6ICMwMDkxZWEsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtY3lhbjogKFxuICA1MDogI2UwZjdmYSxcbiAgMTAwOiAjYjJlYmYyLFxuICAyMDA6ICM4MGRlZWEsXG4gIDMwMDogIzRkZDBlMSxcbiAgNDAwOiAjMjZjNmRhLFxuICA1MDA6ICMwMGJjZDQsXG4gIDYwMDogIzAwYWNjMSxcbiAgNzAwOiAjMDA5N2E3LFxuICA4MDA6ICMwMDgzOGYsXG4gIDkwMDogIzAwNjA2NCxcbiAgQTEwMDogIzg0ZmZmZixcbiAgQTIwMDogIzE4ZmZmZixcbiAgQTQwMDogIzAwZTVmZixcbiAgQTcwMDogIzAwYjhkNCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LXRlYWw6IChcbiAgNTA6ICNlMGYyZjEsXG4gIDEwMDogI2IyZGZkYixcbiAgMjAwOiAjODBjYmM0LFxuICAzMDA6ICM0ZGI2YWMsXG4gIDQwMDogIzI2YTY5YSxcbiAgNTAwOiAjMDA5Njg4LFxuICA2MDA6ICMwMDg5N2IsXG4gIDcwMDogIzAwNzk2YixcbiAgODAwOiAjMDA2OTVjLFxuICA5MDA6ICMwMDRkNDAsXG4gIEExMDA6ICNhN2ZmZWIsXG4gIEEyMDA6ICM2NGZmZGEsXG4gIEE0MDA6ICMxZGU5YjYsXG4gIEE3MDA6ICMwMGJmYTUsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE3MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuJG1hdC1ncmVlbjogKFxuICA1MDogI2U4ZjVlOSxcbiAgMTAwOiAjYzhlNmM5LFxuICAyMDA6ICNhNWQ2YTcsXG4gIDMwMDogIzgxYzc4NCxcbiAgNDAwOiAjNjZiYjZhLFxuICA1MDA6ICM0Y2FmNTAsXG4gIDYwMDogIzQzYTA0NyxcbiAgNzAwOiAjMzg4ZTNjLFxuICA4MDA6ICMyZTdkMzIsXG4gIDkwMDogIzFiNWUyMCxcbiAgQTEwMDogI2I5ZjZjYSxcbiAgQTIwMDogIzY5ZjBhZSxcbiAgQTQwMDogIzAwZTY3NixcbiAgQTcwMDogIzAwYzg1MyxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtbGlnaHQtZ3JlZW46IChcbiAgNTA6ICNmMWY4ZTksXG4gIDEwMDogI2RjZWRjOCxcbiAgMjAwOiAjYzVlMWE1LFxuICAzMDA6ICNhZWQ1ODEsXG4gIDQwMDogIzljY2M2NSxcbiAgNTAwOiAjOGJjMzRhLFxuICA2MDA6ICM3Y2IzNDIsXG4gIDcwMDogIzY4OWYzOCxcbiAgODAwOiAjNTU4YjJmLFxuICA5MDA6ICMzMzY5MWUsXG4gIEExMDA6ICNjY2ZmOTAsXG4gIEEyMDA6ICNiMmZmNTksXG4gIEE0MDA6ICM3NmZmMDMsXG4gIEE3MDA6ICM2NGRkMTcsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA3MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQtbGltZTogKFxuICA1MDogI2Y5ZmJlNyxcbiAgMTAwOiAjZjBmNGMzLFxuICAyMDA6ICNlNmVlOWMsXG4gIDMwMDogI2RjZTc3NSxcbiAgNDAwOiAjZDRlMTU3LFxuICA1MDA6ICNjZGRjMzksXG4gIDYwMDogI2MwY2EzMyxcbiAgNzAwOiAjYWZiNDJiLFxuICA4MDA6ICM5ZTlkMjQsXG4gIDkwMDogIzgyNzcxNyxcbiAgQTEwMDogI2Y0ZmY4MSxcbiAgQTIwMDogI2VlZmY0MSxcbiAgQTQwMDogI2M2ZmYwMCxcbiAgQTcwMDogI2FlZWEwMCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDkwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEE0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gIClcbik7XG5cbiRtYXQteWVsbG93OiAoXG4gIDUwOiAjZmZmZGU3LFxuICAxMDA6ICNmZmY5YzQsXG4gIDIwMDogI2ZmZjU5ZCxcbiAgMzAwOiAjZmZmMTc2LFxuICA0MDA6ICNmZmVlNTgsXG4gIDUwMDogI2ZmZWIzYixcbiAgNjAwOiAjZmRkODM1LFxuICA3MDA6ICNmYmMwMmQsXG4gIDgwMDogI2Y5YTgyNSxcbiAgOTAwOiAjZjU3ZjE3LFxuICBBMTAwOiAjZmZmZjhkLFxuICBBMjAwOiAjZmZmZjAwLFxuICBBNDAwOiAjZmZlYTAwLFxuICBBNzAwOiAjZmZkNjAwLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWFtYmVyOiAoXG4gIDUwOiAjZmZmOGUxLFxuICAxMDA6ICNmZmVjYjMsXG4gIDIwMDogI2ZmZTA4MixcbiAgMzAwOiAjZmZkNTRmLFxuICA0MDA6ICNmZmNhMjgsXG4gIDUwMDogI2ZmYzEwNyxcbiAgNjAwOiAjZmZiMzAwLFxuICA3MDA6ICNmZmEwMDAsXG4gIDgwMDogI2ZmOGYwMCxcbiAgOTAwOiAjZmY2ZjAwLFxuICBBMTAwOiAjZmZlNTdmLFxuICBBMjAwOiAjZmZkNzQwLFxuICBBNDAwOiAjZmZjNDAwLFxuICBBNzAwOiAjZmZhYjAwLFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgODAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LW9yYW5nZTogKFxuICA1MDogI2ZmZjNlMCxcbiAgMTAwOiAjZmZlMGIyLFxuICAyMDA6ICNmZmNjODAsXG4gIDMwMDogI2ZmYjc0ZCxcbiAgNDAwOiAjZmZhNzI2LFxuICA1MDA6ICNmZjk4MDAsXG4gIDYwMDogI2ZiOGMwMCxcbiAgNzAwOiAjZjU3YzAwLFxuICA4MDA6ICNlZjZjMDAsXG4gIDkwMDogI2U2NTEwMCxcbiAgQTEwMDogI2ZmZDE4MCxcbiAgQTIwMDogI2ZmYWI0MCxcbiAgQTQwMDogI2ZmOTEwMCxcbiAgQTcwMDogI2ZmNmQwMCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDUwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDYwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogYmxhY2ssXG4gIClcbik7XG5cbiRtYXQtZGVlcC1vcmFuZ2U6IChcbiAgNTA6ICNmYmU5ZTcsXG4gIDEwMDogI2ZmY2NiYyxcbiAgMjAwOiAjZmZhYjkxLFxuICAzMDA6ICNmZjhhNjUsXG4gIDQwMDogI2ZmNzA0MyxcbiAgNTAwOiAjZmY1NzIyLFxuICA2MDA6ICNmNDUxMWUsXG4gIDcwMDogI2U2NGExOSxcbiAgODAwOiAjZDg0MzE1LFxuICA5MDA6ICNiZjM2MGMsXG4gIEExMDA6ICNmZjllODAsXG4gIEEyMDA6ICNmZjZlNDAsXG4gIEE0MDA6ICNmZjNkMDAsXG4gIEE3MDA6ICNkZDJjMDAsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWJyb3duOiAoXG4gIDUwOiAjZWZlYmU5LFxuICAxMDA6ICNkN2NjYzgsXG4gIDIwMDogI2JjYWFhNCxcbiAgMzAwOiAjYTE4ODdmLFxuICA0MDA6ICM4ZDZlNjMsXG4gIDUwMDogIzc5NTU0OCxcbiAgNjAwOiAjNmQ0YzQxLFxuICA3MDA6ICM1ZDQwMzcsXG4gIDgwMDogIzRlMzQyZSxcbiAgOTAwOiAjM2UyNzIzLFxuICBBMTAwOiAjZDdjY2M4LFxuICBBMjAwOiAjYmNhYWE0LFxuICBBNDAwOiAjOGQ2ZTYzLFxuICBBNzAwOiAjNWQ0MDM3LFxuICBjb250cmFzdDogKFxuICAgIDUwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMTAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgMzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4kbWF0LWdyZXk6IChcbiAgNTA6ICNmYWZhZmEsXG4gIDEwMDogI2Y1ZjVmNSxcbiAgMjAwOiAjZWVlZWVlLFxuICAzMDA6ICNlMGUwZTAsXG4gIDQwMDogI2JkYmRiZCxcbiAgNTAwOiAjOWU5ZTllLFxuICA2MDA6ICM3NTc1NzUsXG4gIDcwMDogIzYxNjE2MSxcbiAgODAwOiAjNDI0MjQyLFxuICA5MDA6ICMyMTIxMjEsXG4gIEExMDA6ICNmZmZmZmYsXG4gIEEyMDA6ICNlZWVlZWUsXG4gIEE0MDA6ICNiZGJkYmQsXG4gIEE3MDA6ICM2MTYxNjEsXG4gIGNvbnRyYXN0OiAoXG4gICAgNTA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAxMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICAzMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA0MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICA2MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDgwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA5MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgQTEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIEEyMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBNDAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgKVxuKTtcblxuLy8gQWxpYXMgZm9yIGFsdGVybmF0ZSBzcGVsbGluZy5cbiRtYXQtZ3JheTogJG1hdC1ncmV5O1xuXG4kbWF0LWJsdWUtZ3JleTogKFxuICA1MDogI2VjZWZmMSxcbiAgMTAwOiAjY2ZkOGRjLFxuICAyMDA6ICNiMGJlYzUsXG4gIDMwMDogIzkwYTRhZSxcbiAgNDAwOiAjNzg5MDljLFxuICA1MDA6ICM2MDdkOGIsXG4gIDYwMDogIzU0NmU3YSxcbiAgNzAwOiAjNDU1YTY0LFxuICA4MDA6ICMzNzQ3NGYsXG4gIDkwMDogIzI2MzIzOCxcbiAgQTEwMDogI2NmZDhkYyxcbiAgQTIwMDogI2IwYmVjNSxcbiAgQTQwMDogIzc4OTA5YyxcbiAgQTcwMDogIzQ1NWE2NCxcbiAgY29udHJhc3Q6IChcbiAgICA1MDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDEwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDIwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDMwMDogJGRhcmstcHJpbWFyeS10ZXh0LFxuICAgIDQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA1MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgNjAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIDcwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICA4MDA6ICRsaWdodC1wcmltYXJ5LXRleHQsXG4gICAgOTAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICAgIEExMDA6ICRkYXJrLXByaW1hcnktdGV4dCxcbiAgICBBMjAwOiAkZGFyay1wcmltYXJ5LXRleHQsXG4gICAgQTQwMDogJGxpZ2h0LXByaW1hcnktdGV4dCxcbiAgICBBNzAwOiAkbGlnaHQtcHJpbWFyeS10ZXh0LFxuICApXG4pO1xuXG4vLyBBbGlhcyBmb3IgYWx0ZXJuYXRlIHNwZWxsaW5nLlxuJG1hdC1ibHVlLWdyYXk6ICRtYXQtYmx1ZS1ncmV5O1xuXG5cbi8vIEJhY2tncm91bmQgcGFsZXR0ZSBmb3IgbGlnaHQgdGhlbWVzLlxuJG1hdC1saWdodC10aGVtZS1iYWNrZ3JvdW5kOiAoXG4gIHN0YXR1cy1iYXI6IG1hcF9nZXQoJG1hdC1ncmV5LCAzMDApLFxuICBhcHAtYmFyOiAgICBtYXBfZ2V0KCRtYXQtZ3JleSwgMTAwKSxcbiAgYmFja2dyb3VuZDogbWFwX2dldCgkbWF0LWdyZXksIDUwKSxcbiAgaG92ZXI6ICAgICAgcmdiYShibGFjaywgMC4wNCksIC8vIFRPRE8oa2FyYSk6IGNoZWNrIHN0eWxlIHdpdGggTWF0ZXJpYWwgRGVzaWduIFVYXG4gIGNhcmQ6ICAgICAgIHdoaXRlLFxuICBkaWFsb2c6ICAgICB3aGl0ZSxcbiAgZGlzYWJsZWQtYnV0dG9uOiByZ2JhKGJsYWNrLCAwLjEyKSxcbiAgcmFpc2VkLWJ1dHRvbjogd2hpdGUsXG4gIGZvY3VzZWQtYnV0dG9uOiAkZGFyay1mb2N1c2VkLFxuICBzZWxlY3RlZC1idXR0b246IG1hcF9nZXQoJG1hdC1ncmV5LCAzMDApLFxuICBzZWxlY3RlZC1kaXNhYmxlZC1idXR0b246IG1hcF9nZXQoJG1hdC1ncmV5LCA0MDApLFxuICBkaXNhYmxlZC1idXR0b24tdG9nZ2xlOiBtYXBfZ2V0KCRtYXQtZ3JleSwgMjAwKSxcbiAgdW5zZWxlY3RlZC1jaGlwOiBtYXBfZ2V0KCRtYXQtZ3JleSwgMzAwKSxcbiAgZGlzYWJsZWQtbGlzdC1vcHRpb246IG1hcF9nZXQoJG1hdC1ncmV5LCAyMDApLFxuICB0b29sdGlwOiBtYXBfZ2V0KCRtYXQtZ3JleSwgNzAwKSxcbik7XG5cbi8vIEJhY2tncm91bmQgcGFsZXR0ZSBmb3IgZGFyayB0aGVtZXMuXG4kbWF0LWRhcmstdGhlbWUtYmFja2dyb3VuZDogKFxuICBzdGF0dXMtYmFyOiBibGFjayxcbiAgYXBwLWJhcjogICAgbWFwX2dldCgkbWF0LWdyZXksIDkwMCksXG4gIGJhY2tncm91bmQ6ICMzMDMwMzAsXG4gIGhvdmVyOiAgICAgIHJnYmEod2hpdGUsIDAuMDQpLCAvLyBUT0RPKGthcmEpOiBjaGVjayBzdHlsZSB3aXRoIE1hdGVyaWFsIERlc2lnbiBVWFxuICBjYXJkOiAgICAgICBtYXBfZ2V0KCRtYXQtZ3JleSwgODAwKSxcbiAgZGlhbG9nOiAgICAgbWFwX2dldCgkbWF0LWdyZXksIDgwMCksXG4gIGRpc2FibGVkLWJ1dHRvbjogcmdiYSh3aGl0ZSwgMC4xMiksXG4gIHJhaXNlZC1idXR0b246IG1hcC1nZXQoJG1hdC1ncmV5LCA4MDApLFxuICBmb2N1c2VkLWJ1dHRvbjogJGxpZ2h0LWZvY3VzZWQsXG4gIHNlbGVjdGVkLWJ1dHRvbjogbWFwX2dldCgkbWF0LWdyZXksIDkwMCksXG4gIHNlbGVjdGVkLWRpc2FibGVkLWJ1dHRvbjogbWFwX2dldCgkbWF0LWdyZXksIDgwMCksXG4gIGRpc2FibGVkLWJ1dHRvbi10b2dnbGU6IGJsYWNrLFxuICB1bnNlbGVjdGVkLWNoaXA6IG1hcF9nZXQoJG1hdC1ncmV5LCA3MDApLFxuICBkaXNhYmxlZC1saXN0LW9wdGlvbjogYmxhY2ssXG4gIHRvb2x0aXA6IG1hcF9nZXQoJG1hdC1ncmV5LCA3MDApLFxuKTtcblxuLy8gRm9yZWdyb3VuZCBwYWxldHRlIGZvciBsaWdodCB0aGVtZXMuXG4kbWF0LWxpZ2h0LXRoZW1lLWZvcmVncm91bmQ6IChcbiAgYmFzZTogICAgICAgICAgICAgIGJsYWNrLFxuICBkaXZpZGVyOiAgICAgICAgICAgJGRhcmstZGl2aWRlcnMsXG4gIGRpdmlkZXJzOiAgICAgICAgICAkZGFyay1kaXZpZGVycyxcbiAgZGlzYWJsZWQ6ICAgICAgICAgICRkYXJrLWRpc2FibGVkLXRleHQsXG4gIGRpc2FibGVkLWJ1dHRvbjogICByZ2JhKGJsYWNrLCAwLjI2KSxcbiAgZGlzYWJsZWQtdGV4dDogICAgICRkYXJrLWRpc2FibGVkLXRleHQsXG4gIGVsZXZhdGlvbjogICAgICAgICBibGFjayxcbiAgaGludC10ZXh0OiAgICAgICAgICRkYXJrLWRpc2FibGVkLXRleHQsXG4gIHNlY29uZGFyeS10ZXh0OiAgICAkZGFyay1zZWNvbmRhcnktdGV4dCxcbiAgaWNvbjogICAgICAgICAgICAgIHJnYmEoYmxhY2ssIDAuNTQpLFxuICBpY29uczogICAgICAgICAgICAgcmdiYShibGFjaywgMC41NCksXG4gIHRleHQ6ICAgICAgICAgICAgICByZ2JhKGJsYWNrLCAwLjg3KSxcbiAgc2xpZGVyLW1pbjogICAgICAgIHJnYmEoYmxhY2ssIDAuODcpLFxuICBzbGlkZXItb2ZmOiAgICAgICAgcmdiYShibGFjaywgMC4yNiksXG4gIHNsaWRlci1vZmYtYWN0aXZlOiByZ2JhKGJsYWNrLCAwLjM4KSxcbik7XG5cbi8vIEZvcmVncm91bmQgcGFsZXR0ZSBmb3IgZGFyayB0aGVtZXMuXG4kbWF0LWRhcmstdGhlbWUtZm9yZWdyb3VuZDogKFxuICBiYXNlOiAgICAgICAgICAgICAgd2hpdGUsXG4gIGRpdmlkZXI6ICAgICAgICAgICAkbGlnaHQtZGl2aWRlcnMsXG4gIGRpdmlkZXJzOiAgICAgICAgICAkbGlnaHQtZGl2aWRlcnMsXG4gIGRpc2FibGVkOiAgICAgICAgICAkbGlnaHQtZGlzYWJsZWQtdGV4dCxcbiAgZGlzYWJsZWQtYnV0dG9uOiAgIHJnYmEod2hpdGUsIDAuMyksXG4gIGRpc2FibGVkLXRleHQ6ICAgICAkbGlnaHQtZGlzYWJsZWQtdGV4dCxcbiAgZWxldmF0aW9uOiAgICAgICAgIGJsYWNrLFxuICBoaW50LXRleHQ6ICAgICAgICAgJGxpZ2h0LWRpc2FibGVkLXRleHQsXG4gIHNlY29uZGFyeS10ZXh0OiAgICAkbGlnaHQtc2Vjb25kYXJ5LXRleHQsXG4gIGljb246ICAgICAgICAgICAgICB3aGl0ZSxcbiAgaWNvbnM6ICAgICAgICAgICAgIHdoaXRlLFxuICB0ZXh0OiAgICAgICAgICAgICAgd2hpdGUsXG4gIHNsaWRlci1taW46ICAgICAgICB3aGl0ZSxcbiAgc2xpZGVyLW9mZjogICAgICAgIHJnYmEod2hpdGUsIDAuMyksXG4gIHNsaWRlci1vZmYtYWN0aXZlOiByZ2JhKHdoaXRlLCAwLjMpLFxuKTtcblxuXG5cbi8vIEZvciBhIGdpdmVuIGh1ZSBpbiBhIHBhbGV0dGUsIHJldHVybiB0aGUgY29udHJhc3QgY29sb3IgZnJvbSB0aGUgbWFwIG9mIGNvbnRyYXN0IHBhbGV0dGVzLlxuLy8gQHBhcmFtICRjb2xvci1tYXBcbi8vIEBwYXJhbSAkaHVlXG5AZnVuY3Rpb24gbWF0LWNvbnRyYXN0KCRwYWxldHRlLCAkaHVlKSB7XG4gIEByZXR1cm4gbWFwLWdldChtYXAtZ2V0KCRwYWxldHRlLCBjb250cmFzdCksICRodWUpO1xufVxuXG5cbi8vIENyZWF0ZXMgYSBtYXAgb2YgaHVlcyB0byBjb2xvcnMgZm9yIGEgdGhlbWUuIFRoaXMgaXMgdXNlZCB0byBkZWZpbmUgYSB0aGVtZSBwYWxldHRlIGluIHRlcm1zXG4vLyBvZiB0aGUgTWF0ZXJpYWwgRGVzaWduIGh1ZXMuXG4vLyBAcGFyYW0gJGNvbG9yLW1hcFxuLy8gQHBhcmFtICRwcmltYXJ5XG4vLyBAcGFyYW0gJGxpZ2h0ZXJcbkBmdW5jdGlvbiBtYXQtcGFsZXR0ZSgkYmFzZS1wYWxldHRlLCAkZGVmYXVsdDogNTAwLCAkbGlnaHRlcjogMTAwLCAkZGFya2VyOiA3MDAsICR0ZXh0OiAkZGVmYXVsdCkge1xuICAkcmVzdWx0OiBtYXBfbWVyZ2UoJGJhc2UtcGFsZXR0ZSwgKFxuICAgIGRlZmF1bHQ6IG1hcC1nZXQoJGJhc2UtcGFsZXR0ZSwgJGRlZmF1bHQpLFxuICAgIGxpZ2h0ZXI6IG1hcC1nZXQoJGJhc2UtcGFsZXR0ZSwgJGxpZ2h0ZXIpLFxuICAgIGRhcmtlcjogbWFwLWdldCgkYmFzZS1wYWxldHRlLCAkZGFya2VyKSxcbiAgICB0ZXh0OiBtYXAtZ2V0KCRiYXNlLXBhbGV0dGUsICR0ZXh0KSxcblxuICAgIGRlZmF1bHQtY29udHJhc3Q6IG1hdC1jb250cmFzdCgkYmFzZS1wYWxldHRlLCAkZGVmYXVsdCksXG4gICAgbGlnaHRlci1jb250cmFzdDogbWF0LWNvbnRyYXN0KCRiYXNlLXBhbGV0dGUsICRsaWdodGVyKSxcbiAgICBkYXJrZXItY29udHJhc3Q6IG1hdC1jb250cmFzdCgkYmFzZS1wYWxldHRlLCAkZGFya2VyKVxuICApKTtcblxuICAvLyBGb3IgZWFjaCBodWUgaW4gdGhlIHBhbGV0dGUsIGFkZCBhIFwiLWNvbnRyYXN0XCIgY29sb3IgdG8gdGhlIG1hcC5cbiAgQGVhY2ggJGh1ZSwgJGNvbG9yIGluICRiYXNlLXBhbGV0dGUge1xuICAgICRyZXN1bHQ6IG1hcF9tZXJnZSgkcmVzdWx0LCAoXG4gICAgICAnI3skaHVlfS1jb250cmFzdCc6IG1hdC1jb250cmFzdCgkYmFzZS1wYWxldHRlLCAkaHVlKVxuICAgICkpO1xuICB9XG5cbiAgQHJldHVybiAkcmVzdWx0O1xufVxuXG5cbi8vIEdldHMgYSBjb2xvciBmcm9tIGEgdGhlbWUgcGFsZXR0ZSAodGhlIG91dHB1dCBvZiBtYXQtcGFsZXR0ZSkuXG4vLyBUaGUgaHVlIGNhbiBiZSBvbmUgb2YgdGhlIHN0YW5kYXJkIHZhbHVlcyAoNTAwLCBBNDAwLCBldGMuKSwgb25lIG9mIHRoZSB0aHJlZSBwcmVjb25maWd1cmVkXG4vLyBodWVzIChkZWZhdWx0LCBsaWdodGVyLCBkYXJrZXIpLCBvciBhbnkgb2YgdGhlIGFmb3JlbWVudGlvbmVkIHByZWZpeGVkIHdpdGggXCItY29udHJhc3RcIi5cbi8vXG4vLyBAcGFyYW0gJGNvbG9yLW1hcCBUaGUgdGhlbWUgcGFsZXR0ZSAob3V0cHV0IG9mIG1hdC1wYWxldHRlKS5cbi8vIEBwYXJhbSAkaHVlIFRoZSBodWUgZnJvbSB0aGUgcGFsZXR0ZSB0byB1c2UuIElmIHRoaXMgaXMgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEsIGl0IHdpbGxcbi8vICAgICBiZSB0cmVhdGVkIGFzIG9wYWNpdHkuXG4vLyBAcGFyYW0gJG9wYWNpdHkgVGhlIGFscGhhIGNoYW5uZWwgdmFsdWUgZm9yIHRoZSBjb2xvci5cbkBmdW5jdGlvbiBtYXQtY29sb3IoJHBhbGV0dGUsICRodWU6IGRlZmF1bHQsICRvcGFjaXR5OiBudWxsKSB7XG4gIC8vIElmIGh1ZUtleSBpcyBhIG51bWJlciBiZXR3ZWVuIHplcm8gYW5kIG9uZSwgdGhlbiBpdCBhY3R1YWxseSBjb250YWlucyBhblxuICAvLyBvcGFjaXR5IHZhbHVlLCBzbyByZWNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIHRoZSBkZWZhdWx0IGh1ZSBhbmQgdGhhdCBnaXZlbiBvcGFjaXR5LlxuICBAaWYgdHlwZS1vZigkaHVlKSA9PSBudW1iZXIgYW5kICRodWUgPj0gMCBhbmQgJGh1ZSA8PSAxIHtcbiAgICBAcmV0dXJuIG1hdC1jb2xvcigkcGFsZXR0ZSwgZGVmYXVsdCwgJGh1ZSk7XG4gIH1cblxuICAkY29sb3I6IG1hcC1nZXQoJHBhbGV0dGUsICRodWUpO1xuXG4gIEBpZiAodHlwZS1vZigkY29sb3IpICE9IGNvbG9yKSB7XG4gICAgLy8gSWYgdGhlICRjb2xvciByZXNvbHZlZCB0byBzb21ldGhpbmcgZGlmZmVyZW50IGZyb20gYSBjb2xvciAoZS5nLiBhIENTUyB2YXJpYWJsZSksXG4gICAgLy8gd2UgY2FuJ3QgYXBwbHkgdGhlIG9wYWNpdHkgYW55d2F5IHNvIHdlIHJldHVybiB0aGUgdmFsdWUgYXMgaXMsIG90aGVyd2lzZSBTYXNzIGNhblxuICAgIC8vIHRocm93IGFuIGVycm9yIG9yIG91dHB1dCBzb21ldGhpbmcgaW52YWxpZC5cbiAgICBAcmV0dXJuICRjb2xvcjtcbiAgfVxuXG4gIEByZXR1cm4gcmdiYSgkY29sb3IsIGlmKCRvcGFjaXR5ID09IG51bGwsIG9wYWNpdHkoJGNvbG9yKSwgJG9wYWNpdHkpKTtcbn1cblxuXG4vLyBDcmVhdGVzIGEgY29udGFpbmVyIG9iamVjdCBmb3IgYSBsaWdodCB0aGVtZSB0byBiZSBnaXZlbiB0byBpbmRpdmlkdWFsIGNvbXBvbmVudCB0aGVtZSBtaXhpbnMuXG5AZnVuY3Rpb24gbWF0LWxpZ2h0LXRoZW1lKCRwcmltYXJ5LCAkYWNjZW50LCAkd2FybjogbWF0LXBhbGV0dGUoJG1hdC1yZWQpKSB7XG4gIEByZXR1cm4gKFxuICAgIHByaW1hcnk6ICRwcmltYXJ5LFxuICAgIGFjY2VudDogJGFjY2VudCxcbiAgICB3YXJuOiAkd2FybixcbiAgICBpcy1kYXJrOiBmYWxzZSxcbiAgICBmb3JlZ3JvdW5kOiAkbWF0LWxpZ2h0LXRoZW1lLWZvcmVncm91bmQsXG4gICAgYmFja2dyb3VuZDogJG1hdC1saWdodC10aGVtZS1iYWNrZ3JvdW5kLFxuICApO1xufVxuXG5cbi8vIENyZWF0ZXMgYSBjb250YWluZXIgb2JqZWN0IGZvciBhIGRhcmsgdGhlbWUgdG8gYmUgZ2l2ZW4gdG8gaW5kaXZpZHVhbCBjb21wb25lbnQgdGhlbWUgbWl4aW5zLlxuQGZ1bmN0aW9uIG1hdC1kYXJrLXRoZW1lKCRwcmltYXJ5LCAkYWNjZW50LCAkd2FybjogbWF0LXBhbGV0dGUoJG1hdC1yZWQpKSB7XG4gIEByZXR1cm4gKFxuICAgIHByaW1hcnk6ICRwcmltYXJ5LFxuICAgIGFjY2VudDogJGFjY2VudCxcbiAgICB3YXJuOiAkd2FybixcbiAgICBpcy1kYXJrOiB0cnVlLFxuICAgIGZvcmVncm91bmQ6ICRtYXQtZGFyay10aGVtZS1mb3JlZ3JvdW5kLFxuICAgIGJhY2tncm91bmQ6ICRtYXQtZGFyay10aGVtZS1iYWNrZ3JvdW5kLFxuICApO1xufVxuXG5cblxuJG1hdC1yaXBwbGUtY29sb3Itb3BhY2l0eTogMC4xO1xuXG5AbWl4aW4gbWF0LXJpcHBsZSgpIHtcblxuICAvLyBUaGUgaG9zdCBlbGVtZW50IG9mIGFuIG1hdC1yaXBwbGUgZGlyZWN0aXZlIHNob3VsZCBhbHdheXMgaGF2ZSBhIHBvc2l0aW9uIG9mIFwiYWJzb2x1dGVcIiBvclxuICAvLyBcInJlbGF0aXZlXCIgc28gdGhhdCB0aGUgcmlwcGxlcyBpbnNpZGUgYXJlIGNvcnJlY3RseSBwb3NpdGlvbmVkIHJlbGF0aXZlbHkgdG8gdGhlIGNvbnRhaW5lci5cbiAgLm1hdC1yaXBwbGUge1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAvLyBCeSBkZWZhdWx0LCBldmVyeSByaXBwbGUgY29udGFpbmVyIHNob3VsZCBoYXZlIHBvc2l0aW9uOiByZWxhdGl2ZSBpbiBmYXZvciBvZiBjcmVhdGluZyBhblxuICAgIC8vIGVhc3kgQVBJIGZvciBkZXZlbG9wZXJzIHVzaW5nIHRoZSBNYXRSaXBwbGUgZGlyZWN0aXZlLlxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIC8vIFByb21vdGUgY29udGFpbmVycyB0aGF0IGhhdmUgcmlwcGxlcyB0byBhIG5ldyBsYXllci4gV2Ugd2FudCB0byB0YXJnZXQgYDpub3QoOmVtcHR5KWAsXG4gICAgLy8gYmVjYXVzZSB3ZSBkb24ndCB3YW50IGFsbCByaXBwbGUgY29udGFpbmVycyB0byBoYXZlIHRoZWlyIG93biBsYXllciBzaW5jZSB0aGV5J3JlIHVzZWQgaW4gYVxuICAgIC8vIGxvdCBvZiBwbGFjZXMgYW5kIHRoZSBsYXllciBpcyBvbmx5IHJlbGV2YW50IHdoaWxlIGFuaW1hdGluZy4gTm90ZSB0aGF0IGlkZWFsbHkgd2UnZCB1c2VcbiAgICAvLyB0aGUgYGNvbnRhaW5gIHByb3BlcnR5IGhlcmUgKHNlZSAjMTMxNzUpLCBiZWNhdXNlIGA6ZW1wdHlgIGNhbiBiZSBicm9rZW4gYnkgaGF2aW5nIGV4dHJhXG4gICAgLy8gdGV4dCBpbnNpZGUgdGhlIGVsZW1lbnQsIGJ1dCBpdCBpc24ndCB2ZXJ5IHdlbGwgc3VwcG9ydGVkIHlldC5cbiAgICAmOm5vdCg6ZW1wdHkpIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTtcbiAgICB9XG4gIH1cblxuICAubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZCB7XG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIH1cblxuICAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuXG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSwgdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDApO1xuXG4gICAgLy8gSW4gaGlnaCBjb250cmFzdCBtb2RlIHRoZSByaXBwbGUgaXMgb3BhcXVlLCBjYXVzaW5nIGl0IHRvIG9ic3RydWN0IHRoZSBjb250ZW50LlxuICAgIEBpbmNsdWRlIGNkay1oaWdoLWNvbnRyYXN0KGFjdGl2ZSwgb2ZmKSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxufVxuXG4vKiBUaGVtZSBmb3IgdGhlIHJpcHBsZSBlbGVtZW50cy4qL1xuQG1peGluIG1hdC1yaXBwbGUtdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXBfZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRmb3JlZ3JvdW5kLWJhc2U6IG1hcF9nZXQoJGZvcmVncm91bmQsIGJhc2UpO1xuXG4gIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgIC8vIElmIHRoZSByaXBwbGUgY29sb3IgaXMgcmVzb2x2ZXMgdG8gYSBjb2xvciAqdHlwZSosIHdlIGNhbiB1c2UgaXQgZGlyZWN0bHksIG90aGVyd2lzZVxuICAgIC8vIChlLmcuIGl0IHJlc29sdmVzIHRvIGEgQ1NTIHZhcmlhYmxlKSB3ZSBmYWxsIGJhY2sgdG8gdXNpbmcgdGhlIGNvbG9yIGFuZCBzZXR0aW5nIGFuIG9wYWNpdHkuXG4gICAgQGlmICh0eXBlLW9mKCRmb3JlZ3JvdW5kLWJhc2UpID09IGNvbG9yKSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCRmb3JlZ3JvdW5kLWJhc2UsICRtYXQtcmlwcGxlLWNvbG9yLW9wYWNpdHkpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZm9yZWdyb3VuZC1iYXNlO1xuICAgICAgb3BhY2l0eTogJG1hdC1yaXBwbGUtY29sb3Itb3BhY2l0eTtcbiAgICB9XG4gIH1cbn1cblxuXG5cbi8vIFV0aWxpdHkgZm9yIGZldGNoaW5nIGEgbmVzdGVkIHZhbHVlIGZyb20gYSB0eXBvZ3JhcGh5IGNvbmZpZy5cbkBmdW5jdGlvbiBfbWF0LWdldC10eXBlLXZhbHVlKCRjb25maWcsICRsZXZlbCwgJG5hbWUpIHtcbiAgQHJldHVybiBtYXAtZ2V0KG1hcC1nZXQoJGNvbmZpZywgJGxldmVsKSwgJG5hbWUpO1xufVxuXG4vLyBHZXRzIHRoZSBmb250IHNpemUgZm9yIGEgbGV2ZWwgaW5zaWRlIGEgdHlwb2dyYXBoeSBjb25maWcuXG5AZnVuY3Rpb24gbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCAkbGV2ZWwpIHtcbiAgQHJldHVybiBfbWF0LWdldC10eXBlLXZhbHVlKCRjb25maWcsICRsZXZlbCwgZm9udC1zaXplKTtcbn1cblxuLy8gR2V0cyB0aGUgbGluZSBoZWlnaHQgZm9yIGEgbGV2ZWwgaW5zaWRlIGEgdHlwb2dyYXBoeSBjb25maWcuXG5AZnVuY3Rpb24gbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsICRsZXZlbCkge1xuICBAcmV0dXJuIF9tYXQtZ2V0LXR5cGUtdmFsdWUoJGNvbmZpZywgJGxldmVsLCBsaW5lLWhlaWdodCk7XG59XG5cbi8vIEdldHMgdGhlIGZvbnQgd2VpZ2h0IGZvciBhIGxldmVsIGluc2lkZSBhIHR5cG9ncmFwaHkgY29uZmlnLlxuQGZ1bmN0aW9uIG1hdC1mb250LXdlaWdodCgkY29uZmlnLCAkbGV2ZWwpIHtcbiAgQHJldHVybiBfbWF0LWdldC10eXBlLXZhbHVlKCRjb25maWcsICRsZXZlbCwgZm9udC13ZWlnaHQpO1xufVxuXG4vLyBHZXRzIHRoZSBsZXR0ZXIgc3BhY2luZyBmb3IgYSBsZXZlbCBpbnNpZGUgYSB0eXBvZ3JhcGh5IGNvbmZpZy5cbkBmdW5jdGlvbiBtYXQtbGV0dGVyLXNwYWNpbmcoJGNvbmZpZywgJGxldmVsKSB7XG4gIEByZXR1cm4gX21hdC1nZXQtdHlwZS12YWx1ZSgkY29uZmlnLCAkbGV2ZWwsIGxldHRlci1zcGFjaW5nKTtcbn1cblxuLy8gR2V0cyB0aGUgZm9udC1mYW1pbHkgZnJvbSBhIHR5cG9ncmFwaHkgY29uZmlnIGFuZCByZW1vdmVzIHRoZSBxdW90ZXMgYXJvdW5kIGl0LlxuQGZ1bmN0aW9uIG1hdC1mb250LWZhbWlseSgkY29uZmlnLCAkbGV2ZWw6IG51bGwpIHtcbiAgJGZvbnQtZmFtaWx5OiBtYXAtZ2V0KCRjb25maWcsIGZvbnQtZmFtaWx5KTtcblxuICBAaWYgJGxldmVsICE9IG51bGwge1xuICAgICRmb250LWZhbWlseTogX21hdC1nZXQtdHlwZS12YWx1ZSgkY29uZmlnLCAkbGV2ZWwsIGZvbnQtZmFtaWx5KTtcbiAgfVxuXG4gIC8vIEd1YXJkIGFnYWluc3QgdW5xdW90aW5nIG5vbi1zdHJpbmcgdmFsdWVzLCBiZWNhdXNlIGl0J3MgZGVwcmVjYXRlZC5cbiAgQHJldHVybiBpZih0eXBlLW9mKCRmb250LWZhbWlseSkgPT0gc3RyaW5nLCB1bnF1b3RlKCRmb250LWZhbWlseSksICRmb250LWZhbWlseSk7XG59XG5cbi8vIE91dHB1dHMgdGhlIHNob3J0aGFuZCBgZm9udGAgQ1NTIHByb3BlcnR5LCBiYXNlZCBvbiBhIHNldCBvZiB0eXBvZ3JhcGh5IHZhbHVlcy4gRmFsbHMgYmFjayB0b1xuLy8gdGhlIGluZGl2aWR1YWwgcHJvcGVydGllcyBpZiBhIHZhbHVlIHRoYXQgaXNuJ3QgYWxsb3dlZCBpbiB0aGUgc2hvcnRoYW5kIGlzIHBhc3NlZCBpbi5cbkBtaXhpbiBtYXQtdHlwb2dyYXBoeS1mb250LXNob3J0aGFuZCgkZm9udC1zaXplLCAkZm9udC13ZWlnaHQsICRsaW5lLWhlaWdodCwgJGZvbnQtZmFtaWx5KSB7XG4gIC8vIElmIGFueSBvZiB0aGUgdmFsdWVzIGFyZSBzZXQgdG8gYGluaGVyaXRgLCB3ZSBjYW4ndCB1c2UgdGhlIHNob3J0aGFuZFxuICAvLyBzbyB3ZSBmYWxsIGJhY2sgdG8gcGFzc2luZyBpbiB0aGUgaW5kaXZpZHVhbCBwcm9wZXJ0aWVzLlxuICBAaWYgKCRmb250LXNpemUgPT0gaW5oZXJpdCBvclxuICAgICAgICRmb250LXdlaWdodCA9PSBpbmhlcml0IG9yXG4gICAgICAgJGxpbmUtaGVpZ2h0ID09IGluaGVyaXQgb3JcbiAgICAgICAkZm9udC1mYW1pbHkgPT0gaW5oZXJpdCBvclxuICAgICAgICRmb250LXNpemUgPT0gbnVsbCBvclxuICAgICAgICRmb250LXdlaWdodCA9PSBudWxsIG9yXG4gICAgICAgJGxpbmUtaGVpZ2h0ID09IG51bGwgb3JcbiAgICAgICAkZm9udC1mYW1pbHkgPT0gbnVsbCkge1xuXG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplO1xuICAgIGZvbnQtd2VpZ2h0OiAkZm9udC13ZWlnaHQ7XG4gICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5O1xuICB9XG4gIEBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2UgdXNlIHRoZSBzaG9ydGhhbmQgYGZvbnRgLCBiZWNhdXNlIGl0J3MgdGhlIGxlYXN0IGFtb3VudCBvZiBieXRlcy4gTm90ZVxuICAgIC8vIHRoYXQgd2UgbmVlZCB0byB1c2UgaW50ZXJwb2xhdGlvbiBmb3IgYGZvbnQtc2l6ZS9saW5lLWhlaWdodGAgaW4gb3JkZXIgdG8gcHJldmVudFxuICAgIC8vIFNhc3MgZnJvbSBkaXZpZGluZyB0aGUgdHdvIHZhbHVlcy5cbiAgICBmb250OiAkZm9udC13ZWlnaHQgI3skZm9udC1zaXplfS8jeyRsaW5lLWhlaWdodH0gJGZvbnQtZmFtaWx5O1xuICB9XG59XG5cbi8vIENvbnZlcnRzIGEgdHlwb2dyYXBoeSBsZXZlbCBpbnRvIENTUyBzdHlsZXMuXG5AbWl4aW4gbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsICRsZXZlbCkge1xuICAkZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsICRsZXZlbCk7XG4gICRmb250LXdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsICRsZXZlbCk7XG4gICRsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsICRsZXZlbCk7XG4gICRmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsICRsZXZlbCk7XG5cbiAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktZm9udC1zaG9ydGhhbmQoJGZvbnQtc2l6ZSwgJGZvbnQtd2VpZ2h0LCAkbGluZS1oZWlnaHQsICRmb250LWZhbWlseSk7XG4gIGxldHRlci1zcGFjaW5nOiBtYXQtbGV0dGVyLXNwYWNpbmcoJGNvbmZpZywgJGxldmVsKTtcbn1cblxuXG5AbWl4aW4gbWF0LW9wdGlvbi10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG5cbiAgLm1hdC1vcHRpb24ge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gICAgJjpob3Zlcjpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpLFxuICAgICY6Zm9jdXM6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyKTtcbiAgICB9XG5cbiAgICAvLyBJbiBtdWx0aXBsZSBtb2RlIHRoZXJlIGlzIGEgY2hlY2tib3ggdG8gc2hvdyB0aGF0IHRoZSBvcHRpb24gaXMgc2VsZWN0ZWQuXG4gICAgJi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIpO1xuICAgIH1cblxuICAgICYubWF0LWFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGhvdmVyKTtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIH1cblxuICAgICYubWF0LW9wdGlvbi1kaXNhYmxlZCB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBoaW50LXRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtcHJpbWFyeSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgdGV4dCk7XG4gIH1cblxuICAubWF0LWFjY2VudCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtd2FybiAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1vcHRpb24tdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtb3B0aW9uIHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgc3ViaGVhZGluZy0yKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LW9wdGdyb3VwLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtb3B0Z3JvdXAtbGFiZWwge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtb3B0Z3JvdXAtZGlzYWJsZWQgLm1hdC1vcHRncm91cC1sYWJlbCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaGludC10ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LW9wdGdyb3VwLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LW9wdGdyb3VwLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgYm9keS0yKTtcbiAgfVxufVxuXG5cblxuQG1peGluIG1hdC1wc2V1ZG8tY2hlY2tib3gtdGhlbWUoJHRoZW1lKSB7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuXG4gIC8vIE5PVEUodHJhdmlza2F1Zm1hbik6IFdoaWxlIHRoZSBzcGVjIGNhbGxzIGZvciB0cmFuc2x1Y2VudCBibGFja3Mvd2hpdGVzIGZvciBkaXNhYmxlZCBjb2xvcnMsXG4gIC8vIHRoaXMgZG9lcyBub3Qgd29yayB3ZWxsIHdpdGggZWxlbWVudHMgbGF5ZXJlZCBvbiB0b3Agb2Ygb25lIGFub3RoZXIuIFRvIGdldCBhcm91bmQgdGhpcyB3ZVxuICAvLyBibGVuZCB0aGUgY29sb3JzIHRvZ2V0aGVyIGJhc2VkIG9uIHRoZSBiYXNlIGNvbG9yIGFuZCB0aGUgdGhlbWUgYmFja2dyb3VuZC5cbiAgJHdoaXRlLTMwcGN0LW9wYWNpdHktb24tZGFyazogIzY4Njg2ODtcbiAgJGJsYWNrLTI2cGN0LW9wYWNpdHktb24tbGlnaHQ6ICNiMGIwYjA7XG4gICRkaXNhYmxlZC1jb2xvcjogaWYoJGlzLWRhcmstdGhlbWUsICR3aGl0ZS0zMHBjdC1vcGFjaXR5LW9uLWRhcmssICRibGFjay0yNnBjdC1vcGFjaXR5LW9uLWxpZ2h0KTtcbiAgJGNvbG9yZWQtYm94LXNlbGVjdG9yOiAnLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSc7XG5cbiAgLm1hdC1wc2V1ZG8tY2hlY2tib3gge1xuICAgIGNvbG9yOiBtYXQtY29sb3IobWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpLCBzZWNvbmRhcnktdGV4dCk7XG5cbiAgICAmOjphZnRlciB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kKTtcbiAgICB9XG4gIH1cblxuICAubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZCB7XG4gICAgY29sb3I6ICRkaXNhYmxlZC1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLFxuICAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KSk7XG4gIH1cblxuICAvLyBEZWZhdWx0IHRvIHRoZSBhY2NlbnQgY29sb3IuIE5vdGUgdGhhdCB0aGUgcHNldWRvIGNoZWNrYm94ZXMgYXJlIG1lYW50IHRvIGluaGVyaXQgdGhlXG4gIC8vIHRoZW1lIGZyb20gdGhlaXIgcGFyZW50LCByYXRoZXIgdGhhbiBpbXBsZW1lbnRpbmcgdGhlaXIgb3duIHRoZW1pbmcsIHdoaWNoIGlzIHdoeSB3ZVxuICAvLyBkb24ndCBhdHRhY2ggdG8gdGhlIGBtYXQtKmAgY2xhc3Nlcy4gQWxzbyBub3RlIHRoYXQgdGhpcyBuZWVkcyB0byBiZSBiZWxvdyBgLm1hdC1wcmltYXJ5YFxuICAvLyBpbiBvcmRlciB0byBhbGxvdyBmb3IgdGhlIGNvbG9yIHRvIGJlIG92ZXJ3cml0dGVuIGlmIHRoZSBjaGVja2JveCBpcyBpbnNpZGUgYSBwYXJlbnQgdGhhdFxuICAvLyBoYXMgYG1hdC1hY2NlbnRgIGFuZCBpcyBwbGFjZWQgaW5zaWRlIGFub3RoZXIgcGFyZW50IHRoYXQgaGFzIGBtYXQtcHJpbWFyeWAuXG4gIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsXG4gIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUsXG4gIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsXG4gIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KSk7XG4gIH1cblxuICAubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxcbiAgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgd2FybikpO1xuICB9XG5cbiAgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxcbiAgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSB7XG4gICAgJi5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkIHtcbiAgICAgIGJhY2tncm91bmQ6ICRkaXNhYmxlZC1jb2xvcjtcbiAgICB9XG4gIH1cbn1cblxuXG5cbi8vIFJlcHJlc2VudHMgYSB0eXBvZ3JhcGh5IGxldmVsIGZyb20gdGhlIE1hdGVyaWFsIGRlc2lnbiBzcGVjLlxuQGZ1bmN0aW9uIG1hdC10eXBvZ3JhcGh5LWxldmVsKFxuICAkZm9udC1zaXplLFxuICAkbGluZS1oZWlnaHQ6ICRmb250LXNpemUsXG4gICRmb250LXdlaWdodDogNDAwLFxuICAkZm9udC1mYW1pbHk6IG51bGwsXG4gICRsZXR0ZXItc3BhY2luZzogbm9ybWFsKSB7XG5cbiAgQHJldHVybiAoXG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLFxuICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQsXG4gICAgZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodCxcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LFxuICAgIGxldHRlci1zcGFjaW5nOiAkbGV0dGVyLXNwYWNpbmdcbiAgKTtcbn1cblxuLy8gUmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgdHlwb2dyYXBoeSBsZXZlbHMuXG4vLyBEZWZhdWx0cyBjb21lIGZyb20gaHR0cHM6Ly9tYXRlcmlhbC5pby9ndWlkZWxpbmVzL3N0eWxlL3R5cG9ncmFwaHkuaHRtbFxuLy8gTm90ZTogVGhlIHNwZWMgZG9lc24ndCBtZW50aW9uIGxldHRlciBzcGFjaW5nLiBUaGUgdmFsdWVzIGhlcmUgY29tZSBmcm9tXG4vLyBleWViYWxsaW5nIGl0IHVudGlsIGl0IGxvb2tlZCBleGFjdGx5IGxpa2UgdGhlIHNwZWMgZXhhbXBsZXMuXG5AZnVuY3Rpb24gbWF0LXR5cG9ncmFwaHktY29uZmlnKFxuICAkZm9udC1mYW1pbHk6ICAgJ1JvYm90bywgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBzYW5zLXNlcmlmJyxcbiAgJGRpc3BsYXktNDogICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDExMnB4LCAxMTJweCwgMzAwLCAkbGV0dGVyLXNwYWNpbmc6IC0wLjA1ZW0pLFxuICAkZGlzcGxheS0zOiAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoNTZweCwgNTZweCwgNDAwLCAkbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW0pLFxuICAkZGlzcGxheS0yOiAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoNDVweCwgNDhweCwgNDAwLCAkbGV0dGVyLXNwYWNpbmc6IC0wLjAwNWVtKSxcbiAgJGRpc3BsYXktMTogICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDM0cHgsIDQwcHgsIDQwMCksXG4gICRoZWFkbGluZTogICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgyNHB4LCAzMnB4LCA0MDApLFxuICAkdGl0bGU6ICAgICAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMjBweCwgMzJweCwgNTAwKSxcbiAgJHN1YmhlYWRpbmctMjogIG1hdC10eXBvZ3JhcGh5LWxldmVsKDE2cHgsIDI4cHgsIDQwMCksXG4gICRzdWJoZWFkaW5nLTE6ICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgxNXB4LCAyNHB4LCA0MDApLFxuICAkYm9keS0yOiAgICAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMTRweCwgMjRweCwgNTAwKSxcbiAgJGJvZHktMTogICAgICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKDE0cHgsIDIwcHgsIDQwMCksXG4gICRjYXB0aW9uOiAgICAgICBtYXQtdHlwb2dyYXBoeS1sZXZlbCgxMnB4LCAyMHB4LCA0MDApLFxuICAkYnV0dG9uOiAgICAgICAgbWF0LXR5cG9ncmFwaHktbGV2ZWwoMTRweCwgMTRweCwgNTAwKSxcbiAgLy8gTGluZS1oZWlnaHQgbXVzdCBiZSB1bml0LWxlc3MgZnJhY3Rpb24gb2YgdGhlIGZvbnQtc2l6ZS5cbiAgJGlucHV0OiAgICAgICAgIG1hdC10eXBvZ3JhcGh5LWxldmVsKGluaGVyaXQsIDEuMTI1LCA0MDApXG4pIHtcblxuICAvLyBEZWNsYXJlIGFuIGluaXRpYWwgbWFwIHdpdGggYWxsIG9mIHRoZSBsZXZlbHMuXG4gICRjb25maWc6IChcbiAgICBkaXNwbGF5LTQ6ICAgICAgJGRpc3BsYXktNCxcbiAgICBkaXNwbGF5LTM6ICAgICAgJGRpc3BsYXktMyxcbiAgICBkaXNwbGF5LTI6ICAgICAgJGRpc3BsYXktMixcbiAgICBkaXNwbGF5LTE6ICAgICAgJGRpc3BsYXktMSxcbiAgICBoZWFkbGluZTogICAgICAgJGhlYWRsaW5lLFxuICAgIHRpdGxlOiAgICAgICAgICAkdGl0bGUsXG4gICAgc3ViaGVhZGluZy0yOiAgICRzdWJoZWFkaW5nLTIsXG4gICAgc3ViaGVhZGluZy0xOiAgICRzdWJoZWFkaW5nLTEsXG4gICAgYm9keS0yOiAgICAgICAgICRib2R5LTIsXG4gICAgYm9keS0xOiAgICAgICAgICRib2R5LTEsXG4gICAgY2FwdGlvbjogICAgICAgICRjYXB0aW9uLFxuICAgIGJ1dHRvbjogICAgICAgICAkYnV0dG9uLFxuICAgIGlucHV0OiAgICAgICAgICAkaW5wdXQsXG4gICk7XG5cbiAgLy8gTG9vcCB0aHJvdWdoIHRoZSBsZXZlbHMgYW5kIHNldCB0aGUgYGZvbnQtZmFtaWx5YCBvZiB0aGUgb25lcyB0aGF0IGRvbid0IGhhdmUgb25lIHRvIHRoZSBiYXNlLlxuICAvLyBOb3RlIHRoYXQgU2FzcyBjYW4ndCBtb2RpZnkgbWFwcyBpbiBwbGFjZSwgd2hpY2ggbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIG1lcmdlIGFuZCByZS1hc3NpZ24uXG4gIEBlYWNoICRrZXksICRsZXZlbCBpbiAkY29uZmlnIHtcbiAgICBAaWYgbWFwLWdldCgkbGV2ZWwsIGZvbnQtZmFtaWx5KSA9PSBudWxsIHtcbiAgICAgICRuZXctbGV2ZWw6IG1hcC1tZXJnZSgkbGV2ZWwsIChmb250LWZhbWlseTogJGZvbnQtZmFtaWx5KSk7XG4gICAgICAkY29uZmlnOiBtYXAtbWVyZ2UoJGNvbmZpZywgKCRrZXk6ICRuZXctbGV2ZWwpKTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgdGhlIGJhc2UgZm9udCBmYW1pbHkgdG8gdGhlIGNvbmZpZy5cbiAgQHJldHVybiBtYXAtbWVyZ2UoJGNvbmZpZywgKGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHkpKTtcbn1cblxuLy8gQWRkcyB0aGUgYmFzZSB0eXBvZ3JhcGh5IHN0eWxlcywgYmFzZWQgb24gYSBjb25maWcuXG5AbWl4aW4gbWF0LWJhc2UtdHlwb2dyYXBoeSgkY29uZmlnLCAkc2VsZWN0b3I6ICcubWF0LXR5cG9ncmFwaHknKSB7XG4gIC5tYXQtaDEsIC5tYXQtaGVhZGxpbmUsICN7JHNlbGVjdG9yfSBoMSB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGhlYWRsaW5lKTtcbiAgICBtYXJnaW46IDAgMCAxNnB4O1xuICB9XG5cbiAgLm1hdC1oMiwgLm1hdC10aXRsZSwgI3skc2VsZWN0b3J9IGgyIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgdGl0bGUpO1xuICAgIG1hcmdpbjogMCAwIDE2cHg7XG4gIH1cblxuICAubWF0LWgzLCAubWF0LXN1YmhlYWRpbmctMiwgI3skc2VsZWN0b3J9IGgzIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgc3ViaGVhZGluZy0yKTtcbiAgICBtYXJnaW46IDAgMCAxNnB4O1xuICB9XG5cbiAgLm1hdC1oNCwgLm1hdC1zdWJoZWFkaW5nLTEsICN7JHNlbGVjdG9yfSBoNCB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIHN1YmhlYWRpbmctMSk7XG4gICAgbWFyZ2luOiAwIDAgMTZweDtcbiAgfVxuXG4gIC8vIE5vdGU6IHRoZSBzcGVjIGRvZXNuJ3QgaGF2ZSBhbnl0aGluZyB0aGF0IHdvdWxkIGNvcnJlc3BvbmQgdG8gaDUgYW5kIGg2LCBidXQgd2UgYWRkIHRoZXNlIGZvclxuICAvLyBjb25zaXN0ZW5jeS4gVGhlIGZvbnQgc2l6ZXMgY29tZSBmcm9tIHRoZSBDaHJvbWUgdXNlciBhZ2VudCBzdHlsZXMgd2hpY2ggaGF2ZSBoNSBhdCAwLjgzZW1cbiAgLy8gYW5kIGg2IGF0IDAuNjdlbS5cbiAgLm1hdC1oNSwgI3skc2VsZWN0b3J9IGg1IHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1mb250LXNob3J0aGFuZChcbiAgICAgICAvLyBjYWxjIGlzIHVzZWQgaGVyZSB0byBzdXBwb3J0IGNzcyB2YXJpYWJsZXNcbiAgICAgIGNhbGMoI3ttYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSl9ICogMC44MyksXG4gICAgICBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0xKSxcbiAgICAgIG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBib2R5LTEpLFxuICAgICAgbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGJvZHktMSlcbiAgICApO1xuXG4gICAgbWFyZ2luOiAwIDAgMTJweDtcbiAgfVxuXG4gIC5tYXQtaDYsICN7JHNlbGVjdG9yfSBoNiB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktZm9udC1zaG9ydGhhbmQoXG4gICAgICAgLy8gY2FsYyBpcyB1c2VkIGhlcmUgdG8gc3VwcG9ydCBjc3MgdmFyaWFibGVzXG4gICAgICBjYWxjKCN7bWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpfSAqIDAuNjcpLFxuICAgICAgbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMSksXG4gICAgICBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgYm9keS0xKSxcbiAgICAgIG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBib2R5LTEpXG4gICAgKTtcblxuICAgIG1hcmdpbjogMCAwIDEycHg7XG4gIH1cblxuICAubWF0LWJvZHktc3Ryb25nLCAubWF0LWJvZHktMiB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGJvZHktMik7XG4gIH1cblxuICAubWF0LWJvZHksIC5tYXQtYm9keS0xLCAjeyRzZWxlY3Rvcn0ge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBib2R5LTEpO1xuXG4gICAgcCB7XG4gICAgICBtYXJnaW46IDAgMCAxMnB4O1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc21hbGwsIC5tYXQtY2FwdGlvbiB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGNhcHRpb24pO1xuICB9XG5cbiAgLm1hdC1kaXNwbGF5LTQsICN7JHNlbGVjdG9yfSAubWF0LWRpc3BsYXktNCB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGRpc3BsYXktNCk7XG4gICAgbWFyZ2luOiAwIDAgNTZweDtcbiAgfVxuXG4gIC5tYXQtZGlzcGxheS0zLCAjeyRzZWxlY3Rvcn0gLm1hdC1kaXNwbGF5LTMge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBkaXNwbGF5LTMpO1xuICAgIG1hcmdpbjogMCAwIDY0cHg7XG4gIH1cblxuICAubWF0LWRpc3BsYXktMiwgI3skc2VsZWN0b3J9IC5tYXQtZGlzcGxheS0yIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgZGlzcGxheS0yKTtcbiAgICBtYXJnaW46IDAgMCA2NHB4O1xuICB9XG5cbiAgLm1hdC1kaXNwbGF5LTEsICN7JHNlbGVjdG9yfSAubWF0LWRpc3BsYXktMSB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIGRpc3BsYXktMSk7XG4gICAgbWFyZ2luOiAwIDAgNjRweDtcbiAgfVxufVxuXG5cblxuXG5AbWl4aW4gbWF0LWF1dG9jb21wbGV0ZS10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcblxuICAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oNCwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gICAgLy8gU2VsZWN0ZWQgb3B0aW9ucyBpbiBhdXRvY29tcGxldGVzIHNob3VsZCBub3QgYmUgZ3JheSwgYnV0IHdlXG4gICAgLy8gb25seSB3YW50IHRvIG92ZXJyaWRlIHRoZSBiYWNrZ3JvdW5kIGZvciBzZWxlY3RlZCBvcHRpb25zIGlmXG4gICAgLy8gdGhleSBhcmUgKm5vdCogaW4gaG92ZXIgb3IgZm9jdXMgc3RhdGUuIFRoaXMgY2hhbmdlIGhhcyB0byBiZVxuICAgIC8vIG1hZGUgaGVyZSBiZWNhdXNlIGJhc2Ugb3B0aW9uIHN0eWxlcyBhcmUgc2hhcmVkIGJldHdlZW4gdGhlXG4gICAgLy8gYXV0b2NvbXBsZXRlIGFuZCB0aGUgc2VsZWN0LlxuICAgIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1hY3RpdmUpOm5vdCg6aG92ZXIpIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG5cbiAgICAgICY6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSB7XG4gICAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG5cbkBtaXhpbiBtYXQtYXV0b2NvbXBsZXRlLXR5cG9ncmFwaHkoJGNvbmZpZykgeyB9XG5cbi8vIFRoaXMgY29udGFpbnMgYWxsIG9mIHRoZSBzdHlsZXMgZm9yIHRoZSBiYWRnZVxuLy8gcmF0aGVyIHRoYW4ganVzdCB0aGUgY29sb3IvdGhlbWUgYmVjYXVzZSBvZlxuLy8gbm8gc3R5bGUgc2hlZXQgc3VwcG9ydCBmb3IgZGlyZWN0aXZlcy5cblxuXG5cblxuXG4kbWF0LWJhZGdlLWZvbnQtc2l6ZTogMTJweDtcbiRtYXQtYmFkZ2UtZm9udC13ZWlnaHQ6IDYwMDtcbiRtYXQtYmFkZ2UtZGVmYXVsdC1zaXplOiAyMnB4ICFkZWZhdWx0O1xuJG1hdC1iYWRnZS1zbWFsbC1zaXplOiAkbWF0LWJhZGdlLWRlZmF1bHQtc2l6ZSAtIDY7XG4kbWF0LWJhZGdlLWxhcmdlLXNpemU6ICRtYXQtYmFkZ2UtZGVmYXVsdC1zaXplICsgNjtcblxuLy8gTWl4aW4gZm9yIGJ1aWxkaW5nIG9mZnNldCBnaXZlbiBkaWZmZXJlbnQgc2l6ZXNcbkBtaXhpbiBfbWF0LWJhZGdlLXNpemUoJHNpemUpIHtcbiAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICB3aWR0aDogJHNpemU7XG4gICAgaGVpZ2h0OiAkc2l6ZTtcbiAgICBsaW5lLWhlaWdodDogJHNpemU7XG4gIH1cblxuICAmLm1hdC1iYWRnZS1hYm92ZSB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIHRvcDogLSRzaXplIC8gMjtcbiAgICB9XG4gIH1cblxuICAmLm1hdC1iYWRnZS1iZWxvdyB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIGJvdHRvbTogLSRzaXplIC8gMjtcbiAgICB9XG4gIH1cblxuICAmLm1hdC1iYWRnZS1iZWZvcmUge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICBsZWZ0OiAtJHNpemU7XG4gICAgfVxuICB9XG5cbiAgW2Rpcj0ncnRsJ10gJi5tYXQtYmFkZ2UtYmVmb3JlIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgbGVmdDogYXV0bztcbiAgICAgIHJpZ2h0OiAtJHNpemU7XG4gICAgfVxuICB9XG5cbiAgJi5tYXQtYmFkZ2UtYWZ0ZXIge1xuICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICByaWdodDogLSRzaXplO1xuICAgIH1cbiAgfVxuXG4gIFtkaXI9J3J0bCddICYubWF0LWJhZGdlLWFmdGVyIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgcmlnaHQ6IGF1dG87XG4gICAgICBsZWZ0OiAtJHNpemU7XG4gICAgfVxuICB9XG5cbiAgJi5tYXQtYmFkZ2Utb3ZlcmxhcCB7XG4gICAgJi5tYXQtYmFkZ2UtYmVmb3JlIHtcbiAgICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICAgIGxlZnQ6IC0kc2l6ZSAvIDI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgW2Rpcj0ncnRsJ10gJi5tYXQtYmFkZ2UtYmVmb3JlIHtcbiAgICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICAgIGxlZnQ6IGF1dG87XG4gICAgICAgIHJpZ2h0OiAtJHNpemUgLyAyO1xuICAgICAgfVxuICAgIH1cblxuICAgICYubWF0LWJhZGdlLWFmdGVyIHtcbiAgICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICAgIHJpZ2h0OiAtJHNpemUgLyAyO1xuICAgICAgfVxuICAgIH1cblxuICAgIFtkaXI9J3J0bCddICYubWF0LWJhZGdlLWFmdGVyIHtcbiAgICAgIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgICBsZWZ0OiAtJHNpemUgLyAyO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWJhZGdlLXRoZW1lKCR0aGVtZSkge1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIGRlZmF1bHQtY29udHJhc3QpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG5cbiAgICBAaW5jbHVkZSBjZGstaGlnaC1jb250cmFzdChhY3RpdmUsIG9mZikge1xuICAgICAgb3V0bGluZTogc29saWQgMXB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICB9XG4gIH1cblxuICAubWF0LWJhZGdlLWFjY2VudCB7XG4gICAgLm1hdC1iYWRnZS1jb250ZW50IHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYWNjZW50KTtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgZGVmYXVsdC1jb250cmFzdCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1iYWRnZS13YXJuIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgZGVmYXVsdC1jb250cmFzdCk7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJHdhcm4pO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYmFkZ2Uge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxuXG4gIC5tYXQtYmFkZ2UtaGlkZGVuIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAubWF0LWJhZGdlLWRpc2FibGVkIHtcbiAgICAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgICAgJGFwcC1iYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdiYWNrZ3JvdW5kJyk7XG4gICAgICAkYmFkZ2UtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtYnV0dG9uKTtcblxuICAgICAgLy8gVGhlIGRpc2FibGVkIGNvbG9yIHVzdWFsbHkgaGFzIHNvbWUga2luZCBvZiBvcGFjaXR5LCBidXQgYmVjYXVzZSB0aGUgYmFkZ2UgaXMgb3ZlcmxheWVkXG4gICAgICAvLyBvbiB0b3Agb2Ygc29tZXRoaW5nIGVsc2UsIGl0IHdvbid0IGxvb2sgZ29vZCBpZiBpdCdzIG9wYXF1ZS4gSWYgaXQgaXMgYSBjb2xvciAqdHlwZSosXG4gICAgICAvLyB3ZSBjb252ZXJ0IGl0IGludG8gYSBzb2xpZCBjb2xvciBieSB0YWtpbmcgdGhlIG9wYWNpdHkgZnJvbSB0aGUgcmdiYSB2YWx1ZSBhbmQgdXNpbmdcbiAgICAgIC8vIHRoZSB2YWx1ZSB0byBkZXRlcm1pbmUgdGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIGJhY2tncm91bmQgdG8gcHV0IGludG8gZm9yZWdyb3VuZCB3aGVuXG4gICAgICAvLyBtaXhpbmcgdGhlIGNvbG9ycyB0b2dldGhlci5cbiAgICAgIEBpZiAodHlwZS1vZigkYmFkZ2UtY29sb3IpID09IGNvbG9yIGFuZCB0eXBlLW9mKCRhcHAtYmFja2dyb3VuZCkgPT0gY29sb3IpIHtcbiAgICAgICAgJGJhZGdlLW9wYWNpdHk6IG9wYWNpdHkoJGJhZGdlLWNvbG9yKTtcbiAgICAgICAgYmFja2dyb3VuZDogbWl4KCRhcHAtYmFja2dyb3VuZCwgcmdiYSgkYmFkZ2UtY29sb3IsIDEpLCAoMSAtICRiYWRnZS1vcGFjaXR5KSAqIDEwMCUpO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkYmFkZ2UtY29sb3I7XG4gICAgICB9XG5cbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyMDBtcyBlYXNlLWluLW91dDtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNik7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG5cbiAgLm5nLWFuaW1hdGUtZGlzYWJsZWQgLm1hdC1iYWRnZS1jb250ZW50LFxuICAubWF0LWJhZGdlLWNvbnRlbnQuX21hdC1hbmltYXRpb24tbm9vcGFibGUge1xuICAgIHRyYW5zaXRpb246IG5vbmU7XG4gIH1cblxuICAvLyBUaGUgYWN0aXZlIGNsYXNzIGlzIGFkZGVkIGFmdGVyIHRoZSBlbGVtZW50IGlzIGFkZGVkXG4gIC8vIHNvIGl0IGNhbiBhbmltYXRlIHNjYWxlIHRvIGRlZmF1bHRcbiAgLm1hdC1iYWRnZS1jb250ZW50Lm1hdC1iYWRnZS1hY3RpdmUge1xuICAgIC8vIFNjYWxlIHRvIGBub25lYCBpbnN0ZWFkIG9mIGAxYCB0byBhdm9pZCBibHVycnkgdGV4dCBpbiBzb21lIGJyb3dzZXJzLlxuICAgIHRyYW5zZm9ybTogbm9uZTtcbiAgfVxuXG4gIC5tYXQtYmFkZ2Utc21hbGwge1xuICAgIEBpbmNsdWRlIF9tYXQtYmFkZ2Utc2l6ZSgkbWF0LWJhZGdlLXNtYWxsLXNpemUpO1xuICB9XG4gIC5tYXQtYmFkZ2UtbWVkaXVtIHtcbiAgICBAaW5jbHVkZSBfbWF0LWJhZGdlLXNpemUoJG1hdC1iYWRnZS1kZWZhdWx0LXNpemUpO1xuICB9XG4gIC5tYXQtYmFkZ2UtbGFyZ2Uge1xuICAgIEBpbmNsdWRlIF9tYXQtYmFkZ2Utc2l6ZSgkbWF0LWJhZGdlLWxhcmdlLXNpemUpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtYmFkZ2UtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgZm9udC13ZWlnaHQ6ICRtYXQtYmFkZ2UtZm9udC13ZWlnaHQ7XG4gICAgZm9udC1zaXplOiAkbWF0LWJhZGdlLWZvbnQtc2l6ZTtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC1iYWRnZS1zbWFsbCAubWF0LWJhZGdlLWNvbnRlbnQge1xuICAgIC8vIFNldCB0aGUgZm9udCBzaXplIHRvIDc1JSBvZiB0aGUgb3JpZ2luYWwuXG4gICAgZm9udC1zaXplOiAkbWF0LWJhZGdlLWZvbnQtc2l6ZSAqIDAuNzU7XG4gIH1cblxuICAubWF0LWJhZGdlLWxhcmdlIC5tYXQtYmFkZ2UtY29udGVudCB7XG4gICAgZm9udC1zaXplOiAkbWF0LWJhZGdlLWZvbnQtc2l6ZSAqIDI7XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LWJvdHRvbS1zaGVldC10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXIge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDE2LCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZGlhbG9nKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWJvdHRvbS1zaGVldC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgYm9keS0xKTtcbiAgfVxufVxuXG5cblxuXG5cbiRfbWF0LWJ1dHRvbi1yaXBwbGUtb3BhY2l0eTogMC4xO1xuXG4vLyBBcHBsaWVzIGEgZm9jdXMgc3R5bGUgdG8gYW4gbWF0LWJ1dHRvbiBlbGVtZW50IGZvciBlYWNoIG9mIHRoZSBzdXBwb3J0ZWQgcGFsZXR0ZXMuXG5AbWl4aW4gX21hdC1idXR0b24tZm9jdXMtb3ZlcmxheS1jb2xvcigkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG5cbiAgJi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnkpO1xuICB9XG5cbiAgJi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYWNjZW50KTtcbiAgfVxuXG4gICYubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCR3YXJuKTtcbiAgfVxuXG4gICZbZGlzYWJsZWRdIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG59XG5cbi8vIEFwcGxpZXMgdGhlIGJhY2tncm91bmQgY29sb3IgZm9yIGEgcmlwcGxlLiBJZiB0aGUgdmFsdWUgcHJvdmlkZWQgaXMgbm90IGEgU2FzcyBjb2xvcixcbi8vIHdlIGFzc3VtZSB0aGF0IHdlJ3ZlIGJlZW4gZ2l2ZW4gYSBDU1MgdmFyaWFibGUuIFNpbmNlIHdlIGNhbid0IHBlcmZvcm0gYWxwaGEtYmxlbmRpbmdcbi8vIG9uIGEgQ1NTIHZhcmlhYmxlLCB3ZSBpbnN0ZWFkIGFkZCB0aGUgb3BhY2l0eSBkaXJlY3RseSB0byB0aGUgcmlwcGxlIGVsZW1lbnQuXG5AbWl4aW4gX21hdC1idXR0b24tcmlwcGxlLWJhY2tncm91bmQoJHBhbGV0dGUsICRodWUsICRvcGFjaXR5KSB7XG4gICRiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsICRodWUsICRvcGFjaXR5KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY29sb3I7XG4gIEBpZiAodHlwZS1vZigkYmFja2dyb3VuZC1jb2xvcikgIT0gY29sb3IpIHtcbiAgICBvcGFjaXR5OiAkb3BhY2l0eTtcbiAgfVxufVxuXG5AbWl4aW4gX21hdC1idXR0b24tcmlwcGxlLWNvbG9yKCR0aGVtZSwgJGh1ZSwgJG9wYWNpdHk6ICRfbWF0LWJ1dHRvbi1yaXBwbGUtb3BhY2l0eSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcblxuICAmLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLXJpcHBsZS1iYWNrZ3JvdW5kKCRwcmltYXJ5LCAkaHVlLCAkb3BhY2l0eSk7XG4gIH1cblxuICAmLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgQGluY2x1ZGUgX21hdC1idXR0b24tcmlwcGxlLWJhY2tncm91bmQoJGFjY2VudCwgJGh1ZSwgJG9wYWNpdHkpO1xuICB9XG5cbiAgJi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi1yaXBwbGUtYmFja2dyb3VuZCgkd2FybiwgJGh1ZSwgJG9wYWNpdHkpO1xuICB9XG59XG5cbi8vIEFwcGxpZXMgYSBwcm9wZXJ0eSB0byBhbiBtYXQtYnV0dG9uIGVsZW1lbnQgZm9yIGVhY2ggb2YgdGhlIHN1cHBvcnRlZCBwYWxldHRlcy5cbkBtaXhpbiBfbWF0LWJ1dHRvbi10aGVtZS1wcm9wZXJ0eSgkdGhlbWUsICRwcm9wZXJ0eSwgJGh1ZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAmLm1hdC1wcmltYXJ5IHtcbiAgICAjeyRwcm9wZXJ0eX06IG1hdC1jb2xvcigkcHJpbWFyeSwgJGh1ZSk7XG4gIH1cbiAgJi5tYXQtYWNjZW50IHtcbiAgICAjeyRwcm9wZXJ0eX06IG1hdC1jb2xvcigkYWNjZW50LCAkaHVlKTtcbiAgfVxuICAmLm1hdC13YXJuIHtcbiAgICAjeyRwcm9wZXJ0eX06IG1hdC1jb2xvcigkd2FybiwgJGh1ZSk7XG4gIH1cblxuICAmLm1hdC1wcmltYXJ5LCAmLm1hdC1hY2NlbnQsICYubWF0LXdhcm4sICZbZGlzYWJsZWRdIHtcbiAgICAmW2Rpc2FibGVkXSB7XG4gICAgICAkcGFsZXR0ZTogaWYoJHByb3BlcnR5ID09ICdjb2xvcicsICRmb3JlZ3JvdW5kLCAkYmFja2dyb3VuZCk7XG4gICAgICAjeyRwcm9wZXJ0eX06IG1hdC1jb2xvcigkcGFsZXR0ZSwgZGlzYWJsZWQtYnV0dG9uKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1idXR0b24tdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtYnV0dG9uLCAubWF0LWljb24tYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uIHtcbiAgICAvLyBCdXR0b25zIHdpdGhvdXQgYSBiYWNrZ3JvdW5kIGNvbG9yIHNob3VsZCBpbmhlcml0IHRoZSBmb250IGNvbG9yLiBUaGlzIGlzIG5lY2Vzc2FyeSB0b1xuICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBidXR0b24gaXMgcmVhZGFibGUgb24gY3VzdG9tIGJhY2tncm91bmQgY29sb3JzLiBJdCdzIHdyb25nIHRvIGFsd2F5cyBhc3N1bWVcbiAgICAvLyB0aGF0IHRob3NlIGJ1dHRvbnMgYXJlIGFsd2F5cyBwbGFjZWQgaW5zaWRlIG9mIGNvbnRhaW5lcnMgd2l0aCB0aGUgZGVmYXVsdCBiYWNrZ3JvdW5kXG4gICAgLy8gY29sb3Igb2YgdGhlIHRoZW1lIChlLmcuIHRoZW1lZCB0b29sYmFycykuXG4gICAgY29sb3I6IGluaGVyaXQ7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi10aGVtZS1wcm9wZXJ0eSgkdGhlbWUsICdjb2xvcicsIHRleHQpO1xuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXktY29sb3IoJHRoZW1lKTtcblxuICAgIC8vIFNldHVwIHRoZSByaXBwbGUgY29sb3IgdG8gYmUgYmFzZWQgb24gdGhlIHRleHQgY29sb3IuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSByaXBwbGVzXG4gICAgLy8gYXJlIG1hdGNoaW5nIHdpdGggdGhlIGN1cnJlbnQgdGhlbWUgcGFsZXR0ZSBhbmQgYXJlIGluIGNvbnRyYXN0IHRvIHRoZSBiYWNrZ3JvdW5kIGNvbG9yXG4gICAgLy8gKGUuZyBpbiB0aGVtZWQgdG9vbGJhcnMpLlxuICAgIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgICAgb3BhY2l0eTogJF9tYXQtYnV0dG9uLXJpcHBsZS1vcGFjaXR5O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkge1xuICAgIGJhY2tncm91bmQ6IG1hcF9nZXQoJGZvcmVncm91bmQsIGJhc2UpO1xuICB9XG5cbiAgLy8gTm90ZTogdGhpcyBuZWVkcyBhIGJpdCBleHRyYSBzcGVjaWZpY2l0eSwgYmVjYXVzZSB3ZSdyZSBub3QgZ3VhcmFudGVlZCB0aGUgaW5jbHVzaW9uXG4gIC8vIG9yZGVyIG9mIHRoZSB0aGVtZSBzdHlsZXMgYW5kIHRoZSBidXR0b24gcmVzZXQgbWF5IGVuZCB1cCByZXNldHRpbmcgdGhpcyBhcyB3ZWxsLlxuICAubWF0LXN0cm9rZWQtYnV0dG9uOm5vdChbZGlzYWJsZWRdKSB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG5cbiAgLm1hdC1mbGF0LWJ1dHRvbiwgLm1hdC1yYWlzZWQtYnV0dG9uLCAubWF0LWZhYiwgLm1hdC1taW5pLWZhYiB7XG4gICAgLy8gRGVmYXVsdCBmb250IGFuZCBiYWNrZ3JvdW5kIGNvbG9yIHdoZW4gbm90IHVzaW5nIGFueSBjb2xvciBwYWxldHRlLlxuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgcmFpc2VkLWJ1dHRvbik7XG5cbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi10aGVtZS1wcm9wZXJ0eSgkdGhlbWUsICdjb2xvcicsIGRlZmF1bHQtY29udHJhc3QpO1xuICAgIEBpbmNsdWRlIF9tYXQtYnV0dG9uLXRoZW1lLXByb3BlcnR5KCR0aGVtZSwgJ2JhY2tncm91bmQtY29sb3InLCBkZWZhdWx0KTtcbiAgICBAaW5jbHVkZSBfbWF0LWJ1dHRvbi1yaXBwbGUtY29sb3IoJHRoZW1lLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgfVxuXG4gIC5tYXQtc3Ryb2tlZC1idXR0b24sIC5tYXQtZmxhdC1idXR0b24ge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDAsICR0aGVtZSk7XG4gIH1cblxuICAubWF0LXJhaXNlZC1idXR0b24ge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDIsICR0aGVtZSk7XG5cbiAgICAmOm5vdChbZGlzYWJsZWRdKTphY3RpdmUge1xuICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oOCwgJHRoZW1lKTtcbiAgICB9XG5cbiAgICAmW2Rpc2FibGVkXSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigwLCAkdGhlbWUpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZmFiLCAubWF0LW1pbmktZmFiIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbig2LCAkdGhlbWUpO1xuXG4gICAgJjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDEyLCAkdGhlbWUpO1xuICAgIH1cblxuICAgICZbZGlzYWJsZWRdIHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtb3ZlcnJpZGFibGUtZWxldmF0aW9uKDAsICR0aGVtZSk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtYnV0dG9uLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWJ1dHRvbiwgLm1hdC1yYWlzZWQtYnV0dG9uLCAubWF0LWljb24tYnV0dG9uLCAubWF0LXN0cm9rZWQtYnV0dG9uLFxuICAubWF0LWZsYXQtYnV0dG9uLCAubWF0LWZhYiwgLm1hdC1taW5pLWZhYiB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgYnV0dG9uKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYnV0dG9uKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJ1dHRvbik7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LWJ1dHRvbi10b2dnbGUtdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRkaXZpZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLFxuICAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDIsICR0aGVtZSk7XG4gIH1cblxuICAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLFxuICAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCB7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgaGludC10ZXh0KTtcblxuICAgIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZm9jdXNlZC1idXR0b24pO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuXG4gICAgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBmb2N1c2VkLWJ1dHRvbiwgMSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlICsgLm1hdC1idXR0b24tdG9nZ2xlIHtcbiAgICBib3JkZXItbGVmdDogc29saWQgMXB4ICRkaXZpZGVyLWNvbG9yO1xuICB9XG5cbiAgW2Rpcj0ncnRsJ10gLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlICsgLm1hdC1idXR0b24tdG9nZ2xlIHtcbiAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICBib3JkZXItcmlnaHQ6IHNvbGlkIDFweCAkZGl2aWRlci1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1idXR0b24tdG9nZ2xlLXZlcnRpY2FsIHtcbiAgICAubWF0LWJ1dHRvbi10b2dnbGUgKyAubWF0LWJ1dHRvbi10b2dnbGUge1xuICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gICAgICBib3JkZXItcmlnaHQ6IG5vbmU7XG4gICAgICBib3JkZXItdG9wOiBzb2xpZCAxcHggJGRpdmlkZXItY29sb3I7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgc2VsZWN0ZWQtYnV0dG9uKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG5cbiAgICAmLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC1idXR0b24pO1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZGlzYWJsZWQtYnV0dG9uLXRvZ2dsZSk7XG5cbiAgICAmLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgICB9XG5cbiAgICAmLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBzZWxlY3RlZC1kaXNhYmxlZC1idXR0b24pO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQsXG4gIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIHtcbiAgICBib3JkZXI6IHNvbGlkIDFweCAkZGl2aWRlci1jb2xvcjtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWJ1dHRvbi10b2dnbGUtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtYnV0dG9uLXRvZ2dsZSB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxufVxuXG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LWNhcmQtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1jYXJkIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigxLCAkdGhlbWUpO1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgICAvLyBOZWVkcyBleHRyYSBzcGVjaWZpY2l0eSB0byBiZSBhYmxlIHRvIG92ZXJyaWRlIHRoZSBlbGV2YXRpb24gc2VsZWN0b3JzLlxuICAgICYubWF0LWNhcmQtZmxhdCB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLW92ZXJyaWRhYmxlLWVsZXZhdGlvbigwLCAkdGhlbWUpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtY2FyZC1zdWJ0aXRsZSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtY2FyZC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1jYXJkIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC1jYXJkLXRpdGxlIHtcbiAgICBmb250OiB7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGhlYWRsaW5lKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIHRpdGxlKTtcbiAgICB9XG4gIH1cblxuICAubWF0LWNhcmQtaGVhZGVyIC5tYXQtY2FyZC10aXRsZSB7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIHRpdGxlKTtcbiAgfVxuXG4gIC5tYXQtY2FyZC1zdWJ0aXRsZSxcbiAgLm1hdC1jYXJkLWNvbnRlbnQge1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpO1xuICB9XG59XG5cblxuXG5cblxuQG1peGluIG1hdC1jaGVja2JveC10aGVtZSgkdGhlbWUpIHtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cblxuICAvLyBUaGUgY29sb3Igb2YgdGhlIGNoZWNrYm94J3MgY2hlY2ttYXJrIC8gbWl4ZWRtYXJrLlxuICAkY2hlY2tib3gtbWFyay1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kKTtcblxuICAvLyBOT1RFKHRyYXZpc2thdWZtYW4pOiBXaGlsZSB0aGUgc3BlYyBjYWxscyBmb3IgdHJhbnNsdWNlbnQgYmxhY2tzL3doaXRlcyBmb3IgZGlzYWJsZWQgY29sb3JzLFxuICAvLyB0aGlzIGRvZXMgbm90IHdvcmsgd2VsbCB3aXRoIGVsZW1lbnRzIGxheWVyZWQgb24gdG9wIG9mIG9uZSBhbm90aGVyLiBUbyBnZXQgYXJvdW5kIHRoaXMgd2VcbiAgLy8gYmxlbmQgdGhlIGNvbG9ycyB0b2dldGhlciBiYXNlZCBvbiB0aGUgYmFzZSBjb2xvciBhbmQgdGhlIHRoZW1lIGJhY2tncm91bmQuXG4gICR3aGl0ZS0zMHBjdC1vcGFjaXR5LW9uLWRhcms6ICM2ODY4Njg7XG4gICRibGFjay0yNnBjdC1vcGFjaXR5LW9uLWxpZ2h0OiAjYjBiMGIwO1xuICAkZGlzYWJsZWQtY29sb3I6IGlmKCRpcy1kYXJrLXRoZW1lLCAkd2hpdGUtMzBwY3Qtb3BhY2l0eS1vbi1kYXJrLCAkYmxhY2stMjZwY3Qtb3BhY2l0eS1vbi1saWdodCk7XG5cbiAgLm1hdC1jaGVja2JveC1mcmFtZSB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrIHtcbiAgICBmaWxsOiAkY2hlY2tib3gtbWFyay1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGgge1xuICAgIC8vICFpbXBvcnRhbnQgaXMgbmVlZGVkIGhlcmUgYmVjYXVzZSBhIHN0cm9rZSBtdXN0IGJlIHNldCBhcyBhblxuICAgIC8vIGF0dHJpYnV0ZSBvbiB0aGUgU1ZHIGluIG9yZGVyIGZvciBsaW5lIGFuaW1hdGlvbiB0byB3b3JrIHByb3Blcmx5LlxuICAgIHN0cm9rZTogJGNoZWNrYm94LW1hcmstY29sb3IgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5tYXQtY2hlY2tib3gtbWl4ZWRtYXJrIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY2hlY2tib3gtbWFyay1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSwgLm1hdC1jaGVja2JveC1jaGVja2VkIHtcbiAgICAmLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnkpO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkd2Fybik7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1jaGVja2JveC1kaXNhYmxlZCB7XG4gICAgJi5tYXQtY2hlY2tib3gtY2hlY2tlZCxcbiAgICAmLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIHtcbiAgICAgIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlZC1jb2xvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOm5vdCgubWF0LWNoZWNrYm94LWNoZWNrZWQpIHtcbiAgICAgIC5tYXQtY2hlY2tib3gtZnJhbWUge1xuICAgICAgICBib3JkZXItY29sb3I6ICRkaXNhYmxlZC1jb2xvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgICB9XG4gIH1cblxuICAvLyBTd2l0Y2ggdGhpcyB0byBhIHNvbGlkIGNvbG9yIHNpbmNlIHdlJ3JlIHVzaW5nIGBvcGFjaXR5YFxuICAvLyB0byBjb250cm9sIGhvdyBvcGFxdWUgdGhlIHJpcHBsZSBzaG91bGQgYmUuXG4gIC5tYXQtY2hlY2tib3ggLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWFwX2dldChtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCksIGJhc2UpO1xuICB9XG5cbiAgLm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKSxcbiAgLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpIHtcbiAgICAmLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRwcmltYXJ5KTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGFjY2VudCk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkd2Fybik7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtY2hlY2tib3gtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtY2hlY2tib3gge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAvLyBUT0RPKGthcmEpOiBSZW1vdmUgdGhpcyBzdHlsZSB3aGVuIGZpeGluZyB2ZXJ0aWNhbCBiYXNlbGluZVxuICAubWF0LWNoZWNrYm94LWxheW91dCAubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgICBsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGJvZHktMik7XG4gIH1cbn1cblxuXG5cblxuXG5cbiRtYXQtY2hpcC1yZW1vdmUtZm9udC1zaXplOiAxOHB4O1xuXG5AbWl4aW4gbWF0LWNoaXBzLWNvbG9yKCRmb3JlZ3JvdW5kLCAkYmFja2dyb3VuZCkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZDtcbiAgY29sb3I6ICRmb3JlZ3JvdW5kO1xuXG4gIC5tYXQtY2hpcC1yZW1vdmUge1xuICAgIGNvbG9yOiAkZm9yZWdyb3VuZDtcbiAgICBvcGFjaXR5OiAwLjQ7XG4gIH1cbn1cblxuXG4vLyBBcHBsaWVzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGZvciBhIHJpcHBsZSBlbGVtZW50LlxuLy8gSWYgdGhlIGNvbG9yIHZhbHVlIHByb3ZpZGVkIGlzIG5vdCBhIFNhc3MgY29sb3IsXG4vLyB3ZSBhc3N1bWUgdGhhdCB3ZSd2ZSBiZWVuIGdpdmVuIGEgQ1NTIHZhcmlhYmxlLlxuLy8gU2luY2Ugd2UgY2FuJ3QgcGVyZm9ybSBhbHBoYS1ibGVuZGluZyBvbiBhIENTUyB2YXJpYWJsZSxcbi8vIHdlIGluc3RlYWQgYWRkIHRoZSBvcGFjaXR5IGRpcmVjdGx5IHRvIHRoZSByaXBwbGUgZWxlbWVudC5cbkBtaXhpbiBfbWF0LWNoaXBzLXJpcHBsZS1iYWNrZ3JvdW5kKCRwYWxldHRlLCAkZGVmYXVsdC1jb250cmFzdCwgJG9wYWNpdHkpIHtcbiAgJGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgJGRlZmF1bHQtY29udHJhc3QsICRvcGFjaXR5KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY29sb3I7XG4gIEBpZiAodHlwZS1vZigkYmFja2dyb3VuZC1jb2xvcikgIT0gY29sb3IpIHtcbiAgICBvcGFjaXR5OiAkb3BhY2l0eTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWNoaXBzLXRoZW1lLWNvbG9yKCRwYWxldHRlKSB7XG4gIEBpbmNsdWRlIG1hdC1jaGlwcy1jb2xvcihtYXQtY29sb3IoJHBhbGV0dGUsIGRlZmF1bHQtY29udHJhc3QpLCBtYXQtY29sb3IoJHBhbGV0dGUpKTtcblxuICAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgIEBpbmNsdWRlIF9tYXQtY2hpcHMtcmlwcGxlLWJhY2tncm91bmQoJHBhbGV0dGUsIGRlZmF1bHQtY29udHJhc3QsIDAuMSk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1jaGlwcy10aGVtZSgkdGhlbWUpIHtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgJHVuc2VsZWN0ZWQtYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCB1bnNlbGVjdGVkLWNoaXApO1xuICAkdW5zZWxlY3RlZC1mb3JlZ3JvdW5kOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcCB7XG4gICAgQGluY2x1ZGUgbWF0LWNoaXBzLWNvbG9yKCR1bnNlbGVjdGVkLWZvcmVncm91bmQsICR1bnNlbGVjdGVkLWJhY2tncm91bmQpO1xuXG4gICAgJjpub3QoLm1hdC1jaGlwLWRpc2FibGVkKSB7XG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDMsICR0aGVtZSk7XG4gICAgICB9XG5cbiAgICAgIC5tYXQtY2hpcC1yZW1vdmU6aG92ZXIge1xuICAgICAgICBvcGFjaXR5OiAwLjU0O1xuICAgICAgfVxuICAgIH1cblxuICAgICYubWF0LWNoaXAtZGlzYWJsZWQge1xuICAgICAgb3BhY2l0eTogMC40O1xuICAgIH1cblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hcF9nZXQoJGZvcmVncm91bmQsIGJhc2UpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZCB7XG4gICAgJi5tYXQtcHJpbWFyeSB7XG4gICAgICBAaW5jbHVkZSBtYXQtY2hpcHMtdGhlbWUtY29sb3IoJHByaW1hcnkpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgQGluY2x1ZGUgbWF0LWNoaXBzLXRoZW1lLWNvbG9yKCR3YXJuKTtcbiAgICB9XG5cbiAgICAmLm1hdC1hY2NlbnQge1xuICAgICAgQGluY2x1ZGUgbWF0LWNoaXBzLXRoZW1lLWNvbG9yKCRhY2NlbnQpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWNoaXBzLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWNoaXAge1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTIpO1xuICAgIGZvbnQtd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0yKTtcblxuICAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uLFxuICAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb24ge1xuICAgICAgZm9udC1zaXplOiAkbWF0LWNoaXAtcmVtb3ZlLWZvbnQtc2l6ZTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LXRhYmxlLXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtdGFibGUge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgJ2NhcmQnKTtcbiAgfVxuXG4gIC5tYXQtdGFibGUgdGhlYWQsIC5tYXQtdGFibGUgdGJvZHksIC5tYXQtdGFibGUgdGZvb3QsXG4gIG1hdC1oZWFkZXItcm93LCBtYXQtcm93LCBtYXQtZm9vdGVyLXJvdyxcbiAgW21hdC1oZWFkZXItcm93XSwgW21hdC1yb3ddLCBbbWF0LWZvb3Rlci1yb3ddLFxuICAubWF0LXRhYmxlLXN0aWNreSB7XG4gICAgYmFja2dyb3VuZDogaW5oZXJpdDtcbiAgfVxuXG4gIG1hdC1yb3csIG1hdC1oZWFkZXItcm93LCBtYXQtZm9vdGVyLXJvdyxcbiAgdGgubWF0LWhlYWRlci1jZWxsLCB0ZC5tYXQtY2VsbCwgdGQubWF0LWZvb3Rlci1jZWxsIHtcbiAgICBib3JkZXItYm90dG9tLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG5cbiAgLm1hdC1oZWFkZXItY2VsbCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1jZWxsLCAubWF0LWZvb3Rlci1jZWxsIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXRhYmxlLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXRhYmxlIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG5cbiAgLm1hdC1oZWFkZXItY2VsbCB7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pO1xuICAgIGZvbnQtd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0yKTtcbiAgfVxuXG4gIC5tYXQtY2VsbCwgLm1hdC1mb290ZXItY2VsbCB7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSk7XG4gIH1cbn1cblxuXG5cblxuXG5cblxuJG1hdC1kYXRlcGlja2VyLXNlbGVjdGVkLXRvZGF5LWJveC1zaGFkb3ctd2lkdGg6IDFweDtcbiRtYXQtZGF0ZXBpY2tlci1zZWxlY3RlZC1mYWRlLWFtb3VudDogMC42O1xuJG1hdC1kYXRlcGlja2VyLXRvZGF5LWZhZGUtYW1vdW50OiAwLjI7XG4kbWF0LWNhbGVuZGFyLWJvZHktZm9udC1zaXplOiAxM3B4ICFkZWZhdWx0O1xuJG1hdC1jYWxlbmRhci13ZWVrZGF5LXRhYmxlLWZvbnQtc2l6ZTogMTFweCAhZGVmYXVsdDtcblxuQG1peGluIF9tYXQtZGF0ZXBpY2tlci1jb2xvcigkcGFsZXR0ZSkge1xuICAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgZGVmYXVsdC1jb250cmFzdCk7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQgPiAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQge1xuICAgICRiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJHBhbGV0dGUpO1xuXG4gICAgQGlmICh0eXBlLW9mKCRiYWNrZ3JvdW5kKSA9PSBjb2xvcikge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogZmFkZS1vdXQoJGJhY2tncm91bmQsICRtYXQtZGF0ZXBpY2tlci1zZWxlY3RlZC1mYWRlLWFtb3VudCk7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIC8vIElmIHdlIGNvdWxkbid0IHJlc29sdmUgdG8gYmFja2dyb3VuZCB0byBhIGNvbG9yIChlLmcuIGl0J3MgYSBDU1MgdmFyaWFibGUpLFxuICAgICAgLy8gZmFsbCBiYWNrIHRvIGZhZGluZyB0aGUgY29udGVudCBvdXQgdmlhIGBvcGFjaXR5YC5cbiAgICAgIG9wYWNpdHk6ICRtYXQtZGF0ZXBpY2tlci10b2RheS1mYWRlLWFtb3VudDtcbiAgICB9XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQge1xuICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwICRtYXQtZGF0ZXBpY2tlci1zZWxlY3RlZC10b2RheS1ib3gtc2hhZG93LXdpZHRoXG4gICAgICAgICAgICAgICAgbWF0LWNvbG9yKCRwYWxldHRlLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LWRhdGVwaWNrZXItdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG5cbiAgLm1hdC1jYWxlbmRhci1hcnJvdyB7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBpY29uKTtcbiAgfVxuXG4gIC8vIFRoZSBwcmV2L25leHQgYnV0dG9ucyBuZWVkIGEgYml0IG1vcmUgc3BlY2lmaWNpdHkgdG9cbiAgLy8gYXZvaWQgYmVpbmcgb3ZlcndyaXR0ZW4gYnkgdGhlIC5tYXQtaWNvbi1idXR0b24uXG4gIC5tYXQtZGF0ZXBpY2tlci10b2dnbGUsXG4gIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItbmV4dC1idXR0b24sXG4gIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItcHJldmlvdXMtYnV0dG9uIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBpY29uKTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBoaW50LXRleHQpO1xuICB9XG5cbiAgLm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXItZGl2aWRlcjo6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktbGFiZWwge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQgPiAubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyLFxuICAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZSxcbiAgLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZSB7XG4gICAgJiA+IC5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3Zlcik7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpIHtcbiAgICAvLyBOb3RlOiB0aG91Z2ggaXQncyBub3QgdGV4dCwgdGhlIGJvcmRlciBpcyBhIGhpbnQgYWJvdXQgdGhlIGZhY3QgdGhhdCB0aGlzIGlzIHRvZGF5J3MgZGF0ZSxcbiAgICAvLyBzbyB3ZSB1c2UgdGhlIGhpbnQgY29sb3IuXG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGhpbnQtdGV4dCk7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQgPiAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCkge1xuICAgICRjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBoaW50LXRleHQpO1xuXG4gICAgQGlmICh0eXBlLW9mKCRjb2xvcikgPT0gY29sb3IpIHtcbiAgICAgIGJvcmRlci1jb2xvcjogZmFkZS1vdXQoJGNvbG9yLCAkbWF0LWRhdGVwaWNrZXItdG9kYXktZmFkZS1hbW91bnQpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICAvLyBJZiB0aGUgY29sb3IgZGlkbid0IHJlc29sdmUgdG8gYSBjb2xvciB2YWx1ZSwgYnV0IHNvbWV0aGluZyBsaWtlIGEgQ1NTIHZhcmlhYmxlLCB3ZSBjYW4ndFxuICAgICAgLy8gZmFkZSBpdCBvdXQgc28gd2UgZmFsbCBiYWNrIHRvIHJlZHVjaW5nIHRoZSBlbGVtZW50IG9wYWNpdHkuIE5vdGUgdGhhdCB3ZSBkb24ndCB1c2UgdGhlXG4gICAgICAvLyAkbWF0LWRhdGVwaWNrZXItdG9kYXktZmFkZS1hbW91bnQsIGJlY2F1c2UgaGludCB0ZXh0IHVzdWFsbHkgaGFzIHNvbWUgb3BhY2l0eSBhcHBsaWVkXG4gICAgICAvLyB0byBpdCBhbHJlYWR5IGFuZCB3ZSBkb24ndCB3YW50IHRoZW0gdG8gc3RhY2sgb24gdG9wIG9mIGVhY2ggb3RoZXIuXG4gICAgICBvcGFjaXR5OiAwLjU7XG4gICAgfVxuICB9XG5cbiAgQGluY2x1ZGUgX21hdC1kYXRlcGlja2VyLWNvbG9yKG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KSk7XG5cbiAgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDQsICR0aGVtZSk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBjYXJkKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICBAaW5jbHVkZSBfbWF0LWRhdGVwaWNrZXItY29sb3IobWFwLWdldCgkdGhlbWUsIGFjY2VudCkpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgQGluY2x1ZGUgX21hdC1kYXRlcGlja2VyLWNvbG9yKG1hcC1nZXQoJHRoZW1lLCB3YXJuKSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQtdG91Y2gge1xuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDAsICR0aGVtZSk7XG4gIH1cblxuICAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSksIHRleHQpO1xuXG4gICAgJi5tYXQtYWNjZW50IHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IobWFwLWdldCgkdGhlbWUsIGFjY2VudCksIHRleHQpO1xuICAgIH1cblxuICAgICYubWF0LXdhcm4ge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcihtYXAtZ2V0KCR0aGVtZSwgd2FybiksIHRleHQpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWRhdGVwaWNrZXItdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtY2FsZW5kYXIge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LWNhbGVuZGFyLWJvZHkge1xuICAgIGZvbnQtc2l6ZTogJG1hdC1jYWxlbmRhci1ib2R5LWZvbnQtc2l6ZTtcbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItYm9keS1sYWJlbCxcbiAgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uIHtcbiAgICBmb250OiB7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJ1dHRvbik7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBidXR0b24pO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyIHRoIHtcbiAgICBmb250OiB7XG4gICAgICBzaXplOiAkbWF0LWNhbGVuZGFyLXdlZWtkYXktdGFibGUtZm9udC1zaXplO1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0xKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cblxuQG1peGluIG1hdC1kaWFsb2ctdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBAaW5jbHVkZSBfbWF0LXRoZW1lLWVsZXZhdGlvbigyNCwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGRpYWxvZyk7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1kaWFsb2ctdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtZGlhbG9nLXRpdGxlIHtcbiAgICBAaW5jbHVkZSBtYXQtdHlwb2dyYXBoeS1sZXZlbC10by1zdHlsZXMoJGNvbmZpZywgdGl0bGUpO1xuICB9XG59XG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LWV4cGFuc2lvbi1wYW5lbC10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWV4cGFuc2lvbi1wYW5lbCB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oMiwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG5cbiAgLm1hdC1hY3Rpb24tcm93IHtcbiAgICBib3JkZXItdG9wLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG5cbiAgLm1hdC1leHBhbnNpb24tcGFuZWwge1xuICAgICYgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkLFxuICAgICYgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQsXG4gICAgJjpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVyIHtcbiAgICAgICY6bm90KFthcmlhLWRpc2FibGVkPSd0cnVlJ10pIHtcbiAgICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBob3Zlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRGlzYWJsZSB0aGUgaG92ZXIgb24gdG91Y2ggZGV2aWNlcyBzaW5jZSBpdCBjYW4gYXBwZWFyIGxpa2UgaXQgaXMgc3R1Y2suIFdlIGNhbid0IHVzZVxuICAvLyBgQG1lZGlhIChob3ZlcilgIGFib3ZlLCBiZWNhdXNlIHRoZSBkZXNrdG9wIHN1cHBvcnQgYnJvd3NlciBzdXBwb3J0IGlzbid0IGdyZWF0LlxuICBAbWVkaWEgKGhvdmVyOiBub25lKSB7XG4gICAgLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpOm5vdChbYXJpYS1kaXNhYmxlZD0ndHJ1ZSddKVxuICAgICAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbixcbiAgLm1hdC1leHBhbnNpb24taW5kaWNhdG9yOjphZnRlciB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9J3RydWUnXSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtYnV0dG9uKTtcblxuICAgIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZSxcbiAgICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24ge1xuICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtZXhwYW5zaW9uLXBhbmVsLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIHN1YmhlYWRpbmctMSk7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIHN1YmhlYWRpbmctMSk7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBzdWJoZWFkaW5nLTEpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBib2R5LTEpO1xuICB9XG59XG5cblxuXG5cbi8vIFRoaXMgbWl4aW4gd2lsbCBlbnN1cmUgdGhhdCBsaW5lcyB0aGF0IG92ZXJmbG93IHRoZSBjb250YWluZXIgd2lsbCBoaWRlIHRoZSBvdmVyZmxvdyBhbmRcbi8vIHRydW5jYXRlIG5lYXRseSB3aXRoIGFuIGVsbGlwc2lzLlxuQG1peGluIG1hdC10cnVuY2F0ZS1saW5lKCkge1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuLy8gTWl4aW4gdG8gcHJvdmlkZSBhbGwgbWF0LWxpbmUgc3R5bGVzLCBjaGFuZ2luZyBzZWNvbmRhcnkgZm9udCBzaXplIGJhc2VkIG9uIHdoZXRoZXIgdGhlIGxpc3Rcbi8vIGlzIGluIGRlbnNlIG1vZGUuXG5AbWl4aW4gbWF0LWxpbmUtYmFzZSgkc2Vjb25kYXJ5LWZvbnQtc2l6ZSkge1xuICAubWF0LWxpbmUge1xuICAgIEBpbmNsdWRlIG1hdC10cnVuY2F0ZS1saW5lKCk7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcblxuICAgIC8vIGFsbCBsaW5lcyBidXQgdGhlIHRvcCBsaW5lIHNob3VsZCBoYXZlIHNtYWxsZXIgdGV4dFxuICAgICY6bnRoLWNoaWxkKG4rMikge1xuICAgICAgZm9udC1zaXplOiAkc2Vjb25kYXJ5LWZvbnQtc2l6ZTtcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhpcyBtaXhpbiBub3JtYWxpemVzIGRlZmF1bHQgZWxlbWVudCBzdHlsZXMsIGUuZy4gZm9udCB3ZWlnaHQgZm9yIGhlYWRpbmcgdGV4dC5cbkBtaXhpbiBtYXQtbm9ybWFsaXplLXRleHQoKSB7XG4gICYgPiAqIHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgfVxufVxuXG4vLyBUaGlzIG1peGluIHByb3ZpZGVzIGJhc2Ugc3R5bGVzIGZvciB0aGUgd3JhcHBlciBhcm91bmQgbWF0LWxpbmUgZWxlbWVudHMgaW4gYSBsaXN0LlxuQG1peGluIG1hdC1saW5lLXdyYXBwZXItYmFzZSgpIHtcbiAgQGluY2x1ZGUgbWF0LW5vcm1hbGl6ZS10ZXh0KCk7XG5cbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6IDEwMCU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgLy8gTXVzdCByZW1vdmUgd3JhcHBlciB3aGVuIGxpbmVzIGFyZSBlbXB0eSBvciBpdCB0YWtlcyB1cCBob3Jpem9udGFsXG4gIC8vIHNwYWNlIGFuZCBwdXNoZXMgb3RoZXIgZWxlbWVudHMgdG8gdGhlIHJpZ2h0LlxuICAmOmVtcHR5IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cblxuXG4vLyBJbmNsdWRlIHRoaXMgZW1wdHkgbWl4aW4gZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIG90aGVyIGNvbXBvbmVudHMuXG5AbWl4aW4gbWF0LWdyaWQtbGlzdC10aGVtZSgkdGhlbWUpIHsgfVxuXG5AbWl4aW4gbWF0LWdyaWQtbGlzdC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1ncmlkLXRpbGUtaGVhZGVyLFxuICAubWF0LWdyaWQtdGlsZS1mb290ZXIge1xuICAgIEBpbmNsdWRlIG1hdC1saW5lLWJhc2UobWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKSk7XG4gICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSk7XG4gIH1cbn1cblxuXG5cblxuLy8gSW5jbHVkZSB0aGlzIGVtcHR5IG1peGluIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBvdGhlciBjb21wb25lbnRzLlxuQG1peGluIG1hdC1pY29uLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWljb24ge1xuICAgICYubWF0LXByaW1hcnkge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgdGV4dCk7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgdGV4dCk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1pY29uLXR5cG9ncmFwaHkoJGNvbmZpZykgeyB9XG5cblxuXG5cblxuLy8gUmVuZGVycyBhIGdyYWRpZW50IGZvciBzaG93aW5nIHRoZSBkYXNoZWQgbGluZSB3aGVuIHRoZSBpbnB1dCBpcyBkaXNhYmxlZC5cbi8vIFVubGlrZSB1c2luZyBhIGJvcmRlciwgYSBncmFkaWVudCBhbGxvd3MgdXMgdG8gYWRqdXN0IHRoZSBzcGFjaW5nIG9mIHRoZSBkb3R0ZWQgbGluZVxuLy8gdG8gbWF0Y2ggdGhlIE1hdGVyaWFsIERlc2lnbiBzcGVjLlxuQG1peGluIG1hdC1jb250cm9sLWRpc2FibGVkLXVuZGVybGluZSgkY29sb3IpIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAkY29sb3IgMCUsICRjb2xvciAzMyUsIHRyYW5zcGFyZW50IDAlKTtcbiAgYmFja2dyb3VuZC1zaXplOiA0cHggMTAwJTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14O1xufVxuXG4vLyBGaWd1cmVzIG91dCB0aGUgY29sb3Igb2YgdGhlIHBsYWNlaG9sZGVyIGZvciBhIGZvcm0gY29udHJvbC5cbi8vIFVzZWQgcHJpbWFyaWx5IHRvIHByZXZlbnQgdGhlIHZhcmlvdXMgZm9ybSBjb250cm9scyBmcm9tXG4vLyBiZWNvbWluZyBvdXQgb2Ygc3luYyBzaW5jZSB0aGVzZSBjb2xvcnMgYXJlbid0IGluIGEgcGFsZXR0ZS5cbkBmdW5jdGlvbiBfbWF0LWNvbnRyb2wtcGxhY2Vob2xkZXItY29sb3IoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG4gIEByZXR1cm4gbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCwgaWYoJGlzLWRhcmstdGhlbWUsIDAuNSwgMC40MikpO1xufVxuXG5cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1hdGVyaWFsL25vLXByZWZpeGVzICovXG5AbWl4aW4gdXNlci1zZWxlY3QoJHZhbHVlKSB7XG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6ICR2YWx1ZTtcbiAgLW1vei11c2VyLXNlbGVjdDogJHZhbHVlO1xuICAtbXMtdXNlci1zZWxlY3Q6ICR2YWx1ZTtcbiAgdXNlci1zZWxlY3Q6ICR2YWx1ZTtcbn1cblxuQG1peGluIGlucHV0LXBsYWNlaG9sZGVyIHtcbiAgJjo6cGxhY2Vob2xkZXIge1xuICAgIEBjb250ZW50O1xuICB9XG5cbiAgJjo6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cblxuICAmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBAY29udGVudDtcbiAgfVxuXG4gICY6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG5AbWl4aW4gY3Vyc29yLWdyYWIge1xuICBjdXJzb3I6IC13ZWJraXQtZ3JhYjtcbiAgY3Vyc29yOiBncmFiO1xufVxuXG5AbWl4aW4gY3Vyc29yLWdyYWJiaW5nIHtcbiAgY3Vyc29yOiAtd2Via2l0LWdyYWJiaW5nO1xuICBjdXJzb3I6IGdyYWJiaW5nO1xufVxuXG5AbWl4aW4gYmFja2ZhY2UtdmlzaWJpbGl0eSgkdmFsdWUpIHtcbiAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiAkdmFsdWU7XG4gIGJhY2tmYWNlLXZpc2liaWxpdHk6ICR2YWx1ZTtcbn1cbi8qIHN0eWxlbGludC1lbmFibGUgKi9cblxuXG5cbkBtaXhpbiBtYXQtaW5wdXQtdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXIge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgfVxuXG4gIC5tYXQtaW5wdXQtZWxlbWVudDpkaXNhYmxlZCxcbiAgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlciB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gIH1cblxuICAubWF0LWlucHV0LWVsZW1lbnQge1xuICAgIGNhcmV0LWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIHRleHQpO1xuXG4gICAgQGluY2x1ZGUgaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgICAgY29sb3I6IF9tYXQtY29udHJvbC1wbGFjZWhvbGRlci1jb2xvcigkdGhlbWUpO1xuICAgIH1cblxuICAgIC8vIE9uIGRhcmsgdGhlbWVzIHdlIHNldCB0aGUgbmF0aXZlIGBzZWxlY3RgIGNvbG9yIHRvIHNvbWUgc2hhZGUgb2Ygd2hpdGUsXG4gICAgLy8gaG93ZXZlciB0aGUgY29sb3IgcHJvcGFnYXRlcyB0byBhbGwgb2YgdGhlIGBvcHRpb25gIGVsZW1lbnRzLCB3aGljaCBhcmVcbiAgICAvLyBhbHdheXMgb24gYSB3aGl0ZSBiYWNrZ3JvdW5kIGluc2lkZSB0aGUgZHJvcGRvd24sIGNhdXNpbmcgdGhlbSB0byBibGVuZCBpbi5cbiAgICAvLyBTaW5jZSB3ZSBjYW4ndCBjaGFuZ2UgYmFja2dyb3VuZCBvZiB0aGUgZHJvcGRvd24sIHdlIG5lZWQgdG8gZXhwbGljaXRseVxuICAgIC8vIHJlc2V0IHRoZSBjb2xvciBvZiB0aGUgb3B0aW9ucyB0byBzb21ldGhpbmcgZGFyay5cbiAgICBAaWYgKG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKSkge1xuICAgICAgb3B0aW9uIHtcbiAgICAgICAgY29sb3I6ICRkYXJrLXByaW1hcnktdGV4dDtcbiAgICAgIH1cblxuICAgICAgb3B0aW9uOmRpc2FibGVkIHtcbiAgICAgICAgY29sb3I6ICRkYXJrLWRpc2FibGVkLXRleHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm1hdC1hY2NlbnQgLm1hdC1pbnB1dC1lbGVtZW50IHtcbiAgICBjYXJldC1jb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQsIHRleHQpO1xuICB9XG5cbiAgLm1hdC13YXJuIC5tYXQtaW5wdXQtZWxlbWVudCxcbiAgLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1pbnB1dC1lbGVtZW50IHtcbiAgICBjYXJldC1jb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlciB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1pbnB1dC10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLy8gVGhlIHVuaXQtbGVzcyBsaW5lLWhlaWdodCBmcm9tIHRoZSBmb250IGNvbmZpZy5cbiAgJGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgaW5wdXQpO1xuXG4gIC8vIFRoZSBhbW91bnQgb2Ygc3BhY2UgYmV0d2VlbiB0aGUgdG9wIG9mIHRoZSBsaW5lIGFuZCB0aGUgdG9wIG9mIHRoZSBhY3R1YWwgdGV4dFxuICAvLyAoYXMgYSBmcmFjdGlvbiBvZiB0aGUgZm9udC1zaXplKS5cbiAgJGxpbmUtc3BhY2luZzogKCRsaW5lLWhlaWdodCAtIDEpIC8gMjtcblxuICAvLyA8aW5wdXQ+IGVsZW1lbnRzIHNlZW0gdG8gaGF2ZSB0aGVpciBoZWlnaHQgc2V0IHNsaWdodGx5IHRvbyBsYXJnZSBvbiBTYWZhcmkgY2F1c2luZyB0aGUgdGV4dCB0b1xuICAvLyBiZSBtaXNhbGlnbmVkIHcuci50LiB0aGUgcGxhY2Vob2xkZXIuIEFkZGluZyB0aGlzIG1hcmdpbiBjb3JyZWN0cyBpdC5cbiAgaW5wdXQubWF0LWlucHV0LWVsZW1lbnQge1xuICAgIG1hcmdpbi10b3A6IC0kbGluZS1zcGFjaW5nICogMWVtO1xuICB9XG59XG5cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtbGlzdC10aGVtZSgkdGhlbWUpIHtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcblxuICAubWF0LWxpc3QtYmFzZSB7XG4gICAgLm1hdC1saXN0LWl0ZW0ge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG4gICAgfVxuXG4gICAgLm1hdC1saXN0LW9wdGlvbiB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgICB9XG5cbiAgICAubWF0LXN1YmhlYWRlciB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1saXN0LWl0ZW0tZGlzYWJsZWQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZGlzYWJsZWQtbGlzdC1vcHRpb24pO1xuICB9XG5cbiAgLm1hdC1saXN0LW9wdGlvbixcbiAgLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSxcbiAgLm1hdC1hY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSB7XG4gICAgJjpob3ZlciwgJjpmb2N1cyB7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdob3ZlcicpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtbGlzdC1zaW5nbGUtc2VsZWN0ZWQtb3B0aW9uIHtcbiAgICAmLCAmOmhvdmVyLCAmOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIsIDAuMTIpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWxpc3QtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gICRmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuXG4gIC5tYXQtbGlzdC1pdGVtIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5O1xuICB9XG5cbiAgLm1hdC1saXN0LW9wdGlvbiB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseTtcbiAgfVxuXG4gIC8vIERlZmF1bHQgbGlzdFxuICAubWF0LWxpc3QtYmFzZSB7XG4gICAgLm1hdC1saXN0LWl0ZW0ge1xuICAgICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIHN1YmhlYWRpbmctMik7XG4gICAgICBAaW5jbHVkZSBtYXQtbGluZS1iYXNlKG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKSk7XG4gICAgfVxuXG4gICAgLm1hdC1saXN0LW9wdGlvbiB7XG4gICAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgc3ViaGVhZGluZy0yKTtcbiAgICAgIEBpbmNsdWRlIG1hdC1saW5lLWJhc2UobWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTEpKTtcbiAgICB9XG5cbiAgICAubWF0LXN1YmhlYWRlciB7XG4gICAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGJvZHktMik7XG4gICAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0yKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0yKTtcbiAgICB9XG4gIH1cblxuICAvLyBEZW5zZSBsaXN0XG4gIC5tYXQtbGlzdC1iYXNlW2RlbnNlXSB7XG4gICAgLm1hdC1saXN0LWl0ZW0ge1xuICAgICAgZm9udC1zaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pO1xuICAgICAgQGluY2x1ZGUgbWF0LWxpbmUtYmFzZShtYXQtZm9udC1zaXplKCRjb25maWcsIGNhcHRpb24pKTtcbiAgICB9XG5cbiAgICAubWF0LWxpc3Qtb3B0aW9uIHtcbiAgICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKTtcbiAgICAgIEBpbmNsdWRlIG1hdC1saW5lLWJhc2UobWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKSk7XG4gICAgfVxuXG4gICAgLm1hdC1zdWJoZWFkZXIge1xuICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseTtcbiAgICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBjYXB0aW9uKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0yKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cblxuQG1peGluIG1hdC1tZW51LXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtbWVudS1wYW5lbCB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oNCwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdjYXJkJyk7XG4gIH1cblxuICAubWF0LW1lbnUtaXRlbSB7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgJ3RleHQnKTtcblxuICAgICZbZGlzYWJsZWRdIHtcbiAgICAgICYsICY6OmFmdGVyIHtcbiAgICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgJ2Rpc2FibGVkJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm1hdC1tZW51LWl0ZW0gLm1hdC1pY29uLW5vLWNvbG9yLFxuICAubWF0LW1lbnUtaXRlbS1zdWJtZW51LXRyaWdnZXI6OmFmdGVyIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCAnaWNvbicpO1xuICB9XG5cbiAgLm1hdC1tZW51LWl0ZW06aG92ZXIsXG4gIC5tYXQtbWVudS1pdGVtLmNkay1wcm9ncmFtLWZvY3VzZWQsXG4gIC5tYXQtbWVudS1pdGVtLmNkay1rZXlib2FyZC1mb2N1c2VkLFxuICAubWF0LW1lbnUtaXRlbS1oaWdobGlnaHRlZCB7XG4gICAgJjpub3QoW2Rpc2FibGVkXSkge1xuICAgICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnaG92ZXInKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1tZW51LXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LW1lbnUtaXRlbSB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgYm9keS0xKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMSk7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LXBhZ2luYXRvci10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcblxuICAubWF0LXBhZ2luYXRvciB7XG4gICAgYmFja2dyb3VuZDogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCAnY2FyZCcpO1xuICB9XG5cbiAgLm1hdC1wYWdpbmF0b3IsXG4gIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSAubWF0LXNlbGVjdC10cmlnZ2VyIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gIH1cblxuICAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsXG4gIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudCB7XG4gICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkIG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgJ2ljb24nKTtcbiAgICBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCBtYXQtY29sb3IoJGZvcmVncm91bmQsICdpY29uJyk7XG4gIH1cblxuICAubWF0LXBhZ2luYXRvci1maXJzdCxcbiAgLm1hdC1wYWdpbmF0b3ItbGFzdCB7XG4gICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkIG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgJ2ljb24nKTtcbiAgfVxuXG4gIC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIHtcbiAgICAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsXG4gICAgLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50LFxuICAgIC5tYXQtcGFnaW5hdG9yLWZpcnN0LFxuICAgIC5tYXQtcGFnaW5hdG9yLWxhc3Qge1xuICAgICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsICdkaXNhYmxlZCcpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXBhZ2luYXRvci10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1wYWdpbmF0b3IsXG4gIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSAubWF0LXNlbGVjdC10cmlnZ2VyIHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnLCBjYXB0aW9uKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbik7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuQG1peGluIG1hdC1wcm9ncmVzcy1iYXItdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuXG4gIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmQge1xuICAgIGZpbGw6IG1hdC1jb2xvcigkcHJpbWFyeSwgbGlnaHRlcik7XG4gIH1cblxuICAubWF0LXByb2dyZXNzLWJhci1idWZmZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgbGlnaHRlcik7XG4gIH1cblxuICAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5KTtcbiAgfVxuXG4gIC5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQge1xuICAgIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmQge1xuICAgICAgZmlsbDogbWF0LWNvbG9yKCRhY2NlbnQsIGxpZ2h0ZXIpO1xuICAgIH1cblxuICAgIC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgbGlnaHRlcik7XG4gICAgfVxuXG4gICAgLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRhY2NlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIHtcbiAgICAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5kIHtcbiAgICAgIGZpbGw6IG1hdC1jb2xvcigkd2FybiwgbGlnaHRlcik7XG4gICAgfVxuXG4gICAgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkd2FybiwgbGlnaHRlcik7XG4gICAgfVxuXG4gICAgLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCR3YXJuKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1wcm9ncmVzcy1iYXItdHlwb2dyYXBoeSgkY29uZmlnKSB7IH1cblxuXG5cblxuXG5cbkBtaXhpbiBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG5cbiAgLm1hdC1wcm9ncmVzcy1zcGlubmVyLCAubWF0LXNwaW5uZXIge1xuICAgIGNpcmNsZSB7XG4gICAgICBzdHJva2U6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IGNpcmNsZSB7XG4gICAgICBzdHJva2U6IG1hdC1jb2xvcigkYWNjZW50KTtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIGNpcmNsZSB7XG4gICAgICBzdHJva2U6IG1hdC1jb2xvcigkd2Fybik7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci10eXBvZ3JhcGh5KCRjb25maWcpIHsgfVxuXG5cblxuXG5cbkBtaXhpbiBfbWF0LXJhZGlvLWNvbG9yKCRwYWxldHRlKSB7XG4gICYubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGUge1xuICAgIGJvcmRlci1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlKTtcbiAgfVxuXG4gIC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLFxuICAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSxcbiAgJi5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLFxuICAmOmFjdGl2ZSAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtcmFkaW8tdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xlIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1yYWRpby1idXR0b24ge1xuICAgICYubWF0LXByaW1hcnkge1xuICAgICAgQGluY2x1ZGUgX21hdC1yYWRpby1jb2xvcigkcHJpbWFyeSk7XG4gICAgfVxuXG4gICAgJi5tYXQtYWNjZW50IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtcmFkaW8tY29sb3IoJGFjY2VudCk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXJhZGlvLWNvbG9yKCR3YXJuKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIG5lZWRzIGV4dHJhIHNwZWNpZmljaXR5LCBiZWNhdXNlIHRoZSBjbGFzc2VzIGFib3ZlIGFyZSBjb21iaW5lZFxuICAgIC8vIChlLmcuIGAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50YCkgd2hpY2ggaW5jcmVhc2VzIHRoZWlyIHNwZWNpZmljaXR5IGEgbG90LlxuICAgIC8vIFRPRE86IGNvbnNpZGVyIG1ha2luZyB0aGUgc2VsZWN0b3JzIGludG8gZGVzY2VuZGFudHMgKGAubWF0LXByaW1hcnkgLm1hdC1yYWRpby1idXR0b25gKS5cbiAgICAmLm1hdC1yYWRpby1kaXNhYmxlZCB7XG4gICAgICAmLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xlLFxuICAgICAgLm1hdC1yYWRpby1vdXRlci1jaXJjbGUge1xuICAgICAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQpO1xuICAgICAgfVxuXG4gICAgICAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50LFxuICAgICAgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkKTtcbiAgICAgIH1cblxuICAgICAgLm1hdC1yYWRpby1sYWJlbC1jb250ZW50IHtcbiAgICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFN3aXRjaCB0aGlzIHRvIGEgc29saWQgY29sb3Igc2luY2Ugd2UncmUgdXNpbmcgYG9wYWNpdHlgXG4gICAgLy8gdG8gY29udHJvbCBob3cgb3BhcXVlIHRoZSByaXBwbGUgc2hvdWxkIGJlLlxuICAgIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwX2dldCgkZm9yZWdyb3VuZCwgYmFzZSk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtcmFkaW8tdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtcmFkaW8tYnV0dG9uIHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG59XG5cblxuXG5cblxuXG5cblxuQG1peGluIG1hdC1zZWxlY3QtdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuXG4gIC5tYXQtc2VsZWN0LXZhbHVlIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxuXG4gIC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogX21hdC1jb250cm9sLXBsYWNlaG9sZGVyLWNvbG9yKCR0aGVtZSk7XG4gIH1cblxuICAubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC12YWx1ZSB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gIH1cblxuICAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuICB9XG5cbiAgLm1hdC1zZWxlY3QtcGFuZWwge1xuICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgY2FyZCk7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1vdmVycmlkYWJsZS1lbGV2YXRpb24oNCwgJHRoZW1lKTtcblxuICAgIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIsIDAuMTIpO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZCB7XG4gICAgJi5tYXQtZm9jdXNlZCB7XG4gICAgICAmLm1hdC1wcmltYXJ5IC5tYXQtc2VsZWN0LWFycm93IHtcbiAgICAgICAgY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgdGV4dCk7XG4gICAgICB9XG5cbiAgICAgICYubWF0LWFjY2VudCAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgdGV4dCk7XG4gICAgICB9XG5cbiAgICAgICYubWF0LXdhcm4gLm1hdC1zZWxlY3QtYXJyb3cge1xuICAgICAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWludmFsaWQgLm1hdC1zZWxlY3QtYXJyb3cge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkd2FybiwgdGV4dCk7XG4gICAgfVxuXG4gICAgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZC10ZXh0KTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1zZWxlY3QtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC8vIFRoZSB1bml0LWxlc3MgbGluZS1oZWlnaHQgZnJvbSB0aGUgZm9udCBjb25maWcuXG4gICRsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGlucHV0KTtcblxuICAubWF0LXNlbGVjdCB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtc2VsZWN0LXRyaWdnZXIge1xuICAgIGhlaWdodDogJGxpbmUtaGVpZ2h0ICogMWVtO1xuICB9XG59XG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LXNpZGVuYXYtdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gICRkcmF3ZXItYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBkaWFsb2cpO1xuICAkZHJhd2VyLWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yOiAgbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kKTtcbiAgJGRyYXdlci1wdXNoLWJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgZGlhbG9nKTtcbiAgJGRyYXdlci1zaWRlLWJvcmRlcjogc29saWQgMXB4IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG5cbiAgLm1hdC1kcmF3ZXItY29udGFpbmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZHJhd2VyLWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG5cbiAgLm1hdC1kcmF3ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRkcmF3ZXItYmFja2dyb3VuZC1jb2xvcjtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcblxuICAgICYubWF0LWRyYXdlci1wdXNoIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRkcmF3ZXItcHVzaC1iYWNrZ3JvdW5kLWNvbG9yO1xuICAgIH1cblxuICAgICY6bm90KC5tYXQtZHJhd2VyLXNpZGUpIHtcbiAgICAgIC8vIFRoZSBlbGV2YXRpb24gb2Ygei0xNiBpcyBub3RlZCBpbiB0aGUgZGVzaWduIHNwZWNpZmljYXRpb25zLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vbWF0ZXJpYWwuaW8vZGVzaWduL2NvbXBvbmVudHMvbmF2aWdhdGlvbi1kcmF3ZXIuaHRtbFxuICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oMTYsICR0aGVtZSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1kcmF3ZXItc2lkZSB7XG4gICAgYm9yZGVyLXJpZ2h0OiAkZHJhd2VyLXNpZGUtYm9yZGVyO1xuXG4gICAgJi5tYXQtZHJhd2VyLWVuZCB7XG4gICAgICBib3JkZXItbGVmdDogJGRyYXdlci1zaWRlLWJvcmRlcjtcbiAgICAgIGJvcmRlci1yaWdodDogbm9uZTtcbiAgICB9XG4gIH1cblxuICBbZGlyPSdydGwnXSAubWF0LWRyYXdlci1zaWRlIHtcbiAgICBib3JkZXItbGVmdDogJGRyYXdlci1zaWRlLWJvcmRlcjtcbiAgICBib3JkZXItcmlnaHQ6IG5vbmU7XG5cbiAgICAmLm1hdC1kcmF3ZXItZW5kIHtcbiAgICAgIGJvcmRlci1sZWZ0OiBub25lO1xuICAgICAgYm9yZGVyLXJpZ2h0OiAkZHJhd2VyLXNpZGUtYm9yZGVyO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZHJhd2VyLWJhY2tkcm9wLm1hdC1kcmF3ZXItc2hvd24ge1xuICAgICRvcGFjaXR5OiAwLjY7XG4gICAgJGJhY2tkcm9wLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQsICRvcGFjaXR5KTtcblxuICAgIEBpZiAodHlwZS1vZigkYmFja2Ryb3AtY29sb3IpID09IGNvbG9yKSB7XG4gICAgICAvLyBXZSB1c2UgaW52ZXJ0KCkgaGVyZSB0byBoYXZlIHRoZSBkYXJrZW4gdGhlIGJhY2tncm91bmQgY29sb3IgZXhwZWN0ZWQgdG8gYmUgdXNlZC4gSWYgdGhlXG4gICAgICAvLyBiYWNrZ3JvdW5kIGlzIGxpZ2h0LCB3ZSB1c2UgYSBkYXJrIGJhY2tkcm9wLiBJZiB0aGUgYmFja2dyb3VuZCBpcyBkYXJrLFxuICAgICAgLy8gd2UgdXNlIGEgbGlnaHQgYmFja2Ryb3AuXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbnZlcnQoJGJhY2tkcm9wLWNvbG9yKTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgLy8gSWYgd2UgY291bGRuJ3QgcmVzb2x2ZSB0aGUgYmFja2Ryb3AgY29sb3IgdG8gYSBjb2xvciB2YWx1ZSwgZmFsbCBiYWNrIHRvIHVzaW5nXG4gICAgICAvLyBgb3BhY2l0eWAgdG8gbWFrZSBpdCBvcGFxdWUgc2luY2UgaXRzIGVuZCB2YWx1ZSBjb3VsZCBiZSBhIHNvbGlkIGNvbG9yLlxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tkcm9wLWNvbG9yO1xuICAgICAgb3BhY2l0eTogJG9wYWNpdHk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtc2lkZW5hdi10eXBvZ3JhcGh5KCRjb25maWcpIHsgfVxuXG5cblxuXG5cblxuQG1peGluIF9tYXQtc2xpZGUtdG9nZ2xlLWNoZWNrZWQoJHBhbGV0dGUsICR0aHVtYi1jaGVja2VkLWh1ZSkge1xuICAmLm1hdC1jaGVja2VkIHtcbiAgICAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYiB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsICR0aHVtYi1jaGVja2VkLWh1ZSk7XG4gICAgfVxuXG4gICAgLm1hdC1zbGlkZS10b2dnbGUtYmFyIHtcbiAgICAgIC8vIE9wYWNpdHkgaXMgZGV0ZXJtaW5lZCBmcm9tIHRoZSBzcGVjcyBmb3IgdGhlIHNlbGVjdGlvbiBjb250cm9scy5cbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9tYXRlcmlhbC5pby9kZXNpZ24vY29tcG9uZW50cy9zZWxlY3Rpb24tY29udHJvbHMuaHRtbCNzcGVjc1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCAkdGh1bWItY2hlY2tlZC1odWUsIDAuNTQpO1xuICAgIH1cblxuICAgIC5tYXQtcmlwcGxlLWVsZW1lbnQge1xuICAgICAgLy8gU2V0IG5vIG9wYWNpdHkgZm9yIHRoZSByaXBwbGVzIGJlY2F1c2UgdGhlIHJpcHBsZSBvcGFjaXR5IHdpbGwgYmUgYWRqdXN0ZWQgZHluYW1pY2FsbHlcbiAgICAgIC8vIGJhc2VkIG9uIHRoZSB0eXBlIG9mIGludGVyYWN0aW9uIHdpdGggdGhlIHNsaWRlLXRvZ2dsZSAoZS5nLiBmb3IgaG92ZXIsIGZvY3VzKVxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRwYWxldHRlLCAkdGh1bWItY2hlY2tlZC1odWUpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNsaWRlLXRvZ2dsZS10aGVtZSgkdGhlbWUpIHtcbiAgJGlzLWRhcms6IG1hcF9nZXQoJHRoZW1lLCBpcy1kYXJrKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLy8gQ29sb3IgaHVlcyBhcmUgYmFzZWQgb24gdGhlIHNwZWNzIHdoaWNoIGJyaWVmbHkgc2hvdyB0aGUgaHVlcyB0aGF0IGFyZSBhcHBsaWVkIHRvIGEgc3dpdGNoLlxuICAvLyBUaGUgMjAxOCBzcGVjcyBubyBsb25nZXIgZGVzY3JpYmUgaG93IGRhcmsgc3dpdGNoZXMgc2hvdWxkIGxvb2sgbGlrZS4gRHVlIHRvIHRoZSBsYWNrIG9mXG4gIC8vIGluZm9ybWF0aW9uIGZvciBkYXJrIHRoZW1lZCBzd2l0Y2hlcywgd2UgcGFydGlhbGx5IGtlZXAgdGhlIG9sZCBiZWhhdmlvciB0aGF0IGlzIGJhc2VkIG9uXG4gIC8vIHRoZSBwcmV2aW91cyBzcGVjaWZpY2F0aW9ucy4gRm9yIHRoZSBjaGVja2VkIGNvbG9yIHdlIGFsd2F5cyB1c2UgdGhlIGBkZWZhdWx0YCBodWUgYmVjYXVzZVxuICAvLyB0aGF0IGZvbGxvd3MgTURDIGFuZCBhbHNvIG1ha2VzIGl0IGVhc2llciBmb3IgcGVvcGxlIHRvIGNyZWF0ZSBhIGN1c3RvbSB0aGVtZSB3aXRob3V0IG5lZWRpbmdcbiAgLy8gdG8gc3BlY2lmeSBlYWNoIGh1ZSBpbmRpdmlkdWFsbHkuXG4gICR0aHVtYi11bmNoZWNrZWQtaHVlOiBpZigkaXMtZGFyaywgNDAwLCA1MCk7XG4gICR0aHVtYi1jaGVja2VkLWh1ZTogZGVmYXVsdDtcblxuICAkYmFyLXVuY2hlY2tlZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXNhYmxlZCk7XG4gICRyaXBwbGUtdW5jaGVja2VkLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGJhc2UpO1xuXG4gIC5tYXQtc2xpZGUtdG9nZ2xlIHtcbiAgICBAaW5jbHVkZSBfbWF0LXNsaWRlLXRvZ2dsZS1jaGVja2VkKCRhY2NlbnQsICR0aHVtYi1jaGVja2VkLWh1ZSk7XG5cbiAgICAmLm1hdC1wcmltYXJ5IHtcbiAgICAgIEBpbmNsdWRlIF9tYXQtc2xpZGUtdG9nZ2xlLWNoZWNrZWQoJHByaW1hcnksICR0aHVtYi1jaGVja2VkLWh1ZSk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXNsaWRlLXRvZ2dsZS1jaGVja2VkKCR3YXJuLCAkdGh1bWItY2hlY2tlZC1odWUpO1xuICAgIH1cblxuICAgICY6bm90KC5tYXQtY2hlY2tlZCkgLm1hdC1yaXBwbGUtZWxlbWVudCB7XG4gICAgICAvLyBTZXQgbm8gb3BhY2l0eSBmb3IgdGhlIHJpcHBsZXMgYmVjYXVzZSB0aGUgcmlwcGxlIG9wYWNpdHkgd2lsbCBiZSBhZGp1c3RlZCBkeW5hbWljYWxseVxuICAgICAgLy8gYmFzZWQgb24gdGhlIHR5cGUgb2YgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc2xpZGUtdG9nZ2xlIChlLmcuIGZvciBob3ZlciwgZm9jdXMpXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmlwcGxlLXVuY2hlY2tlZC1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYiB7XG4gICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oMSwgJHRoZW1lKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJG1hdC1ncmV5LCAkdGh1bWItdW5jaGVja2VkLWh1ZSk7XG4gIH1cblxuICAubWF0LXNsaWRlLXRvZ2dsZS1iYXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRiYXItdW5jaGVja2VkLWNvbG9yO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtc2xpZGUtdG9nZ2xlLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50IHtcbiAgICBmb250LWZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcpO1xuICB9XG59XG5cblxuXG5cblxuQG1peGluIF9tYXQtc2xpZGVyLWlubmVyLWNvbnRlbnQtdGhlbWUoJHBhbGV0dGUpIHtcbiAgLm1hdC1zbGlkZXItdHJhY2stZmlsbCxcbiAgLm1hdC1zbGlkZXItdGh1bWIsXG4gIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUpO1xuICB9XG5cbiAgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dCB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkcGFsZXR0ZSwgZGVmYXVsdC1jb250cmFzdCk7XG4gIH1cbn1cblxuQG1peGluIG1hdC1zbGlkZXItdGhlbWUoJHRoZW1lKSB7XG4gICRwcmltYXJ5OiBtYXAtZ2V0KCR0aGVtZSwgcHJpbWFyeSk7XG4gICRhY2NlbnQ6IG1hcC1nZXQoJHRoZW1lLCBhY2NlbnQpO1xuICAkd2FybjogbWFwLWdldCgkdGhlbWUsIHdhcm4pO1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gICRtYXQtc2xpZGVyLW9mZi1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzbGlkZXItb2ZmKTtcbiAgJG1hdC1zbGlkZXItb2ZmLWZvY3VzZWQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2xpZGVyLW9mZi1hY3RpdmUpO1xuICAkbWF0LXNsaWRlci1kaXNhYmxlZC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzbGlkZXItb2ZmKTtcbiAgJG1hdC1zbGlkZXItbGFiZWxlZC1taW4tdmFsdWUtdGh1bWItY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2xpZGVyLW1pbik7XG4gICRtYXQtc2xpZGVyLWxhYmVsZWQtbWluLXZhbHVlLXRodW1iLWxhYmVsLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNsaWRlci1vZmYpO1xuICAkbWF0LXNsaWRlci10aWNrLW9wYWNpdHk6IDAuNztcbiAgJG1hdC1zbGlkZXItdGljay1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBiYXNlLCAkbWF0LXNsaWRlci10aWNrLW9wYWNpdHkpO1xuICAkbWF0LXNsaWRlci10aWNrLXNpemU6IDJweDtcblxuICAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbWF0LXNsaWRlci1vZmYtY29sb3I7XG4gIH1cblxuICAubWF0LXByaW1hcnkge1xuICAgIEBpbmNsdWRlIF9tYXQtc2xpZGVyLWlubmVyLWNvbnRlbnQtdGhlbWUoJHByaW1hcnkpO1xuICB9XG5cbiAgLm1hdC1hY2NlbnQge1xuICAgIEBpbmNsdWRlIF9tYXQtc2xpZGVyLWlubmVyLWNvbnRlbnQtdGhlbWUoJGFjY2VudCk7XG4gIH1cblxuICAubWF0LXdhcm4ge1xuICAgIEBpbmNsdWRlIF9tYXQtc2xpZGVyLWlubmVyLWNvbnRlbnQtdGhlbWUoJHdhcm4pO1xuICB9XG5cbiAgLm1hdC1zbGlkZXItZm9jdXMtcmluZyB7XG4gICAgJG9wYWNpdHk6IDAuMjtcbiAgICAkY29sb3I6IG1hdC1jb2xvcigkYWNjZW50LCBkZWZhdWx0LCAkb3BhY2l0eSk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yO1xuXG4gICAgLy8gYG1hdC1jb2xvcmAgdXNlcyBgcmdiYWAgZm9yIHRoZSBvcGFjaXR5IHdoaWNoIHdvbid0IHdvcmsgd2l0aFxuICAgIC8vIENTUyB2YXJpYWJsZXMgc28gd2UgbmVlZCB0byB1c2UgYG9wYWNpdHlgIGFzIGEgZmFsbGJhY2suXG4gICAgQGlmICh0eXBlLW9mKCRjb2xvcikgIT0gY29sb3IpIHtcbiAgICAgIG9wYWNpdHk6ICRvcGFjaXR5O1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtc2xpZGVyOmhvdmVyLFxuICAuY2RrLWZvY3VzZWQge1xuICAgIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG1hdC1zbGlkZXItb2ZmLWZvY3VzZWQtY29sb3I7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbGlkZXItZGlzYWJsZWQge1xuICAgIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsXG4gICAgLm1hdC1zbGlkZXItdHJhY2stZmlsbCxcbiAgICAubWF0LXNsaWRlci10aHVtYiB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbWF0LXNsaWRlci1kaXNhYmxlZC1jb2xvcjtcbiAgICB9XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbWF0LXNsaWRlci1kaXNhYmxlZC1jb2xvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubWF0LXNsaWRlci1taW4tdmFsdWUge1xuICAgIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmcge1xuICAgICAgJG9wYWNpdHk6IDAuMTI7XG4gICAgICAkY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgYmFzZSwgJG9wYWNpdHkpO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yO1xuXG4gICAgICAvLyBgbWF0LWNvbG9yYCB1c2VzIGByZ2JhYCBmb3IgdGhlIG9wYWNpdHkgd2hpY2ggd29uJ3Qgd29yayB3aXRoXG4gICAgICAvLyBDU1MgdmFyaWFibGVzIHNvIHdlIG5lZWQgdG8gdXNlIGBvcGFjaXR5YCBhcyBhIGZhbGxiYWNrLlxuICAgICAgQGlmICh0eXBlLW9mKCRjb2xvcikgIT0gY29sb3IpIHtcbiAgICAgICAgb3BhY2l0eTogJG9wYWNpdHk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcge1xuICAgICAgLm1hdC1zbGlkZXItdGh1bWIsXG4gICAgICAubWF0LXNsaWRlci10aHVtYi1sYWJlbCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRtYXQtc2xpZGVyLWxhYmVsZWQtbWluLXZhbHVlLXRodW1iLWNvbG9yO1xuICAgICAgfVxuXG4gICAgICAmLmNkay1mb2N1c2VkIHtcbiAgICAgICAgLm1hdC1zbGlkZXItdGh1bWIsXG4gICAgICAgIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbWF0LXNsaWRlci1sYWJlbGVkLW1pbi12YWx1ZS10aHVtYi1sYWJlbC1jb2xvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICY6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpIHtcbiAgICAgIC5tYXQtc2xpZGVyLXRodW1iIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkbWF0LXNsaWRlci1vZmYtY29sb3I7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyLFxuICAgICAgJi5jZGstZm9jdXNlZCB7XG4gICAgICAgIC5tYXQtc2xpZGVyLXRodW1iIHtcbiAgICAgICAgICBib3JkZXItY29sb3I6ICRtYXQtc2xpZGVyLW9mZi1mb2N1c2VkLWNvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iIHtcbiAgICAgICAgICBib3JkZXItY29sb3I6ICRtYXQtc2xpZGVyLWRpc2FibGVkLWNvbG9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVyIHtcbiAgICBib3JkZXItY29sb3I6ICRtYXQtc2xpZGVyLXRpY2stY29sb3I7XG5cbiAgICAvLyBgbWF0LWNvbG9yYCB1c2VzIGByZ2JhYCBmb3IgdGhlIG9wYWNpdHkgd2hpY2ggd29uJ3Qgd29yayB3aXRoXG4gICAgLy8gQ1NTIHZhcmlhYmxlcyBzbyB3ZSBuZWVkIHRvIHVzZSBgb3BhY2l0eWAgYXMgYSBmYWxsYmFjay5cbiAgICBAaWYgKHR5cGUtb2YoJG1hdC1zbGlkZXItdGljay1jb2xvcikgIT0gY29sb3IpIHtcbiAgICAgIG9wYWNpdHk6ICRtYXQtc2xpZGVyLXRpY2stb3BhY2l0eTtcbiAgICB9XG4gIH1cblxuICAubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tzIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAkbWF0LXNsaWRlci10aWNrLWNvbG9yLFxuICAgICAgICAkbWF0LXNsaWRlci10aWNrLWNvbG9yICRtYXQtc2xpZGVyLXRpY2stc2l6ZSwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpO1xuICAgIC8vIEZpcmVmb3ggZG9lc24ndCBkcmF3IHRoZSBncmFkaWVudCBjb3JyZWN0bHkgd2l0aCAndG8gcmlnaHQnXG4gICAgLy8gKHNlZSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE0MzE5KS5cbiAgICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LXJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoMC4wMDAxZGVnLCAkbWF0LXNsaWRlci10aWNrLWNvbG9yLFxuICAgICAgICAkbWF0LXNsaWRlci10aWNrLWNvbG9yICRtYXQtc2xpZGVyLXRpY2stc2l6ZSwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpO1xuXG4gICAgLy8gYG1hdC1jb2xvcmAgdXNlcyBgcmdiYWAgZm9yIHRoZSBvcGFjaXR5IHdoaWNoIHdvbid0IHdvcmsgd2l0aFxuICAgIC8vIENTUyB2YXJpYWJsZXMgc28gd2UgbmVlZCB0byB1c2UgYG9wYWNpdHlgIGFzIGEgZmFsbGJhY2suXG4gICAgQGlmICh0eXBlLW9mKCRtYXQtc2xpZGVyLXRpY2stY29sb3IpICE9IGNvbG9yKSB7XG4gICAgICBvcGFjaXR5OiAkbWF0LXNsaWRlci10aWNrLW9wYWNpdHk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3Mge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAkbWF0LXNsaWRlci10aWNrLWNvbG9yLFxuICAgICAgICAkbWF0LXNsaWRlci10aWNrLWNvbG9yICRtYXQtc2xpZGVyLXRpY2stc2l6ZSwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpO1xuXG4gICAgLy8gYG1hdC1jb2xvcmAgdXNlcyBgcmdiYWAgZm9yIHRoZSBvcGFjaXR5IHdoaWNoIHdvbid0IHdvcmsgd2l0aFxuICAgIC8vIENTUyB2YXJpYWJsZXMgc28gd2UgbmVlZCB0byB1c2UgYG9wYWNpdHlgIGFzIGEgZmFsbGJhY2suXG4gICAgQGlmICh0eXBlLW9mKCRtYXQtc2xpZGVyLXRpY2stY29sb3IpICE9IGNvbG9yKSB7XG4gICAgICBvcGFjaXR5OiAkbWF0LXNsaWRlci10aWNrLW9wYWNpdHk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYXQtc2xpZGVyLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0IHtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgY2FwdGlvbik7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTIpO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cbkBtaXhpbiBtYXQtc3RlcHBlci10aGVtZSgkdGhlbWUpIHtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcblxuICAubWF0LXN0ZXAtaGVhZGVyIHtcbiAgICAmLmNkay1rZXlib2FyZC1mb2N1c2VkLFxuICAgICYuY2RrLXByb2dyYW0tZm9jdXNlZCxcbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZCwgaG92ZXIpO1xuICAgIH1cblxuICAgIC8vIE9uIHRvdWNoIGRldmljZXMgdGhlIDpob3ZlciBzdGF0ZSB3aWxsIGxpbmdlciBvbiB0aGUgZWxlbWVudCBhZnRlciBhIHRhcC5cbiAgICAvLyBSZXNldCBpdCB2aWEgYEBtZWRpYWAgYWZ0ZXIgdGhlIGRlY2xhcmF0aW9uLCBiZWNhdXNlIHRoZSBtZWRpYSBxdWVyeSBpc24ndFxuICAgIC8vIHN1cHBvcnRlZCBieSBhbGwgYnJvd3NlcnMgeWV0LlxuICAgIEBtZWRpYSAoaG92ZXI6IG5vbmUpIHtcbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5tYXQtc3RlcC1sYWJlbCxcbiAgICAubWF0LXN0ZXAtb3B0aW9uYWwge1xuICAgICAgLy8gVE9ETyhqb3NlcGhwZXJyb3R0KTogVXBkYXRlIHRvIHVzaW5nIGEgY29ycmVjdGVkIGRpc2FibGVkLXRleHQgY29udHJhc3RcbiAgICAgIC8vIGluc3RlYWQgb2Ygc2Vjb25kYXJ5LXRleHQuXG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBzZWNvbmRhcnktdGV4dCk7XG4gICAgfVxuXG4gICAgLm1hdC1zdGVwLWljb24ge1xuICAgICAgLy8gVE9ETyhqb3NlcGhwZXJyb3R0KTogVXBkYXRlIHRvIHVzaW5nIGEgY29ycmVjdGVkIGRpc2FibGVkLXRleHQgY29udHJhc3RcbiAgICAgIC8vIGluc3RlYWQgb2Ygc2Vjb25kYXJ5LXRleHQuXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIGRlZmF1bHQtY29udHJhc3QpO1xuICAgIH1cblxuICAgIC5tYXQtc3RlcC1pY29uLXNlbGVjdGVkLFxuICAgIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsXG4gICAgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnkpO1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkcHJpbWFyeSwgZGVmYXVsdC1jb250cmFzdCk7XG4gICAgfVxuXG4gICAgLm1hdC1zdGVwLWljb24tc3RhdGUtZXJyb3Ige1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgICB9XG5cbiAgICAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtYWN0aXZlIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICAgIH1cblxuICAgIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1lcnJvciB7XG4gICAgICBjb2xvcjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgICB9XG4gIH1cblxuICAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbCwgLm1hdC1zdGVwcGVyLXZlcnRpY2FsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGNhcmQpO1xuICB9XG5cbiAgLm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZSB7XG4gICAgYm9yZGVyLWxlZnQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cblxuICAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmJlZm9yZSxcbiAgLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjphZnRlcixcbiAgLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZSB7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyKTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXN0ZXBwZXItdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtc3RlcHBlci12ZXJ0aWNhbCwgLm1hdC1zdGVwcGVyLWhvcml6b250YWwge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LXN0ZXAtbGFiZWwge1xuICAgIGZvbnQ6IHtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJvZHktMSk7XG4gICAgfTtcbiAgfVxuXG4gIC5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3Ige1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIH1cblxuICAubWF0LXN0ZXAtbGFiZWwtZXJyb3Ige1xuICAgIGZvbnQtc2l6ZTogbWF0LWZvbnQtc2l6ZSgkY29uZmlnLCBib2R5LTIpO1xuICB9XG5cbiAgLm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkIHtcbiAgICBmb250OiB7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMik7XG4gICAgICB3ZWlnaHQ6IG1hdC1mb250LXdlaWdodCgkY29uZmlnLCBib2R5LTIpO1xuICAgIH07XG4gIH1cbn1cblxuQG1peGluIG1hdC1zb3J0LXRoZW1lKCR0aGVtZSkge1xuICAkYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gIC5tYXQtc29ydC1oZWFkZXItYXJyb3cge1xuICAgICR0YWJsZS1iYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdjYXJkJyk7XG4gICAgJHRleHQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQpO1xuXG4gICAgLy8gQmVjYXVzZSB0aGUgYXJyb3cgaXMgbWFkZSB1cCBvZiBtdWx0aXBsZSBlbGVtZW50cyB0aGF0IGFyZSBzdGFja2VkIG9uIHRvcCBvZiBlYWNoIG90aGVyLFxuICAgIC8vIHdlIGNhbid0IHVzZSB0aGUgc2VtaS10cmFzcGFyZW50IGNvbG9yIGZyb20gdGhlIHRoZW1lIGRpcmVjdGx5LiBJZiB0aGUgdmFsdWUgaXMgYSBjb2xvclxuICAgIC8vICp0eXBlKiwgd2UgY29udmVydCBpdCBpbnRvIGEgc29saWQgY29sb3IgYnkgdGFraW5nIHRoZSBvcGFjaXR5IGZyb20gdGhlIHJnYmEgdmFsdWUgYW5kXG4gICAgLy8gdXNpbmcgdGhlIHZhbHVlIHRvIGRldGVybWluZSB0aGUgcGVyY2VudGFnZSBvZiB0aGUgYmFja2dyb3VuZCB0byBwdXQgaW50byBmb3JlZ3JvdW5kXG4gICAgLy8gd2hlbiBtaXhpbmcgdGhlIGNvbG9ycyB0b2dldGhlci4gT3RoZXJ3aXNlLCBpZiBpdCByZXNvbHZlcyB0byBzb21ldGhpbmcgZGlmZmVyZW50XG4gICAgLy8gKGUuZy4gaXQgcmVzb2x2ZXMgdG8gYSBDU1MgdmFyaWFibGUpLCB3ZSB1c2UgdGhlIGNvbG9yIGRpcmVjdGx5LlxuICAgIEBpZiAodHlwZS1vZigkdGFibGUtYmFja2dyb3VuZCkgPT0gY29sb3IgYW5kIHR5cGUtb2YoJHRleHQtY29sb3IpID09IGNvbG9yKSB7XG4gICAgICAkdGV4dC1vcGFjaXR5OiBvcGFjaXR5KCR0ZXh0LWNvbG9yKTtcbiAgICAgIGNvbG9yOiBtaXgoJHRhYmxlLWJhY2tncm91bmQsIHJnYmEoJHRleHQtY29sb3IsIDEpLCAoMSAtICR0ZXh0LW9wYWNpdHkpICogMTAwJSk7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIGNvbG9yOiAkdGV4dC1jb2xvcjtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1hdC1zb3J0LXR5cG9ncmFwaHkoJGNvbmZpZykgeyB9XG5cblxuXG5cblxuQG1peGluIG1hdC10YWJzLXRoZW1lKCR0aGVtZSkge1xuICAkcHJpbWFyeTogbWFwLWdldCgkdGhlbWUsIHByaW1hcnkpO1xuICAkYWNjZW50OiBtYXAtZ2V0KCR0aGVtZSwgYWNjZW50KTtcbiAgJHdhcm46IG1hcC1nZXQoJHRoZW1lLCB3YXJuKTtcbiAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgJGZvcmVncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBmb3JlZ3JvdW5kKTtcbiAgJGhlYWRlci1ib3JkZXI6IDFweCBzb2xpZCBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuXG4gIC5tYXQtdGFiLW5hdi1iYXIsXG4gIC5tYXQtdGFiLWhlYWRlciB7XG4gICAgYm9yZGVyLWJvdHRvbTogJGhlYWRlci1ib3JkZXI7XG4gIH1cblxuICAubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIge1xuICAgIC5tYXQtdGFiLW5hdi1iYXIsXG4gICAgLm1hdC10YWItaGVhZGVyIHtcbiAgICAgIGJvcmRlci10b3A6ICRoZWFkZXItYm9yZGVyO1xuICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAubWF0LXRhYi1sYWJlbCwgLm1hdC10YWItbGluayB7XG4gICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgdGV4dCk7XG5cbiAgICAmLm1hdC10YWItZGlzYWJsZWQge1xuICAgICAgY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuICB9XG5cbiAgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiB7XG4gICAgYm9yZGVyLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICB9XG5cbiAgLy8gUmVtb3ZlIGhlYWRlciBib3JkZXIgd2hlbiB0aGVyZSBpcyBhIGJhY2tncm91bmQgY29sb3JcbiAgLm1hdC10YWItZ3JvdXBbY2xhc3MqPSdtYXQtYmFja2dyb3VuZC0nXSAubWF0LXRhYi1oZWFkZXIsXG4gIC5tYXQtdGFiLW5hdi1iYXJbY2xhc3MqPSdtYXQtYmFja2dyb3VuZC0nXSB7XG4gICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbiAgICBib3JkZXItdG9wOiBub25lO1xuICB9XG5cbiAgLm1hdC10YWItZ3JvdXAsIC5tYXQtdGFiLW5hdi1iYXIge1xuICAgICR0aGVtZS1jb2xvcnM6IChcbiAgICAgIHByaW1hcnk6ICRwcmltYXJ5LFxuICAgICAgYWNjZW50OiAkYWNjZW50LFxuICAgICAgd2FybjogJHdhcm5cbiAgICApO1xuXG4gICAgQGVhY2ggJG5hbWUsICRjb2xvciBpbiAkdGhlbWUtY29sb3JzIHtcbiAgICAgIC8vIFNldCB0aGUgZm9yZWdyb3VuZCBjb2xvciBvZiB0aGUgdGFic1xuICAgICAgJi5tYXQtI3skbmFtZX0ge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LXRhYi1sYWJlbC1mb2N1cygkY29sb3IpO1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWluay1iYXIoJGNvbG9yKTtcblxuICAgICAgICAvLyBPdmVycmlkZSBpbmsgYmFyIHdoZW4gYmFja2dyb3VuZCBjb2xvciBpcyB0aGUgc2FtZVxuICAgICAgICAmLm1hdC1iYWNrZ3JvdW5kLSN7JG5hbWV9IHtcbiAgICAgICAgICBAaW5jbHVkZSBfbWF0LWluay1iYXIoJGNvbG9yLCBkZWZhdWx0LWNvbnRyYXN0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIEBlYWNoICRuYW1lLCAkY29sb3IgaW4gJHRoZW1lLWNvbG9ycyB7XG4gICAgICAvLyBTZXQgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgdGFicyBhbmQgb3ZlcnJpZGUgZm9jdXMgY29sb3JcbiAgICAgICYubWF0LWJhY2tncm91bmQtI3skbmFtZX0ge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LXRhYi1sYWJlbC1mb2N1cygkY29sb3IpO1xuICAgICAgICBAaW5jbHVkZSBfbWF0LXRhYnMtYmFja2dyb3VuZCgkY29sb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gX21hdC1pbmstYmFyKCRjb2xvciwgJGh1ZTogZGVmYXVsdCkge1xuICAubWF0LWluay1iYXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hdC1jb2xvcigkY29sb3IsICRodWUpO1xuICB9XG59XG5cbkBtaXhpbiBfbWF0LXRhYi1sYWJlbC1mb2N1cygkdGFiLWZvY3VzLWNvbG9yKSB7XG4gIC5tYXQtdGFiLWxhYmVsLFxuICAubWF0LXRhYi1saW5rIHtcbiAgICAmLmNkay1rZXlib2FyZC1mb2N1c2VkLFxuICAgICYuY2RrLXByb2dyYW0tZm9jdXNlZCB7XG4gICAgICAmOm5vdCgubWF0LXRhYi1kaXNhYmxlZCkge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJHRhYi1mb2N1cy1jb2xvciwgbGlnaHRlciwgMC4zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuQG1peGluIF9tYXQtdGFicy1iYWNrZ3JvdW5kKCRiYWNrZ3JvdW5kLWNvbG9yKSB7XG4gIC8vIFNldCBiYWNrZ3JvdW5kIGNvbG9yIGZvciB0aGUgdGFiIGdyb3VwXG4gIC5tYXQtdGFiLWhlYWRlciwgLm1hdC10YWItbGlua3MsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQtY29sb3IpO1xuICB9XG5cbiAgLy8gU2V0IGxhYmVscyB0byBjb250cmFzdCBhZ2FpbnN0IGJhY2tncm91bmRcbiAgLm1hdC10YWItbGFiZWwsIC5tYXQtdGFiLWxpbmsge1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQtY29sb3IsIGRlZmF1bHQtY29udHJhc3QpO1xuXG4gICAgJi5tYXQtdGFiLWRpc2FibGVkIHtcbiAgICAgIGNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQtY29sb3IsIGRlZmF1bHQtY29udHJhc3QsIDAuNCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IHBhZ2luYXRpb24gY2hldnJvbnMgdG8gY29udHJhc3QgYmFja2dyb3VuZFxuICAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZC1jb2xvciwgZGVmYXVsdC1jb250cmFzdCk7XG4gIH1cblxuICAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uIHtcbiAgICBib3JkZXItY29sb3I6IG1hdC1jb2xvcigkYmFja2dyb3VuZC1jb2xvciwgZGVmYXVsdC1jb250cmFzdCwgMC40KTtcbiAgfVxuXG4gIC8vIFNldCByaXBwbGVzIGNvbG9yIHRvIGJlIHRoZSBjb250cmFzdCBjb2xvciBvZiB0aGUgbmV3IGJhY2tncm91bmQuIE90aGVyd2lzZSB0aGUgcmlwcGxlXG4gIC8vIGNvbG9yIHdpbGwgYmUgYmFzZWQgb24gdGhlIGFwcCBiYWNrZ3JvdW5kIGNvbG9yLlxuICAubWF0LXJpcHBsZS1lbGVtZW50IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXQtY29sb3IoJGJhY2tncm91bmQtY29sb3IsIGRlZmF1bHQtY29udHJhc3QsIDAuMTIpO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtdGFicy10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC10YWItZ3JvdXAge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gIH1cblxuICAubWF0LXRhYi1sYWJlbCwgLm1hdC10YWItbGluayB7XG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZywgYnV0dG9uKTtcbiAgICAgIHNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYnV0dG9uKTtcbiAgICAgIHdlaWdodDogbWF0LWZvbnQtd2VpZ2h0KCRjb25maWcsIGJ1dHRvbik7XG4gICAgfVxuICB9XG59XG5cblxuXG5cblxuXG5AbWl4aW4gX21hdC10b29sYmFyLWNvbG9yKCRwYWxldHRlKSB7XG4gIGJhY2tncm91bmQ6IG1hdC1jb2xvcigkcGFsZXR0ZSk7XG4gIGNvbG9yOiBtYXQtY29sb3IoJHBhbGV0dGUsIGRlZmF1bHQtY29udHJhc3QpO1xufVxuXG5AbWl4aW4gX21hdC10b29sYmFyLWZvcm0tZmllbGQtb3ZlcnJpZGVzIHtcbiAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSxcbiAgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSxcbiAgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUge1xuICAgIGJhY2tncm91bmQtY29sb3I6IGN1cnJlbnRDb2xvcjtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1sYWJlbCxcbiAgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCxcbiAgLm1hdC1zZWxlY3QtdmFsdWUsXG4gIC5tYXQtc2VsZWN0LWFycm93LFxuICAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3cge1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICB9XG5cbiAgLm1hdC1pbnB1dC1lbGVtZW50IHtcbiAgICBjYXJldC1jb2xvcjogY3VycmVudENvbG9yO1xuICB9XG59XG5cbkBtaXhpbiBtYXQtdG9vbGJhci10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC10b29sYmFyIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIGFwcC1iYXIpO1xuICAgIGNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHRleHQpO1xuXG4gICAgJi5tYXQtcHJpbWFyeSB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRvb2xiYXItY29sb3IoJHByaW1hcnkpO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRvb2xiYXItY29sb3IoJGFjY2VudCk7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBAaW5jbHVkZSBfbWF0LXRvb2xiYXItY29sb3IoJHdhcm4pO1xuICAgIH1cblxuICAgIEBpbmNsdWRlIF9tYXQtdG9vbGJhci1mb3JtLWZpZWxkLW92ZXJyaWRlcztcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXRvb2xiYXItdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtdG9vbGJhcixcbiAgLm1hdC10b29sYmFyIGgxLFxuICAubWF0LXRvb2xiYXIgaDIsXG4gIC5tYXQtdG9vbGJhciBoMyxcbiAgLm1hdC10b29sYmFyIGg0LFxuICAubWF0LXRvb2xiYXIgaDUsXG4gIC5tYXQtdG9vbGJhciBoNiB7XG4gICAgQGluY2x1ZGUgbWF0LXR5cG9ncmFwaHktbGV2ZWwtdG8tc3R5bGVzKCRjb25maWcsIHRpdGxlKTtcbiAgICBtYXJnaW46IDA7XG4gIH1cbn1cblxuXG5cblxuXG4kbWF0LXRvb2x0aXAtdGFyZ2V0LWhlaWdodDogMjJweDtcbiRtYXQtdG9vbHRpcC1mb250LXNpemU6IDEwcHg7XG4kbWF0LXRvb2x0aXAtdmVydGljYWwtcGFkZGluZzogKCRtYXQtdG9vbHRpcC10YXJnZXQtaGVpZ2h0IC0gJG1hdC10b29sdGlwLWZvbnQtc2l6ZSkgLyAyO1xuXG4kbWF0LXRvb2x0aXAtaGFuZHNldC10YXJnZXQtaGVpZ2h0OiAzMHB4O1xuJG1hdC10b29sdGlwLWhhbmRzZXQtZm9udC1zaXplOiAxNHB4O1xuJG1hdC10b29sdGlwLWhhbmRzZXQtdmVydGljYWwtcGFkZGluZzpcbiAgICAoJG1hdC10b29sdGlwLWhhbmRzZXQtdGFyZ2V0LWhlaWdodCAtICRtYXQtdG9vbHRpcC1oYW5kc2V0LWZvbnQtc2l6ZSkgLyAyO1xuXG5AbWl4aW4gbWF0LXRvb2x0aXAtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG5cbiAgLm1hdC10b29sdGlwIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsIHRvb2x0aXAsIDAuOSk7XG4gIH1cbn1cblxuQG1peGluIG1hdC10b29sdGlwLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAubWF0LXRvb2x0aXAge1xuICAgIGZvbnQtZmFtaWx5OiBtYXQtZm9udC1mYW1pbHkoJGNvbmZpZyk7XG4gICAgZm9udC1zaXplOiAkbWF0LXRvb2x0aXAtZm9udC1zaXplO1xuICAgIHBhZGRpbmctdG9wOiAkbWF0LXRvb2x0aXAtdmVydGljYWwtcGFkZGluZztcbiAgICBwYWRkaW5nLWJvdHRvbTogJG1hdC10b29sdGlwLXZlcnRpY2FsLXBhZGRpbmc7XG4gIH1cblxuICAubWF0LXRvb2x0aXAtaGFuZHNldCB7XG4gICAgZm9udC1zaXplOiAkbWF0LXRvb2x0aXAtaGFuZHNldC1mb250LXNpemU7XG4gICAgcGFkZGluZy10b3A6ICRtYXQtdG9vbHRpcC1oYW5kc2V0LXZlcnRpY2FsLXBhZGRpbmc7XG4gICAgcGFkZGluZy1ib3R0b206ICRtYXQtdG9vbHRpcC1oYW5kc2V0LXZlcnRpY2FsLXBhZGRpbmc7XG4gIH1cbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LXNuYWNrLWJhci10aGVtZSgkdGhlbWUpIHtcbiAgJGlzLWRhcmstdGhlbWU6IG1hcC1nZXQoJHRoZW1lLCBpcy1kYXJrKTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG5cbiAgLm1hdC1zbmFjay1iYXItY29udGFpbmVyIHtcbiAgICAvLyBVc2UgdGhlIHByaW1hcnkgdGV4dCBvbiB0aGUgZGFyayB0aGVtZSwgZXZlbiB0aG91Z2ggdGhlIGxpZ2h0ZXIgb25lIHVzZXNcbiAgICAvLyBhIHNlY29uZGFyeSwgYmVjYXVzZSB0aGUgY29udHJhc3Qgb24gdGhlIGxpZ2h0IHByaW1hcnkgdGV4dCBpcyBwb29yLlxuICAgIGNvbG9yOiBpZigkaXMtZGFyay10aGVtZSwgJGRhcmstcHJpbWFyeS10ZXh0LCAkbGlnaHQtc2Vjb25kYXJ5LXRleHQpO1xuICAgIGJhY2tncm91bmQ6IGlmKCRpcy1kYXJrLXRoZW1lLCBtYXAtZ2V0KCRtYXQtZ3JleSwgNTApLCAjMzIzMjMyKTtcblxuICAgIEBpbmNsdWRlIF9tYXQtdGhlbWUtZWxldmF0aW9uKDYsICR0aGVtZSk7XG4gIH1cblxuICAubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb24ge1xuICAgIGNvbG9yOiBpZigkaXMtZGFyay10aGVtZSwgaW5oZXJpdCwgbWF0LWNvbG9yKCRhY2NlbnQsIHRleHQpKTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXNuYWNrLWJhci10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLm1hdC1zaW1wbGUtc25hY2tiYXIge1xuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogbWF0LWZvbnQtZmFtaWx5KCRjb25maWcsIGJvZHktMSk7XG4gICAgICBzaXplOiBtYXQtZm9udC1zaXplKCRjb25maWcsIGJvZHktMSk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uIHtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6IGluaGVyaXQ7XG4gICAgICBzaXplOiBpbmhlcml0O1xuICAgICAgd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYnV0dG9uKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vLyBUaGVtZSBzdHlsZXMgdGhhdCBvbmx5IGFwcGx5IHRvIHRoZSBmaWxsIGFwcGVhcmFuY2Ugb2YgdGhlIGZvcm0tZmllbGQuXG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1maWxsLXRoZW1lKCR0aGVtZSkge1xuICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuICAkaXMtZGFyay10aGVtZTogbWFwLWdldCgkdGhlbWUsIGlzLWRhcmspO1xuXG4gICRmaWxsLWJhY2tncm91bmQ6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgYmFzZSwgaWYoJGlzLWRhcmstdGhlbWUsIDAuMSwgMC4wNCkpO1xuICAkZmlsbC1kaXNhYmxlZC1iYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGJhc2UsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjA1LCAwLjAyKSk7XG4gICR1bmRlcmxpbmUtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlciwgaWYoJGlzLWRhcmstdGhlbWUsIDAuNSwgMC40MikpO1xuICAkbGFiZWwtZGlzYWJsZWQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGlzYWJsZWQtdGV4dCk7XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWZsZXgge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGZpbGwtYmFja2dyb3VuZDtcbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1mbGV4IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRmaWxsLWRpc2FibGVkLWJhY2tncm91bmQ7XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtY29sb3I7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCB7XG4gICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBjb2xvcjogJGxhYmVsLWRpc2FibGVkLWNvbG9yO1xuICAgICAgfVxuXG4gICAgICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gVXNlZCB0byBtYWtlIGluc3RhbmNlcyBvZiB0aGUgX21hdC1mb3JtLWZpZWxkLWxhYmVsLWZsb2F0aW5nIG1peGluIG5lZ2xpZ2libHkgZGlmZmVyZW50LFxuLy8gYW5kIHByZXZlbnQgR29vZ2xlJ3MgQ1NTIE9wdGltaXplciBmcm9tIGNvbGxhcHNpbmcgdGhlIGRlY2xhcmF0aW9ucy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBzb21lXG4vLyBvZiB0aGUgc2VsZWN0b3JzIGNvbnRhaW4gcHNldWRvLWNsYXNzZXMgbm90IHJlY29nbml6ZWQgaW4gYWxsIGJyb3dzZXJzLiBJZiBhIGJyb3dzZXIgZW5jb3VudGVyc1xuLy8gYW4gdW5rbm93biBwc2V1ZG8tY2xhc3MgaXQgd2lsbCBkaXNjYXJkIHRoZSBlbnRpcmUgcnVsZSBzZXQuXG4kbWF0LWZvcm0tZmllbGQtZmlsbC1kZWR1cGU6IDA7XG5cbi8vIEFwcGxpZXMgYSBmbG9hdGluZyBsYWJlbCBhYm92ZSB0aGUgZm9ybSBmaWVsZCBjb250cm9sIGl0c2VsZi5cbkBtaXhpbiBfbWF0LWZvcm0tZmllbGQtZmlsbC1sYWJlbC1mbG9hdGluZygkZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtJGluZml4LW1hcmdpbi10b3AgLSAkaW5maXgtcGFkZGluZyArICRtYXQtZm9ybS1maWVsZC1maWxsLWRlZHVwZSlcbiAgICAgICAgICAgICBzY2FsZSgkZm9udC1zY2FsZSk7XG4gIHdpZHRoOiAxMDAlIC8gJGZvbnQtc2NhbGUgKyAkbWF0LWZvcm0tZmllbGQtZmlsbC1kZWR1cGU7XG5cbiAgJG1hdC1mb3JtLWZpZWxkLWZpbGwtZGVkdXBlOiAkbWF0LWZvcm0tZmllbGQtZmlsbC1kZWR1cGUgKyAwLjAwMDAxICFnbG9iYWw7XG59XG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1maWxsLXR5cG9ncmFwaHkoJGNvbmZpZykge1xuICAvLyBUaGUgdW5pdC1sZXNzIGxpbmUtaGVpZ2h0IGZyb20gdGhlIGZvbnQgY29uZmlnLlxuICAkbGluZS1oZWlnaHQ6IG1hdC1saW5lLWhlaWdodCgkY29uZmlnLCBpbnB1dCk7XG4gIC8vIFRoZSBhbW91bnQgdG8gc2NhbGUgdGhlIGZvbnQgZm9yIHRoZSBmbG9hdGluZyBsYWJlbCBhbmQgc3Vic2NyaXB0LlxuICAkc3Vic2NyaXB0LWZvbnQtc2NhbGU6IDAuNzU7XG4gIC8vIFRoZSBwYWRkaW5nIG9uIHRvcCBvZiB0aGUgaW5maXguXG4gICRpbmZpeC1wYWRkaW5nLXRvcDogMC4yNWVtO1xuICAvLyBUaGUgcGFkZGluZyBiZWxvdyB0aGUgaW5maXguXG4gICRpbmZpeC1wYWRkaW5nLWJvdHRvbTogMC43NWVtO1xuICAvLyBUaGUgbWFyZ2luIGFwcGxpZWQgdG8gdGhlIGZvcm0tZmllbGQtaW5maXggdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsLlxuICAkaW5maXgtbWFyZ2luLXRvcDogMWVtICogJGxpbmUtaGVpZ2h0ICogJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuICAvLyBUaGUgYW1vdW50IHdlIG9mZnNldCB0aGUgbGFiZWwgZnJvbSB0aGUgaW5wdXQgdGV4dCBpbiB0aGUgZmlsbCBhcHBlYXJhbmNlLlxuICAkZmlsbC1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldDogLTAuNWVtO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwge1xuICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICBwYWRkaW5nOiAkaW5maXgtcGFkZGluZy10b3AgMCAkaW5maXgtcGFkZGluZy1ib3R0b20gMDtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgdG9wOiAkaW5maXgtbWFyZ2luLXRvcCArICRpbmZpeC1wYWRkaW5nLXRvcDtcbiAgICAgIG1hcmdpbi10b3A6ICRmaWxsLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0O1xuICAgIH1cblxuICAgICYubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IHtcbiAgICAgICYubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCxcbiAgICAgIC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWZpbGwtbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZy10b3AgKyAkZmlsbC1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldCxcbiAgICAgICAgICAgICAgICAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNlcnZlci1zaWRlIHJlbmRlcmVkIG1hdElucHV0IHdpdGggYSBsYWJlbCBhdHRyaWJ1dGUgYnV0IGxhYmVsIG5vdCBzaG93blxuICAgICAgLy8gKHVzZWQgYXMgYSBwdXJlIENTUyBzdGFuZC1pbiBmb3IgbWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0KS5cbiAgICAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXG4gICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtZmlsbC1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLXRvcCArICRmaWxsLWFwcGVhcmFuY2UtbGFiZWwtb2Zmc2V0LFxuICAgICAgICAgICAgICAgICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cblxuLy8gVGhlbWUgc3R5bGVzIHRoYXQgb25seSBhcHBseSB0byB0aGUgbGVnYWN5IGFwcGVhcmFuY2Ugb2YgdGhlIGZvcm0tZmllbGQuXG5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC1sZWdhY3ktdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG5cbiAgJGxhYmVsLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIHNlY29uZGFyeS10ZXh0KTtcbiAgJHVuZGVybGluZS1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyLCBpZigkaXMtZGFyay10aGVtZSwgMC43LCAwLjQyKSk7XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IHtcbiAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgY29sb3I6ICRsYWJlbC1jb2xvcjtcbiAgICB9XG5cbiAgICAubWF0LWhpbnQge1xuICAgICAgY29sb3I6ICRsYWJlbC1jb2xvcjtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtY29sb3I7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIHtcbiAgICAgIEBpbmNsdWRlIG1hdC1jb250cm9sLWRpc2FibGVkLXVuZGVybGluZSgkdW5kZXJsaW5lLWNvbG9yKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gVXNlZCB0byBtYWtlIGluc3RhbmNlcyBvZiB0aGUgX21hdC1mb3JtLWZpZWxkLWxhYmVsLWZsb2F0aW5nIG1peGluIG5lZ2xpZ2libHkgZGlmZmVyZW50LFxuLy8gYW5kIHByZXZlbnQgR29vZ2xlJ3MgQ1NTIE9wdGltaXplciBmcm9tIGNvbGxhcHNpbmcgdGhlIGRlY2xhcmF0aW9ucy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBzb21lXG4vLyBvZiB0aGUgc2VsZWN0b3JzIGNvbnRhaW4gcHNldWRvLWNsYXNzZXMgbm90IHJlY29nbml6ZWQgaW4gYWxsIGJyb3dzZXJzLiBJZiBhIGJyb3dzZXIgZW5jb3VudGVyc1xuLy8gYW4gdW5rbm93biBwc2V1ZG8tY2xhc3MgaXQgd2lsbCBkaXNjYXJkIHRoZSBlbnRpcmUgcnVsZSBzZXQuXG4kbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZTogMDtcblxuLy8gQXBwbGllcyBhIGZsb2F0aW5nIGxhYmVsIGFib3ZlIHRoZSBmb3JtIGZpZWxkIGNvbnRyb2wgaXRzZWxmLlxuQG1peGluIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmcoJGZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCkge1xuICAvLyBXZSB1c2UgcGVyc3BlY3RpdmUgdG8gZml4IHRoZSB0ZXh0IGJsdXJyaW5lc3MgYXMgZGVzY3JpYmVkIGhlcmU6XG4gIC8vIGh0dHA6Ly93d3cudXNlcmFnZW50bWFuLmNvbS9ibG9nLzIwMTQvMDUvMDQvZml4aW5nLXR5cG9ncmFwaHktaW5zaWRlLW9mLTItZC1jc3MtdHJhbnNmb3Jtcy9cbiAgLy8gVGhpcyByZXN1bHRzIGluIGEgc21hbGwgaml0dGVyIGFmdGVyIHRoZSBsYWJlbCBmbG9hdHMgb24gRmlyZWZveCwgd2hpY2ggdGhlXG4gIC8vIHRyYW5zbGF0ZVogZml4ZXMuXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtJGluZml4LW1hcmdpbi10b3AgLSAkaW5maXgtcGFkZGluZykgc2NhbGUoJGZvbnQtc2NhbGUpIHBlcnNwZWN0aXZlKDEwMHB4KVxuICB0cmFuc2xhdGVaKDAuMDAxcHggKyAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZSk7XG4gIC8vIFRoZSB0cmlja3MgYWJvdmUgdXNlZCB0byBzbW9vdGggb3V0IHRoZSBhbmltYXRpb24gb24gY2hyb21lIGFuZCBmaXJlZm94IGFjdHVhbGx5IG1ha2UgdGhpbmdzXG4gIC8vIHdvcnNlIG9uIElFLCBzbyB3ZSBkb24ndCBpbmNsdWRlIHRoZW0gaW4gdGhlIElFIHZlcnNpb24uXG4gIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRpbmZpeC1tYXJnaW4tdG9wIC0gJGluZml4LXBhZGRpbmcgKyAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZSlcbiAgICAgICAgICAgICAgICAgIHNjYWxlKCRmb250LXNjYWxlKTtcblxuICB3aWR0aDogMTAwJSAvICRmb250LXNjYWxlICsgJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGU7XG5cbiAgJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGU6ICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlICsgMC4wMDAwMSAhZ2xvYmFsO1xufVxuXG4vLyBTYW1lIGFzIG1peGluIGFib3ZlLCBidXQgb21pdHMgdGhlIHRyYW5zbGF0ZVogZm9yIHByaW50aW5nIHB1cnBvc2VzLlxuQG1peGluIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmctcHJpbnQoJGZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCkge1xuICAvLyBUaGlzIHJlc3VsdHMgaW4gYSBzbWFsbCBqaXR0ZXIgYWZ0ZXIgdGhlIGxhYmVsIGZsb2F0cyBvbiBGaXJlZm94LCB3aGljaCB0aGVcbiAgLy8gdHJhbnNsYXRlWiBmaXhlcy5cbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kaW5maXgtbWFyZ2luLXRvcCAtICRpbmZpeC1wYWRkaW5nICsgJG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS1kZWR1cGUpXG4gICAgICAgICAgICAgICAgICBzY2FsZSgkZm9udC1zY2FsZSk7XG4gIC8vIFRoZSB0cmlja3MgYWJvdmUgdXNlZCB0byBzbW9vdGggb3V0IHRoZSBhbmltYXRpb24gb24gY2hyb21lIGFuZCBmaXJlZm94IGFjdHVhbGx5IG1ha2UgdGhpbmdzXG4gIC8vIHdvcnNlIG9uIElFLCBzbyB3ZSBkb24ndCBpbmNsdWRlIHRoZW0gaW4gdGhlIElFIHZlcnNpb24uXG4gICRtYXQtZm9ybS1maWVsZC1sZWdhY3ktZGVkdXBlOiAkbWF0LWZvcm0tZmllbGQtbGVnYWN5LWRlZHVwZSArIDAuMDAwMDEgIWdsb2JhbDtcbn1cblxuQG1peGluIG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLy8gVGhlIHVuaXQtbGVzcyBsaW5lLWhlaWdodCBmcm9tIHRoZSBmb250IGNvbmZpZy5cbiAgJGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgaW5wdXQpO1xuICAvLyBUaGUgYW1vdW50IHRvIHNjYWxlIHRoZSBmb250IGZvciB0aGUgZmxvYXRpbmcgbGFiZWwgYW5kIHN1YnNjcmlwdC5cbiAgJHN1YnNjcmlwdC1mb250LXNjYWxlOiAwLjc1O1xuICAvLyBUaGUgYW1vdW50IG9mIHNwYWNlIGJldHdlZW4gdGhlIHRvcCBvZiB0aGUgbGluZSBhbmQgdGhlIHRvcCBvZiB0aGUgYWN0dWFsIHRleHRcbiAgLy8gKGFzIGEgZnJhY3Rpb24gb2YgdGhlIGZvbnQtc2l6ZSkuXG4gICRsaW5lLXNwYWNpbmc6ICgkbGluZS1oZWlnaHQgLSAxKSAvIDI7XG4gIC8vIFRoZSBwYWRkaW5nIG9uIHRoZSBpbmZpeC4gTW9ja3Mgc2hvdyBoYWxmIG9mIHRoZSB0ZXh0IHNpemUsIGJ1dCBzZWVtIHRvIG1lYXN1cmUgZnJvbSB0aGUgZWRnZVxuICAvLyBvZiB0aGUgdGV4dCBpdHNlbGYsIG5vdCB0aGUgZWRnZSBvZiB0aGUgbGluZTsgdGhlcmVmb3JlIHdlIHN1YnRyYWN0IG9mZiB0aGUgbGluZSBzcGFjaW5nLlxuICAkaW5maXgtcGFkZGluZzogMC41ZW0gLSAkbGluZS1zcGFjaW5nO1xuICAvLyBUaGUgbWFyZ2luIGFwcGxpZWQgdG8gdGhlIGZvcm0tZmllbGQtaW5maXggdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsLlxuICAkaW5maXgtbWFyZ2luLXRvcDogMWVtICogJGxpbmUtaGVpZ2h0ICogJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuICAvLyBUaGUgc3BhY2UgYmV0d2VlbiB0aGUgYm90dG9tIG9mIHRoZSAubWF0LWZvcm0tZmllbGQtZmxleCBhcmVhIGFuZCB0aGUgc3Vic2NyaXB0IHdyYXBwZXIuXG4gIC8vIE1vY2tzIHNob3cgaGFsZiBvZiB0aGUgdGV4dCBzaXplLCBidXQgdGhpcyBtYXJnaW4gaXMgYXBwbGllZCB0byBhbiBlbGVtZW50IHdpdGggdGhlIHN1YnNjcmlwdFxuICAvLyB0ZXh0IGZvbnQgc2l6ZSwgc28gd2UgbmVlZCB0byBkaXZpZGUgYnkgdGhlIHNjYWxlIGZhY3RvciB0byBtYWtlIGl0IGhhbGYgb2YgdGhlIG9yaWdpbmFsIHRleHRcbiAgLy8gc2l6ZS4gV2UgYWdhaW4gbmVlZCB0byBzdWJ0cmFjdCBvZmYgdGhlIGxpbmUgc3BhY2luZyBzaW5jZSB0aGUgbW9ja3MgbWVhc3VyZSB0byB0aGUgZWRnZSBvZiB0aGVcbiAgLy8gdGV4dCwgbm90IHRoZSAgZWRnZSBvZiB0aGUgbGluZS5cbiAgJHN1YnNjcmlwdC1tYXJnaW4tdG9wOiAwLjVlbSAvICRzdWJzY3JpcHQtZm9udC1zY2FsZSAtICgkbGluZS1zcGFjaW5nICogMik7XG4gIC8vIFRoZSBwYWRkaW5nIGFwcGxpZWQgdG8gdGhlIGZvcm0tZmllbGQtd3JhcHBlciB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgc3Vic2NyaXB0LCBzaW5jZSBpdCdzXG4gIC8vIGFic29sdXRlbHkgcG9zaXRpb25lZC4gVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBzdWJzY3JpcHQncyBtYXJnaW4gYW5kIGxpbmUtaGVpZ2h0LCBidXQgd2VcbiAgLy8gbmVlZCB0byBtdWx0aXBseSBieSB0aGUgc3Vic2NyaXB0IGZvbnQgc2NhbGUgZmFjdG9yIHNpbmNlIHRoZSB3cmFwcGVyIGhhcyBhIGxhcmdlciBmb250IHNpemUuXG4gICR3cmFwcGVyLXBhZGRpbmctYm90dG9tOiAoJHN1YnNjcmlwdC1tYXJnaW4tdG9wICsgJGxpbmUtaGVpZ2h0KSAqICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcblxuICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kge1xuICAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAkd3JhcHBlci1wYWRkaW5nLWJvdHRvbTtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgcGFkZGluZzogJGluZml4LXBhZGRpbmcgMDtcbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCB7XG4gICAgICAmLm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsXG4gICAgICAubWF0LWlucHV0LXNlcnZlcjpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmcoXG4gICAgICAgICAgICAgICAgJHN1YnNjcmlwdC1mb250LXNjYWxlLCAkaW5maXgtcGFkZGluZywgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgfVxuXG4gICAgICAvLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wIHdpbGwgcmVseSBvbiBBdXRvZmlsbE1vbml0b3IgaW5zdGVhZC5cbiAgICAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlclxuICAgICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIHtcbiAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNlcnZlci1zaWRlIHJlbmRlcmVkIG1hdElucHV0IHdpdGggYSBsYWJlbCBhdHRyaWJ1dGUgYnV0IGxhYmVsIG5vdCBzaG93blxuICAgICAgLy8gKHVzZWQgYXMgYSBwdXJlIENTUyBzdGFuZC1pbiBmb3IgbWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0KS5cbiAgICAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXG4gICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtbGVnYWN5LWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgdG9wOiAkaW5maXgtbWFyZ2luLXRvcCArICRpbmZpeC1wYWRkaW5nO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUge1xuICAgICAgLy8gV2Ugd2FudCB0aGUgdW5kZXJsaW5lIHRvIHN0YXJ0IGF0IHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgYm94LCBub3QgdGhlIHBhZGRpbmcgYm94LFxuICAgICAgLy8gc28gd2UgbW92ZSBpdCB1cCBieSB0aGUgcGFkZGluZyBhbW91bnQuXG4gICAgICBib3R0b206ICR3cmFwcGVyLXBhZGRpbmctYm90dG9tO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlciB7XG4gICAgICBtYXJnaW4tdG9wOiAkc3Vic2NyaXB0LW1hcmdpbi10b3A7XG5cbiAgICAgIC8vIFdlIHdhbnQgdGhlIHN1YnNjcmlwdCB0byBzdGFydCBhdCB0aGUgZW5kIG9mIHRoZSBjb250ZW50IGJveCwgbm90IHRoZSBwYWRkaW5nIGJveCxcbiAgICAgIC8vIHNvIHdlIG1vdmUgaXQgdXAgYnkgdGhlIHBhZGRpbmcgYW1vdW50IChhZGp1c3RlZCBmb3IgdGhlIHNtYWxsZXIgZm9udCBzaXplKTtcbiAgICAgIHRvcDogY2FsYygxMDAlIC0gI3skd3JhcHBlci1wYWRkaW5nLWJvdHRvbSAvICRzdWJzY3JpcHQtZm9udC1zY2FsZX0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIHRyYW5zbGF0ZVogY2F1c2VzIHRoZSBsYWJlbCB0byBub3QgYXBwZWFyIHdoaWxlIHByaW50aW5nLCBzbyB3ZSBvdmVycmlkZSBpdCB0byBub3RcbiAgLy8gYXBwbHkgdHJhbnNsYXRlWiB3aGlsZSBwcmludGluZ1xuICBAbWVkaWEgcHJpbnQge1xuICAgIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSB7XG4gICAgICAmLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCB7XG4gICAgICAgICYubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCxcbiAgICAgICAgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmctcHJpbnQoXG4gICAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBAYnJlYWtpbmctY2hhbmdlIDguMC4wIHdpbGwgcmVseSBvbiBBdXRvZmlsbE1vbml0b3IgaW5zdGVhZC5cbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXG4gICAgICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxlZ2FjeS1sYWJlbC1mbG9hdGluZy1wcmludChcbiAgICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNlcnZlci1zaWRlIHJlbmRlcmVkIG1hdElucHV0IHdpdGggYSBsYWJlbCBhdHRyaWJ1dGUgYnV0IGxhYmVsIG5vdCBzaG93blxuICAgICAgICAvLyAodXNlZCBhcyBhIHB1cmUgQ1NTIHN0YW5kLWluIGZvciBtYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQpLlxuICAgICAgICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlclxuICAgICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1sZWdhY3ktbGFiZWwtZmxvYXRpbmctcHJpbnQoXG4gICAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5cblxuLy8gVGhlbWUgc3R5bGVzIHRoYXQgb25seSBhcHBseSB0byB0aGUgb3V0bGluZSBhcHBlYXJhbmNlIG9mIHRoZSBmb3JtLWZpZWxkLlxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG5cbiAgJGxhYmVsLWRpc2FibGVkLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpc2FibGVkLXRleHQpO1xuICAkb3V0bGluZS1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyLCBpZigkaXMtZGFyay10aGVtZSwgMC4zLCAwLjEyKSk7XG4gICRvdXRsaW5lLWNvbG9yLWhvdmVyOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIsIGlmKCRpcy1kYXJrLXRoZW1lLCAxLCAwLjg3KSk7XG4gICRvdXRsaW5lLWNvbG9yLXByaW1hcnk6IG1hdC1jb2xvcigkcHJpbWFyeSk7XG4gICRvdXRsaW5lLWNvbG9yLWFjY2VudDogbWF0LWNvbG9yKCRhY2NlbnQpO1xuICAkb3V0bGluZS1jb2xvci13YXJuOiBtYXQtY29sb3IoJHdhcm4pO1xuICAkb3V0bGluZS1jb2xvci1kaXNhYmxlZDogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyLCBpZigkaXMtZGFyay10aGVtZSwgMC4xNSwgMC4wNikpO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUge1xuICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lIHtcbiAgICAgIGNvbG9yOiAkb3V0bGluZS1jb2xvcjtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayB7XG4gICAgICBjb2xvcjogJG91dGxpbmUtY29sb3ItaG92ZXI7XG4gICAgfVxuXG4gICAgJi5tYXQtZm9jdXNlZCB7XG4gICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayB7XG4gICAgICAgIGNvbG9yOiAkb3V0bGluZS1jb2xvci1wcmltYXJ5O1xuICAgICAgfVxuXG4gICAgICAmLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sge1xuICAgICAgICBjb2xvcjogJG91dGxpbmUtY29sb3ItYWNjZW50O1xuICAgICAgfVxuXG4gICAgICAmLm1hdC13YXJuIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIHtcbiAgICAgICAgY29sb3I6ICRvdXRsaW5lLWNvbG9yLXdhcm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2xhc3MgcmVwZWF0ZWQgc28gdGhhdCBydWxlIGlzIHNwZWNpZmljIGVub3VnaCB0byBvdmVycmlkZSBmb2N1c2VkIGFjY2VudCBjb2xvciBjYXNlLlxuICAgICYubWF0LWZvcm0tZmllbGQtaW52YWxpZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIHtcbiAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIHtcbiAgICAgICAgY29sb3I6ICRvdXRsaW5lLWNvbG9yLXdhcm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCB7XG4gICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBjb2xvcjogJGxhYmVsLWRpc2FibGVkLWNvbG9yO1xuICAgICAgfVxuXG4gICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gICAgICAgIGNvbG9yOiAkb3V0bGluZS1jb2xvci1kaXNhYmxlZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gVXNlZCB0byBtYWtlIGluc3RhbmNlcyBvZiB0aGUgX21hdC1mb3JtLWZpZWxkLWxhYmVsLWZsb2F0aW5nIG1peGluIG5lZ2xpZ2libHkgZGlmZmVyZW50LFxuLy8gYW5kIHByZXZlbnQgR29vZ2xlJ3MgQ1NTIE9wdGltaXplciBmcm9tIGNvbGxhcHNpbmcgdGhlIGRlY2xhcmF0aW9ucy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBzb21lXG4vLyBvZiB0aGUgc2VsZWN0b3JzIGNvbnRhaW4gcHNldWRvLWNsYXNzZXMgbm90IHJlY29nbml6ZWQgaW4gYWxsIGJyb3dzZXJzLiBJZiBhIGJyb3dzZXIgZW5jb3VudGVyc1xuLy8gYW4gdW5rbm93biBwc2V1ZG8tY2xhc3MgaXQgd2lsbCBkaXNjYXJkIHRoZSBlbnRpcmUgcnVsZSBzZXQuXG4kbWF0LWZvcm0tZmllbGQtb3V0bGluZS1kZWR1cGU6IDA7XG5cbi8vIEFwcGxpZXMgYSBmbG9hdGluZyBsYWJlbCBhYm92ZSB0aGUgZm9ybSBmaWVsZCBjb250cm9sIGl0c2VsZi5cbkBtaXhpbiBfbWF0LWZvcm0tZmllbGQtb3V0bGluZS1sYWJlbC1mbG9hdGluZygkZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtJGluZml4LW1hcmdpbi10b3AgLSAkaW5maXgtcGFkZGluZyArICRtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWRlZHVwZSlcbiAgc2NhbGUoJGZvbnQtc2NhbGUpO1xuICB3aWR0aDogMTAwJSAvICRmb250LXNjYWxlICsgJG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZGVkdXBlO1xuXG4gICRtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWRlZHVwZTogJG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZGVkdXBlICsgMC4wMDAwMSAhZ2xvYmFsO1xufVxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtb3V0bGluZS10eXBvZ3JhcGh5KCRjb25maWcpIHtcbiAgLy8gVGhlIHVuaXQtbGVzcyBsaW5lLWhlaWdodCBmcm9tIHRoZSBmb250IGNvbmZpZy5cbiAgJGxpbmUtaGVpZ2h0OiBtYXQtbGluZS1oZWlnaHQoJGNvbmZpZywgaW5wdXQpO1xuICAvLyBUaGUgYW1vdW50IHRvIHNjYWxlIHRoZSBmb250IGZvciB0aGUgZmxvYXRpbmcgbGFiZWwgYW5kIHN1YnNjcmlwdC5cbiAgJHN1YnNjcmlwdC1mb250LXNjYWxlOiAwLjc1O1xuICAvLyBUaGUgcGFkZGluZyBhYm92ZSBhbmQgYmVsb3cgdGhlIGluZml4LlxuICAkaW5maXgtcGFkZGluZzogMWVtO1xuICAvLyBUaGUgbWFyZ2luIGFwcGxpZWQgdG8gdGhlIGZvcm0tZmllbGQtaW5maXggdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIGZsb2F0aW5nIGxhYmVsLlxuICAkaW5maXgtbWFyZ2luLXRvcDogMWVtICogJGxpbmUtaGVpZ2h0ICogJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuICAvLyBUaGUgc3BhY2UgYmV0d2VlbiB0aGUgYm90dG9tIG9mIHRoZSAubWF0LWZvcm0tZmllbGQtZmxleCBhcmVhIGFuZCB0aGUgc3Vic2NyaXB0IHdyYXBwZXIuXG4gIC8vIE1vY2tzIHNob3cgaGFsZiBvZiB0aGUgdGV4dCBzaXplLCBidXQgdGhpcyBtYXJnaW4gaXMgYXBwbGllZCB0byBhbiBlbGVtZW50IHdpdGggdGhlIHN1YnNjcmlwdFxuICAvLyB0ZXh0IGZvbnQgc2l6ZSwgc28gd2UgbmVlZCB0byBkaXZpZGUgYnkgdGhlIHNjYWxlIGZhY3RvciB0byBtYWtlIGl0IGhhbGYgb2YgdGhlIG9yaWdpbmFsIHRleHRcbiAgLy8gc2l6ZS5cbiAgJHN1YnNjcmlwdC1tYXJnaW4tdG9wOiAwLjVlbSAvICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcbiAgLy8gVGhlIHBhZGRpbmcgYXBwbGllZCB0byB0aGUgZm9ybS1maWVsZC13cmFwcGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBzdWJzY3JpcHQsIHNpbmNlIGl0J3NcbiAgLy8gYWJzb2x1dGVseSBwb3NpdGlvbmVkLiBUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgdGhlIHN1YnNjcmlwdCdzIG1hcmdpbiBhbmQgbGluZS1oZWlnaHQsIGJ1dCB3ZVxuICAvLyBuZWVkIHRvIG11bHRpcGx5IGJ5IHRoZSBzdWJzY3JpcHQgZm9udCBzY2FsZSBmYWN0b3Igc2luY2UgdGhlIHdyYXBwZXIgaGFzIGEgbGFyZ2VyIGZvbnQgc2l6ZS5cbiAgJHdyYXBwZXItcGFkZGluZy1ib3R0b206ICgkc3Vic2NyaXB0LW1hcmdpbi10b3AgKyAkbGluZS1oZWlnaHQpICogJHN1YnNjcmlwdC1mb250LXNjYWxlO1xuICAvLyBUaGUgYW1vdW50IHdlIG9mZnNldCB0aGUgbGFiZWwgZnJvbSB0aGUgaW5wdXQgdGV4dCBpbiB0aGUgb3V0bGluZSBhcHBlYXJhbmNlLlxuICAkb3V0bGluZS1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldDogLTAuMjVlbTtcblxuICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIHtcbiAgICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgcGFkZGluZzogJGluZml4LXBhZGRpbmcgMCAkaW5maXgtcGFkZGluZyAwO1xuICAgIH1cblxuICAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICB0b3A6ICRpbmZpeC1tYXJnaW4tdG9wICsgJGluZml4LXBhZGRpbmc7XG4gICAgICBtYXJnaW4tdG9wOiAkb3V0bGluZS1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldDtcbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCB7XG4gICAgICAmLm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsXG4gICAgICAubWF0LWlucHV0LXNlcnZlcjpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgIEBpbmNsdWRlIF9tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAgICRzdWJzY3JpcHQtZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcgKyAkb3V0bGluZS1hcHBlYXJhbmNlLWxhYmVsLW9mZnNldCxcbiAgICAgICAgICAgICAgICAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNlcnZlci1zaWRlIHJlbmRlcmVkIG1hdElucHV0IHdpdGggYSBsYWJlbCBhdHRyaWJ1dGUgYnV0IGxhYmVsIG5vdCBzaG93blxuICAgICAgLy8gKHVzZWQgYXMgYSBwdXJlIENTUyBzdGFuZC1pbiBmb3IgbWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0KS5cbiAgICAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyXG4gICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgICBAaW5jbHVkZSBfbWF0LWZvcm0tZmllbGQtb3V0bGluZS1sYWJlbC1mbG9hdGluZyhcbiAgICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nICsgJG91dGxpbmUtYXBwZWFyYW5jZS1sYWJlbC1vZmZzZXQsXG4gICAgICAgICAgICAgICAgJGluZml4LW1hcmdpbi10b3ApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuXG4vLyBUaGVtZSBzdHlsZXMgdGhhdCBvbmx5IGFwcGx5IHRvIHRoZSBzdGFuZGFyZCBhcHBlYXJhbmNlIG9mIHRoZSBmb3JtLWZpZWxkLlxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtc3RhbmRhcmQtdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG5cbiAgJHVuZGVybGluZS1jb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCBkaXZpZGVyLCBpZigkaXMtZGFyay10aGVtZSwgMC43LCAwLjQyKSk7XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQge1xuICAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1jb2xvcjtcbiAgICB9XG5cbiAgICAmLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUge1xuICAgICAgQGluY2x1ZGUgbWF0LWNvbnRyb2wtZGlzYWJsZWQtdW5kZXJsaW5lKCR1bmRlcmxpbmUtY29sb3IpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtc3RhbmRhcmQtdHlwb2dyYXBoeSgkY29uZmlnKSB7fVxuXG5cbi8vIFRoZW1lIHN0eWxlcyB0aGF0IGFwcGx5IHRvIGFsbCBhcHBlYXJhbmNlcyBvZiB0aGUgZm9ybS1maWVsZC5cbkBtaXhpbiBtYXQtZm9ybS1maWVsZC10aGVtZSgkdGhlbWUpIHtcbiAgJHByaW1hcnk6IG1hcC1nZXQoJHRoZW1lLCBwcmltYXJ5KTtcbiAgJGFjY2VudDogbWFwLWdldCgkdGhlbWUsIGFjY2VudCk7XG4gICR3YXJuOiBtYXAtZ2V0KCR0aGVtZSwgd2Fybik7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG4gICRpcy1kYXJrLXRoZW1lOiBtYXAtZ2V0KCR0aGVtZSwgaXMtZGFyayk7XG5cbiAgLy8gTGFiZWwgY29sb3JzLiBSZXF1aXJlZCBpcyB1c2VkIGZvciB0aGUgYCpgIHN0YXIgc2hvd24gaW4gdGhlIGxhYmVsLlxuICAkbGFiZWwtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgc2Vjb25kYXJ5LXRleHQsIGlmKCRpcy1kYXJrLXRoZW1lLCAwLjcsIDAuNikpO1xuICAkZm9jdXNlZC1sYWJlbC1jb2xvcjogbWF0LWNvbG9yKCRwcmltYXJ5LCB0ZXh0KTtcbiAgJHJlcXVpcmVkLWxhYmVsLWNvbG9yOiBtYXQtY29sb3IoJGFjY2VudCwgdGV4dCk7XG5cbiAgLy8gVW5kZXJsaW5lIGNvbG9ycy5cbiAgJHVuZGVybGluZS1jb2xvci1iYXNlOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIsIGlmKCRpcy1kYXJrLXRoZW1lLCAxLCAwLjg3KSk7XG4gICR1bmRlcmxpbmUtY29sb3ItYWNjZW50OiBtYXQtY29sb3IoJGFjY2VudCwgdGV4dCk7XG4gICR1bmRlcmxpbmUtY29sb3Itd2FybjogbWF0LWNvbG9yKCR3YXJuLCB0ZXh0KTtcbiAgJHVuZGVybGluZS1mb2N1c2VkLWNvbG9yOiBtYXQtY29sb3IoJHByaW1hcnksIHRleHQpO1xuXG4gIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgY29sb3I6ICRsYWJlbC1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtaGludCB7XG4gICAgY29sb3I6ICRsYWJlbC1jb2xvcjtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgIGNvbG9yOiAkZm9jdXNlZC1sYWJlbC1jb2xvcjtcblxuICAgICYubWF0LWFjY2VudCB7XG4gICAgICBjb2xvcjogJHVuZGVybGluZS1jb2xvci1hY2NlbnQ7XG4gICAgfVxuXG4gICAgJi5tYXQtd2FybiB7XG4gICAgICBjb2xvcjogJHVuZGVybGluZS1jb2xvci13YXJuO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2VyIHtcbiAgICBjb2xvcjogJHJlcXVpcmVkLWxhYmVsLWNvbG9yO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1jb2xvci1iYXNlO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIHtcbiAgICAubWF0LWZvcm0tZmllbGQtcmlwcGxlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1bmRlcmxpbmUtZm9jdXNlZC1jb2xvcjtcblxuICAgICAgJi5tYXQtYWNjZW50IHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1jb2xvci1hY2NlbnQ7XG4gICAgICB9XG5cbiAgICAgICYubWF0LXdhcm4ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLXdhcm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQ6bm90KC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkKSB7XG4gICAgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlciB7XG4gICAgICBjb2xvcjogJHVuZGVybGluZS1mb2N1c2VkLWNvbG9yO1xuICAgIH1cblxuICAgICYubWF0LWFjY2VudCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVyIHtcbiAgICAgIGNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLWFjY2VudDtcbiAgICB9XG5cbiAgICAmLm1hdC13YXJuIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXIge1xuICAgICAgY29sb3I6ICR1bmRlcmxpbmUtY29sb3Itd2FybjtcbiAgICB9XG4gIH1cblxuICAvLyBTdHlsaW5nIGZvciB0aGUgZXJyb3Igc3RhdGUgb2YgdGhlIGZvcm0gZmllbGQuIE5vdGUgdGhhdCB3aGlsZSB0aGUgc2FtZSBjYW4gYmVcbiAgLy8gYWNoaWV2ZWQgd2l0aCB0aGUgbmctKiBjbGFzc2VzLCB3ZSB1c2UgdGhpcyBhcHByb2FjaCBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCB0aGUgc2FtZVxuICAvLyBsb2dpYyBpcyB1c2VkIHRvIHN0eWxlIHRoZSBlcnJvciBzdGF0ZSBhbmQgdG8gc2hvdyB0aGUgZXJyb3IgbWVzc2FnZXMuXG4gIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIHtcbiAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgY29sb3I6ICR1bmRlcmxpbmUtY29sb3Itd2FybjtcblxuICAgICAgJi5tYXQtYWNjZW50LFxuICAgICAgLm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlciB7XG4gICAgICAgIGNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLXdhcm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSxcbiAgICAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVuZGVybGluZS1jb2xvci13YXJuO1xuICAgIH1cbiAgfVxuXG4gIC5tYXQtZXJyb3Ige1xuICAgIGNvbG9yOiAkdW5kZXJsaW5lLWNvbG9yLXdhcm47XG4gIH1cblxuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1sZWdhY3ktdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtc3RhbmRhcmQtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWZvcm0tZmllbGQtZmlsbC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoZW1lKCR0aGVtZSk7XG59XG5cbi8vIFVzZWQgdG8gbWFrZSBpbnN0YW5jZXMgb2YgdGhlIF9tYXQtZm9ybS1maWVsZC1sYWJlbC1mbG9hdGluZyBtaXhpbiBuZWdsaWdpYmx5IGRpZmZlcmVudCxcbi8vIGFuZCBwcmV2ZW50IEdvb2dsZSdzIENTUyBPcHRpbWl6ZXIgZnJvbSBjb2xsYXBzaW5nIHRoZSBkZWNsYXJhdGlvbnMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugc29tZVxuLy8gb2YgdGhlIHNlbGVjdG9ycyBjb250YWluIHBzZXVkby1jbGFzc2VzIG5vdCByZWNvZ25pemVkIGluIGFsbCBicm93c2Vycy4gSWYgYSBicm93c2VyIGVuY291bnRlcnNcbi8vIGFuIHVua25vd24gcHNldWRvLWNsYXNzIGl0IHdpbGwgZGlzY2FyZCB0aGUgZW50aXJlIHJ1bGUgc2V0LlxuJG1hdC1mb3JtLWZpZWxkLWRlZHVwZTogMDtcblxuLy8gQXBwbGllcyBhIGZsb2F0aW5nIGxhYmVsIGFib3ZlIHRoZSBmb3JtIGZpZWxkIGNvbnRyb2wgaXRzZWxmLlxuQG1peGluIF9tYXQtZm9ybS1maWVsZC1sYWJlbC1mbG9hdGluZygkZm9udC1zY2FsZSwgJGluZml4LXBhZGRpbmcsICRpbmZpeC1tYXJnaW4tdG9wKSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtJGluZml4LW1hcmdpbi10b3AgLSAkaW5maXgtcGFkZGluZyArICRtYXQtZm9ybS1maWVsZC1kZWR1cGUpXG4gICAgICAgICAgICAgc2NhbGUoJGZvbnQtc2NhbGUpO1xuICB3aWR0aDogMTAwJSAvICRmb250LXNjYWxlICsgJG1hdC1mb3JtLWZpZWxkLWRlZHVwZTtcblxuICAkbWF0LWZvcm0tZmllbGQtZGVkdXBlOiAkbWF0LWZvcm0tZmllbGQtZGVkdXBlICsgMC4wMDAwMSAhZ2xvYmFsO1xufVxuXG5AbWl4aW4gbWF0LWZvcm0tZmllbGQtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC8vIFRoZSB1bml0LWxlc3MgbGluZS1oZWlnaHQgZnJvbSB0aGUgZm9udCBjb25maWcuXG4gICRsaW5lLWhlaWdodDogbWF0LWxpbmUtaGVpZ2h0KCRjb25maWcsIGlucHV0KTtcblxuICAvLyBUaGUgYW1vdW50IHRvIHNjYWxlIHRoZSBmb250IGZvciB0aGUgZmxvYXRpbmcgbGFiZWwgYW5kIHN1YnNjcmlwdC5cbiAgJHN1YnNjcmlwdC1mb250LXNjYWxlOiAwLjc1O1xuICAvLyBUaGUgYW1vdW50IHRvIHNjYWxlIHRoZSBmb250IGZvciB0aGUgcHJlZml4IGFuZCBzdWZmaXggaWNvbnMuXG4gICRwcmVmaXgtc3VmZml4LWljb24tZm9udC1zY2FsZTogMS41O1xuXG4gIC8vIFRoZSBwYWRkaW5nIG9uIHRoZSBpbmZpeC4gTW9ja3Mgc2hvdyBoYWxmIG9mIHRoZSB0ZXh0IHNpemUuXG4gICRpbmZpeC1wYWRkaW5nOiAwLjVlbTtcbiAgLy8gVGhlIG1hcmdpbiBhcHBsaWVkIHRvIHRoZSBmb3JtLWZpZWxkLWluZml4IHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBmbG9hdGluZyBsYWJlbC5cbiAgJGluZml4LW1hcmdpbi10b3A6IDFlbSAqICRsaW5lLWhlaWdodCAqICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcbiAgLy8gRm9udCBzaXplIHRvIHVzZSBmb3IgdGhlIGxhYmVsIGFuZCBzdWJzY3JpcHQgdGV4dC5cbiAgJHN1YnNjcmlwdC1mb250LXNpemU6ICRzdWJzY3JpcHQtZm9udC1zY2FsZSAqIDEwMCU7XG4gIC8vIEZvbnQgc2l6ZSB0byB1c2UgZm9yIHRoZSBmb3IgdGhlIHByZWZpeCBhbmQgc3VmZml4IGljb25zLlxuICAkcHJlZml4LXN1ZmZpeC1pY29uLWZvbnQtc2l6ZTogJHByZWZpeC1zdWZmaXgtaWNvbi1mb250LXNjYWxlICogMTAwJTtcbiAgLy8gVGhlIHNwYWNlIGJldHdlZW4gdGhlIGJvdHRvbSBvZiB0aGUgLm1hdC1mb3JtLWZpZWxkLWZsZXggYXJlYSBhbmQgdGhlIHN1YnNjcmlwdCB3cmFwcGVyLlxuICAvLyBNb2NrcyBzaG93IGhhbGYgb2YgdGhlIHRleHQgc2l6ZSwgYnV0IHRoaXMgbWFyZ2luIGlzIGFwcGxpZWQgdG8gYW4gZWxlbWVudCB3aXRoIHRoZSBzdWJzY3JpcHRcbiAgLy8gdGV4dCBmb250IHNpemUsIHNvIHdlIG5lZWQgdG8gZGl2aWRlIGJ5IHRoZSBzY2FsZSBmYWN0b3IgdG8gbWFrZSBpdCBoYWxmIG9mIHRoZSBvcmlnaW5hbCB0ZXh0XG4gIC8vIHNpemUuXG4gICRzdWJzY3JpcHQtbWFyZ2luLXRvcDogMC41ZW0gLyAkc3Vic2NyaXB0LWZvbnQtc2NhbGU7XG4gIC8vIFRoZSBwYWRkaW5nIGFwcGxpZWQgdG8gdGhlIGZvcm0tZmllbGQtd3JhcHBlciB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgc3Vic2NyaXB0LCBzaW5jZSBpdCdzXG4gIC8vIGFic29sdXRlbHkgcG9zaXRpb25lZC4gVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBzdWJzY3JpcHQncyBtYXJnaW4gYW5kIGxpbmUtaGVpZ2h0LCBidXQgd2VcbiAgLy8gbmVlZCB0byBtdWx0aXBseSBieSB0aGUgc3Vic2NyaXB0IGZvbnQgc2NhbGUgZmFjdG9yIHNpbmNlIHRoZSB3cmFwcGVyIGhhcyBhIGxhcmdlciBmb250IHNpemUuXG4gICR3cmFwcGVyLXBhZGRpbmctYm90dG9tOiAoJHN1YnNjcmlwdC1tYXJnaW4tdG9wICsgJGxpbmUtaGVpZ2h0KSAqICRzdWJzY3JpcHQtZm9udC1zY2FsZTtcblxuICAubWF0LWZvcm0tZmllbGQge1xuICAgIEBpbmNsdWRlIG1hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcygkY29uZmlnLCBpbnB1dCk7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtd3JhcHBlciB7XG4gICAgcGFkZGluZy1ib3R0b206ICR3cmFwcGVyLXBhZGRpbmctYm90dG9tO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCxcbiAgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCB7XG4gICAgLy8gQWxsb3cgaWNvbnMgaW4gYSBwcmVmaXggb3Igc3VmZml4IHRvIGFkYXB0IHRvIHRoZSBjb3JyZWN0IHNpemUuXG4gICAgLm1hdC1pY29uIHtcbiAgICAgIGZvbnQtc2l6ZTogJHByZWZpeC1zdWZmaXgtaWNvbi1mb250LXNpemU7XG4gICAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0O1xuICAgIH1cblxuICAgIC8vIEFsbG93IGljb24gYnV0dG9ucyBpbiBhIHByZWZpeCBvciBzdWZmaXggdG8gYWRhcHQgdG8gdGhlIGNvcnJlY3Qgc2l6ZS5cbiAgICAubWF0LWljb24tYnV0dG9uIHtcbiAgICAgIGhlaWdodDogJHByZWZpeC1zdWZmaXgtaWNvbi1mb250LXNjYWxlICogMWVtO1xuICAgICAgd2lkdGg6ICRwcmVmaXgtc3VmZml4LWljb24tZm9udC1zY2FsZSAqIDFlbTtcblxuICAgICAgLm1hdC1pY29uIHtcbiAgICAgICAgaGVpZ2h0OiAkbGluZS1oZWlnaHQgKiAxZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICBwYWRkaW5nOiAkaW5maXgtcGFkZGluZyAwO1xuICAgIC8vIFRocm93cyBvZmYgdGhlIGJhc2VsaW5lIGlmIHdlIGRvIGl0IGFzIGEgcmVhbCBtYXJnaW4sIHNvIHdlIGRvIGl0IGFzIGEgYm9yZGVyIGluc3RlYWQuXG4gICAgYm9yZGVyLXRvcDogJGluZml4LW1hcmdpbi10b3Agc29saWQgdHJhbnNwYXJlbnQ7XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IHtcbiAgICAmLm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsXG4gICAgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgfVxuXG4gICAgLy8gU2VydmVyLXNpZGUgcmVuZGVyZWQgbWF0SW5wdXQgd2l0aCBhIGxhYmVsIGF0dHJpYnV0ZSBidXQgbGFiZWwgbm90IHNob3duXG4gICAgLy8gKHVzZWQgYXMgYSBwdXJlIENTUyBzdGFuZC1pbiBmb3IgbWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0KS5cbiAgICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlclxuICAgICAgICAubWF0LWZvcm0tZmllbGQtbGFiZWwge1xuICAgICAgQGluY2x1ZGUgX21hdC1mb3JtLWZpZWxkLWxhYmVsLWZsb2F0aW5nKFxuICAgICAgICAgICAgICAkc3Vic2NyaXB0LWZvbnQtc2NhbGUsICRpbmZpeC1wYWRkaW5nLCAkaW5maXgtbWFyZ2luLXRvcCk7XG4gICAgfVxuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIge1xuICAgIHRvcDogLSRpbmZpeC1tYXJnaW4tdG9wO1xuICAgIHBhZGRpbmctdG9wOiAkaW5maXgtbWFyZ2luLXRvcDtcbiAgfVxuXG4gIC5tYXQtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgdG9wOiAkaW5maXgtbWFyZ2luLXRvcCArICRpbmZpeC1wYWRkaW5nO1xuICB9XG5cbiAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSB7XG4gICAgLy8gV2Ugd2FudCB0aGUgdW5kZXJsaW5lIHRvIHN0YXJ0IGF0IHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgYm94LCBub3QgdGhlIHBhZGRpbmcgYm94LFxuICAgIC8vIHNvIHdlIG1vdmUgaXQgdXAgYnkgdGhlIHBhZGRpbmcgYW1vdW50LlxuICAgIGJvdHRvbTogJHdyYXBwZXItcGFkZGluZy1ib3R0b207XG4gIH1cblxuICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXIge1xuICAgIGZvbnQtc2l6ZTogJHN1YnNjcmlwdC1mb250LXNpemU7XG4gICAgbWFyZ2luLXRvcDogJHN1YnNjcmlwdC1tYXJnaW4tdG9wO1xuXG4gICAgLy8gV2Ugd2FudCB0aGUgc3Vic2NyaXB0IHRvIHN0YXJ0IGF0IHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgYm94LCBub3QgdGhlIHBhZGRpbmcgYm94LFxuICAgIC8vIHNvIHdlIG1vdmUgaXQgdXAgYnkgdGhlIHBhZGRpbmcgYW1vdW50IChhZGp1c3RlZCBmb3IgdGhlIHNtYWxsZXIgZm9udCBzaXplKTtcbiAgICB0b3A6IGNhbGMoMTAwJSAtICN7JHdyYXBwZXItcGFkZGluZy1ib3R0b20gLyAkc3Vic2NyaXB0LWZvbnQtc2NhbGV9KTtcbiAgfVxuXG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLWxlZ2FjeS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1zdGFuZGFyZC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC1maWxsLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdHlwb2dyYXBoeSgkY29uZmlnKTtcbn1cblxuXG5cblxuXG5AbWl4aW4gbWF0LXRyZWUtdGhlbWUoJHRoZW1lKSB7XG4gICRiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCk7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC10cmVlIHtcbiAgICBiYWNrZ3JvdW5kOiBtYXQtY29sb3IoJGJhY2tncm91bmQsICdjYXJkJyk7XG4gIH1cblxuICAubWF0LXRyZWUtbm9kZSxcbiAgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlIHtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxufVxuXG5AbWl4aW4gbWF0LXRyZWUtdHlwb2dyYXBoeSgkY29uZmlnKSB7XG4gIC5tYXQtdHJlZSB7XG4gICAgZm9udC1mYW1pbHk6IG1hdC1mb250LWZhbWlseSgkY29uZmlnKTtcbiAgfVxuXG4gIC5tYXQtdHJlZS1ub2RlLFxuICAubWF0LW5lc3RlZC10cmVlLW5vZGUge1xuICAgIGZvbnQtd2VpZ2h0OiBtYXQtZm9udC13ZWlnaHQoJGNvbmZpZywgYm9keS0xKTtcbiAgICBmb250LXNpemU6IG1hdC1mb250LXNpemUoJGNvbmZpZywgYm9keS0xKTtcbiAgfVxufVxuXG5cblxuLy8gSW5jbHVkZXMgYWxsIG9mIHRoZSB0eXBvZ3JhcGhpYyBzdHlsZXMuXG5AbWl4aW4gYW5ndWxhci1tYXRlcmlhbC10eXBvZ3JhcGh5KCRjb25maWc6IG51bGwpIHtcbiAgQGlmICRjb25maWcgPT0gbnVsbCB7XG4gICAgJGNvbmZpZzogbWF0LXR5cG9ncmFwaHktY29uZmlnKCk7XG4gIH1cblxuICBAaW5jbHVkZSBtYXQtYmFkZ2UtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWJhc2UtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWF1dG9jb21wbGV0ZS10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtYm90dG9tLXNoZWV0LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1idXR0b24tdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWJ1dHRvbi10b2dnbGUtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWNhcmQtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWNoZWNrYm94LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1jaGlwcy10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtdGFibGUtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWRhdGVwaWNrZXItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWRpYWxvZy10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtZXhwYW5zaW9uLXBhbmVsLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1mb3JtLWZpZWxkLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1ncmlkLWxpc3QtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWljb24tdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWlucHV0LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1tZW51LXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1wYWdpbmF0b3ItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXByb2dyZXNzLWJhci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtcmFkaW8tdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXNlbGVjdC10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtc2lkZW5hdi10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtc2xpZGUtdG9nZ2xlLXR5cG9ncmFwaHkoJGNvbmZpZyk7XG4gIEBpbmNsdWRlIG1hdC1zbGlkZXItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXN0ZXBwZXItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXNvcnQtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXRhYnMtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXRvb2xiYXItdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXRvb2x0aXAtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LWxpc3QtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LW9wdGlvbi10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtb3B0Z3JvdXAtdHlwb2dyYXBoeSgkY29uZmlnKTtcbiAgQGluY2x1ZGUgbWF0LXNuYWNrLWJhci10eXBvZ3JhcGh5KCRjb25maWcpO1xuICBAaW5jbHVkZSBtYXQtdHJlZS10eXBvZ3JhcGh5KCRjb25maWcpO1xufVxuXG5cbi8vIE1peGluIHRoYXQgcmVuZGVycyBhbGwgb2YgdGhlIGNvcmUgc3R5bGVzIHRoYXQgYXJlIG5vdCB0aGVtZS1kZXBlbmRlbnQuXG5AbWl4aW4gbWF0LWNvcmUoJHR5cG9ncmFwaHktY29uZmlnOiBudWxsKSB7XG4gIEBpbmNsdWRlIGFuZ3VsYXItbWF0ZXJpYWwtdHlwb2dyYXBoeSgkdHlwb2dyYXBoeS1jb25maWcpO1xuICBAaW5jbHVkZSBtYXQtcmlwcGxlKCk7XG4gIEBpbmNsdWRlIGNkay1hMTF5KCk7XG4gIEBpbmNsdWRlIGNkay1vdmVybGF5KCk7XG4gIEBpbmNsdWRlIGNkay10ZXh0LWZpZWxkKCk7XG59XG5cbi8vIE1peGluIHRoYXQgcmVuZGVycyBhbGwgb2YgdGhlIGNvcmUgc3R5bGVzIHRoYXQgZGVwZW5kIG9uIHRoZSB0aGVtZS5cbkBtaXhpbiBtYXQtY29yZS10aGVtZSgkdGhlbWUpIHtcbiAgQGluY2x1ZGUgbWF0LXJpcHBsZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtb3B0aW9uLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1vcHRncm91cC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtcHNldWRvLWNoZWNrYm94LXRoZW1lKCR0aGVtZSk7XG5cbiAgLy8gUHJvdmlkZXMgZXh0ZXJuYWwgQ1NTIGNsYXNzZXMgZm9yIGVhY2ggZWxldmF0aW9uIHZhbHVlLiBFYWNoIENTUyBjbGFzcyBpcyBmb3JtYXR0ZWQgYXNcbiAgLy8gYG1hdC1lbGV2YXRpb24teiR6VmFsdWVgIHdoZXJlIGAkelZhbHVlYCBjb3JyZXNwb25kcyB0byB0aGUgei1zcGFjZSB0byB3aGljaCB0aGUgZWxlbWVudCBpc1xuICAvLyBlbGV2YXRlZC5cbiAgQGZvciAkelZhbHVlIGZyb20gMCB0aHJvdWdoIDI0IHtcbiAgICAuI3skX21hdC1lbGV2YXRpb24tcHJlZml4fSN7JHpWYWx1ZX0ge1xuICAgICAgQGluY2x1ZGUgX21hdC10aGVtZS1lbGV2YXRpb24oJHpWYWx1ZSwgJHRoZW1lKTtcbiAgICB9XG4gIH1cblxuICAvLyBXcmFwcGVyIGVsZW1lbnQgdGhhdCBwcm92aWRlcyB0aGUgdGhlbWUgYmFja2dyb3VuZCB3aGVuIHRoZSB1c2VyJ3MgY29udGVudCBpc24ndFxuICAvLyBpbnNpZGUgb2YgYSBgbWF0LXNpZGVuYXYtY29udGFpbmVyYC4gTm90ZSB0aGF0IHdlIG5lZWQgdG8gZXhjbHVkZSB0aGUgYW1wZXJzYW5kXG4gIC8vIHNlbGVjdG9yIGluIGNhc2UgdGhlIG1peGluIGlzIGluY2x1ZGVkIGF0IHRoZSB0b3AgbGV2ZWwuXG4gIC5tYXQtYXBwLWJhY2tncm91bmQje2lmKCYsICcsICYubWF0LWFwcC1iYWNrZ3JvdW5kJywgJycpfSB7XG4gICAgJGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgICAkZm9yZWdyb3VuZDogbWFwLWdldCgkdGhlbWUsIGZvcmVncm91bmQpO1xuXG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWF0LWNvbG9yKCRiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kKTtcbiAgICBjb2xvcjogbWF0LWNvbG9yKCRmb3JlZ3JvdW5kLCB0ZXh0KTtcbiAgfVxuXG4gIC8vIE1hcmtlciB0aGF0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHVzZXIgaGFzIGFkZGVkIGEgdGhlbWUgdG8gdGhlaXIgcGFnZS5cbiAgQGF0LXJvb3Qge1xuICAgIC5tYXQtdGhlbWUtbG9hZGVkLW1hcmtlciB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5AbWl4aW4gbWF0LWRpdmlkZXItdGhlbWUoJHRoZW1lKSB7XG4gICRmb3JlZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgZm9yZWdyb3VuZCk7XG5cbiAgLm1hdC1kaXZpZGVyIHtcbiAgICBib3JkZXItdG9wLWNvbG9yOiBtYXQtY29sb3IoJGZvcmVncm91bmQsIGRpdmlkZXIpO1xuICB9XG5cbiAgLm1hdC1kaXZpZGVyLXZlcnRpY2FsIHtcbiAgICBib3JkZXItcmlnaHQtY29sb3I6IG1hdC1jb2xvcigkZm9yZWdyb3VuZCwgZGl2aWRlcik7XG4gIH1cbn1cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLy8gQ3JlYXRlIGEgdGhlbWUuXG5AbWl4aW4gYW5ndWxhci1tYXRlcmlhbC10aGVtZSgkdGhlbWUpIHtcbiAgQGluY2x1ZGUgbWF0LWNvcmUtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWF1dG9jb21wbGV0ZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtYmFkZ2UtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWJvdHRvbS1zaGVldC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtYnV0dG9uLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1idXR0b24tdG9nZ2xlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1jYXJkLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1jaGVja2JveC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtY2hpcHMtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXRhYmxlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1kYXRlcGlja2VyLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1kaWFsb2ctdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWRpdmlkZXItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LWV4cGFuc2lvbi1wYW5lbC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZm9ybS1maWVsZC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtZ3JpZC1saXN0LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1pY29uLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1pbnB1dC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtbGlzdC10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtbWVudS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtcGFnaW5hdG9yLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1wcm9ncmVzcy1iYXItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXByb2dyZXNzLXNwaW5uZXItdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXJhZGlvLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1zZWxlY3QtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXNpZGVuYXYtdGhlbWUoJHRoZW1lKTtcbiAgQGluY2x1ZGUgbWF0LXNsaWRlLXRvZ2dsZS10aGVtZSgkdGhlbWUpO1xuICBAaW5jbHVkZSBtYXQtc2xpZGVyLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1zdGVwcGVyLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1zb3J0LXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC10YWJzLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC10b29sYmFyLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC10b29sdGlwLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC10cmVlLXRoZW1lKCR0aGVtZSk7XG4gIEBpbmNsdWRlIG1hdC1zbmFjay1iYXItdGhlbWUoJHRoZW1lKTtcbn1cbiIsIkBpbXBvcnQgXCJtaXhpbnNcIjtcbkBpbXBvcnQgXCJ2YXJzXCI7XG5AaW1wb3J0IFwifkBhbmd1bGFyL21hdGVyaWFsL3RoZW1pbmdcIjtcblxuLm1jayB7XG4gICAgJi1pbmhlcml0IHtcbiAgICAgICAgJi1mb250IHtcbiAgICAgICAgICAgIC8vIHBhdGNoZXMgZ2xvYmFsIGZvbnQgc3R5bGluZyBkb25lIGJ5IGxlZ2FjeSB1aVxuICAgICAgICAgICAgZm9udDogaW5oZXJpdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtY29udGVudCB7XG4gICAgICAgICYtZXhwYW5kIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuXG4gICAgICAgICAgICAmLXdpZHRoIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi1oZWlnaHQge1xuICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtd2l0aC1mb290ZXItaGVpZ2h0IHtcbiAgICAgICAgICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDU4cHgpO1xuICAgICAgICB9XG5cbiAgICAgICAgJi1mdWxsLWhlaWdodCB7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMHZoO1xuICAgICAgICB9XG5cbiAgICAgICAgJi1wYWdlIHtcbiAgICAgICAgICAgIEBleHRlbmQgLm1jay1jb250ZW50LWV4cGFuZDtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICRwYWdlLWJhY2tncm91bmQtY29sb3I7XG5cbiAgICAgICAgICAgICYtY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICBAZXh0ZW5kIC5tY2stY29udGVudC1mdWxsLWhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtYm9keSB7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAyNHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1ncm91cCB7XG4gICAgICAgICAgICBAaW5jbHVkZSBwYWdlLXBhZGRpbmc7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcblxuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogNzU5cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXNoYWRvdyB7XG4gICAgICAgIEBpbmNsdWRlIG1hdC1lbGV2YXRpb24oMSk7XG4gICAgfVxuXG4gICAgJi1mbGV4LTEge1xuICAgICAgICBmbGV4OiAxO1xuICAgIH1cblxuICAgICYtcm93IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcblxuICAgICAgICAmLm1jay1jZW50ZXIge1xuICAgICAgICAgICAgJi1qdXN0aWZ5IHtcbiAgICAgICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi1hbGlnbiB7XG4gICAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGV4dGVuZCAubWNrLWNlbnRlci1qdXN0aWZ5O1xuICAgICAgICAgICAgQGV4dGVuZCAubWNrLWNlbnRlci1hbGlnbjtcbiAgICAgICAgfVxuXG4gICAgICAgICYubWNrLXN0cmV0Y2gge1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gICAgICAgIH1cblxuICAgICAgICAmLWZsb3cge1xuICAgICAgICAgICAgQGV4dGVuZCAubWNrLXJvdztcbiAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgfVxuXG4gICAgICAgICYubWNrLXNjcm9sbCB7XG4gICAgICAgICAgICBvdmVyZmxvdy14OiBzY3JvbGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWNvbHVtbiB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgICAgICAgJi5tY2stY2VudGVyIHtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgICYubWNrLXNwYWNlLWJldHdlZW4ge1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5tY2stc3RyZXRjaCB7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICAgICAgfVxuXG4gICAgICAgICYubWNrLXNjcm9sbCB7XG4gICAgICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgICAgICAgICBvdmVyZmxvdy15OiBvdmVybGF5O1xuICAgICAgICB9XG5cbiAgICAgICAgJi5tY2stZmxleC1lbmQge1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtb3ZlcmZsb3cge1xuICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICB9XG5cbiAgICAmLWJvcmRlcmVkLCAmLWlucHV0IHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzQ2NDY0NjtcbiAgICAgICAgfVxuXG4gICAgICAgICY6Zm9jdXMge1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgfVxuXG4gICAgICAgICZbZGlzYWJsZWQ9XCJ0cnVlXCJdIHtcbiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjZjBmMGYwO1xuICAgICAgICAgICAgY29sb3I6ICNjY2M7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWRhdGUtZGlzcGxheSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogNDNweDtcbiAgICAgICAgcGFkZGluZzogJHNwYWNpbmctc21hbGwgJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgdHJhbnNpdGlvbjogYm9yZGVyIDIwMG1zLCBib3gtc2hhZG93IDIwMG1zO1xuICAgIH1cblxuICAgICYtZm9ybS1pbnB1dCB7XG5cbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICAgICAgICAgICAgcGFkZGluZy1ib3R0b206ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgIH1cblxuICAgICAgICBtYXQtZm9ybS1maWVsZCB7XG4gICAgICAgICAgICBtaW4td2lkdGg6IGF1dG8gIWltcG9ydGFudDtcblxuICAgICAgICAgICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLXRvcDogMC43cmVtICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206ICRzcGFjaW5nLXh4c21hbGwgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICAgICAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDIuN3JlbTtcbiAgICAgICAgICAgICAgICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI3KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5tY2stY2VudGVyLXN1ZmZpeCB7XG4gICAgICAgICAgICAgICAgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgICAgICAgICAgICAgICAgQGV4dGVuZCAubWNrLXJvdztcbiAgICAgICAgICAgICAgICAgICAgQGV4dGVuZCAubWNrLWNlbnRlcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYubWNrLXNlbGVjdC1kcm9wZG93bi1idXR0b24ge1xuICAgICAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDJweDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAubWF0LWZvcm0tZmllbGQtZmxleCB7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMnJlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDJyZW07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBtYXQtZm9ybS1maWVsZC5tYXQtcyB7XG4gICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1zZWxlY3Qge1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogMC4ycmVtO1xuXG4gICAgICAgICAgICAubWF0LXNlbGVjdC1hcnJvdyB7XG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmIC5tYXQtc2VsZWN0LXZhbHVlID4gLm1hdC1zZWxlY3QtdmFsdWUtdGV4dCA+IHNwYW4ge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgICAgICAgICAvLyBjb2xvcjogIzMzMzMzMyAhaW1wb3J0YW50OyAvL1ItLS0gYmxvY2tzIGRpc2FibGVkIHN0YXRlIGNvbG9yXG4gICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Lm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsXG4gICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLFxuICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyO1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMXB4O1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAuYXZhaWxhYmxlIHtcbiAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lIHtcbiAgICAgICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCxcbiAgICAgICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLFxuICAgICAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICMzYWE1Mzc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLmJvb2tlZCB7XG4gICAgICAgICAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gICAgICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Lm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsXG4gICAgICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcCxcbiAgICAgICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kIHtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjZTEyZTQxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIHtcbiAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LFxuICAgICAgICAgICAgJiA+IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcCxcbiAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogJHByaW1hcnk7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgID4gbWF0LWZvcm0tZmllbGQubWNrLWVycm9yIHtcbiAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICAvLyBsZXNzIGp1bXBpbmcgZm9yIGVycm9yIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lIHtcbiAgICAgICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCxcbiAgICAgICAgICAgICAgICAmID4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLFxuICAgICAgICAgICAgICAgICYgPiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQge1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICRlcnJvci1jb2xvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBtY2stY2xvc2UtaWNvbi5tYXQtY2hpcC1yZW1vdmUubWF0LWNoaXAtcmVtb3ZlIHtcbiAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1sYWJlbCB7XG4gICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbWF0LXJhZGlvLWJ1dHRvbiB7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLm1hdC1yYWRpby1sYWJlbC1jb250ZW50IHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgLm1hdC1yYWRpbyB7XG4gICAgICAgICAgICAmLW91dGVyLWNpcmNsZSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkcHJpbWFyeSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMXB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYtaW5uZXItY2lyY2xlIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbWF0LXJhZGlvLWdyb3VwIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuXG4gICAgICAgICAgICAmID4gbWF0LXJhZGlvLWJ1dHRvbjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWNvbnRhaW5lciB7XG4gICAgICAgICAgICA+IC5tY2stZm9ybS1pbnB1dCwgPiBtY2stc2VsZWN0IHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy14eHNtYWxsO1xuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy1tZWRpdW0tbGFyZ2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWNrLXJhZGlvLXNlbGVjdCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogJHNwYWNpbmctc21hbGw7XG5cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nLW1lZGl1bTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBtYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcCB7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgICAgICAgICBtaW4taGVpZ2h0OiAxLjVyZW07XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY2hpcC1jb2xvcjtcbiAgICAgICAgICAgIHBhZGRpbmctdG9wOiAkc3BhY2luZy1zbWFsbGVzdDtcbiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAkc3BhY2luZy1zbWFsbGVzdDtcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgICAgIEBpbmNsdWRlIGNoaXAtbGFiZWw7XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1jaGVja2JveCB7XG4gICAgICAgICAgICAmLm1hdC1jaGVja2JveC5tYXQtY2hlY2tib3gge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGNoZWNrYm94LWxhYmVsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkaXYubWF0LWNoZWNrYm94LWJhY2tncm91bmQubWF0LWNoZWNrYm94LWJhY2tncm91bmQge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5O1xuXG4gICAgICAgICAgICAgICAgJi5tY2stY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWRpc2FibGVkIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLm1jay1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtZGlzYWJsZWQge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGNoZWNrYm94LWxhYmVsO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkYm9yZGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1ib3JkZXJsZXNzIHtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuXG4gICAgICAgICY6aG92ZXIsICY6Zm9jdXMsICY6ZGlzYWJsZWQge1xuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1zZWxlY3QtcGFuZWwge1xuICAgICAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHVuc2V0ICFpbXBvcnRhbnQ7XG4gICAgICAgIG1hcmdpbi10b3A6IDM1cHggIWltcG9ydGFudDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcblxuICAgICAgICBtYXQtb3B0aW9uIHtcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG5cbiAgICAgICAgICAgICYubWF0LW9wdGlvbi10ZXh0IHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLm1jay1tYXJnaW4tdG9wIHtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6ICRzcGFjaW5nLW1lZGl1bSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1jaGVja2JveC1wYW5lbCB7XG4gICAgICAgICYubWF0LWF1dG9jb21wbGV0ZS1wYW5lbC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIHtcbiAgICAgICAgICAgIHRvcDogLTEwcHg7XG4gICAgICAgICAgICBtYXgtaGVpZ2h0OiAyNzhweDtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hdC1vcHRpb24ubWNrLXRydW5jYXRlZCB7XG4gICAgICAgICAgICAmIC5tYXQtY2hlY2tib3gtbGFiZWwubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBtYXgtbGluZXMoMik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBtYXQtb3B0aW9uIHtcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMjRweDtcbiAgICAgICAgICAgIGhlaWdodDogdW5zZXQ7XG4gICAgICAgICAgICBtaW4taGVpZ2h0OiAzNnB4O1xuXG4gICAgICAgICAgICAmIC5tYXQtY2hlY2tib3gtbGFiZWwubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgICAgICAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmIC5tYXQtY2hlY2tib3gtbGFiZWwubWF0LWNoZWNrYm94LWxhYmVsIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBjaGVja2JveC1sYWJlbDtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLm1jay1jaGVja2JveC1ncm91cC1oZWFkZXIge1xuICAgICAgICAgICAgICAgICYgLm1hdC1jaGVja2JveC1sYWJlbC5tYXQtY2hlY2tib3gtbGFiZWwge1xuICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5tY2stY2hlY2tib3gtZ3JvdXAtY2hpbGQge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAkc3BhY2luZy1sYXJnZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbWF0LWNoZWNrYm94IHtcbiAgICAgICAgICAgICAgICBsYWJlbC5tYXQtY2hlY2tib3gtbGF5b3V0IHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDJweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRpdi5tYXQtY2hlY2tib3gtZnJhbWUubWF0LWNoZWNrYm94LWZyYW1lIHtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgbWNrLWNoZWNrYm94LWJvcmRlcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmLm1hdC1jaGVja2JveC1jaGVja2VkIHtcbiAgICAgICAgICAgICAgICAgICAgZGl2Lm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJi5tY2stY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWRpc2FibGVkIHtcbiAgICAgICAgICAgICAgICAgICAgZGl2Lm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJi5tY2stY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWRpc2FibGVkIHtcbiAgICAgICAgICAgICAgICAgICAgJiAubWF0LWNoZWNrYm94LWxhYmVsLm1hdC1jaGVja2JveC1sYWJlbCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBjaGVja2JveC1sYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAkYm9yZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICRzcGFjaW5nLXNtYWxsLW1lZGl1bTtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAkc3BhY2luZy1zbWFsbC1tZWRpdW07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1zZWxlY3Qtb3B0aW9uIHtcbiAgICAgICAgJi1zZWxlY3RlZCB7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xuXG4gICAgICAgICAgICAubWNrLXNwYWNlci1jb250ZW50IHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6ICRzcGFjaW5nLXhzbWFsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtdW5zZWxlY3RlZCB7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG5cbiAgICAgICAgICAgICYubWNrLWlnbm9yZS1kaXNhYmxlZCB7XG4gICAgICAgICAgICAgICAgY29sb3I6IGJsYWNrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWNrLXNwYWNlci1jb250ZW50IHtcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAkc3BhY2luZy14c21hbGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWJ1dHRvbiB7XG4gICAgICAgICYubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLCAmLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b24ge1xuICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgICAgIEBleHRlbmQgLm1jay1jb2x1bW47XG4gICAgICAgICAgICBAZXh0ZW5kIC5tY2stY2VudGVyO1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG5cbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYgPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctc21hbGxlc3Q7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctc21hbGxlc3Q7XG4gICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG5cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYubWNrLXNob3J0IHtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgbWluLXdpZHRoOiA4M3B4O1xuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMTU1cHg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gc29tZSBjYXNlcyBidXR0b25zIGluIGRlc2t0b3AgYXJlIDQwIHZzIDQ4cHhcbiAgICAgICAgICAgICAgICAmLm1jay1zaG9ydC1oZWlnaHQge1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYubWNrLXNxdWFyZSB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgICAgICAgICAgIHdpZHRoOiAzMnB4O1xuICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMzJweDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogNDBweDtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtcHJpbWFyeS1idXR0b24ge1xuICAgICAgICBAZXh0ZW5kIC5tY2stYnV0dG9uO1xuXG4gICAgICAgICYubWF0LWJ1dHRvbi5tYXQtYnV0dG9uIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5O1xuXG4gICAgICAgICAgICAmW2Rpc2FibGVkXSwgJi5kaXNhYmxlZCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgICAgICAgICAgICAgY29sb3I6ICM3NTc1NzU7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcblxuICAgICAgICAgICAgICAgICYgPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjNzU3NTc1O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXNlY29uZGFyeS1idXR0b24ge1xuICAgICAgICBAZXh0ZW5kIC5tY2stYnV0dG9uO1xuXG4gICAgICAgICYubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiB7XG4gICAgICAgICAgICBAaW5jbHVkZSBtY2stdGhpbi1idXR0b24tYm9yZGVyO1xuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzIyNTFGRjtcbiAgICAgICAgICAgIGNvbG9yOiAjMjI1MUZGO1xuICAgICAgICAgICAgJltkaXNhYmxlZF0sICYuZGlzYWJsZWQge1xuICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgICAgICAgICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLm1hdC1idXR0b24ubWF0LWJ1dHRvbiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcblxuICAgICAgICAgICAgJiA+IC5tYXQtYnV0dG9uLXdyYXBwZXIubWF0LWJ1dHRvbi13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogJGNoaXAtY29sb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLXdhcm5pbmctYnV0dG9uIHtcbiAgICAgICAgQGV4dGVuZCAubWNrLWJ1dHRvbjtcblxuICAgICAgICAmLm1hdC1idXR0b24ubWF0LWJ1dHRvbiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3ItYnJhbmQteWVsbG93O1xuXG4gICAgICAgICAgICAmID4gLm1hdC1idXR0b24td3JhcHBlci5tYXQtYnV0dG9uLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgIGNvbG9yOiBibGFjaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtc3Ryb2tlZC1idXR0b24ge1xuICAgICAgICBAZXh0ZW5kIC5tY2stYnV0dG9uO1xuXG4gICAgICAgICYubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbiB7XG4gICAgICAgICAgICBAaW5jbHVkZSBtY2stYnV0dG9uLWJvcmRlcjtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLW1lZGl1bS1sYXJnZTtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLW1lZGl1bS1sYXJnZTtcblxuICAgICAgICAgICAgJi5tY2stc2hvcnQge1xuICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDgzcHg7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbGVzdDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbGVzdDtcblxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0OHB4O1xuICAgICAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDE1NXB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gcHJpbWFyeSBjb2xvcnNcbiAgICAgICAgICAgICYubWNrLXByaW1hcnkge1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMXB4O1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogJHByaW1hcnk7XG4gICAgICAgICAgICAgICAgY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLm1jay10aGluLWJvcmRlci1saWdodCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICAgICAgICAgICAgICBib3JkZXItd2lkdGg6IDFweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYgPiAubWF0LWJ1dHRvbi13cmFwcGVyLm1hdC1idXR0b24td3JhcHBlciB7XG4gICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgICAgIGNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtdG9nZ2xlLWJ1dHRvbiB7XG4gICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICAgICAgbWluLXdpZHRoOiA1OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcblxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICBtaW4td2lkdGg6IDEzMnB4O1xuICAgICAgICAgICAgcGFkZGluZy10b3A6ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgfVxuXG4gICAgICAgICYtc2VsZWN0ZWQge1xuICAgICAgICAgICAgY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1kYXRlLXBpY2tlciB7XG4gICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xuXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgIG1heC13aWR0aDogMjNyZW07XG4gICAgICAgIH1cblxuICAgICAgICAmID4gLmhlYWRlci5oZWFkZXIge1xuICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICBjb2xvcjogJGZvcm0tbGFiZWw7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAkc3BhY2luZy1zbWFsbC1tZWRpdW07XG5cbiAgICAgICAgICAgICYgPiAuYXJyb3cuYXJyb3cge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAyLjM3NXJlbTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDJyZW07XG5cbiAgICAgICAgICAgICAgICAmID4gLmljb24uaWNvbiB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxcmVtO1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDFyZW07XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAmID4gLm5leHQubmV4dCB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnbGlicy91aS9zcmMvbGliL2ljb25zL2Fycm93LWZvcndhcmQuc3ZnJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJiA+IC5wcmV2aW91cy5wcmV2aW91cyB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnbGlicy91aS9zcmMvbGliL2ljb25zL2Fycm93LWJhY2t3YXJkLnN2ZycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgIH1cblxuICAgICAgICAmID4gLm1vbnRoIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICB9XG5cbiAgICAgICAgJiA+IC53ZWVrIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgY29sb3I6ICRzZWNvbmRhcnktbGFiZWw7XG4gICAgICAgIH1cblxuICAgICAgICAmID4gLmJvZHkge1xuICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcblxuICAgICAgICAgICAgJiA+IGRpdiA+IGRpdi5kYXRlIHtcbiAgICAgICAgICAgICAgICAmID4gLmRvdCB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJi5kaXNhYmxlZCB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJHNlY29uZGFyeS1sYWJlbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmLmFjdGl2ZSB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICYubm9uLW1vbnRoIHtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICRzZWNvbmRhcnktbGFiZWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1zcGFjZXItY29udGVudCB7XG4gICAgICAgICYtY29sbGFwc2UtdGFibGV0IHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZSh0YWJsZXQpIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1leHBhbmQtbW9iaWxlIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1kaXZpZGVyIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWV4cGFuc2lvbi1wYW5lbCB7XG4gICAgICAgICYubWF0LWV4cGFuc2lvbi1wYW5lbC5tYXQtZXhwYW5zaW9uLXBhbmVsIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIG1hdC1lbGV2YXRpb24oMCk7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICRzZWxlY3RlZC1vcHRpb247XG4gICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHNlbGVjdGVkLW9wdGlvbjtcblxuICAgICAgICAgICAgJi5tY2stZXhwYW5kZWQge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWNvbG9yO1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG5cbiAgICAgICAgICAgICAgICAmIC5tY2stY29sbGFwc2UtaWNvbiB7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICdjaGV2cm9uLWNsb3NlLnN2ZycpO1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBtY2staWNvbig0OHB4LCAnY2hldnJvbi1jbG9zZS1sYXJnZS5zdmcnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1hdC1leHBhbnNpb24tcGFuZWwtYm9keSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG5cbiAgICAgICAgICAgICAgICAmID4gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIHtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgYm9keS10aW55O1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbDtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYgbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xuXG4gICAgICAgICAgICAmID4gc3Bhbi5tYXQtY29udGVudCB7XG4gICAgICAgICAgICAgICAgLy8gY2VudGVyIHRleHQgYW5kIGljb25zXG4gICAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYgbWF0LXBhbmVsLXRpdGxlIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICAgICAgY29sb3I6IGJsYWNrO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5tY2stY29sbGFwc2UtaWNvbiB7XG4gICAgICAgICAgICBAaW5jbHVkZSBtY2staWNvbigyNHB4LCAnY2hldnJvbi1vcGVuLnN2ZycpO1xuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDQ4cHgsICdjaGV2cm9uLW9wZW4tbGFyZ2Uuc3ZnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICAgICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjVzIGVhc2U7XG4gICAgICAgICAgICAmLmV4cGFuZGVkIHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1pY29uLWZpbGwtb3BlbiB7XG4gICAgICAgIGZpbGw6ICRwcmltYXJ5O1xuICAgIH1cblxuICAgICYtaWNvbi1maWxsLWNsb3NlIHtcbiAgICAgICAgZmlsbDogJHNlY29uZGFyeS1sYWJlbDtcbiAgICB9XG5cbiAgICAmLWljb24tZmlsbC1ibGFjayB7XG4gICAgICAgIGZpbGw6IGJsYWNrO1xuICAgICAgICBzdHJva2U6IGJsYWNrO1xuICAgIH1cblxuICAgICYtaWNvbi1maWxsLXdoaXRlIHtcbiAgICAgICAgZmlsbDogd2hpdGU7XG4gICAgICAgIHN0cm9rZTogd2hpdGU7XG4gICAgfVxuXG4gICAgJi1pY29uLWZpbGwtZ3JheSB7XG4gICAgICAgIGZpbGw6ICMzMzMzMzM7XG4gICAgICAgIHN0cm9rZTogIzMzMzMzMztcbiAgICB9XG5cbiAgICAmLW1pbiB7XG4gICAgICAgIG1heC13aWR0aDogNTgxcHggIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDgwdnc7XG4gICAgICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIG1vZGFsIGludG8gYSBtb3JlICdmdWxsLXNjcmVlbicgYXBwZWFyYW5jZSBvbiBtb2JpbGUuXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG5cbiAgICAgICAgICAgIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1ub2V4cGFuZCB7XG4gICAgICAgIG1heC13aWR0aDogNTgxcHggIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDgwdncgIWltcG9ydGFudDtcbiAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgbW9kYWwgaW50byBhIG1vcmUgJ2Z1bGwtc2NyZWVuJyBhcHBlYXJhbmNlIG9uIG1vYmlsZS5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICB3aWR0aDogY2FsYygxMDB2dyAtIDMycHgpICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtbW9kYWwge1xuICAgICAgICBtYXgtd2lkdGg6IDgwMHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIHdpZHRoOiA4MHZ3O1xuICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBtb2RhbCBpbnRvIGEgbW9yZSAnZnVsbC1zY3JlZW4nIGFwcGVhcmFuY2Ugb24gbW9iaWxlLlxuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDB2dztcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuXG4gICAgICAgICAgICAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtbW9kYWwtbWluaSB7XG4gICAgICAgIG1heC13aWR0aDogNTgwcHggIWltcG9ydGFudDtcbiAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgbW9kYWwgaW50byBhIG1vcmUgJ2Z1bGwtc2NyZWVuJyBhcHBlYXJhbmNlIG9uIG1vYmlsZS5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICB3aWR0aDogMTAwdnc7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcblxuICAgICAgICAgICAgLm1hdC1kaWFsb2ctY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLW1vZGFsLXN1cnZleSB7XG4gICAgICAgIG1heC13aWR0aDogNjkxcHggIWltcG9ydGFudDtcbiAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgbW9kYWwgaW50byBhIG1vcmUgJ2Z1bGwtc2NyZWVuJyBhcHBlYXJhbmNlIG9uIG1vYmlsZS5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtbW9kYWwtd2lkZSB7XG4gICAgICAgIG1heC13aWR0aDogMTAyNHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIHdpZHRoOiAxMDB2dztcbiAgICAgICAgaGVpZ2h0OiA5NXZoO1xuICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgLm1hdC1kaWFsb2ctY29udGVudCB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuICAgICAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgIC5tYXQtaWNvbi1idXR0b25bbmFtZT1cIkNsb3NlQnV0dG9uXCJdIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgcmlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIC5jbG9zZS1pbWFnZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMzJweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIG1vZGFsIGludG8gYSBtb3JlICdmdWxsLXNjcmVlbicgYXBwZWFyYW5jZSBvbiBtb2JpbGUuXG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7XG4gICAgICAgICAgICAubWF0LWRpYWxvZy1jb250YWluZXIge1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgJi1tb2RhbC13aWRlLW1hbmFnZS1ib29raW5nIHtcbiAgICAgICAgbWF4LXdpZHRoOiAxMjUwcHggIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgICAvLyBoZWlnaHQ6IDk1dmg7XG4gICAgICAgIG1heC1oZWlnaHQ6IDk1dmg7XG4gICAgICAgIC5tYXQtZGlhbG9nLWNvbnRlbnQge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Y4RjlGQTtcbiAgICAgICAgICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAvLyBvdmVyZmxvdy15OiBoaWRkZW4gIWltcG9ydGFudDtcblxuICAgICAgICAgICAgLm1hdC1pY29uLWJ1dHRvbltuYW1lPVwiQ2xvc2VCdXR0b25cIl0ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICByaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLmNsb3NlLWltYWdlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMnB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgbW9kYWwgaW50byBhIG1vcmUgJ2Z1bGwtc2NyZWVuJyBhcHBlYXJhbmNlIG9uIG1vYmlsZS5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICB3aWR0aDogMTAwdnc7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgICAgIC5tYXQtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICAmLWFsZXJ0IHtcbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDEwMHZ3ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB3aWR0aDogMTAwdnc7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogJHNwYWNpbmctc21hbGw7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgJi1iYWNrZHJvcCB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAkYWxlcnQtb3ZlcmxheS1iZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYtc2xpZGUtdG9nZ2xlIHtcbiAgICAgICAgJi5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkOm5vdCgubWF0LWRpc2FibGVkKSB7XG4gICAgICAgICAgICAmIC5tYXQtc2xpZGUtdG9nZ2xlLWJhci5tYXQtc2xpZGUtdG9nZ2xlLWJhciB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnktaGlnaGxpZ2h0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi5tYXQtc2xpZGUtdG9nZ2xlIHtcbiAgICAgICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgfVxuXG4gICAgICAgIC5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnQubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50IHtcbiAgICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgICAgIEBpbmNsdWRlIG1heC1saW5lcygyKTtcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7XG4gICAgICAgIH1cblxuICAgICAgICAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iIHtcbiAgICAgICAgICAgIHdpZHRoOiAxNHB4O1xuICAgICAgICAgICAgaGVpZ2h0OiAxNHB4O1xuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoNTAlLCA1MCUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWItY29udGFpbmVyLm1hdC1zbGlkZS10b2dnbGUtdGh1bWItY29udGFpbmVyIHtcbiAgICAgICAgICAgIHRvcDogLTRweDtcbiAgICAgICAgICAgIGxlZnQ6IC00cHg7XG4gICAgICAgIH1cblxuICAgICAgICAubWF0LXNsaWRlLXRvZ2dsZS1iYXIubWF0LXNsaWRlLXRvZ2dsZS1iYXIge1xuICAgICAgICAgICAgaGVpZ2h0OiAyMHB4O1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1za2VsZXRvbiB7XG4gICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuXG4gICAgICAgICYtY2hlY2tib3gge1xuICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgICAgICB3aWR0aDogMjBweDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDIwcHg7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtaGVhZGVyID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICB3aWR0aDogMTAwdnc7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAyMTVweDtcbiAgICAgICAgfVxuXG4gICAgICAgICYtaW1hZ2UgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgIEBpbmNsdWRlIHBsYWNlaG9sZGVyLWltYWdlLXNpemU7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgJi1zdGF0dXMgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgIEBpbmNsdWRlIHBsYWNlaG9sZGVyLXN0YXR1cy1zaXplO1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgIH1cblxuICAgICAgICAmLWxpbmUtMSA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgaGVpZ2h0OiAyM3B4O1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAxNzZweDtcblxuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMjE5cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWxpbmUtMiA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAxNjVweDtcblxuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTg5cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWxpbmUtMyA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAxNDdweDtcblxuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTg5cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWxpbmUtMzBwLCAmLWxpbmUtMzBwLXRoaW4ge1xuICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMzAlO1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAzMCU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGluIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1saW5lLTQ1cCwgJi1saW5lLTQ1cC10aGluIHtcbiAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMThweDtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDQ1JTtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1heC13aWR0aDogNDUlO1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDQ1JTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLXRoaW4ge1xuICAgICAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWxpbmUtNTBwLCAmLWxpbmUtNTBwLXRoaW4sICYtbGluZS01MHAtdGhpY2sge1xuICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogNTAlO1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA1MCU7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNDUlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYtdGhpbiB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYtdGhpY2sge1xuICAgICAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWxpbmUtNjBwLCAmLWxpbmUtNjBwLXRoaW4sICYtbGluZS02MHAtdGhpY2sge1xuICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogNjAlO1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA2MCU7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMzUlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYtdGhpbiB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYtdGhpY2sge1xuICAgICAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWxpbmUtNzBwLCAmLWxpbmUtNzBwLXRoaW4sICYtbGluZS03MHAtdGhpY2sge1xuICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogNzAlO1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA3MCU7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMjUlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYtdGhpbiB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYtdGhpY2sge1xuICAgICAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWxpbmUtODBwLCAmLWxpbmUtODBwLXRoaW4sICYtbGluZS04MHAtdGhpY2sge1xuICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogODAlO1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA4MCU7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMTUlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYtdGhpbiB7XG4gICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYtdGhpY2sge1xuICAgICAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLWxpbmUtOTBwLCAmLWxpbmUtOTBwLXRoaW4ge1xuICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgc2tlbGV0b24tYmc7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogOTAlO1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA5MCU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi10aGluIHtcbiAgICAgICAgICAgICAgICA+IC5sb2FkZXIubG9hZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1sb2FkLW1vcmUgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICBAaW5jbHVkZSBza2VsZXRvbi1iZztcbiAgICAgICAgICAgIG1hcmdpbi10b3A6ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy14eHNtYWxsO1xuICAgICAgICAgICAgd2lkdGg6IGNhbGMoMTAwdncgLSAoMiAqICN7JHNwYWNpbmctc21hbGx9KSk7XG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XG5cbiAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDMyMHB4O1xuICAgICAgICAgICAgICAgIGhlaWdodDogNTBweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbG9hZC1tb3JlLTEwMHAsICYtaGVhZGVyLCAmLXJvb20tYXZhaWxhYmlsaXR5IHtcbiAgICAgICAgICAgID4gLmxvYWRlci5sb2FkZXIge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIHNrZWxldG9uLWJnO1xuICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6ICRzcGFjaW5nLXh4c21hbGw7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogJHNwYWNpbmcteHhzbWFsbDtcbiAgICAgICAgICAgICAgICB3aWR0aDogY2FsYygxMDB2dyAtICgyICogI3skc3BhY2luZy1zbWFsbH0pKTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiBub25lO1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4LXdpZHRoOiBub25lO1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA1MHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAmLXJvb20tYXZhaWxhYmlsaXR5IHtcbiAgICAgICAgICAgICAgICAgICAgPiAubG9hZGVyLmxvYWRlciB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDEyNHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cblxuICAgIH1cbn1cblxuXG4ubWNrIHtcbiAgICAmLWhlYWRpbmctNSB7XG4gICAgICAgIEBpbmNsdWRlIGhlYWRpbmctNTtcbiAgICB9XG59XG5cbm5neC1tYXQtc2VsZWN0LXNlYXJjaCB7XG4gICAgLm1hdC1zZWxlY3Qtc2VhcmNoLW5vLWVudHJpZXMtZm91bmQge1xuICAgICAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIH1cblxuICAgIC5tYXQtc2VsZWN0LXNlYXJjaC1pbnB1dCB7XG4gICAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgfVxuXG4gICAgYnV0dG9uLm1hdC1idXR0b24ubWF0LXNlbGVjdC1zZWFyY2gtY2xlYXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgfVxufVxuXG46Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICB3aWR0aDogMTZweDtcbiAgICBoZWlnaHQ6IDE4cHg7XG59XG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgICBoZWlnaHQ6ICRzcGFjaW5nLW1lZGl1bTtcbiAgICBib3JkZXI6IDRweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDApO1xuICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzY3JvbGxiYXItY29sb3I7XG4gICAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAtMXB4IC0xcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4wNSksIGluc2V0IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG59XG46Oi13ZWJraXQtc2Nyb2xsYmFyLWJ1dHRvbiB7XG4gICAgd2lkdGg6IDA7XG4gICAgaGVpZ2h0OiAwO1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG46Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5oZWFkZXIge1xuICAgIHotaW5kZXg6IDI7XG59XG4ubWItYmxvY2sge1xuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG59XG4ubWItYm90dG9tIHtcbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDExMHB4O1xuICAgIH1cbn1cblxuLm1hcC1maWx0ZXJzLWNvbnRhaW5lciAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQge1xuICAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeCB7XG4gICAgICAgIHRvcDogNXB4O1xuICAgIH1cbiAgICAubWF0LWZvcm0tZmllbGQtb3V0bGluZXtcbiAgICAgICAgaGVpZ2h0OiA0OHB4O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgICBwYWRkaW5nLXRvcDogJHNwYWNpbmcteHhzbWFsbCAhaW1wb3J0YW50O1xuICAgIH1cbn1cblxuLm9mZmljZS1sZXZlbC1yb3d7XG5cbiAgICAubWF0LXNlbGVjdC1wbGFjZWhvbGRlcntcbiAgICAgICAgY29sb3I6ICMzMzMzMzM7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgIH1cblxuICAgIC5sZWdlbmQtY29udGFpbmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCAubWF0LWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIGhlaWdodDogNDVweCAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLnNlbGVjdC1kaXZpZGVye1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgdG9wOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIHdpZHRoOiA0NHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIHJpZ2h0OiAtMTFweCAhaW1wb3J0YW50O1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICAgICAgICBib3JkZXItd2lkdGg6IDAgMCAwIDFweDtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjYzZjNmM2O1xuICAgICAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDFweCkgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5kaXNhYmxlZHtcbiAgICAgICAgLnNlbGVjdC1kaXZpZGVye1xuICAgICAgICAgICAgYmFja2dyb3VuZDogI0YwRjBGMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICAgICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gMnB4KSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC5zZWxlY3QtY2hldnJvbntcbiAgICAgICAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4ub2ZmaWNlLWxldmVsLXJvdywgLm1hcC1jb250cm9sc3tcbiAgICAubGVnZW5kLWNvbnRhaW5lciAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwgLm1hdC1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xuICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW4gIWltcG9ydGFudDtcbiAgICB9XG59XG5cbi5ib29raW5nLWZvcm0tY29udGFpbmVyIHtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAzMTBweCk7XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgIG1heC1oZWlnaHQ6IG5vbmU7XG4gICAgfVxufVxuLmJvb2tpbmctZm9ybS1jb250YWluZXIgLm1jay1mb3JtLWlucHV0e1xuXG4gICAgbWF0LXNlbGVjdCB7XG4gICAgICAgICYgLm1hdC1zZWxlY3QtdmFsdWUgPiAubWF0LXNlbGVjdC12YWx1ZS10ZXh0ID4gc3BhbiB7XG4gICAgICAgICAgICAvLyBjb2xvcjogIzA1MWMyYyAhaW1wb3J0YW50OyAvL1ItLS0gYmxvY2tzIGRpc2FibGVkIHN0YXRlIGNvbG9yXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtYXQtbGFiZWwsIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudCB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zICFpbXBvcnRhbnQ7XG4gICAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgIH1cblxuICAgIGlucHV0LCBpbnB1dDo6cGxhY2Vob2xkZXJ7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgICAgICBjb2xvcjogI0IzQjNCMztcbiAgICB9XG59IiwiQGltcG9ydCBcImxpYnMvdWkvc3JjL2xpYi9zdHlsZXNcIjtcblxuZm9ybSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgIHBhZGRpbmc6IDAgMTBweDtcbiAgICB9XG59XG5cbi5tY2stcm93LWZsb3cge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgPmRpdiB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIG1pbi13aWR0aDogMTgwcHg7XG4gICAgICAgIGZsZXgtZmxvdzogY29sdW1uO1xuICAgIH1cbiAgICA+ZGl2Om50aC1jaGlsZCgyKSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAyMHB4O1xuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4uY29tcGFueS1jb250YWluZXJ7XG4gICAgPmRpdjpudGgtY2hpbGQoMikge1xuICAgICAgICBtYXJnaW4tbGVmdDogMHB4O1xuICAgIH1cbn1cblxuLnJvdy13aXRoLXNwYWNpbmcge1xuICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nLW1lZGl1bTtcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICBsYWJlbCB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgIH1cbiAgICBwIHtcbiAgICAgICAgY29sb3I6ICNlMTJlNDE7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgJi5jaGVja2luZyB7XG4gICAgICAgICAgICBjb2xvcjogIzAwMDAwMDtcbiAgICAgICAgfVxuICAgICAgICAmLmF2YWlsYWJsZSB7XG4gICAgICAgICAgICBjb2xvcjogIzNhYTUzNztcbiAgICAgICAgfVxuICAgICAgICAmLnNiLXN0YXR1cyB7XG4gICAgICAgICAgICBwYWRkaW5nOiAwIDEwcHggMCAzNHB4O1xuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgdG9wOiA0cHg7XG4gICAgICAgICAgICAgICAgbGVmdDogNHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4uZmxleC1yb3d7XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDFlbTtcbiAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgd2lkdGg6IDQ3JTtcbiAgICAgICAgICAgIG1pbi13aWR0aDogNDAlO1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICAgIGZsZXg6IG5vbmU7XG4gICAgICAgIH1cblxuICAgICAgICAuY29tcGFueS1maWVsZHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4uYXR0ZW5kZWVzLWlucHV0IHtcbiAgICBtYXJnaW4tcmlnaHQ6IDFlbTtcbiAgICBkaXNwbGF5OiBibG9jaztcbn1cblxubWF0LWhpbnQge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBzcGFuIHtcbiAgICAgICAgY29sb3I6ICRwcmltYXJ5O1xuICAgICAgICBmb250LXNpemU6IDExcHg7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgfVxuICAgIC5oaW50IHtcbiAgICAgICAgd2lkdGg6IDQyOXB4O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjaztcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgICAgIHRvcDogMjZweDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgei1pbmRleDogMjtcbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgfVxuICAgICAgICAudHJpYW5nbGUge1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgdG9wOiAtNnB4O1xuICAgICAgICAgICAgbGVmdDogMTJweDtcbiAgICAgICAgICAgIHdpZHRoOiAxMnB4O1xuICAgICAgICAgICAgaGVpZ2h0OiAxMnB4O1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5tY2stZm9ybS1pbnB1dCB7XG4gICAgbWluLXdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi10b3A6IDEuMjVlbTtcbiAgICBtYXJnaW4tcmlnaHQ6IDFlbTtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICAgIG1hcmdpbi1ib3R0b206IC41ZW07XG4gICAgc3BhbiB7XG4gICAgICAgIGNvbG9yOiAjZDE0ODRmOy8vJHBlbmRpbmc7XG4gICAgfVxuICAgICYuZXJyb3Ige1xuICAgICAgICBjb2xvcjogJGVycm9yO1xuICAgIH1cbn1cblxubWF0LWZvcm0tZmllbGQge1xuICAgIGZsZXg6IDE7XG5cbiAgICAmLmJvb2tlZHtcbiAgICAgICAgY29sb3I6ICNkMTQ4NGY7XG4gICAgfVxuXG4gICAgJi5hdmFpbGFibGV7XG4gICAgICAgIGNvbG9yOiAjM2FhNTM3O1xuICAgIH1cbiAgICBpbnB1dCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgcGFkZGluZy10b3A6IDhweDtcbiAgICB9XG4gICAgbWF0LWVycm9yIHtcbiAgICAgICAgcGFkZGluZy10b3A6IDEycHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBoZWlnaHQ6IDQwcHg7XG4gICAgICAgIHNwYW4ge1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICBsZWZ0OiAxMHB4O1xuICAgICAgICAgICAgdG9wOiAycHg7XG4gICAgICAgIH1cbiAgICAgICAgLmVycm9yLWljb24ge1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgbGVmdDogLTEycHg7XG4gICAgICAgICAgICBAaW5jbHVkZSBtY2staWNvbigkaWNvbi1zbWFsbCwgJGFzc2V0OiAnZXJyb3ItY2xvc2Uuc3ZnJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuaWNvbiB7XG4gICAgICAgIHdpZHRoOiA4cHg7XG4gICAgfVxufVxuXG5tYXQtdGFiIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG5cbi5maWVsZCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBtaW4td2lkdGg6IDE0ZW07XG4gICAgZmxleDogMTtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG59XG5cbnRleHRhcmVhIHtcbiAgICBtaW4taGVpZ2h0OiA3ZW07XG59XG5cbi5maWVsZHNldCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG5cbiAgICAuZmllbGQge1xuICAgICAgICBtYXJnaW46IDAgLjI1ZW07XG5cbiAgICAgICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIH1cblxuICAgICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmVycm9yIHtcbiAgICBjb2xvcjogJGVycm9yO1xufVxuXG4uZmxleC1jb250YWluZXJ7XG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobW9iaWxlKSB7XG4gICAgICAgIC5mdWxsLXdpZHRoe1xuICAgICAgICAgICAgbWluLXdpZHRoOiBjYWxjKDEwMCUgLSAxZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbWF0LWZvcm0tZmllbGQge1xuICAgICAgICA6Om5nLWRlZXAge1xuICAgICAgICAgICAgZGl2IGRpdiB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA0N3B4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19 */"] }); /*@__PURE__*/ @@ -66299,6 +67314,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons type: i3.Store }, { type: i0.ViewContainerRef + }, { + type: i1.ApplicationService }, { type: i1.UsersService }]; @@ -66409,42 +67426,46 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/snack-bar.js"); var i3 = __webpack_require__( + /*! @mckinsey-converge/data-common */ + "../../libs/data-common/src/index.ts"); + + var i4 = __webpack_require__( /*! @angular/forms */ "../../node_modules/@angular/forms/__ivy_ngcc__/fesm2015/forms.js"); - var i4 = __webpack_require__( + var i5 = __webpack_require__( /*! ../../../../../../libs/ui/src/lib/auto-complete-chip-select-item/auto-complete-chip-select-item.component */ "../../libs/ui/src/lib/auto-complete-chip-select-item/auto-complete-chip-select-item.component.ts"); - var i5 = __webpack_require__( + var i6 = __webpack_require__( /*! @angular/common */ "../../node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js"); - var i6 = __webpack_require__( + var i7 = __webpack_require__( /*! ../../../../../../libs/ui/src/lib/date-tz-time-field/date-tz-time-field.component */ "../../libs/ui/src/lib/date-tz-time-field/date-tz-time-field.component.ts"); - var i7 = __webpack_require__( + var i8 = __webpack_require__( /*! ../../../../../../libs/ui/src/lib/spacer/spacer.component */ "../../libs/ui/src/lib/spacer/spacer.component.ts"); - var i8 = __webpack_require__( + var i9 = __webpack_require__( /*! ../../../../../../libs/ui/src/lib/date-tz-duration-field/date-tz-duration-field.component */ "../../libs/ui/src/lib/date-tz-duration-field/date-tz-duration-field.component.ts"); - var i9 = __webpack_require__( + var i10 = __webpack_require__( /*! @angular/material/slide-toggle */ "../../node_modules/@angular/material/__ivy_ngcc__/fesm2015/slide-toggle.js"); - var i10 = __webpack_require__( + var i11 = __webpack_require__( /*! ../../../../../../libs/ui/src/lib/radio-select/radio-select.component */ "../../libs/ui/src/lib/radio-select/radio-select.component.ts"); - var i11 = __webpack_require__( + var i12 = __webpack_require__( /*! ../../../../../../libs/ui/src/lib/date-tz-date-picker/date-tz-date-picker.component */ "../../libs/ui/src/lib/date-tz-date-picker/date-tz-date-picker.component.ts"); - var i12 = __webpack_require__( + var i13 = __webpack_require__( /*! ../../../../../../libs/ui/src/lib/recurrence-booking-form/recurrence-booking-form.component */ "../../libs/ui/src/lib/recurrence-booking-form/recurrence-booking-form.component.ts"); @@ -66594,7 +67615,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var _super90 = _createSuper(RoomBookingFormComponent); function RoomBookingFormComponent(store, // private _service: ApplicationService, - vcRef, _snackBar) { + vcRef, _snackBar, _service) { var _this274; _classCallCheck(this, RoomBookingFormComponent); @@ -66602,6 +67623,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons _this274 = _super90.call(this, vcRef); _this274.store = store; _this274._snackBar = _snackBar; + _this274._service = _service; _this274.submitForm = new core_1.EventEmitter(); _this274.showCancel = false; /** @@ -66729,7 +67751,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var is_past = this._checkDateInPast(); if (is_past) { - this.openSnackBar('Start Time updated to after current time, please click search again.', 'Close'); + this._service.notifyWarn('Start Time updated to after current time, please click search again.'); + return; } else { this.formGroup.setValue(Object.assign(Object.assign({}, formGroupData), { @@ -66746,15 +67769,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (this.formGroup.valid) { this.submitForm.emit(this.formGroup.value); } - } - }, { - key: "openSnackBar", - value: function openSnackBar(message, action) { - this._snackBar.open(message, action, { - duration: 5000, - panelClass: ['yellow-snackbar'] - }); - } // Fires when the location selector value is changed + } // public openSnackBar(message: string, action: string) { + // this._snackBar.open(message, action, { + // duration: 5000, + // panelClass: ['yellow-snackbar'] + // }); + // } + // Fires when the location selector value is changed }, { key: "toggle", @@ -66876,7 +67897,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons exports.RoomBookingFormComponent = RoomBookingFormComponent; RoomBookingFormComponent.ɵfac = function RoomBookingFormComponent_Factory(t) { - return new (t || RoomBookingFormComponent)(i0.ɵɵdirectiveInject(i1.Store), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i2.MatSnackBar)); + return new (t || RoomBookingFormComponent)(i0.ɵɵdirectiveInject(i1.Store), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i2.MatSnackBar), i0.ɵɵdirectiveInject(i3.ApplicationService)); }; RoomBookingFormComponent.ɵcmp = i0.ɵɵdefineComponent({ @@ -66912,7 +67933,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons i0.ɵɵtemplate(0, RoomBookingFormComponent_ng_template_0_Template, 19, 26, "ng-template"); } }, - directives: [i3.ɵangular_packages_forms_forms_y, i3.NgControlStatusGroup, i3.FormGroupDirective, i4.AutoCompleteChipSelectItemComponent, i3.NgControlStatus, i3.FormControlName, i3.RequiredValidator, i5.NgIf, i6.DateTzTimeFieldComponent, i3.NgModel, i7.SpacerComponent, i8.DateTzDurationFieldComponent, i9.MatSlideToggle, i10.RadioSelectComponent, i11.DateTzDatePickerComponent, i12.RecurringBookingForm], + directives: [i4.ɵangular_packages_forms_forms_y, i4.NgControlStatusGroup, i4.FormGroupDirective, i5.AutoCompleteChipSelectItemComponent, i4.NgControlStatus, i4.FormControlName, i4.RequiredValidator, i6.NgIf, i7.DateTzTimeFieldComponent, i4.NgModel, i8.SpacerComponent, i9.DateTzDurationFieldComponent, i10.MatSlideToggle, i11.RadioSelectComponent, i12.DateTzDatePickerComponent, i13.RecurringBookingForm], styles: ["[_ngcontent-%COMP%]:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n\n\n\n\n\n\n\n\n\n\n.recurrence-siwch[_ngcontent-%COMP%] {\n height: 65px;\n}\n.recurrence-siwch[_ngcontent-%COMP%] .mat-slide-toggle-content {\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif !important;\n color: #333333;\n}\n.time-inputs[_ngcontent-%COMP%], .time-inputs-calendar[_ngcontent-%COMP%] {\n flex: 1;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .time-inputs[_ngcontent-%COMP%], .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 176px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .time-inputs[_ngcontent-%COMP%], .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 176px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-bottom: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-bottom: 1rem;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-bottom: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .time-inputs-calendar[_ngcontent-%COMP%] {\n min-width: 100%;\n margin-bottom: 1rem;\n }\n}\n.row-with-spacing[_ngcontent-%COMP%] {\n margin-bottom: 1.5rem;\n align-content: flex-start;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWJvb2tpbmctZm9ybS9yb29tLWJvb2tpbmctZm9ybS5jb21wb25lbnQuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi9taXhpbnMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9hcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWJvb2tpbmctZm9ybS9yb29tLWJvb2tpbmctZm9ybS5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0E7O0VBQUE7QUFxQ0E7O3NCQUFBO0FBYUE7RUFDSSxnQkE5Rk07RUErRk4sdUJBN0ZjO0FDT2xCO0FEeUZBOztzQkFBQTtBRWtPQTs7O0VBQUE7QUNwVUE7OzBCQUFBO0FBUUE7OzBCQUFBO0FBa0NBOztjQUFBO0FBZ0JBOztzQkFBQTtBQzVDQTs7c0JBQUE7QURkQTs7MEJBQUE7QUFRQTs7MEJBQUE7QUFrQ0E7O2NBQUE7QUFnQkE7O3NCQUFBO0FFckRJO0VBQ0ksWUFBQTtBSnlDUjtBSXRDWTtFQUNJLGdIQUFBO0VBQ0EsY0FBQTtBSndDaEI7QUloQ0E7RUFDSSxPQUFBO0FKbUNKO0FDbERZO0VHY1o7SUFHUSxnQkFBQTtFSnFDTjtBQUNGO0FDdkRZO0VHY1o7SUFHUSxnQkFBQTtFSjBDTjtBQUNGO0FDeERZO0VHZ0JSO0lBR1EsZUFBQTtJQUNBLG1CTDRCSTtFQ2FkO0FBQ0Y7QUM5RFk7RUdnQlI7SUFHUSxlQUFBO0lBQ0EsbUJMNEJJO0VDbUJkO0FBQ0Y7QUMzRFE7RUdPSjtJQU9RLGVBQUE7SUFDQSxtQkx3Qkk7RUN5QmQ7QUFDRjtBQ2pFUTtFR09KO0lBT1EsZUFBQTtJQUNBLG1CTHdCSTtFQytCZDtBQUNGO0FJbkRBO0VBQ0kscUJMd0JhO0VLdkJiLHlCQUFBO0FKc0RKIiwiZmlsZSI6ImFwcHMvc3RhZmYvc3JjL2FwcC9ib29raW5nL3Jvb20tYm9va2luZy1mb3JtL3Jvb20tYm9va2luZy1mb3JtLmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiJHByaW1hcnk6ICMxRjQwRTY7XG4kZm9ybS1sYWJlbDogIzA1MUMyQztcbiRzZWNvbmRhcnktbGFiZWw6ICM3Njc2NzY7XG4kYm9yZGVyOiAjQjNCM0IzO1xuJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ6ICNEMEQwRDA7XG4kY2hpcC1jb2xvcjogIzMzMzMzMztcbiRwbGFjZWhvbGRlci1jb2xvcjogIzdGN0Y3RjtcbiRiYWNrZ3JvdW5kLWNvbG9yOiAjRjBGMEYwO1xuJHBhZ2UtYmFja2dyb3VuZC1jb2xvcjogI0Y4RjlGQTtcbiRzZWxlY3RlZC1vcHRpb246ICNFNkU2RTY7XG4kY29sb3ItYnJhbmQteWVsbG93OiAjZmZkMDQ4O1xuJGxpZ2h0LXllbGxvdzogI2ZmZjNjZTtcbiRjb2FjaG1hcmstdGV4dDogIzZmNGQwMDtcbiRlcnJvci1jb2xvcjogI0UxMkU0MDtcbiRuby1maWx0ZXJzLWNvbG9yOiAjQkNCQ0JDO1xuJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yOiAjRjRGNEY0O1xuJHByaW1hcnktaGlnaGxpZ2h0OiAjMjI1MUZGO1xuJHNjcm9sbGJhci1jb2xvcjogIzc1NzU3NTtcblxuJGF2YWlsYWJsZS1jb2xvcjogIzVEOUQ1MjtcbiRhdmFpbGFibGUtYnktcmVxdWVzdC1jb2xvcjogI0Y1QjUzRjtcbiRpbi11c2UtY29sb3I6ICNENDQ4M0U7XG4kbm90LWJvb2thYmxlLWNvbG9yOiAjQ0NDQ0NDO1xuXG4kbW9kYWwtYm9keS1oZWFkaW5nOiAjNEQ0RDREO1xuJGFsZXJ0LW92ZXJsYXktYmc6IHJnYmEoNSwgMjgsIDQ0LCAwLjg1KTtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG5cbiRwZW5kaW5nOiAjZmZiMzAwO1xuJHBlbmRpbmctbGlnaHQ6IGxpZ2h0ZW4oJHBlbmRpbmcsIDEwKTtcbiRwZW5kaW5nLWRhcms6IGRhcmtlbigkcGVuZGluZywgMTApO1xuXG4kZXJyb3I6ICNlNTM5MzU7XG4kZXJyb3ItbGlnaHQ6IGxpZ2h0ZW4oJGVycm9yLCAxMCk7XG4kZXJyb3ItZGFyazogZGFya2VuKCRlcnJvciwgMTApO1xuXG4kY29hY2htYXJrLWJnOiAjRUJFQkY2O1xuJGNvYWNobWFyay1kYXJrLXRleHQ6ICMxQjFCMTk7XG4kZXJyb3ItdGV4dDogI2ZmZjtcblxuLyoqXG4gKiBTcGFjaW5nXG4gKi9cblxuLy8gNHB4XG4kc3BhY2luZy1zbWFsbGVzdDogMC4yNXJlbTtcblxuLy8gOHB4XG4kc3BhY2luZy14eHNtYWxsOiAwLjVyZW07XG5cbi8vIDEycHhcbiRzcGFjaW5nLXhzbWFsbDogMC43NXJlbTtcblxuLy8gMTZweFxuJHNwYWNpbmctc21hbGw6IDFyZW07XG5cbi8vIDIwcHhcbiRzcGFjaW5nLXNtYWxsLW1lZGl1bTogMS4yNXJlbTtcblxuLy8gMjRweFxuJHNwYWNpbmctbWVkaXVtOiAxLjVyZW07XG5cbi8vIDI4cHhcbiRzcGFjaW5nLW1lZGl1bS1sYXJnZTogMS43NXJlbTtcblxuLy8gMzJweFxuJHNwYWNpbmctbGFyZ2U6IDJyZW07XG5cbi8vIDQ4cHhcbiRzcGFjaW5nLXhsYXJnZTogM3JlbTtcblxuLy8gNjRweFxuJHNwYWNpbmcteHhsYXJnZTogNHJlbTtcblxuLy8gOTZweFxuJHNwYWNpbmctbGFyZ2VzdDogNnJlbTtcblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbiRkZXZpY2UtbW9iaWxlLXNpemU6IDQ1MHB4O1xuJGRldmljZS10YWJsZXQtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhcHRvcC1zaXplOiAxMDI0cHg7XG5cbiRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplOiAxMDQ4cHg7XG4kZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZTogMTI4MHB4O1xuXG5cbjpleHBvcnQge1xuICAgIHByaW1hcnk6ICRwcmltYXJ5O1xuICAgIHNlY29uZGFyeUxhYmVsOiAkc2Vjb25kYXJ5LWxhYmVsO1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuJGljb24tc21hbGw6IDE2cHg7XG4kaWNvbi1tZWRpdW06IDI0cHg7XG4kaWNvbi1sYXJnZTogMzJweDtcbiRpY29uLXhsYXJnZTogNDhweDtcbiIsIi8qKlxuICogU3BhY2luZ1xuICovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbjpleHBvcnQge1xuICBwcmltYXJ5OiAjMUY0MEU2O1xuICBzZWNvbmRhcnlMYWJlbDogIzc2NzY3Njtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qKlxuICogTWFrZXMgdGV4dCBoYXZlIG1heGltdW0gbGluZXMgd2l0aCBlbGxpcHNpcy4gV29ya3Mgb24gbW9zdCBtb2Rlcm4gYnJvd3NlcnMgZXhjZXB0XG4gKiBvZiBGaXJlZm94Li5cbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4ucmVjdXJyZW5jZS1zaXdjaCB7XG4gIGhlaWdodDogNjVweDtcbn1cbi5yZWN1cnJlbmNlLXNpd2NoIDo6bmctZGVlcCAubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50IHtcbiAgZm9udC1mYW1pbHk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmICFpbXBvcnRhbnQ7XG4gIGNvbG9yOiAjMzMzMzMzO1xufVxuXG4udGltZS1pbnB1dHMsIC50aW1lLWlucHV0cy1jYWxlbmRhciB7XG4gIGZsZXg6IDE7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAudGltZS1pbnB1dHMsIC50aW1lLWlucHV0cy1jYWxlbmRhciB7XG4gICAgbWluLXdpZHRoOiAxNzZweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC50aW1lLWlucHV0cywgLnRpbWUtaW5wdXRzLWNhbGVuZGFyIHtcbiAgICBtaW4td2lkdGg6IDE3NnB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAudGltZS1pbnB1dHMtY2FsZW5kYXIge1xuICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLnRpbWUtaW5wdXRzLWNhbGVuZGFyIHtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAudGltZS1pbnB1dHMtY2FsZW5kYXIge1xuICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogODAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDQ4cHgpIHtcbiAgLnRpbWUtaW5wdXRzLWNhbGVuZGFyIHtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbiAgfVxufVxuXG4ucm93LXdpdGgtc3BhY2luZyB7XG4gIG1hcmdpbi1ib3R0b206IDEuNXJlbTtcbiAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDtcbn0iLCJAaW1wb3J0IFwidmFyc1wiO1xuXG5AbWl4aW4gcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkc2l6ZSwgJHF1YWxpZmllcikge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQGlmICgkcXVhbGlmaWVyID09IG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2UgaWYgKCRxdWFsaWZpZXIgPT0gbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1heC13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuQG1peGluIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgJGNoZWNrLW9yaWVudGF0aW9uLCAkbWluLCAkbWF4KSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyB0aGlzIGlzIGEgY29weSBvZiByZXNwb25kLXRvLiB3ZSBkb24ndCB3YW50IHRvIHByZXNlcnZlIHRoYXQgbWV0aG9kIHNpbmNlIHRoZSBicmVha3BvaW50cyBtYXkgZGl2ZXJnZSBmcm9tIHRoZSBvbGQgVUkuXG5AbWl4aW4gaXMtc2NyZWVuLXNpemUoJG1lZGlhOiBhbGwsICRvcmllbnRhdGlvbjogbm9uZSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS1tb2JpbGUtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5cbkBtaXhpbiBwYWdlLXBhZGRpbmcge1xuICAgIHBhZGRpbmctbGVmdDogJHNwYWNpbmctc21hbGw7XG4gICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctc21hbGw7XG59XG5cbi8vIEZvbnQgTWl4aW5zXG4kZm9udC1tY2tpbnNleS1zYW5zOiBcIk1jS2luc2V5IFNhbnNcIjtcbiRmb250LXRoZWluaGFyZHQ6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuJGZvbnQtYm93ZXI6IFwiQm93ZXJcIjtcblxuQG1peGluIGJvd2VyLWJvbGQge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1ib3dlcjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gbWNraW5zZXktc2FucyB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LW1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIGRpc3BsYXktMSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNHJlbTsgLy8gNjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODc7IC8vIDc2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTIge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTMge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2MHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNCB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDNyZW07IC8vIDQ4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNjY7IC8vIDU2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjI1cmVtOyAvLyA1MnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjRweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNSB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMwcHhcbiAgICBsaW5lLWhlaWdodDogMS44MzM7IC8vIDM0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY0MjsgLy8gNDBweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktNyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0xIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNDhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNzVyZW07IC8vIDQ0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA1MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0yIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjExMTsgLy8gNDRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDQ4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTMge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMjI7IC8vIDQ0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTUge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTYge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTU7IC8vIDI4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBib2R5LWRlZmF1bHQge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjZweFxuICAgIH1cbn1cblxuLy8vIERvZXNudCBleGlzdCBpbiBNRFMuXG5AbWl4aW4gYm9keS10aW55IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTsgLy8gMTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDIwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxcmVtOyAvLyAxNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBmb3JtLWxhYmVsIHtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC10aGVpbmhhcmR0O1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBjb2xvcjogJHBsYWNlaG9sZGVyLWNvbG9yO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG59XG5cbkBtaXhpbiBjaGlwLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xufVxuXG5AbWl4aW4gY2hlY2tib3gtbGFiZWwge1xuICAgIEBpbmNsdWRlIGZvcm0tbGFiZWw7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICBjb2xvcjogYmxhY2s7XG59XG5cbi8vIGJvcmRlcnNcblxuQG1peGluIG1jay1jaGVja2JveC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stdGhpbi1idXR0b24tYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xufVxuXG5AbWl4aW4gbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYm9yZGVyLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQtbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlci1saWdodDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cblxuLy8gZnVuY3Rpb25zXG5cbi8qKlxuICogTWFrZXMgdGV4dCBoYXZlIG1heGltdW0gbGluZXMgd2l0aCBlbGxpcHNpcy4gV29ya3Mgb24gbW9zdCBtb2Rlcm4gYnJvd3NlcnMgZXhjZXB0XG4gKiBvZiBGaXJlZm94Li5cbiAqL1xuQG1peGluIG1heC1saW5lcygkY291bnQpIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIC13ZWJraXQtbGluZS1jbGFtcDogJGNvdW50O1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG59XG5cbi8vIGltYWdlc1xuQG1peGluIG1jay1pY29uKCR3aWR0aCwgJGFzc2V0LCAkaGVpZ2h0OiAkd2lkdGgsICAkYXNzZXRQYXRoOiBcImxpYnMvdWkvc3JjL2xpYi9pY29uc1wiLCkge1xuICAgIHdpZHRoOiAkd2lkdGg7XG4gICAgaGVpZ2h0OiAkaGVpZ2h0O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiN7JGFzc2V0UGF0aH0vI3skYXNzZXR9XCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbn1cblxuXG5AbWl4aW4gbWNrLXNtYWxsLWljb24oJG1vYmlsZS1hc3NldCwgJGRlc2t0b3AtYXNzZXQ6ICRtb2JpbGUtYXNzZXQpIHtcbiAgICBAaW5jbHVkZSBtY2staWNvbigxNnB4LCAkYXNzZXQ6ICRtb2JpbGUtYXNzZXQpO1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBAaW5jbHVkZSBtY2staWNvbigyNHB4LCAkYXNzZXQ6ICRkZXNrdG9wLWFzc2V0KTtcbiAgICB9XG59XG5cbi8vIHNrZWxldG9uXG5AbWl4aW4gc2tlbGV0b24tYmcge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1pbWFnZS1zaXplIHtcbiAgICB3aWR0aDogODFweDtcbiAgICBoZWlnaHQ6IDgycHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAyMTlweDtcbiAgICAgICAgaGVpZ2h0OiAxMTlweDtcbiAgICB9XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1zdGF0dXMtc2l6ZSB7XG4gICAgd2lkdGg6IDExN3B4O1xuICAgIGhlaWdodDogNzhweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDExN3B4O1xuICAgICAgICBoZWlnaHQ6IDc4cHg7XG4gICAgfVxufVxuIiwiLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kY29sb3ItYnJhbmQtZWxlY3RyaWMtYmx1ZTogIzIyNTFmZjtcbiRjb2xvci1icmFuZC1kZWVwLWJsdWU6ICMwNTFjMmM7XG4kY29sb3ItYnJhbmQtY3lhbjogIzAwYTlmNDtcblxuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRmb250LWRhcms6ICMwMDA7XG4kZm9udC1saWdodDogI2ZmZjtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG4kZ3JlZW4xOiAjMjE5NjUzO1xuXG4kcGVuZGluZzogI2ZmYjMwMDtcbiRwZW5kaW5nLWxpZ2h0OiBsaWdodGVuKCRwZW5kaW5nLCAxMCk7XG4kcGVuZGluZy1kYXJrOiBkYXJrZW4oJHBlbmRpbmcsIDEwKTtcblxuJGVycm9yOiAjZTUzOTM1O1xuJGVycm9yLWxpZ2h0OiBsaWdodGVuKCRlcnJvciwgMTApO1xuJGVycm9yLWRhcms6IGRhcmtlbigkZXJyb3IsIDEwKTtcblxuJGNvbG9yLXByaW1hcnk6ICMxOTM3ZWE7XG4kY29sb3ItcHJpbWFyeS1saWdodDogbGlnaHRlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuJGNvbG9yLXByaW1hcnktZGFyazogZGFya2VuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG5cbiRjb2xvci1zZWNvbmRhcnk6ICM0Mjg1RjQ7XG4kY29sb3Itc2Vjb25kYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcbiRjb2xvci1zZWNvbmRhcnktZGFyazogZGFya2VuKCRjb2xvci1zZWNvbmRhcnksIDEwKTtcblxuJGJhY2tncm91bmQ6ICNmMGYwZjA7XG4kZm9vdGVyLWJhY2s6ICMyNjMyMzg7XG4kaGVhZGVyLWJhY2s6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzA1MUMyQywgIzA1MUMyQyA0MCUsICMwQjI0NTMgNjAlLCAjMUY0MEU2IDEwMCUpO1xuXG4kY29sb3ItdGVybmFyeTogIzA1MWMyYztcblxuLyo9PT09PT09PT09PSpcXFxufHwgICBGb250cyAgIHx8XG5cXCo9PT09PT09PT09PSovXG5cbiRmb250LXN0YWNrOiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcblxuJGhlYWRpbmctZm9udDogXCJMYXJpc2hNY0tpbnNleVwiLCAnR2VvcmdpYScsIHNlcmlmO1xuJGZvbnQ6ICRmb250LXN0YWNrO1xuXG4kZm9udC1mYW1pbHktcHJpbWFyeTogXCJNY0tpbnNleSBTYW5zXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQ2FsaWJyaSwgQ29yYmVsLCBIZWx2ZXRpY2EsIFJvYm90bywgRHJvaWQsIHNhbnMtc2VyaWY7XG4kZm9udC1mYW1pbHktc2Vjb25kYXJ5OiBcIkJvd2VyXCIsIEdlb3JnaWEsIFwiVGltZXMgTmV3IFJvbWFuXCIgc2VyaWY7XG5cbiRiYXNlLXNpemU6IDE2cHg7XG4kdGFibGV0LXNpemU6IDE2cHg7XG4kbW9iaWxlLXNpemU6IDE2cHg7XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG4kYnJlYWstbW9iaWxlOiA0NTBweDtcbiRicmVhay10YWJsZXQ6IDgwMHB4O1xuJGJyZWFrLWxhcHRvcDogMTAyNHB4O1xuXG4kYnJlYWstbGFuZHNjYXBlLW1vYmlsZTogODAwcHg7XG4kYnJlYWstbGFuZHNjYXBlLXRhYmxldDogMTA0OHB4O1xuJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3A6IDEyODBweDtcbiIsIkBpbXBvcnQgJy4vdmFyaWFibGVzJztcblxuQG1peGluIGhpZGUtdGV4dC1vdmVyZmxvdyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG5AbWl4aW4gYm94LXNoYWRvdygkY29sb3I6ICMwMDAsICRkZXB0aDogMSkge1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCAxcHggKiAoJGRlcHRoIC0gMSkgcmdiYSgjMDAwLCAuMiksXG4gICAgICAgICAgICAgICAgMCAxcHggMXB4IDAgcmdiYSgjMDAwLCAuMTQpLFxuICAgICAgICAgICAgICAgIDAgMnB4IDFweCAtMXB4IHJnYmEoIzAwMCwgLjEyKTtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbkBtaXhpbiByZXNwb25kLXRvKCRtZWRpYSkge1xuICAgIEBpZiAkbWVkaWEgPT0gbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSAgQGVsc2UgaWYgJG1lZGlhID09IGxhdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfUBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBwb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJAaW1wb3J0IFwibGlicy91aS9zcmMvbGliL21peGluc1wiO1xuQGltcG9ydCAnbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvbWl4aW5zJztcbkBpbXBvcnQgJ2xpYnMvbGVnYWN5LXVpL3NyYy9saWIvc3R5bGVzL3ZhcmlhYmxlcyc7XG5cbi8vIDpob3N0e1xuICAgIC5yZWN1cnJlbmNlLXNpd2Noe1xuICAgICAgICBoZWlnaHQ6IDY1cHg7XG4gICAgICAgIC8vIG1hcmdpbi1ib3R0b206IDAuNWVtO1xuICAgICAgICA6Om5nLWRlZXAge1xuICAgICAgICAgICAgLm1hdC1zbGlkZS10b2dnbGUtY29udGVudHtcbiAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LXByaW1hcnkgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzMzMzMzMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbi8vIH1cblxuXG5cbi50aW1lLWlucHV0cyB7XG4gICAgZmxleDogMTtcbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIG1pbi13aWR0aDogMTc2cHg7XG4gICAgfVxuXG4gICAgJi1jYWxlbmRhciB7XG4gICAgICAgIEBleHRlbmQgLnRpbWUtaW5wdXRzO1xuICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nLXNtYWxsO1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKHRhYmxldCkge1xuICAgICAgICAgICAgbWluLXdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogJHNwYWNpbmctc21hbGw7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5yb3ctd2l0aC1zcGFjaW5nIHtcbiAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy1tZWRpdW07XG4gICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDtcbn1cblxuXG5cbiJdfQ== */"] }); /*@__PURE__*/ @@ -66932,6 +67953,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons type: i0.ViewContainerRef }, { type: i2.MatSnackBar + }, { + type: i3.ApplicationService }]; }, { formRef: [{ @@ -69523,31 +70546,31 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons i0.ɵɵtext(5); i0.ɵɵelementEnd(); i0.ɵɵelementStart(6, "div", 12); - i0.ɵɵtext(7, "The pinpoint indicates your selected room's location on the floor. No futher interaction is available."); - i0.ɵɵelementEnd(); + i0.ɵɵelementStart(7, "div", 13); + i0.ɵɵtext(8, "The pinpoint indicates your selected room's location on the floor. No futher interaction is available."); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(8, "div", 13); i0.ɵɵelementStart(9, "div", 14); - i0.ɵɵelementStart(10, "button", 15); - i0.ɵɵlistener("click", function RoomLocationPreviewComponent_div_3_Template_button_click_10_listener() { + i0.ɵɵelementStart(10, "div", 15); + i0.ɵɵelementStart(11, "button", 16); + i0.ɵɵlistener("click", function RoomLocationPreviewComponent_div_3_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r6); var ctx_r5 = i0.ɵɵnextContext(); return ctx_r5.displayOfficeInformation(); }); - i0.ɵɵelement(11, "div", 16); + i0.ɵɵelement(12, "div", 17); i0.ɵɵelementEnd(); - i0.ɵɵelement(12, "mck-legend-dropdown", 17); + i0.ɵɵelement(13, "mck-legend-dropdown", 18); i0.ɵɵelementEnd(); - i0.ɵɵelementStart(13, "app-map-controls", 18); - i0.ɵɵlistener("zoomInClick", function RoomLocationPreviewComponent_div_3_Template_app_map_controls_zoomInClick_13_listener() { + i0.ɵɵelementStart(14, "app-map-controls", 19); + i0.ɵɵlistener("zoomInClick", function RoomLocationPreviewComponent_div_3_Template_app_map_controls_zoomInClick_14_listener() { i0.ɵɵrestoreView(_r6); var ctx_r7 = i0.ɵɵnextContext(); return ctx_r7.zoomIn(); - })("zoomOutClick", function RoomLocationPreviewComponent_div_3_Template_app_map_controls_zoomOutClick_13_listener() { + })("zoomOutClick", function RoomLocationPreviewComponent_div_3_Template_app_map_controls_zoomOutClick_14_listener() { i0.ɵɵrestoreView(_r6); var ctx_r8 = i0.ɵɵnextContext(); return ctx_r8.zoomOut(); - })("refreshClick", function RoomLocationPreviewComponent_div_3_Template_app_map_controls_refreshClick_13_listener() { + })("refreshClick", function RoomLocationPreviewComponent_div_3_Template_app_map_controls_refreshClick_14_listener() { i0.ɵɵrestoreView(_r6); var ctx_r9 = i0.ɵɵnextContext(); return ctx_r9.resetZoomLevels(); @@ -69556,13 +70579,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); } if (rf & 2) { var ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵadvance(5); i0.ɵɵtextInterpolate2(" ", ctx_r1.building.name, ", ", ctx_r1.level.name, " "); - i0.ɵɵadvance(7); + i0.ɵɵadvance(8); i0.ɵɵproperty("options", ctx_r1.legendOptions); } } @@ -69571,9 +70596,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons if (rf & 1) { var _r11 = i0.ɵɵgetCurrentView(); - i0.ɵɵelementStart(0, "div", 19); + i0.ɵɵelementStart(0, "div", 20); i0.ɵɵelementStart(1, "div"); - i0.ɵɵelementStart(2, "button", 20); + i0.ɵɵelementStart(2, "button", 21); i0.ɵɵlistener("click", function RoomLocationPreviewComponent_div_9_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r11); var ctx_r10 = i0.ɵɵnextContext(); @@ -69815,13 +70840,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 10, vars: 23, - consts: [[1, "room-location", "mck-row"], [1, "map-wrapper"], ["class", "header", 4, "ngIf"], ["class", "sub", 4, "ngIf"], [3, "zoom", "src", "focus", "center", "css", "features"], ["class", "footer mck-column mck-center", 4, "ngIf"], [1, "header"], [3, "mode", "backModal", "noSurvey", "closeCallback"], [1, "sub"], [1, "title"], [1, "title-name"], ["src", "assets/icon/white-location.svg"], [1, "title-description"], [1, "map-controls"], [1, "mck-row"], ["name", "info-button", "mat-button", "", "color", "primary", 1, "mck-warning-button", "mck-square", "map-info-button", 3, "click"], [1, "map-icon-info"], ["placeholder", "Show legend", "placeholderOpen", "Hide legend", 3, "options"], [3, "zoomInClick", "zoomOutClick", "refreshClick"], [1, "footer", "mck-column", "mck-center"], ["mat-button", "", "color", "primary", 1, "mck-primary-button", 3, "click"]], + consts: [[1, "room-location", "mck-row"], [1, "map-wrapper"], ["class", "header", 4, "ngIf"], ["class", "sub", 4, "ngIf"], [3, "zoom", "src", "focus", "center", "css", "features"], ["class", "footer mck-column mck-center", 4, "ngIf"], [1, "header"], [3, "mode", "backModal", "noSurvey", "closeCallback"], [1, "sub"], [1, "title"], [1, "title-name"], ["src", "assets/icon/white-location.svg"], [1, "flex-row", "flex-space-between", "title-and-map-control"], [1, "title-description"], [1, "map-controls"], [1, "mck-row"], ["name", "info-button", "mat-button", "", "color", "primary", 1, "mck-warning-button", "mck-square", "map-info-button", 3, "click"], [1, "map-icon-info"], ["placeholder", "Show legend", "placeholderOpen", "Hide legend", 3, "options"], [3, "zoomInClick", "zoomOutClick", "refreshClick"], [1, "footer", "mck-column", "mck-center"], ["mat-button", "", "color", "primary", 1, "mck-primary-button", 3, "click"]], template: function RoomLocationPreviewComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 0); i0.ɵɵelementStart(1, "div", 1); i0.ɵɵtemplate(2, RoomLocationPreviewComponent_header_2_Template, 2, 3, "header", 2); - i0.ɵɵtemplate(3, RoomLocationPreviewComponent_div_3_Template, 14, 3, "div", 3); + i0.ɵɵtemplate(3, RoomLocationPreviewComponent_div_3_Template, 15, 3, "div", 3); i0.ɵɵelement(4, "a-map", 4); i0.ɵɵpipe(5, "async"); i0.ɵɵpipe(6, "async"); @@ -69849,7 +70874,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, directives: [i4.NgIf, i5.MapComponent, i6.TopbarHeaderComponent, i7.MatButton, i8.LegendDropdownComponent, i9.MapControlsComponent], pipes: [i4.AsyncPipe], - styles: ["/**\n * Spacing\n */\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n/*===================*\\\n|| Icon sizes ||\n\\*===================*/\n/**\n * Makes text have maximum lines with ellipsis. Works on most modern browsers except\n * of Firefox..\n */\n/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n.room-location .header {\n z-index: 10;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n display: block;\n padding: 0;\n}\n.booking-view {\n height: 124px;\n margin-bottom: 20px;\n border: 2px solid #DCDCDC;\n box-sizing: border-box;\n border-radius: 4px;\n overflow: hidden;\n}\n.booking-view .map-wrapper {\n position: relative;\n top: -90%;\n}\n.map-wrapper {\n height: 368px;\n width: 100%;\n overflow: hidden;\n border: 1px solid #A19F9F;\n}\n.map-wrapper.expanded {\n position: fixed;\n top: 0;\n left: 0;\n height: 100% !important;\n z-index: 4;\n background-color: #f0f0f0;\n}\n.map-wrapper a-map {\n cursor: move;\n}\n.map-wrapper a-map.np {\n pointer-events: none;\n cursor: default;\n}\n.map-wrapper .footer {\n position: absolute;\n bottom: 0;\n left: 0;\n padding: 24px 16px;\n border: 1px solid #E6E6E6;\n height: 96px;\n width: 100%;\n background-color: white;\n}\n.map-wrapper .footer > div {\n width: 100%;\n}\n.map-wrapper .footer button {\n width: 212px;\n margin: 0 auto;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .footer button {\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .footer button {\n width: 100%;\n }\n}\n.map-wrapper .sub {\n z-index: 2;\n height: 200px;\n position: absolute;\n top: 89px;\n left: 0;\n width: 100%;\n padding: 0 15px;\n background: linear-gradient(179.8deg, rgba(5, 28, 44, 0.15) 0.17%, rgba(0, 0, 0, 0) 81.92%);\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .sub {\n top: 67px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .sub {\n top: 67px;\n }\n}\n.map-wrapper .sub > div {\n background-color: white;\n width: 100%;\n max-width: 1024px;\n margin: 30px auto;\n border: 1px solid #E0E0E0;\n}\n.map-wrapper .sub > div > div {\n padding: 14px 14px 0 14px;\n}\n.map-wrapper .sub > div > div.map-controls {\n display: flex;\n padding: 16px 14px 0;\n width: 100%;\n justify-content: space-between;\n}\n.map-wrapper .sub > div > div.map-controls .mck-row {\n visibility: hidden;\n}\n.map-wrapper .sub > div > div.map-controls .map-controls-container {\n position: unset;\n margin-top: 0;\n box-shadow: none;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .sub > div > div.map-controls .map-controls-container {\n position: unset;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .sub > div > div.map-controls .map-controls-container {\n position: unset;\n }\n}\n.map-wrapper .sub > div > div.map-controls .map-controls-container .mck-column {\n flex-direction: row;\n}\n.map-wrapper .sub > div > div.map-controls .map-controls-container button {\n border-radius: 0;\n}\n.map-wrapper .sub > div > div.map-controls .map-controls-container .mck-stroked-button {\n height: 40px !important;\n}\n.map-wrapper .sub > div > div.map-controls .legend-container {\n margin: 0 0 0 15px;\n width: 160px;\n}\n.map-wrapper .sub > div > div.map-controls .legend-container .mat-form-field-appearance-outline .mat-form-field-wrapper {\n margin: 0;\n}\n.map-wrapper .sub > div > div.map-controls .legend-container .legend-divider {\n height: 40px !important;\n}\n.map-wrapper .sub > div > div.map-controls .mck-form-input mat-form-field .mat-form-field-outline {\n height: 40px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .sub > div > div.map-controls .mck-form-input mat-form-field .mat-form-field-outline,\n.map-wrapper .sub > div > div.map-controls .legend-container .legend-divider,\n.map-wrapper .sub > div > div.map-controls .map-controls-container .mck-stroked-button {\n height: 32px !important;\n }\n .map-wrapper .sub > div > div.map-controls .map-info-button {\n display: none;\n }\n .map-wrapper .sub > div > div.map-controls .legend-container {\n margin: 0;\n width: 150px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .sub > div > div.map-controls .mck-form-input mat-form-field .mat-form-field-outline,\n.map-wrapper .sub > div > div.map-controls .legend-container .legend-divider,\n.map-wrapper .sub > div > div.map-controls .map-controls-container .mck-stroked-button {\n height: 32px !important;\n }\n .map-wrapper .sub > div > div.map-controls .map-info-button {\n display: none;\n }\n .map-wrapper .sub > div > div.map-controls .legend-container {\n margin: 0;\n width: 150px;\n }\n}\n.map-wrapper .sub > div > div.title {\n padding-bottom: 14px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .sub > div > div.title {\n padding-bottom: 4px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .sub > div > div.title {\n padding-bottom: 4px;\n }\n}\n.map-wrapper .sub > div > div .title-name {\n margin: 0;\n font-size: 20px;\n font-weight: 400;\n}\n.map-wrapper .sub > div > div .title-description {\n color: #757575;\n font-size: 14px;\n margin: 2px 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .sub > div > div h1 {\n font-size: 18px;\n }\n .map-wrapper .sub > div > div p {\n color: #757575;\n font-size: 14px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .sub > div > div h1 {\n font-size: 18px;\n }\n .map-wrapper .sub > div > div p {\n color: #757575;\n font-size: 14px;\n }\n}\n.map-icon-info {\n width: 16px;\n height: 16px;\n background-image: url('info-icon-small.svg');\n background-size: contain;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .map-icon-info {\n width: 24px;\n height: 24px;\n background-image: url('info-icon-large.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .map-icon-info {\n width: 24px;\n height: 24px;\n background-image: url('info-icon-large.svg');\n background-size: contain;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWxvY2F0aW9uLXByZXZpZXcvcm9vbS1sb2NhdGlvbi1wcmV2aWV3LmNvbXBvbmVudC5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy91aS9zcmMvbGliL21peGlucy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvdmFyaWFibGVzLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL2xlZ2FjeS11aS9zcmMvbGliL3N0eWxlcy9taXhpbnMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2FwcHMvc3RhZmYvc3JjL2FwcC9ib29raW5nL3Jvb20tbG9jYXRpb24tcHJldmlldy9yb29tLWxvY2F0aW9uLXByZXZpZXcuY29tcG9uZW50LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMkNBOztFQUFBO0FBcUNBOztzQkFBQTtBQWFBO0VBQ0ksZ0JBOUZNO0VBK0ZOLHVCQTdGYztBQ09sQjtBRHlGQTs7c0JBQUE7QUVrT0E7OztFQUFBO0FDcFVBOzswQkFBQTtBQVFBOzswQkFBQTtBQWtDQTs7Y0FBQTtBQWdCQTs7c0JBQUE7QUM1Q0E7O3NCQUFBO0FDVkk7RUFDSSxXQUFBO0VBQ0Esa0JBQUE7RUFDQSxNQUFBO0VBQ0EsT0FBQTtFQUNBLFdBQUE7RUFDQSxjQUFBO0VBQ0EsVUFBQTtBSjhCUjtBSTNCQTtFQUNJLGFBQUE7RUFDQSxtQkFB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Q0Esd0JBQUE7RUR0RUY7QUFDRiIsImZpbGUiOiJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWxvY2F0aW9uLXByZXZpZXcvcm9vbS1sb2NhdGlvbi1wcmV2aWV3LmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiJHByaW1hcnk6ICMxRjQwRTY7XG4kZm9ybS1sYWJlbDogIzA1MUMyQztcbiRzZWNvbmRhcnktbGFiZWw6ICM3Njc2NzY7XG4kYm9yZGVyOiAjQjNCM0IzO1xuJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ6ICNEMEQwRDA7XG4kY2hpcC1jb2xvcjogIzMzMzMzMztcbiRwbGFjZWhvbGRlci1jb2xvcjogIzdGN0Y3RjtcbiRiYWNrZ3JvdW5kLWNvbG9yOiAjRjBGMEYwO1xuJHBhZ2UtYmFja2dyb3VuZC1jb2xvcjogI0Y4RjlGQTtcbiRzZWxlY3RlZC1vcHRpb246ICNFNkU2RTY7XG4kY29sb3ItYnJhbmQteWVsbG93OiAjZmZkMDQ4O1xuJGxpZ2h0LXllbGxvdzogI2ZmZjNjZTtcbiRjb2FjaG1hcmstdGV4dDogIzZmNGQwMDtcbiRlcnJvci1jb2xvcjogI0UxMkU0MDtcbiRuby1maWx0ZXJzLWNvbG9yOiAjQkNCQ0JDO1xuJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yOiAjRjRGNEY0O1xuJHByaW1hcnktaGlnaGxpZ2h0OiAjMjI1MUZGO1xuJHNjcm9sbGJhci1jb2xvcjogIzc1NzU3NTtcblxuJGF2YWlsYWJsZS1jb2xvcjogIzVEOUQ1MjtcbiRhdmFpbGFibGUtYnktcmVxdWVzdC1jb2xvcjogI0Y1QjUzRjtcbiRpbi11c2UtY29sb3I6ICNENDQ4M0U7XG4kbm90LWJvb2thYmxlLWNvbG9yOiAjQ0NDQ0NDO1xuXG4kbW9kYWwtYm9keS1oZWFkaW5nOiAjNEQ0RDREO1xuJGFsZXJ0LW92ZXJsYXktYmc6IHJnYmEoNSwgMjgsIDQ0LCAwLjg1KTtcblxuJHN1Y2Nlc3M6ICM0M2EwNDc7XG4kc3VjY2Vzcy1saWdodDogbGlnaHRlbigkc3VjY2VzcywgMTApO1xuJHN1Y2Nlc3MtZGFyazogZGFya2VuKCRzdWNjZXNzLCAxMCk7XG5cbiRwZW5kaW5nOiAjZmZiMzAwO1xuJHBlbmRpbmctbGlnaHQ6IGxpZ2h0ZW4oJHBlbmRpbmcsIDEwKTtcbiRwZW5kaW5nLWRhcms6IGRhcmtlbigkcGVuZGluZywgMTApO1xuXG4kZXJyb3I6ICNlNTM5MzU7XG4kZXJyb3ItbGlnaHQ6IGxpZ2h0ZW4oJGVycm9yLCAxMCk7XG4kZXJyb3ItZGFyazogZGFya2VuKCRlcnJvciwgMTApO1xuXG4kY29hY2htYXJrLWJnOiAjRUJFQkY2O1xuJGNvYWNobWFyay1kYXJrLXRleHQ6ICMxQjFCMTk7XG4kZXJyb3ItdGV4dDogI2ZmZjtcblxuLyoqXG4gKiBTcGFjaW5nXG4gKi9cblxuLy8gNHB4XG4kc3BhY2luZy1zbWFsbGVzdDogMC4yNXJlbTtcblxuLy8gOHB4XG4kc3BhY2luZy14eHNtYWxsOiAwLjVyZW07XG5cbi8vIDEycHhcbiRzcGFjaW5nLXhzbWFsbDogMC43NXJlbTtcblxuLy8gMTZweFxuJHNwYWNpbmctc21hbGw6IDFyZW07XG5cbi8vIDIwcHhcbiRzcGFjaW5nLXNtYWxsLW1lZGl1bTogMS4yNXJlbTtcblxuLy8gMjRweFxuJHNwYWNpbmctbWVkaXVtOiAxLjVyZW07XG5cbi8vIDI4cHhcbiRzcGFjaW5nLW1lZGl1bS1sYXJnZTogMS43NXJlbTtcblxuLy8gMzJweFxuJHNwYWNpbmctbGFyZ2U6IDJyZW07XG5cbi8vIDQ4cHhcbiRzcGFjaW5nLXhsYXJnZTogM3JlbTtcblxuLy8gNjRweFxuJHNwYWNpbmcteHhsYXJnZTogNHJlbTtcblxuLy8gOTZweFxuJHNwYWNpbmctbGFyZ2VzdDogNnJlbTtcblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbiRkZXZpY2UtbW9iaWxlLXNpemU6IDQ1MHB4O1xuJGRldmljZS10YWJsZXQtc2l6ZTogODAwcHg7XG4kZGV2aWNlLWxhcHRvcC1zaXplOiAxMDI0cHg7XG5cbiRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFuZHNjYXBlLXRhYmxldC1zaXplOiAxMDQ4cHg7XG4kZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZTogMTI4MHB4O1xuXG5cbjpleHBvcnQge1xuICAgIHByaW1hcnk6ICRwcmltYXJ5O1xuICAgIHNlY29uZGFyeUxhYmVsOiAkc2Vjb25kYXJ5LWxhYmVsO1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuJGljb24tc21hbGw6IDE2cHg7XG4kaWNvbi1tZWRpdW06IDI0cHg7XG4kaWNvbi1sYXJnZTogMzJweDtcbiRpY29uLXhsYXJnZTogNDhweDtcbiIsIi8qKlxuICogU3BhY2luZ1xuICovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbjpleHBvcnQge1xuICBwcmltYXJ5OiAjMUY0MEU2O1xuICBzZWNvbmRhcnlMYWJlbDogIzc2NzY3Njtcbn1cblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIEljb24gc2l6ZXMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi8qKlxuICogTWFrZXMgdGV4dCBoYXZlIG1heGltdW0gbGluZXMgd2l0aCBlbGxpcHNpcy4gV29ya3Mgb24gbW9zdCBtb2Rlcm4gYnJvd3NlcnMgZXhjZXB0XG4gKiBvZiBGaXJlZm94Li5cbiAqL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIE1EUyBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09PT09PSpcXFxufHwgIEFwcGxpY2F0aW9uIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4ucm9vbS1sb2NhdGlvbiAuaGVhZGVyIHtcbiAgei1pbmRleDogMTA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDA7XG59XG5cbi5ib29raW5nLXZpZXcge1xuICBoZWlnaHQ6IDEyNHB4O1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBib3JkZXI6IDJweCBzb2xpZCAjRENEQ0RDO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uYm9va2luZy12aWV3IC5tYXAtd3JhcHBlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAtOTAlO1xufVxuXG4ubWFwLXdyYXBwZXIge1xuICBoZWlnaHQ6IDM2OHB4O1xuICB3aWR0aDogMTAwJTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYm9yZGVyOiAxcHggc29saWQgI0ExOUY5Rjtcbn1cbi5tYXAtd3JhcHBlci5leHBhbmRlZCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcbiAgei1pbmRleDogNDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcbn1cbi5tYXAtd3JhcHBlciBhLW1hcCB7XG4gIGN1cnNvcjogbW92ZTtcbn1cbi5tYXAtd3JhcHBlciBhLW1hcC5ucCB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG4ubWFwLXdyYXBwZXIgLmZvb3RlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICBwYWRkaW5nOiAyNHB4IDE2cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNkU2RTY7XG4gIGhlaWdodDogOTZweDtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xufVxuLm1hcC13cmFwcGVyIC5mb290ZXIgPiBkaXYge1xuICB3aWR0aDogMTAwJTtcbn1cbi5tYXAtd3JhcHBlciAuZm9vdGVyIGJ1dHRvbiB7XG4gIHdpZHRoOiAyMTJweDtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWFwLXdyYXBwZXIgLmZvb3RlciBidXR0b24ge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1hcC13cmFwcGVyIC5mb290ZXIgYnV0dG9uIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuLm1hcC13cmFwcGVyIC5zdWIge1xuICB6LWluZGV4OiAyO1xuICBoZWlnaHQ6IDIwMHB4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogODlweDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDAgMTVweDtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE3OS44ZGVnLCByZ2JhKDUsIDI4LCA0NCwgMC4xNSkgMC4xNyUsIHJnYmEoMCwgMCwgMCwgMCkgODEuOTIlKTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tYXAtd3JhcHBlciAuc3ViIHtcbiAgICB0b3A6IDY3cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWFwLXdyYXBwZXIgLnN1YiB7XG4gICAgdG9wOiA2N3B4O1xuICB9XG59XG4ubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gIG1hcmdpbjogMzBweCBhdXRvO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTBFMEUwO1xufVxuLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYge1xuICBwYWRkaW5nOiAxNHB4IDE0cHggMCAxNHB4O1xufVxuLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIHtcbiAgZGlzcGxheTogZmxleDtcbiAgcGFkZGluZzogMTZweCAxNHB4IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG59XG4ubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLm1jay1yb3cge1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG59XG4ubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLm1hcC1jb250cm9scy1jb250YWluZXIge1xuICBwb3NpdGlvbjogdW5zZXQ7XG4gIG1hcmdpbi10b3A6IDA7XG4gIGJveC1zaGFkb3c6IG5vbmU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLm1hcC1jb250cm9scy1jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiB1bnNldDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2Lm1hcC1jb250cm9scyAubWFwLWNvbnRyb2xzLWNvbnRhaW5lciB7XG4gICAgcG9zaXRpb246IHVuc2V0O1xuICB9XG59XG4ubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLm1hcC1jb250cm9scy1jb250YWluZXIgLm1jay1jb2x1bW4ge1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xufVxuLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5tYXAtY29udHJvbHMtY29udGFpbmVyIGJ1dHRvbiB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4ubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLm1hcC1jb250cm9scy1jb250YWluZXIgLm1jay1zdHJva2VkLWJ1dHRvbiB7XG4gIGhlaWdodDogNDBweCAhaW1wb3J0YW50O1xufVxuLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5sZWdlbmQtY29udGFpbmVyIHtcbiAgbWFyZ2luOiAwIDAgMCAxNXB4O1xuICB3aWR0aDogMTYwcHg7XG59XG4ubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLmxlZ2VuZC1jb250YWluZXIgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtd3JhcHBlciB7XG4gIG1hcmdpbjogMDtcbn1cbi5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2Lm1hcC1jb250cm9scyAubGVnZW5kLWNvbnRhaW5lciAubGVnZW5kLWRpdmlkZXIge1xuICBoZWlnaHQ6IDQwcHggIWltcG9ydGFudDtcbn1cbi5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2Lm1hcC1jb250cm9scyAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUge1xuICBoZWlnaHQ6IDQwcHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLFxuLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5sZWdlbmQtY29udGFpbmVyIC5sZWdlbmQtZGl2aWRlcixcbi5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2Lm1hcC1jb250cm9scyAubWFwLWNvbnRyb2xzLWNvbnRhaW5lciAubWNrLXN0cm9rZWQtYnV0dG9uIHtcbiAgICBoZWlnaHQ6IDMycHggIWltcG9ydGFudDtcbiAgfVxuICAubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLm1hcC1pbmZvLWJ1dHRvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLmxlZ2VuZC1jb250YWluZXIge1xuICAgIG1hcmdpbjogMDtcbiAgICB3aWR0aDogMTUwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLFxuLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5sZWdlbmQtY29udGFpbmVyIC5sZWdlbmQtZGl2aWRlcixcbi5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2Lm1hcC1jb250cm9scyAubWFwLWNvbnRyb2xzLWNvbnRhaW5lciAubWNrLXN0cm9rZWQtYnV0dG9uIHtcbiAgICBoZWlnaHQ6IDMycHggIWltcG9ydGFudDtcbiAgfVxuICAubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLm1hcC1pbmZvLWJ1dHRvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLmxlZ2VuZC1jb250YWluZXIge1xuICAgIG1hcmdpbjogMDtcbiAgICB3aWR0aDogMTUwcHg7XG4gIH1cbn1cbi5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2LnRpdGxlIHtcbiAgcGFkZGluZy1ib3R0b206IDE0cHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi50aXRsZSB7XG4gICAgcGFkZGluZy1ib3R0b206IDRweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2LnRpdGxlIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogNHB4O1xuICB9XG59XG4ubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdiAudGl0bGUtbmFtZSB7XG4gIG1hcmdpbjogMDtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBmb250LXdlaWdodDogNDAwO1xufVxuLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYgLnRpdGxlLWRlc2NyaXB0aW9uIHtcbiAgY29sb3I6ICM3NTc1NzU7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbWFyZ2luOiAycHggMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2IGgxIHtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gIH1cbiAgLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYgcCB7XG4gICAgY29sb3I6ICM3NTc1NzU7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYgaDEge1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgfVxuICAubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdiBwIHtcbiAgICBjb2xvcjogIzc1NzU3NTtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gIH1cbn1cblxuLm1hcC1pY29uLWluZm8ge1xuICB3aWR0aDogMTZweDtcbiAgaGVpZ2h0OiAxNnB4O1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvaW5mby1pY29uLXNtYWxsLnN2Z1wiKTtcbiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNDUxcHgpIHtcbiAgLm1hcC1pY29uLWluZm8ge1xuICAgIHdpZHRoOiAyNHB4O1xuICAgIGhlaWdodDogMjRweDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJsaWJzL3VpL3NyYy9saWIvaWNvbnMvaW5mby1pY29uLWxhcmdlLnN2Z1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAubWFwLWljb24taW5mbyB7XG4gICAgd2lkdGg6IDI0cHg7XG4gICAgaGVpZ2h0OiAyNHB4O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9pbmZvLWljb24tbGFyZ2Uuc3ZnXCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbiAgfVxufSIsIkBpbXBvcnQgXCJ2YXJzXCI7XG5cbkBtaXhpbiBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRzaXplLCAkcXVhbGlmaWVyKSB7XG4gICAgQGlmICRvcmllbnRhdGlvbiA9PSBub25lIG9yICRvcmllbnRhdGlvbiA9PSAkY2hlY2stb3JpZW50YXRpb24ge1xuICAgICAgICBAaWYgKCRxdWFsaWZpZXIgPT0gbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGNoZWNrLW9yaWVudGF0aW9uKSBhbmQgKG1pbi13aWR0aDogJHNpemUpIHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSBpZiAoJHF1YWxpZmllciA9PSBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWF4LXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5AbWl4aW4gYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCAkY2hlY2stb3JpZW50YXRpb24sICRtaW4sICRtYXgpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkbWluKSBhbmQgKG1heC13aWR0aDogJG1heCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIHRoaXMgaXMgYSBjb3B5IG9mIHJlc3BvbmQtdG8uIHdlIGRvbid0IHdhbnQgdG8gcHJlc2VydmUgdGhhdCBtZXRob2Qgc2luY2UgdGhlIGJyZWFrcG9pbnRzIG1heSBkaXZlcmdlIGZyb20gdGhlIG9sZCBVSS5cbkBtaXhpbiBpcy1zY3JlZW4tc2l6ZSgkbWVkaWE6IGFsbCwgJG9yaWVudGF0aW9uOiBub25lKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS1tb2JpbGUtc2l6ZSwgbWF4LXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBxdWVyeS1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS1sYXB0b3Atc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBsYW5kc2NhcGUsICRkZXZpY2UtbGFuZHNjYXBlLW1vYmlsZS1zaXplICsgMSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLXRhYmxldC1zaXplLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRvcmllbnRhdGlvbiA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cblxuQG1peGluIHBhZ2UtcGFkZGluZyB7XG4gICAgcGFkZGluZy1sZWZ0OiAkc3BhY2luZy1zbWFsbDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy1zbWFsbDtcbn1cblxuLy8gRm9udCBNaXhpbnNcbiRmb250LW1ja2luc2V5LXNhbnM6IFwiTWNLaW5zZXkgU2Fuc1wiO1xuJGZvbnQtdGhlaW5oYXJkdDogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4kZm9udC1ib3dlcjogXCJCb3dlclwiO1xuXG5AbWl4aW4gYm93ZXItYm9sZCB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWJvd2VyO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBtY2tpbnNleS1zYW5zIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtbWNraW5zZXktc2FucztcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWl4aW4gZGlzcGxheS0xIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDcycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiA0cmVtOyAvLyA2NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4NzsgLy8gNzZweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMiB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjIxNDsgLy8gNjhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNzVyZW07IC8vIDYwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuICAgIH1cbn1cblxuQG1peGluIGRpc3BsYXktMyB7XG4gICAgQGluY2x1ZGUgYm93ZXItYm9sZDtcbiAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDYwcHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAzLjVyZW07IC8vIDU2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS00IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogM3JlbTsgLy8gNDhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE2NjsgLy8gNTZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuMjVyZW07IC8vIDUycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTUzOyAvLyA2NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS01IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjgzMzsgLy8gMzRweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjQyOyAvLyA0MHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS03IHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyOHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTEge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA0OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi43NXJlbTsgLy8gNDRweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xODE7IC8vIDUycHhcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nLTIge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTExOyAvLyA0NHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi41cmVtOyAvLyA0MHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNDhweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMyB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICBsaW5lLWhlaWdodDogMS4xMjU7IC8vIDM2cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjI1cmVtOyAvLyAzNnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjIyMjsgLy8gNDRweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICBsaW5lLWhlaWdodDogMS4xNDI7IC8vIDMycHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAycmVtOyAvLyAzMnB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuNXJlbTsgLy8gMjRweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzsgLy8gMjg4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctNiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDEuMjVyZW07IC8vIDIwcHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1NTsgLy8gMjhweFxuICAgIH1cbn1cblxuQG1peGluIGJvZHktZGVmYXVsdCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNnB4XG4gICAgfVxufVxuXG4vLy8gRG9lc250IGV4aXN0IGluIE1EUy5cbkBtaXhpbiBib2R5LXRpbnkge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtOyAvLyAxMnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuNDsgLy8gMjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDFyZW07IC8vIDE2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsgLy8gMjRweFxuICAgIH1cbn1cblxuQG1peGluIGZvcm0tbGFiZWwge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LXRoZWluaGFyZHQ7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBwbGFjZWhvbGRlci1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGNvbG9yOiAkcGxhY2Vob2xkZXItY29sb3I7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbn1cblxuQG1peGluIGNoaXAtbGFiZWwge1xuICAgIEBpbmNsdWRlIG1ja2luc2V5LXNhbnM7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG59XG5cbkBtaXhpbiBjaGVja2JveC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGNvbG9yOiBibGFjaztcbn1cblxuLy8gYm9yZGVyc1xuXG5AbWl4aW4gbWNrLWNoZWNrYm94LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay10aGluLWJ1dHRvbi1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRiYWNrZ3JvdW5kLWNoZWNrYm94LWRpc2FibGVkO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXI7XG59XG5cbkBtaXhpbiBtY2stY29udGVudC1ib3JkZXItbGlnaHQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBib3JkZXItY29sb3I6ICRzZWxlY3RlZC1vcHRpb247XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5AbWl4aW4gbWNrLWNhcmQtY29udGVudC1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyLWxpZ2h0O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRyZXN1bHRzLWxpc3QtYmFja2dyb3VuZC1jb2xvcjtcbn1cblxuXG4vLyBmdW5jdGlvbnNcblxuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG5AbWl4aW4gbWF4LWxpbmVzKCRjb3VudCkge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiAkY291bnQ7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbn1cblxuLy8gaW1hZ2VzXG5AbWl4aW4gbWNrLWljb24oJHdpZHRoLCAkYXNzZXQsICRoZWlnaHQ6ICR3aWR0aCwgICRhc3NldFBhdGg6IFwibGlicy91aS9zcmMvbGliL2ljb25zXCIsKSB7XG4gICAgd2lkdGg6ICR3aWR0aDtcbiAgICBoZWlnaHQ6ICRoZWlnaHQ7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiI3skYXNzZXRQYXRofS8jeyRhc3NldH1cIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuXG5cbkBtaXhpbiBtY2stc21hbGwtaWNvbigkbW9iaWxlLWFzc2V0LCAkZGVza3RvcC1hc3NldDogJG1vYmlsZS1hc3NldCkge1xuICAgIEBpbmNsdWRlIG1jay1pY29uKDE2cHgsICRhc3NldDogJG1vYmlsZS1hc3NldCk7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIEBpbmNsdWRlIG1jay1pY29uKDI0cHgsICRhc3NldDogJGRlc2t0b3AtYXNzZXQpO1xuICAgIH1cbn1cblxuLy8gc2tlbGV0b25cbkBtaXhpbiBza2VsZXRvbi1iZyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWltYWdlLXNpemUge1xuICAgIHdpZHRoOiA4MXB4O1xuICAgIGhlaWdodDogODJweDtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKGRlc2t0b3ApIHtcbiAgICAgICAgd2lkdGg6IDIxOXB4O1xuICAgICAgICBoZWlnaHQ6IDExOXB4O1xuICAgIH1cbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLXN0YXR1cy1zaXplIHtcbiAgICB3aWR0aDogMTE3cHg7XG4gICAgaGVpZ2h0OiA3OHB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMTE3cHg7XG4gICAgICAgIGhlaWdodDogNzhweDtcbiAgICB9XG59XG4iLCIvKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiRjb2xvci1icmFuZC1lbGVjdHJpYy1ibHVlOiAjMjI1MWZmO1xuJGNvbG9yLWJyYW5kLWRlZXAtYmx1ZTogIzA1MWMyYztcbiRjb2xvci1icmFuZC1jeWFuOiAjMDBhOWY0O1xuXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGZvbnQtZGFyazogIzAwMDtcbiRmb250LWxpZ2h0OiAjZmZmO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcbiRncmVlbjE6ICMyMTk2NTM7XG5cbiRwZW5kaW5nOiAjZmZiMzAwO1xuJHBlbmRpbmctbGlnaHQ6IGxpZ2h0ZW4oJHBlbmRpbmcsIDEwKTtcbiRwZW5kaW5nLWRhcms6IGRhcmtlbigkcGVuZGluZywgMTApO1xuXG4kZXJyb3I6ICNlNTM5MzU7XG4kZXJyb3ItbGlnaHQ6IGxpZ2h0ZW4oJGVycm9yLCAxMCk7XG4kZXJyb3ItZGFyazogZGFya2VuKCRlcnJvciwgMTApO1xuXG4kY29sb3ItcHJpbWFyeTogIzE5MzdlYTtcbiRjb2xvci1wcmltYXJ5LWxpZ2h0OiBsaWdodGVuKCRjb2xvci1wcmltYXJ5LCAxMCk7XG4kY29sb3ItcHJpbWFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcblxuJGNvbG9yLXNlY29uZGFyeTogIzQyODVGNDtcbiRjb2xvci1zZWNvbmRhcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuJGNvbG9yLXNlY29uZGFyeS1kYXJrOiBkYXJrZW4oJGNvbG9yLXNlY29uZGFyeSwgMTApO1xuXG4kYmFja2dyb3VuZDogI2YwZjBmMDtcbiRmb290ZXItYmFjazogIzI2MzIzODtcbiRoZWFkZXItYmFjazogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMDUxQzJDLCAjMDUxQzJDIDQwJSwgIzBCMjQ1MyA2MCUsICMxRjQwRTYgMTAwJSk7XG5cbiRjb2xvci10ZXJuYXJ5OiAjMDUxYzJjO1xuXG4vKj09PT09PT09PT09KlxcXG58fCAgIEZvbnRzICAgfHxcblxcKj09PT09PT09PT09Ki9cblxuJGZvbnQtc3RhY2s6IFwiVGhlaW5oYXJkdFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuXG4kaGVhZGluZy1mb250OiBcIkxhcmlzaE1jS2luc2V5XCIsICdHZW9yZ2lhJywgc2VyaWY7XG4kZm9udDogJGZvbnQtc3RhY2s7XG5cbiRmb250LWZhbWlseS1wcmltYXJ5OiBcIk1jS2luc2V5IFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBDYWxpYnJpLCBDb3JiZWwsIEhlbHZldGljYSwgUm9ib3RvLCBEcm9pZCwgc2Fucy1zZXJpZjtcbiRmb250LWZhbWlseS1zZWNvbmRhcnk6IFwiQm93ZXJcIiwgR2VvcmdpYSwgXCJUaW1lcyBOZXcgUm9tYW5cIiBzZXJpZjtcblxuJGJhc2Utc2l6ZTogMTZweDtcbiR0YWJsZXQtc2l6ZTogMTZweDtcbiRtb2JpbGUtc2l6ZTogMTZweDtcblxuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG5cbiRicmVhay1tb2JpbGU6IDQ1MHB4O1xuJGJyZWFrLXRhYmxldDogODAwcHg7XG4kYnJlYWstbGFwdG9wOiAxMDI0cHg7XG5cbiRicmVhay1sYW5kc2NhcGUtbW9iaWxlOiA4MDBweDtcbiRicmVhay1sYW5kc2NhcGUtdGFibGV0OiAxMDQ4cHg7XG4kYnJlYWstbGFuZHNjYXBlLWxhcHRvcDogMTI4MHB4O1xuIiwiQGltcG9ydCAnLi92YXJpYWJsZXMnO1xuXG5AbWl4aW4gaGlkZS10ZXh0LW92ZXJmbG93IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbkBtaXhpbiBib3gtc2hhZG93KCRjb2xvcjogIzAwMCwgJGRlcHRoOiAxKSB7XG4gICAgYm94LXNoYWRvdzogMCAxcHggM3B4IDFweCAqICgkZGVwdGggLSAxKSByZ2JhKCMwMDAsIC4yKSxcbiAgICAgICAgICAgICAgICAwIDFweCAxcHggMCByZ2JhKCMwMDAsIC4xNCksXG4gICAgICAgICAgICAgICAgMCAycHggMXB4IC0xcHggcmdiYSgjMDAwLCAuMTIpO1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuQG1peGluIHJlc3BvbmQtdG8oJG1lZGlhKSB7XG4gICAgQGlmICRtZWRpYSA9PSBtb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbW9iaWxlLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG5vdC1tb2JpbGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3Age1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYXB0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9ICBAZWxzZSBpZiAkbWVkaWEgPT0gbGF0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9QGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKCRtZWRpYSA9PSB0YWJsZXQtbW9iaWxlIG9yICRtZWRpYSA9PSBub3QtZGVza3RvcCkge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gZGVza3RvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBsYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIkBpbXBvcnQgXCJsaWJzL3VpL3NyYy9saWIvbWl4aW5zXCI7XG5AaW1wb3J0ICdtaXhpbnMnO1xuXG4ucm9vbS1sb2NhdGlvbiB7XG4gICAgLmhlYWRlciB7XG4gICAgICAgIHotaW5kZXg6IDEwO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgIH1cbn1cbi5ib29raW5nLXZpZXcge1xuICAgIGhlaWdodDogMTI0cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAjRENEQ0RDO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLm1hcC13cmFwcGVyIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB0b3A6IC05MCU7XG4gICAgfVxufVxuXG4ubWFwLXdyYXBwZXIge1xuICAgIGhlaWdodDogMzY4cHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjQTE5RjlGO1xuICAgIFxuICAgICYuZXhwYW5kZWQge1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgICAgIHotaW5kZXg6IDQ7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjA7XG4gICAgfVxuICAgIGEtbWFwIHtcbiAgICAgICAgY3Vyc29yOiBtb3ZlO1xuICAgICAgICAmLm5wIHtcbiAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAuZm9vdGVyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHBhZGRpbmc6IDI0cHggMTZweDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgICAgICAgaGVpZ2h0OiA5NnB4O1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgID4gZGl2IHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG4gICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgICB3aWR0aDogMjEycHg7XG4gICAgICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgICAgICAgIEBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC5zdWIge1xuICAgICAgICB6LWluZGV4OiAyO1xuICAgICAgICBoZWlnaHQ6IDIwMHB4O1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogODlweDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHBhZGRpbmc6IDAgMTVweDtcbiAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE3OS44ZGVnLCByZ2JhKDUsIDI4LCA0NCwgMC4xNSkgMC4xNyUsIHJnYmEoMCwgMCwgMCwgMCkgODEuOTIlKTtcbiAgICAgICAgQGluY2x1ZGUgcmVzcG9uZC10byhtb2JpbGUpIHtcbiAgICAgICAgICAgIHRvcDogNjdweDtcbiAgICAgICAgfVxuICAgICAgICA+ZGl2IHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDEwMjRweDtcbiAgICAgICAgICAgIG1hcmdpbjogMzBweCBhdXRvO1xuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0UwRTBFMDsgICAgICAgICAgICAgICBcbiAgICAgICAgICAgID5kaXYge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDE0cHggMTRweCAwIDE0cHg7XG4gICAgICAgICAgICAgICAgJi5tYXAtY29udHJvbHMge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNnB4IDE0cHggMDtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcblxuICAgICAgICAgICAgICAgICAgICAubWNrLXJvd3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC5tYXAtY29udHJvbHMtY29udGFpbmVye1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHVuc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogdW5zZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAubWNrLWNvbHVtbntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9ue1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAubWNrLXN0cm9rZWQtYnV0dG9ue1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogNDBweCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAubGVnZW5kLWNvbnRhaW5lcntcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMCAwIDAgMTVweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxNjBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC5sZWdlbmQtZGl2aWRlcntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwcHggIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogNDBweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIC5sZWdlbmQtY29udGFpbmVyIC5sZWdlbmQtZGl2aWRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAtY29udHJvbHMtY29udGFpbmVyIC5tY2stc3Ryb2tlZC1idXR0b257XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAzMnB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAtaW5mby1idXR0b257XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgLmxlZ2VuZC1jb250YWluZXJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxNTBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAmLnRpdGxlIHtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDE0cHg7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC50aXRsZS1uYW1lIHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC50aXRsZS1kZXNjcmlwdGlvbiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjNzU3NTc1O1xuICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMnB4IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIHJlc3BvbmQtdG8obW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGgxIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjNzU3NTc1O1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4ubWFwLWljb24ge1xuICAgICYtaW5mbyB7XG4gICAgICAgIEBpbmNsdWRlIG1jay1zbWFsbC1pY29uKCdpbmZvLWljb24tc21hbGwuc3ZnJywgJ2luZm8taWNvbi1sYXJnZS5zdmcnKTtcbiAgICB9XG59Il19 */"], + styles: ["/**\n * Spacing\n */\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n/*===================*\\\n|| Icon sizes ||\n\\*===================*/\n/**\n * Makes text have maximum lines with ellipsis. Works on most modern browsers except\n * of Firefox..\n */\n/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n.room-location .header {\n z-index: 10;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n display: block;\n padding: 0;\n}\n.booking-view {\n height: 270px;\n margin-bottom: 20px;\n border: 2px solid #DCDCDC;\n box-sizing: border-box;\n border-radius: 4px;\n overflow: hidden;\n}\n.booking-view .map-wrapper {\n position: relative;\n top: -40%;\n}\n.map-wrapper {\n height: 374px;\n width: 100%;\n overflow: hidden;\n border: 1px solid #A19F9F;\n}\n.map-wrapper.expanded {\n position: fixed;\n top: 0;\n left: 0;\n height: 100% !important;\n z-index: 4;\n background-color: #f0f0f0;\n}\n.map-wrapper a-map {\n cursor: move;\n}\n.map-wrapper a-map.np {\n pointer-events: none;\n cursor: default;\n}\n.map-wrapper .footer {\n position: absolute;\n bottom: 0;\n left: 0;\n padding: 24px 16px;\n border: 1px solid #E6E6E6;\n height: 96px;\n width: 100%;\n background-color: white;\n}\n.map-wrapper .footer > div {\n width: 100%;\n}\n.map-wrapper .footer button {\n width: 212px;\n margin: 0 auto;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .footer button {\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .footer button {\n width: 100%;\n }\n}\n.map-wrapper .sub {\n z-index: 2;\n height: 200px;\n position: absolute;\n top: 89px;\n left: 0;\n width: 100%;\n padding: 0 15px;\n background: linear-gradient(179.8deg, rgba(5, 28, 44, 0.15) 0.17%, rgba(0, 0, 0, 0) 81.92%);\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .sub {\n top: 67px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .sub {\n top: 67px;\n }\n}\n.map-wrapper .sub .map-controls {\n display: flex;\n justify-content: space-between;\n position: absolute;\n right: 0;\n top: -17px;\n}\n.map-wrapper .sub .map-controls .mck-row {\n visibility: hidden;\n}\n.map-wrapper .sub .map-controls .map-controls-container {\n position: unset;\n margin-top: 0;\n box-shadow: none;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .sub .map-controls .map-controls-container {\n position: unset;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .sub .map-controls .map-controls-container {\n position: unset;\n }\n}\n.map-wrapper .sub .map-controls .map-controls-container .mck-column {\n flex-direction: row;\n}\n.map-wrapper .sub .map-controls .map-controls-container button {\n border-radius: 0;\n}\n.map-wrapper .sub .map-controls .map-controls-container .mck-stroked-button {\n height: 40px !important;\n}\n.map-wrapper .sub .map-controls .legend-container {\n margin: 0 0 0 15px;\n width: 160px;\n}\n.map-wrapper .sub .map-controls .legend-container .mat-form-field-appearance-outline .mat-form-field-wrapper {\n margin: 0;\n}\n.map-wrapper .sub .map-controls .legend-container .legend-divider {\n height: 40px !important;\n}\n.map-wrapper .sub .map-controls .mck-form-input mat-form-field .mat-form-field-outline {\n height: 40px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .sub .map-controls {\n position: relative;\n right: unset;\n top: unset;\n }\n .map-wrapper .sub .map-controls .mck-form-input mat-form-field .mat-form-field-outline,\n.map-wrapper .sub .map-controls .legend-container .legend-divider,\n.map-wrapper .sub .map-controls .map-controls-container .mck-stroked-button {\n height: 32px !important;\n }\n .map-wrapper .sub .map-controls .map-info-button {\n display: none;\n }\n .map-wrapper .sub .map-controls .legend-container {\n margin: 0;\n width: 150px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .sub .map-controls {\n position: relative;\n right: unset;\n top: unset;\n }\n .map-wrapper .sub .map-controls .mck-form-input mat-form-field .mat-form-field-outline,\n.map-wrapper .sub .map-controls .legend-container .legend-divider,\n.map-wrapper .sub .map-controls .map-controls-container .mck-stroked-button {\n height: 32px !important;\n }\n .map-wrapper .sub .map-controls .map-info-button {\n display: none;\n }\n .map-wrapper .sub .map-controls .legend-container {\n margin: 0;\n width: 150px;\n }\n}\n.map-wrapper .sub > div {\n background-color: white;\n width: 100%;\n max-width: 1024px;\n margin: 30px auto;\n border: 1px solid #E0E0E0;\n}\n.map-wrapper .sub > div > div {\n padding: 14px 14px 0 14px;\n}\n.map-wrapper .sub > div > div.map-controls {\n display: flex;\n padding: 16px 14px 0;\n width: 100%;\n justify-content: space-between;\n}\n.map-wrapper .sub > div > div.map-controls .mck-row {\n visibility: hidden;\n}\n.map-wrapper .sub > div > div.map-controls .map-controls-container {\n position: unset;\n margin-top: 0;\n box-shadow: none;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .sub > div > div.map-controls .map-controls-container {\n position: unset;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .sub > div > div.map-controls .map-controls-container {\n position: unset;\n }\n}\n.map-wrapper .sub > div > div.map-controls .map-controls-container .mck-column {\n flex-direction: row;\n}\n.map-wrapper .sub > div > div.map-controls .map-controls-container button {\n border-radius: 0;\n}\n.map-wrapper .sub > div > div.map-controls .map-controls-container .mck-stroked-button {\n height: 40px !important;\n}\n.map-wrapper .sub > div > div.map-controls .legend-container {\n margin: 0 0 0 15px;\n width: 160px;\n}\n.map-wrapper .sub > div > div.map-controls .legend-container .mat-form-field-appearance-outline .mat-form-field-wrapper {\n margin: 0;\n}\n.map-wrapper .sub > div > div.map-controls .legend-container .legend-divider {\n height: 40px !important;\n}\n.map-wrapper .sub > div > div.map-controls .mck-form-input mat-form-field .mat-form-field-outline {\n height: 40px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .sub > div > div.map-controls .mck-form-input mat-form-field .mat-form-field-outline,\n.map-wrapper .sub > div > div.map-controls .legend-container .legend-divider,\n.map-wrapper .sub > div > div.map-controls .map-controls-container .mck-stroked-button {\n height: 32px !important;\n }\n .map-wrapper .sub > div > div.map-controls .map-info-button {\n display: none;\n }\n .map-wrapper .sub > div > div.map-controls .legend-container {\n margin: 0;\n width: 150px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .sub > div > div.map-controls .mck-form-input mat-form-field .mat-form-field-outline,\n.map-wrapper .sub > div > div.map-controls .legend-container .legend-divider,\n.map-wrapper .sub > div > div.map-controls .map-controls-container .mck-stroked-button {\n height: 32px !important;\n }\n .map-wrapper .sub > div > div.map-controls .map-info-button {\n display: none;\n }\n .map-wrapper .sub > div > div.map-controls .legend-container {\n margin: 0;\n width: 150px;\n }\n}\n.map-wrapper .sub > div > div.title {\n padding-bottom: 14px;\n}\n.map-wrapper .sub > div > div.title .title-and-map-control {\n align-items: flex-start;\n position: relative;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .sub > div > div.title .title-and-map-control {\n flex-direction: column;\n }\n .map-wrapper .sub > div > div.title .title-and-map-control .map-controls {\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .sub > div > div.title .title-and-map-control {\n flex-direction: column;\n }\n .map-wrapper .sub > div > div.title .title-and-map-control .map-controls {\n width: 100%;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .sub > div > div.title {\n padding-bottom: 4px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .sub > div > div.title {\n padding-bottom: 4px;\n }\n}\n.map-wrapper .sub > div > div .title-name {\n margin: 0;\n font-size: 20px;\n font-weight: 400;\n}\n.map-wrapper .sub > div > div .title-description {\n color: #757575;\n font-size: 14px;\n margin: 2px 0;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .map-wrapper .sub > div > div h1 {\n font-size: 18px;\n }\n .map-wrapper .sub > div > div p {\n color: #757575;\n font-size: 14px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .map-wrapper .sub > div > div h1 {\n font-size: 18px;\n }\n .map-wrapper .sub > div > div p {\n color: #757575;\n font-size: 14px;\n }\n}\n.map-icon-info {\n width: 16px;\n height: 16px;\n background-image: url('info-icon-small.svg');\n background-size: contain;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .map-icon-info {\n width: 24px;\n height: 24px;\n background-image: url('info-icon-large.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .map-icon-info {\n width: 24px;\n height: 24px;\n background-image: url('info-icon-large.svg');\n background-size: contain;\n }\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2xpYnMvdWkvc3JjL2xpYi92YXJzLnNjc3MiLCJhcHBzL3N0YWZmL3NyYy9hcHAvYm9va2luZy9yb29tLWxvY2F0aW9uLXByZXZpZXcvcm9vbS1sb2NhdGlvbi1wcmV2aWV3LmNvbXBvbmVudC5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy91aS9zcmMvbGliL21peGlucy5zY3NzIiwiL2hvbWUvcnVubmVyL3dvcmsvbWNraW5zZXktY29udmVyZ2UvbWNraW5zZXktY29udmVyZ2UvbGlicy9sZWdhY3ktdWkvc3JjL2xpYi9zdHlsZXMvdmFyaWFibGVzLnNjc3MiLCIvaG9tZS9ydW5uZXIvd29yay9tY2tpbnNleS1jb252ZXJnZS9tY2tpbnNleS1jb252ZXJnZS9saWJzL2xlZ2FjeS11aS9zcmMvbGliL3N0eWxlcy9taXhpbnMuc2NzcyIsIi9ob21lL3J1bm5lci93b3JrL21ja2luc2V5LWNvbnZlcmdlL21ja2luc2V5LWNvbnZlcmdlL2FwcHMvc3RhZmYvc3JjL2FwcC9ib29raW5nL3Jvb20tbG9jYXRpb24tcHJldmlldy9yb29tLWxvY2F0aW9uLXByZXZpZXcuY29tcG9uZW50LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMkNBOztFQUFBO0FBcUNBOztzQkFBQTtBQWFBO0VBQ0ksZ0JBOUZNO0VBK0ZOLHVCQTdGYztBQ09sQjtBRHlGQTs7c0JBQUE7QUVrT0E7OztFQUFBO0FDcFVBOzswQkFBQTtBQVFBOzswQkFBQTtBQWtDQTs7Y0FBQTtBQWdCQTs7c0JBQUE7QUM1Q0E7O3NCQUFBO0FDVkk7RUFDSSxXQUFBO0VBQ0Esa0JBQUE7RUFDQSxNQUFBO0VBQ0EsT0FBQTtFQUNBLFdBQUE7RUFDQSxjQUFBO0VBQ0EsVUFBQTtBSjhCUjtBSTNCQTtFQUNJLGFBQUE7RUFDQSxtQkFB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MURzQjtJQUNJLGFBQUE7RUo0RDFCO0VJekRzQjtJQUNJLFNBQUE7SUFDQSxZQUFBO0VKMkQxQjtBQUNGO0FDN1FZO0VHcU1ZOzs7SUFHSSx1QkFBQTtFSjJFMUI7RUl4RXNCO0lBQ0ksYUFBQTtFSjBFMUI7RUl2RXNCO0lBQ0ksU0FBQTtJQUNBLFlBQUE7RUp5RTFCO0FBQ0Y7QUl0RWdCO0VBQ0ksb0JBQUE7QUp3RXBCO0FJdkVvQjtFQUNJLHVCQUFBO0VBQ0Esa0JBQUE7QUp5RXhCO0FDbFNZO0VHdU5RO0lBSVEsc0JBQUE7RUoyRTFCO0VJMUUwQjtJQUNJLFdBQUE7RUo0RTlCO0FBQ0Y7QUMxU1k7RUd1TlE7SUFJUSxzQkFBQTtFSm1GMUI7RUlsRjBCO0lBQ0ksV0FBQTtFSm9GOUI7QUFDRjtBR3ZTUTtFQzBNUTtJQWVRLG1CQUFBO0VKa0Z0QjtBQUNGO0FHelNRO0VDdU1RO0lBZVEsbUJBQUE7RUp1RnRCO0FBQ0Y7QUlyRmdCO0VBQ0ksU0FBQTtFQUNBLGVBQUE7RUFDQSxnQkFBQTtBSnVGcEI7QUlyRmdCO0VBQ0ksY0FBQTtFQUNBLGVBQUE7RUFDQSxhQUFBO0FKdUZwQjtBRzNUUTtFQ3VPWTtJQUNJLGVBQUE7RUp1RnRCO0VJckZrQjtJQUNJLGNBQUE7SUFDQSxlQUFBO0VKdUZ0QjtBQUNGO0FHalVRO0VDb09ZO0lBQ0ksZUFBQTtFSmdHdEI7RUk5RmtCO0lBQ0ksY0FBQTtJQUNBLGVBQUE7RUpnR3RCO0FBQ0Y7QUl4Rkk7RUh3RUEsV0FRa0I7RUFQbEIsWUFPa0I7RUFObEIsNENBQUE7RUFDQSx3QkFBQTtBRG9CSjtBQ25XWTtFR29RUjtJSHdFQSxXQVdzQjtJQVZ0QixZQVVzQjtJQVR0Qiw0Q0FBQTtJQUNBLHdCQUFBO0VEMkJGO0FBQ0Y7QUMzV1k7RUdvUVI7SUh3RUEsV0FXc0I7SUFWdEIsWUFVc0I7SUFUdEIsNENBQUE7SUFDQSx3QkFBQTtFRG1DRjtBQUNGIiwiZmlsZSI6ImFwcHMvc3RhZmYvc3JjL2FwcC9ib29raW5nL3Jvb20tbG9jYXRpb24tcHJldmlldy9yb29tLWxvY2F0aW9uLXByZXZpZXcuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIkcHJpbWFyeTogIzFGNDBFNjtcbiRmb3JtLWxhYmVsOiAjMDUxQzJDO1xuJHNlY29uZGFyeS1sYWJlbDogIzc2NzY3NjtcbiRib3JkZXI6ICNCM0IzQjM7XG4kYmFja2dyb3VuZC1jaGVja2JveC1kaXNhYmxlZDogI0QwRDBEMDtcbiRjaGlwLWNvbG9yOiAjMzMzMzMzO1xuJHBsYWNlaG9sZGVyLWNvbG9yOiAjN0Y3RjdGO1xuJGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7XG4kcGFnZS1iYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZBO1xuJHNlbGVjdGVkLW9wdGlvbjogI0U2RTZFNjtcbiRjb2xvci1icmFuZC15ZWxsb3c6ICNmZmQwNDg7XG4kbGlnaHQteWVsbG93OiAjZmZmM2NlO1xuJGNvYWNobWFyay10ZXh0OiAjNmY0ZDAwO1xuJGVycm9yLWNvbG9yOiAjRTEyRTQwO1xuJG5vLWZpbHRlcnMtY29sb3I6ICNCQ0JDQkM7XG4kcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I6ICNGNEY0RjQ7XG4kcHJpbWFyeS1oaWdobGlnaHQ6ICMyMjUxRkY7XG4kc2Nyb2xsYmFyLWNvbG9yOiAjNzU3NTc1O1xuXG4kYXZhaWxhYmxlLWNvbG9yOiAjNUQ5RDUyO1xuJGF2YWlsYWJsZS1ieS1yZXF1ZXN0LWNvbG9yOiAjRjVCNTNGO1xuJGluLXVzZS1jb2xvcjogI0Q0NDgzRTtcbiRub3QtYm9va2FibGUtY29sb3I6ICNDQ0NDQ0M7XG5cbiRtb2RhbC1ib2R5LWhlYWRpbmc6ICM0RDRENEQ7XG4kYWxlcnQtb3ZlcmxheS1iZzogcmdiYSg1LCAyOCwgNDQsIDAuODUpO1xuXG4kc3VjY2VzczogIzQzYTA0NztcbiRzdWNjZXNzLWxpZ2h0OiBsaWdodGVuKCRzdWNjZXNzLCAxMCk7XG4kc3VjY2Vzcy1kYXJrOiBkYXJrZW4oJHN1Y2Nlc3MsIDEwKTtcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2FjaG1hcmstYmc6ICNFQkVCRjY7XG4kY29hY2htYXJrLWRhcmstdGV4dDogIzFCMUIxOTtcbiRlcnJvci10ZXh0OiAjZmZmO1xuXG4vKipcbiAqIFNwYWNpbmdcbiAqL1xuXG4vLyA0cHhcbiRzcGFjaW5nLXNtYWxsZXN0OiAwLjI1cmVtO1xuXG4vLyA4cHhcbiRzcGFjaW5nLXh4c21hbGw6IDAuNXJlbTtcblxuLy8gMTJweFxuJHNwYWNpbmcteHNtYWxsOiAwLjc1cmVtO1xuXG4vLyAxNnB4XG4kc3BhY2luZy1zbWFsbDogMXJlbTtcblxuLy8gMjBweFxuJHNwYWNpbmctc21hbGwtbWVkaXVtOiAxLjI1cmVtO1xuXG4vLyAyNHB4XG4kc3BhY2luZy1tZWRpdW06IDEuNXJlbTtcblxuLy8gMjhweFxuJHNwYWNpbmctbWVkaXVtLWxhcmdlOiAxLjc1cmVtO1xuXG4vLyAzMnB4XG4kc3BhY2luZy1sYXJnZTogMnJlbTtcblxuLy8gNDhweFxuJHNwYWNpbmcteGxhcmdlOiAzcmVtO1xuXG4vLyA2NHB4XG4kc3BhY2luZy14eGxhcmdlOiA0cmVtO1xuXG4vLyA5NnB4XG4kc3BhY2luZy1sYXJnZXN0OiA2cmVtO1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGRldmljZS1tb2JpbGUtc2l6ZTogNDUwcHg7XG4kZGV2aWNlLXRhYmxldC1zaXplOiA4MDBweDtcbiRkZXZpY2UtbGFwdG9wLXNpemU6IDEwMjRweDtcblxuJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemU6IDgwMHB4O1xuJGRldmljZS1sYW5kc2NhcGUtdGFibGV0LXNpemU6IDEwNDhweDtcbiRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplOiAxMjgwcHg7XG5cblxuOmV4cG9ydCB7XG4gICAgcHJpbWFyeTogJHByaW1hcnk7XG4gICAgc2Vjb25kYXJ5TGFiZWw6ICRzZWNvbmRhcnktbGFiZWw7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBJY29uIHNpemVzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4kaWNvbi1zbWFsbDogMTZweDtcbiRpY29uLW1lZGl1bTogMjRweDtcbiRpY29uLWxhcmdlOiAzMnB4O1xuJGljb24teGxhcmdlOiA0OHB4O1xuIiwiLyoqXG4gKiBTcGFjaW5nXG4gKi9cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuOmV4cG9ydCB7XG4gIHByaW1hcnk6ICMxRjQwRTY7XG4gIHNlY29uZGFyeUxhYmVsOiAjNzY3Njc2O1xufVxuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgSWNvbiBzaXplcyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuLyoqXG4gKiBNYWtlcyB0ZXh0IGhhdmUgbWF4aW11bSBsaW5lcyB3aXRoIGVsbGlwc2lzLiBXb3JrcyBvbiBtb3N0IG1vZGVybiBicm93c2VycyBleGNlcHRcbiAqIG9mIEZpcmVmb3guLlxuICovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgTURTIENvbG91cnMgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT09PT09KlxcXG58fCAgQXBwbGljYXRpb24gQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuLyo9PT09PT09PT09PT09PT09PT09KlxcXG58fCAgIE1lZGlhIFF1ZXJpZXMgICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PSovXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cbi5yb29tLWxvY2F0aW9uIC5oZWFkZXIge1xuICB6LWluZGV4OiAxMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogMDtcbn1cblxuLmJvb2tpbmctdmlldyB7XG4gIGhlaWdodDogMjcwcHg7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNEQ0RDREM7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5ib29raW5nLXZpZXcgLm1hcC13cmFwcGVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IC00MCU7XG59XG5cbi5tYXAtd3JhcHBlciB7XG4gIGhlaWdodDogMzc0cHg7XG4gIHdpZHRoOiAxMDAlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBib3JkZXI6IDFweCBzb2xpZCAjQTE5RjlGO1xufVxuLm1hcC13cmFwcGVyLmV4cGFuZGVkIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xuICB6LWluZGV4OiA0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYwO1xufVxuLm1hcC13cmFwcGVyIGEtbWFwIHtcbiAgY3Vyc29yOiBtb3ZlO1xufVxuLm1hcC13cmFwcGVyIGEtbWFwLm5wIHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIGN1cnNvcjogZGVmYXVsdDtcbn1cbi5tYXAtd3JhcHBlciAuZm9vdGVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHBhZGRpbmc6IDI0cHggMTZweDtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgaGVpZ2h0OiA5NnB4O1xuICB3aWR0aDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG59XG4ubWFwLXdyYXBwZXIgLmZvb3RlciA+IGRpdiB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLm1hcC13cmFwcGVyIC5mb290ZXIgYnV0dG9uIHtcbiAgd2lkdGg6IDIxMnB4O1xuICBtYXJnaW46IDAgYXV0bztcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tYXAtd3JhcHBlciAuZm9vdGVyIGJ1dHRvbiB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWFwLXdyYXBwZXIgLmZvb3RlciBidXR0b24ge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG4ubWFwLXdyYXBwZXIgLnN1YiB7XG4gIHotaW5kZXg6IDI7XG4gIGhlaWdodDogMjAwcHg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiA4OXB4O1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMCAxNXB4O1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTc5LjhkZWcsIHJnYmEoNSwgMjgsIDQ0LCAwLjE1KSAwLjE3JSwgcmdiYSgwLCAwLCAwLCAwKSA4MS45MiUpO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1hcC13cmFwcGVyIC5zdWIge1xuICAgIHRvcDogNjdweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tYXAtd3JhcHBlciAuc3ViIHtcbiAgICB0b3A6IDY3cHg7XG4gIH1cbn1cbi5tYXAtd3JhcHBlciAuc3ViIC5tYXAtY29udHJvbHMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDA7XG4gIHRvcDogLTE3cHg7XG59XG4ubWFwLXdyYXBwZXIgLnN1YiAubWFwLWNvbnRyb2xzIC5tY2stcm93IHtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuLm1hcC13cmFwcGVyIC5zdWIgLm1hcC1jb250cm9scyAubWFwLWNvbnRyb2xzLWNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiB1bnNldDtcbiAgbWFyZ2luLXRvcDogMDtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tYXAtd3JhcHBlciAuc3ViIC5tYXAtY29udHJvbHMgLm1hcC1jb250cm9scy1jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiB1bnNldDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tYXAtd3JhcHBlciAuc3ViIC5tYXAtY29udHJvbHMgLm1hcC1jb250cm9scy1jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiB1bnNldDtcbiAgfVxufVxuLm1hcC13cmFwcGVyIC5zdWIgLm1hcC1jb250cm9scyAubWFwLWNvbnRyb2xzLWNvbnRhaW5lciAubWNrLWNvbHVtbiB7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG59XG4ubWFwLXdyYXBwZXIgLnN1YiAubWFwLWNvbnRyb2xzIC5tYXAtY29udHJvbHMtY29udGFpbmVyIGJ1dHRvbiB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4ubWFwLXdyYXBwZXIgLnN1YiAubWFwLWNvbnRyb2xzIC5tYXAtY29udHJvbHMtY29udGFpbmVyIC5tY2stc3Ryb2tlZC1idXR0b24ge1xuICBoZWlnaHQ6IDQwcHggIWltcG9ydGFudDtcbn1cbi5tYXAtd3JhcHBlciAuc3ViIC5tYXAtY29udHJvbHMgLmxlZ2VuZC1jb250YWluZXIge1xuICBtYXJnaW46IDAgMCAwIDE1cHg7XG4gIHdpZHRoOiAxNjBweDtcbn1cbi5tYXAtd3JhcHBlciAuc3ViIC5tYXAtY29udHJvbHMgLmxlZ2VuZC1jb250YWluZXIgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtd3JhcHBlciB7XG4gIG1hcmdpbjogMDtcbn1cbi5tYXAtd3JhcHBlciAuc3ViIC5tYXAtY29udHJvbHMgLmxlZ2VuZC1jb250YWluZXIgLmxlZ2VuZC1kaXZpZGVyIHtcbiAgaGVpZ2h0OiA0MHB4ICFpbXBvcnRhbnQ7XG59XG4ubWFwLXdyYXBwZXIgLnN1YiAubWFwLWNvbnRyb2xzIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSB7XG4gIGhlaWdodDogNDBweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tYXAtd3JhcHBlciAuc3ViIC5tYXAtY29udHJvbHMge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICByaWdodDogdW5zZXQ7XG4gICAgdG9wOiB1bnNldDtcbiAgfVxuICAubWFwLXdyYXBwZXIgLnN1YiAubWFwLWNvbnRyb2xzIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSxcbi5tYXAtd3JhcHBlciAuc3ViIC5tYXAtY29udHJvbHMgLmxlZ2VuZC1jb250YWluZXIgLmxlZ2VuZC1kaXZpZGVyLFxuLm1hcC13cmFwcGVyIC5zdWIgLm1hcC1jb250cm9scyAubWFwLWNvbnRyb2xzLWNvbnRhaW5lciAubWNrLXN0cm9rZWQtYnV0dG9uIHtcbiAgICBoZWlnaHQ6IDMycHggIWltcG9ydGFudDtcbiAgfVxuICAubWFwLXdyYXBwZXIgLnN1YiAubWFwLWNvbnRyb2xzIC5tYXAtaW5mby1idXR0b24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLm1hcC13cmFwcGVyIC5zdWIgLm1hcC1jb250cm9scyAubGVnZW5kLWNvbnRhaW5lciB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHdpZHRoOiAxNTBweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5tYXAtd3JhcHBlciAuc3ViIC5tYXAtY29udHJvbHMge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICByaWdodDogdW5zZXQ7XG4gICAgdG9wOiB1bnNldDtcbiAgfVxuICAubWFwLXdyYXBwZXIgLnN1YiAubWFwLWNvbnRyb2xzIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSxcbi5tYXAtd3JhcHBlciAuc3ViIC5tYXAtY29udHJvbHMgLmxlZ2VuZC1jb250YWluZXIgLmxlZ2VuZC1kaXZpZGVyLFxuLm1hcC13cmFwcGVyIC5zdWIgLm1hcC1jb250cm9scyAubWFwLWNvbnRyb2xzLWNvbnRhaW5lciAubWNrLXN0cm9rZWQtYnV0dG9uIHtcbiAgICBoZWlnaHQ6IDMycHggIWltcG9ydGFudDtcbiAgfVxuICAubWFwLXdyYXBwZXIgLnN1YiAubWFwLWNvbnRyb2xzIC5tYXAtaW5mby1idXR0b24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLm1hcC13cmFwcGVyIC5zdWIgLm1hcC1jb250cm9scyAubGVnZW5kLWNvbnRhaW5lciB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHdpZHRoOiAxNTBweDtcbiAgfVxufVxuLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogMTAyNHB4O1xuICBtYXJnaW46IDMwcHggYXV0bztcbiAgYm9yZGVyOiAxcHggc29saWQgI0UwRTBFMDtcbn1cbi5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2IHtcbiAgcGFkZGluZzogMTRweCAxNHB4IDAgMTRweDtcbn1cbi5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2Lm1hcC1jb250cm9scyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmc6IDE2cHggMTRweCAwO1xuICB3aWR0aDogMTAwJTtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5tY2stcm93IHtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5tYXAtY29udHJvbHMtY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHVuc2V0O1xuICBtYXJnaW4tdG9wOiAwO1xuICBib3gtc2hhZG93OiBub25lO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5tYXAtY29udHJvbHMtY29udGFpbmVyIHtcbiAgICBwb3NpdGlvbjogdW5zZXQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLm1hcC1jb250cm9scy1jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiB1bnNldDtcbiAgfVxufVxuLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5tYXAtY29udHJvbHMtY29udGFpbmVyIC5tY2stY29sdW1uIHtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbn1cbi5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2Lm1hcC1jb250cm9scyAubWFwLWNvbnRyb2xzLWNvbnRhaW5lciBidXR0b24ge1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5tYXAtY29udHJvbHMtY29udGFpbmVyIC5tY2stc3Ryb2tlZC1idXR0b24ge1xuICBoZWlnaHQ6IDQwcHggIWltcG9ydGFudDtcbn1cbi5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2Lm1hcC1jb250cm9scyAubGVnZW5kLWNvbnRhaW5lciB7XG4gIG1hcmdpbjogMCAwIDAgMTVweDtcbiAgd2lkdGg6IDE2MHB4O1xufVxuLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5sZWdlbmQtY29udGFpbmVyIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICBtYXJnaW46IDA7XG59XG4ubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLmxlZ2VuZC1jb250YWluZXIgLmxlZ2VuZC1kaXZpZGVyIHtcbiAgaGVpZ2h0OiA0MHB4ICFpbXBvcnRhbnQ7XG59XG4ubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lIHtcbiAgaGVpZ2h0OiA0MHB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSxcbi5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2Lm1hcC1jb250cm9scyAubGVnZW5kLWNvbnRhaW5lciAubGVnZW5kLWRpdmlkZXIsXG4ubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLm1hcC1jb250cm9scy1jb250YWluZXIgLm1jay1zdHJva2VkLWJ1dHRvbiB7XG4gICAgaGVpZ2h0OiAzMnB4ICFpbXBvcnRhbnQ7XG4gIH1cbiAgLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5tYXAtaW5mby1idXR0b24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5sZWdlbmQtY29udGFpbmVyIHtcbiAgICBtYXJnaW46IDA7XG4gICAgd2lkdGg6IDE1MHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSxcbi5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2Lm1hcC1jb250cm9scyAubGVnZW5kLWNvbnRhaW5lciAubGVnZW5kLWRpdmlkZXIsXG4ubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi5tYXAtY29udHJvbHMgLm1hcC1jb250cm9scy1jb250YWluZXIgLm1jay1zdHJva2VkLWJ1dHRvbiB7XG4gICAgaGVpZ2h0OiAzMnB4ICFpbXBvcnRhbnQ7XG4gIH1cbiAgLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5tYXAtaW5mby1idXR0b24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYubWFwLWNvbnRyb2xzIC5sZWdlbmQtY29udGFpbmVyIHtcbiAgICBtYXJnaW46IDA7XG4gICAgd2lkdGg6IDE1MHB4O1xuICB9XG59XG4ubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi50aXRsZSB7XG4gIHBhZGRpbmctYm90dG9tOiAxNHB4O1xufVxuLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYudGl0bGUgLnRpdGxlLWFuZC1tYXAtY29udHJvbCB7XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA0NTBweCkge1xuICAubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi50aXRsZSAudGl0bGUtYW5kLW1hcC1jb250cm9sIHtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB9XG4gIC5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2LnRpdGxlIC50aXRsZS1hbmQtbWFwLWNvbnRyb2wgLm1hcC1jb250cm9scyB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdi50aXRsZSAudGl0bGUtYW5kLW1hcC1jb250cm9sIHtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB9XG4gIC5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2LnRpdGxlIC50aXRsZS1hbmQtbWFwLWNvbnRyb2wgLm1hcC1jb250cm9scyB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDQ1MHB4KSB7XG4gIC5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2LnRpdGxlIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogNHB4O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYudGl0bGUge1xuICAgIHBhZGRpbmctYm90dG9tOiA0cHg7XG4gIH1cbn1cbi5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2IC50aXRsZS1uYW1lIHtcbiAgbWFyZ2luOiAwO1xuICBmb250LXNpemU6IDIwcHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG59XG4ubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdiAudGl0bGUtZGVzY3JpcHRpb24ge1xuICBjb2xvcjogIzc1NzU3NTtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBtYXJnaW46IDJweCAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLm1hcC13cmFwcGVyIC5zdWIgPiBkaXYgPiBkaXYgaDEge1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgfVxuICAubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdiBwIHtcbiAgICBjb2xvcjogIzc1NzU3NTtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAubWFwLXdyYXBwZXIgLnN1YiA+IGRpdiA+IGRpdiBoMSB7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICB9XG4gIC5tYXAtd3JhcHBlciAuc3ViID4gZGl2ID4gZGl2IHAge1xuICAgIGNvbG9yOiAjNzU3NTc1O1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgfVxufVxuXG4ubWFwLWljb24taW5mbyB7XG4gIHdpZHRoOiAxNnB4O1xuICBoZWlnaHQ6IDE2cHg7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9pbmZvLWljb24tc21hbGwuc3ZnXCIpO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA0NTFweCkge1xuICAubWFwLWljb24taW5mbyB7XG4gICAgd2lkdGg6IDI0cHg7XG4gICAgaGVpZ2h0OiAyNHB4O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImxpYnMvdWkvc3JjL2xpYi9pY29ucy9pbmZvLWljb24tbGFyZ2Uuc3ZnXCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC5tYXAtaWNvbi1pbmZvIHtcbiAgICB3aWR0aDogMjRweDtcbiAgICBoZWlnaHQ6IDI0cHg7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwibGlicy91aS9zcmMvbGliL2ljb25zL2luZm8taWNvbi1sYXJnZS5zdmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICB9XG59IiwiQGltcG9ydCBcInZhcnNcIjtcblxuQG1peGluIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJHNpemUsICRxdWFsaWZpZXIpIHtcbiAgICBAaWYgJG9yaWVudGF0aW9uID09IG5vbmUgb3IgJG9yaWVudGF0aW9uID09ICRjaGVjay1vcmllbnRhdGlvbiB7XG4gICAgICAgIEBpZiAoJHF1YWxpZmllciA9PSBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiAkY2hlY2stb3JpZW50YXRpb24pIGFuZCAobWluLXdpZHRoOiAkc2l6ZSkge1xuICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIGlmICgkcXVhbGlmaWVyID09IG1heC13aWR0aCkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtYXgtd2lkdGg6ICRzaXplKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBtaXhpbiBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sICRjaGVjay1vcmllbnRhdGlvbiwgJG1pbiwgJG1heCkge1xuICAgIEBpZiAkb3JpZW50YXRpb24gPT0gbm9uZSBvciAkb3JpZW50YXRpb24gPT0gJGNoZWNrLW9yaWVudGF0aW9uIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246ICRjaGVjay1vcmllbnRhdGlvbikgYW5kIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gdGhpcyBpcyBhIGNvcHkgb2YgcmVzcG9uZC10by4gd2UgZG9uJ3Qgd2FudCB0byBwcmVzZXJ2ZSB0aGF0IG1ldGhvZCBzaW5jZSB0aGUgYnJlYWtwb2ludHMgbWF5IGRpdmVyZ2UgZnJvbSB0aGUgb2xkIFVJLlxuQG1peGluIGlzLXNjcmVlbi1zaXplKCRtZWRpYTogYWxsLCAkb3JpZW50YXRpb246IG5vbmUpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIHBvcnRyYWl0LCAkZGV2aWNlLW1vYmlsZS1zaXplLCBtYXgtd2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUsIG1heC13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBub3QtbW9iaWxlIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHF1ZXJ5LXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCBtaW4td2lkdGgpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgYm91bmRlZC1zZWxlY3QoJG9yaWVudGF0aW9uLCBwb3J0cmFpdCwgJGRldmljZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFwdG9wLXNpemUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSArIDEsICRkZXZpY2UtbGFuZHNjYXBlLWxhcHRvcC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldCB7XG4gICAgICAgIEBpbmNsdWRlIGJvdW5kZWQtc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLXRhYmxldC1zaXplKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBib3VuZGVkLXNlbGVjdCgkb3JpZW50YXRpb24sIGxhbmRzY2FwZSwgJGRldmljZS1sYW5kc2NhcGUtbW9iaWxlLXNpemUgKyAxLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgcG9ydHJhaXQsICRkZXZpY2UtdGFibGV0LXNpemUsIG1pbi13aWR0aCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgcXVlcnktc2VsZWN0KCRvcmllbnRhdGlvbiwgbGFuZHNjYXBlLCAkZGV2aWNlLWxhbmRzY2FwZS10YWJsZXQtc2l6ZSwgbWluLXdpZHRoKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG9yaWVudGF0aW9uID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkb3JpZW50YXRpb24gPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuXG5AbWl4aW4gcGFnZS1wYWRkaW5nIHtcbiAgICBwYWRkaW5nLWxlZnQ6ICRzcGFjaW5nLXNtYWxsO1xuICAgIHBhZGRpbmctcmlnaHQ6ICRzcGFjaW5nLXNtYWxsO1xufVxuXG4vLyBGb250IE1peGluc1xuJGZvbnQtbWNraW5zZXktc2FuczogXCJNY0tpbnNleSBTYW5zXCI7XG4kZm9udC10aGVpbmhhcmR0OiBcIlRoZWluaGFyZHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiRmb250LWJvd2VyOiBcIkJvd2VyXCI7XG5cbkBtaXhpbiBib3dlci1ib2xkIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtYm93ZXI7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIG1ja2luc2V5LXNhbnMge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1tY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBkaXNwbGF5LTEge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzLjc1cmVtOyAvLyA2MHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjsgLy8gNzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDRyZW07IC8vIDY0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTg3OyAvLyA3NnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0yIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy41cmVtOyAvLyA1NnB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMjE0OyAvLyA2OHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy43NXJlbTsgLy8gNjBweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yOyAvLyA3MnB4XG4gICAgfVxufVxuXG5AbWl4aW4gZGlzcGxheS0zIHtcbiAgICBAaW5jbHVkZSBib3dlci1ib2xkO1xuICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE1MzsgLy8gNjBweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDMuNXJlbTsgLy8gNTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4yMTQ7IC8vIDY4cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTQge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAzcmVtOyAvLyA0OHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMTY2OyAvLyA1NnB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsgLy8gNTJweFxuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTM7IC8vIDY0cHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTUge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAycmVtOyAvLyAzMHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuODMzOyAvLyAzNHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi4yNXJlbTsgLy8gMzZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42NDI7IC8vIDQwcHhcbiAgICB9XG59XG5cbkBtaXhpbiBkaXNwbGF5LTcge1xuICAgIEBpbmNsdWRlIGJvd2VyLWJvbGQ7XG4gICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICBsaW5lLWhlaWdodDogMS4zMzM7IC8vIDI4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjc1cmVtOyAvLyAyOHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuNXJlbTsgLy8gNDBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7IC8vIDQ4cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjc1cmVtOyAvLyA0NHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE4MTsgLy8gNTJweFxuICAgIH1cbn1cblxuQG1peGluIGhlYWRpbmctMiB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICBsaW5lLWhlaWdodDogMS4xMTE7IC8vIDQ0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjVyZW07IC8vIDQwcHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTgxOyAvLyA0OHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy0zIHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMnJlbTsgLy8gMzJweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjEyNTsgLy8gMzZweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDIuMjVyZW07IC8vIDM2cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjIyOyAvLyA0NHB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy00IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS43NXJlbTsgLy8gMjhweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjE0MjsgLy8gMzJweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDJyZW07IC8vIDMycHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTI1OyAvLyAzNnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy01IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyAvLyAyNHB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMzMzOyAvLyAyODhweFxuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUobm90LW1vYmlsZSkge1xuICAgICAgICBmb250LXNpemU6IDEuNzVyZW07IC8vIDI4cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTQyOyAvLyAzMnB4XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZy02IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgLy8gMjBweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjVyZW07IC8vIDI0cHhcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTU1OyAvLyAyOHB4XG4gICAgfVxufVxuXG5AbWl4aW4gYm9keS1kZWZhdWx0IHtcbiAgICBAaW5jbHVkZSBtY2tpbnNleS1zYW5zO1xuICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IC8vIDI0cHhcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjI1cmVtOyAvLyAyMHB4XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7IC8vIDI2cHhcbiAgICB9XG59XG5cbi8vLyBEb2VzbnQgZXhpc3QgaW4gTURTLlxuQG1peGluIGJvZHktdGlueSB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07IC8vIDEycHhcbiAgICBsaW5lLWhlaWdodDogMS40OyAvLyAyMHB4XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShub3QtbW9iaWxlKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMXJlbTsgLy8gMTZweFxuICAgICAgICBsaW5lLWhlaWdodDogMS42OyAvLyAyNHB4XG4gICAgfVxufVxuXG5AbWl4aW4gZm9ybS1sYWJlbCB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LWZhbWlseTogJGZvbnQtdGhlaW5oYXJkdDtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIHBsYWNlaG9sZGVyLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgY29sb3I6ICRwbGFjZWhvbGRlci1jb2xvcjtcbiAgICBmb250LXdlaWdodDogMzAwO1xufVxuXG5AbWl4aW4gY2hpcC1sYWJlbCB7XG4gICAgQGluY2x1ZGUgbWNraW5zZXktc2FucztcbiAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcbn1cblxuQG1peGluIGNoZWNrYm94LWxhYmVsIHtcbiAgICBAaW5jbHVkZSBmb3JtLWxhYmVsO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgY29sb3I6IGJsYWNrO1xufVxuXG4vLyBib3JkZXJzXG5cbkBtaXhpbiBtY2stY2hlY2tib3gtYm9yZGVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbkBtaXhpbiBtY2stYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAycHggc29saWQgJGJvcmRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gbWNrLXRoaW4tYnV0dG9uLWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJhY2tncm91bmQtY2hlY2tib3gtZGlzYWJsZWQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlcjtcbn1cblxuQG1peGluIG1jay1jb250ZW50LWJvcmRlci1saWdodCB7XG4gICAgQGluY2x1ZGUgbWNrLWNvbnRlbnQtYm9yZGVyO1xuICAgIGJvcmRlci1jb2xvcjogJHNlbGVjdGVkLW9wdGlvbjtcbn1cblxuQG1peGluIG1jay1jYXJkLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIG1jay1jb250ZW50LWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmVzdWx0cy1saXN0LWJhY2tncm91bmQtY29sb3I7XG59XG5cbkBtaXhpbiBtY2stY2FyZC1jb250ZW50LWxpZ2h0IHtcbiAgICBAaW5jbHVkZSBtY2stY29udGVudC1ib3JkZXItbGlnaHQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHJlc3VsdHMtbGlzdC1iYWNrZ3JvdW5kLWNvbG9yO1xufVxuXG5cbi8vIGZ1bmN0aW9uc1xuXG4vKipcbiAqIE1ha2VzIHRleHQgaGF2ZSBtYXhpbXVtIGxpbmVzIHdpdGggZWxsaXBzaXMuIFdvcmtzIG9uIG1vc3QgbW9kZXJuIGJyb3dzZXJzIGV4Y2VwdFxuICogb2YgRmlyZWZveC4uXG4gKi9cbkBtaXhpbiBtYXgtbGluZXMoJGNvdW50KSB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAtd2Via2l0LWxpbmUtY2xhbXA6ICRjb3VudDtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuXG4vLyBpbWFnZXNcbkBtaXhpbiBtY2staWNvbigkd2lkdGgsICRhc3NldCwgJGhlaWdodDogJHdpZHRoLCAgJGFzc2V0UGF0aDogXCJsaWJzL3VpL3NyYy9saWIvaWNvbnNcIiwpIHtcbiAgICB3aWR0aDogJHdpZHRoO1xuICAgIGhlaWdodDogJGhlaWdodDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIjeyRhc3NldFBhdGh9LyN7JGFzc2V0fVwiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG59XG5cblxuQG1peGluIG1jay1zbWFsbC1pY29uKCRtb2JpbGUtYXNzZXQsICRkZXNrdG9wLWFzc2V0OiAkbW9iaWxlLWFzc2V0KSB7XG4gICAgQGluY2x1ZGUgbWNrLWljb24oMTZweCwgJGFzc2V0OiAkbW9iaWxlLWFzc2V0KTtcblxuICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG5vdC1tb2JpbGUpIHtcbiAgICAgICAgQGluY2x1ZGUgbWNrLWljb24oMjRweCwgJGFzc2V0OiAkZGVza3RvcC1hc3NldCk7XG4gICAgfVxufVxuXG4vLyBza2VsZXRvblxuQG1peGluIHNrZWxldG9uLWJnIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0ZWQtb3B0aW9uO1xufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItaW1hZ2Utc2l6ZSB7XG4gICAgd2lkdGg6IDgxcHg7XG4gICAgaGVpZ2h0OiA4MnB4O1xuXG4gICAgQGluY2x1ZGUgaXMtc2NyZWVuLXNpemUoZGVza3RvcCkge1xuICAgICAgICB3aWR0aDogMjE5cHg7XG4gICAgICAgIGhlaWdodDogMTE5cHg7XG4gICAgfVxufVxuXG5AbWl4aW4gcGxhY2Vob2xkZXItc3RhdHVzLXNpemUge1xuICAgIHdpZHRoOiAxMTdweDtcbiAgICBoZWlnaHQ6IDc4cHg7XG5cbiAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShkZXNrdG9wKSB7XG4gICAgICAgIHdpZHRoOiAxMTdweDtcbiAgICAgICAgaGVpZ2h0OiA3OHB4O1xuICAgIH1cbn1cbiIsIi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBNRFMgQ29sb3VycyAgfHxcblxcKj09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuJGNvbG9yLWJyYW5kLWVsZWN0cmljLWJsdWU6ICMyMjUxZmY7XG4kY29sb3ItYnJhbmQtZGVlcC1ibHVlOiAjMDUxYzJjO1xuJGNvbG9yLWJyYW5kLWN5YW46ICMwMGE5ZjQ7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICBBcHBsaWNhdGlvbiBDb2xvdXJzICB8fFxuXFwqPT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kZm9udC1kYXJrOiAjMDAwO1xuJGZvbnQtbGlnaHQ6ICNmZmY7XG5cbiRzdWNjZXNzOiAjNDNhMDQ3O1xuJHN1Y2Nlc3MtbGlnaHQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MsIDEwKTtcbiRzdWNjZXNzLWRhcms6IGRhcmtlbigkc3VjY2VzcywgMTApO1xuJGdyZWVuMTogIzIxOTY1MztcblxuJHBlbmRpbmc6ICNmZmIzMDA7XG4kcGVuZGluZy1saWdodDogbGlnaHRlbigkcGVuZGluZywgMTApO1xuJHBlbmRpbmctZGFyazogZGFya2VuKCRwZW5kaW5nLCAxMCk7XG5cbiRlcnJvcjogI2U1MzkzNTtcbiRlcnJvci1saWdodDogbGlnaHRlbigkZXJyb3IsIDEwKTtcbiRlcnJvci1kYXJrOiBkYXJrZW4oJGVycm9yLCAxMCk7XG5cbiRjb2xvci1wcmltYXJ5OiAjMTkzN2VhO1xuJGNvbG9yLXByaW1hcnktbGlnaHQ6IGxpZ2h0ZW4oJGNvbG9yLXByaW1hcnksIDEwKTtcbiRjb2xvci1wcmltYXJ5LWRhcms6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMTApO1xuXG4kY29sb3Itc2Vjb25kYXJ5OiAjNDI4NUY0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodDogbGlnaHRlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG4kY29sb3Itc2Vjb25kYXJ5LWRhcms6IGRhcmtlbigkY29sb3Itc2Vjb25kYXJ5LCAxMCk7XG5cbiRiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuJGZvb3Rlci1iYWNrOiAjMjYzMjM4O1xuJGhlYWRlci1iYWNrOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNTFDMkMsICMwNTFDMkMgNDAlLCAjMEIyNDUzIDYwJSwgIzFGNDBFNiAxMDAlKTtcblxuJGNvbG9yLXRlcm5hcnk6ICMwNTFjMmM7XG5cbi8qPT09PT09PT09PT0qXFxcbnx8ICAgRm9udHMgICB8fFxuXFwqPT09PT09PT09PT0qL1xuXG4kZm9udC1zdGFjazogXCJUaGVpbmhhcmR0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiRoZWFkaW5nLWZvbnQ6IFwiTGFyaXNoTWNLaW5zZXlcIiwgJ0dlb3JnaWEnLCBzZXJpZjtcbiRmb250OiAkZm9udC1zdGFjaztcblxuJGZvbnQtZmFtaWx5LXByaW1hcnk6IFwiTWNLaW5zZXkgU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIENhbGlicmksIENvcmJlbCwgSGVsdmV0aWNhLCBSb2JvdG8sIERyb2lkLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LXNlY29uZGFyeTogXCJCb3dlclwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiIHNlcmlmO1xuXG4kYmFzZS1zaXplOiAxNnB4O1xuJHRhYmxldC1zaXplOiAxNnB4O1xuJG1vYmlsZS1zaXplOiAxNnB4O1xuXG4vKj09PT09PT09PT09PT09PT09PT0qXFxcbnx8ICAgTWVkaWEgUXVlcmllcyAgIHx8XG5cXCo9PT09PT09PT09PT09PT09PT09Ki9cblxuJGJyZWFrLW1vYmlsZTogNDUwcHg7XG4kYnJlYWstdGFibGV0OiA4MDBweDtcbiRicmVhay1sYXB0b3A6IDEwMjRweDtcblxuJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGU6IDgwMHB4O1xuJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQ6IDEwNDhweDtcbiRicmVhay1sYW5kc2NhcGUtbGFwdG9wOiAxMjgwcHg7XG4iLCJAaW1wb3J0ICcuL3ZhcmlhYmxlcyc7XG5cbkBtaXhpbiBoaWRlLXRleHQtb3ZlcmZsb3cge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuQG1peGluIGJveC1zaGFkb3coJGNvbG9yOiAjMDAwLCAkZGVwdGg6IDEpIHtcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMXB4ICogKCRkZXB0aCAtIDEpIHJnYmEoIzAwMCwgLjIpLFxuICAgICAgICAgICAgICAgIDAgMXB4IDFweCAwIHJnYmEoIzAwMCwgLjE0KSxcbiAgICAgICAgICAgICAgICAwIDJweCAxcHggLTFweCByZ2JhKCMwMDAsIC4xMik7XG59XG5cbi8qPT09PT09PT09PT09PT09PT09PSpcXFxufHwgICBNZWRpYSBRdWVyaWVzICAgfHxcblxcKj09PT09PT09PT09PT09PT09PT0qL1xuXG5AbWl4aW4gcmVzcG9uZC10bygkbWVkaWEpIHtcbiAgICBAaWYgJG1lZGlhID09IG1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBtb2JpbGUtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IG1vYmlsZS1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1tb2JpbGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbm90LW1vYmlsZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1tb2JpbGUgKyAxKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhcHRvcCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0ICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhcHRvcC1sYW5kc2NhcGUge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS10YWJsZXQgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLWxhbmRzY2FwZS1sYXB0b3ApIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gbGFwdG9wLXBvcnRyYWl0IHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFwdG9wKSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gIEBlbHNlIGlmICRtZWRpYSA9PSBsYXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IHRhYmxldC1wb3J0cmFpdCB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6ICRicmVhay1tb2JpbGUgKyAxKSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICgkbWVkaWEgPT0gdGFibGV0LW1vYmlsZSBvciAkbWVkaWEgPT0gbm90LWRlc2t0b3ApIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1AZWxzZSBpZiAkbWVkaWEgPT0gdGFibGV0LWxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLW1vYmlsZSArIDEpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSB0YWJsZXQtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstbW9iaWxlICsgMSkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAoJG1lZGlhID09IHRhYmxldC1tb2JpbGUgb3IgJG1lZGlhID09IG5vdC1kZXNrdG9wKSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6ICRicmVhay10YWJsZXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiAkYnJlYWstbGFuZHNjYXBlLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRtZWRpYSA9PSBkZXNrdG9wIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogJGJyZWFrLXRhYmxldCkge1xuICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtbGFuZHNjYXBlIHtcbiAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6ICRicmVhay1sYW5kc2NhcGUtdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGRlc2t0b3AtcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiAkYnJlYWstdGFibGV0KSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJG1lZGlhID09IGxhbmRzY2FwZSB7XG4gICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkbWVkaWEgPT0gcG9ydHJhaXQge1xuICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQGltcG9ydCBcImxpYnMvdWkvc3JjL2xpYi9taXhpbnNcIjtcbkBpbXBvcnQgJ21peGlucyc7XG5cbi5yb29tLWxvY2F0aW9uIHtcbiAgICAuaGVhZGVyIHtcbiAgICAgICAgei1pbmRleDogMTA7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgfVxufVxuLmJvb2tpbmctdmlldyB7XG4gICAgaGVpZ2h0OiAyNzBweDtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICNEQ0RDREM7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAubWFwLXdyYXBwZXIge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHRvcDogLTQwJTtcbiAgICB9XG59XG5cbi5tYXAtd3JhcHBlciB7XG4gICAgaGVpZ2h0OiAzNzRweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNBMTlGOUY7XG4gICAgXG4gICAgJi5leHBhbmRlZCB7XG4gICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgICAgei1pbmRleDogNDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcbiAgICB9XG4gICAgYS1tYXAge1xuICAgICAgICBjdXJzb3I6IG1vdmU7XG4gICAgICAgICYubnAge1xuICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICB9XG4gICAgfVxuICAgIC5mb290ZXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcGFkZGluZzogMjRweCAxNnB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICAgICAgICBoZWlnaHQ6IDk2cHg7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9uIHtcbiAgICAgICAgICAgIHdpZHRoOiAyMTJweDtcbiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgICAgICAgQGluY2x1ZGUgcmVzcG9uZC10byhtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLnN1YiB7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICAgIGhlaWdodDogMjAwcHg7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiA4OXB4O1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgcGFkZGluZzogMCAxNXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTc5LjhkZWcsIHJnYmEoNSwgMjgsIDQ0LCAwLjE1KSAwLjE3JSwgcmdiYSgwLCAwLCAwLCAwKSA4MS45MiUpO1xuICAgICAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgICAgICAgdG9wOiA2N3B4O1xuICAgICAgICB9XG5cbiAgICAgICAgLm1hcC1jb250cm9scyB7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgLy8gcGFkZGluZzogMTZweCAxNHB4IDA7XG4gICAgICAgICAgICAvLyB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICAgICAgdG9wOiAtMTdweDtcblxuICAgICAgICAgICAgLm1jay1yb3d7XG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWFwLWNvbnRyb2xzLWNvbnRhaW5lcntcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogdW5zZXQ7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogdW5zZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC5tY2stY29sdW1ue1xuICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBidXR0b257XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC5tY2stc3Ryb2tlZC1idXR0b257XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogNDBweCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAubGVnZW5kLWNvbnRhaW5lcntcbiAgICAgICAgICAgICAgICBtYXJnaW46IDAgMCAwIDE1cHg7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDE2MHB4O1xuICAgICAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC5sZWdlbmQtZGl2aWRlcntcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0MHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcblxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICByaWdodDogdW5zZXQ7XG4gICAgICAgICAgICAgICAgdG9wOiB1bnNldDtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAubWNrLWZvcm0taW5wdXQgbWF0LWZvcm0tZmllbGQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsIFxuICAgICAgICAgICAgICAgIC5sZWdlbmQtY29udGFpbmVyIC5sZWdlbmQtZGl2aWRlcixcbiAgICAgICAgICAgICAgICAubWFwLWNvbnRyb2xzLWNvbnRhaW5lciAubWNrLXN0cm9rZWQtYnV0dG9ue1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDMycHggIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAubWFwLWluZm8tYnV0dG9ue1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC5sZWdlbmQtY29udGFpbmVye1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxNTBweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICA+ZGl2IHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDEwMjRweDtcbiAgICAgICAgICAgIG1hcmdpbjogMzBweCBhdXRvO1xuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0UwRTBFMDsgICAgICAgICAgICAgICBcbiAgICAgICAgICAgID5kaXYge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDE0cHggMTRweCAwIDE0cHg7XG4gICAgICAgICAgICAgICAgJi5tYXAtY29udHJvbHMge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNnB4IDE0cHggMDtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcblxuICAgICAgICAgICAgICAgICAgICAubWNrLXJvd3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC5tYXAtY29udHJvbHMtY29udGFpbmVye1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHVuc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBpcy1zY3JlZW4tc2l6ZShtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogdW5zZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAubWNrLWNvbHVtbntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9ue1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAubWNrLXN0cm9rZWQtYnV0dG9ue1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogNDBweCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAubGVnZW5kLWNvbnRhaW5lcntcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMCAwIDAgMTVweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxNjBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC5sZWdlbmQtZGl2aWRlcntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwcHggIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC5tY2stZm9ybS1pbnB1dCBtYXQtZm9ybS1maWVsZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogNDBweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLm1jay1mb3JtLWlucHV0IG1hdC1mb3JtLWZpZWxkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIC5sZWdlbmQtY29udGFpbmVyIC5sZWdlbmQtZGl2aWRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAtY29udHJvbHMtY29udGFpbmVyIC5tY2stc3Ryb2tlZC1idXR0b257XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAzMnB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAtaW5mby1idXR0b257XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgLmxlZ2VuZC1jb250YWluZXJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxNTBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAmLnRpdGxlIHtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDE0cHg7XG4gICAgICAgICAgICAgICAgICAgIC50aXRsZS1hbmQtbWFwLWNvbnRyb2x7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGlzLXNjcmVlbi1zaXplKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcC1jb250cm9sc3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAudGl0bGUtbmFtZSB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAudGl0bGUtZGVzY3JpcHRpb24ge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogIzc1NzU3NTtcbiAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDJweCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSByZXNwb25kLXRvKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBoMSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogIzc1NzU3NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLm1hcC1pY29uIHtcbiAgICAmLWluZm8ge1xuICAgICAgICBAaW5jbHVkZSBtY2stc21hbGwtaWNvbignaW5mby1pY29uLXNtYWxsLnN2ZycsICdpbmZvLWljb24tbGFyZ2Uuc3ZnJyk7XG4gICAgfVxufSJdfQ== */"], encapsulation: 2 }); /*@__PURE__*/ @@ -69859,7 +70884,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons type: core_1.Component, args: [{ selector: 'room-location-preview', - template: "\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n \n {{building.name}}, {{level.name}}\n
\n
The pinpoint indicates your selected room's location on the floor. No futher interaction is available.
\n
\n
\n
\n \n
\n \n \n
\n \n
\n
\n
\n \n \n
\n
\n \n
\n
\n
\n
\n ", + template: "\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n \n {{building.name}}, {{level.name}}\n
\n \n
\n
The pinpoint indicates your selected room's location on the floor. No futher interaction is available.
\n \n
\n
\n \n
\n \n \n
\n \n
\n
\n\n\n
\n \n
\n
\n \n \n
\n
\n \n
\n
\n
\n
\n ", styleUrls: ['./room-location-preview.component.scss'], encapsulation: core_1.ViewEncapsulation.None }] @@ -75863,7 +76888,13 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons _this328.isOpen = true; _this328.closeMapOverlayOutlet = function () { - return _this328.focusedMapSpace.next(undefined); + _this328.focusedMapSpace.next(undefined); + + _this328.zoom.next(map_utils_1.MIN_ZOOM_LEVEL); + + _this328.center.next(map_utils_1.CENTER_POINT); + + _this328.focusedRoom.next(undefined); }; _this328.floorData = location.getState(); diff --git a/staff/main-es5.js.map b/staff/main-es5.js.map index cddf05c7e..a619dd51d 100644 --- a/staff/main-es5.js.map +++ b/staff/main-es5.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/animations/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/animations/src/lib/angular-animations.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/animations/src/lib/animations.module.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/base.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/base.directive.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/base.module.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/cdk-drop-list-scroll-container.directive.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/date.spec-helpers.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/date.utils.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/general.utilities.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/image.directive.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/numbers-only.directive.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/replace.pipe.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/bookings/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/bookings/src/lib/bookings.actions.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/bookings/src/lib/bookings.effects.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/bookings/src/lib/bookings.module.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/bookings/src/lib/bookings.reducer.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/bookings/src/lib/bookings.utils.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/buildings/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/buildings/src/lib/buildings.actions.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/buildings/src/lib/buildings.effects.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/buildings/src/lib/buildings.module.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/buildings/src/lib/buildings.reducer.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/api.utilities.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/app.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/base-api.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/base.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/booking-filter.utils.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/booking.form.actions.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/booking.form.data.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/booking.form.spec-helpers.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/booking.selectors.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/booking.utils.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/room-results/room-results.viewmodel.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/booking-state.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/booking.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/booking.types.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/booking.utilities.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/bookings.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/bookingsPaginated.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/space.utilities.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering-categories.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering-category.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering-item.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering-items.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering-menu.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering-notes.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering-order.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering.utilities.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/close-modal-dialog-service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/collapse-accordion-service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/data-common.module.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/hotkeys.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/location/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/location/location.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/location/location.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/organisation/building.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/organisation/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/organisation/level.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/organisation/organisation.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/organisation/organisation.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/paginated.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/recurrence/recurrence.utils.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/reports/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/reports/report.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/reports/reports.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/service-manager.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/settings.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/spaces/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/spaces/space.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/spaces/space.utilities.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/spaces/spaces.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/spec-helpers.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/users/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/users/user.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/users/user.utilities.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/users/users.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/validation.utilities.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/date-tz/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/date-tz/src/lib/date-tz.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/environment/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/environment/src/lib/environment.module.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/environment/src/lib/environment.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/environment/src/lib/version.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/booking-confirm/booking-confirm.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/booking-confirm/booking-confirm.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/booking-form/booking-form.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/booking-form/booking-form.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/catering-confirm-modal/catering-confirm-modal.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/catering-confirm-modal/catering-confirm-modal.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/catering-details-modal/catering-details-modal.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/catering-details-modal/catering-details-modal.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/confirm-modal/confirm-modal.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/confirm-modal/confirm-modal.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/legacy-overlays.module.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/new-user-modal/new-user-modal.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/new-user-modal/new-user-modal.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/no-catering-modal/no-catering-modal.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/no-catering-modal/no-catering-modal.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/requirement-details-modal/requirement-details-modal.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/requirement-details-modal/requirement-details-modal.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/space-select-modal/space-select-modal.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/space-select-modal/space-select-modal.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/user-form/user-form.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/user-form/user-form.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/action-icon/action-icon.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/action-icon/action-icon.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/bookings/catering/item/item.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/bookings/catering/item/item.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/bookings/catering/package-options-modal/package-options-modal.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/bookings/catering/package-options-modal/package-options-modal.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/cng-search-bar/cng-search-bar.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/cng-search-bar/cng-search-bar.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/cng-search-bar/hover-class.directive.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/action-field/action-field.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/action-field/action-field.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/counter/counter.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/counter/counter.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/date-field/date-field.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/date-field/date-field.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/duration-field/duration-field.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/duration-field/duration-field.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/time-field/time-field.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/time-field/time-field.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/user-list-field/user-list-field.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/user-list-field/user-list-field.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/user-search-field/user-search-field.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/user-search-field/user-search-field.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/feedback/feedback.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/feedback/feedback.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/icon/icon.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/icon/icon.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/legacy-ui.module.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/popout-menu/popout-menu.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/popout-menu/popout-menu.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/searchbar/searchbar.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/searchbar/searchbar.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/user-avatar/user-avatar.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/user-avatar/user-avatar.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/loading/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/loading/src/lib/loading.actions.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/loading/src/lib/loading.effects.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/loading/src/lib/loading.model.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/loading/src/lib/loading.selectors.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/loading/testing/effects.testing.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/loading/testing/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/organisation/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/organisation/src/lib/organisation.actions.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/organisation/src/lib/organisation.effects.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/organisation/src/lib/organisation.module.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/organisation/src/lib/organisation.reducer.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/rooms/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/rooms/src/lib/rooms.actions.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/rooms/src/lib/rooms.effects.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/rooms/src/lib/rooms.module.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/rooms/src/lib/rooms.reducer.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/rooms/src/lib/rooms.types.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/rooms/src/lib/rooms.utils.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/rx-utils/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/rx-utils/src/lib/loading-model.utils.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/rx-utils/src/lib/operators.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/rx-utils/src/lib/rx-utils.module.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/aca-date-picker/aca-date-picker.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/aca-date-picker/aca-date-picker.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/alert-banner/alert-banner.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/auto-complete-chip-select-item/auto-complete-chip-select-item.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/auto-complete-chip-select-item/groupHeader.pipe.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/auto-complete-select-option/auto-complete-select-option.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/auto-complete-select-option/auto-complete-select-option.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/base-template.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/cng-select/cng-select-options.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/cng-select/cng-select-options.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/cng-select/cng-select.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/cng-select/cng-select.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/cng-select/dropdown-trigger-for.directive.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/collapse-header/collapse-header.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/conflict-alert-modal/conflict-alert-modal.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/conflict-alert-modal/conflict-alert-modal.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/conflicts-modal/conflicts-modal.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/conflicts-modal/conflicts-modal.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/date-tz-calendar-widget/date-tz-calendar-widget.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/date-tz-calendar-widget/date-tz-calendar-widget.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/date-tz-date-picker/date-tz-date-picker.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/date-tz-duration-field/date-tz-duration-field.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/date-tz-time-field/date-tz-time-field.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/duration-field/duration-field.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/error-message/error-message.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/icons/calendar/calendar-icon.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/icons/calendar/chevron-icon.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/icons/close/close-icon.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/informational-image/informational-image.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/label/label.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/legend-dropdown/legend-dropdown.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/mck-date-picker/mck-date-picker.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/modal-button-row/modal-button-row.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/modal/modal.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/override-changes-modal/override-changes-modal.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/override-changes-modal/override-changes-modal.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/pipes/filter.pipe.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/pipes/sanitise.pipe.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/radio-select/radio-select.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/recurrence-booking-form/recurrence-booking-form.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/recurrence-booking-form/recurrence-booking-form.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/recurrence-date-form/recurrence-date-form.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/recurrence-date-form/recurrence-date-form.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/recurrence-pattern-form/recurrence-pattern-form.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/recurrence-pattern-form/recurrence-pattern-form.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/select-option/select-option.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/select/select.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/select/select.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/selected-chip-count/selected-chip-count.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/spacer/spacer.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/switch-group/switch-group.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/time-field/time-field.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/toggle/toggle.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/tooltip/tooltip.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/tooltip/tooltip.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/tooltip/tooltip.directive.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/tooltip/tooltip.enums.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/types.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/ui.module.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/utils/time.utils.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/zoom-warning-modal/components/zoom-warning/zoom-warning.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/zoom-warning-modal/components/zoom-warning/zoom-warning.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/user/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/user/src/lib/user.actions.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/user/src/lib/user.effects.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/user/src/lib/user.module.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/user/src/lib/user.reducer.ts","webpack:///$_lazy_route_resource lazy namespace object","webpack:///src/app/app-routing.module.ts","webpack:///src/app/app.component.ts","webpack:///src/app/app.component.html","webpack:///src/app/app.module.ts","webpack:///src/app/booking/booking-calendar/booking-calendar-date-widget/calendar-date-widget.component.ts","webpack:///src/app/booking/booking-calendar/booking-calendar-date-widget/calendar-date-widget.component.html","webpack:///src/app/booking/booking-calendar/booking-calendar-routing.module.ts","webpack:///src/app/booking/booking-calendar/booking-calendar-wrapper.component.ts","webpack:///src/app/booking/booking-calendar/booking-calendar-wrapper.html","webpack:///src/app/booking/booking-calendar/booking-calendar.module.ts","webpack:///src/app/booking/booking-calendar/cng-menu-item/cng-menu-item.component.ts","webpack:///src/app/booking/booking-calendar/cng-menu-item/cng-menu-item.component.html","webpack:///src/app/booking/booking-calendar/staff-calendar/space/event/event.component.ts","webpack:///src/app/booking/booking-calendar/staff-calendar/space/event/event.component.html","webpack:///src/app/booking/booking-calendar/staff-calendar/space/space.component.ts","webpack:///src/app/booking/booking-calendar/staff-calendar/space/space.component.html","webpack:///src/app/booking/booking-calendar/staff-calendar/staff-calendar.component.ts","webpack:///src/app/booking/booking-calendar/staff-calendar/staff-calendar.component.html","webpack:///src/app/booking/booking-calendar/staff-calendar/timeline/timeline.component.ts","webpack:///src/app/booking/booking-calendar/staff-calendar/timeline/timeline.component.html","webpack:///src/app/booking/booking-confirmation/booking-confirmation.component.ts","webpack:///src/app/booking/booking-create/booking-create.component.ts","webpack:///src/app/booking/booking-create/booking-form-base.component.html","webpack:///src/app/booking/booking-create/booking-edit-wrapper.component.ts","webpack:///src/app/booking/booking-create/booking-edit.component.ts","webpack:///src/app/booking/booking-create/booking-form-base.component.ts","webpack:///src/app/booking/booking-details-modal/booking-details-modal.component.ts","webpack:///src/app/booking/booking-duration-modal/booking-duration-modal.component.ts","webpack:///src/app/booking/booking-result-item/booking-result-item.component.ts","webpack:///src/app/booking/booking-result-item/booking-result-item.component.html","webpack:///src/app/booking/booking-routing.module.ts","webpack:///src/app/booking/booking.form.reducer.ts","webpack:///src/app/booking/booking.module.ts","webpack:///src/app/booking/bookings-listing/bookings-listing.component.ts","webpack:///src/app/booking/bookings-listing/bookings-listing.component.html","webpack:///src/app/booking/cancel-booking-modal/cancel-booking-modal.component.ts","webpack:///src/app/booking/catering/catering.component.ts","webpack:///src/app/booking/catering/catering.component.html","webpack:///src/app/booking/catering/order-details/category/category.component.ts","webpack:///src/app/booking/catering/order-details/category/category.component.html","webpack:///src/app/booking/catering/order-details/order-details.component.ts","webpack:///src/app/booking/catering/order-details/order-details.component.html","webpack:///src/app/booking/catering/order-list/item/item.component.ts","webpack:///src/app/booking/catering/order-list/item/item.component.html","webpack:///src/app/booking/catering/order-list/order-list.component.ts","webpack:///src/app/booking/catering/order-list/order-list.component.html","webpack:///src/app/booking/catering/order-table/order-table.component.ts","webpack:///src/app/booking/manage-bookings/manage-bookings.component.ts","webpack:///src/app/booking/manage-bookings/manage-bookings.viewmodel.ts","webpack:///src/app/booking/office-floor/floor-map-overlay/floor-map-overlay.component.ts","webpack:///src/app/booking/office-floor/floor-map.utils.ts","webpack:///src/app/booking/office-floor/office-floor-map.module.ts","webpack:///src/app/booking/office-floor/office-floor/office-floor.component.ts","webpack:///src/app/booking/office-floor/office-floor/office-floor.component.html","webpack:///src/app/booking/results-header/results-header.component.ts","webpack:///src/app/booking/room-availability-preview-modal/room-availability-preview-modal.component.ts","webpack:///src/app/booking/room-availability-preview/room-availability-preview.component.ts","webpack:///src/app/booking/room-availability-preview/room-availability-preview.component.html","webpack:///src/app/booking/room-booking-details-form/room-booking-details-form.component.ts","webpack:///src/app/booking/room-booking-details-form/room-booking-details-form.component.html","webpack:///src/app/booking/room-booking-form/room-booking-form.component.ts","webpack:///src/app/booking/room-booking-form/room-booking-form.component.html","webpack:///src/app/booking/room-booking-modal/room-booking-modal.component.ts","webpack:///src/app/booking/room-booking/room-booking.component.ts","webpack:///src/app/booking/room-details/room-details.component.ts","webpack:///src/app/booking/room-details/room-details.component.html","webpack:///src/app/booking/room-filters-form/room-filters-form.component.ts","webpack:///src/app/booking/room-filters-modal/room-filters-modal.component.ts","webpack:///src/app/booking/room-location-preview/room-location-preview.component.ts","webpack:///src/app/booking/room-result-item/room-result-item.component.ts","webpack:///src/app/booking/room-results-paginated/room-results-paginated.component.ts","webpack:///src/app/booking/room-results-section/room-results-section.component.ts","webpack:///src/app/booking/room-results/room-results-coachmark.viewmodel.ts","webpack:///src/app/booking/room-results/room-results.component.ts","webpack:///src/app/booking/searched-location/searched-location.component.ts","webpack:///src/app/components/footer-menu/footer-menu.component.ts","webpack:///src/app/components/footer-menu/footer-menu.component.html","webpack:///src/app/components/map-controls/map-controls.component.ts","webpack:///src/app/components/map-controls/map-controls.component.html","webpack:///src/app/components/overlay-menu/overlay-menu.component.ts","webpack:///src/app/components/overlay-menu/overlay-menu.component.html","webpack:///src/app/components/responsive-inline-images/responsive-inline-images.component.ts","webpack:///src/app/components/survey-modal/survey-modal.component.ts","webpack:///src/app/components/survey-modal/survey-modal.component.html","webpack:///src/app/components/topbar-header/topbar-header.component.ts","webpack:///src/app/login/login.component.ts","webpack:///src/app/login/login.component.html","webpack:///src/app/map/map-controls/map-controls.component.ts","webpack:///src/app/map/map-filters/map-filters.component.ts","webpack:///src/app/map/map-overlay/map-overlay.component.ts","webpack:///src/app/map/map-search/map-search.component.ts","webpack:///src/app/map/map.module.ts","webpack:///src/app/map/map.utils.ts","webpack:///src/app/map/office-information-modal/office-information-modal.component.ts","webpack:///src/app/shared/shared.module.ts","webpack:///src/app/shell/shell.component.ts","webpack:///src/app/shell/shell.component.html","webpack:///src/app/utilities/urls.ts","webpack:///src/environments/environment.ts","webpack:///src/environments/settings.ts","webpack:///src/hmr.ts","webpack:///src/main.ts"],"names":["ANIMATION_SHOW_ENTER_LEAVE","trigger","transition","style","opacity","height","animate","ANIMATION_SHOW_CONTRACT_EXPAND","state","AnimationsModule","CommonModule","NgModule","imports","BaseClass","_timers","_intervals","_subscriptions","_initialised","BehaviorSubject","key","hasOwnProperty","clearTimeout","clearInterval","unsub","name","fn","delay","Function","setTimeout","Error","setInterval","Subscription","unsubscribe","getValue","BaseDirective","destroy","Directive","selector","BaseModule","NumbersOnlyDirective","declarations","exports","ScrollDirection","CdkDropListScrollContainer","_cdkDropList","_renderer","direction","X","last_scroll","x","y","changes","scrollContainer","element","nativeElement","closest","subscription","items","subscribe","list","toArray","forEach","i","index","listen","onDrop","onDrag","updateListPosition","timeout","scroll","scrollLeft","scrollTop","BOTH","Y","_dropListRef","_cacheOwnPosition","_siblings","isReceiving","CdkDrag","Input","ContentChildren","initialTime","mockDate","timeOverride","set","Date","resetDate","reset","closestToTimeSlot","date","stepMinute","start","millisecond","second","minute","Math","ceil","plus","minutes","closestToTimeSlotTz","dateTz","setValue","addValue","durationHumanized","duration","short","h","floor","d","m","weekDayMonthYearFormat","formatDate","extractDateFromInput","input","checkHour","startDate","dayjs","dayJsTimeFormatString","isValid","cleanedInput","times","split","undefined","length","dayJsHoursMinutes","month","year","hour","nearestStepToInput","step","currentStartDate","luxonDate","DateTime","fromMillis","valueOf","closestDate","toFormat","nearestDurationToInput","durationGroups","value","parseInt","indexOf","add","diff","closestDurationGroup","find","max","offset","reduce","previousValue","currentValue","resetSecondsOnTimestamp","timestamp","toMillis","formatDateWithSuffix","dateObj","day","getDate","toLocaleString","getFullYear","nthNumber","number","getListOfDateFormat","extend","utc","timezone","isToday","weekday","customParseFormat","log","type","msg","args","stream","force","app_name","window","debug","colors","console","getItemWithKeys","keys","map","slice","isMobileDevice","r","navigator","userAgent","match","isMobileSafari","agent","isAndroidChrome","padZero","str","toString","unique","array","filter","el","pos","arr","humaniseDuration","durationInput","size","singular","format","hours","filterList","fields","results","filters","toLowerCase","f","parts","push","word","count","regex","RegExp","sort","a","b","localeCompare","item_list","JSON","parse","stringify","item","match_count","match_index","field_list","matched","field","matches","replace","changed","tokens","k","join","matchToHighlight","timeToDate","time","DateNow","startOfValue","ms","randomInt","random","timeFormatString","is24HourTime","hoursMinutes","timezoneNameToDate","timeZoneName","zone","toZone","e","timezoneDisplay","gmtOffsetDisplay","timeWithZoneFormatString","toLocaleLowerCase","timeWithGmtOffsetFormatString","startEndTimeFormatString","startDateTz","endDateTz","startEndTimeWithZoneFormatString","dateLocalFormatString","comma","formatLocalDate","dateBuildingFormatString","shorterLocalDateFormatString","shorterBuildingDateFormatString","localeString","toLocaleTimeString","document","querySelector","getAttribute","language","downloadFile","filename","contents","createElement","setAttribute","encodeURIComponent","display","body","appendChild","click","removeChild","csvToJson","csv","lines","splice","v","line","part","jsonToCsv","json","Array","Object","valid_keys","detectIE","ua","msie","substring","trident","rv","edge","eventToPoint","event","MouseEvent","clientX","clientY","touches","flatten","an_array","stack","res","next","pop","isArray","reverse","seed","xmur3","rand","sfc32","predictableRandomInt","imul","charCodeAt","c","t","isLessThanBreakpoint","breakpoint","innerWidth","toTitleCase","toUpperCase","ImageDirective","_el","initalValue","stopPropagation","HostListener","ReplacePipe","from","to","Pipe","bookingStateSelector","bookings","loadBookingsWithQuery","createAction","props","loadHomepageBookingsResults","createLoadingAction","loadUpcomingBookingsResults","loadPastBookingsResults","loadCancelledBookingsResults","loadBookingByIdResults","clearBookingByIdResults","BookingsEffects","actions","bookingService","afterBookingsRequestResultsLoadOthersEffect","pipe","ofType","mergeMap","action","DateTZ","yourBookingsRequest","email","pagination","limit","show_cancelled","end_epoch","subtractValue","seconds","include_rooms","upcomingRequest","pastRequest","start_epoch","cancelledRequest","byIdRequest","id","effects","target","request","loadHomepageBookingsResultsEffect","createLoadingEffect","userBookings","loadUpcomingBookingsResultsEffect","loadPastBookingsResultsEffect","loadCancelledBookingsResultsEffect","loadBookingByIdResultsEffect","Effect","Injectable","BookingsModule","EffectsModule","forFeature","StoreModule","bookingsReducer","initialBookingsState","query","LoadingModel","empty","homepage","upcoming","past","cancelled","bookingById","createReducer","on","ons","initialBookingFormState","activeFormFilters","bookingFormReducer","storeBookingFormData","activeForm","payload","clearBookingFormData","openBookingSurvey","bookingCompleted","storeRoomFilters","clearRoomFilters","mapBookingToSelectOption","booking","loadBuildings","buildingStateSelector","buildings","selectLoadBuildingsSuccess","createSelector","selectors","optionalSuccess","selectBuildingOptionsGroupedByCity","success","mapped","Map","s","found","city","get","selectLevelByZoneId","param","levels","l","BuildingsEffects","organizationService","loadBuildingsWithOrg","loadBuildingsAfterOrg","loadOrganisations","BuildingsModule","buildingsReducer","initialBuildingState","data","toQueryString","ApplicationService","store","analytics","_app_ref","_zone","_title","_settings","_hotkeys","_composer","_snackbar","_environment","_subjects","_observers","isStable","first","_","run","waitForSettings","message","on_action","icon","content","snackbar_ref","open","panelClass","afterDismissed","dismiss","onAction","notify","asObservable","initialised","init","setupComposer","select","selectCurrentUser","user","take","setupAnalytics","fmno","application","loading","composer","settings","protocol","location","host","domain","hostname","port","url","use_domain","origin","route","includes","mock","href","localStorage","getItem","config","scope","auth_uri","token_uri","redirect_uri","handle_login","local_login","setup","heap_io_id","heapIo","app_id","load","identify","frontend","isIt","_kioskFormFilter","title_suffix","setting","setTitle","getTitle","auth","api_endpoint","is_initialised","providedIn","BaseDataClass","raw_data","event_subject","Subject","events","_server_names","zone_id","_service","form","toJSON","Promise","resolve","reject","promise","update","then","metadata","task_name","parameters","task","obj","_changes","new_key","ServiceManager","serviceFor","BaseAPIService","settingsService","_subscribers","_promises","_compare","_list_filter","_name","_api_route","form_data","concierge","err","engine","endpoint","predicate","query_params","cache","result","http","process","processApiResult","catchError","error","of","new_item","post","injectConcierge","analyticsEvent","updateList","method","post_data","_task","put","removeItem","should_inject_concierge","apiSubRoute","token","sessionStorage","access_token","headers","HttpHeaders","requestOptions","q","label","raw_item","old_list","compareFn","new_list","mixed_list","spaceExtraFeatureToDisplayName","feature","SpaceFeatures","VideoConference","ConferencePhone","WirelessContentSharing","FlipChart","Glassboard","ElectronicWhiteboard","ConferenceRoom","TeamRoom","PartnerOffice","PhoneBooth","NaturalLight","BoardRoom","CocktailRoom","TheatreRoom","WorkshopRoom","UShapeRoom","Miscellaneous","Catering","instantBookOption","shortDisplay","instantBookOptions","mapSpaceFeaturesToSelectOption","roomEquipmentRequiredOptions","internalRoomTypeRequiredOptions","externalRoomTypeRequiredOptions","roomDetailsRequired","roomCateringAvailable","SpaceFilterReason","filterSpacesByAppliedFilters","formFilters","spaces","currentUser","isStaffMap","instantBook","some","onlyCatering","featureFilters","formFiltersEmpty","options","rulesCount","ruleReason","excludedByFiltersCount","statusMap","filteredSpaces","space","Space","raw_space","building","zones","rules","rulesForSpace","booking_rules","reason","valid","hide","hasAllFeatures","internalRoomTypeFilters","every","featuresArray","canBook","bookable","matchesType","bookingType","internal_or_external","hasCatering","has_catering","status","statusFromBookings","Booking","auto_approve","group","is_recurrent","availableOccurrences","totalOccurrences","buildingsInSameCity","meta","alternateBuildings","locationItem","specificReason","None","Filters","OfficeRules","AlternateBuildingsFound","DEFAULT_BOOKING_DURATION","internalBookingTypeOption","allBookingTypeOption","bookingTypeOptions","defaultRoomSizeOption","roomSizeOptions","roomSizeOptionsKiosk","roomCapacityToValue","roomSize","roomMaxCapacityToValue","roomFormDataToQuery","filteredLocationIds","groupChild","locations","capacity","capacity_max","is_multiroom","recurrence_period","recurrence_interval","recurrence_endTz","recurrence_count","recurrence_starts","recurrence_exceptions","recurrence_days","ignore","now","defaultTestBookingForm","selectBookingFormsData","bookingForm","selectActiveForm","is_local_tz","building_tz","endTzDate","recEditingSearchPayload","SeriesAction","EDIT","selectBookingType","selectBookingLocations","groupHeader","selectIsInternal","selectFormFilters","selectRoomResultsFromState","roomStateSelector","loadRoomsForResults","model","selectRoomResultsFromState_map","loadRoomsForResultsMap","selectLaterThatDayResultsFromState","loadLaterThatDayResults","selectNextDayResultsFromState","loadNextDayResults","selectByIdResultsFromState","loadByIdResults","selectDiffSizeResultsFromState","loadDiffSizeResults","selectHomepageBookingsResultsFromState","selectUpcomingBookingsResultsFromState","selectPastBookingsResultsFromState","selectCancelledBookingsResultsFromState","selectBookingByIdResultsFromState","filterSpacesByAppliedFiltersIfSuccess","mutate","selectFilteredResults","selectMapFilteredResults","selectFilteredLaterDayResults","selectFilteredNextDayResults","selectFilteredByIdResults","selectFilteredDiffSizeResults","selectSelectedBuildingOptions","MAX_ABBREV_LOCATIONS","mapBuildingToSelectOption","dropdownOverride","code","address","groupId","mapCityToAllSelectOption","flattenDisplayOffices","grouped","toggleSelectedByGroup","selectedOptions","option","toSelect","selected","newGroup","remainingChildrenInGroup","o","ng","truncateLocationList","truncatedLocations","shouldTruncate","mapBuildingLevelToOption","level","flattenBuildingsWithLevels","flattenedLevels","placeholderRoute","num","setupRoomImages","componentReference","image_positions","rootFolderURL","fileSlug","imagesLoaded","foundImages","path","n","desiredImageName","desiredImage","pathname","tester","Image","onload","loadImages","src","bookingStatusDetails","image","text","title","roomHasCateringHours","catering_hours","cateringAllowed","disallowedStatus","opens","closed","end","openMinutes","closeMinutes","startOfDay","cateringOpenTime","cateringCloseTime","checkCollisions","service","availabilityParams","room_ids","breakdown","hide_bookings","recurrence_type","icaluid","available","start_time","end_time","has_conflict","bkn","b_setup","b_breakdown","recurrence_master_id","getStatusErrorMessage","RoomResultsViewModel","levelDisplay","short_name","local_name","office","mapResultsToViewModels","BookingStateService","_org","_spaces","ngZone","_poll","_long_poll","_long_poll_week","_bookings","_noOfMeetings","_filters","_dateTz","_loading","_state","combineLatest","filtered","bdTz","booking_date","startTz","endTz","endOfValue","filterBookings","shareReplay","filtered_week","bd","getEndOfWeek","filtered_month","search","debounceTime","switchMap","fzone","queryBooking","zone_ids","available_from","available_to","search_long_week","querySpace","space_list","processBookings","dailyCount","days","daily_count","buildSpaceLongQuery","counts","details","runOutsideAngular","interval","updateRoomList","new_bookings","concat","undo","attempted_to_delete","bkg","booking_master","period","replaceBookings","room_email","fromTz","toTz","intersects","timePeriodsIntersect","roomSatisfiesConditions","multi_rooms","room","in_zone","has_space","space_emails","in_zones","declined","getType","show","hide_type","dateWeekday","time_changed","SettingsService","is_concierge","nowTz","defaultTitle","defaultLocalTimezone","Intl","DateTimeFormat","resolvedOptions","timeZone","defaultBuildingZone","defaultOrgainiser","User","active_user","defaultBookingType","building_zone","booking_type","attendees","organiser","creator","booked_by","room_setup","room_breakdown","notes","equipment_codes","equipment_code","expected_attendees","headcount","check_ins","notify_users","company","booker","booker_concierge","level_zone","opt_out","multiroom_master_id","room_id","findSpace","roomsData","roomId","newRoom","defaultStartTz","startEpochProvided","startDateTzProvided","round","created_epoch","all_day","show_as","approvalStatus","approval_status","catering","CateringOrder","edited_fields","edits","values","occurrence_edits","recurrence_end","occurrence_ids","occurrence_details","author","isEdit","opts","note","handleRecurrenceFields","recurrence_list","location_name","from_room","approve","old_start","old_end","creation_date","creationDateTz","cateringOrders","allAttendees","checked_in","checkInsArray","has_visitors","occurence","getTime","shift","_recurrence_endTz","byRequest","tentative","isAnyRoomDeclined","delivery_time","getTimezoneOffsetString","abs","dateDiff","displayEndDateTz","external","buildingTzDt","isBeforeDate","isAfterDate","recurrenEndFromOcurrences","mergeCateringOrders","order_list","orders","order","location_id","booking_timezone","BOOKING_STATUS","MINUTE","HOUR","DAY","WEEK","MONTH","DURATION_MAP","months","week","weeks","bookingOptionsToQuery","property","until","getFreeBookingSlots","min_size","dateTzMs","slots","bkn_start","bkn_end","getNextFreeBookingSlot","date_","block","generateBookingForm","use_fields","isConcierge","manualTimezone","user_service","current_user","current","FormControl","disabled","Validators","required","validators","minLength","updateOn","needs_space","is_before_date","setValidators","validateEndTime","disable","dateValidators","isFuture","validDateTZ","updateValueAndValidity","list_length","valueChanges","expected","codes","new_expected","new_codes","space_needed","simplified_fields","handleAllDay","clone","enable","occurrences","RecurrencePeriod","LIST","occurrence","CLONE","BookingAction","start_dateTz","d1","d2","_recurr_end","fields_with_recurrence","WEEKLY","recurrence_pattern","arrayWithValues","FormGroup","control","validDate","isSameDate","JSDate","getMinLength","rule_list","min","min_block","min_length","conditions","stringToMinutes","durationGreaterThanOrEqual","duration_1","duration_2","requestable","free_slots","next_free_slot","currently_free","time_until_next_block","free_tomorrow","free_today","available_until","spaceStatusToDisplay","filter_options","filtered_list","updated_list","start1","end1","start2","end2","formatWhen","startTZ","endTZ","displayEndTZ","isIncludes","searchVaue","searchRoomsAndBookings","allItems","searchValue","relevantItems","filteredItems","duplicateMultiroomEntriesIfAny","updatedBookings","duplicatesCount","duplicatedBooking","cloneDeep","BookingsService","setService","uniqueId","respond","series","toApiJSON","taskObsr","requests","booking_id","forkJoin","BookingsPaginatedService","getHoldingBay","queryHoldingBay","response","PaginatedAPIService","space_rules_for_user","rule_block","checkRules","ruleset","max_length","counter","condition","groups","j","last_location","check","CateringCategoriesService","CateringCategory","is_category","must_select","order_anytime","CateringItem","_amount","instance_id","from_month","to_month","description","prior_notice","notice","unit_price","price","supplier_cost","minimum_quantity","maximum_quantity","parent_categories","category_ids","categories","image_path","admin_only","catering_type","amount","allergy","cateringItems","filteredCateringItems","out_of_stock","availableItems","substr","anytime","can_order_anytime","CateringItemsService","CateringMenuService","CateringNotesService","cateringNotes","hasBookingAttached","bookingDateTz","charge_code","kitchen","pantry","symbol","total","deliver_date","mergeCateringItemWithFormData","existing","override","CloseDialogService","dialogRefMap","dialogRef","close","DialogIds","CollapseService","collapseSubject","collapse$","DataCommonModule","INVALID_STANDALONE_KEYS","HotkeysService","keydown_states","keydown_observers","combo_end","registered_combos","addEventListener","mapKey","last_down","preventDefault","combo","combination","validCombination","last_key","updateCombinationEndList","presses","key_list","non_meta","MapLocation","map_id","desk_id","normalise","x_max","Organisation","BuildingLevel","levelWithID","fixed","confidence","at_desk","bld","building_id","LocationService","Building","disc_info","discovery_info","extras","extra_id","extra_name","loan_items","_roles","roles","_lockers","lockers","locker_structure","_systems","systems","_phone_numbers","phone_numbers","_location","longitude","latitude","searchables","neighbourhoods","lvl","lvl_features","level_id","booking_details","catering_restricted_from","currency","requires_equipment_code","requires_expected_attendees","holding_bay","visitor_space","sort_order","_data","bld_id","level_name","lower_name","map_url","floor_type","available_buildings","OrganisationService","_users","_spaceTypesSubject","_organisation","ids","bld_list","_active_building","organisation","loadOrganisation","loadLevels","space_types","loadSpaceTypes","tags","org_data","bld_data","lvl_data","type_data","types","getOrganizationFiltersByRoomType","setItem","DaysOfWeek","RepeatsOn","recurrencePeriodToDurationType","DAILY","ABSOLUTE_MONTHLY","generateWeekDays","params","start_week","week_days","activeDate","active","full_name","day_index","getFirstDateFromList","getLastDateFromList","recurrenceDetails","recurr","getPeriod","recurrenceRecurringDetails","removeExpiredOcurrences","controls","tz","date_now","setStartAndEndDateFromArray","dates","setRecurrenceStartsTime","dateHour","Report","cleanData","txt","charAt","UNIX_timestamp","getMonth","getHours","suffix","getMinutes","timeConverter","formatCancelledBy","room_field","price_field","row","space_service","org_service","CurrencyPipe","transform","organizer","person","isCancelled","cancelled_by","cancelled_at_epoch","cancelled_date","remove_fields","output","idx_a","idx_b","csv_json","ReportsService","fromCSV","_service_list","findIndex","provider","provideFor","useValue","SETTINGS_TOKEN","SettingsObject","_app_name","_overrides","_observables","_bypass_bookings","VERSION","built","semver","hash","override_settings","Inject","OPTION_DEFAULTS","SpaceEquipments","SpaceStyles","EMPTY_ARRAY","allowStaffRoomWithBookings","room_style","equipment","bypass_bookings","defaultGlobalName","defaultSettings","room_name","support_url","features","extra_features","room_type","simple_name","rulesFor","nowMs","runningBookings","bks","startEpoch","endEpoch","spaceWithBookings","roomType","natural_light","Set","recurrence_availability","availabilityOptionsToQuery","hide_declined","blds","bld_b","a_has_zone","b_has_zone","SPACE_LIST","SpacesService","queryRooms","updateSpace","uploadSpacePhotos","setList","filterAvailableSpaces","faker","SERVICE","generateMockOrganisationService","jest","generateMockBuilding","getRoomTypeSubsetDDOptions","generateMockDataService","generateMockSpacesService","generateMockUsersService","loadCurrentUser","bookingState","setZone","setDate","setFilters","remove","startPolling","startPollingMonth","startPollingWeek","startPollingEveryFiveMin","test_app","logo_light","background","logo_dark","heap_io","force_ssl","secure_cookie","disable_text_capture","cookie_path","TEST_SETTINGS","app","generateMockSettingsService","overrides","provideMockSettingsObject","provide","generateMockAppService","settingsOverrides","notifyInfo","notifyWarn","notifySuccess","notifyError","navigate","navigateBack","Composer","Hotkeys","Users","Locations","Base","Menu","Spaces","Bookings","Reports","CateringItems","CateringCategories","Settings","generateMockUser","booking_list","fill","generateMockBooking","mockReturnValue","save","addFrom","removeFrom","clearList","removeFromList","accept","decline","checkin","is_logged_in","queryRoomsForQR","queryObsr","checkinIndividualVisitor","updateObsr","mockImplementation","SPACE_COUNT","generateMinimalRoomDetails","generateMockSpace","space_id","recurring_search","lastName","room_booking_screen","vc","linked","commerce","productName","searchable","controlable","hourly_rate","sort_priority","business","USER_DOMAIN","BOOKING_COUNT","BOOKING_DATE","setMockBookingStartDatetime","visitor","generateMockCateringOrder","menu","date_start","users","lorem","paragraph","BLD_COUNT","LVL_COUNT","generateMockLevel","levelGenerator","firstName","test","nested","level2","org","USER_COUNT","USER_EMAILS","companyName","delegates","delegate_count","first_name","last_name","phone","phoneNumber","department","staff_code","avatar","pickMenuItem","menu_map","category","generateMockLocation","fixed_locations","maps","ORG_COUNT","generateMockOrganisation","generateMockBuildingSetByCity","generateMockModalData","pendingDate","pendingDuration","mockDateToBuildingTz","windows_id","mobile","business_unit","organisation_id","organisation_name","officeLocation","desk","generateUserForm","pattern","maxLength","UsersService","uhttp","expiry","reload","client_id","Md5","hashStr","go","append","authorise","logout","tries","locate","loadDelegates","promises","del","all","HAS_ERROR","buildValidateDate","validateDate","is_from","buildValidateStartTime","validateStartTime","date_obj","buildValidateDuration","validateDuration","buildValidateAttendees","validateAttendees","invalid","dateControlTz","noWhitespaceValidator","isWhitespace","trim","whitespace","date_org","local_tz","zoneName","compare_to","unit","ans_unit","newDate","startOf","monday","sunday","later","endOf","isLastDayOfMonth","minus","hasSame","dateYear","dateMonth","dateDay","trunc","toSeconds","toUTC","toJSDate","getDay","convertLocalTimestampToTimezonedDateTz","buildingTimezone","convertTimezonedTimestampToLocalDateTz","localOffset","getTimezoneOffset","desiredOffset","eleA","localTimezone","offset_minutes","toMiddayUTC","timezoneOffset","EnvironmentModule","providers","ENVIRONMENT_TOKEN","EnvironmentService","environment","production","BookingConfirmComponent","_booking_state_service","_router","_dialog","_dialog_ref","closeDialogService","EventEmitter","lastMomentConflict","old_booking","is_request","approved","bookingDetails","bookedBy","disableClose","checkSpaceAvailability","newEmail","replaceObjects","constructor","replacement","nk","buffer","elem","has_note_buffer","updated","master_booking","pollOnce","closeDialog","MeetingDetails","emit","erroMessage","queryParams","ref","ConflictsModalComponent","maxWidth","width","local_room_name","conflicts","copy_conflicts","componentInstance","clipboard","writeText","conflictsText","afterClosed","duration_value","recurrenceDates","a_space","dateTZ","MAT_DIALOG_DATA","Component","templateUrl","styleUrls","Output","BookingFormComponent","cdRef","user_list","fromDateTz","untilDateTz","localStart","localEnd","chipOptions","updateCoachmarkTimes","skip","distinctUntilChanged","recurrenceStarts","clearValidators","arrayValidators","disableInputs","has_id","is_edit","patchValue","SpaceSelectModalComponent","multiple","needsCatering","NewUserModalComponent","detectChanges","localTzOffset","buildingTzOffset","toggledControlName","changeDetection","ChangeDetectionStrategy","OnPush","BookingCateringConfirmModalComponent","CateringDetailsModalComponent","_cateringNotesService","head_counts","needs_charge_code","active_space","note_list","notes_field","generateFormFields","markAllAsTouched","is_valid","new_notes","setNotes","_scrollToBottom","_content_el","scrollTo","top","scrollHeight","left","behavior","active_form","errors","minlength","submit","ViewChild","CONFIRM_METADATA","maxHeight","ConfirmModalComponent","DECLARATIONS","NoCateringModalComponent","RequirementDetailsModalComponent","UserFormComponent","LegacyOverlaysModule","LegacyUiModule","FormsModule","ReactiveFormsModule","UiModule","EditorModule","new_user","confirm","cancel","codes_field","head_counts_field","firstSpaceEmail","head_count","anySpaceNeedsChargeCode","roomBasedEqCode","officeBasedEqCode","change$","selected_spaces","request_map","formGroup","triggerSearch","savedSelection","request_id","search_results$","active_building","resp","active_type","_space","setDefaultBuilding","grouped_by_city","city_buildings","noCateringDialogRef","autoFocus","backdropClass","defaultBld","opt","space_a","space_b","withLatestFrom","formData","ActionIconComponent","hasSelectionRequirements","getActiveList","CateringMenuItemComponent","initial_state","an_cat","setAmount","cat","an_item","updatePackageSelection","setPrice","selectPackageOptions","confirmed_item","cart_item","active_items","updatedList","PackageOptionsModalComponent","done","a_list","animations","checkItemRequirements","getActiveItems","a_package","needed","CngSearchBarComponent","placeholder","totalFoundItem","showSrchWarning","searchStr","configChanges","box","onSearch","resetSearch","HoverClassDirective","elementRef","hoverClass","classList","ActionFieldComponent","show_tooltip","performAction","CounterComponent","useInput","previous_value","handleTimeout","ctrl_key","shift_key","new_value","changeInput","Number","isNaN","_onChange","_onTouch","NG_VALUE_ACCESSOR","useExisting","forwardRef","multi","DateFieldComponent","_from","position","onChange","old_date","new_d","new_date","_trigger","closeMenu","openMenu","_to","years","menuOpen","MatMenuTrigger","openDatePicker","$event","closeDatePicker","DurationFieldComponent","specialPreprops","duration_options","generateDurationOptions","blocks","TimeFieldComponent","no_past_times","show_select","_time_options","generateAvailableTimes","select_field","focus","openedChange","datestamp","show_past","showSelect","UserListFieldComponent","search$","search_str","match_name","match_email","inputAutoComplete","openPanel","closePanel","active_list","a_user","file","files","reader","FileReader","readAsText","evt","processCsvData","srcElement","endsWith","addUser","template","MatAutocompleteTrigger","addUsersFromFile","downloadCSVTemplate","read","UserSearchFieldComponent","resetSearchString","FeedbackComponent","updateRoute","NavigationEnd","current_page","IconComponent","PopoutMenuComponent","SearchbarComponent","UserAvatarComponent","MATERIAL_MODULES","MatButtonModule","MatSnackBarModule","MatDialogModule","MatFormFieldModule","MatInputModule","MatProgressSpinnerModule","MatProgressBarModule","MatAutocompleteModule","MatSelectModule","MatChipsModule","MatRippleModule","MatMenuModule","MatCheckboxModule","MatTooltipModule","MatRadioModule","MatTabsModule","MatSlideToggleModule","ACA_PIPES_MODULE","valueChange","autofocus","focusField","input_field","actionPrefix","stateKey","buildAction","postfix","clear","wrapLoading","selectData","warn","selSuccess","selectSuccess","selOptionalSuccess","selectOptionalSuccess","selError","selectOptionalError","selLoading","selectIsLoading","actionObject","caller","flatMap","isLoading","hasError","hasSuccess","_success","isEmpty","isSuccess","isError","hasLoaded","shouldLoad","selectIsSuccess","selectIsError","selectHasLoaded","selectIsEmpty","generateMockActions","dispatcher","Actions","verifyActionSuccess","effect","expect","toBeDefined","toStrictEqual","verifyActionError","organisationStateSelector","OrganisationEffects","organisationService","OrganisationModule","organisationReducer","initialState","rooms","loadRoomsWithQuery","selectRoomResultsSuccess","RoomsEffects","spaceService","afterRequestResultsLoadOthersEffect","laterThatDayFromDateTz","nextBusinessDay","diff_capacity","loadRoomsForResultsEffect","roomQueryOptionsToSpaceAvailabilityOptions","loadRoomsForResultsMapEffect","loadLaterThatDayResultsEffect","loadNextDayResultsEffect","loadDiffSizeResultsEffect","loadRoomByIdResultsEffect","roomByIdQueryOptionsToSpaceAvailabilityOptions","RoomsModule","roomsReducer","initialRoomsState","byid","todayFromDate","retDate","mapRoomToSelectOption","resultCountObservable","loadingObservable","resultsObservable","viewModelLength","deepDistinctUntilChanged","deepEqual","filterUndefined","RxUtilsModule","AcaDatePickerComponent","klass","show_last_selection","min_offset","max_offset","date_list","month_name","days_of_week","day_format","month_format","generateMonth","generateDaysOfTheWeek","updateOptions","counters","difference","today","end_","non_month","_change_timer","new_offset","updateDate","changeMonth","AlertMode","AlertBannerDisplay","AlertBannerComponent","mode","Warning","showClose","V1","iconPath","materialColor","closeIcon","_onModeChange","Coachmark","BlueCoachmark","AutoCompleteChipSelectItemComponent","optionSelected","feedbackOutput","chipsCleared","onClickConfirm","selectOnlyOneGroup","localFilter","selectOnlyOneGroupChange","separatorKeysCodes","ENTER","COMMA","filterFormControl","focused","mobileFullScreen","autocompleteOptions","filteredAutocompleteOptions","enableCTAs","hasChips","scrollEvent","panelOpen","contains","onFocus","blur","valueAccessor","color","enabled","selectedGroupHeader","getFilteredAutocompleteOptions","groupHeaders","g","searchString","exactMatches","moreOptions","joinedOptions","groupIds","parents","jo","matInput","feedbackInput","useCTAs","focusIn","fromPanel","componentInput","loseFocus","isDisabled","spl","removeEventListener","dirty","touched","keyedInput","onPanelFocusChange","selectOption","encapsulation","ViewEncapsulation","Self","Optional","GroupHeaderPipe","hasHeader","displayAsHeader","AutoCompleteSelectOptionComponent","filteredOptionsChange","inputTextChange","emptyBoxEvent","_options","updateFilteredOptions","selectedValue","resetInput","filteredOptions","startWith","_filter","filterValue","filterValues","matchesAll","onChangeInput","BaseTemplateComponent","vcRef","isRendered","attemptViewEmbed","createEmbeddedView","TemplateRef","CngSelectOptionsComponent","CngSelectComponent","isClosed","defaultSelected","onChangeCallback","DropdownTriggerForDirective","overlay","viewContainerRef","renderer","isDropdownOpen","dropdownClosingActionsSub","EMPTY","isPanelOpened","destroyDropdown","openDropdown","ddWidth","dropdownPanel","offsetWidth","overlayRef","create","hasBackdrop","scrollStrategy","scrollStrategies","positionStrategy","flexibleConnectedTo","withPositions","originX","originY","overlayX","overlayY","offsetY","templatePortal","TemplatePortal","templateRef","attach","dropdownClosingActions","backdropClick$","backdropClick","detachment$","detachments","dropdownClosed","merge","detach","dispose","CollapseHeaderComponent","collapseService","isExpanded","collapseSubscription","expansionPanel","ConflictAlertModalComponent","dialogData","callback","dateIsToday","DateTzCalendarWidgetComponent","className","selectedDateTz","_today","registerOnChange","registerOnTouched","startOfMonthDateTz","DateTzDatePickerComponent","icon_only","onSelect","can_pick_today","selectedDateTzValue","resetToLastSelection","_acaDatePicker","initialDateSelectionTz","writeValue","newValueTz","newDateTz","onDatePickerClose","DateTzDurationFieldComponent","defaultDurationGroups","DEFAULT_DURATION","currentStartDateTz","nearestStep","placeHolderOption","selectedOption","generateDurationOptionsFromGroups","extended","dopt","DateTzTimeFieldComponent","noPastTimes","show_current","startFromDateTz","selectedTimeString","generateAvailableTimesTz","generateOptionForDateTz","os","timeOptions","displayString","newTimeTz","setSelectedValues","ErrorMessageComponent","CalendarIconComponent","ChevronIconComponent","CloseIconComponent","InformationalImageComponent","LabelComponent","LegendDropdownComponent","isOpen","placeholderOpen","MckDatePickerComponent","dateValue","initialDateSelection","goToToday","secondarySubmit","primarySubmit","ModalButtonRowComponent","primaryDisabled","disableFixed","secondaryDisabled","smallButtons","ModalComponent","shouldClose","OverrideChangesModalComponent","getDateString","epoch","toISOString","uniqueDates","filteredEdits","dateString","has","FilterPipe","searchText","objectKey","splitKeys","it","included","SecurityContext","SanitizePipe","sanitizer","sanitize","RESOURCE_URL","URL","SCRIPT","STYLE","HTML","RadioSelectComponent","RecurringBookingForm","recurrence_types","PATTERN","DATE","recurrencePeriod","current_type","pattern_form","recurrencePatternFormControl","RecurrencePatternForm","onChangeType","RecurrenceDateForm","selected_dates","setPickerToGivenDate","tempForSort","start_date","formDateTz","is_selected","setDateTzForm","dateTsValue","addDate","fromStartTz","untilTz","repeat_period_options","validateRecurrenceInterval","repeat_every_options","recurrenceIntervalFormControl","fromEndTz","setEndDateFromStartDate","recurrenceDateStartTzFormControl","recurrencePeriodFormControl","generateMaxIntervals","recurrenceDaysFormControl","current_days","generateOcurrenceList","recurrenceEndFormControl","end_date","updateActiveWeekday","updateValidators","date_diff","periodToDurationType","first_date","recurr_days","daysInMonth","_week_days","new_day","current_index","setRepeatEvery","setRepeatPeriod","SelectOptionComponent","ignoreDisabled","noEntriesFoundLabel","SelectComponent","searchEnabled","splitDisplay","showDivider","SelectedChipCountComponent","SpacerMode","SpacerComponent","Horizontal","SwitchGroupComponent","optionChecked","closestTimeSlot","buildingDate","newTime","ToggleComponent","selectedChange","TooltipComponent","isVisible","TooltipPosition","DEFAULT","theme","TooltipTheme","tooltip","visible","TooltipDirective","appRef","componentFactoryResolver","injector","showDelay","hideDelay","componentRef","initializeTooltip","setHideTooltipTimeout","touchTimeout","bind","componentFactory","resolveComponentFactory","attachView","hostView","rootNodes","tooltipDOMElement","setTooltipComponentProperties","showTimeout","showTooltip","instance","getBoundingClientRect","right","bottom","BELOW","ABOVE","RIGHT","LEFT","hideTimeout","detachView","MatIconModule","MatExpansionModule","OverlayModule","NgxMatSelectSearchModule","NgxSkeletonLoaderModule","ZoomWarningComponent","ALL_DAY_BOOKING_VALUE","showPast","inputDate","allDayOption","oneWeekOption","onCloseClick","loadUser","selectUserState","selectHasUserData","UserEffects","userService","UserModule","userReducer","initialUserState","webpackEmptyAsyncContext","req","module","routes","component","ShellWrapperComponent","children","loadChildren","BookingModule","redirectTo","AppRoutingModule","RouterModule","forRoot","useHash","AppComponent","_app","_route","val","navigationTrigger","cleanHash","isLoadBookingUrl","isLoadCateringUrl","adjustZoom","clientWidth","isMobileOrTablet","vendor","maxTouchPoints","mobileAgents","localStorageSyncReducer","reducer","localStorageSync","rehydrate","metaReducers","AppModule","MAT_LABEL_GLOBAL_OPTIONS","DEFAULT_SETTINGS","BrowserModule","BrowserAnimationsModule","HttpClientModule","ComposerModule","SharedContentModule","StoreDevtoolsModule","instrument","maxAge","logOnly","MapModule","bootstrap","CalendarDateWidgetComponent","show_add_item","show_events","retainSelectedDate","dateChangeTz","timezone_value","event_map","dateInputTz","changeDate","noOfCount","applyDatePickerValue","BookingCalendarWrapperComponent","BookingCalendarRoutingModule","forChild","settingService","TopBarHeaderMode","backRoute","orgBuildings","onBackCallback","bookingModuleDeclarations","StaffCalendarComponent","DayViewTimelineComponent","DayViewSpaceComponent","DayViewSpaceEventComponent","CngMenuItemComponent","bookingModuleImports","BookingCalendarModule","router","onChildSelect","node","overlap","calculatePosition","storeOrder","view","shown_date","from_previous_day","toFixed","overflow_top","overflow_bottom","timeBasedStatusLabel","userEmail","time_period","userName","cdr","legend","eventMovingLoader","inView","dragging","moving","event_list","overlap_details","position_list","time_blocks","generateTimeBlocks","filterEvents","checkInView","last_update","calculateOverlaps","override_state","isRecurrentMaster","isRoomEmailMatch","isIncludedInSetupOrBreakdown","overflow_only","collisions","cmp","cmp_start","cmp_end","in_view","offsetLeft","delta","pointerPosition","scroll_top","top_minutes","selectedBlockStart","selectedBlockEnd","hasValidBreakdown","active_level","foundSearchLength","searchedCounter","levelsDD","paramMap","updateLevel","initSpace","numeric","ignorePunctuation","roomLevelDD","ddBoxClass","onChangeActiveLevel","generateBuildingMenu","filterd_booking","menuItem","displayName","iconName","buildingLevels","buildingMenuItems","activeBuildingName","searchBooking","updateDateTz","UPDATE_INTERVAL","scroll_left","scroll_offset","filtered_spaces","loading_space","space_zones","is_today","modalInitialized","isEventMoving","scroll_area","initSpaces","updateTime","addClass","virtualScroll","space_type","stopPolling","scrollIntoView","queryParamMap","view_id","spaceJson","active_hour","searchData","column","removeClass","spaceId","bookingEl","timeoutID","scroll_box","date_percent","scrollWidth","CdkVirtualScrollViewport","clearSelected","updateScroll","BookingConfirmationComponent","Light","statusText","confirmed","isUnavailable","Urls","Help","modal","dispatch","u","generateFeedbackUrl","currentPage","BookingCreateComponent","selectedRoom","bookingFormToBooking","updateConfimatinModal","unavailable","_bookings_service","handleBookingSuccessResponse","handleBookingErrorMessage","displayWarningBanner","BookingFormBaseComponent","submitForm","validateForm","BookingEditWrapperComponent","BookingEditComponent","updateCallback","isEditSeries","roomEmail","bk","getNotes","isEquipmentNote","isCateringNote","booking_form_data","formToAttendees","formToCompany","updateNotes","closeCallback","dialog","invalidForm","showWarningBanner","submitTimestamp","has_delegate","saveChanges","raw_user","nameParts","companies","custom","warningMessage","bookingData","setupOrganiser","setupNotes","track","dataForConfirmation","endDateString","timeString","durationString","isConflictWithOccurences","openRecurrenceConflictsModal","totalConflicts","is_conflict","total_Conflicts","recurr_ref","bookingTypeLabel","recurrenceStart","requestedEndDateTz","endDatestring","BookingDetailsModalComponent","expandedLocation","isRecurrentBooking","isMultiroomBooking","byIdResults","expandedAvailability","showInfoBanner","showCatering","disableSeriesEditButton","disableCancelButton","disableEditTimeButton","disableUpdateDetailsButton","_specific_dates","roomLocation","street_and_city","initDisplayValues","displayCancelModal","cancelBooking","addCatering","roomHasCatering","hasLoaderUrl","ocurrence","available_fields","fromEvent","throttleTime","tap","showDetails","dispatchToGetFloorCurrentStatus","hostEmail","roomName","attendeesString","chargeCode","mapUrl","extendableMaximum","focusedRoom","checkingExtendable","receiptionEmail","reception_email","companyString","setAlternativeWeekStartDate","requirements","orgStatus","recentlyExpired","statusImage","findMaxExtension","fetchRooms","invalidDueToOfficeRule","alertIfItHasConflict","flag","setupInSeconds","breakdownInMinutes","gapInMinutes","editingSeries","roomOption","recurringBookingData","rec_endTz","getLocation","clearFormAndResultData","dialog_ref","RoomBookingModalComponent","navigateTo","navigateT0Search","relativeTo","refresh","CancelBookingModalComponent","legth","dialogRefX","BookingDurationModalComponent","maximum","updateBookingState","alternativeWeekStartDateTz","pendingChanges","roomRules","displayInfoBanner","global_name","isBookable","isAvailable","headerText","buttonLabel","bookingDate","allWeek","startOfWeek","specific_dates","show_fields","getRawValue","closeModal","steps","updateBookingDuration","bookingSelect","BookingResultItemComponent","small","timeStringParts","localTimeStringParts","isAnotherTimezone","setupDisplayFields","viewModel","timeRangeString","bkn1","bkn2","RoomResultsComponent","RoomFiltersModalComponent","RoomDetailsComponent","ManageBookingsComponent","OfficeFloorComponent","RoomBookingComponent","BookingRoutingModule","BookingsListingComponent","BookingCateringComponent","BookingCateringOrderDetailsComponent","BookingCateringOrderListComponent","CateringMenuCategoryComponent","CateringOrderListItemComponent","SearchedLocationComponent","ResultsHeaderComponent","RoomAvailabilityPreviewComponent","RoomLocationPreviewComponent","RoomResultItemComponent","RoomBookingFormComponent","RoomBookingDetailsFormComponent","RoomResultsPaginatedComponent","RoomFiltersFormComponent","RoomResultsSectionComponent","RoomAvailabilityPreviewModalComponent","OrderTableComponent","SurveyModalComponent","CalendarModule","DateAdapter","useFactory","adapterFactory","OfficeFloorMapModule","bookingResults","showBookings","reloading","totalRecords","pageLimit","bookingPerPage","filteredByHost","getViewModel","prevPage","setPage","nextPage","prevGroup","pages","nextGroup","gotoPage","page","activeTab","sort_asc","sort_desc","reverse_sort","allBookings","filterBySelectedHost","originalArray","subarrayLength","newArray","$change","selectedHost","searchBookingBy","isHostChanged","searchHost","filterBookingsBySearchValue","filteredBookings","lastPage","splitArrayIntoSubarrays","getBuilding","page_idx","dontShowReloading","p","startPosition","maxed","mined","canceled","buildingAddress","next_disabled","combineItems","newItems","oldItems","itemsObj","active_order","an_order","reduceItems","reduceOrders","consolidatedOrders","deliveryTime","saveBooking","openCateringDetailsModal","_menu","category_list","available_times","matched_items","initForm","_input_el","show_search","loadMenu","generateStartAndEndTimes","space_email","building_time","cat_start_time","cat_end_time","within_restricted_time","has_available_items","out_of_hours","form_controls","expired","confirmOrder","edit","newOrder","previous","bookingTypes","searchBarConfig","bookingId","snapshot","verb","initData","closeAll","viewBookingFromEmailLink","replaceUrl","ifUser","host_list","hostOptions","delegateDD","onChangeDelegates","ddOptionBoxWidth","clearPage","BookingResultsViewModel","WAITING_TIME","FloorMapOverlayComponent","selectedRoomId","zoom","MIN_ZOOM_LEVEL","center","CENTER_POINT","availableUntil","untilNextBookingFlag","isTimerActive","timerIndex","fetchRoomWithBookings","userSelectedRoom","calculateRoomBookingTimeInfo","currentStatus","activeBookings","timeRemainingInActiveBooking","timeUntilNextBooking","setupTimer","updateSchedulingEpochs","intervalCall_1","intervalCall_15","determineNextBookingStartTime","parentComponent","roomStatus","nowTime","ts","addMin","nextBookingStartTime","futureBookingsForTheDay","nextBookingStartTimeMs","setUpTime","addSeconds","TIME_SIMPLE","startTimer","childCallback","updateRoomData","isOverlayOpened","adjustedTime","timeSlot","end_epoch_15","end_epoch_30","timer","currentTime","endTime","availableTimeToBook","minutesRemaining","secondsRemaining","setup15MinTimer","addjustedTime","futureBookings","endEpoch30","latestBookingStartTime","timeDiffMs","diffInMs","diffInHours","diffInMinutes","roomSelected","roomDataCallback","confirmBooking","MAP_OVERLAY_DATA","Emulated","MAX_ZOOM_LEVEL","mapSpaceStatusToDisplay","mapSpaceStatusToOption","legendOptions","defaultMapBookingRules","defaultMapBookingSubtitle","generateMapStyleForSpace","colorStatusMap","styles","generateMapListenersForSpace","hoverSpace","leaveSpace","clickSpace","listeners","spaceToMapFeature","coordinates","roomToMapFeature","SERVICE_ACCOUNT","mapModuleImports","LibraryModule","mapModuleDeclarations","openHeader","focusedMapSpace","resultBuildings","resultSpaces","activeBuilding","activeLevel","activeSpace","style_map","bookingLocations","buildingLevelOptions","spaceListOptions","activeBuildingOption","activeLevelOption","activeSpaceOption","bookingFormData","bookingConfirmed","getState","floorMap","selection","serviceAccount","self","selectActiveBuilding","spacesFromSelection","colour_map","mapStyle","focusOnRoom","firstBuilding","selectBuildingLevel","OfficeInformationModalComponent","navigationExtras","kioskFormFilter","dayOfWeek","toggleOptions","selectedToggle","selectedToggleChange","retrievedOption","onSelectedChange","queryParamsHandling","pendingDateTz","updateDisplay","pendingDateString","pendingTimeString","pendingDurationString","currentBooking","mockBooking","pending_date","$value","formControl","localizedStartDate","localizedEndDate","updateDatePickerValue","WEEKEND_DAYS","grey","secondary","primary","blue","red","confirmChanges","handleExpand","updateCalendarWeekView","warnIfItHasConflict","showDatePicker","showWeekend","calendarPopupValue","pendingChange","eventSnapSize","dayRefresh","weekRefresh","addMarginOnConflict","cssClass","resizable","beforeStart","afterEnd","draggable","modal_data","scrollFired","date_span","dateControl","currentBookingStartDate","weekViewDateTz","calendarCenter","viewDateTz","fromISO","setCalendarValue","setupEventName","transformBookings","expanded","setDislayValues","dayStartHour","tz_offset","week_start_date","week_view_date","weekViewRangeText","backgroundColor","startHour","dayEndHour","bumper","getBumpers","calendarSpan","raw_booking","displayClass","utcStart","utcEnd","adjustedStartDate","utcToZonedTime","adjustedEndDate","assign","milliseconds","updateTileColor","booked","conflict","hasConflict","isEvents","thirty_minutes_in_millis","toDate","buildingTz","localizedStartTime","localizedEndTime","bookingStartTime","bookingEndTime","bstart","bend","newStart","newEnd","iEvent","buildingStartDateTz","buildingEndDateTz","new_start","md","dnd_duration","one_day_in_millis","conflictCheckStartTime","conflictCheckEndTime","buildingStartDate","applyChanges","ele","getElementById","_snackBar","triggerSubmit","showHint","searchSubject","selectedUsers","notesHandle","noteValidationClass","selectedCompanies","companyOptions","bookingFormGroup","checkingBreakdown","searchResults","unshift","formRef","onSubmit","inputValue","headCountControl","showCancel","cancelSubmit","fromDate","emitEvent","formGroupData","is_past","_checkDateInPast","openSnackBar","formGroupDate","closestTz","prevClosestTz","prevDateTz","showManageButtonA","showManageButtonB","showManageButtonC","homepageBookingResults","pastBookingResults","onbeforeunload","upcomingBookings","LearnMore","routeToResults","routeToManageBookings","isAlertDisplayed","roomSubtype","occurenceAvailability","getCurrentNavigation","availabilityStatus","checkAvailabiltyAsPerRule","setRoomSubType","requestedDateTz","endDate","temp","isSpaceValidAsPerRule","goToBackRoute","expandAvailability","updateAvailabilityStatus","primaryCheck","secondaryCheck","removeDateOffset","bookingRoute","isRequest","combinedFeatures","handleClose","expandMap","bookRoom","isInternal","filtersSubmit","getFilters","toggleOptionChecked","submitFilters","Dark","viewMode","featuresRoom","minZoom","setIntervalHandle","initMapZoom","zoomToRoom","roomSelect","availability","firstChange","coachMarkAction","ROOM_DISPLAY_STEP","ROOM_DISPLAY_START","displayCount","displayViewModels","viewModels","vm","markForCheck","showLoadMore","remainingResults","spaceConflicts","overrideChanges","goToRoomDetail","mainResultViewModels","editing_form","AlternateBuildings","subscribeResultsToViewModels","subName","flattenLevelBuildings","viewModelSubject","resultsLoading","updateCoachMark","coachMarkDisplay","RoomResultsCoachmarkViewmodel","rules_link","levelBuildings","cityFromLocation","actionButtonText","day_offset","mainResults","mainResultsFiltered","laterThatDayResults","nextBusinessDayResults","diffSizeResults","laterThatDayDisplay","mainCoachMarkDisplay","mainResultsCount","laterThatDayCount","nextBusinessDayCount","diffSizeCount","spaceControl","searchStringPresent","nday","despatchLoadRooms","mainResultsSpaces","filteredRooms","selectedMenuIndex","isForFloorMap","selectedSpace","clearRoomSearch","roomIds","collapsePanel","changeSearchResults","overflow","changeClick","filterClick","canFilter","timing","filterDisplay","filterCount","computeDisplay","occEndDate","endRecDate","startDisplay","endDisplay","durationDisplay","FooterMenuComponent","tiles","MapControlsComponent","levelChange","building_details","building_list","level_list","setBuilding","lvl_id","OverlayMenuComponent","showChange","copyright","delayedClose","cancelClose","ResponsiveInlineImagesComponent","imgArr","phase","baseUrl","questions","created_at","updated_at","header_question","header_subtext","answers","questions_id","positive","option_responses","comments","getFeedbackQuestionsFromApi","questionID","checked","$evemt","delayed","TopbarHeaderComponent","backModal","noSurvey","menuChange","onBack","modalOpen","surveyDialogRef","feedbackId","logo","feedback_id","openFeedbackModal","homeOverride","help_url","back","feedback_url","goToFeedback","goToHelp","LoginComponent","username","password","login","setErrors","zoomOutClick","zoomInClick","refreshClick","infoClick","toggleEvent","toggle","MapFiltersComponent","selectedBuildingChange","selectedLevelChange","selectedSpaceChange","searchClick","buildingControl","levelControl","MapOverlayComponent","closeMapOverlayOutlet","closeOverlay","MapSearchComponent","floorData","floorDataParam","refreshFloorNumber","selectActiveSpace","displayOfficeInformation","propagateToggle","zoomIn","zoomOut","resetZoomLevels","info","custom_html","map_rules","other_rules","contact","link","COMPONENTS","CDK_MODULES","ScrollingModule","DragDropModule","CdkTableModule","APipesModule","AInteractiveMapModule","ACustomEventsModule","IvyCarouselModule","placeOs","activatedRoute","userLoading","isQRCode","buildingOptions","oauth_redirect","availibityParams","setSpaceList","bookingRoom","seledtedZone","NavigationStart","checkRoomId","query2","loading_state","initialized","isQRCodeScanedAndReady","mod","Feedback","hmr","general","home","help","columns","booking_types","html_body","multiple_spaces","desk_start","space_display","show_images","directory","show_avatars","min_search_length","explore","can_select_building","show_legend_group_names","show_timeline","General","day_view","dragdrop","hmrBootstrap","ngModule","hot","ApplicationRef","elements","components","makeVisible","createNewHosts","enableProdMode","platformBrowser","bootstrapModule"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACDA;AAAA;AAAA;;AAEa,YAAAA,0BAAA,GAA6B,aAAAC,OAAA,CAAQ,MAAR,EAAgB,CACtD,aAAAC,UAAA,CAAW,QAAX,EAAqB,CACjB,aAAAC,KAAA,CAAM;AAAEC,aAAO,EAAE,CAAX;AAAcC,YAAM,EAAE;AAAtB,KAAN,CADiB,EAEjB,aAAAC,OAAA,CAAQ,GAAR,EAAa,aAAAH,KAAA,CAAM;AAAEC,aAAO,EAAE,CAAX;AAAcC,YAAM,EAAE;AAAtB,KAAN,CAAb,CAFiB,CAArB,CADsD,EAKtD,aAAAH,UAAA,CAAW,QAAX,EAAqB,CACjB,aAAAC,KAAA,CAAM;AAAEC,aAAO,EAAE,CAAX;AAAcC,YAAM,EAAE;AAAtB,KAAN,CADiB,EAEjB,aAAAC,OAAA,CAAQ,GAAR,EAAa,aAAAH,KAAA,CAAM;AAAEC,aAAO,EAAE,CAAX;AAAcC,YAAM,EAAE;AAAtB,KAAN,CAAb,CAFiB,CAArB,CALsD,CAAhB,CAA7B;AAWA,YAAAE,8BAAA,GAAiC,aAAAN,OAAA,CAAQ,MAAR,EAAgB,CAC1D,aAAAO,KAAA,CAAM,MAAN,EAAc,aAAAL,KAAA,CAAM;AAAEC,aAAO,EAAE,CAAX;AAAcC,YAAM,EAAE;AAAtB,KAAN,CAAd,CAD0D,EAE1D,aAAAG,KAAA,CAAM,MAAN,EAAc,aAAAL,KAAA,CAAM;AAAEC,aAAO,EAAE,CAAX;AAAcC,YAAM,EAAE;AAAtB,KAAN,CAAd,CAF0D,EAG1D,aAAAH,UAAA,CAAW,eAAX,EAA4B,aAAAI,OAAA,CAAQ,eAAR,CAA5B,CAH0D,CAAhB,CAAjC;;;;;;;;;;;;;;;;;;;;ACbb;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;QAKaG,gB;;;;AAHb;;YAGaA;;;;yBAAAA,gB;AAAgB,O;AAAA,gBAFlB,CAAC,SAAAC,YAAD,CAEkB;;;;+EAAhBD,gB,EAAgB;AAAA,kBAFjB,SAAAC,YAEiB;AAAA,O;AAFL,K;;;;;2BAEXD,gB,EAAgB;cAH5B,OAAAE,QAG4B;eAHnB;AACRC,iBAAO,EAAE,CAAC,SAAAF,YAAD;AADD,S;AAGmB,Q;;;;;;;;;;;;;;;;;;;;;;;;;;ACN7B;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACTA;AAAA;AAAA;;QAEaG,S;AAAb;AAAA;;AACI;AACU,aAAAC,OAAA,GAAsC,EAAtC;AACV;;AACU,aAAAC,UAAA,GAAyC,EAAzC;AACV;;AACU,aAAAC,cAAA,GAAoE,EAApE;AACV;;AACmB,aAAAC,YAAA,GAAe,IAAI,OAAAC,eAAJ,CAA6B,KAA7B,CAAf;AA8GtB;AA5GG;;;;;kCASoB;AAChB,eAAK,IAAMC,GAAX,IAAkB,KAAKL,OAAvB,EAAgC;AAC5B,gBAAI,KAAKA,OAAL,CAAaM,cAAb,CAA4BD,GAA5B,CAAJ,EAAsC;AAClC,mBAAKE,YAAL,CAAkBF,GAAlB;AACH;AACJ;;AACD,eAAK,IAAMA,IAAX,IAAkB,KAAKJ,UAAvB,EAAmC;AAC/B,gBAAI,KAAKA,UAAL,CAAgBK,cAAhB,CAA+BD,IAA/B,CAAJ,EAAyC;AACrC,mBAAKG,aAAL,CAAmBH,IAAnB;AACH;AACJ;;AACD,eAAK,IAAMA,KAAX,IAAkB,KAAKH,cAAvB,EAAuC;AACnC,gBAAI,KAAKA,cAAL,CAAoBI,cAApB,CAAmCD,KAAnC,CAAJ,EAA6C;AACzC,mBAAKI,KAAL,CAAWJ,KAAX;AACH;AACJ;AACJ;AAED;;;;;;;;;gCAMkBK,I,EAAcC,E,EAAqC;AAAA;;AAAA,cAArBC,KAAqB,uEAAL,GAAK;;AACjE,cAAIF,IAAI,IAAIC,EAAR,IAAcA,EAAE,YAAYE,QAAhC,EAA0C;AACtC,iBAAKN,YAAL,CAAkBG,IAAlB;AACA,iBAAKV,OAAL,CAAaU,IAAb,IAA0BI,UAAU,CAAC,YAAM;AACvCH,gBAAE;AACF,mBAAI,CAACX,OAAL,CAAaU,IAAb,IAAqB,IAArB;AACH,aAHmC,EAGjCE,KAHiC,CAApC;AAIH,WAND,MAMO;AACH,kBAAM,IAAIG,KAAJ,CACFL,IAAI,GAAG,4CAAH,GAAkD,4CADpD,CAAN;AAGH;AACJ;AAED;;;;;;;;;;;;;;;;;oBAIuBA,I,EAAc;AACjC,cAAI,KAAKV,OAAL,CAAaU,IAAb,CAAJ,EAAwB;AACpBH,wBAAY,CAAC,KAAKP,OAAL,CAAaU,IAAb,CAAD,CAAZ;AACA,iBAAKV,OAAL,CAAaU,IAAb,IAAqB,IAArB;AACH;AACJ,S;AAED;;;;;;;;;iCAMmBA,I,EAAcC,E,EAAqC;AAAA,cAArBC,KAAqB,uEAAL,GAAK;;AAClE,cAAIF,IAAI,IAAIC,EAAR,IAAcA,EAAE,YAAYE,QAAhC,EAA0C;AACtC,iBAAKL,aAAL,CAAmBE,IAAnB;AACA,iBAAKT,UAAL,CAAgBS,IAAhB,IAA6BM,WAAW,CAAC;AAAA,qBAAML,EAAE,EAAR;AAAA,aAAD,EAAaC,KAAb,CAAxC;AACH,WAHD,MAGO;AACH,kBAAM,IAAIG,KAAJ,CACFL,IAAI,GAAG,6CAAH,GAAmD,6CADrD,CAAN;AAGH;AACJ;AAED;;;;;;;;;;;;;;;;;oBAIwBA,I,EAAc;AAClC,cAAI,KAAKT,UAAL,CAAgBS,IAAhB,CAAJ,EAA2B;AACvBF,yBAAa,CAAC,KAAKP,UAAL,CAAgBS,IAAhB,CAAD,CAAb;AACA,iBAAKT,UAAL,CAAgBS,IAAhB,IAAwB,IAAxB;AACH;AACJ,S;AAED;;;;;;;;qCAKuBA,I,EAAcD,K,EAAoC;AACrE,eAAKA,KAAL,CAAWC,IAAX;AACA,eAAKR,cAAL,CAAoBQ,IAApB,IAA4BD,KAA5B;AACH;AAED;;;;;;;8BAIgBC,I,EAAc;AAC1B,cAAI,KAAKR,cAAL,IAAuB,KAAKA,cAAL,CAAoBQ,IAApB,CAA3B,EAAsD;AAClD,iBAAKR,cAAL,CAAoBQ,IAApB,aAAqC,OAAAO,YAArC,GACO,KAAKf,cAAL,CAAoBQ,IAApB,EAA2CQ,WAA3C,EADP,GAEO,KAAKhB,cAAL,CAAoBQ,IAApB,GAFP;AAGA,iBAAKR,cAAL,CAAoBQ,IAApB,IAA4B,IAA5B;AACH;AACJ;;;4BA1GqB;AAClB,iBAAO,KAAKP,YAAZ;AACH;AACD;;;;4BACyB;AACrB,iBAAO,KAAKA,YAAL,CAAkBgB,QAAlB,EAAP;AACH;;;;;;AAjBL;;;;;;;;;;;;;;;;;;;;ACDA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;QAKaC,a;;;;;;;;;;;;;sCACS;AACd,eAAKC,OAAL;AACH;;;;MAH8B,aAAAtB,S;;AAHnC;;;6CAGaqB,a;AAAa,K;;;YAAbA,a;AAAa,0E;AAAA;;8DAAbA,a;;;;2BAAAA,a,EAAa;cAHzB,OAAAE,SAGyB;eAHf;AACPC,kBAAQ,EAAE;AADH,S;AAGe,Q;;;;;;;;;;;;;;;;;;;;;;ACP1B;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;QAWaC,U;;;;AATb;;YASaA;;;;yBAAAA,U;AAAU,O;AAAA,gBARV,CAAC,SAAA5B,YAAD,CAQU;;;;+EAAV4B,U,EAAU;AAAA,uBANf,yBAAAC,oBAMe;AANK,kBAFd,SAAA7B,YAEc,CAML;AARG,kBAKlB,yBAAA6B,oBALkB;AAQH,O;AAHK,K;;;;;2BAGfD,U,EAAU;cATtB,OAAA3B,QASsB;eATb;AACNC,iBAAO,EAAE,CAAC,SAAAF,YAAD,CADH;AAEN8B,sBAAY,EAAE,CACV,yBAAAD,oBADU,CAFR;AAKNE,iBAAO,EAAE,CACL,yBAAAF,oBADK;AALH,S;AASa,Q;;;;;;;;;;;;;;;;;;;;;;ACbvB;AAAA;AAAA;;AAUA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;AAEA,QAAYG,eAAZ;;AAAA,eAAYA,eAAZ,EAA2B;AACvB;AACA;AACA;AACA;AACH,KALD,EAAYA,eAAe,GAAf,QAAAA,eAAA,aAAAA,eAAA,GAAe,EAAf,CAAZ;;QAUaC,0B;;;;;AAcT,0CAAoBC,YAApB,EAAuDC,SAAvD,EAA6E;AAAA;;AAAA;;AACzE;AADgB,eAAAD,YAAA,GAAAA,YAAA;AAAmC,eAAAC,SAAA,GAAAA,SAAA;AAZvD;;AACS,eAAAC,SAAA,GAA6BJ,eAAe,CAACK,CAA7C;AAKT;;AACO,eAAAC,WAAA,GAAwC;AAAEC,WAAC,EAAE,CAAL;AAAQC,WAAC,EAAE;AAAX,SAAxC;AAKsE;AAE5E;;;;oCAEkBC,O,EAAsB;AACrC,cAAIA,OAAO,CAACC,eAAR,IAA2B,KAAKA,eAApC,EAAqD;AACjD,iBAAKC,OAAL,GAAe,KAAKT,YAAL,CAAkBS,OAAlB,CAA0BC,aAA1B,CAAwCC,OAAxC,CACX,KAAKH,eADM,CAAf;AAGH;AACJ;;;6CAEwB;AAAA;;AACrB,eAAKI,YAAL,CACI,YADJ,EAEI,KAAKC,KAAL,CAAWN,OAAX,CAAmBO,SAAnB,CAA6B,UAACD,KAAD,EAA+B;AACxD,gBAAME,IAAI,GAAGF,KAAK,CAACG,OAAN,EAAb;AACAD,gBAAI,CAACE,OAAL,CAAa,UAACC,CAAD,EAAIC,KAAJ,EAAc;AACvB,oBAAI,CAACP,YAAL,qBACiBO,KADjB,GAEI,MAAI,CAAClB,SAAL,CAAemB,MAAf,CAAsBF,CAAC,CAACT,OAAF,CAAUC,aAAhC,EAA+C,WAA/C,EAA4D,YAAM;AAC9D,sBAAI,CAACE,YAAL,CACI,cADJ,EAEI,MAAI,CAACX,SAAL,CAAemB,MAAf,CAAsB,QAAtB,EAAgC,SAAhC,EAA2C;AAAA,yBAAM,MAAI,CAACC,MAAL,EAAN;AAAA,iBAA3C,CAFJ;;AAIA,sBAAI,CAACC,MAAL;AACH,eAND,CAFJ;;AAUA,oBAAI,CAACV,YAAL,2BACuBO,KADvB,GAEI,MAAI,CAAClB,SAAL,CAAemB,MAAf,CAAsBF,CAAC,CAACT,OAAF,CAAUC,aAAhC,EAA+C,YAA/C,EAA6D,YAAM;AAC/D,sBAAI,CAACE,YAAL,CACI,cADJ,EAEI,MAAI,CAACX,SAAL,CAAemB,MAAf,CAAsB,QAAtB,EAAgC,UAAhC,EAA4C;AAAA,yBAAM,MAAI,CAACC,MAAL,EAAN;AAAA,iBAA5C,CAFJ;;AAIA,sBAAI,CAACC,MAAL;AACH,eAND,CAFJ;AAUH,aArBD;AAsBH,WAxBD,CAFJ;AA4BH;AAED;;;;iCACgB;AAAA;;AACZ,cAAI,KAAKb,OAAT,EAAkB;AACd,iBAAKG,YAAL,CACI,QADJ,EAEI,KAAKX,SAAL,CAAemB,MAAf,CAAsB,KAAKX,OAA3B,EAAoC,QAApC,EAA8C;AAAA,qBAAM,MAAI,CAACc,kBAAL,EAAN;AAAA,aAA9C,CAFJ;AAIH;AACJ;AAED;;;;iCACgB;AACZ,eAAK5C,KAAL,CAAW,QAAX;AACH;AAED;;;;;;6CAG6B;AAAA;;AACzB,eAAK6C,OAAL,CACI,kBADJ,EAEI,YAAM;AACF,gBAAMC,MAAM,GAAG;AAAEpB,eAAC,EAAE,MAAI,CAACI,OAAL,CAAaiB,UAAlB;AAA8BpB,eAAC,EAAE,MAAI,CAACG,OAAL,CAAakB;AAA9C,aAAf;;AACA,gBACK,CAAC,MAAI,CAACzB,SAAL,KAAmBJ,eAAe,CAAC8B,IAAnC,IACE,MAAI,CAAC1B,SAAL,KAAmBJ,eAAe,CAAC+B,CADtC,KAEGJ,MAAM,CAACnB,CAAP,KAAa,MAAI,CAACF,WAAL,CAAiBE,CAFlC,IAGC,CAAC,MAAI,CAACJ,SAAL,KAAmBJ,eAAe,CAAC8B,IAAnC,IACE,MAAI,CAAC1B,SAAL,KAAmBJ,eAAe,CAACK,CADtC,KAEGsB,MAAM,CAACpB,CAAP,KAAa,MAAI,CAACD,WAAL,CAAiBC,CANtC,EAOE;AACG,oBAAI,CAACL,YAAL,CAAkB8B,YAAlB,CAAuCC,iBAAvC;;AACA,oBAAI,CAAC/B,YAAL,CAAkB8B,YAAlB,CAAuCE,SAAvC,CAAiDf,OAAjD,CAAyD,UAAAC,CAAC;AAAA,uBACvDA,CAAC,CAACe,WAAF,KAAkBf,CAAC,CAACa,iBAAF,EAAlB,GAA0C,IADa;AAAA,eAA1D;AAGJ;;AACD,kBAAI,CAAC3B,WAAL,GAAmBqB,MAAnB;AACH,WAlBL,EAmBI,EAnBJ;AAqBH;;;;MAjG2C,iBAAAnC,a;;AAHhD;;;uBAGaS,0B,EAA0B,oC,EAAA,kC;AAAA,K;;;YAA1BA,0B;AAA0B,iE;AAAA;AAAA;sCAYlB,YAAAmC,O,EAAO,K;;;;;;;;;;;;;;;;;;2BAZfnC,0B,EAA0B;cAHtC,OAAAP,SAGsC;eAH5B;AACPC,kBAAQ,EAAE;AADH,S;AAG4B,Q;;;;;;;;gBAGlC,OAAA0C;;;gBAEA,OAAAA;;;gBAOA,OAAAC,e;iBAAgB,YAAAF,O;;;;;;;;;;;;;;;;;;;;;;;;ACnCrB;AAAA;AAAA;AAEA;;;;;AAGA,QAAMG,WAAW,GAAG,aAAa,IAAjC;;AAEa,YAAAC,QAAA,GAAW;AAAA,UAACC,YAAD,uEAAgBF,WAAhB;AAAA,aAAgC,sBAASG,GAAT,CAAa,IAAIC,IAAJ,CAASF,YAAT,CAAb,CAAhC;AAAA,KAAX;;AAEA,YAAAG,SAAA,GAAY;AAAA,aAAM,sBAASC,KAAT,EAAN;AAAA,KAAZ;;;;;;;;;;;;;;;;;;;;;ACRb;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;AAuBA;;;;;;AAMA;;;AACa,YAAAC,iBAAA,GAAoB,UAACC,IAAD,EAAiBC,UAAjB,EAAsE;AAAA,UAAjCC,KAAiC,uEAAjB,CAAiB;AACnG,aAAOF,IAAI,CAACL,GAAL,CAAS;AAAEQ,mBAAW,EAAE,CAAf;AAAkBC,cAAM,EAAE,CAA1B;AAA6BC,cAAM,EAAEC,IAAI,CAACC,IAAL,CAAUP,IAAI,CAACK,MAAL,GAAcJ,UAAxB,IAAsCA;AAA3E,OAAT,EACFO,IADE,CACG;AAAEC,eAAO,EAAEP,KAAK,GAAG;AAAnB,OADH,CAAP,CADmG,CAEhE;AACtC,KAHY;;AAKA,YAAAQ,mBAAA,GAAsB,UAACC,MAAD,EAAiBV,UAAjB,EAAoE;AAAA,UAA/BC,KAA+B,uEAAf,CAAe;AACnG,aAAOS,MAAM,CAACC,QAAP,CAAgB;AAAET,mBAAW,EAAE,CAAf;AAAkBC,cAAM,EAAE,CAA1B;AAA6BC,cAAM,EAAEC,IAAI,CAACC,IAAL,CAAUI,MAAM,CAACF,OAAP,GAAiBR,UAA3B,IAAyCA;AAA9E,OAAhB,EACFY,QADE,CACO;AAAEJ,eAAO,EAAEP,KAAK,GAAG;AAAnB,OADP,CAAP,CADmG,CAE5D;AAC1C,KAHY;AAKb;;;;;;;AAKA,aAAgBY,iBAAhB,CAAkCC,QAAlC,EAA0E;AAAA,UAAtBC,MAAsB,uEAAL,KAAK;;AACtE,UAAI,CAACD,QAAD,IAAaA,QAAQ,GAAG,CAA5B,EAA+B;AAC3B,eAAO,EAAP;AACH;;AACD,UAAME,CAAC,GAAGX,IAAI,CAACY,KAAL,CAAWH,QAAQ,GAAG,EAAtB,CAAV;AACA,UAAII,CAAC,aAAMF,CAAC,IAAI,CAAL,GAASA,CAAC,IAAID,MAAK,GAAG,KAAH,GAAW,WAAWC,CAAC,KAAK,CAAN,GAAU,EAAV,GAAe,GAA1B,CAApB,CAAV,GAAgE,EAAtE,CAAL;;AACA,UAAIF,QAAQ,GAAG,EAAX,KAAkB,CAAtB,EAAyB;AACrB,YAAII,CAAJ,EAAO;AACHA,WAAC,IAAIH,MAAK,GAAG,GAAH,GAAS,IAAnB;AACH;;AACD,YAAMI,CAAC,GAAGL,QAAQ,GAAG,EAArB;AACAI,SAAC,cAAOC,CAAC,IAAI,CAAL,GAASA,CAAC,IAAIJ,MAAK,GAAG,MAAH,GAAY,aAAaI,CAAC,KAAK,CAAN,GAAU,EAAV,GAAe,GAA5B,CAArB,CAAV,GAAmE,EAA1E,CAAD;AACH;;AACD,aAAOD,CAAP;AACH;;AAdD;;AAgBa,YAAAE,sBAAA,GAAyB,UAACrB,IAAD;AAAA,aAA0BA,IAAI,CAACsB,UAAL,CAAgB,iBAAhB,CAA1B;AAAA,KAAzB;AAEb;;;;;;AAIa,YAAAC,oBAAA,GAAuB,UAACC,KAAD,EAChCC,SADgC,EAEhCC,SAFgC,EAEoB;AACpD;AACA;AACA;AACA,UAAI1B,IAAI,GAAG2B,KAAK,CAACH,KAAD,EAAQ,oBAAAI,qBAAA,EAAR,CAAhB;;AACA,UAAI,CAAC5B,IAAI,CAAC6B,OAAL,EAAL,EAAqB;AACjB;AACA,YAAIC,YAAY,GAAGN,KAAnB;AACA,YAAMO,KAAK,GAAGP,KAAK,CAACQ,KAAN,CAAY,GAAZ,CAAd;;AACA,YAAG,CAACR,KAAJ,EAAU;AACN,iBAAOS,SAAP;AACH;;AACD,YAAIF,KAAK,CAACG,MAAN,KAAiB,CAArB,EAAwB;AACpB,cAAIH,KAAK,CAAC,CAAD,CAAL,CAASG,MAAT,KAAoB,CAAxB,EAA2B;AACvBJ,wBAAY,aAAMC,KAAK,CAAC,CAAD,CAAX,cAAkBA,KAAK,CAAC,CAAD,CAAvB,MAAZ;AACH;AACJ,SAXgB,CAYjB;;;AACA/B,YAAI,GAAG2B,KAAK,CAACG,YAAD,EAAe,oBAAAK,iBAAA,EAAf,CAAZ,CAbiB,CAcjB;;AACA,YAAI,CAACnC,IAAI,CAAC6B,OAAL,EAAD,IAAmBJ,SAAvB,EAAkC;AAC9BzB,cAAI,GAAG2B,KAAK,CAACH,KAAD,EAAQ,GAAR,CAAZ;AACH;AACJ,OAvBmD,CAwBpD;AACA;AACA;AACA;;;AACA,UAAIxB,IAAI,CAAC6B,OAAL,EAAJ,EAAoB;AAChB;AACA7B,YAAI,GAAGA,IAAI,CAACoC,KAAL,CAAWV,SAAS,CAACU,KAAV,EAAX,EAA8BpC,IAA9B,CAAmC0B,SAAS,CAAC1B,IAAV,EAAnC,EAAqDqC,IAArD,CAA0DX,SAAS,CAACW,IAAV,EAA1D,CAAP;;AACA,YAAIX,SAAS,CAACY,IAAV,KAAmBtC,IAAI,CAACsC,IAAL,EAAnB,IAAkCtC,IAAI,CAACA,IAAL,OAAgB0B,SAAS,CAAC1B,IAAV,EAAtD,EAAwE;AACpEA,cAAI,GAAGA,IAAI,CAACL,GAAL,CAAS,MAAT,EAAiBK,IAAI,CAACsC,IAAL,KAAc,EAA/B,CAAP;AACH;AACJ;;AAED,aAAOtC,IAAI,CAAC6B,OAAL,KAAiB7B,IAAjB,GAAwBiC,SAA/B;AACH,KAvCY;AA0Cb;;;;;;;;;;AAQa,YAAAM,kBAAA,GAAqB,UAC9BC,IAD8B,EAE9BhB,KAF8B,EAG9BiB,gBAH8B,EAKrB;AAAA,UADTvC,KACS,uEADO,CACP;AACT,UAAIF,IAAI,GAAG,QAAAuB,oBAAA,CAAqBC,KAArB,EAA4B,KAA5B,EAAmCG,KAAK,CAACc,gBAAD,CAAxC,CAAX;;AACA,UAAIzC,IAAJ,EAAU;AACN,YAAM0C,SAAS,GAAG,QAAAC,QAAA,CAASC,UAAT,CAAoB5C,IAAI,CAAC6C,OAAL,EAApB,CAAlB;AACA,YAAMC,WAAW,GAAG,QAAA/C,iBAAA,CAAkB2C,SAAlB,EAA6BF,IAA7B,EAAmCtC,KAAnC,CAApB;AACA,eAAO4C,WAAW,CAACC,QAAZ,CAAqB,oBAAAZ,iBAAA,EAArB,CAAP;AACH,OAJD,MAIO;AACH,eAAOX,KAAP;AACH;AACJ,KAdY;AAeb;;;;;;;;;;;AASa,YAAAwB,sBAAA,GAAyB,UAACC,cAAD,EAClCR,gBADkC,EAElCS,KAFkC,EAER;AAE1B,UAAIlD,IAAI,GAAG,QAAAuB,oBAAA,CAAqB2B,KAArB,EAA4B,KAA5B,EAAmCvB,KAAK,CAACc,gBAAD,CAAxC,CAAX;;AAEA,UAAI,CAACzC,IAAL,EAAW;AACP;AACA,YAAMe,QAAQ,GAAGoC,QAAQ,CAACD,KAAD,CAAzB;;AACA,YAAI,OAAQnC,QAAR,KAAsB,QAAtB,IAAkCmC,KAAK,CAACE,OAAN,CAAc,GAAd,MAAuB,CAAC,CAA1D,IAA+DrC,QAAQ,GAAG,EAA9E,EAAkF;AAC9Ef,cAAI,GAAG2B,KAAK,CAACc,gBAAD,CAAL,CAAwBY,GAAxB,CAA4BtC,QAA5B,EAAsC,GAAtC,CAAP;AACH;AACJ;;AAED,UAAIf,IAAJ,EAAU;AACN,YAAMS,OAAO,GAAGT,IAAI,CAACsD,IAAL,CAAUb,gBAAV,EAA4B,QAA5B,CAAhB;AACA,YAAMc,oBAAoB,GAAGN,cAAc,CAACO,IAAf,CAAoB,UAAArC,CAAC,EAAI;AAClD,iBAAQV,OAAO,IAAIU,CAAC,CAACsC,GAArB;AACH,SAF4B,CAA7B;;AAGA,YAAIF,oBAAJ,EAA0B;AACtB,cAAMG,MAAM,GAAG,CAACH,oBAAD,EAAuBI,MAAvB,CAA8B,UAACC,aAAD,EAAgBC,YAAhB,EAAiC;AAC1E,mBAAOD,aAAa,GAAGC,YAAY,CAAC3D,KAApC;AACH,WAFc,EAEZ,CAFY,CAAf;AAGA,cAAMwC,SAAS,GAAG,QAAAC,QAAA,CAASC,UAAT,CAAoB5C,IAAI,CAAC6C,OAAL,EAApB,CAAlB;AACA,cAAMC,WAAW,GAAG,QAAA/C,iBAAA,CAAkB2C,SAAlB,EAA6Ba,oBAAoB,CAACf,IAAlD,EAAwD,CAAxD,CAApB;AACA,iBAAOM,WAAW,CAACC,QAAZ,CAAqB,oBAAAZ,iBAAA,EAArB,CAAP;AACH;AACJ;;AAED,aAAOe,KAAP;AACH,KA9BY;;AAgCA,YAAAY,uBAAA,GAA0B,UAACC,SAAD,EAAuB;AAC1D,aAAO,QAAApB,QAAA,CAASC,UAAT,CAAoBmB,SAApB,EAA+BpE,GAA/B,CAAmC;AAAES,cAAM,EAAE,CAAV;AAAaD,mBAAW,EAAE;AAA1B,OAAnC,EAAkE6D,QAAlE,EAAP;AACH,KAFY;;AAIA,YAAAC,oBAAA,GAAuB,UAACjE,IAAD,EAA0B;AAC1D,UAAMkE,OAAO,GAAG,IAAItE,IAAJ,CAASI,IAAT,CAAhB;AACA,UAAMmE,GAAG,GAAGD,OAAO,CAACE,OAAR,EAAZ;AACA,UAAMhC,KAAK,GAAG8B,OAAO,CAACG,cAAR,CAAuB,SAAvB,EAAkC;AAAEjC,aAAK,EAAE;AAAT,OAAlC,CAAd;AACA,UAAMC,IAAI,GAAG6B,OAAO,CAACI,WAAR,EAAb;AACA,uBAAUH,GAAV,SAAgBI,SAAS,CAACJ,GAAD,CAAzB,cAAkC/B,KAAlC,cAA2CC,IAA3C,EAL0D,CAKP;AACtD,KANY;;AAQb,QAAMkC,SAAS,GAAG,SAAZA,SAAY,CAACC,MAAD,EAAY;AAC1B,aAAOA,MAAM,GAAG,CAAT,GACD,CAAC,IAAD,EAAO,IAAP,EAAa,IAAb,EAAmB,IAAnB,EACOA,MAAM,GAAG,CAAT,IAAcA,MAAM,GAAG,EAAxB,IAA+BA,MAAM,GAAG,EAAT,GAAc,CAA7C,GAAiD,CAAjD,GAAqDA,MAAM,GAAG,EADpE,CADC,GAID,EAJN;AAKH,KAND;;AAQa,YAAAC,mBAAA,GAAsB,YAAM;AACrC,aAAO,CACH,WADG,EAEH,WAFG,EAGH,SAHG,EAIH,QAJG,EAKH,OALG,EAOH,UAPG,EAQH,YARG,EASH,cATG,EAUH,YAVG,EAYH,SAZG,EAaH,QAbG,EAeH,UAfG,EAiBH,OAjBG,EAkBH,UAlBG,EAmBH,YAnBG,EAqBH,OArBG,EAsBH,UAtBG,EAuBH,YAvBG,EAyBH,SAzBG,EA0BH,SA1BG,EA2BH,QA3BG,EA4BH,QA5BG,EA8BH,SA9BG,EA+BH,YA/BG,EAiCH,UAjCG,EAkCH,WAlCG,EAmCH,WAnCG,EAoCH,YApCG,EAuCH,YAvCG,EAwCH,WAxCG,EAyCH,UAzCG,EA0CH,YA1CG,EA2CH,WA3CG,EA6CH,YA7CG,EA8CH,YA9CG,EA+CH,WA/CG,EAiDH,WAjDG,EAkDH,WAlDG,EAmDH,WAnDG,EAoDH,UApDG,EAsDH,QAtDG,EAuDH,OAvDG,CAuDK;AAvDL,OAAP;AA0DH,KA3DY;;;;;;;;;;;;;;;;;;;;;AClMb;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA,uC,CAEA;;;AACA9C,SAAK,CAAC+C,MAAN,CAAaC,GAAb;AACAhD,SAAK,CAAC+C,MAAN,CAAaE,QAAb;AACAjD,SAAK,CAAC+C,MAAN,CAAaG,OAAb;AACAlD,SAAK,CAAC+C,MAAN,CAAaI,OAAb;AACAnD,SAAK,CAAC+C,MAAN,CAAaK,iBAAb;AAKA;;;;;;;;;AAQA,aAAgBC,GAAhB,CACIC,IADJ,EAEIC,GAFJ,EAGIC,IAHJ,EAM8B;AAAA,UAF1BC,MAE0B,uEAFF,OAEE;AAAA,UAD1BC,KAC0B,uEADT,KACS;AAAA,UAA1BC,QAA0B,uEAAP,OAAO;;AAE1B,UAAKC,MAAc,CAACC,KAAf,IAAwBH,KAA7B,EAAoC;AAChC,YAAMI,MAAM,GAAa,CACrB,gBADqB,EAErB,gBAFqB,EAGrB,gBAHqB,CAAzB;;AAKA,YAAIN,IAAJ,EAAU;AAAA;;AACN,sBAAAO,OAAO,EAACN,MAAD,CAAP,+BACUE,QADV,iBACyBL,IADzB,iBACoCC,GADpC,UAEOO,MAFP,GAGIN,IAHJ;AAKH,SAND,MAMO;AAAA;;AACH,uBAAAO,OAAO,EAACN,MAAD,CAAP,gCAAsBE,QAAtB,iBAAqCL,IAArC,iBAAgDC,GAAhD,UAA0DO,MAA1D;AACH;AACJ;AACJ;;AAxBD;AA0BA;;;;;;AAKC,aAAgBE,eAAhB,CAAgCC,IAAhC,EAAgDC,GAAhD,EAA8D;AAC3D,UAAMnK,GAAG,GAAGkK,IAAI,CAAC,CAAD,CAAhB;;AACA,UAAIC,GAAG,IAAInK,GAAG,IAAImK,GAAlB,EAAuB;AACnB,eAAOD,IAAI,CAAC1D,MAAL,GAAc,CAAd,GACDyD,eAAe,CAACC,IAAI,CAACE,KAAL,CAAW,CAAX,CAAD,EAAgBD,GAAG,CAACnK,GAAD,CAAH,IAAY,EAA5B,CADd,GAEDmK,GAAG,CAACnK,GAAD,CAFT;AAGH;;AACD,aAAO,IAAP;AACH;;AARA;AAUD;;AACA;;;;AAGA,aAAgBqK,cAAhB,GAA8B;AAC1B,UAAMC,CAAC,GAAG,gEAAV;AACA,aAAO,CAAC,CAACC,SAAS,CAACC,SAAV,CAAoBC,KAApB,CAA0BH,CAA1B,CAAT;AACH;;AAHD;AAKA;;AACA;;;;AAGA,aAAgBI,cAAhB,GAA8B;AAC1B,UAAMC,KAAK,GAAGJ,SAAS,CAACC,SAAxB;AACA,aAAO,CAAC,EACJG,KAAK,CAACF,KAAN,CAAY,kBAAZ,KACAE,KAAK,CAACF,KAAN,CAAY,aAAZ,CADA,IAEA,CAACE,KAAK,CAACF,KAAN,CAAY,OAAZ,CAHG,CAAR;AAKH;;AAPD;AASA;;AACA;;;;AAGA,aAAgBG,eAAhB,GAA+B;AAC3B,UAAMD,KAAK,GAAGJ,SAAS,CAACC,SAAxB;AACA,aAAO,CAAC,EAAEG,KAAK,CAACF,KAAN,CAAY,SAAZ,KAA0BE,KAAK,CAACF,KAAN,CAAY,QAAZ,CAA5B,CAAR;AACH;;AAHD;AAKA;;;;;;AAKA,aAAgBI,OAAhB,CAAwBrD,KAAxB,EAAuChB,MAAvC,EAAqD;AACjD,UAAIsE,GAAG,GAAGtD,KAAK,CAACuD,QAAN,EAAV;;AACA,aAAOD,GAAG,CAACtE,MAAJ,GAAaA,MAApB,EAA4B;AACxBsE,WAAG,GAAG,MAAMA,GAAZ;AACH;;AACD,aAAOA,GAAP;AACH;;AAND;AAQA;;;;;;AAKA,aAAgBE,MAAhB,CAA0BC,KAA1B,EAA4E;AAAA,UAAtCjL,GAAsC,uEAAXuG,SAAW;AACxE,aAAO0E,KAAK,CAACC,MAAN,CACH,UAACC,EAAD,EAAKC,GAAL,EAAUC,GAAV;AAAA,eACIF,EAAE,IACFE,GAAG,CAAC3D,OAAJ,CACI1H,GAAG,GACGqL,GAAG,CAACvD,IAAJ,CAAS,UAACnF,CAAD;AAAA,iBAAOA,CAAC,IAAIA,CAAC,CAAC3C,GAAD,CAAD,KAAWmL,EAAE,CAACnL,GAAD,CAAzB;AAAA,SAAT,CADH,GAEGqL,GAAG,CAACvD,IAAJ,CAAS,UAACnF,CAAD;AAAA,iBAAOA,CAAC,KAAKwI,EAAb;AAAA,SAAT,CAHV,MAIMC,GANV;AAAA,OADG,CAAP;AASH;;AAVD;AAYA;;;;;;AAKA,aAAgBE,gBAAhB,CAAiCC,aAAjC,EAA+E;AAAA,UAAvBC,IAAuB,uEAAR,MAAQ;AAC3E,UAAMnG,QAAQ,GAAGT,IAAI,CAACY,KAAL,CAAW+F,aAAX,CAAjB;;AACA,UAAI,CAAClG,QAAD,IAAaA,QAAQ,GAAG,CAA5B,EAA+B;AAC3B,eAAO,EAAP;AACH;;AACD,UAAIoG,QAAQ,GAAG,KAAf;AACA,UAAIC,MAAM,GAAG;AAAEC,aAAK,EAAE,OAAT;AAAkB5G,eAAO,EAAE;AAA3B,OAAb;;AACA,cAAQyG,IAAR;AACI,aAAK,QAAL;AACIE,gBAAM,GAAG;AAAEC,iBAAK,EAAE,IAAT;AAAe5G,mBAAO,EAAE;AAAxB,WAAT;AACA;;AACJ,aAAK,OAAL;AACI2G,gBAAM,GAAG;AAAEC,iBAAK,EAAE,GAAT;AAAc5G,mBAAO,EAAE;AAAvB,WAAT;AACA0G,kBAAQ,GAAG,IAAX;AACA;AAPR;;AASA,UAAMlG,CAAC,GAAGX,IAAI,CAACY,KAAL,CAAWH,QAAQ,GAAG,EAAtB,CAAV;AACA,UAAII,CAAC,aACDF,CAAC,IAAI,CAAL,GACMA,CAAC,IACAkG,QAAQ,GAAGC,MAAM,CAACC,KAAV,GAAkBD,MAAM,CAACC,KAAP,IAAgBpG,CAAC,KAAK,CAAN,GAAU,EAAV,GAAe,GAA/B,CAD1B,CADP,GAGM,EAJL,CAAL;;AAMA,UAAIF,QAAQ,GAAG,EAAX,KAAkB,CAAtB,EAAyB;AACrB,YAAII,CAAJ,EAAO;AACHA,WAAC,IAAIgG,QAAQ,GAAG,GAAH,GAAS,IAAtB;AACH;;AACD,YAAM/F,CAAC,GAAGL,QAAQ,GAAG,EAArB;AACAI,SAAC,cACGC,CAAC,IAAI,CAAL,GACMA,CAAC,IACA+F,QAAQ,GACHC,MAAM,CAAC3G,OADJ,GAEH2G,MAAM,CAAC3G,OAAP,IAAkBW,CAAC,KAAK,CAAN,GAAU,EAAV,GAAe,GAAjC,CAHL,CADP,GAKM,EANT,CAAD;AAQH;;AACD,aAAOD,CAAP;AACH;;AAtCD;AAwCA;;;;;;;AAMA,aAAgBmG,UAAhB,CACIV,MADJ,EAEI5I,KAFJ,EAG6B;AAAA,UAAzBuJ,MAAyB,uEAAN,CAAC,IAAD,CAAM;AAEzB,UAAIC,OAAJ,CAFyB,CAGzB;;AACA,UAAMC,OAAO,GAAG,CAACb,MAAM,IAAI,EAAX,EAAec,WAAf,GAA6B1F,KAA7B,CAAmC,GAAnC,CAAhB;AACA,UAAM9D,IAAI,GAAG,EAAb;;AALyB,iDAMTuJ,OANS;AAAA;;AAAA;AAMzB,4DAAyB;AAAA,cAAdE,GAAc;;AACrB;AACA,cAAIA,GAAJ,EAAO;AACH;AACA,gBAAI,CAACzJ,IAAI,CAACyJ,GAAD,CAAT,EAAc;AACVzJ,kBAAI,CAACyJ,GAAD,CAAJ,GAAU,CAAV;AACH;;AACDzJ,gBAAI,CAACyJ,GAAD,CAAJ;AACH;AACJ,SAfwB,CAgBzB;;AAhByB;AAAA;AAAA;AAAA;AAAA;;AAiBzB,UAAMC,KAAK,GAAG,EAAd;;AACA,WAAK,IAAMD,CAAX,IAAgBzJ,IAAhB,EAAsB;AAClB;AACA,YAAIA,IAAI,CAACvC,cAAL,CAAoBgM,CAApB,CAAJ,EAA4B;AACxBC,eAAK,CAACC,IAAN,CAAW;AAAEC,gBAAI,EAAEH,CAAR;AAAWI,iBAAK,EAAE7J,IAAI,CAACyJ,CAAD,CAAtB;AAA2BK,iBAAK,EAAE,IAAIC,MAAJ,CAAWN,CAAX,EAAc,IAAd;AAAlC,WAAX;AACH;AACJ;;AACDC,WAAK,CAACM,IAAN,CACI,UAACC,CAAD,EAAIC,CAAJ;AAAA,eAAUA,CAAC,CAACN,IAAF,CAAO5F,MAAP,GAAgBiG,CAAC,CAACL,IAAF,CAAO5F,MAAvB,IAAiCiG,CAAC,CAACL,IAAF,CAAOO,aAAP,CAAqBD,CAAC,CAACN,IAAvB,CAA3C;AAAA,OADJ;AAGA,UAAMQ,SAAS,GAAGC,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,SAAL,CAAezK,KAAK,IAAI,EAAxB,CAAX,CAAlB;AACA;;AACA,UAAI4I,MAAJ,EAAY;AACRY,eAAO,GAAGc,SAAS,CAAC1B,MAAV,CAAiB,UAAC8B,IAAD,EAAU;AACjC,cAAIC,WAAW,GAAG,CAAlB;AACAD,cAAI,CAACE,WAAL,GAAmB,KAAnB;AACAF,cAAI,CAACvC,KAAL,GAAa,EAAb;AACA,cAAM0C,UAAU,GAAG,EAAnB,CAJiC,CAKjC;;AALiC,sDAMjBtB,MANiB;AAAA;;AAAA;AAMjC,mEAAwB;AAAA,kBAAbI,GAAa;AACpBkB,wBAAU,CAAClB,GAAD,CAAV,GAAgB;AACZzE,qBAAK,EAAE,CAACwF,IAAI,CAACf,GAAD,CAAJ,IAAW,EAAZ,EAAgBD,WAAhB,EADK;AAEZpJ,qBAAK,EAAE,KAFK;AAGZwK,uBAAO,EAAE;AAHG,eAAhB;AAKH,aAZgC,CAajC;;AAbiC;AAAA;AAAA;AAAA;AAAA;;AAAA,sDAcjBlB,KAdiB;AAAA;;AAAA;AAcjC,mEAAuB;AAAA,kBAAZvJ,CAAY;;AACnB;AACA,kBAAIA,CAAC,CAACyJ,IAAN,EAAY;AACR;AADQ,4DAEQP,MAFR;AAAA;;AAAA;AAER,yEAAwB;AAAA,wBAAbI,GAAa;AACpB,wBAAMoB,KAAK,GAAGF,UAAU,CAAClB,GAAD,CAAxB;AACA,wBAAMrJ,KAAK,GAAGyK,KAAK,CAAC7F,KAAN,CAAYE,OAAZ,CAAoB/E,CAAC,CAACyJ,IAAtB,CAAd;AACAiB,yBAAK,CAACzK,KAAN,GAAcA,KAAK,GAAGyK,KAAK,CAACzK,KAAd,GAAsBA,KAAtB,GAA8ByK,KAAK,CAACzK,KAAlD;AACAyK,yBAAK,CAACC,OAAN,GAAgB,CACZD,KAAK,CAAC7F,KAAN,CAAYiD,KAAZ,CAAkB9H,CAAC,CAAC2J,KAApB,KAA8B,EADlB,EAEd9F,MAFF;AAGA6G,yBAAK,CAAC7F,KAAN,GAAc6F,KAAK,CAAC7F,KAAN,CAAY+F,OAAZ,CAAoB5K,CAAC,CAAC2J,KAAtB,EAA6B,GAA7B,CAAd;AACH,mBAVO,CAWR;;AAXQ;AAAA;AAAA;AAAA;AAAA;;AAAA,4DAYQT,MAZR;AAAA;;AAAA;AAYR,yEAAwB;AAAA,wBAAbI,GAAa;AACpB,wBAAMoB,MAAK,GAAGF,UAAU,CAAClB,GAAD,CAAxB;AACA;;AACA,wBAAIoB,MAAK,CAACC,OAAN,IAAiB3K,CAAC,CAAC0J,KAAvB,EAA8B;AAC1BY,iCAAW,GADe,CAE1B;;AACA,0BAAIO,OAAO,GAAG,CAAd;AACA,0BAAMC,MAAM,GAAG,CACXT,IAAI,iBAAUf,GAAV,EAAJ,IACAe,IAAI,CAACf,GAAD,CADJ,IAEA,EAHW,EAIb3F,KAJa,CAIP,GAJO,CAAf;;AAJ0B,kEASVmH,MATU;AAAA;;AAAA;AAS1B,+EAAwB;AAAA,8BAAbC,CAAa;;AACpB;AACA,8BAAIF,OAAO,IAAI7K,CAAC,CAAC0J,KAAjB,EAAwB;AACpB;AACH;AACD;;;AACA,8BACIqB,CAAC,CAAC1B,WAAF,GAAgBtE,OAAhB,CAAwB/E,CAAC,CAACyJ,IAA1B,KAAmC,CAAnC,IACAsB,CAAC,CAAChG,OAAF,CAAU,GAAV,IAAiB,CAFrB,EAGE;AACE+F,kCAAM,CAACA,MAAM,CAAC/F,OAAP,CAAegG,CAAf,CAAD,CAAN,GAA4BA,CAAC,CAACH,OAAF,CACxB5K,CAAC,CAAC2J,KADsB,EAExB,MAFwB,CAA5B;AAIAkB,mCAAO;AACV;AACJ;AAzByB;AAAA;AAAA;AAAA;AAAA;;AA0B1BR,0BAAI,iBAAUf,GAAV,EAAJ,GAAqBwB,MAAM,CAACE,IAAP,CAAY,GAAZ,CAArB;AACA;AACH;AACJ;AA5CO;AAAA;AAAA;AAAA;AAAA;AA6CX;AACJ,aA9DgC,CA+DjC;;AA/DiC;AAAA;AAAA;AAAA;AAAA;;AAAA,sDAgEjB9B,MAhEiB;AAAA;;AAAA;AAgEjC,mEAAwB;AAAA,kBAAbI,GAAa;AACpB,kBAAMoB,OAAK,GAAGF,UAAU,CAAClB,GAAD,CAAxB;AACA;;AACA,kBAAIoB,OAAK,CAACzK,KAAN,GAAcoK,IAAI,CAACE,WAAnB,IAAkCG,OAAK,CAACzK,KAAN,IAAe,CAArD,EAAwD;AACpDoK,oBAAI,CAACE,WAAL,GAAmBG,OAAK,CAACzK,KAAzB;AACAoK,oBAAI,CAACvC,KAAL,GAAawB,GAAb;AACH;AACJ;AAvEgC;AAAA;AAAA;AAAA;AAAA;;AAwEjC,iBACIe,IAAI,CAACE,WAAL,IAAoB,CAApB,IACAF,IAAI,CAACvC,KADL,IAEAwC,WAAW,IAAIf,KAAK,CAAC1F,MAHzB;AAKH,SA7ES,CAAV;AA8EH,OA/ED,MA+EO;AACHsF,eAAO,GAAGc,SAAV;AACH,OA9GwB,CA+GzB;;;AACAd,aAAO,CAACU,IAAR,CAAa,UAACC,CAAD,EAAIC,CAAJ,EAAU;AACnB,YAAM9E,IAAI,GAAG6E,CAAC,CAACS,WAAF,GAAgBR,CAAC,CAACQ,WAA/B;AACA,eAAOtF,IAAI,KAAK,CAAT,GAAa6E,CAAC,CAACpM,IAAF,CAAOsM,aAAP,CAAqBD,CAAC,CAACrM,IAAvB,CAAb,GAA4CuH,IAAnD;AACH,OAHD;AAIA,aAAOkE,OAAP;AACH;;AAxHD;AA0HA;;;;;AAIA,aAAgB8B,gBAAhB,CAAiC9C,GAAjC,EAA4C;AACxC;AACA,UAAIA,GAAJ,EAAS;AACLA,WAAG,GAAGA,GAAG,CAACyC,OAAJ,CACF,yBADE,EAEF,mCAFE,CAAN;AAIAzC,WAAG,GAAGA,GAAG,CAACyC,OAAJ,CAAY,KAAZ,EAAmB,EAAnB,CAAN;AACH;;AACD,aAAOzC,GAAP;AACH;;AAVD;AAYA;;;;;AAIA,aAAgB+C,UAAhB,CAA2BC,IAA3B,EAAuC;AACnC,UAAM5B,KAAK,GAAG4B,IAAI,CAACxH,KAAL,CAAW,GAAX,CAAd;AACA,UAAMhC,IAAI,GAAG,UAAAyJ,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EACRgB,QADQ,CACC;AACN0B,YAAI,EAAE,CAACsF,KAAK,CAAC,CAAD,CADN;AAENvH,cAAM,EAAE,CAACuH,KAAK,CAAC,CAAD;AAFR,OADD,EAKR8B,YALQ,CAKK,QALL,CAAb;AAMA,aAAO1J,IAAI,CAAC2J,EAAZ;AACH;;AATD;AAWA;;;;;;AAKA,aAAgBC,SAAhB,CAA0BrJ,IAA1B,EAA2D;AAAA,UAAnBW,KAAmB,uEAAH,CAAG;AACvD,aAAOZ,IAAI,CAACY,KAAL,CAAWZ,IAAI,CAACuJ,MAAL,MAAiBtJ,IAAI,GAAGW,KAAxB,CAAX,IAA6CA,KAApD;AACH;;AAFD;AAIA;;;;;AAIA,aAAgB4I,gBAAhB,GAAgC;AAC5B,aAAOC,YAAY,KAAK,OAAL,GAAe,OAAlC;AACH;;AAFD;;AAIa,YAAAC,YAAA,GAAe;AAAA,aAAeD,YAAY,KAAK,OAAL,GAAe,OAA1C;AAAA,KAAf;;AAEb,aAAgBnI,qBAAhB,GAAqC;AACjC,aAAOmI,YAAY,KAAK,OAAL,GAAe,OAAlC;AACH;;AAFD;;AAIa,YAAA5H,iBAAA,GAAoB;AAAA,aAC7B4H,YAAY,KAAK,OAAL,GAAe,MADE;AAAA,KAApB;AAGb;;;;;;AAIa,YAAAE,kBAAA,GAAqB,UAC9BC,YAD8B,EAET;AACrB,UAAIC,IAAJ;;AACA,UAAID,YAAJ,EAAkB;AACd,YAAI;AACAC,cAAI,GAAG,UAAAV,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoBwK,MAApB,CAA2BF,YAA3B,CAAP;AACH,SAFD,CAEE,OAAOG,CAAP,EAAU,CACR;AACA;AACH;AACJ;;AACD,aAAOF,IAAP;AACH,KAbY;;AAeA,YAAAG,eAAA,GAAkB,UAACtK,IAAD;AAAA,aAC3B,CAAC,CAACA,IAAF,aAAYA,IAAI,CAACsB,UAAL,CAAgB,MAAhB,CAAZ,IAAwC,EADb;AAAA,KAAlB;;AAEA,YAAAiJ,gBAAA,GAAmB,UAACvK,IAAD;AAAA,aAC5B,CAAC,CAACA,IAAF,iBAAgBA,IAAI,CAACsB,UAAL,CAAgB,IAAhB,CAAhB,SAA2C,EADf;AAAA,KAAnB;AAGb;;;;;;AAIA,aAAgBkJ,wBAAhB,CAAyCxK,IAAzC,EAAqD;AACjD,uBAAUA,IAAI,CACTsB,UADK,CACMwI,gBAAgB,EADtB,EAELW,iBAFK,EAAV,cAE4B,QAAAH,eAAA,CAAgBtK,IAAhB,CAF5B;AAGH;;AAJD;;AAMA,aAAgB0K,6BAAhB,CAA8C1K,IAA9C,EAA0D;AACtD,uBAAUA,IAAI,CACTsB,UADK,CACMwI,gBAAgB,EADtB,EAELW,iBAFK,EAAV,cAE4B,QAAAF,gBAAA,CAAiBvK,IAAjB,CAF5B;AAGH;;AAJD;AAMA;;;;;;;;AAOA,aAAgB2K,wBAAhB,CACIC,WADJ,EAEIC,SAFJ,EAEqB;AAEjB,uBAAUD,WAAW,CAChBtJ,UADK,CACMwI,gBAAgB,EADtB,EAELW,iBAFK,EAAV,cAE4BI,SAAS,CAChCvJ,UADuB,CACZwI,gBAAgB,EADJ,EAEvBW,iBAFuB,EAF5B;AAKH;;AATD;AAWA;;;;;;;;AAOA,aAAgBK,gCAAhB,CACIF,WADJ,EAEIC,SAFJ,EAEqB;AAEjB,uBAAUD,WAAW,CAChBtJ,UADK,CACMwI,gBAAgB,EADtB,EAELW,iBAFK,EAAV,cAE4BI,SAAS,CAChCvJ,UADuB,CACZwI,gBAAgB,EADJ,EAEvBW,iBAFuB,EAF5B,cAI4B,QAAAF,gBAAA,CAAiBK,WAAjB,CAJ5B;AAKH;;AATD;AAWA;;;;;;AAKA,aAAgBG,qBAAhB,CAAsC/K,IAAtC,EAAoDgL,KAApD,EAAmE;AAC/D,UAAIA,KAAJ,EAAW;AACP,eAAOhL,IAAI,CAACiL,eAAL,CAAqB,mBAArB,CAAP;AACH;;AACD,aAAOjL,IAAI,CAACiL,eAAL,CAAqB,kBAArB,CAAP;AACH;;AALD;;AAOA,aAAgBC,wBAAhB,CACIlL,IADJ,EAEIgL,KAFJ,EAEmB;AAEf,UAAIA,KAAJ,EAAW;AACP,eAAOhL,IAAI,CAACsB,UAAL,CAAgB,mBAAhB,CAAP;AACH;;AACD,aAAOtB,IAAI,CAACsB,UAAL,CAAgB,kBAAhB,CAAP;AACH;;AARD;;AAUA,aAAgB6J,4BAAhB,CACInL,IADJ,EAEIgL,KAFJ,EAEmB;AAEf,UAAIA,KAAJ,EAAW;AACP,eAAOhL,IAAI,CAACiL,eAAL,CAAqB,iBAArB,CAAP;AACH;;AACD,aAAOjL,IAAI,CAACiL,eAAL,CAAqB,gBAArB,CAAP;AACH;;AARD;;AAUA,aAAgBG,+BAAhB,CACIpL,IADJ,EAEIgL,KAFJ,EAEmB;AAEf,UAAIA,KAAJ,EAAW;AACP,eAAOhL,IAAI,CAACsB,UAAL,CAAgB,iBAAhB,CAAP;AACH;;AACD,aAAOtB,IAAI,CAACsB,UAAL,CAAgB,gBAAhB,CAAP;AACH;;AARD;AAUA;;AACA,aAAgByI,YAAhB,GAA4B;AACxB,UAAM/J,IAAI,GAAG,IAAIJ,IAAJ,EAAb;AACA,UAAMyL,YAAY,GAAGrL,IAAI,CACpBsL,kBADgB,CAEbC,QAAQ,CAACC,aAAT,CAAuB,MAAvB,EAA+BC,YAA/B,CAA4C,MAA5C,KACIxF,SAAS,CAACyF,QAHD,EAKhBhE,WALgB,EAArB;AAMA,aAAO2D,YAAY,CAACjI,OAAb,CAAqB,IAArB,IAA6B,CAA7B,IAAkCiI,YAAY,CAACjI,OAAb,CAAqB,IAArB,IAA6B,CAAtE;AACH;;AATD;AAWA;;AACA;;;;;;AAKA,aAAgBuI,YAAhB,CAA6BC,QAA7B,EAA+CC,QAA/C,EAAiE;AAC7D,UAAMjO,OAAO,GAAG2N,QAAQ,CAACO,aAAT,CAAuB,GAAvB,CAAhB;AACAlO,aAAO,CAACmO,YAAR,CACI,MADJ,EAEI,mCACIC,kBAAkB,CAAC,WAAWH,QAAZ,CAH1B;AAKAjO,aAAO,CAACmO,YAAR,CAAqB,UAArB,EAAiCH,QAAjC;AAEAhO,aAAO,CAAClD,KAAR,CAAcuR,OAAd,GAAwB,MAAxB;AACAV,cAAQ,CAACW,IAAT,CAAcC,WAAd,CAA0BvO,OAA1B;AAEAA,aAAO,CAACwO,KAAR;AAEAb,cAAQ,CAACW,IAAT,CAAcG,WAAd,CAA0BzO,OAA1B;AACH;;AAfD;AAiBA;;;;;AAIA,aAAgB0O,SAAhB,CAA0BC,GAA1B,EAAuC;AACnC,UAAMC,KAAK,GAAGD,GAAG,CAACvK,KAAJ,CAAU,IAAV,CAAd;AACA,UAAIuF,MAAM,GAAGiF,KAAK,CAACC,MAAN,CAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,EAAsBzK,KAAtB,CAA4B,GAA5B,CAAb;AACAuF,YAAM,GAAGA,MAAM,CAAC1B,GAAP,CAAW,UAAC6G,CAAD;AAAA,eAAOA,CAAC,CAACzD,OAAF,CAAU,IAAV,EAAgB,EAAhB,CAAP;AAAA,OAAX,CAAT;AACA,UAAM/K,IAAI,GAAU,EAApB;;AAJmC,kDAKhBsO,KALgB;AAAA;;AAAA;AAKnC,+DAA0B;AAAA,cAAfG,IAAe;AACtB,cAAI/E,KAAK,GAAG+E,IAAI,CAAC3K,KAAL,CAAW,GAAX,CAAZ;AACA4F,eAAK,GAAGA,KAAK,CAAC/B,GAAN,CAAU,UAAC6G,CAAD;AAAA,mBAAOA,CAAC,CAACzD,OAAF,CAAU,IAAV,EAAgB,EAAhB,CAAP;AAAA,WAAV,CAAR;AACA;;AACA,cAAIrB,KAAK,CAAC1F,MAAN,IAAgBqF,MAAM,CAACrF,MAA3B,EAAmC;AAC/B,gBAAMwG,IAAI,GAAQ,EAAlB;;AACA,iBAAK,IAAIrK,CAAC,GAAG,CAAb,EAAgBA,CAAC,IAAIuJ,KAAK,CAAC1F,MAA3B,EAAmC7D,CAAC,EAApC,EAAwC;AACpC,kBAAIuO,IAAI,GAAG,IAAX;AACAA,kBAAI,GAAGhF,KAAK,CAACvJ,CAAD,CAAZ;AACA;;AACA,kBAAIuO,IAAI,KAAK3K,SAAb,EAAwB;AACpByG,oBAAI,CAAC,CAACnB,MAAM,CAAClJ,CAAD,CAAN,IAAa,EAAd,EAAkB2D,KAAlB,CAAwB,GAAxB,EAA6BqH,IAA7B,CAAkC,GAAlC,EAAuC3B,WAAvC,EAAD,CAAJ,GACIkF,IADJ;AAEH;AACJ;;AACD1O,gBAAI,CAAC2J,IAAL,CAAUa,IAAV;AACH;AACJ;AAtBkC;AAAA;AAAA;AAAA;AAAA;;AAwBnC,aAAOxK,IAAP;AACH;;AAzBD;AA2BA;;;;;AAIA,aAAgB2O,SAAhB,CAA0BC,IAA1B,EAA2C;AACvC;AACA,UAAIA,IAAI,YAAYC,KAAhB,IAAyBD,IAAI,CAAC5K,MAAL,GAAc,CAA3C,EAA8C;AAC1C,YAAM0D,IAAI,GAAGoH,MAAM,CAACpH,IAAP,CAAYkH,IAAI,CAAC,CAAD,CAAhB,CAAb;AACA,YAAMG,UAAU,GAAGrH,IAAI,CAACgB,MAAL,CAAY,UAAClL,GAAD;AAAA,iBAASoR,IAAI,CAAC,CAAD,CAAJ,CAAQnR,cAAR,CAAuBD,GAAvB,CAAT;AAAA,SAAZ,CAAnB;AACA,yBAAUuR,UAAU,CAAC5D,IAAX,CAAgB,GAAhB,CAAV,eAAmCyD,IAAI,CAClCjH,GAD8B,CAC1B,UAAC6C,IAAD;AAAA,iBACDuE,UAAU,CACLpH,GADL,CACS,UAACnK,GAAD,EAAS;AACV,mBAAO,OAAOgN,IAAI,CAAChN,GAAD,CAAX,KAAqB,SAArB,eACGgN,IAAI,CAAChN,GAAD,CAAJ,IAAa,EADhB,UAEDgN,IAAI,CAAChN,GAAD,CAFV;AAGH,WALL,EAMK2N,IANL,CAMU,GANV,CADC;AAAA,SAD0B,EAU9BA,IAV8B,CAUzB,IAVyB,CAAnC;AAWH;;AACD,aAAO,EAAP;AACH;;AAlBD;AAoBA;;AACA;;;;;AAIA,aAAgB6D,QAAhB,GAA2B;AACvB,UAAIC,EAAE,GAAG5H,MAAM,CAACU,SAAP,CAAiBC,SAA1B;AAEA,UAAIkH,IAAI,GAAGD,EAAE,CAAC/J,OAAH,CAAW,OAAX,CAAX;;AACA,UAAIgK,IAAI,GAAG,CAAX,EAAc;AACV;AACA,eAAOjK,QAAQ,CAACgK,EAAE,CAACE,SAAH,CAAaD,IAAI,GAAG,CAApB,EAAuBD,EAAE,CAAC/J,OAAH,CAAW,GAAX,EAAgBgK,IAAhB,CAAvB,CAAD,EAAgD,EAAhD,CAAf;AACH;;AAED,UAAIE,OAAO,GAAGH,EAAE,CAAC/J,OAAH,CAAW,UAAX,CAAd;;AACA,UAAIkK,OAAO,GAAG,CAAd,EAAiB;AACb;AACA,YAAIC,EAAE,GAAGJ,EAAE,CAAC/J,OAAH,CAAW,KAAX,CAAT;AACA,eAAOD,QAAQ,CAACgK,EAAE,CAACE,SAAH,CAAaE,EAAE,GAAG,CAAlB,EAAqBJ,EAAE,CAAC/J,OAAH,CAAW,GAAX,EAAgBmK,EAAhB,CAArB,CAAD,EAA4C,EAA5C,CAAf;AACH;;AAED,UAAIC,IAAI,GAAGL,EAAE,CAAC/J,OAAH,CAAW,OAAX,CAAX;;AACA,UAAIoK,IAAI,GAAG,CAAX,EAAc;AACV;AACA,eAAOrK,QAAQ,CAACgK,EAAE,CAACE,SAAH,CAAaG,IAAI,GAAG,CAApB,EAAuBL,EAAE,CAAC/J,OAAH,CAAW,GAAX,EAAgBoK,IAAhB,CAAvB,CAAD,EAAgD,EAAhD,CAAf;AACH,OApBsB,CAsBvB;;;AACA,aAAO,KAAP;AACH;;AAxBD;AA0BA;;;;;AAIA,aAAgBC,YAAhB,CAA6BC,KAA7B,EAA2D;AACvD,UAAI,CAACA,KAAL,EAAY;AACR,eAAO;AAAElQ,WAAC,EAAE,CAAC,CAAN;AAASC,WAAC,EAAE,CAAC;AAAb,SAAP;AACH;;AACD,UAAIiQ,KAAK,YAAYC,UAArB,EAAiC;AAC7B,eAAO;AAAEnQ,WAAC,EAAEkQ,KAAK,CAACE,OAAX;AAAoBnQ,WAAC,EAAEiQ,KAAK,CAACG;AAA7B,SAAP;AACH,OAFD,MAEO;AACH,eAAOH,KAAK,CAACI,OAAN,IAAiBJ,KAAK,CAACI,OAAN,CAAc5L,MAAd,GAAuB,CAAxC,GACD;AAAE1E,WAAC,EAAEkQ,KAAK,CAACI,OAAN,CAAc,CAAd,EAAiBF,OAAtB;AAA+BnQ,WAAC,EAAEiQ,KAAK,CAACI,OAAN,CAAc,CAAd,EAAiBD;AAAnD,SADC,GAED;AAAErQ,WAAC,EAAE,CAAC,CAAN;AAASC,WAAC,EAAE,CAAC;AAAb,SAFN;AAGH;AACJ;;AAXD;AAaA;;AACA;;;;;AAIA,aAAgBsQ,OAAhB,CAAiCC,QAAjC,EAAgD;AAC5C,UAAMC,KAAK,sBAAOD,QAAP,CAAX;;AACA,UAAME,GAAG,GAAG,EAAZ;;AACA,aAAOD,KAAK,CAAC/L,MAAb,EAAqB;AACjB;AACA,YAAMiM,IAAI,GAAGF,KAAK,CAACG,GAAN,EAAb;;AACA,YAAIrB,KAAK,CAACsB,OAAN,CAAcF,IAAd,CAAJ,EAAyB;AACrB;AACAF,eAAK,CAACpG,IAAN,OAAAoG,KAAK,qBAASE,IAAT,EAAL;AACH,SAHD,MAGO;AACHD,aAAG,CAACrG,IAAJ,CAASsG,IAAT;AACH;AACJ,OAZ2C,CAa5C;;;AACA,aAAOD,GAAG,CAACI,OAAJ,EAAP;AACH;;AAfD;AAiBA,QAAMC,IAAI,GAAGC,KAAK,CAAC,SAAD,CAAlB;AACA,QAAMC,IAAI,GAAGC,KAAK,CAAC,UAAD,EAAa,UAAb,EAAyB,UAAzB,EAAqCH,IAAI,EAAzC,CAAlB;;AAEA,aAAgBI,oBAAhB,GAA4E;AAAA,UAAvCpO,IAAuC,uEAAxB,GAAwB;AAAA,UAAnBW,KAAmB,uEAAH,CAAG;AACxE,aAAOZ,IAAI,CAACY,KAAL,CAAWuN,IAAI,MAAMlO,IAAI,GAAGW,KAAb,CAAf,IAAsCA,KAA7C;AACH;;AAFD,wD,CAIA;;AACA,aAASsN,KAAT,CAAehI,GAAf,EAAoB;AAChB,WAAK,IAAInI,CAAC,GAAG,CAAR,EAAW4C,CAAC,GAAG,aAAauF,GAAG,CAACtE,MAArC,EAA6C7D,CAAC,GAAGmI,GAAG,CAACtE,MAArD,EAA6D7D,CAAC,EAA9D;AACK4C,SAAC,GAAGX,IAAI,CAACsO,IAAL,CAAU3N,CAAC,GAAGuF,GAAG,CAACqI,UAAJ,CAAexQ,CAAf,CAAd,EAAiC,UAAjC,CAAL,EACK4C,CAAC,GAAIA,CAAC,IAAI,EAAN,GAAaA,CAAC,KAAK,EAD5B;AADJ;;AAGA,aAAO,YAAY;AACfA,SAAC,GAAGX,IAAI,CAACsO,IAAL,CAAU3N,CAAC,GAAIA,CAAC,KAAK,EAArB,EAA0B,UAA1B,CAAJ;AACAA,SAAC,GAAGX,IAAI,CAACsO,IAAL,CAAU3N,CAAC,GAAIA,CAAC,KAAK,EAArB,EAA0B,UAA1B,CAAJ;AACA,eAAO,CAACA,CAAC,IAAIA,CAAC,KAAK,EAAZ,MAAoB,CAA3B;AACH,OAJD;AAKH;;AAED,aAASyN,KAAT,CAAevG,CAAf,EAAkBC,CAAlB,EAAqB0G,CAArB,EAAwB3N,CAAxB,EAA2B;AACvB,aAAO,YAAY;AACfgH,SAAC,MAAM,CAAP;AACAC,SAAC,MAAM,CAAP;AACA0G,SAAC,MAAM,CAAP;AACA3N,SAAC,MAAM,CAAP;AACA,YAAI4N,CAAC,GAAI5G,CAAC,GAAGC,CAAL,GAAU,CAAlB;AACAD,SAAC,GAAGC,CAAC,GAAIA,CAAC,KAAK,CAAf;AACAA,SAAC,GAAI0G,CAAC,IAAIA,CAAC,IAAI,CAAT,CAAF,GAAiB,CAArB;AACAA,SAAC,GAAIA,CAAC,IAAI,EAAN,GAAaA,CAAC,KAAK,EAAvB;AACA3N,SAAC,GAAIA,CAAC,GAAG,CAAL,GAAU,CAAd;AACA4N,SAAC,GAAIA,CAAC,GAAG5N,CAAL,GAAU,CAAd;AACA2N,SAAC,GAAIA,CAAC,GAAGC,CAAL,GAAU,CAAd;AACA,eAAO,CAACA,CAAC,KAAK,CAAP,IAAY,UAAnB;AACH,OAbD;AAcH;;AAED,aAAgBC,oBAAhB,CAAqCC,UAArC,EAAuD;AACnD,UAAI1J,MAAJ,EAAY;AACR,eAAOA,MAAM,CAAC2J,UAAP,GAAoBD,UAA3B;AACH;;AACD,aAAO,KAAP;AACH;;AALD;;AAOA,aAAgBE,WAAhB,CAA4B3I,GAA5B,EAAuC;AACnC,aAAO,OAAOA,GAAP,KAAe,QAAf,GACDA,GAAG,CACEkB,WADL,GAEK1F,KAFL,CAEW,GAFX,EAGK6D,GAHL,CAGS,UAAUiC,IAAV,EAAgB;AACjB,eAAOA,IAAI,CAACmB,OAAL,CAAanB,IAAI,CAAC,CAAD,CAAjB,EAAsBA,IAAI,CAAC,CAAD,CAAJ,CAAQsH,WAAR,EAAtB,CAAP;AACH,OALL,EAMK/F,IANL,CAMU,GANV,CADC,GAQD,EARN;AASH;;AAVD;;;;;;;;;;;;;;;;;;;;ACxqBA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;QAOagG,c;;;;;;;;;;;;;sCAGS;AACd,eAAK3S,OAAL;AACH;;;;MAL+B,aAAAtB,S;;AAHpC;;;8CAGaiU,c;AAAc,K;;;YAAdA,c;AAAc,2E;AAAA;;+DAAdA,c;;;;2BAAAA,c,EAAc;cAH1B,OAAA1S,SAG0B;eAHhB;AACPC,kBAAQ,EAAE;AADH,S;AAGgB,Q;;;;;;;;;;;;;;;;;;;;;;ACT3B;AAAA;AAAA;;;;;;QASaE,oB;AAET,oCAAoBwS,GAApB,EAAqC;AAAA;;AAAjB,aAAAA,GAAA,GAAAA,GAAA;AACnB;;;;sCAEgD5B,K,EAAO;AACpD,cAAM6B,WAAW,GAAG,KAAKD,GAAL,CAASzR,aAAT,CAAuBqF,KAA3C;AACA,eAAKoM,GAAL,CAASzR,aAAT,CAAuBqF,KAAvB,GAA+BqM,WAAW,CAACtG,OAAZ,CAAoB,UAApB,EAAgC,EAAhC,CAA/B;;AACA,cAAIsG,WAAW,KAAK,KAAKD,GAAL,CAASzR,aAAT,CAAuBqF,KAA3C,EAAkD;AAC9CwK,iBAAK,CAAC8B,eAAN;AACH;AACJ;;;;;;AAdL;;;uBAGa1S,oB,EAAoB,mC;AAAA,K;;;YAApBA,oB;AAAoB,4E;AAAA;AAAA;;mBAApB,yB;AAAqB,W;;;;;;;2BAArBA,oB,EAAoB;cAHhC,OAAAH,SAGgC;eAHtB;AACPC,kBAAQ,EAAE;AADH,S;AAGsB,Q;;;;;;gBAK5B,OAAA6S,Y;iBAAa,O,EAAS,CAAC,QAAD,C;;;;;;;;;;;;;;;;;;;;;;;;ACd3B;AAAA;AAAA;;;;;;QAKaC,W;;;;;;;kCAECxM,K,EAAmD;AAAA,cAApCyM,IAAoC,uEAArB,GAAqB;AAAA,cAAhBC,EAAgB,uEAAH,GAAG;AACzD,iBAAO,CAAC1M,KAAK,IAAG,EAAT,EAAalB,KAAb,CAAmB2N,IAAnB,EAAyBtG,IAAzB,CAA8BuG,EAA9B,CAAP;AACH;;;;;;AAPL;;;uBAGaF,W;AAAW,K;;;;YAAXA,W;AAAW;;;;;2BAAXA,W,EAAW;cAHvB,OAAAG,IAGuB;eAHlB;AACJ9T,cAAI,EAAE;AADF,S;AAGkB,Q;;;;;;;;;;;;;;;;;;;;;;;;;;ACLxB;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACFA;AAAA;AAAA;;AAQA;AAAA;AAAA;;AAKa,YAAA+T,oBAAA,GAAuB,UAAC/U,KAAD;AAAA,aAAiCA,KAAK,CAACgV,QAAvC;AAAA,KAAvB;;AAEA,YAAAC,qBAAA,GAAwB,QAAAC,YAAA,CAAa,qCAAb,EAAoD,QAAAC,KAAA,EAApD,CAAxB;AAEA,YAAAC,2BAAA,GAA8B,kBAAAC,mBAAA,CAA6E,kBAA7E,EAAiG,UAAjG,CAA9B;AAEA,YAAAC,2BAAA,GAA8B,kBAAAD,mBAAA,CAA6E,kBAA7E,EAAiG,UAAjG,CAA9B;AAEA,YAAAE,uBAAA,GAA0B,kBAAAF,mBAAA,CAA6E,cAA7E,EAA6F,MAA7F,CAA1B;AAEA,YAAAG,4BAAA,GAA+B,kBAAAH,mBAAA,CAA6E,mBAA7E,EAAkG,WAAlG,CAA/B;AAEA,YAAAI,sBAAA,GAAyB,kBAAAJ,mBAAA,CAA6E,aAA7E,EAA4F,aAA5F,CAAzB;AAEA,YAAAK,uBAAA,GAA0B,QAAAR,YAAA,CAAa,kCAAb,CAA1B;;;;;;;;;;;;;;;;;;;;;;;;AC7Bb;AAAA;AAAA;;AACA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAQA;AAAA;AAAA;;AAIA;AAAA;AAAA;;;;;;;;;;;;;;QAGaS,e,GACT,yBAAoBC,OAApB,EACoBC,cADpB,EAC8D;AAAA;;AAAA;;AAD1C,WAAAD,OAAA,GAAAA,OAAA;AACA,WAAAC,cAAA,GAAAA,cAAA;AAIb,WAAAC,2CAAA,GAA8C,KAAKF,OAAL,CAAaG,IAAb,CACjD,UAAAC,MAAA,CAAO,mBAAAf,qBAAP,CADiD,EAEjD,YAAAgB,QAAA,CAAS,UAACC,MAAD,EAAiD;AACtD,YAAMjR,IAAI,GAAG,IAAI,UAAAkR,MAAJ,CAAW;AAAClR,cAAI,EAAEiR,MAAM,CAACtB;AAAd,SAAX,CAAb;AACA,YAAMwB,mBAAmB,GAAG;AACxBC,eAAK,EAAEH,MAAM,CAACG,KADU;AAExBC,oBAAU,EAAE,IAFY;AAGxBC,eAAK,EAAE,IAHiB;AAIxB5N,gBAAM,EAAEuN,MAAM,CAACvN,MAJS;AAKxB6N,wBAAc,EAAE,KALQ;AAMxBrJ,cAAI,EAAE,iBANkB;AAOxBT,iBAAO,EAAE;AACL+J,qBAAS,cAAOxR,IAAI,CAACyR,aAAL,CAAmB;AAAEhR,qBAAO,EAAE;AAAX,aAAnB,EAAmCiR,OAA1C;AADJ,WAPe;AAUxBC,uBAAa,EAAE;AAVS,SAA5B;AAYA,YAAMC,eAAe,GAAG;AACpBR,eAAK,EAAEH,MAAM,CAACG,KADM;AAEpBC,oBAAU,EAAE,IAFQ;AAGpBC,eAAK,EAAE,IAHa;AAIpB5N,gBAAM,EAAEuN,MAAM,CAACvN,MAJK;AAKpB6N,wBAAc,EAAE,KALI;AAMpBrJ,cAAI,EAAE,iBANc;AAOpBT,iBAAO,EAAE;AACL+J,qBAAS,cAAOxR,IAAI,CAAC0R,OAAZ;AADJ,WAPW;AAUpBC,uBAAa,EAAE;AAVK,SAAxB;AAYA,YAAME,WAAW,GAAG;AAChBT,eAAK,EAAEH,MAAM,CAACG,KADE;AAEhBC,oBAAU,EAAE,IAFI;AAGhBC,eAAK,EAAE,IAHS;AAIhB5N,gBAAM,EAAEuN,MAAM,CAACvN,MAJC;AAKhB6N,wBAAc,EAAE,KALA;AAMhBrJ,cAAI,EAAE,kBANU;AAOhBT,iBAAO,EAAE;AACLqK,uBAAW,aAAM9R,IAAI,CAACyR,aAAL,CAAmB;AAAEpK,mBAAK,EAAE;AAAT,aAAnB,EAAkCqK,OAAxC,CADN;AAELF,qBAAS,aAAMxR,IAAI,CAAC0R,OAAX;AAFJ,WAPO;AAWhBC,uBAAa,EAAE;AAXC,SAApB;AAaA,YAAMI,gBAAgB,GAAG;AACrBX,eAAK,EAAEH,MAAM,CAACG,KADO;AAErBC,oBAAU,EAAE,IAFS;AAGrBC,eAAK,EAAE,IAHc;AAIrB5N,gBAAM,EAAEuN,MAAM,CAACvN,MAJM;AAKrB6N,wBAAc,EAAE,IALK;AAMrBrJ,cAAI,EAAE,kBANe;AAOrBT,iBAAO,EAAE;AACLqK,uBAAW,aAAM9R,IAAI,CAACyR,aAAL,CAAmB;AAAEpK,mBAAK,EAAE;AAAT,aAAnB,EAAkCqK,OAAxC;AADN,WAPY;AAUrBC,uBAAa,EAAE;AAVM,SAAzB;AAYA,YAAMK,WAAW,GAAG;AAChBZ,eAAK,EAAEH,MAAM,CAACG,KADE;AAEhBa,YAAE,EAAEhB,MAAM,CAACgB,EAFK;AAGhBZ,oBAAU,EAAE,IAHI;AAIhBC,eAAK,EAAE,CAJS;AAKhBK,uBAAa,EAAE;AALC,SAApB;AAQA,YAAMO,OAAO,GAAG,EAAhB;;AACA,gBAAOjB,MAAM,CAACkB,MAAd;AACI,eAAK,UAAL;AACID,mBAAO,CAACrK,IAAR,CAAa,mBAAAwI,2BAAA,CAA4B+B,OAA5B,CAAoCR,eAApC,CAAb;AACA;;AACJ,eAAK,MAAL;AACIM,mBAAO,CAACrK,IAAR,CAAa,mBAAAyI,uBAAA,CAAwB8B,OAAxB,CAAgCP,WAAhC,CAAb;AACA;;AACJ,eAAK,WAAL;AACIK,mBAAO,CAACrK,IAAR,CAAa,mBAAA0I,4BAAA,CAA6B6B,OAA7B,CAAqCL,gBAArC,CAAb;AACA;;AACJ,eAAK,aAAL;AACIG,mBAAO,CAACrK,IAAR,CAAa,mBAAA2I,sBAAA,CAAuB4B,OAAvB,CAA+BJ,WAA/B,CAAb;AACA;;AACJ,eAAK,UAAL;AACIE,mBAAO,CAACrK,IAAR,CAAa,mBAAAsI,2BAAA,CAA4BiC,OAA5B,CAAoCjB,mBAApC,CAAb,EADJ,CAEI;;AACA;;AACJ;AAjBJ;;AAmBA,eAAOe,OAAP;AACH,OAhFD,CAFiD,CAA9C;AAsFA,WAAAG,iCAAA,GAAoC,UAAAC,mBAAA,CAAoB,KAAK3B,OAAzB,EAAkC,mBAAAR,2BAAlC,EACvC,UAACc,MAAD,EAAY;AAAD;;AAAC,qBAAI,CAACL,cAAL,CAAoB2B,YAApB,CAAiCtB,MAAjC,qBAAqD,OAAAA,MAAM,CAACxJ,OAAP,MAAc,IAAd,IAAc,aAAd,GAAc,MAAd,GAAc,GAAEqK,WAAhB,KAA+B,EAApF,SAAyF,OAAAb,MAAM,CAACxJ,OAAP,MAAc,IAAd,IAAc,aAAd,GAAc,MAAd,GAAc,GAAE+J,SAAhB,KAA6B,EAAtH;AAA2H,OADhG,CAApC;AAIA,WAAAgB,iCAAA,GAAoC,UAAAF,mBAAA,CAAoB,KAAK3B,OAAzB,EAAkC,mBAAAN,2BAAlC,EACvC,UAACY,MAAD,EAAY;AAAD;;AAAC,qBAAI,CAACL,cAAL,CAAoB2B,YAApB,CAAiCtB,MAAjC,qBAAqD,OAAAA,MAAM,CAACxJ,OAAP,MAAc,IAAd,IAAc,aAAd,GAAc,MAAd,GAAc,GAAEqK,WAAhB,KAA+B,EAApF,SAAyF,OAAAb,MAAM,CAACxJ,OAAP,MAAc,IAAd,IAAc,aAAd,GAAc,MAAd,GAAc,GAAE+J,SAAhB,KAA6B,EAAtH;AAA2H,OADhG,CAApC;AAIA,WAAAiB,6BAAA,GAAgC,UAAAH,mBAAA,CAAoB,KAAK3B,OAAzB,EAAkC,mBAAAL,uBAAlC,EACnC,UAACW,MAAD,EAAW;AAAA;;AACP,qBAAI,CAACL,cAAL,CAAoB2B,YAApB,CAAiCtB,MAAjC,iBAAiD,OAAAA,MAAM,CAACxJ,OAAP,MAAc,IAAd,IAAc,aAAd,GAAc,MAAd,GAAc,GAAEqK,WAAhB,KAA+B,EAAhF,SAAqF,OAAAb,MAAM,CAACxJ,OAAP,MAAc,IAAd,IAAc,aAAd,GAAc,MAAd,GAAc,GAAE+J,SAAhB,KAA6B,EAAlH;AAAuH,OAFxF,CAAhC;AAKA,WAAAkB,kCAAA,GAAqC,UAAAJ,mBAAA,CAAoB,KAAK3B,OAAzB,EAAkC,mBAAAJ,4BAAlC,EACxC,UAACU,MAAD,EAAW;AAAA;;AACP,qBAAI,CAACL,cAAL,CAAoB2B,YAApB,CAAiCtB,MAAjC,sBAAsD,OAAAA,MAAM,CAACxJ,OAAP,MAAc,IAAd,IAAc,aAAd,GAAc,MAAd,GAAc,GAAEqK,WAAhB,KAA+B,EAArF,SAA0F,OAAAb,MAAM,CAACxJ,OAAP,MAAc,IAAd,IAAc,aAAd,GAAc,MAAd,GAAc,GAAE+J,SAAhB,KAA6B,EAAvH;AAA4H,OAFxF,CAArC;AAKA,WAAAmB,4BAAA,GAA+B,UAAAL,mBAAA,CAAoB,KAAK3B,OAAzB,EAAkC,mBAAAH,sBAAlC,EAClC,UAACS,MAAD;AAAA,eACI,MAAI,CAACL,cAAL,CAAoB2B,YAApB,CAAiCtB,MAAjC,wBAAwDA,MAAM,CAACgB,EAA/D,EADJ;AAAA,OADkC,CAA/B;AA3GN,K;;;uBAHQvB,e,EAAe,uB,EAAA,wC;AAAA,K;;;aAAfA,e;AAAe,eAAfA,eAAe;;;AAMxB,wBADC,UAAAkC,MAAA,EACD,E,yCAAA,G,yBAAA,E,6CAAA,E,MAAA;;AAsFA,wBADC,UAAAA,MAAA,EACD,E,yCAAA,G,yBAAA,E,mCAAA,E,MAAA;;AAIA,wBADC,UAAAA,MAAA,EACD,E,yCAAA,G,yBAAA,E,mCAAA,E,MAAA;;AAIA,wBADC,UAAAA,MAAA,EACD,E,yCAAA,G,yBAAA,E,+BAAA,E,MAAA;;AAKA,wBADC,UAAAA,MAAA,EACD,E,yCAAA,G,yBAAA,E,oCAAA,E,MAAA;;AAKA,wBADC,UAAAA,MAAA,EACD,E,yCAAA,G,yBAAA,E,8BAAA,E,MAAA;;AA/GJ;;;;2BACalC,e,EAAe;cAD3B,OAAAmC;AAC2B,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7B5B;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;QASaC,c;;;;AAPb;;YAOaA;;;;yBAAAA,c;AAAc,O;AAAA,gBANd,CACL,SAAA7X,YADK,EAEL,UAAA8X,aAAA,CAAcC,UAAd,CAAyB,CAAC,mBAAAtC,eAAD,CAAzB,CAFK,EAGL,QAAAuC,WAAA,CAAYD,UAAZ,CAAuB,UAAvB,EAAmC,mBAAAE,eAAnC,CAHK,CAMc;;;;+EAAdJ,c,EAAc;AAAA,kBALnB,SAAA7X,YAKmB,EALP,uBAKO,EALP,qBAKO;AAAA,O;AALP,K;;;;;2BAKP6X,c,EAAc;cAP1B,OAAA5X,QAO0B;eAPjB;AACNC,iBAAO,EAAE,CACL,SAAAF,YADK,EAEL,UAAA8X,aAAA,CAAcC,UAAd,CAAyB,CAAC,mBAAAtC,eAAD,CAAzB,CAFK,EAGL,QAAAuC,WAAA,CAAYD,UAAZ,CAAuB,UAAvB,EAAmC,mBAAAE,eAAnC,CAHK;AADH,S;AAOiB,Q;;;;;;;;;;;;;;;;;;;;;;ACd3B;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAUA;AAAA;AAAA;;AAUa,YAAAC,oBAAA,GAAwC;AACjDC,WAAK,EAAE,UAAAC,YAAA,CAAaC,KAAb,EAD0C;AAEjDC,cAAQ,EAAE,UAAAF,YAAA,CAAaC,KAAb,EAFuC;AAGjDE,cAAQ,EAAE,UAAAH,YAAA,CAAaC,KAAb,EAHuC;AAIjDG,UAAI,EAAE,UAAAJ,YAAA,CAAaC,KAAb,EAJ2C;AAKjDI,eAAS,EAAE,UAAAL,YAAA,CAAaC,KAAb,EALsC;AAMjDK,iBAAW,EAAE,UAAAN,YAAA,CAAaC,KAAb;AANoC,KAAxC;AASA,YAAAJ,eAAA,GAAkB,QAAAU,aAAA,iBAAc,QAAAT,oBAAd,EAC3B,QAAAU,EAAA,CAAG,mBAAApD,uBAAH,EAA4B,UAAC1V,KAAD;AAAA,aAA6B,MAAD,OAAC,CAAD,kBACjDA,KADiD,CAAC,EAC7C;AACR4Y,mBAAW,EAAE,UAAAN,YAAA,CAAaC,KAAb;AADL,OAD6C,CAA7B;AAAA,KAA5B,CAD2B,4BAKxB,mBAAAnD,2BAAA,CAA4B2D,GALJ,sBAMxB,mBAAAzD,2BAAA,CAA4ByD,GANJ,sBAOxB,mBAAAxD,uBAAA,CAAwBwD,GAPA,sBAQxB,mBAAAvD,4BAAA,CAA6BuD,GARL,sBASxB,mBAAAtD,sBAAA,CAAuBsD,GATC,GAAlB;AAcI,YAAAC,uBAAA,GAA4C;AACrDC,uBAAiB,EAAE;AADkC,KAA5C;AAIA,YAAAC,kBAAA,GAAqB,QAAAL,aAAA,CAAc,QAAAG,uBAAd,EAC9B,QAAAF,EAAA,CAAG,cAAAK,oBAAH,EAAyB,UAACnZ,KAAD,EAA0BkW,MAA1B,EAAqC;AAC1D,aAAO,gCACAlW,KADA,GACK;AACRoZ,kBAAU,EAAE,MAAF,OAAE,CAAF,kBACHpZ,KAAK,CAACoZ,UADH,CAAE,EAELlD,MAAM,CAACmD,OAFF;AADJ,OADL,CAAP;AAOH,KARD,CAD8B,EAU9B,QAAAP,EAAA,CAAG,cAAAQ,oBAAH,EAAyB,UAAAtZ,KAAK;AAAA,aAAK,MAAD,OAAC,CAAD,kBAC3BA,KAD2B,CAAC,EACvB;AACRoZ,kBAAU,EAAElS;AADJ,OADuB,CAAL;AAAA,KAA9B,CAV8B,EAc9B,QAAA4R,EAAA,CAAG,cAAAS,iBAAH,EAAsB,UAAAvZ,KAAK;AAAA,aAAK,MAAD,OAAC,CAAD,kBACxBA,KADwB,CAAC,EACpB;AACRwZ,wBAAgB,EAAE,IAAI3U,IAAJ;AADV,OADoB,CAAL;AAAA,KAA3B,CAd8B,EAkB9B,QAAAiU,EAAA,CAAG,cAAAW,gBAAH,EAAqB,UAACzZ,KAAD,EAA0BkW,MAA1B,EAAqC;AACtD,aAAO,gCACAlW,KADA,GACK;AACRiZ,yBAAiB,EAAE/C,MAAM,CAACmD;AADlB,OADL,CAAP;AAIH,KALD,CAlB8B,EAwB9B,QAAAP,EAAA,CAAG,cAAAY,gBAAH,EAAqB,UAAC1Z,KAAD;AAAA,aAA8B,MAAD,OAAC,CAAD,kBAC3CA,KAD2C,CAAC,EACvC;AACRiZ,yBAAiB,EAAE,QAAAD,uBAAA,CAAwBC;AADnC,OADuC,CAA9B;AAAA,KAArB,CAxB8B,CAArB;;;;;;;;;;;;;;;;;;;;ACjDJ,YAAAU,wBAAA,GAA2B,UAACC,OAAD;AAAA,aAA0CA,OAAO,GAAI;AACzFzR,aAAK,EAAEyR,OAAO,CAAC1C,EAD0E;AAEzFhG,eAAO,EAAE0I,OAAO,CAAC5Y;AAFwE,OAAJ,GAGpFkG,SAHmC;AAAA,KAA3B;;;;;;;;;;;;;;;;;;;;;;;;;ACHb;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACHA;AAAA;AAAA;;AAaA;AAAA;AAAA;;AAMa,YAAA2S,aAAA,GAAgB,kBAAAxE,mBAAA,CAA6D,WAA7D,EAA0E,MAA1E,CAAhB;;AAEA,YAAAyE,qBAAA,GAAwB,UAAC9Z,KAAD;AAAA,aAA+BA,KAAK,CAAC+Z,SAArC;AAAA,KAAxB;;AAEA,YAAAC,0BAAA,GAA6B,QAAAC,cAAA,CAAe,QAAAH,qBAAf,EAAsC,QAAAD,aAAA,CAAcK,SAAd,CAAwBC,eAA9D,CAA7B;AAEb;;;;AAGa,YAAAC,kCAAA,GAAqC,QAAAH,cAAA,CAAe,QAAAJ,aAAA,CAAcK,SAAd,CAAwBC,eAAvC,EAAwD,UAACE,OAAD,EAAa;AACnH,UAAIA,OAAJ,EAAa;AACT,YAAMC,MAAM,GAAG,IAAIC,GAAJ,EAAf;AACAF,eAAO,CAAChX,OAAR,CAAgB,UAAAmX,CAAC,EAAI;AACjB,cAAMC,KAAK,GAAGzI,KAAK,CAAC4C,IAAN,CAAW0F,MAAM,CAACzP,IAAP,EAAX,EAA0BpC,IAA1B,CAA+B,UAAAsL,CAAC;AAAA,mBAAIA,CAAC,CAAC/S,IAAF,KAAWwZ,CAAC,CAACE,IAAjB;AAAA,WAAhC,CAAd;AACA,cAAIvX,IAAI,GAAGsX,KAAK,GAAGH,MAAM,CAACK,GAAP,CAAWF,KAAX,CAAH,GAAuBvT,SAAvC;;AACA,cAAI,CAAC/D,IAAL,EAAW;AACPA,gBAAI,GAAG,EAAP;AACAmX,kBAAM,CAAC1V,GAAP,CAAW;AACP5D,kBAAI,EAAEwZ,CAAC,CAACE,IADD;AAEP7Q,sBAAQ,EAAE2Q,CAAC,CAAC3Q;AAFL,aAAX,EAGG1G,IAHH;AAIH;;AACDA,cAAI,CAAC2J,IAAL,CAAU0N,CAAV;AACH,SAXD;AAYA,eAAOF,MAAP;AACH;;AACD,aAAO,IAAIC,GAAJ,EAAP;AACH,KAlBiD,CAArC;AAoBA,YAAAK,mBAAA,GAAsB,QAAAX,cAAA,CAAe,QAAAD,0BAAf,EAC/B,UAACD,SAAD,EAAYc,KAAZ,EAA8B;;;AAC1B,UAAId,SAAJ,EAAe;AACX,eAAO,CAAP,WAAOA,SAAS,CAACjP,GAAV,CAAc,UAAAuC,CAAC;AAAA,iBAAIA,CAAC,CAACyN,MAAF,CAASrS,IAAT,CAAc,UAACsS,CAAD;AAAA,mBAAsBA,CAAC,CAAC7D,EAAF,KAAS2D,KAA/B;AAAA,WAAd,CAAJ;AAAA,SAAf,CAAP,MAA8E,IAA9E,IAA8E,aAA9E,GAA8E,MAA9E,GAA8E,GACvE,CADuE,CAAvE,MACC,IADD,IACC,aADD,GACC,EADD,GACM3T,SADb;AAEH;;AACD,aAAOA,SAAP;AACH,KAP8B,CAAtB;;;;;;;;;;;;;;;;;;;;;;;;AChDb;AAAA;AAAA;;AACA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;QAIa8T,gB,GAEX,0BAAoBpF,OAApB,EACoBqF,mBADpB,EAC8D;AAAA;;AAAA;;AAD1C,WAAArF,OAAA,GAAAA,OAAA;AACA,WAAAqF,mBAAA,GAAAA,mBAAA;AAKb,WAAApB,aAAA,GAAgB,UAAAtC,mBAAA,CAAoB,KAAK3B,OAAzB,EAAkC,oBAAAiE,aAAlC,EACrB,UAAC3D,MAAD;AAAA,eAAY,MAAI,CAAC+E,mBAAL,CAAyBC,oBAAzB,CAA8ChF,MAA9C,CAAZ;AAAA,OADqB,CAAhB;AAIA,WAAAiF,qBAAA,GAAwB,KAAKvF,OAAL,CAAaG,IAAb,CAC7B,UAAAC,MAAA,CAAO,uBAAAoF,iBAAA,CAAkBf,OAAzB,CAD6B,EAE7B,YAAAvP,GAAA,CAAI,UAACoL,MAAD;AAAA,eAAkD,oBAAA2D,aAAA,CAAcxC,OAAd,CAAsBnB,MAAM,CAACmD,OAA7B,CAAlD;AAAA,OAAJ,CAF6B,CAAxB;AAPN,K;;;uBALU2B,gB,EAAgB,uB,EAAA,mC;AAAA,K;;;aAAhBA,gB;AAAgB,eAAhBA,gBAAgB;;;AAQ3B,wBADC,UAAAnD,MAAA,EACD,E,yCAAA,G,0BAAA,E,eAAA,E,MAAA;;AAIA,wBADC,UAAAA,MAAA,EACD,E,yCAAA,G,0BAAA,E,uBAAA,E,MAAA;;AAbF;;;;2BACamD,gB,EAAgB;cAD5B,OAAAlD;AAC4B,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrB7B;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;QAaauD,e;;;;AAVb;;YAUaA;;;;yBAAAA,e;AAAe,O;AAAA,gBARf,CACL,SAAAnb,YADK,EAEL,UAAA8X,aAAA,CAAcC,UAAd,CAAyB,CACrB,oBAAA+C,gBADqB,CAAzB,CAFK,EAKL,QAAA9C,WAAA,CAAYD,UAAZ,CAAuB,WAAvB,EAAoC,oBAAAqD,gBAApC,CALK,CAQe;;;;+EAAfD,e,EAAe;AAAA,kBAPpB,SAAAnb,YAOoB,EAPR,uBAOQ,EAPR,qBAOQ;AAAA,O;AAPR,K;;;;;2BAOPmb,e,EAAe;cAV3B,OAAAlb,QAU2B;eAVlB;AACN6B,sBAAY,EAAE,EADR;AAEN5B,iBAAO,EAAE,CACL,SAAAF,YADK,EAEL,UAAA8X,aAAA,CAAcC,UAAd,CAAyB,CACrB,oBAAA+C,gBADqB,CAAzB,CAFK,EAKL,QAAA9C,WAAA,CAAYD,UAAZ,CAAuB,WAAvB,EAAoC,oBAAAqD,gBAApC,CALK;AAFH,S;AAUkB,Q;;;;;;;;;;;;;;;;;;;;;;AClB5B;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAGa,YAAAC,oBAAA,GAAsC;AAC/CC,UAAI,EAAE,UAAAlD,YAAA,CAAaC,KAAb;AADyC,KAAtC;AAIA,YAAA+C,gBAAA,GAAmB,QAAAzC,aAAA,iBAAc,QAAA0C,oBAAd,4BACzB,oBAAA1B,aAAA,CAAcd,GADW,GAAnB;;;;;;;;;;;;;;;;;;;;;;;;ACTb;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;ACpBA;;;;;AAIA,aAAgB0C,aAAhB,CAA8B3Q,GAA9B,EAA4C;AAC1C,UAAIW,GAAG,GAAG,EAAV;;AACA,UAAIX,GAAJ,EAAS;AACP,aAAK,IAAMnK,GAAX,IAAkBmK,GAAlB,EAAuB;AACrB,cAAIA,GAAG,CAAClK,cAAJ,CAAmBD,GAAnB,KAA2BmK,GAAG,CAACnK,GAAD,CAAH,KAAauG,SAAxC,IAAqD4D,GAAG,CAACnK,GAAD,CAAH,KAAa,IAAtE,EAA4E;AAC1E8K,eAAG,cAAQA,GAAG,GAAG,GAAH,GAAS,EAApB,SAA0B9K,GAA1B,cAAiCmK,GAAG,CAACnK,GAAD,CAApC,CAAH;AACD;AACF;AACF;;AACD,aAAO8K,GAAP;AACD;;AAVD;;;;;;;;;;;;;;;;;;;;ACNA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAMA;AAAA;AAAA;;AAMA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAKA;AAAA;AAAA,6D,CAAuF;;;AACvF;AAAA;AAAA;;AAGA;AAAA;AAAA;;AAGA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAgBaiQ,kB;;;;;AAST,kCACWC,KADX,EAEWC,SAFX,EAGYC,QAHZ,EAIYC,KAJZ,EAKYC,MALZ,EAMYC,SANZ,EAOYC,QAPZ,EAQYC,SARZ,EASYC,SATZ,EAUYC,YAVZ,EAU4C;AAAA;;AAAA;;AAExC;AAXO,eAAAT,KAAA,GAAAA,KAAA;AACA,eAAAC,SAAA,GAAAA,SAAA;AACC,eAAAC,QAAA,GAAAA,QAAA;AACA,eAAAC,KAAA,GAAAA,KAAA;AACA,eAAAC,MAAA,GAAAA,MAAA;AACA,eAAAC,SAAA,GAAAA,SAAA;AACA,eAAAC,QAAA,GAAAA,QAAA;AACA,eAAAC,SAAA,GAAAA,SAAA;AACA,eAAAC,SAAA,GAAAA,SAAA;AACA,eAAAC,YAAA,GAAAA,YAAA;AAlBZ;;AACU,eAAAC,SAAA,GAEN,EAFM;AAGV;;AACU,eAAAC,UAAA,GAAiD,EAAjD;;AAgBN,eAAK1X,GAAL,CAAS,QAAT,EAAmB,IAAnB;;AACA,eAAKA,GAAL,CAAS,OAAT,EAAkB,MAAlB;;AACA,eAAKA,GAAL,CAAS,SAAT,EAAoB,EAApB;;AACA,eAAKA,GAAL,CAAS,4BAAT,EAAuC,IAAvC;;AACA,eAAKA,GAAL,CAAS,MAAT,EAAiB,IAAI,OAAAlE,eAAJ,CAGP,IAHO,CAAjB;;AAKA,eAAKkE,GAAL,CAAS,eAAT,EAA0B,KAA1B;;AAEA,eAAKiX,QAAL,CAAcU,QAAd,CAAuBxG,IAAvB,CAA4B,YAAAyG,KAAA,CAAM,UAAAC,CAAC;AAAA,iBAAIA,CAAJ;AAAA,SAAP,CAA5B,EAA2CvZ,SAA3C,CAAqD,YAAM;AACvD,iBAAK4Y,KAAL,CAAWY,GAAX,CAAe,YAAM;AACjB,mBAAKzS,GAAL,CAAS,KAAT;;AACA,mBAAK0S,eAAL;AACH,WAHD;AAIH,SALD;;AAdwC;AAoB3C;;;;;AAoBD;;;;gCAIehc,G,EAAW;AACtB,iBAAO,KAAKqb,SAAL,CAAerB,GAAf,CAAmBha,GAAnB,CAAP;AACH;AAED;;;;;;;AA+BA;;;;;;;;+BASIuJ,I,EACA0S,O,EAOC;AAAA;;AAAA,cAND1G,MAMC,uEANgB,IAMhB;AAAA,cALD2G,SAKC;AAAA,cAJDC,IAIC,uEAJuB;AACpB5S,gBAAI,EAAE,MADc;AAEpB,qBAAO,gBAFa;AAGpB6S,mBAAO,EAAE;AAHW,WAIvB;;AAED,cAAMC,YAAY,GAAG,KAAKb,SAAL,CAAec,IAAf,CAAoBL,OAApB,EAA6B1G,MAA7B,EAAqC;AACtDgH,sBAAU,EAAE,CAAChT,IAAD,CAD0C;AAEtDlE,oBAAQ,EAAE;AAF4C,WAArC,CAArB;;AAIA,eAAKhD,YAAL,CACI,gBADJ,EAEIga,YAAY,CAACG,cAAb,GAA8Bja,SAA9B,CAAwC,YAAM;AAC1C,kBAAI,CAACnC,KAAL,CAAW,gBAAX;;AACA,kBAAI,CAACA,KAAL,CAAW,QAAX;AACH,WAHD,CAFJ;;AAOA,cAAImV,MAAJ,EAAY;AACR2G,qBAAS,GAAGA,SAAS,IAAK;AAAA,qBAAMG,YAAY,CAACI,OAAb,EAAN;AAAA,aAA1B;;AACA,iBAAKpa,YAAL,CACI,QADJ,EAEIga,YAAY,CAACK,QAAb,GAAwBna,SAAxB,CAAkC;AAAA,qBAAM2Z,SAAS,EAAf;AAAA,aAAlC,CAFJ;AAIH;AACJ;AAED;;;;;;;;;sCAMqB1S,G,EAAa+L,M,EAAiB2G,S,EAAsB;AACrE,cAAMC,IAAI,GAAoB;AAC1B5S,gBAAI,EAAE,MADoB;AAE1B,qBAAO,gBAFmB;AAG1B6S,mBAAO,EAAE;AAHiB,WAA9B;AAKA,eAAKO,MAAL,CAAY,SAAZ,EAAuBnT,GAAvB,EAA4B+L,MAA5B,EAAoC2G,SAApC,EAA+CC,IAA/C;AACH;AAED;;;;;;;;;oCAMmB3S,G,EAAa+L,M,EAAiB2G,S,EAAsB;AACnE,cAAMC,IAAI,GAAoB;AAC1B5S,gBAAI,EAAE,MADoB;AAE1B,qBAAO,gBAFmB;AAG1B6S,mBAAO,EAAE;AAHiB,WAA9B;AAKA,eAAKO,MAAL,CAAY,OAAZ,EAAqBnT,GAArB,EAA0B+L,MAA1B,EAAkC2G,SAAlC,EAA6CC,IAA7C;AACH;AAED;;;;;;;;;mCAMkB3S,G,EAAa+L,M,EAAiB2G,S,EAAsB;AAClE,cAAMC,IAAI,GAAoB;AAC1B5S,gBAAI,EAAE,MADoB;AAE1B,qBAAO,gBAFmB;AAG1B6S,mBAAO,EAAE;AAHiB,WAA9B;AAKA,eAAKO,MAAL,CAAY,MAAZ,EAAoBnT,GAApB,EAAyB+L,MAAzB,EAAiC2G,SAAjC,EAA4CC,IAA5C;AACH;AAED;;;;;;;;;mCAMkB3S,G,EAAa+L,M,EAAiB2G,S,EAAsB;AAClE,eAAKS,MAAL,CAAY,MAAZ,EAAoBnT,GAApB,EAAyB+L,MAAzB,EAAiC2G,SAAjC;AACH;AAED;;;;;;;;;;;4BASI3S,I,EACAC,G,EACAC,I,EAEsB;AAAA,cADtBC,MACsB,uEADE,OACF;AAAA,cAAtBC,KAAsB,uEAAL,KAAK;AAEtB,iBAAAL,GAAA,CAAIC,IAAJ,EAAUC,GAAV,EAAeC,IAAf,EAAqBC,MAArB,EAA6BC,KAA7B;AACH;AAED;;;;;;;4BAIoBtJ,I,EAAY;AAC5B,iBAAO,KAAKqb,SAAL,CAAerb,IAAf,KAAwB,KAAKqb,SAAL,CAAerb,IAAf,aAAgC,OAAAN,eAAxD,GACA,KAAK2b,SAAL,CAAerb,IAAf,EAA4CS,QAA5C,EADA,GAED,IAFN;AAGH;AAED;;;;;;;;+BAKuBT,I,EAAY;AAC/B,cAAI,CAAC,KAAKsb,UAAL,CAAgBtb,IAAhB,CAAL,EAA4B;AACxB,iBAAK4D,GAAL,CAAY5D,IAAZ,EAAkB,IAAlB;AACH;;AACD,iBAAO,KAAKsb,UAAL,CAAgBtb,IAAhB,CAAP;AACH;AAED;;;;;;;;4BAKoBA,I,EAAcmH,K,EAAQ;AACtC,cAAI,CAAC,KAAKkU,SAAL,CAAerb,IAAf,CAAL,EAA2B;AACvB,iBAAKqb,SAAL,CAAerb,IAAf,IAAuB,IAAI,OAAAN,eAAJ,CAAuByH,KAAvB,CAAvB;AACA,iBAAKmU,UAAL,CAAgBtb,IAAhB,IAAwB,KAAKqb,SAAL,CAAerb,IAAf,EAAqBuc,YAArB,EAAxB;AACH,WAHD,MAGO;AACH,iBAAKlB,SAAL,CAAerb,IAAf,EAAqBoS,IAArB,CAA0BjL,KAA1B;AACH;AACJ;AAED;;;;0CAC0B;AAAA;;AACtB;AACA,eAAK6T,SAAL,CAAewB,WAAf,CAA2BzH,IAA3B,CAAgC,YAAAyG,KAAA,CAAM,UAAAC,CAAC;AAAA,mBAAIA,CAAJ;AAAA,WAAP,CAAhC,EAA+CvZ,SAA/C,CAAyD;AAAA,mBAAM,OAAI,CAACua,IAAL,EAAN;AAAA,WAAzD;AACH;AAED;;;;;;+BAGY;AAAA;;AACR,eAAKC,aAAL;AACA,eAAK1a,YAAL,CAAkB,aAAlB,EAAiC,KAAK2Y,KAAL,CAAWgC,MAAX,CAAkB,eAAAC,iBAAlB,EAC5B7H,IAD4B,CACtB,YAAAlK,MAAA,CAAO,UAAAgS,IAAI;AAAA,mBAAIA,IAAI,KAAK3W,SAAb;AAAA,WAAX,CADsB,EAE5B6O,IAF4B,CAEvB,YAAA+H,IAAA,CAAK,CAAL,CAFuB,EAG5B5a,SAH4B,CAGlB,UAAC2a,IAAD,EAAe;AACtB;AACA,mBAAI,CAACE,cAAL,CAAoBF,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEG,IAA1B;AACH,WAN4B,CAAjC;;AAQA,eAAK9B,SAAL,CAAesB,WAAf,CAA2BzH,IAA3B,CAAgC,YAAAyG,KAAA,CAAM,UAAAC,CAAC;AAAA,mBAAIA,CAAJ;AAAA,WAAP,CAAhC,EAA+CvZ,SAA/C,CAAyD,YAAM;AAC3D,mBAAI,CAACzC,YAAL,CAAkB2S,IAAlB,CAAuB,IAAvB;AACH,WAFD,EAVQ,CAaR;;;AACA,cAAI5I,MAAM,CAACC,KAAX,EAAkB;AACdD,kBAAM,CAACyT,WAAP,GAAqB,IAArB;AACH;AACJ;AAED;;;;;;wCAGqB;AACjB,eAAKhU,GAAL,CAAS,QAAT,EAAmB,sBAAnB;AACA,cAAMiU,OAAO,GAA4B,KAAKvD,GAAL,CAAS,SAAT,CAAzC;AACAuD,iBAAO,CAACC,QAAR,GAAmB;AACfvB,mBAAO,EAAE,iCADM;AAEf5c,iBAAK,EAAE;AAFQ,WAAnB;AAIA,eAAK4E,GAAL,CAAS,SAAT,EAAoBsZ,OAApB,EAPiB,CAQjB;;AACA,cAAME,QAAQ,GAAqB,KAAKpC,SAAL,CAAerB,GAAf,CAAmB,UAAnB,KAAkC,EAArE;AACA,cAAM0D,QAAQ,GAAGD,QAAQ,CAACC,QAAT,IAAqBC,QAAQ,CAACD,QAA/C;AACA,cAAME,IAAI,GAAGH,QAAQ,CAACI,MAAT,IAAmBF,QAAQ,CAACG,QAAzC;AACA,cAAMC,IAAI,GAAGN,QAAQ,CAACM,IAAT,IAAiBJ,QAAQ,CAACI,IAAvC;AACA,cAAMC,GAAG,GAAGP,QAAQ,CAACQ,UAAT,aAAyBP,QAAzB,eAAsCE,IAAtC,cAA8CG,IAA9C,IAAuDJ,QAAQ,CAACO,MAA5E;AACA,cAAMC,KAAK,GAAGP,IAAI,CAACQ,QAAL,CAAc,WAAd,KAA8BL,IAAI,KAAK,MAAvC,GAAgD,EAAhD,GAAqDN,QAAQ,CAACU,KAAT,IAAkB,EAArF;AACA,cAAME,IAAI,GACN,KAAKhD,SAAL,CAAerB,GAAf,CAAmB,MAAnB,KACA2D,QAAQ,CAACW,IAAT,CAAcF,QAAd,CAAuB,WAAvB,CADA,IAEAG,YAAY,CAACC,OAAb,CAAqB,MAArB,MAAiC,MAHrC,CAfiB,CAmBjB;;AACA,cAAMC,MAAM,GAAmB;AAC3BC,iBAAK,EAAE,QADoB;AAE3Bd,gBAAI,YAAKA,IAAL,cAAaG,IAAb,CAFuB;AAG3BY,oBAAQ,YAAKX,GAAL,0BAHmB;AAI3BY,qBAAS,YAAKZ,GAAL,gBAJkB;AAK3Ba,wBAAY,YAAKlB,QAAQ,CAACO,MAAd,SAAuBC,KAAvB,qBALe;AAM3BW,wBAAY,EAAE,CAACrB,QAAQ,CAACsB,WANG;AAO3BV,gBAAI,EAAJA;AAP2B,WAA/B;;AASA,eAAK9C,SAAL,CAAeyD,KAAf,CAAqBP,MAArB;;AACAlB,iBAAO,CAACC,QAAR,GAAmB;AACfvB,mBAAO,EAAE,iCADM;AAEf5c,iBAAK,EAAE;AAFQ,WAAnB;AAIA,eAAK4E,GAAL,CAAS,SAAT,EAAoBsZ,OAApB;AACH;;;uCAEsBF,I,EAAc;;;AACjC,eAAK/T,GAAL,CAAS,MAAT,yBAAiC,WAAKmS,YAAL,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAEwD,UAApD,GADiC,CAEjC;;AACA,cAAMC,MAAM,GAAG,KAAK7D,SAAL,CAAerB,GAAf,CAAmB,aAAnB,CAAf;;AACA,cAAI,CAAJ,KAAI,KAAKyB,YAAL,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAEwD,UAAvB,EAAmC;AAC/B;AACAC,kBAAM,CAACC,MAAP,GAAgB,KAAK1D,YAAL,CAAkBwD,UAAlC;AACH;;AACD,cAAIC,MAAJ,EAAY;AACR,iBAAKjE,SAAL,CAAemE,IAAf,CAAoBF,MAApB;;AACA,gBAAI7B,IAAJ,EAAU;AACN,mBAAKpC,SAAL,CAAeoE,QAAf,CAAwBhC,IAAxB;AACH;AACJ,WALD,MAKO;AACH,iBAAK/T,GAAL,CAAS,MAAT,6DAAqE,KAAK+R,SAAL,CAAeiE,QAApF;AACH;AACJ;;;0BAjS0BC,I,EAAe;AACtC,eAAKC,gBAAL,GAAwBD,IAAxB;AACH,S;4BAEyB;AACtB,iBAAO,KAAKC,gBAAZ;AACH;AAED;;;;4BACuB;AACnB,iBAAO,EAAP;AACH;AAED;;;;4BACqB;AACjB,iBAAO,KAAKlE,QAAZ;AACH;;;0BAagB9T,K,EAAe;AAC5B,cAAMiY,YAAY,GAAG,KAAKC,OAAL,CAAa,WAAb,CAArB;AACA,eAAKzb,GAAL,CAAS,OAAT,EAAkBuD,KAAlB;;AACA,eAAK4T,MAAL,CAAYuE,QAAZ,WAAwBnY,KAAK,GAAGA,KAAK,GAAG,KAAX,GAAmB,EAAhD,SAAqDiY,YAArD;AACH;AAED;;;;4BAGgB;AACZ,iBAAO,KAAKrE,MAAL,CAAYwE,QAAZ,EAAP;AACH;AAED;;;;4BACsB;AAClB;AACH;AAED;;;;4BAC6B;AACzB,iBAAO,KAAKrE,SAAL,CAAesE,IAAf,CAAoBC,YAApB,GAAmC,GAA1C;AACH;AAED;;;;4BACuB;AACnB,iBAAO,KAAKzE,SAAL,CAAe0E,cAAtB;AACH;;;;MAhGmC,OAAArgB,S;;AAHxC;;;uBAGaqb,kB,EAAkB,qB,EAAA,6B,EAAA,8B,EAAA,sB,EAAA,qB,EAAA,+B,EAAA,8B,EAAA,+B,EAAA,2B,EAAA,kC;AAAA,K;;;aAAlBA,kB;AAAkB,eAAlBA,kBAAkB,K;AAAA,kBAFf;;;;;2BAEHA,kB,EAAkB;cAH9B,OAAA5D,UAG8B;eAHnB;AACR6I,oBAAU,EAAE;AADJ,S;AAGmB,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvD/B;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAIA;AAAA;AAAA;;QAaaC,a;;;;;AAmBX,6BAAYC,QAAZ,EAA+B;AAAA;;AAAA;;AAC7B;AAnBF;;AACmB,gBAAAC,aAAA,GAAgB,IAAI,OAAAC,OAAJ,EAAhB;AACnB;;AACgB,gBAAAC,MAAA,GAAS,QAAKF,aAAL,CAAmBvD,YAAnB,EAAT;AAOhB;;AACU,gBAAA0D,aAAA,GAAiC,EAAjC;AASR,gBAAK/J,EAAL,GAAU2J,QAAQ,CAAC3J,EAAT,IAAe2J,QAAQ,CAACK,OAAxB,IAAmCL,QAAQ,CAACxK,KAA5C,IAAqD,EAA/D;AACA,gBAAKrV,IAAL,GAAY6f,QAAQ,CAAC7f,IAAT,IAAiB,EAA7B;AACA,gBAAKqV,KAAL,GAAa,UAAGwK,QAAQ,CAACxK,KAAT,IAAkB,EAArB,EAA0B1J,WAA1B,EAAb;AAJ6B;AAK9B;AAVD;;;;;;AAYA;;;+BAGW;AAAA;;AACT,cAAI,KAAKwU,QAAT,EAAmB;AACjB,gBAAMC,IAAI,GAAG,KAAKC,MAAL,EAAb;AACA,mBAAO,IAAIC,OAAJ,CAAY,UAACC,OAAD,EAAUC,MAAV,EAAqB;AACtC,kBAAMC,OAAO,GAAG,OAAI,CAACvK,EAAL,GACZ,OAAI,CAACiK,QAAL,CAAcO,MAAd,CAAqB,OAAI,CAACxK,EAA1B,EAA8BkK,IAA9B,CADY,GAEZ,OAAI,CAACD,QAAL,CAAc7Y,GAAd,CAAkB8Y,IAAlB,CAFJ;AAGAK,qBAAO,CAACE,IAAR,CACE,UAACvb,CAAD,EAAO;AACL,uBAAI,CAAC0a,aAAL,CAAmB1N,IAAnB,CAAwB;AAAElJ,sBAAI,EAAE,YAAR;AAAsB0X,0BAAQ,EAAExb;AAAhC,iBAAxB;;AACAmb,uBAAO,CAACnb,CAAD,CAAP;AACD,eAJH,EAKE,UAACqW,CAAD;AAAA,uBAAO+E,MAAM,CAAC/E,CAAD,CAAb;AAAA,eALF;AAOD,aAXM,CAAP;AAYD,WAdD,MAcO;AACL6E,mBAAO,CAACE,MAAR,CAAe,+BAAf;AACD;AACF;AAED;;;;;;kCAGa;AACX,cAAI,KAAKtK,EAAT,EAAa;AACX,mBAAO,KAAKiK,QAAL,WAAqB,KAAKjK,EAA1B,CAAP;AACD;AACF;AAED;;;;;;;;gCAKe2K,S,EAAmBC,U,EAAmB;AACnD,cAAI,KAAK5K,EAAT,EAAa;AACX,mBAAO,KAAKiK,QAAL,CAAcY,IAAd,CAAmB,KAAK7K,EAAxB,EAA4B2K,SAA5B,EAAuCC,UAAvC,CAAP;AACD;AACF;AAED;;;;;;iCAGa;AACX,cAAME,GAAG,qBAAa,IAAb,CAAT,CADW,CAEX;;AACA,iBAAOA,GAAG,CAACb,QAAX;AACA,iBAAOa,GAAG,CAACC,QAAX;AACA,iBAAOD,GAAG,CAAClB,aAAX;AACA,iBAAOkB,GAAG,CAAChB,MAAX,CANW,CAOX;;AACA,iBAAOgB,GAAG,CAAC1hB,OAAX;AACA,iBAAO0hB,GAAG,CAACzhB,UAAX;AACA,iBAAOyhB,GAAG,CAACxhB,cAAX;AACA,iBAAOwhB,GAAG,CAACf,aAAX;AACA,iBAAOe,GAAG,CAACvhB,YAAX,CAZW,CAaX;;AACA,cAAMoK,IAAI,GAAGoH,MAAM,CAACpH,IAAP,CAAYmX,GAAZ,CAAb;;AACA,mCAAkBnX,IAAlB,2BAAwB;AAAnB,gBAAMlK,GAAG,YAAT;;AACH,gBAAIA,GAAG,CAAC,CAAD,CAAH,KAAW,GAAf,EAAoB;AAClB,kBAAMuhB,OAAO,GAAG,KAAKjB,aAAL,CAAmBtgB,GAAG,CAAC2R,SAAJ,CAAc,CAAd,CAAnB,KAAwC3R,GAAG,CAAC2R,SAAJ,CAAc,CAAd,CAAxD;AACA0P,iBAAG,CAACE,OAAD,CAAH,GAAeF,GAAG,CAACrhB,GAAD,CAAlB;AACA,qBAAOqhB,GAAG,CAACrhB,GAAD,CAAV;AACD,aAJD,MAIO,IAAIqhB,GAAG,CAACrhB,GAAD,CAAH,KAAauG,SAAjB,EAA4B;AACjC,qBAAO8a,GAAG,CAACrhB,GAAD,CAAV;AACD;AACF;;AACD,iBAAOqhB,GAAP;AACD;AAED;;;;;;gCAGY;AACV,iBAAO,IAAIpB,aAAJ,CAAkB,IAAlB,CAAP;AACD;AAED;;;;;;oCAGgB;AACd,iBAAO,IAAIA,aAAJ,CAAkB,MAAD,OAAC,CAAD,kBAAM,IAAN,CAAC,EAAS;AAAE1J,cAAE,EAAE,IAAN;AAAYb,iBAAK,EAAE;AAAnB,WAAT,CAAlB,CAAP;AACD;;;4BAhGqB;AACpB,iBAAO,wBAAA8L,cAAA,CAAeC,UAAf,CAA0BxB,aAA1B,CAAP;AACD;;;;MAjBgC,OAAAvgB,S;;AAAnC;;;;;;;;;;;;;;;;;;;;;;;;AClBA;AAAA;AAAA;;AAGA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;QAOagiB,c;;;;;AAyBX,8BAAsBnG,SAAtB,EACsBoG,eADtB,EACwD;AAAA;;AAAA;;AACtD;AAFoB,gBAAApG,SAAA,GAAAA,SAAA;AACA,gBAAAoG,eAAA,GAAAA,eAAA;AAnBtB;;AACU,gBAAAjG,SAAA,GAAoE,EAApE;AACV;;AACU,gBAAAC,UAAA,GAAiD,EAAjD;AACV;;AACU,gBAAAiG,YAAA,GAAmD,EAAnD;AACV;;AACU,gBAAAC,SAAA,GAA6C,EAA7C;AACV;;AACU,gBAAAC,QAAA,GAAoC,UAACrV,CAAD,EAAIC,CAAJ;AAAA,iBAC5CD,CAAC,KAAKC,CAAN,IAAYD,CAAS,CAAC8J,EAAV,KAAkB7J,CAAS,CAAC6J,EADI;AAAA,SAApC;AAEV;;;AACU,gBAAAwL,YAAA,GAAkC,UAACtV,CAAD;AAAA,iBAAO,CAAC,CAACA,CAAT;AAAA,SAAlC;;AASR,gBAAKuV,KAAL,GAAa,MAAb;AACA,gBAAKC,UAAL,GAAkB,MAAlB;;AACA,gBAAKhe,GAAL,CAAS,MAAT,EAAiB,EAAjB;;AAJsD;AAKvD;AAVD;;;;;;AAYA;;;wCAGwBie,S,EAAoB;AACxC;AACA;AACA,cAAI,KAAKP,eAAL,CAAqBQ,SAAzB,EAAoC;AAChC,mBAAO,MAAP,OAAO,CAAP,kBAAYD,SAAZ,CAAO,EAAc;AAAEC,uBAAS,EAAE;AAAb,aAAd,CAAP;AACH;;AACD,iBAAOD,SAAP;AACH;AAED;;;;;;+BAGc;AAAA;;AACZ,eAAK9C,IAAL,GAAY4B,IAAZ,CACE,UAAClF,CAAD;AAAA,mBAAO,OAAI,CAAChc,YAAL,CAAkB2S,IAAlB,CAAuB,IAAvB,CAAP;AAAA,WADF,EAEE,UAAC2P,GAAD;AAAA,mBAAS,OAAI,CAACnf,OAAL,CAAa,MAAb,EAAqB;AAAA,qBAAM,OAAI,CAAC6Z,IAAL,EAAN;AAAA,aAArB,EAAwC,IAAxC,CAAT;AAAA,WAFF;AAID;AAED;;;;;;;gCAIsC;AAAA,cAAzBuF,MAAyB,uEAAP,KAAO;AACpC,cAAMC,QAAQ,GAAGD,MAAM,GACnB,KAAK9G,SAAL,CAAesE,IAAf,CAAoBC,YADD,GAEnB,YAFJ;AAGA,2BAAUwC,QAAV,cAAsB,KAAKL,UAA3B;AACD;AAED;;;;;AAKA;;;;4BAIoB5hB,I,EAAY;AAC9B,cAAI,CAAC,KAAKsb,UAAL,CAAgBtb,IAAhB,CAAL,EAA4B;AAC1B,iBAAK4D,GAAL,CAAY5D,IAAZ,EAAkB,IAAlB;AACD;;AACD,iBAAQ,KAAKqb,SAAL,CAAerb,IAAf,EAA4CS,QAA5C,EAAR;AACD;AAED;;;;;;;;+BAKuBT,I,EAAY;AACjC,cAAI,CAAC,KAAKsb,UAAL,CAAgBtb,IAAhB,CAAL,EAA4B;AAC1B,iBAAK4D,GAAL,CAAY5D,IAAZ,EAAkB,IAAlB;AACD;;AACD,iBAAO,KAAKsb,UAAL,CAAgBtb,IAAhB,CAAP;AACD;AAED;;;;;;;;4BAKuBA,I,EAAcmH,K,EAAQ;AAC3C,cAAI,CAAC,KAAKkU,SAAL,CAAerb,IAAf,CAAL,EAA2B;AACzB,iBAAKqb,SAAL,CAAerb,IAAf,IAAuB,IAAI,OAAAN,eAAJ,CAAuByH,KAAvB,CAAvB;AACA,iBAAKmU,UAAL,CAAgBtb,IAAhB,IAAwB,KAAKqb,SAAL,CAAerb,IAAf,EAAqBuc,YAArB,EAAxB;AACD,WAHD,MAGO;AACL,iBAAKlB,SAAL,CAAerb,IAAf,EAAqBoS,IAArB,CAA0BjL,KAA1B;AACD;AACF;AAED;;;;;;;iCAI8D;AAAA,cAAhD+a,SAAgD,uEAAjB,KAAKR,YAAY;AACxD,cAAMvf,IAAI,GAAQ,KAAKwX,GAAL,CAAS,MAAT,CAAlB;AACA,iBAAOxX,IAAI,CAAC0I,MAAL,CAAYqX,SAAZ,CAAP;AACL;AAED;;;;;;;6BAIYhM,E,EAAU;AACpB,cAAM/T,IAAI,GAAG,KAAKwX,GAAL,CAAS,MAAT,CAAb;AACA,iBAAOxX,IAAI,CAACsF,IAAL,CAAU,UAACnF,CAAD,EAAO;AAAD;;AAAC,mBAAAA,CAAC,CAAC4T,EAAF,KAASA,EAAT,IAAgB,OAAA5T,CAAC,CAAC+S,KAAF,MAAO,IAAP,IAAO,aAAP,GAAO,MAAP,GAAO,GAAE1J,WAAF,EAAP,OAA2BuK,EAAE,SAAF,IAAAA,EAAE,WAAF,GAAE,MAAF,GAAAA,EAAE,CAAEvK,WAAJ,EAA3B,CAAhB;AAA6D,WAA9E,CAAP;AACD;AAED;;;;;;;gCAIuC;AAAA;;AAAA,cAA1BwW,YAA0B,uEAAF,EAAE;AACrC,cAAIH,MAAM,GAAG,KAAb;AACA,cAAII,KAAK,GAAG,IAAZ;AACA;;AACA,cAAID,YAAJ,EAAkB;AAChBH,kBAAM,GAAG,CAAC,CAACG,YAAY,CAACH,MAAxB;AACA,mBAAOG,YAAY,CAACH,MAApB;AACAI,iBAAK,GAAG,OAAOD,YAAY,CAACC,KAApB,KAA8B,SAA9B,GAA0CD,YAAY,CAACC,KAAb,IAAsB,IAAhE,GAAuE,IAA/E;AACA,mBAAOD,YAAY,CAACC,KAApB,KAA8B,SAA9B,IAA2C,OAAOD,YAAY,CAACC,KAA/D;AACD;;AACD,cAAI/K,KAAK,GAAG,gBAAAoD,aAAA,CAAc0H,YAAd,CAAZ;AACA,cAAMxiB,GAAG,mBAAY0X,KAAZ,CAAT;;AACA,cAAI,CAAC,KAAKmK,SAAL,CAAe7hB,GAAf,CAAL,EAA0B;AACxB;AACA;AACA;AACA;AACA,iBAAK6hB,SAAL,CAAe7hB,GAAf,IAAsB,IAAI2gB,OAAJ,CAAY,UAACC,OAAD,EAAUC,MAAV,EAAqB;AACrD,kBAAM7C,GAAG,aAAM,OAAI,CAACG,KAAL,CAAWkE,MAAX,CAAN,SAA2B3K,KAAK,GAAG,MAAMA,KAAT,GAAiB,EAAjD,CAAT;AACA,kBAAIgL,MAAM,GAAoB,EAA9B;;AACA,qBAAI,CAACC,IAAL,CAAU3I,GAAV,CAAcgE,GAAd,EAAmBzb,SAAnB,CACE,UAACkD,CAAD,EAAoC;AAClCid,sBAAM,GACJjd,CAAC,IAAIA,CAAC,YAAY4L,KAAlB,GACI5L,CAAC,CAAC0E,GAAF,CAAM,UAACxH,CAAD;AAAA,yBAAO,OAAI,CAACigB,OAAL,CAAajgB,CAAb,CAAP;AAAA,iBAAN,CADJ,GAEI8C,CAAC,IAAI,EAAEA,CAAC,YAAY4L,KAAf,CAAL,IAA8B5L,CAAC,CAACqG,OAAhC,GACCrG,CAAC,CAACqG,OADH,GAEArG,CAAC,IAAI,EAAEA,CAAC,YAAY4L,KAAf,CAAL,IAA8B,CAAC5L,CAAC,CAACqG,OAAjC,GACA,CAACrG,CAAD,CADA,GAEA,EAPN;AAQD,eAVH,EAWE,UAACkJ,CAAD,EAAO;AACLkS,sBAAM,CAAClS,CAAD,CAAN;AACA,uBAAI,CAACkT,SAAL,CAAe7hB,GAAf,IAAsB,IAAtB;AACD,eAdH,EAeE,YAAM;AACJ4gB,uBAAO,CAAC8B,MAAD,CAAP;;AACA,uBAAI,CAACzf,OAAL,CAAajD,GAAb,EAAkB;AAAA,yBAAO,OAAI,CAAC6hB,SAAL,CAAe7hB,GAAf,IAAsB,IAA7B;AAAA,iBAAlB,EAAsDyiB,KAAtD;AACD,eAlBH;AAoBD,aAvBqB,CAAtB;AAwBD;;AACD,iBAAO,KAAKZ,SAAL,CAAe7hB,GAAf,CAAP;AACD;AAED;;;;;;;;oCAK4C;AAAA;;AAAA,cAA1BwiB,YAA0B,uEAAF,EAAE;AAC1C,cAAIH,MAAM,GAAG,KAAb;AACA,cAAII,KAAK,GAAG,IAAZ;AACA;;AACA,cAAID,YAAJ,EAAkB;AAChBH,kBAAM,GAAG,CAAC,CAACG,YAAY,CAACH,MAAxB;AACA,mBAAOG,YAAY,CAACH,MAApB;AACD;;AACD,cAAI3K,KAAK,GAAG,gBAAAoD,aAAA,CAAc0H,YAAd,CAAZ;AACA,cAAMxiB,GAAG,mBAAY0X,KAAZ,CAAT;AACA,cAAMsG,GAAG,aAAM,KAAKG,KAAL,CAAWkE,MAAX,CAAN,SAA2B3K,KAAK,GAAG,MAAMA,KAAT,GAAiB,EAAjD,CAAT;AACA,iBAAO,KAAKiL,IAAL,CAAU3I,GAAV,CAAcgE,GAAd,EAAmB5I,IAAnB,CACL,YAAAjL,GAAA,CAAI,UAAC1E,CAAD;AAAA,mBAAqC,OAAI,CAACod,gBAAL,CAAsBpd,CAAtB,CAArC;AAAA,WAAJ,CADK,EAEL,YAAAqd,UAAA,CAAW,UAAIC,KAAJ,EAAgBL,MAAhB,EAA+B;AACxC1Y,mBAAO,CAACV,GAAR,CAAYyZ,KAAZ;AACA,mBAAO,OAAAC,EAAA,CAAGN,MAAH,CAAP;AACC,WAHH,CAFK,CAAP;AAME;AACH;AAGD;;;;;;;;yCAKkBjd,C,EAA8B;AAAA;;AAC9C,cAAIid,MAAM,GACNjd,CAAC,IAAIA,CAAC,YAAY4L,KAAlB,GACI5L,CAAC,CAAC0E,GAAF,CAAM,UAACxH,CAAD;AAAA,mBAAO,OAAI,CAACigB,OAAL,CAAajgB,CAAb,CAAP;AAAA,WAAN,CADJ,GAEI8C,CAAC,IAAI,EAAEA,CAAC,YAAY4L,KAAf,CAAL,IAA8B5L,CAAC,CAACqG,OAAhC,GACCrG,CAAC,CAACqG,OADH,GAEArG,CAAC,IAAI,EAAEA,CAAC,YAAY4L,KAAf,CAAL,IAA8B,CAAC5L,CAAC,CAACqG,OAAjC,GACA,CAACrG,CAAD,CADA,GAEA,EAPR;AAQA,iBAAOid,MAAP;AACD;AAED;;;;;;;;0CAKiD;AAAA,cAA1BF,YAA0B,uEAAF,EAAE;AAC/C,cAAIH,MAAM,GAAG,KAAb;AACA,cAAII,KAAK,GAAG,IAAZ;AACA;;AACA,cAAID,YAAJ,EAAkB;AAChBH,kBAAM,GAAG,CAAC,CAACG,YAAY,CAACH,MAAxB;AACA,mBAAOG,YAAY,CAACH,MAApB;AACD;;AACD,cAAI3K,KAAK,GAAG,gBAAAoD,aAAA,CAAc0H,YAAd,CAAZ;AACA,cAAMxiB,GAAG,mBAAY0X,KAAZ,CAAT;AACA,cAAMsG,GAAG,aAAM,KAAKG,KAAL,CAAWkE,MAAX,CAAN,SAA2B3K,KAAK,GAAG,MAAMA,KAAT,GAAiB,EAAjD,CAAT;AACA,iBAAO,KAAKiL,IAAL,CAAU3I,GAAV,CAAcgE,GAAd,CAAP;AACD;AAED;;;;;;;;6BAKYzH,E,EAAsC;AAAA;;AAAA,cAA1BiM,YAA0B,uEAAF,EAAE;AAChD,cAAIH,MAAM,GAAG,KAAb;AACA;;AACA,cAAIG,YAAJ,EAAkB;AAChBH,kBAAM,GAAG,CAAC,CAACG,YAAY,CAACH,MAAxB;AACA,mBAAOG,YAAY,CAACH,MAApB;AACD;;AACD,cAAM3K,KAAK,GAAG,gBAAAoD,aAAA,CAAc0H,YAAd,CAAd;AACA,cAAMxiB,GAAG,kBAAWuW,EAAX,cAAiBmB,KAAjB,CAAT;AACA;;AACA,cAAI,CAAC,KAAKmK,SAAL,CAAe7hB,GAAf,CAAL,EAA0B;AACxB,iBAAK6hB,SAAL,CAAe7hB,GAAf,IAAsB,IAAI2gB,OAAJ,CAAe,UAACC,OAAD,EAAUC,MAAV,EAAqB;AACxD,kBAAM7C,GAAG,aAAM,OAAI,CAACG,KAAL,CAAWkE,MAAX,CAAN,cAA4B9L,EAA5B,SAAiCmB,KAAK,GAAG,MAAMA,KAAT,GAAiB,EAAvD,CAAT;AACA,kBAAIgL,MAAM,GAAM,IAAhB;;AACA,qBAAI,CAACC,IAAL,CAAU3I,GAAV,CAAcgE,GAAd,EAAmBzb,SAAnB,CACE,UAACkD,CAAD;AAAA,uBAAQid,MAAM,GAAG,OAAI,CAACE,OAAL,CAAand,CAAb,CAAjB;AAAA,eADF,EAEE,UAACkJ,CAAD,EAAO;AACLkS,sBAAM,CAAClS,CAAD,CAAN;AACA,uBAAI,CAACkT,SAAL,CAAeoB,QAAf,GAA0B,IAA1B;AACD,eALH,EAME,YAAM;AACJrC,uBAAO,CAAC8B,MAAD,CAAP;;AACA,uBAAI,CAACzf,OAAL,CAAajD,GAAb,EAAkB;AAAA,yBAAO,OAAI,CAAC6hB,SAAL,CAAe7hB,GAAf,IAAsB,IAA7B;AAAA,iBAAlB,EAAsD,IAAtD;AACD,eATH;AAWD,aAdqB,CAAtB;AAeD;;AACD,iBAAO,KAAK6hB,SAAL,CAAe7hB,GAAf,CAAP;AACD;AAED;;;;;;;;4BAKWkiB,S,EAA8C;AAAA;;AAAA,cAA1BM,YAA0B,uEAAF,EAAE;;AACvD;AACA,cAAI,CAAC,KAAKX,SAAL,CAAeoB,QAApB,EAA8B;AAC5B,iBAAKpB,SAAL,CAAeoB,QAAf,GAA0B,IAAItC,OAAJ,CAAe,UAACC,OAAD,EAAUC,MAAV,EAAqB;AAC5D,kBAAMnJ,KAAK,GAAG,gBAAAoD,aAAA,CAAc0H,YAAd,CAAd;AACA,kBAAMxE,GAAG,aAAM,OAAI,CAACG,KAAL,CAAWqE,YAAY,CAACH,MAAxB,CAAN,SAAwC3K,KAAK,GAAG,MAAMA,KAAT,GAAiB,EAA9D,CAAT;AACA,kBAAIgL,MAAM,GAAM,IAAhB;;AACA,qBAAI,CAACC,IAAL,CAAUO,IAAV,CAAelF,GAAf,EAAoB,OAAI,CAACmF,eAAL,CAAqBjB,SAArB,CAApB,EAAqD3f,SAArD,CACE,UAACkD,CAAD;AAAA,uBAAQid,MAAM,GAAG,OAAI,CAACE,OAAL,CAAand,CAAb,CAAjB;AAAA,eADF,EAEE,UAACkJ,CAAD,EAAO;AACLkS,sBAAM,CAAClS,CAAD,CAAN;;AACA,uBAAI,CAACyU,cAAL,kBAA8B,OAAI,CAACpB,KAAL,CAAWhW,WAAX,EAA9B;;AACA,uBAAI,CAAC6V,SAAL,CAAeoB,QAAf,GAA0B,IAA1B;AACD,eANH,EAOE,YAAM;AACJrC,uBAAO,CAAC8B,MAAD,CAAP;;AACA,uBAAI,CAACze,GAAL,CAAS,MAAT,EAAiB,OAAI,CAACof,UAAL,CAAgB,OAAI,CAACrJ,GAAL,CAAS,MAAT,CAAhB,EAAkC,CAAC0I,MAAD,CAAlC,CAAjB;;AACA,uBAAI,CAACU,cAAL,kBAA8B,OAAI,CAACpB,KAAL,CAAWhW,WAAX,EAA9B;;AACA,uBAAI,CAAC6V,SAAL,CAAeoB,QAAf,GAA0B,IAA1B;AACD,eAZH;AAcD,aAlByB,CAA1B;AAmBD;;AACD,iBAAO,KAAKpB,SAAL,CAAeoB,QAAtB;AACD;;;6BAWC1M,E,EACA2K,S,EAE+B;AAAA;;AAAA,cAD/BgB,SAC+B,uEADV,EACU;AAAA,cAA/BoB,MAA+B,uEAAN,MAAM;AAE/B,cAAM5L,KAAK,GAAI,gBAAAoD,aAAA,CAAc,KAAKqI,eAAL,CAAqBjB,SAArB,CAAd,CAAf;AACA,cAAMliB,GAAG,kBAAWuW,EAAX,cAAiB2K,SAAjB,cAA8BxJ,KAA9B,CAAT;AACA;;AACA,cAAI,CAAC,KAAKmK,SAAL,CAAe7hB,GAAf,CAAL,EAA0B;AACxB,iBAAK6hB,SAAL,CAAe7hB,GAAf,IAAsB,IAAI2gB,OAAJ,CAAe,UAACC,OAAD,EAAUC,MAAV,EAAqB;AACxD,kBAAM0C,SAAS,GAAG,MAAH,OAAG,CAAH,kBAAQrB,SAAR,CAAG,EAAc;AAAE3L,kBAAE,EAAFA,EAAF;AAAMiN,qBAAK,EAAEtC;AAAb,eAAd,CAAlB;AACA,kBAAMlD,GAAG,aAAM,OAAI,CAACG,KAAL,CAAW,KAAX,CAAN,cAA2B5H,EAA3B,cAAiC2K,SAAjC,CAAT;AACA,kBAAIwB,MAAJ;AACA,kBAAMhM,OAAO,GACX4M,MAAM,KAAK,MAAX,GACI,OAAI,CAACX,IAAL,CAAUO,IAAV,CAAelF,GAAf,EAAoBuF,SAApB,CADJ,GAEI,OAAI,CAACZ,IAAL,CAAU3I,GAAV,WAAiBgE,GAAjB,SAAuBtG,KAAK,GAAG,MAAMA,KAAT,GAAiB,EAA7C,EAHN;AAIAhB,qBAAO,CAACnU,SAAR,CACE,UAACkD,CAAD;AAAA,uBAAQid,MAAM,GAAGjd,CAAjB;AAAA,eADF,EAEE,UAACkJ,CAAD,EAAO;AACLkS,sBAAM,CAAClS,CAAD,CAAN;;AACA,uBAAI,CAACyU,cAAL,WACK,OAAI,CAACpB,KAAL,CAAWhW,WAAX,EADL,mBACsCkV,SADtC,cAEE3K,EAFF;;AAIA,uBAAO,OAAI,CAACsL,SAAL,CAAe7hB,GAAf,CAAP;AACD,eATH,EAUE,YAAM;AACJ4gB,uBAAO,CAAC8B,MAAD,CAAP;;AACA,uBAAI,CAACU,cAAL,WACK,OAAI,CAACpB,KAAL,CAAWhW,WAAX,EADL,mBACsCkV,SADtC,eAEE3K,EAFF;;AAIA,uBAAI,CAACtT,OAAL,CAAajD,GAAb,EAAkB;AAAA,yBAAM,OAAO,OAAI,CAAC6hB,SAAL,CAAe7hB,GAAf,CAAb;AAAA,iBAAlB,EAAoD,IAApD;AACD,eAjBH;AAmBD,aA3BqB,CAAtB;AA4BD;;AACD,iBAAO,KAAK6hB,SAAL,CAAe7hB,GAAf,CAAP;AACD;AAGD;;;;;;;;;;;iCASEuW,E,EACA2K,S,EAE+B;AAAA,cAD/BgB,SAC+B,uEADV,EACU;AAAA,cAA/BoB,MAA+B,uEAAN,MAAM;AAC/B,cAAM5L,KAAK,GAAK,gBAAAoD,aAAA,CAAc,KAAKqI,eAAL,CAAqBjB,SAArB,CAAd,CAAhB;AACA,cAAIG,MAAM,GAAG,KAAb;AACA,cAAII,KAAK,GAAG,IAAZ;AACA,cAAMc,SAAS,GAAG,MAAH,OAAG,CAAH,kBAAQrB,SAAR,CAAG,EAAc;AAAE3L,cAAE,EAAFA,EAAF;AAAMiN,iBAAK,EAAEtC;AAAb,WAAd,CAAlB;AACA,cAAMlD,GAAG,aAAM,KAAKG,KAAL,CAAW,KAAX,CAAN,cAA2B5H,EAA3B,cAAiC2K,SAAjC,CAAT;AACA,cAAIwB,MAAJ;AAEA,cAAMhM,OAAO,GAAG4M,MAAM,KAAK,MAAX,GACZ,KAAKX,IAAL,CAAUO,IAAV,CAAelF,GAAf,EAAoBuF,SAApB,CADY,GAEZ,KAAKZ,IAAL,CAAU3I,GAAV,WAAiBgE,GAAjB,SAAuBtG,KAAK,GAAG,MAAMA,KAAT,GAAiB,EAA7C,EAFJ;AAIE,iBAAOhB,OAAP;AACH;AAGD;;;;;;;;;+BAMcH,E,EAAY2L,S,EAA8C;AAAA;;AAAA,cAA1BM,YAA0B,uEAAF,EAAE;AACtE,cAAMxiB,GAAG,oBAAauW,EAAb,CAAT;AACA;;AACA,cAAI,CAAC,KAAKsL,SAAL,CAAe7hB,GAAf,CAAL,EAA0B;AACxB,iBAAK6hB,SAAL,CAAe7hB,GAAf,IAAsB,IAAI2gB,OAAJ,CAAe,UAACC,OAAD,EAAUC,MAAV,EAAqB;AACxD,kBAAMnJ,KAAK,GAAG,gBAAAoD,aAAA,CAAc,OAAI,CAACqI,eAAL,CAAqBX,YAArB,CAAd,CAAd;AACA,kBAAMxE,GAAG,aAAM,OAAI,CAACG,KAAL,CAAWqE,YAAY,CAACH,MAAxB,CAAN,cAAyC9L,EAAzC,SAA8CmB,KAAK,GAAG,MAAMA,KAAT,GAAiB,EAApE,CAAT;AACA,kBAAIgL,MAAM,GAAM,IAAhB;;AACA,qBAAI,CAACC,IAAL,CAAUc,GAAV,CAAczF,GAAd,EAAmB,OAAI,CAACmF,eAAL,CAAqBjB,SAArB,CAAnB,EAAoD3f,SAApD,CACE,UAACkD,CAAD;AAAA,uBAAQid,MAAM,GAAG,OAAI,CAACE,OAAL,CAAand,CAAb,CAAjB;AAAA,eADF,EAEE,UAACkJ,CAAD,EAAO;AACLkS,sBAAM,CAAClS,CAAD,CAAN;;AACA,uBAAI,CAACyU,cAAL,kBAA8B,OAAI,CAACpB,KAAL,CAAWhW,WAAX,EAA9B,cAAiEuK,EAAjE;;AACA,uBAAI,CAACsL,SAAL,CAAe7hB,GAAf,IAAsB,IAAtB;AACD,eANH,EAOE,YAAM;AACJ4gB,uBAAO,CAAC8B,MAAD,CAAP;;AACA,uBAAI,CAACze,GAAL,CACE,MADF,EAEE,OAAI,CAACof,UAAL,CAAgB,OAAI,CAACK,UAAL,CAAgB,OAAI,CAAC1J,GAAL,CAAS,MAAT,CAAhB,EAAkC;AAAEzD,oBAAE,EAAFA;AAAF,iBAAlC,CAAhB,EAAkE,CAChEmM,MADgE,CAAlE,CAFF;;AAMA,uBAAI,CAACU,cAAL,kBAA8B,OAAI,CAACpB,KAAL,CAAWhW,WAAX,EAA9B,eAAkEuK,EAAlE;;AACA,uBAAI,CAACsL,SAAL,CAAe7hB,GAAf,IAAsB,IAAtB;AACD,eAjBH;AAmBD,aAvBqB,CAAtB;AAwBD;;AACD,iBAAO,KAAK6hB,SAAL,CAAe7hB,GAAf,CAAP;AACD;AAGD;;;;;;;;;;mCAOmBuW,E,EAAY2L,S,EAAwF;AAAA;;AAAA,cAApEyB,uBAAoE,uEAAjC,KAAiC;AAAA,cAA1BnB,YAA0B,uEAAF,EAAE;AACrH,cAAM9K,KAAK,GAAGiM,uBAAuB,GAAG,gBAAA7I,aAAA,CAAc,KAAKqI,eAAL,CAAqBX,YAArB,CAAd,CAAH,GAAuD,KAA5F;AACA,cAAMxE,GAAG,aAAM,KAAKG,KAAL,CAAWqE,YAAY,CAACH,MAAxB,CAAN,cAAyC9L,EAAzC,SAA8CmB,KAAK,GAAG,MAAMA,KAAT,GAAiB,EAApE,CAAT;AACA,cAAMlH,IAAI,GAAGmT,uBAAuB,GAAG,KAAKR,eAAL,CAAqBjB,SAArB,CAAH,GAAqCA,SAAzE;AAEA,iBAAO,KAAKS,IAAL,CAAUc,GAAV,CAAczF,GAAd,EAAmBxN,IAAnB,EACJ4E,IADI,CAED,YAAAjL,GAAA,CAAI,UAAC1E,CAAD;AAAA,mBAAqC,OAAI,CAACod,gBAAL,CAAsBpd,CAAtB,CAArC;AAAA,WAAJ,CAFC,EAIH,YAAAqd,UAAA,CAAW,UAAIC,KAAJ,EAAgBL,MAAhB,EAA+B;AACxC1Y,mBAAO,CAACV,GAAR,CAAYyZ,KAAZ;;AACA,mBAAI,CAACK,cAAL,kBAA8B,OAAI,CAACpB,KAAL,CAAWhW,WAAX,EAA9B,cAAiEuK,EAAjE;;AACA,mBAAO,OAAAyM,EAAA,CAAGD,KAAH,CAAP;AACD,WAJD,CAJG,CAAP;AAWD;AAED;;;;;;;;;0CAM0Ba,W,EAAqB1B,S,EAAwF;AAAA,cAApEyB,uBAAoE,uEAAjC,KAAiC;AAAA,cAA1BnB,YAA0B,uEAAF,EAAE;AACrI,cAAM9K,KAAK,GAAGiM,uBAAuB,GAAG,gBAAA7I,aAAA,CAAc,KAAKqI,eAAL,CAAqBX,YAArB,CAAd,CAAH,GAAuD,KAA5F;AACA,cAAMxE,GAAG,aAAM,KAAKG,KAAL,CAAWqE,YAAY,CAACH,MAAxB,CAAN,cAAyCuB,WAAzC,SAAuDlM,KAAK,GAAG,MAAMA,KAAT,GAAiB,EAA7E,CAAT;AACA,cAAMlH,IAAI,GAAGmT,uBAAuB,GAAG,KAAKR,eAAL,CAAqBjB,SAArB,CAAH,GAAqCA,SAAzE;AAEA,cAAM2B,KAAK,GAAGC,cAAc,CAACtd,MAAf,GAAwBqG,IAAI,CAACC,KAAL,CAAWgX,cAAc,CAACtF,OAAf,CAAuB,cAAvB,CAAX,EAAmDuF,YAA3E,GAA0F,EAAxG;AAEA,cAAMC,OAAO,GAAG,IAAI,OAAAC,WAAJ,CAAgB;AAC9B,8CAA2BJ,KAA3B;AAD8B,WAAhB,CAAhB;AAIF,cAAMK,cAAc,GAAG;AAAEF,mBAAO,EAAEA;AAAX,WAAvB,CAXuI,CAarI;AACA;AACA;;AAEA,iBAAO,KAAKrB,IAAL,CAAUO,IAAV,CAAelF,GAAf,EAAoBxN,IAApB,CAAP;AAED;AAED;;;;;;;gCAIc+F,E,EAA2B;AAAA;;AAAA,cAAf4N,CAAe,uEAAF,EAAE;AACvC,cAAMnkB,GAAG,oBAAauW,EAAb,CAAT;AACA;;AACA,cAAI,CAAC,KAAKsL,SAAL,CAAe7hB,GAAf,CAAL,EAA0B;AACxB,iBAAK6hB,SAAL,CAAe7hB,GAAf,IAAsB,IAAI2gB,OAAJ,CAAkB,UAACC,OAAD,EAAUC,MAAV,EAAqB;AAC3D,kBAAMnJ,KAAK,GAAG,gBAAAoD,aAAA,CAAcqJ,CAAd,CAAd;AACA,kBAAMnG,GAAG,aAAM,OAAI,CAACG,KAAL,EAAN,cAAsB5H,EAAtB,SAA2BmB,KAAK,GAAG,MAAMA,KAAT,GAAiB,EAAjD,CAAT;;AACA,qBAAI,CAACiL,IAAL,WAAiB3E,GAAjB,EAAsBzb,SAAtB,CACE,UAACuZ,CAAD;AAAA,uBAAO,IAAP;AAAA,eADF,EAEE,UAACnN,CAAD,EAAO;AACLkS,sBAAM,CAAClS,CAAD,CAAN;AACA,uBAAI,CAACkT,SAAL,CAAe7hB,GAAf,IAAsB,IAAtB;AACD,eALH,EAME,YAAM;AACJ,uBAAI,CAACiE,GAAL,CAAS,MAAT,EAAiB,OAAI,CAACyf,UAAL,CAAgB,OAAI,CAAC1J,GAAL,CAAS,MAAT,CAAhB,EAAkC;AAAEzD,oBAAE,EAAFA;AAAF,iBAAlC,CAAjB;;AACA,uBAAI,CAACsL,SAAL,CAAe7hB,GAAf,IAAsB,IAAtB;AACA4gB,uBAAO;AACR,eAVH;AAYD,aAfqB,CAAtB;AAgBD;;AACD,iBAAO,KAAKiB,SAAL,CAAe7hB,GAAf,CAAP;AACD;AAED;;;;;;+BAGoB;;;;;;;;;;;;AACnB;AAED;;;;;;;uCAIyBuV,M,EAAgB6O,K,EAAgB,CACvD;AACA;AACA;AACD;AAED;;;;;;;gCAIkBC,Q,EAAiB;AACjC,iBAAOA,QAAP;AACD;AAED;;;;;;;;;mCAOEC,Q,EACA9hB,I,EACkD;AAAA,cAAlD+hB,SAAkD,uEAAb,KAAKzC,QAAQ;;AAElD;AACA,cAAI,CAACtf,IAAD,IAASA,IAAI,CAACgE,MAAL,KAAgB,CAA7B,EAAgC;AAC9B,mBAAO8d,QAAP;AACD;;AACD,cAAME,QAAQ,GAAQ,EAAtB;AACA,cAAMC,UAAU,gCAAOjiB,IAAP,sBAAgB8hB,QAAhB,EAAhB;AACA;;AACA,cAAI,CAACC,SAAL,EAAgB;AACdA,qBAAS,GAAG,KAAKzC,QAAjB;AACD;;AAXiD,sDAY/B2C,UAZ+B;AAAA;;AAAA;AAAA;AAAA,kBAYvCzX,IAZuC;AAahD,kBAAM8M,KAAK,GAAG0K,QAAQ,CAAC1c,IAAT,CAAc,UAACnF,CAAD;AAAA,uBAAO4hB,SAAS,CAAC5hB,CAAD,EAAIqK,IAAJ,CAAhB;AAAA,eAAd,CAAd;AACA;;AACA,kBAAI,CAAC8M,KAAL,EAAY;AACV0K,wBAAQ,CAACrY,IAAT,CAAca,IAAd;AACD;AAjB+C;;AAYlD,mEAA+B;AAAA;AAM9B;AAlBiD;AAAA;AAAA;AAAA;AAAA;;AAmBlD,iBAAOwX,QAAP;AACD;AAED;;;;;;;;;mCAMqBhiB,I,EAAWwK,I,EAASuX,S,EAAqC;AAC5E,cAAMC,QAAQ,GAAG,EAAjB;AACA;;AACA,cAAI,CAACD,SAAL,EAAgB;AACdA,qBAAS,GAAG,KAAKzC,QAAjB;AACD;;AACDtf,cAAI,CAACE,OAAL,CAAa,UAACC,CAAD;AAAA,mBAAQ4hB,SAAS,CAACvX,IAAD,EAAOrK,CAAP,CAAT,GAAqB,IAArB,GAA4B6hB,QAAQ,CAACrY,IAAT,CAAcxJ,CAAd,CAApC;AAAA,WAAb;AACA,iBAAO6hB,QAAP;AACD;;;4BApiBoB;AACnB,iBAAO,KAAKjJ,SAAL,CAAeoH,IAAtB;AACD;;;4BA2CsB;AACrB,iBAAO,KAAKV,UAAZ;AACD;;;;MArE+D,OAAAviB,S;;AAAlE;;;;;;;;;;;;;;;;;;;;ACdA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAGa,YAAAglB,8BAAA,GAAiC,UAACC,OAAD,EAA4B;AACtE,cAAQA,OAAR;AACI,aAAK,cAAAC,aAAA,CAAcC,eAAnB;AACI,iBAAO,uBAAP;;AACJ,aAAK,cAAAD,aAAA,CAAcE,eAAnB;AACI,iBAAO,kBAAP;;AACJ,aAAK,cAAAF,aAAA,CAAcG,sBAAnB;AACI,iBAAO,0BAAP;;AACJ,aAAK,cAAAH,aAAA,CAAcI,SAAnB;AACI,iBAAO,YAAP;;AACJ,aAAK,cAAAJ,aAAA,CAAcK,UAAnB;AACI,iBAAO,YAAP;;AACJ,aAAK,cAAAL,aAAA,CAAcM,oBAAnB;AACI,iBAAO,YAAP;;AACJ,aAAK,cAAAN,aAAA,CAAcO,cAAnB;AACI,iBAAO,YAAP;;AACJ,aAAK,cAAAP,aAAA,CAAcQ,QAAnB;AACI,iBAAO,MAAP;;AACJ,aAAK,cAAAR,aAAA,CAAcS,aAAnB;AACI,iBAAO,SAAP;;AACJ,aAAK,cAAAT,aAAA,CAAcU,UAAnB;AACI,iBAAO,aAAP;;AACJ,aAAK,cAAAV,aAAA,CAAcW,YAAnB;AACI,iBAAO,uCAAP;;AACJ,aAAK,cAAAX,aAAA,CAAcY,SAAnB;AACI,iBAAO,sBAAP;;AACJ,aAAK,cAAAZ,aAAA,CAAca,YAAnB;AACI,iBAAO,qBAAP;;AACJ,aAAK,cAAAb,aAAA,CAAcc,WAAnB;AACI,iBAAO,oBAAP;;AACJ,aAAK,cAAAd,aAAA,CAAce,YAAnB;AACI,iBAAO,qBAAP;;AACJ,aAAK,cAAAf,aAAA,CAAcgB,UAAnB;AACI,iBAAO,oBAAP;;AACJ,aAAK,cAAAhB,aAAA,CAAciB,aAAnB;AACI,iBAAO,0BAAP;;AACJ,aAAK,cAAAjB,aAAA,CAAckB,QAAnB;AACI,iBAAO,qBAAP;AACJ;;AACA;AACI,iBAAOnB,OAAP;AAvCR;AAyCH,KA1CY;;AA6CA,YAAAoB,iBAAA,GAAuC;AAChDve,WAAK,EAAE,cADyC;AAEhD+I,aAAO,EAAE,0DAFuC;AAGhDyV,kBAAY,EAAE;AAHkC,KAAvC;AAKA,YAAAC,kBAAA,GAA0C,CACnD,QAAAF,iBADmD,CAA1C;;AAIA,YAAAG,8BAAA,GAAiC,UAACja,CAAD,EAAyC;AACnF,UAAMsE,OAAO,GAAG,QAAAmU,8BAAA,CAA+BzY,CAA/B,CAAhB;AACA,aAAQ;AACJzE,aAAK,EAAEyE,CADH;AAEJsE,eAAO,EAAPA,OAFI;AAGJ;AACA;AACA;AACA;AACA;AACA;AACAyV,oBAAY,EAAEzV;AATV,OAAR;AAWH,KAbY;;AAeA,YAAA4V,4BAAA,GAAoD,CAC7D,cAAAvB,aAAA,CAAcC,eAD+C,EAE7D,cAAAD,aAAA,CAAcE,eAF+C,EAG7D,cAAAF,aAAA,CAAcG,sBAH+C,EAI7D,cAAAH,aAAA,CAAcI,SAJ+C,EAK7D,cAAAJ,aAAA,CAAcK,UAL+C,EAM7D,cAAAL,aAAA,CAAcM,oBAN+C,EAO/D/a,GAP+D,CAO3D,QAAA+b,8BAP2D,CAApD;AASA,YAAAE,+BAAA,GAAuD,CAChE,cAAAxB,aAAA,CAAcS,aADkD,EAEhE,cAAAT,aAAA,CAAcO,cAFkD,EAGhE,cAAAP,aAAA,CAAcQ,QAHkD,EAIhE,cAAAR,aAAA,CAAcU,UAJkD,EAKlEnb,GALkE,CAK9D,QAAA+b,8BAL8D,CAAvD;AAOA,YAAAG,+BAAA,GAAuD,CAChE,cAAAzB,aAAA,CAAcO,cADkD,EAEhE,cAAAP,aAAA,CAAcQ,QAFkD,EAGlEjb,GAHkE,CAG9D,QAAA+b,8BAH8D,CAAvD;AAKA,YAAAI,mBAAA,GAA2C,CACpD,cAAA1B,aAAA,CAAcW,YADsC,EAEpD,cAAAX,aAAA,CAAcY,SAFsC,EAGpD,cAAAZ,aAAA,CAAca,YAHsC,EAIpD,cAAAb,aAAA,CAAcc,WAJsC,EAKpD,cAAAd,aAAA,CAAce,YALsC,EAMpD,cAAAf,aAAA,CAAcgB,UANsC,EAOpD,cAAAhB,aAAA,CAAciB,aAPsC,EAQtD1b,GARsD,CAQlD,QAAA+b,8BARkD,CAA3C;AAUA,YAAAK,qBAAA,GAA6C,CACtD,cAAA3B,aAAA,CAAckB,QADwC,EAExD3b,GAFwD,CAEpD,QAAA+b,8BAFoD,CAA7C;AAIb;;;;AAGA,QAAYM,iBAAZ;;AAAA,eAAYA,iBAAZ,EAA6B;AACzB;;;AAGA;AAEA;;;;;AAIA;AAEA;;;;AAGA;AAEA;;;;AAGA;AAEA;;;;AAGA;AAEA;;;;AAGA;AACH,KA/BD,EAAYA,iBAAiB,GAAjB,QAAAA,iBAAA,aAAAA,iBAAA,GAAiB,EAAjB,CAAZ;AAwCA;;;;;;;;;;;AASa,YAAAC,4BAAA,GAA+B,UACxCC,WADwC,EAExCC,MAFwC,EAEX;AAC7BlO,cAHwC,EAMQ;AAAA,UAFhDW,SAEgD,uEAFxB,EAEwB;AAAA,UADhDwN,WACgD;AAAA,UAAhDC,UAAgD,uEAA1B,KAA0B;AAChD,UAAMC,WAAW,GAAYJ,WAAW,CAACK,IAAZ,CAAiB,UAAA9a,CAAC;AAAA,eAAIA,CAAC,CAACzE,KAAF,KAAY,QAAAue,iBAAA,CAAkBve,KAAlC;AAAA,OAAlB,CAA7B;AACA,UAAMwf,YAAY,GAAaN,WAAW,CAACK,IAAZ,CAAiB,UAAA9a,CAAC;AAAA,eAAIA,CAAC,CAACzE,KAAF,KAAY,cAAAod,aAAA,CAAckB,QAA9B;AAAA,OAAlB,CAA/B,CAFgD,CAGhD;;AACA,UAAMmB,cAAc,GAAGP,WAAW,CAACxb,MAAZ,CAAmB,UAAAA,MAAM;AAAA,eAAI,CAAC,CAAC,QAAA6a,iBAAA,CAAkBve,KAAnB,EAA0B,cAAAod,aAAA,CAAckB,QAAxC,EAAkD1H,QAAlD,CAA2DlT,MAAM,CAAC1D,KAAlE,CAAL;AAAA,OAAzB,CAAvB;AACA,UAAM0f,gBAAgB,GAAGD,cAAc,CAACzgB,MAAf,KAA0B,CAAnD,CALgD,CAOhD;AACA;;AACA,UAAM2gB,OAAO,GAA4B;AACrC9hB,gBAAQ,EAAEoT,UAAU,CAACpT,QADgB;AAErCuY,YAAI,EAAEgJ,WAF+B;AAGrC3hB,cAAM,EAAEwT,UAAU,CAACxT;AAHkB,OAAzC;AAKA,UAAImiB,UAAU,GAAG,CAAjB;AACA,UAAIC,UAAU,GAAG,EAAjB;AACA,UAAIC,sBAAsB,GAAG,CAA7B;AACA,UAAMC,SAAS,GAAyB,EAAxC,CAjBgD,CAkBhD;;AACA,UAAMC,cAAc,GAAGb,MAAM,SAAN,IAAAA,MAAM,WAAN,GAAM,MAAN,GAAAA,MAAM,CAAExc,GAAR,CAAY,UAAAsd,KAAK;AAAA,eAAIA,KAAK,YAAY,SAAAC,KAAjB,GAAyBD,KAAzB,GAAiC,IAAI,SAAAC,KAAJ,CAAUD,KAAV,CAArC;AAAA,OAAjB,EAAwEvc,MAAxE,CAA+E,UAAAyc,SAAS,EAAI;;;AAC/G,YAAMF,KAAK,GAAG,IAAI,SAAAC,KAAJ,CAAUC,SAAV,CAAd,CAD+G,CAC3E;;AACpC,YAAMC,QAAQ,GAAGxO,SAAS,CAACtR,IAAV,CAAe,UAAA4E,CAAC;AAAA,iBAAI+a,KAAK,CAACI,KAAN,CAAYzJ,QAAZ,CAAqB1R,CAAC,CAAC6J,EAAvB,CAAJ;AAAA,SAAhB,CAAjB;AACA,YAAMuR,KAAK,GAAG,kBAAAC,aAAA,CAAc;AACxBja,cAAI,EAAE,CAAF,KAAEqZ,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAEliB,MAAT,MAAe,IAAf,IAAe,aAAf,GAAe,MAAf,GAAe,GAAEgJ,EADC;AAExB5I,kBAAQ,EAAE8hB,OAAO,CAAC9hB,QAFM;AAGxB6X,cAAI,EAAEiK,OAAO,CAACvJ,IAHU;AAIxBkK,eAAK,EAAEF,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAEI,aAJO;AAKxBP,eAAK,EAALA;AALwB,SAAd,CAAd;AAOAJ,kBAAU,GAAGS,KAAK,CAACG,MAAnB;AACA,YAAIC,KAAK,GAAG,CAACJ,KAAK,CAACK,IAAnB;;AACA,YAAI,CAACD,KAAL,EAAY;AACRd,oBAAU;AACV,iBAAO,KAAP;AACH,SAf8G,CAkB/G;;;AACA,YAAIgB,cAAJ;AACA,YAAMC,uBAAuB,GAAG,CAC5B,YAD4B,EAE5B,cAF4B,EAG5B,SAH4B,EAI5B,aAJ4B,EAK5B,WAL4B,CAAhC;;AAQA,YAAIpB,cAAc,CAACzgB,MAAf,KAA0B,CAA9B,EAAiC;AAC7B4hB,wBAAc,GAAG,IAAjB;AACH,SAFD,MAEO,IAAGnB,cAAc,CAACqB,KAAf,CAAqB,UAAArc,CAAC;AAAA,iBAAIoc,uBAAuB,CAACjK,QAAxB,CAAiCnS,CAAC,CAACzE,KAAnC,CAAJ;AAAA,SAAtB,CAAH,EAAyE;AAAK;AACjF4gB,wBAAc,GAAGnB,cAAc,CAACF,IAAf,CAAoB,UAAA9a,CAAC;AAAA,mBAAIwb,KAAK,CAACc,aAAN,CAAoBnK,QAApB,CAA6BnS,CAAC,CAACzE,KAA/B,CAAJ;AAAA,WAArB,CAAjB;AACD,SAFI,MAEE;AAAK;AACV4gB,wBAAc,GAAGnB,cAAc,CAACqB,KAAf,CAAqB,UAAArc,CAAC;AAAA,mBAAIwb,KAAK,CAACc,aAAN,CAAoBnK,QAApB,CAA6BnS,CAAC,CAACzE,KAA/B,CAAJ;AAAA,WAAtB,CAAjB;AACD;;AAEH,YAAMghB,OAAO,GAAG1B,WAAW,GAAGW,KAAK,CAACgB,QAAT,GAAoB,IAA/C;AACA,YAAMC,WAAW,GAAG,OAAAjQ,UAAU,SAAV,IAAAA,UAAU,WAAV,GAAU,MAAV,GAAAA,UAAU,CAAEkQ,WAAZ,MAAuB,IAAvB,IAAuB,aAAvB,GAAuB,MAAvB,GAAuB,GAAEnhB,KAAzB,MAAmC,UAAnC,GACE,IADF,GAEE,OAAAigB,KAAK,SAAL,IAAAA,KAAK,WAAL,GAAK,MAAL,GAAAA,KAAK,CAAEmB,oBAAP,MAA2B,IAA3B,IAA2B,aAA3B,GAA2B,MAA3B,GAA2B,GAAEpiB,MAA7B,IACAihB,KAAK,CAACmB,oBAAN,MAA0B,MAAKnQ,UAAU,SAAV,IAAAA,UAAU,WAAV,GAAU,MAAV,GAAAA,UAAU,CAAEkQ,WAAjB,MAA4B,IAA5B,IAA4B,aAA5B,GAA4B,MAA5B,GAA4B,GAAEnhB,KAAxD,CADA,GAEA,IAJtB;AAKA0gB,aAAK,GAAGA,KAAK,IAAIQ,WAAT,KAAyBxB,gBAAgB,IAAIkB,cAA7C,KAAgEI,OAAxE;AACA,YAAIK,WAAW,GAAGjB,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAEkB,YAA5B;;AACA,YAAI,CAAArB,KAAK,SAAL,IAAAA,KAAK,WAAL,GAAK,MAAL,GAAAA,KAAK,CAAEqB,YAAP,MAAwB,KAA5B,EAAmC;AAC/BD,qBAAW,GAAG,KAAd;AACH,SA9C8G,CA+C/G;;;AACA,YAAI7B,YAAY,IAAI,CAAC6B,WAArB,EAAkC;AAC9BX,eAAK,GAAG,KAAR,CAD8B,CAE9B;AACH,SAnD8G,CAqD/G;;;AACA,YAAI,CAACE,cAAL,EAAqB;AACjBF,eAAK,GAAG,KAAR,CADiB,CAEjB;AACH;;AAED,YAAMa,MAAM,GAAG,oBAAAC,kBAAA,CACXvB,KAAK,CAACpT,QAAN,CAAe7N,MAAf,GAAwBihB,KAAK,CAACpT,QAAN,CAAelK,GAAf,CAAmB,UAAAuC,CAAC;AAAA,iBAAI,IAAI,gBAAAuc,OAAJ,CAAYvc,CAAZ,CAAJ;AAAA,SAApB,CAAxB,GAAkE+a,KAAK,CAAChK,QAAN,CAAepJ,QAAf,CAAwBlK,GAAxB,CAA4B,UAAAuC,CAAC;AAAA,iBAAI,IAAI,gBAAAuc,OAAJ,CAAYvc,CAAZ,CAAJ;AAAA,SAA7B,CADvD,EAEX+a,KAAK,CAACgB,QAAN,IAAkB,CAACX,KAAK,CAACK,IAFd,EAGX,CAACL,KAAK,CAACoB,YAHI,EAIXzQ,UAAU,CAACxT,MAJA,EAKXwiB,KALW,CAAf,CA3D+G,CAmE/G;;AACA,YAAIX,WAAW,IAAIoB,KAAnB,EAA0B;AACtBA,eAAK,GAAGa,MAAM,CAACA,MAAP,KAAkB;AAAL;AAArB;AACA,cAAI,CAACb,KAAL,EAAYle,OAAO,CAACmf,KAAR,CAAc,oBAAd;AAEf;AAGD;;;;;;;;AAMA,YAAG1Q,UAAU,CAAC2Q,YAAX,IAA2B,CAAC3B,KAAK,CAAC4B,oBAAlC,IAA0D,CAACxC,UAA9D,EAA0E;AACtEqB,eAAK,GAAG,KAAR;AACH;AACD;AAEA;;;AACA,YAAIA,KAAJ,EAAW;AACP,cAAGzP,UAAU,CAAC2Q,YAAX,IAA2B3B,KAAK,CAAC4B,oBAAjC,IAAyD5B,KAAK,CAAC4B,oBAAN,IAA6B5B,KAAK,CAAC6B,gBAA/F,EAAiH;AAC7G;AACA/B,qBAAS,CAACE,KAAK,CAAClR,EAAP,CAAT,GAAsB,CAACuR,KAAK,CAACoB,YAAP,GAAsB;AAAD;AAArB,cAAgD;AAAD;AAArE;AACH,WAHD,MAIC;AACG3B,qBAAS,CAACE,KAAK,CAAClR,EAAP,CAAT,GAAsBwS,MAAM,CAACA,MAA7B;AACH;AAEJ,SATD,MASO;AACHzB,gCAAsB;AACzB,SAlG8G,CAmG/G;;;AACA,eAAOY,KAAP;AACH,OArGsB,CAAvB;AAuGA,UAAMqB,mBAAmB,GAAGnQ,SAAS,CAAClO,MAAV,CACxB,UAAC4Q,CAAD,EAAM;AAAA;;AAAA,gBAAArD,UAAU,SAAV,IAAAA,UAAU,WAAV,GAAU,MAAV,GAAAA,UAAU,CAAEkF,QAAZ,MAAuBpX,SAAvB,KAAgC,MAAIkS,UAAU,SAAV,IAAAA,UAAU,WAAV,GAAU,MAAV,GAAAA,UAAU,CAAEkF,QAAhB,MAAwB,IAAxB,IAAwB,aAAxB,GAAwB,MAAxB,GAAwB,GAAEnX,MAA1D,KAAqEsV,CAAC,CAAC/B,IAAF,MAAM,kBAAKtB,UAAU,SAAV,IAAAA,UAAU,WAAV,GAAU,MAAV,GAAAA,UAAU,CAAEkF,QAAZ,CAAqB,CAArB,CAAL,MAA2B,IAA3B,IAA2B,aAA3B,GAA2B,MAA3B,GAA2B,GAAG6L,IAA9B,MAAkC,IAAlC,IAAkC,aAAlC,GAAkC,MAAlC,GAAkC,GAAE5B,QAApC,MAA4C,IAA5C,IAA4C,aAA5C,GAA4C,MAA5C,GAA4C,GAAE7N,IAApD,CAArE;AAA6H,OAD3G,KAEvB,EAFL;AAGA,UAAM0P,kBAAkB,GAAGF,mBAAmB,CAACre,MAApB,CAA2B,UAAA0c,QAAQ;AAAA,eAC1D,CAACnP,UAAU,CAACkF,QAAX,CAAoBoJ,IAApB,CAAyB,UAAA2C,YAAY,EAAG;AAAA;;AACrC,8BAAAA,YAAY,CAACF,IAAb,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAE5B,QAAnB,MAA2B,IAA3B,IAA2B,aAA3B,GAA2B,MAA3B,GAA2B,GAAErR,EAA7B,MAAoCqR,QAAQ,CAACrR,EAA7C;AAA+C,SADlD,CADyD;AAAA,OAAnC,CAA3B,CA7HgD,CAmIhD;;AACA,UAAI0R,MAAJ;AAAA,UAAY0B,cAAc,GAAGnD,iBAAiB,CAACoD,IAA/C,CApIgD,CAqIhD;;AACA,UAAI,CAAApC,cAAc,SAAd,IAAAA,cAAc,WAAd,GAAc,MAAd,GAAAA,cAAc,CAAEhhB,MAAhB,MAA2B,CAA/B,EAAkC;AAC9B,YAAI8gB,sBAAsB,GAAG,CAAzB,KAA+B,CAACJ,gBAAD,IAAqBF,YAApD,CAAJ,EAAuE;AACnEiB,gBAAM,GAAGzB,iBAAiB,CAACqD,OAA3B;AACH,SAFD,MAEO,IAAIzC,UAAU,GAAG,CAAjB,EAAoB;AACvBa,gBAAM,GAAGzB,iBAAiB,CAACsD,WAA3B;AACH,SAFM,MAEA,IAAGL,kBAAH,EAAsB;AACzBxB,gBAAM,GAAGzB,iBAAiB,CAACuD,uBAA3B;AACH,SAFM,MAGF;AACD9B,gBAAM,GAAGzB,iBAAiB,CAACvf,QAA3B;AACH;;AAED,YAAIogB,UAAU,KAAKb,iBAAiB,CAACsD,WAArC,EAAkD;AAC9CH,wBAAc,GAAGnD,iBAAiB,CAACsD,WAAnC;AACH;AACJ;;AAED,aAAO;AAAEnD,cAAM,EAAEa,cAAV;AAA0BS,cAAM,EAANA,MAA1B;AAAkCV,iBAAS,EAATA,SAAlC;AAA6CoC,sBAAc,EAAdA;AAA7C,OAAP;AACH,KA9JY;;;;;;;;;;;;;;;;;;;;;AC1Kb;AAAA;AAAA;;AAIsE;AAIzD,YAAAnR,oBAAA,GAAuB,QAAAjE,YAAA,CAAa,+BAAb,EAChC,QAAAC,KAAA,EADgC,CAAvB;AAGA,YAAAmE,oBAAA,GAAuB,QAAApE,YAAA,CAAa,+BAAb,CAAvB;AAEA,YAAAuE,gBAAA,GAAmB,QAAAvE,YAAA,CAAa,kCAAb,EAC5B,QAAAC,KAAA,EAD4B,CAAnB;AAGA,YAAAuE,gBAAA,GAAmB,QAAAxE,YAAA,CAAa,kCAAb,CAAnB;AAEA,YAAAqE,iBAAA,GAAoB,QAAArE,YAAA,CAAa,mCAAb,CAApB;;;;;;;;;;;;;;;;;;;ACZA,YAAAyV,wBAAA,GAA2B,EAA3B;AAEA,YAAAC,yBAAA,GAA4B;AACrCziB,WAAK,EAAE,UAD8B;AAErC+I,aAAO,EAAE;AAF4B,KAA5B;AAKA,YAAA2Z,oBAAA,GAAuB;AAChC1iB,WAAK,EAAE,UADyB;AAEhC+I,aAAO,EAAE;AAFuB,KAAvB;AAKA,YAAA4Z,kBAAA,GAA6C,CACtD,QAAAF,yBADsD,EAEtD;AACIziB,WAAK,EAAE,UADX;AAEI+I,aAAO,EAAE;AAFb,KAFsD,CAA7C;AAQA,YAAA6Z,qBAAA,GAAwB;AACjC5iB,WAAK,EAAE,GAD0B;AAEjC+I,aAAO,EAAE;AAFwB,KAAxB;AAKA,YAAA8Z,eAAA,GAA0C,CACnD;AACI7iB,WAAK,EAAE,GADX;AAEI+I,aAAO,EAAE;AAFb,KADmD,EAKnD,QAAA6Z,qBALmD,EAMnD;AACI5iB,WAAK,EAAE,GADX;AAEI+I,aAAO,EAAE;AAFb,KANmD,CAA1C;AAYA,YAAA+Z,oBAAA,gCACP,QAAAD,eADO,IAET;AACI7iB,WAAK,EAAE,GADX;AAEI+I,aAAO,EAAE;AAFb,KAFS;;AAQA,YAAAga,mBAAA,GAAsB,UAACC,QAAD,EAA8B;AAC7D,cAAQA,QAAR;AACI,aAAK,GAAL;AACI,iBAAO,CAAP;;AACJ,aAAK,GAAL;AACI,iBAAO,CAAP;;AACJ,aAAK,GAAL;AACI,iBAAO,EAAP;;AACJ,aAAK,GAAL;AACI,iBAAO,IAAP;AARR;AAUH,KAXY;;AAaA,YAAAC,sBAAA,GAAyB,UAACD,QAAD,EAA8B;AAChE,cAAQA,QAAR;AACI,aAAK,GAAL;AACI,iBAAO,CAAP;;AACJ,aAAK,GAAL;AACI,iBAAO,CAAP;;AACJ;AACI,iBAAO,IAAP;AANR;AAQH,KATY;AAoDb;;;;;AAGa,YAAAE,mBAAA,GAAsB,UAC/B7P,IAD+B,EAEZ;iBAAA,CACnB;;;AACA,UAAM8P,mBAAmB,GAAG9P,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAE8C,QAAN,CACvBzS,MADuB,CAChB,UAACkP,CAAD;AAAA,eAAOA,CAAC,CAACwQ,UAAT;AAAA,OADgB,EAEvBzgB,GAFuB,CAEnB,UAACiQ,CAAD;AAAA,eAAOA,CAAC,CAAC5S,KAAT;AAAA,OAFmB,EAGvBmG,IAHuB,CAGlB,GAHkB,CAA5B;AAIA,aAAO;AACH1I,cAAM,EAAE4V,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAE5V,MADX;AAEHI,gBAAQ,EAAEwV,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAExV,QAFb;AAGHwlB,iBAAS,EAAEF,mBAHR;AAIHG,gBAAQ,EAAE,QAAAP,mBAAA,CAAoB,CAAD,KAAC1P,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAE2P,QAAN,MAAc,IAAd,IAAc,aAAd,GAAc,MAAd,GAAc,GAAEhjB,KAApC,CAJP;AAKHujB,oBAAY,EAAE,QAAAN,sBAAA,CAAuB,CAAD,KAAC5P,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAE2P,QAAN,MAAc,IAAd,IAAc,aAAd,GAAc,MAAd,GAAc,GAAEhjB,KAAvC,CALX;AAOH4hB,oBAAY,EAAEvO,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEuO,YAPjB;AAQH4B,oBAAY,EAAEnQ,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEmQ,YARjB;AASHC,yBAAiB,EAAEpQ,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEoQ,iBATtB;AAUHC,2BAAmB,EAAErQ,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEqQ,mBAVxB;AAWHC,wBAAgB,EAAEtQ,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEsQ,gBAXrB;AAYHC,wBAAgB,EAAEvQ,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEuQ,gBAZrB;AAaHC,yBAAiB,EAAExQ,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEwQ,iBAbtB;AAcHC,6BAAqB,EAAEzQ,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEyQ,qBAd1B;AAeHC,uBAAe,EAAE1Q,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAE0Q,eAfpB;AAgBHriB,gBAAQ,EAAE2R,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAE3R,QAhBb;AAiBHlB,cAAM,EAAE6S,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAE7S,MAjBX;AAkBHoR,iBAAS,EAAEyB,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEzB,SAlBd;AAmBHqP,gBAAQ,EAAE5N,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAE4N,QAnBb;AAoBH+C,cAAM,EAAE3Q,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAE2Q;AApBX,OAAP;AAsBH,KA9BY;;;;;;;;;;;;;;;;;;;;;ACvHb;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAEA,QAAMC,GAAG,GAAG,UAAA1d,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAZ;;AAEa,YAAAwnB,sBAAA,GAAyB;AAAA,aAAyB;AAC3DjT,kBAAU,EAAE;AACRxT,gBAAM,EAAEwmB,GADA;AAERpmB,kBAAQ,EAAE,IAAI,oBAAA2kB,wBAFN;AAGRrM,kBAAQ,EAAE,EAHF;AAIRgL,qBAAW,EAAE,oBAAAsB,yBAJL;AAKRO,kBAAQ,EAAE,oBAAAJ;AALF,SAD+C;AAQ3D9R,yBAAiB,EAAE;AARwC,OAAzB;AAAA,KAAzB;;;;;;;;;;;;;;;;;;;;;ACVb;AAAA;AAAA;;AAIA;AAAA;AAAA;;AASA;AAAA;AAAA;;AAUA;AAAA;AAAA;;AAGA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAQA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAGa,YAAAqT,sBAAA,GACT,UAACtsB,KAAD;AAAA,aACKA,KAAa,CAACusB,WADnB;AAAA,KADS;;AAIA,YAAAC,gBAAA,GAAmB,QAAAvS,cAAA,CAAe,QAAAqS,sBAAf,EAAuC,UAAAtsB,KAAK,EAAI;iCAAA,CAC5E;;;AACA,UAAI,QAACA,KAAK,CAACoZ,UAAP,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAExT,MAAnB,CAAJ,EAA+B;AAC3B,eAAO5F,KAAK,CAACoZ,UAAb;AACH;;AAJ2E,iBAKlC,CAAH,KAAGpZ,KAAK,CAACoZ,UAAN,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAExT,MALgB;AAAA,UAKpEX,IALoE,QAKpEA,IALoE;AAAA,UAK9DwnB,WAL8D,QAK9DA,WAL8D;AAAA,UAKjDC,WALiD,QAKjDA,WALiD;;AAM5E,UAAMC,SAAS,GAAG,CAAH,WAAK3sB,KAAK,CAACoZ,UAAX,MAAqB,IAArB,IAAqB,aAArB,GAAqB,MAArB,GAAqB,GAAE0S,gBAApB,MAAoC,IAApC,IAAoC,aAApC,GAAoC,MAApC,GAAoC,GAAE7mB,IAAxD;AACA,UAAM6mB,gBAAgB,GAAGa,SAAS,GAAG;AACjCb,wBAAgB,EAAG,IAAI,UAAA3V,MAAJ,CAAW;AAAElR,cAAI,EAAE0nB,SAAS,CAAC7kB,OAAV,EAAR;AAA6B2kB,qBAAW,EAAXA,WAA7B;AAA0CC,qBAAW,EAAXA;AAA1C,SAAX;AADc,OAAH,GAE9B,EAFJ;AAIA,UAAMV,iBAAiB,GAAI,OAAAhsB,KAAK,CAACoZ,UAAN,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAE4S,iBAAlB,IAC1B;AACAA,yBAAiB,EAAE,CAAF,KAAEhsB,KAAK,CAACoZ,UAAN,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAE4S,iBAAF,CAAoBlhB,GAApB,CAAyB,UAAAgB,EAAE,EAAG;AAE/D;AACA;AACA,iBAAO,IAAI,UAAAqK,MAAJ,CAAW;AAAElR,gBAAI,EAAE,OAAO6G,EAAP,KAAc,QAAd,GAAyBA,EAAE,GAAG,IAA9B,GAAqCA,EAAE,CAAC7G,IAAH,CAAQ6C,OAAR,EAA7C;AAAgE2kB,uBAAW,EAAXA,WAAhE;AAA6EC,uBAAW,EAAXA;AAA7E,WAAX,CAAP;AACA,SALiC;AADnC,OAD0B,GAU1B,EAVD;AAaA,UAAME,uBAAuB,GAAK5sB,KAAK,CAACoZ,UAAN,CAAiBlD,MAAjB,KAA4B,mBAAA2W,YAAA,CAAaC,IAAzC,IAAiD9sB,KAAK,CAACoZ,UAAN,CAAiB2Q,YAAnE,GAEjC;AACA7S,UAAE,EAAElX,KAAK,CAACoZ,UAAN,CAAiBlC,EADrB;AAEAiV,cAAM,EAAEnsB,KAAK,CAACoZ,UAAN,CAAiB+S,MAFzB;AAGA/C,gBAAQ,EAAEppB,KAAK,CAACoZ,UAAN,CAAiBgQ;AAH3B,OAFiC,GAOhC,EAPD;AAYA,aAAO,MAAP,OAAO,CAAP,4DACOppB,KAAK,CAACoZ,UADb,GACuB;AACnBxT,cAAM,EAAE,IAAI,UAAAuQ,MAAJ,CAAW;AAAElR,cAAI,EAAEA,IAAI,CAAC6C,OAAL,EAAR;AAAwB2kB,qBAAW,EAAXA,WAAxB;AAAqCC,qBAAW,EAAXA;AAArC,SAAX;AADW,OADvB,GAGOZ,gBAHP,GAIOE,iBAJP,CAAO,EAKJY,uBALI,CAAP;AAOH,KA3C+B,CAAnB;AA6CA,YAAAG,iBAAA,GAAoB,QAAA9S,cAAA,CAAe,QAAAuS,gBAAf,EAC7B,UAACpL,IAAD;AAAA,aAAUA,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEkI,WAAhB;AAAA,KAD6B,CAApB;AAGA,YAAA0D,sBAAA,GAAyB,QAAA/S,cAAA,CAAe,QAAAuS,gBAAf,EAClC,UAACpL,IAAD;AAAA,aAAU,CAAC,CAAAA,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAE9C,QAAN,KAAkB,EAAnB,EAAuBzS,MAAvB,CAA8B,UAAAe,CAAC;AAAA,eAAI,CAACA,CAAC,CAACqgB,WAAP;AAAA,OAA/B,CAAV;AAAA,KADkC,CAAzB;AAGA,YAAAC,gBAAA,GAAmB,QAAAjT,cAAA,CAAe,QAAA8S,iBAAf,EAC5B,UAAC7iB,IAAD;AAAA,aAAU,CAAAA,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAE/B,KAAN,MAAgB,oBAAAyiB,yBAAA,CAA0BziB,KAApD;AAAA,KAD4B,CAAnB;AAGA,YAAAglB,iBAAA,GAAoB,QAAAlT,cAAA,CAAe,QAAAqS,sBAAf,EAC7B,UAACtsB,KAAD;AAAA,aAAWA,KAAK,CAACiZ,iBAAN,IAA2B,EAAtC;AAAA,KAD6B,CAApB;AAGb,QAAMmU,0BAA0B,GAAG,QAAAnT,cAAA,CAAe,gBAAAoT,iBAAf,EAC/B,gBAAAC,mBAAA,CAAoBpT,SAApB,CAA8BqT,KADC,CAAnC;AAGA,QAAMC,8BAA8B,GAAG,QAAAvT,cAAA,CAAe,gBAAAoT,iBAAf,EACnC,gBAAAI,sBAAA,CAAuBvT,SAAvB,CAAiCqT,KADE,CAAvC;AAGA,QAAMG,kCAAkC,GAAG,QAAAzT,cAAA,CAAe,gBAAAoT,iBAAf,EACvC,gBAAAM,uBAAA,CAAwBzT,SAAxB,CAAkCqT,KADK,CAA3C;AAEA,QAAMK,6BAA6B,GAAG,QAAA3T,cAAA,CAAe,gBAAAoT,iBAAf,EAClC,gBAAAQ,kBAAA,CAAmB3T,SAAnB,CAA6BqT,KADK,CAAtC;AAEA,QAAMO,0BAA0B,GAAG,QAAA7T,cAAA,CAAe,gBAAAoT,iBAAf,EAC/B,gBAAAU,eAAA,CAAgB7T,SAAhB,CAA0BqT,KADK,CAAnC;AAEA,QAAMS,8BAA8B,GAAG,QAAA/T,cAAA,CAAe,gBAAAoT,iBAAf,EACnC,gBAAAY,mBAAA,CAAoB/T,SAApB,CAA8BqT,KADK,CAAvC;AAGa,YAAAW,sCAAA,GAAyC,QAAAjU,cAAA,CAAe,mBAAAlF,oBAAf,EAC9C,mBAAAK,2BAAA,CAA4B8E,SAA5B,CAAsCqT,KADQ,CAAzC;AAEA,YAAAY,sCAAA,GAAyC,QAAAlU,cAAA,CAAe,mBAAAlF,oBAAf,EAClD,mBAAAO,2BAAA,CAA4B4E,SAA5B,CAAsCqT,KADY,CAAzC;AAEA,YAAAa,kCAAA,GAAqC,QAAAnU,cAAA,CAAe,mBAAAlF,oBAAf,EAC1C,mBAAAQ,uBAAA,CAAwB2E,SAAxB,CAAkCqT,KADQ,CAArC;AAEA,YAAAc,uCAAA,GAA0C,QAAApU,cAAA,CAAe,mBAAAlF,oBAAf,EAC/C,mBAAAS,4BAAA,CAA6B0E,SAA7B,CAAuCqT,KADQ,CAA1C;AAEA,YAAAe,iCAAA,GAAoC,QAAArU,cAAA,CAAe,mBAAAlF,oBAAf,EACzC,mBAAAU,sBAAA,CAAuByE,SAAvB,CAAiCqT,KADQ,CAApC;AAGb;;;;;;;AAMA,QAAMgB,qCAAqC,GAAG,SAAxCA,qCAAwC,CAC1C9hB,OAD0C,EAE1C4a,WAF0C,EAG1CjO,UAH0C,EAI1CW,SAJ0C,EAK1CwN,WAL0C,EAMoB;AAAA,UAA9DC,UAA8D,uEAAxC,KAAwC;AAC9D,UAAMhM,IAAI,GAAG/O,OAAO,CAAC0N,eAArB,CAD8D,CAG9D;;AACA,aAAO,CAACf,UAAD,GAAc3M,OAAO,CAAC+hB,MAAR,CAAe;AAChClH,cAAM,EAAE9L,IADwB;AAEhCoN,cAAM,EAAE,uBAAAzB,iBAAA,CAAkBoD,IAFM;AAGhCrC,iBAAS,EAAE;AAHqB,OAAf,CAAd,GAIFzb,OAAO,CAAC+hB,MAAR,CACD,uBAAApH,4BAAA,CAA6BC,WAA7B,EAA0C7L,IAA1C,EAAgDpC,UAAhD,EAA4DW,SAAS,IAAIX,UAAU,CAACW,SAApF,EAA+FwN,WAA/F,EAA4GC,UAA5G,CADC,CAJL;AAMH,KAhBD;;AAkBa,YAAAiH,qBAAA,GAAwB,QAAAxU,cAAA,CAAemT,0BAAf,EACjC,QAAAD,iBADiC,EAEjC,QAAAX,gBAFiC,EAGjC,oBAAAxS,0BAHiC,EAIjC,eAAA4D,iBAJiC,EAKjC2Q,qCALiC,CAAxB;AAOA,YAAAG,wBAAA,GAA2B,QAAAzU,cAAA,CAAeuT,8BAAf,EACpC,QAAAhB,gBADoC,EAEpC,oBAAAxS,0BAFoC,EAGpC,eAAA4D,iBAHoC,EAIpC,UAACnR,OAAD,EAAU2M,UAAV,EAAsBW,SAAtB,EAAiCwN,WAAjC,EAA8CC,UAA9C;AAAA,aAA6D+G,qCAAqC,CAAC9hB,OAAD,EAAU,EAAV,EAAc2M,UAAd,EAA0BW,SAA1B,EAAqCwN,WAArC,EAAkD,IAAlD,CAAlG;AAAA,KAJoC,CAA3B;AAMA,YAAAoH,6BAAA,GAAgC,QAAA1U,cAAA,CAAeyT,kCAAf,EACzC,QAAAP,iBADyC,EAEzC,QAAAX,gBAFyC,EAGzC,oBAAAxS,0BAHyC,EAIzC,eAAA4D,iBAJyC,EAKzC2Q,qCALyC,CAAhC;AAOA,YAAAK,4BAAA,GAA+B,QAAA3U,cAAA,CAAe2T,6BAAf,EACxC,QAAAT,iBADwC,EAExC,QAAAX,gBAFwC,EAGxC,oBAAAxS,0BAHwC,EAIxC,eAAA4D,iBAJwC,EAKxC2Q,qCALwC,CAA/B;AAQA,YAAAM,yBAAA,GAA4B,QAAA5U,cAAA,CAAe6T,0BAAf,EACrC,QAAAtB,gBADqC,EAErC,oBAAAxS,0BAFqC,EAGrC,eAAA4D,iBAHqC,EAIrC,UAACnR,OAAD,EAAU2M,UAAV,EAAsBW,SAAtB,EAAiCwN,WAAjC;AAAA,aAAiDgH,qCAAqC,CAAC9hB,OAAD,EAAU,EAAV,EAAc2M,UAAd,EAA0BW,SAA1B,EAAqCwN,WAArC,CAAtF;AAAA,KAJqC,CAA5B;AAMA,YAAAuH,6BAAA,GAAgC,QAAA7U,cAAA,CAAe+T,8BAAf,EACzC,QAAAb,iBADyC,EAEzC,QAAAX,gBAFyC,EAGzC,oBAAAxS,0BAHyC,EAIzC,eAAA4D,iBAJyC,EAKzC2Q,qCALyC,CAAhC;AAOb;;;;AAGa,YAAAQ,6BAAA,GAAgC,QAAA9U,cAAA,CACzC,QAAA+S,sBADyC,EAEzC,oBAAAhT,0BAFyC,EAGzC,UAACwR,SAAD,EAAYzR,SAAZ;AAAA,aAA2ByR,SAAS,CAC/B1gB,GADsB,CAClB,UAAAiQ,CAAC;AAAA,eAAIhB,SAAS,SAAT,IAAAA,SAAS,WAAT,GAAS,MAAT,GAAAA,SAAS,CAAEtR,IAAX,CAAgB,UAAA4E,CAAC;AAAA,iBAAIA,CAAC,CAAC6J,EAAF,KAAS6D,CAAC,CAAC5S,KAAf;AAAA,SAAjB,CAAJ;AAAA,OADiB,EAEtB0D,MAFsB,CAEf,UAAAe,CAAC;AAAA,eAAI,CAAC,CAACA,CAAN;AAAA,OAFc,CAA3B;AAAA,KAHyC,CAAhC;;;;;;;;;;;;;;;;;;;;ACtMb;AAAA;AAAA;;AAOA;AAAA;AAAA;AAEA;;;;;AAGA,QAAMoiB,oBAAoB,GAAG,CAA7B;;AAEa,YAAAC,yBAAA,GAA4B,UACrCvU,IADqC,EAErC6N,QAFqC;AAAA,aAGhB;AACrBrX,eAAO,YAAKqX,QAAQ,CAACvnB,IAAd,cAAsB,OAAAuO,eAAA,CACzB,OAAAL,kBAAA,CAAmBqZ,QAAQ,CAAC1e,QAA5B,CADyB,CAAtB,CADc;AAIrBqlB,wBAAgB,YAAK3G,QAAQ,CAAC4G,IAAd,cAAsB5G,QAAQ,CAACvnB,IAA/B,eAAwCunB,QAAQ,CAAC6G,OAAjD,CAJK;AAKrBjnB,aAAK,EAAEogB,QAAQ,CAACrR,EALK;AAMrBmY,eAAO,EAAE3U,IANY;AAOrB6Q,kBAAU,EAAE,IAPS;AAQrB5E,oBAAY,YAAK4B,QAAQ,CAACvnB,IAAd,cAAsB,OAAAuO,eAAA,CAC9B,OAAAL,kBAAA,CAAmBqZ,QAAQ,CAAC1e,QAA5B,CAD8B,CAAtB,CARS;AAWrBsgB,YAAI,EAAE;AAAE5B,kBAAQ,EAARA,QAAF;AAAY7N,cAAI,EAAJA;AAAZ;AAXe,OAHgB;AAAA,KAA5B;;AAiBA,YAAA4U,wBAAA,GAA2B,UACpC5U,IADoC;AAAA,aAEf;AACrBxJ,eAAO,YAAKwJ,IAAI,CAAC1Z,IAAV,4BAAgC,OAAAuO,eAAA,CACnC,OAAAL,kBAAA,CAAmBwL,IAAI,CAAC7Q,QAAxB,CADmC,CAAhC,CADc;AAIrB1B,aAAK,EAAEuS,IAAI,CAAC1Z,IAJS;AAKrBisB,mBAAW,EAAE,IALQ;AAMrBoC,eAAO,EAAE3U,IAAI,CAAC1Z,IANO;AAOrB2lB,oBAAY,YAAKjM,IAAI,CAAC1Z,IAAV,4BAAgC,OAAAuO,eAAA,CACxC,OAAAL,kBAAA,CAAmBwL,IAAI,CAAC7Q,QAAxB,CADwC,CAAhC,CAPS;AAUrBsgB,YAAI,EAAE;AAAEzP,cAAI,EAAJA;AAAF;AAVe,OAFe;AAAA,KAA3B;AAeb;;;;;;AAIa,YAAA6U,qBAAA,GAAwB,UACjCC,OADiC,EAEhC;AACD,UAAM1H,OAAO,GAAwB,EAArC;AACA0H,aAAO,CAACnsB,OAAR,CAAgB,UAAC8E,KAAD,EAAQxH,GAAR,EAAgB;AAC5BmnB,eAAO,CAAChb,IAAR,CAAa,QAAAwiB,wBAAA,CAAyB3uB,GAAzB,CAAb;AACAwH,aAAK,CAAC9E,OAAN,CAAc,UAACgK,CAAD;AAAA,iBACVya,OAAO,CAAChb,IAAR,CAAa,QAAAmiB,yBAAA,CAA0BtuB,GAAG,CAACK,IAA9B,EAAoCqM,CAApC,CAAb,CADU;AAAA,SAAd;AAGH,OALD;AAMA,aAAOya,OAAP;AACH,KAXY;AAab;;;;;;;;;;;;;AAWa,YAAA2H,qBAAA,GAAwB,UACjC3H,OADiC,EAEjC4H,eAFiC,EAGjCC,MAHiC,EAIhC;AACD,UAAID,eAAe,CAACjnB,IAAhB,CAAqB,UAAC+R,CAAD;AAAA,eAAOA,CAAC,CAACrS,KAAF,KAAYwnB,MAAM,CAACxnB,KAA1B;AAAA,OAArB,CAAJ,EAA2D;AACvD,eAAOunB,eAAe,CAAC7jB,MAAhB,CAAuB,UAAC2O,CAAD,EAAO;AACjC,cAAI3O,MAAM,GAAG2O,CAAC,CAACrS,KAAF,KAAYwnB,MAAM,CAACxnB,KAAhC,CADiC,CAEjC;;AACA,cAAIwnB,MAAM,CAAC1C,WAAX,EAAwB;AACpBphB,kBAAM,GACFA,MAAM,KACL,CAAC2O,CAAC,CAAC+Q,UAAH,IACI/Q,CAAC,CAAC+Q,UAAF,IAAgB/Q,CAAC,CAAC6U,OAAF,KAAcM,MAAM,CAACN,OAFpC,CADV;AAIH,WALD,MAKO,IAAIM,MAAM,CAACpE,UAAX,EAAuB;AAC1B;AACA1f,kBAAM,GACFA,MAAM,KACL,CAAC2O,CAAC,CAACyS,WAAH,IACIzS,CAAC,CAACyS,WAAF,IAAiBzS,CAAC,CAAC6U,OAAF,KAAcM,MAAM,CAACN,OAFrC,CADV;AAIH;;AACD,iBAAOxjB,MAAP;AACH,SAhBM,CAAP;AAiBH,OAnBA,CAoBD;AACA;;;AACA,UAAI8jB,MAAM,CAAC1C,WAAX,EAAwB;AACpB,YAAM2C,QAAQ,GAAG9H,OAAO,CAACjc,MAAR,CACb,UAAC8F,CAAD;AAAA,iBACIA,CAAC,CAAC4Z,UAAF,IACA5Z,CAAC,CAAC0d,OAAF,KAAcM,MAAM,CAACxnB,KADrB,IAEA,CAACunB,eAAe,CAACjnB,IAAhB,CAAqB,UAAConB,QAAD;AAAA,mBAAcA,QAAQ,CAAC1nB,KAAT,KAAmBwJ,CAAC,CAACxJ,KAAnC;AAAA,WAArB,CAHL;AAAA,SADa,CAAjB;AAMA,4CAAWunB,eAAX,IAA4BC,MAA5B,sBAAuCC,QAAvC;AACH,OA9BA,CA+BD;;;AACA,UAAME,QAAQ,gCAAOJ,eAAP,IAAwBC,MAAxB,EAAd,CAhCC,CAkCD;AACA;;AACA,UAAMI,wBAAwB,GAAGjI,OAAO,CAACjc,MAAR,CAC7B,UAACmkB,CAAD;AAAA,eACIA,CAAC,CAACzE,UAAF,IACAyE,CAAC,CAACX,OAAF,KAAcM,MAAM,CAACN,OADrB,IAEA,CAACS,QAAQ,CAACrnB,IAAT,CAAc,UAACwnB,EAAD;AAAA,iBAAQA,EAAE,CAAC9nB,KAAH,KAAa6nB,CAAC,CAAC7nB,KAAvB;AAAA,SAAd,CAHL;AAAA,OAD6B,CAAjC,CApCC,CA0CD;;AACA,UAAI4nB,wBAAwB,CAAC5oB,MAAzB,KAAoC,CAAxC,EAA2C;AACvC,4CACO2oB,QADP,IAEIhI,OAAO,CAACrf,IAAR,CAAa,UAACunB,CAAD;AAAA,iBAAOA,CAAC,CAAC/C,WAAF,IAAiB+C,CAAC,CAACX,OAAF,KAAcM,MAAM,CAACN,OAA7C;AAAA,SAAb,CAFJ;AAIH;;AACD,aAAOS,QAAP;AACH,KAtDY;AAwDb;;;;;;AAIa,YAAAI,oBAAA,GAAuB,UAChC1E,SADgC,EAEvB;AACT;AACA,UAAI2E,kBAAkB,sBAAO3E,SAAP,CAAtB;;AACA,UAAM4E,cAAc,GAAG5E,SAAS,CAACrkB,MAAV,GAAmB6nB,oBAA1C;;AACA,UAAIoB,cAAJ,EAAoB;AAChBD,0BAAkB,GAAGA,kBAAkB,CAACze,MAAnB,CAA0B,CAA1B,EAA6Bsd,oBAA7B,CAArB;AACH;;AACD,UAAI9d,OAAO,GAAGif,kBAAkB,CAC3BrlB,GADS,CACL,UAACiQ,CAAD;AAAA,eAAOA,CAAC,CAAC4L,YAAF,IAAkB5L,CAAC,CAAC7J,OAA3B;AAAA,OADK,EAET5C,IAFS,CAEJ,IAFI,CAAd;;AAGA,UAAI8hB,cAAJ,EAAoB;AAChBlf,eAAO,kBAAWsa,SAAS,CAACrkB,MAArB,MAAP;AACH;;AACD,aAAO+J,OAAP;AACH,KAhBY;;AAkBA,YAAAmf,wBAAA,GAA2B,UACpCC,KADoC;AAAA,aAGpCA,KAAK,GACC;AACInoB,aAAK,EAAEmoB,KAAK,CAACpZ,EADjB;AAEIhG,eAAO,EAAEof,KAAK,CAACtvB;AAFnB,OADD,GAKCkG,SAR8B;AAAA,KAA3B;AAUb;;;;;;AAIa,YAAAqpB,0BAAA,GAA6B,UAACxW,SAAD,EAA2B;AACjE,UAAMyW,eAAe,GAAG,OAAA7kB,MAAA,CACpBoO,SAAS,CAACnR,MAAV,CAAiB,UAACwK,IAAD,EAAwBmV,QAAxB,EAA+C;AAC5DnV,YAAI,CAACtG,IAAL,OAAAsG,IAAI,qBAASmV,QAAQ,CAACzN,MAAlB,EAAJ;AACA,eAAO1H,IAAP;AACH,OAHD,EAGG,EAHH,CADoB,EAKpB,IALoB,CAAxB;AAOA,aAAO;AACHod,uBAAe,EAAfA,eADG;AAEHzW,iBAAS,EAATA;AAFG,OAAP;AAIH,KAZY;AAcb;;;AAEa,YAAA0W,gBAAA,GAAmB,UAACC,GAAD,EAAyB;AACrD,UAAIntB,KAAJ;;AACA,UAAImtB,GAAG,IAAI,CAAX,EAAc;AACVntB,aAAK,GAAGmtB,GAAR;AACH,OAFD,MAEO,IAAIA,GAAG,GAAG,CAAN,KAAY,CAAhB,EAAmB;AACtBntB,aAAK,GAAG,CAAR;AACH,OAFM,MAEA;AACHA,aAAK,GAAG,CAAR;AACH;;AACD,oDAAuCA,KAAvC;AACH,KAVY;AAYb;;;;;;AAIa,YAAAotB,eAAA,GAAkB,UAC3BC,kBAD2B,EAE3BC,eAF2B,EAG3BC,aAH2B,EAI3BC,QAJ2B,EAMpB;AAAA,UADPC,YACO,uEADiB,KACjB;AACP,UAAIC,WAAW,GAAUJ,eAAe,CAAC/lB,GAAhB,CAAoB,UAACxH,CAAD;AAAA,eACzCA,CAAC,GAAG;AAAE4tB,cAAI,EAAE,QAAAT,gBAAA,CAAiBntB,CAAjB;AAAR,SAAH,GAAmC,KADK;AAAA,OAApB,CAAzB;AAGAutB,qBAAe,CAACxtB,OAAhB,CAAwB,UAAC8tB,CAAD,EAAO;AAC3B,YAAMC,gBAAgB,aAAMN,aAAN,SAAsBC,QAAtB,mBAAuCI,CAAvC,SAAtB;AACA,YAAME,YAAY,GAAG/S,QAAQ,CAACgT,QAAT,CAAkBvS,QAAlB,CAA2B,WAA3B,cAA8CT,QAAQ,CAACO,MAAvD,oBAAuEuS,gBAAvE,IAA4FA,gBAAjH;;AACA,YAAI,CAACJ,YAAL,EAAmB;AACf,cAAMO,MAAM,GAAG,IAAIC,KAAJ,EAAf;;AACAD,gBAAM,CAACE,MAAP,GAAgB,YAAM;AAClB;AACAR,uBAAW,CAACE,CAAC,GAAG,CAAL,CAAX,GAAqB;AAAED,kBAAI,EAAEG;AAAR,aAArB;AACAT,8BAAkB,CAACK,WAAnB,sBAAqCA,WAAW,CAAClmB,KAAZ,EAArC;AACA,aAAA6lB,kBAAkB,SAAlB,IAAAA,kBAAkB,WAAlB,GAAkB,MAAlB,GAAAA,kBAAkB,CAAEc,UAApB,MAAkCd,kBAAkB,SAAlB,IAAAA,kBAAkB,WAAlB,GAAkB,MAAlB,GAAAA,kBAAkB,CAAEc,UAApB,CAA+Bte,IAA/B,oBAAwC6d,WAAW,CAAClmB,KAAZ,EAAxC,EAAlC;AACH,WALD;;AAMAwmB,gBAAM,CAACI,GAAP,GAAaN,YAAb;AACH,SAZ0B,CAc3B;;;AACA,YAAIL,YAAJ,EAAkB;AACdC,qBAAW,CAACE,CAAC,GAAG,CAAL,CAAX,GAAqB;AAAED,gBAAI,EAAEG;AAAR,WAArB;AACAT,4BAAkB,CAACK,WAAnB,GAAiCA,WAAW,CAAClmB,KAAZ,EAAjC;AACH;AACJ,OAnBD;AAoBH,KA9BY;;AAgCA,YAAA6mB,oBAAA,GAAuB,UAAChY,OAAD,EAAsB;AACtD,UAAMwS,GAAG,GAAG,UAAA1d,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAZ;AACA,UAAIgtB,KAAK,GAAG,EAAZ;AACA,UAAIC,IAAI,GAAG,EAAX;AACA,UAAIC,KAAK,GAAG,EAAZ;;AAEA,UAAInY,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAE8P,MAAb,EAAqB;AACjB,YAAMA,MAAM,GAAG0C,GAAG,GAAGxS,OAAO,CAAC9J,SAAd,GAA0B,SAA1B,GAAsC8J,OAAO,CAAC8P,MAA7D;;AACA,gBAAQA,MAAR;AACI,eAAK,aAAL;AACImI,iBAAK,GAAG,mCAAR;AACAE,iBAAK,GAAG,aAAR;AACAD,gBAAI,GAAG,aAAP;AACA;;AACJ,eAAK,UAAL;AACID,iBAAK,GAAG,mCAAR;AACAE,iBAAK,GAAG,WAAR;AACAD,gBAAI,GAAG,WAAP;AACA;;AACJ,eAAK,WAAL;AACID,iBAAK,GAAG,mCAAR;AACAE,iBAAK,GAAG,WAAR;AACAD,gBAAI,GAAG,WAAP;AACA;;AACJ,eAAK,SAAL;AACID,iBAAK,GAAG,iCAAR;AACAE,iBAAK,GAAG,SAAR;AACAD,gBAAI,GAAG,SAAP;AACA;;AACJ,eAAK,WAAL;AACID,iBAAK,GAAG,iCAAR;AACAE,iBAAK,GAAG,WAAR;AACAD,gBAAI,GAAG,SAAP;AACA;;AACJ,eAAK,UAAL;AACID,iBAAK,GAAG,mCAAR;AACAE,iBAAK,GAAG,WAAR;AACAD,gBAAI,GAAG,WAAP;AACA;;AACJ,eAAK,UAAL;AACID,iBAAK,GAAG,mCAAR;AACAE,iBAAK,GAAG,WAAR;AACAD,gBAAI,GAAG,WAAP;AACA;;AACJ;AACI;AACAD,iBAAK,GAAG,iCAAR;AACAE,iBAAK,GAAG,SAAR;AACAD,gBAAI,GAAG,SAAP;AACA;AAzCR;AA2CH;;AACD,aAAO;AAAEA,YAAI,EAAJA,IAAF;AAAQC,aAAK,EAALA,KAAR;AAAeF,aAAK,EAALA;AAAf,OAAP;AACH,KArDY;;AAuDA,YAAAG,oBAAA,GAAuB,UAACzJ,QAAD,EAAqBH,KAArB,EAAsC;AACtE,UAAIoB,WAAW,GAAGjB,QAAQ,GACpBA,QAAQ,CAACkB,YAAT,IAAyBlB,QAAQ,CAAC0J,cADd,GAEpB,KAFN,CADsE,CAItE;;AACA,UAAI,CAAA7J,KAAK,SAAL,IAAAA,KAAK,WAAL,GAAK,MAAL,GAAAA,KAAK,CAAEqB,YAAP,MAAwB,KAA5B,EAAmC;AAC/BD,mBAAW,GAAG,KAAd;AACH;;AACD,aAAOA,WAAP;AACH,KATY;;AAWA,YAAA0I,eAAA,GAAkB,UAACtY,OAAD,EAAmB2O,QAAnB,EAA0C;;;AACrE,UAAMmB,MAAM,GAAG,QAAAkI,oBAAA,CAAqBhY,OAArB,CAAf;AACA,UAAMuY,gBAAgB,GAAG,CAAC,UAAD,EAAa,WAAb,EAA0B,SAA1B,EAAqCpT,QAArC,CACrB2K,MAAM,CAACoI,IADc,CAAzB;AAGA,UAAMM,KAAK,GAAG,CAAH,KAAG7J,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAE0J,cAAV,MAAwB,IAAxB,IAAwB,aAAxB,GAAwB,MAAxB,GAAwB,GAAE9sB,KAAxC;AACA,UAAMktB,MAAM,GAAG,CAAH,KAAG9J,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAE0J,cAAV,MAAwB,IAAxB,IAAwB,aAAxB,GAAwB,MAAxB,GAAwB,GAAEK,GAAzC;;AAEA,UAAIH,gBAAJ,EAAsB;AAClB,eAAO,KAAP;AACH;;AAED,UAAI,OAAOC,KAAP,KAAiB,WAAjB,IAAgC,OAAOC,MAAP,KAAkB,WAAtD,EAAmE;AAC/D,eAAO,KAAP;AACH,OAdoE,CAgBrE;;;AACA,UAAME,WAAW,GAAGH,KAAK,GAAG,EAA5B;AACA,UAAMI,YAAY,GAAGH,MAAM,GAAG,EAA9B;AAEA,UAAMI,UAAU,GAAG7Y,OAAO,CAAC/J,WAAR,CAAoBlB,YAApB,CAAiC,KAAjC,CAAnB;AACA,UAAM+jB,gBAAgB,GAAGD,UAAU,CAAC3sB,QAAX,CAAoB;AAAEJ,eAAO,EAAE6sB;AAAX,OAApB,CAAzB;AACA,UAAMI,iBAAiB,GAAGF,UAAU,CAAC3sB,QAAX,CAAoB;AAAEJ,eAAO,EAAE8sB;AAAX,OAApB,CAA1B;;AAEA,UACIE,gBAAgB,CAAC9jB,EAAjB,IAAuBgL,OAAO,CAAC/J,WAAR,CAAoBjB,EAA3C,IACA+jB,iBAAiB,CAAC/jB,EAAlB,GAAuBgL,OAAO,CAAC/J,WAAR,CAAoBjB,EAF/C,EAGE;AACE;AACA,YAAIgL,OAAO,CAAC9J,SAAR,CAAkBlB,EAAlB,IAAwB8jB,gBAAgB,CAAC9jB,EAA7C,EAAiD;AAC7C,iBAAO,KAAP;AACH,SAJH,CAKE;;;AACA,YAAIgL,OAAO,CAAC/J,WAAR,CAAoBjB,EAApB,GAAyB+jB,iBAAiB,CAAC/jB,EAA/C,EAAmD;AAC/C,iBAAO,KAAP;AACH,SARH,CAUE;;;AACA,YAAIgL,OAAO,CAAC/J,WAAR,CAAoBjB,EAApB,GAAyB,UAAAF,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB+J,EAAjD,EAAqD;AACjD;AACA,iBAAO,IAAP;AACH;AACJ;;AAED,aAAO,KAAP;AACH,KA7CY;;AA+CA,YAAAgkB,eAAA,GAAkB,UAC3BC,OAD2B,EAE3BjZ,OAF2B,EAGR;AACnB,aAAO,IAAI0H,OAAJ,CAAY,UAACC,OAAD,EAAUC,MAAV,EAAqB;AAEpC,YAAIsR,kBAAkB,GAQlB;AACAC,kBAAQ,EAAEnZ,OAAO,CAACwO,KAAR,CAAclR,EADxB;AAEAtR,gBAAM,EAAEgU,OAAO,CAAC/J,WAFhB;AAGA7J,kBAAQ,EAAE4T,OAAO,CAAC5T,QAHlB;AAIA2Z,eAAK,EAAE/F,OAAO,CAAC+F,KAAR,CAAc/F,OAAO,CAACwO,KAAR,CAAc/R,KAA5B,CAJP;AAKA2c,mBAAS,EAAEpZ,OAAO,CAACoZ,SAAR,CAAkBpZ,OAAO,CAACwO,KAAR,CAAc/R,KAAhC,CALX;AAMA4c,uBAAa,EAAE;AANf,SARJ;;AAiBA,YAAIrZ,OAAO,CAACsZ,eAAR,KAA4B,QAA5B,IAAwCtZ,OAAO,CAACsZ,eAAR,KAA4B,IAAxE,EAA8E;AAC1EJ,4BAAkB,GAAG,gCACdA,kBADc,GACI;AACrB3G,kBAAM,EAAEvS,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAEuZ,OADI;AAErBpH,4BAAgB,EAAEnS,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAEmS,gBAFN;AAGrBH,6BAAiB,EAAEhS,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAEgS,iBAHP;AAIrBE,4BAAgB,EAAElS,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAEkS,gBAJN;AAKrBD,+BAAmB,EAAEjS,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAEiS,mBALT;AAMrBG,6BAAiB,EAAEpS,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAEoS,iBANP;AAOrBjC,wBAAY,EAAEnQ,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAEmQ,YAPF;AAQrBmC,2BAAe,EAAEtS,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAEsS;AARL,WADJ,CAArB;AAWH;;AAED2G,eAAO,CACFO,SADL,CAEQN,kBAFR,EAGQ,IAHR,EAIQ,KAJR,EAMKnR,IANL,CAOQ,UAACxe,IAAD,EAAU;AACN,cAAMilB,KAAK,GAAGjlB,IAAI,CAACgE,MAAL,GAAchE,IAAI,CAAC,CAAD,CAAlB,GAAwB,IAAtC;;AACA,cAAIilB,KAAJ,EAAW;AACP,gBAAI,CAACA,KAAK,CAACgB,QAAX,EAAqB,OAAO5H,MAAM,CAAC,cAAD,CAAb;AACrB,gBAAM7B,KAAK,GAAG,CAAA/F,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAE+F,KAAT,CAAeyI,KAAK,SAAL,IAAAA,KAAK,WAAL,GAAK,MAAL,GAAAA,KAAK,CAAE/R,KAAtB,MAAgC,CAA9C;AACA,gBAAM2c,SAAS,GAAG,CAAApZ,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAEoZ,SAAT,CAAmB5K,KAAK,SAAL,IAAAA,KAAK,WAAL,GAAK,MAAL,GAAAA,KAAK,CAAE/R,KAA1B,MAAoC,CAAtD;AACA,gBAAMgd,UAAU,GAAG,CAAAzZ,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAE/J,WAAT,CAAqB8G,OAArB,IAA+BgJ,KAAlD;AACA,gBAAM2T,QAAQ,GAAG1Z,OAAO,CAAC9J,SAAR,CAAkB6G,OAAlB,GAA4Bqc,SAA7C;AAEA,gBAAMhe,QAAQ,GAAGoT,KAAK,CAAChK,QAAN,CAAepJ,QAAhC,CAPO,CAQP;AACA;;AACA,gBAAIA,QAAQ,CAAC7N,MAAb,EAAqB;AACjB,kBAAMosB,YAAY,GAAGve,QAAQ,CAACvM,IAAT,CAAc,UAAA+qB,GAAG,EAAI;AACtC,oBAAMC,OAAO,GAAGD,GAAG,CAAC7T,KAAJ,CAAUyI,KAAK,CAAC/R,KAAhB,KAA0B,CAA1C;AACA,oBAAMqd,WAAW,GAAGF,GAAG,CAAC7T,KAAJ,CAAUyI,KAAK,CAAC/R,KAAhB,KAA0B,CAA9C;AACA,oBAAMlR,KAAK,GAAG,CAACquB,GAAG,CAACzc,WAAJ,IAAmByc,GAAG,CAACruB,KAAxB,IAAiCsuB,OAA/C;AACA,oBAAMnB,GAAG,GAAG,CAACkB,GAAG,CAAC/c,SAAJ,IAAiB+c,GAAG,CAAClB,GAAtB,IAA6BoB,WAAzC;AACA,uBAAO,CACFJ,QAAQ,GAAGnuB,KAAX,IAAoBmuB,QAAQ,IAAIhB,GAAjC,IAAyC;AACxCe,0BAAU,IAAIluB,KAAd,IAAuBkuB,UAAU,GAAGf,GADrC,IAC6C;AAC5Ce,0BAAU,IAAIluB,KAAd,IAAuBmuB,QAAQ,IAAIhB,GAHjC,CAGsC;AAHtC,sBAMHkB,GAAG,CAACtc,EAAJ,KAAW0C,OAAO,CAAC1C,EAAnB,IAEE,CAAC,CAAC0C,OAAO,CAACmQ,YAAV,KAA2BnQ,OAAO,CAACsZ,eAAR,KAA4B,QAA5B,IAAwCtZ,OAAO,CAACsZ,eAAR,KAA4B,IAA/F,CAFF,GAIIM,GAAG,CAACG,oBAAJ,KAA6B/Z,OAAO,CAAC1C,EAJzC,GAMI,KAZD,CAAP;AAkBH,eAvBoB,CAArB,CADiB,CAyBjB;;AACA,kBAAIqc,YAAJ,EAAkB,OAAO/R,MAAM,CAAC,sBAAD,CAAb;AACrB;;AACD,mBAAOD,OAAO,CAAC6G,KAAK,CAACgB,QAAP,CAAd;AACH;;AACD5H,gBAAM,CAAC,iBAAD,CAAN;AACH,SAlDT,EAmDQ;AAAA,iBAAMA,MAAM,CAAC,iBAAD,CAAZ;AAAA,SAnDR;AAqDH,OAtFM,CAAP;AAuFH,KA3FY;;AA6FA,YAAAoS,qBAAA,GAAwB,UAAClK,MAAD,EAAqB;AACtD,UAAIvf,GAAG,GAAG,EAAV;;AACA,cAAQuf,MAAR;AACD,aAAK,GAAL;AACCvf,aAAG,GAAG,+IAAN;AACA;;AACD,aAAK,GAAL;AACCA,aAAG,GAAG,qDAAN;AACA;;AACD,aAAK,GAAL;AACCA,aAAG,GAAG,0DAAN;AACA;;AACD;AACCA,aAAG,GAAG,iDAAN;AAXA;;AAaA,aAAOA,GAAP;AACH,KAhBY;;;;;;;;;;;;;;;;;;;;;;;;;ACzbb;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;QCHa0pB,oB,GAOT,8BAAmBzL,KAAnB,EACmBkI,KADnB,EAEmB/H,QAFnB,EAEwC;AAAA;;;;AAFrB,WAAAH,KAAA,GAAAA,KAAA;AACA,WAAAkI,KAAA,GAAAA,KAAA;AACA,WAAA/H,QAAA,GAAAA,QAAA;AAEf,WAAKuL,YAAL,mBAA6B,iBAAK1L,KAAL,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAEkI,KAAZ,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAEyD,UAAhD;AACA,WAAKhC,KAAL,GAAa,KAAK3J,KAAL,CAAW4L,UAAxB;AACA,WAAKC,MAAL,GAAc,KAAK1L,QAAL,cAAoB,WAAKA,QAAL,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAE4G,IAAnC,eAA4C,WAAK5G,QAAL,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAEvnB,IAA3D,IAAoE,EAAlF;AACA,WAAKyqB,QAAL,uBAA6B,KAAKrD,KAAL,CAAWqD,QAAxC;AACH,K;;AAfL;AAkBA;;;;AAGa,YAAAyI,sBAAA,GAAyB,UAACznB,OAAD,EACC+jB,eADD,EAECzW,SAFD;AAAA,aAGlCtN,OAAO,CAAC3B,GAAR,CAAY,UAACG,CAAD,EAAc;AACtB,YAAMqlB,KAAK,GAAGE,eAAe,CAAC/nB,IAAhB,CAAqB,UAAAsS,CAAC;AAAA,iBAAI9P,CAAC,CAACud,KAAF,CAAQzJ,QAAR,CAAiBhE,CAAC,CAAC7D,EAAnB,CAAJ;AAAA,SAAtB,CAAd;AACA,YAAMqR,QAAQ,GAAGxO,SAAS,CAACtR,IAAV,CAAe,UAAA4E,CAAC;AAAA,iBAAIpC,CAAC,CAACud,KAAF,CAAQzJ,QAAR,CAAiB1R,CAAC,CAAC6J,EAAnB,CAAJ;AAAA,SAAhB,CAAjB;AACA,eAAO,IAAI2c,oBAAJ,CACH5oB,CADG,EAEHqlB,KAFG,EAGH/H,QAHG,CAAP;AAKH,OARD,CAHkC;AAAA,KAAzB;;;;;;;;;;;;;;;;;;;;;ACzBb;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AASA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;QAqBa4L,mB;;;;;AA4FT,mCACYC,IADZ,EAEYC,OAFZ,EAGYC,MAHZ,EAG0B;AAAA;;AAAA;;AAEtB;AAJQ,gBAAAF,IAAA,GAAAA,IAAA;AACA,gBAAAC,OAAA,GAAAA,OAAA;AACA,gBAAAC,MAAA,GAAAA,MAAA;AA9FZ;;AACQ,gBAAAC,KAAA,GAAQ,IAAI,OAAA7zB,eAAJ,CAA6B,KAA7B,CAAR;AACR;;AACQ,gBAAA8zB,UAAA,GAAa,IAAI,OAAA9zB,eAAJ,CAAkC,EAAlC,CAAb;AACA,gBAAA+zB,eAAA,GAAkB,IAAI,OAAA/zB,eAAJ,CAAiC,EAAjC,CAAlB;AACR;;AACQ,gBAAAg0B,SAAA,GAAY,IAAI,OAAAh0B,eAAJ,CAA+B,EAA/B,CAAZ;AACR;;AACO,gBAAAi0B,aAAA,GAAgB,IAAI,OAAAj0B,eAAJ,CAAwB,EAAxB,CAAhB;AACP;;AACQ,gBAAAk0B,QAAA,GAAW,IAAI,OAAAl0B,eAAJ,CAAoC,EAApC,CAAX;AACR;;AACQ,gBAAAm0B,OAAA,GAAU,IAAI,OAAAn0B,eAAJ,CAA4B,UAAAgO,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAA5B,CAAV;AACR;;AACQ,gBAAAiX,KAAA,GAAQ,IAAI,OAAApb,eAAJ,CAA4B,GAA5B,CAAR;AACR;;AACQ,gBAAAo0B,QAAA,GAAW,IAAI,OAAAp0B,eAAJ,CAA6B,KAA7B,CAAX;AACR;;AACQ,gBAAAq0B,MAAA,GAAS,OAAAC,aAAA,CACb,QAAKN,SADQ,EAEb,QAAKE,QAFQ,EAGb,QAAKC,OAHQ,EAIb,QAAK/Y,KAJQ,CAAT;AAOR;;AACgB,gBAAA9G,QAAA,GAAW,QAAK0f,SAAL,CAAenX,YAAf,EAAX;AAChB;;AACgB,gBAAA3X,MAAA,GAAS,QAAKivB,OAAL,CAAatX,YAAb,EAAT;AAChB;AAAkC;;AAClB,gBAAAnO,IAAA,GAAO,QAAKylB,OAAL,CAAatX,YAAb,EAAP;AAChB;;AACgB,gBAAAW,OAAA,GAAU,QAAK4W,QAAL,CAAcvX,YAAd,EAAV;AAWhB;;AACgB,gBAAA0X,QAAA,GAAW,QAAKF,MAAL,CAAYhf,IAAZ,CACvB,YAAAjL,GAAA,CAAI,UAAC9K,KAAD,EAAW;AACX,cAAMk1B,IAAI,GAAG,QAAKrrB,QAAL,GACP,IAAI,UAAAsM,MAAJ,CAAW;AACPlR,gBAAI,EAAE,QAAKkwB,YAAL,CAAkBvmB,EADjB;AAEP6d,uBAAW,EAAE,KAFN;AAGPC,uBAAW,EAAE,QAAK7iB;AAHX,WAAX,CADO,GAMP,QAAKsrB,YANX;AAOA,cAAMC,OAAO,GAAGF,IAAI,CAACvmB,YAAL,CAAkB,KAAlB,CAAhB;AACA,cAAM0mB,KAAK,GAAGD,OAAO,CAACtvB,QAAR,CAAiB,EAAjB,EAAqBwvB,UAArB,CAAgC,KAAhC,CAAd;AACA,iBAAO,QAAKC,cAAL,CAAoBH,OAApB,EAA6BC,KAA7B,CAAP;AACH,SAXD,CADuB,EAavB,YAAAG,WAAA,CAAY,CAAZ,CAbuB,CAAX;AAgBhB;;AACgB,gBAAAC,aAAA,GAAgB,QAAKV,MAAL,CAAYhf,IAAZ,CAC5B,YAAAjL,GAAA,CAAI,YAAM;AACN;AACA,cAAM4qB,EAAE,GAAG,QAAK7rB,QAAL,GACT,IAAI,UAAAsM,MAAJ,CAAW;AACPlR,gBAAI,EAAE,QAAKkwB,YAAL,CAAkBvmB,EADjB;AAEP6d,uBAAW,EAAE,KAFN;AAGPC,uBAAW,EAAE,QAAK7iB;AAHX,WAAX,CADS,GAMT,QAAKsrB,YANP;AAOA,cAAMhwB,KAAK,GAAGuwB,EAAE,CAAC/mB,YAAH,CAAgB,MAAhB,EAAwBA,YAAxB,CAAqC,KAArC,CAAd;;AACA,cAAM2jB,GAAG,GAAG,QAAKqD,YAAL,CAAkBD,EAAlB,CAAZ;;AACA,iBAAO,QAAKH,cAAL,CAAoBpwB,KAApB,EAA2BmtB,GAA3B,CAAP;AACH,SAZD,CAD4B,CAAhB;AAgBhB;;AACgB,gBAAAsD,cAAA,GAAiB,QAAKb,MAAL,CAAYhf,IAAZ,CAC7B,YAAAjL,GAAA,CAAI,YAAM;AACN,cAAM3F,KAAK,GAAG,QAAKgwB,YAAL,CAAkBxmB,YAAlB,CAA+B,OAA/B,CAAd;;AACA,cAAM2jB,GAAG,GAAG,QAAK6C,YAAL,CAAkBG,UAAlB,CAA6B,OAA7B,CAAZ;;AACA,iBAAO,QAAKC,cAAL,CAAoBpwB,KAApB,EAA2BmtB,GAA3B,CAAP;AACH,SAJD,CAD6B,CAAjB;;AAoBZ,gBAAK8B,IAAL,CAAU5W,WAAV,CAAsBzH,IAAtB,CAA2B,YAAAyG,KAAA,CAAM,UAACC,CAAD;AAAA,iBAAOA,CAAP;AAAA,SAAN,CAA3B,EAA4CvZ,SAA5C,CAAsD,YAAM;iBAAA,CACxD;;;AACA,kBAAK2xB,OAAL,CAAazhB,IAAb,CACI,IAAI,UAAA+C,MAAJ,CAAW;AACPlR,gBAAI,EAAE,QAAK4vB,OAAL,CAAa1sB,KAAb,CAAmByG,EADlB;AAEP6d,uBAAW,EAAE,KAFN;AAGPC,uBAAW,EAAE,CAAF,KAAE,QAAK0H,IAAL,CAAU7L,QAAV,MAAkB,IAAlB,IAAkB,aAAlB,GAAkB,MAAlB,GAAkB,GAAE1e;AAH1B,WAAX,CADJ;AAOH,SATD;AAWA;;;AACA,YAAMgsB,MAAM,GAAG,OAAAb,aAAA,CAAc,QAAKT,KAAnB,EAA0B,QAAKzY,KAA/B,EAAsC,QAAK+Y,OAA3C,EAAoD9e,IAApD,CACX,YAAAlK,MAAA,CAAO,UAACvI,CAAD;AAAA,iBAAO,CAAC,CAACA,CAAC,CAAC,CAAD,CAAV;AAAA,SAAP,CADW,EAEX,YAAAwyB,YAAA,CAAa,GAAb,CAFW,EAGX,YAAAC,SAAA,CAAU,YAAM;AACZ,cAAMC,KAAK,GAAG,QAAKla,KAAL,CAAWra,QAAX,EAAd;;AACA,cAAI,CAACu0B,KAAL,EAAY;AACR,mBAAO,OAAArS,EAAA,CAAG,EAAH,CAAP;AACH;;AACD,kBAAKmR,QAAL,CAAc1hB,IAAd,CAAmB,IAAnB;;AACA,cAAMjO,KAAK,GAAG,QAAKgwB,YAAL,CAAkBxmB,YAAlB,CAA+B,KAA/B,CAAd;;AACA,cAAM2jB,GAAG,GAAGntB,KAAK,CAACmwB,UAAN,CAAiB,KAAjB,CAAZ;AACA,iBAAO,QAAKjB,OAAL,CAAa4B,YAAb,CAA0B;AAC7BC,oBAAQ,EAAEF,KADmB;AAE7BG,0BAAc,EAAEhxB,KAAK,CAACwR,OAFO;AAG7Byf,wBAAY,EAAE9D,GAAG,CAAC3b;AAHW,WAA1B,CAAP;AAKH,SAbD,CAHW,EAiBX,YAAA8M,UAAA,CAAW;AAAA,iBAAM,OAAAE,EAAA,CAAG,EAAH,CAAN;AAAA,SAAX,CAjBW,CAAf;AAoBA,YAAM0S,gBAAgB,GAAG,OAAArB,aAAA,CACrB,QAAKP,eADgB,EAErB,QAAK3Y,KAFgB,EAGrB,QAAK+Y,OAHgB,EAIvB9e,IAJuB,CAKrB,YAAAlK,MAAA,CAAO,UAACvI,CAAD;AAAA,iBAAO,CAAC,CAACA,CAAC,CAAC,CAAD,CAAV;AAAA,SAAP,CALqB,EAMrB,YAAAwyB,YAAA,CAAa,GAAb,CANqB,EAOrB,YAAAC,SAAA,CAAU,UAAC5gB,KAAD,EAAW;AACjB,cAAMjL,IAAI,GAAGiL,KAAK,CAAC,CAAD,CAAlB;AACA,cAAM6gB,KAAK,GAAG7gB,KAAK,CAAC,CAAD,CAAnB;AACA,cAAMvP,MAAM,GAAGuP,KAAK,CAAC,CAAD,CAApB;;AACA,cAAI,CAAC6gB,KAAL,EAAY;AACR,mBAAO,OAAArS,EAAA,CAAG,EAAH,CAAP;AACH;;AACD,kBAAKmR,QAAL,CAAc1hB,IAAd,CAAmB,IAAnB;;AACA,iBAAO,QAAKkjB,UAAL,CAAgBpsB,IAAhB,EAAsB8rB,KAAtB,EAA6BpwB,MAA7B,EAAqC,KAArC,CAAP;AACH,SATD,CAPqB,EAiBrB,YAAA6d,UAAA,CAAW,UAACnU,CAAD,EAAO;AACd,iBAAO,OAAAqU,EAAA,CAAG,EAAH,CAAP;AACF,SAFF,CAjBqB,CAAzB,CApCsB,CA0DtB;;AACA;;AACAkS,cAAM,CAAC3yB,SAAP,CAAiB,UAACqzB,UAAD,EAAgB;AAC7B,kBAAKC,eAAL,CAAqBD,UAArB;;AACA,kBAAKzB,QAAL,CAAc1hB,IAAd,CAAmB,KAAnB;AACH,SAHD;AAIAijB,wBAAgB,CAACnzB,SAAjB,CAA2B,UAACqzB,UAAD,EAAgB;AACvC,kBAAKC,eAAL,CAAqBD,UAArB,EAAiC,QAAK9B,eAAL,CAAqBhzB,QAArB,EAAjC;;AACA,kBAAKqzB,QAAL,CAAc1hB,IAAd,CAAmB,KAAnB;AACH,SAHD;AAhEsB;AAoEzB;;;;;AAED;;;8CAGuD;AAAA;;AAAA,cAA3BqjB,UAA2B,uEAAL,KAAK;AACnD,iBAAO,OAAAzB,aAAA,CACH,KAAKR,UADF,EAEH,KAAK1Y,KAFF,EAGH,KAAK+Y,OAHF,EAIL9e,IAJK,CAKH,YAAAlK,MAAA,CAAO,UAACvI,CAAD;AAAA,mBAAO,CAAC,CAACA,CAAC,CAAC,CAAD,CAAV;AAAA,WAAP,CALG,EAMH,YAAAwyB,YAAA,CAAa,GAAb,CANG,EAOH,YAAAC,SAAA,CAAU,UAAC5gB,KAAD,EAAW;AACjB,gBAAMjL,IAAI,GAAGiL,KAAK,CAAC,CAAD,CAAlB;AACA,gBAAM6gB,KAAK,GAAGS,UAAU,GAAG,OAAI,CAACrC,IAAL,CAAU7L,QAAV,CAAmBrR,EAAtB,GAA2B/B,KAAK,CAAC,CAAD,CAAxD;AACA,gBAAMvP,MAAM,GAAGuP,KAAK,CAAC,CAAD,CAApB;;AACA,gBAAI,CAAC6gB,KAAL,EAAY;AACR,qBAAO,OAAArS,EAAA,CAAG,EAAH,CAAP;AACH;;AACD,mBAAI,CAACmR,QAAL,CAAc1hB,IAAd,CAAmB,IAAnB;;AACA,mBAAO,OAAI,CAACkjB,UAAL,CAAgBpsB,IAAhB,EAAsB8rB,KAAtB,EAA6BpwB,MAA7B,EAAqC6wB,UAArC,CAAP;AACH,WATD,CAPG,EAiBH,YAAAhT,UAAA,CAAW,UAACnU,CAAD,EAAO;AACd,mBAAO,OAAAqU,EAAA,CAAG,EAAH,CAAP;AACF,WAFF,CAjBG,CAAP;AAqBH;;;mCAEkBzZ,I,EAAc8rB,K,EAAepwB,M,EAA6C;AAAA,cAA7B6wB,UAA6B,uEAAP,KAAO;;AACzF,cAAMtxB,KAAK,GAAG,SAARA,KAAQ,GAAM;AAChB,gBAAMqV,CAAC,GAAG5U,MAAV;;AACA,gBAAIsE,IAAI,KAAK,MAAb,EAAqB;AACjB,qBAAOsQ,CAAC,CAAC7L,YAAF,CAAe,MAAf,CAAP;AACH,aAFD,MAEO;AACH,qBAAO6L,CAAC,CAAC7L,YAAF,CAAe,OAAf,CAAP;AACH;AACJ,WAPD;;AASA,cAAM2jB,GAAG,GAAG,SAANA,GAAM,GAAM;AACd,gBAAMhjB,CAAC,GAAGnK,KAAK,EAAf;;AACA,gBAAI+E,IAAI,KAAK,MAAb,EAAqB;AACjB;;;;AAIA,qBAAOoF,CAAC,CAACxJ,QAAF,CAAW;AAAE4wB,oBAAI,EAAE;AAAR,eAAX,EAAwBpB,UAAxB,CAAmC,MAAnC,CAAP;AACH,aAND,MAMO;AACH,qBAAOhmB,CAAC,CAACgmB,UAAF,CAAa,OAAb,CAAP;AACH;AACD;;;;;AAIH,WAfD,CAVyF,CA2BzF;;;AACA,iBAAO,KAAKjB,OAAL,CAAa4B,YAAb,CAA0B,MAAD,OAAC,CAAD;AAC5BC,oBAAQ,EAAEF,KADkB;AAE5BG,0BAAc,EAAEhxB,KAAK,GAAGwR,OAFI;AAG5Byf,wBAAY,EAAE9D,GAAG,GAAG3b;AAHQ,WAAC,EAIzB8f,UAAD,GAAe;AAAEE,uBAAW,EAAE;AAAf,WAAf,GAAuC,EAJb,CAA1B,CAAP;AAMH;;;+CAG6B;AAAA;;AAC1B,eAAKnC,UAAL,CAAgBphB,IAAhB,CAAqB,OAArB;;AACA,eAAKwjB,mBAAL,CAAyB,IAAzB,EAA+B1zB,SAA/B,CAAyC,UAAC2zB,MAAD,EAAY;AACjD,mBAAI,CAAClC,aAAL,CAAmBvhB,IAAnB,CAAwByjB,MAAxB;;AACA,mBAAI,CAAC/B,QAAL,CAAc1hB,IAAd,CAAmB,KAAnB;AACH,WAHD;AAIH;AAED;;;;;;;mCAIkB0jB,O,EAAyB;AACvC,eAAKlC,QAAL,CAAcxhB,IAAd,CAAmB0jB,OAAnB;AACH;AAED;;;;;;;gCAIelxB,M,EAAgB;AAC3B,eAAKivB,OAAL,CAAazhB,IAAb,CAAkBxN,MAAlB;AACH;AAED;;;;;;;gCAIewJ,I,EAAc;AACzB,eAAK0M,KAAL,CAAW1I,IAAX,CAAgBhE,IAAhB;AACH;AAED;;;;;;mCAGe;AACX,eAAKmlB,KAAL,CAAWnhB,IAAX,CAAgB,IAAhB;AACH;AAED;;;;;;;uCAI+C;AAAA;;AAAA,cAA3BlS,KAA2B,uEAAX,KAAK,IAAM;;AAC3C,eAAKqzB,KAAL,CAAWnhB,IAAX,CAAgB,IAAhB;;AACA,eAAKkhB,MAAL,CAAYyC,iBAAZ,CAA8B,YAAM;AAChC,mBAAI,CAACC,QAAL,CAAc,SAAd,EAAyB;AAAA,qBAAM,OAAI,CAACzC,KAAL,CAAWnhB,IAAX,CAAgB,IAAhB,CAAN;AAAA,aAAzB,EAAsDlS,KAAtD;AACH,WAFD;AAGH;AAED;;;;;;;2CAIqD;AAAA;;AAAA,cAA7BA,KAA6B,uEAAb,IAAI,EAAJ,GAAS,IAAI;;AACjD,eAAKuzB,eAAL,CAAqBrhB,IAArB,CAA0B,MAA1B;;AACA,eAAKkhB,MAAL,CAAYyC,iBAAZ,CAA8B,YAAM;AAChC,mBAAI,CAACC,QAAL,CACI,cADJ,EAEI;AAAA,qBAAM,OAAI,CAACvC,eAAL,CAAqBrhB,IAArB,CAA0B,MAA1B,CAAN;AAAA,aAFJ,EAGIlS,KAHJ;AAKH,WAND;AAOH;AACD;;;;;;;mDAI4D;AAAA;;AAAA,cAA5BA,KAA4B,uEAAX,KAAK,IAAM;;AACxD,eAAKqzB,KAAL,CAAWnhB,IAAX,CAAgB,IAAhB;;AACA,eAAKkhB,MAAL,CAAYyC,iBAAZ,CAA8B,YAAM;AAChC,mBAAI,CAACC,QAAL,CAAc,SAAd,EAAyB;AAAA,qBAAM,OAAI,CAACzC,KAAL,CAAWnhB,IAAX,CAAgB,IAAhB,CAAN;AAAA,aAAzB,EAAsDlS,KAAtD;AACH,WAFD;AAGH;AAED;;;;;;;4CAIwD;AAAA;;AAAA,cAA/BA,KAA+B,uEAAf,IAAI,EAAJ,GAAS,IAAM;;AACpD,eAAKszB,UAAL,CAAgBphB,IAAhB,CAAqB,OAArB;;AACA,eAAKkhB,MAAL,CAAYyC,iBAAZ,CAA8B,YAAM;AAChC,mBAAI,CAACC,QAAL,CACI,cADJ,EAEI;AAAA,qBAAM,OAAI,CAACxC,UAAL,CAAgBphB,IAAhB,CAAqB,OAArB,CAAN;AAAA,aAFJ,EAGIlS,KAHJ;AAKH,WAND;AAOH;AAGD;;;;;;sCAGqB;AACjB,eAAKqzB,KAAL,CAAWnhB,IAAX,CAAgB,KAAhB;;AACA,eAAKtS,aAAL,CAAmB,SAAnB;;AACA,eAAK0zB,UAAL,CAAgBphB,IAAhB,CAAqB,EAArB;;AACA,eAAKtS,aAAL,CAAmB,cAAnB;AACH;;;yCAEuB;AACpB,eAAKuzB,OAAL,CAAa4C,cAAb;AACH;AAED;;;;;;;4BAIWrd,O,EAAkB;AACzB,cAAM5E,QAAQ,GAAG,KAAK0f,SAAL,CAAejzB,QAAf,EAAjB;;AACA,cAAMy1B,YAAY,GAAGliB,QAAQ,CAACmiB,MAAT,CAAgB,CAACvd,OAAD,CAAhB,CAArB;;AACA,eAAK8a,SAAL,CAAethB,IAAf,CAAoB8jB,YAApB;AACH;AAED;;;;;;;gCAIetd,O,EAAkB;AAC7B,cAAM5E,QAAQ,GAAG,KAAK0f,SAAL,CAAejzB,QAAf,EAAjB;;AACA,cAAMy1B,YAAY,GAAGliB,QAAQ,CACxBnJ,MADgB,CAEb,UAAC2nB,GAAD;AAAA,mBACIA,GAAG,CAACL,OAAJ,KAAgBvZ,OAAO,CAACuZ,OAAxB,IAAmCK,GAAG,CAACtc,EAAJ,KAAW0C,OAAO,CAAC1C,EAD1D;AAAA,WAFa,EAKhBigB,MALgB,CAKT,CAACvd,OAAD,CALS,CAArB;;AAMA,eAAK8a,SAAL,CAAethB,IAAf,CAAoB8jB,YAApB;AACH;AAED;;;;;;;+BAIctd,O,EAAkB;AAC5B,cAAM5E,QAAQ,GAAG,KAAK0f,SAAL,CAAejzB,QAAf,EAAjB;;AACA,cAAMy1B,YAAY,GAAGliB,QAAQ,CAACnJ,MAAT,CACjB,UAAC2nB,GAAD;AAAA,mBAASA,GAAG,CAACL,OAAJ,KAAgBvZ,OAAO,CAACuZ,OAAjC;AAAA,WADiB,CAArB;;AAGA,eAAKuB,SAAL,CAAethB,IAAf,CAAoB8jB,YAApB;AACH;;;uCAGGtd,O,EAEqB;AAAA,cADrB1D,MACqB,uEADU,SACV;AAAA,cAArBkhB,IAAqB,uEAAL,KAAK;;AAErB,cAAMpiB,QAAQ,GAAG,KAAK0f,SAAL,CAAejzB,QAAf,EAAjB;;AACA,cAAM41B,mBAAmB,GAAI,UAACnhB,MAAD,EAAY;AACrC,mBAAO,UAACohB,GAAD,EAAkB;AACrB,sBAAQphB,MAAR;AACI,qBAAK,SAAL;AAAgB;AACZ,wBAAMqhB,cAAc,GAAGviB,QAAQ,CAACvM,IAAT,CACnB,UAAC+qB,GAAD;AAAA,6BAASA,GAAG,CAACL,OAAJ,KAAgBvZ,OAAO,CAACuZ,OAAjC;AAAA,qBADmB,CAAvB;AAGA,wBAAI,CAACoE,cAAL,EAAqB,OAAO,KAAP;AACrB,2BAAOD,GAAG,CAACpgB,EAAJ,KAAW0C,OAAO,CAAC1C,EAA1B;AACH;;AACD,qBAAK,QAAL;AAAe;AACX,wBAAMqgB,eAAc,GAAGviB,QAAQ,CAACvM,IAAT,CACnB,UAAC6uB,GAAD;AAAA,6BACIA,GAAG,CAACpgB,EAAJ,MACC0C,OAAO,CAACsZ,eAAR,KAA4B,YAA5B,GACKtZ,OAAO,CAAC+Z,oBADb,GAEK/Z,OAAO,CAAC1C,EAHd,CADJ;AAAA,qBADmB,CAAvB;;AAOA,wBAAI,CAACqgB,eAAL,EAAqB,OAAO,KAAP;AACrB,2BACIA,eAAc,CAACrgB,EAAf,KAAsBogB,GAAG,CAACpgB,EAA1B,IACAogB,GAAG,CAAC3D,oBAAJ,KAA6B4D,eAAc,CAACrgB,EAFhD;AAIH;;AACD;AACI;AAvBR;AAyBH,aA1BD;AA2BH,WA5B2B,CA4BzBhB,MA5ByB,CAA5B;;AA8BA,cAAMghB,YAAY,GAAG,mBAAIliB,QAAJ,EAAclK,GAAd,CAAkB,UAACwsB,GAAD,EAAS;AAC5C,gBAAI,CAACF,IAAD,IAASC,mBAAmB,CAACC,GAAD,CAAhC,EAAuC;AACnCA,iBAAG,CAACD,mBAAJ,GAA0BnhB,MAA1B;AACH;;AAED,gBAAIkhB,IAAI,IAAIC,mBAAmB,CAACC,GAAD,CAA/B,EAAsC;AAClCA,iBAAG,CAACD,mBAAJ,GAA0B,IAA1B;AACH;;AAED,mBAAOC,GAAP;AACH,WAVoB,CAArB;;AAYA,eAAK5C,SAAL,CAAethB,IAAf,CAAoB8jB,YAApB;AACH;;;wCAGGX,U,EACwC;AAAA;;AAAA,cAAxCiB,MAAwC,uEAAL,KAAK;;AAExC,cAAMryB,KAAK,GAAG,SAARA,KAAQ,GAAM;AAChB,oBAAQqyB,MAAR;AACI,mBAAK,OAAL;AACI,uBAAO,OAAI,CAACrC,YAAL,CAAkBxmB,YAAlB,CAA+B,OAA/B,CAAP;;AACJ,mBAAK,MAAL;AACI,uBAAO,OAAI,CAACwmB,YAAL,CAAkBxmB,YAAlB,CAA+B,MAA/B,CAAP;;AACJ;AACI,uBAAO,OAAI,CAACwmB,YAAL,CAAkBxmB,YAAlB,CAA+B,KAA/B,CAAP;AANR;AAQH,WATD;;AAUA,cAAM2jB,GAAG,GAAG,SAANA,GAAM,GAAM;AACd,gBAAM9X,CAAC,GAAGrV,KAAK,EAAf;;AACA,oBAAQqyB,MAAR;AACI,mBAAK,OAAL;AACI,uBAAOhd,CAAC,CAAC8a,UAAF,CAAa,OAAb,CAAP;;AACJ,mBAAK,MAAL;AACI,uBAAO9a,CAAC,CAAC8a,UAAF,CAAa,MAAb,CAAP;;AACJ;AACI,uBAAO9a,CAAC,CAAC8a,UAAF,CAAa,KAAb,CAAP;AANR;AAQH,WAVD;;AAYA,cAAItgB,QAAQ,GAAG,KAAK0f,SAAL,CAAejzB,QAAf,EAAf;;AACA80B,oBAAU,CAAClzB,OAAX,CAAmB,UAAC+kB,KAAD,EAAW;AAC1B,mBAAQpT,QAAQ,GAAG,oBAAAyiB,eAAA,CACfziB,QADe,EAEfoT,KAAK,CAACpT,QAAN,CAAelK,GAAf,CAAmB,UAAC0oB,GAAD;AAAA,qBAAS,IAAI,gBAAA5J,OAAJ,CAAY4J,GAAZ,CAAT;AAAA,aAAnB,CAFe,EAGf;AACIkE,wBAAU,EAAEtP,KAAK,CAAC/R,KADtB;AAEIshB,oBAAM,EAAExyB,KAAK,EAFjB;AAGIyyB,kBAAI,EAAEtF,GAAG;AAHb,aAHe,CAAnB;AASH,WAVD;;AAWA,eAAKoC,SAAL,CAAethB,IAAf,CAAoB4B,QAApB;AACH,S,CAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;uCAEuBogB,O,EAAiBC,K,EAAe;AACnD,cAAM3oB,OAAO,GAAG,KAAKkoB,QAAL,CAAcnzB,QAAd,EAAhB;;AACA,cAAMuT,QAAQ,GAAG,KAAK0f,SAAL,CAAejzB,QAAf,EAAjB;;AACA,cAAMu0B,KAAK,GAAG,KAAKla,KAAL,CAAWra,QAAX,EAAd;;AACA,iBAAOuT,QAAQ,CAACnJ,MAAT,CAAgB,UAAC2nB,GAAD,EAAS;;;AAC5B,gBAAMqE,UAAU,GAAG,oBAAAC,oBAAA,CACf1C,OAAO,CAACxmB,EADO,EAEfymB,KAAK,CAACzmB,EAFS,EAGf4kB,GAAG,CAAC3jB,WAAJ,CAAgBjB,EAHD,EAIf4kB,GAAG,CAAC1jB,SAAJ,CAAclB,EAJC,CAAnB,CAD4B,CAO5B;;AACA,gBAAMmpB,uBAAuB,GAAGvE,GAAG,CAACwE,WAAJ,CAAgBtQ,IAAhB,CAAqB,UAACuQ,IAAD,EAAU;;;AAC3D,kBAAMC,OAAO,GAAGD,IAAI,CAACzP,KAAL,CAAWzJ,QAAX,CAAoBiX,KAApB,CAAhB;AACA,kBAAMmC,SAAS,GACX,QAACzrB,OAAO,CAAC0rB,YAAT,MAAqB,IAArB,IAAqB,aAArB,GAAqB,MAArB,GAAqB,GAAEjxB,MAAvB,KACAuF,OAAO,CAAC0rB,YAAR,CAAqBrZ,QAArB,CAA8BkZ,IAAI,CAAC5hB,KAAnC,CAFJ;AAGA,kBAAMgiB,QAAQ,GACV,QAAC3rB,OAAO,CAACwpB,QAAT,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAE/uB,MAAnB,KACA,CAAC,CAAC8wB,IAAI,CAACzP,KAAL,CAAW/f,IAAX,CAAgB,UAAC2G,IAAD;AAAA,uBAAU1C,OAAO,CAACwpB,QAAR,CAAiBnX,QAAjB,CAA0B3P,IAA1B,CAAV;AAAA,eAAhB,CAFN;AAGA,qBAAO8oB,OAAO,IAAIC,SAAX,IAAwBE,QAA/B;AACH,aAT+B,CAAhC;AAWA,gBAAMnuB,IAAI,GAAGspB,GAAG,CAAC8E,QAAJ,GAAe,UAAf,GAA4B9E,GAAG,CAAC+E,OAAJ,EAAzC;AAEA,gBAAMC,IAAI,GACN,QAAC9rB,OAAO,CAAC+rB,SAAT,MAAkB,IAAlB,IAAkB,aAAlB,GAAkB,MAAlB,GAAkB,GAAEtxB,MAApB,KACA,CAACuF,OAAO,CAAC+rB,SAAR,CAAkB1Z,QAAlB,CAA2B7U,IAA3B,CAFL;AAGA,mBAAO2tB,UAAU,IAAIE,uBAAd,IAAyCS,IAAhD;AACH,WAzBM,CAAP;AA0BH;AAED;;;;qCACqBvzB,I,EAAY;AAC7B,iBAAOA,IAAI,CAACyzB,WAAL,KAAqB,CAArB,GACDzzB,IAAI,CAACa,QAAL,CAAc;AAAE4wB,gBAAI,EAAE;AAAR,WAAd,EAA2BpB,UAA3B,CAAsC,MAAtC,EAA8CA,UAA9C,CAAyD,KAAzD,CADC,GAEDrwB,IAAI,CAACqwB,UAAL,CAAgB,MAAhB,EAAwBA,UAAxB,CAAmC,KAAnC,CAFN;AAGH;;;4BA9eyB;AACtB;AACA,iBAAO,KAAKT,OAAL,CAAa1sB,KAApB;AACH;;;4BAEqB;AAClB,iBAAO+W,YAAY,CAACC,OAAb,CAAqB,oBAArB,CAAP;AACH;AA6CD;;;;4BACqB;AACjB,iBAAO,KAAKyV,QAAL,CAAcnzB,QAAd,EAAP;AACH;;;;MA1FoC,OAAApB,S;;AAHzC;;;uBAGa8zB,mB,EAAmB,mC,EAAA,6B,EAAA,sB;AAAA,K;;;aAAnBA,mB;AAAmB,eAAnBA,mBAAmB,K;AAAA,kBAFhB;;;;;2BAEHA,mB,EAAmB;cAH/B,OAAArc,UAG+B;eAHpB;AACR6I,oBAAU,EAAE;AADJ,S;AAGoB,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtChC;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AASA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;QAuBaiJ,O;;;;;AAgIT,yBAAoC;AAAA;;AAAA,YAAxB/I,QAAwB,uEAAJ,EAAI;;AAAA;;;;AAChC,qCAAMA,QAAN;AAhFJ;;AACO,gBAAA8X,YAAA,GAAe,KAAf,CA8E6B,CAEhC;;AACA,YAAMrW,eAAe,GAAG,wBAAAH,cAAA,CAAeC,UAAf,CAA0B,mBAAAwW,eAA1B,CAAxB;AACA,gBAAKC,YAAL,GAAoBvW,eAAe,CAACQ,SAApC;AAEA;;;;AAGA,YAAMgW,KAAK,GAAG,IAAI,UAAA3iB,MAAJ,EAAd;AAEA,YAAM4iB,YAAY,GAAG,EAArB,CAXgC,CAWP;;AACzB,YAAMC,oBAAoB,GAAG,CAAH,WAAGC,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEC,cAAN,EAAH,MAAuB,IAAvB,IAAuB,aAAvB,GAAuB,MAAvB,GAAuB,GAAIC,eAAJ,EAApB,MAAuC,IAAvC,IAAuC,aAAvC,GAAuC,MAAvC,GAAuC,GAAIC,QAAxE;AACA,YAAMC,mBAAmB,GAAG,IAA5B,CAbgC,CAaC;;AACjC,YAAMC,iBAAiB,GAAG,QAAAC,IAAA,CAAKC,WAAL,IAAoB,IAAI,QAAAD,IAAJ,EAA9C,CAdgC,CAc0B;;AAC1D,YAAME,kBAAkB,GAAG,UAA3B;AAEA;;;;AAGA,gBAAK1H,KAAL,GAAalR,QAAQ,CAACkR,KAAT,IAAkBgH,YAA/B;AACA,gBAAKlvB,QAAL,GAAgBgX,QAAQ,CAAChX,QAAT,IAAqBmvB,oBAArC,CArBgC,CAsBhC;;AACA,gBAAKU,aAAL,GAAqB7Y,QAAQ,CAAC6Y,aAAT,IAA0BL,mBAA/C;AACA,gBAAKloB,IAAL,GAAY0P,QAAQ,CAAC1P,IAAT,IAAiB,EAA7B,CAxBgC,CAyBhC;;AACA,gBAAKwoB,YAAL,GAAoB9Y,QAAQ,CAAC8Y,YAAT,IAAyBF,kBAA7C,CA1BgC,CA2BhC;;AACA,gBAAKG,SAAL,GAAiB,CAAC/Y,QAAQ,CAAC+Y,SAAT,IAAsB,EAAvB,EAA2B9uB,GAA3B,CAA+B,UAACxH,CAAD;AAAA,iBAAO,IAAI,QAAAi2B,IAAJ,CAASj2B,CAAT,CAAP;AAAA,SAA/B,CAAjB,CA5BgC,CA6BhC;;AACA,gBAAKu2B,SAAL,GAAiBhZ,QAAQ,CAACgZ,SAAT,GAAqB,IAAI,QAAAN,IAAJ,CAAS1Y,QAAQ,CAACgZ,SAAlB,CAArB,GAAoDP,iBAArE,CA9BgC,CA+BhC;;AACA,gBAAKQ,OAAL,GAAe,CAACjZ,QAAQ,CAACkZ,SAAT,GAAqB,IAAI,QAAAR,IAAJ,CAAS1Y,QAAQ,CAACkZ,SAAlB,CAArB,GAAoDT,iBAArD,KAA2E,QAAKO,SAA/F,CAhCgC,CAiChC;;AACA,gBAAKla,KAAL,GAAakB,QAAQ,CAAClB,KAAT,IAAkB,EAA/B;AACA,gBAAKqT,SAAL,GAAiBnS,QAAQ,CAACmS,SAAT,IAAsB,EAAvC;AACA,gBAAKgH,UAAL,GAAkBnZ,QAAQ,CAACmZ,UAA3B;AACA,gBAAKC,cAAL,GAAsBpZ,QAAQ,CAACoZ,cAA/B,CArCgC,CAsChC;;AACA,gBAAKC,KAAL,GAAarZ,QAAQ,CAACqZ,KAAT,IAAkB,EAA/B;AACA,gBAAKC,eAAL,GAAuBtZ,QAAQ,CAACsZ,eAAT,IAA4B,EAAnD;AACA,gBAAKC,cAAL,GAAsBvZ,QAAQ,CAACuZ,cAAT,IAA2B,EAAjD;AACA,gBAAKC,kBAAL,GAA0BxZ,QAAQ,CAACwZ,kBAAT,IAA+B,EAAzD;AACA,gBAAKC,SAAL,GAAiBzZ,QAAQ,CAACyZ,SAA1B;AACA,gBAAKC,SAAL,GAAiB1Z,QAAQ,CAAC0Z,SAAT,IAAsB,EAAvC;AACA,gBAAKC,YAAL,GAAoB,OAAA3Z,QAAQ,CAAC2Z,YAAT,MAAqB,IAArB,IAAqB,aAArB,GAAqB,MAArB,GAAqB,GAAErzB,MAAvB,IAAgC0Z,QAAQ,CAAC2Z,YAAzC,GAAwD,CAAC,CAAD,KAAC,QAAKX,SAAL,MAAc,IAAd,IAAc,aAAd,GAAc,MAAd,GAAc,GAAE74B,IAAjB,CAA5E;AACA,gBAAKy5B,OAAL,GAAe5Z,QAAQ,CAAC4Z,OAAT,IAAoB,EAAnC,CA9CgC,CA+ChC;;AACA,gBAAKV,SAAL,GAAiBlZ,QAAQ,CAACkZ,SAA1B;AACA,gBAAKW,MAAL,GAAc7Z,QAAQ,CAAC6Z,MAAvB;AACA,gBAAKC,gBAAL,GAAwB9Z,QAAQ,CAAC8Z,gBAAjC;AACA,gBAAKC,UAAL,GAAkB/Z,QAAQ,CAAC+Z,UAA3B;AACA,gBAAKC,OAAL,GAAeha,QAAQ,CAACga,OAAxB;AAGA;;;;AAGA,gBAAKlP,YAAL,GAAoB9K,QAAQ,CAAC8K,YAAT,IAAyB,IAA7C;AACA,gBAAKmP,mBAAL,GAA2Bja,QAAQ,CAACia,mBAAT,IAAgC,IAA3D;AAEA;;;;;;;AAOA;AACA;AACA;;AAEA,YAAIja,QAAQ,IAAIA,QAAQ,CAACoX,IAAzB,EAA+B;AAC3B,cAAIjmB,KAAK,CAACsB,OAAN,CAAcuN,QAAQ,CAACoX,IAAvB,KAAgCpX,QAAQ,CAACoX,IAAT,CAAc9wB,MAAlD,EAA0D;AACtD,oBAAK8wB,IAAL,GAAYpX,QAAQ,CAACoX,IAAT,CAAcntB,GAAd,CAAkB,UAACjI,OAAD;AAAA,qBAAa,IAAI,cAAAwlB,KAAJ,CAAUxlB,OAAV,CAAb;AAAA,aAAlB,EAAmD,CAAnD,CAAZ;AACH,WAFD,MAEO,IAAImP,KAAK,CAACsB,OAAN,CAAcuN,QAAQ,CAACoX,IAAvB,KAAgCpX,QAAQ,CAACoX,IAAT,CAAc9wB,MAAd,KAAyB,CAA7D,EAAgE;AACnE,oBAAK8wB,IAAL,GAAY,CAAC,IAAI,cAAA5P,KAAJ,EAAD,EAAc,CAAd,CAAZ;AACH,WAFM,MAEA;AACH,oBAAK4P,IAAL,GAAY,CAAC,IAAI,cAAA5P,KAAJ,CAAUxH,QAAQ,CAACoX,IAAnB,CAAD,EAA2B,CAA3B,CAAZ;AACH;AACJ,SARD,MAQO;AACH,kBAAKA,IAAL,GAAY,CAAC,IAAI,cAAA5P,KAAJ,EAAD,EAAc,CAAd,CAAZ;AACH;;AAGD,YAAM0S,OAAO,GAAGla,QAAQ,CAACka,OAAT,IAAoBla,QAAQ,CAACkS,QAA7C,CArFgC,CAqFsB;;AACtD,YAAI,QAAC,QAAKkF,IAAN,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAE/gB,EAAZ,MAAkB6jB,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAE5zB,MAA3B,CAAJ,EAAuC;AACnC,kBAAK8wB,IAAL,GAAY,SAAA+C,SAAA,CAAUD,OAAO,CAAC,CAAD,CAAjB,KAAyB,QAAK9C,IAA1C;AACH;;AAED,YAAMgD,SAAS,GAAG,CAAApa,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAEmX,WAAV,MAAyBnX,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAEoX,IAAnC,CAAlB;AACA,gBAAKD,WAAL,GAAmBiD,SAAS,GACtBjpB,KAAK,CAACsB,OAAN,CAAc2nB,SAAd,IACIA,SAAS,CAACnwB,GAAV,CAAc,UAACjI,OAAD;AAAA,iBAAa,IAAI,cAAAwlB,KAAJ,CAAUxlB,OAAV,CAAb;AAAA,SAAd,CADJ,GAEI,CAAC,IAAI,cAAAwlB,KAAJ,CAAU4S,SAAV,CAAD,CAHkB,GAItB,CAAC,IAAI,cAAA5S,KAAJ,EAAD,CAJN;AAOA,YAAM0K,QAAQ,gCAAQ,CAAAlS,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAEka,OAAV,KAAqB,EAA7B,sBAAsC,CAAAla,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAEkS,QAAV,KAAsB,EAA5D,EAAd;AAEAA,gBAAQ,CAAC1vB,OAAT,CAAiB,UAAA63B,MAAM,EAAI;AACvB,cAAMC,OAAO,GAAG,SAAAH,SAAA,CAAUE,MAAV,CAAhB,CADuB,CAEvB;;AACA,cAAIC,OAAO,IAAI,CAAC,QAAKnD,WAAL,CAAiBtQ,IAAjB,CAAsB,UAAAuQ,IAAI;AAAA,mBAAIA,IAAI,CAAC/gB,EAAL,KAAYikB,OAAO,CAACjkB,EAAxB;AAAA,WAA1B,CAAhB,EAAuE;AACnE;AACA,oBAAK8gB,WAAL,CAAiBlrB,IAAjB,CAAsBquB,OAAtB;AACH;AACJ,SAPD,EApGgC,CA6GhC;;AACA,YAAG,QAAKnD,WAAL,CAAiB7wB,MAAjB,IAA2B,QAAK8wB,IAAL,KAAc/wB,SAA5C,EAAsD;AAClD,kBAAK+wB,IAAL,GAAY,QAAKD,WAAL,CAAiB,CAAjB,CAAZ;AACH;AAED;;;;;;;AAOA;;;AACA,YAAMoD,cAAc,GAAG,IAAI,UAAAjlB,MAAJ,CAAW;AAAElR,cAAI,EAAE6zB,KAAK,CAAClqB,EAAd;AAAkB6d,qBAAW,EAAE,KAA/B;AAAsCC,qBAAW,EAAE,QAAK7iB;AAAxD,SAAX,EAA+EhE,QAA/E,CAAwF;AAAEP,gBAAM,EAAEC,IAAI,CAACC,IAAL,CAAUszB,KAAK,CAACpzB,OAAN,GAAgB,CAA1B,IAA+B;AAAzC,SAAxF,CAAvB;AAEA;;;;;;;AAMA,YAAM21B,kBAAkB,GAAG,CAAC,EAAExa,QAAQ,CAAC9J,WAAT,IAAwB8J,QAAQ,CAAC1b,KAAnC,CAA5B;AACA,YAAMm2B,mBAAmB,GAAG,CAAC,CAACza,QAAQ,CAAChR,WAAvC;AAEA;;;;AAGA,YAAI,CAACwrB,kBAAD,IAAuBC,mBAA3B,EAAgD;AAC5C;;;;;AAKA,kBAAKzrB,WAAL,GAAmBgR,QAAQ,CAAChR,WAA5B;AACA,kBAAKC,SAAL,GAAiB+Q,QAAQ,CAAC/Q,SAA1B;AACH,SARD,MAQO,IAAIurB,kBAAJ,EAAwB;AAC3B;;;;AAIA,kBAAKxrB,WAAL,GAAmB,IAAI,UAAAsG,MAAJ,CAAW;AAC1BlR,gBAAI,EAAG,CAAC4b,QAAQ,CAAC9J,WAAT,IAAwB8J,QAAQ,CAAC1b,KAAlC,IAA2C,IADxB;AAE1BsnB,uBAAW,EAAE,KAFa;AAG1BC,uBAAW,EAAE,QAAK7iB;AAHQ,WAAX,CAAnB;AAKA,kBAAKiG,SAAL,GAAiB,IAAI,UAAAqG,MAAJ,CAAW;AACxBlR,gBAAI,EAAG,CAAC4b,QAAQ,CAACpK,SAAT,IAAsBoK,QAAQ,CAACyR,GAAhC,IAAsC,IADrB;AAExB7F,uBAAW,EAAE,KAFW;AAGxBC,uBAAW,EAAE,QAAK7iB;AAHM,WAAX,CAAjB;AAKH,SAfM,MAeA;AACH;;;;AAIA,kBAAKgG,WAAL,GAAmBurB,cAAnB;AACA,kBAAKtrB,SAAL,GAAiBsrB,cAAc,CAACt1B,QAAf,CAAwB;AAAEJ,mBAAO,EAAE;AAAX,WAAxB,CAAjB;AAA0D;AAC7D;AAED;;;;;;;;;AAOA,YAAK,QAAKoK,SAAL,CAAepK,OAAf,GAAyB,CAA1B,KAAiC,CAAjC,IAAsC,QAAKoK,SAAL,CAAezK,MAAf,GAAwB,CAAlE,EAAqE;AACjE;AACA,kBAAKyK,SAAL,GAAiB,QAAKA,SAAL,CAAejK,QAAf,CAAwB;AAAER,kBAAM,EAAE,CAAV;AAAaC,kBAAM,EAAEC,IAAI,CAACg2B,KAAL,CAAW,QAAKzrB,SAAL,CAAepK,OAAf,GAAyB,CAApC,IAAyC;AAA9D,WAAxB,CAAjB;AACH;AAID;;;;;;;;;AAOA,gBAAK81B,aAAL,GAAqB3a,QAAQ,CAAC2a,aAAT,IAA0B1C,KAAK,CAACniB,OAArD;AAGA;;;;;;;;AAOA,YAAI,aAAakK,QAAjB,EAA2B;AACvB,kBAAK4a,OAAL,GAAe5a,QAAQ,CAAC4a,OAAxB;AACH,SAFD,MAEO;AACH,kBAAKA,OAAL,GAAe,CAAC,CAAC5a,QAAQ,CAAC4a,OAAX,IAAsB,QAAKz1B,QAAL,GAAgB,KAAK,EAA1D;AACH,SA3M+B,CA8MhC;;;AACA,YAAI,CAAC,QAAK6yB,YAAN,IAAsB,QAAK4C,OAA3B,IAAsC,QAAK5xB,QAA/C,EAAyD;AACrD;;;AAGA,kBAAKgG,WAAL,GAAmB,QAAKA,WAAL,CAAiBlB,YAAjB,CAA8B,KAA9B,CAAnB;AACH;AAED;;;;;AAGC,YAAI+a,MAAM,GAAG7I,QAAQ,CAAC6I,MAAtB,CAzN+B,CA0N/B;;AACA,YAAI,CAAC7I,QAAQ,CAAC6I,MAAd,EAAsB;AACnBA,gBAAM,GAAG,UAAT;AACF,SA7N8B,CA8N/B;;;AACA,YAAI7I,QAAQ,CAAC6a,OAAT,IAAoB7a,QAAQ,CAAC6a,OAAT,KAAqB,WAA7C,EAA0D;AACvDhS,gBAAM,GAAG,UAAT;AACF;;AACD,YAAMiS,cAAc,GAAG,EAAvB;;AACA,gBAAK3D,WAAL,CAAiB30B,OAAjB,CAAyB,UAAA40B,IAAI,EAAI;AAC9B0D,wBAAc,CAAC1D,IAAI,CAAC5hB,KAAN,CAAd,GAA6BqT,MAA7B;AACH,SAFA,EAnO+B,CAsOhC;;;AACC,gBAAKA,MAAL,GAAcA,MAAd;AACA,gBAAKkS,eAAL,GAAuB/a,QAAQ,CAAC+a,eAAT,IAA4B,EAAnD;AAED;;;;;;AAMA,gBAAKC,QAAL,GAAgB,CAAChb,QAAQ,CAACgb,QAAT,YAA6B7pB,KAA7B,GAAqC6O,QAAQ,CAACgb,QAA9C,GAAyD,EAA1D,EAA8D/wB,GAA9D,CACZ,UAACxH,CAAD;AAAA,iBAAO,IAAI,WAAAw4B,aAAJ,CAAkBx4B,CAAlB,CAAP;AAAA,SADY,CAAhB;AAMA;;;;;;;;AAOA,YAAMy4B,aAAa,GAAG/pB,KAAK,CAACsB,OAAN,CAAcuN,QAAQ,CAACmb,KAAvB,IAChBnb,QAAQ,CAACmb,KADO,GAEhB,OAAArwB,MAAA,CACE,OAAAqH,OAAA,CACIf,MAAM,CAACpH,IAAP,CAAYgW,QAAQ,CAACmb,KAAT,IAAkB,EAA9B,EAAkClxB,GAAlC,CAAsC,UAACmtB,IAAD,EAAU;AAC5C,iBAAO,OAAAjlB,OAAA,CAAQf,MAAM,CAACgqB,MAAP,CAAcpb,QAAQ,CAACmb,KAAT,CAAe/D,IAAf,CAAd,CAAR,CAAP;AACH,SAFD,CADJ,CADF,CAFN;AASA,gBAAK+D,KAAL,GAAaD,aAAb;AAEA;;;;;;;AAMA,gBAAKhQ,gBAAL,GAAwBlL,QAAQ,CAACkL,gBAAT,IAA6B,IAArD;AACA,gBAAKG,eAAL,GAAuBrL,QAAQ,CAACqL,eAAT,IAA4B,IAAnD;AACA,gBAAKgQ,gBAAL,GAAwBrb,QAAQ,CAACqb,gBAAT,IAA6B,IAArD;AACA,gBAAKpQ,gBAAL,GAAwBjL,QAAQ,CAACsb,cAAT,GAA0B,IAAI,UAAAhmB,MAAJ,CAAW;AAAClR,cAAI,EAAE4b,QAAQ,CAACsb,cAAT,GAA0B,IAAjC;AAAuC1P,qBAAW,EAAE,KAApD;AAA2DC,qBAAW,EAAE,QAAK7iB;AAA7E,SAAX,CAA1B,GAA+H,IAAvJ;AACA,gBAAKoiB,qBAAL,GAA6BpL,QAAQ,CAACoL,qBAAT,IAAkC,IAA/D;AACA,gBAAKmQ,cAAL,GAAsBvb,QAAQ,CAACub,cAAT,IAA2B,IAAjD;AACA,gBAAKvQ,mBAAL,GAA2BhL,QAAQ,CAACgL,mBAAT,IAAgC,IAA3D;AACA,gBAAKD,iBAAL,GAAyB/K,QAAQ,CAAC+K,iBAAT,IAA8B,IAAvD;AACA,gBAAKsH,eAAL,GAAuBrS,QAAQ,CAACqS,eAAT,IAA4B,IAAnD;AACA,gBAAKS,oBAAL,GAA4B9S,QAAQ,CAAC8S,oBAArC;AACA,gBAAK0I,kBAAL,GAA0Bxb,QAAQ,CAACwb,kBAAnC;AACA,gBAAKtS,YAAL,GAAoBlJ,QAAQ,CAACkJ,YAAT,IAA0B,CAAC,CAAC,QAAKmJ,eAAP,IAA0B,CAAC,CAAC,QAAKtH,iBAA3D,IAAiF,IAArG;AACA,gBAAKI,iBAAL,GAAyBnL,QAAQ,CAACmL,iBAAT,IAA8B,EAAvD;AACA,gBAAKjV,WAAL,GAAmB8J,QAAQ,CAAC9J,WAA5B;AACA,gBAAKN,SAAL,GAAiBoK,QAAQ,CAACpK,SAA1B;AAEA;;;;;AAIA,YAAIoK,QAAQ,CAAC1P,IAAT,IAAiB,CAAC,QAAK+oB,KAAL,CAAWzxB,IAAX,CAAgB,UAACnF,CAAD;AAAA,iBAAOA,CAAC,CAAC4G,IAAF,KAAW,aAAlB;AAAA,SAAhB,CAAtB,EAAwE;AACpE,kBAAKgwB,KAAL,gCACO,QAAKA,KADZ,IAEI;AACIhwB,gBAAI,EAAE,aADV;AAEIjF,gBAAI,EAAE,CAFV;AAGI2X,mBAAO,EAAEiE,QAAQ,CAAC1P,IAHtB;AAIImrB,kBAAM,EAAE,QAAKzC,SAAL,CAAexjB;AAJ3B,WAFJ;AASH;AAED;;;;;;AAIA,gBAAKghB,mBAAL,GAA2BxW,QAAQ,CAACwW,mBAAT,IAAgC,IAA3D;AAlTgC;AAmTnC;AApUD;;;;;;AAkiBA;;;gCAGY;AACR,iBAAO,IAAIzN,OAAJ,CAAY,KAAKvI,MAAL,EAAZ,CAAP;AACH;AAED;;;;;;oCAG+B;AAAA,cAAdkb,MAAc,uEAAL,KAAK;AAC3B,iBAAO,IAAI3S,OAAJ,CAAY,MAAD,OAAC,CAAD,kBACX,KAAKvI,MAAL,EADW,CAAC,EACC;AAChBnK,cAAE,EAAEqlB,MAAM,GAAG,KAAKrlB,EAAR,GAAa;AADP,WADD,CAAZ,CAAP;AAIH;AAED;;;;;;;;6BAKYwS,M,EAA8D;AAAA,cAA/B8S,IAA+B,uEAAF,EAAE;AACtE,iBAAO,KAAKrb,QAAL,CAAciW,IAAd,CACH,KAAKlgB,EADF,EACMwS,MAAM,IAAI,QADhB,EAEH8S,IAFG,CAAP;AAIH;AAED;;;;;;kCAG6C;AAAA,cAA/BA,IAA+B,uEAAF,EAAE;;AACzC,cAAI,KAAKtlB,EAAT,EAAa;AACT,mBAAO,KAAKiK,QAAL,WAAqB,KAAKjK,EAA1B,EAA8B,MAAF,OAAE,CAAF,EAAE,EAAKslB,IAAL,CAA9B,CAAP,CADS,CAGT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACH;AACJ;AAED;;;;;;iCAGa;;;AACT,cAAIhhB,IAAI,sEAAR,CADS,CAET;;;AACAA,cAAI,CAAC0e,KAAL,GAAaloB,KAAK,CAACsB,OAAN,CAAckI,IAAI,CAAC0e,KAAnB,IAA4B1e,IAAI,CAAC0e,KAAL,CAAWruB,MAAX,CAAkB,UAAC4wB,IAAD;AAAA,mBAAUA,IAAI,CAACvyB,IAAL,KAAc,aAAxB;AAAA,WAAlB,CAA5B,GAAuFsR,IAAI,CAAC0e,KAAzG,CAHS,CAIT;;AACA1e,cAAI,CAACyc,IAAL,GAAYzc,IAAI,CAACyc,IAAL,CAAU5W,MAAV,EAAZ;AAIA7F,cAAI,CAACqe,SAAL,GAAiBre,IAAI,CAACqe,SAAL,CAAexY,MAAf,EAAjB;AACA7F,cAAI,CAACse,OAAL,GAAe,OAAAte,IAAI,CAACse,OAAL,MAAY,IAAZ,IAAY,aAAZ,GAAY,MAAZ,GAAY,GAAEzY,MAAd,IAAuB7F,IAAI,CAACse,OAAL,CAAazY,MAAb,EAAvB,GAA8C7F,IAAI,CAACse,OAAlE,CAVS,CAWT;;AACAte,cAAI,CAACoe,SAAL,GAAiBpe,IAAI,CAACoe,SAAL,CAAe9uB,GAAf,CAAmB,UAACxH,CAAD;AAAA,mBAAaA,CAAC,CAAC+d,MAAF,EAAb;AAAA,WAAnB,CAAjB,CAZS,CAcT;;AACA7F,cAAI,GAAG,mBAAAkhB,sBAAA,CAAuBlhB,IAAvB,CAAP;;AAEA,cAAGA,IAAI,CAACmhB,eAAR,EAAwB;AACpBnhB,gBAAI,CAACwQ,iBAAL,sBAA6BxQ,IAAI,CAACmhB,eAAlC;AACA,mBAAOnhB,IAAI,CAACmhB,eAAZ;AACH;;AAED,iBAAOnhB,IAAP;AACH;AAED;;;;;;oCAGgB;;;AACZ,cAAIA,IAAI,sEAAR,CADY,CAGZ;;;AACAA,cAAI,CAAC2X,OAAL,GAAe,EAAf;;AACA,cAAI3X,IAAI,CAACtE,EAAT,EAAa;AACTsE,gBAAI,CAAC2X,OAAL,GAAe3X,IAAI,CAACtE,EAApB;AACAsE,gBAAI,CAACohB,aAAL,GAAqB,KAAK5E,WAAL,CAAiBltB,GAAjB,CAAqB,UAAC6C,IAAD,EAAQ;AAAC,qBAAOA,IAAI,CAACqmB,UAAZ;AAAuB,aAArD,EAAuD1lB,IAAvD,CAA4D,IAA5D,CAArB;AACAkN,gBAAI,CAACqhB,SAAL,GAAiB,KAAK7E,WAAL,CAAiBltB,GAAjB,CAAqB,UAAC6C,IAAD,EAAQ;AAAC,qBAAOA,IAAI,CAAC0I,KAAZ;AAAkB,aAAhD,EAAkD/H,IAAlD,CAAuD,IAAvD,CAAjB;AACAkN,gBAAI,CAACke,aAAL,GAAqB,CAAH,WAAG,KAAKzB,IAAR,MAAY,IAAZ,IAAY,aAAZ,GAAY,MAAZ,GAAY,GAAE1P,QAAX,MAAmB,IAAnB,IAAmB,aAAnB,GAAmB,MAAnB,GAAmB,GAAErR,EAA1C;AACH;AAED;;;;;;;AAKAsE,cAAI,CAACshB,OAAL,GAAe,KAAKjT,YAApB,CAjBY,CAiBsB;;AAClCrO,cAAI,CAACqO,YAAL,GAAoB,CAAC,KAAKA,YAAN,CAApB,CAlBY,CAkB6B;AACzC;AAEA;;AACA,iBAAOrO,IAAI,CAAC3L,WAAZ;AACA,iBAAO2L,IAAI,CAAC1L,SAAZ;AACA0L,cAAI,CAACrW,KAAL,GAAa,KAAK0K,WAAL,CAAiB8G,OAA9B;AACA6E,cAAI,CAAC8W,GAAL,GAAW,KAAKxiB,SAAL,CAAe6G,OAA1B;AACA6E,cAAI,CAACuhB,SAAL,GAAiB,KAAKltB,WAAL,CAAiB8G,OAAlC,CA1BY,CA0B+B;;AAC3C6E,cAAI,CAACwhB,OAAL,GAAe,KAAKltB,SAAL,CAAe6G,OAA9B,CA3BY,CA2B2B;AAEvC;;AACA,iBAAO6E,IAAI,CAACggB,aAAZ;AACAhgB,cAAI,CAACyhB,aAAL,GAAqB,KAAKC,cAAL,CAAoBvmB,OAAzC,CA/BY,CAiCZ;AACA;;AACA6E,cAAI,CAACqgB,QAAL,GAAgB,KAAKsB,cAArB;AACA3hB,cAAI,CAACiO,YAAL,GAAoB,KAAKA,YAAzB;AACA,iBAAOjO,IAAI,CAAC2hB,cAAZ,CArCY,CAuCZ;AACA;;AACA3hB,cAAI,CAACoe,SAAL,GAAiB,KAAKwD,YAAL,CAAkBtyB,GAAlB,CAAsB,UAACxH,CAAD;AAAA,mBAAaA,CAAC,CAAC+d,MAAF,GAAW/d,CAAC,CAAC+d,MAAF,EAAX,GAAwB/d,CAArC;AAAA,WAAtB,CAAjB,CAzCY,CA2CZ;;AACAkY,cAAI,CAACqe,SAAL,GAAiBre,IAAI,CAACqe,SAAL,CAAexY,MAAf,GAAwB7F,IAAI,CAACqe,SAAL,CAAexY,MAAf,EAAxB,GAAkD7F,IAAI,CAACqe,SAAxE;AACAre,cAAI,CAACse,OAAL,GAAete,IAAI,CAACse,OAAL,CAAazY,MAAb,GAAsB7F,IAAI,CAACse,OAAL,CAAazY,MAAb,EAAtB,GAA8C7F,IAAI,CAACse,OAAlE,CA7CY,CA+CZ;;AACA,iBAAOte,IAAI,CAAC+e,SAAZ;AACA/e,cAAI,CAAC6hB,UAAL,GAAkB,KAAKC,aAAvB,CAjDY,CAmDZ;AAEA;;AACA9hB,cAAI,CAACuX,QAAL,GAAgB,KAAKiF,WAAL,CAAiBltB,GAAjB,CAAqB,UAAC6C,IAAD,EAAQ;AAAC,mBAAOA,IAAI,CAAC0I,KAAZ;AAAkB,WAAhD,CAAhB;AACA,iBAAOmF,IAAI,CAACyc,IAAZ,CAvDY,CAyDZ;;AACAzc,cAAI,GAAG,mBAAAkhB,sBAAA,CAAuBlhB,IAAvB,CAAP;;AAGA,cAAGA,IAAI,CAACmhB,eAAR,EAAwB;AACpBnhB,gBAAI,CAACwQ,iBAAL,sBAA6BxQ,IAAI,CAACmhB,eAAlC;AACA,mBAAOnhB,IAAI,CAACmhB,eAAZ;AACH,WAhEW,CAkEZ;;;AACA,iBAAOnhB,IAAI,CAACxa,IAAZ;AACA,iBAAOwa,IAAI,CAACnF,KAAZ;AACA,iBAAOmF,IAAI,CAACqd,YAAZ,CArEY,CAsEZ;AACA;;AAEA,iBAAOrd,IAAP;AACH;;;kCAEa;;;AACV,cAAI,CAAC,IAAD,KAAK,MAAI,KAAKkO,MAAT,MAAe,IAAf,IAAe,aAAf,GAAe,MAAf,GAAe,GAAE3K,QAAF,CAAW,SAAX,CAApB,CAAJ,EAA+C;AAC3C,mBAAO,WAAP;AACH;;AACD,cAAM4a,YAAY,GAAG,KAAKA,YAA1B;;AACA,cAAIA,YAAY,KAAK,UAAjB,IAA+B,KAAK4D,YAAxC,EAAsD;AAClD,mBAAO,UAAP;AACH;;AACD,iBAAO5D,YAAP;AACH;AAED;;;;kDACiC0C,kB,EAAyD;AACtF,cAAMp3B,IAAI,GAAG,CAAAo3B,kBAAkB,SAAlB,IAAAA,kBAAkB,WAAlB,GAAkB,MAAlB,GAAAA,kBAAkB,CAAEvxB,GAApB,CAAwB,UAAA0yB,SAAS;AAAA,mBAAIA,SAAJ;AAAA,WAAjC,EACZrwB,IADY,CACP,UAACC,CAAD,EAAIC,CAAJ;AAAA,mBAAU,IAAIxI,IAAJ,CAASuI,CAAC,CAAC2J,WAAF,GAAgB,IAAzB,EAA+B0mB,OAA/B,KAA2C,IAAI54B,IAAJ,CAASwI,CAAC,CAAC0J,WAAF,GAAgB,IAAzB,EAA+B0mB,OAA/B,EAArD;AAAA,WADO,EAEZlqB,OAFY,GAGZmqB,KAHY,GAIZ3mB,WAJY,IAIE,IAJf;AAKA,iBAAO,IAAI,UAAAZ,MAAJ,CAAW;AAAClR,gBAAI,EAAJA,IAAD;AAAOwnB,uBAAW,EAAE,KAApB;AAA2BC,uBAAW,EAAE,KAAK7iB;AAA7C,WAAX,CAAP;AACH;;;4BA/sB0B;AACvB,iBAAO,KAAK8zB,iBAAZ;AACH,S;0BAE2B14B,I,EAAc;AACtC,eAAK04B,iBAAL,GAAyB14B,IAAzB;AACH;AAgUD;;;;4BACyB;AACrB,iBAAO,wBAAAkd,cAAA,CAAeC,UAAf,CAA0BwH,OAA1B,CAAP;AACH;AAED;;;;4BACuB;AAAA;;AACnB;AACA,cAAI,KAAKiP,YAAT,EAAuB;AACnB,mBAAO,IAAP;AACH;;AACD,iBAAO,CAAC,KAAKb,WAAL,CAAiBtQ,IAAjB,CAAsB,UAAAuQ,IAAI;AAAA,mBAAIA,IAAI,CAAC2F,SAAL,CAAe;AACjDh4B,oBAAM,EAAE,OAAI,CAACiK,WADoC;AAEjD7J,sBAAQ,EAAE,OAAI,CAACA,QAFkC;AAGjDuY,kBAAI,EAAE,OAAI,CAACsb;AAHsC,aAAf,CAAJ;AAAA,WAA1B,CAAR;AAKH;AAED;;;;4BACmB;AACf,iBAAO,CAAC,KAAKvB,QAAN,IAAkB,CAAC,KAAKuF,SAA/B;AACH;AAED;;;;4BACuB;AACnB,iBAAO,OAAAlyB,MAAA,CAAO,CAAC,KAAKkuB,SAAN,EAAiB1C,MAAjB,CAAwB,KAAKyC,SAA7B,CAAP,EAAgD,OAAhD,CAAP;AACH;AAED;;;;4BACwB;AACpB,iBAAO,KAAKD,YAAL,CAAkBhtB,WAAlB,EAAP;AACH;AAED;;;;4BAC2B;AACvB,iBAAO,OAAAyH,WAAA,CAAY,KAAKulB,YAAjB,CAAP;AACH;AAED;;;;4BACwB;AACpB,iBAAO1nB,MAAM,CAACpH,IAAP,CAAY,KAAK0vB,SAAL,IAAkB,EAA9B,CAAP;AACH;AAED;AAAiC;;;;4BACjB;AACZ,iBAAO,KAAKZ,YAAZ;AACH;AAED;;;;4BAC2B;AACvB,cAAK,KAAK7pB,SAAL,CAAepK,OAAf,GAAyB,CAA1B,KAAiC,CAArC,EAAwC;AACpC;AACA,mBAAO,KAAKoK,SAAL,CAAehK,QAAf,CAAwB;AAAE6Q,qBAAO,EAAE;AAAX,aAAxB,CAAP;AACH,WAJsB,CAKvB;;;AACA,iBAAO,KAAK7G,SAAZ;AACH;AAED;;;;4BACmB;AACf;;;;AAIA,cAAMguB,iBAAiB,GAAG,KAAK9F,WAAL,CAAiBtQ,IAAjB,CAAsB,UAAAuQ,IAAI;AAAA,mBAAIA,IAAI,CAACj3B,IAAL,CAAU2L,WAAV,GAAwBoS,QAAxB,CAAiC,SAAjC,CAAJ;AAAA,WAA1B,CAA1B;;AACA,cAAI+e,iBAAJ,EAAuB;AACnB,mBAAO,IAAP;AACH;;AAED,cAAI,KAAKpU,MAAL,CAAY3K,QAAZ,CAAqB,SAArB,CAAJ,EAAqC;AACjC,mBAAO,IAAP;AACH;;AAED,iBAAO,KAAP;AACH;AAED;;;;4BACsB;AAClB,cAAM0d,IAAI,GAAG,CAAC,KAAKvC,KAAL,IAAc,EAAf,EAAmBzxB,IAAnB,CAAwB,UAACnF,CAAD;AAAA,mBAAOA,CAAC,CAAC4G,IAAF,KAAW,aAAlB;AAAA,WAAxB,CAAb;AACA,iBAAOuyB,IAAI,GAAGA,IAAI,CAAC7f,OAAR,GAAkB,EAA7B;AACH;AAED;;;;4BAC4B;AACxB;AACA,iBAAO,KAAKif,QAAL,GAAgB,KAAKA,QAAL,CAAc9wB,KAAd,GAAsBoC,IAAtB,CAA2B,UAACC,CAAD,EAAIC,CAAJ,EAAU;AACxD,gBAAI,CAAAD,CAAC,SAAD,IAAAA,CAAC,WAAD,GAAC,MAAD,GAAAA,CAAC,CAAE2wB,aAAH,KAAmB1wB,CAAC,SAAD,IAAAA,CAAC,WAAD,GAAC,MAAD,GAAAA,CAAC,CAAE0wB,aAAtB,CAAJ,EAAyC,OAAO,CAAP;AACzC,gBAAI,CAAA1wB,CAAC,SAAD,IAAAA,CAAC,WAAD,GAAC,MAAD,GAAAA,CAAC,CAAE0wB,aAAH,KAAmB3wB,CAAC,SAAD,IAAAA,CAAC,WAAD,GAAC,MAAD,GAAAA,CAAC,CAAE2wB,aAAtB,CAAJ,EAAyC,OAAO,CAAC,CAAR;AAEzC,mBAAO,CAAP;AACH,WALsB,CAAhB,GAKF,EALL;AAMH;AAED;;;;4BAC4B;AACxB,iBAAO,IAAI,UAAA5nB,MAAJ,CAAW;AAAElR,gBAAI,EAAE,KAAKu2B,aAAL,GAAqB,IAA7B;AAAmC/O,uBAAW,EAAE,KAAhD;AAAuDC,uBAAW,EAAE,KAAK7iB;AAAzE,WAAX,CAAP;AACH;;;4BAEsB;AACnB,iBAAO,UAAAm0B,uBAAA,CAAwB,KAAKn0B,QAA7B,CAAP;AACH;AAED;;;;4BACsB;AAClB,iBAAO,KAAKgG,WAAL,CAAiBtJ,UAAjB,CAA4B,aAA5B,CAAP;AACH;AAED;;;;;;4BAGoB;AAChB,iBAAOhB,IAAI,CAAC04B,GAAL,CAAS,KAAKpuB,WAAL,CAAiBlB,YAAjB,CAA8B,QAA9B,EAAwCuvB,QAAxC,CAAiD,KAAKC,gBAAtD,EAAwE,SAAxE,CAAT,CAAP;AACH;AAED;;;;4BACkB;AACd,iBAAO,KAAKtuB,WAAL,CAAiBjB,EAAxB;AACH;AAED;;;;4BACuB;AACnB,iBAAO,KAAKgrB,SAAL,CAAehxB,MAAf,CAAsB,UAACwE,CAAD,EAAIuE,CAAJ;AAAA,mBAAUvE,CAAC,IAAIuE,CAAC,CAACysB,QAAjB;AAAA,WAAtB,EAAiD,KAAjD,CAAP;AACH;AAED;;;;4BACuB;AACnB,iBAAO,CAAC,CAAC,KAAKvC,QAAL,CAAc10B,MAAvB;AACH;AAED;;;;;;;4BAIkB;AACd,iBAAO,KAAK+P,EAAZ;AACH;AAED;;;;;;4BAGkB;AACd,iBAAO,KAAK+gB,IAAL,CAAU/gB,EAAjB;AACH;AAED;;;;4BACgB;AACZ,iBAAO,KAAK+gB,IAAZ;AACH;AAED;;;;4BAC+B;AAC3B,cAAOoG,YAAY,GAAG,UAAA3vB,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoBwK,MAApB,CAA2B,KAAKxF,QAAhC,CAAtB,CAD2B,CACwC;;AAEnE,cAAI,UAAA6E,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoBy5B,YAApB,CAAiC,KAAKzuB,WAAL,CAAiB6G,aAAjB,CAA+B;AAAEhR,mBAAO,EAAE;AAAX,WAA/B,CAAjC,CAAJ,EAAuF;AACnF,mBAAO,QAAP;AACH,WAFD,MAEO,IAAI,UAAAgJ,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoBy5B,YAApB,CAAiC,KAAKzuB,WAAtC,CAAJ,EAAwD;AAC3D,mBAAO,UAAP;AACH,WAFM,MAEA,IAAI,UAAAnB,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoBy5B,YAApB,CAAiC,KAAKzuB,WAAL,CAAiB/J,QAAjB,CAA0B;AAAEJ,mBAAO,EAAE;AAAX,WAA1B,CAAjC,CAAJ,EAAkF;AACrF,mBAAO,SAAP;AACH,WAFM,MAEA,IAAI,UAAAgJ,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoBy5B,YAApB,CAAiC,KAAKzuB,WAAL,CAAiB/J,QAAjB,CAA0B;AAAEJ,mBAAO,EAAE,KAAKM;AAAhB,WAA1B,CAAjC,CAAJ,EAA6F;AAChG,mBAAO,aAAP;AACH,WAFM,CAGP;AAHO,eAIF,IAAGq4B,YAAY,CAAC1vB,YAAb,CAA0B,KAA1B,EAAiC7I,QAAjC,CAA0C;AAAEJ,qBAAO,EAAE;AAAX,aAA1C,EAA0D64B,WAA1D,CAAsE,KAAK1uB,WAA3E,EAAwF,KAAxF,CAAH,EAAoG;AACrG,qBAAO,mBAAP;AACH;;AAED,iBAAO,MAAP;AACH;AAED;;;;4BACoB;AAChB,cACI,KAAK6Z,MAAL,IACA,KAAKA,MAAL,CAAYrhB,OAAZ,CAAoB,WAApB,KAAoC,CAFxC,EAGE;AACE,mBAAO,IAAP;AACH;;AAED,iBAAO,KAAP;AACH;AAED;;;;4BACsB;AAClB,2BAAU,KAAKwH,WAAL,CAAiBtJ,UAAjB,CAA4B,OAA5B,CAAV,gBAAoD,KAAK43B,gBAAL,CAAsB53B,UAAtB,CAAiC,OAAjC,CAApD;AACH;AAED;;;;4BACqB;AACjB,iBAAO,KAAKsJ,WAAL,CAAiBtJ,UAAjB,CAA4B,OAA5B,CAAP;AACH;AAED;;;;4BACmB;AACf,iBAAO,KAAKuJ,SAAL,CAAevJ,UAAf,CAA0B,OAA1B,CAAP;AACH;AAED;;;;4BACwB;AACpB,iBAAO,OAAA0F,gBAAA,CAAiB,KAAKjG,QAAtB,CAAP;AACH;AAED;AACA;AACA;AACA;;;;4BAC0B;AACtB,cAAI,KAAKgyB,WAAL,CAAiB7wB,MAAjB,KAA4B,CAAhC,EAAmC;AAC/B,mBAAO,aAAP;AACH,WAFD,MAEO;AACH,mBAAO,KAAK6wB,WAAL,CAAiBltB,GAAjB,CAAqB,UAAAmtB,IAAI;AAAA,qBAAIA,IAAI,CAACjE,UAAT;AAAA,aAAzB,EAA8C1lB,IAA9C,CAAmD,IAAnD,CAAP;AACH;AACJ;AAED;;;;4BACgB;AACZ,iBAAO,KAAK8Z,KAAL,CAAWkI,KAAX,CAAiBtvB,IAAxB;AACH;;;4BAkLuB;AACpB,iBAAO,OAAAoP,4BAAA,CAA6B,KAAKP,WAAlC,CAAP;AACH;;;4BAC+B;AAC5B,iBAAO,OAAAQ,+BAAA,CAAgC,KAAKR,WAArC,CAAP;AACH;;;4BAEuB;AACpB,iBAAO,OAAAO,4BAAA,CAA6B,KAAKouB,yBAAL,CAA+B,KAAKnC,kBAApC,CAA7B,CAAP;AACH;;;;MA10BwB,iBAAAzb,a;;AAA7B;AA60BA;;;;;AAIA,aAAgB6d,mBAAhB,CAAoCC,UAApC,EAAiE;AAAA;;AAAA;AAGzD,YAAMC,MAAM,GAAGD,UAAU,CAAC7yB,MAAX,CACX,UAAC+yB,KAAD;AAAA,iBACIA,KAAK,CAACC,WAAN,KAAsBH,UAAU,CAACp7B,GAAD,CAAV,CAAcu7B,WAApC,IACAD,KAAK,CAACb,aAAN,KAAwBW,UAAU,CAACp7B,GAAD,CAAV,CAAcy6B,aAF1C;AAAA,SADW,CAAf;;AAKA,YAAIY,MAAM,CAACx3B,MAAP,GAAgB,CAApB,EAAuB;AACnB,cAAMge,QAAQ,GAAGuZ,UAAU,CAAC7yB,MAAX,CACb,UAAC+yB,KAAD;AAAA,mBACI,EAAEA,KAAK,CAACC,WAAN,KAAsBH,UAAU,CAACp7B,GAAD,CAAV,CAAcu7B,WAApC,IACED,KAAK,CAACb,aAAN,KAAwBW,UAAU,CAACp7B,GAAD,CAAV,CAAcy6B,aAD1C,CADJ;AAAA,WADa,CAAjB;AAKA5Y,kBAAQ,CAACrY,IAAT,CAAc,IAAI,WAAAgvB,aAAJ,CAAkB,MAAD,OAAC,CAAD,kBACxB4C,UAAU,CAACp7B,GAAD,CADc,CAAC,EACZ;AAChBL,iBAAK,EAAE,OAAA+P,OAAA,CAAQ2rB,MAAM,CAAC7zB,GAAP,CAAW,UAAA8zB,KAAK;AAAA,qBAAIA,KAAK,CAAC37B,KAAV;AAAA,aAAhB,CAAR,CADS;AAEhBkyB,wBAAY,EAAE,OAAI,CAACtlB,WAAL,CAAiBjB,EAFf;AAGhBkwB,4BAAgB,EAAE,OAAI,CAACA;AAHP,WADY,CAAlB,CAAd;AAMAJ,oBAAU,GAAGvZ,QAAb;AACA7hB,aAAC,GAAG,CAAJ;AACH;;AAtBwD;AAAA;;AAC7D;AACA,WAAK,IAAIA,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGo7B,UAAU,CAACv3B,MAA/B,EAAuC7D,CAAC,EAAxC,EAA4C;AAAA,eAAnCA,CAAmC;AAqB3C;;AACD,aAAOo7B,UAAP;AACH;;AAzBD;;;;;;;;;;;;;;;;;;;AC11BA,QAAYK,cAAZ;;AAAA,eAAYA,cAAZ,EAA0B;AACtB;AACA;AACA;AACA;AACH,KALD,EAAYA,cAAc,GAAd,QAAAA,cAAA,aAAAA,cAAA,GAAc,EAAd,CAAZ;;;;;;;;;;;;;;;;;;;;;AClCA;AAAA;AAAA;;AAQA;AAAA;AAAA;;AAQA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAMA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAEA,QAAMC,MAAM,GAAG,CAAf;AACA,QAAMC,IAAI,GAAG,EAAb;AACA,QAAMC,GAAG,GAAG,KAAKD,IAAjB;AACA,QAAME,IAAI,GAAG,IAAID,GAAjB;AACA,QAAME,KAAK,GAAG,KAAKF,GAAnB;AAEA,QAAMG,YAAY,GAAmC;AACjDh4B,WAAK,EAAE+3B,KAD0C;AAEjDE,YAAM,EAAEF,KAFyC;AAGjDG,UAAI,EAAEJ,IAH2C;AAIjDK,WAAK,EAAEL,IAJ0C;AAKjD/1B,SAAG,EAAE81B,GAL4C;AAMjDxI,UAAI,EAAEwI,GAN2C;AAOjD33B,UAAI,EAAE03B,IAP2C;AAQjD3yB,WAAK,EAAE2yB,IAR0C;AASjD35B,YAAM,EAAE05B,MATyC;AAUjDt5B,aAAO,EAAEs5B;AAVwC,KAArD;AAaA;;;;AAGa,YAAAt6B,QAAA,GAAW,OAAAA,QAAX;AAEb;;;;AAGa,YAAAI,SAAA,GAAY,OAAAA,SAAZ;;AAQb,aAAgB26B,qBAAhB,CAAsC3X,OAAtC,EAAmE;AAC/D,UAAIzP,KAAK,GAAY,EAArB;;AACA,UAAIyP,OAAJ,EAAa;AACTzP,aAAK,GAAG,MAAH,OAAG,CAAH,EAAG,EAAKyP,OAAL,CAAR;AACA,eAAOzP,KAAK,CAACnO,IAAb;;AACA,YAAI4d,OAAO,CAACpb,OAAZ,EAAqB;AACjB,iBAAO2L,KAAK,CAAC3L,OAAb;;AACA,eAAK,IAAMgzB,QAAX,IAAuB5X,OAAO,CAACpb,OAA/B,EAAwC;AACpC,gBAAI,CAAC2L,KAAK,CAACqnB,QAAD,CAAV,EAAsB;AAClBrnB,mBAAK,CAACqnB,QAAD,CAAL,GAAkB5X,OAAO,CAACpb,OAAR,CAAgBgzB,QAAhB,CAAlB;AACH;AACJ;AACJ,SAVQ,CAYT;AACA;;;AACA,YAAI5X,OAAO,CAAC6X,KAAZ,EAAmB;AACftnB,eAAK,CAACxD,EAAN,GAAWiT,OAAO,CAAC6X,KAAnB;AACA,iBAAOtnB,KAAK,CAACsnB,KAAb;AACH;AAEJ;;AACD,aAAOtnB,KAAP;AACH;;AAvBD;AA0BA;;;;;;AAKA,aAAgBunB,mBAAhB,GAAwH;AAAA,UAApFz8B,IAAoF,uEAApE,EAAoE;AAAA,UAAhE08B,QAAgE,uEAA7C,EAA6C;AAAA,UAAzCC,QAAyC,uEAAtB,UAAApxB,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB+J,EAAE;;AACpH;AACA,UAAI,CAACzL,IAAI,CAACgE,MAAV,EAAkB;AACd,eAAO,CACH;AACIhC,eAAK,EAAE,CADX;AAEImtB,aAAG,EAAE,UAAA5jB,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB8J,YAApB,CAAiC,QAAjC,EAA2CC,EAA3C,GAAgD;AAFzD,SADG,CAAP;AAMH;;AACD,UAAMmxB,KAAK,GAAmB,EAA9B;AACA,UAAI56B,KAAK,GAAG,IAAI,UAAAgR,MAAJ,CAAW;AAAElR,YAAI,EAAE66B;AAAR,OAAX,CAAZ;AACA38B,UAAI,CAACgK,IAAL,CAAU,UAACC,CAAD,EAAIC,CAAJ;AAAA,eAAUD,CAAC,CAACnI,IAAF,GAASoI,CAAC,CAACpI,IAArB;AAAA,OAAV;;AAZoH,mDAa9F9B,IAb8F;AAAA;;AAAA;AAapH,kEAA4B;AAAA,cAAjByW,OAAiB;AACxB,cAAMomB,SAAS,GAAGpmB,OAAO,CAAC/J,WAA1B;AACA,cAAMowB,OAAO,GAAGrmB,OAAO,CAAC9J,SAAxB;;AACA,cAAIkwB,SAAS,CAACzB,WAAV,CAAsBp5B,KAAtB,CAAJ,EAAkC;AAC9B,gBAAMoD,IAAI,GAAGhD,IAAI,CAAC04B,GAAL,CAAS+B,SAAS,CAAC9B,QAAV,CAAmB/4B,KAAnB,EAA0B,SAA1B,CAAT,CAAb;AACA;;AACA,gBAAIoD,IAAI,IAAIs3B,QAAZ,EAAsB;AAClBE,mBAAK,CAACjzB,IAAN,CAAW;AAAE3H,qBAAK,EAAEA,KAAK,CAACyJ,EAAf;AAAmB0jB,mBAAG,EAAE0N,SAAS,CAACpxB;AAAlC,eAAX;AACH;;AACDzJ,iBAAK,GAAG86B,OAAR;AACH,WAPD,MAOO,IAAI96B,KAAK,CAACwJ,YAAN,CAAmB,QAAnB,EAA6BC,EAA7B,KAAoCoxB,SAAS,CAACrxB,YAAV,CAAuB,QAAvB,EAAiCC,EAAzE,EAA6E;AAChFzJ,iBAAK,GAAG86B,OAAR;AACH;AACJ;AA1BmH;AAAA;AAAA;AAAA;AAAA;;AA2BpHF,WAAK,CAACjzB,IAAN,CAAW;AACP3H,aAAK,EAAEA,KAAK,CAACyJ,EADN;AAEN;AACD0jB,WAAG,EAAE,UAAA5jB,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB8J,YAApB,CAAiC,QAAjC,EAA2CC,EAA3C,GAAgD;AAH9C,OAAX;AAMA,aAAOmxB,KAAP;AACH;;AAlCD;AAoCA;;;;;;;;;AAQA,aAAgBG,sBAAhB,CACI/8B,IADJ,EAGyB;AAAA,UADrB8B,IACqB,uEADN,UAAAyJ,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB+J,EACd;AAAA,UAArBixB,QAAqB,uEAAF,EAAE;AAErB,UAAME,KAAK,GAAGH,mBAAmB,CAACz8B,IAAD,EAAO08B,QAAP,EAAiB56B,IAAjB,CAAjC;AACA,UAAMk7B,KAAK,GAAG,IAAI,UAAAhqB,MAAJ,CAAW;AAAClR,YAAI,EAAJA;AAAD,OAAX,CAAd;AACA,UAAMwJ,IAAI,GAAG0xB,KAAK,CAACxxB,YAAN,CAAmB,QAAnB,EAA6B9I,QAA7B,CAAsC;AAAER,cAAM,EAAE;AAAV,OAAtC,CAAb;;AAJqB,mDAKD06B,KALC;AAAA;;AAAA;AAKrB,kEAA2B;AAAA,cAAhBK,KAAgB;AACvB,cAAMj7B,KAAK,GAAG,IAAI,UAAAgR,MAAJ,CAAW;AAAClR,gBAAI,EAAEm7B,KAAK,CAACj7B;AAAb,WAAX,CAAd;AACA,cAAMmtB,GAAG,GAAG,IAAI,UAAAnc,MAAJ,CAAW;AAAClR,gBAAI,EAAEm7B,KAAK,CAAC9N;AAAb,WAAX,CAAZ;;AACA,cAAIntB,KAAK,CAACwJ,YAAN,CAAmB,QAAnB,EAA6B4vB,WAA7B,CAAyC9vB,IAAzC,CAAJ,EAAoD;AAChD,mBAAO2xB,KAAP;AACH,WAFD,MAEO,IAAI3xB,IAAI,CAAC6vB,YAAL,CAAkBhM,GAAG,CAAC3jB,YAAJ,CAAiB,QAAjB,CAAlB,CAAJ,EAAmD;AACtD,gBAAM3I,QAAQ,GAAGssB,GAAG,CAAC3jB,YAAJ,CAAiB,QAAjB,EAA2BuvB,QAA3B,CAAoCzvB,IAApC,EAA0C,SAA1C,CAAjB;AACA;;AACA,gBAAIzI,QAAQ,IAAI65B,QAAhB,EAA0B;AACtB,qBAAOO,KAAP;AACH;AACJ;AACJ;AAjBoB;AAAA;AAAA;AAAA;AAAA;;AAkBrB,aAAOL,KAAK,CAACA,KAAK,CAAC54B,MAAN,GAAe,CAAhB,CAAZ;AACH;;AAtBD;AAwBA;;;;;;AAKA,aAAgBk5B,mBAAhB,CACIzmB,OADJ,EAEI0mB,UAFJ,EAKgD;AAAA,UAF5CC,WAE4C,uEAFrB,KAEqB;AAAA,UAD5CC,cAC4C;AAAA,UAA5CtqB,MAA4C;;;;AAE5C,UAAI,CAAC0D,OAAL,EAAc;AACV,cAAMvY,KAAK,CAAC,mBAAD,CAAX;AACH;;AAED,UAAMo/B,YAAY,GAAG,wBAAAte,cAAA,CAAeC,UAAf,CAA0B,aAAAmX,IAA1B,CAArB;AACA,UAAMmH,YAAY,GACdD,YAAY,CAACE,OAAb,IACA,IAAI,aAAApH,IAAJ,CAAS;AAAEriB,UAAE,EAAE,YAAN;AAAoBlW,YAAI,EAAE,YAA1B;AAAwCqV,aAAK,EAAE;AAA/C,OAAT,CAFJ;AAIA,UAAM7J,MAAM,GAAyB;AACjC0K,UAAE,EAAE,IAAI,QAAA0pB,WAAJ,CAAgBhnB,OAAO,CAAC1C,EAAR,IAAc,EAA9B,CAD6B;AAEjCqf,kBAAU,EAAE,IAAI,QAAAqK,WAAJ,CAAiBhnB,OAAO,CAAC+R,YAAR,GAAsB/R,OAAO,CAACoe,WAA9B,GAA4C,CAACpe,OAAO,CAACqe,IAAT,CAA7D,EAA6E,EAA7E,CAFqB;AAGjCA,YAAI,EAAE,IAAI,QAAA2I,WAAJ,CAAgBhnB,OAAO,CAACqe,IAAxB,EAA8B,EAA9B,CAH2B;AAIjCryB,cAAM,EAAE,IAAI,QAAAg7B,WAAJ,CAAgB;AAAEz4B,eAAK,EAAEyR,OAAO,CAAC/J,WAAR,IAAuB,UAAAnB,OAAA,EAAhC;AAA2CmyB,kBAAQ,EAAE;AAArD,SAAhB,EAA8E,CAAC,QAAAC,UAAA,CAAWC,QAAZ,CAA9E,CAJyB;AAKjC/6B,gBAAQ,EAAE,IAAI,QAAA46B,WAAJ,CAAgB;AAAEz4B,eAAK,EAAEyR,OAAO,CAAC5T,QAAjB;AAA2B66B,kBAAQ,EAAE;AAArC,SAAhB,CALuB;AAMjChH,iBAAS,EAAE,IAAI,QAAA+G,WAAJ,CAAgBhnB,OAAO,CAACigB,SAAR,IAAqB6G,YAArC,EAAmD,CAAC,QAAAI,UAAA,CAAWC,QAAZ,CAAnD,CANsB;AAOjCnH,iBAAS,EAAE,IAAI,QAAAgH,WAAJ,CAAgBhnB,OAAO,CAACggB,SAAxB,EAAmC,EAAnC,CAPsB;AAQjC7H,aAAK,EAAE,IAAI,QAAA6O,WAAJ,CAAgBhnB,OAAO,CAACmY,KAAR,IAAiB,EAAjC,EAAqC;AAAEiP,oBAAU,EAAE,CAAE,QAAAF,UAAA,CAAWC,QAAb,EAAuB,QAAAD,UAAA,CAAWG,SAAX,CAAqB,CAArB,CAAvB,CAAd;AAAgEC,kBAAQ,EAAE;AAA1E,SAArC,CAR0B;AASjCvH,oBAAY,EAAE,IAAI,QAAAiH,WAAJ,CAAgBhnB,OAAO,CAAC+f,YAAxB,CATmB;AAUjCxoB,YAAI,EAAE,IAAI,QAAAyvB,WAAJ,CAAgBhnB,OAAO,CAACzI,IAAxB,CAV2B;AAWjC+oB,aAAK,EAAE,IAAI,QAAA0G,WAAJ,CAAgBhnB,OAAO,CAACsgB,KAAxB,CAX0B;AAYjCC,uBAAe,EAAE,IAAI,QAAAyG,WAAJ,CAAgBhnB,OAAO,CAACugB,eAAxB,CAZgB;AAajCE,0BAAkB,EAAE,IAAI,QAAAuG,WAAJ,CAAgBhnB,OAAO,CAACygB,kBAAxB,CAba;AAcjCI,eAAO,EAAE,IAAI,QAAAmG,WAAJ,CAAgBhnB,OAAO,CAAC6gB,OAAxB,CAdwB;AAejC9O,oBAAY,EAAE,IAAI,QAAAiV,WAAJ,CAAgBhnB,OAAO,CAAC+R,YAAxB,CAfmB;AAgBjCkQ,gBAAQ,EAAE,IAAI,QAAA+E,WAAJ,CACNhnB,OAAO,CAACujB,cAAR,CAAuBryB,GAAvB,CACI,UAAC8zB,KAAD;AAAA,iBAAW,IAAI,uBAAA9C,aAAJ,CAAkB,MAAD,OAAC,CAAD,kBACrB8C,KADqB,CAAC,EACjB;AACRzJ,wBAAY,EAAEvb,OAAO,CAAC/J,WAAR,CAAoBjB,EAD1B;AAERkwB,4BAAgB,EAAEllB,OAAO,CAAC/P;AAFlB,WADiB,CAAlB,CAAX;AAAA,SADJ,CADM,CAhBuB;AAyBjC4xB,eAAO,EAAE,IAAI,QAAAmF,WAAJ,CAAgB,CAAC,CAAChnB,OAAO,CAAC6hB,OAA1B,CAzBwB;AA0BjChS,oBAAY,EAAE,IAAI,QAAAmX,WAAJ,CAAgB,CAAC,CAAChnB,OAAO,CAAC6P,YAA1B,CA1BmB;AA2BjC0X,mBAAW,EAAE,IAAI,QAAAP,WAAJ,CAAgB,IAAhB,CA3BoB;AA4BjC1qB,cAAM,EAAE,IAAI,QAAA0qB,WAAJ,CAAgB,EAAhB,CA5ByB;AA6BjC/2B,gBAAQ,EAAE,IAAI,QAAA+2B,WAAJ,CAAgBJ,cAAc,IAAI,EAAlC,CA7BuB;AA8BjCY,sBAAc,EAAE,IAAI,QAAAR,WAAJ,CAAgB,KAAhB;AA9BiB,OAArC;;AAgCA,UAAI,CAACL,WAAL,EAAkB;AACd/zB,cAAM,CAACxG,QAAP,CAAgBq7B,aAAhB,CAA8B,CAAC,QAAAP,UAAA,CAAWC,QAAZ,EAAsB,uBAAAO,eAAA,CAAgB90B,MAAM,CAAC5G,MAAvB,CAAtB,CAA9B;AACH;AACD;;;AACA,UAAIgU,OAAO,CAAC1C,EAAR,IAAc0C,OAAO,CAAC1C,EAAR,KAAe,QAAjC,EAA2C;AACvC1K,cAAM,CAACqtB,SAAP,CAAiB0H,OAAjB;AACA;;AACA,YAAI3nB,OAAO,CAAC9J,SAAR,CAAkBlB,EAAlB,GAAuB,UAAAF,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB+J,EAA/C,EAAmD;AAC/CpC,gBAAM,CAAC5G,MAAP,CAAc27B,OAAd;AACH;AACJ,OAND,MAMO;AACH,YAAMC,cAAc,GAAG,CAAC,QAAAV,UAAA,CAAWC,QAAZ,CAAvB;;AACA,YAAI,CAACR,WAAL,EAAkB;AACdiB,wBAAc,CAAC10B,IAAf,CAAoB20B,QAApB;AACH;;AACDD,sBAAc,CAAC10B,IAAf,CAAoB40B,WAApB;AACAl1B,cAAM,CAAC5G,MAAP,CAAcy7B,aAAd,CAA4BG,cAA5B;AACAh1B,cAAM,CAAC5G,MAAP,CAAc+7B,sBAAd;AACH;;AACD,UAAIC,WAAW,GAAG,CAAC,CAAnB;AACAp1B,YAAM,CAAC+pB,UAAP,CAAkBsL,YAAlB,CAA+B3+B,SAA/B,CAAyC,UAACC,IAAD,EAAU;AAC/C,YAAM2+B,QAAQ,GAAGt1B,MAAM,CAAC6tB,kBAAP,CAA0BlyB,KAA1B,IAAmC,EAApD;AACA,YAAM8F,OAAO,GAAGgE,MAAM,CAACpH,IAAP,CAAYi3B,QAAZ,EAAsBj2B,MAAtB,CAA6B,UAAClL,GAAD;AAAA,iBACzCwC,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEsF,IAAN,CAAW,UAAC2f,KAAD;AAAA,mBAAWA,KAAK,CAAC/R,KAAN,KAAgB1V,GAA3B;AAAA,WAAX,CADyC;AAAA,SAA7B,EAEdwG,MAFF;;AAGA,YAAIhE,IAAI,IAAIA,IAAI,CAACgE,MAAb,IAAuB8G,OAAO,KAAK,CAAvC,EAA0C;AACtC,cAAM8zB,KAAK,GAAGv1B,MAAM,CAAC2tB,eAAP,CAAuBhyB,KAAvB,IAAgC,EAA9C;;AACA,cAAI8J,MAAM,CAACpH,IAAP,CAAYi3B,QAAZ,EAAsB36B,MAAtB,IAAgC,CAAhC,IAAqC8K,MAAM,CAACpH,IAAP,CAAYk3B,KAAZ,EAAmB56B,MAAnB,IAA6B,CAAtE,EAAyE;AACrE,gBAAMxG,GAAG,GAAGsR,MAAM,CAACpH,IAAP,CAAYi3B,QAAZ,EAAsB,CAAtB,KAA4B7vB,MAAM,CAACpH,IAAP,CAAYk3B,KAAZ,EAAmB,CAAnB,CAAxC;AACA,gBAAMC,YAAY,GAAG,EAArB;AACA,gBAAMC,SAAS,GAAG,EAAlB;AACA,gBAAM/H,KAAK,GAAG1tB,MAAM,CAAC0tB,KAAP,CAAa/xB,KAA3B;AACA+xB,iBAAK,CAAC72B,OAAN,CAAc,UAACo5B,IAAD;AAAA,qBAAWA,IAAI,CAACrU,KAAL,KAAeznB,GAAf,GAAsB87B,IAAI,CAACrU,KAAL,GAAajlB,IAAI,CAAC,CAAD,CAAJ,CAAQkT,KAA3C,GAAoD,EAA/D;AAAA,aAAd;AACA2rB,wBAAY,CAAC7+B,IAAI,CAAC,CAAD,CAAJ,CAAQkT,KAAT,CAAZ,GAA8ByrB,QAAQ,CAACnhC,GAAD,CAAtC;AACAshC,qBAAS,CAAC9+B,IAAI,CAAC,CAAD,CAAJ,CAAQkT,KAAT,CAAT,GAA2B0rB,KAAK,CAACphC,GAAD,CAAhC;AACA6L,kBAAM,CAAC6tB,kBAAP,CAA0Bx0B,QAA1B,CAAmCm8B,YAAnC;AACAx1B,kBAAM,CAAC2tB,eAAP,CAAuBt0B,QAAvB,CAAgCo8B,SAAhC;AACH;AACJ;;AACDL,mBAAW,GAAGz+B,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEgE,MAApB;AACH,OApBD;AAqBAqF,YAAM,CAAC5G,MAAP,CAAci8B,YAAd,CAA2B3+B,SAA3B,CAAqC,UAACuZ,CAAD,EAAO;AACxCjQ,cAAM,CAACxG,QAAP,CAAgB27B,sBAAhB;AACH,OAFD;AAGAn1B,YAAM,CAAC20B,WAAP,CAAmBU,YAAnB,CAAgC3+B,SAAhC,CAA0C,UAACg/B,YAAD,EAAkB;AACxD,YAAI,CAACA,YAAL,EAAmB;AACf11B,gBAAM,CAAC+pB,UAAP,CAAkB1wB,QAAlB,CAA2B,EAA3B;AACH;AACJ,OAJD;AAKA2G,YAAM,CAACid,YAAP,CAAoBoY,YAApB,CAAiC3+B,SAAjC,CAA2C,UAACumB,YAAD,EAAkB;AACzD,YAAI,CAACA,YAAL,EAAmB;AACfjd,gBAAM,CAACqvB,QAAP,CAAgBh2B,QAAhB,CAAyB,EAAzB;AACH;AACJ,OAJD;AAKA,UAAMs8B,iBAAiB,GAAyB,CAC5C,IAD4C,EAE5C,YAF4C,EAG5C,WAH4C,EAI5C,OAJ4C,EAK5C,QAL4C,EAM5C,cAN4C,EAO5C,iBAP4C,EAQ5C,oBAR4C,EAS5C,UAT4C,EAU5C,gBAV4C,4BAWzC7B,UAXyC,GAY9C13B,MAZ8C,CAYvC,UAACkC,GAAD,EAAMnK,GAAN,EAAc;AACnB;AACA,YAAI6L,MAAM,CAAC7L,GAAD,CAAV,EAAiB;AACbmK,aAAG,CAACnK,GAAD,CAAH,GAAW6L,MAAM,CAAC7L,GAAD,CAAjB;AACH;;AACD,eAAOmK,GAAP;AACH,OAlB+C,EAkB7C,EAlB6C,CAAhD;;AAoBA,UAAIq3B,iBAAiB,CAAC1G,OAAtB,EAA+B;AAC3B,YAAM2G,YAAY,GAAG,SAAfA,YAAe,CAACj6B,KAAD,EAAW;AAC5B,cAAIA,KAAJ,EAAW;AACP,gBAAIsqB,UAAU,GAAG0P,iBAAiB,CAACv8B,MAAlB,CAAyBuC,KAAzB,CAA+Bk6B,KAA/B,EAAjB,CADO,CAEP;AACA;;AACA,gBAAI7B,cAAJ,EAAoB;AAChB/N,wBAAU,GAAGA,UAAU,CAACpjB,MAAX,CAAkBmxB,cAAlB,CAAb;AACH;;AAED2B,6BAAiB,CAACv8B,MAAlB,CAAyBy7B,aAAzB,CAAuC,CAAC,QAAAP,UAAA,CAAWC,QAAZ,CAAvC;AACAoB,6BAAiB,CAACv8B,MAAlB,CAAyBC,QAAzB,CAAkCs8B,iBAAiB,CAAC1G,OAAlB,CAA0BtzB,KAA1B,GACpBsqB,UAAU,CAAC9jB,YAAX,CAAwB,KAAxB,CADoB,GAEpBwzB,iBAAiB,CAACv8B,MAAlB,CAAyBuC,KAFvC;AAGAg6B,6BAAiB,CAACn8B,QAAlB,CAA2BH,QAA3B,CAAoCs8B,iBAAiB,CAAC1G,OAAlB,CAA0BtzB,KAA1B,GAC9B,KAAK,EADyB,GAE9Bg6B,iBAAiB,CAACn8B,QAAlB,CAA2BmC,KAFjC;AAGAg6B,6BAAiB,CAACv8B,MAAlB,CAAyB+7B,sBAAzB;AACAQ,6BAAiB,CAACn8B,QAAlB,CAA2Bu7B,OAA3B,GAhBO,CAiBP;AACH,WAlBD,MAkBO;AACH,gBAAMC,eAAc,GAAG,CAAC,QAAAV,UAAA,CAAWC,QAAZ,CAAvB;;AACA,gBAAI,CAACR,WAAL,EAAkB;AACdiB,6BAAc,CAAC10B,IAAf,CAAoB20B,QAApB;AACH;;AACDD,2BAAc,CAAC10B,IAAf,CAAoB40B,WAApB;;AACAS,6BAAiB,CAACv8B,MAAlB,CAAyBy7B,aAAzB,CAAuCG,eAAvC;AACAW,6BAAiB,CAACn8B,QAAlB,CAA2BH,QAA3B,CAAoC+T,OAAO,CAAC5T,QAAR,IAAoB,EAAxD;AACAm8B,6BAAiB,CAACv8B,MAAlB,CAAyB+7B,sBAAzB;AACAQ,6BAAiB,CAACn8B,QAAlB,CAA2Bs8B,MAA3B;AACAH,6BAAiB,CAACv8B,MAAlB,CAAyB08B,MAAzB;AACH;AACJ,SA/BD;;AAgCAH,yBAAiB,CAAC1G,OAAlB,CAA0BoG,YAA1B,CAAuC3+B,SAAvC,CAAiDk/B,YAAjD;AACAA,oBAAY,CAACD,iBAAiB,CAAC1G,OAAlB,CAA0BtzB,KAA3B,CAAZ;AACH;;AAED,UAAMo6B,WAAW,GAAG3oB,OAAO,CAACyiB,kBAAR,IAA8B,EAAlD,CA1J4C,CA4J5C;;AACA,UAAGnmB,MAAM,IAAI0D,OAAO,CAACgS,iBAAR,KAA+B,mBAAA4W,gBAAA,CAAiBC,IAA7D,EAAkE;AAC9D7oB,eAAO,CAACoS,iBAAR,GAA4BuW,WAAW,CAClC12B,MADuB,CAChB,UAAA62B,UAAU;AAAA,iBAAIA,UAAU,CAACxrB,EAAX,KAAkB0C,OAAO,CAAC+Z,oBAA9B;AAAA,SADM,EAEvB7oB,GAFuB,CAEnB,UAAC43B,UAAD;AAAA,iBAAgB,IAAI,UAAAvsB,MAAJ,CAAW;AAAClR,gBAAI,EAAEy9B,UAAU,CAAC3rB,WAAX,GAAyB,IAAhC;AAAsC0V,uBAAW,EAAE,KAAnD;AAA0DC,uBAAW,EAAE9S,OAAO,CAAC/P;AAA/E,WAAX,CAAhB;AAAA,SAFmB,CAA5B;AAIH;AACD;;;;;AAGA,UAAGqM,MAAM,IAAIA,MAAM,KAAK,mBAAA2W,YAAA,CAAa8V,KAAlC,IAA2CzsB,MAAM,KAAK,mBAAA0sB,aAAA,CAAcD,KAApE,IAA6EJ,WAA7E,IAA4FA,WAAW,CAACp7B,MAAxG,IAAkH,CAACyS,OAAO,CAAC1C,EAA9H,EAAiI;AAC7H,YAAM2rB,YAAY,GAAG,IAAI,UAAA1sB,MAAJ,CAAW;AAC5BlR,cAAI,EAAEs9B,WAAW,CAACp1B,IAAZ,CAAiB,UAAC21B,EAAD,EAAKC,EAAL;AAAA,mBAAYD,EAAE,CAAC/rB,WAAH,GAAiBgsB,EAAE,CAAChsB,WAAhC;AAAA,WAAjB,EAA8D,CAA9D,EAAiEA,WAAjE,GAA+E,IADzD;AAE5B0V,qBAAW,EAAE,KAFe;AAERC,qBAAW,EAAE9S,OAAO,CAAC/P;AAFb,SAAX,CAArB;AAIAs4B,yBAAiB,CAACv8B,MAAlB,CAAyBC,QAAzB,CAAkCg9B,YAAlC;AACA,YAAMvQ,GAAG,GAAGiQ,WAAW,CAACp1B,IAAZ,CAAiB,UAAC21B,EAAD,EAAKC,EAAL;AAAA,iBAAYA,EAAE,CAAChsB,WAAH,GAAiB+rB,EAAE,CAAC/rB,WAAhC;AAAA,SAAjB,EAA8D,CAA9D,EAAiEA,WAAjE,GAA+E,IAA3F;AACA6C,eAAO,CAACkS,gBAAR,GAA4B,IAAI,UAAA3V,MAAJ,CAAW;AAAClR,cAAI,EAAEqtB,GAAP;AAAY7F,qBAAW,EAAE,KAAzB;AAAgCC,qBAAW,EAAE9S,OAAO,CAAC/P;AAArD,SAAX,CAA5B;AACH,OA9K2C,CAgL5C;;;AACA,UAAMm5B,WAAW,GAAG,OAAAb,iBAAiB,CAACv8B,MAAlB,MAAwB,IAAxB,IAAwB,aAAxB,GAAwB,MAAxB,GAAwB,GAAEuC,KAA1B,KAAmC,IAAI,UAAAgO,MAAJ,CAAW;AAAElR,YAAI,EAAE;AAAR,OAAX,CAAvD,CAjL4C,CAiLoC;;;AAChF,UAAMg+B,sBAAsB,GAAG,MAAH,OAAG,CAAH,kBACrBd,iBADqB,CAAG,EACP;AACpBvW,yBAAiB,EAAE,IAAI,QAAAgV,WAAJ,CAAgBhnB,OAAO,CAACgS,iBAAR,IAA6B,mBAAA4W,gBAAA,CAAiBU,MAA9D,CADC;AAEpBrX,2BAAmB,EAAE,IAAI,QAAA+U,WAAJ,CAAgBhnB,OAAO,CAACiS,mBAAR,IAA+B,CAA/C,CAFD;AAGpBC,wBAAgB,EAAE,IAAI,QAAA8U,WAAJ,CAAgBhnB,OAAO,CAACkS,gBAAR,IAA4BkX,WAAW,CAACl9B,QAAZ,CAAqB;AAAC4wB,cAAI,EAAE;AAAP,SAArB,CAA5C,CAHE;AAIpB3K,wBAAgB,EAAE,IAAI,QAAA6U,WAAJ,CAAgBhnB,OAAO,CAACmS,gBAAR,IAA4B,CAA5C,CAJE;AAKpBhC,oBAAY,EAAE,IAAI,QAAA6W,WAAJ,CAAgBhnB,OAAO,CAACmQ,YAAxB,CALM;AAMpBiC,yBAAiB,EAAE,IAAI,QAAA4U,WAAJ,CAAgBhnB,OAAO,CAACoS,iBAAR,IAA6B,EAA7C,CANC;AAOpBC,6BAAqB,EAAE,IAAI,QAAA2U,WAAJ,CAAgB,EAAhB,CAPH;AAQpBuC,0BAAkB,EAAE,IAAI,QAAAvC,WAAJ,CAAgB,mBAAA4B,gBAAA,CAAiBU,MAAjC,CARA;AASpBhX,uBAAe,EAAE,IAAI,QAAA0U,WAAJ,CAAgBhnB,OAAO,CAACsS,eAAR,IAA2B,EAA3C;AATG,OADO,CAA/B;;AAaA,UAAGtS,OAAO,CAACmQ,YAAR,IAAwB7T,MAAM,KAAK,mBAAA0sB,aAAA,CAAcD,KAApD,EAA0D;AACtDM,8BAAsB,CAACjX,iBAAvB,CAAyCqV,aAAzC,CAAuD,CAAC+B,eAAD,CAAvD;AACAH,8BAAsB,CAACjX,iBAAvB,CAAyC2V,sBAAzC;AACAsB,8BAAsB,CAACnX,gBAAvB,CAAwCuV,aAAxC,CAAsD,CAAC,QAAAP,UAAA,CAAWC,QAAZ,EAAsBW,WAAtB,CAAtD;AACH,OAnM2C,CAoM5C;;;AACA,UAAMtgB,IAAI,GAAG,IAAI,QAAAiiB,SAAJ,CAAcJ,sBAAd,CAAb;AACA,aAAO7hB,IAAP;AACH;;AA5MD;AA8MA;;;;;AAIA,aAAgBqgB,QAAhB,CAAyB6B,OAAzB,EAAmD;AAC/C,UAAM19B,MAAM,GAAG09B,OAAO,CAACn7B,KAAvB,CAD+C,CACjB;;AAC9B,aAAOvC,MAAM,CAAC04B,YAAP,CAAoB,UAAA5vB,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB6R,aAApB,CAAkC;AAAEhR,eAAO,EAAE;AAAX,OAAlC,CAApB,IACD;AAAEE,cAAM,EAAE;AAAV,OADC,GAED,IAFN;AAGH;;AALD;AAOA;;;;;AAIA,aAAgBw9B,eAAhB,CAAiCE,OAAjC,EAA2D;AACvD,aAAOA,OAAO,CAACn7B,KAAR,CAAchB,MAAd,KAAyB,CAAzB,GAA6B,IAA7B,GAAoC;AAAE6G,aAAK,EAAE;AAAT,OAA3C;AACH;;AAFD;AAIA;;;;;AAIC,aAAgBu1B,SAAhB,CAA2BD,OAA3B,EAAqD;AACjD,UAAG,CAACA,OAAO,CAACn7B,KAAZ,EAAkB;AACd,eAAO;AAAElD,cAAI,EAAE;AAAR,SAAP;AACH;;AACF,UAAMA,IAAI,GAAG,IAAI,UAAAkR,MAAJ,CAAW;AAAClR,YAAI,EAAEq+B,OAAO,CAACn7B;AAAf,OAAX,CAAb;AACA,UAAMikB,GAAG,GAAG,UAAA1d,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAZ;AACA,UAAMiC,OAAO,GAAGslB,GAAG,CAACkS,YAAJ,CAAiBr5B,IAAjB,EAAuB,KAAvB,KAAiCmnB,GAAG,CAACoX,UAAJ,CAAev+B,IAAf,EAAqB,KAArB,CAAjD;AACA,aAAO6B,OAAO,GAAG,IAAH,GAAU;AAAE7B,YAAI,EAAE;AAAR,OAAxB;AACH;;AARA;AAUD;;;;;AAIC,aAAgBy8B,WAAhB,CAA6B4B,OAA7B,EAAuD;AACpD,UAAG,CAACA,OAAO,CAACn7B,KAAZ,EAAkB;AACd,eAAO;AAAElD,cAAI,EAAE;AAAR,SAAP;AACH;;AACF,UAAMA,IAAI,GAAG,UAAAyJ,OAAA,CAAQ40B,OAAO,CAACn7B,KAAR,CAAcs7B,MAAtB,CAAb;AACA,UAAMrX,GAAG,GAAG,UAAA1d,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAZ;AACA,UAAMiC,OAAO,GAAGslB,GAAG,CAACkS,YAAJ,CAAiBr5B,IAAjB,EAAuB,KAAvB,KAAiCmnB,GAAG,CAACoX,UAAJ,CAAev+B,IAAf,EAAqB,KAArB,CAAjD;AACA,aAAO6B,OAAO,GAAG,IAAH,GAAU;AAAE7B,YAAI,EAAE;AAAR,OAAxB;AACF;;AARA;AAUD;;;;;AAIA,aAAgBy+B,YAAhB,CAA6BC,SAA7B,EAA8D;AAC1D,aAAO1xB,MAAM,CAACgqB,MAAP,CAAc0H,SAAd,EAAyB/6B,MAAzB,CAAgC,UAACg7B,GAAD,EAAMxD,KAAN,EAAgB;AACnD,YAAMyD,SAAS,GAAGzD,KAAK,CAACx3B,MAAN,CAAa,UAACk7B,UAAD,EAAah4B,EAAb,EAAoB;AAC/C,cAAIA,EAAE,CAACi4B,UAAH,CAAcD,UAAd,IAA4BE,eAAe,CAACl4B,EAAE,CAACi4B,UAAH,CAAcD,UAAf,CAAf,GAA4CF,GAA5E,EAAiF;AAC7E,mBAAOI,eAAe,CAACl4B,EAAE,CAACi4B,UAAH,CAAcD,UAAf,CAAtB;AACH,WAFD,MAEO;AACH,mBAAOA,UAAP;AACH;AACJ,SANiB,EAMf,CANe,CAAlB;;AAOA,YAAID,SAAS,GAAGD,GAAhB,EAAqB;AACjB,iBAAOC,SAAP;AACH,SAFD,MAEO;AACH,iBAAOD,GAAP;AACH;AACJ,OAbM,EAaJ,CAbI,CAAP;AAcH;;AAfD;AAiBA;;;;;;AAKA,aAAgBK,0BAAhB,CACIC,UADJ,EAEIC,UAFJ,EAE+B;AAE3B,UAAM3nB,KAAK,GAAW,OAAO0nB,UAAP,KAAsB,QAAtB,GAAiCF,eAAe,CAACE,UAAD,CAAhD,GAA+DA,UAArF;AACA,UAAM7+B,MAAM,GACR,OAAO8+B,UAAP,KAAsB,QAAtB,GAAiCH,eAAe,CAACG,UAAD,CAAhD,GAA+DA,UADnE;AAEA,aAAO3nB,KAAK,IAAInX,MAAhB;AACH;;AARD;AAUA;;;;;AAIA,aAAgB2+B,eAAhB,CAAgCv4B,GAAhC,EAA2C;AACvC,UAAMoB,KAAK,GAAGpB,GAAG,CAACxE,KAAJ,CAAU,GAAV,CAAd;AACA,aAAO,CAAC4F,KAAK,CAAC,CAAD,CAAN,GAAYwyB,YAAY,CAACxyB,KAAK,CAAC,CAAD,CAAN,CAA/B;AACH;;AAHD;AAKA;;;;;;;AAMA,aAAgB8c,kBAAhB,GAKiB;AAAA,UAJb3U,QAIa,uEAJS,EAIT;AAAA,UAHboU,QAGa,uEAHO,IAGP;AAAA,UAFbgb,WAEa,uEAFU,KAEV;AAAA,UADbx+B,MACa,uEADI,UAAA8I,OAAA,EACJ;AAAA,UAAb0Z,KAAa;AAEb,UAAMic,UAAU,GAAGzE,mBAAmB,CAAC5qB,QAAQ,CAACnJ,MAAT,CAAgB,UAAC2nB,GAAD;AAAA,eAAS,CAACA,GAAG,CAAC8E,QAAd;AAAA,OAAhB,CAAD,CAAtC;AACA,UAAMlM,GAAG,GAAG,UAAA1d,OAAA,EAAZ,CAHa,CAGS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAM41B,cAAc,GAAGpE,sBAAsB,CAAClrB,QAAQ,CAACnJ,MAAT,CAAgB,UAAC2nB,GAAD;AAAA,eAAS,CAACA,GAAG,CAAC8E,QAAd;AAAA,OAAhB,CAAD,EAA0C1yB,MAAM,CAACgJ,EAAjD,CAA7C;AAEA,UAAMzJ,KAAK,GAAG,IAAI,UAAAgR,MAAJ,CAAW;AAAClR,YAAI,EAAE,CAAAq/B,cAAc,SAAd,IAAAA,cAAc,WAAd,GAAc,MAAd,GAAAA,cAAc,CAAEn/B,KAAhB,KAAyB;AAAhC,OAAX,CAAd;AACA,UAAMmtB,GAAG,GAAG,IAAI,UAAAnc,MAAJ,CAAW;AAAClR,YAAI,EAAE,CAAAq/B,cAAc,SAAd,IAAAA,cAAc,WAAd,GAAc,MAAd,GAAAA,cAAc,CAAEhS,GAAhB,KAAuB;AAA9B,OAAX,CAAZ;AACA,UAAMiS,cAAc,GAAG3+B,MAAM,CAAC24B,WAAP,CAAmBp5B,KAAK,CAACwJ,YAAN,CAAmB,QAAnB,CAAnB,KAAoD/I,MAAM,CAAC04B,YAAP,CAAoBhM,GAAG,CAAC3jB,YAAJ,CAAiB,QAAjB,CAApB,CAA3E;AACA,UAAM61B,qBAAqB,GAAG,OAAAv4B,gBAAA,CAC1Bs4B,cAAc,GAAGjS,GAAG,CAAC4L,QAAJ,CAAat4B,MAAb,EAAqB,SAArB,CAAH,GAAqCT,KAAK,CAAC+4B,QAAN,CAAet4B,MAAf,EAAuB,SAAvB,CADzB,EAE1B,OAF0B,CAA9B;AAKA,UAAM6+B,aAAa,GAAG,CAACF,cAAD,IAAmB,CAACp/B,KAAK,CAACq+B,UAAN,CAAiB59B,MAAjB,EAAyB,KAAzB,CAA1C;AACA,UAAM8+B,UAAU,GAAGH,cAAc,IAAI,CAACjS,GAAG,CAACkR,UAAJ,CAAe59B,MAAf,EAAuB,KAAvB,CAAtC;AAEA,aAAO;AACH8jB,cAAM,EAAG,CAACN,QAAD,GACH;AAAD;AADI,UAEHmb,cAAc,GACVH,WAAW,GACP;AAAD;AADQ,UAEP;AAAD;AAHO,UAIV;AAAD;AAPN;AAQHO,uBAAe,EAAED,UAAU,GACrB,mBADqB,GAErBH,cAAc,wBACIjS,GAAG,CAAC/rB,UAAJ,CAAe,OAAAwI,gBAAA,EAAf,CADJ,cAC0Cy1B,qBAD1C,SAEVC,aAAa,GACT,mBADS,qBAEEt/B,KAAK,CAACoB,UAAN,CAAiB,OAAAwI,gBAAA,EAAjB,CAFF,cAE0Cy1B,qBAF1C;AAZpB,OAAP;AAgBH;;AA9CD;AAgDA;;;;AAGa,YAAAI,oBAAA,GAAuB,UAAClb,MAAD,EAAiC;AACjE,cAAQA,MAAR;AACI,aAAK;AAAL;AAAA;AACI,iBAAO,cAAP;;AACJ,aAAK;AAAL;AAAA;AACI,iBAAO,sBAAP;;AACJ,aAAK;AAAL;AAAA;AACI,iBAAO,aAAP;;AACJ,aAAK;AAAL;AAAA;AACI,iBAAO,qBAAP;;AACJ,aAAK;AAAL;AAAA;AACA;AACI,iBAAO,WAAP;AAXR;AAaH,KAdY;;AAgBb,aAAgB+N,eAAhB,CACIt0B,IADJ,EAEI+zB,YAFJ,EAGI2N,cAHJ,EAGwE;AAEpE,UAAMC,aAAa,GAAG3hC,IAAI,CAAC0I,MAAL,CAAY,UAAC+N,OAAD,EAAa;AAC3C,eACI,CAAEA,OAAO,CAACoe,WAAR,CAAoBtQ,IAApB,CAAyB,UAAAuQ,IAAI;AAAA,iBAAI,CAAAA,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAE5hB,KAAN,MAAgBwuB,cAAc,CAACnN,UAAnC;AAAA,SAA7B,CAAF,IACA,CAACI,oBAAoB,CAAC+M,cAAc,CAAClN,MAAf,CAAsB/oB,EAAvB,EAA2Bi2B,cAAc,CAACjN,IAAf,CAAoBhpB,EAA/C,EAAmDgL,OAAO,CAAC/J,WAAR,CAAoBjB,EAAvE,EAA2EgL,OAAO,CAAC9J,SAAR,CAAkBlB,EAA7F,CAFzB;AAIH,OALqB,CAAtB;AAMA,UAAMm2B,YAAY,GAAGD,aAAa,CAAC3N,MAAd,CAAqBD,YAArB,CAArB;AACA6N,kBAAY,CAAC53B,IAAb,CAAkB,UAACC,CAAD,EAAIC,CAAJ;AAAA,eAAUD,CAAC,CAACnI,IAAF,GAASoI,CAAC,CAACpI,IAArB;AAAA,OAAlB;AACA,aAAO,OAAA0G,MAAA,CAAOo5B,YAAP,EAAqB,SAArB,CAAP;AACH;;AAdD;;AAgBA,aAAgBjN,oBAAhB,CACIkN,MADJ,EAEIC,IAFJ,EAGIC,MAHJ,EAIIC,IAJJ,EAKa;AAAA,UAATj7B,IAAS,uEAAF,EAAE;AAET,aACK86B,MAAM,IAAIE,MAAV,IAAoBF,MAAM,GAAGG,IAA9B,IACCF,IAAI,GAAGC,MAAP,IAAiBD,IAAI,IAAIE,IAD1B,IAECD,MAAM,IAAIF,MAAV,IAAoBE,MAAM,GAAGD,IAF9B,IAGCE,IAAI,GAAGH,MAAP,IAAiBG,IAAI,IAAIF,IAJ9B;AAMH;;AAbD;;AAeA,aAAgBG,UAAhB,QAKC;AAAA,UAJG3J,OAIH,SAJGA,OAIH;AAAA,UAHG4J,OAGH,SAHGA,OAGH;AAAA,UAFGC,KAEH,SAFGA,KAEH;AAAA,UADGC,YACH,SADGA,YACH;;AACG,UAAI9J,OAAJ,EAAa;AACT,yBAAU4J,OAAO,CAAC9+B,UAAR,CAAmB,aAAnB,CAAV;AACH,OAFD,MAEO;AACH,YAAI8+B,OAAO,CAAC7B,UAAR,CAAmB8B,KAAnB,EAA0B,KAA1B,CAAJ,EAAsC;AAClC,2BAAUD,OAAO,CAAC9+B,UAAR,CAAmB,oBAAnB,CAAV,gBAAwDg/B,YAAY,CAACh/B,UAAb,CAAwB,OAAxB,CAAxD;AACH,SAFD,MAEO;AACH,2BAAU8+B,OAAO,CAAC9+B,UAAR,CAAmB,oBAAnB,CAAV,gBAAwDg/B,YAAY,CAACh/B,UAAb,CAAwB,oBAAxB,CAAxD;AACH;AACJ;AACJ;;AAfD;;AAiBa,YAAAi/B,UAAA,GAAa,UAAC73B,IAAD,EAAYK,KAAZ,EAA2By3B,UAA3B;AAAA,aAAmD93B,IAAI,IAAIA,IAAI,CAACK,KAAD,CAAZ,IAAuBL,IAAI,CAACK,KAAD,CAAJ,CAAYrB,WAAZ,GAA0BoS,QAA1B,CAAmC0mB,UAAnC,CAA1E;AAAA,KAAb;;AAEb,aAAgBC,sBAAhB,CAAuCC,QAAvC,EAAsEC,WAAtE,EAAwH;AAAA;;AAAA,UAA7BrF,WAA6B,uEAAP,KAAO;AAEpH,UAAIsF,aAAa,GAAwB,EAAzC;;AAEA,UAAGtF,WAAH,EAAgB;AACXsF,qBAAa,GAAGF,QAAQ,CAAC95B,MAAT,CAAiB,UAAC8B,IAAD;AAAA,iBAC9B,QAAA63B,UAAA,CAAW73B,IAAX,EAAiB,OAAjB,EAA0Bi4B,WAA1B,KACA,QAAAJ,UAAA,CAAW73B,IAAI,CAACmsB,OAAhB,EAAyB,MAAzB,EAAiC8L,WAAjC,CADA,IAEA,QAAAJ,UAAA,CAAW73B,IAAI,CAACksB,SAAhB,EAA2B,MAA3B,EAAmC+L,WAAnC,CAFA,IAGA,QAAAJ,UAAA,CAAW73B,IAAX,EAAiB,aAAjB,EAAgCi4B,WAAhC,CAHA,IAGgD;AAC/C,WAAAj4B,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEisB,SAAN,KAAmB,CAAC,EAACjsB,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEisB,SAAN,CAAgB/tB,MAAhB,CAAuB,UAAAC,EAAE;AAAA,mBAAIA,EAAE,CAAC9K,IAAH,CAAQ2L,WAAR,GAAsBoS,QAAtB,CAA+B6mB,WAA/B,CAAJ;AAAA,WAAzB,EAA0Ez+B,MAA3E,CALS;AAAA,SAAjB,CAAhB;AAOJ,OARD,MAQO;AACH0+B,qBAAa,GAAGF,QAAQ,CAAC95B,MAAT,CAAiB,UAAC8B,IAAD;AAAA,iBAC7B,OAAI,CAAC63B,UAAL,CAAgB73B,IAAI,CAACmsB,OAArB,EAA8B,MAA9B,EAAsC8L,WAAtC,KACA,OAAI,CAACJ,UAAL,CAAgB73B,IAAI,CAACksB,SAArB,EAAgC,MAAhC,EAAwC+L,WAAxC,CADA,IAEA,OAAI,CAACJ,UAAL,CAAgB73B,IAAhB,EAAsB,aAAtB,EAAqCi4B,WAArC,CAH6B;AAAA,SAAjB,CAAhB;AAKH;;AAED,UAAME,aAAa,GAAG,KAAKC,8BAAL,CAAoCF,aAApC,CAAtB;AAEA,aAAOC,aAAP;AACH;;AAvBD;;AAyBA,aAAgBC,8BAAhB,CAA+C/wB,QAA/C,EAAyD;AACrD;AACA,UAAMgxB,eAAe,sBAAOhxB,QAAP,CAArB,CAFqD,CAIrD;;;AACA,yBAAIA,QAAJ,EAAc3R,OAAd,CAAsB,UAAAuW,OAAO,EAAI;AAC7B,YAAGA,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAE+R,YAAZ,EAA0B;AACtB;AACA,cAAMsa,eAAe,GAAGrsB,OAAO,CAACoe,WAAR,CAAoBnsB,MAApB,CAA2B,UAAAC,EAAE;AAAA,mBAAIA,EAAE,CAACoL,EAAH,KAAU0C,OAAO,CAACwO,KAAR,CAAclR,EAA5B;AAAA,WAA7B,CAAxB,CAFsB,CAItB;;AACA,eAAI,IAAI5T,GAAC,GAAG,CAAZ,EAAeA,GAAC,GAAG2iC,eAAe,CAAC9+B,MAAnC,EAA2C7D,GAAC,EAA5C,EAAgD;AAC5C;AACA,gBAAM4iC,iBAAiB,GAAIC,SAAS,CAACvsB,OAAD,CAApC;AACAssB,6BAAiB,CAACjO,IAAlB,GAAyBgO,eAAe,CAAC3iC,GAAD,CAAxC;AACA0iC,2BAAe,CAACl5B,IAAhB,CAAqBo5B,iBAArB;AACH;AACJ;AACJ,OAbD,EALqD,CAoBrD;;;AACA,aAAOF,eAAP;AAEH;;AAvBD;;;;;;;;;;;;;;;;;;;;ACtmBA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAEA;AAAA;AAAA;;;;;;;;;;;;;;QAKaI,e;;;;;AACT,+BAAsBlqB,SAAtB,EACIoG,eADJ,EACoC;AAAA;;AAAA;;AAEhC,sCAAMpG,SAAN,EAAiBoG,eAAjB;AAHkB,gBAAApG,SAAA,GAAAA,SAAA;AAIlB,gCAAAiG,cAAA,CAAekkB,UAAf,CAA0B,gBAAAzc,OAA1B;AACA,gBAAKjH,KAAL,GAAa,UAAb;AACA,gBAAKC,UAAL,GAAkB,UAAlB;;AACA,gBAAKH,QAAL,GAAgB,UAACrV,CAAD,EAAIC,CAAJ;AAAA,iBAAU,CAAC,CAACD,CAAC,CAAC8J,EAAF,IAAQ,EAAT,EAAa5J,aAAb,CAA2BD,CAAC,CAAC6J,EAA7B,CAAD,IAAqC,CAAC,CAAC9J,CAAC,CAAC+lB,OAAF,IAAa,EAAd,EAAkB7lB,aAAlB,CAAgCD,CAAC,CAAC8lB,OAAlC,CAAhD;AAAA,SAAhB;;AANgC;AAOnC;AAED;;;;;;;;qCAIoBrL,O,EAChBwe,Q,EAAiB;AAAA;;AACjB,cAAI,CAACxe,OAAL,EAAc;AACV,kBAAM,IAAIzmB,KAAJ,CAAU,8CAAV,CAAN;AACH;;AACD,cAAM+qB,GAAG,GAAG,UAAA1d,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAZ;;AACA,cAAI,CAACijB,OAAO,CAAClT,IAAb,EAAmB;AACfkT,mBAAO,CAAClT,IAAR,GAAewX,GAAG,CACbzd,YADU,CACG,KADH,EAEV+H,aAFU,CAEI;AAAEggB,kBAAI,EAAE;AAAR,aAFJ,EAGV9nB,EAHL;AAIH;;AACD,cAAI,CAACkZ,OAAO,CAAC6X,KAAb,EAAoB;AAChB7X,mBAAO,CAAC6X,KAAR,GAAgB,IAAhB;AACH;;AAED,cAAMh/B,GAAG,sBAAemnB,OAAO,CAAC5Q,EAAR,GAAa4Q,OAAO,CAAC5Q,EAArB,GAA0B,EAAzC,cAA+CovB,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAAA,QAAA,GAAY,EAA3D,CAAT;;AACA,cAAI,CAAC,KAAK9jB,SAAL,CAAe7hB,GAAf,CAAL,EAA0B;AACtB,iBAAK6hB,SAAL,CAAe7hB,GAAf,IAAsB,IAAI2gB,OAAJ,CAAY,UAACC,OAAD,EAAUC,MAAV,EAAqB;AACnD,kBAAM+kB,OAAO,GAAG,SAAVA,OAAU,CAACpjC,IAAD,EAAqB;AACjC,uBAAO,OAAI,CAACqf,SAAL,CAAe7hB,GAAf,CAAP;AACA4gB,uBAAO,CAACpe,IAAD,CAAP;AACH,eAHD;;AAIA,kBAAMugB,KAAK,GAAG,SAARA,KAAQ,CAAApU,CAAC,EAAI;AACfkS,sBAAM,CAAClS,CAAD,CAAN;AACA,uBAAO,OAAI,CAACkT,SAAL,CAAe7hB,GAAf,CAAP;AACH,eAHD;;AAIA,kBAAM0X,KAAK,GAAG,oBAAAonB,qBAAA,CAAsB3X,OAAtB,CAAd;;AACA,kBAAIA,OAAO,CAAC5Q,EAAZ,EAAgB;AACZ,uBAAI,CAACshB,IAAL,CAAU1Q,OAAO,CAAC5Q,EAAlB,EAAsBmB,KAAtB,EAA6BsJ,IAA7B,CAAkC,UAAAre,CAAC;AAAA,yBAAIijC,OAAO,CAAC,CAACjjC,CAAD,CAAD,CAAX;AAAA,iBAAnC,EAAqDogB,KAArD;AACH,eAFD,MAEO;AACH,uBAAI,CAACrL,KAAL,CAAWA,KAAX,EAAkBsJ,IAAlB,CAAuB4kB,OAAvB,EAAgC7iB,KAAhC;AACH;AACJ,aAfqB,CAAtB;AAgBH;;AACD,iBAAO,KAAKlB,SAAL,CAAe7hB,GAAf,CAAP;AACH;AAGD;;;;;;;6BAIYiZ,O,EAAkB4sB,M,EAAgB;AAC1C,cAAMr1B,IAAI,GAAGyI,OAAO,CAAC6sB,SAAR,EAAb;;AACA,cAAGD,MAAH,EAAU;AACNr1B,gBAAI,CAACq1B,MAAL,GAAc,IAAd;AACH;;AACD,iBAAO5sB,OAAO,CAAC1C,EAAR,GAAa,KAAKwK,MAAL,CAAY9H,OAAO,CAAC1C,EAApB,EAAwB/F,IAAxB,CAAb,GAA6C,KAAK7I,GAAL,CAAS6I,IAAT,CAApD;AACH;AAED;;;;;;;;gCAKe+F,E,EAAY1K,M,EAA8B;AACrD,iBAAQ,KAAKuV,IAAL,CAAU7K,EAAV,EAAc,SAAd,EAAyB1K,MAAzB,CAAR;AACH;;;iDAC+B0K,E,EAAY1K,M,EAA8B;AACtE,iBAAQ,KAAKk6B,QAAL,CAAcxvB,EAAd,EAAkB,SAAlB,EAA6B1K,MAA7B,CAAR;AACH;;;+BAEa0K,E,EAAY1K,M,EAAkB;AACxC,iBAAO,KAAKuV,IAAL,CAAU7K,EAAV,EAAc,QAAd,EAAwB1K,MAAxB,CAAP;AACH;;;6BAEW0K,E,EAAYwS,M,EAA8Bld,M,EAAkB;AACpE,iBAAO,KAAKuV,IAAL,CAAU7K,EAAV,EAAcwS,MAAd,EAAsBld,MAAtB,CAAP;AACH;;;gCAEc0K,E,EAAY1K,M,EAAkB;AACzC,iBAAO,KAAKuV,IAAL,CAAU7K,EAAV,EAAc,KAAKoL,eAAL,CAAqBQ,SAArB,GAAiC,mBAAjC,GAAuD,SAArE,EAAgFtW,MAAhF,CAAP;AACH;;;gCAEiBqU,Q,EAAiB;AAC/B,iBAAO,IAAI,gBAAA+I,OAAJ,CAAY/I,QAAZ,CAAP;AACH;;;wCAEsB7L,Q,EAAmB;AAAA;;AACtC,cAAM2xB,QAAQ,GAAG,EAAjB;AACA3xB,kBAAQ,CAAC3R,OAAT,CAAiB,UAAAi0B,GAAG,EAAI;;;AACpB,gBAAM1d,OAAO,GAAG0d,GAAG,CAACjW,MAAJ,EAAhB;AACA,gBAAMnK,EAAE,GAAG0C,OAAO,CAAC1C,EAAnB;AACA,gBAAM1K,MAAM,GAAG;AACXo6B,wBAAU,EAAEhtB,OAAO,CAAC1C,EADT;AAEX2iB,uBAAS,EAAEjgB,OAAO,CAACigB,SAAR,CAAkBxjB,KAFlB;AAGXqhB,wBAAU,EAAE,CAAF,KAAE9d,OAAO,CAACwO,KAAR,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAE/R,KAHhB;AAIX8c,qBAAO,EAAEvZ,OAAO,CAACuZ,OAJN;AAKXhuB,mBAAK,EAAEyU,OAAO,CAAC/J,WAAR,CAAoBtJ,UAApB,CAA+B,QAA/B,EAAyCmJ,iBAAzC,EALI;AAMX4iB,iBAAG,EAAE1Y,OAAO,CAAC9J,SAAR,CAAkBvJ,UAAlB,CAA6B,QAA7B,EAAuCmJ,iBAAvC;AANM,aAAf;;AAQA,gBAAI4nB,GAAG,CAACvN,YAAJ,IAAoBuN,GAAG,CAACpE,eAAJ,KAAwB,QAAhD,EAA0D;AACtD;AACA1mB,oBAAM,CAAC,QAAD,CAAN,GAAmB,IAAnB;AACH;;AACDm6B,oBAAQ,CAAC75B,IAAT,CAAc,OAAI,CAAC45B,QAAL,CAAcxvB,EAAd,EAAkB,mBAAlB,EAAuC1K,MAAvC,CAAd;AACH,WAhBD;AAiBA,iBAAO,OAAAq6B,QAAA,CAASF,QAAT,CAAP;AACH;;;;MAlHgC,eAAAtkB,c;;AAHrC;;;uBAGa+jB,e,EAAe,+B,EAAA,+B;AAAA,K;;;aAAfA,e;AAAe,eAAfA,eAAe,K;AAAA,kBAFZ;;;;;2BAEHA,e,EAAe;cAH3B,OAAAtuB,UAG2B;eAHhB;AACR6I,oBAAU,EAAE;AADJ,S;AAGgB,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnB5B;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;QAYammB,wB;;;;;AACT,wCAAsB5qB,SAAtB,EACIoG,eADJ,EACoC;AAAA;;AAAA;;AAEhC,sCAAMpG,SAAN,EAAiBoG,eAAjB;AAHkB,gBAAApG,SAAA,GAAAA,SAAA,CACc,CA4EpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEO,gBAAA6qB,aAAA,GAAgB,UAAC1uB,KAAD;AAAA,iBAAsD,QAAK2uB,eAAL,CAAqB3uB,KAArB,EAA4B;AAAEsG,eAAG,EAAE;AAAP,WAA5B,CAAtD;AAAA,SAAhB;;AA5FH,gCAAAwD,cAAA,CAAekkB,UAAf,CAA0B,gBAAAzc,OAA1B;AACA,gBAAKjH,KAAL,GAAa,UAAb;AACA,gBAAKC,UAAL,GAAkB,UAAlB;;AACA,gBAAKH,QAAL,GAAgB,UAACrV,CAAD,EAAIC,CAAJ;AAAA,iBAAU,CAAC,CAACD,CAAC,CAAC8J,EAAF,IAAQ,EAAT,EAAa5J,aAAb,CAA2BD,CAAC,CAAC6J,EAA7B,CAAD,IAAqC,CAAC,CAAC9J,CAAC,CAAC+lB,OAAF,IAAa,EAAd,EAAkB7lB,aAAlB,CAAgCD,CAAC,CAAC8lB,OAAlC,CAAhD;AAAA,SAAhB;;AANgC;AAOnC;AAED;;;;;;;;qCAIoBrL,O,EAChBwe,Q,EAAiB;AAAA;;AACjB,cAAI,CAACxe,OAAL,EAAc;AACV,kBAAM,IAAIzmB,KAAJ,CAAU,8CAAV,CAAN;AACH;;AAED,cAAMV,GAAG,+BAAwBmnB,OAAO,CAAC5Q,EAAR,GAAa4Q,OAAO,CAAC5Q,EAArB,GAA0B,EAAlD,cAAwDovB,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAAA,QAAA,GAAY,EAApE,CAAT;;AACA,cAAI,CAAC,KAAK9jB,SAAL,CAAe7hB,GAAf,CAAL,EAA0B;AACtB,iBAAK6hB,SAAL,CAAe7hB,GAAf,IAAsB,IAAI2gB,OAAJ,CAAY,UAACC,OAAD,EAAUC,MAAV,EAAqB;AACnD,kBAAM+kB,OAAO,GAAG,SAAVA,OAAU,CAACU,QAAD,EAAmB;AAC/B,uBAAO,OAAI,CAACzkB,SAAL,CAAe7hB,GAAf,CAAP;AACA4gB,uBAAO,CAAC0lB,QAAD,CAAP;AACH,eAHD;;AAIA,kBAAMvjB,KAAK,GAAG,SAARA,KAAQ,CAAApU,CAAC,EAAI;AACfkS,sBAAM,CAAClS,CAAD,CAAN;AACA,uBAAO,OAAI,CAACkT,SAAL,CAAe7hB,GAAf,CAAP;AACH,eAHD;;AAIA,kBAAM0X,KAAK,GAAG,oBAAAonB,qBAAA,CAAsB3X,OAAtB,CAAd;;AACA,kBAAIA,OAAO,CAAC5Q,EAAZ,EAAgB;AACZ,uBAAI,CAACshB,IAAL,CAAU1Q,OAAO,CAAC5Q,EAAlB,EAAsBmB,KAAtB,EAA6BsJ,IAA7B,CAAkC,UAAAre,CAAC;AAAA,yBAAIijC,OAAO,CAAC,CAACjjC,CAAD,CAAD,CAAX;AAAA,iBAAnC,EAAqDogB,KAArD;AACH,eAFD,MAEO;AACH,uBAAI,CAACrL,KAAL,CAAWA,KAAX,EAAkBsJ,IAAlB,CAAuB4kB,OAAvB,EAAgC7iB,KAAhC;AACH;AACJ,aAfqB,CAAtB;AAgBH;;AAED,iBAAO,KAAKlB,SAAL,CAAe7hB,GAAf,CAAP;AACH;AAGD;;;;;;;6BAIYiZ,O,EAAgB;AACxB,iBAAOA,OAAO,CAAC1C,EAAR,GAAa,KAAKwK,MAAL,CAAY9H,OAAO,CAAC1C,EAApB,EAAwB0C,OAAO,CAACyH,MAAR,EAAxB,CAAb,GAAyD,KAAK/Y,GAAL,CAASsR,OAAO,CAACyH,MAAR,EAAT,CAAhE;AACH;AAED;;;;;;;;gCAKenK,E,EAAY1K,M,EAA8B;AACrD,iBAAO,KAAKuV,IAAL,CAAU7K,EAAV,EAAc,SAAd,EAAyB1K,MAAzB,CAAP;AACH;;;+BAEa0K,E,EAAY1K,M,EAAkB;AACxC,iBAAO,KAAKuV,IAAL,CAAU7K,EAAV,EAAc,QAAd,EAAwB1K,MAAxB,CAAP;AACH;;;gCAEc0K,E,EAAY1K,M,EAAkB;AACzC,iBAAO,KAAKuV,IAAL,CAAU7K,EAAV,EAAc,KAAKoL,eAAL,CAAqBQ,SAArB,GAAiC,mBAAjC,GAAuD,SAArE,EAAgFtW,MAAhF,CAAP;AACH;;;6BAEW0K,E,EAAYwS,M,EAA8Bld,M,EAAkB;AACpE,iBAAO,KAAKuV,IAAL,CAAU7K,EAAV,EAAcwS,MAAd,EAAsBld,MAAtB,CAAP;AACH;;;gCAEiBqU,Q,EAAiB;AAC/B,iBAAO,IAAI,gBAAA+I,OAAJ,CAAY/I,QAAZ,CAAP;AACH;;;;MA5EyC,oBAAAqmB,mB;;AAH9C;;;uBAGaJ,wB,EAAwB,+B,EAAA,+B;AAAA,K;;;aAAxBA,wB;AAAwB,eAAxBA,wBAAwB,K;AAAA,kBAFrB;;;;;2BAEHA,wB,EAAwB;cAHpC,OAAAhvB,UAGoC;eAHzB;AACR6I,oBAAU,EAAE;AADJ,S;AAGyB,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrBrC;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACLA;AAAA;AAAA;;AAQA;AAAA;AAAA;AAEA;;;;;;AAIA,aAAgB+H,aAAhB,CAA8BZ,OAA9B,EAAuD;AACnD,UAAI,CAACA,OAAL,EAAc;AACV,cAAMzmB,KAAK,CAAC,8CAAD,CAAX;AACH;;AACD,UAAM8lC,oBAAoB,GAAe;AACrCtd,oBAAY,EAAE,IADuB;AAErCf,YAAI,EAAE,IAF+B;AAGrCF,cAAM,EAAE;AAH6B,OAAzC;AAKA,UAAIxd,KAAK,GAAG,KAAZ;AACA;;AACA,UAAI0c,OAAO,CAACM,KAAZ,EAAmB;AAAA,qCACJle,IADI;AAEX,cACI4d,OAAO,CAACW,KAAR,CAAc7nB,cAAd,CAA6BsJ,IAA7B,KACA4d,OAAO,CAACW,KAAR,CAAcve,IAAd,aAA+B8H,KAD/B,IAEA8V,OAAO,CAACM,KAAR,CAAcI,KAAd,CAAoB/f,IAApB,CAAyB,UAAC2G,IAAD;AAAA,mBAAUA,IAAI,KAAKlF,IAAnB;AAAA,WAAzB,CAHJ,EAIE;AAAA,yDAC2B4d,OAAO,CAACW,KAAR,CAAcve,IAAd,CAD3B;AAAA;;AAAA;AACE,wEAA8C;AAAA,oBAAnCk9B,UAAmC;;AAC1C;AACA,oBACIC,UAAU,CAAC;AACPxpB,sBAAI,EAAEiK,OAAO,CAACjK,IADP;AAEPuK,uBAAK,EAAEN,OAAO,CAACM,KAFR;AAGP3Z,sBAAI,EAAEqZ,OAAO,CAACrZ,IAHP;AAIPzI,0BAAQ,EAAE8hB,OAAO,CAAC9hB,QAJX;AAKPyiB,uBAAK,EAAE2e,UAAU,CAACrD;AALX,iBAAD,CADd,EAQE;AACE,sBAAMuD,OAAO,GAAGF,UAAU,CAAC3e,KAA3B;AACA,sBAAMsb,UAAU,GAAGqD,UAAU,CAACrD,UAA9B;AACAoD,sCAAoB,CAACre,IAArB,GAA4B,KAA5B;AACA;;AACA,sBAAIib,UAAU,CAACwD,UAAf,EAA2B;AACvBJ,wCAAoB,CAACI,UAArB,GAAkC,oBAAAvD,eAAA,CAC9BD,UAAU,CAACwD,UADmB,CAAlC;AAGH;AACD;;;AACA,sBAAIxD,UAAU,CAACD,UAAf,EAA2B;AACvBqD,wCAAoB,CAACrD,UAArB,GAAkC,oBAAAE,eAAA,CAC9BD,UAAU,CAACD,UADmB,CAAlC;AAGH,mBAfH,CAgBE;AACA;AACA;AACA;;AACA;;;AACA,sBAAIwD,OAAO,CAACzd,YAAR,KAAyB3iB,SAA7B,EAAwC;AACpCigC,wCAAoB,CAACtd,YAArB,GAAoCyd,OAAO,CAACzd,YAA5C;AACH;;AACDze,uBAAK,GAAG,IAAR;AACA+7B,sCAAoB,CAACve,MAArB,GAA8B,EAA9B;AACA;AACH,iBAnCD,MAoCK;AACDue,sCAAoB,CAACve,MAArB,GAA8B,aAA9B;AACH;AACJ;AA1CH;AAAA;AAAA;AAAA;AAAA;AA2CD;AAED;;;AACA,cAAI,CAACue,oBAAoB,CAACre,IAA1B,EAAgC;AAC5B;AACH;AAtDU;;AACf,aAAK,IAAM5e,IAAX,IAAmB4d,OAAO,CAACW,KAA3B,EAAkC;AAAA,4BAAvBve,IAAuB;;AAAA,gCAoD1B;AAEP;AACJ;;AACD,UAAI,CAACkB,KAAL,EAAY;AACR+7B,4BAAoB,CAACre,IAArB,GAA4B,IAA5B;AACH;;AACD,aAAOqe,oBAAP;AACH;;AAxED;AA2EA;;;;;AAIA,aAASE,UAAT,CAAoBvf,OAApB,EAA8C;AAC1C;AACA,UAAIA,OAAO,CAACW,KAAZ,EAAmB;AACf,YAAMha,IAAI,GAAG,IAAI,UAAA0H,MAAJ,CAAW;AAAClR,cAAI,EAAE6iB,OAAO,CAACrZ;AAAf,SAAX,CAAb;AACA,YAAMzB,KAAK,GAAGiF,MAAM,CAACpH,IAAP,CAAYid,OAAO,CAACW,KAApB,EAA2BthB,MAAzC;AACA,YAAI8G,OAAO,GAAG,CAAd;AACAgE,cAAM,CAACpH,IAAP,CAAYid,OAAO,CAACW,KAApB,EAA2BplB,OAA3B,CAAmC,UAAC1C,GAAD,EAAS;AACxC,cAAI6mC,OAAO,GAAG,CAAd;AACA,cAAMC,SAAS,GACX3f,OAAO,CAACW,KAAR,CAAc9nB,GAAd,aAA8BqR,KAA9B,GACO8V,OAAO,CAACW,KAAR,CAAc9nB,GAAd,CADP,GAEM,CAACmnB,OAAO,CAACW,KAAR,CAAc9nB,GAAd,CAAD,CAHV;;AAIA,kBAAQA,GAAR;AACI,iBAAK,QAAL;AACI;AACA,kBAAImnB,OAAO,CAACjK,IAAR,IAAgBiK,OAAO,CAACjK,IAAR,CAAa6pB,MAAjC,EAAyC;AACrCF,uBAAO,GAAG,CAAV;AACAC,yBAAS,CAACpkC,OAAV,CAAkB,UAACC,CAAD;AAAA,yBACdwkB,OAAO,CAACjK,IAAR,CAAa6pB,MAAb,CAAoBj/B,IAApB,CAAyB,UAACk/B,CAAD;AAAA,2BAAOA,CAAC,KAAKrkC,CAAb;AAAA,mBAAzB,IAA2CkkC,OAAO,EAAlD,GAAuD,IADzC;AAAA,iBAAlB;AAGA;;AACA,oBAAIA,OAAO,GAAG,CAAd,EAAiB;AACbv5B,yBAAO;AACV;AACJ;;AACD;;AACJ,iBAAK,WAAL;AACI;AACA,kBAAI6Z,OAAO,CAACjK,IAAR,IAAgBiK,OAAO,CAACjK,IAAR,CAAaS,QAAjC,EAA2C;AACvCkpB,uBAAO,GAAG,CAAV;AACAC,yBAAS,CAACpkC,OAAV,CAAkB,UAACC,CAAD;AAAA,yBACd,CAACwkB,OAAO,CAACjK,IAAR,CAAa+pB,aAAb,CAA2B5mC,IAA3B,IAAmC,EAApC,EAAwCqH,OAAxC,CAAgD/E,CAAhD,KAAsD,CAAtD,GACMkkC,OAAO,EADb,GAEM,IAHQ;AAAA,iBAAlB;AAKA;;AACA,oBAAIA,OAAO,IAAI1f,OAAO,CAACW,KAAR,CAAc9nB,GAAd,EAAmBwG,MAAlC,EAA0C;AACtC8G,yBAAO;AACV;AACJ;;AACD;;AACJ,iBAAK,WAAL;AACI;AACA,kBAAI6Z,OAAO,CAACrZ,IAAZ,EAAkB;AACd,oBAAMzI,QAAQ,GAAG,oBAAAg+B,eAAA,CAAgByD,SAAS,CAAC,CAAD,CAAzB,CAAjB;AACA,oBAAMI,KAAK,GAAG,UAAAn5B,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoBiB,QAApB,CAA6B;AAAEJ,yBAAO,EAAEM;AAAX,iBAA7B,CAAd;AACA,oBAAIoF,KAAK,GAAGqD,IAAI,CAAC6vB,YAAL,CAAkBuJ,KAAlB,CAAZ;AACA;;AACA55B,uBAAO,IAAI7C,KAAK,GAAG,CAAH,GAAO,CAAvB;AACH;;AACD;;AACJ,iBAAK,UAAL;AACI;AACA,kBAAI0c,OAAO,CAACrZ,IAAZ,EAAkB;AAEd,oBAAMzI,SAAQ,GAAG,oBAAAg+B,eAAA,CAAgByD,SAAS,CAAC,CAAD,CAAzB,CAAjB;;AACA,oBAAMI,MAAK,GAAG,UAAAn5B,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAd;;AACA4J,oBAAI,CAAC8vB,WAAL,CAAiBsJ,MAAK,CAAC/hC,QAAN,CAAe;AAAEJ,yBAAO,EAAEM;AAAX,iBAAf,CAAjB,IAA0DiI,OAAO,EAAjE,GAAsE,EAAtE;AACH;;AACD;;AACJ,iBAAK,YAAL;AACI;AACA,kBACI6Z,OAAO,CAAC9hB,QAAR,IACA,oBAAAi+B,0BAAA,CAA2Bnc,OAAO,CAAC9hB,QAAnC,EAA6CyhC,SAAS,CAAC,CAAD,CAAtD,CAFJ,EAGE;AACEx5B,uBAAO;AACV;;AACD;;AACJ,iBAAK,YAAL;AACI;AACA,kBACI6Z,OAAO,CAAC9hB,QAAR,IACA,oBAAAi+B,0BAAA,CAA2BwD,SAAS,CAAC,CAAD,CAApC,EAAyC3f,OAAO,CAAC9hB,QAAjD,CAFJ,EAGE;AACEiI,uBAAO;AACV;;AACD;AAjER;AAmEH,SAzED;AA0EA,eAAOA,OAAO,IAAIjB,KAAlB;AACH;;AACD,aAAO,KAAP;AACH;;;;;;;;;;;;;;;;;;;;;ACjLD;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;QAKa86B,yB;;;;;AAET,yCAAsB5rB,SAAtB,EACYoG,eADZ,EAC8C;AAAA;;AAAA;;AAC1C,sCAAMpG,SAAN,EAAiBoG,eAAjB;AAFkB,gBAAApG,SAAA,GAAAA,SAAA;AAGlB,gCAAAiG,cAAA,CAAekkB,UAAf,CAA0B,0BAAA0B,gBAA1B;AACA,gBAAKplB,KAAL,GAAa,yBAAb;AACA,gBAAKC,UAAL,GAAkB,mBAAlB;AAJ0C;AAK7C;;;;gCAEW;AACR,gBAAMvhB,KAAK,CAAC,uEAAD,CAAX;AACH;;;+BAEU;AACP,gBAAMA,KAAK,CAAC,sEAAD,CAAX;AACH;;;oCAEkB2jB,Q,EAAe;AAC9B,iBAAO,IAAI,0BAAA+iB,gBAAJ,CAAqB/iB,QAArB,CAAP;AACH;;;+BAEarX,I,EAAwB;AAClC,iBAAO,MAAP,OAAO,CAAP,EAAO,EAAKA,IAAL,CAAP;AACH;;;;MAxB0C,eAAA0U,c;;AAH/C;;;uBAGaylB,yB,EAAyB,+B,EAAA,+B;AAAA,K;;;aAAzBA,yB;AAAyB,eAAzBA,yBAAyB,K;AAAA,kBAFtB;;;;;2BAEHA,yB,EAAyB;cAHrC,OAAAhwB,UAGqC;eAH1B;AACR6I,oBAAU,EAAE;AADJ,S;AAG0B,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACXtC;AAAA;AAAA;;QAGaonB,gB;;;;;AAKT,gCAAYvsB,IAAZ,EAA2B;AAAA;;AAAA;;AACvB,sCAAMA,IAAN;AALJ;;AACO,gBAAAwsB,WAAA,GAAc,IAAd;AAKH,gBAAKA,WAAL,GAAmB,IAAnB;AACC,gBAAaC,WAAb,GAA2B,QAAKA,WAAL,IAAoB,CAA/C;AACA,gBAAaC,aAAb,GAA6B,CAAC,CAAC1sB,IAAI,CAAC0sB,aAAP,IAAwB,kBAArD;AAJsB;AAK1B;AAED;;;;;;;iCAGa;AACT,cAAMlmB,GAAG,+EAAT;;AACAA,aAAG,CAACkmB,aAAJ,GAAoB,CAAC,CAAClmB,GAAG,CAACkmB,aAAN,IAAuBlmB,GAAG,WAA9C;AACA,iBAAOA,GAAP;AACH;;;;MAnBiC,sBAAAmmB,Y;;AAAtC;;;;;;;;;;;;;;;;;;;;QCMaA,Y;AA0ET,4BAAY3sB,IAAZ,EAA2B;AAAA;;;AAlC3B;;;AACQ,aAAA4sB,OAAA,GAAU,CAAV;AAGR;;AACO,aAAAJ,WAAA,GAAuB,KAAvB;AA8BH,aAAKK,WAAL,kBAA2B9iC,IAAI,CAACY,KAAL,CAAWZ,IAAI,CAACuJ,MAAL,KAAgB,SAA3B,CAA3B;AACA,aAAKoI,EAAL,GAAUsE,IAAI,CAACtE,EAAL,IAAW,EAArB;AACA,aAAKlW,IAAL,GAAYwa,IAAI,CAACxa,IAAL,IAAa,EAAzB;AACA,aAAKgnC,WAAL,GAAmB,KAAK9wB,EAAL,CAAQ6H,QAAR,CAAiB,WAAjB,CAAnB;AACA,aAAKqU,SAAL,GAAiB;AACbkV,oBAAU,EAAE,CAAC9sB,IAAI,CAAC4X,SAAL,GAAiB5X,IAAI,CAAC4X,SAAL,CAAekV,UAAhC,GAA6C9sB,IAAI,CAAC2a,cAAnD,KAAsE,CAAC,CADtE;AAEboS,kBAAQ,EAAE,CAAC/sB,IAAI,CAAC4X,SAAL,GAAiB5X,IAAI,CAAC4X,SAAL,CAAemV,QAAhC,GAA2C/sB,IAAI,CAAC4a,YAAjD,KAAkE,CAAC;AAFhE,SAAjB;AAIA,aAAKoS,WAAL,GAAmBhtB,IAAI,CAACgtB,WAAL,IAAoB,EAAvC;AACA,aAAKC,YAAL,GAAoBjtB,IAAI,CAACitB,YAAL,IAAqBjtB,IAAI,CAACktB,MAA9C;AACA,aAAKC,UAAL,GAAkBntB,IAAI,CAACmtB,UAAL,IAAmBntB,IAAI,CAACotB,KAAxB,IAAiC,CAAnD;AACA,aAAKC,aAAL,GAAqBrtB,IAAI,CAACqtB,aAA1B;AACA,aAAKC,gBAAL,GAAwBvjC,IAAI,CAACmD,GAAL,CAAS,CAAT,EAAY8S,IAAI,CAACstB,gBAAL,IAAyB,CAArC,CAAxB;AACA,aAAKC,gBAAL,GAAwBxjC,IAAI,CAACmD,GAAL,CAAS,CAAT,EAAY8S,IAAI,CAACutB,gBAAL,IAAyB,GAArC,CAAxB;AACA,aAAKC,iBAAL,GAAyBxtB,IAAI,CAACytB,YAAL,IAAqBztB,IAAI,CAACwtB,iBAA1B,IAA+CxtB,IAAI,CAAC0tB,UAA7E;AACA,aAAKhB,aAAL,GAAqB,CAAC,CAAC1sB,IAAI,CAAC0sB,aAA5B;AACA,aAAKiB,UAAL,GAAkB3tB,IAAI,CAAC2tB,UAAL,IAAmB,EAArC;AACA,aAAKC,UAAL,GAAkB5tB,IAAI,CAAC4tB,UAAvB;AACA,aAAKC,aAAL,GAAqB7tB,IAAI,CAAC6tB,aAA1B;AACA,aAAKpB,WAAL,GAAmB,CAAH,KAAGzsB,IAAI,CAACysB,WAAL,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,EAAhB,GAAoB,CAAvC;AACA,aAAKG,OAAL,GAAe5sB,IAAI,CAAC4sB,OAAL,IAAgB5sB,IAAI,CAAC8tB,MAArB,IAA+B,CAA9C;AACA,aAAKC,OAAL,GAAe/tB,IAAI,CAAC+tB,OAAL,IAAgB,EAA/B;AACA,YAAMC,aAAa,GAAmB,CAAChuB,IAAI,CAACvY,KAAL,IAAc,EAAf,EAAmB6H,GAAnB,CAAuB,UAAA6C,IAAI;AAAA,iBAAI,IAAIw6B,YAAJ,CAAiBx6B,IAAjB,CAAJ;AAAA,SAA3B,CAAtC;AACA,aAAK1K,KAAL,GAAaumC,aAAb;AACA,YAAMC,qBAAqB,GAAGD,aAAa,CAAC39B,MAAd,CAAqB,UAAAkI,CAAC;AAAA,iBAAI,CAACA,CAAC,CAAC21B,YAAP;AAAA,SAAtB,CAA9B;AACA,aAAKC,cAAL,GAAsBF,qBAAtB;AACA,aAAKC,YAAL,GAAoB,CAAC,CAACluB,IAAI,CAACkuB,YAAP,IAChB;AACCF,qBAAa,CAACriC,MAAd,GAAuB,CAAvB,IAA4BsiC,qBAAqB,CAACtiC,MAAtB,KAAiC,CAFlE;AAGA,0BAAeqU,IAAI,WAAJ,KAAiB,MAAjB,IAA2BA,IAAI,WAAJ,KAAiB,IAA3D;AACA,aAAKgN,KAAL,GAAahN,IAAI,CAACgN,KAAL,IAAchN,IAAI,CAACgN,KAAL,CAAWrhB,MAAzB,sBAAsCqU,IAAI,CAACgN,KAA3C,IAAoD,EAAjE;AACH;;;;oCAEkC;AAAA,cAAlB8gB,MAAkB,uEAAD,CAAC;;AAC/B,cAAIA,MAAM,IAAI,KAAKlB,OAAnB,EAA4B;AACxB,gBAAIkB,MAAM,GAAG,KAAKR,gBAAlB,EAAoC;AAChCQ,oBAAM,GAAG,CAAT;AACH;AACJ,WAJD,MAIO;AACH,gBAAIA,MAAM,GAAG,KAAKR,gBAAlB,EAAoC;AAChCQ,oBAAM,GAAG,KAAKR,gBAAd;AACH;AACJ;;AACD,eAAKV,OAAL,GAAe7iC,IAAI,CAACmD,GAAL,CAAS,CAAT,EAAYnD,IAAI,CAACq+B,GAAL,CAAS,KAAKmF,gBAAd,EAAgCO,MAAhC,CAAZ,CAAf;AACH;AAED;;;;;;;mCAIiC;AAAA,cAAjBV,KAAiB,uEAAD,CAAC;AAC7B,cAAG,KAAKD,UAAL,KAAoBC,KAAvB,EAA8B,KAAKD,UAAL,GAAkBC,KAAlB;AACjC;AAED;;;;;;;qCAIsC;AAAA,cAApBU,MAAoB,uEAAH,CAAG;AAClCA,gBAAM,GAAG/jC,IAAI,CAACmD,GAAL,CAAS,CAAT,EAAY4gC,MAAZ,CAAT;AACA,eAAKlB,OAAL,IAAgBkB,MAAhB;;AACA,cAAI,KAAKlB,OAAL,GAAe,CAAnB,EAAsB;AAClB,iBAAKA,OAAL,GAAe,CAAf;AACH,WAFD,MAEO,IAAI,KAAKA,OAAL,GAAe,KAAKU,gBAAxB,EAA0C;AAC7C,iBAAKV,OAAL,GAAe,KAAKU,gBAApB;AACH,WAFM,MAEA,IAAI,KAAKV,OAAL,GAAe,KAAKW,gBAAxB,EAA0C;AAC7C,iBAAKX,OAAL,GAAe,KAAKW,gBAApB;AACH;AACJ;AAED;;;;;;;0CAI2C;AAAA,cAApBO,MAAoB,uEAAH,CAAG;AACvCA,gBAAM,GAAG/jC,IAAI,CAACmD,GAAL,CAAS,CAAT,EAAY4gC,MAAZ,CAAT;AACA,eAAKlB,OAAL,IAAgBkB,MAAhB;;AACA,cAAI,KAAKlB,OAAL,GAAe,CAAnB,EAAsB;AAClB,iBAAKA,OAAL,GAAe,CAAf;AACH,WAFD,MAEO,IAAI,KAAKA,OAAL,GAAe,KAAKU,gBAAxB,EAA0C;AAC7C,iBAAKV,OAAL,GAAe,CAAf;AACH;AACJ;AAED;;;;;;iCAGa;AACT,cAAMpmB,GAAG,qBAAa,IAAb,CAAT,CADS,CAET;;AACA,iBAAOA,GAAG,CAACC,QAAX;AACA,iBAAOD,GAAG,CAACf,aAAX,CAJS,CAKT;;AACAe,aAAG,CAAC4mB,KAAJ,GAAY5mB,GAAG,CAAC2mB,UAAhB;AACA3mB,aAAG,CAACknB,UAAJ,GAAiBlnB,GAAG,CAACgnB,iBAArB;AACA,cAAMn+B,IAAI,GAAGoH,MAAM,CAACpH,IAAP,CAAYmX,GAAZ,CAAb;;AACA,qCAAkBnX,IAAlB,8BAAwB;AAAnB,gBAAMlK,GAAG,cAAT;;AACD,gBAAIA,GAAG,CAAC,CAAD,CAAH,KAAW,GAAf,EAAoB;AAChB,kBAAMuhB,OAAO,GAAGvhB,GAAG,CAACipC,MAAJ,CAAW,CAAX,CAAhB;AACA5nB,iBAAG,CAACE,OAAD,CAAH,GAAeF,GAAG,CAACrhB,GAAD,CAAlB;AACA,qBAAOqhB,GAAG,CAACrhB,GAAD,CAAV;AACH,aAJD,MAIO,IAAIqhB,GAAG,CAACrhB,GAAD,CAAH,KAAauG,SAAjB,EAA4B;AAC/B,qBAAO8a,GAAG,CAACrhB,GAAD,CAAV;AACH;AACJ;;AACDqhB,aAAG,CAAC/e,KAAJ,GAAY+e,GAAG,CAAC/e,KAAJ,CAAU6H,GAAV,CAAc,UAAC6C,IAAD;AAAA,mBAAwBA,IAAI,CAAC0T,MAAL,EAAxB;AAAA,WAAd,CAAZ;AACA,iBAAOW,GAAP;AACH;;;4BArI2B;AACxB,iBACI,KAAKkmB,aAAL,IACA,CAAC,eAAD,IAAiB,KAAKjlC,KAAL,CAAW2F,MAAX,CACb,UAACihC,OAAD,EAAUl8B,IAAV;AAAA,mBAAmBk8B,OAAO,IAAIl8B,IAAI,CAACm8B,iBAAnC;AAAA,WADa,EAEb,KAFa,CAFrB;AAOH;AAED;;;;4BACiB;AACb,iBAAO,KAAK1B,OAAL,IAAgB,CAAvB;AACH;AAEA;;;;4BACgB;AACb,iBAAO,KAAKO,UAAL,IAAmB,CAA1B;AACH;AAED;;;;4BACgB;AACZ,iBAAQ,KAAKP,OAAL,GAAe,KAAKO,UAArB,IAAoC,CAA3C;AACH;;;;;;AAxEL;;;;;;;;;;;;;;;;;;;;ACRA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;QAKaoB,oB;;;;;AACT,oCAAsB7tB,SAAtB,EACYoG,eADZ,EAC8C;AAAA;;AAAA;;AAC1C,sCAAMpG,SAAN,EAAiBoG,eAAjB;AAFkB,gBAAApG,SAAA,GAAAA,SAAA;AAGlB,gCAAAiG,cAAA,CAAekkB,UAAf,CAA0B,sBAAA8B,YAA1B;AACA,gBAAKxlB,KAAL,GAAa,eAAb;AACA,gBAAKC,UAAL,GAAkB,eAAlB;AAJ0C;AAK7C;;;;gCAEW;AACR,gBAAMvhB,KAAK,CAAC,yDAAD,CAAX;AACH;;;+BAEU;AACP,gBAAMA,KAAK,CAAC,wDAAD,CAAX;AACH;;;oCAEkB2jB,Q,EAAe;AAC9B,iBAAO,IAAI,sBAAAmjB,YAAJ,CAAiBnjB,QAAjB,CAAP;AACH;;;+BAEarX,I,EAAoB;AAC9B,iBAAOA,IAAI,YAAY,sBAAAw6B,YAAhB,GAA+Bx6B,IAAI,CAAC0T,MAAL,EAA/B,GAA+C1T,IAAtD;AACH;;;;MAvBqC,eAAA0U,c;;AAH1C;;;uBAGa0nB,oB,EAAoB,+B,EAAA,+B;AAAA,K;;;aAApBA,oB;AAAoB,eAApBA,oBAAoB,K;AAAA,kBAFjB;;;;;2BAEHA,oB,EAAoB;cAHhC,OAAAjyB,UAGgC;eAHrB;AACR6I,oBAAU,EAAE;AADJ,S;AAGqB,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACXjC;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;;;;;;;;;;;;;QAKaqpB,mB;;;;;AACT,mCAAsB9tB,SAAtB,EACYoG,eADZ,EAC8C;AAAA;;AAAA;;AAC1C,sCAAMpG,SAAN,EAAiBoG,eAAjB;AAFkB,gBAAApG,SAAA,GAAAA,SAAA;AAGlB,gBAAKyG,KAAL,GAAa,eAAb;AACA,gBAAKC,UAAL,GAAkB,MAAlB;AAH0C;AAI7C;AAED;;;;;;;;oCAIsBjV,I,EAAe;AACjC,iBAAOA,IAAI,CAAC1K,KAAL,GAAa,IAAI,0BAAA8kC,gBAAJ,CAAqBp6B,IAArB,CAAb,GAA0C,IAAI,sBAAAw6B,YAAJ,CAAiBx6B,IAAjB,CAAjD;AACH;;;;MAdoC,eAAA0U,c;;AAHzC;;;uBAGa2nB,mB,EAAmB,+B,EAAA,+B;AAAA,K;;;aAAnBA,mB;AAAmB,eAAnBA,mBAAmB,K;AAAA,kBAFhB;;;;;2BAEHA,mB,EAAmB;cAH/B,OAAAlyB,UAG+B;eAHpB;AACR6I,oBAAU,EAAE;AADJ,S;AAGoB,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACXhC;AAAA;AAAA;;;;;;QAKaspB,oB;AAHb;AAAA;;AAKW,aAAAC,aAAA,GAAgB,EAAhB;AAUV;;;;iCAPmBhQ,K,EAAO;AACnB,eAAKgQ,aAAL,GAAqBhQ,KAArB;AACH;;;mCAEiB;AACd,iBAAO,KAAKgQ,aAAZ;AACH;;;;;;AAdL;;;uBAGaD,oB;AAAoB,K;;;aAApBA,oB;AAAoB,eAApBA,oBAAoB,K;AAAA,kBAFjB;;;;;2BAEHA,oB,EAAoB;cAHhC,OAAAnyB,UAGgC;eAHrB;AACR6I,oBAAU,EAAE;AADJ,S;AAGqB,Q;;;;;;;;;;;;;;;;;;;;;;ACNjC;AAAA;AAAA;;AAGA;AAAA;AAAA;;AAGA;AAAA;AAAA;;AAaA,QAAMyL,GAAG,GAAG,UAAA1d,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAZ,C,CAEA;;QACai3B,a;AA8EX,6BAAYtgB,IAAZ,EAA2B;AAAA;;;AAzD3B;;;AACA,aAAAqjB,WAAA,GAAsB,EAAtB;AACA;;AACA,aAAAvgB,QAAA,GAAmB,EAAnB;AAMA;;;;;;;;;;AASO,aAAA1E,OAAA,GAAmB,IAAnB;AAaP;;AACS,aAAAmkB,aAAA,GAAwB,CAAxB;AAOT;;AACS,aAAA96B,KAAA,GAAsD,EAAtD,CAiBkB,CAV3B;AACA;;AACA;;AACU,aAAAge,aAAA,GAAiC,EAAjC;AAQR;;;;AAGA,YAAM6X,KAAK,GAAG,UAAApqB,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAd,CAJyB,CAKzB;;AACA,YAAMu2B,cAAc,GAAGtC,KAAK,CAACjzB,QAAN,CAAe;AAAEP,gBAAM,EAAEC,IAAI,CAACC,IAAL,CAAUszB,KAAK,CAACpzB,OAAN,GAAgB,CAA1B,IAA+B;AAAzC,SAAf,CAAvB;AACA,YAAMszB,oBAAoB,GAAG,CAAH,WAAGC,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEC,cAAN,EAAH,MAAuB,IAAvB,IAAuB,aAAvB,GAAuB,MAAvB,GAAuB,GAAIC,eAAJ,EAApB,MAAuC,IAAvC,IAAuC,aAAvC,GAAuC,MAAvC,GAAuC,GAAIC,QAAxE;AAEA,aAAKliB,EAAL,GAAUsE,IAAI,CAACtE,EAAL,oBAAoB3R,IAAI,CAACY,KAAL,CAAWZ,IAAI,CAACuJ,MAAL,KAAgB,SAA3B,CAApB,CAAV,CATyB,CAWzB;;AACA,aAAK8K,OAAL,GAAe4B,IAAI,CAAC5B,OAAL,IAAgB,IAA/B,CAZyB,CAezB;;AACA,YAAI,KAAKuwB,kBAAT,EAA6B;AAC3B,eAAKhV,YAAL,GAAoB,KAAKvb,OAAL,CAAa/J,WAAb,CAAyBjB,EAA7C;AACA,eAAKkwB,gBAAL,GAAwB,KAAKllB,OAAL,CAAa/P,QAArC;AACA,eAAKugC,aAAL,GAAqB,KAAKxwB,OAAL,CAAa/J,WAAlC;AACA,eAAKgvB,WAAL,GAAmBrjB,IAAI,CAACqjB,WAAL,IAAoB,EAAvC;AACA,eAAKvgB,QAAL,GAAgB9C,IAAI,CAAC8C,QAAL,IAAiB,EAAjC;AACD,SAND,MAMO;AACL,eAAK6W,YAAL,GAAoB3Z,IAAI,CAAC2Z,YAAL,IAAqBiG,cAAc,CAACxsB,EAAxD;AACA,eAAKkwB,gBAAL,GAAwBtjB,IAAI,CAACsjB,gBAAL,IAAyB9F,oBAAjD;AACA,eAAKoR,aAAL,GAAqB,IAAI,UAAAj0B,MAAJ,CAAW;AAAElR,gBAAI,EAAE,KAAKkwB,YAAb;AAA2B1I,uBAAW,EAAE,KAAxC;AAA+CC,uBAAW,EAAE,KAAKoS;AAAjE,WAAX,CAArB;AACA,eAAKD,WAAL,GAAmBrjB,IAAI,CAACqjB,WAAL,IAAoB,EAAvC;AACA,eAAKvgB,QAAL,GAAgB9C,IAAI,CAAC8C,QAAL,IAAiB,EAAjC;AACD;;AAED,aAAKyf,aAAL,GAAqB,OAAOviB,IAAI,CAACuiB,aAAZ,KAA8B,QAA9B,GAAyCviB,IAAI,CAACuiB,aAA9C,GAA8D,CAAnF;AACA,aAAKrU,MAAL,GAAclO,IAAI,CAACkO,MAAL,IAAe,UAA7B;AACA,aAAK2gB,WAAL,GAAmB7uB,IAAI,CAAC6uB,WAAL,IAAoB7uB,IAAI,CAAC2T,IAA5C;AACA,aAAK+K,KAAL,GAAa1e,IAAI,CAAC0e,KAAlB;AACA,aAAKoQ,OAAL,GAAe9uB,IAAI,CAAC8uB,OAAL,YAAwBt4B,KAAxB,GAAgC,CAAC,CAACwJ,IAAI,CAAC8uB,OAAL,CAAanjC,MAA/C,GAAwDqU,IAAI,CAAC8uB,OAA5E;AACA,aAAKC,MAAL,GAAc/uB,IAAI,CAAC+uB,MAAL,YAAuBv4B,KAAvB,GAA+B,CAAC,CAACwJ,IAAI,CAAC+uB,MAAL,CAAYpjC,MAA7C,GAAsDqU,IAAI,CAAC+uB,MAAzE;AACA,aAAKC,MAAL,GAAchvB,IAAI,CAACgvB,MAAL,IAAe,KAA7B;AACA,aAAKvnC,KAAL,GAAa,CAACuY,IAAI,CAACvY,KAAL,IAAc,EAAf,EACV6H,GADU,CACN,UAAA6C,IAAI;AAAA,iBAAKA,IAAI,CAAC1K,KAAL,GAAa,IAAI,0BAAA8kC,gBAAJ,CAAqBp6B,IAArB,CAAb,GAA0C,IAAI,sBAAAw6B,YAAJ,CAAiBx6B,IAAjB,CAA/C;AAAA,SADE,EAEV9B,MAFU,CAEH,UAAA8B,IAAI;AAAA,iBAAI,CAAC,CAACA,IAAI,CAAC27B,MAAX;AAAA,SAFD,CAAb;AAGD;AAED;;;;;;AAgDA;;;gCAGY;AACR,iBAAO,IAAIxN,aAAJ,CAAkB,KAAKza,MAAL,EAAlB,CAAP;AACH;AAED;;;;;;iCAGa;AACX,cAAMW,GAAG,qBAAa,IAAb,CAAT,CADW,CAEX;;AACA,iBAAOA,GAAG,CAACf,aAAX,CAHW,CAIX;;AACA,iBAAOe,GAAG,CAACpI,OAAX;AACA,iBAAOoI,GAAG,CAAC9D,OAAX;AACA,iBAAO8D,GAAG,CAACooB,aAAX,CAPW,CASX;;AACA,cAAMv/B,IAAI,GAAGoH,MAAM,CAACpH,IAAP,CAAYmX,GAAZ,CAAb;;AACA,qCAAkBnX,IAAlB,8BAAwB;AAAnB,gBAAMlK,GAAG,cAAT;;AACH,gBAAIA,GAAG,CAAC,CAAD,CAAH,KAAW,GAAf,EAAoB;AAClB,kBAAMuhB,OAAO,GAAG,KAAKjB,aAAL,CAAmBtgB,GAAG,CAACipC,MAAJ,CAAW,CAAX,CAAnB,KAAqCjpC,GAAG,CAACipC,MAAJ,CAAW,CAAX,CAArD;AACA5nB,iBAAG,CAACE,OAAD,CAAH,GAAeF,GAAG,CAACrhB,GAAD,CAAlB;AACA,qBAAOqhB,GAAG,CAACrhB,GAAD,CAAV;AACD,aAJD,MAIO,IAAIqhB,GAAG,CAACrhB,GAAD,CAAH,KAAauG,SAAjB,EAA4B;AACjC,qBAAO8a,GAAG,CAACrhB,GAAD,CAAV;AACD;AACF;;AACDqhB,aAAG,CAAC/e,KAAJ,GAAY+e,GAAG,CAAC/e,KAAJ,CAAU6H,GAAV,CAAc,UAAC6C,IAAD;AAAA,mBAAwBA,IAAI,CAAC0T,MAAL,EAAxB;AAAA,WAAd,CAAZ;AAEA,iBAAOW,GAAP;AACD;;;4BAhF4B;AAC3B,iBAAO,CAAC,CAAC,KAAKpI,OAAd;AACD;AAED;;;;4BACe;AACb,cAAI1P,IAAI,GAAG,EAAX;AACA;;AACA,cAAI,KAAKogC,OAAT,EAAkBpgC,IAAI,IAAI,SAAR;AAClB;;AACA,cAAI,KAAKqgC,MAAT,EAAiB;AACf;AACA,gBAAIrgC,IAAJ,EAAUA,IAAI,IAAI,KAAR;AACVA,gBAAI,IAAI,QAAR;AACD;;AACD,iBAAOA,IAAP;AACD;AAED;;;;4BACgB;AACd,iBAAO,KAAKjH,KAAL,CAAW2F,MAAX,CAAkB,UAAC6hC,KAAD,EAAQ98B,IAAR;AAAA,mBAAiB88B,KAAK,IAAI98B,IAAI,CAAC88B,KAAL,IAAc,CAAlB,CAAtB;AAAA,WAAlB,EAA8D,CAA9D,CAAP;AACD;AAED;;;;4BACqB;AACnB,iBAAO,KAAKxnC,KAAL,CAAW2F,MAAX,CAAkB,UAAC6hC,KAAD,EAAQ98B,IAAR;AAAA,mBAAiB88B,KAAK,IAAI98B,IAAI,CAAC27B,MAAL,IAAe,CAAnB,CAAtB;AAAA,WAAlB,EAA+D,CAA/D,CAAP;AACD;;;4BAEsB;;;AACrB,iBAAO,CAAC,KAAKc,aAAL,KAAkB,MAAI,KAAKxwB,OAAT,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAE/J,WAApC,CAAD,EAAkD/J,QAAlD,CAA2D;AAAEJ,mBAAO,EAAE,KAAKq4B;AAAhB,WAA3D,CAAP;AACD;AAED;;;;4BACqB;AACnB,iBAAO,KAAK2M,YAAL,CAAkBnkC,UAAlB,CAA6B,QAA7B,CAAP;AACD;AAED;;;;4BAC0B;AACxB,iBAAO,KAAKmkC,YAAL,CAAkBnkC,UAAlB,CAA6B,OAA7B,EAAsCmJ,iBAAtC,EAAP;AACD;AAED;;;;4BAC0B;AACxB,iBAAO,KAAKg7B,YAAL,CAAkBnkC,UAAlB,CAA6B,aAA7B,CAAP;AACD;;;;;;AAtKH;;;;;;;;;;;;;;;;;;;;ACtBA;AAAA;AAAA;;AAEa,YAAAokC,6BAAA,GAAgC,UAACC,QAAD,EAAyBC,QAAzB;AAAA,aACzC,IAAI,sBAAA1C,YAAJ,CAAiB,MAAD,OAAC,CAAD,kBACRyC,QAAQ,YAAY,sBAAAzC,YAApB,GAAmCyC,QAAQ,CAACvpB,MAAT,EAAnC,GAAuDupB,QAD/C,CAAC,EAEVC,QAFU,CAAjB,CADyC;AAAA,KAAhC;;;;;;;;;;;;;;;;;;;;;;;;;ACFb;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACPA;AAAA;AAAA;;;;;;QAMaC,kB;AAGX,oCAAc;AAAA;;AAFN,aAAAC,YAAA,GAAe,IAAIxwB,GAAJ,EAAf;AAES,O,CAEjB;;;;;uCACerD,E,EAAY8zB,S,EAA4B;AACrD,eAAKD,YAAL,CAAkBnmC,GAAlB,CAAsBsS,EAAtB,EAA0B8zB,SAA1B;AACD,S,CAED;;;;oCACY9zB,E,EAAU;AACpB,cAAM8zB,SAAS,GAAG,KAAKD,YAAL,CAAkBpwB,GAAlB,CAAsBzD,EAAtB,CAAlB;;AACA,cAAI8zB,SAAJ,EAAe;AACbA,qBAAS,CAACC,KAAV;AACA,iBAAKF,YAAL,WAAyB7zB,EAAzB;AACD;AACF,S,CAED;;;;0CACe;AAAA;;AACb,eAAK6zB,YAAL,CAAkB1nC,OAAlB,CAA0B,UAAC2nC,SAAD,EAAY9zB,EAAZ,EAAmB;AAC3C8zB,qBAAS,CAACC,KAAV;;AACA,mBAAI,CAACF,YAAL,WAAyB7zB,EAAzB;AACD,WAHD;AAID;;;;;;AA5BH;;;uBAGa4zB,kB;AAAkB,K;;;aAAlBA,kB;AAAkB,eAAlBA,kBAAkB,K;AAAA,kBAFjB;;;;;2BAEDA,kB,EAAkB;cAH9B,OAAAhzB,UAG8B;eAHnB;AACV6I,oBAAU,EAAE;AADF,S;AAGmB,Q;;;;;AA4B/B,QAAYuqB,SAAZ;;AAAA,eAAYA,SAAZ,EAAqB;AACnB;AACA;AACD,KAHD,EAAYA,SAAS,GAAT,QAAAA,SAAA,aAAAA,SAAA,GAAS,EAAT,CAAZ;;;;;;;;;;;;;;;;;;;;;AClCA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;QAKaC,e;AAHb;AAAA;;AAIY,aAAAC,eAAA,GAAkB,IAAI,OAAA1qC,eAAJ,CAA6B,KAA7B,CAAlB;AACR,aAAA2qC,SAAA,GAAY,KAAKD,eAAL,CAAqB7tB,YAArB,EAAZ;AAKH;;;;wCAHmB;AACZ,eAAK6tB,eAAL,CAAqBh4B,IAArB,CAA0B,KAA1B;AACH;;;;;;AATL;;;uBAGa+3B,e;AAAe,K;;;aAAfA,e;AAAe,eAAfA,eAAe,K;AAAA,kBAFZ;;;;;2BAEHA,e,EAAe;cAH3B,OAAArzB,UAG2B;eAHhB;AACR6I,oBAAU,EAAE;AADJ,S;AAGgB,Q;;;;;;;;;;;;;;;;;;;;;;ACN5B;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;QAKa2qB,gB;;;;AAHb;;YAGaA;;;;yBAAAA,gB;AAAgB,O;AAAA,gBAFlB,CAAC,SAAAprC,YAAD,CAEkB;;;;+EAAhBorC,gB,EAAgB;AAAA,kBAFjB,SAAAprC,YAEiB;AAAA,O;AAFL,K;;;;;2BAEXorC,gB,EAAgB;cAH5B,OAAAnrC,QAG4B;eAHnB;AACRC,iBAAO,EAAE,CAAC,SAAAF,YAAD;AADD,S;AAGmB,Q;;;;;;;;;;;;;;;;;;;;;;ACN7B;AAAA;AAAA;;AACA;AAAA;AAAA;;AAMA;AAAA;AAAA;;;;;AAKA;;;AACA,QAAMqrC,uBAAuB,GAAa,CAAC,SAAD,EAAY,OAAZ,EAAqB,KAArB,EAA4B,MAA5B,EAAoC,IAApC,CAA1C;;QAKaC,c;AAcX,gCAAc;AAAA;;AAAA;;AAbd;AACQ,aAAAC,cAAA,GAAmD,EAAnD;AACR;;AACQ,aAAAC,iBAAA,GAAiD,EAAjD;AACR;;AACQ,aAAAC,SAAA,GAAsB,EAAtB;AACR;;AACQ,aAAAC,iBAAA,GAAgC,EAAhC;AACR;;AACQ,aAAApE,OAAA,GAAkB,CAAlB;AAKNh9B,cAAM,CAACqhC,gBAAP,CAAwB,SAAxB,EAAmC,UAACl5B,KAAD,EAA0B;AAC3D,cAAMwc,IAAI,GAAG,OAAI,CAAC2c,MAAL,CAAY,CAACn5B,KAAK,CAACwc,IAAN,IAAc,EAAf,EAAmBxiB,WAAnB,EAAZ,CAAb;AACA;;;AACA,cAAI,OAAI,CAACo/B,SAAL,KAAmB5c,IAAvB,EAA6B;AAC3B;AACA,gBAAI,CAAC,OAAI,CAACsc,cAAL,CAAoBtc,IAApB,CAAL,EAAgC;AAC9B,qBAAI,CAACsc,cAAL,CAAoBtc,IAApB,IAA4B,IAAI,OAAAzuB,eAAJ,CAAoB,IAApB,CAA5B;AACA,qBAAI,CAACgrC,iBAAL,CAAuBvc,IAAvB,IAA+B,OAAI,CAACsc,cAAL,CAAoBtc,IAApB,EAA0B5R,YAA1B,EAA/B;AACD;;AACD,mBAAI,CAACkuB,cAAL,CAAoBtc,IAApB,EAA0B/b,IAA1B,CAA+B,EAAE,OAAI,CAACo0B,OAAtC;AACA;;;AACA,gBAAI,OAAI,CAACmE,SAAL,CAAetjC,OAAf,CAAuB8mB,IAAvB,KAAgC,CAApC,EAAuC;AACrCxc,mBAAK,CAACq5B,cAAN;AACD;;AACD,mBAAI,CAACD,SAAL,GAAiB5c,IAAjB;AACD;AACF,SAhBD;AAkBA3kB,cAAM,CAACqhC,gBAAP,CAAwB,OAAxB,EAAiC,UAACl5B,KAAD,EAA0B;AACzD,cAAMwc,IAAI,GAAG,OAAI,CAAC2c,MAAL,CAAY,CAACn5B,KAAK,CAACwc,IAAN,IAAc,EAAf,EAAmBxiB,WAAnB,EAAZ,CAAb;AACA;;;AACA,cAAI,OAAI,CAAC8+B,cAAL,CAAoBtc,IAApB,CAAJ,EAA+B;AAC7B,mBAAI,CAACsc,cAAL,CAAoBtc,IAApB,EAA0B/b,IAA1B,CAA+B,IAA/B;AACD;AACD;;;AACA,cAAI,OAAI,CAAC24B,SAAL,KAAmB5c,IAAvB,EAA6B;AAC3B,mBAAI,CAAC4c,SAAL,GAAiB,IAAjB;AACD;AACF,SAVD;AAWD;AAED;;;;;;;;;+BAKcE,K,EAA0B74B,I,EAAgB;AAAA;;AACtD64B,eAAK,GAAIA,KAAK,YAAYj6B,KAAjB,GAAyBi6B,KAAzB,GAAiCA,KAAK,CAAChlC,KAAN,CAAY,GAAZ,CAA1C;AACA,cAAMilC,WAAW,GAAaD,KAAK,CAACnhC,GAAN,CAAU,UAAAxH,CAAC;AAAA,mBAAI,OAAI,CAACwoC,MAAL,CAAYxoC,CAAC,CAACqJ,WAAF,EAAZ,CAAJ;AAAA,WAAX,CAA9B;AACA;;AACA,cAAIu/B,WAAW,CAAC/kC,MAAZ,GAAqB,CAArB,IAA0B,KAAKglC,gBAAL,CAAsBD,WAAtB,CAA9B,EAAkE;AAChE,iBAAKN,iBAAL,CAAuB9+B,IAAvB,CAA4Bo/B,WAA5B;AACA,gBAAME,QAAQ,GAAGF,WAAW,CAACA,WAAW,CAAC/kC,MAAZ,GAAqB,CAAtB,CAA5B;AACA;;AACA,gBAAI,CAAC,KAAKskC,cAAL,CAAoBW,QAApB,CAAL,EAAoC;AAClC,mBAAKX,cAAL,CAAoBW,QAApB,IAAgC,IAAI,OAAA1rC,eAAJ,CAAoB,IAApB,CAAhC;AACA,mBAAKgrC,iBAAL,CAAuBU,QAAvB,IAAmC,KAAKX,cAAL,CAAoBW,QAApB,EAA8B7uB,YAA9B,EAAnC;AACD;;AACD,iBAAK8uB,wBAAL;AACA,mBAAO,KAAKX,iBAAL,CAAuBU,QAAvB,EAAiClpC,SAAjC,CAA2C,UAAC8J,KAAD,EAAW;AAC3D;AACA,kBAAIA,KAAJ,EAAW;AACT,oBAAMs/B,OAAO,GAAa,EAA1B;AACA;;AACA,oBAAIJ,WAAW,CAAC/kC,MAAZ,GAAqB,CAAzB,EAA4B;AAC1B;AAD0B,+DAER+kC,WAFQ;AAAA;;AAAA;AAE1B,8EAA+B;AAAA,0BAApBvrC,GAAoB;AAC7B,0BAAMX,KAAK,GAAG,OAAI,CAACyrC,cAAL,CAAoB9qC,GAApB,CAAd;AACA2rC,6BAAO,CAACx/B,IAAR,CAAa9M,KAAK,GAAGA,KAAK,CAACyB,QAAN,MAAoB,CAAC,CAAxB,GAA4B,CAAC,CAA/C;AACD,qBALyB,CAM1B;;AAN0B;AAAA;AAAA;AAAA;AAAA;;AAO1B,uBAAK,IAAI6B,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAG4oC,WAAW,CAAC/kC,MAAZ,GAAqB,CAAzC,EAA4C7D,GAAC,EAA7C,EAAiD;AAC/C,wBAAIgpC,OAAO,CAAChpC,GAAD,CAAP,GAAagpC,OAAO,CAAChpC,GAAC,GAAG,CAAL,CAAxB,EAAiC;AAC/B;AACD;AACF;AACF;;AACD,oBAAMmnC,KAAK,GAAG6B,OAAO,CAAC1jC,MAAR,CAAe,UAACwE,CAAD,EAAIuE,CAAJ;AAAA,yBAAUvE,CAAC,IAAIuE,CAAC,GAAG,CAAJ,GAAQ,CAAR,GAAY,CAAC,CAAjB,CAAX;AAAA,iBAAf,EAA+C,CAA/C,CAAd;AACA;;AACA,oBAAI84B,KAAK,IAAIyB,WAAW,CAAC/kC,MAAzB,EAAiC;AAC/BiM,sBAAI;AACL;AACF;AACF,aAxBM,CAAP;AAyBD;;AACD,iBAAO,IAAP;AACD;AAED;;;;;;;+BAIe+b,I,EAAY;AACzB;AACA,cAAIA,IAAI,CAAC9mB,OAAL,CAAa,KAAb,KAAuB,CAAvB,IAA4B8mB,IAAI,CAAC9mB,OAAL,CAAa,OAAb,KAAyB,CAArD,IAA0D8mB,IAAI,CAAC9mB,OAAL,CAAa,SAAb,KAA2B,CAAzF,EAA4F;AAC1F,mBAAO8mB,IAAI,CAACjhB,OAAL,CAAa,MAAb,EAAqB,EAArB,EAAyBA,OAAzB,CAAiC,OAAjC,EAA0C,EAA1C,CAAP;AACD;;AACD,iBAAOihB,IAAP;AACD;AAED;;;;;;mDAGgC;AAC9B,cAAMod,QAAQ,GAAG,EAAjB;;AAD8B,uDAEV,KAAKX,iBAFK;AAAA;;AAAA;AAE9B,sEAA4C;AAAA,kBAAjCK,KAAiC;AAC1C,mBAAKN,SAAL,CAAe7+B,IAAf,CAAoBm/B,KAAK,CAACA,KAAK,CAAC9kC,MAAN,GAAe,CAAhB,CAAzB;AACD;AAJ6B;AAAA;AAAA;AAAA;AAAA;;AAK9B,eAAKwkC,SAAL,GAAiB,OAAAhgC,MAAA,CAAO4gC,QAAP,CAAjB;AACD;AAED;;;;;;;yCAIyBN,K,EAAe;AACtC,cAAIO,QAAQ,GAAG,CAAf;;AADsC,uDAEpBP,KAFoB;AAAA;;AAAA;AAEtC,sEAAyB;AAAA,kBAAdtrC,GAAc;;AACvB;AACA,kBAAI4qC,uBAAuB,CAACljC,OAAxB,CAAgC1H,GAAhC,IAAuC,CAA3C,EAA8C;AAC5C6rC,wBAAQ;AACT;AACF;AAPqC;AAAA;AAAA;AAAA;AAAA;;AAQtC,iBAAOA,QAAQ,GAAG,CAAlB;AACD;;;;;;AApIH;;;uBAGahB,c;AAAc,K;;;aAAdA,c;AAAc,eAAdA,cAAc,K;AAAA,kBAFb;;;;;2BAEDA,c,EAAc;cAH1B,OAAA1zB,UAG0B;eAHf;AACV6I,oBAAU,EAAE;AADF,S;AAGe,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClB3B;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACCA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;QAEa8rB,W;AAyCX,2BAAY5rB,QAAZ,EAA+B;AAAA;;AAC7B,aAAK3J,EAAL,GAAU2J,QAAQ,CAAC3J,EAAT,IAAe2J,QAAQ,CAAC6rB,MAAxB,IAAkC7rB,QAAQ,CAAC8rB,OAArD;AACA,aAAK3rC,IAAL,GAAY6f,QAAQ,CAAC7f,IAAT,IAAiB,EAA7B;AACA,aAAKyB,CAAL,GAASoe,QAAQ,CAACpe,CAAT,GACL8C,IAAI,CAACY,KAAL,CAAW,KAAKymC,SAAL,CAAe/rB,QAAQ,CAACpe,CAAxB,EAA2Boe,QAAQ,CAACgsB,KAAT,IAAkB,KAA7C,IAAsD,KAAjE,CADK,GAEL,IAFJ;AAGA,aAAKnqC,CAAL,GAASme,QAAQ,CAACne,CAAT,GACL6C,IAAI,CAACY,KAAL,CAAW,KAAKymC,SAAL,CAAe/rB,QAAQ,CAACne,CAAxB,EAA2Bme,QAAQ,CAACgsB,KAAT,IAAkB,KAA7C,IAAsD,KAAjE,CADK,GAEL,IAFJ;AAGA,YAAMha,OAAO,GAAG,wBAAA1Q,cAAA,CAAeC,UAAf,CAA0B,qBAAA0qB,YAA1B,CAAhB;AACA,aAAKxc,KAAL,GACEzP,QAAQ,CAACyP,KAAT,YAA0B,cAAAyc,aAA1B,GACIlsB,QAAQ,CAACyP,KADb,GAEIuC,OAAO,GACPA,OAAO,CAACma,WAAR,CAAoBnsB,QAAQ,CAACyP,KAA7B,CADO,GAEP,IAAI,cAAAyc,aAAJ,CAAkBlsB,QAAQ,CAACyP,KAA3B,CALN;AAMA,aAAK2c,KAAL,GAAa,KAAKxqC,CAAL,KAAW,IAAX,IAAmB,KAAKC,CAAL,KAAW,IAA3C;AACA,aAAKwqC,UAAL,GAAkB3nC,IAAI,CAACmD,GAAL,CAAS,CAAT,EAAYnD,IAAI,CAACq+B,GAAL,CAAS,EAAT,EAAa/iB,QAAQ,CAACqsB,UAAT,IAAuB,CAApC,CAAZ,CAAlB;AACA,aAAKC,OAAL,GAAe,KAAKj2B,EAAL,IAAW,KAAKA,EAAL,CAAQ7O,OAAR,CAAgB,OAAhB,MAA6B,CAAvD;AACA,aAAKkQ,KAAL,GAAa,EAAE,KAAKvX,IAAL,IAAa,KAAKsvB,KAAlB,KAA4B,KAAKpZ,EAAL,IAAW,KAAKzU,CAAhB,IAAqB,KAAKC,CAAtD,CAAF,CAAb;AACD;AAzCD;;;;;;AA2CA;kCACkByF,K,EAAeO,G,EAAW;AAC1C,iBAAOP,KAAK,IAAIO,GAAG,GAAG,GAAV,CAAZ;AACD;;;4BA7CqB;AACpB,iBAAO,wBAAAyZ,cAAA,CAAeC,UAAf,CAA0BqqB,WAA1B,CAAP;AACD;AAED;;;;4BACkB;AAAA;;AAChB,cAAM5Z,OAAO,GAAG,wBAAA1Q,cAAA,CAAeC,UAAf,CAA0B,qBAAA0qB,YAA1B,CAAhB;;AACA,cAAI,CAACja,OAAL,EAAc;AACZ,mBAAO,KAAKvC,KAAL,CAAWtvB,IAAlB;AACD;;AACD,cAAMosC,GAAG,GAAGva,OAAO,CAAC9Y,SAAR,CAAkBtR,IAAlB,CAAuB,UAAC2kC,GAAD;AAAA,mBAASA,GAAG,CAACl2B,EAAJ,KAAW,OAAI,CAACoZ,KAAL,CAAW+c,WAA/B;AAAA,WAAvB,CAAZ;AACA,iBAAOD,GAAG,aAAMA,GAAG,CAACpsC,IAAV,eAAmB,KAAKsvB,KAAL,CAAWtvB,IAA9B,IAAuC,KAAKsvB,KAAL,CAAWtvB,IAA5D;AACD;AAED;;;;4BAC8B;AAC5B,cAAM6xB,OAAO,GAAG,wBAAA1Q,cAAA,CAAeC,UAAf,CAA0B,qBAAA0qB,YAA1B,CAAhB;AACA,iBAAOja,OAAO,IAAIA,OAAO,CAACtK,QAAR,CAAiBrR,EAAjB,KAAwB,KAAKoZ,KAAL,CAAW+c,WAArD;AACD;;;;;;AAvCH;;;;;;;;;;;;;;;;;;;;ACTA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;QAKaC,e;;;;;AACT,+BAAsBpxB,SAAtB,EACYoG,eADZ,EAC8C;AAAA;;AAAA;;AAC1C,sCAAMpG,SAAN,EAAiBoG,eAAjB;AAFkB,gBAAApG,SAAA,GAAAA,SAAA;AAGlB,gCAAAiG,cAAA,CAAekkB,UAAf,CAA0B,iBAAAoG,WAA1B;AACA,gBAAK9pB,KAAL,GAAa,UAAb;AACA,gBAAKC,UAAL,GAAkB,QAAlB;AAJ0C;AAK7C;;;;8BAEiB;AACd,gBAAM,IAAIvhB,KAAJ,CAAU,yCAAV,CAAN;AACH;;;iCAEoB;AACjB,gBAAM,IAAIA,KAAJ,CAAU,yCAAV,CAAN;AACH;;;kCAEoB;AACjB,gBAAM,IAAIA,KAAJ,CAAU,yCAAV,CAAN;AACH;;;gCAEcsM,I,EAAe;AAC1B,iBAAO,IAAI,iBAAA8+B,WAAJ,CAAgB9+B,IAAhB,CAAP;AACH;;;;MAvBgC,eAAA0U,c;;AAHrC;;;uBAGairB,e,EAAe,+B,EAAA,+B;AAAA,K;;;aAAfA,e;AAAe,eAAfA,eAAe,K;AAAA,kBAFZ;;;;;2BAEHA,e,EAAe;cAH3B,OAAAx1B,UAG2B;eAHhB;AACR6I,oBAAU,EAAE;AADJ,S;AAGgB,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZ5B;AAAA;AAAA;;AACA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAEA;AAAA;AAAA;;QAmDa4sB,Q;;;;;AA2DT,wBAAY1sB,QAAZ,EAA+B;AAAA;;AAAA;;AAC3B,sCAAMA,QAAN;AACA,YAAMzC,QAAQ,GAAGyC,QAAQ,CAACzC,QAAT,IAAqB,EAAtC;AACA,YAAMovB,SAAS,GAAGpvB,QAAQ,CAACqvB,cAAT,IAA2B,EAA7C;AACA,gBAAKvsB,OAAL,GAAeL,QAAQ,CAACK,OAAT,IAAoBL,QAAQ,CAACzR,IAA5C;AACA,gBAAKs+B,MAAL,GAAc,CAAC7sB,QAAQ,CAAC6sB,MAAT,IAAmBF,SAAS,CAACE,MAA7B,IAAuC,EAAxC,EAA4C5iC,GAA5C,CAAgD,UAAAxH,CAAC;AAAA,iBAAK;AAChE4T,cAAE,EAAE5T,CAAC,CAACqqC,QAAF,IAAcrqC,CAAC,CAAC4T,EAD4C;AAEhElW,gBAAI,EAAEsC,CAAC,CAACsqC,UAAF,IAAgBtqC,CAAC,CAACtC;AAFwC,WAAL;AAAA,SAAjD,CAAd;AAIA,gBAAK6sC,UAAL,GAAkB,CAAChtB,QAAQ,CAACgtB,UAAT,IAAuBL,SAAS,CAACK,UAAjC,IAA+C,EAAhD,EAAoD/iC,GAApD,CAAwD,UAAAxH,CAAC;AAAA,iBAAK;AAC5E4T,cAAE,EAAE5T,CAAC,CAACqqC,QAAF,IAAcrqC,CAAC,CAAC4T,EADwD;AAE5ElW,gBAAI,EAAEsC,CAAC,CAACsqC,UAAF,IAAgBtqC,CAAC,CAACtC;AAFoD,WAAL;AAAA,SAAzD,CAAlB;AAIA,gBAAK8Z,MAAL,GAAc,CAAC+F,QAAQ,CAAC/F,MAAT,IAAmB0yB,SAAS,CAAC1yB,MAA7B,IAAuC,EAAxC,EAA4ChQ,GAA5C,CAAgD,UAAAxH,CAAC;AAAA,iBAAI,IAAI,cAAAypC,aAAJ,CAAkB,MAAD,OAAC,CAAD,kBAC7EzpC,CAD6E,CAAC,EAC7E;AACJ+pC,uBAAW,EAAE,QAAKn2B;AADd,WAD6E,CAAlB,CAAJ;AAAA,SAAjD,CAAd;AAIA,gBAAK42B,MAAL,GAAcjtB,QAAQ,CAACktB,KAAT,IAAkBP,SAAS,CAACO,KAA5B,IAAqC,EAAnD;AACA,gBAAKC,QAAL,GAAgBntB,QAAQ,CAACotB,OAAT,IAAoBptB,QAAQ,CAACqtB,gBAA7B,IAAiDV,SAAS,CAACU,gBAA3D,IAA+E,EAA/F;AACA,gBAAKC,QAAL,GAAgBttB,QAAQ,CAACutB,OAAT,IAAoBZ,SAAS,CAACY,OAA9B,IAAyC,EAAzD;AACA,gBAAKpyB,SAAL,GAAiBoC,QAAjB;AACA,gBAAKiwB,cAAL,GAAsBxtB,QAAQ,CAACytB,aAAT,IAA0Bd,SAAS,CAACc,aAApC,IAAqD,EAA3E;AACA,gBAAKC,SAAL,GAAiB1tB,QAAQ,CAACvC,QAAT,IAAqBkvB,SAAS,CAAClvB,QAA/B,IAA2C;AAAEkwB,mBAAS,EAAE,IAAb;AAAmBC,kBAAQ,EAAE;AAA7B,SAA5D;AACA,gBAAKxc,cAAL,GAAsBpR,QAAQ,CAACoR,cAAT,IAA2Bub,SAAS,CAACvb,cAArC,IAAuD7T,QAAQ,CAAC6T,cAAhE,IAAkF;AACpG9sB,eAAK,EAAE,CAD6F;AAEpGmtB,aAAG,EAAE;AAF+F,SAAxG;AAIA,YAAMoc,WAAW,GAAG,EAApB;;AACA,YAAI7tB,QAAQ,CAAC8tB,cAAb,EAA6B;AACzB,eAAK,IAAMC,GAAX,IAAkB/tB,QAAQ,CAAC8tB,cAA3B,EAA2C;AACvC,gBAAI9tB,QAAQ,CAAC8tB,cAAT,CAAwB/tC,cAAxB,CAAuCguC,GAAvC,CAAJ,EAAiD;AAC7C,kBAAMC,YAAY,GAAGhuB,QAAQ,CAAC8tB,cAAT,CAAwBC,GAAxB,KAAgC,EAArD;;AACA,mBAAK,IAAMtpB,OAAX,IAAsBupB,YAAtB,EAAoC;AAChC,oBAAIA,YAAY,CAACjuC,cAAb,CAA4B0kB,OAA5B,CAAJ,EAA0C;AACtCopB,6BAAW,CAAC5hC,IAAZ,CAAiB;AACboK,sBAAE,EAAE23B,YAAY,CAACvpB,OAAD,CADH;AAEbtkB,wBAAI,EAAEskB,OAFO;AAGbwpB,4BAAQ,EAAEF;AAHG,mBAAjB;AAKH;AACJ;AACJ;AACJ;AACJ;;AACD,gBAAKF,WAAL,GAAmBA,WAAnB;AACA,gBAAKvf,IAAL,GAAYtO,QAAQ,CAACsO,IAAT,IAAiBqe,SAAS,CAACre,IAA3B,IAAmC/Q,QAAQ,CAAC+Q,IAA5C,IAAoD,EAAhE;AACA,gBAAKC,OAAL,GAAevO,QAAQ,CAACuO,OAAT,IAAoBoe,SAAS,CAACpe,OAA9B,IAAyChR,QAAQ,CAACgR,OAAlD,IAA6D,EAA5E;AACA,gBAAK2f,eAAL,GAAuBluB,QAAQ,CAACkuB,eAAT,IAA4BvB,SAAS,CAACuB,eAAtC,IAAyD3wB,QAAQ,CAAC2wB,eAAlE,IAAqF,EAA5G;AACA,gBAAKpmB,aAAL,GAAqB9H,QAAQ,CAAC8H,aAAT,IAA0B6kB,SAAS,CAAC7kB,aAApC,IAAqDvK,QAAQ,CAACuK,aAA9D,IAA+E,EAApG;AACA,gBAAKqmB,wBAAL,GAAgCnuB,QAAQ,CAACmuB,wBAAT,IAAqCxB,SAAS,CAACwB,wBAA/C,IAA2E5wB,QAAQ,CAAC4wB,wBAApF,IAAgH,CAAhJ;AACA,gBAAKC,QAAL,GAAgBpuB,QAAQ,CAACouB,QAAT,IAAqBzB,SAAS,CAACyB,QAA/B,IAA2C7wB,QAAQ,CAAC6wB,QAApD,IAAgE,KAAhF;AACA,gBAAKlO,QAAL,GAAgBlgB,QAAQ,CAACkgB,QAAT,IAAqByM,SAAS,CAACzM,QAA/B,IAA2C3iB,QAAQ,CAAC2iB,QAApD,IAAgE,EAAhF;;AACA,YAAIyM,SAAS,CAAC0B,uBAAd,EAAuC;AACnC,kBAAKnO,QAAL,CAAc3G,cAAd,GAA+B,IAA/B;AACH;;AACD,YAAIoT,SAAS,CAAC2B,2BAAd,EAA2C;AACvC,kBAAKpO,QAAL,CAAc1G,kBAAd,GAAmC,IAAnC;AACH;;AACD,gBAAKxwB,QAAL,GAAgBgX,QAAQ,CAAChX,QAAT,IAAqB2jC,SAAS,CAAC3jC,QAA/B,IAA2CuU,QAAQ,CAACvU,QAApD,IAAgE,EAAhF;AACA,gBAAK4f,YAAL,GAAoB5I,QAAQ,CAAC4I,YAAT,IAAyB+jB,SAAS,CAAC/jB,YAAnC,IAAmDrL,QAAQ,CAACqL,YAA5D,IAA4E,KAAhG;AACA,gBAAK2lB,WAAL,GAAmBvuB,QAAQ,CAACuuB,WAAT,IAAwB5B,SAAS,CAAC4B,WAAlC,IAAiDhxB,QAAQ,CAACgxB,WAA1D,IAAyE,EAA5F;AACA,gBAAKC,aAAL,GAAqBxuB,QAAQ,CAACwuB,aAAT,IAA0B7B,SAAS,CAAC6B,aAApC,IAAqDjxB,QAAQ,CAACixB,aAA9D,IAA+E,EAApG;AACA,gBAAKC,UAAL,GAAkBzuB,QAAQ,CAACyuB,UAAT,IAAuB9B,SAAS,CAAC8B,UAAjC,IAA+ClxB,QAAQ,CAACkxB,UAAxD,IAAsE,EAAxF;AACA,gBAAK50B,IAAL,GAAYmG,QAAQ,CAACnG,IAAT,IAAiB8yB,SAAS,CAAC9yB,IAA3B,IAAmC,SAA/C;AA/D2B;AAgE9B;AA1HD;;;;;;AA4HA;;;;gCAIe/Z,G,EAAW;AACtB,cAAMkK,IAAI,GAAGlK,GAAG,CAACsG,KAAJ,CAAU,GAAV,CAAb;AACA,cAAMkB,KAAK,GAAG,OAAAyC,eAAA,CAAgBC,IAAhB,EAAsB,KAAKmR,SAA3B,KAAyC,OAAApR,eAAA,EAAiB,gBAAjB,4BAAsCC,IAAtC,IAA6C,KAAKmR,SAAlD,CAAvD;AACA,iBAAO7T,KAAP;AACH;AAED;;;;;;;6BAIYnH,I,EAAY;AACpB,oCAAY,KAAK8sC,MAAL,CAAY9sC,IAAZ,KAAqB,EAAjC;AACH;AAED;;;;;;;AA2BA;;;;yCAIwB8tC,Q,EAAgB;AACpC,iBAAO,CAAC,KAAKJ,WAAL,IAAoB,EAArB,EAAyB7iC,MAAzB,CAAgC,UAAAvI,CAAC;AAAA,mBAAIA,CAAC,CAACwrC,QAAF,KAAeA,QAAnB;AAAA,WAAjC,CAAP;AACH;AAED;;;;;;+BAGiB;;;;;;0BACP,IAAIztC,KAAJ,CAAU,qDAAV,C;;;;;;;;;AACT;AAED;;;;;;kCAGmB;;;;;;0BACT,IAAIA,KAAJ,CAAU,qDAAV,C;;;;;;;;;AACT;;;4BA5LwB;AACrB,iBAAO,wBAAA8gB,cAAA,CAAeC,UAAf,CAA0BmrB,QAA1B,CAAP;AACH;;;4BA8IoB;AAAA;;AACjB,iBAAOt7B,MAAM,CAACpH,IAAP,CAAY,KAAKijC,MAAjB,EAAyBjiC,MAAzB,CAAgC,UAAAvI,CAAC;AAAA,mBAAI,OAAI,CAACwqC,MAAL,CAAYltC,cAAZ,CAA2B0C,CAA3B,CAAJ;AAAA,WAAjC,CAAP;AACH;AAED;;;;4BACkB;AACd,iBAAO,MAAP,OAAO,CAAP,EAAO,EAAM,KAAK0qC,QAAL,IAAiB,EAAvB,CAAP;AACH;AAED;;;;4BACkB;AACd,iBAAO,MAAP,OAAO,CAAP,EAAO,EAAM,KAAKG,QAAL,IAAiB,EAAvB,CAAP;AACH;AAED;;;;4BACwB;AACpB,iBAAO,MAAP,OAAO,CAAP,EAAO,EAAM,KAAKE,cAAL,IAAuB,EAA7B,CAAP;AACH;AAED;;;;4BACmB;AACf,iBAAO,MAAP,OAAO,CAAP,EAAO,EAAK,KAAKE,SAAV,CAAP;AACH;;;;MAxKyB,iBAAA3tB,a;;AAA9B;;;;;;;;;;;;;;;;;;;;;;;;AC3DA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;ACDA;;QACamsB,a,GAgBT,yBAAiC;AAAA,UAArBwC,KAAqB,uEAAJ,EAAI;;AAAA;;AAC7B,WAAKr4B,EAAL,GAAUq4B,KAAK,CAACr4B,EAAN,IAAYq4B,KAAK,CAACT,QAAlB,IAA8B,EAAxC;AACA,WAAKzB,WAAL,GAAmBkC,KAAK,CAACC,MAAN,IAAgBD,KAAK,CAAClC,WAAtB,IAAqC,EAAxD;AACA,WAAKrsC,IAAL,GAAYuuC,KAAK,CAACvuC,IAAN,IAAcuuC,KAAK,CAACE,UAApB,IAAkC,EAA9C;AACA,UAAMC,UAAU,GAAG,KAAK1uC,IAAL,CAAU2L,WAAV,EAAnB;AACA,UAAM+jB,GAAG,GAAGgf,UAAU,CAACrnC,OAAX,CAAmB,OAAnB,KAA+B,CAA/B,GAAmCqnC,UAAU,CAACxhC,OAAX,CAAmB,aAAnB,EAAkC,EAAlC,CAAnC,GAA2EwhC,UAAU,CAAC9F,MAAX,CAAkB,CAAlB,EAAqB,CAArB,EAAwBv1B,WAAxB,EAAvF;AACA,WAAK0f,UAAL,GAAkBwb,KAAK,CAACxb,UAAN,IAAoBrD,GAApB,IAA2B,EAA7C;AACA,WAAKif,OAAL,GAAeJ,KAAK,CAACI,OAAN,IAAiB,EAAhC;AACA,WAAKzlC,IAAL,GAAYqlC,KAAK,CAACrlC,IAAN,IAAcqlC,KAAK,CAACK,UAApB,IAAkC,KAA9C;AACA,WAAKxxB,QAAL,GAAgBmxB,KAAK,CAACnxB,QAAtB;AACH,K;;AA1BL;;;;;;;;;;;;;;;;;;;;ACHA;AAAA;AAAA;;AACA;AAAA;AAAA;AAKA;;;QAEa0uB,Y;;;;;AAMX,8BAAoC;AAAA;;AAAA,YAAxBjsB,QAAwB,uEAAJ,EAAI;;AAAA;;;;AAClC,sCAAMA,QAAN;AACA,gBAAK7E,SAAL,GAAiB6E,QAAQ,CAACzC,QAAT,IAAqB,EAAtC;AACA,gBAAKyxB,mBAAL,GAA2B,CAAC,aAAAhvB,QAAQ,CAACzC,QAAT,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAEqvB,cAAnB,MAAiC,IAAjC,IAAiC,aAAjC,GAAiC,MAAjC,GAAiC,GAAE1zB,SAAnC,KAAgD,EAAjD,EAAqDjP,GAArD,CACzB,UAACsiC,GAAD;AAAA,iBAASA,GAAG,CAAClsB,OAAb;AAAA,SADyB,CAA3B;AAHkC;AAMnC;AAED;;;;;;;;gCAIevgB,G,EAAW;AACxB,cAAMkK,IAAI,GAAGlK,GAAG,CAACsG,KAAJ,CAAU,GAAV,CAAb;AACA,cAAMkB,KAAK,GAAG,OAAAyC,eAAA,CAAgBC,IAAhB,EAAsB,KAAKmR,SAA3B,CAAd;AACA,iBAAO7T,KAAP;AACD;;;;MAtB+B,iBAAAyY,a;;AAAlC;;;;;;;;;;;;;;;;;;;;;;;;ACRA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAMA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;QAKakvB,mB;;;;;AAQX,mCACY5zB,SADZ,EAEUiF,QAFV,EAGU4uB,MAHV,EAIEztB,eAJF,EAIkC;AAAA;;AAAA;;AAEhC,sCAAMpG,SAAN,EAAiBoG,eAAjB;AALU,gBAAApG,SAAA,GAAAA,SAAA;AACF,gBAAAiF,QAAA,GAAAA,QAAA;AACA,gBAAA4uB,MAAA,GAAAA,MAAA;AALF,gBAAAC,kBAAA,GAA0C,IAAI,OAAAjvB,OAAJ,EAA1C;AASN,gCAAAoB,cAAA,CAAekkB,UAAf,CAA0B,qBAAAyG,YAA1B;AACA,gCAAA3qB,cAAA,CAAekkB,UAAf,CAA0B,iBAAAkH,QAA1B;AACA,gBAAK5qB,KAAL,GAAa,cAAb;AACA,gBAAKC,UAAL,GAAkB,OAAlB;;AACA,gBAAKhe,GAAL,CAAS,WAAT,EAAsB,EAAtB;;AACA,gBAAKA,GAAL,CAAS,iBAAT,EAA4B,IAA5B;;AACA,gBAAKmrC,MAAL,CAAYvyB,WAAZ,CAAwBzH,IAAxB,CAA6B,YAAAyG,KAAA,CAAM,UAACC,CAAD;AAAA,iBAAOA,CAAP;AAAA,SAAN,CAA7B,EAA8CvZ,SAA9C,CAAwD;AAAA,iBAAM,QAAKua,IAAL,EAAN;AAAA,SAAxD;;AATgC;AAUjC;AAED;;;;;;;4BAGiBoF,S,EAAoBM,Y,EAAsB;;;;;;0BACnD,IAAI9hB,KAAJ,CAAU,kDAAV,C;;;;;;;;;AACP;AAED;;;;;;+BAIE6V,E,EACA2L,S,EACAM,Y,EAAsB;;;;;;0BAEhB,IAAI9hB,KAAJ,CAAU,qDAAV,C;;;;;;;;;AACP;AAED;;;;;;gCAGoB6V,E,EAAU;;;;;;0BACtB,IAAI7V,KAAJ,CAAU,qDAAV,C;;;;;;;;;AACP;AAED;;;;;;;+BAIcmuC,M,EAAc;AAC1B,iBAAO,CAAC,KAAKz1B,SAAL,CAAetR,IAAf,CAAoB,UAACnF,CAAD;AAAA,mBAAOA,CAAC,CAAC4T,EAAF,KAASs4B,MAAhB;AAAA,WAApB,KAAgD,EAAjD,EAAkE10B,MAAzE;AACD;AAED;;;;;;;gCAIena,G,EAAa;AAC1B,iBAAO,KAAK4nB,QAAL,CAAclI,OAAd,CAAsB1f,GAAtB,KAA8B,KAAKsvC,aAAL,CAAmB5vB,OAAnB,CAA2B1f,GAA3B,CAArC;AACD;AAED;;;;;AA2BA;;;;kCAIiBuW,E,EAAYs4B,M,EAAiB;AAC5C,cAAMpC,GAAG,GAAG,KAAKrzB,SAAL,CAAetR,IAAf,CAAoB,UAACnF,CAAD;AAAA,mBAAOA,CAAC,CAAC4T,EAAF,KAASs4B,MAAhB;AAAA,WAApB,KAA+C,KAAKjnB,QAAhE;;AACA,cAAI6kB,GAAG,IAAIl2B,EAAX,EAAe;AACb,mBAAOk2B,GAAG,CAACM,MAAJ,CAAW7hC,MAAX,CAAkB,UAACvI,CAAD;AAAA,qBAAO,UAAGA,CAAC,CAAC4T,EAAL,EAAU7O,OAAV,CAAkB6O,EAAlB,KAAyB,CAAhC;AAAA,aAAlB,CAAP;AACD;;AACD,iBAAO,EAAP;AACD;AAED;;;;;;;oCAImBg5B,G,EAAsB;AACvC,cAAM/sC,IAAI,GAAG+sC,GAAG,YAAYl+B,KAAf,GAAuBk+B,GAAvB,GAA6B,CAACA,GAAD,CAA1C;AACA,cAAMC,QAAQ,GAAG,KAAKp2B,SAAtB;;AAFuC,uDAGtB5W,IAHsB;AAAA;;AAAA;AAGvC,sEAAuB;AAAA,kBAAZ+T,EAAY;;AAAA,2DACHi5B,QADG;AAAA;;AAAA;AACrB,0EAA4B;AAAA,sBAAjB/C,GAAiB;;AAAA,+DACRA,GAAG,CAACtyB,MADI;AAAA;;AAAA;AAC1B,8EAA8B;AAAA,0BAAnB8zB,GAAmB;;AAC5B,0BAAIA,GAAG,CAAC13B,EAAJ,KAAWA,EAAf,EAAmB;AACjB,+BAAO03B,GAAP;AACD;AACF;AALyB;AAAA;AAAA;AAAA;AAAA;AAM3B;AAPoB;AAAA;AAAA;AAAA;AAAA;AAQtB;AAXsC;AAAA;AAAA;AAAA;AAAA;;AAYvC,iBAAO,IAAP;AACD;AAED;;;;;;+BAGoB;;;;;;;AAClB;AACA,wBAAI1vB,YAAJ,EAAkB;AAChB,2BAAKkxB,gBAAL,GAAwBlxB,YAAY,CAACC,OAAb,WAAwB,KAAKmD,eAAL,CAAqBrC,QAArB,CAA8B5L,WAA9B,EAAxB,eAAxB;AACD;;AACK6J,2B,GAAmC,KAAKiD,QAAL,CAAcxG,GAAd,CAAkB,SAAlB,KAAgC,E;AACzEuD,2BAAO,CAACmyB,YAAR,GAAuB;AAAEzzB,6BAAO,EAAE,2BAAX;AAAwC5c,2BAAK,EAAE;AAA/C,qBAAvB;;AACA,2BAAM,KAAKswC,gBAAL,EAAN;;;AACApyB,2BAAO,CAACmyB,YAAR,GAAuB;AAAEzzB,6BAAO,EAAE,2BAAX;AAAwC5c,2BAAK,EAAE;AAA/C,qBAAvB;AACAke,2BAAO,CAACnE,SAAR,GAAoB;AAAE6C,6BAAO,EAAE,uBAAX;AAAoC5c,2BAAK,EAAE;AAA3C,qBAApB;;AACA,yBAAKmhB,QAAL,CAAcvc,GAAd,CAAkB,SAAlB,EAA6BsZ,OAA7B;;;AACA,2BAAM,KAAKrE,aAAL,EAAN;;;AACAqE,2BAAO,CAACnE,SAAR,GAAoB;AAAE6C,6BAAO,EAAE,uBAAX;AAAoC5c,2BAAK,EAAE;AAA3C,qBAApB;AACAke,2BAAO,CAACpD,MAAR,GAAiB;AAAE8B,6BAAO,EAAE,6BAAX;AAA0C5c,2BAAK,EAAE;AAAjD,qBAAjB;;AACA,yBAAKmhB,QAAL,CAAcvc,GAAd,CAAkB,SAAlB,EAA6BsZ,OAA7B;;;AACA,2BAAM,KAAKqyB,UAAL,EAAN;;;AACAryB,2BAAO,CAACpD,MAAR,GAAiB;AAAE8B,6BAAO,EAAE,6BAAX;AAA0C5c,2BAAK,EAAE;AAAjD,qBAAjB;;AACA,yBAAKmhB,QAAL,CAAcvc,GAAd,CAAkB,SAAlB,EAA6BsZ,OAA7B;;AACAA,2BAAO,CAACsyB,WAAR,GAAsB;AAAE5zB,6BAAO,EAAE,yBAAX;AAAsC5c,2BAAK,EAAE;AAA7C,qBAAtB;;AACA,yBAAKmhB,QAAL,CAAcvc,GAAd,CAAkB,SAAlB,EAA6BsZ,OAA7B;;;AACA,2BAAM,KAAKuyB,cAAL,EAAN;;;AACAvyB,2BAAO,CAACsyB,WAAR,GAAsB;AAAE5zB,6BAAO,EAAE,yBAAX;AAAsC5c,2BAAK,EAAE;AAA7C,qBAAtB;;AACA,yBAAKmhB,QAAL,CAAcvc,GAAd,CAAkB,SAAlB,EAA6BsZ,OAA7B;;AACML,wB,GAAO,KAAKkyB,MAAL,CAAYpP,O;;AAEzB,wBAAI9iB,IAAJ,EAAU;AACF3G,wBADE,GACGgI,YAAY,CAACC,OAAb,CAAqB,kBAArB,CADH;AAEFoJ,8BAFE,GAES,KAAKxO,SAAL,CAAetR,IAAf,CAAoB,UAAA2kC,GAAG;AAAA,+BAAIl2B,EAAE,IAAIk2B,GAAG,CAACl2B,EAAJ,KAAWA,EAArB;AAAA,uBAAvB,KAAmD,KAAK6C,SAAL,CAAetR,IAAf,CAAoB,UAAC2kC,GAAD;AAAA,+BAASA,GAAG,CAACje,IAAJ,KAAatR,IAAI,CAACS,QAA3B;AAAA,uBAApB,CAF5D;;AAGR,0BAAIiK,QAAJ,EAAc;AACZ,6BAAK6nB,gBAAL,GAAwB7nB,QAAQ,CAACrR,EAAjC;AACA,6BAAKtS,GAAL,CAAS,iBAAT,EAA4B2jB,QAA5B;AACD,uBAHD,MAGO,IAAG,KAAKA,QAAR,EAAkB;AACvB;AACA,6BAAK6nB,gBAAL,GAAwB,KAAK7nB,QAAL,CAAcrR,EAAtC;AACA,6BAAKtS,GAAL,CAAS,iBAAT,EAA4B,KAAK2jB,QAAjC;AACD;AACF;;;;;;;;;AACF;AAED;;;;;;2CAG6B;;;;;;;;AACV,2BAAM,KAAKlQ,KAAL,CAAW;AAAEq4B,0BAAI,EAAE,KAAR;AAAe1tB,4BAAM,EAAE;AAAvB,qBAAX,CAAN;;;AAAX2tB,4B;AACN,yBAAKV,aAAL,GAAqB,IAAI,qBAAAnD,YAAJ,CAAiB6D,QAAQ,CAAC,CAAD,CAAzB,CAArB;AACA,yBAAK/rC,GAAL,CAAS,cAAT,EAAyB,KAAKqrC,aAA9B;sDACO,KAAKA,a;;;;;;;;;AACb;AAED;;;;;;wCAG0B;;;;;;sDACjB,KAAK/0B,oBAAL,CAA0B,KAAK+0B,aAA/B,C;;;;;;;;;AACR;AAED;;;;;;6CAGkCI,Y,EAA0B;;;;;;;;AACzC,2BAAM,KAAKh4B,KAAL,CAAW;AAAEq4B,0BAAI,EAAE,UAAR;AAAoB1tB,4BAAM,EAAE,IAA5B;AAAkCzM,2BAAK,EAAE;AAAzC,qBAAX,CAAN;;;AAAXq6B,4B;AACA72B,6B,GAAa62B,QAAsB,CACtC9lC,GADgB,CACZ,UAACxH,CAAD;AAAA,6BAAO,IAAI,iBAAAiqC,QAAJ,CAAajqC,CAAb,CAAP;AAAA,qBADY,EAEhBuI,MAFgB,CAET,UAACuhC,GAAD;AAAA,6BAASiD,YAAY,CAACR,mBAAb,CAAiC9wB,QAAjC,CAA0CquB,GAAG,CAACl2B,EAA9C,CAAT;AAAA,qBAFS,C;AAGnB,yBAAKtS,GAAL,CAAS,WAAT,EAAsBmV,SAAtB;AACA;;AACA,wBAAI,CAAC,KAAKq2B,gBAAN,IAA0Br2B,SAA1B,IAAuCA,SAAS,CAAC5S,MAAV,GAAmB,CAA9D,EAAiE;AAC/D,2BAAKipC,gBAAL,GAAwBr2B,SAAS,CAAC,CAAD,CAAT,CAAa7C,EAArC;AACD;;uDACM6C,S;;;;;;;;;AACR;AAED;;;;;;qCAGuB;;;;;;;;AACJ,2BAAM,KAAK1B,KAAL,CAAW;AAAEq4B,0BAAI,EAAE,OAAR;AAAiB1tB,4BAAM,EAAE,IAAzB;AAA+BzM,2BAAK,EAAE;AAAtC,qBAAX,CAAN;;;AAAXs6B,4B;AACA/1B,0B,GAAU+1B,QAAsB,CAAC/lC,GAAvB,CAA2B,UAACxH,CAAD;AAAA,6BAAO,IAAI,cAAAypC,aAAJ,CAAkBzpC,CAAlB,CAAP;AAAA,qBAA3B,C;AAChB,yBAAKsB,GAAL,CAAS,QAAT,EAAmBkW,MAAnB;uDACOA,M;;;;;;;;;AACR;AAED;;;;;;yCAG2B;;;;;;;;AACP,2BAAM,KAAKzC,KAAL,CAAW;AAAEq4B,0BAAI,EAAE,MAAR;AAAgB1tB,4BAAM,EAAE,IAAxB;AAA8BzM,2BAAK,EAAE,IAArC;AAA2C82B,iCAAW,EAAE,KAAK+C;AAA7D,qBAAX,CAAN;;;AAAZU,6B;AACAC,yB,GAASD,SAAuB,CAAChmC,GAAxB,CAA4B,UAACxH,CAAD;AAAA,6BAAQ;AAAE4T,0BAAE,EAAE5T,CAAC,CAAC4T,EAAR;AAAYlW,4BAAI,EAAEsC,CAAC,CAACtC;AAApB,uBAAR;AAAA,qBAA5B,C;AACf,yBAAK4D,GAAL,CAAS,aAAT,EAAwBmsC,KAAxB,E,CACA;;AACA,yBAAKf,kBAAL,CAAwB58B,IAAxB,CAA6B29B,KAA7B;;;;;;;;;AACD;AAEC;;;;;;yDAOsCpwC,G,EAAa;AACnD,cAAI,CAAC,KAAKsvC,aAAV,EAAyB;AACvB,mBAAO,EAAP;AACD;;AACD,cAAMxC,cAAc,GAAG,KAAKwC,aAAL,CAAmB5vB,OAAnB,CAA2B,gBAA3B,CAAvB;;AAEA,iBAAOotB,cAAc,IAAIA,cAAc,CAAC9sC,GAAD,CAAhC,GAAwC8sC,cAAc,CAAC9sC,GAAD,CAAtD,GAA8D,EAArE;AACD;;;mDAEiCuJ,I,EAAa;AAC7C,cAAMwC,OAAO,GAAG,KAAKskC,gCAAL,CAAsC9mC,IAAtC,KAA+C,EAA/D;AACA,oCAAW+H,MAAM,CAACpH,IAAP,CAAY6B,OAAZ,EAAqB5B,GAArB,CAAyB,UAACnK,GAAD,EAAS;AACzC,gBAAMuQ,OAAO,GAAGxE,OAAO,CAAC/L,GAAD,CAAP,CAAa+K,QAAb,EAAhB;AACA,mBAAO;AACHwF,qBAAO,EAAPA,OADG;AAEH/I,mBAAK,EAAExH,GAFJ;AAGHwpB,kBAAI,EAAE;AAHH,aAAP;AAKH,WAPU,CAAX;AAQD;;;4BAnLkB;AAAA;;AACjB,iBAAO,KAAKpQ,SAAL,CAAetR,IAAf,CAAoB,UAACnF,CAAD;AAAA,mBAAOA,CAAC,CAAC4T,EAAF,KAAS,OAAI,CAACk5B,gBAArB;AAAA,WAApB,CAAP;AACD;AAED;;0BAKoBhD,G,EAAe;AACjC,cAAIA,GAAG,YAAY,iBAAAG,QAAnB,EAA6B;AAC3B,iBAAK6C,gBAAL,GAAwBhD,GAAG,CAACl2B,EAA5B;AACD,WAFD,MAEO;AACL,iBAAKk5B,gBAAL,GAAwBhD,GAAxB;AACD;;AACD,eAAKxoC,GAAL,CAAS,iBAAT,EAA4B,KAAK2jB,QAAjC;AACA,eAAKkoB,cAAL;AACAvxB,sBAAY,CAAC+xB,OAAb,CAAqB,kBAArB,EAAyC,KAAKb,gBAA9C;AACAlxB,sBAAY,CAAC+xB,OAAb,CAAqB,oBAArB,EAA2C7D,GAAG,CAACvjC,QAA/C;AACD;AAED;;;;4BAhBsB;AACpB,iBAAO,KAAK8Q,GAAL,CAAS,aAAT,KAA2B,EAAlC;AACD;;;4BAemB;AAClB,iBAAO,KAAKA,GAAL,CAAqB,WAArB,KAAqC,EAA5C;AACD;;;4BAoIgC;AAC7B,iBAAO,KAAKq1B,kBAAL,CAAwBzyB,YAAxB,EAAP;AACD;;;;MAhOoC,eAAA8E,c;;AAHzC;;;uBAGaytB,mB,EAAmB,+B,EAAA,kC,EAAA,4B,EAAA,+B;AAAA,K;;;aAAnBA,mB;AAAmB,eAAnBA,mBAAmB,K;AAAA,kBAFlB;;;;;2BAEDA,mB,EAAmB;cAH/B,OAAAh4B,UAG+B;eAHpB;AACV6I,oBAAU,EAAE;AADF,S;AAGoB,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtBhC;AAAA;AAAA;;AAGA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAEA;AAAA;AAAA;;QAOaumB,mB;;;;;AA0BX,mCAAsBhrB,SAAtB,EACsBoG,eADtB,EACwD;AAAA;;AAAA;;AACtD;AAFoB,gBAAApG,SAAA,GAAAA,SAAA;AACA,gBAAAoG,eAAA,GAAAA,eAAA;AApBtB;;AACU,gBAAAjG,SAAA,GAAoE,EAApE;AACV;;AACU,gBAAAC,UAAA,GAAiD,EAAjD;AACV;;AACU,gBAAAiG,YAAA,GAAmD,EAAnD;AACV;;AACU,gBAAAC,SAAA,GAA6C,EAA7C;AACV;;AACU,gBAAAC,QAAA,GAAoC,UAACrV,CAAD,EAAIC,CAAJ;AAAA,iBAC5CD,CAAC,KAAKC,CAAN,IAAYD,CAAS,CAAC8J,EAAV,KAAkB7J,CAAS,CAAC6J,EADI;AAAA,SAApC;AAEV;;;AACU,gBAAAwL,YAAA,GAAkC,UAACtV,CAAD;AAAA,iBAAO,CAAC,CAACA,CAAT;AAAA,SAAlC;;AAUR,gBAAKuV,KAAL,GAAa,MAAb;AACA,gBAAKC,UAAL,GAAkB,MAAlB;;AACA,gBAAKhe,GAAL,CAAS,MAAT,EAAiB,EAAjB;;AAJsD;AAKvD;AAXD;;;;;;AAaA;;;wCAGwBie,S,EAAoB;AACxC;AACA;AACA,cAAI,KAAKP,eAAL,CAAqBQ,SAAzB,EAAoC;AAChC,mBAAO,MAAP,OAAO,CAAP,kBAAYD,SAAZ,CAAO,EAAc;AAAEC,uBAAS,EAAE;AAAb,aAAd,CAAP;AACH;;AACD,iBAAOD,SAAP;AACH;AAED;;;;;;+BAGc;AAAA;;AACZ,eAAK9C,IAAL,GAAY4B,IAAZ,CACE,UAAClF,CAAD;AAAA,mBAAO,OAAI,CAAChc,YAAL,CAAkB2S,IAAlB,CAAuB,IAAvB,CAAP;AAAA,WADF,EAEE,UAAC2P,GAAD;AAAA,mBAAS,OAAI,CAACnf,OAAL,CAAa,MAAb,EAAqB;AAAA,qBAAM,OAAI,CAAC6Z,IAAL,EAAN;AAAA,aAArB,EAAwC,IAAxC,CAAT;AAAA,WAFF;AAID;AAED;;;;;;;gCAIsC;AAAA,cAAzBuF,MAAyB,uEAAP,KAAO;AACpC,cAAMC,QAAQ,GAAGD,MAAM,GACnB,KAAK9G,SAAL,CAAesE,IAAf,CAAoBC,YADD,GAEnB,YAFJ;AAGA,2BAAUwC,QAAV,cAAsB,KAAKL,UAA3B;AACD;AAED;;;;;AAKA;;;;4BAIoB5hB,I,EAAY;AAC9B,cAAI,CAAC,KAAKsb,UAAL,CAAgBtb,IAAhB,CAAL,EAA4B;AAC1B,iBAAK4D,GAAL,CAAY5D,IAAZ,EAAkB,IAAlB;AACD;;AACD,iBAAQ,KAAKqb,SAAL,CAAerb,IAAf,EAA4CS,QAA5C,EAAR;AACD;AAED;;;;;;;;+BAKuBT,I,EAAY;AACjC,cAAI,CAAC,KAAKsb,UAAL,CAAgBtb,IAAhB,CAAL,EAA4B;AAC1B,iBAAK4D,GAAL,CAAY5D,IAAZ,EAAkB,IAAlB;AACD;;AACD,iBAAO,KAAKsb,UAAL,CAAgBtb,IAAhB,CAAP;AACD;AAED;;;;;;;;4BAKuBA,I,EAAcmH,K,EAAQ;AAC3C,cAAI,CAAC,KAAKkU,SAAL,CAAerb,IAAf,CAAL,EAA2B;AACzB,iBAAKqb,SAAL,CAAerb,IAAf,IAAuB,IAAI,OAAAN,eAAJ,CAAuByH,KAAvB,CAAvB;AACA,iBAAKmU,UAAL,CAAgBtb,IAAhB,IAAwB,KAAKqb,SAAL,CAAerb,IAAf,EAAqBuc,YAArB,EAAxB;AACD,WAHD,MAGO;AACL,iBAAKlB,SAAL,CAAerb,IAAf,EAAqBoS,IAArB,CAA0BjL,KAA1B;AACD;AACF;AAED;;;;;;;iCAI8D;AAAA,cAAhD+a,SAAgD,uEAAjB,KAAKR,YAAY;AACxD,cAAMvf,IAAI,GAAQ,KAAKwX,GAAL,CAAS,MAAT,CAAlB;AACA,iBAAOxX,IAAI,CAAC0I,MAAL,CAAYqX,SAAZ,CAAP;AACL;AAED;;;;;;;6BAIYhM,E,EAAU;AACpB,cAAM/T,IAAI,GAAG,KAAKwX,GAAL,CAAS,MAAT,CAAb;AACA,iBAAOxX,IAAI,CAACsF,IAAL,CAAU,UAACnF,CAAD,EAAO;AAAD;;AAAC,mBAAAA,CAAC,CAAC4T,EAAF,KAASA,EAAT,IAAgB,OAAA5T,CAAC,CAAC+S,KAAF,MAAO,IAAP,IAAO,aAAP,GAAO,MAAP,GAAO,GAAE1J,WAAF,EAAP,OAA2BuK,EAAE,SAAF,IAAAA,EAAE,WAAF,GAAE,MAAF,GAAAA,EAAE,CAAEvK,WAAJ,EAA3B,CAAhB;AAA6D,WAA9E,CAAP;AACD;AAED;;;;;;;gCAIsE;AAAA;;AAAA,cAAzDwW,YAAyD,uEAAjC,EAAiC;AAAA,cAA7B/D,MAA6B,uEAAF,EAAE;AACpE,cAAI4D,MAAM,GAAG,KAAb;AACA,cAAII,KAAK,GAAG,IAAZ;AACA;;AACA,cAAID,YAAJ,EAAkB;AAChBH,kBAAM,GAAG,CAAC,CAACG,YAAY,CAACH,MAAxB;AACA,mBAAOG,YAAY,CAACH,MAApB;AACAI,iBAAK,GAAGD,YAAY,CAACC,KAAb,IAAsB,IAA9B;AACA,mBAAOD,YAAY,CAACC,KAApB;AACD;;AACD,cAAM/K,KAAK,GAAG,gBAAAoD,aAAA,CAAc0H,YAAd,CAAd;AACA,cAAMxiB,GAAG,mBAAY0X,KAAZ,CAAT;;AACA,cAAI,CAAC,KAAKmK,SAAL,CAAe7hB,GAAf,CAAL,EAA0B;AACxB,iBAAK6hB,SAAL,CAAe7hB,GAAf,IAAsB,IAAI2gB,OAAJ,CAAY,UAACC,OAAD,EAAUC,MAAV,EAAqB;AACrD,kBAAM7C,GAAG,GAAGS,MAAM,IAAIA,MAAM,CAACT,GAAjB,aAA0BS,MAAM,CAACT,GAAjC,SAAuCtG,KAAK,GAAG,MAAMA,KAAT,GAAiB,EAA7D,cAAuE,OAAI,CAACyG,KAAL,CAAWkE,MAAX,CAAvE,SAA4F3K,KAAK,GAAG,MAAMA,KAAT,GAAiB,EAAlH,CAAZ;AACA,kBAAIgL,MAAJ;;AACA,qBAAI,CAACC,IAAL,CAAU3I,GAAV,CAAcgE,GAAd,EAAmBzb,SAAnB,CACE,UAACkD,CAAD,EAAoC;AAClC,oBAAIA,CAAC,IAAIA,CAAC,YAAY4L,KAAtB,EAA6B;AAC3B,sBAAMvF,OAAO,GAAGrG,CAAC,CAAC0E,GAAF,CAAM,UAACxH,CAAD;AAAA,2BAAO,OAAI,CAACigB,OAAL,CAAajgB,CAAb,CAAP;AAAA,mBAAN,CAAhB;AACA+f,wBAAM,GAAG;AACP5W,2BAAO,EAAPA,OADO;AAEPg+B,yBAAK,EAAEh+B,OAAO,CAACtF;AAFR,mBAAT;AAID,iBAND,MAMO,IAAIf,CAAC,IAAI,EAAEA,CAAC,YAAY4L,KAAf,CAAL,IAA8B5L,CAAC,CAACqG,OAAhC,IAA2CrG,CAAC,CAACqkC,KAAjD,EAAwD;AAC7D,sBAAMh+B,QAAO,GAAGrG,CAAC,CAACqG,OAAF,CAAU3B,GAAV,CAAc,UAACxH,CAAD;AAAA,2BAAO,OAAI,CAACigB,OAAL,CAAajgB,CAAb,CAAP;AAAA,mBAAd,CAAhB;;AACA+f,wBAAM,GAAG;AACP5W,2BAAO,EAAPA,QADO;AAEPg+B,yBAAK,EAAErkC,CAAC,CAACqkC;AAFF,mBAAT;AAID,iBANM,MAMA,IAAIrkC,CAAC,IAAI,EAAEA,CAAC,YAAY4L,KAAf,CAAL,IAA8B5L,CAAC,CAACqG,OAApC,EAA6C;AAClD,sBAAMA,SAAO,GAAGrG,CAAC,CAACqG,OAAF,CAAU3B,GAAV,CAAc,UAACxH,CAAD;AAAA,2BAAO,OAAI,CAACigB,OAAL,CAAajgB,CAAb,CAAP;AAAA,mBAAd,CAAhB;;AACA+f,wBAAM,GAAG;AACP5W,2BAAO,EAAPA,SADO;AAEPg+B,yBAAK,EAAEh+B,SAAO,CAACtF;AAFR,mBAAT;AAID,iBANM,MAMA;AACLkc,wBAAM,GAAG;AACP5W,2BAAO,EAAE,EADF;AAEPg+B,yBAAK,EAAE;AAFA,mBAAT;AAID;AACF,eA1BH,EA2BE,UAACn7B,CAAD,EAAO;AACLkS,sBAAM,CAAClS,CAAD,CAAN;AACA,uBAAI,CAACkT,SAAL,CAAe7hB,GAAf,IAAsB,IAAtB;AACD,eA9BH,EA+BE,YAAM;AACJ4gB,uBAAO,CAAC8B,MAAD,CAAP;;AACA,uBAAI,CAACzf,OAAL,CAAajD,GAAb,EAAkB;AAAA,yBAAO,OAAI,CAAC6hB,SAAL,CAAe7hB,GAAf,IAAsB,IAA7B;AAAA,iBAAlB,EAAsDyiB,KAAtD;AACD,eAlCH;AAoCD,aAvCqB,CAAtB;AAwCD;;AACD,iBAAO,KAAKZ,SAAL,CAAe7hB,GAAf,CAAP;AACD;AAED;;;;;;;;;0CAMyE;AAAA;;AAAA,cAAzDwiB,YAAyD,uEAAjC,EAAiC;AAAA,cAA7B/D,MAA6B,uEAAF,EAAE;AACvE,cAAM/G,KAAK,GAAG,gBAAAoD,aAAA,CAAc0H,YAAd,CAAd;AACA,cAAMxE,GAAG,aAAOS,MAAM,CAACT,GAAd,SAAoBtG,KAAK,GAAG,MAAMA,KAAT,GAAiB,EAA1C,CAAT;AACA,iBAAO,KAAKiL,IAAL,CAAU3I,GAAV,CAAcgE,GAAd,EAAmB5I,IAAnB,CACL,YAAAjL,GAAA,CAAI,UAAC1E,CAAD;AAAA,mBAAqC,OAAI,CAACod,gBAAL,CAAsBpd,CAAtB,CAArC;AAAA,WAAJ,CADK,EAEL,YAAAqd,UAAA,CAAW,UAAIC,KAAJ,EAAgBL,MAAhB,EAA+B;AACxC1Y,mBAAO,CAACV,GAAR,CAAYyZ,KAAZ;AACA,mBAAO,OAAAC,EAAA,CAAGN,MAAH,CAAP;AACC,WAHH,CAFK,CAAP;AAOD;AAED;;;;;;;;yCAKiBjd,C,EAA8B;AAAA;;AAC7C,cAAIid,MAAJ;;AACA,cAAIjd,CAAC,IAAIA,CAAC,YAAY4L,KAAtB,EAA6B;AAC3B,gBAAMvF,OAAO,GAAGrG,CAAC,CAAC0E,GAAF,CAAM,UAACxH,CAAD;AAAA,qBAAO,OAAI,CAACigB,OAAL,CAAajgB,CAAb,CAAP;AAAA,aAAN,CAAhB;AACA+f,kBAAM,GAAG;AACP5W,qBAAO,EAAPA,OADO;AAEPg+B,mBAAK,EAAEh+B,OAAO,CAACtF;AAFR,aAAT;AAID,WAND,MAMO,IAAIf,CAAC,IAAI,EAAEA,CAAC,YAAY4L,KAAf,CAAL,IAA8B5L,CAAC,CAACqG,OAAhC,IAA2CrG,CAAC,CAACqkC,KAAjD,EAAwD;AAC7D,gBAAMh+B,SAAO,GAAGrG,CAAC,CAACqG,OAAF,CAAU3B,GAAV,CAAc,UAACxH,CAAD;AAAA,qBAAO,OAAI,CAACigB,OAAL,CAAajgB,CAAb,CAAP;AAAA,aAAd,CAAhB;;AACA+f,kBAAM,GAAG;AACP5W,qBAAO,EAAPA,SADO;AAEPg+B,mBAAK,EAAErkC,CAAC,CAACqkC;AAFF,aAAT;AAID,WANM,MAMA,IAAIrkC,CAAC,IAAI,EAAEA,CAAC,YAAY4L,KAAf,CAAL,IAA8B5L,CAAC,CAACqG,OAApC,EAA6C;AAClD,gBAAMA,SAAO,GAAGrG,CAAC,CAACqG,OAAF,CAAU3B,GAAV,CAAc,UAACxH,CAAD;AAAA,qBAAO,OAAI,CAACigB,OAAL,CAAajgB,CAAb,CAAP;AAAA,aAAd,CAAhB;;AACA+f,kBAAM,GAAG;AACP5W,qBAAO,EAAPA,SADO;AAEPg+B,mBAAK,EAAEh+B,SAAO,CAACtF;AAFR,aAAT;AAID,WANM,MAMA;AACLkc,kBAAM,GAAG;AACP5W,qBAAO,EAAE,EADF;AAEPg+B,mBAAK,EAAE;AAFA,aAAT;AAID;;AACD,iBAAOpnB,MAAP;AACD;AAGD;;;;;;;;6BAKYnM,E,EAAsC;AAAA;;AAAA,cAA1BiM,YAA0B,uEAAF,EAAE;AAChD,cAAIH,MAAM,GAAG,KAAb;AACA;;AACA,cAAIG,YAAJ,EAAkB;AAChBH,kBAAM,GAAG,CAAC,CAACG,YAAY,CAACH,MAAxB;AACA,mBAAOG,YAAY,CAACH,MAApB;AACD;;AACD,cAAM3K,KAAK,GAAG,gBAAAoD,aAAA,CAAc0H,YAAd,CAAd;AACA,cAAMxiB,GAAG,kBAAWuW,EAAX,cAAiBmB,KAAjB,CAAT;AACA;;AACA,cAAI,CAAC,KAAKmK,SAAL,CAAe7hB,GAAf,CAAL,EAA0B;AACxB,iBAAK6hB,SAAL,CAAe7hB,GAAf,IAAsB,IAAI2gB,OAAJ,CAAe,UAACC,OAAD,EAAUC,MAAV,EAAqB;AACxD,kBAAM7C,GAAG,aAAM,OAAI,CAACG,KAAL,CAAWkE,MAAX,CAAN,cAA4B9L,EAA5B,SAAiCmB,KAAK,GAAG,MAAMA,KAAT,GAAiB,EAAvD,CAAT;AACA,kBAAIgL,MAAM,GAAM,IAAhB;;AACA,qBAAI,CAACC,IAAL,CAAU3I,GAAV,CAAcgE,GAAd,EAAmBzb,SAAnB,CACE,UAACkD,CAAD,EAAO;AACLid,sBAAM,GAAG,OAAI,CAACE,OAAL,CAAand,CAAb,CAAT;AACD,eAHH,EAIE,UAACkJ,CAAD,EAAO;AACLkS,sBAAM,CAAClS,CAAD,CAAN;AACA,uBAAI,CAACkT,SAAL,CAAeoB,QAAf,GAA0B,IAA1B;AACD,eAPH,EAQE,YAAM;AACJrC,uBAAO,CAAC8B,MAAD,CAAP;;AACA,uBAAI,CAACzf,OAAL,CAAajD,GAAb,EAAkB;AAAA,yBAAO,OAAI,CAAC6hB,SAAL,CAAe7hB,GAAf,IAAsB,IAA7B;AAAA,iBAAlB,EAAsD,IAAtD;AACD,eAXH;AAaD,aAhBqB,CAAtB;AAiBD;;AACD,iBAAO,KAAK6hB,SAAL,CAAe7hB,GAAf,CAAP;AACD;AAED;;;;;;;;4BAKWkiB,S,EAA8C;AAAA;;AAAA,cAA1BM,YAA0B,uEAAF,EAAE;;AACvD;AACA,cAAI,CAAC,KAAKX,SAAL,CAAeoB,QAApB,EAA8B;AAC5B,iBAAKpB,SAAL,CAAeoB,QAAf,GAA0B,IAAItC,OAAJ,CAAe,UAACC,OAAD,EAAUC,MAAV,EAAqB;AAC5D,kBAAMnJ,KAAK,GAAG,gBAAAoD,aAAA,CAAc0H,YAAd,CAAd;AACA,kBAAMxE,GAAG,aAAM,OAAI,CAACG,KAAL,CAAWqE,YAAY,CAACH,MAAxB,CAAN,SAAwC3K,KAAK,GAAG,MAAMA,KAAT,GAAiB,EAA9D,CAAT;AACA,kBAAIgL,MAAM,GAAM,IAAhB;;AACA,qBAAI,CAACC,IAAL,CAAUO,IAAV,CAAelF,GAAf,EAAoB,OAAI,CAACmF,eAAL,CAAqBjB,SAArB,CAApB,EAAqD3f,SAArD,CACE,UAACkD,CAAD;AAAA,uBAAQid,MAAM,GAAG,OAAI,CAACE,OAAL,CAAand,CAAb,CAAjB;AAAA,eADF,EAEE,UAACkJ,CAAD,EAAO;AACLkS,sBAAM,CAAClS,CAAD,CAAN;;AACA,uBAAI,CAACyU,cAAL,kBAA8B,OAAI,CAACpB,KAAL,CAAWhW,WAAX,EAA9B;;AACA,uBAAI,CAAC6V,SAAL,CAAeoB,QAAf,GAA0B,IAA1B;AACD,eANH,EAOE,YAAM;AACJrC,uBAAO,CAAC8B,MAAD,CAAP;;AACA,uBAAI,CAACze,GAAL,CAAS,MAAT,EAAiB,OAAI,CAACof,UAAL,CAAgB,OAAI,CAACrJ,GAAL,CAAS,MAAT,CAAhB,EAAkC,CAAC0I,MAAD,CAAlC,CAAjB;;AACA,uBAAI,CAACU,cAAL,kBAA8B,OAAI,CAACpB,KAAL,CAAWhW,WAAX,EAA9B;;AACA,uBAAI,CAAC6V,SAAL,CAAeoB,QAAf,GAA0B,IAA1B;AACD,eAZH;AAcD,aAlByB,CAA1B;AAmBD;;AACD,iBAAO,KAAKpB,SAAL,CAAeoB,QAAtB;AACD;AAED;;;;;;;;;;6BAQE1M,E,EACA2K,S,EAE+B;AAAA;;AAAA,cAD/BgB,SAC+B,uEADV,EACU;AAAA,cAA/BoB,MAA+B,uEAAN,MAAM;AAE/B,cAAM5L,KAAK,GAAG,gBAAAoD,aAAA,CAAc,KAAKqI,eAAL,CAAqBjB,SAArB,CAAd,CAAd;AACA,cAAMliB,GAAG,kBAAWuW,EAAX,cAAiB2K,SAAjB,cAA8BxJ,KAA9B,CAAT;AACA;;AACA,cAAI,CAAC,KAAKmK,SAAL,CAAe7hB,GAAf,CAAL,EAA0B;AACxB,iBAAK6hB,SAAL,CAAe7hB,GAAf,IAAsB,IAAI2gB,OAAJ,CAAe,UAACC,OAAD,EAAUC,MAAV,EAAqB;AACxD,kBAAM0C,SAAS,GAAG,MAAH,OAAG,CAAH,kBAAQrB,SAAR,CAAG,EAAc;AAAE3L,kBAAE,EAAFA,EAAF;AAAMiN,qBAAK,EAAEtC;AAAb,eAAd,CAAlB;AACA,kBAAMlD,GAAG,aAAM,OAAI,CAACG,KAAL,CAAW,KAAX,CAAN,cAA2B5H,EAA3B,cAAiC2K,SAAjC,CAAT;AACA,kBAAIwB,MAAJ;AACA,kBAAMhM,OAAO,GACX4M,MAAM,KAAK,MAAX,GACI,OAAI,CAACX,IAAL,CAAUO,IAAV,CAAelF,GAAf,EAAoBuF,SAApB,CADJ,GAEI,OAAI,CAACZ,IAAL,CAAU3I,GAAV,WAAiBgE,GAAjB,SAAuBtG,KAAK,GAAG,MAAMA,KAAT,GAAiB,EAA7C,EAHN;AAIAhB,qBAAO,CAACnU,SAAR,CACE,UAACkD,CAAD;AAAA,uBAAQid,MAAM,GAAGjd,CAAjB;AAAA,eADF,EAEE,UAACkJ,CAAD,EAAO;AACLkS,sBAAM,CAAClS,CAAD,CAAN;;AACA,uBAAI,CAACyU,cAAL,WACK,OAAI,CAACpB,KAAL,CAAWhW,WAAX,EADL,mBACsCkV,SADtC,cAEE3K,EAFF;;AAIA,uBAAO,OAAI,CAACsL,SAAL,CAAe7hB,GAAf,CAAP;AACD,eATH,EAUE,YAAM;AACJ4gB,uBAAO,CAAC8B,MAAD,CAAP;;AACA,uBAAI,CAACU,cAAL,WACK,OAAI,CAACpB,KAAL,CAAWhW,WAAX,EADL,mBACsCkV,SADtC,eAEE3K,EAFF;;AAIA,uBAAI,CAACtT,OAAL,CAAajD,GAAb,EAAkB;AAAA,yBAAM,OAAO,OAAI,CAAC6hB,SAAL,CAAe7hB,GAAf,CAAb;AAAA,iBAAlB,EAAoD,IAApD;AACD,eAjBH;AAmBD,aA3BqB,CAAtB;AA4BD;;AACD,iBAAO,KAAK6hB,SAAL,CAAe7hB,GAAf,CAAP;AACD;AAGD;;;;;;;;;+BAMcuW,E,EAAY2L,S,EAA8C;AAAA;;AAAA,cAA1BM,YAA0B,uEAAF,EAAE;AACtE,cAAMxiB,GAAG,oBAAauW,EAAb,CAAT;AACA;;AACA,cAAI,CAAC,KAAKsL,SAAL,CAAe7hB,GAAf,CAAL,EAA0B;AACxB,iBAAK6hB,SAAL,CAAe7hB,GAAf,IAAsB,IAAI2gB,OAAJ,CAAe,UAACC,OAAD,EAAUC,MAAV,EAAqB;AACxD,kBAAMnJ,KAAK,GAAG,gBAAAoD,aAAA,CAAc,OAAI,CAACqI,eAAL,CAAqBX,YAArB,CAAd,CAAd;AACA,kBAAMxE,GAAG,aAAM,OAAI,CAACG,KAAL,CAAWqE,YAAY,CAACH,MAAxB,CAAN,cAAyC9L,EAAzC,SAA8CmB,KAAK,GAAG,MAAMA,KAAT,GAAiB,EAApE,CAAT;AACA,kBAAIgL,MAAM,GAAM,IAAhB;;AACA,qBAAI,CAACC,IAAL,CAAUc,GAAV,CAAczF,GAAd,EAAmB,OAAI,CAACmF,eAAL,CAAqBjB,SAArB,CAAnB,EAAoD3f,SAApD,CACE,UAACkD,CAAD;AAAA,uBAAQid,MAAM,GAAG,OAAI,CAACE,OAAL,CAAand,CAAb,CAAjB;AAAA,eADF,EAEE,UAACkJ,CAAD,EAAO;AACLkS,sBAAM,CAAClS,CAAD,CAAN;;AACA,uBAAI,CAACyU,cAAL,kBAA8B,OAAI,CAACpB,KAAL,CAAWhW,WAAX,EAA9B,cAAiEuK,EAAjE;;AACA,uBAAI,CAACsL,SAAL,CAAe7hB,GAAf,IAAsB,IAAtB;AACD,eANH,EAOE,YAAM;AACJ4gB,uBAAO,CAAC8B,MAAD,CAAP;;AACA,uBAAI,CAACze,GAAL,CACE,MADF,EAEE,OAAI,CAACof,UAAL,CAAgB,OAAI,CAACK,UAAL,CAAgB,OAAI,CAAC1J,GAAL,CAAS,MAAT,CAAhB,EAAkC;AAAEzD,oBAAE,EAAFA;AAAF,iBAAlC,CAAhB,EAAkE,CAChEmM,MADgE,CAAlE,CAFF;;AAMA,uBAAI,CAACU,cAAL,kBAA8B,OAAI,CAACpB,KAAL,CAAWhW,WAAX,EAA9B,eAAkEuK,EAAlE;;AACA,uBAAI,CAACsL,SAAL,CAAe7hB,GAAf,IAAsB,IAAtB;AACD,eAjBH;AAmBD,aAvBqB,CAAtB;AAwBD;;AACD,iBAAO,KAAK6hB,SAAL,CAAe7hB,GAAf,CAAP;AACD;AAED;;;;;;;gCAIcuW,E,EAA2B;AAAA;;AAAA,cAAf4N,CAAe,uEAAF,EAAE;AACvC,cAAMnkB,GAAG,oBAAauW,EAAb,CAAT;AACA;;AACA,cAAI,CAAC,KAAKsL,SAAL,CAAe7hB,GAAf,CAAL,EAA0B;AACxB,iBAAK6hB,SAAL,CAAe7hB,GAAf,IAAsB,IAAI2gB,OAAJ,CAAkB,UAACC,OAAD,EAAUC,MAAV,EAAqB;AAC3D,kBAAMnJ,KAAK,GAAG,gBAAAoD,aAAA,CAAcqJ,CAAd,CAAd;AACA,kBAAMnG,GAAG,aAAM,OAAI,CAACG,KAAL,EAAN,cAAsB5H,EAAtB,SAA2BmB,KAAK,GAAG,MAAMA,KAAT,GAAiB,EAAjD,CAAT;;AACA,qBAAI,CAACiL,IAAL,WAAiB3E,GAAjB,EAAsBzb,SAAtB,CACE,UAACuZ,CAAD;AAAA,uBAAO,IAAP;AAAA,eADF,EAEE,UAACnN,CAAD,EAAO;AACLkS,sBAAM,CAAClS,CAAD,CAAN;AACA,uBAAI,CAACkT,SAAL,CAAe7hB,GAAf,IAAsB,IAAtB;AACD,eALH,EAME,YAAM;AACJ,uBAAI,CAACiE,GAAL,CAAS,MAAT,EAAiB,OAAI,CAACyf,UAAL,CAAgB,OAAI,CAAC1J,GAAL,CAAS,MAAT,CAAhB,EAAkC;AAAEzD,oBAAE,EAAFA;AAAF,iBAAlC,CAAjB;;AACA,uBAAI,CAACsL,SAAL,CAAe7hB,GAAf,IAAsB,IAAtB;AACA4gB,uBAAO;AACR,eAVH;AAYD,aAfqB,CAAtB;AAgBD;;AACD,iBAAO,KAAKiB,SAAL,CAAe7hB,GAAf,CAAP;AACD;AAED;;;;;;+BAGoB;;;;;;;;;;;;AACnB;AAED;;;;;;;uCAIyBuV,M,EAAgB6O,K,EAAgB,CACvD;AACA;AACA;AACD;AAED;;;;;;;gCAIkBC,Q,EAAiB;AACjC,iBAAOA,QAAP;AACD;AAED;;;;;;;;;mCAOEC,Q,EACA9hB,I,EACkD;AAAA,cAAlD+hB,SAAkD,uEAAb,KAAKzC,QAAQ;;AAElD;AACA,cAAI,CAACtf,IAAD,IAASA,IAAI,CAACgE,MAAL,KAAgB,CAA7B,EAAgC;AAC9B,mBAAO8d,QAAP;AACD;;AACD,cAAME,QAAQ,GAAQ,EAAtB;AACA,cAAMC,UAAU,gCAAOjiB,IAAP,sBAAgB8hB,QAAhB,EAAhB;AACA;;AACA,cAAI,CAACC,SAAL,EAAgB;AACdA,qBAAS,GAAG,KAAKzC,QAAjB;AACD;;AAXiD,uDAY/B2C,UAZ+B;AAAA;;AAAA;AAAA;AAAA,kBAYvCzX,IAZuC;AAahD,kBAAM8M,KAAK,GAAG0K,QAAQ,CAAC1c,IAAT,CAAc,UAACnF,CAAD;AAAA,uBAAO4hB,SAAS,CAAC5hB,CAAD,EAAIqK,IAAJ,CAAhB;AAAA,eAAd,CAAd;AACA;;AACA,kBAAI,CAAC8M,KAAL,EAAY;AACV0K,wBAAQ,CAACrY,IAAT,CAAca,IAAd;AACD;AAjB+C;;AAYlD,sEAA+B;AAAA;AAM9B;AAlBiD;AAAA;AAAA;AAAA;AAAA;;AAmBlD,iBAAOwX,QAAP;AACD;AAED;;;;;;;;;mCAMqBhiB,I,EAAWwK,I,EAASuX,S,EAAqC;AAC5E,cAAMC,QAAQ,GAAG,EAAjB;AACA;;AACA,cAAI,CAACD,SAAL,EAAgB;AACdA,qBAAS,GAAG,KAAKzC,QAAjB;AACD;;AACDtf,cAAI,CAACE,OAAL,CAAa,UAACC,CAAD;AAAA,mBAAQ4hB,SAAS,CAACvX,IAAD,EAAOrK,CAAP,CAAT,GAAqB,IAArB,GAA4B6hB,QAAQ,CAACrY,IAAT,CAAcxJ,CAAd,CAApC;AAAA,WAAb;AACA,iBAAO6hB,QAAP;AACD;;;4BAxdoB;AACnB,iBAAO,KAAKjJ,SAAL,CAAeoH,IAAtB;AACD;;;4BA4CsB;AACrB,iBAAO,KAAKV,UAAZ;AACD;;;;MAtEqE,OAAAviB,S;;AAAxE;;;;;;;;;;;;;;;;;;;;ACbA;AAAA;AAAA;;AAEA,QAAYmiC,gBAAZ;;AAAA,eAAYA,gBAAZ,EAA4B;AACxB;AACA;AACA,4CAHwB,CAIxB;;AACA;AACH,KAND,EAAYA,gBAAgB,GAAhB,QAAAA,gBAAA,aAAAA,gBAAA,GAAgB,EAAhB,CAAZ;;AAQA,QAAY0O,UAAZ;;AAAA,eAAYA,UAAZ,EAAsB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AAEH,KATD,EAAYA,UAAU,GAAV,QAAAA,UAAA,aAAAA,UAAA,GAAU,EAAV,CAAZ;;AAWA,QAAYrkB,YAAZ;;AAAA,eAAYA,YAAZ,EAAwB;AACpB;AACA;AACH,KAHD,EAAYA,YAAY,GAAZ,QAAAA,YAAA,aAAAA,YAAA,GAAY,EAAZ,CAAZ;;AAKA,QAAY+V,aAAZ;;AAAA,eAAYA,aAAZ,EAAyB;AACrB;AACA;AACH,KAHD,EAAYA,aAAa,GAAb,QAAAA,aAAA,aAAAA,aAAA,GAAa,EAAb,CAAZ;;AAiBA,QAAYuO,SAAZ;;AAAA,eAAYA,SAAZ,EAAqB;AACjB;AACA;AACH,KAHD,EAAYA,SAAS,GAAT,QAAAA,SAAA,aAAAA,SAAA,GAAS,EAAT,CAAZ;;AAqBa,YAAAC,8BAAA,GAAiC,UAAC5Z,MAAD,EAA6B;AACvE,cAAQA,MAAR;AACI,aAAKgL,gBAAgB,CAAC6O,KAAtB;AACI,iBAAO,MAAP;;AACJ,aAAK7O,gBAAgB,CAACU,MAAtB;AACI,iBAAO,OAAP;;AACJ,aAAKV,gBAAgB,CAAC8O,gBAAtB;AACI,iBAAO,QAAP;;AACJ;AACI,iBAAO,MAAP;AARR;AAUH,KAXY;AAab;;;;;AAGa,YAAAC,gBAAA,GAAmB,UAACtsC,IAAD,EAAyE;AAAA,UAA1DusC,MAA0D,uEAAvB,EAAuB;AAAA,UAC7F9kB,WAD6F,GAC7E8kB,MAD6E,CAC7F9kB,WAD6F;AAErG,UAAI+kB,UAAU,GAAG,UAAA/iC,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB8J,YAApB,CAAiC,MAAjC,EAAyC7I,QAAzC,CAAkD;AAAC4wB,YAAI,EAAG;AAAR,OAAlD,CAAjB,CAFqG,CAErB;;AAChF,UAAMgb,SAAS,GAAoB,EAAnC;;AACA,WAAK,IAAIpuC,GAAC,GAAG,CAAb,EAAgBA,GAAC,IAAI,CAArB,EAAwBA,GAAC,EAAzB,EAA6B;AACzB,YAAMquC,UAAU,GAAG,IAAI,UAAAx7B,MAAJ,CAAW;AAAClR,cAAI,EAAJA,IAAD;AAAOynB,qBAAW,EAAXA,WAAP;AAAoBD,qBAAW,EAAE;AAAjC,SAAX,CAAnB;AACA,YAAMmlB,MAAM,GAAGD,UAAU,CAACjZ,WAAX,KAA2Bp1B,GAA1C;AACA,YAAMuuC,SAAS,GAAGJ,UAAU,CAAClrC,UAAX,CAAsB,MAAtB,CAAlB;AACA,YAAMurC,SAAS,GAAGxuC,GAAC,KAAK,CAAN,GAAU,CAAV,GAAcA,GAAhC,CAJyB,CAIS;;AAClCouC,iBAAS,CAAC5kC,IAAV,CAAe;AAACoK,YAAE,EAAE26B,SAAS,CAACv/B,SAAV,CAAoB,CAApB,EAAuB,CAAvB,CAAL;AAAgCs/B,gBAAM,EAANA,MAAhC;AAAwCE,mBAAS,EAATA,SAAxC;AAAmDD,mBAAS,EAAEA,SAAS,CAACniC,iBAAV;AAA9D,SAAf;AACA+hC,kBAAU,GAAGA,UAAU,CAAC3rC,QAAX,CAAoB;AAAE4wB,cAAI,EAAG;AAAT,SAApB,CAAb;AACH;;AACD,aAAOgb,SAAP;AACH,KAbY;;AAeA,YAAAK,oBAAA,GAAuB,UAAC5uC,IAAD,EAAyB;AACzD,aAAOA,IAAI,CAACyF,MAAL,CAAY,UAACwE,CAAD,EAAIC,CAAJ,EAAU;AAAE,eAAOD,CAAC,CAACkxB,YAAF,CAAejxB,CAAf,IAAoBD,CAApB,GAAwBC,CAA/B;AAAmC,OAA3D,CAAP;AACH,KAFY;;AAIA,YAAA2kC,mBAAA,GAAsB,UAAC7uC,IAAD,EAAyB;AACxD,aAAOA,IAAI,CAACyF,MAAL,CAAY,UAACwE,CAAD,EAAIC,CAAJ,EAAU;AAAE,eAAOD,CAAC,CAACmxB,WAAF,CAAclxB,CAAd,IAAmBD,CAAnB,GAAuBC,CAA9B;AAAkC,OAA1D,CAAP;AACH,KAFY;;AAIA,YAAA4kC,iBAAA,GAAoB,UAACC,MAAD,EAAuC;AACpE,UAAM5f,GAAG,GAAG,QAAA0f,mBAAA,CAAoBE,MAAM,CAAC/uC,IAA3B,EAAiCoD,UAAjC,CAA4C,iBAA5C,CAAZ;;AACA,UAAM4rC,SAAS,GAAG,SAAZA,SAAY,CAAC3a,MAAD,EAAoB;AAClC,YAAG0a,MAAM,CAAClb,QAAP,KAAoB,CAAvB,EAAyB;AACrB,wCAAuBQ,MAAvB,oBAAuClF,GAAvC;AACH,SAFD,MAEK;AACD,wCAAuB4f,MAAM,CAAClb,QAA9B,cAA0CQ,MAA1C,qBAA2DlF,GAA3D;AACH;AACJ,OAND;;AAQA,cAAQ4f,MAAM,CAAC1a,MAAf;AACI,aAAKgL,gBAAgB,CAAC6O,KAAtB;AACI,iBAAOc,SAAS,CAAC,KAAD,CAAhB;;AACJ,aAAK3P,gBAAgB,CAACU,MAAtB;AACI,iBAAOiP,SAAS,CAAC,MAAD,CAAhB;;AACJ,aAAK3P,gBAAgB,CAAC8O,gBAAtB;AACI,iBAAOa,SAAS,CAAC,OAAD,CAAhB;;AACJ,aAAK3P,gBAAgB,CAACC,IAAtB;AACI,0DAAyC,QAAAuP,mBAAA,CAAoBE,MAAM,CAAC/uC,IAA3B,EAAiCoD,UAAjC,CAA4C,iBAA5C,CAAzC;;AACJ;AACI,iBAAO,EAAP;AAVR;AAYH,KAtBY;;AAwBA,YAAA6rC,0BAAA,GAA6B,UAACF,MAAD,EAAgD;AACtF,UAAM5f,GAAG,GAAG4f,MAAM,CAAC5f,GAAnB;AACA,UAAMntB,KAAK,GAAG,IAAI,UAAAgR,MAAJ,CAAW;AAAElR,YAAI,EAAEitC,MAAM,CAAC/sC;AAAf,OAAX,CAAd;;AAEA,UAAMgtC,SAAS,GAAG,SAAZA,SAAY,CAAC3a,MAAD,EAAoB;AAClC,YAAG0a,MAAM,CAAClb,QAAP,KAAoB,CAAvB,EAAyB;AACrB,wCAAuBQ,MAAvB,wBAA2CryB,KAAK,CAACoB,UAAN,CAAiB,aAAjB,CAA3C,oBAAoF+rB,GAAG,CAAC/rB,UAAJ,CAAe,aAAf,CAApF;AACH,SAFD,MAEK;AACD,wCAAuB2rC,MAAM,CAAClb,QAA9B,cAA0CQ,MAA1C,yBAA+DryB,KAAK,CAACoB,UAAN,CAAiB,aAAjB,CAA/D,oBAAwG+rB,GAAG,CAAC/rB,UAAJ,CAAe,aAAf,CAAxG;AACH;AACJ,OAND;;AAQA,cAAQ2rC,MAAM,CAAC1a,MAAf;AACI,aAAKgL,gBAAgB,CAAC6O,KAAtB;AACI,iBAAOc,SAAS,CAAC,KAAD,CAAhB;;AACJ,aAAK3P,gBAAgB,CAACU,MAAtB;AACI,iBAAOiP,SAAS,CAAC,MAAD,CAAhB;;AACJ,aAAK3P,gBAAgB,CAAC8O,gBAAtB;AACI,iBAAOa,SAAS,CAAC,OAAD,CAAhB;;AACJ,aAAK3P,gBAAgB,CAACC,IAAtB;AACI;;AACJ;AACI,iBAAO,EAAP;AAVR;AAYH,KAxBY;;AA0BA,YAAA/F,sBAAA,GAAyB,UAAClhB,IAAD,EAAmB;AACrD,UAAGA,IAAI,CAACuO,YAAR,EAAqB;AACjB,YAAGvO,IAAI,CAACoQ,iBAAL,KAA2B4W,gBAAgB,CAACC,IAA/C,EAAoD;AAChD,iBAAOjnB,IAAI,CAACwQ,iBAAZ;AACA,iBAAOxQ,IAAI,CAACsQ,gBAAZ;;AACA,cAAGtQ,IAAI,CAACoQ,iBAAL,KAA2B4W,gBAAgB,CAACU,MAA/C,EAAsD;AAClD,mBAAO1nB,IAAI,CAAC0Q,eAAZ;AACH;AACJ,SAND,MAMO,IAAG1Q,IAAI,CAACoQ,iBAAR,EAA0B;AAC7BpQ,cAAI,CAACmhB,eAAL,sBAA2B,CAACnhB,IAAI,CAACwQ,iBAAL,IAA0B,EAA3B,EAA+BlhB,GAA/B,CAAmC,UAAC7F,IAAD;AAAA,mBAAkBA,IAAI,CAAC0J,YAAL,CAAkB,QAAlB,EAA4BgI,OAA9C;AAAA,WAAnC,CAA3B;AACA,iBAAO6E,IAAI,CAACqQ,mBAAZ;AACA,iBAAOrQ,IAAI,CAACsQ,gBAAZ;AACA,iBAAOtQ,IAAI,CAACuQ,gBAAZ;AACA,iBAAOvQ,IAAI,CAACwQ,iBAAZ;AACA,iBAAOxQ,IAAI,CAAC0Q,eAAZ;AACH;;AACD,eAAO1Q,IAAI,CAACuO,YAAZ;AACH,OAhBD,MAgBK;AACD,eAAOvO,IAAI,CAACoQ,iBAAZ;AACA,eAAOpQ,IAAI,CAACqQ,mBAAZ;AACA,eAAOrQ,IAAI,CAACsQ,gBAAZ;AACA,eAAOtQ,IAAI,CAACuQ,gBAAZ;AACA,eAAOvQ,IAAI,CAACwQ,iBAAZ;AACA,eAAOxQ,IAAI,CAACuO,YAAZ;AACA,eAAOvO,IAAI,CAACyQ,qBAAZ;AACA,eAAOzQ,IAAI,CAAC0Q,eAAZ;AACH;;AAED,aAAO1Q,IAAP;AACH,KA7BY;AA+Bb;;;AACa,YAAA62B,uBAAA,GAA0B,UAACjxB,IAAD,EAAoB;;;AACvD,UAAG,OAAAA,IAAI,CAACkxB,QAAL,CAAcp8B,MAAd,MAAoB,IAApB,IAAoB,aAApB,GAAoB,MAApB,GAAoB,GAAE/N,KAAtB,MAAgC0kB,YAAY,CAAC8V,KAAhD,EAAuD;AACnD,YAAM4P,EAAE,GAAGnxB,IAAI,CAACkxB,QAAL,CAAc/b,UAAd,CAAyBpuB,KAAzB,CAA+B,CAA/B,EAAkC0B,QAA7C;AACA,YAAM2oC,QAAQ,GAAG,IAAI,UAAAr8B,MAAJ,CAAW;AAAEsW,qBAAW,EAAE,KAAf;AAAsBC,qBAAW,EAAE6lB;AAAnC,SAAX,CAAjB;AACA,YAAMhQ,WAAW,GAAGnhB,IAAI,CAACkxB,QAAL,CAActmB,iBAAd,CAAgC7jB,KAAhC,CAAsC0D,MAAtC,CAA6C,UAAC5G,IAAD;AAAA,iBAC7DutC,QAAQ,CAAClU,YAAT,CAAsBr5B,IAAtB,EAA4B,KAA5B,KAAsCutC,QAAQ,CAAChP,UAAT,CAAoBv+B,IAApB,EAA0B,KAA1B,CADuB;AAAA,SAA7C,CAApB;AAGAmc,YAAI,CAACkxB,QAAL,CAActmB,iBAAd,CAAgCnmB,QAAhC,CAAyC08B,WAAzC;;AANmD,oCAO5B,QAAAkQ,2BAAA,CAA4BlQ,WAA5B,EAAyCgQ,EAAzC,CAP4B;AAAA,YAO3CptC,KAP2C,yBAO3CA,KAP2C;AAAA,YAOpCmtB,GAPoC,yBAOpCA,GAPoC;;AAQnDlR,YAAI,CAACkxB,QAAL,CAAc1sC,MAAd,CAAqBC,QAArB,CAA8BV,KAA9B;AACAic,YAAI,CAACkxB,QAAL,CAAcxmB,gBAAd,CAA+BjmB,QAA/B,CAAwCysB,GAAxC;AACH;AACJ,KAZY;AAcb;;;;;AAGc,YAAAmgB,2BAAA,GAA8B,UAACC,KAAD,EAAuBH,EAAvB,EAAmE;AAC3G,UAAGG,KAAK,CAACvrC,MAAN,KAAiB,CAApB,EAAsB;AAClB,eAAO;AACHhC,eAAK,EAAEutC,KAAK,CAACvlC,IAAN,CAAW,UAAC21B,EAAD,EAAKC,EAAL;AAAA,mBAAYD,EAAE,CAACl0B,EAAH,GAAQm0B,EAAE,CAACn0B,EAAvB;AAAA,WAAX,EAAsC,CAAtC,CADJ;AAEH0jB,aAAG,EAAEogB,KAAK,CAACvlC,IAAN,CAAW,UAAC21B,EAAD,EAAKC,EAAL;AAAA,mBAAYA,EAAE,CAACn0B,EAAH,GAAQk0B,EAAE,CAACl0B,EAAvB;AAAA,WAAX,EAAsC,CAAtC;AAFF,SAAP;AAIH,OAN0G,CAO3G;;;AACA,UAAMwd,GAAG,GAAG,UAAA1d,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoBwK,MAApB,CAA2BkjC,EAA3B,CAAZ;AACA,aAAO;AAACptC,aAAK,EAAEinB,GAAR;AAAakG,WAAG,EAAElG,GAAG,CAACtmB,QAAJ,CAAa;AAAC4wB,cAAI,EAAE;AAAP,SAAb;AAAlB,OAAP;AACH,KAVa;;AAYD,YAAAic,uBAAA,GAA0B,UAACvxB,IAAD,EAAqB;AAAA,wBAClBA,IAAI,CAACjZ,KADa;AAAA,UAChD6jB,iBADgD,eAChDA,iBADgD;AAAA,UAC7BpmB,MAD6B,eAC7BA,MAD6B;AAExD,UAAMzC,IAAI,GAAG,CAAC6oB,iBAAiB,IAAI,EAAtB,EAA0BlhB,GAA1B,CAA8B,UAAC7F,IAAD;AAAA,eAAkBA,IAAI,CAACY,QAAL,CAAc;AAAC0B,cAAI,EAAE3B,MAAM,CAACgtC,QAAd;AAAwBttC,gBAAM,EAAEM,MAAM,CAACF;AAAvC,SAAd,CAAlB;AAAA,OAA9B,CAAb;AACA0b,UAAI,CAACkxB,QAAL,CAActmB,iBAAd,CAAgCnmB,QAAhC,CAAyC1C,IAAzC;AACH,KAJY;;;;;;;;;;;;;;;;;;;;;;;;;ACxNb;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACDA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAQA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;QAEa0vC,M;AAMT,wBAAoC;AAAA,YAAxBhyB,QAAwB,uEAAJ,EAAI;;AAAA;;AAChC,aAAK3W,IAAL,GAAY2W,QAAQ,CAAC3W,IAAT,IAAiB,EAA7B;AACA,aAAKsR,IAAL,GAAY,KAAKs3B,SAAL,CAAejyB,QAAQ,CAACrF,IAAxB,CAAZ;AACH;AAED;;;;;;AAMA;sCAC+C;AAAA,cAA5Bxa,IAA4B,uEAAb,aAAa;AAC3C,iBAAA4P,YAAA,CAAa5P,IAAb,EAAmB,OAAA8Q,SAAA,CAAU,KAAK0J,IAAf,CAAnB;AACH;AAED;;;;uCACiD;AAAA,cAA7Bxa,IAA6B,uEAAd,cAAc;AAC7C,iBAAA4P,YAAA,CAAa5P,IAAb,EAAmBwM,IAAI,CAACE,SAAL,CAAe,KAAK8N,IAApB,EAA0BtU,SAA1B,EAAqC,CAArC,CAAnB;AACH;;;0CAEwBmP,K,EAAe;AACpC,cAAIA,KAAK,KAAK,IAAV,IAAkBA,KAAK,KAAKnP,SAAhC,EAA2C;AACvC,gBAAIlG,IAAI,GAAGqV,KAAK,CAACpP,KAAN,CAAY,GAAZ,EAAiB,CAAjB,CAAX;AACAjG,gBAAI,GAAGA,IAAI,CAACiG,KAAL,CAAW,GAAX,EAAgBqH,IAAhB,CAAqB,GAArB,CAAP,CAFuC,CAEL;;AAClCtN,gBAAI,GAAGA,IAAI,CAACkN,OAAL,CAAa,QAAb,EAAuB,UAAU6kC,GAAV,EAAe;AACzC,+BAAUA,GAAG,CACRC,MADK,CACE,CADF,EAEL3+B,WAFK,EAAV,SAEqB0+B,GAAG,CAACnJ,MAAJ,CAAW,CAAX,EAAcj9B,WAAd,EAFrB;AAGH,aAJM,CAAP;AAKA,mBAAO3L,IAAP;AACH,WATD,MASO;AACH,mBAAOqV,KAAP;AACH;AACJ;;;sCAEqB48B,c,EAAsB;AACxC,cAAI7lC,CAAC,GAAG,IAAIvI,IAAJ,CAASouC,cAAc,GAAG,IAA1B,CAAR;AACA,cAAI3T,MAAM,GAAG,CAAC,KAAD,EAAO,KAAP,EAAa,KAAb,EAAmB,KAAnB,EAAyB,KAAzB,EAA+B,KAA/B,EAAqC,KAArC,EAA2C,KAA3C,EAAiD,KAAjD,EAAuD,KAAvD,EAA6D,KAA7D,EAAmE,KAAnE,CAAb;AACA,cAAIh4B,IAAI,GAAG8F,CAAC,CAAC7D,WAAF,EAAX;AACA,cAAIlC,KAAK,GAAGi4B,MAAM,CAAClyB,CAAC,CAAC8lC,QAAF,EAAD,CAAlB;AACA,cAAIjuC,IAAI,GAAGmI,CAAC,CAAC/D,OAAF,EAAX;AACA,cAAI9B,IAAI,GAAI,CAAC6F,CAAC,CAAC+lC,QAAF,KAAe,EAAhB,IAAsB,EAAtB,GAA2B,CAAvC;AACA,cAAIC,MAAM,GAAGhmC,CAAC,CAAC+lC,QAAF,MAAgB,EAAhB,GAAqB,IAArB,GAA0B,IAAvC;AACA,cAAIvP,GAAG,GAAGx2B,CAAC,CAACimC,UAAF,EAAV;AACA,cAAI5kC,IAAI,GAAGxJ,IAAI,GAAG,GAAP,GAAaoC,KAAb,GAAqB,GAArB,GAA2BC,IAA3B,GAAkC,KAAlC,GAA0CC,IAA1C,GAAiD,GAAjD,GAAuDq8B,GAAvD,GAA6D,GAA7D,GAAmEwP,MAA9E;AACA,iBAAO3kC,IAAP;AACH;;;oCAEiC;AAAA;;AAAA,cAAhB+M,IAAgB,uEAAJ,EAAI;;AAC9B,cAAIA,IAAI,CAACrU,MAAL,GAAc,CAAd,IAAmB,KAAK+C,IAAL,KAAc,KAArC,EAA4C;AACxC,iBAAK,IAAI5G,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAGkY,IAAI,CAACrU,MAAzB,EAAiC7D,GAAC,EAAlC,EAAsC;AAClCkY,kBAAI,CAAClY,GAAD,CAAJ,CAAQ,QAAR,IAAoBkY,IAAI,CAAClY,GAAD,CAAJ,CAAQ,QAAR,EAAkBtC,IAAtC;AACAwa,kBAAI,CAAClY,GAAD,CAAJ,CAAQ,oBAAR,IAAgC2O,MAAM,CAACgqB,MAAP,CAAczgB,IAAI,CAAClY,GAAD,CAAJ,CAAQ,oBAAR,CAAd,EAA6C,CAA7C,CAAhC;AACH;AACJ,WALD,MAKO,IAAIkY,IAAI,CAACrU,MAAL,GAAc,CAAd,IAAmB,KAAK+C,IAAL,KAAc,OAArC,EAA8C;AACjD,iBAAK,IAAI5G,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAGkY,IAAI,CAACrU,MAAzB,EAAiC7D,GAAC,EAAlC,EAAsC;AAClCkY,kBAAI,CAAClY,GAAD,CAAJ,CAAQ,YAAR,IAAwB,KAAKgwC,aAAL,CAAmB93B,IAAI,CAAClY,GAAD,CAAJ,CAAQ,YAAR,CAAnB,CAAxB;AACH;AACJ,WAJM,MAIA,IAAIkY,IAAI,CAACrU,MAAL,GAAc,CAAd,IAAmB,KAAK+C,IAAL,KAAc,UAArC,EAAiD;AACpD,iBAAK,IAAI5G,IAAC,GAAG,CAAb,EAAgBA,IAAC,GAAGkY,IAAI,CAACrU,MAAzB,EAAiC7D,IAAC,EAAlC,EAAsC;AAClCkY,kBAAI,CAAClY,IAAD,CAAJ,CAAQ,cAAR,IAA0B,KAAKiwC,iBAAL,CACtB/3B,IAAI,CAAClY,IAAD,CAAJ,CAAQ,cAAR,CADsB,CAA1B;AAGH;;AACD,gBAAMkJ,MAAM,GAAGyF,MAAM,CAACpH,IAAP,CAAY2Q,IAAI,CAAC,CAAD,CAAhB,CAAf;AACA,gBAAMg4B,UAAU,GAAGhnC,MAAM,CAAC/D,IAAP,CACf,UAAC9H,GAAD;AAAA,qBACIA,GAAG,CAACgM,WAAJ,GAAkBoS,QAAlB,CAA2B,MAA3B,KACApe,GAAG,CAACgM,WAAJ,GAAkBoS,QAAlB,CAA2B,OAA3B,CAFJ;AAAA,aADe,CAAnB;AAKA,gBAAM00B,WAAW,GAAGjnC,MAAM,CAAC/D,IAAP,CAAY,UAAC9H,GAAD;AAAA,qBAC5BA,GAAG,CAACgM,WAAJ,GAAkBoS,QAAlB,CAA2B,OAA3B,CAD4B;AAAA,aAAZ,CAApB;;AAZoD,yDAgBpCvD,IAhBoC;AAAA;;AAAA;AAgBpD,wEAAsB;AAAA,oBAAbk4B,GAAa;;AAClB;AACA,oBAAMC,aAAa,GAAG,wBAAAxxB,cAAA,CAAeC,UAAf,CAA0B,SAAAiG,KAA1B,CAAtB;;AACA,oBAAImrB,UAAU,IAAIC,WAAd,IAA6BE,aAAjC,EAAgD;AAAA;AAC5C,wBAAM1b,IAAI,GAAG0b,aAAa,CAAClrC,IAAd,CACTirC,GAAG,CAACF,UAAD,CAAH,CAAgB7mC,WAAhB,EADS,CAAb;AAGA,wBAAMinC,WAAW,GAAG,wBAAAzxB,cAAA,CAAeC,UAAf,CAA0B,eAAA0qB,YAA1B,CAApB;AACA,wBAAMM,GAAG,GAAGwG,WAAW,CAAC75B,SAAZ,CAAsBtR,IAAtB,CACR,UAAC2kC,GAAD,EAAqB;AAAA;;AACjB,6BAAAA,GAAG,CAACl2B,EAAJ,MAAM,MAAK+gB,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAE3H,KAAX,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAE+c,WAAxB;AAAmC,qBAF/B,CAAZ;AAIAqG,uBAAG,CAACD,WAAD,CAAH,GAAmB,IAAI,SAAAI,YAAJ,CAAiB,OAAjB,EAA0BC,SAA1B,CACfJ,GAAG,CAACD,WAAD,CAAH,GAAmB,GADJ,EAEfrG,GAAG,SAAH,IAAAA,GAAG,WAAH,GAAG,MAAH,GAAAA,GAAG,CAAE6B,QAFU,CAAnB;AAT4C;AAa/C;AACD;;;AAjBkB,6DAkBAziC,MAlBA;AAAA;;AAAA;AAkBlB,4EAA0B;AAAA,wBAAjBwB,KAAiB;AACtB0lC,uBAAG,CAAC1lC,KAAD,CAAH,GACI,OAAO0lC,GAAG,CAAC1lC,KAAD,CAAV,KAAsB,QAAtB,GACM0lC,GAAG,CAAC1lC,KAAD,CAAH,CAAWE,OAAX,CAAmB,KAAnB,EAA0B,GAA1B,CADN,GAEMwlC,GAAG,CAAC1lC,KAAD,CAHb;AAIH;AAvBiB;AAAA;AAAA;AAAA;AAAA;AAwBrB;AAxCmD;AAAA;AAAA;AAAA;AAAA;AAyCvD,WAzCM,MAyCA,IAAI,KAAK9D,IAAL,KAAc,UAAlB,EAA8B;AACjCsR,gBAAI,GAAGA,IAAI,CAAC1Q,GAAL,CAAS,UAACxH,CAAD,EAAgB;;;AAC5B,kBAAMsW,OAAO,GAAGtW,CAAhB;;AACA,kBAAI;AACA,oBAAIsW,OAAO,CAAC+F,KAAR,YAAyB1N,MAA7B,EAAqC;AACjC2H,yBAAO,CAAC+F,KAAR,GAAgB/F,OAAO,CAAC+F,KAAR,CAAc/F,OAAO,CAAC8d,UAAtB,CAAhB;AACH;;AACD,oBAAI9d,OAAO,CAACoZ,SAAR,YAA6B/gB,MAAjC,EAAyC;AACrC2H,yBAAO,CAACoZ,SAAR,GACIpZ,OAAO,CAACoZ,SAAR,CAAkBpZ,OAAO,CAAC8d,UAA1B,CADJ;AAEH;;AACD9d,uBAAO,CAAC+F,KAAR,GAAgB,OAAA1T,gBAAA,CAAiB,CAAC2N,OAAO,CAAC+F,KAAR,IAAiB,CAAlB,IAAuB,EAAxC,CAAhB;AACA/F,uBAAO,CAACoZ,SAAR,GAAoB,OAAA/mB,gBAAA,CAChB,CAAC2N,OAAO,CAACoZ,SAAR,IAAqB,CAAtB,IAA2B,EADX,CAApB;AAGApZ,uBAAO,CAAC4uB,WAAR,GAAsB,CAAC5uB,OAAO,CAAC4uB,WAAR,IAAuB,EAAxB,EACjBt6B,OADiB,CACT,YADS,EACK,EADL,EAEjBA,OAFiB,CAET,KAFS,EAEF,GAFE,EAGjBA,OAHiB,CAGT,WAHS,EAGI,GAHJ,CAAtB;AAIA0L,uBAAO,CAAC,cAAD,CAAP,GACI,OAAAA,OAAO,CAACm6B,SAAR,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAE/yC,IAAnB,KAA2B4Y,OAAO,CAACm6B,SADvC;AAEAn6B,uBAAO,CAAC,WAAD,CAAP,GACI,OAAAA,OAAO,CAACmgB,SAAR,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAE/4B,IAAnB,MAAuB,MACvB4Y,OAAO,CAACmgB,SADe,MACN,IADM,IACN,aADM,GACN,MADM,GACN,GAAE1jB,KADnB,KAEA,EAHJ;AAIAuD,uBAAO,CAACywB,WAAR,GACIzwB,OAAO,CAACugB,eAAR,CAAwBvgB,OAAO,CAAC8d,UAAhC,KAA+C,EADnD,CAtBA,CAwBA;;AACA9d,uBAAO,CAACggB,SAAR,GAAoB,CAAChgB,OAAO,CAACggB,SAAR,IAAqB,EAAtB,EACf9uB,GADe,CACX,UAACkpC,MAAD;AAAA,yBAAYA,MAAM,CAAChzC,IAAP,IAAegzC,MAAM,CAAC39B,KAAtB,IAA+B29B,MAA3C;AAAA,iBADW,EAEf1lC,IAFe,CAEV,IAFU,CAApB;AAGAsL,uBAAO,CAACsgB,KAAR,GAAgB,CAACtgB,OAAO,CAACsgB,KAAR,IAAiB,EAAlB,EACXpvB,GADW,CACP,UAAC2xB,IAAD;AAAA,yBACDA,IAAI,CAACH,MAAL,KACCG,IAAI,CAACvyB,IAAL,KAAc,aAAd,IACGuyB,IAAI,CAACvyB,IAAL,KAAc,SAFlB,eAGUuyB,IAAI,CAACH,MAHf,cAGyBG,IAAI,CAACvyB,IAH9B,cAGsCuyB,IAAI,CAAC7f,OAAL,CAC3B1O,OAD2B,CACnB,YADmB,EACL,EADK,EAE3BA,OAF2B,CAEnB,KAFmB,EAEZ,GAFY,EAG3BA,OAH2B,CAGnB,WAHmB,EAGN,GAHM,CAHtC,IAOM,EARL;AAAA,iBADO,EAWXI,IAXW,CAWN,KAXM,CAAhB;AAYAsL,uBAAO,CAACjB,SAAR,GAAoBiB,OAAO,CAACq6B,WAA5B;AACAr6B,uBAAO,CAAC8P,MAAR,GAAiB9P,OAAO,CAAC8P,MAAR,CAAe9P,OAAO,CAAC8d,UAAvB,KAAsC,EAAvD;AACA9d,uBAAO,CAAC6gB,OAAR,GAAkB7gB,OAAO,CAAC6gB,OAAR,CAAgBnsB,IAAhB,CAAqB,IAArB,CAAlB;;AACA,oBAAIsL,OAAO,CAACs6B,YAAZ,EAA0B;AACtBt6B,yBAAO,CAACs6B,YAAR,GAAuB,OAAI,CAACX,iBAAL,CACnB35B,OAAO,CAACs6B,YADW,CAAvB;AAGH;;AACD,oBAAIt6B,OAAO,CAACq6B,WAAZ,EAAyB;AACrBr6B,yBAAO,CAACu6B,kBAAR,GAA6B,IAAItvC,IAAJ,CACzB+U,OAAO,CAACu6B,kBAAR,GAA6B,IADJ,EAE3B7qC,cAF2B,EAA7B;AAGH;;AACDsQ,uBAAO,CAACw6B,cAAR,GAAyBx6B,OAAO,CAACu6B,kBAAjC;AACH,eAtDD,CAsDE,OAAO7kC,CAAP,EAAU,CAAE;;AACd,kBAAM+kC,aAAa,GAAG,CAClB,IADkB,EAElB,SAFkB,EAGlB,aAHkB,EAIlB,aAJkB,EAKlB,WALkB,EAMlB,WANkB,EAOlB,SAPkB,EAQlB,cARkB,EASlB,cATkB,EAUlB,WAVkB,EAWlB,eAXkB,EAYlB,aAZkB,EAalB,oBAbkB,EAclB,UAdkB,EAelB,aAfkB,EAgBlB,MAhBkB,EAiBlB,SAjBkB,EAkBlB,sBAlBkB,EAmBlB,cAnBkB,EAoBlB,WApBkB,EAqBlB,WArBkB,EAsBlB,WAtBkB,EAuBlB,qBAvBkB,EAwBlB,uBAxBkB,EAyBlB,qBAzBkB,EA0BlB,YA1BkB,EA2BlB,aA3BkB,EA4BlB,SA5BkB,EA6BlB,aA7BkB,EA8BlB,gBA9BkB,EA+BlB,SA/BkB,EAgClB,OAhCkB,EAiClB,SAjCkB,EAkClB,MAlCkB,EAmClB,kBAnCkB,EAoClB,UApCkB,EAqClB,gBArCkB,EAsClB,iBAtCkB,EAuClB,oBAvCkB,CAAtB;;AAyCA,kDAAoBA,aAApB,wCAAmC;AAA9B,oBAAMrmC,OAAK,uBAAX;;AACD,oBAAI4L,OAAO,CAAC5L,OAAD,CAAP,KAAmB9G,SAAvB,EAAkC;AAC9B,yBAAO0S,OAAO,CAAC5L,OAAD,CAAd;AACH;AACJ;;AACD,kBAAMsmC,MAAM,GAAG,EAAf;AACA,kBAAM1V,KAAK,GAAG,CACV,OADU,EAEV,OAFU,EAGV,KAHU,EAIV,UAJU,EAKV,cALU,EAMV,WANU,EAOV,WAPU,EAQV,iBARU,EASV,SATU,EAUV,WAVU,EAWV,SAXU,EAYV,aAZU,EAaV,WAbU,EAcV,cAdU,EAeV,gBAfU,CAAd;AAiBA,kBAAM/zB,IAAI,GAAGoH,MAAM,CAACpH,IAAP,CAAY+O,OAAZ,CAAb;AACA/O,kBAAI,CAACsC,IAAL,CAAU,UAACC,CAAD,EAAIC,CAAJ,EAAU;AAChB,oBAAMknC,KAAK,GAAG3V,KAAK,CAACv2B,OAAN,CAAc+E,CAAd,CAAd;AACA,oBAAMonC,KAAK,GAAG5V,KAAK,CAACv2B,OAAN,CAAcgF,CAAd,CAAd;AACA,uBACI,CAACknC,KAAK,KAAK,CAAC,CAAX,GAAe1pC,IAAI,CAAC1D,MAApB,GAA6BotC,KAA9B,KACCC,KAAK,KAAK,CAAC,CAAX,GAAe3pC,IAAI,CAAC1D,MAApB,GAA6BqtC,KAD9B,CADJ;AAIH,eAPD;;AAQA,0CAAkB3pC,IAAlB,gCAAwB;AAAnB,oBAAMlK,GAAG,eAAT;AACD2zC,sBAAM,CAAC3zC,GAAD,CAAN,GAAciZ,OAAO,CAACjZ,GAAD,CAArB;AACH;;AACD,qBAAO2zC,MAAP;AACH,aAtIM,CAAP;AAuIH;;AACD,iBAAO94B,IAAP;AACH;;;gCAxOqBtR,I,EAAcsR,I,EAAY;AAC5C,cAAMi5B,QAAQ,GAAG,OAAAljC,SAAA,CAAUiK,IAAV,CAAjB;AACA,iBAAO,IAAIq3B,MAAJ,CAAW;AAAE3oC,gBAAI,EAAJA,IAAF;AAAQsR,gBAAI,EAAEi5B;AAAd,WAAX,CAAP;AACH;;;;;;AAfL;;;;;;;;;;;;;;;;;;;;ACdA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;QAKaC,c;;;;;AACT,8BAAsBx4B,SAAtB,EACYoG,eADZ,EAC8C;AAAA;;AAAA;;AAC1C,sCAAMpG,SAAN,EAAiBoG,eAAjB;AAFkB,gBAAApG,SAAA,GAAAA,SAAA;AAGlB,gBAAKyG,KAAL,GAAa,SAAb;AACA,gBAAKC,UAAL,GAAkB,SAAlB;AAH0C;AAI7C;;;;gCAEiB/B,Q,EAAa;AAC3B,iBAAOA,QAAQ,YAAY7O,KAApB,GACD,IAAI,eAAA6gC,MAAJ,CAAW;AAAEr3B,gBAAI,EAAEqF;AAAR,WAAX,CADC,GAED,eAAAgyB,MAAA,CAAO8B,OAAP,CAAe,EAAf,EAAmB9zB,QAAnB,CAFN;AAGH;;;;MAZ+B,eAAAwB,c;;AAHpC;;;uBAGaqyB,c,EAAc,+B,EAAA,+B;AAAA,K;;;aAAdA,c;AAAc,eAAdA,cAAc,K;AAAA,kBAFX;;;;;2BAEHA,c,EAAc;cAH1B,OAAA58B,UAG0B;eAHf;AACR6I,oBAAU,EAAE;AADJ,S;AAGe,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;QCSdwB,c;AAuBT,gCAAc;AAAA;;AACV,cAAM,IAAI9gB,KAAJ,CAAU,iCAAV,CAAN;AACH;AArBD;;;;;mCACyB6I,I,EAAiB2oB,O,EAAY;AAClD,cAAIroB,MAAM,CAACC,KAAX,EAAkB;AACbD,kBAAc,CAAC2X,cAAf,GAAgC,KAAKyyB,aAArC;AACJ;;AACD,cAAMrxC,KAAK,GAAG4e,cAAc,CAACyyB,aAAf,CAA6BC,SAA7B,CAAuC,UAAAC,QAAQ;AAAA,mBAAIA,QAAQ,CAACC,UAAT,KAAwB7qC,IAA5B;AAAA,WAA/C,CAAd;;AACA,cAAI3G,KAAK,IAAI,CAAb,EAAgB;AACZ4e,0BAAc,CAACyyB,aAAf,CAA6BljC,MAA7B,CAAoCnO,KAApC,EAA2C,CAA3C,EAA8C;AAAEwxC,wBAAU,EAAE7qC,IAAd;AAAoB8qC,sBAAQ,EAAEniB;AAA9B,aAA9C;AACH,WAFD,MAEO;AACH1Q,0BAAc,CAACyyB,aAAf,CAA6B9nC,IAA7B,CAAkC;AAAEioC,wBAAU,EAAE7qC,IAAd;AAAoB8qC,sBAAQ,EAAEniB;AAA9B,aAAlC;AACH;AACJ;AAED;;;;mCACyB3oB,I,EAAe;AACpC,cAAM4qC,QAAQ,GAAG3yB,cAAc,CAACyyB,aAAf,CAA6BnsC,IAA7B,CAAkC,UAAAqsC,QAAQ;AAAA,mBAAIA,QAAQ,CAACC,UAAT,KAAwB7qC,IAA5B;AAAA,WAA1C,KAA+E;AAAE8qC,oBAAQ,EAAE;AAAZ,WAAhG;AACA,iBAAOF,QAAQ,CAACE,QAAhB;AACH;;;;;;AArBL;AACI;;AACe,mBAAAJ,aAAA,GAAwC,EAAxC;;;;;;;;;;;;;;;;;;;;;;;;ACtBnB;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAMA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;AAQa,YAAAK,cAAA,GAAiB,uBAAjB;;QAwCAC,c,GACT,wBAAmB15B,IAAnB,EAA4C;AAAA;;AAAzB,WAAAA,IAAA,GAAAA,IAAA;AAClB,K;;AAFL;;QAQaod,e;;;;;AAmDT,+BAAoB7c,MAApB,EAEoBqC,QAFpB,EAE8C;AAAA;;AAAA;;AAC1C;AAHgB,gBAAArC,MAAA,GAAAA,MAAA;AAEA,gBAAAqC,QAAA,GAAAA,QAAA;AApDpB;;AACQ,gBAAA+2B,SAAA,GAAY,UAAZ;AACR;;AACQ,gBAAAC,UAAA,GAAa,IAAI,OAAA10C,eAAJ,CAA+B,EAA/B,CAAb;AACR;;AACQ,gBAAA2b,SAAA,GAA2C,EAA3C;AACR;;AACQ,gBAAAg5B,YAAA,GAAyC,EAAzC;AAGA,gBAAAC,gBAAA,GAA4B,KAA5B;AA4CJ,gCAAAnzB,cAAA,CAAekkB,UAAf,CAA0BzN,eAA1B;AACA,YAAMnqB,IAAI,GAAG,IAAI,UAAA0H,MAAJ,CAAW;AAAClR,cAAI,EAAE,cAAAswC,OAAA,CAAQ9mC;AAAf,SAAX,CAAb;AACA,YAAM+mC,KAAK,GAAG,UAAA9mC,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB2+B,UAApB,CAA+B/0B,IAA/B,EAAqC,KAArC,uBACIA,IAAI,CAAClI,UAAL,CAAgB,OAAhB,CADJ,IAERkI,IAAI,CAAClI,UAAL,CAAgB,oBAAhB,CAFN;AAGA,YAAM0Z,QAAQ,GAAG,QAAKtF,GAAL,CAAS,UAAT,KAAwB,SAAzC;AACA,gBAAKsF,QAAL,GAAgBA,QAAhB;AACA,eAAAhW,GAAA,CAAI,MAAJ,YAAe,cAAAsrC,OAAA,CAAQE,MAAvB,GAAiC,IAAjC,EAAuC,OAAvC,EAAgD,IAAhD,EAAsDx1B,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAE5L,WAAV,EAAtD;AACA,eAAApK,GAAA,CAAI,KAAJ,YAAc,cAAAsrC,OAAA,CAAQG,IAAtB,uBAAuCF,KAAvC,GAAgD,IAAhD,EAAsD,OAAtD,EAA+D,IAA/D,EAAqEv1B,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAE5L,WAAV,EAArE;;AACA,gBAAKoJ,IAAL;;AAX0C;AAY7C;AApDD;;;;;;;;AAOA;+BACuBzc,I,EAAY;AAC/B,cAAI,CAAC,KAAKq0C,YAAL,CAAkBr0C,IAAlB,CAAL,EAA8B;AAC1B,iBAAKqb,SAAL,CAAerb,IAAf,IAAuB,IAAI,OAAAN,eAAJ,CAAuB,IAAvB,CAAvB;AACA,iBAAK20C,YAAL,CAAkBr0C,IAAlB,IAA0B,KAAKqb,SAAL,CAAerb,IAAf,EAAqBuc,YAArB,EAA1B;AACH;;AACD,iBAAO,KAAK83B,YAAL,CAAkBr0C,IAAlB,CAAP;AACH;AAED;;;;6BACeA,I,EAAcmH,K,EAAQ;AACjC,cAAI,CAAC,KAAKktC,YAAL,CAAkBr0C,IAAlB,CAAL,EAA8B;AAC1B,iBAAKqb,SAAL,CAAerb,IAAf,IAAuB,IAAI,OAAAN,eAAJ,CAAuB,IAAvB,CAAvB;AACA,iBAAK20C,YAAL,CAAkBr0C,IAAlB,IAA0B,KAAKqb,SAAL,CAAerb,IAAf,EAAqBuc,YAArB,EAA1B;AACH;;AACD,eAAKlB,SAAL,CAAerb,IAAf,EAAqBoS,IAArB,CAA0BjL,KAA1B;AACH;;;8BAEqBnH,I,EAAY;AAC9B,iBAAO,CAAC,KAAKq0C,YAAL,CAAkBr0C,IAAlB,CAAD,GAA2B,IAA3B,GAAkC,KAAKqb,SAAL,CAAerb,IAAf,EAAqBS,QAArB,EAAzC;AACH;AAED;;;;;AAyBA;;;+BAGoB;;;;;;;;AAChB,wBAAI,KAAKkZ,GAAL,CAAS,OAAT,CAAJ,EAAuB;AACnBnQ,4BAAM,CAACC,KAAP,GAAe,IAAf;AACH;;AACD,wBAAI,CAAJ,KAAI,KAAKkQ,GAAL,CAAS,KAAT,OAAe,IAAf,IAAe,aAAf,GAAe,MAAf,GAAe,GAAE3Z,IAArB,EAA2B;AACvB,2BAAKm0C,SAAL,GAAiB,KAAKx6B,GAAL,CAAS,KAAT,EAAgB3Z,IAAjC;AACH;;AACD,2BAAAiJ,GAAA,CAAI,UAAJ,EAAgB,8BAAhB;;AACA,yBAAKxJ,YAAL,CAAkB2S,IAAlB,CAAuB,IAAvB;;;;;;;;;AACH;AAED;;;;;AAiBA;;;;4BAIWzS,G,EAAW;AAClB,cAAMkK,IAAI,GAAGlK,GAAG,CAACsG,KAAJ,CAAU,GAAV,CAAb;;AACA,cAAI4D,IAAI,CAAC,CAAD,CAAJ,KAAY,KAAhB,EAAuB;AACnB,mBAAO,OAAAD,eAAA,CAAgBC,IAAhB,EAAsB,KAAKuT,QAAL,CAAc5C,IAApC,CAAP;AACH;;AACD,cAAMm6B,iBAAiB,GAAG,KAAKP,UAAL,CAAgB3zC,QAAhB,EAA1B;;AALkB,uDAMKk0C,iBANL;AAAA;;AAAA;AAMlB,sEAA0C;AAAA,kBAA/B9K,QAA+B;AACtC,kBAAM1iC,KAAK,GAAG,OAAAyC,eAAA,CAAgBC,IAAI,CAACE,KAAL,CAAW,CAAX,CAAhB,EAA+B8/B,QAA/B,CAAd;;AACA,kBAAI1iC,KAAK,IAAI,IAAb,EAAmB;AACf,uBAAOA,KAAP;AACH;AACJ;AAXiB;AAAA;AAAA;AAAA;AAAA;;AAYlB,iBAAO,OAAAyC,eAAA,CAAgBC,IAAhB,EAAsB,KAAKuT,QAAL,CAAc5C,IAApC,CAAP;AACH;;;0BAnGoBrT,K,EAAkB;AACnC,eAAKitC,UAAL,CAAgBhiC,IAAhB,CAAqBjL,KAArB;AACH;;;4BAyBkB;AACf,iBAAO,KAAK4T,MAAL,CAAYwE,QAAZ,EAAP;AACH,S;0BAEgBpY,K,EAAe;AAC5B,eAAK4T,MAAL,CAAYuE,QAAZ,WAAwBnY,KAAxB,gBAAmC,KAAKgtC,SAAxC;AACH;;;4BAiCqB;AAClB,iBAAO,KAAKA,SAAZ;AACH;;;4BAEsB;AACnB,iBAAO,KAAKl1B,QAAL,KAAkB,WAAzB;AACH;;;0BAE0B9X,K,EAAgB;AACvC,eAAKmtC,gBAAL,GAAwBntC,KAAxB;AACH,S;4BAE4B;AAC1B,iBAAO,KAAKmtC,gBAAZ;AACF;;;;MAhGgC,OAAAj1C,S;;AAHrC;;;uBAGau4B,e,EAAe,qB,EAAA,YAoDJ,QAAAqc,cApDI,C;AAoDU,K;;;aApDzBrc,e;AAAe,eAAfA,eAAe,K;AAAA,kBAFZ;;;;;2BAEHA,e,EAAe;cAH3B,OAAA9gB,UAG2B;eAHhB;AACR6I,oBAAU,EAAE;AADJ,S;AAGgB,Q;;;;gBAqDMu0B,c;AAAc;kBAD/B,OAAAU,MAC+B;mBADxB,QAAAX,c;AACwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/HhD;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACFA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAMA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAkDa,YAAAY,eAAA,GAA6C;AACtD7vC,cAAQ,EAAE;AAD4C,KAA7C;AAoDb;;;;;;AAKA,QAAYuf,aAAZ;;AAAA,eAAYA,aAAZ,EAAyB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACH,KAnBD,EAAYA,aAAa,GAAb,QAAAA,aAAA,aAAAA,aAAA,GAAa,EAAb,CAAZ;;AAqBA,QAAYuwB,eAAZ;;AAAA,eAAYA,eAAZ,EAA2B;AACvB;AACA;AACA;AACA;AACA;AACA;AACH,KAPD,EAAYA,eAAe,GAAf,QAAAA,eAAA,aAAAA,eAAA,GAAe,EAAf,CAAZ;;AAQA,QAAYC,WAAZ;;AAAA,eAAYA,WAAZ,EAAuB;AACnB;AACA;AACA;AACA;AACA;AACA,8DANmB,CAOnB;;AACA;AACA;AACA;AACH,KAXD,EAAYA,WAAW,GAAX,QAAAA,WAAA,aAAAA,WAAA,GAAW,EAAX,CAAZ;;AAaA,QAAMC,WAAW,GAAG,EAApB;;QAEa3tB,K;;;;;AAkET,uBAAoC;AAAA;;AAAA,YAAxBxH,QAAwB,uEAAJ,EAAI;;AAAA;;;;AAChC,sCAAMA,QAAN;AAtDJ;;AACO,gBAAAgY,YAAA,GAAwB,KAAxB;AACP;;AACO,gBAAAod,0BAAA,GAAsC,KAAtC;AAOP;;;AAEO,gBAAAC,UAAA,GAAuB,EAAvB;AAEP;;;AAEO,gBAAAC,SAAA,GAAsB,EAAtB,CAqC6B,CAGhC;;AACA,YAAM7zB,eAAe,GAAG,wBAAAH,cAAA,CAAeC,UAAf,CAA0B,mBAAAwW,eAA1B,CAAxB;AACA,gBAAKC,YAAL,GAAoB,CAAC,EAACvW,eAAe,SAAf,IAAAA,eAAe,WAAf,GAAe,MAAf,GAAAA,eAAe,CAAEQ,SAAlB,CAArB;AACA,gBAAKmzB,0BAAL,GAAkC,CAAA3zB,eAAe,SAAf,IAAAA,eAAe,WAAf,GAAe,MAAf,GAAAA,eAAe,CAAE8zB,eAAjB,KAAoC,KAAtE;AAEA,YAAMC,iBAAiB,GAAGx1B,QAAQ,CAAC7f,IAAT,IAAiB6f,QAAQ,CAACxK,KAA1B,IAAmC,cAA7D;AACA,YAAMigC,eAAe,GAAG;AACpBC,mBAAS,EAAEF;AADS,SAAxB;AAGA;;;;;;;;;AAQA;;;;;;;;AAOA,gBAAKj4B,QAAL,GAAgByC,QAAQ,CAACzC,QAAT,IAAqBk4B,eAArC;AACA,gBAAK5pC,OAAL,GAAemU,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAEnU,OAAzB,CA5BgC,CA6BhC;;AACA,gBAAK0c,QAAL,GAAgBvI,QAAQ,CAACuI,QAAT,IAAqB,KAArC;AACA,gBAAKqC,QAAL,GAAgB5K,QAAQ,CAAC4K,QAAT,IAAqB,CAArC;AACA,gBAAK+qB,WAAL,GAAmB31B,QAAQ,CAAC21B,WAA5B;AACA,gBAAKhuB,KAAL,GAAa3H,QAAQ,CAAC2H,KAAT,YAA0BxW,KAA1B,GAAkC6O,QAAQ,CAAC2H,KAA3C,GAAmD,EAAhE,CAjCgC,CAkChC;;AACA,gBAAKiuB,QAAL,GAAgB51B,QAAQ,CAAC41B,QAAT,IAAqB,EAArC;AACA,gBAAKC,cAAL,GAAsB,OAAA71B,QAAQ,CAACzC,QAAT,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAEs4B,cAAnB,KAAqC,EAA3D;AAEN,gBAAKC,SAAL,GAAiB91B,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAE81B,SAA3B;AACM,gBAAKC,WAAL,GAAmB/1B,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAE+1B,WAA7B;AACA,gBAAKlK,MAAL,GAAc,CAAA7rB,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAE6rB,MAAV,MAAgB,MAAI7rB,QAAQ,CAACzC,QAAb,MAAqB,IAArB,IAAqB,aAArB,GAAqB,MAArB,GAAqB,GAAEsuB,MAAvC,KAAiD,EAA/D;AACA,gBAAKwJ,UAAL,GAAkB,CAAAr1B,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAEq1B,UAAV,KAAwB,EAA1C;AACA,gBAAKC,SAAL,GAAiB,CAAAt1B,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAEs1B,SAAV,KAAuB,EAAxC;AA1CgC;AA4CnC;AA7DD;;;;;;AA2MA;;;gCAGY;AACR,iBAAO,IAAI9tB,KAAJ,CAAU,IAAV,CAAP;AACH;AAED;;;;;;oCAGgB;AACZ,cAAMD,KAAK,GAAG,MAAH,OAAG,CAAH,EAAG,EAAK,IAAL,CAAd;AACAA,eAAK,CAAChK,QAAN,CAAepJ,QAAf,GAA0B,EAA1B,CAFY,CAEkB;;AAC9B,iBAAO,IAAIqT,KAAJ,CAAU,MAAD,OAAC,CAAD,kBAAMD,KAAN,CAAC,EAAU;AAAElR,cAAE,EAAE,IAAN;AAAYb,iBAAK,EAAE;AAAnB,WAAV,CAAV,CAAP;AACH;AAED;;;;;;;iCAIgByR,O,EAAgC;AAC5C,cAAI,CAAC,KAAK3G,QAAN,IAAkB,CAAC,KAAKmP,KAA5B,EAAmC;AAC/B,mBAAO;AAAEzG,0BAAY,EAAE,IAAhB;AAAsBf,kBAAI,EAAE;AAA5B,aAAP;AACH;;AAED,cAAMP,QAAQ,GAAG,KAAKsQ,YAAL,GAAoB,KAAKvI,KAAL,CAAW+c,WAA/B,GAA6C,KAAK9kB,QAAnE;;AAEA,cAAI,CAACA,QAAL,EAAe;AACX,mBAAO;AAAEsB,0BAAY,EAAE,IAAhB;AAAsBf,kBAAI,EAAE;AAA5B,aAAP;AACH;;AAT2C,cAUpCljB,MAVoC,GAUTkiB,OAVS,CAUpCliB,MAVoC;AAAA,cAU5BI,QAV4B,GAUT8hB,OAVS,CAU5B9hB,QAV4B;AAAA,cAUlBuY,IAVkB,GAUTuJ,OAVS,CAUlBvJ,IAVkB;AAW5C,cAAMkK,KAAK,GAAe,kBAAAC,aAAA,CAAc;AACpCja,gBAAI,EAAE7I,MAAM,CAACgJ,EADuB;AAEpC5I,oBAAQ,EAARA,QAFoC;AAGpCoiB,iBAAK,EAAE,IAH6B;AAIpCvK,gBAAI,EAAEU,IAJ8B;AAKpCkK,iBAAK,EAAEF,QAAQ,CAACI;AALoB,WAAd,CAA1B;AAOA,iBAAOF,KAAP;AACH;AAED;;;;;;;kCAIiBX,O,EAAkC;AAC/C,cAAMW,KAAK,GAAG,KAAKouB,QAAL,CAAc/uB,OAAd,CAAd;AACA,iBAAO,CAACW,KAAK,CAACoB,YAAd;AACH;AAED;;;;;;iCAGa;AACT,iBAAO,MAAP,OAAO,CAAP,oFAAO,EAAmB;AAAEzL,oBAAQ,EAAE,MAAF,OAAE,CAAF,kBAAO,KAAKA,QAAZ,CAAE,EAAkB;AAAEpJ,sBAAQ,EAAE;AAAZ,aAAlB,CAAZ;AAAgDtI,mBAAO,EAAE,MAAF,OAAE,CAAF,EAAE,EAAK,KAAKA,OAAV,CAAzD;AAA8EypC,qBAAS,qBAAO,KAAKA,SAAZ;AAAvF,WAAnB,CAAP;AACH;;;4BAjQwB;AACrB,iBAAO,wBAAAh0B,cAAA,CAAeC,UAAf,CAA0B,eAAAmrB,QAA1B,CAAP;AACH;AAED;;;;4BACsB;AAAA;;;;AAClB,iBAAO,CAAP,KAAO,KAAKpsB,QAAL,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAEpH,SAAF,CAAYtR,IAAZ,CAAiB,UAAC2kC,GAAD,EAAS;AAC1C,mBAAO,OAAI,CAAC5kB,KAAL,CAAWzJ,QAAX,CAAoBquB,GAAG,CAACl2B,EAAxB,CAAP;AACH,WAFmB,CAApB;AAGH;AAED;;;;4BACsB;;;AAClB,iBAAO,CAAP,KAAO,KAAKqR,QAAL,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAE1e,QAAtB;AACH;AAgDD;;;;;;;4BAIsB;AAClB,iBAAO,KAAK7I,IAAL,IAAa,EAApB;AACH;AAED;;;;;;;;4BAKqB;AACjB,iBAAO,KAAK41C,WAAL,IAAoB,KAAK51C,IAAzB,IAAiC,EAAxC,CADiB,CAC2B;AAC/C;;;4BAEyB;AACtB,iBAAO,KAAKunB,QAAL,aAAmB,KAAKA,QAAL,CAAc6G,OAAjC,eAA6C,KAAK7G,QAAL,CAAc7N,IAA3D,IAAoE,EAA3E;AACH;AAED;;;;AAIA;AACA;AACA;;AAEA;;;;4BAC+B;;;AAC3B,cAAO0jB,QAAQ,SAAI,KAAK1xB,OAAT,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAE0xB,QAAjC;AACA,iBAAOA,QAAQ,GAAG,UAAH,GAAgB,UAA/B,CAF2B,CAEgB;AAC9C;AAED;;;;;;;;;4BAMoB;;;AAChB,iBAAO,CAAP,WAAO,KAAKhgB,QAAZ,MAAoB,IAApB,IAAoB,aAApB,GAAoB,MAApB,GAAoB,GAAEgV,SAAf,MAAwB,IAAxB,IAAwB,aAAxB,GAAwB,EAAxB,GAA4B,KAAnC;AACH;;;4BAE0B;;;AACvB,cAAM0jB,KAAK,GAAG,IAAI,UAAA3gC,MAAJ,CAAW;AAAElR,gBAAI,EAAE,QAAA2C,QAAA,CAASwkB,GAAT,EAAR;AAAwBK,uBAAW,EAAE,KAArC;AAA4CC,uBAAW,EAAE,KAAK7iB;AAA9D,WAAX,EAAqF+E,EAAnG;AACA,cAAMmoC,eAAe,GAAG,CAAH,WAAG,KAAK34B,QAAR,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAEpJ,QAAf,MAAuB,IAAvB,IAAuB,aAAvB,GAAuB,MAAvB,GAAuB,GAAEnJ,MAAF,CAAU,UAAAmrC,GAAG,EAAI;AAC5D,gBAAMC,UAAU,GAAG,IAAI,UAAA9gC,MAAJ,CAAW;AAAElR,kBAAI,EAAE+xC,GAAG,CAACjgC,WAAJ,GAAkB,IAA1B;AAAgC0V,yBAAW,EAAE,KAA7C;AAAoDC,yBAAW,EAAEsqB,GAAG,CAACntC;AAArE,aAAX,EAA2F+E,EAA9G;AACA,gBAAMsoC,QAAQ,GAAG,IAAI,UAAA/gC,MAAJ,CAAW;AAAElR,kBAAI,EAAE+xC,GAAG,CAACvgC,SAAJ,GAAgB,IAAxB;AAA8BgW,yBAAW,EAAE,KAA3C;AAAkDC,yBAAW,EAAEsqB,GAAG,CAACntC;AAAnE,aAAX,EAAyF+E,EAA1G;AACC,mBAAOqoC,UAAU,IAAIH,KAAd,IAAuBI,QAAQ,IAAIJ,KAA1C;AACJ,WAJ8C,CAA/C,CAFuB,CAOvB;AACA;;AACA,iBAAO,CAAC,CAACC,eAAe,CAAC5vC,MAAzB;AACH;AAED;;;;4BAC0B;;;AACtB,iBAAO,CAAP,KAAO,KAAKiX,QAAL,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAEumB,eAAtB;AACH;AAED;;;;4BACmB;yBAAA,CACf;;;AACA,cAAI,CAAC,KAAK9L,YAAN,IAAsB,CAAC,KAAKod,0BAAhC,EAA4D;AACxD,mBAAOD,WAAP;AACH;;AAED,cAAI,CAAJ,WAAI,KAAK53B,QAAT,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAEpJ,QAAf,MAAuB,IAAvB,IAAuB,aAAvB,GAAuB,MAAvB,GAAuB,GAAE7N,MAA7B,EAAqC;AACjC;;;;;;;;AAQA,gBAAMgwC,iBAAiB,GAAI,IAAI9uB,KAAJ,CAAU,KAAKhH,MAAL,EAAV,CAA3B;AACA,mBAAO,CAAP,KAAO,KAAKjD,QAAL,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAEpJ,QAAF,CAAWlK,GAAX,CAAe,UAAAuC,CAAC,EAAI;AACpCA,eAAC,CAAC4qB,IAAF,GAASkf,iBAAT;AACA,qBAAO9pC,CAAP;AACH,aAHmB,CAApB;AAIH;;AACD,iBAAO2oC,WAAP;AACH;AAED;;;;;;;4BAIuB;;;AACnB,iBAAO,YAAKtpC,OAAL,MAAY,IAAZ,IAAY,aAAZ,GAAY,MAAZ,GAAY,GAAEmvB,QAAd,MAAsB,MAAI,KAAKzd,QAAT,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAEyd,QAAzC,KAAqD,KAA5D;AACH;AAEA;;;;;;4BAGuB;qBAAA,CACpB;;;AACA,cAAMub,QAAQ,GAAGplC,KAAK,CAACsB,OAAN,CAAc,KAAKqjC,SAAnB,IAAiC,KAAKA,SAAtC,GAAkD,CAAC,KAAKA,SAAN,CAAnE;AACA,cAAMF,QAAQ,GAAG,6BACN,KAAKA,QAAL,CAAcxvC,KAAd,CAAoB,GAApB,CADM,sBAEN,CAAH,KAAG,KAAKyvC,cAAL,MAAmB,IAAnB,IAAmB,aAAnB,GAAmB,MAAnB,GAAmB,GAAEzvC,KAAF,CAAQ,GAAR,CAFb,sBAINmwC,QAJM,sBAKN,SAAI,IAAJ,aAAI,MAAJ,GAAI,MAAJ,QAAMlB,UALA,sBAMN,SAAI,IAAJ,aAAI,MAAJ,GAAI,MAAJ,QAAMC,SANA,IAQT,CAAC,CAAD,KAAC,KAAKzpC,OAAL,MAAY,IAAZ,IAAY,aAAZ,GAAY,MAAZ,GAAY,GAAE2qC,aAAf,KAAiC9xB,aAAa,CAACW,YAA/C,IAA+Dhf,SARtD,GAWX2E,MAXW,CAWJ,UAAAe,CAAC;AAAA,mBAAI,CAAC,CAACA,CAAN;AAAA,WAXG,EAWM9B,GAXN,CAWU,UAAA8B,CAAC;AAAA,mBAAIA,CAAC,CAACD,WAAF,EAAJ;AAAA,WAXX,CAAjB,CAHoB,CAepB;;AACA,oCAAY,IAAI2qC,GAAJ,CAAQb,QAAR,CAAZ;AACH;AAED;;;;4BACgB;AACZ,cAAM5jB,OAAO,GAAG,wBAAA1Q,cAAA,CAAeC,UAAf,CAA0B,eAAA0qB,YAA1B,CAAhB;AACA,iBAAO,CAACja,OAAO,GAAGA,OAAO,CAACma,WAAR,CAAoB,KAAKxkB,KAAzB,CAAH,GAA4C,IAApD,KAA6D,IAAI,eAAAukB,aAAJ,CAAkB,EAAlB,CAApE;AACH;AAED;;;;;;4BAGkC;;;AAC9B,iBAAO,YAAK3uB,QAAL,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAEm5B,uBAAf,KAA0C,EAAjD;AACH;;;4BAE8B;;;AAC3B,cAAG,SAAI,IAAJ,aAAI,MAAJ,GAAI,MAAJ,QAAMA,uBAAT,EAAkC;AAC9B,mBAAO,CAAP,KAAO,SAAI,IAAJ,aAAI,MAAJ,GAAI,MAAJ,QAAMA,uBAAN,MAA6B,IAA7B,IAA6B,aAA7B,GAA6B,MAA7B,GAA6B,GAAE1rC,MAAF,CAAS,UAAAqmC,MAAM;AAAA,qBAAIA,MAAM,CAAC9e,SAAX;AAAA,aAAf,EAAqCjsB,MAAzE;AACH;AACJ;;;4BAE0B;AACvB,iBAAO,SAAI,IAAJ,aAAI,MAAJ,GAAI,MAAJ,QAAMowC,uBAAN,CAA8BpwC,MAArC;AACH;;;;MA1PsB,iBAAAyZ,a;;AAA3B;;;;;;;;;;;;;;;;;;;;AChKA;AAAA;AAAA;;AAEA,aAAgB42B,0BAAhB,CAA2C1vB,OAA3C,EAA6E;AACzE,UAAIzP,KAAK,GAAY,EAArB;;AACA,UAAIyP,OAAJ,EAAa;AACTzP,aAAK,GAAG,MAAH,OAAG,CAAH,EAAG,EAAKyP,OAAL,CAAR;;AACA,YAAIA,OAAO,CAACliB,MAAZ,EAAoB;AAChB,cAAMX,IAAI,GAAG6iB,OAAO,CAACliB,MAAR,CAAe+I,YAAf,CAA4B,QAA5B,CAAb;AACA0J,eAAK,CAAC8d,cAAN,GAAuBlxB,IAAI,CAAC0R,OAA5B,CAFgB,CAEqB;;AACrC0B,eAAK,CAAC+d,YAAN,GAAqBnxB,IAAI,CAACa,QAAL,CAAc;AAAEJ,mBAAO,EAAEoiB,OAAO,CAAC9hB,QAAR,IAAoB;AAA/B,WAAd,EAAmD0Q,aAAnD,CAAiE;AAAEC,mBAAO,EAAE;AAAX,WAAjE,EAAiFA,OAAtG;AAEA,cAAImR,OAAO,CAACnI,KAAZ,EAAmBtH,KAAK,CAACsH,KAAN,GAAcmI,OAAO,CAACnI,KAAtB;AACnB,cAAImI,OAAO,CAACkL,SAAZ,EAAuB3a,KAAK,CAAC2a,SAAN,GAAkBlL,OAAO,CAACkL,SAA1B;AAEvB,iBAAO3a,KAAK,CAACzS,MAAb;AACA,iBAAOyS,KAAK,CAACrS,QAAb;AACH;;AAED,YAAI,CAAC8hB,OAAO,CAAC4D,YAAb,EAA2B,OAAOrT,KAAK,CAACqT,YAAb;AAE3B,YAAI5D,OAAO,CAAC2vB,aAAZ,EAA2Bp/B,KAAK,CAACo/B,aAAN,GAAsB3vB,OAAO,CAAC2vB,aAA9B;AAC3Bp/B,aAAK,GAAG,mBAAAqkB,sBAAA,CAAuBrkB,KAAvB,CAAR;AACH;;AACD,aAAOA,KAAP;AACH;;AAtBD;AAwBA;;;;;;AAKA,aAAgBlL,IAAhB,CAAqBqP,KAArB,EAAmCnX,MAAnC,EAAyE;AAAA,UAAvBqyC,IAAuB,uEAAJ,EAAI;AACrE,UAAMtK,GAAG,GAAGsK,IAAI,CAACjvC,IAAL,CAAU,UAAA2kC,GAAG;AAAA,eAAI5wB,KAAK,CAACgM,KAAN,CAAYzJ,QAAZ,CAAqBquB,GAAG,CAACl2B,EAAzB,CAAJ;AAAA,OAAb,CAAZ;AACA,UAAMygC,KAAK,GAAGD,IAAI,CAACjvC,IAAL,CAAU,UAAA2kC,GAAG;AAAA,eAAI/nC,MAAM,CAACmjB,KAAP,CAAazJ,QAAb,CAAsBquB,GAAG,CAACl2B,EAA1B,CAAJ;AAAA,OAAb,CAAd;;AACA,UAAIk2B,GAAJ,EAAS;AACL,YAAIA,GAAG,KAAKuK,KAAZ,EAAmB;AACf,iBAAQvK,GAAG,CAACpsC,IAAL,CAAWsM,aAAX,CAAyBqqC,KAAK,SAAL,IAAAA,KAAK,WAAL,GAAK,MAAL,GAAAA,KAAK,CAAE32C,IAAhC,CAAP;AACH;;AACD,YAAMsuC,UAAU,GAAG,mBAAIlC,GAAG,CAACkC,UAAR,EAAoB/7B,OAApB,EAAnB;;AAJK,qDAKiB+7B,UALjB;AAAA;;AAAA;AAKL,oEAAkC;AAAA,gBAAvBpuB,OAAuB;;AAC9B,gBAAIA,OAAO,KAAK,GAAhB,EAAqB;AACjB;AACH;;AACD,gBAAM02B,UAAU,GAAGp7B,KAAK,CAACgM,KAAN,CAAYngB,OAAZ,CAAoB6Y,OAApB,KAAgC,CAAnD;AACA,gBAAM22B,UAAU,GAAGxyC,MAAM,CAACmjB,KAAP,CAAangB,OAAb,CAAqB6Y,OAArB,KAAiC,CAApD;;AACA,gBAAI02B,UAAU,IAAI,CAACC,UAAnB,EAA+B;AAC3B,qBAAO,CAAP;AACH,aAFD,MAEO,IAAIA,UAAU,IAAI,CAACD,UAAnB,EAA+B;AAClC,qBAAO,CAAC,CAAR;AACH;AACJ;AAhBI;AAAA;AAAA;AAAA;AAAA;AAiBR;;AACD,aAAOp7B,KAAK,CAACxb,IAAN,CAAWsM,aAAX,CAAyBjI,MAAM,CAACrE,IAAhC,CAAP;AACH;;AAtBD;;;;;;;;;;;;;;;;;;;;;;;;ACtCA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;AAIA,QAAI82C,UAAU,GAAG,EAAjB;;AAEA,aAAgB9c,SAAhB,CAA0B9jB,EAA1B,EAAsC;AAClC,aAAO4gC,UAAU,CAACrvC,IAAX,CAAgB,UAACgU,CAAD;AAAA,eAAOA,CAAC,CAACvF,EAAF,KAASA,EAAT,IAAeuF,CAAC,CAACpG,KAAF,KAAYa,EAAlC;AAAA,OAAhB,CAAP;AACH;;AAFD;;QAOa6gC,a;;;;;AACT,6BACc77B,SADd,EAEYkY,IAFZ,EAGYjT,QAHZ,EAIImB,eAJJ,EAIoC;AAAA;;AAAA;;AAGhC,sCAAMpG,SAAN,EAAiBoG,eAAjB;AANU,gBAAApG,SAAA,GAAAA,SAAA;AACF,gBAAAkY,IAAA,GAAAA,IAAA;AACA,gBAAAjT,QAAA,GAAAA,QAAA;AAqHZ;;;;;;;AAMO,gBAAA62B,UAAA,GAAa;AAAA,cAAC3/B,KAAD,uEAAkB,EAAlB;AAAA,gKAAoEA,KAApE;AAAA,SAAb;;AAOA,gBAAA4d,YAAA,GAAe;AAAA,cAAC5d,KAAD,uEAAkB,EAAlB;AAAA,6JAAkFA,KAAlF;AAAA,SAAf;;AACA,gBAAA4/B,WAAA,GAAc,UAAC/gC,EAAD,EAAa2L,SAAb;AAAA,cAAiCyB,uBAAjC,uEAAoE,KAApE;AAAA,cAA2EnB,YAA3E,uEAAmG,EAAnG;AAAA,8JAAoKjM,EAApK,EAAwK2L,SAAxK,EAAmLyB,uBAAnL,EAA4MnB,YAA5M;AAAA,SAAd;;AACA,gBAAA+0B,iBAAA,GAAoB,UAAC3zB,WAAD,EAAsB1B,SAAtB;AAAA,cAA0CyB,uBAA1C,uEAA6E,KAA7E;AAAA,cAAoFnB,YAApF,uEAA4G,EAA5G;AAAA,qKAAgLoB,WAAhL,EAA6L1B,SAA7L,EAAwMyB,uBAAxM,EAAiOnB,YAAjO;AAAA,SAApB;;AA/HH,gCAAAhB,cAAA,CAAekkB,UAAf,CAA0B,cAAAhe,KAA1B;AACA,gBAAK1F,KAAL,GAAa,OAAb;AACA,gBAAKC,UAAL,GAAkB,OAAlB;;AACA,gBAAKH,QAAL,GAAgB,UAACrV,CAAD,EAAIC,CAAJ;AAAA,iBACZ,CAACD,CAAC,CAAC8J,EAAF,CAAK5J,aAAL,CAAmBD,CAAC,CAAC6J,EAArB,CAAD,IAA6B,CAAC9J,CAAC,CAACiJ,KAAF,CAAQ/I,aAAR,CAAsBD,CAAC,CAACgJ,KAAxB,CADlB;AAAA,SAAhB;;AAEA,gBAAKqM,YAAL,GAAoB,UAACtV,CAAD,EAAc;AAC9B,cAAMggC,GAAG,GAAG,QAAKhZ,IAAL,CAAU7L,QAAtB;AACA,iBAAOnb,CAAC,CAACkjB,KAAF,CAAQ+c,WAAR,KAAwBD,GAAG,CAACl2B,EAAnC;AACH,SAHD;;AAIA,gBAAKkd,IAAL,CAAU5W,WAAV,CACKzH,IADL,CACU,YAAAyG,KAAA,CAAM,UAACC,CAAD;AAAA,iBAAOA,CAAP;AAAA,SAAN,CADV,EAEKvZ,SAFL,CAEe;AAAA,iBAAM,QAAKua,IAAL,EAAN;AAAA,SAFf;;AAbgC;AAgBnC;;;;gCAEgE;AAAA;;AAAA,cAA9CpF,MAA8C,uEAA7B,EAA6B;;AAAA,cAAzB8/B,OAAyB,uEAAP,KAAO;;;;;;;;;;;;;;;;;AAChD,2BAAM,OAAM9/B,KAAN,CAAW,IAAX,CAAW,IAAX,EAAYA,MAAZ,CAAN;;;AAAPlV,wB;;AACN,wBAAMkV,MAAK,CAACzX,cAAN,CAAqB,OAArB,KAAiCyX,MAAK,CAAC+K,KAAN,KAAgB,KAAlD,IAA4D,CAACnR,MAAM,CAACpH,IAAP,CAAYwN,MAAZ,EAAmBlR,MAAhF,IAA0FgxC,OAA/F,EAAwG;AACpG,2BAAKvzC,GAAL,CAAS,MAAT,EAAiBzB,IAAjB;AACA20C,gCAAU,GAAG30C,IAAb;AACH;;uDACMA,I;;;;;;;;;AACV;;;8CAE4BA,I,EAAe;AACxC,iBAAOA,IAAI,CAAC0I,MAAL,CAAY,UAACvI,CAAD,EAAO;;;AACtB,gBAAI,CAAJ,KAAIA,CAAC,CAACi0C,uBAAF,MAAyB,IAAzB,IAAyB,aAAzB,GAAyB,MAAzB,GAAyB,GAAEpwC,MAA/B,EAAuC,OAAO7D,CAAP,CADjB,CAC2B;;AACjD,mBAAOA,CAAC,CAAC8vB,SAAT;AACH,WAHM,CAAP;AAIH;AAED;;;;;;;kCAKItL,O,EACAwe,Q,EACsB;AAAA;;AAAA,cAAtBz6B,MAAsB,uEAAJ,IAAI;;AAEtB,cAAI,CAACic,OAAL,EAAc;AACV,kBAAM,IAAIzmB,KAAJ,CAAU,4CAAV,CAAN;AACH;;AAED,cAAM+qB,GAAG,GAAG,UAAA1d,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAZ;;AACA,cAAI,CAACijB,OAAO,CAACliB,MAAb,EAAqB;AACjBkiB,mBAAO,CAACliB,MAAR,GAAiBwmB,GAAG,CAACzd,YAAJ,CAAiB,QAAjB,CAAjB;AACH;;AAED,cAAImZ,OAAO,CAAC2vB,aAAR,KAA0BvwC,SAA9B,EAAyC;AACrC4gB,mBAAO,CAAC2vB,aAAR,GAAwB,IAAxB;AACH;;AAED,cAAM92C,GAAG,uBAAgBmnB,OAAO,CAAC5Q,EAAR,GAAa4Q,OAAO,CAAC5Q,EAArB,GAA0B,EAA1C,cACLovB,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAAA,QAAA,GAAY,EADP,CAAT;;AAGA,cAAI,CAAC,KAAK9jB,SAAL,CAAe7hB,GAAf,CAAL,EAA0B;AACtB,iBAAK6hB,SAAL,CAAe7hB,GAAf,IAAsB,IAAI2gB,OAAJ,CAAY,UAACC,OAAD,EAAUC,MAAV,EAAqB;AACnD,kBAAM+kB,OAAO,GAAG,SAAVA,OAAU,CAACpjC,IAAD,EAAmB;AAC/B,uBAAO,OAAI,CAACqf,SAAL,CAAe7hB,GAAf,CAAP;AACA4gB,uBAAO,CAAC1V,MAAM,GAAG,OAAI,CAACusC,qBAAL,CAA2Bj1C,IAA3B,CAAH,GAAsCA,IAA7C,CAAP;AACH,eAHD;;AAIA,kBAAMugB,KAAK,GAAG,SAARA,KAAQ,CAACpU,CAAD,EAAO;AACjBkS,sBAAM,CAAClS,CAAD,CAAN;AACA,uBAAO,OAAI,CAACkT,SAAL,CAAe7hB,GAAf,CAAP;AACH,eAHD;;AAIA,kBAAM0X,KAAK,GAAG,kBAAAm/B,0BAAA,CAA2B1vB,OAA3B,CAAd;;AACA,kBAAIA,OAAO,CAAC5Q,EAAZ,EAAgB;AACZ,uBAAI,CAACshB,IAAL,CAAU1Q,OAAO,CAAC5Q,EAAlB,EAAsBmB,KAAtB,EAA6BsJ,IAA7B,CACI,UAACre,CAAD;AAAA,yBAAOijC,OAAO,CAAC,CAACjjC,CAAD,CAAD,CAAd;AAAA,iBADJ,EAEIogB,KAFJ;AAIH,eALD,MAKO;AACH,uBAAI,CAACrL,KAAL,CAAWA,KAAX,EAAkBsJ,IAAlB,CAAuB4kB,OAAvB,EAAgC7iB,KAAhC;AACH;AACJ,aAlBqB,CAAtB;AAmBH;;AAED,iBAAO,KAAKlB,SAAL,CAAe7hB,GAAf,CAAP;AACH;AAED;;;;;;+BAGoB;;;;;;;;;AACVud,2B,GACF,KAAKiD,QAAL,CAAcxG,GAAd,CAAkB,SAAlB,KAAgC,E;;AACpC,wBAAI,CAACuD,OAAO,CAACoJ,MAAb,EAAqB;AACjBpJ,6BAAO,CAACoJ,MAAR,GAAiB;AACb1K,+BAAO,EAAE,oBADI;AAEb5c,6BAAK,EAAE;AAFM,uBAAjB;;AAIA,2BAAKmhB,QAAL,CAAcvc,GAAd,CAAkB,SAAlB,EAA6BsZ,OAA7B;AACH,qB,CACD;;;AACMyR,0B,GAAS;AACXuG,8BAAQ,EAAE,KAAK9B,IAAL,CAAU7L,QAAV,CAAmBrR;AADlB,qB;;AAGf,2BAAM,KAAKmB,KAAL,CAAWsX,MAAX,EAAmB,IAAnB,WAA+B,YAAM;AACvCzR,6BAAO,CAACoJ,MAAR,GAAiB;AAAE1K,+BAAO,EAAE,oBAAX;AAAiC5c,6BAAK,EAAE;AAAxC,uBAAjB;;AACA,6BAAI,CAACmhB,QAAL,CAAcvc,GAAd,CAAkB,SAAlB,EAA6BsZ,OAA7B;AACH,qBAHK,CAAN;;;AAIAA,2BAAO,CAACoJ,MAAR,GAAiB;AAAE1K,6BAAO,EAAE,oBAAX;AAAiC5c,2BAAK,EAAE;AAAxC,qBAAjB;;AACA,yBAAKmhB,QAAL,CAAcvc,GAAd,CAAkB,SAAlB,EAA6BsZ,OAA7B;;;;;;;;;AACH;AAED;;;;;;;gCAIe2C,Q,EAAiB;AAC5B,iBAAO,IAAI,cAAAwH,KAAJ,CAAUxH,QAAV,CAAP;AACH;;;qCASmB1d,I,EAAM;AACtB,eAAKyB,GAAL,CAAS,MAAT,EAAiBzB,IAAjB;AACA20C,oBAAU,GAAG30C,IAAb;AACH;;;yCAMuB;AACpB,eAAK4c,IAAL,GAAY4B,IAAZ,CAAiB,UAAClF,CAAD;AAAA,mBAAO,IAAP;AAAA,WAAjB;AACH;;;;MA5I8B,eAAA4F,c;;AAHnC;;;uBAGa01B,a,EAAa,+B,EAAA,mC,EAAA,kC,EAAA,+B;AAAA,K;;;aAAbA,a;AAAa,eAAbA,aAAa,K;AAAA,kBAFV;;;;;2BAEHA,a,EAAa;cAHzB,OAAAjgC,UAGyB;eAHd;AACR6I,oBAAU,EAAE;AADJ,S;AAGc,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzB1B;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAOA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAMA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA03B,SAAK,CAAC7kC,IAAN,CAAW,IAAX;AAEA,QAAI8kC,OAAJ;AAWA;;AAEA,aAAgBC,+BAAhB,GAA+C;AAC3C,aAAO,MAAP,OAAO,CAAP;AACIvL,mBAAW,EAAEwL,IAAI,CAACv3C,EAAL,EADjB;AAEIuC,cAAM,EAAEg1C,IAAI,CAACv3C,EAAL,EAFZ;AAGIqvC,wBAAgB,EAAEkI,IAAI,CAACv3C,EAAL,EAHtB;AAIIuc,mBAAW,EAAE,OAAAmG,EAAA,CAAG,IAAH,CAJjB;AAKI4E,gBAAQ,EAAE,IAAI,eAAAglB,QAAJ,CAAakL,oBAAoB,CAAC;AAAEvhC,YAAE,EAAE;AAAN,SAAD,CAAjC,CALd;AAMIgE,4BAAoB,EAAEs9B,IAAI,CAACv3C,EAAL,EAN1B;AAOI+vC,wCAAgC,EAAEwH,IAAI,CAACv3C,EAAL,EAPtC;AAQIy3C,kCAA0B,EAAEF,IAAI,CAACv3C,EAAL;AARhC,OAAO,EASA03C,uBAAuB,CAAC,qBAAD,CATvB,CAAP;AAWH;;AAZD;;AAca,YAAAC,yBAAA,GAA4B;AAAA,aAAgB,MAAD,OAAC,CAAD;AACpDxlB,iBAAS,EAAEolB,IAAI,CAACv3C,EAAL;AADyC,OAAC,EAElD03C,uBAAuB,CAAC,eAAD,CAF2B,CAAhB;AAAA,KAA5B;;AAKA,YAAAE,wBAAA,GAA2B;AAAA,aAAgB,MAAD,OAAC,CAAD;AACnDC,uBAAe,EAAEN,IAAI,CAACv3C,EAAL;AADkC,OAAC,EAEjD03C,uBAAuB,CAAC,cAAD,CAF0B,CAAhB;AAAA,KAA3B;;AAKA,YAAAI,YAAA,GAAe;AAAA,aAAO;AAC/B/jC,gBAAQ,EAAE,OAAA2O,EAAA,CAAG,EAAH,CADqB;AAE/BsR,gBAAQ,EAAE,OAAAtR,EAAA,CAAG,EAAH,CAFqB;AAG/B8R,qBAAa,EAAE,OAAA9R,EAAA,CAAG,EAAH,CAHgB;AAI/BiS,sBAAc,EAAE,OAAAjS,EAAA,CAAG,EAAH,CAJe;AAK/Bq1B,eAAO,EAAER,IAAI,CAACv3C,EAAL,EALsB;AAM/Bg4C,eAAO,EAAET,IAAI,CAACv3C,EAAL,EANsB;AAO/Bi4C,kBAAU,EAAEV,IAAI,CAACv3C,EAAL,EAPmB;AAQ/BqH,WAAG,EAAEkwC,IAAI,CAACv3C,EAAL,EAR0B;AAS/BiN,eAAO,EAAEsqC,IAAI,CAACv3C,EAAL,EATsB;AAU/Bk4C,cAAM,EAAEX,IAAI,CAACv3C,EAAL,EAVuB;AAW/Bm4C,oBAAY,EAAEZ,IAAI,CAACv3C,EAAL,EAXiB;AAY/Bo4C,yBAAiB,EAAEb,IAAI,CAACv3C,EAAL,EAZY;AAa/Bq4C,wBAAgB,EAAEd,IAAI,CAACv3C,EAAL,EAba;AAc/Bs4C,gCAAwB,EAAEf,IAAI,CAACv3C,EAAL,EAdK;AAe/B0zB,qBAAa,EAAE,OAAAhR,EAAA,CAAG,EAAH;AAfgB,OAAP;AAAA,KAAf;;AAkBb,QAAM61B,QAAQ,GAAG;AACbznB,WAAK,EAAE,oBADM;AAEbyW,iBAAW,EAAE,4DAFA;AAGbzU,gBAAU,EAAE,OAHC;AAIb0lB,gBAAU,EAAE;AACRvvC,YAAI,EAAE,KADE;AAERynB,WAAG,EAAE,qBAFG;AAGR+nB,kBAAU,EAAE;AAHJ,OAJC;AASbC,eAAS,EAAE;AACPzvC,YAAI,EAAE,KADC;AAEPynB,WAAG,EAAE,6BAFE;AAGP+nB,kBAAU,EAAE;AAHL,OATE;AAcbE,aAAO,EAAE;AACL95B,cAAM,EAAE,UADH;AAEL+5B,iBAAS,EAAE,IAFN;AAGLC,qBAAa,EAAE,IAHV;AAILC,4BAAoB,EAAE,IAJjB;AAKLC,mBAAW,EAAE;AALR;AAdI,KAAjB;AAuBa,YAAAC,aAAA,GAA+C;AACxDxvC,WAAK,EAAE,IADiD;AAExD0T,cAAQ,EAAE;AACNK,cAAM,EAAE,EADF;AAENM,aAAK,EAAE,OAFD;AAGNT,gBAAQ,EAAE,EAHJ;AAINK,YAAI,EAAE,EAJA;AAKNE,kBAAU,EAAE,KALN;AAMNc,mBAAW,EAAE;AANP,OAF8C;AAUxDw6B,SAAG,EAAEV,QAVmD;AAWxDx6B,UAAI,EAAE,KAXkD;AAYxDiB,cAAQ,EAAE;AAZ8C,KAA/C;;AAeA,YAAAk6B,2BAAA,GAA8B;AAAA,UAACC,SAAD,uEAAyC,EAAzC;AAAA,aAAgD,IAAI,mBAAAxhB,eAAJ,CAAoB;AAAErY,gBAAQ,EAAE;AAAA,iBAAMi4B,IAAI,CAACv3C,EAAL,EAAN;AAAA;AAAZ,OAApB,EACvF,IAAI,mBAAAi0C,cAAJ,CAAmB,MAAD,OAAC,CAAD,kBACX,QAAA+E,aADW,CAAC,EAEZG,SAFY,CAAnB,CADuF,CAAhD;AAAA,KAA9B;AAMb;;;;;AAGa,YAAAC,yBAAA,GAA4B;AAAA,UAACj8B,QAAD,uEAAwC,EAAxC;AAAA,aAAgD;AACrFk8B,eAAO,EAAE,mBAAArF,cAD4E;AAErFD,gBAAQ,EAAE,IAAI,mBAAAE,cAAJ,CAAmB,MAAD,OAAC,CAAD,kBACrB,QAAA+E,aADqB,CAAC,EAEtB77B,QAFsB,CAAnB;AAF2E,OAAhD;AAAA,KAA5B;AAQb;;;;;AAGA,aAAgBm8B,sBAAhB,GAA2F;AAAA,UAApDC,iBAAoD,uEAAJ,EAAI;AACvFlC,aAAO,GAAG;AACNj4B,eAAO,EAAEm4B,IAAI,CAACv3C,EAAL,EADH;AAENqc,cAAM,EAAEk7B,IAAI,CAACv3C,EAAL,EAFF;AAGNw5C,kBAAU,EAAEjC,IAAI,CAACv3C,EAAL,EAHN;AAINy5C,kBAAU,EAAElC,IAAI,CAACv3C,EAAL,EAJN;AAKN05C,qBAAa,EAAEnC,IAAI,CAACv3C,EAAL,EALT;AAMN25C,mBAAW,EAAEpC,IAAI,CAACv3C,EAAL,EANP;AAONgJ,WAAG,EAAEuuC,IAAI,CAACv3C,EAAL,EAPC;AAQN45C,gBAAQ,EAAErC,IAAI,CAACv3C,EAAL,EARJ;AASN65C,oBAAY,EAAEtC,IAAI,CAACv3C,EAAL,EATR;AAUN0Z,WAAG,EAAE69B,IAAI,CAACv3C,EAAL,EAVC;AAWNuC,cAAM,EAAEg1C,IAAI,CAACv3C,EAAL,EAXF;AAYN2D,WAAG,EAAE4zC,IAAI,CAACv3C,EAAL,EAZC;AAaN85C,gBAAQ,EAAE;AAAEv6B,cAAI,EAAE;AAAEgE,iBAAK,EAAE;AAAT;AAAR,SAbJ;AAcNw2B,eAAO,EAAE;AAAEx3C,gBAAM,EAAEg1C,IAAI,CAACv3C,EAAL;AAAV,SAdH;AAeNg6C,aAAK,EAAE,QAAApC,wBAAA,EAfD;AAgBN/L,oBAAY,EAAEyL,+BAA+B,EAhBvC;AAiBN2C,iBAAS,EAAEvC,uBAAuB,CAAC,kBAAD,CAjB5B;AAkBNwC,YAAI,EAAExC,uBAAuB,CAAC,aAAD,CAlBvB;AAmBNyC,YAAI,EAAEzC,uBAAuB,CAAC,qBAAD,CAnBvB;AAoBN0C,cAAM,EAAE,QAAAzC,yBAAA,EApBF;AAqBN0C,gBAAQ,EAAE3C,uBAAuB,CAAC,iBAAD,CArB3B;AAsBN4C,eAAO,EAAE5C,uBAAuB,CAAC,gBAAD,CAtB1B;AAuBN6C,qBAAa,EAAE7C,uBAAuB,CAAC,sBAAD,CAvBhC;AAwBN8C,0BAAkB,EAAE9C,uBAAuB,CAAC,2BAAD,CAxBrC;AAyBN+C,gBAAQ,EAAE,QAAAvB,2BAAA,CAA4BK,iBAA5B,CAzBJ;AA0BNh9B,mBAAW,EAAE,OAAAmG,EAAA,CAAG,IAAH;AA1BP,OAAV;AA4BA,8BAAAxB,cAAA,CAAekkB,UAAf,CAA0B,iBAAAzlB,aAA1B,EAAyC03B,OAAO,CAAC6C,IAAjD;AACA,8BAAAh5B,cAAA,CAAekkB,UAAf,CAA0B,eAAAyG,YAA1B,EAAwCwL,OAAO,CAACxL,YAAhD;AACA,8BAAA3qB,cAAA,CAAekkB,UAAf,CAA0B,eAAAkH,QAA1B,EAAoC+K,OAAO,CAACxL,YAA5C;AACA,8BAAA3qB,cAAA,CAAekkB,UAAf,CAA0B,QAAA9M,IAA1B,EAAgC+e,OAAO,CAAC2C,KAAxC;AACA,8BAAA94B,cAAA,CAAekkB,UAAf,CAA0B,WAAAzc,OAA1B,EAAmC0uB,OAAO,CAACgD,QAA3C;AACA,8BAAAn5B,cAAA,CAAekkB,UAAf,CAA0B,SAAAhe,KAA1B,EAAiCiwB,OAAO,CAAC+C,MAAzC;AACA,8BAAAl5B,cAAA,CAAekkB,UAAf,CAA0B,WAAAoG,WAA1B,EAAuC6L,OAAO,CAAC4C,SAA/C;AACA,8BAAA/4B,cAAA,CAAekkB,UAAf,CAA0B,UAAAwM,MAA1B,EAAkCyF,OAAO,CAACiD,OAA1C;AACA,8BAAAp5B,cAAA,CAAekkB,UAAf,CAA0B,WAAA8B,YAA1B,EAAwCmQ,OAAO,CAACkD,aAAhD;AACA,8BAAAr5B,cAAA,CAAekkB,UAAf,CAA0B,WAAA0B,gBAA1B,EAA4CuQ,OAAO,CAACmD,kBAApD;AACAnD,aAAO,CAACxL,YAAR,CAAqB/yB,SAArB,GAAiC,CAACu+B,OAAO,CAACxL,YAAR,CAAqBvkB,QAAtB,CAAjC;AACA+vB,aAAO,CAAC2C,KAAR,CAActa,OAAd,GAAwB,IAAI,QAAApH,IAAJ,CAASoiB,gBAAgB,EAAzB,CAAxB;AACArD,aAAO,CAAC2C,KAAR,CAAcz9B,WAAd,GAA4B,OAAAmG,EAAA,CAAG,IAAH,CAA5B;AACA20B,aAAO,CAACgD,QAAR,CAAiBM,YAAjB,GAAgC,IAAI,OAAAl7C,eAAJ,CAAoB,IAAIsR,KAAJ,CAAU,EAAV,EAAc6pC,IAAd,CAAmB,CAAnB,EAAsB/wC,GAAtB,CAA0B,UAAA2R,CAAC;AAAA,eAAI,IAAI,WAAAmN,OAAJ,CAAYkyB,mBAAmB,EAA/B,CAAJ;AAAA,OAA3B,CAApB,CAAhC;AACAxD,aAAO,CAAC90C,MAAR,CAAeu4C,eAAf,CAA+B,OAAAp4B,EAAA,CAAG,IAAH,EAAS,EAAT,CAA/B;AACA,aAAO20B,OAAP;AACH;;AA7CD;;AA+CA,aAAgBK,uBAAhB,CAAwC33C,IAAxC,EAAsD;AAClD,UAAM6xB,OAAO,GAAG;AACZpqB,YAAI,EAAE+vC,IAAI,CAACv3C,EAAL,EADM;AAEZ4K,cAAM,EAAE2sC,IAAI,CAACv3C,EAAL,EAFI;AAGZuC,cAAM,EAAEg1C,IAAI,CAACv3C,EAAL,EAHI;AAIZ0Z,WAAG,EAAE69B,IAAI,CAACv3C,EAAL,EAJO;AAKZ2D,WAAG,EAAE4zC,IAAI,CAACv3C,EAAL,EALO;AAMZof,eAAO,EAAEm4B,IAAI,CAACv3C,EAAL,EANG;AAOZoX,aAAK,EAAEmgC,IAAI,CAACv3C,EAAL,EAPK;AAQZu3B,YAAI,EAAEggB,IAAI,CAACv3C,EAAL,EARM;AASZqH,WAAG,EAAEkwC,IAAI,CAACv3C,EAAL,EATO;AAUZ+6C,YAAI,EAAExD,IAAI,CAACv3C,EAAL,EAVM;AAWZk4C,cAAM,EAAEX,IAAI,CAACv3C,EAAL,EAXI;AAYZ,kBAAQu3C,IAAI,CAACv3C,EAAL,EAZI;AAaZygB,cAAM,EAAE82B,IAAI,CAACv3C,EAAL,EAbI;AAcZg7C,eAAO,EAAEzD,IAAI,CAACv3C,EAAL,EAdG;AAeZi7C,kBAAU,EAAE1D,IAAI,CAACv3C,EAAL,EAfA;AAgBZ8gB,YAAI,EAAEy2B,IAAI,CAACv3C,EAAL,EAhBM;AAiBZmyB,iBAAS,EAAEolB,IAAI,CAACv3C,EAAL,EAjBC;AAkBZsiB,eAAO,EAAEi1B,IAAI,CAACv3C,EAAL,EAlBG;AAmBZ+iB,kBAAU,EAAEw0B,IAAI,CAACv3C,EAAL,EAnBA;AAoBZk7C,iBAAS,EAAE3D,IAAI,CAACv3C,EAAL,EApBC;AAqBZm7C,sBAAc,EAAE5D,IAAI,CAACv3C,EAAL,EArBJ;AAsBZo7C,cAAM,EAAE7D,IAAI,CAACv3C,EAAL,EAtBI;AAuBZq7C,eAAO,EAAE9D,IAAI,CAACv3C,EAAL,EAvBG;AAwBZs7C,eAAO,EAAE/D,IAAI,CAACv3C,EAAL,EAxBG;AAyBZu7C,oBAAY,EAAE,KAzBF;AA0BZh/B,mBAAW,EAAE,OAAAmG,EAAA,CAAG,IAAH,CA1BD;AA2BZojB,qBAAa,EAAEyR,IAAI,CAACv3C,EAAL,EA3BH;AA4BZD,YAAI,EAAJA,IA5BY;AA6BZg3C,kBAAU,EAAE,OAAAr0B,EAAA,CAAG,IAAH,CA7BA;AA8BZ84B,uBAAe,EAAE,OAAA94B,EAAA,CAAG,EAAH,CA9BL;AA+BZ+4B,iBAAS,EAAE,OAAA/4B,EAAA,CAAG,EAAH,CA/BC;AAgCZsS,oBAAY,EAAE,OAAAtS,EAAA,CAAG,IAAH,CAhCF;AAiCZg5B,gCAAwB,EAAEnE,IAAI,CAACv3C,EAAL,EAjCd;AAkCZylC,gBAAQ,EAAE,OAAA/iB,EAAA,CAAG,IAAH,CAlCE;AAmCZs0B,mBAAW,EAAEO,IAAI,CAACv3C,EAAL,EAnCD;AAoCZ27C,kBAAU,EAAE,OAAAj5B,EAAA,CAAG,EAAH,CApCA;AAqCZu0B,yBAAiB,EAAE,OAAAv0B,EAAA,CAAG,EAAH;AArCP,OAAhB;AAyCAkP,aAAO,CAACkU,aAAR,CAAsB8V,kBAAtB,CAAyC,UAAApgC,CAAC;AAAA,eAAI6E,OAAO,CAACC,OAAR,CAAgB,CAAC,IAAI,WAAAqI,OAAJ,CAAY,EAAZ,CAAD,CAAhB,CAAJ;AAAA,OAA1C;AACAiJ,aAAO,CAACmpB,IAAR,CAAaa,kBAAb,CAAgC,UAAApgC,CAAC;AAAA,eAAI6E,OAAO,CAACC,OAAR,CAAgB,IAAI,WAAAqI,OAAJ,CAAY,EAAZ,CAAhB,CAAJ;AAAA,OAAjC;AAEAiJ,aAAO,CAACrvB,MAAR,CAAeu4C,eAAf,CAA+B,OAAAp4B,EAAA,CAAG,IAAH,CAA/B;AACAkP,aAAO,CAAChnB,MAAR,CAAekwC,eAAf,CAA+B,EAA/B;AACA,aAAOlpB,OAAP;AACH;;AAhDD;AAkDA,QAAIiqB,WAAW,GAAW,CAA1B;;AAEA,aAAgBC,0BAAhB,CAA2C/vC,KAA3C,EAA0D;AACtD,aAAO;AACHhM,YAAI,mBAAYgM,KAAZ,CADD;AAEHqJ,aAAK,mBAAYrJ,KAAZ,cAFF;AAGHoR,gBAAQ,EAAE;AACNpd,cAAI,uBAAgBgM,KAAhB,CADE;AAEN6uB,kBAAQ,EAAE;AAFJ;AAHP,OAAP;AAQH;;AATD;;AAWA,aAAgBmhB,iBAAhB,GAAqH;AAAA,UAAnF5C,SAAmF,uEAA9D,EAA8D;AAAA,UAA1D6C,QAA0D,uEAAvC,IAAuC;AAAA,UAAjCC,gBAAiC,uEAAL,KAAK;AACjH,UAAMhmC,EAAE,mBAAY+lC,QAAQ,IAAIH,WAAW,EAAnC,CAAR;AACA,UAAM97C,IAAI,GAAGo5C,SAAS,CAACp5C,IAAV,cAAqBq3C,KAAK,CAACr3C,IAA3B,cAAmCq3C,KAAK,CAACr3C,IAAN,CAAWm8C,QAAX,EAAnC,WAAb;AACA,UAAM1qB,UAAU,GAAG,UAAA/jB,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB8J,YAApB,CAAiC,KAAjC,CAAnB;AACA,UAAIyP,QAAQ,GAAiB;AACzBgV,iBAAS,EAAE,IADc;AAEzBuR,uBAAe,EAAElS,UAAU,CAAC3sB,QAAX,CAAoB;AAAE4wB,cAAI,EAAE;AAAR,SAApB,EAAiC/f,OAFzB;AAGzB3B,gBAAQ,EAAEhD,KAAK,CAAC,EAAD,CAAL,CAAU6pC,IAAV,CAAe,CAAf,EAAkB/wC,GAAlB,CAAsB,UAAAxH,CAAC;AAAA,iBAAIw4C,mBAAmB,EAAvB;AAAA,SAAvB,CAHe;AAIzBjgB,gBAAQ,EAAE,IAJe;AAKzBwO,mBAAW,EAAE,IALY;AAMzBqM,sBAAc,EAAE,wBANS;AAOzBntB,4BAAoB,EAAE,UAPG;AAQzBmjB,cAAM,EAAE,GARiB;AASzB2K,qBAAa,EAAE,KATU;AAUzB+F,2BAAmB,EAAE,IAVI;AAWzB7G,iBAAS,YAAKv1C,IAAL,kBAXgB;AAYzBq8C,UAAE,EAAE;AAZqB,OAA7B;;AAcA,UAAIjD,SAAS,CAACh8B,QAAd,EAAwB;AACpBA,gBAAQ,GAAG,MAAH,OAAG,CAAH,kBAAQA,QAAR,CAAG,EAAkBg8B,SAAS,CAACh8B,QAA5B,CAAX;AACA,eAAOg8B,SAAS,CAACh8B,QAAjB;AACH;;AACD,UAAI8+B,gBAAJ,EAAsB;AAClB9+B,gBAAQ,CAACm5B,uBAAT,GAAmC,CAC/B;AACItyC,cAAI,EAAEwtB,UAAU,CAAC9b,OADrB;AAEIyc,mBAAS,EAAE;AAFf,SAD+B,EAK/B;AACInuB,cAAI,EAAEwtB,UAAU,CAAC3sB,QAAX,CAAoB;AAAE4wB,gBAAI,EAAE;AAAR,WAApB,EAAiC/f,OAD3C;AAEIyc,mBAAS,EAAE;AAFf,SAL+B,EAS/B;AACInuB,cAAI,EAAEwtB,UAAU,CAAC3sB,QAAX,CAAoB;AAAE4wB,gBAAI,EAAE;AAAR,WAApB,EAAiC/f,OAD3C;AAEIyc,mBAAS,EAAE;AAFf,SAT+B,EAa/B;AACInuB,cAAI,EAAEwtB,UAAU,CAAC3sB,QAAX,CAAoB;AAAE4wB,gBAAI,EAAE;AAAR,WAApB,EAAiC/f,OAD3C;AAEIyc,mBAAS,EAAE;AAFf,SAb+B,CAAnC;AAkBH;;AAED,UAAMkqB,MAAM,GAAG/3C,IAAI,CAACY,KAAL,CAAW,OAAAyN,oBAAA,CAAqB,KAArB,CAAX,IAA0C,CAA1C,KAAgD,CAAhD,IAAqDkpC,WAAW,GAAG,CAAlF;AACA,aAAO,IAAI,SAAAz0B,KAAJ,CAAU,MAAD,OAAC,CAAD;AACZnR,UAAE,EAAFA,EADY;AAEZlW,YAAI,YAAKA,IAAL,mBAFQ;AAGZ0rC,cAAM,YAAKuQ,QAAQ,IAAIH,WAAjB,CAHM;AAIZ5yC,YAAI,EAAEmuC,KAAK,CAACkF,QAAN,CAAeC,WAAf,EAJM;AAKZC,kBAAU,EAAEl4C,IAAI,CAACY,KAAL,CAAW,OAAAyN,oBAAA,CAAqB,KAArB,CAAX,IAA0C,CAA1C,KAAgD,CALhD;AAMZ8pC,mBAAW,EAAEn4C,IAAI,CAACY,KAAL,CAAW,OAAAyN,oBAAA,CAAqB,KAArB,CAAX,IAA0C,CAA1C,KAAgD,CANjD;AAOZ+pC,mBAAW,EAAEp4C,IAAI,CAACY,KAAL,CAAW,OAAAyN,oBAAA,CAAqB,GAArB,CAAX,IAAwC,GAPzC;AAQZwV,gBAAQ,EAAE7jB,IAAI,CAACY,KAAL,CAAW,OAAAyN,oBAAA,CAAqB,KAArB,CAAX,IAA0C,CAA1C,KAAgD,CAR9C;AASZ6X,gBAAQ,EAAE,EATE;AAUZmyB,qBAAa,EAAE,CAVH;AAWZj+B,aAAK,EAAEpa,IAAI,CAACY,KAAL,CAAW,OAAAyN,oBAAA,CAAqB,CAArB,CAAX,IAAsC,CAXjC;AAYZof,iBAAS,EAAEztB,IAAI,CAACY,KAAL,CAAW,OAAAyN,oBAAA,CAAqB,CAArB,CAAX,IAAsC,CAZrC;AAaZ4iC,mBAAW,uBAAgBt/B,EAAhB,CAbC;AAcZ2a,aAAK,EAAEwmB,KAAK,CAACxmB,KAAN,CAAYgsB,QAAZ,EAdK;AAeZr1B,aAAK,EAAE,CAAC,YAAD,CAfK;AAgBZiuB,gBAAQ,YAAK,SAAAlxB,aAAA,CAAcY,SAAnB,cAAgC,SAAAZ,aAAA,CAAcM,oBAA9C,CAhBI;AAiBZxP,aAAK,YAAKrV,IAAI,CAAC2L,WAAL,GAAmB1F,KAAnB,CAAyB,GAAzB,EAA8BqH,IAA9B,CAAmC,GAAnC,CAAL,cAAgD,QAAAwvC,WAAhD,CAjBO;AAkBZ1/B,gBAAQ,EAARA;AAlBY,OAAC,EAmBVg8B,SAnBU,CAAV,CAAP;AAqBH;;AAjED;AAmEA,QAAI2D,aAAa,GAAG,CAApB;AACA,QAAIC,YAAY,GAAI,UAAAtvC,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoBgB,QAApB,CAA6B;AAAE0B,UAAI,EAAE;AAAR,KAA7B,EAA0C1B,QAA1C,CAAmD;AAACP,YAAM,EAAE;AAAT,KAAnD,EAAgEoR,aAAhE,CAA8E;AAAEggB,UAAI,EAAE;AAAR,KAA9E,EAA4F/nB,YAA5F,CAAyG,QAAzG,CAApB;AAEA;;;;;AAIA,aAAgBsvC,2BAAhB,CAA4CxvC,IAA5C,EAA0D;AACtD,UAAMxJ,IAAI,GAAG,IAAI,UAAAkR,MAAJ,CAAW;AAAClR,YAAI,EAAEwJ;AAAP,OAAX,CAAb;AACAuvC,kBAAY,GAAG/4C,IAAI,CAAC0J,YAAL,CAAkB,QAAlB,CAAf;AACH;;AAHD;AAKA;;;;;AAIA,aAAgBmtC,mBAAhB,GAA4D;AAAA,UAAxBjR,QAAwB,uEAAJ,EAAI;AACxD,UAAM3zB,EAAE,qBAAc6mC,aAAa,EAA3B,CAAR;AACAC,kBAAY,GAAGA,YAAY,CAACl4C,QAAb,CAAsB;AAAEJ,eAAO,EAAEH,IAAI,CAACY,KAAL,CAAW,OAAAyN,oBAAA,CAAqB,CAArB,IAA0B,CAArC,IAA0C;AAArD,OAAtB,CAAf;AACA,UAAMzO,KAAK,GAAG64C,YAAY,CAACpvC,EAA3B;AACA,UAAM5I,QAAQ,GAAGT,IAAI,CAACY,KAAL,CAAW,OAAAyN,oBAAA,CAAqB,CAArB,IAA0B,CAArC,IAA0C,EAA3D;AACAoqC,kBAAY,GAAGA,YAAY,CAACl4C,QAAb,CAAsB;AAAEJ,eAAO,EAAEH,IAAI,CAACY,KAAL,CAAW,OAAAyN,oBAAA,CAAqB,CAArB,CAAX,IAAsC;AAAjD,OAAtB,CAAf;AACA,UAAMimB,SAAS,GAAG8hB,gBAAgB,CAAC;AAAEvd,gBAAQ,EAAE,KAAZ;AAAmB8f,eAAO,EAAE;AAA5B,OAAD,CAAlC;AACA,UAAMvf,MAAM,GAAG3sB,KAAK,CAACzM,IAAI,CAACY,KAAL,CAAW,OAAAyN,oBAAA,CAAqB,CAArB,CAAX,CAAD,CAAL,CACVioC,IADU,CACL,CADK,EAEV/wC,GAFU,CAEN,UAAA2R,CAAC;AAAA,eAAI0hC,yBAAyB,CAAC;AAAEhpB,sBAAY,EAAEhwB;AAAhB,SAAD,EAA0B0lC,QAAQ,CAAC9X,QAAnC,EAA6C8X,QAAQ,CAACuT,IAAtD,CAA7B;AAAA,OAFK,CAAf;AAGA,UAAM50B,WAAW,GAAGjkB,IAAI,CAACY,KAAL,CAAW,OAAAyN,oBAAA,CAAqB,KAArB,CAAX,IAA0C,CAA1C,KAAgD,CAApE;AACA,UAAMyqC,UAAU,GAAG,IAAI,UAAAloC,MAAJ,CAAW;AAAClR,YAAI,EAAEE;AAAP,OAAX,CAAnB;AACA,aAAO,MAAP,OAAO,CAAP;AACI+R,UAAE,EAAFA,EADJ;AAEI6a,aAAK,YAAKsmB,KAAK,CAACkF,QAAN,CAAeC,WAAf,EAAL,aAFT;AAGI5jB,iBAAS,EAAE5nB,KAAK,CAACzM,IAAI,CAACY,KAAL,CAAW,OAAAyN,oBAAA,CAAqB,CAArB,IAA0B,CAArC,CAAD,CAAL,CACNioC,IADM,CACD,CADC,EAEN/wC,GAFM,CAEF,UAAC2R,CAAD,EAAInZ,CAAJ;AAAA,iBAAUq4C,gBAAgB,CAAC9Q,QAAQ,CAACyT,KAAV,CAA1B;AAAA,SAFE,CAHf;AAMIzkB,iBAAS,EAATA,SANJ;AAOI9iB,mBAAW,EAAEsnC,UAAU,CAAC1nC,OAP5B;AAQIF,iBAAS,EAAE4nC,UAAU,CAACv4C,QAAX,CAAoB;AAAEJ,iBAAO,EAAEM;AAAX,SAApB,EAA2C2Q,OAR1D;AASIxF,YAAI,EAAEknC,KAAK,CAACkG,KAAN,CAAYC,SAAZ,EATV;AAUItkB,aAAK,EAAE,CAAC;AAAEhwB,cAAI,EAAE,OAAR;AAAiB0S,iBAAO,EAAEy7B,KAAK,CAACkG,KAAN,CAAYC,SAAZ;AAA1B,SAAD,CAVX;AAWIlgC,gBAAQ,EAAE+5B,KAAK,CAACjpB,OAAN,CAAc1U,IAAd,EAXd;AAYI;AACAif,oBAAY,EAAE,CAAC,UAAD,EAAa,UAAb,EAAyB,OAAA/lB,oBAAA,CAAqB,CAArB,CAAzB,CAblB;AAcI+L,aAAK,EAAE;AAAE,sBAAYpa,IAAI,CAACmD,GAAL,CAAS,CAAT,EAAY,CAAC,OAAAkL,oBAAA,CAAqB,EAArB,IAA2B,CAA5B,IAAiC,CAA7C;AAAd,SAdX;AAeIof,iBAAS,EAAE;AAAE,sBAAYztB,IAAI,CAACmD,GAAL,CAAS,CAAT,EAAY,CAAC,OAAAkL,oBAAA,CAAqB,EAArB,IAA2B,CAA5B,IAAiC,CAA7C;AAAd,SAff;AAgBI8V,cAAM,EAAE,UAhBZ;AAiBImS,gBAAQ,EAAErS,WAAW,GAAGmV,MAAH,GAAY,EAjBrC;AAkBI1G,YAAI,EAAE,IAAI,SAAA5P,KAAJ,CAAU00B,0BAA0B,CAAC,CAAD,CAApC,CAlBV;AAmBI5iB,uBAAe,EAAE,EAnBrB;AAoBIM,eAAO,EAAC;AApBZ,OAAO,EAqBAoQ,QArBA,CAAP;AAuBH;;AAnCD;AAqCA,QAAI4T,SAAS,GAAG,CAAhB;AACA,QAAIC,SAAS,GAAG,CAAhB;AAEA;;;;;;;AAMA,aAAgBjG,oBAAhB,GAA4D;AAAA,UAAvB2B,SAAuB,uEAAF,EAAE;AACxD,UAAMljC,EAAE,sBAAeunC,SAAS,EAAxB,CAAR;AACA,UAAM3jC,MAAM,GAAG9I,KAAK,CAAC,EAAD,CAAL,CACV6pC,IADU,CACL,CADK,EAEV/wC,GAFU,CAEN,UAAC2R,CAAD,EAAInZ,CAAJ,EAAU;AAAD;;AAAC,eAAAq7C,iBAAiB,CAACz3C,SAAD,EAAY,CAAF,KAAEkzC,SAAS,CAACwE,cAAV,MAAwB,IAAxB,IAAwB,aAAxB,GAAwB,MAAxB,GAAwB,QAAxBxE,SAAwB,EAAG92C,CAAH,CAApC,CAAjB;AAA2D,OAF/D,CAAf;AAGA,UAAMmzC,QAAQ,GAAQ,EAAtB;;AALwD,mDAMtC37B,MANsC;AAAA;;AAAA;AAMxD,kEAA0B;AAAA,cAAf8zB,GAAe;AACtB,cAAM5hC,KAAK,GAAGzH,IAAI,CAACY,KAAL,CAAW,OAAAyN,oBAAA,CAAqB,CAArB,IAA0B,CAArC,CAAd;AACA6iC,kBAAQ,CAAC7H,GAAG,CAACE,QAAL,CAAR,GAAyB,EAAzB;;AACA,eAAK,IAAIxrC,IAAC,GAAG,CAAb,EAAgBA,IAAC,GAAG0J,KAApB,EAA2B1J,IAAC,EAA5B,EAAgC;AAC5BmzC,oBAAQ,CAAC7H,GAAG,CAACE,QAAL,CAAR,CAAuBuJ,KAAK,CAACkF,QAAN,CAAeC,WAAf,EAAvB,sBAAkEl6C,IAAC,GAAG,CAAtE;AACH;AACJ;AAZuD;AAAA;AAAA;AAAA;AAAA;;AAaxD,aAAO,MAAP,OAAO,CAAP;AACI4T,UAAE,EAAFA,EADJ;AAEIgK,eAAO,EAAEhK,EAFb;AAGIw2B,cAAM,EAAE17B,KAAK,CAAC,EAAD,CAAL,CACH6pC,IADG,CACE,CADF,EAEH/wC,GAFG,CAEC,UAAAxH,CAAC,EAAI;AACN,cAAMtC,IAAI,GAAGq3C,KAAK,CAACkF,QAAN,CAAeC,WAAf,EAAb;AACA,iBAAO;AACH7P,oBAAQ,EAAE3sC,IAAI,CACTiG,KADK,CACC,GADD,EAELqH,IAFK,CAEA,GAFA,EAGL3B,WAHK,EADP;AAKHihC,sBAAU,EAAE5sC;AALT,WAAP;AAOH,SAXG,CAHZ;AAeImuB,YAAI,EAAE,KAfV;AAgBInuB,YAAI,EAAEq3C,KAAK,CAACr3C,IAAN,CAAW69C,SAAX,EAhBV;AAiBIzvB,eAAO,EAAE,wBAjBb;AAkBI1U,YAAI,EAAE,eAlBV;AAmBImzB,kBAAU,EAAE77B,KAAK,CAAC,EAAD,CAAL,CACP6pC,IADO,CACF,CADE,EAEP/wC,GAFO,CAEH,UAAAxH,CAAC,EAAI;AACN,cAAMtC,IAAI,GAAGq3C,KAAK,CAACkF,QAAN,CAAeC,WAAf,EAAb;AACA,iBAAO;AACH7P,oBAAQ,EAAE3sC,IAAI,CACTiG,KADK,CACC,GADD,EAELqH,IAFK,CAEA,GAFA,EAGL3B,WAHK,EADP;AAKHihC,sBAAU,EAAE5sC;AALT,WAAP;AAOH,SAXO,CAnBhB;AA+BI8Z,cAAM,EAANA,MA/BJ;AAgCIizB,aAAK,EAAE;AACH,0BAAgB/7B,KAAK,CAAC,EAAD,CAAL,CACX6pC,IADW,CACN,CADM,EAEX/wC,GAFW,CAEP,UAAAxH,CAAC;AAAA,mBAAIq4C,gBAAgB,EAApB;AAAA,WAFM;AADb,SAhCX;AAqCIhN,sBAAc,EAAE8H,QArCpB;AAsCIr4B,gBAAQ,EAAE;AACN0gC,cAAI,EAAE;AACFC,kBAAM,EAAE;AACJC,oBAAM,EAAE,IADJ;AAEJC,iBAAG,EAAE;AAFD;AADN,WADA;AAONvkC,cAAI,EAAE29B,KAAK,CAACjpB,OAAN,CAAc1U,IAAd;AAPA,SAtCd;AA+CI7Q,gBAAQ,EAAE;AA/Cd,OAAO,EAgDAuwC,SAhDA,CAAP;AAkDH;;AA/DD;AAiEA;;;;;;AAKA,aAAgBuE,iBAAhB,CAAkCznC,EAAlC,EAAsE;AAAA,UAAvBkjC,SAAuB,uEAAF,EAAE;;AAClE,UAAI,CAACljC,EAAL,EAAS;AACLA,UAAE,sBAAewnC,SAAS,EAAxB,CAAF;AACH;;AACD,aAAO,MAAP,OAAO,CAAP;AACIxnC,UAAE,EAAFA,EADJ;AAEI43B,gBAAQ,EAAE53B,EAFd;AAGIu4B,kBAAU,kBAAWiP,SAAX,CAHd;AAII3qB,kBAAU,cAAO2qB,SAAP;AAJd,OAAO,EAKAtE,SALA,CAAP;AAOH;;AAXD;AAaA,QAAI8E,UAAU,GAAG,CAAjB;AAEW,YAAApB,WAAA,GAAc,iBAAd;AAEX,QAAMqB,WAAW,GAAa,EAA9B;AAEA;;;;;;;AAMA,aAAgBxD,gBAAhB,GAAuD;AAAA,UAAtB9Q,QAAsB,uEAAF,EAAE;AACnD,UAAM3zB,EAAE,kBAAWgoC,UAAU,EAArB,CAAR;AACA,UAAMl+C,IAAI,aAAMq3C,KAAK,CAACr3C,IAAN,CAAW69C,SAAX,EAAN,cAAgCxG,KAAK,CAACr3C,IAAN,CAAWm8C,QAAX,EAAhC,CAAV;AACA,UAAM/e,QAAQ,GAAGyM,QAAQ,CAACzM,QAAT,IAAqB,EAAE,OAAAxqB,oBAAA,CAAqB,KAArB,IAA8B,CAAhC,CAAtC;AACA,UAAMy8B,YAAY,GAAGjS,QAAQ,GAAGia,KAAK,CAAC5d,OAAN,CAAc2kB,WAAd,EAAH,GAAiC,QAAAtB,WAAA,CAAY72C,KAAZ,CAAkB,GAAlB,EAAuB,CAAvB,CAA9D;AACA,UAAIo4C,SAAS,GAAwC,EAArD;AACA,UAAMC,cAAc,GAAG/5C,IAAI,CAACq+B,GAAL,CAAS,OAAAhwB,oBAAA,CAAqB,CAArB,IAA0B,CAAnC,EAAsCurC,WAAW,CAACh4C,MAAlD,CAAvB;;AACA,WAAK,IAAI7D,IAAC,GAAG,CAAb,EAAgBA,IAAC,GAAGg8C,cAApB,EAAoCh8C,IAAC,EAArC,EAAyC;AACrC+7C,iBAAS,CAACvyC,IAAV,CAAe;AAACuJ,eAAK,EAAE8oC,WAAW,CAAC55C,IAAI,CAACY,KAAL,CAAW,OAAAyN,oBAAA,CAAqBurC,WAAW,CAACh4C,MAAjC,CAAX,CAAD,CAAnB;AAA2E0zB,iBAAO,EAAE;AAApF,SAAf;AACH;;AACDwkB,eAAS,GAAG,OAAA1zC,MAAA,CAAO0zC,SAAP,CAAZ;AACA,UAAMhpC,KAAK,aAAMrV,IAAI,CAChBiG,KADY,CACN,GADM,EAEZqH,IAFY,CAEP,GAFO,EAGZ3B,WAHY,EAAN,cAGWyxB,QAAQ,GAAG,MAAH,GAAY,EAH/B,SAGoC,QAAA0f,WAHpC,CAAX;AAIAqB,iBAAW,CAACryC,IAAZ,CAAiBuJ,KAAjB;AACA,aAAO,MAAP,OAAO,CAAP;AACIa,UAAE,EAAFA,EADJ;AAEIlW,YAAI,EAAJA,IAFJ;AAGIu+C,kBAAU,EAAEv+C,IAAI,CAACiG,KAAL,CAAW,GAAX,EAAgB,CAAhB,CAHhB;AAIIu4C,iBAAS,EAAEx+C,IAAI,CAACiG,KAAL,CAAW,GAAX,EAAgB,CAAhB,CAJf;AAKIoP,aAAK,EAALA,KALJ;AAMIopC,aAAK,EAAEpH,KAAK,CAACoH,KAAN,CAAYC,WAAZ,EANX;AAOIxB,eAAO,EAAE9f,QAPb;AAQIiS,oBAAY,EAAE;AACVn5B,YAAE,EAAEm5B,YAAY,CACXppC,KADD,CACO,GADP,EAECqH,IAFD,CAEM,GAFN,EAGC3B,WAHD,EADM;AAKV3L,cAAI,EAAEqvC;AALI,SARlB;AAeIsP,kBAAU,EAAEtH,KAAK,CAACkF,QAAN,CAAeoC,UAAf,EAfhB;AAgBIC,kBAAU,EAAE,OAAAp0C,OAAA,CAAQjG,IAAI,CAACY,KAAL,CAAW,OAAAyN,oBAAA,CAAqB,KAArB,CAAX,CAAR,EAAiD,CAAjD,CAhBhB;AAiBIyrC,iBAAS,EAATA,SAjBJ;AAkBIxtB,aAAK,EAAEwmB,KAAK,CAACxmB,KAAN,CAAYguB,MAAZ;AAlBX,OAAO,EAmBAhV,QAnBA,CAAP;AAqBH;;AArCD;;AAuCA,aAAgBsT,yBAAhB,GAAwH;AAAA,UAA9E/D,SAA8E,uEAAzD,EAAyD;AAAA,UAArDrf,OAAqD,uEAAnC,EAAmC;AAAA,UAA/BqjB,IAA+B,uEAAJ,EAAI;AACpH,aAAO,MAAP,OAAO,CAAP;AACIlnC,UAAE,kBAAW,OAAAtD,oBAAA,CAAqB,QAArB,CAAX,CADN;AAEImqB,qBAAa,EAAE,OAAAnqB,oBAAA,CAAqB,CAArB,IAA0B,CAF7C;AAGIirB,mBAAW,EAAE9D,OAHjB;AAII93B,aAAK,EAAE,IAAI+O,KAAJ,CAAU,OAAA4B,oBAAA,CAAqB,CAArB,EAAwB,CAAxB,CAAV,EAAsCioC,IAAtC,CAA2C,CAA3C,EAA8C/wC,GAA9C,CAAkD,UAAAxH,CAAC;AAAA,iBAAIw8C,YAAY,CAAC1B,IAAD,CAAhB;AAAA,SAAnD;AAJX,OAAO,EAKAhE,SALA,CAAP;AAOH;;AARD;;AAUA,aAAS0F,YAAT,GAAyD;AAAA,UAAnCC,QAAmC,uEAAJ,EAAI;;;;AACrD,UAAMv3B,KAAK,GAAGvW,MAAM,CAACpH,IAAP,CAAYk1C,QAAZ,CAAd;AACA,UAAM3B,IAAI,GAAG2B,QAAQ,CAACv3B,KAAK,CAAC,OAAA5U,oBAAA,CAAqB4U,KAAK,CAACrhB,MAA3B,CAAD,CAAN,CAAR,IAAuD,EAApE;AACA,UAAM64C,QAAQ,GAAG5B,IAAI,CAAC,OAAAxqC,oBAAA,CAAqBwqC,IAAI,CAACj3C,MAA1B,CAAD,CAAJ,IAA2C;AAAElE,aAAK,EAAE;AAAT,OAA5D;AACA,UAAM6mB,KAAK,GAAG,MAAH,OAAG,CAAH,EAAG,EAAMk2B,QAAQ,CAAC/8C,KAAT,CAAe,OAAA2Q,oBAAA,CAAqBosC,QAAQ,CAAC/8C,KAAT,CAAekE,MAApC,CAAf,KAA+D,EAArE,CAAd;;AACA,UAAI,CAAC2iB,KAAK,WAAN,KAAc,MAAIA,KAAK,CAAC7mB,KAAV,MAAe,IAAf,IAAe,aAAf,GAAe,MAAf,GAAe,GAAEkE,MAA/B,CAAJ,EAA2C;AACvC,YAAMwG,IAAI,GAAG,MAAH,OAAG,CAAH,EAAG,EAAKmc,KAAK,CAAC7mB,KAAN,CAAY,OAAA2Q,oBAAA,CAAqBkW,KAAK,CAAC7mB,KAAN,CAAYkE,MAAjC,CAAZ,CAAL,CAAb;AACAwG,YAAI,CAAC27B,MAAL,GAAc,OAAA11B,oBAAA,CAAqB,CAArB,EAAwB,CAAxB,CAAd;AACA,eAAOjG,IAAP;AACH;;AACDmc,WAAK,CAACwf,MAAN,GAAe,OAAA11B,oBAAA,CAAqB,CAArB,EAAwB,CAAxB,CAAf;AACA,aAAOkW,KAAP;AACH;;AAED,aAAgBm2B,oBAAhB,CAAqC7F,SAArC,EAAyD8F,eAAzD,EAAoFC,IAApF,EAAkG;AAC9F,UAAMlT,KAAK,GAAG,OAAAr5B,oBAAA,CAAqB,SAArB,IAAoC,CAApC,KAA0C,CAAxD;;AACA,UAAIq5B,KAAK,KAAK,CAACmN,SAAD,IAAcA,SAAS,CAACnN,KAA7B,CAAT,EAA8C;AAC1C,eAAO,MAAP,OAAO,CAAP;AACIP,gBAAM,EAAEwT,eAAe,CAAC,OAAAtsC,oBAAA,CAAqBssC,eAAe,CAAC/4C,MAArC,CAAD,CAD3B;AAEImpB,eAAK,EAAE6vB,IAAI,CAAC,OAAAvsC,oBAAA,CAAqBusC,IAAI,CAACh5C,MAA1B,CAAD;AAFf,SAAO,EAGAizC,SAHA,CAAP;AAKH,OAND,MAMO;AACH,eAAO,MAAP,OAAO,CAAP;AACI33C,WAAC,EAAE,OAAAmR,oBAAA,CAAqB,GAArB,EAA0B,GAA1B,CADP;AAEIi5B,eAAK,EAAE,IAFX;AAGInqC,WAAC,EAAE,OAAAkR,oBAAA,CAAqB,GAArB,EAA0B,GAA1B,CAHP;AAII0c,eAAK,EAAE6vB,IAAI,CAAC,OAAAvsC,oBAAA,CAAqBusC,IAAI,CAACh5C,MAA1B,CAAD,CAJf;AAKI+lC,oBAAU,EAAE,OAAAt5B,oBAAA,CAAqB,EAArB;AALhB,SAAO,EAMAwmC,SANA,CAAP;AAQH;AACJ;;AAlBD;AAoBA,QAAIgG,SAAS,GAAG,CAAhB;;AAEA,aAAgBC,wBAAhB,GAAwC;AACpC,UAAMtmC,SAAS,GAAG/H,KAAK,CAAC,CAAD,CAAL,CAAS6pC,IAAT,CAAc,CAAd,EAAiB/wC,GAAjB,CAAqB,UAAAxH,CAAC;AAAA,eAAIm1C,oBAAoB,EAAxB;AAAA,OAAtB,CAAlB;AACA,aAAO;AACHvhC,UAAE,qBAAckpC,SAAS,EAAvB,CADC;AAEHp/C,YAAI,yBAAkBo/C,SAAlB,CAFD;AAGHrmC,iBAAS,EAATA,SAHG;AAIHqE,gBAAQ,EAAE;AACNqvB,wBAAc,EAAE;AACZ1zB,qBAAS,EAATA;AADY,WADV;AAIN+kC,cAAI,EAAE;AACFC,kBAAM,EAAE;AACJE,iBAAG,EAAE;AADD;AADN;AAJA;AAJP,OAAP;AAeH;;AAjBD;;AAoBa,YAAAqB,6BAAA,GAAgC,YAAM;AAC/C,UAAMvmC,SAAS,GAAe/H,KAAK,CAAC,EAAD,CAAL,CAAU6pC,IAAV,CAAe,CAAf,EACzB/wC,GADyB,CACrB;AAAA,eAAM,IAAI,eAAAyiC,QAAJ,CAAakL,oBAAoB,EAAjC,CAAN;AAAA,OADqB,CAA9B;AAEA1+B,eAAS,CAACjN,IAAV,OAAAiN,SAAS,qBAAS/H,KAAK,CAAC,CAAD,CAAL,CAAS6pC,IAAT,CAAc,CAAd,EAAiB/wC,GAAjB,CAAqB;AAAA,eAAM,IAAI,eAAAyiC,QAAJ,CAAakL,oBAAoB,CAAC;AAC3Er6B,kBAAQ,EAAE;AACN1D,gBAAI,EAAE;AADA,WADiE;AAI3EA,cAAI,EAAE;AAJqE,SAAD,CAAjC,CAAN;AAAA,OAArB,CAAT,EAAT;AAMAX,eAAS,CAACjN,IAAV,OAAAiN,SAAS,qBAAS/H,KAAK,CAAC,CAAD,CAAL,CAAS6pC,IAAT,CAAc,CAAd,EAAiB/wC,GAAjB,CAAqB;AAAA,eAAM,IAAI,eAAAyiC,QAAJ,CAAakL,oBAAoB,CAAC;AAC3Er6B,kBAAQ,EAAE;AACN1D,gBAAI,EAAE;AADA,WADiE;AAI3EA,cAAI,EAAE;AAJqE,SAAD,CAAjC,CAAN;AAAA,OAArB,CAAT,EAAT;AAMA,aAAOX,SAAP;AACH,KAhBY;;AAkBb,aAAgBwmC,qBAAhB,GAAiE;AAAA,UAA3B/kC,IAA2B,uEAAN,IAAM;;AAC7D,UAAIA,IAAJ,EAAU;AACN,eAAOA,IAAP;AACH;;AACD,aAAO;AACHglC,mBAAW,EAAE,IAAI37C,IAAJ,CAAS,aAAc,OAAO,EAAP,GAAY,EAAnC,CADV;AAEH47C,uBAAe,EAAE,EAFd;AAGHx7C,YAAI,EAAE,UAHH;AAIHe,gBAAQ,EAAE;AAJP,OAAP;AAMH;;AAVD;;AAYa,YAAA06C,oBAAA,GAAuB,UAACz7C,IAAD,EAAkB;AAClD,aAAO,IAAI,UAAAkR,MAAJ,CAAW;AAAClR,YAAI,EAAJA,IAAD;AAAOynB,mBAAW,EAAE,iBAApB;AAAuCD,mBAAW,EAAE;AAApD,OAAX,CAAP;AACH,KAFY;;;;;;;;;;;;;;;;;;;;;;;;;AChnBb;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACFA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AACA;AAAA;AAAA;;QAEa8M,I;;;;;AA8CX,sBAAoC;AAAA;;AAAA,YAAxB1Y,QAAwB,uEAAJ,EAAI;;AAAA;;AAClC,sCAAMA,QAAN;AACA,gBAAK0+B,UAAL,GAAkB1+B,QAAQ,CAAC0+B,UAAT,IAAuB,EAAzC;AACA,gBAAKC,SAAL,GAAiB3+B,QAAQ,CAAC2+B,SAAT,IAAsB,EAAvC;AACA,gBAAKmB,UAAL,GAAkB9/B,QAAQ,CAACxK,KAAT,IAAkB,EAApC;AACA,gBAAK2H,IAAL,GAAY6C,QAAQ,CAAC7C,IAArB;AACA,gBAAKogB,QAAL,GAAgBvd,QAAQ,CAACud,QAAT,IAAqB,KAArC;AACA,gBAAK8f,OAAL,GAAer9B,QAAQ,CAACq9B,OAAT,IAAoB,KAAnC;AAGA,gBAAKh0C,IAAL,GAAY,QAAKg0C,OAAL,GAAe,UAAf,GAA4B,UAAxC;AACA,gBAAKuB,KAAL,GAAa5+B,QAAQ,CAAC4+B,KAAT,IAAkB5+B,QAAQ,CAAC+/B,MAA3B,IAAqC,EAAlD;AACA,gBAAKC,aAAL,GAAqBhgC,QAAQ,CAACggC,aAAT,IAA0BhgC,QAAQ,CAAC8+B,UAAnC,IAAiD,EAAtE;AACA,gBAAK1P,aAAL,GAAqBpvB,QAAQ,CAACwvB,YAAT,IAAyB;AAC5Cn5B,YAAE,EAAE2J,QAAQ,CAACigC,eAD+B;AAE5C9/C,cAAI,EAAE6f,QAAQ,CAACkgC;AAF6B,SAA9C;AAKA,gBAAKxS,SAAL,GAAiB,IAAjB;AACA,gBAAK1c,KAAL,GAAahR,QAAQ,CAACgR,KAAT,IAAkB,EAA/B;AACA,gBAAK+tB,UAAL,GAAkB/+B,QAAQ,CAAC++B,UAAT,IAAuB/+B,QAAQ,CAAC7C,IAAhC,IAAwC,EAA1D;AACA,gBAAKqhC,SAAL,GAAiBx+B,QAAQ,CAACw+B,SAAT,IAAsB,EAAvC;AACA,gBAAK9Q,SAAL,GAAiB,IAAI,WAAA9B,WAAJ,CACf5rB,QAAQ,CAACvC,QAAT,IAAqBuC,QAAQ,CAACvC,QAAT,YAA6BrM,MAAlD,GACI4O,QAAQ,CAACvC,QADb,GAEI;AAAEtd,cAAI,EAAE6f,QAAQ,CAACvC;AAAjB,SAHW,CAAjB;AAKA,gBAAKopB,MAAL,GAAc7mB,QAAQ,CAAC6mB,MAAT,IAAmB,EAAjC;AACA,gBAAKppB,QAAL,GAAgBuC,QAAQ,CAACvC,QAAT,IAAqBuC,QAAQ,CAACmgC,cAA9B,IAAgD,EAAhE;AACA,gBAAKnmB,OAAL,GAAeha,QAAQ,CAACga,OAAxB;AA7BkC;AA8BnC;AA1ED;;;;;;AAsFA;;;iCAGa;AAAA;;AACX,cAAMhI,OAAO,GAAQ,wBAAA1Q,cAAA,CAAeC,UAAf,CAA0B,WAAAqqB,WAA1B,CAArB;AACA,iBAAO,IAAInrB,OAAJ,CAAY,UAACC,OAAD,EAAUC,MAAV,EAAqB;AACtC,gBAAIqR,OAAJ,EAAa;AACXA,qBAAO,CAAC2F,IAAR,CAAa,OAAI,CAACthB,EAAlB,EAAsB;AAAE+pC,oBAAI,EAAE,OAAI,CAAC5qC;AAAb,eAAtB,EAA4CsL,IAA5C,CACE,UAAA5G,CAAC,EAAI;AACH,uBAAI,CAACwzB,SAAL,GAAiBxzB,CAAjB;AACAwG,uBAAO,CAACxG,CAAD,CAAP;AACD,eAJH,EAKE,UAAAzL,CAAC;AAAA,uBAAIkS,MAAM,CAAClS,CAAD,CAAV;AAAA,eALH;AAOD,aARD,MAQO;AACLiS,qBAAO,CAAC,IAAD,CAAP;AACD;AACF,WAZM,CAAP;AAaD;AAED;;;;;;;;kCAKiBpc,K,EAAgBmtB,G,EAAY;AAAA;;AAC3C,iBAAO,IAAIhR,OAAJ,CAAqB,UAAAC,OAAO,EAAI;AACrC,mBAAI,CAACJ,QAAL,CAAc9I,KAAd,CAAoB;AAAEhC,mBAAK,EAAE,OAAI,CAACA,KAAd;AAAqBlR,mBAAK,EAALA,KAArB;AAA4BmtB,iBAAG,EAAHA;AAA5B,aAApB,EAAuD3Q,IAAvD,CACE,UAAA5G,CAAC;AAAA,qBAAIwG,OAAO,CAACxG,CAAC,IAAIA,CAAC,CAAC5T,MAAF,GAAW,CAAjB,CAAX;AAAA,aADH,EAEE,UAAAsV,CAAC;AAAA,qBAAI8E,OAAO,CAAC,KAAD,CAAX;AAAA,aAFH;AAID,WALM,CAAP;AAMD;AAED;;;;;;gCAGY;AACV,iBAAO,IAAIgY,IAAJ,CAAS,IAAT,CAAP;AACD;AAED;;;;;;oCAGgB;AACd,iBAAO,IAAIA,IAAJ,CAAS,MAAD,OAAC,CAAD,kBAAM,IAAN,CAAC,EAAS;AAAEriB,cAAE,EAAE,IAAN;AAAYb,iBAAK,EAAE;AAAnB,WAAT,CAAT,CAAP;AACD;AAED;;;;;;iCAGa;AACX,cAAMmF,IAAI,mEAAV;;AACA,iBAAOA,IAAI,CAAC8C,QAAZ;AACA,iBAAO9C,IAAP;AACD;;;;AAjED;4BAC0B;AACxB,iBAAO,KAAKy0B,aAAZ;AACD;AAED;;;;4BACwB;AACtB,iBAAO,IAAI,WAAAxD,WAAJ,CAAgB,KAAK8B,SAAL,IAAkB,EAAlC,CAAP;AACD;;;4BAnF4B;AAC3B,cAAM1b,OAAO,GAAG,wBAAA1Q,cAAA,CAAeC,UAAf,CAA0BmX,IAA1B,CAAhB;AACA,iBAAO1G,OAAO,GAAGA,OAAO,CAAC8N,OAAX,GAAqB,IAAnC;AACD;;;;MANuB,iBAAA/f,a;;AAA1B,wB,CAkJA;;;;;;;;;;;;;;;;;;;;;AC1JA;AAAA;AAAA;AASA;;;;;;AAIA,aAAgBsgC,gBAAhB,CAAiCrjC,IAAjC,EAA2C;AACzC,UAAI,CAACA,IAAL,EAAW;AACT,cAAMxc,KAAK,CAAC,gBAAD,CAAX;AACD;;AACD,UAAMmL,MAAM,GAAyB;AACnC0K,UAAE,EAAE,IAAI,QAAA0pB,WAAJ,CAAgB/iB,IAAI,CAAC3G,EAAL,IAAW,EAA3B,CAD+B;AAEnClW,YAAI,EAAE,IAAI,QAAA4/B,WAAJ,CAAgB/iB,IAAI,CAAC7c,IAAL,IAAa,EAA7B,CAF6B;AAGnCu+C,kBAAU,EAAE,IAAI,QAAA3e,WAAJ,CAAgB/iB,IAAI,CAAC0hC,UAAL,IAAmB,EAAnC,EAAuC,CAAC,QAAAze,UAAA,CAAWC,QAAZ,EAAsB,QAAAD,UAAA,CAAWqgB,OAAX,CAAmB,sBAAnB,CAAtB,EAAkE,QAAArgB,UAAA,CAAWsgB,SAAX,CAAqB,EAArB,CAAlE,CAAvC,CAHuB;AAInC5B,iBAAS,EAAE,IAAI,QAAA5e,WAAJ,CAAgB/iB,IAAI,CAAC2hC,SAAL,IAAkB,EAAlC,EAAsC,CAAC,QAAA1e,UAAA,CAAWC,QAAZ,EAAsB,QAAAD,UAAA,CAAWqgB,OAAX,CAAmB,sBAAnB,CAAtB,EAAkE,QAAArgB,UAAA,CAAWsgB,SAAX,CAAqB,EAArB,CAAlE,CAAtC,CAJwB;AAKnC/qC,aAAK,EAAE,IAAI,QAAAuqB,WAAJ,CAAgB/iB,IAAI,CAACxH,KAAL,IAAc,EAA9B,EAAkC,CAAC,QAAAyqB,UAAA,CAAWzqB,KAAZ,CAAlC;AAL4B,OAArC,CAJyC,CAWzC;;AACE,aAAO,IAAI,QAAAgtB,SAAJ,CAAc72B,MAAd,CAAP;AACH;;AAbD;;;;;;;;;;;;;;;;;;;;;;;;ACbA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAMA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;QAca60C,Y;;;;;AACT,4BACcnlC,SADd,EAEcolC,KAFd,EAGchjC,QAHd,EAIY6C,QAJZ,EAKImB,eALJ,EAKoC;AAAA;;AAAA;;AAEhC,sCAAMpG,SAAN,EAAiBoG,eAAjB;AANU,gBAAApG,SAAA,GAAAA,SAAA;AACA,gBAAAolC,KAAA,GAAAA,KAAA;AACA,gBAAAhjC,QAAA,GAAAA,QAAA;AACF,gBAAA6C,QAAA,GAAAA,QAAA;AAIR,gCAAAgB,cAAA,CAAekkB,UAAf,CAA0B,aAAA9M,IAA1B;AACA,gBAAK5W,KAAL,GAAa,OAAb;AACA,gBAAKC,UAAL,GAAkB,OAAlB;;AACA,gBAAKH,QAAL,GAAgB,UAACrV,CAAD,EAAIC,CAAJ;AAAA,iBAAU,CAACD,CAAC,CAAC8J,EAAF,CAAK5J,aAAL,CAAmBD,CAAC,CAAC6J,EAArB,CAAD,IAA6B,CAAC9J,CAAC,CAACiJ,KAAF,CAAQ/I,aAAR,CAAsBD,CAAC,CAACgJ,KAAxB,CAAxC;AAAA,SAAhB;;AACA,gBAAKzR,GAAL,CAAS,MAAT,EAAiB,EAAjB;;AACA,gBAAKA,GAAL,CAAS,cAAT,EAAyB,IAAI,aAAA20B,IAAJ,CAAS;AAAEriB,YAAE,EAAE,YAAN;AAAoBlW,cAAI,EAAE;AAA1B,SAAT,CAAzB;;AACA,gBAAK4D,GAAL,CAAS,WAAT,EAAsB,IAAtB;;AACA,gBAAKsX,SAAL,CAAesB,WAAf,CAA2BzH,IAA3B,CAAgC,YAAAyG,KAAA,CAAM,UAACC,CAAD;AAAA,iBAAOA,CAAP;AAAA,SAAN,CAAhC,EAAiDvZ,SAAjD,CAA2D;AAAA,iBAAM,QAAKua,IAAL,EAAN;AAAA,SAA3D;;AAVgC;AAWnC;AAED;;;;;;AAUA;;AACA;;;;;;iCAMgB+G,K,EAAe+8B,M,EAAyC;AAAA,cAAxBC,MAAwB,uEAAN,IAAM;;AACpE,cAAI,CAACD,MAAL,EAAa;AACT,gBAAMn1B,GAAG,GAAG,UAAA1d,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAZ;AACA08C,kBAAM,GAAGn1B,GAAG,CAACtmB,QAAJ,CAAa;AAAE4wB,kBAAI,EAAE;AAAR,aAAb,EAA0BpB,UAA1B,CAAqC,KAArC,EAA4C1mB,EAArD;AACH;;AACD,cAAMsiB,IAAI,aAAM5S,QAAQ,CAACO,MAAf,SACN,KAAKsC,QAAL,CAAcd,OAAd,CAAsB,gBAAtB,KAA2C,EADrC,qBAAV;AAGA,cAAMohC,SAAS,GAAG,MAAAC,GAAA,CAAIC,OAAJ,CAAYzwB,IAAZ,CAAlB;;AACA,cAAIzM,cAAJ,EAAoB;AAChBA,0BAAc,CAACwsB,OAAf,WAA0BwQ,SAA1B,oBAAoDj9B,KAApD;AACAC,0BAAc,CAACwsB,OAAf,WAA0BwQ,SAA1B,4BAAqDF,MAArD;AACH;;AACD,cAAIriC,YAAJ,EAAkB;AACdA,wBAAY,CAAC+xB,OAAb,WAAwBwQ,SAAxB,oBAAkDj9B,KAAlD;AACAtF,wBAAY,CAAC+xB,OAAb,WAAwBwQ,SAAxB,4BAAmDF,MAAnD;AACH;;AACD,cAAIC,MAAJ,EAAY;AACR,iBAAKljC,QAAL,CAAcsjC,EAAd,CAAiB,KAAKtjC,QAAL,CAAc4S,IAAd,EAAjB;AACH;;AACD,iBAAOA,IAAP;AACH;AAED;;;;;;;;8BAKmB/N,Y,EAAkD;AAAA,cAA3B2E,OAA2B,uEAAF,EAAE;;;;;;;;yBAC7D,KAAKxF,eAAL,CAAqBQ,S;;;;;AACrB,wBAAI,CAAC,KAAKN,SAAL,CAAe,OAAf,CAAL,EAA8B;AAC1B,2BAAKA,SAAL,CAAe,OAAf,IAA0B,IAAIlB,OAAJ,CAAkB,UAACC,OAAD,EAAUC,MAAV,EAAqB;AAC7D,+BAAI,CAAC5c,GAAL,CAAS,QAAT,EAAmB,SAAnB;;AACA,4BAAI+f,OAAO,GAAG,IAAI,OAAAC,WAAJ,EAAd;;AACA,4BAAI,CAACkD,OAAD,IAAYA,OAAO,CAAC1G,IAAR,KAAiB,KAAjC,EAAwC;AACpCuD,iCAAO,GAAGA,OAAO,CAACk9B,MAAR,CAAe,cAAf,EAA+B,mCAA/B,CAAV;AACH;;AACD,4BAAMljC,GAAG,GAAG,CAACmJ,OAAO,GAAGA,OAAO,CAACnJ,GAAX,GAAiB,EAAzB,KAAgC,cAA5C;;AACA,+BAAI,CAAC2iC,KAAL,CAAWz9B,IAAX,CAAgBlF,GAAhB,EAAqBwE,YAArB,EAAmC;AAAEwB,iCAAO,EAAPA;AAAF,yBAAnC,EAAgDzhB,SAAhD,CACI,UAACuZ,CAAD;AAAA,iCAAO,IAAP;AAAA,yBADJ,EAEI,UAACnN,CAAD;AAAA,iCAAOkS,MAAM,CAAClS,CAAD,CAAb;AAAA,yBAFJ,EAGI,YAAM;AACF,iCAAI,CAAC4M,SAAL,CAAesE,IAAf,CAAoBshC,SAApB;;AACAvgC,iCAAO;AACV,yBANL;AAQH,uBAfyB,CAA1B;AAgBH;;uDACM,KAAKiB,SAAL,CAAe,OAAf,C;;;;;;;;;AAEd;AAGD;;;;;;iCAGgB;AACZ,eAAKtG,SAAL,CAAesE,IAAf,CAAoBuhC,MAApB;AACH;AAED;;;;;;;0CAI4B;;;;;;uDACjB,KAAKvpB,IAAL,CAAU,SAAV,C;;;;;;;;;AACV;AAED;;;;;;+BAGgC;AAAA;;AAAA,cAAjBwpB,KAAiB,uEAAD,CAAC;AAC5B,cAAM9jC,OAAO,GAA4B,KAAKiD,QAAL,CAAcxG,GAAd,CAAkB,SAAlB,KAAgC,EAAzE;AACAuD,iBAAO,CAACL,IAAR,GAAe;AAAEjB,mBAAO,EAAE,0BAAX;AAAuC5c,iBAAK,EAAE;AAA9C,WAAf;;AACA,eAAKmhB,QAAL,CAAcvc,GAAd,CAAkB,SAAlB,EAA6BsZ,OAA7B;;AACA,eAAKtZ,GAAL,CAAS,QAAT,EAAmB,SAAnB;AACA,iBAAO,IAAI0c,OAAJ,CAAkB,UAACC,OAAD,EAAa;AAClC;AACA;AACA,gBAAI,OAAI,CAACe,eAAL,CAAqBQ,SAArB,IAAkCk/B,KAAK,GAAG,CAA9C,EAAiD;AAC7C,qBAAI,CAACp9C,GAAL,CAAS,QAAT,EAAmB,SAAnB;;AACAsZ,qBAAO,CAACL,IAAR,GAAe;AAAEjB,uBAAO,EAAE,0BAAX;AAAuC5c,qBAAK,EAAE;AAA9C,eAAf;;AACA,qBAAI,CAACmhB,QAAL,CAAcvc,GAAd,CAAkB,SAAlB,EAA6BsZ,OAA7B;;AACA,qBAAOqD,OAAO,EAAd;AACH;;AACD,mBAAI,CAACiX,IAAL,CAAU,SAAV,EAAqB7W,IAArB,CACI,UAAO+e,YAAP;AAAA,qBAAwB,OAAD,UAAC,CAAD,OAAC,EAAD,MAAC,EAAD,MAAC,uCAAD;AAAA;;AAAA;AAAA;AAAA;AAAA;AACnB,6BAAK97B,GAAL,CAAS,QAAT,EAAmB,WAAnB;AACA,6BAAKA,GAAL,CAAS,cAAT,EAAyB87B,YAAzB;;AACA,6BAAKjgC,YAAL,CAAkB2S,IAAlB,CAAuB,IAAvB;;AAHmB,8BAIf,KAAK+N,QAAL,IAAiB,KAAKA,QAAL,CAAcd,OAAd,CAAsB,2BAAtB,CAJF;AAAA;AAAA;AAAA;;AAKf,6BAAKmY,IAAL,CAAUkI,YAAY,CAACrqB,KAAvB,EAA8BsL,IAA9B,CACI,UAAO9D,IAAP;AAAA,iCAAgB,OAAD,UAAC,CAAD,OAAC,EAAD,MAAC,EAAD,MAAC,uCAAD;AAAA;AAAA;AAAA;AAAA;AACX,yCAAKjZ,GAAL,CAAS,cAAT,EAAyBiZ,IAAzB;;AACA,wCAAI,KAAKsD,QAAL,CAAcd,OAAd,CAAsB,0BAAtB,CAAJ,EAAuD;AACnD,2CAAK2W,QAAL,CAAc,UAAd,EAA0B;AAAA,+CAAMnZ,IAAI,CAACokC,MAAL,EAAN;AAAA,uCAA1B,EAA+C,IAA/C;AACH;;AAJU;AAKX,2CAAM,KAAKC,aAAL,YAA2B,UAAAzlC,CAAC;AAAA,6CAAI,IAAJ;AAAA,qCAA5B,CAAN;;AALW;AAMX8E,2CAAO;AACPrD,2CAAO,CAACL,IAAR,GAAe;AACXjB,6CAAO,EAAE,0BADE;AAEX5c,2CAAK,EAAE;AAFI,qCAAf;;AAIA,yCAAKmhB,QAAL,CAAcvc,GAAd,CAAkB,SAAlB,EAA6BsZ,OAA7B;;AAXW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAAC,EAAhB;AAAA,yBADJ,EAcI;AAAA,iCAAM,OAAI,CAACta,OAAL,CAAa,MAAb,EAAqB;AAAA,mCAAM,OAAI,CAACmc,IAAL,CAAU,EAAEiiC,KAAZ,EAAmBrgC,IAAnB,CAAwB;AAAA,qCAAMJ,OAAO,EAAb;AAAA,6BAAxB,CAAN;AAAA,2BAArB,EAAqEhc,IAAI,CAACq+B,GAAL,CAAS,IAAT,EAAe,MAAMoe,KAArB,CAArE,CAAN;AAAA,yBAdJ;AALe;AAAA;;AAAA;AAuBf;AACA,4BAAI,KAAK7gC,QAAL,CAAcd,OAAd,CAAsB,0BAAtB,CAAJ,EAAuD;AACnD,+BAAK2W,QAAL,CAAc,UAAd,EAA0B;AAAA,mCAAM0J,YAAY,CAACuhB,MAAb,EAAN;AAAA,2BAA1B,EAAuD,IAAvD;AACH;;AA1Bc;AA2Bf,+BAAM,KAAKC,aAAL,YAA2B,UAAAzlC,CAAC;AAAA,iCAAI,IAAJ;AAAA,yBAA5B,CAAN;;AA3Be;AA4Bf8E,+BAAO;AACPrD,+BAAO,CAACL,IAAR,GAAe;AAAEjB,iCAAO,EAAE,0BAAX;AAAuC5c,+BAAK,EAAE;AAA9C,yBAAf;;AACA,6BAAKmhB,QAAL,CAAcvc,GAAd,CAAkB,SAAlB,EAA6BsZ,OAA7B;;AA9Be;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAAC,EAAxB;AAAA,aADJ,EAkCI;AAAA,qBAAM,OAAI,CAACta,OAAL,CAAa,MAAb,EAAqB;AAAA,uBAAM,OAAI,CAACmc,IAAL,CAAU,EAAEiiC,KAAZ,EAAmBrgC,IAAnB,CAAwB;AAAA,yBAAMJ,OAAO,EAAb;AAAA,iBAAxB,CAAN;AAAA,eAArB,EAAqEhc,IAAI,CAACq+B,GAAL,CAAS,IAAT,EAAe,MAAMoe,KAArB,CAArE,CAAN;AAAA,aAlCJ;AAoCH,WA7CM,CAAP;AA8CH;;;wCAE6B;;;;;;;;AACpB3C,6B,GAAY,KAAK1e,OAAL,CAAa0e,S;;0BAC3B,CAACA,SAAD,IAAc,CAACA,SAAS,CAACl4C,M;;;;;uDAClB,E;;;AAELg7C,4B,GAA4B,E;6DAChB9C,S;;;AAAlB,gFAA6B;AAAlB+C,2BAAkB;AACzBD,gCAAQ,CAACr1C,IAAT,CAAc,KAAK0rB,IAAL,CAAU4pB,GAAG,CAAC/rC,KAAd,CAAd;AACH;;;;;;;;AACY,2BAAMiL,OAAO,CAAC+gC,GAAR,CAAYF,QAAZ,CAAN;;;AAAPh/C,wB;AACN,yBAAKyB,GAAL,CAAS,WAAT,EAAsBzB,IAAtB;AACA,yBAAKyB,GAAL,CAAS,MAAT,EAAiB,OAAA+G,MAAA,CAAO,CAAC,KAAKgP,GAAL,CAAS,MAAT,KAAoB,EAArB,EAAyBwc,MAAzB,CAAgCh0B,IAAhC,CAAP,CAAjB;uDACOA,I;;;;;;;;;AACV;AAED;;;;;;;gCAIkB0d,Q,EAAa;AAC3B,iBAAO,IAAI,aAAA0Y,IAAJ,CAAS1Y,QAAT,CAAP;AACH;;;4BAjKiB;AACd,iBAAO,KAAKlG,GAAL,CAAS,cAAT,CAAP;AACH;AAED;;;;4BACuB;AACnB,iBAAO,KAAKgmB,OAAL,IAAgB,KAAKA,OAAL,CAAazpB,EAAb,KAAoB,YAA3C;AACH;;;;MA3B6B,eAAAmL,c;;AAHlC;;;uBAGag/B,Y,EAAY,+B,EAAA,0B,EAAA,wB,EAAA,kC,EAAA,+B;AAAA,K;;;aAAZA,Y;AAAY,eAAZA,YAAY,K;AAAA,kBAFT;;;;;2BAEHA,Y,EAAY;cAHxB,OAAAvpC,UAGwB;eAHb;AACR6I,oBAAU,EAAE;AADJ,S;AAGa,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChCzB;AAAA;AAAA;;AAGA,QAAM2hC,SAAS,GAAG,IAAlB;AAEA;;;;;AAIA,aAAgBC,iBAAhB,CAAkCt9C,IAAlC,EAAiD;AAC/C,UAAM2P,IAAI,GAAG,IAAI,UAAAuB,MAAJ,CAAW;AAAElR,YAAI,EAAJA;AAAF,OAAX,CAAb;AACA,aAAO,UAAC8O,CAAD;AAAA,eAAOyuC,YAAY,CAACzuC,CAAD,EAAI9O,IAAJ,CAAnB;AAAA,OAAP;AACD;;AAHD;AAKA;;;;;;AAKA,aAAgBu9C,YAAhB,CAA6Blf,OAA7B,EAAuDmf,OAAvD,EAAyE;AACvE,UAAM7tC,IAAI,GAAG,IAAI,UAAAuB,MAAJ,CAAW;AAAClR,YAAI,EAAEw9C;AAAP,OAAX,CAAb;AACA,UAAMx9C,IAAI,GAAG,IAAI,UAAAkR,MAAJ,CAAW;AAAClR,YAAI,EAAEq+B,OAAO,CAACn7B;AAAf,OAAX,CAAb;AACA,aAAOlD,IAAI,CAACq5B,YAAL,CAAkB1pB,IAAlB,IAA0B;AAAE3P,YAAI,EAAEq9C,SAAR;AAAmB1lC,eAAO,EAAE;AAA5B,OAA1B,GAAmG,IAA1G;AACD;;AAJD;AAMA;;;;;;AAKA,aAAgB8lC,sBAAhB,CAAuCz9C,IAAvC,EAAqDw9C,OAArD,EAAuE;AACrE,UAAM7tC,IAAI,GAAG,IAAI,UAAAuB,MAAJ,CAAW;AAAClR,YAAI,EAAEw9C;AAAP,OAAX,CAAb;AACA,aAAO,UAAC1uC,CAAD;AAAA,eAAO4uC,iBAAiB,CAAC5uC,CAAD,EAAI9O,IAAJ,EAAU2P,IAAI,CAAChG,EAAf,CAAxB;AAAA,OAAP;AACD;;AAHD;AAKA;;;;;;;AAMA,aAAgB+zC,iBAAhB,CAAkCrf,OAAlC,EAA4Dr+B,IAA5D,EAA0Ew9C,OAA1E,EAA4F;AAC1F,UAAMr2B,GAAG,GAAG,IAAI,UAAAjW,MAAJ,CAAW;AAAClR,YAAI,EAAEw9C;AAAP,OAAX,CAAZ;AACA,UAAM51C,KAAK,GAAGy2B,OAAO,CAACn7B,KAAR,CAAclB,KAAd,CAAoB,GAApB,CAAd;AACA,UAAM27C,QAAQ,GAAG,IAAI,UAAAzsC,MAAJ,CAAW;AAAClR,YAAI,EAAJA;AAAD,OAAX,CAAjB;AACA,aAAO29C,QAAQ,CAAC/8C,QAAT,CAAkB;AAAE0B,YAAI,EAAE,CAACsF,KAAK,CAAC,CAAD,CAAd;AAAmBvH,cAAM,EAAE,CAACuH,KAAK,CAAC,CAAD;AAAjC,OAAlB,EAA0DyxB,YAA1D,CAAuElS,GAAvE,IAA8E;AACnFjnB,aAAK,EAAEm9C,SAD4E;AAEnF1lC,eAAO,EAAE;AAF0E,OAA9E,GAGH,IAHJ;AAID;;AARD;;AAUA,aAAgBimC,qBAAhB,GAA2E;AAAA,UAArCjf,GAAqC,uEAAvB,EAAuB;AAAA,UAAnBl7B,GAAmB,uEAAL,GAAK;AACzE,aAAO,UAACqL,CAAD;AAAA,eAAO+uC,gBAAgB,CAAC/uC,CAAD,EAAI6vB,GAAJ,EAASl7B,GAAT,CAAvB;AAAA,OAAP;AACD;;AAFD;;AAIA,aAAgBo6C,gBAAhB,CAAiCxf,OAAjC,EAAgG;AAAA,UAArCM,GAAqC,uEAAvB,EAAuB;AAAA,UAAnBl7B,GAAmB,uEAAL,GAAK;;AAC9F,UAAI46B,OAAO,CAACn7B,KAAR,IAAiBy7B,GAAG,IAAI,EAAxB,CAAJ,EAAiC;AAC/B,eAAO;AAAE59B,kBAAQ,EAAEs8C,SAAZ;AAAuB1lC,iBAAO,wCAAiCgnB,GAAjC,oBAA8CA,GAAG,KAAK,CAAR,GAAY,GAAZ,GAAkB,EAAhE;AAA9B,SAAP;AACD,OAFD,MAEO,IAAIN,OAAO,CAACn7B,KAAR,IAAiBO,GAAG,IAAI,GAAxB,CAAJ,EAAkC;AACvC,eAAO;AAAEvB,gBAAM,EAAEm7C,SAAV;AAAqB1lC,iBAAO,wCAAiClU,GAAjC,oBAA8CA,GAAG,KAAK,CAAR,GAAY,GAAZ,GAAkB,EAAhE;AAA5B,SAAP;AACD;;AACD,aAAO,IAAP;AACD;;AAPD;;AASA,aAAgBq6C,sBAAhB,CAAuCxkC,IAAvC,EAAoE;AAAA,UAAjBqlB,GAAiB,uEAAH,CAAG;AAClE,aAAO,UAAC7vB,CAAD;AAAA,eAAOivC,iBAAiB,CAACjvC,CAAD,EAAIwK,IAAJ,EAAUqlB,GAAV,CAAxB;AAAA,OAAP;AACD;;AAFD;;AAIA,aAAgBof,iBAAhB,CAAkC1f,OAAlC,EAA4D/kB,IAA5D,EAAyF;AAAA,UAAjBqlB,GAAiB,uEAAH,CAAG;;AACvF,UAAI,CAACN,OAAD,IAAY,EAAEA,OAAO,CAACn7B,KAAR,YAAyB6J,KAA3B,CAAhB,EAAmD;AACjD,eAAO4xB,GAAG,GAAG,CAAN,GACH;AAAEqf,iBAAO,EAAE,IAAX;AAAiBrmC,iBAAO,uBAAgBgnB,GAAhB,sBAA+BA,GAAG,KAAK,CAAR,GAAY,KAAZ,GAAoB,OAAnD;AAAxB,SADG,GAEH,IAFJ;AAGD;;AACD,UAAMzgC,IAAI,GAAWmgC,OAAO,CAACn7B,KAA7B;;AACA,UAAIoW,IAAJ,EAAU;AACR,YAAM8E,MAAM,GAAGlgB,IAAI,CAACsF,IAAL,CAAU,UAAA2E,CAAC;AAAA,iBAAIA,CAAC,CAACiJ,KAAF,KAAYkI,IAAI,CAAClI,KAArB;AAAA,SAAX,CAAf;;AACA,YAAIgN,MAAJ,EAAY;AACVlgB,cAAI,CAACuO,MAAL,CAAYvO,IAAI,CAACkF,OAAL,CAAagb,MAAb,CAAZ,EAAkC,CAAlC;AACD;AACF;;AACD,aAAOlgB,IAAI,CAACgE,MAAL,IAAey8B,GAAf,GAAqB,IAArB,GAA4B;AACjC52B,aAAK,EAAE,IAD0B;AAEjC4P,eAAO,uBAAgBgnB,GAAhB,sBAA+BA,GAAG,KAAK,CAAR,GAAY,KAAZ,GAAoB,OAAnD;AAF0B,OAAnC;AAID;;AAjBD;;AAmBA,aAAgBtC,eAAhB,CAAgC4hB,aAAhC,EAAgE;AAC9D,aAAO,UAAC5f,OAAD,EAA8B;AACnC;AACA,YAAMlX,GAAG,GAAG,UAAA1d,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAZ;AACA,eAAOq+C,aAAa,CAAC/6C,KAAd,CAAoBrC,QAApB,CAA6B;AAAEJ,iBAAO,EAAE49B,OAAO,CAACn7B,KAAR,IAAiB;AAA5B,SAA7B,EAA+Dm2B,YAA/D,CAA4ElS,GAA5E,IAAkF;AAAEkH,kBAAQ,EAAE;AAAZ,SAAlF,GAAuG,IAA9G;AACD,OAJD;AAKD;;AAND;;AAQA,aAAgB6vB,qBAAhB,CAAsC7f,OAAtC,EAAgE;AAC9D,UAAMn7B,KAAK,GAAGm7B,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAEn7B,KAAvB;;AACA,UAAKA,KAAK,KAAK,EAAf,EAAmB;AACf,eAAO,IAAP,CADe,CACF;AAChB;;AACD,UAAMi7C,YAAY,GAAGj7C,KAAK,CAACk7C,IAAN,GAAal8C,MAAb,KAAwB,CAA7C,CAL8D,CAM9D;;AACA,aAAO,CAACi8C,YAAD,GAAgB,IAAhB,GAAuB;AAAEE,kBAAU,EAAE;AAAd,OAA9B;AACD;;AARD;;;;;;;;;;;;;;;;;;;;;;;;ACnGA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACAA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA,aAAS93C,OAAT,CAAiBrD,KAAjB,EAAgChB,MAAhC,EAA8C;AAC1C,UAAIsE,GAAG,aAAMtD,KAAN,CAAP;;AACA,aAAOsD,GAAG,CAACtE,MAAJ,GAAaA,MAApB;AAA4BsE,WAAG,cAAOA,GAAP,CAAH;AAA5B;;AACA,aAAOA,GAAP;AACH;;AASD,QAAM2gB,GAAG,GAAG,IAAIvnB,IAAJ,EAAZ;;QAEasR,M;AAST,sBAAYqF,IAAZ,EAAiC;AAAA;;AALjC,aAAAiR,WAAA,GAAuB,IAAvB;AAMI,aAAK82B,QAAL,GAAgB,QAAO/nC,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEvW,IAAb,MAAsB,QAAtB,GAAiC,QAAA2C,QAAA,CAASC,UAAT,CAAoB2T,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEvW,IAA1B,CAAjC,GAAmE,CAAAuW,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEvW,IAAN,IAAauW,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEvW,IAAnB,GAA0B,QAAA2C,QAAA,CAASC,UAAT,CAAoBukB,GAAG,CAACtkB,OAAJ,EAApB,CAA7G;AACA,aAAK2kB,WAAL,GAAmB,CAAAjR,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEiR,WAAN,MAAsB,KAAtB,GAA8BjR,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEiR,WAApC,GAAkD,IAArE;AACA,aAAKgP,OAAL,GAAe,CAAAjgB,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEigB,OAAN,KAAiB,KAAhC;AACA,aAAK+nB,QAAL,GAAgB,QAAA57C,QAAA,CAASwkB,GAAT,GAAeq3B,QAA/B;AACA,aAAK/2B,WAAL,GAAmB,CAAAlR,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEkR,WAAN,KAAqB,KAAK82B,QAA7C;AACA,aAAKv+C,IAAL,GAAY,CAAC,KAAKwnB,WAAN,GAAoB,KAAK82B,QAAL,CAAcvK,OAAd,CAAsB,KAAKtsB,WAA3B,CAApB,GAA8D,KAAK62B,QAA/E;AACA,aAAK16B,KAAL,GAAa,KAAK5jB,IAAL,CAAU6B,OAAvB;AACH,O,CAED;;;;;iCAsDiB48C,U,EAAoBC,I,EAAyC;AAAA,cAApBC,QAAoB,uEAAT,SAAS;AAC1E,iBAAO,KAAK3+C,IAAL,CAAUsD,IAAV,CAAem7C,UAAU,CAACz+C,IAA1B,EAAgC0+C,IAAhC,EAAsCC,QAAtC,CAAP;AACH,S,CAED;;;;qCACqBD,I,EAAoB;AACrC;AACA,cAAIE,OAAO,GAAG,IAAI1tC,MAAJ,CAAW,MAAD,OAAC,CAAD,kBAAK,IAAL,CAAC,EAAQ;AAAElR,gBAAI,EAAE,KAAKA,IAAL,CAAU6+C,OAAV,CAAkBH,IAAlB;AAAR,WAAR,CAAX,CAAd,CAFqC,CAGrC;;AACA,cAAIA,IAAI,KAAK,MAAb,EAAqB;AACjB,gBAAI,KAAKjrB,WAAL,KAAqB,CAAzB,EAA4B;AACxB;AACAmrB,qBAAO,GAAI,IAAI1tC,MAAJ,CAAW,MAAD,OAAC,CAAD,kBAAM,IAAN,CAAC,EAAS;AAAElR,oBAAI,EAAE,KAAKA;AAAb,eAAT,CAAX,CAAX;AACH,aAHD,MAGO,IAAI,KAAKyzB,WAAL,KAAqB,CAAzB,EAA4B;AAC/B;AACA,kBAAMqrB,MAAM,GAAI,IAAI5tC,MAAJ,CAAW,MAAD,OAAC,CAAD,kBAAM,IAAN,CAAC,EAAS;AAAElR,oBAAI,EAAE,KAAKA;AAAb,eAAT,CAAX,CAAhB;AACA4+C,qBAAO,GAAGE,MAAM,CAACrtC,aAAP,CAAqB;AAAEggB,oBAAI,EAAE;AAAR,eAArB,CAAV;AACH,aAJM,MAIA;AACH;AACA,kBAAMqtB,OAAM,GAAG,IAAI5tC,MAAJ,CAAW,MAAD,OAAC,CAAD,kBAAK,IAAL,CAAC,EAAQ;AAAElR,oBAAI,EAAE,KAAKA,IAAL,CAAU6+C,OAAV,CAAkBH,IAAlB;AAAR,eAAR,CAAX,CAAf;;AACAE,qBAAO,GAAGE,OAAM,CAACrtC,aAAP,CAAqB;AAAEggB,oBAAI,EAAE;AAAR,eAArB,CAAV;AACH;AACJ;;AAED,iBAAOmtB,OAAP;AACH,S,CAED;;;;mCACmBF,I,EAAoB;AACnC;AACA,cAAIE,OAAO,GAAG,IAAI1tC,MAAJ,CAAW,MAAD,OAAC,CAAD,kBAAK,IAAL,CAAC,EAAQ;AAAElR,gBAAI,EAAE,KAAKA,IAAL,CAAU6+C,OAAV,CAAkBH,IAAlB;AAAR,WAAR,CAAX,CAAd,CAFmC,CAGnC;;AACA,cAAIA,IAAI,KAAK,MAAb,EAAqB;AACjB,gBAAI,KAAKjrB,WAAL,KAAqB,CAAzB,EAA4B;AACxB;AACAmrB,qBAAO,GAAI,IAAI1tC,MAAJ,CAAW,MAAD,OAAC,CAAD,kBAAM,IAAN,CAAC,EAAS;AAAElR,oBAAI,EAAE,KAAKA;AAAb,eAAT,CAAX,CAAX;AACH,aAHD,MAGO,IAAI,KAAKyzB,WAAL,KAAqB,CAAzB,EAA4B;AAC/B;AACA;AACA,kBAAMsrB,MAAM,GAAI,IAAI7tC,MAAJ,CAAW,MAAD,OAAC,CAAD,kBAAM,IAAN,CAAC,EAAS;AAAElR,oBAAI,EAAE,KAAKA;AAAb,eAAT,CAAX,EAAyCa,QAAzC,CAAkD;AAAE4wB,oBAAI,EAAE;AAAR,eAAlD,CAAhB;AACAmtB,qBAAO,GAAGG,MAAM,CAAC1uB,UAAP,CAAkBquB,IAAlB,EAAwBjtC,aAAxB,CAAsC;AAAEggB,oBAAI,EAAE;AAAR,eAAtC,CAAV,CAJ+B,CAI+B;AACjE,aALM,MAKA;AACH;AACA;AACA,kBAAMutB,KAAK,GAAG,IAAI9tC,MAAJ,CAAW,MAAD,OAAC,CAAD,kBAAK,IAAL,CAAC,EAAQ;AAAElR,oBAAI,EAAE,KAAKA,IAAL,CAAUi/C,KAAV,CAAgBP,IAAhB;AAAR,eAAR,CAAX,CAAd;AACAE,qBAAO,GAAGI,KAAK,CAACvtC,aAAN,CAAoB;AAAEggB,oBAAI,EAAE;AAAR,eAApB,CAAV;AACH;AACJ,WAfD,MAeO;AACHmtB,mBAAO,GAAI,IAAI1tC,MAAJ,CAAW,MAAD,OAAC,CAAD,kBAAK,IAAL,CAAC,EAAQ;AAAElR,kBAAI,EAAE,KAAKA,IAAL,CAAUi/C,KAAV,CAAgBP,IAAhB;AAAR,aAAR,CAAX,CAAX;AACH;;AAED,iBAAOE,OAAP;AACH;;;qCAEgB;AACb,cAAM5E,GAAG,GAAG,IAAI9oC,MAAJ,CAAW;AAAClR,gBAAI,EAAE,KAAKs+C;AAAZ,WAAX,CAAZ;AACA,iBAAO,KAAK9nB,OAAL,GACL,KAAK9sB,YAAL,CAAkB,KAAlB,EAAyBC,EAAzB,GAA8B,KAAKsvB,QAAL,CAAc+gB,GAAd,EAAmB,SAAnB,CADzB,GAEL,KAAKrwC,EAFP;AAGH,S,CAED;;;;gCACY;AACR;AACA,iBAAO,KAAK9I,QAAL,CAAc;AAAE6Q,mBAAO,EAAE;AAAX,WAAd,CAAP;AACH,S,CAED;;;;iCACiB3Q,Q,EAAwBm+C,gB,EAA0B;AAC/D,iBAAO,IAAIhuC,MAAJ,CAAW,MAAD,OAAC,CAAD,kBAAK,IAAL,CAAC,EAAQ;AAAElR,gBAAI,EAAEk/C,gBAAgB,GAAG,KAAKl/C,IAAL,CAAUQ,IAAV,CAAeO,QAAf,EAAyBk+C,KAAzB,CAA+B,OAA/B,CAAH,GAA6C,KAAKj/C,IAAL,CAAUQ,IAAV,CAAeO,QAAf;AAArE,WAAR,CAAX,CAAP;AACH,S,CAED;;;;sCACsBA,Q,EAAsB;AACxC,cAAM69C,OAAO,GAAG,IAAI1tC,MAAJ,CAAW,MAAD,OAAC,CAAD,kBAAK,IAAL,CAAC,EAAQ;AAAElR,gBAAI,EAAE,KAAKA,IAAL,CAAUm/C,KAAV,CAAgBp+C,QAAhB;AAAR,WAAR,CAAX,CAAhB;AACA,iBAAO69C,OAAP;AACH;;;iCAEgB7hC,G,EAAoB;AACjC,cAAM6hC,OAAO,GAAG,IAAI1tC,MAAJ,CAAW,MAAD,OAAC,CAAD,kBAAK,IAAL,CAAC,EAAQ;AAAElR,gBAAI,EAAE,KAAKA,IAAL,CAAUL,GAAV,CAAcod,GAAd;AAAR,WAAR,CAAX,CAAhB;AACA,iBAAO6hC,OAAP;AACH;;;mCAEkBx3C,M,EAAc;AAC7B;AACA;AACA;AACA,iBAAO,KAAKpH,IAAL,CAAUQ,IAAV,CAAe;AAAEkR,mBAAO,EAAE;AAAX,WAAf,EAA+B3O,QAA/B,CAAwCqE,MAAxC,CAAP;AACH;;;wCAEuBA,M,EAAc;AAClC;AACA,iBAAO,KAAKpH,IAAL,CAAUQ,IAAV,CAAe;AAAEkR,mBAAO,EAAE;AAAX,WAAf,EAA+BqiC,OAA/B,CAAuC,KAAKwK,QAA5C,EAAsDx7C,QAAtD,CAA+DqE,MAA/D,CAAP;AACH;;;mCAEiBq3C,U,EAAoBv7C,K,EAAmB;AACrD,iBAAO,KAAKlD,IAAL,CAAUo/C,OAAV,CAAkBX,UAAU,CAACz+C,IAA7B,EAAmCkD,KAAnC,CAAP;AACH;;;oCAEkBu7C,U,EAAoBC,I,EAAmB;AACtD,kBAAQA,IAAR;AACI,iBAAK,MAAL;AACI,qBAAO,KAAKW,QAAL,GAAgBZ,UAAU,CAACY,QAAlC;;AACJ,iBAAK,OAAL;AACI,kBAAG,KAAK/lB,WAAL,CAAiBmlB,UAAjB,EAA6B,MAA7B,CAAH,EAAwC;AACpC,uBAAO,IAAP;AACH,eAFD,MAEM,IAAG,CAAC,KAAKlgB,UAAL,CAAgBkgB,UAAhB,EAA4B,MAA5B,CAAJ,EAAwC;AAC1C,uBAAO,KAAP;AACH,eAFK,MAED;AACD,uBAAO,KAAKa,SAAL,GAAiBb,UAAU,CAACa,SAAnC;AACH;;AACL,iBAAK,KAAL;AACI,kBAAG,KAAKhmB,WAAL,CAAiBmlB,UAAjB,EAA6B,OAA7B,CAAH,EAAyC;AACrC,uBAAO,IAAP;AACH,eAFD,MAEM,IAAG,CAAC,KAAKlgB,UAAL,CAAgBkgB,UAAhB,EAA4B,OAA5B,CAAJ,EAAyC;AAC3C,uBAAO,KAAP;AACH,eAFK,MAED;AACD,uBAAO,KAAKc,OAAL,GAAed,UAAU,CAACc,OAAjC;AACH;;AACL,iBAAK,MAAL;AACI,kBAAG,KAAKjmB,WAAL,CAAiBmlB,UAAjB,EAA6B,KAA7B,CAAH,EAAuC;AACnC,uBAAO,IAAP;AACH,eAFD,MAEM,IAAG,CAAC,KAAKlgB,UAAL,CAAgBkgB,UAAhB,EAA4B,KAA5B,CAAJ,EAAuC;AACzC,uBAAO,KAAP;AACH,eAFK,MAED;AACD,uBAAO,KAAK9Q,QAAL,GAAgB8Q,UAAU,CAAC9Q,QAAlC;AACH;;AACL,iBAAK,QAAL;AACI,kBAAG,KAAKrU,WAAL,CAAiBmlB,UAAjB,EAA6B,MAA7B,CAAH,EAAwC;AACpC,uBAAO,IAAP;AACH,eAFD,MAEM,IAAG,CAAC,KAAKlgB,UAAL,CAAgBkgB,UAAhB,EAA4B,MAA5B,CAAJ,EAAwC;AAC1C,uBAAO,KAAP;AACH,eAFK,MAED;AACD,uBAAO,KAAKh+C,OAAL,GAAeg+C,UAAU,CAACh+C,OAAjC;AACH;;AACL;AACI,qBAAO,KAAKkJ,EAAL,GAAU80C,UAAU,CAAC90C,EAA5B;AApCR;AAsCH;;;qCAEmB80C,U,EAAoBC,I,EAAmB;AACvD,kBAAQA,IAAR;AACI,iBAAK,MAAL;AACI,qBAAO,KAAKW,QAAL,GAAgBZ,UAAU,CAACY,QAAlC;;AACJ,iBAAK,OAAL;AACI,kBAAG,KAAKhmB,YAAL,CAAkBolB,UAAlB,EAA8B,MAA9B,CAAH,EAAyC;AACrC,uBAAO,IAAP;AACH,eAFD,MAEM,IAAG,CAAC,KAAKlgB,UAAL,CAAgBkgB,UAAhB,EAA4B,MAA5B,CAAJ,EAAwC;AAC1C,uBAAO,KAAP;AACH,eAFK,MAED;AACD,uBAAO,KAAKa,SAAL,GAAiBb,UAAU,CAACa,SAAnC;AACH;;AACL,iBAAK,KAAL;AACI,kBAAG,KAAKjmB,YAAL,CAAkBolB,UAAlB,EAA8B,OAA9B,CAAH,EAA0C;AACtC,uBAAO,IAAP;AACH,eAFD,MAEM,IAAG,CAAC,KAAKlgB,UAAL,CAAgBkgB,UAAhB,EAA4B,OAA5B,CAAJ,EAAyC;AAC3C,uBAAO,KAAP;AACH,eAFK,MAED;AACD,uBAAO,KAAKc,OAAL,GAAed,UAAU,CAACc,OAAjC;AACH;;AACL,iBAAK,MAAL;AACI,kBAAG,KAAKlmB,YAAL,CAAkBolB,UAAlB,EAA8B,KAA9B,CAAH,EAAwC;AACpC,uBAAO,IAAP;AACH,eAFD,MAEM,IAAG,CAAC,KAAKlgB,UAAL,CAAgBkgB,UAAhB,EAA4B,KAA5B,CAAJ,EAAuC;AACzC,uBAAO,KAAP;AACH,eAFK,MAED;AACD,uBAAO,KAAK9Q,QAAL,GAAgB8Q,UAAU,CAAC9Q,QAAlC;AACH;;AACL,iBAAK,QAAL;AACI,kBAAG,KAAKtU,YAAL,CAAkBolB,UAAlB,EAA8B,MAA9B,CAAH,EAAyC;AACrC,uBAAO,IAAP;AACH,eAFD,MAEM,IAAG,CAAC,KAAKlgB,UAAL,CAAgBkgB,UAAhB,EAA4B,MAA5B,CAAJ,EAAwC;AAC1C,uBAAO,KAAP;AACH,eAFK,MAED;AACD,uBAAO,KAAKh+C,OAAL,GAAeg+C,UAAU,CAACh+C,OAAjC;AACH;;AACL;AACI,qBAAO,KAAKkJ,EAAL,GAAU80C,UAAU,CAAC90C,EAA5B;AApCR;AAsCH;;;+BAEa2jC,E,EAAU;AACpB,cAAMsR,OAAO,GAAG,IAAI1tC,MAAJ,CAAW,MAAD,OAAC,CAAD,kBACnB,IADmB,CAAC,EAChB;AACPlR,gBAAI,EAAE,KAAKA,IAAL,CAAU+zC,OAAV,CAAkBzG,EAAlB,CADC;AAEP7lB,uBAAW,EAAE6lB,EAFN;AAGP9lB,uBAAW,EAAE;AAHN,WADgB,CAAX,CAAhB;AAMA,iBAAOo3B,OAAP;AACH;;;qCAEmB76C,S,EAAiB;AACjC,cAAM66C,OAAO,GAAG,IAAI1tC,MAAJ,CAAW,MAAD,OAAC,CAAD,kBACnB,IADmB,CAAC,EAChB;AACPlR,gBAAI,EAAE+D;AADC,WADgB,CAAX,CAAhB;AAIA,iBAAO66C,OAAP;AACH;;;AAMD;oCACoC;AAAA,cAAlB9+B,KAAkB,uEAAF,EAAE;AAChCpa,iBAAO,CAACV,GAAR,WAAe8a,KAAf,0BAA2C,KAAKjf,QAAL,CAAc;AAAE6Q,mBAAO,EAAE;AAAX,WAAd,EAA8BzG,eAA9B,CAA8C,wBAA9C,CAA3C,EAAoH,KAAKszC,QAAzH;AACA74C,iBAAO,CAACV,GAAR,WAAe8a,KAAf,6BAA8C,KAAKjf,QAAL,CAAc;AAAE6Q,mBAAO,EAAE;AAAX,WAAd,EAA8BpQ,UAA9B,CAAyC,wBAAzC,CAA9C,EAAkH,KAAKmmB,WAAvH;AACH;;;4BApQY;AACT,iBAAO,KAAKznB,IAAL,CAAU6C,OAAV,EAAP;AACH,S,CAED;;;;4BACkB;AACd,iBAAOvC,IAAI,CAACk/C,KAAL,CAAW,KAAKx/C,IAAL,CAAUy/C,SAAV,EAAX,CAAP;AACH,S,CAED;;;;4BACiB;AACb,iBAAO,KAAKz/C,IAAL,CAAUI,MAAjB;AACH,S,CAED;;;;4BACkB;AACd,iBAAO,KAAKJ,IAAL,CAAUK,MAAjB;AACH,S,CAED;;;;4BACgB;AACZ,iBAAO,KAAKL,IAAL,CAAUsC,IAAjB;AACH;;;4BAEa;AACV,cAAMs8C,OAAO,GAAG,IAAI1tC,MAAJ,CAAW,MAAD,OAAC,CAAD,kBAAK,IAAL,CAAC,EAAQ;AAAElR,gBAAI,EAAE,KAAKA,IAAL,CAAU0/C,KAAV;AAAR,WAAR,CAAX,CAAhB;AACA,iBAAOd,OAAO,CAACltC,OAAf;AACH;;;4BAEiB;AACd,iBAAO,KAAK1R,IAAL,CAAUmE,GAAjB;AACH;;;4BAEkB;AACf,iBAAO,KAAKnE,IAAL,CAAUsC,IAAjB;AACH;;;4BAEkB;AACf,iBAAO,KAAKtC,IAAL,CAAUqC,IAAjB;AACH;;;4BAEqB;AAClB,cAAI;AACA,mBAAO,KAAKrC,IAAL,CAAU8E,OAAjB;AACH,WAFD,CAEE,OAAOuF,CAAP,EAAU;AACR,mBAAO,KAAKrK,IAAL,CAAU2/C,QAAV,GAAqBC,MAArB,EAAP;AACH;AACJ;;;4BAEmB;AAChB,iBAAO,KAAK5/C,IAAL,CAAUoC,KAAjB;AACH;;;4BAyMgB;AACb,iBAAO,KAAKpC,IAAL,CAAU2/C,QAAV,EAAP;AACH;;;;;;AAlRL;;AA2Ra,YAAAl2C,OAAA,GAAU,YAA6B;AAAA,UAA5BzJ,IAA4B,uEAAf,IAAIJ,IAAJ,EAAe;AAChD,aAAO,IAAIsR,MAAJ,CAAW;AAAClR,YAAI,EAAEA,IAAI,CAAC6C,OAAL;AAAP,OAAX,CAAP;AACH,KAFY,C,CAIb;;;AACa,YAAAg9C,sCAAA,GAAyC,UAAC97C,SAAD,EAAoB+7C,gBAApB,EAAyD;AAC3G,UAAM9/C,IAAI,GAAG,IAAIJ,IAAJ,CAASmE,SAAT,CAAb;AACA,aAAO,IAAImN,MAAJ,CAAW;AAAElR,YAAI,EAAE+D,SAAR;AAAmB0jB,mBAAW,EAAEq4B,gBAAhC;AAAkDt4B,mBAAW,EAAE;AAA/D,OAAX,EAAmF5mB,QAAnF,CAA4F;AAC/FuD,WAAG,EAAEnE,IAAI,CAACoE,OAAL,EAD0F;AAE/F9B,YAAI,EAAEtC,IAAI,CAACkuC,QAAL,EAFyF;AAG/F7tC,cAAM,EAAEL,IAAI,CAACouC,UAAL;AAHuF,OAA5F,CAAP;AAKH,KAPY,C,CASb;;;AACa,YAAA2R,sCAAA,GAAyC,UAACh8C,SAAD,EAAoB+7C,gBAApB,EAAyD;AAC3G,UAAMvB,QAAQ,GAAG,QAAA57C,QAAA,CAASwkB,GAAT,GAAeq3B,QAAhC;AACA,UAAMwB,WAAW,GAAG,cAAAC,iBAAA,CAAkB1B,QAAlB,EAA4B,IAAI3+C,IAAJ,CAASmE,SAAT,CAA5B,CAApB;AACA,UAAMm8C,aAAa,GAAG,cAAAD,iBAAA,CAAkBH,gBAAlB,EAAoC,IAAIlgD,IAAJ,CAASmE,SAAT,CAApC,CAAtB;;AACA,UAAIi8C,WAAW,GAAGE,aAAlB,EAAiC;AAC7B,YAAMC,IAAI,GAAGp8C,SAAS,IAAIi8C,WAAW,GAAGE,aAAlB,CAAtB;AACA,eAAQ,IAAIhvC,MAAJ,CAAW;AAAClR,cAAI,EAAEmgD,IAAP;AAAa14B,qBAAW,EAAEq4B,gBAA1B;AAA4Ct4B,qBAAW,EAAE;AAAzD,SAAX,CAAR;AACH,OAHD,MAGO;AACH,YAAM24B,KAAI,GAAGp8C,SAAS,IAAIm8C,aAAa,GAAGF,WAApB,CAAtB;;AACA,eAAQ,IAAI9uC,MAAJ,CAAW;AAAClR,cAAI,EAAEmgD,KAAP;AAAa14B,qBAAW,EAAEq4B,gBAA1B;AAA4Ct4B,qBAAW,EAAE;AAAzD,SAAX,CAAR;AACH;AACJ,KAXY;;AAaA,YAAA44B,aAAA,GAAgB,YAAM;AAC/B,aAAOpsB,IAAI,CAACC,cAAL,GAAsBC,eAAtB,GAAwCC,QAA/C;AACH,KAFY;;AAIA,YAAA4E,uBAAA,GAA0B,UAACuU,EAAD,EAAgB;AACnD,UAAM+S,cAAc,GAAG//C,IAAI,CAACY,KAAL,CAAW,cAAA++C,iBAAA,CAAkB3S,EAAlB,IAAwB,IAAxB,GAA+B,EAA1C,CAAvB;AACA,UAAMjmC,KAAK,GAAG/G,IAAI,CAACY,KAAL,CAAWm/C,cAAc,GAAC,EAA1B,CAAd;AACA,UAAM5/C,OAAO,GAAG4/C,cAAc,GAAG,EAAjC;AACA,uBAAUA,cAAc,GAAG,CAAjB,GAAqB,GAArB,GAA2B,GAArC,SAA2C95C,OAAO,CAACjG,IAAI,CAAC04B,GAAL,CAAS3xB,KAAT,CAAD,EAAkB,CAAlB,CAAlD,SAAyEd,OAAO,CAAC9F,OAAD,EAAU,CAAV,CAAhF;AACH,KALY;;AAOb,aAAgB6/C,WAAhB,GAAuD;AAAA,UAA3Bp9C,KAA2B,uEAAX,QAAAuG,OAAA,EAAW;AACnD;AACA,aAAOvG,KAAK,CAACukB,WAAN,CAAkB3N,QAAlB,CAA2B,UAA3B,IAAyC5W,KAAzC,GAAkD,IAAIgO,MAAJ,CAAW;AAChElR,YAAI,EAAEkD,KAAK,CAACtC,QAAN,CAAe;AAAE0B,cAAI,EAAE,EAAR;AAAYjC,gBAAM,EAAE;AAApB,SAAf,EAAwCsJ,EADkB;AAEhE6d,mBAAW,EAAE,KAFmD;AAGhEC,mBAAW,EAAE;AAHmD,OAAX,EAItD7mB,QAJsD,CAI7C;AAAE0B,YAAI,EAAE,EAAR;AAAYjC,cAAM,EAAE;AAApB,OAJ6C,CAAzD;AAKH;;AAPD;AASA;;AACA,aAAgBkgD,cAAhB,CAA+BjT,EAA/B,EAAyC;AACrC,UAAMzZ,KAAK,GAAG,QAAApqB,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAd;AACA,UAAM8D,MAAM,GAAGmwB,KAAK,CAAC7zB,IAAN,CAAW0D,MAAX,GAAoBmwB,KAAK,CAACzpB,MAAN,CAAakjC,EAAb,EAAiBttC,IAAjB,CAAsB0D,MAAzD;AACA,aAAO;AAACjD,eAAO,EAAEiD,MAAV;AAAkB2D,aAAK,EAAE3D,MAAM,GAAC;AAAhC,OAAP;AACH;;AAJD;;AAMA,aAAgBmB,OAAhB,CAAyB7E,IAAzB,EAA+B4E,QAA/B,EAAyC;AAErC,aAAO,IAAIsM,MAAJ,CAAW;AACdlR,YAAI,EAAEsgD,WAAW,CAACtgD,IAAD,CAAX,CAAkB2J,EADV;AAEd6d,mBAAW,EAAE,KAFC;AAGdC,mBAAW,EAAE7iB;AAHC,OAAX,EAIJ25B,UAJI,CAKH,IAAIrtB,MAAJ,CAAW;AACPlR,YAAI,EAAEJ,IAAI,CAACunB,GAAL,EADC;AAEPK,mBAAW,EAAE,KAFN;AAGPC,mBAAW,EAAE7iB;AAHN,OAAX,CALG,EAUH,KAVG,CAAP;AAYH;;AAdD;;;;;;;;;;;;;;;;;;;;;;;;ACpWA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACFA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;QAMa47C,iB;;;;AAJb;;YAIaA;;;;yBAAAA,iB;AAAiB,O;AAAA,iBAFf,E;AAAE,gBADJ,CAAC,SAAAvlD,YAAD,CACI;;;;+EAEJulD,iB,EAAiB;AAAA,kBAHhB,SAAAvlD,YAGgB;AAAA,O;AAHJ,K;;;;;2BAGbulD,iB,EAAiB;cAJ7B,OAAAtlD,QAI6B;eAJpB;AACNC,iBAAO,EAAE,CAAC,SAAAF,YAAD,CADH;AAENwlD,mBAAS,EAAE;AAFL,S;AAIoB,Q;;;;;;;;;;;;;;;;;;;;;;ACP9B;AAAA;AAAA;;;;;;AAMa,YAAAC,iBAAA,GAAoB,2BAApB;;QAKAC,kB;AAUT,kCAA+CC,WAA/C,EAA6E;AAAA;;AAA9B,aAAAA,WAAA,GAAAA,WAAA;AAC9C;;;;4BAToB;AACjB,iBAAO,KAAKA,WAAL,CAAiBC,UAAxB;AACH;;;4BAEoB;AACjB,iBAAO,KAAKD,WAAL,CAAiBjmC,UAAxB;AACH;;;;;;AAXL;;;uBAGagmC,kB,EAAkB,YAUP,QAAAD,iBAVO,C;AAUU,K;;;aAV5BC,kB;AAAkB,eAAlBA,kBAAkB,K;AAAA,kBAFf;;;;;2BAEHA,kB,EAAkB;cAH9B,OAAA9tC,UAG8B;eAHnB;AACR6I,oBAAU,EAAE;AADJ,S;AAGmB,Q;;;;kBAUd,OAAAi1B,M;mBAAO,QAAA+P,iB;;;;;;;;;;;;;;;;;;;;;;;QCrBxB;;AACA;;AACa,YAAApQ,OAAA,GAAU;AACnB,eAAS,KADU;AAEnB,aAAO,WAFY;AAGnB,cAAQ,WAHW;AAInB,kBAAY,IAJO;AAKnB,aAAO,IALY;AAMnB,gBAAU,IANS;AAOnB,gBAAU,WAPS;AAQnB,sBAAgB,IARG;AASnB,iBAAW,OATQ;AAUnB,cAAQ;AAVW,KAAV;AAYb;;;;;;;;;;;;;;;;;;;;;;;;;ACdA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;ACTA;AAAA;AAAA;;AAOA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAqBA;AAAA;AAAA;;AAMA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvBgB;AAAqC;AAAU;;;;;;AAC/C;AAAoD;AAAU;;;;;;AAElE;AAAgD;AAAiC;;;;;;AAGrE;AAA4B;AAAC;;;;;;AAI9B;AAA2B;AAAC;;;;;;AAItB;AAAiC;AAAC;;;;;;;;AAEnD;AAGI;AAAA;AAAA;AAAA;AAAA;AAEA;AACJ;;;;;;AATJ;AACI;AAAO;AAAU;AAAyC;AAAC;AAC3D;AAAmB;AAAgB;AACnC;AAOJ;;;;;AAT2B;AAAA;AACJ;AAAA;AAGf;AAAA;;;;;;AAOW;AAA+B;AAAC;;;;;;AAKL;AAA+B;AAAC;;;;;;AAO9D;AAKI;AACJ;;;;;;AAHI;;;;;;AAIJ;AAeI;AACJ;;;;;;AAbI;;;;;;AAZR;AACI;AAAuC;AAAsB;AAC7D;AAOA;AAiBJ;;;;;;AAzBsB;AAAA;AAAqB;AAAA;AAGnC;AAAA;AAOA;AAAA;;;;;;AAgBR;AAA8C;AAAY;;;;;;;;AAE9D;AAGI;AAAA;AAAA;AAAA;AAAA;AAEA;AACJ;;;;;AADI;AAAA;;;;;;AAKG;AAAgC;AAAC;;;;;;AAI5B;AAAgC;AAAC;;;;;;AADrD;AACI;AAAO;AAAS;AAAwC;AAAC;AACzD;AACI;AACJ;AACJ;;;;;AAJ0B;AAAA;AACH;AAAA;AACf;AAAA;;;;;;AAKyC;AAAgC;AAAC;;;;;;AAI1E;AAA8C;AAAoB;;;;;;AAStD;AACI;AAAiE;AAE/D;AACN;;;;;;AAHO;AAAA;AAA8D;AAAA;;;;;;AAR7E;AAKI;AACI;AAAkB;AAAe;AACjC;AAKJ;AACJ;;;;;AAVI;AAGsB;AAAA;AACC;AAAA;;;;;;;;AAQ/B;AAGI;AAAA;AAAA;AAAA;AAAA;AAEA;AACJ;;;;;AADI;AAAA;;;;;;AAO2D;AAAsB;AAAE;;;;;;AAAvF;AAAmD;AAAY;AACnE;;;;;;AADuD;AAAA;AAAkB;AAAA;;;;;;AAK7D;AAA2B;AAAC;;;;;;AAKU;AAA+B;AAAC;;;;;;AAK1E;AACI;AACI;AAAkB;AAAyC;AAC3D;AACI;;AAEJ;AACJ;AACJ;;;;;AAN0B;AAAA;AAEd;AAAA;;;;;;;;AAMhB;AAGI;AAAA;AAAA;AAAA;AAAA;AAEA;AACJ;;;;;AADI;AAAA;;;;;;;;;;;;;;AAvKpB;AACI;AACI;AACI;AAGJ;AACA;AACI;AASA;AACI;AACA;AACA;AACJ;AACA;AACJ;AACA;AACI;AAAO;AAAK;AAAoC;AAAC;AACjD;AAAmB;AAAyB;AAChD;AACA;AACI;AAAO;AAAI;AAAmC;AAAC;AAC/C;AAAmB;AAAU;AACjC;AACA;AAWA;AACI;AAAO;AAAQ;AAAuC;AAAC;AACvD;AAAmB;AAAc;AACrC;AACA;AACI;AACK;AAAqC;AACrC;AAAC;AAEN;AACI;AACI;AA2BA;AACJ;AACA;AAOJ;AACJ;AACA;AACI;AAAO;AAAI;AAAwC;AAAC;AACpD;AAAmB;AAAyC;AAChE;AACA;AAMA;AACI;AACK;AAAwC;AACxC;AAAC;AAEN;AACI;AACA;AACI;AAcJ;AACA;AAOJ;AACJ;AACA;AACI;AAAO;AAAyC;AAChD;AACI;AAEJ;AACJ;AACA;AACI;AAAO;AAAK;AAAmC;AAAC;AAChD;AACJ;AACA;AACI;AACK;AAA6C;AAC7C;AAAC;AAEN;AACI;AACI;AASJ;AACA;AAOJ;AACJ;AACJ;AACJ;;;;;AAxKgB;AAAA;AAKA;AAAA;AAUM;AAAA;AACgB;AAAA;AAER;AAAA;AAGA;AAAA;AACC;AAAA;AAGF;AAAA;AACE;AAAA;AAEQ;AAAA;AAYN;AAAA;AACF;AAAA;AAId;AAAA;AAA2C;AAAA;AAI1B;AAAA;AACS;AAAA;AA2BA;AAAA;AAIvB;AAAA;AAQS;AAAA;AACE;AAAA;AAEQ;AAAA;AAQtB;AAAA;AAA8C;AAAA;AAIzC;AAAA;AACY;AAAA;AAGV;AAAA;AAeJ;AAAA;AAQD;AAAA;AAEG;AAAA;AAKQ;AAAA;AACC;AAAA;AAId;AAAA;AAAmD;AAAA;AAIlC;AAAA;AACS;AAAA;AAYvB;AAAA;;;;;;;;AAWZ;AACI;AAAoF;AAAI;AACxF;AAA+D;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAI;AAC/F;;;;;AAFuC;AAAA;AACJ;AAAA;;;;;;AAJ3C;AACI;AACI;AAIJ;AACJ;;;;;;;;AALsB;AAAA,+CAAsC,UAAtC,EAAsC,GAAtC;;;;;;AAOlB;AACI;AACI;AACI;AACJ;AACA;AACI;AACJ;AACJ;AACJ;;;;;AAHY;AAAA;;;;;;AAMZ;AAA+D;AAAK;;;;;;;;AACpE;AACI;AAA8C;AAAA;AAAA;AAAA;AAAA;AAAuB;AAAW;AAChF;AAAsC;AAAA;AAAA;AAAA;AAAA;AAAuB;AAAM;AACvE;;;;;;AAJA;AACA;;;;;AADoC;AACtB;AAAA;;;;QDpILwQ,uB;;;;;AA4JT,uCACY5kC,QADZ,EAEY4uB,MAFZ,EAGY3b,IAHZ,EAIYM,SAJZ,EAKYsxB,sBALZ,EAMY3xB,OANZ,EAOY4xB,OAPZ,EAQYC,OARZ,EASYC,WATZ,EAUqC5W,KAVrC,EAWWnxB,QAXX,EAYYgoC,kBAZZ,EAYkD;AAAA;;AAAA;;AAE9C;AAbQ,gBAAAjlC,QAAA,GAAAA,QAAA;AACA,gBAAA4uB,MAAA,GAAAA,MAAA;AACA,gBAAA3b,IAAA,GAAAA,IAAA;AACA,gBAAAM,SAAA,GAAAA,SAAA;AACA,gBAAAsxB,sBAAA,GAAAA,sBAAA;AACA,gBAAA3xB,OAAA,GAAAA,OAAA;AACA,gBAAA4xB,OAAA,GAAAA,OAAA;AACA,gBAAAC,OAAA,GAAAA,OAAA;AACA,gBAAAC,WAAA,GAAAA,WAAA;AACyB,gBAAA5W,KAAA,GAAAA,KAAA;AAC1B,gBAAAnxB,QAAA,GAAAA,QAAA;AACC,gBAAAgoC,kBAAA,GAAAA,kBAAA;AAvKZ;;AACiB,gBAAAzzC,KAAA,GAAQ,IAAI,OAAA0zC,YAAJ,EAAR;AAmBjB,gBAAAC,kBAAA,GAA8B,KAA9B;AAsJI,gBAAK1sC,OAAL,CAAa+e,YAAb,GACI,QAAK4tB,WAAL,KACC,QAAKA,WAAL,CAAiB12C,WAAjB,CAA6BjB,EAA7B,KAAoC,QAAKgL,OAAL,CAAa/J,WAAb,CAAyBjB,EAA7D,IACG,QAAK23C,WAAL,CAAiBvgD,QAAjB,KAA8B,QAAK4T,OAAL,CAAa5T,QAF/C,CADJ,CAH8C,CAO9C;;AAEA,YAAMyiB,KAAK,GAAG,cAAAC,aAAA,CAAc;AAAE7K,cAAI,EAAE,QAAKA,IAAb;AAAmBuK,eAAK,EAAE,QAAKxO,OAAL,CAAaqe,IAAvC;AAA6CjyB,kBAAQ,EAAE;AAAvD,SAAd,CAAd;AACA,gBAAKwgD,UAAL,GAAkB,QAAKpoC,QAAL,CAAc0E,SAAd,GAA0B,KAA1B,GAAkC2F,KAAK,CAACoB,YAA1D;AAV8C;AAWjD;AA5JD;;;;;mCA8JQ;AACJ,eAAK48B,QAAL,GAAgB,KAAK7sC,OAAL,CAAa8P,MAAb,KAAwB,cAAAqV,cAAA,CAAe0nB,QAAvD;AACA,eAAKnuB,QAAL,GAAgB,KAAK1e,OAAL,CAAa8P,MAAb,KAAwB,cAAAqV,cAAA,CAAezG,QAAvD,CAFI,CAGJ;;AAHI,8BAI2C,KAAK1e,OAJhD;AAAA,cAIGkgB,OAJH,iBAIGA,OAJH;AAAA,cAIYD,SAJZ,iBAIYA,SAJZ;AAAA,cAIuBc,gBAJvB,iBAIuBA,gBAJvB;AAKJ,eAAK+rB,cAAL,GAAsB;AAClBC,oBAAQ,EAAE;AACNz1C,qBAAO,EAAE4oB,OAAO,KAAMA,OAAO,CAACzjB,KAAR,KAAkBwjB,SAAS,CAACxjB,KAA5B,IAAsCyjB,OAAO,CAACzjB,KAAR,KAAkBwjB,SAAS,CAACxjB,KAA5B,IAAsCskB,gBAAgB,KAAK,IAArB,IAA6BA,gBAAgB,KAAIzzB,SAAvF,IAAsG2yB,SAAS,CAACxjB,KAAV,KAAmBskB,gBAAgB,CAAC,OAAD,CAArL,CADV;AAENxyB,mBAAK,EAAG2xB,OAAO,CAACzjB,KAAR,KAAkBwjB,SAAS,CAACxjB,KAA5B,IAAqCskB,gBAAgB,KAAK,IAA1D,IAAmEA,gBAAgB,CAAC,OAAD,CAAhB,IAA6Bd,SAAS,CAACxjB,KAAV,KAAmBskB,gBAAgB,CAAC,OAAD,CAApI,GAAoJA,gBAAgB,CAAC,MAAD,CAAhB,IAA4BA,gBAAgB,CAAC,OAAD,CAAhM,GAA8M,CAAAb,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAE94B,IAAT,KAAiB84B,OAAO,CAACzjB;AAFxO;AADQ,WAAtB;AAMH;AAED;;;;;;sCAGqB;AAAA;;AACjB,eAAK6H,OAAL,GAAe,0CAAf;AACA,eAAKioC,WAAL,CAAiBS,YAAjB,GAAgC,IAAhC;AACA,eAAKC,sBAAL,GAA8BllC,IAA9B,CACI,YAAM;;;AACF,mBAAI,CAACzD,OAAL,GAAe,+BAAf,CADE,CAEF;;AACA,gBAAM4oC,QAAQ,GAAG,OAAI,CAACltC,OAAL,CAAawO,KAAb,CAAmB/R,KAApC;AACA,gBAAM0wC,cAAc,GAAG,CAAC,OAAD,EAAU,WAAV,EAAuB,iBAAvB,CAAvB;AACAA,0BAAc,CAAC1jD,OAAf,CAAuB,UAAA1C,GAAG,EAAI;AAC1B,kBAAMqhB,GAAG,GAAG,OAAI,CAACpI,OAAL,CAAajZ,GAAb,CAAZ;;AACA,kBAAIqhB,GAAG,IAAIA,GAAG,CAACglC,WAAJ,KAAoB/0C,MAA/B,EAAuC;AACnC,oBAAMpH,IAAI,GAAGoH,MAAM,CAACpH,IAAP,CAAYmX,GAAZ,CAAb;;AACA,oBAAInX,IAAI,CAAC1D,MAAL,GAAc,CAAlB,EAAqB;AACjB,sBAAM8/C,WAAW,GAAG,EAApB;AACAp8C,sBAAI,CAACxH,OAAL,CAAa,UAAA6jD,EAAE,EAAI;AACfD,+BAAW,CAACH,QAAD,CAAX,GAAwB9kC,GAAG,CAACklC,EAAD,CAA3B;AACH,mBAFD;AAGA,yBAAI,CAACttC,OAAL,CAAajZ,GAAb,IAAoBsmD,WAApB;AACH;AACJ;AACJ,aAZD;AAcA,gBAAME,MAAM,GAAG,EAAf;;AACA,mBAAI,CAACvtC,OAAL,CAAaoe,WAAb,CAAyBltB,GAAzB,CAA6B,UAAAmtB,IAAI;AAAA,qBAAIA,IAAI,CAAC5hB,KAAT;AAAA,aAAjC,EAAiDhT,OAAjD,CAAyD,UAAA+jD,IAAI;AAAA,qBAAID,MAAM,CAACC,IAAD,CAAN,GAAe,GAAnB;AAAA,aAA7D,EApBE,CAsBF;;;AACA,gBAAMC,eAAe,GAAI,OAAI,CAACztC,OAAL,CAAasgB,KAAb,KAAkB,MAAI,OAAI,CAACtgB,OAAL,CAAasgB,KAAjB,MAAsB,IAAtB,IAAsB,aAAtB,GAAsB,MAAtB,GAAsB,GAAE/yB,MAA1C,CAAD,IAAuD,OAAI,CAACyS,OAAL,CAAaiiB,QAAb,KAAqB,MAAI,OAAI,CAACjiB,OAAL,CAAaiiB,QAAjB,MAAyB,IAAzB,IAAyB,aAAzB,GAAyB,MAAzB,GAAyB,GAAE10B,MAAhD,CAAvD,GACxBggD,MADwB,GACd,IADV,CAvBE,CAwBc;;AAChB,gBAAIE,eAAJ,EAAqB;AACnB,qBAAI,CAACztC,OAAL,CAAa+F,KAAb,GAAqB0nC,eAArB;AACA,qBAAI,CAACztC,OAAL,CAAaoZ,SAAb,GAAyBq0B,eAAzB;AACA,qBAAI,CAACztC,OAAL,CAAaogB,UAAb,GAA0BqtB,eAA1B;AACA,qBAAI,CAACztC,OAAL,CAAaqgB,cAAb,GAA8BotB,eAA9B;AACD;;AAED,mBAAI,CAAC3yB,SAAL,CAAesnB,IAAf,CAAoB,OAAI,CAACpiC,OAAzB,EAAkC,OAAI,CAAC21B,KAAL,CAAWr5B,MAAX,KAAsB,cAAA2W,YAAA,CAAaC,IAArE,EAA2EnL,IAA3E,CACI,UAAO6R,GAAP;AAAA,qBAAe,OAAD,UAAC,CAAD,OAAC,EAAD,MAAC,EAAD,MAAC,uCAAD;AAAA;AAAA;AAAA;AAAA;AAAA;AACV,6BAAKtV,OAAL,GAAe,IAAf;AACA,6BAAK7D,OAAL,GAAe,IAAf;AACA,6BAAK8rC,WAAL,CAAiBS,YAAjB,GAAgC,KAAhC;AACMU,+BAJI,GAIM,IAAI,cAAA19B,OAAJ,CAAY,MAAD,OAAC,CAAD,kBAAM,KAAKhQ,OAAX,CAAC,EAAsB4Z,GAAG,CAACiT,SAAJ,EAAtB,CAAZ,CAJN;;AAKV,6BAAKuf,sBAAL,CAA4B93C,OAA5B,CAAoCo5C,OAApC;AAEA;;;;;AAPU,8BAUPA,OAAO,CAAC3zB,oBAAR,KAAiC,IAV1B;AAAA;AAAA;AAAA;;AAAA;AAYiB,+BAAM,KAAKe,SAAL,CAAe8D,IAAf,CAAoB8uB,OAAO,CAAC3zB,oBAA5B,CAAN;;AAZjB;AAYA4zB,sCAZA;;AAaN,6BAAKvB,sBAAL,CAA4B93C,OAA5B,CAAoCq5C,cAApC;;AAbM;AAgBV,4BAAI/zB,GAAG,CAACzJ,YAAJ,IAAoByJ,GAAG,CAACN,eAAJ,KAAwB,QAAhD,EAA0D;AACtD,+BAAK8yB,sBAAL,CAA4BwB,QAA5B;;AACA,+BAAKpB,kBAAL,CAAwBqB,WAAxB,CAAoC,cAAAvc,SAAA,CAAUwc,cAA9C;AACH;;AAEDxoC,oCAAY,CAACmF,UAAb,CAAwB,6BAAxB;AACA,6BAAK1R,KAAL,CAAWg1C,IAAX,CAAgB;AAAE/+B,gCAAM,EAAE;AAAV,yBAAhB;;AACA,6BAAKzH,QAAL,CAAcw5B,aAAd,wBACoB,KAAK/gC,OAAL,CAAa1C,EAAb,GAAkB,SAAlB,GAA8B,SADlD;;AAvBU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAAC,EAAf;AAAA,aADJ,EA4BI,UAAC6L,GAAD,EAAS;AAEL,qBAAI,CAACojC,WAAL,CAAiBS,YAAjB,GAAgC,KAAhC;AACA,kBAAIgB,WAAW,GAAW,EAA1B;;AACA,sBAAO7kC,GAAG,CAAC2G,MAAX;AACX,qBAAK,GAAL;AACCk+B,6BAAW,GAAG,+IAAd;AACA;;AACD,qBAAK,GAAL;AACCA,6BAAW,GAAG,wFAAd;AACA,yBAAI,CAACtB,kBAAL,GAA0B,IAA1B;AACA;AAPU;;AASA,qBAAI,CAACpoC,OAAL,GAAe0pC,WAAf;;AACA,qBAAI,CAACzmC,QAAL,CAAcy5B,WAAd,iBACa,OAAI,CAAChhC,OAAL,CAAa1C,EAAb,GAAkB,UAAlB,GAA+B,UAD5C,uBACmE0wC,WADnE;;AAGDxmD,wBAAU,CAAC,YAAK;AACf,uBAAI,CAAC8c,OAAL,GAAe,IAAf;;AACA,uBAAI,CAACvL,KAAL,CAAWg1C,IAAX,CAAgB;AAAE/+B,wBAAM,EAAE;AAAV,iBAAhB;AACA,eAHS,EAGP,IAHO,CAAV;AAIF,aAjDL;AAmDH,WApFL,EAqFI,UAAC7F,GAAD,EAAS;AAEL,mBAAI,CAACujC,kBAAL,GAA0B,IAA1B;AACA,mBAAI,CAACH,WAAL,CAAiBS,YAAjB,GAAgC,KAAhC;AACA,gBAAMgB,WAAW,GAAG,wFAApB;AACA,mBAAI,CAAC1pC,OAAL,GAAe0pC,WAAf;;AACA,mBAAI,CAACzmC,QAAL,CAAcy5B,WAAd,iBACa,OAAI,CAAChhC,OAAL,CAAa1C,EAAb,GAAkB,UAAlB,GAA+B,UAD5C,uBACmE0wC,WADnE;;AAGDxmD,sBAAU,CAAC,YAAK;AACf,qBAAI,CAAC8c,OAAL,GAAe,IAAf;;AACA,qBAAI,CAACvL,KAAL,CAAWg1C,IAAX,CAAgB;AAAE/+B,sBAAM,EAAE;AAAV,eAAhB;AACA,aAHS,EAGP,IAHO,CAAV;AAIF,WAlGL;AAoGH;AAED;;;;;;qCAGoB;AAChB,eAAKq9B,OAAL,CAAapL,QAAb,CAAsB,CAAC,OAAD,EAAU,QAAV,CAAtB;;AACA,eAAKsL,WAAL,CAAiBlb,KAAjB;AACH;AAED;;;;;;qCAGoB;AAChB,eAAKgb,OAAL,CAAapL,QAAb,CAAsB,CAAC,WAAD,CAAtB,EAAqC;AACjCgN,uBAAW,EAAE;AAAExxC,mBAAK,EAAE,KAAKuD,OAAL,CAAaigB,SAAb,CAAuBxjB;AAAhC;AADoB,WAArC;;AAGA,eAAK8vC,WAAL,CAAiBlb,KAAjB;AACH;AAED;;;;;;iDAG6B;AAAA;;AACzB,cAAM3jB,MAAM,GAAY,KAAKA,MAA7B;;AACA,cACK,KAAK1N,OAAL,CAAa1C,EAAb,IACI,KAAK0C,OAAL,CAAa/J,WAAb,CAAyBjB,EAAzB,KAAgC,KAAK23C,WAAL,CAAiB12C,WAAjB,CAA6BjB,EAA7D,IACG,KAAKgL,OAAL,CAAa5T,QAAb,KAA0B,KAAKugD,WAAL,CAAiBvgD,QAFnD,IAGCshB,MAAM,IAAIA,MAAM,CAACngB,MAAP,IAAiB,CAJhC,EAKE;AACE,mBAAOma,OAAO,CAACC,OAAR,EAAP;AACH;;AACD,iBAAO,IAAID,OAAJ,CAAY,UAACC,OAAD,EAAUC,MAAV,EAAqB;AACpC;AACA,gBAAMia,OAAO,GAAG,OAAI,CAAC7hB,OAAL,CAAa6hB,OAA7B,CAFoC,CAGpC;;AACA,mBAAI,CAACpH,OAAL,CACKjB,SADL,CACe;AACPL,sBAAQ,EAAEzL,MAAM,CAACxc,GAAP,CAAW,UAACsd,KAAD;AAAA,uBAAWA,KAAK,CAAClR,EAAjB;AAAA,eAAX,EAAgC5I,IAAhC,CAAqC,GAArC,CADH;AAEP1I,oBAAM,EAAE,OAAI,CAACgU,OAAL,CAAa/J,WAFd;AAGP7J,sBAAQ,EAAEy1B,OAAO,GAAG,KAAK,EAAR,GAAa,OAAI,CAAC7hB,OAAL,CAAa5T,QAHpC;AAIPmmB,oBAAM,EAAE,OAAI,CAACvS,OAAL,CAAauZ,OAJd;AAKPpH,8BAAgB,EAAE,OAAI,CAACnS,OAAL,CAAamS,gBALxB;AAMPH,+BAAiB,EAAE,OAAI,CAAChS,OAAL,CAAagS,iBANzB;AAOPE,8BAAgB,EAAE,OAAI,CAAClS,OAAL,CAAakS,gBAPxB;AAQPD,iCAAmB,EAAE,OAAI,CAACjS,OAAL,CAAaiS,mBAR3B;AASPG,+BAAiB,EAAE,OAAI,CAACpS,OAAL,CAAaoS,iBATzB;AAUPjC,0BAAY,EAAE,OAAI,CAACnQ,OAAL,CAAamQ,YAVpB;AAWPmC,6BAAe,EAAE,OAAI,CAACtS,OAAL,CAAasS;AAXvB,aADf,EAcKvK,IAdL,CAeQ,UAAC4U,UAAD,EAAgB;AAAA,2DACQA,UADR;AAAA;;AAAA;AACZ,0EAAgC;AAAA,sBAArBnO,KAAqB;;AAC5B,sBAAI,CAACA,KAAK,CAACgB,QAAX,EAAqB;AACjB,2BAAI,CAACk9B,kBAAL,GAA0B,IAA1B;AACA,2BAAO9kC,MAAM,WACN4G,KAAK,CAACpnB,IADA,kDAAb;AAGH;AACJ;AARW;AAAA;AAAA;AAAA;AAAA;;AASZ,kBAAIu1B,UAAU,CAACpvB,MAAX,GAAoBmgB,MAAM,CAACngB,MAA/B,EAAuC;AACnC,uBAAI,CAACm/C,kBAAL,GAA0B,IAA1B;AACA,uBAAO9kC,MAAM,WACN8F,MAAM,CAAC,CAAD,CAAN,CAAUtmB,IADJ,kDAAb;AAGH;;AACDugB,qBAAO;AACV,aA/BT,EAgCQ,UAACwB,GAAD;AAAA,qBAASvB,MAAM,CAACuB,GAAD,CAAf;AAAA,aAhCR;AAkCH,WAtCM,CAAP;AAuCH;;;6CAEwB;AAAA;;AACrB,cAAM+kC,GAAG,GAAG,KAAK5B,OAAL,CAAajpC,IAAb,CACiB,KAAA8qC,uBADjB,EAC0C;AACtDC,oBAAQ,EAAE,MAD4C;AAEtDC,iBAAK,EAAE,MAF+C;AAGtDzsC,gBAAI,EAAE;AACF+6B,uBAAS,EAAE,KAAK38B,OAAL,CAAasuC,eADtB;AAEFC,uBAAS,EAAE,KAAKvuC,OAAL,CAAaqS,qBAFtB;AAGFm8B,4BAAc,EAAE,IAHd;AAIFv+C,sBAAQ,EAAE,KAAK+P,OAAL,CAAa/P;AAJrB;AAHgD,WAD1C,CAAZ;;AAYA,eAAK7G,YAAL,CACA,cADA,EAEA8kD,GAAG,CAACO,iBAAJ,CAAsB11C,KAAtB,CAA4BzP,SAA5B,CAAsC,UAACyP,KAAD,EAAwB;AAC1D,gBAAGA,KAAK,CAACiW,MAAN,KAAiB,OAApB,EAA4B;AACxBk/B,iBAAG,CAAC7c,KAAJ;AACH,aAFD,MAEM,IAAGt4B,KAAK,CAACiW,MAAN,KAAkB,QAArB,EAA8B;AAChC1d,uBAAS,CAACo9C,SAAV,CAAoBC,SAApB,CAA8B,OAAI,CAACC,aAAnC;AACH;AAEJ,WAPD,CAFA;AAWAV,aAAG,CAACW,WAAJ,GAAkBvlD,SAAlB,CAA4B;AAAA,mBAAM,OAAI,CAACnC,KAAL,CAAW,cAAX,CAAN;AAAA,WAA5B;AACH;;;4BAvXqB;AAClB,iBAAO,KAAKwuC,KAAL,CAAWgX,WAAlB;AACH;AAED;;;;4BACkB;AACd,iBAAO,KAAKhX,KAAL,CAAW31B,OAAlB;AACH;AAED;;;;4BACe;AACX,iBAAO,KAAKm2B,MAAL,CAAYpP,OAAnB;AACH;AAED;;;;4BACgB;AACZ,iBAAO,KAAK/mB,OAAL,CAAamY,KAApB;AACH;AAED;;;;4BACkB;AACd,iBAAO,KAAKnY,OAAL,CAAa6gB,OAApB;AACH;AAGD;;;;4BACe;AACX,cAAMiuB,cAAc,GAAG,KAAK9uC,OAAL,CAAa5T,QAApC;AACA,cAAMy1B,OAAO,GAAG,KAAK7hB,OAAL,CAAa6hB,OAAb,IAAwBitB,cAAc,GAAG,KAAK,EAA9D;;AACA,cAAG,KAAK9uC,OAAL,CAAamQ,YAAb,IAA6B,KAAKnQ,OAAL,CAAaoS,iBAA1C,IAA+D,KAAKpS,OAAL,CAAaoS,iBAAb,CAA+B7kB,MAAjG,EAAwG;AACpG,mBAAO,cAAAi+B,UAAA,CAAW,MAAD,OAAC,CAAD;AAAE3J,qBAAO,EAAPA;AAAF,aAAC,EAAa,KAAKktB,eAAlB,CAAX,CAAP;AACH;;AACD,iBAAO,cAAAvjB,UAAA,CAAW;AACd3J,mBAAO,EAAPA,OADc;AAEd4J,mBAAO,EAAE,KAAKzrB,OAAL,CAAa/J,WAFR;AAGdy1B,iBAAK,EAAE,KAAK1rB,OAAL,CAAa9J,SAHN;AAIdy1B,wBAAY,EAAE,KAAK3rB,OAAL,CAAaukB;AAJb,WAAX,CAAP;AAKH;;;4BAEyB;AACtB,cAAMkH,OAAO,GAAG,cAAA0M,oBAAA,CAAqB,KAAKn4B,OAAL,CAAaoS,iBAAlC,CAAhB;AACA,cAAMsZ,KAAK,GAAGD,OAAO,CAACv/B,QAAR,CAAiB;AAACJ,mBAAO,EAAE,KAAKkU,OAAL,CAAa5T;AAAvB,WAAjB,CAAd;AACA,iBAAO;AAACq/B,mBAAO,EAAPA,OAAD;AAAUC,iBAAK,EAALA,KAAV;AAAiBC,wBAAY,EAAED;AAA/B,WAAP;AACH;AAED;;;;4BACqB;AACjB,iBAAO,cAAA2M,iBAAA,CAAkB;AACrBza,kBAAM,EAAE,KAAK5d,OAAL,CAAagS,iBADA;AAErB0G,eAAG,EAAE,KAAK1Y,OAAL,CAAakS,gBAFG;AAGrB3oB,gBAAI,EAAE,KAAKyW,OAAL,CAAaoS,iBAHE;AAIrBgL,oBAAQ,EAAE,KAAKpd,OAAL,CAAaiS;AAJF,WAAlB,CAAP;AAMH;AAED;;;;4BACmB;AACf,cAAM68B,cAAc,GAAG,KAAK9uC,OAAL,CAAa5T,QAApC;AACA,iBAAO,KAAK4T,OAAL,CAAa6hB,OAAb,GAAuB,SAAvB,GAAmC,OAAAxvB,gBAAA,CAAiBy8C,cAAjB,CAA1C;AACH;AAED;;;;4BACiB;AACb,iBAAO,KAAK9uC,OAAL,CAAaoe,WAApB;AACH;AAED;;;;4BACoB;AAAA;;AAChB,cAAM4B,SAAS,GAAG,KAAKhgB,OAAL,CAAaggB,SAA/B;AACA,iBAAOA,SAAS,CAAC/tB,MAAV,CAAiB,UAACvI,CAAD;AAAA,mBAAOA,CAAC,CAAC+S,KAAF,KAAY,OAAI,CAACwjB,SAAL,CAAexjB,KAAlC;AAAA,WAAjB,CAAP;AACH;AAED;;;;4BACoB;AAChB,iBAAO,KAAKuD,OAAL,CAAaigB,SAAb,IAA0B,KAAKkW,MAAL,CAAYpP,OAA7C;AACH;AAED;;;;4BAC0B;AACtB,iBAAO,KAAK/mB,OAAL,CAAaugB,eAAb,IAAgC,EAAvC;AACH;AAED;;;;4BACyB;AACrB,cAAM0B,QAAQ,GAAG,KAAKA,QAAtB;AACA,cAAMkG,KAAK,GAAG,EAAd;;AAFqB,uDAGD,KAAKlG,QAHJ;AAAA;;AAAA;AAGrB,sEAAmC;AAAA,kBAAxB+C,KAAwB;AAC/BmD,mBAAK,CAACnD,KAAK,CAACC,WAAP,CAAL,GAA2BD,KAAK,CAACyL,WAAjC;AACH;AALoB;AAAA;AAAA;AAAA;AAAA;;AAMrB,iBAAOtI,KAAP;AACH;AAED;;;;4BAC0B;AACtB,iBAAO,KAAKnoB,OAAL,CAAasgB,KAAb,CACFruB,MADE,CACK,UAAC4wB,IAAD;AAAA,mBAAUA,IAAI,CAACvyB,IAAL,KAAc,WAAxB;AAAA,WADL,EAEFtB,MAFE,CAEK,UAACkC,GAAD,EAAMovB,KAAN,EAAgB;AACpBpvB,eAAG,CAACovB,KAAK,CAAC9R,KAAP,CAAH,GAAmB8R,KAAK,CAACtd,OAAzB;AACA,mBAAO9R,GAAP;AACH,WALE,EAKA,EALA,CAAP;AAMH;AAED;;;;4BACgB;AACZ,iBAAO,KAAK8O,OAAL,CAAazI,IAApB;AACH;AAED;;;;4BACmB;AAAA;;AACf,iBAAO,CAAC,KAAKyI,OAAL,CAAaiiB,QAAb,IAAyB,EAA1B,EAA8B/wB,GAA9B,CAAkC,UAAC8zB,KAAD,EAAW;AAChD,gBAAMxW,KAAK,GAAQ,OAAI,CAACd,MAAL,CAAY7e,IAAZ,CACf,UAACmgD,OAAD;AAAA,qBAAaA,OAAO,CAACvyC,KAAR,KAAkBuoB,KAAK,CAACC,WAArC;AAAA,aADe,KAEd;AACDvO,mBAAK,EAAE;AADN,aAFL;AAKA,gBAAM/H,QAAQ,GACV,OAAI,CAAC6L,IAAL,CAAUra,SAAV,CAAoBtR,IAApB,CAAyB,UAAC2kC,GAAD;AAAA,qBAASA,GAAG,CAACl2B,EAAJ,KAAWkR,KAAK,CAACkI,KAAN,CAAY+c,WAAhC;AAAA,aAAzB,KAAyE,EAD7E;AAEA,mBAAO,IAAI,cAAAvR,aAAJ,CAAkB,MAAD,OAAC,CAAD,kBACjB8C,KADiB,CAAC,EACb;AACRtgB,sBAAQ,EAAE8J,KAAK,CAAC4L,UADR;AAERwW,oBAAM,EAAEjiB,QAAQ,CAAC0mB,QAFT;AAGR9Z,0BAAY,EAAE,OAAI,CAACvb,OAAL,CAAa/J,WAAb,CAAyBjB,EAH/B;AAIRkwB,8BAAgB,EAAE,OAAI,CAACllB,OAAL,CAAa/P;AAJvB,aADa,CAAlB,CAAP;AAOH,WAfM,CAAP;AAgBH;AAED;;;;4BACkB;AACd,iBAAO,EAAP;AACH;;;4BAuPuB;AACpB,cAAIioB,IAAI,GAAG,EAAX;AACA,eAAKlY,OAAL,CAAaqS,qBAAb,CAAmCnhB,GAAnC,CAAuC,UAAC7F,IAAD,EAAQ;AAC3C,gBAAM4jD,MAAM,GAAG,IAAI,UAAA1yC,MAAJ,CAAW;AAAClR,kBAAI,EAAEA,IAAI,GAAC;AAAZ,aAAX,CAAf;AACA,gBAAMiM,OAAO,GAAG23C,MAAM,CAACtiD,UAAP,CAAkB,iBAAlB,CAAhB;AACAurB,gBAAI,aAAMA,IAAN,eAAe5gB,OAAf,SAAyB23C,MAAM,CAACrlB,UAAP,CAAkB,UAAA90B,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAlB,EAAuC,KAAvC,IAAgD,UAAhD,GAA6D,EAAtF,CAAJ;AACH,WAJD;AAKA,iBAAOitB,IAAP;AACH;;;;MAzZwC,OAAApwB,a;;AAL7C;;;uBAKaqkD,uB,EAAuB,2C,EAAA,qC,EAAA,4C,EAAA,wC,EAAA,4C,EAAA,sC,EAAA,+B,EAAA,kC,EAAA,qC,EAAA,qBAsKpB,SAAA+C,eAtKoB,C,EAsKL,wC,EAAA,2C;AAAA,K;;;YAtKlB/C,uB;AAAuB,8C;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,c;AAAA,a;AAAA,itD;AAAA;AAAA;AC/DpC;AA6KA;AAQA;AAYA;;;;;;AAjMoB,8CAAiC,UAAjC,EAAiC,GAAjC;AA6KA;AAAA;;;;;;;;;;2BD9GPA,uB,EAAuB;cALnC,OAAAgD,SAKmC;eALzB;AACPlnD,kBAAQ,EAAE,yBADH;AAEPmnD,qBAAW,EAAE,kCAFN;AAGPC,mBAAS,EAAE,CAAC,kCAAD;AAHJ,S;AAKyB,Q;;;;;;;;;;;;;;;;;;;;;;kBAsK3B,OAAArT,M;mBAAO,SAAAkT,e;;;;;;;;;gBApKX,OAAAI;;;;;;;;;;;;;;;;;;;;;;;;AEjEL;AAAA;AAAA;;AAKA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAMA;AAAA;AAAA;;AAWA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/BI;AAII;AAAA;AAA6D;AAC7D;AAGI;AAAA;AAAA;AAAA;AAAA;AACH;AACL;;;;;AAHQ;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA;AAAA;AAIA;;;;;AAAA;AAAA;AAAA;;;;;;;;AAfR;AACI;AAAA;AAKS;AACT;AAAA;AACA;AACI;AAAA;AAAkG;AAAA;AAAA;AAAA,8BAAa,OAAb;AAAoB,SAApB;AAAlG;AAEA;AAMJ;AACJ;;;;;AAfQ;AAAA;AAQW;AAAA;;;;;;;;;;;;;;;;;;AAwBX;AACI;AACJ;;;;;;AAfJ;AACI;AAAA;AAAuD;AACvD;AAWA;AAGJ;;;;;AAZQ;AAAA;AADA,yJAA0G,YAA1G,EAA0G,kBAA1G,EAA0G,aAA1G,EAA0G,gDAA1G,EAA0G,SAA1G,EAA0G,oCAA1G,EAA0G,gBAA1G,EAA0G,KAA1G;AAUoB;AAAA;;;;;;AAfhC;AAEI;AAiBJ;;;;;AAjBwC;AAAA;;;;;;;;;;;;;;;;;;AAwChC;AACI;AACJ;;;;;;;;;;;;;;AAvBJ;AACI;AAAA;AAAyE;AACzE;AAeI;AAAA;AAAA;AAAA,iBAAiB,QAAA9nC,IAAA,iCAAjB;AAAsD,SAAtD;AAGH;AACD;AAGJ;;;;;AApBQ;AAAA,wCAAiB,YAAjB,EAAiB,iBAAjB,EAAiB,iBAAjB,EAAiB,6SAAjB,EAAiB,SAAjB,EAAiB,gFAAjB,EAAiB,SAAjB,EAAiB,iCAAjB,EAAiB,UAAjB,EAAiB,yBAAjB,EAAiB,gBAAjB,EAAiB,2BAAjB,EAAiB,cAAjB,EAAiB,wDAAjB;AAiBoB;AAAA;;;;;;;;;;;;;;;;;;AAwBxB;AACI;AACJ;;;;;;AAtBJ;AACI;AACI;AAAA;AAAmE;AASvE;AACA;AAQA;AAGJ;;;;;AARQ;AAAA,wEAA0C,UAA1C,EAA0C,IAA1C,EAA0C,SAA1C,EAA0C,gFAA1C;AAKoB;AAAA;;;;;;AAI5B;AACI;AACJ;;;;;AADI;AAAA;;;;;;AAkBR;;;;;AAAiE;;;;;;;;;;;;;;;;;;AAG7D;;;;;;AAOQ;AACI;AACJ;;;;;AAF2C;AACvC;AAAA;;;;;;AAPZ;AACI;AAKI;AAGJ;AACJ;;;;;AANQ;AAAA;AAEY;AAAA;;;;;;AATxB;AACI;AAAA;AAAiE;AACjE;AACA;AAWJ;;;;;AAZsE;AAAA;AAC7B;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBrC;AAAA;AAEA;;;;;AAAA;AAAA;AAAA;;;;;;;;AATJ;AACI;AAAA;AAAsE;AACtE;AAGI;AAAA;AAAA;AAAA;AAAA;AACH;AACD;AAGJ;;;;;AAHe;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeP;AAAA;AAGA;;;;;AAAA;AAAA;AAAA;;;;;;;;AAKA;AAAyD;AAAA;AAAA;AAAA;AAAA;AAAA;AACrD;AACA;AAA0C;AAAQ;AACtD;;;;;AAFI;AAAA;;;;;;;;AApBZ;AACI;AAAA;AAGA;AACA;AACA;AACI;AACI;AAAA;AAAA;AACJ;AAEA;AAIJ;AACA;AAAwC;AAAA;;AAAA;;AAAA;AAAA;AAAA,8BAA0D,EAA1D;AAA4D,SAA5D;AAA8D;AAAG;AAC7G;AACI;AACI;AAIJ;AACJ;;;;;;;AAvByB;AAAA;AAOuE;AAAA;AAG7E;AAAA;AAQD;AAAA;;;;;;;;;;;;;;;;;;AAWN;AACI;AACJ;;;;;AAF+C;AAC3C;AAAA;;;;;;AALhB;AACI;AAAA;AAA+E;AAC/E;AACI;AACI;AAGJ;AACJ;AACJ;;;;;AALwB;AAAA;;;;;;;;;;;;;;;;;;AAMxB;AACI;AAAA;AAEA;AAEJ;;;;;;;;;;;;;;;;;;AACA;AAEI;AAAA;AAMA;AACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGI;AACI;AAAA;AAMI;AAAA;AAAA;AAAA,8BAAa,MAAb;AAAmB,SAAnB;AACH;AACL;;;;;;AAEI;;;;;;AAbR;AACI;AAAA;AAAyD;AACzD;AAUA;AAGJ;;;;;;;AAbqD;AAAA,iDAAmC,UAAnC,EAAmC,IAAnC;;;;;;;;AA1MzD;AACI;AAWA;AAoBA;AAoBA;AACI;AAyBA;AAwBA;AAGJ;AACA;AACI;AACI;AAGI;AAAA;AAAA;AAAA,wCAAyB,cAAzB;AAAuC,SAAvC;AAA0C;AAAiB;AACnE;AAEA;AACI;AAEI;AAAA;AAAA;AAAA,wCAAyB,cAAzB;AAAuC,SAAvC;AAA0C;AAAS;AAC3D;AACJ;AAEA;AACA;AAeA;AAWA;AA0BA;AAUA;AAMA;AAUA;AAgBJ;;;;;;;;;AAxNuC;AAG/B;AAAA;AAS4B;AAAA;AAoBR;AAAA;AAqBiB;AAAA;AAyBF;AAAA;AAwB9B;AAAA;AAQG;AAAA;AAMA;AAAA;AAKa;AAAA;AACW;AAAA;AAeA;AAAA;AAWW;AAAA;AA0BR;AAAA;AAUF;AAAA;AAME;AAAA;AAUR;AAAA;;;;QD9JtB+nC,oB;;;;;AAiBT,oCACYhoC,QADZ,EAEY4uB,MAFZ,EAGYmW,OAHZ,EAIY5jC,eAJZ,EAKY8mC,KALZ,EAKoC;AAAA;;AAAA;;AAEhC;AANQ,gBAAAjoC,QAAA,GAAAA,QAAA;AACA,gBAAA4uB,MAAA,GAAAA,MAAA;AACA,gBAAAmW,OAAA,GAAAA,OAAA;AACA,gBAAA5jC,eAAA,GAAAA,eAAA;AACA,gBAAA8mC,KAAA,GAAAA,KAAA;AAnBZ;;AACO,gBAAAC,SAAA,GAAoB,EAApB;AACA,gBAAAvwB,KAAA,GAAgB,UAAApqB,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAhB;AACP;;AACO,gBAAAykD,UAAA,GAAqB,QAAKxwB,KAAL,CAAWjzB,QAAX,CAAoB;AAAEP,gBAAM,EAAEC,IAAI,CAACC,IAAL,CAAU,QAAKszB,KAAL,CAAWpzB,OAAX,GAAqB,CAA/B,IAAoC;AAA9C,SAApB,CAArB;AACP;;AACgB,gBAAA6jD,WAAA,GAAc,UAAA76C,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoBiB,QAApB,CAA6B;AAAE4wB,cAAI,EAAE;AAAR,SAA7B,EAA4CpB,UAA5C,CAAuD,KAAvD,CAAd;AAET,gBAAA+vB,aAAA,GAAgB,UAAA32C,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB6nB,WAApC;AACA,gBAAA88B,UAAA,GAAa,EAAb;AACA,gBAAAC,QAAA,GAAW,EAAX,CAS6B,CARpC;;AACO,gBAAAC,WAAA,GAAqB,EAArB;AAUH,gBAAKnpB,WAAL,GAAmB,QAAKje,eAAL,CAAqBQ,SAAxC;AAHgC;AAInC;;;;mCAEc;AAAA;;AACX;AACA;;;AAEA,eAAK4mC,WAAL,sBAAuB,KAAKtoC,IAAL,CAAUkxB,QAAV,CAAmB7X,OAAnB,CAA2BtyB,KAAlD;AAEA,eAAKk9C,aAAL,GAAqB,UAAA32C,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB6nB,WAAzC;AACA,cAAMA,WAAW,GACb,KAAKtL,IAAL,CAAUkxB,QAAV,CAAmBp8B,MAAnB,KAEI,KAAKkL,IAAL,CAAUkxB,QAAV,CAAmBp8B,MAAnB,CAA0B/N,KAA1B,KAAoC,eAApC,IACA,KAAKiZ,IAAL,CAAUkxB,QAAV,CAAmBp8B,MAAnB,CAA0B/N,KAA1B,KAAoC,OADpC,IAEA,KAAKiZ,IAAL,CAAUkxB,QAAV,CAAmBp8B,MAAnB,CAA0B/N,KAA1B,KAAoC,MAFpC,IAGA,KAAKiZ,IAAL,CAAUkxB,QAAV,CAAmBp8B,MAAnB,CAA0B/N,KAA1B,KAAoC,cALxC,KAOA,KAAKiZ,IAAL,CAAUkxB,QAAV,CAAmB1sC,MAPnB,IAQA,KAAKwb,IAAL,CAAUkxB,QAAV,CAAmB1sC,MAAnB,CAA0BuC,KATV,GAUhB,KAAKiZ,IAAL,CAAUkxB,QAAV,CAAmB1sC,MAAnB,CAA0BuC,KAA1B,CAAgCukB,WAVhB,GAU8B,KAAK24B,aAVvD;AAYA,eAAKvsB,KAAL,GAAa,IAAI,UAAA3iB,MAAJ,CAAW;AAAElR,gBAAI,EAAEJ,IAAI,CAACunB,GAAL,EAAR;AAAoBK,uBAAW,EAAE,KAAjC;AAAwCC,uBAAW,EAAXA;AAAxC,WAAX,CAAb;AACA,eAAK48B,UAAL,GAAkB,OAAA3jD,mBAAA,CAAoB,KAAKmzB,KAAzB,EAAgC,EAAhC,CAAlB;;AAEA,eAAKiX,MAAL,CAAYvyB,WAAZ,CAAwBzH,IAAxB,CAA6B,YAAAyG,KAAA,CAAM,UAACC,CAAD;AAAA,mBAAOA,CAAP;AAAA,WAAN,CAA7B,EAA8CvZ,SAA9C,CAAwD,YAAM;AAC1D,gBAAM2a,IAAI,GAAS,OAAI,CAACkyB,MAAL,CAAYpP,OAA/B;AACA,gBAAM0e,SAAS,GAAGxhC,IAAI,CAACwhC,SAAL,CAAev0C,GAAf,CACd,UAACs3C,GAAD;AAAA,qBAAS,OAAI,CAACrS,MAAL,CAAYtnC,IAAZ,CAAiB25C,GAAG,CAAC/rC,KAArB,KAA+B,IAAI,cAAAkjB,IAAJ,CAAS;AAAEljB,qBAAK,EAAE+rC,GAAG,CAAC/rC,KAAb;AAAoBrV,oBAAI,EAAEohD,GAAG,CAAC/rC,KAAJ,CAAUpP,KAAV,CAAgB,GAAhB,EAAqB,CAArB;AAA1B,eAAT,CAAxC;AAAA,aADc,CAAlB;AAGA,mBAAI,CAACoiD,SAAL,GAAiB,CAACxrC,IAAD,EAAOsZ,MAAP,CAAckoB,SAAd,CAAjB;AACH,WAND;;AAQA,eAAKsK,oBAAL,CAA0B,KAAKvoC,IAAL,CAAUkxB,QAAV,CAAmBzoC,QAAnB,CAA4B1B,KAAtD;AACA,eAAKnF,YAAL,CAAkB,aAAlB,EAAkC,KAAKoe,IAAL,CAAUygB,YAAV,CAC7B9rB,IAD6B,CAE1B,YAAA6zC,IAAA,CAAK,CAAL,CAF0B,EAEjB;AACT,sBAAAC,oBAAA,EAH0B,EAI7B3mD,SAJ6B,CAInB,YAAM;AACb,mBAAI,CAACU,OAAL,CAAa,kBAAb,EAAiC,YAAM;AACnC,qBAAI,CAAC+lD,oBAAL,CAA0B,OAAI,CAACvoC,IAAL,CAAUkxB,QAAV,CAAmBzoC,QAAnB,CAA4B1B,KAAtD;AACH,aAFD,EAEG,GAFH;AAGH,WAR6B,CAAlC;AAWA,eAAKnF,YAAL,CAAkB,oBAAlB,EAAyC,KAAKoe,IAAL,CAAUkxB,QAAV,CAAmBvoB,YAAnB,CAAgC8X,YAAhC,CACpC3+B,SADoC,CAC1B,YAAM;AACb,gBAAM4mD,gBAAgB,GAAG,OAAI,CAAC1oC,IAAL,CAAUkxB,QAAV,CAAmBtmB,iBAA5C;;AACA,gBAAG,CAAC,OAAI,CAAC5K,IAAL,CAAUkxB,QAAV,CAAmBvoB,YAAnB,CAAgC5hB,KAApC,EAA0C;AACtC2hD,8BAAgB,CAACC,eAAjB;AACH,aAFD,MAEK;AACD,kBAAMC,eAAe,GAAG,CAAC,QAAAlpB,UAAA,CAAWC,QAAZ,CAAxB;AACAipB,6BAAe,CAACl9C,IAAhB,CAAqB,cAAAs2B,eAArB;AACA0mB,8BAAgB,CAACzoB,aAAjB,CAA+B2oB,eAA/B;AACH;;AACDF,4BAAgB,CAACnoB,sBAAjB;AACH,WAXoC,CAAzC;AAcA;;AACA,eAAKsoB,aAAL;AAEA;;AACA,cAAG,YAAK7oC,IAAL,CAAUkxB,QAAV,CAAmBp7B,EAAnB,MAAqB,IAArB,IAAqB,aAArB,GAAqB,MAArB,GAAqB,GAAE/O,KAAvB,KAAgC,QAAC,KAAKiZ,IAAL,CAAUkxB,QAAV,CAAmBp8B,MAApB,MAA0B,IAA1B,IAA0B,aAA1B,GAA0B,MAA1B,GAA0B,GAAE/N,KAA5B,CAAnC,EAAqE;AACjE,iBAAKiZ,IAAL,CAAUkxB,QAAV,CAAmBvoB,YAAnB,CAAgClkB,QAAhC,CAAyC,KAAzC;AACH;AACJ;AAED;;;;;;;;6BAKYlF,G,EAAW;AACnB,eAAKygB,IAAL,CAAUzG,GAAV,CAAcha,GAAd,EAAmBkF,QAAnB,CAA4B,KAAKub,IAAL,CAAUzG,GAAV,CAAcha,GAAd,EAAmBwH,KAAnB,CAAyBk7C,IAAzB,EAA5B;AACH;AAED;;;;wCAoBuB;;;AAAA,iCAC+B,KAAKjiC,IAAL,CAAUjZ,KADzC;AAAA,cACX+O,EADW,oBACXA,EADW;AAAA,cACPhB,MADO,oBACPA,MADO;AAAA,cACCirB,WADD,oBACCA,WADD;AAAA,cACcpX,YADd,oBACcA,YADd;AAEnB,cAAMmgC,MAAM,GAAG,CAAC,CAAChzC,EAAjB;AACA,cAAMizC,OAAO,GAAGj0C,MAAM,KAAK,cAAA0sB,aAAA,CAAc9V,IAAzC;;AACA,cAAIo9B,MAAJ,EAAY;AACR,uBAAK9oC,IAAL,CAAUzG,GAAV,CAAc,cAAd,OAA6B,IAA7B,IAA6B,aAA7B,GAA6B,MAA7B,GAA6B,GAAE4mB,OAAF,EAA7B;AACH;;AAED,cAAG4oB,OAAH,EAAW;AACP,uBAAK/oC,IAAL,CAAUzG,GAAV,CAAc,cAAd,OAA6B,IAA7B,IAA6B,aAA7B,GAA6B,MAA7B,GAA6B,GAAE4mB,OAAF,EAA7B;AACH;;AAED,cAAI,CAAC,KAAKhB,WAAN,IAAqB,CAACY,WAA1B,EAAuC;AACnC,uBAAK/f,IAAL,CAAUzG,GAAV,CAAc,cAAd,OAA6B,IAA7B,IAA6B,aAA7B,GAA6B,MAA7B,GAA6B,GAAE4mB,OAAF,EAA7B;AACH;;AACD,cAAG2oB,MAAM,IAAIC,OAAV,IAAqBpgC,YAAxB,EAAqC;AACjC,uBAAK3I,IAAL,CAAUzG,GAAV,CAAc,QAAd,OAAuB,IAAvB,IAAuB,aAAvB,GAAuB,MAAvB,GAAuB,GAAE4mB,OAAF,EAAvB;AACA,iBAAKngB,IAAL,CAAUgpC,UAAV,CAAqB;AAAEl0C,oBAAM,EAAE;AAAV,aAArB;AACH;AACJ;AAED;;;;;;0CAGsB;AAAA;;;;AAClB,cAAM4xC,GAAG,GAAG,KAAK5B,OAAL,CAAajpC,IAAb,CACR,+BAAAotC,yBADQ,EAER;AACIpC,iBAAK,EAAE,MADX;AAEIpoD,kBAAM,EAAE,MAFZ;AAGImoD,oBAAQ,EAAE,MAHd;AAIIxsC,gBAAI,EAAE;AACF8L,oBAAM,EAAE,KAAKlG,IAAL,CAAUkxB,QAAV,CAAmB/b,UAAnB,CAA8BpuB,KADpC;AAEFvC,oBAAM,EAAE,KAAKwb,IAAL,CAAUkxB,QAAV,CAAmB1sC,MAAnB,CAA0BuC,KAFhC;AAGFnC,sBAAQ,EAAE,KAAKob,IAAL,CAAUkxB,QAAV,CAAmBtsC,QAAnB,CAA4BmC,KAHpC;AAIFoW,kBAAI,EAAE,KAAK6C,IAAL,CAAUkxB,QAAV,CAAmBzY,SAAnB,CAA6B1xB,KAJjC;AAKFmiD,sBAAQ,EAAE,IALR;AAMFC,2BAAa,EAAE,CAAC,cAAC,KAAKnpC,IAAL,CAAUkxB,QAAV,CAAmBzW,QAApB,MAA4B,IAA5B,IAA4B,aAA5B,GAA4B,MAA5B,GAA4B,GAAE1zB,KAA9B,MAAmC,IAAnC,IAAmC,aAAnC,GAAmC,MAAnC,GAAmC,GAAEhB,MAArC;AANd;AAJV,WAFQ,CAAZ;;AAgBA,eAAKnE,YAAL,CACI,YADJ,EAEI8kD,GAAG,CAACO,iBAAJ,CAAsB11C,KAAtB,CAA4BzP,SAA5B,CAAsC,UAACyP,KAAD,EAAW;;AAC7C;;;AACA,gBAAIA,KAAK,CAACiW,MAAN,KAAiB,MAArB,EAA6B;AACzB,kBAAI2N,UAAU,GAAG,OAAI,CAACnV,IAAL,CAAUkxB,QAAV,CAAmB/b,UAAnB,CAA8BpuB,KAA/C;AACAouB,wBAAU,GAAG5jB,KAAK,CAACiP,QAAnB;;AACA,qBAAI,CAACR,IAAL,CAAUkxB,QAAV,CAAmB/b,UAAnB,CAA8B1wB,QAA9B,CAAuC,OAAA8F,MAAA,CAAO4qB,UAAP,EAAmB,IAAnB,CAAvC;;AACA,kBAAMsF,QAAQ,GAAG,CAAH,WAAG,OAAI,CAACza,IAAL,CAAUkxB,QAAb,MAAqB,IAArB,IAAqB,aAArB,GAAqB,MAArB,GAAqB,GAAEzW,QAApB,MAA4B,IAA5B,IAA4B,aAA5B,GAA4B,MAA5B,GAA4B,GAAE1zB,KAAF,CAAQ2C,GAAR,CAAY,UAAC8zB,KAAD,EAA0B;AAC/EA,qBAAK,CAACtgB,QAAN,GAAiBiY,UAAU,CAAC,CAAD,CAAV,CAAcv1B,IAA/B;AACA49B,qBAAK,CAACC,WAAN,GAAoBtI,UAAU,CAAC,CAAD,CAAV,CAAclgB,KAAlC;AACA,uBAAOuoB,KAAP;AACH,eAJ4C,CAA7C;AAKA,2BAAI,CAACxd,IAAL,CAAUkxB,QAAV,CAAmBzW,QAAnB,MAA2B,IAA3B,IAA2B,aAA3B,GAA2B,MAA3B,GAA2B,GAAEh2B,QAAF,CAAWg2B,QAAQ,IAAI,EAAvB,CAA3B;AACAisB,iBAAG,CAAC7c,KAAJ;;AACA,qBAAI,CAAClqC,KAAL,CAAW,YAAX;AACH;;AACD,gBAAI4R,KAAK,CAACiW,MAAN,KAAiB,OAArB,EAA8B;AAC1Bk/B,iBAAG,CAAC7c,KAAJ;;AACA,qBAAI,CAAClqC,KAAL,CAAW,YAAX;AACH;AACJ,WAnBD,CAFJ;AAuBH;AAED;;;;;;2CAG0B;AAAA;;AACtB,cAAM+mD,GAAG,GAAG,KAAK5B,OAAL,CAAajpC,IAAb,CAAyC,2BAAAutC,qBAAzC,EAAgE;AACxEvC,iBAAK,EAAE,MADiE;AAExEpoD,kBAAM,EAAE;AAFgE,WAAhE,CAAZ;;AAIA,eAAKmD,YAAL,CACI,UADJ,EAEI8kD,GAAG,CAACO,iBAAJ,CAAsB11C,KAAtB,CAA4BzP,SAA5B,CAAsC,UAACyP,KAAD,EAAW;;AAC7C;;;AACA,gBAAIA,KAAK,CAACiW,MAAN,KAAiB,MAArB,EAA6B;AACzB,kBAAMgR,SAAS,GAAG,CAAH,KAAG,OAAI,CAACxY,IAAL,CAAUkxB,QAAV,CAAmB1Y,SAAnB,MAA4B,IAA5B,IAA4B,aAA5B,GAA4B,MAA5B,GAA4B,GAAEzxB,KAAhD;AACAyxB,uBAAS,CAAC9sB,IAAV,CAAe6F,KAAK,CAACiP,QAArB;;AACA,qBAAI,CAACR,IAAL,CAAUkxB,QAAV,CAAmB1Y,SAAnB,CAA6B/zB,QAA7B,CAAsC,OAAA8F,MAAA,CAAOiuB,SAAP,EAAkB,OAAlB,CAAtC;;AACAkuB,iBAAG,CAAC7c,KAAJ;;AACA,qBAAI,CAAClqC,KAAL,CAAW,UAAX;;AACA,qBAAI,CAACqoD,KAAL,CAAWqB,aAAX;AACH;AACJ,WAVD,CAFJ;AAcH,S,CAED;;;;mCACW93C,K,EAAO8nB,O,EAAO;AACrB,cAAIA,OAAJ,EAAa;AACT,iBAAKivB,WAAL,CAAiB58C,IAAjB,CAAsB2tB,OAAtB;AACA,iBAAKrZ,IAAL,CAAUkxB,QAAV,CAAmB7X,OAAnB,CAA2B50B,QAA3B,CAAoC,KAAK6jD,WAAzC;AACH;;AACD/2C,eAAK,CAACq5B,cAAN;AACH;;;qCAEYrc,M,EAAW;AACpB,cAAMpsB,KAAK,GAAG,KAAKmmD,WAAL,CAAiBrhD,OAAjB,CAAyBsnB,MAAzB,CAAd;;AACA,cAAIpsB,KAAK,IAAI,CAAb,EAAgB;AACZ,iBAAKmmD,WAAL,CAAiBh4C,MAAjB,CAAwBnO,KAAxB,EAA+B,CAA/B;AACH;;AACD,eAAK6d,IAAL,CAAUkxB,QAAV,CAAmB7X,OAAnB,CAA2B50B,QAA3B,CAAoC,KAAK6jD,WAAzC;AACH;;;6CAE4B7/C,Q,EAAkB;AAC3C,cAAI,CAACA,QAAL,EAAeA,QAAQ,GAAG,KAAKw7C,aAAhB,CAD4B,CAE3C;;AACA,cAAMqF,aAAa,GAAG,QAAA9iD,QAAA,CAASwkB,GAAT,GAAe4sB,OAAf,CAAuB,KAAKqM,aAA5B,EAA2C18C,MAAjE;AACA,cAAMgiD,gBAAgB,GAAG,QAAA/iD,QAAA,CAASwkB,GAAT,GAAe4sB,OAAf,CAAuBnvC,QAAvB,EAAiClB,MAA1D;AACA,cAAM/C,MAAM,GAAG,KAAKwb,IAAL,CAAUkxB,QAAV,CAAmB1sC,MAAnB,CAA0BuC,KAAzC;;AACA,cAAIvC,MAAM,IAAI8kD,aAAa,KAAKC,gBAAhC,EAAkD;AAC9C,gBAAMhkD,SAAS,GAAGf,MAAM,CAACy8B,KAAP,EAAlB;AACA,iBAAKmnB,UAAL,GAAkB7iD,SAAS,CAACuJ,eAAV,CAA0B,OAA1B,CAAlB;AACA,iBAAKu5C,QAAL,GAAgB9iD,SAAS,CAACb,QAAV,CAAmB;AAAEJ,qBAAO,EAAE,KAAK0b,IAAL,CAAUjZ,KAAV,CAAgBnC;AAA3B,aAAnB,EAA0DkK,eAA1D,CAA0E,OAA1E,CAAhB;AACH,WAJD,MAIO;AACH;AACA,iBAAKs5C,UAAL,GAAkB,EAAlB;AACA,iBAAKC,QAAL,GAAgB,EAAhB;AACH;;AACD,eAAKL,KAAL,CAAWqB,aAAX;AACH;;;uCAMcG,kB,EAA0B;;;AACrC,cAAIA,kBAAkB,KAAK,cAA3B,EAA2C;AACzC;AACA,gBAAI,CAAJ,KAAI,KAAKxpC,IAAL,CAAUkxB,QAAV,CAAmBvoB,YAAnB,MAA+B,IAA/B,IAA+B,aAA/B,GAA+B,MAA/B,GAA+B,GAAE5hB,KAArC,EAA4C;AAC1C,yBAAKiZ,IAAL,CAAUkxB,QAAV,CAAmB3mB,YAAnB,MAA+B,IAA/B,IAA+B,aAA/B,GAA+B,MAA/B,GAA+B,GAAE9lB,QAAF,CAAW,KAAX,CAA/B;AACD;AACF,WALD,MAKO,IAAI+kD,kBAAkB,KAAK,cAA3B,EAA2C;AAChD;AACA,gBAAI,CAAJ,KAAI,KAAKxpC,IAAL,CAAUkxB,QAAV,CAAmB3mB,YAAnB,MAA+B,IAA/B,IAA+B,aAA/B,GAA+B,MAA/B,GAA+B,GAAExjB,KAArC,EAA4C;AAC1C,yBAAKiZ,IAAL,CAAUkxB,QAAV,CAAmBvoB,YAAnB,MAA+B,IAA/B,IAA+B,aAA/B,GAA+B,MAA/B,GAA+B,GAAElkB,QAAF,CAAW,KAAX,CAA/B;AACD;AACF;AACF;;;4BAhKgB;AACf,iBAAO,KAAKsb,QAAL,CAAcd,OAAd,CAAsB,uBAAtB,KAAkD,KAAzD;AACH;AAED;;;;4BACwB;AACpB,iBAAO,KAAKc,QAAL,CAAcd,OAAd,CAAsB,2BAAtB,KAAsD,EAA7D;AACH;AAED;;;;4BACiB;AACb,cAAMiH,MAAM,GAAG,KAAKlG,IAAL,CAAUkxB,QAAV,CAAmB/b,UAAnB,CAA8BpuB,KAA7C;AACA,iBAAOmf,MAAM,CAACngB,MAAP,KAAkB,CAAlB,GACDmgB,MAAM,CAAC,CAAD,CAAN,CAAU0M,UADT,GAED1M,MAAM,CAACngB,MAAP,GAAgB,CAAhB,aACOmgB,MAAM,CAACngB,MADd,wBAEI,oBAJV;AAKH;;;4BA+HwB;AACrB,iBAAO,KAAKia,IAAL,CAAUjZ,KAAV,CAAgB+N,MAAhB,KAA2B,cAAA2W,YAAA,CAAa8V,KAAxC,IAAiD,KAAKvhB,IAAL,CAAUjZ,KAAV,CAAgB+N,MAAhB,KAA2B,cAAA2W,YAAA,CAAaC,IAAhG;AACH;;;;MAzPqC,OAAAprB,a;;AAN1C;;;uBAMaynD,oB,EAAoB,2C,EAAA,qC,EAAA,kC,EAAA,wC,EAAA,0C;AAAA,K;;;YAApBA,oB;AAAoB,qC;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,c;AAAA,a;AAAA,ynH;AAAA;AAAA;AC1CjC;;;;AAA0B;;;;;;;;;;2BD0CbA,oB,EAAoB;cANhC,OAAAJ,SAMgC;eANtB;AACPlnD,kBAAQ,EAAE,gBADH;AAEPmnD,qBAAW,EAAE,+BAFN;AAGPC,mBAAS,EAAE,CAAC,+BAAD,CAHJ;AAIP4B,yBAAe,EAAE,OAAAC,uBAAA,CAAwBC;AAJlC,S;AAMsB,Q;;;;;;;;;;;;;;gBAE5B,OAAAxmD;;;;;;;;;;;;;;;;;;;;;;;;AE5CL;AAAA;AAAA;;AAOA;AAAA;AAAA;;AASA;AAAA;AAAA;;AAOA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACXY;;;;;;AAEI,kDAAoB,SAApB,EAAoB,IAApB,EAAoB,MAApB,EAAoB,OAApB,EAAoB,QAApB,EAAoB,aAApB;;;;;;;;;;;QD2BHymD,oC;;;;;AA6CT,oDACY7pC,QADZ,EAEYiT,IAFZ,EAGYC,OAHZ,EAIY8xB,WAJZ,EAKqC5W,KALrC,EAKoE;AAAA;;AAAA;;AAEhE;AANQ,gBAAApuB,QAAA,GAAAA,QAAA;AACA,gBAAAiT,IAAA,GAAAA,IAAA;AACA,gBAAAC,OAAA,GAAAA,OAAA;AACA,gBAAA8xB,WAAA,GAAAA,WAAA;AACyB,gBAAA5W,KAAA,GAAAA,KAAA;AAjDrC;;AACiB,gBAAA58B,KAAA,GAAQ,IAAI,OAAA0zC,YAAJ,EAAR;AACjB;;AACO,gBAAA94C,SAAA,GAA4B,EAA5B;;AAiDH,YAAI,CAAC,QAAKgiC,KAAL,CAAWnuB,IAAhB,EAAsB;AAClB,kBAAKD,QAAL,CAAcy5B,WAAd,CAA0B,wBAA1B;;AACA,kBAAKuL,WAAL,CAAiBlb,KAAjB;AACH;;AAN+D;AAOnE;AAnDD;;;;;mCAqDe;AAAA;;AACX;AACA,cAAI,KAAKsE,KAAL,CAAWnuB,IAAX,CAAgBkxB,QAAhB,CAAyBrvC,KAA7B,EAAoC;AAChC,iBAAKD,YAAL,CACI,WADJ,EAEI,KAAKusC,KAAL,CAAWnuB,IAAX,CAAgBkxB,QAAhB,CAAyBrvC,KAAzB,CAA+B4+B,YAA/B,CAA4C3+B,SAA5C,CAAsD,UAACD,KAAD,EAAW;AAC7D;AACA,kBAAI,CAACA,KAAD,IAAUA,KAAK,CAACkE,MAAN,IAAgB,CAA9B,EAAiC;AAC7B,uBAAI,CAACg/C,WAAL,CAAiBlb,KAAjB;AACH;AACJ,aALD,CAFJ;AASH;;AACD,eAAK19B,SAAL,GAAiB,KAAKgiC,KAAL,CAAWnuB,IAAX,CAAgBkxB,QAAhB,CAAyBrvC,KAAzB,CAA+BkF,KAA/B,CAAqC2C,GAArC,CAAyC,UAAC6C,IAAD;AAAA,mBAAU,IAAI,cAAAw6B,YAAJ,CAAiBx6B,IAAI,CAAC0T,MAAL,EAAjB,CAAV;AAAA,WAAzC,CAAjB;AACH;;;4BAlEe;;;AACZ,iBAAO,KAAKgT,OAAL,CAAa5rB,IAAb,CAAkB,CAAD,iBAAC,KAAK8mC,KAAL,CAAWnuB,IAAZ,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAEkxB,QAAlB,MAA0B,IAA1B,IAA0B,aAA1B,GAA0B,MAA1B,GAA0B,GAAEzT,WAA3B,MAAsC,IAAtC,IAAsC,aAAtC,GAAsC,MAAtC,GAAsC,GAAE12B,KAA1D,CAAP;AACH;AAED;;;;4BACwB;AACpB,cAAIlD,IAAI,GAAG,KAAKsqC,KAAL,CAAW3pC,MAAtB;;AACA,cAAI,KAAK2pC,KAAL,CAAWnuB,IAAX,IAAmB,KAAKmuB,KAAL,CAAWnuB,IAAX,CAAgBkxB,QAAhB,CAAyBvU,aAAhD,EAA+D;AAC3D94B,gBAAI,GAAGA,IAAI,CAACa,QAAL,CAAc;AAAEJ,qBAAO,EAAE,KAAK6pC,KAAL,CAAWnuB,IAAX,CAAgBkxB,QAAhB,CAAyBvU,aAAzB,CAAuC51B;AAAlD,aAAd,CAAP;AACH;;AACD,iBAAOlD,IAAI,CAACsB,UAAL,CAAgB,OAAhB,EAAyBmJ,iBAAzB,EAAP;AACH;AAED;;;;4BACqB;AACjB,iBAAO,KAAK6/B,KAAL,CAAWnuB,IAAX,CAAgBkxB,QAAhB,CAAyBrvC,KAAhC;AACH;AAED;;;;4BACqB;AACjB,iBAAO,KAAKsK,SAAL,CAAe3E,MAAf,CAAsB,UAAC0gC,MAAD,EAAS37B,IAAT,EAAkB;AAC3C,gBAAMi7B,KAAK,GAAGj7B,IAAI,CAACi7B,KAAnB;AACA,mBAAOU,MAAM,GAAG37B,IAAI,CAAC27B,MAAL,GAAcV,KAA9B;AACH,WAHM,EAGJ,CAHI,CAAP;AAIH;AAED;;;;4BACiB;AAAA;;AACb;AACA,cAAI,CAAC,KAAKxgB,KAAN,IAAe,CAAC,KAAKA,KAAL,CAAWkI,KAA/B,EAAsC;AAClC,mBAAO,KAAP;AACH;;AACD,cAAM/H,QAAQ,GAAG,KAAK6L,IAAL,CAAUra,SAAV,CAAoBtR,IAApB,CACb,UAAC2kC,GAAD;AAAA,mBAASA,GAAG,CAACl2B,EAAJ,KAAW,OAAI,CAACkR,KAAL,CAAWkI,KAAX,CAAiB+c,WAArC;AAAA,WADa,KAEZ;AAAE4B,oBAAQ,EAAE;AAAZ,WAFL;AAGA,iBAAO1mB,QAAQ,CAAC0mB,QAAhB;AACH;;;;MA3CqD,OAAAvtC,a;;AAL1D;;;uBAKaspD,oC,EAAoC,2C,EAAA,4C,EAAA,sC,EAAA,qC,EAAA,qBAkDjC,SAAAlC,eAlDiC,C;AAkDlB,K;;;YAlDlBkC,oC;AAAoC,+C;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,e;AAAA,a;AAAA,kS;AAAA;AAAA;ACzCjD;AACI;AAAA;AAAgE;AAChE;AACI;AACJ;AACJ;AACA;AACI;AACI;AACI;AAAc;AAAM;AAA0C;AAAQ;AAAG;AAAM;AAAmB;AACtG;AACA;AACI;AAOJ;AACA;AACI;AAAO;AAAY;AACnB;AAAmB;;AAAwC;AAC/D;AACJ;AACJ;AACA;AACI;AACI;AAAmB;AAAA,mBAAS,IAAAr4C,KAAA;AAAA,sBAAqB;AAArB,cAAT;AAAuC,WAAvC;AAAnB;AAA0G;AAC9G;AACJ;;;;AA3BkB;AAAA;AAMc;AAAA;AAA2D;AAAA;AAI3E;AAAA;AASe;AAAA;;;;;;;;;;2BDmBlBq4C,oC,EAAoC;cALhD,OAAAjC,SAKgD;eALtC;AACPlnD,kBAAQ,EAAE,0BADH;AAEPmnD,qBAAW,EAAE,yCAFN;AAGPC,mBAAS,EAAE,CAAC,yCAAD;AAHJ,S;AAKsC,Q;;;;;;;;;;;;kBAkDxC,OAAArT,M;mBAAO,SAAAkT,e;;;;;gBAhDX,OAAAI;;;;;;;;;;;;;;;;;;;;;;;;AE3CL;AAAA;AAAA;;AASA;AAAA;AAAA;;AAMA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAcA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5BY;;;;;;AAEI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCI;;;;;;;AAzBZ;AACI;AACI;AAAA;AAGA;AACA;AACI;AAAA;AAMC;AACL;AACJ;AACA;AACI;AAAA;AAQI;AACJ;AAAA;AACA;AACI;AAAA;AAAA;AAOA;AAAA;AACI;AACJ;AAAA;AACA;AAAA;AAEA;AACJ;AACJ;AACJ;;;;;AA3CsD;AAmB1C;AAAA;AAMM;AAAA;AAeN;AAAA;AAAA;;;;;;;;;;;QDbP+B,6B;AAyCT,6CACY72B,IADZ,EAEY2b,MAFZ,EAGYmb,qBAHZ,EAIqC3b,KAJrC,EAIoE;AAAA;;AAHxD,aAAAnb,IAAA,GAAAA,IAAA;AACA,aAAA2b,MAAA,GAAAA,MAAA;AACA,aAAAmb,qBAAA,GAAAA,qBAAA;AACyB,aAAA3b,KAAA,GAAAA,KAAA;AA5CrC;;AACiB,aAAA58B,KAAA,GAAQ,IAAI,OAAA0zC,YAAJ,EAAR;AACjB;;AACO,aAAAnsB,KAAA,GAAyB,EAAzB;AACP;;AACO,aAAA6H,KAAA,GAAyB,EAAzB;AACP;;AACO,aAAAopB,WAAA,GAA+B,EAA/B;AACP;;AACO,aAAA/pC,IAAA,GAA2B,EAA3B;AACP;;AACO,aAAAgqC,iBAAA,GAAsC,EAAtC;AACP;;AACO,aAAAC,YAAA,GAAuB,CAAvB;AAiCN;AA7BD;;;;;mCA+Be;AACX,cAAMC,SAAS,GAAG,KAAK/b,KAAL,CAAWgc,WAAX,CAAuBpjD,KAAvB,CAA6B0D,MAA7B,CACd,UAAC4wB,IAAD;AAAA,mBAAuBA,IAAI,CAACvyB,IAAL,KAAc,UAArC;AAAA,WADc,CAAlB;;AAGA,eAAKgwB,KAAL,GAAaoxB,SAAS,CAAC1iD,MAAV,CAAiB,UAACkC,GAAD,EAAM2xB,IAAN,EAAe;AACzC3xB,eAAG,CAAC2xB,IAAI,CAACrU,KAAN,CAAH,GAAkBqU,IAAI,CAAC7f,OAAvB;AACA,mBAAO9R,GAAP;AACH,WAHY,EAGV,EAHU,CAAb;AAIA,eAAKi3B,KAAL,GAAa,KAAKwN,KAAL,CAAW1T,QAAX,CAAoB1zB,KAApB,CAA0BS,MAA1B,CAAiC,UAACkC,GAAD,EAAM8zB,KAAN,EAA+B;AACzE9zB,eAAG,CAAC8zB,KAAK,CAACC,WAAP,CAAH,GAAyBD,KAAK,CAACyL,WAA/B;AACA,mBAAOv/B,GAAP;AACH,WAHY,EAGV,EAHU,CAAb;AAIA,eAAK0gD,kBAAL;AACH;;;iCAEY;AAAA;;AACT,eAAKj1B,UAAL,CAAgBlzB,OAAhB,CAAwB,UAAC+kB,KAAD;AAAA,mBAAW,OAAI,CAAChH,IAAL,CAAUgH,KAAK,CAAC/R,KAAhB,EAAuBo1C,gBAAvB,EAAX;AAAA,WAAxB;AACA;;AACA,cAAI,KAAKC,QAAT,EAAmB;AACf;AACA,gBAAMxxB,KAAK,GAAG,KAAKqV,KAAL,CAAWgc,WAAX,CAAuBpjD,KAAvB,CAA6B0D,MAA7B,CACV,UAAC4wB,IAAD;AAAA,qBAAuBA,IAAI,CAACvyB,IAAL,KAAc,UAArC;AAAA,aADU,CAAd;;AAGA,gBAAMyhD,SAAS,GAAG,KAAKp1B,UAAL,CAAgBzrB,GAAhB,CACd,UAACsd,KAAD;AAAA,qBACK;AACGkU,sBAAM,EAAE,OAAI,CAACiT,KAAL,CAAW31B,OAAX,CAAmBmgB,SAAnB,GAA+B,OAAI,CAACwV,KAAL,CAAW31B,OAAX,CAAmBmgB,SAAnB,CAA6B,MAA7B,CAA/B,GAAsE,OAAI,CAACgW,MAAL,CAAYpP,OAAZ,CAAoB3/B,IADrG;AAEGkJ,oBAAI,EAAE,UAFT;AAGG0S,uBAAO,EAAE,OAAI,CAACwE,IAAL,CAAUgH,KAAK,CAAC/R,KAAhB,EAAuBi8B,QAAvB,CAAgCpY,KAAhC,CAAsC/xB,KAHlD;AAIGigB,qBAAK,EAAEA,KAAK,CAAC/R,KAJhB;AAKGpR,oBAAI,EAAE,UAAAyJ,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB+J;AAL7B,eADL;AAAA,aADc,CAAlB;;AAUA,iBAAKs8C,qBAAL,CAA2BU,QAA3B,CAAoCD,SAApC;;AACA,iBAAKpc,KAAL,CAAWgc,WAAX,CAAuB1lD,QAAvB,CAAgCq0B,KAAK,CAAC/C,MAAN,CAAaw0B,SAAb,EAAwB9/C,MAAxB,CAA+B,UAAC4wB,IAAD;AAAA,qBAAUA,IAAI,CAAC7f,OAAf;AAAA,aAA/B,CAAhC,EAhBe,CAiBf;;;AACA,gBAAM+hB,MAAM,GAAG,KAAK4Q,KAAL,CAAW1T,QAAX,CAAoB1zB,KAApB,CAA0B2C,GAA1B,CACX,UAAC8zB,KAAD;AAAA,qBACI,IAAI,cAAA9C,aAAJ,CAAkB,MAAD,OAAC,CAAD,kBACV8C,KADU,CAAC,EACN;AACRyL,2BAAW,EAAE,OAAI,CAACjpB,IAAL,CAAUwd,KAAK,CAACC,WAAhB,IACP,OAAI,CAACzd,IAAL,CAAUwd,KAAK,CAACC,WAAhB,EAA6ByT,QAA7B,CAAsCnjB,IAAtC,CAA2ChnB,KADpC,GAEP;AAHE,eADM,CAAlB,CADJ;AAAA,aADW,CAAf;;AAUA,iBAAKonC,KAAL,CAAW1T,QAAX,CAAoBh2B,QAApB,CAA6B84B,MAA7B,EA5Be,CA6Bf;;;AACA,iBAAKhsB,KAAL,CAAWg1C,IAAX,CAAgB;AAAE/+B,oBAAM,EAAE;AAAV,aAAhB;AACH,WA/BD,MA+BO;AACH,iBAAKijC,eAAL;AACH;AACJ;AAED;;;;6CAC0B;AAAA;;;;AAAA,uDACF,KAAKt1B,UADH;AAAA;;AAAA;AAAA;AAAA,kBACXnO,KADW;;AAElB,kBAAMG,QAAQ,GAAG,OAAI,CAAC6L,IAAL,CAAUra,SAAV,CAAoBtR,IAApB,CACb,UAAA2kC,GAAG;AAAA,uBAAIA,GAAG,CAACl2B,EAAJ,KAAWkR,KAAK,CAACkI,KAAN,CAAY+c,WAA3B;AAAA,eADU,CAAjB;;AAIA,qBAAI,CAAC+d,iBAAL,CAAuBhjC,KAAK,CAAC/R,KAA7B,IAAsC,OAAA+R,KAAK,SAAL,IAAAA,KAAK,WAAL,GAAK,MAAL,GAAAA,KAAK,CAAE1b,OAAP,MAAc,IAAd,IAAc,aAAd,GAAc,MAAd,GAAc,GAAE29B,WAAhB,MAA2B,MAAIjiB,KAAK,SAAL,IAAAA,KAAK,WAAL,GAAK,MAAL,GAAAA,KAAK,CAAEhK,QAAX,MAAmB,IAAnB,IAAmB,aAAnB,GAAmB,MAAnB,GAAmB,GAAEisB,WAAhD,KAA+D,KAArG;AACA,qBAAI,CAACjpB,IAAL,CAAUgH,KAAK,CAAC/R,KAAhB,IAAyB,IAAI,QAAAgtB,SAAJ,CAAc;AACnCnJ,qBAAK,EAAE,IAAI,QAAA0G,WAAJ,CAAgB,OAAI,CAAC1G,KAAL,CAAW9R,KAAK,CAAC/R,KAAjB,KAA2B,EAA3C,CAD4B;AAEnC8Y,oBAAI,EAAE,IAAI,QAAAyR,WAAJ,CAAgB,OAAI,CAACmB,KAAL,CAAW3Z,KAAK,CAAC/R,KAAjB,KAA2B,EAA3C,EACF,OAAI,CAAC+0C,iBAAL,CAAuBhjC,KAAK,CAAC/R,KAA7B,IACI,CAAC,QAAAyqB,UAAA,CAAWqgB,OAAX,CAAmB,mBAAnB,CAAD,EAA0C,QAAArgB,UAAA,CAAWG,SAAX,CAAqB,CAArB,CAA1C,EAAoE,QAAAH,UAAA,CAAWC,QAA/E,CADJ,GACgG,CAAC,QAAAD,UAAA,CAAWqgB,OAAX,CAAmB,mBAAnB,CAAD,EAA0C,QAAArgB,UAAA,CAAWG,SAAX,CAAqB,CAArB,CAA1C,CAF9F;AAF6B,eAAd,CAAzB;AAPkB;;AACtB,sEAAqC;AAAA;AAYpC;AAbqB;AAAA;AAAA;AAAA;AAAA;AAczB;AAED;;;;0CACuB;;;AACnB,qBAAK6qB,WAAL,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAEhpD,aAAF,CAAgBipD,QAAhB,CAAyB;AACrCC,eAAG,EAAE,KAAKF,WAAL,CAAiBhpD,aAAjB,CAA+BmpD,YADC;AAErCC,gBAAI,EAAE,CAF+B;AAGrCC,oBAAQ,EAAE;AAH2B,WAAzB,CAAhB;AAKH;;;4BA5GoB;AAAA;;AACjB,iBAAO,CAAC,KAAK5c,KAAL,CAAWjoB,MAAX,IAAqB,EAAtB,EAA0Bzb,MAA1B,CAAiC,UAACuc,KAAD;AAAA,mBACpC,OAAI,CAACmnB,KAAL,CAAW1T,QAAX,CAAoB1zB,KAApB,CAA0BM,IAA1B,CAA+B,UAACm2B,KAAD;AAAA,qBAAWA,KAAK,CAACC,WAAN,KAAsBzW,KAAK,CAAC/R,KAAvC;AAAA,aAA/B,CADoC;AAAA,WAAjC,CAAP;AAGH;;;4BAEqB;AAClB,iBAAO,KAAK+K,IAAL,CAAU,KAAKmV,UAAL,CAAgB,KAAK80B,YAArB,EAAmCh1C,KAA7C,CAAP;AACH;;;4BAE6B;;;AAC1B,iBAAO,YAAK+1C,WAAL,CAAiB9Z,QAAjB,CAA0BnjB,IAA1B,CAA+Bk9B,MAA/B,MAAqC,IAArC,IAAqC,aAArC,GAAqC,MAArC,GAAqC,GAAElL,OAAvC,MAA8C,MAAI,KAAKiL,WAAL,CAAiB9Z,QAAjB,CAA0BnjB,IAA1B,CAA+Bk9B,MAAnC,MAAyC,IAAzC,IAAyC,aAAzC,GAAyC,MAAzC,GAAyC,GAAEC,SAAzF,CAAP;AACH;AAED;;;;4BACmB;AAAA;;AACf,iBAAO,KAAK/1B,UAAL,CAAgB3tB,MAAhB,CACH,UAACigB,KAAD,EAAQT,KAAR;AAAA,mBAAkBS,KAAK,IAAI,OAAI,CAACzH,IAAL,CAAUgH,KAAK,CAAC/R,KAAhB,EAAuBwS,KAAlD;AAAA,WADG,EAEH,IAFG,CAAP;AAIH;;;;;;AA5CL;;;uBAKaoiC,6B,EAA6B,4C,EAAA,qC,EAAA,6C,EAAA,qBA6C1B,SAAAnC,eA7C0B,C;AA6CX,K;;;YA7ClBmC,6B;AAA6B,+C;AAAA;AAAA;;;;;;;;;;;;;;;;;;AC9C1C;AACI;AACI;AAAe;AAAA;AAAA;AACX;AAIJ;AACJ;AACA;AACI;AACJ;AACJ;AACA;AACI;AACI;AACI;AACA;AAAkB;AAAmD;AACzE;AACA;AA4CJ;AACJ;AACA;AACI;AACI;AAA+B;AAAA,mBAAS,IAAAsB,MAAA,EAAT;AAAiB,WAAjB;AAA/B;AAEA;AACJ;AACJ;;;;AArEuB;AAAA;AAEP;AAAA;AAME;AAAA;AASJ;AAAA;;;;;;;;;2BD2BDtB,6B,EAA6B;cALzC,OAAAlC,SAKyC;eAL/B;AACPlnD,kBAAQ,EAAE,0BADH;AAEPmnD,qBAAW,EAAE,yCAFN;AAGPC,mBAAS,EAAE,CAAC,yCAAD;AAHJ,S;AAK+B,Q;;;;;;;;;;kBA6CjC,OAAArT,M;mBAAO,SAAAkT,e;;;;;gBA3CX,OAAAI;;;gBAcA,OAAAsD,S;iBAAU,S,EAAW;AAAE,sBAAQ;AAAV,W;;;;;;;;;;;;;;;;;;;;;;;;AE9D1B;AAAA;AAAA;;AAMA;AAAA;AAAA;;AAMA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACPQ;;;;;AAAuB;;;;;;AAD3B;AACI;AACA;AACI;AACJ;AACJ;;;;;AAJc;AAAA;AAEH;AAAA;;;;;;;;;;;;;;;;;;;;AAIf;AACI;AACI;AAAA;AAAqF;AACrF;AAAiC;AAAA;AAAA;AAAA;AAAA;AAAmB;AAAoB;AAC5E;AACJ;;;;;AAF4D;AAAA;;;;;;AAIxD;AACI;AACI;AACI;AACJ;AACA;AAAkB;AAAa;AACnC;AACJ;;;;;AAF0B;AAAA;;;;ADKjB,YAAAC,gBAAA,GAAmB;AAC5B5sD,YAAM,EAAE,MADoB;AAE5BooD,WAAK,EAAE,MAFqB;AAG5ByE,eAAS,EAAE,mBAHiB;AAI5B1E,cAAQ,EAAE;AAJkB,KAAnB;;QAYA2E,qB;;;;;AA0BT,qCACYzG,OADZ,EAEqC3W,KAFrC,EAE4D;AAAA;;AAAA;;AAExD;AAHQ,gBAAA2W,OAAA,GAAAA,OAAA;AACyB,gBAAA3W,KAAA,GAAAA,KAAA;AA3BrC;;AACiB,gBAAA58B,KAAA,GAAQ,IAAI,OAAA0zC,YAAJ,EAAR;AA0B2C;AAG3D;AAzBD;;;;;;AA2BA;;;iCAGgB;AACZ,eAAK1zC,KAAL,CAAWg1C,IAAX,CAAgB;AAAE/+B,kBAAM,EAAE;AAAV,WAAhB;AACH;;;4BA/Be;AACZ,iBAAO,CAAC,KAAK2mB,KAAL,GAAa,KAAKA,KAAL,CAAWxd,KAAxB,GAAgC,IAAjC,KAA0C,SAAjD;AACH;AAED;;;;4BACkB;AACd,iBAAO,CAAC,KAAKwd,KAAL,GAAa,KAAKA,KAAL,CAAWxyB,OAAxB,GAAkC,IAAnC,KAA4C,eAAnD;AACH;AAED;;;;4BACiB;AACb,iBAAO,CAAC,KAAKwyB,KAAL,GAAa,KAAKA,KAAL,CAAWr5B,MAAxB,GAAiC,IAAlC,KAA2C,IAAlD;AACH;AAED;;;;4BACe;AACX,iBAAO,CAAC,KAAKq5B,KAAL,GAAa,KAAKA,KAAL,CAAWzyB,IAAxB,GAA+B,IAAhC,KAAyC,IAAhD;AACH;;;;MAxBsC,OAAApb,a;;AAL3C;;;uBAKairD,qB,EAAqB,qC,EAAA,qBA4BlB,SAAA7D,eA5BkB,C;AA4BH,K;;;YA5BlB6D,qB;AAAqB,oC;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,c;AAAA,a;AAAA,oX;AAAA;AAAA;ACxClC;AACI;AAAqB;AAAwB;AACjD;AACA;AACI;AAMJ;AACA;AAMA;;;;;;AAhByB;AAAA;AAGH;AAAA,8CAAiC,UAAjC,EAAiC,GAAjC;AAOF;AAAA;;;;;;;;;2BD6BPA,qB,EAAqB;cALjC,OAAA5D,SAKiC;eALvB;AACPlnD,kBAAQ,EAAE,eADH;AAEPmnD,qBAAW,EAAE,gCAFN;AAGPC,mBAAS,EAAE,CAAC,gCAAD;AAHJ,S;AAKuB,Q;;;;;;kBA4BzB,OAAArT,M;mBAAO,SAAAkT,e;;;;;gBA1BX,OAAAI;;;;;;;;;;;;;;;;;;;;;;;;AE1CL;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;AAEA,QAAM0D,YAAY,GAAG,CACjB,+BAAAvC,yBADiB,EAEjB,2BAAAG,qBAFiB,EAGjB,0BAAAmC,qBAHiB,EAIjB,8BAAAE,wBAJiB,EAKjB,mCAAA7B,oCALiB,EAMjB,mCAAAC,6BANiB,EAOjB,sCAAA6B,gCAPiB,EAQjB,4BAAA/G,uBARiB,EASjB,sBAAAgH,iBATiB,EAUjB,yBAAA5D,oBAViB,CAArB;;QA+Ba6D,oB;;;;AAlBb;;YAkBaA;;;;yBAAAA,oB;AAAoB,O;AAAA,gBAjBpB,CACL,YAAAC,cADK,EAEL,QAAAC,WAFK,EAGL,QAAAC,mBAHK,EAIL,SAAAjtD,YAJK,EAKL,KAAAktD,QALK,EAML,OAAAtrD,UANK,EAOL,kBAAAurD,YAPK,CAiBoB,EAHzB,OAAAvrD,UAGyB;;;;+EAApBkrD,oB,EAAoB;AAAA,uBA9B7B,+BAAA3C,yBA8B6B,EA7B7B,2BAAAG,qBA6B6B,EA5B7B,0BAAAmC,qBA4B6B,EA3B7B,8BAAAE,wBA2B6B,EA1B7B,mCAAA7B,oCA0B6B,EAzB7B,mCAAAC,6BAyB6B,EAxB7B,sCAAA6B,gCAwB6B,EAvB7B,4BAAA/G,uBAuB6B,EAtB7B,sBAAAgH,iBAsB6B,EArB7B,yBAAA5D,oBAqB6B;AArBT,kBAKhB,YAAA8D,cALgB,EAMhB,QAAAC,WANgB,EAOhB,QAAAC,mBAPgB,EAQhB,SAAAjtD,YARgB,EAShB,KAAAktD,QATgB,EAUhB,OAAAtrD,UAVgB,EAWhB,kBAAAurD,YAXgB,CAqBS;AAVb,kBApBhB,+BAAAhD,yBAoBgB,EAnBhB,2BAAAG,qBAmBgB,EAlBhB,0BAAAmC,qBAkBgB,EAjBhB,8BAAAE,wBAiBgB,EAhBhB,mCAAA7B,oCAgBgB,EAfhB,mCAAAC,6BAegB,EAdhB,sCAAA6B,gCAcgB,EAbhB,4BAAA/G,uBAagB,EAZhB,sBAAAgH,iBAYgB,EAXhB,yBAAA5D,oBAWgB,EAOZ,OAAArnD,UAPY;AAUa,O;AAHf,K;;;;;2BAGLkrD,oB,EAAoB;cAlBhC,OAAA7sD,QAkBgC;eAlBvB;AACNC,iBAAO,EAAE,CACL,YAAA6sD,cADK,EAEL,QAAAC,WAFK,EAGL,QAAAC,mBAHK,EAIL,SAAAjtD,YAJK,EAKL,KAAAktD,QALK,EAML,OAAAtrD,UANK,EAOL,kBAAAurD,YAPK,CADH;AAUNrrD,sBAAY,YACL4qD,YADK,CAVN;AAaN3qD,iBAAO,YACA2qD,YADA,GAEH,OAAA9qD,UAFG;AAbD,S;AAkBuB,Q;;;;;;;;;;;;;;;;;;;;;;ACpDjC;AAAA;AAAA;;AAGA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACFI;AACI;AACJ;;;;AADc;AAAA;;;;;;AAGlB;AACI;AACJ;;;;;AADe;AAAA;;;;;;;;AAEf;AACI;AAAoE;AAAM;AAC1E;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAI;AAC/D;;;;;;AAEI;AACI;AACI;AACI;AACJ;AACA;AACI;AACJ;AACJ;AACJ;;;;QDZS0oD,qB;;;;;AALb;AAAA;;AAAA;;;AAMI;;AACiB,iBAAA73C,KAAA,GAAQ,IAAI,OAAA0zC,YAAJ,EAAR;AAPrB;AA8CC;;;;mCA/BkB;AACX,eAAKxoC,IAAL,GAAY,IAAI,cAAA0b,IAAJ,EAAZ;AACA,eAAKnY,IAAL,GAAY,cAAA8/B,gBAAA,CAAiB,KAAKrjC,IAAtB,CAAZ;AACH;;;sCAEoB;AACjB,eAAKuD,IAAL,CAAUqqC,gBAAV;;AACA,cAAI,KAAKrqC,IAAL,CAAUyH,KAAd,EAAqB;AACjB,gBAAI,CAAC,KAAKzH,IAAL,CAAUkxB,QAAV,CAAmBj8B,KAAnB,CAAyBlO,KAA9B,EAAqC;AACjC,mBAAKiZ,IAAL,CAAUkxB,QAAV,CAAmBj8B,KAAnB,CAAyBxQ,QAAzB,WACON,IAAI,CAACY,KAAL,CAAWZ,IAAI,CAACuJ,MAAL,KAAgB,KAA3B,CADP;AAGH;;AACD,gBAAM+vC,SAAS,GAAG,KAAKz9B,IAAL,CAAUjZ,KAAV,CAAgBo3C,UAAhB,CAA2Bt4C,KAA3B,CAAiC,GAAjC,EACjB6D,GADiB,CACb,UAACiC,IAAD;AAAA,qBAAUA,IAAI,CAACimC,MAAL,CAAY,CAAZ,EAAe3+B,WAAf,KAA+BtH,IAAI,CAAChC,KAAL,CAAW,CAAX,EAAc4B,WAAd,EAAzC;AAAA,aADa,EAEjB2B,IAFiB,CAEZ,GAFY,CAAlB;AAIA,gBAAM6uC,QAAQ,GAAG,KAAK/7B,IAAL,CAAUjZ,KAAV,CAAgBq3C,SAAhB,CAA0Bv4C,KAA1B,CAAgC,GAAhC,EAChB6D,GADgB,CACZ,UAACiC,IAAD;AAAA,qBAAUA,IAAI,CAACimC,MAAL,CAAY,CAAZ,EAAe3+B,WAAf,KAA+BtH,IAAI,CAAChC,KAAL,CAAW,CAAX,EAAc4B,WAAd,EAAzC;AAAA,aADY,EAEhB2B,IAFgB,CAEX,GAFW,CAAjB;AAIA,gBAAMg/C,QAAQ,GAAG,IAAI,cAAA/zB,IAAJ,CAAS,MAAD,OAAC,CAAD,kBAClB,KAAKnY,IAAL,CAAUjZ,KADQ,CAAC,EACJ;AAClBnH,kBAAI,YAAK69C,SAAL,cAAkB1B,QAAlB,CADc;AAElBjzC,kBAAI,EAAE,UAFY;AAGlBk0B,sBAAQ,EAAE,IAHQ;AAIlB8f,qBAAO,EAAE;AAJS,aADI,CAAT,CAAjB;AAOA,iBAAKvrC,KAAL,CAAWg1C,IAAX,CAAgB;AAAE/+B,oBAAM,EAAE,MAAV;AAAkBhH,sBAAQ,EAAE0rC;AAA5B,aAAhB;AACH;AACJ;;;;MAxCsC,OAAA5rD,a;;AAL3C;;;qDAKa8oD,qB;AAAqB,K;;;YAArBA,qB;AAAqB,qC;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,c;AAAA,a;AAAA,sc;AAAA;AAAA;ACXlC;AACI;AAAqB;AAAqB;AAC1C;AAGJ;AACA;AAGA;AAIA;;;;;;AAX6C;AAAA;AAI3B;AAAA,8CAAiC,UAAjC,EAAiC,GAAjC;AAGV;AAAA;;;;;;sEDEKA,qB;;;;2BAAAA,qB,EAAqB;cALjC,OAAAzB,SAKiC;eALvB;AACPlnD,kBAAQ,EAAE,gBADH;AAEPmnD,qBAAW,EAAE,iCAFN;AAGPC,mBAAS,EAAE,CAAC,iCAAD;AAHJ,S;AAKuB,Q;;gBAE7B,OAAAC;;;;;;;;;;;;;;;;;;;;;;;;AEbL;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAGA;AAAA;AAAA;;;;;;;;;;;;;;QAUa2D,wB;;;;;AACT,wCACY1G,WADZ,EAC+D;AAAA;;AAAA;;AAE3D;AAFQ,iBAAAA,WAAA,GAAAA,WAAA,CAAmD,CAK/D;;AACiB,iBAAAxzC,KAAA,GAAQ,IAAI,OAAA0zC,YAAJ,EAAR;AAN8C;AAG9D,O,CAKD;;;;;kCACiB;AACb,eAAK1zC,KAAL,CAAWg1C,IAAX,CAAgB;AAAE/+B,kBAAM,EAAE;AAAV,WAAhB;;AACA,eAAKu9B,WAAL,CAAiBlb,KAAjB;AACH,S,CAED;;;;iCACgB;AACZ,eAAKt4B,KAAL,CAAWg1C,IAAX,CAAgB;AAAE/+B,kBAAM,EAAE;AAAV,WAAhB;;AACA,eAAKu9B,WAAL,CAAiBlb,KAAjB;AACH;;;;MApByC,OAAAvpC,a;;AAL9C;;;uBAKamrD,wB,EAAwB,qC;AAAA,K;;;YAAxBA,wB;AAAwB,wC;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,e;AAAA,a;AAAA,mO;AAAA;AAAA;AClBrC;AACI;AACI;AACI;AACI;AACI;AACA;AAAG;AACH;AAAI;AAAsC;AAC9C;AACJ;AACA;AACI;AACgC;AAAA,mBAAiB,IAAAU,OAAA,EAAjB;AAA0B,WAA1B,EAA2B,iBAA3B,EAA2B;AAAA,mBACZ,IAAAC,MAAA,EADY;AACJ,WADvB;AAE/B;AACL;AACJ;AACJ;AACJ;;;;;;;;;2BDAaX,wB,EAAwB;cALpC,OAAA9D,SAKoC;eAL1B;AACPlnD,kBAAQ,EAAE,mBADH;AAEPmnD,qBAAW,EAAE,oCAFN;AAGPC,mBAAS,EAAE,CAAC,oCAAD;AAHJ,S;AAK0B,Q;;;;;;gBAQhC,OAAAC;;;;;;;;;;;;;;;;;;;;;;;;AE1BL;AAAA;AAAA;;AASA;AAAA;AAAA;;AAMA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAYA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxBoB;AACI;AAIJ;;;;;AAJI;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BZ;AACI;AAAA;AAGA;AACA;AACI;AAAA;AAMC;AACL;AACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcuB;;;;;;;AAZnB;AAKI;AAAA;AAOe;AAGf;AAAA;AACA;AACI;AAAA;AAAA;AAOA;AAAA;AACI;AAEJ;AAAA;AACA;AAAA;AAEA;AACJ;AACJ;;;;;AAzBQ;AAAA;AAKiB;AAAA;AAkBjB;AAAA;AAAA;;;;;;AA/ChB;AACI;AAeA;AACI;AAiCA;AACI;AAAA;AAQsB;AACtB;AAAA;AACA;AACI;AAAA;AAAA;AASA;AAAA;AACI;AAEJ;AAAA;AACA;AAAA;AAEA;AACJ;AACJ;AACJ;AACJ;;;;;AAjFsD;AAC/B;AAAA;AAmBX;AAAA;AAiCI;AAAA;;;;;;;;;;;QDvCX4D,gC;AA4CT,gDACY14B,IADZ,EAEY2b,MAFZ,EAGqCR,KAHrC,EAIYvzB,SAJZ,EAIsC;AAAA;;AAH1B,aAAAoY,IAAA,GAAAA,IAAA;AACA,aAAA2b,MAAA,GAAAA,MAAA;AACyB,aAAAR,KAAA,GAAAA,KAAA;AACzB,aAAAvzB,SAAA,GAAAA,SAAA;AA/CZ;;AACiB,aAAArJ,KAAA,GAAQ,IAAI,OAAA0zC,YAAJ,EAAR;AACjB;;AACO,aAAAnsB,KAAA,GAAyB,EAAzB;AACP;;AACO,aAAA6H,KAAA,GAAyB,EAAzB;AACP;;AACO,aAAAopB,WAAA,GAA+B,EAA/B;AACP;;AACO,aAAA/pC,IAAA,GAA2B,EAA3B;AAGP;;AACO,aAAAiqC,YAAA,GAAuB,CAAvB;AAoCH,aAAK9qB,WAAL,GAAmBvkB,SAAS,CAAC8G,SAA7B;AACA,aAAK7C,QAAL,GAAgBjE,SAAS,CAACiE,QAA1B;AACH;AAlCD;;;;;mCAoCe;AACX,cAAMqrC,SAAS,GAAG,KAAK/b,KAAL,CAAWgc,WAAX,CAAuBpjD,KAAvB,CACb0D,MADa,CACN,UAAC4wB,IAAD;AAAA,mBAAuBA,IAAI,CAACvyB,IAAL,KAAc,WAArC;AAAA,WADM,CAAlB;;AAEA,eAAKgwB,KAAL,GAAaoxB,SAAS,CAAC1iD,MAAV,CAAiB,UAACkC,GAAD,EAAM2xB,IAAN,EAAe;AACzC3xB,eAAG,CAAC2xB,IAAI,CAACrU,KAAN,CAAH,GAAkBqU,IAAI,CAAC7f,OAAvB;AACA,mBAAO9R,GAAP;AACH,WAHY,EAGV,EAHU,CAAb;AAIA,eAAKi3B,KAAL,GAAa,MAAH,OAAG,CAAH,EAAG,EAAK,KAAKwN,KAAL,CAAWke,WAAX,CAAuBtlD,KAA5B,CAAb;AACA,eAAKgjD,WAAL,GAAmB,MAAH,OAAG,CAAH,EAAG,EAAK,KAAK5b,KAAL,CAAWme,iBAAX,CAA6BvlD,KAAlC,CAAnB;AACA,eAAKqjD,kBAAL;AACH;;;iCAEY;AAAA;;AACT;AACA,cAAMmC,eAAe,GAAG,KAAKp3B,UAAL,CAAgB,CAAhB,EAAmBlgB,KAA3C,CAFS,CAIT;;AACA,eAAKkgB,UAAL,CAAgBlzB,OAAhB,CAAwB,UAAA+kB,KAAK,EAAI;AAC7B,gBAAIA,KAAK,CAAC/R,KAAN,KAAgBs3C,eAApB,EAAqC;AACjC,sBAAI,CAACvsC,IAAL,CAAUgH,KAAK,CAAC/R,KAAhB,EAAuBi8B,QAAvB,CAAgCpY,KAAhC,CAAsCr0B,QAAtC,CAA+C,QAAI,CAACub,IAAL,CAAUusC,eAAV,EAA2Brb,QAA3B,CAAoCpY,KAApC,CAA0C/xB,KAAzF;;AACA,sBAAI,CAACiZ,IAAL,CAAUgH,KAAK,CAAC/R,KAAhB,EAAuBi8B,QAAvB,CAAgCnjB,IAAhC,CAAqCtpB,QAArC,CAA8C,QAAI,CAACub,IAAL,CAAUusC,eAAV,EAA2Brb,QAA3B,CAAoCnjB,IAApC,CAAyChnB,KAAvF;;AACA,sBAAI,CAACiZ,IAAL,CAAUgH,KAAK,CAAC/R,KAAhB,EAAuBi8B,QAAvB,CAAgCsb,UAAhC,CAA2C/nD,QAA3C,CAAoD,QAAI,CAACub,IAAL,CAAUusC,eAAV,EAA2Brb,QAA3B,CAAoCsb,UAApC,CAA+CzlD,KAAnG;AACH;AACJ,WAND;AAQA,eAAKouB,UAAL,CAAgBlzB,OAAhB,CAAwB,UAAA+kB,KAAK;AAAA,mBAAI,QAAI,CAAChH,IAAL,CAAUgH,KAAK,CAAC/R,KAAhB,EAAuBo1C,gBAAvB,EAAJ;AAAA,WAA7B;AACA;;AACA,cAAI,KAAKC,QAAT,EAAmB;AACf;AACA,gBAAMxxB,KAAK,GAAG,KAAKqV,KAAL,CAAWgc,WAAX,CAAuBpjD,KAAvB,CACT0D,MADS,CACF,UAAC4wB,IAAD;AAAA,qBAAuBA,IAAI,CAACvyB,IAAL,KAAc,WAArC;AAAA,aADE,CAAd;;AAEA,gBAAMyhD,SAAS,GAAG,KAAKp1B,UAAL,CAAgBzrB,GAAhB,CAAoB,UAAAsd,KAAK;AAAA,qBAAK;AAC5CkU,sBAAM,EAAE,QAAI,CAACyT,MAAL,CAAYpP,OAAZ,CAAoB3/B,IADgB;AAE5CkJ,oBAAI,EAAE,WAFsC;AAG5C0S,uBAAO,EAAE,QAAI,CAACwE,IAAL,CAAUgH,KAAK,CAAC/R,KAAhB,EAAuBi8B,QAAvB,CAAgCpY,KAAhC,CAAsC/xB,KAAtC,CAA4Ck7C,IAA5C,EAHmC;AAI5Cj7B,qBAAK,EAAEA,KAAK,CAAC/R,KAJ+B;AAK5CpR,oBAAI,EAAE,UAAAyJ,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB+J;AALkB,eAAL;AAAA,aAAzB,CAAlB;;AAOA,iBAAK2gC,KAAL,CAAWgc,WAAX,CAAuB1lD,QAAvB,CAAgCq0B,KAAK,CAAC/C,MAAN,CAAaw0B,SAAb,EAAwB9/C,MAAxB,CAA+B,UAAA4wB,IAAI;AAAA,qBAAIA,IAAI,CAAC7f,OAAT;AAAA,aAAnC,CAAhC;;AACA,iBAAK2yB,KAAL,CAAWke,WAAX,CAAuB5nD,QAAvB,CAAgC,KAAK0wB,UAAL,CAAgB3tB,MAAhB,CAAuB,UAACkC,GAAD,EAAMsd,KAAN,EAAgB;AACnEtd,iBAAG,CAACsd,KAAK,CAAC/R,KAAP,CAAH,GAAmB,QAAI,CAAC+K,IAAL,CAAUgH,KAAK,CAAC/R,KAAhB,EAAuBi8B,QAAvB,CAAgCnjB,IAAhC,CAAqChnB,KAAxD;AACA,qBAAO2C,GAAP;AACH,aAH+B,EAG7B,EAH6B,CAAhC;;AAIA,iBAAKykC,KAAL,CAAWme,iBAAX,CAA6B7nD,QAA7B,CAAsC,KAAK0wB,UAAL,CAAgB3tB,MAAhB,CAAuB,UAACkC,GAAD,EAAMsd,KAAN,EAAgB;AACzEtd,iBAAG,CAACsd,KAAK,CAAC/R,KAAP,CAAH,GAAmB,QAAI,CAAC+K,IAAL,CAAUgH,KAAK,CAAC/R,KAAhB,EAAuBi8B,QAAvB,CAAgCsb,UAAhC,CAA2CzlD,KAA9D;AACA,qBAAO2C,GAAP;AACH,aAHqC,EAGnC,EAHmC,CAAtC;;AAIA,iBAAK6H,KAAL,CAAWg1C,IAAX,CAAgB;AAAE/+B,oBAAM,EAAE;AAAV,aAAhB;AACH,WArBD,MAqBO;AACH,iBAAKkjC,WAAL,CAAiBhpD,aAAjB,CAA+BipD,QAA/B,CAAwC;AACpCC,iBAAG,EAAE,KAAKF,WAAL,CAAiBhpD,aAAjB,CAA+BmpD,YADA;AAEpCC,kBAAI,EAAE,CAF8B;AAGpCC,sBAAQ,EAAE;AAH0B,aAAxC;AAKH;AACJ;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;6CAE0B;AAAA;;iBAAA,CACtB;;;AACA,cAAI0B,uBAAuB,GAAG,KAA9B,CAFsB,CAItB;;AAJsB,uDAKF,KAAKt3B,UALH;AAAA;;AAAA;AAAA;AAAA,kBAKXnO,KALW;;AAMlB,kBAAMG,QAAQ,GAAG,QAAI,CAAC6L,IAAL,CAAUra,SAAV,CAAoBtR,IAApB,CACb,UAAA2kC,GAAG;AAAA,uBAAIA,GAAG,CAACl2B,EAAJ,MAAWkR,KAAK,SAAL,IAAAA,KAAK,WAAL,GAAK,MAAL,GAAAA,KAAK,CAAEkI,KAAP,CAAa+c,WAAxB,CAAJ;AAAA,eADU,CAAjB;;AANkB,kBASV3gC,OATU,GASY0b,KATZ,CASV1b,OATU;AAAA,kBASD0R,QATC,GASYgK,KATZ,CASDhK,QATC;AAUlB,kBAAM0vC,eAAe,GAAGphD,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAE0tB,cAAjC;AACA,kBAAM2zB,iBAAiB,GAAG,CAAH,KAAGxlC,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAEwY,QAAV,MAAkB,IAAlB,IAAkB,aAAlB,GAAkB,MAAlB,GAAkB,GAAE3G,cAA9C,CAXkB,CAalB;;AACA,kBAAI0zB,eAAe,IAAIC,iBAAvB,EAA0C;AACtCF,uCAAuB,GAAG,IAA1B;AACA,wBAAI,CAACzC,iBAAL,GAAyB,IAAzB;AACA;AACH,eAJD,MAIM;AACF,wBAAI,CAACA,iBAAL,GAAyB,KAAzB;AACH;AApBiB;;AAKtB,sEAAqC;AAAA;;AAAA,qCAY7B;AAIP,aArBqB,CAuBtB;AACA;AACA;;AAzBsB;AAAA;AAAA;AAAA;AAAA;;AAAA,uDA0BF,KAAK70B,UA1BH;AAAA;;AAAA;AA0BtB,sEAAqC;AAAA,kBAA1BnO,KAA0B;AACjC,mBAAKhH,IAAL,CAAUgH,KAAK,CAAC/R,KAAhB,IAAyB,IAAI,QAAAgtB,SAAJ,CAAc;AACnCnJ,qBAAK,EAAE,IAAI,QAAA0G,WAAJ,CAAgB,KAAK1G,KAAL,CAAW9R,KAAK,CAAC/R,KAAjB,KAA2B,EAA3C,CAD4B;AAEnC8Y,oBAAI,EAAE,IAAI,QAAAyR,WAAJ,CACF,KAAKmB,KAAL,CAAW3Z,KAAK,CAAC/R,KAAjB,KAA2B,EADzB,EAEFw3C,uBAAuB,GACnB,CAAC,QAAA/sB,UAAA,CAAWqgB,OAAX,CAAmB,gBAAnB,CAAD,EAAuC,QAAArgB,UAAA,CAAWG,SAAX,CAAqB,CAArB,CAAvC,EAAgE,QAAAH,UAAA,CAAWC,QAA3E,CADmB,GAEnB,CAAC,QAAAD,UAAA,CAAWG,SAAX,CAAqB,CAArB,CAAD,EAA0B,QAAAH,UAAA,CAAWqgB,OAAX,CAAmB,gBAAnB,CAA1B,CAJF,CAF6B;AAQnCyM,0BAAU,EAAE,IAAI,QAAAhtB,WAAJ,CAAgB,KAAKuqB,WAAL,CAAiB/iC,KAAK,CAAC/R,KAAvB,KAAiC,EAAjD,EAAqD,CAAC,QAAAyqB,UAAA,CAAWC,QAAZ,EAAsB,QAAAD,UAAA,CAAWqgB,OAAX,CAAmB,UAAnB,CAAtB,CAArD;AARuB,eAAd,CAAzB;AAUH;AArCqB;AAAA;AAAA;AAAA;AAAA;AAsCzB;;;4BA1JoB;AACjB,iBAAO,KAAK5R,KAAL,CAAWjoB,MAAlB;AACH;;;4BAEwB;AACrB,iBAAO,KAAP;AACH;;;4BAEqB;AAClB,iBAAO,KAAKlG,IAAL,CAAU,KAAKmV,UAAL,CAAgB,KAAK80B,YAArB,EAAmCh1C,KAA7C,CAAP;AACH;;;4BAE6B;;;AAC1B,iBAAO,YAAK+1C,WAAL,CAAiB9Z,QAAjB,CAA0BnjB,IAA1B,CAA+Bk9B,MAA/B,MAAqC,IAArC,IAAqC,aAArC,GAAqC,MAArC,GAAqC,GAAEC,SAAvC,MAAgD,MAAI,KAAKF,WAAL,CAAiB9Z,QAAjB,CAA0BnjB,IAA1B,CAA+Bk9B,MAAnC,MAAyC,IAAzC,IAAyC,aAAzC,GAAyC,MAAzC,GAAyC,GAAElL,OAA3F,CAAP;AACH;AAED;;;;4BACmB;AAAA;;AACf;AACA,iBAAO,KAAK5qB,UAAL,CAAgBpvB,MAAhB,GAAyB,CAAzB,IAA8B,KAAKovB,UAAL,CAAgB3tB,MAAhB,CAAuB,UAACigB,KAAD,EAAQT,KAAR;AAAA,mBAAkBS,KAAK,IAAI,QAAI,CAACzH,IAAL,CAAUgH,KAAK,CAAC/R,KAAhB,EAAuBwS,KAAlD;AAAA,WAAvB,EAAgF,IAAhF,CAArC;AACH;;;;;;AA5CL;;;uBAKaikC,gC,EAAgC,4C,EAAA,qC,EAAA,qBA+C7B,SAAAhE,eA/C6B,C,EA+Cd,wC;AAAA,K;;;YA/ClBgE,gC;AAAgC,kD;AAAA;AAAA;;;;;;;;;;;;;;;;;;AC7C7C;AACI;AACI;AACI;AACI;AAQJ;AACJ;AACJ;AACA;AACI;AACJ;AACJ;AACA;AACI;AACI;AACI;AACA;AAAA;AAMA;AACJ;AACA;AAkFJ;AACJ;AACA;AACI;AACI;AAA+B;AAAA,mBAAS,IAAAP,MAAA,EAAT;AAAiB,WAAjB;AAAmB;AAAc;AACpE;AACJ;;;;AAvGkB;AAAA;AAIR;AAAA;AAGO;AAAA;AAML;AAAA;AAAA;AAEE;AAAA;;;;;;;;;2BDcDO,gC,EAAgC;cAL5C,OAAA/D,SAK4C;eALlC;AACPlnD,kBAAQ,EAAE,6BADH;AAEPmnD,qBAAW,EAAE,4CAFN;AAGPC,mBAAS,EAAE,CAAC,4CAAD;AAHJ,S;AAKkC,Q;;;;;;;;kBA+CpC,OAAArT,M;mBAAO,SAAAkT,e;;;;;;;gBA7CX,OAAAI;;;gBAcA,OAAAsD,S;iBAAU,S,EAAW;AAAE,sBAAQ;AAAV,W;;;;;;;;;;;;;;;;;;;;;;;;;;;;AE7D1B;AAAA;AAAA;;AAOA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAMA;AAAA;AAAA;;AAUA;AAAA;AAAA;;AAaA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAMA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtBgB;AAA6C;AAAI;;;;;;AAOzC;AACI;AACJ;;;;;AAFuC;AACnC;AAAA;;;;;;;;AAPZ;AACI;AAEI;AAAA;AAAA;AAAA;AAAA,WAAuB,aAAvB,EAAuB;AAAA;AAAA;AAAA,iBACR,QAAAwB,OAAA,mCAAkC,GAAlC,GAAwC,OAAH,YAAG,CAAH,EAArC,CADQ;AAC+C,SADtE;AAGA;AAGJ;AACJ;;;;;AAPQ;AAAA;AAGY;AAAA;;;;;;;;AAvBxB;AACI;AASI;AAAA;AAAA;AAAA;AAAA,WAAiC,cAAjC,EAAiC;AAAA;AAAA;AAAA;AAAA,SAAjC,EAAiC,gBAAjC,EAAiC;AAAA;AAAA;AAAA;AAAA,SAAjC;AAKH;AACD;AACA;AAWJ;;;;;AAxBQ;AAAA,wCAAiB,oBAAjB,EAAiB,IAAjB,EAAiB,SAAjB,EAAiB,cAAjB,EAAiB,iBAAjB,EAAiB,sBAAjB,EAAiB,YAAjB,EAAiB,IAAjB,EAAiB,SAAjB,EAAiB,IAAjB;AAYO;AAAA;AAC0B;AAAA;;;;;;;;;;;;;;AAoBzB;AACI;AAIJ;;;;AAHQ;AAAA;;;;;;;;;;;;;;;;AAPZ;AACI;AACI;AAAkB;AAAsB;AACxC;AAAkB;AAAsB;AAC5C;AACA;AAMA;AACI;AAIA;AAAkB;AAA2B;AACjD;AACA;AACI;AAII;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACJ;AACJ;AACJ;;;;;;AA1B0B;AAAA;AACA;AAAA;AAEI;AAAA;AAQlB;AAAA;AAGc;AAAA;AAEjB;AAAA;AAEG;AAAA;AAKA;AAAA;;;;;;AA1BhB;AACI;AA6BJ;;;;;AA7BsB;AAAA;;;;;;AAF1B;AACI;AA+BJ;;;;;;;;AA/BkB;AAAA,qEAAiD,UAAjD,EAAiD,GAAjD;;;;;;;;;;;;;;;;;;;;;;AAwCd;AACI;AASI;AAMJ;AACA;AACI;AAAkB;AAAgB;AAClC;AAAkB;AAAsB;AAC5C;AACA;AACI;AAGA;AAAkB;AAA2B;AACjD;AACA;AACI;AAAsC;AAAA;AAAA;AAAA;AAAA;AAAA;AAClC;AAGJ;AACJ;AACJ;;;;;;AA/BQ;AAAA;AACA;AAOI;AAAA;AAOc;AAAA;AACA;AAAA;AAId;AAAA;AAEc;AAAA;AAEjB;AAAA;AAGO;AAAA;;;;;;AAjCpB;AAGI;AAmCJ;;;;;AAnCsB;AAAA;;;;;;;;;;;;;;;AAN9B;AACI;AAAI;AAAe;AACnB;AACI;AAuCJ;AACA;AACI;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAqC;AAAc;AACtF;AACA;AAAwE;AAAA;AAAA;AAAA,qCAAqB,KAArB;AAA0B,SAA1B;AACpE;AACJ;AACA;AACI;AAAwB;AAAA;AAAA;AAAA,qCAAqB,IAArB;AAAyB,SAAzB;AACpB;AACJ;AACJ;AACJ;;;;;;;;AAtDK;AAAqD;AAI9C;AAAA,uFAA0E,UAA1E,EAA0E,GAA1E;AA0CgB;AAAA,sCAAoB,aAApB,EAAoB,IAApB;AACV;AAAA;AAII;AAAA;;;;;;AAO1B;AACI;AACI;AACJ;AACA;AAAkB;AAA2B;AACjD;;;;;;AAGA;AACI;AACI;AACJ;AACA;AAAkB;AAAoD;AAC1E;;;;AAHkB;AAAA;;;;;;AAMlB;AACI;AACI;AACJ;AACA;AAAkB;AAAkB;AACxC;;;;AAHkB;AAAA;;;;QD9ET3D,yB;;;;;AAkET,yCACYj2B,IADZ,EAEY2b,MAFZ,EAGY1b,OAHZ,EAIYrY,SAJZ,EAKYkqC,OALZ,EAMqC3W,KANrC,EAMgE;AAAA;;AAAA;;AAE5D;AAPQ,iBAAAnb,IAAA,GAAAA,IAAA;AACA,iBAAA2b,MAAA,GAAAA,MAAA;AACA,iBAAA1b,OAAA,GAAAA,OAAA;AACA,iBAAArY,SAAA,GAAAA,SAAA;AACA,iBAAAkqC,OAAA,GAAAA,OAAA;AACyB,iBAAA3W,KAAA,GAAAA,KAAA;AAvErC;;AACiB,iBAAA58B,KAAA,GAAQ,IAAI,OAAA0zC,YAAJ,EAAR;AAGjB;;AACO,iBAAA/+B,MAAA,GAAkB,EAAlB;AAOP;;AACgB,iBAAA0mC,OAAA,GAAU,IAAI,OAAAjtC,OAAJ,EAAV;AAChB;;AACO,iBAAAktC,eAAA,GAA2B,EAA3B;AACP;;AACO,iBAAAC,WAAA,GAAgC,EAAhC;AAOP;;AACO,iBAAAnd,KAAA,GAAoB,EAApB;AAmBA,iBAAAod,SAAA,GAAY,IAAI,QAAA9qB,SAAJ,CAAc;AAC7B/kB,kBAAQ,EAAE,IAAI,QAAAsiB,WAAJ,CAAgB,EAAhB;AADmB,SAAd,CAAZ;AAIA,iBAAA9Y,OAAA,GAAU,IAAI,OAAApnB,eAAJ,CAAyC,EAAzC,CAAV;AAEA,iBAAAgvB,eAAA,GAAkB,IAAI,OAAAhvB,eAAJ,CAAyC,EAAzC,CAAlB;AAKP;;AACO,iBAAAw1B,QAAA,GAAqB,EAArB;;AAuPA,iBAAAk4B,aAAA,GAAgB,YAAM;AACzB,cAAI,SAAKC,cAAL,CAAoBlnD,MAAxB,EAAgC;AAC5B,qBAAK6mD,OAAL,CAAa56C,IAAb,CAAkB,SAAKi7C,cAAvB;AACH,WAFD,MAEO;AACH,qBAAK/mC,MAAL,GAAc,EAAd;AACH;AACJ,SANM;;AArOH,iBAAKiZ,WAAL,GAAmBvkB,SAAS,CAAC8G,SAA7B;AACA,iBAAK7C,QAAL,GAAgBjE,SAAS,CAACiE,QAA1B;AAJ4D;AAK/D;AA9CD;;;;;mCAgDe;AAAA;;AACX,eAAKoU,OAAL,CAAa7W,WAAb,CAAyBzH,IAAzB,CAA8B,YAAAyG,KAAA,CAAM,UAACC,CAAD;AAAA,mBAAOA,CAAP;AAAA,WAAN,CAA9B,EAA+CvZ,SAA/C,CAAyD,YAAM;;;AAC3D,gBAAIorD,UAAU,GAAG,CAAjB,CAD2D,CAE3D;;AACA,oBAAI,CAACC,eAAL,GAAuB,QAAI,CAACP,OAAL,CAAaj4C,IAAb,CACnB,YAAA+f,YAAA,CAAa,GAAb,CADmB,EAEnB,YAAA+zB,oBAAA,EAFmB,EAGnB,YAAA9zB,SAAA,CAAU,UAACqX,GAAD,EAAS;AACf,sBAAI,CAAClvB,OAAL,GAAe,IAAf;AACA,kBAAMgY,QAAQ,GAAa,EAA3B;AACA;;AACA,kBAAI,QAAI,CAACs4B,eAAT,EAA0B;AACtBt4B,wBAAQ,CAACppB,IAAT,CAAc,QAAI,CAAC0hD,eAAL,CAAqBt3C,EAAnC;AACH;;AAED,kBAAIk2B,GAAG,SAAH,IAAAA,GAAG,WAAH,GAAG,MAAH,GAAAA,GAAG,CAAEruB,QAAL,CAAc,GAAd,CAAJ,EAAwB;AACpBquB,mBAAG,GAAG,QAAI,CAACihB,cAAX;AACH;;AAED,kBAAMn3C,EAAE,GAAGo3C,UAAX;AACA,qBAAO,QAAI,CAACj6B,OAAL,CAAajB,SAAb,CAAuB;AAC1B8C,wBAAQ,EAAE,CAAAkX,GAAG,SAAH,IAAAA,GAAG,WAAH,GAAG,MAAH,GAAAA,GAAG,CAAEjmC,MAAL,IAAcimC,GAAd,GAAoB,QAAI,CAACmC,KAAL,CAAWjoB,MAAX,CAAkB,CAAlB,EAAqBiB,QAArB,CAA8BrR,EAA9B,IAAoCgf,QAAQ,CAAC5nB,IAAT,CAAc,GAAd,CADxC;AAE1B1I,sBAAM,EAAE,QAAI,CAAC2pC,KAAL,CAAW3pC,MAFO;AAG1BI,wBAAQ,EAAE,QAAI,CAACupC,KAAL,CAAWvpC;AAHK,eAAvB,EAIJ2b,IAJI,CAIC,UAAOxe,IAAP;AAAA,uBAAgB,OAAD,UAAC,CAAD,QAAC,EAAD,MAAC,EAAD,MAAC,uCAAD;AAAA;AAAA;AAAA;AAAA;AAAA,6DAAE;AAAE+T,8BAAE,EAAFA,EAAF;AAAM/T,gCAAI,EAAJA;AAAN,2BAAF;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAC,EAAhB;AAAA,eAJD,CAAP;AAKH,aAlBD,CAHmB,EAsBnB,YAAAsgB,UAAA,CAAW,UAAChH,CAAD;AAAA,qBAAO,OAAAkH,EAAA,CAAG;AAAEzM,kBAAE,EAAEo3C,UAAN;AAAkBnrD,oBAAI,EAAE,EAAxB;AAA4BugB,qBAAK,EAAEjH;AAAnC,eAAH,CAAP;AAAA,aAAX,CAtBmB,EAuBnB,YAAA3R,GAAA,CAAI,UAAC2jD,IAAD,EAAyC;AACzC,sBAAI,CAACvwC,OAAL,GAAe,KAAf;AACA,kBAAM4mB,aAAa,GAAG2pB,IAAI,CAACtrD,IAAL,CAAU0I,MAAV,CAAiB,UAACuc,KAAD,EAAkB;AACrD;AACA,oBAAI,QAAI,CAACpM,SAAL,CAAe8G,SAAnB,EAA8B;AAC1B,yBAAO,CAAC,QAAI,CAAC4rC,WAAL,IAAoB,QAAI,CAACA,WAAL,CAAiBx3C,EAArC,GAA0CkR,KAAK,CAACI,KAAN,CAAYzJ,QAAZ,WAAwB,QAAI,CAAC2vC,WAAL,CAAiBx3C,EAAzC,EAA1C,GAA2F,IAA5F,KACH,CAAC,QAAI,CAAC+2C,eAAL,CAAqBxlD,IAArB,CAA0B,UAAC+R,CAAD;AAAA,2BAAOA,CAAC,CAACtD,EAAF,KAASkR,KAAK,CAAClR,EAAtB;AAAA,mBAA1B,CADL;AAEH;;AAED,oBAAMuR,KAAK,GAAGL,KAAK,CAACyuB,QAAN,CAAe;AACzBjxC,wBAAM,EAAE,QAAI,CAAC2pC,KAAL,CAAW3pC,MADM;AAEzBI,0BAAQ,EAAE,QAAI,CAACupC,KAAL,CAAWvpC,QAFI;AAGzBuY,sBAAI,EAAE,QAAI,CAACA,IAAL,IAAa,QAAI,CAACgxB,KAAL,CAAWhxB;AAHL,iBAAf,CAAd;AAKA,uBACIkK,KAAK,CAACK,IAAN,KAAe,IAAf,KACC,QAAI,CAAC4lC,WAAL,IAAoB,QAAI,CAACA,WAAL,CAAiBx3C,EAArC,GACKkR,KAAK,CAACI,KAAN,CAAYzJ,QAAZ,WAAwB,QAAI,CAAC2vC,WAAL,CAAiBx3C,EAAzC,EADL,GAEK,IAHN,KAIA,CAAC,QAAI,CAAC+2C,eAAL,CAAqBxlD,IAArB,CAA0B,UAACkmD,MAAD;AAAA,yBAAYA,MAAM,CAACz3C,EAAP,KAAckR,KAAK,CAAClR,EAAhC;AAAA,iBAA1B,CALL;AAOH,eAnBqB,CAAtB;AAoBA,qBAAOu3C,IAAI,CAACv3C,EAAL,KAAYo3C,UAAZ,GAAyBxpB,aAAzB,GAAyC,QAAI,CAACxd,MAArD;AACH,aAvBD,CAvBmB,CAAvB,CAH2D,CAmD3D;;AACA,oBAAI,CAACtkB,YAAL,CACI,gBADJ,EAEI,QAAI,CAACurD,eAAL,CAAqBrrD,SAArB,CAA+B,UAACC,IAAD,EAAU;AACrC,sBAAI,CAACmkB,MAAL,GAAcnkB,IAAI,CAAC0I,MAAL,CAAY,UAACuc,KAAD,EAAW;AACjC,oBAAI,CAACA,KAAK,CAACgL,SAAX,EAAsB;AAClB,yBAAO,KAAP;AACH;;AAHgC,6DAId,QAAI,CAAC8C,QAJS;AAAA;;AAAA;AAIjC,4EAAkC;AAAA,wBAAvB9mB,IAAuB;;AAC9B,wBAAIgZ,KAAK,CAACI,KAAN,CAAYzJ,QAAZ,CAAqB3P,IAArB,CAAJ,EAAgC;AAC5B,6BAAO,IAAP;AACH;AACJ;AARgC;AAAA;AAAA;AAAA;AAAA;;AASjC,uBAAO,CAAC,QAAI,CAAC8mB,QAAL,CAAc/uB,MAAtB;AACH,eAVa,CAAd;;AAWA,sBAAI,CAACmgB,MAAL,CAAYna,IAAZ,CAAiB,UAACC,CAAD,EAAIC,CAAJ;AAAA,uBAAU,QAAI,CAACF,IAAL,CAAUC,CAAV,EAAaC,CAAb,CAAV;AAAA,eAAjB;;AACA,kBAAI,CAAC,QAAI,CAACqiB,eAAL,CAAqBvnB,KAArB,CAA2BhB,MAAhC,EAAwC;AACpC,wBAAI,CAACynD,kBAAL;AACH;AACJ,aAhBD,CAFJ;;AAoBA,oBAAI,CAACJ,eAAL,GAAuB,eAAI,CAACjf,KAAL,CAAWjoB,MAAX,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAEngB,MAAnB,IACjB,QAAI,CAACitB,IAAL,CAAUra,SAAV,CAAoBtR,IAApB,CAAyB,UAACnF,CAAD;AAAA,qBAAOA,CAAC,CAAC4T,EAAF,KAAS,QAAI,CAACq4B,KAAL,CAAWjoB,MAAX,CAAkB,CAAlB,EAAqBgJ,KAArB,CAA2B+c,WAA3C;AAAA,aAAzB,CADiB,GAEjB,QAAI,CAACjZ,IAAL,CAAU7L,QAFhB;AAGA,oBAAI,CAACwoB,KAAL,GAAa,CAAC;AAAE75B,gBAAE,EAAE,EAAN;AAAUlW,kBAAI,EAAE;AAAhB,aAAD,EAA4Cm2B,MAA5C,CACT,QAAI,CAAC/C,IAAL,CAAUoc,WAAV,IAAyB,EADhB,CAAb;AAGA,oBAAI,CAACke,WAAL,GAAmB,QAAI,CAAC3d,KAAL,CAAW,CAAX,CAAnB;;AACA,oBAAI,CAACid,OAAL,CAAa56C,IAAb,CAAkB,EAAlB;AACH,WAhFD;;AAkFA,eAAKpQ,YAAL,CAAkB,WAAlB,EAA+B,KAAKoxB,IAAL,CAAU5wB,MAAV,CAAiB,WAAjB,EAA8BN,SAA9B,CAAwC,UAACitC,QAAD,EAAc;AACjF,gBAAMz1B,IAAI,GAAG,QAAI,CAAC0Z,IAAL,CAAU7L,QAAV,CAAmB7N,IAAhC;AACA,gBAAM7Q,QAAQ,GAAG,QAAI,CAACuqB,IAAL,CAAU7L,QAAV,CAAmB1e,QAApC;AACA,gBAAMglD,eAAe,GAAG;AACpBluD,iBAAG,EAAE;AAAEK,oBAAI,EAAE0Z,IAAR;AAAc7Q,wBAAQ,EAARA;AAAd,eADe;AAEpB1B,mBAAK,EAAE,CAAAgoC,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAEtkC,MAAV,CAAiB,UAACuhC,GAAD;AAAA,uBAASA,GAAG,CAAC1yB,IAAJ,KAAaA,IAAtB;AAAA,eAAjB,MAAgD;AAFnC,aAAxB;AAIA,gBAAMo0C,cAAc,GAAGD,eAAe,CAAC1mD,KAAhB,CAAsB2C,GAAtB,CACnB,UAACsiC,GAAD;AAAA,qBAAS,cAAAne,yBAAA,CAA0B4/B,eAAe,CAACluD,GAAhB,CAAoBK,IAA9C,EAAoDosC,GAApD,CAAT;AAAA,aADmB,CAAvB;AAGA,gBAAMrzB,SAAS,IACX,cAAAuV,wBAAA,CAAyBu/B,eAAe,CAACluD,GAAzC,CADW,4BAERmuD,cAFQ,EAAf;;AAIA,oBAAI,CAAChnC,OAAL,CAAa1U,IAAb,CAAkB2G,SAAlB;AACH,WAf8B,CAA/B;AAiBH;AAED;;;;iCACgBqO,K,EAAc;AAC1B,eAAK6lC,eAAL,CAAqBnhD,IAArB,CAA0Bsb,KAA1B;AACA,eAAK6lC,eAAL,GAAuB,OAAAtiD,MAAA,CAAO,KAAKsiD,eAAZ,EAA6B,IAA7B,CAAvB;AACH;AAED;;;;oCACmB7lC,K,EAAc;AAC7B,eAAK6lC,eAAL,GAAuB,KAAKA,eAAL,CAAqBpiD,MAArB,CAA4B,UAAC+8C,OAAD;AAAA,mBAAaA,OAAO,CAAC1xC,EAAR,KAAekR,KAAK,CAAClR,EAAlC;AAAA,WAA5B,CAAvB;AACH;AAED;;;;6BACY/T,I,EAAe;AAAA;;AACvB,cAAI,CAAC,KAAKosC,KAAL,CAAWgb,aAAhB,EAA+B;AAC3B;AACA,iBAAK53C,KAAL,CAAWg1C,IAAX,CAAgB;AAAE/+B,oBAAM,EAAE,MAAV;AAAkBhH,sBAAQ,EAAEze;AAA5B,aAAhB;AACA;AACH,WALsB,CAMvB;;;AACA,cAAIA,IAAI,CAAC,CAAD,CAAJ,CAAQsmB,YAAZ,EAA0B;AACtB,iBAAK9W,KAAL,CAAWg1C,IAAX,CAAgB;AAAE/+B,oBAAM,EAAE,MAAV;AAAkBhH,sBAAQ,EAAEze;AAA5B,aAAhB;AACA;AACH,WAVsB,CAWvB;;;AACA,eAAK4rD,mBAAL,GAA2B,KAAK7I,OAAL,CAAajpC,IAAb,CAAkB,8BAAA4vC,wBAAlB,EAA4C;AACnE3vC,sBAAU,EAAE,gBADuD;AAEnE8xC,qBAAS,EAAE,KAFwD;AAGnEC,yBAAa,EAAE;AAHoD,WAA5C,CAA3B;AAKA,eAAKjsD,YAAL,CACI,mBADJ,EAEI,KAAK+rD,mBAAL,CAAyB1G,iBAAzB,CAA2C11C,KAA3C,CAAiDzP,SAAjD,CAA2D,UAACyP,KAAD,EAAW;AAClE,gBAAIA,KAAK,CAACiW,MAAN,KAAiB,MAArB,EAA6B;AACzB,sBAAI,CAACjW,KAAL,CAAWg1C,IAAX,CAAgB;AAAE/+B,sBAAM,EAAE,MAAV;AAAkBhH,wBAAQ,EAAEze;AAA5B,eAAhB;AACH;;AACD,gBAAIwP,KAAK,CAACiW,MAAN,KAAiB,OAArB,EAA8B;AAC1B,sBAAI,CAACjW,KAAL,CAAWg1C,IAAX,CAAgB;AAAE/+B,sBAAM,EAAE;AAAV,eAAhB;AACH;AACJ,WAPD,CAFJ;AAWH;;;iCAEgB;AACb,cAAM9d,GAAG,GAAG,EAAZ;AACA,cAAMgd,OAAO,GAA4B;AACrCliB,kBAAM,EAAE,KAAK2pC,KAAL,CAAW3pC,MADkB;AAErCI,oBAAQ,EAAE,KAAKupC,KAAL,CAAWvpC,QAFgB;AAGrCuY,gBAAI,EAAE,KAAKgxB,KAAL,CAAWhxB;AAHoB,WAAzC;AAKA,eAAK0vC,eAAL,CAAqB5qD,OAArB,CAA6B,UAAC+kB,KAAD;AAAA,mBAAYtd,GAAG,CAACsd,KAAK,CAAClR,EAAP,CAAH,GAAgBkR,KAAK,CAACwV,SAAN,CAAgB9V,OAAhB,CAA5B;AAAA,WAA7B;AACA,eAAKR,MAAL,CAAYjkB,OAAZ,CAAoB,UAAC+kB,KAAD;AAAA,mBAAYtd,GAAG,CAACsd,KAAK,CAAClR,EAAP,CAAH,GAAgBkR,KAAK,CAACwV,SAAN,CAAgB9V,OAAhB,CAA5B;AAAA,WAApB;AACA,eAAKomC,WAAL,GAAmBpjD,GAAnB;AACH;;;6CAE2B;AAAA;;AACxB,cAAMokD,UAAU,GAAG,KAAKpnC,OAAL,CAAa3f,KAAb,CAAmB0D,MAAnB,CAA0B,UAAAsjD,GAAG;AAAA,mBAAIA,GAAG,CAAChnD,KAAJ,KAAc,QAAI,CAACisB,IAAL,CAAU7L,QAAV,CAAmBrR,EAArC;AAAA,WAA7B,CAAnB;AACA,eAAKwY,eAAL,CAAqBtc,IAArB,CAA0B87C,UAA1B;AACH;AAED;;;;;;;;6BAKYE,O,EAAgBC,O,EAAgB;AACxC,cAAMjiB,GAAG,GAAG,KAAKhZ,IAAL,CAAUra,SAAV,CAAoBtR,IAApB,CAAyB,UAAC2kC,GAAD;AAAA,mBAASgiB,OAAO,CAAC5mC,KAAR,CAAczJ,QAAd,CAAuBquB,GAAG,CAACl2B,EAA3B,CAAT;AAAA,WAAzB,KAAqE;AAAElW,gBAAI,EAAE,EAAR;AAAYsuC,sBAAU,EAAE;AAAxB,WAAjF;;AACA,cAAMqI,KAAK,GAAG,KAAKvjB,IAAL,CAAUra,SAAV,CAAoBtR,IAApB,CAAyB,UAAC2kC,GAAD;AAAA,mBAASiiB,OAAO,CAAC7mC,KAAR,CAAczJ,QAAd,CAAuBquB,GAAG,CAACl2B,EAA3B,CAAT;AAAA,WAAzB,CAAd;;AACA,cAAIk2B,GAAG,IAAIA,GAAG,KAAKuK,KAAnB,EAA0B;AACtB,mBAAOvK,GAAG,CAACpsC,IAAJ,CAASsM,aAAT,CAAuBqqC,KAAK,SAAL,IAAAA,KAAK,WAAL,GAAK,MAAL,GAAAA,KAAK,CAAE32C,IAA9B,CAAP;AACH;;AACD,cAAMsuC,UAAU,GAAG,mBAAIlC,GAAG,CAACkC,UAAR,EAAoB/7B,OAApB,EAAnB;;AANwC,uDAOlB+7B,UAPkB;AAAA;;AAAA;AAOxC,sEAAkC;AAAA,kBAAvBpuB,OAAuB;;AAC9B,kBAAIA,OAAO,KAAK,GAAhB,EAAqB;AACjB;AACH;;AACD,kBAAM02B,UAAU,GAAGwX,OAAO,CAAC5mC,KAAR,CAAcngB,OAAd,CAAsB6Y,OAAtB,KAAkC,CAArD;AACA,kBAAM22B,UAAU,GAAGwX,OAAO,CAAC7mC,KAAR,CAAcngB,OAAd,CAAsB6Y,OAAtB,KAAkC,CAArD;;AACA,kBAAI02B,UAAU,IAAI,CAACC,UAAnB,EAA+B;AAC3B,uBAAO,CAAP;AACH,eAFD,MAEO,IAAIA,UAAU,IAAI,CAACD,UAAnB,EAA+B;AAClC,uBAAO,CAAC,CAAR;AACH;AACJ;AAlBuC;AAAA;AAAA;AAAA;AAAA;;AAmBxC,iBAAOwX,OAAO,CAACpuD,IAAR,CAAasM,aAAb,CAA2B+hD,OAAO,CAACruD,IAAnC,CAAP;AACH;;;+BAEa2uB,M,EAA2B;AAAA;;AACrC;AACA,eAAKD,eAAL,CAAqB3Z,IAArB,CACI,YAAA+H,IAAA,CAAK,CAAL,CADJ,EAEI,YAAAwxC,cAAA,CAAe,KAAKxnC,OAApB,CAFJ,EAGI,YAAAhd,GAAA,CAAI,iBAAgC;AAAA;AAAA,gBAA9B4kB,eAA8B;AAAA,gBAAb5H,OAAa;;AAChC,mBAAO,cAAA2H,qBAAA,CAAsB3H,OAAtB,EAA+B4H,eAA/B,EAAgDC,MAAhD,CAAP;AACH,WAFD,CAHJ,EAMEzsB,SANF,CAMY,UAAAkQ,IAAI,EAAI;AAChB,gBAAMm8C,QAAQ,GAAG,QAAI,CAACpB,SAAL,CAAehmD,KAAhC;;AACA,oBAAI,CAACgmD,SAAL,CAAetoD,QAAf,CAAwB;AACpByY,sBAAQ,EAAEixC,QAAQ,CAACjxC;AADC,aAAxB;;AAGA,oBAAI,CAACoR,eAAL,CAAqBtc,IAArB,CAA0BA,IAA1B;;AACA,oBAAI,CAACi7C,cAAL,GAAsBj7C,IAAI,CAACtI,GAAL,CAAS,UAACsiC,GAAD;AAAA,qBAASA,GAAG,CAACjlC,KAAb;AAAA,aAAT,CAAtB;AAEH,WAdD;AAeH;AAED;;;;;;;oCAImBigB,K,EAAc;AAC7B,cAAMjlB,IAAI,GAAG,KAAKmkB,MAAlB;;AACA,cAAInkB,IAAI,CAACsF,IAAL,CAAU,UAACkF,IAAD;AAAA,mBAAUA,IAAI,CAACuJ,EAAL,KAAYkR,KAAK,CAAClR,EAA5B;AAAA,WAAV,CAAJ,EAA+C;AAC3C,iBAAKoQ,MAAL,GAAcnkB,IAAI,CAAC0I,MAAL,CAAY,UAAC8B,IAAD;AAAA,qBAAUA,IAAI,CAACuJ,EAAL,KAAYkR,KAAK,CAAClR,EAA5B;AAAA,aAAZ,CAAd;AACH,WAFD,MAEO;AACH,iBAAKoQ,MAAL,GAAc,CAACc,KAAD,CAAd;AACH;AACJ;;;oCAEkB;AACf,eAAKd,MAAL,GAAc,EAAd;AACA,eAAK+mC,cAAL,GAAsB,EAAtB;AACH;;;4BA9QmB;AAChB,iBAAO,KAAKj6B,IAAL,CAAUra,SAAjB;AACH;AAED;;;;4BACmB;AACf,iBAAO,KAAP;AACH;;;4BAEkB;AACf,iBAAO,CAAC,CAAC,KAAKw1B,KAAL,CAAWrZ,QAApB;AACH;;;4BAiB4B;AACzB,iBAAO,KAAK9B,IAAL,CAAU7L,QAAV,GAAqB,CAAC,KAAK6L,IAAL,CAAU7L,QAAV,CAAmBrR,EAApB,CAArB,GAA+C,EAAtD;AACH;;;;MA9D0C,OAAAxV,a;;AAL/C;;;uBAKa2oD,yB,EAAyB,4C,EAAA,qC,EAAA,sC,EAAA,wC,EAAA,kC,EAAA,qBAwEtB,SAAAvB,eAxEsB,C;AAwEP,K;;;YAxElBuB,yB;AAAyB,2C;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,e;AAAA,c;AAAA,+yC;AAAA;AAAA;ACxEtC;AACI;AAAqB;AAA6C;AAClE;AACI;AACJ;AACJ;AACA;AACI;AACI;AACI;AA6BA;AACI;AAiCJ;AACJ;AACA;AAuDJ;AACJ;AACA;AAQA;AAQA;;;;;;AAlJyB;AAAA;AAEP;AAAA;AAKL;AAAA;AAAqC;AACxB;AAAA;AA8BI;AAAA,8CAAiC,UAAjC,EAAiC,GAAjC;AAmCmB;AAAA;;;;;;;;;2BDFpCA,yB,EAAyB;cALrC,OAAAtB,SAKqC;eAL3B;AACPlnD,kBAAQ,EAAE,sBADH;AAEPmnD,qBAAW,EAAE,qCAFN;AAGPC,mBAAS,EAAE,CAAC,qCAAD;AAHJ,S;AAK2B,Q;;;;;;;;;;;;;;kBAwE7B,OAAArT,M;mBAAO,SAAAkT,e;;;;;gBAtEX,OAAAI;;;;;;;;;;;;;;;;;;;;;;;;AE1EL;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACCQ;AACI;AAAA;AAOgB;AAEhB;AACI;AAAA;AAAA;AAQA;AAAA;AAEA;AACJ;AACJ;;;;;AApBQ;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBR;AACI;AAAA;AAOe;AAEf;AACI;AAAA;AAAA;AAQA;AAAA;AAC0B;AAE9B;AACJ;;;;;AApBQ;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBR;AACI;AAAA;AAMW;AAEX;AACI;AAAA;AAAA;AAOA;AAAA;AAC8B;AAElC;AACJ;;;;;AAlBQ;AAAA;;;;;;AArDhB;AACI;AACI;AAwBA;AAwBA;AAsBJ;AACJ;;;;;AAxEU;AAAA;AACiB;AAAA;AAwBA;AAAA;AAwBA;AAAA;;;;QD1Cd6D,iB;;;;AALb;;;uBAKaA,iB;AAAiB,K;;;YAAjBA,iB;AAAiB,gC;AAAA;AAAA;AAAA,O;AAAA,c;AAAA,a;AAAA,4gB;AAAA;AAAA;ACR9B;;;;AAAuB;;;;;;;;;2BDQVA,iB,EAAiB;cAL7B,OAAAhE,SAK6B;eALnB;AACTlnD,kBAAQ,EAAE,WADD;AAETmnD,qBAAW,EAAE,4BAFJ;AAGTC,mBAAS,EAAE,CAAC,4BAAD;AAHF,S;AAKmB,Q;;gBAEzB,OAAA1kD;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEVL;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACPA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACEI;AACI;AACJ;;;;;AADc;AAAA;;;;;;AAEd;AACI;AACJ;;;;AADiB;AAAA;;;;QDERirD,mB;AAQT,qCAAc;AAAA;;AAHd;AACgB,aAAAxvD,KAAA,GAAkC,EAAlC;AAEA;;;;mCAER,CAAW;;;;;;AAfvB;;;uBAKawvD,mB;AAAmB,K;;;YAAnBA,mB;AAAmB,kC;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA,c;AAAA,a;AAAA,6N;AAAA;AAAA;ACRhC;AACI;AACA;AAGA;AAGJ;;;;AARyB;AACX;AAAA;AAC2B;AAAA;AAGV;AAAA;;;;;;;;;2BDGlBA,mB,EAAmB;cAL/B,OAAAzG,SAK+B;eALrB;AACPlnD,kBAAQ,EAAE,aADH;AAEPmnD,qBAAW,EAAE,8BAFN;AAGPC,mBAAS,EAAE,CAAC,8BAAD;AAHJ,S;AAKqB,Q;;;;gBAE3B,OAAA1kD;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;;;;;;;;;;;;;;;;;;;;;;AEdL;AAAA;AAAA;;AAMA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAMA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVI;;AAIC;;;;;AADG;;;;;;AAMI;AACI;;AACJ;;;;;AADI;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEJ;AAAA;AAQA;;;;;AALI;AAKJ;AAAA,wDAAM,iCAAN;AAAA;;;;;;;;;;;;;;;;;;AACA;AAKI;AACA;AAAA;AAEA;AACJ;;;;;AANI;AAEA;AAAA;;;;;;;;;;;;;;;;;;;;AAKJ;AAGI;AAAA;AAAA;AAAA;AAAA;AAHJ;AAOA;;;;;;AAGR;AACI;;AACJ;;;;;AADI;AAAA;;;;;;;;AAEJ;AAKI;AAAA;AAAA;AAAA;AAAA;AACH;;;;;AAJG,4GAAuE,KAAvE,EAAuE,4BAAvE,EAAuE,SAAvE,EAAuE,kBAAvE;;;;;;;;;;;;;;;AAKJ;AAGI;AAAA;AAAA;AAAA;AAAA;AAEA;AAMJ;;;;;AALQ;AAAA;;;;;;AAhEZ;AAOI;AAKA;AACI;AAAkB;AAAe;AACjC;AAAyB;AAA4D;AACrF;AACI;AAGA;AASA;AAUA;AAQJ;AACJ;AACA;AAGA;AAOA;AAYJ;;;;;AAnEI,kDAAyB,SAAzB,EAAyB,cAAzB;AAEA;AAII;AAAA;AAIkB;AAAA;AACO;AAAA;AAEiB;AAAA;AAKlC;AAAA;AASA;AAAA;AAUA;AAAA;AAQyB;AAAA;AAIjC;AAAA;AAQA;AAAA;;;;;;AAYJ;;;;;;AAEI,iDAAmB,SAAnB,EAAmB,IAAnB,EAAmB,QAAnB,EAAmB,aAAnB,EAAmB,MAAnB,EAAmB,YAAnB,EAAmB,UAAnB,EAAmB,6CAAnB,EAAmB,OAAnB,EAAmB,YAAnB;;;;ADvDR,aAASkrD,wBAAT,CAAkCzP,QAAlC,EAA8D;AAC1D,aACIA,QAAQ,CAAC/X,WAAT,GAAuB+X,QAAQ,CAAC/8C,KAAT,CAAekE,MAAtC,IACC64C,QAAQ,CAAC/X,WAAT,KAAyB+X,QAAQ,CAAC/8C,KAAT,CAAekE,MAAxC,IACG64C,QAAQ,CAAC/8C,KAAT,CAAewF,IAAf,CAAoB,UAACkF,IAAD;AAAA,eAAeA,IAAI,CAAC1K,KAAL,IAAc0K,IAAI,CAACs6B,WAAL,GAAmBt6B,IAAI,CAAC1K,KAAL,CAAWkE,MAA3D;AAAA,OAApB,CAHR;AAKH;;AAED,aAASuoD,aAAT,CAAuB1P,QAAvB,EAAmD;AAC/C,UAAM/8C,KAAK,GAAG+8C,QAAQ,CAAC/8C,KAAT,IAAkB,EAAhC;AACA,UAAIE,IAAI,GAAGF,KAAK,CAAC4I,MAAN,CAAa,UAAC8B,IAAD;AAAA,eAAUA,IAAI,CAAC27B,MAAL,GAAc,CAAxB;AAAA,OAAb,EAAwCx+B,GAAxC,CAA4C,UAAC6C,IAAD;AAAA,eAAUA,IAAI,CAACuJ,EAAf;AAAA,OAA5C,CAAX;;AAF+C,mDAG5BjU,KAH4B;AAAA;;AAAA;AAG/C,kEAA0B;AAAA,cAAf0K,IAAe;;AACtB,cAAKA,IAAY,CAAC1K,KAAb,IAAuB0K,IAAY,CAAC1K,KAAb,CAAmBkE,MAA/C,EAAuD;AACnDhE,gBAAI,GAAGA,IAAI,CAACg0B,MAAL,CAAYu4B,aAAa,CAAC/hD,IAAD,CAAzB,CAAP;AACH;AACJ;AAP8C;AAAA;AAAA;AAAA;AAAA;;AAQ/C,aAAOxK,IAAP;AACH;;QAQYwsD,yB;;;;;AAsCT,yCAAoBxuC,QAApB,EAA0D+kC,OAA1D,EACmB9nC,QADnB,EAC8C;AAAA;;AAAA;;AAC1C;AAFgB,iBAAA+C,QAAA,GAAAA,QAAA;AAAsC,iBAAA+kC,OAAA,GAAAA,OAAA;AACvC,iBAAA9nC,QAAA,GAAAA,QAAA;AAxBZ,iBAAAwxC,aAAA,GAAgB,IAAhB,CAwBuC,CAE1C;;AACA,iBAAKA,aAAL,GAAqB,SAAKjiD,IAA1B;AAH0C;AAI7C;AA1BD;;;;;oCA4BmBhL,O,EAAsB;AAAA;;AACrC;AACA,cAAIA,OAAO,CAACqL,KAAR,IAAiB,KAAKA,KAA1B,EAAiC;AAC7B,gBAAM7K,IAAI,GAAG,KAAK6K,KAAL,CAAW7F,KAAxB,CAD6B,CAE7B;;AACA,gBAAIwF,IAAI,GAAGxK,IAAI,CAACsF,IAAL,CAAU,UAAConD,MAAD;AAAA,qBAAYA,MAAM,CAAC34C,EAAP,KAAc,QAAI,CAACvJ,IAAL,CAAUuJ,EAApC;AAAA,aAAV,CAAX;;AACA,gBAAIvJ,IAAJ,EAAU;AACN;AACA,mBAAKA,IAAL,CAAUmiD,SAAV,CAAoBniD,IAAI,GAAGA,IAAI,CAAC27B,MAAR,GAAiB,CAAzC;AACH,aAHD,MAGO;AACH;AADG,2DAEanmC,IAFb;AAAA;;AAAA;AAEH,0EAAsB;AAAA,sBAAb4sD,GAAa;AAClBpiD,sBAAI,GAAGoiD,GAAG,SAAH,IAAAA,GAAG,WAAH,GAAG,MAAH,GAAAA,GAAG,CAAE9sD,KAAL,CAAWwF,IAAX,CAAgB,UAACunD,OAAD;AAAA,2BAAaA,OAAO,CAAC94C,EAAR,KAAe,QAAI,CAACvJ,IAAL,CAAUuJ,EAAtC;AAAA,mBAAhB,CAAP;;AACA,sBAAIvJ,IAAJ,EAAU;AACN,yBAAKA,IAAL,CAAUmiD,SAAV,CAAoBniD,IAAI,GAAGA,IAAI,CAAC27B,MAAR,GAAiB,CAAzC;AACA;AACH;AACJ;AARE;AAAA;AAAA;AAAA;AAAA;;AAQF;AACJ,aAhB4B,CAkB7B;;;AACA,gBAAI,CAAC,KAAKsmB,aAAN,IAAuB,KAAKjiD,IAAL,CAAU27B,MAArC,EAA6C;AACzC,mBAAKsmB,aAAL,GAAqB,KAAKjiD,IAA1B;AACH;;AAED,iBAAK3K,YAAL,CACI,cADJ,EAEI,KAAKgL,KAAL,CAAW6zB,YAAX,CAAwB3+B,SAAxB,CAAkC,UAACC,IAAD,EAAU;AACxC,kBAAMwK,IAAI,GAAGxK,IAAI,CAACsF,IAAL,CAAU,UAACunD,OAAD;AAAA,uBAAaA,OAAO,CAAC94C,EAAR,KAAe,QAAI,CAACvJ,IAAL,CAAUuJ,EAAtC;AAAA,eAAV,CAAb;;AACA,sBAAI,CAACvJ,IAAL,CAAUmiD,SAAV,CAAoBniD,IAAI,GAAGA,IAAI,CAAC27B,MAAR,GAAiB,CAAzC;;AACA,sBAAI,CAAC2mB,sBAAL;AACH,aAJD,CAFJ;AAQH;AACJ;AAED;;;;;;;qCAIoB9nD,K,EAAe;AAAA;;AAC/B;AACA,cAAI,KAAK6F,KAAT,EAAgB;AACZ,gBAAM7K,IAAI,GAAmB,KAAK6K,KAAL,CAAW7F,KAAxC;AACA,gBAAMwF,IAAI,GAAGxK,IAAI,CAACsF,IAAL,CAAU,UAACunD,OAAD;AAAA,qBAAaA,OAAO,CAAC94C,EAAR,KAAe,QAAI,CAACvJ,IAAL,CAAUuJ,EAAtC;AAAA,aAAV,CAAb;;AACA,gBAAIvJ,IAAJ,EAAU;AACN,mBAAKA,IAAL,CAAUmiD,SAAV,CAAoB3nD,KAApB;AACAwF,kBAAI,CAACmiD,SAAL,CAAe3nD,KAAf,EAFM,CAGN;;AACA,kBAAMygC,KAAK,GAAG,KAAKj7B,IAAL,CAAUi7B,KAAxB;AACAj7B,kBAAI,CAACuiD,QAAL,CAActnB,KAAd;AACH,aAND,MAMO;AACH,kBAAMU,MAAM,GAAG,KAAK37B,IAAL,CAAU27B,MAAzB;AACA,mBAAK37B,IAAL,CAAUmiD,SAAV,CAAoB3nD,KAApB;;AACA,kBACI,KAAKwF,IAAL,eACA27B,MAAM,GAAGnhC,KADT,IAEA,KAAKwF,IAAL,CAAU1K,KAFV,IAGA,KAAK0K,IAAL,CAAU1K,KAAV,CAAgBkE,MAHhB,IAIAsoD,wBAAwB,CAAC,KAAK9hD,IAAN,CAL5B,EAME;AACE,qBAAKwiD,oBAAL,GAA4BxuC,IAA5B,CACI,UAACyuC,cAAD,EAAoB;AAChBjtD,sBAAI,CAAC2J,IAAL,CAAU,IAAI,cAAAi7B,gBAAJ,CAAqBqoB,cAArB,CAAV;;AACA,0BAAI,CAACpiD,KAAL,CAAWnI,QAAX,CAAoB1C,IAAI,CAAC0I,MAAL,CAAY,UAACmkD,OAAD;AAAA,2BAAaA,OAAO,CAAC1mB,MAArB;AAAA,mBAAZ,CAApB;AACH,iBAJL,EAKI,YAAM;AACF,0BAAI,CAAC37B,IAAL,CAAUmiD,SAAV,CAAoB,GAApB;;AACA,0BAAI,CAAClsD,OAAL,CAAa,QAAb,EAAuB;AAAA,2BAAM,QAAI,CAAC+J,IAAL,CAAUmiD,SAAV,CAAoB,CAApB,CAAN;AAAA,mBAAvB,EAAqD,CAArD;;AACA,0BAAI,CAAC3uC,QAAL,CAAcu5B,UAAd,CACI,uDADJ;AAGH,iBAXL;AAaH,eApBD,MAoBO;AACHv3C,oBAAI,CAAC2J,IAAL,CAAU,IAAI,cAAAq7B,YAAJ,CAAiB,KAAKx6B,IAAtB,CAAV;AACH;AACJ;;AACD,iBAAKK,KAAL,CAAWnI,QAAX,CAAoB1C,IAAI,CAAC0I,MAAL,CAAY,UAACmkD,OAAD;AAAA,qBAAaA,OAAO,CAAC1mB,MAArB;AAAA,aAAZ,CAApB;AACH;AACJ;;;iDAE+B;AAAA;;AAC5B,cAAM+mB,SAAS,GAAG,KAAKriD,KAAL,CAAW7F,KAAX,CAAiBM,IAAjB,CAAsB,UAACkF,IAAD;AAAA,mBAAUA,IAAI,CAACuJ,EAAL,KAAY,QAAI,CAACvJ,IAAL,CAAUuJ,EAAhC;AAAA,WAAtB,CAAlB;;AACA,cAAIm5C,SAAJ,EAAe;AACX,gBAAMC,YAAY,GAAGZ,aAAa,CAACW,SAAD,CAAlC;AACA,iBAAKzsD,OAAL,CACI,gBADJ,EAEI,YAAM;AACF,sBAAI,CAAC+J,IAAL,CAAU1K,KAAV,CAAgBI,OAAhB,CAAwB,UAACsK,IAAD,EAAU;AAC9BA,oBAAI,CAACmiD,SAAL,CAAeQ,YAAY,CAACvxC,QAAb,CAAsBpR,IAAI,CAACuJ,EAA3B,IAAiC,CAAjC,GAAqC,CAApD;;AACA,oBAAKvJ,IAAY,CAAC1K,KAAlB,EAAyB;AACpB0K,sBAAY,CAAC1K,KAAb,CAAmBI,OAAnB,CAA2B,UAACsK,IAAD,EAAU;AAClCA,wBAAI,CAACmiD,SAAL,CAAeQ,YAAY,CAACvxC,QAAb,CAAsBpR,IAAI,CAACuJ,EAA3B,IAAiC,CAAjC,GAAqC,CAApD;AACH,mBAFA;AAGJ;AACJ,eAPD;AAQH,aAXL,EAYI,CAZJ;AAcH;AACJ;AAED;;;;+CAC2B;AAAA;;AACvB,cAAIq5C,WAAW,GAAmB,EAAlC;AACA,eAAKJ,oBAAL,GAA4BxuC,IAA5B,CACI,UAACyuC,cAAD,EAAoB;AAChB;AACA,oBAAI,CAACpiD,KAAL,CAAW7F,KAAX,CAAiB9E,OAAjB,CAAyB,UAAC28C,QAAD,EAAgC;AACrD,kBAAIA,QAAQ,CAAC9oC,EAAT,KAAgBk5C,cAAc,CAACl5C,EAAnC,EAAuC;AACnCq5C,2BAAW,CAACzjD,IAAZ,CAAiB,IAAI,cAAAi7B,gBAAJ,CAAqBqoB,cAArB,CAAjB;AACH,eAFD,MAEO;AACHG,2BAAW,CAACzjD,IAAZ,CAAiBkzC,QAAjB;AACH;AACJ,aAND;;AAOA,oBAAI,CAAChyC,KAAL,CAAWnI,QAAX,CAAoB0qD,WAAW,CAAC1kD,MAAZ,CAAmB,UAACmkD,OAAD;AAAA,qBAAaA,OAAO,CAAC1mB,MAArB;AAAA,aAAnB,CAApB;AACH,WAXL,EAYI,YAAM;AACF,oBAAI,CAAC37B,IAAL,CAAUmiD,SAAV,CAAoB,GAApB;;AACA,oBAAI,CAAClsD,OAAL,CAAa,QAAb,EAAuB;AAAA,qBAAM,QAAI,CAAC+J,IAAL,CAAUmiD,SAAV,CAAoB,CAApB,CAAN;AAAA,aAAvB,EAAqD,CAArD;;AACA,oBAAI,CAAC3uC,QAAL,CAAcu5B,UAAd,CACI,uDADJ;AAGH,WAlBL;AAoBH;AAED;;;;;;+CAG4B;AAAA;;AACxB,iBAAO,IAAIp5B,OAAJ,CAAY,UAACC,OAAD,EAAUC,MAAV,EAAqB;AACpC,gBAAMsmC,GAAG,GAAG,QAAI,CAAC5B,OAAL,CAAajpC,IAAb,CAAkB,kCAAAuzC,4BAAlB,EAAgD;AACxDxI,sBAAQ,EAAE,MAD8C;AAExDxsC,kBAAI,EAAE;AACF7N,oBAAI,EAAE,IAAI,cAAAo6B,gBAAJ,CAAqB,QAAI,CAACp6B,IAA1B;AADJ,eAFkD;AAKxDqhD,uBAAS,EAAE,KAL6C;AAMxDC,2BAAa,EAAE;AANyC,aAAhD,CAAZ;;AAQA,gBAAIwB,IAAI,GAAG,KAAX;AACA3I,eAAG,CAACO,iBAAJ,CAAsB11C,KAAtB,CAA4BzP,SAA5B,CAAsC,UAACyP,KAAD,EAAW;AAC7C;AACA,kBAAIA,KAAK,CAACiW,MAAN,KAAiB,MAArB,EAA6B;AACzB6nC,oBAAI,GAAG,IAAP;AACAlvC,uBAAO,CAACumC,GAAG,CAACO,iBAAJ,CAAsB16C,IAAvB,CAAP;AACA,wBAAI,CAACiiD,aAAL,GAAqB,QAAI,CAACjiD,IAA1B;AACAm6C,mBAAG,CAAC7c,KAAJ;AACH;AACJ,aARD;AASA6c,eAAG,CAACW,WAAJ,GAAkBvlD,SAAlB,CAA4B,YAAM;AAC9B;AACA,kBAAI,CAACutD,IAAL,EAAW;AACP,oBAAI,QAAI,CAACb,aAAT,EAAwB;AACpBruC,yBAAO,CAAC,QAAI,CAACquC,aAAN,CAAP;AACH,iBAFD,MAEO;AACHpuC,wBAAM;AACT;AACJ;AACJ,aATD;AAUH,WA7BM,CAAP;AA8BH;;;4BA7LkB;AACf,iBAAO,KAAK7T,IAAL,CAAU1K,KAAV,GACD,KAAK0K,IAAL,CAAU1K,KAAV,CAAgB2F,MAAhB,CAAuB,UAACzF,IAAD,EAAOwK,IAAP,EAAgB;AACrC;AACA,gBAAIxK,IAAJ,EAAU;AACNA,kBAAI,IAAI,MAAR;AACH;;AACD,mBAAQA,IAAI,cAAOwK,IAAI,CAAC3M,IAAZ,SACP2M,IAAY,CAAC1K,KAAb,GACM0K,IAAY,CAAC1K,KAAb,CAAmB2F,MAAnB,CACH,UAAC8nD,MAAD,EAASV,OAAT;AAAA,qBACKU,MAAM,iBAAUV,OAAO,CAAC1mB,MAAR,GAAiB,GAAjB,GAAuB,GAAjC,cAAwC0mB,OAAO,CAAChvD,IAAhD,MADX;AAAA,aADG,EAGH,EAHG,CADN,GAMK,EAPE,cAQR2M,IAAI,CAAC27B,MAAL,GAAc,GAAd,GAAoB,EARZ,CAAZ;AASH,WAdC,EAcC,EAdD,CADC,GAgBD,EAhBN;AAiBH;;;;MApC0C,OAAA5nC,a;;AAN/C;;;uBAMaiuD,yB,EAAyB,2C,EAAA,kC,EAAA,wC;AAAA,K;;;YAAzBA,yB;AAAyB,2C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA,wE;AAAA,c;AAAA,a;AAAA,y8B;AAAA;AAAA;AC5CtC;AAuEA;AACI;AASJ;;;;AA/EI;AAqEkB;AAAA;AAEd;AAAA;;;4ID7BKA,yB;AAAyB,2C;AAAA,w9U;AAAA;AAAA,mBAFtB,CAAC,aAAA5vD,8BAAD;AAEsB;;;;;2BAAzB4vD,yB,EAAyB;cANrC,OAAA5G,SAMqC;eAN3B;AACPlnD,kBAAQ,EAAE,sBADH;AAEPmnD,qBAAW,EAAE,uBAFN;AAGPC,mBAAS,EAAE,CAAC,uBAAD,CAHJ;AAIP0H,oBAAU,EAAE,CAAC,aAAA5wD,8BAAD;AAJL,S;AAM2B,Q;;;;;;;;;;gBAEjC,OAAAwE;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;;;;;;;;;;;;;;;;;;;;;;AExDL;AAAA;AAAA;;AAMA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACEQ;;;;;;;;AAqBQ;AAGI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACJ;;;;;AAJI;AAGA;AAAA;;;;;;;;AAEJ;AAGI;AAAA;AAAA;AAAA;AAAA;AAAA,6DAAwC,IAAxC;AAA4C,SAA5C;AAEA;AACJ;;;;;AAJI;AAGA;AAAA;;;;;;AAnBR;AAOI;AAOA;AAOJ;;;;;AAbQ;AAAA;AAOA;AAAA;;;;;;AAOR;AACI;AACJ;;;;;AADI;AAAA;;;;;;AAEJ;;;;;;;;;;;;AA1BA;AACA;AAsBA;AAGA;AAGJ;;;;;;;;;;AA7BoE;AAE5D;AAAA;AAqBU;AAAA;AAIV;AAAA,+CAA8D,yBAA9D,EAA8D,qCAA9D;;;;;;AA7BZ;AACI;AACI;AA8BR;AACA;;;;;;AAhCqB;AAAA;AACK;AAAA;;;;;;AAF1B;;;;;AAAc;;;;;;;;;;;ADElB,aAAgBqsD,qBAAhB,CAAsC5Q,QAAtC,EAAgE;AAC5D,UAAM/8C,KAAK,GAAG+8C,QAAQ,CAAC/8C,KAAT,IAAkB,EAAhC;AACA,aAAO+8C,QAAQ,CAAC/X,WAAT,IAAwBhlC,KAAK,CAACkE,MAA9B,GACDlE,KAAK,CAAC2F,MAAN,CAAa,UAACigB,KAAD,EAAQlb,IAAR;AAAA,eAAiBkb,KAAK,IAAI+nC,qBAAqB,CAACjjD,IAAD,CAA/C;AAAA,OAAb,EAA2E,IAA3E,CADC,GAED1K,KAAK,CAAC2F,MAAN,CAAa,UAAC0gC,MAAD,EAAS37B,IAAT;AAAA,eAAkB27B,MAAM,IAAI37B,IAAI,CAAC27B,MAAL,GAAc,CAAd,GAAkB,CAAtB,CAAxB;AAAA,OAAb,EAA+D,CAA/D,MACF0W,QAAQ,CAAC/X,WAHb;AAIH;;AAND;;AAQA,aAAgB4oB,cAAhB,CAA+B7Q,QAA/B,EAAyD;AACrD,UAAIl1C,GAAG,GAAG,EAAV;;AACA,UAAIk1C,QAAQ,CAAC/8C,KAAb,EAAoB;AAChB,YAAM0K,IAAI,GAAGqyC,QAAQ,CAAC/8C,KAAT,CAAewF,IAAf,CAAoB,UAAAkF,IAAI;AAAA,iBAAIA,IAAI,CAAC27B,MAAL,GAAc,CAAlB;AAAA,SAAxB,CAAb;;AACA,YAAI37B,IAAJ,EAAU;AACN7C,aAAG,CAACk1C,QAAQ,CAAC9oC,EAAV,CAAH,GAAmBvJ,IAAI,CAACuJ,EAAxB;AACH;;AACD8oC,gBAAQ,CAAC/8C,KAAT,CAAeI,OAAf,CAAuB,UAAAsK,IAAI;AAAA,iBAAI7C,GAAG,GAAG,MAAH,OAAG,CAAH,kBAAQA,GAAR,CAAG,EAAa+lD,cAAc,CAACljD,IAAD,CAA3B,CAAV;AAAA,SAA3B;AACH;;AACD,aAAO7C,GAAP;AACH;;AAVD;;QAiBa0lD,4B;AAkBT,4CAA6CjhB,KAA7C,EAA6E;AAAA;;AAAhC,aAAAA,KAAA,GAAAA,KAAA;AAjB7C;;AACiB,aAAA58B,KAAA,GAAQ,IAAI,OAAA0zC,YAAJ,EAAR;AAiBhB;AAfD;;;;;;AAiBA;;;qCAGoByK,S,EAA6BnhC,M,EAAsB3vB,K,EAAgB;AACnF,cAAIA,KAAJ,EAAW;AACP,gBAAM+wD,MAAM,GAAGD,SAAS,CAAC7oB,WAAzB;AACA,gBAAM2J,MAAM,GAAGkf,SAAS,CAAC7tD,KAAV,CAAgB4I,MAAhB,CAAuB,UAAAmkD,OAAO;AAAA,qBAAIA,OAAO,CAAC1mB,MAAR,GAAiB,CAArB;AAAA,aAA9B,EAAsDniC,MAArE;;AACA,gBAAIyqC,MAAM,IAAImf,MAAd,EAAsB;AAClB,kBAAMpjD,IAAI,GAAGmjD,SAAS,CAAC7tD,KAAV,CAAgBwF,IAAhB,CAAqB,UAAAunD,OAAO;AAAA,uBAAIA,OAAO,CAAC1mB,MAAR,GAAiB,CAArB;AAAA,eAA5B,CAAb;AACA37B,kBAAI,CAACmiD,SAAL,CAAe,CAAf;AACH;;AACDngC,kBAAM,CAACmgC,SAAP,CAAiB,CAAjB;AACH,WARD,MAQO;AACHngC,kBAAM,CAACmgC,SAAP,CAAiB,CAAjB;AACH;AACJ;;;4BA/Bc;AACX,iBAAO,KAAKvgB,KAAL,CAAW5hC,IAAlB;AACH;AAED;;;;4BAC2B;AACvB,iBAAOijD,qBAAqB,CAAC,KAAKjjD,IAAN,CAA5B;AACH;;;4BAEsB;AACnB,iBAAOkjD,cAAc,CAAC,KAAKljD,IAAN,CAArB;AACH;;;;;;AArBL;;;uBAKa6iD,4B,EAA4B,qBAkBjB,SAAA1H,eAlBiB,C;AAkBF,K;;;YAlB1B0H,4B;AAA4B,8C;AAAA;AAAA;AAAA,O;AAAA,e;AAAA,a;AAAA,wa;AAAA;AAAA;AC9CzC;AACI;AAAA;AAA0D;AAC1D;AACI;AACJ;AACJ;AACA;AACI;AACI;AACJ;AACJ;AACA;AACI;AACI;AAAkD;AAAA,mBAAS,IAAA79C,KAAA;AAAA,sBAAqB;AAArB,cAAT;AAAuC,WAAvC;AAAlD;AAEA;AACJ;AACJ;AACA;;;;;;AAfkB;AAAA;AAKI;AAAA,iDAA4D,yBAA5D,EAA4D,oCAA5D;AAKK;AAAA;;;;;;;;;2BDiCd69C,4B,EAA4B;cALxC,OAAAzH,SAKwC;eAL9B;AACPlnD,kBAAQ,EAAE,yBADH;AAEPmnD,qBAAW,EAAE,wCAFN;AAGPC,mBAAS,EAAE,CAAC,wCAAD;AAHJ,S;AAK8B,Q;;;;kBAkBxB,OAAArT,M;mBAAO,SAAAkT,e;;;;;gBAhBnB,OAAAI;;;;;;;;;;;;;;;;;;;;;;;;AEhDL;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACYM;AAAqE;AAA2B;;;;;AAA3B;AAAA;;;;;;;;;;;;;;;AACrE;AAIE;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAEA;AACF;;;;AADY;AAAA;;;;;;;;;;;;;;AAEZ;AACE;AACA;AACF;;;;AAFY;AAAA;;;;;;;;;;;QDRL8H,qB;AALb;AAAA;;AAME;AACS,aAAA5xC,MAAA,GAA0B;AACjC6xC,qBAAW,EAAE,YADoB;AAEjCC,wBAAc,EAAE,CAFiB;AAGjCC,yBAAe,EAAE;AAHgB,SAA1B,CAPX,CAaE;;AACU,aAAAt7B,MAAA,GAAS,IAAI,OAAAwwB,YAAJ,EAAT,CAdZ,CAgBG;;AACD,aAAA+K,SAAA,GAAoB,EAApB;AAsCD,O,CApCC;;;;;oCACYzuD,O,EAAsB;AAChC;AACA,cAAIA,OAAO,CAACyc,MAAZ,EAAoB;AAClB,gBAAMiyC,aAAa,GAAG1uD,OAAO,CAACyc,MAAR,CAAetW,YAArC,CADkB,CAElB;;AACA,iBAAKsW,MAAL,GAAc;AACZ6xC,yBAAW,EAAEI,aAAa,CAACJ,WAAd,IAA6B,YAD9B;AAEZC,4BAAc,EAAEG,aAAa,CAACH,cAAd,IAAgC,CAFpC;AAGZC,6BAAe,EAAEE,aAAa,CAACF,eAAd,IAAiC;AAHtC,aAAd;AAKD;AACF,S,CAED;;;;iCACShpD,K,EAAa;AACpB;AACA,cAAIA,KAAJ,EAAW;AACT,iBAAK0tB,MAAL,CAAY8xB,IAAZ,CAAiBx/C,KAAjB;AACD;AACF,S,CAED;;;;oCACYmpD,G,EAAqB;AAC/B,eAAKF,SAAL,GAAiB,EAAjB;AACAE,aAAG,CAACnpD,KAAJ,GAAY,EAAZ;AACA,eAAKiX,MAAL,CAAY+xC,eAAZ,GAA8B,KAA9B;AACA,eAAK/xC,MAAL,CAAY8xC,cAAZ,GAA6B,CAA7B;AACA,eAAKr7B,MAAL,CAAY8xB,IAAZ,CAAiB,EAAjB;AACD,S,CAED;;;;sCACW;AACT,eAAKvoC,MAAL,CAAY+xC,eAAZ,GAA8B,KAA9B;AACA,eAAK/xC,MAAL,CAAY8xC,cAAZ,GAA6B,CAA7B;AACD;;;;;;AAtDH;;;uBAKaF,qB;AAAqB,K;;;YAArBA,qB;AAAqB,qC;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA,O;AAAA,yC;AAAA,c;AAAA,a;AAAA,giB;AAAA;AAAA;;;ACdlC;AACM;AACA;AAIE;AAAA;AAAA,aAAuB,aAAvB,EAAuB;AAAA;;AAAA;;AAAA,mBACR,IAAAO,QAAA,WADQ;AACW,WADlC,EAAuB,eAAvB,EAAuB;AAAA,mBAIN,IAAAC,WAAA,EAJM;AAIO,WAJ9B;AAJF;AAUA;AACA;AAQA;AAIJ;;;;AAxBc;AAAA;AAKR;AAAA,kDAAuB,aAAvB,EAAuB,sBAAvB;AAMwB;AAAA;AAIxB;AAAA;AAK0B;AAAA;;;;;;;;;2BDPrBR,qB,EAAqB;cALjC,OAAAjI,SAKiC;eALvB;AACTlnD,kBAAQ,EAAE,gBADD;AAETmnD,qBAAW,EAAE,iCAFJ;AAGTC,mBAAS,EAAE,CAAC,iCAAD;AAHF,S;AAKuB,Q;;gBAE/B,OAAA1kD;;;gBAOA,OAAA2kD;;;;;;;;;;;;;;;;;;;;;;;;AEvBH;AAAA;AAAA;;;;;;QAKauI,mB;AAGX,mCAAoBC,UAApB,EAA4C;AAAA;;AAAxB,aAAAA,UAAA,GAAAA,UAAA;AAA0B;;;;uCAEH;AACzC,eAAKhwC,MAAL,CAAY,KAAZ;AACD;;;uCAE0C;AACzC,eAAKA,MAAL,CAAY,QAAZ;AACD;;;iCAE8B;AAC7B,eAAKA,MAAL,CAAY,QAAZ;AACD;;;+BAEcxL,M,EAAc;AAAA;;AAC3B,eAAKy7C,UAAL,CAAgB1qD,KAAhB,CAAsB,GAAtB,EAA2B5D,OAA3B,CAAmC,UAAAsK,IAAI;AAAA,mBAAI,QAAI,CAAC+jD,UAAL,CAAgB5uD,aAAhB,CAA8B8uD,SAA9B,CAAwC17C,MAAxC,EAAgDvI,IAAhD,CAAJ;AAAA,WAAvC;AACD;;;;;;AAtBH;;;uBAGa8jD,mB,EAAmB,mC;AAAA,K;;;YAAnBA,mB;AAAmB,0C;AAAA;AAAA;;mBAAnB,kB;AAAc,W,EAAA,Y,EAAA;AAAA,mBAAd,kBAAc;AAAA,W,EAAA,M,EAAA;AAAA,mBAAd,YAAc;AAAN,W;;;;;;;;;;2BAARA,mB,EAAmB;cAH/B,OAAA7vD,SAG+B;eAHrB;AACTC,kBAAQ,EAAE;AADD,S;AAGqB,Q;;;;;;gBAC7B,OAAA0C,K;iBAAM,a;;;gBAIN,OAAAmQ,Y;iBAAa,Y;;;gBAIb,OAAAA,Y;iBAAa,Y;;;gBAIb,OAAAA,Y;iBAAa,M;;;;;;;;;;;;;;;;;;;;;;;;AClBhB;AAAA;AAAA;;AAEA;AAAA;AAAA;;;;;;;;;;;;;;;;;;QAOam9C,oB;;;;;AALb;AAAA;;AAAA;;;AAYI;;AAC2B,iBAAAh1C,SAAA,GAAY,IAAI,OAAAwpC,YAAJ,EAAZ;AAC3B;;AACO,iBAAAyL,YAAA,GAAe,KAAf;AAfX;AAwBC;AAPG;;;;;;;wCAGuB;AACnB,eAAKA,YAAL,GAAoB,CAAC,KAAKA,YAA1B;AACA,eAAKj1C,SAAL,CAAe8qC,IAAf;AACH;;;;MAlBqC,OAAAjmD,a;;AAL1C;;;oDAKamwD,oB;AAAoB,K;;;YAApBA,oB;AAAoB,sC;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,c;AAAA,a;AAAA,+J;AAAA;AAAA;ACTjC;AAMI;AAAA,mBAAiB,IAAAE,aAAA,EAAjB;AAAgC,WAAhC,EAAiC,OAAjC,EAAiC;AAAA,mBACxB,IAAAA,aAAA,EADwB;AACT,WADxB;AAGA;AAAqB;AAAiB;AACtC;AACI;AAOJ;AACJ;;;;AAhBI;AAMqB;AAAA;AAGb;AAAA;;;;;;qEDHCF,oB;;;;2BAAAA,oB,EAAoB;cALhC,OAAA9I,SAKgC;eALtB;AACTlnD,kBAAQ,EAAE,iBADD;AAETmnD,qBAAW,EAAE,+BAFJ;AAGTC,mBAAS,EAAE,CAAC,+BAAD;AAHF,S;AAKsB,Q;;gBAE5B,OAAA1kD;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAA2kD,M;iBAAO,U;;;;;;;;;;;;;;;;;;;;;;;;AEjBZ;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;ACWI;AAII;AAAA;;AAAA;;AAAA;AAAA;AAAA,WAA+C,MAA/C,EAA+C;AAAA;;AAAA;;AAAA;AAAA;AAAA,SAA/C,EAA+C,eAA/C,EAA+C;AAAA;AAAA;AAAA;AAAA,SAA/C,EAA+C,eAA/C,EAA+C;AAAA;AAAA;AAAA;AAAA,SAA/C;AAJJ;;;;;AAOI;;;;;;AAEJ;AACI;AACJ;;;;;AADI;AAAA;;;;;;;;;;;;;;;;;;QDNK8I,gB;AAbb;AAAA;;AAcI;AACgB,aAAAtpD,GAAA,GAAc,EAAd;AAChB;;AACgB,aAAAk7B,GAAA,GAAc,CAAd;AAEA,aAAAquB,QAAA,GAAW,KAAX;AAIT,aAAAC,cAAA,GAAyB,CAAzB;AAuCA,aAAAC,aAAA,GAAgB,IAAhB;AA8DV;AA1FG;;;;;;;8BAGa;AACT,cAAI,CAAC,KAAKhqD,KAAV,EAAiB;AACb,iBAAKA,KAAL,GAAa,KAAKy7B,GAAL,IAAY,CAAzB;AACH;;AACD,cAAMn8B,IAAI,GAAG,KAAK2qD,QAAL,GAAgB,GAAhB,GAAsB,KAAKC,SAAL,GAAiB,EAAjB,GAAsB,CAAzD;AACA,eAAKlqD,KAAL,IAAcV,IAAd;;AACA,cAAI,KAAKU,KAAL,GAAa,KAAKO,GAAtB,EAA2B;AACvB,iBAAKP,KAAL,GAAa,KAAKO,GAAL,IAAY,EAAzB;AACH;;AACD,eAAK7C,QAAL,CAAc,KAAKsC,KAAnB;AACH;AAED;;;;iCACgB;AACZ,cAAI,CAAC,KAAKA,KAAV,EAAiB;AACb,iBAAKA,KAAL,GAAa,KAAKy7B,GAAL,IAAY,CAAzB;AACH;;AACD,cAAMn8B,IAAI,GAAG,KAAK2qD,QAAL,GAAgB,GAAhB,GAAsB,KAAKC,SAAL,GAAiB,EAAjB,GAAsB,CAAzD;AACA,eAAKlqD,KAAL,IAAcV,IAAd;;AACA,cAAI,KAAKU,KAAL,GAAa,KAAKy7B,GAAtB,EAA2B;AACvB,iBAAKz7B,KAAL,GAAa,KAAKy7B,GAAL,IAAY,CAAzB;AACH;;AACD,eAAK/9B,QAAL,CAAc,KAAKsC,KAAnB;AACH;;;sCAIoBmqD,S,EAAmB;AAAA;;AACpC,cAAI,KAAKH,aAAT,EAAwB;AACpBtxD,wBAAY,CAAC,KAAKsxD,aAAN,CAAZ;AACA,iBAAKA,aAAL,GAAqB,IAArB;AACH;;AACD,eAAKA,aAAL,GAAqB/wD,UAAU,CAAC;AAAA,mBAAM,QAAI,CAACmxD,WAAL,CAAiBD,SAAjB,CAAN;AAAA,WAAD,EAAoC,GAApC,CAA/B;AACH;;;oCAEkBA,S,EAAmB;AAClC,cAAInqD,KAAK,GAAGqqD,MAAM,CAACF,SAAD,CAAlB;;AACA,cAAIG,KAAK,CAACtqD,KAAD,CAAT,EAAkB;AACdA,iBAAK,GAAG,KAAK+pD,cAAb;AACH;;AACD,cAAI/pD,KAAK,GAAG,KAAKy7B,GAAjB,EAAsB;AAClBz7B,iBAAK,GAAG,KAAKy7B,GAAL,IAAY,CAApB;AACH;;AACD,cAAIz7B,KAAK,GAAG,KAAKO,GAAjB,EAAsB;AAClBP,iBAAK,GAAG,KAAKO,GAAL,IAAY,EAApB;AACH;;AACD,eAAK7C,QAAL,CAAcsC,KAAd;AACH;AAED;;;;;;;iCAIgBmqD,S,EAAiB;AAC7B,eAAKJ,cAAL,GAAsBI,SAAtB;AACA,eAAKnqD,KAAL,GAAamqD,SAAb;AACA;;AACA,cAAI,KAAKI,SAAT,EAAoB;AAChB,iBAAKA,SAAL,CAAeJ,SAAf;AACH;AACJ;AAED;;;;;;;mCAIkBnqD,K,EAAe;AAC7B,eAAKA,KAAL,GAAaA,KAAb;AACH;AAED;;AACA;;;;;;;yCAIwBlH,E,EAAuB;AAC3C,eAAKyxD,SAAL,GAAiBzxD,EAAjB;AACH;AAED;;AACA;;;;;;;0CAIyBA,E,EAAuB;AAC5C,eAAK0xD,QAAL,GAAgB1xD,EAAhB;AACH;;;;;;AA3HL;;;uBAaa+wD,gB;AAAgB,K;;;YAAhBA,gB;AAAgB,gC;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA,uCATd,CACP;AACI1X,eAAO,EAAE,QAAAsY,iBADb;;AAEI;AACAC,mBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,iBAAMd,gBAAN;AAAA,SAAX,CAHjB;AAIIe,aAAK,EAAE;AAJX,OADO,CASc,E;AAFxB,c;AAAA,a;AAAA,qlB;AAAA;AAAA;ACdL;AAEI;AAAA,mCAAoC,IAApC;AAAwC,WAAxC,EAAwC,KAAxC,EAAwC,kBAAxC,EAAyC,iBAAzC,EAAyC;AAAA,kCACJ,IADI;AACA,WADzC,EACyC,KADzC,EACyC,kBADzC,EAAyC,cAAzC,EAAyC;AAAA,kCAEP,IAFO;AAEH,WAFtC,EAEsC,KAFtC,EAEsC,kBAFtC,EAAyC,aAAzC,EAAyC;AAAA,mCAGP,KAHO;AAGF,WAHvC,EAGuC,KAHvC,EAGuC,kBAHvC,EAAyC,eAAzC,EAAyC;AAAA,kCAIN,KAJM;AAID,WAJxC,EAIwC,KAJxC,EAIwC,kBAJxC,EAAyC,YAAzC,EAAyC;AAAA,kCAKT,KALS;AAKJ,WALrC,EAKqC,KALrC,EAKqC,kBALrC;AAOA;AAA2E;AAAA,mBAAS,IAAA5Z,MAAA,EAAT;AAAiB,WAAjB;AACvE;AACJ;AACA;AASA;AAGA;AAA8D;AAAA,mBAAS,IAAA7wC,GAAA,EAAT;AAAc,WAAd;AAC1D;AACJ;AACJ;;;;AAlB0C;AAAA;AACxB;AAAA;AAKV;AAAA;AAMe;AAAA;AAGgB;AAAA;AACrB;AAAA;;;;;;;;;2BDTL0pD,gB,EAAgB;cAb5B,OAAAjJ,SAa4B;eAblB;AACPlnD,kBAAQ,EAAE,WADH;AAEPmnD,qBAAW,EAAE,0BAFN;AAGPC,mBAAS,EAAE,CAAC,0BAAD,CAHJ;AAIPvD,mBAAS,EAAE,CACP;AACIpL,mBAAO,EAAE,QAAAsY,iBADb;;AAEI;AACAC,uBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,qBAAMd,gBAAN;AAAA,aAAX,CAHjB;AAIIe,iBAAK,EAAE;AAJX,WADO;AAJJ,S;AAakB,Q;;gBAExB,OAAAxuD;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;;;;;;;;;;;;;;;;;;;;;;AEtBL;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAcayuD,kB;;;;;AAZb;AAAA;;AAAA;;;AAaI;;AACsB,iBAAAC,KAAA,GAAgB,UAAAvkD,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB+J,EAApC;AAGtB;;AACgB,iBAAAskD,QAAA,GAA6B,OAA7B;AAChB;;AACgB,iBAAAvqD,MAAA,GAA2B,QAA3B;AAKhB;;AACiB,iBAAAwqD,QAAA,GAAW,IAAI,OAAA9M,YAAJ,EAAX;AA1BrB;AA+HC;AAxFG;;;;;mCAoBkB;AACd,eAAKphD,IAAL,GAAY,UAAAyJ,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB+J,EAAhC;AACH;AAED;;;;;;;iCAIgB0jD,S,EAAmB;AAC/B;AACA,cAAMc,QAAQ,GAAG,IAAI,UAAAj9C,MAAJ,CAAW;AAAClR,gBAAI,EAAE,KAAKA;AAAZ,WAAX,CAAjB;AACA,cAAMouD,KAAK,GAAG,IAAI,UAAAl9C,MAAJ,CAAW;AAAClR,gBAAI,EAAEqtD;AAAP,WAAX,CAAd;AACA,cAAIgB,QAAQ,GAAGD,KAAK,CACfxtD,QADU,CACD;AAAE0B,gBAAI,EAAE6rD,QAAQ,CAACxgB,QAAjB;AAA2BttC,kBAAM,EAAE8tD,QAAQ,CAAC1tD;AAA5C,WADC,EAEVkJ,EAFL,CAJ+B,CAO/B;;AACA,cAAI0kD,QAAQ,GAAG,KAAK1+C,IAApB,EAA0B;AACtB0+C,oBAAQ,GAAG,KAAK1+C,IAAhB;AACH;;AACD,eAAK3P,IAAL,GAAYquD,QAAZ;;AACA,cAAI,KAAKZ,SAAT,EAAoB;AAChB,iBAAKA,SAAL,CAAeY,QAAf;;AACA,iBAAKH,QAAL,CAAcxL,IAAd,CAAmB2L,QAAnB;AACH;;AACD,eAAKxB,YAAL,GAAoB,KAApB;AACH;AAED;;AACA;;;;;;;mCAIkB3pD,K,EAAe;AAC7B,eAAKlD,IAAL,GAAYkD,KAAZ;AACA,eAAK2pD,YAAL,GAAoB,KAApB;AACH;AAED;;AACA;;;;;;;yCAIwB7wD,E,EAAuB;AAC3C,eAAKyxD,SAAL,GAAiBzxD,EAAjB;AACH;AAED;;AACA;;;;;;;0CAIyBA,E,EAAuB;AAC5C,eAAK0xD,QAAL,GAAgB1xD,EAAhB;AACH;;;yCAEuB4/B,Q,EAAmB;AACvC,eAAKA,QAAL,GAAgBA,QAAhB;AACH;AAED;;;;0CACyB;AACrB,eAAK0yB,QAAL,CAAcC,SAAd;AACH;AAED;;;;yCACwB;AACpB,eAAKD,QAAL,CAAcE,QAAd;AACH;;;4BAtFc;AACX,iBAAO,KAAKR,KAAL,IAAc,UAAAvkD,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB8J,YAApB,CAAiC,KAAjC,EAAwCC,EAA7D;AACH;AACD;;;;4BACgB;AACZ,iBAAO,KAAK8kD,GAAL,IAAY,UAAAhlD,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoBywB,UAApB,CAA+B,KAA/B,EAAsCxvB,QAAtC,CAA+C;AAAE6tD,iBAAK,EAAE;AAAT,WAA/C,EAA6D/kD,EAAhF;AACH;AACD;;;;4BACsB;AAClB;AACA,cAAM3J,IAAI,GAAG,IAAI,UAAAkR,MAAJ,CAAW;AAAClR,gBAAI,EAAE,KAAKA;AAAZ,WAAX,CAAb;AACA,iBAAOA,IAAI,CAACsB,UAAL,CAAgB,aAAhB,CAAP;AACH;AAED;;;;4BACkB;AACd,iBAAO,KAAKgtD,QAAL,CAAcK,QAArB;AACH;;;;MA7CmC,OAAAlyD,a;;AAZxC;;;kDAYasxD,kB;AAAkB,K;;;YAAlBA,kB;AAAkB,mC;AAAA;AAAA;+BAyBhB,OAAAa,c,EAAgB,I;;;;;;;;;;;;;;;;;;;;uCAjChB,CACP;AACIvZ,eAAO,EAAE,QAAAsY,iBADb;AAEIC,mBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,iBAAME,kBAAN;AAAA,SAAX,CAFjB;AAGID,aAAK,EAAE;AAHX,OADO,C,GAMV,6B;AAAA,c;AAAA,c;AAAA,kS;AAAA;AAAA;ACjBL;AAQI;AAAA,mBAAiB,IAAAe,cAAA,EAAjB;AAAiC,WAAjC;AAGA;AAAqB;AAAiB;AACtC;AACI;AAOJ;AACJ;AACA;AACI;AAAuC;AAAA,mBAASC,MAAM,CAACt/C,eAAP,EAAT;AAAiC,WAAjC;AACnC;AAGI;AAAiB,gBAAA5O,QAAA;AAAkB,uBAAAmuD,eAAA;AAAiB,WAApD;AACH;AACL;AACJ;;;;;;AAzBI,gDAAwB,OAAxB,EAAwB,SAAxB;AAIA;AAFA;AAIqB;AAAA;AAGb;AAAA;AAWA;AAAA,6CAAgB,SAAhB,EAAgB,gDAAhB;;;;;;mEDNChB,kB;;;;2BAAAA,kB,EAAkB;cAZ9B,OAAAjK,SAY8B;eAZpB;AACPlnD,kBAAQ,EAAE,cADH;AAEPmnD,qBAAW,EAAE,6BAFN;AAGPC,mBAAS,EAAE,CAAC,6BAAD,CAHJ;AAIPvD,mBAAS,EAAE,CACP;AACIpL,mBAAO,EAAE,QAAAsY,iBADb;AAEIC,uBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,qBAAME,kBAAN;AAAA,aAAX,CAFjB;AAGID,iBAAK,EAAE;AAHX,WADO;AAJJ,S;AAYoB,Q;;gBAE1B,OAAAxuD,K;iBAAM,M;;;gBAEN,OAAAA,K;iBAAM,I;;;gBAEN,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAA2kD;;;gBAWA,OAAAsD,S;iBAAU,OAAAqH,c,EAAgB;AAAE,sBAAQ;AAAV,W;;;;;;;;;;;;;;;;;;;;;;;;AE5C/B;AAAA;AAAA;;AAQA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;AChBY;AACI;AACJ;;;;;AAFoD;AAChD;AAAA;;;;QD6BHI,sB;;;;;AAZb;AAAA;;AAAA;;;AAcI;;AACgB,iBAAAvrD,GAAA,GAAc,GAAd;AAChB;;AACgB,iBAAAk7B,GAAA,GAAc,EAAd;AAChB;;AACgB,iBAAAn8B,IAAA,GAAe,EAAf;AAKhB;;AACgB,iBAAAysD,eAAA,GAAiC,EAAjC;AAChB;;AACgB,iBAAAz4B,OAAA,GAAmB,KAAnB;AAET,iBAAAz1B,QAAA,GAAmB,EAAnB;AA7BX;AA4HC;;;;mCAtFkB;AACX,eAAKmuD,gBAAL,GAAwB,KAAKC,uBAAL,CAA6B,KAAK1rD,GAAlC,EAAuC,KAAKk7B,GAA5C,EAAiD,KAAKn8B,IAAtD,EAA4D,KAAKg0B,OAAjE,CAAxB;AACH;;;oCAEkB94B,O,EAAsB;AACrC;AACA,cAAIA,OAAO,CAAC+F,GAAR,IAAe/F,OAAO,CAACihC,GAAvB,IAA8BjhC,OAAO,CAAC8E,IAAtC,IAA8C9E,OAAO,CAAC8L,IAAtD,IAA8D9L,OAAO,CAAC84B,OAA1E,EAAmF;AAC/E,iBAAK04B,gBAAL,GAAwB,KAAKC,uBAAL,CAA6B,KAAK1rD,GAAlC,EAAuC,KAAKk7B,GAA5C,EAAiD,KAAKn8B,IAAtD,EAA4D,KAAKg0B,OAAjE,CAAxB;AACH;AACJ;AAED;;;;;;;iCAIgB62B,S,EAAiB;AAC7B,eAAKtsD,QAAL,GAAgBssD,SAAhB;AACA;;AACA,cAAI,KAAKI,SAAT,EAAoB;AAChB,iBAAKA,SAAL,CAAe,CAACJ,SAAhB;AACH;AACJ;AAED;;AACA;;;;;;;mCAIkBnqD,K,EAAe;AAC7B,eAAKnC,QAAL,GAAgBmC,KAAhB;AACH;;;yCAEuB04B,Q,EAAmB;AACvC,eAAKA,QAAL,GAAgBA,QAAhB;AACH;AAED;;AACA;;;;;;;yCAIwB5/B,E,EAAuB;AAC3C,eAAKyxD,SAAL,GAAiBzxD,EAAjB;AACH;AAED;;AACA;;;;;;;0CAIyBA,E,EAAuB;AAC5C,eAAK0xD,QAAL,GAAgB1xD,EAAhB;AACH;;;gDAE+ByH,G,EAAak7B,G,EAAan8B,I,EAAsC;AAAA,cAAxBg0B,OAAwB,uEAAL,KAAK;AAC5F,cAAM44B,MAAM,GAAe,EAA3B;AACA,cAAI5lD,IAAI,GAAGm1B,GAAX,CAF4F,CAG5F;;AACA,cAAI3+B,IAAI,GAAG,KAAKwJ,IAAL,GAAY,IAAI,UAAA0H,MAAJ,CAAW;AAAClR,gBAAI,EAAE,KAAKwJ;AAAZ,WAAX,CAAZ,GAA4C,IAAvD,CAJ4F,CAM5F;;AAN4F,uDAOvE,KAAKylD,eAPkE;AAAA;;AAAA;AAO5F,sEAA2C;AAAA,kBAAhCvkC,MAAgC;AACvC0kC,oBAAM,CAACvnD,IAAP,CAAY;AACRoK,kBAAE,EAAEyY,MADI;AAER3uB,oBAAI,EAAEiE,IAAI,aACDA,IAAI,CAACa,QAAL,CAAc;AAAEJ,yBAAO,EAAEiqB;AAAX,iBAAd,EAAmCppB,UAAnC,CAA8C,OAAAwI,gBAAA,EAA9C,EAAkEW,iBAAlE,EADC,eACyF,OAAAzD,gBAAA,CAAiB0jB,MAAjB,CADzF,mBAED,OAAA1jB,gBAAA,CAAiB0jB,MAAjB,CAFC;AAFF,eAAZ;AAMH;AAd2F;AAAA;AAAA;AAAA;AAAA;;AAiB5F,iBAAOlhB,IAAI,IAAI/F,GAAf,EAAoB;AAChB2rD,kBAAM,CAACvnD,IAAP,CAAY;AACRoK,gBAAE,EAAEzI,IADI;AAERzN,kBAAI,EAAEiE,IAAI,aACDA,IAAI,CAACa,QAAL,CAAc;AAAEJ,uBAAO,EAAE+I;AAAX,eAAd,EAAiClI,UAAjC,CAA4C,OAAAwI,gBAAA,EAA5C,EAAgEW,iBAAhE,EADC,eACuF,OAAAzD,gBAAA,CAAiBwC,IAAjB,CADvF,mBAED,OAAAxC,gBAAA,CAAiBwC,IAAjB,CAFC;AAFF,aAAZ;AAMAA,gBAAI,IAAIhH,IAAR;AACH;;AACD,cAAIg0B,OAAJ,EAAa;AACV44B,kBAAM,CAACvnD,IAAP,CAAY;AAAEoK,gBAAE,EAAE,KAAK,EAAX;AAAelW,kBAAI,EAAE;AAArB,aAAZ;AACF;;AACDqzD,gBAAM,CAACvnD,IAAP,CAAY;AAAEoK,cAAE,EAAE,IAAI,EAAJ,GAAS,EAAf;AAAmBlW,gBAAI,EAAE;AAAzB,WAAZ;AACA,iBAAOqzD,MAAP;AACH;;;;MA/GuC,OAAA3yD,a;;AAZ5C;;;sDAYauyD,sB;AAAsB,K;;;YAAtBA,sB;AAAsB,uC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA,uCARpB,CACP;AACI3Z,eAAO,EAAE,QAAAsY,iBADb;AAEIC,mBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,iBAAMmB,sBAAN;AAAA,SAAX,CAFjB;AAGIlB,aAAK,EAAE;AAHX,OADO,CAQoB,GAF9B,6BAE8B,EAF9B,uBAE8B,C;AAF9B,c;AAAA,a;AAAA,4K;AAAA;AAAA;AC/BL;AACI;AACI;AAA6D;AAAA,mBAAe,IAAAltD,QAAA,QAAf;AAA+B,WAA/B;AACzD;AAGJ;AACJ;AACJ;;;;AAR4B;AAEA;AAAA,+CAAkB,UAAlB,EAAkB,YAAlB;AACJ;AAAA;;;;;;uED8BXouD,sB;;;;2BAAAA,sB,EAAsB;cAZlC,OAAAlL,SAYkC;eAZxB;AACPlnD,kBAAQ,EAAE,kBADH;AAEPmnD,qBAAW,EAAE,iCAFN;AAGPC,mBAAS,EAAE,CAAC,iCAAD,CAHJ;AAIPvD,mBAAS,EAAE,CACP;AACIpL,mBAAO,EAAE,QAAAsY,iBADb;AAEIC,uBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,qBAAMmB,sBAAN;AAAA,aAAX,CAFjB;AAGIlB,iBAAK,EAAE;AAHX,WADO;AAJJ,S;AAYwB,Q;;gBAG9B,OAAAxuD;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEhDL;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACNA;AAAA;AAAA;;AASA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACUQ;AACI;AACJ;;;;;AAFgD;AAC5C;AAAA;;;;;;;;AAHZ;AACI;AAAyD;AAAA;AAAA;AAAA;AAAA;AACrD;AAGJ;AACJ;;;;;AALwB;AAAA,4CAAc,UAAd,EAAc,eAAd;AACJ;AAAA;;;;;;;;;;;;QDIP+vD,kB;;;;;AAZb;AAAA;;AAAA;;;AAaI;;AACgB,iBAAA7sD,IAAA,GAAe,EAAf;AAGhB;;AACgB,iBAAA8sD,aAAA,GAAyB,IAAzB;AAChB;;AACO,iBAAAtvD,IAAA,GAAe,UAAAyJ,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB+J,EAAnC;AACP;;AACO,iBAAAH,IAAA,GAAe,UAAAC,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB0B,UAApB,CAA+B,OAA/B,CAAf;AAtBX;AA8JC,O,CA3HG;;;;;mCACe;AAAA;;AACX,eAAKiuD,WAAL,GAAmB,IAAnB;AACA,eAAKC,aAAL,GAAqB,KAAKC,sBAAL,CAA4B,KAAKzvD,IAAjC,EAAuC,CAAC,KAAKsvD,aAA7C,EAA4D,KAAK9sD,IAAjE,CAArB;AACA,eAAK7D,OAAL,CAAa,MAAb,EAAqB;AAAA,mBAAM,QAAI,CAAC4wD,WAAL,GAAmB,KAAzB;AAAA,WAArB;AACH;;;oCAEkB7xD,O,EAAsB;AACrC,cAAIA,OAAO,CAAC4xD,aAAR,IAAyB5xD,OAAO,CAAC8E,IAArC,EAA2C;AACvC,iBAAKgtD,aAAL,GAAqB,KAAKC,sBAAL,CAA4B,KAAKzvD,IAAjC,EAAuC,CAAC,KAAKsvD,aAA7C,EAA4D,KAAK9sD,IAAjE,CAArB;AACH;AACJ;;;;AAqBD;;;;iCAIgB6qD,S,EAAiB;AAC7B,eAAK7jD,IAAL,GAAY6jD,SAAZ;;AACA,cAAI,KAAKI,SAAT,EAAoB;AAChB,gBAAMjkD,IAAI,GAAG,CAAC,KAAKA,IAAL,IAAa,OAAd,EAAuBxH,KAAvB,CAA6B,GAA7B,CAAb;AACA,gBAAMhC,IAAI,GAAG,KAAKk7B,KAAL,CAAWt6B,QAAX,CAAoB;AAAE0B,kBAAI,EAAE,CAACkH,IAAI,CAAC,CAAD,CAAb;AAAkBnJ,oBAAM,EAAE,CAACmJ,IAAI,CAAC,CAAD;AAA/B,aAApB,EAA0DE,YAA1D,CAAuE,QAAvE,CAAb;;AACA,iBAAK+jD,SAAL,CAAeztD,IAAI,CAAC2J,EAApB;AACH;AACJ;AAED;;;;;;;mCAIkBzG,K,EAAe;AAC7B,cAAI,CAACA,KAAL,EAAY;AACR;AACH;;AACD,eAAKlD,IAAL,GAAYkD,KAAZ;AACA,cAAIlD,IAAI,GAAG,KAAKk7B,KAAL,CAAWxxB,YAAX,CAAwB,QAAxB,CAAX;AACA1J,cAAI,GAAGA,IAAI,CAACY,QAAL,CAAc;AAAEP,kBAAM,EAAEC,IAAI,CAACC,IAAL,CAAUP,IAAI,CAACS,OAAL,GAAe,CAAzB,IAA8B;AAAxC,WAAd,CAAP;AACA,eAAK+I,IAAL,GAAYxJ,IAAI,CAACsB,UAAL,CAAgB,OAAhB,CAAZ;AACA,eAAKkuD,aAAL,GAAqB,KAAKC,sBAAL,CAA4B,KAAKzvD,IAAjC,EAAuC,CAAC,KAAKsvD,aAA7C,EAA4D,KAAK9sD,IAAjE,CAArB;AACH;;;yCAEuBo5B,Q,EAAmB;AACvC,eAAKA,QAAL,GAAgBA,QAAhB;AACH;AAED;;;;;;;yCAIwB5/B,E,EAAuB;AAC3C,eAAKyxD,SAAL,GAAiBzxD,EAAjB;AACH;AAED;;;;;;;0CAIyBA,E,EAAuB;AAC5C,eAAK0xD,QAAL,GAAgB1xD,EAAhB;AACH;AAED;;;;;;qCAGoB;AAAA;;AAChB,eAAKuzD,WAAL,GAAmB,IAAnB;AACA,eAAK5wD,OAAL,CAAa,UAAb,EAAyB,YAAM;AAC3B,gBAAI,QAAI,CAAC+wD,YAAT,EAAuB;AACnB,sBAAI,CAACA,YAAL,CAAkBC,KAAlB;;AACA,sBAAI,CAACD,YAAL,CAAkB13C,IAAlB;;AACA,sBAAI,CAACja,YAAL,CAAkB,cAAlB,EAAkC,QAAI,CAAC2xD,YAAL,CAAkBE,YAAlB,CAA+B3xD,SAA/B,CAAyC,UAAClD,KAAD,EAAW;AAClF,oBAAI,CAACA,KAAL,EAAY;AACR,0BAAI,CAACw0D,WAAL,GAAmB,KAAnB;AACH;AACJ,eAJiC,CAAlC;AAKH;AACJ,WAVD;AAWH;AAED;;;;;;;;+CAK+BM,S,EAAmBC,S,EAAqC;AAAA,cAAjBttD,IAAiB,uEAAF,EAAE;AACnF,cAAIxC,IAAI,GAAG,IAAI,UAAAkR,MAAJ,CAAW;AAAClR,gBAAI,EAAE6vD;AAAP,WAAX,CAAX;AACA,cAAMT,MAAM,GAAG,EAAf;;AACA,cAAIU,SAAS,IAAI9vD,IAAI,CAACs5B,WAAL,CAAiB,UAAA7vB,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAjB,CAAjB,EAAwD;AACpDI,gBAAI,GAAGA,IAAI,CAAC0J,YAAL,CAAkB,KAAlB,CAAP;AACH,WAFD,MAEO,IAAI1J,IAAI,CAACs5B,WAAL,CAAiB,UAAA7vB,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAjB,CAAJ,EAA2C;AAC9CI,gBAAI,GAAG,UAAAyJ,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAP;AACH;;AACDI,cAAI,GAAGA,IAAI,CAACY,QAAL,CAAc;AAAEP,kBAAM,EAAEC,IAAI,CAACC,IAAL,CAAUP,IAAI,CAACS,OAAL,GAAe+B,IAAzB,IAAiCA;AAA3C,WAAd,CAAP;AACA,cAAM6qB,GAAG,GAAGrtB,IAAI,CAACqwB,UAAL,CAAgB,KAAhB,CAAZ,CATmF,CAUnF;;AACA,iBAAOrwB,IAAI,CAACq5B,YAAL,CAAkBhM,GAAlB,CAAP,EAA+B;AAC3B+hC,kBAAM,CAACvnD,IAAP,CAAY;AACR9L,kBAAI,YAAKiE,IAAI,CAACsB,UAAL,CAAgB,OAAAwI,gBAAA,EAAhB,EAAoCW,iBAApC,EAAL,CADI;AAERwH,gBAAE,EAAEjS,IAAI,CAACsB,UAAL,CAAgB,OAAhB;AAFI,aAAZ;AAIAtB,gBAAI,GAAGA,IAAI,CAACa,QAAL,CAAc;AAAEJ,qBAAO,EAAE+B;AAAX,aAAd,CAAP;AACH;;AACD,iBAAO4sD,MAAP;AACH;;;4BA7Ge;AACZ,iBAAO,IAAI,UAAAl+C,MAAJ,CAAW;AAAClR,gBAAI,EAAE,KAAKA;AAAZ,WAAX,CAAP;AACH;AAED;;;;4BAC0B;AACtB,cAAMwJ,IAAI,GAAG,CAAC,KAAKA,IAAL,IAAa,OAAd,EAAuBxH,KAAvB,CAA6B,GAA7B,CAAb;AACA,cAAMhC,IAAI,GAAG,KAAKk7B,KAAL,CAAWt6B,QAAX,CAAoB;AAAE0B,gBAAI,EAAE,CAACkH,IAAI,CAAC,CAAD,CAAb;AAAkBnJ,kBAAM,EAAE,CAACmJ,IAAI,CAAC,CAAD;AAA/B,WAApB,CAAb;;AACA,cAAIxJ,IAAI,CAACS,OAAL,GAAe,EAAf,KAAsB,CAAtB,IAA2B,CAAC,KAAK+uD,aAAL,CAAmBhsD,IAAnB,CAAwB,UAAAgG,IAAI;AAAA,mBAAIA,IAAI,CAACyI,EAAL,KAAYjS,IAAI,CAACsB,UAAL,CAAgB,OAAhB,CAAhB;AAAA,WAA5B,CAAhC,EAAuG;AACnG,iBAAKkuD,aAAL,CAAmB3nD,IAAnB,CAAwB;AACpB9L,kBAAI,YAAKiE,IAAI,CAACsB,UAAL,CAAgB,OAAAwI,gBAAA,EAAhB,CAAL,CADgB;AAEpBmI,gBAAE,EAAEjS,IAAI,CAACsB,UAAL,CAAgB,OAAhB;AAFgB,aAAxB;;AAIA,iBAAKkuD,aAAL,CAAmBtnD,IAAnB,CAAwB,UAACC,CAAD,EAAIC,CAAJ;AAAA,qBAAU,UAAGD,CAAC,CAAC8J,EAAL,EAAU5J,aAAV,WAA2BD,CAAC,CAAC6J,EAA7B,EAAV;AAAA,aAAxB;AACH;;AACD,iBAAO,KAAKu9C,aAAZ;AACH;;;;MApDmC,OAAA/yD,a;;AAZxC;;;kDAYa4yD,kB;AAAkB,K;;;YAAlBA,kB;AAAkB,mC;AAAA;AAAA;;;;;;;;;;;;;;;uCARhB,CACP;AACIha,eAAO,EAAE,QAAAsY,iBADb;AAEIC,mBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,iBAAMwB,kBAAN;AAAA,SAAX,CAFjB;AAGIvB,aAAK,EAAE;AAHX,OADO,C,GAMV,6B,EAAA,uB;AAAA,c;AAAA,a;AAAA,0Z;AAAA;AAAA;AChCL;AAOI;AAAA,mBAAiB,IAAAiC,UAAA,EAAjB;AAA6B,WAA7B;AAEA;AACI;AAKI;AAAA,mBAAiB,IAAAnvD,QAAA,QAAjB;AAAiC,WAAjC;AALJ;AAOJ;AACA;AAAkB;AAAA,mBAAS,IAAAmvD,UAAA,EAAT;AAAqB,WAArB;AACd;AAOJ;AACJ;AACA;;;;AAzBI;AACA;AASQ;AAAA,kDAAqB,SAArB,EAAqB,QAArB;AAOA;AAAA;AAQyB;AAAA;;;;;;mEDMxBV,kB;;;;2BAAAA,kB,EAAkB;cAZ9B,OAAAvL,SAY8B;eAZpB;AACPlnD,kBAAQ,EAAE,cADH;AAEPmnD,qBAAW,EAAE,6BAFN;AAGPC,mBAAS,EAAE,CAAC,6BAAD,CAHJ;AAIPvD,mBAAS,EAAE,CACP;AACIpL,mBAAO,EAAE,QAAAsY,iBADb;AAEIC,uBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,qBAAMwB,kBAAN;AAAA,aAAX,CAFjB;AAGIvB,iBAAK,EAAE;AAHX,WADO;AAJJ,S;AAYoB,Q;;gBAE1B,OAAAxuD;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAeA,OAAAioD,S;iBAAU,Q;;;;;;;;;;;;;;;;;;;;;;;;AEvDf;AAAA;AAAA;;AAUA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAUA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAMA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvBQ;AACI;AACJ;;;;;;AAGA;AACI;AAAkB;AAAiB;AACnC;AAAmB;AAAkB;AACzC;;;;;AAH6C;AACvB;AAAA;AACC;AAAA;;;;;;;;;;;;;;;;AAoBnB;AAKI;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAIJ;;;;;AAVI,2CAAiB,OAAjB,EAAiB,uCAAjB,EAAiB,WAAjB,EAAiB,IAAjB;AAKA;AAAA;AAGI;AAAA;;;;;;AAdZ;AAII;AAaJ;;;;;AAZQ;AAAA;;;;;;;;;;;;;;;;;;AAgBZ;AAAA;AAA6C;;;;;;;;;;;;QDPpCyI,sB;;;;;AA4BT,sCAAoB9zC,QAApB,EAA0D4uB,MAA1D,EAAyFqZ,KAAzF,EAAmH;AAAA;;AAAA;;AAC/G;AADgB,iBAAAjoC,QAAA,GAAAA,QAAA;AAAsC,iBAAA4uB,MAAA,GAAAA,MAAA;AAA+B,iBAAAqZ,KAAA,GAAAA,KAAA;AAzBzF;;AACgB,iBAAA7yC,KAAA,GAAgB,CAAhB;AAChB;;AAC0B,iBAAA+2C,QAAA,GAAW,IAAI,OAAAjH,YAAJ,EAAX;AAY1B;;AACO,iBAAA6O,OAAA,GAAU,IAAI,OAAAn0C,OAAJ,EAAV;AAS4G;AAElH;;;;mCAEU;AAAA;;AACP;AACA,eAAKwtC,eAAL,GAAuB,KAAK2G,OAAL,CAAan/C,IAAb,CACnB,YAAA+f,YAAA,CAAa,GAAb,CADmB,EAEnB,YAAA+zB,oBAAA,EAFmB,EAGnB,YAAA9zB,SAAA,CAAU,UAAC1d,KAAD,EAAW;AACjB,oBAAI,CAAC6F,OAAL,GAAe,IAAf;AACA,mBAAO7F,KAAK,CAAClR,MAAN,IAAgB,QAAI,CAACoP,KAArB,GACD,QAAI,CAACw5B,MAAL,CAAY13B,KAAZ,CAAkB;AAChByM,eAAC,EAAEzM,KAAK,CAACtN,KAAN,CAAY,CAAZ,EAAexF,IAAI,CAACmD,GAAL,CAAS,QAAI,CAAC6N,KAAd,EAAqB,CAArB,CAAf,CADa;AAEhB6M,mBAAK,EAAE,KAAK;AAFI,aAAlB,CADC,GAKD9B,OAAO,CAACC,OAAR,CAAgB,EAAhB,CALN;AAMH,WARD,CAHmB,EAYnB,YAAAkC,UAAA,CAAW,UAAChH,CAAD;AAAA,mBAAO,OAAAkH,EAAA,CAAG,EAAH,CAAP;AAAA,WAAX,CAZmB,EAanB,YAAA7Y,GAAA,CAAI,UAAC3H,IAAD,EAAkB;AAClB,oBAAI,CAAC+a,OAAL,GAAe,KAAf;AACA,mBAAO,OAAA3R,UAAA,CAAW,QAAI,CAAC4oD,UAAhB,EAA4BhyD,IAA5B,EAAkC,CAAC,MAAD,EAAS,OAAT,CAAlC,CAAP;AACH,WAHD,CAbmB,CAAvB,CAFO,CAoBP;;AACA,eAAKH,YAAL,CACI,gBADJ,EAEI,KAAKurD,eAAL,CAAqBrrD,SAArB,CAA+B,UAACC,IAAD,EAAU;AACrC,oBAAI,CAACkmD,SAAL,GAAiBlmD,IAAjB;;AACA,oBAAI,CAACkmD,SAAL,CAAehmD,OAAf,CAAuB,UAACC,CAAD,EAAY;AAC/BA,eAAC,CAAC8xD,UAAF,GAAe,OAAA7mD,gBAAA,CAAiBjL,CAAC,CAAC8xD,UAAnB,CAAf;AACA9xD,eAAC,CAAC+xD,WAAF,GAAgB,OAAA9mD,gBAAA,CAAiBjL,CAAC,CAAC+xD,WAAnB,CAAhB;AACA,qBAAO/xD,CAAP;AACH,aAJD;;AAKA,oBAAI,CAAC+lD,SAAL,CAAeliD,MAAf,GAAwB,QAAI,CAACmuD,iBAAL,CAAuBC,SAAvB,EAAxB,GAA6D,QAAI,CAACD,iBAAL,CAAuBE,UAAvB,EAA7D;AACH,WARD,CAFJ;AAYH;AAED;;;;;;;gCAIe33C,I,EAAY;AACvB;AACA,cAAI,CAAC,KAAK43C,WAAV,EAAuB;AACnB,iBAAKA,WAAL,GAAmB,EAAnB;AACH;;AACD,cAAMlyD,KAAK,GAAG,KAAKkyD,WAAL,CAAiB5gB,SAAjB,CAA2B,UAAC6gB,MAAD;AAAA,mBAAYA,MAAM,CAACx+C,EAAP,KAAc2G,IAAI,CAAC3G,EAA/B;AAAA,WAA3B,CAAd;AACA;;AACA,cAAI3T,KAAK,GAAG,CAAZ,EAAe;AACX,iBAAKkyD,WAAL,gCAAuB,KAAKA,WAA5B,IAAyC53C,IAAzC;AACH;;AACD,eAAKhY,QAAL,CAAc,KAAK4vD,WAAnB;AACA,eAAKN,UAAL,GAAkB,EAAlB;AACH;AAED;;;;;;;mCAIkBt3C,I,EAAY;AAC1B,eAAK43C,WAAL,GAAmB,KAAKA,WAAL,CAAiB5pD,MAAjB,CAAwB,UAAC6pD,MAAD;AAAA,mBAAYA,MAAM,CAACx+C,EAAP,KAAc2G,IAAI,CAAC3G,EAA/B;AAAA,WAAxB,CAAnB;AACA,eAAKrR,QAAL,CAAc,KAAK4vD,WAAnB;AACH;AAED;;;;;;;yCAIwB9iD,K,EAAO;AAAA;;AAC3B;AACA,cAAIA,KAAK,CAACyE,MAAV,EAAkB;AACd,gBAAMu+C,IAAI,GAAGhjD,KAAK,CAACyE,MAAN,CAAaw+C,KAAb,CAAmB,CAAnB,CAAb;AACA;;AACA,gBAAID,IAAJ,EAAU;AACN,kBAAME,MAAM,GAAG,IAAIC,UAAJ,EAAf;AACAD,oBAAM,CAACE,UAAP,CAAkBJ,IAAlB,EAAwB,OAAxB;AACAE,oBAAM,CAAChqB,gBAAP,CAAwB,MAAxB,EAAgC,UAACmqB,GAAD,EAAS;AACrC,wBAAI,CAACC,cAAL,CAAqBD,GAAG,CAACE,UAAJ,CAAuB7yC,MAA5C;;AACA1Q,qBAAK,CAACyE,MAAN,CAAajP,KAAb,GAAqB,EAArB;;AACA,wBAAI,CAACihD,KAAL,CAAWqB,aAAX;AACH,eAJD;AAKAoL,oBAAM,CAAChqB,gBAAP,CAAwB,OAAxB,EAAiC,UAACpvB,CAAD;AAAA,uBAC7B,QAAI,CAAC0E,QAAL,CAAcy5B,WAAd,CAA0B,qBAA1B,CAD6B;AAAA,eAAjC;AAGH;AACJ;AACJ;AAED;;;;;;;uCAIuBp/B,I,EAAc;AAAA;;AACjC,cAAMrY,IAAI,GAAG,OAAAoO,SAAA,CAAUiK,IAAV,KAAmB,EAAhC;AACA,cAAMtE,EAAE,GAAG,KAAK64B,MAAL,CAAYpP,OAAZ,CAAoBif,UAA/B;AACAz8C,cAAI,CAACE,OAAL,CAAa,UAACyI,EAAD,EAAQ;AACjB,gBAAM+yC,SAAS,GAAG/yC,EAAE,CAACyzC,UAAH,CAAct4C,KAAd,CAAoB,GAApB,EAAyB6D,GAAzB,CAA6B,UAACiC,IAAD;AAAA,qBAAkBA,IAAI,CAACimC,MAAL,CAAY,CAAZ,EAAe3+B,WAAf,KAA+BtH,IAAI,CAAChC,KAAL,CAAW,CAAX,EAAc4B,WAAd,EAAjD;AAAA,aAA7B,EAA2G2B,IAA3G,CAAgH,GAAhH,CAAlB;AACA,gBAAM6uC,QAAQ,GAAGrxC,EAAE,CAAC0zC,SAAH,CAAav4C,KAAb,CAAmB,GAAnB,EAAwB6D,GAAxB,CAA4B,UAACiC,IAAD;AAAA,qBAAkBA,IAAI,CAACimC,MAAL,CAAY,CAAZ,EAAe3+B,WAAf,KAA+BtH,IAAI,CAAChC,KAAL,CAAW,CAAX,EAAc4B,WAAd,EAAjD;AAAA,aAA5B,EAA0G2B,IAA1G,CAA+G,GAA/G,CAAjB;AAEAxC,cAAE,CAAC9K,IAAH,GAAU8K,EAAE,CAAC9K,IAAH,cAAc69C,SAAd,cAA2B1B,QAA3B,CAAV;AACA,gBAAMjsC,OAAO,GAAG,CAACpF,EAAE,CAAC9K,IAAH,cAAcuE,IAAI,CAACY,KAAL,CAAWZ,IAAI,CAACuJ,MAAL,KAAgB,QAA3B,CAAd,CAAD,EACX7H,KADW,CACL,GADK,EAEXqH,IAFW,CAEN,GAFM,EAGX3B,WAHW,EAAhB;AAIA;;AACA,gBAAI,CAACb,EAAE,CAACuK,KAAR,EAAe;AACXvK,gBAAE,CAACuK,KAAH,aAAcnF,OAAd,cAAyBgG,EAAzB;AACH;;AACDpL,cAAE,CAAC5B,IAAH,GAAU,UAAV;AACA4B,cAAE,CAACsyB,QAAH,GAAc,CAACtyB,EAAE,CAACuK,KAAH,CAAS8/C,QAAT,CAAkB,eAAlB,CAAD,IAAuC,CAACrqD,EAAE,CAACuK,KAAH,CAAS8/C,QAAT,CAAkB,wBAAlB,CAAtD;;AACA,oBAAI,CAACC,OAAL,CAAa,IAAI,cAAA78B,IAAJ,CAASztB,EAAT,CAAb;AACH,WAhBD;AAiBH;AAED;;AACA;;;;8CAC6B;AACzB,cAAMuqD,QAAQ,+GAAd;AACA,iBAAAzlD,YAAA,CAAa,cAAb,EAA6BylD,QAA7B;AACH;AAED;;;;;;;iCAIgB/D,S,EAAiB;AAC7B,eAAKmD,WAAL,GAAmBnD,SAAnB;;AACA,cAAI,KAAKI,SAAT,EAAoB;AAChB,iBAAKA,SAAL,CAAeJ,SAAf;AACH;AACJ;AAED;;AACA;;;;;;;mCAIkBnqD,K,EAAe;AAC7B,eAAKstD,WAAL,GAAmBttD,KAAnB;AACH;;;yCAEuB04B,Q,EAAmB;AACvC,eAAKA,QAAL,GAAgBA,QAAhB;AACH;AAED;;AACA;;;;;;;yCAIwB5/B,E,EAAuB;AAC3C,eAAKyxD,SAAL,GAAiBzxD,EAAjB;AACH;AAED;;AACA;;;;;;;0CAIyBA,E,EAAuB;AAC5C,eAAK0xD,QAAL,GAAgB1xD,EAAhB;AACH;;;;MA/LuC,OAAAS,a;;AAZ5C;;;uBAYauzD,sB,EAAsB,2C,EAAA,qC,EAAA,0C;AAAA,K;;;YAAtBA,sB;AAAsB,wC;AAAA;AAAA;yBA0BpB,eAAAqB,sB,EAAwB,I,EAAO,eAAAA,sB;;;;;;;;;;;;;;;;uCAlC/B,CACP;AACIhc,eAAO,EAAE,QAAAsY,iBADb;AAEIC,mBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,iBAAMmC,sBAAN;AAAA,SAAX,CAFjB;AAGIlC,aAAK,EAAE;AAHX,OADO,C,GAMV,6B;AAAA,e;AAAA,c;AAAA,giC;AAAA;AAAA;ACtDL;AACI;AACI;AAAA;AAII;AAAA;AAAA,aAAwB,eAAxB,EAAwB;AAAA,mBACP,IAAAmC,OAAA,MAAanB,MAAM,CAAC1Q,IAAP,EAAb,CADO;AACoB,WAD5C;AAJJ;AAYA;AACI;AAGJ;AACA;AAGJ;AACA;AAA0C;AAAA,mBAAkB,IAAA+S,OAAA,qBAAlB;AAA8C,WAA9C;AACtC;AAIJ;AACA;AACI;AAAmD;AAAA,mBAAS,IAAA9I,QAAA,OAAT;AAAwB,WAAxB;AAAnD;AAEA;AACA;AAAA;AAEI;AAAmB;AAAA,mBAAU,IAAAiJ,gBAAA,QAAV;AAAkC,WAAlC;AAAnB;AACJ;AAAA;AACA;AAAyD;AAAA,mBAAS,IAAAC,mBAAA,EAAT;AAA8B,WAA9B;AAAzD;AAEA;AACJ;AACA;AACI;AAkBJ;AACJ;AACA;;;;;;;;AA9DwC;AAM5B;AAAA,mDAAwB,UAAxB,EAAwB,YAAxB,EAAwB,iBAAxB,EAAwB,GAAxB;AAUI;AAAA;AAGsB;AAAA;AAKlB;AAAA;AAoBR;AAAA,2EAA2D,UAA3D,EAA2D,GAA3D;;;;;;;;;2BDYCvB,sB,EAAsB;cAZlC,OAAAlM,SAYkC;eAZxB;AACPlnD,kBAAQ,EAAE,mBADH;AAEPmnD,qBAAW,EAAE,kCAFN;AAGPC,mBAAS,EAAE,CAAC,kCAAD,CAHJ;AAIPvD,mBAAS,EAAE,CACP;AACIpL,mBAAO,EAAE,QAAAsY,iBADb;AAEIC,uBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,qBAAMmC,sBAAN;AAAA,aAAX,CAFjB;AAGIlC,iBAAK,EAAE;AAHX,WADO;AAJJ,S;AAYwB,Q;;;;;;;;;;gBAE9B,OAAAxuD;;;gBAEA,OAAAA;;;gBAEA,OAAA2kD,M;iBAAO,S;;;gBAoBP,OAAAsD,S;iBAAU,eAAA8J,sB,EAAwB;AAACG,gBAAI,EAAE,eAAAH;AAAP,W;;;;;;;;;;;;;;;;;;;;;;;;AElFvC;AAAA;AAAA;;AAOA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAQA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAIA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChBQ;AACI;AACJ;;;;;;AAGA;AACI;AAAkB;AAAiB;AACnC;AAAmB;AAAkB;AACzC;;;;;AAH6C;AACvB;AAAA;AACC;AAAA;;;;;;;;;;;;QDuBlBI,wB;;;;;AAwBT,wCAAoB3mB,MAApB,EAA0C;AAAA;;AAAA;;AACtC;AADgB,iBAAAA,MAAA,GAAAA,MAAA;AATpB;;AACO,iBAAAmlB,OAAA,GAAU,IAAI,OAAAn0C,OAAJ,EAAV;AAQmC;AAEzC;;;;mCAEc;AAAA;;AAEX;AACA,eAAKwtC,eAAL,GAAuB,KAAK2G,OAAL,CAAan/C,IAAb,CACnB,YAAA+f,YAAA,CAAa,GAAb,CADmB,EAEnB,YAAA+zB,oBAAA,EAFmB,EAGnB,YAAA9zB,SAAA,CAAU,UAAA1d,KAAK,EAAI;AACf,oBAAI,CAAC6F,OAAL,GAAe,IAAf;AACA,mBAAO,QAAI,CAAC4J,OAAL,IAAgB,QAAI,CAACA,OAAL,CAAa3gB,MAAb,GAAsB,CAAtC,GACDma,OAAO,CAACC,OAAR,CAAgB,QAAI,CAACuG,OAArB,CADC,GAEDzP,KAAK,CAAClR,MAAN,IAAgB,CAAhB,GACK,QAAI,CAAC4oC,MAAL,CAAY13B,KAAZ,CAAkB;AAAEyM,eAAC,EAAEzM,KAAL;AAAY+K,mBAAK,EAAE,KAAK;AAAxB,aAAlB,CADL,GAEI9B,OAAO,CAACC,OAAR,CAAgB,EAAhB,CAJV;AAKH,WAPD,CAHmB,EAWnB,YAAAkC,UAAA,CAAW,UAACV,GAAD;AAAA,mBAAS,OAAAY,EAAA,CAAG,EAAH,CAAT;AAAA,WAAX,CAXmB,EAYnB,YAAA7Y,GAAA,CAAI,UAAC3H,IAAD,EAAkB;AAClB,oBAAI,CAAC+a,OAAL,GAAe,KAAf;AACA,mBAAO,OAAA3R,UAAA,CAAW,QAAI,CAAC4oD,UAAhB,EAA4BhyD,IAA5B,EAAkC,CAAC,MAAD,EAAS,OAAT,CAAlC,CAAP;AACH,WAHD,CAZmB,CAAvB,CAHW,CAoBX;;AACA,eAAKH,YAAL,CAAkB,gBAAlB,EAAoC,KAAKurD,eAAL,CAAqBrrD,SAArB,CAA+B,UAAAC,IAAI,EAAI;AACvE,oBAAI,CAACkmD,SAAL,GAAiBlmD,IAAjB;;AACA,oBAAI,CAACkmD,SAAL,CAAehmD,OAAf,CAAuB,UAACC,CAAD,EAAY;AAC/BA,eAAC,CAAC8xD,UAAF,GAAe,OAAA7mD,gBAAA,CAAiBjL,CAAC,CAAC8xD,UAAnB,CAAf;AACA9xD,eAAC,CAAC+xD,WAAF,GAAgB,OAAA9mD,gBAAA,CAAiBjL,CAAC,CAAC+xD,WAAnB,CAAhB;AACA,qBAAO/xD,CAAP;AACH,aAJD;;AAKA,oBAAI,CAAC+lD,SAAL,CAAeliD,MAAf,GAAwB,QAAI,CAACmuD,iBAAL,CAAuBC,SAAvB,EAAxB,GAA6D,QAAI,CAACD,iBAAL,CAAuBE,UAAvB,EAA7D;AACH,WARmC,CAApC;AASH;AAED;;;;;;4CAG2B;AACvB,cAAI,KAAKh8B,WAAT,EAAsB;AAClB,iBAAK27B,UAAL,GAAkB,KAAK37B,WAAL,CAAiBx4B,IAAnC;AACH;AACJ;AAED;;;;;;;iCAIgBsxD,S,EAAe;AAC3B,eAAK94B,WAAL,GAAmB84B,SAAnB;;AACA,cAAI,KAAKI,SAAT,EAAoB;AAChB,iBAAKA,SAAL,CAAeJ,SAAf;AACH;;AACD,eAAKqE,iBAAL;AACH;AAED;;;;;;;mCAIkBxuD,K,EAAa;AAC3B,eAAKqxB,WAAL,GAAmBrxB,KAAnB;AACA,eAAKwuD,iBAAL;AACH;;;yCAEuB91B,Q,EAAmB;AACvC,eAAKA,QAAL,GAAgBA,QAAhB;AACH;AAED;;;;;;;yCAIwB5/B,E,EAAqB;AACzC,eAAKyxD,SAAL,GAAiBzxD,EAAjB;AACH;AAED;;;;;;;0CAIyBA,E,EAAqB;AAC1C,eAAK0xD,QAAL,GAAgB1xD,EAAhB;AACH;;;;MA5GyC,OAAAS,a;;AAZ9C;;;uBAYag1D,wB,EAAwB,qC;AAAA,K;;;YAAxBA,wB;AAAwB,0C;AAAA;AAAA;yBAsBtB,eAAAJ,sB,EAAwB,I,EAAO,eAAAA,sB;;;;;;;;;;;;;uCA9B/B,CACP;AACIhc,eAAO,EAAE,QAAAsY,iBADb;AAEIC,mBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,iBAAM4D,wBAAN;AAAA,SAAX,CAFjB;AAGI3D,aAAK,EAAE;AAHX,OADO,C,GAMV,6B;AAAA,e;AAAA,a;AAAA,ihB;AAAA;AAAA;AC7CL;AACI;AACI;AAAA;AAGI;AAAA;AAAA,aAAwB,eAAxB,EAAwB;AAAA,mBACP,IAAAmC,OAAA,aADO;AACa,WADrC,EAAwB,MAAxB,EAAwB;AAAA,mBAMhB,IAAAyB,iBAAA,EANgB;AAMG,WAN3B;AAHJ;AAYA;AACI;AACJ;AACA;AAGJ;AACA;AAA0C;AAAA,mBAAkB,IAAA9wD,QAAA,qBAAlB;AAA+C,WAA/C;AACtC;AAIJ;AACJ;;;;;;AAtBY;AAAA,mDAAwB,UAAxB,EAAwB,YAAxB,EAAwB,iBAAxB,EAAwB,GAAxB;AAUU;AAAA;AAEgB;AAAA;AAKlB;AAAA;;;;;;;;;2BDyBP6wD,wB,EAAwB;cAZpC,OAAA3N,SAYoC;eAZ1B;AACPlnD,kBAAQ,EAAE,qBADH;AAEPmnD,qBAAW,EAAE,oCAFN;AAGPC,mBAAS,EAAE,CAAC,oCAAD,CAHJ;AAIPvD,mBAAS,EAAE,CACP;AACIpL,mBAAO,EAAE,QAAAsY,iBADb;AAEIC,uBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,qBAAM4D,wBAAN;AAAA,aAAX,CAFjB;AAGI3D,iBAAK,EAAE;AAHX,WADO;AAJJ,S;AAY0B,Q;;;;;;gBAEhC,OAAAxuD;;;gBAEA,OAAAA;;;gBAkBA,OAAAioD,S;iBAAU,eAAA8J,sB,EAAwB;AAACG,gBAAI,EAAE,eAAAH;AAAP,W;;;;;;;;;;;;;;;;;;;;;;;;AErEvC;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAOaM,iB;;;;;AAIT,iCAAoB3Q,OAApB,EAAqC;AAAA;;AAAA;;AACjC;AADgB,iBAAAA,OAAA,GAAAA,OAAA;AAAiB;AAEpC;;;;mCAEc;AAAA;;AACX,eAAKriD,OAAL,CAAa,eAAb,EAA8B;AAAA,mBAAM,QAAI,CAACizD,WAAL,CAAiBrmD,QAAQ,CAACuhB,KAA1B,CAAN;AAAA,WAA9B,EAAsE,IAAtE;;AACA,eAAKk0B,OAAL,CAAajlC,MAAb,CAAoB9d,SAApB,CAA8B,UAACyP,KAAD,EAA0B;AACpD;AACA,gBAAIA,KAAK,YAAY,SAAAmkD,aAArB,EAAoC;AAChC,sBAAI,CAAClzD,OAAL,CAAa,eAAb,EAA8B;AAAA,uBAAM,QAAI,CAACizD,WAAL,CAAiBrmD,QAAQ,CAACuhB,KAA1B,CAAN;AAAA,eAA9B;AACH;AACJ,WALD;AAMH;;;oCAEkBzT,Q,EAAU;AACzBA,kBAAQ,GAAGA,QAAQ,CAACsrB,MAAT,CAAgB,CAAhB,EAAmBtrB,QAAQ,CAACjW,OAAT,CAAiB,IAAjB,CAAnB,CAAX;AACA,eAAK0uD,YAAL,GAAoBz4C,QAApB;AACH;;;;MArBkC,OAAA5c,a;;AALvC;;;uBAKak1D,iB,EAAiB,+B;AAAA,K;;;YAAjBA,iB;AAAiB,+B;AAAA,+C;AAAA,c;AAAA,a;AAAA,0F;AAAA;AAAA;ACV9B;AACI;AACI;AAAA;AAAgC;AAChC;AACI;AACJ;AACJ;AACJ;;;;AAPG;AAImB;AAAA;;;;;;;;;2BDMTA,iB,EAAiB;cAL7B,OAAA7N,SAK6B;eALnB;AACPlnD,kBAAQ,EAAE,UADH;AAEPmnD,qBAAW,EAAE,2BAFN;AAGPC,mBAAS,EAAE,CAAC,2BAAD;AAHJ,S;AAKmB,Q;;;;;;;;;;;;;;;;;;;;;;;;;;AEV9B;AAAA;AAAA;;AAKA;AAAA;AAAA;;;;;;;;;;;;;;;;ACJI;AAAoD;AAAkB;;;;;AAAvC;AAAqB;AAAA;;;;;;AACpD;;;;;;AAAiC;;;;;;AAFrC;AACI;AACA;AACJ;;;;;AAFO;AAAA;AACE;AAAA;;;;QDUI+N,a;;;;;;;;;;;;MAAsB,OAAAt1D,a;;AALnC;;;6CAKas1D,a;AAAa,K;;;YAAbA,a;AAAa,+B;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,c;AAAA,a;AAAA,6H;AAAA;AAAA;ACZ1B;;;;AAAsB;;;;;;;8DDYTA,a;;;;2BAAAA,a,EAAa;cALzB,OAAAjO,SAKyB;eALf;AACPlnD,kBAAQ,EAAE,UADH;AAEPmnD,qBAAW,EAAE,uBAFN;AAGPC,mBAAS,EAAE,CAAC,uBAAD;AAHJ,S;AAKe,Q;;gBACrB,OAAA1kD;;;;;;;;;;;;;;;;;;;;;;;;AEbL;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AASA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;AAEA,QAAMqoD,YAAY,GAAG,CACjB,gBAAAiF,oBADiB,EAEjB,iBAAAmF,aAFiB,EAGjB,gBAAAhF,gBAHiB,EAIjB,gBAAAgB,kBAJiB,EAKjB,gBAAAiB,sBALiB,EAMjB,gBAAAK,kBANiB,EAOjB,gBAAAoC,wBAPiB,EAQjB,gBAAAzB,sBARiB,EASjB,qBAAA2B,iBATiB,EAUjB,wBAAApH,mBAViB,EAWjB,wBAAAyH,mBAXiB,EAYjB,sBAAAC,kBAZiB,EAajB,wBAAAC,mBAbiB,EAcjB,iBAAAxH,yBAdiB,EAejB,kCAAAa,4BAfiB,EAgBjB,2BAAAQ,qBAhBiB,EAiBjB,wBAAAS,mBAjBiB,CAArB;AAoBA,QAAM2F,gBAAgB,GAAU,CAC5B,SAAAC,eAD4B,EAE5B,YAAAC,iBAF4B,EAG5B,SAAAC,eAH4B,EAI5B,aAAAC,kBAJ4B,EAK5B,QAAAC,cAL4B,EAM5B,mBAAAC,wBAN4B,EAO5B,eAAAC,oBAP4B,EAQ5B,eAAAC,qBAR4B,EAS5B,SAAAC,eAT4B,EAU5B,QAAAC,cAV4B,EAW5B,OAAAC,eAX4B,EAY5B,OAAAC,aAZ4B,EAa5B,WAAAC,iBAb4B,EAc5B,UAAAC,gBAd4B,EAe5B,QAAAC,cAf4B,EAgB5B,OAAAC,aAhB4B,EAiB5B,eAAAC,oBAjB4B,CAAhC;;QAwCapL,c;;;;AApBb;;YAoBaA;;;;yBAAAA,c;AAAc,O;AAAA,iBAlBnB,SAAA/sD,YAkBmB,EAjBnB,YAAAo4D,gBAiBmB,EAhBnB,QAAApL,WAgBmB,EAfnB,QAAAC,mBAemB,SAdhBiK,gBAcgB,GAbnB,OAAAt1D,UAamB,EAZnB,KAAAsrD,QAYmB,IANnB,YAAAkL,gBAMmB,EAvCvB,SAAAjB,eAuCuB,EAtCvB,YAAAC,iBAsCuB,EArCvB,SAAAC,eAqCuB,EApCvB,aAAAC,kBAoCuB,EAnCvB,QAAAC,cAmCuB,EAlCvB,mBAAAC,wBAkCuB,EAjCvB,eAAAC,oBAiCuB,EAhCvB,eAAAC,qBAgCuB,EA/BvB,SAAAC,eA+BuB,EA9BvB,QAAAC,cA8BuB,EA7BvB,OAAAC,eA6BuB,EA5BvB,OAAAC,aA4BuB,EA3BvB,WAAAC,iBA2BuB,EA1BvB,UAAAC,gBA0BuB,EAzBvB,QAAAC,cAyBuB,EAxBvB,OAAAC,aAwBuB,EAvBvB,eAAAC,oBAuBuB,EAHnB,OAAAv2D,UAGmB;;;;+EAAdmrD,c,EAAc;AAAA,uBA3DvB,gBAAA4E,oBA2DuB,EA1DvB,iBAAAmF,aA0DuB,EAzDvB,gBAAAhF,gBAyDuB,EAxDvB,gBAAAgB,kBAwDuB,EAvDvB,gBAAAiB,sBAuDuB,EAtDvB,gBAAAK,kBAsDuB,EArDvB,gBAAAoC,wBAqDuB,EApDvB,gBAAAzB,sBAoDuB,EAnDvB,qBAAA2B,iBAmDuB,EAlDvB,wBAAApH,mBAkDuB,EAjDvB,wBAAAyH,mBAiDuB,EAhDvB,sBAAAC,kBAgDuB,EA/CvB,wBAAAC,mBA+CuB,EA9CvB,iBAAAxH,yBA8CuB,EA7CvB,kCAAAa,4BA6CuB,EA5CvB,2BAAAQ,qBA4CuB,EA3CvB,wBAAAS,mBA2CuB;AA3CJ,kBAyBf,SAAAvxD,YAzBe,EA0Bf,YAAAo4D,gBA1Be,EA2Bf,QAAApL,WA3Be,EA4Bf,QAAAC,mBA5Be,EAInB,SAAAkK,eAJmB,EAKnB,YAAAC,iBALmB,EAMnB,SAAAC,eANmB,EAOnB,aAAAC,kBAPmB,EAQnB,QAAAC,cARmB,EASnB,mBAAAC,wBATmB,EAUnB,eAAAC,oBAVmB,EAWnB,eAAAC,qBAXmB,EAYnB,SAAAC,eAZmB,EAanB,QAAAC,cAbmB,EAcnB,OAAAC,eAdmB,EAenB,OAAAC,aAfmB,EAgBnB,WAAAC,iBAhBmB,EAiBnB,UAAAC,gBAjBmB,EAkBnB,QAAAC,cAlBmB,EAmBnB,OAAAC,aAnBmB,EAoBnB,eAAAC,oBApBmB,EA8Bf,OAAAv2D,UA9Be,EA+Bf,KAAAsrD,QA/Be,CA2CI;AAZX,kBAMR,YAAAkL,gBANQ,EA/CZ,gBAAAzG,oBA+CY,EA9CZ,iBAAAmF,aA8CY,EA7CZ,gBAAAhF,gBA6CY,EA5CZ,gBAAAgB,kBA4CY,EA3CZ,gBAAAiB,sBA2CY,EA1CZ,gBAAAK,kBA0CY,EAzCZ,gBAAAoC,wBAyCY,EAxCZ,gBAAAzB,sBAwCY,EAvCZ,qBAAA2B,iBAuCY,EAtCZ,wBAAApH,mBAsCY,EArCZ,wBAAAyH,mBAqCY,EApCZ,sBAAAC,kBAoCY,EAnCZ,wBAAAC,mBAmCY,EAlCZ,iBAAAxH,yBAkCY,EAjCZ,kCAAAa,4BAiCY,EAhCZ,2BAAAQ,qBAgCY,EA/BZ,wBAAAS,mBA+BY,EA3BZ,SAAA4F,eA2BY,EA1BZ,YAAAC,iBA0BY,EAzBZ,SAAAC,eAyBY,EAxBZ,aAAAC,kBAwBY,EAvBZ,QAAAC,cAuBY,EAtBZ,mBAAAC,wBAsBY,EArBZ,eAAAC,oBAqBY,EApBZ,eAAAC,qBAoBY,EAnBZ,SAAAC,eAmBY,EAlBZ,QAAAC,cAkBY,EAjBZ,OAAAC,eAiBY,EAhBZ,OAAAC,aAgBY,EAfZ,WAAAC,iBAeY,EAdZ,UAAAC,gBAcY,EAbZ,QAAAC,cAaY,EAZZ,OAAAC,aAYY,EAXZ,eAAAC,oBAWY,EASR,OAAAv2D,UATQ;AAYW,O;AAHT,K;;;;;2BAGLmrD,c,EAAc;cApB1B,OAAA9sD,QAoB0B;eApBjB;AACNC,iBAAO,GACH,SAAAF,YADG,EAEH,YAAAo4D,gBAFG,EAGH,QAAApL,WAHG,EAIH,QAAAC,mBAJG,SAKAiK,gBALA,GAMH,OAAAt1D,UANG,EAOH,KAAAsrD,QAPG,EADD;AAUNprD,sBAAY,YACL4qD,YADK,CAVN;AAaN3qD,iBAAO,GACH,YAAAq2D,gBADG,SAEA1L,YAFA,EAGAwK,gBAHA,GAIH,OAAAt1D,UAJG;AAbD,S;AAoBiB,Q;;;;;;;;;;;;;;;;;;;;;;AC1G3B;AAAA;AAAA;;AAOA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;ACPA;AAMI;AAAA;AAAA;AAAA;AAAS,iBAAAoU,MAAA;AAAsB,iBAAF,cAAS,KAAP;AAAY,SAA3C;AAEA;AACJ;;;;;;;AAJI;AAHA;AAMU;AAAA;;;;;;;;;;;QDWD+gD,mB;;;;;AALb;AAAA;;AAAA;;;AAMI;;AACgB,iBAAArhD,OAAA,GAA0B,EAA1B;AAChB;;AACiB,iBAAAM,MAAA,GAAS,IAAI,OAAAmwC,YAAJ,EAAT;AATrB;AAkBC;;;;gCALkB;AAAA;;AACX,eAAKziD,OAAL,CAAa,OAAb,EAAsB,YAAM;AACxB,oBAAI,CAAC40B,IAAL,GAAY,KAAZ;AACH,WAFD;AAGH;;;;MAZoC,OAAA92B,a;;AALzC;;;mDAKau1D,mB;AAAmB,K;;;YAAnBA,mB;AAAmB,oC;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,c;AAAA,a;AAAA,qO;AAAA;AAAA;ACnBhC;AAUA;AAAwD;AAAA;AAAA,aAAsB,OAAtB,EAAsB;AAAA,8BAAwB,IAAAhsB,KAAA,EAAxB,GAAkC,EAAlC;AAAoC,WAA1D,EAA0D,KAA1D,EAA0D,kBAA1D;AACpD;AACJ;;;;AARI;AAMgC;AAAA;AACtB;AAAA;;;;;;oEDQDgsB,mB;;;;2BAAAA,mB,EAAmB;cAL/B,OAAAlO,SAK+B;eALrB;AACPlnD,kBAAQ,EAAE,eADH;AAEPmnD,qBAAW,EAAE,8BAFN;AAGPC,mBAAS,EAAE,CAAC,8BAAD;AAHJ,S;AAKqB,Q;;gBAE3B,OAAA1kD;;;gBAEA,OAAA2kD;;;;;;;;;;;;;;;;;;;;;;;;AEvBL;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;ACYI;AACI;AACJ;;;;;;;;;;;;QDPSgO,kB;;;;;AALb;AAAA;;AAAA;;;AAcI;;AACiB,iBAAAqB,WAAA,GAAc,IAAI,OAAAlS,YAAJ,EAAd;AAfrB;AAgCC;;;;oCAbsB1jD,O,EAAsB;AACrC;AACA,cAAIA,OAAO,CAAC61D,SAAR,IAAqB,KAAKA,SAA9B,EAAyC;AACrC,iBAAKC,UAAL;AACH;AACJ;;;qCAEmB;AAChB;AACA,cAAI,KAAKC,WAAL,IAAoB,KAAKA,WAAL,CAAiB51D,aAAzC,EAAwD;AACpD,iBAAK41D,WAAL,CAAiB51D,aAAjB,CAA+B8xD,KAA/B;AACH;AACJ;;;;MA1BmC,OAAAlzD,a;;AALxC;;;kDAKaw1D,kB;AAAkB,K;;;YAAlBA,kB;AAAkB,kC;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;ACR/B;AAAoC;AAAA,mBAAS,IAAAuB,UAAA,EAAT;AAAqB,WAArB,EAAsB,OAAtB,EAAsB;AAAA,mBAAU,IAAAA,UAAA,EAAV;AAAsB,WAA5C;AAChC;AACI;AACJ;AACA;AACI;AAEI;AAAA;AAAA,aAAmB,eAAnB,EAAmB;AAAA,mBACF,IAAAF,WAAA,aADE;AACsB,WADzC;AAFJ;AAOJ;AACA;AAGJ;;;;AAdkB;AAAA;AAKN;AAAA,8CAAmB,aAAnB,EAAmB,8BAAnB;AAMY;AAAA;;;;;;mEDLXrB,kB;;;;2BAAAA,kB,EAAkB;cAL9B,OAAAnO,SAK8B;eALpB;AACPlnD,kBAAQ,EAAE,aADH;AAEPmnD,qBAAW,EAAE,4BAFN;AAGPC,mBAAS,EAAE,CAAC,4BAAD;AAHJ,S;AAKoB,Q;;gBAE1B,OAAA1kD,K;iBAAM,O;;;gBAEN,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAA2kD;;;gBAEA,OAAAsD,S;iBAAU,O,EAAS;AAAE,sBAAQ;AAAV,W;;;;;;;;;;;;;;;;;;;;;;;;AEpBxB;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;ACAI;AAA4D;AAAc;;;;;AAAd;AAAA;;;;;;AADhE;AACI;AACJ;;;;;;;;AAFsC;AACZ;AAAA,kDAAqC,UAArC,EAAqC,GAArC;;;;;;AAGtB;;;;;;AAAK;;;;QDII2K,mB;;;;;;;4BAIU;AACf,cAAI,CAAC,KAAKt5C,IAAV,EAAgB;AACZ,mBAAO,IAAP;AACH;;AACD,cAAMhR,KAAK,GAAG,KAAKgR,IAAL,CAAU7c,IAAV,CAAeiG,KAAf,CAAqB,GAArB,CAAd;AACA,iBAAO4F,KAAK,CAAC1F,MAAN,GAAe,CAAf,aACE0F,KAAK,CAAC,CAAD,CAAL,CAAS,CAAT,CADF,SACgBA,KAAK,CAACA,KAAK,CAAC1F,MAAN,GAAe,CAAhB,CAAL,CAAwB,CAAxB,CADhB,IAED,KAAK0W,IAAL,CAAU7c,IAAV,CAAe+J,KAAf,CAAqB,CAArB,EAAwB,CAAxB,CAFN;AAGH;;;;;;AAjBL;;;uBAKaosD,mB;AAAmB,K;;;YAAnBA,mB;AAAmB,oC;AAAA;AAAA;AAAA,O;AAAA,c;AAAA,a;AAAA,uK;AAAA;AAAA;ACRhC;AAGA;;;;AAHyB;;;;;;;;;;2BDQZA,mB,EAAmB;cAL/B,OAAApO,SAK+B;eALrB;AACPlnD,kBAAQ,EAAE,eADH;AAEPmnD,qBAAW,EAAE,8BAFN;AAGPC,mBAAS,EAAE,CAAC,8BAAD;AAHJ,S;AAKqB,Q;;gBAE3B,OAAA1kD;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEVL;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;ACJA;AAAA;AAAA;;AAOA;AAAA;AAAA;;AAIA;AAAA;AAAA;AA0CA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDa,YAAA8Q,mBAAA,GAAsB,UAC/BsjD,YAD+B,EAE/BC,QAF+B,EAGmB;AAClD,UAAMC,WAAW,GAAG,SAAdA,WAAc,CAACC,OAAD;AAAA,0BAAyBH,YAAzB,eAA0CG,OAA1C;AAAA,OAApB,CADkD,CAElD;;;AACA,UAAMzhD,OAAO,GAAG,QAAAnC,YAAA,CAAa2jD,WAAW,CAAC,SAAD,CAAxB,EAAqC,QAAA1jD,KAAA,EAArC,CAAhB;AACA,UAAMkF,OAAO,GAAG,QAAAnF,YAAA,CAAa2jD,WAAW,CAAC,SAAD,CAAxB,EAAqC,QAAA1jD,KAAA,EAArC,CAAhB;AACA,UAAMuO,KAAK,GAAG,QAAAxO,YAAA,CAAa2jD,WAAW,CAAC,OAAD,CAAxB,EAAmC,QAAA1jD,KAAA,EAAnC,CAAd;AACA,UAAM4jD,KAAK,GAAG,QAAA7jD,YAAA,CAAa2jD,WAAW,CAAC,OAAD,CAAxB,CAAd;AACA,UAAM9/C,GAAG,GAAiB,CACtB,QAAAD,EAAA,CAAGzB,OAAH,EAAY,UAACrX,KAAD,EAAkDkW,MAAlD;AAAA,eACP,MAAD,OAAC,CAAD,kBACOlW,KADP,CAAC,sBAEI44D,QAFJ,EAEe,gBAAAI,WAAA,CAAsBh5D,KAAK,CAAC44D,QAAD,CAA3B,EAAuC16C,OAAvC,EAFf,EADO;AAAA,OAAZ,CADsB,EAMtB,QAAApF,EAAA,CAAGuB,OAAH,EAAY,UAACra,KAAD,EAAkDkW,MAAlD;AAAA,eAAgG,MAAD,OAAC,CAAD,kBACpGlW,KADoG,CAAC,sBAEvG44D,QAFuG,EAE5F,gBAAAtgD,YAAA,CAAa+B,OAAb,CAAqBnE,MAAM,CAACmD,OAA5B,CAF4F,EAAhG;AAAA,OAAZ,CANsB,EAUtB;AACA,cAAAP,EAAA,CAAG4K,KAAH,EAAU,UAAC1jB,KAAD,EAAakW,MAAb;AAAA,eAAwD,MAAD,OAAC,CAAD,kBAC1DlW,KAD0D,CAAC,sBAE7D44D,QAF6D,EAElD,gBAAAtgD,YAAA,CAAaoL,KAAb,CAA6BxN,MAAM,CAACmD,OAApC,CAFkD,EAAxD;AAAA,OAAV,CAXsB,EAetB,QAAAP,EAAA,CAAGigD,KAAH,EAAU;AAAA,eAAO,MAAD,OAAC,CAAD,kBACT,QAAI,CAAC/4D,KADI,CAAC,sBAEZ44D,QAFY,EAED,gBAAAtgD,YAAA,CAAaC,KAAb,EAFC,EAAP;AAAA,OAAV,CAfsB,CAA1B;;AAoBA,UAAM0gD,UAAU,GAAG,SAAbA,UAAa,CAACj5D,KAAD,EAAmB;AAClC,YAAI,CAACA,KAAL,EAAY;AACR2K,iBAAO,CAACuuD,IAAR,CAAa,yCAAb,EAAwDN,QAAxD;AACH;;AACD,eAAO,gBAAAI,WAAA,CAAsBh5D,KAAK,SAAL,IAAAA,KAAK,WAAL,GAAK,MAAL,GAAAA,KAAK,CAAG44D,QAAH,CAA3B,CAAP;AACH,OALD;;AAMA,UAAMO,UAAU,GAAG,QAAAl/C,cAAA,CACfg/C,UADe,EAEf,oBAAAG,aAFe,CAAnB;AAIA,UAAMC,kBAAkB,GAAG,QAAAp/C,cAAA,CACvBg/C,UADuB,EAEvB,oBAAAK,qBAFuB,CAA3B;AAIA,UAAMC,QAAQ,GAAG,QAAAt/C,cAAA,CACbg/C,UADa,EAEb,oBAAAO,mBAFa,CAAjB;AAIA,UAAMC,UAAU,GAAG,QAAAx/C,cAAA,CACfg/C,UADe,EAEf,oBAAAS,eAFe,CAAnB;AAIA,aAAO;AACHriD,eAAO,EAAPA,OADG;AAEHgD,eAAO,EAAPA,OAFG;AAGHqJ,aAAK,EAALA,KAHG;AAIHq1C,aAAK,EAALA,KAJG;AAKHhgD,WAAG,EAAHA,GALG;AAMHmB,iBAAS,EAAE;AACPG,iBAAO,EAAE8+C,UADF;AAEPh/C,yBAAe,EAAEk/C,kBAFV;AAGP31C,eAAK,EAAE61C,QAHA;AAIPr7C,iBAAO,EAAEu7C,UAJF;AAKPlsC,eAAK,EAAE0rC;AALA;AANR,OAAP;AAcH,KAlEY;;;;;;;;;;;;;;;;;;;;;ACvGb;AAAA;AAAA;;AAUA;AAAA;AAAA;;AAKA;AAAA;AAAA;AAMA;;;;;;;;;;AAQa,YAAA1hD,mBAAA,GAAsB,UACjC3B,OADiC,EACf+jD,YADe,EAEjCC,MAFiC;AAAA,aAEmEhkD,OAAO,CAACG,IAAR,CACpG,UAAAC,MAAA,CAAO2jD,YAAY,CAACtiD,OAApB,CADoG,EAEpG,YAAAwiD,OAAA,CAAQ,UAAC3jD,MAAD;AAAA,eAAY0jD,MAAM,CAAC1jD,MAAD,CAAlB;AAAA,OAAR,CAFoG,EAGpG,YAAApL,GAAA,CAAI,UAACm8B,QAAD;AAAA,eAAwB0yB,YAAY,CAACt/C,OAAb,CAAqB;AAAEhB,iBAAO,EAAE4tB;AAAX,SAArB,CAAxB;AAAA,OAAJ,CAHoG,EAIpG,YAAAxjB,UAAA,CAAW,UAAAV,GAAG,EAAI;AAChB,eAAO,OAAAY,EAAA,CAAGg2C,YAAY,CAACj2C,KAAb,CAAmB;AAAErK,iBAAO,EAAE0J;AAAX,SAAnB,CAAH,CAAP;AACD,OAFD,CAJoG,CAFnE;AAAA,KAAtB;;;;;;;;;;;;;;;;;;;;AC7Bb;;AACA;;;;;QAIazK,Y;AAqCT,4BACWwhD,SADX,EAEYC,QAFZ,EAGYC,UAHZ,EAIYC,QAJZ,EAKWv2C,KALX,EAKwB;AAAA;;AAAA;;AAJb,aAAAo2C,SAAA,GAAAA,SAAA;AACC,aAAAC,QAAA,GAAAA,QAAA;AACA,aAAAC,UAAA,GAAAA,UAAA;AACA,aAAAC,QAAA,GAAAA,QAAA;AACD,aAAAv2C,KAAA,GAAAA,KAAA;AAjCX;;;;;AAIA,aAAA8K,MAAA,GAAS,UACLnU,OADK;AAAA,iBACkB,IAAI/B,YAAJ,CACvB,QAAI,CAACwhD,SADkB,EAEvB,QAAI,CAACC,QAFkB,EAGvB,CAAC,CAAC1/C,OAHqB,EAIvB,CAACA,OAAD,GAAWnT,SAAX,GAAuBmT,OAJA,CADlB;AAAA,SAAT;;AAQA,aAAA6D,OAAA,GAAU;AAAA,cAAC7D,OAAD,uEAAqB,QAAI,CAACA,OAA1B;AAAA,iBACN,IAAI/B,YAAJ,CACI,IADJ,EAEI,KAFJ,EAGI,CAAC,CAAC+B,OAAF,IAAa,QAAI,CAAC2/C,UAHtB,EAII,CAAC3/C,OAAD,GAAWnT,SAAX,GAAuBmT,OAJ3B,CADM;AAAA,SAAV;;AAyBA,aAAA6/C,OAAA,GAAU;AAAA,iBAAM,CAAC,QAAI,CAACC,SAAL,EAAD,IAAqB,CAAC,QAAI,CAACC,OAAL,EAA5B;AAAA,SAAV;;AAEA,aAAAC,SAAA,GAAY;AAAA,iBAAM,CAAC,QAAI,CAACH,OAAL,EAAD,IAAmB,CAAC,QAAI,CAACJ,SAA/B;AAAA,SAAZ;;AAEA,aAAAK,SAAA,GAAY;AAAA,iBAAM,QAAI,CAACH,UAAX;AAAA,SAAZ;;AAEA,aAAAI,OAAA,GAAU;AAAA,iBAAM,QAAI,CAACL,QAAX;AAAA,SAAV;;AAEA,aAAAO,UAAA,GAAa;AAAA,iBAAM,CAAC,QAAI,CAACH,SAAL,EAAD,IAAqB,CAAC,QAAI,CAACL,SAAjC;AAAA,SAAb;;AAEO,aAAApuD,QAAA,GAAW;AAAA,iBACd,mBAAY,QAAI,CAACouD,SAAjB,wBAAwC,QAAI,CAACE,UAA7C,gBAA6D,QAAI,CAACC,QAAlE,6BACU,QAAI,CAACF,QADf,cAC2B,QAAI,CAACr2C,KADhC,CADc;AAAA,SAAX;AAZN;;;;4BAfiB;AACd,iBAAO,KAAKu2C,QAAZ;AACH;;;4BAEyB;AACtB,iBAAO,KAAKA,QAAZ;AACH;;;;;;AAnCL;;AACW,iBAAA1hD,KAAA,GAAQ;AAAA,aAAS,IAAID,YAAJ,CAAoB,KAApB,EAA2B,KAA3B,EAAkC,KAAlC,EAAyCpR,SAAzC,CAAT;AAAA,KAAR;;AAEA,iBAAAmT,OAAA,GAAU,UAAIA,OAAJ;AAAA,aACb,IAAI/B,YAAJ,CAAiB,KAAjB,EAAwB,KAAxB,EAA+B,IAA/B,EAAqC+B,OAArC,CADa;AAAA,KAAV;;AAGA,iBAAAqJ,KAAA,GAAQ,UAAIA,KAAJ,EAAmBvJ,eAAnB;AAAA,aACX,IAAI7B,YAAJ,CAAoB,KAApB,EAA2B,IAA3B,EAAiC,KAAjC,EAAwC6B,eAAxC,EAAyDuJ,KAAzD,CADW;AAAA,KAAR;AAuDX;;;;;;AAIa,YAAAs1C,WAAA,GAAc,UAAgB96C,OAAhB,EAAkD;AACzE,UAAIA,OAAO,YAAY5F,YAAvB,EAAqC;AACjC,eAAO4F,OAAP;AACH,OAFD,MAEO;AACH,YAAI,CAACA,OAAL,EAAc;AACV,iBAAO5F,YAAY,CAACC,KAAb,EAAP;AACH,SAFD,MAEO;AACH,iBAAO,IAAID,YAAJ,CACH4F,OAAO,CAAC47C,SAAR,IAAqB,KADlB,EAEH57C,OAAO,CAAC67C,QAAR,IAAoB,KAFjB,EAGH77C,OAAO,CAAC87C,UAAR,IAAsB,KAHnB,EAIH97C,OAAO,CAAC+7C,QAJL,EAKH/7C,OAAO,CAACwF,KALL,CAAP;AAOH;AACJ;AACJ,KAhBY;;;;;;;;;;;;;;;;;;;;;ACtEb;AAAA;AAAA;;AAEa,YAAA01C,aAAA,GAAgB,UAAIp5D,KAAJ;AAAA,aAC3B,gBAAAg5D,WAAA,CAAeh5D,KAAf,EAAsBqa,OADK;AAAA,KAAhB;;AAEA,YAAAi/C,qBAAA,GAAwB,UAAIt5D,KAAJ;AAAA,aACnC,gBAAAg5D,WAAA,CAAeh5D,KAAf,EAAsBma,eADa;AAAA,KAAxB;;AAEA,YAAAu/C,eAAA,GAAkB,UAAI15D,KAAJ;AAAA,aAC7B,gBAAAg5D,WAAA,CAAeh5D,KAAf,EAAsB85D,SADO;AAAA,KAAlB;;AAEA,YAAAS,eAAA,GAAkB,UAAIv6D,KAAJ;AAAA,aAC7B,gBAAAg5D,WAAA,CAAeh5D,KAAf,EAAsBm6D,SAAtB,EAD6B;AAAA,KAAlB;;AAEA,YAAAX,mBAAA,GAAsB,UAACx5D,KAAD;AAAA,aACjC,gBAAAg5D,WAAA,CAAiBh5D,KAAjB,EAAwB0jB,KADS;AAAA,KAAtB;;AAEA,YAAA82C,aAAA,GAAgB,UAAIx6D,KAAJ;AAAA,aAC3B,gBAAAg5D,WAAA,CAAeh5D,KAAf,EAAsBo6D,OAAtB,EAD2B;AAAA,KAAhB;;AAEA,YAAAK,eAAA,GAAkB,UAAIz6D,KAAJ;AAAA,aAC7B,gBAAAg5D,WAAA,CAAeh5D,KAAf,EAAsBq6D,SAAtB,EAD6B;AAAA,KAAlB;;AAEA,YAAAK,aAAA,GAAgB,UAAI16D,KAAJ;AAAA,aAC3B,gBAAAg5D,WAAA,CAAeh5D,KAAf,EAAsBk6D,OAAtB,EAD2B;AAAA,KAAhB;;;;;;;;;;;;;;;;;;;;;AChBb;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAKa,YAAAS,mBAAA,GAAsB,YAAM;AACvC,UAAMC,UAAU,GAAG,IAAI,OAAA75C,OAAJ,EAAnB;AACA,aAAO;AACL65C,kBAAU,EAAVA,UADK;AAELhlD,eAAO,EAAE,IAAI,UAAAilD,OAAJ,CAAYD,UAAZ;AAFJ,OAAP;AAID,KANY;AAQb;;;;;AAGa,YAAAE,mBAAA,GAAsB,UACjC5kD,MADiC,EAEjC6kD,MAFiC,EAGjCH,UAHiC,EAIjC9yC,OAJiC,EAO3B;AACN,UAAIzE,MAAJ;AACA03C,YAAM,CACHhlD,IADH,CACQ,YAAA+H,IAAA,CAAK,CAAL,CADR,EAEG5a,SAFH,CAEa,UAAAkQ,IAAI,EAAI;AACjBiQ,cAAM,GAAGjQ,IAAT;AACD,OAJH,EAFM,CAON;;AACAwnD,gBAAU,CAACxnD,IAAX,CAAgB8C,MAAM,CAACmB,OAAP,CAAgByQ,OAAO,CAACzO,OAAR,IAAmB,EAAnC,CAAhB;AAEA2hD,YAAM,CAAC33C,MAAD,CAAN,CAAe43C,WAAf;AACAD,YAAM,CAAC33C,MAAD,CAAN,CAAe63C,aAAf,CAA6BhlD,MAAM,CAACmE,OAAP,CAAe;AAAEhB,eAAO,EAAEyO,OAAO,CAACtM;AAAnB,OAAf,CAA7B;AACD,KAnBY;AAqBb;;;;;AAGa,YAAA2/C,iBAAA,GAAoB,UAC/BjlD,MAD+B,EAE/B6kD,MAF+B,EAG/BH,UAH+B,EAI/B9yC,OAJ+B,EAOzB;AACN,UAAIzE,MAAJ;AACA03C,YAAM,CACHhlD,IADH,CACQ,YAAA+H,IAAA,CAAK,CAAL,CADR,EAEG5a,SAFH,CAEa,UAAAkQ,IAAI,EAAI;AACjBiQ,cAAM,GAAGjQ,IAAT;AACD,OAJH,EAFM,CAON;;AACAwnD,gBAAU,CAACxnD,IAAX,CAAgB8C,MAAM,CAACmB,OAAP,CAAgByQ,OAAO,CAACzO,OAAR,IAAmB,EAAnC,CAAhB;AAEA2hD,YAAM,CAAC33C,MAAD,CAAN,CAAe43C,WAAf;AACAD,YAAM,CAAC33C,MAAD,CAAN,CAAe63C,aAAf,CAA6BhlD,MAAM,CAACwN,KAAP,CAAa;AAAErK,eAAO,EAAEyO,OAAO,CAACpE;AAAnB,OAAb,CAA7B;AACD,KAnBY;;;;;;;;;;;;;;;;;;;;;;;;;AC/Cb;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACAA;AAAA;AAAA;;AAGa,YAAA03C,yBAAA,GAA4B,UAACp7D,KAAD;AAAA,aAAgDA,KAAK,CAACqwC,YAAtD;AAAA,KAA5B;;AAEA,YAAAj1B,iBAAA,GAAoB,UAAA/F,mBAAA,CAAqD,cAArD,EAAqE,MAArE,CAApB;;;;;;;;;;;;;;;;;;;;;;;;ACNb;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;QAIagmD,mB,GAEX,6BAAoBzlD,OAApB,EACoB0lD,mBADpB,EAC8D;AAAA;;AAAA;;AAD1C,WAAA1lD,OAAA,GAAAA,OAAA;AACA,WAAA0lD,mBAAA,GAAAA,mBAAA;AAIb,WAAAlgD,iBAAA,GAAoB,UAAA7D,mBAAA,CAAoB,KAAK3B,OAAzB,EAAkC,uBAAAwF,iBAAlC,EACzB;AAAA,eAAM,QAAI,CAACkgD,mBAAL,CAAyBhrB,gBAAzB,EAAN;AAAA,OADyB,CAApB;AAHN,K;;;uBAJU+qB,mB,EAAmB,uB,EAAA,mC;AAAA,K;;;aAAnBA,mB;AAAmB,eAAnBA,mBAAmB;;;AAO9B,wBADC,UAAAxjD,MAAA,EACD,E,yCAAA,G,6BAAA,E,mBAAA,E,MAAA;;AARF;;;;2BACawjD,mB,EAAmB;cAD/B,OAAAvjD;AAC+B,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACXhC;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;QAWayjD,kB;;;;AATb;;YASaA;;;;yBAAAA,kB;AAAkB,O;AAAA,gBARpB,CACP,SAAAr7D,YADO,EAEP,UAAA8X,aAAA,CAAcC,UAAd,CAAyB,CACvB,uBAAAojD,mBADuB,CAAzB,CAFO,EAKP,QAAAnjD,WAAA,CAAYD,UAAZ,CAAuB,cAAvB,EAAuC,uBAAAujD,mBAAvC,CALO,CAQoB;;;;+EAAlBD,kB,EAAkB;AAAA,kBAP3B,SAAAr7D,YAO2B,EAPf,uBAOe,EAPf,qBAOe;AAAA,O;AAPf,K;;;;;2BAOHq7D,kB,EAAkB;cAT9B,OAAAp7D,QAS8B;eATrB;AACRC,iBAAO,EAAE,CACP,SAAAF,YADO,EAEP,UAAA8X,aAAA,CAAcC,UAAd,CAAyB,CACvB,uBAAAojD,mBADuB,CAAzB,CAFO,EAKP,QAAAnjD,WAAA,CAAYD,UAAZ,CAAuB,cAAvB,EAAuC,uBAAAujD,mBAAvC,CALO;AADD,S;AASqB,Q;;;;;;;;;;;;;;;;;;;;;;AChB/B;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAMA,QAAMC,YAAY,GAAsB;AACtCjgD,UAAI,EAAE,UAAAlD,YAAA,CAAaC,KAAb;AADgC,KAAxC;AAIa,YAAAijD,mBAAA,GAAsB,QAAA3iD,aAAA,iBAAc4iD,YAAd,4BAC9B,uBAAArgD,iBAAA,CAAkBrC,GADY,GAAtB;;;;;;;;;;;;;;;;;;;;;;;;ACbb;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACJA;AAAA;AAAA;;AAOA;AAAA;AAAA;;AAMa,YAAAsU,iBAAA,GAAoB,UAACrtB,KAAD;AAAA,aAA2BA,KAAK,CAAC07D,KAAjC;AAAA,KAApB;;AAEA,YAAAC,kBAAA,GAAqB,QAAAzmD,YAAA,CAAa,+BAAb,EAA8C,QAAAC,KAAA,EAA9C,CAArB;AAEA,YAAAmY,mBAAA,GAAsB,kBAAAjY,mBAAA,CAA0D,OAA1D,EAAmE,OAAnE,CAAtB;AAEA,YAAAoY,sBAAA,GAAyB,kBAAApY,mBAAA,CAA0D,eAA1D,EAA2E,OAA3E,CAAzB;AAGA,YAAAsY,uBAAA,GAA0B,kBAAAtY,mBAAA,CAA0D,aAA1D,EAAyE,OAAzE,CAA1B;AAEA,YAAAwY,kBAAA,GAAqB,kBAAAxY,mBAAA,CAA0D,gBAA1D,EAA4E,MAA5E,CAArB;AAEA,YAAA0Y,eAAA,GAAkB,kBAAA1Y,mBAAA,CAA0D,aAA1D,EAAyE,MAAzE,CAAlB;AAEA,YAAAumD,wBAAA,GAA2B,QAAA3hD,cAAA,CAAe,QAAAoT,iBAAf,EACpC,QAAAC,mBAAA,CAAoBpT,SAApB,CAA8BC,eADM,CAA3B;AAGA,YAAA8T,mBAAA,GAAsB,kBAAA5Y,mBAAA,CAA0D,sBAA1D,EAAkF,MAAlF,CAAtB;;;;;;;;;;;;;;;;;;;;;;;;AC/Bb;AAAA;AAAA;;AACA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AASA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;;;;;;;;;;;;;QAOawmD,Y,GACT,sBAAoBjmD,OAApB,EACoBkmD,YADpB,EACiD;AAAA;;AAAA;;AAD7B,WAAAlmD,OAAA,GAAAA,OAAA;AACA,WAAAkmD,YAAA,GAAAA,YAAA;AAIb,WAAAC,mCAAA,GAAsC,KAAKnmD,OAAL,CAAaG,IAAb,CACzC,UAAAC,MAAA,CAAO,gBAAA2lD,kBAAP,CADyC,EAEzC,YAAA1lD,QAAA,CAAS,UAACC,MAAD,EAA6C;AAClD,eAAO,CACH,gBAAAoX,mBAAA,CAAoBjW,OAApB,CAA4B,MAAD,OAAC,CAAD,kBACpBnB,MADoB,CAAC,EACf;AACTtQ,gBAAM,EAAEsQ,MAAM,CAACtQ;AADN,SADe,CAA5B,CADG,EAKH;AACA;AACA;AACA;AACA,wBAAA+nB,uBAAA,CAAwBtW,OAAxB,CAAgC,MAAD,OAAC,CAAD,kBACxBnB,MADwB,CAAC,EACnB;AACTtQ,gBAAM,EAAE,cAAAo2D,sBAAA,CAAuB9lD,MAAM,CAACtQ,MAA9B;AADC,SADmB,CAAhC,CATG,EAaH,gBAAAioB,kBAAA,CAAmBxW,OAAnB,CAA2B,MAAD,OAAC,CAAD,kBACnBnB,MADmB,CAAC,EACd;AACTtQ,gBAAM,EAAE,cAAAq2D,eAAA,CAAgB/lD,MAAM,CAACtQ,MAAvB;AADC,SADc,CAA3B,CAbG,EAiBH,gBAAAqoB,mBAAA,CAAoB5W,OAApB,CAA4B,MAAD,OAAC,CAAD,kBACpBnB,MADoB,CAAC,EACf;AACTtQ,gBAAM,EAAEsQ,MAAM,CAACtQ,MADN;AAETs2D,uBAAa,EAAE;AAFN,SADe,CAA5B,CAjBG,CAAP;AAuBH,OAxBD,CAFyC,CAAtC;AA8BA,WAAAC,yBAAA,GAA4B,UAAA5kD,mBAAA,CAAoB,KAAK3B,OAAzB,EAAkC,gBAAA0X,mBAAlC,EAC/B,UAACpX,MAAD;AAAA,eAAY,QAAI,CAAC4lD,YAAL,CAAkB1oC,SAAlB,CAA4B,cAAAgpC,0CAAA,CAA2ClmD,MAA3C,CAA5B,EAAgF,OAAhF,CAAZ;AAAA,OAD+B,CAA5B;AAIA,WAAAmmD,4BAAA,GAA+B,UAAA9kD,mBAAA,CAAoB,KAAK3B,OAAzB,EAAkC,gBAAA6X,sBAAlC,EAClC,UAACvX,MAAD;AAAA,eAAY,QAAI,CAAC4lD,YAAL,CAAkB1oC,SAAlB,CAA4B,cAAAgpC,0CAAA,CAA2ClmD,MAA3C,CAA5B,EAAgF,gBAAhF,EAAkG,KAAlG,CAAZ;AAAA,OADkC,CAA/B;AAIA,WAAAomD,6BAAA,GAAgC,UAAA/kD,mBAAA,CAAoB,KAAK3B,OAAzB,EAAkC,gBAAA+X,uBAAlC,EACnC,UAACzX,MAAD;AAAA,eACI,QAAI,CAAC4lD,YAAL,CAAkB1oC,SAAlB,CAA4B,cAAAgpC,0CAAA,CAA2ClmD,MAA3C,CAA5B,EAAgF,cAAhF,CADJ;AAAA,OADmC,CAAhC;AAKA,WAAAqmD,wBAAA,GAA2B,UAAAhlD,mBAAA,CAAoB,KAAK3B,OAAzB,EAAkC,gBAAAiY,kBAAlC,EAC9B,UAAC3X,MAAD;AAAA,eACI,QAAI,CAAC4lD,YAAL,CAAkB1oC,SAAlB,CAA4B,cAAAgpC,0CAAA,CAA2ClmD,MAA3C,CAA5B,EAAgF,SAAhF,CADJ;AAAA,OAD8B,CAA3B;AAKA,WAAAsmD,yBAAA,GAA4B,UAAAjlD,mBAAA,CAAoB,KAAK3B,OAAzB,EAAkC,gBAAAqY,mBAAlC,EAC/B,UAAC/X,MAAD;AAAA,eACI,QAAI,CAAC4lD,YAAL,CAAkB1oC,SAAlB,CAA4B,cAAAgpC,0CAAA,CAA2ClmD,MAA3C,CAA5B,EAAgF,UAAhF,CADJ;AAAA,OAD+B,CAA5B;AAKA,WAAAumD,yBAAA,GAA4B,UAAAllD,mBAAA,CAAoB,KAAK3B,OAAzB,EAAkC,gBAAAmY,eAAlC,EAC/B,UAAC7X,MAAD;AAAA,eACI,QAAI,CAAC4lD,YAAL,CAAkB1oC,SAAlB,CAA4B,cAAAspC,8CAAA,CAA+CxmD,MAA/C,CAA5B,EAAoF,MAApF,EAA4F,KAA5F,CADJ;AAAA,OAD+B,CAA5B;AAxDN,K;;;uBAHQ2lD,Y,EAAY,uB,EAAA,6B;AAAA,K;;;aAAZA,Y;AAAY,eAAZA,YAAY;;;AAMrB,wBADC,UAAAhkD,MAAA,EACD,E,yCAAA,G,sBAAA,E,qCAAA,E,MAAA;;AA8BA,wBADC,UAAAA,MAAA,EACD,E,yCAAA,G,sBAAA,E,2BAAA,E,MAAA;;AAIA,wBADC,UAAAA,MAAA,EACD,E,yCAAA,G,sBAAA,E,8BAAA,E,MAAA;;AAIA,wBADC,UAAAA,MAAA,EACD,E,yCAAA,G,sBAAA,E,+BAAA,E,MAAA;;AAKA,wBADC,UAAAA,MAAA,EACD,E,yCAAA,G,sBAAA,E,0BAAA,E,MAAA;;AAKA,wBADC,UAAAA,MAAA,EACD,E,yCAAA,G,sBAAA,E,2BAAA,E,MAAA;;AAKA,wBADC,UAAAA,MAAA,EACD,E,yCAAA,G,sBAAA,E,2BAAA,E,MAAA;;AA5DJ;;;;2BACagkD,Y,EAAY;cADxB,OAAA/jD;AACwB,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChCzB;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;QASa6kD,W;;;;AAPb;;YAOaA;;;;yBAAAA,W;AAAW,O;AAAA,gBANX,CACL,SAAAz8D,YADK,EAEL,UAAA8X,aAAA,CAAcC,UAAd,CAAyB,CAAC,gBAAA4jD,YAAD,CAAzB,CAFK,EAGL,QAAA3jD,WAAA,CAAYD,UAAZ,CAAuB,OAAvB,EAAgC,gBAAA2kD,YAAhC,CAHK,CAMW;;;;+EAAXD,W,EAAW;AAAA,kBALhB,SAAAz8D,YAKgB,EALJ,uBAKI,EALJ,qBAKI;AAAA,O;AALJ,K;;;;;2BAKPy8D,W,EAAW;cAPvB,OAAAx8D,QAOuB;eAPd;AACNC,iBAAO,EAAE,CACL,SAAAF,YADK,EAEL,UAAA8X,aAAA,CAAcC,UAAd,CAAyB,CAAC,gBAAA4jD,YAAD,CAAzB,CAFK,EAGL,QAAA3jD,WAAA,CAAYD,UAAZ,CAAuB,OAAvB,EAAgC,gBAAA2kD,YAAhC,CAHK;AADH,S;AAOc,Q;;;;;;;;;;;;;;;;;;;;;;ACdxB;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAUa,YAAAC,iBAAA,GAA+B;AACxCxkD,WAAK,EAAE,UAAAC,YAAA,CAAaC,KAAb,EADiC;AAExC0rC,WAAK,EAAE,UAAA3rC,YAAA,CAAaC,KAAb,EAFiC;AAGxCnF,UAAI,EAAE,UAAAkF,YAAA,CAAaC,KAAb,EAHkC;AAIxCukD,UAAI,EAAE,UAAAxkD,YAAA,CAAaC,KAAb,EAJkC;AAKxCpM,UAAI,EAAE,UAAAmM,YAAA,CAAaC,KAAb;AALkC,KAA/B;AAQA,YAAAqkD,YAAA,GAAe,QAAA/jD,aAAA,iBAAc,QAAAgkD,iBAAd,4BACrB,gBAAAvvC,mBAAA,CAAoBvU,GADC,sBAErB,gBAAA0U,sBAAA,CAAuB1U,GAFF,sBAIrB,gBAAA4U,uBAAA,CAAwB5U,GAJH,sBAKrB,gBAAA8U,kBAAA,CAAmB9U,GALE,sBAMrB,gBAAAgV,eAAA,CAAgBhV,GANK,sBAOrB,gBAAAkV,mBAAA,CAAoBlV,GAPC,GAAf;;;;;;;;;;;;;;;;;;;;AC0BA,YAAAqjD,0CAAA,GAA6C,UAACt0C,OAAD;AAAA,aAA2D;AACjHliB,cAAM,EAAEkiB,OAAO,CAACliB,MADiG;AAEjHI,gBAAQ,EAAE8hB,OAAO,CAAC9hB,QAF+F;AAGjHylB,gBAAQ,EAAE3D,OAAO,CAAC2D,QAH+F;AAIjHyK,gBAAQ,EAAEpO,OAAO,CAAC0D,SAJ+F;AAKjHE,oBAAY,EAAE5D,OAAO,CAAC4D,YAL2F;AAMjHwwC,qBAAa,EAAEp0C,OAAO,CAACo0C,aAN0F;;AAOjH;AACAnyC,oBAAY,EAAEjC,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAEiC,YAR0F;AASjH4B,oBAAY,EAAE7D,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAE6D,YAT0F;AAUjHC,yBAAiB,EAAE9D,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAE8D,iBAVqF;AAWjHC,2BAAmB,EAAE/D,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAE+D,mBAXmF;AAYjHC,wBAAgB,EAAEhE,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAEgE,gBAZsF;AAajHC,wBAAgB,EAAEjE,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAEiE,gBAbsF;AAcjHC,yBAAiB,EAAElE,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAEkE,iBAdqF;AAejHE,uBAAe,EAAEpE,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAEoE,eAfuF;AAgBjH9C,gBAAQ,EAAEtB,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAEsB,QAhB8F;AAiBjH+C,cAAM,EAAErE,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAEqE;AAjBgG,OAA3D;AAAA,KAA7C;;AAoBA,YAAAuwC,8CAAA,GAAiD,UAAC50C,OAAD;AAAA,aAA2D;AACrHliB,cAAM,EAAEkiB,OAAO,CAACliB,MADqG;AAErHI,gBAAQ,EAAE8hB,OAAO,CAAC9hB,QAFmG;AAGrHylB,gBAAQ,EAAE3D,OAAO,CAAC2D,QAHmG;AAIrHsH,gBAAQ,EAAEjL,OAAO,CAAC0D,SAJmG;AAKrHE,oBAAY,EAAE5D,OAAO,CAAC4D;AAL+F,OAA3D;AAAA,KAAjD;;;;;;;;;;;;;;;;;;;;;AChEb;AAAA;AAAA;;AAEa,YAAAqxC,aAAA,GAAgB,UAAC93D,IAAD;AAAA,aAAkB,IAAI,UAAAkR,MAAJ,CAAW;AAAClR,YAAI,EAAJA;AAAD,OAAX,CAAlB;AAAA,KAAhB;AAEb;;;;;AAGa,YAAA+2D,sBAAA,GAAyB,UAACp2D,MAAD,EAAoB;AACtD,aAAOA,MAAM,CAACE,QAAP,CAAgB;AAAEJ,eAAO,EAAE;AAAX,OAAhB,CAAP;AACH,KAFY;AAIb;;;;;;AAIa,YAAAu2D,eAAA,GAAkB,UAACr2D,MAAD,EAAoB;AAC/C,UAAIo3D,OAAO,GAAGp3D,MAAM,CAACE,QAAP,CAAgB;AAAE4wB,YAAI,EAAE;AAAR,OAAhB,CAAd;;AACA,UAAIsmC,OAAO,CAACtkC,WAAR,IAAuB,CAA3B,EAA8B;AAC1BskC,eAAO,GAAGA,OAAO,CAACn3D,QAAR,CAAiB;AAAEkE,iBAAO,EAAE;AAAX,SAAjB,CAAV;AACH;;AACD,aAAOizD,OAAP;AACH,KANY;;AAQA,YAAAC,qBAAA,GAAwB,UAAChlC,IAAD,EAAqC;;;AAAA,aAAAA,IAAI,GAAI;AAC9E9vB,aAAK,EAAE8vB,IAAI,CAAC/gB,EADkE;AAE9EyP,oBAAY,EAAEsR,IAAI,CAACjE,UAF2D;AAG9E9iB,eAAO,YAAK+mB,IAAI,CAACjE,UAAV,eAAyB,MAAAiE,IAAI,CAAC3H,KAAL,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAEtvB,IAArC;AAHuE,OAAJ,GAIzEkG,SAJqE;AAI5D,KAJD;;;;;;;;;;;;;;;;;;;;;;;;;ACzBb;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACFA;AAAA;AAAA;;AAIA;AAAA;AAAA;AAGA;;;;;;AAIa,YAAAg2D,qBAAA,GAAwB,UAAIC,iBAAJ,EACIC,iBADJ;AAAA,aAEA,OAAApoC,aAAA,CAAc,CAC/CmoC,iBAAiB,CAACpnD,IAAlB,CAAuB,YAAAjL,GAAA,CAAI,UAAAG,CAAC;AAAA,eAAIA,CAAC,CAACovD,SAAF,EAAJ;AAAA,OAAL,CAAvB,CAD+C,EAE/C+C,iBAAiB,CAACrnD,IAAlB,CAAuB,YAAAjL,GAAA,CAAI,UAAA6G,CAAC;AAAA,eAAIA,CAAC,SAAD,IAAAA,CAAC,WAAD,GAAC,MAAD,GAAAA,CAAC,CAAExK,MAAP;AAAA,OAAL,CAAvB,CAF+C,CAAd,EAGlC4O,IAHkC,CAG7B,YAAAjL,GAAA,CAAI;AAAA;AAAA,YAAEgvD,SAAF;AAAA,YAAauD,eAAb;;AAAA,eAAkCvD,SAAS,GAAGuD,eAAH,GAAqBn2D,SAAhE;AAAA,OAAJ,CAH6B,CAFA;AAAA,KAAxB;;;;;;;;;;;;;;;;;;;;;ACXb;AAAA;AAAA;;AAIA;AAAA;AAAA;AAEA;;;;;AAGa,YAAAo2D,wBAAA,GAA2B;AAAA,aAAM,YAAAzT,oBAAA,CAAqB0T,SAArB,CAAN;AAAA,KAA3B;AAEb;;;;;AAGa,YAAAC,eAAA,GAAkB;AAAA,aAAS,YAAA3xD,MAAA,CAAU,UAAAe,CAAC;AAAA,eAAI,CAAC,CAACA,CAAN;AAAA,OAAX,CAAT;AAAA,KAAlB;;;;;;;;;;;;;;;;;;;;;ACdb;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;QAKa6wD,a;;;;AAHb;;YAGaA;;;;yBAAAA,a;AAAa,O;AAAA,gBAFf,CAAC,SAAAv9D,YAAD,CAEe;;;;+EAAbu9D,a,EAAa;AAAA,kBAFd,SAAAv9D,YAEc;AAAA,O;AAFF,K;;;;;2BAEXu9D,a,EAAa;cAHzB,OAAAt9D,QAGyB;eAHhB;AACRC,iBAAO,EAAE,CAAC,SAAAF,YAAD;AADD,S;AAGgB,Q;;;;;;;;;;;;;;;;;;;;;;;;;;ACN1B;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACdA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;ACSQ;AAAqD;AAAQ;;;;;AAAR;AAAA;;;;;;AAW7C;;;;;;AACA;AAAsC;AAAsC;;;;;AAAtC;AAAA;;;;;;;;AAT9C;AACI;AACI;AAAA;AAAA;AAAA;AAAA,oCAAyB,IAAzB,GAAgC,MAAH,QAAG,CAAH,OAAG,CAAhC;AAA6B,SAA7B,EAA8C,UAA9C,EAA8C;AAAA;AAAA;AAAA;AAAA,oCAClB,IADkB,GACX,MAAH,QAAG,CAAH,OAAG,CADW;AACd,SADhC;AAKA;AACA;AACA;AACJ;AACJ;;;;;AAPQ;AAAA,uDAAkC,QAAlC,EAAkC,cAAlC;AAGA;AAAA;AACiB;AAAA;AACE;AAAA;;;;QDqBtBw9D,sB;AAZb;AAAA;;AAaI;AACgB,aAAAC,KAAA,GAAQ,SAAR;AAKhB;;AACiB,aAAAt2D,KAAA,GAAQ,IAAI,OAAAg/C,YAAJ,EAAR;AACjB;;AACgB,aAAAuX,mBAAA,GAAgC,IAAhC;AAET,aAAA34D,IAAA,GAAe,UAAAyJ,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB+J,EAAnC,CAxBX,CA0BI;;AACA;;AACO,aAAAjG,MAAA,GAAS,CAAT;AACP;;AACO,aAAAk1D,UAAA,GAAa,CAAC,MAAd;AACP;;AACO,aAAAC,UAAA,GAAa,MAAb;AACP;;AACO,aAAAC,SAAA,GAA0B,EAA1B;AACP;;AACO,aAAAC,UAAA,GAAa,UAAAtvD,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB0B,UAApB,CAA+B,WAA/B,CAAb;AACP;;AACO,aAAA03D,YAAA,GAAe,EAAf;AAKP;;AACQ,aAAAC,UAAA,GAAa,KAAb;AACR;;AACQ,aAAAC,YAAA,GAAe,WAAf;AA+LX;;;;mCAvLkB;AACX,eAAKC,aAAL;AACA,eAAKC,qBAAL;AACH;;;oCAEkB17D,O,EAAsB;AACrC,cAAIA,OAAO,CAACmlB,OAAZ,EAAqB;AACjB,iBAAKw2C,aAAL;AACH;;AACD,cAAI37D,OAAO,CAAC47D,QAAZ,EAAsB;AAClB,iBAAKH,aAAL;AACH;AACJ;AAED;;;;gCACezwD,I,EAAkB;AAC7B,eAAK1I,IAAL,GAAY0I,IAAI,CAACxF,KAAjB;;AACA,cAAI,KAAKuqD,SAAT,EAAoB;AAChB,iBAAKA,SAAL,CAAe,KAAKztD,IAApB;AACH;;AACD,eAAKm5D,aAAL;AACH;AAED;;;;;;qCAGiB;AAEb,cAAI,CAAC,KAAKn5D,IAAV,EAAgB;AACZ;AACH;;AACD,cAAMmnB,GAAG,GAAG,UAAA1d,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB8J,YAApB,CAAiC,OAAjC,CAAZ;AACA,cAAMwxB,KAAK,GAAG,IAAI,UAAAhqB,MAAJ,CAAW;AAAClR,gBAAI,EAAE,KAAKA;AAAZ,WAAX,CAAd;AACA,cAAMA,IAAI,GAAGk7B,KAAK,CAACxxB,YAAN,CAAmB,OAAnB,CAAb;;AACA,cAAI1J,IAAI,CAAC4jB,KAAT,EAAgB;AACZ,gBAAM21C,UAAU,GAAGv5D,IAAI,CAACi5B,QAAL,CAAc9R,GAAd,EAAmB,QAAnB,EAA6B,QAA7B,CAAnB;;AACA,gBAAI,KAAKzjB,MAAL,KAAgB61D,UAApB,EAAgC;AAC5B,mBAAK71D,MAAL,GAAc61D,UAAd;AACA,mBAAKn3D,KAAL,CAAWsgD,IAAX,CAAgB,KAAKh/C,MAArB;AACH;;AACD,iBAAKy1D,aAAL;AACH;AACJ;AAED;;;;;;wCAGoB;AAChB,cAAI,KAAKt2C,OAAT,EAAkB;AACd;AACA,gBAAI,KAAKA,OAAL,CAAalT,IAAjB,EAAuB;AACnB,kBAAMurB,KAAK,GAAG,IAAI,UAAAhqB,MAAJ,CAAW;AAAClR,oBAAI,EAAE,KAAK6iB,OAAL,CAAalT;AAApB,eAAX,CAAd;AACA,mBAAKA,IAAL,GAAYurB,KAAK,CAACxxB,YAAN,CAAmB,KAAnB,CAAZ;AAAsC;AACtC,kBAAM8vD,KAAK,GAAG,UAAA/vD,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB8J,YAApB,CAAiC,OAAjC,CAAd;AACA,kBAAM1J,IAAI,GAAG,KAAK2P,IAAL,CAAUjG,YAAV,CAAuB,OAAvB,CAAb;AACA,mBAAKkvD,UAAL,GAAkB54D,IAAI,CAACi5B,QAAL,CAAcugC,KAAd,EAAqB,QAArB,EAA+B,QAA/B,CAAlB;AACH,aAND,MAMO,IAAI,KAAK7pD,IAAT,EAAe;AAClB,mBAAKA,IAAL,GAAY,IAAZ;AACA,mBAAKipD,UAAL,GAAkB,CAAC,MAAnB;AACH,aAXa,CAYd;;;AACA,gBAAI,KAAK/1C,OAAL,CAAajT,EAAjB,EAAqB;AACjB,kBAAMsrB,MAAK,GAAG,IAAI,UAAAhqB,MAAJ,CAAW;AAAClR,oBAAI,EAAE,KAAK6iB,OAAL,CAAajT;AAApB,eAAX,CAAd;;AACA,mBAAKA,EAAL,GAAUsrB,MAAK,CAACxxB,YAAN,CAAmB,KAAnB,CAAV;;AACA,kBAAM8vD,MAAK,GAAG,UAAA/vD,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB8J,YAApB,CAAiC,OAAjC,CAAd;;AACA,kBAAM1J,KAAI,GAAG,KAAK4P,EAAL,CAAQlG,YAAR,CAAqB,OAArB,CAAb;;AACA,mBAAKmvD,UAAL,GAAkB74D,KAAI,CAACi5B,QAAL,CAAcugC,MAAd,EAAqB,QAArB,EAA+B,QAA/B,CAAlB;AACH,aAND,MAMO,IAAI,KAAK5pD,EAAT,EAAa;AAChB,mBAAKA,EAAL,GAAU,IAAV;AACA,mBAAKipD,UAAL,GAAkB,MAAlB;AACH;;AACD,gBAAI,KAAKh2C,OAAL,CAAaq2C,YAAjB,EAA+B;AAC3B,mBAAKA,YAAL,GAAoB,KAAKr2C,OAAL,CAAaq2C,YAAb,IAA6B,WAAjD;AACH;;AACD,gBAAI,KAAKr2C,OAAL,CAAao2C,UAAjB,EAA6B;AACzB,mBAAKA,UAAL,GAAkB,KAAKp2C,OAAL,CAAao2C,UAAb,IAA2B,KAA7C;AACA,mBAAKG,qBAAL;AACH,aA7Ba,CA8Bd;;;AACA,iBAAKD,aAAL;AACH;AACJ;AAED;;;;;;wCAGqB;AACjB,cAAI,CAAC,KAAKn5D,IAAV,EAAgB;AACZ;AACH;;AACD,cAAMA,IAAI,GAAG,UAAAyJ,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoBiB,QAApB,CAA6B;AAAEw5B,kBAAM,EAAG,KAAK32B;AAAhB,WAA7B,CAAb;AACA,cAAMipC,MAAM,GAAG,IAAI,UAAAz7B,MAAJ,CAAW;AAAClR,gBAAI,EAAE,KAAKA;AAAZ,WAAX,CAAf;AACA,cAAIE,KAAK,GAAGF,IAAI,CAACY,QAAL,CAAc;AAAEuD,eAAG,EAAE;AAAP,WAAd,EAA0BvD,QAA1B,CAAmC;AAAEkE,mBAAO,EAAE;AAAX,WAAnC,EAAmD2M,aAAnD,CAAiE;AAAE8oB,iBAAK,EAAE;AAAT,WAAjE,CAAZ;AACA,cAAMk/B,IAAI,GAAG,IAAI,UAAAvoD,MAAJ,CAAW;AAAClR,gBAAI,EAAEE,KAAK,CAACyJ;AAAb,WAAX,CAAb;AACA,cAAM0jB,GAAG,GAAGosC,IAAI,CAAC54D,QAAL,CAAc;AAAE05B,iBAAK,EAAE;AAAT,WAAd,EAA4BlK,UAA5B,CAAuC,OAAvC,EAAgDxvB,QAAhD,CAAyD;AAAE4wB,gBAAI,EAAE;AAAR,WAAzD,EAAsEpB,UAAtE,CAAiF,MAAjF,CAAZ;AACA,eAAKyoC,SAAL,GAAiB,EAAjB;;AACA,iBAAO54D,KAAK,CAACm5B,YAAN,CAAmBhM,GAAnB,KAA2BntB,KAAK,CAACq+B,UAAN,CAAiBlR,GAAjB,EAAsB,KAAtB,CAAlC,EAAgE;AAC5D,iBAAKyrC,SAAL,CAAejxD,IAAf,CAAoB;AAChB3E,mBAAK,EAAEhD,KAAK,CAACyJ,EADG;AAEhBsC,qBAAO,EAAE/L,KAAK,CAACoB,UAAN,CAAiB,GAAjB,CAFO;AAGhBqrC,oBAAM,EAAG,KAAKgsB,mBAAL,IAA4BhsB,MAAM,CAACpO,UAAP,CAAkBr+B,KAAlB,EAAyB,KAAzB,CAHrB;AAIhBw5D,uBAAS,EAAE,CAAC15D,IAAI,CAACu+B,UAAL,CAAgBr+B,KAAhB,EAAuB,OAAvB,CAJI;AAKhB6H,mBAAK,EAAE,KAAKuxD,QAAL,GAAgB,KAAKA,QAAL,CAAcp5D,KAAK,CAACoB,UAAN,CAAiB,YAAjB,CAAd,KAAiD,CAAjE,GAAqE,CAL5D;AAMhBs6B,sBAAQ,EAAE,CAAC,KAAKjsB,IAAL,GAAYzP,KAAK,CAACm5B,YAAN,CAAmB,KAAK1pB,IAAxB,EAA8B,KAA9B,CAAZ,GAAmD,KAApD,MAA+D,KAAKC,EAAL,GAAU1P,KAAK,CAACo5B,WAAN,CAAkB,KAAK1pB,EAAvB,EAA2B,KAA3B,CAAV,GAA8C,KAA7G,CANM;AAOhB4pD,mBAAK,EAAE,UAAA/vD,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB2+B,UAApB,CAA+Br+B,KAA/B,EAAsC,KAAtC;AAPS,aAApB;AASAA,iBAAK,GAAGA,KAAK,CAACW,QAAN,CAAe;AAAE4wB,kBAAI,EAAG;AAAT,aAAf,CAAR;AACH;;AACD,eAAKsnC,UAAL,GAAkB/4D,IAAI,CAACsB,UAAL,CAAgB,KAAK43D,YAArB,CAAlB;AACH;AAED;;;;;;gDAGgC;AAC5B,cAAIl5D,IAAI,GAAG,UAAAyJ,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB8J,YAApB,CAAiC,MAAjC,CAAX;AACA,eAAKsvD,YAAL,GAAoB,EAApB;;AACA,eAAK,IAAI36D,IAAC,GAAG,CAAb,EAAgBA,IAAC,GAAG,CAApB,EAAuBA,IAAC,EAAxB,EAA4B;AACxB,iBAAK26D,YAAL,CAAkBnxD,IAAlB,CAAuB7H,IAAI,CAACsB,UAAL,CAAgB,KAAK23D,UAArB,CAAvB;AACAj5D,gBAAI,GAAGA,IAAI,CAACa,QAAL,CAAc;AAAE4wB,kBAAI,EAAG;AAAT,aAAd,CAAP;AACH;AACJ;AAED;;;;;;;;oCAKmBvuB,K,EAAa;AAAA;;AAC5B,cAAI,KAAKy2D,aAAT,EAAwB;AACpB/9D,wBAAY,CAAC,KAAK+9D,aAAN,CAAZ;AACH;;AACD,eAAKA,aAAL,GAA0Bx9D,UAAU,CAAC,YAAM;AACvC,gBAAMy9D,UAAU,GAAG,QAAI,CAACl2D,MAAL,GAAcR,KAAjC;AACA,gBAAMikB,GAAG,GAAG,UAAA1d,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAZ;AACA,gBAAMI,IAAI,GAAGmnB,GAAG,CAACtmB,QAAJ,CAAa;AAAEw5B,oBAAM,EAAGu/B,UAAX;AAAuBnoC,kBAAI,EAAEtK,GAAG,CAACm4B,SAAJ,KAAkB,CAAlB,GAAsB,CAAtB,GAA0B;AAAvD,aAAb,CAAb,CAHuC,CAGgD;;AACvF,gBAAI,QAAI,CAAC3vC,IAAL,IAAa3P,IAAI,CAACq5B,YAAL,CAAkB,QAAI,CAAC1pB,IAAvB,EAA6B,OAA7B,CAAjB,EAAwD;AAAE;AAAS;;AACnE,gBAAI,QAAI,CAACC,EAAL,IAAW5P,IAAI,CAACs5B,WAAL,CAAiB,QAAI,CAAC1pB,EAAtB,EAA0B,OAA1B,CAAf,EAAmD;AAAE;AAAS;;AAC9D,oBAAI,CAAClM,MAAL,GAAck2D,UAAd;;AACA,oBAAI,CAACx3D,KAAL,CAAWsgD,IAAX,CAAgB,QAAI,CAACh/C,MAArB;;AACA,oBAAI,CAACy1D,aAAL;;AACA,oBAAI,CAACQ,aAAL,GAAqB,IAArB;AACH,WAVmC,EAUjC,GAViC,CAApC;AAWH;AAED;;;;;;gCAGe;AACX,cAAM35D,IAAI,GAAG,IAAI,UAAAkR,MAAJ,CAAW;AAAClR,gBAAI,EAAE,KAAKA;AAAZ,WAAX,CAAb;AACA,cAAM0D,MAAM,GAAG,KAAKA,MAApB;AACA,eAAKA,MAAL,GAAc,UAAA+F,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoBq5B,QAApB,CAA6Bj5B,IAA7B,EAAmC,QAAnC,EAA6C,QAA7C,CAAd;;AACA,cAAI0D,MAAM,KAAK,KAAKA,MAApB,EAA4B;AACxB,iBAAKy1D,aAAL;AACH;;AACD,eAAK/2D,KAAL,CAAWsgD,IAAX,CAAgB,KAAKh/C,MAArB;AACH;AAED;;;;;;;mCAIkBR,K,EAAe;AAC7B,eAAKlD,IAAL,GAAYkD,KAAZ;AACA,eAAK22D,UAAL;AACA,eAAKV,aAAL;AACH;AAED;;;;;;;yCAIwBn9D,E,EAAuB;AAC3C,eAAKyxD,SAAL,GAAiBzxD,EAAjB;AACH;AAED;;;;;;;0CAIyBA,E,EAAuB;AAC5C,eAAK0xD,QAAL,GAAgB1xD,EAAhB;AACH;;;;;;AA5OL;;;uBAYay8D,sB;AAAsB,K;;;YAAtBA,sB;AAAsB,sC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA,O;AAAA,uCARpB,CACP;AACIpjB,eAAO,EAAE,QAAAsY,iBADb;AAEIC,mBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,iBAAM4K,sBAAN;AAAA,SAAX,CAFjB;AAGI3K,aAAK,EAAE;AAHX,OADO,CAQoB,GAF9B,uBAE8B,C;AAF9B,e;AAAA,a;AAAA,sa;AAAA;AAAA;AC1CL;AACI;AACI;AAAoE;AAAA,mBAAS,IAAAgM,WAAA,CAAY,IAAC,CAAb,CAAT;AAAwB,WAAxB,EAAyB,UAAzB,EAAyB;AAAA,mBAAa,IAAAA,WAAA,CAAY,IAAC,CAAb,CAAb;AAA4B,WAArD;AAChE;AACJ;AACA;AAAmB;AAAA,mBAAY,IAAAh6D,KAAA,EAAZ;AAAmB,WAAnB;AAAqB;AAAc;AACtD;AAAgE;AAAA,mBAAS,IAAAg6D,WAAA,CAAY,CAAZ,CAAT;AAAuB,WAAvB,EAAwB,UAAxB,EAAwB;AAAA,mBAAa,IAAAA,WAAA,CAAY,CAAZ,CAAb;AAA2B,WAAnD;AAC5D;AACJ;AACJ;AACA;AACI;AACJ;AACA;AACI;AAYJ;AACJ;;;;AA3BK;AAE+B;AAAA;AAGY;AAAA;AAChB;AAAA;AAKL;AAAA;AAGA;AAAA;;;;;;;;;2BD8BdrB,sB,EAAsB;cAZlC,OAAA3U,SAYkC;eAZxB;AACPlnD,kBAAQ,EAAE,iBADH;AAEPmnD,qBAAW,EAAE,kCAFN;AAGPC,mBAAS,EAAE,CAAC,kCAAD,CAHJ;AAIPvD,mBAAS,EAAE,CACP;AACIpL,mBAAO,EAAE,QAAAsY,iBADb;AAEIC,uBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,qBAAM4K,sBAAN;AAAA,aAAX,CAFjB;AAGI3K,iBAAK,EAAE;AAHX,WADO;AAJJ,S;AAYwB,Q;;gBAE9B,OAAAxuD;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAA2kD;;;gBAEA,OAAA3kD;;;;;;;;;;;;;;;;;;;;;;;;AEtDL;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;AAsCgB;AACI;AAMQ;AAAA;AAAA;AAAA,iBAAS,OAAA2R,MAAA,aAAT;AAA4B,SAA5B;AAA8B;AAAc;AACxD;;;;;AARK;AAGO;AAAA;AACA,sEAA6C,WAA7C,EAA6C,uBAA7C;AAFA;AAK8B;AAAA;;;;;;;;AAG9C;AAKI;AAAA;AAAA;AAAA,iBAAS,OAAA+0B,KAAA,aAAT;AAA2B,SAA3B;AACA;AACJ;;;;;AAHI;AAEK;AAAA;;;;AA5CrB,QAAY+zB,SAAZ;;AAAA,eAAYA,SAAZ,EAAqB;AACjB;AACA;AACA;AACA;AACH,KALD,EAAYA,SAAS,GAAT,QAAAA,SAAA,aAAAA,SAAA,GAAS,EAAT,CAAZ;;AAOA,QAAYC,kBAAZ;;AAAA,eAAYA,kBAAZ,EAA8B;AAC1B;;;AAGA;AAEA;;;;AAGA;AACH,KAVD,EAAYA,kBAAkB,GAAlB,QAAAA,kBAAA,aAAAA,kBAAA,GAAkB,EAAlB,CAAZ;;QA2CaC,oB;AA/Bb;AAAA;;AAkCW,aAAAC,IAAA,GAAkBH,SAAS,CAACI,OAA5B;AAGA,aAAAn0B,KAAA,GAAQ,IAAI,OAAAob,YAAJ,EAAR;AAGA,aAAAnwC,MAAA,GAAS,IAAI,OAAAmwC,YAAJ,EAAT;AASA,aAAAgZ,SAAA,GAAY,IAAZ;AAGA,aAAAnuD,OAAA,GAA8B+tD,kBAAkB,CAACK,EAAjD;AAEA,aAAAC,QAAA,GAAmB,gCAAnB;AACA,aAAAC,aAAA,GAAwB,OAAxB;AACA,aAAAC,SAAA,GAAoB,mBAApB;AAoCV;;;;mCAlCkB;AACX,eAAKC,aAAL;AACH;;;oCAEkB/8D,O,EAAwB;AACvC,cAAIA,OAAO,CAACw8D,IAAZ,EAAkB;AACd,iBAAKO,aAAL;AACH;AACJ;;;wCAEuB;AACpB,eAAKH,QAAL,GAAgB,gCAAhB;AACA,eAAKE,SAAL,GAAiB,mBAAjB;;AACA,kBAAQ,KAAKN,IAAb;AACI,iBAAKH,SAAS,CAACI,OAAf;AACI,mBAAKI,aAAL,GAAqB,OAArB;AACA;;AACJ,iBAAKR,SAAS,CAACW,SAAf;AACI,mBAAKH,aAAL,GAAqB,WAArB;AACA,mBAAKC,SAAL,GAAiB,6BAAjB;AACA;;AACJ,iBAAKT,SAAS,CAACY,aAAf;AACI,mBAAKL,QAAL,GAAgB,8BAAhB;AACA,mBAAKC,aAAL,GAAqB,gBAArB;AACA;;AACJ,iBAAKR,SAAS,CAAC39D,KAAf;AACI,mBAAKk+D,QAAL,GAAgB,2BAAhB;AACA,mBAAKC,aAAL,GAAqB,OAArB;AACA;;AACJ;AACI,mBAAKA,aAAL,GAAqB,OAArB;AAjBR;AAmBH;;;;;;AA1FL;;;uBA+BaN,oB;AAAoB,K;;;YAApBA,oB;AAAoB,uC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA;AAAA,O;AAAA,yC;AAAA,c;AAAA,c;AAAA,0b;AAAA;AAAA;AA5BzB;AACI;AACI;AACJ;AACA;AACI;;AACA;AASJ;AACA;AAQJ;;;;AAxBK;AACI;AAAA;AACI;AAAA;AAGe;AAAA;AAAqC;AACP;AAAA;AAWlD;AAAA;;;;;;;;;;2BAWHA,oB,EAAoB;cA/BhC,OAAAnW,SA+BgC;eA/BtB;AACPlnD,kBAAQ,EAAE,kBADH;AAEPw0D,kBAAQ,yyCAFD;AA6BPpN,mBAAS,EAAE,CAAC,+BAAD;AA7BJ,S;AA+BsB,Q;;gBAE5B,OAAA1kD;;;gBAGA,OAAA2kD;;;gBAGA,OAAAA;;;gBAGA,OAAA3kD;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;;;;;;;;;;;;;;;;;;;;;;AChFL;AAAA;AAAA;;AAeA;AAAA;AAAA;;AAMA;AAAA;AAAA;;AAMA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAMA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMY;AAAyF;AAAA;AAAA;AAAA;AAAA;AACrF;AACJ;;;;;;AA0BY;AACI;AACJ;;;;;;;;AACA;AACI;AAAA;AAAA;AAAA;AAAA;;AAEuC;;;;;AAAvC;;;;;;;;AACJ;AACK;AAAA;AAAA;AAAA;AAAA;AACD;AAEJ;;;;;AAJK;AAEiB;AAAA;;;;;;AAK9B;;;;;;AAGI;;;;AACU;;;;;;;;AACV;AACU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgG;AACtG;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAgF;AAAK;AACvH;;;;;;AAF6C;AAA6D;AAAA;AAC1C;AAAA;;;;;;AAGpE;;;;;;;;AASQ;AAGI;AAAA;AAAA,iBAASwvD,MAAM,CAACt/C,eAAP,EAAT;AAAiC,SAAjC;AAGA;AAKI;AAAA;AAAA;AAAA;AAAA;AAAA,WAAoC,OAApC,EAAoC;AAAA;AAAA,iBAC3Bs/C,MAAM,CAACt/C,eAAP,EAD2B;AACH,SADjC;AAEA;AACJ;AACJ;;;;;AAbI;AADA,uDAA4B,OAA5B,EAA4B,gBAA5B;AAQI;AAAA;AAFA,iFAAsD,UAAtD,EAAsD,mBAAtD,EAAsD,SAAtD,EAAsD,mBAAtD;AAMA;AAAA;;;;;;;;AAIZ;AACI;AAEI;AAAA;AAAA;AAAA;AAAA;AAGA;AACJ;AACA;AAEI;AAAA;AAAA;AAAA,iCAAiB,KAAjB;AAAsB,SAAtB;AAGA;AACJ;AACJ;;;;;AAXQ;AAAA;AAOA;AAAA;;;;;;AAOhB;AAAqC;AAAgB;;;;;AAAhB;AAAA;;;;QAMpCorD,mC;;;;;AA6FT,mDAAwCv8B,OAAxC,EAA4D;AAAA;;AAAA;;AACxD;AADoC,iBAAAA,OAAA,GAAAA,OAAA;AA5DxC,iBAAAw8B,cAAA,GAAiB,IAAI,OAAAzZ,YAAJ,EAAjB;AAGA,iBAAA0Z,cAAA,GAAiB,IAAI,OAAA1Z,YAAJ,EAAjB;AAGA,iBAAA2Z,YAAA,GAAmC,IAAI,OAAA3Z,YAAJ,EAAnC;AAGA,iBAAA4Z,cAAA,GAAqC,IAAI,OAAA5Z,YAAJ,EAArC;AAEA;;;;AAIA,iBAAA6Z,kBAAA,GAAqB,KAArB;AAKgB,iBAAAC,WAAA,GAAuB,IAAvB;AAcR,iBAAAC,wBAAA,GAA2B,IAAI,OAAA1/D,eAAJ,CAAoB,KAApB,CAA3B;AAER,iBAAA2/D,kBAAA,GAAqB,CAAC,WAAAC,KAAD,EAAQ,WAAAC,KAAR,CAArB;AAEO,iBAAAC,iBAAA,GAAiC,IAAI,QAAA5/B,WAAJ,EAAjC;AAEA,iBAAA6/B,OAAA,GAAU,KAAV;AACA,iBAAAC,gBAAA,GAAmB,KAAnB;AAEA,iBAAAC,mBAAA,GAAsB,IAAI,OAAAjgE,eAAJ,CAAyC,EAAzC,CAAtB;AACA,iBAAAkgE,2BAAA,GAA8B,IAAI,OAAAlgE,eAAJ,CAAyC,EAAzC,CAA9B;AAEP;;AACO,iBAAAgpD,WAAA,GAAc,IAAI,OAAAhpD,eAAJ,CAAyC,EAAzC,CAAd;AAOC,iBAAAyH,KAAA,GAAQ,IAAI,OAAAzH,eAAJ,CAAyC,EAAzC,CAAR;AAED,iBAAAmgE,UAAA,GAAsB,KAAtB;AAEA,iBAAAC,QAAA,GAAoB,KAApB;;AAiSC,iBAAAC,WAAA,GAAc,UAACpuD,KAAD,EAAiB;AACnC,cAAI,SAAKlT,OAAL,KAAiB,IAArB,EAA2B;AACzB;AACD;AACD;;;;;AAGA,cAAI,SAAKA,OAAL,CAAauhE,SAAb,IAA0BruD,KAAK,CAACyE,MAAN,CAAarU,OAAb,CAAqB,yBAArB,MAAoD,IAA9E,IAAsF,CAAC4P,KAAK,CAACujD,UAAN,CAAiBtE,SAAjB,CAA2BqP,QAA3B,CAAoC,iCAApC,CAA3F,EAAmK;AAC/J,qBAAKC,OAAL,CAAa,KAAb;;AACA,qBAAKzhE,OAAL,CAAa,UAAb,EAAyBqD,aAAzB,CAAuCq+D,IAAvC;AACH;AACF,SAXK;;AA7RJ,YAAI,SAAK79B,OAAT,EAAkB;AACd,mBAAKA,OAAL,CAAa89B,aAAb;AACH;;AAJuD;AAK3D;;;;sCAgBoBC,K,EAAc;AAC/B,iBAAOA,KAAK,KAAK,UAAV,GAAuB,oBAAvB,GAA8C,qBAArD;AACH;;;mCAEU;AAAA;;AACP,eAAKr+D,YAAL,CAAkB,qBAAlB,EAAyC,OAAAgyB,aAAA,CAAc,CACnD,KAAKlN,OAD8C,EAEnD,KAAK4H,eAF8C,EAGnD,KAAK0wC,wBAH8C,CAAd,EAKpCrqD,IALoC,CAMjC,YAAAjL,GAAA,CAAI,iBAAoD;AAAA;AAAA,gBAAlDgd,OAAkD;AAAA,gBAAzC4H,eAAyC;AAAA,gBAAxBwwC,kBAAwB;;AACpD,oBAAI,CAACY,QAAL,GAAgB,CAAC,CAACpxC,eAAe,CAACvoB,MAAlC;AACA,mBAAO2gB,OAAO,CAAChd,GAAR,CAAY,UAAA6kB,MAAM,EAAI;AACzB,kBAAME,QAAQ,GAAG,CAAC,CAACH,eAAe,CAACjnB,IAAhB,CAAqB,UAAA+R,CAAC;AAAA,uBAAIA,CAAC,CAACrS,KAAF,KAAYwnB,MAAM,CAACxnB,KAAvB;AAAA,eAAtB,CAAnB;AACA,kBAAIm5D,OAAO,GAAG,IAAd;;AACA,kBAAIpB,kBAAJ,EAAwB;AACpB;AACA,oBAAMqB,mBAAmB,GAAG7xC,eAAe,CAACjnB,IAAhB,CAAqB,UAAA+R,CAAC;AAAA,yBAAIA,CAAC,CAACyS,WAAF,IAAiBzS,CAAC,CAAC6U,OAAF,KAAcM,MAAM,CAACN,OAA1C;AAAA,iBAAtB,CAA5B,CAFoB,CAIpB;;AACAiyC,uBAAO,GACH5xC,eAAe,CAACvoB,MAAhB,KAA2B,CAA3B,KACCo6D,mBAAmB,GAAGA,mBAAmB,CAAClyC,OAApB,KAAgCM,MAAM,CAACN,OAA1C,GAAoD,KADxE,CADJ;AAGA,wBAAI,CAACwxC,UAAL,GAAkBnxC,eAAe,CAACvoB,MAAhB,KAA2B,CAA7C;AACH;;AAED,qBAAO,gCACAwoB,MADA,GACM;AACT2xC,uBAAO,EAAPA,OADS;AAETzxC,wBAAQ,EAARA;AAFS,eADN,CAAP;AAKH,aAnBM,CAAP;AAoBH,WAtBD,CANiC,EA6BnC3sB,SA7BmC,CA6BzB,UAAAkQ,IAAI,EAAI;;;AAChB,gBAAM0U,OAAO,GAAG1U,IAAI,CAACjG,IAAL,CAAU,UAACC,CAAD,EAAIC,CAAJ,EAAU;AAChC,kBAAID,CAAC,CAACiiB,OAAF,KAAchiB,CAAC,CAACgiB,OAApB,EAA6B;AACzB,uBAAOhiB,CAAC,CAAC6D,OAAF,GAAY9D,CAAC,CAAC8D,OAAd,GAAwB,CAAC,CAAzB,GAA6B,CAApC;AACH;;AACD,qBAAO7D,CAAC,CAACgiB,OAAF,GAAYjiB,CAAC,CAACiiB,OAAd,GAAwB,CAAC,CAAzB,GAA6B,CAApC;AACH,aALe,CAAhB;;AAMA,oBAAI,CAACsxC,mBAAL,CAAyBvtD,IAAzB,CAA8B0U,OAA9B;;AACA,oBAAI,CAAC84C,2BAAL,CAAiCxtD,IAAjC,CAAsC,QAAI,CAACouD,8BAAL,CAAoC,CAAD,KAAC,QAAI,CAAChB,iBAAL,CAAuBr4D,KAAvB,MAA4B,IAA5B,IAA4B,aAA5B,GAA4B,MAA5B,GAA4B,GAAEk7C,IAAF,EAAhE,CAAtC;AACH,WAtCoC,CAAzC;AAuCA,eAAKrgD,YAAL,CAAkB,0BAAlB,EACI,KAAKw9D,iBAAL,CAAuB3+B,YAAvB,CAAoC3+B,SAApC,CAA8C,UAAAiF,KAAK,EAAI;AACnD,gBAAI,QAAI,CAACg4D,WAAL,IAAoBh4D,KAAK,CAAChB,MAA9B,EAAsC;AAClC,sBAAI,CAACy5D,2BAAL,CAAiCxtD,IAAjC,CAAsC,QAAI,CAACouD,8BAAL,CAAoCr5D,KAApC,CAAtC;AACH,aAFD,MAEO;AACH,sBAAI,CAACy4D,2BAAL,CAAiCxtD,IAAjC,CAAsC,QAAI,CAACouD,8BAAL,EAAtC;AACH;AACJ,WAND,CADJ;AAQA,eAAKx+D,YAAL,CAAkB,aAAlB,EAAiC,KAAK0sB,eAAL,CAC5B3Z,IAD4B,CACvB,YAAAjL,GAAA,CAAI,UAAA4kB,eAAe,EAAI;AACzB;AACA;AACA,gBAAM+xC,YAAY,GAAG/xC,eAAe,CAAC7jB,MAAhB,CAAuB,UAAA2O,CAAC;AAAA,qBAAIA,CAAC,CAACyS,WAAN;AAAA,aAAxB,KAA8C,EAAnE;AACA,mBAAOyC,eAAe,CAAC7jB,MAAhB,CAAuB,UAAA2O,CAAC;AAAA,qBAAIA,CAAC,CAACyS,WAAF,IAAiBzS,CAAC,CAAC+Q,UAAF,IAAgB,CAAEk2C,YAAY,CAACh5D,IAAb,CAAkB,UAAAi5D,CAAC;AAAA,uBAAIA,CAAC,CAACryC,OAAF,KAAc7U,CAAC,CAAC6U,OAApB;AAAA,eAAnB,CAAvC;AAAA,aAAxB,CAAP;AACH,WALK,CADuB,EAO5BnsB,SAP4B,CAOlB,UAAAkQ,IAAI,EAAI;AACf,oBAAI,CAACs2C,WAAL,CAAiBt2C,IAAjB,CAAsBA,IAAtB;AACH,WAT4B,CAAjC;AAWA,eAAKpQ,YAAL,CAAkB,UAAlB,EAA8B,KAAK0sB,eAAL,CACzB3Z,IADyB,CACpB,YAAAjL,GAAA,CAAI,UAAA+kB,QAAQ,EAAI;AAClB;AACA,mBAAOA,QAAP;AACH,WAHK,CADoB,EAKzB3sB,SALyB,CAKf,UAAAkQ,IAAI,EAAI;AACf,oBAAI,CAACjL,KAAL,CAAWiL,IAAX,CAAgBA,IAAhB;AACH,WAPyB,CAA9B,EA3DO,CAoEP;;AACA,eAAKpQ,YAAL,CAAkB,cAAlB,EAAkC,KAAKmF,KAAL,CAC7B4N,IAD6B,CACxB,YAAA8zC,oBAAA,EADwB,EAE7B3mD,SAF6B,CAEnB,UAAAkQ,IAAI,EAAI;AACf,gBAAI,QAAI,CAACs/C,SAAT,EAAoB;AAChB;AACA,kBAAMz2B,MAAM,GAAG,EAAf;AACA7oB,kBAAI,CAAC/P,OAAL,CAAa,UAACsO,CAAD,EAAIrO,CAAJ,EAAU;;;AACnB,oBAAM6E,KAAK,GAAG,MAAH,OAAG,CAAH,EAAG,EAAKwJ,CAAL,CAAd;;AACA,oBAAI,CAAJ,KAAIA,CAAC,CAACwY,IAAF,MAAM,IAAN,IAAM,aAAN,GAAM,MAAN,GAAM,GAAEtM,IAAZ,EAAkB;AACd1V,uBAAK,CAAC+I,OAAN,GAAgBS,CAAC,CAACwY,IAAF,CAAOtM,IAAP,CAAY7c,IAA5B;AACH;;AACDi7B,sBAAM,CAACnvB,IAAP,CAAY3E,KAAZ;AACH,eAND;;AAOA,sBAAI,CAACuqD,SAAL,CAAez2B,MAAf;AACH;AACJ,WAf6B,CAAlC;AAiBAzxB,gBAAM,CAACqhC,gBAAP,CAAwB,QAAxB,EAAkC,KAAKk1B,WAAvC,EAAoD,IAApD;AACH;;;yDAEyD;AAAA,cAA3BY,YAA2B,uEAAJ,EAAI;AACtD;AACA,cAAMC,YAAY,GAAG,KAAKjB,mBAAL,CAAyBx4D,KAAzB,CAA+B0D,MAA/B,CAAsC,UAAAmkB,CAAC,EAAI;AAC5D,gBAAI2xC,YAAY,IAAIA,YAAY,CAACx6D,MAAjC,EAAyC;AACrC,qBAAO6oB,CAAC,CAACX,OAAF,CAAU1iB,WAAV,GAAwBtE,OAAxB,CAAgCs5D,YAAY,CAACh1D,WAAb,EAAhC,MAAgE,CAAhE,IAAqEqjB,CAAC,CAAC9e,OAAF,CAAUvE,WAAV,GAAwBtE,OAAxB,CAAgCs5D,YAAY,CAACh1D,WAAb,EAAhC,MAAgE,CAA5I;AACH;;AACD,mBAAOqjB,CAAC,CAACX,OAAF,IAAaW,CAAC,CAAC9e,OAAtB;AACH,WALoB,CAArB,CAFsD,CAQtD;;AACA,cAAM2wD,WAAW,GAAG,KAAKlB,mBAAL,CAAyBx4D,KAAzB,CAA+B0D,MAA/B,CAAsC,UAAAmkB,CAAC,EAAI;;;AAC3D,gBAAI,OAAAA,CAAC,SAAD,IAAAA,CAAC,WAAD,GAAC,MAAD,GAAAA,CAAC,CAAEd,gBAAH,MAAmB,IAAnB,IAAmB,aAAnB,GAAmB,MAAnB,GAAmB,GAAE/nB,MAArB,KAA+Bw6D,YAAnC,EAAiD;AAC7C,kBAAMv2D,KAAK,GAAG,OAAA4kB,CAAC,CAACd,gBAAF,MAAkB,IAAlB,IAAkB,aAAlB,GAAkB,MAAlB,GAAkB,GAAEviB,WAAF,GAAgBtE,OAAhB,CAAwBs5D,YAAY,CAACh1D,WAAb,EAAxB,CAAlB,IAAwE,CAAC,CAAvF,CAD6C,CAE7C;;AACA,qBAAOvB,KAAK,IAAI,CAACw2D,YAAY,CAACn5D,IAAb,CAAkB,UAAA6G,CAAC,EAAI;AACpC,uBAAOA,CAAC,CAACnH,KAAF,KAAY6nB,CAAC,CAAC7nB,KAArB;AACH,eAFgB,CAAjB;AAGH;;AACD,mBAAO,KAAP;AACH,WATmB,CAApB,CATsD,CAoBtD;;AACA,cAAI25D,aAAa,GAAGF,YAAY,CAACzqC,MAAb,CAAoB0qC,WAApB,EAAiC10D,IAAjC,CAAsC,UAACC,CAAD,EAAIC,CAAJ,EAAU;AAChE,gBAAID,CAAC,CAACiiB,OAAF,KAAchiB,CAAC,CAACgiB,OAApB,EAA6B;AACzB,qBAAOhiB,CAAC,CAAC6D,OAAF,GAAY9D,CAAC,CAAC8D,OAAd,GAAwB,CAAC,CAAzB,GAA6B,CAApC;AACH;;AACD,mBAAO7D,CAAC,CAACgiB,OAAF,GAAYjiB,CAAC,CAACiiB,OAAd,GAAwB,CAAC,CAAzB,GAA6B,CAApC;AACH,WALmB,CAApB,CArBsD,CA4BtD;;AACA,cAAM0yC,QAAQ,GAAGD,aAAa,CAACh3D,GAAd,CAAkB,UAAAklB,CAAC;AAAA,mBAAIA,CAAC,CAACX,OAAN;AAAA,WAAnB,CAAjB,CA7BsD,CA8BtD;;AACA,cAAM2yC,OAAO,GAAG,KAAKrB,mBAAL,CAAyBx4D,KAAzB,CAA+B0D,MAA/B,CAAsC,UAAAmkB,CAAC,EAAI;AACvD,mBAAO,CAAAA,CAAC,SAAD,IAAAA,CAAC,WAAD,GAAC,MAAD,GAAAA,CAAC,CAAE/C,WAAH,KAAkB80C,QAAQ,CAAC15D,OAAT,CAAiB2nB,CAAC,CAACX,OAAnB,MAAgC,CAAC,CAA1D;AACH,WAFe,CAAhB,CA/BsD,CAmCtD;AACA;;AACA,cAAMuxC,2BAA2B,GAAGoB,OAAO,CAAC7qC,MAAR,CAAe2qC,aAAa,CAACj2D,MAAd,CAAqB,UAAAo2D,EAAE;AAAA,mBAAI,CAAC,CAACA,EAAE,CAAC/yC,gBAAT;AAAA,WAAvB,CAAf,EAAkE/hB,IAAlE,CAAuE,UAACC,CAAD,EAAIC,CAAJ,EAAU;AACjH,mBAAOA,CAAC,CAACgiB,OAAF,GAAYjiB,CAAC,CAACiiB,OAAd,GAAwB,CAAC,CAAzB,GAA6B,CAApC;AACH,WAFmC,CAApC;AAGA,iBAAOuxC,2BAAP;AACH;;;oCAEQ;AACL,eAAKF,gBAAL,GAAwB,KAAxB;AACA,eAAKD,OAAL,GAAe,KAAf;AACH;;;oCAEW99D,O,EAAsB;AAC9B,cAAIA,OAAO,CAACu9D,kBAAZ,EAAgC;AAC5B,iBAAKE,wBAAL,CAA8BhtD,IAA9B,CAAmC,KAAK8sD,kBAAxC;AACH;AACJ;;;mCAEUgC,Q,EAAkB;AACzB,cAAI,KAAKC,aAAT,EAAwB;AACpB,iBAAKpC,cAAL,CAAoBpY,IAApB,CAAyBua,QAAzB;AACH;AACJ;;;qCAEY/5D,K,EAAe;AAAA;;AACxB,eAAK2f,OAAL,CAAa/R,IAAb,CACI,YAAA+H,IAAA,CAAK,CAAL,CADJ,EAEI,YAAAhT,GAAA,CAAI,UAACgd,OAAD;AAAA,mBAAkCA,OAAO,CAACrf,IAAR,CAAa,UAAAunB,CAAC;AAAA,qBAAIA,CAAC,CAAC7nB,KAAF,KAAYA,KAAhB;AAAA,aAAd,CAAlC;AAAA,WAAJ,CAFJ,EAGEjF,SAHF,CAGY,UAAAkQ,IAAI,EAAI;AAChB,gBAAIA,IAAJ,EAAU;AACN,sBAAI,CAAC0sD,cAAL,CAAoBnY,IAApB,CAAyBv0C,IAAzB;AACH;AACJ,WAPD;AAQH;;;qCAEYjL,K,EAA0B;AACnC,eAAK23D,cAAL,CAAoBnY,IAApB,CAAyBx/C,KAAzB;;AACA,cAAI,KAAKi6D,OAAT,EAAkB;AACd,iBAAKnC,cAAL,CAAoBtY,IAApB;AACH;AAEJ;;;0CAEiB;AACd,eAAKj4B,eAAL,CAAqBtc,IAArB,CAA0B,EAA1B;AACA,eAAK4sD,YAAL,CAAkBrY,IAAlB;AACH;;;uCAEc;AACX;AACA,cAAI,KAAK8Y,OAAT,EAAkB;AACd,iBAAKS,OAAL,CAAa,KAAb;AACH;AACJ;;;2CAEkBmB,O,EAAkB;AACjC,eAAKnB,OAAL,CAAamB,OAAb,EAAsB,IAAtB;AACH;;;gCAEOA,O,EAAkBC,S,EAAqB;AAAA;;AAC3C,cAAI,CAACD,OAAD,IAAY,KAAKD,OAArB,EAA8B;AAC1B,iBAAKnC,cAAL,CAAoBtY,IAApB;AACH,WAH0C,CAI3C;;;AACA,cAAI,KAAKwY,WAAL,IAAoBmC,SAApB,IAAiCD,OAArC,EAA8C;AAC1C;AACA,iBAAK3B,gBAAL,GAAwB,IAAxB;AACA,iBAAK98D,OAAL,CAAa,cAAb,EAA6B,YAAM;AAC/B;AACA;AACA,sBAAI,CAACs9D,OAAL,CAAa,IAAb;AACH,aAJD,EAIG,GAJH;AAKH;;AAED,cAAI,KAAKiB,aAAL,IAAsB,CAACG,SAA3B,EAAsC;AAClC;AACA,iBAAKC,cAAL,CAAoBp6D,KAApB,GAA4B,EAA5B;AACA,iBAAKq4D,iBAAL,CAAuB36D,QAAvB,CAAgC,EAAhC;AACA,iBAAKk6D,cAAL,CAAoBpY,IAApB,CAAyB,EAAzB;AACH;;AAED,cAAI,KAAK8Y,OAAL,KAAiB4B,OAArB,EAA8B;AAC1B,iBAAK5B,OAAL,GAAe4B,OAAf,CAD0B,CAE1B;;AACA,gBAAI,CAACA,OAAL,EAAc;AACV,mBAAKE,cAAL,CAAoBp6D,KAApB,GAA4B,EAA5B;AACA,mBAAKq4D,iBAAL,CAAuB36D,QAAvB,CAAgC,EAAhC;AACH;;AACD,gBAAI,CAACy8D,SAAL,EAAgB;AACZ,kBAAID,OAAJ,EAAa;AACT,qBAAK5iE,OAAL,CAAa81D,SAAb;AACH,eAFD,MAEO;AACH,qBAAK91D,OAAL,CAAa+1D,UAAb,GADG,CAEH;;AACA,qBAAKgN,SAAL;AACH;AACJ;AACJ;AACJ;;;kCAESr6D,K,EAA0BwK,K,EAA0B;AAC1D,eAAKmtD,cAAL,CAAoBnY,IAApB,CAAyBx/C,KAAzB;AACH;;;4BAEGwK,K,EAA0B;AAC1B;AACA,cAAIA,KAAK,CAAClM,KAAV,EAAiB;AACbkM,iBAAK,CAAClM,KAAN,CAAY0B,KAAZ,GAAoB,EAApB;AACH;;AACD,eAAKq4D,iBAAL,CAAuB36D,QAAvB,CAAgC,EAAhC;AACH;;;yCAEgB5E,E,EAAO;AACpB,eAAKyxD,SAAL,GAAiBzxD,EAAjB;AACH;;;0CAEiBA,E,EAAO;AACrB,eAAK0xD,QAAL,GAAgB1xD,EAAhB;AACH;;;yCAEgBwhE,U,EAAmB;AAChC;AACA,eAAK5hC,QAAL,GAAgB4hC,UAAhB;AACH;;;mCAEUzgD,G,EAAoC;AAAA;;iBAAA,CAC3C;;;AACA,qBAAK8F,OAAL,MAAY,IAAZ,IAAY,aAAZ,GAAY,MAAZ,GAAY,GAAE/R,IAAF,CACR,YAAA+H,IAAA,CAAK,CAAL,CADQ,EAER,YAAAhT,GAAA,CAAI,UAACgd,OAAD,EAAkC;AAClC,mBAAOA,OAAO,CAACjc,MAAR,CAAe,UAAAmkB,CAAC;AAAA,qBAAIhO,GAAG,GAAG,CAAC,CAACA,GAAG,CAACvZ,IAAJ,CAAS,UAAAi6D,GAAG;AAAA,uBAAI1yC,CAAC,CAAC7nB,KAAF,KAAYu6D,GAAG,CAACv6D,KAApB;AAAA,eAAZ,CAAL,GAA8C,KAArD;AAAA,aAAhB,CAAP;AACH,WAFD,CAFQ,EAKVjF,SALU,CAKA,UAAAkQ,IAAI,EAAI;AAChB,oBAAI,CAACsc,eAAL,CAAqBtc,IAArB,CAA0BA,IAA1B;AACH,WAPW,CAAZ;AAQH;;;sCAcmB;AAChB5I,gBAAM,CAACm4D,mBAAP,CAA2B,QAA3B,EAAqC,KAAK5B,WAA1C,EAAuD,IAAvD;AACD;;;4BAtSe;AACd,iBAAO,KAAKz9B,OAAL,GAAe,KAAKA,OAAL,CAAa2f,OAA5B,GAAsC,KAA7C;AACH;;;4BAEmB;AAChB,cAAI,CAAC,KAAK3f,OAAV,EAAmB;AACf,mBAAO,KAAP;AACH;;AAHe,8BAKW,KAAKA,OALhB;AAAA,cAKRs/B,KALQ,iBAKRA,KALQ;AAAA,cAKDC,OALC,iBAKDA,OALC;AAOhB,iBAAO,KAAK5f,OAAL,GAAgB2f,KAAK,IAAIC,OAAzB,GAAoC,KAA3C;AACH;;;;MAhHoD,OAAAnhE,a;;AA1GzD;;;uBA0Gam+D,mC,EAAmC,sC;AAAA,K;;;YAAnCA,mC;AAAmC,wD;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAvGxC;AACI;AAGA;AAAiC;AAAS;AAC1C;AAMI;AACI;AASI;AAAA,mBAAW,IAAAqB,OAAA,CAAQ,IAAR,CAAX;AAAwB,WAAxB,EAAyB,OAAzB,EAAyB;AAAA,mBAChB,IAAA4B,UAAA,qBADgB;AACe,WADxC,EAAyB,sBAAzB,EAAyB;AAAA,mBAKD,IAAAx6D,GAAA,QALC;AAKU,WALnC;AATJ;AAgBA;AACI;AAGA;AAIA;AAKJ;AACJ;AACA;AACA;AAEI;AAEA;;AAIJ;AACA;AACA;AAGI;AAAA,mBAAU,IAAAy6D,kBAAA,CAAmB,IAAnB,CAAV;AAAkC,WAAlC,EAAmC,QAAnC,EAAmC;AAAA,mBACzB,IAAAA,kBAAA,CAAmB,KAAnB,CADyB;AACA,WADnC,EAAmC,gBAAnC,EAAmC;AAAA,mBAEjB,IAAAC,YAAA,qBAFiB;AAEgB,WAFnD;AAIA;AACI;;;AAgBJ;AACA;AAgBJ;AACJ;AACA;AACJ;;;;;;;;;;AAlGuC;AAC3B;AAAA;AAGG;AAAA;AAAsB;AAAA;AAI7B;AAAA;AAQQ;AAAA,0CAAsB,QAAtB,EAAsB,GAAtB;AAGA;AADA,8DAAiC,iBAAjC,EAAiC,IAAjC,EAAiC,4BAAjC,EAAiC,GAAjC,EAAiC,iBAAjC,EAAiC,GAAjC;AAW8B;AAAA;AAK1B;AAAA;AAG0B;AAAA;AAMf;AAAA;AAGT;AAAA;AAEA;AAAA;AAKS;AAAA;AAEnB;AAAA;AAWQ;AAAA;AAa4B;AAAA;AAkBzB;AAAA;;;;;;;;;;;2BAMlBnD,mC,EAAmC;cA1G/C,OAAA9W,SA0G+C;eA1GrC;AACPlnD,kBAAQ,EAAE,mCADH;AAEPw0D,kBAAQ,gvLAFD;AAuGPpN,mBAAS,EAAE,CAAC,iDAAD,CAvGJ;AAwGPga,uBAAa,EAAE,OAAAC,iBAAA,CAAkB34C;AAxG1B,S;AA0GqC,Q;;;;kBA6F/B,OAAA44C;;kBAAQ,OAAAC;;;;;gBA3FpB,OAAA5W,S;iBAAU,S;;;gBAGV,OAAAA,S;iBAAU,gB;;;gBAGV,OAAAjoD;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAGA,OAAA2kD;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAMA,OAAA3kD;;;gBAIA,OAAAA;;;gBAEA,OAAAA;;;gBAKA,OAAAA;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;;;;;;;;;;;;;;;;;;;;;;ACnNL;AAAA;AAAA;;;;;AAMA;;;;;;;;QASa8+D,e;;;;;;;kCACCpgE,K,EAA0B;AAChC,cAAI,CAACA,KAAL,EAAY;AACR,mBAAO,EAAP;AACH;;AAED,iBAAOA,KAAK,CAAC6H,GAAN,CAAU,UAAA6G,CAAC,EAAI;AAClB,gBAAM2xD,SAAS,GAAG,CAAC,CAACrgE,KAAK,CAACwF,IAAN,CAAW,UAAAnF,CAAC;AAAA,qBAAIA,CAAC,CAAC2pB,WAAF,IAAiB3pB,CAAC,CAAC+rB,OAAF,KAAc1d,CAAC,CAAC0d,OAArC;AAAA,aAAZ,CAApB;AACA,mBAAO,MAAP,OAAO,CAAP,kBACO1d,CADP,CAAO,EACC;AACJ4xD,6BAAe,EAAE,CAACD;AADd,aADD,CAAP;AAIH,WANM,CAAP;AAOH;;;;;;AAhBL;;;uBAGaD,e;AAAe,K;;;;YAAfA,e;AAAe;;;;;2BAAfA,e,EAAe;cAH3B,OAAAvuD,IAG2B;eAHtB;AACF9T,cAAI,EAAE;AADJ,S;AAGsB,Q;;;;;;;;;;;;;;;;;;;;;;ACf5B;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACLI;AAA+C;AAAS;;;;;AAA/B;AAAsB;AAAA;;;;;;AAoB3C;AACE;AACF;;;;;AAF2D;AACzD;AAAA;;;ADZV;;;;;QAeawiE,iC;AAZb;AAAA;;AAAA;;AAoBS,aAAA17C,OAAA,GAA+B,EAA/B;AAeA,aAAA27C,qBAAA,GAAwB,IAAI,OAAApd,YAAJ,EAAxB;AAGA,aAAAqd,eAAA,GAAkB,IAAI,OAAArd,YAAJ,EAAlB;AAEG,aAAAsd,aAAA,GAAgB,IAAI,OAAAtd,YAAJ,EAAhB;AAOV,aAAAma,iBAAA,GAAoB,IAAI,QAAA5/B,WAAJ,EAApB;AAGA;;AACO,aAAAz4B,KAAA,GAAQ,IAAI,OAAAzH,eAAJ,CAAqC,EAArC,CAAR;AAEP;;AACO,aAAAkjE,QAAA,GAAW,IAAI,OAAAljE,eAAJ,CAAyC,KAAKonB,OAA9C,CAAX;;AA0GC,aAAAi5C,WAAA,GAAc,UAACpuD,KAAD,EAAiB;AACrC,cAAI,QAAI,CAAClT,OAAL,KAAiB,IAArB,EAA2B;AACzB;AACD;AACD;;;;;AAGA,cAAI,QAAI,CAACA,OAAL,CAAauhE,SAAb,IAA0BruD,KAAK,CAACyE,MAAN,CAAarU,OAAb,CAAqB,yBAArB,MAAoD,IAAlF,EAAyF;AACvF,oBAAI,CAACtD,OAAL,CAAa+1D,UAAb;;AACE,oBAAI,CAAC/1D,OAAL,CAAa,UAAb,EAAyBqD,aAAzB,CAAuCq+D,IAAvC;AACH;AACF,SAXO;AAgBT;;;;mCAtHY;AACT,eAAK0C,qBAAL;AACAr5D,gBAAM,CAACqhC,gBAAP,CAAwB,QAAxB,EAAkC,KAAKk1B,WAAvC,EAAoD,IAApD;AACD;;;oCAEkBp+D,O,EAAsB;AACvC;AACA,cAAIA,OAAO,CAACmlB,OAAR,IAAmBnlB,OAAO,CAACmhE,aAA/B,EAA8C;AAC5C,gBAAInhE,OAAO,CAACmlB,OAAR,IAAmB,CAACnlB,OAAO,CAACmhE,aAAhC,EAA+C;AAC7C,mBAAKtD,iBAAL,CAAuB36D,QAAvB,CAAgC,EAAhC;AACD;;AACD,iBAAKg+D,qBAAL;AACD;;AACD,cAAIlhE,OAAO,CAACohE,UAAZ,EAAwB;AACtB,iBAAKvD,iBAAL,CAAuB36D,QAAvB,CAAgC,EAAhC;AACA,iBAAKg+D,qBAAL;AACD;AAEF;;;gDAE+B;AAAA;;AAC9B,eAAKG,eAAL,GAAuB,KAAKxD,iBAAL,CAAuB3+B,YAAvB,CACpB9rB,IADoB,CAEnB,YAAAkuD,SAAA,CAAU,EAAV,CAFmB,EAGnB,YAAAn5D,GAAA,CAAI,UAAA3C,KAAK;AAAA,mBAAI,OAAOA,KAAP,KAAiB,QAAjB,GAA4BA,KAA5B,GAAoCA,KAAK,KAAIA,KAAK,SAAL,IAAAA,KAAK,WAAL,GAAK,MAAL,GAAAA,KAAK,CAAE+I,OAAX,CAAL,GAA0B/I,KAAK,CAAC+I,OAAhC,GAA0C,EAAlF;AAAA,WAAT,CAHmB,EAInB,YAAApG,GAAA,CAAI,UAAA9J,IAAI;AAAA,mBAAIA,IAAI,GAAG,QAAI,CAACkjE,OAAL,CAAaljE,IAAb,CAAH,GAAwB,QAAI,CAAC8mB,OAAL,CAAa/c,KAAb,EAAhC;AAAA,WAAR,CAJmB,CAAvB;AAMD;;;kCAESyQ,I,EAAuB;AAC/B,iBAAOA,IAAI,KAAIA,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEtK,OAAV,CAAJ,GAAwBsK,IAAI,CAACtK,OAA7B,GAAuC,EAA9C;AACD;;;gCAEeA,O,EAAe;AAC7B,cAAMizD,WAAW,GAAGjzD,OAAO,CAACvE,WAAR,EAApB,CAD6B,CAE7B;;AACA,cAAMsoB,QAAQ,GAAG,KAAKnN,OAAL,CAAajc,MAAb,CAAoB,UAAA8jB,MAAM,EAAI;AAC7C;AACA;AACA,gBAAIw0C,WAAW,CAACplD,QAAZ,CAAqB,GAArB,CAAJ,EAA+B;AAC7B,kBAAMqlD,YAAY,GAAED,WAAW,CAACl9D,KAAZ,CAAkB,GAAlB,CAApB;AACA,kBAAIo9D,UAAU,GAAG,IAAjB;;AACA,mBAAK,IAAI5hE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2hE,YAAY,CAACj9D,MAAjC,EAAyC1E,CAAC,EAA1C,EAA8C;AAC5C,oBAAIktB,MAAM,CAACze,OAAP,CAAevE,WAAf,GAA6BtE,OAA7B,CAAqC+7D,YAAY,CAAC3hE,CAAD,CAAjD,MAA0D,CAAC,CAA/D,EAAkE;AAChE4hE,4BAAU,GAAG,KAAb;AACD;AACF;;AACD,kBAAIA,UAAJ,EAAgB;AACd,uBAAO,IAAP;AACD;AACF,aAd4C,CAe7C;;;AACA,mBAAO10C,MAAM,CAACze,OAAP,CAAevE,WAAf,GAA6BtE,OAA7B,CAAqC87D,WAArC,IAAoD,CAAC,CAA5D;AACD,WAjBgB,CAAjB;AAkBA,eAAKT,eAAL,CAAqB/b,IAArB,CAA0Bwc,WAA1B;AACA,eAAKV,qBAAL,CAA2B9b,IAA3B,CAAgC1yB,QAAhC;AACA,iBAAOA,QAAP;AACD;AAED;;;;;;;iCAIgBq9B,S,EAA4B;AAC1C,eAAKnqD,KAAL,CAAWiL,IAAX,CAAgBk/C,SAAhB;;AACA,cAAI,KAAKI,SAAT,EAAoB;AAClB,iBAAKA,SAAL,CAAe,KAAK5qC,OAAL,CAAarf,IAAb,CAAkB,UAAAmE,CAAC;AAAA,qBAAIA,CAAC,CAACzE,KAAF,KAAYmqD,SAAS,CAACnqD,KAA1B;AAAA,aAAnB,CAAf;AACD;AACF;AAED;;;;;;;mCAIkBA,K,EAAiC;AACjD,cAAIA,KAAK,IAAI,IAAb,EAAmB;AACjB,iBAAKA,KAAL,CAAWiL,IAAX,CAAgBjL,KAAK,CAACA,KAAtB;AACD;AACF;AAED;;;;;;;yCAIwBlH,E,EAAkC;AACxD,eAAKyxD,SAAL,GAAiBzxD,EAAjB;AACD;AAED;;;;;;;0CAIyBA,E,EAAkC;AACzD,eAAK0xD,QAAL,GAAgB1xD,EAAhB;AACD;;;wCAEsB;AACrB,cAAI,KAAKu/D,iBAAL,CAAuBr4D,KAAvB,KAAiC,EAArC,EAAyC;AACvC,iBAAKw7D,aAAL,CAAmBhc,IAAnB,CAAwB,IAAxB;AACD;AACF;;;sCAciB;AAChBn9C,gBAAM,CAACm4D,mBAAP,CAA2B,QAA3B,EAAqC,KAAK5B,WAA1C,EAAuD,IAAvD;AACD;;;;;;AA9KH;;;uBAYayC,iC;AAAiC,K;;;YAAjCA,iC;AAAiC,qD;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;uCARjC,CACT;AACElpB,eAAO,EAAE,QAAAsY,iBADX;AAEEC,mBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,iBAAM0Q,iCAAN;AAAA,SAAX,CAFf;AAGEzQ,aAAK,EAAE;AAHT,OADS,C,GAMV,uB;AAAA,c;AAAA,a;AAAA,+a;AAAA;AAAA;ACvBH;AACI;AACA;AAGE;AASE;AAAA,mBAAS,IAAAuR,aAAA,EAAT;AAAwB,WAAxB;AATF;AAWA;AAGE;AAAA,mBAAkB,IAAAz+D,QAAA,qBAAlB;AAA+C,WAA/C;AAEA;;AAGF;AACF;AACJ;;;;;;AAzBe;AAAA;AAYP;AAAA;AAHA,8DAAiC,iBAAjC,EAAiC,GAAjC,EAAiC,aAAjC,EAAiC,eAAjC;AAQA;AAAA;AAGY;AAAA;;;;;;;;;;2BDIP29D,iC,EAAiC;cAZ7C,OAAAza,SAY6C;eAZnC;AACTlnD,kBAAQ,EAAE,gCADD;AAETmnD,qBAAW,EAAE,4CAFJ;AAGTC,mBAAS,EAAE,CAAC,4CAAD,CAHF;AAITvD,mBAAS,EAAE,CACT;AACEpL,mBAAO,EAAE,QAAAsY,iBADX;AAEEC,uBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,qBAAM0Q,iCAAN;AAAA,aAAX,CAFf;AAGEzQ,iBAAK,EAAE;AAHT,WADS;AAJF,S;AAYmC,Q;;gBAC3C,OAAAxuD;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAGA,OAAA2kD;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAeA,OAAAsD,S;iBAAU,S;;;;;;;;;;;;;;;;;;;;;;;;AEpEb;AAAA;AAAA;;AAQA;AAAA;AAAA;;;;;AAEA;;;;;;;;;;;QASa+X,qB;;;;;AAMT,qCAAoBC,KAApB,EAA6C;AAAA;;AAAA;;AACzC;AADgB,iBAAAA,KAAA,GAAAA,KAAA;AAFZ,iBAAAC,UAAA,GAAa,KAAb;AAEqC;AAE5C;;;;mCAEc;AACX;AACA,eAAKC,gBAAL;AACH;;;2CAEyB;AACtB,cAAI,KAAKrO,QAAL,IAAiB,CAAC,KAAKoO,UAA3B,EAAuC;AACnC,iBAAKA,UAAL,GAAkB,IAAlB;AACA,iBAAKD,KAAL,CAAWG,kBAAX,CAA8B,KAAKtO,QAAnC;AACA,mBAAO,IAAP;AACH;;AACD,iBAAO,KAAP;AACH;;;0CAEqB;AAAA;;AAClB,cAAI,CAAC,KAAKoO,UAAV,EAAsB;AAClB95D,mBAAO,CAACV,GAAR,CAAY,0DAAZ;AACA7I,sBAAU,CAAC,YAAM;AACbuJ,qBAAO,CAACV,GAAR,CAAY,6BAAZ,EAA2C,QAAI,CAACosD,QAAhD;;AACA,kBAAI,CAAC,QAAI,CAACqO,gBAAL,EAAL,EAA8B;AAC1B/5D,uBAAO,CAACV,GAAR,CAAY,gDAAZ;AACA7I,0BAAU,CAAC,YAAM;AACb,sBAAI,CAAC,QAAI,CAACsjE,gBAAL,EAAL,EAA8B;AAC1B/5D,2BAAO,CAAC+Y,KAAR,CAAc,yBAAd;AACH;AACJ,iBAJS,EAIP,IAJO,CAAV;AAKH;AACJ,aAVS,CAAV;AAWH;AACJ;;;sCAEiB;AACd;;AACA,eAAK+gD,UAAL,GAAkB,KAAlB;AACH;;;;MA5CsC,OAAA/iE,a;;AAA3C;;;uBAAa6iE,qB,EAAqB,yC;AAAA,K;;;YAArBA,qB;AAAqB;AAAA;+BACnB,OAAAK,W,EAAa,I;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpB5B;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;ACCI;AAAK;AAAA;AAAA;AAAA,iBAAS,OAAAvyC,MAAA,OAAT;AAAsB,SAAtB;AACH;AACF;;;;;AAFkE;;;;;;QDcvDwyC,yB,GAKX,qCAAc;AAAA;;AAHJ,WAAAxyC,MAAA,GAAS,IAAI,OAAAg0B,YAAJ,EAAT;AAGM,K;;AAVlB;;;uBAKawe,yB;AAAyB,K;;;YAAzBA,yB;AAAyB,yC;AAAA;AAAA;yBACzB,OAAAD,W,EAAW,I;;;;;;;;;;;;;;;;;;;;;;AChB1B;;;;;;;;;2BDeeC,yB,EAAyB;cALrC,OAAA9b,SAKqC;eAL3B;AACTlnD,kBAAQ,EAAE,oBADD;AAETmnD,qBAAW,EAAE,qCAFJ;AAGTC,mBAAS,EAAE,CAAC,qCAAD;AAHF,S;AAK2B,Q;;;;gBACnC,OAAAuD,S;iBAAU,OAAAoY,W;;;gBACV,OAAA1b;;;gBACA,OAAA3kD;;;;;;;;;;;;;;;;;;;;;;;;AElBL;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACSI;AAAkD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAuK;AAAiB;;;;;;AAAzH;AAA+B;AAAyE;AAAA;;;;;;;;;;;QDO9MugE,kB;AAIX,oCAAc;AAAA;;AAFP,aAAAC,QAAA,GAAoB,KAApB;AAIN;;;;mCACO;AACN,eAAKl1C,QAAL,GAAgB,KAAKrU,IAAL,CAAUwpD,eAA1B;AACD;;;uCAEqBr3D,I,EAAqB;qBAAA,CACzC;;;AACA,eAAK6N,IAAL,CAAUwpD,eAAV,GAA4Br3D,IAA5B;AACA,sBAAK6N,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAEypD,gBAAX,MAA2B,MAAI,KAAKzpD,IAAT,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAEypD,gBAAF,CAAmBt3D,IAAnB,CAAxC;AACD;;;;;;AApBH;;;uBAKam3D,kB;AAAkB,K;;;YAAlBA,kB;AAAkB,iC;AAAA;AAAA;AAAA,O;AAAA,c;AAAA,c;AAAA,8e;AAAA;AAAA;ACdjC;AAAgL;AAAA;AAAA;AAC9K;AAAoD;AAAkC;AACtF;AACI;AACJ;AACF;AACA;AACI;AACJ;;;;;;AAR8E;AAA5D,mDAA+B,SAA/B,EAA+B,qFAA/B;AACoC;AAAA;AAE9B;AAAA;AAGM;AAAA;AACX;AAAA;;;;;;;;;2BDOJA,kB,EAAkB;cAL9B,OAAA/b,SAK8B;eALpB;AACTlnD,kBAAQ,EAAE,YADD;AAETmnD,qBAAW,EAAE,6BAFJ;AAGTC,mBAAS,EAAE,CAAC,6BAAD;AAHF,S;AAKoB,Q;;;;gBAC5B,OAAA1kD;;;;;;;;;;;;;;;;;;;;;;;;AEjBL;AAAA;AAAA;;AAaE;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;QAQa2gE,2B;AAOX,2CACUC,OADV,EAEUzT,UAFV,EAGU0T,gBAHV,EAIUC,QAJV,EAI6B;AAAA;;AAHnB,aAAAF,OAAA,GAAAA,OAAA;AACA,aAAAzT,UAAA,GAAAA,UAAA;AACA,aAAA0T,gBAAA,GAAAA,gBAAA;AACA,aAAAC,QAAA,GAAAA,QAAA;AAVF,aAAAC,cAAA,GAAiB,KAAjB;AAEA,aAAAC,yBAAA,GAA4B,OAAAhkE,YAAA,CAAaikE,KAAzC;AAGE,aAAAC,aAAA,GAAgB,IAAI,OAAApf,YAAJ,EAAhB;AAQT;;;;mCACO,CACN;AACA;AACA;AACD;;;0CACc,CAEd;;;yCAGa;AACZ,eAAKif,cAAL,GAAsB,KAAKI,eAAL,EAAtB,GAA+C,KAAKC,YAAL,EAA/C;AAED;;;uCAEW;AAAA;;AAAA,cACLC,OADK,GACM,KAAKC,aADX,CACLD,OADK;AAEV,eAAKC,aAAL,CAAmBD,OAAnB,GAA6BA,OAAO,KAAI,EAAX,GAAgBA,OAAhB,aAA6B,KAAKlU,UAAL,CAAgB5uD,aAAhB,CAA8BgjE,WAA3D,OAA7B;AACA,eAAKR,cAAL,GAAsB,IAAtB;AACA,eAAKG,aAAL,CAAmB9d,IAAnB,CAAwB,KAAK2d,cAA7B;AACA,eAAKS,UAAL,GAAkB,KAAKZ,OAAL,CAAaa,MAAb,CAAoB;AACpCC,uBAAW,EAAE,IADuB;AAEpChX,yBAAa,EAAE,kCAFqB;AAGpCiX,0BAAc,EAAE,KAAKf,OAAL,CAAagB,gBAAb,CAA8Bl7B,KAA9B,EAHoB;AAIpCm7B,4BAAgB,EAAE,KAAKjB,OAAL,CACfjS,QADe,GAEfmT,mBAFe,CAEK,KAAK3U,UAFV,EAGf4U,aAHe,CAGD,CACb;AACEC,qBAAO,EAAE,KADX;AAEEC,qBAAO,EAAE,QAFX;AAGEC,sBAAQ,EAAE,KAHZ;AAIEC,sBAAQ,EAAE,KAJZ;AAKEC,qBAAO,EAAE;AALX,aADa,CAHC;AAJkB,WAApB,CAAlB;AAkBA,cAAMC,cAAc,GAAG,IAAI,SAAAC,cAAJ,CACrB,KAAKhB,aAAL,CAAmBiB,WADE,EAErB,KAAK1B,gBAFgB,CAAvB;AAIA,eAAKW,UAAL,CAAgBgB,MAAhB,CAAuBH,cAAvB;AAEA,eAAKrB,yBAAL,GAAiC,KAAKyB,sBAAL,GAA8B9jE,SAA9B,CAC/B;AAAA,mBAAM,QAAI,CAACwiE,eAAL,EAAN;AAAA,WAD+B,CAAjC;AAGD;;;iDAE6B;AAC5B,cAAMuB,cAAc,GAAG,KAAKlB,UAAL,CAAgBmB,aAAhB,EAAvB;AACA,cAAMC,WAAW,GAAG,KAAKpB,UAAL,CAAgBqB,WAAhB,EAApB;AACA,cAAMC,cAAc,GAAG,KAAKxB,aAAL,CAAmBxzC,MAA1C;AAEA,iBAAO,OAAAi1C,KAAA,CAAML,cAAN,EAAsBE,WAAtB,EAAmCE,cAAnC,CAAP;AACD;;;0CAEsB;AACrB,cAAI,CAAC,KAAKtB,UAAN,IAAoB,CAAC,KAAKT,cAA9B,EAA8C;AAC5C;AACD;;AAED,eAAKC,yBAAL,CAA+B/jE,WAA/B;AACA,eAAK8jE,cAAL,GAAsB,KAAtB;AACA,eAAKG,aAAL,CAAmB9d,IAAnB,CAAwB,KAAK2d,cAA7B;AACA,eAAKS,UAAL,CAAgBwB,MAAhB;AACD;;;sCAEU;AACT,cAAI,KAAKxB,UAAT,EAAqB;AACnB,iBAAKA,UAAL,CAAgByB,OAAhB;AACD;AACF;;;;;;AA7FH;;;uBAMatC,2B,EAA2B,gC,EAAA,mC,EAAA,yC,EAAA,kC;AAAA,K;;;YAA3BA,2B;AAA2B,iD;AAAA;AAAA;;mBAA3B,oB;AAAgB,W;;;;;;;;;;;;;2BAAhBA,2B,EAA2B;cANvC,OAAAtjE,SAMuC;eAN7B;AACTC,kBAAQ,EAAE,sBADD;AAET0c,cAAI,EAAE;AACJ,uBAAW;AADP;AAFG,S;AAM6B,Q;;;;;;;;;;;;gBAKrC,OAAAha,K;iBAAM,oB;;;gBACN,OAAA2kD;;;;;;;;;;;;;;;;;;;;;;;;AC7BL;AAAA;AAAA;;AAQA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;AAaY;AACI;AAAiB;AAAS;AAC1B;;AAAqE;AACzE;;;;;AAFqB;AAAA;AACc;AAAA;;;;;;AAEnC;AACI;AACI;AACJ;AACJ;;;;;;AACA;AAAmE;AAAe;;;;;AAAf;AAAA;;;;;;AAE/D;;;;;;QAMHue,uB;AAWT,uCAAoBC,eAApB,EAAsD;AAAA;;AAAlC,aAAAA,eAAA,GAAAA,eAAA;AAPX,aAAA5N,SAAA,GAAY,KAAZ;AAIF,aAAA6N,UAAA,GAAa,IAAI,OAAAjnE,eAAJ,CAAoB,KAApB,CAAb;AAGiD;;;;mCAEhD;AAAA;;AACJ,eAAKknE,oBAAL,GAA4B,KAAKF,eAAL,CAAqBr8B,SAArB,CAA+BnoC,SAA/B,CAAyC,YAAM;AACvE,gBAAI,QAAI,CAAC2kE,cAAT,EAAyB;AACrB,sBAAI,CAACA,cAAL,CAAoB58B,KAApB,GADqB,CACQ;;AAChC;AACJ,WAJ2B,CAA5B;AAKH;;;sCAEU;AACP,eAAK28B,oBAAL,CAA0BpmE,WAA1B;AACH;;;;;;AAnDL;;;uBA4BaimE,uB,EAAuB,wC;AAAA,K;;;YAAvBA,uB;AAAuB,0C;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;AAzB5B;AAKI;AAAA,mBAAU,IAAAE,UAAA,MAAgB,IAAhB,CAAV;AAA+B,WAA/B,EAAgC,QAAhC,EAAgC;AAAA,mBACtB,IAAAA,UAAA,MAAgB,KAAhB,CADsB;AACA,WADhC;;AAGA;AAIA;AAKA;;AACA;AAGJ;;;;AAjBI;AAFA;AAM4B;AAAA;AAIA;AAAA;AAKL;AAAA;;;;;;;;;;2BAQtBF,uB,EAAuB;cA5BnC,OAAA1e,SA4BmC;eA5BzB;AACPlnD,kBAAQ,EAAE,qBADH;AAEPw0D,kBAAQ,4rCAFD;AA0BPpN,mBAAS,EAAE,CAAC,kCAAD;AA1BJ,S;AA4ByB,Q;;;;;;gBAE/B,OAAA1kD;;;gBACA,OAAAA;;;gBACA,OAAAA;;;gBAEA,OAAAioD,S;iBAAU,gB;;;;;;;;;;;;;;;;;;;;;;;;AC9Cf;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;QAgBasb,2B;AACT,2CAAmB98B,SAAnB,EACoC+8B,UADpC,EACyE;AAAA;;AADtD,aAAA/8B,SAAA,GAAAA,SAAA;AACiB,aAAA+8B,UAAA,GAAAA,UAAA;AACnC;;;;mCACO,CAAW;;;+BAEL;;;AACV,qBAAKA,UAAL,MAAe,IAAf,IAAe,aAAf,GAAe,MAAf,GAAe,GAAEC,QAAF,EAAf;AAA6B,eAAKh9B,SAAL,CAAeC,KAAf;AAChC;;;;;;AAdL;;;uBAMa68B,2B,EAA2B,qC,EAAA,qBAExB,SAAAhf,eAFwB,C;AAET,K;;;YAFlBgf,2B;AAA2B,2C;AAAA,e;AAAA,a;AAAA,+N;AAAA;AAAA;ACjBxC;AACI;AACI;AACH;AACE;AACE;AACA;AAAM;AAA0B;AAClC;AACA;AAA2B;AAAuB;AACpD;AACD;AACD;AACA;AACG;AAA+D;AAAA,mBAAiB,IAAArX,IAAA,EAAjB;AAAuB,WAAvB;AAAyB;AAC3F;AACH;;;;AAde;AAAA;AAKA;AAAA;AAEmB;AAAA;AAKN;AAAA;;;;;;;;;;2BDIfqX,2B,EAA2B;cANvC,OAAA/e,SAMuC;eAN7B;AACPlnD,kBAAQ,EAAE,sBADH;AAEPmnD,qBAAW,EAAE,qCAFN;AAGPC,mBAAS,EAAE,CAAC,uCAAD,CAHJ;AAIPga,uBAAa,EAAE,OAAAC,iBAAA,CAAkB34C;AAJ1B,S;AAM6B,Q;;;;;;kBAE/B,OAAAqrB,M;mBAAO,SAAAkT,e;;;;;;;;;;;;;;;;;;;;;;;;;AEnBhB;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;ACOY;AAAqC;AAAuB;AAAsB;AAAe;AAAQ;AAAW;;;;;;AAFxH;AACI;AACA;AACJ;;;;;AAFI;AAAA;AACM;AAAA;;;;;;AAEV;AACI;AAEJ;;;;;AAFI;AAAA;;;;;;AASA;AACI;AACJ;;;;;;AADI;AAAA;;;;;;;;;;;;;;;;;;;;;;AAMZ;AAIQ;AAAA;AAAA;AAAA;AAAA;AAJR;AASA;;;;;AAJQ;AAIR;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;AACA;AAIQ;AAAA;AAAA;AAAA;AAAA;AAJR;AASA;;;;;AAJQ;AAIR;AAAA;AAAA;;;;QD9BSf,uB;AAUX,uCAA6CxY,KAA7C,EAA+E;AAAA;;AAAlC,aAAAA,KAAA,GAAAA,KAAA;AAF5B,aAAA58B,KAAA,GAAQ,IAAI,OAAA0zC,YAAJ,EAAR;AAIhB;;;;mCAEc;AACb,eAAKx8C,QAAL,GAAgB,KAAK0lC,KAAL,CAAW1lC,QAA3B;AACA,eAAK0sC,SAAL,GAAiB,KAAKhH,KAAL,CAAWgH,SAA5B;AACA,eAAK4R,SAAL,GAAiB,KAAK5Y,KAAL,CAAW4Y,SAA5B;AACA,eAAKC,cAAL,GAAsB,KAAK7Y,KAAL,CAAW6Y,cAAjC;AACA,eAAK1+B,MAAL,GAAc,KAAK6lB,KAAL,CAAW7lB,MAAzB;AACD;;;mCAEiBzkB,I,EAAc;AAC9B,cAAM4jD,MAAM,GAAG,IAAI,UAAA1yC,MAAJ,CAAW;AAAClR,gBAAI,EAAEA,IAAI,GAAC,IAAZ;AAAmBwnB,uBAAW,EAAE,KAAhC;AAAuCC,uBAAW,EAAE,KAAK6iB,KAAL,CAAW1lC;AAA/D,WAAX,CAAf;AACA,cAAMo+D,WAAW,GAAG,UAAAn+D,OAAA,CAAQ++C,MAAR,EAAgB,KAAKh/C,QAArB,CAApB;AACA,cAAMqH,OAAO,GAAG23C,MAAM,CAACtiD,UAAP,CAAkB,iBAAlB,CAAhB;AACA,2BAAU2K,OAAV,SAAoB+2D,WAAW,GAAG,UAAH,GAAgB,EAA/C;AACD;;;oCAEc;AACb,eAAKt1D,KAAL,CAAWg1C,IAAX,CAAgB;AAAE/+B,kBAAM,EAAE;AAAV,WAAhB;AACD;;;gCAEW;AACV,eAAKjW,KAAL,CAAWg1C,IAAX,CAAgB;AAAE/+B,kBAAM,EAAE;AAAV,WAAhB;AACD;;;+BAEU;AACT,eAAKjW,KAAL,CAAWg1C,IAAX,CAAgB;AAAE/+B,kBAAM,EAAE;AAAV,WAAhB;AACD;;;;;;AA5CH;;;uBAKam/B,uB,EAAuB,qBAUd,SAAAe,eAVc,C;AAUC,K;;;YAVxBf,uB;AAAuB,0C;AAAA;AAAA;AAAA,O;AAAA,e;AAAA,a;AAAA,glB;AAAA;AAAA;AClBpC;AACI;AACI;AACJ;AACJ;AACA;AACI;AACI;AAAI;AAAgC;AACpC;AAIA;AAIJ;AACA;AACI;AACI;AACJ;AACA;AACI;AAGJ;AACJ;AACJ;AACA;AACI;AAUA;AAUJ;;;;AA1CY;AAAA;AACc;AAAA;AAIA;AAAA;AAUI;AAAA;AAalB;AAAA;AAUA;AAAA;;;;;;;;;2BD3BCA,uB,EAAuB;cALnC,OAAAgB,SAKmC;eALzB;AACTlnD,kBAAQ,EAAE,qBADD;AAETmnD,qBAAW,EAAE,kCAFJ;AAGTC,mBAAS,EAAE,CAAC,kCAAD;AAHF,S;AAKyB,Q;;;;kBAUrB,OAAArT,M;mBAAO,SAAAkT,e;;;;;gBAFnB,OAAAI;;;;;;;;;;;;;;;;;;;;;;;;AE1BH;AAAA;AAAA;;AAUA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;ACUY;AAAsC;AAAU;;;;;AAAV;AAAA;;;;;;AAc1B;;;;;;AACA;AAAsC;AAAsC;;;;;AAAtC;AAAA;;;;;;;;AAX9C;AACI;AAGI;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACJ;AACJ;;;;;AAPQ;AAAA,uDAAkC,QAAlC,EAAkC,cAAlC;AADA;AAIA;AAAA;AACiB;AAAA;AACE;AAAA;;;;;;AAZ/B;AACI;;AAcJ;;;;;;AAdQ;AAAA;;;;QD4BPgf,6B;;;;;AAZb;AAAA;;AAAA;;;AAgBI;;AACgB,iBAAAC,SAAA,GAAY,SAAZ;AAKhB;;AACiB,iBAAA9gE,KAAA,GAAQ,IAAI,OAAAg/C,YAAJ,EAAR;AAED,iBAAA7mB,KAAA,GAAQ,IAAIxtB,KAAJ,CAAU,CAAV,EAAa6pC,IAAb,CAAkB,CAAlB,CAAR;AACT,iBAAAusB,cAAA,GAAyB,UAAA15D,OAAA,EAAzB,CA1BX,CA4BI;;AACA;;AACO,iBAAA/F,MAAA,GAAS,CAAT;AACP;;AACO,iBAAAk1D,UAAA,GAAa,CAAC,MAAd;AACP;;AACO,iBAAAC,UAAA,GAAa,MAAb;AACP;;AACO,iBAAAC,SAAA,GAA0B,EAA1B;AACP;;AACO,iBAAAC,UAAA,GAAa,UAAAtvD,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB0B,UAApB,CAA+B,WAA/B,CAAb;AACP;;AACO,iBAAA03D,YAAA,GAAe,EAAf;AAKP;;AACQ,iBAAAC,UAAA,GAAa,KAAb;AACR;;AACQ,iBAAAC,YAAA,GAAe,WAAf;AAMA,iBAAAkK,MAAA,GAAS,UAAA35D,OAAA,EAAT;;AA+KQ,iBAAA45D,gBAAA,GAAmB,UAACrnE,EAAD;AAAA,iBAA6B,SAAKyxD,SAAL,GAAiBzxD,EAA9C;AAAA,SAAnB;;AACA,iBAAAsnE,iBAAA,GAAoB,UAACtnE,EAAD;AAAA,iBAA6B,SAAK0xD,QAAL,GAAgB1xD,EAA7C;AAAA,SAApB;;AAtOpB;AAuOC;;;;mCA3KkB;AACX,eAAKm9D,aAAL;AACA,eAAKC,qBAAL;AACH;;;oCAEkB17D,O,EAAsB;AACrC,cAAIA,OAAO,CAACmlB,OAAZ,EAAqB;AACjB,iBAAKw2C,aAAL;AACH;;AACD,cAAI37D,OAAO,CAAC47D,QAAZ,EAAsB;AAClB,iBAAKH,aAAL;AACH;AACJ;AAED;;;;gCACezwD,I,EAAkB;AAC7B,eAAKy6D,cAAL,GAAsBz6D,IAAI,CAACxF,KAA3B;;AACA,cAAI,KAAKuqD,SAAT,EAAoB;AAChB,iBAAKA,SAAL,CAAe,KAAK0V,cAApB;AACH;;AACD,eAAKhK,aAAL;AACH;AAED;;;;;;qCAGiB;AACb,cAAI,CAAC,KAAKgK,cAAV,EAA0B;AACtB;AACH;;AACD,cAAMh8C,GAAG,GAAG,KAAKi8C,MAAL,CAAY15D,YAAZ,CAAyB,OAAzB,CAAZ;;AACA,cAAM65D,kBAAkB,GAAG,KAAKJ,cAAL,CAAoBz5D,YAApB,CAAiC,OAAjC,CAA3B;;AACA,cAAI65D,kBAAkB,CAAC3/C,KAAvB,EAA8B;AAC1B,gBAAM21C,UAAU,GAAGgK,kBAAkB,CAACtqC,QAAnB,CACf9R,GADe,EAEf,QAFe,EAGf,QAHe,CAAnB;;AAKA,gBAAI,KAAKzjB,MAAL,KAAgB61D,UAApB,EAAgC;AAC5B,mBAAK71D,MAAL,GAAcpD,IAAI,CAACg2B,KAAL,CAAWijC,UAAX,CAAd;AACA,mBAAKn3D,KAAL,CAAWsgD,IAAX,CAAgB,KAAKh/C,MAArB;AACH;;AACD,iBAAKy1D,aAAL;AACH;AACJ;AAED;;;;;;wCAGoB;AAChB,cAAI,KAAKt2C,OAAT,EAAkB;AACd;AACA,gBAAI,KAAKA,OAAL,CAAawhC,UAAjB,EAA6B;AACzB,kBAAMmV,KAAK,GAAG,KAAK4J,MAAL,CAAY15D,YAAZ,CAAyB,OAAzB,CAAd;;AACA,mBAAKgpB,MAAL,GAAc,KAAK7P,OAAL,CAAawhC,UAAb,CAAwB36C,YAAxB,CAAqC,KAArC,CAAd;AACA,mBAAKkvD,UAAL,GAAkBt4D,IAAI,CAACg2B,KAAL,CACd,KAAK5D,MAAL,CACKhpB,YADL,CACkB,OADlB,EAEKuvB,QAFL,CAEcugC,KAFd,EAEqB,QAFrB,EAE+B,QAF/B,CADc,CAAlB;AAKH,aARD,MAQO,IAAI,KAAK9mC,MAAT,EAAiB;AACpB,mBAAKA,MAAL,GAAc,IAAd,CADoB,CACA;;AACpB,mBAAKkmC,UAAL,GAAkB,CAAC,MAAnB;AACH,aAba,CAcd;;;AACA,gBAAI,KAAK/1C,OAAL,CAAayhC,WAAjB,EAA8B;AAC1B,kBAAMkV,OAAK,GAAG,KAAK4J,MAAL,CAAY15D,YAAZ,CAAyB,OAAzB,CAAd;;AACA,mBAAKipB,IAAL,GAAY,KAAK9P,OAAL,CAAayhC,WAAb,CAAyB56C,YAAzB,CAAsC,KAAtC,CAAZ;AACA,mBAAKmvD,UAAL,GAAkB,KAAKlmC,IAAL,CACbjpB,YADa,CACA,OADA,EAEbuvB,QAFa,CAEJugC,OAFI,EAEG,QAFH,EAEa,QAFb,CAAlB;AAGH,aAND,MAMO,IAAI,KAAK7mC,IAAT,EAAe;AAClB,mBAAKA,IAAL,GAAY,IAAZ;AACA,mBAAKkmC,UAAL,GAAkB,MAAlB;AACH;;AACD,gBAAI,KAAKh2C,OAAL,CAAaq2C,YAAjB,EAA+B;AAC3B,mBAAKA,YAAL,GAAoB,KAAKr2C,OAAL,CAAaq2C,YAAb,IAA6B,WAAjD;AACH;;AACD,gBAAI,KAAKr2C,OAAL,CAAao2C,UAAjB,EAA6B;AACzB,mBAAKA,UAAL,GAAkB,KAAKp2C,OAAL,CAAao2C,UAAb,IAA2B,KAA7C;AACA,mBAAKG,qBAAL;AACH,aA/Ba,CAgCd;;;AACA,iBAAKD,aAAL;AACH;AACJ;AAED;;;;;;wCAGqB;AACjB,eAAKiK,MAAL,GAAc,IAAI,UAAAlyD,MAAJ,CAAW;AAAElR,gBAAI,EAAEJ,IAAI,CAACunB,GAAL,EAAR;AAAoBK,uBAAW,EAAE,CAAC,KAAK5iB,QAAvC;AAAiD6iB,uBAAW,EAAE,KAAK7iB;AAAnE,WAAX,CAAd;;AACA,cAAM2+D,kBAAkB,GAAG,KAAKH,MAAL,CAAYviE,QAAZ,CAAqB;AAAEw5B,kBAAM,EAAE,KAAK32B;AAAf,WAArB,CAA3B;;AACA,cAAMipC,MAAM,GAAG,KAAKw2B,cAAL,IAAuB,UAAA15D,OAAA,EAAtC;AACA,cAAI/H,SAAS,GAAG6hE,kBAAkB,CAC7B3iE,QADW,CACF;AAAEuD,eAAG,EAAE;AAAP,WADE,EAEXvD,QAFW,CAEF;AAAEkE,mBAAO,EAAE;AAAX,WAFE,EAGX2M,aAHW,CAGG;AAAE8oB,iBAAK,EAAE;AAAT,WAHH,CAAhB;AAIA,eAAKu+B,SAAL,GAAiB,EAAjB;;AACA,eAAK,IAAIz6D,IAAC,GAAG,CAAb,EAAgBA,IAAC,GAAG,EAApB,EAAwBA,IAAC,EAAzB,EAA6B;AACzB,iBAAKy6D,SAAL,CAAejxD,IAAf,CAAoB;AAChB3E,mBAAK,EAAExB,SADS;AAEhBuK,qBAAO,EAAEvK,SAAS,CAACJ,UAAV,CAAqB,GAArB,CAFO;AAGhBqrC,oBAAM,EAAEA,MAAM,CAACpO,UAAP,CAAkB78B,SAAlB,EAA6B,KAA7B,CAHQ;AAIhBg4D,uBAAS,EAAE,CAAC6J,kBAAkB,CAAChlC,UAAnB,CAA8B78B,SAA9B,EAAyC,OAAzC,CAJI;AAKhBqG,mBAAK,EAAE,KAAKuxD,QAAL,GACD,KAAKA,QAAL,CAAc53D,SAAS,CAACJ,UAAV,CAAqB,YAArB,CAAd,KAAqD,CADpD,GAED,CAPU;AAQhBs6B,sBAAQ,EACJ,CAAC,KAAKlJ,MAAL,GAAchxB,SAAS,CAACiI,EAAV,GAAe,KAAK+oB,MAAL,CAAY/oB,EAAzC,GAA8C,KAA/C,MACC,KAAKgpB,IAAL,GAAYjxB,SAAS,CAACiI,EAAV,GAAe,KAAKgpB,IAAL,CAAUhpB,EAArC,GAA0C,KAD3C,CATY;AAWhB6vD,mBAAK,EAAE,KAAK4J,MAAL,CAAY7kC,UAAZ,CAAuB78B,SAAvB,EAAkC,KAAlC;AAXS,aAApB;AAaAA,qBAAS,GAAGA,SAAS,CAACb,QAAV,CAAmB;AAAE4wB,kBAAI,EAAE;AAAR,aAAnB,CAAZ;AACH;;AACD,eAAKsnC,UAAL,GAAkBwK,kBAAkB,CAACjiE,UAAnB,CAA8B,KAAK43D,YAAnC,CAAlB;AACH;AAED;;;;;;gDAGgC;AAC5B,cAAIl5D,IAAI,GAAG,KAAKojE,MAAL,CAAY15D,YAAZ,CAAyB,MAAzB,CAAX;;AACA,eAAKsvD,YAAL,GAAoB,EAApB;;AACA,eAAK,IAAI36D,IAAC,GAAG,CAAb,EAAgBA,IAAC,GAAG,CAApB,EAAuBA,IAAC,EAAxB,EAA4B;AACxB,iBAAK26D,YAAL,CAAkBnxD,IAAlB,CAAuB7H,IAAI,CAACsB,UAAL,CAAgB,KAAK23D,UAArB,CAAvB;AACAj5D,gBAAI,GAAGA,IAAI,CAACa,QAAL,CAAc;AAAE4wB,kBAAI,EAAE;AAAR,aAAd,CAAP;AACH;AACJ;AAED;;;;;;;;oCAKmBvuB,K,EAAa;AAC5B,cAAM02D,UAAU,GAAGt5D,IAAI,CAACq+B,GAAL,CACf,KAAKk6B,UADU,EAEfv4D,IAAI,CAACmD,GAAL,CAAS,KAAKm1D,UAAd,EAA0B,KAAKl1D,MAAL,GAAcR,KAAxC,CAFe,CAAnB;AAIA,eAAKQ,MAAL,GAAcpD,IAAI,CAACg2B,KAAL,CAAWsjC,UAAX,CAAd;AACA,eAAKT,aAAL;AACA,eAAK/2D,KAAL,CAAWsgD,IAAX,CAAgB,KAAKh/C,MAArB;AACH;AAED;;;;;;gCAGe;AACX,cAAMA,MAAM,GAAG,KAAKA,MAApB;AACA,eAAKA,MAAL,GAAcpD,IAAI,CAACg2B,KAAL,CACV,KAAK8sC,MAAL,CAAYnqC,QAAZ,CAAqB,KAAKkqC,cAA1B,EAA0C,QAA1C,EAAoD,QAApD,CADU,CAAd;AAGA,cAAIz/D,MAAM,KAAK,KAAKA,MAApB,EAA4B,KAAKy1D,aAAL;AAC5B,eAAK/2D,KAAL,CAAWsgD,IAAX,CAAgB,KAAKh/C,MAArB;AACH;AAED;;;;;;;mCAIkBR,K,EAAe;AAC7B,cAAIA,KAAJ,EAAW;AACP,iBAAKigE,cAAL,GAAsBjgE,KAAtB;AACA,iBAAK22D,UAAL;AACA,iBAAKV,aAAL;AACH;AACJ;;;4BA3KqB;;;AAClB,iBAAO,YAAKgK,cAAL,MAAmB,IAAnB,IAAmB,aAAnB,GAAmB,MAAnB,GAAmB,GAAE17C,WAArB,KAAoC,EAA3C;AACH;;;;MA7CO,OAAArsB,S;;AAbZ;;;6DAYa6nE,6B;AAA6B,K;;;YAA7BA,6B;AAA6B,8C;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA,O;AAAA,uCAR3B,CACP;AACI5tB,eAAO,EAAE,QAAAsY,iBADb;AAEIC,mBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,iBAAMoV,6BAAN;AAAA,SAAX,CAFjB;AAGInV,aAAK,EAAE;AAHX,OADO,CAQ2B,GAFrC,6BAEqC,EAFrC,uBAEqC,C;AAFrC,e;AAAA,a;AAAA,+Z;AAAA;AAAA;ACpDL;AACI;AACI;AAII;AAAA,mBAAS,IAAAgM,WAAA,CAAY,IAAC,CAAb,CAAT;AAAwB,WAAxB;AAEA;AACJ;AACA;AAAmB;AAAA,mBAAY,IAAAh6D,KAAA,EAAZ;AAAmB,WAAnB;AAAqB;AAAgB;AACxD;AAII;AAAA,mBAAS,IAAAg6D,WAAA,CAAY,CAAZ,CAAT;AAAuB,WAAvB;AAEA;AACJ;AACJ;AACA;AACI;AACI;AACJ;AACA;AACI;AAgBJ;AACJ;AACJ;;;;AA3CK;AAKO;AAAA;AAKoC;AAAA;AAIpC;AAAA;AAQI;AAAA;AAGA;AAAA;;;;;;;8ED6BHmJ,6B;;;;2BAAAA,6B,EAA6B;cAZzC,OAAAnf,SAYyC;eAZ/B;AACPlnD,kBAAQ,EAAE,yBADH;AAEPmnD,qBAAW,EAAE,0CAFN;AAGPC,mBAAS,EAAE,CAAC,0CAAD,CAHJ;AAIPvD,mBAAS,EAAE,CACP;AACIpL,mBAAO,EAAE,QAAAsY,iBADb;AAEIC,uBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,qBAAMoV,6BAAN;AAAA,aAAX,CAFjB;AAGInV,iBAAK,EAAE;AAHX,WADO;AAJJ,S;AAY+B,Q;;gBAKrC,OAAAxuD;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAA2kD;;;;;;;;;;;;;;;;;;;;;;;;AEjEL;AAAA;AAAA;;AASA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWY;AAAyD;AAAS;;;;;AAAvD;AAA8C;AAAA;;;;;;AAcrD;AAAwC;;AAAwB;;;;;AAAxB;AAAA;;;;;;;;AAgBpC;AAKI;AAAA;AAAA;AAAA;AAAA;AACH;AACD;;;;;;;;;;;;QAcPuf,yB;;;;;AA5Db;AAAA;;AAAA;;;AA8DI;;AACgB,iBAAAnf,UAAA,GAAqB,UAAA56C,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAArB;AAChB;;AACgB,iBAAA0kD,WAAA,GAAsB,UAAA76C,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoBywB,UAApB,CAA+B,KAA/B,EAAsCxvB,QAAtC,CAA+C;AAAE6tD,eAAK,EAAE;AAAT,SAA/C,CAAtB;AAChB;;AACgB,iBAAAT,QAAA,GAA6B,OAA7B;AAChB;;AACgB,iBAAAvqD,MAAA,GAA2B,QAA3B,CArEpB,CAwEI;;AACgB,iBAAA8yB,OAAA,GAAmB,KAAnB;AAChB;;AACgB,iBAAAitC,SAAA,GAAqB,KAArB;AAMC,iBAAAC,QAAA,GAAW,IAAI,OAAAtiB,YAAJ,EAAX;AAMD,iBAAAuiB,cAAA,GAA0B,IAA1B;AAoBhB;;AACO,iBAAAC,mBAAA,GAAsB,IAAI,OAAAnoE,eAAJ,CAA4B,UAAAgO,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAA5B,CAAtB;;AAoDA,iBAAAikE,oBAAA,GAAuB;AAAA,iBAAM,SAAKC,cAAL,CAAoBjK,UAApB,EAAN;AAAA,SAAvB;;AAeS,iBAAAwJ,gBAAA,GAAmB,UAACrnE,EAAD;AAAA,iBAA6B,SAAKyxD,SAAL,GAAiBzxD,EAA9C;AAAA,SAAnB;;AACA,iBAAAsnE,iBAAA,GAAoB,UAACtnE,EAAD;AAAA,iBAA6B,SAAK0xD,QAAL,GAAgB1xD,EAA7C;AAAA,SAApB;;AAhLpB;AA+LC;;;;mCAnGkB;AACX,cAAI,KAAK+nE,sBAAT,EAAiC;AAC7B,iBAAKC,UAAL,CAAgB,KAAKD,sBAArB;AACH;AACJ;AAcD;;;;;AAqBA;;;;iCAIgBE,U,EAAoB;AAChC;AACA,cAAM9V,QAAQ,GAAG,KAAKyV,mBAAL,CAAyB1gE,KAA1C;AACA,cAAIghE,SAAS,GAAGD,UAAU,CAACrjE,QAAX,CAAoB;AAAE0B,gBAAI,EAAE6rD,QAAQ,CAACxgB,QAAjB;AAA2BttC,kBAAM,EAAE8tD,QAAQ,CAAC1tD,OAA5C;AAAqDL,kBAAM,EAAE+tD,QAAQ,CAAC/tD;AAAtE,WAApB,CAAhB,CAHgC,CAKhC;;AACA,cAAI8jE,SAAS,CAACv6D,EAAV,GAAe,KAAK06C,UAAL,CAAgB16C,EAAnC,EAAuC;AACnCu6D,qBAAS,GAAG,KAAK7f,UAAjB;AACH;;AAED,eAAKuf,mBAAL,CAAyBz1D,IAAzB,CAA8B+1D,SAA9B;;AACA,cAAI,KAAKzW,SAAT,EAAoB;AAChB,iBAAKA,SAAL,CAAeyW,SAAf;AACH;;AAED,eAAKR,QAAL,CAAchhB,IAAd,CAAmBwhB,SAAnB;AACA,eAAKrX,YAAL,GAAoB,KAApB;AACH;;;oCAEkB;AACf,cAAMplC,WAAW,GAAG,KAAK7iB,QAAL,IAAiB,KAAKy/C,UAAL,CAAgB58B,WAArD;AACA,cAAMD,WAAW,GAAG,UAAA/d,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB6nB,WAApB,KAAoCA,WAAxD;AACA,eAAK7mB,QAAL,CAAc,IAAI,UAAAsQ,MAAJ,CAAW;AAAEsW,uBAAW,EAAXA,WAAF;AAAeC,uBAAW,EAAXA;AAAf,WAAX,CAAd;AACH;;;4CAI0B;AACvB,eAAKo8C,oBAAL;AACH;AACD;;AACA;;;;;;;mCAIkBV,c,EAAwB;AACtC,eAAKS,mBAAL,CAAyBz1D,IAAzB,CAA8Bg1D,cAA9B;AACA,eAAKtW,YAAL,GAAoB,KAApB;AACH;;;yCAKuBjxB,Q,EAAmB;AACvC,eAAKA,QAAL,GAAgBA,QAAhB;AACH;AAED;;;;0CACyB;AACrB,eAAK0yB,QAAL,CAAcC,SAAd;AACH;AAED;;;;yCACwB;AACpB,eAAKD,QAAL,CAAcE,QAAd;AACH;;;4BA/EoB;AACjB,iBAAO,KAAKoV,mBAAL,CAAyB9yD,IAAzB,CAA8B,YAAAjL,GAAA,CAAI,UAAA1E,CAAC,EAAI;AAC1C,gBAAM8K,OAAO,GAAG9K,CAAC,CAACG,UAAF,CAAa,iBAAb,CAAhB;AACA,6BAAU2K,OAAV,SAAoB9K,CAAC,CAACo9B,UAAF,CAAa,IAAI,UAAArtB,MAAJ,CAAW;AAAEsW,yBAAW,EAAE,KAAf;AAAsBC,yBAAW,EAAEtmB,CAAC,CAACsmB;AAArC,aAAX,CAAb,EAA6E,KAA7E,IAAsF,UAAtF,GAAmG,EAAvH;AACH,WAHoC,CAA9B,CAAP;AAIH;AAED;;;;4BACkB;AACd,iBAAO,KAAK6mC,QAAL,CAAcK,QAArB;AACH,S,CAED;;;;4BAC2B;AACvB,iBAAO,KAAKiV,mBAAL,CAAyB9yD,IAAzB,CAA8B,YAAAjL,GAAA,CAAI,UAAA1E,CAAC,EAAI;AAC1C,mBAAOA,CAAP;AACH,WAFoC,CAA9B,CAAP;AAIH;;;;MArE0C,OAAA1E,a;;AA5D/C;;;yDA4Da+mE,yB;AAAyB,K;;;YAAzBA,yB;AAAyB,0C;AAAA;AAAA;+BA6CvB,OAAA5U,c,EAAgB,I;+BAChB,oCAAAqU,6B,EAA+B,I;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uCAtD/B,CACP;AACI5tB,eAAO,EAAE,QAAAsY,iBADb;AAEIC,mBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,iBAAM2V,yBAAN;AAAA,SAAX,CAFjB;AAGI1V,aAAK,EAAE;AAHX,OADO,C,GAMV,6B;AAAA,e;AAAA,c;AAAA,wnB;AAAA;AAAA;AAvDG;AAMI;AACI;AAQI;AAAA,mBAAiB,IAAAe,cAAA,EAAjB;AAAiC,WAAjC;AAKJ;AACA;AACI;AAEJ;AACJ;AAEA;AAAgD;AAAA,mBAAS,IAAAsV,iBAAA,EAAT;AAA4B,WAA5B;AAC5C;AAAyB;AAAA,mBAASrV,MAAM,CAACt/C,eAAP,EAAT;AAAiC,WAAjC;AACrB;AAKI;AAAiB,gBAAA5O,QAAA;AAAkB,uBAAAmuD,eAAA;AAAiB,WAApD;;AACH;AACD;AAQJ;AACJ;AACJ;;;;;;AA7CI,qDAA6B,gBAA7B,EAA6B,cAA7B,EAA6B,YAA7B,EAA6B,cAA7B,EAA6B,OAA7B,EAA6B,SAA7B;AAK6B;AAAA;AAErB;AAAA,6DAAqC,WAArC,EAAqC,cAArC,EAAqC,QAArC,EAAqC,WAArC,EAAqC,YAArC,EAAqC,wBAArC;AAQA;AAFA;AAMiB;AAAA;AAGb;AAAA;AAQA;AAAA,kDAAqB,SAArB,EAAqB,+CAArB,EAAqB,SAArB,EAAqB,4DAArB;AASA;AAAA;;;;;;;0EAiBXyU,yB;;;;2BAAAA,yB,EAAyB;cA5DrC,OAAA1f,SA4DqC;eA5D3B;AACPlnD,kBAAQ,EAAE,qBADH;AAEPw0D,kBAAQ,6sEAFD;AAmDPpN,mBAAS,EAAE,CAAC,sCAAD,CAnDJ;AAoDPvD,mBAAS,EAAE,CACP;AACIpL,mBAAO,EAAE,QAAAsY,iBADb;AAEIC,uBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,qBAAM2V,yBAAN;AAAA,aAAX,CAFjB;AAGI1V,iBAAK,EAAE;AAHX,WADO;AApDJ,S;AA4D2B,Q;;gBACjC,OAAAxuD;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAA2kD;;;gBAEA,OAAA3kD;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAGA,OAAAA;;;gBAeA,OAAAioD,S;iBAAU,OAAAqH,c,EAAgB;AAAE,sBAAQ;AAAV,W;;;gBAC1B,OAAArH,S;iBAAU,oCAAA0b,6B,EAA+B;AAAC,sBAAQ;AAAT,W;;;;;;;;;;;;;;;;;;;;;;;;ACnI9C;AAAA;AAAA;;AAUA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAMA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMY;AAA+C;AAAS;;;;;AAA/B;AAAsB;AAAA;;;;;;AAgBvC;AAII;;AAIJ;;;;;;AANI,gDAAsB,UAAtB,EAAsB,4BAAtB;AAGI;AAAA,2CAAiB,UAAjB,EAAiB,kDAAjB;;;;QAqBfmB,4B;;;;;AA9Cb;AAAA;;AAAA;;;AAyDI;AACA;;AACgB,iBAAA5tC,OAAA,GAAmB,KAAnB;AAEhB;;;;AAGgB,iBAAAvzB,cAAA,GAAkC,aAAAohE,qBAAlC;AAUhB;;AACO,iBAAAnhE,KAAA,GAAQ,IAAI,OAAAzH,eAAJ,CAA4B,aAAA6oE,gBAA5B,CAAR;AAEA,iBAAAC,kBAAA,GAAqB,IAAI,OAAA9oE,eAAJ,CAAoB,UAAAgO,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAApB,CAArB;AAEA,iBAAA27D,iBAAA,GAAiC,IAAI,QAAA5/B,WAAJ,EAAjC;AAEA,iBAAA6oC,WAAA,GAAc,OAAAz0C,aAAA,CAAc,CAAC,SAAKwrC,iBAAL,CAAuB3+B,YAAxB,EAAsC,SAAK2nC,kBAA3C,CAAd,EAA8EzzD,IAA9E,CAEb,YAAAjL,GAAA,CAAI,iBAA+B;AAAA;AAAA,cAA7B3C,KAA6B;AAAA,cAAtBT,gBAAsB;;AAC/B;;;;AAIA,cAAMkH,EAAE,GAAG,UAAAo2C,sCAAA,CAAuCt9C,gBAAgB,CAACkH,EAAxD,EAA4DlH,gBAAgB,CAACglB,WAA7E,EAA0F9d,EAArG;AACA,iBAAO,OAAA3G,sBAAA,CAAuB,SAAKC,cAA5B,EAA4C0G,EAA5C,EAAgDzG,KAAhD,CAAP;AACH,SAPD,CAFa,CAAd;AAYA,iBAAA2f,OAAA,GAAU,IAAI,OAAApnB,eAAJ,CAAyC,EAAzC,CAAV;AAEA,iBAAAgpE,iBAAA,GAAoB,SAAK5hD,OAAL,CAAa/R,IAAb,CACvB,YAAAjL,GAAA,CAAI,UAAAgd,OAAO;AAAA,iBAAIA,OAAO,CAACrf,IAAR,CAAa,UAAAunB,CAAC;AAAA,mBAAIA,CAAC,CAAC7nB,KAAF,KAAY,aAAAohE,gBAAhB;AAAA,WAAd,CAAJ;AAAA,SAAX,CADuB,CAApB;AAIA,iBAAAI,cAAA,GAAiB,OAAA30C,aAAA,CAAc,CAAC,SAAKlN,OAAN,EAAe,SAAK3f,KAApB,CAAd,EAA0C4N,IAA1C,CACpB,YAAAjL,GAAA,CAAI;AAAA;AAAA,cAAEgd,OAAF;AAAA,cAAW3f,KAAX;;AAAA,iBAAsB2f,OAAO,CAACrf,IAAR,CAAa,UAAAunB,CAAC;AAAA,mBAAIA,CAAC,CAAC7nB,KAAF,KAAYA,KAAhB;AAAA,WAAd,CAAtB;AAAA,SAAJ,CADoB,CAAjB;AAnGX;AA4KC;;;;mCArEqBwnB,M,EAA2B;AACzC,iBAAO,KAAKxnB,KAAL,CAAW4N,IAAX,CAAgB,YAAAjL,GAAA,CAAI,UAAAkJ,CAAC;AAAA,mBAAIA,CAAC,KAAK2b,MAAM,CAACxnB,KAAjB;AAAA,WAAL,CAAhB,CAAP;AACH;;;mCAEiBwnB,M,EAA2B;AACzC,iBAAO,KAAK4X,UAAL,GAAkB5X,MAAM,CAACxnB,KAAP,GAAe,KAAKo/B,UAAtC,GAAmD,KAA1D;AACH;;;mCAMO;AAAA;;AACJ,eAAKvkC,YAAL,CAAkB,oBAAlB,EACI,KAAKwmE,kBAAL,CAAwBzzD,IAAxB,CACI,YAAAjL,GAAA,CAAI,UAAA1E,CAAC;AAAA,mBAAI,aAAAwjE,iCAAA,CAAkCxjE,CAAlC,EAAqC,QAAI,CAAC8B,cAA1C,EAA0D,QAAI,CAAC2hE,QAA/D,CAAJ;AAAA,WAAL,CADJ,EAEE3mE,SAFF,CAEY,UAAAkQ,IAAI,EAAI;AAChB,oBAAI,CAAC0U,OAAL,CAAa1U,IAAb,CAAkBA,IAAlB;AACH,WAJD,CADJ;AAMH;;;oCAEkBzQ,O,EAAsB;AACrC,cAAIA,OAAO,CAACkH,QAAZ,EAAsB;AAClB,gBAAMigE,IAAI,GAAG,aAAAF,iCAAA,CAAkC,KAAKJ,kBAAL,CAAwBrhE,KAA1D,EAAiE,KAAKD,cAAtE,EAAsF,KAAK2hE,QAA3F,CAAb;AACA,iBAAK/hD,OAAL,CAAa1U,IAAb,CAAkB02D,IAAlB;AACH;;AACD,cAAInnE,OAAO,CAACkN,WAAZ,EAAyB;AACrB,iBAAK25D,kBAAL,CAAwBp2D,IAAxB,CAA6BzQ,OAAO,CAACkN,WAAR,CAAoB/G,YAAjD;AACH;AACJ;AAED;;;;;;;iCAIgBwpD,S,EAAiB;AAC7B,eAAK2W,UAAL,CAAgB3W,SAAhB;AACH;AAED;;;;;;;mCAIWtwC,G,EAAW;AAClB,eAAK7Z,KAAL,CAAWiL,IAAX,CAAgB4O,GAAhB;;AACA,cAAI,KAAK0wC,SAAT,EAAoB;AAChB,iBAAKA,SAAL,CAAe1wC,GAAf;AACH;AACJ,S,CAED;AACA;AACA;;AAEA;;;;;;;yCAIwB/gB,E,EAAuB;AAC3C,eAAKyxD,SAAL,GAAiBzxD,EAAjB;AACH;AAED;;;;;;;0CAIyBA,E,EAAuB;AAC5C,eAAK0xD,QAAL,GAAgB1xD,EAAhB;AACH;;;4BA5DmB;;;AAChB,iBAAO,CAAP,WAAO,KAAK0zD,YAAZ,MAAwB,IAAxB,IAAwB,aAAxB,GAAwB,MAAxB,GAAwB,GAAEqM,SAAnB,MAA4B,IAA5B,IAA4B,aAA5B,GAA4B,EAA5B,GAAgC,KAAvC;AACH;;;;MAnE6C,OAAAt/D,a;;AA9ClD;;;4DA8Ca2nE,4B;AAA4B,K;;;YAA5BA,4B;AAA4B,6C;AAAA;AAAA;;;;;;;;;;;;;;;;;;;uCAT1B,CACP;AACI/uB,eAAO,EAAE,QAAAsY,iBADb;AAEIC,mBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,iBAAMuW,4BAAN;AAAA,SAAX,CAFjB;AAGItW,aAAK,EAAE;AAHX,OADO,C,GAMV,6B,EAAA,uB;AAAA,e;AAAA,c;AAAA,gmB;AAAA;AAAA;AAxCG;AACI;AACA;AACI;AAMI;AAAA,mBAAe,IAAAltD,QAAA,QAAf;AAA+B,WAA/B;;;AAEA;AACI;;AAIJ;AACA;;;;AASJ;AACA;AACI;AACJ;AACJ;AACJ;;;;;;;;AA9Be;AAAA;AAIH;AAAA,kDAAoD,UAApD,EAAoD,WAApD,EAAoD,OAApD,EAAoD,gCAApD;AASQ;AAAA,uDAAsD,aAAtD,EAAsD,qBAAtD;AAIJ;AAAA;AAUc;AAAA;;;;;;;;6EAezBwjE,4B;;;;2BAAAA,4B,EAA4B;cA9CxC,OAAAtgB,SA8CwC;eA9C9B;AACPlnD,kBAAQ,EAAE,wBADH;AAEPw0D,kBAAQ,8vDAFD;AAoCPpN,mBAAS,EAAE,CAAC,wCAAD,CApCJ;AAqCPvD,mBAAS,EAAE,CACP;AACIpL,mBAAO,EAAE,QAAAsY,iBADb;AAEIC,uBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,qBAAMuW,4BAAN;AAAA,aAAX,CAFjB;AAGItW,iBAAK,EAAE;AAHX,WADO,CArCJ;AA4CPkQ,uBAAa,EAAE,OAAAC,iBAAA,CAAkB34C;AA5C1B,S;AA8C8B,Q;;gBACpC,OAAAhmB;;;gBACA,OAAAA;;;gBACA,OAAAA;;;gBAKA,OAAAA;;;gBAEA,OAAAA;;;gBAGA,OAAAA;;;gBAKA,OAAAA;;;gBAQA,OAAAioD,S;iBAAU,Q;;;;;;;;;;;;;;;;;;;;;;;;AC3Gf;AAAA;AAAA;;AAUA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAQA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMY;AAA+C;AAE7C;;;;;AAFuB;AAAsB;AAAA;;;;;;AAwBvC;AAQI;AAIJ;;;;;;AANI;AAGI;AAAA,2CAAiB,UAAjB,EAAiB,4BAAjB;;;;QAyBfud,wB;;;;;AA9Db;AAAA;;AAAA;;;AAoEI;;AACgB,iBAAAtiE,IAAA,GAAO,EAAP;AAChB;AACA;;AACA;;AACgB,iBAAAuiE,WAAA,GAAc,IAAd;AAChB;;AACgB,iBAAA1gB,UAAA,GAAqB,UAAA56C,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAArB,CA3EpB,CA4EI;;AACgB,iBAAA42B,OAAA,GAAmB,KAAnB;AACA,iBAAAwuC,YAAA,GAAwB,KAAxB;AACA,iBAAAC,eAAA,GAA2B,KAA3B;AAShB;;AACO,iBAAA9B,cAAA,GAAiB,IAAI,OAAA1nE,eAAJ,CACpB,OAAAiF,mBAAA,CAAoB,UAAA+I,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAApB,EAAyC,SAAK4C,IAA9C,CADoB,CAAjB;AAIP;;AACO,iBAAA0iE,kBAAA,GAAqB,IAAI,OAAAzpE,eAAJ,CACxB,OAAAiP,6BAAA,CAA8B,SAAKy4D,cAAL,CAAoBjgE,KAAlD,CADwB,CAArB;AAIA,iBAAAq4D,iBAAA,GAAiC,IAAI,QAAA5/B,WAAJ,EAAjC;AAEP;;AACO,iBAAA9Y,OAAA,GAAU,IAAI,OAAApnB,eAAJ,CACb,aAAA0pE,wBAAA,CACI,UAAA17D,OAAA,EADJ,EAEI,CAAC,SAAKs7D,WAFV,EAGI,SAAKviE,IAHT,EAII,SAAKoC,QAJT,EAKI,SAAK4xB,OALT,EAMI,SAAKwuC,YAAL,GACM,CAACI,uBAAuB,CAAC,UAAA37D,OAAA,EAAD,CAAxB,CADN,GAEM,EARV,EASI,SAAKw7D,eATT,CADa,CAAV;AAyHP;;;;AAGO,iBAAAT,WAAA,GAAc,OAAAz0C,aAAA,CAAc,CAC/B,SAAKwrC,iBAAL,CAAuB3+B,YADQ,EAE/B,SAAKumC,cAF0B,CAAd,EAGlBryD,IAHkB,CAIjB,YAAAjL,GAAA,CAAI,kBAA6B;AAAA;AAAA,cAA3B3C,KAA2B;AAAA,cAApBigE,cAAoB;;AAC7B,iBAAO,OAAA5gE,kBAAA,CACH,SAAKC,IADF,EAEHU,KAFG,EAGH,QAAAP,QAAA,CAASwkB,GAAT,GAAetkB,OAAf,EAHG,CAAP;AAKH,SAND,CAJiB,CAAd;AAaP;;;;AAGO,iBAAA4hE,iBAAA,GAAoB,SAAK5hD,OAAL,CAAa/R,IAAb,CACvB,YAAAjL,GAAA,CAAI,UAACw/D,EAAD;AAAA,iBAAQA,EAAE,CAACnjE,MAAH,GAAY,CAAZ,IAAiBmjE,EAAE,CAAC,CAAD,CAA3B;AAAA,SAAJ,CADuB,CAApB;AAIP;;;;AAGO,iBAAAX,cAAA,GAAiB,OAAA30C,aAAA,CAAc,CAClC,SAAKlN,OAD6B,EAElC,SAAKsgD,cAF6B,CAAd,EAGrBryD,IAHqB,CAIpB,YAAAjL,GAAA,CAAI;AAAA;AAAA,cAAEgd,OAAF;AAAA,cAAWsgD,cAAX;;AAAA,iBACAtgD,OAAO,CAACrf,IAAR,CACI,UAACunB,CAAD;AAAA,mBACIA,CAAC,CAAC9e,OAAF,KAAc,OAAAvB,6BAAA,CAA8By4D,cAA9B,CADlB;AAAA,WADJ,CADA;AAAA,SAAJ,CAJoB,CAAjB;AAxPX;AA+VC;;;;mCA5OkB;AAAA;;AACX;AACA,eAAKtgD,OAAL,CAAa1U,IAAb,CACI,aAAAg3D,wBAAA,CACI,KAAKhC,cAAL,CAAoBjgE,KADxB,EAEI,CAAC,KAAK6hE,WAFV,EAGI,KAAKviE,IAHT,EAII,KAAKoC,QAJT,EAKI,KAAK4xB,OALT,EAMI,KAAKwuC,YAAL,GACM,CAACI,uBAAuB,CAAC,KAAKjC,cAAL,CAAoBjgE,KAArB,CAAxB,CADN,GAEM,EARV,EASI,KAAK+hE,eATT,CADJ,EAFW,CAeX;;AACA,eAAKlnE,YAAL,CACI,iBADJ,EAEI,OAAAgyB,aAAA,CAAc,CAAC,KAAKozC,cAAN,CAAd,EACKryD,IADL,CAEQ,YAAAjL,GAAA,CAAI,kBAAsB;AAAA;AAAA,gBAApBs9D,cAAoB;;AACtB;;;;AAIA,mBAAO,OAAAziE,mBAAA,CAAoByiE,cAApB,EAAoC,QAAI,CAAC3gE,IAAzC,CAAP;AACH,WAND,CAFR,EASQ,YAAA6nD,cAAA,CAAe,KAAKxnC,OAApB,CATR,EAUQ,YAAAjc,MAAA,CACI,kBAGM;AAAA;AAAA,gBAHJ5G,IAGI;AAAA,gBAHEslE,WAGF;;AACF;AACA,mBAAO,CAACA,WAAW,CAAC9hE,IAAZ,CACJ,UAACuL,CAAD;AAAA,qBAAOA,CAAC,CAAC7L,KAAF,KAAYlD,IAAI,CAACsB,UAAL,CAAgB,OAAhB,CAAnB;AAAA,aADI,CAAR;AAGH,WATL,CAVR,EAqBQ,YAAAuE,GAAA,CAAI,kBAA2B;AAAA;AAAA,gBAAzBlF,MAAyB;AAAA,gBAAjB2kE,WAAiB;;AAC3B;AACA;AACAA,uBAAW,CAACz9D,IAAZ,CAAiB;AACboE,qBAAO,EAAE,OAAAvB,6BAAA,CAA8B/J,MAA9B,CADI;AAEb+gB,0BAAY,EAAE/gB,MAAM,CAACW,UAAP,CAAkB,QAAlB,CAFD;AAGb4B,mBAAK,EAAEvC;AAHM,aAAjB,EAH2B,CAS3B;;AACA2kE,uBAAW,CAACp9D,IAAZ,CAAiB,UAACC,CAAD,EAAIC,CAAJ;AAAA,qBACb,UAAGD,CAAC,CAACjF,KAAL,EAAamF,aAAb,WAA8BD,CAAC,CAAClF,KAAhC,EADa;AAAA,aAAjB;AAGA,mBAAOoiE,WAAP;AACH,WAdD,CArBR,EAqCKrnE,SArCL,CAqCe,UAACkQ,IAAD,EAAU;AACjB,mBAAO,QAAI,CAAC0U,OAAL,CAAa1U,IAAb,CAAkBA,IAAlB,CAAP;AACH,WAvCL,CAFJ;AA2CH;;;oCAEkBzQ,O,EAAsB;AACrC,cACIA,OAAO,CAAC4xD,aAAR,IACA5xD,OAAO,CAAC8E,IADR,IAEA9E,OAAO,CAAC2mD,UAFR,IAGA3mD,OAAO,CAAC84B,OAJZ,EAKE;AACE;AACA,iBAAK3T,OAAL,CAAa1U,IAAb,CACI,aAAAg3D,wBAAA,CACI,KAAKhC,cAAL,CAAoBjgE,KADxB,EAEI,CAAC,KAAK6hE,WAFV,EAGI,KAAKviE,IAHT,EAII,KAAKoC,QAJT,EAKI,KAAK4xB,OALT,EAMI,KAAKwuC,YAAL,GACM,CAACI,uBAAuB,CAAC,KAAKjC,cAAL,CAAoBjgE,KAArB,CAAxB,CADN,GAEM,EARV,EASI,KAAK+hE,eATT,CADJ,EAFF,CAeE;;AACA,gBACIvnE,OAAO,CAAC84B,OAAR,IACA,CAAC94B,OAAO,CAAC84B,OAAR,CAAgB3yB,YADjB,IAEAnG,OAAO,CAAC84B,OAAR,CAAgB5yB,aAHpB,EAIE;AACE,mBAAKhD,QAAL,CAAc,KAAKiiB,OAAL,CAAa3f,KAAb,CAAmB,CAAnB,EAAsB+I,OAApC;AACH;AACJ;AACJ;AAED;;;;;;;AAoDA;;;;;;mCAMkBye,M,EAA8B;AAC5C,iBAAO,KAAKw6C,kBAAL,CAAwBhiE,KAAxB,KAAkCwnB,MAAM,CAACze,OAAhD;AACH;AAED;;;;;;;yCAIwBjQ,E,EAAuB;AAC3C,eAAKyxD,SAAL,GAAiBzxD,EAAjB;AACH;AAED;;;;;;;0CAIyBA,E,EAAuB;AAC5C,eAAK0xD,QAAL,GAAgB1xD,EAAhB;AACH;AAED;;;;AAIA;AACA;AACA;;AAEA;;;;;;;0CAIyB2E,M,EAAgB;AACrC;AACA,eAAKukE,kBAAL,CAAwB/2D,IAAxB,CAA6B,OAAAzD,6BAAA,CAA8B/J,MAA9B,CAA7B;AACA,eAAKwiE,cAAL,CAAoBh1D,IAApB,CAAyBxN,MAAzB;;AACA,cAAI,KAAK8sD,SAAT,EAAoB;AAChB,iBAAKA,SAAL,CAAe9sD,MAAf;AACH;AACJ;AAED;;;;;;;iCAIgB4kE,a,EAAqB;AACjC;AACA,cAAMC,SAAS,GAAG,KAAK3iD,OAAL,CAAa3f,KAAb,CAAmBM,IAAnB,CACd,UAAC0mD,GAAD;AAAA,mBAASA,GAAG,CAACj+C,OAAJ,KAAgBs5D,aAAzB;AAAA,WADc,EAEhBriE,KAFF,CAFiC,CAKjC;;AACA,eAAKuiE,iBAAL,CAAuBD,SAAvB,EANiC,CAOjC;;AACA,cAAIA,SAAJ,EAAe;AACX,gBAAI,KAAK/X,SAAT,EAAoB;AAChB,mBAAKA,SAAL,CAAe+X,SAAf;AACH;AACJ;AACJ;AAED;;;;;;;mCAIkB7kE,M,EAAuB;AACrC;AACA,cAAIA,MAAM,IAAI,IAAd,EAAoB;AAChB;AACA,iBAAK8kE,iBAAL,CAAuB9kE,MAAvB,EAFgB,CAGhB;;AACA,iBAAKkiB,OAAL,CAAa1U,IAAb,CACI,aAAAg3D,wBAAA,CACIxkE,MADJ,EAEI,CAAC,KAAKokE,WAFV,EAGI,KAAKviE,IAHT,EAII7B,MAAM,CAAC8mB,WAJX,EAKI,KAAK+O,OALT,EAMI,KAAKwuC,YAAL,GACM,CAACI,uBAAuB,CAACzkE,MAAD,CAAxB,CADN,GAEM,EARV,EASI,KAAKskE,eATT,CADJ;AAaH;AACJ;;;4BA3ImB;;;AAChB,iBAAO,CAAP,WAAO,KAAKvV,YAAZ,MAAwB,IAAxB,IAAwB,aAAxB,GAAwB,MAAxB,GAAwB,GAAEqM,SAAnB,MAA4B,IAA5B,IAA4B,aAA5B,GAA4B,EAA5B,GAAgC,KAAvC;AACH;AAED;;;;;;4BAGmB;AACf,iBAAO,KAAK1X,UAAL,CAAgB58B,WAAvB;AACH;;;;MA7JO,OAAAhrB,a;;AA/DZ;;;wDA8DaqoE,wB;AAAwB,K;;;YAAxBA,wB;AAAwB,yC;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;uCATtB,CACP;AACIzvB,eAAO,EAAE,QAAAsY,iBADb;AAEIC,mBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,iBAAMiX,wBAAN;AAAA,SAAX,CAFjB;AAGIhX,aAAK,EAAE;AAHX,OADO,C,GAMV,6B,EAAA,uB;AAAA,e;AAAA,c;AAAA,wkB;AAAA;AAAA;AAxDG;AACI;AAGA;AACI;AAMI;AAAA,mBAAe,IAAAltD,QAAA,QAAf;AAA+B,WAA/B;;;AAGA;AACI;;;AASJ;AACA;;;;AAaJ;AACA;AACI;AAKJ;AACJ;AACJ;;;;;;;;AA9Ce;AAAA;AAMH;AAAA,kDAAoD,UAApD,EAAoD,WAApD,EAAoD,OAApD,EAAoD,6CAApD;AAUQ;AAAA,uDAIC,aAJD,EAIC,qBAJD;AASJ;AAAA;AAeA;AAAA;;;;;;;;yEAkBXkkE,wB;;;;2BAAAA,wB,EAAwB;cA9DpC,OAAAhhB,SA8DoC;eA9D1B;AACPlnD,kBAAQ,EAAE,oBADH;AAEPw0D,kBAAQ,2rEAFD;AAoDPpN,mBAAS,EAAE,CAAC,qCAAD,CApDJ;AAqDPvD,mBAAS,EAAE,CACP;AACIpL,mBAAO,EAAE,QAAAsY,iBADb;AAEIC,uBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,qBAAMiX,wBAAN;AAAA,aAAX,CAFjB;AAGIhX,iBAAK,EAAE;AAHX,WADO,CArDJ;AA4DPkQ,uBAAa,EAAE,OAAAC,iBAAA,CAAkB34C;AA5D1B,S;AA8D0B,Q;;gBAIhC,OAAAhmB;;;gBACA,OAAAA;;;gBAEA,OAAAA;;;gBAIA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBACA,OAAAA;;;gBACA,OAAAA;;;gBAQA,OAAAioD,S;iBAAU,Q;;;;;AA0Qf,aAAS6d,uBAAT,CAAiCzkE,MAAjC,EAA+C;AAC3C,aAAO;AACHsL,eAAO,EAAE,OAAAvB,6BAAA,CAA8B/J,MAA9B,CADN;AAEH+gB,oBAAY,EAAE/gB,MAAM,CAACW,UAAP,CAAkB,QAAlB,CAFX;AAGH4B,aAAK,EAAEvC;AAHJ,OAAP;AAKH;;;;;;;;;;;;;;;;;;;;;ACzYD;AAAA;AAAA;;AAUA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAMA;AAAA;AAAA;;AAGA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBoB;AAII;;AAIJ;;;;;;AANI,gDAAsB,UAAtB,EAAsB,4BAAtB;AAGI;AAAA,2CAAiB,UAAjB,EAAiB,kDAAjB;;;;QAqBfquD,sB;;;;;AA9Cb;AAAA;;AAAA;;;AA2DI;;AACgB,iBAAApqD,QAAA,GAAoB,IAAI,UAAAsM,MAAJ,CAAW;AAAElR,cAAI,EAAEJ,IAAI,CAACunB,GAAL;AAAR,SAAX,EAAiCo3B,QAArD;AAEhB;;;;AAGgB,iBAAAt7C,cAAA,GAAkC,aAAAohE,qBAAlC;AAUT,iBAAAnhE,KAAA,GAAQ,IAAI,OAAAzH,eAAJ,CAA4B,aAAA6oE,gBAA5B,CAAR;AAEA,iBAAA7hE,gBAAA,GAAmB,IAAI,OAAAhH,eAAJ,CAAoB,UAAAgO,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAApB,CAAnB;AAEA,iBAAA27D,iBAAA,GAAiC,IAAI,QAAA5/B,WAAJ,EAAjC;AAEA,iBAAA6oC,WAAA,GAAc,OAAAz0C,aAAA,CAAc,CAAC,SAAKwrC,iBAAL,CAAuB3+B,YAAxB,EAAsC,SAAKn6B,gBAA3C,CAAd,EAA4EqO,IAA5E,CACjB,YAAAjL,GAAA,CAAI;AAAA;AAAA,cAAE3C,KAAF;AAAA,cAAST,gBAAT;;AAAA,iBAA+B,OAAAO,sBAAA,CAAuB,SAAKC,cAA5B,EAA4CR,gBAAgB,CAACkH,EAA7D,EAAiEzG,KAAjE,CAA/B;AAAA,SAAJ,CADiB,CAAd;AAIA,iBAAA2f,OAAA,GAAU,IAAI,OAAApnB,eAAJ,CAAyC,EAAzC,CAAV;AAEA,iBAAAgpE,iBAAA,GAAoB,SAAK5hD,OAAL,CAAa/R,IAAb,CACvB,YAAAjL,GAAA,CAAI,UAAAgd,OAAO;AAAA,iBAAIA,OAAO,CAACrf,IAAR,CAAa,UAAAunB,CAAC;AAAA,mBAAIA,CAAC,CAAC7nB,KAAF,KAAY,aAAAohE,gBAAhB;AAAA,WAAd,CAAJ;AAAA,SAAX,CADuB,CAApB;AAIA,iBAAAI,cAAA,GAAiB,OAAA30C,aAAA,CAAc,CAAC,SAAKlN,OAAN,EAAe,SAAK3f,KAApB,CAAd,EAA0C4N,IAA1C,CACpB,YAAAjL,GAAA,CAAI;AAAA;AAAA,cAAEgd,OAAF;AAAA,cAAW3f,KAAX;;AAAA,iBAAsB2f,OAAO,CAACrf,IAAR,CAAa,UAAAunB,CAAC;AAAA,mBAAIA,CAAC,CAAC7nB,KAAF,KAAYA,KAAhB;AAAA,WAAd,CAAtB;AAAA,SAAJ,CADoB,CAAjB;AA3FX;AAsKC;;;;mCAvEqBwnB,M,EAA2B;AACzC,iBAAO,KAAKxnB,KAAL,CAAW4N,IAAX,CAAgB,YAAAjL,GAAA,CAAI,UAAAkJ,CAAC;AAAA,mBAAIA,CAAC,KAAK2b,MAAM,CAACxnB,KAAjB;AAAA,WAAL,CAAhB,CAAP;AACH;;;mCAEiBwnB,M,EAA2B;AACzC,iBAAO,KAAK4X,UAAL,GAAkB5X,MAAM,CAACxnB,KAAP,GAAe,KAAKo/B,UAAtC,GAAmD,KAA1D;AACH;;;mCAMO;AAAA;;AACJ,eAAKvkC,YAAL,CAAkB,oBAAlB,EACI,KAAK0E,gBAAL,CAAsBqO,IAAtB,CACI,YAAAjL,GAAA,CAAI,UAAA1E,CAAC;AAAA,mBAAI,aAAAwjE,iCAAA,CAAkCxjE,CAAC,CAACiJ,MAAF,CAAS,QAAI,CAACxF,QAAd,CAAlC,EAA2D,QAAI,CAAC3B,cAAhE,EAAgF,QAAI,CAAC2hE,QAArF,CAAJ;AAAA,WAAL,CADJ,EAEE3mE,SAFF,CAEY,UAAAkQ,IAAI,EAAI;AAChB,oBAAI,CAAC0U,OAAL,CAAa1U,IAAb,CAAkBA,IAAlB;AACH,WAJD,CADJ;AAMH;;;oCAEkBzQ,O,EAAsB;AACrC,cAAIA,OAAO,CAACkH,QAAZ,EAAsB;AAClB,gBAAMigE,IAAI,GAAG,aAAAF,iCAAA,CAAkC,KAAKliE,gBAAL,CAAsBS,KAAtB,CAA4BkH,MAA5B,CAAmC,KAAKxF,QAAxC,CAAlC,EAAqF,KAAK3B,cAA1F,EAA0G,KAAK2hE,QAA/G,CAAb;AACA,iBAAK/hD,OAAL,CAAa1U,IAAb,CAAkB02D,IAAlB;AACH;;AACD,cAAInnE,OAAO,CAACgE,SAAZ,EAAuB;AACnB;AACA,gBAAM1B,IAAI,GAAG,IAAI,UAAAkR,MAAJ,CAAW;AAAClR,kBAAI,EAAE,KAAK0B;AAAZ,aAAX,CAAb;AACA,iBAAKe,gBAAL,CAAsB0L,IAAtB,CAA2BnO,IAA3B;AACH;AACJ;AAED;;;;;;;iCAIgBqtD,S,EAAiB;AAC7B,eAAK2W,UAAL,CAAgB3W,SAAhB;AACH;AAED;;;;;;;mCAIWtwC,G,EAAW;AAClB,eAAK7Z,KAAL,CAAWiL,IAAX,CAAgB4O,GAAhB;;AACA,cAAI,KAAK0wC,SAAT,EAAoB;AAChB,iBAAKA,SAAL,CAAe1wC,GAAf;AACH;AACJ;;;yCAEuB6e,Q,EAAmB;AACvC,eAAKA,QAAL,GAAgBA,QAAhB;AACH;AAED;;;;;;;yCAIwB5/B,E,EAAuB;AAC3C,eAAKyxD,SAAL,GAAiBzxD,EAAjB;AACH;AAED;;;;;;;0CAIyBA,E,EAAuB;AAC5C,eAAK0xD,QAAL,GAAgB1xD,EAAhB;AACH;;;4BA9DmB;;;AAChB,iBAAO,CAAP,WAAO,KAAK0zD,YAAZ,MAAwB,IAAxB,IAAwB,aAAxB,GAAwB,MAAxB,GAAwB,GAAEqM,SAAnB,MAA4B,IAA5B,IAA4B,aAA5B,GAA4B,EAA5B,GAAgC,KAAvC;AACH;;;;MA3DuC,OAAAt/D,a;;AA9C5C;;;sDA8CauyD,sB;AAAsB,K;;;YAAtBA,sB;AAAsB,yC;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;uCATpB,CACP;AACI3Z,eAAO,EAAE,QAAAsY,iBADb;AAEIC,mBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,iBAAMmB,sBAAN;AAAA,SAAX,CAFjB;AAGIlB,aAAK,EAAE;AAHX,OADO,C,GAMV,6B,EAAA,uB;AAAA,e;AAAA,c;AAAA,okB;AAAA;AAAA;AAxCG;AACI;AAAiC;AAAS;AAC1C;AACI;AAMI;AAAA,mBAAe,IAAAltD,QAAA,QAAf;AAA+B,WAA/B;;;AAEA;AACI;;AAIJ;AACA;;;;AASJ;AACA;AACI;AACJ;AACJ;AACJ;;;;;;;;AA9Be;AAAA;AAAsB;AAAA;AAIzB;AAAA,kDAAoD,OAApD,EAAoD,gCAApD,EAAoD,UAApD,EAAoD,YAApD;AASQ;AAAA,uDAAsD,aAAtD,EAAsD,qBAAtD;AAIJ;AAAA;AAUc;AAAA;;;;;;;;uEAezBouD,sB;;;;2BAAAA,sB,EAAsB;cA9ClC,OAAAlL,SA8CkC;eA9CxB;AACPlnD,kBAAQ,EAAE,oBADH;AAEPw0D,kBAAQ,+uDAFD;AAoCPpN,mBAAS,EAAE,CAAC,gCAAD,CApCJ;AAqCPvD,mBAAS,EAAE,CACP;AACIpL,mBAAO,EAAE,QAAAsY,iBADb;AAEIC,uBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,qBAAMmB,sBAAN;AAAA,aAAX,CAFjB;AAGIlB,iBAAK,EAAE;AAHX,WADO,CArCJ;AA4CPkQ,uBAAa,EAAE,OAAAC,iBAAA,CAAkB34C;AA5C1B,S;AA8CwB,Q;;gBAC9B,OAAAhmB;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAGA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAKA,OAAAA;;;gBAQA,OAAAioD,S;iBAAU,Q;;;;;;;;;;;;;;;;;;;;;;;;AC9Gf;AAAA;AAAA;;;;;;;;QAgBame,qB,GAET,iCAAc;AAAA;AACb,K;;AAjBL;;;uBAcaA,qB;AAAqB,K;;;YAArBA,qB;AAAqB,wC;AAAA,6B;AAAA,c;AAAA,a;AAAA,0F;AAAA;AAAA;;AAX1B;AACI;AACI;AACA;AACI;AACJ;AACJ;AACJ;;;;;;;;2BAIKA,qB,EAAqB;cAdjC,OAAA5hB,SAciC;eAdvB;AACPlnD,kBAAQ,EAAE,mBADH;AAEPw0D,kBAAQ,yRAFD;AAYPpN,mBAAS,EAAE,CAAC,gCAAD;AAZJ,S;AAcuB,Q;;;;;;;;;;;;;;;;;;;;;;;;AChBlC;AAAA;AAAA;;AAKA;AAAA;AAAA;;;;;;;;;;;;AAMY;AAAA;AACI;AAIJ;;;;;AAHU;AAAA;;;;QAOT2hB,qB;;;;;AAKT,qCAAYpG,KAAZ,EAAqC;AAAA;;AAAA,mCAC3BA,KAD2B;AAEpC;;;MAPsC,0BAAAD,qB;;AAb3C;;;uBAaaqG,qB,EAAqB,yC;AAAA,K;;;YAArBA,qB;AAAqB,wC;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,c;AAAA,a;AAAA,4nB;AAAA;AAAA;AAV1B;;;;;;;;;2BAUKA,qB,EAAqB;cAbjC,OAAA7hB,SAaiC;eAbvB;AACPlnD,kBAAQ,EAAE,mBADH;AAEPw0D,kBAAQ;AAFD,S;AAauB,Q;;;;;;gBAE7B,OAAA9xD;;;;;;;;;;;;;;;;;;;;;;;;ACtBL;AAAA;AAAA;;AAKA;AAAA;AAAA;;;;;;;;;;;;AAMY;AACI;AACI;AAAA;AACI;AAKJ;AACJ;AACJ;;;;;AATkC;AAAA;AAIlB;AAAA;;;;QAgBfsmE,oB;;;;;AAQT,oCAAYrG,KAAZ,EAAqC;AAAA;;AAAA,mCAC3BA,KAD2B;AAEpC;;;MAVqC,0BAAAD,qB;;AAzB1C;;;uBAyBasG,oB,EAAoB,yC;AAAA,K;;;YAApBA,oB;AAAoB,uC;AAAA;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,c;AAAA,a;AAAA,yQ;AAAA;AAAA;AAtBzB;;;;;;;;;2BAsBKA,oB,EAAoB;cAzBhC,OAAA9hB,SAyBgC;eAzBtB;AACPlnD,kBAAQ,EAAE,kBADH;AAEPw0D,kBAAQ;AAFD,S;AAyBsB,Q;;;;;;gBAE5B,OAAA9xD;;;gBAGA,OAAAA;;;;;;;;;;;;;;;;;;;;;;;;ACrCL;AAAA;AAAA;;;;;;;;;;QAoBaumE,kB;AAKT,oCAAc;AAAA;AACb;;;;mCAEO,CACP;;;;;;AAvBL;;;uBAcaA,kB;AAAkB,K;;;YAAlBA,kB;AAAkB,qC;AAAA;AAAA;AAAA,O;AAAA,c;AAAA,a;AAAA,suB;AAAA;AAAA;AAXvB;AAAA;AACI;AAGA;AAIJ;;;;AALU;AAAA;AAGA;AAAA;;;;;;;;;2BAKLA,kB,EAAkB;cAd9B,OAAA/hB,SAc8B;eAdpB;AACPlnD,kBAAQ,EAAE,gBADH;AAEPw0D,kBAAQ;AAFD,S;AAcoB,Q;;;;gBAE1B,OAAA9xD;;;;;;;;;;;;;;;;;;;;;;;;ACtBL;AAAA;AAAA;;AAMA;AAAA;AAAA;;;;;;;;AAOgB;AACI;AACI;AACI;AACJ;AACJ;AACJ;;;;;AAHiB;AAAA,+CAAAotB,GAAA;;;;QAUpBo5C,2B;;;;;AAKT,2CAAYvG,KAAZ,EAAqC;AAAA;;AAAA,mCAC3BA,KAD2B;AAEpC;;;MAP4C,0BAAAD,qB;;AAlBjD;;;uBAkBawG,2B,EAA2B,yC;AAAA,K;;;YAA3BA,2B;AAA2B,8C;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,c;AAAA,a;AAAA,gG;AAAA;AAAA;AAd5B;;;;;;;;;2BAcCA,2B,EAA2B;cAlBvC,OAAAhiB,SAkBuC;eAjBpC;AACIlnD,kBAAQ,EAAE,yBADd;AAEIw0D,kBAAQ,mWAFZ;AAaIpN,mBAAS,EAAE,CAAC,sCAAD,CAbf;AAcIga,uBAAa,EAAE,OAAAC,iBAAA,CAAkB34C;AAdrC,S;AAiBoC,Q;;;;;;gBAEnC,OAAAhmB;;;;;;;;;;;;;;;;;;;;;;;;AC5BL;AAAA;AAAA;;AAMA;AAAA;AAAA;;;;;;;;;;;;;;;;AAQgB;AAA6C;AAAC;;;;;;AAFlD;AACI;AACA;AACJ;;;;;AADgC;AAAA;;;;;;QAM/BymE,c;;;;;AAKT,8BAAYxG,KAAZ,EAAqC;AAAA;;AAAA;;AACjC,uCAAMA,KAAN;AAHJ,iBAAAzjC,QAAA,GAAW,KAAX;AAEqC;AAEpC;;;MAP+B,0BAAAwjC,qB;;AAZpC;;;uBAYayG,c,EAAc,yC;AAAA,K;;;YAAdA,c;AAAc,gC;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,6B;AAAA,c;AAAA,a;AAAA,2E;AAAA;AAAA;;AATnB;;;;;;;;;2BASKA,c,EAAc;cAZ1B,OAAAjiB,SAY0B;eAZhB;AACPlnD,kBAAQ,EAAE,WADH;AAEPw0D,kBAAQ,kOAFD;AAUPpN,mBAAS,EAAE,CAAC,wBAAD;AAVJ,S;AAYgB,Q;;;;;;gBAEtB,OAAA1kD;;;;;;;;;;;;;;;;;;;;;;;;ACtBL;AAAA;AAAA;;AAMA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeoB;AAII;AAII;AACJ;AACJ;;;;;AATI,wCAAiB,OAAjB,EAAiB,eAAjB;AAII;AAAA,8CAAuB,QAAvB,EAAuB,SAAvB,EAAuB,UAAvB,EAAuB,KAAvB;AAGK;AAAA;;;;QAkBpB0mE,uB;AAtCb;AAAA;;AA4CW,aAAAnjD,OAAA,GAA+B,EAA/B;AAeV;;;;2CAH0B;AACnB,iBAAO,KAAKojD,MAAL,IAAe,KAAKC,eAApB,GAAsC,KAAKA,eAA3C,GAA6D,KAAKla,WAAzE;AACH;;;4BANmB;;;AAChB,iBAAO,CAAP,WAAO,KAAK0D,YAAZ,MAAwB,IAAxB,IAAwB,aAAxB,GAAwB,MAAxB,GAAwB,GAAEqM,SAAnB,MAA4B,IAA5B,IAA4B,aAA5B,GAA4B,EAA5B,GAAgC,KAAvC;AACH;;;;;;AAtDL;;;uBAsCaiK,uB;AAAuB,K;;;YAAvBA,uB;AAAuB,0C;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;AAnC5B;AACI;AAGI;AAKI;AAWJ;AACA;AAAiC;AAAwB;AACzD;AAIA;AACI;AACJ;AACJ;AACJ;;;;AAnBgB;AAAA;AAUyB;AAAA;AAG7B;AAAA;AAGkB;AAAA;;;;;;;;;;2BAQzBA,uB,EAAuB;cAtCnC,OAAAliB,SAsCmC;eAtCzB;AACPlnD,kBAAQ,EAAE,qBADH;AAEPw0D,kBAAQ,khDAFD;AAmCPpN,mBAAS,EAAE,CAAC,kCAAD,CAnCJ;AAoCPga,uBAAa,EAAE,OAAAC,iBAAA,CAAkB34C;AApC1B,S;AAsCyB,Q;;gBAE/B,OAAAhmB;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAIA,OAAAioD,S;iBAAU,Q;;;;;;;;;;;;;;;;;;;;;;;;AC3Df;AAAA;AAAA;;AASA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUY;AAAgD;AAAI;;;;AAAzC;;;;;;AAcP;AAAwC;;AAAwB;;;;;AAAxB;AAAA;;;;;;;;;;;;QAmC3C4e,sB;;;;;AAzDb;AAAA;;AAAA;;;AA0DI;;AACsB,iBAAAnY,KAAA,GAAgB,UAAAvkD,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB+J,EAApC;AAGtB;;AACgB,iBAAAskD,QAAA,GAA6B,OAA7B;AAChB;;AACgB,iBAAAvqD,MAAA,GAA2B,QAA3B;AAGhB;;AACgB,iBAAA+/D,SAAA,GAAqB,KAArB;AAMC,iBAAAC,QAAA,GAAW,IAAI,OAAAtiB,YAAJ,EAAX;AAmBjB;;AACO,iBAAAglB,SAAA,GAAY,IAAI,OAAA3qE,eAAJ,CAA4B,UAAAgO,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAA5B,CAAZ;;AA0DA,iBAAAikE,oBAAA,GAAuB;AAAA,iBAAM,SAAKC,cAAL,CAAoBjK,UAApB,EAAN;AAAA,SAAvB;;AAzJX;AAyMC,O,CA5HG;;;;;mCACe;AACX,cAAI,KAAKwM,oBAAT,EAA+B;AAC3B,iBAAKrC,UAAL,CAAgB,KAAKqC,oBAArB;AACH;AACJ;AAeD;;;;;AA4BA;;;;iCAIgBhZ,S,EAAmB;AAC/B;AACA,cAAMc,QAAQ,GAAG,KAAKiY,SAAL,CAAeljE,KAAhC;AACA,cAAM/B,CAAC,GAAG,IAAI,UAAA+P,MAAJ,CAAW;AAAClR,gBAAI,EAAEqtD;AAAP,WAAX,CAAV;AACA,cAAIgB,QAAQ,GAAGltD,CAAC,CACXP,QADU,CACD;AAAE0B,gBAAI,EAAE6rD,QAAQ,CAACxgB,QAAjB;AAA2BttC,kBAAM,EAAE8tD,QAAQ,CAAC1tD;AAA5C,WADC,EAEVkJ,EAFL,CAJ+B,CAO/B;;AACA,cAAI0kD,QAAQ,GAAG,KAAK1+C,IAApB,EAA0B;AACtB0+C,oBAAQ,GAAG,KAAK1+C,IAAhB;AACH;;AACD,cAAMy+C,KAAK,GAAG,IAAI,UAAAl9C,MAAJ,CAAW;AAAElR,gBAAI,EAAEquD;AAAR,WAAX,CAAd;AACA,eAAK+X,SAAL,CAAej4D,IAAf,CAAoBigD,KAApB;;AACA,cAAI,KAAKX,SAAT,EAAoB;AAChB,iBAAKA,SAAL,CAAeY,QAAf;AACH;;AACD,eAAKqV,QAAL,CAAchhB,IAAd,CAAmB2L,QAAnB;AACA,eAAKxB,YAAL,GAAoB,KAApB;AACH;;;oCAEkB;AACf,eAAKjsD,QAAL,CAAc,UAAA6I,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB+J,EAAlC;AACH;;;4CAI0B;AACvB,eAAKk6D,oBAAL;AACH;AAED;;AACA;;;;;;;mCAIkB3gE,K,EAAe;AAC7B,cAAMlD,IAAI,GAAG,IAAI,UAAAkR,MAAJ,CAAW;AAAClR,gBAAI,EAAEkD;AAAP,WAAX,CAAb;AACA,eAAKkjE,SAAL,CAAej4D,IAAf,CAAoBnO,IAApB;AACA,eAAK6sD,YAAL,GAAoB,KAApB;AACH;AAED;;AACA;;;;;;;yCAIwB7wD,E,EAAuB;AAC3C,eAAKyxD,SAAL,GAAiBzxD,EAAjB;AACH;AAED;;AACA;;;;;;;0CAIyBA,E,EAAuB;AAC5C,eAAK0xD,QAAL,GAAgB1xD,EAAhB;AACH;;;yCAEuB4/B,Q,EAAmB;AACvC,eAAKA,QAAL,GAAgBA,QAAhB;AACH;AAED;;;;0CACyB;AACrB,eAAK0yB,QAAL,CAAcC,SAAd;AACH;AAED;;;;yCACwB;AACpB,eAAKD,QAAL,CAAcE,QAAd;AACH;;;4BAtGc;AACX,iBAAO,KAAKR,KAAL,IAAc,UAAAvkD,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB8J,YAApB,CAAiC,KAAjC,EAAwCC,EAA7D;AACH;AAED;;;;4BACgB;AACZ,iBAAO,KAAK8kD,GAAL,IAAY,UAAAhlD,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoBywB,UAApB,CAA+B,KAA/B,EAAsCxvB,QAAtC,CAA+C;AAAE6tD,iBAAK,EAAE;AAAT,WAA/C,EAA6D/kD,EAAhF;AACH;AAED;;;;4BACqB;AACjB,iBAAO,KAAKy8D,SAAL,CAAet1D,IAAf,CAAoB,YAAAjL,GAAA,CAAI,UAAA1E,CAAC,EAAI;AAChC,gBAAM8K,OAAO,GAAG9K,CAAC,CAACG,UAAF,CAAa,iBAAb,CAAhB;AACA,6BAAU2K,OAAV,SAAoB9K,CAAC,CAACo9B,UAAF,CAAa,UAAA90B,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAb,EAAkC,KAAlC,IAA2C,UAA3C,GAAwD,EAA5E;AACH,WAH0B,CAApB,CAAP;AAIH;AAED;;;;4BACkB;AACd,iBAAO,KAAK0uD,QAAL,CAAcK,QAArB;AACH;;;4BAEc;AACX,iBAAO,KAAKyX,SAAZ;AAEH;;;;MAlEuC,OAAA3pE,a;;AAzD5C;;;sDAyDa0pE,sB;AAAsB,K;;;YAAtBA,sB;AAAsB,sC;AAAA;AAAA;+BAkCpB,OAAAvX,c,EAAgB,I;+BAChB,4BAAA6J,sB,EAAwB,I;;;;;;;;;;;;;;;;;;;;;;;uCA3CxB,CACP;AACIpjB,eAAO,EAAE,QAAAsY,iBADb;AAEIC,mBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,iBAAMsY,sBAAN;AAAA,SAAX,CAFjB;AAGIrY,aAAK,EAAE;AAHX,OADO,C,GAMV,6B;AAAA,e;AAAA,c;AAAA,whB;AAAA;AAAA;AApDG;AAKI;AACA;AASI;AAAA,mBAAiB,IAAAe,cAAA,EAAjB;AAAiC,WAAjC;AAIA;AACA;AACI;AAEJ;AACJ;AAEA;AAAgD;AAAA,mBAAS,IAAAsV,iBAAA,EAAT;AAA4B,WAA5B;AAC5C;AAAkD;AAAA,mBAASrV,MAAM,CAACt/C,eAAP,EAAT;AAAiC,WAAjC;AAC9C;AAII;AAAiB,gBAAA5O,QAAA;AAAkB,uBAAAmuD,eAAA;AAAiB,WAApD;;AACH;AACD;AAII;AAAA,mBAAS,IAAAuX,SAAA,EAAT;AAAoB,WAApB;AACH;AACD;AACJ;AACJ;AACJ;;;;;;AA1CI,qDAA6B,gBAA7B,EAA6B,cAA7B,EAA6B,YAA7B,EAA6B,cAA7B;AAI6B;AAAA;AAEzB;AAAA,6DAAqC,WAArC,EAAqC,cAArC,EAAqC,YAArC,EAAqC,WAArC,EAAqC,QAArC,EAAqC,WAArC;AASA;AAFA;AAKqB;AAAA;AAGb;AAAA;AAQA;AAAA,qEAAwB,SAAxB,EAAwB,gDAAxB;;;;;;;uEAwBXH,sB;;;;2BAAAA,sB,EAAsB;cAzDlC,OAAAriB,SAyDkC;eAzDxB;AACPlnD,kBAAQ,EAAE,iBADH;AAEPw0D,kBAAQ,q+DAFD;AAgDPpN,mBAAS,EAAE,CAAC,kCAAD,CAhDJ;AAiDPvD,mBAAS,EAAE,CACP;AACIpL,mBAAO,EAAE,QAAAsY,iBADb;AAEIC,uBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,qBAAMsY,sBAAN;AAAA,aAAX,CAFjB;AAGIrY,iBAAK,EAAE;AAHX,WADO;AAjDJ,S;AAyDwB,Q;;gBAE9B,OAAAxuD,K;iBAAM,M;;;gBAEN,OAAAA,K;iBAAM,I;;;gBAEN,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAA2kD;;;gBAgBA,OAAAsD,S;iBAAU,OAAAqH,c,EAAgB;AAAE,sBAAQ;AAAV,W;;;gBAC1B,OAAArH,S;iBAAU,4BAAAkR,sB,EAAwB;AAAC,sBAAQ;AAAT,W;;;;;;;;;;;;;;;;;;;;;;;;ACrHvC;AAAA;AAAA;;AAOA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;AAeoB;AAII;AAAA;AAAA;AAAA,iBAAS,OAAA8N,eAAA,OAAT;AAA+B,SAA/B;AAGA;AACJ;;;;;AAHI;AAEA;AAAA;;;;;;;;AAEJ;AAII;AAAA;AAAA;AAAA,iBAAS,OAAAC,aAAA,OAAT;AAA6B,SAA7B;AAGA;AAEJ;;;;;AAJI;AAEA;AAAA;;;;;;AAzBZ;AAGI;AAKA;AACI;AASA;AAUJ;AACJ;;;;;AA3BI;AAEI;AAAA;AAIuC;AAAA;AAEnC;AAAA;AASA;AAAA;;;;QAeXC,uB;;;;;AAyCT,uCAAYlH,KAAZ,EAAqC;AAAA;;AAAA;;AACjC,uCAAMA,KAAN;AArCJ;;;;AAIA,iBAAAmH,eAAA,GAA4B,KAA5B;AAEA;;;;AAIO,iBAAAF,aAAA,GAAgB,IAAI,OAAAplB,YAAJ,EAAhB;AASP,iBAAAulB,YAAA,GAAwB,KAAxB;AAEA;;;;AAIA,iBAAAC,iBAAA,GAA8B,KAA9B;AAEA;;;;AAIO,iBAAAL,eAAA,GAAkB,IAAI,OAAAnlB,YAAJ,EAAlB;AAGP,iBAAAylB,YAAA,GAAyB,KAAzB;AAEqC;AAEpC;;;MA3CwC,0BAAAvH,qB;;AAtC7C;;;uBAsCamH,uB,EAAuB,yC;AAAA,K;;;YAAvBA,uB;AAAuB,2C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,c;AAAA,a;AAAA,+rB;AAAA;AAAA;AAnC5B;;;;;;;;;2BAmCKA,uB,EAAuB;cAtCnC,OAAA3iB,SAsCmC;eAtCzB;AACPlnD,kBAAQ,EAAE,sBADH;AAEPw0D,kBAAQ,g4CAFD;AAoCPpN,mBAAS,EAAE,CAAC,mCAAD;AApCJ,S;AAsCyB,Q;;;;;;gBAE/B,OAAA1kD;;;gBAMA,OAAAA;;;gBAMA,OAAA2kD;;;gBAMA,OAAA3kD;;;gBAGA,OAAAA;;;gBAMA,OAAAA;;;gBAMA,OAAA2kD;;;gBAGA,OAAA3kD;;;;;;;;;;;;;;;;;;;;;;;;ACrFL;AAAA;AAAA;;AAIA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;AAQoB;AAA+D;AAAA;AAAA;AAAA;AAAA;AAC3D;AACJ;;;;;;AAGA;AAA2D;AAAU;;;;;AAAV;AAAA;;;;;;QAQlEwnE,c;AAMT,8BAAoB/gC,SAApB,EAA6D;AAAA;;AAAzC,aAAAA,SAAA,GAAAA,SAAA;AAFX,aAAAghC,WAAA,GAAwB,IAAxB;AAGR;;;;gCAEc;AACX,eAAKhhC,SAAL,CAAeC,KAAf;AACH;;;;;;AA9BL;;;uBAmBa8gC,c,EAAc,qC;AAAA,K;;;YAAdA,c;AAAc,gC;AAAA;AAAA;AAAA;AAAA,O;AAAA,6B;AAAA,c;AAAA,a;AAAA,mb;AAAA;AAAA;;AAhBnB;AACI;AACI;AACI;AAGJ;AACA;AACI;AACJ;AACJ;AACA;AACJ;;;;AAToB;AAAA;AAKoC;AAAA;;;;;;;;;2BAQnDA,c,EAAc;cAnB1B,OAAAhjB,SAmB0B;eAnBhB;AACPlnD,kBAAQ,EAAE,WADH;AAEPw0D,kBAAQ,8rBAFD;AAiBPpN,mBAAS,EAAE,CAAC,wBAAD;AAjBJ,S;AAmBgB,Q;;;;;;gBAEtB,OAAA1kD;;;gBAEA,OAAAA;;;;;;;;;;;;;;;;;;;;;;;;AC7BL;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;ACsBY;AACI;AAAI;AAAoB;AAC5B;;;;;;AADQ;AAAA;;;;QDfP0nE,6B;AAOX,6CAA6C18B,KAA7C,EAAiF;AAAA;;AAApC,aAAAA,KAAA,GAAAA,KAAA;AAF5B,aAAA58B,KAAA,GAAQ,IAAI,OAAA0zC,YAAJ,EAAR;AAIhB;;;;mCAEc;AACX;AAEA;AACA,cAAM6lB,aAAa,GAAG,SAAhBA,aAAgB,CAACC,KAAD,EAAW;AAC/B,mBAAO,IAAItnE,IAAJ,CAASsnE,KAAK,GAAG,IAAjB,EAAuBC,WAAvB,GAAqCnlE,KAArC,CAA2C,GAA3C,EAAgD,CAAhD,CAAP;AACD,WAFD,CAJW,CAQX;;;AACA,cAAMolE,WAAW,GAAG,IAAI/0B,GAAJ,EAApB,CATW,CAWX;;AACA,cAAMg1B,aAAa,GAAG,KAAK/8B,KAAL,CAAWvT,KAAX,CAAiBnwB,MAAjB,CAAwB,UAAAsgE,KAAK,EAAI;AACrD,gBAAMI,UAAU,GAAGL,aAAa,CAACC,KAAD,CAAhC;;AACA,gBAAI,CAACE,WAAW,CAACG,GAAZ,CAAgBD,UAAhB,CAAL,EAAkC;AAChCF,yBAAW,CAAC/jE,GAAZ,CAAgBikE,UAAhB;AACA,qBAAO,IAAP;AACD;;AACD,mBAAO,KAAP;AACD,WAPqB,CAAtB;;AASA,eAAKvwC,KAAL,GAAaswC,aAAb;AACH;;;mCAEiBrnE,I,EAAc;AAC9B,cAAM4jD,MAAM,GAAG,IAAI,UAAA1yC,MAAJ,CAAW;AAAClR,gBAAI,EAAEA,IAAI,GAAC,IAAZ;AAAkBwnB,uBAAW,EAAE,KAA/B;AAAsCC,uBAAW,EAAE,KAAK6iB,KAAL,CAAW1lC;AAA9D,WAAX,CAAf;AACA,cAAMo+D,WAAW,GAAG,UAAAn+D,OAAA,CAAQ++C,MAAR,EAAgB,KAAKtZ,KAAL,CAAW1lC,QAA3B,CAApB;AACA,cAAMqH,OAAO,GAAG23C,MAAM,CAACtiD,UAAP,CAAkB,iBAAlB,CAAhB;AACA,2BAAU2K,OAAV,SAAoB+2D,WAAW,GAAG,UAAH,GAAgB,EAA/C;AACD;;;oCAEc;AACb,eAAKt1D,KAAL,CAAWg1C,IAAX,CAAgB;AAAE/+B,kBAAM,EAAE;AAAV,WAAhB;AACD;;;gCAEW;AACV,eAAKjW,KAAL,CAAWg1C,IAAX,CAAgB;AAAE/+B,kBAAM,EAAE;AAAV,WAAhB;AACD;;;;;;AArDH;;;uBAKaqjD,6B,EAA6B,qBAOpB,SAAAnjB,eAPoB,C;AAOL,K;;;YAPxBmjB,6B;AAA6B,6C;AAAA;AAAA;AAAA,O;AAAA,e;AAAA,a;AAAA,8nC;AAAA;AAAA;ACX1C;AACI;AAAuB;AAAO;AAC9B;AACI;AACI;AAAA;AACI;AACJ;AACJ;AACJ;AACJ;AACA;AAAA;AACI;AAAA;AACI;AACJ;AAEA;AAAA;AAAI;AAAkB;AACtB;AAAG;AAA4H;AAE/H;AACI;AACI;AACI;AAAI;AAAK;AACb;AACJ;AACA;AACI;AAGJ;AACJ;AACJ;AAEA;AACI;AAA2B;AAAA,mBAAS,IAAAhhC,KAAA,EAAT;AAAgB,WAAhB;AAAkB;AAAM;AAAI;AAAO;AAC9D;AAAmB;AAAA,mBAAS,iBAAT;AAAmB,WAAnB;AAAqB;AAAM;AAAa;AAAO;AACtE;;;;AAVgB;AAAA;;;;;;;;;2BDdHghC,6B,EAA6B;cALzC,OAAAljB,SAKyC;eAL/B;AACTlnD,kBAAQ,EAAE,wBADD;AAETmnD,qBAAW,EAAE,yCAFJ;AAGTC,mBAAS,EAAE,CAAC,yCAAD;AAHF,S;AAK+B,Q;;gBAOYgjB,6B;AAA6B;kBAApE,OAAAr2B,MAAoE;mBAA7D,SAAAkT,e;AAA6D;;;;gBAFhF,OAAAI;;;;;;;;;;;;;;;;;;;;;;;;AEhBH;AAAA;AAAA;;;;;AAKA;;;;;;;;QASaujB,U;;;;;;;kCACCxpE,K,EAAcypE,U,EAAoBC,S,EAAkB;;;AAC1D,cAAI,CAAC1pE,KAAL,EAAY,OAAO,EAAP;AACZ,cAAI,CAACypE,UAAL,EAAiB,OAAOzpE,KAAP;AACjBypE,oBAAU,GAAGA,UAAU,CAAC//D,WAAX,EAAb;AACA,cAAMigE,SAAS,GAAG,CAAH,KAAGD,SAAS,SAAT,IAAAA,SAAS,WAAT,GAAS,MAAT,GAAAA,SAAS,CAAE1lE,KAAX,CAAiB,GAAjB,OAAoB,IAApB,IAAoB,aAApB,GAAoB,EAApB,GAAyB,EAA3C;AACA,iBAAOhE,KAAK,CAAC4I,MAAN,CAAa,UAAAghE,EAAE,EAAI;AACtB,gBAAIC,QAAQ,GAAG,KAAf;AACAF,qBAAS,CAACvpE,OAAV,CAAkB,UAAC1C,GAAD,EAAS;;;AACvB,kBAAI,CAAJ,KAAIksE,EAAE,CAAClsE,GAAD,CAAF,MAAO,IAAP,IAAO,aAAP,GAAO,MAAP,GAAO,GAAEgM,WAAF,GAAgBoS,QAAhB,CAAyB2tD,UAAzB,CAAX,EAAiD;AAC7CI,wBAAQ,GAAG,IAAX;AACH;AACJ,aAJD;;AAKA,gBAAIF,SAAS,CAACzlE,MAAV,KAAqB,CAAzB,EAA4B;AACxB,qBAAO0lE,EAAE,CAAClgE,WAAH,GAAiBoS,QAAjB,CAA0B2tD,UAA1B,CAAP;AACH;;AACD,mBAAOI,QAAP;AACH,WAXM,CAAP;AAYH;;;;;;AArBL;;;uBAGaL,U;AAAU,K;;;;YAAVA,U;AAAU;;;;;2BAAVA,U,EAAU;cAHtB,OAAA33D,IAGsB;eAHjB;AACF9T,cAAI,EAAE;AADJ,S;AAGiB,Q;;;;;;;;;;;;;;;;;;;;;;ACdvB;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;AAQA,QAAY+rE,eAAZ;;AAAA,eAAYA,eAAZ,EAA2B;AACvB;AACA;AACA;AACA;AACA;AACA;AACH,KAPD,EAAYA,eAAe,GAAf,QAAAA,eAAA,aAAAA,eAAA,GAAe,EAAf,CAAZ;;QAYaC,Y;AACT,4BAAoBC,SAApB,EAA6C;AAAA;;AAAzB,aAAAA,SAAA,GAAAA,SAAA;AAA2B;;;;kCAG3C9kE,K,EAC+D;AAAA,cAA/D+B,IAA+D,uEAAN,MAAM;;AAE/D,kBAAQA,IAAR;AACI,iBAAK,UAAL;AACI,qBACI,KAAK+iE,SAAL,CAAeC,QAAf,CACIH,eAAe,CAACI,YADpB,EAEIhlE,KAFJ,KAGK,EAJT;;AAMJ,iBAAK,KAAL;AACI,qBACI,KAAK8kE,SAAL,CAAeC,QAAf,CAAwBH,eAAe,CAACK,GAAxC,EAA6CjlE,KAA7C,KAAuD,EAD3D;;AAGJ,iBAAK,QAAL;AACI,qBACI,KAAK8kE,SAAL,CAAeC,QAAf,CAAwBH,eAAe,CAACM,MAAxC,EAAgDllE,KAAhD,KAA0D,EAD9D;;AAGJ,iBAAK,OAAL;AACI,qBACI,KAAK8kE,SAAL,CAAeC,QAAf,CAAwBH,eAAe,CAACO,KAAxC,EAA+CnlE,KAA/C,KAAyD,EAD7D;AAjBR;;AAqBA,iBAAO,KAAK8kE,SAAL,CAAeC,QAAf,CAAwBH,eAAe,CAACQ,IAAxC,EAA8CplE,KAA9C,KAAwD,EAA/D;AACH;;;;;;AAhCL;;;uBAGa6kE,Y,EAAY,qC;AAAA,K;;;;YAAZA,Y;AAAY;;;;;2BAAZA,Y,EAAY;cAHxB,OAAAl4D,IAGwB;eAHnB;AACF9T,cAAI,EAAE;AADJ,S;AAGmB,Q;;;;;;;;;;;;;;;;;;;;;;;;;;ACrBzB;AAAA;AAAA;;AAQA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;AAWoB;AACyC;AAAkB;;;;;AAAzC;AAAuB;AAAA;;;;;;;;AANjD;AACI;AAAiC;AAAS;AAC1C;AAEiB;AAAA;AAAA;AAAA;AAAA;;AACb;AAEJ;AACJ;;;;;AAPe;AAAA;AAAsB;AAAA;AAChB;AAAA,mDAAqB,OAArB,EAAqB,wCAArB;AAGK;AAAA;;;;QAezBwsE,oB;;;;;AAoBT,oCAAYhJ,KAAZ,EAAqC;AAAA;;AAAA;;AACjC,uCAAMA,KAAN;AAVG,iBAAAr8D,KAAA,GAAQ,IAAI,OAAAzH,eAAJ,CAAmDwG,SAAnD,CAAR;AAS8B;AAEpC;;;;yCAEgBjG,E,EAAO;AACpB,eAAKyxD,SAAL,GAAiBzxD,EAAjB;AACH;;;0CAEiBA,E,EAAO;AACrB,eAAK0xD,QAAL,GAAgB1xD,EAAhB;AACH;;;yCAEgBwhE,U,EAAmB;AAChC,eAAK5hC,QAAL,GAAgB4hC,UAAhB;AACH;;;iCAEet6D,K,EAAe;AAC3B,cAAM6Z,GAAG,GAAG,KAAK8F,OAAL,CAAarf,IAAb,CAAkB,UAAAunB,CAAC;AAAA,mBAAIA,CAAC,CAAC7nB,KAAF,KAAYA,KAAhB;AAAA,WAAnB,CAAZ;AACA,eAAK8gE,UAAL,CAAgBjnD,GAAhB;;AACA,cAAI,KAAK0wC,SAAT,EAAoB;AAChB,iBAAKA,SAAL,CAAe1wC,GAAf;AACH;AACJ;;;mCAEUA,G,EAAsB;AAC7B,eAAK7Z,KAAL,CAAWiL,IAAX,CAAgB4O,GAAhB;AACH;;;;MA9CqC,0BAAAuiD,qB;;AAxB1C;;;uBAwBaiJ,oB,EAAoB,yC;AAAA,K;;;YAApBA,oB;AAAoB,uC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA,uCARlB,CACP;AACIlzB,eAAO,EAAE,QAAAsY,iBADb;AAEIC,mBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,iBAAM0a,oBAAN;AAAA,SAAX,CAFjB;AAGIza,aAAK,EAAE;AAHX,OADO,CAQkB,GAF5B,6BAE4B,C;AAF5B,c;AAAA,a;AAAA,+K;AAAA;AAAA;AAnBG;;;;;;;;;;2BAqBKya,oB,EAAoB;cAxBhC,OAAAzkB,SAwBgC;eAxBtB;AACPlnD,kBAAQ,EAAE,kBADH;AAEPw0D,kBAAQ,snBAFD;AAePpN,mBAAS,EAAE,CAAC,+BAAD,CAfJ;AAgBPvD,mBAAS,EAAE,CACP;AACIpL,mBAAO,EAAE,QAAAsY,iBADb;AAEIC,uBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,qBAAM0a,oBAAN;AAAA,aAAX,CAFjB;AAGIza,iBAAK,EAAE;AAHX,WADO;AAhBJ,S;AAwBsB,Q;;;;;;gBAE5B,OAAAxuD;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAMA,OAAAA;;;;;;;;;;;;;;;;;;;;;;;;ACrDL;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACmBA;AAAiC;AAAoC;;;;QDXxDkpE,oB;AAcT,oCACYr5C,IADZ,EACqC;AAAA;;AAAzB,aAAAA,IAAA,GAAAA,IAAA;AAVL,aAAAs5C,gBAAA,GAA0C,CAC7C;AAACxjE,cAAI,EAAE,cAAAinC,SAAA,CAAUw8B,OAAjB;AAA0B5oD,eAAK,EAAE;AAAjC,SAD6C,EAE7C;AAAC7a,cAAI,EAAE,cAAAinC,SAAA,CAAUy8B,IAAjB;AAAuB7oD,eAAK,EAAE;AAA9B,SAF6C,CAA1C;AAKA,aAAA2H,WAAA,GAAc,EAAd;AAMH;;;;mCAMW;AAAA;;AACX,eAAK0H,IAAL,CAAU5W,WAAV,CAAsBzH,IAAtB,CAA2B,YAAAyG,KAAA,CAAM,UAACC,CAAD;AAAA,mBAAOA,CAAP;AAAA,WAAN,CAA3B,EAA4CvZ,SAA5C,CAAsD,YAAM;;;AACxD,oBAAI,CAACwpB,WAAL,GAAmB,qBAAI,CAAC0H,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAE7L,QAAX,MAAmB,IAAnB,IAAmB,aAAnB,GAAmB,MAAnB,GAAmB,GAAE1e,QAArB,KAAiC,iBAApD;AACH,WAFD;;AAGA,cAAG,KAAKgkE,gBAAL,CAAsB1lE,KAAtB,KAAgC,cAAAq6B,gBAAA,CAAiBC,IAApD,EAAyD;AACrD,iBAAKqrC,YAAL,GAAoB,KAAKJ,gBAAL,CAAsB,CAAtB,CAApB;AACA,0BAAAr7B,uBAAA,CAAwB,KAAKjxB,IAA7B;AACH,WAHD,MAGK;AACD,iBAAK0sD,YAAL,GAAoB,KAAKJ,gBAAL,CAAsB,CAAtB,CAApB;AACH;AACJ;;;qCAEmBvlE,K,EAAe;AAC/B,eAAK2lE,YAAL,GAAoB,KAAKJ,gBAAL,CAAsB7hE,MAAtB,CAA6B,UAAC3B,IAAD;AAAA,mBAAUA,IAAI,CAACA,IAAL,KAAc/B,KAAxB;AAAA,WAA7B,EAA4D,CAA5D,CAApB;;AACA,cAAG,KAAK2lE,YAAL,CAAkB5jE,IAAlB,KAA2B,cAAAinC,SAAA,CAAUw8B,OAAxC,EAAgD;AAC5C,iBAAKE,gBAAL,CAAsBhoE,QAAtB,CAA+B,KAAKkoE,YAAL,CAAkBC,4BAAlB,CAA+C7lE,KAA9E;AACH,WAFD,MAEK;AACD,iBAAK0lE,gBAAL,CAAsBhoE,QAAtB,CAA+B,cAAA28B,gBAAA,CAAiBC,IAAhD;AACH;AACJ;;;yCAEuBx9B,I,EAAa;AACjC,iBAAO,IAAI,UAAAkR,MAAJ,CAAW;AAAClR,gBAAI,EAAJA,IAAD;AAAOynB,uBAAW,EAAE,KAAKA,WAAzB;AAAsCD,uBAAW,EAAE;AAAnD,WAAX,CAAP;AACH;;;4BA3B0B;AACvB,iBAAO,KAAKrL,IAAL,CAAUzG,GAAV,CAAc,mBAAd,CAAP;AACH;;;4BA2Be;AACZ,cAAMqR,iBAAiB,GAAG,KAAK5K,IAAL,CAAUkxB,QAAV,CAAmBtmB,iBAA7C;AACA,cAAME,eAAe,GAAG,KAAK9K,IAAL,CAAUkxB,QAAV,CAAmBpmB,eAA3C;AACA,iBAAOF,iBAAiB,CAACi3B,OAAlB,IAA6B/2B,eAAe,CAAC+2B,OAApD;AACH;;;;;;AAzDL;;;uBAMawqB,oB,EAAoB,4C;AAAA,K;;;YAApBA,oB;AAAoB,8C;AAAA;AAAA;yBAYlB,oCAAAQ,qB,EAAqB,I;;;;;;;;;;;;;;;;;ACzBpC;AACI;AAA6C;AAAA,mBAAU,IAAAC,YAAA,cAAV;AAAoC,WAApC;AACzC;AAEI;AACI;AACJ;AACA;AAIJ;AACA;AAEI;AACI;AACJ;AACA;AAIJ;AACJ;AACJ;AACA;;;;AAxBuC;AAClB;AAAA;AAGS;AAAA;AACd;AAAA;AAGA;AAAA,4FAA2D,MAA3D,EAA2D,QAA3D;AAMc;AAAA;AACd;AAAA;AAGA;AAAA,4FAA2D,MAA3D,EAA2D,QAA3D;AAMG;AAAA;;;;;;;;;2BDXNT,oB,EAAoB;cANhC,OAAA1kB,SAMgC;eANtB;AACPlnD,kBAAQ,EAAE,yBADH;AAEPmnD,qBAAW,EAAE,0CAFN;AAGPC,mBAAS,EAAE,CAAC,0CAAD;AAHJ,S;AAMsB,Q;;;;;;gBAE5B,OAAA1kD;;;gBAUA,OAAAioD,S;iBAAU,oCAAAyhB,qB;;;;;;;;;;;;;;;;;;;;;;;;AEzBf;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACCQ;AACI;AAAI;AAAoB;AACxB;AAAkC;AAAA;AAAA;AAAA;AAAA;AAAA;AAA2B;AAAM;AACvE;;;;;;AAFQ;AAAA;;;;;;;;;;;;QDMHE,kB;;;;;AAqBT,kCAAqB/5C,IAArB,EAAgD;AAAA;;AAAA;;AAC5C;AADiB,iBAAAA,IAAA,GAAAA,IAAA;AAfd,iBAAAg6C,cAAA,GAAgC,EAAhC;AACA,iBAAAvkE,QAAA,GAAmB,EAAnB;AACA,iBAAAivB,KAAA,GAAgB,UAAApqB,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAhB;AACA,iBAAAykD,UAAA,GAAqB,SAAKxwB,KAAL,CAAWuJ,KAAX,EAArB;AACA,iBAAAknB,WAAA,GAAsB,SAAKD,UAAL,CAAgBh0B,UAAhB,CAA2B,KAA3B,EAAkCxvB,QAAlC,CAA2C;AAAE6tD,eAAK,EAAE;AAAT,SAA3C,CAAtB;AACA,iBAAA/tD,MAAA,GAAiB,UAAA8I,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAjB;AAmEP;;;;AAGO,iBAAAukE,iBAAA,GAAoB,YAAM;AAC7B,mBAAKiF,oBAAL,CAA0B,SAAKv1C,KAA/B;AACH,SAFM;;AA5DyC;AAE/C;;;;mCAEc;AAAA;;AACX;AACA,eAAKjvB,QAAL,GAAgB,KAAKuX,IAAL,CAAUzG,GAAV,CAAc,UAAd,EAA0BxS,KAA1C;AACA,eAAK2wB,KAAL,GAAa,IAAI,UAAA3iB,MAAJ,CAAW;AAAElR,gBAAI,EAAEJ,IAAI,CAACunB,GAAL,EAAR;AAAoBK,uBAAW,EAAE,KAAjC;AAAwCC,uBAAW,EAAE,KAAK7iB;AAA1D,WAAX,CAAb,CAHW,CAIX;;AACA,eAAKy/C,UAAL,GAAkB,KAAKxwB,KAAL,CAAWuJ,KAAX,EAAlB;AACA,eAAKknB,WAAL,GAAmB,KAAKD,UAAL,CAAgBh0B,UAAhB,CAA2B,KAA3B,EAAkCxvB,QAAlC,CAA2C;AAAE6tD,iBAAK,EAAE;AAAT,WAA3C,CAAnB;;AAEA,cAAG,KAAK7J,gBAAL,CAAsB3hD,KAAzB,EAA+B;AAC3B,gBAAMmmE,WAAW,sBAAO,KAAKxkB,gBAAL,CAAsB3hD,KAA7B,CAAjB,CAD2B,CAC2B;;;AACtD,iBAAKimE,cAAL,GAAsBE,WAAW,CAACnhE,IAAZ,CAAiB,UAAC21B,EAAD,EAAaC,EAAb;AAAA,qBAA4BD,EAAE,CAACl0B,EAAH,GAAQm0B,EAAE,CAACn0B,EAAvC;AAAA,aAAjB,CAAtB;AACH;;AACD,eAAK5L,YAAL,CAAkB,kBAAlB,EAAuC,KAAK8mD,gBAAL,CAAsBjoB,YAAtB,CAClC3+B,SADkC,CACxB,YAAM;AACb,oBAAI,CAACkrE,cAAL,sBAA0B,QAAI,CAACtkB,gBAAL,CAAsB3hD,KAAhD;AACH,WAHkC,CAAvC;AAKH;AAED;;;;;;;gCAIeghE,S,EAAmB;AAC9B,cAAM/iE,CAAC,GAAG+iE,SAAS,CAAC9mC,KAAV,EAAV;AACA,cAAMksC,UAAU,GAAG,KAAKC,UAAL,CAAgBrmE,KAAnC;AACA,cAAImrD,QAAQ,GAAGltD,CAAC,CAACP,QAAF,CAAW;AAAC0B,gBAAI,EAAEgnE,UAAU,CAAC37B,QAAlB;AAA4BttC,kBAAM,EAAEipE,UAAU,CAAC7oE;AAA/C,WAAX,CAAf;AAEA;;AACA,cAAI4tD,QAAQ,CAACh1B,YAAT,CAAsB,KAAKgrB,UAA3B,CAAJ,EAA4C;AACxCgK,oBAAQ,GAAG,KAAKhK,UAAhB;AACH;AAED;;;AACA,cAAMmlB,WAAW,GAAG,KAAKL,cAAL,CAAoBviE,MAApB,CAA2B,UAAC5G,IAAD;AAAA,mBAAiBquD,QAAQ,CAAC9vB,UAAT,CAAoBv+B,IAApB,EAA0B,KAA1B,CAAjB;AAAA,WAA3B,CAApB;;AACA,cAAGwpE,WAAW,CAACtnE,MAAf,EAAsB;AAClB;AACH;;AAED,eAAKinE,cAAL,CAAoBthE,IAApB,CAAyBwmD,QAAzB;AACA,eAAKxJ,gBAAL,CAAsBjkD,QAAtB,CAA+B,KAAKuoE,cAAL,CAAoBjhE,IAApB,CAAyB,UAAC21B,EAAD,EAAKC,EAAL;AAAA,mBAAYD,EAAE,CAACl0B,EAAH,GAAQm0B,EAAE,CAACn0B,EAAvB;AAAA,WAAzB,CAA/B;AACA,eAAK8/D,aAAL;AACH;AAED;;;;;;;;6CAK6BC,W,EAAqB;AAC9C,eAAKrlB,UAAL,GAAkBqlB,WAAW,CAACtsC,KAAZ,EAAlB;AACH;;;oCASkB;AACf,eAAKusC,OAAL,CAAa,KAAK91C,KAAlB;AACA,eAAKu1C,oBAAL,CAA0B,KAAKv1C,KAA/B;AACH;;;0CAEwB;AACrB,eAAKy6B,QAAL,CAAcC,SAAd;AACH;;;yCAEuB;AACpB,eAAKD,QAAL,CAAcE,QAAd;AACH;;;mCAEiBxuD,I,EAAc;AAC5B,cAAM1B,KAAK,GAAG,KAAK6qE,cAAL,CAAoBtjE,GAApB,CAAwB,UAAC1E,CAAD;AAAA,mBAAeA,CAAC,CAACwI,EAAjB;AAAA,WAAxB,EAA6CvG,OAA7C,CAAqDpD,IAAI,CAAC2J,EAA1D,CAAd;AACA,eAAKw/D,cAAL,CAAoB18D,MAApB,CAA2BnO,KAA3B,EAAkC,CAAlC;AACA,eAAKumD,gBAAL,CAAsBjkD,QAAtB,CAA+B,KAAKuoE,cAApC;AACA,eAAKM,aAAL;AACH;;;gCAEczpE,I,EAAM;AACjB,iBAAO,IAAI,UAAAkR,MAAJ,CAAW;AACdlR,gBAAI,EAAE,UAAAsgD,WAAA,CAAYtgD,IAAZ,EAAkB2J,EADV;AAEd6d,uBAAW,EAAE,KAFC;AAGdC,uBAAW,EAAE,KAAK7iB;AAHJ,WAAX,EAIJ25B,UAJI,CAKH,IAAI,UAAArtB,MAAJ,CAAW;AACPlR,gBAAI,EAAEJ,IAAI,CAACunB,GAAL,EADC;AAEPK,uBAAW,EAAE,KAFN;AAGPC,uBAAW,EAAE,KAAK7iB;AAHX,WAAX,CALG,EAUH,KAVG,CAAP;AAYH;;;mCAEiB5E,I,EAAY;AAC1B,cAAM6E,OAAO,GAAG,KAAKA,OAAL,CAAa7E,IAAb,CAAhB;AACA,cAAMiM,OAAO,GAAGjM,IAAI,CAACsB,UAAL,CAAgB,iBAAhB,CAAhB;AAEA,2BAAW2K,OAAX,SAAqBpH,OAAO,GAAG,UAAH,GAAgB,EAA5C;AACH;;;wCAEoB;AACjB,cAAI,KAAKskE,cAAL,CAAoBjnE,MAApB,KAA+B,CAAnC,EACI;AAEJ,cAAMorC,EAAE,GAAG,KAAKne,IAAL,CAAU7L,QAAV,CAAmB1e,QAA9B;AACA,cAAM2oC,QAAQ,GAAG,UAAA9jC,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoBwK,MAApB,CAA2BkjC,EAA3B,CAAjB;AACA,cAAI3sC,MAAM,GAAG,KAAKwoE,cAAL,CAAoB,CAApB,EAAuB/rC,KAAvB,EAAb;AAEAz8B,gBAAM,GAAGA,MAAM,CAACC,QAAP,CAAgB;AACrB0B,gBAAI,EAAG,KAAKinE,UAAL,CAAgBrmE,KAAhB,CAAiCmE,KADnB;AAErBhH,kBAAM,EAAG,KAAKkpE,UAAL,CAAgBrmE,KAAhB,CAAiCzC;AAFrB,WAAhB,CAAT;;AAKA,cAAI,KAAK0oE,cAAL,CAAoB,CAApB,EAAuB5qC,UAAvB,CAAkC,KAAK1K,KAAvC,EAA8C,KAA9C,KAAwDlzB,MAAM,CAAC0G,KAAP,GAAekmC,QAAQ,CAAClmC,KAApF,EAA2F;AAAA,wCAC9C,OAAA3G,mBAAA,CAAoB,KAAKmzB,KAAzB,EAAgC,EAAhC,CAD8C;AAAA,gBACtExzB,MADsE,yBAC/EI,OAD+E;AAAA,gBACvD6B,IADuD,yBAC9D+E,KAD8D;;AAEvF1G,kBAAM,GAAGA,MAAM,CAACC,QAAP,CAAgB;AAAEP,oBAAM,EAANA,MAAF;AAAUiC,kBAAI,EAAJA,IAAV;AAAgBlC,oBAAM,EAAE;AAAxB,aAAhB,CAAT;AACH;;AAED,eAAKmpE,UAAL,CAAgB3oE,QAAhB,CAAyBD,MAAzB;AACH;;;4BArI0B;AACvB,iBAAO,KAAKwb,IAAL,CAAUzG,GAAV,CAAc,mBAAd,CAAP;AACH;;;4BAEoB;AACjB,iBAAO,KAAKyG,IAAL,CAAUzG,GAAV,CAAc,QAAd,CAAP;AACH;;;;MAnBmC,OAAAjZ,a;;AANxC;;;uBAMaysE,kB,EAAkB,4C;AAAA,K;;;YAAlBA,kB;AAAkB,2C;AAAA;AAAA;+BAIhB,OAAAta,c,EAAgB,I;;;;;;;;;;;;;;;;;;;ACjB/B;AACI;AACI;AACI;AAAI;AAAI;AACR;AAAI;AAAM;AACd;AACA;AAIA;AACI;AACI;AAAK;AAAA,mBAAiB,IAAAC,cAAA,EAAjB;AAAiC,WAAjC;AACyB;AAAoB;AAClD;AAAiD;AAAA,mBAAU,IAAAsV,iBAAA,EAAV;AAA6B,WAA7B;AAC7C;AAAkD;AAAA,mBAASrV,MAAM,CAACt/C,eAAP,EAAT;AAAiC,WAAjC;AAC9C;AAII;AAAiB,gBAAAm6D,OAAA;AAAiB,uBAAA5a,eAAA;AAAiB,WAAnD;AACH;AACD;AAII;AAAA,mBAAS,IAAAuX,SAAA,EAAT;AAAoB,WAApB;AACH;AACD;AACJ;AACJ;AACJ;AACA;AACJ;AACJ;AACJ;;;;;;AAnCuB;AACZ;AAAA;AAKC;AAAA;AAOI;AAAA;AAKY;AAAA,mDAAsB,SAAtB,EAAsB,2DAAtB;;;;;;;;;2BDLf4C,kB,EAAkB;cAN9B,OAAAplB,SAM8B;eANpB;AACPlnD,kBAAQ,EAAE,sBADH;AAEPmnD,qBAAW,EAAE,uCAFN;AAGPC,mBAAS,EAAE,CAAC,uCAAD;AAHJ,S;AAMoB,Q;;;;;;gBAE1B,OAAA1kD;;;gBACA,OAAAA;;;gBACA,OAAAioD,S;iBAAU,OAAAqH,c,EAAgB;AAAE,sBAAQ;AAAV,W;;;;;;;;;;;;;;;;;;;;;;;;AEjB/B;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACOQ;AAAoE;AAAmC;;;;;;AAYvG;AAA4D;AAAmC;;;;;;AAQ/E;AACI;AACJ;;;;;AAFkE;AAC9D;AAAA;;;;;;AAMJ;AACI;AACJ;;;;;;AAFyD;AACrD;AAAA;;;;;;;;;;;;;;;;;;;;AASZ;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AACI;AACJ;;;;;AAHA;AAEI;AAAA;;;;;;AARZ;AACI;AAAA;AAA6C;AAC7C;AACI;AAOJ;AACJ;;;;;AANQ;AAAA;;;;QDtCHoa,qB;;;;;AANb;AAAA;;AAAA;;;AAWI;;AACO,iBAAAn1C,KAAA,GAAgB,UAAApqB,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAhB;AACA,iBAAAgqE,WAAA,GAAsB,SAAK/1C,KAAL,CAAWjzB,QAAX,CAAoB;AAAEP,gBAAM,EAAEC,IAAI,CAACC,IAAL,CAAU,SAAKszB,KAAL,CAAWpzB,OAAX,GAAqB,CAA/B,IAAoC;AAA9C,SAApB,CAAtB;AACA,iBAAAopE,OAAA,GAAkB,SAAKh2C,KAAL,CAAWhzB,QAAX,CAAoB;AAAE6tD,eAAK,EAAE;AAAT,SAApB,EAAkCr+B,UAAlC,CAA6C,KAA7C,CAAlB;AACA,iBAAAzrB,QAAA,GAAmB,EAAnB;AAMA,iBAAAklE,qBAAA,GAA6C,CAChD;AAAChqD,eAAK,EAAE,KAAR;AAAe7N,YAAE,EAAE,cAAAsrB,gBAAA,CAAiB6O;AAApC,SADgD,EAEhD;AAACtsB,eAAK,EAAE,MAAR;AAAe7N,YAAE,EAAE,cAAAsrB,gBAAA,CAAiBU;AAApC,SAFgD,EAGhD;AAACne,eAAK,EAAE,OAAR;AAAiB7N,YAAE,EAAE,cAAAsrB,gBAAA,CAAiB8O;AAAtC,SAHgD,CAA7C;AAKA,iBAAAI,SAAA,GAA6B,EAA7B;AAyHP;;AACQ,iBAAAs9B,0BAAA,GAA6B,YAAM;AACvC,cAAG,SAAKC,oBAAL,CAA0B9nE,MAA1B,GAAmC,SAAK+nE,6BAAL,CAAmC/mE,KAAzE,EAA+E;AAC3E,qBAAK+mE,6BAAL,CAAmCrpE,QAAnC,CAA4C,CAA5C;AACH;AACJ,SAJO;;AApJZ;AAoRC;;;;mCA7NkB;AAAA;;AACX;AACA,eAAKgE,QAAL,GAAgB,KAAKuX,IAAL,CAAUzG,GAAV,CAAc,UAAd,EAA0BxS,KAA1C;AACA,eAAK2wB,KAAL,GAAa,IAAI,UAAA3iB,MAAJ,CAAW;AAAElR,gBAAI,EAAEJ,IAAI,CAACunB,GAAL,EAAR;AAAoBK,uBAAW,EAAE,KAAjC;AAAwCC,uBAAW,EAAE,KAAK7iB;AAA1D,WAAX,CAAb,CAHW,CAIX;;AACA,eAAKolE,oBAAL,GAA4B,IAAIj9D,KAAJ,CAAU,CAAV,CAA5B;AACA,eAAK68D,WAAL,GAAmB,OAAAlpE,mBAAA,CAAoB,KAAKmzB,KAAzB,EAAgC,EAAhC,CAAnB;AACA,eAAKg2C,OAAL,GAAe,KAAKh2C,KAAL,CAAWhzB,QAAX,CAAoB;AAAE6tD,iBAAK,EAAE;AAAT,WAApB,EAAkCr+B,UAAlC,CAA6C,KAA7C,CAAf;AACA,eAAK65C,SAAL,GAAiB,KAAKN,WAAL,CAAiB/oE,QAAjB,CAA0B;AAAC4wB,gBAAI,EAAE;AAAP,WAA1B,CAAjB;AAEA,eAAK04C,uBAAL,CAA6B,KAAKC,gCAAL,CAAsClnE,KAAnE,EAVW,CAU+D;;AAE1E,cAAG,CAAC,KAAKmnE,2BAAL,CAAiCnnE,KAArC,EAA2C;AACvC,iBAAKmnE,2BAAL,CAAiCzpE,QAAjC,CAA0C,cAAA28B,gBAAA,CAAiBU,MAA3D;AACH;;AAED,cAAG,KAAKosC,2BAAL,CAAiCnnE,KAAjC,KAA2C,cAAAq6B,gBAAA,CAAiBC,IAA/D,EAAoE;AAChE,iBAAKurC,4BAAL,CAAkCnoE,QAAlC,CAA2C,KAAKypE,2BAAL,CAAiCnnE,KAA5E;AACH;;AAED,eAAKupC,SAAL,GAAiB,cAAAH,gBAAA,CAAiB,KAAK89B,gCAAL,CAAsClnE,KAAtC,CAA4CyG,EAA7D,EAAiE;AAAE8d,uBAAW,EAAE,KAAKmiD,WAAL,CAAiBniD;AAAhC,WAAjE,CAAjB;AACA,eAAK6iD,oBAAL;;AAEA,cAAG,KAAKC,yBAAL,CAA+BrnE,KAA/B,CAAqChB,MAArC,GAA8C,CAAjD,EAAmD;AAC/C,iBAAKuqC,SAAL,GAAiB,KAAKA,SAAL,CAAe5mC,GAAf,CAAmB,UAAC1B,GAAD;AAAA,qBAC/B,MAAD,OAAC,CAAD,kBAAKA,GAAL,CAAC,EAAO;AAAEwoC,sBAAM,EAAE,QAAI,CAAC49B,yBAAL,CAA+BrnE,KAA/B,CAAqC4W,QAArC,CAA8C3V,GAAG,CAACyoC,SAAlD;AAAV,eAAP,CAD+B;AAAA,aAAnB,CAAjB;AAGH;;AAED,cAAG,CAAC,KAAK29B,yBAAL,CAA+BrnE,KAA/B,CAAqChB,MAAtC,IAAgD,KAAKmoE,2BAAL,CAAiCnnE,KAAjC,KAA2C,cAAAq6B,gBAAA,CAAiBU,MAA/G,EAAsH;AAClH,gBAAMusC,YAAY,GAAG,KAAK/9B,SAAL,CAAe7lC,MAAf,CAAsB,UAACzC,GAAD;AAAA,qBAASA,GAAG,CAACwoC,MAAb;AAAA,aAAtB,EAA2C9mC,GAA3C,CAA+C,UAAC1B,GAAD;AAAA,qBAAOA,GAAG,CAACyoC,SAAX;AAAA,aAA/C,CAArB;AACA,iBAAK29B,yBAAL,CAA+B3pE,QAA/B,CAAwC4pE,YAAxC;AACH;;AAED,eAAKC,qBAAL;AAEA,eAAK1sE,YAAL,CAAkB,kBAAlB,EAAuC,KAAKqsE,gCAAL,CAAsCxtC,YAAtC,CAClC3+B,SADkC,CACxB,UAACkQ,IAAD,EAAU;AACjB,oBAAI,CAACg8D,uBAAL,CAA6Bh8D,IAA7B;AACH,WAHkC,CAAvC;AAMA,eAAKpQ,YAAL,CAAkB,gBAAlB,EAAqC,KAAK2sE,wBAAL,CAA8B9tC,YAA9B,CAChC3+B,SADgC,CACtB,YAAM;AACb,oBAAI,CAACqsE,oBAAL;AACH,WAHgC,CAArC;AAMA,eAAKvsE,YAAL,CAAkB,oCAAlB,EAAyD,KAAKssE,2BAAL,CAAiCztC,YAAjC,CACpD3+B,SADoD,CAC1C,YAAM;AACb,oBAAI,CAACqsE,oBAAL;AACH,WAHoD,CAAzD;AAKH;;;gDAE8B1/D,W,EAAmB;AAC9C,cAAI+/D,QAAQ,GAAG,KAAKD,wBAAL,CAA8BxnE,KAA9B,CAAoCtC,QAApC,CAA6C;AAAC0B,gBAAI,EAAEsI,WAAW,CAAC+iC,QAAnB;AAA6BttC,kBAAM,EAAEuK,WAAW,CAACnK;AAAjD,WAA7C,CAAf;AAEA;;AACA,eAAKypE,SAAL,GAAiBt/D,WAAW,CAAC2zB,UAAZ,CAAuB,KAAKsrC,OAA5B,EAAoC,KAApC,IAA6Cj/D,WAA7C,GAA2DA,WAAW,CAAC/J,QAAZ,CAAqB;AAAC4wB,gBAAI,EAAE;AAAP,WAArB,CAA5E;;AAEA,cAAGk5C,QAAQ,CAACtxC,YAAT,CAAsB,KAAK6wC,SAA3B,CAAH,EAAyC;AACrCS,oBAAQ,GAAG,KAAKT,SAAhB;AACH;;AAED,eAAKQ,wBAAL,CAA8B9pE,QAA9B,CAAuC+pE,QAAvC;AAEA,eAAKL,oBAAL;AACA,eAAKM,mBAAL;AACH;;;wCAEsB1nE,K,EAAuB;AAC1C,eAAK2nE,gBAAL,CAAsB3nE,KAAtB;AACA,eAAKmnE,2BAAL,CAAiCzpE,QAAjC,CAA0CsC,KAA1C;AACA,eAAK6lE,4BAAL,CAAkCnoE,QAAlC,CAA2CsC,KAA3C;AACA,eAAK+mE,6BAAL,CAAmCrpE,QAAnC,CAA4C,CAA5C;AACA,eAAK6pE,qBAAL;AACH;;;uCAEqBvnE,K,EAAa;AAC/B,eAAK+mE,6BAAL,CAAmCrpE,QAAnC,CAA4CsC,KAA5C;AACA,eAAKunE,qBAAL;AACH;;;yCAEuBvnE,K,EAAa;AACjC,iBAAO,KAAK+mE,6BAAL,CAAmC/mE,KAAnC,KAA6C,CAA7C,aAAoDA,KAApD,WAAiEA,KAAxE;AACH;;;;AAaD;;;+CAG2B;AACvB,cAAMhD,KAAK,GAAG,KAAKkqE,gCAAL,CAAsClnE,KAApD;AACA,cAAM4nE,SAAS,GAAG,KAAKJ,wBAAL,CAA8BxnE,KAA9B,CAAoC+1B,QAApC,CAA6C/4B,KAA7C,EAAoD,KAAK6qE,oBAAzD,EAA+E,KAAKA,oBAApF,CAAlB,CAFuB,CAGvB;;AACA,eAAKf,oBAAL,GAA4B,IAAIj9D,KAAJ,CAAUzM,IAAI,CAACg2B,KAAL,CAAWw0C,SAAX,KAAyB,CAAnC,CAA5B;AACA,eAAKf,0BAAL;;AACA,cAAG,KAAKM,2BAAL,CAAiCnnE,KAAjC,KAA2C,cAAAq6B,gBAAA,CAAiBC,IAA/D,EAAoE;AAChE,iBAAKitC,qBAAL;AACH;AACJ;AAED;;;;;;gDAG+B;AAE3B;;AAEA,cAAG,KAAKJ,2BAAL,CAAiCnnE,KAAjC,KAA2C,cAAAq6B,gBAAA,CAAiBC,IAA/D,EAAoE;AAChE;AACH;;AAED,cAAMC,UAAU,GAAG,EAAnB;AACA,cAAMutC,UAAU,GAAG,KAAKZ,gCAAL,CAAsClnE,KAAzD;AACA,cAAIhD,KAAK,GAAG8qE,UAAZ;AACA,cAAM39C,GAAG,GAAG,KAAKq9C,wBAAL,CAA8BxnE,KAA1C;AACA,cAAM6uB,QAAQ,GAAG,KAAKk4C,6BAAL,CAAmC/mE,KAApD;AACA,cAAM+nE,WAAW,GAAG,KAAKx+B,SAAL,CAAe7lC,MAAf,CAAsB,UAAAzC,GAAG;AAAA,mBAAIA,GAAG,CAACwoC,MAAR;AAAA,WAAzB,CAApB;AACA;;;;AAIA;;AACA,cAAMuS,gBAAgB,GAAG8rB,UAAU,CAACzrB,OAAX,KAAuB,EAAvB,IAA6B,KAAK8qB,2BAAL,CAAiCnnE,KAAjC,KAA2C,cAAAq6B,gBAAA,CAAiB8O,gBAAlH;;AAEA,cAAG,KAAKg+B,2BAAL,CAAiCnnE,KAAjC,KAA2C,cAAAq6B,gBAAA,CAAiBU,MAA/D,EAAsE;AAClE/9B,iBAAK,GAAGA,KAAK,CAACwJ,YAAN,CAAmB,MAAnB,CAAR;AACH;;AAED,iBAAO2jB,GAAG,CAAC4L,QAAJ,CAAa/4B,KAAK,CAACwJ,YAAN,CAAmB,KAAnB,CAAb,EAAwC,KAAKqhE,oBAA7C,EAAmE,KAAKA,oBAAxE,KAAiG,CAAxG,EAA2G;AAEvG,gBAAG,KAAKV,2BAAL,CAAiCnnE,KAAjC,KAA2C,cAAAq6B,gBAAA,CAAiBU,MAA/D,EAAsE;AAClER,wBAAU,CAAC51B,IAAX,CAAgB3H,KAAhB;AACAA,mBAAK,GAAGA,KAAK,CAACW,QAAN,qBAAiB,KAAKkqE,oBAAtB,EAA6Ch5C,QAA7C,GAAwDmtB,gBAAxD,CAAR;AACD;;;;;;;;AAOC,kBAAGh/C,KAAK,CAACq/C,OAAN,KAAkByrB,UAAU,CAACzrB,OAA7B,IAAwCr/C,KAAK,CAACq/C,OAAN,KAAkBr/C,KAAK,CAACF,IAAN,CAAWkrE,WAArE,IAAoF,KAAKb,2BAAL,CAAiCnnE,KAAjC,KAA2C,cAAAq6B,gBAAA,CAAiB8O,gBAAnJ,EAAqK;AACjKnsC,qBAAK,GAAGA,KAAK,CAACU,QAAN,CAAe;AAACuD,qBAAG,EAAE6mE,UAAU,CAACzrB;AAAjB,iBAAf,CAAR;AACH;AACJ,aAbD,MAaM;AACF0rB,yBAAW,CAAC7sE,OAAZ,CAAoB,UAAC+F,GAAD,EAAO;AACvB,oBAAMnE,IAAI,GAAGE,KAAK,CAACW,QAAN,CAAe;AAAC4wB,sBAAI,EAAEttB,GAAG,CAAC0oC;AAAX,iBAAf,CAAb;;AACA,oBAAG,CAAC7sC,IAAI,CAACs5B,WAAL,CAAiB0xC,UAAjB,KAAgChrE,IAAI,CAACu+B,UAAL,CAAgBysC,UAAhB,EAA4B,KAA5B,CAAjC,MACAhrE,IAAI,CAACq5B,YAAL,CAAkBhM,GAAlB,KAA0BrtB,IAAI,CAACu+B,UAAL,CAAgBlR,GAAhB,EAAqB,KAArB,CAD1B,CAAH,EAC0D;AACtDoQ,4BAAU,CAAC51B,IAAX,CAAgB7H,IAAhB;AACH;AACJ,eAND;AAOAE,mBAAK,GAAGA,KAAK,CAACW,QAAN,qBAAiB,KAAKkqE,oBAAtB,EAA6Ch5C,QAA7C,EAAR;AACH;AACJ;;AAED,eAAK5V,IAAL,CAAUkxB,QAAV,CAAmBvmB,gBAAnB,CAAoClmB,QAApC,CAA6C68B,UAAU,CAACv7B,MAAxD;AACA,eAAKia,IAAL,CAAUkxB,QAAV,CAAmBtmB,iBAAnB,CAAqCnmB,QAArC,CAA8C68B,UAAU,CAACv1B,IAAX,CAAgB,UAAC21B,EAAD,EAAKC,EAAL;AAAA,mBAAYD,EAAE,CAACl0B,EAAH,GAAQm0B,EAAE,CAACn0B,EAAvB;AAAA,WAAhB,CAA9C;AAEH;;;;AAOD;;;8CAG+B;AAAA;;AAC3B,cAAMwhE,UAAU,GAAG,KAAK1+B,SAAL,CAAe5mC,GAAf,CAAmB,UAAC1B,GAAD,EAAO;AACzC,gBAAG,QAAI,CAAComE,yBAAL,CAA+BrnE,KAA/B,CAAqC4W,QAArC,CAA8C3V,GAAG,CAACyoC,SAAlD,CAAH,EAAgE;AAC5D,qBAAO,MAAP,OAAO,CAAP,kBAAWzoC,GAAX,CAAO,EAAO;AAAEwoC,sBAAM,EAAE;AAAV,eAAP,CAAP;AACH,aAFD,MAEK;AACD,qBAAO,MAAP,OAAO,CAAP,kBAAWxoC,GAAX,CAAO,EAAO;AAAEwoC,sBAAM,EAAE;AAAV,eAAP,CAAP;AACH;AACJ,WANkB,CAAnB;;AAOA,eAAKF,SAAL,sBAAqB0+B,UAArB;AACH;;;oCAEkBC,O,EAAiB;AAChC,cAAM35C,IAAI,GAAG,KAAK84C,yBAAL,CAA+BrnE,KAA5C;;AACA,cAAG,KAAK04B,QAAR,EAAiB;AACb;AACH;;AAED,cAAG,CAACwvC,OAAO,CAACz+B,MAAZ,EAAmB;AACflb,gBAAI,CAAC5pB,IAAL,CAAUujE,OAAO,CAACx+B,SAAlB;AACH,WAFD,MAEK;AACD,gBAAMy+B,aAAa,GAAG55C,IAAI,CAACruB,OAAL,CAAagoE,OAAO,CAACx+B,SAArB,CAAtB;AACAnb,gBAAI,CAAChlB,MAAL,CAAY4+D,aAAZ,EAA0B,CAA1B;AACH;;AACD,eAAKd,yBAAL,CAA+B3pE,QAA/B,oBAA4C6wB,IAA5C;AACA,eAAKm5C,mBAAL;AACA,eAAKH,qBAAL;AACH;AAED;;;;yCACwBvnE,K,EAAuB;AAC3C,cAAGA,KAAK,KAAK,cAAAq6B,gBAAA,CAAiBU,MAA3B,IAAqC,KAAKosC,2BAAL,CAAiCnnE,KAAjC,KAA2C,cAAAq6B,gBAAA,CAAiBU,MAApG,EAA2G;AACvG,gBAAM8mB,eAAe,GAAG,CAAC,QAAAlpB,UAAA,CAAWC,QAAZ,CAAxB;AACAipB,2BAAe,CAACl9C,IAAhB,CAAqB,cAAAs2B,eAArB;AACA,iBAAKosC,yBAAL,CAA+BnuC,aAA/B,CAA6C2oB,eAA7C;AACA,iBAAKwlB,yBAAL,CAA+B7tC,sBAA/B;AACH,WALD,MAKM,IAAGx5B,KAAK,KAAK,cAAAq6B,gBAAA,CAAiBU,MAA3B,IAAqC,KAAKosC,2BAAL,CAAiCnnE,KAAjC,KAA2C,cAAAq6B,gBAAA,CAAiBU,MAApG,EAA2G;AAC7G,iBAAKssC,yBAAL,CAA+BzlB,eAA/B;AACA,iBAAKylB,yBAAL,CAA+B7tC,sBAA/B;AACH;AACJ;;;4BApP6C;AAC1C,iBAAO,KAAKvgB,IAAL,CAAUzG,GAAV,CAAc,QAAd,CAAP;AACH;;;4BAEkC;AAC/B,iBAAO,KAAKyG,IAAL,CAAUzG,GAAV,CAAc,kBAAd,CAAP;AACH;;;4BAEqC;AAClC,iBAAO,KAAKyG,IAAL,CAAUzG,GAAV,CAAc,mBAAd,CAAP;AACH;;;4BAEuC;AACpC,iBAAO,KAAKyG,IAAL,CAAUzG,GAAV,CAAc,qBAAd,CAAP;AACH;;;4BAEsC;AACnC,iBAAO,KAAKyG,IAAL,CAAUzG,GAAV,CAAc,oBAAd,CAAP;AACH;;;4BAEmC;AAChC,iBAAO,KAAKyG,IAAL,CAAUzG,GAAV,CAAc,iBAAd,CAAP;AACH;;;4BA0FyB;AACtB,iBAAO,KAAKqzD,4BAAL,CAAkC7lE,KAAlC,KAA4C,cAAAq6B,gBAAA,CAAiBU,MAApE;AACH;;;4BAmF8B;AAC3B,cAAM1L,MAAM,GAAG,KAAK83C,2BAAL,CAAiCnnE,KAAhD;AACA,iBAAO,cAAAipC,8BAAA,CAA+B5Z,MAA/B,CAAP;AACH;;;;MAjOsC,OAAA91B,a;;AAN3C;;;qDAMausE,qB;AAAqB,K;;;YAArBA,qB;AAAqB,8C;AAAA;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,e;AAAA,c;AAAA,8xB;AAAA;AAAA;ACZlC;AACI;AACI;AAAA;AAAsD;AAAe;AAAA;AACrE;AAQA;AACJ;AACA;AACI;AAAA;AAAkD;AAAe;AAAA;AACjE;AAQA;AACJ;AACA;AACI;AACI;AAAA;AAA0D;AAAe;AAAA;AACzE;AACI;AACI;AAAwF;AAAA,mBAAe,IAAAsC,cAAA,QAAf;AAAqC,WAArC;AACpF;AAGJ;AACJ;AACA;AACI;AAAuF;AAAA,mBAAe,IAAAC,eAAA,QAAf;AAAsC,WAAtC;AACnF;AAGJ;AACJ;AACJ;AACJ;AACA;AAYJ;AACJ;;;;AA1D0C;AAAnB;AAMX;AAAA,uDAA0B,aAA1B,EAA0B,WAA1B,EAA0B,UAA1B,EAA0B,YAA1B,EAA0B,SAA1B,EAA0B,4CAA1B;AAKe;AAAA;AAOf;AAAA,qDAAwB,aAAxB,EAAwB,WAAxB,EAAwB,UAAxB,EAAwB,YAAxB,EAAwB,SAAxB,EAAwB,oCAAxB;AAKe;AAAA;AAOa;AAAA,0EAA6C,UAA7C,EAA6C,YAA7C;AACJ;AAAA;AAMI;AAAA,yEAA4C,UAA5C,EAA4C,YAA5C;AACJ;AAAA;AAOO;AAAA;;;;;;sEDjC9BvC,qB;;;;2BAAAA,qB,EAAqB;cANjC,OAAAllB,SAMiC;eANvB;AACPlnD,kBAAQ,EAAE,yBADH;AAEPmnD,qBAAW,EAAE,0CAFN;AAGPC,mBAAS,EAAE,CAAC,0CAAD;AAHJ,S;AAMuB,Q;;gBAE7B,OAAA1kD;;;gBACA,OAAAA;;;;;;;;;;;;;;;;;;;;;;;;AEfL;AAAA;AAAA;;AAKA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;AAOY;AAII;AAKA;AACA;AACJ;;;;;AARI;AADA;AAGI;AAAA,wCAAiB,MAAjB,EAAiB,UAAjB;AAKJ;AAAA;;;;;;AAVJ;;;;;AACI;;;;;;QAeHksE,qB;;;;;AAcT,qCAAYjM,KAAZ,EAAqC;AAAA;;AAAA;;AACjC,uCAAMA,KAAN;AAPJ;;;;AAIA,iBAAAkM,cAAA,GAAiB,KAAjB;AAEqC;AAEpC;;;MAhBsC,0BAAAnM,qB;;AApB3C;;;uBAoBakM,qB,EAAqB,yC;AAAA,K;;;YAArBA,qB;AAAqB,wC;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,6B;AAAA,c;AAAA,a;AAAA,sI;AAAA;AAAA;;AAjB1B;;;;;;;;;2BAiBKA,qB,EAAqB;cApBjC,OAAA1nB,SAoBiC;eApBvB;AACPlnD,kBAAQ,EAAE,mBADH;AAEPw0D,kBAAQ,mnBAFD;AAkBPpN,mBAAS,EAAE,CAAC,+BAAD;AAlBJ,S;AAoBuB,Q;;;;;;gBAE7B,OAAA1kD;;;gBAGA,OAAAA;;;gBAMA,OAAAA;;;;;;;;;;;;;;;;;;;;;;;;ACvCL;AAAA;AAAA;;AAUA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACJY;AACI;;AAIJ;;;;;;;AAHQ;AAAA,+DAAAosE,mBAAA;AACA,qDAAsD,aAAtD,EAAsD,wBAAtD;;;;;;AAGR;AAGI;;AAIJ;;;;;;AALI;AAEI;AAAA,2CAAiB,UAAjB,EAAiB,kDAAjB;;;;;;AAKZ;;;;AAGI;;;;QDKCC,e;AAgET,iCAAc;AAAA;;;;AAvDP,aAAA9oD,OAAA,GAA+B,EAA/B;AAKP;;;;AAIO,aAAA+oD,aAAA,GAAgB,KAAhB;AAGA,aAAAC,YAAA,GAAe,KAAf;AASA,aAAAC,WAAA,GAAuB,KAAvB;AAOA,aAAAvQ,iBAAA,GAAiC,IAAI,QAAA5/B,WAAJ,EAAjC;AAEA,aAAAz4B,KAAA,GAAQ,IAAI,OAAAzH,eAAJ,CAAwC,KAAKojE,aAAL,KAAkB,MAAI,KAAKh8C,OAAL,CAAa,CAAb,CAAJ,MAAmB,IAAnB,IAAmB,aAAnB,GAAmB,MAAnB,GAAmB,GAAE3f,KAAvC,CAAxC,CAAR;AAEP;;AACO,aAAAy7D,QAAA,GAAW,IAAI,OAAAljE,eAAJ,CAAyC,KAAKonB,OAA9C,CAAX;AAKA,aAAA6hD,cAAA,GAAiB,OAAA30C,aAAA,CAAc,CAAC,KAAK4uC,QAAN,EAAgB,KAAKz7D,KAArB,CAAd,EAA2C4N,IAA3C,CACpB,YAAAjL,GAAA,CAAI;AAAA;AAAA,cAAEgd,OAAF;AAAA,cAAW3f,KAAX;;AAAA,iBAAsB2f,OAAO,CAACrf,IAAR,CAAa,UAAAunB,CAAC;AAAA,mBAAIA,CAAC,CAAC7nB,KAAF,KAAYA,KAAhB;AAAA,WAAd,CAAtB;AAAA,SAAJ,CADoB,CAAjB;AAIA,aAAAuhE,iBAAA,GAAoB,KAAK9F,QAAL,CAAc7tD,IAAd,CACvB,YAAAjL,GAAA,CAAI,UAAAw/D,EAAE;AAAA,iBAAIA,EAAE,CAACnjE,MAAH,GAAY,CAAZ,IAAiBmjE,EAAE,CAAC,CAAD,CAAvB;AAAA,SAAN,CADuB,CAApB;AAcN;;;;mCAViB36C,M,EAA2B;AACzC,iBAAO,KAAKxnB,KAAL,CAAW4N,IAAX,CAAgB,YAAAjL,GAAA,CAAI,UAAAkJ,CAAC;AAAA,mBAAIA,CAAC,KAAK2b,MAAM,CAACxnB,KAAjB;AAAA,WAAL,CAAhB,CAAP;AACH;;;mCAUc,CACd;;;oCAEkBxF,O,EAAsB;;;AACrC,cAAIA,OAAO,CAACmlB,OAAZ,EAAqB;AACjB,iBAAK87C,QAAL,CAAcxwD,IAAd,CAAmB,KAAK0U,OAAxB;;AACA,iBAAK3f,KAAL,CAAWiL,IAAX,CAAgB,KAAK0wD,aAAL,KAAkB,YAAI,KAAKh8C,OAAT,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAG,CAAH,CAAhB,MAAoB,IAApB,IAAoB,aAApB,GAAoB,MAApB,GAAoB,GAAG3f,KAAzC,CAAhB;AACH;;AACD,cAAIxF,OAAO,CAACmhE,aAAZ,EAA2B;AACvB,iBAAK37D,KAAL,CAAWiL,IAAX,CAAgB,CAAD,KAAC,KAAK0wD,aAAL,MAAkB,IAAlB,IAAkB,aAAlB,GAAkB,MAAlB,GAAkB,GAAE37D,KAApC;AACH;AACJ;AAED;;;;;;;iCAIgBmqD,S,EAAiB;AAC7B,eAAKnqD,KAAL,CAAWiL,IAAX,CAAgBk/C,SAAhB;;AACA,cAAI,KAAKI,SAAT,EAAoB;AAChB,iBAAKA,SAAL,CAAe,KAAK5qC,OAAL,CAAarf,IAAb,CAAkB,UAAAmE,CAAC;AAAA,qBAAIA,CAAC,CAACzE,KAAF,KAAYmqD,SAAhB;AAAA,aAAnB,CAAf;AACH;AACJ;AAED;;;;;;;mCAIkBnqD,K,EAAiC;AAC/C,cAAIA,KAAK,IAAI,IAAb,EAAmB;AACf,iBAAKA,KAAL,CAAWiL,IAAX,CAAgBjL,KAAK,CAACA,KAAtB;AACH;AACJ;;;yCAEuB04B,Q,EAAmB;AACvC,eAAKA,QAAL,GAAgBA,QAAhB;AACH;AAED;;;;;;;yCAIwB5/B,E,EAAkC;AACtD,eAAKyxD,SAAL,GAAiBzxD,EAAjB;AACH;AAED;;;;;;;0CAIyBA,E,EAAkC;AACvD,eAAK0xD,QAAL,GAAgB1xD,EAAhB;AACH;;;4BA5DmB;;;AAChB,iBAAO,CAAP,WAAO,KAAK0zD,YAAZ,MAAwB,IAAxB,IAAwB,aAAxB,GAAwB,MAAxB,GAAwB,GAAEqM,SAAnB,MAA4B,IAA5B,IAA4B,aAA5B,GAA4B,EAA5B,GAAgC,KAAvC;AACH;;;;;;AA1EL;;;uBAaa4P,e;AAAe,K;;;YAAfA,e;AAAe,iC;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;uCATb,CACP;AACIt2B,eAAO,EAAE,QAAAsY,iBADb;AAEIC,mBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,iBAAM8d,eAAN;AAAA,SAAX,CAFjB;AAGI7d,aAAK,EAAE;AAHX,OADO,C,GAMV,uB;AAAA,e;AAAA,c;AAAA,iqB;AAAA;AAAA;ACjCL;AACI;AAAiC;AAAS;AAC1C;AAGI;AAMI;AAAA,mBAAe,IAAAltD,QAAA,QAAf;AAA+B,WAA/B;;;AAEA;AAMA;;;;AAQJ;AACA;AAKA;AACI;AACJ;AACJ;AACJ;;;;;;AArCuC;AACxB;AAAA;AAAsB;AAAA;AAMzB;AAAA,kDAAoD,OAApD,EAAoD,gCAApD,EAAoD,UAApD,EAAoD,YAApD;AAMY;AAAA;AAOR;AAAA;AASJ;AAAA;AAKkB;AAAA;;;;;;;;;;;2BDEjB+qE,e,EAAe;cAb3B,OAAA7nB,SAa2B;eAbjB;AACPlnD,kBAAQ,EAAE,YADH;AAEPmnD,qBAAW,EAAE,yBAFN;AAGPC,mBAAS,EAAE,CAAC,yBAAD,CAHJ;AAIPvD,mBAAS,EAAE,CACP;AACIpL,mBAAO,EAAE,QAAAsY,iBADb;AAEIC,uBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,qBAAM8d,eAAN;AAAA,aAAX,CAFjB;AAGI7d,iBAAK,EAAE;AAHX,WADO,CAJJ;AAWPkQ,uBAAa,EAAE,OAAAC,iBAAA,CAAkB34C;AAX1B,S;AAaiB,Q;;;;gBAEvB,OAAAhmB;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAMA,OAAAA;;;gBAGA,OAAAA;;;gBAIA,OAAAA;;;gBAEA,OAAAA;;;gBAGA,OAAAA;;;gBAgBA,OAAAioD,S;iBAAU,Q;;;;;;;;;;;;;;;;;;;;;;;;AEjFf;AAAA;AAAA;;;;;;;;;;QAmBawkB,0B,GAZb;AAAA;;AAkBI,WAAA/lC,KAAA,GAAQ,IAAI,OAAAob,YAAJ,EAAR;AAEH,K;;AApBD;;;uBAYa2qB,0B;AAA0B,K;;;YAA1BA,0B;AAA0B,8C;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA,O;AAAA,c;AAAA,a;AAAA,qH;AAAA;AAAA;AAT/B;AACI;AAAA,mBAAS,IAAA/lC,KAAA,OAAT;AAAqB,WAArB;AAEA;AAAM;AAAS;AACf;AACJ;;;;AAFU;AAAA;;;;;;;;;2BAML+lC,0B,EAA0B;cAZtC,OAAAjoB,SAYsC;eAZ5B;AACPlnD,kBAAQ,EAAE,yBADH;AAEPw0D,kBAAQ,kQAFD;AAUPpN,mBAAS,EAAE,CAAC,sCAAD;AAVJ,S;AAY4B,Q;;gBAElC,OAAA1kD;;;gBAGA,OAAA2kD;;;;;;;;;;;;;;;;;;;;;;;;ACxBL;AAAA;AAAA;;AAMA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;AAiBY;;;;;AAAK;AAEA;;;;;;;;;;;;;AAEL;;;;;AAAK;AAEA;;;;;;AANL;AAIA;;;;;AAHK;AAIA;AAAA;;;;AApBjB,QAAY+nB,UAAZ;;AAAA,eAAYA,UAAZ,EAAsB;AAClB;;;AAGA;AACA;;;;AAGA;AACH,KATD,EAAYA,UAAU,GAAV,QAAAA,UAAA,aAAAA,UAAA,GAAU,EAAV,CAAZ;;QA2BaC,e;;;;;AAeT,+BAAY1M,KAAZ,EAAqC;AAAA;;AAAA;;AACjC,uCAAMA,KAAN;AAfJ,iBAAAyM,UAAA,GAAaA,UAAb;AAMA,iBAAA9R,IAAA,GAAmB8R,UAAU,CAACE,UAA9B;AAQqC;AAEpC;;;MAjBgC,0BAAA5M,qB;;AAhBrC;;;uBAgBa2M,e,EAAe,yC;AAAA,K;;;YAAfA,e;AAAe,iC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,c;AAAA,a;AAAA,kE;AAAA;AAAA;AAbpB;;;;;;;;;2BAaKA,e,EAAe;cAhB3B,OAAAnoB,SAgB2B;eAhBjB;AACPlnD,kBAAQ,EAAE,YADH;AAEPw0D,kBAAQ,2fAFD;AAcPpN,mBAAS,EAAE,CAAC,wBAAD;AAdJ,S;AAgBiB,Q;;;;;;gBAGvB,OAAA1kD;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;;;;;;;;;;;;;;;;;;;;;;AC/CL;AAAA;AAAA;;;;;;;;;;;;;;;;;;AAgBY;AAKI;AAAA;AAAA;AAAA;AAAA;AAAA;AAC+B;AAAkB;;;;;;AAHjD;AAGA;AAA+B;AAAA;;;;QAKlC6sE,oB;AAcT,sCAAc;AAAA;;AALd,aAAA1hD,eAAA,GAAuC,EAAvC;AAGA,aAAA2hD,aAAA,GAAgB,IAAI,OAAAhrB,YAAJ,EAAhB;AAGC;;;;mCAEO,CACP;;;wCAEsB12B,M,EAA2B;AAC9C,eAAK0hD,aAAL,CAAmB1pB,IAAnB,CAAwBh4B,MAAxB;AACH;;;mCAEiBA,M,EAA2B;AACzC,iBAAO,CAAC,CAAC,KAAKD,eAAL,CAAqBjnB,IAArB,CAA0B,UAAA+R,CAAC;AAAA,mBAAIA,CAAC,CAACrS,KAAF,KAAYwnB,MAAM,CAACxnB,KAAvB;AAAA,WAA3B,CAAT;AACH;;;;;;AA5CL;;;uBAkBaipE,oB;AAAoB,K;;;YAApBA,oB;AAAoB,uC;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA,O;AAAA,c;AAAA,a;AAAA,mU;AAAA;AAAA;AAfzB;AACI;AAEyB;AAAS;AAClC;AAOJ;;;;AATQ;AAAA;AACqB;AAAA;AAKrB;AAAA;;;;;;;;;2BAOHA,oB,EAAoB;cAlBhC,OAAAroB,SAkBgC;eAlBtB;AACPlnD,kBAAQ,EAAE,kBADH;AAEPw0D,kBAAQ,ylBAFD;AAgBPpN,mBAAS,EAAE,CAAC,+BAAD;AAhBJ,S;AAkBsB,Q;;;;gBAE5B,OAAA1kD;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAGA,OAAA2kD;;;;;;;;;;;;;;;;;;;;;;;;ACtCL;AAAA;AAAA;;AAUA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAQA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBoB;AAGI;;AAIJ;;;;;;AALI;AAEI;AAAA,2CAAiB,UAAjB,EAAiB,kDAAjB;;;;QAqBfoL,kB;;;;;AA/Cb;AAAA;;AAAA;;;AAoDI;;AACgB,iBAAA7sD,IAAA,GAAO,EAAP;AAGhB;;AACgB,iBAAAuiE,WAAA,GAAc,IAAd;AAGhB;;AACgB,iBAAAngE,QAAA,GAAoB,IAAI,UAAAsM,MAAJ,CAAW;AAAElR,cAAI,EAAEJ,IAAI,CAACunB,GAAL;AAAR,SAAX,EAAiCo3B,QAArD;AAWhB;;AACO,iBAAAv+C,IAAA,GAAO,IAAI,OAAAvE,eAAJ,CAAoB,UAAAgO,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB+J,EAAxC,CAAP;AAEA,iBAAA4xD,iBAAA,GAAiC,IAAI,QAAA5/B,WAAJ,EAAjC;AAEA,iBAAA6oC,WAAA,GAAc,OAAAz0C,aAAA,CAAc,CAC/B,SAAKwrC,iBAAL,CAAuB3+B,YADQ,EAE/B,SAAK58B,IAF0B,CAAd,EAEL8Q,IAFK,CAGjB,YAAAjL,GAAA,CAAI;AAAA;AAAA,cAAE3C,KAAF;AAAA,cAASlD,IAAT;;AAAA,iBAAmB,OAAAuC,kBAAA,CAAmB,SAAKC,IAAxB,EAA8BU,KAA9B,EAAqC,QAAAP,QAAA,CAASwkB,GAAT,GAAetkB,OAAf,EAArC,CAAnB;AAAA,SAAJ,CAHiB,CAAd;AAMP;;AACO,iBAAAK,KAAA,GAAQ,IAAI,OAAAzH,eAAJ,CAA4B,OAAAsE,iBAAA,CAAkB,QAAA4C,QAAA,CAASwkB,GAAT,EAAlB,EAAkC,SAAK3kB,IAAvC,EAA6CO,QAA7C,CAAsD,OAAtD,CAA5B,CAAR;AAEP;;AACO,iBAAA8f,OAAA,GAAU,IAAI,OAAApnB,eAAJ,CAAyC,aAAAg0D,sBAAA,CAAuB,UAAAhmD,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB+J,EAA3C,EAA+C,CAAC,SAAKo7D,WAArD,EAAkE,SAAKviE,IAAvE,EAA6E,SAAKoC,QAAlF,CAAzC,CAAV;AAEA,iBAAA8/D,cAAA,GAAiB,OAAA30C,aAAA,CAAc,CAAC,SAAKlN,OAAN,EAAe,SAAK3f,KAApB,CAAd,EAA0C4N,IAA1C,CACpB,YAAAjL,GAAA,CAAI;AAAA;AAAA,cAAEgd,OAAF;AAAA,cAAW3f,KAAX;;AAAA,iBAAsB2f,OAAO,CAACrf,IAAR,CAAa,UAAAunB,CAAC;AAAA,mBAAIA,CAAC,CAAC7nB,KAAF,KAAYA,KAAhB;AAAA,WAAd,CAAtB;AAAA,SAAJ,CADoB,CAAjB;AAIA,iBAAAuhE,iBAAA,GAAoB,SAAK5hD,OAAL,CAAa/R,IAAb,CACvB,YAAAjL,GAAA,CAAI,UAAAw/D,EAAE;AAAA,iBAAIA,EAAE,CAACnjE,MAAH,GAAY,CAAZ,IAAiBmjE,EAAE,CAAC,CAAD,CAAvB;AAAA,SAAN,CADuB,CAApB;AA7FX;AA4MC;;;;mCA3GqB36C,M,EAA2B;AACzC,iBAAO,KAAKxnB,KAAL,CAAW4N,IAAX,CAAgB,YAAAjL,GAAA,CAAI,UAAAkJ,CAAC;AAAA,mBAAIA,CAAC,KAAK2b,MAAM,CAACxnB,KAAjB;AAAA,WAAL,CAAhB,CAAP;AACH;;;mCAMc;AAAA;;AACX;AACA,eAAK2f,OAAL,CAAa1U,IAAb,CAAkB,aAAAshD,sBAAA,CAAuB,KAAKzvD,IAAL,CAAUkD,KAAjC,EAAwC,CAAC,KAAK6hE,WAA9C,EAA2D,KAAKviE,IAAhE,EAAsE,KAAKoC,QAA3E,CAAlB,EAFW,CAIX;;AACA,eAAK7G,YAAL,CAAkB,iBAAlB,EACI,OAAAgyB,aAAA,CAAc,CACV,KAAK/vB,IADK,CAAd,EAEG8Q,IAFH,CAGI,YAAAjL,GAAA,CAAI,kBAAY;AAAA;AAAA,gBAAV7F,IAAU;;AACZ;AACA,gBAAMqsE,eAAe,GAAG,OAAAtsE,iBAAA,CAAkB,QAAA4C,QAAA,CAASC,UAAT,CAAoB5C,IAAI,CAAC6C,OAAL,EAApB,CAAlB,EAAuD,QAAI,CAACL,IAA5D,CAAxB,CAFY,CAGZ;;AACA,mBAAO,IAAI,UAAA0O,MAAJ,CAAW;AAAClR,kBAAI,EAAEqsE,eAAe,CAACxpE,OAAhB,EAAP;AAAkC2kB,yBAAW,EAAC,KAA9C;AAAqDC,yBAAW,EAAE,QAAI,CAAC7iB;AAAvE,aAAX,CAAP;AACH,WALD,CAHJ,EASI,YAAAylD,cAAA,CAAe,KAAKxnC,OAApB,CATJ,EAUI,YAAAjc,MAAA,CAAO,kBAAwD;AAAA;AAAA,gBAAtD5G,IAAsD;AAAA,gBAAhDslE,WAAgD;;AAC3D;AACA,mBAAO,CAACA,WAAW,CAAC9hE,IAAZ,CAAiB,UAAAuL,CAAC;AAAA,qBAAIA,CAAC,CAAC7L,KAAF,KAAYlD,IAAI,CAACsB,UAAL,CAAgB,OAAhB,CAAhB;AAAA,aAAlB,CAAR;AACH,WAHD,CAVJ,EAcI,YAAAuE,GAAA,CAAI,kBAAyB;AAAA;AAAA,gBAAvB7F,IAAuB;AAAA,gBAAjBslE,WAAiB;;AACzB;AACA;AACAA,uBAAW,CAACz9D,IAAZ,CAAiB;AACboE,qBAAO,EAAE,OAAAvB,6BAAA,CAA8B1K,IAA9B,CADI;AAEbkD,mBAAK,EAAElD,IAAI,CAACsB,UAAL,CAAgB,OAAhB;AAFM,aAAjB,EAHyB,CAOzB;;AACAgkE,uBAAW,CAACp9D,IAAZ,CAAiB,UAACC,CAAD,EAAIC,CAAJ;AAAA,qBAAU,UAAGD,CAAC,CAACjF,KAAL,EAAamF,aAAb,WAA8BD,CAAC,CAAClF,KAAhC,EAAV;AAAA,aAAjB;AACA,mBAAOoiE,WAAP;AACH,WAVD,CAdJ,EAyBErnE,SAzBF,CAyBY,UAAAkQ,IAAI;AAAA,mBAAI,QAAI,CAAC0U,OAAL,CAAa1U,IAAb,CAAkBA,IAAlB,CAAJ;AAAA,WAzBhB,CADJ;AA2BH;;;oCAEkBzQ,O,EAAsB;AACrC,cAAIA,OAAO,CAAC4xD,aAAR,IAAyB5xD,OAAO,CAAC8E,IAAjC,IAAyC9E,OAAO,CAACkH,QAArD,EAA+D;AAC3D;AACA,iBAAKie,OAAL,CAAa1U,IAAb,CAAkB,aAAAshD,sBAAA,CAAuB,KAAKzvD,IAAL,CAAUkD,KAAjC,EAAwC,CAAC,KAAK6hE,WAA9C,EAA2D,KAAKviE,IAAhE,EAAsE,KAAKoC,QAA3E,CAAlB;AACA,gBAAM0nE,YAAY,GAAG,IAAI,UAAAp7D,MAAJ,CAAW;AAAClR,kBAAI,EAAE,KAAK2P,IAAZ;AAAkB6X,yBAAW,EAAE,KAA/B;AAAsCC,yBAAW,EAAE,KAAK7iB;AAAxD,aAAX,EAA8E8E,YAA9E,CAA2F,QAA3F,CAArB;AACA,iBAAKxG,KAAL,CAAWiL,IAAX,CAAgBm+D,YAAY,CAAChrE,UAAb,CAAwB,OAAxB,CAAhB;AACH;;AACD,cAAI5D,OAAO,CAACiS,IAAZ,EAAkB;AACd;AACA,iBAAK3P,IAAL,CAAUmO,IAAV,CAAe,KAAKwB,IAApB;AACH;AACJ;AAED;;;;;;;iCAIgB09C,S,EAAiB;AAC7B;AACA,cAAMkf,OAAO,GAAG,CAAClf,SAAS,CAACjqD,OAAV,CAAkB,GAAlB,IAAyB,CAAzB,GAA6BiqD,SAA7B,GAAyC,OAA1C,EAAmDrrD,KAAnD,CAAyD,GAAzD,CAAhB,CAF6B,CAG7B;;AACA,cAAMb,CAAC,GAAG,IAAI,UAAA+P,MAAJ,CAAW;AAAElR,gBAAI,EAAE,KAAKA,IAAL,CAAUkD,KAAlB;AAAyBskB,uBAAW,EAAE,KAAtC;AAA6CC,uBAAW,EAAE,KAAK7iB;AAA/D,WAAX,CAAV;AACA,cAAM5E,IAAI,GAAGmB,CAAC,CAACP,QAAF,CAAW;AAAE0B,gBAAI,EAAEa,QAAQ,CAACopE,OAAO,CAAC,CAAD,CAAR,CAAhB;AAA8BlsE,kBAAM,EAAE8C,QAAQ,CAACopE,OAAO,CAAC,CAAD,CAAR;AAA9C,WAAX,CAAb;;AACA,cAAIvsE,IAAJ,EAAU;AACN,gBAAI,KAAKytD,SAAT,EAAoB;AAChB,mBAAKA,SAAL,CAAeztD,IAAI,CAAC2J,EAApB;AACH;AACJ;AACJ;AAED;;;;;;;mCAIkBzG,K,EAAsB;AACpC,cAAIA,KAAK,IAAI,IAAb,EAAmB;AACf;AACA,iBAAKlD,IAAL,CAAUmO,IAAV,CAAejL,KAAf,EAFe,CAGf;;AACA,gBAAMlD,IAAI,GAAG,OAAAD,iBAAA,CAAkB,QAAA4C,QAAA,CAASC,UAAT,CAAoBM,KAApB,EAA2B27C,OAA3B,CAAmC,QAAnC,CAAlB,EAAgE,KAAKr8C,IAArE,CAAb,CAJe,CAKf;;AACA,gBAAM8pE,YAAY,GAAG,IAAI,UAAAp7D,MAAJ,CAAW;AAAClR,kBAAI,EAAEA,IAAI,CAAC6C,OAAL,EAAP;AAAuB2kB,yBAAW,EAAE,KAApC;AAA2CC,yBAAW,EAAE,KAAK7iB;AAA7D,aAAX,EAAmF8E,YAAnF,CAAgG,QAAhG,CAArB;AACA,iBAAKmZ,OAAL,CAAa1U,IAAb,CAAkB,aAAAshD,sBAAA,CAAuB6c,YAAY,CAAC3iE,EAApC,EAAwC,CAAC,KAAKo7D,WAA9C,EAA2D,KAAKviE,IAAhE,EAAsE,KAAKoC,QAA3E,CAAlB;AACH;AACJ;;;yCAEuBg3B,Q,EAAmB;AACvC,eAAKA,QAAL,GAAgBA,QAAhB;AACH;AAED;;;;;;;yCAIwB5/B,E,EAAuB;AAC3C,eAAKyxD,SAAL,GAAiBzxD,EAAjB;AACH;AAED;;;;;;;0CAIyBA,E,EAAuB;AAC5C,eAAK0xD,QAAL,GAAgB1xD,EAAhB;AACH;;;4BAtGmB;;;AAChB,iBAAO,CAAP,WAAO,KAAK0zD,YAAZ,MAAwB,IAAxB,IAAwB,aAAxB,GAAwB,MAAxB,GAAwB,GAAEqM,SAAnB,MAA4B,IAA5B,IAA4B,aAA5B,GAA4B,EAA5B,GAAgC,KAAvC;AACH;;;;MAxDmC,OAAAt/D,a;;AA/CxC;;;kDA+Ca4yD,kB;AAAkB,K;;;YAAlBA,kB;AAAkB,qC;AAAA;AAAA;;;;;;;;;;;;;;;;;;;uCAThB,CACP;AACIha,eAAO,EAAE,QAAAsY,iBADb;AAEIC,mBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,iBAAMwB,kBAAN;AAAA,SAAX,CAFjB;AAGIvB,aAAK,EAAE;AAHX,OADO,C,GAMV,6B,EAAA,uB;AAAA,e;AAAA,c;AAAA,4iB;AAAA;AAAA;AAzCG;AACI;AAAiC;AAAS;AAC1C;AAGI;AAMI;AAAA,mBAAe,IAAAltD,QAAA,QAAf;AAA+B,WAA/B;;;AAEA;AACI;;AAIJ;AACA;;;;AAQJ;AACA;AACI;AACJ;AACJ;AACJ;;;;;;;;AA/Be;AAAA;AAAsB;AAAA;AAMzB;AAAA,kDAAoD,OAApD,EAAoD,gCAApD,EAAoD,UAApD,EAAoD,YAApD;AASQ;AAAA,uDAAsD,aAAtD,EAAsD,qBAAtD;AAIJ;AAAA;AASc;AAAA;;;;;;;;mEAezByuD,kB;;;;2BAAAA,kB,EAAkB;cA/C9B,OAAAvL,SA+C8B;eA/CpB;AACPlnD,kBAAQ,EAAE,gBADH;AAEPw0D,kBAAQ,2tDAFD;AAqCPpN,mBAAS,EAAE,CAAC,6BAAD,CArCJ;AAsCPvD,mBAAS,EAAE,CACP;AACIpL,mBAAO,EAAE,QAAAsY,iBADb;AAEIC,uBAAW,EAAE,OAAAC,UAAA,CAAW;AAAA,qBAAMwB,kBAAN;AAAA,aAAX,CAFjB;AAGIvB,iBAAK,EAAE;AAHX,WADO,CAtCJ;AA6CPkQ,uBAAa,EAAE,OAAAC,iBAAA,CAAkB34C;AA7C1B,S;AA+CoB,Q;;gBAC1B,OAAAhmB;;;gBAEA,OAAAA;;;gBAGA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBASA,OAAAioD,S;iBAAU,Q;;;;;;;;;;;;;;;;;;;;;;;;AC5Gf;AAAA;AAAA;;;;;;;;;;;;;;;;;;AAYY;AAII;AAAA;AAAA;AAAA;AAAA;AAAA;AACC;AAAmB;;;;;;AAHpB;AAFmC;AACnC;AAIC;AAAA;;;;QAKJilB,e;AAdb;AAAA;;AAuBI,aAAAC,cAAA,GAAiB,IAAI,OAAArrB,YAAJ,EAAjB;AASH;;;;oCAPsB12B,M,EAA2B;AAC1C,eAAK+hD,cAAL,CAAoB/pB,IAApB,CAAyBh4B,MAAzB;AACH;;;mCAEUA,M,EAA2B;AAClC,iBAAO,KAAKE,QAAL,KAAkBF,MAAzB;AACH;;;;;;AA/BL;;;uBAca8hD,e;AAAe,K;;;YAAfA,e;AAAe,iC;AAAA;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA,O;AAAA,c;AAAA,a;AAAA,kL;AAAA;AAAA;AAXpB;AACI;AAMJ;;;;AANY;AAAA;;;;;;;;;2BAUPA,e,EAAe;cAd3B,OAAA1oB,SAc2B;eAdjB;AACPlnD,kBAAQ,EAAE,YADH;AAEPw0D,kBAAQ,kcAFD;AAYPpN,mBAAS,EAAE,CAAC,yBAAD;AAZJ,S;AAciB,Q;;gBAEvB,OAAA1kD;;;gBAGA,OAAAA;;;gBAGA,OAAA2kD;;;;;;;;;;;;;;;;;;;;;;;;AC9BL;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;ACCE;AACE;AACF;;;;;AADE;AAAA;;;;;;;;QDKSyoB,gB,GALb;AAAA;;AAME,WAAAC,SAAA,GAAqB,KAArB,CANF,CAM8B;;AAC5B,WAAA1e,QAAA,GAA4B,gBAAA2e,eAAA,CAAgBC,OAA5C;AACA,WAAAC,KAAA,GAAsB,gBAAAC,YAAA,CAAaF,OAAnC;AACA,WAAAG,OAAA,GAAU,EAAV;AACA,WAAA/lB,IAAA,GAAO,CAAP;AACA,WAAAF,GAAA,GAAM,CAAN;AACA,WAAAkmB,OAAA,GAAU,KAAV;AACD,K;;AAbD;;;uBAKaP,gB;AAAgB,K;;;YAAhBA,gB;AAAgB,kC;AAAA,c;AAAA,c;AAAA,qE;AAAA;AAAA;ACR7B;AAEE;AAGF;;;;AAJE,kDAA0B,KAA1B,EAA0B,cAA1B;AADyE;AAAtD;AAEd;AAAA;;;;;;;;;2BDMMA,gB,EAAgB;cAL5B,OAAA5oB,SAK4B;eALlB;AACTlnD,kBAAQ,EAAE,aADD;AAETmnD,qBAAW,EAAE,0BAFJ;AAGTC,mBAAS,EAAE,CAAC,0BAAD;AAHF,S;AAKkB,Q;;;;;;;;;;;;;;;;;;;;;;AER7B;AAAA;AAAA;;AAYA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;QAKakpB,gB;AAeX,gCAAoBzgB,UAApB,EAAoD0gB,MAApD,EACMC,wBADN,EACkEC,QADlE,EACsF;AAAA;;AADlE,aAAA5gB,UAAA,GAAAA,UAAA;AAAgC,aAAA0gB,MAAA,GAAAA,MAAA;AAC9C,aAAAC,wBAAA,GAAAA,wBAAA;AAA4D,aAAAC,QAAA,GAAAA,QAAA;AAdzD,aAAAL,OAAA,GAAU,EAAV;AACA,aAAA/e,QAAA,GAA4B,gBAAA2e,eAAA,CAAgBC,OAA5C;AACA,aAAAC,KAAA,GAAsB,gBAAAC,YAAA,CAAaF,OAAnC;AACA,aAAAryE,OAAA,GAA6B,OAA7B;AACA,aAAA8yE,SAAA,GAAY,CAAZ;AACA,aAAAC,SAAA,GAAY,CAAZ;AACA,aAAAh6C,IAAA,GAAgB,IAAhB;AAED,aAAAi6C,YAAA,GAAyC,IAAzC;AAOP;;;;uCAGW;AACV,cAAI,KAAKhzE,OAAL,KAAiB,OAArB,EAA8B;AAC5B,iBAAKizE,iBAAL;AACD;AACF;;;uCAGW;AACV,cAAI,KAAKjzE,OAAL,KAAiB,OAArB,EAA8B;AAC5B,iBAAKkzE,qBAAL;AACD;AACF;;;kCAGM;AACL,cAAI,KAAKlzE,OAAL,KAAiB,OAArB,EAA8B;AAC5B,gBAAI,KAAKgzE,YAAL,KAAsB,IAA1B,EAAgC;AAC9B,mBAAKC,iBAAL;AACD,aAFD,MAEO;AACL,mBAAK/wE,OAAL,GADK,CACW;AACjB;AACF;AACF;;;qCAGYoyD,M,EAAkB;AAC7BA,gBAAM,CAAC/nB,cAAP;AACAxhC,gBAAM,CAAC3J,YAAP,CAAoB,KAAK+xE,YAAzB;AACA,eAAKA,YAAL,GAAoBpoE,MAAM,CAACpJ,UAAP,CAAkB,KAAKsxE,iBAAL,CAAuBG,IAAvB,CAA4B,IAA5B,CAAlB,EAAqD,GAArD,CAApB;AACD;;;qCAGS;AACRroE,gBAAM,CAAC3J,YAAP,CAAoB,KAAK+xE,YAAzB;AACA,eAAKD,qBAAL;AACD;;;4CAE2B;AAC1B,cAAI,KAAKF,YAAL,KAAsB,IAA1B,EAAgC;AAC9BjoE,kBAAM,CAAC1J,aAAP,CAAqB,KAAK0xE,SAA1B;AACA,gBAAMM,gBAAgB,GAAG,KAAKT,wBAAL,CAA8BU,uBAA9B,CAAsD,oBAAApB,gBAAtD,CAAzB;AACA,iBAAKc,YAAL,GAAoBK,gBAAgB,CAAC9M,MAAjB,CAAwB,KAAKsM,QAA7B,CAApB;AAEA,iBAAKF,MAAL,CAAYY,UAAZ,CAAuB,KAAKP,YAAL,CAAkBQ,QAAzC;;AAL8B,uDAMD,KAAKR,YAAL,CAAkBQ,QAAlB,CAAoDC,SANnD;AAAA,gBAMvBC,iBANuB;;AAQ9B,iBAAKC,6BAAL;AAEA5iE,oBAAQ,CAACW,IAAT,CAAcC,WAAd,CAA0B+hE,iBAA1B;AACA,iBAAKE,WAAL,GAAmB7oE,MAAM,CAACpJ,UAAP,CAAkB,KAAKkyE,WAAL,CAAiBT,IAAjB,CAAsB,IAAtB,CAAlB,EAA+C,KAAKN,SAApD,CAAnB;AACD;AACF;;;wDAEuC;AACtC,cAAI,KAAKE,YAAL,KAAsB,IAA1B,EAAgC;AAC9B,iBAAKA,YAAL,CAAkBc,QAAlB,CAA2BtB,OAA3B,GAAqC,KAAKA,OAA1C;AACA,iBAAKQ,YAAL,CAAkBc,QAAlB,CAA2BrgB,QAA3B,GAAsC,KAAKA,QAA3C;AACA,iBAAKuf,YAAL,CAAkBc,QAAlB,CAA2BxB,KAA3B,GAAmC,KAAKA,KAAxC;;AAH8B,wCAKK,KAAKrgB,UAAL,CAAgB5uD,aAAhB,CAA8B0wE,qBAA9B,EALL;AAAA,gBAKvBtnB,IALuB,yBAKvBA,IALuB;AAAA,gBAKjBunB,KALiB,yBAKjBA,KALiB;AAAA,gBAKVznB,GALU,yBAKVA,GALU;AAAA,gBAKL0nB,MALK,yBAKLA,MALK;;AAO9B,oBAAQ,KAAKxgB,QAAb;AACE,mBAAK,gBAAA2e,eAAA,CAAgB8B,KAArB;AAA4B;AAC1B,uBAAKlB,YAAL,CAAkBc,QAAlB,CAA2BrnB,IAA3B,GAAkC3mD,IAAI,CAACg2B,KAAL,CAAW,CAACk4C,KAAK,GAAGvnB,IAAT,IAAiB,CAAjB,GAAqBA,IAAhC,CAAlC;AACA,uBAAKumB,YAAL,CAAkBc,QAAlB,CAA2BvnB,GAA3B,GAAiCzmD,IAAI,CAACg2B,KAAL,CAAWm4C,MAAX,CAAjC;AACA;AACD;;AACD,mBAAK,gBAAA7B,eAAA,CAAgB+B,KAArB;AAA4B;AAC1B,uBAAKnB,YAAL,CAAkBc,QAAlB,CAA2BrnB,IAA3B,GAAkC3mD,IAAI,CAACg2B,KAAL,CAAW,CAACk4C,KAAK,GAAGvnB,IAAT,IAAiB,CAAjB,GAAqBA,IAAhC,CAAlC;AACA,uBAAKumB,YAAL,CAAkBc,QAAlB,CAA2BvnB,GAA3B,GAAiCzmD,IAAI,CAACg2B,KAAL,CAAWywB,GAAX,CAAjC;AACA;AACD;;AACD,mBAAK,gBAAA6lB,eAAA,CAAgBgC,KAArB;AAA4B;AAC1B,uBAAKpB,YAAL,CAAkBc,QAAlB,CAA2BrnB,IAA3B,GAAkC3mD,IAAI,CAACg2B,KAAL,CAAWk4C,KAAX,CAAlC;AACA,uBAAKhB,YAAL,CAAkBc,QAAlB,CAA2BvnB,GAA3B,GAAiCzmD,IAAI,CAACg2B,KAAL,CAAWywB,GAAG,GAAG,CAAC0nB,MAAM,GAAG1nB,GAAV,IAAiB,CAAlC,CAAjC;AACA;AACD;;AACD,mBAAK,gBAAA6lB,eAAA,CAAgBiC,IAArB;AAA2B;AACzB,uBAAKrB,YAAL,CAAkBc,QAAlB,CAA2BrnB,IAA3B,GAAkC3mD,IAAI,CAACg2B,KAAL,CAAW2wB,IAAX,CAAlC;AACA,uBAAKumB,YAAL,CAAkBc,QAAlB,CAA2BvnB,GAA3B,GAAiCzmD,IAAI,CAACg2B,KAAL,CAAWywB,GAAG,GAAG,CAAC0nB,MAAM,GAAG1nB,GAAV,IAAiB,CAAlC,CAAjC;AACA;AACD;;AACD;AAAS;AACP;AACD;AAvBH;AAyBD;AACF;;;sCAEqB;AACpB,cAAI,KAAKymB,YAAL,KAAsB,IAA1B,EAAgC;AAC9B,iBAAKA,YAAL,CAAkBc,QAAlB,CAA2BrB,OAA3B,GAAqC,KAAK15C,IAAL,GAAY,IAAZ,GAAmB,KAAxD;AACD;AACF;;;gDAE+B;AAC9B,eAAKu7C,WAAL,GAAmBvpE,MAAM,CAACpJ,UAAP,CAAkB,KAAKO,OAAL,CAAakxE,IAAb,CAAkB,IAAlB,CAAlB,EAA2C,KAAKL,SAAhD,CAAnB;AACD;;;sCAEU;AACT,eAAK7wE,OAAL;AACD;;;kCAEM;AACL,cAAI,KAAK8wE,YAAL,KAAsB,IAA1B,EAAgC;AAC9BjoE,kBAAM,CAAC1J,aAAP,CAAqB,KAAKuyE,WAA1B;AACA7oE,kBAAM,CAAC1J,aAAP,CAAqB,KAAK0xE,SAA1B;AACA,iBAAKJ,MAAL,CAAY4B,UAAZ,CAAuB,KAAKvB,YAAL,CAAkBQ,QAAzC;AACA,iBAAKR,YAAL,CAAkB9wE,OAAlB;AACA,iBAAK8wE,YAAL,GAAoB,IAApB;AACD;AACF;;;;;;AAtIH;;;uBAGaN,gB,EAAgB,mC,EAAA,uC,EAAA,iD,EAAA,iC;AAAA,K;;;YAAhBA,gB;AAAgB,sC;AAAA;AAAA;;mBAAhB,kB;AAAc,W,EAAA,Y,EAAA;AAAA,mBAAd,kBAAc;AAAA,W,EAAA,O,EAAA;AAAA,mBAAd,aAAc;AAAL,W,EAAA,Y,EAAA;AAAA,mBAAT,wBAAS;AAEtB,W,EAAA,U,EAAA;AAAA,mBAFa,gBAEb;AAFyB,W;;;;;;;;;;;;;;;;2BAAZA,gB,EAAgB;cAH5B,OAAAvwE,SAG4B;eAHlB;AACTC,kBAAQ,EAAE;AADD,S;AAGkB,Q;;;;;;;;;;;;gBAE1B,OAAA0C;;;gBACA,OAAAA;;;gBACA,OAAAA;;;gBACA,OAAAA;;;gBACA,OAAAA;;;gBACA,OAAAA;;;gBACA,OAAAA;;;gBAWA,OAAAmQ,Y;iBAAa,Y;;;gBAOb,OAAAA,Y;iBAAa,Y;;;gBAOb,OAAAA,Y;iBAAa,O;;;gBAWb,OAAAA,Y;iBAAa,Y,EAAc,CAAC,QAAD,C;;;gBAO3B,OAAAA,Y;iBAAa,U;;;;;;;;;;;;;;;;;;;;;;;ACrEhB,QAAYm9D,eAAZ;;AAAA,eAAYA,eAAZ,EAA2B;AACvB;AACA;AACA;AACA;AACA;AACA;AACH,KAPD,EAAYA,eAAe,GAAf,QAAAA,eAAA,aAAAA,eAAA,GAAe,EAAf,CAAZ;;AASA,QAAYG,YAAZ;;AAAA,eAAYA,YAAZ,EAAwB;AACpB;AACA;AACA;AACH,KAJD,EAAYA,YAAY,GAAZ,QAAAA,YAAA,aAAAA,YAAA,GAAY,EAAZ,CAAZ;;;;;;;;;;;;;;;;;;;;;ACTA;AAAA;AAAA;;AAAS,YAAAhT,SAAA,4BAAAA,SAAA;AAAW,YAAAC,kBAAA,4BAAAA,kBAAA;;;;;;;;;;;;;;;;;;;;ACApB;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA,0E,CAAsF;;;AACtF;AAAA;AAAA,0E,CAAsF;;;AACtF;AAAA;AAAA,0F,CAA6G;;;AAC7G;AAAA;AAAA,kF,CAAiG;;;AACjG;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;AAEa,YAAA7H,gBAAA,GAA0B,CACnC,SAAAC,eADmC,EAEnC,YAAAC,iBAFmC,EAGnC,SAAAC,eAHmC,EAInC,aAAAC,kBAJmC,EAKnC,OAAAyc,aALmC,EAMnC,QAAAxc,cANmC,EAOnC,mBAAAC,wBAPmC,EAQnC,eAAAC,oBARmC,EASnC,eAAAC,qBATmC,EAUnC,SAAAC,eAVmC,EAWnC,QAAAC,cAXmC,EAYnC,OAAAC,eAZmC,EAanC,OAAAC,aAbmC,EAcnC,WAAAC,iBAdmC,EAenC,UAAAC,gBAfmC,EAgBnC,QAAAC,cAhBmC,EAiBnC,OAAAC,aAjBmC,EAkBnC,eAAAC,oBAlBmC,EAmBnC,YAAA6b,kBAnBmC,EAoBnC,UAAAC,aApBmC,CAA1B;;QAoHA/mB,Q;;;;AA7Fb;;YA6FaA;;;;yBAAAA,Q;AAAQ,O;AAAA,iBA5FP,SAAAltD,YA4FO,4BA3FV,QAAAk3D,gBA2FU,IA1Fb,QAAAjK,mBA0Fa,EAzFb,QAAAD,WAyFa,EAxFb,wBAAAknB,wBAwFa,EAxFa,sBAAAC,uBAwFb,IAxBb,QAAAlnB,mBAwBa,EAvBb,QAAAD,WAuBa;;;;+EAARE,Q,EAAQ;AAAA,uBAtFb,2CAAAyS,mCAsFa,EArFb,wCAAA2D,iCAqFa,EApFb,4BAAA9F,sBAoFa,EAnFb,4BAAA0N,sBAmFa,EAlFb,oCAAAlD,6BAkFa,EAjFb,gCAAAO,yBAiFa,EAhFb,uBAAAnU,kBAgFa,EA/Eb,+BAAAyV,wBA+Ea,EA9Eb,2BAAA9V,sBA8Ea,EA7Eb,mCAAAoV,4BA6Ea,EA5Eb,mBAAAhG,eA4Ea,EA3Eb,yBAAAmK,oBA2Ea,EA1Eb,cAAAf,UA0Ea,EAzEb,gBAAAO,YAyEa,EAxEb,mBAAAkE,eAwEa,EAvEb,0BAAAtG,qBAuEa,EAtEb,yBAAAC,oBAsEa,EArEb,0BAAA4F,qBAqEa,EApEb,uBAAA3F,kBAoEa,EAnEb,gCAAAkG,0BAmEa,EAlEb,yBAAA9R,oBAkEa,EAjEb,0BAAAyL,qBAiEa,EAhEb,mBAAA8G,eAgEa,EA/Db,kBAAAzG,cA+Da,EA9Db,kBAAAe,cA8Da,EA7Db,4BAAAtE,uBA6Da,EA5Db,yBAAA2J,oBA4Da,EA3Db,6BAAA1F,uBA2Da,EA1Db,gCAAAX,2BA0Da,EAzDb,mBAAA6F,eAyDa,EAxDb,4BAAA3F,uBAwDa,EAvDb,oCAAAgD,qBAuDa,EAtDb,iCAAAE,kBAsDa,EArDb,oCAAAV,oBAqDa,EApDb,4BAAA1lB,uBAoDa,EAnDb,mCAAAkkB,6BAmDa,EAlDb,iCAAAnE,2BAkDa,EAjDb,uBAAAhD,kBAiDa,EAhDb,iCAAAI,2BAgDa,EA/Cb,+BAAAL,yBA+Ca,EA9Cb,oBAAA8M,gBA8Ca,EA7Cb,oBAAAQ,gBA6Ca,EA5Cb,yBAAAmC,oBA4Ca;AA5CO,kBAhDd,SAAAp0E,YAgDc,EAvExB,SAAAm3D,eAuEwB,EAtExB,YAAAC,iBAsEwB,EArExB,SAAAC,eAqEwB,EApExB,aAAAC,kBAoEwB,EAnExB,OAAAyc,aAmEwB,EAlExB,QAAAxc,cAkEwB,EAjExB,mBAAAC,wBAiEwB,EAhExB,eAAAC,oBAgEwB,EA/DxB,eAAAC,qBA+DwB,EA9DxB,SAAAC,eA8DwB,EA7DxB,QAAAC,cA6DwB,EA5DxB,OAAAC,eA4DwB,EA3DxB,OAAAC,aA2DwB,EA1DxB,WAAAC,iBA0DwB,EAzDxB,UAAAC,gBAyDwB,EAxDxB,QAAAC,cAwDwB,EAvDxB,OAAAC,aAuDwB,EAtDxB,eAAAC,oBAsDwB,EArDxB,YAAA6b,kBAqDwB,EApDxB,UAAAC,aAoDwB,EA9CpB,QAAAhnB,mBA8CoB,EA7CpB,QAAAD,WA6CoB,EA5CpB,wBAAAknB,wBA4CoB,EA5CM,sBAAAC,uBA4CN,CA4CP;AAxFoC,kBA+CjD,2CAAAxU,mCA/CiD,EAgDjD,wCAAA2D,iCAhDiD,EAiDjD,4BAAA9F,sBAjDiD,EAkDjD,4BAAA0N,sBAlDiD,EAmDjD,oCAAAlD,6BAnDiD,EAoDjD,gCAAAO,yBApDiD,EAqDjD,uBAAAnU,kBArDiD,EAsDjD,+BAAAyV,wBAtDiD,EAuDjD,2BAAA9V,sBAvDiD,EAwDjD,mCAAAoV,4BAxDiD,EAyDjD,yBAAAmE,oBAzDiD,EA0DjD,cAAAf,UA1DiD,EA2DjD,gBAAAO,YA3DiD,EA4DjD,mBAAAkE,eA5DiD,EA6DjD,0BAAAtG,qBA7DiD,EA8DjD,yBAAAC,oBA9DiD,EA+DjD,yBAAA3L,oBA/DiD,EAgEjD,QAAA/R,mBAhEiD,EAiEjD,QAAAD,WAjEiD,EAkEjD,mBAAAukB,eAlEiD,EAmEjD,kBAAAzG,cAnEiD,EAoEjD,kBAAAe,cApEiD,EAqEjD,4BAAAtE,uBArEiD,EAsEjD,yBAAA2J,oBAtEiD,EAuEjD,6BAAA1F,uBAvEiD,EAwEjD,gCAAAX,2BAxEiD,EAyEjD,mBAAA6F,eAzEiD,EA0EjD,4BAAA3F,uBA1EiD,EA2EjD,oCAAAgD,qBA3EiD,EA4EjD,iCAAAE,kBA5EiD,EA6EjD,oCAAAV,oBA7EiD,EA8EjD,4BAAA1lB,uBA9EiD,EA+EjD,mCAAAkkB,6BA/EiD,EAgFjD,iCAAAnE,2BAhFiD,EAiFjD,uBAAAhD,kBAjFiD,EAiF7B,iCAAAI,2BAjF6B,EAkFjD,+BAAAL,yBAlFiD,EAmFjD,oBAAA8M,gBAnFiD,EAoFjD,oBAAAQ,gBApFiD,EAqFjD,yBAAAmC,oBArFiD;AAwFpC,O;AAHO,K;;;;;2BAGflnB,Q,EAAQ;cA7FpB,OAAAjtD,QA6FoB;eA7FX;AACNC,iBAAO,GAAG,SAAAF,YAAH,4BACA,QAAAk3D,gBADA,IAEH,QAAAjK,mBAFG,EAGH,QAAAD,WAHG,EAIH,wBAAAknB,wBAJG,EAIuB,sBAAAC,uBAJvB,EADD;AAMNryE,sBAAY,EAAE,CACV,2CAAA69D,mCADU,EAEV,wCAAA2D,iCAFU,EAGV,4BAAA9F,sBAHU,EAIV,4BAAA0N,sBAJU,EAKV,oCAAAlD,6BALU,EAMV,gCAAAO,yBANU,EAOV,uBAAAnU,kBAPU,EAQV,+BAAAyV,wBARU,EASV,2BAAA9V,sBATU,EAUV,mCAAAoV,4BAVU,EAWV,mBAAAhG,eAXU,EAYV,yBAAAmK,oBAZU,EAaV,cAAAf,UAbU,EAcV,gBAAAO,YAdU,EAeV,mBAAAkE,eAfU,EAgBV,0BAAAtG,qBAhBU,EAiBV,yBAAAC,oBAjBU,EAkBV,0BAAA4F,qBAlBU,EAmBV,uBAAA3F,kBAnBU,EAoBV,gCAAAkG,0BApBU,EAqBV,yBAAA9R,oBArBU,EAsBV,0BAAAyL,qBAtBU,EAuBV,mBAAA8G,eAvBU,EAwBV,kBAAAzG,cAxBU,EAyBV,kBAAAe,cAzBU,EA0BV,4BAAAtE,uBA1BU,EA2BV,yBAAA2J,oBA3BU,EA4BV,6BAAA1F,uBA5BU,EA6BV,gCAAAX,2BA7BU,EA8BV,mBAAA6F,eA9BU,EA+BV,4BAAA3F,uBA/BU,EAgCV,oCAAAgD,qBAhCU,EAiCV,iCAAAE,kBAjCU,EAkCV,oCAAAV,oBAlCU,EAmCV,4BAAA1lB,uBAnCU,EAoCV,mCAAAkkB,6BApCU,EAqCV,iCAAAnE,2BArCU,EAsCV,uBAAAhD,kBAtCU,EAuCV,iCAAAI,2BAvCU,EAwCV,+BAAAL,yBAxCU,EAyCV,oBAAA8M,gBAzCU,EA0CV,oBAAAQ,gBA1CU,EA2CV,yBAAAmC,oBA3CU,CANR;AAmDNryE,iBAAO,EAAE,CACL,2CAAA49D,mCADK,EAEL,wCAAA2D,iCAFK,EAGL,4BAAA9F,sBAHK,EAIL,4BAAA0N,sBAJK,EAKL,oCAAAlD,6BALK,EAML,gCAAAO,yBANK,EAOL,uBAAAnU,kBAPK,EAQL,+BAAAyV,wBARK,EASL,2BAAA9V,sBATK,EAUL,mCAAAoV,4BAVK,EAWL,yBAAAmE,oBAXK,EAYL,cAAAf,UAZK,EAaL,gBAAAO,YAbK,EAcL,mBAAAkE,eAdK,EAeL,0BAAAtG,qBAfK,EAgBL,yBAAAC,oBAhBK,EAiBL,yBAAA3L,oBAjBK,EAkBL,QAAA/R,mBAlBK,EAmBL,QAAAD,WAnBK,EAoBL,mBAAAukB,eApBK,EAqBL,kBAAAzG,cArBK,EAsBL,kBAAAe,cAtBK,EAuBL,4BAAAtE,uBAvBK,EAwBL,yBAAA2J,oBAxBK,EAyBL,6BAAA1F,uBAzBK,EA0BL,gCAAAX,2BA1BK,EA2BL,mBAAA6F,eA3BK,EA4BL,4BAAA3F,uBA5BK,EA6BL,oCAAAgD,qBA7BK,EA8BL,iCAAAE,kBA9BK,EA+BL,oCAAAV,oBA/BK,EAgCL,4BAAA1lB,uBAhCK,EAiCL,mCAAAkkB,6BAjCK,EAkCL,iCAAAnE,2BAlCK,EAmCL,uBAAAhD,kBAnCK,EAmCe,iCAAAI,2BAnCf,EAoCL,+BAAAL,yBApCK,EAqCL,oBAAA8M,gBArCK,EAsCL,oBAAAQ,gBAtCK,EAuCL,yBAAAmC,oBAvCK;AAnDH,S;AA6FW,Q;;;;;;;;;;;;;;;;;AC5LrB;;;;;;;;;;AAMA;AAAA;AAAA;;AAUA;AAAA;AAAA;;AACA;AAAA;AAAA,2D,CAEA;;;AACa,YAAAC,qBAAA,GAAwB,KAAK,EAA7B;AAEA,YAAAhL,gBAAA,GAAmB,EAAnB,C,CAEb;;AACa,YAAA7U,sBAAA,GAAyB,UAClCI,SADkC,EAElC0f,QAFkC,EAKZ;AAAA,UAFtB/sE,IAEsB,uEAFP,EAEO;AAAA,UADtBoC,QACsB,uEADH,IAAI,UAAAsM,MAAJ,CAAW;AAAElR,YAAI,EAAEJ,IAAI,CAACunB,GAAL;AAAR,OAAX,EAAiCo3B,QAC9B;AACtB;AACA;AACA,UAAMp3B,GAAG,GAAG,IAAI,UAAAjW,MAAJ,CAAW;AAAElR,YAAI,EAAEJ,IAAI,CAACunB,GAAL,EAAR;AAAoBK,mBAAW,EAAE,KAAjC;AAAwCC,mBAAW,EAAE7iB;AAArD,OAAX,CAAZ,CAHsB,CAItB;;AACA,UAAI5E,IAAI,GAAG,IAAI,UAAAkR,MAAJ,CAAW;AAAElR,YAAI,EAAE6vD,SAAR;AAAmBroC,mBAAW,EAAE,KAAhC;AAAuCC,mBAAW,EAAE7iB;AAApD,OAAX,CAAX,CALsB,CAMtB;;AACA,UAAMwqD,MAAM,GAAwB,EAApC;;AACA,UAAImgB,QAAQ,IAAIvvE,IAAI,CAACs5B,WAAL,CAAiBnS,GAAjB,EAAsB,KAAtB,CAAhB,EAA8C;AAC1C;AACAnnB,YAAI,GAAGA,IAAI,CAAC0J,YAAL,CAAkB,KAAlB,CAAP;AACH,OAHD,MAGO;AACH;AACA1J,YAAI,GAAGmnB,GAAP;AACH,OAdqB,CAetB;;;AACA,UAAMqoD,SAAS,GAAG,QAAA7sE,QAAA,CAASC,UAAT,CAAoB5C,IAAI,CAAC2J,EAAzB,CAAlB;AACA,UAAM7G,WAAW,GAAG,OAAA/C,iBAAA,CAAkByvE,SAAlB,EAA6BhtE,IAA7B,CAApB,CAjBsB,CAkBtB;;AACAxC,UAAI,GAAG,IAAI,UAAAkR,MAAJ,CAAW;AAAElR,YAAI,EAAE8C,WAAW,CAACD,OAAZ,EAAR;AAA+B2kB,mBAAW,EAAE,KAA5C;AAAmDC,mBAAW,EAAE7iB;AAAhE,OAAX,CAAP;AACA,UAAMyoB,GAAG,GAAGrtB,IAAI,CAACqwB,UAAL,CAAgB,KAAhB,CAAZ,CApBsB,CAqBtB;;AACA,aAAOrwB,IAAI,CAACq5B,YAAL,CAAkBhM,GAAlB,CAAP,EAA+B;AAC3B+hC,cAAM,CAACvnD,IAAP,CAAY;AACRoE,iBAAO,EAAE,OAAAvB,6BAAA,CAA8B1K,IAA9B,CADD;AAER0hB,sBAAY,EAAE1hB,IAAI,CAACsB,UAAL,CAAgB,QAAhB,CAFN;AAGR4B,eAAK,EAAElD,IAAI,CAACsB,UAAL,CAAgB,OAAhB;AAHC,SAAZ;AAKAtB,YAAI,GAAGA,IAAI,CAACa,QAAL,CAAc;AAAEJ,iBAAO,EAAE+B;AAAX,SAAd,CAAP;AACH;;AACD,aAAO4sD,MAAP;AACH,KApCY;;AAuCA,YAAA+V,wBAAA,GAA2B,UACpC9gB,UADoC,EAEpCkrB,QAFoC,EAQX;AAAA,UALzB/sE,IAKyB,uEALV,EAKU;AAAA,UAJzBoC,QAIyB,uEAJN,IAAI,UAAAsM,MAAJ,CAAW;AAAElR,YAAI,EAAEJ,IAAI,CAACunB,GAAL;AAAR,OAAX,EAAiCo3B,QAI3B;AAAA,UAHzB/nB,OAGyB,uEAHN,KAGM;AAAA,UAFzBiS,MAEyB,uEAFQ,EAER;AAAA,UADzBw8B,eACyB,uEADE,KACF;AACzB;AACA,UAAM99C,GAAG,GAAG,IAAI,UAAAjW,MAAJ,CAAW;AAAElR,YAAI,EAAEJ,IAAI,CAACunB,GAAL,EAAR;AAAoBK,mBAAW,EAAE,KAAjC;AAAwCC,mBAAW,EAAE7iB;AAArD,OAAX,CAAZ,CAFyB,CAGzB;;AACA,UAAIjE,MAAM,GAAG0jD,UAAU,CAACjnB,KAAX,EAAb,CAJyB,CAKzB;;AACA,UAAMgyB,MAAM,GAA2B,EAAvC;;AACA,UAAImgB,QAAQ,IAAI5uE,MAAM,CAAC24B,WAAP,CAAmBnS,GAAnB,EAAwB,KAAxB,CAAhB,EAAgD;AAC5C;AACAxmB,cAAM,GAAGA,MAAM,CAAC+I,YAAP,CAAoB,KAApB,CAAT;AACH,OAHD,MAGO;AACH;AACA/I,cAAM,GAAGskE,eAAe,GAAGtkE,MAAH,GAAYwmB,GAApC;AACH,OAbwB,CAczB;;;AACAxmB,YAAM,GAAG,OAAAD,mBAAA,CAAoBC,MAApB,EAA4B6B,IAA5B,CAAT,CAfyB,CAgBzB;;AACA,UAAM6qB,GAAG,GAAG1sB,MAAM,CAAC0vB,UAAP,CAAkB,KAAlB,CAAZ,CAjByB,CAkBzB;;AACA,UAAImG,OAAO,IAAI71B,MAAM,CAAC49B,UAAP,CAAkBpX,GAAlB,EAAuB,KAAvB,CAAf,EAA8C;AAC1C,YAAMqG,UAAU,GAAG7sB,MAAM,CAAC+I,YAAP,CAAoB,KAApB,CAAnB;AACA0lD,cAAM,CAACvnD,IAAP,CAAY;AACRoE,iBAAO,EAAE,OAAAvB,6BAAA,CAA8B8iB,UAA9B,CADD;AAER9L,sBAAY,EAAE8L,UAAU,CAAClsB,UAAX,CAAsB,QAAtB,CAFN;AAGR4B,eAAK,EAAEsqB;AAHC,SAAZ;AAKH,OA1BwB,CA2BzB;;;AACA,aAAO7sB,MAAM,CAAC04B,YAAP,CAAoBhM,GAApB,CAAP,EAAiC;AAC7B+hC,cAAM,CAACvnD,IAAP,CAAY;AACRoE,iBAAO,EAAE,OAAAvB,6BAAA,CAA8B/J,MAA9B,CADD;AAER+gB,sBAAY,EAAE/gB,MAAM,CAACW,UAAP,CAAkB,QAAlB,CAFN;AAGR4B,eAAK,EAAEvC;AAHC,SAAZ;AAMAA,cAAM,GAAGA,MAAM,CAACE,QAAP,CAAgB;AAAEJ,iBAAO,EAAE+B;AAAX,SAAhB,CAAT;AACH;;AAED,aAAO,OAAAkE,MAAA,CAAO+hC,MAAM,CAACvW,MAAP,CAAck9B,MAAd,CAAP,EAA8B,cAA9B,CAAP;AACH,KA/CY;AAiDb;;;;;;;;;AAOa,YAAAD,uBAAA,GAA0B,UACnCnvD,IADmC,EAEnCyD,GAFmC,EAGnCk7B,GAHmC,EAInCn8B,IAJmC,EAKnCoiE,QALmC,EAKQ;AAC3C,UAAMxV,MAAM,GAAwB,EAApC;AACA,UAAIlsD,KAAK,GAAGy7B,GAAZ;;AACA,aAAOz7B,KAAK,IAAIO,GAAhB,EAAqB;AACjB,YAAI1C,QAAgB,SAApB;;AACA,YAAI6jE,QAAJ,EAAc;AACV,cAAMzjE,CAAC,GAAG,OAAAL,iBAAA,CAAkBoC,KAAK,GAAGy7B,GAA1B,EAA+B,IAA/B,CAAV;AACA59B,kBAAQ,GAAGI,CAAC,cAAOA,CAAP,IAAa,SAAzB;AACH,SAHD,MAGO;AACHJ,kBAAQ,GAAG,OAAAD,iBAAA,CAAkBoC,KAAlB,EAAyB,IAAzB,CAAX;AACH;;AAEDksD,cAAM,CAACvnD,IAAP,CAAY;AACR3E,eAAK,EAALA,KADQ;AAER+I,iBAAO,YAAKjM,IAAI,CAACa,QAAL,CAAc;AAAEJ,mBAAO,EAAEyC;AAAX,WAAd,EAAkC5B,UAAlC,CAA6C,OAAAwI,gBAAA,EAA7C,EAAiEW,iBAAjE,EAAL,eAA8F1J,QAA9F;AAFC,SAAZ;AAIAmC,aAAK,IAAIV,IAAT;AACH;;AACD,aAAO4sD,MAAP;AACH,KAxBY;;AA0BA,YAAAqgB,YAAA,GAAmC;AAC5CvsE,WAAK,EAAE,QAAAosE,qBADqC;AAE5CrjE,aAAO,EAAE;AAFmC,KAAnC;AAKA,YAAAyjE,aAAA,GAAoC;AAC7CxsE,WAAK,EAAE,KAAK,EAAL,GAAU,CAD4B;AAE7C+I,aAAO,EAAE;AAFoC,KAApC;AAKA,YAAAo4D,qBAAA,GAAyC,CAClD;AACInkE,WAAK,EAAE,EADX;AAEIsC,UAAI,EAAE,EAFV;AAGIiB,SAAG,EAAE,KAAK;AAHd,KADkD,CAMlD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAdkD,KAAzC;AAiBb;;;;AAGa,YAAAkhE,iCAAA,GAAoC,UAAC3kE,IAAD,EAAeiD,cAAf,EAAgD2hE,QAAhD;AAAA,gCACzC3hE,cAAc,CAAC4C,GAAf,CAAmB,UAAA9E,QAAQ;AAAA,eAAI,QAAAouD,uBAAA,CAAwBnvD,IAAxB,EAA8Be,QAAQ,CAAC0C,GAAvC,EAA4C1C,QAAQ,CAACb,KAArD,EAA4Da,QAAQ,CAACyB,IAArE,EAA2EoiE,QAA3E,CAAJ;AAAA,OAA3B,EAAqHjhE,MAArH,CAA6H,UAACC,aAAD,EAAgBC,YAAhB,EAAiC;AAC9JD,qBAAa,CAACiE,IAAd,OAAAjE,aAAa,qBAASC,YAAT,EAAb;AACA,eAAOD,aAAP;AACH,OAHG,EAGA,EAHA,CADyC;AAAA,KAApC;;;;;;;;;;;;;;;;;;;;;AChLb;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;QAOayrE,oB;AAEX,oCAAoBtpC,SAApB,EAAmE;AAAA;;AAA/C,aAAAA,SAAA,GAAAA,SAAA;AAAiD;;;;uCAEzD;AACV,eAAKA,SAAL,CAAeC,KAAf;AACD;;;;;;AAXH;;;uBAKaqpC,oB,EAAoB,qC;AAAA,K;;;YAApBA,oB;AAAoB,uC;AAAA,e;AAAA,a;AAAA,uH;AAAA;AAAA;ACRjC;AACI;AAAqB;AAAsB;AAC/C;AACA;AACI;AACI;AACI;AACJ;AACJ;AACJ;AACA;AACI;AACI;AAAmB;AAAA,mBAAS,IAAAM,YAAA,EAAT;AAAuB,WAAvB;AAAyB;AAAa;AAC7D;AACJ;;;;AARe;AAAA;AAMqC;AAAA;;;;;;;;;2BDJvCN,oB,EAAoB;cALhC,OAAAvrB,SAKgC;eALtB;AACTlnD,kBAAQ,EAAE,kBADD;AAETmnD,qBAAW,EAAE,+BAFJ;AAGTC,mBAAS,EAAE,CAAC,+BAAD;AAHF,S;AAKsB,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AERjC;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACHA;AAAA;AAAA;;AAQA;AAAA;AAAA;;AAEa,YAAA4rB,QAAA,GAAW,kBAAAx/D,mBAAA,CAAqC,aAArC,EAAoD,SAApD,CAAX;;AAEA,YAAAy/D,eAAA,GAAkB;AAAA,UAAGj3D,IAAH,UAAGA,IAAH;AAAA,aAA8BA,IAA9B;AAAA,KAAlB;;AAEA,YAAAk3D,iBAAA,GAAoB,QAAA96D,cAAA,CAAe,QAAAA,cAAA,CAAe,QAAA66D,eAAf,EAAgC,QAAAD,QAAA,CAAS36D,SAAT,CAAmBqT,KAAnD,CAAf,EAA0E,UAACvtB,KAAD;AAAA,aAAW,CAAC,CAACA,KAAK,CAACma,eAAnB;AAAA,KAA1E,CAApB;AAEA,YAAAyD,iBAAA,GAAoB,QAAA3D,cAAA,CAAe,QAAA66D,eAAf,EAAgC,QAAAD,QAAA,CAAS36D,SAAT,CAAmBC,eAAnD,CAApB;;;;;;;;;;;;;;;;;;;;;;;;AChBb;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;QAIa66D,W,GAET,qBAAoBp/D,OAApB,EACoBq/D,WADpB,EAC+C;AAAA;;AAAA;;AAD3B,WAAAr/D,OAAA,GAAAA,OAAA;AACA,WAAAq/D,WAAA,GAAAA,WAAA;AAIpB,WAAAJ,QAAA,GAAW,UAAAt9D,mBAAA,CAAoB,KAAK3B,OAAzB,EAAkC,eAAAi/D,QAAlC,EAA4C;AAAA,eAAM,QAAI,CAACI,WAAL,CAAiBn8B,eAAjB,EAAN;AAAA,OAA5C,CAAX;AAHC,K;;;uBAJQk8B,W,EAAW,uB,EAAA,4B;AAAA,K;;;aAAXA,W;AAAW,eAAXA,WAAW;;;AAOpB,wBADC,UAAAn9D,MAAA,EACD,E,yCAAA,G,qBAAA,E,UAAA,E,MAAA;;AARJ;;;;2BACam9D,W,EAAW;cADvB,OAAAl9D;AACuB,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACXxB;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;QASao9D,U;;;;AAPb;;YAOaA;;;;yBAAAA,U;AAAU,O;AAAA,gBANV,CACL,SAAAh1E,YADK,EAEL,QAAAgY,WAAA,CAAYD,UAAZ,CAAuB,MAAvB,EAA+B,eAAAk9D,WAA/B,CAFK,EAGL,UAAAn9D,aAAA,CAAcC,UAAd,CAAyB,CAAC,eAAA+8D,WAAD,CAAzB,CAHK,CAMU;;;;+EAAVE,U,EAAU;AAAA,kBALf,SAAAh1E,YAKe,EALH,qBAKG,EALH,uBAKG;AAAA,O;AALH,K;;;;;2BAKPg1E,U,EAAU;cAPtB,OAAA/0E,QAOsB;eAPb;AACNC,iBAAO,EAAE,CACL,SAAAF,YADK,EAEL,QAAAgY,WAAA,CAAYD,UAAZ,CAAuB,MAAvB,EAA+B,eAAAk9D,WAA/B,CAFK,EAGL,UAAAn9D,aAAA,CAAcC,UAAd,CAAyB,CAAC,eAAA+8D,WAAD,CAAzB,CAHK;AADH,S;AAOa,Q;;;;;;;;;;;;;;;;;;;;;;ACdvB;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAGa,YAAAI,gBAAA,GAA8B;AACvCz0C,aAAO,EAAE,UAAAroB,YAAA,CAAaC,KAAb;AAD8B,KAA9B;AAIA,YAAA48D,WAAA,GAAc,QAAAt8D,aAAA,iBAAc,QAAAu8D,gBAAd,4BACpB,eAAAP,QAAA,CAAS97D,GADW,GAAd;;;;;;;;;;;;;;ACVb,aAASs8D,wBAAT,CAAkCC,GAAlC,EAAuC;AACtC;AACA;AACA,aAAOh0D,OAAO,CAACC,OAAR,GAAkBI,IAAlB,CAAuB,YAAW;AACxC,YAAIrS,CAAC,GAAG,IAAIjO,KAAJ,CAAU,yBAAyBi0E,GAAzB,GAA+B,GAAzC,CAAR;AACAhmE,SAAC,CAAC6f,IAAF,GAAS,kBAAT;AACA,cAAM7f,CAAN;AACA,OAJM,CAAP;AAKA;;AACD+lE,4BAAwB,CAACxqE,IAAzB,GAAgC,YAAW;AAAE,aAAO,EAAP;AAAY,KAAzD;;AACAwqE,4BAAwB,CAAC9zD,OAAzB,GAAmC8zD,wBAAnC;AACAE,UAAM,CAACtzE,OAAP,GAAiBozE,wBAAjB;AACAA,4BAAwB,CAACn+D,EAAzB,GAA8B,yCAA9B;;;;;;;;;;;;;;;;;;;;ACZA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;AAEA,QAAMs+D,MAAM,GAAW,CACnB;AACItkD,UAAI,EAAE,EADV;AAEIukD,eAAS,EAAE,kBAAAC,qBAFf;AAGIC,cAAQ,EAAE,CACN;AACIzkD,YAAI,EAAE,MADV;AAEI0kD,oBAAY,EAAE;AAAA,iBAAM;AAAA;AAAO;AAAA,iDAAP;AAAA,aAAmCj0D,IAAnC,CAAwC,UAACtb,CAAD;AAAA,mBAAOA,CAAC,CAACwvE,aAAT;AAAA,WAAxC,CAAN;AAAA;AAFlB,OADM,EAKN;AAAE3kD,YAAI,EAAE,IAAR;AAAc4kD,kBAAU,EAAE;AAA1B,OALM;AAHd,KADmB,EAYnB;AAAE5kD,UAAI,EAAE,IAAR;AAAc4kD,gBAAU,EAAE;AAA1B,KAZmB,CAAvB;;QAmBaC,gB;;;;AAJb;;YAIaA;;;;yBAAAA,gB;AAAgB,O;AAAA,gBAHhB,CAAC,SAAAC,YAAA,CAAaC,OAAb,CAAqBT,MAArB,EAA6B;AAAEU,eAAO,EAAE;AAAX,OAA7B,CAAD,CAGgB,EAFf,SAAAF,YAEe;;;;+EAAhBD,gB,EAAgB;AAAA;AAAA,kBAFf,SAAAC,YAEe;AAAA,O;AAFH,K;;;;;2BAEbD,gB,EAAgB;cAJ5B,OAAA51E,QAI4B;eAJnB;AACNC,iBAAO,EAAE,CAAC,SAAA41E,YAAA,CAAaC,OAAb,CAAqBT,MAArB,EAA6B;AAAEU,mBAAO,EAAE;AAAX,WAA7B,CAAD,CADH;AAENj0E,iBAAO,EAAE,CAAC,SAAA+zE,YAAD;AAFH,S;AAImB,Q;;;;;;;;;;;;;;;;;;;;;;ACvB7B;AAAA;AAAA;;AAKA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAMA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;QAYaG,Y;;;;;AACT,4BACYC,IADZ,EAEYhiD,IAFZ,EAGYC,OAHZ,EAIYK,SAJZ,EAKYuxB,OALZ,EAMYowB,MANZ,EAOYnwB,OAPZ,EAO8B;AAAA;;AAAA;;AAE1B;AARQ,iBAAAkwB,IAAA,GAAAA,IAAA;AACA,iBAAAhiD,IAAA,GAAAA,IAAA;AACA,iBAAAC,OAAA,GAAAA,OAAA;AACA,iBAAAK,SAAA,GAAAA,SAAA;AACA,iBAAAuxB,OAAA,GAAAA,OAAA;AACA,iBAAAowB,MAAA,GAAAA,MAAA;AACA,iBAAAnwB,OAAA,GAAAA,OAAA,CAAkB,CAI1B;;AACA,YAAI,CAAC,cAAAL,WAAA,CAAYC,UAAjB,EAA6B;AACzB5mC,sBAAY,CAAC+xB,OAAb,CAAqB,SAArB,EAAgC,MAAhC;AACH;;AAGD,YAAI,OAAA9+B,QAAA,MAAc,OAAAA,QAAA,KAAa,EAA/B,EAAmC;AAC/BmM,kBAAQ,CAACW,IAAT,aAAmBX,QAAQ,CAACO,MAA5B,SAAqCP,QAAQ,CAACgT,QAA9C;AACA;AACH;;AAbyB;AAc7B;;;;mCAEc;AACX,eAAK20B,OAAL,CAAajlC,MAAb,CAAoB9d,SAApB,CAA8B,UAACozE,GAAD,EAA0B;AACpD,gBAAM/pD,WAAW,GAAG/e,IAAI,CAACC,KAAL,CAAWyR,YAAY,CAACC,OAAb,CAAqB,aAArB,CAAX,CAApB;;AACA,gBAAIm3D,GAAG,IAAIA,GAAG,CAACC,iBAAX,IAAgCD,GAAG,CAAC33D,GAAxC,EAA6C;AACzC;AACA,kBAAM63D,SAAS,GAAGl4D,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAEo3B,IAAV,CAAezuC,KAAf,CAAqB,GAArB,EAA0B,CAA1B,CAAlB;AACA,kBAAMwvE,gBAAgB,GAAGD,SAAS,CAACnuE,OAAV,CAAkB,iBAAlB,MAAyC,CAAlE;AACA,kBAAMquE,iBAAiB,GAAGF,SAAS,CAACnuE,OAAV,CAAkB,kBAAlB,MAA0C,CAApE;;AACA,kBAAI,CAACouE,gBAAD,IAAqB,CAACC,iBAAtB,IAA2CF,SAA3C,IAAwD,CAAC,QAAD,EAAW,eAAX,EAA4B,eAA5B,EAA6C,aAA7C,EAA4DnuE,OAA5D,CAAoEmuE,SAApE,MAAmF,CAAC,CAA5I,IAAiJjqD,WAAjJ,IAAgK,EAACA,WAAW,SAAX,IAAAA,WAAW,WAAX,GAAW,MAAX,GAAAA,WAAW,CAAEnT,UAAd,CAApK,EAA8L;AAC1LkF,wBAAQ,CAACW,IAAT,aAAmBX,QAAQ,CAACO,MAA5B;AACA;AACH;AACJ;AAEJ,WAbD;;AAcA,eAAK83D,UAAL;AACH;;;qCAEoB;AACjB,cAAMC,WAAW,GAAGpmE,QAAQ,CAACW,IAAT,CAAcylE,WAAlC;;AACA,cAAI,KAAKC,gBAAL,EAAJ,EAA6B;AAAE;AAC3B;AACH;;AACD,cAAID,WAAW,GAAG,IAAlB,EAAwB;AACpB,iBAAK1wB,OAAL,CAAajpC,IAAb,CAAkB,KAAAq3D,oBAAlB;AACH;AACJ;;;2CACuB;AACpB,cAAMnpE,SAAS,GAAGD,SAAS,CAACC,SAAV,IAAuBD,SAAS,CAAC4rE,MAAnD;AACA,cAAMC,cAAc,GAAG7rE,SAAS,CAAC6rE,cAAV,IAA4B,CAAnD,CAFoB,CAEkC;;AACtD,cAAIA,cAAc,GAAG,CAAjB,IAAsBvsE,MAAM,CAAC2J,UAAP,IAAqB,IAA/C,EAAqD;AACjD,mBAAO,IAAP;AACH,WALmB,CAKlB;;;AACF,cAAM6iE,YAAY,GAAG,CAAC,SAAD,EAAY,OAAZ,EAAqB,QAArB,EAA+B,MAA/B,EAAuC,MAAvC,EAA+C,YAA/C,EAA6D,UAA7D,EAAyE,YAAzE,CAArB;;AACA,6CAAoBA,YAApB,uCAAkC;AAA7B,gBAAM1rE,KAAK,sBAAX;;AACD,gBAAIH,SAAS,CAAC9C,OAAV,CAAkBiD,KAAlB,IAA2B,CAAC,CAAhC,EAAmC;AAC/B,qBAAO,IAAP;AACH;AACJ;;AACD,iBAAO,KAAP;AACH;;;;MAhE6B,OAAA5J,a;;AAVlC;;;uBAUay0E,Y,EAAY,2C,EAAA,4C,EAAA,sC,EAAA,wC,EAAA,+B,EAAA,uC,EAAA,kC;AAAA,K;;;YAAZA,Y;AAAY,+B;AAAA,+C;AAAA,c;AAAA,a;AAAA,0B;AAAA;AAAA;AC3BzB;AACI;AACJ;;;;;;;;;;2BDyBaA,Y,EAAY;cAVxB,OAAAptB,SAUwB;eAVd;AACPlnD,kBAAQ,EAAE,UADH;AAEPmnD,qBAAW,EAAE,sBAFN;AAGPC,mBAAS,EAAE,CACP,6BADO,EAEP,qCAFO,EAGP,qCAHO,CAHJ;AAQPga,uBAAa,EAAE,OAAAC,iBAAA,CAAkB34C;AAR1B,S;AAUc,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QE3BzB;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;AAEA;;;;;AAGA,aAAgB0sD,uBAAhB,CAAwCC,OAAxC,EAAmE;AAC/D;AACA,UAAIrsE,IAAI,GAAG,CACP,WADO,EAEP,aAFO,EAGP,OAHO,CAAX;;AAMA,UAAI,CAAC,cAAAg7C,WAAA,CAAYC,UAAjB,EAA6B;AACzBj7C,YAAI,GAAG,CACH,UADG,EAEH,WAFG,EAGH,cAHG,EAIH,aAJG,EAKH,OALG,EAMH,MANG,CAAP;AAQH;;AAED,aAAO,0BAAAssE,gBAAA,CAAiB;AACpBtsE,YAAI,EAAJA,IADoB;AAEpBusE,iBAAS,EAAE;AAFS,OAAjB,EAGJF,OAHI,CAAP;AAIH;;AAvBD;AAyBA,QAAMG,YAAY,GAAiC,CAACJ,uBAAD,CAAnD;;QAuCaK,S;;;;AApCb;;YAoCaA,S;AAAS,kBAFN,gBAAAnB,YAEM;;;;yBAATmB,S;AAAS,O;AAAA,iBAPP,CACP;AAAEh9B,eAAO,EAAE,OAAAi9B,wBAAX;AAAqCviC,gBAAQ,EAAE;AAAE,mBAAO;AAAT;AAA/C,OADO,EAEP,cAAAqF,yBAAA,CAA0B,WAAAm9B,gBAA1B,CAFO,EAGP;AAAEl9B,eAAO,EAAE,cAAAqL,iBAAX;AAA8B3Q,gBAAQ,EAAE,cAAA6Q;AAAxC,OAHO,C;AAIV,gBA5BQ,CACL,mBAAA4xB,aADK,EAEL,aAAAC,uBAFK,EAGL,qBAAA3B,gBAHK,EAIL,OAAA4B,gBAJK,EAKL,QAAAzqB,WALK,EAML,WAAA0qB,cANK,EAOL,gBAAAC,mBAPK,EAQL,kBAAA7qB,oBARK,EASL,QAAA90C,WAAA,CAAY+9D,OAAZ,CAAoB,EAApB,EAAwB;AAAEoB,oBAAY,EAAZA;AAAF,OAAxB,CATK,EAUL,iBAAAS,mBAAA,CAAoBC,UAApB,CAA+B;AAC3BC,cAAM,EAAE,GADmB;AAE3BC,eAAO,EAAE,cAAApyB,WAAA,CAAYC;AAFM,OAA/B,CAVK,EAcL,UAAA9tC,aAAA,CAAci+D,OAAd,EAdK,EAeL,WAAAl+D,cAfK,EAgBL,iBAAA89D,aAhBK,EAiBL,YAAAx6D,eAjBK,EAkBL,aAAA68D,SAlBK,EAmBL,eAAA3c,kBAnBK,EAoBL,QAAAoB,WApBK,EAqBL,KAAAvP,QArBK,EAsBL,OAAA8nB,UAtBK,CA4BR;;;;+EAGQoC,S,EAAS;AAAA,uBAlCd,gBAAAnB,YAkCc,EAjCd,kBAAAT,qBAiCc;AAjCO,kBAGrB,mBAAA+B,aAHqB,EAIrB,aAAAC,uBAJqB,EAKrB,qBAAA3B,gBALqB,EAMrB,OAAA4B,gBANqB,EAOrB,QAAAzqB,WAPqB,EAQrB,WAAA0qB,cARqB,EASrB,gBAAAC,mBATqB,EAUrB,kBAAA7qB,oBAVqB,EAUD,kBAVC,EAUD,sBAVC,EAUD,oBAVC,EAiBrB,WAAAj1C,cAjBqB,EAkBrB,iBAAA89D,aAlBqB,EAmBrB,YAAAx6D,eAnBqB,EAoBrB,aAAA68D,SApBqB,EAqBrB,eAAA3c,kBArBqB,EAsBrB,QAAAoB,WAtBqB,EAuBrB,KAAAvP,QAvBqB,EAwBrB,OAAA8nB,UAxBqB;AAiCP,O;AATJ,K;;;;;2BASLoC,S,EAAS;cApCrB,OAAAn3E,QAoCqB;eApCZ;AACN6B,sBAAY,EAAE,CACV,gBAAAm0E,YADU,EAEV,kBAAAT,qBAFU,CADR;AAKNt1E,iBAAO,EAAE,CACL,mBAAAq3E,aADK,EAEL,aAAAC,uBAFK,EAGL,qBAAA3B,gBAHK,EAIL,OAAA4B,gBAJK,EAKL,QAAAzqB,WALK,EAML,WAAA0qB,cANK,EAOL,gBAAAC,mBAPK,EAQL,kBAAA7qB,oBARK,EASL,QAAA90C,WAAA,CAAY+9D,OAAZ,CAAoB,EAApB,EAAwB;AAAEoB,wBAAY,EAAZA;AAAF,WAAxB,CATK,EAUL,iBAAAS,mBAAA,CAAoBC,UAApB,CAA+B;AAC3BC,kBAAM,EAAE,GADmB;AAE3BC,mBAAO,EAAE,cAAApyB,WAAA,CAAYC;AAFM,WAA/B,CAVK,EAcL,UAAA9tC,aAAA,CAAci+D,OAAd,EAdK,EAeL,WAAAl+D,cAfK,EAgBL,iBAAA89D,aAhBK,EAiBL,YAAAx6D,eAjBK,EAkBL,aAAA68D,SAlBK,EAmBL,eAAA3c,kBAnBK,EAoBL,QAAAoB,WApBK,EAqBL,KAAAvP,QArBK,EAsBL,OAAA8nB,UAtBK,CALH;AA6BNxvB,mBAAS,EAAE,CACP;AAAEpL,mBAAO,EAAE,OAAAi9B,wBAAX;AAAqCviC,oBAAQ,EAAE;AAAE,uBAAO;AAAT;AAA/C,WADO,EAEP,cAAAqF,yBAAA,CAA0B,WAAAm9B,gBAA1B,CAFO,EAGP;AAAEl9B,mBAAO,EAAE,cAAAqL,iBAAX;AAA8B3Q,oBAAQ,EAAE,cAAA6Q;AAAxC,WAHO,CA7BL;AAkCNsyB,mBAAS,EAAE,CAAC,gBAAAhC,YAAD;AAlCL,S;AAoCY,Q;;;;;;;;;;;;;;;;;;;;;;ACxGtB;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACMgB;AAA0B;AAAK;;;;;;;;;;;;;;;;;;;;;;QDClCiC,2B;;;;;AAkDT,2CAAoB1jD,SAApB,EAA4DN,IAA5D,EAAuF;AAAA;;AAAA;;AACnF;AADgB,iBAAAM,SAAA,GAAAA,SAAA;AAAwC,iBAAAN,IAAA,GAAAA,IAAA;AAjD5D;;AACgB,iBAAAxuB,MAAA,GAAiB,UAAA8I,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAjB;AAKhB;;AACgB,iBAAAwzE,aAAA,GAAgB,KAAhB;AAChB;;AACgB,iBAAAC,WAAA,GAAuB,KAAvB;AAChB;;AACgB,iBAAAC,kBAAA,GAA8B,KAA9B;AAChB;;AACiB,iBAAAC,YAAA,GAAe,IAAI,OAAAnyB,YAAJ,EAAf;AACjB;;AACiB,iBAAA1zC,KAAA,GAAQ,IAAI,OAAA0zC,YAAJ,EAAR;AAIV,iBAAAiD,UAAA,GAAa,UAAA56C,OAAA,GAAUgI,aAAV,CAAwB;AAAE4oB,gBAAM,EAAE;AAAV,SAAxB,CAAb;AA8BgF;AAEtF;;;;mCAEc;AAAA;;AACX;AACD,cAAIr6B,IAAJ;;AACC,cAAG,CAAC,KAAKszE,kBAAT,EAA6B;AACxBtzE,gBAAI,GAAG,CAACia,YAAY,CAACC,OAAb,CAAqB,gBAArB,CAAD,IAA2C,KAAKiN,GAAL,CAASxd,EAA3D;AACJ,WAFD,MAEO;AACF3J,gBAAI,GAAG,KAAKmnB,GAAL,CAASxd,EAAhB;AACJ;AAGD;;;AACA,cAAI3J,IAAI,KAAKA,IAAI,KAAK,KAAKW,MAAL,CAAYgJ,EAArB,IAA2B,KAAK6pE,cAAL,KAAwB,KAAK7yE,MAAL,CAAY8mB,WAApE,CAAR,EAA0F;AACtF;AACA,iBAAK9oB,OAAL,CACI,MADJ,EAEI,YAAM;AACF,sBAAI,CAACgC,MAAL,GAAc,IAAI,UAAAuQ,MAAJ,CAAW;AACrBlR,oBAAI,EAAJA,IADqB;AAErBwnB,2BAAW,EAAE,KAFQ;AAGrBC,2BAAW,EAAE,QAAI,CAAC+rD;AAHG,eAAX,CAAd;;AAKA,sBAAI,CAACD,YAAL,CAAkB7wB,IAAlB,CAAuB,QAAI,CAAC/hD,MAA5B;;AACA,sBAAI,CAACk5D,UAAL;AACH,aAVL,EAWI,EAXJ;AAaH;;AACD,eAAK97D,YAAL,CACI,QADJ,EAEI,KAAK0xB,SAAL,CAAeC,aAAf,CAA6BzxB,SAA7B,CAAuC,UAACC,IAAD,EAAU;AAC7C,oBAAI,CAACu1E,SAAL,GAAiB,EAAjB;AACA,oBAAI,CAACA,SAAL,GAAiBv1E,IAAI,CAAC,CAAD,CAArB;AACH,WAHD,CAFJ;AAOH;;;kCAEgBwP,K,EAAO,CACrB;AACC;AACA;AACH;AAED;;;;;;;mCAIkBxK,K,EAAe;AAC7B,cAAIlD,IAAI,GAAG,IAAI,UAAAkR,MAAJ,CAAW;AAClBlR,gBAAI,EAAE,UAAAsgD,WAAA,CAAY,KAAK3/C,MAAjB,EAAyBgJ,EADb;AAElB6d,uBAAW,EAAE,KAFK;AAGlBC,uBAAW,EAAE,KAAK+rD;AAHA,WAAX,CAAX;AAKAxzE,cAAI,GAAGA,IAAI,CAACa,QAAL,CAAc;AAAE4wB,gBAAI,EAAEvuB;AAAR,WAAd,CAAP;AACA,eAAKvC,MAAL,GAAcX,IAAd;AACA,eAAKuzE,YAAL,CAAkB7wB,IAAlB,CAAuB,KAAK/hD,MAA5B;AACAsZ,sBAAY,CAAC+xB,OAAb,CAAqB,gBAArB,YAA0C,KAAKrrC,MAAL,CAAYgJ,EAAtD;AACAsQ,sBAAY,CAAC+xB,OAAb,CAAqB,oBAArB,YAA8C,KAAKwnC,cAAnD;AACA,eAAK3Z,UAAL;AACH;AAED;;;;;;;6CAI4B6Z,W,EAAqB;AAC7C,eAAK/yE,MAAL,GAAc,IAAI,UAAAuQ,MAAJ,CAAW;AACrBlR,gBAAI,EAAE,UAAAsgD,WAAA,CAAYozB,WAAZ,EAAyB/pE,EADV;AAErB6d,uBAAW,EAAE,KAFQ;AAGrBC,uBAAW,EAAE,KAAK+rD;AAHG,WAAX,CAAd;AAKA,eAAKD,YAAL,CAAkB7wB,IAAlB,CAAuB,KAAK/hD,MAA5B;AACAsZ,sBAAY,CAAC+xB,OAAb,CAAqB,gBAArB,YAA0C,KAAKrrC,MAAL,CAAYgJ,EAAtD;AACAsQ,sBAAY,CAAC+xB,OAAb,CAAqB,oBAArB,YAA8C,KAAKwnC,cAAnD;AACA,eAAK3Z,UAAL;AACA,eAAK9K,eAAL;AACH;;;qCAEmB;AAAA;;AAChB,eAAKpwD,OAAL,CAAa,aAAb,EAA4B;AAAA,mBAAM,QAAI,CAAC8wB,SAAL,CAAeukB,OAAf,CAAuB,QAAI,CAACrzC,MAA5B,CAAN;AAAA,WAA5B;AACH;AAED;;;;oCACmB;AACf,eAAKA,MAAL,GAAc,IAAI,UAAAuQ,MAAJ,CAAW;AACrBlR,gBAAI,EAAE,UAAAsgD,WAAA,CAAY,KAAKn5B,GAAjB,EAAsBxd,EADP;AAErB6d,uBAAW,EAAE,KAFQ;AAGrBC,uBAAW,EAAE,KAAK+rD;AAHG,WAAX,CAAd;AAKA,eAAKD,YAAL,CAAkB7wB,IAAlB,CAAuB,KAAK/hD,MAA5B;AACAsZ,sBAAY,CAAC+xB,OAAb,CAAqB,gBAArB,YAA0C,KAAKrrC,MAAL,CAAYgJ,EAAtD;AACAsQ,sBAAY,CAAC+xB,OAAb,CAAqB,oBAArB,YAA8C,KAAKwnC,cAAnD;AACA,eAAK3Z,UAAL;AACH;;;0CAEwB;AACrB,eAAKA,UAAL;AACH;AAED;;;;kCACc;AACV,eAAKnsD,KAAL,CAAWg1C,IAAX,CAAgB,UAAhB;AACH;;;4BArIgB;AACb,iBAAO,UAAAj5C,OAAA,EAAP;AACH;AAED;;;;4BACa;AACT,iBAAO,UAAAsvB,uBAAA,CAAwB,KAAKy6C,cAA7B,CAAP;AACH;;;4BAE2B;AACxB,iBAAOv5D,YAAY,CAACC,OAAb,CAAqB,oBAArB,KAA8C,KAAKtV,QAAnD,IAA+D,KAAKuiB,GAAL,CAASM,WAA/E;AACH;;;4BAEqB;AAClB,iBAAO,IAAI,UAAAvW,MAAJ,CAAW;AACdlR,gBAAI,EAAE,UAAAsgD,WAAA,CAAY,KAAK3/C,MAAjB,EAAyBgJ,EADjB;AAEd6d,uBAAW,EAAE,KAFC;AAGdC,uBAAW,EAAE,KAAK+rD;AAHJ,WAAX,EAIJj1C,UAJI,CAKH,IAAI,UAAArtB,MAAJ,CAAW;AACPlR,gBAAI,EAAEJ,IAAI,CAACunB,GAAL,EADC;AAEPK,uBAAW,EAAE,KAFN;AAGPC,uBAAW,EAAE,KAAK+rD;AAHX,WAAX,CALG,EAUH,KAVG,CAAP;AAYH;;;;MAhD4C,OAAA/2E,a;;AALjD;;;uBAKa02E,2B,EAA2B,4C,EAAA,4C;AAAA,K;;;YAA3BA,2B;AAA2B,2C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,e;AAAA,c;AAAA,wa;AAAA;AAAA;ACZxC;AAGI;AACI;AACI;AAAwC;AAAA,mBAAS,IAAAQ,UAAA,CAAW,IAAC,CAAZ,CAAT;AAAuB,WAAvB;AACpC;AAGJ;AACA;AAAkB;AAAA,mBAAY,IAAA9zE,SAAA,EAAZ;AAAuB,WAAvB;AACd;AACA;AAA6B;;AAAuC;AACxE;AACA;AAAoC;AAAA,mBAAS,IAAA8zE,UAAA,CAAW,CAAX,CAAT;AAAsB,WAAtB;AAChC;AAGJ;AACJ;AACA;AAAoB;AAAA,mBAAS,IAAAC,SAAA,QAAT;AAA0B,WAA1B;AAChB;AAII;AAAA;AAAA,aAAoB,UAApB,EAAoB;AAAA,mBAIR,IAAAC,oBAAA,QAJQ;AAIoB,WAJxC;AAMJ;AACJ;AACJ;AACJ;;;;AA3BoB;AAAA;AAIK;AAAA;AACN;AAAA;AAA0B;AAAA;AAIzB;AAAA;AAOJ;AAAA,2CAAkB,UAAlB,EAAkB,6DAAlB,EAAkB,SAAlB,EAAkB,UAAlB,EAAkB,YAAlB,EAAkB,cAAlB,EAAkB,gBAAlB,EAAkB,KAAlB,EAAkB,UAAlB,EAAkB,kBAAlB;;;;;;;;;;2BDXHV,2B,EAA2B;cALvC,OAAArvB,SAKuC;eAL7B;AACPlnD,kBAAQ,EAAE,sBADH;AAEPmnD,qBAAW,EAAE,uCAFN;AAGPC,mBAAS,EAAE,CAAC,uCAAD;AAHJ,S;AAK6B,Q;;;;;;;;gBAEnC,OAAA1kD;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAA2kD;;;gBAEA,OAAAA;;;;;;;;;;;;;;;;;;;;;;;;AE5BL;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;AAGA,QAAMssB,MAAM,GAAW,CACnB;AAAEtkD,UAAI,EAAE,EAAR;AAAYukD,eAAS,EAAE,qCAAAsD;AAAvB,KADmB,EAEnB;AAAE7nD,UAAI,EAAE,QAAR;AAAkBukD,eAAS,EAAE,qCAAAsD;AAA7B,KAFmB,EAGnB;AAAE7nD,UAAI,EAAE,IAAR;AAAc4kD,gBAAU,EAAE;AAA1B,KAHmB,CAAvB;;QAUakD,4B;;;;AAJb;;YAIaA;;;;yBAAAA,4B;AAA4B,O;AAAA,gBAH5B,CAAC,SAAAhD,YAAA,CAAaiD,QAAb,CAAsBzD,MAAtB,CAAD,CAG4B,EAF3B,SAAAQ,YAE2B;;;;+EAA5BgD,4B,EAA4B;AAAA;AAAA,kBAF3B,SAAAhD,YAE2B;AAAA,O;AAFf,K;;;;;2BAEbgD,4B,EAA4B;cAJxC,OAAA74E,QAIwC;eAJ/B;AACNC,iBAAO,EAAE,CAAC,SAAA41E,YAAA,CAAaiD,QAAb,CAAsBzD,MAAtB,CAAD,CADH;AAENvzE,iBAAO,EAAE,CAAC,SAAA+zE,YAAD;AAFH,S;AAI+B,Q;;;;;;;;;;;;;;;;;;;;;;ACfzC;AAAA;AAAA;;AAMA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAUA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACbC;;;;QDuBY+C,+B;;;;;AAST,+CACY3kD,IADZ,EAEYC,OAFZ,EAGYK,SAHZ,EAIYwkD,cAJZ,EAKYv9D,KALZ,EAK0C;AAAA;;AAAA;;AAEtC;AANQ,iBAAAyY,IAAA,GAAAA,IAAA;AACA,iBAAAC,OAAA,GAAAA,OAAA;AACA,iBAAAK,SAAA,GAAAA,SAAA;AACA,iBAAAwkD,cAAA,GAAAA,cAAA;AACA,iBAAAv9D,KAAA,GAAAA,KAAA;AAbL,iBAAAw9D,gBAAA,GAAmB,0BAAAA,gBAAnB;AAEA,iBAAAC,SAAA,GAA0B;AAC7Bt6D,eAAK,EAAE,CAAC,OAAD,EAAU,SAAV,CADsB;AAE7B+oC,qBAAW,EAAE;AAAE32C,mBAAO,EAAE;AAAX;AAFgB,SAA1B;AAIP,iBAAAmoE,YAAA,GAA2B,EAA3B;AAO0C;AAKzC;;;;mCAEc;AAAA;;AACX;AACA,eAAKH,cAAL,CAAoB9iC,eAApB,GAAsC,IAAtC;AAEA,eAAKijC,YAAL,GAAoB,KAAKjlD,IAAL,CAAUra,SAA9B;AAEA,eAAK/W,YAAL,CAAkB,YAAlB,EAAgC,KAAK2Y,KAAL,CAAW5F,IAAX,CAC5B,QAAA4H,MAAA,CAAO,cAAA6O,gBAAP,CAD4B,EAE5B,YAAAq9B,oBAAA,EAF4B,EAG5B3mD,SAH4B,CAGlB,UAACkQ,IAAD,EAAuC;AACjD,gBAAIA,IAAI,KAAIA,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAExN,MAAV,CAAR,EAA0B;AACtBsZ,0BAAY,CAAC+xB,OAAb,CAAqB,gBAArB,YAA0C79B,IAAI,CAACxN,MAAL,CAAYgJ,EAAtD;AACAsQ,0BAAY,CAAC+xB,OAAb,CAAqB,oBAArB,YAA8C79B,IAAI,CAACvJ,QAAnD;;AACF,kBAAM0e,QAAQ,GAAG,QAAI,CAAC6L,IAAL,CAAUra,SAAV,CAAoBtR,IAApB,CACd,UAACgU,CAAD,EAAO;AAAD;;AAAC,uBAAAA,CAAC,CAACvF,EAAF,MAAI,kBAAK9D,IAAI,CAACkL,QAAL,CAAczS,MAAd,CAAqB,UAAAC,EAAE;AAAA,yBAAIA,EAAE,CAACyf,UAAP;AAAA,iBAAvB,EAA0C,CAA1C,CAAL,MAAiD,IAAjD,IAAiD,aAAjD,GAAiD,MAAjD,GAAiD,GAAEpB,IAAnD,MAAuD,IAAvD,IAAuD,aAAvD,GAAuD,MAAvD,GAAuD,GAAE5B,QAAzD,MAAiE,IAAjE,IAAiE,aAAjE,GAAiE,MAAjE,GAAiE,GAAErR,EAAvE;AAAyE,eADlE,CAAjB;;AAGE,kBAAGqR,QAAH,EAAa;AACT,wBAAI,CAAC6L,IAAL,CAAU7L,QAAV,GAAqBA,QAArB;AACH;AAEJ;AACF,WAf6B,CAAhC;;AAiBE,eAAK6L,IAAL,CAAU5W,WAAV,CAAsBzH,IAAtB,CAA2B,YAAAyG,KAAA,CAAM,UAACC,CAAD;AAAA,mBAAOA,CAAP;AAAA,WAAN,CAA3B,EAA4CvZ,SAA5C,CAAsD,YAAM;AAC1D,oBAAI,CAACm2E,YAAL,GAAoB,QAAI,CAACjlD,IAAL,CAAUra,SAA9B;AACD,WAFD;AAKL;;;yCAEuB,CAAE;;;sCAER;AACb;AACA,eAAKm/D,cAAL,CAAoB9iC,eAApB,GAAsC,KAAtC;AACJ;;;;MAxDgD,OAAA10C,a;;AANrD;;;uBAMaq3E,+B,EAA+B,4C,EAAA,sC,EAAA,wC,EAAA,wC,EAAA,8B;AAAA,K;;;YAA/BA,+B;AAA+B,+C;AAAA,+C;AAAA,c;AAAA,a;AAAA,gJ;AAAA;AAAA;AC9B5C;AACC;AACC;AACC;AAAA,mBAAU,IAAAO,cAAA,EAAV;AAA0B,WAA1B;AAED;AACD;AACA;AAED;;;;AAPmB;AAAA,4DAA+B,MAA/B,EAA+B,aAA/B;AAKF;AAAA;;;;;;;;;;2BDuBJP,+B,EAA+B;cAN3C,OAAAhwB,SAM2C;eANjC;AACPlnD,kBAAQ,EAAE,0BADH;AAEPmnD,qBAAW,EAAE,iCAFN;AAGPC,mBAAS,EAAE,CAAC,mCAAD,CAHJ;AAIPga,uBAAa,EAAE,OAAAC,iBAAA,CAAkB34C;AAJ1B,S;AAMiC,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AE9B5C;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAGA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;;;;;AAEa,YAAAgvD,yBAAA,GAA4B,CACrC,qCAAAR,+BADqC,EAErC,2BAAAS,sBAFqC,EAGrC,iCAAApB,2BAHqC,EAIrC,qBAAAqB,wBAJqC,EAKrC,kBAAAC,qBALqC,EAMrC,kBAAAC,0BANqC,EAOrC,0BAAAC,oBAPqC,CAA5B;AAUA,YAAAC,oBAAA,GAAuB,CAChC,SAAA35E,YADgC,EACnB,QAAAgtD,WADmB,EAEhC,QAAAC,mBAFgC,EAGhC,gBAAA0qB,mBAHgC,EAIhC,KAAAzqB,QAJgC,CAAvB;;QAkBA0sB,qB;;;;AARb;;YAQaA;;;;yBAAAA,qB;AAAqB,O;AAAA,6CALvB,QAAAD,oBAKuB,IAJ1B,kCAAAb,4BAI0B;;;;+EAArBc,qB,EAAqB;AAAA,uBA3B9B,qCAAAf,+BA2B8B,EA1B9B,2BAAAS,sBA0B8B,EAzB9B,iCAAApB,2BAyB8B,EAxB9B,qBAAAqB,wBAwB8B,EAvB9B,kBAAAC,qBAuB8B,EAtB9B,kBAAAC,0BAsB8B,EArB9B,0BAAAC,oBAqB8B;AArBV,kBAIpB,SAAA15E,YAJoB,EAIP,QAAAgtD,WAJO,EAKpB,QAAAC,mBALoB,EAMpB,gBAAA0qB,mBANoB,EAOpB,KAAAzqB,QAPoB,EAiBhB,kCAAA4rB,4BAjBgB;AAqBU,O;AAJE,K;;;;;2BAIvBc,qB,EAAqB;cARjC,OAAA35E,QAQiC;eARxB;AACN6B,sBAAY,qBAAM,QAAAu3E,yBAAN,CADN;AAENn5E,iBAAO,+BACA,QAAAy5E,oBADA,IAEH,kCAAAb,4BAFG;AAFD,S;AAQwB,Q;;;;;;;;;;;;;;;;;;;;;;AC/ClC;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACEM;AACE;AACE;AAAU;AAAkB;AAC5B;AAAM;AAAqB;AAC7B;AACA;AAA+C;AAAA;AAAA;AAAA;AAAA;AAA0C;AAC3F;;;;;;;;AAL0B;AAAA,0DAAoC,SAApC,EAAoC,wEAApC;AACZ;AAAA;AACJ;AAAA;AAEa;AAAA;;;;;;;;AAGvB;AACE;AAAiD;AAAA;AAAA;AAAA;AAAA;AAAA;AAC/C;AAAU;AAAkB;AAC5B;AAAM;AAAqB;AAC7B;AACF;;;;;AAJwB;AAAA;AACV;AAAA;AACJ;AAAA;;;;;;AAbZ;AAEE;AAQA;AAMF;;;;;AAdgB;AAAA;AAQA;AAAA;;;;QDDPY,oB;AAOX,oCAAmBG,MAAnB,EAAmC;AAAA;;AAAhB,aAAAA,MAAA,GAAAA,MAAA;AAFF,aAAAC,aAAA,GAAgB,IAAI,OAAA3zB,YAAJ,EAAhB;AAGhB;;;;mCAEU,CACV;;;wCAEsB4zB,I,EAAM;AAC3B,eAAKD,aAAL,CAAmBryB,IAAnB,CAAwBsyB,IAAxB;AACD;;;;;;AApBH;;;uBAKaL,oB,EAAoB,+B;AAAA,K;;;YAApBA,oB;AAAoB,oC;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;ACVjC;AACI;AAiBF;;;;AAlB6B;AACb;AAAA;;;oGDSLA,oB,EAAoB,a;AAAA;;;;;2BAApBA,oB,EAAoB;cALhC,OAAA7wB,SAKgC;eALtB;AACTlnD,kBAAQ,EAAE,eADD;AAETmnD,qBAAW,EAAE,gCAFJ;AAGTC,mBAAS,EAAE,CAAC,gCAAD;AAHF,S;AAKsB,Q;;;;;;gBAC9B,OAAA1kD;;;gBACA,OAAAA;;;gBACA,OAAAioD,S;iBAAU,W,EAAa;AAAC,sBAAQ;AAAT,W;;;gBAEvB,OAAAtD;;;;;;;;;;;;;;;;;;;;;;;;AEfH;AAAA;AAAA;;AAWA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAGA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAGA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACDgB;;;;;AAEI;;;;;;AAOJ;;;;;;AAVJ;AACI;AASA;AACJ;;;;;AATQ;AAAA;AAQS;AAAA;;;;;;AAUjB;AAEI;AAAmB;AAAgB;AACnC;AACI;AACJ;AACJ;;;;;AAHuB;AAAA;AACf;AAAA;;;;;;AAcJ;AACI;AACI;AACJ;AACJ;;;;;AAFQ;AAAA;;;;;;AAGR;AAEI;AAAmB;AAA+D;AACtF;;;;;AAFI;AACmB;AAAA;;;;;;AAEvB;AACI;AAAmB;AAAO;AAC9B;;;;;;AAtBJ;AACI;AACI;AAAuD;AAAmB;AAC9E;AACA;AACI;AACI;AAGJ;AACJ;AACA;AAKA;AAIA;AAGJ;;;;;AArB2B;AAAA;AAAoC;AAAA;AAInD;AAAA;AAKW;AAAA;AAKA;AAAA;AAIA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;AAO/B;AAWI;AAMQ;AACJ;AACR;;;;;AAdI,6DAAsF,MAAtF,EAAsF,iBAAtF,EAAsF,UAAtF,EAAsF,gBAAtF;AAOA;AAAA,8IAA6G,MAA7G,EAA6G,eAA7G,EAA6G,gBAA7G;AAKkB;AAAA;;;;;;AA9F1B;AAWI;AAKA;AAKI;AACI;AAAkB;AAA0C;AAC5D;AAYJ;AACA;AACI;AACI;AAAmB;AAAW;AAC9B;AACI;AACJ;AACJ;AACA;AAOA;AAyBJ;AACJ;AACA;AAoBJ;;;;;AA5FI,gDAAuB,MAAvB,EAAuB,iBAAvB,EAAuB,OAAvB,EAAuB,2CAAvB,EAAuB,QAAvB,EAAuB,8DAAvB;AADA;AAFA;AAUI;AAAA;AACA,6DAAiC,QAAjC,EAAiC,gCAAjC;AAIA;AAAA;AACA;AAIsB;AAAA;AACG;AAAA;AAgBE;AAAA;AACf;AAAA;AAIoB;AAAA;AAMvB;AAAA;AA2BJ;AAAA;;;;QD1BAywB,0B;;;;;AAiCT,0CACYx4D,QADZ,EAEWxF,KAFX,EAGYuqC,OAHZ,EAIYD,OAJZ,EAKYmD,KALZ,EAMYhD,kBANZ,EAMkD;AAAA;;AAAA;;AAE9C;AAPQ,iBAAAjlC,QAAA,GAAAA,QAAA;AACD,iBAAAxF,KAAA,GAAAA,KAAA;AACC,iBAAAuqC,OAAA,GAAAA,OAAA;AACA,iBAAAD,OAAA,GAAAA,OAAA;AACA,iBAAAmD,KAAA,GAAAA,KAAA;AACA,iBAAAhD,kBAAA,GAAAA,kBAAA;AApCZ;;AACgB,iBAAAxgD,MAAA,GAAiB,UAAA8I,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAjB;AAShB;;AACiB,iBAAAquD,QAAA,GAAW,IAAI,OAAA7M,YAAJ,EAAX;AAyBiC;AAGjD;;;;mCAEO;AAAA;;AACJ,eAAKrjD,YAAL,CAAkB,aAAlB,EAAiC,KAAK2Y,KAAL,CAAWgC,MAAX,CAAkB,OAAAC,iBAAlB,EAC5B7H,IAD4B,CACvB,YAAA+H,IAAA,CAAK,CAAL,CADuB,EAE5B5a,SAF4B,CAElB,UAAC2a,IAAD,EAA4B;AACvC;AACA,oBAAI,CAAC0J,WAAL,GAAmB,IAAI,cAAAgS,IAAJ,CAAS1b,IAAT,CAAnB;AACC,WAL4B,CAAjC;AAQA,eAAK4oC,QAAL,GAAgB,KAAK7sC,OAAL,CAAa8P,MAAb,KAAwB,cAAAqV,cAAA,CAAe0nB,QAAvD;AACA,eAAKnuB,QAAL,GAAgB,KAAK1e,OAAL,CAAa8P,MAAb,KAAwB,cAAAqV,cAAA,CAAezG,QAAvD,CAVI,CAWJ;;AAXI,+BAY2C,KAAK1e,OAZhD;AAAA,cAYGkgB,OAZH,kBAYGA,OAZH;AAAA,cAYYD,SAZZ,kBAYYA,SAZZ;AAAA,cAYuBc,gBAZvB,kBAYuBA,gBAZvB;AAaJ,eAAK+rB,cAAL,GAAsB;AAClBC,oBAAQ,EAAE;AACNz1C,qBAAO,EAAE4oB,OAAO,KAAMA,OAAO,CAACzjB,KAAR,KAAkBwjB,SAAS,CAACxjB,KAA5B,IAAsCyjB,OAAO,CAACzjB,KAAR,KAAkBwjB,SAAS,CAACxjB,KAA5B,IAAqCskB,gBAAgB,KAAK,IAA1D,IAAkEd,SAAS,CAACxjB,KAAV,KAAmBskB,gBAAgB,CAAC,OAAD,CAAjJ,CADV;AAENxyB,mBAAK,EAAG2xB,OAAO,CAACzjB,KAAR,KAAkBwjB,SAAS,CAACxjB,KAA5B,IAAqCskB,gBAAgB,KAAK,IAA1D,IAAkEd,SAAS,CAACxjB,KAAV,KAAmBskB,gBAAgB,CAAC,OAAD,CAAtG,GAAoHA,gBAAgB,CAAC,MAAD,CAAhB,IAA4BA,gBAAgB,CAAC,OAAD,CAAhK,GAA8K,CAAAb,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAE94B,IAAT,KAAiB84B,OAAO,CAACzjB;AAFxM;AADQ,WAAtB;AAMH;;;oCA2CkB1T,O,EAAwB;AACvC;AACA,cAAIA,OAAO,CAACiX,OAAR,IAAmBjX,OAAO,CAACu3E,OAA3B,IAAsCv3E,OAAO,CAACiD,MAAlD,EAA0D;AACtD,iBAAKu0E,iBAAL;AACA,iBAAK1zB,QAAL,GAAgB,KAAK7sC,OAAL,CAAa8P,MAAb,KAAwB,cAAAqV,cAAA,CAAe0nB,QAAvD;AACA,iBAAKnuB,QAAL,GAAgB,KAAK1e,OAAL,CAAa8P,MAAb,KAAwB,cAAAqV,cAAA,CAAezG,QAAvD;AACH;AACJ;AAED;;;;mCACkBsG,K,EAAsB;AACpC,cAAMmQ,eAAe,GAAG,KAAKn1B,OAAL,CAAa6sB,SAAb,EAAxB;AACAvnB,sBAAY,CAAC+xB,OAAb,CAAqB,sBAArB,EAA6CzjC,IAAI,CAACE,SAAL,CAAekxB,KAAK,CAACvd,MAAN,EAAf,CAA7C;AACAnC,sBAAY,CAAC+xB,OAAb,CAAqB,wBAArB,EAA+CzjC,IAAI,CAACE,SAAL,CAAeqhC,eAAf,CAA/C;AACA7vB,sBAAY,CAAC+xB,OAAb,CAAqB,gBAArB,YAA0C,KAAKr3B,OAAL,CAAa/J,WAAb,CAAyBjB,EAAnE;AACAsQ,sBAAY,CAAC+xB,OAAb,CAAqB,oBAArB,YAA8C,KAAKr3B,OAAL,CAAa/J,WAAb,CAAyB6c,WAAvE;AACH;AAED;;;;;;kCAGiBkS,K,EAAsB;AACnC;AACA,cAAI,KAAKhlB,OAAL,IAAgB,KAAKA,OAAL,CAAaiiB,QAAjC,EAA2C;AACvC;AACA,gBAAI3c,YAAJ,EAAkB;AACd,mBAAKk7D,UAAL,CAAgBx7C,KAAhB;AACH;;AACD,iBAAKqnB,OAAL,CAAapL,QAAb,CAAsB,CAAC,WAAD,EAAc,QAAd,CAAtB,EAA+C;AAC3CgN,yBAAW,EAAE;AAAEjuC,uBAAO,EAAE,KAAKA,OAAL,CAAa1C,EAAxB;AAA4BmjE,oBAAI,EAAEz7C,KAAK,CAAC1nB;AAAxC;AAD8B,aAA/C;AAGH;AACJ;AAED;;;;4CAC4B;AACxB;AACA,cAAI,KAAK0C,OAAT,EAAkB;AACd,gBAAMsgE,OAAO,GAAG,KAAKA,OAAL,IAAgB;AAAE32E,mBAAK,EAAE,CAAT;AAAYknC,mBAAK,EAAE;AAAnB,aAAhC;AACA,gBAAM6vC,UAAU,GAAG,KAAK10E,MAAL,CAAY+I,YAAZ,CAAyB,KAAzB,CAAnB;AACA,gBAAM1J,IAAI,GAAG,KAAK2U,OAAL,CAAa/J,WAAb,CAAyBlB,YAAzB,CAAsC,QAAtC,CAAb;AACA,gBAAM2jB,GAAG,GAAG,KAAK1Y,OAAL,CAAa9J,SAAb,CAAuBnB,YAAvB,CAAoC,QAApC,CAAZ;AACA,gBAAM4rE,iBAAiB,GAAG,CAACt1E,IAAI,CAACu+B,UAAL,CAAgB82C,UAAhB,EAA4B,KAA5B,CAA3B;;AACA,gBAAIhoD,GAAG,CAACgM,YAAJ,CAAiBg8C,UAAjB,EAA6B,KAA7B,CAAJ,EAAyC;AAAE;AACvC,mBAAKtuB,GAAL,GAAW,CAAC,GAAZ;AACA,mBAAKnsD,MAAL,GAAc,CAAd;AACA;AACH,aAVa,CAYd;AACA;AACA;;;AAEA,gBAAMsF,KAAK,GAAGo1E,iBAAiB,GAAG,CAAH,GAAOh1E,IAAI,CAAC04B,GAAL,CAAS,CAACh5B,IAAI,CAACi5B,QAAL,CAAco8C,UAAd,EAA0B,OAA1B,EAAmC,OAAnC,EAA4CE,OAA5C,CAAoD,CAApD,CAAV,CAAtC;AACA,gBAAMx0E,QAAQ,GAAGT,IAAI,CAACq+B,GAAL,CACb,KAAKhqB,OAAL,CAAa5T,QADA,EAEbT,IAAI,CAAC04B,GAAL,CAASq8C,UAAU,CAACp8C,QAAX,CAAoBj5B,IAAI,CAACa,QAAL,CAAc;AAAEJ,qBAAO,EAAE,KAAKkU,OAAL,CAAa5T;AAAxB,aAAd,CAApB,EAAuE,SAAvE,CAAT,CAFa,CAAjB;AAIA,iBAAKgmD,GAAL,GAAWzmD,IAAI,CAACmD,GAAL,CAAS,CAAT,EAAavD,KAAK,GAAG,EAAT,GAAe,GAA3B,CAAX;AACA,iBAAKtF,MAAL,GAAc0F,IAAI,CAACq+B,GAAL,CACV,MAAM,KAAKooB,GADD,EAEV,KAAK/e,KAAL,GAAajnC,QAAQ,GAAG,EAAxB,GAA8BA,QAAQ,GAAG,EAAX,GAAgB,EAAjB,GAAuB,GAF1C,CAAd;AAIA,iBAAKktD,QAAL,CAAcvL,IAAd,CAAmB;AAAEqE,iBAAG,EAAE,KAAKA,GAAZ;AAAiBnsD,oBAAM,EAAGmG,QAAQ,GAAG,EAAX,GAAgB,EAAjB,GAAuB;AAAhD,aAAnB;AACA,iBAAKiiD,KAAL,GAAa1iD,IAAI,CAACq+B,GAAL,CAAS,GAAT,EAAc,MAAMs2C,OAAO,CAACzvC,KAAd,GAAsB,CAApC,CAAb;AACA,iBAAKyhB,IAAL,GAAY3mD,IAAI,CAACq+B,GAAL,CAAS,MAAM,KAAKqkB,KAApB,EAA2B,KAAKA,KAAL,GAAaiyB,OAAO,CAAC32E,KAArB,GAA6B,IAAI22E,OAAO,CAAC32E,KAApE,CAAZ;AACA,iBAAKk3E,YAAL,GACI,CAAC,KAAK7gE,OAAL,CAAa+F,KAAb,CAAmB,KAAKyI,KAAL,CAAW/R,KAA9B,IACM,KAAKuD,OAAL,CAAa+F,KAAb,CAAmB,KAAKyI,KAAL,CAAW/R,KAA9B,IAAuC,EAAxC,GAA8CrQ,QADnD,GAEK,CAAC,GAFP,IAEc,GAHlB;AAIA,iBAAK00E,eAAL,GACI,CAAC,KAAK9gE,OAAL,CAAaoZ,SAAb,CAAuB,KAAK5K,KAAL,CAAW/R,KAAlC,IACM,KAAKuD,OAAL,CAAaoZ,SAAb,CAAuB,KAAK5K,KAAL,CAAW/R,KAAlC,IAA2C,EAA5C,GAAkDrQ,QADvD,GAEK,CAAC,GAFP,IAEc,GAHlB;;AAIA,gBAAI,KAAK4T,OAAL,CAAa6hB,OAAjB,EAA0B;AACtB,mBAAKuwB,GAAL,GAAW,CAAX;AACA,mBAAKnsD,MAAL,GAAc,GAAd;AACH;AACJ;AACJ;;;;AASD;kCACc;AACV,iBAAO,CAAC,SAAD,EAAW,aAAX,EAAyB,mBAAzB,EAA8C,MAA9C,EAAsDkf,QAAtD,CAA+D,KAAKnF,OAAL,CAAa+gE,oBAA5E,CAAP;AACH;;;4BApIkB;AACf,iBAAO,KAAK/gE,OAAL,CAAauZ,OAAb,CAAqByW,MAArB,CAA4B,CAA5B,EAA+B,CAA/B,CAAP;AACH;AAED;;;;4BACe;AACX,cAAMgxC,SAAS,GAAG,KAAKrzD,WAAL,CAAiBlR,KAAnC;AADW,+BAEoB,KAAKuD,OAFzB;AAAA,cAEHkgB,OAFG,kBAEHA,OAFG;AAAA,cAEMD,SAFN,kBAEMA,SAFN;AAGX,cAAG+gD,SAAS,KAAK9gD,OAAO,CAACzjB,KAAtB,IAA+BukE,SAAS,KAAK/gD,SAAS,CAACxjB,KAA1D,EACI,OAAO,KAAKuD,OAAL,CAAa2e,OAAb,EAAP,CADJ,KAGI,OAAO,gBAAP;AACP;AAED;;;;4BACiB;AACb;AACA,iBAAO,KAAK3e,OAAL,CAAaihE,WAApB;AACH;AAED;;;;4BACmB;AACf,cAAM/4C,QAAQ,GAAG,KAAKloB,OAAL,CAAaygB,kBAA9B;AACA,iBAAO,KAAKjS,KAAL,GAAa0Z,QAAQ,CAAC,KAAK1Z,KAAL,CAAW/R,KAAZ,CAAR,IAA8B,CAA3C,GAA+C,CAAtD;AACH;AAED;;;;4BACuB;AACnB,iBAAO,CAAC,CAAC,KAAKuoB,KAAd;AACH;;;4BAEe;AAAA;;AACZ,iBAAO,KAAKhlB,OAAL,CAAaiiB,QAAb,CAAsBpzB,IAAtB,CAA2B,UAACm2B,KAAD;AAAA,mBAAWA,KAAK,CAACC,WAAN,KAAsB,QAAI,CAACzW,KAAL,CAAW/R,KAA5C;AAAA,WAA3B,CAAP;AACH;AAED;;;;4BACiB;AACb,cAAMuD,OAAO,GAAG,KAAKuH,QAAL,CAAcxG,GAAd,CAAkB,4BAAlB,CAAhB;;AACA,iBAAO,CAACf,OAAD,IAAYA,OAAO,CAAC1C,EAAR,KAAe,KAAK0C,OAAL,CAAa1C,EAA/C;AACH;;;4BAmFqB;AAClB,cAAM0jE,SAAS,GAAG,KAAKrzD,WAAL,CAAiBlR,KAAnC;AACA,cAAMykE,QAAQ,GAAG,KAAKvzD,WAAL,CAAiBvmB,IAAlC;AAFkB,+BAGa,KAAK4Y,OAHlB;AAAA,cAGVkgB,OAHU,kBAGVA,OAHU;AAAA,cAGDD,SAHC,kBAGDA,SAHC;AAIxB,kCAAiB5oB,kBAAkB,CAAC4oB,SAAS,CAACxjB,KAAX,CAAnC,iBAA2DpF,kBAAkB,CAAC2pE,SAAD,CAA7E,wEAAsJ3pE,kBAAkB,CAAC,KAAKmX,KAAL,CAAWwuB,WAAZ,CAAxK;AACA;;;;MAhM8C,OAAAl1C,a;;AANhD;;;uBAMai4E,0B,EAA0B,2C,EAAA,8B,EAAA,kC,EAAA,+B,EAAA,0C,EAAA,2C;AAAA,K;;;YAA1BA,0B;AAA0B,2C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA,O;AAAA,wE;AAAA,c;AAAA,a;AAAA,u9B;AAAA;AAAA;ACnDvC;;;;AAGI;;;;;;;;;;2BDgDSA,0B,EAA0B;cANtC,OAAA5wB,SAMsC;eAN5B;AACPlnD,kBAAQ,EAAE,sBADH;AAEPmnD,qBAAW,EAAE,wBAFN;AAGPC,mBAAS,EAAE,CAAC,wBAAD,CAHJ;AAIP4B,yBAAe,EAAE,OAAAC,uBAAA,CAAwBC;AAJlC,S;AAM4B,Q;;;;;;;;;;;;;;;;gBAElC,OAAAxmD;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAA2kD;;;;;;;;;;;;;;;;;;;;;;;;AEjEL;AAAA;AAAA;;AAaA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAGA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjBQ;AACI;AACJ;;;;;;AAsBA;AACI;AACI;AAKJ;AACJ;;;;;;AALY;AAAA,qCAAc,OAAd,EAAc,YAAd,EAAc,SAAd,EAAc,OAAd;;;;;;AAMZ;;;;;;AACI,mIAAsF,QAAtF,EAAsF,wFAAtF;;;;;;;;AA5BR;AAII;AAAA;AAAA;AAAA;AAAA,WAA6B,cAA7B,EAA6B;AAAA;AAAA;AAAA;AAAA,SAA7B,EAA6B,iBAA7B,EAA6B;AAAA;AAAA;AAAA;AAAA,SAA7B;AAMA;AAMI;AAAA;AAAA;AAAA;AAAA,sFAA8D,EAA9D;AAAgE,SAAhE;AACV;AACM;AASA;AAGJ;;;;;;AA7BI;AAMA,iEAAe,iBAAf,EAAe,wEAAf;AAII;AAAA,6CAAe,QAAf,EAAe,aAAf,EAAe,SAAf,EAAe,OAAf,EAAe,SAAf,EAAe,sEAAf,EAAe,SAAf,EAAe,kEAAf;;;;;;;;;;;;;ODCZ;;;QAOawwB,qB;;;;;AA8DT,qCACYv4D,QADZ,EAEYkT,OAFZ,EAGY2xB,sBAHZ,EAIYtxB,SAJZ,EAKYwxB,OALZ,EAMY60B,GANZ,EAOY3mD,IAPZ,EAOqC;AAAA;;AAAA;;AAEjC;AARQ,iBAAAjT,QAAA,GAAAA,QAAA;AACA,iBAAAkT,OAAA,GAAAA,OAAA;AACA,iBAAA2xB,sBAAA,GAAAA,sBAAA;AACA,iBAAAtxB,SAAA,GAAAA,SAAA;AACA,iBAAAwxB,OAAA,GAAAA,OAAA;AACA,iBAAA60B,GAAA,GAAAA,GAAA;AACA,iBAAA3mD,IAAA,GAAAA,IAAA;AA1DZ;;AACgB,iBAAA4mD,MAAA,GAA2B,EAA3B;AAMA,iBAAAC,iBAAA,GAAwC,EAAxC;AAChB;;AACiB,iBAAAC,MAAA,GAAS,IAAI,OAAA70B,YAAJ,EAAT;AACjB;;AACiB,iBAAA80B,QAAA,GAAW,IAAI,OAAA90B,YAAJ,EAAX;AACjB;;AACiB,iBAAA+0B,MAAA,GAAS,IAAI,OAAA/0B,YAAJ,EAAT;AACjB;;AACO,iBAAAg1B,UAAA,GAAwB,EAAxB;AACP;;AACO,iBAAAC,eAAA,GAA0C,EAA1C;AACP;;AACO,iBAAAC,aAAA,GAA0D,EAA1D;AASP;;AACO,iBAAAr9D,OAAA,GAA4B,EAA5B;AACP;;AACO,iBAAAE,QAAA,GAA4B,EAA5B;AAKP;;AACO,iBAAAo9D,WAAA,GAA0B,SAAKC,kBAAL,EAA1B;AA0BP;;AACQ,iBAAAz6D,MAAA,GAAqB,EAArB;AAN6B;AAGpC;AAtBD;;;;;6CAC0B;AACtB,cAAMqzC,MAAM,GAAe,EAA3B;AACA,cAAMpvD,IAAI,GAAG,UAAAyJ,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB8J,YAApB,CAAiC,MAAjC,CAAb;;AACA,eAAK,IAAIrL,IAAC,GAAG,CAAb,EAAgBA,IAAC,GAAG,EAApB,EAAwBA,IAAC,EAAzB,EAA6B;AACzB+wD,kBAAM,CAACvnD,IAAP,CAAY;AACRoK,gBAAE,EAAEjS,IAAI,CAACY,QAAL,CAAc;AAAE0B,oBAAI,EAAEjE;AAAR,eAAd,EAA2BiD,UAA3B,CAAsC,OAAtC,CADI;AAERvF,kBAAI,EAAEiE,IAAI,CAACY,QAAL,CAAc;AAAE0B,oBAAI,EAAEjE;AAAR,eAAd,EAA2BiD,UAA3B,CAAsC,OAAtC,EAA+CmJ,iBAA/C;AAFE,aAAZ;AAIH;;AACD,iBAAO2kD,MAAP;AACH;;;mCAgBc;AAAA;;AACX,eAAKrzC,MAAL,GAAc,KAAK06D,YAAL,EAAd;;AACA,eAAKv6D,QAAL,CAAc3D,WAAd,CAA0BzH,IAA1B,CAA+B,YAAAyG,KAAA,CAAM,UAACC,CAAD;AAAA,mBAAOA,CAAP;AAAA,WAAN,CAA/B,EAAgDvZ,SAAhD,CAA0D,YAAM;AAC5D,oBAAI,CAACkb,QAAL,GAAgB,QAAI,CAAC+C,QAAL,CAAcd,OAAd,CAAsB,cAAtB,KAAyC,EAAzD,CAD4D,CAE5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,oBAAI,CAACrd,YAAL,CACI,UADJ,EAEI,QAAI,CAACgjD,sBAAL,CAA4B/wB,QAA5B,CAAqC/xB,SAArC,CAA+C,UAACC,IAAD,EAAU;AACrD,sBAAI,CAACk4E,UAAL,sBAAsBl4E,IAAtB;AACA,sBAAI,CAAC6d,MAAL,sBAAkB,QAAI,CAAC06D,YAAL,EAAlB;;AACA,sBAAI,CAACX,GAAL,CAAStwB,aAAT;AACH,aAJD,CAFJ;;AAQA,oBAAI,CAACkxB,WAAL;AACH,WA1BD;AA2BH;;;oCAEkBh5E,O,EAAsB;AAAA;;AACrC;AACA,cAAIA,OAAO,CAACkB,MAAZ,EAAoB;AAChB,iBAAK83E,WAAL;AACH;;AACD,cAAIh5E,OAAO,CAACylB,KAAZ,EAAmB;AACf,iBAAKizD,UAAL,sBAAsB,KAAKA,UAA3B;AACA,iBAAKz3E,OAAL,CAAa,SAAb,EAAwB;AAAA,qBAAM,QAAI,CAAC+3E,WAAL,EAAN;AAAA,aAAxB,EAAkD,GAAlD;AACH;AACD;;;AACA,cAAIh5E,OAAO,CAACi5E,WAAZ,EAAyB;AACrB,iBAAKh4E,OAAL,CAAa,iBAAb,EAAgC;AAAA,qBAAM,QAAI,CAACi4E,iBAAL,EAAN;AAAA,aAAhC,EAAgE,IAAhE;AACH;AACJ,S,CAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;uCAEoB;AAAA;;AAChB,cAAI,CAAC,KAAKzzD,KAAV,EAAiB;AACb,mBAAO,EAAP;AACH;;AAED,iBAAO,KAAKizD,UAAL,CAAgBxvE,MAAhB,CAAuB,UAAC8G,KAAD,EAAW;AACrC;AACA,gBAAI,QAAI,CAACmpE,cAAL,IAAuB,QAAI,CAACA,cAAL,KAAwBnpE,KAAK,CAACwgB,OAAzD,EAAkE;AAC9D,sBAAI,CAACjV,OAAL,CAAavL,KAAK,CAACuE,EAAnB,IAAyB,IAAzB;AACH;;AAED,gBAAM6kE,iBAAiB,GAAGppE,KAAK,CAACoX,YAAN,IAAsBpX,KAAK,CAACugB,eAAN,KAA0B,QAA1E;AACA,gBAAM8oD,gBAAgB,GAAGrpE,KAAK,CAACqlB,WAAN,CAAkBtQ,IAAlB,CAAuB,UAAAuQ,IAAI;AAAA,qBAAIA,IAAI,CAAC5hB,KAAL,KAAe,QAAI,CAAC+R,KAAL,CAAW/R,KAA9B;AAAA,aAA3B,CAAzB,CAPqC,CASrC;;AACA,gBAAM4lE,4BAA4B,GAAGtpE,KAAK,CAACqlB,WAAN,CAAkBtQ,IAAlB,CAAuB,UAAAuQ,IAAI,EAAI;AAChE,qBAAOtlB,KAAK,CAACgN,KAAN,CAAYsY,IAAI,CAAC5hB,KAAjB,KAA2B1D,KAAK,CAACqgB,SAAN,CAAgBiF,IAAI,CAAC5hB,KAArB,CAAlC;AACH,aAFoC,CAArC;AAIA,mBAAO,CAAC0lE,iBAAD,IAAsBC,gBAAtB,KAA2C,CAAC,QAAI,CAACE,aAAN,IAAuBD,4BAAlE,CAAP;AACH,WAfM,EAeJnxE,GAfI,CAeA,UAAA6H,KAAK;AAAA,mBAAI,IAAI,cAAAiX,OAAJ,CAAY,MAAD,OAAC,CAAD,EAAC,EAAIjX,KAAK,CAAC0O,MAAN,EAAJ,CAAZ,CAAJ;AAAA,WAfL,CAAP;AAgBH;AAED;;AACA;;;;;;;;kCAKiB9d,K,EAAeoK,I,EAAe;AAC3C,iBAAOA,IAAI,CAACuJ,EAAL,IAAW3T,KAAlB;AACH;AAED;;;;;;4CAG4B;AAAA;;AACxB,cAAMyd,MAAM,GAAG,KAAKA,MAAL,CAAY7T,IAAZ,CACX,UAACC,CAAD,EAAIC,CAAJ;AAAA,mBACID,CAAC,CAACyC,WAAF,CAAcjB,EAAd,GAAmBvB,CAAC,CAACwC,WAAF,CAAcjB,EAAjC,IACAxB,CAAC,CAACpH,QAAF,GAAaqH,CAAC,CAACrH,QADf,IAEA,CAACoH,CAAC,CAAC2kB,KAAF,IAAW,EAAZ,EAAgBzkB,aAAhB,CAA8BD,CAAC,CAAC0kB,KAAF,IAAW,EAAzC,CAHJ;AAAA,WADW,CAAf;AAMA/Q,gBAAM,CAAC3d,OAAP,CAAe,UAACC,CAAD;AAAA,mBAAQ,QAAI,CAACg4E,eAAL,CAAqBh4E,CAAC,CAAC4T,EAAvB,IAA6B;AAAE3T,mBAAK,EAAE,CAAT;AAAYknC,mBAAK,EAAE;AAAnB,aAArC;AAAA,WAAf;;AAPwB,uDAQNzpB,MARM;AAAA;;AAAA;AAAA;AAAA,kBAQbwS,GARa;AASpB,kBAAMwM,SAAS,GAAGxM,GAAG,CAAC3jB,WAAJ,CAAgBlB,YAAhB,CAA6B,QAA7B,CAAlB;AACA,kBAAMsxB,OAAO,GAAGzM,GAAG,CAAC1jB,SAAJ,CAAcnB,YAAd,CAA2B,QAA3B,CAAhB;AACA,kBAAI3B,KAAK,GAAG,CAAZ;AACA,kBAAIzJ,KAAK,GAAG,CAAZ;AACA,kBAAM44E,UAAU,GAAc,EAA9B;;AAboB,2DAcFn7D,MAdE;AAAA;;AAAA;AAAA;AAAA,sBAcTo7D,GAdS;;AAehB;AACA,sBAAI5oD,GAAG,CAACtc,EAAJ,KAAWklE,GAAG,CAACllE,EAAnB,EAAuB;AACnB,wBAAMmlE,SAAS,GAAGD,GAAG,CAACvsE,WAAJ,CAAgBlB,YAAhB,CAA6B,QAA7B,CAAlB;AACA,wBAAM2tE,OAAO,GAAGF,GAAG,CAACtsE,SAAJ,CAAcnB,YAAd,CAA2B,QAA3B,CAAhB;AACA;;AACA,wBACIqxB,SAAS,CAACwD,UAAV,CAAqB64C,SAArB,EAAgC,QAAhC,KACCr8C,SAAS,CAACzB,WAAV,CAAsB89C,SAAtB,KAAqCr8C,SAAS,CAAC1B,YAAV,CAAuBg+C,OAAvB,CADtC,IAEAr8C,OAAO,CAACuD,UAAR,CAAmB84C,OAAnB,EAA4B,QAA5B,CAFA,IAGCr8C,OAAO,CAAC1B,WAAR,CAAoB89C,SAApB,KAAkCp8C,OAAO,CAAC3B,YAAR,CAAqBg+C,OAArB,CAJvC,EAKE;AACEtvE,2BAAK;AACLmvE,gCAAU,CAACrvE,IAAX,CAAgB0mB,GAAhB;AACA;;AACA,0BACIxS,MAAM,CAAC6zB,SAAP,CAAiB,UAACvxC,CAAD;AAAA,+BAAOA,CAAC,CAAC4T,EAAF,KAASsc,GAAG,CAACtc,EAApB;AAAA,uBAAjB,IACA8J,MAAM,CAAC6zB,SAAP,CAAiB,UAACvxC,CAAD;AAAA,+BAAOA,CAAC,CAAC4T,EAAF,KAASklE,GAAG,CAACllE,EAApB;AAAA,uBAAjB,CAFJ,EAGE;AACE3T,6BAAK;AACR;AACJ;AACJ;AApCe;;AAcpB,0EAA0B;AAAA;AAuBzB;AArCmB;AAAA;AAAA;AAAA;AAAA;;AAsCpB,sBAAI,CAAC+3E,eAAL,CAAqB9nD,GAAG,CAACtc,EAAzB,IAA+B;AAAE3T,qBAAK,EAAEgC,IAAI,CAACmD,GAAL,CAAS,CAAT,EAAYnF,KAAZ,CAAT;AAA6BknC,qBAAK,EAAEz9B;AAApC,eAA/B;AAtCoB;;AAQxB,sEAA0B;AAAA;AA+BzB;AAvCuB;AAAA;AAAA;AAAA;AAAA;AAwC3B;AAED;;;;;;sCAGsB;AAClB;AACA,cAAI,KAAKqtE,IAAL,IAAa,KAAKA,IAAL,CAAUv3E,aAA3B,EAA0C;AACtC,gBAAMgJ,EAAE,GAAG,KAAKuuE,IAAL,CAAUv3E,aAArB;AACA,iBAAKy5E,OAAL,GACIzwE,EAAE,CAAC0wE,UAAH,GAAgB,KAAK34E,MAArB,IAA+B,CAAC,GAAhC,IACAiI,EAAE,CAAC0wE,UAAH,GAAgB,KAAK34E,MAArB,IAA+B2G,MAAM,CAAC2J,UAF1C;AAGA,iBAAK+mE,MAAL,CAAYvzB,IAAZ,CAAiB,KAAK40B,OAAtB;AACH;AACJ;AAED;;;;;;mCAGkB;AACd,eAAKjrB,GAAL,GAAW,KAAK+oB,IAAL,CAAUv3E,aAAV,CAAwB0wE,qBAAxB,EAAX;AACA,eAAK2H,QAAL,CAAcxzB,IAAd,CAAmB,IAAnB;AACH;AAED;;;;;;kCAGiB;AAAA;;AACb,eAAK/jD,OAAL,CAAa,UAAb,EAAyB;AAAA,mBAAO,QAAI,CAACooD,GAAL,GAAW,CAAlB;AAAA,WAAzB,EAA+C,EAA/C;AACA,eAAKmvB,QAAL,CAAcxzB,IAAd,CAAmB,KAAnB;AACH;AAED;;;;;;;;sCAKqBh1C,K,EAA6B;AAC9C;AACA,cAAIA,KAAK,CAAC8pE,KAAN,CAAY/5E,CAAhB,EAAmB;AACf,gBAAMA,CAAC,GAAGiQ,KAAK,CAAC+pE,eAAN,CAAsBh6E,CAAhC;AACA,gBAAMspD,GAAG,GAAG,CAACtpD,CAAC,GAAG,KAAK4uD,GAAL,CAAStF,GAAb,GAAmB,KAAK2wB,UAAzB,IAAuC,KAAKrrB,GAAL,CAASzxD,MAA5D;AACA,gBAAM+8E,WAAW,GAAIr3E,IAAI,CAACg2B,KAAL,CAAYywB,GAAG,GAAG,EAAN,GAAW,EAAZ,GAAkB,EAA7B,IAAmC,EAApC,GAA0C,EAA9D;AACA,iBAAKA,GAAL,GAAY4wB,WAAW,GAAG,EAAf,GAAqB,GAAhC;AAEH;AACJ;;;qDAMmCC,kB,EAAoBC,gB,EAAkB;;;AACtE,cAAM/lC,eAAe,GACjB,YAAK/1B,MAAL,MAAW,IAAX,IAAW,aAAX,GAAW,MAAX,GAAW,GAAEnV,MAAF,CAAS,UAACmrC,GAAD,EAAS;AACzB,gBAAMC,UAAU,GAAG,IAAI,UAAA9gC,MAAJ,CAAW;AAC1BlR,kBAAI,EAAE+xC,GAAG,CAACjgC,WAAJ,GAAkB,IADE;AAE1B0V,yBAAW,EAAE,KAFa;AAG1BC,yBAAW,EAAEsqB,GAAG,CAACntC;AAHS,aAAX,EAIhB+E,EAJH;AAKA,gBAAMsoC,QAAQ,GAAG,IAAI,UAAA/gC,MAAJ,CAAW;AACxBlR,kBAAI,EAAE+xC,GAAG,CAACvgC,SAAJ,GAAgB,IADE;AAExBgW,yBAAW,EAAE,KAFW;AAGxBC,yBAAW,EAAEsqB,GAAG,CAACntC;AAHO,aAAX,EAId+E,EAJH;AAKA,gBAAMmuE,iBAAiB,GACnB/lC,GAAG,CAAChkB,SAAJ,IACA/gB,MAAM,CAACgqB,MAAP,CAAc+a,GAAG,CAAChkB,SAAlB,EAA6BtL,IAA7B,CAAkC,UAACvf,KAAD;AAAA,qBAAWA,KAAK,KAAK,IAArB;AAAA,aAAlC,CAFJ;;AAGA,gBAAI00E,kBAAkB,CAACjuE,EAAnB,KAA0BsoC,QAA1B,IAAsC6lC,iBAA1C,EAA6D;AACzD,qBAAO,IAAP;AACH,aAFD,MAGI,OACKF,kBAAkB,CAACjuE,EAAnB,IAAyBqoC,UAAzB,IAAuC4lC,kBAAkB,CAACjuE,EAAnB,GAAwBsoC,QAAhE,IACC4lC,gBAAgB,CAACluE,EAAjB,GAAsBqoC,UAAtB,IAAoC6lC,gBAAgB,CAACluE,EAAjB,GAAsBsoC,QAF/D;AAIP,WArBU,CAAX,KAqBM,EAtBV;AAuBA,iBAAO,CAAC,CAACH,eAAe,CAAC5vC,MAAzB;AACH;AAEH;;;;gCACiByS,O,EAAO;AACvB,iBAAOA,OAAO,CAAC+gE,oBAAR,KAAiC,MAAxC;AACA;;;;MAlTwC,OAAAj5E,a;;AAL3C;;;uBAKag4E,qB,EAAqB,2C,EAAA,sC,EAAA,4C,EAAA,wC,EAAA,kC,EAAA,0C,EAAA,4C;AAAA,K;;;YAArBA,qB;AAAqB,qC;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpClC;AAUI;AACI;AAGJ;AAGA;AA+BJ;;;;AA3CC,gGAA2C,iBAA3C,EAA2C,+CAA3C,EAA2C,IAA3C,EAA2C,wDAA3C;AAK2B;AAAA;AACA;AAAA;AAQpB;AAAA,+CAA+C,cAA/C,EAA+C,aAA/C;;;;;;;;;2BDiBKA,qB,EAAqB;cALjC,OAAA3wB,SAKiC;eALvB;AACPlnD,kBAAQ,EAAE,gBADH;AAEPmnD,qBAAW,EAAE,wBAFN;AAGPC,mBAAS,EAAE,CAAC,wBAAD;AAHJ,S;AAKuB,Q;;;;;;;;;;;;;;;;;;gBAE7B,OAAA1kD;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA,K;iBAAM,W;;;gBAEN,OAAAA,K;iBAAM,Y;;;gBAEN,OAAAA;;;gBAEA,OAAA2kD;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAqBA,OAAAsD,S;iBAAU,M,EAAQ;AAAE,sBAAQ;AAAV,W;;;;;;;;;;;;;;;;;;;;;;;;AEjFvB;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAYA;AAAA;AAAA;;AAgBA;AAAA;AAAA;;AAEA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3BoB;AACA;AACI;AAAgD;AAA0C;AAC1F;AACI;AACJ;AACF;AACF;AAAiF;AAAA;AAAA;AAAA;AAAA;AAA+C;AACpI;;;;;;;;;;AAPS;AAAA,0DAAoC,SAApC,EAAoC,wCAApC;AAC+C;AAAA;AAE1B;AAAA;AAGL;AAAA,iDAAuB,cAAvB,EAAuB,yBAAvB;;;;;;AATzB;AAEI;AAeN;;;;;AAfY;AAAA;;;;;;AAkBd;;;;;AAAY;;;;;;AAMJ;AAA8D;AAAoB;;;;;AAApB;AAAA;;;;;;;;;;;;;;;AAC9D;AAAoD;AAAA;AAAA;;AAAA;;AAAA,8BAAqB,EAArB;AAAyB,aAAF,MAAE,GAAY,EAAZ;AAAgB,iBAAF,gBAAE,GAAkB,KAAlB;AAAyB,iBAAF,yBAAmB,CAAjB;AAAkB,SAApF;AAChD;AACJ;;;;AADc;AAAA;;;;;;;;;;;;;;AAEd;AACI;AACA;AACJ;;;;AAFc;AAAA;;;;;;;;;;;QDWrBgtB,sB;;;;;AAiCT,sCACYr4D,QADZ,EAEYiT,IAFZ,EAGY8xB,OAHZ,EAIYD,OAJZ,EAKYowB,MALZ,EAMYrwB,sBANZ,EAOY3xB,OAPZ,EAQY1Y,KARZ,EAQ+C;AAAA;;AAAA;;AAE3C;AATQ,iBAAAwF,QAAA,GAAAA,QAAA;AACA,iBAAAiT,IAAA,GAAAA,IAAA;AACA,iBAAA8xB,OAAA,GAAAA,OAAA;AACA,iBAAAD,OAAA,GAAAA,OAAA;AACA,iBAAAowB,MAAA,GAAAA,MAAA;AACA,iBAAArwB,sBAAA,GAAAA,sBAAA;AACA,iBAAA3xB,OAAA,GAAAA,OAAA;AACA,iBAAA1Y,KAAA,GAAAA,KAAA;AAxCZ;;AACO,iBAAA/V,MAAA,GAAiB,UAAA8I,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAjB;AAEP;;AACO,iBAAAm4E,YAAA,GAAuB,EAAvB;AACP;;AACO,iBAAAtuB,WAAA,GAAsB,EAAtB;AACP;;AACO,iBAAA5zC,MAAA,GAA0B,EAA1B;AACP;;AACO,iBAAA01B,WAAA,GAA0B,EAA1B;AAOT,iBAAA6qC,UAAA,GAAwB,EAAxB;AAEA,iBAAA4B,iBAAA,GAA4B,CAA5B;AACA,iBAAAC,eAAA,GAAuB,CAAvB;AAEA,iBAAAhsB,cAAA,GAAyB,CAAzB;AACM,iBAAA5pC,MAAA,GAAkB,EAAlB;AAIH,iBAAA61D,QAAA,GAAgB,EAAhB;AAa8C;AAG9C;;;;mCAEc;AAAA;;AACX,eAAKh8D,QAAL,CAAc4Q,KAAd,GAAsB,UAAtB;;AAEJ,eAAKqC,IAAL,CAAU5W,WAAV,CAAsBzH,IAAtB,CAA2B,YAAAyG,KAAA,CAAM,UAACC,CAAD;AAAA,mBAAOA,CAAP;AAAA,WAAN,CAA3B,EAA4CvZ,SAA5C,CAAsD,YAAM;AACpD;AACA,oBAAI,CAAC0C,MAAL,GAAc,IAAI,UAAAuQ,MAAJ,CAAW;AAAElR,kBAAI,EAAE,QAAI,CAACW,MAAL,CAAYgJ,EAApB;AAAwB6d,yBAAW,EAAE,KAArC;AAA4CC,yBAAW,EAAE,QAAI,CAAC7iB;AAA9D,aAAX,CAAd;;AACA,oBAAI,CAAC7G,YAAL,CACI,cADJ,EAEI,QAAI,CAACqzE,MAAL,CAAY+G,QAAZ,CAAqBl6E,SAArB,CAA+B,UAACsuC,MAAD,EAAY;AACvC;AACA,kBAAIA,MAAM,CAACg7B,GAAP,CAAW,OAAX,KAAuB,QAAI,CAACwQ,YAAL,KAAsBxrC,MAAM,CAAC72B,GAAP,CAAW,OAAX,CAAjD,EAAsE;AAClE,oBAAM2V,KAAK,GAAG,QAAI,CAAC8D,IAAL,CAAU4Y,WAAV,CAAsBwE,MAAM,CAAC72B,GAAP,CAAW,OAAX,CAAtB,CAAd;AACA;;;AACA,oBAAI2V,KAAJ,EAAW;AACP,sBAAM/H,QAAQ,GAAG,QAAI,CAAC6L,IAAL,CAAUra,SAAV,CAAoBtR,IAApB,CACb,UAAC2kC,GAAD;AAAA,2BAASA,GAAG,CAACl2B,EAAJ,KAAWoZ,KAAK,CAAC+c,WAA1B;AAAA,mBADa,CAAjB;AAGA;;;AACA,sBAAI9kB,QAAJ,EAAc;AACV,4BAAI,CAACy0D,YAAL,GAAoB1sD,KAAK,CAACpZ,EAA1B;AACA,4BAAI,CAACkd,IAAL,CAAU7L,QAAV,GAAqBA,QAArB;;AACA,4BAAI,CAACy9B,sBAAL,CAA4BhN,OAA5B,CAAoC,QAAI,CAACgkC,YAAL,IAAqB,QAAI,CAAC5oD,IAAL,CAAU7L,QAAV,CAAmBrR,EAA5E;AACH;AACJ;AACJ;AACJ,aAjBD,CAFJ;;AAqBA,oBAAI,CAAClU,YAAL,CACI,UADJ,EAEI,QAAI,CAACoxB,IAAL,CAAU5wB,MAAV,CAAiB,iBAAjB,EAAoCN,SAApC,CAA8C,YAAM;;;AAChD,sBAAI,CAAC8iD,sBAAL,CAA4B/uB,cAA5B,GADgD,CAEhD;;;AACV,sBAAI,CAACrxB,MAAL,GAAc,IAAI,UAAAuQ,MAAJ,CAAW;AACxBlR,oBAAI,EAAE,QAAI,CAACW,MAAL,CAAYgJ,EADM;AAExB6d,2BAAW,EAAE,KAFW;AAGxBC,2BAAW,EAAE,QAAI,CAAC7iB;AAHM,eAAX,CAAd;AAKU,kBAAM0e,QAAQ,GAAG,QAAI,CAAC6L,IAAL,CAAU7L,QAA3B;AAEA;;AACA,kBAAI,CAACA,QAAQ,CAACzN,MAAT,CAAgBrS,IAAhB,CAAqB,UAACmmC,GAAD;AAAA,uBAASA,GAAG,CAAC13B,EAAJ,KAAW,QAAI,CAAC8lE,YAAzB;AAAA,eAArB,CAAL,EAAkE;AAC9D,wBAAI,CAACA,YAAL,GAAoB,CAAH,KAAGz0D,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAEzN,MAAV,CAAiB,CAAjB,OAAkB,IAAlB,IAAkB,aAAlB,GAAkB,MAAlB,GAAkB,GAAG5D,EAAzC;;AACA,wBAAI,CAACmmE,WAAL;AACH;;AACX,sBAAI,CAACC,SAAL;;AAEU,sBAAI,CAACxiE,MAAL,GAAc,CAAC;AAAE5D,kBAAE,EAAE,EAAN;AAAUlW,oBAAI,EAAE;AAAhB,eAAD,EAAwCm2B,MAAxC,CAA+C5O,QAAQ,CAACzN,MAAxD,CAAd;;AACV,sBAAI,CAACA,MAAL,CAAY3N,IAAZ,CAAiB,UAACC,CAAD,EAAIC,CAAJ;AAAA,uBAAUA,CAAC,CAACrM,IAAF,CAAOsM,aAAP,CAAqBF,CAAC,CAACpM,IAAvB,EAA6BkG,SAA7B,EAAwC;AACjEq2E,yBAAO,EAAE,IADwD;AAEjEC,mCAAiB,EAAE;AAF8C,iBAAxC,CAAV;AAAA,eAAjB;;AAMA,sBAAI,CAACL,QAAL,GAAgB,EAAhB;;AACA,sBAAI,CAACriE,MAAL,CAAYzX,OAAZ,CAAoB,UAAAyI,EAAE,EAAI;AACzB,wBAAI,CAACqxE,QAAL,CAAcrwE,IAAd,CAAmB;AACjBoE,yBAAO,EAAEpF,EAAE,CAAC9K,IADK;AACCmH,uBAAK,EAAE2D,EAAE,CAACoL,EADX;AACeiT,sBAAI,EAAE;AADrB,iBAAnB;AAGA,eAJD;;AAMA,sBAAI,CAACszD,WAAL,GAAmB;AAClBC,0BAAU,EAAE,YADM;AAElB51D,uBAAO,EAAE,QAAI,CAACq1D,QAFI;AAGlBnY,+BAAe,EAAE,QAAI,CAACmY,QAAL,CAActxE,MAAd,CAAqB,UAAAC,EAAE;AAAA,yBAAIA,EAAE,CAAC3D,KAAH,KAAc,QAAI,CAAC60E,YAAvB;AAAA,iBAAvB,EAA6D,CAA7D,CAHC;AAIlB/X,gCAAgB,EAAE,QAAI,CAAC0Y,mBAAL,CAAyB9K,IAAzB,CAA8B,QAA9B;AAJA,eAAnB;AAQA,sBAAI,CAAC3oD,mBAAL,GAA2B,QAAI,CAACkK,IAAL,CAAUra,SAAV,CAAoBlO,MAApB,CAC1B,UAAC4Q,CAAD;AAAA,uBAAOA,CAAC,CAAC/B,IAAF,KAAW6N,QAAQ,CAAC7N,IAA3B;AAAA,eAD0B,CAA3B;;AAIA,sBAAI,CAACkjE,oBAAL;AAGO,aA9CD,CAFJ;AAmDH,WA3EL;;AA6EI,eAAK56E,YAAL,CACI,UADJ,EAEI,KAAKgjD,sBAAL,CAA4B/wB,QAA5B,CAAqC/xB,SAArC,CAA+C,UAACC,IAAD,EAAU;AACrD,oBAAI,CAACk4E,UAAL,sBAAsB,QAAI,CAACK,YAAL,CAAkBv4E,IAAlB,CAAtB;AAEH,WAHD,CAFJ;AAOH;;;qCAEoBA,I,EAAI;AAC1B,cAAM6R,QAAQ,GAAG7R,IAAjB;AACA,cAAM06E,eAAe,GAAG7oE,QAAQ,CAACnJ,MAAT,CAAgB,UAAC8G,KAAD,EAAW;AACjD,gBAAMwZ,MAAM,GAAGxZ,KAAK,CAACoX,YAAN,IAAsBpX,KAAK,CAACugB,eAAN,KAA0B,QAA/D;AACA,mBAAS,CAAC/G,MAAV;AACD,WAHuB,CAAxB;AAKA,iBAAO0xD,eAAe,IAAI,EAA1B;AACE;;;oCAEkB;AAAA;;AACf,eAAK76E,YAAL,CACI,QADJ,EAEI,KAAKqxB,OAAL,CAAa7wB,MAAb,CAAoB,MAApB,EAA4BN,SAA5B,CAAsC,UAACokB,MAAD,EAAY;AAC9C,gBAAMpG,OAAO,GAAG,CAAC,QAAI,CAAC87D,YAAN,GAAqB,QAAI,CAAC5oD,IAAL,CAAU7L,QAAV,CAAmBrR,EAAxC,GAA6C,QAAI,CAAC8lE,YAAlE;AACA,oBAAI,CAAC11D,MAAL,GAAc,QAAI,CAAC+M,OAAL,CAAaxoB,MAAb,CAAoB,UAAC4Q,CAAD;AAAA,qBAAOA,CAAC,CAAC+L,KAAF,CAAQngB,OAAR,CAAgB6Y,OAAhB,KAA4B,CAA5B,IAAiCzE,CAAC,CAAC2M,QAA1C;AAAA,aAApB,CAAd;AACH,WAHD,CAFJ;AAOH,S,CAED;;;;sCAEcjhB,K,EAAO;AAEjB;AACD,eAAKgpD,eAAL,GAAuB,KAAvB,CAHkB,CAKlB;;AACA,cAAMvrB,WAAW,GAAGz9B,KAAK,CAACwE,WAAN,GAAoB02C,IAApB,EAApB,CANkB,CAQlB;;AACD,cAAM1d,QAAQ,gCAAO,KAAK01C,UAAZ,sBAA2B,KAAK/zD,MAAhC,EAAd,CATmB,CAUnB;;AACA,cAAMwe,aAAa,GAAG,cAAAJ,sBAAA,CAAuBC,QAAvB,EAAiCC,WAAjC,CAAtB,CAXmB,CAalB;;AACA,eAAKsrB,cAAL,GAAsBprB,aAAa,CAAC3+B,MAApC,CAdkB,CAgBlB;;AACA,eAAKgqD,eAAL,GAAuB,CAAC,KAAKD,cAA7B,CAjBkB,CAmBlB;;AACA,eAAK+rB,iBAAL,GAAyB,KAAK/rB,cAAL,GAAsB,CAA/C;;AAEA,cAAG,KAAKE,SAAL,KAAmBjpD,KAAtB,EAA6B;AACzB;AACA,iBAAKgZ,QAAL,CAAcvc,GAAd,CAAkB,4BAAlB,EAAgDkhC,aAAa,CAAC,CAAD,CAA7D,EAFyB,CAGzB;;;AACA,iBAAKo3C,eAAL,GAAuB,CAAvB;AACH,WALD,MAMK;AACD;AACA;AACA,iBAAKA,eAAL,GAAyB,KAAKA,eAAL,GAAuB,KAAKD,iBAA9B,GAAqD,KAAKC,eAAL,GAAuB,CAA5E,GAAgF,CAAvG,CAHC,CAID;;AACA,iBAAK/7D,QAAL,CAAcvc,GAAd,CAAkB,4BAAlB,EAAgDkhC,aAAa,CAAC,KAAKo3C,eAAN,CAA7D;AACH,WAlCiB,CAoClB;;;AACA,eAAK9rB,SAAL,GAAiBjpD,KAAjB;AACF;;;sCAGiB;AACd,eAAKgZ,QAAL,CAAcvc,GAAd,CAAkB,4BAAlB,EAAgD,EAAhD;AACF,S,CAKF;;;;qCAKoBgB,M,EAAgB;AAChC,eAAKA,MAAL,GAAcA,MAAd;AACH;;;sCAEoB;AACjB,eAAKogD,sBAAL,CAA4BhN,OAA5B,CAAoC,KAAKgkC,YAAL,IAAqB,KAAK5oD,IAAL,CAAU7L,QAAV,CAAmBrR,EAA5E;;AACJ,eAAKomE,SAAL,GAFqB,CAGjB;AACH;;;+CAE2B;AAG7B,cAAG,KAAKpzD,mBAAL,CAAyB/iB,MAA5B,EAAoC;AAEnC,gBAAM22E,QAAQ,GAAc,CAAC;AAC5BC,yBAAW,EAAE,KAAK3pD,IAAL,CAAU7L,QAAV,CAAmBvnB,IADJ;AAE5Bg9E,sBAAQ,EAAE,OAFkB;AAG5BrI,sBAAQ,EAAC;AAHmB,aAAD,CAA5B;AAOA,iBAAKzrD,mBAAL,CAAyB7mB,OAAzB,CAAiC,UAAAyI,EAAE,EAAI;AACtC,kBAAMmyE,cAAc,GAAc,EAAlC;AAEAnyE,gBAAE,CAACgP,MAAH,CAAUzX,OAAV,CAAkB,UAAAurC,GAAG;AAAA,uBAAIqvC,cAAc,CAACnxE,IAAf,CAAoB;AAC5CixE,6BAAW,EAAEnvC,GAAG,CAAC5tC,IAD2B;AAE5C20E,0BAAQ,EAAE,EAFkC;AAG5CxrD,sBAAI,EAAE;AACL2kB,4BAAQ,EAAGF,GAAG,CAAC13B,EADV;AAELm2B,+BAAW,EAAEuB,GAAG,CAACvB;AAFZ;AAHsC,iBAApB,CAAJ;AAAA,eAArB;AAUA4wC,4BAAc,CAACnxE,IAAf,CAAoB;AAAEixE,2BAAW,EAAE,YAAf;AAA6BpI,wBAAQ,EAAE,EAAvC;AAA2CxrD,oBAAI,EAAE;AACnE2kB,0BAAQ,EAAG,EADwD;AAEnEzB,6BAAW,EAAEvhC,EAAE,CAACoL;AAFmD;AAAjD,eAApB;AAMA4mE,sBAAQ,CAAC,CAAD,CAAR,CAAYnI,QAAZ,CAAqB7oE,IAArB,CAA0B;AACzBixE,2BAAW,EAAEjyE,EAAE,CAAC9K,IADS;AAEzB20E,wBAAQ,EAAEsI,cAFe;AAGzB9zD,oBAAI,EAAE;AACLkjB,6BAAW,EAAEvhC,EAAE,CAACoL;AADX;AAHmB,eAA1B;AAOA,aA1BD;AA4BA,iBAAKgnE,iBAAL,GAAyBJ,QAAzB;AAEA;AAGD;;;6CAE4B7D,I,EAAM;AAAA;;AAClC;AACA,cAAM1xD,QAAQ,GAAG,KAAK2B,mBAAL,CAAyBre,MAAzB,CAAgC,UAAAuhC,GAAG;AAAA,mBAAIA,GAAG,CAACl2B,EAAJ,KAAW+iE,IAAI,CAAC9vD,IAAL,CAAUkjB,WAAzB;AAAA,WAAnC,EAAyE,CAAzE,CAAjB;AACA,eAAKjZ,IAAL,CAAU7L,QAAV,GAAqBA,QAArB;AACA,eAAK41D,kBAAL,GAA0B51D,QAAQ,CAACvnB,IAAnC;AAGC,eAAK8Z,MAAL,GAAc,CAAC;AAAE5D,cAAE,EAAE,EAAN;AAAUlW,gBAAI,EAAE;AAAhB,WAAD,EAAwCm2B,MAAxC,CAA+C5O,QAAQ,CAACzN,MAAxD,CAAd;AACA,eAAKA,MAAL,CAAY3N,IAAZ,CAAiB,UAACC,CAAD,EAAIC,CAAJ;AAAA,mBAAUA,CAAC,CAACrM,IAAF,CAAOsM,aAAP,CAAqBF,CAAC,CAACpM,IAAvB,EAA6BkG,SAA7B,EAAwC;AACjEq2E,qBAAO,EAAE,IADwD;AAEjEC,+BAAiB,EAAE;AAF8C,aAAxC,CAAV;AAAA,WAAjB;AAOA,eAAKR,YAAL,GAAoB/C,IAAI,CAAC9vD,IAAL,CAAU2kB,QAA9B;AACA,eAAK2uC,WAAL,CAAiBzY,eAAjB,GAAmC,KAAKmY,QAAL,CAActxE,MAAd,CAAqB,UAAAC,EAAE;AAAA,mBAAIA,EAAE,CAAC3D,KAAH,KAAc,QAAI,CAAC60E,YAAvB;AAAA,WAAvB,EAA6D,CAA7D,CAAnC;AACA,eAAKK,WAAL;AACD;;;4CAEmB/sD,K,EAAW;AAC9B,eAAK0sD,YAAL,GAAoB1sD,KAAK,CAACnoB,KAA1B;AAEA,eAAKk1E,WAAL;AAEA;;;4BAtFuB;;;AAClB,iBAAO,YAAKjpD,IAAL,CAAU7L,QAAV,MAAkB,IAAlB,IAAkB,aAAlB,GAAkB,MAAlB,GAAkB,GAAE1e,QAApB,KAAgCqV,YAAY,CAACC,OAAb,CAAqB,oBAArB,CAAvC;AACH;;;;MAhNuC,OAAAzd,a;;AAL5C;;;uBAKa83E,sB,EAAsB,2C,EAAA,4C,EAAA,kC,EAAA,+B,EAAA,uC,EAAA,4C,EAAA,sC,EAAA,8B;AAAA,K;;;YAAtBA,sB;AAAsB,qC;AAAA,+C;AAAA,e;AAAA,c;AAAA,wuC;AAAA;AAAA;;;AChDnC;AACI;AAEI;AAEI;AACI;AAkBL;AAEC;AAEA;AACI;AACI;AACA;AAA6C;AAAA;AAAA,aAAuB,aAAvB,EAAuB;AAAA;;AAAA;;AAAA,iCAA8B,EAA9B,IAAoC,IAAA4E,aAAA,WAApC;AAA4D,WAAnF,EAAuB,eAAvB,EAAuB;AAAA,kCAA2K,KAA3K;AAAkL,mBAAF,qBAAmB,CAAjB;AAAkB,WAA3N;AAA7C;AACA;AACA;AAGA;AAIJ;AACJ;AAGA;AACI;AAAA;AAAA,aAAmB,cAAnB,EAAmB;AAAA,mBAMH,IAAAC,YAAA,QANG;AAMiB,WANpC;AAOJ;AAEJ;AAEA;AACI;AAMJ;AACJ;AACJ;;;;AA3DsB;AAAA;AAoBuB;AAAA;AAGb;AAAA;AACF;AAAA;AACmC;AAAA;AACnB;AAAA;AACQ;AAAA;AAGN;AAAA;AAShC;AAAA,8CAAmB,UAAnB,EAAmB,YAAnB,EAAmB,MAAnB,EAAmB,gBAAnB,EAAmB,aAAnB,EAAmB,IAAnB,EAAmB,eAAnB,EAAmB,IAAnB,EAAmB,oBAAnB,EAAmB,KAAnB;AAaA;AAAA,8CAAiB,OAAjB,EAAiB,gBAAjB,EAAiB,eAAjB,EAAiB,iBAAjB,EAAiB,YAAjB,EAAiB,eAAjB;;;;;;;;;2BDVH7E,sB,EAAsB;cALlC,OAAAzwB,SAKkC;eALxB;AACPlnD,kBAAQ,EAAE,gBADH;AAEPmnD,qBAAW,EAAE,iCAFN;AAGPC,mBAAS,EAAE,CAAC,iCAAD;AAHJ,S;AAKwB,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEhDnC;AAAA;AAAA;;AAYA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA,2C,CAEA;;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1BC;AACC;AACD;;;;;;AAeK;AACC;AAAgF;AAAoB;AACrG;;;;;;AADuB;AAAA;AAA0D;AAAA;;;;;;AAKlF;AACC;AACC;AAAkB;AAAqB;AACvC;AACD;AACA;AACC;AAED;AACD;;;;;AAT+D;AAE3C;AAAA;AAIlB;AAAA;;;;;;;;AAYA;AAGC;AAUC;AAAA;AAAA;AAAA;AAAA,WAA+B,QAA/B,EAA+B;AAAA;AAAA;AAAA;AAAA;AAAA,SAA/B,EAA+B,QAA/B,EAA+B;AAAA;AAAA;AAAA;AAAA,SAA/B;AAGD;AACD;;;;;;AAjBmB;AAIjB;AAAA,wDAA0B,QAA1B,EAA0B,aAA1B,EAA0B,OAA1B,EAA0B,OAA1B,EAA0B,QAA1B,EAA0B,aAA1B,EAA0B,eAA1B,EAA0B,oBAA1B,EAA0B,QAA1B,EAA0B,sBAA1B,EAA0B,WAA1B,EAA0B,wCAA1B,EAA0B,YAA1B,EAA0B,kBAA1B,EAA0B,mBAA1B,EAA0B,oBAA1B;;;;;;AAoBP;;AACC;AACD;;;;;AAFwC;;;;;;AAK1C;AACC;AACC;AAAkB;AAAc;AAChC;AACC;AACD;AACD;AACD;;;;AD/CA,QAAMq1B,eAAe,GAAG,EAAxB;;QAQa7E,wB;;;;;AA2FT,wCACYt4D,QADZ,EAEYkT,OAFZ,EAGY2xB,sBAHZ,EAIY5xB,IAJZ,EAKYiiD,MALZ,EAMYh0E,SANZ,EAOY6jD,OAPZ,EAQYpqC,KARZ,EASYi/D,GATZ,EASkC;AAAA;;AAAA;;AAE9B;AAVQ,iBAAA55D,QAAA,GAAAA,QAAA;AACA,iBAAAkT,OAAA,GAAAA,OAAA;AACA,iBAAA2xB,sBAAA,GAAAA,sBAAA;AACA,iBAAA5xB,IAAA,GAAAA,IAAA;AACA,iBAAAiiD,MAAA,GAAAA,MAAA;AACA,iBAAAh0E,SAAA,GAAAA,SAAA;AACA,iBAAA6jD,OAAA,GAAAA,OAAA;AACA,iBAAApqC,KAAA,GAAAA,KAAA;AACA,iBAAAi/D,GAAA,GAAAA,GAAA;AAhGZ;;AACgB,iBAAAn1E,MAAA,GAAiB,UAAA8I,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAjB;AAKhB;;AACgB,iBAAAm2E,MAAA,GAA2B,EAA3B;AAQhB;;AACO,iBAAAQ,WAAA,GAA0B,SAAKC,kBAAL,EAA1B;AACP;;AACO,iBAAAkB,UAAA,GAAqB,CAArB;AACP;;AACO,iBAAA4B,WAAA,GAAsB,CAAtB;AACP;;AACO,iBAAAC,aAAA,GAAwB,CAAxB;AACP;;AACO,iBAAAl3D,MAAA,GAAkB,EAAlB;AACP;;AACO,iBAAAm3D,eAAA,GAA2B,EAA3B;AACP;;AACO,iBAAAlC,OAAA,GAAqC,EAArC;AAKP;;AACO,iBAAAmC,aAAA,GAA2C,EAA3C;AAGP;;AACO,iBAAA9C,WAAA,GAAsB,CAAtB;AAKP;AACA;;AAEO,iBAAA+C,WAAA,GAAwB,EAAxB;AAEA,iBAAAC,QAAA,GAAoB,SAAK90E,OAAL,EAApB;AACA,iBAAA+0E,gBAAA,GAAmB,KAAnB;AAMP,iBAAAC,aAAA,GAAyB,KAAzB;AAyCkC;AAGjC;AAvCD;;;;;mCAEkB;AACd,cAAI,KAAKC,WAAL,CAAiB,YAAjB,EAA+Bj8E,aAAnC,EAAkD;AAC9C,iBAAKwuD,GAAL,GAAW,KAAKytB,WAAL,CAAiB,YAAjB,EAA+Bj8E,aAA/B,CAA6C0wE,qBAA7C,EAAX;AACH;AACJ;;;kCAMgB;;;AACb,iBAAO,IAAI,UAAAr9D,MAAJ,CAAW;AACdlR,gBAAI,EAAE,UAAAsgD,WAAA,CAAY,KAAK3/C,MAAjB,EAAyBgJ,EADjB;AAEd6d,uBAAW,EAAE,KAFC;AAGdC,uBAAW,EAAE,YAAK0H,IAAL,CAAU7L,QAAV,MAAkB,IAAlB,IAAkB,aAAlB,GAAkB,MAAlB,GAAkB,GAAE1e,QAApB,KAAgCqV,YAAY,CAACC,OAAb,CAAqB,oBAArB;AAH/B,WAAX,EAIJqkB,UAJI,CAKH,IAAI,UAAArtB,MAAJ,CAAW;AACPlR,gBAAI,EAAEJ,IAAI,CAACunB,GAAL,EADC;AAEPK,uBAAW,EAAE,KAFN;AAGPC,uBAAW,EAAE,YAAK0H,IAAL,CAAU7L,QAAV,MAAkB,IAAlB,IAAkB,aAAlB,GAAkB,MAAlB,GAAkB,GAAE1e,QAApB,KAAgCqV,YAAY,CAACC,OAAb,CAAqB,oBAArB;AAHtC,WAAX,CALG,EAUH,KAVG,CAAP;AAYH;;;mCAyBc;AAAA;;AACX,eAAKkV,OAAL,CAAa7W,WAAb,CAAyBzH,IAAzB,CAA8B,YAAAyG,KAAA,CAAM,UAACC,CAAD;AAAA,mBAAOA,CAAP;AAAA,WAAN,CAA9B,EAA+CvZ,SAA/C,CAAyD,YAAM;AAC3D,oBAAI,CAACkxB,IAAL,CAAU5W,WAAV,CAAsBzH,IAAtB,CAA2B,YAAAyG,KAAA,CAAM,UAACC,CAAD;AAAA,qBAAOA,CAAP;AAAA,aAAN,CAA3B,EAA4CvZ,SAA5C,CAAsD,YAAM;AACxD,sBAAI,CAAC8iD,sBAAL,CAA4BzM,wBAA5B;;AACA,kBAAMr4B,OAAO,GAAG,CAAC,QAAI,CAACoP,KAAN,GAAc,QAAI,CAAC8D,IAAL,CAAU7L,QAAV,CAAmBrR,EAAjC,GAAsC,QAAI,CAACoZ,KAA3D;AACA,sBAAI,CAAChJ,MAAL,GAAc,QAAI,CAAC+M,OAAL,CAAaxoB,MAAb,CAAoB,UAAC4Q,CAAD;AAAA,uBAAOA,CAAC,CAAC+L,KAAF,CAAQngB,OAAR,CAAgB6Y,OAAhB,KAA4B,CAAnC;AAAA,eAApB,CAAd;;AACA,sBAAI,CAACzD,IAAL;;AACA,sBAAI,CAACuhE,UAAL,GALwD,CAMxD;;;AACA,sBAAI,CAACC,UAAL;;AACA,sBAAI,CAACnjE,KAAL,CAAWib,iBAAX,CAA6B,YAAM;AAC/B,wBAAI,CAACC,QAAL,CAAc,MAAd,EAAsB;AAAA,yBAAM,QAAI,CAACioD,UAAL,EAAN;AAAA,iBAAtB,EAA+C,KAAK,IAApD;AACH,eAFD,EARwD,CAWxD;;;AACA,sBAAI,CAACj8E,YAAL,CACI,QADJ,EAEI,QAAI,CAACgjD,sBAAL,CAA4BpgD,MAA5B,CAAmC1C,SAAnC,CAA6C,UAAC0C,MAAD,EAAY;AACrD;AACA,wBAAI,CAACA,MAAL,GAAcA,MAAd;AACH,eAHD,CAFJ;AAOH,aAnBD;AAoBH,WArBD;;AAsBA,eAAKg5E,QAAL,GAAgB,KAAK90E,OAAL,EAAhB;AAEA,eAAK9G,YAAL,CACI,QADJ,EAEI,KAAKqxB,OAAL,CAAa7wB,MAAb,CAAoB,MAApB,EAA4BN,SAA5B,CAAsC,UAACokB,MAAD,EAAY;AAC9C,gBAAMpG,OAAO,GAAG,CAAC,QAAI,CAACoP,KAAN,GAAc,QAAI,CAAC8D,IAAL,CAAU7L,QAAV,CAAmBrR,EAAjC,GAAsC,QAAI,CAACoZ,KAA3D;AACA,oBAAI,CAAChJ,MAAL,GAAc,QAAI,CAAC+M,OAAL,CAAaxoB,MAAb,CAAoB,UAAC4Q,CAAD;AAAA,qBAAOA,CAAC,CAAC+L,KAAF,CAAQngB,OAAR,CAAgB6Y,OAAhB,KAA4B,CAAnC;AAAA,aAApB,CAAd;;AACA,oBAAI,CAACzD,IAAL;;AACA,oBAAI,CAACuhE,UAAL,GAJ8C,CAK9C;;;AACA,oBAAI,CAACC,UAAL;AACH,WAPD,CAFJ;AAYH;;;0CAEiB;AACd,cAAMl8C,EAAE,GAAG,KAAK1gC,SAAL,CAAe0O,aAAf,CAA6B,KAA7B,CAAX;;AACA,eAAK1O,SAAL,CAAe68E,QAAf,CAAwBn8C,EAAxB,EAA4B,yBAA5B;;AACA,eAAKo8C,aAAL,CAAmBztB,UAAnB,IAAiC,KAAKrvD,SAAL,CAAe+O,WAAf,CAA2B,KAAK+tE,aAAL,CAAmBztB,UAAnB,CAA8B5uD,aAAzD,EAAwEigC,EAAxE,CAAjC;AACD;;;oCAGgBpgC,O,EAAsB;AACrC;AACA,cAAIA,OAAO,CAAC2tB,KAAR,IAAiB,KAAK8D,IAAL,CAAU7L,QAA/B,EAAyC;AACrC,gBAAMrH,OAAO,GAAG,CAAC,KAAKoP,KAAN,GAAc,KAAK8D,IAAL,CAAU7L,QAAV,CAAmBrR,EAAjC,GAAsC,KAAKoZ,KAA3D;AACA,iBAAKhJ,MAAL,GAAc,KAAK+M,OAAL,CAAaxoB,MAAb,CAAoB,UAAC4Q,CAAD;AAAA,qBAAOA,CAAC,CAAC+L,KAAF,CAAQngB,OAAR,CAAgB6Y,OAAhB,KAA4B,CAAnC;AAAA,aAApB,CAAd;AACA,iBAAK+9D,UAAL;AACA,iBAAKD,UAAL;AACH;;AACD,cAAIr8E,OAAO,CAACy8E,UAAZ,EAAwB;AACpB,iBAAKJ,UAAL;AACH;AACJ;;;sCAEoB;;;AACjB,cAAI,CAAJ,KAAI,KAAKh5B,sBAAL,MAA2B,IAA3B,IAA2B,aAA3B,GAA2B,MAA3B,GAA2B,GAAEq5B,WAAjC,EAA8C,WAAKr5B,sBAAL,MAA2B,IAA3B,IAA2B,aAA3B,GAA2B,MAA3B,GAA2B,GAAEq5B,WAAF,EAA3B;AACjD;;;+BAEa;AAAA;;AACV,eAAKl+D,QAAL,CAAc4Q,KAAd,GAAsB,UAAtB;AACA,eAAK/uB,YAAL,CACI,SADJ,EAEI,KAAKme,QAAL,CACK3d,MADL,CACY,4BADZ,EAEKN,SAFL,CAEe,UAACyP,KAAD;AAAA,mBAAW,QAAI,CAAC2sE,cAAL,CAAoB3sE,KAApB,CAAX;AAAA,WAFf,CAFJ,EAFU,CAQV;;AACA,eAAK3P,YAAL,CACI,aADJ,EAEI,KAAKqzE,MAAL,CAAYkJ,aAAZ,CAA0Br8E,SAA1B,CAAoC,UAACsuC,MAAD,EAAY;AAC5C;AACA,gBAAIA,MAAM,CAACg7B,GAAP,CAAW,MAAX,KAAsBttD,YAAY,CAACC,OAAb,CAAqB,wBAArB,CAA1B,EAA0E;AACtE,sBAAI,CAACqgE,OAAL,GAAehuC,MAAM,CAAC72B,GAAP,CAAW,MAAX,CAAf;AACA,kBAAMmc,OAAO,GAAG5X,YAAY,CAACC,OAAb,CAAqB,wBAArB,CAAhB;AACA,kBAAMsgE,SAAS,GAAGvgE,YAAY,CAACC,OAAb,CAAqB,8BAArB,CAAlB;AACA;;AACA,kBAAI2X,OAAJ,EAAa;AACT,oBAAM1O,KAAK,GAAsBq3D,SAAS,GACpC,IAAI,cAAAp3D,KAAJ,CAAU7a,IAAI,CAACC,KAAL,CAAWgyE,SAAX,CAAV,CADoC,GAEpCv4E,SAFN;AAGA,oBAAM0S,OAAO,GAAG,IAAI,cAAAgQ,OAAJ,CAAY,MAAD,OAAC,CAAD,kBAAMpc,IAAI,CAACC,KAAL,CAAWqpB,OAAX,CAAN,CAAC,EAAwB;AAAEmB,sBAAI,EAAE7P;AAAR,iBAAxB,CAAZ,CAAhB;;AACA,oBAAG,CAAC,QAAI,CAACy2D,gBAAT,EAA2B;AACvB,0BAAI,CAACA,gBAAL,GAAwB,IAAxB,CADuB,CAEvB;;AACA3/D,8BAAY,CAACmF,UAAb,CAAwB,wBAAxB;AACAnF,8BAAY,CAACmF,UAAb,CAAwB,8BAAxB;AACH;AACJ;AACJ;AACJ,WApBD,CAFJ;AAyBA;;AACA,cAAI,KAAK06D,WAAL,CAAiB,YAAjB,EAA+Bj8E,aAAnC,EAAkD;AAC9C,iBAAKwuD,GAAL,GAAW,KAAKytB,WAAL,CAAiB,YAAjB,EAA+Bj8E,aAA/B,CAA6C0wE,qBAA7C,EAAX;AACH;AACJ;AAED;;;;;;;qCAIoB7gE,K,EAAO;AACvB,eAAKgqE,UAAL,GAAkBhqE,KAAK,CAACyE,MAAN,CAAarT,SAA/B;AACA,eAAKw6E,WAAL,GAAmB5rE,KAAK,CAACyE,MAAN,CAAatT,UAAhC;AACH;AAID;;;;6CAC0B;AACtB,cAAMuwD,MAAM,GAAe,EAA3B;AACA,cAAMpvD,IAAI,GAAG,UAAAyJ,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB8J,YAApB,CAAiC,MAAjC,CAAb;;AACA,eAAK,IAAIrL,IAAC,GAAG,CAAb,EAAgBA,IAAC,GAAG,EAApB,EAAwBA,IAAC,EAAzB,EAA6B;AACzB+wD,kBAAM,CAACvnD,IAAP,CAAY;AACRoK,gBAAE,EAAEjS,IAAI,CAACY,QAAL,CAAc;AAAE0B,oBAAI,EAAEjE;AAAR,eAAd,EAA2BiD,UAA3B,CAAsC,OAAtC,CADI;AAERvF,kBAAI,EAAEiE,IAAI,CAACY,QAAL,CAAc;AAAE0B,oBAAI,EAAEjE;AAAR,eAAd,EAA2BiD,UAA3B,CAAsC,OAAtC,EAA+CmJ,iBAA/C;AAFE,aAAZ;AAIH;;AACD,iBAAO2kD,MAAP;AACH;AAED;;;;qCACqB;;;AACjB,cAAMjoC,GAAG,GAAG,IAAI,UAAAjW,MAAJ,CAAW;AACnBlR,gBAAI,EAAEJ,IAAI,CAACunB,GAAL,EADa;AAEnBK,uBAAW,EAAE,KAFM;AAGnBC,uBAAW,EAAE,YAAK0H,IAAL,CAAU7L,QAAV,MAAkB,IAAlB,IAAkB,aAAlB,GAAkB,MAAlB,GAAkB,GAAE1e,QAApB,KAAgCqV,YAAY,CAACC,OAAb,CAAqB,oBAArB;AAH1B,WAAX,CAAZ;AAKA,eAAKiN,GAAL,GAAW,CAACA,GAAG,CAACwmB,QAAJ,GAAexmB,GAAG,CAAC1mB,OAAJ,GAAc,EAA9B,IAAoC,EAA/C;AACA,eAAKg6E,WAAL,GAAmBtzD,GAAG,CAACzd,YAAJ,CAAiB,MAAjB,EAAyBpI,UAAzB,CAAoC,OAApC,CAAnB;AACA,eAAKq4E,QAAL,GAAgB,KAAK90E,OAAL,EAAhB;AACA,eAAKixE,GAAL,CAAStwB,aAAT;AACH;AAGD;;;;;;;uCAIuBk1B,U,EAA4B;AAAA;;;;AAC/C,cAAIA,UAAU,IAAI,KAAKZ,WAAnB,IAAkC,KAAKA,WAAL,CAAiB,YAAjB,EAA+Bj8E,aAArE,EAAoF;AAChF,iBAAK88E,MAAL,IAAe,KAAKv9E,SAAL,CAAew9E,WAAf,CAA2B,KAAKD,MAAhC,EAAwC,MAAxC,CAAf;AAEA;;;;;AAIA,gBAAME,OAAO,GAAGH,UAAU,CAAC,OAAD,CAAV,GAAsBA,UAAU,CAAC,OAAD,CAAV,CAAoBzoE,EAA1C,GAA+CyoE,UAAU,CAACzoE,EAA1E;AACA,gBAAMrU,OAAO,GAAmB,KAAKk8E,WAAL,CAAiB,YAAjB,EAC3Bj8E,aAD2B,CACb2N,aADa,sBACeqvE,OADf,EAAhC;AAIA,iBAAKF,MAAL,GAAc/8E,OAAd;AAEA,iBAAKk9E,SAAL,IAAkB,KAAK19E,SAAL,CAAew9E,WAAf,CAA2B,KAAKE,SAAhC,EAA2C,MAA3C,CAAlB;AACA,gBAAGJ,UAAU,CAAC,OAAD,CAAV,IAAuBA,UAAU,CAAC,OAAD,CAAV,CAAoBzoE,EAA9C,EACI,KAAK6oE,SAAL,GAAiB,CAAH,KAAGl9E,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAE4N,aAAT,YAA2BkvE,UAAU,CAACzoE,EAAtC,QAA0C,IAA1C,IAA0C,aAA1C,GAA0C,MAA1C,GAA0C,GAAGzG,aAAH,CAAiB,kBAAjB,CAA3D;AAGJ;;AACA,gBAAI5N,OAAJ,EAAa;AACT,mBAAKm9E,SAAL,IAAkBn/E,YAAY,CAAC,KAAKm/E,SAAN,CAA9B;;AACA,mBAAK39E,SAAL,CAAe68E,QAAf,CAAwBr8E,OAAxB,EAAiC,MAAjC;;AACA,mBAAKk9E,SAAL,IAAkB,KAAK19E,SAAL,CAAe68E,QAAf,CAAwB,KAAKa,SAA7B,EAAwC,MAAxC,CAAlB;AACA,kBAAME,UAAU,GAAG,KAAKlB,WAAL,CAAiB,YAAjB,EAA+Bj8E,aAA/B,CAA6C0wE,qBAA7C,EAAnB;AAEA,kBAAI0M,YAAJ;;AACA,kBAAGP,UAAU,CAAC,OAAD,CAAV,IAAuBA,UAAU,CAAC,OAAD,CAAV,CAAoBzoE,EAA9C,EAAkD;AAC7CgpE,4BAAY,GAAG36E,IAAI,CAAC04B,GAAL,CACZ0hD,UAAU,CAAC,aAAD,CAAV,CAA0BzhD,QAA1B,CACIyhD,UAAU,CAAC,aAAD,CAAV,CAA0BhxE,YAA1B,CAAuC,KAAvC,CADJ,EAEI,SAFJ,CADY,KAKX,KAAK,EALM,CAAf;AAMJ;;AAGD,kBAAM2iD,GAAG,GAAGzuD,OAAO,CAAC2wE,qBAAR,EAAZ;AACA,kBAAMtnB,IAAI,GAAGoF,GAAG,CAACpF,IAAJ,GAAW+zB,UAAU,CAAC/zB,IAAtB,GAA6B,KAAK6yB,WAAL,CAAiB,YAAjB,EAA+Bj8E,aAA/B,CAA6CgB,UAA1E,GAAuF,GAApG;AACA,kBAAMkoD,GAAG,GAAI2zB,UAAU,CAAC,OAAD,CAAV,IAAuBA,UAAU,CAAC,OAAD,CAAV,CAAoBzoE,EAA5C,GACR,KAAK6nE,WAAL,CAAiB,YAAjB,EAA+Bj8E,aAA/B,CAA6CmpD,YAA7C,GAA4Di0B,YAA5D,GAA2E,EADnE,GAER,CAFJ;AAKA,mBAAKnB,WAAL,CAAiB,YAAjB,EAA+Bj8E,aAA/B,CAA6CipD,QAA7C,CAAsD;AAClDG,oBAAI,EAAEA,IAD4C;AAElDF,mBAAG,EAAEA,GAF6C;AAGlDG,wBAAQ,EAAE;AAHwC,eAAtD;AAMA,mBAAK6zB,SAAL,GAAkB5+E,UAAU,CAAC,YAAK;AAC9ByB,uBAAO,IAAI,QAAI,CAACR,SAAL,CAAew9E,WAAf,CAA2Bh9E,OAA3B,EAAoC,MAApC,CAAX;AACA,wBAAI,CAACk9E,SAAL,IAAmB,QAAI,CAAC19E,SAAL,CAAew9E,WAAf,CAA2B,QAAI,CAACE,SAAhC,EAA2C,MAA3C,CAAnB;AACH,eAH2B,EAGzB,IAHyB,CAA5B;AAIH;AACJ;AACJ;AAED;;;;;;;;mCAKkBt9E,C,EAAWC,C,EAAW;AACpC;AACA,cAAID,CAAC,IAAIC,CAAT,EAAY;AACR,iBAAKq8E,WAAL,CAAiB,YAAjB,EAA+Bj8E,aAA/B,CAA6CiB,SAA7C,IAA0DrB,CAAC,IAAI,CAA/D;AACA,iBAAKq8E,WAAL,CAAiB,YAAjB,EAA+Bj8E,aAA/B,CAA6CgB,UAA7C,IAA2DrB,CAAC,IAAI,CAAhE;AACA;;AACA,gBACKC,CAAC,IACE,KAAKq8E,WAAL,CAAiB,YAAjB,EAA+Bj8E,aAA/B,CAA6CiB,SAA7C,IACI,KAAKg7E,WAAL,CAAiB,YAAjB,EAA+Bj8E,aAA/B,CAA6CmpD,YAFrD,IAGCxpD,CAAC,IACE,KAAKs8E,WAAL,CAAiB,YAAjB,EAA+Bj8E,aAA/B,CAA6CgB,UAA7C,IACI,KAAKi7E,WAAL,CAAiB,YAAjB,EAA+Bj8E,aAA/B,CAA6Cq9E,WALrD,IAMCz9E,CAAC,IAAI,KAAKq8E,WAAL,CAAiB,YAAjB,EAA+Bj8E,aAA/B,CAA6CiB,SAA7C,IAA0D,CANhE,IAOCtB,CAAC,IAAI,KAAKs8E,WAAL,CAAiB,YAAjB,EAA+Bj8E,aAA/B,CAA6CgB,UAA7C,IAA2D,CARrE,EASE;AACE,mBAAKhD,aAAL,CAAmB,aAAnB;AACH,aAfO,CAgBZ;;AACC;AACJ;;;wCAEsB;AACnB,eAAKqgB,QAAL,CAAcvc,GAAd,CAAkB,4BAAlB,EAAgD,IAAhD;AACH;;;uCAEqB;AAClB,eAAK9D,aAAL,CAAmB,aAAnB;AACH;AAED;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;qCAEqB;AAAA;;AACjB,cAAMsuC,WAAW,GAAG,KAAKA,WAAzB;AACA,eAAKqvC,eAAL,GAAuB,KAAKn3D,MAAL,CAAYzb,MAAZ,CACnB,UAACvI,CAAD;AAAA,mBACI,CAAC,CAAC,QAAI,CAAC87E,UAAN,IAAoB97E,CAAC,CAACklB,KAAF,CAAQngB,OAAR,CAAgB,QAAI,CAAC+2E,UAArB,KAAoC,CAAzD,MACC,CAAChwC,WAAD,IAAgB9rC,CAAC,CAAC4T,EAAF,KAASk4B,WAAW,CAACl4B,EADtC,KAEA5T,CAAC,CAAC8lB,QAHN;AAAA,WADmB,CAAvB;AAMA,eAAKq1D,eAAL,CAAqBtxE,IAArB,CAA0B,UAACC,CAAD,EAAIC,CAAJ;AAAA,mBAAUD,CAAC,CAAC4mB,UAAF,CAAa1mB,aAAb,CAA2BD,CAAC,CAAC2mB,UAA7B,CAAV;AAAA,WAA1B;AACA,eAAK2qD,WAAL,GAAmB,KAAKr3D,MAAL,CAAYxc,GAAZ,CAAgB,UAACxH,CAAD;AAAA,uCAAoBA,CAAC,CAAC4T,EAAtB;AAAA,WAAhB,CAAnB;AACH;;;4BAtUuB;AACpB,iBAAO,KAAK8uC,sBAAL,CAA4B9nC,OAAnC;AACH;;;4BA+BqB;AAClB,cAAMkvB,GAAG,GAAG,KAAKhZ,IAAL,CAAU7L,QAAtB;AACA;;AACA,cAAI6kB,GAAG,IAAIA,GAAG,CAACgC,WAAf,EAA4B;AACxB,mBAAO,KAAK/a,OAAL,CAAa5rB,IAAb,CAAkB2kC,GAAG,CAACgC,WAAtB,CAAP;AACH;;AACD,iBAAO,IAAP;AACH;;;;MA/GO,OAAA1tC,a;;AAPZ;;;uBAMa+3E,wB,EAAwB,2C,EAAA,sC,EAAA,4C,EAAA,4C,EAAA,uC,EAAA,kC,EAAA,kC,EAAA,+B,EAAA,0C;AAAA,K;;;YAAxBA,wB;AAAwB,wC;AAAA;AAAA;;yBA0DtB,YAAA2G,wB,EAAwB,I;;;;;;;;;;;;;mBA1D1B,c;AAAU,W,EAAA,K,EAAA,kB;;;;;;;;;;;;;;;;;;ACvCvB;AACC;;AAIA;AAAkB;AAAA,mBAAS,IAAAC,aAAA,EAAT;AAAwB,WAAxB;AACjB;AACC;AAMC;AAAA,mBAAU,IAAAC,YAAA,QAAV;AAA8B,WAA9B;AAEA;AACC;AACC;AAAkB;AAAI;AACtB;AAGD;AACD;AACA;AACC;AAUD;AAEA;AAGA;AACC;AACC;AACC;AAkBD;AACD;AACD;AACD;AACD;AAEA;AAGE;AACJ;AACA;;;;AAtEqB;AAAA;AAKO;AAAA;AAYH;AAAA;AAMM;AAAA;AAmBvB;AAAA;AAuBgB;AAAA;AAKI;AAAA;;;;;;;;;;;2BDhCf7G,wB,EAAwB;cANpC,OAAA1wB,SAMoC;eAN1B;AACPlnD,kBAAQ,EAAE,mBADH;AAEPmnD,qBAAW,EAAE,2BAFN;AAGPC,mBAAS,EAAE,CAAC,2BAAD,CAHJ;AAIP4B,yBAAe,EAAE,OAAAC,uBAAA,CAAwBC;AAJlC,S;AAM0B,Q;;;;;;;;;;;;;;;;;;;;;;gBAKhC,OAAAxmD;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAuCA,OAAAioD,S;iBAAU,a,EAAe;AAAE,sBAAQ;AAAV,W;;;gBAEzB,OAAAA,S;iBAAU,YAAA4zB,wB;;;gBAOV,OAAA1rE,Y;iBAAa,e;;;;;;;;;;;;;;;;;;;;;;;;;;;;AExGlB;AAAA;AAAA;;AAMA;AAAA;AAAA;;AAGA;AAAA;AAAA;;AAGA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAGA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBY;AACI;AAII;AAAA;AAAA;AAAA;AAAA;AACJ;AACJ;;;;;AALQ;AAAA,2CAAa,WAAb,EAAa,IAAb,EAAa,UAAb,EAAa,IAAb;;;;;;AAWQ;AACE;AAAI;AAAoJ;AAC1J;;;;;AADM;AAAA;;;;;;AAEN;AACE;AACF;;;;;;AAIU;AAA6B;AAAmB;;;;;AAAnB;AAAA;;;;;;AAC7B;AAA4B;AAAyD;;;;;;AAFvF;AACE;AACA;AACF;;;;;AAFM;AAAA;AACA;AAAA;;;;;;AAIF;AAAyC;AAA8B;;;;;AAA9B;AAAA;;;;;;AAD3C;AACE;AACA;AAAK;AAA0B;AAC/B;AAAK;AAA0B;AAC/B;AAAK;AAAuD;AAC9D;;;;;AAJkB;AAAA;AACX;AAAA;AACA;AAAA;AACA;AAAA;;;;;;;;AAIxB;AAA4D;AAAA;AAAA;AAAA,+CAAS,QAAA8G,IAAA,oFAAT;AAA0D,SAA1D;AAA6D;AAAmE;;;;;;AAAnE;AAAA;;;;;;AAFxG;AAClB;AAAgC;;AAC/B;AACD;AACC;AAAK;AAAgC;AACrC;AAAK;AAAiC;AACtC;AAAK;AAA0B;AAC/B;AAAK;AAAiD;AACxD;;;;;;;AAPiC;AAAA;AACzB;AAAA;AAED;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;;;;;;AAdU;AACE;AAMA;AAUF;;;;;AAhB4B;AAAA;AAMC;AAAA;;;;;;AAW7B;AACI;AACE;AAAK;AAAuE;AAC5E;AAAK;AAA8E;AACnF;AACA;AACE;AACA;AACA;AACJ;AACA;AACJ;;;;;;AAEI;AACI;AACI;AAEJ;AACA;AAAK;AAAkC;AACvC;AAAK;AAAyC;AAClD;;;;;AALQ;AAAA;AAGC;AAAA;AACA;AAAA;;;;;;AAET;AACI;AACA;AACA;AACA;AACA;AACJ;;;;;;AAIJ;AACI;AACI;AACA;AAAG;AAAuB;AAC9B;AACJ;;;;;AAHa;AAAA;AACF;AAAA;;;;;;AAGX;AACI;AACI;AACA;AACE;AACF;AACJ;AACJ;;;;;;AAUE;AAAmB;AAAO;AAAQ;AAAS;AAAW;;;;;AAAX;AAAA;;;;;;AAI3C;AAAgC;AAAO;AAAuD;AAAQ;;;;;;AAPxG;AACE;AAAG;AAAO;AAAK;AAAS;AAA0B;AAClD;AAAG;AAAO;AAAU;AAAS;AAAa;AAC1C;AACA;AAAG;AAAO;AAAY;AAAS;AAAe;AAC9C;AAAG;AAAO;AAAmB;AAAS;AAAa;AACnD;AAAG;AAAO;AAAwB;AAAS;AAAS;AACpD;AACF;;;;;AAP0B;AAAA;AACK;AAAA;AAC1B;AAAA;AAC4B;AAAA;AACO;AAAA;AACK;AAAA;AACxC;AAAA;;;;;;AAEL;AACE;AAAG;AAA8E;AACjF;AAAG;AAA8E;AACjF;AAAG;AAA8E;AACjF;AAAG;AAA8E;AACjF;AAAG;AAA8E;AACjF;AACE;AACA;AACA;AACF;AACF;;;;;;;;AAEJ;AACI;AACE;AAAI;AAAqC;AAA2C;AACpF;AAKI;AAAA;AAAA;AAAA;AAAA;AACH;AAAM;AAAY;AAAO;AAE1B;AACJ;AACF;;;;;AAb2D;AAOjD;AAAA;AAIkB;AAAA;;;;;;AAG5B;AACE;AACE;AACA;AAAI;AAA8E;AAClF;AAAI;AAA8E;AAClF;AAAG;AAAM;AACT;AACF;AAEF;;;;;;AA/CJ;AACI;AACI;AASA;AAYJ;AACA;AAcA;AAUJ;;;;;AA9CsB;AAAA;AASA;AAAA;AAaI;AAAA;AAcS;AAAA;;;;;;AAWnC;AACI;AAAI;AAAoB;AACxB;AAAG;AAAgE;AACnE;AAAG;AAAsC;AAC7C;;;;;;;;AAKR;AACI;AACI;AAA8D;AAAA;AAAA;AAAA;AAAA;AAAuB;AAAoD;AAC7I;AACJ;;;;;AAF6F;AAAA;;;;;;AAG7F;AACE;AACI;AACJ;AACF;;;;;;AAhKZ;AACI;AAQA;AACA;AACI;AACI;AACI;AACI;AAGA;AAGA;AACI;AACI;AAIA;AAkBA;AAYA;AACI;AAQA;AAOJ;AACJ;AACA;AACI;AAMA;AAQJ;AACJ;AACJ;AACA;AACI;AAiDA;AAKJ;AACJ;AACJ;AACA;AACI;AAKA;AAKJ;AACJ;AACJ;AAnKA;;;;;AAC2B;AAAA;AAYU;AAAA;AACH;AAAA;AAGA;AAAA;AAKa;AAAA;AAIL;AAAA;AAkBA;AAAA;AAaI;AAAA;AAQA;AAAA;AASjB;AAAA;AAAqE;AACxD;AAAA;AAMA;AAAA;AAWL;AAAA;AACZ;AAAA;AAiDA;AAAA;AASC;AAAA;AAKA;AAAA;;;;AA1KlC,QAAY29D,gBAAZ;;AAAA,eAAYA,gBAAZ,EAA4B;AACxB;AACA;AACH,KAHD,EAAYA,gBAAgB,GAAhB,QAAAA,gBAAA,aAAAA,gBAAA,GAAgB,EAAhB,CAAZ;;QAqLaoH,4B;;;;;AAsET,4CACY5kE,KADZ,EAEYsqC,OAFZ,EAE2B;AAAA;;AAAA;;AAEvB;AAHQ,iBAAAtqC,KAAA,GAAAA,KAAA;AACA,iBAAAsqC,OAAA,GAAAA,OAAA;AAvEZ;;AACgB,iBAAAkZ,IAAA,GAAyBga,gBAAgB,CAACqH,KAA1C;AAQhB;;AACiB,iBAAAxY,QAAA,GAAW,IAAI,OAAA3hB,YAAJ,EAAX;AA6DU;AAG1B;;;;kCAbgBznB,K,EAAO;AACpB,iBAAOA,KAAK,CAAC37B,KAAN,CAAY6H,GAAZ,CAAgB,UAAAxH,CAAC;AAAA,8BAAQA,CAAC,CAACgmC,MAAV,eAAqBhmC,CAAC,CAACtC,IAAvB;AAAA,WAAjB,EAAgDsN,IAAhD,CAAqD,IAArD,CAAP;AACH;;;2CAEyBswB,K,EAAO;;;AAC7B,iBAAO,CAAP,KAAO,KAAKpjB,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAE5B,OAAF,CAAU/J,WAAV,CAAsB/J,QAAtB,CAA+B;AAAEJ,mBAAO,EAAEk5B,KAAK,SAAL,IAAAA,KAAK,WAAL,GAAK,MAAL,GAAAA,KAAK,CAAEb;AAAlB,WAA/B,EAAkEx3B,UAAlE,CAA6E,OAA7E,CAAhB;AACH;;;uCASsBk6E,U,EAAkB;AACrC,kBAAQA,UAAR;AACI,iBAAK,WAAL;AACI,qBAAO,UAAP;;AACJ,iBAAK,aAAL;AACI,qBAAO,WAAP;;AACJ;AACI,qBAAOA,UAAP;AANR;AAQH;;;kCAEgB;AACb,iBAAQ,KAAKC,SAAL,IAAkB,CAAC,KAAKxiE,OAAzB,IAAqC,KAAKyiE,aAAL,EAA5C;AACH;;;mCAEiB;AACdn2E,gBAAM,CAACyS,IAAP,CAAY,OAAA2jE,IAAA,CAAKC,IAAjB;AACH;;;qCAEyB;;;;;;yBAElB,KAAKC,K;;;;;AACL,yBAAKJ,SAAL,GAAiB,KAAjB;AACA,yBAAKxiE,OAAL,GAAe,KAAf;AACA,yBAAK8pD,QAAL,CAAcrgB,IAAd;;;;;wBAEI,KAAKg5B,aAAL,E;;;;;AACA,yBAAKhlE,KAAL,CAAWolE,QAAX,CAAoB,cAAAxnE,iBAAA,EAApB,E,CACA;;AACA,yBAAKoC,KAAL,CAAWolE,QAAX,CAAoB,cAAAznE,oBAAA,EAApB;;AACA,yBAAK2sC,OAAL,CAAapL,QAAb,CAAsB,CAAC,GAAD,EAAM,MAAN,CAAtB;;;;;;;AAEA,2BAAM,KAAKoL,OAAL,CAAapL,QAAb,CAAsB,CAAC,OAAD,EAAU,SAAV,CAAtB,EAA4C;AAAEgN,iCAAW,EAAE;AAAE32C,+BAAO,EAAE;AAAX;AAAf,qBAA5C,CAAN;;;;;;;;;AAGX;;;wCAE4B;;;;;;;;AACzB,yBAAKyK,KAAL,CAAWolE,QAAX,CAAoB,cAAAznE,oBAAA,EAApB;AACA,yBAAKonE,SAAL,GAAiB,KAAjB;AACA,yBAAKxiE,OAAL,GAAe,KAAf;AACA,yBAAK8pD,QAAL,CAAcrgB,IAAd;;AACA,2BAAM,KAAK1B,OAAL,CAAapL,QAAb,CAAsB,CAAC,GAAD,EAAM,MAAN,EAAc,UAAd,EAA0B,CAAF,KAAE,KAAKr/B,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAE5B,OAAF,CAAU1C,EAA7C,CAAtB,CAAN;;;;;;;;;AACH;;;wCAEsB;;;AACnB,iBAAO,YAAKsE,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAEkO,MAAF,CAASoI,IAAT,CAAcnlB,WAAd,EAAT,MAAyC,aAAhD;AACH;;;4BA7Ge;;;AACjB,iBAAO,CAAP,KAAO,KAAK6O,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAE5B,OAAlB;AACA;;;4BAGoB;;;AACf,iBAAO,CAAP,KAAO,KAAK4B,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAE5B,OAAF,CAAUqe,IAAV,CAAe1P,QAA/B;AACH;;;4BAE+B;;;AAC9B,iBAAO,CAAC,cAAA2J,eAAA,CAAgB,CAAD,KAAC,KAAK1W,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAE5B,OAA3B,EAAoC,KAAK2O,QAAzC,CAAR;AACD;;;4BAEwB;;;AACrB,iBAAO,CAAC,YAAK/M,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAE5B,OAAF,CAAUugB,eAAnB,KAAsC,EAAvC,EAA2C,CAAD,KAC7C,KAAK3e,IADyC,MACrC,IADqC,IACrC,aADqC,GACrC,MADqC,GACrC,GAAE5B,OAAF,CAAUqe,IAAV,CAAe5hB,KADrB,KAEF,gBAFL;AAGH;;;4BAEsB;;;AACnB,iBAAO,CAAC,YAAKmF,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAE5B,OAAF,CAAUygB,kBAAnB,KAAyC,EAA1C,EAA8C,CAAD,KAChD,KAAK7e,IAD4C,MACxC,IADwC,IACxC,aADwC,GACxC,MADwC,GACxC,GAAE5B,OAAF,CAAUqe,IAAV,CAAe5hB,KADrB,KAEF,CAFL;AAGH;;;4BAEsB;;;AACnB,cAAMjJ,CAAC,GAAG4E,KAAK,CAACsB,OAAN,CAAc,CAAD,KAAC,KAAKkI,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAE5B,OAAF,CAAUggB,SAAjC,IAA8C,CAAD,KAAC,KAAKpe,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAE5B,OAAF,CAAUggB,SAAV,CAAoB9uB,GAApB,CAAwB,UAAAk2E,CAAC;AAAA,mBAAI,CAAAA,CAAC,SAAD,IAAAA,CAAC,WAAD,GAAC,MAAD,GAAAA,CAAC,CAAEhgF,IAAH,IAAUggF,CAAC,CAAChgF,IAAZ,GAAmB,EAAvB;AAAA,WAAzB,CAAvD,GAA6G,EAAvH;AACA,iBAAOoM,CAAC,CAACkB,IAAF,CAAO,IAAP,CAAP;AACH;;;4BAEoB;;;AACjB,iBAAO,CAAP,KAAO,KAAKkN,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAE5B,OAAF,CAAU6gB,OAAV,CAAkBnsB,IAAlB,CAAuB,IAAvB,CAAhB;AACH;;;4BAEkB;;;AACf,cAAMmuB,IAAI,GAAG,CAAH,KAAG,KAAKjhB,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAE5B,OAAF,CAAUsgB,KAAV,CAAgBzxB,IAAhB,CAAqB,UAAA0oB,CAAC;AAAA,mBAAIA,CAAC,CAACjnB,IAAF,KAAW,WAAf;AAAA,WAAtB,CAAtB;AACA,iBAAOuyB,IAAI,GAAGA,IAAI,CAAC7f,OAAR,GAAkB,EAA7B;AACH;;;4BAEqB;AAClB,iBAAO,OAAAqkE,mBAAA,CAAoB,KAAKC,WAAzB,CAAP;AACH;;;4BAE4B;;;AACzB,iBAAO,cAAAlvD,oBAAA,CAAqB,KAAKzJ,QAA1B,EAAoC,CAAF,WAAE,KAAK/M,IAAP,MAAW,IAAX,IAAW,aAAX,GAAW,MAAX,GAAW,GAAE5B,OAAX,MAAkB,IAAlB,IAAkB,aAAlB,GAAkB,MAAlB,GAAkB,GAAEwO,KAAxD,KAAkE,cAAA8J,eAAA,CAAgB,CAAD,KAAC,KAAK1W,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAE5B,OAA3B,EAAoC,KAAK2O,QAAzC,CAAzE;AACH;;;;MA5D6C,OAAA7mB,a;;AA1KlD;;;uBA0Ka6+E,4B,EAA4B,8B,EAAA,+B;AAAA,K;;;YAA5BA,4B;AAA4B,2C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,c;AAAA,a;AAAA,0iD;AAAA;AAAA;AAvKjC;;;;AAA0C;;;;;;;;;;2BAuKrCA,4B,EAA4B;cA1KxC,OAAAx3B,SA0KwC;eA1K9B;AACPlnD,kBAAQ,EAAE,sBADH;AAEPw0D,kBAAQ,snYAFD;AAwKPpN,mBAAS,EAAE,CAAC,uCAAD;AAxKJ,S;AA0K8B,Q;;;;;;;;gBAEpC,OAAA1kD;;;gBAEA,OAAAA;;;gBACA,OAAAA;;;gBAEA,OAAAA;;;gBACF,OAAAA,K;iBAAM,qB;;;gBAGJ,OAAA2kD;;;;;;;;;;;;;;;;;;;;;;;;AC7NL;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAGA;AAAA;AAAA;;AAWA;AAAA;AAAA;;AAGA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpBI;AACI;AACA;AAAuB;AAAoB;AAC3C;AAAqC;AAAA;AAAA;AAAA;AAAA;AAArC;AACJ;;;;;AAF2B;AAAA;;;;;;;;AAIzB;AAKI;AAAA;AAAA;AAAA;AAAA;AACJ;;;;;AAJI,6DAA+B,OAA/B,EAA+B,IAA/B,EAA+B,UAA/B,EAA+B,IAA/B;;;;;;AAKJ;;;;;AAEI,6DAA+B,MAA/B,EAA+B,gBAA/B;;;;;;AAuBoB;AACI;AAAK;AAAoB;AACzB;AAAK;AAAoB;AACzB;AAAK;AAAqC;AAC9C;;;;;AAHS;AAAA;AACA;AAAA;AACA;AAAA;;;;;;;;AAItB;AAAsD;AAAA;AAAA;AAAA;AAAA;AAAuD;AAA6D;;;;;;AAA7D;AAAA;;;;;;AAF/G;AACC;AAAgC;;AAC/B;AACD;AACC;AAAK;AAA0B;AAC/B;AAAK;AAA2B;AAChC;AAAK;AAAoB;AACzB;AAAK;AAAqC;AAC5C;;;;;;;AAPiC;AAAA;AACzB;AAAA;AAED;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;;;;;;;;AAkBZ;AACI;AAAuF;AAAA;AAAA;AAAA;AAAA;AAA0B;AAAI;AACrH;AAAkG;AAAA;AAAA;AAAA;AAAA;AAAyD;AAA+E;AAC9O;;;;;AAFsE;AAAA;AAC0D;AAAA;AAA9D;AAA6F;AAAA;;;;;;;;AAE/J;AACE;AAAuF;AAAA;AAAA;AAAA;AAAA;AAA2B;AAAI;AACtH;AAAkG;AAAA;AAAA;AAAA;AAAA;AAAyD;AAAc;AAC3K;;;;;AAFoE;AAAA;AAC0D;AAAA;AAA9D;;;;QD5C7Di4B,sB;;;;;;;;;;;;;mCAGM;AAAA;;AACX;;AACA,eAAKn+E,YAAL,CAAkB,YAAlB,EAAgC,KAAK2Y,KAAL,CAAW5F,IAAX,CAC5B,QAAA4H,MAAA,CAAO,cAAA6O,gBAAP,CAD4B,EAE5B,YAAAq9B,oBAAA,EAF4B,EAG9B3mD,SAH8B,CAGpB,UAACkQ,IAAD,EAAuC;;;AAC/C,gBAAIA,IAAI,KAAIA,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAExN,MAAV,CAAJ,KAAoB,MAAIwN,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEguE,YAAV,MAAsB,IAAtB,IAAsB,aAAtB,GAAsB,MAAtB,GAAsB,GAAEh5D,KAA5C,CAAJ,EAAuD;AACnD,sBAAI,CAAC5M,IAAL,CAAUpI,IAAV,CAAeA,IAAf;;AACA,sBAAI,CAACwG,OAAL,GAAe,QAAI,CAACynE,oBAAL,CAA0BjuE,IAA1B,CAAf;AACH;AACJ,WAR+B,CAAhC,EAFW,CAYf;;AACA,eAAKkuE,qBAAL;AACC;AAGD;;;;;;sCAGqB;AAAA;;AACjB,eAAKpjE,OAAL,GAAe,IAAf;AACA,eAAKtE,OAAL,GAAe,KAAKynE,oBAAL,CAA0B,KAAK7lE,IAAL,CAAUrT,KAApC,CAAf,CAFiB,CAGjB;;AACA,eAAKyR,OAAL,CAAa8P,MAAb,GAAsB,cAAAqV,cAAA,CAAe0nB,QAArC;AACA,wBAAA7zB,eAAA,CACI,KAAKyB,OADT,EAEI,KAAKza,OAFT,EAGE+H,IAHF,CAGO,UAACyH,QAAD,EAAuB;AAC1B,gBAAI,CAACA,QAAL,EAAe;AACX;AACA;AACA;AACA;AACA;AACA,sBAAI,CAACxP,OAAL,CAAa8P,MAAb,GAAsB,cAAAqV,cAAA,CAAewiD,WAArC;AACA;AACH,aATyB,CAW1B;;;AACA,oBAAI,CAACC,iBAAL,CAAuBxlC,IAAvB,CAA4B,QAAI,CAACpiC,OAAjC,EAA0C+H,IAA1C,CACI,UAAC6R,GAAD,EAAS;AAChB;AACA,sBAAI,CAACiuD,4BAAL,CAAkCjuD,GAAlC;AACQ,aAJL,EAKI,UAACzQ,GAAD,EAAS;AACL,kBAAIA,GAAG,CAAC2G,MAAJ,KAAe,GAAnB,EAAwB;AACtB,wBAAI,CAACg4D,yBAAL;AACD,eAFD,MAEO;AAChB,wBAAI,CAACxjE,OAAL,GAAe,KAAf;AACU,wBAAI,CAACwiE,SAAL,GAAiB,KAAjB;;AACC,wBAAI,CAACiB,oBAAL,CAA0B,cAAA/tD,qBAAA,CAAsB7Q,GAAG,CAAC2G,MAA1B,CAA1B;AACD;AACJ,aAbL;AAeH,WA9BD,EA8BE,UAAC3G,GAAD,EAAS;AACH,oBAAI,CAACnf,OAAL,CAAa,OAAb,EAAsB,YAAM;AACnC,sBAAI,CAAC89E,yBAAL;AACQ,aAFD,EAEG,GAFH;AAGH,WAlCL;AAoCH;;;;MAhEuC,8BAAAE,wB;;AAL5C;;;sDAKaT,sB;AAAsB,K;;;YAAtBA,sB;AAAsB,yC;AAAA,+C;AAAA,e;AAAA,c;AAAA,mqC;AAAA;AAAA;AC/BnC;AACI;AAKA;AACE;AAOA;AAKF;AACF;AACI;AACI;AACI;AACI;AACI;AAAI;AAAmC;AACvC;AACI;AACI;AAGI;AAAA,mBAAc,IAAAU,UAAA,QAAd;AAAgC,WAAhC,EAAiC,cAAjC,EAAiC;AAAA,mBACjB,IAAAC,YAAA,QADiB;AACG,WADpC;AAEH;AACL;AACJ;AACA;AACI;AACI;AAAI;AAAsE;AAC1E;AAKf;AAUe;AACI;AAAK;AACiB;AACtB;AAAK;AAAoC;AACzC;AAAK;AAAsC;AAC/C;AACJ;AACJ;AACJ;AACJ;AACJ;AACJ;AACJ;AACA;AACI;AACI;AAIA;AAIJ;AACJ;AACA;AAMI;AAAA,mBAAY,IAAA9Z,QAAA,EAAZ;AAAsB,WAAtB;AACH;AACH;;;;AAvFkG;AAC5D;AAAA;AAO5B;AAAA;AAOA;AAAA;AAUgB;AAAA;AAIQ;AAAA,gDAAmB,eAAnB,EAAmB,mBAAnB;AASA;AAAA;AACC;AAAA;AAKd;AAAA;AAWkB;AAAA;AAEA;AAAA;AACA;AAAA;AAWxB;AAAA;AAIA;AAAA;AAOT;AAAA,oDAAuB,SAAvB,EAAuB,WAAvB,EAAuB,OAAvB,EAAuB,SAAvB,EAAuB,qBAAvB,EAAuB,uBAAvB;;;;;;;uEDjDOmZ,sB;;;;2BAAAA,sB,EAAsB;cALlC,OAAAp4B,SAKkC;eALxB;AACPlnD,kBAAQ,EAAE,oBADH;AAEPmnD,qBAAW,EAAE,oCAFN;AAGPC,mBAAS,EAAE,CAAC,iCAAD;AAHJ,S;AAKwB,Q;;;;;;;;;;;;;;;;;;;;;;AE/BnC;AAAA;AAAA;;AAEE;AAAA;AAAA;;AAMA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAGA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBQ;AAGE;AAAA;AAAA;AAAA;AAAA;AACD;;;;;AAFC;;;;;;AAGF;;;;QAIK84B,2B;;;;;AAKX,2CACWpmE,KADX,EACyC;AAAA;;AAAA;;AAErC;AAFO,iBAAAA,KAAA,GAAAA,KAAA;AAHN,iBAAAuC,OAAA,GAAmB,IAAnB;AAGoC;AAGtC;;;;mCAEY;AAAA;;AAEb,eAAKlb,YAAL,CAAkB,YAAlB,EACE,KAAK2Y,KAAL,CAAW5F,IAAX,CAAgB,YAAA+H,IAAA,CAAK,CAAL,CAAhB,EACH,QAAAH,MAAA,CAAO,cAAA6O,gBAAP,CADG,EAEC,YAAAq9B,oBAAA,EAFD,EAGD3mD,SAHC,CAGS,UAACkQ,IAAD,EAAuC;AAClD,oBAAI,CAAC8K,OAAL,GAAe,KAAf;;AACI,gBAAI9K,IAAI,KAAIA,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAExN,MAAV,CAAR,EAA0B;AACxB,sBAAI,CAACgU,OAAL,GAAe,IAAI,cAAAgQ,OAAJ,CAAYxW,IAAZ,CAAf;AACD;AACJ,WARC,CADF;AAWD;;;;MAxB8C,OAAA1R,a;;AAZjD;;;uBAYaqgF,2B,EAA2B,8B;AAAA,K;;;YAA3BA,2B;AAA2B,+C;AAAA,+C;AAAA,c;AAAA,a;AAAA,oL;AAAA;AAAA;AAVzB;AACP;AAKA;AACF;;;;AALI;AAAA;AAImB;AAAA;;;;;;;;;2BAIhBA,2B,EAA2B;cAZvC,OAAAh5B,SAYuC;eAZ7B;AACTlnD,kBAAQ,EAAE,0BADD;AAETw0D,kBAAQ,+YAFC;AAUTpN,mBAAS,EAAE,CAAC,iCAAD;AAVF,S;AAY6B,Q;;;;;;;;;;;;;;;;;;;;;;;;;;AC1C1C;AAAA;AAAA;;AAOA;AAAA;AAAA;;AAaA;AAAA;AAAA;;AAGA;AAAA;AAAA;;AAGA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AF1BI;AACI;AACA;AAAuB;AAAoB;AAC3C;AAAqC;AAAA;AAAA;AAAA;AAAA;AAArC;AACJ;;;;;AAF2B;AAAA;;;;;;;;AAIzB;AAKI;AAAA;AAAA;AAAA;AAAA;AACJ;;;;;AAJI,6DAA+B,OAA/B,EAA+B,IAA/B,EAA+B,UAA/B,EAA+B,IAA/B;;;;;;AAKJ;;;;;AAEI,6DAA+B,MAA/B,EAA+B,gBAA/B;;;;;;AAuBoB;AACI;AAAK;AAAoB;AACzB;AAAK;AAAoB;AACzB;AAAK;AAAqC;AAC9C;;;;;AAHS;AAAA;AACA;AAAA;AACA;AAAA;;;;;;;;AAItB;AAAsD;AAAA;AAAA;AAAA;AAAA;AAAuD;AAA6D;;;;;;AAA7D;AAAA;;;;;;AAF/G;AACC;AAAgC;;AAC/B;AACD;AACC;AAAK;AAA0B;AAC/B;AAAK;AAA2B;AAChC;AAAK;AAAoB;AACzB;AAAK;AAAqC;AAC5C;;;;;;;AAPiC;AAAA;AACzB;AAAA;AAED;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;;;;;;;;AAkBZ;AACI;AAAuF;AAAA;AAAA;AAAA;AAAA;AAA0B;AAAI;AACrH;AAAkG;AAAA;AAAA;AAAA;AAAA;AAAyD;AAA+E;AAC9O;;;;;AAFsE;AAAA;AAC0D;AAAA;AAA9D;AAA6F;AAAA;;;;;;;;AAE/J;AACE;AAAuF;AAAA;AAAA;AAAA;AAAA;AAA2B;AAAI;AACtH;AAAkG;AAAA;AAAA;AAAA;AAAA;AAAyD;AAAc;AAC3K;;;;;AAFoE;AAAA;AAC0D;AAAA;AAA9D;;;;QEzC7D+4B,oB;;;;;AALb;AAAA;;AAAA;;;AAOmB,iBAAAC,cAAA,GAAiB,IAAI,OAAA57B,YAAJ,EAAjB;AAPnB;AAuMC;;;;mCA7LgB;AAAA;;;;AACb;;AAEA,eAAKrjD,YAAL,CAAkB,YAAlB,EAAgC,KAAK2Y,KAAL,CAAW5F,IAAX,CAC9B,QAAA4H,MAAA,CAAO,cAAA6O,gBAAP,CAD8B,EAE9B,YAAAq9B,oBAAA,EAF8B,EAG9B3mD,SAH8B,CAGpB,UAACkQ,IAAD,EAAuC;;;AACjD,gBAAIA,IAAI,KAAIA,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAExN,MAAV,CAAJ,KAAoB,MAAIwN,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEguE,YAAV,MAAsB,IAAtB,IAAsB,aAAtB,GAAsB,MAAtB,GAAsB,GAAEh5D,KAA5C,CAAJ,EAAuD;AACrD,sBAAI,CAAC5M,IAAL,CAAUpI,IAAV,CAAeA,IAAf;;AACA,sBAAI,CAAC8uE,YAAL,GAAoB9uE,IAAI,CAAC8C,MAAL,KAAgB,cAAA2W,YAAA,CAAaC,IAAjD;AACD;AACF,WAR+B,CAAhC;AAUA,eAAKg0D,KAAL,GAAa,CAAC,KAAKoB,YAAnB;AACA,eAAKC,SAAL,GAAiB,KAAKvoE,OAAL,CAAawO,KAAb,CAAmB/R,KAApC;AACA,cAAMujB,SAAS,GAAI,wBAAKpe,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAErT,KAAX,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAEyxB,SAAlB,MAA2B,IAA3B,IAA2B,aAA3B,GAA2B,MAA3B,GAA2B,GAAEzyB,MAA7B,MAAmC,kBAAI,KAAKqU,IAAT,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAErT,KAAf,MAAoB,IAApB,IAAoB,aAApB,GAAoB,MAApB,GAAoB,GAAEyxB,SAAF,CAAY,CAAZ,CAApB,MAAiC,IAAjC,IAAiC,aAAjC,GAAiC,MAAjC,GAAiC,GAAGzP,IAAvE,CAAD,GACb,KAAK3O,IAAL,CAAUrT,KAAV,CAAgByxB,SADH,GAEd,KAAKhgB,OAAL,CAAaggB,SAAb,CAAuB/tB,MAAvB,CAA8B,UAAAu2E,EAAE;AAAA,mBAAIA,EAAE,CAACphF,IAAH,KAAY,EAAZ,IAAkBohF,EAAE,CAAC/rE,KAAH,KAAY,EAAlC;AAAA,WAAhC,EAAsEvL,GAAtE,CAA0E,UAAAk2E,CAAC,EAAI;AAC7E,mBAAO;AACL74E,mBAAK,EAAE64E,CAAC,CAAC3qE,KADJ;AAELnF,qBAAO,EAAE8vE,CAAC,CAAChgF,IAFN;AAGLquB,qBAAO,EAAE,KAHJ;AAILpC,yBAAW,EAAE,IAJR;AAKLtG,0BAAY,EAAEq6D,CAAC,CAAChgF,IALX;AAMLmpB,kBAAI,EAAE;AAAEiU,wBAAQ,EAAE4iD,CAAC,CAAC5iD,QAAd;AAAwBvgB,oBAAI,EAAEmjE,CAA9B;AAAiC3f,qBAAK,EAAE2f,CAAC,CAAC3qE,KAAF,CAAQ1J,WAAR,GAAsBoS,QAAtB,CAA+B,WAA/B,IAA8C,UAA9C,GAA2D;AAAnG;AAND,aAAP;AAQD,WATD,CAFJ;AAaA,cAAM0b,OAAO,GAAI,wBAAKjf,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAErT,KAAX,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAEsyB,OAAlB,MAAyB,IAAzB,IAAyB,aAAzB,GAAyB,MAAzB,GAAyB,GAAEtzB,MAA3B,MAAiC,kBAAI,KAAKqU,IAAT,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAErT,KAAf,MAAoB,IAApB,IAAoB,aAApB,GAAoB,MAApB,GAAoB,GAAEsyB,OAAF,CAAU,CAAV,CAApB,MAA+B,IAA/B,IAA+B,aAA/B,GAA+B,MAA/B,GAA+B,GAAGpL,OAAnE,CAAD,GACZ,CAAD,WAAC,KAAK7T,IAAN,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAErT,KAAX,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAEsyB,OADN,GAEZ,KAAK7gB,OAAL,CAAa6gB,OAAb,CAAqB3vB,GAArB,CAAyB,UAAAk2E,CAAC,EAAI;AAC9B,mBAAO;AACL74E,mBAAK,EAAE64E,CADF;AAEL9vE,qBAAO,EAAE8vE,CAFJ;AAGL3xD,qBAAO,EAAE,KAHJ;AAILpC,yBAAW,EAAE,IAJR;AAKLtG,0BAAY,EAAEq6D;AALT,aAAP;AAOD,WARC,CAFJ;AAYA,cAAMpzB,UAAU,GAAG,YAAKh0C,OAAL,MAAY,IAAZ,IAAY,aAAZ,GAAY,MAAZ,GAAY,GAAEygB,kBAAF,CAAqB,KAAK8nD,SAA1B,CAAZ,IAAmD,CAAD,KAAC,KAAKvoE,OAAL,MAAY,IAAZ,IAAY,aAAZ,GAAY,MAAZ,GAAY,GAAEygB,kBAAF,CAAqB,KAAK8nD,SAA1B,CAA/D,GAAsG,CAAzH;AACA,cAAMhzD,IAAI,GAAG,YAAKvV,OAAL,MAAY,IAAZ,IAAY,aAAZ,GAAY,MAAZ,GAAY,GAAEugB,eAAF,CAAkB,KAAKgoD,SAAvB,CAAZ,IAAgD,CAAD,KAAC,KAAKvoE,OAAL,MAAY,IAAZ,IAAY,aAAZ,GAAY,MAAZ,GAAY,GAAEugB,eAAF,CAAkB,KAAKgoD,SAAvB,CAA5D,GAAgG,EAA7G;AACA,cAAMtoD,SAAS,GAAI,kBAAKre,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAErT,KAAX,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAE0xB,SAAlB,MAA2B,kBAAI,KAAKre,IAAT,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAErT,KAAf,MAAoB,IAApB,IAAoB,aAApB,GAAoB,MAApB,GAAoB,GAAE0xB,SAAtB,MAA+B,IAA/B,IAA+B,aAA/B,GAA+B,MAA/B,GAA+B,GAAE1P,IAA5D,CAAD,GACd,CAAD,WAAC,KAAK3O,IAAN,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAErT,KAAX,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAE0xB,SADJ,GAEd;AACA3oB,mBAAO,EAAE,KAAK0I,OAAL,CAAaigB,SAAb,CAAuB74B,IADhC;AAEAmH,iBAAK,EAAE,KAAKyR,OAAL,CAAaigB,SAAb,CAAuBxjB,KAF9B;AAGA8T,gBAAI,EAAE;AAAEtM,kBAAI,EAAE,KAAKjE,OAAL,CAAaigB;AAArB;AAHN,WAFJ;AAOA,cAAMK,KAAK,GAAGloB,KAAK,CAACsB,OAAN,CAAc,KAAKsG,OAAL,CAAasgB,KAA3B,IAAoC,CAAD,KAAE,KAAKtgB,OAAL,CAAasgB,KAAb,CAAmBzxB,IAAnB,CAAwB,UAAA0oB,CAAC;AAAA,mBAAIA,CAAC,CAACjnB,IAAF,KAAW,WAAf;AAAA,WAAzB,CAAD,MAAqD,IAArD,IAAqD,aAArD,GAAqD,MAArD,GAAqD,GAAE0S,OAA3F,GAAqG,KAAKhD,OAAL,CAAasgB,KAAhI;AACA,cAAMknD,YAAY,GAAG,kBAAK5lE,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAErT,KAAX,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAEi5E,YAAlB,IAClB,YACD,KAAK5lE,IADJ,MACQ,IADR,IACQ,aADR,GACQ,MADR,GACQ,GAAErT,KADV,MACe,IADf,IACe,aADf,GACe,MADf,GACe,GAAEi5E,YAFC,GAInB;AACEh5D,iBAAK,EAAE,KAAKxO,OAAL,CAAaqe;AADtB,WAJF;AAQE,cAAM5e,OAAO,GAAG,MAAH,OAAG,CAAH,kBACR,KAAKO,OAAL,CAAayH,MAAb,EADQ,CAAG,EACU;AACxBuY,qBAAS,EAATA,SADwB;AAExBzK,gBAAI,EAAJA,IAFwB;AAGxBy+B,sBAAU,EAAVA,UAHwB;AAIxB1zB,iBAAK,EAALA,KAJwB;AAKxBL,qBAAS,EAATA,SALwB;AAMxBunD,wBAAY,EAAZA,YANwB;AAOxB3mD,mBAAO,EAAPA;AAPwB,WADV,CAAhB;AAUF,eAAK9e,KAAL,CAAWolE,QAAX,CAAoB,cAAA5nE,oBAAA,CAAqB;AACvCE,mBAAO,EAAEA;AAD8B,WAArB,CAApB;;AAIA,cAAG,KAAK6oE,YAAR,EAAsB;AACpB,iBAAKtoE,OAAL,GAAe,KAAKynE,oBAAL,CAA0B,KAAK7lE,IAAL,CAAUrT,KAApC,EAA2C,KAAK+5E,YAAhD,CAAf;AACD,WA1EY,CA2Eb;;;AACA,eAAKZ,qBAAL;AAGD;;;oCAEkB1nE,O,EAAS6iB,I,EAAMxE,I,EAAM;AAAA;;AACtC,cAAMiC,KAAK,GAAG,EAAd;;AACA,cAAMgQ,aAAa,GAAG,KAAKghB,qBAAL,CAA2Bm3B,QAA3B,EAAtB;;AACA,cAAMC,eAAe,GAAG1oE,OAAO,CAACsgB,KAAR,CAAczxB,IAAd,CAAmB,UAAAg0B,IAAI;AAAA,mBAAIA,IAAI,CAACvyB,IAAL,KAAc,WAAlB;AAAA,WAAvB,CAAxB;AACA,cAAMq4E,cAAc,GAAG3oE,OAAO,CAACsgB,KAAR,CAAczxB,IAAd,CAAmB,UAAAg0B,IAAI;AAAA,mBAAIA,IAAI,CAACvyB,IAAL,KAAc,UAAlB;AAAA,WAAvB,CAAvB;;AAEA,cAAIggC,aAAa,CAAC/iC,MAAd,IAAwB,CAACo7E,cAA7B,EAA6C;AAC3CroD,iBAAK,CAACptB,IAAN,CAAWo9B,aAAa,CAAC,CAAD,CAAxB;AACD;;AAED,cAAIo4C,eAAJ,EAAqB;AACnB1oE,mBAAO,CAACsgB,KAAR,CAAcpvB,GAAd,CAAkB,UAAA6C,IAAI,EAAI;AACxB,kBAAMiP,OAAO,GAAGstB,aAAa,CAAC/iC,MAAd,IAAwBwG,IAAI,CAACzD,IAAL,KAAc,UAAtC,GAAmDggC,aAAa,CAAC,CAAD,CAAb,CAAiBttB,OAApE,GAA8EjP,IAAI,CAACiP,OAAnG;AAEAsd,mBAAK,CAACptB,IAAN,CAAW,MAAD,OAAC,CAAD,kBACLa,IADK,CAAC,EACF;AACP2uB,sBAAM,EAAG,QAAI,CAAC/U,WAAL,CAAiBvmB,IADnB;AAEP4b,uBAAO,EAAGjP,IAAI,CAACzD,IAAL,KAAc,WAAd,GAA4BuyB,IAA5B,GAAmC7f,OAFtC;AAGPwL,qBAAK,EAAEza,IAAI,CAACzD,IAAL,KAAc,WAAd,GAA4B+tB,IAA5B,GAAmCtqB,IAAI,CAACya,KAHxC;AAIPnjB,oBAAI,EAAE0I,IAAI,CAACzD,IAAL,KAAc,WAAd,GAA4B,IAAIrF,IAAJ,GAAW44B,OAAX,EAA5B,GAAmD9vB,IAAI,CAAC1I;AAJvD,eADE,CAAX;AAOD,aAVD;AAWD,WAZD,MAYO;AACL,gBAAIw3B,IAAJ,EAAU;AACRvC,mBAAK,CAACptB,IAAN,CAAW;AACTwvB,sBAAM,EAAE,KAAK/U,WAAL,CAAiBvmB,IADhB;AAETkJ,oBAAI,EAAE,WAFG;AAGT0S,uBAAO,EAAE6f,IAHA;AAITrU,qBAAK,EAAE6P,IAJE;AAKThzB,oBAAI,EAAE,IAAIJ,IAAJ,GAAW44B,OAAX;AALG,eAAX;AAOD;AACF;;AACD,iBAAOvD,KAAP;AACD;AAED;;;;;;sCAGqB;AAAA;;;;AACnB,cAAMsoD,iBAAiB,GAAG,KAAKhnE,IAAL,CAAUrT,KAApC;;AAEA,cAAG,CAAC,KAAK+5E,YAAT,EAAuB;AACvB;AACG,gBAAMtoE,OAAO,GAAGusB,SAAS,CAAC,KAAKvsB,OAAN,CAAzB;AAEJA,mBAAO,CAACmY,KAAR,GAAgBywD,iBAAiB,CAACzwD,KAAlC;AACAnY,mBAAO,CAACggB,SAAR,GAAoB,KAAK6oD,eAAL,CAAqBD,iBAAiB,CAAC5oD,SAAvC,CAApB;AACAhgB,mBAAO,CAAC6gB,OAAR,GAAkB,KAAKioD,aAAL,CAAmBF,iBAAiB,CAAC/nD,OAArC,CAAlB;AACA7gB,mBAAO,CAACsgB,KAAR,GAAgB,KAAKyoD,WAAL,CAAiB,KAAK/oE,OAAtB,EAA+B4oE,iBAAiB,CAACtoD,KAAjD,EAAwD,KAAKioD,SAA7D,CAAhB;AAAwF;AACxFvoE,mBAAO,CAACugB,eAAR,uBAA6B,KAAKgoD,SAAlC,EAA8CK,iBAAiB,CAACrzD,IAAhE;AACAvV,mBAAO,CAACygB,kBAAR,uBAAgC,KAAK8nD,SAArC,EAAiDK,iBAAiB,CAAC50B,UAAnE;AACAh0C,mBAAO,CAACigB,SAAR,GAAoB,CAAH,KAAG2oD,iBAAiB,CAAC3oD,SAAlB,MAA2B,IAA3B,IAA2B,aAA3B,GAA2B,MAA3B,GAA2B,GAAE1P,IAAF,CAAOtM,IAAtD;AACA,gBAAMwpC,eAAe,GAAGm7B,iBAAiB,CAACtoD,KAAlB,KAAuB,MAAIsoD,iBAAiB,CAACtoD,KAAtB,MAA2B,IAA3B,IAA2B,aAA3B,GAA2B,MAA3B,GAA2B,GAAE/yB,MAApD,wBAA+D,aAAAq7E,iBAAiB,CAACpB,YAAlB,MAA8B,IAA9B,IAA8B,aAA9B,GAA8B,MAA9B,GAA8B,GAAEh5D,KAAhC,MAAqC,IAArC,IAAqC,aAArC,GAAqC,MAArC,GAAqC,GAAE/R,KAAvC,MAA4C,MAAIuD,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAEwO,KAAb,MAAkB,IAAlB,IAAkB,aAAlB,GAAkB,MAAlB,GAAkB,GAAE/R,KAAhE,CAA/D,EAAuI,GAAvI,IAA8I,IAAtK,CAXwB,CAWoJ;AAC5K;;AACA,gBAAIgxC,eAAJ,EAAqB;AACnBztC,qBAAO,CAAC+F,KAAR,GAAgB0nC,eAAhB;AACAztC,qBAAO,CAACoZ,SAAR,GAAoBq0B,eAApB;AACD;;AACEztC,mBAAO,CAACihB,OAAR,GAAkB2nD,iBAAiB,CAAC3nD,OAApC;AACH,iBAAKjhB,OAAL,GAAeA,OAAf;AACC,WAnBA,MAoBI;AACL,iBAAKA,OAAL,GAAe,KAAKynE,oBAAL,CAA0BmB,iBAA1B,EAA6C,KAAKN,YAAlD,CAAf;AACC;;AAGA,eAAKhkE,OAAL,GAAe,IAAf;AACA,wBAAA0U,eAAA,CACE,KAAKyB,OADP,EAEE,KAAKza,OAFP,EAGE+H,IAHF,CAGO,UAACyH,QAAD,EAAuB;AAC1B;AACA,gBAAIA,QAAJ,EAAc;AAEZ,sBAAI,CAACo4D,iBAAL,CAAuBxlC,IAAvB,CAA4B,QAAI,CAACpiC,OAAjC,EAA2C,QAAI,CAACsoE,YAAhD,EAA8DvgE,IAA9D,CACE,UAAC6R,GAAD,EAAS;AACP;AACA,wBAAI,CAACiuD,4BAAL,CAAkCjuD,GAAlC,EAFO,CAGP;;;AACA,wBAAI,CAACyuD,cAAL,IAAuB,QAAI,CAACA,cAAL,CAAoBt6B,IAApB,CAAyB,QAAI,CAAC/tC,OAA9B,CAAvB;AAED,eAPH,EAQE,UAACmJ,GAAD,EAAS;AACP,oBAAIA,GAAG,CAAC2G,MAAJ,KAAe,GAAnB,EAAwB;AACtB,0BAAI,CAACg4D,yBAAL;AACD,iBAFD,MAEO;AACL,0BAAI,CAACxjE,OAAL,GAAe,KAAf;AACA,0BAAI,CAACwiE,SAAL,GAAiB,KAAjB;;AACA,0BAAI,CAACiB,oBAAL,CAA0B,cAAA/tD,qBAAA,CAAsB7Q,GAAG,CAAC2G,MAA1B,CAA1B;AACD;AACF,eAhBH;AAkBD,aApBD,MAoBO;AACL,sBAAI,CAACg4D,yBAAL;;AACA;AACD;AACJ,WA7BD,EA8BE,UAAC3+D,GAAD,EAAS;AACP,oBAAI,CAAC2+D,yBAAL;AACD,WAhCH;AAkCD;;;mCAEiB;AAChB,eAAKkB,aAAL,CAAmBj7B,IAAnB,CAAwB,IAAxB;AACD;;;;MAhMuC,8BAAAi6B,wB;;AAL1C;;;oDAKaI,oB;AAAoB,K;;;YAApBA,oB;AAAoB,uC;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,e;AAAA,c;AAAA,mqC;AAAA;AAAA;AFlCjC;AACI;AAKA;AACE;AAOA;AAKF;AACF;AACI;AACI;AACI;AACI;AACI;AAAI;AAAmC;AACvC;AACI;AACI;AAGI;AAAA,mBAAc,IAAAH,UAAA,QAAd;AAAgC,WAAhC,EAAiC,cAAjC,EAAiC;AAAA,mBACjB,IAAAC,YAAA,QADiB;AACG,WADpC;AAEH;AACL;AACJ;AACA;AACI;AACI;AAAI;AAAsE;AAC1E;AAKf;AAUe;AACI;AAAK;AACiB;AACtB;AAAK;AAAoC;AACzC;AAAK;AAAsC;AAC/C;AACJ;AACJ;AACJ;AACJ;AACJ;AACJ;AACJ;AACA;AACI;AACI;AAIA;AAIJ;AACJ;AACA;AAMI;AAAA,mBAAY,IAAA9Z,QAAA,EAAZ;AAAsB,WAAtB;AACH;AACH;;;;AAvFkG;AAC5D;AAAA;AAO5B;AAAA;AAOA;AAAA;AAUgB;AAAA;AAIQ;AAAA,gDAAmB,eAAnB,EAAmB,mBAAnB;AASA;AAAA;AACC;AAAA;AAKd;AAAA;AAWkB;AAAA;AAEA;AAAA;AACA;AAAA;AAWxB;AAAA;AAIA;AAAA;AAOT;AAAA,oDAAuB,SAAvB,EAAuB,WAAvB,EAAuB,OAAvB,EAAuB,SAAvB,EAAuB,qBAAvB,EAAuB,uBAAvB;;;;;;;qEE9COga,oB;;;;2BAAAA,oB,EAAoB;cALhC,OAAAj5B,SAKgC;eALtB;AACTlnD,kBAAQ,EAAE,kBADD;AAETmnD,qBAAW,EAAE,oCAFJ;AAGTC,mBAAS,EAAE,CAAC,iCAAD;AAHF,S;AAKsB,Q;;gBAC9B,OAAA1kD;;;gBACA,OAAA2kD;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpCH;AAAA;AAAA;;AAMA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAGA;AAAA;AAAA;;AAUA;AAAA;AAAA;;AAoBA;AAAA;AAAA;;AAGA;AAAA;AAAA;;AASA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AH1DI;AACI;AACA;AAAuB;AAAoB;AAC3C;AAAqC;AAAA;AAAA;AAAA;AAAA;AAArC;AACJ;;;;;AAF2B;AAAA;;;;;;;;AAIzB;AAKI;AAAA;AAAA;AAAA;AAAA;AACJ;;;;;AAJI,6DAA+B,OAA/B,EAA+B,IAA/B,EAA+B,UAA/B,EAA+B,IAA/B;;;;;;AAKJ;;;;;AAEI,6DAA+B,MAA/B,EAA+B,gBAA/B;;;;;;AAuBoB;AACI;AAAK;AAAoB;AACzB;AAAK;AAAoB;AACzB;AAAK;AAAqC;AAC9C;;;;;AAHS;AAAA;AACA;AAAA;AACA;AAAA;;;;;;;;AAItB;AAAsD;AAAA;AAAA;AAAA;AAAA;AAAuD;AAA6D;;;;;;AAA7D;AAAA;;;;;;AAF/G;AACC;AAAgC;;AAC/B;AACD;AACC;AAAK;AAA0B;AAC/B;AAAK;AAA2B;AAChC;AAAK;AAAoB;AACzB;AAAK;AAAqC;AAC5C;;;;;;;AAPiC;AAAA;AACzB;AAAA;AAED;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;;;;;;;;AAkBZ;AACI;AAAuF;AAAA;AAAA;AAAA;AAAA;AAA0B;AAAI;AACrH;AAAkG;AAAA;AAAA;AAAA;AAAA;AAAyD;AAA+E;AAC9O;;;;;AAFsE;AAAA;AAC0D;AAAA;AAA9D;AAA6F;AAAA;;;;;;;;AAE/J;AACE;AAAuF;AAAA;AAAA;AAAA;AAAA;AAA2B;AAAI;AACtH;AAAkG;AAAA;AAAA;AAAA;AAAA;AAAyD;AAAc;AAC3K;;;;;AAFoE;AAAA;AAC0D;AAAA;AAA9D;;;;QGH7D04B,wB;;;;;AAiCX,wCACSzgE,QADT,EAESxF,KAFT,EAGSo+D,MAHT,EAISyH,iBAJT,EAKSx7B,sBALT,EAMS3xB,OANT,EAOS62B,qBAPT,EAQS23B,MART,EASU9yC,MATV,EAS8B;AAAA;;AAAA;;AAE5B;AAVO,iBAAA5uB,QAAA,GAAAA,QAAA;AACA,iBAAAxF,KAAA,GAAAA,KAAA;AACA,iBAAAo+D,MAAA,GAAAA,MAAA;AACA,iBAAAyH,iBAAA,GAAAA,iBAAA;AACA,iBAAAx7B,sBAAA,GAAAA,sBAAA;AACA,iBAAA3xB,OAAA,GAAAA,OAAA;AACA,iBAAA62B,qBAAA,GAAAA,qBAAA;AACA,iBAAA23B,MAAA,GAAAA,MAAA;AACC,iBAAA9yC,MAAA,GAAAA,MAAA;AAzCH,iBAAAopC,gBAAA,GAAmB,0BAAAA,gBAAnB;AAEA,iBAAAC,SAAA,GAA0B;AAC/Bt6D,eAAK,EAAE,CAAC,OAAD,EAAU,SAAV,EAAqB,MAArB,CADwB;AAE/B+oC,qBAAW,EAAE;AAFkB,SAA1B;AAKU,iBAAA+6B,aAAA,GAAgB,IAAI,OAAAv8B,YAAJ,EAAhB,CAkCa,CAhC9B;;AACO,iBAAAy6B,KAAA,GAAQ,KAAR;AACA,iBAAAtlE,IAAA,GAAO,IAAI,OAAA9a,eAAJ,CAAiDwG,SAAjD,CAAP;AAEA,iBAAAw5E,SAAA,GAAqB,KAArB;AAMA,iBAAA9mE,OAAA,GAAmB,IAAI,cAAAgQ,OAAJ,CAAY,EAAZ,CAAnB;AAGA,iBAAAk5D,WAAA,GAAuB,IAAvB;AACA,iBAAAC,iBAAA,GAA6B,KAA7B;AAIP,iBAAAb,YAAA,GAAwB,KAAxB,CAc8B,CAb9B;;AACO,iBAAAjmB,eAAA,GAA2B,KAA3B;AAYuB;AAG7B;;;;mCAEc;AAAA;;AACb,eAAKj5D,YAAL,CAAkB,aAAlB,EAAiC,KAAK2Y,KAAL,CAAWgC,MAAX,CAAkB,OAAAC,iBAAlB,EAC9B7H,IAD8B,CACzB,YAAA+H,IAAA,CAAK,CAAL,CADyB,EAE9B5a,SAF8B,CAEpB,UAAC2a,IAAD,EAA4B;AACrC;AACA,oBAAI,CAAC0J,WAAL,GAAmB,IAAI,cAAAgS,IAAJ,CAAS1b,IAAT,CAAnB;AACD,WAL8B,CAAjC;AASD;;;wCAoC4B;;;;;;;AAC3B,2BAAM,KAAKk8D,MAAL,CAAYl/B,QAAZ,CAAqB,KAAKu+B,SAAL,CAAet6D,KAApC,EAA2C;AAAE+oC,iCAAW,EAAE,KAAKuxB,SAAL,CAAevxB;AAA9B,qBAA3C,CAAN;;;;;;;;;AACD;AAED;;;;;;wCAGuB;AACrB;AACA,eAAKm7B,eAAL,GAAuB,IAAIn+E,IAAJ,GAAW44B,OAAX,EAAvB;AACD,S,CAED;;;;mCACkB0wB,S,EAAgB;AAChC,cAAIr0B,OAAJ;;AACA,cAAIq0B,SAAS,CAAC80B,YAAd,EAA4B;AAC1B,gBAAI90B,SAAS,CAACt0B,SAAV,CAAoB1xB,KAApB,KAA8B,KAAKof,WAAL,CAAiBlR,KAAnD,EAA0D;AACxDyjB,qBAAO,GAAG,KAAKvS,WAAf;AACD;AACF,WAN+B,CAQhC;AACA;AACA;AACA;;;AACA,eAAK5L,KAAL,CAAWolE,QAAX,CAAoB,cAAA5nE,oBAAA,CAAqB;AACvCE,mBAAO,EAAE,MAAF,OAAE,CAAF,kBACF,KAAKO,OAAL,CAAayH,MAAb,EADE,CAAE,EACiB;AACxBuY,uBAAS,EAAEu0B,SAAS,CAACv0B,SADG;AAExBzK,kBAAI,EAAEg/B,SAAS,CAACh/B,IAFQ;AAGxBy+B,wBAAU,EAAEO,SAAS,CAACP,UAHE;AAIxB1zB,mBAAK,EAAEi0B,SAAS,CAACj0B,KAJO;AAKxBL,uBAAS,EAAEs0B,SAAS,CAACt0B,SALG;AAMxBC,qBAAO,EAAPA,OANwB;AAOxB/H,mBAAK,EAAEo8B,SAAS,CAACp8B,KAPO;AAQxB0I,qBAAO,EAAE0zB,SAAS,CAAC1zB,OARK;AASxBI,qBAAO,EAAEszB,SAAS,CAACtzB;AATK,aADjB;AAD8B,WAArB,CAApB;AAcA,eAAKqoD,WAAL;AACD,S,CAED;;;;qCACoBr6D,K,EAAgB;AAClC,eAAKi6D,WAAL,GAAmB,CAACj6D,KAApB;AACD;;;mCAEiB4T,I,EAAc0lD,S,EAAmB;AACjD,cAAI1lD,IAAI,IAAIA,IAAI,CAACt1B,MAAjB,EAA2B;AACzB;AACA,mBAAO,CAAC;AACNm1B,oBAAM,EAAE,KAAK/U,WAAL,CAAiBvmB,IADnB;AAENkJ,kBAAI,EAAE,WAFA;AAGN0S,qBAAO,EAAE,CAAC5K,KAAK,CAACsB,OAAN,CAAcmpB,IAAd,CAAD,GAAwBA,IAAxB,GAA+BA,IAAI,CAAC,CAAD,CAAJ,CAAQ7f,OAH1C;AAINwL,mBAAK,EAAE+5D,SAJD;AAKNl9E,kBAAI,EAAE,IAAIJ,IAAJ,GAAW44B,OAAX;AALA,aAAD,CAAP;AAOD;;AAED,iBAAO,EAAP;AACD;;;wCAEsB7D,S,EAAkB;AACvC,iBAAO,CAACA,SAAD,GAAa,EAAb,GAAkBA,SAAS,CAAC9uB,GAAV,CAAc,UAAAsC,CAAC,EAAI;;;AAC1C,gBAAI+1E,QAAQ,GAAG;AACb5jC,wBAAU,EAAE,EADC;AAEbC,uBAAS,EAAE,EAFE;AAGbnpC,mBAAK,EAAE,EAHM;AAIbrV,kBAAI,EAAE,EAJO;AAKbkJ,kBAAI,EAAE,UALO;AAMbk0B,sBAAQ,EAAE,KANG;AAOb8f,qBAAO,EAAE;AAPI,aAAf;;AASA,gBAAI,CAAJ,KAAI9wC,CAAC,CAAC+c,IAAF,MAAM,IAAN,IAAM,aAAN,GAAM,MAAN,GAAM,GAAEiU,QAAZ,EAAsB;AACpB;AACA,kBAAMglD,SAAS,GAAGh2E,CAAC,CAAC8D,OAAF,CAAUjK,KAAV,CAAgB,GAAhB,CAAlB;AACA,kBAAME,MAAM,GAAGi8E,SAAS,CAACj8E,MAAzB;;AACA,kBAAIA,MAAJ,EAAY;AACVg8E,wBAAQ,CAAC5jC,UAAT,GAAsB6jC,SAAS,CAAC,CAAD,CAA/B;AACAD,wBAAQ,CAACniF,IAAT,GAAgBoiF,SAAS,CAAC90E,IAAV,CAAe,GAAf,CAAhB;AACD;;AACD,kBAAInH,MAAM,GAAG,CAAb,EAAgB;AACdi8E,yBAAS,CAAC1lD,KAAV;AACAylD,wBAAQ,CAAC3jC,SAAT,GAAqB4jC,SAAS,CAAC90E,IAAV,CAAe,GAAf,CAArB;AACD;;AACD60E,sBAAQ,CAAC9sE,KAAT,GAAiB,CAAH,KAAGjJ,CAAC,CAACjF,KAAF,MAAO,IAAP,IAAO,aAAP,GAAO,EAAP,aAAc5C,IAAI,CAACY,KAAL,CAAWZ,IAAI,CAACuJ,MAAL,KAAgB,KAA3B,CAAd,wBAAjB;AACAq0E,sBAAQ,CAACj5E,IAAT,GAAgB,UAAhB,CAboB,CAaQ;;AAC5Bi5E,sBAAQ,CAAC/kD,QAAT,GAAoB,IAApB;AACA+kD,sBAAQ,CAACjlC,OAAT,GAAmB,IAAnB;AACD,aAhBD,MAgBO,IAAI,CAAJ,KAAI9wC,CAAC,CAAC+c,IAAF,MAAM,IAAN,IAAM,aAAN,GAAM,MAAN,GAAM,GAAEtM,IAAZ,EAAkB;AACvBslE,sBAAQ,GAAG/1E,CAAC,CAAC+c,IAAF,CAAOtM,IAAlB;AACD,aAFM,MAGF;AACHslE,sBAAQ,GAAG/1E,CAAX;AACD;;AACD,mBAAO,IAAI,cAAAmsB,IAAJ,CAAS4pD,QAAT,CAAP;AACD,WAjCwB,CAAzB;AAkCD;;;sCAEoBE,S,EAAkB;AACrC,iBAAO,CAACA,SAAD,GAAa,EAAb,GAAkBA,SAAS,CAACv4E,GAAV,CAAc,UAAAsC,CAAC,EAAI;AAC1C,mBAAOA,CAAC,CAACjF,KAAT;AACD,WAFwB,CAAzB;AAGD;AAED;;;;;;sCAGqB;AACnB,eAAK+V,OAAL,GAAe,IAAf;AACA,cAAMskE,iBAAiB,GAAG,KAAKhnE,IAAL,CAAUrT,KAApC,CAFmB,CAGnB;AACD;;;mCAEiB,CAChB;AACD;;;6CAkB2Bm7E,M,EAAgB;AAAA;;AAC1C,eAAKC,cAAL,GAAsBD,MAAtB;AACA,eAAKP,iBAAL,GAAyB,IAAzB;AACA,eAAKn/E,OAAL,CAAa,cAAb,EAA6B,YAAM;AACjC,oBAAI,CAACm/E,iBAAL,GAAyB,KAAzB;AACD,WAFD,EAEG,KAFH;AAGD;;;4CAE0B;AACvB,eAAKA,iBAAL,GAAwB,KAAxB;AACH;;;yCAEuB;AACtB,eAAKpnE,KAAL,CAAWolE,QAAX,CAAoB,cAAAznE,oBAAA,EAApB;AACA,eAAKspE,aAAL,CAAmBj7B,IAAnB,CAAwB,IAAxB;AACD;;;uCAIc66B,iB,EAAoC;;;AACjD,0BAAGA,iBAAiB,CAAC3oD,SAArB,MAA8B,IAA9B,IAA8B,aAA9B,GAA8B,MAA9B,GAA8B,GAAE1P,IAAhC,MAAoC,IAApC,IAAoC,aAApC,GAAoC,MAApC,GAAoC,GAAEtM,IAAtC,EAA2C;AACvC,mBAAO,CAAP,WAAO2kE,iBAAiB,CAAC3oD,SAAzB,MAAkC,IAAlC,IAAkC,aAAlC,GAAkC,MAAlC,GAAkC,GAAE1P,IAA7B,MAAiC,IAAjC,IAAiC,aAAjC,GAAiC,MAAjC,GAAiC,GAAEtM,IAA1C;AACH,WAFD,MAGI;AACA2kE,6BAAiB,CAAC3oD,SAAlB,GAA8B,MAAH,OAAG,CAAH,kBAAO2oD,iBAAiB,CAAC3oD,SAAzB,CAAG,EAA+B;AAAE1P,kBAAI,EAAE;AAACtM,oBAAI,EAAE,KAAK0J;AAAZ;AAAR,aAA/B,CAA9B;AACA,mBAAO,CAAP,KAAOi7D,iBAAiB,CAAC3oD,SAAlB,MAA2B,IAA3B,IAA2B,aAA3B,GAA2B,MAA3B,GAA2B,GAAE1P,IAAF,CAAOtM,IAAzC;AACH;AACF;;;6CAE2B2lE,W,EAA0C;AAAA,cAA7BtB,YAA6B,uEAAL,KAAK;;;;AACpE,cAAIM,iBAAiB,GAAGgB,WAAxB;AACA,cAAMn8B,eAAe,GAAGm7B,iBAAiB,CAACtoD,KAAlB,KAAuB,MAAIsoD,iBAAiB,CAACtoD,KAAtB,MAA2B,IAA3B,IAA2B,aAA3B,GAA2B,MAA3B,GAA2B,GAAE/yB,MAApD,wBAA+Dq7E,iBAAiB,CAACpB,YAAlB,CAA+Bh5D,KAA/B,CAAqC/R,KAApG,EAA4G,GAA5G,IAAmH,EAA3I,CAFoE,CAE2E;;AAC/I,cAAMujB,SAAS,GAAG,KAAK6oD,eAAL,CAAqBD,iBAAiB,CAAC5oD,SAAvC,CAAlB;AACA,cAAMa,OAAO,GAAG,KAAKioD,aAAL,CAAmBF,iBAAiB,CAAC/nD,OAArC,CAAhB;AACA,cAAM1jB,WAAW,GAAG,CAAH,KAAGyrE,iBAAiB,SAAjB,IAAAA,iBAAiB,WAAjB,GAAiB,MAAjB,GAAAA,iBAAiB,CAAE58E,MAAnB,MAAyB,IAAzB,IAAyB,aAAzB,GAAyB,MAAzB,GAAyB,GAAE+Q,OAA/C;AACA,cAAMF,SAAS,GAAG+rE,iBAAiB,CAAC58E,MAAlB,CAAyBE,QAAzB,CAAkC;AAAEJ,mBAAO,EAAE88E,iBAAiB,CAACx8E;AAA7B,WAAlC,EAA2E2Q,OAA7F,CANoE,CAOpE;;AACA,eAAKslD,eAAL,GAAuB,CAAAumB,iBAAiB,SAAjB,IAAAA,iBAAiB,WAAjB,GAAiB,MAAjB,GAAAA,iBAAiB,CAAEvmB,eAAnB,KAAsC,KAA7D;AAEA,cAAMp7C,QAAQ,GAAG;AACb3J,cAAE,EAAEgrE,YAAY,GAAGM,iBAAiB,CAACtrE,EAArB,GAA0B,EAD7B;AAEbukB,mBAAO,EAAE+mD,iBAAiB,CAAC/mD,OAAlB,IAA6B,KAFzB;AAGb7B,qBAAS,EAATA,SAHa;AAIbD,wBAAY,EAAE6oD,iBAAiB,CAACl5D,WAAlB,CAA8BnhB,KAJ/B;AAKb0zB,oBAAQ,EAAE2mD,iBAAiB,CAAC3mD,QAAlB,IAA8B,EAL3B;AAMb9kB,uBAAW,EAAXA,WANa;AAObN,qBAAS,EAATA,SAPa;AAQb5M,oBAAQ,EAAE24E,iBAAiB,CAAC34E,QARf;AASbswB,2BAAe,sBAAIqoD,iBAAiB,CAACpB,YAAlB,CAA+Bh5D,KAA/B,CAAqC/R,KAAzC,EAAiDmsE,iBAAiB,CAACrzD,IAAnE,CATF;AAUbkL,8BAAkB,sBAAImoD,iBAAiB,CAACpB,YAAlB,CAA+Bh5D,KAA/B,CAAqC/R,KAAzC,EAAiDmsE,iBAAiB,CAAC50B,UAAnE,CAVL;AAWbnkC,wBAAY,EAAE+4D,iBAAiB,CAAC/4D,YAAlB,IAAkC,KAXnC;AAYb0X,uBAAW,EAAEqhD,iBAAiB,CAACrhD,WAAlB,IAAiC,KAZjC;AAabtH,qBAAS,EAAE,KAAK4pD,cAAL,CAAoBjB,iBAApB,CAbE;AAcbtoD,iBAAK,EAAE,KAAKwpD,UAAL,CAAgBlB,iBAAiB,CAACtoD,KAAlC,EAAyCsoD,iBAAiB,CAACpB,YAAlB,CAA+Bh5D,KAA/B,CAAqC/R,KAA9E,CAdM;AAebyjB,mBAAO,EAAE0oD,iBAAiB,CAAC1oD,OAfd;AAgBb7B,gBAAI,EAAEuqD,iBAAiB,CAACpB,YAAlB,CAA+Bh5D,KAhBxB;AAiBb2J,iBAAK,EAAEywD,iBAAiB,CAACzwD,KAjBZ;AAkBbpS,iBAAK,EAAE0nC,eAlBM;AAmBbr0B,qBAAS,EAAEq0B,eAnBE;AAoBb5sB,mBAAO,EAAPA,OApBa;;AAqBb;AACA1Q,wBAAY,EAAEy4D,iBAAiB,CAACz4D,YAtBnB;AAuBbgC,4BAAgB,EAAEy2D,iBAAiB,CAACz2D,gBAvBvB;AAwBbG,2BAAe,EAAEs2D,iBAAiB,CAACt2D,eAxBtB;AAyBbJ,4BAAgB,EAAE02D,iBAAiB,CAAC12D,gBAzBvB;AA0BbG,iCAAqB,EAAEu2D,iBAAiB,CAACv2D,qBA1B5B;AA2BbJ,+BAAmB,EAAE22D,iBAAiB,CAAC32D,mBA3B1B;AA4BbD,6BAAiB,EAAE42D,iBAAiB,CAAC52D,iBA5BxB;AA6BbI,6BAAiB,EAAEw2D,iBAAiB,CAACx2D,iBA7BxB;AA+BbqQ,8BAAkB,EAAEmmD,iBAAiB,CAACnmD,kBA/BzB;AAgCb;AACA;AACAnJ,2BAAe,EAAEsvD,iBAAiB,CAACtvD,eAAlB,IAAqC,IAlCzC;AAmCbS,gCAAoB,EAAE6uD,iBAAiB,CAAC7uD,oBAnC3B;AAoCbqI,iBAAK,EAAEwmD,iBAAiB,SAAjB,IAAAA,iBAAiB,WAAjB,GAAiB,MAAjB,GAAAA,iBAAiB,CAAExmD,KApCb;AAqCb7P,kBAAM,EAAEq2D,iBAAiB,SAAjB,IAAAA,iBAAiB,WAAjB,GAAiB,MAAjB,GAAAA,iBAAiB,CAAEr2D,MArCd;AAuCb0O,mBAAO,EAAE2oD,WAAW,CAAC3oD;AAvCR,WAAjB;AA4CA,iBAAO,IAAI,cAAAjR,OAAJ,CAAY/I,QAAZ,CAAP;AACD;;;qDAGyC2S,G,EAAK;;;;;;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA,yBAAK5Z,OAAL,GAAe,IAAI,cAAAgQ,OAAJ,CAAY,MAAD,OAAC,CAAD,kBAAM,KAAKhQ,OAAX,CAAC,EAAsB4Z,GAAG,CAACiT,SAAJ,EAAtB,CAAZ,CAAf;AACA,yBAAK66C,qBAAL;;AACA,yBAAKt7B,sBAAL,CAA4B93C,OAA5B,CAAoC,KAAK0L,OAAzC;AAEA;;;;;0BAGG,KAAKA,OAAL,CAAa+Z,oBAAb,KAAsC,IAAtC,IAA8C,KAAKuuD,Y;;;;;;AAE3B,2BAAM,KAAKV,iBAAL,CAAuBhpD,IAAvB,CAA4B,KAAK5e,OAAL,CAAa+Z,oBAAzC,CAAN;;;AAAjB4zB,kC;;AACN,yBAAKvB,sBAAL,CAA4B93C,OAA5B,CAAoCq5C,cAApC;;;AAGJ;AACA,yBAAK5rC,KAAL,CAAWolE,QAAX,CAAoB,cAAAznE,oBAAA,EAApB;AAEA,yBAAK4E,OAAL,GAAe,KAAf;AACA,yBAAK7D,OAAL,GAAe,IAAf;AACA,yBAAKqmE,SAAL,GAAiB,IAAjB,C,CAEA;;AACA,yBAAKv/D,QAAL,CAAcvF,SAAd,CAAwB+nE,KAAxB,CAA8B,QAA9B,EAAwC;AACtC/8C,gCAAU,EAAE,KAAKhtB,OAAL,CAAa1C,EADa;AAEtC+c,4BAAM,EAAE,KAAKra,OAAL,CAAaqe,IAAb,CAAkB1P,QAAlB,CAA2BvnB,IAFG;AAGtCi3B,0BAAI,EAAE,KAAKre,OAAL,CAAaqe,IAAb,CAAkB2e,WAHc;AAItCvjB,gCAAU,EAAE,KAAKzZ,OAAL,CAAa/J,WAAb,CAAyBjB,EAJC;AAKtC0kB,8BAAQ,EAAE,KAAK1Z,OAAL,CAAa9J,SAAb,CAAuBlB,EALK;AAMtCitB,8BAAQ,EAAE,CAAC,CAAC,KAAKjiB,OAAL,CAAaiiB,QAAb,CAAsB10B,MANI;AAOtCmzB,+BAAS,EAAE,KAAK9e,IAAL,CAAUrT,KAAV,CAAgBylD;AAPW,qBAAxC;;;;;;;;;AAUD;;;oDAGkC;AACjC,eAAK1vC,OAAL,GAAe,KAAf;AACA,eAAKtE,OAAL,CAAa8P,MAAb,GAAsB,cAAAqV,cAAA,CAAewiD,WAArC;;AACA,eAAKv7B,sBAAL,CAA4B93C,OAA5B,CAAoC,KAAK0L,OAAzC;;AACA,eAAK8mE,SAAL,GAAiB,IAAjB;AACA,eAAKrmE,OAAL,GAAe,KAAf;AACA,eAAKinE,qBAAL;AACD;AAED;;;;;;;;gDAK+B;AAE7B;AACA,eAAKsC,mBAAL,GAA2B;AACzBhqE,mBAAO,EAAE,KAAKA,OADW;AAEzB8P,kBAAM,EAAE,KAAKA,MAFY;AAGzB6iD,sBAAU,EAAE,KAAKA,UAHQ;AAIzBsX,yBAAa,EAAE,KAAKA,aAJK;AAKzBC,sBAAU,EAAE,KAAKA,UALQ;AAMzBC,0BAAc,EAAE,KAAKA,cANI;AAOzB75E,gBAAI,EAAE,KAAKA,IAPc;AAQzBg4E,wBAAY,EAAE,KAAKA,YARM;AAS1B;AACC8B,oCAAwB,EAAE,KAAKA,wBAAL,CAA8BnR,IAA9B,CAAmC,IAAnC,CAVD;AAWzB;AACAoR,wCAA4B,EAAE,KAAKA,4BAAL,CAAkCpR,IAAlC,CAAuC,IAAvC;AAZL,WAA3B;AAcD;AAED;;;;;;;;;AASA;AACA;AACA;AACA;;;;mDAEkC;;;AAChC,cAAIqR,cAAc,GAAG,CAArB;;AAEA,cAAI,KAAKtqE,OAAL,CAAaoe,WAAb,IAA4B,KAAKpe,OAAL,CAAaoe,WAAb,CAAyB7wB,MAAzB,GAAkC,CAAlE,EAAqE;AACjE,iBAAKyS,OAAL,CAAaoe,WAAb,CAAyB30B,OAAzB,CAAiC,UAAC40B,IAAD,EAAU;AACvCisD,4BAAc,IAAI3+E,IAAI,CAACmD,GAAL,CAASuvB,IAAI,CAAChO,gBAAL,GAAwBgO,IAAI,CAACjO,oBAAtC,EAA4D,CAA5D,CAAlB;AACH,aAFD;AAGH,WAJD,MAIO,IAAI,KAAKpQ,OAAL,CAAaqe,IAAjB,EAAuB;AAC1BisD,0BAAc,GACV,sBAAI,IAAJ,aAAI,MAAJ,GAAI,MAAJ,QAAMtqE,OAAN,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAEqe,IAAf,MAAmB,IAAnB,IAAmB,aAAnB,GAAmB,MAAnB,GAAmB,GAAEhO,gBAArB,KAAqC,YAAG,SAAI,IAAJ,aAAI,MAAJ,GAAI,MAAJ,QAAMrQ,OAAT,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAEqe,IAAlB,MAAsB,IAAtB,IAAsB,aAAtB,GAAsB,MAAtB,GAAsB,GAAEjO,oBAA7D,CADJ;AAEH;;AAED,cAAM3G,MAAM,GAAG;AACX8gE,uBAAW,EAAED,cAAc,GAAG,CADnB;AAEXE,2BAAe,EAAEF;AAFN,WAAf;AAIA,iBAAO7gE,MAAP;AACH;AAGD;;;;;;;;;;;AAmCC;;;;;;;;;;;qDAWqC4U,I,EAAa;AAAA;;AAAA,cACxChM,qBADwC,GACd,KAAKzQ,IAAL,CAAUrT,KADI,CACxC8jB,qBADwC;AAG/C,cAAMo4D,UAAU,GAAG,KAAKxB,MAAL,CAAY5lE,IAAZ,CACU,KAAA8qC,uBADV,EACmC;AACpDC,oBAAQ,EAAE,MAD0C;AAEpDC,iBAAK,EAAE,MAF6C;AAGpDzsC,gBAAI,EAAE;AACJ+6B,uBAAS,EAAEte,IAAI,CAAC2e,WADZ;AAEJuR,uBAAS,EAAEl8B,qBAFP;AAGJpiB,sBAAQ,EAAEouB,IAAI,CAAC1P,QAAL,CAAc1e,QAHpB;AAIJ6f,oBAAM,EAAE;AAJJ;AAH8C,WADnC,CAAnB;AAWA,eAAK1mB,YAAL,CACE,wBADF,EAEEqhF,UAAU,CAACh8B,iBAAX,CAA6B11C,KAA7B,CAAmCzP,SAAnC,CAA6C,UAACyP,KAAD,EAAwB;AACjE0xE,sBAAU,CAACp5C,KAAX;AACH,WAFD,CAFF;AAMAo5C,oBAAU,CAAC57B,WAAX,GAAyBvlD,SAAzB,CAAmC;AAAA,mBAAM,QAAI,CAACnC,KAAL,CAAW,wBAAX,CAAN;AAAA,WAAnC;AACD;;;4BAvbkB;AACjB,iBAAO,KAAK6Y,OAAL,CAAaqe,IAAb,CAAkB1P,QAAzB;AACD;;;4BAEiB;AAChB,iBAAO,KAAK3O,OAAL,CAAa0qE,gBAApB;AACD;;;4BAEmC;;;AAClC,iBAAO,YAAK1qE,OAAL,CAAaqe,IAAb,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAG,CAAH,EAAMvrB,OAAN,CAAc0xB,QAA/B,MAA4C,IAA5C,GAAkD,UAAlD,GAA+D,UAAtE;AACD;;;4BAEc;AACb;AACA,iBAAO,KAAKxkB,OAAL,CAAa/J,WAApB;AACD;;;4BAEuB;AACtB,iBAAO,KAAK+J,OAAL,CAAa/J,WAAb,CAAyBtJ,UAAzB,CAAoC,gBAApC,CAAP,CADsB,CACwC;AAE/D;;;4BAEuB;;;AACtB,iBAAO,OAAAwJ,gCAAA,CAAiC,KAAK6J,OAAL,CAAa/J,WAA9C,EAA2D,CAAF,KAAE,KAAK+J,OAAL,MAAY,IAAZ,IAAY,aAAZ,GAAY,MAAZ,GAAY,GAAEukB,gBAAzE,CAAP;AACD;;;4BAE2B;;;AAC1B,iBAAO,OAAAlyB,gBAAA,CAAiB,CAAD,KAAC,KAAK2N,OAAL,MAAY,IAAZ,IAAY,aAAZ,GAAY,MAAZ,GAAY,GAAE5T,QAA/B,CAAP;AACD;;;4BAEmB;AAClB,iBAAO,cAAA4rB,oBAAA,CAAqB,KAAKhY,OAA1B,CAAP;AACD;;;4BAwHoB;;;AACnB,cAAM4B,IAAI,GAAG,KAAKA,IAAL,CAAUrT,KAAvB;AAEA;;AACA,cAAI,QAACqT,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAE4lE,YAAP,MAAmB,IAAnB,IAAmB,aAAnB,GAAmB,MAAnB,GAAmB,GAAEh5D,KAArB,CAAJ,EAAgC;AAC5B,mBAAO,KAAP;AACH;;AAED,cAAMA,KAAK,GAAG,IAAI,cAAAC,KAAJ,CAAU7M,IAAI,CAAC4lE,YAAL,CAAkBh5D,KAA5B,CAAd;AACA,iBAAOA,KAAK,CAACwV,SAAN,CAAgB;AACnBh4B,kBAAM,EAAE4V,IAAI,CAAC5V,MADM;AAEnBI,oBAAQ,EAAEwV,IAAI,CAACxV,QAFI;AAGnBuY,gBAAI,EAAE,KAAKgJ;AAHQ,WAAhB,CAAP;AAKD;;;4BAqNuB;iBAAA,CACtB;;;AACA,cAAIg9D,eAAe,GAAiB,EAApC;AAFsB,+BAGmD,KAAK3qE,OAHxD;AAAA,cAGdmQ,YAHc,kBAGdA,YAHc;AAAA,cAGAiC,iBAHA,kBAGAA,iBAHA;AAAA,cAGmBqQ,kBAHnB,kBAGmBA,kBAHnB;AAAA,cAGuCxyB,QAHvC,kBAGuCA,QAHvC;;AAItB,cAAGkgB,YAAY,IAAIiC,iBAAiB,CAAC7kB,MAArC,EAA6C;AAC3Co9E,2BAAe,GAAG,KAAK3qE,OAAL,CAAaoS,iBAA/B;AACD,WAFD,MAGK,IAAGjC,YAAY,IAAI,CAACiC,iBAAiB,CAAC7kB,MAAnC,KAA6Ck1B,kBAAkB,SAAlB,IAAAA,kBAAkB,WAAlB,GAAkB,MAAlB,GAAAA,kBAAkB,CAAEl1B,MAAjE,CAAH,EAA4E;AAC/E,iBAAKyS,OAAL,CAAayiB,kBAAb,CAAgCh5B,OAAhC,CAAwC,UAAAR,OAAO,EAAI;AACjD0hF,6BAAe,CAACz3E,IAAhB,CAAqB,IAAI,UAAAqJ,MAAJ,CAAW;AAAElR,oBAAI,EAAEpC,OAAO,CAACkU,WAAR,GAAsB,IAA9B;AAAoC0V,2BAAW,EAAE,KAAjD;AAAwDC,2BAAW,EAAE7iB;AAArE,eAAX,CAArB;AACD,aAFD;AAGA06E,2BAAe,GAAGA,eAAe,CAACp3E,IAAhB,CAAqB,UAAC21B,EAAD,EAAaC,EAAb;AAAA,qBAA4BD,EAAE,CAACl0B,EAAH,GAAQm0B,EAAE,CAACn0B,EAAvC;AAAA,aAArB,CAAlB;AACD,WALI,MAMA;AACH21E,2BAAe,GAAG,CAAC,KAAK3qE,OAAL,CAAa/J,WAAd,CAAlB;AACD,WAfqB,CAkBtB;AACA;;;AACA,cAAM20E,kBAAkB,GAAI,cAAAxyC,mBAAA,CAAoBuyC,eAApB,CAA5B,CApBsB,CAoB6C;AAEpE;;AACC,cAAME,aAAa,GAAG,KAAKxoB,eAAL,GAAuBuoB,kBAAkB,CAAC1+E,QAAnB,CAA4B;AAAEJ,mBAAO,EAAE,CAAF,KAAE,KAAK8V,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAErT,KAAF,CAAQQ;AAA5B,WAA5B,CAAvB,GAA2F67E,kBAAjH;AAEA,iBAAOC,aAAa,CAACl+E,UAAd,CAAyB,gBAAzB,CAAP;AACD;;;;MAhd2C,OAAA7E,a;;AAL9C;;;uBAKakgF,wB,EAAwB,2C,EAAA,8B,EAAA,+B,EAAA,wC,EAAA,4C,EAAA,sC,EAAA,6C,EAAA,kC,EAAA,qC;AAAA,K;;;YAAxBA,wB;AAAwB,uC;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,e;AAAA,c;AAAA,mqC;AAAA;AAAA;AHxErC;AACI;AAKA;AACE;AAOA;AAKF;AACF;AACI;AACI;AACI;AACI;AACI;AAAI;AAAmC;AACvC;AACI;AACI;AAGI;AAAA,mBAAc,IAAAC,UAAA,QAAd;AAAgC,WAAhC,EAAiC,cAAjC,EAAiC;AAAA,mBACjB,IAAAC,YAAA,QADiB;AACG,WADpC;AAEH;AACL;AACJ;AACA;AACI;AACI;AAAI;AAAsE;AAC1E;AAKf;AAUe;AACI;AAAK;AACiB;AACtB;AAAK;AAAoC;AACzC;AAAK;AAAsC;AAC/C;AACJ;AACJ;AACJ;AACJ;AACJ;AACJ;AACJ;AACA;AACI;AACI;AAIA;AAIJ;AACJ;AACA;AAMI;AAAA,mBAAY,IAAA9Z,QAAA,EAAZ;AAAsB,WAAtB;AACH;AACH;;;;AAvFkG;AAC5D;AAAA;AAO5B;AAAA;AAOA;AAAA;AAUgB;AAAA;AAIQ;AAAA,gDAAmB,eAAnB,EAAmB,mBAAnB;AASA;AAAA;AACC;AAAA;AAKd;AAAA;AAWkB;AAAA;AAEA;AAAA;AACA;AAAA;AAWxB;AAAA;AAIA;AAAA;AAOT;AAAA,oDAAuB,SAAvB,EAAuB,WAAvB,EAAuB,OAAvB,EAAuB,SAAvB,EAAuB,qBAAvB,EAAuB,uBAAvB;;;;;;;;;;2BGRO4Z,wB,EAAwB;cALpC,OAAA74B,SAKoC;eAL1B;AACTlnD,kBAAQ,EAAE,kBADD;AAETmnD,qBAAW,EAAE,oCAFJ;AAGTC,mBAAS,EAAE,CAAC,iCAAD;AAHF,S;AAK0B,Q;;;;;;;;;;;;;;;;;;;;;;gBAQlC,OAAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChFH;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AA+BA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQY;AAAmD;AAAM;;;;;;;;AACzD;AACI;AACA;AAAuB;AAAsD;AAC7E;AAAsC;AAAA;AAAA;AAAA;AAAA;AAAtC;AACJ;;;;;;;;AACA;AACI;AACA;AAAuB;AAAoB;AAC3C;AAAqC;AAAA;AAAA;AAAA;AAAA;AAArC;AACJ;;;;;AAF2B;AAAA;;;;;;AAeC;;;;;AAAA;;;;;;AAGA;;;;;AAAA;;;;;;AAGA;;;;;AAAA;;;;;;AAOQ;AAAmD;AAAiD;;;;;AAAjD;AAAA;;;;;;AAH3D;AACI;AACA;AACI;AACJ;AACJ;;;;;AAFa;AAAA;;;;;;;;AAJb;AAA6D;AAAkC;AAAA;AAAA;AAAA;AAAA;AAAgC;AAAc;AAAQ;AACrJ;;;;;AADqJ;AAAA;AACnI;AAAA;;;;;;;;AAW5C;AAGE;AAAA;AAAA;AAAA;AAAA;AAEgB;AACjB;;;;;AAFC;;;;;;;;AAGY;AAEZ;AAAA;AAAA;AAAA;AAAA,oBAAiC;AAAjC;AAAqC,SAArC;AACA;AACF;;;;;;AACA;;;;;;AA3CM;AACI;AACG;AACK;AACA;AAAgC;AAA2C;AAChF;AACA;AACK;AACA;AACI;AAGA;AAGA;AAGA;AASJ;AACL;AACH;AACA;AACV;AAOc;AAKd;AACU;AACJ;;;;;AA1CiB;AAAA;AAC2B;AAAA;AAIH;AAAA;AACZ;AAAA;AAGA;AAAA;AAGA;AAAA;AAiBjC;AAAA;AAMoB;AAAA;AAKD;AAAA;;;;;;AAIf;AACI;AACI;AAAG;AAA4B;AAAsC;AACnF;AAAQ;AAAe;AACb;AACJ;;;;;AALoB;AAEJ;AAAA;AAAuB;AAAA;AACrC;AAAA;;;;;;AAGF;AACI;AACA;AACI;AAAG;AAAyF;AAChG;AACJ;;;;;;AACA;AACI;AACI;AACJ;AACJ;;;;;;AAKQ;AAAqB;AAA8B;;;;;AAA9B;AAAA;;;;;;AACrB;AACI;AAGJ;;;;;;AAII;AAMA;AAAsB;;;;;AAFlB;;;;;;AAGJ;;;;;;;;AAMA;AAII;AAAA;AAAA;AAAA;AAAA;AAEA;AAAc;;;;;AAJzC;;;;;;AAKuB;;;;;;;;AAmCI;AACI;AAGI;AAAA;AAAA;AAAA;AAAA;AAHJ;AAKJ;;;;;;;;AAhCR;AACI;AACI;AACA;AACJ;AACA;AACI;AAAoB;AACpB;AAAoB;AACpB;AACJ;AAEA;AAGI;AAAA;AAAA;AAAA;AAAA;AAEA;AACJ;AAEA;AACI;AAAyB;AACzB;AAAkB;AAClB;AACJ;AAEA;AACI;AAQA;AASI;AAAA;AAAA;AAAA,qCAA4B,KAA5B;AAAiC,SAAjC;AACH;AACL;AAEA;AAGI;AAAA;AAAA;AAAA;AAAA;AAEA;AACJ;AACJ;;;;;AAnDQ;AAAA;AAGA;AAAA;AACA;AAAA;AACA;AAAA;AAKA;AAAA;AAOA;AAAA;AACA;AAAA;AACA;AAAA;AAIK;AAAA;AAUD;AAAA,gDAAiB,OAAjB,EAAiB,mBAAjB,EAAiB,UAAjB,EAAiB,wBAAjB,EAAiB,UAAjB,EAAiB,mCAAjB,EAAiB,OAAjB,EAAiB,gCAAjB,EAAiB,OAAjB,EAAiB,0BAAjB,EAAiB,MAAjB,EAAiB,8BAAjB;AAaJ;AAAA;AAGA;AAAA;;;;;;AAGR;AACI;AACI;AACJ;AACA;AACI;AACA;AACA;AACJ;AACA;AACA;AACA;AACI;AACA;AACA;AACJ;AACA;AACA;AACJ;;;;;;AAUI;AAAyB;AAAQ;AAAQ;AAAU;AAAiB;;;;;AAAjB;AAAA;;;;;;AAI3E;AAAmB;AAAsD;;;;;;;;AAUrD;AACI;AACI;AACA;AACJ;AACA;AAAI;AAAgC;AACpC;AAGI;AAAA;AAAA;AAAA;AAAA;AAEA;AACJ;AAEA;AACJ;;;;;AAPQ;AAAA;AAMkB;AAAA;;;;;;;;AApC9B;AACI;AACI;AACI;AACA;AACJ;AACA;AAAG;AAAQ;AAAK;AAAU;AAAQ;AAClC;AAAG;AAAQ;AAAU;AAAU;AAAmB;AAClD;AACA;AAAG;AAAQ;AAAY;AAAU;AAAc;AAC/C;AAAG;AAAQ;AAAmB;AAAU;AAAa;AACrD;AAAG;AAAQ;AAAwB;AAAU;AAAgB;AACrF;AAEwB;AAGI;AAAA;AAAA;AAAA;AAAA;AAEA;AACJ;AACJ;AACA;AAgBJ;;;;;AAhCkC;AAAA;AACK;AAAA;AAC5B;AAAA;AAC8B;AAAA;AACO;AAAA;AACK;AAAA;AAClE;AAAA;AAIyB;AAAA;AAMH;AAAA;;;;;;AA6BL;AACI;AACI;AACJ;AACA;AACI;AACJ;AACA;AACJ;;;;;;AApBJ;AACI;AACI;AACI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACJ;AACA;AASJ;;;;;AATS;AAAA;;;;;;;;AAa3B;AAGC;AAAA;AAAA;AAAA;AAAA;AACD;;;;;;AACA;;;;;;AAPI;AACL;AACC;AAKA;AACD;AACD;;;;;AANG;AAAA;AAIoB;AAAA;;;;;;;;AAUnB;AAaI;AAAA;AAAA;AAAA,qCAA4B,IAA5B;AAAgC,SAAhC,EAAkC,wBAAlC,EAAkC;AAAA;AAAA;AAAA;AAAA,SAAlC,EAAkC,gBAAlC,EAAkC;AAAA;AAAA;AAAA;AAAA,SAAlC;AAGH;;;;;AAdG,yIAAsC,4BAAtC,EAAsC,kCAAtC,EAAsC,UAAtC,EAAsC,oGAAtC,EAAsC,gBAAtC,EAAsC,qBAAtC,EAAsC,UAAtC,EAAsC,yBAAtC,EAAsC,WAAtC,EAAsC,8FAAtC,EAAsC,UAAtC,EAAsC,mCAAtC,EAAsC,OAAtC,EAAsC,oJAAtC,EAAsC,OAAtC,EAAsC,iGAAtC,EAAsC,UAAtC,EAAsC,4BAAtC,EAAsC,aAAtC,EAAsC,mBAAtC;;;;;;;;AAiBA;AAGI;AAAA;AAAA;AAAA;AAAA,WAA0C,gBAA1C,EAA0C;AAAA;AAAA;AAAA;AAAA,SAA1C;AAEH;;;;;AAHG;;;;;;AAIJ;;;;;;AAPJ;AACI;AAMA;AACJ;;;;;AANQ;AAAA;AAKiB;AAAA;;;;;;;;AAEzB;AACI;AAII;AAAA;AAAA;AAAA;AAAA,WAAyC,cAAzC,EAAyC;AAAA;AAAA;AAAA;AAAA,SAAzC;AAEH;AACL;;;;;AANQ;AAAA,4CAAa,aAAb,EAAa,IAAb,EAAa,SAAb,EAAa,oDAAb;;;;AApThB,QAAMlT,WAAW,GAAG,EAApB;;QA8Ta0uC,4B;;;;;AA4EZ,4CACU3K,MADV,EAEej7D,KAFf,EAGiCywB,KAHjC,EAISvE,SAJT,EAKSrvB,KALT,EAMQ+Y,SANR,EAOSvT,QAPT,EAQSkT,OART,EASSwuD,MATT,EAS0B;AAAA;;AAAA;;AAEzB;AAVS,iBAAA9I,MAAA,GAAAA,MAAA;AACK,iBAAAj7D,KAAA,GAAAA,KAAA;AACkB,iBAAAywB,KAAA,GAAAA,KAAA;AACxB,iBAAAvE,SAAA,GAAAA,SAAA;AACA,iBAAArvB,KAAA,GAAAA,KAAA;AACD,iBAAA+Y,SAAA,GAAAA,SAAA;AACC,iBAAAvT,QAAA,GAAAA,QAAA;AACA,iBAAAkT,OAAA,GAAAA,OAAA;AACA,iBAAAwuD,MAAA,GAAAA,MAAA;AApFF,iBAAA1J,gBAAA,GAAmB,0BAAAA,gBAAnB;AAQA,iBAAAsH,UAAA,GAAqB,EAArB;AAcA,iBAAAkE,gBAAA,GAAmB,KAAnB;AACA,iBAAAC,kBAAA,GAAqB,KAArB;AACA,iBAAAC,kBAAA,GAA6B,KAA7B;AAOA,iBAAArpE,IAAA,GAAO,IAAI,OAAA9a,eAAJ,CAAiDwG,SAAjD,CAAP;AACA,iBAAA49E,WAAA,GAAc,IAAI,OAAApkF,eAAJ,CAAqCwG,SAArC,CAAd;AAMA,iBAAA69E,oBAAA,GAAgC,KAAhC,CA8CmB,CA7C1B;;AACO,iBAAAnkC,MAAA,GAAkB,KAAlB;AACA,iBAAA1iC,OAAA,GAAmB,KAAnB;AACA,iBAAA8mE,cAAA,GAA0B,KAA1B;AACA,iBAAAjC,iBAAA,GAA6B,KAA7B;AACA,iBAAAkC,YAAA,GAAwB,KAAxB;AAaP,iBAAAC,uBAAA,GAAmC,KAAnC;AAWO,iBAAAC,mBAAA,GAA+B,KAA/B;AACA,iBAAAC,qBAAA,GAAiC,KAAjC;AACA,iBAAAC,0BAAA,GAAsC,KAAtC;AAEC,iBAAAC,eAAA,GAAkB,KAAlB;AAeP,iBAAKC,YAAL,GAAoB,SAAKh2C,KAAL,CAAW31B,OAAX,CAAmBqe,IAAnB,CAAwButD,eAA5C;;AACA,iBAAKC,iBAAL,CAAuB,SAAKl2C,KAAL,CAAW31B,OAAlC;;AACA,iBAAKhW,OAAL,CAAa,UAAb,EAAyB,YAAM;AAC9B,mBAAK6hF,iBAAL,CAAuB,SAAKl2C,KAAL,CAAW31B,OAAlC;;AACA,cAAI,SAAK21B,KAAL,CAAWie,MAAX,IAAqB,SAAKk4B,kBAAL,EAAzB,EAAoD;AACnD,qBAAKC,aAAL;AACA;;AACD,cAAI,SAAKp2C,KAAL,CAAWq2C,WAAX,IAA0B,SAAKC,eAAnC,EAAoD;AACnD,qBAAKD,WAAL;AACA,WAP6B,CAQ9B;;;AACA,mBAAKhiF,OAAL,CAAa,iBAAb,EAAgC,YAAM;AACrC,qBAAK2rC,KAAL,CAAWu2C,YAAX,GAA0B,KAA1B;AACA,WAFD,EAEG,GAFH;AAGA,SAZD,EAYG,IAZH;;AALyB;AAkBzB;AA3CD;;;;;mCA8CkB;AAAA;;;AAEjB;;;;;;;;;;;AASA,cAAG,YAAKv2C,KAAL,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAEgY,cAAZ,MAA+B,IAAlC,EAAwC;AACvC,iBAAK37B,iBAAL,GAAyB,CAAH,WAAG,KAAK2jB,KAAR,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAEgY,cAAZ,MAA0B,IAA1B,IAA0B,aAA1B,GAA0B,MAA1B,GAA0B,GAAE37B,iBAArD;AACA,iBAAKC,mBAAL,GAA2B,CAAH,WAAG,KAAK0jB,KAAR,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAEgY,cAAZ,MAA0B,IAA1B,IAA0B,aAA1B,GAA0B,MAA1B,GAA0B,GAAE17B,mBAAvD;AAEA,gBAAM23D,WAAW,GAAG,YAAKj0C,KAAL,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAEgY,cAAZ,MAA0B,MAAI,KAAKhY,KAAT,MAAc,IAAd,IAAc,aAAd,GAAc,MAAd,GAAc,GAAE31B,OAA1C,CAApB;AAEA,iBAAKyiB,kBAAL,GAA0BmnD,WAAW,CAACnnD,kBAAZ,IAAkCmnD,WAAW,CAACnnD,kBAAZ,CAC1DxwB,MAD0D,CACnD,UAAAk6E,SAAS;AAAA,qBAAIA,SAAS,CAAC7uE,EAAV,KAAiBssE,WAAW,CAACtsE,EAAjC;AAAA,aAD0C,EAE1DpM,GAF0D,CAEtD,UAAAi7E,SAAS;AAAA,qBAAK,MAAD,OAAC,CAAD,kBACdA,SADc,CAAC,EACN;AACZhvE,2BAAW,EAAEgvE,SAAS,CAAChvE,WAAV,GAAwB,IADzB;AAEZnR,sBAAM,EAAE,IAAI,UAAAuQ,MAAJ,CAAW;AAClBlR,sBAAI,EAAE8gF,SAAS,CAAChvE,WAAV,GAAwB,IADZ;AAElB0V,6BAAW,EAAE,KAFK;AAGlBC,6BAAW,EAAE82D,WAAW,CAAC35E;AAHP,iBAAX;AAFI,eADM,CAAL;AAAA,aAF6C,CAA5D;AAWA;;AAGD,eAAK7G,YAAL,CAAkB,aAAlB,EAAiC,KAAK2Y,KAAL,CAAWgC,MAAX,CAAkB,OAAAC,iBAAlB,EAC/B7H,IAD+B,CAC1B,YAAA+H,IAAA,CAAK,CAAL,CAD0B,EAE/B5a,SAF+B,CAErB,UAAC2a,IAAD,EAA4B;AACtC;AACA,oBAAI,CAAC0J,WAAL,GAAmB,IAAI,cAAAgS,IAAJ,CAAS1b,IAAT,CAAnB;AACA,WAL+B,CAAjC;AAQA,eAAK7a,YAAL,CAAkB,MAAlB,EAA0B,KAAK2Y,KAAL,CAAW5F,IAAX,CACzB,QAAA4H,MAAA,CAAO,cAAAkR,yBAAP,CADyB,EAExB3rB,SAFwB,CAEd,UAAAkQ,IAAI,EAAI;uBAAA,CACnB;;;AACA,oBAAI,CAAC0xE,WAAL,CAAiB1xE,IAAjB,CAAsB,aAAAA,IAAI,CAACiH,OAAL,MAAY,IAAZ,IAAY,aAAZ,GAAY,MAAZ,GAAY,GAAEiN,MAAd,MAAoB,IAApB,IAAoB,aAApB,GAAoB,MAApB,GAAoB,GAAEngB,MAAtB,IAA+BiM,IAAI,CAACiH,OAAL,CAAaiN,MAAb,CAAoB,CAApB,EAAuBlJ,QAAvB,CAAgCpJ,QAA/D,GAA0EghC,WAAhG;AACA,WALyB,CAA1B;;AAOA,eAAK3hB,OAAL,CAAa7W,WAAb,CAAyBzH,IAAzB,CAA8B,YAAAyG,KAAA,CAAM,UAACC,CAAD;AAAA,mBAAOA,CAAP;AAAA,WAAN,CAA9B,EAA+CvZ,SAA/C,CAAyD,YAAM;AAC9D,oBAAI,CAACkb,QAAL,GAAgB,QAAI,CAAC+C,QAAL,CAAcd,OAAd,CAAsB,aAAtB,CAAhB;AACA,oBAAI,CAACe,IAAL,GAAY,cAAAif,mBAAA,CAAoB,QAAI,CAACkP,KAAL,CAAW31B,OAA/B,EAAwC,QAAI,CAACosE,gBAA7C,CAAZ;AACA,WAHD;;AAKA,cAAM9xE,UAAU,GAAG,GAAnB;;AACA,cAAI1J,MAAJ,EAAY;AACX,iBAAKo2C,MAAL,GAAcp2C,MAAM,CAAC2J,UAAP,GAAoBD,UAAlC;AACA;;AAED,iBAAA+xE,SAAA,CAAUz7E,MAAV,EAAkB,QAAlB,EAA4BuL,IAA5B,CAAiC,YAAAmwE,YAAA,CAAa,GAAb,CAAjC,EAAoDnwE,IAApD,CAAyD,YAAAowE,GAAA,CAAI;AAC5D/yE,gBAAI,EAAE,cAAAkjE,GAAG,EAAI;AACZ,kBAAMl/D,MAAM,GAAGk/D,GAAG,CAACl/D,MAAnB;AACA,sBAAI,CAACwpC,MAAL,GAAcxpC,MAAM,CAACjD,UAAP,GAAoBD,UAAlC;AACA;AAJ2D,WAAJ,CAAzD,EAKIhR,SALJ;AAQA,eAAKF,YAAL,CAAkB,WAAlB,EAA+B,KAAK2Y,KAAL,CAAW5F,IAAX,CAC9B,QAAA4H,MAAA,CAAO,YAAA7D,qBAAP,CAD8B,EAE9B,QAAA6D,MAAA,CAAO,YAAAvD,kCAAP,CAF8B,EAG9B,YAAAtP,GAAA,CAAI,UAAC0kB,OAAD,EAA4C;AAC/C,mBAAO,cAAAD,qBAAA,CAAsBC,OAAtB,CAAP;AACA,WAFD,CAH8B,EAM9B,YAAAq6B,oBAAA,EAN8B,EAO7B3mD,SAP6B,CAOnB,UAAAkQ,IAAI,EAAI;AACnB,oBAAI,CAAC2G,SAAL,GAAiB3G,IAAjB;AACA,aAAC,QAAI,CAACgzE,WAAN,IAAqB,QAAI,CAACC,+BAAL,CAAqC,QAAI,CAAC92C,KAAL,CAAW31B,OAAhD,CAArB;AACA,WAV8B,CAA/B;AAaA;;;2CAsByBglB,K,EAAO;AAChC,iBAAO,KAAK2Q,KAAL,CAAW31B,OAAX,CAAmB/J,WAAnB,CAA+B/J,QAA/B,CAAwC;AAAEJ,mBAAO,EAAEk5B,KAAK,SAAL,IAAAA,KAAK,WAAL,GAAK,MAAL,GAAAA,KAAK,CAAEb;AAAlB,WAAxC,EAA2Ex3B,UAA3E,CAAsF,OAAtF,CAAP;AACA;;;0CAEwBqT,O,EAAkB;AAAA;;;;AAC1C,cAAMuoE,SAAS,GAAGvoE,OAAO,CAACqe,IAAR,CAAa5hB,KAAb,IAAsB,EAAxC;AACA,eAAKk2D,UAAL,GAAkB,OAAAp8D,wBAAA,CAAyByJ,OAAO,CAAC/J,WAAjC,EAA8C,IAA9C,CAAlB;AACA,eAAKi0E,UAAL,GAAkB,OAAA/zE,gCAAA,CAAiC6J,OAAO,CAAC/J,WAAzC,EAAsD+J,OAAO,CAACukB,gBAA9D,CAAlB;AACA,eAAK5f,IAAL,GAAY3E,OAAO,CAACigB,SAAR,CAAkB74B,IAA9B;AACA,eAAK65B,OAAL,GAAejhB,OAAO,CAACihB,OAAvB;AACA,eAAKyrD,SAAL,GAAiB1sE,OAAO,CAACigB,SAAR,CAAkBxjB,KAAnC;AACA,eAAK0b,KAAL,GAAanY,OAAO,CAACmY,KAArB;AACA,eAAK7nB,IAAL,GAAY,OAAAkK,WAAA,CAAYwF,OAAO,CAAC+f,YAApB,CAAZ;AACA,eAAK4sD,QAAL,GAAgB3sE,OAAO,CAACsuC,eAAR,IAA2B,EAA3C;AACA,eAAK67B,cAAL,GAAsB,OAAA93E,gBAAA,CAAiB2N,OAAO,CAAC5T,QAAzB,CAAtB;AACA,eAAKylB,QAAL,GAAgB7R,OAAO,CAACqe,IAAR,CAAaxM,QAA7B,CAX0C,CAWH;;AACvC,eAAK+6D,eAAL,GAAuB5sE,OAAO,CAACggB,SAAR,CAAkB9uB,GAAlB,CAAsB,UAAAsC,CAAC;AAAA,mBAAIA,CAAC,CAACpM,IAAN;AAAA,WAAvB,EAAmCsN,IAAnC,CAAwC,IAAxC,CAAvB;AACA,eAAKm4E,UAAL,GAAkB7sE,OAAO,CAACugB,eAAR,CAAwBgoD,SAAxB,CAAlB;AACA,eAAK7nD,SAAL,GAAiB1gB,OAAO,CAACygB,kBAAR,CAA2B8nD,SAA3B,CAAjB;AACA,eAAKuE,MAAL,GAAc9sE,OAAO,CAACqe,IAAR,CAAa3H,KAAb,CAAmBqf,OAAjC;AACA,eAAKg3C,iBAAL,GAAyB,CAAzB;AACA,eAAKC,WAAL,kBAA2BhtE,OAAO,CAACqe,IAAR,CAAayU,MAAxC;AACA,eAAKm6C,kBAAL,GAA0B,KAA1B;AACA,eAAKC,eAAL,GAAuB,wBAAKv3C,KAAL,CAAW31B,OAAX,CAAmBqe,IAAnB,CAAwB1P,QAAxB,MAAgC,IAAhC,IAAgC,aAAhC,GAAgC,MAAhC,GAAgC,GAAEvM,SAAlC,MAA2C,IAA3C,IAA2C,aAA3C,GAA2C,MAA3C,GAA2C,GAAEyxB,cAA7C,MAA2D,IAA3D,IAA2D,aAA3D,GAA2D,MAA3D,GAA2D,GAAEs5C,eAA7D,KAAgF,EAAvG;AACA,eAAKC,aAAL,GAAqBptE,OAAO,CAAC6gB,OAAR,CAAgBnsB,IAAhB,CAAqB,IAArB,CAArB,CApB0C,CAqB1C;;AACA,eAAK62E,mBAAL,GAA2B,IAA3B,CAtB0C,CAsBT;;AACjC,eAAKC,qBAAL,GAA6B,IAA7B;AACA,eAAKC,0BAAL,GAAkC,IAAlC;AACA,eAAKT,kBAAL,GAA0B,CAAChrE,OAAO,CAACsZ,eAAR,KAA4B,IAA5B,IAAoCtZ,OAAO,CAACsZ,eAAR,KAA4B,EAAjE,KAAwEtZ,OAAO,CAACgS,iBAAR,KAA8B,IAAtG,GAA6G,IAA7G,GAAoH,KAA9I;AACA,eAAKi5D,kBAAL,GAA0BjrE,OAAO,CAAC+R,YAAR,GAAuB,IAAvB,GAA8B,KAAxD,CA1B0C,CA4B1C;;AACA,eAAKs7D,2BAAL,CAAiCrtE,OAAO,CAAC/J,WAAzC,EA7B0C,CA+B1C;;AACA,cAAMq3E,YAAY,GAAGttE,OAAO,CAACsgB,KAAR,CAAczxB,IAAd,CAAmB,UAAA0oB,CAAC,EAAI;AAC5C,gBAAIA,CAAC,CAACjnB,IAAF,KAAW,WAAf,EAA4B;AAC3B,qBAAO,IAAP;AACA;AACD,WAJoB,CAArB;AAKA,eAAKg9E,YAAL,GAAoBA,YAAY,GAAGA,YAAY,CAACtqE,OAAhB,GAA0B,EAA1D,CArC0C,CAuC1C;;AACA,cAAIhD,OAAO,CAAC8P,MAAZ,EAAoB;AACnB;AACA,gBAAMy9D,SAAS,GAAGvtE,OAAO,CAAC8P,MAA1B;AACA,iBAAKA,MAAL,GAAc9P,OAAO,CAAC8P,MAAtB;AACA,gBAAM09D,eAAe,GAAG,UAAA14E,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB6R,aAApB,CAAkC;AAAEhR,qBAAO,EAAE;AAAX,aAAlC,EAAkD44B,YAAlD,CAA+D1kB,OAAO,CAAC/J,WAAR,CAAoB/J,QAApB,CAA6B;AAAEJ,qBAAO,EAAEkU,OAAO,CAAC5T;AAAnB,aAA7B,CAA/D,CAAxB;;AACA,gBAAI,CAAC,CAAC,UAAD,EAAa,WAAb,EAA0B+Y,QAA1B,CAAmCnF,OAAO,CAAC8P,MAA3C,CAAL,EAAyD;AACxD,mBAAKA,MAAL,GAAc,UAAAhb,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB05B,WAApB,CAAgC3kB,OAAO,CAAC/J,WAAR,CAAoB/J,QAApB,CAA6B;AAAEJ,uBAAO,EAAEkU,OAAO,CAAC5T;AAAnB,eAA7B,CAAhC,IAA+F,SAA/F,GAA2G4T,OAAO,CAAC8P,MAAjI;AACA;;AAED,gBAAG,KAAK6lB,KAAL,CAAWgY,cAAX,IAA6B,KAAKhY,KAAL,CAAWgY,cAAX,CAA0B79B,MAA1B,KAAqC,WAArE,EAAmF;AAClF,mBAAKw7D,uBAAL,GAA+B,IAA/B;AACA;;AAED,oBAAQ,KAAKx7D,MAAb;AACC,mBAAK,WAAL;AACC,qBAAK29D,WAAL,GAAmB,iCAAnB;AACA,qBAAK5G,UAAL,GAAkB,SAAlB;AACA,qBAAK0E,mBAAL,GAA2B,KAA3B;AACA,qBAAKE,0BAAL,GAAkC,KAAlC;AACA,qBAAKD,qBAAL,GAA6B,KAA7B,CALD,CAMC;;AACA,oBAAI,UAAA12E,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB05B,WAApB,CAAgC3kB,OAAO,CAAC/J,WAAxC,CAAJ,EAA0D;AACzD;AACA,uBAAKu1E,qBAAL,GAA6B,IAA7B;AACA;;AAED;;AACD,mBAAK,UAAL;AACC,qBAAKiC,WAAL,GAAmB,mCAAnB;AACA,qBAAK5G,UAAL,GAAkB,WAAlB;AACA,qBAAK0E,mBAAL,GAA2B,KAA3B;AACA,qBAAKE,0BAAL,GAAkC,KAAlC;AACA,qBAAKD,qBAAL,GAA6B,KAA7B;AACA,qBAAKyB,kBAAL,GAA0B,IAA1B,CAND,CAOC;;AACA,qBAAKS,gBAAL,GAAwB3lE,IAAxB,CAA6B,UAAAhQ,CAAC,EAAI;AACjC,0BAAI,CAACg1E,iBAAL,GAAyBh1E,CAAzB;AACA,0BAAI,CAACk1E,kBAAL,GAA0B,KAA1B;AACA,iBAHD,EARD,CAYC;;AACA,oBAAI,UAAAn4E,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB05B,WAApB,CAAgC3kB,OAAO,CAAC/J,WAAxC,CAAJ,EAA0D;AACzD;AACA,uBAAKu1E,qBAAL,GAA6B,IAA7B;AACA;;AACD;;AACD,mBAAK,UAAL;AACC,qBAAKiC,WAAL,GAAmB,mCAAnB;AACA,qBAAK5G,UAAL,GAAkB,WAAlB;AACA,qBAAK0E,mBAAL,GAA2B,KAA3B;AACA,qBAAKE,0BAAL,GAAkC,KAAlC;AACA,qBAAKD,qBAAL,GAA6B,KAA7B,CALD,CAKqC;;AACpC,qBAAKyB,kBAAL,GAA0B,IAA1B,CAND,CAOC;;AACA,qBAAKS,gBAAL,GAAwB3lE,IAAxB,CAA6B,UAAAhQ,CAAC,EAAI;AACjC,0BAAI,CAACg1E,iBAAL,GAAyBh1E,CAAzB;AACA,0BAAI,CAACk1E,kBAAL,GAA0B,KAA1B;AACA,iBAHD,EARD,CAYC;;AACA,oBAAI,UAAAn4E,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB05B,WAApB,CAAgC3kB,OAAO,CAAC/J,WAAxC,CAAJ,EAA0D;AACzD;AACA,uBAAKu1E,qBAAL,GAA6B,IAA7B;AACA;;AACD;;AACD,mBAAK,UAAL;AACC,qBAAKiC,WAAL,GAAmB,mCAAnB;AACA,qBAAK5G,UAAL,GAAkB,WAAlB,CAFD,CAGC;;AACA,qBAAKkG,iBAAL,GAAyB,CAAzB;AACA;;AACD,mBAAK,WAAL;AACC,qBAAKU,WAAL,GAAmB,mCAAnB;AACA,qBAAK5G,UAAL,GAAkB,WAAlB;AACA,qBAAKkG,iBAAL,GAAyB,CAAzB;AACA;;AACD,mBAAK,SAAL;AACC,qBAAKU,WAAL,GAAmB,iCAAnB;AACA,qBAAK5G,UAAL,GAAkB,SAAlB;AACA,qBAAKkG,iBAAL,GAAyB,CAAzB;;AAEA,oBAAIS,eAAe,IAAI,CAAC,UAAD,EAAa,UAAb,EAAyBroE,QAAzB,CAAkCooE,SAAlC,CAAvB,EAAqE;AACpE,uBAAKN,kBAAL,GAA0B,IAA1B;AACA,uBAAKS,gBAAL,GAAwB3lE,IAAxB,CAA6B,UAAAhQ,CAAC,EAAI;AACjC,4BAAI,CAACg1E,iBAAL,GAAyBh1E,CAAzB;AACA,4BAAI,CAACk1E,kBAAL,GAA0B,KAA1B;AACA,mBAHD;AAIA;;AACD;;AACD;AAAS;AACR,qBAAKQ,WAAL,GAAmB,iCAAnB;AACA,qBAAK5G,UAAL,GAAkB,SAAlB;AACA,qBAAKkG,iBAAL,GAAyB,CAAzB;AACA;AA9EF;AAgFA;AACD;;;kCAEgB/nD,K,EAAO;AACvB,iBAAOA,KAAK,CAAC37B,KAAN,CAAY6H,GAAZ,CAAgB,UAAAxH,CAAC;AAAA,8BAAQA,CAAC,CAACgmC,MAAV,eAAqBhmC,CAAC,CAACtC,IAAvB;AAAA,WAAjB,EAAgDsN,IAAhD,CAAqD,IAArD,CAAP;AACA;;;yCAEuB;AACvB,eAAKq2E,gBAAL,GAAwB,IAAxB;AACA;;;sCAE+C;AAAA,cAA7B4C,UAA6B,uEAAP,KAAO;AAC/C,eAAK5C,gBAAL,GAAwB,KAAxB;AACA,eAAKI,oBAAL,GAA4B,KAA5B;;AACA,cAAIwC,UAAJ,EAAgB;AACf,iBAAKA,UAAL,CAAgB,KAAhB;AACA,iBAAKC,sBAAL,IAA+B,KAAKC,oBAAL,CAA0B,KAA1B,EAAiC,IAAjC,CAA/B;AACA,iBAAKD,sBAAL,GAA8B,KAA9B;AACA;AACD;;;gCAE+B;AAAA,cAAnBE,IAAmB,uEAAJ,EAAI;AAC/B,eAAK18C,SAAL,CAAeC,KAAf,CAAqBy8C,IAArB;AACA;AAED;;;;;;;;;2CAM8B;;;;;;;AACvBC,kC,GAAiB,KAAKp4C,KAAL,CAAW31B,OAAX,CAAmB+F,KAAnB,CAAyB,KAAK4vB,KAAL,CAAW31B,OAAX,CAAmBqe,IAAnB,CAAwB5hB,KAAjD,KAA2D,C;AAC5EuxE,sC,GAAqB,KAAKr4C,KAAL,CAAW31B,OAAX,CAAmBoZ,SAAnB,CAA6B,KAAKuc,KAAL,CAAW31B,OAAX,CAAmBqe,IAAnB,CAAwB5hB,KAArD,IAA8D,KAAKk5B,KAAL,CAAW31B,OAAX,CAAmBoZ,SAAnB,CAA6B,KAAKuc,KAAL,CAAW31B,OAAX,CAAmBqe,IAAnB,CAAwB5hB,KAArD,IAA8D,EAA5H,GAAiI,C,EAE5J;;AACMgf,yB,GAAQ,KAAKka,KAAL,CAAW31B,OAAX,CAAmB9J,SAAnB,CAA6BhK,QAA7B,CAAsC;AAAE6Q,6BAAO,EAAEgxE,cAAc,GAAG;AAA5B,qBAAtC,C,EAAuE;;AAC/En2C,0B,GAAS;AACdze,8BAAQ,EAAE,KAAKwc,KAAL,CAAW31B,OAAX,CAAmBqe,IAAnB,CAAwB/gB,EADpB;AAEdtR,4BAAM,EAAEyvB,KAFM;AAGdrvB,8BAAQ,EAAE,KAAK4hF,kBAHD;AAId30D,mCAAa,EAAE;AAJD,qB;;AAOR,2BAAM,KAAKoB,OAAL,CACXjB,SADW,CACDoe,MADC,EACO,IADP,EACa,KADb,EAEX7vB,IAFW,CAGX,UAACxe,IAAD,EAAU;AACT;AACA,0BAAM0kF,YAAY,GAAI,CAAC1kF,IAAI,CAAC,CAAD,CAAJ,CAAQwhC,eAAR,IAA2BtP,KAAK,CAAC1e,OAAN,GAAgB,EAA3C,CAAD,IAAmD,EAAzE;AACA,0BAAMxO,KAAK,GAAG5C,IAAI,CAACq+B,GAAL,CAAS,EAAT,EAAaikD,YAAb,CAAd;AACA,6BAAO1/E,KAAK,IAAI,EAAT,GAAcA,KAAd,GAAsB,CAA7B;AACA,qBARU,EASX,YAAM;AACL,6BAAO,CAAP;AACA,qBAXU,CAAN;;;;;;;;;;;;AAaP;;;2CAEyB;AACzB,eAAKi+E,WAAL,GAAmB,CAAC,KAAKA,WAAzB;AACA,WAAC,KAAKA,WAAN,IAAqB,KAAKC,+BAAL,CAAqC,KAAK92C,KAAL,CAAW31B,OAAhD,CAArB;AACA;;;oCAKkBA,O,EAAgB;AAElC,cAAI,KAAKG,SAAL,IAAkBH,OAAO,CAAC8f,aAA9B,EAA6C;AAC5C,mBAAO,KAAK3f,SAAL,CAAetR,IAAf,CAAoB,UAAA4E,CAAC;AAAA,qBAAIuM,OAAO,CAAC8f,aAAR,KAA0BrsB,CAAC,CAAClF,KAAhC;AAAA,aAArB,CAAP;AACA;;AACD,iBAAO,EAAP;AACA;AAGD;;;;;;;;;;;;wDAUuCyR,O,EAAyC;AAAA,cAAhCkuE,aAAgC,uEAAP,KAAO;;;;AAC/E,cAAMj+E,QAAQ,GAAG+P,OAAO,CAAC/P,QAAzB;AAD+E,8BAEpC+P,OAAO,CAACqe,IAF4B;AAAA,cAEvExM,QAFuE,iBAEvEA,QAFuE;AAAA,cAE7DlC,oBAF6D,iBAE7DA,oBAF6D;AAG/E,cAAMw+D,UAAU,GAAGt8D,QAAQ,GAAG,CAAX,GAAe,CAAf,GAAoBA,QAAQ,GAAG,CAAX,IAAgBA,QAAQ,GAAG,EAA5B,GAAkC,CAAlC,GAAsC,CAA5E;AACA,cAAMN,QAAQ,GAAG,cAAAH,eAAA,CAAgB+8D,UAAhB,CAAjB,CAJ+E,CAM/E;;AACA,cAAIC,oBAAoB,GAAG,EAA3B;AACA,cAAIzD,eAAe,GAAG,EAAtB;;AACA,cAAG3qE,OAAO,CAACmQ,YAAR,IAAwB+9D,aAA3B,EAA0C;AAEzC,iBAAKv4C,KAAL,CAAWgY,cAAX,CAA0BlrB,kBAA1B,CAA6Ch5B,OAA7C,CAAqD,UAAAR,OAAO,EAAI;AAC/D0hF,6BAAe,CAACz3E,IAAhB,CAAqB,IAAI,UAAAqJ,MAAJ,CAAW;AAAElR,oBAAI,EAAEpC,OAAO,CAACkU,WAAR,GAAsB,IAA9B;AAAoC0V,2BAAW,EAAE,KAAjD;AAAwDC,2BAAW,EAAE7iB;AAArE,eAAX,CAArB;AACA,aAFD;;AAGA06E,2BAAe,GAAGA,eAAe,CAACp3E,IAAhB,CAAqB,UAAC21B,EAAD,EAAaC,EAAb;AAAA,qBAA4BD,EAAE,CAACl0B,EAAH,GAAQm0B,EAAE,CAACn0B,EAAvC;AAAA,aAArB,CAAlB;AALyC,wCAsB9B,KAAK2gC,KAAL,CAAWgY,cAtBmB;AAAA,gBAQxCrwC,EARwC,yBAQxCA,EARwC;AAAA,gBASxC0U,iBATwC,yBASxCA,iBATwC;AAAA,gBAUxCC,mBAVwC,yBAUxCA,mBAVwC;AAAA,gBAWxCE,gBAXwC,yBAWxCA,gBAXwC;AAAA,gBAYxChC,YAZwC,yBAYxCA,YAZwC;AAAA,gBAaxCkC,qBAbwC,yBAaxCA,qBAbwC;AAAA,gBAcxCkX,kBAdwC,yBAcxCA,kBAdwC;AAAA,gBAexCjX,eAfwC,yBAexCA,eAfwC;AAAA,gBAgBxCsS,yBAhBwC,yBAgBxCA,yBAhBwC;AAAA,gBAiBxCnC,kBAjBwC,yBAiBxCA,kBAjBwC;AAAA,gBAkBxCH,gBAlBwC,yBAkBxCA,gBAlBwC;AAAA,gBAmBxCE,cAnBwC,yBAmBxCA,cAnBwC;AAAA,gBAoBxClJ,eApBwC,yBAoBxCA,eApBwC;AAAA,gBAqBxCS,oBArBwC,yBAqBxCA,oBArBwC;AAAA,gBAsBxCqI,KAtBwC,yBAsBxCA,KAtBwC;AAwBzC,gBAAMisD,SAAS,GAAGzpD,yBAAyB,CAACq0C,IAA1B,CAA+B,KAAKtjC,KAAL,CAAWgY,cAA1C,CAAlB;AACA,gBAAMz7B,gBAAgB,GAAGm8D,SAAS,CAAC5rD,kBAAD,CAAlC;AAKA2rD,gCAAoB,GAAG;AACtB9wE,gBAAE,EAACA,EADmB;AAEtB0U,+BAAiB,EAAEA,iBAFG;AAGtBC,iCAAmB,EAAEA,mBAAmB,IAAI,CAHtB;AAItBC,8BAAgB,EAAEA,gBAJI;AAKtBC,8BAAgB,EAAEA,gBAAgB,IAAI,CALhB;AAMtBhC,0BAAY,EAAEA,YANQ;AAOtBiC,+BAAiB,EAAEu4D,eAPG;AAQtBt4D,mCAAqB,EAAEA,qBAAqB,IAAI,EAR1B;AAStBkX,gCAAkB,EAAEA,kBAAkB,IAAI,QATpB;AAUtBjX,6BAAe,EAAEA,eAAe,IAAI,EAVd;AAYtBmQ,gCAAkB,EAAEA,kBAZE;AAalBH,8BAAgB,EAAEA,gBAAgB,IAAI,IAbpB;AAclBE,4BAAc,EAAEA,cAAc,IAAI,IAdhB;AAelBlJ,6BAAe,EAAEA,eAAe,IAAI,IAflB;AAgBlBS,kCAAoB,EAAEA,oBAhBJ;AAiBtBqI,mBAAK,EAAEA;AAjBe,aAAvB;AAmBA;;AAAA;AAGD,cAAMmyB,SAAS;AACd7vC,oBAAQ,EAAE,CAAC,KAAK4pE,WAAL,CAAiBtuE,OAAjB,CAAD,CADI;AAEd;AACA;AACAhU,kBAAM,EAAE2+E,eAAe,CAACp9E,MAAhB,IAAyB,CAAzB,GAA6Bo9E,eAAe,CAAC,CAAD,CAA5C,GAAkD,OAAA5+E,mBAAA,CAAoB,IAAI,UAAAwQ,MAAJ,CAAW;AAAElR,kBAAI,EAAEJ,IAAI,CAACunB,GAAL,EAAR;AAAoBK,yBAAW,EAAE;AAAjC,aAAX,CAApB,EAA0E,EAA1E,EAA+Epd,MAA/E,CAAsFxF,QAAtF,CAJ5C;AAKd7D,oBAAQ,EAAE4T,OAAO,CAAC5T,QALJ;AAMdsjB,uBAAW,EAAEC,oBAAoB,KAAK,UAAzB,GAAsC,cAAAuB,kBAAA,CAAmB,CAAnB,CAAtC,GAA8D,cAAAA,kBAAA,CAAmB,CAAnB,CAN7D;AAOdK,oBAAQ,EAAEA,QAPI;AAQdi2D,wBAAY,EAAE,IARA;AASdv3E,oBAAQ,EAAEA;AATI,aASI,YAEf,KAAK0lC,KAFU,MAEL,IAFK,IAEL,aAFK,GAEL,MAFK,GAEL,GAAEgY,cAFG,MAEW,IAFX,IAEW,aAFX,GAEW,MAFX,GAEW,GAAElmC,MAAF,EAXf,GAYX2mE,oBAZW,GAYS;AACvBntD,mBAAO,EAACjhB,OAAO,CAACihB,OADO;AAEvB3kB,kBAAM,EAAE;AAFe,WAZT,CAAf,CA7D+E,CA+E/E;;AACA,eAAKiyE,sBAAL;AACA,eAAKxsE,KAAL,CAAWolE,QAAX,CAAoB,cAAA5nE,oBAAA,CAAqB;AAAEE,mBAAO,EAAE80C;AAAX,WAArB,CAApB,EAjF+E,CAmF/E;;AACA,eAAKxyC,KAAL,CAAWolE,QAAX,CAAoB,QAAAtzD,sBAAA,CAAuBpW,OAAvB,CAA+B,cAAAgU,mBAAA,CAAoB8iC,SAApB,CAA/B,CAApB;AACA;AAED;;;;;;8CAG6B;AAAA;;AAC5B;AACA,eAAKk4B,+BAAL,CAAqC,KAAK92C,KAAL,CAAW31B,OAAhD,EAAyD,IAAzD;AAEA,cAAMwuE,UAAU,GAAG,KAAKvF,MAAL,CAAY5lE,IAAZ,CAAiB,+BAAAorE,yBAAjB,EAA4C;AAC7DnrE,sBAAU,EAAE,WADiD;AAE7D8xC,qBAAS,EAAE,KAFkD;AAG7DC,yBAAa,EAAE,oBAH8C;AAI7DzzC,gBAAI,EAAE;AACL8sE,wBAAU,EAAE,KAAKC,gBAAL,CAAsB1V,IAAtB,CAA2B,IAA3B,CADP;AAEL38D,oBAAM,EAAE,cAAA2W,YAAA,CAAaC;AAFhB;AAJuD,WAA5C,CAAnB,CAJ4B,CAc5B;;AACAs7D,oBAAU,CAAC3/B,WAAX,GAAyBvlD,SAAzB,CAAmC,UAACwkF,IAAD,EAAU;AAC5C;AACAA,gBAAI,IAAI,QAAI,CAACz8C,KAAL,CAAWy8C,IAAX,CAAR,CAF4C,CAElB;AAC1B,WAHD;AAKA;;;2CAEkB;AAClB,eAAK3N,MAAL,CAAYl/B,QAAZ,CAAqB,CAAC,iBAAD,CAArB,EAA0C;AAAE2tC,sBAAU,EAAE,KAAK1pE;AAAnB,WAA1C;AACA;;;iDAG+B;AAC/B,eAAKnD,KAAL,CAAWolE,QAAX,CAAoB,cAAAznE,oBAAA,EAApB;AACA,eAAKqC,KAAL,CAAWolE,QAAX,CAAoB,QAAAzzD,mBAAA,CAAoByrC,KAApB,EAApB;AACA;;;yCAGuB;AACvB,eAAKwuB,UAAL,CAAgB,IAAhB;AACA,eAAKxC,oBAAL,GAA4B,IAA5B;AACA;;;2CAEyBnrE,O,EAAkB;AAC3C,eAAK21B,KAAL,CAAW31B,OAAX,GAAqBA,OAArB;AACA,eAAK6rE,iBAAL,CAAuB7rE,OAAvB;AACA,eAAK+B,KAAL,CAAWolE,QAAX,CAAoB,WAAA9rE,qBAAA,CAAsB;AAAE,kBAAM2E,OAAO,CAAC1C,EAAhB;AAAoB,qBAAS,KAAKqQ,WAAL,CAAiBlR,KAA9C;AAAqD,sBAAU,aAA/D;AAA8E,sBAAU;AAAxF,WAAtB,CAApB,EAH2C,CAI3C;;AACA,eAAKk5B,KAAL,CAAWk5C,OAAX,GAL2C,CAKrB;;AACtB;;;wCAEqD;AAAA;;AAAA,cAAjCjsD,IAAiC,uEAAJ,EAAI;AACrD;AACA,eAAKqmD,MAAL,CAAY5lE,IAAZ,CAAiB,iCAAAyrE,2BAAjB,EAA8C;AAC7CxrE,sBAAU,EAAE,cADiC;AAE7C1B,gBAAI,EAAE,MAAF,OAAE,CAAF,gCACA,KAAK+zB,KADL,GAEA/S,IAFA,CAAE,EAEE;AACPwrC,sBAAQ,EAAE,oBAAM;AACf,oBAAMpuD,OAAO,GAAG,QAAI,CAAC21B,KAAL,CAAW31B,OAAX,CAAmByoB,KAAnB,EAAhB;;AACA,wBAAI,CAACkN,KAAL,CAAW31B,OAAX,WAA0B4iB,IAA1B,EAAgC7a,IAAhC,CACC,YAAM;AACL,0BAAI,CAACspB,KAAL,GADK,CAEL;;;AACA,0BAAI,CAACsE,KAAL,CAAWk5C,OAAX,GAHK,CAIL;AACA;;;AACA,0BAAI,CAACtnE,QAAL,CAAcvF,SAAd,CAAwB+nE,KAAxB,CAA8B,QAA9B,EAAwC;AACvC/8C,8BAAU,EAAEhtB,OAAO,CAAC1C,EADmB;AAEvC+c,0BAAM,EAAEra,OAAO,CAACqe,IAAR,CAAa1P,QAAb,CAAsBvnB,IAFS;AAGvCi3B,wBAAI,EAAEre,OAAO,CAACqe,IAAR,CAAaj3B,IAHoB;AAIvCqyB,8BAAU,EAAEzZ,OAAO,CAAC/J,WAAR,CAAoBjB,EAJO;AAKvC0kB,4BAAQ,EAAE1Z,OAAO,CAAC9J,SAAR,CAAkBlB,EALW;AAMvCitB,4BAAQ,EAAE,CAAC,CAACjiB,OAAO,CAACiiB,QAAR,CAAiB8sD,KANU;AAOvCruD,6BAAS,EAAE1gB,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAEygB,kBAAT,CAA4BzgB,OAAO,CAACqe,IAAR,CAAa5hB,KAAzC;AAP4B,mBAAxC;AASA,iBAhBF,EAiBC,UAAC0M,GAAD,EAAS;AACR,0BAAI,CAAC4+D,oBAAL,CAA0B,cAAA/tD,qBAAA,CAAsB7Q,GAAG,SAAH,IAAAA,GAAG,WAAH,GAAG,MAAH,GAAAA,GAAG,CAAE2G,MAA3B,CAA1B;AACA,iBAnBF;AAsBA;AAzBM,aAFF,CAFuC;AA+B7CslC,qBAAS,EAAE,KA/BkC;AAgC7CC,yBAAa,EAAE;AAhC8B,WAA9C;AAkCA;;;wCAEsB;AAAA;;AACtB;AACA,cAAM25B,UAAU,GAAG,KAAK/F,MAAL,CAAY5lE,IAAZ,CAAiB,mCAAA4rE,6BAAjB,EAAgD;AAClE3rE,sBAAU,EAAE,cADsD;AAElE1B,gBAAI,EAAE;AACL5B,qBAAO,EAAE,KAAK21B,KAAL,CAAW31B,OADf;AAELkvE,qBAAO,EAAE,KAAKnC;AAFT,aAF4D;AAMlE33B,qBAAS,EAAE,KANuD;AAOlEC,yBAAa,EAAE;AAPmD,WAAhD,CAAnB;AAUA25B,oBAAU,CAACngC,WAAX,GAAyBvlD,SAAzB,CAAmC,UAAC0W,OAAD,EAAuB;AACzD,gBAAIA,OAAJ,EAAa;AACZ,sBAAI,CAACmvE,kBAAL,CAAwBnvE,OAAxB;AACA;AACD,WAJD;AAKA;;;6CAE2B;AAC3B;AACA,iBAAO,CAAC,CAAC,WAAD,EAAc,SAAd,EAAyB,UAAzB,EAAqCmF,QAArC,CAA8C,KAAK2K,MAAnD,CAAR;AACA;;;uCAGqBlO,I,EAAwB;AAAA;;iBAAA,CAC7C;;;AACA,eAAKolC,MAAL,GAAcplC,IAAI,CAAColC,MAAnB;AACA,eAAKqmC,2BAAL,CAAiCzrE,IAAI,CAAC5V,MAAtC,EAH6C,CAK7C;;AACA,cAAI,KAAK4V,IAAL,CAAUrT,KAAd,EAAqB;AACpB,iBAAKo/E,UAAL,CAAgB,IAAhB,EAAsB,KAAKyB,0BAA3B,EADoB,CAEpB;;AACA,iBAAKrtE,KAAL,CAAWolE,QAAX,CAAoB,cAAA5nE,oBAAA,CAAqB;AACxCE,qBAAO,EAAE,MAAF,OAAE,CAAF,kBACH,KAAKmC,IAAL,CAAUrT,KADP,CAAE,EACU;AAClBvC,sBAAM,EAAE4V,IAAI,CAAC5V,MADK;AAElBI,wBAAQ,EAAEwV,IAAI,CAACxV;AAFG,eADV;AAD+B,aAArB,CAApB;AAOA,WAVD,MAUO,IAAIwV,IAAI,CAACwgC,IAAT,EAAe;AACrB;AACA,gBAAMpiC,OAAO,GAAG,KAAK21B,KAAL,CAAW31B,OAAX,CAAmByoB,KAAnB,EAAhB;;AACA,gBAAM4mD,cAAc,GAAGrvE,OAAO,CAAC5T,QAAR,KAAqBwV,IAAI,CAACxV,QAA1B,IAAsC4T,OAAO,CAAC/J,WAAR,CAAoBjB,EAApB,KAA2B4M,IAAI,CAAC5V,MAAL,CAAYgJ,EAApG,CAHqB,CAIrB;;AACAgL,mBAAO,CAAC/J,WAAR,GAAsB2L,IAAI,CAAC5V,MAA3B,CALqB,CAKc;;AACnCgU,mBAAO,CAAC9J,SAAR,GAAoB0L,IAAI,CAAC5V,MAAL,CAAYE,QAAZ,CAAqB;AAAEJ,qBAAO,EAAE8V,IAAI,CAACxV;AAAhB,aAArB,CAApB;AACA,iBAAKkY,OAAL,GAAe,IAAf;AAEA,gBAAMgrE,SAAS,GAAG,cAAAxgE,aAAA,CAAc;AAC/Bja,kBAAI,EAAEmL,OAAO,CAAC3U,IADiB;AAE/Be,sBAAQ,EAAE4T,OAAO,CAAC5T,QAFa;AAG/B6X,kBAAI,EAAE,KAAK0J,WAHoB;AAI/BkB,mBAAK,EAAE,CAAF,KAAE,KAAK8mB,KAAL,CAAW31B,OAAX,CAAmBqe,IAAnB,CAAwB1P,QAAxB,MAAgC,IAAhC,IAAgC,aAAhC,GAAgC,MAAhC,GAAgC,GAAEI,aAJV;AAK/BP,mBAAK,EAAExO,OAAO,CAACqe;AALgB,aAAd,CAAlB,CATqB,CAiBrB;;AACA,gBAAIgxD,cAAc,IAAI,EAACC,SAAS,SAAT,IAAAA,SAAS,WAAT,GAAS,MAAT,GAAAA,SAAS,CAAEr/D,YAAZ,CAAtB,EAAgD;AAC/C;;AACA;;;;AAIA;AACAjQ,qBAAO,CAAC8P,MAAR,GAAiB,WAAjB;AACA9P,qBAAO,CAAC+e,YAAR,GAAuB,IAAvB;AACA,aATD,MAUK,IAAIuwD,SAAS,CAACtgE,MAAV,KAAqB,cAAAzB,iBAAA,CAAkBsD,WAA3C,EAAwD;AAC5D;AACA,mBAAK+8D,sBAAL,GAA8B,IAA9B;AACA,mBAAKtpE,OAAL,GAAe,KAAf;AACA;AACA,aAjCoB,CAmCrB;;;AACA,iBAAKwW,SAAL,CAAesnB,IAAf,CAAoBpiC,OAApB,EAA6B+H,IAA7B,CACC,UAAC6R,GAAD,EAAS;AACR;AACA,sBAAI,CAACu1D,kBAAL,CAAwBnvE,OAAxB;;AACA,sBAAI,CAACwH,IAAL,GAAY,cAAAif,mBAAA,CAAoBzmB,OAApB,EAA6B,QAAI,CAACosE,gBAAlC,CAAZ;AACA,sBAAI,CAAC9nE,OAAL,GAAe,KAAf;;AACA,sBAAI,CAACirE,iBAAL;;AACAvvE,qBAAO,CAACqe,IAAR,CAAa1P,QAAb,CAAsBvnB,IAAtB;;AACA,sBAAI,CAACmgB,QAAL,CAAcvF,SAAd,CAAwB+nE,KAAxB,CAA8B,QAA9B,EAAwC;AACvC/8C,0BAAU,EAAEhtB,OAAO,CAAC1C,EADmB;AAEvC+c,sBAAM,EAAEra,OAAO,CAACqe,IAAR,CAAa1P,QAAb,CAAsBvnB,IAFS;AAGvCi3B,oBAAI,EAAEre,OAAO,CAACqe,IAAR,CAAamxD,WAHoB;AAIvC/1D,0BAAU,EAAEzZ,OAAO,CAAC/J,WAAR,CAAoBjB,EAJO;AAKvC0kB,wBAAQ,EAAE1Z,OAAO,CAAC9J,SAAR,CAAkBlB,EALW;AAMvCitB,wBAAQ,EAAE,CAAC,CAACjiB,OAAO,CAACiiB,QAAR,CAAiB8sD,KANU;AAOvCruD,yBAAS,EAAE1gB,OAAO,CAACg0C;AAPoB,eAAxC;AASA,aAjBF,EAkBC,UAAC7qC,GAAD,EAAS;AACR,sBAAI,CAAC7E,OAAL,GAAe,KAAf;AACA,sBAAI,CAAC6mE,oBAAL,GAA4B,KAA5B;;AACA,sBAAI,CAACpD,oBAAL,CAA0B,cAAA/tD,qBAAA,CAAsB7Q,GAAG,SAAH,IAAAA,GAAG,WAAH,GAAG,MAAH,GAAAA,GAAG,CAAE2G,MAA3B,CAA1B;AACA,aAtBF;AAwBA;AACD;AAED;;;;;;;;6CAMqB2/D,U,EAAYC,W,EAAa;AAC7C;AACA,cAAM9tE,IAAI,GAAG;AACZ+tE,sBAAU,EAAE,CAACF,UAAD,GAAc;AAAD;AAAb,cAAkE,CAACC,WAAD,GAAe;AAAD;AAAd,cAAoE,EADtI;AAEZ1sE,mBAAO,EAAE;AAAF;AAFK;AAGZ4sE,uBAAW,EAAE,OAHD;AAIZxhB,oBAAQ,EAAE;AAAA,qBAAM,IAAN;AAAA,aAJE;AAKZgE,uBAAW,EAAE;AALD,WAAb;AAOA,cAAM6W,MAAM,GAAG,KAAKA,MAAL,CAAY5lE,IAAZ,CAAiB,KAAA6qD,2BAAjB,EACd;AACCtsD,gBAAI,EAAEA,IADP;AAEC0B,sBAAU,EAAE,WAFb;AAGC8xC,qBAAS,EAAE,KAHZ;AAICC,yBAAa,EAAE,oBAJhB;AAKCrI,wBAAY,EAAE,CAACyiC;AALhB,WADc,CAAf;AAQA;;;4CAI0B;AAAA;;AAC1B,eAAKrE,cAAL,GAAsB,IAAtB;AACA,eAAKphF,OAAL,CAAa,cAAb,EAA6B,YAAM;AAClC,oBAAI,CAACohF,cAAL,GAAsB,KAAtB;AACA,WAFD,EAEG,IAFH;AAGA;;;6CAE2B1B,M,EAAgB;AAAA;;AAC3C,eAAKC,cAAL,GAAsBD,MAAtB;AACA,eAAKP,iBAAL,GAAyB,IAAzB;AACA,eAAKn/E,OAAL,CAAa,cAAb,EAA6B,YAAM;AAClC,oBAAI,CAACm/E,iBAAL,GAAyB,KAAzB;AACA,WAFD,EAEG,KAFH;AAGA;;;yCAEuB;AACvB,eAAKiC,cAAL,GAAsB,KAAtB;AACA;;;4CAE0B;AAC1B,eAAKjC,iBAAL,GAAyB,KAAzB;AACA;;;oDAEkC0G,W,EAAqB;AACvD,cAAI,CAACA,WAAL,EAAkB;AACjB;AACA;;AAED,cAAI,KAAK7oC,MAAT,EAAiB;AAChB,iBAAKooC,0BAAL,GAAkCS,WAAW,CAACpnD,KAAZ,EAAlC;AACA,WAFD,MAEO;AACN,iBAAK2mD,0BAAL,GAAkCS,WAAW,CAACpnD,KAAZ,GAAoB1zB,YAApB,CAAiC,MAAjC,EAAyCA,YAAzC,CAAsD,KAAtD,CAAlC;AACA;AACD;;;+CAE6Bq6E,0B,EAAoC;AACjE,eAAKA,0BAAL,GAAkCA,0BAA0B,CAAC3mD,KAA3B,EAAlC;AACA,eAAKklD,UAAL,CAAgB,IAAhB,EAAsB,KAAKyB,0BAA3B;AACA;;;qCAEqF;AAAA,cAApEU,OAAoE,uEAAjD,IAAiD;AAAA,cAA3CV,0BAA2C,uEAAN,IAAM;;;;AACrF,cAAI,oBAAC,KAAKz5C,KAAN,MAAW,IAAX,IAAW,aAAX,GAAW,MAAX,GAAW,GAAE31B,OAAb,MAAoB,IAApB,IAAoB,aAApB,GAAoB,MAApB,GAAoB,GAAEwO,KAAtB,MAA2B,IAA3B,IAA2B,aAA3B,GAA2B,MAA3B,GAA2B,GAAElR,EAA7B,CAAJ,EAAqC;AACpC;AACA;;AAED,cAAM9N,GAAG,GAAG,KAAK,EAAjB;AACA,cAAMm2B,IAAI,GAAGn2B,GAAG,GAAG,CAAnB;AACA,cAAMnE,IAAI,GAAG,CAAC+jF,0BAA0B,iBAAI,KAAKz5C,KAAT,MAAc,IAAd,IAAc,aAAd,GAAc,MAAd,GAAc,GAAE31B,OAAhB,MAAuB,IAAvB,IAAuB,aAAvB,GAAuB,MAAvB,GAAuB,GAAE/J,WAAzB,CAA3B,EAAiEwyB,KAAjE,EAAb,CAPqF,CAOE;;AACvF,cAAM5P,UAAU,GAAGxtB,IAAI,CAAC0J,YAAL,CAAkB,KAAlB,EAAyB9I,QAAzB,CAAkC;AAAER,kBAAM,EAAE,CAAV;AAAaD,uBAAW,EAAE;AAA1B,WAAlC,CAAnB;AACA,cAAMukF,WAAW,GAAG1kF,IAAI,CAAC0J,YAAL,CAAkB,MAAlB,CAApB,CATqF,CAWrF;;AACA,cAAM0J,KAAK,GAAG;AACbzS,kBAAM,EAAE8jF,OAAO,GAAGC,WAAH,GAAiBl3D,UADnB;AAEbzsB,oBAAQ,EAAE0jF,OAAO,GAAGnqD,IAAH,GAAUn2B,GAFd;AAGboiB,qBAAS,EAAE,CAAF,iBAAE,KAAK+jB,KAAP,MAAY,IAAZ,IAAY,aAAZ,GAAY,MAAZ,GAAY,GAAE31B,OAAd,MAAqB,IAArB,IAAqB,aAArB,GAAqB,MAArB,GAAqB,GAAEwO,KAArB,MAA0B,IAA1B,IAA0B,aAA1B,GAA0B,MAA1B,GAA0B,GAAElR,EAH1B;AAIbuU,oBAAQ,EAAE,CAAF,iBAAE,KAAK8jB,KAAP,MAAY,IAAZ,IAAY,aAAZ,GAAY,MAAZ,GAAY,GAAE31B,OAAd,MAAqB,IAArB,IAAqB,aAArB,GAAqB,MAArB,GAAqB,GAAEwO,KAArB,MAA0B,IAA1B,IAA0B,aAA1B,GAA0B,MAA1B,GAA0B,GAAEqD;AAJzB,WAAd;AAMA,eAAK9P,KAAL,CAAWolE,QAAX,CAAoB,QAAAhzD,eAAA,CAAgB1W,OAAhB,CAAwBgB,KAAxB,CAApB;AACA;;;sCAEoB;AACpB;AACA,eAAK4sE,YAAL,GAAoB,IAApB;AACA;;;gDAE8B7jE,I,EAAiB;AAC/C;AACA;AACA,cAAI,CAACA,IAAL,EAAW;AACV,iBAAK6jE,YAAL,GAAoB,KAApB;AACA,iBAAKmB,WAAL,GAAmB,KAAnB;AACA;AACA,WAP8C,CAQ/C;;;AACA,cAAMxsE,OAAO,GAAG,KAAK21B,KAAL,CAAW31B,OAAX,CAAmByoB,KAAnB,EAAhB;;AACAzoB,iBAAO,CAACiiB,QAAR,GAAmBza,IAAI,CAACkxB,QAAL,CAAczW,QAAd,CAAuB1zB,KAA1C;;AAEA,cAAIyR,OAAO,CAACiiB,QAAR,CAAiB10B,MAArB,EAA6B;AAC5B,gBAAMwY,KAAK,GAAG,EAAd;AACAA,iBAAK,CAAC/F,OAAO,CAACqe,IAAR,CAAa5hB,KAAd,CAAL,GAA4BuD,OAAO,CAAC+F,KAAR,CAAc/F,OAAO,CAACqe,IAAR,CAAa5hB,KAA3B,KAAqC,GAAjE;AACA,gBAAM2c,SAAS,GAAG,EAAlB;AACAA,qBAAS,CAACpZ,OAAO,CAACqe,IAAR,CAAa5hB,KAAd,CAAT,GAAgCuD,OAAO,CAACoZ,SAAR,CAAkBpZ,OAAO,CAACqe,IAAR,CAAa5hB,KAA/B,KAAyC,GAAzE;AAEAuD,mBAAO,CAAC+F,KAAR,GAAgBA,KAAhB;AACA/F,mBAAO,CAACoZ,SAAR,GAAoBA,SAApB;AACA;;AAED,eAAK+1D,kBAAL,CAAwBnvE,OAAxB;AACA;;;8CAW4B;AAC5B,eAAKgwE,cAAL,GAAsB,CAAC,KAAKA,cAA5B;AACA;;;4BAtwB0B;;;AAC1B,iBAAO,YAAKxrE,QAAL,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAEyrE,WAAf,KAA8B,EAArC;AACA;;;4BAEqB;AACrB,kCAAiB54E,kBAAkB,CAAC,KAAK61E,eAAN,CAAnC,iBAAgE71E,kBAAkB,CAAC,KAAKq1E,SAAN,CAAlF,mCAA2Hr1E,kBAAkB,CAAC,KAAKs1E,QAAN,CAA7I,0CAA4Lt1E,kBAAkB,CAAC,KAAKs7D,UAAN,CAA9M,0BAA+Ot7D,kBAAkB,CAAC,KAAK6yE,UAAN,CAAjQ,gBAAwR7yE,kBAAkB,CAAC,KAAK/G,IAAN,CAA1S,2BAAsU+G,kBAAkB,CAAC,KAAK8yE,cAAN,CAAxV,8BAAiY9yE,kBAAkB,CAAC,KAAKs0E,YAAN,CAAnZ,0BAAsbt0E,kBAAkB,CAAC,KAAKs1E,QAAN,CAAxc,8BAA2et1E,kBAAkB,CAAC,KAAKwa,QAAN,CAA7f;AACA;;;4BAuHkC;;;AAClC,kBAAQ,KAAK/B,MAAb;AACC,iBAAK,WAAL;AACA,iBAAK,UAAL;AACA,iBAAK,SAAL;AACC,qBAAO,IAAP;;AACD;AACC,qBAAO,CAAC,cAAAwI,eAAA,CAAgB,CAAD,KAAC,KAAKqd,KAAL,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAE31B,OAA5B,EAAqC,KAAK21B,KAAL,CAAW31B,OAAX,CAAmBqe,IAAnB,CAAwB1P,QAA7D,CAAR;AANF;AAQA;;;4BAE4B;;;AAC5B,iBAAO,cAAAyJ,oBAAA,CAAqB,KAAKud,KAAL,CAAW31B,OAAX,CAAmBqe,IAAnB,CAAwB1P,QAA7C,EAAuD,CAAF,KAAE,KAAKgnB,KAAL,CAAW31B,OAAX,MAAkB,IAAlB,IAAkB,aAAlB,GAAkB,MAAlB,GAAkB,GAAEqe,IAA3E,CAAP;AACA;;;4BAEqB;;;AACrB,iBAAO,YAAKsX,KAAL,CAAW31B,OAAX,MAAkB,IAAlB,IAAkB,aAAlB,GAAkB,MAAlB,GAAkB,GAAEiiB,QAApB,KAAgC,EAAvC;AACA;;;0BA6mByBy6C,G,EAAc;AACvC,eAAKgP,eAAL,GAAuBhP,GAAvB;AACA,S;4BAEwB;AACxB,iBAAO,KAAKgP,eAAZ;AACA;;;;MA9zBgD,OAAA5jF,a;;AA5TlD;;;uBA4TagjF,4B,EAA4B,+B,EAAA,uC,EAAA,qBA+E/B,SAAA57B,eA/E+B,C,EA+EhB,qC,EAAA,8B,EAAA,wC,EAAA,2C,EAAA,sC,EAAA,kC;AAAA,K;;;YA/EZ47B,4B;AAA4B,gD;AAAA,+C;AAAA,e;AAAA,c;AAAA,+iI;AAAA;AAAA;AAzTjC;AACI;AACA;AAKA;AAKA;AACI;AACI;AA+CA;AAMA;AAMA;AAKJ;AACA;AACI;AACI;AACI;AACA;AAKJ;AACA;AACI;AACI;AAOA;AAIJ;AACA;AACI;AAOA;AAIJ;AACJ;AACJ;AACA;AACI;AACI;AAuDA;AAmBJ;AACA;AAuCA;AAsBJ;AACV;AAUM;AAEJ;AAGJ;AAEA;AAkBA;AASA;;;;AA5SS;AAAA;AAC0B;AAAA;AAKG;AAAA;AAMV;AAAA;AACc;AAAA;AA+CS;AAAA;AAMd;AAAA;AAMpB;AAAA;AAMgB;AAAA;AAGT;AAAA;AACA;AAAA;AASI;AAAA;AAOA;AAAA;AAM3B;AAAA;AAO2B;AAAA;AAQH;AAAA;AAuDA;AAAA;AAoBY;AAAA;AAuCA;AAAA;AAuBQ;AAAA;AAkBzC;AAAA;AAiBC;AAAA;AASA;AAAA;;;;;;;;;2BAYAA,4B,EAA4B;cA5TxC,OAAA37B,SA4TwC;eA5T9B;AACVlnD,kBAAQ,EAAE,2BADA;AAEVw0D,kBAAQ,m2lBAFE;AA0TVpN,mBAAS,EAAE,CAAC,wCAAD;AA1TD,S;AA4T8B,Q;;;;;;;;kBA+EtC,OAAArT,M;mBAAO,SAAAkT,e;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzcV;AAAA;AAAA;;AAMA;AAAA;AAAA;;AAGA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAKA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWY;AACI;AACA;AAAuB;AAA+C;AACtE;AAAqC;AAAA;AAAA;AAAA;AAAA;AAArC;AACJ;;;;;;;;;;QAqCC+/B,6B;;;;;AAuBT,6CACwCrtE,IADxC,EAEgBwvB,SAFhB,EAGetW,SAHf,EAGyC;AAAA;;AAAA;;AAErC;AAJoC,iBAAAlZ,IAAA,GAAAA,IAAA;AACxB,iBAAAwvB,SAAA,GAAAA,SAAA;AACD,iBAAAtW,SAAA,GAAAA,SAAA;AAvBR,iBAAAquD,iBAAA,GAA6B,KAA7B;AAcA,iBAAA50B,SAAA,GAAY,IAAI,QAAA9qB,SAAJ,CAAc;AAC7Bp+B,cAAI,EAAE,IAAI,QAAA27B,WAAJ,CAAgB,SAAKplB,IAAL,CAAU5B,OAAV,CAAkB3U,IAAlC,EAAwC,CAAC,QAAA67B,UAAA,CAAWC,QAAZ,CAAxC,CADuB;AAE7Bn7B,gBAAM,EAAE,IAAI,QAAAg7B,WAAJ,CAAgB,SAAKplB,IAAL,CAAU5B,OAAV,CAAkB/J,WAAlC,EAA+C,CAAC,QAAAixB,UAAA,CAAWC,QAAZ,CAA/C,CAFqB;AAG7B/6B,kBAAQ,EAAE,IAAI,QAAA46B,WAAJ,CAAgB,cAAAjW,wBAAhB,EAA0C,CAAC,QAAAmW,UAAA,CAAWC,QAAZ,CAA1C;AAHmB,SAAd,CAAZ;AASkC;AAGxC;;;;mCAEU;AACP,eAAKotB,SAAL,CAAetoD,QAAf,CAAwB;AACpBZ,gBAAI,EAAE,KAAKuW,IAAL,CAAU5B,OAAV,CAAkB3U,IADJ;AAEpBW,kBAAM,EAAE,KAAK4V,IAAL,CAAU5B,OAAV,CAAkB/J,WAFN;AAGpB7J,oBAAQ,EAAE,KAAKwV,IAAL,CAAU5B,OAAV,CAAkB5T;AAHR,WAAxB;AAKH;;;mCAEiB4T,O,EAAmB;AACjC,eAAKoxB,SAAL,CAAeC,KAAf,CAAqBrxB,OAArB;AACH;;;gDAE8B;AAAA;;;;AAC3B,cAAM21C,QAAQ,GAAG,KAAKpB,SAAL,CAAe27B,WAAf,EAAjB;AACA,eAAK5rE,OAAL,GAAe,WAAf,CAF2B,CAI3B;AACA;;AACA,cAAMtE,OAAO,GAAGusB,SAAS,CAAC,CAAD,KAAC,KAAK3qB,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAE5B,OAAZ,CAAzB;AACAA,iBAAO,CAAC9J,SAAR,GAAoB8J,OAAO,CAAC/J,WAAR,CAAoB/J,QAApB,CAA6B;AAAEJ,mBAAO,EAAE6pD,QAAQ,CAACvpD;AAApB,WAA7B,CAApB;;AACA,eAAK0uB,SAAL,CAAesnB,IAAf,CAAoBpiC,OAApB,EAA6B+H,IAA7B,CACI,YAAM;AACF,oBAAI,CAACzD,OAAL,GAAe,IAAf;;AACA,oBAAI,CAAC6rE,UAAL,CAAgBnwE,OAAhB;AACH,WAJL,EAKI,UAACmJ,GAAD,EAAS;AACL,oBAAI,CAAC7E,OAAL,GAAe,IAAf;;AACA,oBAAI,CAACyjE,oBAAL;AACH,WARL;AAUH;;;+CAG6B;AAAA;;AAC1B,eAAKoB,iBAAL,GAAyB,IAAzB;AACA,eAAKn/E,OAAL,CAAa,cAAb,EAA6B,YAAM;AAC/B,oBAAI,CAACm/E,iBAAL,GAAyB,KAAzB;AACH,WAFD,EAEG,KAFH;AAGH;;;4CAE0B;AACvB,eAAKA,iBAAL,GAAwB,KAAxB;AACH;;;4BApE2B;AACxB,cAAMt7E,IAAI,GAAG,EAAb;AACA,cAAMuiF,KAAK,GAAGzkF,IAAI,CAACY,KAAL,CAAW,KAAKqV,IAAL,CAAUstE,OAAV,GAAoBrhF,IAA/B,CAAd;AACA,cAAMiB,GAAG,GAAIshF,KAAK,GAAGviF,IAAT,GAAiB,KAAK+T,IAAL,CAAU5B,OAAV,CAAkB5T,QAA/C;AAEA,iBAAO,CAAC;AACJb,iBAAK,EAAE,KAAKqW,IAAL,CAAU5B,OAAV,CAAkB5T,QADrB;AAEJyB,gBAAI,EAAJA,IAFI;AAGJiB,eAAG,EAAHA;AAHI,WAAD,CAAP;AAKH;;;;MAf8C,OAAAhH,a;;AA7CnD;;;uBA6CamnF,6B,EAA6B,qBAwBtB,SAAA//B,eAxBsB,C,EAwBP,qC,EAAA,wC;AAAA,K;;;YAxBtB+/B,6B;AAA6B,iD;AAAA,+C;AAAA,e;AAAA,c;AAAA,+uB;AAAA;AAAA;AA1ClC;AACI;AAKA;AACI;AAAgE;AAAA,mBAAS,IAAAkB,UAAA,EAAT;AAAqB,WAArB;AAC5D;AACJ;AACA;AAAkB;AAAuB;AAC7C;AACA;AACI;AAQI;AAAA,mBAAiB,IAAA57B,SAAA,mCAAjB;AAA6D,WAA7D;AAKJ;AACJ;AACA;AACI;AAGI;AAAA,mBAAiB,IAAA87B,qBAAA,EAAjB;AAAwC,WAAxC,EAAyC,iBAAzC,EAAyC;AAAA,mBAEtB,IAAAF,UAAA,EAFsB;AAEV,WAF/B;AAGH;AACL;AACJ;;;;AApCsC;AAAA;AAgB1B;AAAA,6EAAgD,UAAhD,EAAgD,IAAhD,EAAgD,SAAhD,EAAgD,qCAAhD,EAAgD,gBAAhD,EAAgD,0BAAhD,EAAgD,UAAhD,EAAgD,IAAhD,EAAgD,gBAAhD,EAAgD,kBAAhD,EAAgD,UAAhD,EAAgD,2DAAhD;AAaA;AAAA;;;;;;;;;;2BAYPlB,6B,EAA6B;cA7CzC,OAAA9/B,SA6CyC;eA7C/B;AACPlnD,kBAAQ,EAAE,4BADH;AAEPw0D,kBAAQ,27DAFD;AA0CPpN,mBAAS,EAAE,CAAC,yCAAD,CA1CJ;AA2CPga,uBAAa,EAAE,OAAAC,iBAAA,CAAkB34C;AA3C1B,S;AA6C+B,Q;;;;kBAwB7B,OAAAqrB,M;mBAAO,SAAAkT,e;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnGpB;AAAA;AAAA;;AASA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAQA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAIA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7BA;AACI;AAAiB;AAAM;AAAiB;AAC5C;;;;;AADI;AAAA;AAAuB;AAAA;;;;;;AAWX;AACI;AAEJ;;;;;AAFI;AAAA;;;;;;AARZ;AACI;AACI;AACI;AAGJ;AACA;AAIJ;AACJ;;;;;AATY;AAAA;AAIC;AAAA;;;;;;AAMb;AACI;AACA;AACA;AACJ;;;;;;AAII;AACI;AAAqB;AAA4B;AAAgB;AACjE;AACI;AACJ;AACJ;;;;;AAJ8B;AAAA;AAAuB;AAAA;AAE7C;AAAA;;;;;;AAGR;;;;;;;;AAGA;AAA+C;AAAA;AAAA;AAAA,iBAAS,QAAAohC,aAAA,wBAAT;AAAsC,SAAtC;AAC3C;AACJ;;;;;;;;;;AAGQ;;;;AAAqB;;;;;;AAKrB;AACI;AACJ;;;;;;;;AARJ;AACI;AACA;AAAwB;AAA6B;AACrD;AAAoE;AAElE;AACF;AAGA;AAAmB;AAAA;AAAA;AAAA,iBAAS,QAAAA,aAAA,wBAAT;AAAsC,SAAtC;AAAwC;AAAY;AAC3E;;;;;AAToE;AAAA;AACxC;AAAA;AACA;AAAA;AAA4C;AAAA;AAG9D;AAAA;;;;;;AAKV;AACI;AACJ;;;;;;AASI;AAA2B;AAA2C;AAAO;;;;;;AANjF;AACI;AACC;AAAuC;AAAc;AACtD;AAAM;AAA2C;AAAkB;AACnE;AAAM;AAAuC;AAAgB;AAC7D;AAAM;AAA4C;AAAsB;AACxE;AACJ;;;;;AAN0B;AAAA;AACkB;AAAA;AACS;AAAA;AACJ;AAAA;AACK;AAAA;AAC5C;AAAA;;;;;;AAEV;AACI;AACA;AACA;AACA;AACA;AACJ;;;;QD3BHC,0B;;;;;AAuET,0CAAoBxuE,KAApB,EACYytC,KADZ,EACsC;AAAA;;AAAA;;AAClC;AAFgB,iBAAAztC,KAAA,GAAAA,KAAA;AACR,iBAAAytC,KAAA,GAAAA,KAAA;AAzDI,iBAAAghC,KAAA,GAAiB,KAAjB;AAGT,iBAAAF,aAAA,GAAgB,IAAI,OAAA7jC,YAAJ,EAAhB;AAEA,iBAAAtsC,SAAA,GAAY,IAAI,OAAArZ,eAAJ,CAAyC,EAAzC,CAAZ;AAMA,iBAAA2pF,eAAA,GAA4B,CAAC,GAAD,EAAM,GAAN,CAA5B;AACA,iBAAAC,oBAAA,GAAiC,CAAC,GAAD,EAAM,GAAN,CAAjC;AACA,iBAAAC,iBAAA,GAA6B,KAA7B;AA4C+B;AAErC;;;;mCAEc;AAAA;;AACX,eAAKC,kBAAL;AACA,eAAKxnF,YAAL,CAAkB,WAAlB,EAA+B,KAAK2Y,KAAL,CAAW5F,IAAX,CAC3B,QAAA4H,MAAA,CAAO,YAAA7D,qBAAP,CAD2B,EAE3B,QAAA6D,MAAA,CAAO,YAAAvD,kCAAP,CAF2B,EAG3B,YAAAtP,GAAA,CAAI,UAAC0kB,OAAD,EAA4C;AAC5C,mBAAO,cAAAD,qBAAA,CAAsBC,OAAtB,CAAP;AACH,WAFD,CAH2B,EAM3B,YAAAq6B,oBAAA,EAN2B,EAO7B3mD,SAP6B,CAOnB,UAAAkQ,IAAI,EAAI;AAChB,oBAAI,CAAC2G,SAAL,CAAe3G,IAAf,CAAoBA,IAApB;AACH,WAT8B,CAA/B;AAUA,eAAKg2C,KAAL,CAAWqB,aAAX;AACH;;;kCAEgB;AACb,iBAAO,KAAKggC,SAAL,KAAmBvjF,SAA1B;AACH;;;yCAEoB;AACjB,iBAAO,KAAKujF,SAAL,CAAe7wE,OAAf,CAAuBsuC,eAAvB,CAAuCjhD,KAAvC,CAA6C,GAA7C,CAAP;AACH;;;6CAE2B;;;AACxB,cAAI,QAAC,KAAKwjF,SAAN,MAAe,IAAf,IAAe,aAAf,GAAe,MAAf,GAAe,GAAE7wE,OAAjB,CAAJ,EAA8B;AAC1B;AACH;;AACD,eAAKywE,eAAL,GAAuB,OAAA56E,wBAAA,CAAyB,KAAKg7E,SAAL,CAAe7wE,OAAf,CAAuB/J,WAAhD,EAA6D5I,KAA7D,CAAmE,GAAnE,CAAvB;AACA,eAAKyjF,eAAL,GAAuB,OAAA96E,wBAAA,CAAyB,KAAK66E,SAAL,CAAe7wE,OAAf,CAAuB/J,WAAhD,EAA6D,KAAK46E,SAAL,CAAe7wE,OAAf,CAAuBukB,gBAApF,CAAvB;AACA,eAAKosD,iBAAL,GAAyB,CAAC,KAAKE,SAAL,CAAe7wE,OAAf,CAAuB/J,WAAvB,CAAmC4c,WAA7D;AACA,eAAK69D,oBAAL,GAA4B,OAAA76E,wBAAA,CAAyB,KAAKg7E,SAAL,CAAe7wE,OAAf,CAAuB/J,WAAvB,CAAmCR,MAAnC,CAA0C,UAAAg2C,aAAA,EAA1C,CAAzB,EAAqFp+C,KAArF,CAA2F,GAA3F,CAA5B;AACA,eAAKsX,IAAL,GAAY,KAAKksE,SAAL,CAAe7wE,OAAf,CAAuBigB,SAAvB,CAAiC74B,IAA7C;AACA,eAAKulF,QAAL,GAAgB,KAAKkE,SAAL,CAAe7wE,OAAf,CAAuBsuC,eAAvB,CAAuCjhD,KAAvC,CAA6C,GAA7C,EAAkD,CAAlD,CAAhB;AACA,eAAKs+E,YAAL,GAAoB,KAAKkF,SAAL,CAAe7wE,OAAf,CAAuBqe,IAAvB,CAA4ButD,eAAhD;AACA,eAAKzB,cAAL,GAAsB,OAAA93E,gBAAA,CAAiB,KAAKw+E,SAAL,CAAe7wE,OAAf,CAAuB5T,QAAxC,EAAkD,QAAlD,CAAtB;;AAEA,cAAI,KAAKykF,SAAL,CAAe7wE,OAAf,CAAuB8P,MAA3B,EAAmC;AAC/B;AACA,iBAAKA,MAAL,GAAe,UAAAhb,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB05B,WAApB,CAAgC,KAAKksD,SAAL,CAAe7wE,OAAf,CAAuB9J,SAAvD,KAAqE,KAAK3M,IAAL,KAAc,WAApF,GAAmG,SAAnG,GAA+G,KAAKsnF,SAAL,CAAe7wE,OAAf,CAAuB8P,MAApJ;;AACA,oBAAO,KAAKA,MAAZ;AACI,mBAAK,WAAL;AACI,qBAAK29D,WAAL,GAAmB,iCAAnB;AACA,qBAAK5G,UAAL,GAAkB,SAAlB;AACA;;AACJ,mBAAK,UAAL;AACI,qBAAK4G,WAAL,GAAmB,mCAAnB;AACA,qBAAK5G,UAAL,GAAkB,WAAlB;AACA;;AACJ,mBAAK,UAAL;AACI,qBAAK4G,WAAL,GAAmB,mCAAnB;AACA,qBAAK5G,UAAL,GAAkB,WAAlB;AACA;;AACJ,mBAAK,UAAL;AACI,qBAAK4G,WAAL,GAAmB,mCAAnB;AACA,qBAAK5G,UAAL,GAAkB,WAAlB;AACA;;AACJ,mBAAK,WAAL;AACI,qBAAK4G,WAAL,GAAmB,mCAAnB;AACA,qBAAK5G,UAAL,GAAkB,WAAlB;AACA;;AACJ,mBAAK,SAAL;AACI,qBAAK4G,WAAL,GAAmB,iCAAnB;AACA,qBAAK5G,UAAL,GAAkB,SAAlB;AACA;;AACJ;AAAS;AACL,qBAAK4G,WAAL,GAAmB,iCAAnB;AACA,qBAAK5G,UAAL,GAAkB,SAAlB;AACJ;AA5BJ;AA8BH;;AACD,eAAKr3B,KAAL,CAAWqB,aAAX;AACA;AACH;;;4BAlHuB;AACpB,cAAI,CAAC,KAAKz1C,QAAN,IAAkB,CAAC,KAAKA,QAAL,CAAc7N,MAArC,EAA6C,OAAO,EAAP;AAC7C,cAAMwjF,IAAI,GAAG,KAAK31E,QAAL,CAAc,KAAKzR,KAAnB,EAA0BqW,OAAvC;AACA,cAAMkpB,EAAE,GAAG,IAAI,UAAA3sB,MAAJ,CAAW;AAAElR,gBAAI,EAAE0lF,IAAI,CAAC96E,WAAL,CAAiBjB,EAAzB;AAA6B6d,uBAAW,EAAE,KAA1C;AAAiDC,uBAAW,EAAEi+D,IAAI,CAAC96E,WAAL,CAAiB6c;AAA/E,WAAX,CAAX;;AACA,cAAI,KAAKnpB,KAAL,KAAe,CAAnB,EAAsB;AAClB,mBAAO,OAAA6M,4BAAA,CAA6B0yB,EAA7B,CAAP;AACH;;AACD,cAAM8nD,IAAI,GAAG,KAAK51E,QAAL,CAAc,KAAKzR,KAAL,GAAa,CAA3B,EAA8BqW,OAA3C;AACA,cAAMmpB,EAAE,GAAG,IAAI,UAAA5sB,MAAJ,CAAW;AAAElR,gBAAI,EAAE2lF,IAAI,CAAC/6E,WAAL,CAAiBjB,EAAzB;AAA6B6d,uBAAW,EAAE,KAA1C;AAAiDC,uBAAW,EAAEk+D,IAAI,CAAC/6E,WAAL,CAAiB6c;AAA/E,WAAX,CAAX;;AACA,cAAI,CAACoW,EAAE,CAACU,UAAH,CAAcT,EAAd,EAAkB,KAAlB,CAAL,EAA+B;AAC3B,mBAAO,OAAA3yB,4BAAA,CAA6B0yB,EAA7B,CAAP;AACH;;AACD,iBAAO,EAAP;AACH;;;4BACwB;AACrB,cAAI,CAAC,KAAK9tB,QAAN,IAAkB,CAAC,KAAKA,QAAL,CAAc7N,MAArC,EAA6C;AACzC,mBAAO,EAAP;AACH,WAHoB,CAKrB;;;AACA,cAAM27B,EAAE,GAAG,IAAI,UAAA3sB,MAAJ,CAAW;AAAElR,gBAAI,EAAE,KAAK+P,QAAL,CAAc,KAAKzR,KAAnB,EAA0BqW,OAA1B,CAAkC/J,WAAlC,CAA8CjB;AAAtD,WAAX,CAAX;AACA,iBAAO,UAAAF,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB2+B,UAApB,CAA+BV,EAA/B,EAAmC,KAAnC,IAA4C,SAA5C,GAAwD,EAA/D;AACH;;;4BAEwB;iBAAA,CACrB;;;AACA,iBAAO,CAAP,KAAO,KAAK2nD,SAAL,CAAe7wE,OAAf,MAAsB,IAAtB,IAAsB,aAAtB,GAAsB,MAAtB,GAAsB,GAAEwjB,YAAF,CAAej2B,MAA5C;AACH;;;4BAEsB;;;AACnB,iBAAO,YAAKsjF,SAAL,CAAe7wE,OAAf,MAAsB,IAAtB,IAAsB,aAAtB,GAAsB,MAAtB,GAAsB,GAAE6P,YAAxB,MAAoC,YAAI,KAAKghE,SAAL,CAAe7wE,OAAnB,MAA0B,IAA1B,IAA0B,aAA1B,GAA0B,MAA1B,GAA0B,GAAEiiB,QAA5B,MAAoC,IAApC,IAAoC,aAApC,GAAoC,MAApC,GAAoC,GAAE10B,MAA1E,CAAP;AACH;;;4BAEqB;AAClB,iBAAO,CAAC,WAAD,EAAc,UAAd,EAA0B,UAA1B,EAAsC4X,QAAtC,CAA+C,KAAK2K,MAApD,CAAP;AACH;;;;MArE2C,OAAAhoB,a;;AANhD;;;uBAMayoF,0B,EAA0B,8B,EAAA,0C;AAAA,K;;;YAA1BA,0B;AAA0B,8C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,e;AAAA,c;AAAA,s9C;AAAA;AAAA;AC1CvC;AAGA;AACI;AACI;AAaA;AAKJ;AACA;AACI;AACI;AAMA;AACJ;AACA;AACI;AAGA;AACI;AAWA;AAGJ;AACA;AACI;AAQA;AAOJ;AACJ;AACJ;AAEJ;;;;AA1EI;AAIiC;AAAA;AACxB;AAAA;AAaS;AAAA;AAOiB;AAAA;AACtB;AAAA;AAM4C;AAAA;AAGpB;AAAA;AAIX;AAAA;AAWA;AAAA;AAKA;AAAA;AAQA;AAAA;;;;;;;;;;2BDrBjBA,0B,EAA0B;cANtC,OAAAphC,SAMsC;eAN5B;AACPlnD,kBAAQ,EAAE,yBADH;AAEPmnD,qBAAW,EAAE,sCAFN;AAGPC,mBAAS,EAAE,CAAC,sCAAD,CAHJ;AAIP4B,yBAAe,EAAE,OAAAC,uBAAA,CAAwBC;AAJlC,S;AAM4B,Q;;;;;;;;gBAIlC,OAAAxmD;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAA2kD;;;;;;;;;;;;;;;;;;;;;;;;AE3DL;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;AAEA,QAAMssB,MAAM,GAAW,CACnB;AACItkD,UAAI,EAAE,SADV;AAEIukD,eAAS,EAAE,yBAAAoV;AAFf,KADmB,EAKnB;AACI35D,UAAI,EAAE,gBADV;AAEIukD,eAAS,EAAE,+BAAAqV;AAFf,KALmB,EASnB;AACI55D,UAAI,EAAE,cADV;AAEIukD,eAAS,EAAE,yBAAAsV;AAFf,KATmB,EAanB;AACI75D,UAAI,EAAE,QADV;AAEIukD,eAAS,EAAE,2BAAA0L;AAFf,KAbmB,EAiBnB;AACIjwD,UAAI,EAAE,MADV;AAEIukD,eAAS,EAAE,iCAAAsM;AAFf,KAjBmB,EAqBnB;AACI7wD,UAAI,EAAE,QADV;AAEIukD,eAAS,EAAE,4BAAAuV;AAFf,KArBmB,EAyBnB;AACI95D,UAAI,EAAE,cADV;AAEI1V,UAAI,EAAE;AAAEgO,mBAAW,EAAE;AAAf,OAFV;AAGIisD,eAAS,EAAE,4BAAAuV;AAHf,KAzBmB,EA8BnB;AACI95D,UAAI,EAAE,mBADV;AAEIukD,eAAS,EAAE,4BAAAuV;AAFf,KA9BmB,EAkCnB;AACI95D,UAAI,EAAE,aADV;AAEIukD,eAAS,EAAE,4BAAAuV;AAFf,KAlCmB,EAsCnB;AACI95D,UAAI,EAAE,WADV;AAEIukD,eAAS,EAAE,yBAAAwV;AAFf,KAtCmB,EA0CnB;AACI/5D,UAAI,EAAE,0BADV;AAEI0kD,kBAAY,EAAE;AAAA,eAAM;AAAA;AAAO;AAAA,yEAAP;AAAA,WAAqDj0D,IAArD,CAA0D,UAACtb,CAAD;AAAA,iBAAOA,CAAC,CAACyzE,qBAAT;AAAA,SAA1D,CAAN;AAAA;AAFlB,KA1CmB,EA8CnB;AACI5oD,UAAI,EAAE,IADV;AAEIukD,eAAS,EAAE,yBAAAyV;AAFf,KA9CmB,CAAvB;;QAwDaC,oB;;;;AAJb;;YAIaA;;;;yBAAAA,oB;AAAoB,O;AAAA,gBAHpB,CAAC,SAAAnV,YAAA,CAAaiD,QAAb,CAAsBzD,MAAtB,CAAD,CAGoB,EAFnB,SAAAQ,YAEmB;;;;+EAApBmV,oB,EAAoB;AAAA;AAAA,kBAFnB,SAAAnV,YAEmB;AAAA,O;AAFP,K;;;;;2BAEbmV,oB,EAAoB;cAJhC,OAAAhrF,QAIgC;eAJvB;AACNC,iBAAO,EAAE,CAAC,SAAA41E,YAAA,CAAaiD,QAAb,CAAsBzD,MAAtB,CAAD,CADH;AAENvzE,iBAAO,EAAE,CAAC,SAAA+zE,YAAD;AAFH,S;AAIuB,Q;;;;;;;;;;;;;;;;;;;;;;ACnEjC;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAQA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEa,YAAAh9D,uBAAA,GAA4C;AACrDC,uBAAiB,EAAE;AADkC,KAA5C;AAIA,YAAAC,kBAAA,GAAqB,QAAAL,aAAA,CAAc,QAAAG,uBAAd,EAC9B,QAAAF,EAAA,CAAG,cAAAK,oBAAH,EAAyB,UAACnZ,KAAD,EAA0BkW,MAA1B,EAAqC;AAC1D,aAAO,gCACAlW,KADA,GACK;AACRoZ,kBAAU,EAAE,MAAF,OAAE,CAAF,kBACHpZ,KAAK,CAACoZ,UADH,CAAE,EAELlD,MAAM,CAACmD,OAFF;AADJ,OADL,CAAP;AAOH,KARD,CAD8B,EAU9B,QAAAP,EAAA,CAAG,cAAAQ,oBAAH,EAAyB,UAAAtZ,KAAK,EAAI;;;AAAA,6CAC3BA,KAD2B,GACtB;AACRoZ,kBAAU,EACV;AACIkF,kBAAQ,EAAE,CAAF,KAAEte,KAAK,SAAL,IAAAA,KAAK,WAAL,GAAK,MAAL,GAAAA,KAAK,CAAEoZ,UAAP,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAEkF,QADjC;AAEIzU,kBAAQ,EAAE,CAAF,KAAE7J,KAAK,SAAL,IAAAA,KAAK,WAAL,GAAK,MAAL,GAAAA,KAAK,CAAEoZ,UAAP,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAEvP,QAFjC;AAGIjE,gBAAM,EAAE,OAAAD,mBAAA,CAAoB,IAAI,UAAAwQ,MAAJ,CAAW;AAAElR,gBAAI,EAAEJ,IAAI,CAACunB,GAAL,EAAR;AAAoBK,uBAAW,EAAE,KAAjC;AAAyCC,uBAAW,EAAE,CAAF,KAAE1sB,KAAK,SAAL,IAAAA,KAAK,WAAL,GAAK,MAAL,GAAAA,KAAK,CAAEoZ,UAAP,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAEvP;AAAzE,WAAX,CAApB,EAAsH,EAAtH;AAHZ;AAFQ,OADsB;AASZ,KATtB,CAV8B,EAoB9B,QAAAiP,EAAA,CAAG,cAAAS,iBAAH,EAAsB,UAAAvZ,KAAK;AAAA,aAAK,MAAD,OAAC,CAAD,kBACxBA,KADwB,CAAC,EACpB;AACRwZ,wBAAgB,EAAE,IAAI3U,IAAJ;AADV,OADoB,CAAL;AAAA,KAA3B,CApB8B,EAwB9B,QAAAiU,EAAA,CAAG,cAAAW,gBAAH,EAAqB,UAACzZ,KAAD,EAA0BkW,MAA1B,EAAqC;AACtD,aAAO,gCACAlW,KADA,GACK;AACRiZ,yBAAiB,EAAE/C,MAAM,CAACmD;AADlB,OADL,CAAP;AAIH,KALD,CAxB8B,EA8B9B,QAAAP,EAAA,CAAG,cAAAY,gBAAH,EAAqB,UAAC1Z,KAAD;AAAA,aAA8B,MAAD,OAAC,CAAD,kBAC3CA,KAD2C,CAAC,EACvC;AACRiZ,yBAAiB,EAAE,QAAAD,uBAAA,CAAwBC;AADnC,OADuC,CAA9B;AAAA,KAArB,CA9B8B,CAArB;;;;;;;;;;;;;;;;;;;;ACnBb;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEa,YAAAsgE,yBAAA,GAA4B,CACrC,8BAAAqI,wBADqC,EAErC,2BAAAT,sBAFqC,EAGrC,yBAAAa,oBAHqC,EAIrC,iCAAAzB,4BAJqC,EAKrC,kCAAAmE,4BALqC,EAMrC,mCAAAmE,6BANqC,EAOrC,6BAAAuC,wBAPqC,EAQrC,gCAAAjB,0BARqC,EASrC,iCAAAzB,2BATqC,EAUrC,4BAAAsC,uBAVqC,EAWrC,qBAAAK,wBAXqC,EAYrC,0BAAAC,oCAZqC,EAarC,uBAAAC,iCAbqC,EAcrC,qBAAAC,6BAdqC,EAerC,iBAAAC,8BAfqC,EAgBrC,yBAAAP,oBAhBqC,EAiBrC,yBAAAH,oBAjBqC,EAkBrC,yBAAAF,oBAlBqC,EAmBrC,8BAAAa,yBAnBqC,EAoBrC,2BAAAC,sBApBqC,EAqBrC,sCAAAC,gCArBqC,EAsBrC,kCAAAC,4BAtBqC,EAuBrC,6BAAAC,uBAvBqC,EAwBrC,+BAAAzD,yBAxBqC,EAyBrC,8BAAA0D,wBAzBqC,EA0BrC,sCAAAC,+BA1BqC,EA2BrC,mCAAAC,6BA3BqC,EA4BrC,+BAAAnB,yBA5BqC,EA6BrC,8BAAAoB,wBA7BqC,EA8BrC,iCAAAC,2BA9BqC,EA+BrC,4CAAAC,qCA/BqC,EAgCrC,qBAAAZ,6BAhCqC,EAiCrC,wBAAAa,mBAjCqC,EAkCrC,yBAAAC,oBAlCqC,EAmCrC,iCAAAvK,2BAnCqC,CAA5B;AAsCA,YAAAlI,oBAAA,GAAuB,CAChC,SAAA35E,YADgC,EAEhC,KAAAktD,QAFgC,EAGhC,SAAAyK,eAHgC,EAIhC,SAAAR,eAJgC,EAKhC,wBAAA+c,wBALgC,EAMhC,QAAAjnB,mBANgC,EAOhC,gBAAA0qB,mBAPgC,EAQhC,QAAA3qB,WARgC,EAShC,sBAAAmnB,uBATgC,EAUhC,aAAA6D,SAVgC,EAWhC,mBAAAqU,cAAA,CAAetW,OAAf,CAAuB;AACnB37B,aAAO,EAAE,mBAAAkyC,WADU;AAEnBC,gBAAU,EAAE,WAAAC;AAFO,KAAvB,CAXgC,EAehC,0BAAAC,oBAfgC,CAAvB;;QA2BA9W,a;;;;AARb;;YAQaA;;;;yBAAAA,a;AAAa,O;AAAA,6CALf,QAAAgE,oBAKe,IAJlB,yBAAAsR,oBAIkB,EAHlB,QAAAjzE,WAAA,CAAYD,UAAZ,CAAuB,aAAvB,EAAsC,uBAAAiB,kBAAtC,CAGkB;;;;+EAAb28D,a,EAAa;AAAA,uBAhEtB,8BAAA+L,wBAgEsB,EA/DtB,2BAAAT,sBA+DsB,EA9DtB,yBAAAa,oBA8DsB,EA7DtB,iCAAAzB,4BA6DsB,EA5DtB,kCAAAmE,4BA4DsB,EA3DtB,mCAAAmE,6BA2DsB,EA1DtB,6BAAAuC,wBA0DsB,EAzDtB,gCAAAjB,0BAyDsB,EAxDtB,iCAAAzB,2BAwDsB,EAvDtB,4BAAAsC,uBAuDsB,EAtDtB,qBAAAK,wBAsDsB,EArDtB,0BAAAC,oCAqDsB,EApDtB,uBAAAC,iCAoDsB,EAnDtB,qBAAAC,6BAmDsB,EAlDtB,iBAAAC,8BAkDsB,EAjDtB,yBAAAP,oBAiDsB,EAhDtB,yBAAAH,oBAgDsB,EA/CtB,yBAAAF,oBA+CsB,EA9CtB,8BAAAa,yBA8CsB,EA7CtB,2BAAAC,sBA6CsB,EA5CtB,sCAAAC,gCA4CsB,EA3CtB,kCAAAC,4BA2CsB,EA1CtB,6BAAAC,uBA0CsB,EAzCtB,+BAAAzD,yBAyCsB,EAxCtB,8BAAA0D,wBAwCsB,EAvCtB,sCAAAC,+BAuCsB,EAtCtB,mCAAAC,6BAsCsB,EArCtB,+BAAAnB,yBAqCsB,EApCtB,8BAAAoB,wBAoCsB,EAnCtB,iCAAAC,2BAmCsB,EAlCtB,4CAAAC,qCAkCsB,EAjCtB,qBAAAZ,6BAiCsB,EAhCtB,wBAAAa,mBAgCsB,EA/BtB,yBAAAC,oBA+BsB,EA9BtB,iCAAAvK,2BA8BsB;AA9BK,kBAI3B,SAAA7hF,YAJ2B,EAK3B,KAAAktD,QAL2B,EAM3B,SAAAyK,eAN2B,EAO3B,SAAAR,eAP2B,EAQ3B,wBAAA+c,wBAR2B,EAS3B,QAAAjnB,mBAT2B,EAU3B,gBAAA0qB,mBAV2B,EAW3B,QAAA3qB,WAX2B,EAY3B,sBAAAmnB,uBAZ2B,EAa3B,aAAA6D,SAb2B,EAalB,iBAbkB,EAkB3B,0BAAAyU,oBAlB2B,EA0BvB,yBAAAxB,oBA1BuB,EA0BH,qBA1BG;AA8BL,O;AAJE,K;;;;;2BAIftV,a,EAAa;cARzB,OAAA11E,QAQyB;eARhB;AACN6B,sBAAY,qBAAM,QAAAu3E,yBAAN,CADN;AAENn5E,iBAAO,+BACA,QAAAy5E,oBADA,IAEH,yBAAAsR,oBAFG,EAGH,QAAAjzE,WAAA,CAAYD,UAAZ,CAAuB,aAAvB,EAAsC,uBAAAiB,kBAAtC,CAHG;AAFD,S;AAQgB,Q;;;2BAtDtB,qBAAAmyE,wB,EAAwB,kiKAVxB,8BAAAzJ,wBAUwB,EATxB,2BAAAT,sBASwB,EARxB,yBAAAa,oBAQwB,EAPxB,iCAAAzB,4BAOwB,EANxB,kCAAAmE,4BAMwB,EALxB,mCAAAmE,6BAKwB,EAJxB,6BAAAuC,wBAIwB,EAHxB,gCAAAjB,0BAGwB,EAFxB,iCAAAzB,2BAEwB,EADxB,4BAAAsC,uBACwB,EAAxB,qBAAAK,wBAAwB,EACxB,0BAAAC,oCADwB,EAExB,uBAAAC,iCAFwB,EAqBxB,qBAAAC,6BArBwB,EAIxB,iBAAAC,8BAJwB,EAKxB,yBAAAP,oBALwB,EAMxB,yBAAAH,oBANwB,EAOxB,yBAAAF,oBAPwB,EAQxB,8BAAAa,yBARwB,EASxB,2BAAAC,sBATwB,EAUxB,sCAAAC,gCAVwB,EAWxB,kCAAAC,4BAXwB,EAYxB,6BAAAC,uBAZwB,EAaxB,+BAAAzD,yBAbwB,EAcxB,8BAAA0D,wBAdwB,EAexB,sCAAAC,+BAfwB,EAgBxB,mCAAAC,6BAhBwB,EAiBxB,+BAAAnB,yBAjBwB,EAkBxB,8BAAAoB,wBAlBwB,EAmBxB,iCAAAC,2BAnBwB,EAoBxB,4CAAAC,qCApBwB,EAsBxB,wBAAAC,mBAtBwB,EAuBxB,yBAAAC,oBAvBwB,EAwBxB,iCAAAvK,2BAxBwB,C,EAwBG,+S;;;;;;;;;;;;;;;;;;;;;;;;AC1F/B;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACTY;AACE;AAME;AAAA;AAAA;AAAA;AAAA;AAAA;AACF;AACF;;;;;;;AAPI;AAAA,+CAAgB,MAAhB,EAAgB,mBAAhB,EAAgB,WAAhB,EAAgB,aAAhB,EAAgB,UAAhB,EAAgB,gBAAhB,EAAgB,OAAhB,EAAgB,KAAhB;;;;;;AAVV;AAQM;AAYN;;;;;AAZoB;AAAA,kDAAmE,cAAnE,EAAmE,eAAnE;;;;;;AAclB;AACE;AACA;AAAG;AAA6B;AAClC;;;;;;AACA;AACE;AACA;AAAG;AAAyD;AAC9D;;;;;;AACA;AACA;AACE;AAAG;AAA8D;AACnE;;;;;;AAZF;AACE;AAIA;AAIA;AAIF;;;;;AAbgB;AACT;AAAA;AAIA;AAAA;AAIA;AAAA;;;;;;AA/BT;AACE;AAqBA;AAcF;;;;;AAnCO;AAAA;AAqBmC;AAAA;;;;;;AAgBtC;;;;;;;;;;AAAA;;;;AAAyB;;;;;;;;AAQ/B;AAAI;AAAA;AAAA;AAAA,kCAAkB,CAAlB;AAAmB,SAAnB;AAA2C;AAAC;;;;;;;;AAChD;AAAI;AAAA;AAAA;AAAA;AAAA;AAAwC;AAAG;;;;;;;;AAC/C;AAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AACF;AACF;;;;;;AAF0B;AACxB;AAAA;;;;;;;;AAEF;AAAI;AAAA;AAAA;AAAA;AAAA;AAAwC;AAAG;;;;;;;;AAC/C;AAAI;AAAA;AAAA;AAAA;AAAA;AACF;AACF;;;;;AADE;AAAA;;;;QDtBSqJ,wB;;;;;AAwET,wCACYzvE,KADZ,EAEY06D,MAFZ,EAGYpwB,OAHZ,EAIY48B,MAJZ,EAKYnuD,SALZ,EAMY5Y,KANZ,EAOYstC,KAPZ,EAOoC;AAAA;;AAAA;;AAEhC;AARQ,iBAAAztC,KAAA,GAAAA,KAAA;AACA,iBAAA06D,MAAA,GAAAA,MAAA;AACA,iBAAApwB,OAAA,GAAAA,OAAA;AACA,iBAAA48B,MAAA,GAAAA,MAAA;AACA,iBAAAnuD,SAAA,GAAAA,SAAA;AACA,iBAAA5Y,KAAA,GAAAA,KAAA;AACA,iBAAAstC,KAAA,GAAAA,KAAA;AAxEL,iBAAAwjC,cAAA,GAAiB,IAAI,OAAAlsF,eAAJ,CACpB,UAAA4X,YAAA,CAAaC,KAAb,EADoB,CAAjB;AAIA,iBAAAs0E,YAAA,GAAe,KAAf;AACA,iBAAAC,SAAA,GAAY,KAAZ;AACA,iBAAA3T,gBAAA,GAAmB,0BAAAA,gBAAnB;AACA,iBAAAv4B,MAAA,GAAkB,KAAlB;AAOA,iBAAAtqC,UAAA,GAAgC;AACnC4qE,qBAAW,EAAE,CADsB;AAEnC6L,sBAAY,EAAE,CAFqB;AAGnCC,mBAAS,EAAE;AAHwB,SAAhC;AAKP,iBAAAC,cAAA,GAAwB,EAAxB;AACA,iBAAAC,cAAA,GAAwB,EAAxB,CAoDoC,CAiHpC;;AACO,iBAAAC,YAAA,GAAe,UAAC1gF,OAAD;AAAA,iBAAa,4BAAAynB,sBAAA,CAAuBznB,OAAvB,EAAgCZ,MAAhC,CAAuC,UAAAwB,CAAC;AAAA,mBAAI,EAAEA,CAAC,CAACuM,OAAF,CAAUmQ,YAAV,IAA0B1c,CAAC,CAACuM,OAAF,CAAUsZ,eAAV,KAA8B,QAA1D,CAAJ;AAAA,WAAxC,CAAb;AAAA,SAAf;;AA8DA,iBAAAsS,UAAA,GAAa,UAAC73B,IAAD,EAAYK,KAAZ,EAA2By3B,UAA3B;AAAA,iBAAmD93B,IAAI,IAAIA,IAAI,CAACK,KAAD,CAAZ,IAAuBL,IAAI,CAACK,KAAD,CAAJ,CAAYrB,WAAZ,GAA0BoS,QAA1B,CAAmC0mB,UAAnC,CAA1E;AAAA,SAAb;;AAiGS,iBAAA2nD,QAAA,GAAW;AAAA,iBAAM,SAAKC,OAAL,CAAa,SAAK/2E,UAAL,CAAgB4qE,WAAhB,GAA8B,CAA3C,CAAN;AAAA,SAAX;;AACA,iBAAAoM,QAAA,GAAW;AAAA,iBAAM,SAAKD,OAAL,CAAa,SAAK/2E,UAAL,CAAgB4qE,WAAhB,GAA8B,CAA3C,CAAN;AAAA,SAAX;;AACA,iBAAAqM,SAAA,GAAY;AAAA,iBAAM,SAAKF,OAAL,CAAa,SAAKG,KAAL,CAAWA,KAAX,CAAiBrmF,MAA9B,CAAN;AAAA,SAAZ;;AACA,iBAAAsmF,SAAA,GAAY;AAAA,iBAAM,SAAKJ,OAAL,CAAa,SAAKG,KAAL,CAAWA,KAAX,CAAiBrmF,MAAjB,GAA0B,CAAvC,CAAN;AAAA,SAAZ;;AACA,iBAAAumF,QAAA,GAAW,UAACC,IAAD;AAAA,iBAAkB,SAAKN,OAAL,CAAaM,IAAb,CAAlB;AAAA,SAAX;;AArRoB;AAGnC;;;;mCAEc;AAAA;;AACX,cAAMz5E,UAAU,GAAG,GAAnB;AACA,cAAMrS,QAAQ,GAAG,KAAKud,MAAL,CAAYvd,QAA7B;AACA,cAAMuV,MAAM,GAAG,KAAKgI,MAAL,CAAYlV,IAA3B;AAEA,eAAKlH,YAAL,CACI,aADJ,EAEI,KAAK2Y,KAAL,CACKgC,MADL,CACY,OAAAC,iBADZ,EAEK7H,IAFL,CAEU,YAAA+H,IAAA,CAAK,CAAL,CAFV,EAGK5a,SAHL,CAGe,UAAC2a,IAAD,EAA4B;AACnC;AACA,oBAAI,CAAC0J,WAAL,GAAmB,IAAI,cAAAgS,IAAJ,CAAS1b,IAAT,CAAnB;AAEH,WAPL,CAFJ;AAYA,eAAK7a,YAAL,CAAkB,WAAlB,EAA+B,KAAK2Y,KAAL,CAAW5F,IAAX,CAC3B,QAAA4H,MAAA,CAAO,YAAA7D,qBAAP,CAD2B,EAE3B,QAAA6D,MAAA,CAAO,YAAAvD,kCAAP,CAF2B,EAG3B,YAAAtP,GAAA,CAAI,UAAC0kB,OAAD,EAA4C;AAC5C,mBAAO,cAAAD,qBAAA,CAAsBC,OAAtB,CAAP;AACH,WAFD,CAH2B,EAM3B,YAAAq6B,oBAAA,EAN2B,EAO7B3mD,SAP6B,CAOnB,UAAAkQ,IAAI,EAAI;AAChB;AACA,gBAAG,QAAI,CAACw6E,SAAL,KAAmB,QAAI,CAACxuE,MAAL,CAAYlV,IAAlC,EAAwC;AACpC,sBAAI,CAACyR,KAAL,CAAWolE,QAAX,CACI,WAAA9rE,qBAAA,CAAsB;AAClBoB,qBAAK,EAAE,QAAI,CAACkR,WAAL,CAAiBlR,KADN;AAElBzB,oBAAI,EAAE,UAAAlG,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB+J,EAFR;AAGlBwI,sBAAM,EAANA,MAHkB;AAIlBzO,sBAAM,EAAE;AAJU,eAAtB,CADJ;AAQH,aAXe,CAahB;;;AACA,gBAAMA,MAAM,GAAG,UAAA+F,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB8J,YAApB,CAAiC,QAAjC,EAA2C7I,QAA3C,CAAoD;AAAEJ,qBAAO,EAAE;AAAX,aAApD,EAAoEkJ,EAApE,GAAyE,UAAAF,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB+J,EAA5G,CAdgB,CAehB;;AACAxN,sBAAU,CAAC,YAAM;AACb,sBAAI,CAACqnF,OAAL,CAAarxE,MAAb;;AACA,sBAAI,CAAC0E,KAAL,CAAWib,iBAAX,CAA6B,YAAM;AAC/B,wBAAI,CAACC,QAAL,CAAc,iBAAd,EAAiC;AAAA,yBAAM,QAAI,CAACyxD,OAAL,CAAarxE,MAAb,EAAqB,IAArB,CAAN;AAAA,iBAAjC,EAAmE,KAAK,IAAxE;AACH,eAFD;AAIH,aANS,EAMPzO,MAAM,GAAG,IANF,CAAV;AASH,WAhC8B,CAA/B;;AAoCA,cAAMklF,QAAQ,GAAG,SAAXA,QAAW,CAACzgF,CAAD,EAAIC,CAAJ;AAAA,mBAAUD,CAAC,CAACnI,IAAF,GAASoI,CAAC,CAACpI,IAArB;AAAA,WAAjB;;AACA,cAAM6oF,SAAS,GAAG,SAAZA,SAAY,CAAC1gF,CAAD,EAAIC,CAAJ;AAAA,mBAAUA,CAAC,CAACpI,IAAF,GAASmI,CAAC,CAACnI,IAArB;AAAA,WAAlB;;AAEA,eAAKjC,YAAL,CACI,gBADJ,EAEI,KAAK2Y,KAAL,CAAW5F,IAAX,CAAgB,QAAA4H,MAAA,CAAO9b,QAAP,CAAhB,EAAkCqB,SAAlC,CAA4C,UAACkQ,IAAD,EAAU;;;AAClD,oBAAI,CAACw5E,cAAL,CAAoBx5E,IAApB,CAAyBA,IAAzB;;AACA,gBAAI,CAACA,IAAI,CAAC8mD,OAAL,EAAD,IAAmBloD,KAAK,CAACsB,OAAN,CAAc,CAAD,KAACF,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEiH,OAAN,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAE5N,OAA7B,CAAvB,EAA8D;AAC1D,kBAAIA,OAAO,GAAG,mBAAI,CAAH,KAAG2G,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEiH,OAAN,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAE5N,OAAnB,EAA4BU,IAA5B,CACV,QAAI,CAACiS,MAAL,CAAY2uE,YAAZ,GAA2BD,SAA3B,GAAuCD,QAD7B,CAAd;;AAGA,sBAAI,CAAChB,YAAL,GAAoB,CAAC,CAACpgF,OAAO,CAACtF,MAA9B;AACA,sBAAI,CAAC2lF,SAAL,GAAiB,KAAjB,CAL0D,CAM1D;;AACA,sBAAI,CAACkB,WAAL,GAAmBvhF,OAAnB;AAEA;;AACA,sBAAI,CAACwhF,oBAAL,CAA0B,IAA1B;AAEH,aAZD,MAYO;AACH,sBAAI,CAACpB,YAAL,GAAoB,KAApB;AACA,sBAAI,CAACC,SAAL,GAAiB,KAAjB;AACA,sBAAI,CAAC93E,QAAL,GAAgB,EAAhB;AACA,sBAAI,CAACsB,UAAL,CAAgBy2E,YAAhB,GAA+B,CAA/B;;AACA,sBAAI,CAAC3jC,KAAL,CAAWqB,aAAX;AACH;AACJ,WArBD,CAFJ;;AA0BA,cAAIjgD,MAAJ,EAAY;AACR,iBAAKo2C,MAAL,GAAcp2C,MAAM,CAAC2J,UAAP,GAAoBD,UAAlC;AAEH;;AAED,iBAAA+xE,SAAA,CAAUz7E,MAAV,EAAkB,QAAlB,EACKuL,IADL,CACU,YAAAmwE,YAAA,CAAa,GAAb,CADV,EAEKnwE,IAFL,CAGQ,YAAAowE,GAAA,CAAI;AACA/yE,gBAAI,EAAE,cAACkjE,GAAD,EAAS;AACX,kBAAMl/D,MAAM,GAAGk/D,GAAG,CAACl/D,MAAnB;AACA,sBAAI,CAACwpC,MAAL,GAAcxpC,MAAM,CAACjD,UAAP,GAAoBD,UAAlC;AACH;AAJD,WAAJ,CAHR,EASMhR,SATN;AAWA,eAAKU,OAAL,CAAa,OAAb,EAAsB;AAAA,mBAClB,QAAI,CAACZ,YAAL,CACI,aADJ,EAEI,QAAI,CAACqzE,MAAL,CAAYkJ,aAAZ,CAA0Br8E,SAA1B,CAAoC,UAACsuC,MAAD,EAAY;AAC5C,kBAAIA,MAAM,CAACg7B,GAAP,CAAW,MAAX,CAAJ,EAAwB,QAAI,CAAC6gB,OAAL,CAAa,CAAC77C,MAAM,CAAC72B,GAAP,CAAW,MAAX,CAAd,EAAkC,KAAlC;AAC3B,aAFD,CAFJ,CADkB;AAAA,WAAtB;AAQH;;;gDAM8BuzE,a,EAAeC,c,EAAgB;AAC1D,cAAIC,QAAQ,GAAG,EAAf;;AACA,eAAK,IAAI9qF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4qF,aAAa,CAAC/mF,MAAlC,EAA0C7D,CAAC,IAAI6qF,cAA/C,EAA+D;AAC3DC,oBAAQ,CAACthF,IAAT,CAAcohF,aAAa,CAACnjF,KAAd,CAAoBzH,CAApB,EAAuBA,CAAC,GAAG6qF,cAA3B,CAAd;AACH;;AACD,iBAAOC,QAAP;AACH;;;oCAGkBC,O,EAAc;;;AAE7B,cAAI,OAAAA,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAEt0E,SAAT,MAAkB,IAAlB,IAAkB,aAAlB,GAAkB,MAAlB,GAAkB,GAAEjR,YAApB,OAAgC,MAAKulF,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAEt0E,SAAd,MAAuB,IAAvB,IAAuB,aAAvB,GAAuB,MAAvB,GAAuB,GAAElR,aAAzD,KAA0E,OAAAwlF,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAET,SAAT,MAAkB,IAAlB,IAAkB,aAAlB,GAAkB,MAAlB,GAAkB,GAAE9kF,YAApB,OAAgC,MAAKulF,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAET,SAAd,MAAuB,IAAvB,IAAuB,aAAvB,GAAuB,MAAvB,GAAuB,GAAE/kF,aAAzD,CAA9E,EAAsJ;AAClJ,iBAAK4/E,OAAL,CAAa,KAAKrpE,MAAL,CAAYlV,IAAzB;AACH;;AACD,cAAI,OAAAmkF,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAEC,YAAT,MAAqB,IAArB,IAAqB,aAArB,GAAqB,MAArB,GAAqB,GAAExlF,YAAvB,OAAmC,MAAKulF,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAEC,YAAd,MAA0B,IAA1B,IAA0B,aAA1B,GAA0B,MAA1B,GAA0B,GAAEzlF,aAA/D,CAAJ,EAAkF;AAC9E,iBAAKolF,oBAAL,CAA0B,IAA1B;AACH,WAFD,MAGI,IAAI,OAAAI,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAEE,eAAT,MAAwB,IAAxB,IAAwB,aAAxB,GAAwB,MAAxB,GAAwB,GAAEzlF,YAA1B,OAAsC,MAAKulF,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAEE,eAAd,MAA6B,IAA7B,IAA6B,aAA7B,GAA6B,MAA7B,GAA6B,GAAE1lF,aAArE,CAAJ,EAAwF;AACpF,iBAAKolF,oBAAL,CAA0B,KAA1B;AACH;AACR;;;6CAI2BO,a,EAAwB;AAAA;;AAEhD;AACA,cAAMC,UAAU,GAAI,KAAKH,YAAL,CAAkB3hF,WAAlB,GAAgC02C,IAAhC,EAApB,CAHgD,CAIhD;;AAEA,cAAG,KAAK2qC,WAAR,EAAqB;AAEjB,gBAAGS,UAAH,EAAe;AACX,kBAAGD,aAAH,EAAkB;AACd;AACA,oBAAM7oD,QAAQ,sBAAO,KAAKqoD,WAAZ,CAAd,CAFc,CAGd;;;AACA,qBAAKd,cAAL,GAAsBvnD,QAAQ,CAAC95B,MAAT,CAAiB,UAAC8B,IAAD;AAAA,yBACnC,QAAI,CAAC63B,UAAL,CAAgB73B,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAE4Q,IAAtB,EAA4B,OAA5B,EAAqCkwE,UAArC,KACA,QAAI,CAACjpD,UAAL,CAAgB73B,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEksB,SAAtB,EAAiC,OAAjC,EAA0C40D,UAA1C,CAFmC;AAAA,iBAAjB,CAAtB;AAIH,eARD,MASK;AACD,qBAAKvB,cAAL,sBAA2B,KAAKA,cAAhC;AACH;AAEJ,aAdD,MAeM;AACF,mBAAKA,cAAL,sBAA2B,KAAKc,WAAhC;AACF,aAnBe,CAqBhB;;;AACA,iBAAKU,2BAAL,oBAAqC,KAAKxB,cAA1C;AAGJ;AACJ;;;oDAKkCA,c,EAAgB;AAAA;;AAE/C;AACA,cAAMtnD,WAAW,GAAG,KAAK2oD,eAAL,CAAqB5hF,WAArB,GAAmC02C,IAAnC,EAApB;AACA,cAAIvd,aAAa,GAAG,EAApB;;AAEA,cAAGonD,cAAH,EAAmB;AAEf,gBAAGtnD,WAAH,EAAgB;AACZ;AACA,kBAAMD,QAAQ,sBAAOunD,cAAP,CAAd,CAFY,CAGZ;;;AACApnD,2BAAa,GAAGH,QAAQ,CAAC95B,MAAT,CAAiB,UAAC8B,IAAD;AAAA,uBACjC,QAAI,CAAC63B,UAAL,CAAgB73B,IAAhB,EAAsB,OAAtB,EAA+Bi4B,WAA/B,KACA,QAAI,CAACJ,UAAL,CAAgB73B,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEmsB,OAAtB,EAA+B,MAA/B,EAAuC8L,WAAvC,CADA,IAEA,QAAI,CAACJ,UAAL,CAAgB73B,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEksB,SAAtB,EAAiC,MAAjC,EAAyC+L,WAAzC,CAFA,IAGA,QAAI,CAACJ,UAAL,CAAgB73B,IAAhB,EAAsB,iBAAtB,EAAyCi4B,WAAzC,CAHA,IAGyD;AACzD,wBAAI,CAACJ,UAAL,CAAgB73B,IAAhB,EAAsB,aAAtB,EAAqCi4B,WAArC,CAJA,IAKC,CAAAj4B,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEisB,SAAN,KAAmB,CAAC,EAACjsB,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEisB,SAAN,CAAgB/tB,MAAhB,CAAuB,UAAAC,EAAE;AAAA,yBAAIA,EAAE,CAAC9K,IAAH,CAAQ2L,WAAR,GAAsBoS,QAAtB,CAA+B6mB,WAA/B,CAAJ;AAAA,iBAAzB,EAA0Ez+B,MAA3E,CANY;AAAA,eAAjB,CAAhB;AAQH,aAZD,MAaM;AACF2+B,2BAAa,sBAAQonD,cAAR,CAAb;AACF;;AAED,gBAAMyB,gBAAgB,GAAG,KAAKxB,YAAL,CAAkBrnD,aAAlB,CAAzB;AAEA,iBAAKxvB,UAAL,CAAgBy2E,YAAhB,GAA+B4B,gBAAgB,CAACxnF,MAAhD;AACA,iBAAKmP,UAAL,CAAgB4qE,WAAhB,GAA8B,CAAC,KAAK0N,QAAN,GAAiB,CAAjB,GAAqB,KAAKt4E,UAAL,CAAgB4qE,WAAnE;AACA,iBAAK+L,cAAL,GAAsB,KAAK4B,uBAAL,CAA6BF,gBAA7B,EAA+C,KAAKr4E,UAAL,CAAgB02E,SAA/D,CAAtB;AACA,iBAAKh4E,QAAL,GAAgB,KAAKi4E,cAAL,CAAoB,KAAK32E,UAAL,CAAgB4qE,WAAhB,GAA4B,CAAhD,CAAhB;AACA,iBAAK93B,KAAL,CAAWqB,aAAX;AACJ;AAEJ;;;sCAOoB;AACjB;AACA,iBAAO,KAAKqiC,SAAZ,CAFiB,CAEM;AAC1B;;;oCAEkBlzE,O,EAAkB;;;AACjC,cAAI,KAAKG,SAAL,IAAkBH,OAAO,CAAC8f,aAA9B,EAA6C;AACzC,mBAAO,CAAP,KAAO,KAAK3f,SAAL,CAAe5R,KAAf,CAAqBM,IAArB,CAA0B,UAAC4E,CAAD;AAAA,qBAAOuM,OAAO,CAAC8f,aAAR,KAA0BrsB,CAAC,CAAClF,KAAnC;AAAA,aAA1B,OAAmE,IAAnE,IAAmE,aAAnE,GAAmE,MAAnE,GAAmE,GAAEgiB,IAAF,CAAO5B,QAAjF;AACH;;AACD,iBAAO,IAAP;AACH,S,CAED;;;;oCACyBkiE,S,EAAoC;;;;;;;;;;;yBAEtDA,SAAS,CAAC7wE,OAAV,CAAkBmQ,Y;;;;;AACbnQ,2B,GAAU,KAAKo0E,WAAL,CAAiBvlF,IAAjB,CAAsB,UAAA+qB,GAAG;AAAA,6BAAIA,GAAG,CAACtc,EAAJ,KAAWuzE,SAAS,CAAC7wE,OAAV,CAAkB+Z,oBAA7B,IAAqDH,GAAG,CAACN,eAAJ,KAAwB,SAAjF;AAAA,qBAAzB,C;;wBACTtZ,O;;;;;;AACS,2BAAM,KAAK8a,SAAL,CAAe8D,IAAf,CAAoBiyD,SAAS,CAAC7wE,OAAV,CAAkB+Z,oBAAtC,CAAN;;;AAAV/Z,2B;;;AAEJ,yBAAK2tC,cAAL,GAAsB,4BAAArzB,sBAAA,CAAuB,CAACta,OAAD,CAAvB,EAAkC,CAAlC,CAAtB;;;AAEJ,yBAAKwvC,KAAL,CAAWqB,aAAX,G,CAEA;;AACMm+B,8B,GAAa,KAAK/F,MAAL,CAAY5lE,IAAZ,CAAiB,kCAAAynE,4BAAjB,EAA+C;AAC9DxnE,gCAAU,EAAE,+BADkD;AAE9D1B,0BAAI,EAAE;AACF5B,+BAAO,EAAE6wE,SAAS,CAAC7wE,OADjB;AAEF6uE,+BAAO,EAAE,mBAAM;AACX,kCAAI,CAACA,OAAL,CAAa,KAAb;AACH,yBAJC;AAMFlgE,gCAAQ,EAAE,KAAKumE,WAAL,CAAiBrE,SAAS,CAAC7wE,OAA3B,CANR;AAOF2tC,sCAAc,EAAE,YAAKA,cAAL,MAAmB,IAAnB,IAAmB,aAAnB,GAAmB,MAAnB,GAAmB,GAAE3tC,OAArB,KAAgC;AAP9C,uBAFwD;AAW9Do1C,+BAAS,EAAE,KAXmD;AAY9DC,mCAAa,EAAE;AAZ+C,qBAA/C,C;AAenB25B,8BAAU,CAACngC,WAAX,GAAyBvlD,SAAzB,CAAmC,UAACwkF,IAAD,EAAU;AACzCA,0BAAI,KAAK,sBAAT,IAAmC,QAAI,CAACS,sBAAL,EAAnC;;AACA,8BAAI,CAAC/+B,KAAL,CAAWqB,aAAX,GAFyC,CAGzC;AACA;;AACH,qBALD;;;;;;;;;AAMH;;;iDAE+B;AAC5B,eAAK9uC,KAAL,CAAWolE,QAAX,CAAoB,cAAAznE,oBAAA,EAApB;AACA,eAAKqC,KAAL,CAAWolE,QAAX,CAAoB,QAAAzzD,mBAAA,CAAoByrC,KAApB,EAApB;AACA,eAAK3P,KAAL,CAAWqB,aAAX;AACH;;;gCAQcskC,Q,EAAyC;AAAA,cAAvBjwE,KAAuB,uEAAN,IAAM;AACpD,cAAI,CAAC,KAAK0uE,KAAL,CAAW/iD,KAAhB,EAAuB;AACvB,cAAMkjD,IAAI,GAAGpoF,IAAI,CAACmD,GAAL,CAAS,CAAT,EAAYnD,IAAI,CAACq+B,GAAL,CAASmrD,QAAT,EAAmB,KAAKvB,KAAL,CAAW/iD,KAA9B,CAAZ,CAAb;AACA,cAAI3rB,KAAJ,EAAW,KAAKmnC,OAAL,CAAapL,QAAb,CAAsB,EAAtB,EAA0B;AAAE2tC,sBAAU,EAAE,KAAKnS,MAAnB;AAA2BxuB,uBAAW,EAAE;AAAE8lC,kBAAI,EAAJA;AAAF;AAAxC,WAA1B;AACX,eAAKr3E,UAAL,CAAgB4qE,WAAhB,GAA8ByM,IAA9B;AACA,eAAK34E,QAAL,GAAgB,KAAKi4E,cAAL,CAAoB,KAAK32E,UAAL,CAAgB4qE,WAAhB,GAA4B,CAAhD,CAAhB;AACA,eAAK93B,KAAL,CAAWqB,aAAX,GANoD,CAOpD;AACH;;;kCAE0E;AAAA,cAA5DrzC,MAA4D,uEAA3C,KAAKw2E,SAAsC;AAAA,cAA3BoB,iBAA2B,uEAAP,KAAO;;;;AACvE,cAAI,QAAC,KAAKznE,WAAN,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAElR,KAAnB,CAAJ,EAA8B;AAC1B;AACH;;AAGD,cAAM1N,MAAM,GAAG,CAAf,CANuE,CAMpD;AACnB;;AACA,cAAG,KAAKilF,SAAL,KAAmB,KAAKxuE,MAAL,CAAYlV,IAAlC,EAAwC;AAEnC,iBAAKyR,KAAL,CAAWolE,QAAX,CACD,WAAA9rE,qBAAA,CAAsB;AACdoB,mBAAK,EAAE,KAAKkR,WAAL,CAAiBlR,KADV;AAEdzB,kBAAI,EAAE,UAAAlG,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB+J,EAFZ;AAGdwI,oBAAM,EAAC,KAAKw2E,SAHE;AAIdjlF,oBAAM,EAANA;AAJc,aAAtB,CADC;AAQD,iBAAKmkF,SAAL,GAAiB,CAACkC,iBAAlB;AACA,iBAAK5lC,KAAL,CAAWqB,aAAX;AACH;AAMJ;;;iCAEQlnD,K,EAAOoK,I,EAAM;AAClB,iBAAOA,IAAI,CAACiM,OAAL,CAAa1C,EAApB;AACH;;;4BAjXqB;AAClB,iBAAO,KAAKs2E,KAAL,CAAW/iD,KAAX,KAAqB,KAAKn0B,UAAL,CAAgB4qE,WAA5C;AACH;;;4BAEkB;AACf,cAAM+N,CAAC,GAAG,KAAK34E,UAAf;AACA,cAAMm0B,KAAK,GAAGllC,IAAI,CAACC,IAAL,CAAUypF,CAAC,CAAClC,YAAF,GAAiBkC,CAAC,CAACjC,SAA7B,CAAd;AACA,cAAMljE,KAAK,GAAGvkB,IAAI,CAACC,IAAL,CAAUypF,CAAC,CAAC/N,WAAF,GAAgB,CAA1B,CAAd;AACA,cAAMgO,aAAa,GAAG3pF,IAAI,CAACmD,GAAL,CAClB,CADkB,EAElBnD,IAAI,CAACq+B,GAAL,CAAS9Z,KAAK,GAAG,CAAR,GAAY,CAACA,KAAK,GAAG,CAAT,KAAemlE,CAAC,CAACjC,SAAF,GAAc,CAA7B,CAAZ,GAA+C,CAAxD,EAA2DviD,KAAK,GAAG,CAAnE,CAFkB,CAAtB;AAIA,cAAI+iD,KAAK,GAAG,EAAZ;;AACA,eAAK,IAAI/qF,CAAC,GAAGysF,aAAb,EAA4BzsF,CAAC,IAAI8C,IAAI,CAACq+B,GAAL,CAASsrD,aAAa,GAAG,CAAzB,EAA4BzkD,KAA5B,CAAjC,EAAqEhoC,CAAC,EAAtE,EAA0E;AACtE+qF,iBAAK,CAAC1gF,IAAN,CAAWrK,CAAX;AACH;;AACD,cAAI,CAAC+qF,KAAK,CAACrmF,MAAX,EAAmB;AACfqmF,iBAAK,CAAC1gF,IAAN,CAAW,CAAX;AACH;;AACD,cAAMqiF,KAAK,GAAG,SAARA,KAAQ,GAAM;AAChB,gBAAI1kD,KAAK,IAAI,CAAT,IAAcwkD,CAAC,CAAC/N,WAAF,IAAiBz2C,KAAnC,EAA0C;AACtC,qBAAO,KAAP;AACH;;AACD,mBAAO,IAAP;AACH,WALD;;AAMA,cAAM2kD,KAAK,GAAG,SAARA,KAAQ,GAAM;AAChB,gBAAI3kD,KAAK,IAAI,CAAT,IAAcwkD,CAAC,CAAC/N,WAAF,GAAgB,CAAlC,EAAqC;AACjC,qBAAO,KAAP;AACH;;AACD,mBAAO,IAAP;AACH,WALD;;AAMA,cAAM/7E,KAAK,GAAG8pF,CAAC,CAAC/N,WAAF,GAAgB,CAA9B;AACA,cAAM5uD,GAAG,GAAG,EAAE28D,CAAC,CAAC/N,WAAF,IAAiBz2C,KAAnB,CAAZ;AACA,iBAAO;AACHA,iBAAK,EAALA,KADG;AAEH+iD,iBAAK,EAALA,KAFG;AAGH5pD,eAAG,EAAEwrD,KAAK,EAHP;AAIH1mF,eAAG,EAAEymF,KAAK,EAJP;AAKHhqF,iBAAK,EAALA,KALG;AAMHmtB,eAAG,EAAHA;AANG,WAAP;AAQH;;;;MAtEyC,OAAA5wB,a;;AAN9C;;;uBAMa0pF,wB,EAAwB,8B,EAAA,uC,EAAA,+B,EAAA,kC,EAAA,wC,EAAA,+B,EAAA,0C;AAAA,K;;;YAAxBA,wB;AAAwB,2C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA,wE;AAAA,e;AAAA,a;AAAA,q2B;AAAA;AAAA;ACrCrC;AAEE;AAIE;AAqCA;AAIF;AACF;AACA;AACA;AACE;AAAI;AAAA,mBAAS,IAAAgC,QAAA,EAAT;AAAmB,WAAnB;AAAqB;AAAwC;AACjE;AACA;AACA;AAGA;AACA;AAGA;AAAI;AAAA,mBAAS,IAAAE,QAAA,EAAT;AAAmB,WAAnB;AAAqB;AAAyC;AACpE;AACA;;;;;;AAzDS;AAAA,oDAA2C,UAA3C,EAA2C,GAA3C;AA8CmB;AAAA;AACA;AAAA;AAC+C;AAAA;AAG/C;AAAA;AACW;AAAA;;;;;;;;;;2BDrB1BlC,wB,EAAwB;cANpC,OAAAriC,SAMoC;eAN1B;AACPlnD,kBAAQ,EAAE,sBADH;AAEPmnD,qBAAW,EAAE,mCAFN;AAGPC,mBAAS,EAAE,CAAC,mCAAD,CAHJ;AAIP4B,yBAAe,EAAE,OAAAC,uBAAA,CAAwBC;AAJlC,S;AAM0B,Q;;;;;;;;;;;;;;;;;;gBAChC,OAAAxmD;;;gBACA,OAAAA;;;gBACA,OAAAA;;;gBACA,OAAAA;;;gBACA,OAAAA;;;;;;;;;;;;;;;;;;;;;;;;AE1CL;AAAA;AAAA;;AACA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBY;AACI;AAA2C;AAAA;AAAA;AAAA;AAAA;AACvC;AACJ;AACJ;;;;;;AAcmD;;;;;;AAEnC;AACI;;AACJ;AACA;AAAG;AAAI;;;;;AAFH;AAAA;;;;;;AAIiC;;;;;;AAR7C;AACI;AACA;AAMA;AAEA;AAEJ;;;;;AAXiB;AAAA;AACA;AAAA;AAMA;AAAA;AAEb;AAAA;;;;;;AAUY;AACI;AACJ;;;;;AADI;AAAA;;;;;;AANhB;AAAM;AAAgB;AACtB;AACI;AACI;AAAsB;AAAI;AAC1B;AACI;AAGJ;AACJ;AACJ;;;;;AALiB;AAAA;;;;;;AAzBzB;AAKI;AAaA;AAcJ;;;;;AA9BI;AAGG;AAAA;;;;;;AA6BP;AAAyB;AAAgB;;;;;AAAhB;AAAA;;;;;;AArC7B;AACI;AAAG;AAAwB;AAE3B;AAkCA;AACA;AAAG;AAAgB;AACnB;AAAG;AAAqB;AACxB;AAAG;AAAuC;AAC9C;;;;;AAxCO;AAAA;AAKC;AAAA;AA+BD;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;;;;;;;;AAEP;AACI;AAGI;AAAA;AAAA;AAAA;AAAA,WAAiC,iBAAjC,EAAiC;AAAA;AAAA;AAAA;AAAA,SAAjC;AAGH;AACL;;;;AANQ;AAAA;;;;QAYPmkF,2B;;;;;AAoBT,2CACoCltE,IADpC,EAEYwvB,SAFZ,EAEgE;AAAA;;AAAA;;;;AAE5D;AAHgC,iBAAAxvB,IAAA,GAAAA,IAAA;AACxB,iBAAAwvB,SAAA,GAAAA,SAAA;AAhBL,iBAAAqkD,QAAA,GAAW,KAAX;AACC,iBAAA/J,eAAA,GAAkB,KAAlB;AAkBJ,iBAAK/Y,UAAL,GAAkB,OAAAp8D,wBAAA,CAAyB,SAAKqL,IAAL,CAAU5B,OAAV,CAAkB/J,WAA3C,EAAwD,IAAxD,CAAlB;AACA,iBAAKi0E,UAAL,GAAkB,OAAA/zE,gCAAA,CAAiC,SAAKyL,IAAL,CAAU5B,OAAV,CAAkB/J,WAAnD,EAAgE,SAAK2L,IAAL,CAAU5B,OAAV,CAAkBukB,gBAAlF,CAAlB;AACA,iBAAKpM,KAAL,GAAa,SAAKvW,IAAL,CAAU5B,OAAV,CAAkBmY,KAA/B;AACA,iBAAKu9D,eAAL,GAAuB,SAAK9zE,IAAL,CAAU5B,OAAV,CAAkBqe,IAAlB,CAAuButD,eAA9C;;AAGJ,YAAG,gBAAKhqE,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAE+rC,cAAX,MAA8B,IAAjC,EAAuC;AAEtC,mBAAK37B,iBAAL,GAAyB,CAAH,WAAG,SAAKpQ,IAAR,MAAY,IAAZ,IAAY,aAAZ,GAAY,MAAZ,GAAY,GAAE+rC,cAAX,MAAyB,IAAzB,IAAyB,aAAzB,GAAyB,MAAzB,GAAyB,GAAE37B,iBAApD;AACA,mBAAKC,mBAAL,GAA2B,CAAH,WAAG,SAAKrQ,IAAR,MAAY,IAAZ,IAAY,aAAZ,GAAY,MAAZ,GAAY,GAAE+rC,cAAX,MAAyB,IAAzB,IAAyB,aAAzB,GAAyB,MAAzB,GAAyB,GAAE17B,mBAAtD;AAEA,mBAAKwQ,kBAAL,GAA0B,sBAAK7gB,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAE+rC,cAAX,MAAyB,IAAzB,IAAyB,aAAzB,GAAyB,MAAzB,GAAyB,GAAElrB,kBAA3B,MAA6C,YACtE,SAAK7gB,IADiE,MAC7D,IAD6D,IAC7D,aAD6D,GAC7D,MAD6D,GAC7D,GAAE+rC,cAD2D,MAC7C,IAD6C,IAC7C,aAD6C,GAC7C,MAD6C,GAC7C,GAAElrB,kBAAF,CACvBxwB,MADuB,CAChB,UAACk6E,SAAD,EAAe;AAAD;;AAAC,mBAAAA,SAAS,CAAC7uE,EAAV,MAAY,YAAK,SAAKsE,IAAV,MAAc,IAAd,IAAc,aAAd,GAAc,MAAd,GAAc,GAAE+rC,cAAhB,MAA8B,IAA9B,IAA8B,aAA9B,GAA8B,MAA9B,GAA8B,GAAErwC,EAA5C;AAA8C,WAD7C,EAEvBpM,GAFuB,CAEnB,UAACi7E,SAAD;AAAA,mBAAgB,MAAD,OAAC,CAAD,kBAChBA,SADgB,CAAC,EACR;AACZhvE,yBAAW,EAAEgvE,SAAS,CAAChvE,WAAV,GAAwB,IADzB;AAEZnR,oBAAM,EAAE,IAAI,UAAAuQ,MAAJ,CAAW;AAClBlR,oBAAI,EAAE8gF,SAAS,CAAChvE,WAAV,GAAwB,IADZ;AAElB0V,2BAAW,EAAE,KAFK;AAGlBC,2BAAW,EAAE,SAAKlR,IAAL,CAAU+rC,cAAV,CAAyB19C;AAHpB,eAAX;AAFI,aADQ,CAAhB;AAAA,WAFmB,CADA,CAA1B;AAYA;;AA1B+D;AA4B/D;;;;qCAEmB;AAChB,eAAKmhC,SAAL,CAAeC,KAAf;AACH;;;wCAEsB;AAAA;;AACnB,eAAKokD,QAAL,GAAgB,IAAhB;AACA,eAAK7zE,IAAL,CAAUwsD,QAAV;AACA,eAAKpkE,OAAL,CAAa,YAAb,EAA2B;AAAA,mBAAM,QAAI,CAACmmF,UAAL,EAAN;AAAA,WAA3B,EAAoD,IAApD;AACH;;;8CAU4B;AACzB,eAAKH,cAAL,GAAsB,CAAC,KAAKA,cAA5B;AACH;;;4BA5DqB;;;AAClB,iBAAO,KAAKyF,QAAL,aACE,KAAKt9D,KADP,0BAED,YAAKvW,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAEgrB,MAAX,IACA,wDADA,GAEA,+CAJN;AAKH;;;0BA4CyB8vC,G,EAAc;AACpC,eAAKgP,eAAL,GAAuBhP,GAAvB;AACH,S;4BAEwB;AACrB,iBAAO,KAAKgP,eAAZ;AACH;;;;MApE4C,OAAAjlF,S;;AArEjD;;;uBAqEaqoF,2B,EAA2B,qBAqBxB,SAAA5/B,eArBwB,C,EAqBT,qC;AAAA,K;;;YArBlB4/B,2B;AAA2B,+C;AAAA,+C;AAAA,c;AAAA,a;AAAA,o1B;AAAA;AAAA;AAlEhC;AACI;AAKA;AACI;AACA;AAAkB;AAAc;AACpC;AACA;AA0CA;AASJ;;;;AA5D4B;AAAA;AAKc;AAAA;AAEhB;AAAA;AAEa;AAAA;AA0CO;AAAA;;;;;;;;;;;2BAczCA,2B,EAA2B;cArEvC,OAAA3/B,SAqEuC;eArE7B;AACPlnD,kBAAQ,EAAE,0BADH;AAEPw0D,kBAAQ,6qGAFD;AAkEPpN,mBAAS,EAAE,CAAC,uCAAD,CAlEJ;AAmEPga,uBAAa,EAAE,OAAAC,iBAAA,CAAkB34C;AAnE1B,S;AAqE6B,Q;;;;kBAqB/B,OAAAqrB,M;mBAAO,SAAAkT,e;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9GhB;AAAA;AAAA;;AAOA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAYA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAOA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;AC1BgB;AACI;AAMI;AAAA;AAAA;AAAA;AAAA,WAAuD,OAAvD,EAAuD;AAAA;AAAA;AAAA;AAAA,SAAvD;AAEH;AACL;;;;;AARQ;AAAA,uDAAyB,UAAzB,EAAyB,qBAAzB,EAAyB,MAAzB,EAAyB,WAAzB,EAAyB,SAAzB,EAAyB,cAAzB,EAAyB,eAAzB,EAAyB,oBAAzB;;;;;;;;AAWR;AAMI;AAAA;AAAA;AAAA;AAAA;AACH;;;;;AANG,uDAAyB,OAAzB,EAAyB,mBAAzB,EAAyB,QAAzB,EAAyB,aAAzB,EAAyB,UAAzB,EAAyB,eAAzB,EAAyB,SAAzB,EAAyB,cAAzB;;;;;;AAhBZ;AACI;AACI;AAWJ;AACA;AAUJ;;;;;;;AAtBsB;AAAA,oDAAyC,UAAzC,EAAyC,GAAzC;;;;;;;;AAuBtB;AACI;AAKI;AAAA;AAAA;AAAA;AAAA;AACH;AACL;;;;;AANQ;AAAA,qDAAuB,SAAvB,EAAuB,cAAvB,EAAuB,OAAvB,EAAuB,IAAvB,EAAuB,qBAAvB,EAAuB,0BAAvB;;;;QDiBHuiC,wB;;;;;AAYT,wCACYnlC,OADZ,EAEW/kC,QAFX,EAGWuT,SAHX,EAGqC;AAAA;;AAAA;;AAEjC;AAJQ,iBAAAwxB,OAAA,GAAAA,OAAA;AACD,iBAAA/kC,QAAA,GAAAA,QAAA;AACA,iBAAAuT,SAAA,GAAAA,SAAA;AAZX;;AACiB,iBAAA/hB,KAAA,GAAQ,IAAI,OAAA0zC,YAAJ,EAAR;AAGjB;;AACiB,iBAAA4+B,YAAA,GAAe,IAAI,OAAA5+B,YAAJ,EAAf;AAEjB,iBAAA67B,YAAA,GAAwB,KAAxB;AAgBO,iBAAA/I,gBAAA,GAAmB,0BAAAA,gBAAnB;AACA,iBAAAuH,SAAA,GAAqB,KAArB;AACA,iBAAA6O,aAAA,GAAyB,IAAzB;AAEA,iBAAArxE,OAAA,GAAmB,KAAnB,CAf8B,CA8ErC;;AACO,iBAAAsxE,YAAA,GAAe,UAACC,QAAD,EAA+BC,QAA/B,EAAgE;AAClF;AACA,cAAMC,QAAQ,GAAG,EAAjB;AACAD,kBAAQ,CAACrsF,OAAT,CAAiB,UAACC,CAAD,EAAO;AACpB,gBAAIqsF,QAAQ,CAACrsF,CAAC,CAAC4T,EAAH,CAAZ,EAAoB;AAChBy4E,sBAAQ,CAACrsF,CAAC,CAAC4T,EAAH,CAAR,CAAe44C,SAAf,CAAyB6/B,QAAQ,CAACrsF,CAAC,CAAC4T,EAAH,CAAR,CAAeoyB,MAAf,GAAwBhmC,CAAC,CAACgmC,MAAnD;AACH,aAFD,MAEO;AACHqmD,sBAAQ,CAACrsF,CAAC,CAAC4T,EAAH,CAAR,GAAiB5T,CAAjB;AACH;AACJ,WAND;AAOAmsF,kBAAQ,CAACpsF,OAAT,CAAiB,UAACC,CAAD,EAAO;AACpB,gBAAIqsF,QAAQ,CAACrsF,CAAC,CAAC4T,EAAH,CAAZ,EAAoB;AAChBy4E,sBAAQ,CAACrsF,CAAC,CAAC4T,EAAH,CAAR,CAAe44C,SAAf,CAAyB6/B,QAAQ,CAACrsF,CAAC,CAAC4T,EAAH,CAAR,CAAeoyB,MAAf,GAAwBhmC,CAAC,CAACgmC,MAAnD;AACH,aAFD,MAEO;AACHqmD,sBAAQ,CAACrsF,CAAC,CAAC4T,EAAH,CAAR,GAAiB5T,CAAjB;AACH;AACJ,WAND,EAVkF,CAiBlF;;AACA,cAAML,KAAK,GAAG,EAAd;;AACA,eAAK,IAAM0K,IAAX,IAAmBgiF,QAAnB,EAA6B;AACzB1sF,iBAAK,CAAC6J,IAAN,CAAW6iF,QAAQ,CAAChiF,IAAD,CAAnB;AACH,WArBiF,CAsBlF;;;AACA,iBAAO1K,KAAP;AACH,SAxBM;;AA/E8B;AAGpC;;;;mCAEc;AACd,eAAKq+E,qBAAL;AACA;;;;AAiED;mCACe;;;AACX,cAAM1iD,KAAK,GAAG,IAAI,cAAA9C,aAAJ,CAAkB;AAAEgD,4BAAgB,EAAE,CAAF,KAAE,KAAKllB,OAAL,MAAY,IAAZ,IAAY,aAAZ,GAAY,MAAZ,GAAY,GAAE/P;AAAlC,WAAlB,CAAd;AACA,eAAK+lF,YAAL,GAAoBhxD,KAApB;AACH;AA6BD;;;;yCACwBA,K,EAAsB;AAAA;;AAC1C;AACA,cAAIA,KAAJ,EAAW;AACP,iBAAK2wD,aAAL,GAAqB,KAArB;AACA,gBAAM5wD,MAAM,GAAG,KAAKvd,IAAL,CAAUkxB,QAAV,CAAmBzW,QAAnB,CAA4B1zB,KAA3C,CAFO,CAGP;;AACA,gBAAM5E,KAAK,GAAGo7B,MAAM,CAACkW,SAAP,CAAiB,UAACg7C,QAAD,EAAc;AACzC,qBAAOjxD,KAAK,CAAC1nB,EAAN,KAAa24E,QAAQ,CAAC34E,EAA7B;AACH,aAFa,CAAd,CAJO,CAQP;;AACA,gBAAI3T,KAAK,GAAG,CAAZ,EAAe;AACX;AACAo7B,oBAAM,CAAC7xB,IAAP,CAAY8xB,KAAZ;AACH,aAHD,MAGO;AACH;AACAD,oBAAM,CAACjtB,MAAP,CAAcnO,KAAd,EAAqB,CAArB,EAAwBq7B,KAAxB;AACH,aAfM,CAiBP;;;AACA,gBAAMkxD,WAAW,GAAG,EAApB;AACA,gBAAMC,YAAY,GAAG,EAArB;AACApxD,kBAAM,CAACt7B,OAAP,CAAe,UAAC2sB,CAAD,EAAO;AAClB,kBAAI8/D,WAAW,CAAC9/D,CAAC,CAAC+N,aAAH,CAAf,EAAkC;AAC9B;AACA+xD,2BAAW,CAAC9/D,CAAC,CAAC+N,aAAH,CAAX,GAA+B,QAAI,CAACyxD,YAAL,CAAkBx/D,CAAC,CAAC/sB,KAApB,EAA2B6sF,WAAW,CAAC9/D,CAAC,CAAC+N,aAAH,CAAtC,CAA/B;AACH,eAHD,MAGO;AACH;AACA+xD,2BAAW,CAAC9/D,CAAC,CAAC+N,aAAH,CAAX,GAA+B/N,CAAC,CAAC/sB,KAAjC,CAFG,CAGH;;AACA8sF,4BAAY,CAAC//D,CAAC,CAAC+N,aAAH,CAAZ,GAAgC/N,CAAhC;AACA+/D,4BAAY,CAAC//D,CAAC,CAAC+N,aAAH,CAAZ,CAA8B96B,KAA9B,GAAsC,EAAtC;AACH;AACJ,aAXD,EApBO,CAiCP;;AACA,gBAAI+sF,kBAAkB,GAAG,EAAzB;;AACA,iBAAK,IAAMC,YAAX,IAA2BF,YAA3B,EAAyC;AACrC,kBAAMnxD,MAAK,GAAGmxD,YAAY,CAACE,YAAD,CAA1B;AACArxD,oBAAK,CAAC37B,KAAN,GAAc6sF,WAAW,CAACG,YAAD,CAAzB;AACAD,gCAAkB,CAACljF,IAAnB,CAAwB8xB,MAAxB;AACH;;AAED,iBAAKxd,IAAL,CAAUkxB,QAAV,CAAmBzW,QAAnB,CAA4Bh2B,QAA5B,CAAqCmqF,kBAArC;AACH;;AACD,eAAKJ,YAAL,GAAoB,IAApB;AACH;;;wCAEsB;AACnB;AACA,eAAKL,aAAL,GAAqB,IAArB;AACA,eAAKK,YAAL,GAAoB,IAApB,CAHmB,CAKnB;;AACA,eAAKxuE,IAAL,CAAUkxB,QAAV,CAAmBzW,QAAnB,CAA4Bh2B,QAA5B,CAAqC,KAAK+T,OAAL,CAAaiiB,QAAb,CAAsB/wB,GAAtB,CAA0B,UAAA8zB,KAAK;AAAA,mBAAIA,KAAK,CAACyD,KAAN,EAAJ;AAAA,WAA/B,CAArC;AACA,eAAK1vB,KAAL,CAAWg1C,IAAX;AACH;;;4CAE0B;AACvB,eAAKh1C,KAAL,CAAWg1C,IAAX;AACH;AAED;;;;mDACmC;AAAA;;AAC/B,cAAMG,GAAG,GAAG,KAAK5B,OAAL,CAAajpC,IAAb,CACR,kBAAAguC,6BADQ,EAER;AACIjD,oBAAQ,EAAE,MADd;AAEIC,iBAAK,EAAE,MAFX;AAGIzsC,gBAAI,EAAE;AACF8L,oBAAM,EAAE,KAAKlG,IAAL,CAAUkxB,QAAV,CAAmB/b,UAAnB,CAA8BpuB,KADpC;AAEFojD,yBAAW,EAAE,KAAKnqC,IAAL,CAAUkxB,QAAV,CAAmBpY,KAF9B;AAGF2B,sBAAQ,EAAE,KAAKza,IAAL,CAAUkxB,QAAV,CAAmBzW,QAH3B;AAIFjiB,qBAAO,EAAE,KAAKA;AAJZ;AAHV,WAFQ,CAAZ;;AAaA,eAAK5W,YAAL,CACI,cADJ,EAEI8kD,GAAG,CAACO,iBAAJ,CAAsB11C,KAAtB,CAA4BzP,SAA5B,CAAsC,UAACyP,KAAD,EAAwB;AAC1D;;AACA;AACA,gBAAIA,KAAK,CAACiW,MAAN,KAAiB,MAArB,EAA6B;AACzB;AACAk/B,iBAAG,CAAC7c,KAAJ,GAFyB,CAIzB;;AACA,sBAAI,CAAC/sB,OAAL,GAAe,IAAf;AACA,sBAAI,CAACwiE,SAAL,GAAiB,IAAjB;;AAEA,sBAAI,CAACwP,WAAL;AACH;AACJ,WAbD,CAFJ;AAiBApoC,aAAG,CAACW,WAAJ,GAAkBvlD,SAAlB,CAA4B;AAAA,mBAAM,QAAI,CAACnC,KAAL,CAAW,cAAX,CAAN;AAAA,WAA5B;AACH;;;sCAEoB;AAAA;;AACjB;AACA,cAAI6Y,OAAO,GAAG,KAAKA,OAAL,CAAayoB,KAAb,EAAd;AACAzoB,iBAAO,CAACiiB,QAAR,GAAmB,KAAKza,IAAL,CAAUkxB,QAAV,CAAmBzW,QAAnB,CAA4B1zB,KAA/C;AACAyR,iBAAO,CAACsgB,KAAR,GAAgB,KAAK9Y,IAAL,CAAUkxB,QAAV,CAAmBpY,KAAnB,CAAyB/xB,KAAzC;;AACA,cAAGyR,OAAO,CAACsgB,KAAR,CAAc/yB,MAAd,IAAwByS,OAAO,CAACiiB,QAAR,CAAiB10B,MAA5C,EAAoD;AAEhD,gBAAMwY,KAAK,GAAG,MAAH,OAAG,CAAH,EAAG,EAAK/F,OAAO,CAAC+F,KAAb,CAAd;AACAA,iBAAK,CAAC/F,OAAO,CAACwO,KAAR,CAAc/R,KAAf,CAAL,GAA8BuD,OAAO,CAAC+F,KAAR,CAAc/F,OAAO,CAACwO,KAAR,CAAc/R,KAA5B,KAAsC,GAApE;AACAuD,mBAAO,CAAC+F,KAAR,GAAgBA,KAAhB;AAEA,gBAAMqT,SAAS,GAAG,MAAH,OAAG,CAAH,EAAG,EAAKpZ,OAAO,CAACoZ,SAAb,CAAlB;AACAA,qBAAS,CAACpZ,OAAO,CAACwO,KAAR,CAAc/R,KAAf,CAAT,GAAiCuD,OAAO,CAACoZ,SAAR,CAAkBpZ,OAAO,CAACwO,KAAR,CAAc/R,KAAhC,KAA0C,GAA3E;AACAuD,mBAAO,CAACoZ,SAAR,GAAoBA,SAApB;AACH,WAdgB,CAiBjB;;;AACA,eAAK0B,SAAL,CAAesnB,IAAf,CAAoBpiC,OAApB,EAA6BA,OAAO,CAACmQ,YAArC,EAAoDpI,IAApD,CACI,UAAC6R,GAAD,EAAS;AACL,oBAAI,CAAC5Z,OAAL,GAAe,IAAI,cAAAgQ,OAAJ,CAAY,MAAD,OAAC,CAAD,kBAAM,QAAI,CAAChQ,OAAX,CAAC,EAAsB4Z,GAAG,CAACiT,SAAJ,EAAtB,CAAZ,CAAf,CADK,CAEL;;AACA,oBAAI,CAAC66C,qBAAL;;AAEA,oBAAI,CAACpjE,OAAL,GAAe,KAAf;AACA,oBAAI,CAACwiE,SAAL,GAAiB,IAAjB;;AACA,oBAAI,CAAC/tE,KAAL,CAAWg1C,IAAX,CAAgB,QAAI,CAACvmC,IAArB;AACH,WATL,EAUI,UAAC2B,GAAD,EAAS;AACL;AACA,oBAAI,CAAC7E,OAAL,GAAe,KAAf;AACA,oBAAI,CAACwiE,SAAL,GAAiB,KAAjB;;AACA,oBAAI,CAACv/D,QAAL,CAAcy5B,WAAd;AAGH,WAjBL;AAmBH;;;6CAE2BmZ,M,EAAa;AACrC,cAAMp1B,MAAM,GAAG,KAAKvd,IAAL,CAAUkxB,QAAV,CAAmBzW,QAAnB,CAA4B1zB,KAA3C,CADqC,CAErC;;AACA,cAAI4rD,MAAM,CAAC7pD,IAAP,KAAgB,UAApB,EAAgC;AAC5B;AACA,iBAAKqlF,aAAL,GAAqB,IAArB;AACA,iBAAKK,YAAL,GAAoB,IAApB,CAH4B,CAI5B;;AACA,iBAAKxuE,IAAL,CAAUkxB,QAAV,CAAmBzW,QAAnB,CAA4Bh2B,QAA5B,CAAqC,KAAK+T,OAAL,CAAaiiB,QAAb,CAAsB/wB,GAAtB,CAA0B,UAAA8zB,KAAK;AAAA,qBAAIA,KAAK,CAACyD,KAAN,EAAJ;AAAA,aAA/B,CAArC;AACA,iBAAK1vB,KAAL,CAAWg1C,IAAX;AACH;;AACD,cAAIoM,MAAM,CAAC7pD,IAAP,KAAgB,MAApB,EAA4B;AACxB;AACA,iBAAKqlF,aAAL,GAAqB,KAArB;;AACA,gBAAI5wD,MAAM,CAACx3B,MAAX,EAAmB;AACf,mBAAKgpF,wBAAL;AACH,aAFD,MAEO;AACH;AACA,mBAAKjyE,OAAL,GAAe,IAAf;AACA,mBAAKwiE,SAAL,GAAiB,IAAjB;AACA,mBAAKwP,WAAL;AACH;AACJ;AACJ;;;uCAEqB;AAClB;AACA,eAAKxP,SAAL,GAAiB,KAAjB;AACA,eAAK6O,aAAL,GAAqB,IAArB;AACA,eAAKtK,YAAL,CAAkBt9B,IAAlB;AACH;AAED;;;;;;;;gDAK+B;AAE3B;AACA,eAAKi8B,mBAAL,GAA2B;AAC3BhqE,mBAAO,EAAE,KAAKA,OADa;AAE3B8P,kBAAM,EAAE,KAAKA,MAFc;AAG3B6iD,sBAAU,EAAE,KAAKA,UAHU;AAI3BsX,yBAAa,EAAE,KAAKA,aAJO;AAK3BC,sBAAU,EAAE,KAAKA,UALU;AAM3BC,0BAAc,EAAE,KAAKA,cANM;AAO3B75E,gBAAI,EAAE,KAAKA,IAPgB;AAQ3Bg4E,wBAAY,EAAE,KAAKA,YARQ;AAS3B;AACA8B,oCAAwB,EAAE,KAAKA,wBAAL,CAA8BnR,IAA9B,CAAmC,IAAnC;AAVC,WAA3B;AAcH;AAEA;;;;;;;;;AASD;AACA;AACA;AACA;;;;mDAEkC;AAC9B,cAAIqR,cAAc,GAAG,CAArB;AAEA,eAAKtqE,OAAL,CAAaoe,WAAb,CAAyB30B,OAAzB,CAAiC,UAAA40B,IAAI,EAAI;AACrCisD,0BAAc,IAAI3+E,IAAI,CAACmD,GAAL,CAASuvB,IAAI,CAAChO,gBAAL,GAAwBgO,IAAI,CAACjO,oBAAtC,EAA4D,CAA5D,CAAlB;AACH,WAFD;AAKA,cAAM3G,MAAM,GAAG;AACX8gE,uBAAW,EAAED,cAAc,GAAG,CADnB;AAEXE,2BAAe,EAAEF;AAFN,WAAf;AAIA,iBAAO7gE,MAAP;AACH;AAED;;;;;;;;;;4BArTmB;AACf,iBAAO,KAAKzJ,OAAL,CAAaqe,IAAb,CAAkB1P,QAAzB;AACH;;;;AAED;4BAC4B;AACxB,iBAAO,KAAKnH,IAAL,IAAa,KAAKA,IAAL,CAAUkxB,QAAV,CAAmBzW,QAAhC,GAA2C,KAAKza,IAAL,CAAUkxB,QAAV,CAAmBzW,QAA9D,GAAyE,IAAhF;AACH;AAED;;;;4BACqB;;;AACjB,iBAAO,KAAKza,IAAL,KAAS,kBAAI,KAAKA,IAAT,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAEkxB,QAAf,MAAuB,IAAvB,IAAuB,aAAvB,GAAuB,MAAvB,GAAuB,GAAE/b,UAAzB,MAAmC,IAAnC,IAAmC,aAAnC,GAAmC,MAAnC,GAAmC,GAAEpuB,KAAF,CAAQhB,MAApD,IACD,KAAKia,IAAL,CAAUkxB,QAAV,CAAmB/b,UAAnB,CAA8BpuB,KAD7B,GAED,EAFN;AAGH;AAED;;;;4BACiB;AACb,iBAAO,KAAKiZ,IAAL,IAAa,KAAKA,IAAL,CAAUkxB,QAAV,CAAmB1sC,MAAhC,GACD,KAAKwb,IAAL,CAAUkxB,QAAV,CAAmB1sC,MAAnB,CAA0BuC,KADzB,GAED,UAAAuG,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB8J,YAApB,CAAiC,QAAjC,CAFN;AAGH;AAED;;;;4BACmB;AACf,iBAAO,KAAKyS,IAAL,IAAa,KAAKA,IAAL,CAAUkxB,QAAV,CAAmBtsC,QAAhC,GAA2C,KAAKob,IAAL,CAAUkxB,QAAV,CAAmBtsC,QAAnB,CAA4BmC,KAAvE,GAA+E,EAAtF;AACH;AAED;;;;4BACkB;AACd,iBAAO,KAAKiZ,IAAL,IAAa,KAAKA,IAAL,CAAUkxB,QAAV,CAAmB7W,OAAhC,IAA2C,KAAKra,IAAL,CAAUkxB,QAAV,CAAmB7W,OAAnB,CAA2BtzB,KAA7E;AACH;;;4BAGiB;;;AACd,iBAAO,OAAAiM,WAAA,CAAY,CAAD,KAAC,KAAKwF,OAAL,MAAY,IAAZ,IAAY,aAAZ,GAAY,MAAZ,GAAY,WAAxB,CAAP;AACH;;;4BAEuB;AACpB,iBAAO,OAAAzJ,wBAAA,CAAyB,KAAKyJ,OAAL,CAAa/J,WAAtC,CAAP;AACH;;;4BAEuB;;;AACpB,iBAAO,OAAAE,gCAAA,CAAiC,KAAK6J,OAAL,CAAa/J,WAA9C,EAA2D,CAAF,KAAE,KAAK+J,OAAL,MAAY,IAAZ,IAAY,aAAZ,GAAY,MAAZ,GAAY,GAAEukB,gBAAzE,CAAP;AACH;;;4BAE2B;;;AACxB,iBAAO,OAAAlyB,gBAAA,CAAiB,CAAD,KAAC,KAAK2N,OAAL,MAAY,IAAZ,IAAY,aAAZ,GAAY,MAAZ,GAAY,GAAE5T,QAA/B,CAAP;AACH;;;4BAEmB;AAChB,iBAAO,cAAA4rB,oBAAA,CAAqB,KAAKhY,OAA1B,CAAP;AACH;;;4BAwQqB;AACtB;AACA,cAAI2qE,eAAe,GAAiB,EAApC;AAFsB,+BAGmD,KAAK3qE,OAHxD;AAAA,cAGdmQ,YAHc,kBAGdA,YAHc;AAAA,cAGAiC,iBAHA,kBAGAA,iBAHA;AAAA,cAGmBqQ,kBAHnB,kBAGmBA,kBAHnB;AAAA,cAGuCxyB,QAHvC,kBAGuCA,QAHvC;;AAItB,cAAGkgB,YAAY,IAAIiC,iBAAiB,CAAC7kB,MAArC,EAA6C;AAC3Co9E,2BAAe,GAAG,KAAK3qE,OAAL,CAAaoS,iBAA/B;AACD,WAFD,MAGK,IAAGjC,YAAY,IAAI,CAACiC,iBAAiB,CAAC7kB,MAAnC,IAA6Ck1B,kBAAkB,CAACl1B,MAAnE,EAA2E;AAC9E,iBAAKyS,OAAL,CAAayiB,kBAAb,CAAgCh5B,OAAhC,CAAwC,UAAAR,OAAO,EAAI;AACjD0hF,6BAAe,CAACz3E,IAAhB,CAAqB,IAAI,UAAAqJ,MAAJ,CAAW;AAAElR,oBAAI,EAAEpC,OAAO,CAACkU,WAAR,GAAsB,IAA9B;AAAoC0V,2BAAW,EAAE,KAAjD;AAAwDC,2BAAW,EAAE7iB;AAArE,eAAX,CAArB;AACD,aAFD;AAGA06E,2BAAe,GAAGA,eAAe,CAACp3E,IAAhB,CAAqB,UAAC21B,EAAD,EAAaC,EAAb;AAAA,qBAA4BD,EAAE,CAACl0B,EAAH,GAAQm0B,EAAE,CAACn0B,EAAvC;AAAA,aAArB,CAAlB;AACD,WALI,MAMA;AACH21E,2BAAe,GAAG,CAAC,KAAK3qE,OAAL,CAAa/J,WAAd,CAAlB;AACD,WAfqB,CAkBtB;AACA;;;AACA,iBAAO,OAAAO,4BAAA,CAA6B,cAAA4hC,mBAAA,CAAoBuyC,eAApB,CAA7B,CAAP;AACD;;;;MAlX2C,OAAA7iF,a;;AAL9C;;;uBAKa2pF,wB,EAAwB,kC,EAAA,2C,EAAA,wC;AAAA,K;;;YAAxBA,wB;AAAwB,uC;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,c;AAAA,a;AAAA,inB;AAAA;AAAA;ACtDrC;AACI;AACI;AAII;AAAA,mBAAiB,IAAAzI,aAAA,EAAjB;AAAgC,WAAhC;AACJ;AACF;AACF;AACI;AAyBA;AASJ;AACJ;;;;AA1CY;AAAA,4DAA+B,OAA/B,EAA+B,IAA/B,EAA+B,UAA/B,EAA+B,IAA/B;AAO6C;AAAA;AAyBA;AAAA;;;;;;;;2BDmB5CyI,wB,EAAwB;cALpC,OAAAtiC,SAKoC;eAL1B;AACPlnD,kBAAQ,EAAE,kBADH;AAEPmnD,qBAAW,EAAE,2BAFN;AAGPC,mBAAS,EAAE,CAAC,2BAAD;AAHJ,S;AAK0B,Q;;;;;;;;;;gBAEhC,OAAA1kD;;;gBAEA,OAAA2kD;;;gBACA,OAAA3kD;;;gBACA,OAAAA;;;gBAEA,OAAA2kD;;;;;;;;;;;;;;;;;;;;;;;;AE9DL;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;ACMI;AACI;AAOJ;;;;;;AANQ;AAAA,iDAAmB,UAAnB,EAAmB,eAAnB,EAAmB,QAAnB,EAAmB,aAAnB,EAAmB,MAAnB,EAAmB,OAAnB,EAAmB,OAAnB,EAAmB,YAAnB;;;;;;AAHZ;AACI;AASJ;;;;;AATsB;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;AAWlB;AACI;AACI;AACJ;AACA;AAAA;AAEA;AACJ;;;;AALkB;AAAA;;;;;;;;;;;QDZTsiC,6B,GALb;AAAA;;AAgBI;AACiB,WAAAvgD,KAAA,GAAQ,IAAI,OAAAob,YAAJ,EAAR;AACpB,K;;AAlBD;;;uBAKamlC,6B;AAA6B,K;;;YAA7BA,6B;AAA6B,yC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA,O;AAAA,c;AAAA,a;AAAA,+T;AAAA;AAAA;ACV1C;AACI;AACI;AAAwB;AAAA,mBAAS,IAAAvgD,KAAA,OAAT;AAAqB,WAArB;AACpB;AACJ;AACA;AAAkB;AAAoB;AAC1C;AACJ;AACA;AAWA;;;;;;AAhBsB;AAAA;AAEI;AAAA;AAGZ;AAAA,mGAAmF,UAAnF,EAAmF,GAAnF;;;;;;;;;2BDEDugD,6B,EAA6B;cALzC,OAAAziC,SAKyC;eAL/B;AACPlnD,kBAAQ,EAAE,oBADH;AAEPmnD,qBAAW,EAAE,2BAFN;AAGPC,mBAAS,EAAE,CAAC,2BAAD;AAHJ,S;AAK+B,Q;;gBAErC,OAAA1kD;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAA2kD;;;;;;;;;;;;;;;;;;;;;;;;AEtBL;AAAA;AAAA;;AAUA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAaA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7BwB;AACI;AACJ;;;;;AAF6C;AACzC;AAAA;;;;;;AALhB;AACI;AAAA;AAA2E;AAC3E;AACI;AACI;AAGJ;AACJ;AACJ;;;;;AALwB;AAAA;;;;;;;;;;;;;;;;;;AAUZ;AACI;AACJ;;;;;AAFiD;AAC7C;AAAA;;;;;;AALhB;AACI;AAAA;AAAsF;AACtF;AACI;AACI;AAGJ;AACJ;AACJ;;;;;AALwB;AAAA;;;;;;;;;;;;;;;;;;;;;AAhBhC;AACI;AACI;AAUA;AAUA;AACI;AAGI;AAAA;AAAA;AAAA;AAAA,iCAGlB,qBAAa,EAAb,CAHkB,GAGC,EAHD;AAGG;AAAA,SAHH;AAMA;AAMJ;AACA;AACI;AACI;AACI;AAII;AAAA;AAAA;AAAA,iBAAiB,QAAAgM,OAAA,aAAjB;AAAqC,SAArC;;AAJJ;AAQJ;AACJ;AACJ;AACJ;AACJ;AACJ;;;;;AAtDU;AAAA;AACiB;AAAA;AAUA;AAAA;AAUC;AAAA;AAGZ;AAAA;AAQI;AAAA;AAMkB;AAAA;AAMV;AAAA,yEAA2B,gBAA3B,EAA2B,4BAA3B;;;;;;AAapB;AACI;AAOJ;;;;;;AANQ;AAAA,kDAAmB,UAAnB,EAAmB,6DAAnB,EAAmB,QAAnB,EAAmB,cAAnB,EAAmB,MAAnB,EAAmB,QAAnB,EAAmB,OAAnB,EAAmB,2BAAnB;;;;;;AAHZ;AACI;AASJ;;;;;AATsB;AAAA;;;;;;;;AAaV;AAMI;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;AACA;AAAkB;AAAe;AACrC;;;;;;AANI;AACA;AAIkB;AAAA;;;;;;AAV1B;AACI;AAWJ;;;;;AARQ;AAAA;;;;;;AALZ;AACI;AAaJ;;;;;;;;AAb0B;AAAA,iFAA2D,UAA3D,EAA2D,GAA3D;;;;;;AAD1B;;;;;;;;AAAc,wDAA+C,UAA/C,EAA+C,GAA/C;;;;;;AAbtB;;AACI;;AAWA;AAiBJ;;;;;;;AA7BkB;AACA;AAAA,oEAAkC,UAAlC,EAAkC,IAAlC;;;;;;;;;;;;;;;;;;;;;;;AAwDlB;AACI;AACI;AACJ;AACA;AAAA;AACgB;AAAyD;AAEzE;AAAA;AACJ;;;;;AADI;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;AAIJ;AACI;AACI;AACI;AACJ;AACA;AAAA;AAEA;AACJ;AACJ;;;;;AAFQ;AAAA;AAAA;;;;;;;;AAKR;AAMI;AAAA;AAAA;AAAA,2CAA2B,IAA3B;AAA+B,SAA/B;AACH;;;;;AANG,iDAAmB,UAAnB,EAAmB,sBAAnB,EAAmB,QAAnB,EAAmB,aAAnB,EAAmB,OAAnB,EAAmB,0BAAnB,EAAmB,UAAnB,EAAmB,6BAAnB;;;;QDzFKo2B,oC;;;;;AAyFT,oDACY8E,KADZ,EAEYh8D,IAFZ,EAGY8xB,OAHZ,EAG8B;AAAA;;AAAA;;AAE1B;AAJQ,iBAAAkqC,KAAA,GAAAA,KAAA;AACA,iBAAAh8D,IAAA,GAAAA,IAAA;AACA,iBAAA8xB,OAAA,GAAAA,OAAA;AA7EZ;;AACiB,iBAAAvzC,KAAA,GAAQ,IAAI,OAAA0zC,YAAJ,EAAR;AAGjB;;AACO,iBAAAgqC,aAAA,GAAoC,EAApC;AAGP;;AACO,iBAAAC,eAAA,GAA8B,EAA9B;AAKP;;AACgB,iBAAAp7B,OAAA,GAAU,IAAI,OAAAx0D,eAAJ,CAAoB,EAApB,CAAV;AAChB;;AACO,iBAAA6vF,aAAA,GAAgC,EAAhC;AA4DuB;AAG7B;AA3DD;;;;;mCA6De;AAAA;;AACX,eAAK77B,sBAAL;AACA,eAAK1xD,YAAL,CAAkB,QAAlB,EAA4B,KAAKkyD,OAAL,CAAan/C,IAAb,CAAkB,YAAAjL,GAAA,CAAI,UAACW,GAAD,EAAS;AACvD,gBAAMoqB,MAAM,GAAGpqB,GAAG,CAACkB,WAAJ,EAAf;AACA,gBAAM1J,KAAK,GAAG,EAAd;;AAFuD,yDAGhC,QAAI,CAACotF,aAH2B;AAAA;;AAAA;AAGvD,wEAA2C;AAAA,oBAAhCrwC,QAAgC;;AACvC,oBAAIA,QAAQ,CAAC/8C,KAAb,EAAoB;AAAA,+DACI+8C,QAAQ,CAAC/8C,KADb;AAAA;;AAAA;AAChB,8EAAoC;AAAA,0BAAzB6mB,KAAyB;;AAChC,0BAAKA,KAAa,CAAC7mB,KAAnB,EAA0B;AACtB,4BACK6mB,KAAa,WAAb,KACAA,KAAK,CAAC9oB,IAAN,CAAW2L,WAAX,GAAyBoS,QAAzB,CAAkC8W,MAAlC,KACI/L,KAAa,CAAC7mB,KAAd,CAAoBwF,IAApB,CAAyB,UAACkF,IAAD;AAAA,iCACtBA,IAAI,CAAC3M,IAAL,CAAU2L,WAAV,GAAwBoS,QAAxB,CAAiC8W,MAAjC,CADsB;AAAA,yBAAzB,CAFJ,CADL,EAME;AACE5yB,+BAAK,CAAC6J,IAAN,CAAWgd,KAAX;AACH,yBARD,MAQO;AAAA,uEACiBA,KAAa,CAAC7mB,KAD/B;AAAA;;AAAA;AACH,sFAAyC;AAAA,kCAA9B0K,IAA8B;;AACrC,kCAAIA,IAAI,CAAC3M,IAAL,CAAU2L,WAAV,GAAwBoS,QAAxB,CAAiC8W,MAAjC,CAAJ,EAA8C;AAC1C5yB,qCAAK,CAAC6J,IAAN,CAAWa,IAAX;AACH;AACJ;AALE;AAAA;AAAA;AAAA;AAAA;AAMN;AACJ,uBAhBD,MAgBO;AACH,4BAAImc,KAAK,CAAC9oB,IAAN,CAAW2L,WAAX,GAAyBoS,QAAzB,CAAkC8W,MAAlC,CAAJ,EAA+C;AAC3C5yB,+BAAK,CAAC6J,IAAN,CAAWgd,KAAX;AACH;AACJ;AACJ;AAvBe;AAAA;AAAA;AAAA;AAAA;AAwBnB;AACJ;AA7BsD;AAAA;AAAA;AAAA;AAAA;;AA8BvD,mBAAO7mB,KAAP;AACH,WA/B6C,CAAlB,EA+BxBC,SA/BwB,CA+Bd,UAACD,KAAD;AAAA,mBAAW,QAAI,CAACstF,aAAL,GAAqBttF,KAAhC;AAAA,WA/Bc,CAA5B;AAgCH;;;oCAEkBN,O,EAAwB;AAAA;;AACvC;AACA,cAAIA,OAAO,CAACsC,IAAR,IAAgBtC,OAAO,CAACqD,QAA5B,EAAsC;AAClC,iBAAK0uD,sBAAL;AACA;;AACA,gBACI,KAAKtzC,IAAL,IACA,CAAC,KAAKkvE,eAAL,CAAqB7nF,IAArB,CACG,UAACgG,IAAD;AAAA,qBAAUA,IAAI,CAACyI,EAAL,KAAY,QAAI,CAACkK,IAAL,CAAUkxB,QAAV,CAAmBvU,aAAnB,CAAiC51B,KAAvD;AAAA,aADH,CAFL,EAKE;AACE,mBAAKiZ,IAAL,CAAUkxB,QAAV,CAAmBvU,aAAnB,CAAiCl4B,QAAjC,CAA0C,KAAKyqF,eAAL,CAAqB,CAArB,EAAwBp5E,EAAlE;AACH;AACJ;AACD;;;AACA,cAAIvU,OAAO,CAAC4zB,UAAZ,EAAwB;AACpB;AACA,gBAAI,KAAKnV,IAAL,IAAa,KAAKmV,UAAlB,IAAgC,CAAC,KAAKnV,IAAL,CAAUkxB,QAAV,CAAmBzT,WAAnB,CAA+B12B,KAApE,EAA2E;AACvE,mBAAKiZ,IAAL,CAAUkxB,QAAV,CAAmBzT,WAAnB,CAA+Bh5B,QAA/B,CAAwC,KAAK0wB,UAAL,CAAgB,CAAhB,EAAmBlgB,KAA3D;AACH;AACJ;AACD;;;AACA,cAAI1T,OAAO,CAACi8B,KAAR,IAAiB,KAAKA,KAA1B,EAAiC;AAC7B,iBAAK4xD,QAAL;AACH;AACJ;;;sCAEoB;AACjB,cAAI,KAAKC,SAAL,IAAkB,KAAKC,WAA3B,EAAwC;AACpC,iBAAKD,SAAL,CAAe3tF,aAAf,CAA6B8xD,KAA7B;AACH;AACJ;;;mCAEiB;AAAA;;;;AACd,eAAKxzC,IAAL,GAAY,IAAI,QAAAiiB,SAAJ,CAAc;AACtBnsB,cAAE,EAAE,IAAI,QAAA0pB,WAAJ,CAAgB,KAAKhC,KAAL,CAAW1nB,EAA3B,CADkB;AAEtBie,wBAAY,EAAE,IAAI,QAAAyL,WAAJ,CACV,KAAKnF,OAAL,GAAe,KAAK71B,MAAL,CAAY+I,YAAZ,CAAyB,KAAzB,EAAgCC,EAA/C,GAAoD,KAAKhJ,MAAL,CAAYgJ,EADtD,CAFQ;AAKtBiwB,uBAAW,EAAE,IAAI,QAAA+B,WAAJ,CAAgB,KAAKhC,KAAL,CAAWC,WAAX,KAAsB,MAAI,KAAKtI,UAAL,CAAgB,CAAhB,CAAJ,MAAsB,IAAtB,IAAsB,aAAtB,GAAsB,MAAtB,GAAsB,GAAElgB,KAA9C,CAAhB,CALS;AAMtB0nB,yBAAa,EAAE,IAAI,QAAA6C,WAAJ,CAAgB,KAAKhC,KAAL,CAAWb,aAAX,IAA4B,KAAKuyD,eAAL,CAAqB,CAArB,EAAwBp5E,EAApE,CANO;AAOtBjU,iBAAK,EAAE,IAAI,QAAA29B,WAAJ,CAAgB,KAAKhC,KAAL,CAAW37B,KAAX,CAAiB6H,GAAjB,CAAqB,UAAC6C,IAAD;AAAA,qBAAU,IAAI,cAAAw6B,YAAJ,CAAiBx6B,IAAjB,CAAV;AAAA,aAArB,CAAhB;AAPe,WAAd,CAAZ;AASA,eAAK3K,YAAL,CACI,cADJ,EAEI,KAAKoe,IAAL,CAAUkxB,QAAV,CAAmBzT,WAAnB,CAA+BgD,YAA/B,CAA4C3+B,SAA5C,CAAsD,UAACklB,KAAD,EAAW;AAC7D,oBAAI,CAACssC,sBAAL;;AACA,gBACI,CAAC,QAAI,CAAC47B,eAAL,CAAqB7nF,IAArB,CACG,UAACgG,IAAD;AAAA,qBAAUA,IAAI,CAACyI,EAAL,KAAY,QAAI,CAACkK,IAAL,CAAUkxB,QAAV,CAAmBvU,aAAnB,CAAiC51B,KAAvD;AAAA,aADH,CADL,EAIE;AACE,sBAAI,CAACiZ,IAAL,CAAUkxB,QAAV,CAAmBvU,aAAnB,CAAiCl4B,QAAjC,CAA0C,QAAI,CAACyqF,eAAL,CAAqB,CAArB,EAAwBp5E,EAAlE;AACH;;AACD,oBAAI,CAACkK,IAAL,CAAUkxB,QAAV,CAAmBrvC,KAAnB,CAAyB4C,QAAzB,CAAkC,EAAlC;;AACA,oBAAI,CAAC8qF,QAAL;AACH,WAXD,CAFJ;AAeA,eAAKA,QAAL;AACA,eAAKj8B,sBAAL;;AACA,cACI,KAAKtzC,IAAL,IACA,CAAC,KAAKkvE,eAAL,CAAqB7nF,IAArB,CAA0B,UAACgG,IAAD;AAAA,mBAAUA,IAAI,CAACyI,EAAL,KAAY,QAAI,CAACkK,IAAL,CAAUkxB,QAAV,CAAmBvU,aAAnB,CAAiC51B,KAAvD;AAAA,WAA1B,CAFL,EAGE;AACE,iBAAKiZ,IAAL,CAAUkxB,QAAV,CAAmBvU,aAAnB,CAAiCl4B,QAAjC,CAA0C,KAAKyqF,eAAL,CAAqB,CAArB,EAAwBp5E,EAAlE;AACH;AACJ;;;uCAEqB;AAAA;;AAClB,cAAM4wC,GAAG,GAAG,KAAK5B,OAAL,CAAajpC,IAAb,CACkB,kBAAA+tC,oCADlB,EACwD;AAC5DhD,oBAAQ,EAAE,MADkD;AAE5DxsC,gBAAI,EAAE;AACFigB,qBAAO,EAAE,KAAKA,OADZ;AAEF71B,oBAAM,EAAE,KAAKA,MAFX;AAGFwb,kBAAI,EAAE,KAAKA;AAHT;AAFsD,WADxD,CAAZ;;AASA,eAAKpe,YAAL,CACI,eADJ,EAEI8kD,GAAG,CAACO,iBAAJ,CAAsB11C,KAAtB,CAA4BzP,SAA5B,CAAsC,UAACyP,KAAD,EAAwB;AAC1D;AACA,gBAAIA,KAAK,CAACiW,MAAN,KAAiB,MAArB,EAA6B;AACzB,kBAAMgW,KAAK,GAAG,IAAI,cAAA9C,aAAJ,CAAkB,MAAD,OAAC,CAAD,kBAAM,QAAI,CAAC8C,KAAX,CAAC,EAAoB,QAAI,CAACxd,IAAL,CAAUjZ,KAA9B,CAAlB,CAAd,CADyB,CAEzB;;AACA,sBAAI,CAACwK,KAAL,CAAWg1C,IAAX,CAAgB/oB,KAAhB;;AACAkpB,iBAAG,CAAC7c,KAAJ;AACH;AACJ,WARD,CAFJ;AAYA6c,aAAG,CAACW,WAAJ,GAAkBvlD,SAAlB,CAA4B,YAAM;AAC9B,oBAAI,CAACnC,KAAL,CAAW,eAAX;AACH,WAFD;AAGH;;;mCAEkB;AAAA;;;;AACf,cAAMqnB,KAAK,GAAG,KAAKmO,UAAL,CAAgB9tB,IAAhB,CACV,UAAC2f,KAAD;AAAA,mBAAWA,KAAK,CAAC/R,KAAN,KAAgB,QAAI,CAAC+K,IAAL,CAAUkxB,QAAV,CAAmBzT,WAAnB,CAA+B12B,KAA1D;AAAA,WADU,CAAd;AAIA,eAAK+V,OAAL,GAAe,IAAf;;AACA,eAAKkyE,KAAL,CACK/3E,KADL,CACW;AAAE6I,mBAAO,EAAE,CAAF,KAAE,KAAKkT,IAAL,CAAUra,SAAV,CAAoBtR,IAApB,CAAyB,UAAC2kC,GAAD;AAAA,qBAAShlB,KAAK,SAAL,IAAAA,KAAK,WAAL,GAAK,MAAL,GAAAA,KAAK,CAAEI,KAAP,CAAazJ,QAAb,CAAsBquB,GAAG,CAACl2B,EAA1B,CAAT;AAAA,aAAzB,OAAgE,IAAhE,IAAgE,aAAhE,GAAgE,MAAhE,GAAgE,GAAEA;AAA7E,WADX,EAEKyK,IAFL,CAGQ,UAACxe,IAAD,EAAU;AACN,oBAAI,CAAC+a,OAAL,GAAe,KAAf;AACA,oBAAI,CAACmyE,aAAL,GAAqBltF,IAAI,CAAC2H,GAAL,CAAS,UAACxH,CAAD;AAAA,qBAAO,IAAI,cAAAykC,gBAAJ,CAAqBzkC,CAArB,CAAP;AAAA,aAAT,EAChBuI,MADgB,CACT,UAAAkI,CAAC;AAAA,qBAAI,CAACA,CAAC,CAAC21B,YAAP;AAAA,aADQ,CAArB;AAEH,WAPT,EAQQ;AAAA,mBAAO,QAAI,CAACxrB,OAAL,GAAe,KAAtB;AAAA,WARR;AAUH;AAED;;;;iDACiC;AAAA,sCACE,KAAK0yE,wBAAL,EADF;AAAA,cACvB/mF,QADuB,yBACvBA,QADuB;AAAA,cACb1E,KADa,yBACbA,KADa;AAAA,cACNmtB,GADM,yBACNA,GADM;;AAE7BntB,eAAK,GAAGA,KAAK,CAACU,QAAN,CAAe;AAAEP,kBAAM,EAAEC,IAAI,CAACC,IAAL,CAAUL,KAAK,CAACO,OAAN,GAAgB,CAA1B,IAA+B;AAAzC,WAAf,CAAR,CAF6B,CAG7B;;AACA,cAAM6oE,UAAU,GAAG,KAAK3oE,MAAxB;AACA,eAAK0qF,eAAL,GAAuB,EAAvB;;AACA,iBAAOnrF,KAAK,CAACm5B,YAAN,CAAmBhM,GAAnB,CAAP,EAAgC;AAC5B,iBAAKg+D,eAAL,CAAqBxjF,IAArB,CAA0B;AACtBoK,gBAAE,EAAE3R,IAAI,CAAC04B,GAAL,CAASswC,UAAU,CAACrwC,QAAX,CAAoB/4B,KAApB,EAA2B,SAA3B,CAAT,CADkB;AAEtBnE,kBAAI,EAAEmE,KAAK,CAACoB,UAAN,CAAiB,OAAjB,EAA0BmJ,iBAA1B;AAFgB,aAA1B;AAIAvK,iBAAK,GAAGA,KAAK,CAACW,QAAN,CAAe;AAAEJ,qBAAO,EAAE;AAAX,aAAf,CAAR;AACH;AACD;;;AACA,cAAI,KAAK4qF,eAAL,CAAqBnpF,MAArB,KAAgC,CAApC,EAAuC;AACnC,iBAAKmpF,eAAL,CAAqBxjF,IAArB,CAA0B;AAAEoK,gBAAE,EAAE,CAAC,CAAP;AAAUlW,kBAAI,EAAE;AAAhB,aAA1B;AACH;AACJ;;;mDAE+B;AAC5B,cAAMorB,GAAG,GAAG,UAAA1d,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAZ;AACA,cAAIgF,QAAQ,GAAGuiB,GAAG,CAACo3B,QAAnB;AACA,cAAMqtC,WAAW,GAAG,KAAKzvE,IAAL,GAAY,KAAKA,IAAL,CAAUkxB,QAAV,CAAmBzT,WAAnB,CAA+B12B,KAA3C,GAAmD,IAAvE;AACA,cAAI8pB,cAAc,GAAG;AAAE9sB,iBAAK,EAAE,CAAT;AAAYmtB,eAAG,EAAE;AAAjB,WAArB;AACA,cAAIw+D,aAAa,GAAG,KAAKlrF,MAAL,CAAY+I,YAAZ,CAAyB,KAAzB,CAApB;AACA,cAAIoiF,cAAc,GAAGD,aAAa,CAAChrF,QAAd,CAAuB;AAAEwG,iBAAK,EAAE2lB,cAAc,CAAC9sB;AAAxB,WAAvB,CAArB;AACA,cAAI6rF,YAAY,GAAGF,aAAa,CAAChrF,QAAd,CAAuB;AAAEwG,iBAAK,EAAE2lB,cAAc,CAACK;AAAxB,WAAvB,CAAnB;;AAEA,cAAIu+D,WAAJ,EAAiB;AACb;AACA,gBAAMzoE,KAAK,GAAG,KAAKmO,UAAL,CAAgB9tB,IAAhB,CAAqB,UAAC2f,KAAD;AAAA,qBAAWA,KAAK,CAAC/R,KAAN,KAAgBw6E,WAA3B;AAAA,aAArB,CAAd;;AACA,gBAAMtoE,QAAQ,GAAG,KAAK6L,IAAL,CAAUra,SAAV,CAAoBtR,IAApB,CAAyB,UAAC2kC,GAAD;AAAA,qBAAShlB,KAAK,SAAL,IAAAA,KAAK,WAAL,GAAK,MAAL,GAAAA,KAAK,CAAEI,KAAP,CAAazJ,QAAb,CAAsBquB,GAAG,CAACl2B,EAA1B,CAAT;AAAA,aAAzB,CAAjB;;AACA,gBAAIqR,QAAQ,CAAC1e,QAAb,EAAuB;AACnB;AACAA,sBAAQ,GAAG0e,QAAQ,CAAC1e,QAApB;AACAinF,2BAAa,GAAG,KAAKlrF,MAAL,CAAYyJ,MAAZ,CAAmBxF,QAAnB,EAA6B8E,YAA7B,CAA0C,KAA1C,CAAhB;AACH;;AACD,gBAAI4Z,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAE0J,cAAd,EAA8B;AAC1B;AACAA,4BAAc,GAAG1J,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAE0J,cAA3B;AACH,aAZY,CAab;;;AACA8+D,0BAAc,GAAGD,aAAa,CAAChrF,QAAd,CAAuB;AAAEwG,mBAAK,EAAE2lB,cAAc,CAAC9sB;AAAxB,aAAvB,CAAjB;AACA6rF,wBAAY,GAAGF,aAAa,CAAChrF,QAAd,CAAuB;AAAEwG,mBAAK,EAAE2lB,cAAc,CAACK;AAAxB,aAAvB,CAAf;AACH,WAzB2B,CA2B5B;;;AACA,cAAIntB,KAAK,GAAG,KAAKS,MAAL,CAAYyJ,MAAZ,CAAmBxF,QAAnB,CAAZ;AACA,cAAIyoB,GAAG,GAAG,KAAK1sB,MAAL,CAAYyJ,MAAZ,CAAmBxF,QAAnB,EAA6B/D,QAA7B,CAAsC;AAAEJ,mBAAO,EAAE,KAAKM;AAAhB,WAAtC,CAAV,CA7B4B,CA+B5B;;AACA,cAAIb,KAAK,CAACm5B,YAAN,CAAmByyD,cAAnB,CAAJ,EAAwC;AACpC;AACA,gBAAIC,YAAY,CAACzyD,WAAb,CAAyBp5B,KAAzB,CAAJ,EAAqC;AACjC;AACAA,mBAAK,GAAG4rF,cAAc,CAACjrF,QAAf,CAAwB,EAAxB,CAAR;AACH,aAHD,MAGO;AACH;AACAX,mBAAK,GAAG6rF,YAAY,CAAClrF,QAAb,CAAsB,EAAtB,CAAR;AACAwsB,iBAAG,GAAG0+D,YAAY,CAAClrF,QAAb,CAAsB,EAAtB,CAAN;AACA,qBAAO;AAAE+D,wBAAQ,EAARA,QAAF;AAAY1E,qBAAK,EAALA,KAAZ;AAAmBmtB,mBAAG,EAAHA;AAAnB,eAAP;AACH;AACJ,WAXD,MAWO;AACH;AACA,gBAAI0+D,YAAY,CAAC1yD,YAAb,CAA0Bn5B,KAA1B,CAAJ,EAAsC;AAClC;AACAA,mBAAK,GAAG6rF,YAAY,CAAClrF,QAAb,CAAsB,EAAtB,CAAR;AACAwsB,iBAAG,GAAG0+D,YAAY,CAAClrF,QAAb,CAAsB,EAAtB,CAAN;AACA,qBAAO;AAAE+D,wBAAQ,EAARA,QAAF;AAAY1E,qBAAK,EAALA,KAAZ;AAAmBmtB,mBAAG,EAAHA;AAAnB,eAAP;AACH;AACJ;;AAED,cAAIA,GAAG,CAACgM,YAAJ,CAAiB0yD,YAAjB,CAAJ,EAAoC;AAChC;AACA,gBAAID,cAAc,CAACxyD,WAAf,CAA2BjM,GAA3B,CAAJ,EAAqC;AACjC;AACAntB,mBAAK,GAAG4rF,cAAc,CAACjrF,QAAf,CAAwB,EAAxB,CAAR;AACAwsB,iBAAG,GAAGy+D,cAAc,CAACjrF,QAAf,CAAwB,EAAxB,CAAN;AACA,qBAAO;AAAE+D,wBAAQ,EAARA,QAAF;AAAY1E,qBAAK,EAALA,KAAZ;AAAmBmtB,mBAAG,EAAHA;AAAnB,eAAP;AACH;AACJ,WARD,MAQO;AACH;AACA;AACAA,eAAG,GAAG0+D,YAAY,CAAClrF,QAAb,CAAsB,EAAtB,CAAN;AACH;;AAED,iBAAO;AAAE+D,oBAAQ,EAARA,QAAF;AAAY1E,iBAAK,EAALA,KAAZ;AAAmBmtB,eAAG,EAAHA;AAAnB,WAAP;AACH;;;4BAzSmB;AAChB,iBACI,CAAC,KAAKk8B,eAAL,CAAqB/kC,YAArB,IAAqC,KAAK4mE,aAAL,CAAmBlpF,MAAzD,MACC,CAAC,KAAK8pF,sBAAN,IAAgC,KAAKC,mBADtC,KAEA,CAAC,KAAKC,YAHV;AAKH;AAED;;;;4BAC0B;AACtB,cAAMC,aAAa,GAAG,CAAC,KAAKhwE,IAAL,IAAa;AAAEkxB,oBAAQ,EAAE;AAAEzT,yBAAW,EAAE;AAAE12B,qBAAK,EAAE;AAAT;AAAf;AAAZ,WAAd,EAA4DmqC,QAAlF;AACA,cAAMlqB,KAAK,GACP,KAAKmO,UAAL,CAAgB9tB,IAAhB,CAAqB,UAAC2f,KAAD;AAAA,mBAAWA,KAAK,CAAC/R,KAAN,IAAe+6E,aAAa,CAACvyD,WAAd,CAA0B12B,KAApD;AAAA,WAArB,KACC;AAAEmoB,iBAAK,EAAE;AAAT,WAFL;AAGA,iBACI,KAAK8D,IAAL,CAAUra,SAAV,CAAoBtR,IAApB,CAAyB,UAAC2kC,GAAD,EAAS;AAAD;;AAAC,0BAAAhlB,KAAK,CAACkI,KAAN,MAAW,IAAX,IAAW,aAAX,GAAW,MAAX,GAAW,GAAE+c,WAAb,MAA6BD,GAAG,CAACl2B,EAAjC;AAAmC,WAArE,KACC;AAAE83B,oCAAwB,EAAE;AAA5B,WAFL;AAIH;AAED;;;;4BACiB;AACb,iBAAO,KAAKwf,eAAL,CAAqBvf,QAArB,IAAiC,KAAxC;AACH;AAED;;;;4BACqB;AACjB,iBAAO,KAAK7tB,IAAL,GACD,KAAKA,IAAL,CAAUkxB,QAAV,CAAmBrvC,KAAnB,CAAyBkF,KAAzB,CAA+BS,MAA/B,CAAsC,UAAC6hC,KAAD,EAAQ98B,IAAR;AAAA,mBAAiB88B,KAAK,GAAG98B,IAAI,CAAC27B,MAA9B;AAAA,WAAtC,EAA4E,CAA5E,CADC,GAED,CAFN;AAGH;AAED;;AACA;;;;4BACuB;AACnB,iBAAO,KAAKloB,IAAL,CAAUkxB,QAAV,CAAmBvU,aAAnB,CAAiC51B,KAAjC,GAAyC,CAAhD;AACH;AAED;;;;4BACiC;AAC7B,cAAMkpF,OAAO,GAAG,UAAA3iF,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoBiB,QAApB,CAA6B;AAAEwG,iBAAK,EAAE,KAAKkiD,eAAL,CAAqBxf;AAA9B,WAA7B,EAAuFrgC,YAAvF,CAAoG,QAApG,CAAhB;AACA,iBAAO,KAAK/I,MAAL,CAAY04B,YAAZ,CAAyB+yD,OAAzB,CAAP;AACH;AAED;;;;4BAC8B;AAC1B,iBAAO,KAAKhB,aAAL,CAAmBznF,MAAnB,CACH,UAACwqB,SAAD,EAAY4sB,QAAZ;AAAA,mBAAyB5sB,SAAS,IAAI4sB,QAAQ,CAAClW,iBAA/C;AAAA,WADG,EAEH,KAFG,CAAP;AAIH;;;;MAvFqD,OAAApoC,a;;AAL1D;;;uBAKa4pF,oC,EAAoC,4C,EAAA,4C,EAAA,kC;AAAA,K;;;YAApCA,oC;AAAoC,+C;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjDjD;AACI;AAwDA;AA8BA;AACI;AACI;AAKI;AAAA,mBAAS,IAAA34E,KAAA,OAAT;AAAqB,WAArB;AALJ;AASA;AACA;AAMI;AAAA,mBAAS,IAAA2+E,YAAA,EAAT;AAAuB,WAAvB;AANJ;AAUA;AACJ;AACJ;AACJ;AACA;AAWA;AAYA;;;;;;AAxIoC;AACZ;AAAA;AAwDkC;AAAA,8CAAiC,UAAjC,EAAiC,GAAjC;AA+C1C;AAAA;AAKJ;AAAA;AAAA;;;;;;;;;;2BD5DChG,oC,EAAoC;cALhD,OAAAviC,SAKgD;eALtC;AACPlnD,kBAAQ,EAAE,0BADH;AAEPmnD,qBAAW,EAAE,gCAFN;AAGPC,mBAAS,EAAE,CAAC,gCAAD;AAHJ,S;AAKsC,Q;;;;;;;;;;gBAE5C,OAAA1kD;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAA2kD;;;gBAkBA,OAAAsD,S;iBAAU,O;;;;;;;;;;;;;;;;;;;;;;;;AEnFf;AAAA;AAAA;;AAQA;AAAA;AAAA;;AAKA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAQai/B,8B;AA4DT,8CAAoBp3D,OAApB,EAA4C;AAAA;;AAAxB,aAAAA,OAAA,GAAAA,OAAA;AAvDpB;;AACS,aAAApvB,IAAA,GAAe,UAAAyJ,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB+J,EAAnC;AACT;;AACiB,aAAA2iF,IAAA,GAAO,IAAI,OAAAlrC,YAAJ,EAAP;AACjB;;AACiB,yBAAS,IAAI,OAAAA,YAAJ,EAAT;AAmDhB;;;;mCA/Cc;AAAA;;AACX,eAAKpuB,IAAL,GAAY,CAAC,KAAK1B,UAAL,IAAmB,EAApB,EAAwB9tB,IAAxB,CAA6B,UAAA2f,KAAK;AAAA,mBAAIA,KAAK,CAAC/R,KAAN,KAAgB,QAAI,CAACuoB,KAAL,CAAWC,WAA/B;AAAA,WAAlC,CAAZ;AACH;;;4BAE0B;AACvB,iBAAO,CAAC,CAAC,KAAK5G,IAAd;AACH;AAED;;;;4BAC2B;;;AACvB,iBAAO,YAAKA,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAEjE,UAAX,KAAyB,eAAhC;AACH;AAED;;;;4BACwB;AACpB;AACA,cAAI,CAAC,KAAK4K,KAAV,EAAiB;AACb,mBAAO,iBAAP;AACH,WAJmB,CAMpB;;;AACA,iBAAO,KAAKA,KAAL,CAAWwL,aAAX,CAAyBtkC,QAAzB,CAAkC;AAAEJ,mBAAO,EAAE,KAAKk5B,KAAL,CAAWb,aAAX,IAA4B;AAAvC,WAAlC,EAA8Ex3B,UAA9E,CAAyF,OAAzF,EAAkGmJ,iBAAlG,EAAP;AACH;AAED;;;;4BACqB;AACjB,cAAMzM,KAAK,GAAG,CAAC,KAAK27B,KAAL,IAAc;AAAE37B,iBAAK,EAAE;AAAT,WAAf,EAA8BA,KAA5C;AACA,iBAAOA,KAAK,CAAC2F,MAAN,CAAa,UAAC0gC,MAAD,EAAS37B,IAAT;AAAA,mBAAkB27B,MAAM,GAAG37B,IAAI,CAAC27B,MAAL,GAAc37B,IAAI,CAACg7B,UAA9C;AAAA,WAAb,EAAuE,CAAvE,CAAP;AACH;AAED;;;;4BACqB;AACjB,cAAM1lC,KAAK,GAAG,CAAC,KAAK27B,KAAL,IAAc;AAAE37B,iBAAK,EAAE;AAAT,WAAf,EAA8BA,KAA5C;AACA,iBAAOA,KAAK,CAAC2F,MAAN,CAAa,UAAC0gC,MAAD,EAAS37B,IAAT;AAAA,mBAAkB27B,MAAM,GAAG37B,IAAI,CAAC27B,MAAhC;AAAA,WAAb,EAAqD,CAArD,CAAP;AACH;AAED;;;;4BACiB;;AACb;;;AACA,cAAI,CAAC,KAAKrR,IAAN,IAAc,CAAC,KAAKA,IAAL,CAAU3H,KAA7B,EAAoC;AAChC,mBAAO,KAAP;AACH;;AAED,iBAAO,kBAAK2H,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAE1P,QAAX,MAAmB,IAAnB,IAAmB,aAAnB,GAAmB,MAAnB,GAAmB,GAAE0mB,QAArB,KAAiC,KAAxC;AACH;;;;;;AA/DL;;;uBAKaw8C,8B,EAA8B,sC;AAAA,K;;;YAA9BA,8B;AAA8B,+C;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA;AAAA,O;AAAA,e;AAAA,c;AAAA,8N;AAAA;AAAA;ACrB3C;AAAA;AACe;AAAuC;AACtD;AAAA;AACA;AACI;AACI;AACA;;AAAsE;AAC1E;AACA;AAAkB;;AAAyC;AAC/D;AACA;AACI;AAII;AAAA,mBAAS,IAAA8F,IAAA,OAAT;AAAoB,WAApB;AAOA;AAGJ;AACA;AAAsD;AAAA,mBAAS,oBAAT;AAAsB,WAAtB;AAClD;AACJ;AACJ;;;;AA3BA;AAAA,6CAAM,iBAAN;AAAA;AAGQ;AAAA;;;;AAGc;AAAA;AAMd;AAAA;AAEA;AAOI;AAAA;AAIM;AAAA;;;;;;;;;;2BDNL9F,8B,EAA8B;cAL1C,OAAA1iC,SAK0C;eALhC;AACPlnD,kBAAQ,EAAE,0BADH;AAEPmnD,qBAAW,EAAE,uBAFN;AAGPC,mBAAS,EAAE,CAAC,uBAAD;AAHJ,S;AAKgC,Q;;;;;;gBAEtC,OAAA1kD;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAA2kD;;;gBAEA,OAAAA;;;;;;;;;;;;;;;;;;;;;;;;AE/BL;AAAA;AAAA;;AAMA;AAAA;AAAA;;AAOA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNgB;AAKI;AAAA;AAAA;AAAA;AAAA;AAAA,WAAyB,QAAzB,EAAyB;AAAA;AAAA;AAAA;AAAA;AAAA,SAAzB;AAEH;;;;;;AALG,uDAAyB,OAAzB,EAAyB,QAAzB,EAAyB,MAAzB,EAAyB,WAAzB;;;;;;;;AAJZ;AACI;AACI;AAQJ;AACA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAA9B;AAEA;AACJ;;;;;AAXY;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqChB;AACI;AACI;AACJ;AACA;AAAA;AAA2E;AAC3E;AAA8B;AAAA;AAAA;AAAA;AAAA;AAA9B;AAEA;AACJ;;;;AANkB;AAAA;;;;QD1BTqiC,iC;AALb;AAAA;;AAgBI;AACiB,aAAA54E,KAAA,GAAQ,IAAI,OAAA0zC,YAAJ,EAAR;AACjB;;AACiB,aAAAznB,KAAA,GAAQ,IAAI,OAAAynB,YAAJ,EAAR;AAEV,yBAAkB,KAAlB;AAyDV;AAvDG;;;;;;AAqBA;mCACkB;AACd,eAAKznB,KAAL,CAAW+oB,IAAX;AACH;AAED;;;;kCACiB/oB,K,EAAsB;AACnC,eAAKA,KAAL,CAAW+oB,IAAX,CAAgB/oB,KAAhB;AACH;AAED;;;;oCACmBA,K,EAAsB;AACrC,cAAMD,MAAM,GAAG,KAAKA,MAApB;AACA,cAAMp7B,KAAK,GAAGo7B,MAAM,CAACkW,SAAP,CAAiB,UAAAg7C,QAAQ;AAAA,mBAAIjxD,KAAK,CAAC1nB,EAAN,KAAa24E,QAAQ,CAAC34E,EAA1B;AAAA,WAAzB,CAAd;AACA;;AACA,cAAI3T,KAAK,IAAI,CAAb,EAAgB;AACZo7B,kBAAM,CAACjtB,MAAP,CAAcnO,KAAd,EAAqB,CAArB;AACA,iBAAKs4B,QAAL,CAAch2B,QAAd,CAAuB84B,MAAvB;AACA,6BAAc,IAAd;AACH;AACJ;AAED;;;;;;+BAGW;AACP;AACA,eAAKhsB,KAAL,CAAWg1C,IAAX,CAAgB;AAAEz9C,gBAAI,EAAE,MAAR;AAAgBzC,gBAAI,EAAE;AAAtB,WAAhB;AACH;AAED;;;;mCACe;AACX,eAAKkL,KAAL,CAAWg1C,IAAX,CAAgB;AAAEz9C,gBAAI,EAAE,UAAR;AAAoBzC,gBAAI,EAAE;AAA1B,WAAhB;AACH;;;4BArDgB;AAAA;;AACb;AACA,cAAI,CAAC,KAAKo0B,QAAV,EAAoB;AAChB,mBAAO,EAAP;AACH;;AACD,cAAI8C,MAAM,GAAG,EAAb;AACA,cAAMwB,KAAK,GAAG,IAAI,UAAAhqB,MAAJ,CAAW;AAAClR,gBAAI,EAAE,KAAKA;AAAZ,WAAX,CAAd;AACA,eAAK42B,QAAL,CAAc1zB,KAAd,CAAoB9E,OAApB,CACI,UAAAu7B,KAAK,EAAI;AACL,gBAAM4yD,QAAQ,GAAG5yD,KAAjB;AACA4yD,oBAAQ,CAACr8D,YAAT,GAAwB,QAAI,CAACsG,OAAL,GACF0E,KAAK,CAACxxB,YAAN,CAAmB,KAAnB,EAA0BC,EADxB,GAEF,QAAI,CAAC3J,IAF3B;AAGA05B,kBAAM,CAAC7xB,IAAP,CAAY0kF,QAAZ;AACH,WAPL;AAUA,iBAAO7yD,MAAP;AACH;;;;;;AA1CL;;;uBAKa4sD,iC;AAAiC,K;;;YAAjCA,iC;AAAiC,4C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA;AAAA,O;AAAA,e;AAAA,a;AAAA,qnB;AAAA;AAAA;ACrB9C;AACI;AACI;AAAA;AAAqD;AACzD;AACA;AACI;AAeJ;AACA;AACI;AACI;AAKI;AAAA,mBAAS,IAAAkG,QAAA,EAAT;AAAmB,WAAnB;AALJ;AASA;AACA;AAKgB;AAAA,mBAAS,IAAAr+E,IAAA,EAAT;AAAe,WAAf;AALhB;AAOA;AACJ;AACJ;AACJ;AACA;;;;;;AAvCsB;AAAA,iEAAiD,UAAjD,EAAiD,GAAjD;AAgCN;AAAA;;;;;;;;;2BDhBHm4E,iC,EAAiC;cAL7C,OAAAxiC,SAK6C;eALnC;AACPlnD,kBAAQ,EAAE,uBADH;AAEPmnD,qBAAW,EAAE,6BAFN;AAGPC,mBAAS,EAAE,CAAC,6BAAD;AAHJ,S;AAKmC,Q;;gBAEzC,OAAA1kD;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAA2kD;;;gBAEA,OAAAA;;;;;;;;;;;;;;;;;;;;;;;;AEnCL;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAGA;AAAA;AAAA;;;;;;;;;;;;AAgBY;AACI;AACI;AACJ;AACA;AACI;AACJ;AACA;AACI;AACJ;AACJ;;;;;;;AAVgE;AAExD;AAAA;AAGA;AAAA;AAGA;AAAA;;;;;;AAjBhB;AACI;AACI;AACI;AACI;AACJ;AACA;AAAmB;AAAW;AAC9B;AAAmB;AAAK;AAC5B;AACA;AAWJ;AACJ;;;;;AAZY;AAAA;;;;QAgBHmjC,mB;;;;;;;;;;;;;kCAIQztD,K,EAAO;AACpB,iBAAOA,KAAK,CAAC37B,KAAN,CAAY6H,GAAZ,CAAgB,UAAAxH,CAAC;AAAA,6BAAOA,CAAC,CAACtC,IAAT,SAAgBsC,CAAC,CAACgmC,MAAF,GAAW,CAAX,eAAoBhmC,CAAC,CAACgmC,MAAtB,SAAkC,EAAlD;AAAA,WAAjB,EAAyEh7B,IAAzE,CAA8E,IAA9E,CAAP;AACH;;;2CAEyBswB,K,EAAO;AAC7B,iBAAO,KAAKhlB,OAAL,CAAa/J,WAAb,CAAyB/J,QAAzB,CAAkC;AAAEJ,mBAAO,EAAEk5B,KAAK,SAAL,IAAAA,KAAK,WAAL,GAAK,MAAL,GAAAA,KAAK,CAAEb;AAAlB,WAAlC,EAAqEx3B,UAArE,CAAgF,OAAhF,EAAyFmJ,iBAAzF,EAAP;AACH;;;qCAEmBjN,C,EAAG;AACnB,iBAAOA,CAAC,GAAG,CAAJ,KAAU,CAAV,GAAc,KAAd,GAAsB,MAA7B;AACH;;;;MAdoC,OAAAf,a;;AA5BzC;;;mDA4Ba2qF,mB;AAAmB,K;;;YAAnBA,mB;AAAmB,2C;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,c;AAAA,a;AAAA,gM;AAAA;AAAA;AAzB5B;;;;AAAmC;;;;;;oEAyB1BA,mB;;;;2BAAAA,mB,EAAmB;cA5B/B,OAAAtjC,SA4B+B;eA5BrB;AACPlnD,kBAAQ,EAAE,sBADH;AAEPw0D,kBAAQ,wyBAFD;AA0BPpN,mBAAS,EAAE,CAAC,8BAAD;AA1BJ,S;AA4BqB,Q;;gBAE3B,OAAA1kD;;;;;;;;;;;;;;;;;;;;;;;;ACzCL;AAAA;AAAA;;AAQA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAGA;AAAA;AAAA;;AAYA;AAAA;AAAA;;AAGA;AAAA;AAAA;;AAGA;AAAA;AAAA;;AAMA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUY;AAA6C;AAAM;;;;;;AAa/B;;;;;AAAY;;;;;;AADhB;AACI;AACJ;;;;;AADoC;AAAA;;;;;;AAQpC;AACI;AACI;AACJ;AACJ;;;;;;AAHa;AAAA;AACiB;AAAA,qDAAuB,QAAvB,EAAuB,OAAvB,EAAuB,WAAvB,EAAuB,gBAAvB,EAAuB,iBAAvB,EAAuB,sBAAvB,EAAuB,cAAvB,EAAuB,mBAAvB;;;;QAY7CymF,uB;;;;;AAkDT,uCACYnI,MADZ,EAEYlnE,KAFZ,EAGYmD,KAHZ,EAIYmnC,OAJZ,EAKYlW,MALZ,EAKgC;AAAA;;AAAA;;AAE5B;AANQ,iBAAA8yC,MAAA,GAAAA,MAAA;AACA,iBAAAlnE,KAAA,GAAAA,KAAA;AACA,iBAAAmD,KAAA,GAAAA,KAAA;AACA,iBAAAmnC,OAAA,GAAAA,OAAA;AACA,iBAAAlW,MAAA,GAAAA,MAAA;AAtDL,iBAAAopC,gBAAA,GAAmB,0BAAAA,gBAAnB;AACA,iBAAAp/D,SAAA,GAAY,IAAI,OAAArZ,eAAJ,CAAyC,EAAzC,CAAZ;AACA,iBAAAgxF,YAAA,GAAe,CAClB;AACIxnF,cAAI,EAAE,UADV;AAEIgH,iBAAO,EAAE,UAFb;AAGIrP,kBAAQ,EAAE,cAAAssB;AAHd,SADkB,EAMlB;AACIjkB,cAAI,EAAE,MADV;AAEIgH,iBAAO,EAAE,MAFb;AAGIrP,kBAAQ,EAAE,cAAAusB;AAHd,SANkB,EAWlB;AACIlkB,cAAI,EAAE,WADV;AAEIgH,iBAAO,EAAE,WAFb;AAGI68E,sBAAY,EAAE,IAHlB;AAIIlsF,kBAAQ,EAAE,cAAAwsB;AAJd,SAXkB,CAAf;AAsBA,iBAAAwwD,gBAAA,GAAmB,KAAnB;AACA,iBAAAiH,YAAA,GAAe,IAAf;AAEA,iBAAA8H,SAAA,GAAY,UAAZ;AAEP;;;;AAGA;;AACO,iBAAA3K,YAAA,GAAwB,KAAxB;AAKA,iBAAAqL,YAAA,GAAuB,EAAvB;AAEA,iBAAAC,eAAA,GAAuB,EAAvB;AAGP,iBAAAoD,eAAA,GAAmC;AAC/B1gC,qBAAW,EAAE,0CADkB;AAE/BC,wBAAc,EAAE,CAFe;AAG/BC,yBAAe,EAAE;AAHc,SAAnC;AAWgC;AAG/B;;;;mCAEc;AAAA;;AAEX;AACA,cAAMygC,SAAS,GAAG,KAAK9yE,KAAL,CAAW+yE,QAAX,CAAoBzU,QAApB,CAA6BziE,GAA7B,CAAiC,IAAjC,CAAlB;AACA,cAAMm3E,IAAI,GAAG,KAAKhzE,KAAL,CAAW+yE,QAAX,CAAoBzU,QAApB,CAA6BziE,GAA7B,CAAiC,MAAjC,CAAb,CAJW,CAKX;;AACA,eAAKgB,KAAL,CAAWolE,QAAX,CAAoB,eAAA3lE,iBAAA,CAAkB/D,OAAlB,EAApB;AACA,eAAKyH,KAAL,CAAWtD,IAAX,CAAgBtY,SAAhB,CAA0B,UAAA6uF,QAAQ,EAAI;AAClC;AACA,gBAAMvkC,MAAM,GAAGskC,IAAI,KAAK,QAAxB;AACA,gBAAMlM,WAAW,GAAGmM,QAAQ,CAACvoE,WAA7B;AACA;;;;;;AAKA,oBAAI,CAACs8D,YAAL,GAAoBF,WAAW,IAAIp4B,MAAnC;;AAEA,oBAAI,CAACxqD,YAAL,CAAkB,WAAlB,EAA+B,QAAI,CAAC2Y,KAAL,CAAW5F,IAAX,CAC3B,QAAA4H,MAAA,CAAO,YAAA7D,qBAAP,CAD2B,EAE3B,QAAA6D,MAAA,CAAO,YAAAvD,kCAAP,CAF2B,EAG3B,YAAAtP,GAAA,CAAI,UAAC0kB,OAAD,EAA4C;AAC5C,qBAAO,cAAAD,qBAAA,CAAsBC,OAAtB,CAAP;AACH,aAFD,CAH2B,EAM3B,YAAAq6B,oBAAA,EAN2B,EAO7B3mD,SAP6B,CAOnB,UAAAkQ,IAAI,EAAI;AAChB,sBAAI,CAAC2G,SAAL,CAAe3G,IAAf,CAAoBA,IAApB;;AACI,kBAAIw+E,SAAS,IAAI,CAAC,QAAI,CAAC/S,gBAAvB,EAAyC;AACrC,wBAAI,CAACljE,KAAL,CAAWolE,QAAX,CAAoB,WAAArrE,uBAAA,EAApB;;AACA,wBAAI,CAACmpE,gBAAL,GAAwB,IAAxB,CAFqC,CAGrC;;AACA,wBAAI,CAAC77E,YAAL,CAAkB,gBAAlB,EAAoC,QAAI,CAAC2Y,KAAL,CAAW5F,IAAX,CAChC,QAAA4H,MAAA,CAAO,cAAA2Q,iCAAP,CADgC,EAElCprB,SAFkC,CAExB,UAAAkQ,IAAI,EAAI;;;AAChB,sBAAMwG,OAAO,GAAGxG,IAAI,CAACiH,OAAL,GAAe,CAAD,KAACjH,IAAI,CAACiH,OAAL,MAAY,IAAZ,IAAY,aAAZ,GAAY,MAAZ,GAAY,GAAG,CAAH,CAA3B,GAAmC,IAAnD;;AACA,sBAAIT,OAAO,IAAIA,OAAO,CAACqe,IAAvB,EAA6B;AACzB;AACA,wBAAI,QAAI,CAAC+S,SAAT,EAAoB;AAChB,8BAAI,CAACA,SAAL,CAAeC,KAAf;AACH;;AACD,wBAAI,QAAI,CAAC43C,MAAT,EAAiB;AACd,8BAAI,CAACA,MAAL,CAAYmP,QAAZ;AACF,qBAPwB,CAQzB;AACA;;;AACA,4BAAI,CAACC,wBAAL,CAA8Br4E,OAA9B,EAAuC4zC,MAAvC,EAA+Co4B,WAA/C,EAVyB,CAYzB;;;AACA,4BAAI,CAAChiF,OAAL,CAAa,aAAb,EAA2B,YAAM;AAC7B,8BAAI,CAACqiD,OAAL,CAAapL,QAAb,CAAsB,CAAC,OAAD,EAAS,QAAT,CAAtB,EAA0C;AAAEq3C,kCAAU,EAAE;AAAd,uBAA1C;AACH,qBAFD;AAGH;AACJ,iBArBmC,CAApC;AAsBH;AACR,aApC8B,CAA/B;AAsCH,WAjDD;AAmDA,eAAKlvF,YAAL,CAAkB,aAAlB,EAAiC,KAAK2Y,KAAL,CAAWgC,MAAX,CAAkB,OAAAC,iBAAlB,EAC5B7H,IAD4B,CACvB,YAAA+H,IAAA,CAAK,CAAL,CADuB,EAE5B5a,SAF4B,CAElB,UAAC2a,IAAD,EAA4B;AACnC;AACA,oBAAI,CAAC0J,WAAL,GAAmB,IAAI,cAAAgS,IAAJ,CAAS1b,IAAT,CAAnB;;AACA,gBAAI+zE,SAAJ,EAAe;AACX;AACA,sBAAI,CAACj2E,KAAL,CAAWolE,QAAX,CAAoB,WAAA9rE,qBAAA,CAAsB;AAAE,sBAAM28E,SAAR;AAAmB,yBAAS,QAAI,CAACrqE,WAAL,CAAiBlR,KAA7C;AAAoD,0BAAU,aAA9D;AAA6E,0BAAU;AAAvF,eAAtB,CAApB;AACH;AACJ,WAT4B,CAAjC;;AAYI,eAAK05B,MAAL,CAAYvyB,WAAZ,CAAwBzH,IAAxB,CAA6B,YAAAyG,KAAA,CAAM,UAACC,CAAD;AAAA,mBAAOA,CAAP;AAAA,WAAN,CAA7B,EAA8CvZ,SAA9C,CAAwD,YAAM;AAC1D,gBAAM2a,IAAI,GAAS,QAAI,CAACkyB,MAAL,CAAYpP,OAA/B;AAEA,gBAAM0e,SAAS,GAAGxhC,IAAI,CAACwhC,SAAL,CAAev0C,GAAf,CAAmB,UAACs3C,GAAD,EAAS;AAC1C,kBAAM+vC,MAAM,GAAG,QAAI,CAACpiD,MAAL,CAAYtnC,IAAZ,CAAiB25C,GAAG,CAAC/rC,KAArB,CAAf;;AACA,qBAAO87E,MAAM,GACT,IAAI,cAAA54D,IAAJ,CAAS;AAAEljB,qBAAK,EAAE87E,MAAM,CAAC97E,KAAhB;AAAuBrV,oBAAI,EAAEmxF,MAAM,CAACnxF,IAApC;AAA0C65B,uBAAO,EAAEunB,GAAG,CAACvnB;AAAvD,eAAT,CADS,GAET,IAAI,cAAAtB,IAAJ,CAAS;AAAEljB,qBAAK,EAAE+rC,GAAG,CAAC/rC,KAAb;AAAoBrV,oBAAI,EAAEohD,GAAG,CAAC/rC,KAAJ,CAAUpP,KAAV,CAAgB,GAAhB,EAAqB,CAArB,EAAwBA,KAAxB,CAA8B,GAA9B,EAAmC6D,GAAnC,CAAuC,UAAC0P,CAAD;AAAA,yBAAOA,CAAC,CAACw4B,MAAF,CAAS,CAAT,EAAY3+B,WAAZ,KAA4BmG,CAAC,CAAClI,SAAF,CAAY,CAAZ,CAAnC;AAAA,iBAAvC,EAClChE,IADkC,CAC7B,GAD6B,CAA1B;AAEPusB,uBAAO,EAAEunB,GAAG,CAACvnB;AAFN,eAAT,CAFJ;AAKC,aAPa,CAAlB;;AASA,gBAAIwkB,SAAS,CAACl4C,MAAd,EAAsB;AAClB,sBAAI,CAAC87E,YAAL,GAAoB,IAApB;AAEA,sBAAI,CAACmP,SAAL,GAAiB,CAACv0E,IAAD,EAAOsZ,MAAP,CAAckoB,SAAd,CAAjB;;AACA,kBAAMv3B,OAAO,GAAG,QAAI,CAACsqE,SAAL,CAAetnF,GAAf,CAAmB,UAAA5E,CAAC;AAAA,uBAAK;AAAEgL,yBAAO,EAAEhL,CAAC,CAAClF,IAAb;AAAmBmH,uBAAK,EAAEjC,CAAC,CAACmQ,KAA5B;AAAmC8T,sBAAI,EAAE;AAAEtM,wBAAI,EAAE3X;AAAR;AAAzC,iBAAL;AAAA,eAApB,CAAhB;;AAEA,sBAAI,CAACmsF,WAAL,GAAoB,CAAC;AAAEnhF,uBAAO,EAAE,KAAX;AAAkB/I,qBAAK,EAAE,EAAzB;AAA6BgiB,oBAAI,EAAE;AAAEtM,sBAAI,EAAE;AAAR;AAAnC,eAAD,EAAsDsZ,MAAtD,CAA6DrP,OAA7D,CAApB;AACA,sBAAI,CAACwmE,YAAL,GAAoB,QAAI,CAAC+D,WAAL,CAAiB,CAAjB,EAAoBlqF,KAAxC;AACA,sBAAI,CAACmqF,UAAL,GAAkB;AACd5U,0BAAU,EAAE,EADE;AAEd51D,uBAAO,EAAE,QAAI,CAACuqE,WAFA;AAGdrtB,+BAAe,EAAE,QAAI,CAACqtB,WAAL,CAAiB,CAAjB,CAHH;AAIdptB,gCAAgB,EAAE,QAAI,CAACstB,iBAAL,CAAuB1f,IAAvB,CAA4B,QAA5B,CAJJ;AAKd2f,gCAAgB,EAAE;AALJ,eAAlB;AAOH;AAEJ,WA7BD;AA8BP;;;0CAEwBpwC,G,EAAK;AAC1B,eAAKksC,YAAL,GAAoBlsC,GAAG,CAACj6C,KAAxB;AACH;;;oCAEkByR,O,EAAkB;;;AACjC,cAAI,KAAKG,SAAL,IAAkBH,OAAO,CAAC8f,aAA9B,EAA6C;AACzC,mBAAO,CAAP,KAAO,KAAK3f,SAAL,CAAe5R,KAAf,CAAqBM,IAArB,CAA0B,UAAA4E,CAAC;AAAA,qBAAIuM,OAAO,CAAC8f,aAAR,KAA0BrsB,CAAC,CAAClF,KAAhC;AAAA,aAA3B,OAAiE,IAAjE,IAAiE,aAAjE,GAAiE,MAAjE,GAAiE,GAAEgiB,IAAF,CAAO5B,QAA/E;AACH;;AACD,iBAAO,IAAP;AACH,S,CAED;;;;iDACgC3O,O,EAAyE;AAAA;;AAAA,cAAvD4zC,MAAuD,uEAArC,KAAqC;AAAA,cAA9Bo4B,WAA8B,uEAAP,KAAO;;AACrG,cAAI,KAAK/G,gBAAL,IAAyB,KAAK7zC,SAAlC,EAA6C;AACzC,iBAAKA,SAAL,CAAeC,KAAf;AACA,iBAAKD,SAAL,GAAiB,IAAjB;AACH,WAJoG,CAKrG;AACA;;;AACA,cAAI,CAAC,KAAKA,SAAN,IAAmBpxB,OAAO,CAACqe,IAA/B,EAAqC;AACjC,iBAAK+S,SAAL,GAAiB,KAAK63C,MAAL,CAAY5lE,IAAZ,CAAiB,kCAAAynE,4BAAjB,EAA+C;AAC5DxnE,wBAAU,EAAE,+BADgD;AAE5D1B,kBAAI,EAAE;AACF5B,uBAAO,EAAPA,OADE;AAEF2O,wBAAQ,EAAE,KAAKumE,WAAL,CAAiBl1E,OAAjB,CAFR;AAGF4zC,sBAAM,EAANA,MAHE;AAIFo4B,2BAAW,EAAXA,WAJE;AAKFE,4BAAY,EAAE,KAAKA,YALjB;AAMF2C,uBAAO,EAAE;AAAA,yBAAM,IAAN;AAAA;AANP,eAFsD;AAU5Dz5B,uBAAS,EAAE,KAViD;AAW5DC,2BAAa,EAAE;AAX6C,aAA/C,CAAjB,CADiC,CAcjC;;AACA7tD,sBAAU,CAAC,YAAM;AACb,sBAAI,CAAC0kF,YAAL,GAAoB,KAApB;AACH,aAFS,EAEP,IAFO,CAAV;AAGH;AACJ;;;kCAEgBnzE,K,EAA2B;AACxC,eAAKi7E,SAAL,GAAiB,KAAK8D,YAAL,CAAkB/+E,KAAK,CAACpP,KAAxB,EAA+B2G,IAAhD;;AACA,eAAK+7C,OAAL,CAAapL,QAAb,CAAsB,EAAtB,EAA0B;AAAE2tC,sBAAU,EAAE,KAAK1pE,KAAnB;AAA0B+oC,uBAAW,EAAE;AAAE8lC,kBAAI,EAAE;AAAR;AAAvC,WAA1B;AACH;;;sCAGaxlF,K,EAAO;AACjB,eAAKomF,eAAL,GAAuBpmF,KAAvB;AACH;;;;MAlNwC,OAAAzG,a;;AAvC7C;;;uBAuCaspF,uB,EAAuB,kC,EAAA,8B,EAAA,uC,EAAA,+B,EAAA,qC;AAAA,K;;;YAAvBA,uB;AAAuB,0C;AAAA,+C;AAAA,e;AAAA,a;AAAA,0iB;AAAA;AAAA;AApC5B;AACI;AACA;AACI;AACJ;AACA;AACI;AACI;AACI;AAAK;AAAe;AAEpB;AAEI;AAA2C;AAAA,mBAAU,IAAA5M,aAAA,QAAV;AAA+B,WAA/B;AAAkC;AAC7E;AAIJ;AAGA;AAA+B;AAAA,mBAAqB,IAAAqU,SAAA,QAArB;AAAsC,WAAtC;AAE3B;AAKJ;AAEJ;AACJ;AACJ;AACJ;;;;AA/BS;AAAA;AAEgB;AAAA;AAOJ;AAAA;AAEe;AAAA;AACO;AAAA;AASlB;AAAA;;;;;;;;;2BAcpBzH,uB,EAAuB;cAvCnC,OAAAjiC,SAuCmC;eAvCzB;AACPlnD,kBAAQ,EAAE,qBADH;AAEPw0D,kBAAQ,wvDAFD;AAqCPpN,mBAAS,EAAE,CAAC,kCAAD;AArCJ,S;AAuCyB,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QC5FvBypC,uB,GACT,iCAAmB94E,OAAnB,EAAqC;AAAA;;AAAlB,WAAAA,OAAA,GAAAA,OAAA;AAClB,K;;AAFL;AAKA;;;;AAGa,YAAAsa,sBAAA,GAAyB,UAACznB,OAAD,EAAmD;;;AACrF,UAAI,CAACA,OAAD,IAAY,QAACA,OAAO,CAAC,CAAD,CAAR,MAAW,IAAX,IAAW,aAAX,GAAW,MAAX,GAAW,GAAE2b,KAAb,CAAhB,EAAoC;AAChC,eAAO,EAAP;AACH;;AACD,aAAO3b,OAAO,CAAC3B,GAAR,CAAY,UAAC8O,OAAD,EAAsB;AACrC,eAAO,IAAI84E,uBAAJ,CACH94E,OADG,CAAP;AAGH,OAJM,CAAP;AAKH,KATY;;;;;;;;;;;;;;;;;;;;;ACbb;AAAA;AAAA;;AACA;AAAA;AAAA;;AAqBA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAOA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;AA4BO;;;;;;AACA;;;;;;;;AAiBC;AAAqH;AAAA;AAAA;AAAA,gCAAgB,EAAhB;AAAkB,SAAlB,EAAoB,UAApB,EAAoB;AAAA;AAAA;AAAA,gCAAoB,EAApB;AAAsB,SAA1C;AAEnH;AACF;;;;;AADE;AAAA;;;;;;;;AAID;AAAqH;AAAA;AAAA;AAAA,gCAAgB,EAAhB;AAAkB,SAAlB,EAAoB,UAApB,EAAoB;AAAA;AAAA;AAAA,gCAAoB,EAApB;AAAsB,SAA1C;AACrH;AACD;;;;;AADC;AAAA;;;;;;AAGF;AAEC;AAAO;AAAkB;AAC1B;;;;;;;;AACA;AAEC;AACC;AAAA;AAAA;AAAA,oDAA4B,KAAK,IAAjC,IAAyC,CAAzC;AAA0C,SAA1C,EAA4C,UAA5C,EAA4C;AAAA;AAAA;AAAA,oDAAgC,KAAK,IAArC,IAA6C,CAA7C;AAA8C,SAA1F;AACC;AACF;AACD;;;;;AAFG;AAAA;;;;;;AAIH;AACE;AAAO;AAAmF;AAC5F;;;;;AADS;AAAA;;;;;;AAET;AACE;AACF;;;;;;AAtCD;AACC;AACC;AAAM;AAAsB;AAC7B;AACA;AACC;AAAM;AAAuE;AAC9E;AACA;AACC;AAAM;AAAa;AACpB;AACA;AACC;AAID;AACA;AACE;AAGF;AACA;AAIA;AAQA;AAGA;AAGI;;;;;AAlCG;AAAA;AAM4F;AAAA;AAMC;AAAA;AAIhD;AAAA;AAIjB;AAAA;AAQW;AAAA;AAGD;AAAA;;;;;;;;AAI9C;AAEC;AACE;AAAM;AAAmB;AAC3B;AACA;AACE;AAAO;AAAyF;AAClG;AACA;AACC;AAAkG;AAAA;AAAA;AAAA;AAAA,WAAsB,UAAtB,EAAsB;AAAA;AAAA;AAAA;AAAA,SAAtB;AAChG;AACF;AACD;AACD;;MAvFN;;;AAEa,YAAA+4E,YAAA,GAAe,EAAf;AAeb;;;;QA8EaC,wB;;;;;AA0CT,wCACqCp3E,IADrC,EAEYk2C,UAFZ,EAGW/1C,KAHX,EAIW0Y,OAJX,EAKWmtD,iBALX,EAMWx7B,sBANX,EAOW7kC,QAPX,EAOuC;AAAA;;AAAA;;;;AAGnC;AATiC,iBAAA3F,IAAA,GAAAA,IAAA;AACzB,iBAAAk2C,UAAA,GAAAA,UAAA;AACD,iBAAA/1C,KAAA,GAAAA,KAAA;AACA,iBAAA0Y,OAAA,GAAAA,OAAA;AACA,iBAAAmtD,iBAAA,GAAAA,iBAAA;AACA,iBAAAx7B,sBAAA,GAAAA,sBAAA;AACA,iBAAA7kC,QAAA,GAAAA,QAAA;AAhDJ,iBAAA0xE,cAAA,GAAiB,SAAKr3E,IAAL,CAAUtE,EAA3B;AAEA,iBAAA47E,IAAA,GAAO,IAAI,OAAApyF,eAAJ,CAAoB,YAAAqyF,cAApB,CAAP;AACA,iBAAAC,MAAA,GAAS,IAAI,OAAAtyF,eAAJ,CAA2B,YAAAuyF,YAA3B,CAAT;AAEA,iBAAAhuF,IAAA,GAAO,QAAA2C,QAAA,CAASwkB,GAAT,GAAetkB,OAAf,EAAP;AAIA,iBAAAorF,cAAA,GAAiB9qF,QAAQ,CAAC,CAAD,WAAC,SAAKoT,IAAN,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAE4C,QAAX,MAAmB,IAAnB,IAAmB,aAAnB,GAAmB,MAAnB,GAAmB,GAAEumB,eAAF,CAAkBj5B,QAAlB,EAApB,CAAR,GAA4D,IAA7E;AAOA,iBAAAkO,OAAA,GAAmB,IAAI,cAAAgQ,OAAJ,CAAY,EAAZ,CAAnB;AAEA,iBAAA45D,WAAA,GAAc,IAAI,OAAA9iF,eAAJ,CAAiDwG,SAAjD,CAAd;AACA,iBAAAw5E,SAAA,GAAqB,KAArB;AAKA,iBAAAyS,oBAAA,GAAgC,KAAhC,CAwBgC,CAjBvC;;AACO,iBAAAC,aAAA,GAAyB,IAAzB;AAGP,iBAAA9J,WAAA,GAAuB,IAAvB;AAGF,iBAAA+J,UAAA,GAAa,CAAb;AAUyC;AAItC;;;;uCAEqBjrE,K,EAAO;AAAA;;AAE3B;AACM,eAAKkrE,qBAAL,CAA2B,KAA3B,EAHqB,CAK3B;;AACM,eAAKtwF,YAAL,CACI,qBADJ,EAEI,KAAK2Y,KAAL,CAAW5F,IAAX,CAAgB,QAAA4H,MAAA,CAAO,cAAAkR,yBAAP,CAAhB,EAAmD3rB,SAAnD,CAA6D,UAACkQ,IAAD,EAAU;;;AACnE,gBAAIA,IAAI,CAACiH,OAAL,CAAaiN,MAAjB,EAAyB;AAErBc,mBAAK,CAACA,KAAN,GAAchV,IAAI,CAACiH,OAAL,CAAaiN,MAAb,CAAoB,CAApB,CAAd;AACA,sBAAI,CAACisE,gBAAL,GAAwBnrE,KAAxB;AAEA,sBAAI,CAACgrE,aAAL,GAAqB,IAArB;AAEA,sBAAI,CAACF,cAAL,GAAsB9qF,QAAQ,CAAC,QAAI,CAACmrF,gBAAL,CAAsBnrE,KAAtB,CAA4BhK,QAA5B,CAAqCumB,eAArC,CAAqDj5B,QAArD,EAAD,CAAR,GAA4E,IAAlG,CAPqB,CASjC;;AATiC,0CAU2D,QAAI,CAAC8nF,4BAAL,EAV3D;AAAA,kBAU1BC,aAV0B,yBAU1BA,aAV0B;AAAA,kBAUXC,cAVW,yBAUXA,cAVW;AAAA,kBAUKC,4BAVL,yBAUKA,4BAVL;AAAA,kBAUmCC,oBAVnC,yBAUmCA,oBAVnC;;AAWjC,sBAAI,CAACrrF,IAAL,GAAYqrF,oBAAZ,CAXiC,CAYrB;;AACA,kBAAIH,aAAa,KAAK,WAAtB,EAAmC;AAC/B,oBAAGC,cAAc,CAACvsF,MAAf,IAAyBwsF,4BAA4B,GAAG,EAAxD,IAA+DC,oBAAoB,IAAI,EAA1F,EAA+F;AAC3F,0BAAI,CAACC,UAAL,GAD2F,CAE3F;AACA;;;AACA,0BAAI,CAACC,sBAAL;AACH,iBALD,MAKO;AACH,0BAAI,CAACxK,WAAL,GAAmB,KAAnB;AACA,gCAAI,CAACyK,cAAL,MAAmB,IAAnB,IAAmB,aAAnB,GAAmB,MAAnB,GAAmB,GAAEvyF,WAAF,EAAnB;AACAV,+BAAa,CAAC,QAAI,CAACkzF,eAAN,CAAb;AACH;AAEJ,eAZD,MAYM;AACF,wBAAI,CAACH,UAAL,GADE,CAEF;AACA;;;AACA,wBAAI,CAACC,sBAAL;AACH,eA9BoB,CAgCjC;;;AACY,sBAAI,CAACG,6BAAL;AACH;AACJ,WApCD,CAFJ;AAyCP;AAEH;;;;;;;uDAImC;;;AAElC,cAAM7nE,GAAG,GAAQ,UAAA1d,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAjB,CAFkC,CAEI;AAEtC;;AACA,cAAMmQ,QAAQ,GAAG,KAAKu+E,gBAAL,CAAsBnrE,KAAtB,CAA4BhK,QAA5B,CAAqCpJ,QAArC,CAA8ClK,GAA9C,CAAkD,UAAAuC,CAAC;AAAA,mBAAI,IAAI,cAAAuc,OAAJ,CAAYvc,CAAZ,CAAJ;AAAA,WAAnD,CAAjB,CALkC,CAOlC;;AACA,cAAMqmF,cAAc,GAAG1+E,QAAQ,CAACnJ,MAAT,CAAgB,UAAA+N,OAAO;AAAA,mBAC3CwS,GAAG,CAACmS,WAAJ,CAAgB3kB,OAAO,CAAC/J,WAAR,CAAoBlB,YAApB,CAAiC,QAAjC,CAAhB,KACAyd,GAAG,CAACkS,YAAJ,CAAiB1kB,OAAO,CAAC9J,SAAR,CAAkBnB,YAAlB,CAA+B,QAA/B,CAAjB,CAF2C;AAAA,WAAvB,CAAvB,CARkC,CAalC;;AACA,cAAM8kF,aAAa,GAAG,KAAKj4E,IAAL,CAAU04E,eAAV,CAA0BC,UAA1B,CAAqCjsE,SAArC,CAA+C,KAAK2qE,cAApD,CAAtB,CAdkC,CAcyD;AAE3F;;AACA,cAAIc,4BAA4B,GAAG,CAAnC,CAjBkC,CAiBI;;AACtC,cAAIC,oBAAoB,GAAG,EAA3B,CAlBkC,CAkBH;AAE/B;;AACA,cAAGF,cAAc,CAACvsF,MAAlB,EAA0B;AACzB,gBAAMitF,OAAO,GAAQ,QAAAxsF,QAAA,CAASwkB,GAAT,EAArB,CADyB,CAEzB;;AACAunE,wCAA4B,GAAGpuF,IAAI,CAAC04B,GAAL,CAAS14B,IAAI,CAACg2B,KAAL,CAAW,CAACm4D,cAAc,CAAC,CAAD,CAAd,CAAkBj9E,SAAlB,GAA8B,IAA9B,GAAqC29E,OAAO,CAACC,EAA9C,IAAoD,KAA/D,CAAT,CAA/B,CAHyB,CAKzB;;AACA,gBAAMC,MAAM,GAAG,QAAA1sF,QAAA,CAASwkB,GAAT,GAAezR,GAAf,CAAmB,QAAnB,IAA+B,QAAAg4E,YAA/B,KAAgD,CAAhD,GAAoD,CAApD,GAAwD,CAAvE,CANyB,CAQzB;;AACA,gBAAM4B,oBAAoB,GAAQ,OAAAvvF,iBAAA,CAAkB,QAAA4C,QAAA,CAASwkB,GAAT,GAAe3mB,IAAf,CAAoB;AAAEC,qBAAO,EAAE4uF,MAAX;AAAmB39E,qBAAO,EAAC;AAA3B,aAApB,EAAoDqiC,OAApD,CAA4D,CAAD,WAAC,KAAKu6C,gBAAN,MAAsB,IAAtB,IAAsB,aAAtB,GAAsB,MAAtB,GAAsB,GAAEhrE,QAAvB,MAA+B,IAA/B,IAA+B,aAA/B,GAA+B,MAA/B,GAA+B,GAAE1e,QAA7F,CAAlB,EAA0H,QAAA8oF,YAA1H,CAAlC,CATyB,CAWzB;;AACA,gBAAM6B,uBAAuB,GAAG,CAAH,WAAG,KAAKjB,gBAAL,CAAsBnrE,KAAzB,MAA8B,IAA9B,IAA8B,aAA9B,GAA8B,MAA9B,GAA8B,GAAEhK,QAA7B,MAAqC,IAArC,IAAqC,aAArC,GAAqC,MAArC,GAAqC,GAAEpJ,QAAF,CAAWnJ,MAAX,CAAkB,UAAC8B,IAAD;AAAA,qBACtFA,IAAI,CAACoJ,WAAL,GAAmB,IAAnB,IAA2Bw9E,oBAAoB,CAACF,EADsC;AAAA,aAAlB,CAArE,CAZyB,CAgBzB;;AACA,gBAAGG,uBAAuB,CAACrtF,MAA3B,EAAmC;AAClC;AACA,kBAAMstF,sBAAsB,GAAGD,uBAAuB,CAAC,CAAD,CAAvB,CAA2Bz9E,WAA3B,GAAyC,IAAxE;AACA68E,kCAAoB,GAAGruF,IAAI,CAACY,KAAL,CAAW,CAACsuF,sBAAsB,GAAGL,OAAO,CAACC,EAAlC,KAAyC,OAAO,EAAhD,CAAX,CAAvB;AACA;AACD;;AAED,iBAAO;AACHZ,yBAAa,EAAEA,aADZ;AAEHC,0BAAc,EAAEA,cAFb;AAGHE,gCAAoB,EAAEA,oBAHnB;AAIHD,wCAA4B,EAAGA;AAJ5B,WAAP;AAOA;;;0CAE0B;AAAA;;AACrB;AACA,WAAC,KAAKN,UAAN,IAAoBjyF,UAAU,CAAC;AAAA,mBAAI,QAAI,CAACszF,SAAL,EAAJ;AAAA,WAAD,EAAuB,IAAvB,CAA9B;AACA,eAAKrB,UAAL;AACA,eAAKW,eAAL,GAAuBxpF,MAAM,CAAClJ,WAAP,CACnB,YAAM;AAAE,gBAAH,EAAG;;AAAA,0BAAI,CAACyyF,cAAL,MAAmB,IAAnB,IAAmB,aAAnB,GAAmB,MAAnB,GAAmB,GAAEvyF,WAAF,EAAnB;AAAoCJ,sBAAU,CAAC;AAAA,qBAAI,QAAI,CAACszF,SAAL,EAAJ;AAAA,aAAD,EAAuB,IAAvB,CAAV;AAAyC,WADlE,EAEf,OAAO,EAAP,GAAY,QAAA/B,YAFG,CAAvB;AAKH;;;oCAEkB;qBAAA,CACf;AACA;AACA;;;AACA,cAAM2B,MAAM,GAAG,QAAA1sF,QAAA,CAASwkB,GAAT,GAAezR,GAAf,CAAmB,QAAnB,IAA+B,QAAAg4E,YAA/B,KAAgD,CAAhD,GAAoD,CAApD,GAAwD,CAAvE;AACA,cAAMgC,UAAU,GAAG,KAAK,QAAA/sF,QAAA,CAASwkB,GAAT,GAAezR,GAAf,CAAmB,QAAnB,CAAxB;AACA,cAAIxV,KAAK,GAAO,OAAAH,iBAAA,CAAkB,QAAA4C,QAAA,CAASwkB,GAAT,GAAe3mB,IAAf,CAAoB;AAAEC,mBAAO,EAAE4uF,MAAX;AAAmB39E,mBAAO,EAAC;AAA3B,WAApB,EAAoDqiC,OAApD,CAA4D,CAAD,WAAC,KAAKu6C,gBAAN,MAAsB,IAAtB,IAAsB,aAAtB,GAAsB,MAAtB,GAAsB,GAAEhrE,QAAvB,MAA+B,IAA/B,IAA+B,aAA/B,GAA+B,MAA/B,GAA+B,GAAE1e,QAA7F,CAAlB,EAA0H,QAAA8oF,YAA1H,CAAhB;AACIxtF,eAAK,GAAGA,KAAK,CAACmE,cAAN,CAAqB,QAAA1B,QAAA,CAASgtF,WAA9B,CAAR;;AACA,cAAGzvF,KAAK,KAAK,KAAK4R,WAAlB,EAAgC;AAE5B,iBAAKA,WAAL,GAAmB5R,KAAnB,CAF4B,CAI5B;AACA;AACA;AACA;;AAEA,gBAAMmvF,OAAM,GAAG,QAAA1sF,QAAA,CAASwkB,GAAT,GAAezR,GAAf,CAAmB,QAAnB,IAA+B,QAAAg4E,YAA/B,KAAgD,CAAhD,GAAoD,CAApD,GAAwD,CAAvE;;AACA,gBAAMgC,WAAU,GAAG,KAAK,QAAA/sF,QAAA,CAASwkB,GAAT,GAAezR,GAAf,CAAmB,QAAnB,CAAxB;;AACA,iBAAKk6E,UAAL,CAAgBP,OAAhB;AAEH,WArBU,CAuBjB;;;AACA,eAAKR,sBAAL,GAxBiB,CA0BX;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACP;;;mCAEc;AAAA;;;;AACX,eAAKR,qBAAL,CAA2B,KAA3B;AAEA,eAAK93E,IAAL,CAAU04E,eAAV,CAA0BY,aAA1B,GAA0C,KAAKC,cAAL,CAAoBliB,IAApB,CAAyB,IAAzB,CAA1C;AACA,eAAK0gB,gBAAL,GAAwB,CAAH,KAAG,KAAK/3E,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAEyc,IAAnC;AACJ,eAAK67D,sBAAL;AACI,eAAKiB,cAAL,CAAoB,KAAKxB,gBAAzB,EANW,CAOf;AACI;;AAEA,eAAKvwF,YAAL,CACI,aADJ,EAEI,KAAK2Y,KAAL,CACKgC,MADL,CACY,OAAAC,iBADZ,EAEK7H,IAFL,CAEU,YAAA+H,IAAA,CAAK,CAAL,CAFV,EAGK5a,SAHL,CAGe,UAAC2a,IAAD,EAA4B;AACnC;AACA,oBAAI,CAAC0J,WAAL,GAAmB,IAAI,cAAAgS,IAAJ,CAAS1b,IAAT,CAAnB;AACH,WANL,CAFJ,EAVW,CAqBX;AACA;;AACA,eAAKrC,IAAL,CAAU04E,eAAV,CAA0Bc,eAA1B,GAA4C,IAA5C;AACH;AAED;;;;;;;;iDAKgC;;;AAEjC,cAAM5oE,GAAG,GAAQ,QAAAxkB,QAAA,CAASwkB,GAAT,EAAjB,CAFiC,CAIjC;;AAJiC,sCAK2D,KAAKonE,4BAAL,EAL3D;AAAA,cAK1BC,aAL0B,yBAK1BA,aAL0B;AAAA,cAKXC,cALW,yBAKXA,cALW;AAAA,cAKKC,4BALL,yBAKKA,4BALL;AAAA,cAKmCC,oBALnC,yBAKmCA,oBALnC,EAMjC;;;AACA,eAAKrrF,IAAL,GAAYqrF,oBAAZ,CAPiC,CASjC;;AACA,eAAKtK,WAAL,GAAmBqK,4BAA4B,GAAG,EAA/B,IAAsCC,oBAAoB,IAAI,EAAjF,CAViC,CAUmD;AAEpF;;AACA,cAAMU,MAAM,GAAGloE,GAAG,CAACzR,GAAJ,CAAQ,QAAR,IAAoB,QAAAg4E,YAApB,KAAqC,CAArC,GAAyC,CAAzC,GAA6C,CAA5D;AACA,cAAMsC,YAAY,GAAG7oE,GAAG,CAAC3mB,IAAJ,CAAS;AAAEC,mBAAO,EAAE4uF,MAAX;AAAmB39E,mBAAO,EAAE;AAA5B,WAAT,EAA0CqiC,OAA1C,CAAkD,CAAD,WAAC,KAAKu6C,gBAAN,MAAsB,IAAtB,IAAsB,aAAtB,GAAsB,MAAtB,GAAsB,GAAEhrE,QAAvB,MAA+B,IAA/B,IAA+B,aAA/B,GAA+B,MAA/B,GAA+B,GAAE1e,QAAnF,CAArB,CAdiC,CAgBjC;;AACA,cAAMqrF,QAAQ,GAAG,OAAAlwF,iBAAA,CAAkBiwF,YAAlB,EAAgC,QAAAtC,YAAhC,CAAjB;AACA,eAAK57E,WAAL,GAAmBm+E,QAAQ,CAAC5rF,cAAT,CAAwB,QAAA1B,QAAA,CAASgtF,WAAjC,CAAnB;AACA,eAAKO,YAAL,GAAoBD,QAAQ,CAACzvF,IAAT,CAAc;AAAEC,mBAAO,EAAE;AAAX,WAAd,EAA+B4D,cAA/B,CAA8C,QAAA1B,QAAA,CAASgtF,WAAvD,CAApB;AACA,eAAKQ,YAAL,GAAoBF,QAAQ,CAACzvF,IAAT,CAAc;AAAEC,mBAAO,EAAE;AAAX,WAAd,EAA+B4D,cAA/B,CAA8C,QAAA1B,QAAA,CAASgtF,WAAvD,CAApB;AACE;;;0CAEiB;AACd,eAAKf,UAAL;AACH;;;qCAEmB;;;AAChBlpF,iBAAO,CAACV,GAAR,CAAY,QAAArC,QAAA,CAASwkB,GAAT,GAAezR,GAAf,CAAmB,QAAnB,CAAZ;AACA,cAAM25E,MAAM,GAAG,QAAA1sF,QAAA,CAASwkB,GAAT,GAAe4sB,OAAf,CAAuB,CAAD,WAAC,KAAKu6C,gBAAN,MAAsB,IAAtB,IAAsB,aAAtB,GAAsB,MAAtB,GAAsB,GAAEhrE,QAAvB,MAA+B,IAA/B,IAA+B,aAA/B,GAA+B,MAA/B,GAA+B,GAAE1e,QAAxD,EAAkE8Q,GAAlE,CAAsE,QAAtE,IAAkF,QAAAg4E,YAAlF,KAAmG,CAAnG,GAAuG,CAAvG,GAA2G,CAA1H;AACA,cAAMgC,UAAU,GAAG,KAAK,QAAA/sF,QAAA,CAASwkB,GAAT,GAAezR,GAAf,CAAmB,QAAnB,CAAxB;AACA,eAAKk6E,UAAL,CAAgBP,MAAhB;AACH,S,CAGD;;;;qCAC+C;AAAA;;AAAA,cAA7BpjF,OAA6B,uEAAnB,CAAmB;AAAA,cAAhByjF,UAAgB,uEAAH,CAAG;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA,cAAIU,KAAK,GAAG,CAAZ;;AACA,cAAGA,KAAK,IAAI,CAAZ,EAAc;AACV,iBAAKtB,cAAL,GAAuB,OAAA/8D,QAAA,CAAS,IAAT,EAAe9zB,SAAf,CAAyB,UAAAT,CAAC,EAAI;;;AAEjD,kBAAM6yF,WAAW,GAAG,IAAIzwF,IAAJ,CAAS,QAAA+C,QAAA,CAASwkB,GAAT,GAAetkB,OAAf,EAAT,CAApB;AACA,kBAAMytF,OAAO,GAAG,IAAI1wF,IAAJ,CAAS,OAAAG,iBAAA,CAAkB,QAAA4C,QAAA,CAASwkB,GAAT,GAAe3mB,IAAf,CAAoB;AAACC,uBAAO,EAAEwL,OAAV;AAAmByF,uBAAO,EAAEg+E;AAA5B,eAApB,EAA6D37C,OAA7D,CAAqE,CAAD,WAAC,QAAI,CAACu6C,gBAAN,MAAsB,IAAtB,IAAsB,aAAtB,GAAsB,MAAtB,GAAsB,GAAEhrE,QAAvB,MAA+B,IAA/B,IAA+B,aAA/B,GAA+B,MAA/B,GAA+B,GAAE1e,QAAtG,CAAlB,EAAmI,QAAA8oF,YAAnI,EAAiJ7qF,OAAjJ,EAAT,CAAhB;AACA,kBAAM0tF,mBAAmB,GAAGjwF,IAAI,CAAC04B,GAAL,CAAS,CAACs3D,OAAO,CAAC93D,OAAR,KAAoB63D,WAAW,CAAC73D,OAAZ,EAArB,IAA8C,KAAvD,IAA+D,EAA3F;AACA,kBAAI43D,KAAK,GAAGG,mBAAZ,CALiD,CAKhB;;AAEjC,sBAAI,CAACpC,aAAL,GAAqB,IAArB;AACA,sBAAI,CAACqC,gBAAL,GAAwBlwF,IAAI,CAACY,KAAL,CAAWkvF,KAAK,GAAG,EAAnB,CAAxB;AACA,sBAAI,CAACK,gBAAL,GAAwBnwF,IAAI,CAACY,KAAL,CAAWkvF,KAAK,GAAG,EAAnB,CAAxB;AAEA,sBAAI,CAACI,gBAAL,GAAwB,QAAI,CAACA,gBAAL,GAAwB,EAAxB,GAA6B,MAAM,QAAI,CAACA,gBAAxC,GAA2D,QAAI,CAACA,gBAAxF;AACA,sBAAI,CAACC,gBAAL,GAAwB,QAAI,CAACA,gBAAL,GAAwB,EAAxB,GAA6B,MAAM,QAAI,CAACA,gBAAxC,GAA2D,QAAI,CAACA,gBAAxF;AAEA,gBAAEL,KAAF;;AAEA,kBAAIA,KAAK,IAAI,CAAb,EAAgB;AACZA,qBAAK,GAAG,CAAR;AACA,8BAAI,CAACtB,cAAL,MAAmB,IAAnB,IAAmB,aAAnB,GAAmB,MAAnB,GAAmB,GAAEvyF,WAAF,EAAnB,CAFY,CAGZ;;AACA,wBAAI,CAAC4xF,aAAL,GAAqB,KAArB;AACA,iBAAC,QAAI,CAACC,UAAN,IAAoB,QAAI,CAACsC,eAAL,EAApB;;AAEV,wBAAI,CAACh6E,KAAL,CAAWgC,MAAX,CAAkB,cAAA6O,gBAAlB,EAAoCzW,IAApC,CAAyC,YAAA+H,IAAA,CAAK,CAAL,CAAzC,EACE5a,SADF,CACY,UAACke,IAAD,EAAU;;;AACnB,sBAAMkzE,MAAM,GAAG,QAAA1sF,QAAA,CAASwkB,GAAT,GAAe4sB,OAAf,CAAuB,CAAD,WAAC,QAAI,CAACu6C,gBAAN,MAAsB,IAAtB,IAAsB,aAAtB,GAAsB,MAAtB,GAAsB,GAAEhrE,QAAvB,MAA+B,IAA/B,IAA+B,aAA/B,GAA+B,MAA/B,GAA+B,GAAE1e,QAAxD,EAAkE8Q,GAAlE,CAAsE,QAAtE,IAAkF,QAAAg4E,YAAlF,KAAmG,CAAnG,GAAuG,CAAvG,GAA2G,CAA1H;AACA,sBAAMgC,UAAU,GAAG,KAAK,QAAA/sF,QAAA,CAASwkB,GAAT,GAAe4sB,OAAf,CAAuB,CAAD,WAAC,QAAI,CAACu6C,gBAAN,MAAsB,IAAtB,IAAsB,aAAtB,GAAsB,MAAtB,GAAsB,GAAEhrE,QAAvB,MAA+B,IAA/B,IAA+B,aAA/B,GAA+B,MAA/B,GAA+B,GAAE1e,QAAxD,EAAkE8Q,GAAlE,CAAsE,QAAtE,CAAxB;AACAyG,sBAAI,CAAC,MAAD,CAAJ,GAAgB,OAAApc,iBAAA,CAAkB,QAAA4C,QAAA,CAASwkB,GAAT,GAAe4sB,OAAf,CAAuB,CAAD,WAAC,QAAI,CAACu6C,gBAAN,MAAsB,IAAtB,IAAsB,aAAtB,GAAsB,MAAtB,GAAsB,GAAEhrE,QAAvB,MAA+B,IAA/B,IAA+B,aAA/B,GAA+B,MAA/B,GAA+B,GAAE1e,QAAxD,EAAkEpE,IAAlE,CAAuE;AAAEC,2BAAO,EAAE4uF,MAAX;AAAmB39E,2BAAO,EAAC;AAA3B,mBAAvE,CAAlB,EAA0H,QAAAg8E,YAA1H,EAAwI7qF,OAAxI,EAAhB,EACAsZ,IAAI,CAACxb,MAAL,GAAc,OAAAD,mBAAA,CACZ,IAAI,UAAAwQ,MAAJ,CAAW;AAAElR,wBAAI,EAAE,QAAA2C,QAAA,CAASwkB,GAAT,GAAe3mB,IAAf,CAAoB;AAAEC,6BAAO,EAAE4uF,MAAX;AAAmB39E,6BAAO,EAAC;AAA3B,qBAApB,CAAR;AAA6D8V,+BAAW,EAAE,KAA1E;AAAiFC,+BAAW,EAAEtL,IAAI,CAACvX;AAAnG,mBAAX,CADY,EAEZ,QAAA8oF,YAFY,CADd;;AAKA,0BAAI,CAACh3E,KAAL,CAAWolE,QAAX,CAAoB,cAAA5nE,oBAAA,CAAqB;AAAEE,2BAAO,EAAE+H;AAAX,mBAArB,CAApB;;AAEA,0BAAI,CAACzF,KAAL,CAAWolE,QAAX,CAAoB,QAAAzzD,mBAAA,CAAoBjW,OAApB,CAA4B,cAAAgU,mBAAA,CAAoBjK,IAApB,CAA5B,CAApB;AAED,iBAbF;AAeO;AACJ,aAvCsB,CAAvB,CADU,CAwCP;AACN;AACJ;AAEH;;;;;;wDAGyC;qCAAA,CAEvC;;;AACI,cAAMgL,GAAG,GAAG,QAAAxkB,QAAA,CAASwkB,GAAT,EAAZ,CAHmC,CAKvC;;AACI,cAAMkoE,MAAM,GAAGloE,GAAG,CAACzR,GAAJ,CAAQ,QAAR,IAAoB,QAAAg4E,YAApB,KAAqC,CAArC,GAAyC,CAAzC,GAA6C,CAA5D,CANmC,CAQvC;;AACI,cAAMiD,aAAa,GAAQ,OAAA5wF,iBAAA,CACnBonB,GAAG,CAAC3mB,IAAJ,CAAS;AAAEC,mBAAO,EAAE4uF,MAAX;AAAmB39E,mBAAO,EAAC;AAA3B,WAAT,EACCqiC,OADD,CACS,CAAD,WAAC,KAAKu6C,gBAAN,MAAsB,IAAtB,IAAsB,aAAtB,GAAsB,MAAtB,GAAsB,GAAEhrE,QAAvB,MAA+B,IAA/B,IAA+B,aAA/B,GAA+B,MAA/B,GAA+B,GAAE1e,QAD1C,CADmB,EAEkC,QAAA8oF,YAFlC,CAA3B,CATmC,CAcrC;;AACE,cAAI,CAAJ,KAAI,KAAKY,gBAAL,MAAqB,IAArB,IAAqB,aAArB,GAAqB,MAArB,GAAqB,GAAEnrE,KAA3B,EAAkC;AACrC;AACO,gBAAMytE,cAAc,GAAG,wBAAKtC,gBAAL,MAAqB,IAArB,IAAqB,aAArB,GAAqB,MAArB,GAAqB,GAAEnrE,KAAvB,MAA4B,IAA5B,IAA4B,aAA5B,GAA4B,MAA5B,GAA4B,GAAEhK,QAA9B,MAAsC,IAAtC,IAAsC,aAAtC,GAAsC,MAAtC,GAAsC,GAAEpJ,QAAxC,KAAoD,EAA3E,CAF8B,CAIpC;;AACM,gBAAM8gF,UAAU,GAAGF,aAAa,CAACnwF,IAAd,CAAmB;AAAEC,qBAAO,EAAE;AAAX,aAAnB,EAAoC2uF,EAAvD,CAL8B,CAOpC;;AACA,gBAAMG,uBAAuB,GAAGqB,cAAc,CAAChqF,MAAf,CAAsB,UAAA8B,IAAI;AAAA,qBAAIA,IAAI,CAACoJ,WAAL,GAAmB,IAAnB,IAA2B++E,UAA/B;AAAA,aAA1B,CAAhC,CARoC,CAUpC;;AACA,gBAAGtB,uBAAuB,CAACrtF,MAAxB,GAAiC,CAApC,EAAuC;AACtC;AACA,kBAAM4uF,sBAAsB,GAAG,IAAIlxF,IAAJ,CAAS2vF,uBAAuB,CAAC,CAAD,CAAvB,CAA2Bz9E,WAA3B,GAAyC,IAAlD,CAA/B,CAFsC,CAItC;;AACA,kBAAMi/E,UAAU,GAAGD,sBAAsB,CAACt4D,OAAvB,KAAmCrR,GAAG,CAACtkB,OAAJ,EAAtD;AACA,mBAAKmuF,QAAL,GAAiBD,UAAjB,CANsC,CAOtC;;AACA,mBAAKE,WAAL,GAAmB3wF,IAAI,CAACY,KAAL,CAAW6vF,UAAU,IAAI,OAAO,EAAP,GAAY,EAAhB,CAArB,CAAnB;AACM,mBAAKG,aAAL,GAAqB5wF,IAAI,CAACY,KAAL,CAAY6vF,UAAU,IAAI,OAAO,EAAP,GAAY,EAAhB,CAAX,IAAmC,OAAO,EAA1C,CAAX,CAArB,CATgC,CAWtC;;AACM,mBAAK7C,oBAAL,GAA4B,CAAC1gC,KAAK,CAACujC,UAAD,CAAlC;AACN,aAbD,MAcK;AACJ,mBAAK7C,oBAAL,GAA4B,KAA5B;AACA;AACE;AAEJ,S,CAED;;;;gDACsD;AAAA,cAAzBzJ,OAAyB,uEAAN,IAAM;;;;AAClD,cAAMtgF,GAAG,GAAG,KAAK,EAAjB;AACA,cAAMm2B,IAAI,GAAGn2B,GAAG,GAAG,CAAnB;AACA,cAAMnE,IAAI,GAAG,CAAC,CAAD,KAAC,KAAK2U,OAAL,MAAY,IAAZ,IAAY,aAAZ,GAAY,MAAZ,GAAY,GAAE/J,WAAf,EAA4BwyB,KAA5B,EAAb;AACA,cAAM5P,UAAU,GAAGxtB,IAAI,CAAC0J,YAAL,CAAkB,KAAlB,EAAyB9I,QAAzB,CAAkC;AAAER,kBAAM,EAAE,CAAV;AAAaD,uBAAW,EAAE;AAA1B,WAAlC,CAAnB;AACA,cAAMukF,WAAW,GAAG1kF,IAAI,CAAC0J,YAAL,CAAkB,MAAlB,CAApB,CALkD,CAOlD;;AACA,cAAM0J,KAAK,GAAG;AACVzS,kBAAM,EAAE8jF,OAAO,GAAGC,WAAH,GAAiBl3D,UADtB;AAEVzsB,oBAAQ,EAAE0jF,OAAO,GAAGnqD,IAAH,GAAUn2B,GAFjB;AAGVoiB,qBAAS,EAAE,CAAF,KAAE,KAAKhQ,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAEtE,EAHZ;AAIVuU,oBAAQ,EAAE,CAAF,WAAE,KAAK7R,OAAP,MAAc,IAAd,IAAc,aAAd,GAAc,MAAd,GAAc,GAAEwO,KAAd,MAAmB,IAAnB,IAAmB,aAAnB,GAAmB,MAAnB,GAAmB,GAAEqD;AAJrB,WAAd;AAMA,eAAK9P,KAAL,CAAWolE,QAAX,CAAoB,QAAAhzD,eAAA,CAAgB1W,OAAhB,CAAwBgB,KAAxB,CAApB;AACH;;;qCAEmB;;;AAChB,cAAMyoE,KAAK,GAAG,KAAKpvB,UAAL,CAAgB5uD,aAAhB,CAA8B2N,aAA9B,CAA4C,wBAA5C,CAAd;AACAqwE,eAAK,CAAClvB,SAAN,CAAgBtpD,GAAhB,CAAoB,MAApB;AACA,eAAKkT,IAAL,CAAU04E,eAAV,CAA0Bc,eAA1B,GAA4C,KAA5C;AACA,eAAK3B,UAAL,GAAkB,CAAlB;AACA,eAAK/J,WAAL,GAAmB,KAAnB;AACJ,eAAK6J,oBAAL,GAA4B,KAA5B;AACI,qBAAKY,cAAL,MAAmB,IAAnB,IAAmB,aAAnB,GAAmB,MAAnB,GAAmB,GAAEvyF,WAAF,EAAnB,CAPgB,CAQhB;AACA;;AACAV,uBAAa,CAAC,KAAKkzF,eAAN,CAAb;AACH;;;2CAEyB;AACtB,cAAI,KAAKx4E,IAAL,CAAU04E,eAAV,CAA0BkC,YAA1B,IAA0C,KAAK7C,gBAAnD,EAAqE;AACjE,iBAAK/3E,IAAL,CAAU04E,eAAV,CAA0BkC,YAA1B,CAAuC,KAAK7C,gBAA5C;AACH;AACJ;;;+BAEa7tF,O,EAAiB;AAC3BA,iBAAO,GAAGH,IAAI,CAACg2B,KAAL,CAAW71B,OAAX,CAAV;AAD2B,sCAEC,KAAK6tF,gBAAL,CAAsBnrE,KAFvB;AAAA,cAEpB1b,OAFoB,yBAEpBA,OAFoB;AAAA,cAEX0R,QAFW,yBAEXA,QAFW;;AAG3B,cAAM1R,OAAO,KAAIA,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAE0tB,cAAb,CAAR,IAA0Chc,QAAQ,KAAIA,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAEgc,cAAd,CAAvD,EAAuF;AACnF,iBAAKi8D,gBAAL;AACH,WAFD,MAEO;AACH,iBAAKnT,WAAL,CAAiBx9E,OAAjB;AACH;AACJ;;;6CAE2BA,O,EAAO;;;AAC/B,cAAM88E,iBAAiB,GAAG,KAAKgB,WAAL,CAAiBr7E,KAA3C;AACA,cAAMk/C,eAAe,GACjB,CAAAm7B,iBAAiB,SAAjB,IAAAA,iBAAiB,WAAjB,GAAiB,MAAjB,GAAAA,iBAAiB,CAAEtoD,KAAnB,MAAwB,MAAIsoD,iBAAiB,CAACtoD,KAAtB,MAA2B,IAA3B,IAA2B,aAA3B,GAA2B,MAA3B,GAA2B,GAAE/yB,MAArD,wBACSq7E,iBAAiB,CAACpB,YAAlB,CAA+Bh5D,KAA/B,CAAqC/R,KAD9C,EACsD,GADtD,IAEM,EAHV,CAF+B,CAKjB;;AACd,cAAMujB,SAAS,GAAG,KAAKhgB,OAAL,CAAaggB,SAA/B;AACA,cAAMa,OAAO,GAAG,KAAK7gB,OAAL,CAAa6gB,OAA7B;AACA,cAAM1jB,WAAW,GAAG,OAAA/R,iBAAA,CAAkB,QAAA4C,QAAA,CAASwkB,GAAT,EAAlB,EAAkC,EAAlC,EAAsCtkB,OAAtC,KAAkD,IAAtE;AACA,cAAM2O,SAAS,GACX,OAAAzR,iBAAA,CAAkB,QAAA4C,QAAA,CAASwkB,GAAT,EAAlB,EAAkC,EAAlC,EAAsC3mB,IAAtC,CAA2C;AAAEC,mBAAO,EAAEA;AAAX,WAA3C,EAAiEoC,OAAjE,KAA6E,IADjF;AAGA,cAAM+Y,QAAQ,GAAG;AACbuH,iBAAK,EAAE;AAAElR,gBAAE,EAAE,KAAK27E;AAAX,aADM;AAEbp3D,mBAAO,EAAE,KAFI;AAGb7B,qBAAS,EAATA,SAHa;AAIb;AACAD,wBAAY,EAAE,KAAK45D,gBAAL,CAAsBnrE,KAAtB,CAA4B1b,OAA5B,CAAoC0xB,QAApC,KAAiD,IAAjD,GAAuD,UAAvD,GAAoE,UALrE;AAMbvC,oBAAQ,EAAE,EANG;AAOb9kB,uBAAW,EAAXA,WAPa;AAQbN,qBAAS,EAATA,SARa;AASb5M,oBAAQ,EAAE24E,iBAAiB,SAAjB,IAAAA,iBAAiB,WAAjB,GAAiB,MAAjB,GAAAA,iBAAiB,CAAE34E,QAThB;AAUbswB,2BAAe,sBACVqoD,iBAAiB,SAAjB,IAAAA,iBAAiB,WAAjB,GAAiB,MAAjB,GAAAA,iBAAiB,CAAEpB,YAAnB,CAAgCh5D,KAAhC,CAAsC/R,KAD5B,EACoCmsE,iBAAiB,SAAjB,IAAAA,iBAAiB,WAAjB,GAAiB,MAAjB,GAAAA,iBAAiB,CAAErzD,IADvD,CAVF;AAabkL,8BAAkB,sBACb,KAAK7e,IAAL,CAAUnF,KADG,EACK,CADL,CAbL;AAgBboT,wBAAY,EAAE,KAhBD;AAiBb0X,uBAAW,EAAE,KAjBA;AAkBbjH,iBAAK,EAAE,KAAKtgB,OAAL,CAAasgB,KAlBP;AAmBbL,qBAAS,EAAE,KAAKtS,WAnBH;AAoBbuS,mBAAO,EAAE,KAAKvS,WApBD;AAqBb0Q,gBAAI,EAAE,KAAKs7D,gBAAL,CAAsBnrE,KArBf;AAsBb2J,iBAAK,EAAE,gBAtBM;AAuBbpS,iBAAK,EAAE0nC,eAvBM;AAwBbr0B,qBAAS,EAAEq0B,eAxBE;AAyBb5sB,mBAAO,EAAPA;AAzBa,WAAjB;AA2BA9vB,iBAAO,CAACV,GAAR,CAAY,IAAI,cAAA2f,OAAJ,CAAY/I,QAAZ,CAAZ;AACA,iBAAO,IAAI,cAAA+I,OAAJ,CAAY/I,QAAZ,CAAP;AACH,S,CAED;;;;oCACmBnb,O,EAAS;AAAA;;AACxB,eAAKwY,OAAL,GAAe,IAAf;AACA,eAAKtE,OAAL,GAAe,KAAKynE,oBAAL,CAA0B37E,OAA1B,CAAf,CAFwB,CAGxB;;AACA,eAAKkU,OAAL,CAAa8P,MAAb,GAAsB,cAAAqV,cAAA,CAAe0nB,QAArC;AACA,wBAAA7zB,eAAA,CAAgB,KAAKyB,OAArB,EAA8B,KAAKza,OAAnC,EAA4C+H,IAA5C,CACI,UAACyH,QAAD,EAAuB;AACnB,gBAAI,CAACA,QAAL,EAAe;AACX;AACA;AACA;AACA,sBAAI,CAACxP,OAAL,CAAa8P,MAAb,GAAsB,cAAAqV,cAAA,CAAewiD,WAArC;AACA;AACH;;AAED,oBAAI,CAACC,iBAAL,CAAuBxlC,IAAvB,CAA4B,QAAI,CAACpiC,OAAjC,EAA0C+H,IAA1C,CACI,UAAC6R,GAAD,EAAS;AACL,sBAAI,CAACtV,OAAL,GAAe,KAAf;AACA,sBAAI,CAAC7D,OAAL,GAAe,IAAf;AACA,sBAAI,CAACqmE,SAAL,GAAiB,IAAjB;;AACA,sBAAI,CAAC16B,sBAAL,CAA4B93C,OAA5B,CAAoCslB,GAApC,EAJK,CAML;AACA;;;AACA,sBAAI,CAAC5Z,OAAL,GAAe,IAAI,cAAAgQ,OAAJ,CAAY,MAAD,OAAC,CAAD,kBAAM4J,GAAG,CAACnS,MAAJ,EAAN,CAAC,EAAiB;AAAE4W,oBAAI,EAAE,QAAI,CAACre,OAAL,CAAaqe;AAArB,eAAjB,CAAZ,CAAf,CARK,CASL;;AACA,sBAAI,CAACtc,KAAL,CAAWolE,QAAX,CAAoB,cAAAznE,oBAAA,EAApB,EAVK,CAYL;;;AACA,sBAAI,CAAC6H,QAAL,CAAcvF,SAAd,CAAwB+nE,KAAxB,CAA8B,QAA9B,EAAwC;AACpC/8C,0BAAU,EAAEpT,GAAG,CAACtc,EADoB;AAEpC+c,sBAAM,EAAE,QAAI,CAACra,OAAL,CAAaqe,IAAb,CAAkB1P,QAAlB,CAA2BvnB,IAFC;AAGpCi3B,oBAAI,EAAE,QAAI,CAACre,OAAL,CAAasuC,eAHiB;AAIpC70B,0BAAU,EAAEG,GAAG,CAAC3jB,WAAJ,CAAgBjB,EAJQ;AAKpC0kB,wBAAQ,EAAEE,GAAG,CAAC1jB,SAAJ,CAAclB,EALY;AAMpCitB,wBAAQ,EAAE,CAAC,CAACrI,GAAG,CAACqI,QAAJ,CAAa10B,MANW;AAOpCmzB,yBAAS,EAAE;AAPyB,eAAxC;;AASA,sBAAI,CAAC9e,IAAL,CAAU04E,eAAV,CAA0BoC,cAA1B,CAAyC,QAAI,CAAC18E,OAA9C;AACH,aAxBL,EAyBI,UAACmJ,GAAD,EAAS;AACL,sBAAI,CAAC7E,OAAL,GAAe,KAAf;AACA,sBAAI,CAACwiE,SAAL,GAAiB,KAAjB;;AACA,kBAAI39D,GAAG,CAAC2G,MAAJ,KAAe,GAAnB,EAAwB;AACpB;AACA,wBAAI,CAAC9P,OAAL,CAAa8P,MAAb,GAAsB,cAAAqV,cAAA,CAAewiD,WAArC;;AACA,wBAAI,CAACv7B,sBAAL,CAA4B93C,OAA5B,CAAoC,QAAI,CAAC0L,OAAzC;;AACA,wBAAI,CAAC8mE,SAAL,GAAiB,IAAjB;AACA,wBAAI,CAACrmE,OAAL,GAAe,KAAf;AACH,eAND,MAMO;AACH1P,uBAAO,CAACV,GAAR,CAAY8Y,GAAZ;AACH;AACJ,aArCL;AAuCH,WAjDL,EAkDI,UAACA,GAAD,EAAS;AACL;AACA,oBAAI,CAAC7E,OAAL,GAAe,KAAf;;AACA,oBAAI,CAACta,OAAL,CACI,OADJ,EAEI,YAAM;AACF,sBAAI,CAACgW,OAAL,CAAa8P,MAAb,GAAsB,cAAAqV,cAAA,CAAewiD,WAArC;;AACA,sBAAI,CAACv7B,sBAAL,CAA4B93C,OAA5B,CAAoC,QAAI,CAAC0L,OAAzC;;AACA,sBAAI,CAAC8mE,SAAL,GAAiB,IAAjB;AACA,sBAAI,CAACrmE,OAAL,GAAe,KAAf;AACH,aAPL,EAQI,GARJ;AAUH,WA/DL;AAiEH;;;;MA/hByC,OAAA3Y,a;;AA3E9C;;;uBA2EakxF,wB,EAAwB,qBA2CrB,sBAAA2D,gBA3CqB,C,EA2CL,mC,EAAA,8B,EAAA,sC,EAAA,wC,EAAA,4C,EAAA,2C;AAAA,K;;;YA3CnB3D,wB;AAAwB,uC;AAAA,+C;AAAA,e;AAAA,a;AAAA,+zC;AAAA;AAAA;AAxE7B;AACE;AAEE;AACL;AACA;AACO;AACE;AAAwC;AAAA,mBAAS,IAAA7I,UAAA,EAAT;AAAqB,WAArB,EAAsB,UAAtB,EAAsB;AAAA,mBAAa,IAAAA,UAAA,EAAb;AAAyB,WAA/C;AAAxC;AACF;AACF;AAEN;AAwCA;AAcI;AACA;AACF;;;;AA/DI;AAAA;AACC;AAAA;AAMF;AAAA;AAwCA;AAAA;;;;;;;;;2BAqBE6I,wB,EAAwB;cA3EpC,OAAA7pC,SA2EoC;eA3E1B;AACPlnD,kBAAQ,EAAE,kBADH;AAEPw0D,kBAAQ,qyHAFD;AAwEPpN,mBAAS,EAAE,CAAC,oCAAD,CAxEJ;AAyEPga,uBAAa,EAAE,OAAAC,iBAAA,CAAkBszB;AAzE1B,S;AA2E0B,Q;;;;kBA2C5B,OAAA5gD,M;mBAAO,sBAAA2gD,gB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpKhB;AAAA;AAAA;;AAEa,YAAAxD,cAAA,GAAiB,CAAjB;AACA,YAAA0D,cAAA,GAAiB,EAAjB;AACA,YAAAxD,YAAA,GAAsB;AAAExwF,OAAC,EAAE,GAAL;AAAUC,OAAC,EAAE;AAAb,KAAtB;AAEA,YAAAiwF,YAAA,GAAe,EAAf;;AAEb,QAAM+D,uBAAuB,GAAG,SAA1BA,uBAA0B,CAAChtE,MAAD,EAAiC;AAC7D,cAAQA,MAAR;AACI,aAAK;AAAL;AAAA;AACI,iBAAO,cAAP;;AACJ,aAAK;AAAL;AAAA;AACI,iBAAO,sBAAP;;AACJ,aAAK;AAAL;AAAA;AACI,iBAAO,QAAP;;AACJ,aAAK;AAAL;AAAA;AACA;AACI,iBAAO,WAAP;AATR;AAWH,KAZD;;AAcA,QAAMitE,sBAAsB,GAAG,SAAzBA,sBAAyB,CAACjtE,MAAD;AAAA,aAA0B;AACrDvhB,aAAK,EAAEuhB,MAD8C;AAErDxY,eAAO,EAAEwlF,uBAAuB,CAAChtE,MAAD;AAFqB,OAA1B;AAAA,KAA/B;;AAKa,YAAAktE,aAAA,GAAgB;AAAA,aAA2B,C;;AAAA,Q;;AAAA,Q;;AAAA,Q;;AAAA,QAKtD9rF,GALsD,CAKlD6rF,sBALkD,CAA3B;AAAA,KAAhB;;AAQA,YAAAE,sBAAA,GAAyB,CAClC,2DADkC,EAElC,wDAFkC,EAGlC,8BAHkC,EAIlC,uEAJkC,CAAzB;AAOA,YAAAC,yBAAA,GAA4B,gFAA5B;;AAEA,YAAAC,wBAAA,GAA2B,UACpC3uE,KADoC,EAEpCsB,MAFoC,EAGpCstE,cAHoC,EAGR;AAC5B,UAAM9/E,EAAE,GACJ,UAAGkR,KAAK,CAACskB,MAAT,EAAkBrkC,OAAlB,CAA0B,MAA1B,IAAoC,CAApC,kBACc+f,KAAK,CAACskB,MADpB,eAEMtkB,KAAK,CAACskB,MAHhB;AAIA,aACI;AACIx1B,UAAE,EAAFA,EADJ;AAEI+/E,cAAM,EAAE;AACJp7C,cAAI,EAAEm7C,cAAc,iBAAUttE,MAAV,EAAd,IAAqC,MADvC;AAEJ9pB,iBAAO,EAAE;AAFL;AAFZ,OADJ;AAQH,KAhBY;AAkBb;;;;;;;;;AAOa,YAAAs3F,4BAAA,GAA+B,UACxC9uE,KADwC,EAExC+uE,UAFwC,EAGxCC,UAHwC,EAIxCC,UAJwC,EAKxB;AAChB,UAAMngF,EAAE,GACJ,UAAGkR,KAAK,CAACskB,MAAT,EAAkBrkC,OAAlB,CAA0B,MAA1B,IAAoC,CAApC,kBACc+f,KAAK,CAACskB,MADpB,eAEMtkB,KAAK,CAACskB,MAHhB;AAIA,UAAM4qD,SAAS,GAAkB,EAAjC;AACAA,eAAS,CAACxqF,IAAV,CAAe;AACXoK,UAAE,EAAFA,EADW;AAEXvE,aAAK,EAAE,YAFI;AAGXq1D,gBAAQ,EAAEmvB;AAHC,OAAf;AAKAG,eAAS,CAACxqF,IAAV,CAAe;AACXoK,UAAE,EAAFA,EADW;AAEXvE,aAAK,EAAE,YAFI;AAGXq1D,gBAAQ,EAAEovB;AAHC,OAAf;;AAKA,UAAIhvE,KAAK,CAACgB,QAAV,EAAoB;AAChBkuE,iBAAS,CAACxqF,IAAV,CAAe;AACXoK,YAAE,EAAFA,EADW;AAEXvE,eAAK,EAAE,OAFI;AAGXq1D,kBAAQ,EAAEqvB;AAHC,SAAf;AAKAC,iBAAS,CAACxqF,IAAV,CAAe;AACXoK,YAAE,EAAFA,EADW;AAEXvE,eAAK,EAAE,UAFI;AAGXq1D,kBAAQ,EAAEqvB;AAHC,SAAf;AAKH;;AACD,aAAOC,SAAP;AACH,KAlCY;;AAqCA,YAAAC,iBAAA,GAAoB,UAACnvE,KAAD;AAAA,aAA+B;AAC5DlR,UAAE,iBAAUkR,KAAK,CAACskB,MAAhB,YAD0D;AAE5D8qD,mBAAW,EAAE,IAF+C;AAG5Dz6E,eAAO,EAAE,8BAAA61E,wBAHmD;AAI5Dp3E,YAAI,EAAE,MAAF,OAAE,CAAF,EAAE,EACC4M,KADD;AAJsD,OAA/B;AAAA,KAApB;;AASA,YAAAqvE,gBAAA,GAAmB,UAACx/D,IAAD,EAA6Bi8D,eAA7B;AAAA,aAAoE;AAChGh9E,UAAE,iBAAU+gB,IAAI,CAAC7P,KAAL,CAAWskB,MAArB,YAD8F;AAEhG8qD,mBAAW,EAAE,IAFmF;AAGhGz6E,eAAO,EAAE,8BAAA61E,wBAHuF;AAIhGp3E,YAAI,EAAE,MAAF,OAAE,CAAF,kBACGyc,IAAI,CAAC7P,KADR,CAAE,EACW;AACb8rE,yBAAe,EAAfA,eADa;AAEbj8D,cAAI,EAAJA;AAFa,SADX;AAJ0F,OAApE;AAAA,KAAnB,C,CAWb;;;AACa,YAAAy/D,eAAA,GAAkB,6CAAlB;;;;;;;;;;;;;;;;;;;;AC3Ib;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;AAEa,YAAAC,gBAAA,GAAmB,CAC5B,SAAAz3F,YAD4B,EAE5B,SAAAm3D,eAF4B,EAG5B,sBAAAugC,aAH4B,EAI5B,SAAA//B,eAJ4B,EAK5B,KAAAzK,QAL4B,EAM5B,SAAAmK,eAN4B,EAO5B,aAAA2gB,SAP4B,CAAnB;AAUA,YAAA2f,qBAAA,GAAwB,CACjC,yBAAA5M,oBADiC,EAEjC,8BAAA2H,wBAFiC,CAAxB;;QAoBAjG,oB;;;;AAXb;;YAWaA;;;;yBAAAA,oB;AAAoB,O;AAAA,mCAHtB,QAAAgL,gBAGsB;;;;+EAApBhL,oB,EAAoB;AAAA,uBAnB7B,yBAAA1B,oBAmB6B,EAlB7B,8BAAA2H,wBAkB6B;AAlBL,kBAXxB,SAAA1yF,YAWwB,EAVxB,SAAAm3D,eAUwB,EATxB,sBAAAugC,aASwB,EARxB,SAAA//B,eAQwB,EAPxB,KAAAzK,QAOwB,EANxB,SAAAmK,eAMwB,EALxB,aAAA2gB,SAKwB,CAkBK;AAvBpB,kBAIT,yBAAA+S,oBAJS,EAKT,8BAAA2H,wBALS;AAuBoB,O;AAlBL,K;;;;;2BAkBfjG,oB,EAAoB;cAXhC,OAAAxsF,QAWgC;eAXvB;AACN6B,sBAAY,qBACL,QAAA61F,qBADK,CADN;AAIN51F,iBAAO,qBACA,QAAA41F,qBADA,CAJD;AAONz3F,iBAAO,qBACA,QAAAu3F,gBADA;AAPD,S;AAWuB,Q;;;;;;;;;;;;;;;;;;;;;;ACzCjC;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAyBA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAUA;AAAA;AAAA;;AAQA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClCQ;AAOI;AAAA;AAAA;AAAA,uCAAwB,eAAxB;AAAuC,SAAvC;AAEA;AACJ;;;;;;;;AAnCJ;AACI;AACI;AAEI;AAAA;AAAA;AAAA;AAAA;AAFJ;AAKA;AACI;AAAA;AAAA;AAAA;AAAA,WAAwB,cAAxB,EAAwB;AAAA;AAAA;AAAA;AAAA,SAAxB,EAAwB,cAAxB,EAAwB;AAAA;AAAA;AAAA;AAAA,SAAxB;AAGH;AACD;AAEI;AAAA;AAAA;AAAA,iBAAc,QAAA7E,IAAA,aAAd;AAA+B,SAA/B,EAAgC,cAAhC,EAAgC;AAAA;AAAA;AAAA,iBAEhB,QAAAE,MAAA,aAFgB;AAEG,SAFnC;;;;;;;;AASJ;AACJ;AACA;AAWJ;;;;;;;AAnC6B;AAAA;AAYjB;AAAA,kEAAqB,QAArB,EAAqB,oCAArB,EAAqB,KAArB,EAAqB,oCAArB,EAAqB,KAArB,EAAqB,uCAArB,EAAqB,WAArB,EAAqB,uCAArB,EAAqB,UAArB,EAAqB,uCAArB,EAAqB,OAArB,EAAqB,SAArB;AAYA;AAAA;;;;;;;;AAYZ;AACI;AACI;AACI;AACI;AAAK;AAAiB;AACtB;AACI;AACI;AACA;AAAK;AAAS;AAClB;AACA;AACI;AAAK;AAAiB;AACtB;AAAK;AAA6F;AAClG;AAAK;AAA0E;AAC/E;AAAK;AAAmF;AACxF;AAAK;AAAoF;AACzF;AAAK;AAAsC;AAC3C;AAAK;AAAyC;AAClD;AACJ;AACJ;AACJ;AACA;AACI;AACA;AAAK;AAAgC;AACrC;AAAK;AAAqC;AAC1C;AAAK;AAAoG;AACzG;AAAK;AAA0D;AAC/D;AAAK;AAAuD;AAChE;AACJ;AACA;AACA;AACI;AACI;AAAA;AAAA;AAAA,wCAAwB,OAAxB;AAA+B,SAA/B;AAOA;AACJ;AACJ;AACJ;;;;;AAhC6B;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAOZ;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;;;;QDMR/H,oB;;;;;AA+CT,oCACYtvE,KADZ,EAEWknE,MAFX,EAGY3J,cAHZ,EAIYa,MAJZ,EAKYj7D,KALZ,EAMWqC,QANX,EAOY7C,QAPZ,EAO8B;AAAA;;AAAA;;AAE1B;AARQ,iBAAA3C,KAAA,GAAAA,KAAA;AACD,iBAAAknE,MAAA,GAAAA,MAAA;AACC,iBAAA3J,cAAA,GAAAA,cAAA;AACA,iBAAAa,MAAA,GAAAA,MAAA;AACA,iBAAAj7D,KAAA,GAAAA,KAAA;AACD,iBAAAqC,QAAA,GAAAA,QAAA;AACC,iBAAA7C,QAAA,GAAAA,QAAA;AApDL,iBAAAw5E,UAAA,GAAsB,IAAtB;AAEA,iBAAAhF,IAAA,GAAO,IAAI,OAAApyF,eAAJ,CAAoB,kBAAAqyF,cAApB,CAAP;AAEA,iBAAAC,MAAA,GAAS,IAAI,OAAAtyF,eAAJ,CAA2B,kBAAAuyF,YAA3B,CAAT;AACA,iBAAAqE,SAAA,GAAY,IAAI,OAAA52F,eAAJ,CAAmC,EAAnC,CAAZ;AAEA,iBAAAq3F,eAAA,GAAkB,IAAI,OAAAr3F,eAAJ,CAA4CwG,SAA5C,CAAlB;AACA,iBAAAuvC,QAAA,GAAW,OAAAzhB,aAAA,CAAc,CAAC,SAAK+iE,eAAN,CAAd,EAAsChiF,IAAtC,CACd,YAAAjL,GAAA,CAAI,UAAC7H,KAAD;AAAA,iBAAWA,KAAK,CAAC4I,MAAN,CAAa,UAACvI,CAAD;AAAA,mBAAO,CAAC,CAACA,CAAT;AAAA,WAAb,CAAX;AAAA,SAAJ,CADc,CAAX;AAIA,iBAAAsjF,WAAA,GAAc,IAAI,OAAAlmF,eAAJ,CAAsDwG,SAAtD,CAAd;AAEA,iBAAA8wF,eAAA,GAAkB,IAAI,OAAAt3F,eAAJ,CAAgC,EAAhC,CAAlB;AACA,iBAAAu3F,YAAA,GAAe,IAAI,OAAAv3F,eAAJ,CAA6B,EAA7B,CAAf;AACA,iBAAAw3F,cAAA,GAAiB,IAAI,OAAAx3F,eAAJ,CAA0CwG,SAA1C,CAAjB;AACA,iBAAAixF,WAAA,GAAc,IAAI,OAAAz3F,eAAJ,CAA+CwG,SAA/C,CAAd;AACA,iBAAAkxF,WAAA,GAAc,IAAI,OAAA13F,eAAJ,CAAuCwG,SAAvC,CAAd;AAEP;;AACO,iBAAAmxF,SAAA,GAAY,IAAI,OAAA33F,eAAJ,CAAuD,EAAvD,CAAZ;AAEA,iBAAAgmF,MAAA,GAAS,SAAKyR,WAAL,CAAiBpiF,IAAjB,CAAsB,YAAAjL,GAAA,CAAI,UAACwlB,KAAD,EAAW;AAAD;;AAAA,uBAACA,KAAK,SAAL,IAAAA,KAAK,WAAL,GAAK,MAAL,GAAAA,KAAK,CAAEqf,OAAR,MAAe,IAAf,IAAe,aAAf,GAAe,EAAf,GAAmB,EAAnB;AAAqB,SAAnC,CAAtB,CAAT;AAEA,iBAAA2oD,gBAAA,GAAmB,IAAI,OAAA53F,eAAJ,CAAyC,EAAzC,CAAnB;AACA,iBAAA63F,oBAAA,GAAuB,IAAI,OAAA73F,eAAJ,CAAyC,EAAzC,CAAvB;AACA,iBAAA83F,gBAAA,GAAmB,IAAI,OAAA93F,eAAJ,CAAyC,EAAzC,CAAnB;AAEA,iBAAA+3F,oBAAA,GAAuB,OAAAzjE,aAAA,CAAc,CAAC,SAAKkjE,cAAN,EAAsB,SAAKI,gBAA3B,CAAd,EAA4DviF,IAA5D,CAC1B,YAAAjL,GAAA,CAAI;AAAA;AAAA,cAAEyd,QAAF;AAAA,cAAYiD,SAAZ;;AAAA,iBAA2BA,SAAS,CAAC/iB,IAAV,CAAe,UAACsS,CAAD;AAAA,mBAAOA,CAAC,CAAC5S,KAAF,MAAYogB,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAErR,EAAtB,CAAP;AAAA,WAAf,CAA3B;AAAA,SAAJ,CAD0B,CAAvB;AAIA,iBAAAwhF,iBAAA,GAAoB,SAAKP,WAAL,CAAiBpiF,IAAjB,CAAsB,YAAAjL,GAAA,CAAI,cAAAulB,wBAAJ,CAAtB,CAApB;AACA,iBAAAsoE,iBAAA,GAAoB,SAAKP,WAAL,CAAiBriF,IAAjB,CAAsB,YAAAjL,GAAA,CAAI,QAAAmyD,qBAAJ,CAAtB,CAApB;AACA,iBAAA27B,eAAA,GAAkB,IAAI,OAAAl4F,eAAJ,CAAiDwG,SAAjD,CAAlB;AAMA,iBAAA2xF,gBAAA,GAAmB,KAAnB;AAmTA,iBAAA7D,eAAA,GAAmB,KAAnB;;AAkIA,iBAAAsB,cAAA,GAAiB,UAAC9S,WAAD,EAAqB;AACzC,mBAAKqV,gBAAL,GAAwB,IAAxB;AACA,mBAAKrV,WAAL,GAAmBA,WAAnB;AACH,SAHM;;AAvaH,iBAAKnqE,OAAL,GAAeiF,QAAQ,CAACw6E,QAAT,EAAf;AACA,iBAAKz/E,OAAL,CAAa0/E,QAAb,GAAwB,KAAxB;AAJ0B;AAK7B;;;;oCAEkBp2F,O,EAAsB;AACrC,gBAAM,IAAItB,KAAJ,CAAU,yBAAV,CAAN;AACH;;;mCAEc;AAAA;;iBAAA,CACX;;;AACA,eAAKsa,KAAL,CAAWolE,QAAX,CAAoB,cAAArnE,gBAAA,EAApB;AAEA,cAAMs/E,SAAS,GAAG;AAAE7wF,iBAAK,EAAE,CAAF,KAAE,KAAKkR,OAAL,MAAY,IAAZ,IAAY,aAAZ,GAAY,MAAZ,GAAY,GAAEA,OAAvB;AAAgCnI,mBAAO,EAAE;AAAzC,WAAlB;AACA,eAAKmI,OAAL,CAAakP,QAAb,CAAsBpgB,KAAtB,GAA8B,KAAKkR,OAAL,CAAakP,QAAb,CAAsB,CAAtB,EAAyBrR,EAAvD;AAEA,eAAKlU,YAAL,CACI,aADJ,EAEI,KAAK2Y,KAAL,CACKgC,MADL,CACY,OAAAC,iBADZ,EAEK7H,IAFL,CAEU,YAAA+H,IAAA,CAAK,CAAL,CAFV,EAGK5a,SAHL,CAGe,UAAC2a,IAAD,EAA4B;AACnC;AACA,oBAAI,CAAC0J,WAAL,GAAmB,IAAI,cAAAgS,IAAJ,CAAS1b,IAAT,CAAnB;AACA,oBAAI,CAACo7E,cAAL,GAAsB,QAAI,CAAC1xE,WAAL,CAAiBlR,KAAjB,KAA2B,kBAAAqhF,eAAjD;AACH,WAPL,CAFJ,EAPW,CAmBX;;AACA,eAAK10F,YAAL,CACI,YADJ,EAEI,KAAK2Y,KAAL,CACK5F,IADL,CACU,QAAA4H,MAAA,CAAO,cAAA6O,gBAAP,CADV,EACoC,YAAAq9B,oBAAA,EADpC,EAEK3mD,SAFL,CAEe,UAACkQ,IAAD,EAAuC;AAC9C,gBAAIA,IAAJ,EAAU;AACNA,kBAAI,CAACpN,QAAL,GAAgB,EAAhB;;AACA,sBAAI,CAAC4yF,eAAL,CAAqBxlF,IAArB,CAA0BA,IAA1B,EAFM,CAE2B;;AACpC;AACJ,WAPL,CAFJ;AAYA,eAAKpQ,YAAL,CACI,kBADJ,EAEI,KAAK2Y,KAAL,CAAW5F,IAAX,CAAgB,QAAA4H,MAAA,CAAO,cAAAqP,sBAAP,CAAhB,EAAgD9pB,SAAhD,CAA0D,UAACkQ,IAAD,EAAU;AAChE,oBAAI,CAACklF,gBAAL,CAAsBllF,IAAtB,CAA2BA,IAA3B,EADgE,CAEhE;;;AACA,gBAAM8lF,IAAI,GAAG,QAAb;AACA93F,sBAAU,CAAC,YAAM;AACb83F,kBAAI,CAACC,oBAAL,CAA0BD,IAAI,CAACZ,gBAAL,CAAsBnwF,KAAtB,CAA4B,CAA5B,CAA1B;AACH,aAFS,EAEP,CAFO,CAAV;AAGH,WAPD,CAFJ;AAYA,eAAKnF,YAAL,CACI,qBADJ,EAEI,OAAAgyB,aAAA,CAAc,CACV,KAAKrZ,KAAL,CAAW5F,IAAX,CACI,QAAA4H,MAAA,CAAO,cAAA+Q,wBAAP,CADJ,EAEI,YAAA5jB,GAAA,CAAI,UAACG,CAAD;AAAA,mBAAqCA,CAAC,CAACoP,OAAvC;AAAA,WAAJ,CAFJ,CADU,EAKV,KAAK69E,cAAL,CAAoBniF,IAApB,CAAyB,WAAAynD,eAAA,EAAzB,CALU,EAMV,KAAK26B,WAAL,CAAiBpiF,IAAjB,CAAsB,WAAAynD,eAAA,EAAtB,CANU,CAAd,EAOGt6D,SAPH,CAOa,kBAAuC;AAAA;AAAA,gBAArCilB,cAAqC;AAAA,gBAArBI,QAAqB;AAAA,gBAAX+H,KAAW;;AAChD,oBAAI,CAAC6jE,UAAL,GAAkBhsE,cAAlB;AAEA,gBAAMixE,mBAAmB,GAAG,CAACjxE,cAAc,CAACb,MAAf,IAAyB,EAA1B,EAA8Bzb,MAA9B,CACxB,UAAC2O,CAAD,EAAM;;;AACF,sBAAC,CAACA,CAAC,CAACkyB,MAAJ,IACAlyB,CAAC,CAACgO,KAAF,CAAQzJ,QAAR,CAAiBwJ,QAAQ,CAACrR,EAA1B,CADA,IAEAsD,CAAC,CAACgO,KAAF,CAAQzJ,QAAR,CAAiB,CAAD,KAAC,QAAI,CAAC1F,OAAL,MAAY,IAAZ,IAAY,aAAZ,GAAY,MAAZ,GAAY,GAAEA,OAA/B,CAFA;AAEuC,aAJnB,CAA5B;;AAOA,oBAAI,CAAC4+E,YAAL,CAAkB7kF,IAAlB,CAAuB+yB,SAAS,CAACizD,mBAAD,CAAhC;;AAEA,gBAAM9B,SAAS,GAAkB,EAAjC;AACA,gBAAML,MAAM,GAAsC,EAAlD;AACA,gBAAMoC,UAAU,GAAG,QAAI,CAACngB,cAAL,CAAoBv+D,GAApB,CAAwB,oBAAxB,KAAiD,EAApE;AACAy+E,+BAAmB,CAAC/1F,OAApB,CAA4B,UAAC+kB,KAAD,EAAW;AACnC,kBAAMsB,MAAM,GAAGvB,cAAc,CAACD,SAAf,CAAyBE,KAAK,CAAClR,EAA/B,CAAf;AACA,kBAAMoiF,QAAQ,GAAG,kBAAAvC,wBAAA,CAAyB3uE,KAAzB,EAAgCsB,MAAhC,EAAwC2vE,UAAxC,CAAjB;AACApC,oBAAM,YAAKqC,QAAQ,CAACpiF,EAAd,EAAN,GAA4BoiF,QAAQ,CAACrC,MAArC;AACAK,uBAAS,CAACxqF,IAAV,OAAAwqF,SAAS,qBACF,kBAAAJ,4BAAA,CACC9uE,KADD,EAEC,YAAM,CAAE,CAFT,EAGC,YAAM,CAAE,CAHT,EAIC,YAAM;AACF,oBAAG,CAAC,QAAI,CAAC6wE,cAAT,EAAyB;AACrB,0BAAI,CAACb,WAAL,CAAiBhlF,IAAjB,CAAsBgV,KAAtB;;AACA,0BAAI,CAACmxE,WAAL;AACH;AAEJ,eAVF,CADE,EAAT;AAcH,aAlBD;;AAmBA,oBAAI,CAAClB,SAAL,CAAejlF,IAAf,CAAoB6jF,MAApB;;AACA,oBAAI,CAACK,SAAL,CAAelkF,IAAf,CAAoBkkF,SAApB;;AACA,oBAAI,CAACtC,eAAL,IAAwB,QAAI,CAACuE,WAAL,EAAxB;AACH,WA5CD,CAFJ;AAiDA,eAAKv2F,YAAL,CACI,gBADJ,EAEI,KAAKi1F,YAAL,CACKliF,IADL,CACU,YAAAu5C,cAAA,CAAe,KAAK8oC,WAApB,CADV,EAEKl1F,SAFL,CAEe,kBAAiC;AAAA;AAAA,gBAA/B+0F,YAA+B;AAAA,gBAAjBG,WAAiB;;AACxC,oBAAI,CAACI,gBAAL,CAAsBplF,IAAtB,CAA2B6kF,YAAY,CAACntF,GAAb,CAAiB,QAAAmyD,qBAAjB,CAA3B;AACH,WAJL,CAFJ;AASA,eAAKj6D,YAAL,CACI,gBADJ,EAEI,KAAKi1F,YAAL,CACC/0F,SADD,CACW,UAACkQ,IAAD,EAAU;AACjB;AACA,gBAAMgV,KAAK,GAAIhV,IAAI,CAAC3K,IAAL,CAAU,UAAC+R,CAAD,EAAO;AAAD;;AAAC,qBAAAA,CAAC,CAACtD,EAAF,MAAI,kBAAK,QAAI,CAAC0vE,WAAV,MAAqB,IAArB,IAAqB,aAArB,GAAqB,MAArB,GAAqB,GAAEz+E,KAAvB,MAA4B,IAA5B,IAA4B,aAA5B,GAA4B,MAA5B,GAA4B,GAAEigB,KAA9B,MAAmC,IAAnC,IAAmC,aAAnC,GAAmC,MAAnC,GAAmC,GAAElR,EAAzC;AAA2C,aAA5D,CAAf;AACAkR,iBAAK,IAAI,QAAI,CAACgwE,WAAL,CAAiBhlF,IAAjB,CAAsBgV,KAAtB,CAAT;AACH,WALD,CAFJ;AAaA,eAAKplB,YAAL,CACI,wBADJ,EAEI,KAAK2Y,KAAL,CAAW5F,IAAX,CAAgB,QAAA4H,MAAA,CAAO,cAAAoR,6BAAP,CAAhB,EAAuD7rB,SAAvD,CAAiE,UAAC6W,SAAD,EAAe;AAC5E,oBAAI,CAACi+E,eAAL,CAAqB5kF,IAArB,CAA0B,QAAI,CAACiG,OAAL,CAAakP,QAAvC,EAD4E,CAE5E;;;AACA,gBAAIxO,SAAS,CAAC5S,MAAV,GAAmB,CAAnB,IAAwB,CAAC,QAAI,CAAC+wF,cAAL,CAAoB/vF,KAAjD,EAAwD;AACpD,kBAAMqxF,aAAa,GAAGz/E,SAAS,CAAC,CAAD,CAA/B;;AACA,sBAAI,CAACm+E,cAAL,CAAoB9kF,IAApB,CAAyBomF,aAAzB;AACH;AACJ,WAPD,CAFJ;AAYA,eAAKx2F,YAAL,CACI,sBADJ,EAEI,KAAKk1F,cAAL,CACKniF,IADL,CAEQ,WAAAynD,eAAA,EAFR,EAGQ,YAAA1yD,GAAA,CAAI,UAACuC,CAAD;AAAA,mBAAiBA,CAAC,CAACyN,MAAnB;AAAA,WAAJ,CAHR,EAKK5X,SALL,CAKe,UAAC4X,MAAD,EAAY;AACnB,oBAAI,CAACy9E,oBAAL,CAA0BnlF,IAA1B,CAA+B0H,MAAM,CAAChQ,GAAP,CAAW,cAAAulB,wBAAX,CAA/B;AACH,WAPL,CAFJ,EA/HW,CA2IX;;AACA,eAAKrtB,YAAL,CACI,yCADJ,EAEI,KAAKk1F,cAAL,CACKniF,IADL,CAEQ,WAAAynD,eAAA,EAFR,EAGQ,YAAA3T,oBAAA,EAHR,EAIQ,YAAAyF,cAAA,CAAe,KAAK6oC,WAApB,CAJR,EAKQ,YAAArtF,GAAA,CACI;AAAA;AAAA,gBAAEyd,QAAF;AAAA,gBAAY4vE,WAAZ;;AAAA,mBACKA,WAAW,IAAI5vE,QAAQ,CAACzN,MAAT,CAAgBrS,IAAhB,CAAqB,UAACsS,CAAD;AAAA,qBAAOA,CAAC,CAAC7D,EAAF,KAASihF,WAAW,CAACjhF,EAA5B;AAAA,aAArB,CAAhB,IACAqR,QAAQ,CAACzN,MAAT,CAAgB,CAAhB,CAFJ;AAAA,WADJ,CALR,EAWK5X,SAXL,CAWe,UAACotB,KAAD,EAAW;AAClB,oBAAI,CAAC6nE,WAAL,CAAiB/kF,IAAjB,CAAsBkd,KAAtB;AACH,WAbL,CAFJ,EA5IW,CA8JX;;AACA,eAAKttB,YAAL,CACI,2BADJ,EAEI,OAAAg0B,QAAA,CAAS,KAAK,IAAd,EACKjhB,IADL,CACU,YAAAu5C,cAAA,CAAe,KAAK3zC,KAAL,CAAWgC,MAAX,CAAkB,cAAA6O,gBAAlB,CAAf,CADV,EAEKtpB,SAFL,CAEe,kBAAc;AAAA;AAAA,gBAAVke,IAAU;;AAErBA,gBAAI,CAAC,MAAD,CAAJ,GAAgB,OAAApc,iBAAA,CAAkB,QAAA4C,QAAA,CAASwkB,GAAT,GAAe3mB,IAAf,CAAoB;AAAEC,qBAAO,EAAE;AAAX,aAApB,CAAlB,EAAuD,kBAAAitF,YAAvD,EAAqE7qF,OAArE,EAAhB,EACAsZ,IAAI,CAACxb,MAAL,GAAc,OAAAD,mBAAA,CACV,IAAI,UAAAwQ,MAAJ,CAAW;AAAElR,kBAAI,EAAE,QAAA2C,QAAA,CAASwkB,GAAT,GAAe3mB,IAAf,CAAoB;AAAEC,uBAAO,EAAE;AAAX,eAApB,CAAR;AAA6C+mB,yBAAW,EAAE,KAA1D;AAAiEC,yBAAW,EAAEtL,IAAI,CAACvX;AAAnF,aAAX,CADU,EAEV,kBAAA8oF,YAFU,CADd;;AAKA,oBAAI,CAACh3E,KAAL,CAAWolE,QAAX,CAAoB,cAAA5nE,oBAAA,CAAqB;AAAEE,qBAAO,EAAE+H;AAAX,aAArB,CAApB;;AACA,oBAAI,CAACzF,KAAL,CAAWolE,QAAX,CAAoB,QAAAzzD,mBAAA,CAAoBjW,OAApB,CAA4B,cAAAgU,mBAAA,CAAoBjK,IAApB,CAA5B,CAApB;AACH,WAXL,CAFJ;AAgBA,eAAK+3E,oBAAL,CAA0B,KAAK9/E,OAAL,CAAakP,QAAvC;AACA,eAAKkxE,mBAAL,CAAyBT,SAAzB;AAEH;;;iCAEe;AACZ,cAAI,KAAKlG,IAAL,CAAU3qF,KAAV,GAAkB,kBAAAsuF,cAAtB,EAAsC;AAClC,iBAAK3D,IAAL,CAAU1/E,IAAV,CAAe,KAAK0/E,IAAL,CAAU3qF,KAAV,GAAkB,CAAjC;AACH;AACJ;;;kCAEgB;AACb,cAAI,KAAK2qF,IAAL,CAAU3qF,KAAV,GAAkB,kBAAA4qF,cAAtB,EAAsC;AAClC,iBAAKD,IAAL,CAAU1/E,IAAV,CAAe,KAAK0/E,IAAL,CAAU3qF,KAAV,GAAkB,CAAjC;AACH;AACJ;;;mDAEiC;AAC9B,eAAK06E,MAAL,CAAY5lE,IAAZ,CAAiB,qCAAAy8E,+BAAjB,EAAkD;AAC9Cl+E,gBAAI,EAAE,KAAK08E,cAAL,CAAoB/vF,KADoB;AAE9C+U,sBAAU,EAAE,WAFkC;AAG9C8xC,qBAAS,EAAE,KAHmC;AAI9CC,yBAAa,EAAE;AAJ+B,WAAlD;AAMH;;;0CAEwB;AACrB,eAAK6jC,IAAL,CAAU1/E,IAAV,CAAe,kBAAA2/E,cAAf;AACA,eAAKC,MAAL,CAAY5/E,IAAZ,CAAiB,kBAAA6/E,YAAjB;AACA,eAAKrM,WAAL,CAAiBxzE,IAAjB,CAAsBlM,SAAtB;AACH;;;6CAE2B8xF,S,EAA8B;AAAA;;AACtD,eAAKhB,eAAL,CACKjiF,IADL,CAEQ,YAAAjL,GAAA,CAAI,UAACu3C,GAAD;AAAA,mBAASA,GAAG,CAAC55C,IAAJ,CAAS,UAAC4E,CAAD;AAAA,qBAAOA,CAAC,CAAC6J,EAAF,KAAS8hF,SAAS,CAAC7wF,KAA1B;AAAA,aAAT,CAAT;AAAA,WAAJ,CAFR,EAGQ,YAAA2V,IAAA,CAAK,CAAL,CAHR,EAIQ,WAAA0/C,eAAA,EAJR,EAMKt6D,SANL,CAMe,UAACkQ,IAAD,EAAU;AACjB,oBAAI,CAAC8kF,cAAL,CAAoB9kF,IAApB,CAAyBA,IAAzB;AACH,WARL;AASH;;;4CAE0B4lF,S,EAA8B;AAAA;;AACrD,eAAKd,cAAL,CACKniF,IADL,CAEQ,YAAAjL,GAAA,CAAI,UAACuC,CAAD,EAAO;AAAD;;AAAA,yBAACA,CAAC,CAACyN,MAAH,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAErS,IAAF,CAAO,UAACsS,CAAD;AAAA,qBAAOA,CAAC,CAAC7D,EAAF,MAAS8hF,SAAS,SAAT,IAAAA,SAAS,WAAT,GAAS,MAAT,GAAAA,SAAS,CAAE7wF,KAApB,CAAP;AAAA,aAAP,CAAT;AAAiD,WAA3D,CAFR,EAGQ,YAAA2V,IAAA,CAAK,CAAL,CAHR,EAIQ,WAAA0/C,eAAA,EAJR,EAMKt6D,SANL,CAMe,UAACkQ,IAAD,EAAU;AACjB,oBAAI,CAAC+kF,WAAL,CAAiB/kF,IAAjB,CAAsBA,IAAtB;AACH,WARL;AASH;;;0CAEwB4lF,S,EAA+B;AAAA;;AACpD,eAAKf,YAAL,CACKliF,IADL,CAEQ,YAAAjL,GAAA,CAAI,UAACu3C,GAAD;AAAA,mBAASA,GAAG,CAAC55C,IAAJ,CAAS,UAAC+R,CAAD,EAAO;AAAD;;AAAC,qBAAAA,CAAC,CAACtD,EAAF,MAAI,MAAK,QAAI,CAAC0vE,WAAV,MAAqB,IAArB,IAAqB,aAArB,GAAqB,MAArB,GAAqB,GAAEz+E,KAAF,CAAQigB,KAAR,CAAclR,EAAvC;AAAyC,aAAzD,CAAT;AAAA,WAAJ,CAFR,EAGQ;AACA,qBAAAsmD,eAAA,EAJR,EAMKt6D,SANL,CAMe,UAACkQ,IAAD,EAAU;AACjB,oBAAI,CAACglF,WAAL,CAAiBhlF,IAAjB,CAAsBA,IAAtB;AACH,WARL;AASH;;;sCAEoB;AAAA;;AACjB;AACA,eAAKglF,WAAL,CAAiBriF,IAAjB,CAAsB,YAAA+H,IAAA,CAAK,CAAL,CAAtB,EAA+B,WAAA0/C,eAAA,EAA/B,EAAyDt6D,SAAzD,CAAmE,UAACkQ,IAAD,EAAU;AACzE,gBAAIlS,KAAK,GAAG,CAAZ;;AACA,gBAAIkS,IAAI,CAACkd,KAAL,CAAWpZ,EAAX,KAAkB,QAAI,CAACihF,WAAL,CAAiBhwF,KAAjB,CAAuB+O,EAA7C,EAAiD;AAC7C,sBAAI,CAACihF,WAAL,CAAiB/kF,IAAjB,CAAsBA,IAAI,CAACkd,KAA3B;;AACApvB,mBAAK,GAAG,GAAR;AACH;;AACD,oBAAI,CAAC0C,OAAL,CACI,oBADJ,EAEI,YAAM;;;AACF,kBAAMgjF,WAAW,GAAG,cAAA1yD,sBAAA,CAChB,CAAC,QAAI,CAACkkE,WAAL,CAAiBjwF,KAAlB,CADgB,EAEhB,CAAC,QAAI,CAACgwF,WAAL,CAAiBhwF,KAAlB,CAFgB,EAGhB,CAAC,QAAI,CAAC+vF,cAAL,CAAoB/vF,KAArB,CAHgB,CAApB,CADE,CAMF;;AAEA,sBAAI,CAACy+E,WAAL,CAAiBxzE,IAAjB,CAAsB+yB,SAAS,CAACygD,WAAW,CAAC,CAAD,CAAZ,CAA/B;;AACA,sBAAI,CAACoO,eAAL,IAAwB,QAAI,CAACF,aAAL,CAAoB3uD,SAAS,CAACygD,WAAW,CAAC,CAAD,CAAZ,CAA7B,CAAxB;;AATE,2BAWa,CAAH,WAAG,QAAI,CAACA,WAAR,MAAmB,IAAnB,IAAmB,aAAnB,GAAmB,MAAnB,GAAmB,GAAEz+E,KAAlB,MAAuB,IAAvB,IAAuB,aAAvB,GAAuB,MAAvB,GAAuB,GAAEigB,KAXtC;AAAA,kBAWT1b,OAXS,UAWTA,OAXS;AAAA,kBAWA0R,QAXA,UAWAA,QAXA,EAW6C;;;AAC/C,kBAAK,QAAI,CAAC+1E,UAAL,CAAgBjsE,SAAhB,CAA0B,QAAI,CAAC0+D,WAAL,CAAiBz+E,KAAjB,CAAuBigB,KAAvB,CAA6BlR,EAAvD,MAA+D,aAA/D,IAAiF,CAAAxK,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAE0tB,cAAT,MAA4Bhc,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAEgc,cAAtC,CAAtF,EAA8I;AAC1I;AACA,wBAAI,CAACze,KAAL,CAAWolE,QAAX,CACI,cAAA5nE,oBAAA,CAAqB;AACjBE,yBAAO,EAAE,MAAF,OAAE,CAAF,kBACA,QAAI,CAACu/E,eAAL,CAAqBzwF,KADrB,CAAE,EACwB;AAC7Bi5E,gCAAY,EAAE,QAAI,CAACwF,WAAL,CAAiBz+E;AADF,mBADxB;AADQ,iBAArB,CADJ;;AAQA,wBAAI,CAACiuF,YAAL,CAAkB,QAAI,CAACxP,WAAL,CAAiBz+E,KAAnC;AACH;;AACD,eAAC,QAAI,CAAC6sF,eAAN,IAAyB,QAAI,CAAC+C,eAAL,CAAqB3kF,IAArB,CAA0B,kBAAAqkF,gBAAA,CAAiB,QAAI,CAAC7Q,WAAL,CAAiBz+E,KAAlC,EAAyC,QAAzC,CAA1B,CAAzB;;AACA,sBAAI,CAAC2qF,IAAL,CAAU1/E,IAAV,CAAe,CAAf;AACH,aA5BL,EA6BIlS,KA7BJ;AA+BH,WArCD;AAsCH;;;uCAKqB4d,K,EAAa;AAAA;;AAC/B,eAAKnD,KAAL,CAAWolE,QAAX,CAAoB,cAAArnE,gBAAA,EAApB;AAEA,eAAKiC,KAAL,CAAWgC,MAAX,CAAkB,cAAA6O,gBAAlB,EAAoCzW,IAApC,CAAyC,YAAA+H,IAAA,CAAK,CAAL,CAAzC,EACF5a,SADE,CACQ,UAACke,IAAD,EAAU;AACpBA,gBAAI,CAACkI,WAAL,GAAmB,cAAAwB,kBAAA,CAAmB,CAAnB,CAAnB,EACkB1J,IAAI,CAAC+J,QAAL,GAAgB,cAAAJ,qBADlC,EAEC,QAAI,CAACpP,KAAL,CAAWolE,QAAX,CAAoB,cAAA5nE,oBAAA,CAAqB;AAAEE,qBAAO,EAAE+H;AAAX,aAArB,CAApB,CAFD;AAGA,WALE;AAOA,cAAMu4E,gBAAgB,GAAG;AACrB35F,iBAAK,EAAE;AAAEqZ,qBAAO,EAAE,KAAK8+E,WAAL,CAAiBhwF;AAA5B,aADc;AAErBqgF,sBAAU,EAAE,KAAK1pE,KAFI;AAGrB+oC,uBAAW,EAAE;AACT32C,qBAAO,EAAE;AADA;AAHQ,WAAzB;AAOA,eAAKiQ,QAAL,CAAcy4E,eAAd,GAAgC,IAAhC;AACA,eAAK7f,MAAL,CAAYl/B,QAAZ,CAAqB,CAAC/7B,KAAD,CAArB,EAA8B66E,gBAA9B;AACH,S,CAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;qCAEoB1hE,I,EAA4B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,cAAI4B,SAAS,GAAG;AAAE3oB,mBAAO,EAAE,KAAKqW,WAAL,CAAiBvmB,IAA5B;AAAkCmH,iBAAK,EAAE,KAAKof,WAAL,CAAiBlR;AAA1D,WAAhB;AACA,eAAKsF,KAAL,CAAWolE,QAAX,CACI,cAAA5nE,oBAAA,CAAqB;AACjBE,mBAAO,EAAE;AACLwgB,uBAAS,EAAEA,SADN;AAEL9H,mBAAK,EAAE,gBAFF;AAGL;AACA5C,kBAAI,EAAE,EAJD;AAKL+K,mBAAK,EAAE,EALF;AAML0zB,wBAAU,EAAE,CANP;AAOLwzB,0BAAY,EAAEnpD;AAPT;AADQ,WAArB,CADJ;AAcA,eAAK8hD,MAAL,CAAYl/B,QAAZ,CAAqB,CAAC,WAAD,CAArB,EAAoC;AAAE2tC,sBAAU,EAAE,KAAK1pE;AAAnB,WAApC;AACH;;;qCAEmB7Z,I,EAA8B;AAC9C,cAAM40F,SAAS,GAAG,IAAIh1F,IAAJ,CAASI,IAAT,EAAe4/C,MAAf,EAAlB;AACA,iBAAO4N,KAAK,CAAConC,SAAD,CAAL,GACD,IADC,GAED,CAAC,QAAD,EAAW,QAAX,EAAqB,SAArB,EAAgC,WAAhC,EAA6C,UAA7C,EAAyD,QAAzD,EAAmE,UAAnE,EACIA,SADJ,CAFN;AAKH;;;;MA9dqC,OAAAn4F,a;;AAL1C;;;uBAKaupF,oB,EAAoB,8B,EAAA,kC,EAAA,wC,EAAA,+B,EAAA,uC,EAAA,2C,EAAA,iC;AAAA,K;;;YAApBA,oB;AAAoB,uC;AAAA;AAAA;AAAA,O;AAAA,wE;AAAA,c;AAAA,a;AAAA,goC;AAAA;AAAA;ACxEjC;AACI;AAqCA;AA6CJ;;;;AAlFiD;AAAA;AAqCxC;AAAA;;;;;;;;;;2BDkCIA,oB,EAAoB;cALhC,OAAAliC,SAKgC;eALtB;AACPlnD,kBAAQ,EAAE,kBADH;AAEPmnD,qBAAW,EAAE,+BAFN;AAGPC,mBAAS,EAAE,CAAC,+BAAD;AAHJ,S;AAKsB,Q;;;;;;;;;;;;;;;;;;gBAC5B,OAAA1kD;;;;;;;;;;;;;;;;;;;;;;;;AEzEL;AAAA;AAAA;;AAQA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;QAmBaonF,sB;;;;;AAmCT,sCAAoB5R,MAApB,EACoBj7D,KADpB,EAC2C;AAAA;;AAAA;;AACvC;AAFgB,iBAAAi7D,MAAA,GAAAA,MAAA;AACA,iBAAAj7D,KAAA,GAAAA,KAAA;AAlCb,iBAAAg7E,aAAA,GAAqC,CACxC;AACI3xF,eAAK,EAAE,CADX;AAEI+I,iBAAO,EAAE,MAFb;AAGIiZ,cAAI,EAAE;AACFy2B,kBAAM,EAAE;AADN;AAHV,SADwC,EAQxC;AACIz4C,eAAK,EAAE,CADX;AAEI+I,iBAAO,EAAE,KAFb;AAGIiZ,cAAI,EAAE;AACFy2B,kBAAM,EAAE;AADN;AAHV,SARwC,EAexC;AACIz4C,eAAK,EAAE,CADX;AAEI+I,iBAAO,EAAE,UAFb;AAGIiZ,cAAI,EAAE;AACFrL,iBAAK,EAAE,kBADL;AAEF8hC,kBAAM,EAAE;AAFN;AAHV,SAfwC,CAArC;AAyBA,iBAAAm5C,cAAA,GAAiB,IAAI,OAAAr5F,eAAJ,CAAuC,SAAKo5F,aAAL,CAAmB,CAAnB,CAAvC,CAAjB;AAMA,iBAAAE,oBAAA,GAAuB,IAAI,OAAA3zC,YAAJ,EAAvB;AAGoC;AAE1C;;;;mCAEc;AAAA;;AACX,eAAK2zC,oBAAL,CAA0B5mF,IAA1B,CAA+B,KAAK2mF,cAAL,CAAoB5xF,KAAnD;AAEA,eAAKnF,YAAL,CAAkB,YAAlB,EAAgC,KAAK8b,KAAL,CAAWygE,aAAX,CAC3BxpE,IAD2B,CACtB,WAAAunD,wBAAA,EADsB,EAE3Bp6D,SAF2B,CAEjB,UAACkQ,IAAD,EAAoB;AAC3B,gBAAM6mF,eAAe,GAAG,QAAI,CAACH,aAAL,CAAmBrxF,IAAnB,CAAwB,UAAAunB,CAAC;AAAA,qBAAIA,CAAC,CAAC9e,OAAF,CAAUvE,WAAV,OAA4ByG,IAAI,CAACuH,GAAL,CAAS,SAAT,CAAhC;AAAA,aAAzB,CAAxB;;AACA,oBAAI,CAACu/E,gBAAL,CAAsBD,eAAe,SAAf,IAAAA,eAAe,WAAf,GAAAA,eAAA,GAAmB,QAAI,CAACH,aAAL,CAAmB,CAAnB,CAAzC;AACH,WAL2B,CAAhC;AAMH;;;yCAEuBnqE,M,EAA2B;;;AAC/C,eAAKoqE,cAAL,CAAoB3mF,IAApB,CAAyBuc,MAAzB;AACA,eAAKqqE,oBAAL,CAA0B5mF,IAA1B,CAA+Buc,MAA/B;;AAEA,oBAAGA,MAAM,CAACxF,IAAV,MAAc,IAAd,IAAc,aAAd,GAAc,MAAd,GAAc,GAAErL,KAAhB,EAAuB;AACnB,iBAAKi7D,MAAL,CAAYl/B,QAAZ,CAAqB,CAAC,kBAAD,CAArB,EAA2C;AAAE2tC,wBAAU,EAAE,KAAK1pE;AAAnB,aAA3C;AACH,WAFD,MAGK;AACA;AACD,iBAAKi7D,MAAL,CAAYl/B,QAAZ,CAAqB,EAArB,EAAyB;AACrB2tC,wBAAU,EAAE,KAAK1pE,KADI;AAErB+oC,yBAAW,EAAE;AACT32C,uBAAO,EAAEye,MAAM,CAACze,OAAP,CAAevE,WAAf;AADA,eAFQ;AAKrBwtF,iCAAmB,EAAE;AALA,aAAzB;AAOH;AAGJ;;;;MAtEuC,OAAAz4F,a;;AAjB5C;;;uBAiBaiqF,sB,EAAsB,+B,EAAA,uC;AAAA,K;;;YAAtBA,sB;AAAsB,yC;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,c;AAAA,a;AAAA,yN;AAAA;AAAA;AAd3B;AACI;AACI;AAAgC;AAAO;AACvC;AACO;AAA8E;AACzF;AAEA;AAEY;AAAA,mBAAkB,IAAAuO,gBAAA,QAAlB;AAA0C,WAA1C;;AAA4C;AAC5D;;;;AANe;AAAA;AAGC;AAAA,sDAAyB,UAAzB,EAAyB,wCAAzB;;;;;;;;;;2BAOXvO,sB,EAAsB;cAjBlC,OAAA5iC,SAiBkC;eAjBxB;AACPlnD,kBAAQ,EAAE,oBADH;AAEPw0D,kBAAQ,0mBAFD;AAePpN,mBAAS,EAAE,CAAC,iCAAD;AAfJ,S;AAiBwB,Q;;;;;;;;gBA6B9B,OAAA1kD;;;gBAGA,OAAA2kD;;;;;;;;;;;;;;;;;;;;;;;;AClEL;AAAA;AAAA;;AAQA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAMA;AAAA;AAAA;;AAMA;AAAA;AAAA;;AAOA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DgB;AAAgD;AAAyC;;;;;;AACzF;AAA+B;AAA2C;;;;;;AAC1E;AAAuD;AAA+C;;;;;;AACtG;AACI;AACJ;;;;;AADI;AAAA;;;;;;;;;;QAiCPkjC,qC;AAqBT,qDACoC5wE,IADpC,EAEYwvB,SAFZ,EAGY3W,OAHZ,EAGkC;AAAA;;AAFE,aAAA7Y,IAAA,GAAAA,IAAA;AACxB,aAAAwvB,SAAA,GAAAA,SAAA;AACA,aAAA3W,OAAA,GAAAA,OAAA;AAvBK,aAAAwtD,UAAA,GAAa,IAAI,OAAAx7B,YAAJ,EAAb;AASV,aAAAiD,UAAA,GAAqB,OAAA3jD,mBAAA,CAAoB,IAAI,UAAAwQ,MAAJ,EAApB,EAAkC,EAAlC,CAArB;AACA,aAAAid,SAAA,GAAqB,IAArB;AACA,aAAA+6B,SAAA,GAAY,IAAI,QAAA9qB,SAAJ,CAAc;AAC7Bz9B,gBAAM,EAAE,IAAI,QAAAg7B,WAAJ,CAAgB,KAAK0oB,UAArB,EAAiC,CAAC,QAAAxoB,UAAA,CAAWC,QAAZ,CAAjC,CADqB;AAE7B/6B,kBAAQ,EAAE,IAAI,QAAA46B,WAAJ,CAAgB,cAAAjW,wBAAhB,EAA0C,CAAC,QAAAmW,UAAA,CAAWC,QAAZ,CAA1C;AAFmB,SAAd,CAAZ;AAIA,aAAAskB,aAAA,GAAgB,EAAhB;AACA,aAAAN,gBAAA,GAAmB,EAAnB;AACA,aAAAyE,UAAA,GAAa,EAAb;AACA,aAAAC,QAAA,GAAW,EAAX;AAMH;;;;mCAMW;AACX9+C,iBAAO,CAACV,GAAR,CAAY,QAAZ;AACA,eAAKkkD,SAAL,CAAetoD,QAAf,CAAwB;AACpBD,kBAAM,EAAE,KAAK4V,IAAL,CAAU4+E,aADE;AAEpBp0F,oBAAQ,EAAE,KAAKwV,IAAL,CAAUilC;AAFA,WAAxB;AAIA91C,iBAAO,CAACV,GAAR,CAAY,QAAZ;AACA,eAAKowF,aAAL;AACH,S,CAED;;;;qCACoB13F,O,EAAY;AAC5B,eAAK6Y,IAAL,CAAU4+E,aAAV,GAA0Bz3F,OAAO,CAACy3F,aAAlC,CAD4B,CACqB;;AACjD,eAAK5+E,IAAL,CAAUilC,eAAV,GAA4B99C,OAAO,CAAC89C,eAApC;AACA,eAAK45C,aAAL;AACH;;;wCAEsB;AAAA;;qDAAA,CACnB;AACA;;;AACA,cAAMz0F,MAAM,GAAG,KAAK4V,IAAL,CAAU5V,MAAzB;AACA,eAAK2mE,UAAL,GAAkB,OAAAp8D,wBAAA,CAAyBvK,MAAzB,CAAlB;AACA,eAAKk+E,UAAL,GAAkB,OAAA/zE,gCAAA,CAAiCnK,MAAjC,EAAyCA,MAAM,CAACE,QAAP,CAAgB;AAAEJ,mBAAO,EAAE,KAAK8V,IAAL,CAAUxV;AAArB,WAAhB,CAAzC,CAAlB;AACA,eAAK+9E,cAAL,GAAsB,OAAA93E,gBAAA,CAAiB,KAAKuP,IAAL,CAAUxV,QAA3B,CAAtB;AAEA,cAAMo0F,aAAa,GAAG,KAAK5+E,IAAL,CAAU4+E,aAAhC;AACA,eAAKE,iBAAL,GAAyB,OAAAnqF,wBAAA,CAAyBiqF,aAAzB,CAAzB;AACA,eAAKG,iBAAL,GAAyB,OAAAxqF,gCAAA,CAAiCqqF,aAAjC,EAAgDA,aAAa,CAACt0F,QAAd,CAAuB;AAAEJ,mBAAO,EAAE,KAAK8V,IAAL,CAAUilC;AAArB,WAAvB,CAAhD,CAAzB;AACA,eAAK+5C,qBAAL,GAA6B,OAAAvuF,gBAAA,CAAiB,KAAKuP,IAAL,CAAUilC,eAA3B,CAA7B;AACA,eAAK6I,UAAL,GAAkB,OAAA3jD,mBAAA,CAAoBy0F,aAApB,EAAmC,EAAnC,CAAlB,CAZmB,CAYuC;;AAE1D,cAAMz6E,KAAK,GAAG,EAAd;AACAA,eAAK,CAAC,KAAKnE,IAAL,CAAU4M,KAAV,CAAgB/R,KAAjB,CAAL,GAA+B,kBAAKmF,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAEi/E,cAAX,MAAyB,IAAzB,IAAyB,aAAzB,GAAyB,MAAzB,GAAyB,GAAE96E,KAAF,CAAQ,CAAD,WAAC,KAAKnE,IAAN,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAE4M,KAAX,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAE/R,KAA1B,CAAzB,KAA6D,CAA5F;AACA,cAAM2c,SAAS,GAAG,EAAlB;AACAA,mBAAS,CAAC,KAAKxX,IAAL,CAAU4M,KAAV,CAAgB/R,KAAjB,CAAT,GAAmC,kBAAKmF,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAEi/E,cAAX,MAAyB,IAAzB,IAAyB,aAAzB,GAAyB,MAAzB,GAAyB,GAAE96E,KAAF,CAAQ,CAAD,WAAC,KAAKnE,IAAN,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAE4M,KAAX,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAE/R,KAA1B,CAAzB,KAA6D,CAAhG;AAEA,eAAKszC,oBAAL,CAA0B,CAAD,WAAC,KAAKnuC,IAAN,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAE4M,KAAX,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAEve,QAA5C;AAEA,cAAM6wF,WAAW,GAAG,IAAI,cAAA9wE,OAAJ,CAAY;AAC5B1S,cAAE,EAAE,KAAKsE,IAAL,CAAUo2E,SADc;AAE5B76E,uBAAW,EAAE,KAAKyE,IAAL,CAAU4+E,aAAV,CAAwBzjF,OAFT;AAG5BF,qBAAS,EAAE,KAAK+E,IAAL,CAAU4+E,aAAV,CAAwBt0F,QAAxB,CAAiC;AAAEJ,qBAAO,EAAE,KAAK8V,IAAL,CAAUilC;AAArB,aAAjC,EAAyE9pC,OAHxD;AAI5BshB,gBAAI,EAAE,KAAKzc,IAAL,CAAU4M,KAJY;AAK5BzI,iBAAK,EAALA,KAL4B;AAM5BqT,qBAAS,EAATA;AAN4B,WAAZ,CAApB;AASA,wBAAAJ,eAAA,CACI,KAAKyB,OADT,EAEIqmE,WAFJ,EAGE/4E,IAHF,CAGO,UAACyH,QAAD,EAAuB;AAC1B,oBAAI,CAACgK,SAAL,GAAiBhK,QAAjB;AACH,WALD,WAKS,YAAM;AACX,oBAAI,CAACgK,SAAL,GAAiB,KAAjB;AACH,WAPD;AAQH;;;qCAEmB;AAChB,eAAK4X,SAAL,CAAeC,KAAf,CAAqB,IAArB;AACH;;;8CAE4BrlC,M,EAAgB;AACzC,cAAM+0F,YAAY,GAAW,KAAKxsC,SAAL,CAAehmD,KAAf,CAAqBvC,MAAlD;AACA,cAAMwD,GAAG,GAAGuxF,YAAY,CAAC90F,QAAb,CAAsB;AAC9BuD,eAAG,EAAExD,MAAM,CAAC4+C,OADkB;AAE9Bn9C,iBAAK,EAAEzB,MAAM,CAAC2+C,SAFgB;AAG9Bj9C,gBAAI,EAAE1B,MAAM,CAAC0+C;AAHiB,WAAtB,CAAZ;AAKA,eAAKz+C,QAAL,CAAcuD,GAAd,EAAmB,KAAK+kD,SAAL,CAAe7b,QAAf,CAAwB1sC,MAA3C;AACH;;;iCAEeg1F,M,EAAQC,W,EAA8B;AAClD;AACAA,qBAAW,CAACh1F,QAAZ,CAAqB+0F,MAArB,EAFkD,CAEpB;;AAC9B,eAAK/Y,UAAL,CAAgBl6B,IAAhB,CAAqB,KAAKwG,SAAL,CAAehmD,KAApC;AACH;;;kCAEgB;AAAA;;;;AACb,cAAMwX,KAAK,GAAG,EAAd;AACAA,eAAK,CAAC,KAAKnE,IAAL,CAAU4M,KAAV,CAAgB/R,KAAjB,CAAL,GAA+B,kBAAKmF,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAEi/E,cAAX,MAAyB,IAAzB,IAAyB,aAAzB,GAAyB,MAAzB,GAAyB,GAAE96E,KAAF,CAAQ,CAAD,WAAC,KAAKnE,IAAN,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAE4M,KAAX,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAE/R,KAA1B,CAAzB,KAA6D,CAA5F;AACA,cAAM2c,SAAS,GAAG,EAAlB;AACAA,mBAAS,CAAC,KAAKxX,IAAL,CAAU4M,KAAV,CAAgB/R,KAAjB,CAAT,GAAmC,kBAAKmF,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAEi/E,cAAX,MAAyB,IAAzB,IAAyB,aAAzB,GAAyB,MAAzB,GAAyB,GAAE96E,KAAF,CAAQ,CAAD,WAAC,KAAKnE,IAAN,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAE4M,KAAX,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAE/R,KAA1B,CAAzB,KAA6D,CAAhG;AAEA,cAAMk7D,YAAY,GAAG,UAAAzsB,sCAAA,CAAuC,KAAKtpC,IAAL,CAAU4+E,aAAV,CAAwBxrF,EAA/D,EAAmE,CAAF,WAAE,KAAK4M,IAAP,MAAW,IAAX,IAAW,aAAX,GAAW,MAAX,GAAW,GAAEi/E,cAAX,MAAyB,IAAzB,IAAyB,aAAzB,GAAyB,MAAzB,GAAyB,GAAE5wF,QAA9F,CAArB;AACA,cAAM6wF,WAAW,GAAG,IAAI,cAAA9wE,OAAJ,CAAY;AAC5B1S,cAAE,EAAE,KAAKsE,IAAL,CAAUo2E,SADc;AAE5B76E,uBAAW,EAAEw6D,YAAY,CAAC56D,OAFE;AAG5BF,qBAAS,EAAE86D,YAAY,CAACzrE,QAAb,CAAsB;AAAEJ,qBAAO,EAAE,KAAK8V,IAAL,CAAUilC;AAArB,aAAtB,CAHiB;AAI5BxoB,gBAAI,EAAE,KAAKzc,IAAL,CAAU4M,KAJY;AAK5BzI,iBAAK,EAALA,KAL4B;AAM5BqT,qBAAS,EAATA;AAN4B,WAAZ,CAApB;AASA,wBAAAJ,eAAA,CACI,KAAKyB,OADT,EAEIqmE,WAFJ,EAGE/4E,IAHF,CAGO,UAACyH,QAAD,EAAuB;AAC1B,oBAAI,CAACgK,SAAL,GAAiBhK,QAAjB;;AACA,oBAAI,CAAC4hB,SAAL,CAAeC,KAAf,CAAqB,MAAD,OAAC,CAAD,EAAC,EACd,QAAI,CAACkjB,SAAL,CAAehmD,KADD,CAArB;AAGH,WARD,WAQS,YAAM;AACX,oBAAI,CAACirB,SAAL,GAAiB,KAAjB;AACH,WAVD;AAWH;;;6CAE4BvpB,Q,EAAkB;AAC3C,cAAIA,QAAJ,EAAc;AACV,iBAAKk7C,gBAAL,GAAwBl7C,QAAxB;AACA,gBAAMixF,kBAAkB,GAAG,KAAK3sC,SAAL,CAAehmD,KAAf,CAAqBvC,MAAhD;AACA,gBAAMm1F,gBAAgB,GAAGD,kBAAkB,CAACh1F,QAAnB,CAA4B;AAAEJ,qBAAO,EAAE,KAAKyoD,SAAL,CAAehmD,KAAf,CAAqBnC;AAAhC,aAA5B,CAAzB;AACA,iBAAKwjD,UAAL,GAAkBsxC,kBAAkB,CAAC5qF,eAAnB,CAAmC,OAAnC,CAAlB;AACA,iBAAKu5C,QAAL,GAAgBsxC,gBAAgB,CAAC7qF,eAAjB,CAAiC,OAAjC,CAAhB;AACH,WAND,MAMO;AACH,iBAAK60C,gBAAL,GAAwB,KAAKM,aAAL,CAAmBt6C,KAAnB,CAAyB,CAAzB,CAAxB;AACA,iBAAKy+C,UAAL,GAAkB,EAAlB;AACA,iBAAKC,QAAL,GAAgB,EAAhB;AACH;AACJ;;;4BA1HsB;AACnB,iBAAO,KAAKjuC,IAAL,CAAU4+E,aAAjB,CADmB,CACa;AACnC;;;;;;AA/GL;;;uBAkFahO,qC,EAAqC,qBAsBlC,SAAAtjC,eAtBkC,C,EAsBnB,qC,EAAA,sC;AAAA,K;;;YAtBlBsjC,qC;AAAqC,0D;AAAA;AAAA;AAAA,O;AAAA,e;AAAA,c;AAAA,woC;AAAA;AAAA;AA/E1C;AACA;AACI;AACI;AAAgE;AAAA,mBAAS,IAAArC,UAAA,EAAT;AAAqB,WAArB;AAC5D;AACJ;AACA;AAAoB;AAAqB;AACzC;AACI;AACI;AAKI;AAAA,mBAAY,IAAAiR,qBAAA,QAAZ;AAAyC,WAAzC;AACJ;AACA;AAEA;AAQI;AAAA,mBAAiB,IAAAn1F,QAAA,uCAAjB;AAA4D,WAA5D;AACJ;AACA;AACA;AASI;AAAA,mBAAiB,IAAAA,QAAA,yCAAjB;AAA8D,WAA9D;AACJ;AACJ;AACJ;AACA;AACA;AACA;AACA;AAGJ;AACA;AACI;AACI;AACI;AAAI;AAAG;AACP;AAAG;AAAoB;AACvB;AAAG;AAAoB;AACvB;AAAG;AAAoB;AACvB;AACJ;AACA;AACI;AAAI;AAAG;AACP;AAAG;AAA2B;AAC9B;AAAG;AAA2B;AAC9B;AAAG;AAA2B;AAClC;AACJ;AACJ;AACJ;AACA;AACQ;AAE2B;AAAA,mBAAiB,IAAA0nD,OAAA,EAAjB;AAA0B,WAA1B,EAA2B,iBAA3B,EAA2B;AAAA,mBACP,IAAAw8B,UAAA,EADO;AACK,WADhC;AAE1B;AACT;AACA;;;;AAnEc;AAAA;AAIM;AAAA;AAKoB;AAAA,4CAAmB,UAAnB,EAAmB,IAAnB;AAKpB;AAAA,0CAAiB,YAAjB,EAAiB,cAAjB,EAAiB,SAAjB,EAAiB,mCAAjB,EAAiB,gBAAjB,EAAiB,2BAAjB;AAOoB;AAAA,4CAAmB,UAAnB,EAAmB,IAAnB;AAKpB;AAAA,4EAA+C,YAA/C,EAA+C,yDAA/C,EAA+C,UAA/C,EAA+C,IAA/C,EAA+C,SAA/C,EAA+C,qCAA/C,EAA+C,gBAA/C,EAA+C,2BAA/C;AAST;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAQQ;AAAA;AACA;AAAA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AACA;AAAA;AAOP;AAAA;;;;;;;;;;2BAUPqC,qC,EAAqC;cAlFjD,OAAArjC,SAkFiD;eAlFvC;AACPlnD,kBAAQ,EAAE,qCADH;AAEPw0D,kBAAQ,6oIAFD;AA+EPpN,mBAAS,EAAE,CAAC,kDAAD,CA/EJ;AAgFPga,uBAAa,EAAE,OAAAC,iBAAA,CAAkB34C;AAhF1B,S;AAkFuC,Q;;;;kBAsBzC,OAAAqrB,M;mBAAO,SAAAkT,e;;;;;;;;;gBArBX,OAAAI;;;;;;;;;;;;;;;;;;;;;;;;AChIL;AAAA;AAAA;;AAaA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AASA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAOA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtCQ;AAKI;AAAA;AAAA;AAAA;AAAA;AACJ;;;;;AAJI,2CAAa,WAAb,EAAa,IAAb,EAAa,UAAb,EAAa,IAAb;;;;;;;;AAOJ;AAMI;AAAA;AAAA;AAAA;AAAA;AAGJ;;;;;AAPI;AACA,wDAA0B,QAA1B,EAA0B,aAA1B,EAA0B,SAA1B,EAA0B,iBAA1B,EAA0B,cAA1B,EAA0B,mBAA1B,EAA0B,YAA1B,EAA0B,iBAA1B;;;;;;;;AAgEY;AASI;AAAA;AAAA;AAAA;AAAA,iBAAY;AAAA9/C,eAAA;AAAA,YAAZ;AAA6C,SAA7C,EAA8C,MAA9C,EAA8C;AAAA;AAAA;AAAA;AAAA,iBAGtC;AAAAuJ,iBAAA,kBAAAA,KAAA;AAAA;AAAA,YAHsC;AAG+B,SAH7E;AAIA;;;AACA;AAAG;AAAmD;AAC1D;;;;;;;AAZI,mDAA6B,gBAA7B,EAA6B,4BAA7B,EAA6B,YAA7B,EAA6B,gBAA7B,EAA6B,aAA7B,EAA6B,iBAA7B,EAA6B,cAA7B,EAA6B,mBAA7B;AAKA;AAKA;AAAA;AACG;AAAA;;;;;;AAfP;AACA;AAgBA;;;;;;AAdI;AAAA,2CAA0D,cAA1D,EAA0D,+BAA1D;;;;;;;;;;;;;;;;;;;;;;AA6BJ;AAoBA;AAAA;AAAA;AAAA,iBAAY;AAAA;AAAA,YAAZ;AAAsD,SAAtD,EAAuD,iBAAvD,EAAuD;AAAA;AAAA;AAAA,iBACpC;AAAA;AAAA,YADoC;AACM,SAD7D;;;AASA;AACA;AACA;AACA;AACA;AAKA;AACA;AAMA;;;;;;;;;;;;AA3CA;AACA,4NAGE,oBAHF,EAGE,iLAHF,EAGE,kBAHF,EAGE,oBAHF,EAGE,cAHF,EAGE,8CAHF,EAGE,iBAHF,EAGE,mBAHF,EAGE,qBAHF,EAGE,uBAHF,EAGE,cAHF,EAGE,gBAHF;AAqBA;AAKoB;AAAA;AACA;AAAA;AAIhB;AAAA,+EAAgD,gBAAhD,EAAgD,4BAAhD;AAMA;AAAA,+EAAgD,gBAAhD,EAAgD,0BAAhD,EAAgD,MAAhD,EAAgD,qCAAhD;;;;;;;;AAhIpB;AACI;AACI;AACI;AAAI;AAAiB;AACrB;AAAG;AAAoB;AACvB;AAAG;AAA0D;AACjE;AACA;AACI;AACI;AACI;AAAuD;AAAA;AAAA;AAAA;AAAA;AAAvD;AACA;AAAQ;AAAA;AAAA;AAAA;AAAA;AACJ;AACJ;AACA;AAAwD;AAAA;AAAA;AAAA;AAAA;AAAxD;AACJ;AACA;AACI;AAAM;AAAqB;AAC3B;AAOI;AAAA;AAAA;AAAA;AAAA;AAAA;AAEJ;AACJ;AACA;AAE4B;AAAA;AAAA;AAAA;AAAA;AACxB;AACJ;AACJ;AACJ;AACA;AACI;AAII;AAAA;AAAA;AAAA;AAAA,WAA+C,oBAA/C,EAA+C;AAAA;AAAA;AAAA;AAAA,SAA/C;AAQH;AAED;AAyBA;AA2DJ;AACJ;AACJ;;;;;;;;;AAzIyC;AAI1B;AAAA;AACA;AAAA;AAWmB;AAAA;AACR;AAAA;AAEF;AAAA,yDAA2B,WAA3B,EAA2B,IAA3B,EAA2B,YAA3B,EAA2B,iBAA3B,EAA2B,UAA3B,EAA2B,eAA3B,EAA2B,wBAA3B,EAA2B,iBAA3B;AAUsD;AAAA;AAE1D;AAKyC;AAAA;AAE7C;AAAA,4DAA8B,QAA9B,EAA8B,aAA9B,EAA8B,SAA9B,EAA8B,kBAA9B,EAA8B,YAA9B,EAA8B,8CAA9B,EAA8B,eAA9B,EAA8B,oBAA9B,EAA8B,gBAA9B,EAA8B,GAA9B,EAA8B,eAA9B,EAA8B,IAA9B;;;;;;;;AAqGhB;AACI;AACI;AAAkE;AAAA;AAAA;AAAA;AAAA;AAAqB;AAAsC;AAC7H;AAA8D;AAAA;AAAA;AAAA;AAAA;AAC9B;AAAO;AAC3C;AACJ;;;;;AAJ+F;AAAA;AAEnF;AAAA;;;;AD1HpB,QAAMsoF,YAAY,GAAG,CAAC,CAAD,EAAI,CAAJ,CAArB;AACA,QAAMvwF,MAAM,GAAG;AACXwwF,UAAI,EAAE;AACFC,iBAAS,EAAE,SADT;AAEFC,eAAO,EAAE;AAFP,OADK;AAKXC,UAAI,EAAE;AACFF,iBAAS,EAAE,SADT;AAEFC,eAAO,EAAE;AAFP,OALK;AASXE,SAAG,EAAE;AACDH,iBAAS,EAAE,SADV;AAEDC,eAAO,EAAE;AAFR;AATM,KAAf;;QAuCaxP,gC;;;;;AA2BT,gDAAmB/I,MAAnB,EAAsC;AAAA;;AAAA;;AAClC;AADe,iBAAAA,MAAA,GAAAA,MAAA;AAVnB;;AACgB,iBAAA1jB,IAAA,GAAyB,kCAAAga,gBAAA,CAAiBqH,KAA1C,CASsB,CAPtC;;AAEiB,iBAAA+a,cAAA,GAAoC,IAAI,OAAAl1C,YAAJ,EAApC;AACA,iBAAAm1C,YAAA,GAAkC,IAAI,OAAAn1C,YAAJ,EAAlC;AACA,iBAAAo1C,sBAAA,GAA+C,IAAI,OAAAp1C,YAAJ,EAA/C;AACA,iBAAAq1C,mBAAA,GAAyC,IAAI,OAAAr1C,YAAJ,EAAzC;AAMV,iBAAAnyC,UAAA,GAAa,GAAb;AACA,iBAAA0sC,MAAA,GAAS,KAAT;AACA,iBAAA+6C,cAAA,GAAiB,KAAjB;AACA,iBAAA36E,MAAA,GAA8B,EAA9B;AAMA,iBAAA46E,WAAA,GAAuB,KAAvB;AAEA,iBAAAC,kBAAA,GAAqB,IAAI,OAAAn7F,eAAJ,CAA4B,UAAAgO,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAA5B,CAArB;AACA,iBAAAi3F,aAAA,GAAyB,KAAzB;AAGA,iBAAAC,aAAA,GAAwB,EAAxB;AACA,iBAAAC,UAAA,GAA2B,IAAI,OAAAj7E,OAAJ,EAA3B;AACA,iBAAAk7E,WAAA,GAA4B,IAAI,OAAAl7E,OAAJ,EAA5B;AACA,iBAAAm7E,mBAAA,GAA+B,KAA/B,CAtB+B,CAsBO;;AACtC,iBAAAvpF,KAAA,GAA2B;AAC9BxN,eAAK,EAAE,IAAIN,IAAJ,EADuB;AAE9BytB,aAAG,EAAE,IAAIztB,IAAJ,EAFyB;AAG9BktB,eAAK,EAAE,EAHuB;AAI9BsvC,eAAK,EAAE32D,MAAM,CAAC2wF,IAJgB;AAK9Bc,kBAAQ,EAAE,UALoB;AAM9BvmF,iBAAO,EAAE,IANqB;AAO9BwmF,mBAAS,EAAE;AACPC,uBAAW,EAAE,KADN;AAEPC,oBAAQ,EAAE;AAFH,WAPmB;AAW9BC,mBAAS,EAAE;AAXmB,SAA3B;AA0BA,iBAAAC,UAAA,GAAkB,EAAlB;AACA,iBAAAC,WAAA,GAAuB,KAAvB,CAlD+B,CAoDtC;;AACO,iBAAAC,SAAA,GAAY;AACfv3F,eAAK,EAAE,CADQ;AAEfmtB,aAAG,EAAE;AAFU,SAAZ,CArD+B,CA0DtC;;AACO,iBAAAg3B,UAAA,GAAa,UAAA56C,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB6R,aAApB,CAAkC;AAAEi9C,eAAK,EAAE;AAAT,SAAlC,CAAb;AAEA,iBAAAgpC,WAAA,GAAc,IAAI,QAAA/7D,WAAJ,CAAgB,IAAI/7B,IAAJ,GAAWiD,OAAX,EAAhB,CAAd;AA7D+B;AAErC;;;;oCA6DkB1B,C,EAAuB;AACtC,cAAMnB,IAAI,GAAG,IAAI,UAAAkR,MAAJ,CAAW;AAAElR,gBAAI,EAAEmB,CAAC,CAACnB,IAAF,CAAO6C,OAAP;AAAR,WAAX,CAAb,CADsC,CACe;;AACrD,iBAAO,KAAKsyF,aAAL,CAAmB52D,UAAnB,CAA8Bv+B,IAA9B,EAAoC,KAApC,CAAP;AACH;;;mCAUc;AAAA;;iBAAA,CACX;;;AACA,eAAK27C,MAAL,GAAc,OAAA3sC,oBAAA,CAAqB,KAAKC,UAA1B,CAAd;AACA,eAAKkmF,aAAL,GAAqB,KAAKx0F,MAAL,CAAYy8B,KAAZ,EAArB;AACA,cAAMp9B,IAAI,GAAG,KAAKW,MAAL,CAAYy8B,KAAZ,EAAb;AACA,cAAMu6D,uBAAuB,GAAG,KAAKnC,cAAL,GAC1B,KAAKA,cAAL,CAAoB5qF,WAApB,CAAgC/J,QAAhC,CAAyC;AAAE6Q,mBAAO,EAAE;AAAX,WAAzC,CAD0B,GAE1B1R,IAFN;AAGA,eAAK+jF,0BAAL,GAAkC/jF,IAAI,CAAC0J,YAAL,CAAkB,MAAlB,EAA0BA,YAA1B,CAAuC,KAAvC,CAAlC,CARW,CAUX;;AACA,eAAKkuF,cAAL,GAAsB,KAAK7T,0BAAL,CAAgC3mD,KAAhC,EAAtB;AAEA,eAAKy6D,cAAL;AACA,eAAKr8C,eAAL,GAAuB,KAAKz6C,QAA5B;AACA,eAAK+2F,UAAL,GAAkB,IAAI,UAAA5mF,MAAJ,CAAW;AACzBlR,gBAAI,EAAE,QAAA2C,QAAA,CAASo1F,OAAT,CAAiB,KAAK5C,aAAL,CAAmB7zF,UAAnB,CAA8B,YAA9B,CAAjB;AADmB,WAAX,EAEfV,QAFe,CAEN;AAAE0B,gBAAI,EAAE,EAAR;AAAYjC,kBAAM,EAAE;AAApB,WAFM,CAAlB;AAGA,eAAK23F,gBAAL,CAAsB,KAAK7C,aAA3B;AACA,eAAKwB,WAAL,GACIX,YAAY,CAACl8E,QAAb,CAAsB69E,uBAAuB,CAAClkE,WAA9C,KACAuiE,YAAY,CAACl8E,QAAb,CAAsB9Z,IAAI,CAACyzB,WAA3B,CAFJ;AAGA,eAAKwkE,cAAL;AACA,eAAKC,iBAAL;AACA,iBAAAlX,SAAA,CAAUz7E,MAAV,EAAkB,QAAlB,EACKuL,IADL,CACU,YAAAmwE,YAAA,CAAa,GAAb,CADV,EAEKnwE,IAFL,CAGQ,YAAAowE,GAAA,CAAI;AACA/yE,gBAAI,EAAE,cAACkjE,GAAD,EAAS;AACX,kBAAMl/D,MAAM,GAAGk/D,GAAG,CAACl/D,MAAnB;AACA,sBAAI,CAACwpC,MAAL,GAAcxpC,MAAM,CAACjD,UAAP,GAAoB,QAAI,CAACD,UAAvC;AACA,sBAAI,CAACkpF,QAAL,GAAgB,QAAI,CAACnB,WAAL,CAAiB7oF,IAAjB,EAAhB,GAA0C,QAAI,CAAC4oF,UAAL,CAAgB5oF,IAAhB,EAA1C;AACH;AALD,WAAJ,CAHR,EAWKlQ,SAXL;AAaA,eAAKulB,KAAL,GAAa,cAAAC,aAAA,CAAc;AACvBja,gBAAI,EAAE,KAAK7I,MAAL,CAAYgJ,EADK;AAEvB5I,oBAAQ,EAAE,KAAKA,QAFQ;AAGvB6X,gBAAI,EAAE,KAAK0J,WAHY;AAIvBkB,iBAAK,EAAE,CAAF,KAAE,KAAKF,QAAL,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAEI,aAJC;AAKvBP,iBAAK,EAAE,KAAKA;AALW,WAAd,CAAb,CArCW,CA6CX;;AACA,iBAAA69D,SAAA,CAAUz7E,MAAV,EAAkB,QAAlB,EACKuL,IADL,CACU,YAAAmwE,YAAA,CAAa,GAAb,CADV,EAEKnwE,IAFL,CAGQ,YAAAowE,GAAA,CAAI;AACA/yE,gBAAI,EAAE,cAACkjE,GAAD,EAAS;AACX,sBAAI,CAAC11B,MAAL,GAAc,OAAA3sC,oBAAA,CAAqB,QAAI,CAACC,UAA1B,CAAd;;AACA,sBAAI,CAAC4oF,cAAL;;AACA,sBAAI,CAACO,eAAL;AACH;AALD,WAAJ,CAHR,EAWKn6F,SAXL;AAYA,eAAKy5F,WAAL,CAAiB92F,QAAjB,CAA0B,KAAKD,MAA/B;AACA,eAAKu3F,iBAAL;AACH;;;oCAEkBx6F,O,EAAsB;AACrC,cAAIA,OAAO,CAACy6F,QAAZ,EAAsB;AAClB;AACA,iBAAKzqF,KAAL,CAAW4pF,SAAX,GAAuB,KAAKa,QAA5B;AACA,iBAAKzqF,KAAL,CAAWypF,SAAX,GAAuB;AACnBC,yBAAW,EAAE,KAAKe,QADC;AAEnBd,sBAAQ,EAAE,KAAKc;AAFI,aAAvB;AAIA,gBAAMn4F,IAAI,GAAG,KAAKW,MAAlB;AACA,iBAAKq3F,gBAAL,CAAsBh4F,IAAtB;AACH;;AAED,cAAI,KAAKq4F,YAAT,EAAuB,KAAKvxC,QAAL;AAEvB,cAAI,CAAC,KAAKquC,aAAV,EAAyB;;AAEzB,cAAIz3F,OAAO,CAACqS,QAAR,IAAoBrS,OAAO,CAACy6F,QAAhC,EAA0C;AACtC,iBAAKD,iBAAL;AACH;;AACD,cAAIx6F,OAAO,CAACqmF,0BAAZ,EAAwC;AACpC,iBAAKqU,eAAL;AACH;;AACD,cAAI16F,OAAO,CAACy6F,QAAZ,EAAsB;AAClB,iBAAKA,QAAL,GAAgB,KAAKnB,WAAL,CAAiB7oF,IAAjB,EAAhB,GAA0C,KAAK4oF,UAAL,CAAgB5oF,IAAhB,EAA1C;AACH;AACJ;;;0CAEwB;AACrB,cAAMmqF,SAAS,GAAG,UAAA/3C,cAAA,CAAe,KAAKwjC,0BAAL,CAAgCt8D,WAA/C,EAA4DpgB,KAA9E;AACA,cAAMkxF,eAAe,GAAG,KAAKxU,0BAAL,CAAgCtyE,aAAhC,CAA8C;AAACpK,iBAAK,EAAEixF;AAAR,WAA9C,EAAkEl7D,KAAlE,EAAxB,CAFqB,CAE8E;;AACnG,eAAKw6D,cAAL,GAAsB,KAAKA,cAAL,IAAuB,KAAK7T,0BAAL,CAAgC3mD,KAAhC,EAA7C;AACA,cAAIo7D,cAAc,GAAG,KAAKZ,cAAL,CAAoBluF,YAApB,CAAiC,MAAjC,CAArB,CAJqB,CAI0C;;AAC/D,cAAI,CAAC,KAAKitF,WAAV,EAAuB;AACnB;AACA6B,0BAAc,GAAGA,cAAc,CAAC33F,QAAf,CAAwB;AAAE4wB,kBAAI,EAAE;AAAR,aAAxB,CAAjB;AACH;;AAED,cAAI,KAAKkqB,MAAT,EAAiB;AACb,iBAAKi8C,cAAL,GAAsBW,eAAtB;AACA,iBAAKE,iBAAL,aAA4B,KAAKb,cAAL,CAAoBt2F,UAApB,CAA+B,QAA/B,CAA5B;AACA,iBAAKs1F,kBAAL,CAAwBzoF,IAAxB,CAA6B,KAAKypF,cAAlC;AACH,WAJD,MAIO;AACH,iBAAKA,cAAL,GAAsBW,eAAe,CAAC13F,QAAhB,CAAyB;AAAE4wB,kBAAI,EAAE,KAAKklE,WAAL,GAAmB,CAAnB,GAAuB;AAA/B,aAAzB,CAAtB,CADG,CACiF;;AACpF,iBAAK8B,iBAAL,aAA4BD,cAAc,CAACl3F,UAAf,CAA0B,QAA1B,CAA5B,gBAAqEk3F,cAAc,CAC9E33F,QADgE,CACvD;AAAE4wB,kBAAI,EAAE,KAAKklE,WAAL,GAAmB,CAAnB,GAAuB;AAA/B,aADuD,EAEhEr1F,UAFgE,CAErD,aAFqD,CAArE;AAGA,iBAAKs1F,kBAAL,CAAwBzoF,IAAxB,CAA6BqqF,cAA7B;AACH;AACJ;;;mCAEiB7jF,O,EAA6C;AAAA,cAA3BiW,QAA2B,uEAAP,KAAO;AAC3D,cAAMxZ,KAAK,GAAGuD,OAAO,CAACwO,KAAR,CAAc/R,KAAd,IAAuB,KAAK+R,KAAL,CAAW/R,KAAhD;AACA,cAAMsJ,KAAK,GAAG/F,OAAO,CAAC+F,KAAR,CAActJ,KAAd,IAAuBuD,OAAO,CAAC+F,KAAR,CAActJ,KAAd,IAAuB,EAA9C,GAAmD,CAAjE;AACA,cAAM2c,SAAS,GAAGpZ,OAAO,CAACoZ,SAAR,CAAkB3c,KAAlB,IAA2BuD,OAAO,CAACoZ,SAAR,CAAkB3c,KAAlB,IAA2B,EAAtD,GAA2D,CAA7E;AAEA,iBAAO;AACH21C,eAAG,EAAE;AACDA,iBAAG,aAAMrsC,KAAK,GAAG,CAAd,OADF;AAED9f,oBAAM,YAAK8f,KAAL,OAFL;AAGDg+E,6BAAe,EAAE9tE,QAAQ,GAAGnlB,MAAM,CAAC2wF,IAAP,CAAYF,SAAf,GAA2BzwF,MAAM,CAACwwF,IAAP,CAAYC;AAH/D,aADF;AAMHznB,kBAAM,EAAE;AACJA,oBAAM,aAAM1gD,SAAS,GAAG,CAAlB,OADF;AAEJnzB,oBAAM,YAAKmzB,SAAL,OAFF;AAGJ2qE,6BAAe,EAAE9tE,QAAQ,GAAGnlB,MAAM,CAAC2wF,IAAP,CAAYF,SAAf,GAA2BzwF,MAAM,CAACwwF,IAAP,CAAYC;AAH5D;AANL,WAAP;AAYH;;;yCAEuB;AACpB,eAAKkC,eAAL;AACA,cAAM1C,YAAY,GAAG,KAAKP,aAAL,CAAmB/3D,KAAnB,EAArB;AACA,cAAMksC,UAAU,GAAGosB,YAAY,CAAC90F,QAAb,CAAsB;AAAER,kBAAM,EAAE,CAAV;AAAaD,uBAAW,EAAE;AAA1B,WAAtB,CAAnB;AACA,eAAKuN,KAAL,CAAWxN,KAAX,GAAmBopE,UAAU,CAAC9qC,MAA9B;AACA,eAAK9wB,KAAL,CAAW2f,GAAX,GAAiBi8C,UAAU,CAACzoE,QAAX,CAAoB;AAAEJ,mBAAO,EAAE,KAAK+6C;AAAhB,WAApB,EAAuDhd,MAAxE;AACA,cAAMm6D,SAAS,GAAGx1F,QAAQ,CAACuyF,YAAY,CAACp0F,UAAb,CAAwB,GAAxB,CAAD,EAA+B,EAA/B,CAA1B;;AAEA,cAAIq3F,SAAS,KAAK,CAAlB,EAAqB;AACjB,iBAAKN,YAAL,GAAoBM,SAApB;AACH,WAFD,MAEO,IAAIA,SAAS,GAAG,CAAhB,EAAmB;AACtB,gBAAMj1F,MAAM,GAAGi1F,SAAS,GAAG,CAAZ,GAAgBA,SAAS,GAAG,CAA5B,GAAgCA,SAA/C;AACA,iBAAKN,YAAL,GAAoBM,SAAS,GAAGj1F,MAAhC;AACH,WAHM,MAGA;AACH;AACA;AACA,gBAAMA,OAAM,GAAGpD,IAAI,CAACq+B,GAAL,CAAS,EAAT,EAAag6D,SAAS,GAAG,CAAzB,CAAf;;AACA,iBAAKN,YAAL,GAAoB30F,OAApB;AACH;;AAED,cAAI,CAAC,KAAK8zF,WAAN,IAAqB,KAAKa,YAA9B,EAA4C;AACxC,iBAAKvxC,QAAL;AACH;;AAED,eAAK8xC,UAAL,GAAkBt4F,IAAI,CAACmD,GAAL,CAAS,EAAT,EAAa,KAAK40F,YAAL,GAAoB,CAAjC,CAAlB;AACA,eAAK3qF,KAAL,CAAWof,KAAX,aAAsB4oE,YAAY,CAC7Bp0F,UADiB,CACN,OADM,EAEjBmJ,iBAFiB,EAAtB,eAE6B,OAAA3J,iBAAA,CAAkB,KAAK06C,eAAvB,EAAwC,IAAxC,CAF7B;AAGA,eAAK9tC,KAAL,CAAWwpF,QAAX,sBAAkC,KAAKP,WAAL,GAAmB,cAAnB,GAAoC,EAAtE,cACI,KAAKh7C,MAAL,IAAe,KAAKw8C,QAApB,GAA+B,QAA/B,GAA0C,EAD9C;;AAIA,cAAI,KAAK3C,cAAT,EAAyB;AACrB,iBAAK9nF,KAAL,CAAWmrF,MAAX,GAAoB,KAAKC,UAAL,CAAgB,KAAKtD,cAArB,CAApB;AACA,iBAAK9nF,KAAL,CAAWiH,OAAX,GAAqB,KAAK6gF,cAA1B;AACH;;AACD,eAAK2C,QAAL,GAAgB,KAAKnB,WAAL,CAAiB7oF,IAAjB,EAAhB,GAA0C,KAAK4oF,UAAL,CAAgB5oF,IAAhB,EAA1C;AACH;;;4CAE0B;AAAA;;AACvB,eAAK4qF,YAAL;AACA,cAAMh9E,MAAM,GAAG,EAAf;;AACA,cAAIhP,KAAK,CAACsB,OAAN,CAAc,KAAK0B,QAAnB,CAAJ,EAAkC;AAC9B,iBAAKA,QAAL,CAAc3R,OAAd,CAAsB,UAAC46F,WAAD,EAAiB;AACnC,kBAAMrkF,OAAO,GAAG,IAAI,cAAAgQ,OAAJ,CAAYq0E,WAAZ,CAAhB;;AADmC,0CAER,QAAI,CAACC,YAAL,CACvBtkF,OAAO,CAAC/J,WAAR,CAAoBjB,EADG,EAEvBgL,OAAO,CAAC9J,SAAR,CAAkBlB,EAFK,CAFQ;AAAA,kBAE3BuwD,IAF2B,yBAE3BA,IAF2B;AAAA,kBAErBn5D,QAFqB,yBAErBA,QAFqB,EAOnC;;;AACA,kBAAIssB,GAAG,GAAG1Y,OAAO,CAAC9J,SAAlB;AACA,kBAAMylF,OAAO,GAAG37E,OAAO,CAAC9J,SAAxB;;AACA,kBAAIylF,OAAO,CAAC7vF,OAAR,KAAoB,CAApB,IAAyB6vF,OAAO,CAAC5+E,OAAR,KAAoB,CAAjD,EAAoD;AAChD;AACA2b,mBAAG,GAAG1Y,OAAO,CAAC9J,SAAR,CAAkB4G,aAAlB,CAAgC;AAAEC,yBAAO,EAAE;AAAX,iBAAhC,CAAN;AACH,eAbkC,CAenC;;;AACA,kBAAIiD,OAAO,CAAC1C,EAAR,KAAe,QAAI,CAAC06E,SAAxB,EAAmC;AAEnC,kBAAMuM,QAAQ,GAAGvkF,OAAO,CAAC/J,WAAzB,CAlBmC,CAkBG;;AACtC,kBAAMuuF,MAAM,GAAG9rE,GAAf,CAnBmC,CAmBf;AACpB;;AACA,kBAAM+rE,iBAAiB,GAAG,cAAAC,cAAA,CAAeH,QAAQ,CAACvvF,EAAxB,EAA4BgL,OAAO,CAAC/P,QAApC,CAA1B,CArBmC,CAqBsC;;AACzE,kBAAM00F,eAAe,GAAG,cAAAD,cAAA,CAAeF,MAAM,CAACxvF,EAAtB,EAA0BgL,OAAO,CAAC/P,QAAlC,CAAxB,CAtBmC,CAsBkC;;AAErEmX,oBAAM,CAAClU,IAAP,CAAY;AACR3H,qBAAK,EAAEk5F,iBADC;AAER/rE,mBAAG,EAAEisE,eAFG;AAGRxsE,qBAAK,sBAAenY,OAAO,CAAC8gB,MAAR,CAAe,MAAf,CAAf,CAHG;AAIR2mC,qBAAK,EAAE32D,MAAM,CAACwwF,IAJN;AAKRtlF,uBAAO,EAAE,IALD;AAMRumF,wBAAQ,mBAAY,QAAI,CAACv7C,MAAL,IAAe,QAA3B,cACJ,QAAI,CAACg7C,WAAL,GAAmB,cAAnB,GAAoC,EADhC,cAEJz8B,IAFI,CANA;AASR2+B,sBAAM,EAAE,QAAI,CAACC,UAAL,CAAgBnkF,OAAhB,CATA;AAURwiF,yBAAS,EAAE;AACPC,6BAAW,EAAE,KADN;AAEPC,0BAAQ,EAAE;AAFH,iBAVH;AAcRC,yBAAS,EAAE,KAdH;AAeR3iF,uBAAO,EAAPA;AAfQ,eAAZ;AAiBH,aAzCD;AA0CH;;AA9CsB,mCAgDI,KAAKskF,YAAL,CACvB,KAAKvrF,KAAL,CAAWxN,KAAX,CAAiBs4B,OAAjB,EADuB,EAEvB,KAAK9qB,KAAL,CAAW2f,GAAX,CAAemL,OAAf,EAFuB,CAhDJ;AAAA,cAgDf0hC,IAhDe,sBAgDfA,IAhDe;AAAA,cAgDTn5D,QAhDS,sBAgDTA,QAhDS;;AAoDvB,cAAM2M,KAAK,GAAGV,MAAM,CAACusF,MAAP,CAAc,EAAd,EAAkB,KAAK7rF,KAAvB,CAAd;AACA,cAAM4iF,OAAO,GAAG,IAAI,UAAAp/E,MAAJ,CAAW;AAAElR,gBAAI,EAAE,KAAK0N,KAAL,CAAWxN,KAAX,CAAiB2C,OAAjB;AAAR,WAAX,EAAiDhC,QAAjD,CAA0D;AACtEJ,mBAAO,EAAE,KAAK+6C;AADwD,WAA1D,CAAhB,CArDuB,CAuDnB;;AACJ,cAAI80C,OAAO,CAAC7vF,OAAR,KAAoB,CAApB,IAAyB6vF,OAAO,CAAClwF,MAAR,KAAmB,CAAhD,EAAmD;AAC/C;AACAsN,iBAAK,CAAC2f,GAAN,GAAYijE,OAAO,CAAC7+E,aAAR,CAAsB;AAAE+nF,0BAAY,EAAE;AAAhB,aAAtB,EAA2Ch7D,MAAvD,CAF+C,CAEgB;AAClE,WA3DsB,CA6DvB;AACA;;;AACA9wB,eAAK,CAACxN,KAAN,GAAc,cAAAm5F,cAAA,CAAe3rF,KAAK,CAACxN,KAArB,EAA4B,KAAK0E,QAAjC,CAAd,CA/DuB,CA+DmC;;AAC1D8I,eAAK,CAAC2f,GAAN,GAAY,cAAAgsE,cAAA,CAAe3rF,KAAK,CAAC2f,GAArB,EAA0B,KAAKzoB,QAA/B,CAAZ,CAhEuB,CAgE+B;;AAEtD8I,eAAK,CAACwpF,QAAN,sBAA6B,KAAKv7C,MAAL,IAAe,KAAKw8C,QAApB,GAA+B,QAA/B,GAA0C,EAAvE,eAA8Ej+B,IAA9E;;AACA,cAAI,KAAKs7B,cAAT,EAAyB;AACrB9nF,iBAAK,CAACmrF,MAAN,GAAe,KAAKC,UAAL,CAAgB,KAAKtD,cAArB,EAAqC,IAArC,CAAf;AACA9nF,iBAAK,CAACiH,OAAN,GAAgB,KAAK6gF,cAArB;AACH;;AAEDz5E,gBAAM,CAAClU,IAAP,CAAY6F,KAAZ;AACA,eAAKqO,MAAL,GAAcA,MAAM,CAACjW,KAAP,EAAd;AACA,eAAK2zF,eAAL;AACH;;;0CAEwB;AACrB,cAAM/D,YAAY,GAAG,KAAKP,aAAL,CAAmB/3D,KAAnB,EAArB;AACA,cAAMl9B,KAAK,GAAGw1F,YAAY,CAAC90F,QAAb,CAAsB;AAAER,kBAAM,EAAE,CAAV;AAAaD,uBAAW,EAAE;AAA1B,WAAtB,CAAd;AACA,cAAMktB,GAAG,GAAGntB,KAAK,CAACW,QAAN,CAAe;AAAEJ,mBAAO,EAAE,KAAK+6C;AAAhB,WAAf,CAAZ;AACA,cAAMk+C,MAAM,GAAG,KAAK39E,MAAL,CAAYnV,MAAZ,CAAmB,UAACyD,CAAD;AAAA,mBAAO,CAACA,CAAC,CAACitF,SAAV;AAAA,WAAnB,CAAf,CAJqB,CAImC;;AACxD,cAAMqC,QAAQ,GAAG,KAAKC,WAAL,CAAiB15F,KAAjB,EAAwBmtB,GAAxB,EAA6BqsE,MAA7B,CAAjB;AACA,cAAMG,QAAQ,GAAG,KAAK99E,MAAL,CAAYnV,MAAZ,CAAmB,UAACyD,CAAD;AAAA,mBAAOA,CAAC,CAACitF,SAAT;AAAA,WAAnB,CAAjB;;AACA,cAAGuC,QAAQ,CAAC33F,MAAZ,EAAqB;AACjB23F,oBAAQ,CAAC,CAAD,CAAR,CAAYz9B,KAAZ,GAAoBu9B,QAAQ,GAAGl0F,MAAM,CAAC4wF,GAAV,GAAgB5wF,MAAM,CAAC2wF,IAAnD;AACA,iBAAKa,mBAAL,GAA2B0C,QAAQ,GAAG,IAAH,GAAU,KAA7C;AAEH;;AACD,WAAC,KAAKxB,QAAN,IAAkB,KAAK1B,mBAAL,CAAyB/zC,IAAzB,CAA8B;AAAC1vB,gBAAI,EAAE,KAAK7P,KAAZ;AAAmBy2E,uBAAW,EAAED;AAAhC,WAA9B,CAAlB;AACH;;;qCACmBz5F,K,EAAemtB,G,EAAa;AAC5C,cAAMtsB,QAAQ,GAAGssB,GAAG,GAAGntB,KAAvB;AACA,iBAAO;AACHa,oBAAQ,EAARA,QADG;AAEHm5D,gBAAI,EAAEn5D,QAAQ,GAAG,KAAK+4F,wBAAhB,GAA2C,UAA3C,GAAwD;AAF3D,WAAP;AAIH;;;yCAEuBn5F,M,EAAgB;AACpC,cAAIo5F,MAAM,GAAG,UAAAtwF,OAAA,GAAUC,YAAV,CAAuB,QAAvB,CAAb;;AACA,cAAI/I,MAAJ,EAAY;AACRo5F,kBAAM,GAAGp5F,MAAM,CAAC+I,YAAP,CAAoB,QAApB,CAAT;AACH;;AACD,cAAI,CAAC,KAAKiyC,MAAN,IAAgBo+C,MAAM,CAACtmE,WAAP,KAAuB,CAA3C,EAA8C;AAC1CsmE,kBAAM,GAAGA,MAAM,CAACrwF,YAAP,CAAoB,MAApB,CAAT;AACH;;AACD,eAAK8sF,sBAAL,CAA4B9zC,IAA5B,CAAiCq3C,MAAjC;AACA,eAAK/C,WAAL,CAAiB7oF,IAAjB;AACA,eAAK41E,0BAAL,GAAkCgW,MAAlC;AACA,eAAK3B,eAAL;AACH;AAED;;;;;;;;;yDAMwC4B,U,EAAoB;AACxD,iBAAO,UAAAj6C,sCAAA,CAAuCi6C,UAAU,CAACrwF,EAAlD,EAAsD,KAAK/E,QAA3D,EAAqE+E,EAA5E;AACH;;;oCAEkBwmB,O,EAASC,K,EAAOspE,M,EAAQ;AAAA;;yBAAA,CACvC;;;AACA,cAAMO,kBAAkB,GAAG9pE,OAAO,CAACxmB,EAAnC;AACA,cAAMuwF,gBAAgB,GAAG9pE,KAAK,CAACzmB,EAA/B;AACA,cAAIyH,KAAK,GAAG,YAAK+R,KAAL,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAE/R,KAAZ,MAAiB,YAAI,KAAKokF,cAAT,MAAuB,IAAvB,IAAuB,aAAvB,GAAuB,MAAvB,GAAuB,GAAExiE,IAAzB,MAA6B,IAA7B,IAA6B,aAA7B,GAA6B,MAA7B,GAA6B,GAAE5hB,KAAhD,CAAZ;AACA,iBAAOsoF,MAAM,CAACj3E,IAAP,CAAY,UAACra,CAAD,EAAO;;;AACtBgJ,iBAAK,GAAGA,KAAK,iBAAIhJ,CAAC,CAACuM,OAAN,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAEqe,IAAf,MAAmB,IAAnB,IAAmB,aAAnB,GAAmB,MAAnB,GAAmB,GAAE5hB,KAArB,CAAb,CADsB,CAEtB;;AACA,gBAAMsJ,KAAK,GAAG,OAAAtS,CAAC,CAACuM,OAAF,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAE+F,KAAF,CAAQtJ,KAAR,CAAT,KAA2B,CAAzC,CAHsB,CAItB;;AACA,gBAAM+oF,gBAAgB,GAAG,IAAI,UAAAjpF,MAAJ,CAAW;AAAElR,kBAAI,EAAEoI,CAAC,CAAClI,KAAF,CAAQ2C,OAAR;AAAR,aAAX,CAAzB,CALsB,CAK4C;;AAClE,gBAAMu3F,cAAc,GAAG,IAAI,UAAAlpF,MAAJ,CAAW;AAAElR,kBAAI,EAAEoI,CAAC,CAACilB,GAAF,CAAMxqB,OAAN;AAAR,aAAX,CAAvB,CANsB,CAMwC;;AAC9D,gBAAMw3F,MAAM,GAAGF,gBAAgB,CAAC1oF,aAAjB,CAA+B;AAAEC,qBAAO,EAAEgJ;AAAX,aAA/B,EAAmD/Q,EAAlE;AACA,gBAAMokB,SAAS,GAAG,OAAA3lB,CAAC,CAACuM,OAAF,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAEoZ,SAAF,CAAY3c,KAAZ,CAAT,KAA+B,CAAjD;AACA,gBAAMkpF,IAAI,GAAGF,cAAc,CAACv5F,QAAf,CAAwB;AAAE6Q,qBAAO,EAAEqc;AAAX,aAAxB,EAAgDpkB,EAA7D;;AAEA,gBACKswF,kBAAkB,IAAII,MAAtB,IAAgCJ,kBAAkB,GAAGK,IAAtD,IAA+D;AAC9DL,8BAAkB,IAAII,MAAtB,IAAgCH,gBAAgB,GAAGG,MADpD,IAC+D;AAC9DJ,8BAAkB,IAAII,MAAtB,IAAgCH,gBAAgB,IAAII,IAFrD,IAE8D;AAC7DL,8BAAkB,IAAII,MAAtB,IAAgCH,gBAAgB,IAAII,IAJzD,CAI+D;AAJ/D,cAKE;AACE,uBAAO,OAAAlyF,CAAC,CAACuM,OAAF,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAE1C,EAAX,OAAa,MAAK,QAAI,CAACujF,cAAV,MAAwB,IAAxB,IAAwB,aAAxB,GAAwB,MAAxB,GAAwB,GAAEvjF,EAAvC,CAAP;AACH;;AACD,mBAAO,KAAP;AACH,WApBM,CAAP;AAqBH;;;kDAEmF;AAAA,cAAzDvE,KAAyD,UAAzDA,KAAyD;AAAA,cAAlD6sF,QAAkD,UAAlDA,QAAkD;AAAA,cAAxCC,MAAwC,UAAxCA,MAAwC;;;;AAChF,cAAMjlF,CAAC,GAAG,UAAAsqC,sCAAA,CACN06C,QAAQ,CAAC13F,OAAT,EADM,EAEN,KAAK+B,QAFC,CAAV;AAIA,cAAI2Q,CAAC,CAAC5L,EAAF,GAAO/J,IAAI,CAACunB,GAAL,EAAX,EAAuB,OALyD,CAMhF;AACA;;AACA,eAAKpL,MAAL,GAAc,KAAKA,MAAL,CAAYlW,GAAZ,CAAgB,UAAC40F,MAAD,EAAY;AACtC,gBAAI/sF,KAAK,CAACuE,EAAN,IAAYwoF,MAAM,CAACxoF,EAAP,KAAcvE,KAAK,CAACuE,EAApC,EAAwC;AACpC,qBAAO,MAAP,OAAO,CAAP,kBACOvE,KADP,CAAO,EACK;AACRxN,qBAAK,EAAEq6F,QADC;AAERltE,mBAAG,EAAEmtE;AAFG,eADL,CAAP;AAKH;;AACD,mBAAOC,MAAP;AACH,WATa,CAAd,CARgF,CAiB5E;;AAEJ,cAAIC,mBAAmB,GAAG,IAAI,UAAAxpF,MAAJ,CACtB;AAAElR,gBAAI,EAAEu6F,QAAQ,CAAC13F,OAAT;AAAR,WADsB,CAA1B;AAGA,cAAI83F,iBAAiB,GAAG,IAAI,UAAAzpF,MAAJ,CACpB;AAAElR,gBAAI,EAAEM,IAAI,CAACC,IAAL,CAAUi6F,MAAM,CAAC33F,OAAP,KAAiB,MAA3B,IAAmC;AAA3C,WADoB,CACgC;AADhC,WAAxB,CAtBgF,CA0BhF;;AACA63F,6BAAmB,CAAC95F,QAApB,CAA6B;AAAET,uBAAW,EAAE,CAAf;AAAkBC,kBAAM,EAAE;AAA1B,WAA7B;;AAEA,cAAIs6F,mBAAmB,GAAG,UAAAjxF,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAA1B,EAA+C;AAC3C;AACA;AACA,iBAAKs4F,iBAAL;AACA;AACH;;AAED,cAAI18C,eAAe,GAAGl7C,IAAI,CAACY,KAAL,CAClB,CAACy5F,iBAAiB,CAAChxF,EAAlB,GAAuB+wF,mBAAmB,CAAC/wF,EAA5C,IAAkD,EAAlD,GAAuD,IADrC,CAAtB,CApCgF,CAuChF;AACA;;AACA,cAAMixF,SAAS,GAAGF,mBAAmB,CAACt9D,KAApB,EAAlB,CAzCgF,CAyCjC;;AAC/C,cAAIoe,eAAe,IAAI,EAAvB,EAA2B;AACvB;AACA,gBAAMr6C,CAAC,GAAGq6C,eAAe,GAAG,EAA5B,CAFuB,CAGvB;AACI;AACA;AACJ;AACA;;AACA,gBAAMp6C,CAAC,GAAG+B,QAAQ,CAACy3F,SAAS,CAACt5F,UAAV,CAAqB,GAArB,CAAD,EAA4B,EAA5B,CAAlB;AACA,gBAAMu5F,EAAE,GAAGz5F,CAAC,GAAG,EAAf,CATuB,CAUvB;AACI;AACA;AACJ;AACA;AACA;AACH,WAhBD,MAgBO;AACH;AACA,gBAAMD,GAAC,GAAGq6C,eAAe,GAAG,EAA5B;;AACA,gBAAIr6C,GAAJ,EAAO,CACH;AACA;AACH;;AACD,iBAAK21F,aAAL,GAAqB,EAArB;AACH,WAlE+E,CAoEhF;;;AACA,cAAMgE,YAAY,GAAGH,iBAAiB,CAAChxF,EAAlB,GAAuB+wF,mBAAmB,CAAC/wF,EAAhE;;AACA,cAAImxF,YAAY,IAAI,KAAKC,iBAAL,GAAyB,CAA7C,EAAgD;AAC5C;AACAJ,6BAAiB,GAAGA,iBAAiB,CAAC95F,QAAlB,CAA2B;AAAE24F,0BAAY,EAAE;AAAhB,aAA3B,CAApB;AACH;;AAED,cAAI,CAAJ,KAAI,KAAKh2E,KAAL,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAE8e,UAAhB,EAA4B;AACxB,gBAAIw4D,YAAY,GAAG,KAAf,IAAoB,MAAG,KAAKt3E,KAAR,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAE8e,UAAnC,CAAJ,EAAmD;AAC/C;AACA,mBAAK41D,iBAAL;AACA;AACH;AACJ,WAjF+E,CAmFhF;;;AACA,cAAI8C,sBAAsB,GAAGN,mBAAmB,CAACt9D,KAApB,EAA7B;AACA,cAAI69D,oBAAoB,GAAGN,iBAAiB,CAACv9D,KAAlB,EAA3B,CArFgF,CAsFhF;;AACA,cAAI,KAAKo4D,cAAT,EAAyB;AACrB,gBAAM96E,KAAK,GAAG,KAAK86E,cAAL,CAAoB96E,KAApB,CAA0B,KAAK86E,cAAL,CAAoBryE,KAApB,CAA0B/R,KAApD,KAA8D,CAA5E;;AACA,gBAAIsJ,KAAJ,EAAW;AACP,kBAAMxa,MAAK,GAAGw6F,mBAAmB,CAACt9D,KAApB,EAAd;;AACA49D,oCAAsB,GAAG96F,MAAK,CAACuR,aAAN,CAAoB;AAAEC,uBAAO,EAAEgJ;AAAX,eAApB,CAAzB;AACH;;AACD,gBAAMqT,SAAS,GAAG,KAAKynE,cAAL,CAAoBznE,SAApB,CAA8B,KAAKynE,cAAL,CAAoBryE,KAApB,CAA0B/R,KAAxD,KAAkE,CAApF;;AACA,gBAAI2c,SAAJ,EAAe;AACX,kBAAMV,IAAG,GAAGstE,iBAAiB,CAAClpF,aAAlB,CAAgC;AAAEC,uBAAO,EAAE;AAAX,eAAhC,CAAZ;;AACAupF,kCAAoB,GAAG5tE,IAAG,CAACxsB,QAAJ,CAAa;AAAEJ,uBAAO,EAAEstB;AAAX,eAAb,CAAvB;AACH;AACJ,WAlG+E,CAoGhF;;;AACA,cAAM7tB,KAAK,GAAG86F,sBAAd;AACA,cAAM3tE,GAAG,GAAG4tE,oBAAZ;AACA,cAAMvB,MAAM,GAAG,KAAK39E,MAAL,CAAYnV,MAAZ,CAAmB,UAACyD,CAAD;AAAA,mBAAOA,CAAC,CAACitF,SAAF,KAAgB,KAAvB;AAAA,WAAnB,CAAf,CAvGgF,CAuGf;;AACjE,cAAMqC,QAAQ,GAAG,KAAKC,WAAL,CAAiB15F,KAAjB,EAAwBmtB,GAAxB,EAA6BqsE,MAA7B,CAAjB;AACA,eAAKhC,WAAL,CAAiB92F,QAAjB,CAA0BV,KAA1B;;AACA,cAAIy5F,QAAJ,EAAc;AACV;AACA,iBAAKzB,iBAAL;AACA;AACH,WA9G+E,CAgHhF;;;AACA,cAAI,KAAK/C,aAAL,KAAuBuF,mBAA3B,EAAgD;AAC5C,iBAAK7D,aAAL,GAAqB,IAArB;AACH,WAFD,MAEO,IAAI,KAAKr7C,eAAL,KAAyBA,eAA7B,EAA8C;AACjD,iBAAKq7C,aAAL,GAAqB,IAArB;AACH,WArH+E,CAuHhF;;;AACA,eAAK1B,aAAL,GAAqB,UAAAt1C,sCAAA,CAAuC66C,mBAAmB,CAAC/wF,EAA3D,EAA+D,KAAK/E,QAApE,CAArB,CAxHgF,CAwHoB;;AACpG,eAAK42C,eAAL,GAAuBA,eAAvB;AAEA,eAAKy8C,cAAL;AACA,eAAKC,iBAAL;AACH;;;oCAEkBxqF,K,EAA2B;AAC1C;AACA,cAAMwtF,iBAAiB,GAAG,UAAAr7C,sCAAA,CACtBnyC,KAAK,CAAC1N,IAAN,CAAW6C,OAAX,EADsB,EAEtB,KAAK+B,QAFiB,CAA1B,CAF0C,CAKvC;;AACH,cAAIurB,OAAO,GAAG+qE,iBAAiB,CAAC99D,KAAlB,EAAd;AACA,cAAIhN,KAAK,GAAGD,OAAO,CAACtvB,QAAR,CAAiB;AAAEJ,mBAAO,EAAE,KAAK+6C;AAAhB,WAAjB,CAAZ;;AAEA,cAAI0/C,iBAAiB,CAACvxF,EAAlB,GAAuB/J,IAAI,CAACunB,GAAL,EAA3B,EAAuC;AACnC;AACA;AACA;AACH,WAbyC,CAe1C;;;AACA,cAAI,KAAKguE,aAAL,CAAmBxrF,EAAnB,KAA0BwmB,OAAO,CAACxmB,EAAtC,EAA0C;AACtC;AACA;AACA,gBAAI,KAAK6rF,cAAT,EAAyB;AACrB,kBAAM96E,KAAK,GAAG,KAAK86E,cAAL,CAAoB96E,KAApB,CAA0B,KAAK86E,cAAL,CAAoBryE,KAApB,CAA0B/R,KAApD,KAA8D,CAA5E;;AACA,kBAAIsJ,KAAJ,EAAW;AACPyV,uBAAO,GAAGA,OAAO,CAAC1e,aAAR,CAAsB;AAAEC,yBAAO,EAAEgJ;AAAX,iBAAtB,CAAV;AACH;;AACD,kBAAMqT,SAAS,GACX,KAAKynE,cAAL,CAAoBznE,SAApB,CAA8B,KAAKynE,cAAL,CAAoBryE,KAApB,CAA0B/R,KAAxD,KAAkE,CADtE;;AAEA,kBAAI2c,SAAJ,EAAe;AACXqC,qBAAK,GAAGA,KAAK,CAACvvB,QAAN,CAAe;AAAEJ,yBAAO,EAAEstB;AAAX,iBAAf,CAAR;AACH;AACJ,aAbqC,CAetC;;;AACA,gBAAM2rE,MAAM,GAAG,KAAK39E,MAAL,CAAYnV,MAAZ,CAAmB,UAACyD,CAAD;AAAA,qBAAOA,CAAC,CAACitF,SAAF,KAAgB,KAAvB;AAAA,aAAnB,CAAf,CAhBsC,CAiBtC;;AACA,gBAAMqC,QAAQ,GAAG,KAAKC,WAAL,CAAiBzpE,OAAjB,EAA0BC,KAA1B,EAAiCspE,MAAjC,CAAjB;;AACA,gBAAIC,QAAJ,EAAc;AACV;AACA,mBAAKzB,iBAAL;AACA;AACH;;AAED,iBAAKrB,aAAL,GAAqB,IAArB;AACA,iBAAK1B,aAAL,GAAqB+F,iBAArB,CA1BsC,CA0BE;;AAExC,iBAAKjD,cAAL;AACA,iBAAKC,iBAAL;AACH;AACJ;;;mDAEiC;AAAA;;AAC9B,eAAKX,UAAL,GAAkB;AACdpC,yBAAa,EAAE,KAAKA,aADN;AAEd35C,2BAAe,EAAE,KAAKA,eAFR;AAGd76C,kBAAM,EAAE,KAAKA,MAHC;AAIdI,oBAAQ,EAAE,KAAKA,QAJD;AAKdoiB,iBAAK,EAAE,IAAI,cAAAC,KAAJ,CAAU,KAAKD,KAAf,CALO;AAMdK,iBAAK,EAAE,KAAKA,KANE;AAOdmpE,qBAAS,EAAE,KAAKA,SAPF;AAQd6I,0BAAc,EAAE,KAAKA;AARP,WAAlB;AAWA,cAAMzvD,SAAS,GAAG,KAAK63C,MAAL,CAAY5lE,IAAZ,CAAiB,4CAAAmvE,qCAAjB,EAAwD;AACtE5wE,gBAAI,EAAE,KAAKghF,UAD2D;AAEtEt/E,sBAAU,EAAE,WAF0D;AAGtE8xC,qBAAS,EAAE,KAH2D;AAItEC,yBAAa,EAAE;AAJuD,WAAxD,CAAlB;AAOAjkB,mBAAS,CAACqd,iBAAV,CAA4Bw5B,UAA5B,CAAuC3+E,SAAvC,CAAiD,UAACkD,CAAD,EAAY;AACzD;AACA,oBAAI,CAAC01F,aAAL,GAAqB,IAArB;AACA,oBAAI,CAAC1B,aAAL,GAAqBh0F,CAAC,CAACR,MAAvB;AACA,oBAAI,CAAC66C,eAAL,GAAuBr6C,CAAC,CAACJ,QAAzB;AAEAglC,qBAAS,CAACqd,iBAAV,CAA4B+3C,YAA5B,CAAyC;AACrCx6F,oBAAM,EAAEQ,CAAC,CAACR,MAD2B;AAErCI,sBAAQ,EAAE,QAAI,CAACy6C,eAFsB;AAGrC25C,2BAAa,EAAE,QAAI,CAACA,aAHiB;AAIrC35C,6BAAe,EAAE,QAAI,CAACA;AAJe,aAAzC;;AAMA,oBAAI,CAACy8C,cAAL;;AACA,oBAAI,CAACC,iBAAL,GAbyD,CAczD;;;AACA,oBAAI,CAACF,gBAAL,CAAsB72F,CAAC,CAACR,MAAxB;AACH,WAhBD;AAkBAolC,mBAAS,CAACyd,WAAV,GAAwBvlD,SAAxB,CAAkC,UAACkD,CAAD,EAAO;AACrC;AACA,gBAAIA,CAAJ,EAAO;AACH;AACA,kBAAMmrE,YAAY,GAAG,UAAAzsB,sCAAA,CACjB1+C,CAAC,CAACR,MAAF,CAASgJ,EADQ,EAEjB,QAAI,CAAC/E,QAFY,CAArB;AAIA,sBAAI,CAACjE,MAAL,GAAc2rE,YAAd;AACA,sBAAI,CAACvrE,QAAL,GAAgBI,CAAC,CAACJ,QAAlB;AACA,sBAAI,CAAC+2F,UAAL,GAAkB,IAAI,UAAA5mF,MAAJ,CAAW;AACzBlR,oBAAI,EAAE,QAAA2C,QAAA,CAASo1F,OAAT,CAAiBzrB,YAAY,CAAChrE,UAAb,CAAwB,YAAxB,CAAjB;AADmB,eAAX,EAEfV,QAFe,CAEN;AAAE0B,oBAAI,EAAE,EAAR;AAAYjC,sBAAM,EAAE;AAApB,eAFM,CAAlB;AAGA,sBAAI,CAACw2F,aAAL,GAAqB,KAArB;;AACA,sBAAI,CAACP,cAAL,CAAoB5zC,IAApB,CAAyB,MAAD,OAAC,CAAD,kBAAMvhD,CAAN,CAAC,EAAM;AAAEw6C,sBAAM,EAAE,QAAI,CAACA,MAAf;AAAuB5E,oBAAI,EAAE;AAA7B,eAAN,CAAzB;AACH,aAbD,MAaO;AACH;AACA,kBAAM8jD,EAAE,GAAG,QAAI,CAACtD,UAAhB;AACA,sBAAI,CAAC52F,MAAL,GAAck6F,EAAE,CAACl6F,MAAjB;AACA,sBAAI,CAACI,QAAL,GAAgB85F,EAAE,CAAC95F,QAAnB;AACA,sBAAI,CAACo0F,aAAL,GAAqB0F,EAAE,CAACl6F,MAAxB;AACA,sBAAI,CAAC66C,eAAL,GAAuBq/C,EAAE,CAAC95F,QAA1B;AACA,sBAAI,CAAC+2F,UAAL,GAAkB,IAAI,UAAA5mF,MAAJ,CAAW;AACzBlR,oBAAI,EAAE,QAAA2C,QAAA,CAASo1F,OAAT,CAAiB8C,EAAE,CAACl6F,MAAH,CAAUW,UAAV,CAAqB,YAArB,CAAjB;AADmB,eAAX,EAEfV,QAFe,CAEN;AAAE0B,oBAAI,EAAE,EAAR;AAAYjC,sBAAM,EAAE;AAApB,eAFM,CAAlB;AAGA,sBAAI,CAACw2F,aAAL,GAAqB,KAArB,CAVG,CAWH;;AACA,sBAAI,CAACP,cAAL,CAAoB5zC,IAApB,CAAyB;AACrB/hD,sBAAM,EAAEk6F,EAAE,CAACl6F,MADU;AAErBI,wBAAQ,EAAE,QAAI,CAACA,QAFM;AAGrB46C,sBAAM,EAAE,QAAI,CAACA,MAHQ;AAIrB5E,oBAAI,EAAE,CAAC,CAAC51C;AAJa,eAAzB;;AAMA,sBAAI,CAAC82F,cAAL;;AACA,sBAAI,CAACC,iBAAL;;AACA,sBAAI,CAAClB,WAAL,CAAiB7oF,IAAjB;;AACA,sBAAI,CAAC41E,0BAAL,GAAkC,QAAI,CAAC+T,UAAvC;;AACA,sBAAI,CAACM,eAAL;AACH;AACJ,WAvCD;AAwCH;;;mCAEiB;AACd7yF,gBAAM,CAACyS,IAAP,CAAY,OAAA2jE,IAAA,CAAKC,IAAjB;AACH;;;mCAEiB;AAAA;;AACd,cAAI,KAAK4b,WAAT,EAAsB;AACtB,eAAK74F,OAAL,CACI,WADJ,EAEI,YAAM;AACF,gBAAMy8F,GAAG,GAAG7vF,QAAQ,CAAC8vF,cAAT,CAAwB,yBAAxB,CAAZ;;AACA,gBAAID,GAAJ,EAAS;AACLA,iBAAG,CAACt0C,QAAJ,CAAa;AACTC,mBAAG,EAAE,QAAI,CAACsxC,YAAL,GAAoB,EADhB;AAETpxC,oBAAI,EAAE,CAFG;AAGTC,wBAAQ,EAAE;AAHD,eAAb;AAKA,sBAAI,CAACswC,WAAL,GAAmB,IAAnB;AACH;AACJ,WAZL,EAaI,GAbJ;AAeH;;;2CAEyB;AACtB,eAAKd,cAAL,GAAsB,CAAC,KAAKA,cAA5B;AACH;;;mCAEiB;AACd,eAAKH,YAAL,CAAkB7zC,IAAlB,CAAuB,KAAvB,EADc,CAEd;;AACA,eAAKyyC,aAAL,GAAqB,KAAKx0F,MAA1B,CAHc,CAGoB;;AAClC,eAAK66C,eAAL,GAAuB,KAAKz6C,QAA5B;AACA,eAAK+2F,UAAL,GAAkB,IAAI,UAAA5mF,MAAJ,CAAW;AACzBlR,gBAAI,EAAE,QAAA2C,QAAA,CAASo1F,OAAT,CAAiB,KAAKp3F,MAAL,CAAYW,UAAZ,CAAuB,YAAvB,CAAjB;AADmB,WAAX,EAEfV,QAFe,CAEN;AAAE0B,gBAAI,EAAE,EAAR;AAAYjC,kBAAM,EAAE;AAApB,WAFM,CAAlB;AAGA,eAAKw2F,aAAL,GAAqB,KAArB;AACA,eAAKoB,cAAL;AACA,eAAKC,iBAAL;AACA,eAAKnB,UAAL,CAAgB5oF,IAAhB;AACH;;;uCAEqB;AAClB,cAAIqrD,KAAK,GAAG,KAAKuqB,0BAAjB,CADkB,CAC2B;;AAC7C,cAAI,KAAKpoC,MAAT,EAAiB;AACb6d,iBAAK,GAAGA,KAAK,CAAC/nD,aAAN,CAAoB;AAAEggB,kBAAI,EAAE;AAAR,aAApB,CAAR;AACH,WAFD,MAEO;AACH+nC,iBAAK,GAAGA,KAAK,CAAC/nD,aAAN,CAAoB;AAAE8oB,mBAAK,EAAE;AAAT,aAApB,EAAkC7wB,YAAlC,CAA+C,KAA/C,CAAR;AACH;;AACD,eAAK8sF,sBAAL,CAA4B9zC,IAA5B,CAAiC8W,KAAjC;AACA,eAAKw9B,WAAL,CAAiB7oF,IAAjB;AACA,eAAK41E,0BAAL,GAAkCvqB,KAAlC;AACA,eAAK4+B,eAAL;AACH;;;uCAEqB;AAClB,cAAI5+B,KAAK,GAAG,KAAK27B,aAAjB,CADkB,CACc;;AAChC,cAAI,KAAKx5C,MAAL,IAAe,CAAC,KAAKw8C,QAAzB,EAAmC;AAC/B,iBAAKV,SAAL,CAAev3F,KAAf,GAAuBs5D,KAAK,CAAC9vD,YAAN,CAAmB,KAAnB,EAA0BC,EAAjD;AACA,iBAAK8tF,SAAL,CAAepqE,GAAf,GAAqBmsC,KAAK,CAACnpC,UAAN,CAAiB,KAAjB,EAAwB1mB,EAA7C;AACH,WAHD,MAGO;AACH,iBAAK8tF,SAAL,CAAev3F,KAAf,GAAuBs5D,KAAK,CAAC9vD,YAAN,CAAmB,MAAnB,EAA2BC,EAAlD;AACA,iBAAK8tF,SAAL,CAAepqE,GAAf,GAAqBmsC,KAAK,CAACnpC,UAAN,CAAiB,MAAjB,EAAyB1mB,EAA9C;AACH;AACJ;;;yCAEuB;AACpB,cAAI6vD,KAAK,GAAG,KAAK27B,aAAL,CAAmBzrF,YAAnB,CAAgC,KAAhC,CAAZ;;AACA,cAAI,CAAC,KAAKiyC,MAAV,EAAkB;AACd6d,iBAAK,GAAGA,KAAK,CAAC9vD,YAAN,CAAmB,MAAnB,CAAR;AACH;;AAED,eAAK8sF,sBAAL,CAA4B9zC,IAA5B,CAAiC8W,KAAjC;AACA,eAAKw9B,WAAL,CAAiB7oF,IAAjB;AACA,eAAK41E,0BAAL,GAAkCvqB,KAAlC;AACA,eAAK4+B,eAAL;AACH;;;0CAEwB;AACrB,cAAI5+B,KAAK,GAAG,KAAKuqB,0BAAjB,CADqB,CACuB;;AAC5C,cAAI,KAAKpoC,MAAT,EAAiB;AACb6d,iBAAK,GAAGA,KAAK,CAAC34D,QAAN,CAAe;AAAE4wB,kBAAI,EAAE;AAAR,aAAf,CAAR;AACH,WAFD,MAEO;AACH+nC,iBAAK,GAAGA,KAAK,CAAC34D,QAAN,CAAe;AAAE05B,mBAAK,EAAE;AAAT,aAAf,EAA6B7wB,YAA7B,CAA0C,KAA1C,CAAR;AACH;;AACD,eAAK8sF,sBAAL,CAA4B9zC,IAA5B,CAAiC8W,KAAjC;AACA,eAAKw9B,WAAL,CAAiB7oF,IAAjB;AACA,eAAK41E,0BAAL,GAAkCvqB,KAAlC;AACA,eAAK4+B,eAAL;AACH;;;wCAEsB;AACnB,eAAKzB,WAAL,GAAmB,CAAC,KAAKA,WAAzB;AACA,eAAKsB,cAAL;AACH;;;4BApsBkB;AACf,iBAAO,KAAKt3F,MAAL,CAAY8mB,WAAnB;AACH;;;4BAE8B;AAC3B,iBAAO,QAAP;AACH;;;4BAEqC;AAClC,iBAAO,OAAP;AACH;;;4BAqBmB;AAChB,iBAAO,KAAKmvE,kBAAL,CAAwB9lF,IAAxB,CAA6B,YAAAjL,GAAA,CAAI,UAAC1E,CAAD;AAAA,mBAAOA,CAAP;AAAA,WAAJ,CAA7B,CAAP;AACH;;;4BAEqB;AAClB,iBAAO,OAAA66E,mBAAA,CAAoB,KAAKC,WAAzB,CAAP;AACH;;;;MArGiD,OAAA7gF,S;;AANtD;;;uBAMaurF,gC,EAAgC,kC;AAAA,K;;;YAAhCA,gC;AAAgC,gD;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClF7C;AACI;AACI;AAOJ;AACA;AACI;AAUA;AA2IA;AAOJ;AACJ;;;;AArKY;AAAA;AAOwC;AAAA;AAExC;AAAA;AASC;AAAA;AA2IqC;AAAA;;;;;;;;;;;2BD9ErCA,gC,EAAgC;cAN5C,OAAA7iC,SAM4C;eANlC;AACPlnD,kBAAQ,EAAE,2BADH;AAEPmnD,qBAAW,EAAE,4CAFN;AAGPC,mBAAS,EAAE,CAAC,4CAAD,CAHJ;AAIP4B,yBAAe,EAAE,OAAAC,uBAAA,CAAwBC;AAJlC,S;AAMkC,Q;;;;;;gBACxC,OAAAyB,S;iBAAU,iB;;;gBAEV,OAAAjoD;;;gBAEA,OAAAA;;;gBACA,OAAAA;;;gBAEA,OAAAA;;;gBAGA,OAAAA;;;gBACA,OAAAA;;;gBACA,OAAAA;;;gBACA,OAAAA;;;gBACA,OAAAA;;;gBACA,OAAAA;;;gBAEA,OAAAA;;;gBACA,OAAAA;;;gBAGA,OAAA2kD;;;gBACA,OAAAA;;;gBACA,OAAAA;;;gBACA,OAAAA;;;;;;;;;;;;;;;;;;;;;;;;AE3GL;AAAA;AAAA;;AAUA;AAAA;AAAA;;AAOA;AAAA;AAAA;;AAMA;AAAA;AAAA;;AAUA;AAAA;AAAA;;AAGA;AAAA;AAAA;;AASA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC2BgB;AACI;AAGJ;;;;;;;AA2FI;AAAkE;AAAyD;;;;;;AAC3H;AACI;AACA;AAEJ;;;;;;AACA;AACI;AACA;AACJ;;;;;;;;;;;;AAxLhB;AACQ;AAAA;AAAA;AAAA;AAAA;AAMJ;AACI;AACI;AAAA;AAIiB;AACjB;AAAA;AACA;AACI;AAOI;AAAA;AAAA;AAAA,6BAAa,OAAb;AAAoB,SAApB;AAPJ;AASA;AAAA;AACI;AACI;AAGR;AAAA;AACJ;AACJ;AACA;AACI;AASJ;AACJ;AACA;AACI;AAMkB;AAA0B;AAChD;AAEA;AACI;AAWI;AAAA;AAAA;AAAA,4DAAqD6K,MAAM,CAAC1Q,IAAP,EAArD;AAAkE,SAAlE,EAAoE,gBAApE,EAAoE;AAAA;AAAA;AAAA;AAAA,SAApE,EAAoE,cAApE,EAAoE;AAAA;AAAA;AAAA;AAAA,SAApE;AAOJ;AACA;AAEI;AAAA;AAAA;AAAA;AAAA;AAFJ;AAII;AACA;AAKJ;AAAA;AACJ;AAEA;AACI;AACI;AASA;AAAA;AAAA;AAAA,2DAAoD0Q,MAAM,CAAC1Q,IAAP,EAApD;AAAiE,SAAjE,EAAmE,gBAAnE,EAAmE;AAAA;AAAA;AAAA;AAAA,SAAnE;AAKA;AACJ;AACA;AACI;AAAA;AAIe;AACf;AAAA;AACA;AACI;AAOA;AAAA;AACI;AACA;AAGJ;AAAA;AACJ;AACJ;AACA;AACI;AAAA;AAIkB;AAClB;AAAA;AACA;AACI;AASA;AAAA;AACI;AACI;AAGR;AAAA;AACJ;AACJ;AACJ;AAEA;AACI;AACI;AAAA;AAI0D;AAC1D;AAAA;AACA;AACI;AAKI;AAAA;AAAA;AAAA,8BAAa,OAAb;AAAoB,SAApB;AACH;AACL;AACA;AAEI;AACA;AAKA;AAIJ;AACJ;AACJ;AACJ;;;;;AAvLQ;AAIe;AAAA;AAaH;AAAA;AAQJ;AAAA;AAAA;AAQA;AAAA,qDAAuB,UAAvB,EAAuB,IAAvB,EAAuB,UAAvB,EAAuB,eAAvB;AAWR;AAAA;AADA,qvBAA2M,SAA3M,EAA2M,4BAA3M;AAYI;AAAA,wCAAiB,oBAAjB,EAAiB,IAAjB,EAAiB,SAAjB,EAAiB,cAAjB,EAAiB,eAAjB,EAAiB,IAAjB,EAAiB,aAAjB,EAAiB,KAAjB,EAAiB,iBAAjB,EAAiB,sBAAjB,EAAiB,SAAjB,EAAiB,cAAjB,EAAiB,oBAAjB,EAAiB,IAAjB;AAoBK;AAAA;AAYL;AAAA,yCAAkB,oBAAlB,EAAkB,IAAlB,EAAkB,SAAlB,EAAkB,qBAAlB,EAAkB,eAAlB,EAAkB,IAAlB,EAAkB,aAAlB,EAAkB,KAAlB,EAAkB,iBAAlB,EAAkB,wBAAlB,EAAkB,oBAAlB,EAAkB,IAAlB;AAoBA;AAAA;AAAA;AAcI;AAAA;AAAA;AAsCiC;AAAA;AAW9B;AAAA;AACA;AAAA;AAKA;AAAA;;;;QDzHV2oC,+B;;;;;AA8ET,+CACY33D,OADZ,EAEYksE,SAFZ,EAGY5kF,KAHZ,EAII6oD,KAJJ,EAKYz0B,MALZ,EAKkC;AAAA;;AAAA;;AAC9B,uCAAMy0B,KAAN;AALQ,iBAAAnwC,OAAA,GAAAA,OAAA;AACA,iBAAAksE,SAAA,GAAAA,SAAA;AACA,iBAAA5kF,KAAA,GAAAA,KAAA;AAEA,iBAAAo0B,MAAA,GAAAA,MAAA;AAhFZ;;AACgB,iBAAAx5B,KAAA,GAAQ,CAAR;AAChB;;AACgB,iBAAAiqF,aAAA,GAAgB,EAAhB;AAChB;;AACgB,iBAAA5mF,OAAA,GAAmB,IAAnB;AAChB;;AACiB,iBAAAioE,UAAA,GAAa,IAAI,OAAAx7B,YAAJ,EAAb;AACjB;;AACiB,iBAAAy7B,YAAA,GAAe,IAAI,OAAAz7B,YAAJ,EAAf;AASjB;;AACO,iBAAAo6C,QAAA,GAAW,KAAX;AAKP;;AACO,iBAAAC,aAAA,GAAgB,IAAI,OAAA3/E,OAAJ,EAAhB;AACP;;AACO,iBAAAsxE,WAAA,GAAc,EAAd;AACP;;AACO,iBAAAvqE,OAAA,GAAU,IAAI,OAAApnB,eAAJ,CAAyC,EAAzC,CAAV;AACP;;AACO,iBAAAgvB,eAAA,GAAkB,IAAI,OAAAhvB,eAAJ,CAAyC,EAAzC,CAAlB;AACA,iBAAAigG,aAAA,GAAgB,IAAI,OAAAjgG,eAAJ,CAAyC,EAAzC,CAAhB;AACA,iBAAA0qD,iBAAA,GAAoB,KAApB;AACA,iBAAA63B,YAAA,GAAe,KAAf;AACA,iBAAA7vD,SAAA,GAAqB,IAArB;AACA,iBAAAwtE,WAAA,GAAc,IAAd;AACA,iBAAAC,mBAAA,GAAsB,EAAtB;AACA,iBAAAC,iBAAA,GAAoB,IAAI,OAAApgG,eAAJ,CAAyC,EAAzC,CAApB;AACA,iBAAAqgG,cAAA,GAAiB,IAAI,OAAArgG,eAAJ,CAAyC,EAAzC,CAAjB;AAEP;;AACO,iBAAAsgG,gBAAA,GAAmB,IAAI,QAAA39D,SAAJ,CAAc;AACpCxJ,mBAAS,EAAE,IAAI,QAAA+G,WAAJ,EADyB;AAEpC7O,eAAK,EAAE,IAAI,QAAA6O,WAAJ,CAAgB,EAAhB,EAAoB,CAAE,QAAAE,UAAA,CAAWG,SAAX,CAAqB,CAArB,CAAF,CAApB,CAF6B;AAGpCrH,mBAAS,EAAE,IAAI,QAAAgH,WAAJ,EAHyB;AAIpCzR,cAAI,EAAE,IAAI,QAAAyR,WAAJ,CAAgB,EAAhB,EAAoB,CAAC,QAAAE,UAAA,CAAWG,SAAX,CAAqB,CAArB,CAAD,EAA0B,QAAAH,UAAA,CAAWqgB,OAAX,CAAmB,gBAAnB,CAA1B,CAApB,CAJ8B;AAKpCjnB,eAAK,EAAE,IAAI,QAAA0G,WAAJ,EAL6B;AAMpCgtB,oBAAU,EAAE,IAAI,QAAAhtB,WAAJ,CAAgB,CAAhB,EAAmB,CAAC,QAAAE,UAAA,CAAWC,QAAZ,EAAsB,QAAAD,UAAA,CAAW8C,GAAX,CAAe,CAAf,CAAtB,CAAnB,CANwB;AAOpCylB,mBAAS,EAAE,IAAI,QAAAzoB,WAAJ,EAPyB;AAQpCwxD,mBAAS,EAAE,IAAI,QAAAxxD,WAAJ,EARyB;AASpCnG,iBAAO,EAAE,IAAI,QAAAmG,WAAJ,EAT2B;AAUpC/F,iBAAO,EAAE,IAAI,QAAA+F,WAAJ;AAV2B,SAAd,CAAnB,CAsC2B,CAzBlC;;AACA,iBAAAqgE,iBAAA,GAA6B,KAA7B;AAwBkC;AAEjC;;;;mCAEc;AAAA;;AACX;;AACA,eAAKj+F,YAAL,CAAkB,aAAlB,EAAiC,KAAK2Y,KAAL,CAAWgC,MAAX,CAAkB,OAAAC,iBAAlB,EAC5B7H,IAD4B,CACvB,YAAA+H,IAAA,CAAK,CAAL,CADuB,EAE5B5a,SAF4B,CAElB,UAAC2a,IAAD,EAAgB;AACvB;AACA,oBAAI,CAAC0J,WAAL,GAAmB,IAAI,cAAAgS,IAAJ,CAAS1b,IAAT,CAAnB;AACH,WAL4B,CAAjC;;AAQA,eAAKkyB,MAAL,CAAYvyB,WAAZ,CAAwBzH,IAAxB,CAA6B,YAAAyG,KAAA,CAAM,UAACC,CAAD;AAAA,mBAAOA,CAAP;AAAA,WAAN,CAA7B,EAA8CvZ,SAA9C,CAAwD,YAAM;AAC1D,gBAAM2a,IAAI,GAAS,QAAI,CAACkyB,MAAL,CAAYpP,OAA/B;AACA,gBAAM0e,SAAS,GAAGxhC,IAAI,CAACwhC,SAAL,CAAev0C,GAAf,CAAmB,UAACs3C,GAAD,EAAS;AAC1C;AACA,kBAAM+vC,MAAM,GAAG,QAAI,CAACpiD,MAAL,CAAYtnC,IAAZ,CAAiB25C,GAAG,CAAC/rC,KAArB,CAAf;;AACA,qBAAO87E,MAAM,GACT,IAAI,cAAA54D,IAAJ,CAAS;AAAEljB,qBAAK,EAAE87E,MAAM,CAAC97E,KAAhB;AAAuBrV,oBAAI,EAAEmxF,MAAM,CAACnxF,IAApC;AAA0C65B,uBAAO,EAAEunB,GAAG,CAACvnB;AAAvD,eAAT,CADS,GAET,IAAI,cAAAtB,IAAJ,CAAS;AAAEljB,qBAAK,EAAE+rC,GAAG,CAAC/rC,KAAb;AAAoBrV,oBAAI,EAAEohD,GAAG,CAAC/rC,KAAJ,CAAUpP,KAAV,CAAgB,GAAhB,EAAqB,CAArB,EAAwBA,KAAxB,CAA8B,GAA9B,EAAmC6D,GAAnC,CAAuC,UAAC0P,CAAD;AAAA,yBAAOA,CAAC,CAACw4B,MAAF,CAAS,CAAT,EAAY3+B,WAAZ,KAA4BmG,CAAC,CAAClI,SAAF,CAAY,CAAZ,CAAnC;AAAA,iBAAvC,EAClChE,IADkC,CAC7B,GAD6B,CAA1B;AAEPusB,uBAAO,EAAEunB,GAAG,CAACvnB;AAFN,eAAT,CAFJ,CAH0C,CAS1C;AACC,aAVa,CAAlB;;AAWA,gBAAIwkB,SAAS,CAACl4C,MAAd,EAAsB;AAClB,sBAAI,CAAC87E,YAAL,GAAoB,IAApB;AACH;;AACD,oBAAI,CAACmP,SAAL,GAAiB,CAACv0E,IAAD,EAAOsZ,MAAP,CAAckoB,SAAd,CAAjB;AACA,oBAAI,CAACgzC,WAAL,GAAmB,QAAI,CAACD,SAAL,CAAetnF,GAAf,CAAmB,UAAA5E,CAAC;AAAA,qBAAK;AAAEgL,uBAAO,EAAEhL,CAAC,CAAClF,IAAb;AAAmBmH,qBAAK,EAAEjC,CAAC,CAACmQ,KAA5B;AAAmC8T,oBAAI,EAAE;AAAEtM,sBAAI,EAAE3X;AAAR;AAAzC,eAAL;AAAA,aAApB,CAAnB;AACH,WAlBD,EAVW,CA8BX;;;AACA,eAAKlD,YAAL,CAAkB,WAAlB,EAA+B,KAAK2Y,KAAL,CAAWgC,MAAX,CAAkB,cAAA6O,gBAAlB,EAC1BzW,IAD0B,CACrB,YAAA+H,IAAA,CAAK,CAAL,CADqB,EAE1B5a,SAF0B,CAEhB,UAACkQ,IAAD,EAAuC;;;AAC9C,gBAAIA,IAAJ,EAAU;AACN;AADM,2BAEwB,CAAH,KAAGA,IAAI,CAACguE,YAAL,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAEh5D,KAF3C;AAAA,kBAEE1b,OAFF,UAEEA,OAFF;AAAA,kBAEW0R,QAFX,UAEWA,QAFX;;AAGN,kBAAM0vC,eAAe,GAAG,CAAAphD,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAE0tB,cAAT,MAA2Bhc,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAEgc,cAArC,CAAxB;AACA,kBAAM2zB,iBAAiB,GAAG,CAAH,iBAAG36C,IAAI,CAACguE,YAAR,MAAoB,IAApB,IAAoB,aAApB,GAAoB,MAApB,GAAoB,GAAE74D,QAAtB,MAA8B,IAA9B,IAA8B,aAA9B,GAA8B,MAA9B,GAA8B,GAAEwY,QAA7B,MAAqC,IAArC,IAAqC,aAArC,GAAqC,MAArC,GAAqC,GAAE3G,cAAjE;AACA,sBAAI,CAACgxB,iBAAL,GAAyB0C,eAAe,KAAK5mD,SAApB,GAAgC4mD,eAAhC,GAAkDC,iBAAiB,KAAK7mD,SAAtB,GAAkC6mD,iBAAlC,GAAqD,KAAhI;;AAGA,kBAAI,QAAI,CAAC3C,iBAAT,EAA4B;AACxB,wBAAI,CAAC41C,gBAAL,CAAsB1uD,QAAtB,CAA+BnjB,IAA/B,CAAoCkS,aAApC,CAAkD,CAAC,QAAAP,UAAA,CAAWC,QAAZ,EAAsB,QAAAD,UAAA,CAAWG,SAAX,CAAqB,CAArB,CAAtB,EAA+C,QAAAH,UAAA,CAAWqgB,OAAX,CAAmB,gBAAnB,CAA/C,CAAlD;AACH,eAVK,CAWN;;;AACA,kBAAMr5B,OAAO,GAAG,EAAhB;AACA,kBAAM8R,SAAS,GAAG,CAAAxmB,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEwmB,SAAN,KAAmB,EAArC;AACA,kBAAMC,SAAS,GAAG,CAAAzmB,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEymB,SAAN,KAAmB;AAAE3oB,uBAAO,EAAE,QAAI,CAACqW,WAAL,CAAiBvmB,IAA5B;AAAmCmH,qBAAK,EAAE,QAAI,CAACof,WAAL,CAAiBlR,KAA3D;AAAkE8T,oBAAI,EAAE;AAAEiU,0BAAQ,EAAE,KAAZ;AAAmBvgB,sBAAI,EAAE,QAAI,CAAC0J;AAA9B;AAAxE,eAArC;AACA,kBAAMkT,OAAO,GAAG,CAAArnB,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEqnB,OAAN,KAAiB,EAAjC;AAEA,kBAAMI,OAAO,GAAG,CAAAznB,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAEynB,OAAN,KAAiB,KAAjC;AACA,sBAAI,CAAC3kB,MAAL,GAAc9C,IAAI,CAAC8C,MAAL,IAAe,KAA7B,CAlBM,CAmBN;;AACA,sBAAI,CAAC8qF,gBAAL,CAAsBn7F,QAAtB,CAA+B;AAC3Bg0B,yBAAS,EAATA,SAD2B;AAE3B9H,qBAAK,EAAE3e,IAAI,CAAC2e,KAAL,IAAc,EAFM;AAG3B6H,yBAAS,EAATA,SAH2B;AAI3BzK,oBAAI,EAAE/b,IAAI,CAAC+b,IAAL,IAAa,EAJQ;AAK3B+K,qBAAK,EAAE9mB,IAAI,CAAC8mB,KAAL,IAAc,EALM;AAM3B0zB,0BAAU,EAAEx6C,IAAI,CAACw6C,UAAL,IAAmB,EANJ;AAO3BvE,yBAAS,EAAE,EAPgB;AAQ3B+oC,yBAAS,EAAE,EARgB;AAS3B33D,uBAAO,EAAPA,OAT2B;AAU3BI,uBAAO,EAAEA;AAVkB,eAA/B;;AAYA,sBAAI,CAACnL,eAAL,CAAqBtc,IAArB,CAA0BwmB,SAA1B;;AACA,sBAAI,CAAC9R,OAAL,CAAa1U,IAAb,CAAkBwmB,SAAlB;;AACA,sBAAI,CAACknE,iBAAL,CAAuB1tF,IAAvB,CAA4BqnB,OAA5B;;AACA,sBAAI,CAACsmE,cAAL,CAAoB3tF,IAApB,CAAyBqnB,OAAzB;AACH;AACJ,WAxC0B,CAA/B,EA/BW,CA0EX;;AACA,eAAKymE,aAAL,GAAqB,KAAKR,aAAL,CAAmB3qF,IAAnB,CACjB,YAAA+f,YAAA,CAAa,GAAb,CADiB,EAEjB,YAAA+zB,oBAAA,EAFiB,EAGjB,YAAA9zB,SAAA,CAAU,UAAC1d,KAAD,EAAW;AACjB,oBAAI,CAAC6F,OAAL,GAAe,IAAf;AACA,mBAAO7F,KAAK,CAAClR,MAAN,IAAgB,QAAI,CAACoP,KAArB,GACD,QAAI,CAACw5B,MAAL,CAAY13B,KAAZ,CAAkB;AAChByM,eAAC,EAAEzM,KADa;AAEhB+K,mBAAK,EAAE,KAAK;AAFI,aAAlB,CADC,GAKD9B,OAAO,CAACC,OAAR,CAAgB,EAAhB,CALN;AAMH,WARD,CAHiB,EAYjB,YAAAkC,UAAA,CAAW,UAAChH,CAAD;AAAA,mBAAO,OAAAkH,EAAA,CAAG,EAAH,CAAP;AAAA,WAAX,CAZiB,EAajB,YAAA7Y,GAAA,CAAI,UAAC3H,IAAD,EAAkB;AAClB,oBAAI,CAAC+a,OAAL,GAAe,KAAf;AACA,mBAAO/a,IAAP;AACH,WAHD,CAbiB,CAArB,CA3EW,CA8FX;;AACA,eAAKH,YAAL,CACI,gBADJ,EAEI,KAAKk+F,aAAL,CAAmBh+F,SAAnB,CAA6B,UAACC,IAAD,EAAU;AACnC,oBAAI,CAACkmD,SAAL,GAAiBlmD,IAAjB;;AACA,oBAAI,CAACkmD,SAAL,CAAehmD,OAAf,CAAuB,UAACC,CAAD,EAAY;AAC/BA,eAAC,CAAC8xD,UAAF,GAAe,OAAA7mD,gBAAA,CAAiBjL,CAAC,CAAC8xD,UAAnB,CAAf;AACA9xD,eAAC,CAAC+xD,WAAF,GAAgB,OAAA9mD,gBAAA,CAAiBjL,CAAC,CAAC+xD,WAAnB,CAAhB;AACA,qBAAO/xD,CAAP;AACH,aAJD,EAFmC,CAQnC;;;AACA,gBAAMwkB,OAAO,GAAG,QAAI,CAACuhC,SAAL,CAAev+C,GAAf,CAAmB,UAAAk2E,CAAC,EAAI;AACpC,qBAAO;AACH74E,qBAAK,EAAE64E,CAAC,CAAC3qE,KADN;AAEHnF,uBAAO,YAAK8vE,CAAC,CAAChgF,IAAP,cAAeggF,CAAC,CAAC3qE,KAAjB,CAFJ;AAGHgZ,uBAAO,EAAE,KAHN;AAIHpC,2BAAW,EAAE,IAJV;AAKHtG,4BAAY,YAAKq6D,CAAC,CAAChgF,IAAP,CALT;AAMHmpB,oBAAI,EAAE;AAAEiU,0BAAQ,EAAE,KAAZ;AAAmBvgB,sBAAI,EAAEmjE;AAAzB;AANH,eAAP;AAQH,aATe,CAAhB,CATmC,CAmBnC;;;AACAl5D,mBAAO,CAACq5E,OAAR,CAAgB;AACZh5F,mBAAK,EAAE,QAAI,CAACw5D,YADA;AAEZzwD,qBAAO,EAAE,QAAI,CAACywD,YAFF;AAGZtyC,qBAAO,EAAE,KAHG;AAIZpC,yBAAW,EAAE,IAJD;AAKZtG,0BAAY,EAAE,QAAI,CAACg7C,YALP;AAMZx3C,kBAAI,EAAE;AAAEiU,wBAAQ,EAAE,IAAZ;AAAkBvgB,oBAAI,EAAE;AAAxB;AANM,aAAhB,EApBmC,CA4BnC;;AACA,oBAAI,CAACiK,OAAL,CAAa1U,IAAb,CAAkB0U,OAAlB;AACH,WA9BD,CAFJ;AAmCA,eAAKk5E,gBAAL,CAAsBn/D,YAAtB,CAAmC3+B,SAAnC,CAA6C,UAAAozE,GAAG,EAAI;;;AAEhDz1E,wBAAY,CAAC,QAAI,CAAC+/F,WAAN,CAAZ;;AACA,gBAAI,CAAJ,KAAItqB,GAAG,SAAH,IAAAA,GAAG,WAAH,GAAG,MAAH,GAAAA,GAAG,CAAEp8C,KAAL,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAE/yB,MAAhB,EAAwB;AACpB,sBAAI,CAAC85F,iBAAL,GAAyB,IAAzB,CADoB,CAGpB;;AACA,sBAAI,CAACL,WAAL,GAAmBx/F,UAAU,CAAC,YAAM;AAChC,wBAAI,CAAC0gF,YAAL,CAAkBn6B,IAAlB,CAAuB,KAAvB;;AACA,oBAAM/tC,OAAO,GAAG,QAAI,CAACA,OAAL,CAAayoB,KAAb,EAAhB;;AACA,oBAAM1iB,KAAK,GAAG,EAAd;AACAA,qBAAK,CAAC/F,OAAO,CAACwO,KAAR,CAAc/R,KAAf,CAAL,GAA6BuD,OAAO,CAAC+F,KAAR,CAAc/F,OAAO,CAACwO,KAAR,CAAc/R,KAA5B,KAAsC,GAAnE;AACA,oBAAM2c,SAAS,GAAG,EAAlB;AACAA,yBAAS,CAACpZ,OAAO,CAACwO,KAAR,CAAc/R,KAAf,CAAT,GAAiCuD,OAAO,CAACoZ,SAAR,CAAkBpZ,OAAO,CAACwO,KAAR,CAAc/R,KAAhC,KAA0C,GAA3E;AAEA,oBAAMqkF,WAAW,GAAG,IAAI,cAAA9wE,OAAJ,CAAY;AAC5B1S,oBAAE,EAAE0C,OAAO,CAAC1C,EADgB;AAE5B+gB,sBAAI,EAAEre,OAAO,CAACwO,KAFc;AAG5BrR,6BAAW,EAAE6C,OAAO,CAAC/J,WAAR,CAAoB8G,OAHL;AAI5BF,2BAAS,EAAEmD,OAAO,CAAC9J,SAAR,CAAkB6G,OAJD;AAK5BgJ,uBAAK,EAALA,KAL4B;AAM5BqT,2BAAS,EAATA;AAN4B,iBAAZ,CAApB;AASA,8BAAAJ,eAAA,CACI,QAAI,CAACyB,OADT,EAEIqmE,WAFJ,EAGE/4E,IAHF,CAGO,UAACyH,QAAD,EAAuB;AAC1B,0BAAI,CAAC63E,iBAAL,GAAyB,KAAzB;AACA,0BAAI,CAAC7tE,SAAL,GAAiBhK,QAAjB,CAF0B,CAG1B;;AACA,0BAAI,CAAC04D,YAAL,CAAkBn6B,IAAlB,CAAuB,QAAI,CAACq5C,gBAAL,CAAsBn4E,KAA7C;;AACA,0BAAI,CAACg4E,mBAAL,GAA2Bz3E,QAAQ,KAAK,KAAb,GAAqB,QAArB,GAAgC,WAA3D,CAL0B,CAM1B;AACH,iBAVD,WAUS,YAAM;AACX,0BAAI,CAAC63E,iBAAL,GAAyB,KAAzB;AACA,0BAAI,CAAC7tE,SAAL,GAAiB,KAAjB;;AACA,0BAAI,CAAC0uD,YAAL,CAAkBn6B,IAAlB,CAAuB,KAAvB;;AACA,0BAAI,CAACk5C,mBAAL,GAA2B,QAA3B,CAJW,CAKX;;AAEA;AACH,iBAlBD;AAmBH,eApC4B,EAoC1B,GApC0B,CAA7B;AAqCH,aAzCD,MAyCO;AACH,sBAAI,CAACI,iBAAL,GAAyB,KAAzB;AACA,sBAAI,CAAC7tE,SAAL,GAAiB,IAAjB;AACA,sBAAI,CAACytE,mBAAL,GAA2B,EAA3B;;AACA,sBAAI,CAAC/e,YAAL,CAAkBn6B,IAAlB,CAAuB,QAAI,CAACq5C,gBAAL,CAAsBn4E,KAA7C;AACH;AAEF,WAnDH;AAoDH;;;2CAEyBgS,O,EAAS;AAC/B,eAAKmmE,gBAAL,CAAsB1uD,QAAtB,CAA+BzX,OAA/B,CAAuCh1B,QAAvC,CAAgDg1B,OAAhD;AACH;;;wCAEsBhd,I,EAAM;AACzBlT,iBAAO,CAACV,GAAR,CAAY4T,IAAZ;AACH;AAED;;;;oCACmBlb,O,EAAc;AAC7B,cAAIA,OAAO,CAAC69F,aAAR,IAAyB,KAAKY,OAAlC,EAA2C;AACvC;AACA,iBAAKA,OAAL,CAAaC,QAAb,CAAsBn6F,SAAtB;AACH;AACJ;AAEA;;;;;;;;6BAKWvG,G,EAAW;AACnB,eAAKqgG,gBAAL,CAAsBrmF,GAAtB,CAA0Bha,GAA1B,EAA+BkF,QAA/B,CAAwC,KAAKm7F,gBAAL,CAAsBrmF,GAAtB,CAA0Bha,GAA1B,EAA+BwH,KAA/B,CAAqCk7C,IAArC,EAAxC;AACH;AAED;;;;+BACc1zB,M,EAA2B;AAAA;;AACrC,cAAM2xE,UAAU,GAAG3xE,MAAM,CAACxnB,KAAP,CACdlB,KADc,CACR,GADQ,EAEd6D,GAFc,CAEV,UAACiC,IAAD;AAAA,mBAAUA,IAAI,CAACimC,MAAL,CAAY,CAAZ,EAAe3+B,WAAf,KAA+BtH,IAAI,CAAChC,KAAL,CAAW,CAAX,EAAc4B,WAAd,EAAzC;AAAA,WAFU,EAGd2B,IAHc,CAGT,GAHS,CAAnB,CADqC,CAKrC;;AACA,eACI;AACAgzF,oBAAU,CAACn6F,MAAX,GAAoB,EAFxB,EAGE;AACE,iBAAKo5F,SAAL,CAAetjF,IAAf,CAAoB,2CAApB,EAAiE,OAAjE,EAA0E;AACtEjX,sBAAQ,EAAE;AAD4D,aAA1E;;AAGA;AACH;;AAED,eAAK0pB,eAAL,CACK3Z,IADL,CAEQ,YAAA+H,IAAA,CAAK,CAAL,CAFR,EAGQ,YAAAwxC,cAAA,CAAe,KAAKxnC,OAApB,CAHR,EAIQ,YAAAhd,GAAA,CAAI,kBAAgC;AAAA;AAAA,gBAA9B4kB,eAA8B;AAAA,gBAAb5H,OAAa;;AAChC,gBAAI0U,IAAI,GAAG9M,eAAe,CAAC3kB,KAAhB,EAAX;AACA,gBAAM0P,KAAK,GAAG+hB,IAAI,CAAC9U,IAAL,CAAU,UAAC/V,CAAD;AAAA,qBAAO2vF,UAAU,KAAK3vF,CAAC,CAACxJ,KAAxB;AAAA,aAAV,CAAd;;AACA,gBAAIsS,KAAJ,EAAW;AACP+hB,kBAAI,GAAGA,IAAI,CAAC3wB,MAAL,CAAY,UAAC8F,CAAD;AAAA,uBAAO2vF,UAAU,KAAK3vF,CAAC,CAACxJ,KAAxB;AAAA,eAAZ,CAAP;AACH,aAFD,MAEO;AACH,kBAAMk5D,KAAK,GAAGigC,UAAU,CAAC30F,WAAX,GAAyBoS,QAAzB,CAAkC,WAAlC,IACR,UADQ,GAER,UAFN;AAGAyd,kBAAI,CAAC1vB,IAAL,CAAU,MAAD,OAAC,CAAD,kBACF6iB,MADE,CAAC,EACG;AACTxnB,qBAAK,EAAEm5F,UADE;AAETpwF,uBAAO,EAAEowF,UAFA;AAGT36E,4BAAY,EAAE26E,UAHL;AAITn3E,oBAAI,EAAE,MAAF,OAAE,CAAF,kBACGwF,MAAM,CAACxF,IADV,CAAE,EACY;AACdk3C,uBAAK,EAALA;AADc,iBADZ;AAJG,eADH,CAAV;AAUH;;AAED,mBAAO7kC,IAAP;AACH,WAtBD,CAJR,EA4BKt5B,SA5BL,CA4Be,UAACkQ,IAAD,EAAU;AACjB,gBAAI,CAAC,QAAI,CAAC4tF,gBAAL,CAAsB1uD,QAAtB,CAA+Bsb,UAA/B,CAA0CiV,OAA/C,EAAwD;AACpD,sBAAI,CAACm+B,gBAAL,CAAsB1uD,QAAtB,CAA+Bsb,UAA/B,CAA0C/nD,QAA1C,CAAmDuN,IAAI,CAACjM,MAAL,GAAc,CAAjE;AACH;;AACD,oBAAI,CAACuoB,eAAL,CAAqBtc,IAArB,CAA0BA,IAA1B;AACH,WAjCL;AAkCH;;;yCAEuB;AACpB,eAAKmuF,gBAAL,CAAsB17F,QAAtB,CAA+B,CAA/B;AACH;AAED;;;;uCACsB;AAClB,eAAKm7F,gBAAL,CAAsBv1C,gBAAtB,GADkB,CAElB;;AACA,cAAI,KAAKu1C,gBAAL,CAAsBn4E,KAA1B,EAAiC;AAC7B,gBAAMhG,SAAS,GAAG,KAAKm+E,gBAAL,CAAsB74F,KAAxC;AACA0a,qBAAS,CAACwmC,SAAV,GAAsB,KAAKA,SAA3B;AACAxmC,qBAAS,CAACuvE,SAAV,GAAsB,KAAKA,SAA3B;AACAvvE,qBAAS,CAACogE,YAAV,GAAyB,KAAKA,YAA9B;AACA,iBAAKpB,UAAL,CAAgBl6B,IAAhB,CAAqB9kC,SAArB;AACH;AACJ;AAED;;;;2DAC0ClR,C,EAAW;AACjD,cAAMoJ,CAAC,GAAGpJ,CAAC,CAACxK,MAAZ;AACA,cAAM2gB,OAAO,GAAG,KAAK4H,eAAL,CAAqBvnB,KAArB,CAA2B4C,KAA3B,EAAhB;;AACA,cAAI,CAACgQ,CAAL,EAAQ;AACJ,iBAAK+M,OAAL,CAAa1U,IAAb,CAAkB,EAAlB;AACA;AACH;;AACD,cAAI2H,CAAC,GAAG,CAAR,EAAW;AACP;AACA,iBAAK2lF,aAAL,CAAmBttF,IAAnB,CAAwBzB,CAAxB;AACH;;AAEDmW,iBAAO,CAACq5E,OAAR,CAAgB;AACZh5F,iBAAK,EAAEwJ,CADK;AAEZT,mBAAO,EAAES,CAFG;AAGZ0d,mBAAO,EAAE,KAHG;AAIZpC,uBAAW,EAAE,IAJD;AAKZtG,wBAAY,EAAEhV,CALF;AAMZwY,gBAAI,EAAE;AAAEiU,sBAAQ,EAAE;AAAZ;AANM,WAAhB;AAQA,eAAKujC,YAAL,GAAoBhwD,CAApB;AACA,eAAKmW,OAAL,CAAa1U,IAAb,CAAkB0U,OAAlB;AACH;;;8CAE4B;AACtB,eAAK24E,QAAL,GAAgB,CAAC,KAAKA,QAAtB;AACN;;;0DAEwC9uF,C,EAAW;AAChD,cAAI,CAACA,CAAC,CAACxK,MAAP,EAAe;AACX,iBAAK45F,cAAL,CAAoB3tF,IAApB,CAAyB,EAAzB;AACA;AACH;;AACD,eAAK2tF,cAAL,CAAoB3tF,IAApB,CAAyB,CAAC;AACtBjL,iBAAK,EAAEwJ,CADe;AAEtBT,mBAAO,EAAES,CAFa;AAGtB0d,mBAAO,EAAE,KAHa;AAItBpC,uBAAW,EAAE,IAJS;AAKtBtG,wBAAY,EAAEhV;AALQ,WAAD,CAAzB;AAOH;;;sCAEoBge,M,EAA2B;AAAA;;AAC5C,eAAKmxE,iBAAL,CAAuB/qF,IAAvB,CACI,YAAA+H,IAAA,CAAK,CAAL,CADJ,EAEI,YAAAwxC,cAAA,CAAe,KAAKyxC,cAApB,CAFJ,EAGI,YAAAj2F,GAAA,CAAI,kBAAkC;AAAA;AAAA,gBAAhCg2F,iBAAgC;AAAA,gBAAbh5E,OAAa;;AAClC,gBAAI0U,IAAI,GAAGskE,iBAAiB,CAAC/1F,KAAlB,EAAX;AACA,gBAAM0P,KAAK,GAAG+hB,IAAI,CAAC9U,IAAL,CAAU,UAAA/V,CAAC;AAAA,qBAAIge,MAAM,CAACxnB,KAAP,KAAiBwJ,CAAC,CAACxJ,KAAvB;AAAA,aAAX,CAAd;;AACA,gBAAIsS,KAAJ,EAAW;AACP+hB,kBAAI,GAAGA,IAAI,CAAC3wB,MAAL,CAAY,UAAA8F,CAAC;AAAA,uBAAIge,MAAM,CAACxnB,KAAP,KAAiBwJ,CAAC,CAACxJ,KAAvB;AAAA,eAAb,CAAP;AACH,aAFD,MAEO;AACHq0B,kBAAI,CAAC1vB,IAAL,CAAU6iB,MAAV;AACH;;AAED,mBAAO6M,IAAP;AACH,WAVD,CAHJ,EAcEt5B,SAdF,CAcY,UAAAkQ,IAAI,EAAI;AAChB,oBAAI,CAAC0tF,iBAAL,CAAuB1tF,IAAvB,CAA4BA,IAA5B;AACH,WAhBD;AAiBH;;;4BA9W8B;;;AAC3B,cAAI,CAAJ,KAAI,KAAK4tF,gBAAL,CAAsB1uD,QAAtB,CAA+BnjB,IAA/B,CAAoCk9B,MAApC,MAA0C,IAA1C,IAA0C,aAA1C,GAA0C,MAA1C,GAA0C,GAAEtrB,QAAhD,EAA0D;AACtD,mBAAO,yBAAP;AACH;;AACD,cAAI,CAAJ,KAAI,KAAKigE,gBAAL,CAAsB1uD,QAAtB,CAA+BnjB,IAA/B,CAAoCk9B,MAApC,MAA0C,IAA1C,IAA0C,aAA1C,GAA0C,MAA1C,GAA0C,GAAEC,SAAhD,EAA2D;AACvD,mBAAO,8CAAP;AACH;;AACD,cAAI,CAAJ,KAAI,KAAK00C,gBAAL,CAAsB1uD,QAAtB,CAA+BnjB,IAA/B,CAAoCk9B,MAApC,MAA0C,IAA1C,IAA0C,aAA1C,GAA0C,MAA1C,GAA0C,GAAElL,OAAhD,EAAyD;AACrD,mBAAO,yDAAP;AACH;;AACD,iBAAO,EAAP;AACH;;;4BAE0B;AACvB,iBAAO,KAAK6/C,gBAAL,CAAsBrmF,GAAtB,CAA0B,YAA1B,CAAP;AACH;;;;MA5EgD,KAAA4pD,qB;;AALrD;;;uBAKaynB,+B,EAA+B,sC,EAAA,oC,EAAA,8B,EAAA,yC,EAAA,qC;AAAA,K;;;YAA/BA,+B;AAA+B,oD;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;AC7D5C;;;;;;;;;2BD6DaA,+B,EAA+B;cAL3C,OAAAjjC,SAK2C;eALjC;AACPlnD,kBAAQ,EAAE,+BADH;AAEPmnD,qBAAW,EAAE,4CAFN;AAGPC,mBAAS,EAAE,CAAC,4CAAD;AAHJ,S;AAKiC,Q;;;;;;;;;;;;;;gBACvC,OAAAuD,S;iBAAU,S;;;gBAGV,OAAAjoD;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAA2kD;;;gBAEA,OAAAA;;;;;;;;;;;;;;;;;;;;;;;;AEzEL;AAAA;AAAA;;AAUA;AAAA;AAAA;;AAMA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAOA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAoBA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAGA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3CM;;;;;AAGE;;;;;;AAIF;;;;AACc,0CAAmB,UAAnB,EAAmB,IAAnB;;;;;;AAuBd;AACE;AACF;;;;;AADE;AAAA;;;;;;AAaJ;;;;;AAAsE;;;;;;;;;;;;;;AAjExE;AACE;AAAA;AAAA;AAAA;AAAA;AAIA;AASE;AAAA;AAAA;AAAA;AAAA;AAED;AAGD;AACE;AAOA;AAGA;AAOE;AAAA;AAAA;AAAA,iBAAiB,OAAAiF,SAAA,iCAAjB;AAA2D,SAA3D;AAED;AACD;AACA;AAQE;AAAA;AAAA;AAAA,iBAAiB,QAAAA,SAAA,mCAAjB;AAA6D,SAA7D;AACD;AACD;AAGF;AAEA;AACE;AACE;AAI+B;AAAiB;AACpD;AAEA;AAEA;AAEA;AAOA;AAMA;AAEA;AACF;;;;;;;;;;;AAnFE;AAME;AAAA,wCAAiB,oBAAjB,EAAiB,IAAjB,EAAiB,SAAjB,EAAiB,cAAjB,EAAiB,iBAAjB,EAAiB,sBAAjB,EAAiB,YAAjB,EAAiB,IAAjB;AAiBE;AAAA;AAIkD;AAAA;AAIlD;AAAA,wCAAiB,YAAjB,EAAiB,iBAAjB,EAAiB,SAAjB,EAAiB,sCAAjB,EAAiB,gBAAjB,EAAiB,2BAAjB;AAOsB;AAAA,0CAAmB,UAAnB,EAAmB,IAAnB;AAKtB;AAAA,6EAA+C,UAA/C,EAA+C,IAA/C,EAA+C,SAA/C,EAA+C,wCAA/C,EAA+C,gBAA/C,EAA+C,2BAA/C;AAMG;AAAA;AAckB;AAAA;AAMvB;AAAA,wCAAiB,SAAjB,EAAiB,yBAAjB;AAOA;AAAA,wCAAiB,SAAjB,EAAiB,sBAAjB;;;;;;QDTO49B,wB;;;;;AA4DT,wCAAoBpwE,KAApB,EACI;AACA6oD,WAFJ,EAEqC+7B,SAFrC,EAE6D;AAAA;;AAAA;;AACzD,uCAAM/7B,KAAN;AAHgB,iBAAA7oD,KAAA,GAAAA,KAAA;AAEiB,iBAAA4kF,SAAA,GAAAA,SAAA;AAzD9B,iBAAA1e,UAAA,GAAa,IAAI,OAAAx7B,YAAJ,EAAb;AAGA,iBAAAm7C,UAAA,GAAa,KAAb;AAKP;;;;AAIO,iBAAAC,YAAA,GAAe,IAAI,OAAAp7C,YAAJ,EAAf,CA6CsD,CA3C7D;;AACO,iBAAAq7C,QAAA,GAAmB,OAAA18F,iBAAA,CAAkB,QAAA4C,QAAA,CAASwkB,GAAT,EAAlB,EAAkC,EAAlC,EAAsCtkB,OAAtC,EAAnB,CA0CsD,CA1Cc;;AAC3E;;AACO,iBAAAwhD,UAAA,GAAqB,OAAA3jD,mBAAA,CAAoB,IAAI,UAAAwQ,MAAJ,CAAW;AAAElR,cAAI,EAAEJ,IAAI,CAACunB,GAAL,EAAR;AAAoBK,qBAAW,EAAE;AAAjC,SAAX,CAApB,EAA0E,EAA1E,CAArB;AACA,iBAAA3B,kBAAA,GAAqB,cAAAA,kBAArB;AACA,iBAAAE,eAAA,GAAkB,cAAAA,eAAlB;AACA,iBAAAq6B,aAAA,GAAgB,UAAA32C,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB6nB,WAApC;AACA,iBAAA88B,UAAA,GAAa,EAAb;AACA,iBAAAC,QAAA,GAAW,EAAX;AAEA,iBAAA0E,SAAA,GAAuB,IAAI,QAAA9qB,SAAJ,CAAc;AACxCnsB,YAAE,EAAE,IAAI,QAAA0pB,WAAJ,CAAgB,EAAhB,EAAoB,EAApB,CADoC;AAExCtiB,kBAAQ,EAAE,IAAI,QAAAsiB,WAAJ,CAAgB,EAAhB,EAAoB,CAAC,QAAAE,UAAA,CAAWC,QAAZ,CAApB,CAF8B;AAGxC97B,cAAI,EAAE,IAAI,QAAA27B,WAAJ,CAAgB,SAAK8gE,QAArB,EAA+B,CAAC,QAAA5gE,UAAA,CAAWC,QAAZ,CAA/B,CAHkC;AAIxCn7B,gBAAM,EAAE,IAAI,QAAAg7B,WAAJ,CAAgB,SAAK0oB,UAArB,EAAiC,CAAC,QAAAxoB,UAAA,CAAWC,QAAZ,CAAjC,CAJgC;AAKxC/6B,kBAAQ,EAAE,IAAI,QAAA46B,WAAJ,CAAgB,cAAAjW,wBAAhB,EAA0C,CAAC,QAAAmW,UAAA,CAAWC,QAAZ,CAA1C,CAL8B;AAMxCzX,qBAAW,EAAE,IAAI,QAAAsX,WAAJ,CAAgB,cAAAhW,yBAAhB,CAN2B;AAOxCO,kBAAQ,EAAE,IAAI,QAAAyV,WAAJ,CAAgB,cAAA7V,qBAAhB,CAP8B;AAQxCq2D,sBAAY,EAAE,IAAI,QAAAxgD,WAAJ,CAAgB,EAAhB,CAR0B;AASxC/2B,kBAAQ,EAAE,IAAI,QAAA+2B,WAAJ,CAAgB,EAAhB,CAT8B;AAUxCj4B,gBAAM,EAAE,IAAI,QAAAi4B,WAAJ,CAAgB,EAAhB,CAVgC;AAY9ChV,2BAAiB,EAAE,IAAI,QAAAgV,WAAJ,CAAgB,cAAA4B,gBAAA,CAAiBU,MAAjC,CAZ2B;AAaxCrX,6BAAmB,EAAE,IAAI,QAAA+U,WAAJ,CAAiB,CAAjB,CAbmB;AAcxC9U,0BAAgB,EAAE,IAAI,QAAA8U,WAAJ,CAAiB,IAAI,UAAAzqB,MAAJ,CAAW;AAAElR,gBAAI,EAAE;AAAR,WAAX,EAAwBa,QAAxB,CAAiC;AAAC4wB,gBAAI,EAAE;AAAP,WAAjC,CAAjB,CAdsB;AAexC3K,0BAAgB,EAAE,IAAI,QAAA6U,WAAJ,CAAiB,CAAjB,CAfsB;AAgBxC7W,sBAAY,EAAE,IAAI,QAAA6W,WAAJ,CAAgB,IAAhB,CAhB0B;AAiBxC5U,2BAAiB,EAAE,IAAI,QAAA4U,WAAJ,CAAiB,EAAjB,CAjBqB;AAkBxC3U,+BAAqB,EAAE,IAAI,QAAA2U,WAAJ,CAAgB,EAAhB,CAlBiB;AAmBxCuC,4BAAkB,EAAE,IAAI,QAAAvC,WAAJ,CAAgB,cAAA4B,gBAAA,CAAiBU,MAAjC,CAnBoB;AAoBxChX,yBAAe,EAAE,IAAI,QAAA0U,WAAJ,CAAiB,EAAjB,CApBuB;AAsBxCzU,gBAAM,EAAE,IAAI,QAAAyU,WAAJ,CAAgB,EAAhB,EAAoB,EAApB;AAtBgC,SAAd,CAAvB;AA2BA,iBAAA9Y,OAAA,GAAU,IAAI,OAAApnB,eAAJ,CAAyC,EAAzC,CAAV;AAEA,iBAAAgvB,eAAA,GAAkB,IAAI,OAAAhvB,eAAJ,CAAyC,EAAzC,CAAlB,CAIsD,CAEzD;AACA;AACA;AACA;AACA;;AANyD;AAO5D;;;;mCAEc;AAAA;;AAGX,iGAHW,CAIX;AACA;AAEA;AACA;;;AACA,eAAKsC,YAAL,CAAkB,WAAlB,EAA+B,KAAK2Y,KAAL,CAAWgC,MAAX,CAAkB,cAAA6O,gBAAlB,EAC1BzW,IAD0B,CACrB,YAAA+H,IAAA,CAAK,CAAL,CADqB,EAE1B5a,SAF0B,CAEhB,UAACkQ,IAAD,EAAuC;AAC9C,gBAAIA,IAAJ,EAAU;AACN;AACA,sBAAI,CAACk2C,UAAL,GAAkBl2C,IAAI,CAAC2W,YAAL,GAAoB3W,IAAI,CAACxN,MAAzB,GAAkC,OAAAD,mBAAA,CAAoB,UAAA+I,OAAA,EAApB,EAA+B,EAA/B,CAApD,CAFM,CAEkF;;AAExF,kBAAM0S,IAAI,GAAG+kB,SAAS,CAAC/yB,IAAD,CAAtB;;AACA,sBAAI,CAAC+6C,SAAL,CAAe/D,UAAf,CAA0B,MAAD,OAAC,CAAD,EAAC,EACnBhpC,IADmB,CAA1B,EAEG;AAAEugF,yBAAS,EAAE;AAAb,eAFH,EALM,CASN;AACA;;AAEH;AACJ,WAhB0B,CAA/B,EATW,CA4BX;;AACA,eAAK3+F,YAAL,CAAkB,aAAlB,EAAiC,KAAKmrD,SAAL,CAAetsB,YAAf,CAC5B9rB,IAD4B,CAEzB,YAAA6zC,IAAA,CAAK,CAAL,CAFyB,EAEhB;AACT,sBAAAC,oBAAA,EAHyB,EAI5B3mD,SAJ4B,CAIlB,UAACkQ,IAAD,EAAU;AACjB,gBAAMvJ,QAAQ,GAAGuJ,IAAI,CAACvJ,QAAL,IAAiB,QAAI,CAACw7C,aAAvC;AACA;;;;;AAIA,oBAAI,CAACiE,UAAL,GAAkBl2C,IAAI,CAAC2W,YAAL,GAAoB3W,IAAI,CAACxN,MAAzB,GAAkC,OAAAD,mBAAA,CAAoB,UAAA+I,OAAA,EAApB,EAA+B,EAA/B,CAApD;AAEA;;;;AAGA,oBAAI,CAACi7C,oBAAL,CAA0B9/C,QAA1B;AAEH,WAjB4B,CAAjC;AAoBA,eAAK7G,YAAL,CAAkB,WAAlB,EAA+B,KAAK2Y,KAAL,CAAW5F,IAAX,CAC3B,QAAA4H,MAAA,CAAO,YAAA7D,qBAAP,CAD2B,EAE3B,QAAA6D,MAAA,CAAO,YAAAvD,kCAAP,CAF2B,EAG3B,YAAAtP,GAAA,CAAI,UAAC0kB,OAAD,EAA4C;AAC5C,mBAAO,cAAAD,qBAAA,CAAsBC,OAAtB,CAAP;AACH,WAFD,CAH2B,EAM3B,YAAAq6B,oBAAA,EAN2B,EAQ1B3mD,SAR0B,CAQhB,UAAAkQ,IAAI,EAAI;AACf,oBAAI,CAAC0U,OAAL,CAAa1U,IAAb,CAAkBA,IAAlB;AACH,WAV0B,CAA/B;AAWH;;;oCAEkBzQ,O,EAAc;AAC7B,cAAIA,OAAO,CAAC69F,aAAR,IAAyB,KAAKY,OAAlC,EAA2C;AACvC;AACA,iBAAKA,OAAL,CAAaC,QAAb,CAAsBn6F,SAAtB;AACH;AACJ;;;uCAEqB;;;AAClB,0BAAG,KAAKinD,SAAL,CAAe7b,QAAlB,MAA0B,IAA1B,IAA0B,aAA1B,GAA0B,MAA1B,GAA0B,GAAEvoB,YAA5B,MAAwC,IAAxC,IAAwC,aAAxC,GAAwC,MAAxC,GAAwC,GAAE5hB,KAA1C,EAAgD;AAC5C,0BAAAwqC,uBAAA,CAAwB,KAAKwb,SAA7B;AACH,WAHiB,CAIlB;;;AACA,cAAMyzC,aAAa,GAAG,KAAKzzC,SAAL,CAAehmD,KAArC;;AACA,cAAM05F,OAAO,GAAG,KAAKC,gBAAL,EAAhB;;AACA,cAAID,OAAJ,EAAa;AACT,iBAAKE,YAAL,CAAkB,sEAAlB,EAA0F,OAA1F;AACA;AACH,WAHD,MAGO;AACH,iBAAK5zC,SAAL,CAAetoD,QAAf,CAAwB,MAAD,OAAC,CAAD,kBAChB+7F,aADgB,CAAC,EACJ;AAChB38F,kBAAI,EAAE,OAAA8D,uBAAA,CAAwB64F,aAAa,CAACh8F,MAAd,CAAqBgJ,EAA7C,CADU;AAEhBhJ,oBAAM,EAAEg8F,aAAa,CAACh8F,MAAd,CAAqBC,QAArB,CAA8B;AAAET,2BAAW,EAAE,CAAf;AAAkBC,sBAAM,EAAE;AAA1B,eAA9B;AAFQ,aADI,CAAxB;AAKH;;AACD,eAAK8oD,SAAL,CAAe1C,gBAAf;;AACA,cAAI,KAAK0C,SAAL,CAAetlC,KAAnB,EAA0B;AACtB,iBAAKg5D,UAAL,CAAgBl6B,IAAhB,CAAqB,KAAKwG,SAAL,CAAehmD,KAApC;AACH;AACJ;;;qCAEmByU,O,EAAiB1G,M,EAAgB;AACjD,eAAKqqF,SAAL,CAAetjF,IAAf,CAAoBL,OAApB,EAA6B1G,MAA7B,EAAqC;AACjClQ,oBAAQ,EAAE,IADuB;AAEjCkX,sBAAU,EAAE,CAAC,iBAAD;AAFqB,WAArC;AAIH,S,CAED;;;;+BACcyS,M,EAA2B;AAAA;;AACrC;AACA,eAAKD,eAAL,CAAqB3Z,IAArB,CACI,YAAA+H,IAAA,CAAK,CAAL,CADJ,EAEI,YAAAwxC,cAAA,CAAe,KAAKxnC,OAApB,CAFJ,EAGI,YAAAhd,GAAA,CAAI,kBAAgC;AAAA;AAAA,gBAA9B4kB,eAA8B;AAAA,gBAAb5H,OAAa;;AAChC,mBAAO,cAAA2H,qBAAA,CAAsB3H,OAAtB,EAA+B4H,eAA/B,EAAgDC,MAAhD,CAAP;AACH,WAFD,CAHJ,EAMEzsB,SANF,CAMY,UAAAkQ,IAAI,EAAI;uCAAA,CAChB;;;AACA,gBAAM4uF,aAAa,GAAG,QAAI,CAAC7zC,SAAL,CAAehmD,KAArC;;AACA,gBAAI,CAACiL,IAAI,CAACjM,MAAV,EAAkB;AACd,sBAAI,CAACgnD,SAAL,CAAetoD,QAAf,CAAwB,MAAD,OAAC,CAAD,kBAChB,QAAI,CAACsoD,SAAL,CAAehmD,KADC,CAAC,EACG;AACvB0B,wBAAQ,EAAE,QAAI,CAACw7C,aADQ;AAEvBpgD,oBAAI,EAAE+8F,aAAa,CAACp8F,MAAd,CAAqBgJ,EAFJ;AAGvBhJ,sBAAM,EAAEo8F,aAAa,CAACp8F,MAAd,CAAqByJ,MAArB,CAA4B,QAAI,CAACg2C,aAAjC;AAHe,eADH,CAAxB;AAMH,aAPD,MAOO;AACH,kBAAMN,gBAAgB,GAAG,mBAAA3xC,IAAI,CAAC,CAAD,CAAJ,MAAO,IAAP,IAAO,aAAP,GAAO,MAAP,GAAO,GAAE+W,IAAT,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAE5B,QAAf,MAAuB,IAAvB,IAAuB,aAAvB,GAAuB,MAAvB,GAAuB,GAAE1e,QAAzB,MAAiC,kBAAIuJ,IAAI,CAAC,CAAD,CAAR,MAAW,IAAX,IAAW,aAAX,GAAW,MAAX,GAAW,GAAE+W,IAAb,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAEzP,IAAnB,MAAuB,IAAvB,IAAuB,aAAvB,GAAuB,MAAvB,GAAuB,GAAE7Q,QAA1D,CAAzB;;AACA,sBAAI,CAACskD,SAAL,CAAetoD,QAAf,CAAwB,MAAD,OAAC,CAAD,kBAChB,QAAI,CAACsoD,SAAL,CAAehmD,KADC,CAAC,EACG;AACvB0B,wBAAQ,EAAEk7C,gBADa;AAEvB9/C,oBAAI,EAAE+8F,aAAa,CAACp8F,MAAd,CAAqBgJ,EAFJ;AAGvBhJ,sBAAM,EAAEo8F,aAAa,CAACp8F,MAAd,CAAqByJ,MAArB,CAA4B01C,gBAA5B;AAHe,eADH,CAAxB;AAMH;;AACD,oBAAI,CAAC+8C,gBAAL,GAnBgB,CAoBhB;;;AACA,oBAAI,CAACpyE,eAAL,CAAqBtc,IAArB,CAA0BA,IAA1B;AACH,WA5BD;AA6BH;;;2CAE0B;AACvB;AACA,cAAMwuF,aAAa,GAAG,KAAKzzC,SAAL,CAAehmD,KAArC;AACA,cAAMlD,IAAI,GAAG,IAAI,UAAAkR,MAAJ,CAAW;AAAElR,gBAAI,EAAE,KAAKkpD,SAAL,CAAehmD,KAAf,CAAqBvC,MAArB,CAA4BgJ,EAApC;AAAwC8d,uBAAW,EAAEk1E,aAAa,CAAC/3F,QAAnE;AAA6E4iB,uBAAW,EAAC;AAAzF,WAAX,EAA6G3mB,QAA7G,CAAsH;AAAE6Q,mBAAO,EAAE;AAAX,WAAtH,CAAb;AACA,cAAMyV,GAAG,GAAG,UAAA1d,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAZ;;AACA,cAAIunB,GAAG,CAACmS,WAAJ,CAAgBt5B,IAAhB,CAAJ,EAA2B;AACvB;AACA,gBAAMg9F,SAAS,GAAG,OAAAt8F,mBAAA,CAAoB,IAAI,UAAAwQ,MAAJ,CAAW;AAAElR,kBAAI,EAAEJ,IAAI,CAACunB,GAAL,EAAR;AAAoBK,yBAAW,EAAE,KAAjC;AAAwCC,yBAAW,EAAEk1E,aAAa,CAAC/3F;AAAnE,aAAX,EAA0F/D,QAA1F,CAAmG;AAAEJ,qBAAO,EAAE;AAAX,aAAnG,CAApB,EAAwI,EAAxI,CAAlB;AACA,gBAAMw8F,aAAa,GAAGD,SAAS,CAACvrF,aAAV,CAAwB;AAAChR,qBAAO,EAAE;AAAV,aAAxB,CAAtB;AACA,gBAAMy8F,UAAU,GAAGD,aAAa,CAACp8F,QAAd,CAAuB;AAAE6Q,qBAAO,EAAE;AAAX,aAAvB,CAAnB,CAJuB,CAKvB;;AACA,gBAAGyV,GAAG,CAACmS,WAAJ,CAAgB4jE,UAAhB,CAAH,EAA+B;AAC3B,mBAAK74C,UAAL,GAAkB24C,SAAlB;AACH,aAFD,MAEK;AACD,mBAAK34C,UAAL,GAAkB44C,aAAlB;AACH;;AAED,iBAAK/zC,SAAL,CAAetoD,QAAf,CAAwB,MAAD,OAAC,CAAD,kBAChB+7F,aADgB,CAAC,EACJ;AAChB38F,kBAAI,EAAE,OAAA8D,uBAAA,CAAwB,KAAKugD,UAAL,CAAgB16C,EAAxC,CADU;AAEhBhJ,oBAAM,EAAE,KAAK0jD,UAAL,CAAgBzjD,QAAhB,CAAyB;AAAET,2BAAW,EAAE,CAAf;AAAkBC,sBAAM,EAAE;AAA1B,eAAzB;AAFQ,aADI,CAAxB;AAKA,mBAAO,IAAP;AACH;;AACD,iBAAO,KAAP;AACH;;;6CAE4BwE,Q,EAAkB;AAC3C;AACA,cAAM6gD,aAAa,GAAG,QAAA9iD,QAAA,CAASwkB,GAAT,GAAe4sB,OAAf,CAAuB,KAAKqM,aAA5B,EAA2C18C,MAAjE;AACA,cAAMgiD,gBAAgB,GAAG,QAAA/iD,QAAA,CAASwkB,GAAT,GAAe4sB,OAAf,CAAuBnvC,QAAvB,EAAiClB,MAA1D;AAEA,eAAK2gD,UAAL,GAAkB,IAAI,UAAAnzC,MAAJ,CAAW;AAAElR,gBAAI,EAAE,KAAKqkD,UAAL,CAAgB16C,EAAxB;AAA4B6d,uBAAW,EAAE,KAAzC;AAAgDC,uBAAW,EAAE7iB;AAA7D,WAAX,CAAlB;;AAEA,cAAI6gD,aAAa,KAAKC,gBAAtB,EAAwC;AACpC,gBAAMhkD,SAAS,GAAG,KAAKwnD,SAAL,CAAehmD,KAAf,CAAqBvC,MAArB,CAA4By8B,KAA5B,EAAlB;AACA,iBAAKmnB,UAAL,GAAkB7iD,SAAS,CAACuJ,eAAV,CAA0B,OAA1B,CAAlB;AACA,iBAAKu5C,QAAL,GAAgB9iD,SAAS,CAACb,QAAV,CAAmB;AAAEJ,qBAAO,EAAE,KAAKyoD,SAAL,CAAehmD,KAAf,CAAqBnC;AAAhC,aAAnB,EAA+DkK,eAA/D,CAA+E,OAA/E,CAAhB;AACH,WAJD,MAIO;AACH;AACA,iBAAKs5C,UAAL,GAAkB,EAAlB;AACA,iBAAKC,QAAL,GAAgB,EAAhB;AACH;AACJ;;;;MAvPyC,KAAA8a,qB;;AAL9C;;;uBAKawnB,wB,EAAwB,8B,EAAA,yC,EAAA,oC;AAAA,K;;;YAAxBA,wB;AAAwB,4C;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;ACtErC;;;;;;;;;2BDsEaA,wB,EAAwB;cALpC,OAAAhjC,SAKoC;eAL1B;AACPlnD,kBAAQ,EAAE,uBADH;AAEPmnD,qBAAW,EAAE,oCAFN;AAGPC,mBAAS,EAAE,CAAC,oCAAD;AAHJ,S;AAK0B,Q;;;;;;;;;;gBAChC,OAAAuD,S;iBAAU,S;;;gBAGV,OAAAtD;;;gBAGA,OAAA3kD;;;gBAGA,OAAAA;;;gBAMA,OAAA2kD;;;;;;;;;;;;;;;;;;;;;;;;AEtFL;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;6EACA;;;QA4Bam/B,yB;;;;;AAGT,yCACY1sE,KADZ,EAEYqvB,SAFZ,EAGqCuE,KAHrC,EAG+C;AAAA;;AAAA;;AAC3C;AAHQ,iBAAA5zB,KAAA,GAAAA,KAAA;AACA,iBAAAqvB,SAAA,GAAAA,SAAA;AACyB,iBAAAuE,KAAA,GAAAA,KAAA;AAL9B,iBAAA9vC,OAAA,GAAUoF,IAAI,EAAd;AAKwC;AAE9C;;;;wCAEsB;AACnB,eAAKpF,OAAL,GAAeoF,IAAI,EAAnB;AACH;;;mCAEiBuO,I,EAAuB;AACrC;;;AAEA,cAAM+Y,MAAM,GAAG,YAAKojB,KAAL,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAEr5B,MAAZ,MAAuB,cAAA2W,YAAA,CAAaC,IAApC,GAA2C1Z,IAAI,CAAC8D,EAAhD,GAAqD,IAApE;AACA,cAAMkS,QAAQ,GAAG,YAAKmmB,KAAL,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAEr5B,MAAZ,MAAuB,cAAA2W,YAAA,CAAaC,IAApC,IAA4C,IAA7D;AAEA,eAAKnR,KAAL,CAAWolE,QAAX,CAAoB,cAAA5nE,oBAAA,CAAqB;AACrCE,mBAAO,EAAE,MAAF,OAAE,CAAF,kBACAjG,IADA,CAAE,EACE;AACP+Y,oBAAM,EAANA,MADO;AAEP/C,sBAAQ,EAARA,QAFO;AAGPlT,oBAAM,EAAE,YAAKq5B,KAAL,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAEr5B,MAAZ,KAAsB,EAHvB,CAG0B;;AAH1B,aADF;AAD4B,WAArB,CAApB;AAQA,eAAK+0B,KAAL,CAAW,sBAAX,EAdqC,CAcD;;AACpC,eAAKsE,KAAL,IAAc,KAAKA,KAAL,CAAW+4C,UAAzB,IAAuC,KAAK/4C,KAAL,CAAW+4C,UAAX,EAAvC,CAfqC,CAe2B;AAEnE;;;gCAE+B;AAAA,cAAnBZ,IAAmB,uEAAJ,EAAI;AAC5B,eAAK18C,SAAL,CAAeC,KAAf,CAAqBy8C,IAArB;AACH;;;;MAnC0C,OAAAhmF,a;;AA1B/C;;;uBA0Ba2mF,yB,EAAyB,8B,EAAA,qC,EAAA,qBAMtB,SAAAv/B,eANsB,C;AAMP,K;;;YANlBu/B,yB;AAAyB,6C;AAAA,+C;AAAA,c;AAAA,a;AAAA,0S;AAAA;AAAA;;;AAvB9B;AACA;AACI;AAII;AAAA,mBAAc,IAAAxG,UAAA,QAAd;AAAgC,WAAhC,EAAiC,cAAjC,EAAiC;AAAA,mBACjB,IAAA52C,KAAA,EADiB;AACV,WADvB;AAEJ;AACJ;AACA;AACI;AAEI;AAAA,mBAAiB,IAAAu1D,aAAA,EAAjB;AAAgC,WAAhC,EAAiC,iBAAjC,EAAiC;AAAA;;AAAA;;AAAA,mBAEd,uBAFc;AAEqB,WAFtD;AAGJ;AACJ;AACA;;;;;;AAdQ;AAAA,4CAAmB,eAAnB,EAAmB,WAAnB;AAUA;AAAA;;;;;;;;;;2BASHnY,yB,EAAyB;cA1BrC,OAAAt/B,SA0BqC;eA1B3B;AACPlnD,kBAAQ,EAAE,wBADH;AAEPw0D,kBAAQ,k2BAFD;AAuBPpN,mBAAS,EAAE,CAAC,qCAAD,CAvBJ;AAwBPga,uBAAa,EAAE,OAAAC,iBAAA,CAAkB34C;AAxB1B,S;AA0B2B,Q;;;;;;;;kBAM7B,OAAAqrB,M;mBAAO,SAAAkT,e;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvChB;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAGA;AAAA;AAAA;;AAgBA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAGA;AAAA;AAAA;;AAMA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAIA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCgC;AACI;AACA;AAAK;AAA6B;AACtC;;;;;;;;AAEI;AAMI;AAAA;AAAA;AAAA;AAAA;AAAA;AACJ;;;;;;;AALI,qCAAc,WAAd,EAAc,YAAd,EAAc,UAAd,EAAc,uBAAd,EAAc,OAAd,EAAc,IAAd;;;;;;AARZ;AACI;AAIA;AACI;AAQJ;AACJ;;;;;AAdoB;AAAA;AAMR;AAAA;;;;;;AAUR;;;;AAAyB;;;;;;;;;;AAAzB;;;;AAAwC;;;;QAmB3DoiC,oB;;;;;AAwBT,oCAAoBvvE,KAApB,EACoBo+D,MADpB,EAEoBj7D,KAFpB,EAGoB4V,SAHpB,EAIoBmuD,MAJpB,EAIuC;AAAA;;AAAA;;AACnC;AALgB,iBAAAlnE,KAAA,GAAAA,KAAA;AACA,iBAAAo+D,MAAA,GAAAA,MAAA;AACA,iBAAAj7D,KAAA,GAAAA,KAAA;AACA,iBAAA4V,SAAA,GAAAA,SAAA;AACA,iBAAAmuD,MAAA,GAAAA,MAAA;AA3Bb,iBAAA1J,gBAAA,GAAmB,0BAAAA,gBAAnB;AACA,iBAAAna,SAAA,GAAY,KAAAA,SAAZ;AAEA,iBAAA/W,KAAA,GAAQ,EAAR,CAwBgC,CAtBvC;;AACO,iBAAA4kC,YAAA,GAAe,KAAf;AACA,iBAAAuV,iBAAA,GAAoB,KAApB;AACA,iBAAAC,iBAAA,GAAoB,KAApB;AACA,iBAAAC,iBAAA,GAAoB,KAApB;AAGA,iBAAAC,sBAAA,GAAyB,IAAI,OAAA7hG,eAAJ,CAAmD,UAAA4X,YAAA,CAAaC,KAAb,EAAnD,CAAzB;AACA,iBAAAiqF,kBAAA,GAAqB,IAAI,OAAA9hG,eAAJ,CAAmD,UAAA4X,YAAA,CAAaC,KAAb,EAAnD,CAArB;AAEA,iBAAAwB,SAAA,GAAY,IAAI,OAAArZ,eAAJ,CAAyC,EAAzC,CAAZ;AACA,iBAAAosF,SAAA,GAAY,KAAZ;AAaH,iBAAKvgB,UAAL,GAAkB,OAAAp8D,wBAAA,CAAyB,UAAAzB,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,CAAzB,CAAlB;AAFmC;AAGtC;;;;sCAEoB;AACjB,cAAI,OAAO2F,MAAP,KAAkB,QAAtB,EAAgC;AAC5BA,kBAAM,CAACi4F,cAAP,GAAwBv7F,SAAxB;AACH,WAHgB,CAIrB;;;AACA,eAAKpG,aAAL,CAAmB,iBAAnB;AACC;;;mCAEc;AAAA;;AACX;AACA,cAAI,OAAO0J,MAAP,KAAkB,QAAtB,EAAgC;AAC5BA,kBAAM,CAACi4F,cAAP,GAAwB,UAAC9vF,KAAD,EAAW;AAC/B,kBAAMrD,CAAC,GAAGqD,KAAK,IAAInI,MAAM,CAACmI,KAA1B;;AACA,sBAAI,CAACgJ,KAAL,CAAWolE,QAAX,CAAoB,cAAAznE,oBAAA,EAApB;;AACA,qBAAOhK,CAAP;AACD,aAJH;AAKH;;AAED,eAAKqM,KAAL,CAAWolE,QAAX,CAAoB,eAAA3lE,iBAAA,CAAkB/D,OAAlB,EAApB;AAEA,eAAKrU,YAAL,CAAkB,WAAlB,EAA+B,KAAK2Y,KAAL,CAAW5F,IAAX,CAC3B,QAAA4H,MAAA,CAAO,YAAA7D,qBAAP,CAD2B,EAE3B,QAAA6D,MAAA,CAAO,YAAAvD,kCAAP,CAF2B,EAG3B,YAAAtP,GAAA,CAAI,UAAC0kB,OAAD,EAA4C;AAC5C,mBAAO,cAAAD,qBAAA,CAAsBC,OAAtB,CAAP;AACH,WAFD,CAH2B,EAM3B,YAAAq6B,oBAAA,EAN2B,EAO7B3mD,SAP6B,CAOnB,UAAAkQ,IAAI,EAAI;AAChB,oBAAI,CAAC2G,SAAL,CAAe3G,IAAf,CAAoBA,IAApB,EADgB,CAEhB;AACA;;AACH,WAX8B,CAA/B;AAaA,eAAKpQ,YAAL,CAAkB,aAAlB,EAAiC,KAAK2Y,KAAL,CAAWgC,MAAX,CAAkB,OAAAC,iBAAlB,EAChC7H,IADgC,CAC3B,YAAA+H,IAAA,CAAK,CAAL,CAD2B,EAEhC5a,SAFgC,CAEtB,UAAC2a,IAAD,EAAgB;AACnB;AACA,oBAAI,CAAC0J,WAAL,GAAmB,IAAI,cAAAgS,IAAJ,CAAS1b,IAAT,CAAnB;;AACA,oBAAI,CAAClC,KAAL,CAAWolE,QAAX,CAAoB,WAAA9rE,qBAAA,CAAsB;AAAE,uBAAS,QAAI,CAACsS,WAAL,CAAiBlR,KAA5B;AAAmC,sBAAQ,UAAA3H,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB+J,EAA/D;AAAmE,wBAAU;AAA7E,aAAtB,CAApB,EAHmB,CAInB;AACA;AACA;AACA;AACA;AACA;;;AACI,oBAAI,CAACooB,QAAL,CAAc,iBAAd,EAAiC,YAAM;AAChD,sBAAI,CAACyxD,OAAL,CAAa,UAAb;AACA,aAFS,EAEP,KAAK,IAFE,EAVe,CAanB;;AAEH,WAjB4B,CAAjC;AAoBA,eAAKqE,SAAL,GAAiB,IAAjB;AACA,eAAK9pF,YAAL,CAAkB,iBAAlB,EAAqC,KAAK2Y,KAAL,CAAW5F,IAAX,CACjC,QAAA4H,MAAA,CAAO,cAAAuQ,sCAAP,CADiC,EAEnChrB,SAFmC,CAEzB,UAAAkQ,IAAI,EAAI;AAChB;AACA,oBAAI,CAACmvF,sBAAL,CAA4BnvF,IAA5B,CAAiCA,IAAjC;;AACA,gBAAI,CAACA,IAAI,CAAC8mD,OAAL,EAAD,IAAmB9mD,IAAI,CAACiH,OAAxB,IAAmCrI,KAAK,CAACsB,OAAN,CAAcF,IAAI,CAACiH,OAAL,CAAa5N,OAA3B,CAAnC,IAA0E2G,IAAI,CAACiH,OAAL,CAAaowB,KAA3F,EAAkG;AAC9F,sBAAI,CAACqiD,SAAL,GAAiB,KAAjB;AACA,sBAAI,CAACsV,iBAAL,GAAyB,IAAzB;AACA,sBAAI,CAACM,gBAAL,GAAwB,4BAAAxuE,sBAAA,CAAuB9gB,IAAI,CAACiH,OAAL,CAAa5N,OAApC,EAA6CZ,MAA7C,CAAoD,UAAAwB,CAAC;AAAA,uBAAI,EAAEA,CAAC,CAACuM,OAAF,CAAUmQ,YAAV,IAA0B1c,CAAC,CAACuM,OAAF,CAAUsZ,eAAV,KAA8B,QAA1D,CAAJ;AAAA,eAArD,CAAxB;AACA,sBAAI,CAAC86D,WAAL,GAAmB56E,IAAI,CAACiH,OAAL,CAAa5N,OAAhC;;AAEA,kBAAI,QAAI,CAACi2F,gBAAL,CAAsBv7F,MAA1B,EAAkC;AAC9B,wBAAI,CAAC0lF,YAAL,GAAoB,IAApB;AACH;AACJ,aATD,MASO;AACH,sBAAI,CAACC,SAAL,GAAiB,KAAjB;AACA,sBAAI,CAACsV,iBAAL,GAAyB,KAAzB;AACA,sBAAI,CAACM,gBAAL,GAAwB,EAAxB;AACA,sBAAI,CAAC7V,YAAL,GAAoB,KAApB;AACH;AACJ,WApBoC,CAArC;AAsBA,eAAK7pF,YAAL,CAAkB,aAAlB,EAAiC,KAAK2Y,KAAL,CAAW5F,IAAX,CAC7B,QAAA4H,MAAA,CAAO,cAAAyQ,kCAAP,CAD6B,EAE/BlrB,SAF+B,CAErB,UAAAkQ,IAAI,EAAI;;;AAChB,gBAAI,CAACA,IAAI,CAAC8mD,OAAL,EAAD,KAAe,MAAI9mD,IAAI,CAAC+G,eAAT,MAAwB,IAAxB,IAAwB,aAAxB,GAAwB,MAAxB,GAAwB,GAAEswB,KAAzC,CAAJ,EAAoD;AAChD,sBAAI,CAAC43D,iBAAL,GAAyB,IAAzB;AACH;AACJ,WANgC,CAAjC;AAQA,eAAKr/F,YAAL,CAAkB,kBAAlB,EAAsC,KAAK2Y,KAAL,CAAW5F,IAAX,CAClC,QAAA4H,MAAA,CAAO,cAAA0Q,uCAAP,CADkC,EAEpCnrB,SAFoC,CAE1B,UAAAkQ,IAAI,EAAI;;;AAChB,gBAAI,CAACA,IAAI,CAAC8mD,OAAL,EAAD,KAAe,MAAI9mD,IAAI,CAAC+G,eAAT,MAAwB,IAAxB,IAAwB,aAAxB,GAAwB,MAAxB,GAAwB,GAAEswB,KAAzC,CAAJ,EAAoD;AAChD,sBAAI,CAAC63D,iBAAL,GAAyB,IAAzB;AACH;AACJ,WANqC,CAAtC;AAOH;;;sCAEoB;AACjB;AACA,iBAAO,CAAC,KAAKxV,SAAb,CAFiB,CAEO;AAC3B;;;oCAEkBlzE,O,EAAkB;;;AACjC,cAAI,KAAKG,SAAL,IAAkBH,OAAO,CAAC8f,aAA9B,EAA6C;AACzC,mBAAO,CAAP,KAAO,KAAK3f,SAAL,CAAe5R,KAAf,CAAqBM,IAArB,CAA0B,UAAA4E,CAAC;AAAA,qBAAIuM,OAAO,CAAC8f,aAAR,KAA0BrsB,CAAC,CAAClF,KAAhC;AAAA,aAA3B,OAAiE,IAAjE,IAAiE,aAAjE,GAAiE,MAAjE,GAAiE,GAAEgiB,IAAF,CAAO5B,QAA/E;AACH;;AACD,iBAAO,EAAP;AACH,S,CAED;AACA;AACA;;;;oCAEmB;AACf/d,gBAAM,CAACyS,IAAP,CAAY,OAAA2jE,IAAA,CAAK+hB,SAAjB;AACH;;;uCAEqBvvF,I,EAAuB;AACzC,eAAKuI,KAAL,CAAWolE,QAAX,CAAoB,cAAA5nE,oBAAA,CAAqB;AACrCE,mBAAO,EAAE,MAAF,OAAE,CAAF,EAAE,EACFjG,IADE;AAD4B,WAArB,CAApB;AAKA,eAAKuI,KAAL,CAAWolE,QAAX,CAAoB,QAAAzzD,mBAAA,CAAoByrC,KAApB,EAApB;AACA,eAAKghB,MAAL,CAAYl/B,QAAZ,CAAqB,CAAC,SAAD,CAArB,EAAkC;AAAE2tC,sBAAU,EAAE,KAAK1pE;AAAnB,WAAlC;AACH;;;gDAE8B;AAC3B,eAAKi7D,MAAL,CAAYl/B,QAAZ,CAAqB,CAAC,QAAD,CAArB,EAAiC;AAAE2tC,sBAAU,EAAE,KAAK1pE;AAAnB,WAAjC;AACH;;;gCAEc1H,M,EAAgB;;;AAC3B,cAAI,QAAC,KAAKmQ,WAAN,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAElR,KAAnB,CAAJ,EAA8B;AAC1B;AACH,WAH0B,CAK3B;;;AACA,eAAKsF,KAAL,CAAWolE,QAAX,CAAoB,WAAA9rE,qBAAA,CAAsB;AAAE,qBAAS,KAAKsS,WAAL,CAAiBlR,KAA5B;AAAmC,oBAAQ,UAAA3H,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoB+J,EAA/D;AAAmEwI,kBAAM,EAANA;AAAnE,WAAtB,CAApB;AACH;AAGH;;;;;;;;;;;;oCAS2BqzE,S,EAAoC;;;;;;;;;;;yBAI3DA,SAAS,CAAC7wE,OAAV,CAAkBmQ,Y;;;;;AACfnQ,2B,GAAU,KAAKo0E,WAAL,CAAiBvlF,IAAjB,CAAsB,UAAA+qB,GAAG;AAAA,6BAAIA,GAAG,CAACtc,EAAJ,KAAWuzE,SAAS,CAAC7wE,OAAV,CAAkB+Z,oBAA7B,IAAqDH,GAAG,CAACN,eAAJ,KAAwB,SAAjF;AAAA,qBAAzB,C;;wBACTtZ,O;;;;;;AACO,2BAAM,KAAK8a,SAAL,CAAe8D,IAAf,CAAoBiyD,SAAS,CAAC7wE,OAAV,CAAkB+Z,oBAAtC,CAAN;;;AAAV/Z,2B;;;AAEF,yBAAK2tC,cAAL,GAAsB,4BAAArzB,sBAAA,CAAuB,CAACta,OAAD,CAAvB,EAAkC,CAAlC,CAAtB;;;AAGF;AACMgvE,8B,GAAa,KAAK/F,MAAL,CAAY5lE,IAAZ,CAAiB,kCAAAynE,4BAAjB,EAA+C;AAChExnE,gCAAU,EAAE,+BADoD;AAEhE1B,0BAAI,EAAE;AACJ5B,+BAAO,EAAE6wE,SAAS,CAAC7wE,OADf;AAEJ2O,gCAAQ,EAAE,KAAKumE,WAAL,CAAiBrE,SAAS,CAAC7wE,OAA3B,CAFN;AAGJ2tC,sCAAc,EAAE,YAAKA,cAAL,MAAmB,IAAnB,IAAmB,aAAnB,GAAmB,MAAnB,GAAmB,GAAE3tC,OAArB,KAAgC,IAH5C;AAIJ6uE,+BAAO,EAAE,mBAAM;AACb,kCAAI,CAACA,OAAL,CAAa,UAAb,EADa,CACa;;AAC3B;AANG,uBAF0D;AAUhEz5B,+BAAS,EAAE,KAVqD;AAWhEC,mCAAa,EAAE;AAXiD,qBAA/C,C;AAcnB25B,8BAAU,CAACngC,WAAX,GAAyBvlD,SAAzB,CAAmC,UAACwkF,IAAD,EAAU;AAC5C;AACCA,0BAAI,KAAK,sBAAT,IAAmC,QAAI,CAACS,sBAAL,EAAnC;AACD,qBAHD;;;;;;;;;AAIE;AAEH;;;;;;;;;;iDAOkC;AAC5B,eAAKxsE,KAAL,CAAWolE,QAAX,CAAoB,cAAAznE,oBAAA,EAApB;AACA,eAAKqC,KAAL,CAAWolE,QAAX,CAAoB,QAAAzzD,mBAAA,CAAoByrC,KAApB,EAApB;AACH;;;;MA9NqC,OAAAr3D,a;;AAvE1C;;;uBAuEawpF,oB,EAAoB,8B,EAAA,+B,EAAA,uC,EAAA,wC,EAAA,kC;AAAA,K;;;YAApBA,oB;AAAoB,uC;AAAA,+C;AAAA,e;AAAA,a;AAAA,yoC;AAAA;AAAA;;;AApEzB;AACI;AACI;AAGJ;AACA;AACI;AACI;AACI;AAAoB;AAAoB;AACxC;AACI;AACJ;AACJ;AACJ;AACA;AACI;AACI;AAEI;AAAA,mBAAc,IAAA0X,cAAA,QAAd;AAAoC,WAApC;AACA;AAII;AAAA;;AAAA;;AAAA,mBAAmB,uBAAnB;AAAsD,WAAtD;AAEJ;AACJ;AACJ;AACA;AACI;AACI;AAAI;AAAa;AACjB;AAgBA;AAIJ;AACA;AACG;AAGC;AAAA,mBAAS,IAAAC,qBAAA,EAAT;AAAgC,WAAhC;AAEA;AAAM;AACV;AACJ;AACJ;AACJ;AACJ;;;;;;;;AA7DY;AAAA;AAoBY;AAAA,0EAA6D,cAA7D,EAA6D,IAA7D;AASC;AAAA,mDAA0C,UAA1C,EAA0C,GAA1C;AAwBL;AAAA;;;;;;;;;2BAYf3X,oB,EAAoB;cAvEhC,OAAAniC,SAuEgC;eAvEtB;AACPlnD,kBAAQ,EAAE,kBADH;AAEPw0D,kBAAQ,srHAFD;AAqEPpN,mBAAS,EAAE,CAAC,+BAAD;AArEJ,S;AAuEsB,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3IjC;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAqBA;AAAA;AAAA;;AAOA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnCI;AACI;AACA;AAAuB;AAAmE;AAC1F;AAAsC;AAAA;AAAA;AAAA;AAAA;AAAtC;AACJ;;;;;;AACA;AACI;AACA;AAAwB;AAAwE;AACpG;;;;;;AAGQ;;;;;AACI,6DAA+B,UAA/B,EAA+B,yBAA/B;;;;;;AAuBoB;AACI;AACJ;;;;;AADI;AAAA;;;;;;AALZ;AACI;AACA;AACA;AACI;AAGJ;AACJ;;;;;AAJY;AAAA;;;;;;AAMhB;AACI;AACA;AACA;AACI;AAAI;AAAY;AAChB;AAAI;AAAoC;AAC5C;AACJ;;;;;AAHY;AAAA;;;;;;;;AAUZ;AAYI;AAAA;AAAA;AAAA;AAAA,WAAyC,cAAzC,EAAyC;AAAA;AAAA;AAAA;AAAA,SAAzC,EAAyC,wBAAzC,EAAyC;AAAA;AAAA;AAAA;AAAA,SAAzC,EAAyC,qBAAzC,EAAyC;AAAA;AAAA;AAAA;AAAA,SAAzC;AAIH;;;;;AAdG,wFAAyD,UAAzD,EAAyD,yBAAzD,EAAyD,UAAzD,EAAyD,mDAAzD,EAAyD,gBAAzD,EAAyD,eAAzD,EAAyD,aAAzD,EAAyD,mBAAzD,EAAyD,QAAzD,EAAyD,6DAAzD,EAAyD,UAAzD,EAAyD,+DAAzD,EAAyD,UAAzD,EAAyD,4BAAzD,EAAyD,OAAzD,EAAyD,gDAAzD,EAAyD,OAAzD,EAAyD,YAAzD;;;;;;;;AALR;AACI;AAAI;AAAkB;AACtB;AAAG;AAAc;AACjB;AAiBA;AACI;AAEQ;AAAA;AAAA;AAAA,4CAA4B,IAA5B;AAAgC,SAAhC;AACJ;AACJ;AACJ;AACJ;;;;;AAzBO;AAAA;AAEC;AAAA;;;;;;AA6DZ;AACI;AAAK;AAAoB;AACzB;AAAK;AAAoB;AAC7B;;;;;AAHsB;AACb;AAAA;AACA;AAAA;;;;;;;;AAKD;AAAsD;AAAA;AAAA;AAAA;AAAA;AAA8C;AACrC;;;;;;AADqC;AAAA;;;;;;AAH5G;AACI;AAAgC;;AAE5B;AAEJ;AACA;AAAK;AAA0B;AAC/B;AAAK;AAA2B;AAChC;AAAK;AAAoB;AAC7B;;;;;;;AATsB;AACc;AAAA;AAEtB;AAAA;AAGL;AAAA;AACA;AAAA;AACA;AAAA;;;;ADnFzB,QAAMjT,WAAW,GAAG,EAApB;;QAOa+0C,oB;;;;;AA+CT,oCACYpvE,KADZ,EAEYo+D,MAFZ,EAGY3lD,IAHZ,EAIWyuD,MAJX,EAI4B;AAAA;;AAAA;;;;AAExB;AALQ,iBAAAlnE,KAAA,GAAAA,KAAA;AACA,iBAAAo+D,MAAA,GAAAA,MAAA;AACA,iBAAA3lD,IAAA,GAAAA,IAAA;AACD,iBAAAyuD,MAAA,GAAAA,MAAA;AAlDJ,iBAAA1J,gBAAA,GAAmB,0BAAAA,gBAAnB,CAkDqB,CAhD5B;;AACO,iBAAAC,SAAA,GAA0B;AAC7Bt6D,eAAK,EAAE,CAAC,OAAD,EAAU,SAAV,CADsB;AAE7B+oC,qBAAW,EAAE;AAAE32C,mBAAO,EAAE;AAAX;AAFgB,SAA1B;AAKA,iBAAAsK,IAAA,GAAO,IAAI,OAAA9a,eAAJ,CAAiDwG,SAAjD,CAAP;AACA,iBAAA49E,WAAA,GAAc,IAAI,OAAApkF,eAAJ,CAAqCwG,SAArC,CAAd;AACA,iBAAA+V,IAAA,GAAgB,IAAhB,CAwCqB,CAvC5B;;AACO,iBAAA6T,aAAA,GAAgB,mBAAhB,CAsCqB,CArC5B;;AACO,iBAAA8vB,MAAA,GAAkB,KAAlB;AACA,iBAAA+jC,gBAAA,GAA4B,KAA5B;AACA,iBAAAI,oBAAA,GAAgC,KAAhC,CAkCqB,CAjC5B;;AACO,iBAAAiE,0BAAA,GAAqC,IAAI,UAAA7yE,MAAJ,EAArC;AAGP;;AACO,iBAAA6uE,cAAA,GAA0B,IAA1B;AAQP;;AACQ,iBAAA8d,gBAAA,GAA4B,KAA5B;AAMD,iBAAAzpB,YAAA,GAA2B,EAA3B;AACP;;AACO,iBAAA0pB,WAAA,GAAsB,EAAtB;AAEP;;AACO,iBAAAC,qBAAA,GAAgC,EAAhC,CAQqB,CAP5B;;AACO,iBAAA/mC,eAAA,GAA2B,KAA3B;AASH;;;;;AAIA,YAAK,SAAK8d,MAAL,CAAYkpB,oBAAZ,OAAuC,IAAvC,KAA2C,YAAI,SAAKlpB,MAAL,CAAYkpB,oBAAZ,GAAmCv1D,MAAvC,MAA6C,IAA7C,IAA6C,aAA7C,GAA6C,MAA7C,GAA6C,GAAE1tC,KAA/C,MAAoD,IAApD,IAAoD,aAApD,GAAoD,MAApD,GAAoD,GAAEqZ,OAAjG,CAAL,EAAgH;AAC5G;AACA,mBAAK4iD,eAAL,GAAuB,CAAH,KAAG,SAAK8d,MAAL,CAAYkpB,oBAAZ,GAAmCv1D,MAAnC,CAA0C1tC,KAA1C,CAAgDqZ,OAAhD,MAAuD,IAAvD,IAAuD,aAAvD,GAAuD,MAAvD,GAAuD,GAAE4iD,eAAhF;;AACA,mBAAKtgD,KAAL,CAAWolE,QAAX,CAAoB,cAAA5nE,oBAAA,CAAqB;AACjCE,mBAAO,EAAE,SAAK0gE,MAAL,CAAYkpB,oBAAZ,GAAmCv1D,MAAnC,CAA0C1tC,KAA1C,CAAgDqZ;AADxB,WAArB,CAApB;AAIH;;AAduB;AAe3B;;;;mCAEc;AAAA;;AACX,eAAK6pF,kBAAL,GAA0B,aAA1B;AACA,eAAK7pB,YAAL,GAAoB,KAAKjlD,IAAL,CAAUra,SAA9B;AAEA,eAAK/W,YAAL,CACI,aADJ,EAEI,KAAK2Y,KAAL,CACKgC,MADL,CACY,OAAAC,iBADZ,EAEK7H,IAFL,CAEU,YAAA+H,IAAA,CAAK,CAAL,CAFV,EAGK5a,SAHL,CAGe,UAAC2a,IAAD,EAA4B;AACnC;AACA,oBAAI,CAAC0J,WAAL,GAAmB,IAAI,cAAAgS,IAAJ,CAAS1b,IAAT,CAAnB;AACH,WANL,CAFJ;AAWA,eAAK7a,YAAL,CACI,YADJ,EAEI,KAAK2Y,KAAL,CACK5F,IADL,CACU,QAAA4H,MAAA,CAAO,cAAA6O,gBAAP,CADV,EACoC,YAAAq9B,oBAAA,EADpC,EAEK3mD,SAFL,CAEe,UAACkQ,IAAD,EAAuC;;;AAC9C,gBAAIA,IAAJ,EAAU;AACN;AACA,sBAAI,CAAC6oD,eAAL,GAAuB,CAAA7oD,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAE6oD,eAAN,KAAyB,KAAhD;;AAEA,sBAAI,CAACzgD,IAAL,CAAUpI,IAAV,CAAeA,IAAf,EAJM,CAKN;;;AACA,kBAAI,QAAC,QAAI,CAACoI,IAAL,CAAUrT,KAAX,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAEi5E,YAAlB,KAAkC,QAAC,QAAI,CAAC5lE,IAAL,CAAUrT,KAAX,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAEvC,MAAF,CAASgJ,EAAzB,CAAtC,EAAmE;AAC/D;AACH,eARK,CASN;;;AACA,sBAAI,CAACqpB,IAAL,GAAY,IAAI,cAAA5P,KAAJ,CAAU,CAAD,WAAC,QAAI,CAAC7M,IAAL,CAAUrT,KAAX,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAEi5E,YAAjB,MAA6B,IAA7B,IAA6B,aAA7B,GAA6B,MAA7B,GAA6B,GAAEh5D,KAAzC,CAAZ,CAVM,CAYN;;AACA,sBAAI,CAAC+6E,yBAAL;;AACA,sBAAI,CAAClc,2BAAL,CAAiC,CAAD,KAAC,QAAI,CAACzrE,IAAL,CAAUrT,KAAV,MAAe,IAAf,IAAe,aAAf,GAAe,MAAf,GAAe,GAAEvC,MAAlD,EAdM,CAgBN;;;AACA,sBAAI,CAAC2hF,UAAL,CAAgB,KAAhB;;AACA,sBAAI,CAAC6b,cAAL;;AAEA,sBAAI,CAACC,eAAL,GAAuB,CAAH,KAAG,QAAI,CAAC7nF,IAAL,CAAUrT,KAAV,MAAe,IAAf,IAAe,aAAf,GAAe,MAAf,GAAe,GAAEvC,MAAxC;;AACA,kBAAIwN,IAAI,CAAC2W,YAAT,EAAuB;AAAA,6BACiB,CAAH,WAAG,QAAI,SAAJ,YAAI,WAAJ,GAAI,MAAJ,WAAI,CAAEvO,IAAT,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAErT,KAAZ,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAEvC,MADpC;AAAA,oBACX6mB,WADW,UACXA,WADW;AAAA,oBACEC,WADF,UACEA,WADF;;AAEnB,oBAAM5c,SAAS,GAAG,cAAAkiC,mBAAA,CAAoB,CAAD,WAAE,QAAI,SAAJ,YAAI,WAAJ,GAAI,MAAJ,WAAI,CAAEx2B,IAAR,MAAY,IAAZ,IAAY,aAAZ,GAAY,MAAZ,GAAY,GAAErT,KAAb,MAAkB,IAAlB,IAAkB,aAAlB,GAAkB,MAAlB,GAAkB,GAAE6jB,iBAAxC,CAAlB;AACA,oBAAMs3E,OAAO,GAAG,IAAI,UAAAntF,MAAJ,CAAW;AAAElR,sBAAI,EAAE6K,SAAS,CAAC7K,IAAV,CAAe6C,OAAf,EAAR;AAAkC2kB,6BAAW,EAAXA,WAAlC;AAA+CC,6BAAW,EAAXA;AAA/C,iBAAX,CAAhB,CAHmB,CAInB;;AACA,wBAAI,CAAC83D,kBAAL,GAA0B,QAAI,CAACvoB,eAAL,GAAuBqnC,OAAO,CAACx9F,QAAR,CAAiB;AAAEJ,yBAAO,EAAE,CAAF,KAAE,QAAI,CAAC8V,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAErT,KAAF,CAAQQ;AAA5B,iBAAjB,CAAvB,GAAgF26F,OAA1G;AAEA,wBAAI,CAACN,qBAAL,aAAgC,cAAI,SAAJ,YAAI,WAAJ,GAAI,MAAJ,WAAI,CAAE/qE,IAAN,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAEjO,oBAA5C,qBAA2E,cAAI,SAAJ,YAAI,WAAJ,GAAI,MAAJ,WAAI,CAAEiO,IAAN,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAEhO,gBAAvF;AACH;AACJ;AACJ,WAlCL,CAFJ;AAuCA,eAAKjnB,YAAL,CACI,MADJ,EAEI,KAAK2Y,KAAL,CAAW5F,IAAX,CAAgB,QAAA4H,MAAA,CAAO,cAAAkR,yBAAP,CAAhB,EAAmD3rB,SAAnD,CAA6D,UAACkQ,IAAD,EAAU;;;AACnE,oBAAI,CAAC0xE,WAAL,CAAiB1xE,IAAjB,CACI,aAAAA,IAAI,CAACiH,OAAL,MAAY,IAAZ,IAAY,aAAZ,GAAY,MAAZ,GAAY,GAAEiN,MAAd,MAAoB,IAApB,IAAoB,aAApB,GAAoB,MAApB,GAAoB,GAAEngB,MAAtB,IACMiM,IAAI,CAACiH,OAAL,CAAaiN,MAAb,CAAoB,CAApB,EAAuBlJ,QAAvB,CAAgCpJ,QADtC,GAEMghC,WAHV;AAKH,WAND,CAFJ;AAWA,cAAM9hC,UAAU,GAAG,GAAnB;;AACA,cAAI1J,MAAJ,EAAY;AACR,iBAAKo2C,MAAL,GAAcp2C,MAAM,CAAC2J,UAAP,GAAoBD,UAAlC;AACH;;AAED,iBAAA+xE,SAAA,CAAUz7E,MAAV,EAAkB,QAAlB,EACKuL,IADL,CACU,YAAAmwE,YAAA,CAAa,GAAb,CADV,EAEKnwE,IAFL,CAGQ,YAAAowE,GAAA,CAAI;AACA/yE,gBAAI,EAAE,cAACkjE,GAAD,EAAS;AACX,kBAAMl/D,MAAM,GAAGk/D,GAAG,CAACl/D,MAAnB;AACA,sBAAI,CAACwpC,MAAL,GAAcxpC,MAAM,CAACjD,UAAP,GAAoBD,UAAlC;AACH;AAJD,WAAJ,CAHR,EAUKhR,SAVL;AAWH;;;yCAEuB;6BAAA,CACpB;;;AACA,cAAMyzC,SAAS,aAAM,SAAI,IAAJ,aAAI,MAAJ,GAAI,MAAJ,QAAM1e,IAAN,CAAW1O,oBAAjB,gBAAf;AACA,cAAMg6E,IAAI,GAAWvxF,KAAK,CAACsB,OAAN,CAAc,CAAD,KAAC,SAAI,IAAJ,aAAI,MAAJ,GAAI,MAAJ,QAAM2kB,IAAN,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAE0e,SAA1B,IACf,CAAD,KAAC,SAAI,IAAJ,aAAI,MAAJ,GAAI,MAAJ,QAAM1e,IAAN,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAE0e,SAAF,CAAY,CAAZ,CADK,GAEf,CAAD,KAAC,SAAI,IAAJ,aAAI,MAAJ,GAAI,MAAJ,QAAM1e,IAAN,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAE0e,SAFlB;AAGA,cAAMzsC,IAAI,GAAG,CAAH,KAAG,SAAI,IAAJ,aAAI,MAAJ,GAAI,MAAJ,QAAMkqB,IAAN,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAE4c,gCAAF,CAAmC2F,SAAnC,EAA8C4sD,IAA9C,CAAvB;AACA,eAAKR,WAAL,GAAmB74F,IAAI,KAAKhD,SAAT,eAA0BgD,IAA1B,eAA0C,EAA7D;AACH;;;mDAEiC;;;AAC9B,cAAMi+C,SAAS,GAAG,gBAAI,IAAJ,aAAI,MAAJ,GAAI,MAAJ,QAAMlwB,IAAN,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAEhO,gBAAZ,KAA4B,MAAG,SAAI,IAAJ,aAAI,MAAJ,GAAI,MAAJ,QAAMgO,IAAT,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAEjO,oBAA3C,CAAlB;AACA,iBAAO;AAAEm6D,uBAAW,EAAE,CAAC,CAACh8B,SAAjB;AAA4Bi8B,2BAAe,EAAEj8B;AAA7C,WAAP;AACH;AAED;;;;;;;;;;;;;qDAUoClwB,I,EAAa;AAAA;;AAAA,cACvChM,qBADuC,GACb,KAAKzQ,IAAL,CAAUrT,KADG,CACvC8jB,qBADuC;AAG7C,cAAMo4D,UAAU,GAAG,KAAKxB,MAAL,CAAY5lE,IAAZ,CACf,KAAA8qC,uBADe,EAEf;AACIC,oBAAQ,EAAE,MADd;AAEIC,iBAAK,EAAE,MAFX;AAGIzsC,gBAAI,EAAE;AACF+6B,uBAAS,EAAEte,IAAI,CAAC2e,WADd;AAEFuR,uBAAS,EAAEl8B,qBAFT;AAGFpiB,sBAAQ,EAAEouB,IAAI,CAAC1P,QAAL,CAAc1e;AAHtB;AAHV,WAFe,CAAnB;AAYA,eAAK7G,YAAL,CACI,wBADJ,EAEIqhF,UAAU,CAACh8B,iBAAX,CAA6B11C,KAA7B,CAAmCzP,SAAnC,CAA6C,UAACyP,KAAD,EAAwB;AACjE0xE,sBAAU,CAACp5C,KAAX;AACH,WAFD,CAFJ;AAMAo5C,oBAAU,CAAC57B,WAAX,GAAyBvlD,SAAzB,CAAmC;AAAA,mBAAM,QAAI,CAACnC,KAAL,CAAW,wBAAX,CAAN;AAAA,WAAnC;AACH;AAEH;;;;;;;;;;AAcE;;;oDAGmC;;;AAC/B,eAAKs4E,YAAL,GACI,CAAC,KAAKA,YAAL,CAAkBlyE,MAAnB,KAAyB,MAAI,KAAKqU,IAAL,CAAUrT,KAAd,MAAmB,IAAnB,IAAmB,aAAnB,GAAmB,MAAnB,GAAmB,GAAE4R,SAA9C,IACM,CAAD,KAAC,KAAKyB,IAAL,CAAUrT,KAAV,MAAe,IAAf,IAAe,aAAf,GAAe,MAAf,GAAe,GAAE4R,SADvB,GAEM,KAAKs/D,YAHf;AAIA,eAAKmqB,qBAAL,GAA6B,cAAAp8E,4BAAA,CACzB,EADyB,EAEzB,CAAC,KAAK6Q,IAAN,CAFyB,EAGzB,KAAKzc,IAAL,CAAUrT,KAHe,EAIzB,KAAKkxE,YAJoB,EAKzB,KAAK9xD,WALoB,CAA7B;AAOH;AAED;;;;;;;6CAIqB8hE,U,EAAYC,W,EAAa;AAC1C,eAAKwZ,gBAAL,GAAwB,IAAxB;AACA,cAAMtnF,IAAI,GAAG;AACT+tE,sBAAU,EAAE,CAACF,UAAD,GACN;AAAD;AADO,cAEN,CAACC,WAAD,GACA;AAAD;AADC,cAEA,EALG;AAMT1sE,mBAAO,EACH,KAAK4mF,qBAAL,CAA2Bl5E,cAA3B,KAA8C,cAAAnD,iBAAA,CAAkBsD,WAAhE,GACM;AAAD;AADL,cAEM,CAAC4+D,UAAD,GACA;AAAD;AADC,cAEA,CAACC,WAAD,GACA;AAAD;AADC,cAEA,EAbD;AAcTE,uBAAW,EAAE,CAACH,UAAD,GACP;AAAD;AADQ,cAEP,CAACC,WAAD,GACA;AAAD;AADC,cAEA,EAlBG;AAmBTthB,oBAAQ,EAAE,CAACqhB,UAAD,GACJ,KAAKoa,aAAL,CAAmB5wB,IAAnB,CAAwB,IAAxB,CADI,GAEJ,CAACyW,WAAD,GACA,KAAKoa,kBAAL,CAAwB7wB,IAAxB,CAA6B,IAA7B,EAAmC,IAAnC,CADA,GAEA,IAvBG;AAwBT7G,uBAAW,EAAEqd;AAxBJ,WAAb;AA0BA,cAAMxG,MAAM,GAAG,KAAKA,MAAL,CAAY5lE,IAAZ,CAAiB,KAAA6qD,2BAAjB,EAA8C;AACzDtsD,gBAAI,EAAEA,IADmD;AAEzD0B,sBAAU,EAAE,WAF6C;AAGzD8xC,qBAAS,EAAE,KAH8C;AAIzDC,yBAAa,EAAE,oBAJ0C;AAKzDrI,wBAAY,EAAE,CAACyiC;AAL0C,WAA9C,CAAf;AAOH;;;oDAEoE;AAAA,cAAlCpxD,IAAkC,UAAxCA,IAAwC;AAAA,cAAf4mE,WAAe,UAA5BA,WAA4B;;AACjE,cACI,CAAC,CAAC5mE,IAAI,CAAC7O,QAAN,IAAkB,CAAC,KAAKo6E,qBAAL,CAA2Bl8E,MAA3B,CAAkCngB,MAAtD,KACA,CAAC,KAAK27F,gBAFV,EAGE;AACE;AACA,iBAAKrb,oBAAL,CAA0B,KAA1B,EAAiC,IAAjC;AACA,iBAAKkc,wBAAL,CAA8B;AAAD;AAA7B;AACH,WAPD,MAOO,IAAI,CAAC1rE,IAAI,CAAC7E,SAAN,IAAmByrE,WAAnB,IAAkC,CAAC,KAAKiE,gBAA5C,EAA8D;AACjE;AACA,iBAAKrb,oBAAL,CAA0BxvD,IAAI,CAAC7O,QAA/B,EAAyC,CAACy1E,WAA1C,EAFiE,CAET;;AACxD,iBAAK8E,wBAAL,CAA8B;AAAD;AAA7B;AACH,WAJM,MAIA;AACH;;;;;;AAMA,gBAAMj6E,MAAM,GACR,CAACuO,IAAI,CAAC7O,QAAN,IAAkB,CAAC,KAAKo6E,qBAAL,CAA2Bl8E,MAA3B,CAAkCngB,MAArD,GACM;AAAD;AADL,cAEM,CAAC8wB,IAAI,CAAC7E,SAAN,IAAmByrE,WAAnB,GACA;AAAD;AADC,cAEA,KAAKr4C,UAAL,GACA;AAAD;AADC,cAEA;AAAD;AAPT;AAQA,iBAAKm9C,wBAAL,CAA8Bj6E,MAA9B;AACH;AACJ;;;iDAE+Bk6E,Y,EAAsBC,c,EAAyB;AAC3E,eAAKX,kBAAL,GACIU,YAAY,KAAK,EAAjB,GACMA,YADN,GAEM,KAAKpoF,IAAL,CAAUrT,KAAV,CAAgB4hB,YAAhB,IACA,CAAC,aAAD,EAAgB,QAAhB,EAA0B1hB,OAA1B,CAAkC,KAAK66F,kBAAvC,MAA+D,CAAC,CADhE,GAEAW,cAFA,GAGA,KAAKX,kBANf;AAOH;;;oDAgGkCzZ,W,EAAqB;AACpD,cAAI,CAACA,WAAL,EAAkB;AACd;AACH;;AAED,cAAMt0D,YAAY,GAAGs0D,WAAW,CAACpnD,KAAZ,EAArB;;AACA,cAAI,KAAKue,MAAT,EAAiB;AACb,iBAAKooC,0BAAL,GAAkC7zD,YAAlC;AACH,WAFD,MAEO;AACH,iBAAK6zD,0BAAL,GAAkC7zD,YAAY,CAACxmB,YAAb,CAA0B,MAA1B,CAAlC;AACH;AACJ;;;+CAE6Bq6E,0B,EAAoC;AAC9D,eAAKA,0BAAL,GAAkCA,0BAAlC;AACA,eAAKzB,UAAL,CAAgB,CAAC,KAAK3mC,MAAtB,EAA8B,KAAKooC,0BAAnC;AACH;;;uCAEqBxtE,I,EAAwB;AAC1C;AACA,eAAKolC,MAAL,GAAcplC,IAAI,CAAColC,MAAnB;AACA,eAAKqmC,2BAAL,CAAiCzrE,IAAI,CAAC5V,MAAtC;AAEA,eAAK2hF,UAAL,CAAgB,CAAC,KAAK3mC,MAAtB,EAA8B,KAAKooC,0BAAnC,EAL0C,CAM1C;;AACA,eAAKrtE,KAAL,CAAWolE,QAAX,CACI,cAAA5nE,oBAAA,CAAqB;AACjBE,mBAAO,EAAE,MAAF,OAAE,CAAF,kBACA,KAAKmC,IAAL,CAAUrT,KADV,CAAE,EACa;AAClBvC,oBAAM,EAAE4V,IAAI,CAAC5V,MADK;AAElBI,sBAAQ,EAAEwV,IAAI,CAACxV;AAFG,aADb;AADQ,WAArB,CADJ;AASH;;;qCAEqF;AAAA,cAApE0jF,OAAoE,uEAAjD,IAAiD;AAAA,cAA3CV,0BAA2C,uEAAN,IAAM;;;;AAClF,cAAI,QAAC,KAAK/wD,IAAN,MAAU,IAAV,IAAU,aAAV,GAAU,MAAV,GAAU,GAAE/gB,EAAZ,CAAJ,EAAoB;AAChB;AACH;;AAED,cAAM9N,GAAG,GAAG,KAAK,EAAjB;AACA,cAAMm2B,IAAI,GAAGn2B,GAAG,GAAG,CAAnB;AAEA,cAAImlE,UAAU,GAAG,CAACya,0BAA0B,IAAI,KAAKxtE,IAAL,CAAUrT,KAAV,CAAgBvC,MAA/C,EAAuDy8B,KAAvD,EAAjB;;AACA,cAAIqnD,OAAO,IAAInb,UAAU,CAAC71C,WAAX,KAA2B,CAA1C,EAA6C;AACzC61C,sBAAU,GAAGA,UAAU,CAAC5/D,YAAX,CAAwB,MAAxB,CAAb;AACH;;AAED,cAAM8jB,UAAU,GAAG87C,UAAU,CAAC5/D,YAAX,CAAwB,KAAxB,EAA+B9I,QAA/B,CAAwC;AAAER,kBAAM,EAAE,CAAV;AAAaD,uBAAW,EAAE;AAA1B,WAAxC,CAAnB;AACA,cAAMukF,WAAW,GAAGpb,UAAU,CAAC1oE,QAAX,CAAoB;AAAER,kBAAM,EAAE,CAAV;AAAaD,uBAAW,EAAE;AAA1B,WAApB,EAAmDuJ,YAAnD,CAAgE,KAAhE,CAApB,CAdkF,CAgBlF;;AACA,cAAM0J,KAAK,GAAG;AACVzS,kBAAM,EAAE8jF,OAAO,GAAGC,WAAH,GAAiBl3D,UADtB;AAEVzsB,oBAAQ,EAAE0jF,OAAO,GAAGnqD,IAAH,GAAUn2B,GAFjB;AAGVoiB,qBAAS,EAAE,CAAF,KAAE,KAAKyM,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAE/gB,EAHZ;AAIVuU,oBAAQ,EAAE,CAAF,KAAE,KAAKjQ,IAAL,CAAUrT,KAAV,MAAe,IAAf,IAAe,aAAf,GAAe,MAAf,GAAe,GAAEgjB,QAAF,CAAWhjB;AAJ1B,WAAd;AAMA,eAAKwT,KAAL,CAAWolE,QAAX,CAAoB,QAAAhzD,eAAA,CAAgB1W,OAAhB,CAAwBgB,KAAxB,CAApB;AACH;;;2CAEyB;AACtB,cAAMmD,IAAI,GAAG,KAAKA,IAAL,CAAUrT,KAAvB;AADsB,cAEhBvC,MAFgB,GAEG4V,IAFH,CAEhB5V,MAFgB;AAAA,cAER+C,MAFQ,GAEG6S,IAFH,CAER7S,MAFQ;AAGtB/C,gBAAM,GAAGA,MAAM,CAAC8Q,aAAP,CAAqB;AAAEhR,mBAAO,EAAI,OAAOiD,MAAP,KAAkB,QAAlB,IAA8BA,MAAM,IAAI,EAAzC,IAAiD,OAAOA,MAAP,KAAkB,WAApE,GAAoF,CAApF,GAAwF6pD,MAAM,CAAC7pD,MAAD;AAAzG,WAArB,CAAT;AACA,eAAKgT,KAAL,CAAWolE,QAAX,CACI,cAAA5nE,oBAAA,CAAqB;AACjBE,mBAAO,EAAE,MAAF,OAAE,CAAF,kBACAmC,IADA,CAAE,EACE;AACP5V,oBAAM,EAAEA,MADD;AAEP+C,oBAAM,EAAE;AAFD,aADF;AADQ,WAArB,CADJ;AASH;;;wCAEsB;AACnB,eAAKm7F,gBAAL;AACA,eAAK/pB,MAAL,CAAYl/B,QAAZ,CAAqB,KAAKu+B,SAAL,CAAet6D,KAApC,EAA2C;AAAE+oC,uBAAW,EAAE,KAAKuxB,SAAL,CAAevxB;AAA9B,WAA3C;AACH;;;kCAEgB5qC,I,EAAe;AAC5B,eAAK0nE,gBAAL,GAAwB1nE,IAAxB;AACH;;;2CAEyBA,I,EAAe;AACrC,eAAKsqE,UAAL,CAAgB,CAAC,KAAK3mC,MAAtB;AACA,eAAKmkC,oBAAL,GAA4B9nE,IAA5B;AACH;;;sCAEoB;;;AACjB,eAAK0nE,gBAAL,GAAwB,KAAxB;AACA,eAAKI,oBAAL,GAA4B,KAA5B;AACA,eAAKkC,2BAAL,CAAiC,CAAD,KAAC,KAAKzrE,IAAL,CAAUrT,KAAV,MAAe,IAAf,IAAe,aAAf,GAAe,MAAf,GAAe,GAAEvC,MAAlD;AACA,eAAK2hF,UAAL,CAAgB,KAAhB;AACH;AAED;;;;;;mCAGkB;AACd;AACA,eAAK5rE,KAAL,CAAWolE,QAAX,CACI,cAAA5nE,oBAAA,CAAqB;AACjBE,mBAAO,EAAE,MAAF,OAAE,CAAF,EAAE,EACF,KAAKmC,IAAL,CAAUrT,KADR;AADQ,WAArB,CADJ;AAQA,cAAM47F,YAAY,GAAG,KAAKvoF,IAAL,CAAUrT,KAAV,CAAgB+O,EAAhB,GAAqB,MAArB,GAA8B,QAAnD;AACA,eAAK6iE,MAAL,CAAYl/B,QAAZ,CAAqB,CAAC,OAAD,EAAUkpD,YAAV,CAArB;AACH;;;yCAEuB;AACpB,eAAK/e,cAAL,GAAsB,KAAtB;AACH;;;4BA9TsB;AACxB;AACA,cAAG,CAAC,KAAKR,kBAAT,EAA6B;AAC5B,mBAAO,EAAP;AACA;;AACD,iBAAO,KAAKA,kBAAL,CAAwBj+E,UAAxB,CAAmC,gBAAnC,CAAP,CALwB,CAKqC;AAC7D;;;4BAqGoB;;;AACf,iBACI,UAAAmI,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EACKgB,QADL,CACc;AAAEP,kBAAM,EAAE,CAAV;AAAaiC,gBAAI,EAAE,CAAF,WAAE,KAAK0wB,IAAP,MAAW,IAAX,IAAW,aAAX,GAAW,MAAX,GAAW,GAAE1P,QAAX,MAAmB,IAAnB,IAAmB,aAAnB,GAAmB,MAAnB,GAAmB,GAAE0J,cAAF,CAAiB9sB;AAAvD,WADd,EAEKoB,UAFL,CAEgB,IAFhB,EAGKmJ,iBAHL,KAIA,KAJA,GAKA,UAAAhB,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EACKgB,QADL,CACc;AAAEP,kBAAM,EAAE,CAAV;AAAaiC,gBAAI,EAAE,CAAF,WAAE,KAAK0wB,IAAP,MAAW,IAAX,IAAW,aAAX,GAAW,MAAX,GAAW,GAAE1P,QAAX,MAAmB,IAAnB,IAAmB,aAAnB,GAAmB,MAAnB,GAAmB,GAAE0J,cAAF,CAAiBK;AAAvD,WADd,EAEK/rB,UAFL,CAEgB,IAFhB,EAGKmJ,iBAHL,EANJ;AAWH;;;4BAEoB;AACrB,cAAG,CAAC,KAAK2zF,eAAT,EAA0B,OAAO,EAAP;AACtB,iBAAO,KAAKA,eAAL,CAAqB98F,UAArB,CAAgC,gBAAhC,CAAP;AAAyD,WAFxC,CAE0C;AAE9D;;;4BAE2B;;;AACxB,gCAAe,WAAK0xB,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAEyU,MAA1B;AACH;AAED;;;;4BACqB;;;AACjB,cAAMlxB,IAAI,GAAG,KAAKA,IAAL,CAAUrT,KAAvB;AAEA;;AACA,cAAI,QAACqT,IAAI,SAAJ,IAAAA,IAAI,WAAJ,GAAI,MAAJ,GAAAA,IAAI,CAAE4lE,YAAP,MAAmB,IAAnB,IAAmB,aAAnB,GAAmB,MAAnB,GAAmB,GAAEh5D,KAArB,CAAJ,EAAgC;AAC5B,mBAAO,KAAP;AACH;;AAED,cAAMA,KAAK,GAAG,IAAI,cAAAC,KAAJ,CAAU7M,IAAI,CAAC4lE,YAAL,CAAkBh5D,KAA5B,CAAd;AACA,cAAM47E,SAAS,GAAG57E,KAAK,CAACwV,SAAN,CAAgB;AAC9Bh4B,kBAAM,EAAE4V,IAAI,CAAC5V,MADiB;AAE9BI,oBAAQ,EAAEwV,IAAI,CAACxV,QAFe;AAG9BuY,gBAAI,EAAE,KAAKgJ;AAHmB,WAAhB,CAAlB;AAKA,eAAKo8E,wBAAL,CACI,EADJ,EAEIK,SAAS,GAAG;AAAD;AAAF,YAA6B;AAAD;AAFzC;AAIA,iBAAOA,SAAP;AACH;;;4BAEsB;iBAAA,CACnB;;;AACA,cAAMC,gBAAgB,GAAG,MAAH,OAAG,CAAH,EAAG,EAElB,KAAK7vE,IAAL,CAAU4c,gCAAV,CAA2C,iBAA3C,CAFkB,CAAzB;AAIA,cAAMyF,QAAQ,GAAG,KAAKxe,IAAL,KAAc/wB,SAAd,GAA0B,CAAD,KAAC,KAAK+wB,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAE/O,aAAF,CAAgBpe,GAAhB,CAChD,UAACwa,OAAD;AAAA,mBAAqB2+E,gBAAgB,CAAC3+E,OAAD,CAArC;AAAA,WADgD,CAAnC,GAEb,EAFJ;AAIA,iBAAO,mBAAI,IAAIgyB,GAAJ,CAAQb,QAAR,CAAJ,EAAuB5qC,MAAvB,CAA8B,UAACe,CAAD;AAAA,mBAAO,CAAC,CAACA,CAAT;AAAA,WAA9B,CAAP;AACH;;;4BAE4B;yBAAA,CACzB;;;AACA,cAAM2b,QAAQ,GAAG,CAAH,WAAG,KAAK/M,IAAL,CAAUrT,KAAb,MAAkB,IAAlB,IAAkB,aAAlB,GAAkB,MAAlB,GAAkB,GAAEi5E,YAAjB,MAA6B,IAA7B,IAA6B,aAA7B,GAA6B,MAA7B,GAA6B,GAAE74D,QAAhD;AACA,cAAIiB,WAAW,GAAGjB,QAAQ,GAAGA,QAAQ,CAACkB,YAAZ,GAA2B,KAArD,CAHyB,CAIzB;;AACA,cAAI,YAAKwO,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAExO,YAAX,MAA4B,KAAhC,EAAuC;AACnCD,uBAAW,GAAG,KAAd;AACH;;AACD,iBAAOA,WAAP;AACH;;;4BAE4B;;;AACzB,iBAAO,CAAP,KAAO,KAAKyO,IAAL,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAE5hB,KAAF,CAAQpP,KAAR,CAAc,GAAd,EAAmB,CAAnB,CAAhB;AACH;;;4BAEgB;;;AACb,iBAAO,CAAP,WAAO,KAAKgxB,IAAZ,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAE3H,KAAX,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAEqf,OAAzB;AACH;;;4BAEoB;;;AACtB,cAAG,CAAC,KAAK0zD,eAAT,EAA0B,OAAO,EAAP;AAC1B,iBAAO,OAAAtzF,gCAAA,CACL,KAAKszF,eADA,EAEL,KAAKA,eAAL,CAAqBv9F,QAArB,CAA8B;AAAEJ,mBAAO,EAAE,CAAF,KAAE,KAAK8V,IAAL,CAAUrT,KAAV,MAAe,IAAf,IAAe,aAAf,GAAe,MAAf,GAAe,GAAEnC;AAA5B,WAA9B,CAFK,CAAP;AAIE;AAED;;;;;;4BAGmB;iBAAA,CACf;;;AACA,iBAAO,CAAP,KAAO,KAAKwV,IAAL,CAAUrT,KAAV,CAAgBi5E,YAAhB,MAA4B,IAA5B,IAA4B,aAA5B,GAA4B,MAA5B,GAA4B,GAAE74D,QAAF,CAAW1e,QAA9C;AACH;;;;MArZqC,OAAAnI,a;;AAL1C;;;uBAKaqpF,oB,EAAoB,8B,EAAA,+B,EAAA,4C,EAAA,kC;AAAA,K;;;YAApBA,oB;AAAoB,uC;AAAA,+C;AAAA,e;AAAA,c;AAAA,8zE;AAAA;AAAA;AC7DjC;AACI;AACI;AAEI;AAAA,mBAAU,IAAA+Y,gBAAA,EAAV;AAA4B,WAA5B;AAEJ;AACJ;AACA;AAKA;AAIA;AACI;AACI;AAKA;AACI;AACI;AACI;;AACJ;AACA;AACI;AAAuC;AAAI;AAAoB;AAAM;AAAwF;AAAmC;AAAO;AACvM;AACI;AACA;AAAM;AAAC;AACP;AACA;AAAM;AAAC;AACP;AAAiD;AAA8B;AAAgB;AACnG;AACA;AACI;AASJ;AACA;AAQJ;AACJ;AACA;AACI;AA4BA;AACI;AAAI;AAAc;AAClB;AAAG;AAA+C;AAClD;AAQI;AAAA,mBAAgB,IAAAI,WAAA,EAAhB;AAA6B,WAA7B;AACH;AACD;AACI;AAEQ;AAAA,mBAAS,IAAAC,SAAA,CAAU,IAAV,CAAT;AAAwB,WAAxB;AACJ;AACJ;AACJ;AACJ;AACJ;AACJ;AACJ;AACJ;AACA;AACI;AACI;AAEI;AAAiB;AAAA;AAAA;AACb;AACI;AACA;AACJ;AACA;AAAI;AAAqE;AAC7E;AAEA;AAIA;AAUJ;AACJ;AACA;AACI;AACI;AAAkE;AAAA,mBAAS,IAAAV,aAAA,EAAT;AAAwB,WAAxB;AAA0B;AAAI;AAChG;AAA+I;AAAA,mBAAS,IAAAW,QAAA,EAAT;AAAmB,WAAnB;AAAqB;AAAwC;AAChN;AACJ;AACJ;AACJ;;;;AAjJY;AAAA,4DAA+B,MAA/B,EAA+B,aAA/B;AAKiB;AAAA;AAKG;AAAA;AAIkC;AAAA;AACrD;AAAA;AAIG;AAAA;AAGyB;AAAA;AACwB;AAAA;AACzC;AAAA;AAG2C;AAAA;AAAwE;AAAA;AAA0C;AAAA;AAEzJ;AAAA;AAEA;AAAA;AAEA;AAAA;AAA+E;AAAA;AAG1E;AAAA;AAUY;AAAA;AAWP;AAAA;AA8BX;AAAA;AAEC;AAAA,8CAAiB,OAAjB,EAAiB,qBAAjB,EAAiB,UAAjB,EAAiB,oBAAjB,EAAiB,UAAjB,EAAiB,2CAAjB,EAAiB,OAAjB,EAAiB,wCAAjB,EAAiB,OAAjB,EAAiB,QAAjB,EAAiB,MAAjB,EAAiB,0BAAjB;AA2BoC;AAAA;AACxC;AAAA;AAEA;AAAA;AAGkC;AAAA;AAIY;AAAA;AAenB;AAAA;AAAiI;AAAA;;;;;;;;;;2BDnFvKrZ,oB,EAAoB;cALhC,OAAAhiC,SAKgC;eALtB;AACPlnD,kBAAQ,EAAE,kBADH;AAEPmnD,qBAAW,EAAE,+BAFN;AAGPC,mBAAS,EAAE,CAAC,+BAAD;AAHJ,S;AAKsB,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AE7DjC;AAAA;AAAA;;AAMA;AAAA;AAAA;;AASA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBY;AAEI;AAAA;AAAA;AAAA;AAAA;;AAIJ;;;;;AAHI,uFAA2C,SAA3C,EAA2C,sCAA3C;;;;;;;;AAIJ;AAEI;AAAA;AAAA;AAAA;AAAA;;AAIJ;;;;;AAHI,uFAA2C,SAA3C,EAA2C,sCAA3C;;;;;;QAuBHijC,wB;;;;;AAkBT,wCAAoBvwE,KAApB,EAA0CyY,IAA1C,EAAqE;AAAA;;AAAA;;AACjE;AADgB,iBAAAzY,KAAA,GAAAA,KAAA;AAAsB,iBAAAyY,IAAA,GAAAA,IAAA;AAhBnC,iBAAAxN,kBAAA,GAAqB,cAAAA,kBAArB;AACA,iBAAAE,4BAAA,GAA+B,cAAAA,4BAA/B;AACA,iBAAAG,mBAAA,GAAsB,cAAAA,mBAAtB;AACA,iBAAAC,qBAAA,GAAwB,cAAAA,qBAAxB;AACA,iBAAAH,+BAAA,GAAkC,EAAlC;AACA,iBAAAC,+BAAA,GAAkC,EAAlC;AACA,iBAAAq9E,UAAA,GAAa,KAAb;AAEA,iBAAA30E,eAAA,GAAkB,IAAI,OAAAhvB,eAAJ,CAAyC,EAAzC,CAAlB;AAGA,iBAAA+gG,YAAA,GAAe,IAAI,OAAAp7C,YAAJ,EAAf;AAGA,iBAAAi+C,aAAA,GAAgB,IAAI,OAAAj+C,YAAJ,EAAhB;AAE8D;AAEpE;;;;mCAEc;AAAA;;AACX,eAAKrjD,YAAL,CAAkB,aAAlB,EACI,KAAK2Y,KAAL,CAAW5F,IAAX,CACI,QAAA4H,MAAA,CAAO,cAAAuP,gBAAP,CADJ,EAEEhqB,SAFF,CAEY,UAAAkQ,IAAI,EAAI;AAChB,oBAAI,CAACixF,UAAL,GAAkBjxF,IAAlB;AACH,WAJD,CADJ;AAMA,eAAKpQ,YAAL,CAAkB,SAAlB,EACI,KAAK2Y,KAAL,CAAW5F,IAAX,CACI,QAAA4H,MAAA,CAAO,cAAAwP,iBAAP,CADJ,EAEEjqB,SAFF,CAEY,UAAAkQ,IAAI,EAAI;AAChB,oBAAI,CAACsc,eAAL,CAAqBtc,IAArB,CAA0BA,IAA1B;AACH,WAJD,CADJ;AAOA,eAAK4T,+BAAL,GAAuC,KAAKu9E,UAAL,CAAgB,qBAAhB,CAAvC;AACA,eAAKx9E,+BAAL,GAAuC,KAAKw9E,UAAL,CAAgB,qBAAhB,CAAvC;AACH;;;4CAE0BvhC,Y,EAAiC;AAAA;;AACxD,eAAKtzC,eAAL,CAAqB3Z,IAArB,CACI,YAAA+H,IAAA,CAAK,CAAL,CADJ,EAEI,YAAAhT,GAAA,CAAI,UAAAgd,OAAO,EAAI;AACX,gBAAMrN,KAAK,GAAGqN,OAAO,CAACrf,IAAR,CAAa,UAAAunB,CAAC;AAAA,qBAAIA,CAAC,CAAC7nB,KAAF,KAAY66D,YAAY,CAAC76D,KAA7B;AAAA,aAAd,CAAd;;AACA,gBAAIsS,KAAJ,EAAW;AACP;AACA,qBAAOqN,OAAO,CAACjc,MAAR,CAAe,UAAAmkB,CAAC;AAAA,uBAAIA,CAAC,CAAC7nB,KAAF,KAAY66D,YAAY,CAAC76D,KAA7B;AAAA,eAAhB,CAAP;AACH,aALU,CAMX;;;AACA,gDAAW2f,OAAX,IAAoBk7C,YAApB;AACH,WARD,CAFJ,EAWE9/D,SAXF,CAWY,UAAAkQ,IAAI,EAAI;AAChB,oBAAI,CAACsc,eAAL,CAAqBtc,IAArB,CAA0BA,IAA1B;AACH,WAbD;AAcH;;;wCAEsB;AAAA;;AACnB,eAAKsc,eAAL,CAAqB3Z,IAArB,CACI,YAAA+H,IAAA,CAAK,CAAL,CADJ,EAEE5a,SAFF,CAEY,UAAA4kB,OAAO,EAAI;AACnB,oBAAI,CAACw8E,aAAL,CAAmB38C,IAAnB,CAAwB7/B,OAAxB;AACH,WAJD;AAKH;;;mCAEiB5d,I,EAAa;AAC3B,cAAMwC,OAAO,GAAG,KAAK0nB,IAAL,CAAU4c,gCAAV,CAA2C9mC,IAA3C,KAAoD,EAApE;AACA,iBAAO+H,MAAM,CAACpH,IAAP,CAAY6B,OAAZ,EAAqB5B,GAArB,CAAyB,UAACnK,GAAD,EAAS;AACrC,gBAAMuQ,OAAO,GAAGxE,OAAO,CAAC/L,GAAD,CAAvB;AACA,mBAAO;AACHwH,mBAAK,EAAExH,GADJ;AAEHuQ,qBAAO,EAAPA,OAFG;AAGHyV,0BAAY,EAAEzV;AAHX,aAAP;AAKH,WAPM,CAAP;AAQH;;;;MA3EyC,OAAAxP,a;;AAjD9C;;;uBAiDawqF,wB,EAAwB,8B,EAAA,4C;AAAA,K;;;YAAxBA,wB;AAAwB,4C;AAAA;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,6B;AAAA,e;AAAA,c;AAAA,kyB;AAAA;AAAA;;AA9C7B;AACI;AAEI;AAAA,mBAAiB,IAAAsY,mBAAA,QAAjB;AAA4C,WAA5C;;AAGJ;AACA;AAEI;AAAA,mBAAiB,IAAAA,mBAAA,QAAjB;AAA4C,WAA5C;;AAGJ;AACA;AAOA;AAOA;AAEI;AAAA,mBAAiB,IAAAA,mBAAA,QAAjB;AAA4C,WAA5C;;AAGJ;AACA;AAEI;AAAA,mBAAiB,IAAAA,mBAAA,QAAjB;AAA4C,WAA5C;;AAGJ;AACA;AAEA;AACJ;;;;AAtCQ;AAAA,uFAA2C,SAA3C,EAA2C,sBAA3C;AAMA;AAAA,uFAA2C,SAA3C,EAA2C,gCAA3C;AAIA;AAAA;AAOA;AAAA;AASA;AAAA,uFAA2C,SAA3C,EAA2C,uBAA3C;AAMA;AAAA,wFAA2C,SAA3C,EAA2C,yBAA3C;;;;;;;;;;2BAUHtY,wB,EAAwB;cAjDpC,OAAAnjC,SAiDoC;eAjD1B;AACPlnD,kBAAQ,EAAE,uBADH;AAEPw0D,kBAAQ,mmEAFD;AA+CPpN,mBAAS,EAAE,CAAC,oCAAD;AA/CJ,S;AAiD0B,Q;;;;;;;;gBAYhC,OAAAC;;;gBAGA,OAAAA;;;;;;;;;;;;;;;;;;;;;;;;AC3FL;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;QAyBa4hC,yB;AAKT,yCACYnvE,KADZ,EAEYqvB,SAFZ,EAEgE;AAAA;;AADpD,aAAArvB,KAAA,GAAAA,KAAA;AACA,aAAAqvB,SAAA,GAAAA,SAAA;AACX;;;;gCAEc;AACX,eAAKA,SAAL,CAAeC,KAAf;AACH;;;sCAEoBv+B,O,EAA8B;AAC/C,eAAKiP,KAAL,CAAWolE,QAAX,CAAoB,cAAAtnE,gBAAA,CAAiB;AACjCJ,mBAAO,EAAE3M;AADwB,WAAjB,CAApB;AAGA,eAAKu+B,KAAL;AACH;;;;;;AA1CL;;;uBAuBa6/C,yB,EAAyB,8B,EAAA,qC;AAAA,K;;;YAAzBA,yB;AAAyB,uC;AAAA;AAAA;yBAEvB,8BAAAoB,wB,EAAwB,I;;;;;;;;;;;;;;;;AAtB/B;AACA;AACI;AAEI;AAAA,mBAAgB,IAAAjhD,KAAA,EAAhB;AAAuB,WAAvB,EAAwB,eAAxB,EAAwB;AAAA,mBACP,IAAAw5D,aAAA,QADO;AACc,WADtC;AAEJ;AACA;AACI;AACI;AAAA;;AAAA;;AAAA,mBAAiB,mBAAjB;AAAgD,WAAhD,EAAiD,iBAAjD,EAAiD;AAAA;;AAAA;;AAAA,mBAC9B,6BAD8B;AACW,WAD5D;AAIJ;AACJ;AACJ;AACA;;;;;;;;;2BAIK3Z,yB,EAAyB;cAvBrC,OAAA/hC,SAuBqC;eAvB3B;AACPlnD,kBAAQ,EAAE,kBADH;AAEPw0D,kBAAQ,wxBAFD;AAqBPpN,mBAAS,EAAE,CAAC,qCAAD;AArBJ,S;AAuB2B,Q;;;;;;;;gBAEjC,OAAAuD,S;iBAAU,8BAAA0/B,wB;;;;;;;;;;;;;;;;;;;;;;;;ACnCf;AAAA;AAAA;;AASA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAQA;AAAA;AAAA;;AASA;AAAA;AAAA;;AAMA;AAAA;AAAA;;AAGA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAegB;AACI;AAII;AAAA;AAAA;AAAA;AAAA;AACJ;AACJ;;;;;AALQ;AAAA,2CAAa,WAAb,EAAa,IAAb,EAAa,UAAb,EAAa,IAAb;;;;;;;;AAMR;AACI;AACI;AACI;AACI;AACA;AACJ;AACA;AAA+B;AAAsG;AACzI;AACA;AACI;AACI;AAGI;AAAA;AAAA;AAAA;AAAA;AAGA;AACJ;AACA;AAKJ;AACA;AACI;AAAA;AAAA;AAAA;AAAA,WAAwB,cAAxB,EAAwB;AAAA;AAAA;AAAA;AAAA,SAAxB,EAAwB,cAAxB,EAAwB;AAAA;AAAA;AAAA;AAAA,SAAxB;AAGH;AACL;AACJ;AACJ;;;;;AA3BgB;AAAA;AAiBI;AAAA;;;;;;;;AAqBpB;AACI;AACI;AAA8D;AAAA;AAAA;AAAA;AAAA;AAAqB;AAAK;AAC5F;AACJ;;;;AAjEhB,QAAY/S,gBAAZ;;AAAA,eAAYA,gBAAZ,EAA4B;AACxB;AACA;AACH,KAHD,EAAYA,gBAAgB,GAAhB,QAAAA,gBAAA,aAAAA,gBAAA,GAAgB,EAAhB,CAAZ;;QAwEa0S,4B;;;;;AAwCT,4CACYlwE,KADZ,EAEWknE,MAFX,EAGY3J,cAHZ,EAG6C;AAAA;;AAAA;;AACzC;AAHQ,iBAAAv9D,KAAA,GAAAA,KAAA;AACD,iBAAAknE,MAAA,GAAAA,MAAA;AACC,iBAAA3J,cAAA,GAAAA,cAAA;AA1CL,iBAAA0d,aAAA,GAAgB,YAAAA,aAAA,EAAhB;AAoBP;;AACgB,iBAAAz3B,IAAA,GAAyBga,gBAAgB,CAACurB,IAA1C,CAqB6B,CAnB7C;;AACgB,iBAAAC,QAAA,GAAmB,IAAnB;AAGT,iBAAAnJ,YAAA,GAAkC,IAAI,OAAAn1C,YAAJ,EAAlC;AAmBA,iBAAAugC,WAAA,GAAc,IAAI,OAAAlmF,eAAJ,CAA4CwG,SAA5C,CAAd;AACA,iBAAA09F,YAAA,GAAe,IAAI,OAAAlkG,eAAJ,CAA4CwG,SAA5C,CAAf;AACA,iBAAA4rF,IAAA,GAAO,IAAI,OAAApyF,eAAJ,CAAoB,YAAAqyF,cAApB,CAAP;AACA,iBAAA8R,OAAA,GAAU,IAAI,OAAAnkG,eAAJ,CAAoB,YAAA+1F,cAAA,GAAiB,CAArC,CAAV;AACA,iBAAAhgD,QAAA,GAAW,OAAAzhB,aAAA,CAAc,CAAC,SAAK4vE,YAAN,CAAd,EAAmC7uF,IAAnC,CAAwC,YAAAjL,GAAA,CAAI,UAAA7H,KAAK;AAAA,iBAAIA,KAAK,CAAC4I,MAAN,CAAa,UAAAvI,CAAC;AAAA,mBAAI,CAAC,CAACA,CAAN;AAAA,WAAd,CAAJ;AAAA,SAAT,CAAxC,CAAX;AACA,iBAAAwhG,iBAAA,GAAyB,IAAzB;AACA,iBAAA93F,KAAA,GAAQ,CAAR;AACA,iBAAAgmF,MAAA,GAAS,IAAI,OAAAtyF,eAAJ,CAA2B,YAAAuyF,YAA3B,CAAT;AACP;;AACO,iBAAAoF,SAAA,GAAY,IAAI,OAAA33F,eAAJ,CAAuD,EAAvD,CAAZ;AAEA,iBAAAw3F,cAAA,GAAiB,IAAI,OAAAx3F,eAAJ,CAA0CwG,SAA1C,CAAjB;AACA,iBAAAixF,WAAA,GAAc,IAAI,OAAAz3F,eAAJ,CAA+CwG,SAA/C,CAAd;AACA,iBAAAkxF,WAAA,GAAc,IAAI,OAAA13F,eAAJ,CAAuCwG,SAAvC,CAAd;AAjBsC;AAE5C;;;;oCAiBkBvE,O,EAAY;AAAA;;AAC3B,cAAIA,OAAO,CAACy6F,QAAR,IAAoBz6F,OAAO,CAACy6F,QAAR,CAAiBt0F,YAAzC,EAAuD;AACnD,iBAAKsvF,WAAL,CAAiBriF,IAAjB,CACI,YAAA+H,IAAA,CAAK,CAAL,CADJ,EAEI,WAAA0/C,eAAA,EAFJ,EAGI,YAAA1yD,GAAA,CAAI,YAAAysF,iBAAJ,CAHJ,EAIEr0F,SAJF,CAIY,UAAAkQ,IAAI,EAAI;AAChB,sBAAI,CAACwxF,YAAL,CAAkBxxF,IAAlB,CAAuBA,IAAvB;AACH,aAND;AAOH,WARD,MAQO,IAAIzQ,OAAO,CAACy6F,QAAR,IAAoBz6F,OAAO,CAACy6F,QAAR,CAAiBv0F,aAArC,IAAsD,CAAClG,OAAO,CAACy6F,QAAR,CAAiBt0F,YAA5E,EAA0F;AAC7F,iBAAK87F,YAAL,CAAkBxxF,IAAlB,CAAuBlM,SAAvB;AACH;AACJ;;;mCAEc;AAAA;;AACX,eAAKtD,OAAL,CAAa,eAAb,EAA8B;AAAA,mBAAM,QAAI,CAACizD,WAAL,CAAiBrmD,QAAQ,CAACuhB,KAA1B,CAAN;AAAA,WAA9B,EADW,CAGX;;AACA,eAAKnuB,OAAL,CAAa,cAAb,EAA6B;AAAA,mBAAM,QAAI,CAACmhG,WAAL,EAAN;AAAA,WAA7B,EAAuD,IAAvD;AACA,eAAK3M,WAAL,CAAiBhlF,IAAjB,CAAsB,KAAKgV,KAA3B;AACA,eAAK8vE,cAAL,CAAoB9kF,IAApB,CAAyB,KAAKmV,QAA9B;AACA,eAAK4vE,WAAL,CAAiB/kF,IAAjB,CAAsB,KAAKkd,KAA3B;AAEA,eAAKttB,YAAL,CAAkB,qBAAlB,EACI,OAAAgyB,aAAA,CAAc,CACV,KAAKrZ,KAAL,CAAW5F,IAAX,CACI,QAAA4H,MAAA,CAAO,cAAA+Q,wBAAP,CADJ,EAEI,YAAA5jB,GAAA,CAAI,UAACG,CAAD;AAAA,mBAAqCA,CAAC,CAACoP,OAAvC;AAAA,WAAJ,CAFJ,CADU,EAKV,KAAK69E,cAAL,CAAoBniF,IAApB,CAAyB,WAAAynD,eAAA,EAAzB,CALU,EAMV,KAAK26B,WAAL,CAAiBpiF,IAAjB,CAAsB,WAAAynD,eAAA,EAAtB,CANU,CAAd,EAOGt6D,SAPH,CAOa,kBAAuC;AAAA;AAAA,gBAArCilB,cAAqC;AAAA,gBAArBI,QAAqB;AAAA,gBAAX+H,KAAW;;AAChD,gBAAM8oE,mBAAmB,GAAG,CAACjxE,cAAc,CAACb,MAAf,IAAyB,EAA1B,EACvBzb,MADuB,CAChB,UAAA2O,CAAC;AAAA,qBAAI,CAAC,CAACA,CAAC,CAACkyB,MAAJ,IAAclyB,CAAC,CAACgO,KAAF,CAAQzJ,QAAR,CAAiBwJ,QAAQ,CAACrR,EAA1B,CAAd,IAA+CsD,CAAC,CAACgO,KAAF,CAAQzJ,QAAR,CAAiBuR,KAAK,CAACpZ,EAAvB,CAAnD;AAAA,aADe,CAA5B;AAGA,gBAAM+/E,MAAM,GAAsC,EAAlD,CAJgD,CAKhD;AACA;AACA;AACA;AACA;AACA;;AACA,oBAAI,CAACoB,SAAL,CAAejlF,IAAf,CAAoB6jF,MAApB;AAEH,WApBD,CADJ;AAwBH;;;sCAEoB;AAAA;;AACjB,cAAMiC,IAAI,GAAG,IAAb,CADiB,CAEjB;AACA;;AACA,eAAK4L,iBAAL,GAAyBxjG,WAAW,CAAC,YAAM;AACvC,gBAAI,CAAC,QAAI,CAACszD,KAAV,EAAiB;AACb;AACH;;AAEDskC,gBAAI,CAAC8L,UAAL;AACA9L,gBAAI,CAAClsF,KAAL;;AACA,gBAAIksF,IAAI,CAAClsF,KAAL,GAAa,CAAjB,EAAoB;AAChBlM,2BAAa,CAACo4F,IAAI,CAAC4L,iBAAN,CAAb;AACA5L,kBAAI,CAAC4L,iBAAL,GAAyB,IAAzB;AACH;AACJ,WAXmC,EAWjC,IAXiC,CAApC;AAYH;;;oCAEkBxmF,Q,EAAU;AACzBA,kBAAQ,GAAGA,QAAQ,CAACsrB,MAAT,CAAgB,CAAhB,EAAmBtrB,QAAQ,CAACjW,OAAT,CAAiB,IAAjB,CAAnB,CAAX;AACA,eAAK64E,WAAL,GAAmB5iE,QAAnB;AACH;;;mCAEiB;AACd9T,gBAAM,CAACyS,IAAP,CAAY,OAAA2jE,IAAA,CAAKC,IAAjB;AACH;;;qCAEgB;AACb,eAAK+F,WAAL,CAAiBxzE,IAAjB,CAAsB,KAAKwhD,KAA3B;AACA,eAAKk+B,IAAL,CAAU1/E,IAAV,CAAe,YAAAqjF,cAAf;AACH;;;iCAEe;AACZ,cAAI,KAAKoO,OAAL,CAAa18F,KAAb,GAAqB,YAAAsuF,cAAzB,EAAyC;AACrC,iBAAKoO,OAAL,CAAazxF,IAAb,CAAkB,KAAKyxF,OAAL,CAAa18F,KAAb,GAAqB,CAAvC;AACH;AACJ;;;kCAEgB;AACb,cAAI,KAAK08F,OAAL,CAAa18F,KAAb,GAAqB,YAAA4qF,cAAzB,EAAyC;AACrC,iBAAK8R,OAAL,CAAazxF,IAAb,CAAkB,KAAKyxF,OAAL,CAAa18F,KAAb,GAAqB,CAAvC;AACH;AACJ;;;0CAEwB;AACrB,eAAK08F,OAAL,CAAazxF,IAAb,CAAkB,YAAA2/E,cAAlB;AACA,eAAKD,IAAL,CAAU1/E,IAAV,CAAe,YAAA2/E,cAAf;AACA,eAAKC,MAAL,CAAY5/E,IAAZ,CAAiB,YAAA6/E,YAAjB;AACA,eAAKrM,WAAL,CAAiBxzE,IAAjB,CAAsBlM,SAAtB;AACH;;;mCAEiB;AACd,eAAKs0F,YAAL,CAAkB7zC,IAAlB,CAAuB,KAAvB;AACA,cAAMuxC,IAAI,GAAG,IAAb;AACAA,cAAI,CAAClsF,KAAL,GAAa,CAAb;AAEA,eAAK8lF,IAAL,CAAU1/E,IAAV,CAAe,YAAAqjF,cAAf;AACA,eAAKzD,MAAL,CAAY5/E,IAAZ,CAAiB,YAAA6/E,YAAjB;AACA,eAAKrM,WAAL,CAAiBxzE,IAAjB,CAAsBlM,SAAtB,EAPc,CASd;;AACA,eAAK49F,iBAAL,GAAyBxjG,WAAW,CAAC,YAAM;AACvC43F,gBAAI,CAAC8L,UAAL;AACA9L,gBAAI,CAAClsF,KAAL;;AACA,gBAAIksF,IAAI,CAAClsF,KAAL,GAAa,CAAjB,EAAoB;AAChBlM,2BAAa,CAACo4F,IAAI,CAAC4L,iBAAN,CAAb;AACA5L,kBAAI,CAAC4L,iBAAL,GAAyB,IAAzB;AACH;AACJ,WAPmC,EAOjC,GAPiC,CAApC;AAQH;;;mDAEiC;AAC9B,eAAKjiB,MAAL,CAAY5lE,IAAZ,CAAiB,qCAAAy8E,+BAAjB,EACI;AACIl+E,gBAAI,EAAE,KAAK+M,QADf;AAEIrL,sBAAU,EAAE,WAFhB;AAGI8xC,qBAAS,EAAE,KAHf;AAIIC,yBAAa,EAAE;AAJnB,WADJ;AAOH;;;4BA9JqB;AAClB,iBAAO,OAAAgyB,mBAAA,CAAoB,KAAKC,WAAzB,CAAP;AACH;;;4BAEsB;AACnB,iBAAO,KAAKkc,QAAL,GAAgB,KAAKyH,OAAL,CAAa18F,KAA7B,GAAqC,KAAK2qF,IAAL,CAAU3qF,KAAtD;AACH;;;;MAtC6C,OAAAzG,a;;AAnElD;;;uBAmEamqF,4B,EAA4B,8B,EAAA,kC,EAAA,wC;AAAA,K;;;YAA5BA,4B;AAA4B,4C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA,O;AAAA,wE;AAAA,e;AAAA,c;AAAA,o2B;AAAA;AAAA;AAhEjC;AACI;AACI;AAQA;AAiCA;;;;;AAUA;AAKJ;AACJ;;;;AA3DmC;AACN;AAAA;AACE;AAAA;AAQN;AAAA;AAkCb;AAAA;AACA,+CAAkB,KAAlB,EAAkB,UAAlB,EAAkB,OAAlB,EAAkB,sCAAlB,EAAkB,QAAlB,EAAkB,iCAAlB,EAAkB,KAAlB,EAAkB,oCAAlB,EAAkB,UAAlB,EAAkB,mCAAlB;AAQsC;AAAA;;;;;;;;;;;2BAW7CA,4B,EAA4B;cAnExC,OAAA9iC,SAmEwC;eAnE9B;AACPlnD,kBAAQ,EAAE,uBADH;AAEPw0D,kBAAQ,ylGAFD;AAgEPpN,mBAAS,EAAE,CAAC,wCAAD,CAhEJ;AAiEPga,uBAAa,EAAE,OAAAC,iBAAA,CAAkB34C;AAjE1B,S;AAmE8B,Q;;;;;;;;;;gBAGpC,OAAAhmB;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAIA,OAAAA;;;gBAGA,OAAAA;;;gBAEA,OAAA2kD;;;;;;;;;;;;;;;;;;;;;;;;ACzJL;AAAA;AAAA;;AASA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;AAWwB;AAAgC;AAA6F;;;;;AAA7F;AAAA;;;;;;;;;;;;;AAFpC;AACI;AACA;AACJ;;;;;AAHkD;AAC9C;AAAA;AACM;AAAA;;;;;;AAOF;AAA6C;AAAkB;;;;;;;;;;;;AAJnE;AAII;AACJ;;;;;AAJA;AAGU;AAAA;;;;;;AAEV;;;;;;AASI;AAA6C;AAAkB;;;;;;AAJnE;AAII;AACJ;;;;;AAJI;AAGM;AAAA;;;;;;AAEV;;;;;;AAUJ;AAA+B;AAAoB;;;;;AAApB;AAAA;;;;;;AAC/B;AAAiC;AAAsB;;;;;AAAtB;AAAA;;;;;;AAJrC;AACI;AAAM;AAA4B;AAAG;AAAmB;AAAI;AAC5D;AAA8C;AAAQ;AACtD;AACA;AACJ;;;;;AAJU;AAAA;AAA+B;AAAA;AACb;AAAA;AAAsB;AAAA;AACxC;AAAA;AACA;AAAA;;;;;;AAEV;AACI;AACA;AACA;AACJ;;;;;;AAEJ;AACI;AAEJ;;;;;;;;;;;QAKC4iC,uB;;;;;AAxDb;AAAA;;AAAA;;;AA0DW,iBAAAh7D,aAAA,GAAwB,mBAAxB;AACA,iBAAAC,QAAA,GAAmB,EAAnB;AACA,iBAAA7mB,IAAA,GAAe,EAAf;AAeA,iBAAA+6F,UAAA,GAAa,IAAI,OAAA5+C,YAAJ,EAAb;AAIA,iBAAAp1B,WAAA,GAAkC,CAAC,CAAD,EAAG,CAAH,EAAMnmB,GAAN,CAAU,UAAAqmB,CAAC,EAAI;AACpD,iBAAO;AAACD,gBAAI,yCAAkCC,CAAlC;AAAL,WAAP;AACH,SAFwC,CAAlC;AA/EX;AA2HC;;;;mCAxCkB;;;AACX,cAAI,KAAKs5D,SAAL,IAAkB,KAAKA,SAAL,CAAeriE,KAArC,EAA4C;AACxC,iBAAK2I,QAAL,GAAgB,KAAK05D,SAAL,CAAeriE,KAAf,CAAqB/R,KAArB,CAA2BpP,KAA3B,CAAiC,GAAjC,EAAsC,CAAtC,CAAhB;AACA,0BAAA0pB,eAAA,CAAgB,IAAhB,EAAsB,CAAC,CAAD,EAAG,CAAH,CAAtB,EAA6B,KAAKG,aAAlC,EAAiD,KAAKC,QAAtD;AACA,gBAAM/c,CAAC,GAAG,KAAKy2E,SAAL,CAAeriE,KAAf,CAAqBmB,oBAA/B,CAHwC,CAGY;;AACpD,iBAAKrf,IAAL,aAAe,MAAA8J,CAAC,CAAC,CAAD,CAAD,MAAI,IAAJ,IAAI,aAAJ,GAAI,MAAJ,GAAI,GAAEK,WAAF,EAAnB,SAAqCL,CAAC,CAACtE,iBAAF,GAAsB4C,SAAtB,CAAgC,CAAhC,CAArC;AACH;AACJ;;;oCAEkB3P,O,EAAsB;AACrC,cAAI,KAAKuiG,YAAL,KAAsB,IAAtB,IACAviG,OAAO,CAAC6Y,IAAR,IACA7Y,OAAO,CAAC6Y,IAAR,CAAa2pF,WAAb,KAA6B,IAD7B,IAEAxiG,OAAO,CAAC6Y,IAAR,CAAa1S,YAFb,IAGAnG,OAAO,CAAC6Y,IAAR,CAAa1S,YAAb,CAA0BlD,MAH1B,IAIAjD,OAAO,CAAC6Y,IAAR,CAAa1S,YAAb,CAA0B9C,QAL9B,EAMG;AACC,iBAAKk/F,YAAL,GAAoB,KAAKza,SAAL,CAAeriE,KAAf,CAAqBwV,SAArB,CAA+B;AAC/Ch4B,oBAAM,EAAE,KAAK4V,IAAL,CAAU5V,MAD6B;AAE/CI,sBAAQ,EAAE,KAAKwV,IAAL,CAAUxV,QAF2B;AAG/CuY,kBAAI,EAAE,KAAKV;AAHoC,aAA/B,MAIb,KAJa,GAIL,UAJK,GAIQ,aAJ5B;AAMH;AACJ;;;kCAEgB;AACb,iBAAO,KAAK4sE,SAAL,KAAmBvjF,SAA1B;AACH;;;kCAMgBgqB,I,EAAM;AACnB,iBAAOA,IAAI,CAACnS,QAAL,CAAc,aAAd,CAAP;AACH;;;4BANsB;AACnB,iBAAO,KAAK7U,IAAL,CAAUwF,iBAAV,EAAP;AACH;;;4BAKmB;AAChB,iBAAQ,IAAI7K,IAAJ,EAAD,CAAa44B,OAAb,EAAP;AACH;;;;MAlEwC,OAAAnpB,c;;AAxD7C;;;uDAwDaw3E,uB;AAAuB,K;;;YAAvBA,uB;AAAuB,2C;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA,O;AAAA,wE;AAAA,e;AAAA,c;AAAA,u1B;AAAA;AAAA;AArD5B;AAAiD;AAAA,mBAAS,IAAAmZ,UAAA,oBAAT;AAAmC,WAAnC;AAE7C;AACI;AACI;AAIA;AACI;AAMA;AAGJ;AACA;AACI;AAMA;AAGJ;AACJ;AACJ;AACA;AACI;AAMA;AAKJ;AACA;AAIJ;;;;AAhDI;AAGwC;AAAA;AAKF;AAAA;AAQtB;AAAA;AAGsB;AAAA;AAQtB;AAAA;AAKE;AAAA;AAMA;AAAA;AAMiB;AAAA;;;;;;wEAQlCnZ,uB;;;;2BAAAA,uB,EAAuB;cAxDnC,OAAA/iC,SAwDmC;eAxDzB;AACPlnD,kBAAQ,EAAE,sBADH;AAEPw0D,kBAAQ,+gHAFD;AAsDPpN,mBAAS,EAAE,CAAC,mCAAD;AAtDJ,S;AAwDyB,Q;;gBAS/B,OAAA1kD;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAGA,OAAA2kD;;;;;;;;;;;;;;;;;;;;;;;;ACtFL;AAAA;AAAA;;AAUA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAUA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAeA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBwB;AACI;AAMI;AAAA;AAAA;AAAA;AAAA,iBAAU,OAAAk8C,eAAA,kBAAV;AAAwC,SAAxC;AAEJ;AACA;AAEJ;;;;;;AAVQ;AAAA,+DAAiC,WAAjC,EAAiC,KAAjC,EAAiC,MAAjC,EAAiC,8BAAjC,EAAiC,SAAjC,EAAiC,UAAjC,EAAiC,YAAjC,EAAiC,qBAAjC;;;;;;AAHZ;AACI;;AAaJ;;;;;;AAbkB;AAAA;;;;;;;;AAed;AAKI;AAAA;AAAA;AAAA;AAAA;;AAAoC;;;;;;AAHpC,+CAAoB,MAApB,EAAoB,kCAApB,EAAoB,MAApB,EAAoB,mBAApB;;;;;;;;AAMA;AAEQ;AAAA;AAAA;AAAA;AAAA;AAEJ;;AACJ;;;;;AADI;AAAA;;;;;;AAbZ;AACI;;AAOA;AACI;;AAMJ;AACJ;;;;;AAdQ;AAAA,iFAA+E,cAA/E,EAA+E,yBAA/E;AAUQ;AAAA;;;;;;AAMZ;;;;;;;;;;AADJ;AACI;AAEA;AACI;AACJ;AACJ;;;;AAL0B;AAAA;;;;;;;;;;AAnClC;AACI;AACI;;AAeA;;;AAiBA;;;AAOJ;AACJ;;;;;;;;;AAxCsB;AAAA;AAeA;AAAA;AAiBA;AAAA;;;;QAcrBnZ,6B;;;;;AAwCT,6CAAYznB,KAAZ,EACY7oD,KADZ,EAEYo+D,MAFZ,EAGYj7D,KAHZ,EAIYsV,IAJZ,EAKYg1B,KALZ,EAMYlD,OANZ,EAMgC;AAAA;;AAAA;;AAC5B,uCAAMse,KAAN;AANQ,iBAAA7oD,KAAA,GAAAA,KAAA;AACA,iBAAAo+D,MAAA,GAAAA,MAAA;AACA,iBAAAj7D,KAAA,GAAAA,KAAA;AACA,iBAAAsV,IAAA,GAAAA,IAAA;AACA,iBAAAg1B,KAAA,GAAAA,KAAA;AACA,iBAAAlD,OAAA,GAAAA,OAAA;AA7CL,iBAAAm/C,iBAAA,GAAoB,EAApB;AACA,iBAAAC,kBAAA,GAAqB,CAArB;AACA,iBAAAtmC,SAAA,GAAY,KAAAA,SAAZ;AACA,iBAAAC,kBAAA,GAAqB,KAAAA,kBAArB;AACP;;AACgB,iBAAAt2D,MAAA,GAAS,CAAT;AAeT,iBAAAy8F,eAAA,GAAkB,IAAI,OAAA/+C,YAAJ,EAAlB,CAyByB,CAvBhC;;AACgB,iBAAA4V,eAAA,GAAkB,KAAlB;AAET,iBAAAspC,YAAA,GAAe,IAAI,OAAA7kG,eAAJ,CAAoB,SAAK4kG,kBAAzB,CAAf;AAWA,iBAAA9pF,IAAA,GAAO,IAAI,OAAA9a,eAAJ,CAAiDwG,SAAjD,CAAP;AASyB;AAE/B;;;;mCAEc;AAAA;;AACX,sGADW,CAEX;;;AACA,eAAKs+F,iBAAL,GAAyB,OAAAxwE,aAAA,CAAc,CAAC,KAAKywE,UAAN,EAAkB,KAAKF,YAAvB,CAAd,EACpBxvF,IADoB,CAEjB,YAAAjL,GAAA,CAAI,kBAAwB;AAAA;AAAA,gBAAtB46F,EAAsB;AAAA,gBAAlBH,YAAkB;;AAAE,oBAAI,CAACn8C,KAAL,CAAWu8C,YAAX;;AAA2B,mBAAOD,EAAE,SAAF,IAAAA,EAAE,WAAF,GAAE,MAAF,GAAAA,EAAE,CAAE36F,KAAJ,CAAU,CAAV,EAAaw6F,YAAb,CAAP;AAAmC,WAA5F,CAFiB,CAAzB;AAIA,eAAKK,YAAL,GAAoB,OAAA5wE,aAAA,CAAc,CAAC,KAAKywE,UAAN,EAAkB,KAAKF,YAAvB,CAAd,EACfxvF,IADe,CAEZ,YAAAjL,GAAA,CAAI,kBAAwB;AAAA;AAAA,gBAAtB46F,EAAsB;AAAA,gBAAlBH,YAAkB;;;;AACxB,mBAAQ,CAAC,CAAD,KAACG,EAAE,SAAF,IAAAA,EAAE,WAAF,GAAE,MAAF,GAAAA,EAAE,CAAEv+F,MAAJ,MAAU,IAAV,IAAU,aAAV,GAAU,EAAV,GAAc,CAAf,IAAoBo+F,YAA5B;AACH,WAFD,CAFY,CAApB;AAMA,eAAKM,gBAAL,GAAwB,OAAA7wE,aAAA,CAAc,CAAC,KAAKywE,UAAN,EAAkB,KAAKF,YAAvB,CAAd,EACnBxvF,IADmB,CAEhB,YAAAjL,GAAA,CAAI;AAAA;AAAA,gBAAE46F,EAAF;AAAA,gBAAMH,YAAN;;AAAA,mBAAwBG,EAAE,IAAKA,EAAE,CAACv+F,MAAH,GAAYo+F,YAAnB,IAAoC,CAA5D;AAAA,WAAJ,CAFgB,CAAxB;AAIA,eAAKviG,YAAL,CAAkB,aAAlB,EAAiC,KAAK2Y,KAAL,CAAWgC,MAAX,CAAkB,OAAAC,iBAAlB,EAC5B7H,IAD4B,CACvB,YAAA+H,IAAA,CAAK,CAAL,CADuB,EAE5B5a,SAF4B,CAElB,UAAC2a,IAAD,EAA4B;AACnC;AACA,oBAAI,CAAC0J,WAAL,GAAmB,IAAI,cAAAgS,IAAJ,CAAS1b,IAAT,CAAnB;AACH,WAL4B,CAAjC;AAQA,eAAK7a,YAAL,CAAkB,YAAlB,EAAgC,KAAK2Y,KAAL,CAAW5F,IAAX,CAC5B,QAAA4H,MAAA,CAAO,cAAA6O,gBAAP,CAD4B,EAE5B,YAAAq9B,oBAAA,EAF4B,EAG9B3mD,SAH8B,CAGpB,UAACkQ,IAAD,EAAuC;AAC/C,gBAAIA,IAAJ,EAAU;AACN,sBAAI,CAACoI,IAAL,CAAUpI,IAAV,CAAeA,IAAf;;AACA,sBAAI,CAACg2C,KAAL,CAAWqB,aAAX;AAEH;AACJ,WAT+B,CAAhC;AAUA,eAAKrB,KAAL,CAAWqB,aAAX;AACH;;;mCAEiB;AAAA;;AACd;AACA,eAAK86C,YAAL,CAAkBxvF,IAAlB,CACI,YAAA+H,IAAA,CAAK,CAAL,CADJ,EAEI,YAAAhT,GAAA,CAAI,UAAA6G,CAAC;AAAA,mBAAIA,CAAC,GAAG,QAAI,CAAC0zF,iBAAb;AAAA,WAAL,CAFJ,EAGEniG,SAHF,CAGY,UAAAkQ,IAAI,EAAI;AAChB,oBAAI,CAACmyF,YAAL,CAAkBnyF,IAAlB,CAAuBA,IAAvB;;AACA,oBAAI,CAACg2C,KAAL,CAAWqB,aAAX;AACH,WAND;AAOH;;;2CAEyBlnD,K,EAAeoK,I,EAA4B;AACjE,iBAAOA,IAAI,CAACya,KAAL,CAAWlR,EAAlB;AACH;AAGH;;;;;;;;;;;;;qCAUsB+gB,I,EAA4BjO,oB,EAA8BC,gB,EAA0B;AAAA,cAE5FF,YAF4F,GAE3E,KAAKvO,IAAL,CAAUrT,KAFiE,CAE5F4hB,YAF4F;AAGpG,eAAKvO,IAAL,CAAUrT,KAAV,CAAgB8jB,qBAAhB,GAAwC,EAAxC;;AACA,cAAGlC,YAAH,EAAgB;AACZ;AACA,gBAAM+7E,cAAc,GAAG7tE,IAAI,CAAC7P,KAAL,CAAWmvB,uBAAX,CAAmC1rC,MAAnC,CAA0C,UAAAqmC,MAAM;AAAA,qBAAI,CAACA,MAAM,CAAC9e,SAAZ;AAAA,aAAhD,CAAvB;AACA,iBAAK5X,IAAL,CAAUrT,KAAV,CAAgB8jB,qBAAhB,GAAwC65E,cAAc,CAACh7F,GAAf,CAAmB,UAAConC,MAAD;AAAA,qBAAWA,MAAM,CAACjtC,IAAlB;AAAA,aAAnB,CAAxC;AACH,WARmG,CAU1G;;;AACA,cAAG,KAAKuW,IAAL,CAAUrT,KAAV,CAAgB8jB,qBAAhB,CAAsC9kB,MAAzC,EAAiD;AACvC,iBAAK88E,4BAAL,CAAkChsD,IAAlC,EADuC,CACE;AAC5C,WAFP,MAGW,IAAI,KAAKzc,IAAL,CAAUrT,KAAV,CAAgB+zB,gBAAhB,IAAoC,KAAK1gB,IAAL,CAAUrT,KAAV,CAAgB+zB,gBAAhB,CAAiC/0B,MAAzE,EAAiF;AAClF,iBAAK4+F,eAAL,CAAqB9tE,IAArB,EADkF,CACtD;AAC/B,WAFI,MAGA;AACD,iBAAK+tE,cAAL,CAAoB/tE,IAApB,EADC,CAC0B;AAC9B;AAEJ;AAEH;;;;;;;;;;;;;;;uCAYyBA,I,EAAM;AAC9B;AAD8B,cAEnBryB,MAFmB,GAER,KAAK4V,IAAL,CAAUrT,KAFF,CAEnBvC,MAFmB;;AAGzB,cAAI,KAAK+C,MAAT,EAAiB;AACb/C,kBAAM,GAAGA,MAAM,CAACE,QAAP,CAAgB;AAAEJ,qBAAO,EAAE,KAAKiD;AAAhB,aAAhB,CAAT;AACH;AAEA;;;;;AAKD;;;AACA,eAAKoxE,MAAL,CAAYl/B,QAAZ,CAAqB,CAAC,MAAD,CAArB,EAAgC;AAAE2tC,sBAAU,EAAE,KAAK1pE,KAAnB;AAA0B9e,iBAAK,EAAC;AAACqZ,qBAAO,kCACjE,KAAKmC,IAAL,CAAUrT,KADuD,GAClD;AAClB4R,yBAAS,EAAE,KAAKqa,IAAL,CAAUra,SADH;AACc;AAChCnU,sBAAM,EAANA,MAFkB;AAGlB+C,sBAAM,EAAE,KAAKA,MAHK;AAIlBy4E,4BAAY,EAAEnpD,IAJI;AAKlBgkC,+BAAe,EAAE,KAAKA;AALJ,eADkD;AAAR;AAAhC,WAAhC;AASH;AAGH;;;;;;;;;;;;qDASqChkC,I,EAA4B;AAAA;;AAAA,cACxDhM,qBADwD,GAC9B,KAAKzQ,IAAL,CAAUrT,KADoB,CACxD8jB,qBADwD,EAGjE;;AACE,cAAMo4D,UAAU,GAAG,KAAKn+B,OAAL,CAAajpC,IAAb,CAAwE,KAAA8qC,uBAAxE,EAAiG;AAClHC,oBAAQ,EAAE,MADwG;AAElHC,iBAAK,EAAE,MAF2G;AAGlHzsC,gBAAI,EAAE;AACJ+6B,uBAAS,EAAEte,IAAI,CAAC7P,KAAL,CAAWwuB,WADlB;AAEJuR,uBAAS,EAAEl8B,qBAFP;AAGJpiB,sBAAQ,EAAEouB,IAAI,CAAC1P,QAAL,CAAc1e;AAHpB;AAH4G,WAAjG,CAAnB;;AASA,eAAK7G,YAAL,CACE,wBADF,EAEEqhF,UAAU,CAACh8B,iBAAX,CAA6B11C,KAA7B,CAAmCzP,SAAnC,CAA6C,UAACyP,KAAD,EAAwB;AAEvE,gBAAIA,KAAK,CAACiW,MAAN,KAAiB,MAAjB,IAA2B,EAAE,QAAI,CAACpN,IAAL,CAAUrT,KAAV,CAAgB+zB,gBAAhB,IAAoC,CAAC,QAAI,CAAC1gB,IAAL,CAAUrT,KAAV,CAAgB+zB,gBAAhB,CAAiC/0B,MAAxE,CAA/B,EAAiH;AAC/G,sBAAI,CAAC6+F,cAAL,CAAoB/tE,IAApB,EAD+G,CACnF;;AAC7B;;AACGosD,sBAAU,CAACp5C,KAAX;AACD,WAND,CAFF;AAUAo5C,oBAAU,CAAC57B,WAAX,GAAyBvlD,SAAzB,CAAmC;AAAA,mBAAM,QAAI,CAACnC,KAAL,CAAW,wBAAX,CAAN;AAAA,WAAnC;AACD;AAEF;;;;;;;;;;;;wCASyBk3B,I,EAA4B;AAAA;;AACpD;AACE,cAAM6vB,GAAG,GAAG,KAAK5B,OAAL,CAAajpC,IAAb,CAAiD,KAAAgvD,6BAAjD,EAAgF;AACxFhkB,iBAAK,EAAE,OADiF;AAExFzsC,gBAAI,EAAE;AACJwgB,mBAAK,EAAE,KAAKxgB,IAAL,CAAUrT,KAAV,CAAgB+zB,gBADnB;AAEJryB,sBAAQ,EAAE,KAAK2R,IAAL,CAAUrT,KAAV,CAAgB0B;AAFtB;AAFkF,WAAhF,CAAZ;;AAOAi+C,aAAG,CAACO,iBAAJ,CAAsB11C,KAAtB,CAA4BzP,SAA5B,CAAsC,UAAAyP,KAAK,EAAI;AAC7C,gBAAIA,KAAK,CAACiW,MAAN,KAAiB,MAArB,EAA6B;AAC3B,sBAAI,CAACo9E,cAAL,CAAoB/tE,IAApB,EAD2B,CACA;;;AAC3B6vB,iBAAG,CAAC7c,KAAJ;AACD,aAHD,MAGO,IAAIt4B,KAAK,CAACiW,MAAN,KAAiB,OAArB,EAA8B;AACnCk/B,iBAAG,CAAC7c,KAAJ;AACD;AACF,WAPD;AAQD;;;;MA3OgD,KAAAs5B,qB;;AApDnD;;;uBAoDa0nB,6B,EAA6B,yC,EAAA,8B,EAAA,+B,EAAA,uC,EAAA,4C,EAAA,0C,EAAA,kC;AAAA,K;;;YAA7BA,6B;AAA6B,iD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,c;AAAA,a;AAAA,0rB;AAAA;AAAA;AAjDlC;;;;;;;;;;;2BAiDKA,6B,EAA6B;cApDzC,OAAAljC,SAoDyC;eApD/B;AACPlnD,kBAAQ,EAAE,4BADH;AAEPw0D,kBAAQ,qrFAFD;AAiDPpN,mBAAS,EAAE,CAAC,yCAAD,CAjDJ;AAkDP4B,yBAAe,EAAE,OAAAC,uBAAA,CAAwBC;AAlDlC,S;AAoD+B,Q;;;;;;;;;;;;;;;;;;gBAMrC,OAAAxmD;;;gBAEA,OAAAA;;;gBAGA,OAAAA;;;gBAMA,OAAAA;;;gBAGA,OAAA2kD;;;gBAIA,OAAA3kD;;;;;;;;;;;;;;;;;;;;;;;;AC3IL;AAAA;AAAA;;AASA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAYA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBY;;;;;;AADJ;AACI;AACJ;;;;;;;;AADkB;AAAA;;;;;;AAGlB;;AAMI;AACJ;;;;;;;;AAJI;AACA;AAFA;AAIc;AAAA;;;;;;;;AAId;AAMI;AAAA;AAAA;AAAA;AAAA;AAEJ;;;;;AAPI,0DAA4B,YAA5B,EAA4B,2BAA5B,EAA4B,WAA5B,EAA4B,uBAA5B,EAA4B,QAA5B,EAA4B,aAA5B,EAA4B,iBAA5B,EAA4B,sBAA5B;;;;QAaH4nF,2B;;;;;AAuET,2CAAoBxwE,KAApB,EAA4DyY,IAA5D,EAAuF;AAAA;;AAAA;;AACnF;AADgB,iBAAAzY,KAAA,GAAAA,KAAA;AAAwC,iBAAAyY,IAAA,GAAAA,IAAA;AArE5D;;AACgB,iBAAAzrB,MAAA,GAAS,CAAT,CAoEuE,CAlEvF;;AACgB,iBAAAszD,eAAA,GAA4B,KAA5B;AAwBT,iBAAAmpC,eAAA,GAAkB,IAAI,OAAA/+C,YAAJ,EAAlB;AAEA,iBAAA4/C,oBAAA,GAAuB,IAAI,OAAAvlG,eAAJ,CAC1BwG,SAD0B,CAAvB;AAIA,iBAAAg/F,YAAA,GAAe,IAAI,OAAAxlG,eAAJ,CAAoB,KAApB,CAAf;AAKA,iBAAAylG,kBAAA,GAAqB,EAArB;;AAGC,iBAAAC,4BAAA,GAA+B,UACnCC,OADmC,EAEnCjpC,iBAFmC,EAGnCkpC,qBAHmC,EAInCC,gBAJmC,EAKlC;AACD,mBAAKvjG,YAAL,CACIqjG,OADJ,EAEI,OAAArxE,aAAA,CAAc,CACVooC,iBAAiB,CAACrnD,IAAlB,CAAuB,YAAAjL,GAAA,CAAI,UAACG,CAAD,EAAO;AAAD;;AAAC,0BAAAA,CAAC,CAACkP,eAAF,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAEmN,MAAnB,KAA6B,EAA7B;AAA+B,WAA1C,CAAvB,CADU,EAEVg/E,qBAFU,CAAd,EAIKvwF,IAJL,CAKQ,YAAAjL,GAAA,CAAI,kBAA8C;AAAA;AAAA,gBAA5C2B,OAA4C;AAAA;AAAA,gBAAjC+jB,eAAiC,WAAjCA,eAAiC;AAAA,gBAAhBzW,SAAgB,WAAhBA,SAAgB;;;;AAC9C,iCAAAma,sBAAA,CACI,CAAAznB,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAEtF,MAAT,MAAe,MAAIsF,OAAO,CAAC,CAAD,CAAX,MAAc,IAAd,IAAc,aAAd,GAAc,MAAd,GAAc,GAAE8b,QAA/B,IAA0C9b,OAA1C,GAAoD,EADxD,EAEI+jB,eAFJ,EAGIzW,SAHJ;AAIC,WALL,CALR,EAaK7W,SAbL,CAae,UAACkQ,IAAD,EAAU;AACjBmzF,4BAAgB,CAACnzF,IAAjB,CAAsBA,IAAtB;AACH,WAfL,CAFJ;AAmBH,SAzBO;;AA2B+E;AAEtF;;;;mCAEc;AAAA;;AACX,eAAKozF,cAAL,GAAsB,KAAK/5F,OAAL,CAAasJ,IAAb,CAAkB,YAAAjL,GAAA,CAAI,UAACzE,CAAD;AAAA,mBAAOA,CAAC,CAACyzD,SAAT;AAAA,WAAJ,CAAlB,CAAtB;AAEA,eAAK92D,YAAL,CACI,YADJ,EAEI,OAAAgyB,aAAA,CAAc,CAAC,KAAKkxE,YAAN,EAAoB,KAAKvqF,KAAzB,CAAd,EACK5F,IADL,CAEQ,YAAAlK,MAAA,CAAO;AAAA;AAAA,gBAAE0lF,IAAF;;AAAA,mBAAY,CAACA,IAAb;AAAA,WAAP,CAFR,EAGQ,YAAAzmF,GAAA,CAAI;AAAA;AAAA,gBAAE2R,CAAF;AAAA,gBAAKd,KAAL;;AAAA,mBAAgBA,KAAhB;AAAA,WAAJ,CAHR,EAIQ,QAAAgC,MAAA,CAAO,cAAA6O,gBAAP,CAJR,EAKQ,YAAAq9B,oBAAA,EALR,EAOK3mD,SAPL,CAOe,UAACkQ,IAAD,EAAuC;AAC9C,gBAAIA,IAAJ,EAAU;AACN,sBAAI,CAACkL,QAAL,GAAgBlL,IAAI,CAACkL,QAArB;;AACA,sBAAI,CAACmoF,eAAL;AACH,aAHD,MAGO,CACN;AACJ,WAbL,CAFJ;AAkBA,eAAKzjG,YAAL,CACI,WADJ,EAEI,KAAKoxB,IAAL,CAAU5wB,MAAV,CAAiB,WAAjB,EAA8BN,SAA9B,CAAwC,YAAM;AAC1C,oBAAI,CAACujG,eAAL;AACH,WAFD,CAFJ;AAOA,eAAKC,gBAAL,GAAwB,KAAKj6F,OAAL,CAAasJ,IAAb,CACpB,YAAAjL,GAAA,CAAI,UAACG,CAAD,EAAO;AAAD;;AAAC,0BAAAA,CAAC,CAACkP,eAAF,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAEyO,MAAnB,KAA6B,cAAAzB,iBAAA,CAAkBoD,IAA/C;AAAmD,WAA9D,CADoB,EAEpB,YAAAzf,GAAA,CACI,UAACG,CAAD;AAAA,mBACI,IAAI,mCAAA07F,6BAAJ,CAAkC17F,CAAlC,EAAqC,QAAI,CAAC27F,UAA1C,EAAsD,QAAI,CAACT,kBAA3D,CADJ;AAAA,WADJ,CAFoB,CAAxB;AAQA,eAAKC,4BAAL,CACI,eADJ,EAEI,KAAK35F,OAFT,EAGI,KAAKo6F,cAAL,IAAuB,OAAAljF,EAAA,CAAG;AAAE6M,2BAAe,EAAE,EAAnB;AAAuBzW,qBAAS,EAAE;AAAlC,WAAH,CAH3B,EAII,KAAKksF,oBAJT;AAMH;;;0CAEiB;AAAA;;;;AACd,cAAM/7E,mBAAmB,GAAG,CAAH,KAAG,KAAKkK,IAAL,CAAUra,SAAV,MAAmB,IAAnB,IAAmB,aAAnB,GAAmB,MAAnB,GAAmB,GAAElO,MAAF,CAAS,UAAA4Q,CAAC,EAAI;+CAAA,CACzD;;;AACA,gBAAI,CAAC,QAAI,CAAC6B,QAAN,IAAkB,QAAI,CAACA,QAAL,CAAcnX,MAAd,KAAyB,CAA/C,EAAkD,OAAO,KAAP,CAFO,CAGzD;;AACA,gBAAM2/F,gBAAgB,GAAG,oBAAO,QAAI,CAACxoF,QAAL,CAAc,CAAd,CAAP,MAAuB,IAAvB,IAAuB,aAAvB,GAAuB,MAAvB,GAAuB,GAAE6L,IAAzB,MAA6B,IAA7B,IAA6B,aAA7B,GAA6B,MAA7B,GAA6B,GAAEzP,IAA/B,MAAwC,QAAxC,IAAoD,qBAAI,CAAC4D,QAAL,CAAc,CAAd,OAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAE6L,IAAlB,MAAsB,IAAtB,IAAsB,aAAtB,GAAsB,MAAtB,GAAsB,GAAEzP,IAAxB,MAAiC,IAArF,GACnB,CAAD,WAAC,QAAI,CAAC4D,QAAL,CAAc,CAAd,CAAD,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAE6L,IAAlB,MAAsB,IAAtB,IAAsB,aAAtB,GAAsB,MAAtB,GAAsB,GAAEzP,IAAF,CAAO1Z,IADV,GAEnB,CAAD,WAAC,QAAI,CAACsd,QAAL,CAAc,CAAd,CAAD,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAE6L,IAAlB,MAAsB,IAAtB,IAAsB,aAAtB,GAAsB,MAAtB,GAAsB,GAAEzP,IAF9B;AAGA,mBAAO+B,CAAC,CAAC/B,IAAF,KAAWosF,gBAAlB;AACH,WAR8C,CAA/C;AASA,cAAMX,kBAAkB,GAAGj8E,mBAAmB,SAAnB,IAAAA,mBAAmB,WAAnB,GAAmB,MAAnB,GAAAA,mBAAmB,CAAEre,MAArB,CACvB,UAAC0c,QAAD;AAAA,mBACI,CAAC,QAAI,CAACjK,QAAL,CAAcoJ,IAAd,CACG,UAAC2C,YAAD,EAAkB;AAAD;;AAAC,kCAAAA,YAAY,CAACF,IAAb,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAE5B,QAAnB,MAA2B,IAA3B,IAA2B,aAA3B,GAA2B,MAA3B,GAA2B,GAAErR,EAA7B,MAAoCqR,QAAQ,CAACrR,EAA7C;AAA+C,aADpE,CADL;AAAA,WADuB,CAA3B;AAMA,eAAKivF,kBAAL,GAA0BA,kBAA1B;AACA,eAAKO,gBAAL,GAAwB,KAAKj6F,OAAL,CAAasJ,IAAb,CACpB,YAAAjL,GAAA,CAAI,UAACG,CAAD,EAAO;AAAD;;AAAC,0BAAAA,CAAC,CAACkP,eAAF,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAEyO,MAAnB,KAA6B,cAAAzB,iBAAA,CAAkBoD,IAA/C;AAAmD,WAA9D,CADoB,EAEpB,YAAAzf,GAAA,CACI,UAACG,CAAD;AAAA,mBACI,IAAI,mCAAA07F,6BAAJ,CAAkC17F,CAAlC,EAAqC,QAAI,CAAC27F,UAA1C,EAAsD,QAAI,CAACT,kBAA3D,CADJ;AAAA,WADJ,CAFoB,CAAxB;AAOH;;;oCAEkBxjG,O,EAAwB;AACvC,cAAIA,OAAO,CAAC8J,OAAR,IAAmB9J,OAAO,CAACkkG,cAA3B,IAA6ClkG,OAAO,CAACsjG,oBAAzD,EAA+E;AAC3E,iBAAKG,4BAAL,CACI,eADJ,EAEI,KAAK35F,OAFT,EAGI,KAAKo6F,cAAL,IAAuB,OAAAljF,EAAA,CAAG;AAAE6M,6BAAe,EAAE,EAAnB;AAAuBzW,uBAAS,EAAE;AAAlC,aAAH,CAH3B,EAII,KAAKksF,oBAJT;AAMH;AACJ;;;0CAEwBr9E,M,EAA2B;AAChD,eAAKw8E,eAAL,CAAqBz9C,IAArB,CAA0B/+B,MAA1B;AACH;;;;MA9J4C,OAAAlnB,a;;AA/BjD;;;uBA+BayqF,2B,EAA2B,8B,EAAA,4C;AAAA,K;;;YAA3BA,2B;AAA2B,+C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA,O;AAAA,wE;AAAA,c;AAAA,a;AAAA,oZ;AAAA;AAAA;AA5BhC;AAIA;AASA;;;;AAbK;AAKD;AAAA;;;;;;;;;;2BAuBCA,2B,EAA2B;cA/BvC,OAAApjC,SA+BuC;eA/B7B;AACPlnD,kBAAQ,EAAE,0BADH;AAEPw0D,kBAAQ,6+BAFD;AA4BPpN,mBAAS,EAAE,CAAC,uCAAD,CA5BJ;AA6BPga,uBAAa,EAAE,OAAAC,iBAAA,CAAkBszB;AA7B1B,S;AA+B6B,Q;;;;;;;;gBACnC,OAAAjyF;;;gBAEA,OAAAA;;;gBAGA,OAAAA;;;gBAEA,OAAAA;;;gBAMA,OAAAA;;;gBAMA,OAAAA;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAGA,OAAA2kD;;;;;;;;;;;;;;;;;;;;;;;;ACpGL;AAAA;AAAA;;QAMay9C,6B,GAKT,uCAAmB/9E,MAAnB,EAAqDg+E,UAArD,EAAoFx8E,kBAApF,EAA+G;AAAA;;;;AAA5F,WAAAxB,MAAA,GAAAA,MAAA;AAAkC,WAAAg+E,UAAA,GAAAA,UAAA;AACjD,WAAK10B,OAAL,GAAe,IAAf;;AACA,cAAQtpD,MAAR;AACI,aAAK,cAAAzB,iBAAA,CAAkBvf,QAAvB;AACI,eAAKmqB,KAAL,GACA,mEACA,mDAFA;AAGA,eAAKg1E,gBAAL,GAAwB,kBAAxB;AACA;;AACJ,aAAK,cAAA5/E,iBAAA,CAAkBsD,WAAvB;AACI,eAAKsH,KAAL;;AAGA,cAAI3H,kBAAkB,IAAIA,kBAAkB,CAACjjB,MAAnB,GAA4B,CAAtD,EAAyD;AACrD,iBAAK4qB,KAAL,0CAA6C3H,kBAAkB,CAACjjB,MAAnB,GAA4B,CAA5B,GACvCijB,kBAAkB,CAACrf,KAAnB,CAAyB,CAAzB,EAA4B,CAAC,CAA7B,EAAgCD,GAAhC,CAAoC,UAAAyd,QAAQ;AAAA,qBAAIA,QAAQ,CAACvnB,IAAb;AAAA,aAA5C,EAA+DsN,IAA/D,CAAoE,IAApE,IAA4E,OAA5E,GAAsF8b,kBAAkB,CAACA,kBAAkB,CAACjjB,MAAnB,GAA4B,CAA7B,CAAlB,CAAkDnG,IADjG,GAEvC,CAAD,KAACopB,kBAAkB,CAAC,CAAD,CAAlB,MAAqB,IAArB,IAAqB,aAArB,GAAqB,MAArB,GAAqB,GAAEppB,IAF7B;AAIH;;AACD,cAAI4lG,UAAJ,EAAgB;AACZ,iBAAK70E,KAAL,IACI,0EACY60E,UAAU,CAACjoF,GADvB,6DACwEioF,UAAU,CAAC5lG,IADnF,SADJ;AAGH;;AACD,eAAK+lG,gBAAL,GAAwB,kBAAxB;AACA;;AACJ,aAAK,cAAA5/E,iBAAA,CAAkBqD,OAAvB;AACI,eAAKuH,KAAL,GACI,kDACA,iCAFJ;AAGA,eAAKg1E,gBAAL,GAAwB,cAAxB;AACA;;AACJ,aAAK,cAAA5/E,iBAAA,CAAkBuD,uBAAvB;AACI,eAAKqH,KAAL,sFACI3H,kBAAkB,CAACjjB,MAAnB,GAA4B,CAA5B,GACEijB,kBAAkB,CAACrf,KAAnB,CAAyB,CAAzB,EAA4B,CAAC,CAA7B,EAAgCD,GAAhC,CAAoC,UAAAyd,QAAQ;AAAA,mBAAIA,QAAQ,CAACvnB,IAAb;AAAA,WAA5C,EAA+DsN,IAA/D,CAAoE,IAApE,IAA4E,OAA5E,GAAsF8b,kBAAkB,CAACA,kBAAkB,CAACjjB,MAAnB,GAA4B,CAA7B,CAAlB,CAAkDnG,IAD1I,GAEE,CAAD,KAACopB,kBAAkB,CAAC,CAAD,CAAlB,MAAqB,IAArB,IAAqB,aAArB,GAAqB,MAArB,GAAqB,GAAEppB,IAH7B;AAKA,eAAK+lG,gBAAL,GAAwB,kBAAxB;AACA;;AACJ,aAAK,cAAA5/E,iBAAA,CAAkBoD,IAAvB;AACI,eAAK2nD,OAAL,GAAe,KAAf;AACA,eAAKngD,KAAL,GAAa,EAAb;AACA,eAAKg1E,gBAAL,GAAwB,EAAxB;AACA;AA1CR;AA4CH,K;;AAnDL;;;;;;;;;;;;;;;;;;;;ACNA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAOA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAmBA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgEgC;AAEI;AAAA;AAAA;AAAA;AAAA;AAGA;AACJ;;;;;;;;AAxBhB;AAII;AACI;AACI;AACI;AAOI;AAAA;AAAA;AAAA;AAAA,WAA2C,uBAA3C,EAA2C;AAAA;AAAA;AAAA;AAAA,SAA3C,EAA2C,eAA3C,EAA2C;AAAA;AAAA;AAAA;AAAA,SAA3C;AAGH;AACD;AAOA;AAGI;AACJ;AACJ;AACJ;AACJ;AACA;AAII;AAKI;AAAA;AAAA;AAAA;AAAA;AAEJ;AACA;AAQI;AAAA;AAAA;AAAA;AAAA;;AAEJ;AACA;AAUI;AAAA;AAAA;AAAA;AAAA;;;AAEJ;AACA;AASI;AAAA;AAAA;AAAA;AAAA;;AAGJ;AACJ;AACJ;;;;;AA3EoB;AAAA,6DAA+B,YAA/B,EAA+B,iBAA/B,EAA+B,SAA/B,EAA+B,wBAA/B,EAA+B,aAA/B,EAA+B,mBAA/B;AAWA;AAAA;AAmBR;AAAA,6DAA+B,aAA/B,EAA+B,KAA/B,EAA+B,YAA/B,EAA+B,iBAA/B,EAA+B,gBAA/B,EAA+B,4BAA/B;AAYA;AAAA;AAJA,yDAA2B,aAA3B,EAA2B,IAA3B,EAA2B,YAA3B,EAA2B,iBAA3B,EAA2B,gBAA3B,EAA2B,4BAA3B;AAeA;AAAA;AAGA;AAPA,6DAA+B,aAA/B,EAA+B,IAA/B,EAA+B,YAA/B,EAA+B,iBAA/B,EAA+B,gBAA/B,EAA+B,4BAA/B,EAA+B,QAA/B,EAA+B,MAA/B;AAiBA;AAAA;AAJA,gEAAkC,aAAlC,EAAkC,IAAlC,EAAkC,YAAlC,EAAkC,iBAAlC,EAAkC,gBAAlC,EAAkC,4BAAlC,EAAkC,QAAlC,EAAkC,2BAAlC,EAAkC,iBAAlC,EAAkC,IAAlC;;;;;;;;AAcZ;AAII;AAII;AAII;AAEI;AAAA;AAAA;AAAA;AAAA;AACH;AACL;AACJ;AACJ;;;;;AAZQ;AAAA;AAOQ;AAAA;;;;;;;;AArIxB;AAII;AACI;AACJ;AACA;AACI;AACI;AACI;AACI;AAGI;AAAA;AAAA;AAAA;AAAA,WAAqC,aAArC,EAAqC;AAAA;AAAA;AAAA;AAAA,SAArC;;;;AAGH;AACL;AACA;AAAiB;AAAA;AAAA;AAAA;AAAA;AACb;AACI;AACA;AACJ;AACJ;AACJ;AACA;AACI;AACI;AACI;AAAA;AAAA;AAAA;AAAA;;AAGJ;AACJ;AACJ;AACJ;AACA;;AAoFA;;AAmBJ;AACJ;;;;;AAvIyB;AAAA;AAGZ;AAAA;AAE0C;AAAA;AAE/B;AAAA,wEAA2B,MAA3B,EAA2B,kCAA3B,EAA2B,WAA3B,EAA2B,mDAA3B;AASA;AAAA;AACwC;AAAA;AAQxC;AAAA;AAQZ;AAAA;AAoFA;AAAA;;;;QAyDPlc,oB;;;;;AA6ET,oCACYlvE,KADZ,EAEYo+D,MAFZ,EAGYj7D,KAHZ,EAIY+jE,MAJZ,EAKYzuD,IALZ,EAMY9V,QANZ,EAOYopD,eAPZ,EAO4C;AAAA;;AAAA;;AAExC;AARQ,iBAAA/rD,KAAA,GAAAA,KAAA;AACA,iBAAAo+D,MAAA,GAAAA,MAAA;AACA,iBAAAj7D,KAAA,GAAAA,KAAA;AACA,iBAAA+jE,MAAA,GAAAA,MAAA;AACA,iBAAAzuD,IAAA,GAAAA,IAAA;AACA,iBAAA9V,QAAA,GAAAA,QAAA;AACA,iBAAAopD,eAAA,GAAAA,eAAA;AAnFL,iBAAAyR,gBAAA,GAAmB,0BAAAA,gBAAnB;AAEA,iBAAA6tB,UAAA,GAAa,CAAb;AAEA,iBAAAxrF,IAAA,GAAO,IAAI,OAAA9a,eAAJ,CAAiDwG,SAAjD,CAAP;AACA,iBAAAwF,OAAA,GAAU,IAAI,OAAAhM,eAAJ,CAAyC,EAAzC,CAAV;AAEA,iBAAAumG,WAAA,GAAc,IAAI,OAAAvmG,eAAJ,CAAkD,UAAA4X,YAAA,CAAaC,KAAb,EAAlD,CAAd;AACA,iBAAA2uF,mBAAA,GAAsB,IAAI,OAAAxmG,eAAJ,CACzB,UAAA4X,YAAA,CAAaC,KAAb,EADyB,CAAtB;AAGA,iBAAA4uF,mBAAA,GAAsB,IAAI,OAAAzmG,eAAJ,CACzB,UAAA4X,YAAA,CAAaC,KAAb,EADyB,CAAtB;AAGA,iBAAA6uF,sBAAA,GAAyB,IAAI,OAAA1mG,eAAJ,CAC5B,UAAA4X,YAAA,CAAaC,KAAb,EAD4B,CAAzB;AAGA,iBAAA8uF,eAAA,GAAkB,IAAI,OAAA3mG,eAAJ,CACrB,UAAA4X,YAAA,CAAaC,KAAb,EADqB,CAAlB;AAKA,iBAAA+uF,mBAAA,GAAsB,IAAI,OAAA5mG,eAAJ,CAAwCwG,SAAxC,CAAtB;AAEA,iBAAAqgG,oBAAA,GAAuB,SAAKN,WAAL,CAAiBlxF,IAAjB,CAC1B,YAAAjL,GAAA,CAAI,UAACG,CAAD,EAAO;AAAD;;AAAC,wBAAAA,CAAC,CAACkP,eAAF,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAEyO,MAAnB,KAA6B,cAAAzB,iBAAA,CAAkBoD,IAA/C;AAAmD,SAA9D,CAD0B,EAE1B,YAAAzf,GAAA,CAAI,UAACG,CAAD;AAAA,iBAAO,IAAI,mCAAA07F,6BAAJ,CAAkC17F,CAAlC,EAAqC,SAAK27F,UAA1C,CAAP;AAAA,SAAJ,CAF0B,CAAvB;AAOA,iBAAAY,gBAAA,GAAmB,WAAAtqC,qBAAA,CACtB,SAAKgqC,mBADiB,EAEtB,SAAKA,mBAAL,CAAyBnxF,IAAzB,CAA8B,YAAAjL,GAAA,CAAI,UAACG,CAAD,EAAO;AAAD;;AAAA,uBAACA,CAAC,CAACkP,eAAH,MAAkB,IAAlB,IAAkB,aAAlB,GAAkB,MAAlB,GAAkB,GAAEmN,MAApB;AAA0B,SAApC,CAA9B,CAFsB,CAAnB;AAIA,iBAAAmgF,iBAAA,GAAoB,WAAAvqC,qBAAA,CACvB,SAAKiqC,mBADkB,EAEvB,SAAKA,mBAAL,CAAyBpxF,IAAzB,CAA8B,YAAAjL,GAAA,CAAI,UAACG,CAAD,EAAO;AAAD;;AAAA,uBAACA,CAAC,CAACkP,eAAH,MAAkB,IAAlB,IAAkB,aAAlB,GAAkB,MAAlB,GAAkB,GAAEmN,MAApB;AAA0B,SAApC,CAA9B,CAFuB,CAApB;AAIA,iBAAAogF,oBAAA,GAAuB,WAAAxqC,qBAAA,CAC1B,SAAKkqC,sBADqB,EAE1B,SAAKA,sBAAL,CAA4BrxF,IAA5B,CAAiC,YAAAjL,GAAA,CAAI,UAACG,CAAD,EAAO;AAAD;;AAAA,uBAACA,CAAC,CAACkP,eAAH,MAAkB,IAAlB,IAAkB,aAAlB,GAAkB,MAAlB,GAAkB,GAAEmN,MAApB;AAA0B,SAApC,CAAjC,CAF0B,CAAvB;AAIA,iBAAAqgF,aAAA,GAAgB,WAAAzqC,qBAAA,CACnB,SAAKmqC,eADc,EAEnB,SAAKA,eAAL,CAAqBtxF,IAArB,CAA0B,YAAAjL,GAAA,CAAI,UAACG,CAAD,EAAO;AAAD;;AAAA,uBAACA,CAAC,CAACkP,eAAH,MAAkB,IAAlB,IAAkB,aAAlB,GAAkB,MAAlB,GAAkB,GAAEmN,MAApB;AAA0B,SAApC,CAA1B,CAFmB,CAAhB;AAKA,iBAAAyyE,cAAA,GAAiB,IAAI,OAAAr5F,eAAJ,CAA4B,CAA5B,CAAjB;AAOA,iBAAAuc,IAAA,GAAgB,IAAhB;AACA,iBAAAipF,YAAA,GAAe,IAAI,OAAAxlG,eAAJ,CAAoB,KAApB,CAAf;AAEA,iBAAAknG,YAAA,GAAe,IAAI,QAAAhnE,WAAJ,EAAf;AAKA,iBAAAinE,mBAAA,GAAsB,KAAtB;AACA,iBAAAxuF,OAAA,GAAe;AAClBA,iBAAO,EAAE;AAAErY,gBAAI,EAAE,MAAR;AAAgBkW,cAAE,EAAE;AAApB,WADS;AAElBqR,kBAAQ,EAAE,EAFQ;AAGlBwwE,kBAAQ,EAAE;AAHQ,SAAf;AAMA,iBAAA7tB,MAAA,GAAS,IAAT;AAgBH,iBAAK7xD,OAAL,GAAeiF,QAAQ,CAACw6E,QAAT,EAAf;AAHwC;AAI3C;;;;iCAfe;AACZ,eAAK5tB,MAAL,GAAc,CAAC,KAAKA,MAApB;AACH;;;mCAec;AAAA;;;;AACX,eAAKloE,YAAL,CACI,SADJ,EAEI,KAAK2Y,KAAL,CAAW5F,IAAX,CAAgB,QAAA4H,MAAA,CAAO,cAAAwP,iBAAP,CAAhB,EAA2C,YAAA08B,oBAAA,EAA3C,EAAmE3mD,SAAnE,CAA6E,UAACkQ,IAAD,EAAU;AACnF,mBAAO,QAAI,CAAC1G,OAAL,CAAa0G,IAAb,CAAkBA,IAAlB,CAAP;AACH,WAFD,CAFJ;AAOA,eAAKpQ,YAAL,CACI,YADJ,EAEI,OAAAgyB,aAAA,CAAc,CAAC,KAAKkxE,YAAN,EAAoB,KAAKvqF,KAAzB,CAAd,EACK5F,IADL,CAEQ,YAAAlK,MAAA,CAAO;AAAA;AAAA,gBAAE0lF,IAAF;;AAAA,mBAAY,CAACA,IAAb;AAAA,WAAP,CAFR,EAGQ,YAAAzmF,GAAA,CAAI;AAAA;AAAA,gBAAE2R,CAAF;AAAA,gBAAKd,KAAL;;AAAA,mBAAgBA,KAAhB;AAAA,WAAJ,CAHR,EAIQ,QAAAgC,MAAA,CAAO,cAAA6O,gBAAP,CAJR,EAKQ,YAAAq9B,oBAAA,EALR,EAOK3mD,SAPL,CAOe,UAACkQ,IAAD,EAAuC;;;AAC9C,gBAAIA,IAAJ,EAAU;AACN,kBAAMhK,GAAG,GAAGgK,IAAI,CAACxN,MAAL,CAAY8yB,WAAZ,GAA0B,CAAtC;AACA,sBAAI,CAACsuE,UAAL,GAAkB59F,GAAG,IAAI,CAAP,GAAW,IAAIA,GAAf,GAAqB,CAAvC;;AACA,kBAAMmf,QAAQ,GAAG,QAAI,CAAC6L,IAAL,CAAUra,SAAV,CAAoBtR,IAApB,CACb,UAACgU,CAAD,EAAO;AAAD;;AAAC,uBAAAA,CAAC,CAACvF,EAAF,MAAI,kBAAK9D,IAAI,CAACkL,QAAL,CAAc,CAAd,CAAL,MAAqB,IAArB,IAAqB,aAArB,GAAqB,MAArB,GAAqB,GAAE6L,IAAvB,MAA2B,IAA3B,IAA2B,aAA3B,GAA2B,MAA3B,GAA2B,GAAE5B,QAA7B,MAAqC,IAArC,IAAqC,aAArC,GAAqC,MAArC,GAAqC,GAAErR,EAA3C;AAA6C,eADvC,CAAjB;;AAGA,sBAAI,CAAC0vF,UAAL,GACA,CAAAr+E,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAElI,OAAV,CAAkB,oBAAlB,OAAsC,oCACtCjN,IAAI,CAACkL,QAAL,CAAc7V,IAAd,CACI,UAAAwrB,MAAM,EAAI;AAAD;;AAAA,qDAACA,MAAM,SAAN,IAAAA,MAAM,WAAN,GAAM,MAAN,GAAAA,MAAM,CAAE9J,IAAT,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAE5B,QAAf,MAAuB,IAAvB,IAAuB,aAAvB,GAAuB,MAAvB,GAAuB,GAAEvM,SAAzB,MAAkC,IAAlC,IAAkC,aAAlC,GAAkC,MAAlC,GAAkC,GAAEyxB,cAApC,MAAkD,IAAlD,IAAkD,aAAlD,GAAkD,MAAlD,GAAkD,GAAE7zB,OAApD,MAA2D,IAA3D,IAA2D,aAA3D,GAA2D,MAA3D,GAA2D,GAAEgtF,UAA7D;AAAuE,eADpF,CADsC,MAGrC,IAHqC,IAGrC,aAHqC,GAGrC,MAHqC,GAGrC,GAAEz8E,IAHmC,MAG/B,IAH+B,IAG/B,aAH+B,GAG/B,MAH+B,GAG/B,GAAE5B,QAH6B,MAGrB,IAHqB,IAGrB,aAHqB,GAGrB,MAHqB,GAGrB,GAAEvM,SAHmB,MAGV,IAHU,IAGV,aAHU,GAGV,MAHU,GAGV,GAAEyxB,cAHQ,MAGM,IAHN,IAGM,aAHN,GAGM,MAHN,GAGM,GAAE7zB,OAHR,MAGe,IAHf,IAGe,aAHf,GAGe,MAHf,GAGe,GAAEgtF,UAHvD,CADA,CANM,CAWN;AACA;;AACA,kBAAMkB,IAAI,GAAG,QAAA9rC,sBAAA,CAAuB5oD,IAAI,CAACxN,MAA5B,CAAb;;AACA,sBAAI,CAAC0hG,mBAAL,CAAyBl0F,IAAzB,cAAoC,OAAA3D,wBAAA,CAAyBq4F,IAAzB,CAApC,GAdM,CAeN;;;AACA,sBAAI,CAACtsF,IAAL,CAAUpI,IAAV,CAAeA,IAAf,EAhBM,CAkBN;;;AACA,sBAAI,CAAC20F,iBAAL,GAnBM,CAqBN;;AACH,aAtBD,MAsBO;AACH;AACA,sBAAI,CAAChuB,MAAL,CAAYl/B,QAAZ,CAAqB,CAAC,KAAD,CAArB,EAA8B;AAC1Bq3C,0BAAU,EAAE,IADc;AAE1B1J,0BAAU,EAAE,QAAI,CAAC1pE;AAFS,eAA9B;AAIH;AACJ,WArCL,CAFJ;AA0CA,eAAK9b,YAAL,CACI,SADJ,EAEI,KAAK2Y,KAAL,CAAW5F,IAAX,CAAgB,QAAA4H,MAAA,CAAO,cAAA8Q,qBAAP,CAAhB,EAA+CvrB,SAA/C,CAAyD,UAACkQ,IAAD,EAAU;;;AAC/D,oBAAI,CAAC6zF,WAAL,CAAiB7zF,IAAjB,CAAsBA,IAAtB;;AACA,oBAAI,CAAC8zF,mBAAL,CAAyB9zF,IAAzB,CAA8BA,IAA9B,EAF+D,CAG/D;;;AACA,oBAAI,CAAC40F,iBAAL,GAAyB,OAAA50F,IAAI,CAACiH,OAAL,MAAY,IAAZ,IAAY,aAAZ,GAAY,MAAZ,GAAY,GAAEiN,MAAd,IACnB,CAAD,WAAClU,IAAI,CAACiH,OAAN,MAAa,IAAb,IAAa,aAAb,GAAa,MAAb,GAAa,GAAEiN,MAAd,MAAoB,IAApB,IAAoB,aAApB,GAAoB,MAApB,GAAoB,GAAExc,GAAF,CAAM,QAAAmyD,qBAAN,CADD,GAEnB,EAFN;AAGH,WAPD,CAFJ;AAYA,eAAKj6D,YAAL,CACI,cADJ,EAEI,KAAK2Y,KAAL,CAAW5F,IAAX,CAAgB,QAAA4H,MAAA,CAAO,cAAAgR,6BAAP,CAAhB,EAAuDzrB,SAAvD,CAAiE,UAACkQ,IAAD,EAAU;AACvE,oBAAI,CAAC+zF,mBAAL,CAAyB/zF,IAAzB,CAA8BA,IAA9B;AACH,WAFD,CAFJ;AAOA,eAAKpQ,YAAL,CACI,gBADJ,EAEI,KAAK2Y,KAAL,CAAW5F,IAAX,CAAgB,QAAA4H,MAAA,CAAO,cAAAiR,4BAAP,CAAhB,EAAsD1rB,SAAtD,CAAgE,UAACkQ,IAAD,EAAU;AACtE,oBAAI,CAACg0F,sBAAL,CAA4Bh0F,IAA5B,CAAiCA,IAAjC;AACH,WAFD,CAFJ;AAOA,eAAKpQ,YAAL,CACI,UADJ,EAEI,KAAK2Y,KAAL,CAAW5F,IAAX,CAAgB,QAAA4H,MAAA,CAAO,cAAAmR,6BAAP,CAAhB,EAAuD5rB,SAAvD,CAAiE,UAACkQ,IAAD,EAAU;AACvE,oBAAI,CAACi0F,eAAL,CAAqBj0F,IAArB,CAA0BA,IAA1B;AACH,WAFD,CAFJ;AAOA,eAAKkzF,qBAAL,GAA6B,KAAK3qF,KAAL,CAAW5F,IAAX,CACzB,QAAA4H,MAAA,CAAO,YAAA7D,qBAAP,CADyB,EAEzB,QAAA6D,MAAA,CAAO,YAAA9D,aAAA,CAAcK,SAAd,CAAwBC,eAA/B,CAFyB,EAGzB,WAAAqjD,eAAA,EAHyB,EAIzB,YAAA1yD,GAAA,CAAI,cAAAylB,0BAAJ,CAJyB,EAKzB,YAAAiF,WAAA,CAAY,CAAZ,CALyB,CAA7B;AAQA,eAAKxyB,YAAL,CACI,cADJ,EAEI,KAAK4kG,YAAL,CAAkB/lE,YAAlB,CAA+B3+B,SAA/B,CAAyC,UAACiF,KAAD,EAAW;;;AAChD,gBAAM++F,mBAAmB,GAAG/gE,SAAS,CAAC,QAAI,CAAC8gE,WAAL,CAAiB9+F,KAAlB,CAArC;AACA,gBAAM8/F,aAAa,GAAG,CAAH,WAAG,QAAI,CAAChB,WAAL,CAAiB9+F,KAAjB,CAAuBkS,OAA1B,MAAiC,IAAjC,IAAiC,aAAjC,GAAiC,MAAjC,GAAiC,GAAEiN,MAAhC,MAAsC,IAAtC,IAAsC,aAAtC,GAAsC,MAAtC,GAAsC,GAAEzb,MAAF,CAAS,UAAC2O,CAAD,EAAO;AACxE,kBAAIA,CAAC,CAACtD,EAAF,KAAS/O,KAAK,CAACA,KAAnB,EAA0B;AACtB,uBAAO,IAAP;AACH;;AACD,qBAAO,KAAP;AACH,aAL2D,CAA5D;AAMA++F,+BAAmB,CAAC7sF,OAApB,CAA4BiN,MAA5B,GAAqC2gF,aAArC;;AACA,oBAAI,CAACf,mBAAL,CAAyB9zF,IAAzB,CAA8B8zF,mBAA9B;AACH,WAVD,CAFJ,EA3FW,CA0GX;;AACA,cAAI,CAAJ,KAAI,KAAK7tF,OAAL,MAAY,IAAZ,IAAY,aAAZ,GAAY,MAAZ,GAAY,GAAE0/E,QAAlB,EAA4B;AACxB,iBAAKhf,MAAL,CAAYl/B,QAAZ,CAAqB,qBAArB,EAA4C;AACxC76C,mBAAK,EAAE,MAAF,OAAE,CAAF,EAAE,EAAK,KAAKqZ,OAAV,CADiC;AAExCwuC,yBAAW,EAAE;AACT32C,uBAAO,EAAE;AADA;AAF2B,aAA5C;AAMH;;AAED,eAAKlO,YAAL,CACI,cADJ,EAEI,KAAK+2F,cAAL,CAAoB72F,SAApB,CAA8B,UAACiF,KAAD,EAAW;AACrC;AACA,oBAAI,CAAC4/F,iBAAL;AACH,WAHD,CAFJ;AAOH;AAED;;;;;;;;;4CAM2B;;;AACvB,cAAMG,iBAAiB,GAAG,KAAKnO,cAAL,CAAoB5xF,KAA9C,CADuB,CAC+B;;AACtD,cAAMggG,aAAa,GAAG,CAAH,KAAG,KAAK9uF,OAAL,MAAY,IAAZ,IAAY,aAAZ,GAAY,MAAZ,GAAY,GAAE0/E,QAApC,CAFuB,CAGtB;;AACD,cAAGmP,iBAAiB,KAAK,CAAtB,IAA2B,CAACC,aAA/B,EAA8C;AAC1C;AACA,iBAAKxsF,KAAL,CAAWolE,QAAX,CAAoB,QAAAplB,kBAAA,CAAmB,cAAAtwC,mBAAA,CAAoB,KAAK7P,IAAL,CAAUrT,KAA9B,CAAnB,CAApB;AACH,WAPsB,CASvB;;;AACA,cAAG+/F,iBAAiB,KAAK,CAAtB,IAA2BC,aAA9B,EAA6C;AACzC;AACA,iBAAKxsF,KAAL,CAAWolE,QAAX,CAAqB,QAAAtzD,sBAAA,CAAuBpW,OAAvB,CAA+B,cAAAgU,mBAAA,CAAoB,KAAK7P,IAAL,CAAUrT,KAA9B,CAA/B,CAArB;AACH;AACJ;;;0CAEwB;AACrB,eAAK47D,UAAL,GAAkBl/D,IAAI,CAACunB,GAAL,EAAlB;AACA,eAAKg8E,aAAL,GAAqB,IAArB;AACA,cAAMnB,WAAW,GAAG9gE,SAAS,CAAC,KAAK8gE,WAAL,CAAiB9+F,KAAlB,CAA7B;AACA,eAAK++F,mBAAL,CAAyB9zF,IAAzB,CAA8B6zF,WAA9B;AACA,eAAKY,mBAAL,GAA2B,KAA3B;AACH;;;wCAEsBl1F,K,EAAY;AAC/B,eAAKk1F,mBAAL,GAA2B,CAAC,CAACl1F,KAAK,CAACxL,MAAnC;AACH;;;oCAEkBwL,K,EAAO;AACtB,cAAIA,KAAJ,EAAW;AACP,iBAAK01F,eAAL;AACH;AACJ;;;4CAE0B11F,K,EAA4B;;;AACnD,cAAM21F,OAAO,GAAG31F,KAAK,CAAC7H,GAAN,CAAU,UAACklB,CAAD;AAAA,mBAAOA,CAAC,CAAC7nB,KAAT;AAAA,WAAV,CAAhB;AACA,cAAM++F,mBAAmB,GAAG/gE,SAAS,CAAC,KAAK8gE,WAAL,CAAiB9+F,KAAlB,CAArC;AACA,cAAM8/F,aAAa,GAAG,wBAAKhB,WAAL,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAE9+F,KAAlB,MAAuB,IAAvB,IAAuB,aAAvB,GAAuB,MAAvB,GAAuB,GAAEkS,OAAzB,MAAgC,IAAhC,IAAgC,aAAhC,GAAgC,MAAhC,GAAgC,GAAEiN,MAAlC,IAChB,CAAD,uBAAC,KAAK2/E,WAAN,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAE9+F,KAAnB,MAAwB,IAAxB,IAAwB,aAAxB,GAAwB,MAAxB,GAAwB,GAAEkS,OAA1B,MAAiC,IAAjC,IAAiC,aAAjC,GAAiC,MAAjC,GAAiC,GAAEiN,MAAlC,MAAwC,IAAxC,IAAwC,aAAxC,GAAwC,MAAxC,GAAwC,GAAEzb,MAAF,CAAS,UAAC2O,CAAD,EAAO;AACpD,gBAAI8tF,OAAO,CAACvpF,QAAR,CAAiBvE,CAAC,CAACtD,EAAnB,CAAJ,EAA4B;AACxB,qBAAO,IAAP;AACH;;AACD,mBAAO,KAAP;AACH,WALuC,CADxB,GAOhB,EAPN;AAQAgwF,6BAAmB,CAAC7sF,OAApB,CAA4BiN,MAA5B,GAAqC2gF,aAArC;AACA,eAAKf,mBAAL,CAAyB9zF,IAAzB,CAA8B8zF,mBAA9B;AACH;;;8CAE4B;AAAA;;AACzB,eAAKhB,YAAL,CAAkB9yF,IAAlB,CAAuB,IAAvB;AACA,cAAMg1E,UAAU,GAAG,KAAKvF,MAAL,CAAY5lE,IAAZ,CAAiB,+BAAAorE,yBAAjB,EAA4C;AAC3DnrE,sBAAU,EAAE,WAD+C;AAE3D8xC,qBAAS,EAAE,KAFgD;AAG3DC,yBAAa,EAAE;AAH4C,WAA5C,CAAnB;AAKAm5B,oBAAU,CAAC3/B,WAAX,GAAyBvlD,SAAzB,CAAmC,YAAM;AACrC,oBAAI,CAACgjG,YAAL,CAAkB9yF,IAAlB,CAAuB,KAAvB;;AACA,oBAAI,CAACs0D,eAAL,CAAqB6gC,aAArB;AACH,WAHD;AAIH;;;wCAEsB;AACnB,eAAK1lB,MAAL,CAAY5lE,IAAZ,CAAiB,+BAAA6tE,yBAAjB,EAA4C;AACxC5tE,sBAAU,EAAE,WAD4B;AAExC8xC,qBAAS,EAAE,KAF6B;AAGxCC,yBAAa,EAAE;AAHyB,WAA5C;AAKH;;;0CAEwBrmC,M,EAA2B;AAChD,kBAAQA,MAAR;AACI,iBAAK,cAAAzB,iBAAA,CAAkBqD,OAAvB;AACI,mBAAK7O,KAAL,CAAWolE,QAAX,CAAoB,cAAArnE,gBAAA,EAApB;AACA;;AACJ,iBAAK,cAAAyN,iBAAA,CAAkBsD,WAAvB;AACA,iBAAK,cAAAtD,iBAAA,CAAkBvf,QAAvB;AACI,mBAAK4gG,mBAAL;AACA;AAPR;AASH;;;6CAE2B71F,K,EAA0B;AAClD,eAAKonF,cAAL,CAAoB3mF,IAApB,CAAyBT,KAAK,CAACxK,KAA/B;AACH;;;;MAjTqC,OAAAzG,a;;AAtL1C;;;uBAsLampF,oB,EAAoB,8B,EAAA,+B,EAAA,uC,EAAA,kC,EAAA,4C,EAAA,iC,EAAA,wC;AAAA,K;;;YAApBA,oB;AAAoB,uC;AAAA,+C;AAAA,c;AAAA,a;AAAA,upE;AAAA;AAAA;AAnLzB;;;;AAEI;;;;;;;mBA6II,CACR,aAAAprF,OAAA,CAAQ,gBAAR,EAA0B,CACtB,aAAAO,KAAA,CACI,MADJ,EAEI,aAAAL,KAAA,CAAM;AACFE,gBAAM,EAAE,GADN;AAEFD,iBAAO,EAAE;AAFP,SAAN,CAFJ,CADsB,EAQtB,aAAAI,KAAA,CACI,QADJ,EAEI,aAAAL,KAAA,CAAM;AACF8oG,kBAAQ,EAAE,QADR;AAEF7oG,iBAAO,EAAE,CAFP;AAGFC,gBAAM,EAAE;AAHN,SAAN,CAFJ,CARsB,EAgBtB,aAAAH,UAAA,CAAW,iBAAX,EAA8B,aAAAI,OAAA,CAAQ,gBAAR,CAA9B,CAhBsB,CAA1B,CADQ,EAmBR,aAAAL,OAAA,CAAQ,aAAR,EAAuB,CACnB,aAAAO,KAAA,CACI,MADJ,EAEI,aAAAL,KAAA,CAAM;AACFqoD,kBAAQ,EAAE;AADR,SAAN,CAFJ,CADmB,EAOnB,aAAAhoD,KAAA,CACI,QADJ,EAEI,aAAAL,KAAA,CAAM;AACFqoD,kBAAQ,EAAE;AADR,SAAN,CAFJ,CAPmB,EAanB,aAAAtoD,UAAA,CAAW,iBAAX,EAA8B,aAAAI,OAAA,CAAQ,gBAAR,CAA9B,CAbmB,CAAvB,CAnBQ;;;;;;2BAoCH+qF,oB,EAAoB;cAtLhC,OAAA9hC,SAsLgC;eAtLtB;AACPlnD,kBAAQ,EAAE,kBADH;AAEPw0D,kBAAQ,oqPAFD;AAiJPpN,mBAAS,EAAE,CAAC,+BAAD,CAjJJ;AAkJP0H,oBAAU,EAAE,CACR,aAAAlxD,OAAA,CAAQ,gBAAR,EAA0B,CACtB,aAAAO,KAAA,CACI,MADJ,EAEI,aAAAL,KAAA,CAAM;AACFE,kBAAM,EAAE,GADN;AAEFD,mBAAO,EAAE;AAFP,WAAN,CAFJ,CADsB,EAQtB,aAAAI,KAAA,CACI,QADJ,EAEI,aAAAL,KAAA,CAAM;AACF8oG,oBAAQ,EAAE,QADR;AAEF7oG,mBAAO,EAAE,CAFP;AAGFC,kBAAM,EAAE;AAHN,WAAN,CAFJ,CARsB,EAgBtB,aAAAH,UAAA,CAAW,iBAAX,EAA8B,aAAAI,OAAA,CAAQ,gBAAR,CAA9B,CAhBsB,CAA1B,CADQ,EAmBR,aAAAL,OAAA,CAAQ,aAAR,EAAuB,CACnB,aAAAO,KAAA,CACI,MADJ,EAEI,aAAAL,KAAA,CAAM;AACFqoD,oBAAQ,EAAE;AADR,WAAN,CAFJ,CADmB,EAOnB,aAAAhoD,KAAA,CACI,QADJ,EAEI,aAAAL,KAAA,CAAM;AACFqoD,oBAAQ,EAAE;AADR,WAAN,CAFJ,CAPmB,EAanB,aAAAtoD,UAAA,CAAW,iBAAX,EAA8B,aAAAI,OAAA,CAAQ,gBAAR,CAA9B,CAbmB,CAAvB,CAnBQ;AAlJL,S;AAsLsB,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjPjC;AAAA;AAAA;;AAUA;AAAA;AAAA;;AAMA;AAAA;AAAA;;AAMA;AAAA;AAAA;;;;;;;;;;;;;;;;AAWgB;AAAgE;AAAkB;;;;;;AAClF;AAAqD;AAAmC;;;;;;AACxF;AAA4C;AAAiB;;;;;AAAjB;AAAA;;;;QAkB/C4rF,yB;AAwBT,2CAAc;AAAA;;AAlBP,aAAAh/E,OAAA,GAA+B,EAA/B;AAGA,aAAAg8F,WAAA,GAAc,IAAI,OAAAriD,YAAJ,EAAd;AAGA,aAAAsiD,WAAA,GAAc,IAAI,OAAAtiD,YAAJ,EAAd;AAGA,aAAAuiD,SAAA,GAAY,IAAZ;AAEA,aAAA5nG,IAAA,GAAO,EAAP;AACA,aAAAiE,IAAA,GAAO,EAAP;AACA,aAAA4jG,MAAA,GAAS,EAAT;AACA,aAAA93D,KAAA,GAAQ,EAAR;AACA,aAAA+3D,aAAA,GAAgB,EAAhB;AACA,aAAAC,WAAA,GAAc,EAAd;AAGN;;;;oCAEkBpmG,O,EAAsB;AACrC,cAAIA,OAAO,CAAC6Y,IAAR,IAAgB7Y,OAAO,CAAC+J,OAA5B,EAAqC;AACjC,iBAAKs8F,cAAL;AACH;AACJ;;;mCAEc;AACX,eAAKA,cAAL;AACH;;;yCAGuB;;;AACpB,cAAI,CAAC,KAAKxtF,IAAV,EAAgB;AACZ;AACH;;AAHmB,2BAI0E,KAAKA,IAJ/E;AAAA,cAIZxV,QAJY,cAIZA,QAJY;AAAA,cAIFJ,MAJE,cAIFA,MAJE;AAAA,cAIM0Y,QAJN,cAIMA,QAJN;AAAA,cAIgB6M,QAJhB,cAIgBA,QAJhB;AAAA,cAI0B7B,WAJ1B,cAI0BA,WAJ1B;AAAA,cAIuCS,YAJvC,cAIuCA,YAJvC;AAAA,cAIqD+B,gBAJrD,cAIqDA,gBAJrD,EAOpB;;AAEA,cAAMhC,KAAK,GAAGxL,QAAQ,CAAC7V,IAAT,CAAc,UAAAsS,CAAC;AAAA,mBAAIA,CAAC,CAACkS,WAAN;AAAA,WAAf,CAAd;;AACA,cAAInD,KAAJ,EAAW;AACP,iBAAK9oB,IAAL,GAAY8oB,KAAK,CAACnD,YAAlB;AACH,WAFD,MAEO;AACH,iBAAK3lB,IAAL,GAAY,cAAAkvB,oBAAA,CAAqB5R,QAArB,CAAZ;AACH,WAdmB,CAgBpB;;;AACA,cAAMoO,WAAW,GAAG,mBAAApO,QAAQ,CAAC,CAAD,CAAR,MAAW,IAAX,IAAW,aAAX,GAAW,MAAX,GAAW,GAAE6L,IAAb,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,MAAjB,GAAiB,GAAE5B,QAAnB,MAA2B,IAA3B,IAA2B,aAA3B,GAA2B,MAA3B,GAA2B,GAAE1e,QAA7B,MAAqC,kBAAIyU,QAAQ,CAAC,CAAD,CAAZ,MAAe,IAAf,IAAe,aAAf,GAAe,MAAf,GAAe,GAAE6L,IAAjB,MAAqB,IAArB,IAAqB,aAArB,GAAqB,MAArB,GAAqB,GAAEzP,IAAvB,MAA2B,IAA3B,IAA2B,aAA3B,GAA2B,MAA3B,GAA2B,GAAE7Q,QAAlE,CAApB;AACA,cAAMlD,SAAS,GAAG,IAAI,UAAAwP,MAAJ,CAAW;AAAClR,gBAAI,EAAEW,MAAM,CAACgJ,EAAd;AAAkB6d,uBAAW,EAAE,KAA/B;AAAsCC,uBAAW,EAAXA;AAAtC,WAAX,CAAlB;;AAEA,cAAG3C,YAAH,EAAiB;AACb,gBAAMk/E,UAAU,GAAG,cAAAj3D,mBAAA,CAAoB,CAAD,KAAE,SAAI,IAAJ,aAAI,MAAJ,GAAI,MAAJ,QAAMx2B,IAAP,MAAW,IAAX,IAAW,aAAX,GAAW,MAAX,GAAW,GAAEwQ,iBAAjC,CAAnB;AACH,gBAAMk9E,UAAU,GAAG,IAAI,UAAA/yF,MAAJ,CAAW;AAAClR,kBAAI,EAAEgkG,UAAU,CAACr6F,EAAlB;AAAsB6d,yBAAW,EAAE,KAAnC;AAA0CC,yBAAW,EAAXA;AAA1C,aAAX,CAAnB;AACC,iBAAKznB,IAAL,kBAAoB,OAAAqB,sBAAA,CAAuBK,SAAvB,CAApB,oBAA+D,OAAAL,sBAAA,CAAuB4iG,UAAvB,CAA/D;AACD,WAJD,MAKK;AACD,iBAAKjkG,IAAL,GAAY,OAAAqB,sBAAA,CAAuBK,SAAvB,CAAZ;AACH;;AAED,cAAMwiG,YAAY,GAAGxiG,SAAS,CAACJ,UAAV,WAAwB,OAAAwI,gBAAA,EAAxB,GAA8CW,iBAA9C,EAArB;AACA,cAAM4zF,OAAO,GAAG38F,SAAS,CAACb,QAAV,CAAmB;AAAEJ,mBAAO,EAAEM;AAAX,WAAnB,CAAhB;AACA,cAAMojG,UAAU,GAAG,OAAAz5F,6BAAA,CAA8B2zF,OAA9B,CAAnB;AACA,eAAKuF,MAAL,aAAiBM,YAAjB,cAAiCC,UAAjC,EAhCoB,CAgC2B;;AAE/C,cAAMC,eAAe,GAAG,OAAAp9F,gBAAA,CAAiBjG,QAAjB,EAA2B,OAA3B,CAAxB;AACA,eAAK+qC,KAAL,aAAgBs4D,eAAhB,eAAoC//E,WAAW,CAACpY,OAAhD,eAA4Dia,QAAQ,CAACja,OAArE;AAEA,eAAK43F,aAAL,GAAqB,KAAKp8F,OAAL,CAAa5B,GAAb,CAAiB,UAAA8B,CAAC;AAAA,mBAAIA,CAAC,CAAC+Z,YAAN;AAAA,WAAlB,EAAsCrY,IAAtC,CAA2C,IAA3C,CAArB;AACA,eAAKy6F,WAAL,GAAmB,KAAKr8F,OAAL,CAAavF,MAAb,GAAsB,CAAtB,cAA8B,KAAKuF,OAAL,CAAavF,MAA3C,SAAuD,EAA1E;AACH;;;;;;AA1GL;;;uBA6BaukF,yB;AAAyB,K;;;YAAzBA,yB;AAAyB,4C;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA;AAAA,O;AAAA,yC;AAAA,e;AAAA,a;AAAA,0lB;AAAA;AAAA;AA1B9B;AACI;AACI;AAAM;AAAQ;AACd;AAAM;AAAQ;AACd;AAAM;AAAU;AAChB;AAA6B;AAAS;AACtC;AACA;AACA;AACJ;AACA;AACI;AAEQ;AAAA,mBAAS,IAAAgd,WAAA,OAAT;AAA2B,WAA3B;AACJ;AACJ;AACA;AAGI;AAAA,mBAAS,IAAAC,WAAA,OAAT;AAA2B,WAA3B;AAA6B;AACjC;AACJ;AACJ;;;;AApBc;AAAA;AACA;AAAA;AACA;AAAA;AACuB;AAAA;AACD;AAAA;AACM;AAAA;AACZ;AAAA;AASlB;AAAA;AAE6B;AAAA;;;;;;;;;2BAOpCjd,yB,EAAyB;cA7BrC,OAAA3iC,SA6BqC;eA7B3B;AACPlnD,kBAAQ,EAAE,uBADH;AAEPw0D,kBAAQ,wwCAFD;AA2BPpN,mBAAS,EAAE,CAAC,oCAAD;AA3BJ,S;AA6B2B,Q;;;;gBAEjC,OAAA1kD;;;gBAGA,OAAAA;;;gBAGA,OAAA2kD;;;gBAGA,OAAAA;;;gBAGA,OAAA3kD;;;;;;;;;;;;;;;;;;;;;;;;ACnEL;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACLQ;AACI;AACI;AACI;AACJ;AACA;AAAkB;AAAe;AACrC;AACJ;;;;;AAPsB;AAGA;AAAA;AAEI;AAAA;;;;;;AAG1B;;AACI;AACI;AACI;AACJ;AACA;AAAkB;AAAe;AACrC;AACJ;;;;;AAPuB;AAGD;AAAA;AAEI;AAAA;;;;;;AAd9B;AACI;AAQA;AAQJ;;;;;AAhBO;AAAA;AAQA;AAAA;;;;;;AAVX;AACI;AAkBJ;;;;;AAlBkB;AAAA;;;;QDgBL+kG,mB;;;;;AAKT,mCAAoBnoF,QAApB,EAAkD;AAAA;;AAAA;;AAC9C;AADgB,iBAAAA,QAAA,GAAAA,QAAA;AAHpB;;AACO,iBAAAooF,KAAA,GAA2B,EAA3B;AAE2C;AAEjD;AAED;;;;;mCACe;AAAA;;AACX,eAAKpoF,QAAL,CAAc3D,WAAd,CAA0BzH,IAA1B,CAA+B,YAAAyG,KAAA,CAAM,UAAAC,CAAC;AAAA,mBAAIA,CAAJ;AAAA,WAAP,CAA/B,EAA8CvZ,SAA9C,CAAwD,YAAM;AAC1D,oBAAI,CAACqmG,KAAL,GAAa,QAAI,CAACpoF,QAAL,CAAcd,OAAd,CAAsB,gBAAtB,KAA2C,EAAxD;AACH,WAFD;AAGH;;;;MAdoC,OAAA3e,a;;AALzC;;;uBAKa4nG,mB,EAAmB,2C;AAAA,K;;;YAAnBA,mB;AAAmB,oC;AAAA,+C;AAAA,c;AAAA,a;AAAA,sS;AAAA;AAAA;ACjBhC;;;;AAAyB;;;;;;;;;;2BDiBZA,mB,EAAmB;cAL/B,OAAAvgD,SAK+B;eALrB;AACPlnD,kBAAQ,EAAE,eADH;AAEPmnD,qBAAW,EAAE,8BAFN;AAGPC,mBAAS,EAAE,CAAC,8BAAD;AAHJ,S;AAKqB,Q;;;;;;;;;;;;;;;;;;;;;;;;;;AEjBhC;AAAA;AAAA;;AAOA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNY;AACI;AACI;AAAkB;AAAc;AAChC;AAAkB;AAAc;AAChC;AAAqB;AAAiB;AAC1C;AACJ;;;;;AAN8C;AAEpB;AAAA;AACA;AAAA;AACG;AAAA;;;;;;;;AAXrC;AAKI;AAA+C;AAAA;AAAA;AAAA;AAAA;AAC3C;AAAqB;AAA4D;AACjF;AAOJ;AACJ;;;;;AAVgC;AAAA;AACH;AAAA;AACT;AAAA;;;;;;AAWZ;AACI;AACJ;;;;;AAF6C;AACzC;AAAA;;;;QDMHugD,oB;;;;;AAkBT,oCACYnzB,MADZ,EAEYpwB,OAFZ,EAGY9kC,QAHZ,EAIYiT,IAJZ,EAIqC;AAAA;;AAAA;;AAEjC;AALQ,iBAAAiiD,MAAA,GAAAA,MAAA;AACA,iBAAApwB,OAAA,GAAAA,OAAA;AACA,iBAAA9kC,QAAA,GAAAA,QAAA;AACA,iBAAAiT,IAAA,GAAAA,IAAA;AAjBZ;;AACiB,iBAAAq1E,WAAA,GAAc,IAAI,OAAApjD,YAAJ,EAAd;AACjB;;AACO,iBAAAqjD,gBAAA,GAA6B,SAAKt1E,IAAL,CAAU7L,QAAvC;AACP;;AACO,iBAAAohF,aAAA,GAA4B,EAA5B;AACP;;AACO,iBAAAC,UAAA,GAAuC,EAAvC;AAU8B;AAGpC;;;;mCAEiB;AAAA;;AACd,eAAKx1E,IAAL,CAAU5wB,MAAV,CAAiB,WAAjB,EAA8BuS,IAA9B,CAAmC,YAAAyG,KAAA,CAAM,UAAAC,CAAC;AAAA,mBAAI,CAAC,CAACA,CAAF,IAAO,CAAC,CAACA,CAAC,CAACtV,MAAf;AAAA,WAAP,CAAnC,EAAkEjE,SAAlE,CAA4E,YAAM;AAC9E,oBAAI,CAACF,YAAL,CACI,aADJ,EAEI,QAAI,CAACqzE,MAAL,CAAYkJ,aAAZ,CAA0Br8E,SAA1B,CAAoC,UAAAsuC,MAAM,EAAI;AAC1C;AACA,kBAAIA,MAAM,CAACg7B,GAAP,CAAW,OAAX,CAAJ,EAAyB;AACrB,oBAAM19B,QAAQ,GAAG0C,MAAM,CAAC72B,GAAP,CAAW,OAAX,CAAjB;;AACA,oBAAM2V,KAAK,GAAG,QAAI,CAAC8D,IAAL,CAAU4Y,WAAV,CAAsB8B,QAAtB,CAAd;;AACA,wBAAI,CAACxe,KAAL,GAAaA,KAAK,CAACpZ,EAAnB;;AACA,wBAAI,CAAC2yF,WAAL,CAAiBv5E,KAAK,CAAC+c,WAAvB;;AACA,wBAAI,CAACo8D,WAAL,CAAiB9hD,IAAjB,CAAsB,QAAI,CAACr3B,KAA3B;;AACA,wBAAI,CAACzvB,YAAL,CAAkB,gBAAlB;AACH;AACJ,aAVD,CAFJ;;AAcA,oBAAI,CAAC8oG,aAAL,GAAqB,QAAI,CAACv1E,IAAL,CAAUra,SAA/B;;AACA,oBAAI,CAACnW,OAAL,CAAa,gBAAb,EAA+B,YAAM;AACjC;AACA,kBAAI,CAAC,QAAI,CAAC2kB,QAAV,EAAoB;AAChB,wBAAI,CAACshF,WAAL,CAAiB,QAAI,CAACz1E,IAAL,CAAU7L,QAAV,CAAmBrR,EAApC;AACH;;AACD,sBAAI,CAACuyF,WAAL,CAAiB9hD,IAAjB,CAAsB,QAAI,CAACr3B,KAA3B;AACH,aAND;AAOH,WAvBD;AAwBH;;;oCAEkBkf,M,EAAgB;AAAA;;AAC/B,cAAMjnB,QAAQ,GAAG,KAAK6L,IAAL,CAAUra,SAAV,CAAoBtR,IAApB,CAAyB,UAAA2kC,GAAG;AAAA,mBAAIA,GAAG,CAACl2B,EAAJ,KAAWs4B,MAAf;AAAA,WAA5B,CAAjB;AACA;;;AACA,cAAIjnB,QAAJ,EAAc;AACV,iBAAKmhF,gBAAL,GAAwBnhF,QAAxB;AACA,iBAAKA,QAAL,GAAgBinB,MAAhB;AACA,iBAAKpb,IAAL,CAAU7L,QAAV,GAAqBA,QAArB;AACA,iBAAKqhF,UAAL,GAAkBrhF,QAAQ,CAACzN,MAA3B;AACA;;AACA,gBAAI,KAAK8uF,UAAL,CAAgBziG,MAAhB,IAA0B,CAAC,KAAKyiG,UAAL,CAAgBnhG,IAAhB,CAAqB,UAAAmmC,GAAG;AAAA,qBAAIA,GAAG,CAAC13B,EAAJ,KAAW,QAAI,CAACoZ,KAApB;AAAA,aAAxB,CAA/B,EAAmF;AAC/E,mBAAK+sD,WAAL,CAAiB,KAAKusB,UAAL,CAAgB,CAAhB,EAAmB1yF,EAApC;AACH;AACJ;AACJ;;;oCAEkB4yF,M,EAAgB;AAC/B,eAAKx5E,KAAL,GAAaw5E,MAAb;AACA,eAAKL,WAAL,CAAiB9hD,IAAjB,CAAsB,KAAKr3B,KAA3B;;AACA,eAAK21B,OAAL,CAAapL,QAAb,CAAsB,EAAtB,EAA0B;AACtB2tC,sBAAU,EAAE,KAAKnS,MADK;AAEtBxuB,uBAAW,EAAE;AAAEv3B,mBAAK,EAAEw5E;AAAT;AAFS,WAA1B;AAIH;;;4BA9D6B;AAC1B,iBAAO,CAAC,CAAC,KAAK3oF,QAAL,CAAcd,OAAd,CAAsB,iCAAtB,CAAT;AACH;;;;MAhBqC,OAAA3e,a;;AAL1C;;;uBAKa8nG,oB,EAAoB,uC,EAAA,+B,EAAA,2C,EAAA,4C;AAAA,K;;;YAApBA,oB;AAAoB,qC;AAAA;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,c;AAAA,a;AAAA,gV;AAAA;AAAA;AC1BjC;AACI;AAgBA;AACI;AAAyB;AAAA;AAAA,aAAiB,aAAjB,EAAiB;AAAA,mBAAgB,IAAAnsB,WAAA,QAAhB;AAAmC,WAApD;AACrB;AAGJ;AACJ;AACJ;;;;AApBQ;AAAA;AAcyB;AAAA;AACT;AAAA;;;;;;;;;2BDOXmsB,oB,EAAoB;cALhC,OAAAzgD,SAKgC;eALtB;AACPlnD,kBAAQ,EAAE,gBADH;AAEPmnD,qBAAW,EAAE,+BAFN;AAGPC,mBAAS,EAAE,CAAC,+BAAD;AAHJ,S;AAKsB,Q;;;;;;;;;;;;gBAE5B,OAAA1kD;;;gBAEA,OAAAA;;;gBAEA,OAAA2kD;;;;;;;;;;;;;;;;;;;;;;;;AEhCL;AAAA;AAAA;;AAOA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAEA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACwB4B;AAOI;AACI;AAAkB;AAAmB;AACrC;AAOJ;AACJ;;;;;AAdI,mFAA+B,aAA/B,EAA+B,wBAA/B;AAKsB;AAAA;AAEd;AAAA;;;;;;AAXhB;AACI;AAkBJ;;;;;AAjBQ;AAAA;;;;;;AAnBZ;AACI;AAKI;AACI;AAAkB;AAAe;AACjC;AAOJ;AACJ;AACA;AAoBJ;;;;;AAnCQ;AAAA,+EAA2B,aAA3B,EAA2B,oBAA3B;AAKsB;AAAA;AAEd;AAAA;AAQE;AAAA;;;;;;;;;;;;;;AAsBd;;AACI;AACI;AAAkB;AAAe;AACjC;AAOJ;AACJ;;;;;AAXG;AAEuB;AAAA;AAEd;AAAA;;;;;;AA5CpB;AACI;AAsCA;AAcJ;;;;;;;;AApDkB;AAAA,6CAAsC,UAAtC,EAAsC,GAAtC;;;;;;;;;;;;;;;;;;;;;AAuD1B;AAAA;AAEA;;;;;AAAA;AAAA,kCAAM,gBAAN;AAAA;;;;;;;;;;;;QDvDK6gD,oB;;;;;AAsBT,oCAAoB5oF,QAApB,EAAkD;AAAA;;AAAA;;AAC9C;AADgB,iBAAAA,QAAA,GAAAA,QAAA;AAnBpB;;AACiB,iBAAA6oF,UAAA,GAAa,IAAI,OAAA3jD,YAAJ,EAAb;AAkBiC;AAEjD;AAlBD;;;;;;AAyBA;gCACe;AACX,eAAK7tB,IAAL,GAAY,KAAZ;AACA,eAAKwxE,UAAL,CAAgBriD,IAAhB,CAAqB,KAAKnvB,IAA1B;AACH;;;uCAEqB;AAAA;;AAClB,eAAK50B,OAAL,CAAa,OAAb,EAAsB;AAAA,mBAAM,QAAI,CAACqnC,KAAL,EAAN;AAAA,WAAtB,EAA0C,EAA1C;AACH;;;sCAEoB;AAAA;;AACjB,eAAKrnC,OAAL,CAAa,cAAb,EAA6B;AAAA,mBAAM,QAAI,CAAC/C,YAAL,CAAkB,OAAlB,CAAN;AAAA,WAA7B,EAA+D,EAA/D;AACH;;;4BApCoB;AACjB,cAAMud,QAAQ,GAAG,KAAK+C,QAAL,CAAcd,OAAd,CAAsB,kBAAtB,KAA6C;AAAEpd,iBAAK,EAAE;AAAT,WAA9D;AACA,iBAAOmb,QAAQ,CAACnb,KAAT,IAAkB,EAAzB;AACH;AAED;;;;4BACoB;AAChB,iBAAO,CAAC,KAAKke,QAAL,CAAcd,OAAd,CAAsB,kBAAtB,KAA6C,EAA9C,EAAkD4pF,SAAlD,IAA+D,EAAtE;AACH;;;4BAEqB;AAClB,cAAM7rF,QAAQ,GAAG,KAAK+C,QAAL,CAAcd,OAAd,CAAsB,kBAAtB,KAA6C;AAAE6yC,oBAAQ,EAAE;AAAZ,WAA9D;AACA,iBAAO90C,QAAP;AACH;AAMD;;;;4BACe;AACX,iBAAO,UAAA1P,OAAA,CAAQ,IAAI7J,IAAJ,EAAR,EAAoBy/C,QAA3B;AACH;;;;MA7BqC,OAAA5iD,a;;AAL1C;;;uBAKaqoG,oB,EAAoB,2C;AAAA,K;;;YAApBA,oB;AAAoB,qC;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,e;AAAA,c;AAAA,ikB;AAAA;AAAA;ACrBjC;AAKI;AAAA,mBAAS,IAAAG,YAAA,EAAT;AAAuB,WAAvB;AAEA;AAAkB;AAAA,mBAAS,IAAAC,WAAA,EAAT;AAAsB,WAAtB;AACd;AACI;AACA;AAAwB;AAAA,mBAAS,IAAAl/D,KAAA,EAAT;AAAgB,WAAhB;AACpB;AAGJ;AACJ;AACA;AACI;AACI;AAsDJ;AACJ;AACA;AAGJ;AACJ;;;;AA5EI,mGAA4C,QAA5C,EAA4C,kEAA5C,EAA4C,MAA5C,EAA4C,QAA5C;AAUgB;AAAA;AAMU;AAAA;AAwDF;AAAA;;;;;;;;;;2BDrDf8+D,oB,EAAoB;cALhC,OAAAhhD,SAKgC;eALtB;AACPlnD,kBAAQ,EAAE,gBADH;AAEPmnD,qBAAW,EAAE,+BAFN;AAGPC,mBAAS,EAAE,CAAC,+BAAD;AAHJ,S;AAKsB,Q;;;;;;gBAE5B,OAAA1kD;;;gBAEA,OAAA2kD;;;;;;;;;;;;;;;;;;;;;;;;AEzBL;AAAA;AAAA;;AAOA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;AAoBoB;AAAkC;AAAkB;;;;;;;;;;;;AAHxD;AAGI;AACJ;;;;;;AAFI;AACM;AAAA;;;;;;AAbd;AACI;AASA;AAKJ;AACA;;;;;AAbQ;AAAA,2CAAoB,QAApB,EAAoB,GAApB,EAAoB,eAApB,EAAoB,KAApB,EAAoB,UAApB,EAAoB,IAApB,EAAoB,MAApB,EAAoB,IAApB,EAAoB,MAApB,EAAoB,KAApB;AAQA;AAAA;;;;;;AAYA;AAAkC;AAAkB;;;;;;AALxD;AAKI;AACJ;;;;;;AAJI;AAGM;AAAA;;;;;;AANd;AACI;AAOJ;;;;;AANQ;AAAA;;;;QAYPkhD,+B;;;;;AAgBT,+CAAoBhhD,KAApB,EAA4C;AAAA;;AAAA;;AACxC;AADgB,iBAAAA,KAAA,GAAAA,KAAA;AARb,iBAAA13B,UAAA,GAAa,IAAI,OAAAhxB,eAAJ,CAAwC,EAAxC,CAAb;AAEA,iBAAAuwB,WAAA,GAAkC,CAAC,CAAD,EAAG,CAAH,EAAK,CAAL,EAAQnmB,GAAR,CAAY,UAAAqmB,CAAC,EAAI;AACtD,iBAAO;AAACD,gBAAI,yCAAkCC,CAAlC;AAAL,WAAP;AACH,SAFwC,CAAlC;AAIA,iBAAAyvB,MAAA,GAAS,KAAT;AAEqC;AAE3C;;;;mCAEc;AAAA;;AACX,cAAM1sC,UAAU,GAAG,GAAnB;;AAEA,cAAI1J,MAAJ,EAAY;AACR,iBAAKo2C,MAAL,GAAcp2C,MAAM,CAAC2J,UAAP,GAAoBD,UAAlC;AACH;;AAED,iBAAA+xE,SAAA,CAAUz7E,MAAV,EAAkB,QAAlB,EAA4BuL,IAA5B,CAAiC,YAAAmwE,YAAA,CAAa,GAAb,CAAjC,EAAoDnwE,IAApD,CAAyD,YAAAowE,GAAA,CAAI;AACzD/yE,gBAAI,EAAE,cAAAkjE,GAAG,EAAI;AACT,kBAAMl/D,MAAM,GAAGk/D,GAAG,CAACl/D,MAAnB;AACA,sBAAI,CAACwpC,MAAL,GAAcxpC,MAAM,CAACjD,UAAP,GAAoBD,UAAlC;AACH;AAJwD,WAAJ,CAAzD,EAKIhR,SALJ;AAMA,wBAAAytB,eAAA,CAAgB,IAAhB,EAAsB,CAAC,CAAD,EAAG,CAAH,EAAK,CAAL,CAAtB,EAA+B,KAAKG,aAApC,EAAmD,KAAKC,QAAxD,EAAkE,KAAKC,YAAvE;AACA,eAAKhuB,YAAL,CACF,cADE,EAEF,KAAK0uB,UAAL,CAAgBxuB,SAAhB,CAA0B,UAACmnG,MAAD,EAAgC;AACzD,gBAAGA,MAAM,CAACljG,MAAV,EAAkB,QAAI,CAAC8pB,WAAL,GAAoBo5E,MAApB;;AAClB,oBAAI,CAACjhD,KAAL,CAAWqB,aAAX;AACA,WAHD,CAFE;AAMH;;;kCAEgBv5B,I,EAAM;AACnB,iBAAOA,IAAI,CAACnS,QAAL,CAAc,aAAd,CAAP;AACH;;;4BAEmB;AAChB,iBAAQ,IAAIla,IAAJ,EAAD,CAAa44B,OAAb,EAAP;AACH;;;;MAhDgD,OAAAnpB,c;;AAnCrD;;;uBAmCa81F,+B,EAA+B,0C;AAAA,K;;;YAA/BA,+B;AAA+B,mD;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,c;AAAA,a;AAAA,6Y;AAAA;AAAA;AAhCpC;AACI;AAiBA;AASJ;;;;AA1BS;AAAA;AAiBA;AAAA;;;;;;;;;;2BAcJA,+B,EAA+B;cAnC3C,OAAArhD,SAmC2C;eAnCjC;AACPlnD,kBAAQ,EAAE,8BADH;AAEPw0D,kBAAQ,6zCAFD;AAgCPpN,mBAAS,EAAE,CAAC,2CAAD,CAhCJ;AAiCP4B,yBAAe,EAAE,OAAAC,uBAAA,CAAwBC;AAjClC,S;AAmCiC,Q;;;;;;gBAGvC,OAAAxmD;;;gBACA,OAAAA;;;gBAGA,OAAAA;;;;;;;;;;;;;;;;;;;;;;;;ACvDL;AAAA;AAAA;;AAMA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAGA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZQ;AACI;AACI;AAAgE;AAAA;AAAA;AAAA;AAAA;AAC5D;AACJ;AACA;AACI;AACJ;AACJ;AACA;AACI;AAAoB;AAAA;AAAA;AAAA;AAAA;AAApB;AACA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAApB;AACJ;AACJ;;;;;;;;AAeQ;AACI;AAGI;AAAA;AAAA;AAAA;AAAA;AAAA;AACH;AAAmB;AACxB;;;;;AAJQ;AAAA,wCAAiB,OAAjB,EAAiB,WAAjB;AAGH;AAAA;;;;;;;;AAjBb;AACI;AACI;AAAgE;AAAA;AAAA;AAAA;AAAA;AAC5D;AACJ;AACA;AACI;AACA;AACA;AAAG;AAA6B;AACpC;AACJ;AACA;AACI;AAOA;AACI;AACI;AAAO;AAAmB;AAC1B;AACI;AAAA;AAAA;AAAA;AAAA;AAEH;AACH;AACN;AACJ;AACA;AACI;AAG0B;AAAA;AAAA;AAAA;AAAA,WAA2B,iBAA3B,EAA2B;AAAA;AAAA;AAAA;AAAA,SAA3B;AAEzB;AACL;AACJ;;;;;AAzBa;AAAA;AAmBD;AAAA,4CAAqB,cAArB,EAAqB,IAArB;;;;;;;;AAQZ;AACI;AACI;AAAgE;AAAA;AAAA;AAAA;AAAA;AAC5D;AACJ;AACJ;AAEA;AACI;AACI;AACJ;AACA;AAGyB;AAAA;AAAA;AAAA;AAAA;AACxB;AACL;AACJ;;;;AALY;AAAA,4CAAqB,cAArB,EAAqB,IAArB;;;;QD/CP+nF,oB;;;;;AACT,oCACoC/8C,KADpC,EAEYrzB,SAFZ,EAGYiqC,WAHZ,EAG2D;AAAA;;AAAA;;AAEvD;AAJgC,iBAAA5W,KAAA,GAAAA,KAAA;AACxB,iBAAArzB,SAAA,GAAAA,SAAA;AACA,iBAAAiqC,WAAA,GAAAA,WAAA;AAKZ;;AACO,iBAAA3hC,KAAA,GAAQ,EAAR;AACA,iBAAA8lF,KAAA,GAAQ,OAAR;AACA,iBAAAC,OAAA,GAAU,EAAV;AAEA,iBAAAC,SAAA,GAAY;AACfC,oBAAU,EAAE,CADG;AAEfC,oBAAU,EAAE,CAFG;AAGfC,yBAAe,EAAE,kBAHF;AAIfC,wBAAc,EAAE,+BAJD;AAKf9iF,iBAAO,EAAE,EALM;AAMf5Q,YAAE,EAAE;AANW,SAAZ;AASA,iBAAA2zF,OAAA,GAAU;AACbC,sBAAY,EAAE,EADD;AAEbC,kBAAQ,EAAE,IAFG;AAGbC,0BAAgB,EAAE,EAHL;AAIbC,kBAAQ,EAAE;AAJG,SAAV;AAnBoD;AAG1D,O,CAuBD;;;;;wCACoB;AAChB,eAAKJ,OAAL,CAAaE,QAAb,GAAwB,KAAxB;AACA,eAAKT,KAAL,GAAa,WAAb;AACH;;;mCAEc;AAAA;;AACX;AACA,eAAKpuF,SAAL,CAAesB,WAAf,CAA2BzH,IAA3B,CAAgC,YAAAyG,KAAA,CAAM,UAAAC,CAAC;AAAA,mBAAIA,CAAJ;AAAA,WAAP,CAAhC,EAA+CvZ,SAA/C,CAAyD,YAAM;AAC3D,gBAAMshB,KAAK,GAAG,QAAI,CAACtI,SAAL,CAAesE,IAAf,CAAoBgE,KAAlC;AACA,oBAAI,CAACA,KAAL,GAAaA,KAAb;AACA,oBAAI,CAAC+lF,OAAL,GAAe,QAAI,CAACruF,SAAL,CAAesE,IAAf,CAAoBC,YAApB,CAAiCvS,OAAjC,CAAyC,QAAI,CAACgO,SAAL,CAAesE,IAAf,CAAoB1B,KAA7D,EAAoE,qBAApE,CAAf;;AACA,oBAAI,CAACosF,2BAAL,CAAiC1mF,KAAjC,EAAwC,QAAI,CAAC+qB,KAA7C;AACH,WALD;AAMH;;;oDAEkC/qB,K,EAAe2mF,U,EAAoB;AAAA;;AAClE,cAAI7pF,OAAJ,CAAiB,UAACC,OAAD,EAAUC,MAAV,EAAqB;AAClC,gBAAM7C,GAAG,aAAM,QAAI,CAAC4rF,OAAX,wBAAgCY,UAAhC,CAAT;AACA,gBAAI9nF,MAAM,GAAQ,IAAlB;;AACA,oBAAI,CAACnH,SAAL,CAAeoH,IAAf,CAAoB3I,GAApB,CAAwBgE,GAAxB,EAA6Bzb,SAA7B,CACI,UAACkD,CAAD;AAAA,qBAAQid,MAAM,GAAGjd,CAAjB;AAAA,aADJ,EAEI,UAACkJ,CAAD,EAAO;AACHkS,oBAAM,CAAClS,CAAD,CAAN;AACH,aAJL,EAKI,YAAM;AACFiS,qBAAO,CAAC8B,MAAD,CAAP;AACH,aAPL;AASH,WAZD,EAYG1B,IAZH,CAYQ,UAAAvb,CAAC,EAAI;AACT,oBAAI,CAACokG,SAAL,GAAiBpkG,CAAjB;AACA,oBAAI,CAACykG,OAAL,GAAe;AACXC,0BAAY,EAAE,QAAI,CAACN,SAAL,CAAetzF,EADlB;AAEX6zF,sBAAQ,EAAE,IAFC;AAGXC,8BAAgB,EAAE,QAAI,CAACR,SAAL,CAAe1iF,OAAf,CAAuBhd,GAAvB,CAA2B,UAAAga,CAAC;AAAA,uBAAK;AAC/C5N,oBAAE,EAAE4N,CAAC,CAAC5N,EADyC;AAE/Ck0F,yBAAO,EAAE;AAFsC,iBAAL;AAAA,eAA5B,CAHP;AAOXH,sBAAQ,EAAE;AAPC,aAAf;AASH,WAvBD,WAuBS,UAAA37F,CAAC,EAAI;AACV3E,mBAAO,CAACV,GAAR,CAAY,OAAZ,EAAqBqF,CAArB;AACH,WAzBD;AA0BH,S,CAED;;;;qCACoBnH,K,EAAY;AAAA;;AAC5B,eAAK0iG,OAAL,CAAaG,gBAAb,CAA8BtjF,IAA9B,CAAmC,UAACsI,CAAD,EAAI1sB,CAAJ,EAAU;AACzC,gBAAI0sB,CAAC,CAAC9Y,EAAF,KAAS/O,KAAK,CAAC+O,EAAnB,EAAuB;AACnB,sBAAI,CAAC2zF,OAAL,CAAaG,gBAAb,CAA8B1nG,CAA9B,EAAiC8nG,OAAjC,GAA2C,CAAC,QAAI,CAACP,OAAL,CAAaG,gBAAb,CAA8B1nG,CAA9B,EAAiC8nG,OAA7E;AACA,qBAAO,IAAP;AACH;AACJ,WALD;AAMH,S,CAED;;;;sCACqBC,M,EAAa;AAC9B,eAAKR,OAAL,CAAaI,QAAb,GAAwBI,MAAM,CAACj0F,MAAP,CAAcjP,KAAtC;AACH,S,CAED;;;;kCACiB;AAAA;;AACb,cAAImZ,OAAJ,CAAiB,UAACC,OAAD,EAAUC,MAAV,EAAqB;AAClC,gBAAI6B,MAAM,GAAQ,IAAlB;;AACA,oBAAI,CAACnH,SAAL,CAAeoH,IAAf,CAAoBO,IAApB,CAAyB,QAAI,CAAC0mF,OAA9B,EAAuC,QAAI,CAACM,OAA5C,EAAqD3nG,SAArD,CACI,UAACkD,CAAD;AAAA,qBAAQid,MAAM,GAAGjd,CAAjB;AAAA,aADJ,EAEI,UAACkJ,CAAD,EAAO;AACHkS,oBAAM,CAAClS,CAAD,CAAN;AACH,aAJL,EAKI,YAAM;AACFiS,qBAAO,CAAC8B,MAAD,CAAP;AACH,aAPL;AASH,WAXD,EAWG1B,IAXH,CAWQ,UAAAvb,CAAC,EAAI;AACT,oBAAI,CAACkkG,KAAL,GAAa,MAAb;;AACA,oBAAI,CAACvgB,UAAL,CAAgB,IAAhB;AACH,WAdD,WAcS,UAAAz6E,CAAC,EAAI;AACV3E,mBAAO,CAACV,GAAR,CAAY,OAAZ,EAAqBqF,CAArB;AACA,oBAAI,CAACg7F,KAAL,GAAa,MAAb;;AACA,oBAAI,CAACvgB,UAAL,CAAgB,IAAhB;AACH,WAlBD;AAoBH,S,CAED;;;;qCAC4C;AAAA;;AAAA,cAA1BuhB,OAA0B,uEAAP,KAAO;;AACxC,cAAIA,OAAJ,EAAa;AACT,iBAAK1nG,OAAL,CAAa,YAAb,EAA2B,YAAM;AAC7B,sBAAI,CAACuiD,WAAL,CAAiBlb,KAAjB;AACH,aAFD,EAEG,IAFH;AAGH,WAJD,MAIO;AACH,iBAAKkb,WAAL,CAAiBlb,KAAjB;AACH;AACJ;;;;MA3HqC,OAAA5qC,S;;AAN1C;;;uBAMaisF,oB,EAAoB,qBAEjB,SAAAxjC,eAFiB,C,EAEF,wC,EAAA,qC;AAAA,K;;;YAFlBwjC,oB;AAAoB,qC;AAAA,+C;AAAA,c;AAAA,a;AAAA,yzB;AAAA;AAAA;ACtBjC;AACI;AACI;AAgBA;AAuCA;AAkBJ;AACJ;;;;AA1Ea;AAAA;AAgBA;AAAA;AAuCA;AAAA;;;;;;;;;;2BDnCAA,oB,EAAoB;cANhC,OAAAvjC,SAMgC;eANtB;AACPlnD,kBAAQ,EAAE,gBADH;AAEPmnD,qBAAW,EAAE,+BAFN;AAGPC,mBAAS,EAAE,CAAC,+BAAD,CAHJ;AAIPga,uBAAa,EAAE,OAAAC,iBAAA,CAAkB34C;AAJ1B,S;AAMsB,Q;;;;kBAExB,OAAAqrB,M;mBAAO,SAAAkT,e;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AExBhB;AAAA;AAAA;;AAQA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAWA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBY;AACI;AAEQ;AAAA;AAAA;AAAA;AAAA;AACJ;AACJ;AACJ;;;;;AAJY;AAAA;AAEc;AAAA;;;;;;AAKlB;AACmC;AAAkB;;;;;AADH;AACf;AAAA;;;;;;AACnC;;;;;;AAAmD;;;;;;AAHvD;AACI;AAEA;AAGJ;;;;;AALyB;AAAA;AAEE;AAAA;;;;;;AAJ/B;AACI;AAOJ;;;;;AAPsB;AAAA;;;;;;;;AAQtB;AACI;AAEI;AAAA;AAAA;AAAA;AAAA;AACA;AACJ;AACJ;;;;;AAJQ;AAAA;AAEkB;AAAA;;;;;;;;AAG1B;AACI;AAEI;AAAA;AAAA;AAAA,iBAAS,QAAA85B,aAAA,MAAmB,IAAnB,CAAT;AAAiC,SAAjC;AACA;AACJ;AACJ;;;;;AAJQ;AAAA;AAEkB;AAAA;;;;;;;;AAG1B;AACI;AAEI;AAAA;AAAA;AAAA,iBAAS,QAAAA,aAAA,MAAmB,IAAnB,CAAT;AAAiC,SAAjC;AACA;AACJ;AACJ;;;;;AAJQ;AAAA;AAEkB;AAAA;;;;AApDtC,QAAYzJ,gBAAZ;;AAAA,eAAYA,gBAAZ,EAA4B;AACxB;AACA;AACH,KAHD,EAAYA,gBAAgB,GAAhB,QAAAA,gBAAA,aAAAA,gBAAA,GAAgB,EAAhB,CAAZ;;QA8EaoyB,qB;;;;;AA0CT,qCAAoB5vF,KAApB,EACYK,SADZ,EAEYkqC,OAFZ,EAGYpnC,KAHZ,EAIYsV,IAJZ,EAKY6xB,OALZ,EAK6B;AAAA;;AAAA;;AACzB;AANgB,iBAAAtqC,KAAA,GAAAA,KAAA;AACR,iBAAAK,SAAA,GAAAA,SAAA;AACA,iBAAAkqC,OAAA,GAAAA,OAAA;AACA,iBAAApnC,KAAA,GAAAA,KAAA;AACA,iBAAAsV,IAAA,GAAAA,IAAA;AACA,iBAAA6xB,OAAA,GAAAA,OAAA;AA1CZ;;AACgB,iBAAA66B,KAAA,GAAiB,KAAjB;AAChB;;AACgB,iBAAA0qB,SAAA,GAAqB,KAArB;AAChB;;AACgB,iBAAAC,QAAA,GAAoB,KAApB;AAGhB;;AACgB,iBAAAtsC,IAAA,GAAyBga,gBAAgB,CAACurB,IAA1C;AAKhB;;AACiB,iBAAAgH,UAAA,GAAa,IAAI,OAAArlD,YAAJ,EAAb;AACjB;;AACiB,iBAAAu8B,aAAA,GAAgB,IAAI,OAAAv8B,YAAJ,EAAhB;AACjB;;AACiB,iBAAAslD,MAAA,GAAS,IAAI,OAAAtlD,YAAJ,EAAT;AAGjB;;AACO,iBAAAulD,SAAA,GAAqB,KAArB;AACP,iBAAA1pB,YAAA,GAAwB,KAAxB;AAQO,iBAAA2pB,eAAA,GAA2D,IAA3D;AAEA,iBAAAryF,gBAAA,GAAyB,IAAI3U,IAAJ,EAAzB;AACA,iBAAAinG,UAAA,GAAqB,IAArB;AAOsB;AAE5B;;;;mCAEc;AAAA;;AACX,eAAKnwF,KAAL,CAAWolE,QAAX,CAAoB,eAAA3lE,iBAAA,CAAkB/D,OAAlB,EAApB;;AACA,eAAK2E,SAAL,CAAewB,WAAf,CAA2BzH,IAA3B,CAAgC,YAAAyG,KAAA,CAAM,UAAAC,CAAC;AAAA,mBAAIA,CAAJ;AAAA,WAAP,CAAhC,EAA+CvZ,SAA/C,CAAyD,YAAM;AAC3D,oBAAI,CAAC6oG,IAAL,GAAY,QAAI,CAAC/vF,SAAL,CAAerB,GAAf,oBAA+B,QAAI,CAACwkD,IAApC,MAA+C;AAAEj1D,kBAAI,EAAE;AAAR,aAA3D;AACH,WAFD;;AAGA,eAAKtG,OAAL,CAAa,eAAb,EAA8B;AAAA,mBAAM,QAAI,CAACizD,WAAL,CAAiBrmD,QAAQ,CAACuhB,KAA1B,CAAN;AAAA,WAA9B;;AACA,eAAKk0B,OAAL,CAAajlC,MAAb,CAAoB9d,SAApB,CAA8B,UAACyP,KAAD,EAA0B;AACpD;AACA,gBAAIA,KAAK,YAAY,SAAAmkD,aAArB,EAAoC;AAChC,sBAAI,CAAClzD,OAAL,CAAa,eAAb,EAA8B;AAAA,uBAAM,QAAI,CAACizD,WAAL,CAAiBrmD,QAAQ,CAACuhB,KAA1B,CAAN;AAAA,eAA9B;AACH;AACJ,WALD,EANW,CAaX;;;AACA,cAAI,CAAC,KAAK05E,QAAV,EAAoB;AAChB;AACA,iBAAKzoG,YAAL,CAAkB,iBAAlB,EAAqC,KAAK2Y,KAAL,CAAW5F,IAAX,CACjC,YAAA8zC,oBAAA,EADiC,EAEnC3mD,SAFmC,CAEzB,UAACkQ,IAAD,EAA2B;;;AACnC,kBAAM04F,UAAU,GAAG,CAAH,6BAAG14F,IAAI,CAACi9B,YAAR,MAAoB,IAApB,IAAoB,aAApB,GAAoB,MAApB,GAAoB,GAAE70B,IAAtB,MAA0B,IAA1B,IAA0B,aAA1B,GAA0B,MAA1B,GAA0B,GAAEnB,OAA5B,MAAmC,IAAnC,IAAmC,aAAnC,GAAmC,MAAnC,GAAmC,GAAE2B,SAArC,MAA8C,IAA9C,IAA8C,aAA9C,GAA8C,MAA9C,GAA8C,GAAEyxB,cAA7C,MAA2D,IAA3D,IAA2D,aAA3D,GAA2D,MAA3D,GAA2D,GAAEu+D,WAAhF;;AACA,kBAAIF,UAAU,IAAI,QAAI,CAACA,UAAL,KAAoBA,UAAtC,EAAkD;AAC9C,wBAAI,CAACA,UAAL,GAAkBA,UAAlB;AACH;;AACD,kBAAI,OAAA14F,IAAI,CAACmZ,WAAL,MAAgB,IAAhB,IAAgB,aAAhB,GAAgB,MAAhB,GAAgB,GAAE/S,gBAAlB,KAAsC,QAAI,CAACA,gBAAL,CAAsBikB,OAAtB,KAAkCrqB,IAAI,CAACmZ,WAAL,CAAiB/S,gBAAjB,CAAkCikB,OAAlC,EAA5E,EAAyH;AACrH,wBAAI,CAACjkB,gBAAL,GAAwB,IAAI3U,IAAJ,CAASuO,IAAI,CAACmZ,WAAL,CAAiB/S,gBAAjB,CAAkCikB,OAAlC,EAAT,CAAxB;;AACA,wBAAI,CAACwuE,iBAAL;AACH;AACJ,aAXoC,CAArC;AAYH;;AAGD,eAAKjpG,YAAL,CAAkB,YAAlB,EAAgC,KAAK2Y,KAAL,CAAW5F,IAAX,CAC5B,QAAA4H,MAAA,CAAO,cAAA6O,gBAAP,CAD4B,EAE5B,YAAAq9B,oBAAA,EAF4B,EAG9B3mD,SAH8B,CAGpB,UAACkQ,IAAD,EAAuC;AAC/C,gBAAIA,IAAJ,EAAU;AACN,sBAAI,CAAC8uE,YAAL,GAAoB9uE,IAAI,CAAC8C,MAAL,KAAgB,cAAA2W,YAAA,CAAaC,IAAjD;AACH;AACJ,WAP+B,CAAhC;AAQH;;;oCAEkBxO,Q,EAAU;AACzBA,kBAAQ,GAAGA,QAAQ,CAACsrB,MAAT,CAAgB,CAAhB,EAAmBtrB,QAAQ,CAACjW,OAAT,CAAiB,IAAjB,CAAnB,CAAX;AACA,eAAK64E,WAAL,GAAmB5iE,QAAnB;AACH;AAED;;;;mCACkB;AACd,eAAK8/B,IAAL,GAAY,IAAZ;AACA,eAAKstD,UAAL,CAAgB/jD,IAAhB,CAAqB,KAAKvJ,IAA1B;AACH;;;mCAEuB;;;;;;;;AACpB,yBAAK8jC,YAAL,IAAqB,KAAKiG,sBAAL,EAArB;;AACA,2BAAM,KAAKliC,OAAL,CAAapL,QAAb,CAAsB,CAAC,CAAD,KAAC,KAAKqxD,YAAL,MAAiB,IAAjB,IAAiB,aAAjB,GAAiB,EAAjB,GAAqB,GAAtB,CAAtB,CAAN;;;AACA;AACA,yBAAKhmD,OAAL,CAAa8rC,QAAb;;;;;;;;;AACH;;;iDAG4B;AAC/B,eAAKr2E,KAAL,CAAWolE,QAAX,CAAoB,cAAAznE,oBAAA,EAApB;AACA,eAAKqC,KAAL,CAAWolE,QAAX,CAAoB,QAAAzzD,mBAAA,CAAoByrC,KAApB,EAApB;AACA;;;mCAEoB;AACd,cAAMozC,QAAQ,GAAG,KAAK/3E,IAAL,CAAU4c,gCAAV,CAA2C,UAA3C,CAAjB;;AACAxmC,gBAAM,CAACyS,IAAP,CAAYkvF,QAAQ,IAAI,OAAAvrB,IAAA,CAAKC,IAA7B;AACH;;;uCAEqB;AAClB;AACA,eAAKllE,KAAL,CAAWolE,QAAX,CAAoB,cAAAxnE,iBAAA,EAApB;AACH;;;4CAE0B;AAAA;;AACvB,cAAI,CAAC,KAAKqyF,SAAN,IAAmB,CAAC,KAAKC,eAA7B,EAA8C;AAC1C,iBAAKD,SAAL,GAAiB,IAAjB;AACA,iBAAKC,eAAL,GAAuB,KAAK3lD,OAAL,CAAajpC,IAAb,CAAkB,yBAAAqvE,oBAAlB,EAAwC;AAC3D1lC,0BAAY,EAAE,IAD6C;AAE3D1pC,wBAAU,EAAE,kBAF+C;AAG3D1B,kBAAI,EAAE,KAAKswF,UAHgD;AAI3D98C,uBAAS,EAAE,KAJgD;AAK3DC,2BAAa,EAAE;AAL4C,aAAxC,CAAvB;AAOA,iBAAK48C,eAAL,CAAqBpjD,WAArB,GAAmCvlD,SAAnC,CAA6C,YAAM;AAC/C,sBAAI,CAAC0oG,SAAL,GAAiB,KAAjB;AACA,sBAAI,CAACC,eAAL,GAAuB,IAAvB;AACH,aAHD;AAIH;AAEJ;;;wCAE4B;;;;;;AACzB,yBAAKF,MAAL,CAAYhkD,IAAZ;;AACA,2BAAM,KAAK1B,OAAL,CAAapL,QAAb,CAAsB,KAAKuxD,IAAL,CAAUttF,KAAhC,EAAuC;AAAE+oC,iCAAW,EAAE,KAAKukD,IAAL,CAAUvkD;AAAzB,qBAAvC,CAAN;;;;;;;;;AACH;;;4BApHqB;AAClB,cAAMwkD,YAAY,GAAG,KAAKj4E,IAAL,CAAU4c,gCAAV,CAA2C,cAA3C,CAArB;;AACA,2BAAUq7D,YAAV,SAAyB,KAAKnrB,WAA9B,EAFkB,CAGlB;AACH;;;;MAnCsC,OAAAx/E,a;;AAhE3C;;;uBAgEa6pG,qB,EAAqB,8B,EAAA,wC,EAAA,kC,EAAA,uC,EAAA,4C,EAAA,+B;AAAA,K;;;YAArBA,qB;AAAqB,sC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,e;AAAA,c;AAAA,+jC;AAAA;AAAA;AA7D1B;AACI;AAOA;AASA;AAOA;AAOA;AAOA;AACI;AAGI;AAAA,mBAAS,IAAAe,YAAA,EAAT;AAAuB,WAAvB;AAEA;AACA;AAAM;AAAQ;AAClB;AACA;AAGQ;AAAA,mBAAS,IAAAC,QAAA,EAAT;AAAmB,WAAnB;AAEA;AACA;AAAM;AAAI;AAClB;AACJ;AACJ;;;;AAxDK;AACuB;AAAA;AAOkB;AAAA;AASR;AAAA;AAOA;AAAA;AAOA;AAAA;AAU1B;AAAA;AAGkB;AAAA;AAKd;AAAA;AAGkB;AAAA;;;;;;;;;;2BAS7BhB,qB,EAAqB;cAhEjC,OAAAxiD,SAgEiC;eAhEvB;AACPlnD,kBAAQ,EAAE,iBADH;AAEPw0D,kBAAQ,wxGAFD;AA6DPpN,mBAAS,EAAE,CAAC,gCAAD;AA7DJ,S;AAgEuB,Q;;;;;;;;;;;;;;;;gBAI7B,OAAA1kD;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;gBAEA,OAAA2kD;;;gBAEA,OAAAA;;;gBAEA,OAAAA;;;;;;;;;;;;;;;;;;;;;;;;ACjJL;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAKA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACXoB;AAAsD;AAAkB;;;;;AAAvC;AAAqB;AAAA;;;;;;AACtD;;;;;;AAAkC;;;;;;;;AANtD;AACI;AACI;AACI;AACI;AACI;AACA;AACJ;AACJ;AACA;AACI;AACI;AACI;AAAA;AAQA;AACA;AACI;AAAA;AAAA;AAOA;AAAA;AACyB;AAE7B;AACJ;AACA;AACI;AAAA;AAQA;AACA;AACI;AAAA;AAMI;AAAA;AAAA;AAAA;AAAA;AANJ;AAQA;AAAA;AACiC;AAErC;AACJ;AACJ;AACJ;AACA;AACI;AAAmB;AAAA;AAAA;AAAA;AAAA;AAAnB;AAA8D;AAClE;AACJ;AACJ;AACJ;;;;;AA/Dc;AAAA;AACkB;AAAA;AAET;AAAA;AACE;AAAA;AAQG;AAAA;AAuBA;AAAA;;;;;;;;;;;;;;;;;;AA8BxB;AACI;AACI;AACJ;AACA;AAAA;AAAkE;AACtE;;;;QDjDSsjD,c;;;;;AAQT,8BAAoBrrF,QAApB,EAA0D4uB,MAA1D,EAAgF;AAAA;;AAAA;;AAC5E;AADgB,iBAAA5uB,QAAA,GAAAA,QAAA;AAAsC,iBAAA4uB,MAAA,GAAAA,MAAA;AAAsB;AAE/E;;;;mCAEc;AAAA;;AACX,eAAK7xB,OAAL,GAAe,IAAf;AACA,eAAKkD,IAAL,GAAY,IAAI,QAAAiiB,SAAJ,CAAc;AACtBopE,oBAAQ,EAAE,IAAI,QAAA7rE,WAAJ,CAAgB,EAAhB,EAAoB,CAAC,QAAAE,UAAA,CAAWC,QAAZ,CAApB,CADY;AAEtB2rE,oBAAQ,EAAE,IAAI,QAAA9rE,WAAJ,CAAgB,EAAhB,EAAoB,CAAC,QAAAE,UAAA,CAAWC,QAAZ,CAApB;AAFY,WAAd,CAAZ;;AAIA,eAAK5f,QAAL,CAAc3D,WAAd,CAA0BzH,IAA1B,CAA+B,YAAAyG,KAAA,CAAM,UAAAC,CAAC;AAAA,mBAAIA,CAAJ;AAAA,WAAP,CAA/B,EAA8CvZ,SAA9C,CAAwD,YAAM;AAC1D,oBAAI,CAACgb,OAAL,GAAe,KAAf;AACA,oBAAI,CAAC6tF,IAAL,GAAY,QAAI,CAAC5qF,QAAL,CAAcd,OAAd,CAAsB,gBAAtB,KAA2C;AAAEnW,kBAAI,EAAE;AAAR,aAAvD;AACH,WAHD;AAIH;AAED;;;;gCACe;AAAA;;AACX,eAAKgU,OAAL,GAAe,IAAf;AACA,cAAMkD,IAAI,GAAG,KAAKA,IAAL,CAAUjZ,KAAvB;;AACA,eAAK4nC,MAAL,CAAY48D,KAAZ,CAAkB;AACdF,oBAAQ,EAAErrF,IAAI,CAACqrF,QADD;AAEdC,oBAAQ,EAAEtrF,IAAI,CAACsrF;AAFD,WAAlB,EAGG;AAAEtrF,gBAAI,EAAE;AAAR,WAHH,EAGmBO,IAHnB,CAGwB,YAAM;AAC1B,oBAAI,CAACzD,OAAL,GAAe,KAAf;AACH,WALD,EAKG,YAAM;AACL,oBAAI,CAACA,OAAL,GAAe,KAAf;;AACA,oBAAI,CAACkD,IAAL,CAAUkxB,QAAV,CAAmBo6D,QAAnB,CAA4BE,SAA5B,CAAsC;AAAE/kE,mBAAK,EAAE;AAAT,aAAtC;AACH,WARD;AASH;;;;MArC+B,OAAAnmC,a;;AALpC;;;uBAKa8qG,c,EAAc,2C,EAAA,qC;AAAA,K;;;YAAdA,c;AAAc,gC;AAAA,+C;AAAA,c;AAAA,a;AAAA,soB;AAAA;AAAA;ACvB3B;AAkEA;;;;;;AAlEmB,8CAAoC,UAApC,EAAoC,GAApC;;;;;;;;;;2BDuBNA,c,EAAc;cAL1B,OAAAzjD,SAK0B;eALhB;AACPlnD,kBAAQ,EAAE,WADH;AAEPmnD,qBAAW,EAAE,wBAFN;AAGPC,mBAAS,EAAE,CAAC,wBAAD;AAHJ,S;AAKgB,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEvB3B;AAAA;AAAA;;;;;;;;;;QAuDaugD,oB;AAsBT,sCAAc;AAAA;;AApBP,aAAAqD,YAAA,GAAe,IAAI,OAAAxmD,YAAJ,EAAf;AAGA,aAAAymD,WAAA,GAAc,IAAI,OAAAzmD,YAAJ,EAAd;AAGA,aAAA0mD,YAAA,GAAe,IAAI,OAAA1mD,YAAJ,EAAf;AAGA,aAAA2mD,SAAA,GAAY,IAAI,OAAA3mD,YAAJ,EAAZ;AAEG,aAAA4mD,WAAA,GAAc,IAAI,OAAA5mD,YAAJ,EAAd;AAEH,aAAA0e,QAAA,GAAW,IAAX;AAOS;;;;iCALP;AACL,eAAKkoC,WAAL,CAAiBtlD,IAAjB;AACA,eAAKod,QAAL,GAAgB,CAAC,KAAKA,QAAtB;AACH;;;mCAIO,CAAW;;;;;;AAxEvB;;;uBAgDaykC,oB;AAAoB,K;;;YAApBA,oB;AAAoB,uC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA,e;AAAA,a;AAAA,wvB;AAAA;AAAA;AA7CzB;AACI;AACI;AAGI;AAAA,mBAAS,IAAAsD,WAAA,OAAT;AAA2B,WAA3B;AAGA;AACJ;AACA;AAGI;AAAA,mBAAS,IAAAD,YAAA,OAAT;AAA4B,WAA5B;AAGA;AACJ;AACA;AAGI;AAAA,mBAAS,IAAAE,YAAA,OAAT;AAA4B,WAA5B;AAGA;AACJ;AACA;AACI;AAAA,mBAAS,IAAAG,MAAA,EAAT;AAAiB,WAAjB;AAGA;AAQJ;AACJ;AACJ;;;;AARgB;AAAA;;;;;;;;;2BAaX1D,oB,EAAoB;cAhDhC,OAAAzgD,SAgDgC;eAhDtB;AACPlnD,kBAAQ,EAAE,kBADH;AAEPw0D,kBAAQ,0yDAFD;AA6CPpN,mBAAS,EAAE,CAAC,+BAAD,CA7CJ;AA8CPga,uBAAa,EAAE,OAAAC,iBAAA,CAAkBszB;AA9C1B,S;AAgDsB,Q;;;;gBAC5B,OAAAttC;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;gBAGA,OAAAA;;;;;;;;;;;;;;;;;;;;;;;;ACpEL;AAAA;AAAA;;AASA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBgB;AAEI;AAAA;AAAA;AAAA;AAAA;AAEI;AACR;;;;QAkCHikD,mB;;;;;AA4CT,qCAAc;AAAA;;AAAA;;AACV;AA3CG,iBAAAvW,aAAA,GAAgB,YAAAA,aAAA,EAAhB;AASA,iBAAAwW,sBAAA,GAAyB,IAAI,OAAA/mD,YAAJ,EAAzB;AASA,iBAAAgnD,mBAAA,GAAsB,IAAI,OAAAhnD,YAAJ,EAAtB;AAMA,iBAAAinD,mBAAA,GAAsB,IAAI,OAAAjnD,YAAJ,EAAtB;AAMA,iBAAAknD,WAAA,GAAc,IAAI,OAAAlnD,YAAJ,EAAd;AAEA,iBAAAmnD,eAAA,GAAkB,IAAI,QAAA5sE,WAAJ,EAAlB;AAEA,iBAAA6sE,YAAA,GAAe,IAAI,QAAA7sE,WAAJ,EAAf;AAEA,iBAAAgnE,YAAA,GAAe,IAAI,QAAAhnE,WAAJ,EAAf;AAIA,iBAAAinE,mBAAA,GAAsB,KAAtB;AAEO;AAEb;;;;mCAEc;AAAA;;AACX,eAAK7kG,YAAL,CAAkB,iBAAlB,EACI,KAAKwqG,eAAL,CAAqB3rE,YAArB,CAAkC3+B,SAAlC,CAA4C,UAAAiF,KAAK;AAAA,mBAAI,QAAI,CAACilG,sBAAL,CAA4BzlD,IAA5B,CAAiCx/C,KAAjC,CAAJ;AAAA,WAAjD,CADJ;AAEA,eAAKnF,YAAL,CAAkB,cAAlB,EACI,KAAKyqG,YAAL,CAAkB5rE,YAAlB,CAA+B3+B,SAA/B,CAAyC,UAAAiF,KAAK;AAAA,mBAAI,QAAI,CAACklG,mBAAL,CAAyB1lD,IAAzB,CAA8Bx/C,KAA9B,CAAJ;AAAA,WAA9C,CADJ;AAEA,eAAKnF,YAAL,CAAkB,cAAlB,EACI,KAAK4kG,YAAL,CAAkB/lE,YAAlB,CAA+B3+B,SAA/B,CAAyC,UAAAiF,KAAK,EAAI;AAC9C,oBAAI,CAACmlG,mBAAL,CAAyB3lD,IAAzB,CAA8Bx/C,KAA9B;;AACA,oBAAI,CAAColG,WAAL,CAAiB5lD,IAAjB;AACH,WAHD,CADJ;AAKH;;;0CAEwB;AACrB,eAAKoc,UAAL,GAAkBl/D,IAAI,CAACunB,GAAL,EAAlB;AACA,eAAKg8E,aAAL,GAAqB,IAArB;AACA,eAAKP,mBAAL,GAA2B,KAA3B,CAHqB,CAIrB;AACH;;;wCAEsBl1F,K,EAAY;AAC/B,eAAKk1F,mBAAL,GAA2B,CAAC,CAACl1F,KAAK,CAACxL,MAAnC;AACH;;;;MArEoC,OAAAzF,a;;AArDzC;;;uBAqDayrG,mB;AAAmB,K;;;YAAnBA,mB;AAAmB,sC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,e;AAAA,c;AAAA,o+B;AAAA;AAAA;AAlDxB;AACI;AACI;AAOA;AAAA,mBAAmB,IAAAzpC,eAAA,QAAnB;AAA0C,WAA1C;AACC;AACD;AAMA;AACI;AAAA,mBAAS,IAAA6pC,WAAA,OAAT;AAA2B,WAA3B;AAEI;AACR;AACJ;AACA;AACI;AAOA;AAOA;AAMJ;AACJ;;;;AA1CQ;AAAA,4DAA+B,YAA/B,EAA+B,cAA/B,EAA+B,SAA/B,EAA+B,UAA/B,EAA+B,aAA/B,EAA+B,gBAA/B;AASI;AAAA;AAaA;AAAA,6CAAoB,eAApB,EAAoB,oBAApB,EAAoB,aAApB,EAAoB,mBAApB,EAAoB,SAApB,EAAoB,aAApB,EAAoB,UAApB,EAAoB,0DAApB;AAOA;AAAA,6CAAoB,eAApB,EAAoB,iBAApB,EAAoB,aAApB,EAAoB,gBAApB,EAAoB,SAApB,EAAoB,UAApB,EAAoB,UAApB,EAAoB,oDAApB;AASA;AAAA;;;;;;;;;2BASPJ,mB,EAAmB;cArD/B,OAAApkD,SAqD+B;eArDrB;AACPlnD,kBAAQ,EAAE,iBADH;AAEPw0D,kBAAQ,0vEAFD;AAkDPpN,mBAAS,EAAE,CAAC,8BAAD,CAlDJ;AAmDPga,uBAAa,EAAE,OAAAC,iBAAA,CAAkBszB;AAnD1B,S;AAqDqB,Q;;;;gBAI3B,OAAAjyF;;;gBAGA,OAAAA;;;gBAGA,OAAA2kD;;;gBAGA,OAAA3kD;;;gBAGA,OAAAA;;;gBAGA,OAAA2kD;;;gBAGA,OAAA3kD;;;gBAGA,OAAA2kD;;;gBAGA,OAAA3kD;;;gBAGA,OAAA2kD;;;;;;;;;;;;;;;;;;;;;;;;ACjGL;AAAA;AAAA;;AAUA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;AA8BwB;AAEI;AAAA;AAAA;AAAA;AAAA,WAA4B,UAA5B,EAA4B;AAAA;AAAA;AAAA;AAAA,SAA5B;AAEA;AACJ;;;;;;AAEA;AAAyC;AAAgK;;;;;AAAhK;AAAA;;;AA7BjE;;;;;QAuCawkD,mB;AACT,mCACqClyF,IADrC,EAC8D;AAAA;;AAAzB,aAAAA,IAAA,GAAAA,IAAA;AAEpC;;;;mCACc,CACd;;;2CAGyB;AACtB,cAAI,KAAKA,IAAL,CAAU04E,eAAV,CAA0BkC,YAA1B,IAA0C,KAAK56E,IAAL,CAAUyc,IAAxD,EAA8D;AAC1D,iBAAKzc,IAAL,CAAU04E,eAAV,CAA0BkC,YAA1B,CAAuC,KAAK56E,IAAL,CAAUyc,IAAjD;AACH;AACJ;;;uCAMqB;;;AAClB,qBAAKzc,IAAL,CAAU04E,eAAV,MAAyB,IAAzB,IAAyB,aAAzB,GAAyB,MAAzB,GAAyB,GAAEyZ,qBAAF,EAAzB;AACH;;;4BANsB;;;AACpB,iBAAO,wBAAKnyF,IAAL,CAAU04E,eAAV,MAAyB,IAAzB,IAAyB,aAAzB,GAAyB,MAAzB,GAAyB,GAAE0E,eAA3B,MAA0C,IAA1C,IAA0C,aAA1C,GAA0C,MAA1C,GAA0C,GAAEzwF,KAA5C,MAAiD,IAAjD,IAAiD,aAAjD,GAAiD,MAAjD,GAAiD,GAAE4hB,YAAnD,KAAmE,KAA1E;AACF;;;;;;AArDL;;;uBAoCa2jF,mB,EAAmB,qBAEhB,sBAAAnX,gBAFgB,C;AAEA,K;;;YAFnBmX,mB;AAAmB,sC;AAAA,e;AAAA,a;AAAA,irB;AAAA;AAAA;AAjCxB;AAEQ;AACI;AACI;AACI;AAAkC;AAAA,mBAAS,IAAAE,YAAA,EAAT;AAAuB,WAAvB,EAAwB,UAAxB,EAAwB;AAAA,mBAAa,IAAAA,YAAA,EAAb;AAA2B,WAAnD;AAE9B;AACI;AAA0B;AAAK;AACnC;AAEJ;AACJ;AACJ;AACA;AACI;AAAM;AAAkC;AACxC;AAOA;AACJ;AACJ;AACJ;AAEJ;;;;AAbsB;AAAA;AACqC;AAAA;AAOvB;AAAA;;;;;;;;;2BAU/BF,mB,EAAmB;cApC/B,OAAA3kD,SAoC+B;eApCrB;AACPlnD,kBAAQ,EAAE,iBADH;AAEPw0D,kBAAQ,mkDAFD;AAiCPpN,mBAAS,EAAE,CAAC,8BAAD,CAjCJ;AAkCPga,uBAAa,EAAE,OAAAC,iBAAA,CAAkBszB;AAlC1B,S;AAoCqB,Q;;;;kBAEvB,OAAA5gD,M;mBAAO,sBAAA2gD,gB;;;;;;;;;;;;;;;;;;;;;;;;;AC3DhB;AAAA;AAAA;;AASA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAoBA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAQA;AAAA;AAAA;;AAQA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BgB;AACI;AACJ;;;;QA+CHsX,kB;;;;;AAwDT,kCACYlyF,KADZ,EAEWknE,MAFX,EAGY3J,cAHZ,EAIYa,MAJZ,EAKYz7D,QALZ,EAMYQ,KANZ,EAMiC;AAAA;;AAAA;;AAE7B;AAPQ,iBAAAnD,KAAA,GAAAA,KAAA;AACD,iBAAAknE,MAAA,GAAAA,MAAA;AACC,iBAAA3J,cAAA,GAAAA,cAAA;AACA,iBAAAa,MAAA,GAAAA,MAAA;AACA,iBAAAz7D,QAAA,GAAAA,QAAA;AACA,iBAAAQ,KAAA,GAAAA,KAAA;AA5DL,iBAAAg5E,UAAA,GAAsB,IAAtB;AAEA,iBAAAhF,IAAA,GAAO,IAAI,OAAApyF,eAAJ,CAAoB,YAAAqyF,cAApB,CAAP;AAEA,iBAAAC,MAAA,GAAS,IAAI,OAAAtyF,eAAJ,CAA2B,YAAAuyF,YAA3B,CAAT;AACA,iBAAAqE,SAAA,GAAY,IAAI,OAAA52F,eAAJ,CAAmC,EAAnC,CAAZ;AAEA,iBAAAq3F,eAAA,GAAkB,IAAI,OAAAr3F,eAAJ,CAA4CwG,SAA5C,CAAlB;AACA,iBAAAuvC,QAAA,GAAW,OAAAzhB,aAAA,CAAc,CAAC,SAAK+iE,eAAN,CAAd,EAAsChiF,IAAtC,CACd,YAAAjL,GAAA,CAAI,UAAC7H,KAAD;AAAA,iBAAWA,KAAK,CAAC4I,MAAN,CAAa,UAACvI,CAAD;AAAA,mBAAO,CAAC,CAACA,CAAT;AAAA,WAAb,CAAX;AAAA,SAAJ,CADc,CAAX;AAIA,iBAAAsjF,WAAA,GAAc,IAAI,OAAAlmF,eAAJ,CAAsDwG,SAAtD,CAAd;AAEA,iBAAA8wF,eAAA,GAAkB,IAAI,OAAAt3F,eAAJ,CAAgC,EAAhC,CAAlB;AACA,iBAAAu3F,YAAA,GAAe,IAAI,OAAAv3F,eAAJ,CAA6B,EAA7B,CAAf,CA6C0B,CA5CjC;AACA;AACA;;AAEO,iBAAAw3F,cAAA,GAAiB,IAAI,OAAAx3F,eAAJ,CAA0CwG,SAA1C,CAAjB;AACA,iBAAAixF,WAAA,GAAc,IAAI,OAAAz3F,eAAJ,CAA+CwG,SAA/C,CAAd;AACA,iBAAAkxF,WAAA,GAAc,IAAI,OAAA13F,eAAJ,CAAuCwG,SAAvC,CAAd;AAEP;;AACO,iBAAAmxF,SAAA,GAAY,IAAI,OAAA33F,eAAJ,CAAuD,EAAvD,CAAZ;AAEA,iBAAAgmF,MAAA,GAAS,SAAKyR,WAAL,CAAiBpiF,IAAjB,CAAsB,YAAAjL,GAAA,CAAI,UAACwlB,KAAD,EAAW;AAAD;;AAAA,uBAACA,KAAK,SAAL,IAAAA,KAAK,WAAL,GAAK,MAAL,GAAAA,KAAK,CAAEqf,OAAR,MAAe,IAAf,IAAe,aAAf,GAAe,EAAf,GAAmB,EAAnB;AAAqB,SAAnC,CAAtB,CAAT;AAEA,iBAAA2oD,gBAAA,GAAmB,IAAI,OAAA53F,eAAJ,CAAyC,EAAzC,CAAnB;AACA,iBAAA63F,oBAAA,GAAuB,IAAI,OAAA73F,eAAJ,CAAyC,EAAzC,CAAvB;AACA,iBAAA83F,gBAAA,GAAmB,IAAI,OAAA93F,eAAJ,CAAyC,EAAzC,CAAnB;AAEA,iBAAA+3F,oBAAA,GAAuB,OAAAzjE,aAAA,CAAc,CAAC,SAAKkjE,cAAN,EAAsB,SAAKI,gBAA3B,CAAd,EAA4DviF,IAA5D,CAC1B,YAAAjL,GAAA,CAAI;AAAA;AAAA,cAAEyd,QAAF;AAAA,cAAYiD,SAAZ;;AAAA,iBAA2BA,SAAS,CAAC/iB,IAAV,CAAe,UAACsS,CAAD;AAAA,mBAAOA,CAAC,CAAC5S,KAAF,MAAYogB,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAErR,EAAtB,CAAP;AAAA,WAAf,CAA3B;AAAA,SAAJ,CAD0B,CAAvB;AAIA,iBAAAwhF,iBAAA,GAAoB,SAAKP,WAAL,CAAiBpiF,IAAjB,CAAsB,YAAAjL,GAAA,CAAI,cAAAulB,wBAAJ,CAAtB,CAApB;AACA,iBAAAsoE,iBAAA,GAAoB,SAAKP,WAAL,CAAiBriF,IAAjB,CAAsB,YAAAjL,GAAA,CAAI,QAAAmyD,qBAAJ,CAAtB,CAApB;AACA,iBAAA27B,eAAA,GAAkB,IAAI,OAAAl4F,eAAJ,CAAiDwG,SAAjD,CAAlB;AAGG,iBAAA+lG,WAAA,GAAc,IAAI,OAAA5mD,YAAJ,EAAd,CAkBuB,CAhBjC;;AACO,iBAAA6kB,MAAA,GAAS,IAAT;;AA+MA,iBAAAyiC,qBAAA,GAAwB;AAAA,iBAAM,SAAK5V,eAAL,CAAqB3kF,IAArB,CAA0BlM,SAA1B,CAAN;AAAA,SAAxB;;AA7LH,iBAAK4mG,SAAL,GAAiBxvF,QAAQ,CAACw6E,QAAT,EAAjB;AAH6B;AAIhC;;;;0CAhBiB;AAChB,eAAKmU,WAAL,CAAiBtlD,IAAjB;AACA,eAAKujB,MAAL,GAAc,CAAC,KAAKA,MAApB;AACD;;;mCAec;AAAA;;AACX;;;AAEA,eAAKloE,YAAL,CACI,kBADJ,EAEI,KAAK2Y,KAAL,CAAW5F,IAAX,CAAgB,QAAA4H,MAAA,CAAO,cAAAqP,sBAAP,CAAhB,EAAgD9pB,SAAhD,CAA0D,UAACkQ,IAAD,EAAU;AAChE,oBAAI,CAACklF,gBAAL,CAAsBllF,IAAtB,CAA2BA,IAA3B,EADgE,CAEhE;;;AACA,gBAAM8lF,IAAI,GAAG,QAAb;AACA93F,sBAAU,CAAC,YAAM;AACb83F,kBAAI,CAACC,oBAAL,CAA0BD,IAAI,CAACZ,gBAAL,CAAsBnwF,KAAtB,CAA4B,CAA5B,CAA1B;AACH,aAFS,EAEP,CAFO,CAAV;AAGH,WAPD,CAFJ;AAWA,eAAKnF,YAAL,CACI,qBADJ,EAEI,OAAAgyB,aAAA,CAAc,CACV,KAAKrZ,KAAL,CAAW5F,IAAX,CACI,QAAA4H,MAAA,CAAO,cAAA+Q,wBAAP,CADJ,EAEI,YAAA5jB,GAAA,CAAI,UAACG,CAAD,EAAqC;AACrC,oBAAI,CAACu7F,cAAL,GAAsBv7F,CAAC,CAAC6uD,SAAxB;AACD,mBAAO7uD,CAAC,CAACoP,OAAT;AAAkB,WAFrB,CAFJ,CADU,EAOV,KAAK69E,cAAL,CAAoBniF,IAApB,CAAyB,WAAAynD,eAAA,EAAzB,CAPU,EAQV,KAAK26B,WAAL,CAAiBpiF,IAAjB,CAAsB,WAAAynD,eAAA,EAAtB,CARU,CAAd,EASGt6D,SATH,CASa,kBAAuC;AAAA;AAAA,gBAArCilB,cAAqC;AAAA,gBAArBI,QAAqB;AAAA,gBAAX+H,KAAW;;AAChD,gBAAM8oE,mBAAmB,GAAG,CAACjxE,cAAc,CAACb,MAAf,IAAyB,EAA1B,EAA8Bzb,MAA9B,CACxB,UAAC2O,CAAD;AAAA,qBAAO,CAAC,CAACA,CAAC,CAACkyB,MAAJ,IAAclyB,CAAC,CAACgO,KAAF,CAAQzJ,QAAR,CAAiBwJ,QAAQ,CAACrR,EAA1B,CAArB;AAAA,aADwB,CAA5B;;AAGA,oBAAI,CAAC+gF,YAAL,CAAkB7kF,IAAlB,CAAuBgmF,mBAAvB;;AAEA,gBAAM9B,SAAS,GAAkB,EAAjC;AACA,gBAAML,MAAM,GAAsC,EAAlD;AACA,gBAAMoC,UAAU,GAAG,QAAI,CAACngB,cAAL,CAAoBv+D,GAApB,CAAwB,oBAAxB,KAAiD,EAApE;AACAy+E,+BAAmB,CAAC/1F,OAApB,CAA4B,UAAC+kB,KAAD,EAAW;AACnC,kBAAMsB,MAAM,GAAGvB,cAAc,CAACD,SAAf,CAAyBE,KAAK,CAAClR,EAA/B,CAAf;AACA,kBAAMoiF,QAAQ,GAAG,YAAAvC,wBAAA,CAAyB3uE,KAAzB,EAAgCsB,MAAhC,EAAwC2vE,UAAxC,CAAjB;AACApC,oBAAM,YAAKqC,QAAQ,CAACpiF,EAAd,EAAN,GAA4BoiF,QAAQ,CAACrC,MAArC;AACAK,uBAAS,CAACxqF,IAAV,OAAAwqF,SAAS,qBACF,YAAAJ,4BAAA,CACC9uE,KADD,EAEC,YAAM,CAAE,CAFT,EAGC,YAAM,CAAE,CAHT,EAICsB,MAAM,KAAK,QAAX,GACI,YAAM;AACF,wBAAI,CAAC0uE,WAAL,CAAiBhlF,IAAjB,CAAsBgV,KAAtB;;AACA,wBAAI,CAACmxE,WAAL,CAAiB7vE,MAAjB;AACH,eAJL,GAKM,YAAK,CAAE,CATd,CADE,EAAT;AAaH,aAjBD;;AAkBA,oBAAI,CAAC2uE,SAAL,CAAejlF,IAAf,CAAoB6jF,MAApB;;AACA,oBAAI,CAACK,SAAL,CAAelkF,IAAf,CAAoBkkF,SAApB;AACH,WAtCD,CAFJ;AA0CA,eAAKt0F,YAAL,CACI,gBADJ,EAEI,KAAKi1F,YAAL,CACKliF,IADL,CACU,YAAAu5C,cAAA,CAAe,KAAK8oC,WAApB,CADV,EAEKl1F,SAFL,CAEe,kBAAiC;AAAA;AAAA,gBAA/B+0F,YAA+B;AAAA,gBAAjBG,WAAiB;;AACxC,oBAAI,CAACI,gBAAL,CAAsBplF,IAAtB,CAA2B6kF,YAAY,CAACntF,GAAb,CAAiB,QAAAmyD,qBAAjB,CAA3B;AACH,WAJL,CAFJ;AASA,eAAKj6D,YAAL,CACI,wBADJ,EAEI,KAAK2Y,KAAL,CAAW5F,IAAX,CAAgB,QAAA4H,MAAA,CAAO,cAAAoR,6BAAP,CAAhB,EAAuD7rB,SAAvD,CAAiE,UAAC6W,SAAD,EAAe;AAC5E,oBAAI,CAACi+E,eAAL,CAAqB5kF,IAArB,CAA0B2G,SAA1B,EAD4E,CAE5E;;;AACA,gBAAIA,SAAS,CAAC5S,MAAV,GAAmB,CAAnB,IAAwB,CAAC,QAAI,CAAC+wF,cAAL,CAAoB/vF,KAAjD,EAAwD;AACpD,kBAAMqxF,aAAa,GAAGz/E,SAAS,CAAC,CAAD,CAA/B;;AACA,sBAAI,CAACm+E,cAAL,CAAoB9kF,IAApB,CAAyBomF,aAAzB;AACH;AACJ,WAPD,CAFJ;AAYA,eAAKx2F,YAAL,CACI,sBADJ,EAEI,KAAKk1F,cAAL,CACKniF,IADL,CAEQ,WAAAynD,eAAA,EAFR,EAGQ,YAAA1yD,GAAA,CAAI,UAACuC,CAAD;AAAA,mBAAiBA,CAAC,CAACyN,MAAnB;AAAA,WAAJ,CAHR,EAKK5X,SALL,CAKe,UAAC4X,MAAD,EAAY;AACnB,oBAAI,CAACy9E,oBAAL,CAA0BnlF,IAA1B,CAA+B0H,MAAM,CAAChQ,GAAP,CAAW,cAAAulB,wBAAX,CAA/B;;AAEA,gBAAG,QAAI,CAAC8nE,WAAL,CAAiBhwF,KAApB,EAA0B;AACtB,sBAAI,CAAC4lG,cAAL,GAAsB;AAClB78F,uBAAO,EAAE,QAAI,CAACinF,WAAL,CAAiBhwF,KAAjB,CAAuBnH,IADd;AAElBmH,qBAAK,EAAE,QAAI,CAACgwF,WAAL,CAAiBhwF,KAAjB,CAAuB+O;AAFZ,eAAtB;;AAIA,sBAAI,CAACuiF,mBAAL,CAAyB,QAAI,CAACsU,cAA9B;;AACA3sG,wBAAU,CAAC,YAAM;AACb,wBAAI,CAAC4sG,kBAAL;AACH,eAFS,CAAV;AAGH;AAEJ,WAnBL,CAFJ,EA7EW,CAqGX;;AACA,eAAKhrG,YAAL,CACI,yCADJ,EAEI,KAAKk1F,cAAL,CACKniF,IADL,CAEQ,WAAAynD,eAAA,EAFR,EAGQ,YAAA3T,oBAAA,EAHR,EAIQ,YAAAyF,cAAA,CAAe,KAAK6oC,WAApB,CAJR,EAKQ,YAAArtF,GAAA,CACI;AAAA;AAAA,gBAAEyd,QAAF;AAAA,gBAAY4vE,WAAZ;;AAAA,mBACKA,WAAW,IAAI5vE,QAAQ,CAACzN,MAAT,CAAgBrS,IAAhB,CAAqB,UAACsS,CAAD;AAAA,qBAAOA,CAAC,CAAC7D,EAAF,KAASihF,WAAW,CAACjhF,EAA5B;AAAA,aAArB,CAAhB,IACAqR,QAAQ,CAACzN,MAAT,CAAgB,CAAhB,CAFJ;AAAA,WADJ,CALR,EAWK5X,SAXL,CAWe,UAACotB,KAAD,EAAW;AAClB,oBAAI,CAAC6nE,WAAL,CAAiB/kF,IAAjB,CAAsBkd,KAAtB;AACH,WAbL,CAFJ,EAtGW,CAwHX;;AACA,eAAKttB,YAAL,CACI,2BADJ,EAEI,OAAAg0B,QAAA,CAAS,KAAK,IAAd,EACKjhB,IADL,CACU,YAAAu5C,cAAA,CAAe,KAAK3zC,KAAL,CAAWgC,MAAX,CAAkB,cAAA6O,gBAAlB,CAAf,CADV,EAEKtpB,SAFL,CAEe,kBAAc;AAAA;AAAA,gBAAVke,IAAU;;AACrB,oBAAI,CAACzF,KAAL,CAAWolE,QAAX,CAAoB,QAAAtzD,sBAAA,CAAuBpW,OAAvB,CAA+B,cAAAgU,mBAAA,CAAoBjK,IAApB,CAA/B,CAApB;AACH,WAJL,CAFJ,EAzHW,CAkIX;;AACA,eAAKpe,YAAL,CACI,YADJ,EAEI,KAAK2Y,KAAL,CACK5F,IADL,CACU,QAAA4H,MAAA,CAAO,cAAA6O,gBAAP,CADV,EACoC,YAAAq9B,oBAAA,EADpC,EAEK3mD,SAFL,CAEe,UAACkQ,IAAD,EAAuC;AAC9C,gBAAIA,IAAJ,EAAU;AACN,sBAAI,CAACwlF,eAAL,CAAqBxlF,IAArB,CAA0BA,IAA1B;AACH;AACJ,WANL,CAFJ;;AAWA,cAAI,CAAJ,KAAI,KAAK06F,SAAL,MAAc,IAAd,IAAc,aAAd,GAAc,MAAd,GAAc,GAAEz0F,OAApB,EAA6B;AACzB,iBAAK00F,cAAL,GAAsB;AAClB78F,qBAAO,EAAE,CAAF,KAAE,KAAK48F,SAAL,MAAc,IAAd,IAAc,aAAd,GAAc,MAAd,GAAc,GAAEz0F,OAAF,CAAUrY,IADf;AAElBmH,mBAAK,EAAE,CAAF,KAAE,KAAK2lG,SAAL,MAAc,IAAd,IAAc,aAAd,GAAc,MAAd,GAAc,GAAEz0F,OAAF,CAAUnC;AAFb,aAAtB;AAIA,iBAAKuiF,mBAAL,CAAyB,KAAKsU,cAA9B;AACA3sG,sBAAU,CAAC,YAAM;AACb,sBAAI,CAAC4sG,kBAAL;AACH,aAFS,CAAV;AAGH;AACJ;;;6CAEwB;AACrB,eAAKtV,iBAAL,GAAyB,KAAKP,WAAL,CAAiBpiF,IAAjB,CAAsB,YAAAjL,GAAA,CAAI,cAAAulB,wBAAJ,CAAtB,CAAzB;AACH;;;iCAEe;AACZ,cAAI,KAAKyiE,IAAL,CAAU3qF,KAAV,GAAkB,YAAAsuF,cAAtB,EAAsC;AAClC,iBAAK3D,IAAL,CAAU1/E,IAAV,CAAe,KAAK0/E,IAAL,CAAU3qF,KAAV,GAAkB,CAAjC;AACH;AACJ;;;kCAEgB;AACb,cAAI,KAAK2qF,IAAL,CAAU3qF,KAAV,GAAkB,YAAA4qF,cAAtB,EAAsC;AAClC,iBAAKD,IAAL,CAAU1/E,IAAV,CAAe,KAAK0/E,IAAL,CAAU3qF,KAAV,GAAkB,CAAjC;AACH;AACJ;;;mDAEiC;AAC9B,eAAK06E,MAAL,CAAY5lE,IAAZ,CAAiB,qCAAAy8E,+BAAjB,EAAkD;AAC9Cl+E,gBAAI,EAAE,KAAK08E,cAAL,CAAoB/vF,KADoB;AAE9C+U,sBAAU,EAAE,WAFkC;AAG9C8xC,qBAAS,EAAE,KAHmC;AAI9CC,yBAAa,EAAE;AAJ+B,WAAlD;AAMH;;;0CAEwB;AACrB,eAAK6jC,IAAL,CAAU1/E,IAAV,CAAe,YAAA2/E,cAAf;AACA,eAAKC,MAAL,CAAY5/E,IAAZ,CAAiB,YAAA6/E,YAAjB;AACA,eAAKrM,WAAL,CAAiBxzE,IAAjB,CAAsBlM,SAAtB,EAHqB,CAIrB;AACH;;;6CAK2B8xF,S,EAA8B;AAAA;;AACtD,eAAKhB,eAAL,CACKjiF,IADL,CAEQ,YAAAjL,GAAA,CAAI,UAACu3C,GAAD;AAAA,mBAASA,GAAG,CAAC55C,IAAJ,CAAS,UAAC4E,CAAD;AAAA,qBAAOA,CAAC,CAAC6J,EAAF,KAAS8hF,SAAS,CAAC7wF,KAA1B;AAAA,aAAT,CAAT;AAAA,WAAJ,CAFR,EAGQ,YAAA2V,IAAA,CAAK,CAAL,CAHR,EAIQ,WAAA0/C,eAAA,EAJR,EAMKt6D,SANL,CAMe,UAACkQ,IAAD,EAAU;AACjB,oBAAI,CAAC8kF,cAAL,CAAoB9kF,IAApB,CAAyBA,IAAzB;AACH,WARL;AASH;;;4CAE0B4lF,S,EAA8B;AAAA;;AACrD,eAAKd,cAAL,CACKniF,IADL,CAEQ,YAAAjL,GAAA,CAAI,UAACuC,CAAD,EAAO;AAAD;;AAAA,yBAACA,CAAC,CAACyN,MAAH,MAAS,IAAT,IAAS,aAAT,GAAS,MAAT,GAAS,GAAErS,IAAF,CAAO,UAACsS,CAAD;AAAA,qBAAOA,CAAC,CAAC7D,EAAF,MAAS8hF,SAAS,SAAT,IAAAA,SAAS,WAAT,GAAS,MAAT,GAAAA,SAAS,CAAE7wF,KAApB,CAAP;AAAA,aAAP,CAAT;AAAiD,WAA3D,CAFR,EAGQ,YAAA2V,IAAA,CAAK,CAAL,CAHR,EAIQ,WAAA0/C,eAAA,EAJR,EAMKt6D,SANL,CAMe,UAACkQ,IAAD,EAAU;AAC7B,oBAAI,CAACuI,KAAL,CAAWolE,QAAX,CAAoB,QAAAtzD,sBAAA,CAAuBpW,OAAvB,CAA+B,cAAAgU,mBAAA,CAAoB,QAAI,CAACutE,eAAL,CAAqBzwF,KAAzC,CAA/B,CAApB;;AACY,oBAAI,CAACgwF,WAAL,CAAiB/kF,IAAjB,CAAsBA,IAAtB;AAEA;;;;;AAGA,oBAAI,CAACszE,MAAL,GAAc,QAAI,CAACyR,WAAL,CAAiBpiF,IAAjB,CAAsB,YAAAjL,GAAA,CAAI,UAACwlB,KAAD,EAAW;AAAD;;AAAA,2BAACA,KAAK,SAAL,IAAAA,KAAK,WAAL,GAAK,MAAL,GAAAA,KAAK,CAAEqf,OAAR,MAAe,IAAf,IAAe,aAAf,GAAe,EAAf,GAAmB,EAAnB;AAAqB,aAAnC,CAAtB,CAAd;AACH,WAdL;AAeH;;;0CAEwBqpD,S,EAA8B;AAAA;;AACnD,eAAKf,YAAL,CACKliF,IADL,CAEQ,YAAAjL,GAAA,CAAI,UAACu3C,GAAD;AAAA,mBAASA,GAAG,CAAC55C,IAAJ,CAAS,UAAC+R,CAAD;AAAA,qBAAOA,CAAC,CAACtD,EAAF,MAAS8hF,SAAS,SAAT,IAAAA,SAAS,WAAT,GAAS,MAAT,GAAAA,SAAS,CAAE7wF,KAApB,CAAP;AAAA,aAAT,CAAT;AAAA,WAAJ,CAFR,EAGQ,YAAA2V,IAAA,CAAK,CAAL,CAHR,EAIQ,WAAA0/C,eAAA,EAJR,EAMKt6D,SANL,CAMe,UAACkQ,IAAD,EAAU;AACjB,oBAAI,CAACglF,WAAL,CAAiBhlF,IAAjB,CAAsBA,IAAtB;AACH,WARL;AASH;;;oCAEkBsW,M,EAAgB;AAAA;;AAC/B,eAAK0uE,WAAL,CAAiBriF,IAAjB,CAAsB,YAAA+H,IAAA,CAAK,CAAL,CAAtB,EAA+B,WAAA0/C,eAAA,EAA/B,EAAyDt6D,SAAzD,CAAmE,UAACkQ,IAAD,EAAU;AACzE,gBAAIlS,KAAK,GAAG,CAAZ;;AACA,gBAAIkS,IAAI,CAACkd,KAAL,CAAWpZ,EAAX,KAAkB,QAAI,CAACihF,WAAL,CAAiBhwF,KAAjB,CAAuB+O,EAA7C,EAAiD;AAC7C,sBAAI,CAACihF,WAAL,CAAiB/kF,IAAjB,CAAsBA,IAAI,CAACkd,KAA3B;;AACApvB,mBAAK,GAAG,GAAR;AACH;;AACD,oBAAI,CAAC0C,OAAL,CACI,oBADJ,EAEI,YAAM;AACF,kBAAMgjF,WAAW,GAAG,cAAA1yD,sBAAA,CAChB,CAAC,QAAI,CAACkkE,WAAL,CAAiBjwF,KAAlB,CADgB,EAEhB,CAAC,QAAI,CAACgwF,WAAL,CAAiBhwF,KAAlB,CAFgB,EAGhB,CAAC,QAAI,CAAC+vF,cAAL,CAAoB/vF,KAArB,CAHgB,CAApB;;AAKA,sBAAI,CAACy+E,WAAL,CAAiBxzE,IAAjB,CAAsBwzE,WAAW,CAAC,CAAD,CAAjC;;AACA,sBAAI,CAACmR,eAAL,CAAqB3kF,IAArB,CAA0B,YAAAqkF,gBAAA,CAAiB,QAAI,CAAC7Q,WAAL,CAAiBz+E,KAAlC,EAAyC,QAAzC,EAA+CuhB,MAA/C,CAA1B;;AACA,sBAAI,CAACopE,IAAL,CAAU1/E,IAAV,CAAe,YAAAqjF,cAAf;AACH,aAXL,EAYIv1F,KAZJ;AAcH,WApBD;AAqBH;;;qCAEmB+2B,I,EAA4B;AAAA,cAGpClO,YAHoC,GAGnB,KAAK6uE,eAAL,CAAqBzwF,KAHF,CAGpC4hB,YAHoC;AAI5C,eAAK6uE,eAAL,CAAqBzwF,KAArB,CAA2B8jB,qBAA3B,GAAmD,EAAnD;;AACA,cAAGlC,YAAH,EAAgB;AACZ;AACA,gBAAM+7E,cAAc,GAAG7tE,IAAI,CAAC7P,KAAL,CAAWmvB,uBAAX,CAAmC1rC,MAAnC,CAA0C,UAAAqmC,MAAM;AAAA,qBAAI,CAACA,MAAM,CAAC9e,SAAZ;AAAA,aAAhD,CAAvB;AACA,iBAAKwlE,eAAL,CAAqBzwF,KAArB,CAA2B8jB,qBAA3B,GAAmD65E,cAAc,CAACh7F,GAAf,CAAmB,UAAConC,MAAD;AAAA,qBAAWA,MAAM,CAACjtC,IAAlB;AAAA,aAAnB,CAAnD;AACH,WAT2C,CAY5C;;;AAZ4C,cAatCW,MAbsC,GAa3B,KAAKgzF,eAAL,CAAqBzwF,KAbM,CAatCvC,MAbsC,EAc5C;;AACIA,gBAAM,GAAGA,MAAM,CAACE,QAAP,CAAgB;AAAEJ,mBAAO,EAAE;AAAX,WAAhB,CAAT,CAfwC,CAgB5C;;AAEC;;;;;AAKD;;AACA,eAAKq0E,MAAL,CAAYl/B,QAAZ,CAAqB,CAAC,MAAD,CAArB,EAAgC;AAAE2tC,sBAAU,EAAE,KAAK1pE,KAAnB;AAA0B9e,iBAAK,EAAC;AAACqZ,qBAAO,kCAC7D,KAAKu/E,eAAL,CAAqBzwF,KADwC,GACnC;AAC7B;AACAvC,sBAAM,EAANA,MAF6B;AAG7B+C,sBAAM,EAAE,CAHqB;AAI7By4E,4BAAY,EAAEnpD;AAJe,eADmC;AAAR;AAAhC,WAAhC,EAxB4C,CAkC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACH;;;;MAhXmC,OAAAv2B,a;;AArExC;;;uBAqEamsG,kB,EAAkB,8B,EAAA,kC,EAAA,wC,EAAA,+B,EAAA,iC,EAAA,uC;AAAA,K;;;YAAlBA,kB;AAAkB,qC;AAAA;AAAA;AAAA,O;AAAA;AAAA;AAAA,O;AAAA,+C;AAAA,e;AAAA,c;AAAA,ypB;AAAA;AAAA;AAlEvB;AACI;AACI;AACI;AAAA,mBAA0B,IAAA1U,oBAAA,QAA1B;AAAsD,WAAtD,EAAuD,qBAAvD,EAAuD;AAAA,mBAChC,IAAAM,mBAAA,QADgC;AACL,WADlD,EAAuD,qBAAvD,EAAuD;AAAA,mBAEhC,IAAAwU,iBAAA,QAFgC;AAEP,WAFhD,EAAuD,aAAvD,EAAuD;AAAA,mBASxC,IAAA1U,WAAA,EATwC;AAS3B,WAT5B;;;;;;;AAWJ;AACJ;AACA;AACI;AAGI;AAEI;AAAA,mBAAS,IAAA2U,wBAAA,EAAT;AAAmC,WAAnC;AAFJ;AAKA;AACA;AAAA,mBAAe,IAAAC,eAAA,EAAf;AAAgC,WAAhC,EAAiC,aAAjC,EAAiC;AAAA,mBACd,IAAAC,MAAA,EADc;AACN,WAD3B,EAAiC,cAAjC,EAAiC;AAAA,mBAEb,IAAAC,OAAA,EAFa;AAEJ,WAF7B,EAAiC,cAAjC,EAAiC;AAAA,mBAGb,IAAAC,eAAA,EAHa;AAGI,WAHrC;AAIC;AACD;AAEI;AAAA,mBAAc,IAAAxb,IAAA,aAAd;AAA+B,WAA/B,EAAgC,cAAhC,EAAgC;AAAA,mBAEhB,IAAAE,MAAA,aAFgB;AAEG,WAFnC;;;;;;;;AASJ;AACR;AACJ;;;;;;AAtCY;AAAA,6FAAiD,eAAjD,EAAiD,4CAAjD,EAAiD,eAAjD,EAAiD,4CAAjD,EAAiD,WAAjD,EAAiD,2CAAjD,EAAiD,QAAjD,EAAiD,+CAAjD,EAAiD,QAAjD,EAAiD,2CAAjD;AAUiB;AAAA;AAAoC;AAChB;AAAA;AAejC;AAAA,kEAAqB,QAArB,EAAqB,kCAArB,EAAqB,KAArB,EAAqB,kCAArB,EAAqB,KAArB,EAAqB,qCAArB,EAAqB,WAArB,EAAqB,qCAArB,EAAqB,UAArB,EAAqB,oCAArB,EAAqB,OAArB,EAAqB,UAArB;;;;;;;mBAgBR,CACR,aAAAvzF,OAAA,CAAQ,cAAR,EAAwB,CACpB,aAAAO,KAAA,CACI,MADJ,EAEI,aAAAL,KAAA,CAAM;AACFE,gBAAM,EAAE;AADN,SAAN,CAFJ,CADoB,EAOpB,aAAAG,KAAA,CACI,QADJ,EAEI,aAAAL,KAAA,CAAM;AACFE,gBAAM,EAAE;AADN,SAAN,CAFJ,CAPoB,EAapB,aAAAH,UAAA,CAAW,iBAAX,EAA8B,aAAAI,OAAA,CAAQ,gBAAR,CAA9B,CAboB,CAAxB,CADQ;;;;;;2BAkBH+tG,kB,EAAkB;cArE9B,OAAA9kD,SAqE8B;eArEpB;AACPlnD,kBAAQ,EAAE,gBADH;AAEPw0D,kBAAQ,i2EAFD;AAiDPpN,mBAAS,EAAE,CAAC,6BAAD,CAjDJ;AAkDPga,uBAAa,EAAE,OAAAC,iBAAA,CAAkBszB,QAlD1B;AAmDP7lC,oBAAU,EAAE,CACR,aAAAlxD,OAAA,CAAQ,cAAR,EAAwB,CACpB,aAAAO,KAAA,CACI,MADJ,EAEI,aAAAL,KAAA,CAAM;AACFE,kBAAM,EAAE;AADN,WAAN,CAFJ,CADoB,EAOpB,aAAAG,KAAA,CACI,QADJ,EAEI,aAAAL,KAAA,CAAM;AACFE,kBAAM,EAAE;AADN,WAAN,CAFJ,CAPoB,EAapB,aAAAH,UAAA,CAAW,iBAAX,EAA8B,aAAAI,OAAA,CAAQ,gBAAR,CAA9B,CAboB,CAAxB,CADQ;AAnDL,S;AAqEoB,Q;;;;;;;;;;;;;;;;gBAC1B,OAAAyE;;;gBA2CA,OAAA2kD;;;;;;;;;;;;;;;;;;;;;;;;ACjLL;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;AAEa,YAAAyuC,gBAAA,GAAmB,CAC5B,SAAAz3F,YAD4B,EAE5B,SAAAm3D,eAF4B,EAG5B,sBAAAugC,aAH4B,EAI5B,SAAA//B,eAJ4B,EAK5B,KAAAzK,QAL4B,EAM5B,SAAAmK,eAN4B,EAO5B,sBAAA8c,uBAP4B,CAAnB;AAUA,YAAAwjB,qBAAA,GAAwB,CACjC,uBAAAgW,kBADiC,EAEjC,yBAAArE,oBAFiC,EAGjC,wBAAA2D,mBAHiC,EAIjC,qCAAAzT,+BAJiC,EAKjC,wBAAAgU,mBALiC,CAAxB;;QAmBAx1B,S;;;;AAXb;;YAWaA;;;;yBAAAA,S;AAAS,O;AAAA,mCAHX,QAAAyf,gBAGW;;;;+EAATzf,S,EAAS;AAAA,uBAlBlB,uBAAA21B,kBAkBkB,EAjBlB,yBAAArE,oBAiBkB,EAhBlB,wBAAA2D,mBAgBkB,EAflB,qCAAAzT,+BAekB,EAdlB,wBAAAgU,mBAckB;AAdC,kBAdnB,SAAAxtG,YAcmB,EAbnB,SAAAm3D,eAamB,EAZnB,sBAAAugC,aAYmB,EAXnB,SAAA//B,eAWmB,EAVnB,KAAAzK,QAUmB,EATnB,SAAAmK,eASmB,EARnB,sBAAA8c,uBAQmB,CAcD;AAtBK,kBAIvB,uBAAAw5B,kBAJuB,EAKvB,yBAAArE,oBALuB,EAMvB,wBAAA2D,mBANuB,EAOvB,qCAAAzT,+BAPuB,EAQvB,wBAAAgU,mBARuB;AAsBL,O;AAdC,K;;;;;2BAcVx1B,S,EAAS;cAXrB,OAAA/3E,QAWqB;eAXZ;AACN6B,sBAAY,qBACL,QAAA61F,qBADK,CADN;AAIN51F,iBAAO,qBACA,QAAA41F,qBADA,CAJD;AAONz3F,iBAAO,qBACA,QAAAu3F,gBADA;AAPD,S;AAWY,Q;;;;;;;;;;;;;;;;;;;;;;AC/BtB;AAAA;AAAA;;AAEa,YAAA5E,cAAA,GAAiB,CAAjB;AACA,YAAA0D,cAAA,GAAiB,EAAjB;AACA,YAAAxD,YAAA,GAAsB;AAAExwF,OAAC,EAAE,GAAL;AAAUC,OAAC,EAAE;AAAb,KAAtB;;AAEb,QAAMg0F,uBAAuB,GAAG,SAA1BA,uBAA0B,CAAChtE,MAAD,EAAiC;AAC7D,cAAQA,MAAR;AACI,aAAK;AAAL;AAAA;AACI,iBAAO,cAAP;;AACJ,aAAK;AAAL;AAAA;AACI,iBAAO,sBAAP;;AACJ,aAAK;AAAL;AAAA;AACI,iBAAO,QAAP;;AACJ,aAAK;AAAL;AAAA;AACA;AACI,iBAAO,WAAP;AATR;AAWH,KAZD;;AAcA,QAAMitE,sBAAsB,GAAG,SAAzBA,sBAAyB,CAACjtE,MAAD;AAAA,aAA0B;AACrDvhB,aAAK,EAAEuhB,MAD8C;AAErDxY,eAAO,EAAEwlF,uBAAuB,CAAChtE,MAAD;AAFqB,OAA1B;AAAA,KAA/B;;AAKa,YAAAktE,aAAA,GAAgB;AAAA,aAA2B,C;;AAAA,Q;;AAAA,Q;;AAAA,Q;;AAAA,QAKtD9rF,GALsD,CAKlD6rF,sBALkD,CAA3B;AAAA,KAAhB;;AAQA,YAAAE,sBAAA,GAAyB,CAClC,2DADkC,EAElC,wDAFkC,EAGlC,8BAHkC,EAIlC,uEAJkC,CAAzB;AAOA,YAAAC,yBAAA,GAA4B,gFAA5B;;AAEA,YAAAC,wBAAA,GAA2B,UACpC3uE,KADoC,EAEpCsB,MAFoC,EAGpCstE,cAHoC,EAGR;AAC5B,UAAM9/E,EAAE,GACJ,UAAGkR,KAAK,CAACskB,MAAT,EAAkBrkC,OAAlB,CAA0B,MAA1B,IAAoC,CAApC,kBACc+f,KAAK,CAACskB,MADpB,eAEMtkB,KAAK,CAACskB,MAHhB;AAIA,aACI;AACIx1B,UAAE,EAAFA,EADJ;AAEI+/E,cAAM,EAAE;AACJp7C,cAAI,EAAEm7C,cAAc,iBAAUttE,MAAV,EAAd,IAAqC,MADvC;AAEJ9pB,iBAAO,EAAE;AAFL;AAFZ,OADJ;AAQH,KAhBY;AAkBb;;;;;;;;;AAOa,YAAAs3F,4BAAA,GAA+B,UACxC9uE,KADwC,EAExC+uE,UAFwC,EAGxCC,UAHwC,EAIxCC,UAJwC,EAKxB;AAChB,UAAMngF,EAAE,GACJ,UAAGkR,KAAK,CAACskB,MAAT,EAAkBrkC,OAAlB,CAA0B,MAA1B,IAAoC,CAApC,kBACc+f,KAAK,CAACskB,MADpB,eAEMtkB,KAAK,CAACskB,MAHhB;AAIA,UAAM4qD,SAAS,GAAkB,EAAjC;AACAA,eAAS,CAACxqF,IAAV,CAAe;AACXoK,UAAE,EAAFA,EADW;AAEXvE,aAAK,EAAE,YAFI;AAGXq1D,gBAAQ,EAAEmvB;AAHC,OAAf;AAKAG,eAAS,CAACxqF,IAAV,CAAe;AACXoK,UAAE,EAAFA,EADW;AAEXvE,aAAK,EAAE,YAFI;AAGXq1D,gBAAQ,EAAEovB;AAHC,OAAf;;AAKA,UAAIhvE,KAAK,CAACgB,QAAV,EAAoB;AAChBkuE,iBAAS,CAACxqF,IAAV,CAAe;AACXoK,YAAE,EAAFA,EADW;AAEXvE,eAAK,EAAE,OAFI;AAGXq1D,kBAAQ,EAAEqvB;AAHC,SAAf;AAKAC,iBAAS,CAACxqF,IAAV,CAAe;AACXoK,YAAE,EAAFA,EADW;AAEXvE,eAAK,EAAE,UAFI;AAGXq1D,kBAAQ,EAAEqvB;AAHC,SAAf;AAKH;;AACD,aAAOC,SAAP;AACH,KAlCY;;AAqCA,YAAAC,iBAAA,GAAoB,UAACnvE,KAAD;AAAA,aAA+B;AAC5DlR,UAAE,iBAAUkR,KAAK,CAACskB,MAAhB,YAD0D;AAE5D8qD,mBAAW,EAAE,IAF+C;AAG5Dz6E,eAAO,EAAE,wBAAA2wF,mBAHmD;AAI5DlyF,YAAI,EAAE,MAAF,OAAE,CAAF,EAAE,EACC4M,KADD;AAJsD,OAA/B;AAAA,KAApB;;AASA,YAAAqvE,gBAAA,GAAmB,UAACx/D,IAAD,EAA6Bi8D,eAA7B,EAAoDxqE,MAApD;AAAA,aAAqF;AACjHxS,UAAE,iBAAU+gB,IAAI,CAAC7P,KAAL,CAAWskB,MAArB,YAD+G;AAEjH8qD,mBAAW,EAAE,IAFoG;AAGjHz6E,eAAO,EAAE,wBAAA2wF,mBAHwG;AAIjHlyF,YAAI,EAAE,MAAF,OAAE,CAAF,kBACGyc,IAAI,CAAC7P,KADR,CAAE,EACW;AACb8rE,yBAAe,EAAfA,eADa;AAEbj8D,cAAI,EAAJA,IAFa;AAGbvO,gBAAM,EAACA;AAHM,SADX;AAJ2G,OAArF;AAAA,KAAnB;;;;;;;;;;;;;;;;;;;;;AC7Hb;AAAA;AAAA;;AAMA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AAIA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;AAeoB;;;;;;AAE+B;;;;;;AAMvB;;;;;;AAEqC;;;;;;AAL7C;AACI;AAAgC;AAAe;AAC/C;AACI;AAGJ;AACJ;;;;;AANoC;AAAA;AAIxB;AAAA;;;;;;AAMZ;;;;;AAEmC;;;;;;AAGnC;AACI;AAAqB;AAA8C;AAAW;AAClF;;;;;AAD0C;AAAA;AAA6B;AAAA;;;;;;AAEvE;;;;;AAAsB;;;;QAW7BgwE,+B;AACT,+CAA4CnxE,QAA5C,EACoByiB,SADpB,EAC8E;AAAA;;AADlC,aAAAziB,QAAA,GAAAA,QAAA;AACxB,aAAAyiB,SAAA,GAAAA,SAAA;AACnB;AAGD;;;;;qCAmDoB;AAChB,eAAKA,SAAL,CAAeC,KAAf;AACH;;;oCAEkBsjE,I,EAAc;AAC7B,cAAMthG,KAAK,GAAG,OAAd;AACA,iBAAOshG,IAAI,CAACrgG,OAAL,CAAajB,KAAb,EAAoB,qBAApB,CAAP;AACH;;;4BAzDe;AACZ,cAAMsb,QAAQ,GAAa,KAAKA,QAAhC;AACA,cAAMuO,OAAO,GAAuBvO,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAEwmB,eAA9C;AACA,iBAAO,CAAAjY,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAErO,KAAT,KAAkB,EAAzB;AACH;AAED;;;;4BACe;AACX,cAAMF,QAAQ,GAAa,KAAKA,QAAhC;AACA,cAAMuO,OAAO,GAAuBvO,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAEwmB,eAA9C;AACA,iBAAO,CAAAjY,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAEy3E,IAAT,KAAiB,YAAAzX,yBAAxB;AACH;;;4BAEoB;AACjB,cAAMvuE,QAAQ,GAAa,KAAKA,QAAhC;AACA,cAAMuO,OAAO,GAAuBvO,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAEwmB,eAA9C;AACA,iBAAOjY,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAE03E,WAAhB;AACH;AAED;;;;4BACoB;AAChB,cAAMjmF,QAAQ,GAAa,KAAKA,QAAhC;AACA,cAAMuO,OAAO,GAAuBvO,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAEwmB,eAA9C;AACA,iBAAO,CAAAjY,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAE23E,SAAT,KAAuB,YAAA5X,sBAA9B;AACH;AAED;;;;4BACsB;;;AAClB,cAAMtuE,QAAQ,GAAa,KAAKA,QAAhC;AACA,cAAMuO,OAAO,GAAuBvO,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAEwmB,eAA9C;AACA,cAAMtmB,KAAK,GAAY,CAAC,CAAD,KAACqO,OAAA,MAAe,IAAf,IAAe,aAAf,GAAe,MAAf,GAAe,GAAE43E,WAAlB,KAAiC,EAAxD;AACA,iBAAOz8F,MAAM,CAACpH,IAAP,CAAY4d,KAAZ,EAAmB7f,MAAnB,CAA0B,UAACwE,CAAD,EAAIuE,CAAJ,EAAU;AAEvCvE,aAAC,CAACN,IAAF,CAAO;AAAEilB,mBAAK,EAAEpgB,CAAT;AAAY8W,mBAAK,EAAEA,KAAK,CAAC9W,CAAD,CAAL,IAAY;AAA/B,aAAP;AACA,mBAAOvE,CAAP;AACH,WAJM,EAIJ,EAJI,CAAP;AAKH;;;4BAEiB;AACd,cAAMmb,QAAQ,GAAa,KAAKA,QAAhC;AACA,cAAMuO,OAAO,GAAuBvO,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAEwmB,eAA9C;AACA,iBAAO,CAAAjY,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAE63E,OAAT,KAAoB,EAA3B;AACH;;;4BAEc;AACX,cAAMpmF,QAAQ,GAAa,KAAKA,QAAhC;AACA,cAAMuO,OAAO,GAAuBvO,QAAQ,SAAR,IAAAA,QAAQ,WAAR,GAAQ,MAAR,GAAAA,QAAQ,CAAEwmB,eAA9C;AACA,iBAAO,CAAAjY,OAAO,SAAP,IAAAA,OAAO,WAAP,GAAO,MAAP,GAAAA,OAAO,CAAE83E,IAAT,KAAiB,EAAxB;AACH;;;;;;AApGL;;;uBA6CalV,+B,EAA+B,qBACpB,SAAA5wC,eADoB,C,EACL,qC;AAAA,K;;;YAD1B4wC,+B;AAA+B,mD;AAAA,e;AAAA,a;AAAA,4d;AAAA;AAAA;AA1CpC;AACI;AACI;AAAoB;AAA6B;AACjD;AAAkB;AAAqB;AAC3C;AACA;AACI;AACI;AAGJ;AACA;AACI;AAQJ;AACA;AAAgC;AAAuB;AACvD;AACI;AAGJ;AACA;AACI;AAGA;AACJ;AACJ;AACA;AACI;AAAwC;AAAA,mBAAiB,IAAA3P,UAAA,EAAjB;AAA6B,WAA7B;AAA+B;AAC3E;AACJ;;;;AAnC4B;AAAA;AACF;AAAA;AAMV;AAAA;AAGC;AAAA;AAaD;AAAA;AAGD;AAAA;AAGA;AAAA;;;;;;;;;;2BAWV2P,+B,EAA+B;cA7C3C,OAAA3wC,SA6C2C;eA7CjC;AACPlnD,kBAAQ,EAAE,8BADH;AAEPw0D,kBAAQ,i7DAFD;AA0CPpN,mBAAS,EAAE,CAAC,2CAAD,CA1CJ;AA2CPga,uBAAa,EAAE,OAAAC,iBAAA,CAAkB34C;AA3C1B,S;AA6CiC,Q;;;;kBAC3B,OAAAqrB,M;mBAAO,SAAAkT,e;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjExB;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAIA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;AAEA,QAAM+lD,UAAU,GAAgB,CAC5B,OAAAntG,aAD4B,EAE5B,kBAAA8qG,cAF4B,EAG5B,0BAAAjB,qBAH4B,EAI5B,qCAAAnB,+BAJ4B,EAK5B,yBAAAL,oBAL4B,EAM5B,wBAAAT,mBAN4B,EAO5B,yBAAAE,oBAP4B,CAAhC;AAUA,QAAMpyC,gBAAgB,GAAU,CAC5B,SAAAC,eAD4B,EAE5B,YAAAC,iBAF4B,EAG5B,SAAAC,eAH4B,EAI5B,aAAAC,kBAJ4B,EAK5B,QAAAC,cAL4B,EAM5B,mBAAAC,wBAN4B,EAO5B,eAAAC,oBAP4B,EAQ5B,eAAAC,qBAR4B,EAS5B,SAAAC,eAT4B,EAU5B,QAAAC,cAV4B,EAW5B,OAAAC,eAX4B,EAY5B,OAAAC,aAZ4B,EAa5B,WAAAC,iBAb4B,EAc5B,UAAAC,gBAd4B,EAe5B,QAAAC,cAf4B,EAgB5B,OAAAC,aAhB4B,EAiB5B,eAAAC,oBAjB4B,CAAhC;AAoBA,QAAMy2C,WAAW,GAAU,CACvB,YAAAC,eADuB,EAEvB,YAAAC,cAFuB,EAGvB,QAAAC,cAHuB,CAA3B;;QAsCap3B,mB;;;;AA/Bb;;YA+BaA;;;;yBAAAA,mB;AAAmB,O;AAAA,iBA1BxB,SAAA33E,YA0BwB,EAzBxB,QAAAgtD,WAyBwB,EAxBxB,QAAAC,mBAwBwB,EAvBxB,YAAA+hD,YAuBwB,EAtBxB,sBAAAC,qBAsBwB,EArBxB,oBAAAC,mBAqBwB,EApBxB,SAAAp5B,YAoBwB,EAnBxB,kBAAA3oB,YAmBwB,EAlBxB,WAAAuqB,cAkBwB,EAjBxB,YAAA3qB,cAiBwB,EAhBxB,kBAAAD,oBAgBwB,EAfxB,8BAAAqiD,iBAewB,SAdrBj4C,gBAcqB,EAbrB03C,WAaqB,GAVxB,YAAAI,YAUwB,EATxB,sBAAAC,qBASwB,EARxB,oBAAAC,mBAQwB,EAPxB,YAAAniD,cAOwB,EANxB,kBAAAD,oBAMwB,EAzD5B,SAAAqK,eAyD4B,EAxD5B,YAAAC,iBAwD4B,EAvD5B,SAAAC,eAuD4B,EAtD5B,aAAAC,kBAsD4B,EArD5B,QAAAC,cAqD4B,EApD5B,mBAAAC,wBAoD4B,EAnD5B,eAAAC,oBAmD4B,EAlD5B,eAAAC,qBAkD4B,EAjD5B,SAAAC,eAiD4B,EAhD5B,QAAAC,cAgD4B,EA/C5B,OAAAC,eA+C4B,EA9C5B,OAAAC,aA8C4B,EA7C5B,WAAAC,iBA6C4B,EA5C5B,UAAAC,gBA4C4B,EA3C5B,QAAAC,cA2C4B,EA1C5B,OAAAC,aA0C4B,EAzC5B,eAAAC,oBAyC4B,EArC5B,YAAA02C,eAqC4B,EApC5B,YAAAC,cAoC4B,EAnC5B,QAAAC,cAmC4B;;;;+EAAnBp3B,mB,EAAmB;AAAA,uBAnE5B,OAAAn2E,aAmE4B,EAlE5B,kBAAA8qG,cAkE4B,EAjE5B,0BAAAjB,qBAiE4B,EAhE5B,qCAAAnB,+BAgE4B,EA/D5B,yBAAAL,oBA+D4B,EA9D5B,wBAAAT,mBA8D4B,EA7D5B,yBAAAE,oBA6D4B;AA7DR,kBAmChB,SAAAtpG,YAnCgB,EAoChB,QAAAgtD,WApCgB,EAqChB,QAAAC,mBArCgB,EAsChB,YAAA+hD,YAtCgB,EAuChB,sBAAAC,qBAvCgB,EAwChB,oBAAAC,mBAxCgB,EAyChB,SAAAp5B,YAzCgB,EA0ChB,kBAAA3oB,YA1CgB,EA2ChB,WAAAuqB,cA3CgB,EA4ChB,YAAA3qB,cA5CgB,EA6ChB,kBAAAD,oBA7CgB,EA8ChB,8BAAAqiD,iBA9CgB,EAIpB,SAAAh4C,eAJoB,EAKpB,YAAAC,iBALoB,EAMpB,SAAAC,eANoB,EAOpB,aAAAC,kBAPoB,EAQpB,QAAAC,cARoB,EASpB,mBAAAC,wBAToB,EAUpB,eAAAC,oBAVoB,EAWpB,eAAAC,qBAXoB,EAYpB,SAAAC,eAZoB,EAapB,QAAAC,cAboB,EAcpB,OAAAC,eAdoB,EAepB,OAAAC,aAfoB,EAgBpB,WAAAC,iBAhBoB,EAiBpB,UAAAC,gBAjBoB,EAkBpB,QAAAC,cAlBoB,EAmBpB,OAAAC,aAnBoB,EAoBpB,eAAAC,oBApBoB,EAwBpB,YAAA02C,eAxBoB,EAyBpB,YAAAC,cAzBoB,EA0BpB,QAAAC,cA1BoB,CA6DQ;AAnCd,kBAyBV,YAAAC,YAzBU,EA0BV,sBAAAC,qBA1BU,EA2BV,oBAAAC,mBA3BU,EA4BV,YAAAniD,cA5BU,EA6BV,kBAAAD,oBA7BU,EAhCd,OAAAtrD,aAgCc,EA/Bd,kBAAA8qG,cA+Bc,EA9Bd,0BAAAjB,qBA8Bc,EA7Bd,qCAAAnB,+BA6Bc,EA5Bd,yBAAAL,oBA4Bc,EA3Bd,wBAAAT,mBA2Bc,EA1Bd,yBAAAE,oBA0Bc,EAtBd,SAAAnyC,eAsBc,EArBd,YAAAC,iBAqBc,EApBd,SAAAC,eAoBc,EAnBd,aAAAC,kBAmBc,EAlBd,QAAAC,cAkBc,EAjBd,mBAAAC,wBAiBc,EAhBd,eAAAC,oBAgBc,EAfd,eAAAC,qBAec,EAdd,SAAAC,eAcc,EAbd,QAAAC,cAac,EAZd,OAAAC,eAYc,EAXd,OAAAC,aAWc,EAVd,WAAAC,iBAUc,EATd,UAAAC,gBASc,EARd,QAAAC,cAQc,EAPd,OAAAC,aAOc,EANd,eAAAC,oBAMc,EAFd,YAAA02C,eAEc,EADd,YAAAC,cACc,EAAd,QAAAC,cAAc;AAmCc,O;AAnCd,K;;;;;2BAmCLp3B,mB,EAAmB;cA/B/B,OAAA13E,QA+B+B;eA/BtB;AACN6B,sBAAY,YACL6sG,UADK,CADN;AAINzuG,iBAAO,GACH,SAAAF,YADG,EAEH,QAAAgtD,WAFG,EAGH,QAAAC,mBAHG,EAIH,YAAA+hD,YAJG,EAKH,sBAAAC,qBALG,EAMH,oBAAAC,mBANG,EAOH,SAAAp5B,YAPG,EAQH,kBAAA3oB,YARG,EASH,WAAAuqB,cATG,EAUH,YAAA3qB,cAVG,EAWH,kBAAAD,oBAXG,EAYH,8BAAAqiD,iBAZG,SAaAj4C,gBAbA,EAcA03C,WAdA,CAJD;AAoBN7sG,iBAAO,GACH,YAAAitG,YADG,EAEH,sBAAAC,qBAFG,EAGH,oBAAAC,mBAHG,EAIH,YAAAniD,cAJG,EAKH,kBAAAD,oBALG,SAMA6hD,UANA,EAOAz3C,gBAPA,EAQA03C,WARA;AApBD,S;AA+BsB,Q;;;;;;;;;;;;;;;;;;;;;;ACxHhC;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAOA;AAAA;AAAA;;AAwBA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;;AAKA;AAAA;AAAA;;AAQA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnDI;AACI;AACJ;;;;;;AACA;AACI;AACJ;;;;;;AACA;AACI;AACI;AACI;AACJ;AACA;AAAkB;AAAmB;AACzC;AACJ;;;;QD+CSp5B,qB;;;;;AAYT,qCACYv0D,QADZ,EAEYmuF,OAFZ,EAGYl7E,IAHZ,EAIYm7E,cAJZ,EAKYl7E,OALZ,EAMY0lD,MANZ,EAOYp+D,KAPZ,EAOwC;AAAA;;AAAA;;AAEpC;AARQ,iBAAAwF,QAAA,GAAAA,QAAA;AACA,iBAAAmuF,OAAA,GAAAA,OAAA;AACA,iBAAAl7E,IAAA,GAAAA,IAAA;AACA,iBAAAm7E,cAAA,GAAAA,cAAA;AACA,iBAAAl7E,OAAA,GAAAA,OAAA;AACA,iBAAA0lD,MAAA,GAAAA,MAAA;AACA,iBAAAp+D,KAAA,GAAAA,KAAA;AAbJ,iBAAA6zF,WAAA,GAAc,IAAI,OAAA9uG,eAAJ,CAA6B,IAA7B,CAAd;AACD,iBAAA+uG,QAAA,GAAW,IAAI,OAAA/uG,eAAJ,CAA6B,IAA7B,CAAX;AACA,iBAAAgvG,eAAA,GAAkB,IAAI,OAAAhvG,eAAJ,CAAyC,EAAzC,CAAlB,CAWiC,CAIpC;;AACA,YAAIw6B,MAAM,GAAG,IAAb;;AACA,YAAI,SAAKq0E,cAAL,CAAoB1d,QAApB,CAA6BtS,aAA7B,CAA2C5kE,GAA3C,CAA+C,IAA/C,CAAJ,EAA0D;AACtDugB,gBAAM,GAAG,SAAKq0E,cAAL,CAAoB1d,QAApB,CAA6BtS,aAA7B,CAA2C5kE,GAA3C,CAA+C,IAA/C,CAAT;AACH,SAFD,MAEO,IAAIuE,YAAY,CAACywF,cAAb,IAA+BzwF,YAAY,CAACywF,cAAb,CAA4B5wF,QAA5B,CAAqC,MAArC,CAAnC,EAAiF;AACpFmc,gBAAM,GAAGhc,YAAY,CAACywF,cAAb,CAA4B1oG,KAA5B,CAAkC,GAAlC,EAAuC,CAAvC,CAAT;AACH,SAVmC,CAWpC;AAEA;;;AACA,YAAIia,OAAO,GAAG,IAAd;;AACA,YAAI,SAAKquF,cAAL,CAAoB1d,QAApB,CAA6BtS,aAA7B,CAA2C5kE,GAA3C,CAA+C,SAA/C,CAAJ,EAA+D;AAC3DuG,iBAAO,GAAG,SAAKquF,cAAL,CAAoB1d,QAApB,CAA6BtS,aAA7B,CAA2C5kE,GAA3C,CAA+C,SAA/C,CAAV;AACH,SAFD,MAEO,IACHuE,YAAY,CAACywF,cAAb,IACAzwF,YAAY,CAACywF,cAAb,CAA4B5wF,QAA5B,CAAqC,WAArC,CAFG,EAGL;AACEmC,iBAAO,GAAGhC,YAAY,CAACywF,cAAb,CAA4B1oG,KAA5B,CAAkC,GAAlC,EAAuC,CAAvC,CAAV;;AACA,cAAIia,OAAO,CAACnC,QAAR,CAAiB,GAAjB,CAAJ,EAA2B;AACvBmC,mBAAO,GAAGA,OAAO,CAACja,KAAR,CAAc,GAAd,EAAmB,CAAnB,CAAV;AACH;AACJ;;AAED,iBAAKia,OAAL,GAAeA,OAAf,CA3BoC,CA6BpC;;AACA,YAAI/a,KAAK,GAAG,IAAZ;;AACA,YAAI,SAAKopG,cAAL,CAAoB1d,QAApB,CAA6BtS,aAA7B,CAA2C5kE,GAA3C,CAA+C,OAA/C,CAAJ,EAA6D;AACzDxU,eAAK,GAAG,SAAKopG,cAAL,CAAoB1d,QAApB,CAA6BtS,aAA7B,CAA2C5kE,GAA3C,CAA+C,OAA/C,CAAR;AACH,SAFD,MAEO,IAAIuE,YAAY,CAACywF,cAAb,IAA+BzwF,YAAY,CAACywF,cAAb,CAA4B5wF,QAA5B,CAAqC,SAArC,CAAnC,EAAoF;AACvF5Y,eAAK,GAAG+Y,YAAY,CAACywF,cAAb,CAA4B1oG,KAA5B,CAAkC,SAAlC,EAA6C,CAA7C,CAAR;AACH;;AACD,iBAAKd,KAAL,GAAaA,KAAb;AACCA,aAAK,IAAI+a,OAAV,IAAsBga,MAAtB,GAA+B,SAAKu0E,QAAL,CAAcr8F,IAAd,CAAmB,KAAnB,CAA/B,GAA2D,SAAKq8F,QAAL,CAAcr8F,IAAd,CAAmB,IAAnB,CAA3D;AArCoC;AAsCvC;AAED;;;;;;AAqBA;;;;;oCAKmB2G,S,EAAuBmhB,M,EAAgB;AAAA;;AACtD,cAAIizB,SAAS,GAAG;AACZ7vC,oBAAQ,EAAE,EADE;AAEZrZ,gBAAI,EAAE,OAAAD,iBAAA,CAAkB,QAAA4C,QAAA,CAASwkB,GAAT,EAAlB,EAAkC,EAAlC,EAAsCtkB,OAAtC,EAFM;AAGZlC,kBAAM,EAAE,OAAAD,mBAAA,CAAoB,IAAI,UAAAwQ,MAAJ,CAAW;AAAElR,kBAAI,EAAEJ,IAAI,CAACunB,GAAL,EAAR;AAAoBK,yBAAW,EAAE;AAAjC,aAAX,CAApB,EAAyE,EAAzE,CAHI;AAIZzmB,oBAAQ,EAAE,cAAA2kB,wBAJE;AAKZrB,uBAAW,EAAE,cAAAwB,kBAAA,CAAmB,CAAnB,CALD;AAMZK,oBAAQ,EAAE,cAAAJ,qBANE;AAOZq2D,wBAAY,EAAE,IAPF;AAQZv3E,oBAAQ,EAAE,IARE;AASZkQ,qBAAS,EAAEA;AATC,WAAhB;AAYA,cAAMy3B,MAAM,GAAG;AACXze,oBAAQ,EAAEmI;AADC,WAAf;AAIA,cAAM00E,gBAAgB,GAAG;AACrB78E,oBAAQ,EAAEmI,MADW;AAErBt1B,kBAAM,EAAE,OAAAD,mBAAA,CAAoB,IAAI,UAAAwQ,MAAJ,CAAW;AAAElR,kBAAI,EAAEJ,IAAI,CAACunB,GAAL,EAAR;AAAoBK,yBAAW,EAAE;AAAjC,aAAX,CAApB,EAA0E,EAA1E,CAFa;AAGrBzmB,oBAAQ,EAAE,cAAA2kB,wBAHW;AAIrB8sB,yBAAa,EAAE;AAJM,WAAzB;AAMA,cAAMp/B,KAAK,GAAG,cAAAm/B,0BAAA,CAA2Bo4D,gBAA3B,CAAd;;AACA,eAAKv7E,OAAL,CAAa2jB,UAAb,CAAwB3/B,KAAxB,EAA+BnV,SAA/B,CACI,UAACiQ,GAAD,EAAS;AACL;AACA,gBAAMhQ,IAAI,GAAGgQ,GAAG,CAACrI,GAAJ,CAAQ,UAACxH,CAAD;AAAA,qBAAO,QAAI,CAAC+wB,OAAL,CAAa9Q,OAAb,CAAqBjgB,CAArB,CAAP;AAAA,aAAR,CAAb;;AACA,oBAAI,CAAC+wB,OAAL,CAAaw7E,YAAb,CAA0B1sG,IAA1B;AACA;;;;;AAGA,gBAAM2sG,WAAW,GAAG,cAAA57E,sBAAA,CAChB/wB,IADgB,EAEhBA,IAAI,CAAC,CAAD,CAAJ,CAAQolB,QAAR,CAAiBzN,MAFD,EAGhBf,SAHgB,CAApB;AAKA,gBAAMW,IAAI,GAAGvX,IAAI,CAAC,CAAD,CAAJ,CAAQolB,QAAR,CAAiB7N,IAA9B;AACA,gBAAM7Q,QAAQ,GAAG1G,IAAI,CAAC,CAAD,CAAJ,CAAQ0G,QAAzB;AACA,gBAAMglD,eAAe,GAAG;AACpBluD,iBAAG,EAAE;AAAEK,oBAAI,EAAE0Z,IAAR;AAAc7Q,wBAAQ,EAARA;AAAd,eADe;AAEpB1B,mBAAK,EAAE,CAAA4R,SAAS,SAAT,IAAAA,SAAS,WAAT,GAAS,MAAT,GAAAA,SAAS,CAAElO,MAAX,CAAkB,UAACuhC,GAAD;AAAA,uBAASA,GAAG,CAAC1yB,IAAJ,KAAaA,IAAtB;AAAA,eAAlB,MAAiD;AAFpC,aAAxB;AAIA,gBAAMo0C,cAAc,GAAGD,eAAe,CAAC1mD,KAAhB,CAAsB2C,GAAtB,CAA0B,UAACsiC,GAAD;AAAA,qBAC7C,cAAAne,yBAAA,CAA0B4/B,eAAe,CAACluD,GAAhB,CAAoBK,IAA9C,EAAoDosC,GAApD,CAD6C;AAAA,aAA1B,CAAvB;AAGA,gBAAMtlB,OAAO,IAAI,cAAAwH,wBAAA,CAAyBu/B,eAAe,CAACluD,GAAzC,CAAJ,4BAAsDmuD,cAAtD,EAAb;AAEA,gBAAMihD,YAAY,GAAsBjoF,OAAO,CAACjc,MAAR,CACpC,UAACyD,CAAD;AAAA,qBAAOA,CAAC,CAACnH,KAAF,KAAYhF,IAAI,CAAC,CAAD,CAAJ,CAAQolB,QAAR,CAAiBrR,EAApC;AAAA,aADoC,EAEtC,CAFsC,CAAxC;AAGA,gBAAM6tC,gBAAgB,GAAG5hD,IAAI,CAAC,CAAD,CAAJ,CAAQ0G,QAAjC,CA1BK,CA2BL;;AACAskD,qBAAS,GAAG;AACR7vC,sBAAQ,EAAE,CAACyxF,YAAD,CADF;AAER9qG,kBAAI,EAAE,OAAAD,iBAAA,CAAkB,QAAA4C,QAAA,CAASwkB,GAAT,EAAlB,EAAkC,EAAlC,EAAsCtkB,OAAtC,EAFE;AAGRlC,oBAAM,EAAE,OAAAD,mBAAA,CACJ,IAAI,UAAAwQ,MAAJ,CAAW;AAAElR,oBAAI,EAAEJ,IAAI,CAACunB,GAAL,EAAR;AAAoBK,2BAAW,EAAE;AAAjC,eAAX,CADI,EAEJ,EAFI,EAGNpd,MAHM,CAGC01C,gBAHD,CAHA;AAOR/+C,sBAAQ,EAAE,cAAA2kB,wBAPF;AAQRrB,yBAAW,EACPnmB,IAAI,CAAC,CAAD,CAAJ,CAAQomB,oBAAR,KAAiC,UAAjC,GACM,cAAAuB,kBAAA,CAAmB,CAAnB,CADN,GAEM,cAAAA,kBAAA,CAAmB,CAAnB,CAXF;AAYRK,sBAAQ,EAAE,cAAAJ,qBAZF;AAaRq2D,0BAAY,EAAE0uB,WAAW,CAAC,CAAD,CAbjB;AAcRjmG,sBAAQ,EAAEk7C,gBAdF;AAeRhrC,uBAAS,EAAEA;AAfH,aAAZ;;AAkBA,oBAAI,CAAC4B,KAAL,CAAWolE,QAAX,CACI,cAAA5nE,oBAAA,CAAqB;AACjBE,qBAAO,EAAE80C;AADQ,aAArB,CADJ;;AAKA,oBAAI,CAAC4rB,MAAL,CAAYl/B,QAAZ,CAAqB,wBAArB,EAA+C;AAC3C76C,mBAAK,EAAE;AAAEqZ,uBAAO,EAAE,MAAF,OAAE,CAAF,kBAAO80C,SAAP,CAAE,EAAc;AAAExlD,wBAAM,EAAE;AAAV,iBAAd;AAAX;AADoC,aAA/C;;AAGAuW,wBAAY,CAACywF,cAAb,GAA8BzwF,YAAY,CAACywF,cAAb,CAA4B1oG,KAA5B,CAAkC,GAAlC,EAAuC,CAAvC,CAA9B;;AACA,oBAAI,CAACwoG,QAAL,CAAcr8F,IAAd,CAAmB,IAAnB;AACH,WAzDL,EA0DI,UAACsQ,KAAD,EAAW;AACP;AACA,oBAAI,CAAC+rF,QAAL,CAAcr8F,IAAd,CAAmB,IAAnB,EAFO,CAGP;;AACA;;;;;AAGA,oBAAI,CAACuI,KAAL,CAAWolE,QAAX,CAAoB,cAAA5nE,oBAAA,CAAqB;AAAEE,qBAAO,EAAE80C;AAAX,aAArB,CAApB;;AACA,oBAAI,CAAC4rB,MAAL,CAAYl/B,QAAZ,CAAqB,mBAArB,EAA0C;AACtC76C,mBAAK,EAAE;AAAEqZ,uBAAO,EAAE,MAAF,OAAE,CAAF,kBAAO80C,SAAP,CAAE,EAAc;AAAExlD,wBAAM,EAAE;AAAV,iBAAd;AAAX,eAD+B;AAEtCk/C,yBAAW,EAAE;AAAE32C,uBAAO,EAAE;AAAX;AAFyB,aAA1C;AAIH,WAtEL;AAwEH;;;mCAEc;AAAA;;AACX;AACA,eAAKlO,YAAL,CACI,sBADJ,EAEI,KAAK+2E,MAAL,CAAY/4D,MAAZ,CACKjL,IADL,CACU,YAAAlK,MAAA,CAAO,UAAC8G,KAAD;AAAA,mBAAWA,KAAK,YAAY,SAAAq9F,eAA5B;AAAA,WAAP,CADV,EAEK9sG,SAFL,CAEe,UAACyP,KAAD,EAA4B;AACnC,gBAAIA,KAAK,YAAY,SAAAq9F,eAArB,EAAsC;AAClC,kBACIr9F,KAAK,CAAC4jE,iBAAN,KAA4B,UAA5B,KACC5jE,KAAK,CAACgM,GAAN,CAAUI,QAAV,CAAmB,eAAnB,KAAuCpM,KAAK,CAACgM,GAAN,CAAUI,QAAV,CAAmB,UAAnB,CADxC,CADJ,EAGE;AACE,wBAAI,CAACywF,WAAL,CAAiBp8F,IAAjB,CAAsB,IAAtB;;AACA5I,sBAAM,CAAC8T,QAAP,CAAgBkjC,MAAhB;AACH;AACJ;AACJ,WAZL,CAFJ;AAiBA,cAAItmB,MAAM,GAAG,IAAb;;AACA,cAAI,KAAKq0E,cAAL,CAAoB1d,QAApB,CAA6BtS,aAA7B,CAA2C5kE,GAA3C,CAA+C,IAA/C,CAAJ,EAA0D;AACtDugB,kBAAM,GAAG,KAAKq0E,cAAL,CAAoB1d,QAApB,CAA6BtS,aAA7B,CAA2C5kE,GAA3C,CAA+C,IAA/C,CAAT;AACH,WAFD,MAEO,IAAIuE,YAAY,CAACywF,cAAb,IAA+BzwF,YAAY,CAACywF,cAAb,CAA4B5wF,QAA5B,CAAqC,MAArC,CAAnC,EAAiF;AACpFmc,kBAAM,GAAGhc,YAAY,CAACywF,cAAb,CAA4B1oG,KAA5B,CAAkC,GAAlC,EAAuC,CAAvC,CAAT;AACH;;AAED,cAAIi0B,MAAJ,EAAY;AACR,iBAAKl4B,YAAL,CACI,WADJ,EAEI,KAAKoxB,IAAL,CACK5wB,MADL,CACY,WADZ,EAEKuS,IAFL,CAEU,YAAAyG,KAAA,CAAM,UAACC,CAAD;AAAA,qBAAO,CAAC,CAACA,CAAF,IAAO,CAAC,CAACA,CAAC,CAACtV,MAAlB;AAAA,aAAN,CAFV,EAGKjE,SAHL,CAGe,UAACitC,QAAD,EAA0B;AACjC,sBAAI,CAAC8/D,WAAL,CAAiB9/D,QAAjB,EAA2BjV,MAA3B;AACH,aALL,CAFJ;AASH;;AAED,cAAI,KAAKha,OAAL,IAAgB,KAAK/a,KAAzB,EAAgC;AAC5B,iBAAKnD,YAAL,CACI,WADJ,EAEI,KAAKoxB,IAAL,CACK5wB,MADL,CACY,WADZ,EAEKuS,IAFL,CAEU,YAAAyG,KAAA,CAAM,UAACC,CAAD;AAAA,qBAAO,CAAC,CAACA,CAAF,IAAO,CAAC,CAACA,CAAC,CAACtV,MAAlB;AAAA,aAAN,CAFV,EAGKjE,SAHL,CAGe,UAACitC,QAAD,EAA0B;AACjC,kBAAM5nB,QAAQ,GAAG4nB,QAAQ,CAACtkC,MAAT,CAAgB,UAACC,EAAD;AAAA,uBAAQA,EAAE,CAACoL,EAAH,KAAU,QAAI,CAACgK,OAAvB;AAAA,eAAhB,CAAjB;AAEA,kBAAMxG,IAAI,GAAG6N,QAAQ,CAAC,CAAD,CAAR,CAAY7N,IAAzB;AACA,kBAAM7Q,QAAQ,GAAG0e,QAAQ,CAAC,CAAD,CAAR,CAAY1e,QAA7B;AAEA,kBAAMglD,eAAe,GAAG;AACpBluD,mBAAG,EAAE;AAAEK,sBAAI,EAAE0Z,IAAR;AAAc7Q,0BAAQ,EAARA;AAAd,iBADe;AAEpB1B,qBAAK,EAAEogB,QAAQ,IAAI;AAFC,eAAxB;AAIA,kBAAMumC,cAAc,GAAGD,eAAe,CAAC1mD,KAAhB,CAAsB2C,GAAtB,CAA0B,UAACsiC,GAAD;AAAA,uBAC7C,cAAAne,yBAAA,CAA0B4/B,eAAe,CAACluD,GAAhB,CAAoBK,IAA9C,EAAoDosC,GAApD,CAD6C;AAAA,eAA1B,CAAvB;AAGA,kBAAMtlB,OAAO,IACT,cAAAwH,wBAAA,CAAyBu/B,eAAe,CAACluD,GAAzC,CADS,4BAENmuD,cAFM,EAAb;AAKA,kBAAMihD,YAAY,GAAsBjoF,OAAO,CAACjc,MAAR,CACpC,UAACyD,CAAD;AAAA,uBAAOA,CAAC,CAACnH,KAAF,KAAYogB,QAAQ,CAAC,CAAD,CAAR,CAAYrR,EAA/B;AAAA,eADoC,EAEtC,CAFsC,CAAxC;AAGA,kBAAM6tC,gBAAgB,GAAGx8B,QAAQ,CAAC,CAAD,CAAR,CAAY1e,QAArC,CArBiC,CAsBjC;;AACA,kBAAMyqF,MAAM,GAAG,QAAA1sF,QAAA,CAASwkB,GAAT,GAAezR,GAAf,CAAmB,QAAnB,IAA+B,CAA/B,KAAqC,CAArC,GAAyC,CAAzC,GAA6C,CAA5D;AACA,kBAAMwzC,SAAS,GAAG;AACd7vC,wBAAQ,EAAE,CAACyxF,YAAD,CADI;AAEd9qG,oBAAI,EAAE,OAAAD,iBAAA,CACF,QAAA4C,QAAA,CAASwkB,GAAT,GAAe3mB,IAAf,CAAoB;AAAEC,yBAAO,EAAE4uF;AAAX,iBAApB,CADE,EAEF,EAFE,EAGJxsF,OAHI,EAFQ;AAMdlC,sBAAM,EAAE,OAAAD,mBAAA,CACJ,IAAI,UAAAwQ,MAAJ,CAAW;AACPlR,sBAAI,EAAE,QAAA2C,QAAA,CAASwkB,GAAT,GAAe3mB,IAAf,CAAoB;AAAEC,2BAAO,EAAE4uF;AAAX,mBAApB,CADC;AAEP7nE,6BAAW,EAAE,KAFN;AAGPC,6BAAW,EAAEq4B;AAHN,iBAAX,CADI,EAMJ,EANI,CANM;AAcd/+C,wBAAQ,EAAE,EAdI;AAedsjB,2BAAW,EAAE,cAAAuB,oBAfC;AAgBdM,wBAAQ,EAAE,cAAAF,oBAAA,CAAqB,CAArB,CAhBI;AAiBdm2D,4BAAY,EAAE,IAjBA;AAkBdv3E,wBAAQ,EAAEk7C,gBAlBI;AAmBdhrC,yBAAS,EAAEo2B;AAnBG,eAAlB;AAsBA,kBAAM+/D,MAAM,GAAG;AACX;AACA1kF,yBAAS,EAAE,QAAI,CAACtK,OAFL;AAGX;AACA;AACAu2B,6BAAa,EAAE,IALJ;AAMX7xC,sBAAM,EAAE,OAAAD,mBAAA,CACJ,IAAI,UAAAwQ,MAAJ,CAAW;AACPlR,sBAAI,EAAE,QAAA2C,QAAA,CAASwkB,GAAT,GAAe3mB,IAAf,CAAoB;AAAEC,2BAAO,EAAE4uF;AAAX,mBAApB,CADC;AAEP7nE,6BAAW,EAAE,KAFN;AAGPC,6BAAW,EAAEq4B;AAHN,iBAAX,CADI,EAMJ,EANI,CANG;AAcX/+C,wBAAQ,EAAE;AAdC,eAAf,CA9CiC,CA+DjC;;AACA,sBAAI,CAAC2V,KAAL,CAAWolE,QAAX,CAAoB,cAAArnE,gBAAA,EAApB;;AAEA,sBAAI,CAACiC,KAAL,CAAWolE,QAAX,CAAoB,QAAAzzD,mBAAA,CAAoByrC,KAApB,EAApB;;AACA,sBAAI,CAACp9C,KAAL,CAAWolE,QAAX,CAAoB,cAAA5nE,oBAAA,CAAqB;AAAEE,uBAAO,EAAE80C;AAAX,eAArB,CAApB;;AAEA,sBAAI,CAACxyC,KAAL,CAAWolE,QAAX,CAAoB,QAAAzzD,mBAAA,CAAoBjW,OAApB,CAA4B64F,MAA5B,CAApB;;AACAhxF,0BAAY,CAACywF,cAAb,GAA8B,EAA9B,CAtEiC,CAuEjC;;AACA,sBAAI,CAAC51B,MAAL,CAAYl/B,QAAZ,CAAqB,mBAArB,EAA0C;AACtC76C,qBAAK,EAAE;AACHqZ,yBAAO,EAAE,QAAI,CAAClT,KADX;AAEHoiB,0BAAQ,EAAEA,QAFP;AAGHwwE,0BAAQ,EAAE,IAHP;AAIHp6E,qBAAG,EAAEnU,MAAM,CAAC8T,QAAP,CAAgBW;AAJlB,iBAD+B;AAOtC4oC,2BAAW,EAAE;AAAE32C,yBAAO,EAAE;AAAX;AAPyB,eAA1C;;AASA,sBAAI,CAACu+F,QAAL,CAAcr8F,IAAd,CAAmB,IAAnB;AACH,aArFL,CAFJ;AAyFH;;AAED,eAAKpQ,YAAL,CACI,SADJ,EAEI,KAAKme,QAAL,CAAc3d,MAAd,CAA8C,SAA9C,EAAyDN,SAAzD,CAAmE,UAACgb,OAAD,EAAa;AAC5E,oBAAI,CAACiyF,aAAL,GAAqBjyF,OAArB;AACH,WAFD,CAFJ;;AAOA,eAAKiD,QAAL,CAAc3D,WAAd,CAA0BzH,IAA1B,CAA+B,YAAAyG,KAAA,CAAM,UAACC,CAAD;AAAA,mBAAOA,CAAP;AAAA,WAAN,CAA/B,EAAgDvZ,SAAhD,CAA0D,YAAM;AAC5D,oBAAI,CAAC6oG,IAAL,GAAY,QAAI,CAAC5qF,QAAL,CAAcd,OAAd,CAAsB,gBAAtB,KAA2C;AAAEnW,kBAAI,EAAE;AAAR,aAAvD;AACH,WAFD;AAIA;;;;;AAGA,eAAKlH,YAAL,CACI,aADJ,EAEI,OAAAgyB,aAAA,CAAc,CACV,KAAKrZ,KAAL,CAAW5F,IAAX,CAAgB,QAAA4H,MAAA,CAAO,OAAAo3D,iBAAP,CAAhB,CADU,EAEV,KAAKu6B,OAAL,CAAa9xF,WAFH,EAGV,KAAKiyF,QAHK,CAAd,EAKK15F,IALL,CAMQ,YAAAlK,MAAA,CAAO,kBAA8C;AAAA;AAAA,gBAA5C4Q,CAA4C;AAAA,gBAAzC2zF,WAAyC;AAAA,gBAA5BC,sBAA4B;;AACjD1lG,mBAAO,CAACV,GAAR,CAAYwS,CAAZ;AACA,mBAAO2zF,WAAW,IAAIC,sBAAtB;AACH,WAHD,CANR,EAWKntG,SAXL,CAWe,kBAAY;AAAA;AAAA,gBAAVkQ,IAAU;;AACnB,oBAAI,CAACo8F,WAAL,CAAiBp8F,IAAjB,CAAsB,CAACA,IAAvB;;AACA,gBAAI,CAACA,IAAL,EAAW;AACP,sBAAI,CAACuI,KAAL,CAAWolE,QAAX,CAAoB,OAAAlM,QAAA,CAASx9D,OAAT,EAApB;AACH;AACJ,WAhBL,CAFJ;AAoBH;;;4BA/RoB;AACjB,iBAAO,KAAKm4F,WAAZ;AACH;AAED;;;;4BACqB;AACjB,iBAAO,KAAKA,WAAZ;AACH;AAED;;;;4BAC6B;AACzB,cAAMrsG,IAAI,GAAmB,EAA7B;;AACA,eAAK,IAAMmtG,GAAX,IAAkB,KAAKH,aAAvB,EAAsC;AAClC,gBAAI,KAAKA,aAAL,CAAmBG,GAAnB,CAAJ,EAA6B;AACzBntG,kBAAI,CAAC2J,IAAL,CAAU,KAAKqjG,aAAL,CAAmBG,GAAnB,CAAV;AACH;AACJ;;AACD,iBAAOntG,IAAP;AACH;;;;MA9EsC,OAAAzB,a;;AAL3C;;;uBAKag0E,qB,EAAqB,2C,EAAA,wC,EAAA,4C,EAAA,uC,EAAA,sC,EAAA,+B,EAAA,8B;AAAA,K;;;YAArBA,qB;AAAqB,wC;AAAA,+C;AAAA,c;AAAA,a;AAAA,iR;AAAA;AAAA;AC7DlC;AACI;;AAGA;;AAGA;;AAQJ;;;;AAdsB;AAAA;AAGQ;AAAA;AAGC;AAAA;;;;;;;;;;2BDsDlBA,qB,EAAqB;cALjC,OAAA3sB,SAKiC;eALvB;AACPlnD,kBAAQ,EAAE,mBADH;AAEPmnD,qBAAW,EAAE,wBAFN;AAGPC,mBAAS,EAAE,CAAC,wBAAD;AAHJ,S;AAKuB,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AE7DlC,QAAY23B,IAAZ;;AAAA,eAAYA,IAAZ,EAAgB;AACZ;AACA;AACA;AACA;AACH,KALD,EAAYA,IAAI,GAAJ,QAAAA,IAAA,aAAAA,IAAA,GAAI,EAAJ,CAAZ;;AAOa,YAAAK,mBAAA,GAAsB,UAAC0M,IAAD,EAAkB;AACjD,uBAAU/M,IAAI,CAAC2vB,QAAf,SAA0B5iB,IAA1B;AACH,KAFY;;;;;;;;;;;;;;;;;;;;ACLA,YAAA9nC,WAAA,GAA+B;AACxCC,gBAAU,EAAE,IAD4B;AAExC0qD,SAAG,EAAE,KAFmC;AAGxC5wF,gBAAU,EAAE;AAH4B,KAA/B;;;;;;;;;;;;;;;;;;;ACAb;AACA;;;;AAGA,QAAM6wF,OAAO,GAAG;AACZryD,UAAI,EAAE;AACFn7C,aAAK,EAAE,EADL;AAEFgnG,iBAAS,EAAE,oBAFT;AAGF/2C,gBAAQ,EAAE;AAHR;AADM,KAAhB;AAQA;;;;AAGA,QAAMw9C,IAAI,GAAG;AACTh3D,gBAAU,EAAE,wBADH;AAET6vD,WAAK,EAAE,CACH;AACIvoG,YAAI,EAAE,MADV;AAEI8d,aAAK,EAAE,cAFX;AAGIhC,YAAI,EAAE;AACF5S,cAAI,EAAE,MADJ;AAEF,mBAAO;AAFL;AAHV,OADG,EASH;AACIlJ,YAAI,EAAE,MADV;AAEI8d,aAAK,EAAE,gBAFX;AAGIhC,YAAI,EAAE;AACF5S,cAAI,EAAE,MADJ;AAEF,mBAAO;AAFL;AAHV,OATG,EAiBH;AACIlJ,YAAI,EAAE,QADV;AAEI8d,aAAK,EAAE,WAFX;AAGIhC,YAAI,EAAE;AACF5S,cAAI,EAAE,MADJ;AAEF,mBAAO;AAFL;AAHV,OAjBG;AAFE,KAAb;AA6BA;;;;AAGA,QAAMymG,IAAI,GAAG;AACTpH,WAAK,EAAE,EADE;AAETqH,aAAO,EAAE;AAFA,KAAb;AAIA;;;;AAGA,QAAMh3F,OAAO,GAAG;AACZi3F,mBAAa,EAAE,CACX;AAAE7vG,YAAI,EAAE,UAAR;AAAoBkW,UAAE,EAAE;AAAxB,OADW,EAEX;AAAElW,YAAI,EAAE,UAAR;AAAoBkW,UAAE,EAAE;AAAxB,OAFW,CADH;AAKZ2yE,iBAAW,EAAE,CACT,WADS,EAET,MAFS,EAGT,UAHS,EAIT,QAJS,EAKT,UALS,EAMT,WANS,EAOT,OAPS,EAQT,MARS,EAST,SATS,EAUT,aAVS,EAWT,cAXS,CALD;AAkBZinB,eAAS,EAAE,KAlBC;AAmBZC,qBAAe,EAAE,IAnBL;AAoBZC,gBAAU,EAAE;AApBA,KAAhB;AAsBA;;;;AAGA,QAAMC,aAAa,GAAG;AAClBC,iBAAW,EAAE;AADK,KAAtB;AAGA;;;;AAGA,QAAMC,SAAS,GAAG;AACdC,kBAAY,EAAE,IADA;AAEdC,uBAAiB,EAAE;AAFL,KAAlB;AAIA;;;;AAGA,QAAMC,OAAO,GAAG;AACZ5mG,YAAM,EAAE;AACJ,2BAAmB,SADf;AAEJ,6BAAqB,SAFjB;AAGJ,6BAAqB,SAHjB;AAIJ,wBAAgB,SAJZ;AAKJ,8BAAsB,MALlB;AAMJ,0BAAkB,SANd;AAOJ,iCAAyB,SAPrB;AAQJ,4BAAoB,SARhB;AASJ,mCAA2B,SATvB;AAUJ,yBAAiB,SAVb;AAWJ,gCAAwB,SAXpB;AAYJ,6BAAqB,MAZjB;AAaJ,oCAA4B,MAbxB;AAcJ,oBAAY,SAdR;AAeJ,uBAAe,SAfX;AAgBJ,qBAAa;AAhBT,OADI;AAmBZ6mG,yBAAmB,EAAE,IAnBT;AAoBZC,6BAAuB,EAAE,KApBb;AAqBZC,mBAAa,EAAE,IArBH;AAsBZz2B,YAAM,EAAE;AACJ02B,eAAO,EAAE,CACL;AAAE/wG,aAAG,EAAE,iBAAP;AAA0BK,cAAI,EAAE;AAAhC,SADK,EAEL;AAAEL,aAAG,EAAE,mBAAP;AAA4BK,cAAI,EAAE;AAAlC,SAFK,EAGL;AAAEL,aAAG,EAAE,mBAAP;AAA4BK,cAAI,EAAE;AAAlC,SAHK,EAIL;AAAEL,aAAG,EAAE,oBAAP;AAA6BK,cAAI,EAAE;AAAnC,SAJK;AADL;AAtBI,KAAhB;AAgCA;;;;AAGA,QAAM2wG,QAAQ,GAAG;AACbC,cAAQ,EAAE;AADG,KAAjB;AAKA;;;;AAGA,QAAM13D,GAAG,GAAG;AACRnoB,WAAK,EAAE,oBADC;AAERyW,iBAAW,EAAE,4DAFL;AAGRzU,gBAAU,EAAE,OAHJ;AAIR0lB,gBAAU,EAAE;AACRvvC,YAAI,EAAE,KADE;AAERynB,WAAG,EAAE,qBAFG;AAGR+nB,kBAAU,EAAE;AAHJ,OAJJ;AASRC,eAAS,EAAE;AACPzvC,YAAI,EAAE,KADC;AAEPynB,WAAG,EAAE,6BAFE;AAGP+nB,kBAAU,EAAE;AAHL,OATH;AAcRE,aAAO,EAAE;AACL95B,cAAM,EAAE,UADH;AAEL+5B,iBAAS,EAAE,IAFN;AAGLC,qBAAa,EAAE,IAHV;AAILC,4BAAoB,EAAE,IAJjB;AAKLC,mBAAW,EAAE;AALR,OAdD;AAqBRy2D,aAAO,EAAPA,OArBQ;AAsBRC,UAAI,EAAJA,IAtBQ;AAuBRC,UAAI,EAAJA,IAvBQ;AAwBR/2F,aAAO,EAAPA,OAxBQ;AAyBRq3F,mBAAa,EAAbA,aAzBQ;AA0BRE,eAAS,EAATA,SA1BQ;AA2BRG,aAAO,EAAPA,OA3BQ;AA4BRK,cAAQ,EAARA;AA5BQ,KAAZ;AAgCA;;;;AAGa,YAAAn6B,gBAAA,GAA6C;AACtD/sE,WAAK,EAAE,IAD+C;AAEtD0T,cAAQ,EAAE;AACNK,cAAM,EAAE,EADF;AAENM,aAAK,EAAE,QAFD;AAGNT,gBAAQ,EAAE,EAHJ;AAINK,YAAI,EAAE,EAJA;AAKNE,kBAAU,EAAE,KALN;AAMNc,mBAAW,EAAE;AANP,OAF4C;AAUtDw6B,SAAG,EAAHA,GAVsD;AAWtDl7B,UAAI,EAAE,KAXgD;AAYtDiB,cAAQ,EAAE;AAZ4C,KAA7C;;;;;;;;;;;;;;;;;;;;AC5Kb;AAAA;AAAA;;AACA;AAAA;AAAA;;AAEa,YAAA4xF,YAAA,GAAe,UACxBt8B,MADwB,EAExB4C,SAFwB,EAGvB;AACD,UAAI25B,QAAJ;AACAv8B,YAAM,CAACw8B,GAAP,CAAW11D,MAAX;AACA87B,eAAS,GAAGx2D,IAAZ,CAAiB,UAAA2uF,GAAG;AAAA,eAAKwB,QAAQ,GAAGxB,GAAhB;AAAA,OAApB;AACA/6B,YAAM,CAACw8B,GAAP,CAAWvqC,OAAX,CAAmB,YAAM;AACrB,YAAM4K,MAAM,GAAmB0/B,QAAQ,CAACx/B,QAAT,CAAkB33D,GAAlB,CAAsB,OAAAq3F,cAAtB,CAA/B;AACA,YAAMC,QAAQ,GAAG7/B,MAAM,CAAC8/B,UAAP,CAAkBpnG,GAAlB,CAAsB,UAAAiJ,CAAC;AAAA,iBAAIA,CAAC,CAACuK,QAAF,CAAWxb,aAAf;AAAA,SAAvB,CAAjB;AACA,YAAMqvG,WAAW,GAAG,MAAAC,cAAA,CAAeH,QAAf,CAApB;AACAH,gBAAQ,CAACnwG,OAAT;AACAwwG,mBAAW;AACd,OAND;AAOH,KAdY;;;;;;;;;;;;;;;;;;;;;ACHb;AAAA;AAAA;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;;;;AAGA,QAAI,cAAAtsD,WAAA,CAAYC,UAAhB,EAA4B;AACxB,aAAAusD,cAAA;AACH;;AAED,QAAMl6B,SAAS,GAAG,SAAZA,SAAY;AAAA,aAAM,oBAAAm6B,eAAA,GAAyBC,eAAzB,CAAyC,mBAAD,UAAxC,CAAN;AAAA,KAAlB,C,CAEA;;;AACA,QAAI,cAAA1sD,WAAA,CAAY2qD,GAAhB,EAAqB;AACjB,UAAK,KAAL,EAAyB,CAExB,CAFD,MAEO;AACH7lG,eAAO,CAAC+Y,KAAR,CAAc,4CAAd;AACA/Y,eAAO,CAACV,GAAR,CAAY,4CAAZ;AACH;AACJ,KAPD,MAOO;AACHkuE,eAAS,WAAT,CAAkB,UAAAp1D,GAAG;AAAA,eAAIpY,OAAO,CAACV,GAAR,CAAY8Y,GAAZ,CAAJ;AAAA,OAArB;AACH","file":"main-es5.js","sourcesContent":["export * from './lib/animations.module';\nexport * from './lib/angular-animations'\n","import { trigger, transition, style, animate, state } from '@angular/animations';\n\nexport const ANIMATION_SHOW_ENTER_LEAVE = trigger('show', [\n transition(':enter', [\n style({ opacity: 0, height: 0 }),\n animate(300, style({ opacity: 1, height: '*' }))\n ]),\n transition(':leave', [\n style({ opacity: 1, height: '*' }),\n animate(300, style({ opacity: 0, height: 0 }))\n ])\n]);\n\nexport const ANIMATION_SHOW_CONTRACT_EXPAND = trigger('show', [\n state('show', style({ opacity: 1, height: '*' })),\n state('hide', style({ opacity: 0, height: 0 })),\n transition('show <=> hide', animate('200ms ease-in'))\n]);\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class AnimationsModule {}\n","export * from './lib/base.module';\nexport * from './lib/types.utilities';\nexport * from './lib/general.utilities';\nexport * from './lib/base.class';\nexport * from './lib/base.directive';\nexport * from './lib/date.utils'\nexport * from './lib/date.spec-helpers'\nexport * from './lib/replace.pipe'\nexport * from './lib/cdk-drop-list-scroll-container.directive'\nexport * from './lib/image.directive';\n","import { Subscription, BehaviorSubject } from \"rxjs\";\n\nexport class BaseClass {\n /** Store for named timers */\n protected _timers: { [name: string]: number } = {};\n /** Store for named intervals */\n protected _intervals: { [name: string]: number } = {};\n /** Store for named subscription unsub callbacks */\n protected _subscriptions: { [name: string]: (Subscription | (() => void)) } = {};\n /** Subject which stores the initialised state of the object */\n protected readonly _initialised = new BehaviorSubject(false);\n\n /** Observable of the initialised state of the object */\n public get initialised(): BehaviorSubject {\n return this._initialised;\n }\n /** Whether the object has been initialised */\n public get is_initialised(): boolean {\n return this._initialised.getValue();\n }\n\n protected destroy() {\n for (const key in this._timers) {\n if (this._timers.hasOwnProperty(key)) {\n this.clearTimeout(key);\n }\n }\n for (const key in this._intervals) {\n if (this._intervals.hasOwnProperty(key)) {\n this.clearInterval(key);\n }\n }\n for (const key in this._subscriptions) {\n if (this._subscriptions.hasOwnProperty(key)) {\n this.unsub(key);\n }\n }\n }\n\n /**\n * Creates a named timer\n * @param name Name of the timer\n * @param fn Callback function for the timer\n * @param delay Callback delay\n */\n protected timeout(name: string, fn: () => void, delay: number = 300) {\n if (name && fn && fn instanceof Function) {\n this.clearTimeout(name);\n this._timers[name] = setTimeout(() => {\n fn();\n this._timers[name] = null;\n }, delay);\n } else {\n throw new Error(\n name ? 'Cannot create named timeout without a name' : 'Cannot create a timeout without a callback'\n );\n }\n }\n\n /**\n * Clears the named timer\n * @param name Timer name\n */\n protected clearTimeout(name: string) {\n if (this._timers[name]) {\n clearTimeout(this._timers[name]);\n this._timers[name] = null;\n }\n }\n\n /**\n * Creates a named interval\n * @param name Name of the interval\n * @param fn Callback function for the interval\n * @param delay Callback delay\n */\n protected interval(name: string, fn: () => void, delay: number = 300) {\n if (name && fn && fn instanceof Function) {\n this.clearInterval(name);\n this._intervals[name] = setInterval(() => fn(), delay);\n } else {\n throw new Error(\n name ? 'Cannot create named interval without a name' : 'Cannot create a interval without a callback'\n );\n }\n }\n\n /**\n * Clears the named interval\n * @param name Timer name\n */\n protected clearInterval(name: string) {\n if (this._intervals[name]) {\n clearInterval(this._intervals[name]);\n this._intervals[name] = null;\n }\n }\n\n /**\n * Store named subscription\n * @param name Name of the subscription\n * @param unsub Unsubscribe callback or Subscription object\n */\n protected subscription(name: string, unsub: Subscription | (() => void)) {\n this.unsub(name);\n this._subscriptions[name] = unsub\n }\n\n /**\n * Call unsubscribe callback with the given name\n * @param name\n */\n protected unsub(name: string) {\n if (this._subscriptions && this._subscriptions[name]) {\n this._subscriptions[name] instanceof Subscription\n ? (this._subscriptions[name] as Subscription).unsubscribe()\n : (this._subscriptions[name] as any)();\n this._subscriptions[name] = null;\n }\n }\n}\n","\nimport { Directive, OnDestroy } from '@angular/core';\nimport { BaseClass } from './base.class';\n\n@Directive({\n selector: 'a-very-basic-component-base-that-should-not-be-used'\n})\nexport class BaseDirective extends BaseClass implements OnDestroy {\n public ngOnDestroy(): void {\n this.destroy();\n }\n}","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NumbersOnlyDirective } from './numbers-only.directive';\n\n@NgModule({\n imports: [CommonModule,],\n declarations: [\n NumbersOnlyDirective\n ],\n exports: [\n NumbersOnlyDirective\n ]\n})\nexport class BaseModule {\n}\n","import {\n Directive,\n Input,\n Renderer2,\n SimpleChanges,\n OnChanges,\n ContentChildren,\n QueryList,\n AfterContentInit\n} from '@angular/core';\nimport { CdkDropList, CdkDrag } from '@angular/cdk/drag-drop';\nimport { BaseDirective } from './base.directive';\n\nexport enum ScrollDirection {\n NONE,\n X,\n Y,\n BOTH\n}\n\n@Directive({\n selector: '[cdkDropList][scrollContainer]'\n})\nexport class CdkDropListScrollContainer extends BaseDirective\n implements OnChanges, AfterContentInit {\n /** Direction of scroll to determine updating the position of the drop list */\n @Input() direction: ScrollDirection = ScrollDirection.X;\n /** Name of the scroll container for the list */\n @Input() scrollContainer: string;\n /** Scroll container element */\n public element: HTMLElement;\n /** Last scroll position */\n public last_scroll: { x: number; y: number } = { x: 0, y: 0 };\n\n /** Draggable children elements */\n @ContentChildren(CdkDrag) private items: QueryList;\n\n constructor(private _cdkDropList: CdkDropList, private _renderer: Renderer2) {\n super();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.scrollContainer && this.scrollContainer) {\n this.element = this._cdkDropList.element.nativeElement.closest(\n this.scrollContainer\n ) as HTMLElement;\n }\n }\n\n public ngAfterContentInit(): void {\n this.subscription(\n 'drag_items',\n this.items.changes.subscribe((items: QueryList) => {\n const list = items.toArray();\n list.forEach((i, index) => {\n this.subscription(\n `list-item-${index}`,\n this._renderer.listen(i.element.nativeElement, 'mousedown', () => {\n this.subscription(\n 'item-dragged',\n this._renderer.listen('window', 'mouseup', () => this.onDrop())\n );\n this.onDrag();\n })\n );\n this.subscription(\n `list-item-touch-${index}`,\n this._renderer.listen(i.element.nativeElement, 'touchstart', () => {\n this.subscription(\n 'item-dragged',\n this._renderer.listen('window', 'touchend', () => this.onDrop())\n );\n this.onDrag();\n })\n );\n });\n })\n );\n }\n\n /** Start listing for scroll events on the container */\n public onDrag() {\n if (this.element) {\n this.subscription(\n 'scroll',\n this._renderer.listen(this.element, 'scroll', () => this.updateListPosition())\n );\n }\n }\n\n /** Stop listening for scroll events on the container */\n public onDrop() {\n this.unsub('scroll');\n }\n\n /**\n * Forcefully update the position data of the drop list\n */\n private updateListPosition() {\n this.timeout(\n 'update_positions',\n () => {\n const scroll = { x: this.element.scrollLeft, y: this.element.scrollTop };\n if (\n ((this.direction === ScrollDirection.BOTH ||\n this.direction === ScrollDirection.Y) &&\n scroll.y !== this.last_scroll.y) ||\n ((this.direction === ScrollDirection.BOTH ||\n this.direction === ScrollDirection.X) &&\n scroll.x !== this.last_scroll.x)\n ) {\n (this._cdkDropList._dropListRef as any)._cacheOwnPosition();\n (this._cdkDropList._dropListRef as any)._siblings.forEach(i =>\n i.isReceiving() ? i._cacheOwnPosition() : null\n );\n }\n this.last_scroll = scroll;\n },\n 50\n );\n }\n}\n","import MockDate from 'mockdate';\n\n/**\n * August 13, 2020 at 7:22:12 UTC\n */\nconst initialTime = 1597346532 * 1000;\n\nexport const mockDate = (timeOverride = initialTime) => MockDate.set(new Date(timeOverride));\n\nexport const resetDate = () => MockDate.reset();\n","import { DateNow, DateTZ } from '@mckinsey-converge/date-tz'\nimport { DateTime } from 'luxon';\nimport * as dayjs from 'dayjs';\nimport {\n dayJsHoursMinutes,\n dayJsTimeFormatString,\n} from './general.utilities';\n\n/**\n * Allows you to split up durations into a group.\n */\nexport interface DurationGroup {\n /**\n * Step amount to generate between start and max.\n */\n step: number;\n /**\n * Where to start in minutes.\n */\n start: number;\n /**\n * Where to end in minutes.\n */\n max: number;\n}\n\n/**\n * Find the multiple of `stepMinute` which is closest to the 'minutes' property of the given date.\n * @param date - Any Lexon date.\n * @param stepMinute - The number of minutes between one timeslot and the next. Integer value\n * 1 to 59, inclusive.\n */\n// R--- depreciate this one\nexport const closestToTimeSlot = (date: DateTime, stepMinute: number, start: number = 0) : DateTime => {\n return date.set({ millisecond: 0, second: 0, minute: Math.ceil(date.minute / stepMinute) * stepMinute })\n .plus({ minutes: start % 60 }) // apply offset as well if it starts at 15.\n};\n\nexport const closestToTimeSlotTz = (dateTz: DateTZ, stepMinute: number, start: number = 0) : DateTZ => {\n return dateTz.setValue({ millisecond: 0, second: 0, minute: Math.ceil(dateTz.minutes / stepMinute) * stepMinute })\n .addValue({ minutes: start % 60 }) // apply offset as well if it starts at 15.\n};\n\n/**\n * Convert duration to human readable string\n * @param duration Duration in minutes\n * @param short Whether to use short form of duration words e.g. hours as hrs, or minutes as mins\n */\nexport function durationHumanized(duration: number, short: boolean = false): string {\n if (!duration || duration < 0) {\n return '';\n }\n const h = Math.floor(duration / 60);\n let d = `${h >= 1 ? h + (short ? ' hr' : ' hour' + (h === 1 ? '' : 's')) : ''}`;\n if (duration % 60 !== 0) {\n if (d) {\n d += short ? ' ' : ', ';\n }\n const m = duration % 60;\n d += `${m >= 1 ? m + (short ? ' min' : ' minute' + (m === 1 ? '' : 's')) : ''}`;\n }\n return d;\n}\n\nexport const weekDayMonthYearFormat = (date: DateTZ): string => date.formatDate('ccc dd MMM yyyy');\n\n/**\n * Tries to extract best-fit input\n * @return undefined if not valid. otherwise if good\n */\nexport const extractDateFromInput = (input: string,\n checkHour,\n startDate: dayjs.Dayjs): dayjs.Dayjs | undefined => {\n // check if input has am/pm or normal 24 hour time.\n // let date = dayjs(input, 'HH:mm');\n // let date = dayjs(input, 'h:mma');\n let date = dayjs(input, dayJsTimeFormatString());\n if (!date.isValid()) {\n // patch if time is in format xx:x to assume you meant xx:x0\n let cleanedInput = input;\n const times = input.split(':');\n if(!input){\n return undefined\n }\n if (times.length === 2) {\n if (times[1].length === 1) {\n cleanedInput = `${times[0]}:${times[1]}0`;\n }\n }\n // may be other input, lets try next value (without am/pm)\n date = dayjs(cleanedInput, dayJsHoursMinutes());\n // might be just purely an hour\n if (!date.isValid() && checkHour) {\n date = dayjs(input, 'H');\n }\n }\n // We expect input times to be in the future. If now is in the afternoon, this\n // simple block will ensure the returned date is also in the afternoon.\n //\n // NB: dayjs parses times as morning by default.\n if (date.isValid()) {\n // Move to the selected start date\n date = date.month(startDate.month()).date(startDate.date()).year(startDate.year());\n if (startDate.hour() > date.hour() && date.date() === startDate.date()) {\n date = date.set('hour', date.hour() + 12);\n }\n }\n\n return date.isValid() ? date : undefined;\n};\n\n\n/**\n * 1. Calculates the date from input via {@link extractDateFromInput}.\n * 2. Finds the nearest time slot that it can be via {@link closestToTimeSlot}.\n * 3. Then returns the time-format string the input expects so autocomplete can suggest\n * closest match.\n * @param step The step between time slots.\n * @param input The input text.\n */\nexport const nearestStepToInput = (\n step: number,\n input: string,\n currentStartDate: number,\n start: number = 0\n): string => {\n let date = extractDateFromInput(input, false, dayjs(currentStartDate));\n if (date) {\n const luxonDate = DateTime.fromMillis(date.valueOf());\n const closestDate = closestToTimeSlot(luxonDate, step, start);\n return closestDate.toFormat(dayJsHoursMinutes());\n } else {\n return input;\n }\n};\n/**\n * Similiar to {@link nearestStepToInput} instead:\n * 1. Calculates the date from input via {@link extractDateFromInput}.\n * 2. Finds which duration group is closest to the currentStartDate. If not found\n * return vanilla text.\n * 3. Finds the nearest time slot that it can be via {@link closestToTimeSlot}.\n * 4. Then returns the time-format string the input expects so autocomplete can suggest\n * closest match.\n */\nexport const nearestDurationToInput = (durationGroups: DurationGroup[],\n currentStartDate: number,\n value: string): string => {\n\n let date = extractDateFromInput(value, false, dayjs(currentStartDate));\n\n if (!date) {\n // Check if the input is a duration \n const duration = parseInt(value);\n if (typeof (duration) === 'number' && value.indexOf(':') === -1 && duration > 12) {\n date = dayjs(currentStartDate).add(duration, 'm');\n }\n }\n\n if (date) {\n const minutes = date.diff(currentStartDate, 'minute');\n const closestDurationGroup = durationGroups.find(d => {\n return (minutes <= d.max);\n });\n if (closestDurationGroup) {\n const offset = [closestDurationGroup].reduce((previousValue, currentValue) => {\n return previousValue + currentValue.start;\n }, 0);\n const luxonDate = DateTime.fromMillis(date.valueOf());\n const closestDate = closestToTimeSlot(luxonDate, closestDurationGroup.step, 0);\n return closestDate.toFormat(dayJsHoursMinutes());\n }\n }\n\n return value;\n};\n\nexport const resetSecondsOnTimestamp = (timestamp: number) => {\n return DateTime.fromMillis(timestamp).set({ second: 0, millisecond: 0 }).toMillis();\n}\n\nexport const formatDateWithSuffix = (date: string): string => {\n const dateObj = new Date(date);\n const day = dateObj.getDate();\n const month = dateObj.toLocaleString(\"default\", { month: \"short\" });\n const year = dateObj.getFullYear();\n return `${day}${nthNumber(day)} ${month} ${year}`; //this.event.date_string;\n}\n\nconst nthNumber = (number) => {\n return number > 0\n ? [\"th\", \"st\", \"nd\", \"rd\"][\n (number > 3 && number < 21) || number % 10 > 3 ? 0 : number % 10\n ]\n : \"\";\n};\n\nexport const getListOfDateFormat = () => {\n return [\t\n 'MMMM dd y', \t//March 07 2023\n 'MMM dd, y',\t//Mar 07 2023\n 'MMMM dd',\t\t//March 07\n 'MMM dd', \t\t//Mar 07\n 'MM dd', \t\t//03 07\n\n 'MM-dd-yy',\t\t//03-07-23\n 'MM-dd-yyyy',\t//03-07-2023\n 'MMMM-dd-yyyy', //March-07-2023\n 'MMMM-dd-yy',\t//March-07-23\n\n 'MMMM-dd',\t\t//March-07\n 'MMM-dd',\t\t//Mar-07\n \n 'MMM-dd-y',\t\t//Mar-07-2023\n\n 'MM/dd',\t\t//03/07\n 'MM/dd/yy',\t\t//03/07/23\n 'MM/dd/yyyy',\t//03/07/2023\n \n 'dd/MM',\t\t//07/03\n 'dd/MM/yy',\t\t//07/03/23\n 'dd/MM/yyyy',\t//07/03/2023\n \n 'dd-MMMM',\t\t//07-March\n 'dd MMMM',\t\t//07 March\n 'dd-MMM',\t\t//07-Mar\n 'dd MMM',\t\t//07 Mar\n\n 'dd-MM-y',\t\t//07-03-23\n 'dd MMMM yy',\t//07 March 23\n \n 'dd/MMM/y',\t //07/Mar/2023\n 'dd/MMMM/y', //07/March/2023\n 'dd/MMM/yy', //07/Mar/23\n 'dd/MMMM/yy', //07/March/23\n \n\n 'dd-MMMM-yy',\t//07-March-23\n 'dd-MMM-yy',\t//07-Mar-23\n 'dd-MM-yy',\t\t//07-03-23\n 'MMMM-dd-yy',\t//March-07-23\n 'MMM-dd-yy',\t//Mar-07-23\n\n 'MMMM dd yy',\t//March 07 23\n 'MMM dd, yy',\t//Mar 07 23\n 'MM dd, yy',\t//03 07 23\n\n 'dd MMMM y',\t//07 March 2023\n 'dd MMM, y',\t//07 Mar 2023\n 'dd MM, yy',\t//07 03, 23\n 'dd-MMM-y',\t//07-Mar-2023\n\n 'h:mm a', // 3:30 pm\n 'h:mma' // 3:30 pm\n\n ];\n}","import { HashMap, Point } from './types.utilities';\n\nimport * as dayjs from 'dayjs';\nimport * as utc from 'dayjs/plugin/utc';\nimport * as timezone from 'dayjs/plugin/timezone';\nimport * as isToday from 'dayjs/plugin/isToday';\nimport * as weekday from 'dayjs/plugin/weekday';\nimport * as customParseFormat from 'dayjs/plugin/customParseFormat';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n// TODO: this is not the best place to import this timezone addition\ndayjs.extend(utc);\ndayjs.extend(timezone);\ndayjs.extend(isToday);\ndayjs.extend(weekday);\ndayjs.extend(customParseFormat);\n\n/** Available console output streams. */\nexport type ConsoleStream = 'debug' | 'warn' | 'log' | 'error' | 'info';\n\n/**\n * Log data to the browser console\n * @param type Type of message\n * @param msg Message body\n * @param args array of argments to log to the console\n * @param stream Stream to emit the console on. 'debug', 'log', 'warn' or 'error'\n * @param force Whether to force message to be emitted when debug is disabled\n */\nexport function log(\n type: string,\n msg: string,\n args?: any,\n stream: ConsoleStream = 'debug',\n force: boolean = false,\n app_name: string = 'STAFF'\n) {\n if ((window as any).debug || force) {\n const colors: string[] = [\n 'color: #E91E63',\n 'color: #3F51B5',\n 'color: default',\n ];\n if (args) {\n console[stream](\n `%c[${app_name}]%c[${type}] %c${msg}`,\n ...colors,\n args\n );\n } else {\n console[stream](`%c[${app_name}]%c[${type}] %c${msg}`, ...colors);\n }\n }\n}\n\n/**\n * Get item from the nested object\n * @param keys List of sub-keys to search for\n * @param map Object to search\n */\n export function getItemWithKeys(keys: string[], map: HashMap) {\n const key = keys[0];\n if (map && key in map) {\n return keys.length > 1\n ? getItemWithKeys(keys.slice(1), map[key] || {})\n : map[key];\n }\n return null;\n}\n\n/* istanbul ignore next */\n/**\n * Checks whether the platform is a mobile device.\n */\nexport function isMobileDevice(): boolean {\n const r = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i;\n return !!navigator.userAgent.match(r);\n}\n\n/* istanbul ignore next */\n/**\n * Checks whether the browser is Mobile Safari.\n */\nexport function isMobileSafari(): boolean {\n const agent = navigator.userAgent;\n return !!(\n agent.match(/iPhone|iPad|iPod/) &&\n agent.match(/AppleWebKit/) &&\n !agent.match('CriOS')\n );\n}\n\n/* istanbul ignore next */\n/**\n * Checks whether the browser is Android Chrome.\n */\nexport function isAndroidChrome(): boolean {\n const agent = navigator.userAgent;\n return !!(agent.match(/Android/) && agent.match(/Chrome/));\n}\n\n/**\n * Generate string representation of a number with zeros padding the length\n * @param value Number to pad with zeros\n * @param length Length of the resulting string\n */\nexport function padZero(value: number, length: number): string {\n let str = value.toString();\n while (str.length < length) {\n str = '0' + str;\n }\n return str;\n}\n\n/**\n * Remove duplicates from the given array\n * @param array List of items to remove duplicates from\n * @param key Key on array objects to compare for uniqueness\n */\nexport function unique(array: T[], key: keyof T | undefined = undefined) {\n return array.filter(\n (el, pos, arr) =>\n el &&\n arr.indexOf(\n key\n ? arr.find((i) => i && i[key] === el[key])\n : arr.find((i) => i === el)\n ) === pos\n );\n}\n\n/**\n * Convert duration to human readable string\n * @param duration Duration in minutes\n * @param short Whether to use short form of duration words e.g. hours as h\n */\nexport function humaniseDuration(durationInput: number, size: string = 'long') {\n const duration = Math.floor(durationInput);\n if (!duration || duration < 0) {\n return '';\n }\n let singular = false;\n let format = { hours: ' hour', minutes: ' minute' };\n switch (size) {\n case 'medium':\n format = { hours: 'hr', minutes: 'min' };\n break;\n case 'short':\n format = { hours: 'h', minutes: 'm' };\n singular = true;\n break;\n }\n const h = Math.floor(duration / 60);\n let d = `${\n h >= 1\n ? h +\n (singular ? format.hours : format.hours + (h === 1 ? '' : 's'))\n : ''\n }`;\n if (duration % 60 !== 0) {\n if (d) {\n d += singular ? ' ' : ', ';\n }\n const m = duration % 60;\n d += `${\n m >= 1\n ? m +\n (singular\n ? format.minutes\n : format.minutes + (m === 1 ? '' : 's'))\n : ''\n }`;\n }\n return d;\n}\n\n/**\n * Get a filtered list of items\n * @param filter Value to filter on\n * @param items List of results to filter\n * @param fields Fields to check for matches on each item\n */\nexport function filterList(\n filter: string,\n items?: T[],\n fields: string[] = ['id']\n): T[] {\n let results: any[];\n // Tokenise filter string\n const filters = (filter || '').toLowerCase().split(' ');\n const list = {};\n for (const f of filters) {\n /* istanbul ignore else */\n if (f) {\n /* istanbul ignore else */\n if (!list[f]) {\n list[f] = 0;\n }\n list[f]++;\n }\n }\n // Group similar tokens\n const parts = [];\n for (const f in list) {\n /* istanbul ignore else */\n if (list.hasOwnProperty(f)) {\n parts.push({ word: f, count: list[f], regex: new RegExp(f, 'gi') });\n }\n }\n parts.sort(\n (a, b) => b.word.length - a.word.length || a.word.localeCompare(b.word)\n );\n const item_list = JSON.parse(JSON.stringify(items || []));\n /* istanbul ignore else */\n if (filter) {\n results = item_list.filter((item) => {\n let match_count = 0;\n item.match_index = 65535;\n item.match = '';\n const field_list = {};\n // Initialise field match variables\n for (const f of fields) {\n field_list[f] = {\n value: (item[f] || '').toLowerCase(),\n index: 65536,\n matched: 0,\n };\n }\n // Search for matches with the tokenised filter string\n for (const i of parts) {\n /* istanbul ignore else */\n if (i.word) {\n // Check fields for matches\n for (const f of fields) {\n const field = field_list[f];\n const index = field.value.indexOf(i.word);\n field.index = index < field.index ? index : field.index;\n field.matches = (\n field.value.match(i.regex) || []\n ).length;\n field.value = field.value.replace(i.regex, ' ');\n }\n // Update token match count\n for (const f of fields) {\n const field = field_list[f];\n /* istanbul ignore else */\n if (field.matches >= i.count) {\n match_count++;\n // Update field matches\n let changed = 0;\n const tokens = (\n item[`match_${f}`] ||\n item[f] ||\n ''\n ).split(' ');\n for (const k of tokens) {\n /* istanbul ignore else */\n if (changed >= i.count) {\n break;\n }\n /* istanbul ignore else */\n if (\n k.toLowerCase().indexOf(i.word) >= 0 &&\n k.indexOf('`') < 0\n ) {\n tokens[tokens.indexOf(k)] = k.replace(\n i.regex,\n '`$&`'\n );\n changed++;\n }\n }\n item[`match_${f}`] = tokens.join(' ');\n break;\n }\n }\n }\n }\n // Get field with the most relevent match\n for (const f of fields) {\n const field = field_list[f];\n /* istanbul ignore else */\n if (field.index < item.match_index && field.index >= 0) {\n item.match_index = field.index;\n item.match = f;\n }\n }\n return (\n item.match_index >= 0 &&\n item.match &&\n match_count >= parts.length\n );\n });\n } else {\n results = item_list;\n }\n // Sort by order of relevence then name\n results.sort((a, b) => {\n const diff = a.match_index - b.match_index;\n return diff === 0 ? a.name.localeCompare(b.name) : diff;\n });\n return results;\n}\n\n/**\n * Convert a match string from `filterList` to renderable HTML\n * @param str Match string to change\n */\nexport function matchToHighlight(str: string): string {\n /* istanbul ignore else */\n if (str) {\n str = str.replace(\n /\\`[a-zA-Z0-9\\@\\.\\_]*\\`/g,\n '$&'\n );\n str = str.replace(/\\`/g, '');\n }\n return str;\n}\n\n/**\n * Convert time string to ms from UTC epoch for today\n * @param time Time string in the format `HH:mm`\n */\nexport function timeToDate(time: string): number {\n const parts = time.split(':');\n const date = DateNow(new Date())\n .setValue({\n hour: +parts[0],\n minute: +parts[1],\n })\n .startOfValue('minute');\n return date.ms;\n}\n\n/**\n * Generate a random number\n * @param ceil Biggest value to generate not inclusive\n * @param floor Smallest value to generate. Defaults to 0\n */\nexport function randomInt(ceil: number, floor: number = 0) {\n return Math.floor(Math.random() * (ceil - floor)) + floor;\n}\n\n/**\n * Get time format string for locale\n * @param isLowerCaseAmPm - if true, we use lowercase for am/pm.\n */\nexport function timeFormatString(): string {\n return is24HourTime() ? 'HH:mm' : 'h:mma';\n}\n\nexport const hoursMinutes = (): string => (is24HourTime() ? 'HH:mm' : 'h:mma');\n\nexport function dayJsTimeFormatString(): string {\n return is24HourTime() ? 'HH:mm' : 'h:mma';\n}\n\nexport const dayJsHoursMinutes = (): string =>\n is24HourTime() ? 'HH:mm' : 'h:mm';\n\n/**\n * Converts a timeZone name into a date object.\n * @param timeZoneName - name of timezone\n */\nexport const timezoneNameToDate = (\n timeZoneName: string | undefined\n): DateTZ | undefined => {\n let zone: DateTZ | undefined;\n if (timeZoneName) {\n try {\n zone = DateNow(new Date()).toZone(timeZoneName);\n } catch (e) {\n // invalid timezone. Suppress logs here.\n // console.error(e);\n }\n }\n return zone;\n};\n\nexport const timezoneDisplay = (date: DateTZ) =>\n !!date ? `${date.formatDate('ZZZZ')}` : '';\nexport const gmtOffsetDisplay = (date: DateTZ) =>\n !!date ? `(GMT${date.formatDate('ZZ')})` : '';\n\n/**\n * Returns a full time with timezone.\n * @param date\n */\nexport function timeWithZoneFormatString(date: DateTZ): string {\n return `${date\n .formatDate(timeFormatString())\n .toLocaleLowerCase()} ${timezoneDisplay(date)}`;\n}\n\nexport function timeWithGmtOffsetFormatString(date: DateTZ): string {\n return `${date\n .formatDate(timeFormatString())\n .toLocaleLowerCase()} ${gmtOffsetDisplay(date)}`;\n}\n\n/**\n * Returns a full start end range.\n *\n * Start and end both use lowercase am/pm markers (c.f. timeFormatString).\n * @param startDateTz start time DateTZ object\n * @param endDateTz end time DateTZ object\n */\nexport function startEndTimeFormatString(\n startDateTz: DateTZ,\n endDateTz: DateTZ\n): string {\n return `${startDateTz\n .formatDate(timeFormatString())\n .toLocaleLowerCase()}-${endDateTz\n .formatDate(timeFormatString())\n .toLocaleLowerCase()}`;\n}\n\n/**\n * Returns a full start end range with timezone.\n *\n * Start and end both use lowercase am/pm markers (c.f. timeFormatString).\n * @param startDateTz start time DateTZ object\n * @param endDateTz end time DateTZ object\n */\nexport function startEndTimeWithZoneFormatString(\n startDateTz: DateTZ,\n endDateTz: DateTZ\n): string {\n return `${startDateTz\n .formatDate(timeFormatString())\n .toLocaleLowerCase()}-${endDateTz\n .formatDate(timeFormatString())\n .toLocaleLowerCase()} ${gmtOffsetDisplay(startDateTz)}`;\n}\n\n/**\n * Returns a full date with weekday day month year.\n * @param date\n * @param comma optional boolean to display a comma after the month\n */\nexport function dateLocalFormatString(date: DateTZ, comma?: boolean): string {\n if (comma) {\n return date.formatLocalDate('cccc d MMMM, yyyy');\n }\n return date.formatLocalDate('cccc d MMMM yyyy');\n}\n\nexport function dateBuildingFormatString(\n date: DateTZ,\n comma?: boolean\n): string {\n if (comma) {\n return date.formatDate('cccc d MMMM, yyyy');\n }\n return date.formatDate('cccc d MMMM yyyy');\n}\n\nexport function shorterLocalDateFormatString(\n date: DateTZ,\n comma?: boolean\n): string {\n if (comma) {\n return date.formatLocalDate('ccc d MMM, yyyy');\n }\n return date.formatLocalDate('ccc d MMM yyyy');\n}\n\nexport function shorterBuildingDateFormatString(\n date: DateTZ,\n comma?: boolean\n): string {\n if (comma) {\n return date.formatDate('ccc d MMM, yyyy');\n }\n return date.formatDate('ccc d MMM yyyy');\n}\n\n/** Whether locale string is displayed in 24 hour time */\nexport function is24HourTime(): boolean {\n const date = new Date();\n const localeString = date\n .toLocaleTimeString(\n document.querySelector('html').getAttribute('lang') ||\n navigator.language\n )\n .toLowerCase();\n return localeString.indexOf('am') < 0 && localeString.indexOf('pm') < 0;\n}\n\n/* istanbul ignore next */\n/**\n * Downloads a file to the users computer with the given filename and contents\n * @param filename Name of the file to download\n * @param contents Contents of the file to download\n */\nexport function downloadFile(filename: string, contents: string) {\n const element = document.createElement('a');\n element.setAttribute(\n 'href',\n 'data:text/plain;charset=utf-8,' +\n encodeURIComponent('\\uFEFF' + contents)\n );\n element.setAttribute('download', filename);\n\n element.style.display = 'none';\n document.body.appendChild(element);\n\n element.click();\n\n document.body.removeChild(element);\n}\n\n/**\n * Parse raw CSV data into a JSON object\n * @param csv CSV data to parse\n */\nexport function csvToJson(csv: string) {\n const lines = csv.split('\\n');\n let fields = lines.splice(0, 1)[0].split(',');\n fields = fields.map((v) => v.replace('\\r', ''));\n const list: any[] = [];\n for (const line of lines) {\n let parts = line.split(',');\n parts = parts.map((v) => v.replace('\\r', ''));\n /* istanbul ignore else */\n if (parts.length >= fields.length) {\n const item: any = {};\n for (let i = 0; i <= parts.length; i++) {\n let part = null;\n part = parts[i];\n /* istanbul ignore else */\n if (part !== undefined) {\n item[(fields[i] || '').split(' ').join('_').toLowerCase()] =\n part;\n }\n }\n list.push(item);\n }\n }\n\n return list;\n}\n\n/**\n * Convert javascript array to CSV string\n * @param json Javascript array to convert\n */\nexport function jsonToCsv(json: HashMap[]) {\n /* istanbul ignore else */\n if (json instanceof Array && json.length > 0) {\n const keys = Object.keys(json[0]);\n const valid_keys = keys.filter((key) => json[0].hasOwnProperty(key));\n return `${valid_keys.join(',')}\\n${json\n .map((item) =>\n valid_keys\n .map((key) => {\n return typeof item[key] !== 'boolean'\n ? `\"${item[key] || ''}\"`\n : item[key];\n })\n .join(',')\n )\n .join('\\n')}`;\n }\n return '';\n}\n\n/* istanbul ignore next */\n/**\n * detect IE\n * returns version of IE or false, if browser is not Internet Explorer\n */\nexport function detectIE() {\n var ua = window.navigator.userAgent;\n\n var msie = ua.indexOf('MSIE ');\n if (msie > 0) {\n // IE 10 or older => return version number\n return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\n }\n\n var trident = ua.indexOf('Trident/');\n if (trident > 0) {\n // IE 11 => return version number\n var rv = ua.indexOf('rv:');\n return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\n }\n\n var edge = ua.indexOf('Edge/');\n if (edge > 0) {\n // Edge (IE 12+) => return version number\n return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);\n }\n\n // other browser\n return false;\n}\n\n/**\n * Grab point details from mouse or touch event\n * @param event Event to grab details from\n */\nexport function eventToPoint(event: MouseEvent | TouchEvent): Point {\n if (!event) {\n return { x: -1, y: -1 };\n }\n if (event instanceof MouseEvent) {\n return { x: event.clientX, y: event.clientY };\n } else {\n return event.touches && event.touches.length > 0\n ? { x: event.touches[0].clientX, y: event.touches[0].clientY }\n : { x: -1, y: -1 };\n }\n}\n\n/* istanbul ignore next */\n/**\n * Flatten nested array\n * @param an_array Array to flatten\n */\nexport function flatten(an_array: T[]) {\n const stack = [...an_array];\n const res = [];\n while (stack.length) {\n // pop value from stack\n const next = stack.pop();\n if (Array.isArray(next)) {\n // push back array items, won't modify the original input\n stack.push(...next);\n } else {\n res.push(next);\n }\n }\n // reverse to restore input order\n return res.reverse();\n}\n\nconst seed = xmur3('PlaceOS');\nconst rand = sfc32(0x9e3779b9, 0x243f6a88, 0xb7e15162, seed());\n\nexport function predictableRandomInt(ceil: number = 100, floor: number = 0) {\n return Math.floor(rand() * (ceil - floor)) + floor;\n}\n\n// https://stackoverflow.com/questions/521295/seeding-the-random-number-generator-in-javascript\nfunction xmur3(str) {\n for (var i = 0, h = 1779033703 ^ str.length; i < str.length; i++)\n (h = Math.imul(h ^ str.charCodeAt(i), 3432918353)),\n (h = (h << 13) | (h >>> 19));\n return function () {\n h = Math.imul(h ^ (h >>> 16), 2246822507);\n h = Math.imul(h ^ (h >>> 13), 3266489909);\n return (h ^= h >>> 16) >>> 0;\n };\n}\n\nfunction sfc32(a, b, c, d) {\n return function () {\n a >>>= 0;\n b >>>= 0;\n c >>>= 0;\n d >>>= 0;\n var t = (a + b) | 0;\n a = b ^ (b >>> 9);\n b = (c + (c << 3)) | 0;\n c = (c << 21) | (c >>> 11);\n d = (d + 1) | 0;\n t = (t + d) | 0;\n c = (c + t) | 0;\n return (t >>> 0) / 4294967296;\n };\n}\n\nexport function isLessThanBreakpoint(breakpoint: number): boolean {\n if (window) {\n return window.innerWidth < breakpoint;\n }\n return false;\n}\n\nexport function toTitleCase(str: string): string {\n return typeof str === 'string'\n ? str\n .toLowerCase()\n .split(' ')\n .map(function (word) {\n return word.replace(word[0], word[0].toUpperCase());\n })\n .join(' ')\n : '';\n}\n","\nimport { Directive, OnDestroy } from '@angular/core';\nimport { BaseClass } from './base.class';\nimport { SpaceImageObject } from '@mckinsey-converge/base';\nimport { BehaviorSubject } from 'rxjs';\n\n@Directive({\n selector: 'a-very-basic-component-image-that-should-not-be-used'\n})\nexport class ImageDirective extends BaseClass implements OnDestroy {\n public foundImages?: SpaceImageObject[];\n public loadImages?: BehaviorSubject\n public ngOnDestroy(): void {\n this.destroy();\n }\n}","import {\n Directive,\n ElementRef,\n HostListener\n} from '@angular/core';\n\n@Directive({\n selector: 'input[type=number], input[numbersOnly]'\n})\nexport class NumbersOnlyDirective {\n\n constructor(private _el: ElementRef) {\n }\n\n @HostListener('input', ['$event']) onInputChange(event) {\n const initalValue = this._el.nativeElement.value;\n this._el.nativeElement.value = initalValue.replace(/[^0-9]*/g, '');\n if (initalValue !== this._el.nativeElement.value) {\n event.stopPropagation();\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'replace'\n})\nexport class ReplacePipe implements PipeTransform {\n\n transform(value: string, from: string = '_', to: string = ' '): string {\n return (value|| '').split(from).join(to);\n }\n}\n","export * from './lib/bookings.module';\nexport * from './lib/bookings.actions'\nexport * from './lib/bookings.reducer'\nexport * from './lib/bookings.types'\nexport * from './lib/bookings.utils'\n","\nimport { IBookingQueryOptions, PaginatedBooking } from '@mckinsey-converge/data-common';\nimport { \n createLoadingAction\n} from '../../../loading/src/lib/loading.actions';\n\nimport {\n MyBookingsState,\n MyBookingsStoreState,\n} from './bookings.types';\nimport {\n createAction,\n props\n} from '@ngrx/store';\n\nexport const bookingStateSelector = (state: MyBookingsStoreState) => state.bookings;\n\nexport const loadBookingsWithQuery = createAction('[Bookings] Load Bookings with query', props());\n\nexport const loadHomepageBookingsResults = createLoadingAction('HomepageBookings', 'homepage');\n\nexport const loadUpcomingBookingsResults = createLoadingAction('UpcomingBookings', 'upcoming');\n\nexport const loadPastBookingsResults = createLoadingAction('PastBookings', 'past');\n\nexport const loadCancelledBookingsResults = createLoadingAction('CancelledBookings', 'cancelled');\n\nexport const loadBookingByIdResults = createLoadingAction('BookingById', 'bookingById');\n\nexport const clearBookingByIdResults = createAction('[BookingById] Clear Booking Data');\n","import { Injectable } from '@angular/core';\nimport {\n Actions,\n Effect,\n ofType\n} from '@ngrx/effects';\nimport {\n IBookingQueryOptions,\n BookingsPaginatedService\n} from '../../../data-common/src/lib/bookings';\nimport {\n createLoadingEffect,\n LoadingAction\n} from '@mckinsey-converge/loading';\nimport {\n loadHomepageBookingsResults,\n loadPastBookingsResults,\n loadUpcomingBookingsResults,\n loadCancelledBookingsResults,\n loadBookingsWithQuery,\n loadBookingByIdResults\n} from './bookings.actions';\nimport { mergeMap } from 'rxjs/operators';\nimport {\n\n} from './bookings.utils';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\n\n@Injectable()\nexport class BookingsEffects {\n constructor(private actions: Actions,\n private bookingService: BookingsPaginatedService) {\n }\n\n @Effect()\n public afterBookingsRequestResultsLoadOthersEffect = this.actions.pipe(\n ofType(loadBookingsWithQuery),\n mergeMap((action: LoadingAction) => {\n const date = new DateTZ({date: action.from})\n const yourBookingsRequest = {\n email: action.email,\n pagination: true,\n limit: null,\n offset: action.offset,\n show_cancelled: false,\n sort: 'start_epoch asc',\n filters: {\n end_epoch: `>=${date.subtractValue({ minutes: 5 }).seconds}`,\n },\n include_rooms: true\n };\n const upcomingRequest = {\n email: action.email,\n pagination: true,\n limit: null,\n offset: action.offset,\n show_cancelled: false,\n sort: 'start_epoch asc',\n filters: {\n end_epoch: `>=${date.seconds}`,\n },\n include_rooms: true\n };\n const pastRequest = {\n email: action.email,\n pagination: true,\n limit: null,\n offset: action.offset,\n show_cancelled: false,\n sort: 'start_epoch desc',\n filters: {\n start_epoch: `>${date.subtractValue({ hours: 48 }).seconds}`,\n end_epoch: `<${date.seconds}`,\n },\n include_rooms: true\n };\n const cancelledRequest = {\n email: action.email,\n pagination: true,\n limit: null,\n offset: action.offset,\n show_cancelled: true,\n sort: 'start_epoch desc',\n filters: {\n start_epoch: `>${date.subtractValue({ hours: 48 }).seconds}`,\n },\n include_rooms: true\n };\n const byIdRequest = {\n email: action.email,\n id: action.id,\n pagination: true,\n limit: 1,\n include_rooms: true\n };\n\n const effects = [];\n switch(action.target) {\n case 'upcoming':\n effects.push(loadUpcomingBookingsResults.request(upcomingRequest));\n break;\n case 'past':\n effects.push(loadPastBookingsResults.request(pastRequest));\n break;\n case 'cancelled':\n effects.push(loadCancelledBookingsResults.request(cancelledRequest));\n break;\n case 'bookingById':\n effects.push(loadBookingByIdResults.request(byIdRequest));\n break\n case 'homepage':\n effects.push(loadHomepageBookingsResults.request(yourBookingsRequest));\n // effects.push(loadPastBookingsResults.request(pastRequest));\n break\n default:\n }\n return effects;\n })\n );\n\n @Effect()\n public loadHomepageBookingsResultsEffect = createLoadingEffect(this.actions, loadHomepageBookingsResults,\n (action) => this.bookingService.userBookings(action, `homepage-${action.filters?.start_epoch || ''}${action.filters?.end_epoch || ''}`));\n\n @Effect()\n public loadUpcomingBookingsResultsEffect = createLoadingEffect(this.actions, loadUpcomingBookingsResults,\n (action) => this.bookingService.userBookings(action, `upcoming-${action.filters?.start_epoch || ''}${action.filters?.end_epoch || ''}`));\n \n @Effect()\n public loadPastBookingsResultsEffect = createLoadingEffect(this.actions, loadPastBookingsResults,\n (action) =>\n this.bookingService.userBookings(action, `past-${action.filters?.start_epoch || ''}${action.filters?.end_epoch || ''}`));\n\n @Effect()\n public loadCancelledBookingsResultsEffect = createLoadingEffect(this.actions, loadCancelledBookingsResults,\n (action) =>\n this.bookingService.userBookings(action, `cancelled-${action.filters?.start_epoch || ''}${action.filters?.end_epoch || ''}`));\n\n @Effect()\n public loadBookingByIdResultsEffect = createLoadingEffect(this.actions, loadBookingByIdResults,\n (action) => \n this.bookingService.userBookings(action, `bookingById-${action.id}`));\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\nimport { bookingsReducer } from './bookings.reducer';\nimport { BookingsEffects } from './bookings.effects';\n\n@NgModule({\n imports: [\n CommonModule,\n EffectsModule.forFeature([BookingsEffects]),\n StoreModule.forFeature('bookings', bookingsReducer)\n ]\n})\nexport class BookingsModule {\n}\n","import { LoadingModel } from '@mckinsey-converge/loading';\nimport {\n createReducer,\n on\n} from '@ngrx/store';\nimport {\n loadHomepageBookingsResults,\n loadUpcomingBookingsResults,\n loadPastBookingsResults,\n loadCancelledBookingsResults,\n loadBookingByIdResults,\n clearBookingByIdResults,\n} from './bookings.actions';\nimport { MyBookingsState } from './bookings.types';\n \nimport { \n BookingFormState,\n clearBookingFormData,\n clearRoomFilters,\n openBookingSurvey,\n storeBookingFormData,\n storeRoomFilters\n} from '@mckinsey-converge/data-common';\n\n\nexport const initialBookingsState: MyBookingsState = {\n query: LoadingModel.empty(),\n homepage: LoadingModel.empty(),\n upcoming: LoadingModel.empty(),\n past: LoadingModel.empty(),\n cancelled: LoadingModel.empty(),\n bookingById: LoadingModel.empty(),\n};\n\nexport const bookingsReducer = createReducer(initialBookingsState,\n on(clearBookingByIdResults, (state: MyBookingsState) => ({\n ...state,\n bookingById: LoadingModel.empty(),\n }) as MyBookingsState),\n ...loadHomepageBookingsResults.ons,\n ...loadUpcomingBookingsResults.ons,\n ...loadPastBookingsResults.ons,\n ...loadCancelledBookingsResults.ons,\n ...loadBookingByIdResults.ons,\n );\n\n\n\n export const initialBookingFormState: BookingFormState = {\n activeFormFilters: []\n };\n \n export const bookingFormReducer = createReducer(initialBookingFormState,\n on(storeBookingFormData, (state: BookingFormState, action) => {\n return {\n ...state,\n activeForm: {\n ...state.activeForm,\n ...action.payload\n }\n } as BookingFormState;\n }),\n on(clearBookingFormData, state => ({\n ...state,\n activeForm: undefined\n }) as BookingFormState),\n on(openBookingSurvey, state => ({\n ...state,\n bookingCompleted: new Date()\n }) as BookingFormState),\n on(storeRoomFilters, (state: BookingFormState, action) => {\n return {\n ...state,\n activeFormFilters: action.payload\n } as BookingFormState;\n }),\n on(clearRoomFilters, (state: BookingFormState) => ({\n ...state,\n activeFormFilters: initialBookingFormState.activeFormFilters\n }) as BookingFormState)\n );\n \n","import { Booking } from '@mckinsey-converge/data-common';\nimport { SelectOption } from '@mckinsey-converge/ui';\n\nexport const mapBookingToSelectOption = (booking?: Booking): SelectOption => booking ? ({\n value: booking.id,\n display: booking.name\n}) : undefined;\n","export * from './lib/buildings.module';\nexport * from './lib/buildings.actions'\nexport * from './lib/buildings.types'\nexport * from './lib/buildings.reducer'\n","import { \n createLoadingAction,\n} from '../../../loading/src/lib/loading.actions';\nimport {\n Building,\n BuildingCity,\n} from '../../../data-common/src/lib/organisation/building.class';\nimport {\n BuildingLevel,\n} from '../../../data-common/src/lib/organisation/level.class'\nimport {\n Organisation,\n} from '../../../data-common/src/lib/organisation/organisation.class'\nimport { createSelector } from '@ngrx/store';\nimport {\n BuildingState,\n BuildingStoreState\n} from './buildings.types';\n\nexport const loadBuildings = createLoadingAction('Buildings', 'data');\n\nexport const buildingStateSelector = (state: BuildingStoreState) => state.buildings;\n\nexport const selectLoadBuildingsSuccess = createSelector(buildingStateSelector, loadBuildings.selectors.optionalSuccess);\n\n/**\n * Groups buildings by city\n */\nexport const selectBuildingOptionsGroupedByCity = createSelector(loadBuildings.selectors.optionalSuccess, (success) => {\n if (success) {\n const mapped = new Map();\n success.forEach(s => {\n const found = Array.from(mapped.keys()).find(c => c.name === s.city);\n let list = found ? mapped.get(found) : undefined;\n if (!list) {\n list = [];\n mapped.set({\n name: s.city,\n timezone: s.timezone\n }, list);\n }\n list.push(s);\n });\n return mapped;\n }\n return new Map();\n});\n\nexport const selectLevelByZoneId = createSelector(selectLoadBuildingsSuccess,\n (buildings, param: string) => {\n if (buildings) {\n return buildings.map(b => b.levels.find((l: BuildingLevel) => l.id === param))\n ?.[0] ?? undefined;\n }\n return undefined;\n });\n","import { Injectable } from '@angular/core';\nimport {\n Actions,\n Effect,\n ofType\n} from '@ngrx/effects';\nimport {\n Organisation,\n OrganisationService\n} from '../../../data-common/src/lib/organisation';\nimport { loadBuildings } from './buildings.actions';\nimport {\n createLoadingEffect,\n LoadingAction,\n Payload\n} from '@mckinsey-converge/loading';\nimport { loadOrganisations } from '../../../organisation/src/lib/organisation.actions';\nimport { map } from 'rxjs/operators';\n\n\n@Injectable()\nexport class BuildingsEffects {\n\n constructor(private actions: Actions,\n private organizationService: OrganisationService) {\n\n }\n\n @Effect()\n public loadBuildings = createLoadingEffect(this.actions, loadBuildings,\n (action) => this.organizationService.loadBuildingsWithOrg(action));\n\n @Effect()\n public loadBuildingsAfterOrg = this.actions.pipe(\n ofType(loadOrganisations.success),\n map((action: LoadingAction>) => loadBuildings.request(action.payload)));\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EffectsModule } from '@ngrx/effects';\nimport { BuildingsEffects } from './buildings.effects';\nimport { StoreModule } from '@ngrx/store';\nimport { buildingsReducer } from './buildings.reducer';\n\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule,\n EffectsModule.forFeature([\n BuildingsEffects\n ]),\n StoreModule.forFeature('buildings', buildingsReducer)\n ]\n})\nexport class BuildingsModule {\n}\n","import { createReducer } from '@ngrx/store';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { loadBuildings } from './buildings.actions';\nimport { BuildingState } from './buildings.types';\n\nexport const initialBuildingState: BuildingState = {\n data: LoadingModel.empty()\n};\n\nexport const buildingsReducer = createReducer(initialBuildingState,\n ...loadBuildings.ons\n);\n","export * from './lib/data-common.module';\nexport * from './lib/booking';\nexport * from './lib/bookings';\nexport * from './lib/catering';\nexport * from './lib/location';\nexport * from './lib/organisation';\nexport * from './lib/spaces';\nexport * from './lib/users';\nexport * from './lib/app.service';\nexport * from './lib/hotkeys.service';\nexport * from './lib/base.service';\nexport * from './lib/base-api.class';\nexport * from './lib/reports'\nexport * from './lib/service-manager.class';\nexport * from './lib/settings.service';\nexport * from './lib/spec-helpers';\nexport * from './lib/settings.interfaces';\nexport * from './lib/validation.utilities';\nexport * from './lib/status.interfaces';\nexport * from './lib/recurrence/recurrence.utils';\nexport * from './lib/close-modal-dialog-service';\nexport * from './lib/validation.utilities';\nexport * from './lib/collapse-accordion-service';","import { HashMap } from '@mckinsey-converge/base';\n\n/**\n * Convert map into a query string\n * @param map Key value pairs to convert\n */\nexport function toQueryString(map: HashMap) {\n let str = '';\n if (map) {\n for (const key in map) {\n if (map.hasOwnProperty(key) && map[key] !== undefined && map[key] !== null) {\n str += `${(str ? '&' : '')}${key}=${map[key]}`;\n }\n }\n }\n return str;\n}\n","import {\n ApplicationRef,\n Injectable,\n NgZone,\n} from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { take, first } from 'rxjs/operators';\n\nimport { ComposerService } from '@placeos/composer';\nimport { PlaceOSOptions } from '@placeos/ts-client';\nimport { HeapIoService } from '@acaprojects/ngx-heap-io';\n\nimport {\n BehaviorSubject,\n Observable,\n Subject\n} from 'rxjs';\n\nimport {\n ApplicationLoadingState,\n BaseClass,\n ConsoleStream,\n log\n} from '@mckinsey-converge/base';\nimport { SettingsService } from './settings.service';\n\nimport { HotkeysService } from './hotkeys.service';\nimport {\n ApplicationIcon,\n ComposerSettings\n} from './settings.interfaces';\nimport { EnvironmentService } from '../../../environment/src/lib/environment.service'; // '@mckinsey-converge/environment';\nimport {\n Store\n} from '@ngrx/store';\nimport { selectCurrentUser } from '../../../user/src/lib/user.actions';\nimport { UserStoreState } from '../../../user/src/lib/user.types';\nimport { Booking } from './bookings';\nimport { filter } from 'rxjs/operators';\n\n\ndeclare global {\n interface Window {\n application: ApplicationService;\n mock: {\n enabled: boolean;\n backend: any;\n };\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApplicationService extends BaseClass {\n /** Map of state variables for Service */\n protected _subjects: {\n [key: string]: BehaviorSubject | Subject;\n } = {};\n /** Map of observables for state variables */\n protected _observers: { [key: string]: Observable } = {};\n _kioskFormFilter: boolean;\n\n constructor(\n public store: Store,\n public analytics: HeapIoService,\n private _app_ref: ApplicationRef,\n private _zone: NgZone,\n private _title: Title,\n private _settings: SettingsService,\n private _hotkeys: HotkeysService,\n private _composer: ComposerService,\n private _snackbar: MatSnackBar,\n private _environment: EnvironmentService\n ) {\n super();\n this.set('system', null);\n this.set('title', 'Home');\n this.set('loading', {});\n this.set('CONCIERGE.day_view.viewing', null);\n this.set('undo', new BehaviorSubject<{\n action: 'series' | 'booking',\n booking: Booking\n } | null>(null));\n\n this.set('APP.breakdown', false);\n\n this._app_ref.isStable.pipe(first(_ => _)).subscribe(() => {\n this._zone.run(() => {\n this.log('APP', `Application has stablised.`);\n this.waitForSettings();\n });\n });\n }\n\n public set kioskFormFilter(isIt: boolean) {\n this._kioskFormFilter = isIt;\n }\n\n public get kioskFormFilter():boolean {\n return this._kioskFormFilter \n }\n\n /** Analytics service */\n public get Analytics() {\n return {};\n }\n\n /** Hotkeys service */\n public get Hotkeys() {\n return this._hotkeys;\n }\n\n /**\n * Get a setting from the settings service\n * @param key Name of the setting. i.e. nested items can be grabbed using `.` to seperate key names\n */\n public setting(key: string): any {\n return this._settings.get(key);\n }\n\n /**\n * Title of the page\n */\n public set title(value: string) {\n const title_suffix = this.setting('app.title');\n this.set('title', value);\n this._title.setTitle(`${value ? value + ' | ' : ''}${title_suffix}`);\n }\n\n /**\n * Title of the page\n */\n public get title(): string {\n return this._title.getTitle();\n }\n\n /** Root API Endpoint */\n public get endpoint() {\n return `/api/staff/`;\n }\n\n /** Root API Endpoint for engine */\n public get engine_endpoint() {\n return this._composer.auth.api_endpoint + '/';\n }\n\n /** Whether settings has been loaded */\n public get has_settings(): boolean {\n return this._settings.is_initialised;\n }\n\n /**\n * Create notification popup\n * @param type CSS Class to add to the notification\n * @param message Message to display on the notificaiton\n * @param action Display text for the callback action\n * @param on_action Callback of action on the notification\n * @param icon Icon to render to the left of the notification message\n */\n public notify(\n type: string,\n message: string,\n action: string = 'OK',\n on_action?: () => void,\n icon: ApplicationIcon = {\n type: 'icon',\n class: 'material-icons',\n content: 'info'\n }\n ): void {\n const snackbar_ref = this._snackbar.open(message, action, {\n panelClass: [type],\n duration: 5000\n });\n this.subscription(\n 'snackbar_close',\n snackbar_ref.afterDismissed().subscribe(() => {\n this.unsub('snackbar_close');\n this.unsub('notify');\n })\n );\n if (action) {\n on_action = on_action || (() => snackbar_ref.dismiss());\n this.subscription(\n 'notify',\n snackbar_ref.onAction().subscribe(() => on_action())\n );\n }\n }\n\n /**\n * Create success notification popup\n * @param msg Message to display on the notificaiton\n * @param action Display text for the callback action\n * @param on_action Callback of action on the notification\n */\n public notifySuccess(msg: string, action?: string, on_action?: () => void): void {\n const icon: ApplicationIcon = {\n type: 'icon',\n class: 'material-icons',\n content: 'done'\n };\n this.notify('success', msg, action, on_action, icon);\n }\n\n /**\n * Create error notification popup\n * @param msg Message to display on the notificaiton\n * @param action Display text for the callback action\n * @param on_action Callback of action on the notification\n */\n public notifyError(msg: string, action?: string, on_action?: () => void): void {\n const icon: ApplicationIcon = {\n type: 'icon',\n class: 'material-icons',\n content: 'error'\n };\n this.notify('error', msg, action, on_action, icon);\n }\n\n /**\n * Create warning notification popup\n * @param msg Message to display on the notificaiton\n * @param action Display text for the callback action\n * @param on_action Callback of action on the notification\n */\n public notifyWarn(msg: string, action?: string, on_action?: () => void): void {\n const icon: ApplicationIcon = {\n type: 'icon',\n class: 'material-icons',\n content: 'warning'\n };\n this.notify('warn', msg, action, on_action, icon);\n }\n\n /**\n * Create info notification popup\n * @param msg Message to display on the notificaiton\n * @param action Display text for the callback action\n * @param on_action Callback of action on the notification\n */\n public notifyInfo(msg: string, action?: string, on_action?: () => void): void {\n this.notify('info', msg, action, on_action);\n }\n\n /**\n * Log data to the browser console\n * @param type Type of message\n * @param msg Message body\n * @param args array of argments to log to the console\n * @param stream Stream to emit the console on. 'debug', 'log', 'warn' or 'error'\n * @param force Whether to force message to be emitted when debug is disabled\n */\n public log(\n type: string,\n msg: string,\n args?: any,\n stream: ConsoleStream = 'debug',\n force: boolean = false\n ): void {\n log(type, msg, args, stream, force);\n }\n\n /**\n * Get the current value of the named property\n * @param name Property name\n */\n public get(name: string): U {\n return this._subjects[name] && this._subjects[name] instanceof BehaviorSubject\n ? (this._subjects[name] as BehaviorSubject).getValue()\n : null;\n }\n\n /**\n * Listen to value change of the named property\n * @param name Property name\n * @param next Callback for value changes\n */\n public listen(name: string): Observable {\n if (!this._observers[name]) {\n this.set(name, null);\n }\n return this._observers[name];\n }\n\n /**\n * Update the value of the named property\n * @param name Property name\n * @param value New value\n */\n public set(name: string, value: U): void {\n if (!this._subjects[name]) {\n this._subjects[name] = new BehaviorSubject(value);\n this._observers[name] = this._subjects[name].asObservable();\n } else {\n this._subjects[name].next(value);\n }\n }\n\n /** Wait for settings to be initialised before setting up the application */\n private waitForSettings() {\n // Wait until the settings have loaded before initialising\n this._settings.initialised.pipe(first(_ => _)).subscribe(() => this.init());\n }\n\n /**\n * Initialise application services\n */\n private init(): void {\n this.setupComposer();\n this.subscription('currentUser', this.store.select(selectCurrentUser)\n .pipe( filter(user => user !== undefined) )\n .pipe(take(1))\n .subscribe((user: any) => {\n // Once we know we have the user loaded.\n this.setupAnalytics(user?.fmno);\n })\n );\n this._composer.initialised.pipe(first(_ => _)).subscribe(() => {\n this._initialised.next(true);\n });\n // Add service to window if in debug mode\n if (window.debug) {\n window.application = this;\n }\n }\n\n /**\n * Initialise the composer library comms\n */\n private setupComposer(): void {\n this.log('SYSTEM', 'Setup up composer...');\n const loading: ApplicationLoadingState = this.get('loading');\n loading.composer = {\n message: 'Initialising service connection',\n state: 'loading'\n };\n this.set('loading', loading);\n // Get application settings\n const settings: ComposerSettings = this._settings.get('composer') || {};\n const protocol = settings.protocol || location.protocol;\n const host = settings.domain || location.hostname;\n const port = settings.port || location.port;\n const url = settings.use_domain ? `${protocol}//${host}:${port}` : location.origin;\n const route = host.includes('localhost') && port === '4200' ? '' : settings.route || '';\n const mock =\n this._settings.get('mock') ||\n location.href.includes('mock=true') ||\n localStorage.getItem('mock') === 'true';\n // Generate configuration object\n const config: PlaceOSOptions = {\n scope: 'public',\n host: `${host}:${port}`,\n auth_uri: `${url}/auth/oauth/authorize`,\n token_uri: `${url}/auth/token`,\n redirect_uri: `${location.origin}${route}/oauth-resp.html`,\n handle_login: !settings.local_login,\n mock\n };\n this._composer.setup(config);\n loading.composer = {\n message: 'Initialising service connection',\n state: 'complete'\n };\n this.set('loading', loading);\n }\n\n private setupAnalytics(fmno: string) {\n this.log('HEAP', `Loading heap ${this._environment?.heap_io_id}`);\n // Default Heap app ID via the default setting\n const heapIo = this._settings.get('app.heap_io');\n if (this._environment?.heap_io_id) {\n // Apply Heap app ID via the environmental setting\n heapIo.app_id = this._environment.heap_io_id;\n }\n if (heapIo) {\n this.analytics.load(heapIo);\n if (fmno) {\n this.analytics.identify(fmno);\n }\n } else {\n this.log('HEAP', `Heap could not be found for the current frontend ${this._settings.frontend}`);\n }\n }\n\n}\n","import { Subject } from 'rxjs';\n\nimport {\n BaseClass,\n HashMap\n} from '@mckinsey-converge/base';\nimport {\n ServiceLike,\n ServiceManager\n} from './service-manager.class';\n\nexport type ApiEventType = 'value_change' | 'item_saved' | 'reset' | 'other';\n\nexport interface ApiEvent {\n type: ApiEventType;\n metadata: T;\n}\n\n\nexport class BaseDataClass extends BaseClass {\n /** Subject for emitting events on the object */\n protected readonly event_subject = new Subject();\n /** Observable for events on this object */\n public readonly events = this.event_subject.asObservable();\n /** Unique Identifier of the object */\n public readonly id: string;\n /** Human readable name of the object */\n public readonly name: string;\n /** Email address associated with the object */\n public readonly email: string;\n /** Map of local property names to server ones */\n protected _server_names: HashMap = {};\n\n /** Service for managing model on the server */\n protected get _service(): ServiceLike {\n return ServiceManager.serviceFor(BaseDataClass);\n }\n\n constructor(raw_data: HashMap) {\n super();\n this.id = raw_data.id || raw_data.zone_id || raw_data.email || '';\n this.name = raw_data.name || '';\n this.email = `${raw_data.email || ''}`.toLowerCase();\n }\n\n /**\n * Save pending changes to server\n */\n public save(): Promise {\n if (this._service) {\n const form = this.toJSON();\n return new Promise((resolve, reject) => {\n const promise = this.id\n ? this._service.update(this.id, form)\n : this._service.add(form);\n promise.then(\n (d) => {\n this.event_subject.next({ type: 'item_saved', metadata: d });\n resolve(d);\n },\n (_) => reject(_)\n );\n });\n } else {\n Promise.reject('No service to process request');\n }\n }\n\n /**\n * Delete this item from the server\n */\n public delete(): Promise {\n if (this.id) {\n return this._service.delete(this.id);\n }\n }\n\n /**\n * Run task for this item on the service\n * @param task_name Name of the task\n * @param parameters Parameters to pass to the task request\n */\n public runTask(task_name: string, parameters: HashMap): Promise {\n if (this.id) {\n return this._service.task(this.id, task_name, parameters);\n }\n }\n\n /**\n * Convert object into plain object\n */\n public toJSON(this: BaseDataClass): HashMap {\n const obj: any = { ...this };\n // Remove local private members\n delete obj._service;\n delete obj._changes;\n delete obj.event_subject;\n delete obj.events;\n // Remove parent private members\n delete obj._timers;\n delete obj._intervals;\n delete obj._subscriptions;\n delete obj._server_names;\n delete obj._initialised;\n // Convert remaining members to be public\n const keys = Object.keys(obj);\n for (const key of keys) {\n if (key[0] === '_') {\n const new_key = this._server_names[key.substring(1)] || key.substring(1);\n obj[new_key] = obj[key];\n delete obj[key];\n } else if (obj[key] === undefined) {\n delete obj[key];\n }\n }\n return obj;\n }\n\n /**\n * Make a copy of this object\n */\n public clone(): BaseDataClass {\n return new BaseDataClass(this);\n }\n\n /**\n * Make a copy of this object without identification data\n */\n public duplicate(): BaseDataClass {\n return new BaseDataClass({ ...this, id: null, email: null });\n }\n}\n","import { ComposerService } from '@placeos/composer';\nimport { BehaviorSubject, Observable, of, Subject, Subscriber } from 'rxjs';\n\nimport { BaseDataClass } from './base-api.class';\nimport { BaseClass, HashMap } from '@mckinsey-converge/base';\nimport { ApplicationService } from './app.service';\nimport { toQueryString } from './api.utilities';\nimport { SettingsService } from './settings.service';\nimport { catchError, map } from 'rxjs/operators';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\n\nexport interface IEngineResponse {\n results: HashMap[];\n total: number;\n}\n\nexport class BaseAPIService extends BaseClass {\n /** Application service */\n public parent: ApplicationService;\n /** Display name of the service */\n protected _name: string;\n /** API Route of the service */\n protected _api_route: string;\n /** Map of state variables for Service */\n protected _subjects: { [key: string]: BehaviorSubject | Subject } = {};\n /** Map of observables for state variables */\n protected _observers: { [key: string]: Observable } = {};\n /** Map of poll subscribers for API endpoints */\n protected _subscribers: { [key: string]: Subscriber } = {};\n /** Map of promises for Service */\n protected _promises: { [key: string]: Promise } = {};\n /** Comparison function for service items */\n protected _compare: (a: T, b: T) => boolean = (a, b) =>\n a === b || (a as any).id === (b as any).id;\n /** Default filter function for list method */\n protected _list_filter: (a: T) => boolean = (a) => !!a;\n\n /** Http Client */\n protected get http() {\n return this._composer.http;\n }\n constructor(protected _composer: ComposerService,\n protected settingsService: SettingsService) {\n super();\n this._name = 'Base';\n this._api_route = 'base';\n this.set('list', []);\n }\n\n /**\n * Injects concierge into form_data.\n */\n private injectConcierge(form_data: HashMap) {\n // we only send it over when concierge, since the BE may check for presence rather than\n // if its true or not.\n if (this.settingsService.concierge) {\n return { ...form_data, concierge: true }\n }\n return form_data;\n }\n\n /**\n * Initailise service\n */\n public init() {\n this.load().then(\n (_) => this._initialised.next(true),\n (err) => this.timeout('init', () => this.init(), 1000)\n );\n }\n\n /**\n * Get API route for the service\n * @param engine Whether endpoint is using the application API or engine API\n */\n public route(engine: boolean = false) {\n const endpoint = engine\n ? this._composer.auth.api_endpoint\n : '/api/staff';\n return `${endpoint}/${this._api_route}`;\n }\n\n /** API Route of the service */\n public get api_route() {\n return this._api_route;\n }\n\n /**\n * Get the current value of the named property\n * @param name Property name\n */\n public get(name: string): U {\n if (!this._observers[name]) {\n this.set(name, null);\n }\n return (this._subjects[name] as BehaviorSubject).getValue();\n }\n\n /**\n * Listen to value change of the named property\n * @param name Property name\n * @param next Callback for value changes\n */\n public listen(name: string): Observable {\n if (!this._observers[name]) {\n this.set(name, null);\n }\n return this._observers[name];\n }\n\n /**\n * Update the value of the named property\n * @param name Property name\n * @param value New value\n */\n protected set(name: string, value: U): void {\n if (!this._subjects[name]) {\n this._subjects[name] = new BehaviorSubject(value);\n this._observers[name] = this._subjects[name].asObservable();\n } else {\n this._subjects[name].next(value);\n }\n }\n\n /**\n * Get list of loaded items\n * @param predicate Function for filtering the list\n */\n public filter(predicate: (a: T) => boolean = this._list_filter): T[] {\n const list: T[] = this.get('list');\n return list.filter(predicate);\n }\n\n /**\n * Get item with the given id from the loaded items\n * @param id ID of the item\n */\n public find(id: string): T {\n const list = this.get('list');\n return list.find((i) => i.id === id || (i.email?.toLowerCase() === id?.toLowerCase()));\n }\n\n /**\n * Query the index of the API route associated with this service\n * @param query_params Map of query paramaters to add to the request URL\n */\n public query(query_params: HashMap = {}): Promise {\n let engine = false;\n let cache = 1000;\n /* istanbul ignore else */\n if (query_params) {\n engine = !!query_params.engine;\n delete query_params.engine;\n cache = typeof query_params.cache !== 'boolean' ? query_params.cache || 1000 : 1000;\n typeof query_params.cache !== 'boolean' && delete query_params.cache;\n }\n let query = toQueryString(query_params);\n const key = `query|${query}`;\n if (!this._promises[key]) {\n // Bring back once implemented in the API\n // if (this.settingsService.concierge) {\n // query = query + '&check_access=true';\n // }\n this._promises[key] = new Promise((resolve, reject) => {\n const url = `${this.route(engine)}${query ? '?' + query : ''}`;\n let result: T[] | HashMap[] = [];\n this.http.get(url).subscribe(\n (d: IEngineResponse | HashMap[]) => {\n result =\n d && d instanceof Array\n ? d.map((i) => this.process(i))\n : d && !(d instanceof Array) && d.results\n ? (d.results as HashMap[])\n : d && !(d instanceof Array) && !d.results \n ? [d]\n : [];\n },\n (e) => {\n reject(e);\n this._promises[key] = null;\n },\n () => {\n resolve(result);\n this.timeout(key, () => (this._promises[key] = null), cache);\n }\n );\n });\n }\n return this._promises[key];\n }\n\n /**\n * query function version -2 - returns observable instead of promise...\n * Query the index of the API route associated with this service\n * @param query_params Map of query paramaters to add to the request URL\n */\n public queryObsr(query_params: HashMap = {}):Observable{\n let engine = false;\n let cache = 1000;\n /* istanbul ignore else */\n if (query_params) {\n engine = !!query_params.engine;\n delete query_params.engine;\n }\n let query = toQueryString(query_params);\n const key = `query|${query}`;\n const url = `${this.route(engine)}${query ? '?' + query : ''}`;\n return this.http.get(url).pipe(\n map((d: IEngineResponse | HashMap[]) => this.processApiResult(d) ),\n catchError((error: any, result?: T) => {\n console.log(error);\n return of(result as T);\n })\n );;\n }\n\n\n /**\n * \n * @param d \n * @returns \n */\n processApiResult(d: IEngineResponse | HashMap[]): IEngineResponse | HashMap[]{\n let result: IEngineResponse | HashMap[] =\n d && d instanceof Array\n ? d.map((i) => this.process(i))\n : d && !(d instanceof Array) && d.results\n ? (d.results as HashMap[])\n : d && !(d instanceof Array) && !d.results \n ? [d]\n : [];\n return result;\n }\n\n /**\n * query function version -2 - returns observable instead of promise...\n * Query the index of the API route associated with this service\n * @param query_params Map of query paramaters to add to the request URL\n */\n public queryRoomsForQR(query_params: HashMap = {}):Observable{\n let engine = false;\n let cache = 1000;\n /* istanbul ignore else */\n if (query_params) {\n engine = !!query_params.engine;\n delete query_params.engine;\n }\n let query = toQueryString(query_params);\n const key = `query|${query}`;\n const url = `${this.route(engine)}${query ? '?' + query : ''}`;\n return this.http.get(url);\n }\n \n /**\n * Query the API route for a sepecific item\n * @param id ID of the item\n * @param query_params Map of query paramaters to add to the request URL\n */\n public show(id: string, query_params: HashMap = {}): Promise {\n let engine = false;\n /* istanbul ignore else */\n if (query_params) {\n engine = !!query_params.engine;\n delete query_params.engine;\n }\n const query = toQueryString(query_params);\n const key = `show|${id}|${query}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const url = `${this.route(engine)}/${id}${query ? '?' + query : ''}`;\n let result: T = null;\n this.http.get(url).subscribe(\n (d) => (result = this.process(d)),\n (e) => {\n reject(e);\n this._promises.new_item = null;\n },\n () => {\n resolve(result);\n this.timeout(key, () => (this._promises[key] = null), 1000);\n }\n );\n });\n }\n return this._promises[key];\n }\n\n /**\n * Make post request for a new item to the service\n * @param form_data Data to post to the server\n * @param query_params Map of query paramaters to add to the request URL\n */\n public add(form_data: HashMap, query_params: HashMap = {}): Promise {\n /* istanbul ignore else */\n if (!this._promises.new_item) {\n this._promises.new_item = new Promise((resolve, reject) => {\n const query = toQueryString(query_params);\n const url = `${this.route(query_params.engine)}${query ? '?' + query : ''}`;\n let result: T = null;\n this.http.post(url, this.injectConcierge(form_data)).subscribe(\n (d) => (result = this.process(d)),\n (e) => {\n reject(e);\n this.analyticsEvent(`create-${this._name.toLowerCase()}-failed`);\n this._promises.new_item = null;\n },\n () => {\n resolve(result);\n this.set('list', this.updateList(this.get('list'), [result]));\n this.analyticsEvent(`create-${this._name.toLowerCase()}-success`);\n this._promises.new_item = null;\n }\n );\n });\n }\n return this._promises.new_item;\n }\n\n /**\n * Perform API task for the given item ID\n * @param id ID of the item\n * @param task_name Name of the task\n * @param form_data Map of data to pass to the API\n * @param method Verb to use for request\n */\n public \n task(\n id: string,\n task_name: string,\n form_data: HashMap = {},\n method: 'post' | 'get' = 'post'\n ): Promise {\n const query = toQueryString(this.injectConcierge(form_data));\n const key = `task|${id}|${task_name}|${query}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const post_data = { ...form_data, id, _task: task_name };\n const url = `${this.route(false)}/${id}/${task_name}`;\n let result: any;\n const request =\n method === 'post'\n ? this.http.post(url, post_data)\n : this.http.get(`${url}${query ? '?' + query : ''}`);\n request.subscribe(\n (d) => (result = d),\n (e) => {\n reject(e);\n this.analyticsEvent(\n `${this._name.toLowerCase()}-task-${task_name}-failed`,\n id\n );\n delete this._promises[key];\n },\n () => {\n resolve(result as U);\n this.analyticsEvent(\n `${this._name.toLowerCase()}-task-${task_name}-success`,\n id\n );\n this.timeout(key, () => delete this._promises[key], 1000);\n }\n );\n });\n }\n return this._promises[key];\n }\n\n\n /**\n * V-2\n * Perform API task for the given item ID\n * @param id ID of the item\n * @param task_name Name of the task\n * @param form_data Map of data to pass to the API\n * @param method Verb to use for request\n */\n public taskObsr( \n id: string, \n task_name: string, \n form_data: HashMap = {}, \n method: 'post' | 'get' = 'post' ):Observable{\n const query = toQueryString(this.injectConcierge(form_data));\n let engine = false;\n let cache = 1000;\n const post_data = { ...form_data, id, _task: task_name };\n const url = `${this.route(false)}/${id}/${task_name}`;\n let result: any;\n\n const request = method === 'post'\n ? this.http.post(url, post_data)\n : this.http.get(`${url}${query ? '?' + query : ''}`);\n \n return request;\n }\n\n\n /**\n * Make put request for changes to the item with the given id\n * @param id ID of the item being updated\n * @param form_data New values for the item\n * @param query_params Map of query paramaters to add to the request URL\n */\n public update(id: string, form_data: HashMap, query_params: HashMap = {}): Promise {\n const key = `update|${id}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const query = toQueryString(this.injectConcierge(query_params));\n const url = `${this.route(query_params.engine)}/${id}${query ? '?' + query : ''}`;\n let result: T = null;\n this.http.put(url, this.injectConcierge(form_data)).subscribe(\n (d) => (result = this.process(d)),\n (e) => {\n reject(e);\n this.analyticsEvent(`update-${this._name.toLowerCase()}-failed`, id);\n this._promises[key] = null;\n },\n () => {\n resolve(result);\n this.set(\n 'list',\n this.updateList(this.removeItem(this.get('list'), { id } as any), [\n result\n ])\n );\n this.analyticsEvent(`update-${this._name.toLowerCase()}-success`, id);\n this._promises[key] = null;\n }\n );\n });\n }\n return this._promises[key];\n }\n\n\n /**\n * update function version -2 - returns observable instead of promise...\n * @param id url id with respect to update api\n * @param form_data data to be update \n * @param should_inject_concierge common value to be set to add concierge: true to the query url and body\n * @param query_params Map of query paramaters to add to the request URL\n */\n public updateObsr(id: string, form_data: HashMap, should_inject_concierge: Boolean = false, query_params: HashMap = {}):Observable{\n const query = should_inject_concierge ? toQueryString(this.injectConcierge(query_params)) : false;\n const url = `${this.route(query_params.engine)}/${id}${query ? '?' + query : ''}`;\n const body = should_inject_concierge ? this.injectConcierge(form_data) : form_data;\n \n return this.http.put(url, body)\n .pipe(\n map((d: IEngineResponse | HashMap[]) => this.processApiResult(d) \n ),\n catchError((error: any, result?: T) => {\n console.log(error);\n this.analyticsEvent(`update-${this._name.toLowerCase()}-failed`, id);\n return of(error as T);\n })\n );\n\n }\n\n /**\n * update function version -2 - returns observable instead of promise...\n * @param form_data data to be update \n * @param should_inject_concierge common value to be set to add concierge: true to the query url and body\n * @param query_params Map of query paramaters to add to the request URL\n */\n public uploadSpacePhotos(apiSubRoute: string, form_data: HashMap, should_inject_concierge: Boolean = false, query_params: HashMap = {}):Observable{\n const query = should_inject_concierge ? toQueryString(this.injectConcierge(query_params)) : false;\n const url = `${this.route(query_params.engine)}/${apiSubRoute}${query ? '?' + query : ''}`;\n const body = should_inject_concierge ? this.injectConcierge(form_data) : form_data;\n\n const token = sessionStorage.length ? JSON.parse(sessionStorage.getItem('OAUTH.params')).access_token : '';\n\n const headers = new HttpHeaders({\n 'Authorization': `Bearer ${token}`,\n });\n \n const requestOptions = { headers: headers };\n\n // return this.httpClient.post(url, body, {\n // ...requestOptions \n // });\n\n return this.http.post(url, body);\n\n }\n\n /**\n * Make delete request for the given item\n * @param id ID of item\n */\n public delete(id: string, q: HashMap = {}): Promise {\n const key = `delete|${id}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const query = toQueryString(q);\n const url = `${this.route()}/${id}${query ? '?' + query : ''}`;\n this.http.delete(url).subscribe(\n (_) => null,\n (e) => {\n reject(e);\n this._promises[key] = null;\n },\n () => {\n this.set('list', this.removeItem(this.get('list'), { id } as any));\n this._promises[key] = null;\n resolve();\n }\n );\n });\n }\n return this._promises[key];\n }\n\n /**\n * Load initial data for the service\n */\n protected async load(): Promise {\n }\n\n /**\n * Post analytics event for this service\n * @param action Name of the action to post\n */\n protected analyticsEvent(action: string, label?: string) {\n // if (this.parent && this.parent.Analytics) {\n // this.parent.Analytics.track(this._name, { desc: `${this.parent.name.toLowerCase()}-${action}`, label });\n // }\n }\n\n /**\n * Convert raw API data into a valid API Object\n * @param raw_item Raw API data\n */\n protected process(raw_item: HashMap): T {\n return raw_item as T;\n }\n\n /**\n * Update recorded list of items\n * @param old_list Old list of items\n * @param list List of updated items\n * @param compareFn Function to compare items to remove duplicates\n */\n public updateList(\n old_list: T[],\n list: T[],\n compareFn: (a: T, b: T) => boolean = this._compare\n ): T[] {\n /* istanbul ignore else */\n if (!list || list.length === 0) {\n return old_list;\n }\n const new_list: T[] = [];\n const mixed_list = [...list, ...old_list];\n /* istanbul ignore else */\n if (!compareFn) {\n compareFn = this._compare;\n }\n for (const item of mixed_list) {\n const found = new_list.find((i) => compareFn(i, item));\n /* istanbul ignore else */\n if (!found) {\n new_list.push(item);\n }\n }\n return new_list;\n }\n\n /**\n * Remove the given item from the given list\n * @param list List of items\n * @param item Item to remove\n * @param compareFn Function to compare items\n */\n protected removeItem(list: T[], item: T, compareFn?: (a: T, b: T) => boolean) {\n const new_list = [];\n /* istanbul ignore else */\n if (!compareFn) {\n compareFn = this._compare;\n }\n list.forEach((i) => (compareFn(item, i) ? null : new_list.push(i)));\n return new_list;\n }\n}\n","import { SelectOption } from '../../../../ui/src/lib/options/select-option';\nimport { Building } from '../organisation/building.class';\nimport { Booking } from '../bookings/booking.class';\nimport { User } from '../users';\nimport { Space } from '../spaces';\nimport { SpaceBookingRuleOptions } from '../spaces/space.class';\nimport {\n BookingFormData,\n} from './booking.form.data';\nimport { statusFromBookings } from '../bookings/booking.utilities';\nimport { rulesForSpace } from '../bookings/space.utilities';\nimport { SpaceStatus } from '../bookings/space.types';\nimport { SpaceFeatures } from '../spaces/space.class';\nimport { HashMap } from 'libs/base/src/lib/types.utilities';\n\nexport const spaceExtraFeatureToDisplayName = (feature: SpaceFeatures) => {\n switch (feature) {\n case SpaceFeatures.VideoConference:\n return 'Video conference (VC)';\n case SpaceFeatures.ConferencePhone:\n return 'Conference phone';\n case SpaceFeatures.WirelessContentSharing:\n return 'Wireless content sharing';\n case SpaceFeatures.FlipChart:\n return 'Flip chart';\n case SpaceFeatures.Glassboard:\n return 'Glassboard';\n case SpaceFeatures.ElectronicWhiteboard:\n return 'Whiteboard';\n case SpaceFeatures.ConferenceRoom:\n return 'Conference';\n case SpaceFeatures.TeamRoom:\n return 'Team';\n case SpaceFeatures.PartnerOffice:\n return 'Partner';\n case SpaceFeatures.PhoneBooth:\n return 'Phone booth';\n case SpaceFeatures.NaturalLight:\n return 'Room with window only (natural light)';\n case SpaceFeatures.BoardRoom:\n return 'Boardroom room style';\n case SpaceFeatures.CocktailRoom:\n return 'Cocktail room style';\n case SpaceFeatures.TheatreRoom:\n return 'Theatre room style';\n case SpaceFeatures.WorkshopRoom:\n return 'Workshop room style';\n case SpaceFeatures.UShapeRoom:\n return 'U Shape room style';\n case SpaceFeatures.Miscellaneous:\n return 'Miscellaneous room style'\n case SpaceFeatures.Catering:\n return 'Rooms with catering';\n // TODO: add any special display handling here.\n default:\n return feature;\n }\n};\n\n\nexport const instantBookOption: SelectOption = {\n value: 'instant-book',\n display: 'Listing you can book without waiting for a host approval',\n shortDisplay: 'Instant book'\n};\nexport const instantBookOptions: SelectOption[] = [\n instantBookOption\n];\n\nexport const mapSpaceFeaturesToSelectOption = (f: SpaceFeatures): SelectOption => {\n const display = spaceExtraFeatureToDisplayName(f);\n return ({\n value: f,\n display,\n // Useful for long text, like that of the instant-book\n // option.\n //\n // We do not expect this option object to be modified\n // at any further point before it appears on screen -\n // although that may change in future releases.\n shortDisplay: display\n });\n};\n\nexport const roomEquipmentRequiredOptions: SelectOption[] = [\n SpaceFeatures.VideoConference,\n SpaceFeatures.ConferencePhone,\n SpaceFeatures.WirelessContentSharing,\n SpaceFeatures.FlipChart,\n SpaceFeatures.Glassboard,\n SpaceFeatures.ElectronicWhiteboard\n].map(mapSpaceFeaturesToSelectOption);\n\nexport const internalRoomTypeRequiredOptions: SelectOption[] = [\n SpaceFeatures.PartnerOffice,\n SpaceFeatures.ConferenceRoom,\n SpaceFeatures.TeamRoom,\n SpaceFeatures.PhoneBooth\n].map(mapSpaceFeaturesToSelectOption);\n\nexport const externalRoomTypeRequiredOptions: SelectOption[] = [\n SpaceFeatures.ConferenceRoom,\n SpaceFeatures.TeamRoom\n].map(mapSpaceFeaturesToSelectOption);\n\nexport const roomDetailsRequired: SelectOption[] = [\n SpaceFeatures.NaturalLight,\n SpaceFeatures.BoardRoom,\n SpaceFeatures.CocktailRoom,\n SpaceFeatures.TheatreRoom,\n SpaceFeatures.WorkshopRoom,\n SpaceFeatures.UShapeRoom,\n SpaceFeatures.Miscellaneous\n].map(mapSpaceFeaturesToSelectOption);\n\nexport const roomCateringAvailable: SelectOption[] = [\n SpaceFeatures.Catering,\n].map(mapSpaceFeaturesToSelectOption);\n\n/**\n * Defines the reason by which spaces are filtered out / missing.\n */\nexport enum SpaceFilterReason {\n /**\n * Spaces were shown and not all filtered out.\n */\n None = 'None',\n\n /**\n * If room filters are applied to the set of rooms,\n * and rooms are available if not applied by filtering.\n */\n Filters = 'Filters',\n\n /**\n * We check office rules first to determine if its been filtered.\n */\n OfficeRules = 'OfficeRules',\n\n /**\n * Fallback as the end case if no results are found.\n */\n DateTime = 'DateTime',\n\n /**\n * In case there are no results for a buiding but there are other office buidings in the same city.\n */\n AlternateBuildingsFound = 'AlternateBuildingsFound',\n\n /**\n * If room is non-bookable in the system\n */\n NonBookable = 'NonBookable'\n}\n\nexport interface FilteredSpaces {\n spaces: Space[] | undefined;\n reason: SpaceFilterReason;\n statusMap: HashMap;\n specificReason?: SpaceFilterReason;\n}\n\n/**\n * Filter spaces by filters locally. TBD in the future for real API pagination.\n *\n * @param formFilters - the set of filters to apply on the list of spaces.\n * @param spaces - the list of spaces to filter\n * @param activeForm - the landing page set of filters.\n * @param buildings - the list of buildings loaded, used to retrieve building-specific booking rules.\n * @param currentUser - the current user\n */\nexport const filterSpacesByAppliedFilters = (\n formFilters: SelectOption[],\n spaces: Space[] | undefined, // the resultshere are raw JSON Spaces, not an array of the Space class\n activeForm: BookingFormData,\n buildings: Building[] = [],\n currentUser: User | undefined,\n isStaffMap: boolean = false): FilteredSpaces => {\n const instantBook: boolean = formFilters.some(f => f.value === instantBookOption.value);\n const onlyCatering: boolean = formFilters.some(f => f.value === SpaceFeatures.Catering);\n // Drop incompatible spaces. If no filters were given, just return the array unchanged.\n const featureFilters = formFilters.filter(filter => ![instantBookOption.value, SpaceFeatures.Catering].includes(filter.value));\n const formFiltersEmpty = featureFilters.length === 0;\n\n // R--- refactor activeForm? Only after forms can handle dateTz\n // Blocked by date time input refactor\n const options: SpaceBookingRuleOptions = {\n duration: activeForm.duration,\n host: currentUser,\n dateTz: activeForm.dateTz,\n };\n let rulesCount = 0;\n let ruleReason = '';\n let excludedByFiltersCount = 0;\n const statusMap: HashMap = {};\n // console.group();\n const filteredSpaces = spaces?.map(space => space instanceof Space ? space : new Space(space)).filter(raw_space => {\n const space = new Space(raw_space); // Construct the full fledged space\n const building = buildings.find(b => space.zones.includes(b.id));\n const rules = rulesForSpace({\n time: options?.dateTz?.ms,\n duration: options.duration,\n user: options.host,\n rules: building?.booking_rules,\n space\n });\n ruleReason = rules.reason;\n let valid = !rules.hide;\n if (!valid) {\n rulesCount++;\n return false;\n }\n\n\n // Check for all the form filters ( except 'catering' )\n let hasAllFeatures: boolean;\n const internalRoomTypeFilters = [\n 'conference',\n 'meeting_room',\n 'partner',\n 'phone_booth',\n 'team_room',\n ];\n\n if (featureFilters.length === 0) {\n hasAllFeatures = true;\n } else if(featureFilters.every(f => internalRoomTypeFilters.includes(f.value))) { // If all featureFilters(selected filters) are present in internalRoomTypeFilters, make the filtering inclusive(return on first true) \n hasAllFeatures = featureFilters.some(f => space.featuresArray.includes(f.value));\n } else { // If any featureFilters(selected filters) are not present in internalRoomTypeFilters, make the filtering exclusive(return on first false)\n hasAllFeatures = featureFilters.every(f => space.featuresArray.includes(f.value));\n }\n\n const canBook = instantBook ? space.bookable : true;\n const matchesType = activeForm?.bookingType?.value === 'allRooms'\n ? true\n : space?.internal_or_external?.length\n ? space.internal_or_external === activeForm?.bookingType?.value\n : true;\n valid = valid && matchesType && (formFiltersEmpty || hasAllFeatures) && canBook;\n let hasCatering = building?.has_catering;\n if (space?.has_catering === false) {\n hasCatering = false;\n }\n // need the room catering to override.\n if (onlyCatering && !hasCatering) {\n valid = false;\n // console.log('Excluded by Catering');\n }\n\n // count this space if the only reason it can't be shown is because one of the filters excluded it\n if (!hasAllFeatures) {\n valid = false;\n // console.log('Excluded by Status');\n }\n\n const status = statusFromBookings(\n space.bookings.length ? space.bookings.map(b => new Booking(b)) : space.settings.bookings.map(b => new Booking(b)),\n space.bookable && !rules.hide,\n !rules.auto_approve,\n activeForm.dateTz,\n space\n );\n\n // only compute room availability here right now if instant book option is chosen and room still valid.\n if (instantBook && valid) {\n valid = status.status === SpaceStatus.Available;\n if (!valid) console.group('Excluded by Status');\n \n }\n\n\n /** \n * If there are rooms that are recurring but not available at all during the queried times, we filter them out from the results displayed on the page.\n * The \"Available\" status indicates whether a room can be booked during the queried times.\n * The \"isStaffMap\" flag- This helps to indicate that all occurrences of this room are booked during the queried times and are currently in use.\n * \"isStaffMap\" flag allows including such rooms in the list, which will be displayed in red on the map.\n */\n if(activeForm.is_recurrent && !space.availableOccurrences && !isStaffMap) {\n valid = false;\n }\n /** */\n\n // cache space status\n if (valid) {\n if(activeForm.is_recurrent && space.availableOccurrences && space.availableOccurrences<= space.totalOccurrences) {\n // space is available and requested for recurrence booking and few occurences are available to book then let the space select/bookable from map with limited availability\n statusMap[space.id] = !rules.auto_approve ? SpaceStatus.Requestable : SpaceStatus.Available;\n }else\n {\n statusMap[space.id] = status.status;\n }\n \n } else {\n excludedByFiltersCount++;\n }\n // console.log('Valid:', valid);\n return valid;\n });\n\n const buildingsInSameCity = buildings.filter(\n (_) =>activeForm?.location!==undefined && activeForm?.location?.length && _.city === activeForm?.location[0]?.meta?.building?.city\n ) || [];\n const alternateBuildings = buildingsInSameCity.filter(building =>\n !activeForm.location.some(locationItem =>\n locationItem.meta?.building?.id === building.id\n )\n );\n\n // console.groupEnd();\n let reason, specificReason = SpaceFilterReason.None;\n // console.log('Spaces:', filteredSpaces?.length, excludedByFiltersCount, rulesCount, ruleReason)\n if (filteredSpaces?.length === 0) {\n if (excludedByFiltersCount > 0 && (!formFiltersEmpty || onlyCatering)) {\n reason = SpaceFilterReason.Filters;\n } else if (rulesCount > 0) {\n reason = SpaceFilterReason.OfficeRules;\n } else if(alternateBuildings){\n reason = SpaceFilterReason.AlternateBuildingsFound;\n }\n else {\n reason = SpaceFilterReason.DateTime;\n }\n\n if (ruleReason === SpaceFilterReason.OfficeRules) {\n specificReason = SpaceFilterReason.OfficeRules;\n }\n }\n\n return { spaces: filteredSpaces, reason, statusMap, specificReason };\n};\n","import { BookingFormData } from './booking.form.data';\nimport {\n createAction,\n props\n} from '@ngrx/store';\nimport { Payload } from '../../../../loading/src/lib/loading.actions';;\nimport { SelectOption } from '../../../../ui/src/lib/options/select-option';\n\n\nexport const storeBookingFormData = createAction('[BookingForm] Store Form Data',\n props>>());\n\nexport const clearBookingFormData = createAction('[BookingForm] Clear Form Data');\n\nexport const storeRoomFilters = createAction('[BookingForm] Store Room Filters',\n props[]>>());\n\nexport const clearRoomFilters = createAction('[BookingForm] Clear Room Filters');\n\nexport const openBookingSurvey = createAction('[BookingSurvey] Open Survey Modal');\n","import { SelectOption } from '../../../../ui/src/lib/options/select-option';\nimport { RoomQueryOptions } from '../../../../rooms/src/lib/rooms.types';\nimport { User } from '../users/user.class';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\nimport { DaysOfWeek, RecurrencePeriod } from '../recurrence/recurrence.utils';\nimport { Building } from '../organisation';\n\nexport const DEFAULT_BOOKING_DURATION = 30;\n\nexport const internalBookingTypeOption = {\n value: 'internal',\n display: 'Internal',\n};\n\nexport const allBookingTypeOption = {\n value: 'allRooms',\n display: 'All Rooms',\n};\n\nexport const bookingTypeOptions: SelectOption[] = [\n internalBookingTypeOption,\n {\n value: 'external',\n display: 'External',\n }\n];\n\nexport const defaultRoomSizeOption = {\n value: '2',\n display: '3-9 People',\n};\n\nexport const roomSizeOptions: SelectOption[] = [\n {\n value: '1',\n display: '1-2 People',\n },\n defaultRoomSizeOption,\n {\n value: '3',\n display: '10+ People',\n }\n];\n\nexport const roomSizeOptionsKiosk: SelectOption[] = [\n ...roomSizeOptions,\n {\n value: '4',\n display: 'All Rooms',\n },\n];\n\nexport const roomCapacityToValue = (roomSize: string): number => {\n switch (roomSize) {\n case '1':\n return 1;\n case '2':\n return 3;\n case '3':\n return 10;\n case '4':\n return null;\n }\n};\n\nexport const roomMaxCapacityToValue = (roomSize: string): number => {\n switch (roomSize) {\n case '1':\n return 2;\n case '2':\n return 9;\n default:\n return null;\n }\n};\n\nexport interface BookingFormData {\n // R--- off the rails, define these \"any's\"\n id?: string;\n location: SelectOption[];\n dateTz: DateTZ;\n /**\n * Duration, in minutes.\n */\n duration: number;\n bookingType: SelectOption;\n roomSize: SelectOption;\n selectedRoom?: any;\n organiser?: SelectOption;\n title?: string;\n attendees?: any[];\n code?: string;\n notes?: string;\n head_count?: number;\n creator?: User;\n company?: any[];\n //Recurrence fields\n recurrence_period?: RecurrencePeriod;\n recurrence_interval?: number;\n recurrence_endTz?: DateTZ;\n recurrence_count?: number;\n recurrence_starts?: Array;\n recurrence_exceptions?: Array; //SHOULD BE DATETZ\n recurrence_days?: Array;\n timezone?: string;\n offset?: number;\n buildings?: Building[];\n is_recurrent?: boolean;\n is_multiroom?: boolean;\n action?: string; // helping to set staff app recurring action flag for edit/clone in the active form\n ignore?: string; // helping while editing - recurring series rooms search api call\n bookable?: boolean; // set while editing - recurring series rooms search api call\n occurrence_edits?: string[];\n opt_out?:boolean;\n nextBusinessDay?: boolean // set property if user room selection from next business day section on result page\n}\n\n/**\n * Converts form data into API query parameters.\n */\nexport const roomFormDataToQuery = (\n data: BookingFormData\n): RoomQueryOptions => {\n // remove all buildings chip from query\n const filteredLocationIds = data?.location\n .filter((l) => l.groupChild)\n .map((l) => l.value)\n .join(',');\n return {\n dateTz: data?.dateTz,\n duration: data?.duration,\n locations: filteredLocationIds,\n capacity: roomCapacityToValue(data?.roomSize?.value),\n capacity_max: roomMaxCapacityToValue(data?.roomSize?.value),\n\n is_recurrent: data?.is_recurrent,\n is_multiroom: data?.is_multiroom,\n recurrence_period: data?.recurrence_period,\n recurrence_interval: data?.recurrence_interval,\n recurrence_endTz: data?.recurrence_endTz,\n recurrence_count: data?.recurrence_count,\n recurrence_starts: data?.recurrence_starts,\n recurrence_exceptions: data?.recurrence_exceptions, //SHOULD BE DATETZ\n recurrence_days: data?.recurrence_days,\n timezone: data?.timezone,\n offset: data?.offset,\n buildings: data?.buildings,\n bookable: data?.bookable,\n ignore: data?.ignore\n };\n};\n","import { BookingFormState } from './booking.form.types';\nimport {\n DEFAULT_BOOKING_DURATION,\n defaultRoomSizeOption,\n internalBookingTypeOption\n} from './booking.form.data';\nimport { DateNow } from '@mckinsey-converge/date-tz';\n\nconst now = DateNow(new Date())\n\nexport const defaultTestBookingForm = (): BookingFormState => ({\n activeForm: {\n dateTz: now,\n duration: 2 * DEFAULT_BOOKING_DURATION,\n location: [],\n bookingType: internalBookingTypeOption,\n roomSize: defaultRoomSizeOption\n },\n activeFormFilters: []\n});\n","import { createSelector } from '@ngrx/store';\nimport {\n RoomStoreState\n} from '../../../../rooms/src/lib/rooms.types';\nimport {\n loadLaterThatDayResults,\n loadNextDayResults,\n loadRoomsForResults,\n roomStateSelector,\n loadByIdResults,\n loadDiffSizeResults,\n loadRoomsForResultsMap\n} from '../../../../rooms/src/lib/rooms.actions';\nimport {\n loadHomepageBookingsResults,\n loadUpcomingBookingsResults,\n loadPastBookingsResults,\n loadCancelledBookingsResults,\n loadBookingByIdResults,\n bookingStateSelector\n} from '../../../../bookings/src/lib/bookings.actions';\nimport { Building } from '../organisation/building.class';\nimport { BuildingStoreState } from '../../../../buildings/src/lib/buildings.types';\nimport { selectLoadBuildingsSuccess } from '../../../../buildings/src/lib/buildings.actions';\nimport { Space } from '../spaces/space.class';\nimport { User } from '../users/user.class';\nimport { selectCurrentUser } from '../../../../user/src/lib/user.actions';\nimport { UserStoreState } from '../../../../user/src/lib/user.types';\nimport { LoadingModel } from '../../../../loading/src/lib/loading.model';\nimport { SelectOption } from '../../../../ui/src/lib/options/select-option';\n\nimport {\n SpaceFilterReason,\n filterSpacesByAppliedFilters,\n FilteredSpaces\n} from './booking-filter.utils';\nimport {\n BookingFormData,\n internalBookingTypeOption,\n} from './booking.form.data';\nimport {\n BookingFormState,\n BookingStoreState,\n} from './booking.form.types';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\nimport { BookingAction, RecurrencePeriod, SeriesAction } from '../recurrence/recurrence.utils';\n\n\nexport const selectBookingFormsData =\n (state: BookingStoreState | RoomStoreState | BuildingStoreState | UserStoreState) =>\n (state as any).bookingForm as BookingFormState;\n\nexport const selectActiveForm = createSelector(selectBookingFormsData, state => {\n // Recreate because serialized form dateTz doesn't have DateTZ class methods\n if (!state.activeForm?.dateTz) {\n return state.activeForm\n }\n const { date, is_local_tz, building_tz} = state.activeForm?.dateTz;\n const endTzDate = state.activeForm?.recurrence_endTz?.date;\n const recurrence_endTz = endTzDate ? {\n recurrence_endTz : new DateTZ({ date: endTzDate.valueOf(), is_local_tz, building_tz })\n } : {};\n\n const recurrence_starts = state.activeForm?.recurrence_starts\n\t\t\t? {\n\t\t\t\t\trecurrence_starts: state.activeForm?.recurrence_starts.map( el =>\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// at final step of booking creation process recurrence_start becomes Array which need to be Array\n\t\t\t\t\t\t\t// To Do: Refactor - apps/staff/src/app/booking/booking-create/booking-form-base.component.ts lno: 186\n\t\t\t\t\t\t\treturn new DateTZ({ date: typeof el === 'number' ? el * 1000 : el.date.valueOf(), is_local_tz, building_tz })\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t: {};\n\n\n const recEditingSearchPayload = (state.activeForm.action === SeriesAction.EDIT && state.activeForm.is_recurrent)\n\t\t\t?\n\t\t {\n\t\t\t\tid: state.activeForm.id,\n\t\t\t\tignore: state.activeForm.ignore,\n\t\t\t\tbookable: state.activeForm.bookable\n\t\t\t}\n\t\t\t: {};\n\n\n\n\n return {\n ...state.activeForm,\n dateTz: new DateTZ({ date: date.valueOf(), is_local_tz, building_tz }),\n ...recurrence_endTz,\n ...recurrence_starts,\n\t\t\t\t...recEditingSearchPayload\n }\n});\n\nexport const selectBookingType = createSelector(selectActiveForm,\n (form) => form?.bookingType);\n\nexport const selectBookingLocations = createSelector(selectActiveForm,\n (form) => (form?.location || []).filter(f => !f.groupHeader));\n\nexport const selectIsInternal = createSelector(selectBookingType,\n (type) => type?.value === internalBookingTypeOption.value);\n\nexport const selectFormFilters = createSelector(selectBookingFormsData,\n (state) => state.activeFormFilters || []);\n\nconst selectRoomResultsFromState = createSelector(roomStateSelector,\n loadRoomsForResults.selectors.model);\n\nconst selectRoomResultsFromState_map = createSelector(roomStateSelector,\n loadRoomsForResultsMap.selectors.model);\n\nconst selectLaterThatDayResultsFromState = createSelector(roomStateSelector,\n loadLaterThatDayResults.selectors.model);\nconst selectNextDayResultsFromState = createSelector(roomStateSelector,\n loadNextDayResults.selectors.model);\nconst selectByIdResultsFromState = createSelector(roomStateSelector,\n loadByIdResults.selectors.model);\nconst selectDiffSizeResultsFromState = createSelector(roomStateSelector,\n loadDiffSizeResults.selectors.model);\n\nexport const selectHomepageBookingsResultsFromState = createSelector(bookingStateSelector,\n loadHomepageBookingsResults.selectors.model);\nexport const selectUpcomingBookingsResultsFromState = createSelector(bookingStateSelector,\n loadUpcomingBookingsResults.selectors.model);\nexport const selectPastBookingsResultsFromState = createSelector(bookingStateSelector,\n loadPastBookingsResults.selectors.model);\nexport const selectCancelledBookingsResultsFromState = createSelector(bookingStateSelector,\n loadCancelledBookingsResults.selectors.model);\nexport const selectBookingByIdResultsFromState = createSelector(bookingStateSelector,\n loadBookingByIdResults.selectors.model);\n\n/**\n * Wraps {@link filterSpacesByAppliedFilters} with {@link LoadingModel} interop.\n * This will only filter data if there is data to filter, and returns a success {@link LoadingModel}.\n * The \"isStaffMap\" flag- This helps to indicate that all occurrences of this room are booked during the queried times and are currently in use.\n * \"isStaffMap\" flag allows including such rooms in the list, which will be displayed in red on the map.\n */\nconst filterSpacesByAppliedFiltersIfSuccess = (\n results: LoadingModel,\n formFilters: SelectOption[],\n activeForm: BookingFormData,\n buildings: Building[] | undefined,\n currentUser: User | undefined,\n isStaffMap: boolean = false): LoadingModel => {\n const data = results.optionalSuccess;\n\n // don't filter model if no success found\n return !activeForm ? results.mutate({\n spaces: data, // the result here is a raw JSON Space, not the Space class\n reason: SpaceFilterReason.None,\n statusMap: {}\n }) : results.mutate(\n filterSpacesByAppliedFilters(formFilters, data, activeForm, buildings || activeForm.buildings, currentUser, isStaffMap));\n};\n\nexport const selectFilteredResults = createSelector(selectRoomResultsFromState,\n selectFormFilters,\n selectActiveForm,\n selectLoadBuildingsSuccess,\n selectCurrentUser,\n filterSpacesByAppliedFiltersIfSuccess);\n\nexport const selectMapFilteredResults = createSelector(selectRoomResultsFromState_map,\n selectActiveForm,\n selectLoadBuildingsSuccess,\n selectCurrentUser,\n (results, activeForm, buildings, currentUser, isStaffMap) => filterSpacesByAppliedFiltersIfSuccess(results, [], activeForm, buildings, currentUser, true));\n\nexport const selectFilteredLaterDayResults = createSelector(selectLaterThatDayResultsFromState,\n selectFormFilters,\n selectActiveForm,\n selectLoadBuildingsSuccess,\n selectCurrentUser,\n filterSpacesByAppliedFiltersIfSuccess);\n\nexport const selectFilteredNextDayResults = createSelector(selectNextDayResultsFromState,\n selectFormFilters,\n selectActiveForm,\n selectLoadBuildingsSuccess,\n selectCurrentUser,\n filterSpacesByAppliedFiltersIfSuccess);\n\n\nexport const selectFilteredByIdResults = createSelector(selectByIdResultsFromState,\n selectActiveForm,\n selectLoadBuildingsSuccess,\n selectCurrentUser,\n (results, activeForm, buildings, currentUser) => filterSpacesByAppliedFiltersIfSuccess(results, [], activeForm, buildings, currentUser));\n\nexport const selectFilteredDiffSizeResults = createSelector(selectDiffSizeResultsFromState,\n selectFormFilters,\n selectActiveForm,\n selectLoadBuildingsSuccess,\n selectCurrentUser,\n filterSpacesByAppliedFiltersIfSuccess);\n\n/**\n * Maps selected options by loaded buildings.\n */\nexport const selectSelectedBuildingOptions = createSelector(\n selectBookingLocations,\n selectLoadBuildingsSuccess,\n (locations, buildings) => (locations\n .map(l => buildings?.find(b => b.id === l.value))\n .filter(f => !!f) as Building[])\n);\n\n","import { Building, BuildingCity } from '../organisation/building.class';\nimport { Booking } from '../bookings/booking.class';\nimport { BuildingLevel } from '../organisation/level.class';\nimport { Space } from '../spaces/space.class';\nimport { SpacesService } from '../spaces/spaces.service';\nimport {\n timezoneDisplay,\n timezoneNameToDate,\n unique,\n ImageDirective,\n} from '@mckinsey-converge/base';\nimport { SelectOption } from '../../../../ui/src/lib/options/select-option';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n/**\n * If more than 3 are selected, we truncate location display.\n */\nconst MAX_ABBREV_LOCATIONS = 3;\n\nexport const mapBuildingToSelectOption = (\n city: string,\n building: Building\n): SelectOption => ({\n display: `${building.name} ${timezoneDisplay(\n timezoneNameToDate(building.timezone)\n )}`,\n dropdownOverride: `${building.code}-${building.name}, ${building.address}`,\n value: building.id,\n groupId: city,\n groupChild: true,\n shortDisplay: `${building.name} ${timezoneDisplay(\n timezoneNameToDate(building.timezone)\n )}`,\n meta: { building, city },\n});\n\nexport const mapCityToAllSelectOption = (\n city: BuildingCity\n): SelectOption => ({\n display: `${city.name} (All Offices) ${timezoneDisplay(\n timezoneNameToDate(city.timezone)\n )}`,\n value: city.name,\n groupHeader: true,\n groupId: city.name,\n shortDisplay: `${city.name} (All Offices) ${timezoneDisplay(\n timezoneNameToDate(city.timezone)\n )}`,\n meta: { city },\n});\n\n/**\n * Flattens a map of {@link BuildingCity} to {@link Building} array into a list of {@link SelectOption}.\n * @param grouped The grouping\n */\nexport const flattenDisplayOffices = (\n grouped: Map\n) => {\n const options: SelectOption[] = [];\n grouped.forEach((value, key) => {\n options.push(mapCityToAllSelectOption(key));\n value.forEach((b) =>\n options.push(mapBuildingToSelectOption(key.name, b))\n );\n });\n return options;\n};\n\n/**\n * This method will either add or remove a selected option from the selectedOptions list based on\n * these conditions:\n * 1. If the option EXISTS in the list AND is a groupHeader, de-select all of its children.\n * 2. If the option EXISTS in the list AND is a groupChild, remove it and its associated header from the list.\n * 3. If the option does NOT EXIST in the list AND is a groupHeader, select all other children.\n * 4. If the option does NOT EXIST in the list AND is a groupChild, add it to the list.\n *\n * Special note regarding item 4:\n * 4a. If that selection completes the children selection, select its associated header as well.\n */\nexport const toggleSelectedByGroup = (\n options: SelectOption[],\n selectedOptions: SelectOption[],\n option: SelectOption\n) => {\n if (selectedOptions.find((s) => s.value === option.value)) {\n return selectedOptions.filter((s) => {\n let filter = s.value !== option.value;\n // if group header, also remove any option that is the child of it.\n if (option.groupHeader) {\n filter =\n filter &&\n (!s.groupChild ||\n (s.groupChild && s.groupId !== option.groupId));\n } else if (option.groupChild) {\n // if child removing, remove the associated header.\n filter =\n filter &&\n (!s.groupHeader ||\n (s.groupHeader && s.groupId !== option.groupId));\n }\n return filter;\n });\n }\n // option does NOT EXIST\n // if adding header, add the other children to the selected list, ensuring no dupes.\n if (option.groupHeader) {\n const toSelect = options.filter(\n (v) =>\n v.groupChild &&\n v.groupId === option.value &&\n !selectedOptions.find((selected) => selected.value === v.value)\n );\n return [...selectedOptions, option, ...toSelect];\n }\n // add group child, add the group header if all satisfied\n const newGroup = [...selectedOptions, option];\n\n // check if we have selected all children from options by filtering down by city and checking if\n // they're in the selected options list.\n const remainingChildrenInGroup = options.filter(\n (o) =>\n o.groupChild &&\n o.groupId === option.groupId &&\n !newGroup.find((ng) => ng.value === o.value)\n );\n // if we dont have remaining children, add the group\n if (remainingChildrenInGroup.length === 0) {\n return [\n ...newGroup,\n options.find((o) => o.groupHeader && o.groupId === option.groupId),\n ];\n }\n return newGroup;\n};\n\n/**\n * If the list of locations are larger than {@link MAX_ABBREV_LOCATIONS}, then truncate\n * and display the remaining count.\n */\nexport const truncateLocationList = (\n locations: readonly SelectOption[]\n): string => {\n // comma separate the locations\n let truncatedLocations = [...locations];\n const shouldTruncate = locations.length > MAX_ABBREV_LOCATIONS;\n if (shouldTruncate) {\n truncatedLocations = truncatedLocations.splice(0, MAX_ABBREV_LOCATIONS);\n }\n let display = truncatedLocations\n .map((l) => l.shortDisplay || l.display)\n .join(', ');\n if (shouldTruncate) {\n display += `...(${locations.length})`;\n }\n return display;\n};\n\nexport const mapBuildingLevelToOption = (\n level?: BuildingLevel\n): SelectOption =>\n level\n ? {\n value: level.id,\n display: level.name,\n }\n : undefined;\n\n/**\n * Returns all levels included with the building, deduped.\n * @param buildings\n */\nexport const flattenBuildingsWithLevels = (buildings: Building[]) => {\n const flattenedLevels = unique(\n buildings.reduce((next: BuildingLevel[], building: Building) => {\n next.push(...building.levels);\n return next;\n }, []),\n 'id'\n );\n return {\n flattenedLevels,\n buildings,\n };\n};\n\n/** Gets route to image placeholder if room image isn't found */\n\nexport const placeholderRoute = (num: number): string => {\n let index: number;\n if (num <= 3) {\n index = num;\n } else if (num % 3 === 0) {\n index = 3;\n } else {\n index = 1;\n }\n return `assets/img/rooms/placeholder-${index}.png`;\n};\n\n/**\n * Method takes the rootFolderURL and fileSlug to create an array of three images\n * that should exist. If a room image exists, it replaces the placehoder image.\n */\nexport const setupRoomImages = (\n componentReference: ImageDirective,\n image_positions: number[],\n rootFolderURL: string,\n fileSlug: string,\n imagesLoaded: boolean = false\n): void => {\n let foundImages: any[] = image_positions.map((i) =>\n i ? { path: placeholderRoute(i) } : false\n );\n image_positions.forEach((n) => {\n const desiredImageName = `${rootFolderURL}${fileSlug}-part-${n}.png`;\n const desiredImage = location.pathname.includes('concierge') ? `${location.origin}/staff/${desiredImageName}` : desiredImageName;\n if (!imagesLoaded) {\n const tester = new Image();\n tester.onload = () => {\n // Will never run on unit test\n foundImages[n - 1] = { path: desiredImage };\n componentReference.foundImages = [...foundImages.slice()];\n componentReference?.loadImages && componentReference?.loadImages.next([...foundImages.slice()]);\n };\n tester.src = desiredImage;\n }\n\n // Force valid image output on unit test\n if (imagesLoaded) {\n foundImages[n - 1] = { path: desiredImage };\n componentReference.foundImages = foundImages.slice();\n }\n });\n};\n\nexport const bookingStatusDetails = (booking: Booking) => {\n const now = DateNow(new Date());\n let image = '';\n let text = '';\n let title = '';\n\n if (booking?.status) {\n const status = now > booking.endDateTz ? 'expired' : booking.status;\n switch (status) {\n case 'unavailable':\n image = 'assets/icon/booking_cancelled.svg';\n title = 'Unavailable';\n text = 'Unavailable';\n break;\n case 'declined':\n image = 'assets/icon/booking_cancelled.svg';\n title = 'Cancelled';\n text = 'Cancelled';\n break;\n case 'cancelled':\n image = 'assets/icon/booking_cancelled.svg';\n title = 'Cancelled';\n text = 'Cancelled';\n break;\n case 'expired':\n image = 'assets/icon/booking_expired.svg';\n title = 'Expired';\n text = 'Expired';\n break;\n case 'tentative':\n image = 'assets/icon/booking_pending.svg';\n title = 'Requested';\n text = 'Pending';\n break;\n case 'accepted':\n image = 'assets/icon/booking_confirmed.svg';\n title = 'Confirmed';\n text = 'Confirmed';\n break;\n case 'approved':\n image = 'assets/icon/booking_confirmed.svg';\n title = 'Confirmed';\n text = 'Confirmed';\n break;\n default:\n // TODO\n image = 'assets/icon/booking_expired.svg';\n title = 'Expired';\n text = 'Expired';\n break;\n }\n }\n return { text, title, image };\n};\n\nexport const roomHasCateringHours = (building: Building, space: Space) => {\n let hasCatering = building\n ? building.has_catering && building.catering_hours\n : false;\n // Room catering status as false overrides building status\n if (space?.has_catering === false) {\n hasCatering = false;\n }\n return hasCatering;\n};\n\nexport const cateringAllowed = (booking: Booking, building: Building) => {\n const status = bookingStatusDetails(booking);\n const disallowedStatus = ['declined', 'cancelled', 'expired'].includes(\n status.text\n );\n const opens = building?.catering_hours?.start;\n const closed = building?.catering_hours?.end;\n\n if (disallowedStatus) {\n return false;\n }\n\n if (typeof opens === 'undefined' || typeof closed === 'undefined') {\n return false;\n }\n\n // Catering time could be a decimal so convert to a date\n const openMinutes = opens * 60;\n const closeMinutes = closed * 60;\n\n const startOfDay = booking.startDateTz.startOfValue('day');\n const cateringOpenTime = startOfDay.addValue({ minutes: openMinutes });\n const cateringCloseTime = startOfDay.addValue({ minutes: closeMinutes });\n\n if (\n cateringOpenTime.ms <= booking.startDateTz.ms ||\n cateringCloseTime.ms > booking.startDateTz.ms\n ) {\n // Booking ends before catering opens\n if (booking.endDateTz.ms <= cateringOpenTime.ms) {\n return false;\n }\n // Booking starts after catering closes\n if (booking.startDateTz.ms > cateringCloseTime.ms) {\n return false;\n }\n\n // Start time is OK\n if (booking.startDateTz.ms > DateNow(new Date()).ms) {\n // Due to COVID, no orders are available once a meeting begins.\n return true;\n }\n }\n\n return false;\n};\n\nexport const checkCollisions = (\n service: SpacesService,\n booking: Booking\n): Promise => {\n return new Promise((resolve, reject) => {\n\n let availabilityParams: {\n room_ids: string;\n dateTz: DateTZ;\n duration: number;\n setup: number;\n breakdown: number;\n hide_bookings: boolean;\n [key: string]: any;\n } = {\n room_ids: booking.space.id,\n dateTz: booking.startDateTz,\n duration: booking.duration,\n setup: booking.setup[booking.space.email],\n breakdown: booking.breakdown[booking.space.email],\n hide_bookings: false,\n };\n\n if (booking.recurrence_type === \"master\" || booking.recurrence_type === null) {\n availabilityParams = {\n ...availabilityParams,\n ignore: booking?.icaluid,\n recurrence_count: booking?.recurrence_count,\n recurrence_period: booking?.recurrence_period,\n recurrence_endTz: booking?.recurrence_endTz,\n recurrence_interval: booking?.recurrence_interval,\n recurrence_starts: booking?.recurrence_starts,\n is_recurrent: booking?.is_recurrent,\n recurrence_days: booking?.recurrence_days\n } as typeof availabilityParams;\n }\n\n service\n .available(\n availabilityParams,\n null,\n false\n )\n .then(\n (list) => {\n const space = list.length ? list[0] : null;\n if (space) {\n if (!space.bookable) return reject('Has conflict');\n const setup = booking?.setup[space?.email] || 0;\n const breakdown = booking?.breakdown[space?.email] || 0;\n const start_time = booking?.startDateTz.seconds - setup;\n const end_time = booking.endDateTz.seconds + breakdown;\n\n const bookings = space.settings.bookings;\n // console.log('Bookings:', bookings);\n // Compare the existing bookings to see if any truely conflict.\n if (bookings.length) {\n const has_conflict = bookings.find(bkn => {\n const b_setup = bkn.setup[space.email] || 0;\n const b_breakdown = bkn.setup[space.email] || 0;\n const start = (bkn.start_epoch || bkn.start) - b_setup;\n const end = (bkn.end_epoch || bkn.end) + b_breakdown;\n return (\n (end_time > start && end_time <= end) || // Booking ends during the meeting\n (start_time >= start && start_time < end) || // Booking starts during a meeting\n (start_time <= start && end_time >= end) // Booking overlaps entire meeting\n ) && \n ( \n bkn.id !== booking.id \n || \n ( !!booking.is_recurrent && (booking.recurrence_type === \"master\" || booking.recurrence_type === null ) ) \n ?\n bkn.recurrence_master_id !== booking.id\n :\n false\n \n )\n\n\n\n });\n // Conflicts found, reject\n if (has_conflict) return reject('has booking conflict');\n }\n return resolve(space.bookable);\n }\n reject('space not found');\n },\n () => reject('available error')\n );\n });\n};\n\nexport const getStatusErrorMessage = (status?: number) => {\n let msg = '';\n switch (status) {\n\t\t\tcase 400:\n\t\t\t\tmsg = 'Apologies, the booking cannot be finalized because the current time has exceeded the scheduled start time for this booking. Please try again.';\n\t\t\t\tbreak;\n\t\t\tcase 403:\n\t\t\t\tmsg = 'Your do not have permission to update this booking.';\n\t\t\t\tbreak;\n\t\t\tcase 409:\n\t\t\t\tmsg = 'Sorry, your booking time conflicts with another booking.';\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tmsg = 'Your booking failed to update, please try again';\n }\n return msg;\n};\n","export * from './room-results/room-results.viewmodel'\nexport * from './booking-filter.utils'\nexport * from './booking.form.actions'\nexport * from './booking.form.data'\nexport * from './booking.form.spec-helpers'\nexport * from './booking.form.types'\nexport * from './booking.selectors'\nexport * from './booking.utils'","import { Space } from '../../spaces/space.class';\nimport { BuildingLevel } from '../../organisation/level.class';\nimport { Building } from '../../organisation/building.class';\n\nexport class RoomResultsViewModel {\n\n public levelDisplay: string;\n public title: string;\n public office: string;\n public capacity: string;\n\n constructor(public space: Space,\n public level?: BuildingLevel,\n public building?: Building) {\n\n this.levelDisplay = `Level ${this.space?.level?.short_name}`;\n this.title = this.space.local_name;\n this.office = this.building ? `(${this.building?.code}) ${this.building?.name}` : '';\n this.capacity = `Capacity: ${this.space.capacity} people`;\n }\n}\n\n/**\n * For each result from results, we find its level and building from the lists.\n */\nexport const mapResultsToViewModels = (results: Space[],\n flattenedLevels: BuildingLevel[],\n buildings: Building[]): RoomResultsViewModel[] =>\n results.map((r: Space) => {\n const level = flattenedLevels.find(l => r.zones.includes(l.id));\n const building = buildings.find(b => r.zones.includes(b.id));\n return new RoomResultsViewModel(\n r,\n level,\n building\n );\n });\n","import { Injectable, NgZone } from '@angular/core';\nimport { BehaviorSubject, combineLatest, of, Observable } from 'rxjs';\nimport {\n catchError,\n debounceTime,\n filter,\n first,\n map,\n shareReplay,\n switchMap,\n} from 'rxjs/operators';\nimport { BaseClass } from '@mckinsey-converge/base';\nimport { replaceBookings, timePeriodsIntersect } from './booking.utilities';\nimport { SpacesService } from '../spaces/spaces.service';\nimport { Booking } from '../bookings/booking.class';\nimport { Space } from '../spaces/space.class';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { OrganisationService } from '../organisation/organisation.service';\n\nexport type BookingType =\n | 'internal'\n | 'client'\n | 'external'\n | 'setup'\n | 'training'\n | 'interview'\n | 'declined';\n\nexport interface BookingFilters {\n /** List of zone ids to get bookings for */\n zone_ids?: string[];\n space_emails?: string[];\n hide_type?: BookingType[];\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BookingStateService extends BaseClass {\n /** List of bookings */\n private _poll = new BehaviorSubject(false);\n /** List of bookings */\n private _long_poll = new BehaviorSubject<'month' | ''>('');\n private _long_poll_week = new BehaviorSubject<'week' | ''>('');\n /** List of bookings */\n private _bookings = new BehaviorSubject([]);\n /** List of meeting count per date */\n public _noOfMeetings = new BehaviorSubject<{}>({});\n /** Filter details for bookings */\n private _filters = new BehaviorSubject({});\n /** Currently active date */\n private _dateTz = new BehaviorSubject(DateNow(new Date()));\n /** Currently displayed zone */\n private _zone = new BehaviorSubject(' ');\n /** Whether booking data is being loaded */\n private _loading = new BehaviorSubject(false);\n /** Observable for filter and booking list changes */\n private _state = combineLatest(\n this._bookings,\n this._filters,\n this._dateTz,\n this._zone\n );\n\n /** Observable for list of bookings */\n public readonly bookings = this._bookings.asObservable();\n /** Observable for active date */\n public readonly dateTz = this._dateTz.asObservable();\n /** Observable for active zone */ // R-- zone was this._date.asObservable(); this looks like a mistake but it exists from the beginning of time\n public readonly zone = this._dateTz.asObservable();\n /** Observable for loading state of bookings */\n public readonly loading = this._loading.asObservable();\n\n public get booking_date() {\n // When this class is initialized this._dateTz is local timezone\n return this._dateTz.value;\n }\n\n public get timezone() {\n return localStorage.getItem('CONCIERGE.timezone');\n }\n\n /** Obsevable for filtered list of bookings */\n public readonly filtered = this._state.pipe(\n map((state) => {\n const bdTz = this.timezone\n ? new DateTZ({\n date: this.booking_date.ms,\n is_local_tz: false,\n building_tz: this.timezone,\n })\n : this.booking_date;\n const startTz = bdTz.startOfValue('day');\n const endTz = startTz.addValue({}).endOfValue('day');\n return this.filterBookings(startTz, endTz);\n }),\n shareReplay(1)\n );\n\n /** Obsevable for filtered list of bookings of the active week */\n public readonly filtered_week = this._state.pipe(\n map(() => {\n // Tested to be valid in building time now.\n const bd = this.timezone\n ? new DateTZ({\n date: this.booking_date.ms,\n is_local_tz: false,\n building_tz: this.timezone,\n })\n : this.booking_date;\n const start = bd.startOfValue('week').startOfValue('day');\n const end = this.getEndOfWeek(bd);\n return this.filterBookings(start, end);\n })\n );\n\n /** Obsevable for filtered list of bookings for active month */\n public readonly filtered_month = this._state.pipe(\n map(() => {\n const start = this.booking_date.startOfValue('month');\n const end = this.booking_date.endOfValue('month');\n return this.filterBookings(start, end);\n })\n );\n\n /** Active filters */\n public get filters() {\n return this._filters.getValue();\n }\n\n constructor(\n private _org: OrganisationService,\n private _spaces: SpacesService,\n private ngZone: NgZone,\n ) {\n super();\n\n this._org.initialised.pipe(first((_) => _)).subscribe(() => {\n // Just to get the timezone correct\n this._dateTz.next(\n new DateTZ({\n date: this._dateTz.value.ms,\n is_local_tz: false,\n building_tz: this._org.building?.timezone,\n })\n );\n });\n\n /** Generate observable for updating bookings */\n const search = combineLatest(this._poll, this._zone, this._dateTz).pipe(\n filter((i) => !!i[0]),\n debounceTime(500),\n switchMap(() => {\n const fzone = this._zone.getValue();\n if (!fzone) {\n return of([]);\n }\n this._loading.next(true);\n const start = this.booking_date.startOfValue('day');\n const end = start.endOfValue('day');\n return this._spaces.queryBooking({\n zone_ids: fzone,\n available_from: start.seconds,\n available_to: end.seconds,\n });\n }),\n catchError(() => of([]))\n );\n\n const search_long_week = combineLatest(\n this._long_poll_week,\n this._zone,\n this._dateTz\n ).pipe(\n filter((i) => !!i[0]),\n debounceTime(500),\n switchMap((props) => {\n const type = props[0];\n const fzone = props[1];\n const dateTz = props[2];\n if (!fzone) {\n return of([]);\n }\n this._loading.next(true);\n return this.querySpace(type, fzone, dateTz, false);\n }),\n catchError((e) => { \n return of([]);\n })\n );\n\n //TO DO: make sure both spaces have same booking\n /** Subscribe to update observable */\n search.subscribe((space_list) => {\n this.processBookings(space_list);\n this._loading.next(false);\n });\n search_long_week.subscribe((space_list) => {\n this.processBookings(space_list, this._long_poll_week.getValue() as any);\n this._loading.next(false);\n });\n }\n\n /**\n * Function to build\n */\n private buildSpaceLongQuery(dailyCount: boolean = false): Observable {\n return combineLatest(\n this._long_poll,\n this._zone,\n this._dateTz\n ).pipe(\n filter((i) => !!i[0]),\n debounceTime(500),\n switchMap((props) => {\n const type = props[0];\n const fzone = dailyCount ? this._org.building.id : props[1];\n const dateTz = props[2];\n if (!fzone) {\n return of([]);\n }\n this._loading.next(true);\n return this.querySpace(type, fzone, dateTz, dailyCount);\n }),\n catchError((e) => { \n return of([]);\n })\n );\n }\n\n private querySpace(type: string, fzone: string, dateTz: DateTZ, dailyCount: boolean = false) : Observable | Observable{\n const start = () => {\n const s = dateTz;\n if (type === 'week') {\n return s.startOfValue('week');\n } else {\n return s.startOfValue('month');\n }\n };\n\n const end = () => {\n const e = start();\n if (type === 'week') {\n /**\n * To Do: date-tz.class.ts endOfValue subtracts 1 day from end of week for 7 days a week type which returns Friday instead of Saturday\n * below is the adjustment -\n */\n return e.addValue({ days: 1 }).endOfValue('week');\n } else {\n return e.endOfValue('month');\n }\n /**\n * R--- when testing March 2022 London offices, the month is an hour short.\n * Is this a Luxon bug or London DST?\n */\n };\n\n // dates here are ok\n return this._spaces.queryBooking({\n zone_ids: fzone,\n available_from: start().seconds,\n available_to: end().seconds,\n ...(dailyCount) ? { daily_count: true } : ''\n });\n }\n\n\n public getDailyMeetingCount() : void {\n this._long_poll.next('month');\n this.buildSpaceLongQuery(true).subscribe((counts) => {\n this._noOfMeetings.next(counts);\n this._loading.next(false);\n });\n }\n\n /**\n * Update the booking filters\n * @param details\n */\n public setFilters(details: BookingFilters) {\n this._filters.next(details);\n }\n\n /**\n * Update the booking date\n * @param details\n */\n public setDate(dateTz: DateTZ) {\n this._dateTz.next(dateTz);\n }\n\n /**\n * Update the booking's zone\n * @param details\n */\n public setZone(zone: string) {\n this._zone.next(zone);\n }\n\n /**\n * update day view once\n */\n public pollOnce(){\n this._poll.next(true);\n }\n \n /**\n * Start polling to update bookings\n * @param delay Duration between polling events in milliseconds\n */\n public startPolling(delay: number = 30 * 1000) {\n this._poll.next(true);\n this.ngZone.runOutsideAngular(() => {\n this.interval('polling', () => this._poll.next(true), delay);\n });\n }\n\n /**\n * Start polling to update bookings\n * @param delay Duration between polling events in milliseconds\n */\n public startPollingWeek(delay: number = 4 * 30 * 1000 ) {\n this._long_poll_week.next('week');\n this.ngZone.runOutsideAngular(() => {\n this.interval(\n 'polling_long',\n () => this._long_poll_week.next('week'),\n delay\n );\n });\n }\n /**\n * Start polling to update bookings\n * @param delay Duration between polling events in milliseconds\n */\n public startPollingEveryFiveMin(delay: number = 60 * 1000) {\n this._poll.next(true);\n this.ngZone.runOutsideAngular(() => {\n this.interval('polling', () => this._poll.next(true), delay);\n });\n }\n \n /**\n * Start polling to update bookings\n * @param delay Duration between polling events in milliseconds\n */\n public startPollingMonth(delay: number = 5 * 60 * 1000) {\n this._long_poll.next('month');\n this.ngZone.runOutsideAngular(() => {\n this.interval(\n 'polling_long',\n () => this._long_poll.next('month'),\n delay\n );\n });\n }\n\n\n /**\n * Stop polling to update bookings;\n */\n public stopPolling() {\n this._poll.next(false);\n this.clearInterval('polling');\n this._long_poll.next('');\n this.clearInterval('polling_long');\n }\n\n public updateRoomList() {\n this._spaces.updateRoomList();\n }\n\n /**\n * Add booking to bookings listing\n * @param booking\n */\n public add(booking: Booking) {\n const bookings = this._bookings.getValue();\n const new_bookings = bookings.concat([booking]);\n this._bookings.next(new_bookings);\n }\n\n /**\n * Update booking in the bookings list\n * @param booking\n */\n public replace(booking: Booking) {\n const bookings = this._bookings.getValue();\n const new_bookings = bookings\n .filter(\n (bkn) =>\n bkn.icaluid !== booking.icaluid && bkn.id !== booking.id\n )\n .concat([booking]);\n this._bookings.next(new_bookings);\n }\n\n /**\n * Remove booking in the bookings list\n * @param booking\n */\n public remove(booking: Booking) {\n const bookings = this._bookings.getValue();\n const new_bookings = bookings.filter(\n (bkn) => bkn.icaluid !== booking.icaluid\n );\n this._bookings.next(new_bookings);\n }\n\n public attentToDelete(\n booking: Booking,\n action: 'series' | 'booking' = 'booking',\n undo: boolean = false\n ) {\n const bookings = this._bookings.getValue();\n const attempted_to_delete = ((action) => {\n return (bkg: Booking) => {\n switch (action) {\n case 'booking': {\n const booking_master = bookings.find(\n (bkn) => bkn.icaluid === booking.icaluid\n );\n if (!booking_master) return false;\n return bkg.id === booking.id;\n }\n case 'series': {\n const booking_master = bookings.find(\n (bkg) =>\n bkg.id ===\n (booking.recurrence_type === 'occurrence'\n ? booking.recurrence_master_id\n : booking.id)\n );\n if (!booking_master) return false;\n return (\n booking_master.id === bkg.id ||\n bkg.recurrence_master_id === booking_master.id\n );\n }\n default:\n false;\n }\n };\n })(action);\n\n const new_bookings = [...bookings].map((bkg) => {\n if (!undo && attempted_to_delete(bkg)) {\n bkg.attempted_to_delete = action;\n }\n\n if (undo && attempted_to_delete(bkg)) {\n bkg.attempted_to_delete = null;\n }\n\n return bkg;\n });\n\n this._bookings.next(new_bookings);\n }\n\n private processBookings(\n space_list: Space[],\n period: 'day' | 'week' | 'month' = 'day'\n ) {\n const start = () => {\n switch (period) {\n case 'month':\n return this.booking_date.startOfValue('month');\n case 'week':\n return this.booking_date.startOfValue('week');\n default:\n return this.booking_date.startOfValue('day');\n }\n };\n const end = () => {\n const s = start();\n switch (period) {\n case 'month':\n return s.endOfValue('month');\n case 'week':\n return s.endOfValue('week');\n default:\n return s.endOfValue('day');\n }\n };\n\n let bookings = this._bookings.getValue();\n space_list.forEach((space) => {\n return (bookings = replaceBookings(\n bookings,\n space.bookings.map((bkn) => new Booking(bkn)),\n {\n room_email: space.email,\n fromTz: start(),\n toTz: end(),\n }\n ));\n });\n this._bookings.next(bookings);\n }\n\n // private filterBookings(startTz: DateTZ, endTz: DateTZ) {\n // const filters = this._filters.getValue();\n // const bookings = this._bookings.getValue();\n // const fzone = this._zone.getValue();\n // return bookings.filter((bkn) => {\n // const intersects = timePeriodsIntersect(\n // startTz.ms,\n // endTz.ms,\n // bkn.startDateTz.ms,\n // bkn.endDateTz.ms\n // );\n // const in_zone = bkn.room.zones.includes(fzone);\n // const has_space =\n // !filters.space_emails?.length ||\n // filters.space_emails.includes(bkn.room.email);\n // const in_zones =\n // !filters.zone_ids?.length ||\n // !!bkn.room.zones.find((zone) =>\n // filters.zone_ids.includes(zone)\n // );\n // const type = bkn.declined ? 'declined' : bkn.getType();\n\n // const show =\n // !filters.hide_type?.length ||\n // !filters.hide_type.includes(type as any);\n // return intersects && has_space && in_zone && in_zones && show;\n // });\n // }\n\n private filterBookings(startTz: DateTZ, endTz: DateTZ) {\n const filters = this._filters.getValue();\n const bookings = this._bookings.getValue();\n const fzone = this._zone.getValue();\n return bookings.filter((bkn) => {\n const intersects = timePeriodsIntersect(\n startTz.ms,\n endTz.ms,\n bkn.startDateTz.ms,\n bkn.endDateTz.ms\n );\n // Check if any room in the booking satisfies the conditions\n const roomSatisfiesConditions = bkn.multi_rooms.some((room) => {\n const in_zone = room.zones.includes(fzone);\n const has_space =\n !filters.space_emails?.length ||\n filters.space_emails.includes(room.email);\n const in_zones =\n !filters.zone_ids?.length ||\n !!room.zones.find((zone) => filters.zone_ids.includes(zone));\n return in_zone && has_space && in_zones;\n });\n \n const type = bkn.declined ? 'declined' : bkn.getType();\n \n const show =\n !filters.hide_type?.length ||\n !filters.hide_type.includes(type as any);\n return intersects && roomSatisfiesConditions && show;\n });\n } \n\n /**If Sunday add one day to get Saturday as end of week */\n private getEndOfWeek(date: DateTZ): DateTZ {\n return date.dateWeekday === 7\n ? date.addValue({ days: 1 }).endOfValue('week').endOfValue('day')\n : date.endOfValue('week').endOfValue('day');\n }\n}\n","import { BaseDataClass } from '../base-api.class';\nimport { CateringOrder } from '../catering';\nimport { User } from '../users';\nimport {\n flatten,\n HashMap,\n humaniseDuration,\n shorterBuildingDateFormatString,\n shorterLocalDateFormatString,\n toTitleCase,\n unique\n} from '@mckinsey-converge/base';\nimport { Space } from '../spaces/space.class';\nimport { ServiceManager } from '../service-manager.class';\nimport { SettingsService } from '../settings.service';\nimport {\n BookingNote,\n} from './booking.types';\nimport { convertLocalTimestampToTimezonedDateTz, DateNow, DateTZ, getTimezoneOffsetString } from '@mckinsey-converge/date-tz';\nimport { DaysOfWeek, getLastDateFromList, handleRecurrenceFields, RecurrencePeriod } from '../recurrence/recurrence.utils';\nimport { findSpace } from '../spaces';\nimport { DateTime } from 'luxon';\n\n\nexport interface IBookingQueryOptions {\n /** booking ID */\n id?: string;\n email?: string;\n target?: string;\n from?: number; // R--- depreciate\n until?: number; // R--- depreciate\n fromTz?: DateTZ;\n untilTz?: DateTZ;\n show_cancelled?: boolean;\n pagination?: boolean;\n limit?: number;\n offset?: number;\n sort?: string,\n filters?: any;\n include_rooms?: boolean;\n building_zone?: string;\n}\n\nexport class Booking extends BaseDataClass {\n /** Unique calendar event ID */\n // public readonly icaluid: string;\n /** Subject or title of the booking */\n public title: string;\n /** Luxon based date class of the booking start time */\n public startDateTz: DateTZ;\n /** Luxon based date class of the booking start time */\n public endDateTz: DateTZ;\n /** Description or details of the booking */\n public readonly body: string;\n /** Type of booking */\n public readonly booking_type: string;\n /** List of catering orders for the booking */\n public catering: readonly CateringOrder[];\n /** Whether booking's duration covers all day */\n public readonly all_day: boolean;\n /** Mapping of emails to approval statuses */\n public approval_status: HashMap;\n /**\n * New booking approval status set in constructor\n *\n * timeBasedStatusLabel is a getter calculated via current time, some parts of the application\n * may use status when it should use timeBasedStatusLabel\n */\n public status: 'tentative' | 'accepted' | 'approved' | 'declined' | 'cancelled' | 'expired' | 'unavailable';\n /** Host/Organiser of the booking */\n public organiser: User;\n /** List of people invited to attend the booking */\n public attendees: User[];\n /** Author of the booking */\n public readonly creator: User;\n\n /** List of notes associated with the booking */\n public notes: readonly BookingNote[];\n /** Mapping of spaces to equipment charge codes */\n public equipment_codes: HashMap;\n /** Mapping of spaces to expected number of attendees */\n public expected_attendees: HashMap;\n /** Map of space emails to the setup time before the meeting in minutes */\n public setup: HashMap;\n /** List of checked in attendees */\n public check_ins: object;\n /** Map of space emails to the breakdown time before the meeting in minutes */\n public breakdown: HashMap;\n /** List of fields edited since creation */\n public readonly edits: string[];\n /** List of users to be notified on visitor arrivals */\n public readonly notify_users: readonly string[];\n /** Whether the time or duration has changed */\n public time_changed = false;\n /**\n * Booking Space\n * Bookings only have one room on MCK\n */\n public room: Space;\n /** building_zone */\n public building_zone: string;\n /** Initialized Timezone */\n public timezone: string;\n /** Array of company names */\n public company?: string[];\n /** Flag for multiroom booking */\n public is_multiroom: boolean;\n /** Multiroom booking ID */\n public multiroom_master_id: string; \n /** Type of recurrence, Shows whether this is a master or an occurence in the series. */\n public readonly recurrence_type: string;\n /** The frequency of the recurring booking. */\n public readonly recurrence_period: RecurrencePeriod;\n /** The interval time between each period. Defaults to 1. For example, with a period of \"weekly\" and an interval of 2, the recurrencd happen every 2 weeks. */\n public readonly recurrence_interval: number;\n /** Unix epoch in seconds of the recurrence end date */\n private _recurrence_endTz: DateTZ;\n /** The number of times to repeat the recurring booking. */\n public readonly recurrence_count: number;\n /** ID of the booking considered the master */\n public readonly recurrence_master_id: string;\n /** An array of booking IDs which belong to this recurring series. This INCLUDES the master booking ID. */\n public readonly occurrence_ids: string[];\n /** A list of INDIVIDUAL edits to any of the bookings in the series. This is so we can prompt the user if they are going to override previously updated bookings with a whole-series update. */\n public readonly occurrence_edits: string[];\n /** A list of Ocurrences */\n public readonly occurrence_details: { id: string, start_epoch: number }[];\n /** When the booking was created */\n public created_epoch: number;\n /** Is the Application concierge */\n public is_concierge: boolean;\n /**helper to know if recurring toggle is on */\n public is_recurrent: boolean;\n /**array of start dates of each ocurrence in the series */\n public recurrence_starts: Array\n /**array of conflicting dates not to be included in the recurrence series */\n public recurrence_exceptions: Array\n\n public recurrence_days?: Array\n\n /** Master recurrence start */\n public recurrence_start: number;\n\n /** Start Epoch */\n public start_epoch: number;\n public end_epoch: number;\n public level_zone: string;\n public opt_out: boolean;\n public multi_rooms: Space[];\n public room_setup: any;\n public room_breakdown: any;\n public headcount: number;\n public equipment_code: string;\n\n /** Currently back-end is not properly setting the recurrence_end property, this is a workaround */\n public get recurrence_endTz(): DateTZ {\n return this._recurrence_endTz;\n }\n\n public set recurrence_endTz(date: DateTZ) {\n this._recurrence_endTz = date;\n }\n\n /** Mark a booking for deleting */\n public attempted_to_delete?: 'series' | 'booking' | null;\n\n // No specific reason to set readonly but canm be change if needed to update in future\n public readonly booked_by : string | { name: string };\n public readonly booker: Object;\n public readonly booker_concierge: Object\n\n constructor(raw_data: HashMap = {}) {\n super(raw_data);\n // Needed to check if the current app is Concierge or Staff\n const settingsService = ServiceManager.serviceFor(SettingsService) as unknown as SettingsService;\n this.is_concierge = settingsService.concierge;\n\n /**\n * Setup Defaults when raw_data values are not provided\n */\n const nowTz = new DateTZ();\n\n const defaultTitle = ''; // Blank since the create booking form will init with test values.\n const defaultLocalTimezone = Intl?.DateTimeFormat()?.resolvedOptions()?.timeZone;\n const defaultBuildingZone = null // R --- no idea, should be a building.id but which and how\n const defaultOrgainiser = User.active_user || new User(); // meh, non American use.\n const defaultBookingType = 'internal';\n\n /**\n * Process the simple raw_data with defaults mixed in\n */\n this.title = raw_data.title || defaultTitle;\n this.timezone = raw_data.timezone || defaultLocalTimezone;\n // Used by components to get the building details\n this.building_zone = raw_data.building_zone || defaultBuildingZone;\n this.body = raw_data.body || '';\n // Provided booking type\n this.booking_type = raw_data.booking_type || defaultBookingType;\n // Attendees provided in API booking data\n this.attendees = (raw_data.attendees || []).map((i) => new User(i));\n // Provided organiser, active user, or empty user?\n this.organiser = raw_data.organiser ? new User(raw_data.organiser) : defaultOrgainiser;\n // Creator is provided or defaults to the organizer\n this.creator = (raw_data.booked_by ? new User(raw_data.booked_by) : defaultOrgainiser) || this.organiser;\n // Setup and breakdown times can conflict but not the true event start and end times\n this.setup = raw_data.setup || {};\n this.breakdown = raw_data.breakdown || {};\n this.room_setup = raw_data.room_setup;\n this.room_breakdown = raw_data.room_breakdown;\n // Notes are assigned by room but we only support a single room\n this.notes = raw_data.notes || [];\n this.equipment_codes = raw_data.equipment_codes || {};\n this.equipment_code = raw_data.equipment_code || '';\n this.expected_attendees = raw_data.expected_attendees || {};\n this.headcount = raw_data.headcount;\n this.check_ins = raw_data.check_ins || {};\n this.notify_users = raw_data.notify_users?.length ? raw_data.notify_users : [this.organiser?.name];\n this.company = raw_data.company || [];\n // retain booked by if there : helps to get correct creator above\n this.booked_by = raw_data.booked_by;\n this.booker = raw_data.booker;\n this.booker_concierge = raw_data.booker_concierge;\n this.level_zone = raw_data.level_zone;\n this.opt_out = raw_data.opt_out;\n\n \n /**\n * Multiroom fields\n */\n this.is_multiroom = raw_data.is_multiroom || null;\n this.multiroom_master_id = raw_data.multiroom_master_id || null;\n\n /**\n * Setup Defaults when raw_data values are not provided\n *\n * all room_ids and space_list inputs can be refactored into just room like an API booking\n *\n * raw_data.room can be provides as the Space class or JSON object\n */\n // this.room = raw_data.room ? new Space(raw_data.room) : new Space();\n // this.room = raw_data?.room ? (Array.isArray(raw_data?.room) && raw_data.room.length > 0) ? raw_data?.room.map((element) => new Space(element))[0]: [new Space(raw_data.room)][0] : [new Space()][0];\n // this.room = raw_data.room ? new Space(raw_data.room) : new Space();\n\n if (raw_data && raw_data.room) {\n if (Array.isArray(raw_data.room) && raw_data.room.length) {\n this.room = raw_data.room.map((element) => new Space(element))[0];\n } else if (Array.isArray(raw_data.room) && raw_data.room.length === 0) {\n this.room = [new Space()][0];\n } else {\n this.room = [new Space(raw_data.room)][0];\n }\n } else {\n this.room = [new Space()][0];\n }\n\n\n const room_id = raw_data.room_id || raw_data.room_ids // Not sure why we have room_id and room_ids\n if (!this.room?.id && room_id?.length) {\n this.room = findSpace(room_id[0]) || this.room;\n }\n\n const roomsData = raw_data?.multi_rooms || raw_data?.room;\n this.multi_rooms = roomsData\n ? Array.isArray(roomsData)\n ? roomsData.map((element) => new Space(element))\n : [new Space(roomsData)]\n : [new Space()];\n\n \n const room_ids = [...(raw_data?.room_id || []), ...(raw_data?.room_ids || [])];\n\n room_ids.forEach(roomId => {\n const newRoom = findSpace(roomId);\n // Check if the room is found and not already included in this.room\n if (newRoom && !this.multi_rooms.some(room => room.id === newRoom.id)) {\n // Add the new room to this.room\n this.multi_rooms.push(newRoom);\n }\n });\n\n // this.room is sometimes getting set to undefined when raw_data?.room is coming as an object\n if(this.multi_rooms.length && this.room === undefined){\n this.room = this.multi_rooms[0];\n }\n \n /**\n * Setup the booking start and end time\n *\n *\n * Booking defaults to now if start is not defined.\n * Booking durration is now a getter\n */\n // now rounded to the next 5 minute increment\n const defaultStartTz = new DateTZ({ date: nowTz.ms, is_local_tz: false, building_tz: this.timezone }).setValue({ minute: Math.ceil(nowTz.minutes / 5) * 5 });\n\n /**\n * When saving a booking the BaseDataClass doens't know to use the toAPIJson\n * so startDateTz isn't being convert to the epoch timestamp\n *\n * I'm not testing for the end time values because we can assume those follow the same pattern.\n */\n const startEpochProvided = !!(raw_data.start_epoch || raw_data.start);\n const startDateTzProvided = !!raw_data.startDateTz;\n\n /**\n * Not trying to be fancy here, just clear.\n */\n if (!startEpochProvided && startDateTzProvided) {\n /**\n * Once a booking is saved the BaseDataClass recreates the Booking\n * but doesn't use the toApiJSON method adapt the class input, mainly the\n * startDateTz isn't converted to the start_epoch timestamp.\n */\n this.startDateTz = raw_data.startDateTz;\n this.endDateTz = raw_data.endDateTz;\n } else if (startEpochProvided) {\n /**\n * A Booking created from the API responses arrives with the booking\n * start_epoch and end_epoch timestamps.\n */\n this.startDateTz = new DateTZ({\n date: ((raw_data.start_epoch || raw_data.start) * 1000),\n is_local_tz: false,\n building_tz: this.timezone\n });\n this.endDateTz = new DateTZ({\n date: ((raw_data.end_epoch || raw_data.end)* 1000),\n is_local_tz: false,\n building_tz: this.timezone\n });\n } else {\n /**\n * And there are uses of new Booking where there are no inputs\n * and defaults are necessary.\n */\n this.startDateTz = defaultStartTz;\n this.endDateTz = defaultStartTz.addValue({ minutes: 60 });;\n }\n\n /**\n * End time was by design ending at one minute before, IE 4:00PM is 3:59PM,\n * because of calendar and conflcit checking\n *\n * Check and finesse it.\n * Not sure why but some booking endtime added extra seconds\n */\n if ((this.endDateTz.minutes % 5) !== 0 || this.endDateTz.second > 0) {\n // Not sure of the source but some bookings do not conform.\n this.endDateTz = this.endDateTz.setValue({ second: 0, minute: Math.round(this.endDateTz.minutes / 5) * 5 });\n }\n\n\n\n /**\n * Setup the booking created_date\n *\n * if it exists as a key, use the value directly.\n * if we initialize without a value, switch to checking duration.\n * Ref: MCK-826\n */\n this.created_epoch = raw_data.created_epoch || nowTz.seconds;\n\n\n /**\n * Setup the booking all_day boolean\n *\n * if it exists as a key, use the value directly.\n * if we initialize without a value, switch to checking duration.\n * Ref: MCK-826\n */\n if ('all_day' in raw_data) {\n this.all_day = raw_data.all_day;\n } else {\n this.all_day = !!raw_data.all_day || this.duration > 23 * 60;\n }\n\n\n // R--- TODO Concierge will use startDateTz so i'm not sure if this is needed.\n if (!this.is_concierge && this.all_day && this.timezone) {\n /**\n * Concierge has a all_day form field, I can see it may need this for that, does it really?\n */\n this.startDateTz = this.startDateTz.startOfValue('day')\n }\n\n /**\n * Setup the booking approval status\n */\n let status = raw_data.status;\n // If not provided default to approved.\n if (!raw_data.status) {\n status = 'accepted';\n }\n // \"show_as\" is a special rule to override how the applications display the status\n if (raw_data.show_as && raw_data.show_as === 'cancelled') {\n status = 'declined';\n }\n const approvalStatus = {};\n this.multi_rooms.forEach(room => {\n approvalStatus[room.email] = status;\n });\n // Tracking new \"status\" and legacy \"approval_status\" from raw_data.status.\n this.status = status;\n this.approval_status = raw_data.approval_status || {};\n\n /**\n * Catering setup\n *\n * Bring in and sort the catering order by delivery time\n */\n\n this.catering = (raw_data.catering instanceof Array ? raw_data.catering : []).map(\n (i) => new CateringOrder(i)\n );\n\n\n\n /**\n * Edited fields setup\n *\n * Bring in and sort the catering order by delivery time\n *\n * cateringOrders can return the order sorted\n */\n const edited_fields = Array.isArray(raw_data.edits)\n ? raw_data.edits\n : unique(\n flatten(\n Object.keys(raw_data.edits || {}).map((room) => {\n return flatten(Object.values(raw_data.edits[room]));\n })\n )\n );\n this.edits = edited_fields;\n\n /**\n * New Recurring booking feilds\n *\n * New fields do not match the BookingRecurrenceDetails type\n * and are simpler to manage this way\n */\n this.recurrence_count = raw_data.recurrence_count || null;\n this.recurrence_days = raw_data.recurrence_days || null;\n this.occurrence_edits = raw_data.occurrence_edits || null;\n this.recurrence_endTz = raw_data.recurrence_end ? new DateTZ({date: raw_data.recurrence_end * 1000, is_local_tz: false, building_tz: this.timezone}) : null;\n this.recurrence_exceptions = raw_data.recurrence_exceptions || null;\n this.occurrence_ids = raw_data.occurrence_ids || null;\n this.recurrence_interval = raw_data.recurrence_interval || null;\n this.recurrence_period = raw_data.recurrence_period || null;\n this.recurrence_type = raw_data.recurrence_type || null;\n this.recurrence_master_id = raw_data.recurrence_master_id\n this.occurrence_details = raw_data.occurrence_details\n this.is_recurrent = raw_data.is_recurrent || (!!this.recurrence_type && !!this.recurrence_period) || null;\n this.recurrence_starts = raw_data.recurrence_starts || []\n this.start_epoch = raw_data.start_epoch\n this.end_epoch = raw_data.end_epoch\n\n /**\n * I'm not clear why, but the booking body, aka description is copied into the notes.\n * R--- In concerge data description is only a key when saving, also in the note array?\n */\n if (raw_data.body && !this.notes.find((i) => i.type === 'description')) {\n this.notes = [\n ...this.notes,\n {\n type: 'description',\n date: 0,\n message: raw_data.body,\n author: this.organiser.email\n }\n ];\n }\n\n /**\n * In case there is a cancellation in progress the property attempted_to_delete is set to false\n * And it is persisted until the booking is gone\n */\n this.attempted_to_delete = raw_data.attempted_to_delete || null;\n }\n\n\n /** Service for managing Bookings */\n protected get _service() {\n return ServiceManager.serviceFor(Booking);\n }\n\n /** Alias to approval_status */\n public get auto_approve(): boolean {\n // if concierge we auto_approve always.\n if (this.is_concierge) {\n return true;\n }\n return !this.multi_rooms.some(room => room.byRequest({\n dateTz: this.startDateTz,\n duration: this.duration,\n host: this.organiser\n }));\n }\n\n /** Whether booking has been approved */\n public get approved(): boolean {\n return !this.declined && !this.tentative;\n }\n\n /** All of the booking attendees including the organizer */\n public get allAttendees(): User[] {\n return unique([this.organiser].concat(this.attendees), 'email');\n }\n\n /** Computer format for booking type */\n public get bookingTypeId(): string {\n return this.booking_type.toLowerCase();\n }\n\n /** Human format for booking type */\n public get bookingTypeLabel(): string {\n return toTitleCase(this.booking_type);\n }\n\n /** Get accessor for the check in object, app expect array */\n public get checkInsArray(): string[] {\n return Object.keys(this.check_ins || {})\n }\n\n /** Legacy getter for \"class\" */ // R-- TODO remove\n public get class(): string {\n return this.booking_type;\n }\n\n /** */\n public get displayEndDateTz(): DateTZ {\n if ((this.endDateTz.minutes % 5) !== 0) {\n // All the bookings should end in 59 seconds\n return this.endDateTz.addValue({ seconds: 1 });\n }\n // but if not they return 00\n return this.endDateTz;\n }\n\n /** Whether booking has been declined */\n public get declined(): boolean {\n /**\n * I'm not sure, nor is Cam if this is ever used to decline\n * all booking for a specific room\n */\n const isAnyRoomDeclined = this.multi_rooms.some(room => room.name.toLowerCase().includes('decline'));\n if (isAnyRoomDeclined) {\n return true;\n }\n\n if (this.status.includes('decline')) {\n return true;\n }\n\n return false;\n }\n\n /** Description of the booking purpose */\n public get description(): string {\n const note = (this.notes || []).find((i) => i.type === 'description');\n return note ? note.message : '';\n }\n\n /** Catering getter */\n public get cateringOrders() {\n // Return the catering orders sorted by delivery time\n return this.catering ? this.catering.slice().sort((a, b) => {\n if (a?.delivery_time > b?.delivery_time) return 1;\n if (b?.delivery_time > a?.delivery_time) return -1;\n\n return 0;\n }) : [];\n }\n\n /** Get the created date as DateTz */\n public get creationDateTz() {\n return new DateTZ({ date: this.created_epoch * 1000, is_local_tz: false, building_tz: this.timezone })\n }\n\n public get tz_offset() {\n return getTimezoneOffsetString(this.timezone);\n }\n\n /** Display value for the date */\n public get date_string(): string {\n return this.startDateTz.formatDate('dd MMM yyyy');\n }\n\n /**\n * Get the booking durration based on start and end times\n */\n public get duration(): number {\n return Math.abs(this.startDateTz.startOfValue('minute').dateDiff(this.displayEndDateTz, 'minutes'));\n }\n\n /** Unix timestamp of the booking start */\n public get date() { // R--- remove if not necessary\n return this.startDateTz.ms;\n }\n\n /** Whether booking contains external visitors in the attendee list */\n public get has_visitors(): boolean {\n return this.attendees.reduce((a, v) => a || v.external, false);\n }\n\n /** Does the booking have catering orders */\n public get has_catering(): boolean {\n return !!this.catering.length;\n }\n\n /**\n * Unique calendar event ID\n * same as this.id, used to support existing component usage\n */\n public get icaluid(): string {\n return this.id;\n }\n\n /**\n * Get the booking room id\n */\n public get room_id(): string {\n return this.room.id;\n }\n\n /** Legacy getter of room, aka space */\n public get space(): Space {\n return this.room;\n }\n\n /** Status of the booking */\n public get timeBasedStatusLabel(): 'future' | 'upcoming' | 'done' | 'started' | 'in_progress' | 'expired_yesterday' {\n const buildingTzDt = DateNow(new Date()).toZone(this.timezone) ; // building time\n\n if (DateNow(new Date()).isBeforeDate(this.startDateTz.subtractValue({ minutes: 15 }))) {\n return 'future';\n } else if (DateNow(new Date()).isBeforeDate(this.startDateTz)) {\n return 'upcoming';\n } else if (DateNow(new Date()).isBeforeDate(this.startDateTz.addValue({ minutes: 15 }))) {\n return 'started';\n } else if (DateNow(new Date()).isBeforeDate(this.startDateTz.addValue({ minutes: this.duration }))) {\n return 'in_progress';\n }\n // if current time is 12 AM (as per timezone) and booking expired yesterday\n else if(buildingTzDt.startOfValue('day').addValue({ minutes: 1 }).isAfterDate(this.startDateTz, 'day') ) {\n return 'expired_yesterday'\n }\n\n return 'done';\n }\n\n /** Whether booking is tentative */\n public get tentative(): boolean {\n if (\n this.status &&\n this.status.indexOf('tentative') >= 0\n ) {\n return true;\n }\n\n return false;\n }\n\n /** Display valuie for the start and end times of the booking */\n public get time_period(): string {\n return `${this.startDateTz.formatDate('h:mma')} - ${this.displayEndDateTz.formatDate('h:mma')}`;\n }\n\n /** Display value for the start time of the booking */\n public get start_time(): string {\n return this.startDateTz.formatDate('h:mma');\n }\n\n /** Display value for the end time of the booking */\n public get end_time(): string {\n return this.endDateTz.formatDate('h:mma');\n }\n\n /** Display value for the duration of the booking */\n public get length_string(): string {\n return humaniseDuration(this.duration);\n }\n\n /** Display value for the location of the booking */\n // public get local_room_name(): string {\n // return this.room?.local_name || 'No location';\n // }\n public get local_room_name(): string {\n if (this.multi_rooms.length === 0) {\n return 'No location';\n } else {\n return this.multi_rooms.map(room => room.local_name).join(', ');\n }\n } \n\n /** Display value for the level of the first space in the booking */\n public get level(): string {\n return this.space.level.name;\n }\n\n /**\n * Make a copy of this object\n */\n public clone(): Booking {\n return new Booking(this.toJSON());\n }\n\n /**\n * Make a copy of this object without identification data\n */\n public duplicate(isEdit = false): Booking {\n return new Booking({\n ...this.toJSON(),\n id: isEdit ? this.id : null,\n });\n }\n\n /**\n *\n * @param status\n * @returns void\n */\n public undo(status?: 'accept' | 'decline', opts: { series?: boolean } = {}): Promise {\n return this._service.undo(\n this.id, status || 'accept',\n opts\n );\n }\n\n /**\n * Delete booking from the server\n */\n public delete(opts: { series?: boolean } = {}): Promise {\n if (this.id) {\n return this._service.delete(this.id, { ...opts });\n\n // R-- ask Cam again is he's positive these extra params are not needed for anything\n // return this._service.delete(this.id, {\n // concierge: this.is_concierge,\n // host: this.organiser.email,\n // room_id: this.space?.id,\n // icaluid: this.icaluid,\n // start: json.start,\n // end: json.end\n // });\n }\n }\n\n /**\n * Convert object into plain object\n */\n public toJSON(this: Booking): HashMap {\n let data = super.toJSON();\n // Remove the description from the notes\n data.notes = Array.isArray(data.notes) ? data.notes.filter((note) => note.type !== 'description') : data.notes;\n // Encode the nested objects\n data.room = data.room.toJSON();\n\n\n\n data.organiser = data.organiser.toJSON();\n data.creator = data.creator?.toJSON ? data.creator.toJSON(): data.creator;\n // Map the attendees User objects\n data.attendees = data.attendees.map((i: User) => i.toJSON());\n\n // New recurring booking\n data = handleRecurrenceFields(data)\n\n if(data.recurrence_list){\n data.recurrence_starts = [...data.recurrence_list]\n delete data.recurrence_list\n }\n\n return data;\n }\n\n /**\n * Convert object into plain object\n */\n public toApiJSON(this: Booking): HashMap {\n let data = super.toJSON();\n\n // Update booking payload contains additional fields\n data.icaluid = \"\";\n if (data.id) {\n data.icaluid = data.id;\n data.location_name = this.multi_rooms.map((item)=>{return item.local_name}).join(', ');\n data.from_room = this.multi_rooms.map((item)=>{return item.email}).join(', ');\n data.building_zone = this.room?.building?.id;\n }\n\n /**\n * These fields are rather in flux\n * According to Cam \"approve\" will be the prefered field\n * and auto_approve and approval_status can be removed.\n */\n data.approve = this.auto_approve; // this value appear incorrect on update\n data.auto_approve = [this.auto_approve]; // Needed to update approval status until BE accepts \"approve\"\n // delete data.approval_status;\n\n // Booking start and end data\n delete data.startDateTz;\n delete data.endDateTz;\n data.start = this.startDateTz.seconds;\n data.end = this.endDateTz.seconds;\n data.old_start = this.startDateTz.seconds; // remove is not necessary\n data.old_end = this.endDateTz.seconds; // remove is not necessary\n\n // Creation date value\n delete data.created_epoch;\n data.creation_date = this.creationDateTz.seconds;\n\n // Catering fields\n // data.catering = data.catering.toJSON();\n data.catering = this.cateringOrders;\n data.has_catering = this.has_catering;\n delete data.cateringOrders\n\n // Attendees appear quite incomplete\n // Map the attendees User objects\n data.attendees = this.allAttendees.map((i: User) => i.toJSON ? i.toJSON() : i);\n\n // Orgainizer and Creator data\n data.organiser = data.organiser.toJSON ? data.organiser.toJSON() : data.organiser;\n data.creator = data.creator.toJSON ? data.creator.toJSON() : data.creator;\n\n // Convert check_ins to checked_in array\n delete data.check_ins;\n data.checked_in = this.checkInsArray;\n\n // edits - edit booking is showing all fields even w/o an edit :(\n\n // Room data\n data.room_ids = this.multi_rooms.map((item)=>{return item.email});\n delete data.room;\n\n // New recurring booking\n data = handleRecurrenceFields(data)\n\n\n if(data.recurrence_list){\n data.recurrence_starts = [...data.recurrence_list]\n delete data.recurrence_list\n }\n\n // Not found in dev data\n delete data.name;\n delete data.email;\n delete data.is_concierge;\n // delete data.building_zone;\n // delete data.status;\n\n return data;\n }\n\n public getType(): string {\n if (!this || this.status?.includes('decline')) {\n return 'cancelled';\n }\n const booking_type = this.booking_type;\n if (booking_type === 'internal' && this.has_visitors) {\n return 'external';\n }\n return booking_type;\n }\n\n /** fallback for a booking when the recurrence_end is null but it's a series booking */\n public recurrenEndFromOcurrences(occurrence_details: { id: string, start_epoch: number }[]): DateTZ {\n const date = occurrence_details?.map(occurence => occurence)\n .sort((a, b) => new Date(a.start_epoch * 1000).getTime() - new Date(b.start_epoch * 1000).getTime())\n .reverse()\n .shift()\n .start_epoch * 1000\n return new DateTZ({date, is_local_tz: false, building_tz: this.timezone});\n }\n\n public get dateString() {\n return shorterLocalDateFormatString(this.startDateTz);\n }\n public get dateBuildingString() {\n return shorterBuildingDateFormatString(this.startDateTz);\n }\n\n public get endDateString(): string {\n return shorterLocalDateFormatString(this.recurrenEndFromOcurrences(this.occurrence_details));\n }\n}\n\n/**\n * Merge catering orders with same time and location\n * @param order_list List of catering orders\n */\nexport function mergeCateringOrders(order_list: CateringOrder[]) {\n // R--- investigate when this is used. Staff doesn't use it when adding catering orders.\n for (let i = 0; i < order_list.length; i++) {\n const orders = order_list.filter(\n (order) =>\n order.location_id === order_list[i].location_id &&\n order.delivery_time === order_list[i].delivery_time\n );\n if (orders.length > 1) {\n const new_list = order_list.filter(\n (order) =>\n !(order.location_id === order_list[i].location_id &&\n order.delivery_time === order_list[i].delivery_time)\n );\n new_list.push(new CateringOrder({\n ...order_list[i],\n items: flatten(orders.map(order => order.items)),\n booking_date: this.startDateTz.ms,\n booking_timezone: this.booking_timezone,\n }));\n order_list = new_list;\n i = 0;\n }\n }\n return order_list;\n}\n","import { DateTZ } from \"@mckinsey-converge/date-tz\";\n\nexport interface SpaceRules {\n auto_approve: boolean; // if false sapce is requestable else bookable\n hide: boolean;\n max_length?: number;\n min_length?: number;\n reason?: string // specially for non-bookable rooms\n}\n\nexport interface BookingNote {\n /** Type of note */\n type: 'equipment' | 'catering' | 'description' | 'private' | 'other' | 'catering-private';\n /** Name of the note's author */\n author: string;\n /** Contents of the note */\n message: string;\n /** Time the note was added to the booking */\n date: number;\n /** Display value for the time */\n time?: string;\n /** ID of the space associated with the note */\n space?: string;\n /** ID of the catering order associated with the note */\n order_id?: string;\n}\n\nexport interface DateDurationData {\n dateTz: DateTZ,\n duration: number,\n mobile: boolean,\n save?: boolean,\n}\n\nexport enum BOOKING_STATUS {\n approved = 'approved',\n declined = 'declined',\n tentative = 'tentative',\n unavailable = 'unavailable'\n}","import {\n AbstractControl,\n FormControl,\n FormGroup,\n Validators\n} from '@angular/forms';\n\nimport { AvailableBookingFields } from '../settings.interfaces';\nimport {\n HashMap,\n humaniseDuration,\n mockDate as mockDateBase,\n resetDate as resetDateBase,\n timeFormatString,\n unique\n} from '@mckinsey-converge/base';\nimport { CateringOrder } from '../catering/catering-order.class';\nimport { ServiceManager } from '../service-manager.class';\nimport { User } from '../users/user.class';\nimport { Booking, IBookingQueryOptions } from './booking.class';\nimport {\n BookingRule,\n SpaceStatus\n} from './space.types';\nimport { validateEndTime } from '../validation.utilities';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { BookingAction, RecurrencePeriod, SeriesAction } from '../recurrence/recurrence.utils';\nimport { Space } from '../spaces';\nimport * as cloneDeep from 'lodash/cloneDeep';\n\nconst MINUTE = 1;\nconst HOUR = 60;\nconst DAY = 24 * HOUR;\nconst WEEK = 7 * DAY;\nconst MONTH = 30 * DAY;\n\nconst DURATION_MAP: { [duration: string]: number } = {\n month: MONTH,\n months: MONTH,\n week: WEEK,\n weeks: WEEK,\n day: DAY,\n days: DAY,\n hour: HOUR,\n hours: HOUR,\n minute: MINUTE,\n minutes: MINUTE\n};\n\n/**\n * Deprecated. Use @mckinsey-converge/base's import.\n */\nexport const mockDate = mockDateBase;\n\n/**\n * Deprecated. Use @mckinsey-converge/base's import.\n */\nexport const resetDate = resetDateBase;\n\nexport interface IBookingSlot {\n start: number;\n end: number;\n}\n\n\nexport function bookingOptionsToQuery(options: IBookingQueryOptions): HashMap {\n let query: HashMap = {};\n if (options) {\n query = { ...options };\n delete query.type;\n if (options.filters) {\n delete query.filters;\n for (const property in options.filters) {\n if (!query[property]) {\n query[property] = options.filters[property]\n }\n }\n }\n\n // id?: string;\n // cancelled?: boolean;\n if (options.until) {\n query.to = options.until;\n delete query.until;\n }\n \n }\n return query;\n}\n\n\n/**\n * Generate a list of free time slots between the given bookings\n * @param list List of bookings to find slots between\n * @param min_size Minimum length of a free slot in minutes\n */\nexport function getFreeBookingSlots(list: Booking[]=[], min_size: number = 30, dateTzMs: number = DateNow(new Date()).ms,): IBookingSlot[] {\n /* istanbul ignore else */\n if (!list.length) {\n return [\n {\n start: 0,\n end: DateNow(new Date()).startOfValue('minute').ms * 10\n }\n ];\n }\n const slots: IBookingSlot[] = [];\n let start = new DateTZ({ date: dateTzMs });\n list.sort((a, b) => a.date - b.date);\n for (const booking of list) {\n const bkn_start = booking.startDateTz;\n const bkn_end = booking.endDateTz;\n if (bkn_start.isAfterDate(start)) {\n const diff = Math.abs(bkn_start.dateDiff(start, 'minutes'));\n /* istanbul ignore else */\n if (diff >= min_size) {\n slots.push({ start: start.ms, end: bkn_start.ms });\n }\n start = bkn_end;\n } else if (start.startOfValue('minute').ms === bkn_start.startOfValue('minute').ms) {\n start = bkn_end;\n }\n }\n slots.push({\n start: start.ms,\n // R--- these X 10's make no sense. why not + 2 years?\n end: DateNow(new Date()).startOfValue('minute').ms * 10\n });\n\n return slots;\n}\n\n/**\n * Get the next free time slot from the given bookings\n * @param list List of bookings to find the next slot\n * @param date Date to find next slot after in ms since UTC epoch\n * @param min_size Minimum length of the free slot in minutes\n * \n * R--- Possibly depreciate, I don't see it used anywhere except for its own test\n */\nexport function getNextFreeBookingSlot(\n list: Booking[],\n date: number = DateNow(new Date()).ms,\n min_size: number = 15\n): IBookingSlot {\n const slots = getFreeBookingSlots(list, min_size, date);\n const date_ = new DateTZ({date})\n const time = date_.startOfValue('minute').setValue({ second: 1 });\n for (const block of slots) {\n const start = new DateTZ({date: block.start});\n const end = new DateTZ({date: block.end});\n if (start.startOfValue('minute').isAfterDate(time)) {\n return block;\n } else if (time.isBeforeDate(end.startOfValue('minute'))) {\n const duration = end.startOfValue('minute').dateDiff(time, 'minutes');\n /* istanbul ignore else */\n if (duration >= min_size) {\n return block;\n }\n }\n }\n return slots[slots.length - 1];\n}\n\n/**\n * Generate form fields for the given booking\n * @param booking Booking to generate form for\n * @param current_user Current user of the system to default as the host\n */\nexport function generateBookingForm(\n booking: Booking,\n use_fields: AvailableBookingFields[],\n isConcierge: boolean = false,\n manualTimezone?: string,\n action?: SeriesAction | BookingAction | null\n ): FormGroup {\n if (!booking) {\n throw Error('No booking passed');\n }\n\n const user_service = ServiceManager.serviceFor(User);\n const current_user =\n user_service.current ||\n new User({ id: 'local-user', name: 'Local User', email: 'local@place.tech' });\n\n const fields: HashMap = {\n id: new FormControl(booking.id || ''),\n space_list: new FormControl( booking.is_multiroom? booking.multi_rooms : [booking.room], []),\n room: new FormControl(booking.room, {}),\n dateTz: new FormControl({ value: booking.startDateTz || DateNow(), disabled: false }, [Validators.required]),\n duration: new FormControl({ value: booking.duration, disabled: false }),\n organiser: new FormControl(booking.organiser || current_user, [Validators.required]),\n attendees: new FormControl(booking.attendees, []),\n title: new FormControl(booking.title || '', { validators: [ Validators.required, Validators.minLength(1) ], updateOn: 'blur' }), //Validators.pattern(\"[^=`~!@#$%*{};:'\\\",_.<>]*\")\n booking_type: new FormControl(booking.booking_type),\n body: new FormControl(booking.body),\n notes: new FormControl(booking.notes),\n equipment_codes: new FormControl(booking.equipment_codes),\n expected_attendees: new FormControl(booking.expected_attendees),\n company: new FormControl(booking.company),\n is_multiroom: new FormControl(booking.is_multiroom),\n catering: new FormControl(\n booking.cateringOrders.map(\n (order) => new CateringOrder({\n ...order,\n booking_date: booking.startDateTz.ms,\n booking_timezone: booking.timezone,\n })\n )\n ),\n all_day: new FormControl(!!booking.all_day),\n has_catering: new FormControl(!!booking.has_catering),\n needs_space: new FormControl(true),\n action: new FormControl(''),\n timezone: new FormControl(manualTimezone || \"\"),\n is_before_date: new FormControl(false)\n };\n if (!isConcierge) {\n fields.duration.setValidators([Validators.required, validateEndTime(fields.dateTz)]);\n }\n /* istanbul ignore else */\n if (booking.id && booking.id !== 'ad-hoc') {\n fields.organiser.disable();\n /* istanbul ignore else */\n if (booking.endDateTz.ms < DateNow(new Date()).ms) {\n fields.dateTz.disable();\n }\n } else {\n const dateValidators = [Validators.required];\n if (!isConcierge) {\n dateValidators.push(isFuture);\n }\n dateValidators.push(validDateTZ)\n fields.dateTz.setValidators(dateValidators);\n fields.dateTz.updateValueAndValidity();\n }\n let list_length = -1;\n fields.space_list.valueChanges.subscribe((list) => {\n const expected = fields.expected_attendees.value || {};\n const matches = Object.keys(expected).filter((key) =>\n list?.find((space) => space.email === key)\n ).length;\n if (list && list.length && matches === 0) {\n const codes = fields.equipment_codes.value || {};\n if (Object.keys(expected).length >= 0 || Object.keys(codes).length >= 0) {\n const key = Object.keys(expected)[0] || Object.keys(codes)[0];\n const new_expected = {};\n const new_codes = {};\n const notes = fields.notes.value;\n notes.forEach((note) => (note.space === key ? (note.space = list[0].email) : ''));\n new_expected[list[0].email] = expected[key];\n new_codes[list[0].email] = codes[key];\n fields.expected_attendees.setValue(new_expected);\n fields.equipment_codes.setValue(new_codes);\n }\n }\n list_length = list?.length;\n });\n fields.dateTz.valueChanges.subscribe((_) => {\n fields.duration.updateValueAndValidity();\n });\n fields.needs_space.valueChanges.subscribe((space_needed) => {\n if (!space_needed) {\n fields.space_list.setValue([]);\n }\n });\n fields.has_catering.valueChanges.subscribe((has_catering) => {\n if (!has_catering) {\n fields.catering.setValue([]);\n }\n });\n const simplified_fields: HashMap = [\n 'id',\n 'space_list',\n 'space_ids',\n 'notes',\n 'dateTz',\n 'booking_type',\n 'equipment_codes',\n 'expected_attendees',\n 'timezone',\n 'is_before_date',\n ...use_fields\n ].reduce((map, key) => {\n /* istanbul ignore else */\n if (fields[key]) {\n map[key] = fields[key];\n }\n return map;\n }, {});\n \n if (simplified_fields.all_day) {\n const handleAllDay = (value) => {\n if (value) {\n let startOfDay = simplified_fields.dateTz.value.clone();\n // When the booking space isn't set we still need a way to determine midnight\n // and here we use the current concierge building selection's timezone.\n if (manualTimezone) {\n startOfDay = startOfDay.toZone(manualTimezone);\n }\n\n simplified_fields.dateTz.setValidators([Validators.required]);\n simplified_fields.dateTz.setValue(simplified_fields.all_day.value\n ? startOfDay.startOfValue('day')\n : simplified_fields.dateTz.value);\n simplified_fields.duration.setValue(simplified_fields.all_day.value\n ? 24 * 60\n : simplified_fields.duration.value);\n simplified_fields.dateTz.updateValueAndValidity();\n simplified_fields.duration.disable();\n // simplified_fields.dateTz.disable();\n } else {\n const dateValidators = [Validators.required];\n if (!isConcierge) {\n dateValidators.push(isFuture);\n }\n dateValidators.push(validDateTZ)\n simplified_fields.dateTz.setValidators(dateValidators);\n simplified_fields.duration.setValue(booking.duration || 30);\n simplified_fields.dateTz.updateValueAndValidity();\n simplified_fields.duration.enable();\n simplified_fields.dateTz.enable();\n }\n };\n simplified_fields.all_day.valueChanges.subscribe(handleAllDay);\n handleAllDay(simplified_fields.all_day.value);\n }\n\n const occurrences = booking.occurrence_details || [];\n\n //Add recurrence fields\n if(action && booking.recurrence_period === RecurrencePeriod.LIST){\n booking.recurrence_starts = occurrences\n .filter(occurrence => occurrence.id !== booking.recurrence_master_id)\n .map((occurrence) => new DateTZ({date: occurrence.start_epoch * 1000, is_local_tz: false, building_tz: booking.timezone})\n ) \n }\n /**If series exists then set the start and end dates from the first and last bookings in the occurrences array\n * this prevents prefilled form errors due to individual edits\n */\n if(action && action !== SeriesAction.CLONE && action !== BookingAction.CLONE && occurrences && occurrences.length && !booking.id){\n const start_dateTz = new DateTZ({\n date: occurrences.sort((d1, d2) => d1.start_epoch - d2.start_epoch)[0].start_epoch * 1000, \n is_local_tz: false, building_tz: booking.timezone\n })\n simplified_fields.dateTz.setValue(start_dateTz)\n const end = occurrences.sort((d1, d2) => d2.start_epoch - d1.start_epoch)[0].start_epoch * 1000\n booking.recurrence_endTz = new DateTZ({date: end, is_local_tz: false, building_tz: booking.timezone}) \n }\n\n // R-- needs TZ aware fields\n const _recurr_end = simplified_fields.dateTz?.value || new DateTZ({ date: 1 }); // new DateTZ({date: simplified_fields.date?.value}) \n const fields_with_recurrence = {\n ...simplified_fields,\n recurrence_period: new FormControl(booking.recurrence_period || RecurrencePeriod.WEEKLY),\n recurrence_interval: new FormControl(booking.recurrence_interval || 1),\n recurrence_endTz: new FormControl(booking.recurrence_endTz || _recurr_end.addValue({days: 1})),\n recurrence_count: new FormControl(booking.recurrence_count || 0),\n is_recurrent: new FormControl(booking.is_recurrent),\n recurrence_starts: new FormControl(booking.recurrence_starts || []),\n recurrence_exceptions: new FormControl([]),\n recurrence_pattern: new FormControl(RecurrencePeriod.WEEKLY), //Helper value to store the last selected pattern (daily, weekly, monthly),\n recurrence_days: new FormControl(booking.recurrence_days || [])\n }\n\n if(booking.is_recurrent && action !== BookingAction.CLONE){\n fields_with_recurrence.recurrence_starts.setValidators([arrayWithValues])\n fields_with_recurrence.recurrence_starts.updateValueAndValidity()\n fields_with_recurrence.recurrence_endTz.setValidators([Validators.required, validDateTZ]);\n }\n // Generate form group for booking item\n const form = new FormGroup(fields_with_recurrence);\n return form;\n}\n\n/**\n * Validate whether date is in the future\n * @param control Control to check value\n */\nexport function isFuture(control: AbstractControl) {\n const dateTz = control.value; // new DateTZ({date: control.value});\n return dateTz.isBeforeDate(DateNow(new Date()).subtractValue({ minutes: 5 }))\n ? { dateTz: 'Date needs to be in the future' }\n : null;\n}\n\n/**\n * Validate whether an array has values\n * @param control Control to check value\n */\nexport function arrayWithValues (control: AbstractControl) {\n return control.value.length !== 0 ? null : { field: 'Needs at least one value'}\n}\n\n/**\n * Validate whether a date has a valid value (future or current date)\n * @param control Control to check value\n */\n export function validDate (control: AbstractControl) {\n if(!control.value){\n return { date: 'Needs a valid date'}\n }\n const date = new DateTZ({date: control.value})\n const now = DateNow(new Date())\n const isValid = now.isBeforeDate(date, 'day') || now.isSameDate(date, 'day')\n return isValid ? null : { date: 'Needs a valid date'}\n}\n\n/**\n * Validate whether a date has a valid DateTZ value (future or current date)\n * @param control Control to check value\n */\n export function validDateTZ (control: AbstractControl) {\n if(!control.value){\n return { date: 'Needs a valid date'}\n }\n const date = DateNow(control.value.JSDate);\n const now = DateNow(new Date());\n const isValid = now.isBeforeDate(date, 'day') || now.isSameDate(date, 'day')\n return isValid ? null : { date: 'Needs a valid date'}\n}\n\n/**\n * Get minimum duration from ruleset in minutes\n * Default to 5min\n */\nexport function getMinLength(rule_list: HashMap): number {\n return Object.values(rule_list).reduce((min, block) => {\n const min_block = block.reduce((min_length, el) => {\n if (el.conditions.min_length && stringToMinutes(el.conditions.min_length) > min) {\n return stringToMinutes(el.conditions.min_length);\n } else {\n return min_length;\n }\n }, 5);\n if (min_block > min) {\n return min_block;\n } else {\n return min;\n }\n }, 5) as number;\n}\n\n/**\n * Whether the first input is greater than the last. Converts duration strings into minutes\n * @param duration_1 First input can be a number in minutes or a duration string e.g. `1 hour`\n * @param duration_2 Second input can be a number in minutes or a duration string e.g. `30 minutes`\n */\nexport function durationGreaterThanOrEqual(\n duration_1: string | number,\n duration_2: string | number\n) {\n const first: number = typeof duration_1 === 'string' ? stringToMinutes(duration_1) : duration_1;\n const second: number =\n typeof duration_2 === 'string' ? stringToMinutes(duration_2) : duration_2;\n return first >= second;\n}\n\n/**\n * Conver time string into minutes\n * @param str timestring e.g. `'1 day'`, `'15 minutes'`, `'2 weeks'`\n */\nexport function stringToMinutes(str: string): number {\n const parts = str.split(' ');\n return +parts[0] * DURATION_MAP[parts[1]];\n}\n\n/**\n * Get current status within bookings\n * @param bookings List of bookings\n * @param host Host of the new event\n * @param date Datetime of the new event\n */\nexport function statusFromBookings(\n bookings: Booking[] = [],\n bookable: boolean = true,\n requestable: boolean = false,\n dateTz: DateTZ = DateNow(),\n space?: Space\n) {\n const free_slots = getFreeBookingSlots(bookings.filter((bkn) => !bkn.declined));\n const now = DateNow() // new DateTZ({date}); // now should be now\n // commeted bellow piece as correct way to get next free booking slot is at line- 488\n // const next_free_slot = free_slots.find((slot) => {\n // return slot && (slot.start > now.ms || now.ms > slot.start - slot.start % 1000 || now.ms < slot.end - slot.end % 60 * 1000);\n // // const start = new DateTZ({date: slot?.start || 0 });\n // // const end = new DateTZ({date: slot?.end || 0}); // slot end isn't late enough? or after now/\n // // return start.isAfterDate(now) || (now.isAfterDate(start.startOfValue('second')) && now.isBeforeDate(end.startOfValue('minute')))\n // });\n\n const next_free_slot = getNextFreeBookingSlot(bookings.filter((bkn) => !bkn.declined), dateTz.ms);\n \n const start = new DateTZ({date: next_free_slot?.start || 0});\n const end = new DateTZ({date: next_free_slot?.end || 0});\n const currently_free = dateTz.isAfterDate(start.startOfValue('second')) && dateTz.isBeforeDate(end.startOfValue('minute'));\n const time_until_next_block = humaniseDuration(\n currently_free ? end.dateDiff(dateTz, 'minutes') : start.dateDiff(dateTz, 'minutes'),\n 'short'\n );\n\n const free_tomorrow = !currently_free && !start.isSameDate(dateTz, 'day');\n const free_today = currently_free && !end.isSameDate(dateTz, 'day');\n \n return {\n status: (!bookable\n ? SpaceStatus.NotBookable\n : currently_free\n ? requestable\n ? SpaceStatus.Requestable\n : SpaceStatus.Available\n : SpaceStatus.InProgress) as SpaceStatus,\n available_until: free_today\n ? 'No meetings today'\n : currently_free\n ? `Free until ${end.formatDate(timeFormatString())}(${time_until_next_block})`\n : free_tomorrow\n ? 'Unavailable today'\n : `Free at ${start.formatDate(timeFormatString())}(${time_until_next_block})`\n };\n}\n\n/**\n * V1 version display.\n */\nexport const spaceStatusToDisplay = (status: SpaceStatus): string => {\n switch (status) {\n case SpaceStatus.NotBookable:\n return 'Not Bookable';\n case SpaceStatus.Requestable:\n return 'Available by Request';\n case SpaceStatus.Unavailable:\n return 'Unavailable';\n case SpaceStatus.InProgress:\n return 'Meeting in Progress';\n case SpaceStatus.Available:\n default:\n return 'Available';\n }\n};\n\nexport function replaceBookings(\n list: Booking[],\n new_bookings: Booking[],\n filter_options: { room_email: string; fromTz: DateTZ; toTz: DateTZ }\n) {\n const filtered_list = list.filter((booking) => {\n return (\n !(booking.multi_rooms.some(room => room?.email === filter_options.room_email)) ||\n !timePeriodsIntersect(filter_options.fromTz.ms, filter_options.toTz.ms, booking.startDateTz.ms, booking.endDateTz.ms)\n );\n });\n const updated_list = filtered_list.concat(new_bookings);\n updated_list.sort((a, b) => a.date - b.date);\n return unique(updated_list, 'icaluid');\n}\n\nexport function timePeriodsIntersect(\n start1: number,\n end1: number,\n start2: number,\n end2: number,\n type = ''\n) {\n return (\n (start1 >= start2 && start1 < end2) ||\n (end1 > start2 && end1 <= end2) ||\n (start2 >= start1 && start2 < end1) ||\n (end2 > start1 && end2 <= end1)\n );\n}\n\nexport function formatWhen({\n all_day,\n startTZ,\n endTZ,\n displayEndTZ\n}): string {\n if (all_day) {\n return `${startTZ.formatDate('dd MMM yyyy')} - All Day`;\n } else {\n if (startTZ.isSameDate(endTZ, 'day')) {\n return `${startTZ.formatDate('dd MMM yyyy, h:mma')} - ${displayEndTZ.formatDate('h:mma')}`;\n } else {\n return `${startTZ.formatDate('dd MMM yyyy, h:mma')} - ${displayEndTZ.formatDate('dd MMM yyyy, h:mma')}`;\n }\n }\n}\n\nexport const isIncludes = (item: any, field: string, searchVaue: string) => (item && item[field] && item[field].toLowerCase().includes(searchVaue));\n\nexport function searchRoomsAndBookings(allItems: (Space | Booking)[], searchValue: string, isConcierge:boolean = false) {\n\n let relevantItems: (Space | Booking)[] = [];\n\n if(isConcierge) {\n relevantItems = allItems.filter( (item: any ) => \n isIncludes(item, 'title', searchValue) ||\n isIncludes(item.creator, 'name', searchValue) ||\n isIncludes(item.organiser, 'name', searchValue) ||\n isIncludes(item, 'simple_name', searchValue) || // search with room name \n (item?.attendees && !!item?.attendees.filter(el => el.name.toLowerCase().includes(searchValue)).length ) \n );\n } else {\n relevantItems = allItems.filter( (item: any ) => \n this.isIncludes(item.creator, 'name', searchValue) ||\n this.isIncludes(item.organiser, 'name', searchValue) ||\n this.isIncludes(item, 'simple_name', searchValue) \n );\n }\n\n const filteredItems = this.duplicateMultiroomEntriesIfAny(relevantItems);\n \n return filteredItems;\n} \n\nexport function duplicateMultiroomEntriesIfAny(bookings) {\n // Initialize an array to hold the original and duplicated entries \n const updatedBookings = [...bookings];\n\n // Loop through the original bookings array \n [...bookings].forEach(booking => {\n if(booking?.is_multiroom) {\n // calculate the number of times to duplicates the booking\n const duplicatesCount = booking.multi_rooms.filter(el => el.id !== booking.space.id);\n\n // Create the duplicate and add them to the updatedBookings array.\n for(let i = 0; i < duplicatesCount.length; i++) {\n // Deep copy the booking to ensure references are not copied\n const duplicatedBooking = cloneDeep(booking); \n duplicatedBooking.room = duplicatesCount[i]; \n updatedBookings.push(duplicatedBooking);\n }\n }\n });\n\n // Return the array with duplicated entries \n return updatedBookings;\n\n}\n \n","\nimport { Injectable } from '@angular/core';\nimport { ComposerService } from '@placeos/composer';\nimport { BaseAPIService } from '../base.service';\nimport { Booking, IBookingQueryOptions } from './booking.class';\nimport { bookingOptionsToQuery } from './booking.utilities';\nimport {\n HashMap\n} from '@mckinsey-converge/base';\nimport { ServiceManager } from '../service-manager.class';\nimport { SettingsService } from '../settings.service';\nimport { BookingCheckinParams } from './space.types';\nimport { DateNow } from \"@mckinsey-converge/date-tz\";\nimport { Observable } from 'rxjs/internal/Observable';\nimport { forkJoin } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BookingsService extends BaseAPIService {\n constructor(protected _composer: ComposerService,\n settingsService: SettingsService,\n ) {\n super(_composer, settingsService);\n ServiceManager.setService(Booking, this);\n this._name = 'Bookings';\n this._api_route = 'bookings';\n this._compare = (a, b) => !(a.id || '').localeCompare(b.id) || !(a.icaluid || '').localeCompare(b.icaluid);\n }\n\n /**\n * Get user bookings\n * @param options\n */\n public userBookings(options: IBookingQueryOptions,\n uniqueId?: string): Promise {\n if (!options) {\n throw new Error('Booking avilability requires request options');\n }\n const now = DateNow(new Date())\n if (!options.from) {\n options.from = now\n .startOfValue('day')\n .subtractValue({ days: 2 })\n .ms;\n }\n if (!options.until) {\n options.until = null;\n }\n\n const key = `bookings|${options.id ? options.id : ''}|${uniqueId ?? ''}`;\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const respond = (list: Booking[]) => {\n delete this._promises[key];\n resolve(list);\n };\n const error = e => {\n reject(e);\n delete this._promises[key];\n };\n const query = bookingOptionsToQuery(options);\n if (options.id) {\n this.show(options.id, query).then(i => respond([i]), error);\n } else {\n this.query(query).then(respond, error);\n }\n });\n }\n return this._promises[key];\n }\n\n\n /**\n * Save changes to the booking\n * @param booking Booking update or add to the database\n */\n public save(booking: Booking, series?: boolean): Promise {\n const body = booking.toApiJSON()\n if(series){\n body.series = true\n }\n return booking.id ? this.update(booking.id, body) : this.add(body);\n }\n\n /**\n * Checkin atteendee of a booking\n * @param id ID of the booking\n * @param fields Fields associated with the booking and attendee\n */\n public checkin(id: string, fields: BookingCheckinParams) {\n return this.task(id, 'checkin', fields);\n }\n public checkinIndividualVisitor(id: string, fields: BookingCheckinParams) {\n return this.taskObsr(id, 'checkin', fields); \n }\n\n public accept(id: string, fields?: HashMap) {\n return this.task(id, 'accept', fields);\n }\n\n public undo(id: string, status: 'accept' | 'decline', fields?: HashMap) {\n return this.task(id, status, fields);\n }\n\n public decline(id: string, fields?: HashMap) {\n return this.task(id, this.settingsService.concierge ? 'concierge_decline' : 'decline', fields);\n }\n\n protected process(raw_data: HashMap): Booking {\n return new Booking(raw_data);\n }\n\n public declineMultiple(bookings: Booking[]): Observable {\n const requests = [];\n bookings.forEach(bkg => {\n const booking = bkg.toJSON();\n const id = booking.id;\n const fields = {\n booking_id: booking.id,\n organiser: booking.organiser.email,\n room_email: booking.space?.email,\n icaluid: booking.icaluid,\n start: booking.startDateTz.formatDate('h:mm a').toLocaleLowerCase(),\n end: booking.endDateTz.formatDate('h:mm a').toLocaleLowerCase(),\n };\n if (bkg.is_recurrent && bkg.recurrence_type === 'master') {\n // Add series=true for recurrent bookings\n fields['series'] = true;\n } \n requests.push(this.taskObsr(id, 'concierge_decline', fields) ); \n });\n return forkJoin(requests);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ComposerService } from '@placeos/composer';\nimport { PaginatedAPIService } from '../paginated.service';\nimport { Booking, IBookingQueryOptions, } from './booking.class';\nimport { bookingOptionsToQuery } from './booking.utilities';\nimport {\n HashMap\n} from '@mckinsey-converge/base';\nimport { ServiceManager } from '../service-manager.class';\nimport { SettingsService } from '../settings.service';\nimport { BookingCheckinParams } from './space.types';\nimport { Observable } from 'rxjs';\n\nexport interface PaginatedBooking {\n results: Booking[];\n total: number;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BookingsPaginatedService extends PaginatedAPIService {\n constructor(protected _composer: ComposerService,\n settingsService: SettingsService,\n ) {\n super(_composer, settingsService);\n ServiceManager.setService(Booking, this);\n this._name = 'Bookings';\n this._api_route = 'bookings';\n this._compare = (a, b) => !(a.id || '').localeCompare(b.id) || !(a.icaluid || '').localeCompare(b.icaluid);\n }\n\n /**\n * Get user bookings\n * @param options\n */\n public userBookings(options: IBookingQueryOptions,\n uniqueId?: string): Promise {\n if (!options) {\n throw new Error('Booking avilability requires request options');\n }\n\n const key = `bookingsPaginated|${options.id ? options.id : ''}|${uniqueId ?? ''}`;\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const respond = (response: any) => {\n delete this._promises[key];\n resolve(response);\n };\n const error = e => {\n reject(e);\n delete this._promises[key];\n };\n const query = bookingOptionsToQuery(options);\n if (options.id) {\n this.show(options.id, query).then(i => respond([i]), error);\n } else {\n this.query(query).then(respond, error);\n }\n });\n }\n\n return this._promises[key];\n }\n\n\n /**\n * Save changes to the booking\n * @param booking Booking update or add to the database\n */\n public save(booking: Booking): Promise {\n return booking.id ? this.update(booking.id, booking.toJSON()) : this.add(booking.toJSON());\n }\n\n /**\n * Checkin atteendee of a booking\n * @param id ID of the booking\n * @param fields Fields associated with the booking and attendee\n */\n public checkin(id: string, fields: BookingCheckinParams) {\n return this.task(id, 'checkin', fields);\n }\n\n public accept(id: string, fields?: HashMap) {\n return this.task(id, 'accept', fields);\n }\n\n public decline(id: string, fields?: HashMap) {\n return this.task(id, this.settingsService.concierge ? 'concierge_decline' : 'decline', fields);\n }\n\n public undo(id: string, status: 'accept' | 'decline', fields?: HashMap) {\n return this.task(id, status, fields);\n }\n\n protected process(raw_data: HashMap): Booking {\n return new Booking(raw_data);\n }\n\n // public getHoldingBay(query: IBookingQueryOptions): Promise {\n // const key = `bookingsPaginated|holding-bay`;\n // if (!this._promises[key]) {\n // this._promises[key] = new Promise((resolve, reject) => {\n // const respond = (response: any) => {\n // delete this._promises[key];\n // resolve(response);\n // };\n // const error = e => {\n // reject(e);\n // delete this._promises[key];\n // }; \n // this.query(query, { url: '/api/staff/bookings/holding_bay' }).then(respond, error);\n // });\n // }\n\n // return this._promises[key];\n // }\n\n public getHoldingBay = (query: IBookingQueryOptions): Observable => this.queryHoldingBay(query, { url: '/api/staff/bookings/holding_bay' });\n}\n","export * from './booking.class'\nexport * from './space.types'\nexport * from './bookings.service'\nexport * from './bookingsPaginated.service'\nexport * from './booking.utilities'\nexport * from './booking-state.service'\nexport * from './space.utilities'\nexport * from './booking.types'\n","import { SpaceRules } from './booking.types';\n\nimport {\n durationGreaterThanOrEqual,\n stringToMinutes\n} from './booking.utilities';\nimport {\n SpaceCheckOptions,\n SpaceRuleOptions\n} from './space.types';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n/**\n * Get booking rules for the given user and space\n * @param options\n */\nexport function rulesForSpace(options: SpaceRuleOptions): SpaceRules {\n if (!options) {\n throw Error('Options are needed to check for rule matches');\n }\n const space_rules_for_user: SpaceRules = {\n auto_approve: true,\n hide: true,\n reason: ''\n };\n let match = false;\n /* istanbul ignore else */\n if (options.space) {\n for (const type in options.rules) {\n if (\n options.rules.hasOwnProperty(type) &&\n options.rules[type] instanceof Array &&\n options.space.zones.find((zone) => zone === type)\n ) {\n for (const rule_block of options.rules[type]) {\n /* istanbul ignore else */\n if (\n checkRules({\n user: options.user,\n space: options.space,\n time: options.time,\n duration: options.duration,\n rules: rule_block.conditions\n })\n ) {\n const ruleset = rule_block.rules;\n const conditions = rule_block.conditions;\n space_rules_for_user.hide = false;\n /* istanbul ignore else */\n if (conditions.max_length) {\n space_rules_for_user.max_length = stringToMinutes(\n conditions.max_length as string\n );\n }\n /* istanbul ignore else */\n if (conditions.min_length) {\n space_rules_for_user.min_length = stringToMinutes(\n conditions.min_length as string\n );\n }\n // NOTE: use max_length in conditions instead of book_length in rules\n // if (ruleset.book_length) {\n // space_rules_for_user.max_length = stringToMinutes(ruleset.book_length as string);\n // }\n /* istanbul ignore else */\n if (ruleset.auto_approve !== undefined) {\n space_rules_for_user.auto_approve = ruleset.auto_approve;\n }\n match = true;\n space_rules_for_user.reason = '';\n break;\n }\n else {\n space_rules_for_user.reason = 'OfficeRules';\n }\n }\n }\n \n /* istanbul ignore else */\n if (!space_rules_for_user.hide) {\n break;\n }\n }\n }\n if (!match) {\n space_rules_for_user.hide = true;\n }\n return space_rules_for_user;\n}\n\n\n/**\n * Check if user matches the given ruleset\n * @param options\n */\nfunction checkRules(options: SpaceCheckOptions): boolean {\n /* istanbul ignore else */\n if (options.rules) {\n const time = new DateTZ({date: options.time});\n const count = Object.keys(options.rules).length;\n let matches = 0;\n Object.keys(options.rules).forEach((key) => {\n let counter = 0;\n const condition: string[] =\n options.rules[key] instanceof Array\n ? (options.rules[key] as [])\n : [options.rules[key] as string];\n switch (key) {\n case 'groups':\n /* istanbul ignore else */\n if (options.user && options.user.groups) {\n counter = 0;\n condition.forEach((i) =>\n options.user.groups.find((j) => j === i) ? counter++ : null\n );\n /* istanbul ignore else */\n if (counter > 0) {\n matches++;\n }\n }\n break;\n case 'locations':\n /* istanbul ignore else */\n if (options.user && options.user.location) {\n counter = 0;\n condition.forEach((i) =>\n (options.user.last_location.name || '').indexOf(i) >= 0\n ? counter++\n : null\n );\n /* istanbul ignore else */\n if (counter >= options.rules[key].length) {\n matches++;\n }\n }\n break;\n case 'is_before':\n /* istanbul ignore else */\n if (options.time) {\n const duration = stringToMinutes(condition[0]);\n const check = DateNow(new Date()).addValue({ minutes: duration });\n let match = time.isBeforeDate(check);\n /* istanbul ignore else */\n matches += match ? 1 : 0;\n }\n break;\n case 'is_after':\n /* istanbul ignore else */\n if (options.time) {\n\n const duration = stringToMinutes(condition[0]);\n const check = DateNow(new Date());\n time.isAfterDate(check.addValue({ minutes: duration })) ? matches++ : '';\n }\n break;\n case 'min_length':\n /* istanbul ignore else */\n if (\n options.duration &&\n durationGreaterThanOrEqual(options.duration, condition[0])\n ) {\n matches++;\n }\n break;\n case 'max_length':\n /* istanbul ignore else */\n if (\n options.duration &&\n durationGreaterThanOrEqual(condition[0], options.duration)\n ) {\n matches++;\n }\n break;\n }\n });\n return matches >= count;\n }\n return false;\n}\n","\nimport { Injectable } from '@angular/core';\nimport { ComposerService } from '@placeos/composer';\nimport { CateringCategory } from './catering-category.class';\nimport { BaseAPIService } from '../base.service';\nimport { SettingsService } from '../settings.service';\nimport { ServiceManager } from '../service-manager.class';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CateringCategoriesService extends BaseAPIService {\n\n constructor(protected _composer: ComposerService,\n settingsService: SettingsService) {\n super(_composer, settingsService);\n ServiceManager.setService(CateringCategory, this);\n this._name = 'catering category/group';\n this._api_route = 'catering/category';\n }\n\n public query(): never {\n throw Error('No index endpoint for catering categories. Use catering menu service.');\n }\n\n public show(): never {\n throw Error('No show endpoint for catering categories. Use catering menu service.');\n }\n\n public processItem(raw_item: any) {\n return new CateringCategory(raw_item);\n }\n\n public format(item: CateringCategory) {\n return { ...item };\n }\n}\n","import { CateringItem } from \"./catering-item.class\";\nimport { HashMap } from '@mckinsey-converge/base';\n\nexport class CateringCategory extends CateringItem {\n /** Whether item is a category */\n public is_category = true;\n public admin_only: boolean;\n\n constructor(data: HashMap) {\n super(data);\n this.is_category = true;\n (this as any).must_select = this.must_select || 0;\n (this as any).order_anytime = !!data.order_anytime && this.package;\n }\n\n /**\n * Convert class object into plain object\n */\n public toJSON(this: CateringItem): HashMap {\n const obj = super.toJSON();\n obj.order_anytime = !!obj.order_anytime && obj.package;\n return obj;\n }\n}\n","import { HashMap } from '@mckinsey-converge/base';\n\nexport interface CateringAvailability {\n /** Month of the year that the item starts being available */\n readonly from_month: number;\n /** Month of the year that the item ends being available */\n readonly to_month: number;\n}\n\nexport class CateringItem {\n /** Unique ID of the catering item */\n public readonly id: string;\n /** Display name of the catering item */\n public readonly name: string;\n /** Description of the item */\n public readonly description: string;\n /** URL to the image associated with the item */\n public readonly image_path: string;\n /** Type of catering item */\n public readonly catering_type: string;\n /** Availability of the item */\n public readonly available: CateringAvailability;\n /** Time in hours that is needed to prepare the item beforehand */\n public readonly prior_notice: number;\n /** Cost of the item without decimals */\n private unit_price: number;\n /** Cost of the item without decimals */\n public readonly supplier_cost: number;\n /** Minimum number this item allowed in an order */\n public readonly minimum_quantity: number;\n /** Maximum number this item allowed in an order */\n public readonly maximum_quantity: number;\n /** List of categories that the item is contained in */\n public readonly parent_categories: readonly string[];\n /** Allegen information associated with the item */\n public readonly allergy: string;\n /** Whether the supply of this item has run out */\n public out_of_stock: boolean;\n /** Whether item can be ordered within the time limit set by the building */\n public readonly order_anytime: boolean;\n /** Number of child items that must be selected as part of the package */\n public readonly must_select: number;\n /** List of associated items */\n public readonly items: CateringItem[];\n public readonly availableItems: CateringItem[];\n /** Whether child items are part of a package */\n public readonly package: boolean;\n /** List of zone ids associated with the category */\n public readonly zones: readonly string[];\n /** Number of this item in the assoicated order */\n private _amount = 0;\n /** Unique ID of the catering item */\n private instance_id: string;\n /** Whether item is a category */\n public is_category: boolean = false;\n /** Whether item is disabled in Staff App */\n public admin_only: boolean;\n\n public get can_order_anytime(): boolean {\n return (\n this.order_anytime ||\n !this.package && this.items.reduce(\n (anytime, item) => anytime || item.can_order_anytime,\n false,\n )\n );\n }\n\n /** Number of this item in the assoicated order */\n public get amount(): number {\n return this._amount || 0;\n }\n\n /** Unit price in the assoicated order */\n public get price(): number {\n return this.unit_price || 0;\n }\n\n /** Total cost of the amount of items set */\n public get total(): number {\n return (this._amount * this.unit_price) || 0;\n }\n\n constructor(data: HashMap) {\n this.instance_id = `item-${Math.floor(Math.random() * 999_999_999)}`;\n this.id = data.id || '';\n this.name = data.name || '';\n this.is_category = this.id.includes('category-');\n this.available = {\n from_month: (data.available ? data.available.from_month : data.available_from) || -1,\n to_month: (data.available ? data.available.to_month : data.available_to) || -1,\n };\n this.description = data.description || '';\n this.prior_notice = data.prior_notice || data.notice;\n this.unit_price = data.unit_price || data.price || 0;\n this.supplier_cost = data.supplier_cost;\n this.minimum_quantity = Math.max(0, data.minimum_quantity || 0);\n this.maximum_quantity = Math.max(1, data.maximum_quantity || 999);\n this.parent_categories = data.category_ids || data.parent_categories || data.categories;\n this.order_anytime = !!data.order_anytime;\n this.image_path = data.image_path || '';\n this.admin_only = data.admin_only;\n this.catering_type = data.catering_type;\n this.must_select = data.must_select ?? 0;\n this._amount = data._amount || data.amount || 0;\n this.allergy = data.allergy || '';\n const cateringItems: CateringItem[] = (data.items || []).map(item => new CateringItem(item));\n this.items = cateringItems;\n const filteredCateringItems = cateringItems.filter(c => !c.out_of_stock);\n this.availableItems = filteredCateringItems;\n this.out_of_stock = !!data.out_of_stock ||\n // if original items are empty, we hit the bottom, so if we filter out items then its out of stock.\n (cateringItems.length > 0 && filteredCateringItems.length === 0);\n this.package = data.package === 'true' || data.package === true;\n this.zones = data.zones && data.zones.length ? [...data.zones] : [];\n }\n\n public setAmount(amount: number = 0): void {\n if (amount <= this._amount) {\n if (amount < this.minimum_quantity) {\n amount = 0;\n }\n } else {\n if (amount < this.minimum_quantity) {\n amount = this.minimum_quantity;\n }\n }\n this._amount = Math.max(0, Math.min(this.maximum_quantity, amount));\n }\n\n /**\n * Updates the unit_price in the assoicated order if necessary\n * @param price value to compare to unit_price\n */\n public setPrice(price: number = 0): void {\n if(this.unit_price !== price) this.unit_price = price;\n }\n\n /**\n * Increase amount of the item the order\n * @param amount Amount to increase by\n */\n public addToOrder(amount: number = 1) {\n amount = Math.max(1, amount);\n this._amount += amount;\n if (this._amount < 0) {\n this._amount = 0;\n } else if (this._amount < this.minimum_quantity) {\n this._amount = this.minimum_quantity;\n } else if (this._amount > this.maximum_quantity) {\n this._amount = this.maximum_quantity;\n }\n }\n\n /**\n * Decrease amount of the item the order\n * @param amount Amount to decrease by\n */\n public removeFromOrder(amount: number = 1) {\n amount = Math.max(1, amount);\n this._amount -= amount;\n if (this._amount < 0) {\n this._amount = 0;\n } else if (this._amount < this.minimum_quantity) {\n this._amount = 0;\n }\n }\n\n /**\n * Convert class object into plain object\n */\n public toJSON(this: CateringItem): HashMap {\n const obj: any = { ...this };\n // Remove local private members\n delete obj._changes;\n delete obj._server_names;\n // Convert remaining members to be public\n obj.price = obj.unit_price;\n obj.categories = obj.parent_categories;\n const keys = Object.keys(obj);\n for (const key of keys) {\n if (key[0] === '_') {\n const new_key = key.substr(1);\n obj[new_key] = obj[key];\n delete obj[key];\n } else if (obj[key] === undefined) {\n delete obj[key];\n }\n }\n obj.items = obj.items.map((item: CateringItem) => item.toJSON());\n return obj;\n }\n}\n","\nimport { Injectable } from '@angular/core';\nimport { ComposerService } from '@placeos/composer';\nimport { BaseAPIService } from '../base.service';\nimport { CateringItem } from './catering-item.class';\nimport { SettingsService } from '../settings.service';\nimport { ServiceManager } from '../service-manager.class';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CateringItemsService extends BaseAPIService {\n constructor(protected _composer: ComposerService,\n settingsService: SettingsService) {\n super(_composer, settingsService);\n ServiceManager.setService(CateringItem, this);\n this._name = 'Catering Menu';\n this._api_route = 'catering/item';\n }\n\n public query(): never {\n throw Error('No index endpoint for catering items. Use menu service.');\n }\n\n public show(): never {\n throw Error('No show endpoint for catering items. Use menu service.');\n }\n\n public processItem(raw_item: any) {\n return new CateringItem(raw_item);\n }\n\n public format(item: CateringItem) {\n return item instanceof CateringItem ? item.toJSON() : item;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ComposerService } from '@placeos/composer';\n\nimport { CateringItem } from './catering-item.class';\nimport { CateringCategory } from './catering-category.class';\nimport { BaseAPIService } from '../base.service';\nimport { HashMap } from '@mckinsey-converge/base';\nimport { SettingsService } from '../settings.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CateringMenuService extends BaseAPIService {\n constructor(protected _composer: ComposerService,\n settingsService: SettingsService) {\n super(_composer, settingsService);\n this._name = 'Catering Menu';\n this._api_route = 'menu';\n }\n\n /**\n * Convert user data to local format\n * @param user User data\n */\n protected processItem(item: HashMap) {\n return item.items ? new CateringCategory(item) : new CateringItem(item);\n }\n}\n","\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CateringNotesService {\n\n public cateringNotes = [];\n\n \n public setNotes(notes) {\n this.cateringNotes = notes;\n }\n\n public getNotes() {\n return this.cateringNotes;\n }\n}","import { CateringItem } from './catering-item.class';\nimport { HashMap } from '@mckinsey-converge/base';\n\nimport { CateringCategory } from './catering-category.class';\nimport { Booking } from '../bookings';\n\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\nexport type CateringOrderMutableProperties =\n | 'items'\n | 'location_id'\n | 'location'\n | 'delivery_time'\n | 'charge_code'\n | 'notes'\n | 'status';\n\nexport type CateringOrderStatus = 'accepted' | 'preparing' | 'ready' | 'delivered' | 'cancelled';\n\nconst now = DateNow(new Date());\n\n// R--- refactor booking date to be dateTz\nexport class CateringOrder {\n /**\n * Booking fields\n * \n * The app handles booking data inconsisently. Ususally these booking fields are provided\n * for related booking data, but on occasion the full Booking class is used.\n */\n\n /** Unique Booking ID for the catering order */\n readonly booking_id: string;\n /** \n * Timestamp based booking time of the booking associated with the order\n * \n * Must be provide as the true Booking startDateTz or as a new DateTZ with \n * the correct date: timestamp, local_tz = false and bulding_tz values\n */\n readonly booking_date: number;\n /**\n * Timezone of the booking associated with the order\n */\n readonly booking_timezone: string;\n /** ID of the location to deliver the items to */\n location_id: string = '';\n /** Display text for the location to deliver the items to */\n location: string = '';\n /**\n * Smart timezone aware catering datetime with timezone\n */\n readonly bookingDateTz: DateTZ;\n\n /** \n * Booking associated with the order \n * \n * The booking attached to the CateringOrder is a special case used \n * mainly on the Concierge catering reports because someone created \n * a bad pattern to save catering changes to the booking. \n * \n * Avoid when possible.\n */\n public booking: Booking = null;\n\n /**\n * Catering specific fields\n * \n * The app handles booking data inconsisently. Ususally these booking fields are provided\n * for related booking data, but on occasion the full Booking class is used.\n */\n\n /** Whether the order status change is loading */\n public loading: boolean;\n /** Unique ID for the catering order */\n readonly id: string;\n /** Number of minutes after the start of the associated meeting to delivery the order */\n readonly delivery_time: number = 0;\n /** Status of the catering order */\n readonly status: CateringOrderStatus;\n /** Whether items in the order need to be prepared in the kitchen */\n readonly kitchen: boolean;\n /** Whether items in the order are in the pantry */\n readonly pantry: boolean;\n /** List of items */\n readonly items: readonly (CateringItem | CateringCategory)[] = [];\n /** Creation time of the order */\n readonly created_at: number;\n /** Charge code associated with the order */\n readonly charge_code: string;\n /** Notes associated with the order */\n readonly notes: string;\n // /** Mapping of properties to their changes */\n // private _changes: HashMap = {};\n /** Map of local property names to server ones */\n protected _server_names: HashMap = {};\n /** Currency code for the location of the order */\n public symbol: string;\n /** Whether the is an error with the order */\n public error: boolean;\n\n\n constructor(data: HashMap) {\n /** \n * Setup Defaults when raw_data values are not provided\n */\n const nowTz = DateNow(new Date());\n // now rounded to the next 5 minute increment\n const defaultStartTz = nowTz.setValue({ minute: Math.ceil(nowTz.minutes / 5) * 5 });\n const defaultLocalTimezone = Intl?.DateTimeFormat()?.resolvedOptions()?.timeZone;\n\n this.id = data.id || `order-${Math.floor(Math.random() * 999_999_999)}`;\n\n // If the booking is provided default the booking values to the true booking values\n this.booking = data.booking || null;\n\n \n // Has a booking so init with those values\n if (this.hasBookingAttached) {\n this.booking_date = this.booking.startDateTz.ms;\n this.booking_timezone = this.booking.timezone;\n this.bookingDateTz = this.booking.startDateTz;\n this.location_id = data.location_id || '';\n this.location = data.location || '';\n } else {\n this.booking_date = data.booking_date || defaultStartTz.ms;\n this.booking_timezone = data.booking_timezone || defaultLocalTimezone;\n this.bookingDateTz = new DateTZ({ date: this.booking_date, is_local_tz: false, building_tz: this.booking_timezone });\n this.location_id = data.location_id || '';\n this.location = data.location || '';\n }\n \n this.delivery_time = typeof data.delivery_time === 'number' ? data.delivery_time : 0;\n this.status = data.status || 'accepted';\n this.charge_code = data.charge_code || data.code;\n this.notes = data.notes;\n this.kitchen = data.kitchen instanceof Array ? !!data.kitchen.length : data.kitchen;\n this.pantry = data.pantry instanceof Array ? !!data.pantry.length : data.pantry;\n this.symbol = data.symbol || 'USD';\n this.items = (data.items || [])\n .map(item => (item.items ? new CateringCategory(item) : new CateringItem(item)))\n .filter(item => !!item.amount);\n }\n\n /** Special Case, check if a full booking is attached */\n public get hasBookingAttached(): boolean {\n return !!this.booking;\n }\n\n /** Display string for the types of items in the order */\n public get type(): string {\n let type = '';\n /* istanbul ignore else */\n if (this.kitchen) type += 'Kitchen';\n /* istanbul ignore else */\n if (this.pantry) {\n /* istanbul ignore else */\n if (type) type += ' + ';\n type += 'Pantry';\n }\n return type;\n }\n\n /** Total cost of the order */\n public get total(): number {\n return this.items.reduce((total, item) => total + (item.total || 0), 0);\n }\n\n /** Total number of items in the order */\n public get item_count(): number {\n return this.items.reduce((total, item) => total + (item.amount || 0), 0);\n }\n\n public get deliver_date(): DateTZ {\n return (this.bookingDateTz || this.booking?.startDateTz).addValue({ minutes: this.delivery_time })\n }\n\n /** Display string for the delivery time of the order (short version) */\n public get deliver_at(): string {\n return this.deliver_date.formatDate('h:mm a');\n }\n\n /** Display string for the delivery time of the order */\n public get deliver_at_time(): string {\n return this.deliver_date.formatDate('h:mma').toLocaleLowerCase();\n }\n\n /** Display string for the delivery date of the order */\n public get deliver_on_date(): string {\n return this.deliver_date.formatDate('dd MMM yyyy');\n }\n\n /**\n * Make a copy of this object\n */\n public clone(): CateringOrder {\n return new CateringOrder(this.toJSON());\n }\n\n /**\n * Convert class object into plain object\n */\n public toJSON(this: CateringOrder): HashMap {\n const obj: any = { ...this };\n // Remove local private members\n delete obj._server_names;\n // Remove local public members\n delete obj.booking;\n delete obj.loading;\n delete obj.bookingDateTz;\n\n // Convert remaining members to be public\n const keys = Object.keys(obj);\n for (const key of keys) {\n if (key[0] === '_') {\n const new_key = this._server_names[key.substr(1)] || key.substr(1);\n obj[new_key] = obj[key];\n delete obj[key];\n } else if (obj[key] === undefined) {\n delete obj[key];\n }\n }\n obj.items = obj.items.map((item: CateringItem) => item.toJSON());\n\n return obj;\n }\n}\n","import { CateringItem } from './catering-item.class';\n\nexport const mergeCateringItemWithFormData = (existing: CateringItem, override: any) =>\n new CateringItem({\n ...(existing instanceof CateringItem ? existing.toJSON() : existing),\n ...override\n });\n","export * from './catering-item.class';\nexport * from './catering-category.class';\nexport * from './catering-menu.service';\nexport * from './catering-order.class';\nexport * from './catering-categories.service';\nexport * from './catering-items.service';\nexport * from './catering.utilities';\nexport * from './catering-notes.service';\n","import { Injectable } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CloseDialogService {\n private dialogRefMap = new Map>();\n\n constructor() { }\n\n // Register a dialog with its ID\n registerDialog(id: string, dialogRef: MatDialogRef): void {\n this.dialogRefMap.set(id, dialogRef);\n }\n\n // Close a specific dialog by ID\n closeDialog(id: string): void {\n const dialogRef = this.dialogRefMap.get(id);\n if (dialogRef) {\n dialogRef.close();\n this.dialogRefMap.delete(id);\n }\n }\n\n // Optional: Close all dialogs\n closeAllDialogs(): void {\n this.dialogRefMap.forEach((dialogRef, id) => {\n dialogRef.close();\n this.dialogRefMap.delete(id);\n });\n }\n}\n\nexport enum DialogIds {\n MeetingDetails = 'meetingDetailsDialogId',\n BookingConfirmation = 'bookingConfirmationDialogId',\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CollapseService {\n private collapseSubject = new BehaviorSubject(false);\n collapse$ = this.collapseSubject.asObservable();\n\n collapsePanel() {\n this.collapseSubject.next(false);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class DataCommonModule {}\n","import { Injectable } from '@angular/core';\nimport {\n BehaviorSubject,\n Observable,\n Subscription\n} from 'rxjs';\n\nimport {\n HashMap,\n unique\n} from '@mckinsey-converge/base';\n\n/** List of keys that cannot be in a combination by themselves or with each other */\nconst INVALID_STANDALONE_KEYS: string[] = ['control', 'shift', 'alt', 'meta', 'os'];\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HotkeysService {\n /** Map of subjects which store press states of keys */\n private keydown_states: HashMap> = {};\n /** Map of obserers for key state subjects */\n private keydown_observers: HashMap> = {};\n /** List of keys at the end of a combination */\n private combo_end: string[] = [];\n /** List of registered hotkey combinations */\n private registered_combos: string[][] = [];\n /** Counter for the number of keydown events. Used for checking order of key presses */\n private counter: number = 0;\n /** Last key code to be pressed */\n private last_down: string;\n\n constructor() {\n window.addEventListener('keydown', (event: KeyboardEvent) => {\n const code = this.mapKey((event.code || '').toLowerCase());\n /* istanbul ignore else */\n if (this.last_down !== code) {\n /* istanbul ignore else */\n if (!this.keydown_states[code]) {\n this.keydown_states[code] = new BehaviorSubject(null);\n this.keydown_observers[code] = this.keydown_states[code].asObservable();\n }\n this.keydown_states[code].next(++this.counter);\n /* istanbul ignore else */\n if (this.combo_end.indexOf(code) >= 0) {\n event.preventDefault();\n }\n this.last_down = code;\n }\n });\n\n window.addEventListener('keyup', (event: KeyboardEvent) => {\n const code = this.mapKey((event.code || '').toLowerCase());\n /* istanbul ignore else */\n if (this.keydown_states[code]) {\n this.keydown_states[code].next(null);\n }\n /* istanbul ignore else */\n if (this.last_down === code) {\n this.last_down = null;\n }\n });\n }\n\n /**\n * Listen to the given key combination\n * @param combo Array of key codes to listen to or a hotkey string e.g. `Alt+Shift+KeyK`\n * @param next Callback for combination presses\n */\n public listen(combo: string | string[], next: () => void): Subscription {\n combo = (combo instanceof Array ? combo : combo.split('+'));\n const combination: string[] = combo.map(i => this.mapKey(i.toLowerCase()));\n /* istanbul ignore else */\n if (combination.length > 0 && this.validCombination(combination)) {\n this.registered_combos.push(combination);\n const last_key = combination[combination.length - 1];\n /* istanbul ignore else */\n if (!this.keydown_states[last_key]) {\n this.keydown_states[last_key] = new BehaviorSubject(null);\n this.keydown_observers[last_key] = this.keydown_states[last_key].asObservable();\n }\n this.updateCombinationEndList();\n return this.keydown_observers[last_key].subscribe((count) => {\n /* istanbul ignore else */\n if (count) {\n const presses: number[] = [];\n /* istanbul ignore else */\n if (combination.length > 0) {\n // Check that keys are pressed\n for (const key of combination) {\n const state = this.keydown_states[key];\n presses.push(state ? state.getValue() || -1 : -1);\n }\n // Check that keys are pressed in the correct order\n for (let i = 0; i < combination.length - 1; i++) {\n if (presses[i] > presses[i + 1]) {\n return;\n }\n }\n }\n const total = presses.reduce((a, v) => a + (v > 0 ? 1 : -1), 0);\n /* istanbul ignore else */\n if (total >= combination.length) {\n next();\n }\n }\n });\n }\n return null;\n }\n\n /**\n * Map key codes with multiple versions to simple form\n * @param code Code to transform\n */\n private mapKey(code: string): string {\n /* istanbul ignore else */\n if (code.indexOf('alt') >= 0 || code.indexOf('shift') >= 0 || code.indexOf('control') >= 0) {\n return code.replace('left', '').replace('right', '');\n }\n return code;\n }\n\n /**\n * Update the list of the last keys in combinations to allow for prevent default actions on pre-existing hotkeys\n */\n private updateCombinationEndList(): void {\n const key_list = [];\n for (const combo of this.registered_combos) {\n this.combo_end.push(combo[combo.length - 1]);\n }\n this.combo_end = unique(key_list);\n }\n\n /**\n * Checks if the given hotkey combination is allowed and valid\n * @param combo Array of key codes\n */\n private validCombination(combo: string[]): boolean {\n let non_meta = 0;\n for (const key of combo) {\n /* istanbul ignore else */\n if (INVALID_STANDALONE_KEYS.indexOf(key) < 0) {\n non_meta++;\n }\n }\n return non_meta > 0;\n }\n}\n","export * from './location.class';\nexport * from './location.service';\n","import { HashMap } from '@mckinsey-converge/base';\n\nimport { Organisation } from '../organisation/organisation.class';\nimport {\n ServiceLike,\n ServiceManager\n} from '../service-manager.class';\nimport { BuildingLevel } from '../organisation/level.class';\n\nexport class MapLocation {\n /** ID of the element on the associated map */\n public readonly id?: string;\n /** Name of the location */\n public readonly name?: string;\n /** X coordinate of the location */\n public readonly x?: number;\n /** Y coordinate of the location */\n public readonly y?: number;\n /** Level details for the location */\n public readonly level: BuildingLevel;\n /** Whether the position is fixed */\n public readonly fixed: boolean;\n /** Accuracy of the location when not fixed */\n public readonly confidence?: number;\n /** Whether location is at a desk */\n public readonly at_desk?: boolean;\n /** Whether location is set */\n public readonly empty: boolean;\n\n /** Service for managing model on the server */\n protected get _service(): ServiceLike {\n return ServiceManager.serviceFor(MapLocation);\n }\n\n /** Display string for the building and level of the location */\n public get display(): string {\n const service = ServiceManager.serviceFor(Organisation);\n if (!service) {\n return this.level.name;\n }\n const bld = service.buildings.find((bld) => bld.id === this.level.building_id);\n return bld ? `${bld.name}, ${this.level.name}` : this.level.name;\n }\n\n /** Whether location is in a different building from the active one */\n public get in_another_building(): boolean {\n const service = ServiceManager.serviceFor(Organisation);\n return service && service.building.id !== this.level.building_id;\n }\n\n constructor(raw_data: HashMap) {\n this.id = raw_data.id || raw_data.map_id || raw_data.desk_id;\n this.name = raw_data.name || '';\n this.x = raw_data.x\n ? Math.floor(this.normalise(raw_data.x, raw_data.x_max || 10000) * 10000)\n : null;\n this.y = raw_data.y\n ? Math.floor(this.normalise(raw_data.y, raw_data.x_max || 10000) * 10000)\n : null;\n const service = ServiceManager.serviceFor(Organisation);\n this.level =\n raw_data.level instanceof BuildingLevel\n ? raw_data.level\n : service\n ? service.levelWithID(raw_data.level)\n : new BuildingLevel(raw_data.level);\n this.fixed = this.x === null && this.y === null;\n this.confidence = Math.max(5, Math.min(15, raw_data.confidence || 0));\n this.at_desk = this.id && this.id.indexOf('area-') === 0;\n this.empty = !(this.name && this.level && (this.id || this.x || this.y));\n }\n\n /** Normalise the given value within the max */\n private normalise(value: number, max: number): number {\n return value / (max * 1.0);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ComposerService } from '@placeos/composer';\n\nimport { BaseAPIService } from '../base.service';\nimport { MapLocation } from './location.class';\nimport { HashMap } from '@mckinsey-converge/base';\nimport { ServiceManager } from '../service-manager.class';\nimport { SettingsService } from '../settings.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocationService extends BaseAPIService {\n constructor(protected _composer: ComposerService,\n settingsService: SettingsService) {\n super(_composer, settingsService);\n ServiceManager.setService(MapLocation, this);\n this._name = 'Location';\n this._api_route = 'people';\n }\n\n public add(...args): never {\n throw new Error('Create not allowed for location service')\n }\n\n public update(...args): never {\n throw new Error('Update not allowed for location service')\n }\n\n public delete(...args): never {\n throw new Error('Delete not allowed for location service')\n }\n\n public process(item: HashMap) {\n return new MapLocation(item) as any;\n }\n}\n","import { BaseDataClass } from '../base-api.class';\nimport {\n getItemWithKeys,\n HashMap,\n Identity\n} from '@mckinsey-converge/base';\nimport { BuildingLevel } from './level.class';\nimport { BookingRule } from '../bookings';\nimport { ServiceManager } from '../service-manager.class';\n\nexport interface BuildingCity {\n timezone: string\n name: string\n}\n\nexport interface IBuildingRoleUser {\n name: string;\n email: string;\n phone: string;\n}\n\nexport interface LockerMap {\n [zone: string]: {\n [area: string]: {\n [type: string]: (string | boolean)[][];\n };\n };\n}\n\nexport interface ICoordinates {\n longitude: number;\n latitude: number;\n}\n\nexport interface LevelFeature {\n id: string;\n level_id: string;\n name: string;\n}\n\nexport interface BookingRuleDetails {\n /** List of booking rules details for the building */\n readonly rules: readonly string[];\n /** Custom booking rules for the map */\n readonly map_rules?: readonly string[];\n /** Custom booking rules for the map */\n readonly other_rules?: readonly string[];\n /** Contact email address for the building */\n readonly contact?: string;\n /** Information string to display before the rule listings */\n readonly info?: string;\n /** Link for more details */\n readonly link?: { url?: string, name?: string };\n /**\n * Allow buildings to define their own rules formats where needed or for special messages.\n */\n readonly custom_html?: string;\n}\n\nexport class Building extends BaseDataClass {\n /** Service for managing buildings */\n protected get _service() {\n return ServiceManager.serviceFor(Building);\n }\n\n /** Engine Zone ID for the building */\n public readonly zone_id: string;\n /** Organisation Code for the building */\n public readonly code: string;\n /** Geographical address of the building */\n public readonly address: string;\n /** Details about the booking rules for the building */\n public readonly booking_details: BookingRuleDetails;\n /** Details about the booking rules for the building */\n public readonly booking_rules: HashMap;\n /** Number of hour before a booking catering is restricted */\n public readonly catering_restricted_from: number;\n /** Currency code for the country assoicated with the building */\n public readonly currency: string;\n /** Map of fields that are required on the form */\n public readonly required: HashMap;\n /** IANA timezone database string for the location the building resides */\n public readonly timezone: string;\n /** Whether catering is available in this building */\n public readonly has_catering: boolean;\n /** ID of the system used for the holding bay */\n public readonly holding_bay: string;\n /** ID of the system used for standalone visitors bookings */\n public readonly visitor_space: string;\n /** List of zones to determine sort order spaces */\n public readonly sort_order: readonly string[];\n /** Searchable map features */\n public readonly searchables: readonly LevelFeature[];\n /** List of available extras for the building */\n public readonly extras: readonly Identity[];\n /** List of available extra equipment for loan at the building */\n public readonly loan_items: readonly Identity[];\n /** List of available levels for the building */\n public readonly levels: readonly BuildingLevel[];\n /** The city the building belongs in **/\n public readonly city: string;\n\n public readonly catering_hours: { readonly start: number, readonly end: number };\n /** Map of custom settings for the building */\n private _settings: HashMap;\n /** Map of roles and list of the associated users */\n private _roles: HashMap;\n /** Map of the locker ID arrays */\n private _lockers: LockerMap;\n /** Map of important system ids for the building */\n private _systems: HashMap;\n /** Map of important phone numbers for the building */\n private _phone_numbers: HashMap;\n /** Globe coordiates for the build */\n private _location: ICoordinates;\n /** List of zones associated with the building */\n public readonly zones: readonly string[];\n\n constructor(raw_data: HashMap) {\n super(raw_data);\n const settings = raw_data.settings || {};\n const disc_info = settings.discovery_info || {};\n this.zone_id = raw_data.zone_id || raw_data.zone;\n this.extras = (raw_data.extras || disc_info.extras || []).map(i => ({\n id: i.extra_id || i.id,\n name: i.extra_name || i.name\n }));\n this.loan_items = (raw_data.loan_items || disc_info.loan_items || []).map(i => ({\n id: i.extra_id || i.id,\n name: i.extra_name || i.name\n }));\n this.levels = (raw_data.levels || disc_info.levels || []).map(i => new BuildingLevel({\n ...i,\n building_id: this.id\n }));\n this._roles = raw_data.roles || disc_info.roles || {};\n this._lockers = raw_data.lockers || raw_data.locker_structure || disc_info.locker_structure || {};\n this._systems = raw_data.systems || disc_info.systems || {};\n this._settings = settings;\n this._phone_numbers = raw_data.phone_numbers || disc_info.phone_numbers || {};\n this._location = raw_data.location || disc_info.location || { longitude: null, latitude: null };\n this.catering_hours = raw_data.catering_hours || disc_info.catering_hours || settings.catering_hours || {\n start: 7,\n end: 20\n };\n const searchables = [];\n if (raw_data.neighbourhoods) {\n for (const lvl in raw_data.neighbourhoods) {\n if (raw_data.neighbourhoods.hasOwnProperty(lvl)) {\n const lvl_features = raw_data.neighbourhoods[lvl] || {};\n for (const feature in lvl_features) {\n if (lvl_features.hasOwnProperty(feature)) {\n searchables.push({\n id: lvl_features[feature],\n name: feature,\n level_id: lvl\n });\n }\n }\n }\n }\n }\n this.searchables = searchables;\n this.code = raw_data.code || disc_info.code || settings.code || '';\n this.address = raw_data.address || disc_info.address || settings.address || '';\n this.booking_details = raw_data.booking_details || disc_info.booking_details || settings.booking_details || {};\n this.booking_rules = raw_data.booking_rules || disc_info.booking_rules || settings.booking_rules || {};\n this.catering_restricted_from = raw_data.catering_restricted_from || disc_info.catering_restricted_from || settings.catering_restricted_from || 0;\n this.currency = raw_data.currency || disc_info.currency || settings.currency || 'USD';\n this.required = raw_data.required || disc_info.required || settings.required || {};\n if (disc_info.requires_equipment_code) {\n this.required.equipment_code = true;\n }\n if (disc_info.requires_expected_attendees) {\n this.required.expected_attendees = true;\n }\n this.timezone = raw_data.timezone || disc_info.timezone || settings.timezone || '';\n this.has_catering = raw_data.has_catering || disc_info.has_catering || settings.has_catering || false;\n this.holding_bay = raw_data.holding_bay || disc_info.holding_bay || settings.holding_bay || '';\n this.visitor_space = raw_data.visitor_space || disc_info.visitor_space || settings.visitor_space || '';\n this.sort_order = raw_data.sort_order || disc_info.sort_order || settings.sort_order || [];\n this.city = raw_data.city || disc_info.city || 'No City';\n }\n\n /**\n * Get a custom building setting\n * @param key Name of the setting. i.e. nested items can be grabbed using `.` to seperate key names\n */\n public setting(key: string): any {\n const keys = key.split('.');\n const value = getItemWithKeys(keys, this._settings) || getItemWithKeys(['discovery_info', ...keys], this._settings);\n return value;\n }\n\n /**\n * Get list of users with the associated role\n * @param name Role to find users for\n */\n public role(name: string): IBuildingRoleUser[] {\n return [...(this._roles[name] || [])];\n }\n\n /**\n * Get list of the names of available user role lists\n */\n public get role_names(): string[] {\n return Object.keys(this._roles).filter(i => this._roles.hasOwnProperty(i));\n }\n\n /** Map of the locker ID arrays */\n public get lockers(): LockerMap {\n return { ...(this._lockers || {}) };\n }\n\n /** Map of important system ids for the building */\n public get systems(): HashMap {\n return { ...(this._systems || {}) };\n }\n\n /** Map of important phone numbers for the building */\n public get phone_numbers(): HashMap {\n return { ...(this._phone_numbers || {}) };\n }\n\n /** Real coordinates */\n public get location(): ICoordinates {\n return { ...this._location };\n }\n\n /**\n * Get search map feature for the given level ID\n * @param level_id ID of level to grab features for\n */\n public featuresForLevel(level_id: string): LevelFeature[] {\n return (this.searchables || []).filter(i => i.level_id === level_id);\n }\n\n /**\n * Building objects are readonly and cannot be changed\n */\n public async save(): Promise {\n throw new Error('Building objects are readonly and cannot be changed');\n }\n\n /**\n * Building objects are readonly and cannot be deleted\n */\n public async delete(): Promise {\n throw new Error('Building objects are readonly and cannot be deleted');\n }\n}\n","export * from './building.class';\nexport * from './level.class';\nexport * from './organisation.class';\nexport * from './organisation.service';\n","import { HashMap } from 'libs/base/src/lib/types.utilities';\n\n/** Building Level data */\nexport class BuildingLevel {\n /** ID of the building level zone */\n readonly id: string;\n /** ID of the building zone associated with the level */\n readonly building_id: string;\n /** Name of the level */\n readonly name: string;\n /** Number or short identifier of the level */\n readonly short_name: string;\n /** Map URL for the level */\n readonly map_url: string;\n /** Usage type for the level */\n readonly type: 'staff' | 'client' | 'any';\n /** Setting for the level */\n readonly settings: HashMap;\n\n constructor(_data: HashMap = {}) {\n this.id = _data.id || _data.level_id || '';\n this.building_id = _data.bld_id || _data.building_id || '';\n this.name = _data.name || _data.level_name || '';\n const lower_name = this.name.toLowerCase();\n const num = lower_name.indexOf('level') >= 0 ? lower_name.replace(/ ?level ?/gi, '') : lower_name.substr(0, 1).toUpperCase();\n this.short_name = _data.short_name || num || '';\n this.map_url = _data.map_url || '';\n this.type = _data.type || _data.floor_type || 'any';\n this.settings = _data.settings;\n }\n}\n","import { BaseDataClass } from '../base-api.class';\nimport {\n getItemWithKeys,\n HashMap\n} from '@mckinsey-converge/base';\n\n/* istanbul ignore next */\n\nexport class Organisation extends BaseDataClass {\n /** List of available building zone ids for the organisation */\n public readonly available_buildings: readonly string[];\n /** Map of custom settings for the building */\n private _settings: HashMap;\n\n constructor(raw_data: HashMap = {}) {\n super(raw_data);\n this._settings = raw_data.settings || {};\n this.available_buildings = (raw_data.settings?.discovery_info?.buildings || []).map(\n (bld) => bld.zone_id\n );\n }\n\n /**\n * Get a custom building setting\n * @param key Name of the setting. i.e. nested items can be grabbed using `.` to seperate key names\n */\n public setting(key: string): any {\n const keys = key.split('.');\n const value = getItemWithKeys(keys, this._settings);\n return value;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ComposerService } from '@placeos/composer';\n\nimport { BaseAPIService } from '../base.service';\nimport { Organisation } from './organisation.class';\nimport { Building } from './building.class';\nimport {\n ApplicationLoadingState,\n HashMap,\n Identity\n} from '@mckinsey-converge/base';\nimport { BuildingLevel } from './level.class';\nimport { first } from 'rxjs/operators';\nimport { ApplicationService } from '../app.service';\nimport { ServiceManager } from '../service-manager.class';\nimport { UsersService } from '../users';\nimport { SettingsService } from '../settings.service';\nimport { Observable, Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OrganisationService extends BaseAPIService {\n /** Organisation data for the application */\n private _organisation: Organisation;\n /** Actively displayed building */\n private _active_building: string;\n\n private _spaceTypesSubject: Subject = new Subject();\n\n constructor(\n protected _composer: ComposerService,\n private _service: ApplicationService,\n private _users: UsersService,\n settingsService: SettingsService,\n ) {\n super(_composer, settingsService);\n ServiceManager.setService(Organisation, this);\n ServiceManager.setService(Building, this);\n this._name = 'Organisation';\n this._api_route = 'zones';\n this.set('buildings', []);\n this.set('active_building', null);\n this._users.initialised.pipe(first((_) => _)).subscribe(() => this.init());\n }\n\n /**\n * Add is not available on organisation service\n */\n public async add(form_data: HashMap, query_params?: HashMap): Promise {\n throw new Error('Add is not available on the organisation service');\n }\n\n /**\n * Update is not available on organisation service\n */\n public async update(\n id: string,\n form_data: HashMap,\n query_params?: HashMap\n ): Promise {\n throw new Error('Update is not available on the organisation service');\n }\n\n /**\n * Delete is not available on organisation service\n */\n public async delete(id: string): Promise {\n throw new Error('Delete is not available on the organisation service');\n }\n\n /**\n * Get list of levels for the given building ID\n * @param bld_id Building ID\n */\n public levels(bld_id: string): readonly BuildingLevel[] {\n return (this.buildings.find((i) => i.id === bld_id) || ({} as Building)).levels;\n }\n\n /**\n * Get a setting from the organisation or active building\n * @param key Name of the setting. i.e. nested items can be grabbed using `.` to seperate key names\n */\n public setting(key: string) {\n return this.building.setting(key) || this._organisation.setting(key);\n }\n\n /** Active building */\n public get building(): Building {\n return this.buildings.find((i) => i.id === this._active_building);\n }\n\n /** List of types of spaces */\n public get space_types(): Identity[] {\n return this.get('space_types') || [];\n }\n\n public set building(bld: Building) {\n if (bld instanceof Building) {\n this._active_building = bld.id;\n } else {\n this._active_building = bld;\n }\n this.set('active_building', this.building);\n this.loadSpaceTypes();\n localStorage.setItem('PlaceOS.building', this._active_building);\n localStorage.setItem('CONCIERGE.timezone', bld.timezone);\n }\n\n /** List of buildings for the organisation */\n public get buildings(): Building[] {\n return this.get('buildings') || [];\n }\n\n /**\n * Get list of available equipment\n * @param id ID of the building to get the list from. i.e. Defaults to the active building\n */\n public getExtras(id: string, bld_id?: string) {\n const bld = this.buildings.find((i) => i.id === bld_id) || this.building;\n if (bld && id) {\n return bld.extras.filter((i) => `${i.id}`.indexOf(id) >= 0);\n }\n return [];\n }\n\n /**\n * Get the first level matching the list of given IDs\n * @param ids List of ID to search with\n */\n public levelWithID(ids: string | string[]): BuildingLevel {\n const list = ids instanceof Array ? ids : [ids];\n const bld_list = this.buildings;\n for (const id of list) {\n for (const bld of bld_list) {\n for (const lvl of bld.levels) {\n if (lvl.id === id) {\n return lvl;\n }\n }\n }\n }\n return null;\n }\n\n /**\n * Initialise service data\n */\n protected async load(): Promise {\n /* istanbul ignore else */\n if (localStorage) {\n this._active_building = localStorage.getItem(`${this.settingsService.frontend.toUpperCase()}.building`);\n }\n const loading: ApplicationLoadingState = this._service.get('loading') || {};\n loading.organisation = { message: 'Loading organisation data', state: 'loading' };\n await this.loadOrganisation();\n loading.organisation = { message: 'Loading organisation data', state: 'complete' };\n loading.buildings = { message: 'Loading building data', state: 'loading' };\n this._service.set('loading', loading);\n await this.loadBuildings();\n loading.buildings = { message: 'Loading building data', state: 'complete' };\n loading.levels = { message: 'Loading building floor data', state: 'loading' };\n this._service.set('loading', loading);\n await this.loadLevels();\n loading.levels = { message: 'Loading building floor data', state: 'complete' };\n this._service.set('loading', loading);\n loading.space_types = { message: 'Loading space type data', state: 'loading' };\n this._service.set('loading', loading);\n await this.loadSpaceTypes();\n loading.space_types = { message: 'Loading space type data', state: 'complete' };\n this._service.set('loading', loading);\n const user = this._users.current;\n\n if (user) {\n const id = localStorage.getItem('PlaceOS.building');\n const building = this.buildings.find(bld => id && bld.id === id) || this.buildings.find((bld) => bld.code === user.location);\n if (building) {\n this._active_building = building.id;\n this.set('active_building', building);\n } else if(this.building) {\n // This conditional solves a problem of infinite loop when user building doesn't exist.\n this._active_building = this.building.id;\n this.set('active_building', this.building);\n }\n }\n }\n\n /**\n * Load organisation data for application\n */\n public async loadOrganisation(): Promise {\n const org_data = await this.query({ tags: 'org', engine: true });\n this._organisation = new Organisation(org_data[0]);\n this.set('organisation', this._organisation);\n return this._organisation;\n }\n\n /**\n * Load building data for the organisation already stored in the service..\n */\n public async loadBuildings(): Promise {\n return this.loadBuildingsWithOrg(this._organisation);\n }\n\n /**\n * Load building data for the organisation passed.\n */\n public async loadBuildingsWithOrg(organisation: Organisation): Promise {\n const bld_data = await this.query({ tags: 'building', engine: true, limit: 1000 });\n const buildings = (bld_data as HashMap[])\n .map((i) => new Building(i))\n .filter((bld) => organisation.available_buildings.includes(bld.id));\n this.set('buildings', buildings);\n /* istanbul ignore else */\n if (!this._active_building && buildings && buildings.length > 0) {\n this._active_building = buildings[0].id;\n }\n return buildings;\n }\n\n /**\n * Load level data for the buildings\n */\n public async loadLevels(): Promise {\n const lvl_data = await this.query({ tags: 'level', engine: true, limit: 1000 });\n const levels = (lvl_data as HashMap[]).map((i) => new BuildingLevel(i));\n this.set('levels', levels);\n return levels;\n }\n\n /**\n * Load space type data for the buildings\n */\n public async loadSpaceTypes(): Promise {\n const type_data = await this.query({ tags: 'room', engine: true, limit: 1000, building_id: this._active_building });\n const types = (type_data as HashMap[]).map((i) => ({ id: i.id, name: i.name }));\n this.set('space_types', types);\n // Emit the updated space_types\n this._spaceTypesSubject.next(types);\n }\n\n /**\n * Observable to listen for changes in space_types\n */\n public get spaceTypesObservable(): Observable {\n return this._spaceTypesSubject.asObservable();\n }\n\n public getOrganizationFiltersByRoomType(key: string) {\n if (!this._organisation) {\n return {}\n }\n const discovery_info = this._organisation.setting('discovery_info')\n\n return discovery_info && discovery_info[key] ? discovery_info[key] : {}\n }\n\n public getRoomTypeSubsetDDOptions(type:string) {\n const filters = this.getOrganizationFiltersByRoomType(type) || {}\n return [...Object.keys(filters).map((key) => {\n const display = filters[key].toString();\n return {\n display,\n value: key,\n meta: {}\n }\n }) ];\n }\n\n}\n","import { ComposerService } from '@placeos/composer';\nimport { BehaviorSubject, Observable, of, Subject, Subscriber } from 'rxjs';\n\nimport { BaseAPIService } from './base.service';\nimport { BaseClass, HashMap } from '@mckinsey-converge/base';\nimport { ApplicationService } from './app.service';\nimport { toQueryString } from './api.utilities';\nimport { SettingsService } from './settings.service';\nimport { catchError, map } from 'rxjs/operators';\n\nexport interface IEngineResponse {\n results: HashMap[];\n total: number;\n}\n\nexport class PaginatedAPIService extends BaseClass {\n /** Application service */\n public parent: ApplicationService;\n /** Display name of the service */\n protected _name: string;\n /** API Route of the service */\n protected _api_route: string;\n /** Map of state variables for Service */\n protected _subjects: { [key: string]: BehaviorSubject | Subject } = {};\n /** Map of observables for state variables */\n protected _observers: { [key: string]: Observable } = {};\n /** Map of poll subscribers for API endpoints */\n protected _subscribers: { [key: string]: Subscriber } = {};\n /** Map of promises for Service */\n protected _promises: { [key: string]: Promise } = {};\n /** Comparison function for service items */\n protected _compare: (a: T, b: T) => boolean = (a, b) =>\n a === b || (a as any).id === (b as any).id;\n /** Default filter function for list method */\n protected _list_filter: (a: T) => boolean = (a) => !!a;\n\n /** Http Client */\n protected get http() {\n return this._composer.http;\n }\n\n constructor(protected _composer: ComposerService,\n protected settingsService: SettingsService) {\n super();\n this._name = 'Base';\n this._api_route = 'base';\n this.set('list', []);\n }\n\n /**\n * Injects concierge into form_data.\n */\n private injectConcierge(form_data: HashMap) {\n // we only send it over when concierge, since the BE may check for presence rather than\n // if its true or not.\n if (this.settingsService.concierge) {\n return { ...form_data, concierge: true }\n }\n return form_data;\n }\n\n /**\n * Initailise service\n */\n public init() {\n this.load().then(\n (_) => this._initialised.next(true),\n (err) => this.timeout('init', () => this.init(), 1000)\n );\n }\n\n /**\n * Get API route for the service\n * @param engine Whether endpoint is using the application API or engine API\n */\n public route(engine: boolean = false) {\n const endpoint = engine\n ? this._composer.auth.api_endpoint\n : '/api/staff';\n return `${endpoint}/${this._api_route}`;\n }\n\n /** API Route of the service */\n public get api_route() {\n return this._api_route;\n }\n\n /**\n * Get the current value of the named property\n * @param name Property name\n */\n public get(name: string): U {\n if (!this._observers[name]) {\n this.set(name, null);\n }\n return (this._subjects[name] as BehaviorSubject).getValue();\n }\n\n /**\n * Listen to value change of the named property\n * @param name Property name\n * @param next Callback for value changes\n */\n public listen(name: string): Observable {\n if (!this._observers[name]) {\n this.set(name, null);\n }\n return this._observers[name];\n }\n\n /**\n * Update the value of the named property\n * @param name Property name\n * @param value New value\n */\n protected set(name: string, value: U): void {\n if (!this._subjects[name]) {\n this._subjects[name] = new BehaviorSubject(value);\n this._observers[name] = this._subjects[name].asObservable();\n } else {\n this._subjects[name].next(value);\n }\n }\n\n /**\n * Get list of loaded items\n * @param predicate Function for filtering the list\n */\n public filter(predicate: (a: T) => boolean = this._list_filter): T[] {\n const list: T[] = this.get('list');\n return list.filter(predicate);\n }\n\n /**\n * Get item with the given id from the loaded items\n * @param id ID of the item\n */\n public find(id: string): T {\n const list = this.get('list');\n return list.find((i) => i.id === id || (i.email?.toLowerCase() === id?.toLowerCase()));\n }\n\n /**\n * Query the index of the API route associated with this service\n * @param query_params Map of query paramaters to add to the request URL\n */\n public query(query_params: HashMap = {}, config: { url?: string } = {}): Promise {\n let engine = false;\n let cache = 1000;\n /* istanbul ignore else */\n if (query_params) {\n engine = !!query_params.engine;\n delete query_params.engine;\n cache = query_params.cache || 1000;\n delete query_params.cache;\n }\n const query = toQueryString(query_params);\n const key = `query|${query}`;\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const url = config && config.url ? `${config.url}${query ? '?' + query : ''}` : `${this.route(engine)}${query ? '?' + query : ''}`;\n let result: IEngineResponse;\n this.http.get(url).subscribe(\n (d: IEngineResponse | HashMap[]) => {\n if (d && d instanceof Array) {\n const results = d.map((i) => this.process(i));\n result = {\n results,\n total: results.length,\n }\n } else if (d && !(d instanceof Array) && d.results && d.total) {\n const results = d.results.map((i) => this.process(i));\n result = {\n results,\n total: d.total,\n }\n } else if (d && !(d instanceof Array) && d.results) {\n const results = d.results.map((i) => this.process(i));\n result = {\n results,\n total: results.length,\n }\n } else {\n result = {\n results: [],\n total: 0,\n }\n }\n },\n (e) => {\n reject(e);\n this._promises[key] = null;\n },\n () => {\n resolve(result);\n this.timeout(key, () => (this._promises[key] = null), cache);\n }\n );\n });\n }\n return this._promises[key];\n }\n\n /**\n * \n * @param query_params \n * @param config \n * @returns \n */\n queryHoldingBay(query_params: HashMap = {}, config: { url?: string } = {}):Observable {\n const query = toQueryString(query_params);\n const url = `${config.url}${query ? '?' + query : ''}`;\n return this.http.get(url).pipe(\n map((d: IEngineResponse | HashMap[]) => this.processApiResult(d) ),\n catchError((error: any, result?: T) => {\n console.log(error);\n return of(result as T);\n })\n );\n }\n\n /**\n * \n * @param d \n * @returns \n */\n processApiResult(d: IEngineResponse | HashMap[]): IEngineResponse{\n let result: IEngineResponse;\n if (d && d instanceof Array) {\n const results = d.map((i) => this.process(i));\n result = {\n results,\n total: results.length,\n }\n } else if (d && !(d instanceof Array) && d.results && d.total) {\n const results = d.results.map((i) => this.process(i));\n result = {\n results,\n total: d.total,\n }\n } else if (d && !(d instanceof Array) && d.results) {\n const results = d.results.map((i) => this.process(i));\n result = {\n results,\n total: results.length,\n }\n } else {\n result = {\n results: [],\n total: 0,\n }\n }\n return result;\n }\n \n\n /**\n * Query the API route for a sepecific item\n * @param id ID of the item\n * @param query_params Map of query paramaters to add to the request URL\n */\n public show(id: string, query_params: HashMap = {}): Promise {\n let engine = false;\n /* istanbul ignore else */\n if (query_params) {\n engine = !!query_params.engine;\n delete query_params.engine;\n }\n const query = toQueryString(query_params);\n const key = `show|${id}|${query}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const url = `${this.route(engine)}/${id}${query ? '?' + query : ''}`;\n let result: T = null;\n this.http.get(url).subscribe(\n (d) => {\n result = this.process(d); \n },\n (e) => {\n reject(e);\n this._promises.new_item = null;\n },\n () => {\n resolve(result);\n this.timeout(key, () => (this._promises[key] = null), 1000);\n }\n );\n });\n }\n return this._promises[key];\n }\n\n /**\n * Make post request for a new item to the service\n * @param form_data Data to post to the server\n * @param query_params Map of query paramaters to add to the request URL\n */\n public add(form_data: HashMap, query_params: HashMap = {}): Promise {\n /* istanbul ignore else */\n if (!this._promises.new_item) {\n this._promises.new_item = new Promise((resolve, reject) => {\n const query = toQueryString(query_params);\n const url = `${this.route(query_params.engine)}${query ? '?' + query : ''}`;\n let result: T = null;\n this.http.post(url, this.injectConcierge(form_data)).subscribe(\n (d) => (result = this.process(d)),\n (e) => {\n reject(e);\n this.analyticsEvent(`create-${this._name.toLowerCase()}-failed`);\n this._promises.new_item = null;\n },\n () => {\n resolve(result);\n this.set('list', this.updateList(this.get('list'), [result]));\n this.analyticsEvent(`create-${this._name.toLowerCase()}-success`);\n this._promises.new_item = null;\n }\n );\n });\n }\n return this._promises.new_item;\n }\n\n /**\n * Perform API task for the given item ID\n * @param id ID of the item\n * @param task_name Name of the task\n * @param form_data Map of data to pass to the API\n * @param method Verb to use for request\n */\n public task(\n id: string,\n task_name: string,\n form_data: HashMap = {},\n method: 'post' | 'get' = 'post'\n ): Promise {\n const query = toQueryString(this.injectConcierge(form_data));\n const key = `task|${id}|${task_name}|${query}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const post_data = { ...form_data, id, _task: task_name };\n const url = `${this.route(false)}/${id}/${task_name}`;\n let result: any;\n const request =\n method === 'post'\n ? this.http.post(url, post_data)\n : this.http.get(`${url}${query ? '?' + query : ''}`);\n request.subscribe(\n (d) => (result = d),\n (e) => {\n reject(e);\n this.analyticsEvent(\n `${this._name.toLowerCase()}-task-${task_name}-failed`,\n id\n );\n delete this._promises[key];\n },\n () => {\n resolve(result as U);\n this.analyticsEvent(\n `${this._name.toLowerCase()}-task-${task_name}-success`,\n id\n );\n this.timeout(key, () => delete this._promises[key], 1000);\n }\n );\n });\n }\n return this._promises[key];\n }\n\n\n /**\n * Make put request for changes to the item with the given id\n * @param id ID of the item being updated\n * @param form_data New values for the item\n * @param query_params Map of query paramaters to add to the request URL\n */\n public update(id: string, form_data: HashMap, query_params: HashMap = {}): Promise {\n const key = `update|${id}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const query = toQueryString(this.injectConcierge(query_params));\n const url = `${this.route(query_params.engine)}/${id}${query ? '?' + query : ''}`;\n let result: T = null;\n this.http.put(url, this.injectConcierge(form_data)).subscribe(\n (d) => (result = this.process(d)),\n (e) => {\n reject(e);\n this.analyticsEvent(`update-${this._name.toLowerCase()}-failed`, id);\n this._promises[key] = null;\n },\n () => {\n resolve(result);\n this.set(\n 'list',\n this.updateList(this.removeItem(this.get('list'), { id } as any), [\n result\n ])\n );\n this.analyticsEvent(`update-${this._name.toLowerCase()}-success`, id);\n this._promises[key] = null;\n }\n );\n });\n }\n return this._promises[key];\n }\n\n /**\n * Make delete request for the given item\n * @param id ID of item\n */\n public delete(id: string, q: HashMap = {}): Promise {\n const key = `delete|${id}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const query = toQueryString(q);\n const url = `${this.route()}/${id}${query ? '?' + query : ''}`;\n this.http.delete(url).subscribe(\n (_) => null,\n (e) => {\n reject(e);\n this._promises[key] = null;\n },\n () => {\n this.set('list', this.removeItem(this.get('list'), { id } as any));\n this._promises[key] = null;\n resolve();\n }\n );\n });\n }\n return this._promises[key];\n }\n\n /**\n * Load initial data for the service\n */\n protected async load(): Promise {\n }\n\n /**\n * Post analytics event for this service\n * @param action Name of the action to post\n */\n protected analyticsEvent(action: string, label?: string) {\n // if (this.parent && this.parent.Analytics) {\n // this.parent.Analytics.track(this._name, { desc: `${this.parent.name.toLowerCase()}-${action}`, label });\n // }\n }\n\n /**\n * Convert raw API data into a valid API Object\n * @param raw_item Raw API data\n */\n protected process(raw_item: HashMap): T {\n return raw_item as T;\n }\n\n /**\n * Update recorded list of items\n * @param old_list Old list of items\n * @param list List of updated items\n * @param compareFn Function to compare items to remove duplicates\n */\n public updateList(\n old_list: T[],\n list: T[],\n compareFn: (a: T, b: T) => boolean = this._compare\n ): T[] {\n /* istanbul ignore else */\n if (!list || list.length === 0) {\n return old_list;\n }\n const new_list: T[] = [];\n const mixed_list = [...list, ...old_list];\n /* istanbul ignore else */\n if (!compareFn) {\n compareFn = this._compare;\n }\n for (const item of mixed_list) {\n const found = new_list.find((i) => compareFn(i, item));\n /* istanbul ignore else */\n if (!found) {\n new_list.push(item);\n }\n }\n return new_list;\n }\n\n /**\n * Remove the given item from the given list\n * @param list List of items\n * @param item Item to remove\n * @param compareFn Function to compare items\n */\n protected removeItem(list: T[], item: T, compareFn?: (a: T, b: T) => boolean) {\n const new_list = [];\n /* istanbul ignore else */\n if (!compareFn) {\n compareFn = this._compare;\n }\n list.forEach((i) => (compareFn(item, i) ? null : new_list.push(i)));\n return new_list;\n }\n}\n","import { FormGroup } from \"@angular/forms\";\nimport { HashMap } from \"@mckinsey-converge/base\"\nimport { DateNow, DateTZ } from \"@mckinsey-converge/date-tz\"\n\nexport enum RecurrencePeriod {\n LIST = 'list',\n DAILY = 'daily',\n WEEKLY = 'weekly',\n //RELATIVE_MONTHLY = 'relativeMonthly', for the moment we will only support absoluteMonthly\n ABSOLUTE_MONTHLY = 'monthly'\n}\n\nexport enum DaysOfWeek {\n SUNDAY = 'sunday',\n MONDAY = 'monday',\n TUESDAY = 'tuesday',\n WEDNESDAY = 'wednesday',\n THURSDAY = 'thursday',\n FRIDAY = 'friday',\n SATURDAY = 'saturday'\n\n}\n\nexport enum SeriesAction {\n EDIT = 'edit',\n CLONE = 'clone'\n}\n\nexport enum BookingAction {\n CLONE = 'booking_clone',\n EDIT = 'booking_edit'\n}\n\nexport interface WeekDays {\n id: string;\n active: boolean;\n day_index: number;\n full_name: string;\n}\n\nexport interface RepeatPeriod {\n id: RecurrencePeriod;\n label: string\n}\n\nexport enum RepeatsOn {\n PATTERN = 'pattern',\n DATE = 'date'\n}\n\nexport interface RecurrenceType {\n type: RepeatsOn;\n label: string;\n}\n\nexport interface RecurrenceDetails {\n period: RecurrencePeriod,\n end: DateTZ,\n list: Array\n interval: number\n}\n\nexport interface RecurrenceRecurringDetails extends RecurrenceDetails {\n start: number\n}\n\nexport const recurrencePeriodToDurationType = (period: RecurrencePeriod) =>{\n switch (period) {\n case RecurrencePeriod.DAILY:\n return 'days'\n case RecurrencePeriod.WEEKLY:\n return 'weeks' \n case RecurrencePeriod.ABSOLUTE_MONTHLY:\n return 'months' \n default:\n return 'days'\n }\n}\n\n/**\n * Generate weekdays from monday to saturday\n */\nexport const generateWeekDays = (date: number, params: { building_tz?: string } = {}): Array=> {\n const { building_tz } = params;\n let start_week = DateNow(new Date()).startOfValue('week').addValue({days : 1}); //set monday as start of week\n const week_days: Array = []\n for (let i = 1; i <= 7; i++) {\n const activeDate = new DateTZ({date, building_tz, is_local_tz: false })\n const active = activeDate.dateWeekday === i\n const full_name = start_week.formatDate('EEEE')\n const day_index = i === 7 ? 0 : i //Sunday must be indexed as day 0\n week_days.push({id: full_name.substring(0, 1), active, day_index, full_name: full_name.toLocaleLowerCase()});\n start_week = start_week.addValue({ days : 1 });\n }\n return week_days\n}\n\nexport const getFirstDateFromList = (list: Array) => {\n return list.reduce((a, b) => { return a.isBeforeDate(b) ? a : b; });\n}\n\nexport const getLastDateFromList = (list: Array) => {\n return list.reduce((a, b) => { return a.isAfterDate(b) ? a : b; });\n}\n\nexport const recurrenceDetails = (recurr: RecurrenceDetails): string => {\n const end = getLastDateFromList(recurr.list).formatDate('ccc dd MMM yyyy')\n const getPeriod = (period: string) => {\n if(recurr.interval === 1){\n return `Occurs Every ${period} until ${end}`\n }else{\n return `Occurs Every ${recurr.interval} ${period}s until ${end}`\n }\n } \n \n switch (recurr.period) {\n case RecurrencePeriod.DAILY:\n return getPeriod('Day')\n case RecurrencePeriod.WEEKLY:\n return getPeriod('Week')\n case RecurrencePeriod.ABSOLUTE_MONTHLY:\n return getPeriod('Month')\n case RecurrencePeriod.LIST:\n return `Occurs on Specific Dates until ${getLastDateFromList(recurr.list).formatDate('ccc dd MMM yyyy')}`\n default:\n return ''\n }\n}\n\nexport const recurrenceRecurringDetails = (recurr: RecurrenceRecurringDetails): string => {\n const end = recurr.end\n const start = new DateTZ({ date: recurr.start })\n\n const getPeriod = (period: string) => {\n if(recurr.interval === 1){\n return `occurs every ${period} effective ${start.formatDate('dd MMM yyyy')} until ${end.formatDate('dd MMM yyyy')}`\n }else{\n return `occurs every ${recurr.interval} ${period}s effective ${start.formatDate('dd MMM yyyy')} until ${end.formatDate('dd MMM yyyy')}`\n }\n }\n\n switch (recurr.period) {\n case RecurrencePeriod.DAILY:\n return getPeriod('Day')\n case RecurrencePeriod.WEEKLY:\n return getPeriod('Week')\n case RecurrencePeriod.ABSOLUTE_MONTHLY:\n return getPeriod('Month')\n case RecurrencePeriod.LIST:\n return `occurs on Specific Dates`\n default:\n return ''\n }\n}\n\nexport const handleRecurrenceFields = (data: HashMap) => {\n if(data.is_recurrent){\n if(data.recurrence_period !== RecurrencePeriod.LIST){\n delete data.recurrence_starts\n delete data.recurrence_endTz\n if(data.recurrence_period !== RecurrencePeriod.WEEKLY){\n delete data.recurrence_days\n }\n } else if(data.recurrence_period){\n data.recurrence_list = [...(data.recurrence_starts || []).map((date: DateTZ) => date.startOfValue('minute').seconds)]\n delete data.recurrence_interval;\n delete data.recurrence_endTz;\n delete data.recurrence_count;\n delete data.recurrence_starts\n delete data.recurrence_days\n }\n delete data.is_recurrent\n }else{\n delete data.recurrence_period;\n delete data.recurrence_interval;\n delete data.recurrence_endTz;\n delete data.recurrence_count;\n delete data.recurrence_starts\n delete data.is_recurrent\n delete data.recurrence_exceptions\n delete data.recurrence_days\n }\n\n return data\n}\n\n/** Removes expired occurrences and updates start and end dates when cloning a series */\nexport const removeExpiredOcurrences = (form: FormGroup) =>{\n if(form.controls.action?.value === SeriesAction.CLONE ){\n const tz = form.controls.space_list.value[0].timezone\n const date_now = new DateTZ({ is_local_tz: false, building_tz: tz });\n const occurrences = form.controls.recurrence_starts.value.filter((date: DateTZ) =>\n date_now.isBeforeDate(date, 'day') || date_now.isSameDate(date, 'day')\n )\n form.controls.recurrence_starts.setValue(occurrences)\n const { start, end } = setStartAndEndDateFromArray(occurrences, tz)\n form.controls.dateTz.setValue(start)\n form.controls.recurrence_endTz.setValue(end)\n }\n}\n\n/** \n * Returns starts and end dates from an array of dates in milliseconds \n **/\n export const setStartAndEndDateFromArray = (dates: Array, tz: string): {start: DateTZ, end: DateTZ} =>{\n if(dates.length !== 0){\n return {\n start: dates.sort((d1, d2) => d1.ms - d2.ms)[0] ,\n end: dates.sort((d1, d2) => d2.ms - d1.ms)[0]\n }\n }\n //if the dates array is empty set the start and end dates as the current and next day\n const now = DateNow(new Date()).toZone(tz)\n return {start: now, end: now.addValue({days: 1})}\n}\n\nexport const setRecurrenceStartsTime = (form: FormGroup) => {\n const { recurrence_starts, dateTz } = form.value\n const list = (recurrence_starts || []).map((date: DateTZ) => date.setValue({hour: dateTz.dateHour, minute: dateTz.minutes}))\n form.controls.recurrence_starts.setValue(list)\n}","export * from './report.class'\nexport * from './reports.service'\n","import { CurrencyPipe } from '@angular/common';\n\nimport {\n csvToJson,\n downloadFile,\n HashMap,\n humaniseDuration,\n jsonToCsv,\n} from '@mckinsey-converge/base';\n\nimport { ServiceManager } from '../service-manager.class';\nimport { Space } from '../spaces';\nimport { Organisation } from '../organisation';\n\nexport class Report {\n /** Type of report */\n public readonly type: string;\n /** List of data associated with the report */\n public readonly data: T[];\n\n constructor(raw_data: HashMap = {}) {\n this.type = raw_data.type || '';\n this.data = this.cleanData(raw_data.data);\n }\n\n /** Create report data structure from CSV */\n public static fromCSV(type: string, data: string): Report {\n const csv_json = csvToJson(data);\n return new Report({ type, data: csv_json });\n }\n\n /** Download report data as CSV format */\n public downloadCSV(name: string = 'unnamed.csv'): void {\n downloadFile(name, jsonToCsv(this.data));\n }\n\n /** Download report data as JSON format */\n public downloadJSON(name: string = 'unnamed.json'): void {\n downloadFile(name, JSON.stringify(this.data, undefined, 4));\n }\n\n public formatCancelledBy(email: string) {\n if (email !== null && email !== undefined) {\n let name = email.split('@')[0];\n name = name.split('_').join(' '); //get name from email and convert it to title case\n name = name.replace(/\\w\\S*/g, function (txt) {\n return `${txt\n .charAt(0)\n .toUpperCase()}${txt.substr(1).toLowerCase()}`;\n });\n return name;\n } else {\n return email;\n }\n }\n\n public timeConverter( UNIX_timestamp: number ){\n let a = new Date(UNIX_timestamp * 1000);\n let months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];\n let year = a.getFullYear();\n let month = months[a.getMonth()];\n let date = a.getDate();\n let hour = ((a.getHours() + 11) % 12 + 1);\n let suffix = a.getHours() >= 12 ? \"PM\":\"AM\";\n let min = a.getMinutes();\n let time = date + ' ' + month + ' ' + year + ' - ' + hour + ':' + min + ' ' + suffix;\n return time;\n }\n\n private cleanData(data: T[] = []) {\n if (data.length > 0 && this.type === 'day') {\n for (let i = 0; i < data.length; i++) {\n data[i]['booker'] = data[i]['booker'].name;\n data[i]['expected_attendees'] = Object.values(data[i]['expected_attendees'])[0];\n }\n } else if (data.length > 0 && this.type === 'audit') {\n for (let i = 0; i < data.length; i++) {\n data[i]['created_at'] = this.timeConverter(data[i]['created_at']);\n }\n } else if (data.length > 0 && this.type === 'catering') {\n for (let i = 0; i < data.length; i++) {\n data[i]['Cancelled By'] = this.formatCancelledBy(\n data[i]['Cancelled By']\n );\n }\n const fields = Object.keys(data[0]);\n const room_field = fields.find(\n (key) =>\n key.toLowerCase().includes('room') &&\n key.toLowerCase().includes('email')\n );\n const price_field = fields.find((key) =>\n key.toLowerCase().includes('price')\n );\n\n for (let row of data) {\n /* istanbul ignore else */\n const space_service = ServiceManager.serviceFor(Space);\n if (room_field && price_field && space_service) {\n const room = space_service.find(\n row[room_field].toLowerCase()\n );\n const org_service = ServiceManager.serviceFor(Organisation);\n const bld = org_service.buildings.find(\n (bld: { id: any }) =>\n bld.id === room?.level?.building_id\n );\n row[price_field] = new CurrencyPipe('en_us').transform(\n row[price_field] / 100,\n bld?.currency\n );\n }\n /* istanbul ignore else */\n for (let field of fields) {\n row[field] =\n typeof row[field] === 'string'\n ? row[field].replace(/\\,/g, '٫')\n : row[field];\n }\n }\n } else if (this.type === 'bookings') {\n data = data.map((i: HashMap) => {\n const booking = i;\n try {\n if (booking.setup instanceof Object) {\n booking.setup = booking.setup[booking.room_email];\n }\n if (booking.breakdown instanceof Object) {\n booking.breakdown =\n booking.breakdown[booking.room_email];\n }\n booking.setup = humaniseDuration((booking.setup || 0) / 60);\n booking.breakdown = humaniseDuration(\n (booking.breakdown || 0) / 60\n );\n booking.description = (booking.description || '')\n .replace(/<[^>]*>?/gm, '')\n .replace(/\\,/g, '٫')\n .replace(/\\r?\\n|\\r/g, ' ');\n booking['Meeting Host'] =\n booking.organizer?.name || booking.organizer;\n booking['Booked By'] =\n booking.booked_by?.name ||\n booking.booked_by?.email ||\n '';\n booking.charge_code =\n booking.equipment_codes[booking.room_email] || '';\n // booking.expected_attendees = Object.keys(booking.expected_attendees).map(key => booking.expected_attendees[key]).join(', ');\n booking.attendees = (booking.attendees || [])\n .map((person) => person.name || person.email || person)\n .join('٫ ');\n booking.notes = (booking.notes || [])\n .map((note) =>\n note.author &&\n (note.type === 'description' ||\n note.type === 'private')\n ? `[${note.author}|${note.type}]${note.message\n .replace(/<[^>]*>?/gm, '')\n .replace(/\\,/g, '٫')\n .replace(/\\r?\\n|\\r/g, ' ')}`\n : ''\n )\n .join(' | ');\n booking.cancelled = booking.isCancelled;\n booking.status = booking.status[booking.room_email] || '';\n booking.company = booking.company.join(', ');\n if (booking.cancelled_by) {\n booking.cancelled_by = this.formatCancelledBy(\n booking.cancelled_by\n );\n }\n if (booking.isCancelled) {\n booking.cancelled_at_epoch = new Date(\n booking.cancelled_at_epoch * 1000\n ).toLocaleString();\n }\n booking.cancelled_date = booking.cancelled_at_epoch;\n } catch (e) {}\n const remove_fields = [\n 'id',\n 'icaluid',\n 'accepted_at',\n 'accepted_by',\n 'check_ins',\n 'changeKey',\n 'created',\n 'booking_type',\n 'edit_history',\n 'end_epoch',\n 'old_attendees',\n 'start_epoch',\n 'expected_attendees',\n 'isAllDay',\n 'isCancelled',\n 'body',\n 'is_free',\n 'lastModifiedDateTime',\n 'locationType',\n 'locations',\n 'organizer',\n 'booked_by',\n 'originalEndTimeZone',\n 'originalStartTimeZone',\n 'room_booking_status',\n 'room_email',\n 'room_emails',\n 'room_id',\n 'sensitivity',\n 'seriesMasterId',\n 'show_as',\n 'notes',\n 'subject',\n 'type',\n 'previous_booking',\n 'catering',\n 'responseStatus',\n 'equipment_codes',\n 'cancelled_at_epoch',\n ];\n for (const field of remove_fields) {\n if (booking[field] !== undefined) {\n delete booking[field];\n }\n }\n const output = {};\n const order = [\n 'title',\n 'start',\n 'end',\n 'location',\n 'Meeting Host',\n 'Booked By',\n 'booked_at',\n 'booked_ahead_by',\n 'all_day',\n 'attendees',\n 'company',\n 'description',\n 'cancelled',\n 'cancelled_by',\n 'cancelled_date',\n ];\n const keys = Object.keys(booking);\n keys.sort((a, b) => {\n const idx_a = order.indexOf(a);\n const idx_b = order.indexOf(b);\n return (\n (idx_a === -1 ? keys.length : idx_a) -\n (idx_b === -1 ? keys.length : idx_b)\n );\n });\n for (const key of keys) {\n output[key] = booking[key];\n }\n return output;\n }) as any;\n }\n return data;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ComposerService } from '@placeos/composer';\n\nimport { Report } from './report.class';\nimport { BaseAPIService } from '../base.service';\nimport { SettingsService } from '../settings.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ReportsService extends BaseAPIService {\n constructor(protected _composer: ComposerService,\n settingsService: SettingsService) {\n super(_composer, settingsService);\n this._name = 'Reports';\n this._api_route = 'reports';\n }\n\n protected process(raw_data: any): Report {\n return raw_data instanceof Array\n ? new Report({ data: raw_data })\n : Report.fromCSV('', raw_data);\n }\n}\n","import { Type } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { HashMap } from '@mckinsey-converge/base';\n\n\nexport interface ServiceLike extends HashMap {\n parent: any;\n add: (_: HashMap) => Promise;\n update: (id: string, _: HashMap) => Promise;\n delete: (id: string, params?: HashMap) => Promise;\n task: (id: string, name: string, data: HashMap) => Promise;\n listen: (prop: string) => Observable;\n}\n\nexport interface ServiceProvider {\n provideFor: Type;\n useValue: T;\n}\n\nexport class ServiceManager {\n /** Map of available services for child classes */\n private static _service_list: ServiceProvider[] = [];\n\n /** Set the services used to handle data model requests */\n public static setService(type: Type, service: any): void {\n if (window.debug) {\n (window as any).ServiceManager = this._service_list;\n }\n const index = ServiceManager._service_list.findIndex(provider => provider.provideFor === type);\n if (index >= 0) {\n ServiceManager._service_list.splice(index, 1, { provideFor: type, useValue: service });\n } else {\n ServiceManager._service_list.push({ provideFor: type, useValue: service });\n }\n }\n\n /** Get the services used to handle data model requests */\n public static serviceFor(type: Type): ServiceLike {\n const provider = ServiceManager._service_list.find(provider => provider.provideFor === type) || { useValue: null };\n return provider.useValue;\n }\n\n constructor() {\n throw new Error('ServiceMananger is static class');\n }\n}\n","import {\n Inject,\n Injectable\n} from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport {\n BehaviorSubject,\n Observable\n} from 'rxjs';\n\nimport { VERSION } from '@mckinsey-converge/environment';\nimport {\n BaseClass,\n getItemWithKeys,\n HashMap,\n log\n} from '@mckinsey-converge/base';\nimport { ServiceManager } from './service-manager.class';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\ndeclare global {\n interface Window {\n debug: boolean;\n }\n}\n\nexport const SETTINGS_TOKEN = 'settings_service_data';\n\ntype SettingsAppData = T & {\n title: string;\n description: string;\n short_name: string;\n logo_light: {\n type: string;\n src: string;\n background: string;\n }\n logo_dark: {\n type: string;\n src: string;\n background: string;\n }\n heap_io: {\n app_id: number;\n force_ssl: boolean;\n secure_cookie: boolean;\n disable_text_capture: boolean;\n cookie_path: string;\n }\n}\n\nexport interface SettingsData {\n debug: boolean;\n mock: boolean;\n frontend: 'staff' | 'concierge' | 'booking';\n composer: {\n domain: string;\n route: string;\n protocol: string;\n port: string;\n use_domain: boolean;\n local_login: boolean;\n }\n app: SettingsAppData;\n}\n\nexport class SettingsObject {\n constructor(public data: SettingsData) {\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SettingsService extends BaseClass {\n /** Name of the application */\n private _app_name = 'Converge';\n /** List of override settings in order of priority */\n private _overrides = new BehaviorSubject([]);\n /** Mapping of behaviour subjects */\n private _subjects: HashMap> = {};\n /** Mapping of observables */\n private _observables: HashMap> = {};\n /** Which frontend we're in. staff, concierge, or bookings **/\n public readonly frontend: string;\n private _bypass_bookings: boolean = false;\n\n /**\n * @hidden\n */\n public set overrides(value: HashMap[]) {\n this._overrides.next(value);\n }\n\n /** Get observable for key */\n public listen(name: string): Observable {\n if (!this._observables[name]) {\n this._subjects[name] = new BehaviorSubject(null);\n this._observables[name] = this._subjects[name].asObservable();\n }\n return this._observables[name];\n }\n\n /** Update observable value for key */\n public post(name: string, value: T): void {\n if (!this._observables[name]) {\n this._subjects[name] = new BehaviorSubject(null);\n this._observables[name] = this._subjects[name].asObservable();\n }\n this._subjects[name].next(value);\n }\n\n public value(name: string): T {\n return !this._observables[name] ? null : this._subjects[name].getValue();\n }\n\n /** Page title */\n public get title() {\n return this._title.getTitle();\n }\n\n public set title(value: string) {\n this._title.setTitle(`${value} | ${this._app_name}`);\n }\n\n constructor(private _title: Title,\n @Inject(SETTINGS_TOKEN)\n private settings: SettingsObject) {\n super();\n ServiceManager.setService(SettingsService, this);\n const time = new DateTZ({date: VERSION.time});\n const built = DateNow(new Date()).isSameDate(time, 'day')\n ? `Today at ${time.formatDate('h:mma')}`\n : time.formatDate('do MMM yyyy, h:mma');\n const frontend = this.get('frontend') || 'Unknown';\n this.frontend = frontend;\n log('CORE', `${VERSION.semver}`, null, 'debug', true, frontend?.toUpperCase());\n log('APP', `${VERSION.hash} | Built: ${built}`, null, 'debug', true, frontend?.toUpperCase());\n this.init();\n }\n\n /**\n * Initialise the settings\n */\n public async init() {\n if (this.get('debug')) {\n window.debug = true;\n }\n if (this.get('app')?.name) {\n this._app_name = this.get('app').name;\n }\n log('Settings', 'Successfully loaded settings');\n this._initialised.next(true);\n }\n\n /** Whether settings service has initialised */\n public get app_name() {\n return this._app_name;\n }\n\n public get concierge() {\n return this.frontend === 'concierge';\n }\n\n public set bypass_bookings(value: boolean) {\n this._bypass_bookings = value;\n }\n\n public get bypass_bookings() {\n return this._bypass_bookings;\n }\n\n /**\n * Get a setting\n * @param key Name of the setting. i.e. nested items can be grabbed using `.` to seperate key names\n */\n public get(key: string): any {\n const keys = key.split('.');\n if (keys[0] !== 'app') {\n return getItemWithKeys(keys, this.settings.data);\n }\n const override_settings = this._overrides.getValue();\n for (const override of override_settings) {\n const value = getItemWithKeys(keys.slice(1), override);\n if (value != null) {\n return value;\n }\n }\n return getItemWithKeys(keys, this.settings.data);\n }\n}\n","export * from './space.class';\nexport * from './spaces.service';\nexport * from './space.utilities';\n","import { BaseDataClass } from '../base-api.class';\nimport {\n HashMap,\n} from '@mckinsey-converge/base';\nimport {\n Building,\n BuildingLevel,\n Organisation\n} from '../organisation';\nimport { User } from '../users';\nimport { ServiceManager } from '../service-manager.class';\nimport { SettingsService } from '../settings.service';\nimport { SpaceRules } from '../bookings/booking.types';\nimport { rulesForSpace } from '../bookings/space.utilities';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\nimport { DaysOfWeek, RecurrencePeriod } from '../recurrence/recurrence.utils';\nimport { DateTime } from 'luxon';\n\nexport interface ISpaceAvailabilityOptions {\n /** Start date and time of the availability block */\n dateTz?: DateTZ;\n /** Length of the availability block */\n duration: number;\n /** */\n id?: string;\n /** List of spaces to look at the availability for */\n room_ids?: string;\n /** Whether the spaces looked at should be bookable */\n bookable?: boolean;\n /** List of spaces or zones to ignore */\n ignore?: string;\n /** List of zones to look at the availability for */\n zone_ids?: string | string[];\n /** Whether space bookings should not be returned */\n hide_bookings?: boolean;\n /** Min capacity on the room **/\n capacity?: number\n clear?: boolean;\n /** Length of the setup */\n setup?: number;\n /** Length of the breakdown */\n breakdown?: number;\n /** Hide declined bookings */\n hide_declined?: boolean;\n /** Max capacity on the room **/\n capacity_max?: number\n\n diff_capacity?: boolean\n\n /** Fields to include recurrence in the availability search */\n recurrence_period?: RecurrencePeriod;\n recurrence_interval?: number;\n recurrence_endTz?: DateTZ;\n recurrence_count?: number;\n recurrence_starts?: Array\n is_recurrent?: boolean\n is_multiroom?: boolean\n recurrence_days?: Array\n}\n\nexport interface SpaceBookingRuleOptions {\n dateTz: DateTZ;\n duration: number;\n host: User;\n}\n\nexport const OPTION_DEFAULTS: ISpaceAvailabilityOptions = {\n duration: 60\n};\n\nexport interface RecurrenceAvailability {\n /** Unix epoch in seconds */\n readonly date: number;\n /** Whetehr space is available at this time */\n readonly available: boolean;\n}\n\n/**\n * Room Settings Type\n *\n * Exmaple:\n * available: true\n * available_until: 1644344999\n * bookings: []\n * catering: false\n * charge_code: false\n * extra_features: \"meeting_room boardroom\"\n * internal_or_external: \"internal\"\n * map_id: \"08.8.15\"\n * natural_light: false\n * room_booking_screen: true\n * room_name: \"8.15 Meeting\"\n * vc: false\n * recurrence_availability: {\n * date: \"1642596300\",\n * available: false,\n * }\n */\nexport interface RoomSettings {\n // Local room name is required.\n room_name?: string\n // TBD if anything else should be required\n available?: boolean\n available_until?: number\n bookings?: HashMap[]\n catering?: boolean\n charge_code?: boolean\n extra_features?: string\n internal_or_external?: string\n map_id?: string\n natural_light?: boolean\n room_booking_screen?: boolean\n vc?: boolean\n recurrence_availability?: RecurrenceAvailability[]\n equipment_code?: boolean\n external?: boolean\n}\n\n/**\n * List of space features that come from settings.\n *\n * Im sure this list will grow. It is not the most comprehensive list.\n */\nexport enum SpaceFeatures {\n BoardRoom = 'boardroom',\n Catering = 'catering',\n CocktailRoom = 'cocktail',\n ConferencePhone = 'conference_phone',\n ConferenceRoom = 'conference',\n ElectronicWhiteboard = 'whiteboard',\n FlipChart = 'flipchart',\n Glassboard = 'glassboard',\n PartnerOffice = 'partner',\n PhoneBooth = 'phone_booth',\n TheatreRoom = 'theatre',\n TeamRoom = 'team_room',\n VideoConference = 'vc',\n NaturalLight = 'natural_light',\n WirelessContentSharing = 'wireless_content_sharing',\n WorkshopRoom = 'workshop',\n UShapeRoom = 'u_shape',\n Miscellaneous = 'miscellaneous'\n}\n\nexport enum SpaceEquipments {\n conference_phone,\n whiteboard,\n vc,\n flipchart,\n glassboard,\n wireless_content_sharing\n}\nexport enum SpaceStyles {\n boardroom,\n cocktail,\n conference,\n partner,\n theatre,\n team_room,\n // natural_light,\n workshop,\n u_shape,\n miscellaneous\n}\n\nconst EMPTY_ARRAY = [];\n\nexport class Space extends BaseDataClass {\n /** Whether space can be booked by users */\n public readonly bookable: boolean;\n /** People capacity of the space */\n public readonly capacity: number;\n /** Index to force order when sorting multiple spaces */\n public readonly sort_priority: number;\n /** Settings has extensive info displayed in the app. */\n public readonly settings: RoomSettings;\n /** URL for the control interface of the space */\n public readonly support_url: string;\n /** Engine zones associated with the space */\n public readonly zones: readonly string[];\n /** Is the Application concierge */\n public is_concierge: boolean = false;\n /** To allow bookings with rooms for staff calendar view only */\n public allowStaffRoomWithBookings: boolean = false;\n\n /** Simple name == local name being using in seeting.room_name\n\t\t *\n\t\t*/\n public simple_name: string;\n\n /** Room style set of all room style one room has\n * [\"boardroom\", \"cocktail\", \"miscellaneous\", \"natural_light\", \"theatre\", \"u-shape\", \"workshop\"] */\n public room_style: string[] = [];\n\n /** Equipment set of all room equipment one room has\n * [\"conference_phone\", \"whiteboard\", \"vc\", \"flipchart\", \"glassboard\", \"whiteboard\", \"wireless_content_sharing\"] */\n public equipment: string[] = [];\n\n /** Filters has charge code settings for booking and catering */\n public filters: RoomSettings;\n\n /** room_type subset of internal or external rooms */\n public room_type: string[] | string;\n /**\n * Features used in identifying room types.\n *\n * Both features and extra_features are space delimited strings.\n *\n * There is a getter featuresArray that returns the\n * combination of the two as an array.\n */\n public readonly features: string;\n public readonly extra_features: string;\n public map_id: string;\n\n\n /** Service for managing spaces */\n protected get _service() {\n return ServiceManager.serviceFor(Building);\n }\n\n /** Return the rooms' building */\n public get building() {\n return this._service?.buildings.find((bld) => {\n return this.zones.includes(bld.id);\n });\n }\n\n /** Return building timezone */\n public get timezone() {\n return this.building?.timezone;\n }\n\n constructor(raw_data: HashMap = {}) {\n super(raw_data);\n\n // Needed to check if the current app is Concierge or Staff\n const settingsService = ServiceManager.serviceFor(SettingsService) as unknown as SettingsService;\n this.is_concierge = !!settingsService?.concierge;\n this.allowStaffRoomWithBookings = settingsService?.bypass_bookings || false;\n\n const defaultGlobalName = raw_data.name || raw_data.email || 'Meeting Room';\n const defaultSettings = {\n room_name: defaultGlobalName\n }\n /**\n * Duplicate of base-api.class just for readability\n * .name is the full, mckinsey standardised name of the room.\n * You can think of it was what people would call the room when\n * considering every office and room globally.\n *\n * this.name = raw_data.name;\n */\n /**\n * Settings has extensive info displayed in the app.\n * setting.room_name is always used when displaying the room name in the applications\n * setting.room_name is the more office-specific room name, you can think of this as\n * the one people in that office would refer to the room as.\n *\n */\n this.settings = raw_data.settings || defaultSettings;\n this.filters = raw_data?.filters;\n // Room fields\n this.bookable = raw_data.bookable || false;\n this.capacity = raw_data.capacity || 0;\n this.support_url = raw_data.support_url;\n this.zones = raw_data.zones instanceof Array ? raw_data.zones : [];\n // Feature fields\n this.features = raw_data.features || '';\n this.extra_features = raw_data.settings?.extra_features || '';\n\n\t\tthis.room_type = raw_data?.room_type;\n this.simple_name = raw_data?.simple_name;\n this.map_id = raw_data?.map_id || raw_data.settings?.map_id || '';\n this.room_style = raw_data?.room_style || [];\n this.equipment = raw_data?.equipment || [];\n\n }\n\n /**\n * Return the global room name\n * IE LDN-4-408-06\n */\n public get global_name(): string {\n return this.name || ''\n }\n\n /**\n * Return the local room name\n * i.e. 4.08\n * TO DO: ROOM-DATA-STRUCTURE-REFACTOR - stop using/remove seetings.room_name\n */\n public get local_name(): string {\n return this.simple_name || this.name || ''; // this.settings?.room_name\n }\n\n public get street_and_city(): string {\n return this.building ? `${this.building.address}, ${this.building.city}` : '';\n }\n\n /**\n * Return the map_id from settings\n * TO DO: ROOM-DATA-STRUCTURE-REFACTOR - stop using/remove seetings.map_id and use map_id from space modal( after testing over prod)\n */\n // public get map_id(): string {\n // return this?.map_id || this.settings?.map_id || '';\n // }\n\n /** Internal / External status */\n public get internal_or_external(): string {\n const external = this.filters?.external;\n return external ? 'external' : 'internal'; // ( external ? 'external' : this.settings?.internal_or_external ) || 'internal';\n }\n\n /**\n * Works in conjunction with available_until.\n *\n * If a room is bookable that only means you can make a booking but not when.\n * Available indicates that is is available to be booked durring the queried times.\n */\n public get available(): boolean {\n return this.settings?.available ?? false;\n }\n\n public get currently_in_use(): boolean {\n const nowMs = new DateTZ({ date: DateTime.now(), is_local_tz: false, building_tz: this.timezone }).ms;\n const runningBookings = this.settings?.bookings?.filter( bks => {\n const startEpoch = new DateTZ({ date: bks.start_epoch * 1000, is_local_tz: false, building_tz: bks.timezone}).ms;\n const endEpoch = new DateTZ({ date: bks.end_epoch * 1000, is_local_tz: false, building_tz: bks.timezone}).ms;\n return startEpoch <= nowMs && endEpoch >= nowMs;\n })\n // console.log(raw_data.settings.room_name+' : '+ nowMs.ms);\n // console.log('IS IN USER CURRENTLY : ', isinUsernow);\n return !!runningBookings.length;\n }\n\n /** Last returned availability time */\n public get available_until(): number {\n return this.settings?.available_until;\n }\n\n /** Bookings associated with the space */\n public get bookings(): HashMap[] {\n // We should need to care if a room as bookings in Staff\n if (!this.is_concierge && !this.allowStaffRoomWithBookings) {\n return EMPTY_ARRAY;\n }\n\n if (this.settings?.bookings?.length) {\n /**\n * When we're dealing with Concierge the API data arriving is rooms, and those rooms contain booking,\n * but those bookings don't contain a room since the room is the root.\n * In order for Concierge to filter bookings by room we need to reattach this room\n * to each of the bookings, with it's own bookings.\n *\n * It's loopy and kooky but correcting for this pattern is beyond the scope of this refactor.\n */\n const spaceWithBookings = new Space(this.toJSON());\n return this.settings?.bookings.map(b => {\n b.room = spaceWithBookings;\n return b;\n });\n }\n return EMPTY_ARRAY;\n }\n\n /**\n\t\t * Whether space has catering\n * TO DO: ROOM-DATA-STRUCTURE-REFACTOR - stop using/remove seetings.catering and use filters?.catering instead\n\t\t */\n public get has_catering(): boolean {\n return this.filters?.catering || this.settings?.catering || false;\n }\n\n /** Returns an array of the space delimited feature and extra_feature strings.\n * TO DO: ROOM-DATA-STRUCTURE-REFACTOR - stop using/remove features, extra_features\n */\n public get featuresArray(): (SpaceFeatures | string)[] {\n // (this.simple_name === \"Entresol M-06\" ) && console.log('raw_data : ', this)\n const roomType = Array.isArray(this.room_type) ? this.room_type : [this.room_type]\n const features = [\n ...this.features.split(' '),\n ...this.extra_features?.split(' '),\n\n ...roomType, // required to work with staff>result>filters\n ...this?.room_style,\n ...this?.equipment,\n\n (this.filters?.natural_light) && SpaceFeatures.NaturalLight || undefined, // || this.settings?.natural_light\n // this.settings?.natural_light && SpaceFeatures.NaturalLight || undefined,\n // this.settings?.vc && SpaceFeatures.VideoConference || undefined,\n ].filter(f => !!f).map(f => f.toLowerCase());\n //will be an array... new Set() turns it into a set, but [... ] turns it back into an array again\n return [ ...new Set(features) ];\n }\n\n /** Level in which the space is associated */\n public get level(): BuildingLevel {\n const service = ServiceManager.serviceFor(Organisation);\n return (service ? service.levelWithID(this.zones as any) : null) || new BuildingLevel({});\n }\n\n /**\n * Return the new recurrence_availability from settings\n */\n public get recurrence_availability(): RecurrenceAvailability[] {\n return this.settings?.recurrence_availability || [];\n }\n\n public get availableOccurrences(): number {\n if(this?.recurrence_availability) {\n return this?.recurrence_availability?.filter(recurr => recurr.available).length;\n }\n }\n\n public get totalOccurrences(): number {\n return this?.recurrence_availability.length;\n }\n\n /**\n * Make a copy of this object\n */\n public clone(): Space {\n return new Space(this);\n }\n\n /**\n * Make a copy of this object without identification data\n */\n public duplicate(): Space {\n const space = { ...this };\n space.settings.bookings = []; // clear out bookings\n return new Space({ ...space, id: null, email: null });\n }\n\n /**\n * Generate the booking rules for space with given options\n * @param options Conditions for generating the space rules\n */\n public rulesFor(options: SpaceBookingRuleOptions): SpaceRules {\n if (!this._service || !this.level) {\n return { auto_approve: true, hide: false };\n }\n\n const building = this.is_concierge ? this.level.building_id : this.building\n\n if (!building) {\n return { auto_approve: true, hide: false };\n }\n const { dateTz, duration, host } = options;\n const rules: SpaceRules = rulesForSpace({\n time: dateTz.ms,\n duration,\n space: this,\n user: host,\n rules: building.booking_rules\n });\n return rules;\n }\n\n /**\n * Whether space can only be booked by request\n * @param options Conditions for checking the space rules\n */\n public byRequest(options: SpaceBookingRuleOptions) {\n const rules = this.rulesFor(options);\n return !rules.auto_approve;\n }\n\n /**\n * Convert object into plain object\n */\n public toJSON(this: Space): HashMap {\n return { ...super.toJSON(), settings: { ...this.settings, bookings: [] }, filters: { ...this.filters }, equipment: [ ...this.equipment] };\n }\n}\n","import { HashMap } from '@mckinsey-converge/base';\nimport {\n ISpaceAvailabilityOptions,\n Space\n} from './space.class';\nimport { Building } from '../organisation/building.class';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\nimport { handleRecurrenceFields, RecurrencePeriod } from '../recurrence/recurrence.utils';\n\nexport function availabilityOptionsToQuery(options: ISpaceAvailabilityOptions): HashMap {\n let query: HashMap = {};\n if (options) {\n query = { ...options };\n if (options.dateTz) {\n const date = options.dateTz.startOfValue('minute');\n query.available_from = date.seconds; // Add one second or API will not allow end to end booking\n query.available_to = date.addValue({ minutes: options.duration || 60 }).subtractValue({ seconds: 1 }).seconds;\n\n if (options.setup) query.setup = options.setup ;\n if (options.breakdown) query.breakdown = options.breakdown;\n \n delete query.dateTz;\n delete query.duration;\n }\n\n if (!options.capacity_max) delete query.capacity_max\n\n if (options.hide_declined) query.hide_declined = options.hide_declined;\n query = handleRecurrenceFields(query)\n }\n return query;\n}\n\n/**\n * Compare two spaces to determine order\n * @param first\n * @param second\n */\nexport function sort(first: Space, second: Space, blds: Building[] = []) {\n const bld = blds.find(bld => first.zones.includes(bld.id));\n const bld_b = blds.find(bld => second.zones.includes(bld.id));\n if (bld) {\n if (bld !== bld_b) {\n return (bld.name).localeCompare(bld_b?.name);\n }\n const sort_order = [...bld.sort_order].reverse();\n for (const zone_id of sort_order) {\n if (zone_id === '*') {\n continue;\n }\n const a_has_zone = first.zones.indexOf(zone_id) >= 0;\n const b_has_zone = second.zones.indexOf(zone_id) >= 0;\n if (a_has_zone && !b_has_zone) {\n return 1;\n } else if (b_has_zone && !a_has_zone) {\n return -1;\n }\n }\n }\n return first.name.localeCompare(second.name);\n}\n","import { Injectable } from '@angular/core';\nimport { ComposerService } from '@placeos/composer';\nimport { first } from 'rxjs/operators';\n\nimport { BaseAPIService } from '../base.service';\nimport { ISpaceAvailabilityOptions, Space } from './space.class';\nimport { ApplicationLoadingState, HashMap } from '@mckinsey-converge/base';\nimport { availabilityOptionsToQuery } from './space.utilities';\nimport { ServiceManager } from '../service-manager.class';\nimport { OrganisationService } from '../organisation';\nimport { ApplicationService } from '../app.service';\nimport { SettingsService } from '../settings.service';\nimport { DateNow } from '@mckinsey-converge/date-tz';\nimport { Observable } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\n\nlet SPACE_LIST = [];\n\nexport function findSpace(id: string) {\n return SPACE_LIST.find((_) => _.id === id || _.email === id);\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SpacesService extends BaseAPIService {\n constructor(\n protected _composer: ComposerService,\n private _org: OrganisationService,\n private _service: ApplicationService,\n settingsService: SettingsService\n ) {\n \n super(_composer, settingsService);\n ServiceManager.setService(Space, this);\n this._name = 'Space';\n this._api_route = 'rooms';\n this._compare = (a, b) =>\n !a.id.localeCompare(b.id) || !a.email.localeCompare(b.email);\n this._list_filter = (a: Space) => {\n const bld = this._org.building;\n return a.level.building_id === bld.id;\n };\n this._org.initialised\n .pipe(first((_) => _))\n .subscribe(() => this.init());\n }\n\n public async query(query: HashMap = {}, setList:boolean = false) {\n const list = await super.query(query);\n if ( (query.hasOwnProperty('cache') && query.cache === false) || !Object.keys(query).length || setList) {\n this.set('list', list);\n SPACE_LIST = list;\n }\n return list;\n }\n\n public filterAvailableSpaces(list: Space[]) {\n return list.filter((i) => {\n if (i.recurrence_availability?.length) return i; //if recurrence, send the space regardless of availability (needed for edit and cloning series)\n return i.available;\n });\n }\n\n /**\n * Get available spaces\n * @param options\n */\n public available(\n options: ISpaceAvailabilityOptions,\n uniqueId?: string,\n filter: boolean = true\n ): Promise {\n if (!options) {\n throw new Error('Space avilability requires request options');\n }\n\n const now = DateNow(new Date());\n if (!options.dateTz) {\n options.dateTz = now.startOfValue('minute');\n }\n\n if (options.hide_declined === undefined) {\n options.hide_declined = true;\n }\n\n const key = `available|${options.id ? options.id : ''}|${\n uniqueId ?? ''\n }`;\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const respond = (list: Space[]) => {\n delete this._promises[key];\n resolve(filter ? this.filterAvailableSpaces(list) : list);\n };\n const error = (e) => {\n reject(e);\n delete this._promises[key];\n };\n const query = availabilityOptionsToQuery(options);\n if (options.id) {\n this.show(options.id, query).then(\n (i) => respond([i]),\n error\n );\n } else {\n this.query(query).then(respond, error);\n }\n });\n }\n\n return this._promises[key];\n }\n\n /**\n * Load initial data for the service\n */\n protected async load(): Promise {\n const loading: ApplicationLoadingState =\n this._service.get('loading') || {};\n if (!loading.spaces) {\n loading.spaces = {\n message: 'Loading space data',\n state: 'loading',\n };\n this._service.set('loading', loading);\n }\n // Adjusted the query by incorporating the \"zone_ids\" option to filter rooms based on specific zone IDs instead of considering all thousands of rooms.\n const option = {\n zone_ids: this._org.building.id\n }\n await this.query(option, true).catch(() => {\n loading.spaces = { message: 'Loading space data', state: 'failed' };\n this._service.set('loading', loading);\n });\n loading.spaces = { message: 'Loading space data', state: 'complete' };\n this._service.set('loading', loading);\n }\n\n /**\n * Convert raw data into API object\n * @param raw_data Raw API data\n */\n public process(raw_data: HashMap): Space {\n return new Space(raw_data);\n }\n /**\n * \n * Special observable function to make http call for rooms\n * @param query \n * @returns observable\n */\n public queryRooms = (query: HashMap = {}): Observable => super.queryRoomsForQR(query);\n\n public setSpaceList(list) {\n this.set('list', list);\n SPACE_LIST = list;\n }\n\n public queryBooking = (query: HashMap = {}) : Observable | Observable => super.queryObsr(query);\n public updateSpace = (id: string, form_data: HashMap, should_inject_concierge: Boolean = false, query_params: HashMap = {}) : Observable | Observable => super.updateObsr(id, form_data, should_inject_concierge, query_params);\n public uploadSpacePhotos = (apiSubRoute: string, form_data: HashMap, should_inject_concierge: Boolean = false, query_params: HashMap = {}) : Observable | Observable => super.uploadSpacePhotos(apiSubRoute, form_data, should_inject_concierge, query_params);\n \n public updateRoomList() {\n this.load().then((_) => null)\n }\n}\n","import {\n BehaviorSubject,\n of\n} from 'rxjs';\nimport {\n Building,\n Organisation\n} from './organisation';\nimport { BaseDataClass } from './base-api.class';\nimport { MapLocation } from './location';\nimport { User } from './users';\nimport { Booking } from './bookings';\nimport {\n RoomSettings,\n Space,\n SpaceFeatures\n} from './spaces';\nimport { ServiceManager } from './service-manager.class';\nimport {\n CateringCategory,\n CateringItem\n} from './catering';\nimport {\n HashMap,\n padZero,\n predictableRandomInt,\n unique\n} from '@mckinsey-converge/base';\n\nimport * as faker from 'faker';\n\nimport {\n SETTINGS_TOKEN,\n SettingsData,\n SettingsObject,\n SettingsService\n} from './settings.service';\nimport { Report } from './reports';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\nfaker.seed(2560);\n\nlet SERVICE: any;\n\ndeclare global {\n interface Jest {\n fn: () => any\n }\n}\n\n\ndeclare let jest: Jest;\n\n/* istanbul ignore file */\n\nexport function generateMockOrganisationService(): HashMap {\n return {\n levelWithID: jest.fn(),\n listen: jest.fn(),\n loadOrganisation: jest.fn(),\n initialised: of(true),\n building: new Building(generateMockBuilding({ id: 'bld-01' })),\n loadBuildingsWithOrg: jest.fn(),\n getOrganizationFiltersByRoomType: jest.fn(),\n getRoomTypeSubsetDDOptions: jest.fn(),\n ...generateMockDataService('OrganisationService')\n };\n}\n\nexport const generateMockSpacesService = (): HashMap => ({\n available: jest.fn(),\n ...generateMockDataService('SpacesService')\n});\n\nexport const generateMockUsersService = (): HashMap => ({\n loadCurrentUser: jest.fn(),\n ...generateMockDataService('UsersService')\n});\n\nexport const bookingState = () => ({\n bookings: of([]),\n filtered: of([]),\n filtered_week: of([]),\n filtered_month: of([]),\n setZone: jest.fn(),\n setDate: jest.fn(),\n setFilters: jest.fn(),\n add: jest.fn(),\n replace: jest.fn(),\n remove: jest.fn(),\n startPolling: jest.fn(),\n startPollingMonth: jest.fn(),\n startPollingWeek: jest.fn(),\n startPollingEveryFiveMin: jest.fn(),\n _noOfMeetings: of([])\n});\n\nconst test_app = {\n title: 'McKinsey & Company',\n description: 'McKinsey & Company Staff UI written with Angular Framework',\n short_name: 'STAFF',\n logo_light: {\n type: 'img',\n src: 'assets/img/logo.svg',\n background: ''\n },\n logo_dark: {\n type: 'img',\n src: 'assets/img/logo-inverse.svg',\n background: ''\n },\n heap_io: {\n app_id: 3540602199,\n force_ssl: true,\n secure_cookie: true,\n disable_text_capture: true,\n cookie_path: '/staff/'\n }\n};\n\nexport const TEST_SETTINGS: SettingsData = {\n debug: true,\n composer: {\n domain: '',\n route: '/test',\n protocol: '',\n port: '',\n use_domain: false,\n local_login: false\n },\n app: test_app,\n mock: false,\n frontend: 'staff'\n};\n\nexport const generateMockSettingsService = (overrides: Partial> = {}) => new SettingsService({ getTitle: () => jest.fn() } as any,\n new SettingsObject({\n ...TEST_SETTINGS,\n ...overrides\n }));\n\n/**\n * Provides an injectable instance for settings.\n */\nexport const provideMockSettingsObject = (settings: Partial> = {}) => ({\n provide: SETTINGS_TOKEN,\n useValue: new SettingsObject({\n ...TEST_SETTINGS,\n ...settings\n })\n});\n\n/**\n * Generate a mocked version of the application service\n */\nexport function generateMockAppService(settingsOverrides: Partial> = {}) {\n SERVICE = {\n setting: jest.fn(),\n notify: jest.fn(),\n notifyInfo: jest.fn(),\n notifyWarn: jest.fn(),\n notifySuccess: jest.fn(),\n notifyError: jest.fn(),\n log: jest.fn(),\n navigate: jest.fn(),\n navigateBack: jest.fn(),\n get: jest.fn(),\n listen: jest.fn(),\n set: jest.fn(),\n Composer: { auth: { token: 'test' } },\n Hotkeys: { listen: jest.fn() },\n Users: generateMockUsersService(),\n Organisation: generateMockOrganisationService(),\n Locations: generateMockDataService('LocationsService'),\n Base: generateMockDataService('BaseService'),\n Menu: generateMockDataService('CateringMenuService'),\n Spaces: generateMockSpacesService(),\n Bookings: generateMockDataService('BookingsService'),\n Reports: generateMockDataService('ReportsService'),\n CateringItems: generateMockDataService('CateringItemsService'),\n CateringCategories: generateMockDataService('CateringCategoriesService'),\n Settings: generateMockSettingsService(settingsOverrides),\n initialised: of(true)\n };\n ServiceManager.setService(BaseDataClass, SERVICE.Base);\n ServiceManager.setService(Organisation, SERVICE.Organisation);\n ServiceManager.setService(Building, SERVICE.Organisation);\n ServiceManager.setService(User, SERVICE.Users);\n ServiceManager.setService(Booking, SERVICE.Bookings);\n ServiceManager.setService(Space, SERVICE.Spaces);\n ServiceManager.setService(MapLocation, SERVICE.Locations);\n ServiceManager.setService(Report, SERVICE.Reports);\n ServiceManager.setService(CateringItem, SERVICE.CateringItems);\n ServiceManager.setService(CateringCategory, SERVICE.CateringCategories);\n SERVICE.Organisation.buildings = [SERVICE.Organisation.building];\n SERVICE.Users.current = new User(generateMockUser());\n SERVICE.Users.initialised = of(true);\n SERVICE.Bookings.booking_list = new BehaviorSubject(new Array(10).fill(0).map(_ => new Booking(generateMockBooking())));\n SERVICE.listen.mockReturnValue(of(null, []));\n return SERVICE;\n}\n\nexport function generateMockDataService(name: string) {\n const service = {\n find: jest.fn(),\n filter: jest.fn(),\n listen: jest.fn(),\n get: jest.fn(),\n set: jest.fn(),\n setting: jest.fn(),\n query: jest.fn(),\n show: jest.fn(),\n add: jest.fn(),\n save: jest.fn(),\n remove: jest.fn(),\n delete: jest.fn(),\n update: jest.fn(),\n addFrom: jest.fn(),\n removeFrom: jest.fn(),\n task: jest.fn(),\n available: jest.fn(),\n process: jest.fn(),\n updateList: jest.fn(),\n clearList: jest.fn(),\n removeFromList: jest.fn(),\n accept: jest.fn(),\n decline: jest.fn(),\n checkin: jest.fn(),\n is_logged_in: false,\n initialised: of(true),\n getHoldingBay: jest.fn(),\n name,\n queryRooms: of(true),\n queryRoomsForQR: of([]),\n queryObsr: of([]),\n queryBooking: of(true),\n checkinIndividualVisitor: jest.fn(),\n taskObsr: of(true),\n updateSpace: jest.fn(),\n updateObsr: of([]),\n uploadSpacePhotos: of([])\n\n };\n\n service.getHoldingBay.mockImplementation(_ => Promise.resolve([new Booking({})]));\n service.save.mockImplementation(_ => Promise.resolve(new Booking({})));\n\n service.listen.mockReturnValue(of(null));\n service.filter.mockReturnValue([]);\n return service;\n}\n\nlet SPACE_COUNT: number = 0;\n\nexport function generateMinimalRoomDetails(count: number) {\n return {\n name: `space-0${count}`,\n email: `space-0${count}@test.com`,\n settings: {\n name: `localname-0${count}`,\n catering: true\n }\n }\n}\n\nexport function generateMockSpace(overrides: HashMap = {}, space_id: number = null, recurring_search: boolean = false ): Space {\n const id = `space-${space_id || SPACE_COUNT++}`;\n const name = overrides.name || `${faker.name} ${faker.name.lastName()} Space`;\n const startOfDay = DateNow(new Date()).startOfValue('day');\n let settings: RoomSettings = {\n available: true,\n available_until: startOfDay.addValue({ days: 1 }).seconds, // (Date.now() / 1000) + (60 * 60 * 24), // now plus 24 hrs\n bookings: Array(10).fill(0).map(i => generateMockBooking()),\n catering: true,\n charge_code: true,\n extra_features: \"meeting_room boardroom\",\n internal_or_external: \"internal\",\n map_id: \"1\",\n natural_light: false,\n room_booking_screen: true,\n room_name: `${name} - Local Name`,\n vc: false,\n }\n if (overrides.settings) {\n settings = { ...settings, ...overrides.settings };\n delete overrides.settings;\n }\n if (recurring_search) {\n settings.recurrence_availability = [\n {\n date: startOfDay.seconds,\n available: false,\n },\n {\n date: startOfDay.addValue({ days: 1 }).seconds,\n available: false,\n },\n {\n date: startOfDay.addValue({ days: 2 }).seconds,\n available: false,\n },\n {\n date: startOfDay.addValue({ days: 3 }).seconds,\n available: false,\n },\n ]\n }\n\n const linked = Math.floor(predictableRandomInt(99999)) % 2 === 0 && SPACE_COUNT > 1;\n return new Space({\n id,\n name: `${name} - Global Name`,\n map_id: `${space_id || SPACE_COUNT}`,\n type: faker.commerce.productName(),\n searchable: Math.floor(predictableRandomInt(99999)) % 2 === 0,\n controlable: Math.floor(predictableRandomInt(99999)) % 2 === 0,\n hourly_rate: Math.floor(predictableRandomInt(300)) * 100,\n bookable: Math.floor(predictableRandomInt(99999)) % 2 === 0,\n capacity: 15,\n sort_priority: 0,\n setup: Math.floor(predictableRandomInt(6)) * 5,\n breakdown: Math.floor(predictableRandomInt(6)) * 5,\n support_url: `/control/#/${id}`,\n image: faker.image.business(),\n zones: ['zone_lvl-0'],\n features: `${SpaceFeatures.BoardRoom} ${SpaceFeatures.ElectronicWhiteboard}`,\n email: `${name.toLowerCase().split(' ').join('.')}@${USER_DOMAIN}`,\n settings,\n ...overrides\n });\n}\n\nlet BOOKING_COUNT = 0;\nlet BOOKING_DATE = DateNow(new Date()).setValue({ hour: 6 }).setValue({minute: 0}).subtractValue({ days: 10 }).startOfValue('minute');\n\n/**\n * Set the initial time used for generating mock bookings\n * @param time New initial time as ms from UTC epoch\n */\nexport function setMockBookingStartDatetime(time: number) {\n const date = new DateTZ({date: time})\n BOOKING_DATE = date.startOfValue('minute');\n}\n\n/**\n * Create mock raw API data for a booking\n * @param override Overrides the properties of the generated booking with it's own\n */\nexport function generateMockBooking(override: HashMap = {}) {\n const id = `booking-${BOOKING_COUNT++}`;\n BOOKING_DATE = BOOKING_DATE.addValue({ minutes: Math.floor(predictableRandomInt(4) + 2) * 15 });\n const start = BOOKING_DATE.ms;\n const duration = Math.floor(predictableRandomInt(4) + 2) * 15;\n BOOKING_DATE = BOOKING_DATE.addValue({ minutes: Math.floor(predictableRandomInt(4)) * 15 });\n const organiser = generateMockUser({ external: false, visitor: false });\n const orders = Array(Math.floor(predictableRandomInt(5)))\n .fill(0)\n .map(_ => generateMockCateringOrder({ booking_date: start }, override.room_ids, override.menu));\n const hasCatering = Math.floor(predictableRandomInt(34567)) % 3 === 0;\n const date_start = new DateTZ({date: start})\n return {\n id,\n title: `${faker.commerce.productName()} Meeting`,\n attendees: Array(Math.floor(predictableRandomInt(5) + 2))\n .fill(0)\n .map((_, i) => generateMockUser(override.users)),\n organiser,\n start_epoch: date_start.seconds,\n end_epoch: date_start.addValue({ minutes: duration }).seconds,\n body: faker.lorem.paragraph(),\n notes: [{ type: 'other', message: faker.lorem.paragraph() }],\n location: faker.address.city(),\n // Mckinsey only has internal or external meetings\n booking_type: ['internal', 'external'][predictableRandomInt(2)],\n setup: { 'space-01': Math.max(0, (predictableRandomInt(12) - 6) * 5) },\n breakdown: { 'space-01': Math.max(0, (predictableRandomInt(12) - 6) * 5) },\n status: 'accepted',\n catering: hasCatering ? orders : [],\n room: new Space(generateMinimalRoomDetails(1)), // returns space-01 type values\n equipment_codes: {},\n company:[],\n ...override\n };\n}\n\nlet BLD_COUNT = 0;\nlet LVL_COUNT = 0;\n\n/**\n * Generate raw mock data for creating a building\n * @param id Forced ID for the mock\n * @param overrides Supply object value overrides in place. Supports a levelGenerator function\n * to stabilize level ids for testing.\n */\nexport function generateMockBuilding(overrides: HashMap = {}): HashMap {\n const id = `zone_bld-${BLD_COUNT++}`;\n const levels = Array(10)\n .fill(0)\n .map((_, i) => generateMockLevel(undefined, overrides.levelGenerator?.(i)));\n const features: any = {};\n for (const lvl of levels) {\n const count = Math.floor(predictableRandomInt(3) + 2);\n features[lvl.level_id] = {};\n for (let i = 0; i < count; i++) {\n features[lvl.level_id][faker.commerce.productName()] = `feature-${i + 1}`;\n }\n }\n return {\n id,\n zone_id: id,\n extras: Array(10)\n .fill(0)\n .map(i => {\n const name = faker.commerce.productName();\n return {\n extra_id: name\n .split(' ')\n .join('-')\n .toLowerCase(),\n extra_name: name\n };\n }),\n code: 'NYO',\n name: faker.name.firstName(),\n address: 'building address field',\n city: 'building city',\n loan_items: Array(10)\n .fill(0)\n .map(i => {\n const name = faker.commerce.productName();\n return {\n extra_id: name\n .split(' ')\n .join('-')\n .toLowerCase(),\n extra_name: name\n };\n }),\n levels,\n roles: {\n 'first-aiders': Array(10)\n .fill(0)\n .map(i => generateMockUser())\n },\n neighbourhoods: features,\n settings: {\n test: {\n nested: {\n level2: true,\n org: false\n }\n },\n city: faker.address.city()\n },\n timezone: 'America/Chicago',\n ...overrides\n };\n}\n\n/**\n * Generate raw mock data for a building level\n * @param id Forced ID for the mock\n * @param overrides value overrides\n */\nexport function generateMockLevel(id?: string, overrides: HashMap = {}): HashMap {\n if (!id) {\n id = `zone_lvl-${LVL_COUNT++}`;\n }\n return {\n id,\n level_id: id,\n level_name: `Level ${LVL_COUNT}`,\n short_name: `L ${LVL_COUNT}`,\n ...overrides\n };\n}\n\nlet USER_COUNT = 0;\n\nexport let USER_DOMAIN = 'acaprojects.com';\n\nconst USER_EMAILS: string[] = [];\n\n/**\n * Generate raw mock data for a user\n * @param id Forced ID for the mock\n * @param name Forced name for the user\n * @param external Whether user is external of the organisation\n */\nexport function generateMockUser(override: HashMap = {}): HashMap {\n const id = `user-${USER_COUNT++}`;\n const name = `${faker.name.firstName()} ${faker.name.lastName()}`;\n const external = override.external || !(predictableRandomInt(99999) % 2);\n const organisation = external ? faker.company.companyName() : USER_DOMAIN.split('.')[0];\n let delegates: {email: string, opt_out: boolean}[] = [];\n const delegate_count = Math.min(predictableRandomInt(4) + 1, USER_EMAILS.length);\n for (let i = 0; i < delegate_count; i++) {\n delegates.push({email: USER_EMAILS[Math.floor(predictableRandomInt(USER_EMAILS.length))], opt_out: false});\n }\n delegates = unique(delegates);\n const email = `${name\n .split(' ')\n .join('.')\n .toLowerCase()}@${external ? 'not-' : ''}${USER_DOMAIN}`;\n USER_EMAILS.push(email);\n return {\n id,\n name,\n first_name: name.split(' ')[0],\n last_name: name.split(' ')[1],\n email,\n phone: faker.phone.phoneNumber(),\n visitor: external,\n organisation: {\n id: organisation\n .split(' ')\n .join('.')\n .toLowerCase(),\n name: organisation\n },\n department: faker.commerce.department(),\n staff_code: padZero(Math.floor(predictableRandomInt(99999)), 5),\n delegates,\n image: faker.image.avatar(),\n ...override\n };\n}\n\nexport function generateMockCateringOrder(overrides: HashMap = {}, room_id: string = '', menu: HashMap = {}) {\n return {\n id: `order-${predictableRandomInt(9999_9999)}`,\n delivery_time: predictableRandomInt(6) * 5,\n location_id: room_id, // R--- could be undefined\n items: new Array(predictableRandomInt(5, 1)).fill(0).map(i => pickMenuItem(menu)),\n ...overrides\n };\n}\n\nfunction pickMenuItem(menu_map: HashMap = {}) {\n const zones = Object.keys(menu_map);\n const menu = menu_map[zones[predictableRandomInt(zones.length)]] || [];\n const category = menu[predictableRandomInt(menu.length)] || { items: [] };\n const group = { ...(category.items[predictableRandomInt(category.items.length)] || {}) };\n if (!group.package && group.items?.length) {\n const item = { ...group.items[predictableRandomInt(group.items.length)] };\n item.amount = predictableRandomInt(5, 1);\n return item;\n }\n group.amount = predictableRandomInt(5, 1);\n return group;\n}\n\nexport function generateMockLocation(overrides: HashMap, fixed_locations: string[], maps: string[]): HashMap {\n const fixed = predictableRandomInt(999_999_999) % 2 === 0;\n if (fixed && (!overrides || overrides.fixed)) {\n return {\n map_id: fixed_locations[predictableRandomInt(fixed_locations.length)],\n level: maps[predictableRandomInt(maps.length)],\n ...overrides\n };\n } else {\n return {\n x: predictableRandomInt(900, 100),\n x_max: 1000,\n y: predictableRandomInt(500, 100),\n level: maps[predictableRandomInt(maps.length)],\n confidence: predictableRandomInt(30),\n ...overrides\n };\n }\n}\n\nlet ORG_COUNT = 0;\n\nexport function generateMockOrganisation(): HashMap {\n const buildings = Array(3).fill(0).map(i => generateMockBuilding());\n return {\n id: `zone_org-${ORG_COUNT++}`,\n name: `Organisation ${ORG_COUNT}`,\n buildings,\n settings: {\n discovery_info: {\n buildings\n },\n test: {\n nested: {\n org: true\n }\n }\n }\n };\n}\n\n\nexport const generateMockBuildingSetByCity = () => {\n const buildings: Building[] = Array(10).fill(0)\n .map(() => new Building(generateMockBuilding()));\n buildings.push(...Array(2).fill(0).map(() => new Building(generateMockBuilding({\n settings: {\n city: 'Auckland'\n },\n city: 'Auckland'\n }))));\n buildings.push(...Array(5).fill(0).map(() => new Building(generateMockBuilding({\n settings: {\n city: 'NYC'\n },\n city: 'NYC'\n }))));\n return buildings;\n};\n\nexport function generateMockModalData(data: HashMap = null) : HashMap {\n if (data) {\n return data;\n }\n return {\n pendingDate: new Date(1603087100 + (1000 * 60 * 15)),\n pendingDuration: 60,\n date: 1603087100,\n duration: 30,\n }\n}\n\nexport const mockDateToBuildingTz = (date?: number) =>{\n return new DateTZ({date, building_tz: 'America/Chicago', is_local_tz: false})\n}","export * from './user.class'\nexport * from './user.utilities'\nexport * from './users.service'\n","import { BaseDataClass } from '../base-api.class';\nimport {\n HashMap,\n Identity\n} from '@mckinsey-converge/base';\nimport { MapLocation } from '../location';\nimport { ServiceManager } from '../service-manager.class';\n\nexport class User extends BaseDataClass {\n \n /** Currently logged in user */\n public static get active_user(): User {\n const service = ServiceManager.serviceFor(User);\n return service ? service.current : null;\n }\n\n /** First name of the user */\n public readonly first_name: string;\n /** Last name of the user */\n public readonly last_name: string;\n /** Windows user ID */\n public readonly windows_id: string;\n /** FMNO */\n public readonly fmno: string;\n /** Type of user */\n public readonly type: 'partner' | 'external' | 'internal';\n /** Contact phone number of the user */\n public readonly phone: string;\n /** Organisational department the user is part of */\n public readonly business_unit: string;\n /** Whether user is external from the application's organisation */\n public readonly external: boolean;\n /** Whether user is a visitor */\n public readonly visitor: boolean;\n /** Organisational Identifier for the user */\n public readonly staff_code: string;\n /** Basic location descriptor for the user */\n public readonly location: string;\n /** List of users that this user can act on behalf */\n public readonly delegates: readonly {email: string, opt_out: boolean}[];\n /** URL of the user's avatar image */\n public readonly image: string;\n /** List of user groups associated with this user */\n public readonly groups: readonly string[];\n /** Organisation the user is associated with */\n private _organisation: Identity;\n\n /** Map location of the user */\n private _location: MapLocation;\n /** List of desk bookings */\n // private _desk_bookings: HashMap = {}; // R--- can't explain why this is here.\n /** Host/Organisawe email notification opt out/in setting */\n public opt_out: boolean;\n\n constructor(raw_data: HashMap = {}) {\n super(raw_data);\n this.first_name = raw_data.first_name || '';\n this.last_name = raw_data.last_name || '';\n this.windows_id = raw_data.email || '';\n this.fmno = raw_data.fmno;\n this.external = raw_data.external || false;\n this.visitor = raw_data.visitor || false;\n\n\n this.type = this.visitor ? 'external' : 'internal';\n this.phone = raw_data.phone || raw_data.mobile || '';\n this.business_unit = raw_data.business_unit || raw_data.department || '';\n this._organisation = raw_data.organisation || {\n id: raw_data.organisation_id,\n name: raw_data.organisation_name\n };\n\n this._location = null;\n this.image = raw_data.image || '';\n this.staff_code = raw_data.staff_code || raw_data.fmno || '';\n this.delegates = raw_data.delegates || [];\n this._location = new MapLocation(\n raw_data.location && raw_data.location instanceof Object\n ? raw_data.location\n : { name: raw_data.location }\n );\n this.groups = raw_data.groups || [];\n this.location = raw_data.location || raw_data.officeLocation || '';\n this.opt_out = raw_data.opt_out;\n }\n\n /** Organisation the user is associated with */\n public get organisation() {\n return this._organisation;\n }\n\n /** Map location of the user */\n public get last_location(): MapLocation {\n return new MapLocation(this._location || {});\n }\n\n /**\n * Ask the server for the users current location\n */\n public locate(): Promise {\n const service: any = ServiceManager.serviceFor(MapLocation);\n return new Promise((resolve, reject) => {\n if (service) {\n service.show(this.id, { desk: this.email }).then(\n l => {\n this._location = l;\n resolve(l);\n },\n e => reject(e)\n );\n } else {\n resolve(null);\n }\n });\n }\n\n /**\n * Whether user is available during the given period\n * @param start Start time as a unix timestamp with milliseconds\n * @param end End time as a unix timestamp with milliseconds\n */\n public available(start?: number, end?: number): Promise {\n return new Promise(resolve => {\n this._service.query({ email: this.email, start, end }).then(\n l => resolve(l && l.length > 0),\n _ => resolve(false)\n );\n });\n }\n\n /**\n * Make a copy of this object\n */\n public clone(): User {\n return new User(this);\n }\n\n /**\n * Make a copy of this object without identification data\n */\n public duplicate(): User {\n return new User({ ...this, id: null, email: null });\n }\n\n /**\n * Convert object into plain object\n */\n public toJSON(this: User): HashMap {\n const data = super.toJSON();\n delete data.location;\n return data;\n }\n}\n\n// R--- Might need an toApiJSON due to visitor field.","import {\n FormControl,\n FormGroup,\n Validators\n} from '@angular/forms';\n\nimport { HashMap } from '@mckinsey-converge/base';\nimport { User } from './user.class';\n\n/**\n * Generate form fields for the given user\n * @param user User to generate form for\n */\nexport function generateUserForm(user: User): FormGroup {\n if (!user) {\n throw Error('No user passed');\n }\n const fields: HashMap = {\n id: new FormControl(user.id || ''),\n name: new FormControl(user.name || ''),\n first_name: new FormControl(user.first_name || '', [Validators.required, Validators.pattern(/^(?![\\d\\s]+$)[^\\d]+$/), Validators.maxLength(50)]),\n last_name: new FormControl(user.last_name || '', [Validators.required, Validators.pattern(/^(?![\\d\\s]+$)[^\\d]+$/), Validators.maxLength(50)]),\n email: new FormControl(user.email || '', [Validators.email])\n };\n // Generate form group for booking item\n return new FormGroup(fields);\n}\n","import { Injectable } from '@angular/core';\nimport { Location } from '@angular/common';\nimport {\n HttpClient,\n HttpHeaders\n} from '@angular/common/http';\nimport { ComposerService } from '@placeos/composer';\nimport { first } from 'rxjs/operators';\n\nimport { Md5 } from 'ts-md5/dist/md5';\n\nimport { BaseAPIService } from '../base.service';\nimport { User } from './user.class';\nimport {\n ApplicationLoadingState,\n HashMap,\n unique\n} from '@mckinsey-converge/base';\n\nimport { ApplicationService } from '../app.service';\nimport { ServiceManager } from '../service-manager.class';\nimport { SettingsService } from '../settings.service';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\nexport interface ILoginOptions {\n /** URL to post login request to */\n url?: string;\n /** Whether form data is passed in the body of the request */\n form?: boolean;\n /** Custom headers to pass into the post request */\n headers?: HashMap;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UsersService extends BaseAPIService {\n constructor(\n protected _composer: ComposerService,\n protected uhttp: HttpClient,\n protected location: Location,\n private _service: ApplicationService,\n settingsService: SettingsService\n ) {\n super(_composer, settingsService);\n ServiceManager.setService(User, this);\n this._name = 'Users';\n this._api_route = 'users';\n this._compare = (a, b) => !a.id.localeCompare(b.id) || !a.email.localeCompare(b.email);\n this.set('list', []);\n this.set('current_user', new User({ id: 'local_user', name: 'Local User' }));\n this.set('delegates', null);\n this._composer.initialised.pipe(first((_) => _)).subscribe(() => this.init());\n }\n\n /** Currently logged in user */\n public get current(): User {\n return this.get('current_user');\n }\n\n /** Whether the user has properly logged in */\n public get is_logged_in(): boolean {\n return this.current && this.current.id !== 'local_user';\n }\n\n /* istanbul ignore next */\n /**\n * Sets the access token and expiry for the user\n * @param token OAuth bearer token\n * @param expiry Expiry epoch timestamp in ms\n * @param reload Whether to reload the page after setting tokens\n */\n public setToken(token: string, expiry?: number, reload: boolean = true) {\n if (!expiry) {\n const now = DateNow(new Date())\n expiry = now.addValue({ days: 7 }).endOfValue('day').ms;\n }\n const path = `${location.origin}${\n this._service.setting('composer.route') || ''\n }/oauth-resp.html`;\n const client_id = Md5.hashStr(path);\n if (sessionStorage) {\n sessionStorage.setItem(`${client_id}_access_token`, token);\n sessionStorage.setItem(`${client_id}_expires_at`, `${expiry}`);\n }\n if (localStorage) {\n localStorage.setItem(`${client_id}_access_token`, token);\n localStorage.setItem(`${client_id}_expires_at`, `${expiry}`);\n }\n if (reload) {\n this.location.go(this.location.path());\n }\n return path;\n }\n\n /**\n * Post login request to the API\n * @param query_params Key value pairs to pass into\n * @param options Options for the login request\n */\n public async login(query_params: HashMap, options: ILoginOptions = {}): Promise {\n if (this.settingsService.concierge) {\n if (!this._promises['login']) {\n this._promises['login'] = new Promise((resolve, reject) => {\n this.set('status', 'loading');\n let headers = new HttpHeaders();\n if (!options || options.form !== false) {\n headers = headers.append('Content-Type', 'application/x-www-form-urlencoded');\n }\n const url = (options ? options.url : '') || '/auth/signin';\n this.uhttp.post(url, query_params, { headers }).subscribe(\n (_) => null,\n (e) => reject(e),\n () => {\n this._composer.auth.authorise();\n resolve();\n }\n );\n });\n }\n return this._promises['login'];\n }\n }\n\n\n /**\n * Logout of user and redirect to logout URL\n */\n public logout() {\n this._composer.auth.logout();\n }\n\n /**\n * Loads current user from API. This diverges from {@link load} in order to simply return\n * the user object instead of setting it on the service.\n */\n public async loadCurrentUser(): Promise {\n return this.show('current')\n }\n\n /**\n * Load initial data for the service\n */\n protected load(tries: number = 0): Promise {\n const loading: ApplicationLoadingState = this._service.get('loading') || {};\n loading.user = { message: 'Loading user credentials', state: 'loading' };\n this._service.set('loading', loading);\n this.set('status', 'loading');\n return new Promise((resolve) => {\n // this is due to unclear nature of the merge between concierge and staff\n // concierge has the retries enabled, while staff continuously retries.\n if (this.settingsService.concierge && tries > 4) {\n this.set('status', 'invalid');\n loading.user = { message: 'Loading user credentials', state: 'failed' };\n this._service.set('loading', loading);\n return resolve();\n }\n this.show('current').then(\n async (current_user) => {\n this.set('status', 'available');\n this.set('current_user', current_user);\n this._initialised.next(true);\n if (this._service && this._service.setting('app.user.grab_api_details')) {\n this.show(current_user.email).then(\n async (user) => {\n this.set('current_user', user);\n if (this._service.setting('app.user.update_location')) {\n this.interval('location', () => user.locate(), 5000);\n }\n await this.loadDelegates().catch(_ => null);\n resolve();\n loading.user = {\n message: 'Loading user credentials',\n state: 'complete'\n };\n this._service.set('loading', loading);\n },\n () => this.timeout('load', () => this.load(++tries).then(() => resolve()), Math.min(3000, 300 * tries))\n );\n } else {\n \n // is after process\n if (this._service.setting('app.user.update_location')) {\n this.interval('location', () => current_user.locate(), 5000);\n }\n await this.loadDelegates().catch(_ => null);\n resolve();\n loading.user = { message: 'Loading user credentials', state: 'complete' };\n this._service.set('loading', loading);\n }\n },\n () => this.timeout('load', () => this.load(++tries).then(() => resolve()), Math.min(3000, 300 * tries))\n );\n });\n }\n\n private async loadDelegates() {\n const delegates = this.current.delegates;\n if (!delegates || !delegates.length) {\n return [];\n }\n const promises: Promise[] = [];\n for (const del of delegates) {\n promises.push(this.show(del.email));\n }\n const list = await Promise.all(promises);\n this.set('delegates', list);\n this.set('list', unique((this.get('list') || []).concat(list)));\n return list;\n }\n\n /**\n * Convert raw API data into a valid User Object\n * @param raw_item Raw API data\n */\n protected process(raw_data: any): User {\n return new User(raw_data);\n }\n}","import { AbstractControl } from '@angular/forms';\n\nimport { User } from './users';\n\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n\nconst HAS_ERROR = true;\n\n/**\n * Build start time validation function\n * @param date Date of the time to check\n */\nexport function buildValidateDate(date?: number) {\n const from = new DateTZ({ date });\n return (c) => validateDate(c, date);\n}\n\n/**\n * Check that control value is a date that is the same or after from date\n * @param control Angular form control\n * @param is_from Comparison date(ms from UTC epoch). Defaults to the current time\n */\nexport function validateDate(control: AbstractControl, is_from?: number) {\n const from = new DateTZ({date: is_from})\n const date = new DateTZ({date: control.value})\n return date.isBeforeDate(from) ? { date: HAS_ERROR, message: 'Booking needs to be made in the future' } : null;\n}\n\n/**\n * Build start time validation function\n * @param date Date of the time to check\n * @param is_from Comparison date(ms from UTC epoch). Defaults to the current time\n */\nexport function buildValidateStartTime(date: number, is_from?: number) {\n const from = new DateTZ({date: is_from})\n return (c) => validateStartTime(c, date, from.ms);\n}\n\n/**\n * Check that control value time is after the comparison date time\n * @param control Angular form control\n * @param date Date of the time to check\n * @param is_from Comparison date(ms from UTC epoch). Defaults to the current time\n */\nexport function validateStartTime(control: AbstractControl, date: number, is_from?: number) {\n const now = new DateTZ({date: is_from});\n const parts = control.value.split(':');\n const date_obj = new DateTZ({date});\n return date_obj.setValue({ hour: +parts[0], minute: +parts[1] }).isBeforeDate(now) ? {\n start: HAS_ERROR,\n message: 'Booking time needs to be made in the future'\n } : null;\n}\n\nexport function buildValidateDuration(min: number = 30, max: number = 240) {\n return (c) => validateDuration(c, min, max);\n}\n\nexport function validateDuration(control: AbstractControl, min: number = 30, max: number = 240) {\n if (control.value < (min || 30)) {\n return { duration: HAS_ERROR, message: `Minimum booking duration is ${min} minute${min === 1 ? 's' : ''}` };\n } else if (control.value > (max || 480)) {\n return { length: HAS_ERROR, message: `Maximum booking duration is ${max} minute${max === 1 ? 's' : ''}` };\n }\n return null;\n}\n\nexport function buildValidateAttendees(host: User, min: number = 0) {\n return (c) => validateAttendees(c, host, min);\n}\n\nexport function validateAttendees(control: AbstractControl, host: User, min: number = 0) {\n if (!control || !(control.value instanceof Array)) {\n return min > 0\n ? { invalid: true, message: `Minimum of ${min} attendee${min === 1 ? ' is' : 's are'} required other than you` }\n : null;\n }\n const list: User[] = control.value;\n if (host) {\n const result = list.find(a => a.email === host.email);\n if (result) {\n list.splice(list.indexOf(result), 1);\n }\n }\n return list.length >= min ? null : {\n count: true,\n message: `Minimum of ${min} attendee${min === 1 ? ' is' : 's are'} required other than you`\n };\n}\n\nexport function validateEndTime(dateControlTz: AbstractControl) {\n return (control: AbstractControl) => {\n // const date = new DateTZ({date: date_control ? date_control.value : undefined})\n const now = DateNow(new Date())\n return dateControlTz.value.addValue({ minutes: control.value || 60 }).isBeforeDate(now)? { end_time: true } : null;\n };\n}\n\nexport function noWhitespaceValidator(control: AbstractControl) {\n const value = control?.value;\n if ( value === '') {\n return null; // Return null if control value is undefined or null\n }\n const isWhitespace = value.trim().length === 0;\n // const isValid = !isWhitespace;\n return !isWhitespace ? null : { whitespace: true };\n}\n\n","export * from './lib/date-tz.class'","import { DateObjectUnits, DateTime, DateTimeUnit, DurationLike, DurationUnits } from 'luxon';\nimport { getTimezoneOffset } from 'date-fns-tz';\n\nfunction padZero(value: number, length: number): string {\n let str = `${value}`;\n while (str.length < length) str = `0${str}`;\n return str;\n}\n\ninterface DateTZParams {\n date?: number | DateTime\n building_tz?: string\n is_local_tz?: boolean\n all_day?: boolean\n}\n\nconst now = new Date()\n\nexport class DateTZ {\n date: DateTime\n date_org: DateTime\n building_tz: string\n is_local_tz: boolean = true\n all_day: boolean\n local_tz: string\n valid: boolean\n\n constructor(data?: DateTZParams) { \n this.date_org = typeof data?.date === 'number' ? DateTime.fromMillis(data?.date) : data?.date ? data?.date : DateTime.fromMillis(now.valueOf())\n this.is_local_tz = data?.is_local_tz === false ? data?.is_local_tz : true\n this.all_day = data?.all_day || false\n this.local_tz = DateTime.now().zoneName\n this.building_tz = data?.building_tz || this.local_tz\n this.date = !this.is_local_tz ? this.date_org.setZone(this.building_tz) : this.date_org\n this.valid = this.date.isValid\n }\n\n //get epoch milliseconds\n public get ms(): number {\n return this.date.valueOf()\n }\n\n //get epoch seconds\n public get seconds(): number {\n return Math.trunc(this.date.toSeconds())\n }\n\n //get the second of the minute\n public get second(): number {\n return this.date.second\n }\n\n //get the minutes of the hour\n public get minutes(): number {\n return this.date.minute\n }\n\n //get the minutes of the hour\n public get hours(): number {\n return this.date.hour\n }\n\n public get utc(): number {\n const newDate = new DateTZ({...this, date: this.date.toUTC()})\n return newDate.seconds\n }\n\n public get dateDay(): number {\n return this.date.day\n }\n\n public get dateHour(): number {\n return this.date.hour\n }\n\n public get dateYear(): number {\n return this.date.year\n }\n\n public get dateWeekday(): number {\n try {\n return this.date.weekday;\n } catch (e) {\n return this.date.toJSDate().getDay();\n }\n }\n\n public get dateMonth(): number {\n return this.date.month\n }\n\n public dateDiff (compare_to: DateTZ, unit: DurationUnits, ans_unit = 'minutes'): number {\n return this.date.diff(compare_to.date, unit)[ans_unit]\n }\n\n //set the date to the begining of the given unit\n public startOfValue (unit: DateTimeUnit) {\n // All the luxon start of values work as needed except for week\n let newDate = new DateTZ({...this, date: this.date.startOf(unit)})\n // Special week logic\n if (unit === 'week') {\n if (this.dateWeekday === 7) {\n // Don't change, we want sunday as the start of the week even though luxon thinks it is Monday\n newDate = new DateTZ({ ...this, date: this.date })\n } else if (this.dateWeekday === 1) {\n // If this.date is monday, just subtract one more day to make it Sunday\n const monday = new DateTZ({ ...this, date: this.date })\n newDate = monday.subtractValue({ days: 1 });\n } else {\n // If later than monday, startOfWeek back to monday and then subtact another day to get to Sunday.\n const monday = new DateTZ({...this, date: this.date.startOf(unit)})\n newDate = monday.subtractValue({ days: 1 })\n }\n }\n\n return newDate\n }\n\n //set the date to the end of the given unit\n public endOfValue (unit: DateTimeUnit) : DateTZ {\n // All the luxon start of values work as needed except for week\n let newDate = new DateTZ({...this, date: this.date.startOf(unit)})\n // Special week logic\n if (unit === 'week') {\n if (this.dateWeekday === 6) {\n // Don't change, we want saturday as the end of the week even though luxon thinks it is Sunday\n newDate = new DateTZ({ ...this, date: this.date })\n } else if (this.dateWeekday === 7) {\n // If this.date is Sunday, this alone is the luxon end of week so add a day\n // to get to monday, then endOfWeek to Sunday, and subtract 1 day to Saturday\n const sunday = new DateTZ({ ...this, date: this.date }).addValue({ days: 1 })\n newDate = sunday.endOfValue(unit).subtractValue({ days: 1 }); // return next saturday\n } else {\n // If not saturday or sunday\n // endOfWeek to Sunday and then subtact a day to get to Saturday.\n const later = new DateTZ({...this, date: this.date.endOf(unit)})\n newDate = later.subtractValue({ days: 1 })\n }\n } else {\n newDate = new DateTZ({...this, date: this.date.endOf(unit)})\n }\n\n return newDate\n }\n \n public startEpoch (): number {\n const org = new DateTZ({date: this.date_org})\n return this.all_day\n ? this.startOfValue('day').ms - this.dateDiff(org, 'minutes')\n : this.ms\n }\n\n //clone the given value and unit to the date\n public clone (): DateTZ {\n // return new DateTZ({...this})\n return this.addValue({ seconds: 0 })\n }\n\n //adds the given value and unit to the date\n public addValue (duration: DurationLike, isLastDayOfMonth?: boolean): DateTZ {\n return new DateTZ({...this, date: isLastDayOfMonth ? this.date.plus(duration).endOf('month') : this.date.plus(duration)});\n }\n\n //subtracts the given value and unit to the date\n public subtractValue (duration: DurationLike): DateTZ {\n const newDate = new DateTZ({...this, date: this.date.minus(duration)})\n return newDate\n }\n\n public setValue (obj: DateObjectUnits): DateTZ {\n const newDate = new DateTZ({...this, date: this.date.set(obj)})\n return newDate\n }\n\n public formatDate (format: string): string {\n // Return new immuatable via \"plus\" to prevent \n // TypeError: Cannot assign to read only property 'weekData' of object\n // https://github.com/moment/luxon/issues/601\n return this.date.plus({ seconds: 0 }).toFormat(format)\n }\n\n public formatLocalDate (format: string): string {\n // setZone already returns new immutable so it doesn't have the formatDate issue.\n return this.date.plus({ seconds: 0 }).setZone(this.local_tz).toFormat(format)\n }\n\n public isSameDate(compare_to: DateTZ, value: DateTimeUnit): boolean {\n return this.date.hasSame(compare_to.date, value)\n }\n\n public isAfterDate(compare_to: DateTZ, unit?: DateTimeUnit): boolean {\n switch (unit) {\n case 'year':\n return this.dateYear > compare_to.dateYear\n case 'month':\n if(this.isAfterDate(compare_to, 'year')){\n return true\n }else if(!this.isSameDate(compare_to, 'year')){\n return false\n }else{\n return this.dateMonth > compare_to.dateMonth\n }\n case 'day':\n if(this.isAfterDate(compare_to, 'month')){\n return true\n }else if(!this.isSameDate(compare_to, 'month')){\n return false\n }else{\n return this.dateDay > compare_to.dateDay\n }\n case 'hour':\n if(this.isAfterDate(compare_to, 'day')){\n return true\n }else if(!this.isSameDate(compare_to, 'day')){\n return false\n }else{\n return this.dateHour > compare_to.dateHour\n }\n case 'minute':\n if(this.isAfterDate(compare_to, 'hour')){\n return true\n }else if(!this.isSameDate(compare_to, 'hour')){\n return false\n }else{\n return this.minutes > compare_to.minutes\n }\n default:\n return this.ms > compare_to.ms;\n }\n }\n\n public isBeforeDate(compare_to: DateTZ, unit?: DateTimeUnit): boolean {\n switch (unit) {\n case 'year':\n return this.dateYear < compare_to.dateYear\n case 'month':\n if(this.isBeforeDate(compare_to, 'year')){\n return true\n }else if(!this.isSameDate(compare_to, 'year')){\n return false\n }else{\n return this.dateMonth < compare_to.dateMonth\n }\n case 'day':\n if(this.isBeforeDate(compare_to, 'month')){\n return true\n }else if(!this.isSameDate(compare_to, 'month')){\n return false\n }else{\n return this.dateDay < compare_to.dateDay\n }\n case 'hour':\n if(this.isBeforeDate(compare_to, 'day')){\n return true\n }else if(!this.isSameDate(compare_to, 'day')){\n return false\n }else{\n return this.dateHour < compare_to.dateHour\n }\n case 'minute':\n if(this.isBeforeDate(compare_to, 'hour')){\n return true\n }else if(!this.isSameDate(compare_to, 'hour')){\n return false\n }else{\n return this.minutes < compare_to.minutes\n }\n default:\n return this.ms < compare_to.ms;\n }\n }\n\n public toZone(tz: string): DateTZ {\n const newDate = new DateTZ({\n ...this, \n date: this.date.setZone(tz), \n building_tz: tz, \n is_local_tz: false\n })\n return newDate\n }\n\n public setTimestamp(timestamp: number): DateTZ {\n const newDate = new DateTZ({\n ...this, \n date: timestamp,\n })\n return newDate\n }\n\n public get JSDate(): Date {\n return this.date.toJSDate()\n }\n\n // helper to log out the dateTZ values\n public logDateTz (label: string = ''): void {\n console.log(`${label} local tz/date/time`, this.addValue({ seconds: 0 }).formatLocalDate(\"cccc d MMMM,yyyy h:mma\"), this.local_tz)\n console.log(`${label} building tz/date/time`, this.addValue({ seconds: 0 }).formatDate(\"cccc d MMMM,yyyy h:mma\"), this.building_tz)\n }\n}\n\nexport const DateNow = (date: Date = new Date()) => {\n return new DateTZ({date: date.valueOf()})\n} \n\n// input the local time and the building timezone\nexport const convertLocalTimestampToTimezonedDateTz = (timestamp: number, buildingTimezone: string): DateTZ => {\n const date = new Date(timestamp);\n return new DateTZ({ date: timestamp, building_tz: buildingTimezone, is_local_tz: false }).setValue({\n day: date.getDate(),\n hour: date.getHours(),\n minute: date.getMinutes()\n });\n}\n\n// input the building time and the building timezone\nexport const convertTimezonedTimestampToLocalDateTz = (timestamp: number, buildingTimezone: string): DateTZ => {\n const local_tz = DateTime.now().zoneName;\n const localOffset = getTimezoneOffset(local_tz, new Date(timestamp));\n const desiredOffset = getTimezoneOffset(buildingTimezone, new Date(timestamp));\n if (localOffset > desiredOffset) {\n const eleA = timestamp + (localOffset - desiredOffset);\n return new DateTZ({date: eleA, building_tz: buildingTimezone, is_local_tz: false});\n } else {\n const eleA = timestamp + (desiredOffset - localOffset);\n return new DateTZ({date: eleA, building_tz: buildingTimezone, is_local_tz: false});\n }\n}\n\nexport const localTimezone = () => {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n}\n\nexport const getTimezoneOffsetString = (tz: string) => {\n const offset_minutes = Math.floor(getTimezoneOffset(tz) / 1000 / 60);\n const hours = Math.floor(offset_minutes/60);\n const minutes = offset_minutes % 60;\n return `${offset_minutes > 0 ? '+' : '-'}${padZero(Math.abs(hours), 2)}${padZero(minutes, 2)}`;\n}\n\nexport function toMiddayUTC(value: DateTZ = DateNow()) {\n // exclude Auckland from rouding up timezone as it has 12+ hours UTC timezone difference\n return value.building_tz.includes('Auckland') ? value : new DateTZ({\n date: value.setValue({ hour: 12, minute: 0 }).ms,\n is_local_tz: false,\n building_tz: 'UTC',\n }).setValue({ hour: 12, minute: 0 });\n}\n\n/**returns the offset between two timezones in minutes and hours */\nexport function timezoneOffset(tz: string){\n const nowTz = DateNow(new Date())\n const offset = nowTz.date.offset - nowTz.toZone(tz).date.offset\n return {minutes: offset, hours: offset/60}\n}\n\nexport function isToday (date, timezone) {\n\n return new DateTZ({\n date: toMiddayUTC(date).ms,\n is_local_tz: false,\n building_tz: timezone\n }).isSameDate(\n new DateTZ({\n date: Date.now(),\n is_local_tz: false,\n building_tz: timezone,\n }),\n 'day'\n );\n}\n","export * from './lib/environment.module';\nexport * from './lib/version';\nexport * from './lib/environment.service'\nexport * from './lib/types'\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n providers: []\n})\nexport class EnvironmentModule {\n}\n","import {\n Inject,\n Injectable\n} from '@angular/core';\nimport { EnvironmentData } from './types';\n\nexport const ENVIRONMENT_TOKEN = 'environments_service_data';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EnvironmentService {\n\n public get production(): boolean {\n return this.environment.production;\n }\n\n public get heap_io_id(): number {\n return this.environment.heap_io_id;\n }\n\n constructor(@Inject(ENVIRONMENT_TOKEN) private environment: EnvironmentData) {\n }\n}\n","// IMPORTANT: THIS FILE IS AUTO GENERATED! DO NOT MANUALLY EDIT OR CHECKIN!\n/* tslint:disable */\nexport const VERSION = {\n \"dirty\": false,\n \"raw\": \"803aaeb6f\",\n \"hash\": \"803aaeb6f\",\n \"distance\": null,\n \"tag\": null,\n \"semver\": null,\n \"suffix\": \"803aaeb6f\",\n \"semverString\": null,\n \"version\": \"0.0.0\",\n \"time\": 1728876842279\n};\n/* tslint:enable */\n","export * from './lib/legacy-overlays.module';\nexport * from './lib/space-select-modal/space-select-modal.component';\nexport * from './lib/new-user-modal/new-user-modal.component';\nexport * from './lib/confirm-modal/confirm-modal.component';\nexport * from './lib/catering-confirm-modal/catering-confirm-modal.component';\nexport * from './lib/catering-details-modal/catering-details-modal.component';\nexport * from './lib/requirement-details-modal/requirement-details-modal.component';\nexport * from './lib/booking-confirm/booking-confirm.component';\nexport * from './lib/user-form/user-form.component'\nexport * from './lib/booking-form/booking-form.component'\n","import {\n Component,\n EventEmitter,\n Inject,\n OnInit,\n Output\n} from '@angular/core';\nimport {\n MAT_DIALOG_DATA,\n MatDialogRef\n} from '@angular/material/dialog';\nimport { Router } from '@angular/router';\n\nimport {\n ApplicationService,\n Booking,\n BookingsService,\n BookingStateService,\n CateringOrder,\n getFirstDateFromList,\n OrganisationService,\n rulesForSpace,\n recurrenceDetails,\n SeriesAction,\n SettingsService,\n Space,\n SpacesService,\n User,\n UsersService,\n formatWhen,\n BOOKING_STATUS,\n CloseDialogService,\n DialogIds\n} from '@mckinsey-converge/data-common';\nimport {\n BaseDirective,\n DialogEvent,\n HashMap,\n humaniseDuration\n} from '@mckinsey-converge/base';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ConflictsModalComponent, ConflictsModalComponentData } from '@mckinsey-converge/ui';\n\n\nexport interface BookingConfirmModalData {\n old_booking: Booking;\n booking: Booking;\n action?: SeriesAction\n}\n\nexport interface BookingDetailInfo {\n bookedBy: {\n display:boolean,\n value: string\n }\n}\n\n@Component({\n selector: 'a-booking-confirm-modal',\n templateUrl: './booking-confirm.component.html',\n styleUrls: ['./booking-confirm.component.scss']\n})\nexport class BookingConfirmComponent extends BaseDirective implements OnInit{\n /** Emitter for user actions on the modal */\n @Output() public event = new EventEmitter();\n /** Display string for changes are being processed */\n public loading: string;\n /** Whether space availability is being checked */\n public checking_available: boolean;\n /** Whether to show all attendees */\n public show_attendees: boolean;\n /** Whether to show all locations */\n public show_locations: boolean;\n /** Whether to show all catering orders */\n public show_orders: boolean;\n /** Whether booking has succeeded */\n public success: boolean;\n /** Whether booking needs to be accepted */\n public readonly is_request: boolean;\n\n public approved: boolean;\n public declined: boolean;\n public bookingDetails: BookingDetailInfo;\n lastMomentConflict: boolean = false;\n \n /** Booking to confirm changes to */\n public get old_booking(): Booking {\n return this._data.old_booking;\n }\n\n /** Booking to confirm changes to */\n public get booking(): Booking {\n return this._data.booking;\n }\n\n /** Active user */\n public get user(): User {\n return this._users.current;\n }\n\n /** Title of the displayed event */\n public get title(): string {\n return this.booking.title;\n }\n\n /** Comapny names */\n public get company(): string[] {\n return this.booking.company;\n }\n \n\n /** Display string of when the event will occur */\n public get when(): string {\n const duration_value = this.booking.duration;\n const all_day = this.booking.all_day && duration_value < 25 * 60;\n if(this.booking.is_recurrent && this.booking.recurrence_starts && this.booking.recurrence_starts.length){\n return formatWhen({all_day, ...this.recurrenceDates })\n }\n return formatWhen({\n all_day,\n startTZ: this.booking.startDateTz,\n endTZ: this.booking.endDateTz,\n displayEndTZ: this.booking.displayEndDateTz})\n }\n\n public get recurrenceDates(){\n const startTZ = getFirstDateFromList(this.booking.recurrence_starts)\n const endTZ = startTZ.addValue({minutes: this.booking.duration})\n return {startTZ, endTZ, displayEndTZ: endTZ}\n }\n\n /** Display string for the recurrence value of the booking */\n public get recurrence(): string {\n return recurrenceDetails({\n period: this.booking.recurrence_period,\n end: this.booking.recurrence_endTz,\n list: this.booking.recurrence_starts,\n interval: this.booking.recurrence_interval\n });\n }\n\n /** Display string for the event's duration */\n public get duration(): string {\n const duration_value = this.booking.duration;\n return this.booking.all_day ? 'All Day' : humaniseDuration(duration_value);\n }\n\n /** List of spaces associated with the event */\n public get spaces(): Space[] {\n return this.booking.multi_rooms;\n }\n\n /** List of attendees associated with the event not including the host */\n public get attendees(): User[] {\n const attendees = this.booking.attendees;\n return attendees.filter((i) => i.email !== this.organiser.email);\n }\n\n /** Host of the event */\n public get organiser(): User {\n return this.booking.organiser || this._users.current;\n }\n\n /** Host of the event */\n public get equipment_codes(): HashMap {\n return this.booking.equipment_codes || {};\n }\n\n /** Host of the event */\n public get catering_codes(): HashMap {\n const catering = this.catering;\n const codes = {};\n for (const order of this.catering) {\n codes[order.location_id] = order.charge_code;\n }\n return codes;\n }\n\n /** Host of the event */\n public get equipment_notes(): HashMap {\n return this.booking.notes\n .filter((note) => note.type === 'equipment')\n .reduce((map, notes) => {\n map[notes.space] = notes.message;\n return map;\n }, {});\n }\n\n /** Details about the event */\n public get notes(): string {\n return this.booking.body;\n }\n\n /** List of catering orders in the booking */\n public get catering(): CateringOrder[] {\n return (this.booking.catering || []).map((order) => {\n const space: any = this.spaces.find(\n (a_space) => a_space.email === order.location_id\n ) || {\n level: {}\n };\n const building: any =\n this._org.buildings.find((bld) => bld.id === space.level.building_id) || {};\n return new CateringOrder({\n ...order,\n location: space.local_name,\n symbol: building.currency,\n booking_date: this.booking.startDateTz.ms,\n booking_timezone: this.booking.timezone,\n });\n });\n }\n\n /** Map of changes to the booking */\n public get changes(): HashMap {\n return {};\n }\n\n constructor(\n private _service: ApplicationService,\n private _users: UsersService,\n private _org: OrganisationService,\n private _bookings: BookingsService,\n private _booking_state_service: BookingStateService,\n private _spaces: SpacesService,\n private _router: Router,\n private _dialog: MatDialog,\n private _dialog_ref: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private _data: BookingConfirmModalData,\n public settings: SettingsService,\n private closeDialogService: CloseDialogService, \n ) {\n super();\n this.booking.time_changed =\n this.old_booking &&\n (this.old_booking.startDateTz.ms !== this.booking.startDateTz.ms ||\n this.old_booking.duration !== this.booking.duration);\n // in concierge, all bookings are acceptable without explicit approval.\n\n const rules = rulesForSpace({ user: this.user, space: this.booking.room, duration: 60 });\n this.is_request = this.settings.concierge ? false : rules.auto_approve;\n }\n\n ngOnInit(): void {\n this.approved = this.booking.status === BOOKING_STATUS.approved;\n this.declined = this.booking.status === BOOKING_STATUS.declined; \n // test comment\n const {creator, organiser, booker_concierge} = this.booking;\n this.bookingDetails = {\n bookedBy: {\n display: creator && ( creator.email !== organiser.email || (creator.email === organiser.email && (booker_concierge !== null && booker_concierge !==undefined ) && organiser.email !==booker_concierge['email']) ),\n value: (creator.email === organiser.email && booker_concierge !== null && (booker_concierge['email'] && organiser.email !==booker_concierge['email']) ) ? booker_concierge['name'] || booker_concierge['email'] : creator?.name || creator.email\n }\n }\n }\n\n /**\n * Save booking changes\n */\n public saveChanges() {\n this.loading = 'Checking availability of selected spaces';\n this._dialog_ref.disableClose = true;\n this.checkSpaceAvailability().then(\n () => {\n this.loading = 'Processing booking request...';\n // Change the unchanged settings to the selected room\n const newEmail = this.booking.space.email;\n const replaceObjects = ['setup', 'breakdown', 'approval_status']\n replaceObjects.forEach(key => {\n const obj = this.booking[key];\n if (obj && obj.constructor === Object) {\n const keys = Object.keys(obj);\n if (keys.length > 0) {\n const replacement = {};\n keys.forEach(nk => {\n replacement[newEmail] = obj[nk];\n })\n this.booking[key] = replacement;\n }\n }\n });\n\n const buffer = {};\n this.booking.multi_rooms.map(room => room.email).forEach(elem => buffer[elem] = 900);\n\n // if notes or catering exist? add 15 min buffer setup and breakdown to booking\n const has_note_buffer = (this.booking.notes && this.booking.notes?.length) || (this.booking.catering && this.booking.catering?.length) ? \n buffer : null; // 900 seconds = 15 min\n if (has_note_buffer) {\n this.booking.setup = has_note_buffer;\n this.booking.breakdown = has_note_buffer; \n this.booking.room_setup = has_note_buffer; \n this.booking.room_breakdown = has_note_buffer; \n }\n\n this._bookings.save(this.booking, this._data.action === SeriesAction.EDIT).then(\n async (bkn) => {\n this.loading = null;\n this.success = true;\n this._dialog_ref.disableClose = false;\n const updated = new Booking({ ...this.booking, ...bkn.toApiJSON() });\n this._booking_state_service.replace(updated);\n \n /**\n * update the master booking in case of recurring to have latest updated in the system\n */\n if(updated.recurrence_master_id !== null)\n { \n const master_booking = await this._bookings.show(updated.recurrence_master_id);\n this._booking_state_service.replace(master_booking);\n }\n\n if (bkn.is_recurrent && bkn.recurrence_type === 'master') {\n this._booking_state_service.pollOnce();\n this.closeDialogService.closeDialog(DialogIds.MeetingDetails);\n }\n\n localStorage.removeItem('ACA_STAFF.booking_form_data');\n this.event.emit({ reason: 'done' });\n this._service.notifySuccess(\n `Successfully ${this.booking.id ? 'updated' : 'created'} booking`\n );\n },\n (err) => {\n\n this._dialog_ref.disableClose = false;\n let erroMessage: string = '';\n switch(err.status){\n\t\t\t\t\t\t\t\t\t\t\t\t\tcase 400:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\terroMessage = 'Apologies, the booking cannot be finalized because the current time has exceeded the scheduled start time for this booking. Please try again.';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t\tcase 409:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\terroMessage = 'Apologies, this room has been booked recently by another user, please try another one.';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.lastMomentConflict = true;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n this.loading = erroMessage;\n this._service.notifyError(\n `Error ${this.booking.id ? 'updating' : 'creating'} booking: ${erroMessage}`\n );\n setTimeout(()=> {\n this.loading = null;\n this.event.emit({ reason: 'last-moment-conflict' });\n }, 4000) ;\n }\n );\n },\n (err) => {\n\n this.lastMomentConflict = true;\n this._dialog_ref.disableClose = false;\n const erroMessage = 'Apologies, this room has been booked recently by another user, please try another one.';\n this.loading = erroMessage;\n this._service.notifyError(\n `Error ${this.booking.id ? 'updating' : 'creating'} booking: ${erroMessage}`\n );\n setTimeout(()=> {\n this.loading = null;\n this.event.emit({ reason: 'last-moment-conflict' });\n }, 4000) ;\n }\n );\n }\n\n /**\n * Staff only\n */\n public newBooking() {\n this._router.navigate(['/book', 'spaces']);\n this._dialog_ref.close();\n }\n\n /**\n * Staff only\n */\n public toSchedule() {\n this._router.navigate(['/schedule'], {\n queryParams: { email: this.booking.organiser.email }\n });\n this._dialog_ref.close();\n }\n\n /**\n * Check whether the selected spaces are available for the selected time period\n */\n public checkSpaceAvailability(): Promise {\n const spaces: Space[] = this.spaces;\n if (\n (this.booking.id &&\n (this.booking.startDateTz.ms === this.old_booking.startDateTz.ms &&\n this.booking.duration === this.old_booking.duration)) ||\n (spaces && spaces.length <= 0)\n ) {\n return Promise.resolve();\n }\n return new Promise((resolve, reject) => {\n // Use of this.booking.timezone is unreliable, use booking space instead.\n const all_day = this.booking.all_day;\n // R--- should be nothing to do with date as a timestamp getter\n this._spaces\n .available({\n room_ids: spaces.map((space) => space.id).join(','),\n dateTz: this.booking.startDateTz,\n duration: all_day ? 24 * 60 : this.booking.duration,\n ignore: this.booking.icaluid,\n recurrence_count: this.booking.recurrence_count,\n recurrence_period: this.booking.recurrence_period,\n recurrence_endTz: this.booking.recurrence_endTz,\n recurrence_interval: this.booking.recurrence_interval,\n recurrence_starts: this.booking.recurrence_starts,\n is_recurrent: this.booking.is_recurrent,\n recurrence_days: this.booking.recurrence_days\n })\n .then(\n (space_list) => {\n for (const space of space_list) {\n if (!space.bookable) {\n this.lastMomentConflict = true;\n return reject(\n `${space.name} is not available at the select time period.`\n );\n }\n }\n if (space_list.length < spaces.length) {\n this.lastMomentConflict = true;\n return reject(\n `${spaces[0].name} is not available at the select time period.`\n );\n }\n resolve();\n },\n (err) => reject(err)\n );\n });\n }\n\n public openConflictsModal(){\n const ref = this._dialog.open(ConflictsModalComponent, {\n maxWidth: '95vw',\n width: '32em',\n data: {\n room_name: this.booking.local_room_name,\n conflicts: this.booking.recurrence_exceptions,\n copy_conflicts: true,\n timezone: this.booking.timezone\n }\n });\n\n this.subscription(\n 'modal_events',\n ref.componentInstance.event.subscribe((event: DialogEvent) => {\n if(event.reason === 'close'){\n ref.close();\n }else if(event.reason === 'action'){\n navigator.clipboard.writeText(this.conflictsText)\n }\n \n })\n );\n ref.afterClosed().subscribe(() => this.unsub('modal_events'));\n }\n\n public get conflictsText(){\n let text = ''\n this.booking.recurrence_exceptions.map((date)=>{\n const dateTZ = new DateTZ({date: date*1000});\n const display = dateTZ.formatDate('ccc dd MMM yyyy');\n text = `${text}\\n${display}${dateTZ.isSameDate(DateNow(new Date()), 'day') ? ' (Today)' : ''}`;\n })\n return text\n }\n}\n","\n
\n \n
\n \n
\n Booking Details\n Confirmed!\n Requested!\n
\n
Please await confirmation of room
\n
\n
\n \n
{{ title || 'No title' }}
\n
\n
\n \n
{{ when }}
\n
\n
\n \n
{{ recurrence }}
\n 0\"\n (click)=\"openConflictsModal()\"\n >\n Conflicts\n
\n
\n
\n \n
{{ duration }}
\n
\n
\n Locations({{ spaces.length || '0' }})*:\n
\n
\n
\n
{{ item?.local_name }}
\n \n Notes\n
\n \n Code\n
\n
\n
No Locations
\n
\n 1\"\n (click)=\"show_locations = !show_locations\"\n >\n {{ show_locations ? 'Hide' : 'Show more' }} Locations\n \n
\n \n
\n \n
{{ organiser?.name || organiser?.email }}
\n
\n
\n \n
\n {{ bookingDetails.bookedBy.value }}\n
\n
\n
\n Attendees({{ attendees.length || '0' }})*:\n
\n <No Attendees>\n
\n \n
\n
{{ item.name }}
\n
\n \n
\n
\n
\n \n
\n {{item||''}}, \n \n
\n
\n
\n \n
\n
\n
\n Catering Orders({{ catering.length || '0' }})*:\n
\n
\n
\n
\n
{{ order.location || '<Removed>' }}
\n
\n {{ order.item_count }} item{{ order.item_count === 1 ? '' : '' }} |\n {{ order.total / 100 | currency: order.symbol }}\n
\n
\n
\n
\n 5\"\n (click)=\"show_orders = !show_orders\"\n >\n {{ show_orders ? 'Hide' : 'Show' }} Catering orders\n \n
\n
\n \n\n\n
\n \n \n \n \n
\n
\n\n
\n
\n
\n \n
\n
\n {{ loading }}\n
\n
\n
\n
\n\n \n \n \n
My Day\n \n\n","import {\n Component,\n Input,\n OnInit, ChangeDetectionStrategy, ChangeDetectorRef, Output, EventEmitter \n} from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { MatDialog } from '@angular/material/dialog';\nimport { distinctUntilChanged, first, skip } from 'rxjs/operators';\n\nimport {\n BaseDirective,\n closestToTimeSlotTz,\n Identity,\n unique\n} from '@mckinsey-converge/base';\nimport {\n ApplicationService,\n arrayWithValues,\n BookingAction,\n CateringOrder,\n SeriesAction,\n SettingsService,\n User,\n UsersService\n} from '@mckinsey-converge/data-common';\n\nimport { NewUserModalComponent } from '../new-user-modal/new-user-modal.component';\nimport {\n SpaceSelectModalComponent,\n SpaceSelectModalData\n} from '../space-select-modal/space-select-modal.component';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { DateTime } from 'luxon';\nimport { MatChipsModule} from '@angular/material/chips';\n\n\n@Component({\n selector: 'a-booking-form',\n templateUrl: './booking-form.component.html',\n styleUrls: ['./booking-form.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BookingFormComponent extends BaseDirective implements OnInit {\n /** Form fields for booking */\n @Input() public form: FormGroup;\n /** List of available users to host bookings */\n public user_list: User[] = [];\n public nowTz: DateTZ = DateNow(new Date());\n /** From date input for date field */\n public fromDateTz: DateTZ = this.nowTz.setValue({ minute: Math.ceil(this.nowTz.minutes / 5) * 5 });\n /** Last bookable date, concierge only */\n public readonly untilDateTz = DateNow(new Date()).addValue({ days: 365 }).endOfValue('day');\n public isConcierge: boolean;\n public localTimezone = DateNow(new Date()).building_tz;\n public localStart = \"\";\n public localEnd = \"\";\n // Define an array to store selected company options\n public chipOptions: any[] = [];\n\n constructor(\n private _service: ApplicationService,\n private _users: UsersService,\n private _dialog: MatDialog,\n private settingsService: SettingsService,\n private cdRef: ChangeDetectorRef\n ) {\n super();\n this.isConcierge = this.settingsService.concierge;\n }\n\n public ngOnInit(): void {\n // Trim title \n // this.form.get('title').setValue(this.form.get('title').value.trim());\n\n this.chipOptions = [...this.form.controls.company.value];\n\n this.localTimezone = DateNow(new Date()).building_tz;\n const building_tz = (\n this.form.controls.action &&\n (\n this.form.controls.action.value === 'booking_clone' ||\n this.form.controls.action.value === 'clone' ||\n this.form.controls.action.value === 'edit' ||\n this.form.controls.action.value === 'booking_edit'\n ) &&\n this.form.controls.dateTz &&\n this.form.controls.dateTz.value\n ) ? this.form.controls.dateTz.value.building_tz : this.localTimezone;\n\n this.nowTz = new DateTZ({ date: Date.now(), is_local_tz: false, building_tz });\n this.fromDateTz = closestToTimeSlotTz(this.nowTz, 15);\n\n this._users.initialised.pipe(first((_) => _)).subscribe(() => {\n const user: User = this._users.current;\n const delegates = user.delegates.map(\n (del) => this._users.find(del.email) || new User({ email: del.email, name: del.email.split('@')[0] })\n );\n this.user_list = [user].concat(delegates);\n });\n\n this.updateCoachmarkTimes(this.form.controls.timezone.value);\n this.subscription('formChanges', this.form.valueChanges\n .pipe(\n skip(1), // initial form changes\n distinctUntilChanged())\n .subscribe(() => {\n this.timeout('update_coachmark', () => {\n this.updateCoachmarkTimes(this.form.controls.timezone.value);\n }, 500);\n })\n );\n\n this.subscription('isRecurrentChanges', this.form.controls.is_recurrent.valueChanges\n .subscribe(() => {\n const recurrenceStarts = this.form.controls.recurrence_starts\n if(!this.form.controls.is_recurrent.value){\n recurrenceStarts.clearValidators() \n }else{\n const arrayValidators = [Validators.required];\n arrayValidators.push(arrayWithValues);\n recurrenceStarts.setValidators(arrayValidators);\n }\n recurrenceStarts.updateValueAndValidity()\n })\n ); \n\n /**Disable Inputs */\n this.disableInputs();\n\n /**turn is_recurrent to false if editing or cloning a stand-alone/occurrence */\n if(this.form.controls.id?.value && !this.form.controls.action?.value){\n this.form.controls.is_recurrent.setValue(false)\n }\n }\n\n /**\n * \n * @param key : formcontrol name \n * Function trim value being submitted with only spaces/beginning/end \n */\n public trim(key: string): void {\n this.form.get(key).setValue(this.form.get(key).value.trim());\n }\n\n /** Whether notes and description should use the HTML editor */\n public get use_html(): boolean {\n return this._service.setting('app.booking.html_body') || false;\n }\n\n /** List of available types for bookings */\n public get booking_types(): Identity[] {\n return this._service.setting('app.booking.booking_types') || [];\n }\n\n /** Display string for the list of active spaces */\n public get spaces(): string {\n const spaces = this.form.controls.space_list.value;\n return spaces.length === 1\n ? spaces[0].local_name\n : spaces.length > 1\n ? `${spaces.length} spaces selected`\n : 'No Spaces selected';\n }\n\n public disableInputs() {\n const { id, action, needs_space, is_recurrent } = this.form.value;\n const has_id = !!id;\n const is_edit = action === BookingAction.EDIT;\n if (has_id) {\n this.form.get('is_recurrent')?.disable();\n }\n\n if(is_edit){\n this.form.get('is_multiroom')?.disable();\n }\n\n if (!this.isConcierge && !needs_space) {\n this.form.get('has_catering')?.disable();\n }\n if(has_id && is_edit && is_recurrent){\n this.form.get('dateTz')?.disable()\n this.form.patchValue({ action: null });\n }\n }\n\n /**\n * Open modal to change the space details for the booking\n */\n public openSpacesModal(): void {\n const ref = this._dialog.open(\n SpaceSelectModalComponent,\n {\n width: 'auto',\n height: 'auto',\n maxWidth: '95vw',\n data: {\n spaces: this.form.controls.space_list.value,\n dateTz: this.form.controls.dateTz.value,\n duration: this.form.controls.duration.value,\n host: this.form.controls.organiser.value,\n multiple: true,\n needsCatering: !!this.form.controls.catering?.value?.length,\n }\n }\n );\n this.subscription(\n 'new_spaces',\n ref.componentInstance.event.subscribe((event) => {\n /* istanbul ignore else */\n if (event.reason === 'done') {\n let space_list = this.form.controls.space_list.value;\n space_list = event.metadata;\n this.form.controls.space_list.setValue(unique(space_list, 'id'));\n const catering = this.form.controls?.catering?.value.map((order: CateringOrder) => {\n order.location = space_list[0].name;\n order.location_id = space_list[0].email;\n return order;\n })\n this.form.controls.catering?.setValue(catering || [])\n ref.close();\n this.unsub('new_spaces');\n }\n if (event.reason === 'close') {\n ref.close();\n this.unsub('new_spaces');\n }\n })\n );\n }\n\n /**\n * Open modal to change the recurrence details for the booking\n */\n public openNewUserModal() {\n const ref = this._dialog.open(NewUserModalComponent, {\n width: 'auto',\n height: 'auto'\n });\n this.subscription(\n 'new_user',\n ref.componentInstance.event.subscribe((event) => {\n /* istanbul ignore else */\n if (event.reason === 'done') {\n const attendees = this.form.controls.attendees?.value;\n attendees.push(event.metadata);\n this.form.controls.attendees.setValue(unique(attendees, 'email'));\n ref.close();\n this.unsub('new_user');\n this.cdRef.detectChanges();\n }\n })\n );\n }\n\n // Add & Remove chip and set the value of the form control accordingly\n addCompany(event, company): void {\n if (company) {\n this.chipOptions.push(company);\n this.form.controls.company.setValue(this.chipOptions);\n }\n event.preventDefault();\n }\n\n removeOption(option: any): void {\n const index = this.chipOptions.indexOf(option);\n if (index >= 0) {\n this.chipOptions.splice(index, 1);\n }\n this.form.controls.company.setValue(this.chipOptions);\n }\n\n private updateCoachmarkTimes(timezone: string) {\n if (!timezone) timezone = this.localTimezone;\n // Resolve the problem that locally I might have the same TZ offset but the names don't match.\n const localTzOffset = DateTime.now().setZone(this.localTimezone).offset;\n const buildingTzOffset = DateTime.now().setZone(timezone).offset;\n const dateTz = this.form.controls.dateTz.value;\n if (dateTz && localTzOffset !== buildingTzOffset) {\n const startDate = dateTz.clone();\n this.localStart = startDate.formatLocalDate(\"h:mma\");\n this.localEnd = startDate.addValue({ minutes: this.form.value.duration }).formatLocalDate(\"h:mma\");\n } else {\n // No location is selected so coachmark is hidden\n this.localStart = \"\";\n this.localEnd = \"\";\n }\n this.cdRef.detectChanges();\n }\n\n public get isSeriesAction(){\n return this.form.value.action === SeriesAction.CLONE || this.form.value.action === SeriesAction.EDIT\n }\n\n onToggleChange(toggledControlName: string): void {\n if (toggledControlName === 'is_recurrent') {\n // If the is_recurrent toggle is being activated, deactivate is_multiroom\n if (this.form.controls.is_recurrent?.value) {\n this.form.controls.is_multiroom?.setValue(false);\n }\n } else if (toggledControlName === 'is_multiroom') {\n // If the is_multiroom toggle is being activated, deactivate is_recurrent\n if (this.form.controls.is_multiroom?.value) {\n this.form.controls.is_recurrent?.setValue(false);\n }\n }\n }\n \n}\n","
\n \n \n \n
\n
\n \n Title*:\n \n \n \n\n \n {{ ( form?.get('title').errors && form?.get('title').hasError('pattern')) \n ? 'Some special characters (^=`~!@#$%*{};:\\'_\\\",.\\<>) are not allowed' : 'Title is required'}} \n \n \n
\n\n
\n \n
\n \n \n
\n Date and time must be in the future\n
\n
\n
\n
\n
\n \n \n
\n Date and time must be in the future\n
\n
\n
\n
\n \n \n
\n \n
\n Duration is invalid. End time must be in the future\n
\n
\n
\n Please be aware that this booking starts at {{localStart}} and ends at {{localEnd}} in your local timezone.\n
\n
\n
\n
\n Recurring booking\n
\n \n
\n Multiroom\n
\n
\n \n \n
\n \n \n \n \n \n {{ user.name || user.email }}\n \n \n \n
\n
\n \n \n \n {{ form?.get('attendees').errors?.customError }}\n \n
\n
\n \n
\n \n
\n \n
\n \n \n {{ ( form?.get('company').errors && form?.get('company').hasError('pattern'))\n ? 'Some special characters (^=`~@#$%*{};:_\\\",.\\<>) are not allowed' : ''}}\n \n
\n \n
\n \n \n {{ selected }}\n
\n
\n
\n
\n\n
1\">\n \n \n \n \n {{ type.name }}\n \n \n \n
\n
\n Need a meeting space?\n \n
\n
\n \n \n Need catering?\n \n
\n
\n \n \n \n \n \n \n \n
\n
\n","import {\n Component,\n EventEmitter,\n Inject,\n OnInit,\n Output\n} from '@angular/core';\nimport {\n MAT_DIALOG_DATA,\n MatDialogRef\n} from '@angular/material/dialog';\nimport {\n FormControl,\n FormGroup\n} from '@angular/forms';\n\nimport {\n ApplicationService,\n CateringItem,\n OrganisationService,\n Space,\n SpacesService\n} from '@mckinsey-converge/data-common';\nimport {\n BaseDirective,\n DialogEvent\n} from '@mckinsey-converge/base';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\n\n\nexport interface CateringConfirmModalData {\n all_day: boolean;\n form: FormGroup;\n dateTz: DateTZ;\n}\n\n@Component({\n selector: 'a-catering-confirm-modal',\n templateUrl: './catering-confirm-modal.component.html',\n styleUrls: ['./catering-confirm-modal.component.scss']\n})\nexport class BookingCateringConfirmModalComponent extends BaseDirective implements OnInit {\n /** Emitter for user actions on the modal */\n @Output() public event = new EventEmitter();\n /** List of selected items for the order */\n public item_list: CateringItem[] = [];\n\n /** Space selected for delivery */\n public get space(): Space {\n return this._spaces.find(this._data.form?.controls?.location_id?.value);\n }\n\n /** Delivery time for the order */\n public get delivery_time(): string {\n let date = this._data.dateTz;\n if (this._data.form && this._data.form.controls.delivery_time) {\n date = date.addValue({ minutes: this._data.form.controls.delivery_time.value });\n }\n return date.formatDate('h:mma').toLocaleLowerCase();\n }\n\n /** Form field for order items */\n public get item_field(): FormControl {\n return this._data.form.controls.items as any;\n }\n\n /** Total cost of the order */\n public get order_cost(): number {\n return this.item_list.reduce((amount, item) => {\n const price = item.price\n return amount + item.amount * price\n }, 0);\n }\n\n /** Currency symbol for the selected space */\n public get symbol(): string {\n /* istanbul ignore else */\n if (!this.space || !this.space.level) {\n return 'USD';\n }\n const building = this._org.buildings.find(\n (bld) => bld.id === this.space.level.building_id\n ) || { currency: 'USD' };\n return building.currency;\n }\n\n constructor(\n private _service: ApplicationService,\n private _org: OrganisationService,\n private _spaces: SpacesService,\n private _dialog_ref: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private _data: CateringConfirmModalData\n ) {\n super();\n if (!this._data.form) {\n this._service.notifyError('No form data for order');\n this._dialog_ref.close();\n }\n }\n\n public ngOnInit(): void {\n /* istanbul ignore else */\n if (this._data.form.controls.items) {\n this.subscription(\n 'item_list',\n this._data.form.controls.items.valueChanges.subscribe((items) => {\n /* istanbul ignore else */\n if (!items || items.length <= 0) {\n this._dialog_ref.close();\n }\n })\n );\n }\n this.item_list = this._data.form.controls.items.value.map((item) => new CateringItem(item.toJSON()));\n }\n}\n","
\n
Confirm Catering Order
\n \n
\n\n
\n
\n Delivering to {{ space?.local_name || '<Unset>' }} at {{ delivery_time }}\n
\n
\n \n
\n
\n \n
{{ order_cost / 100 | currency:symbol }}
\n
\n
\n
\n\n
\n \n
\n
\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n OnInit,\n Output,\n ViewChild\n} from '@angular/core';\nimport {\n AbstractControl,\n FormControl,\n FormGroup,\n Validators\n} from '@angular/forms';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\n\nimport {\n OrganisationService,\n BookingNote,\n CateringOrder,\n Space,\n UsersService,\n CateringNotesService,\n Booking\n} from '@mckinsey-converge/data-common';\nimport {\n DialogEvent,\n HashMap\n} from '@mckinsey-converge/base';\n\nimport { DateNow } from '@mckinsey-converge/date-tz';\n\n\nexport interface CateringDetailsModalData {\n spaces: Space[];\n notes_field: AbstractControl;\n catering: AbstractControl;\n booking: Booking\n}\n\n@Component({\n selector: 'a-catering-details-modal',\n templateUrl: './catering-details-modal.component.html',\n styleUrls: ['./catering-details-modal.component.scss']\n})\nexport class CateringDetailsModalComponent implements OnInit {\n /** Emitter for modal events */\n @Output() public event = new EventEmitter();\n /** Mapping of spaces to notes */\n public notes: HashMap = {};\n /** Mapping of spaces to cost codes */\n public codes: HashMap = {};\n /** Mapping of spaces to estimated head count */\n public head_counts: HashMap = {};\n /** Mapping of spaces to form fields */\n public form: HashMap = {};\n /** Map of spaces to whether they need a charge code */\n public needs_charge_code: HashMap = {};\n /** Index of the active space */\n public active_space: number = 0;\n\n @ViewChild('content', { static: true }) private _content_el: ElementRef;\n\n /** List of selected spaces */\n public get space_list(): Space[] {\n return (this._data.spaces || []).filter((space) =>\n this._data.catering.value.find((order) => order.location_id === space.email)\n );\n }\n\n public get active_form(): FormGroup {\n return this.form[this.space_list[this.active_space].email];\n }\n\n public get invalid_charge_code(): boolean {\n return this.active_form.controls.code.errors?.pattern || this.active_form.controls.code.errors?.minlength;\n }\n\n /** Whether form fields are valid */\n public get is_valid(): boolean {\n return this.space_list.reduce(\n (valid, space) => valid && this.form[space.email].valid,\n true\n );\n }\n\n constructor(\n private _org: OrganisationService,\n private _users: UsersService,\n private _cateringNotesService: CateringNotesService,\n @Inject(MAT_DIALOG_DATA) private _data: CateringDetailsModalData\n ) {\n }\n\n public ngOnInit(): void {\n const note_list = this._data.notes_field.value.filter(\n (note: BookingNote) => note.type === 'catering'\n );\n this.notes = note_list.reduce((map, note) => {\n map[note.space] = note.message;\n return map;\n }, {});\n this.codes = this._data.catering.value.reduce((map, order: CateringOrder) => {\n map[order.location_id] = order.charge_code;\n return map;\n }, {});\n this.generateFormFields();\n }\n\n public submit(): void {\n this.space_list.forEach((space) => this.form[space.email].markAllAsTouched());\n /* istanbul ignore else */\n if (this.is_valid) {\n // Update notes\n const notes = this._data.notes_field.value.filter(\n (note: BookingNote) => note.type !== 'catering'\n );\n const new_notes = this.space_list.map(\n (space) =>\n ({\n author: this._data.booking.booked_by ? this._data.booking.booked_by['name'] : this._users.current.name,\n type: 'catering',\n message: this.form[space.email].controls.notes.value,\n space: space.email,\n date: DateNow(new Date()).ms\n } as BookingNote)\n );\n this._cateringNotesService.setNotes(new_notes);\n this._data.notes_field.setValue(notes.concat(new_notes).filter((note) => note.message));\n // Save the notes\n const orders = this._data.catering.value.map(\n (order) =>\n new CateringOrder({\n ...order,\n charge_code: this.form[order.location_id]\n ? this.form[order.location_id].controls.code.value\n : ''\n })\n );\n\n this._data.catering.setValue(orders);\n // This should go to the next\n this.event.emit({ reason: 'done' });\n } else {\n this._scrollToBottom();\n }\n }\n\n /** Generate form fields for each space */\n private generateFormFields(): void {\n for (const space of this.space_list) {\n const building = this._org.buildings.find(\n bld => bld.id === space.level.building_id\n );\n \n this.needs_charge_code[space.email] = space?.filters?.charge_code || space?.settings?.charge_code || false;\n this.form[space.email] = new FormGroup({\n notes: new FormControl(this.notes[space.email] || ''),\n code: new FormControl(this.codes[space.email] || '',\n this.needs_charge_code[space.email] ?\n [Validators.pattern(/^[a-zA-Z0-9]{4,}$/), Validators.minLength(4), Validators.required ] : [Validators.pattern(/^[a-zA-Z0-9]{4,}$/), Validators.minLength(4)])\n });\n }\n }\n\n /** Scroll the content container to the bottom */\n private _scrollToBottom(): void {\n this._content_el?.nativeElement.scrollTo({\n top: this._content_el.nativeElement.scrollHeight,\n left: 0,\n behavior: 'smooth'\n });\n }\n}\n","
\n
\n \n \n \n
\n \n
\n\n
\n
\n \n
Please specify any allergies or gluten intolerances
\n
\n
\n
\n \n \n \n \n
\n
\n \n Charge Code\n *\n \n \n \n \n Note: Your booking will be confirmed before you are charged.\n \n \n {{ invalid_charge_code ? 'Valid Charge Code Required' : 'Charge Code is required'}}\n \n \n
\n
\n
\n
\n\n
\n \n
\n
\n","import {\n Component,\n EventEmitter,\n Inject,\n Output\n} from '@angular/core';\nimport {\n MAT_DIALOG_DATA,\n MatDialogRef\n} from '@angular/material/dialog';\n\nimport { ApplicationIcon } from '@mckinsey-converge/data-common';\nimport {\n BaseDirective,\n DialogEvent\n} from '@mckinsey-converge/base';\n\nexport interface ConfirmModalData {\n /** Title of the modal */\n title: string;\n /** Contents of the modal */\n content: string;\n /** Text displaed on the confirmation button */\n action?: string;\n /** Icon to display on the modal */\n icon: ApplicationIcon;\n}\n\nexport const CONFIRM_METADATA = {\n height: 'auto',\n width: '24em',\n maxHeight: 'calc(100vh - 2em)',\n maxWidth: 'calc(100vw - 2em)'\n};\n\n@Component({\n selector: 'confirm-modal',\n templateUrl: './confirm-modal.component.html',\n styleUrls: ['./confirm-modal.component.scss']\n})\nexport class ConfirmModalComponent extends BaseDirective {\n /** Emitter for user action on the modal */\n @Output() public event = new EventEmitter();\n /** Loading state */\n public loading: string;\n\n /** Title of the confirm modal */\n public get title(): string {\n return (this._data ? this._data.title : null) || 'Confirm';\n }\n\n /** Body of the confirm modal */\n public get content(): string {\n return (this._data ? this._data.content : null) || 'Are you sure?';\n }\n\n /** Display text on the confirm button */\n public get action(): string {\n return (this._data ? this._data.action : null) || 'Ok';\n }\n\n /** Display icon properties */\n public get icon(): ApplicationIcon {\n return (this._data ? this._data.icon : null) || null;\n }\n\n constructor(\n private _dialog: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private _data: ConfirmModalData\n ) {\n super();\n }\n\n /**\n * User confirmation of the content of the modal\n */\n public accept() {\n this.event.emit({ reason: 'done' });\n }\n}\n","
\n

{{ title || 'Confirm' }}

\n
\n\n
\n \n
\n

\n
\n
\n
\n\n
\n \n \n
\n
\n\n
\n
\n
\n \n
\n
{{ loading }}
\n
\n
\n
\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { LegacyUiModule } from '@mckinsey-converge/legacy-ui';\nimport { UiModule } from '@mckinsey-converge/ui';\nimport {\n FormsModule,\n ReactiveFormsModule\n} from '@angular/forms';\nimport { SpaceSelectModalComponent } from './space-select-modal/space-select-modal.component';\nimport { NewUserModalComponent } from './new-user-modal/new-user-modal.component';\nimport { ConfirmModalComponent } from './confirm-modal/confirm-modal.component';\nimport { NoCateringModalComponent } from './no-catering-modal/no-catering-modal.component';\nimport { BookingCateringConfirmModalComponent } from './catering-confirm-modal/catering-confirm-modal.component';\nimport { CateringDetailsModalComponent } from './catering-details-modal/catering-details-modal.component';\nimport { RequirementDetailsModalComponent } from './requirement-details-modal/requirement-details-modal.component';\nimport { BookingConfirmComponent } from './booking-confirm/booking-confirm.component';\nimport { BaseModule } from '@mckinsey-converge/base';\nimport { UserFormComponent } from './user-form/user-form.component';\nimport { BookingFormComponent } from './booking-form/booking-form.component';\nimport { EditorModule } from '@tinymce/tinymce-angular';\n\nconst DECLARATIONS = [\n SpaceSelectModalComponent,\n NewUserModalComponent,\n ConfirmModalComponent,\n NoCateringModalComponent,\n BookingCateringConfirmModalComponent,\n CateringDetailsModalComponent,\n RequirementDetailsModalComponent,\n BookingConfirmComponent,\n UserFormComponent,\n BookingFormComponent,\n];\n\n@NgModule({\n imports: [\n LegacyUiModule,\n FormsModule,\n ReactiveFormsModule,\n CommonModule,\n UiModule,\n BaseModule,\n EditorModule,\n ],\n declarations: [\n ...DECLARATIONS\n ],\n exports: [\n ...DECLARATIONS,\n BaseModule\n ]\n})\nexport class LegacyOverlaysModule {\n}\n","import { Component, EventEmitter, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\n\nimport { BaseDirective, DialogEvent } from '@mckinsey-converge/base';\nimport { generateUserForm, User } from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'new-user-modal',\n templateUrl: './new-user-modal.component.html',\n styleUrls: ['./new-user-modal.component.scss'],\n})\nexport class NewUserModalComponent extends BaseDirective implements OnInit {\n /** Emitter for user action on the modal */\n @Output() public event = new EventEmitter();\n /** Form fields for the new user */\n public form: FormGroup;\n /** New user data store */\n public user: User;\n /** Whether user details are being saved */\n public loading: boolean;\n\n public ngOnInit(): void {\n this.user = new User();\n this.form = generateUserForm(this.user);\n }\n\n public saveChanges() {\n this.form.markAllAsTouched();\n if (this.form.valid) {\n if (!this.form.controls.email.value) {\n this.form.controls.email.setValue(\n `${Math.floor(Math.random() * 99999)}@guest.mckinsey.com`\n );\n }\n const firstName = this.form.value.first_name.split(' ')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n\n const lastName = this.form.value.last_name.split(' ')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n \n const new_user = new User({\n ...this.form.value,\n name: `${firstName} ${lastName}`,\n type: 'external',\n external: true,\n visitor: true,\n });\n this.event.emit({ reason: 'done', metadata: new_user });\n }\n }\n}\n","
\n

Add External Attendee

\n \n
\n
\n \n
\n
\n \n \n
\n\n
\n
\n
\n \n
\n
\n Saving attendee...\n
\n
\n
\n
\n\n","import {\n Component,\n Output,\n EventEmitter\n} from '@angular/core';\nimport {\n MatDialogRef,\n} from '@angular/material/dialog';\nimport {\n BaseDirective,\n DialogEvent\n} from '@mckinsey-converge/base';\n\n@Component({\n selector: 'no-catering-modal',\n templateUrl: './no-catering-modal.component.html',\n styleUrls: ['./no-catering-modal.component.scss']\n})\nexport class NoCateringModalComponent extends BaseDirective {\n constructor(\n private _dialog_ref: MatDialogRef,\n ) {\n super();\n }\n\n // /** Emitter for user action on the modal */\n @Output() public event = new EventEmitter();\n\n // Submit the Survey in it's current state.\n public confirm() {\n this.event.emit({ reason: 'done' });\n this._dialog_ref.close();\n }\n\n // Close the modal\n public cancel() {\n this.event.emit({ reason: 'close' });\n this._dialog_ref.close();\n }\n}\n","
\n \n
\n
\n
\n \n

Catering is not available for your new room selection. \n
Are you sure you want to change rooms?

\n
\n
\n \n \n \n
\n
\n
","import {\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n OnInit,\n Output,\n ViewChild\n} from '@angular/core';\nimport {\n AbstractControl,\n FormControl,\n FormGroup,\n Validators\n} from '@angular/forms';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\n\nimport {\n BookingNote,\n OrganisationService,\n SettingsService,\n Space,\n UsersService\n} from '@mckinsey-converge/data-common';\nimport {\n DialogEvent,\n HashMap\n} from '@mckinsey-converge/base';\n\nimport { DateNow } from '@mckinsey-converge/date-tz';\n\n\nexport interface RequirementDetailsModalData {\n spaces: Space[];\n notes_field: AbstractControl;\n codes_field: AbstractControl;\n head_counts_field: AbstractControl;\n standalone?: boolean;\n}\n\n@Component({\n selector: 'a-requirement-details-modal',\n templateUrl: './requirement-details-modal.component.html',\n styleUrls: ['./requirement-details-modal.component.scss']\n})\nexport class RequirementDetailsModalComponent implements OnInit {\n /** Emitter for modal events */\n @Output() public event = new EventEmitter();\n /** Mapping of spaces to notes */\n public notes: HashMap = {};\n /** Mapping of spaces to cost codes */\n public codes: HashMap = {};\n /** Mapping of spaces to estimated head count */\n public head_counts: HashMap = {};\n /** Mapping of spaces to form fields */\n public form: HashMap = {};\n /** Map of spaces to whether they need a charge code */\n public needs_charge_code: boolean;\n /** Index of the active space */\n public active_space: number = 0;\n\n @ViewChild('content', { static: true }) private _content_el: ElementRef;\n\n /** List of selected spaces */\n public get space_list(): Space[] {\n return this._data.spaces;\n }\n\n public get has_recurrence(): boolean {\n return false\n }\n\n public get active_form(): FormGroup {\n return this.form[this.space_list[this.active_space].email];\n }\n\n public get invalid_charge_code(): boolean {\n return this.active_form.controls.code.errors?.minlength || this.active_form.controls.code.errors?.pattern;\n }\n\n /** Whether form fields are valid */\n public get is_valid(): boolean {\n // return this.space_list.reduce((valid, space) => valid && this.form[space.email].valid, true);\n return this.space_list.length > 0 && this.space_list.reduce((valid, space) => valid && this.form[space.email].valid, true);\n }\n\n public isConcierge: boolean;\n public frontend: string;\n\n constructor(\n private _org: OrganisationService,\n private _users: UsersService,\n @Inject(MAT_DIALOG_DATA) private _data: RequirementDetailsModalData,\n private _settings: SettingsService,\n ) {\n this.isConcierge = _settings.concierge;\n this.frontend = _settings.frontend;\n }\n\n public ngOnInit(): void {\n const note_list = this._data.notes_field.value\n .filter((note: BookingNote) => note.type === 'equipment');\n this.notes = note_list.reduce((map, note) => {\n map[note.space] = note.message;\n return map;\n }, {});\n this.codes = { ...this._data.codes_field.value };\n this.head_counts = { ...this._data.head_counts_field.value };\n this.generateFormFields();\n }\n\n public submit(): void {\n // Get the email of the first space\n const firstSpaceEmail = this.space_list[0].email;\n\n // Copy values from the first space's form controls to all other spaces\n this.space_list.forEach(space => {\n if (space.email !== firstSpaceEmail) {\n this.form[space.email].controls.notes.setValue(this.form[firstSpaceEmail].controls.notes.value);\n this.form[space.email].controls.code.setValue(this.form[firstSpaceEmail].controls.code.value);\n this.form[space.email].controls.head_count.setValue(this.form[firstSpaceEmail].controls.head_count.value);\n }\n });\n\n this.space_list.forEach(space => this.form[space.email].markAllAsTouched());\n /* istanbul ignore else */\n if (this.is_valid) {\n // Update notes \n const notes = this._data.notes_field.value\n .filter((note: BookingNote) => note.type !== 'equipment');\n const new_notes = this.space_list.map(space => ({\n author: this._users.current.name,\n type: 'equipment',\n message: this.form[space.email].controls.notes.value.trim(),\n space: space.email,\n date: DateNow(new Date()).ms\n } as BookingNote));\n this._data.notes_field.setValue(notes.concat(new_notes).filter(note => note.message));\n this._data.codes_field.setValue(this.space_list.reduce((map, space) => {\n map[space.email] = this.form[space.email].controls.code.value;\n return map;\n }, {}));\n this._data.head_counts_field.setValue(this.space_list.reduce((map, space) => {\n map[space.email] = this.form[space.email].controls.head_count.value;\n return map;\n }, {}));\n this.event.emit({ reason: 'done' });\n } else {\n this._content_el.nativeElement.scrollTo({\n top: this._content_el.nativeElement.scrollHeight,\n left: 0,\n behavior: 'smooth'\n });\n }\n }\n\n /** Generate form fields for each space */\n // private generateFormFields(): void {\n // for (const space of this.space_list) {\n // const building = this._org.buildings.find(\n // bld => bld.id === space[0]?.level.building_id\n // );\n // // this.needs_charge_code[space.email] = space?.settings?.equipment_code || building?.required?.equipment_code || false;\n // const { filters, settings } = space;\n // const roomBasedEqCode = filters?.equipment_code || settings?.equipment_code;\n // const officeBasedEqCode = building?.required?.equipment_code;\n // this.needs_charge_code[space.email] = roomBasedEqCode !== undefined ? roomBasedEqCode : officeBasedEqCode !== undefined ? officeBasedEqCode: false;\n\n // this.form[space.email] = new FormGroup({\n // notes: new FormControl(this.notes[space.email] || ''),\n // code: new FormControl(\n // this.codes[space.email] || '',\n // this.needs_charge_code[space.email] ?\n // [Validators.pattern(/^[a-zA-Z0-9]*$/), Validators.minLength(4), Validators.required] : [Validators.minLength(4), Validators.pattern(/^[a-zA-Z0-9]*$/)]\n // ),\n // head_count: new FormControl(this.head_counts[space.email] || '', [Validators.required, Validators.pattern(/^(?!0+$)/)])\n // });\n // }\n // }\n \n private generateFormFields(): void {\n // Initialize a variable to determine if any space needs a charge code\n let anySpaceNeedsChargeCode = false;\n \n // First pass to determine if any space needs a charge code\n for (const space of this.space_list) {\n const building = this._org.buildings.find(\n bld => bld.id === space?.level.building_id\n );\n const { filters, settings } = space;\n const roomBasedEqCode = filters?.equipment_code;\n const officeBasedEqCode = building?.required?.equipment_code;\n \n // this.needs_charge_code[space.email] = space?.settings?.equipment_code || building?.required?.equipment_code || false;\n if (roomBasedEqCode || officeBasedEqCode) {\n anySpaceNeedsChargeCode = true;\n this.needs_charge_code = true;\n break;\n } else{\n this.needs_charge_code = false;\n }\n }\n \n // Second pass to create form groups with the determined charge code requirement.\n // We show only the first space, but if one of the selected spaces needs a mandatory charge code,\n // then all spaces need a mandatory charge code\n for (const space of this.space_list) { \n this.form[space.email] = new FormGroup({\n notes: new FormControl(this.notes[space.email] || ''),\n code: new FormControl(\n this.codes[space.email] || '',\n anySpaceNeedsChargeCode ?\n [Validators.pattern(/^[a-zA-Z0-9]*$/), Validators.minLength(4), Validators.required] :\n [Validators.minLength(4), Validators.pattern(/^[a-zA-Z0-9]*$/)]\n ),\n head_count: new FormControl(this.head_counts[space.email] || '', [Validators.required, Validators.pattern(/^(?!0+$)/)])\n });\n }\n }\n}\n","
\n
\n \n \n \n \n {{\n this.space_list.length > 1 ? this.space_list.length + ' spaces selected' :\n this.space_list[0]?.local_name || 'No spaces selected'\n }}\n \n \n \n \n
\n \n
\n\n
\n
\n \n
\n {{\n has_recurrence && !isConcierge\n ? 'To update headcount information, add equipment or catering, please edit individual meeting occurences in My Day'\n : \"Would you like to add equipment to your booking's spaces?\"\n }}\n
\n
\n
\n
\n \n \n \n \n
\n
\n \n \n Charge Code*\n \n \n \n \n Note: Your booking will be confirmed before you are\n charged.\n \n \n {{ invalid_charge_code ? 'Valid Charge Code Required' : 'Charge Code is required'}}\n \n \n
\n
\n \n Headcount Estimate*\n \n \n \n \n Note: This estimate is used to calculate catering and/or\n assign rooms. Please keep updated of any changes.\n \n \n Headcount Estimate is required\n \n \n
\n
\n \n \n\n\n
\n \n
\n
\n","import {\n Component,\n EventEmitter,\n Inject,\n OnInit,\n Output,\n} from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport {\n BehaviorSubject,\n Observable,\n of,\n Subject\n} from 'rxjs';\nimport {\n catchError,\n debounceTime,\n distinctUntilChanged,\n first,\n map,\n switchMap,\n take,\n withLatestFrom\n} from 'rxjs/operators';\nimport {\n Building,\n mapBuildingToSelectOption,\n mapCityToAllSelectOption,\n OrganisationService,\n SettingsService,\n Space,\n SpaceBookingRuleOptions,\n SpacesService,\n toggleSelectedByGroup,\n User,\n UsersService\n} from '@mckinsey-converge/data-common';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n DialogEvent,\n HashMap,\n Identity,\n unique\n} from '@mckinsey-converge/base';\nimport { NoCateringModalComponent } from '../no-catering-modal/no-catering-modal.component'\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { SelectOption } from '@mckinsey-converge/ui';\n\nexport interface SpaceSelectModalData {\n /** List of selected spaces */\n spaces: Space[];\n /** Start time for availability of spaces */\n dateTz: DateTZ;\n /** Duration of the availability block to look for */\n duration: number;\n /** Host of the booking being made */\n host: User;\n /** Whether multiple spaces can be selected */\n multiple: boolean;\n /** Force zone ids */\n zone_ids?: string;\n /** Booking needs catering */\n needsCatering?: boolean,\n}\n\n@Component({\n selector: 'a-space-select-modal',\n templateUrl: './space-select-modal.component.html',\n styleUrls: ['./space-select-modal.component.scss']\n})\nexport class SpaceSelectModalComponent extends BaseDirective implements OnInit {\n /** Emitter for user action on the modal */\n @Output() public event = new EventEmitter();\n /** Whether space list is being loaded */\n public loading: boolean;\n /** List of available spaces to select from */\n public spaces: Space[] = [];\n /** Active building to filter spaces on */\n public active_building: Building;\n /** Active building to filter spaces on */\n public active_type: Identity;\n /** List of items from an API search */\n public search_results$: Observable;\n /** Subject holding the value of the search */\n public readonly change$ = new Subject();\n /** List of currently selected spaces */\n public selected_spaces: Space[] = [];\n /** Mapping as to whether a space is by request */\n public request_map: HashMap = {};\n /** Whether selected list should be shown on mobile */\n public show_list: boolean;\n\n /** host to load (only in staff) **/\n public host: User;\n\n /** List of available buildings */\n public types: Identity[] = [];\n\n public isConcierge: boolean;\n public frontend: string;\n\n /** List of available buildings */\n public get buildings(): Building[] {\n return this._org.buildings;\n }\n\n /** Whether multiple spaces can be selected */\n public get multiple(): boolean {\n return false;\n }\n\n public get has_zone(): boolean {\n return !!this._data.zone_ids;\n }\n\n public formGroup = new FormGroup({\n location: new FormControl([]),\n });\n\n public options = new BehaviorSubject[]>([]);\n\n public selectedOptions = new BehaviorSubject[]>([]);\n\n\n public noCateringDialogRef: MatDialogRef;\n\n /** List of zones to filter the spaces on */\n public zone_ids: string[] = [];\n\n\n public get initialBuildingIds(): string[] {\n return this._org.building ? [this._org.building.id] : [];\n }\n\n public savedSelection\n\n constructor(\n private _org: OrganisationService,\n private _users: UsersService,\n private _spaces: SpacesService,\n private _settings: SettingsService,\n private _dialog: MatDialog,\n @Inject(MAT_DIALOG_DATA) private _data: SpaceSelectModalData\n ) {\n super();\n this.isConcierge = _settings.concierge;\n this.frontend = _settings.frontend;\n }\n\n public ngOnInit(): void {\n this._spaces.initialised.pipe(first((_) => _)).subscribe(() => {\n let request_id = 0;\n // Listen for input changes\n this.search_results$ = this.change$.pipe(\n debounceTime(400),\n distinctUntilChanged(),\n switchMap((bld) => {\n this.loading = true;\n const zone_ids: string[] = [];\n /* istanbul ignore else */\n if (this.active_building) {\n zone_ids.push(this.active_building.id);\n }\n\n if (bld?.includes('|')) {\n bld = this.savedSelection\n }\n\n const id = request_id;\n return this._spaces.available({\n zone_ids: bld?.length ? bld : this._data.spaces[0].building.id || zone_ids.join(','),\n dateTz: this._data.dateTz,\n duration: this._data.duration\n }).then(async (list) => ({ id, list }));\n }),\n catchError((_) => of({ id: request_id, list: [], error: _ })),\n map((resp: { id: number, list: Space[] }) => {\n this.loading = false;\n const filtered_list = resp.list.filter((space: Space) => {\n // if concierge skip rules check.\n if (this._settings.concierge) {\n return (this.active_type && this.active_type.id ? space.zones.includes(`${this.active_type.id}`) : true) &&\n !this.selected_spaces.find((s) => s.id === space.id);\n }\n\n const rules = space.rulesFor({\n dateTz: this._data.dateTz,\n duration: this._data.duration,\n host: this.host || this._data.host\n });\n return (\n rules.hide !== true &&\n (this.active_type && this.active_type.id\n ? space.zones.includes(`${this.active_type.id}`)\n : true) &&\n !this.selected_spaces.find((_space) => _space.id === space.id)\n );\n });\n return resp.id === request_id ? filtered_list : this.spaces;\n })\n );\n // Process API results\n this.subscription(\n 'search_results',\n this.search_results$.subscribe((list) => {\n this.spaces = list.filter((space) => {\n if (!space.available) {\n return false;\n }\n for (const zone of this.zone_ids) {\n if (space.zones.includes(zone)) {\n return true;\n }\n }\n return !this.zone_ids.length;\n });\n this.spaces.sort((a, b) => this.sort(a, b));\n if (!this.selectedOptions.value.length) {\n this.setDefaultBuilding()\n }\n })\n );\n this.active_building = this._data.spaces?.length\n ? this._org.buildings.find((i) => i.id === this._data.spaces[0].level.building_id)\n : this._org.building;\n this.types = [{ id: '', name: 'Any Space Type' } as any].concat(\n this._org.space_types || []\n );\n this.active_type = this.types[0];\n this.change$.next('');\n });\n\n this.subscription('buildings', this._org.listen('buildings').subscribe((bld_list) => {\n const city = this._org.building.city\n const timezone = this._org.building.timezone\n const grouped_by_city = {\n key: { name: city, timezone },\n value: bld_list?.filter((bld) => bld.city === city) || []\n }\n const city_buildings = grouped_by_city.value.map(\n (bld) => mapBuildingToSelectOption(grouped_by_city.key.name, bld)\n )\n const buildings = [\n mapCityToAllSelectOption(grouped_by_city.key),\n ...city_buildings\n ]\n this.options.next(buildings)\n }));\n\n }\n\n /** Add space to selected list */\n public addSpace(space: Space) {\n this.selected_spaces.push(space);\n this.selected_spaces = unique(this.selected_spaces, 'id');\n }\n\n /** Remove space from selected list */\n public removeSpace(space: Space) {\n this.selected_spaces = this.selected_spaces.filter((a_space) => a_space.id !== space.id);\n }\n\n /** Emit current state of the selected list */\n public save(list: Space[]) {\n if (!this._data.needsCatering) {\n // No catering order to warn about\n this.event.emit({ reason: 'done', metadata: list });\n return;\n }\n // Check if the room has catering \n if (list[0].has_catering) {\n this.event.emit({ reason: 'done', metadata: list });\n return;\n }\n // If not warn that the room doesn't have catering\n this.noCateringDialogRef = this._dialog.open(NoCateringModalComponent, {\n panelClass: 'mck-modal-mini',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n this.subscription(\n 'no-catering-modal',\n this.noCateringDialogRef.componentInstance.event.subscribe((event) => {\n if (event.reason === 'done') {\n this.event.emit({ reason: 'done', metadata: list });\n }\n if (event.reason === 'close') {\n this.event.emit({ reason: 'close' });\n }\n })\n );\n }\n\n private update() {\n const map = {};\n const options: SpaceBookingRuleOptions = {\n dateTz: this._data.dateTz,\n duration: this._data.duration,\n host: this._data.host\n };\n this.selected_spaces.forEach((space) => (map[space.id] = space.byRequest(options)));\n this.spaces.forEach((space) => (map[space.id] = space.byRequest(options)));\n this.request_map = map;\n }\n\n public setDefaultBuilding() {\n const defaultBld = this.options.value.filter(opt => opt.value === this._org.building.id)\n this.selectedOptions.next(defaultBld)\n }\n\n /**\n * Compare two spaces to determine order\n * @param space_a\n * @param space_b\n */\n public sort(space_a: Space, space_b: Space) {\n const bld = this._org.buildings.find((bld) => space_a.zones.includes(bld.id)) || { name: '', sort_order: [] };\n const bld_b = this._org.buildings.find((bld) => space_b.zones.includes(bld.id));\n if (bld && bld !== bld_b) {\n return bld.name.localeCompare(bld_b?.name);\n }\n const sort_order = [...bld.sort_order].reverse();\n for (const zone_id of sort_order) {\n if (zone_id === '*') {\n continue;\n }\n const a_has_zone = space_a.zones.indexOf(zone_id) >= 0;\n const b_has_zone = space_b.zones.indexOf(zone_id) >= 0;\n if (a_has_zone && !b_has_zone) {\n return 1;\n } else if (b_has_zone && !a_has_zone) {\n return -1;\n }\n }\n return space_a.name.localeCompare(space_b.name);\n }\n\n public toggle(option: SelectOption) {\n // update the selected value\n this.selectedOptions.pipe(\n take(1),\n withLatestFrom(this.options),\n map(([selectedOptions, options]) => {\n return toggleSelectedByGroup(options, selectedOptions, option);\n })\n ).subscribe(next => {\n const formData = this.formGroup.value;\n this.formGroup.setValue({\n location: formData.location,\n });\n this.selectedOptions.next(next);\n this.savedSelection = next.map((bld) => bld.value)\n\n });\n }\n\n /**\n * Update the selected space list\n * @param space Space to add/toggle in the selected list\n */\n public selectSpace(space: Space) {\n const list = this.spaces;\n if (list.find((item) => item.id === space.id)) {\n this.spaces = list.filter((item) => item.id !== space.id);\n } else {\n this.spaces = [space];\n }\n }\n\n public clearList() {\n this.spaces = []\n this.savedSelection = []\n }\n\n public triggerSearch = () => {\n if (this.savedSelection.length) {\n this.change$.next(this.savedSelection)\n } else {\n this.spaces = []\n }\n }\n\n}\n","
\n
Select meeting space{{ multiple ? 's' : '' }}
\n \n
\n\n
\n
\n \n \n 1\">Type\n 1\">\n \n \n {{ type?.name }}\n \n \n \n \n
\n \n \n
\n
\n
{{ space.local_name }}
\n
{{ space.level.name }}
\n
\n
\n \n
\n
\n \n
{{ space.capacity || '0' }}
\n
\n
\n \n {{ (!isConcierge && request_map[space.id]) ? 'Request' : 'Select' }}\n \n
\n
\n
\n
\n
\n
\n
\n

Selected spaces

\n
\n \n
\n \n \n
\n
\n
{{ space.name }}
\n
{{ space.level.name }}
\n
\n
\n \n
{{ space.capacity || '0' }}
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n \n
\n \n
\n
\n \n\n\n
\n
\n \n
\n
Loading available spaces...
\n
\n
\n\n
\n
\n \n
\n
No results available, please select another office.
\n
\n
\n\n
\n
\n \n
\n
No selected spaces
\n
\n
\n","import { Component, Input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\n@Component({\n selector: 'user-form',\n templateUrl: './user-form.component.html',\n styleUrls: ['./user-form.component.scss']\n})\nexport class UserFormComponent {\n /** Group of form fields used for creating the system */\n @Input() public form: FormGroup;\n}\n","
\n
\n
\n First Name:\n \n \n First name is required\n \n \n
\n
\n Last Name:\n \n \n Last name is required\n \n
\n
\n Email:\n \n \n A valid email is required\n \n
\n
\n
\n","export * from './lib/legacy-ui.module';\nexport * from './lib/custom-fields';\nexport * from './lib/icon/icon.component';\nexport * from './lib/feedback/feedback.component';\nexport * from './lib/action-icon/action-icon.component';\nexport * from './lib/user-avatar/user-avatar.component';\nexport * from './lib/bookings/catering/item/item.component';\nexport * from './lib/cng-search-bar/cng-search-bar.component';\n","import { Component, OnInit, Input } from '@angular/core';\nimport { ApplicationIcon } from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'action-icon',\n templateUrl: './action-icon.component.html',\n styleUrls: ['./action-icon.component.scss']\n})\nexport class ActionIconComponent implements OnInit {\n /** Icon to display */\n @Input() public icon: ApplicationIcon;\n /** Whether action is being processed */\n @Input() public loading: boolean;\n /** State of the action */\n @Input() public state: 'success' | 'error' | '' = '';\n\n constructor() {}\n\n ngOnInit(): void {}\n}\n","
\n \n
\n \n
\n
\n \n
\n
\n","import {\n Component,\n Input,\n OnChanges,\n SimpleChanges\n} from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { FormControl } from '@angular/forms';\n\nimport {\n ApplicationService,\n CateringCategory,\n CateringItem,\n SettingsService\n} from '@mckinsey-converge/data-common';\nimport { ANIMATION_SHOW_CONTRACT_EXPAND } from '@mckinsey-converge/animations';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { PackageOptionsModalComponent } from '../package-options-modal/package-options-modal.component';\n\nfunction hasSelectionRequirements(category: CateringCategory) {\n return (\n category.must_select < category.items.length ||\n (category.must_select === category.items.length &&\n category.items.find((item: any) => item.items && item.must_select < item.items.length))\n );\n}\n\nfunction getActiveList(category: CateringCategory) {\n const items = category.items || [];\n let list = items.filter((item) => item.amount > 0).map((item) => item.id);\n for (const item of items) {\n if ((item as any).items && (item as any).items.length) {\n list = list.concat(getActiveList(item as any));\n }\n }\n return list;\n}\n\n@Component({\n selector: 'a-catering-menu-item',\n templateUrl: './item.component.html',\n styleUrls: ['./item.component.scss'],\n animations: [ANIMATION_SHOW_CONTRACT_EXPAND]\n})\nexport class CateringMenuItemComponent extends BaseDirective implements OnChanges {\n /** Whether item is a child of another */\n @Input() public subitem: boolean;\n /** Item to display */\n @Input() public item: CateringCategory;\n /** Field for storing items */\n @Input() public field: FormControl;\n /** Current symbol for the selected space */\n @Input() public symbol: string;\n /** Whether item should be disabled if not available anytime */\n @Input() public disabled: boolean;\n /** Whether to show smaller version of component */\n @Input() public compact: boolean;\n /** Whether to show children items */\n public show_children: boolean;\n public initial_state = null;\n\n /** List of contents of the package */\n public get contents(): string {\n return this.item.items\n ? this.item.items.reduce((list, item) => {\n /* istanbul ignore else */\n if (list) {\n list += '\\n\\n';\n }\n return (list += `${item.name}${\n (item as any).items\n ? (item as any).items.reduce(\n (a_list, an_item) =>\n (a_list += `\\n ${an_item.amount ? '✓' : '•'} ${an_item.name} `),\n ''\n )\n : ''\n } ${item.amount ? '✓' : ''}`);\n }, '')\n : '';\n }\n\n constructor(private _service: ApplicationService, private _dialog: MatDialog,\n public settings: SettingsService) {\n super();\n // on the item selection set the revert/close state\n this.initial_state = this.item;\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n /* istanbul ignore else */\n if (changes.field && this.field) {\n const list = this.field.value;\n // check the category\n let item = list.find((an_cat) => an_cat.id === this.item.id);\n if (item) {\n // update the category level amount\n this.item.setAmount(item ? item.amount : 0);\n } else {\n // find a category item\n for (var cat of list) {\n item = cat?.items.find((an_item) => an_item.id === this.item.id);\n if (item) {\n this.item.setAmount(item ? item.amount : 0);\n break;\n }\n }; \n } \n\n // On the confirm catering order modal set the revert/close state\n if (!this.initial_state && this.item.amount) {\n this.initial_state = this.item;\n }\n\n this.subscription(\n 'field_change',\n this.field.valueChanges.subscribe((list) => {\n const item = list.find((an_item) => an_item.id === this.item.id);\n this.item.setAmount(item ? item.amount : 0);\n this.updatePackageSelection();\n })\n );\n }\n }\n\n /**\n * Update the amount of the item in the order\n * @param value New amount\n */\n public updateAmount(value: number) {\n /* istanbul ignore else */\n if (this.field) {\n const list: CateringItem[] = this.field.value;\n const item = list.find((an_item) => an_item.id === this.item.id);\n if (item) {\n this.item.setAmount(value);\n item.setAmount(value);\n // MCK-1550 fix\n const price = this.item.price;\n item.setPrice(price)\n } else {\n const amount = this.item.amount;\n this.item.setAmount(value);\n if (\n this.item.package &&\n amount < value &&\n this.item.items &&\n this.item.items.length &&\n hasSelectionRequirements(this.item)\n ) {\n this.selectPackageOptions().then(\n (confirmed_item) => {\n list.push(new CateringCategory(confirmed_item));\n this.field.setValue(list.filter((an_item) => an_item.amount));\n },\n () => {\n this.item.setAmount(999);\n this.timeout('amount', () => this.item.setAmount(0), 5);\n this._service.notifyWarn(\n 'Package options not selected. Item removed from order'\n );\n }\n );\n } else {\n list.push(new CateringItem(this.item));\n }\n }\n this.field.setValue(list.filter((an_item) => an_item.amount));\n }\n }\n\n public updatePackageSelection() {\n const cart_item = this.field.value.find((item) => item.id === this.item.id);\n if (cart_item) {\n const active_items = getActiveList(cart_item);\n this.timeout(\n 'update_package',\n () => {\n this.item.items.forEach((item) => {\n item.setAmount(active_items.includes(item.id) ? 1 : 0);\n if ((item as any).items) {\n (item as any).items.forEach((item) => {\n item.setAmount(active_items.includes(item.id) ? 1 : 0);\n });\n }\n });\n },\n 5\n );\n }\n }\n\n /** Reselect package options */\n public updatePackageOptions(): void {\n let updatedList: CateringItem[] = [];\n this.selectPackageOptions().then(\n (confirmed_item) => {\n // Update the existing category package\n this.field.value.forEach((category: CateringCategory) => {\n if (category.id === confirmed_item.id) {\n updatedList.push(new CateringCategory(confirmed_item))\n } else {\n updatedList.push(category)\n }\n })\n this.field.setValue(updatedList.filter((an_item) => an_item.amount));\n },\n () => {\n this.item.setAmount(999);\n this.timeout('amount', () => this.item.setAmount(0), 5);\n this._service.notifyWarn(\n 'Package options not selected. Item removed from order'\n );\n }\n );\n }\n\n /**\n * Open modal for user to select package options\n */\n private selectPackageOptions(): Promise {\n return new Promise((resolve, reject) => {\n const ref = this._dialog.open(PackageOptionsModalComponent, {\n maxWidth: '95vw',\n data: {\n item: new CateringCategory(this.item)\n },\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n let done = false;\n ref.componentInstance.event.subscribe((event) => {\n /* istanbul ignore else */\n if (event.reason === 'done') {\n done = true;\n resolve(ref.componentInstance.item);\n this.initial_state = this.item;\n ref.close();\n }\n });\n ref.afterClosed().subscribe(() => {\n /* istanbul ignore else */\n if (!done) {\n if (this.initial_state) {\n resolve(this.initial_state);\n } else {\n reject();\n }\n }\n });\n });\n }\n}\n","\n \n
\n
{{ item.name }}
\n
{{ item.package ? '[Package] ' : '' }}{{ item.description }}
\n
\n
\n {{ item.unit_price / 100 | currency: symbol }}\n
\n \n { item.availableItems.length, plural, =1 { Contains {{ item.availableItems.length }} item } other {\n Contains {{ item.availableItems.length }} items } }\n
\n 0\"\n [matTooltip]=\"contents\"\n >\n {{ item.must_select }}\n \n Selected\n \n
\n 0\"\n (click)=\"updatePackageOptions()\"\n i18n=\"Catering order item options change action\"\n >\n Customise\n \n \n \n
\n {{ item.unit_price / 100 | currency: symbol }}\n
\n \n \n \n \n\n
\n \n
\n","import {\n Component,\n EventEmitter,\n Inject,\n Output\n} from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\n\nimport {\n DialogEvent,\n HashMap\n} from '@mckinsey-converge/base';\nimport {\n CateringCategory,\n CateringItem\n} from '@mckinsey-converge/data-common';\n\nexport interface PackageOptionsModalData {\n item: CateringCategory;\n}\n\nexport function checkItemRequirements(category: CateringCategory): boolean {\n const items = category.items || [];\n return category.must_select >= items.length\n ? items.reduce((valid, item) => valid && checkItemRequirements(item as any), true)\n : items.reduce((amount, item) => amount + (item.amount ? 1 : 0), 0) ===\n category.must_select;\n}\n\nexport function getActiveItems(category: CateringCategory): HashMap {\n let map = {};\n if (category.items) {\n const item = category.items.find(item => item.amount > 0);\n if (item) {\n map[category.id] = item.id;\n }\n category.items.forEach(item => map = { ...map, ...getActiveItems(item as any) });\n }\n return map;\n}\n\n@Component({\n selector: 'a-package-options-modal',\n templateUrl: './package-options-modal.component.html',\n styleUrls: ['./package-options-modal.component.scss']\n})\nexport class PackageOptionsModalComponent {\n /** Emitter for user actions on the modal */\n @Output() public event = new EventEmitter();\n\n /** Item to select options for */\n public get item(): CateringCategory {\n return this._data.item;\n }\n\n /** Whether package requirements have been met */\n public get requirements_met(): boolean {\n return checkItemRequirements(this.item);\n }\n\n public get active_items(): HashMap {\n return getActiveItems(this.item);\n }\n\n constructor(@Inject(MAT_DIALOG_DATA) private _data: PackageOptionsModalData) {\n }\n\n /**\n * Update the list of selected items\n */\n public updateAmount(a_package: CateringCategory, option: CateringItem, state: boolean) {\n if (state) {\n const needed = a_package.must_select;\n const active = a_package.items.filter(an_item => an_item.amount > 0).length;\n if (active >= needed) {\n const item = a_package.items.find(an_item => an_item.amount > 0);\n item.setAmount(0);\n }\n option.setAmount(1);\n } else {\n option.setAmount(0);\n }\n }\n}\n","
\n

Package Options

\n \n
\n\n
\n \n
\n
\n\n
\n \n
\n
\n\n \n \n
\n \n 1\"\n [checked]=\"!!option.amount\"\n (change)=\"updateAmount(package, option, $event.checked)\"\n >\n {{ option.name }}\n \n \n {{ option.name }}\n \n \n = package.items.length || option.must_select\">\n {{ option.name }}\n \n \n
\n
\n
\n
\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\n\n// Interface to define the structure of the configuration object for the search bar\nexport interface SearchBarConfig {\n placeholder?: string;\n totalFoundItem?: number;\n showSrchWarning?: boolean;\n}\n\n@Component({\n selector: 'cng-search-bar',\n templateUrl: './cng-search-bar.component.html',\n styleUrls: ['./cmg-search-bar.component.scss']\n})\nexport class CngSearchBarComponent implements OnChanges {\n // Input property to accept configuration for the search bar\n @Input() config: SearchBarConfig = {\n placeholder: 'Search ...',\n totalFoundItem: 0,\n showSrchWarning: false\n };\n\n // Output event emitter to emit search strings to parent components\n @Output() search = new EventEmitter();\n\n // Local variable to store the search string entered by the user\n searchStr: string = '';\n\n // Lifecycle hook that is called when any data-bound property of a directive changes\n ngOnChanges(changes: SimpleChanges): void {\n // Check if the config property has changed\n if (changes.config) {\n const configChanges = changes.config.currentValue;\n // Update the config with new values or fallback to defaults\n this.config = {\n placeholder: configChanges.placeholder || 'Search ...',\n totalFoundItem: configChanges.totalFoundItem || 0,\n showSrchWarning: configChanges.showSrchWarning || false\n };\n }\n }\n\n // Method to handle the search action\n onSearch(value: string): void {\n // Emit the search string if it's not empty\n if (value) {\n this.search.emit(value);\n }\n }\n\n // Method to clear the search input and reset related configurations\n clearSearch(box: HTMLInputElement): void {\n this.searchStr = '';\n box.value = '';\n this.config.showSrchWarning = false;\n this.config.totalFoundItem = 0;\n this.search.emit('');\n }\n\n // Method to reset the search-related warnings and item count\n resetSearch(): void {\n this.config.showSrchWarning = false;\n this.config.totalFoundItem = 0;\n }\n}\n","
\n \n \n
{{ config.totalFoundItem }}
\n \n \n \n
\n \n No search found!\n
\n
\n ","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\n\n@Directive({\n selector: '[hover-class]'\n})\nexport class HoverClassDirective {\n @Input('hover-class') hoverClass: string;\n\n constructor(private elementRef: ElementRef) {}\n\n @HostListener('mouseenter') onMouseEnter() {\n this.update('add');\n }\n\n @HostListener('mouseleave') onMouseLeave() {\n this.update('remove');\n }\n\n @HostListener('blur') onBlur() {\n this.update('remove');\n }\n\n private update(action: string): void {\n this.hoverClass.split(' ').forEach(item => this.elementRef.nativeElement.classList[action](item));\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'an-action-field',\n templateUrl: './action-field.component.html',\n styleUrls: ['./action-field.component.scss']\n})\nexport class ActionFieldComponent extends BaseDirective {\n /** Name of the field */\n @Input() public name: string;\n /** Value to display on the field */\n @Input() public placeholder: string;\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Emitter for user interaction events */\n @Output('onAction') public on_action = new EventEmitter();\n /** Whether to show tooltip */\n public show_tooltip = false;\n\n /**\n * Emit that the user has performed an action on the field\n */\n public performAction() {\n this.show_tooltip = !this.show_tooltip;\n this.on_action.emit();\n }\n}\n","\n
{{ placeholder }}
\n
\n \n
\n\n","import { Component, forwardRef, Input } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'a-counter',\n templateUrl: './counter.component.html',\n styleUrls: ['./counter.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n /* istanbul ignore next */\n useExisting: forwardRef(() => CounterComponent),\n multi: true,\n },\n ],\n})\nexport class CounterComponent implements ControlValueAccessor {\n /** Maximum amount for the counter */\n @Input() public max: number = 10;\n /** Minimum amount for the counter */\n @Input() public min: number = 0;\n\n @Input() public useInput = false;\n\n /** Current value of the counter */\n public value: number;\n public previous_value: number = 0;\n /** Whether shift key is being held by the user */\n public shift_key: boolean;\n /** Whether control key is being held by the user */\n public ctrl_key: boolean;\n\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n /**\n * Add the `step` to the current value\n */\n public add() {\n if (!this.value) {\n this.value = this.min || 0;\n }\n const step = this.ctrl_key ? 100 : this.shift_key ? 10 : 1;\n this.value += step;\n if (this.value > this.max) {\n this.value = this.max || 10;\n }\n this.setValue(this.value);\n }\n\n /** Remove the `step` from the current value */\n public remove() {\n if (!this.value) {\n this.value = this.min || 0;\n }\n const step = this.ctrl_key ? 100 : this.shift_key ? 10 : 1;\n this.value -= step;\n if (this.value < this.min) {\n this.value = this.min || 0;\n }\n this.setValue(this.value);\n }\n\n public handleTimeout = null;\n\n public onInputChange(new_value: string) {\n if (this.handleTimeout) {\n clearTimeout(this.handleTimeout);\n this.handleTimeout = null;\n }\n this.handleTimeout = setTimeout(() => this.changeInput(new_value), 500);\n }\n\n public changeInput(new_value: string) {\n let value = Number(new_value);\n if (isNaN(value)) {\n value = this.previous_value;\n }\n if (value < this.min) {\n value = this.min || 0;\n }\n if (value > this.max) {\n value = this.max || 10;\n }\n this.setValue(value);\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: number): void {\n this.previous_value = new_value;\n this.value = new_value;\n /* istanbul ignore else */\n if (this._onChange) {\n this._onChange(new_value);\n }\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: number) {\n this.value = value;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n}\n","\n \n \n
\n {{value || '0'}}\n
\n \n\n","import { Component, OnInit, forwardRef, Input, ViewChild, Output, EventEmitter } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport { MatMenuTrigger } from '@angular/material/menu';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n@Component({\n selector: 'a-date-field',\n templateUrl: './date-field.component.html',\n styleUrls: ['./date-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateFieldComponent),\n multi: true\n }\n ]\n})\nexport class DateFieldComponent extends BaseDirective implements OnInit, ControlValueAccessor {\n /** Earliest date available the user is allowed to pick */\n @Input('from') public _from: number = DateNow(new Date()).ms;\n /** Latest date available the user is allowed to pick */\n @Input('to') public _to: number;\n /** Position of the tooltip */\n @Input() public position: 'right' | 'left' = 'right';\n /** Offset of the tooltip */\n @Input() public offset: 'top' | 'bottom' = 'bottom';\n /** Whether form control is disabled */\n @Input() public disabled: boolean;\n /** Whether form control is invalid, touched and contains errors */\n @Input() public error?: boolean;\n /** Optional event emitter for changes */\n @Output() public onChange = new EventEmitter();\n /** Whether to show the calendar tooltip */\n public show_tooltip: boolean;\n /** Currently selected date */\n public date: number;\n\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n @ViewChild(MatMenuTrigger, { static: true }) private _trigger: MatMenuTrigger;\n\n /** First allowed date on the calendar */\n public get from(): number {\n return this._from || DateNow(new Date()).startOfValue('day').ms;\n }\n /** Current date value */\n public get until(): number {\n return this._to || DateNow(new Date()).endOfValue('day').addValue({ years: 1 }).ms;\n }\n /** Display value for the current date */\n public get date_string(): string {\n // R--- Needs TZ aware inputs\n const date = new DateTZ({date: this.date})\n return date.formatDate('dd MMM yyyy');\n }\n\n /** Whether date picker is open */\n public get is_open(): boolean {\n return this._trigger.menuOpen;\n }\n\n public ngOnInit() {\n this.date = DateNow(new Date()).ms;\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: number) {\n // Keep hours and minutes of the old date\n const old_date = new DateTZ({date: this.date });\n const new_d = new DateTZ({date: new_value})\n let new_date = new_d\n .setValue({ hour: old_date.dateHour, minute: old_date.minutes })\n .ms;\n // Check that new date is before from\n if (new_date < this.from) {\n new_date = this.from;\n }\n this.date = new_date;\n if (this._onChange) {\n this._onChange(new_date);\n this.onChange.emit(new_date);\n }\n this.show_tooltip = false;\n }\n\n /* istanbul ignore next */\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: number) {\n this.date = value;\n this.show_tooltip = false;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /** Set the state of the tooltip to closed after delay */\n public closeDatePicker() {\n this._trigger.closeMenu();\n }\n\n /** Set the state of the tooltip to closed after delay */\n public openDatePicker() {\n this._trigger.openMenu();\n }\n}\n","\n
{{ date_string }}
\n
\n \n
\n\n\n
\n \n
\n
\n","import {\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\n\nimport {\n humaniseDuration,\n Identity,\n timeFormatString\n} from '@mckinsey-converge/base';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\n\n@Component({\n selector: 'a-duration-field',\n templateUrl: './duration-field.component.html',\n styleUrls: ['./duration-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DurationFieldComponent),\n multi: true\n }\n ]\n})\nexport class DurationFieldComponent extends BaseDirective\n implements OnInit, OnChanges, ControlValueAccessor {\n /** Maximum duration option available */\n @Input() public max: number = 240;\n /** Minimum duration option available */\n @Input() public min: number = 15;\n /** Step value between options */\n @Input() public step: number = 15;\n /** Reference time for displaying next to durations */\n @Input() public time: number;\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Special case prepopulation i.e. out of step options */\n @Input() public specialPreprops: Array = [];\n /** Whether form all_day is enabled. */\n @Input() public all_day: boolean = false;\n\n public duration: number = 60;\n /** List of available duration options */\n public duration_options: Identity[];\n\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n public ngOnInit(): void {\n this.duration_options = this.generateDurationOptions(this.max, this.min, this.step, this.all_day);\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n /* istanbul ignore else */\n if (changes.max || changes.min || changes.step || changes.time || changes.all_day) {\n this.duration_options = this.generateDurationOptions(this.max, this.min, this.step, this.all_day);\n }\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: number): void {\n this.duration = new_value;\n /* istanbul ignore else */\n if (this._onChange) {\n this._onChange(+new_value);\n }\n }\n\n /* istanbul ignore next */\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: number) {\n this.duration = value;\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n\n private generateDurationOptions(max: number, min: number, step: number, all_day: boolean = false): Identity[] {\n const blocks: Identity[] = [];\n let time = min;\n // R--- Change input to dateTz\n let date = this.time ? new DateTZ({date: this.time}) : null;\n\n // Add special case for 10min duration/prepropulation\n for (const option of this.specialPreprops) {\n blocks.push({\n id: option,\n name: date\n ? `${date.addValue({ minutes: option }).formatDate(timeFormatString()).toLocaleLowerCase()} (${humaniseDuration(option)})`\n : `${humaniseDuration(option)}`\n });\n }\n\n\n while (time <= max) {\n blocks.push({\n id: time,\n name: date\n ? `${date.addValue({ minutes: time }).formatDate(timeFormatString()).toLocaleLowerCase()} (${humaniseDuration(time)})`\n : `${humaniseDuration(time)}`\n });\n time += step;\n }\n if (all_day) {\n blocks.push({ id: 24 * 60, name: 'All Day' }); \n }\n blocks.push({ id: 7 * 24 * 60, name: '1 week' });\n return blocks;\n }\n}\n","
\n \n \n \n {{ option.name }}\n \n \n \n
\n","export * from './action-field/action-field.component'\nexport * from './counter/counter.component'\nexport * from './date-field/date-field.component'\nexport * from './duration-field/duration-field.component'\nexport * from './time-field/time-field.component'\nexport * from './user-search-field/user-search-field.component'\nexport * from './user-list-field/user-list-field.component'\n","import {\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\nimport { MatSelect } from '@angular/material/select';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n Identity,\n timeFormatString\n} from '@mckinsey-converge/base';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n@Component({\n selector: 'a-time-field',\n templateUrl: './time-field.component.html',\n styleUrls: ['./time-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TimeFieldComponent),\n multi: true\n }\n ]\n})\nexport class TimeFieldComponent extends BaseDirective implements OnInit, OnChanges, ControlValueAccessor {\n /** Time step between each allowed time option */\n @Input() public step: number = 15;\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Whether past times are allowed */\n @Input() public no_past_times: boolean = true;\n /** String representing the currently set time */\n public date: number = DateNow(new Date()).ms;\n /** String representing the currently set time */\n public time: string = DateNow(new Date()).formatDate('HH:mm');\n /** Available time blocks for the selected date */\n public _time_options: Identity[];\n /** Whether select field should be shown */\n public show_select: boolean;\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n /** Select field for selecting the time */\n @ViewChild('select') private select_field: MatSelect;\n\n // R--- This is the form input that needs to be TZ active.\n public ngOnInit(): void {\n this.show_select = true;\n this._time_options = this.generateAvailableTimes(this.date, !this.no_past_times, this.step);\n this.timeout('hide', () => this.show_select = false);\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.no_past_times || changes.step) {\n this._time_options = this.generateAvailableTimes(this.date, !this.no_past_times, this.step);\n }\n }\n\n public get date_(){\n return new DateTZ({date: this.date})\n }\n\n /** Available time blocks for the selected date */\n public get time_options() {\n const time = (this.time || '00:00').split(':');\n const date = this.date_.setValue({ hour: +time[0], minute: +time[1] });\n if (date.minutes % 15 !== 0 && !this._time_options.find(time => time.id === date.formatDate('HH:mm'))) {\n this._time_options.push({\n name: `${date.formatDate(timeFormatString())}`,\n id: date.formatDate('HH:mm')\n });\n this._time_options.sort((a, b) => `${a.id}`.localeCompare(`${b.id}`));\n }\n return this._time_options;\n }\n\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: string): void {\n this.time = new_value;\n if (this._onChange) {\n const time = (this.time || '00:00').split(':');\n const date = this.date_.setValue({ hour: +time[0], minute: +time[1] }).startOfValue('minute');\n this._onChange(date.ms);\n }\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: number) {\n if (!value) {\n return;\n }\n this.date = value;\n let date = this.date_.startOfValue('minute');\n date = date.setValue({ minute: Math.ceil(date.minutes / 5) * 5 });\n this.time = date.formatDate('HH:mm');\n this._time_options = this.generateAvailableTimes(this.date, !this.no_past_times, this.step);\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n\n /**\n * Show select field for time options\n */\n public showSelect() {\n this.show_select = true;\n this.timeout('on_shown', () => {\n if (this.select_field) {\n this.select_field.focus();\n this.select_field.open();\n this.subscription('listen_close', this.select_field.openedChange.subscribe((state) => {\n if (!state) {\n this.show_select = false;\n }\n }));\n }\n });\n }\n\n /**\n * Generate a list of time options for the given date\n * @param datestamp Date to generate options for\n * @param show_past Whether past times should be options\n */\n private generateAvailableTimes(datestamp: number, show_past: boolean, step: number = 15): Identity[] {\n let date = new DateTZ({date: datestamp});\n const blocks = [];\n if (show_past || date.isAfterDate(DateNow(new Date()))) {\n date = date.startOfValue('day');\n } else if (date.isAfterDate(DateNow(new Date()))) {\n date = DateNow(new Date());\n }\n date = date.setValue({ minute: Math.ceil(date.minutes / step) * step });\n const end = date.endOfValue('day');\n // Add options for the rest of the day\n while (date.isBeforeDate(end)) {\n blocks.push({\n name: `${date.formatDate(timeFormatString()).toLocaleLowerCase()}`,\n id: date.formatDate('HH:mm')\n });\n date = date.addValue({ minutes: step });\n }\n return blocks;\n }\n}\n","\n
\n \n
\n
\n \n
\n\n\n \n \n {{ option.name }}\n \n \n\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n forwardRef,\n Input,\n OnInit,\n Output,\n ViewChild\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\nimport {\n Observable,\n of,\n Subject\n} from 'rxjs';\nimport {\n catchError,\n debounceTime,\n distinctUntilChanged,\n tap,\n map,\n switchMap,\n finalize\n} from 'rxjs/operators';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n ApplicationService,\n User,\n UsersService\n} from '@mckinsey-converge/data-common';\nimport {\n csvToJson,\n downloadFile,\n filterList,\n matchToHighlight\n} from '@mckinsey-converge/base';\nimport { MatAutocompleteTrigger } from '@angular/material/autocomplete';\n\n@Component({\n selector: 'a-user-list-field',\n templateUrl: './user-list-field.component.html',\n styleUrls: ['./user-list-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UserListFieldComponent),\n multi: true\n }\n ]\n})\nexport class UserListFieldComponent extends BaseDirective implements OnInit, ControlValueAccessor {\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Number of characters needed before a search will start */\n @Input() public limit: number = 3;\n /** Emitter for action to make a new user */\n @Output('newUser') public new_user = new EventEmitter();\n\n /** User list to display */\n public user_list: User[];\n /** List of active selected users on the list */\n public active_list: User[];\n /** Whether user list is loading */\n public loading: boolean;\n /** String */\n public search_str: string;\n /** List of users from an API search */\n public search_results$: Observable;\n /** Subject holding the value of the search */\n public search$ = new Subject();\n\n /** Form control on change handler */\n private _onChange: (_: User[]) => void;\n /** Form control on touch handler */\n private _onTouch: (_: User[]) => void;\n\n @ViewChild(MatAutocompleteTrigger, {read: MatAutocompleteTrigger}) inputAutoComplete: MatAutocompleteTrigger;\n\n constructor(private _service: ApplicationService, private _users: UsersService, private cdRef: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit() {\n // Listen for input changes\n this.search_results$ = this.search$.pipe(\n debounceTime(100),\n distinctUntilChanged(),\n switchMap((query) => {\n this.loading = true;\n return query.length >= this.limit\n ? this._users.query({\n q: query.slice(0, Math.max(this.limit, 3)),\n cache: 60 * 1000\n })\n : Promise.resolve([]);\n }),\n catchError((_) => of([])),\n map((list: User[]) => {\n this.loading = false;\n return filterList(this.search_str, list, ['name', 'email']);\n })\n );\n // Process API results\n this.subscription(\n 'search_results',\n this.search_results$.subscribe((list) => {\n this.user_list = list;\n this.user_list.forEach((i: any) => {\n i.match_name = matchToHighlight(i.match_name);\n i.match_email = matchToHighlight(i.match_email);\n return i;\n });\n this.user_list.length ? this.inputAutoComplete.openPanel() : this.inputAutoComplete.closePanel();\n })\n );\n }\n\n /**\n * Add user to the user list\n * @param user\n */\n public addUser(user: User) {\n /* istanbul ignore else */\n if (!this.active_list) {\n this.active_list = [];\n }\n const index = this.active_list.findIndex((a_user) => a_user.id === user.id);\n /* istanbul ignore else */\n if (index < 0) {\n this.active_list = [...this.active_list, user];\n }\n this.setValue(this.active_list);\n this.search_str = '';\n }\n\n /**\n * Remove user from the user list\n * @param user\n */\n public removeUser(user: User) {\n this.active_list = this.active_list.filter((a_user) => a_user.id !== user.id);\n this.setValue(this.active_list);\n }\n\n /**\n * Load CSV file and populate the user list with the contents\n * @param event File input field event\n */\n public addUsersFromFile(event) {\n /* istanbul ignore else */\n if (event.target) {\n const file = event.target.files[0];\n /* istanbul ignore else */\n if (file) {\n const reader = new FileReader();\n reader.readAsText(file, 'UTF-8');\n reader.addEventListener('load', (evt) => {\n this.processCsvData((evt.srcElement as any).result);\n event.target.value = '';\n this.cdRef.detectChanges();\n });\n reader.addEventListener('error', (_) =>\n this._service.notifyError('Error reading file.')\n );\n }\n }\n }\n\n /**\n * Process raw CSV data and save user data to attendee list\n * @param data CSV data\n */\n private processCsvData(data: string) {\n const list = csvToJson(data) || [];\n const id = this._users.current.staff_code; \n list.forEach((el) => {\n const firstName = el.first_name.split(' ').map((word: string) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(' ');\n const lastName = el.last_name.split(' ').map((word: string) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(' ');\n\n el.name = el.name || `${firstName} ${lastName}`;\n const display = (el.name || `${Math.floor(Math.random() * 9999_9999)}`)\n .split(' ')\n .join('_')\n .toLowerCase();\n /* istanbul ignore else */\n if (!el.email) {\n el.email = `${display}+${id}@guest.mckinsey.com`;\n }\n el.type = 'external';\n el.external = !el.email.endsWith(\"@mckinsey.com\") && !el.email.endsWith(\"@external.mckinsey.com\");\n this.addUser(new User(el));\n });\n }\n\n /* istanbul ignore next */\n /** Download template CSV file */\n public downloadCSVTemplate() {\n const template = `Organisation Name,First Name,Last Name,Email,Phone\\nFake Org,John,Smith,john.smith@example.com,01234567898`;\n downloadFile('template.csv', template);\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: User[]): void {\n this.active_list = new_value;\n if (this._onChange) {\n this._onChange(new_value);\n }\n }\n\n /* istanbul ignore next */\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: User[]) {\n this.active_list = value;\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: User[]) => void): void {\n this._onChange = fn;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: User[]) => void): void {\n this._onTouch = fn;\n }\n}\n","
\n \n \n
\n \n
\n
\n \n
\n
\n \n \n
{{ option.name }}
\n
{{ option.email }}
\n
\n
\n
\n \n \n \n
\n
\n \n \n {{ user.name }}\n \n \n \n
\n
\n\n
No attendees
\n
\n","import {\n Component,\n forwardRef,\n Input,\n OnInit,\n ViewChild\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\nimport {\n Observable,\n of,\n Subject\n} from 'rxjs';\nimport {\n catchError,\n debounceTime,\n distinctUntilChanged,\n map,\n switchMap\n} from 'rxjs/operators';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n User,\n UsersService\n} from '@mckinsey-converge/data-common';\nimport {\n filterList,\n matchToHighlight\n} from '@mckinsey-converge/base';\nimport { MatAutocompleteTrigger } from '@angular/material/autocomplete';\n\n@Component({\n selector: 'a-user-search-field',\n templateUrl: './user-search-field.component.html',\n styleUrls: ['./user-search-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UserSearchFieldComponent),\n multi: true\n }\n ]\n})\nexport class UserSearchFieldComponent extends BaseDirective implements OnInit, ControlValueAccessor {\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Limit available options to these */\n @Input() public options: User[];\n /** Currently selected user */\n public active_user: User;\n /** User list to display */\n public user_list: User[];\n /** Whether user list is loading */\n public loading: boolean;\n /** Current display value of the search input field */\n public search_str: string;\n /** List of users from an API search */\n public search_results$: Observable;\n /** Subject holding the value of the search */\n public search$ = new Subject();\n\n /** Form control on change handler */\n private _onChange: (_: User) => void;\n /** Form control on touch handler */\n private _onTouch: (_: User) => void;\n @ViewChild(MatAutocompleteTrigger, {read: MatAutocompleteTrigger}) inputAutoComplete: MatAutocompleteTrigger;\n \n constructor(private _users: UsersService) {\n super();\n }\n\n public ngOnInit(): void {\n\n // Listen for input changes\n this.search_results$ = this.search$.pipe(\n debounceTime(400),\n distinctUntilChanged(),\n switchMap(query => {\n this.loading = true;\n return this.options && this.options.length > 0\n ? Promise.resolve(this.options)\n : query.length >= 3\n ? (this._users.query({ q: query, cache: 60 * 1000 }) as Promise)\n : Promise.resolve([]);\n }),\n catchError((err) => of([])),\n map((list: User[]) => {\n this.loading = false;\n return filterList(this.search_str, list, ['name', 'email']);\n })\n );\n // Process API results\n this.subscription('search_results', this.search_results$.subscribe(list => {\n this.user_list = list;\n this.user_list.forEach((i: any) => {\n i.match_name = matchToHighlight(i.match_name);\n i.match_email = matchToHighlight(i.match_email);\n return i;\n });\n this.user_list.length ? this.inputAutoComplete.openPanel() : this.inputAutoComplete.closePanel();\n }));\n }\n\n /**\n * Reset the search string back to the name of the active user\n */\n public resetSearchString() {\n if (this.active_user) {\n this.search_str = this.active_user.name;\n }\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: User): void {\n this.active_user = new_value;\n if (this._onChange) {\n this._onChange(new_value);\n }\n this.resetSearchString();\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: User) {\n this.active_user = value;\n this.resetSearchString();\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: User) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: User) => void): void {\n this._onTouch = fn;\n }\n}\n","
\n \n \n
\n \n
\n
\n \n
\n
\n \n \n
{{ option.name }}
\n
{{ option.email }}
\n
\n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'feedback',\n templateUrl: './feedback.component.html',\n styleUrls: ['./feedback.component.scss'],\n})\nexport class FeedbackComponent extends BaseDirective implements OnInit {\n /** Name of the currently active page */\n public current_page: string;\n\n constructor(private _router: Router) {\n super();\n }\n\n public ngOnInit(): void {\n this.timeout('Getting Title', () => this.updateRoute(document.title), 1000);\n this._router.events.subscribe((event: NavigationEnd) => {\n /* istanbul ignore else */\n if (event instanceof NavigationEnd) {\n this.timeout('Getting Title', () => this.updateRoute(document.title));\n }\n });\n }\n\n public updateRoute(location) {\n location = location.substr(0, location.indexOf(' |'));\n this.current_page = location;\n }\n}\n","\n
\n Feedback\n \n \n \n
\n
\n","import {\n Component,\n Input\n} from '@angular/core';\nimport { ApplicationIcon } from '@mckinsey-converge/data-common';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'app-icon',\n templateUrl: './icon.component.html',\n styleUrls: ['./icon.component.scss']\n})\nexport class IconComponent extends BaseDirective {\n @Input() public icon: ApplicationIcon;\n}\n","
\n {{ icon.content }}\n \n
\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n ActionFieldComponent,\n CounterComponent,\n DateFieldComponent,\n DurationFieldComponent,\n TimeFieldComponent,\n UserListFieldComponent,\n UserSearchFieldComponent\n} from './custom-fields';\nimport { IconComponent } from './icon/icon.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { ACA_PIPES_MODULE } from '@acaprojects/ngx-pipes';\nimport {\n FormsModule,\n ReactiveFormsModule\n} from '@angular/forms';\nimport { FeedbackComponent } from './feedback/feedback.component';\nimport { ActionIconComponent } from './action-icon/action-icon.component';\nimport { PopoutMenuComponent } from './popout-menu/popout-menu.component';\nimport { SearchbarComponent } from './searchbar/searchbar.component';\nimport { UserAvatarComponent } from './user-avatar/user-avatar.component';\nimport { CateringMenuItemComponent } from './bookings/catering/item/item.component';\nimport { PackageOptionsModalComponent } from './bookings/catering/package-options-modal/package-options-modal.component';\nimport { BaseModule } from '@mckinsey-converge/base';\nimport { UiModule } from '@mckinsey-converge/ui';\nimport { CngSearchBarComponent } from './cng-search-bar/cng-search-bar.component';\nimport { HoverClassDirective } from './cng-search-bar/hover-class.directive';\n\nconst DECLARATIONS = [\n ActionFieldComponent,\n IconComponent,\n CounterComponent,\n DateFieldComponent,\n DurationFieldComponent,\n TimeFieldComponent,\n UserSearchFieldComponent,\n UserListFieldComponent,\n FeedbackComponent,\n ActionIconComponent,\n PopoutMenuComponent,\n SearchbarComponent,\n UserAvatarComponent,\n CateringMenuItemComponent,\n PackageOptionsModalComponent,\n CngSearchBarComponent,\n HoverClassDirective\n];\n\nconst MATERIAL_MODULES: any[] = [\n MatButtonModule,\n MatSnackBarModule,\n MatDialogModule,\n MatFormFieldModule,\n MatInputModule,\n MatProgressSpinnerModule,\n MatProgressBarModule,\n MatAutocompleteModule,\n MatSelectModule,\n MatChipsModule,\n MatRippleModule,\n MatMenuModule,\n MatCheckboxModule,\n MatTooltipModule,\n MatRadioModule,\n MatTabsModule,\n MatSlideToggleModule\n];\n\n@NgModule({\n imports: [\n CommonModule,\n ACA_PIPES_MODULE,\n FormsModule,\n ReactiveFormsModule,\n ...MATERIAL_MODULES,\n BaseModule,\n UiModule\n ],\n declarations: [\n ...DECLARATIONS\n ],\n exports: [\n ACA_PIPES_MODULE,\n ...DECLARATIONS,\n ...MATERIAL_MODULES,\n BaseModule,\n ]\n})\nexport class LegacyUiModule {\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output\n} from '@angular/core';\nimport { ApplicationIcon } from '@mckinsey-converge/data-common';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\nexport interface PopoutAction extends ApplicationIcon {\n /** ID of the action */\n id: string;\n}\n\n@Component({\n selector: 'a-popout-menu',\n templateUrl: './popout-menu.component.html',\n styleUrls: ['./popout-menu.component.scss']\n})\nexport class PopoutMenuComponent extends BaseDirective {\n /** List of available actions */\n @Input() public actions: PopoutAction[] = [];\n /** Emitter for user actions */\n @Output() public action = new EventEmitter();\n /** Whether actions should show */\n public show: boolean;\n\n public close() {\n this.timeout('close', () => {\n this.show = false;\n });\n }\n}\n","\n \n\n\n","import { Component, OnInit, Input, EventEmitter, Output, ViewChild, ElementRef, SimpleChanges, OnChanges } from '@angular/core';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'a-searchbar',\n templateUrl: './searchbar.component.html',\n styleUrls: ['./searchbar.component.scss']\n})\nexport class SearchbarComponent extends BaseDirective implements OnChanges {\n /** Current contents of the searchbar input */\n @Input('value') public value: string;\n /** Current contents of the searchbar input */\n @Input() public placeholder: string;\n /** Whether external changes are being processed */\n @Input() public loading: boolean;\n /** Whether external changes are being processed */\n @Input() public autofocus: boolean;\n /** Emitter for changes to the searchbar value */\n @Output() public valueChange = new EventEmitter();\n /** Input field reference */\n @ViewChild('input', { static: true }) private input_field: ElementRef;\n\n public ngOnChanges(changes: SimpleChanges): void {\n /* istanbul ignore else */\n if (changes.autofocus && this.autofocus) {\n this.focusField()\n }\n }\n\n public focusField() {\n /* istanbul ignore else */\n if (this.input_field && this.input_field.nativeElement) {\n this.input_field.nativeElement.focus();\n }\n }\n}\n","
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n","import { Component, Input } from '@angular/core';\nimport { User } from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'a-user-avatar',\n templateUrl: './user-avatar.component.html',\n styleUrls: ['./user-avatar.component.scss']\n})\nexport class UserAvatarComponent {\n /** User to display avatar for */\n @Input() public user: User;\n\n public get initials(): string {\n if (!this.user) {\n return 'NA';\n }\n const parts = this.user.name.split(' ');\n return parts.length > 1\n ? `${parts[0][0]}${parts[parts.length - 1][0]}`\n : this.user.name.slice(0, 2);\n }\n}\n","
\n
{{ initials }}
\n
\n\n \n\n","export * from './lib/loading.actions'\nexport * from './lib/loading.model'\nexport * from './lib/loading.effects'\nexport * from './lib/loading.selectors'\nexport * from '../testing'\n","import {\n createAction,\n createSelector,\n on,\n On,\n props\n} from '@ngrx/store';\nimport {\n LoadingModel,\n wrapLoading\n} from './loading.model';\nimport {\n selectIsLoading,\n selectOptionalError,\n selectOptionalSuccess,\n selectSuccess\n} from './loading.selectors';\nimport { MemoizedSelector } from '@ngrx/store/src/selector';\nimport {\n ActionCreator,\n NotAllowedCheck,\n TypedAction\n} from '@ngrx/store/src/models';\nimport { HashMap } from '@mckinsey-converge/base';\n\nexport interface Payload {\n payload: T\n}\n\nexport type LoadingAction = T & TypedAction\nexport type LoadingActionCreator = T extends null | undefined ?\n ActionCreator TypedAction>\n : ActionCreator) => LoadingAction>\n\ntype ClearAction = ActionCreator TypedAction>\n\ninterface Selectors {\n success: MemoizedSelector\n optionalSuccess: MemoizedSelector\n error: MemoizedSelector\n loading: MemoizedSelector\n model: (TState) => LoadingModel\n}\n\nexport interface LoadingActionObject {\n request: LoadingActionCreator\n success: LoadingActionCreator>\n error: LoadingActionCreator>\n clear: ClearAction,\n ons: On[],\n selectors: Selectors\n}\n\n/**\n * Creates a {@link LoadingActionObject} that contains a set of ActionCreators\n * for request, success, error, loading, and clear data. Also, it contains\n * the necessary On reducers and selectors in order to properly connect them in\n * a standardized way to data in the application.\n *\n * `TState` is the type of data on your reducer, not global store.\n * `TRequest` is an object type to use in request methods.\n * `TSuccess` is the object type of the T parameter on `LoadingModel`.\n *\n * This assumes you have state represented by:\n * ```typescript\n * interface SomeState {\n * stateKey: LoadingModel\n * }\n * ```\n *\n * To dispatch an action:\n * ```typescript\n *\n * // request parameters depend on the object type used as second type parameter\n * // in createLoadingAction\n * this.store.dispatch(someLoadingAction.request())\n *\n * // action created with createLoadingAction\n * this.store.dispatch(someLoadingAction.request({\n * name: 'Andrew G',\n * age: 24\n * }))\n *\n * ```\n *\n * The generated selectors only select data from its fractured state, not the global\n * store. In order to use them, make sure you {@link select} the global state\n * before using them:\n *\n * ```typescript\n *\n * this.store.pipe(\n * select(selectSomeState),\n * select(someLoadingAction.selectors.success)\n * ).subscribe(next => {\n *\n * })\n *\n * ```\n *\n * @param actionPrefix - Prefixes actions to uniquely identify them.\n * @param stateKey - The field within the reducer state to set data on.\n */\nexport const createLoadingAction = (\n actionPrefix: string,\n stateKey: keyof TState\n): LoadingActionObject => {\n const buildAction = (postfix: string) => `[${actionPrefix}] ${postfix}`;\n // @ts-ignore\n const request = createAction(buildAction('request'), props());\n const success = createAction(buildAction('success'), props>());\n const error = createAction(buildAction('error'), props>());\n const clear = createAction(buildAction('clear'));\n const ons: On[] = [\n on(request, (state: TState & HashMap>, action: LoadingAction) =>\n ({\n ...state,\n [stateKey]: wrapLoading(state[stateKey]).loading()\n })),\n on(success, (state: TState & HashMap>, action: LoadingAction>) => ({\n ...state,\n [stateKey]: LoadingModel.success(action.payload)\n })),\n // some reason specifying state like in success and request does not work.\n on(error, (state: any, action: LoadingAction>) => ({\n ...state,\n [stateKey]: LoadingModel.error(action.payload)\n })),\n on(clear, () => ({\n ...this.state,\n [stateKey]: LoadingModel.empty()\n }))\n ];\n const selectData = (state: TState) => {\n if (!state) {\n console.warn('[LoadingActions] State is empty for key', stateKey);\n }\n return wrapLoading(state?.[stateKey] as unknown as LoadingModel);\n };\n const selSuccess = createSelector, TSuccess>(\n selectData,\n selectSuccess\n );\n const selOptionalSuccess = createSelector(\n selectData,\n selectOptionalSuccess\n );\n const selError = createSelector(\n selectData,\n selectOptionalError\n );\n const selLoading = createSelector(\n selectData,\n selectIsLoading\n );\n return {\n request,\n success,\n error,\n clear,\n ons,\n selectors: {\n success: selSuccess,\n optionalSuccess: selOptionalSuccess,\n error: selError,\n loading: selLoading,\n model: selectData\n }\n };\n};\n","import {\n Actions,\n ofType\n} from '@ngrx/effects';\n\nimport { \n LoadingAction,\n LoadingActionObject\n} from '../../../loading/src/lib/loading.actions';\n\nimport {\n catchError,\n flatMap,\n map\n} from 'rxjs/operators';\nimport {\n Observable,\n of\n} from 'rxjs';\nimport { TypedAction } from '@ngrx/store/src/models';\n\n/**\n * This creates an effect to use in Effects classes. This coordinates a simple\n * success and error payload effect.\n * @param actions - The actions object\n * @param actionObject - The created createLoadingAction object.\n * @param caller - Define what API method or asynchronous operation is needed to\n * run this. Return TSuccess.\n */\nexport const createLoadingEffect = (\n actions: Actions, actionObject: LoadingActionObject,\n caller: (action: LoadingAction) => Promise): Observable> => actions.pipe(\n ofType(actionObject.request),\n flatMap((action) => caller(action as LoadingAction)),\n map((response: TSuccess) => actionObject.success({ payload: response })),\n catchError(err => {\n return of(actionObject.error({ payload: err }));\n })\n);\n","/* eslint-disable no-underscore-dangle,no-useless-constructor */\n/**\n * Wraps around the typical data objects we write for success, error, loading, and empty state. This convenience\n * wrapper consolidates all of that logic into a handy wrapper.\n */\nexport class LoadingModel {\n static empty = () => new LoadingModel(false, false, false, undefined);\n\n static success = (success?: T): LoadingModel =>\n new LoadingModel(false, false, true, success);\n\n static error = (error?: Error, optionalSuccess?: T): LoadingModel =>\n new LoadingModel(false, true, false, optionalSuccess, error);\n\n /**\n * Mutates the model with a success state, preserving other state fields.\n * @param success - override success state.\n */\n mutate = (\n success: T2 | null) => new LoadingModel(\n this.isLoading,\n this.hasError,\n !!success,\n !success ? undefined : success\n );\n\n loading = (success: T | null = this.success) =>\n new LoadingModel(\n true,\n false,\n !!success && this.hasSuccess,\n !success ? undefined : success\n );\n\n public get success(): T {\n return this._success as T;\n }\n\n public get optionalSuccess(): T | undefined {\n return this._success;\n }\n\n constructor(\n public isLoading: boolean,\n private hasError: boolean,\n private hasSuccess: boolean,\n private _success?: T,\n public error?: Error\n ) {\n }\n\n isEmpty = () => !this.isSuccess() && !this.isError();\n\n hasLoaded = () => !this.isEmpty() && !this.isLoading;\n\n isSuccess = () => this.hasSuccess;\n\n isError = () => this.hasError;\n\n shouldLoad = () => !this.isSuccess() && !this.isLoading;\n\n public toString = () =>\n `Loading: ${this.isLoading}, Success: ${this.hasSuccess}:**${this._success}**, ` +\n `Error: ${this.hasError}:${this.error}`;\n}\n\n/**\n * Wraps an object that conforms to LoadingModel to restore object loss from\n * hydrating state during development.\n */\nexport const wrapLoading = (loading: any): LoadingModel => {\n if (loading instanceof LoadingModel) {\n return loading;\n } else {\n if (!loading) {\n return LoadingModel.empty();\n } else {\n return new LoadingModel(\n loading.isLoading || false,\n loading.hasError || false,\n loading.hasSuccess || false,\n loading._success,\n loading.error\n );\n }\n }\n};\n","import { LoadingModel, wrapLoading } from './loading.model';\n\nexport const selectSuccess = (state: LoadingModel) =>\n wrapLoading(state).success;\nexport const selectOptionalSuccess = (state: LoadingModel) =>\n wrapLoading(state).optionalSuccess;\nexport const selectIsLoading = (state: LoadingModel) =>\n wrapLoading(state).isLoading;\nexport const selectIsSuccess = (state: LoadingModel) =>\n wrapLoading(state).isSuccess();\nexport const selectOptionalError = (state: LoadingModel) =>\n wrapLoading(state).error;\nexport const selectIsError = (state: LoadingModel) =>\n wrapLoading(state).isError();\nexport const selectHasLoaded = (state: LoadingModel) =>\n wrapLoading(state).hasLoaded();\nexport const selectIsEmpty = (state: LoadingModel) =>\n wrapLoading(state).isEmpty();\n\n","import {\n Observable,\n Subject\n} from 'rxjs';\nimport { Action } from '@ngrx/store';\nimport { Actions } from '@ngrx/effects';\nimport { TypedAction } from '@ngrx/store/src/models';\nimport { take } from 'rxjs/operators';\nimport {\n LoadingActionObject\n} from '../src/lib/loading.actions';\n\nexport const generateMockActions = () => {\n const dispatcher = new Subject();\n return {\n dispatcher,\n actions: new Actions(dispatcher)\n };\n};\n\n/**\n * Simple verifier that checks if the request action results in a success returned.\n */\nexport const verifyActionSuccess = (\n action: LoadingActionObject,\n effect: Observable>,\n dispatcher: Subject,\n options: {\n data: TSuccess,\n payload?: TRequest,\n }) => {\n let result: TypedAction;\n effect\n .pipe(take(1))\n .subscribe(next => {\n result = next;\n });\n // payload has type issues, just ignore them since we specify TRequest as type param already.\n dispatcher.next(action.request((options.payload || {}) as never));\n\n expect(result).toBeDefined();\n expect(result).toStrictEqual(action.success({ payload: options.data }));\n};\n\n/**\n * Simple verifier that checks if the request action results in a failure returned.\n */\nexport const verifyActionError = (\n action: LoadingActionObject,\n effect: Observable>,\n dispatcher: Subject,\n options: {\n error: Error,\n payload?: TRequest\n }) => {\n let result: TypedAction;\n effect\n .pipe(take(1))\n .subscribe(next => {\n result = next;\n });\n // payload has type issues, just ignore them since we specify TRequest as type param already.\n dispatcher.next(action.request((options.payload || {}) as never));\n\n expect(result).toBeDefined();\n expect(result).toStrictEqual(action.error({ payload: options.error }));\n};\n","export * from './effects.testing'\n","export * from './lib/organisation.module';\nexport * from './lib/organisation.actions';\n","import { OrganisationState } from './organisation.reducer';\nimport { createLoadingAction } from '@mckinsey-converge/loading';\nimport { Organisation } from '@mckinsey-converge/data-common';\n\nexport const organisationStateSelector = (state: { organisation: OrganisationState }) => state.organisation;\n\nexport const loadOrganisations = createLoadingAction('Organisation', 'data');\n","import { Injectable } from '@angular/core';\nimport {\n Actions,\n Effect\n} from '@ngrx/effects';\nimport { createLoadingEffect } from '@mckinsey-converge/loading';\nimport { loadOrganisations } from './organisation.actions';\nimport { OrganisationService } from '@mckinsey-converge/data-common';\n\n\n@Injectable()\nexport class OrganisationEffects {\n\n constructor(private actions: Actions,\n private organisationService: OrganisationService) {\n }\n\n @Effect()\n public loadOrganisations = createLoadingEffect(this.actions, loadOrganisations,\n () => this.organisationService.loadOrganisation())\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\nimport { organisationReducer } from './organisation.reducer';\nimport { OrganisationEffects } from './organisation.effects';\n\n@NgModule({\n imports: [\n CommonModule,\n EffectsModule.forFeature([\n OrganisationEffects\n ]),\n StoreModule.forFeature('organisation', organisationReducer)\n ]\n})\nexport class OrganisationModule {\n}\n","import { LoadingModel } from '@mckinsey-converge/loading';\nimport { Organisation } from '@mckinsey-converge/data-common';\nimport { createReducer } from '@ngrx/store';\nimport { loadOrganisations } from './organisation.actions';\n\nexport interface OrganisationState {\n data: LoadingModel\n}\n\nconst initialState: OrganisationState = {\n data: LoadingModel.empty()\n};\n\nexport const organisationReducer = createReducer(initialState,\n ...loadOrganisations.ons);\n","export * from './lib/rooms.module';\nexport * from './lib/rooms.actions'\nexport * from './lib/rooms.reducer'\nexport * from './lib/rooms.types'\nexport * from './lib/rooms.utils'\n","import { createLoadingAction } from '../../../loading/src/lib/loading.actions';\nimport { Space } from '../../../data-common/src/lib/spaces/space.class';\nimport {\n RoomQueryOptions,\n RoomState,\n RoomStoreState\n} from './rooms.types';\nimport {\n createAction,\n createSelector,\n props\n} from '@ngrx/store';\n\nexport const roomStateSelector = (state: RoomStoreState) => state.rooms;\n\nexport const loadRoomsWithQuery = createAction('[Rooms] Load Rooms with query', props());\n\nexport const loadRoomsForResults = createLoadingAction('Rooms', 'query');\n\nexport const loadRoomsForResultsMap = createLoadingAction('Rooms for map', 'query');\n\n\nexport const loadLaterThatDayResults = createLoadingAction('Later Rooms', 'later');\n\nexport const loadNextDayResults = createLoadingAction('Next Day Rooms', 'next');\n\nexport const loadByIdResults = createLoadingAction('By Id Rooms', 'byid');\n\nexport const selectRoomResultsSuccess = createSelector(roomStateSelector,\n loadRoomsForResults.selectors.optionalSuccess);\n\nexport const loadDiffSizeResults = createLoadingAction('Different Size Rooms', 'size');\n","import { Injectable } from '@angular/core';\nimport {\n Actions,\n Effect,\n ofType\n} from '@ngrx/effects';\nimport { SpacesService } from '@mckinsey-converge/data-common';\nimport {\n createLoadingEffect,\n LoadingAction\n} from '@mckinsey-converge/loading';\nimport {\n loadLaterThatDayResults,\n loadNextDayResults,\n loadRoomsForResults,\n loadRoomsForResultsMap,\n loadRoomsWithQuery,\n loadByIdResults,\n loadDiffSizeResults\n} from './rooms.actions';\nimport { mergeMap } from 'rxjs/operators';\nimport {\n laterThatDayFromDateTz,\n nextBusinessDay,\n} from './rooms.utils';\nimport {\n RoomQueryOptions,\n roomQueryOptionsToSpaceAvailabilityOptions,\n roomByIdQueryOptionsToSpaceAvailabilityOptions\n} from './rooms.types';\n\n@Injectable()\nexport class RoomsEffects {\n constructor(private actions: Actions,\n private spaceService: SpacesService) {\n }\n\n @Effect()\n public afterRequestResultsLoadOthersEffect = this.actions.pipe(\n ofType(loadRoomsWithQuery),\n mergeMap((action: LoadingAction) => {\n return [\n loadRoomsForResults.request({\n ...action,\n dateTz: action.dateTz\n }),\n // loadRoomsForResultsMap.request({\n // ...action,\n // dateTz: action.dateTz\n // }),\n loadLaterThatDayResults.request({\n ...action,\n dateTz: laterThatDayFromDateTz(action.dateTz)\n }),\n loadNextDayResults.request({\n ...action,\n dateTz: nextBusinessDay(action.dateTz)\n }),\n loadDiffSizeResults.request({\n ...action,\n dateTz: action.dateTz,\n diff_capacity: true\n }),\n ];\n })\n );\n\n @Effect()\n public loadRoomsForResultsEffect = createLoadingEffect(this.actions, loadRoomsForResults,\n (action) => this.spaceService.available(roomQueryOptionsToSpaceAvailabilityOptions(action), 'rooms'));\n \n @Effect() \n public loadRoomsForResultsMapEffect = createLoadingEffect(this.actions, loadRoomsForResultsMap,\n (action) => this.spaceService.available(roomQueryOptionsToSpaceAvailabilityOptions(action), 'rooms for maps', false));\n\n @Effect()\n public loadLaterThatDayResultsEffect = createLoadingEffect(this.actions, loadLaterThatDayResults,\n (action) =>\n this.spaceService.available(roomQueryOptionsToSpaceAvailabilityOptions(action), 'laterResults'));\n\n @Effect()\n public loadNextDayResultsEffect = createLoadingEffect(this.actions, loadNextDayResults,\n (action) =>\n this.spaceService.available(roomQueryOptionsToSpaceAvailabilityOptions(action), 'nextDay'));\n\n @Effect()\n public loadDiffSizeResultsEffect = createLoadingEffect(this.actions, loadDiffSizeResults,\n (action) =>\n this.spaceService.available(roomQueryOptionsToSpaceAvailabilityOptions(action), 'diffSize'));\n\n @Effect()\n public loadRoomByIdResultsEffect = createLoadingEffect(this.actions, loadByIdResults,\n (action) => \n this.spaceService.available(roomByIdQueryOptionsToSpaceAvailabilityOptions(action), 'byId', false));\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\nimport { roomsReducer } from './rooms.reducer';\nimport { RoomsEffects } from './rooms.effects';\n\n@NgModule({\n imports: [\n CommonModule,\n EffectsModule.forFeature([RoomsEffects]),\n StoreModule.forFeature('rooms', roomsReducer)\n ]\n})\nexport class RoomsModule {\n}\n","import { LoadingModel } from '@mckinsey-converge/loading';\nimport { createReducer } from '@ngrx/store';\nimport {\n loadLaterThatDayResults,\n loadNextDayResults,\n loadRoomsForResults,\n loadByIdResults,\n loadDiffSizeResults,\n loadRoomsForResultsMap\n} from './rooms.actions';\nimport { RoomState } from './rooms.types';\n\nexport const initialRoomsState: RoomState = {\n query: LoadingModel.empty(),\n later: LoadingModel.empty(),\n next: LoadingModel.empty(),\n byid: LoadingModel.empty(),\n size: LoadingModel.empty(),\n};\n\nexport const roomsReducer = createReducer(initialRoomsState,\n ...loadRoomsForResults.ons,\n ...loadRoomsForResultsMap.ons,\n\n ...loadLaterThatDayResults.ons,\n ...loadNextDayResults.ons,\n ...loadByIdResults.ons,\n ...loadDiffSizeResults.ons);\n","import { LoadingModel } from '../../../loading/src/lib/loading.model';\nimport {\n Building,\n DaysOfWeek,\n ISpaceAvailabilityOptions,\n RecurrencePeriod,\n Space\n} from '@mckinsey-converge/data-common';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\n\nexport interface RoomStoreState {\n rooms: RoomState;\n}\n\nexport interface RoomState {\n query: LoadingModel\n later: LoadingModel\n next: LoadingModel\n byid: LoadingModel\n size: LoadingModel\n}\n\nexport interface RoomQueryOptions {\n dateTz: DateTZ;\n duration: number;\n locations: string;\n capacity?: number;\n capacity_max?: number;\n diff_capacity?: boolean;\n //Recurrence fields\n recurrence_period?: RecurrencePeriod;\n recurrence_interval?: number;\n recurrence_endTz?: DateTZ;\n recurrence_count?: number;\n recurrence_starts?: Array;\n recurrence_exceptions?: Array; //SHOULD BE DATETZ\n recurrence_days?: Array;\n timezone?: string;\n offset?: number;\n buildings?: Building[];\n is_recurrent?: boolean;\n is_multiroom?: boolean;\n bookable?: boolean;\n ignore?: string;\n}\n\nexport const roomQueryOptionsToSpaceAvailabilityOptions = (options: RoomQueryOptions): ISpaceAvailabilityOptions => ({\n dateTz: options.dateTz,\n duration: options.duration,\n capacity: options.capacity,\n zone_ids: options.locations,\n capacity_max: options.capacity_max,\n diff_capacity: options.diff_capacity,\n /** Fields to include recurrence in the availability search */\n is_recurrent: options?.is_recurrent,\n is_multiroom: options?.is_multiroom,\n recurrence_period: options?.recurrence_period,\n recurrence_interval: options?.recurrence_interval,\n recurrence_endTz: options?.recurrence_endTz,\n recurrence_count: options?.recurrence_count,\n recurrence_starts: options?.recurrence_starts,\n recurrence_days: options?.recurrence_days,\n bookable: options?.bookable,\n ignore: options?.ignore\n});\n\nexport const roomByIdQueryOptionsToSpaceAvailabilityOptions = (options: RoomQueryOptions): ISpaceAvailabilityOptions => ({\n dateTz: options.dateTz,\n duration: options.duration,\n capacity: options.capacity,\n room_ids: options.locations,\n capacity_max: options.capacity_max\n});\n","import { Space } from '@mckinsey-converge/data-common';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { DateTZ } from \"@mckinsey-converge/date-tz\";\n\nexport const todayFromDate = (date: number) => new DateTZ({date});\n\n/**\n * Adds 60 mins.\n */\nexport const laterThatDayFromDateTz = (dateTz: DateTZ) => {\n return dateTz.addValue({ minutes: 60 })\n};\n\n/**\n * Next business day. In most cases 1 day, but on Fridays, it follows to the monday.\n * @param date\n */\nexport const nextBusinessDay = (dateTz: DateTZ) => {\n let retDate = dateTz.addValue({ days: 1 });\n if (retDate.dateWeekday >= 6) {\n retDate = retDate.setValue({ weekday: 8 });\n }\n return retDate;\n};\n\nexport const mapRoomToSelectOption = (room?: Space): SelectOption => room ? ({\n value: room.id,\n shortDisplay: room.local_name,\n display: `${room.local_name}, ${room.level?.name}`\n}) : undefined;\n","export * from './lib/rx-utils.module';\nexport * from './lib/operators'\nexport * from './lib/loading-model.utils'\n","import {\n combineLatest,\n Observable\n} from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { LoadingModel } from '@mckinsey-converge/loading';\n\n/**\n * Generates the results count based on if data has loaded or not. If not, undefined is returned.\n * Otherwise, it'll return the count of the results.\n */\nexport const resultCountObservable = (loadingObservable: Observable>,\n resultsObservable: Observable\n): Observable => combineLatest([\n loadingObservable.pipe(map(r => r.hasLoaded())),\n resultsObservable.pipe(map(v => v?.length))\n]).pipe(map(([isLoading, viewModelLength]) => isLoading ? viewModelLength : undefined));\n","import {\n distinctUntilChanged,\n filter\n} from 'rxjs/operators';\nimport * as deepEqual from 'fast-deep-equal';\n\n/**\n * Useful for nested objects to prevent unnecessary triggers in RX chain.\n */\nexport const deepDistinctUntilChanged = () => distinctUntilChanged(deepEqual);\n\n/**\n * Won't emit if value is undefined.\n */\nexport const filterUndefined = () => filter(f => !!f);\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class RxUtilsModule {}\n","export * from './lib/ui.module';\nexport * from './lib/types';\nexport * from './lib/base-template.component';\nexport * from './lib/recurrence-pattern-form/recurrence-pattern-form.component';\nexport * from './lib/recurrence-booking-form/recurrence-booking-form.component';\nexport * from './lib/conflicts-modal/conflicts-modal.component'\nexport * from './lib/override-changes-modal/override-changes-modal.component'\nexport * from './lib/date-tz-calendar-widget/date-tz-calendar-widget.component';\nexport * from './lib/date-tz-date-picker/date-tz-date-picker.component';\nexport * from './lib/date-tz-duration-field/date-tz-duration-field.component';\nexport * from './lib/date-tz-time-field/date-tz-time-field.component';\nexport * from './lib/aca-date-picker/aca-date-picker.component';\nexport * from './lib/conflict-alert-modal/conflict-alert-modal.component';\nexport * from './lib/tooltip/tooltip.enums';\nexport * from './lib/zoom-warning-modal/components/zoom-warning/zoom-warning.component';\n","import { Component, OnInit, Input, Output, OnChanges, SimpleChanges, forwardRef, EventEmitter } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\nexport interface IDatePickerOptions {\n /** Unix timestamp with millisecond. First selectable date */\n from?: number;\n /** Unix timestamp with millisecond. Last selectable date */\n to?: number;\n /** Luxon format string for formatting days of the week. Defaults to `DDD` */\n day_format?: string;\n /** Luxon format string for formatting active month. Defaults to `MMMM yyyy` */\n month_format?: string;\n}\n\ninterface IDateBlock {\n /** Timestamp value of the date */\n value: number;\n /** Day of the month to display */\n display: string;\n /** Whether block is the selected date */\n active: boolean;\n /** Whether block not selectable */\n disabled: boolean;\n /** Whether block outside the active month */\n non_month: boolean;\n /** Whether the block is today */\n today: boolean;\n /** Number of events on this block */\n count?: number;\n}\n\n@Component({\n selector: 'aca-date-picker',\n templateUrl: './aca-date-picker.component.html',\n styleUrls: ['./aca-date-picker.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AcaDatePickerComponent),\n multi: true\n }\n ]\n})\nexport class AcaDatePickerComponent implements OnInit, OnChanges, ControlValueAccessor {\n /** CSS class to add to the root element of the component */\n @Input() public klass = 'default';\n /** Counters of the events on given dates. Key format is `yyyy-MM-dd` */\n @Input() public counters: { [date: string]: number };\n /** Settings for the date picker component */\n @Input() public options: IDatePickerOptions;\n /** Offset of the display month from the current month */\n @Output() public month = new EventEmitter();\n /** Display the last selected day as active */\n @Input() public show_last_selection?: boolean = true\n\n public date: number = DateNow(new Date()).ms;\n\n // R--- this is the date picker that needs to be TZ aware\n /** Offset of the month displayed from the current month */\n public offset = 0;\n /** Minimum offset for changing the month */\n public min_offset = -999999;\n /** Maximum offset for changing the month */\n public max_offset = 999999;\n /** Blocks representing the rendering details of the display days of the month */\n public date_list: IDateBlock[] = [];\n /** Name of the actively displayed month */\n public month_name = DateNow(new Date()).formatDate('MMMM yyyy');\n /** Name of the days of the week to display */\n public days_of_week = [];\n /** First selectable date */\n private from: DateTZ;\n /** Last selectable date */\n private to: DateTZ;\n /** Luxon format string for formatting days of the week. Defaults to `dd` */\n private day_format = 'EEE';\n /** Luxon format string for formatting active month. Defaults to `MMMM yyyy` */\n private month_format = 'MMMM yyyy';\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n /** ID of the timer used for changing the month */\n private _change_timer: number;\n\n public ngOnInit(): void {\n this.generateMonth();\n this.generateDaysOfTheWeek();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.options) {\n this.updateOptions();\n }\n if (changes.counters) {\n this.generateMonth();\n }\n }\n\n /** Change date using the given block */\n public setDate(item: IDateBlock) {\n this.date = item.value;\n if (this._onChange) {\n this._onChange(this.date);\n }\n this.generateMonth();\n }\n\n /**\n * Update offset to show the selected date\n */\n public updateDate(): void {\n \n if (!this.date) {\n return;\n }\n const now = DateNow(new Date()).startOfValue('month');\n const date_ = new DateTZ({date: this.date})\n const date = date_.startOfValue('month');\n if (date.valid) {\n const difference = date.dateDiff(now, 'months', 'months');\n if (this.offset !== difference) {\n this.offset = difference;\n this.month.emit(this.offset);\n }\n this.generateMonth();\n }\n }\n\n /**\n * Update local properties based off changes to settings\n */\n public updateOptions(): void {\n if (this.options) {\n // Setup from date\n if (this.options.from) {\n const date_ = new DateTZ({date: this.options.from})\n this.from = date_.startOfValue('day');;\n const today = DateNow(new Date()).startOfValue('month');\n const date = this.from.startOfValue('month');\n this.min_offset = date.dateDiff(today, 'months', 'months');\n } else if (this.from) {\n this.from = null;\n this.min_offset = -999999;\n }\n // Setup to date\n if (this.options.to) {\n const date_ = new DateTZ({date: this.options.to})\n this.to = date_.startOfValue('day');\n const today = DateNow(new Date()).startOfValue('month');\n const date = this.to.startOfValue('month');\n this.max_offset = date.dateDiff(today, 'months', 'months');\n } else if (this.to) {\n this.to = null;\n this.max_offset = 999999;\n }\n if (this.options.month_format) {\n this.month_format = this.options.month_format || 'MMMM yyyy';\n }\n if (this.options.day_format) {\n this.day_format = this.options.day_format || 'EEE';\n this.generateDaysOfTheWeek();\n }\n // Update date blocks\n this.generateMonth();\n }\n }\n\n /**\n * Generate the display blocks for the days of the active month\n */\n private generateMonth(): void {\n if (!this.date) {\n return;\n }\n const date = DateNow(new Date()).addValue({ months : this.offset });\n const active = new DateTZ({date: this.date});\n let start = date.setValue({ day: 1 }).setValue({ weekday: 7 }).subtractValue({ weeks: 1 });\n const end_ = new DateTZ({date: start.ms})\n const end = end_.addValue({ weeks: 1 }).endOfValue('month').addValue({ days: 2 }).endOfValue('week');\n this.date_list = [];\n while (start.isBeforeDate(end) || start.isSameDate(end, 'day')) {\n this.date_list.push({\n value: start.ms,\n display: start.formatDate('d'),\n active: this.show_last_selection && active.isSameDate(start, 'day'),\n non_month: !date.isSameDate(start, 'month'),\n count: this.counters ? this.counters[start.formatDate('yyyy-MM-dd')] || 0 : 0,\n disabled: (this.from ? start.isBeforeDate(this.from, 'day') : false) || (this.to ? start.isAfterDate(this.to, 'day') : false),\n today: DateNow(new Date()).isSameDate(start, 'day')\n });\n start = start.addValue({ days : 1 });\n }\n this.month_name = date.formatDate(this.month_format);\n }\n\n /**\n * Generate this weekdays to display in the header of the calendar\n */\n private generateDaysOfTheWeek() {\n let date = DateNow(new Date()).startOfValue('week');\n this.days_of_week = [];\n for (let i = 0; i < 7; i++) {\n this.days_of_week.push(date.formatDate(this.day_format));\n date = date.addValue({ days : 1 });\n }\n }\n\n /**\n * Changes the month offset by the given value.\n * Does nothing if the new month is not available to be selected\n * @param value Number of months to change the offset by\n */\n public changeMonth(value: number): void {\n if (this._change_timer) {\n clearTimeout(this._change_timer);\n }\n this._change_timer = setTimeout(() => {\n const new_offset = this.offset + value;\n const now = DateNow(new Date())\n const date = now.addValue({ months : new_offset, days: now.dateMonth === 2 ? 2 : 0 }); //add 2 days if month is february to avoid calc errors\n if (this.from && date.isBeforeDate(this.from, 'month')) { return; }\n if (this.to && date.isAfterDate(this.to, 'month')) { return; }\n this.offset = new_offset;\n this.month.emit(this.offset);\n this.generateMonth();\n this._change_timer = null;\n }, 100);\n }\n\n /**\n * Reset the month offset to the month of the selected date\n */\n public reset() {\n const date = new DateTZ({date: this.date});\n const offset = this.offset;\n this.offset = DateNow(new Date()).dateDiff(date, 'months', 'months');\n if (offset !== this.offset) {\n this.generateMonth();\n }\n this.month.emit(this.offset);\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: number) {\n this.date = value;\n this.updateDate();\n this.generateMonth();\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n}\n","
\n
\n
\n
\n
\n
{{month_name}}
\n
= max_offset\" (click)=\"changeMonth(1)\" (touchend)=\"changeMonth(1)\">\n
\n
\n
\n
\n
{{item}}
\n
\n
\n
\n
\n {{item.display}}\n
\n
{{item.count > 9 ? '+9' : item.count}}
\n
\n
\n
\n
","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges\n} from '@angular/core';\n\nexport enum AlertMode {\n Warning = 'warning',\n Coachmark = 'coachmark',\n BlueCoachmark = 'blue-coachmark',\n Error = 'error'\n}\n\nexport enum AlertBannerDisplay {\n /**\n * New UI\n */\n V2 = 'v2',\n\n /**\n * Default, legacy ui.\n */\n V1 = 'v1',\n}\n\n@Component({\n selector: 'mck-alert-banner',\n template: `\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n \n \n
\n `,\n styleUrls: ['./alert-banner.component.scss']\n})\nexport class AlertBannerComponent implements OnInit, OnChanges {\n\n @Input()\n public mode: AlertMode = AlertMode.Warning;\n\n @Output()\n public close = new EventEmitter();\n\n @Output()\n public action = new EventEmitter();\n\n @Input()\n public message: string;\n\n @Input()\n public buttonText: string;\n\n @Input()\n public showClose = true;\n\n @Input()\n public display: AlertBannerDisplay = AlertBannerDisplay.V1;\n\n public iconPath: string = 'assets/icon/warning-yellow.svg';\n public materialColor: string = 'black';\n public closeIcon: string = 'close_outline.svg';\n\n public ngOnInit(): void {\n this._onModeChange();\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n if (changes.mode) {\n this._onModeChange();\n }\n }\n\n private _onModeChange() {\n this.iconPath = 'assets/icon/warning-yellow.svg';\n this.closeIcon = 'close_outline.svg';\n switch (this.mode) {\n case AlertMode.Warning:\n this.materialColor = 'black';\n break;\n case AlertMode.Coachmark:\n this.materialColor = 'coachmark';\n this.closeIcon = 'close_outline_coachmark.svg';\n break;\n case AlertMode.BlueCoachmark:\n this.iconPath = 'assets/icon/info-bg-dark.svg'\n this.materialColor = 'blue-coachmark'\n break;\n case AlertMode.Error:\n this.iconPath = 'assets/img/error-icon.svg'\n this.materialColor = 'white'\n break;\n default:\n this.materialColor = 'black';\n }\n }\n\n}\n","import {\n Component,\n Directive,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Self,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n NgControl\n} from '@angular/forms';\nimport { SelectOption } from '../types';\nimport {\n BehaviorSubject,\n combineLatest,\n from,\n Subject\n} from 'rxjs';\nimport {\n COMMA,\n ENTER\n} from '@angular/cdk/keycodes';\nimport { MatChipInputEvent } from '@angular/material/chips';\nimport {\n distinctUntilChanged,\n map,\n take\n} from 'rxjs/operators';\nimport { MatCheckboxChange } from '@angular/material/checkbox';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { MatAutocompleteTrigger } from '@angular/material/autocomplete';\n\n@Component({\n selector: 'mck-autocomplete-chip-select-item',\n template: `\n
\n \n {{label}}\n \n
\n \n
\n
\n \n
\n \n
\n \n
\n
\n
\n \n \n \n \n {{selected.shortDisplay}}\n close\n \n \n \n \n
\n \n \n {{option.dropdownOverride || option.display}}\n \n \n
\n
\n \n Clear\n \n \n Confirm\n \n
\n \n \n {{errorMessage}}\n
\n `,\n styleUrls: ['./auto-complete-chip-select-item.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class AutoCompleteChipSelectItemComponent extends BaseDirective implements OnInit, OnChanges, ControlValueAccessor, OnDestroy {\n\n @ViewChild('trigger')\n trigger: MatAutocompleteTrigger;\n\n @ViewChild('componentInput')\n componentInput: HTMLInputElement;\n\n @Input()\n label: string;\n\n @Input()\n required?: boolean;\n\n @Input()\n feedbackInput?: boolean;\n\n @Input()\n loading?: boolean;\n\n @Input()\n placeHolder: string;\n\n @Input()\n options: Subject[]>;\n\n @Input()\n selectedOptions: Subject[]>;\n\n @Input()\n useCTAs?: boolean;\n\n @Output()\n optionSelected = new EventEmitter>();\n\n @Output()\n feedbackOutput = new EventEmitter();\n\n @Output()\n chipsCleared: EventEmitter = new EventEmitter();\n\n @Output()\n onClickConfirm: EventEmitter = new EventEmitter();\n\n /**\n * If true, only allow 1 group at a time to get selected. Show others as disabled.\n */\n @Input()\n selectOnlyOneGroup = false;\n\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n\n @Input() public localFilter: boolean = true;\n\n /**\n * If error exists, a message.\n */\n @Input()\n errorMessage?: string;\n\n @Input()\n hideDropdownCarret?: boolean;\n\n @Input()\n displayCTA?: boolean;\n\n private selectOnlyOneGroupChange = new BehaviorSubject(false);\n\n separatorKeysCodes = [ENTER, COMMA];\n\n public filterFormControl: FormControl = new FormControl();\n\n public focused = false;\n public mobileFullScreen = false;\n\n public autocompleteOptions = new BehaviorSubject[]>([]);\n public filteredAutocompleteOptions = new BehaviorSubject[]>([]);\n\n /** List shown to user, filters children if a group header is added **/\n public chipOptions = new BehaviorSubject[]>([]);\n\n /** Form control on change handler */\n private _onChange?: (_: SelectOption[]) => void;\n /** Form control on touch handler */\n private _onTouch?: (_: string) => void;\n\n private value = new BehaviorSubject[]>([]);\n\n public enableCTAs: boolean = false\n\n public hasChips: boolean = false;\n\n constructor(@Self() @Optional() private control: NgControl) {\n super();\n if (this.control) {\n this.control.valueAccessor = this;\n }\n }\n\n public get invalid(): boolean {\n return this.control ? this.control.invalid : false;\n }\n\n public get showError(): boolean {\n if (!this.control) {\n return false;\n }\n\n const { dirty, touched } = this.control;\n\n return this.invalid ? (dirty && touched) : false;\n }\n\n public iconFillClass(color?: string): string {\n return color === 'external' ? 'mck-icon-fill-gray' : 'mck-icon-fill-white'\n }\n\n ngOnInit() {\n this.subscription('autoCompleteOptions', combineLatest([\n this.options,\n this.selectedOptions,\n this.selectOnlyOneGroupChange\n ])\n .pipe(\n map(([options, selectedOptions, selectOnlyOneGroup]) => {\n this.hasChips = !!selectedOptions.length;\n return options.map(option => {\n const selected = !!selectedOptions.find(s => s.value === option.value);\n let enabled = true;\n if (selectOnlyOneGroup) {\n // find first group item in selection\n const selectedGroupHeader = selectedOptions.find(s => s.groupHeader || s.groupId === option.groupId);\n\n // if no options chosen, enable it, otherwise only allow selections from other options.\n enabled =\n selectedOptions.length === 0 ||\n (selectedGroupHeader ? selectedGroupHeader.groupId === option.groupId : false);\n this.enableCTAs = selectedOptions.length !== 0\n }\n\n return {\n ...option,\n enabled,\n selected\n } as SelectOption;\n });\n })\n ).subscribe(next => {\n const options = next.sort((a, b) => {\n if (a.groupId === b.groupId) {\n return b.display > a.display ? -1 : 1;\n }\n return b.groupId > a.groupId ? -1 : 1;\n });\n this.autocompleteOptions.next(options);\n this.filteredAutocompleteOptions.next(this.getFilteredAutocompleteOptions(this.filterFormControl.value?.trim()));\n }));\n this.subscription('filterFormControlChanges',\n this.filterFormControl.valueChanges.subscribe(value => {\n if (this.localFilter && value.length) {\n this.filteredAutocompleteOptions.next(this.getFilteredAutocompleteOptions(value));\n } else {\n this.filteredAutocompleteOptions.next(this.getFilteredAutocompleteOptions());\n }\n }));\n this.subscription('chipOptions', this.selectedOptions\n .pipe(map(selectedOptions => {\n // find group headers and check if children are part of that group.\n // if part of group, filter them out as redundant.\n const groupHeaders = selectedOptions.filter(s => s.groupHeader) || [];\n return selectedOptions.filter(s => s.groupHeader || s.groupChild && !(groupHeaders.find(g => g.groupId === s.groupId)));\n }))\n .subscribe(next => {\n this.chipOptions.next(next);\n }));\n\n this.subscription('formData', this.selectedOptions\n .pipe(map(selected => {\n // group headers always contain children, so only pick out children for data\n return selected;\n }))\n .subscribe(next => {\n this.value.next(next);\n }));\n\n // tie value changes to change.\n this.subscription('valueChanges', this.value\n .pipe(distinctUntilChanged())\n .subscribe(next => {\n if (this._onChange) {\n // rewrote this to avoid read only error\n const values = [];\n next.forEach((v, i) => {\n const value = { ...v };\n if (v.meta?.user) {\n value.display = v.meta.user.name;\n }\n values.push(value);\n });\n this._onChange(values);\n }\n }));\n\n window.addEventListener('scroll', this.scrollEvent, true);\n }\n\n getFilteredAutocompleteOptions(searchString: string = '') {\n // Exact matches of the groupId or display value\n const exactMatches = this.autocompleteOptions.value.filter(o => {\n if (searchString && searchString.length) {\n return o.groupId.toLowerCase().indexOf(searchString.toLowerCase()) === 0 || o.display.toLowerCase().indexOf(searchString.toLowerCase()) === 0;\n }\n return o.groupId && o.display;\n });\n // Fuzzier search of the dropdownOverride field\n const moreOptions = this.autocompleteOptions.value.filter(o => {\n if (o?.dropdownOverride?.length && searchString) {\n const match = o.dropdownOverride?.toLowerCase().indexOf(searchString.toLowerCase()) > -1;\n // only return found locations that don't exist in exactMatches.\n return match && !exactMatches.find(e => {\n return e.value === o.value\n });\n }\n return false;\n });\n\n // Merge the two result sets\n let joinedOptions = exactMatches.concat(moreOptions).sort((a, b) => {\n if (a.groupId === b.groupId) {\n return b.display > a.display ? -1 : 1;\n }\n return b.groupId > a.groupId ? -1 : 1;\n });\n\n // Create a 1D array of the groupId\n const groupIds = joinedOptions.map(o => o.groupId);\n // Get a deduped list of the group parents\n const parents = this.autocompleteOptions.value.filter(o => {\n return o?.groupHeader && groupIds.indexOf(o.groupId) !== -1;\n });\n\n // Remove the parents from the joinedOptions and merge with the reduced parents set, and then sort by groupId.\n // Resulting array sets the parents first in order so the widget renders properly.\n const filteredAutocompleteOptions = parents.concat(joinedOptions.filter(jo => !!jo.dropdownOverride)).sort((a, b) => {\n return b.groupId > a.groupId ? -1 : 1;\n });\n return filteredAutocompleteOptions;\n }\n\n loseFocus(): void {\n this.mobileFullScreen = false;\n this.focused = false;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.selectOnlyOneGroup) {\n this.selectOnlyOneGroupChange.next(this.selectOnlyOneGroup);\n }\n }\n\n keyedInput(matInput: string) {\n if (this.feedbackInput) {\n this.feedbackOutput.emit(matInput);\n }\n }\n\n selectOption(value: string) {\n this.options.pipe(\n take(1),\n map((options: SelectOption[]) => options.find(o => o.value === value))\n ).subscribe(next => {\n if (next) {\n this.optionSelected.emit(next);\n }\n });\n }\n\n removeOption(value: SelectOption) {\n this.optionSelected.emit(value);\n if (this.useCTAs) {\n this.onClickConfirm.emit();\n }\n\n }\n\n clearSelections() {\n this.selectedOptions.next([]);\n this.chipsCleared.emit();\n }\n\n onClickArrow() {\n // only close events we allow arrow to close panel.\n if (this.focused) {\n this.onFocus(false);\n }\n }\n\n onPanelFocusChange(focusIn: boolean) {\n this.onFocus(focusIn, true);\n }\n\n onFocus(focusIn: boolean, fromPanel?: boolean) {\n if (!focusIn && this.useCTAs) {\n this.onClickConfirm.emit();\n }\n // Only for location input???\n if (this.localFilter && fromPanel && focusIn) {\n // open on focus, mobile needs a refocus\n this.mobileFullScreen = true;\n this.timeout('showDefaults', () => {\n // All results do not show as expected unless I focus again.\n // Something about the mobile styles.\n this.onFocus(true);\n }, 100)\n }\n\n if (this.feedbackInput && !fromPanel) {\n // clear input when input creates options\n this.componentInput.value = '';\n this.filterFormControl.setValue('');\n this.feedbackOutput.emit('');\n }\n\n if (this.focused !== focusIn) {\n this.focused = focusIn;\n // clear on close\n if (!focusIn) {\n this.componentInput.value = '';\n this.filterFormControl.setValue('');\n }\n if (!fromPanel) {\n if (focusIn) {\n this.trigger.openPanel();\n } else {\n this.trigger.closePanel();\n // close the mobile full screen\n this.loseFocus();\n }\n }\n }\n }\n\n onChanged(value: SelectOption, event: MatCheckboxChange) {\n this.optionSelected.emit(value);\n }\n\n add(event: MatChipInputEvent) {\n // reset\n if (event.input) {\n event.input.value = '';\n }\n this.filterFormControl.setValue('');\n }\n\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouch = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n // TODO: disabled not implemented yet.\n this.disabled = isDisabled;\n }\n\n writeValue(obj: SelectOption[] | undefined): void {\n // update selected options when this value is written\n this.options?.pipe(\n take(1),\n map((options: SelectOption[]) => {\n return options.filter(o => obj ? !!obj.find(spl => o.value === spl.value) : false );\n })\n ).subscribe(next => {\n this.selectedOptions.next(next);\n });\n }\n\n private scrollEvent = (event): void => {\n if (this.trigger === null) {\n return;\n }\n /**\n * IF - to confirm user not scrolling from autocomplete opened panel and close panel if scroll event triggers from outside of panel\n */\n if (this.trigger.panelOpen && event.target.closest('.mat-autocomplete-panel') === null && !event.srcElement.classList.contains('mat-form-field-autofill-control')) {\n this.onFocus(false);\n this.trigger['_element'].nativeElement.blur();\n }\n }\n public ngOnDestroy(): void {\n window.removeEventListener('scroll', this.scrollEvent, true);\n }\n}\n\n\n","import {\n Pipe,\n PipeTransform\n} from '@angular/core';\nimport { SelectOption } from '../types';\n\n/**\n * Patch orphaned SelectOption children into acting as their own group headers.\n *\n * This intends to help in the common scenario where filters have (for whatever\n * reason) prevented the child's usual group header from appearing.\n */\n@Pipe({\n name: 'groupHeaderPatch',\n})\nexport class GroupHeaderPipe implements PipeTransform {\n transform(items: SelectOption[]): SelectOption[] {\n if (!items) {\n return [];\n }\n\n return items.map(v => {\n const hasHeader = !!items.find(i => i.groupHeader && i.groupId === v.groupId);\n return {\n ...v,\n displayAsHeader: !hasHeader,\n }\n })\n }\n\n}\n","import { Component, Input, Output, forwardRef, SimpleChanges, OnChanges, OnInit, EventEmitter, ViewChild, OnDestroy } from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Observable } from 'rxjs';\nimport { map, startWith } from 'rxjs/operators';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { MatAutocompleteTrigger } from '@angular/material/autocomplete';\nimport {\n BehaviorSubject\n} from 'rxjs';\n\n/**\n * @title Autocomplete filtering select of a single option via text search.\n */\n@Component({\n selector: 'mck-autocomplete-select-option',\n templateUrl: 'auto-complete-select-option.component.html',\n styleUrls: ['auto-complete-select-option.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AutoCompleteSelectOptionComponent),\n multi: true\n }\n ],\n})\nexport class AutoCompleteSelectOptionComponent implements OnInit, OnChanges, ControlValueAccessor, OnDestroy{\n @Input()\n public label: string;\n\n @Input()\n public required: boolean;\n\n @Input()\n public options: SelectOption[] = [];\n\n @Input()\n public selectedValue: SelectOption | undefined;\n\n @Input()\n public resetInput: number | undefined;\n\n @Input()\n public placeholder: string;\n\n @Input()\n public noEntriesFoundLabel: string;\n\n @Output()\n public filteredOptionsChange = new EventEmitter[]>();\n\n @Output()\n public inputTextChange = new EventEmitter();\n\n @Output() emptyBoxEvent = new EventEmitter();\n\n /** Form control on change handler */\n private _onChange: (_: SelectOption) => void;\n /** Form control on touch handler */\n private _onTouch: (_: SelectOption) => void;\n\n filterFormControl = new FormControl();\n filteredOptions: Observable[]>;\n\n /** The selected value */\n public value = new BehaviorSubject('');\n\n /** Available options to search / select from */\n public _options = new BehaviorSubject[]>(this.options);\n @ViewChild('trigger')\n trigger: MatAutocompleteTrigger;\n\n ngOnInit() {\n this.updateFilteredOptions();\n window.addEventListener('scroll', this.scrollEvent, true);\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n // Watch and apply changes from the parent component.\n if (changes.options || changes.selectedValue) {\n if (changes.options && !changes.selectedValue) {\n this.filterFormControl.setValue('')\n }\n this.updateFilteredOptions();\n }\n if (changes.resetInput) {\n this.filterFormControl.setValue('');\n this.updateFilteredOptions();\n }\n \n }\n\n private updateFilteredOptions() {\n this.filteredOptions = this.filterFormControl.valueChanges\n .pipe(\n startWith(''),\n map(value => typeof value === 'string' ? value : value && value?.display ? value.display : ''),\n map(name => name ? this._filter(name) : this.options.slice())\n );\n }\n\n displayFn(data: SelectOption): string {\n return data && data?.display ? data.display : '';\n }\n\n private _filter(display: string): SelectOption[] {\n const filterValue = display.toLowerCase();\n // return all the matches found\n const filtered = this.options.filter(option => {\n // split this input and index both, if both\n // match return true.\n if (filterValue.includes(' ')) {\n const filterValues =filterValue.split(' ');\n let matchesAll = true;\n for (let x = 0; x < filterValues.length; x++) {\n if (option.display.toLowerCase().indexOf(filterValues[x]) === -1) {\n matchesAll = false;\n }\n }\n if (matchesAll) {\n return true;\n }\n }\n // match the whole string\n return option.display.toLowerCase().indexOf(filterValue) > -1;\n });\n this.inputTextChange.emit(filterValue);\n this.filteredOptionsChange.emit(filtered);\n return filtered;\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: SelectOption): void {\n this.value.next(new_value);\n if (this._onChange) {\n this._onChange(this.options.find(f => f.value === new_value.value));\n }\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: SelectOption | null) {\n if (value != null) {\n this.value.next(value.value);\n }\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: SelectOption) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: SelectOption) => void): void {\n this._onTouch = fn;\n }\n\n public onChangeInput() {\n if (this.filterFormControl.value === '') {\n this.emptyBoxEvent.emit(true);\n }\n }\n\n private scrollEvent = (event): void => {\n if (this.trigger === null) {\n return;\n }\n /**\n * IF - to confirm user not scrolling from autocomplete opened panel and close panel if scroll event triggers from outside of panel\n */\n if (this.trigger.panelOpen && event.target.closest('.mat-autocomplete-panel') === null ) {\n this.trigger.closePanel();\n this.trigger['_element'].nativeElement.blur();\n }\n }\n public ngOnDestroy(): void {\n window.removeEventListener('scroll', this.scrollEvent, true);\n }\n\n}","
\n {{label}}\n \n \n \n \n {{option.shortDisplay || option.display}}\n \n \n \n
","import {\n AfterViewInit,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\n/**\n * A helper class for rendering embedded views (ng-template) as standalone components.\n *\n * If the view is lazy and does not render upon initialization,\n * it attempts embedding view again later.\n *\n * When testing a component directly that extends this class, its best to wrap the component\n * in a wrapper component for testing so that it can render itself.\n */\nexport class BaseTemplateComponent extends BaseDirective implements AfterViewInit, OnInit, OnDestroy {\n @ViewChild(TemplateRef, { static: true })\n public template: TemplateRef;\n\n private isRendered = false;\n\n constructor(private vcRef: ViewContainerRef) {\n super();\n }\n\n public ngOnInit(): void {\n // try early rendering\n this.attemptViewEmbed();\n }\n\n public attemptViewEmbed() {\n if (this.template && !this.isRendered) {\n this.isRendered = true;\n this.vcRef.createEmbeddedView(this.template);\n return true;\n }\n return false;\n }\n\n public ngAfterViewInit(): void {\n if (!this.isRendered) {\n console.log('View not rendered yet, attempting to post initialization');\n setTimeout(() => {\n console.log('Timeout ended, trying again', this.template);\n if (!this.attemptViewEmbed()) {\n console.log('Attempting render in after view initialization');\n setTimeout(() => {\n if (!this.attemptViewEmbed()) {\n console.error('FAILED TO LOAD TEMPLATE');\n }\n }, 1000);\n }\n });\n }\n }\n\n public ngOnDestroy(): void {\n super.ngOnDestroy();\n this.isRendered = false;\n }\n}\n","import {\n Component,\n Output,\n TemplateRef,\n ViewChild,\n EventEmitter,\n Input\n } from \"@angular/core\";\n import { DropdownPanel } from \"./dropdown-panel\";\n \n @Component({\n selector: \"cng-select-options\",\n templateUrl: \"./cng-select-options.component.html\",\n styleUrls: [\"./cng-select-options.component.scss\"]\n })\n export class CngSelectOptionsComponent implements DropdownPanel {\n @ViewChild(TemplateRef) templateRef: TemplateRef;\n @Output() closed = new EventEmitter();\n @Input() ddWidth: string;\n \n constructor() {}\n }\n ","\n
\n \n
\n
","import {\n Component,\n Output,\n TemplateRef,\n ViewChild,\n EventEmitter,\n Input,\n OnInit\n } from \"@angular/core\";\n import { DropdownPanel, DropdownOpion } from \"./dropdown-panel\";\n \n @Component({\n selector: \"cng-select\",\n templateUrl: \"./cng-select.component.html\",\n styleUrls: [\"./cng-select.component.scss\"]\n })\n export class CngSelectComponent implements OnInit {\n @Input() data: any;\n public isClosed: boolean = false;\n public selected: DropdownOpion;\n constructor() {\n\n }\n ngOnInit(): void {\n this.selected = this.data.defaultSelected;\n }\n\n public optionSelected(item: DropdownOpion) {\n // this.selected = item;\n this.data.defaultSelected = item;\n this.data?.onChangeCallback && this.data?.onChangeCallback(item);\n }\n }\n ","\n\n
\n {{data?.defaultSelected?.display}}\n
\n \n
\n
\n\n
{{item?.display}}
\n
","import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n ViewContainerRef\n } from '@angular/core';\n import { DropdownPanel } from './dropdown-panel';\n import { Overlay, OverlayRef } from '@angular/cdk/overlay';\n import { TemplatePortal } from '@angular/cdk/portal';\n import { merge, Observable, Subscription } from 'rxjs';\n \n @Directive({\n selector: '[dropdownTriggerFor]',\n host: {\n '(click)': 'toggleDropdown()'\n }\n })\n export class DropdownTriggerForDirective implements OnDestroy, AfterViewInit, OnInit {\n private isDropdownOpen = false;\n private overlayRef: OverlayRef;\n private dropdownClosingActionsSub = Subscription.EMPTY;\n \n @Input('dropdownTriggerFor') public dropdownPanel: DropdownPanel;\n @Output() isPanelOpened = new EventEmitter();\n constructor(\n private overlay: Overlay,\n private elementRef: ElementRef,\n private viewContainerRef: ViewContainerRef,\n private renderer: Renderer2\n ) {\n \n }\n ngOnInit(): void {\n // const cngSelectEl = this.elementRef.nativeElement.nextElementSibling; \n // const parentWidth = this.elementRef.nativeElement.offsetWidth; \n // this.renderer.setStyle(cngSelectEl, 'width', `${parentWidth}px`);\n }\n ngAfterViewInit(): void {\n \n }\n\n \n toggleDropdown(): void {\n this.isDropdownOpen ? this.destroyDropdown() : this.openDropdown();\n \n }\n \n openDropdown(): void {\n let {ddWidth} = this.dropdownPanel;\n this.dropdownPanel.ddWidth = ddWidth !=='' ? ddWidth : `${this.elementRef.nativeElement.offsetWidth}px`;\n this.isDropdownOpen = true;\n this.isPanelOpened.emit(this.isDropdownOpen);\n this.overlayRef = this.overlay.create({\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n scrollStrategy: this.overlay.scrollStrategies.close(),\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withPositions([\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 8\n }\n ])\n });\n \n const templatePortal = new TemplatePortal(\n this.dropdownPanel.templateRef,\n this.viewContainerRef\n );\n this.overlayRef.attach(templatePortal);\n \n this.dropdownClosingActionsSub = this.dropdownClosingActions().subscribe(\n () => this.destroyDropdown()\n );\n }\n \n private dropdownClosingActions(): Observable {\n const backdropClick$ = this.overlayRef.backdropClick();\n const detachment$ = this.overlayRef.detachments();\n const dropdownClosed = this.dropdownPanel.closed;\n \n return merge(backdropClick$, detachment$, dropdownClosed);\n }\n \n private destroyDropdown(): void {\n if (!this.overlayRef || !this.isDropdownOpen) {\n return;\n }\n \n this.dropdownClosingActionsSub.unsubscribe();\n this.isDropdownOpen = false;\n this.isPanelOpened.emit(this.isDropdownOpen);\n this.overlayRef.detach();\n }\n \n ngOnDestroy(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n }\n }\n }\n ","import {\n Component,\n Input,\n OnInit,\n OnDestroy,\n ViewChild,\n AfterViewInit\n} from '@angular/core';\nimport { MatExpansionPanel } from '@angular/material/expansion';\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { CollapseService } from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'mck-collapse-header',\n template: `\n \n \n {{title}}\n
\n
\n \n
\n \n
\n
\n {{description}}\n \n \n \n \n `,\n styleUrls: ['./collapse-header.component.scss'],\n})\nexport class CollapseHeaderComponent implements OnInit, OnDestroy {\n\n @Input() title: string;\n @Input() description: string;\n @Input() isLoading = false;\n\n @ViewChild('expansionPanel') expansionPanel: MatExpansionPanel;\n\n public isExpanded = new BehaviorSubject(false);\n private collapseSubscription: Subscription;\n\n constructor(private collapseService: CollapseService) {}\n\n ngOnInit(): void {\n this.collapseSubscription = this.collapseService.collapse$.subscribe(() => {\n if (this.expansionPanel) {\n this.expansionPanel.close(); // Close the panel\n }\n });\n }\n\n ngOnDestroy(): void {\n this.collapseSubscription.unsubscribe();\n }\n}\n","import { ChangeDetectionStrategy, Component, Inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\nexport interface RoomAvaibilityModalData {\n\theaderText: string,\n\tmessage: string,\n\tbuttonLabel: string,\n\tcallback: Function,\n shouldClose: boolean\n}\n\n@Component({\n selector: 'conflict-alert-modal',\n templateUrl: 'conflict-alert-modal.component.html',\n styleUrls: ['./conflict-alert-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class ConflictAlertModalComponent implements OnInit {\n constructor(public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public dialogData: RoomAvaibilityModalData) {\n }\n ngOnInit(): void {}\n\n public done() {\n this.dialogData?.callback(); this.dialogRef.close()\n }\n}\n","
\n \n
\n\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{{dialogData?.headerText}}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
{{dialogData?.message}}
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t\n\t\t\t\t\t \n\t\t\t\n
","import {Component, EventEmitter, Inject, Input, OnInit, Output} from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport {DialogEvent} from '@mckinsey-converge/base';\nimport {DateTZ, isToday} from '@mckinsey-converge/date-tz';\n\nexport interface ConflictsModalComponentData {\n room_name: string;\n conflicts: number[];\n copy_conflicts?: boolean;\n timezone: string;\n status?: string;\n}\n\n@Component({\n selector: 'app-conflicts-modal',\n templateUrl: './conflicts-modal.component.html',\n styleUrls: ['./conflicts-modal.component.scss']\n})\nexport class ConflictsModalComponent implements OnInit{\n public room_name: string;\n public conflicts: number[];\n public copy_conflicts: boolean;\n public timezone;\n public status: string;\n\n\n @Output() public event = new EventEmitter();\n\n constructor(@Inject(MAT_DIALOG_DATA) private _data: ConflictsModalComponentData){\n\n }\n\n public ngOnInit(){\n this.timezone = this._data.timezone;\n this.room_name = this._data.room_name\n this.conflicts = this._data.conflicts\n this.copy_conflicts = this._data.copy_conflicts\n this.status = this._data.status\n }\n\n public formatDate(date: number) {\n const dateTZ = new DateTZ({date: date*1000, is_local_tz: false, building_tz: this._data.timezone});\n const dateIsToday = isToday(dateTZ, this.timezone);\n const display = dateTZ.formatDate('ccc dd MMM yyyy');\n return `${display}${dateIsToday ? ' (Today)' : ''}`;\n }\n\n public continue(): void {\n this.event.emit({ reason: 'done' });\n }\n\n public close(): void {\n this.event.emit({ reason: 'close' });\n }\n\n public copy(): void {\n this.event.emit({ reason: 'action' });\n }\n\n\n}\n","
\n \n
\n\n
\n

Conflicts ({{conflicts.length}})

\n
\n The {{room_name}} room is not available on the following dates.\n Do you want to proceed without booking these days?\n
\n
\n The {{room_name}} room is not available on the following dates.\n You need to make individual bookings to cover these days, please.\n
\n
\n
\n
\n Date\n
\n
\n
\n {{formatDate(conflict)}}\n
\n
\n
\n
\n\n \n {{copy_conflicts ? 'Copy to clipboard' : 'Close'}}\n \n \n {{copy_conflicts ? 'Close' : 'Continue'}}\n \n\n","import {\n Component,\n OnInit,\n Input,\n Output,\n OnChanges,\n SimpleChanges,\n forwardRef,\n EventEmitter,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BaseClass } from '@mckinsey-converge/base';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\nexport interface IDateTzPickerOptions {\n /** DateTZ object. First selectable date */\n fromDateTz?: DateTZ;\n /** DateTZ object. Last selectable date */\n untilDateTz?: DateTZ;\n /** Luxon format string for formatting days of the week. Defaults to `DDD` */\n day_format?: string;\n /** Luxon format string for formatting active month. Defaults to `MMMM yyyy` */\n month_format?: string;\n}\n\ninterface IDateBlock {\n /** Timestamp value of the date */\n value: DateTZ;\n /** Day of the month to display */\n display: string;\n /** Whether block is the selected date */\n active: boolean;\n /** Whether block not selectable */\n disabled: boolean;\n /** Whether block outside the active month */\n non_month: boolean;\n /** Whether the block is today */\n today: boolean;\n /** Number of events on this block */\n count?: number;\n}\n\n@Component({\n selector: 'date-tz-calendar-widget',\n templateUrl: './date-tz-calendar-widget.component.html',\n styleUrls: ['./date-tz-calendar-widget.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateTzCalendarWidgetComponent),\n multi: true,\n },\n ],\n})\nexport class DateTzCalendarWidgetComponent\n extends BaseClass\n implements OnInit, OnChanges, ControlValueAccessor\n{\n /** CSS class to add to the root element of the component */\n @Input() public className = 'default';\n /** Counters of the events on given dates. Key format is `yyyy-MM-dd` */\n @Input() public counters: { [date: string]: number };\n /** Settings for the date picker component */\n @Input() public options: IDateTzPickerOptions;\n /** Offset of the display month from the current month */\n @Output() public month = new EventEmitter();\n\n public readonly weeks = new Array(6).fill(0);\n public selectedDateTz: DateTZ = DateNow();\n\n // R--- this is the date picker that needs to be TZ aware\n /** Offset of the month displayed from the current month */\n public offset = 0;\n /** Minimum offset for changing the month */\n public min_offset = -999999;\n /** Maximum offset for changing the month */\n public max_offset = 999999;\n /** Blocks representing the rendering details of the display days of the month */\n public date_list: IDateBlock[] = [];\n /** Name of the actively displayed month */\n public month_name = DateNow(new Date()).formatDate('MMMM yyyy');\n /** Name of the days of the week to display */\n public days_of_week = [];\n /** First selectable date */\n private fromTz: DateTZ;\n /** Last selectable date */\n private toTz: DateTZ;\n /** Luxon format string for formatting days of the week. Defaults to `dd` */\n private day_format = 'EEE';\n /** Luxon format string for formatting active month. Defaults to `MMMM yyyy` */\n private month_format = 'MMMM yyyy';\n /** Form control on change handler */\n private _onChange: (_: DateTZ) => void;\n /** Form control on touch handler */\n private _onTouch: (_: DateTZ) => void;\n\n private _today = DateNow();\n\n public get timezone() {\n return this.selectedDateTz?.building_tz || '';\n }\n\n public ngOnInit(): void {\n this.generateMonth();\n this.generateDaysOfTheWeek();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.options) {\n this.updateOptions();\n }\n if (changes.counters) {\n this.generateMonth();\n }\n }\n\n /** Change date using the given block */\n public setDate(item: IDateBlock) {\n this.selectedDateTz = item.value;\n if (this._onChange) {\n this._onChange(this.selectedDateTz);\n }\n this.generateMonth();\n }\n\n /**\n * Update offset to show the selected date 2\n */\n public updateDate(): void {\n if (!this.selectedDateTz) {\n return;\n }\n const now = this._today.startOfValue('month');\n const startOfMonthDateTz = this.selectedDateTz.startOfValue('month');\n if (startOfMonthDateTz.valid) {\n const difference = startOfMonthDateTz.dateDiff(\n now,\n 'months',\n 'months'\n );\n if (this.offset !== difference) {\n this.offset = Math.round(difference);\n this.month.emit(this.offset);\n }\n this.generateMonth();\n }\n }\n\n /**\n * Update local properties based off changes to settings\n */\n public updateOptions(): void {\n if (this.options) {\n // Setup from date\n if (this.options.fromDateTz) {\n const today = this._today.startOfValue('month');\n this.fromTz = this.options.fromDateTz.startOfValue('day');\n this.min_offset = Math.round(\n this.fromTz\n .startOfValue('month')\n .dateDiff(today, 'months', 'months')\n );\n } else if (this.fromTz) {\n this.fromTz = null; // R-- check if ok\n this.min_offset = -999999;\n }\n // Setup to date\n if (this.options.untilDateTz) {\n const today = this._today.startOfValue('month');\n this.toTz = this.options.untilDateTz.startOfValue('day');\n this.max_offset = this.toTz\n .startOfValue('month')\n .dateDiff(today, 'months', 'months');\n } else if (this.toTz) {\n this.toTz = null;\n this.max_offset = 999999;\n }\n if (this.options.month_format) {\n this.month_format = this.options.month_format || 'MMMM yyyy';\n }\n if (this.options.day_format) {\n this.day_format = this.options.day_format || 'EEE';\n this.generateDaysOfTheWeek();\n }\n // Update date blocks\n this.generateMonth();\n }\n }\n\n /**\n * Generate the display blocks for the days of the active month\n */\n private generateMonth(): void {\n this._today = new DateTZ({ date: Date.now(), is_local_tz: !this.timezone, building_tz: this.timezone });\n const startOfMonthDateTz = this._today.addValue({ months: this.offset });\n const active = this.selectedDateTz || DateNow();\n let startDate = startOfMonthDateTz\n .setValue({ day: 1 })\n .setValue({ weekday: 7 })\n .subtractValue({ weeks: 1 });\n this.date_list = [];\n for (let i = 0; i < 42; i++) {\n this.date_list.push({\n value: startDate,\n display: startDate.formatDate('d'),\n active: active.isSameDate(startDate, 'day'),\n non_month: !startOfMonthDateTz.isSameDate(startDate, 'month'),\n count: this.counters\n ? this.counters[startDate.formatDate('yyyy-MM-dd')] || 0\n : 0,\n disabled:\n (this.fromTz ? startDate.ms < this.fromTz.ms : false) ||\n (this.toTz ? startDate.ms > this.toTz.ms : false),\n today: this._today.isSameDate(startDate, 'day'),\n });\n startDate = startDate.addValue({ days: 1 });\n }\n this.month_name = startOfMonthDateTz.formatDate(this.month_format);\n }\n\n /**\n * Generate this weekdays to display in the header of the calendar\n */\n private generateDaysOfTheWeek() {\n let date = this._today.startOfValue('week');\n this.days_of_week = [];\n for (let i = 0; i < 7; i++) {\n this.days_of_week.push(date.formatDate(this.day_format));\n date = date.addValue({ days: 1 });\n }\n }\n\n /**\n * Changes the month offset by the given value.\n * Does nothing if the new month is not available to be selected\n * @param value Number of months to change the offset by\n */\n public changeMonth(value: number): void {\n const new_offset = Math.min(\n this.max_offset,\n Math.max(this.min_offset, this.offset + value)\n );\n this.offset = Math.round(new_offset);\n this.generateMonth();\n this.month.emit(this.offset);\n }\n\n /**\n * Reset the month offset to the month of the selected date\n */\n public reset() {\n const offset = this.offset;\n this.offset = Math.round(\n this._today.dateDiff(this.selectedDateTz, 'months', 'months')\n );\n if (offset !== this.offset) this.generateMonth();\n this.month.emit(this.offset);\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: DateTZ) {\n if (value) {\n this.selectedDateTz = value;\n this.updateDate();\n this.generateMonth();\n }\n }\n\n public readonly registerOnChange = (fn: (_: DateTZ) => void) => this._onChange = fn;\n public readonly registerOnTouched = (fn: (_: DateTZ) => void) => this._onTouch = fn;\n}\n","
\n
\n \n
\n \n
{{ month_name }}
\n = max_offset\"\n (click)=\"changeMonth(1)\"\n >\n
\n \n
\n \n \n \n \n \n \n \n \n \n
{{ item }}
\n \n {{ item.display }}\n
\n
{{item.count > 9 ? '+9' : item.count}}
\n \n
\n
\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n ViewChild,\n OnInit\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\n\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport {\n BehaviorSubject,\n Observable\n} from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { DateTzCalendarWidgetComponent } from '../date-tz-calendar-widget/date-tz-calendar-widget.component';\n\n@Component({\n selector: 'date-tz-date-picker',\n template: `\n \n {{label}}\n \n
{{ dateString | async }}
\n
\n \n
\n \n \n \n
\n \n Today\n \n
\n
\n \n `,\n styleUrls: ['./date-tz-date-picker.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateTzDatePickerComponent),\n multi: true\n }\n ]\n})\nexport class DateTzDatePickerComponent extends BaseDirective implements OnInit, ControlValueAccessor {\n @Input() public label?: string;\n /** Earliest date available the user is allowed to pick */\n @Input() public fromDateTz: DateTZ = DateNow(new Date());\n /** Latest date available the user is allowed to pick */\n @Input() public untilDateTz: DateTZ = DateNow(new Date()).endOfValue('day').addValue({ years: 1 });\n /** Position of the tooltip */\n @Input() public position: 'right' | 'left' = 'right';\n /** Offset of the tooltip */\n @Input() public offset: 'top' | 'bottom' = 'bottom';\n /** Whether form control is disabled */\n @Input() public disabled: boolean;\n // R-- possible TODO, address all_day that disables this input and displays \"Add Day for the value like the time picker\"\n @Input() public all_day: boolean = false;\n /** Whether to show the calendar tooltip */\n @Input() public icon_only: boolean = false;\n\n @Input() public counters: any;\n\n @Input() public initialDateSelectionTz?: DateTZ;\n\n @Output() public onSelect = new EventEmitter();\n\n @Input() public invalid?: boolean;\n\n @Input() public timezone?: string;\n\n @Input() public can_pick_today: boolean = true;\n\n /** Whether form control is invalid, touched and contains errors */\n @Input() public error?: boolean;\n\n public ngOnInit(): void {\n if (this.initialDateSelectionTz) {\n this.writeValue(this.initialDateSelectionTz)\n }\n }\n\n /** Whether to show the calendar tooltip */\n public show_tooltip: boolean;\n /** Form control on change handler */\n private _onChange: (_: DateTZ) => void;\n /** Form control on touch handler */\n private _onTouch: (_: DateTZ) => void;\n\n @ViewChild(MatMenuTrigger, { static: true }) private _trigger: MatMenuTrigger;\n @ViewChild(DateTzCalendarWidgetComponent, {static: true }) private _acaDatePicker: DateTzCalendarWidgetComponent;\n /** Currently selected date */\n public selectedDateTzValue = new BehaviorSubject(DateNow(new Date()));\n\n /** Display value for the current date */\n public get dateString(): Observable {\n return this.selectedDateTzValue.pipe(map(d => {\n const display = d.formatDate('ccc dd MMM yyyy');\n return `${display}${d.isSameDate(new DateTZ({ is_local_tz: false, building_tz: d.building_tz }), 'day') ? ' (Today)' : ''}`;\n }));\n }\n\n /** Whether date picker is open */\n public get is_open(): boolean {\n return this._trigger.menuOpen;\n }\n\n // date\n public get dateTzObservable(): Observable {\n return this.selectedDateTzValue.pipe(map(d => {\n return d \n }));\n\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(newValueTz: DateTZ) {\n // Keep hours and minutes of the old date\n const old_date = this.selectedDateTzValue.value;\n let newDateTz = newValueTz.setValue({ hour: old_date.dateHour, minute: old_date.minutes, second: old_date.second });\n\n // Check that new date is before from\n if (newDateTz.ms < this.fromDateTz.ms) {\n newDateTz = this.fromDateTz;\n }\n\n this.selectedDateTzValue.next(newDateTz);\n if (this._onChange) {\n this._onChange(newDateTz);\n }\n\n this.onSelect.emit(newDateTz);\n this.show_tooltip = false;\n }\n\n public goToToday() {\n const building_tz = this.timezone || this.fromDateTz.building_tz\n const is_local_tz = DateNow(new Date()).building_tz === building_tz\n this.setValue(new DateTZ({ is_local_tz, building_tz }));\n }\n\n public resetToLastSelection = () => this._acaDatePicker.updateDate();\n\n public onDatePickerClose() {\n this.resetToLastSelection();\n }\n /* istanbul ignore next */\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(selectedDateTz: DateTZ) {\n this.selectedDateTzValue.next(selectedDateTz);\n this.show_tooltip = false;\n }\n\n public readonly registerOnChange = (fn: (_: DateTZ) => void) => this._onChange = fn;\n public readonly registerOnTouched = (fn: (_: DateTZ) => void) => this._onTouch = fn;\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /** Set the state of the tooltip to closed after delay */\n public closeDatePicker() {\n this._trigger.closeMenu();\n }\n\n /** Set the state of the tooltip to closed after delay */\n public openDatePicker() {\n this._trigger.openMenu();\n }\n}\n","import {\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n BaseDirective,\n DurationGroup,\n nearestDurationToInput,\n} from '@mckinsey-converge/base';\nimport {\n ControlValueAccessor,\n FormControl,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\nimport {\n BehaviorSubject,\n combineLatest\n} from 'rxjs';\n\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { map } from 'rxjs/operators'; \nimport {\n DEFAULT_DURATION,\n defaultDurationGroups,\n generateDurationOptionsFromGroups\n} from '../utils/time.utils';\nimport { MatSelect } from '@angular/material/select';\nimport { convertLocalTimestampToTimezonedDateTz, convertTimezonedTimestampToLocalDateTz, DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n@Component({\n selector: 'date-tz-duration-field',\n template: `\n
\n {{label}}\n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n
\n `,\n styleUrls: ['./date-tz-duration-field.component.css'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateTzDurationFieldComponent),\n multi: true\n }\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class DateTzDurationFieldComponent extends BaseDirective implements OnInit, ControlValueAccessor, OnChanges {\n @Input() public label?: string;\n @Input() public required: boolean;\n @Input() max_length?: number;\n\n // /** Whether form field is disabled */\n // @Input() public disabled: boolean;\n /** Start date value to count from */\n @Input() public startDateTz: DateTZ;\n /** Set to limit the duration options */\n @Input() public extended?: boolean;\n /** Whether form all_day is enabled. */\n // R-- need to address all_day that disables this input and displays \"Add Day for the value\"\n @Input() public all_day: boolean = false;\n\n /**\n * Specify the slice of durations to use when generating options.\n */\n @Input() public durationGroups: DurationGroup[] = defaultDurationGroups;\n\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n /** Select field for selecting the time */\n @ViewChild('select') private select_field: MatSelect;\n\n /** Component will return a number of minutes */\n public value = new BehaviorSubject(DEFAULT_DURATION);\n\n public currentStartDateTz = new BehaviorSubject(DateNow(new Date()));\n\n public filterFormControl: FormControl = new FormControl();\n\n public nearestStep = combineLatest([this.filterFormControl.valueChanges, this.currentStartDateTz]).pipe(\n \n map(([value, currentStartDate]) => { \n /**\n * convert current start date/time to building time zone first\n * \n */\n const ms = convertTimezonedTimestampToLocalDateTz(currentStartDate.ms, currentStartDate.building_tz).ms;\n return nearestDurationToInput(this.durationGroups, ms, value); \n }\n ));\n\n public options = new BehaviorSubject[]>([]);\n\n public placeHolderOption = this.options.pipe(\n map(options => options.find(o => o.value === DEFAULT_DURATION))\n );\n\n public selectedOption = combineLatest([this.options, this.value]).pipe(\n map(([options, value]) => options.find(o => o.value === value))\n );\n\n public isSelected(option: SelectOption) {\n return this.value.pipe(map(t => t === option.value));\n }\n\n public isDisabled(option: SelectOption) {\n return this.max_length ? option.value > this.max_length : false;\n }\n\n public get isOpen() {\n return this.select_field?.panelOpen ?? false;\n }\n\n ngOnInit(): void {\n this.subscription('OptionsCalculation',\n this.currentStartDateTz.pipe(\n map(d => generateDurationOptionsFromGroups(d, this.durationGroups, this.extended))\n ).subscribe(next => {\n this.options.next(next);\n }));\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.timezone) {\n const dopt = generateDurationOptionsFromGroups(this.currentStartDateTz.value, this.durationGroups, this.extended);\n this.options.next(dopt);\n }\n if (changes.startDateTz) {\n this.currentStartDateTz.next(changes.startDateTz.currentValue);\n }\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: number): void {\n this.writeValue(new_value);\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n writeValue(obj: number): void {\n this.value.next(obj);\n if (this._onChange) {\n this._onChange(obj);\n }\n }\n\n // public setDisabledState(disabled: boolean) {\n // this.disabled = disabled;\n // }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n}\n","import {\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { MatSelect } from '@angular/material/select';\n\nimport {\n BaseDirective,\n closestToTimeSlotTz,\n nearestStepToInput,\n timeWithGmtOffsetFormatString,\n} from '@mckinsey-converge/base';\n\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport {\n generateAvailableTimes,\n generateAvailableTimesTz,\n} from '../utils/time.utils';\nimport { BehaviorSubject, combineLatest } from 'rxjs';\nimport { filter, map, withLatestFrom } from 'rxjs/operators';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { DateTime } from 'luxon';\n\n@Component({\n selector: 'date-tz-time-field',\n template: `\n
\n {{\n label\n }}\n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n
\n `,\n styleUrls: ['./date-tz-time-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateTzTimeFieldComponent),\n multi: true,\n },\n ],\n encapsulation: ViewEncapsulation.None,\n})\nexport class DateTzTimeFieldComponent\n extends BaseDirective\n implements OnInit, OnChanges, ControlValueAccessor\n{\n @Input() public label?: string;\n @Input() public required: boolean;\n /** Time step between each allowed time option */\n @Input() public step = 15;\n /** Whether form field is disabled */\n // @Input() public disabled: boolean;\n /** Whether past times are allowed */\n @Input() public noPastTimes = true;\n /** Representing the DateTZ object datetime to start time options from **/\n @Input() public fromDateTz: DateTZ = DateNow(new Date());\n // Disables this input and displays R--- \"All Day\" for the value\n @Input() public all_day: boolean = false;\n @Input() public show_current: boolean = false;\n @Input() public startFromDateTz: boolean = false;\n\n /** Form control on change handler */\n private _onChange: (_: DateTZ) => void;\n /** Form control on touch handler */\n private _onTouch: (_: DateTZ) => void;\n\n /** Select field for selecting the time */\n @ViewChild('select') private select_field: MatSelect;\n /** DateTZ object representing the currently set datetime */\n public selectedDateTz = new BehaviorSubject(\n closestToTimeSlotTz(DateNow(new Date()), this.step)\n );\n\n /** string representing the currently set datetime display value, needed for the input to display the slected value */\n public selectedTimeString = new BehaviorSubject(\n timeWithGmtOffsetFormatString(this.selectedDateTz.value)\n );\n\n public filterFormControl: FormControl = new FormControl();\n\n /** Available time blocks for the selected date */\n public options = new BehaviorSubject[]>(\n generateAvailableTimesTz(\n DateNow(),\n !this.noPastTimes,\n this.step,\n this.timezone,\n this.all_day,\n this.show_current\n ? [generateOptionForDateTz(DateNow())]\n : [],\n this.startFromDateTz\n )\n );\n\n public ngOnInit(): void {\n // Generate the time input options for the booking date\n this.options.next(\n generateAvailableTimesTz(\n this.selectedDateTz.value,\n !this.noPastTimes,\n this.step,\n this.timezone,\n this.all_day,\n this.show_current\n ? [generateOptionForDateTz(this.selectedDateTz.value)]\n : [],\n this.startFromDateTz\n )\n );\n // Subscribe to selected option changes\n this.subscription(\n 'dateTimeChanges',\n combineLatest([this.selectedDateTz])\n .pipe(\n map(([selectedDateTz]) => {\n /**\n * The selectedDateTz should already be pegged to the closest time slot, but\n * if the selected time rolls into the past this can correct it. // R--- verify this statement\n */\n return closestToTimeSlotTz(selectedDateTz, this.step);\n }),\n withLatestFrom(this.options),\n filter(\n ([date, timeOptions]: [\n DateTZ,\n SelectOption[]\n ]) => {\n // if new time slot opened up when date / time changes, add it here.\n return !timeOptions.find(\n (t) => t.value === date.formatDate('HH:mm')\n );\n }\n ),\n map(([dateTz, timeOptions]) => {\n // TODO probably an issue here with going from a future date and time earlier than now back to day showing null\n // Push the current date option in\n timeOptions.push({\n display: timeWithGmtOffsetFormatString(dateTz),\n shortDisplay: dateTz.formatDate('hh:mma'),\n value: dateTz,\n });\n\n // Sort the time options\n timeOptions.sort((a, b) =>\n `${a.value}`.localeCompare(`${b.value}`)\n );\n return timeOptions;\n })\n )\n .subscribe((next) => {\n return this.options.next(next);\n })\n );\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (\n changes.no_past_times ||\n changes.step ||\n changes.fromDateTz ||\n changes.all_day\n ) {\n // If there's a new date value then update the time options\n this.options.next(\n generateAvailableTimesTz(\n this.selectedDateTz.value,\n !this.noPastTimes,\n this.step,\n this.timezone,\n this.all_day,\n this.show_current\n ? [generateOptionForDateTz(this.selectedDateTz.value)]\n : [],\n this.startFromDateTz\n )\n );\n // If today and all day goes from on to off the selected value isn't going to be available.\n if (\n changes.all_day &&\n !changes.all_day.currentValue &&\n changes.all_day.previousValue\n ) {\n this.setValue(this.options.value[0].display);\n }\n }\n }\n\n /**\n * Getter if the time picker options are visiable or not\n */\n public get isOpen() {\n return this.select_field?.panelOpen ?? false;\n }\n\n /**\n * Getter to return the current form timestamp from the from date object\n */\n public get timezone(): string {\n return this.fromDateTz.building_tz;\n }\n\n /**\n * A filter for finding a matching value when using the input text search\n */\n public nearestStep = combineLatest([\n this.filterFormControl.valueChanges,\n this.selectedDateTz,\n ]).pipe(\n map(([value, selectedDateTz]) => {\n return nearestStepToInput(\n this.step,\n value,\n DateTime.now().valueOf()\n );\n })\n );\n\n /**\n * Default text displayed in the search field when the component initializes\n */\n public placeHolderOption = this.options.pipe(\n map((os) => os.length > 0 && os[0])\n );\n\n /**\n * Returns the selected option object by matching the selectedDateTz formated string with the option.display string\n */\n public selectedOption = combineLatest([\n this.options,\n this.selectedDateTz,\n ]).pipe(\n map(([options, selectedDateTz]) =>\n options.find(\n (o) =>\n o.display === timeWithGmtOffsetFormatString(selectedDateTz)\n )\n )\n );\n\n /**\n * Determines the visually selected value when the options list is visible.\n *\n * @param option DateTZ\n * @returns boolean\n */\n public isSelected(option: SelectOption) {\n return this.selectedTimeString.value === option.display;\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: DateTZ) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: DateTZ) => void): void {\n this._onTouch = fn;\n }\n\n /**\n * Method just used in unit tests to test disabling the input\n * @param disabled\n */\n // public setDisabledState(disabled: boolean) {\n // this.disabled = disabled;\n // }\n\n /**\n * Update the selected values\n * @param dateTz the DateTz object for the new time\n */\n public setSelectedValues(dateTz: DateTZ) {\n // Update the selected DateTz and string representations\n this.selectedTimeString.next(timeWithGmtOffsetFormatString(dateTz));\n this.selectedDateTz.next(dateTz);\n if (this._onChange) {\n this._onChange(dateTz);\n }\n }\n\n /**\n * Update the form field value\n * @param displayString The \"display\" value of this.options set by the time picker\n */\n public setValue(displayString: string): void {\n // Convert the display time string to the actual option object via an array find.\n const newTimeTz = this.options.value.find(\n (opt) => opt.display === displayString\n ).value;\n // Update the selected DateTz and string representations\n this.setSelectedValues(newTimeTz);\n // Send the\n if (newTimeTz) {\n if (this._onChange) {\n this._onChange(newTimeTz);\n }\n }\n }\n\n /**\n * Fires when the form control value is changed\n * @param dateTz The new value for the component\n */\n public writeValue(dateTz: DateTZ | null) {\n // Init is null ?\n if (dateTz != null) {\n // Update the selected DateTz and string representations\n this.setSelectedValues(dateTz);\n // Update the available options\n this.options.next(\n generateAvailableTimesTz(\n dateTz,\n !this.noPastTimes,\n this.step,\n dateTz.building_tz,\n this.all_day,\n this.show_current\n ? [generateOptionForDateTz(dateTz)]\n : [],\n this.startFromDateTz\n )\n );\n }\n }\n}\n\nfunction generateOptionForDateTz(dateTz: DateTZ): SelectOption {\n return {\n display: timeWithGmtOffsetFormatString(dateTz),\n shortDisplay: dateTz.formatDate('hh:mma'),\n value: dateTz, \n }\n}\n","import {\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n BaseDirective,\n nearestDurationToInput,\n DurationGroup,\n} from '@mckinsey-converge/base';\nimport {\n ControlValueAccessor,\n FormControl,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\nimport {\n BehaviorSubject,\n combineLatest\n} from 'rxjs';\n\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport {\n map\n} from 'rxjs/operators';\nimport {\n DEFAULT_DURATION,\n defaultDurationGroups,\n generateDurationOptionsFromGroups\n} from '../utils/time.utils';\nimport { MatSelect } from '@angular/material/select';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n@Component({\n selector: 'mck-duration-field',\n template: `\n
\n {{label}}\n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n
\n `,\n styleUrls: ['./duration-field.component.css'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DurationFieldComponent),\n multi: true\n }\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class DurationFieldComponent extends BaseDirective implements OnInit, ControlValueAccessor, OnChanges {\n @Input()\n public label: string;\n @Input()\n public required: boolean;\n @Input() max_length?: number;\n\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Start date value to count from */\n @Input() public startDate: number;\n /** Set to limit the duration options */\n @Input() public extended?: boolean;\n /** Representing desired timezone **/\n @Input() public timezone?: string = new DateTZ({ date: Date.now() }).local_tz;\n\n /**\n * Specify the slice of durations to use when generating options.\n */\n @Input() public durationGroups: DurationGroup[] = defaultDurationGroups;\n\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n /** Select field for selecting the time */\n @ViewChild('select') private select_field: MatSelect;\n\n public value = new BehaviorSubject(DEFAULT_DURATION);\n\n public currentStartDate = new BehaviorSubject(DateNow(new Date()));\n\n public filterFormControl: FormControl = new FormControl();\n\n public nearestStep = combineLatest([this.filterFormControl.valueChanges, this.currentStartDate]).pipe(\n map(([value, currentStartDate]) => nearestDurationToInput(this.durationGroups, currentStartDate.ms, value)\n ));\n\n public options = new BehaviorSubject[]>([]);\n\n public placeHolderOption = this.options.pipe(\n map(options => options.find(o => o.value === DEFAULT_DURATION))\n );\n\n public selectedOption = combineLatest([this.options, this.value]).pipe(\n map(([options, value]) => options.find(o => o.value === value))\n );\n\n public isSelected(option: SelectOption) {\n return this.value.pipe(map(t => t === option.value));\n }\n\n public isDisabled(option: SelectOption) {\n return this.max_length ? option.value > this.max_length : false;\n }\n\n public get isOpen() {\n return this.select_field?.panelOpen ?? false;\n }\n\n ngOnInit(): void {\n this.subscription('OptionsCalculation',\n this.currentStartDate.pipe(\n map(d => generateDurationOptionsFromGroups(d.toZone(this.timezone), this.durationGroups, this.extended))\n ).subscribe(next => {\n this.options.next(next);\n }));\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.timezone) {\n const dopt = generateDurationOptionsFromGroups(this.currentStartDate.value.toZone(this.timezone), this.durationGroups, this.extended);\n this.options.next(dopt);\n }\n if (changes.startDate) {\n // R--- refactor input param\n const date = new DateTZ({date: this.startDate})\n this.currentStartDate.next(date);\n }\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: number): void {\n this.writeValue(new_value);\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n writeValue(obj: number): void {\n this.value.next(obj);\n if (this._onChange) {\n this._onChange(obj);\n }\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'mck-error-message',\n template: `\n
\n
\n
\n \n \n \n
\n
\n `,\n styleUrls: ['./error-message.component.scss']\n})\nexport class ErrorMessageComponent {\n\n constructor() {\n }\n\n}\n","import {\n Component,\n Input,\n ViewContainerRef\n} from '@angular/core';\nimport { BaseTemplateComponent } from '../../base-template.component';\n\n@Component({\n selector: 'mck-calendar-icon',\n template: `\n \n \n \n \n \n `,\n})\nexport class CalendarIconComponent extends BaseTemplateComponent {\n\n @Input()\n fillClass?: string;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n}\n","import {\n Component,\n Input,\n ViewContainerRef\n} from '@angular/core';\nimport { BaseTemplateComponent } from '../../base-template.component';\n\n@Component({\n selector: 'mck-chevron-icon',\n template: `\n \n \n
\n \n \n \n
\n
\n \n
\n `\n})\nexport class ChevronIconComponent extends BaseTemplateComponent {\n\n @Input()\n fillClass?: string;\n\n @Input()\n up?: boolean;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n}\n","import {\n Component,\n Input,\n OnInit\n} from '@angular/core';\n\n@Component({\n selector: 'mck-close-icon',\n template: `\n \n \n \n \n `\n})\nexport class CloseIconComponent implements OnInit {\n\n @Input()\n fillClass?: string;\n\n constructor() {\n }\n\n ngOnInit(): void {\n }\n\n}\n","import {\n Component,\n Input,\n ViewContainerRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { BaseTemplateComponent } from '../base-template.component';\n\n@Component(\n {\n selector: 'mck-informational-image',\n template: `\n \n
\n
\n
\n \n
\n
\n
\n
\n `,\n styleUrls: ['./informational-image.component.scss'],\n encapsulation: ViewEncapsulation.None\n }\n)\nexport class InformationalImageComponent extends BaseTemplateComponent {\n\n @Input()\n public src: string;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n}\n","import {\n Component,\n Input,\n OnInit,\n ViewContainerRef\n} from '@angular/core';\nimport { BaseTemplateComponent } from '../base-template.component';\n\n@Component({\n selector: 'mck-label',\n template: `\n \n \n \n *\n \n \n `,\n styleUrls: ['./label.component.scss']\n})\nexport class LabelComponent extends BaseTemplateComponent implements OnInit {\n\n @Input()\n required = false;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n\n}\n","import {\n Component,\n Input,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { MatSelect } from '@angular/material/select';\nimport { SelectOption } from '../options/select-option';\n\n@Component({\n selector: 'mck-legend-dropdown',\n template: `\n
\n \n \n \n \n
\n \n \n \n {{ buildPlaceholder() }}\n \n
\n \n
\n \n
\n `,\n styleUrls: ['./legend-dropdown.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class LegendDropdownComponent {\n\n @Input()\n public placeholder: string;\n\n @Input()\n public options: SelectOption[] = [];\n\n @Input()\n public placeholderOpen?: string\n\n /** Select field for selecting the value */\n @ViewChild('select') private select_field: MatSelect;\n\n public get isOpen() {\n return this.select_field?.panelOpen ?? false;\n }\n\n public buildPlaceholder(){\n return this.isOpen && this.placeholderOpen ? this.placeholderOpen : this.placeholder\n }\n}\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n ViewChild,\n OnInit\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\n\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport {\n BehaviorSubject,\n Observable\n} from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { AcaDatePickerComponent } from '../aca-date-picker/aca-date-picker.component';\n\n@Component({\n selector: 'mck-date-picker',\n template: `\n \n Date\n \n
{{ dateString | async }}
\n
\n \n
\n \n \n \n
\n \n Today\n \n
\n
\n \n `,\n styleUrls: ['./mck-date-picker.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MckDatePickerComponent),\n multi: true\n }\n ]\n})\nexport class MckDatePickerComponent extends BaseDirective implements OnInit, ControlValueAccessor {\n /** Earliest date available the user is allowed to pick */\n @Input('from') public _from: number = DateNow(new Date()).ms;\n /** Latest date available the user is allowed to pick */\n @Input('to') public _to: number;\n /** Position of the tooltip */\n @Input() public position: 'right' | 'left' = 'right';\n /** Offset of the tooltip */\n @Input() public offset: 'top' | 'bottom' = 'bottom';\n /** Whether form control is disabled */\n @Input() public disabled: boolean;\n /** Whether to show the calendar tooltip */\n @Input() public icon_only: boolean = false;\n\n @Input() public initialDateSelection?: number;\n\n @Input() public invalid?: boolean;\n\n @Output() public onSelect = new EventEmitter();\n\n // R--- or is this the date picker to refactor. too tired.\n public ngOnInit(): void {\n if (this.initialDateSelection) {\n this.writeValue(this.initialDateSelection)\n }\n }\n\n /** Whether to show the calendar tooltip */\n public show_tooltip: boolean;\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n @ViewChild(MatMenuTrigger, { static: true }) private _trigger: MatMenuTrigger;\n @ViewChild(AcaDatePickerComponent, {static: true }) private _acaDatePicker: AcaDatePickerComponent;\n\n /** Currently selected date */\n public dateValue = new BehaviorSubject(DateNow(new Date()));\n\n /** First allowed date on the calendar */\n public get from(): number {\n return this._from || DateNow(new Date()).startOfValue('day').ms;\n }\n\n /** Current date value */\n public get until(): number {\n return this._to || DateNow(new Date()).endOfValue('day').addValue({ years: 1 }).ms;\n }\n\n /** Display value for the current date */\n public get dateString(): Observable {\n return this.dateValue.pipe(map(d => {\n const display = d.formatDate('ccc dd MMM yyyy');\n return `${display}${d.isSameDate(DateNow(new Date()), 'day') ? ' (Today)' : ''}`;\n }));\n }\n\n /** Whether date picker is open */\n public get is_open(): boolean {\n return this._trigger.menuOpen;\n }\n\n public get date(): Observable {\n return this.dateValue;\n\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: number) {\n // Keep hours and minutes of the old date\n const old_date = this.dateValue.value;\n const d = new DateTZ({date: new_value})\n let new_date = d\n .setValue({ hour: old_date.dateHour, minute: old_date.minutes })\n .ms;\n // Check that new date is before from\n if (new_date < this.from) {\n new_date = this.from;\n }\n const new_d = new DateTZ({ date: new_date })\n this.dateValue.next(new_d);\n if (this._onChange) {\n this._onChange(new_date);\n }\n this.onSelect.emit(new_date);\n this.show_tooltip = false;\n }\n\n public goToToday() {\n this.setValue(DateNow(new Date()).ms);\n }\n\n public resetToLastSelection = () => this._acaDatePicker.updateDate();\n\n public onDatePickerClose() {\n this.resetToLastSelection();\n }\n\n /* istanbul ignore next */\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: number) {\n const date = new DateTZ({date: value})\n this.dateValue.next(date);\n this.show_tooltip = false;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /** Set the state of the tooltip to closed after delay */\n public closeDatePicker() {\n this._trigger.closeMenu();\n }\n\n /** Set the state of the tooltip to closed after delay */\n public openDatePicker() {\n this._trigger.openMenu();\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n ViewContainerRef\n} from '@angular/core';\nimport { BaseTemplateComponent } from '../base-template.component';\n\n@Component({\n selector: 'mck-modal-button-row',\n template: `\n \n \n \n \n
\n \n {{secondaryLabel}}\n \n \n {{primaryLabel}}\n\n \n
\n \n
\n `,\n styleUrls: ['./modal-button-row.component.scss']\n})\nexport class ModalButtonRowComponent extends BaseTemplateComponent {\n\n @Input()\n primaryLabel?: string;\n\n /**\n * Specify if you want to disable the primary button\n */\n @Input()\n primaryDisabled?: boolean = false;\n\n /**\n * Used only if primaryLabel is specified.\n */\n @Output()\n public primarySubmit = new EventEmitter();\n\n /**\n * Specify if you want to show a secondary label button\n */\n @Input()\n secondaryLabel?: string;\n\n @Input()\n disableFixed: boolean = false;\n\n /**\n * Specify if you want to disable the secondary button\n */\n @Input()\n secondaryDisabled?: boolean = false;\n\n /**\n * Used only if secondaryLabel is specified.\n */\n @Output()\n public secondarySubmit = new EventEmitter();\n\n @Input()\n smallButtons?: boolean = false;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n\n}\n","import {\n Component,\n Input\n} from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'mck-modal',\n template: `\n \n
\n
\n \n
\n
\n

{{header}}

\n
\n
\n \n
\n `,\n styleUrls: ['./modal.component.scss']\n})\nexport class ModalComponent {\n\n @Input()\n header?: string;\n @Input() shouldClose?: boolean = true;\n\n constructor(private dialogRef: MatDialogRef) {\n }\n\n public close() {\n this.dialogRef.close();\n }\n}\n","import { Component, EventEmitter, Inject, OnInit, Output } from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { DialogEvent } from '@mckinsey-converge/base';\nimport { DateTZ, isToday } from '@mckinsey-converge/date-tz';\n\n\n@Component({\n selector: 'override-changes-modal',\n templateUrl: './override-changes-modal.component.html',\n styleUrls: ['./override-changes-modal.component.scss']\n})\nexport class OverrideChangesModalComponent implements OnInit{\n\n public edits;\n public timezone;\n\n @Output() public event = new EventEmitter();\n\n constructor(@Inject(MAT_DIALOG_DATA) private _data: OverrideChangesModalComponent){\n\n }\n\n public ngOnInit(){\n // this.edits = this._data.edits.sort((a, b) => a - b);\n\n // Function to convert epoch to 'YYYY-MM-DD' format\n const getDateString = (epoch) => {\n return new Date(epoch * 1000).toISOString().split('T')[0];\n };\n\n // Set to store unique date strings\n const uniqueDates = new Set();\n\n // Filter the edits array\n const filteredEdits = this._data.edits.filter(epoch => {\n const dateString = getDateString(epoch);\n if (!uniqueDates.has(dateString)) {\n uniqueDates.add(dateString);\n return true;\n }\n return false;\n });\n\n this.edits = filteredEdits;\n }\n\n public formatDate(date: number) {\n const dateTZ = new DateTZ({date: date*1000, is_local_tz: false, building_tz: this._data.timezone });\n const dateIsToday = isToday(dateTZ, this._data.timezone);\n const display = dateTZ.formatDate('ccc dd MMM yyyy');\n return `${display}${dateIsToday ? ' (Today)' : ''}`;\n }\n\n public continue(): void {\n this.event.emit({ reason: 'done' });\n }\n\n public close(): void {\n this.event.emit({ reason: 'close' });\n }\n}","
\n \n \n
\n\n \n \n \n\n

Overriding Changes

\n

Editing the series here will override all previous changes made to individual occurrences. Are you sure you want to proceed?

\n\n \n \n \n \n \n \n \n \n \n \n \n
Dates
{{formatDate(edit)}}
\n
\n\n\n \n \n","import {\n Pipe,\n PipeTransform\n} from '@angular/core';\n\n/**\n * Transforms input by returning a subset of items based on if the\n * any items include the search text based on passed objectKey.\n *\n * objectKey can be pipe separated keys. e.g: 'name|age'. Then it will check against all.\n */\n@Pipe({\n name: 'filter'\n})\nexport class FilterPipe implements PipeTransform {\n transform(items: any[], searchText: string, objectKey?: string): any[] {\n if (!items) return [];\n if (!searchText) return items;\n searchText = searchText.toLowerCase();\n const splitKeys = objectKey?.split('|') ?? [];\n return items.filter(it => {\n let included = false;\n splitKeys.forEach((key) => {\n if (it[key]?.toLowerCase().includes(searchText)) {\n included = true;\n }\n });\n if (splitKeys.length === 0) {\n return it.toLowerCase().includes(searchText);\n }\n return included;\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport {\n DomSanitizer,\n SafeHtml,\n SafeResourceUrl,\n SafeScript,\n SafeStyle,\n} from '@angular/platform-browser';\n\nexport enum SecurityContext {\n NONE = 0,\n HTML = 1,\n STYLE = 2,\n SCRIPT = 3,\n URL = 4,\n RESOURCE_URL = 5,\n}\n\n@Pipe({\n name: 'sanitize',\n})\nexport class SanitizePipe implements PipeTransform {\n constructor(private sanitizer: DomSanitizer) {}\n\n transform(\n value: string,\n type: 'resource' | 'url' | 'script' | 'style' | 'html' = 'html'\n ): SafeHtml | SafeResourceUrl | SafeScript | SafeStyle {\n switch (type) {\n case 'resource':\n return (\n this.sanitizer.sanitize(\n SecurityContext.RESOURCE_URL,\n value\n ) || ''\n );\n case 'url':\n return (\n this.sanitizer.sanitize(SecurityContext.URL, value) || ''\n );\n case 'script':\n return (\n this.sanitizer.sanitize(SecurityContext.SCRIPT, value) || ''\n );\n case 'style':\n return (\n this.sanitizer.sanitize(SecurityContext.STYLE, value) || ''\n );\n }\n return this.sanitizer.sanitize(SecurityContext.HTML, value) || '';\n }\n}\n","import {\n Component,\n forwardRef,\n Input,\n OnInit,\n ViewContainerRef\n} from '@angular/core';\nimport { SelectOption } from '../types';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\nimport { BaseTemplateComponent } from '../base-template.component';\nimport { BehaviorSubject } from 'rxjs';\n\n@Component({\n selector: 'mck-radio-select',\n template: `\n \n
\n {{label}}\n \n {{option.display}}\n \n
\n
\n `,\n styleUrls: ['./radio-select.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RadioSelectComponent),\n multi: true\n }\n ]\n})\nexport class RadioSelectComponent extends BaseTemplateComponent implements OnInit, ControlValueAccessor {\n\n @Input()\n label: string;\n\n @Input()\n required?: boolean;\n\n @Input()\n options: SelectOption[];\n\n public value = new BehaviorSubject | undefined>(undefined);\n\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Form control on change handler */\n private _onChange: (_: SelectOption) => void;\n /** Form control on touch handler */\n private _onTouch: (_: SelectOption) => void;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouch = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public setValue(value: string) {\n const obj = this.options.find(o => o.value === value);\n this.writeValue(obj);\n if (this._onChange) {\n this._onChange(obj)\n }\n }\n\n writeValue(obj: SelectOption): void {\n this.value.next(obj);\n }\n}\n","import { Component, Input, OnInit, ViewChild } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\nimport { OrganisationService, RecurrencePeriod, RecurrenceType, removeExpiredOcurrences, RepeatsOn } from \"@mckinsey-converge/data-common\";\nimport { DateTZ } from \"@mckinsey-converge/date-tz\";\nimport { first } from \"rxjs/operators\";\nimport { RecurrencePatternForm } from \"../recurrence-pattern-form/recurrence-pattern-form.component\";\n\n@Component({\n selector: 'recurrence-booking-form',\n templateUrl: './recurrence-booking-form.component.html',\n styleUrls: ['./recurrence-booking-form.component.scss']\n})\n\nexport class RecurringBookingForm implements OnInit {\n /** Form fields for booking */\n @Input() public form: FormGroup;\n\n public current_type: RecurrenceType; \n public recurrence_types: Array = [\n {type: RepeatsOn.PATTERN, label: 'Repeats on'},\n {type: RepeatsOn.DATE, label: 'Repeats on specific date'}\n ]\n\n public building_tz = \"\";\n\n @ViewChild(RecurrencePatternForm) pattern_form: RecurrencePatternForm;\n\n constructor(\n private _org: OrganisationService,\n ) {}\n\n public get recurrencePeriod(){\n return this.form.get('recurrence_period')\n }\n\n public ngOnInit(): void {\n this._org.initialised.pipe(first((_) => _)).subscribe(() => {\n this.building_tz = this._org?.building?.timezone || 'America/Chicago';\n })\n if(this.recurrencePeriod.value === RecurrencePeriod.LIST){\n this.current_type = this.recurrence_types[1];\n removeExpiredOcurrences(this.form)\n }else{\n this.current_type = this.recurrence_types[0];\n }\n }\n\n public onChangeType(value: string) {\n this.current_type = this.recurrence_types.filter((type) => type.type === value)[0]\n if(this.current_type.type === RepeatsOn.PATTERN){\n this.recurrencePeriod.setValue(this.pattern_form.recurrencePatternFormControl.value)\n }else{\n this.recurrencePeriod.setValue(RecurrencePeriod.LIST)\n }\n }\n\n public dateToBuildingTz(date?: number){\n return new DateTZ({date, building_tz: this.building_tz, is_local_tz: false})\n }\n\n public get error(){\n const recurrence_starts = this.form.controls.recurrence_starts\n const recurrence_days = this.form.controls.recurrence_days\n return recurrence_starts.invalid || recurrence_days.invalid\n }\n\n}\n","
\n \n
\n \n \n {{recurrence_types[0].label}}\n \n \n \n
\n
\n \n \n {{recurrence_types[1].label}}\n \n \n \n
\n
\n
\nThe recurrence pattern is not valid.","import { Component, Input, OnInit, ViewChild } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\nimport { MatMenuTrigger } from \"@angular/material/menu\";\nimport { BaseDirective, closestToTimeSlotTz } from \"@mckinsey-converge/base\";\nimport { OrganisationService } from \"@mckinsey-converge/data-common\";\nimport { DateNow, DateTZ,toMiddayUTC } from \"@mckinsey-converge/date-tz\";\n\n@Component({\n selector: 'recurrence-date-form',\n templateUrl: './recurrence-date-form.component.html',\n styleUrls: ['./recurrence-date-form.component.scss']\n})\n\nexport class RecurrenceDateForm extends BaseDirective implements OnInit {\n /** Form fields for booking */\n @Input() public form: FormGroup;\n @Input() disabled: boolean;\n @ViewChild(MatMenuTrigger, { static: true }) private _trigger: MatMenuTrigger;\n\n public selected_dates: Array = []\n public timezone: string = '';\n public nowTz: DateTZ = DateNow(new Date());\n public fromDateTz: DateTZ = this.nowTz.clone();\n public untilDateTz: DateTZ = this.fromDateTz.endOfValue('day').addValue({ years: 1 });\n public dateTz: DateTZ = DateNow(new Date());\n\n public get recurrenceStarts(){\n return this.form.get('recurrence_starts');\n }\n\n public get formDateTz(){\n return this.form.get('dateTz');\n }\n\n constructor (private _org: OrganisationService) {\n super();\n }\n\n public ngOnInit(): void {\n // Setup some data to only run once, the previous giters were hogs\n this.timezone = this.form.get('timezone').value;\n this.nowTz = new DateTZ({ date: Date.now(), is_local_tz: false, building_tz: this.timezone });\n // R--- The fromDateTz is curious, would it make sense to be based on the form dateTz?\n this.fromDateTz = this.nowTz.clone()\n this.untilDateTz = this.fromDateTz.endOfValue('day').addValue({ years: 1 });\n\n if(this.recurrenceStarts.value){\n const tempForSort = [...this.recurrenceStarts.value]; // due to cannot assign to read only property '0' of object '[object Array]'\n this.selected_dates = tempForSort.sort((d1: DateTZ, d2: DateTZ) => d1.ms - d2.ms);\n }\n this.subscription('ocurrenceChanges', this.recurrenceStarts.valueChanges\n .subscribe(() => {\n this.selected_dates = [...this.recurrenceStarts.value]\n })\n ); \n }\n\n /**\n * Add value to the list of selected dates\n * @param newDateTz\n */\n public addDate(newDateTz: DateTZ) {\n const d = newDateTz.clone();\n const start_date = this.formDateTz.value;\n let new_date = d.setValue({hour: start_date.dateHour, minute: start_date.minutes})\n \n /** Prevent user from selecting past dates */\n if (new_date.isBeforeDate(this.fromDateTz)) {\n new_date = this.fromDateTz;\n }\n\n /** Prevent user from selecting the same date more than once */\n const is_selected = this.selected_dates.filter((date: DateTZ)=> new_date.isSameDate(date, 'day'))\n if(is_selected.length){\n return\n }\n \n this.selected_dates.push(new_date);\n this.recurrenceStarts.setValue(this.selected_dates.sort((d1, d2) => d1.ms - d2.ms));\n this.setDateTzForm();\n }\n\n /**\n * \n * @param dateMsValue: number\n * @returns \n */\n public setPickerToGivenDate(dateTsValue: DateTZ) {\n this.fromDateTz = dateTsValue.clone();\n }\n\n /**\n * Function calls on close of date picker without date selection\n */\n public onDatePickerClose = () => {\n this.setPickerToGivenDate(this.nowTz)\n };\n\n public goToToday() {\n this.addDate(this.nowTz);\n this.setPickerToGivenDate(this.nowTz);\n }\n\n public closeDatePicker() {\n this._trigger.closeMenu();\n }\n\n public openDatePicker() {\n this._trigger.openMenu();\n }\n\n public deleteDate(date: DateTZ) {\n const index = this.selected_dates.map((d: DateTZ) => d.ms).indexOf(date.ms)\n this.selected_dates.splice(index, 1)\n this.recurrenceStarts.setValue(this.selected_dates)\n this.setDateTzForm()\n }\n\n public isToday(date) {\n return new DateTZ({\n date: toMiddayUTC(date).ms,\n is_local_tz: false,\n building_tz: this.timezone,\n }).isSameDate(\n new DateTZ({\n date: Date.now(),\n is_local_tz: false,\n building_tz: this.timezone,\n }),\n 'day'\n );\n }\n\n public formatDate(date: DateTZ){\n const isToday = this.isToday(date);\n const display = date.formatDate('ccc dd MMM yyyy');\n\n return `${display}${isToday ? ' (Today)' : ''}`;\n }\n\n private setDateTzForm(): void {\n if (this.selected_dates.length === 0)\n return;\n\n const tz = this._org.building.timezone;\n const date_now = DateNow(new Date()).toZone(tz);\n let dateTz = this.selected_dates[0].clone();\n\n dateTz = dateTz.setValue({\n hour: (this.formDateTz.value as DateTZ).hours,\n minute: (this.formDateTz.value as DateTZ).minutes\n });\n\n if (this.selected_dates[0].isSameDate(this.nowTz, \"day\") && dateTz.hours < date_now.hours) {\n const { minutes: minute, hours: hour } = closestToTimeSlotTz(this.nowTz, 15);\n dateTz = dateTz.setValue({ minute, hour, second: 0 });\n }\n\n this.formDateTz.setValue(dateTz);\n }\n}\n","
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
DateAction
{{formatDate(date)}}Delete
\n
[+] Add another date
\n \n
\n \n Today\n \n
\n
\n
\n
","import { Component, Input, OnInit } from \"@angular/core\";\nimport { FormGroup, Validators } from \"@angular/forms\";\nimport { BaseDirective, closestToTimeSlotTz } from \"@mckinsey-converge/base\";\nimport { arrayWithValues, generateWeekDays, RecurrencePeriod, recurrencePeriodToDurationType, RepeatPeriod, validDateTZ, WeekDays } from \"@mckinsey-converge/data-common\";\nimport { DateNow, DateTZ } from \"@mckinsey-converge/date-tz\";\n\n@Component({\n selector: 'recurrence-pattern-form',\n templateUrl: './recurrence-pattern-form.component.html',\n styleUrls: ['./recurrence-pattern-form.component.scss']\n})\n\nexport class RecurrencePatternForm extends BaseDirective implements OnInit {\n /** Form fields for booking */\n @Input() public form: FormGroup;\n @Input() disabled: boolean;\n\n /** Range of dates for the Start Date Picker*/\n public nowTz: DateTZ = DateNow(new Date());\n public fromStartTz: DateTZ = this.nowTz.setValue({ minute: Math.ceil(this.nowTz.minutes / 5) * 5 });\n public untilTz: DateTZ = this.nowTz.addValue({ years: 1 }).endOfValue('day');\n public timezone: string = '';\n \n\n /** Range of dates for the End Date Picker*/\n public fromEndTz: DateTZ;\n\n public repeat_period_options: Array = [\n {label: 'Day', id: RecurrencePeriod.DAILY},\n {label: 'Week',id: RecurrencePeriod.WEEKLY},\n {label: 'Month', id: RecurrencePeriod.ABSOLUTE_MONTHLY}\n ]\n public week_days: Array = []\n\n public repeat_every_options\n\n\n public get recurrenceDateStartTzFormControl() {\n return this.form.get('dateTz')\n }\n\n public get recurrenceEndFormControl(){\n return this.form.get('recurrence_endTz')\n }\n\n public get recurrencePeriodFormControl(){\n return this.form.get('recurrence_period')\n }\n\n public get recurrenceIntervalFormControl(){\n return this.form.get('recurrence_interval')\n }\n\n public get recurrencePatternFormControl(){\n return this.form.get('recurrence_pattern')\n }\n\n public get recurrenceDaysFormControl(){\n return this.form.get('recurrence_days')\n }\n\n public ngOnInit(): void {\n // Setup some data to only run once, the previous giters were hogs\n this.timezone = this.form.get('timezone').value;\n this.nowTz = new DateTZ({ date: Date.now(), is_local_tz: false, building_tz: this.timezone });\n // R--- The from date is curious, why isn't it based on the form dateTz?\n this.repeat_every_options = new Array(1)\n this.fromStartTz = closestToTimeSlotTz(this.nowTz, 15)\n this.untilTz = this.nowTz.addValue({ years: 1 }).endOfValue('day');\n this.fromEndTz = this.fromStartTz.addValue({days: 1})\n\n this.setEndDateFromStartDate(this.recurrenceDateStartTzFormControl.value) //make sure end date is after start date\n\n if(!this.recurrencePeriodFormControl.value){\n this.recurrencePeriodFormControl.setValue(RecurrencePeriod.WEEKLY)\n }\n\n if(this.recurrencePeriodFormControl.value !== RecurrencePeriod.LIST){\n this.recurrencePatternFormControl.setValue(this.recurrencePeriodFormControl.value)\n }\n\n this.week_days = generateWeekDays(this.recurrenceDateStartTzFormControl.value.ms, { building_tz: this.fromStartTz.building_tz })\n this.generateMaxIntervals()\n\n if(this.recurrenceDaysFormControl.value.length > 0){\n this.week_days = this.week_days.map((day) => \n ({...day, active: this.recurrenceDaysFormControl.value.includes(day.full_name)})\n )\n }\n\n if(!this.recurrenceDaysFormControl.value.length && this.recurrencePeriodFormControl.value === RecurrencePeriod.WEEKLY){\n const current_days = this.week_days.filter((day) => day.active).map((day)=>day.full_name)\n this.recurrenceDaysFormControl.setValue(current_days)\n }\n\n this.generateOcurrenceList()\n\n this.subscription('startTimeChanges', this.recurrenceDateStartTzFormControl.valueChanges\n .subscribe((next) => {\n this.setEndDateFromStartDate(next) \n })\n );\n\n this.subscription('endTimeChanges', this.recurrenceEndFormControl.valueChanges\n .subscribe(() => {\n this.generateMaxIntervals();\n })\n );\n \n this.subscription('recurrencePeriodFormControlChanges', this.recurrencePeriodFormControl.valueChanges\n .subscribe(() => {\n this.generateMaxIntervals();\n })\n ); \n }\n\n public setEndDateFromStartDate(startDateTz: DateTZ){\n let end_date = this.recurrenceEndFormControl.value.setValue({hour: startDateTz.dateHour, minute: startDateTz.minutes})\n\n /**Update the End date picker range */\n this.fromEndTz = startDateTz.isSameDate(this.untilTz,'day') ? startDateTz : startDateTz.addValue({days: 1})\n\n if(end_date.isBeforeDate(this.fromEndTz)){\n end_date = this.fromEndTz\n }\n\n this.recurrenceEndFormControl.setValue(end_date)\n\n this.generateMaxIntervals()\n this.updateActiveWeekday() \n }\n\n public setRepeatPeriod(value: RecurrencePeriod){\n this.updateValidators(value)\n this.recurrencePeriodFormControl.setValue(value);\n this.recurrencePatternFormControl.setValue(value);\n this.recurrenceIntervalFormControl.setValue(1)\n this.generateOcurrenceList();\n }\n\n public setRepeatEvery(value: number){\n this.recurrenceIntervalFormControl.setValue(value)\n this.generateOcurrenceList()\n }\n\n public repeatTimeString(value: string){\n return this.recurrenceIntervalFormControl.value !== 1 ? `${value}(s)` : value\n }\n\n public get displayWeekdays(){\n return this.recurrencePatternFormControl.value === RecurrencePeriod.WEEKLY\n }\n\n /* Check if selected interval is valid and reset to 1 if not*/\n private validateRecurrenceInterval = () => {\n if(this.repeat_every_options.length < this.recurrenceIntervalFormControl.value){\n this.recurrenceIntervalFormControl.setValue(1)\n } \n };\n\n /**\n * Generate max value for dorpdown interval\n */\n public generateMaxIntervals(){\n const start = this.recurrenceDateStartTzFormControl.value;\n const date_diff = this.recurrenceEndFormControl.value.dateDiff(start, this.periodToDurationType, this.periodToDurationType)\n //If no diff default to 1\n this.repeat_every_options = new Array(Math.round(date_diff) || 1)\n this.validateRecurrenceInterval();\n if(this.recurrencePeriodFormControl.value !== RecurrencePeriod.LIST){\n this.generateOcurrenceList()\n }\n }\n\n /**\n * Generate ocurrence list base on the selected interval\n */\n public generateOcurrenceList() {\n\n /**If selected period is list then we don't want \n * to generate a list based on the repeats on selections*/\n if(this.recurrencePeriodFormControl.value === RecurrencePeriod.LIST){\n return\n }\n\n const occurrence = []\n const first_date = this.recurrenceDateStartTzFormControl.value;\n let start = first_date\n const end = this.recurrenceEndFormControl.value;\n const interval = this.recurrenceIntervalFormControl.value\n const recurr_days = this.week_days.filter(day => day.active)\n /**\n * isLastDayOfMonth : Boolean\n * flag - to generate last day of every month in case of day or month reccuring booking if start date is last day of month\n */\n // const isLastDayOfMonth = first_date.date.day === first_date.date.daysInMonth && this.recurrencePeriodFormControl.value === RecurrencePeriod.ABSOLUTE_MONTHLY;\n const isLastDayOfMonth = first_date.dateDay === 31 && this.recurrencePeriodFormControl.value === RecurrencePeriod.ABSOLUTE_MONTHLY ;\n \n if(this.recurrencePeriodFormControl.value === RecurrencePeriod.WEEKLY){\n start = start.startOfValue('week')\n }\n\n while (end.dateDiff(start.startOfValue('day'), this.periodToDurationType, this.periodToDurationType) >= 0) {\n \n if(this.recurrencePeriodFormControl.value !== RecurrencePeriod.WEEKLY){\n occurrence.push(start) \n start = start.addValue({[this.periodToDurationType]: interval}, isLastDayOfMonth);\n /**\n * IF - should only consider resetting start under mentioned condition of ticket - https://acaprojects.atlassian.net/browse/MCK-2085\n * In summery - If user select any date except 31st, other months in the series (no matter 30 or 31 day month) should have same date select as start date.\n * If user select 31st as an start date, other month in the seleries should have select last day of the month (30th/31st/28th/29th).\n * Exception for February - February should select 28th or 29th If in above both selection includes date between 28th - 31st.\n * \n */\n if(start.dateDay !== first_date.dateDay && start.dateDay !== start.date.daysInMonth && this.recurrencePeriodFormControl.value === RecurrencePeriod.ABSOLUTE_MONTHLY) {\n start = start.setValue({day: first_date.dateDay});\n } \n }else {\n recurr_days.forEach((day)=>{\n const date = start.addValue({days: day.day_index})\n if((date.isAfterDate(first_date) || date.isSameDate(first_date, 'day')) && \n (date.isBeforeDate(end) || date.isSameDate(end, 'day'))){\n occurrence.push(date)\n }\n })\n start = start.addValue({[this.periodToDurationType]: interval})\n }\n }\n\n this.form.controls.recurrence_count.setValue(occurrence.length)\n this.form.controls.recurrence_starts.setValue(occurrence.sort((d1, d2) => d1.ms - d2.ms))\n \n }\n\n public get periodToDurationType(){\n const period = this.recurrencePeriodFormControl.value\n return recurrencePeriodToDurationType(period)\n }\n\n /**\n * Update active weekday in the weekdays array\n */\n private updateActiveWeekday() {\n const _week_days = this.week_days.map((day)=>{\n if(this.recurrenceDaysFormControl.value.includes(day.full_name)){\n return {...day, active: true}\n }else{\n return {...day, active: false}\n }\n })\n this.week_days = [..._week_days] \n }\n\n public setWeekDays(new_day: WeekDays){\n const days = this.recurrenceDaysFormControl.value\n if(this.disabled){\n return\n }\n\n if(!new_day.active){\n days.push(new_day.full_name)\n }else{\n const current_index = days.indexOf(new_day.full_name)\n days.splice(current_index,1)\n }\n this.recurrenceDaysFormControl.setValue([...days])\n this.updateActiveWeekday()\n this.generateOcurrenceList()\n }\n\n /**Update the recurrence days validator if period changes */\n public updateValidators(value: RecurrencePeriod){\n if(value === RecurrencePeriod.WEEKLY && this.recurrencePeriodFormControl.value !== RecurrencePeriod.WEEKLY){\n const arrayValidators = [Validators.required];\n arrayValidators.push(arrayWithValues);\n this.recurrenceDaysFormControl.setValidators(arrayValidators);\n this.recurrenceDaysFormControl.updateValueAndValidity();\n }else if(value !== RecurrencePeriod.WEEKLY && this.recurrencePeriodFormControl.value === RecurrencePeriod.WEEKLY){\n this.recurrenceDaysFormControl.clearValidators();\n this.recurrenceDaysFormControl.updateValueAndValidity();\n }\n }\n}\n","
\n
\n \n \n \n Date and time must be in the future\n
\n
\n \n \n \n Date and time must be in the future\n
\n
\n
\n \n
\n \n \n \n {{ i + 1}}\n \n \n \n \n \n \n {{ repeatTimeString(option.label) }}\n \n \n \n
\n
\n
\n \n
\n
\n {{day.id}}\n
\n
\n
\n
\n
","import {\n Component,\n Input,\n ViewContainerRef\n} from '@angular/core';\nimport { BaseTemplateComponent } from '../base-template.component';\nimport { SelectOption } from '../types';\n\n@Component({\n selector: 'mck-select-option',\n template: `\n \n \n \n \n {{ option.display }}\n \n \n `,\n styleUrls: ['./select-option.component.css']\n})\nexport class SelectOptionComponent extends BaseTemplateComponent {\n\n @Input()\n option: SelectOption;\n\n @Input()\n selected: boolean;\n\n /**\n * If true, we still display as if it wasn't disabled.\n */\n @Input()\n ignoreDisabled = false;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n\n}\n","import {\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n BehaviorSubject,\n combineLatest\n} from 'rxjs';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { map } from 'rxjs/operators';\nimport { MatSelect } from '@angular/material/select';\nimport {\n ControlValueAccessor,\n FormControl,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\n\n@Component({\n selector: 'mck-select',\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectComponent),\n multi: true\n }\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class SelectComponent implements OnInit, OnChanges, ControlValueAccessor {\n\n @Input()\n public label: string;\n\n @Input()\n public required: boolean;\n\n @Input()\n public options: SelectOption[] = [];\n\n @Input()\n public selectedValue: SelectOption | undefined;\n\n /**\n * When true, can filter by searching on the input.\n */\n @Input()\n public searchEnabled = false;\n\n @Input()\n public splitDisplay = false;\n\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n\n @Input()\n public noEntriesFoundLabel: string;\n\n @Input()\n public showDivider: boolean = false\n\n /** Form control on change handler */\n private _onChange: (_: SelectOption) => void;\n /** Form control on touch handler */\n private _onTouch: (_: SelectOption) => void;\n\n public filterFormControl: FormControl = new FormControl();\n\n public value = new BehaviorSubject(this.selectedValue || this.options[0]?.value);\n\n /** Available time blocks for the selected date */\n public _options = new BehaviorSubject[]>(this.options);\n\n /** Select field for selecting the value */\n @ViewChild('select') private select_field: MatSelect;\n\n public selectedOption = combineLatest([this._options, this.value]).pipe(\n map(([options, value]) => options.find(o => o.value === value))\n );\n\n public placeHolderOption = this._options.pipe(\n map(os => os.length > 0 && os[0])\n );\n\n public isSelected(option: SelectOption) {\n return this.value.pipe(map(t => t === option.value));\n }\n\n public get isOpen() {\n return this.select_field?.panelOpen ?? false;\n }\n\n\n constructor() {\n }\n\n public ngOnInit(): void {\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.options) {\n this._options.next(this.options);\n this.value.next(this.selectedValue || this.options?.[0]?.value);\n }\n if (changes.selectedValue) {\n this.value.next(this.selectedValue?.value);\n }\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: string): void {\n this.value.next(new_value);\n if (this._onChange) {\n this._onChange(this.options.find(f => f.value === new_value));\n }\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: SelectOption | null) {\n if (value != null) {\n this.value.next(value.value);\n }\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: SelectOption) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: SelectOption) => void): void {\n this._onTouch = fn;\n }\n\n}\n","
\n {{label}}\n \n \n \n \n \n \n \n \n \n \n
\n \n
\n \n
\n","import {\n Component,\n EventEmitter,\n Input,\n Output\n} from '@angular/core';\n\n@Component({\n selector: 'mck-selected-chip-count',\n template: `\n \n {{count}}\n \n \n `,\n styleUrls: ['./selected-chip-count.component.scss']\n})\nexport class SelectedChipCountComponent {\n\n @Input()\n count: number;\n\n @Output()\n close = new EventEmitter();\n\n}\n","import {\n Component,\n Input,\n OnInit,\n ViewContainerRef\n} from '@angular/core';\nimport { BaseTemplateComponent } from '../base-template.component';\n\nexport enum SpacerMode {\n /**\n * If vertical, it expands in the vertical direction. Size is width.\n */\n Vertical = 'vertical',\n /**\n * If horizontal, it expands in the horizontal direction. Size is height.\n */\n Horizontal = 'horizontal',\n}\n\n@Component({\n selector: 'mck-spacer',\n template: `\n \n
\n
\n
\n
\n
\n `,\n styleUrls: ['./spacer.component.css'],\n})\nexport class SpacerComponent extends BaseTemplateComponent implements OnInit {\n SpacerMode = SpacerMode;\n\n @Input()\n size: string;\n\n @Input()\n mode: SpacerMode = SpacerMode.Horizontal;\n\n @Input()\n autoSize?: boolean;\n\n @Input()\n spacerClass?: string;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n\n\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output\n} from '@angular/core';\nimport { SelectOption } from '@mckinsey-converge/ui';\n\n@Component({\n selector: 'mck-switch-group',\n template: `\n
\n {{title}}\n {{option.display}}\n
\n `,\n styleUrls: ['./switch-group.component.scss']\n})\nexport class SwitchGroupComponent implements OnInit {\n\n @Input()\n title: string;\n\n @Input()\n options: SelectOption[];\n\n @Input()\n selectedOptions: SelectOption[] = [];\n\n @Output()\n optionChecked = new EventEmitter>();\n\n constructor() {\n }\n\n ngOnInit(): void {\n }\n\n public onCheckedChange(option: SelectOption) {\n this.optionChecked.emit(option);\n }\n\n public isSelected(option: SelectOption) {\n return !!this.selectedOptions.find(s => s.value === option.value);\n }\n}\n","import {\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\nimport { MatSelect } from '@angular/material/select';\n\nimport {\n BaseDirective,\n closestToTimeSlot,\n nearestStepToInput,\n timeWithGmtOffsetFormatString\n} from '@mckinsey-converge/base';\n\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { generateAvailableTimes } from '../utils/time.utils';\nimport {\n BehaviorSubject,\n combineLatest\n} from 'rxjs';\nimport {\n filter,\n map,\n withLatestFrom\n} from 'rxjs/operators';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { DateTime } from 'luxon';\n\n@Component({\n selector: 'mck-time-field',\n template: `\n
\n {{label}}\n \n \n \n \n \n \n \n \n \n
\n \n
\n \n
\n `,\n styleUrls: ['./time-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TimeFieldComponent),\n multi: true\n }\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class TimeFieldComponent extends BaseDirective implements OnInit, OnChanges, ControlValueAccessor {\n @Input()\n public label: string;\n @Input()\n public required: boolean;\n /** Time step between each allowed time option */\n @Input() public step = 15;\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Whether past times are allowed */\n @Input() public noPastTimes = true;\n /** Representing the date from start **/\n @Input() public from: number;\n /** Representing desired timezone **/\n @Input() public timezone?: string = new DateTZ({ date: Date.now() }).local_tz;\n\n // R-- Which time field is going to be used, there's too many\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n /** Select field for selecting the time */\n @ViewChild('select') private select_field: MatSelect;\n\n /** String representing the currently set date */\n public date = new BehaviorSubject(DateNow(new Date()).ms);\n\n public filterFormControl: FormControl = new FormControl();\n\n public nearestStep = combineLatest([\n this.filterFormControl.valueChanges,\n this.date]).pipe(\n map(([value, date]) => nearestStepToInput(this.step, value, DateTime.now().valueOf()))\n );\n\n /** String representing the currently set time */\n public value = new BehaviorSubject(closestToTimeSlot(DateTime.now(), this.step).toFormat('HH:mm'));\n\n /** Available time blocks for the selected date */\n public options = new BehaviorSubject[]>(generateAvailableTimes(DateNow(new Date()).ms, !this.noPastTimes, this.step, this.timezone));\n\n public selectedOption = combineLatest([this.options, this.value]).pipe(\n map(([options, value]) => options.find(o => o.value === value))\n );\n\n public placeHolderOption = this.options.pipe(\n map(os => os.length > 0 && os[0])\n );\n\n public isSelected(option: SelectOption) {\n return this.value.pipe(map(t => t === option.value));\n }\n\n public get isOpen() {\n return this.select_field?.panelOpen ?? false;\n }\n\n public ngOnInit(): void {\n // Generate the time input options for the booking date\n this.options.next(generateAvailableTimes(this.date.value, !this.noPastTimes, this.step, this.timezone));\n\n // Subscribe to selected option changes\n this.subscription('dateTimeChanges',\n combineLatest([\n this.date\n ]).pipe(\n map(([date]) => {\n // R--- The time input needing to be TZ aware.\n const closestTimeSlot = closestToTimeSlot(DateTime.fromMillis(date.valueOf()), this.step);\n // Need to return the date with building timezone or the HH:mm representation will no match the option values\n return new DateTZ({date: closestTimeSlot.valueOf(), is_local_tz:false, building_tz: this.timezone});\n }),\n withLatestFrom(this.options),\n filter(([date, timeOptions]: [DateTZ, SelectOption[]]) => {\n // if new time slot opened up when date / time changes, add it here.\n return !timeOptions.find(t => t.value === date.formatDate('HH:mm'));\n }),\n map(([date, timeOptions]) => {\n // TODO probably an issue here with going from a future date and time earlier than now back to day showing null\n // Push the current date option in\n timeOptions.push({\n display: timeWithGmtOffsetFormatString(date),\n value: date.formatDate('HH:mm')\n });\n // Sort the time options\n timeOptions.sort((a, b) => `${a.value}`.localeCompare(`${b.value}`));\n return timeOptions;\n })\n ).subscribe(next => this.options.next(next)));\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.no_past_times || changes.step || changes.timezone) {\n // If there's a new date value then update the time options\n this.options.next(generateAvailableTimes(this.date.value, !this.noPastTimes, this.step, this.timezone));\n const buildingDate = new DateTZ({date: this.from, is_local_tz: false, building_tz: this.timezone}).startOfValue('minute');\n this.value.next(buildingDate.formatDate('HH:mm'));\n }\n if (changes.from) {\n // When the from input param changes update the date value\n this.date.next(this.from);\n }\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: string): void {\n // value comes in as a HH:mm string\n const newTime = (new_value.indexOf(':') > 0 ? new_value : '00:00').split(':');\n // need the date with the building timezone so the hour set is relative to there and not local.\n const d = new DateTZ({ date: this.date.value, is_local_tz: false, building_tz: this.timezone });\n const date = d.setValue({ hour: parseInt(newTime[0]), minute: parseInt(newTime[1]) });\n if (date) {\n if (this._onChange) {\n this._onChange(date.ms);\n }\n }\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: number | null) {\n if (value != null) {\n // Time input value in building time milliseconds\n this.date.next(value);\n // Get the closest time to slot in case the browser was idle and elapse the valid times\n const date = closestToTimeSlot(DateTime.fromMillis(value).startOf('minute'), this.step);\n // Need the building time so HH:mm is correct\n const buildingDate = new DateTZ({date: date.valueOf(), is_local_tz: false, building_tz: this.timezone}).startOfValue('minute');\n this.options.next(generateAvailableTimes(buildingDate.ms, !this.noPastTimes, this.step, this.timezone));\n }\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output\n} from '@angular/core';\nimport { SelectOption } from '@mckinsey-converge/ui';\n\n@Component({\n selector: 'mck-toggle',\n template: `\n
\n \n
\n `,\n styleUrls: ['./toggle.component.scss']\n})\nexport class ToggleComponent {\n\n @Input()\n options: SelectOption[];\n\n @Input()\n selected: SelectOption;\n\n @Output()\n selectedChange = new EventEmitter>();\n\n public onTapOption(option: SelectOption) {\n this.selectedChange.emit(option);\n }\n\n isSelected(option: SelectOption) {\n return this.selected === option;\n }\n}\n","import { Component, Input } from '@angular/core';\nimport {TooltipPosition, TooltipTheme} from \"./tooltip.enums\";\n\n@Component({\n selector: 'app-tooltip',\n templateUrl: './tooltip.component.html',\n styleUrls: ['./tooltip.component.scss']\n})\nexport class TooltipComponent {\n isVisible: boolean = false; // To control the visibility of the tooltip\n position: TooltipPosition = TooltipPosition.DEFAULT;\n theme: TooltipTheme = TooltipTheme.DEFAULT;\n tooltip = '';\n left = 0;\n top = 0;\n visible = false;\n}","
\n
\n {{string}}\n
\n
","import {\n ApplicationRef,\n ComponentFactoryResolver,\n ComponentRef,\n Directive,\n ElementRef,\n EmbeddedViewRef,\n HostListener,\n Injector,\n Input,\n ViewContainerRef\n} from '@angular/core';\nimport {TooltipComponent} from \"./tooltip.component\";\nimport {TooltipPosition, TooltipTheme} from \"./tooltip.enums\";\n\n@Directive({\n selector: '[tooltip]'\n})\nexport class TooltipDirective {\n\n @Input() tooltip = '';\n @Input() position: TooltipPosition = TooltipPosition.DEFAULT;\n @Input() theme: TooltipTheme = TooltipTheme.DEFAULT;\n @Input() trigger: 'hover' | 'click' = 'hover'; \n @Input() showDelay = 0;\n @Input() hideDelay = 0;\n @Input() show: boolean = true;\n\n private componentRef: ComponentRef | null = null;\n private showTimeout?: number;\n private hideTimeout?: number;\n private touchTimeout?: number;\n\n constructor(private elementRef: ElementRef, private appRef: ApplicationRef,\nprivate componentFactoryResolver: ComponentFactoryResolver, private injector: Injector) {\n }\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (this.trigger === 'hover') {\n this.initializeTooltip();\n }\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n if (this.trigger === 'hover') {\n this.setHideTooltipTimeout();\n }\n }\n\n @HostListener('click')\n onClick(): void {\n if (this.trigger === 'click') {\n if (this.componentRef === null) {\n this.initializeTooltip();\n } else {\n this.destroy(); // Hide tooltip if it is already shown\n }\n }\n }\n\n @HostListener('touchstart', ['$event'])\n onTouchStart($event: TouchEvent): void {\n $event.preventDefault();\n window.clearTimeout(this.touchTimeout);\n this.touchTimeout = window.setTimeout(this.initializeTooltip.bind(this), 500);\n }\n\n @HostListener('touchend')\n onTouchEnd(): void {\n window.clearTimeout(this.touchTimeout);\n this.setHideTooltipTimeout();\n }\n\n private initializeTooltip() {\n if (this.componentRef === null) {\n window.clearInterval(this.hideDelay);\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(TooltipComponent);\n this.componentRef = componentFactory.create(this.injector);\n\n this.appRef.attachView(this.componentRef.hostView);\n const [tooltipDOMElement] = (this.componentRef.hostView as EmbeddedViewRef).rootNodes;\n\n this.setTooltipComponentProperties();\n\n document.body.appendChild(tooltipDOMElement);\n this.showTimeout = window.setTimeout(this.showTooltip.bind(this), this.showDelay);\n }\n }\n\n private setTooltipComponentProperties() {\n if (this.componentRef !== null) {\n this.componentRef.instance.tooltip = this.tooltip;\n this.componentRef.instance.position = this.position;\n this.componentRef.instance.theme = this.theme;\n\n const {left, right, top, bottom} = this.elementRef.nativeElement.getBoundingClientRect();\n\n switch (this.position) {\n case TooltipPosition.BELOW: {\n this.componentRef.instance.left = Math.round((right - left) / 2 + left);\n this.componentRef.instance.top = Math.round(bottom);\n break;\n }\n case TooltipPosition.ABOVE: {\n this.componentRef.instance.left = Math.round((right - left) / 2 + left);\n this.componentRef.instance.top = Math.round(top);\n break;\n }\n case TooltipPosition.RIGHT: {\n this.componentRef.instance.left = Math.round(right);\n this.componentRef.instance.top = Math.round(top + (bottom - top) / 2);\n break;\n }\n case TooltipPosition.LEFT: {\n this.componentRef.instance.left = Math.round(left);\n this.componentRef.instance.top = Math.round(top + (bottom - top) / 2);\n break;\n }\n default: {\n break;\n }\n }\n }\n }\n\n private showTooltip() {\n if (this.componentRef !== null) {\n this.componentRef.instance.visible = this.show ? true : false;\n }\n }\n\n private setHideTooltipTimeout() {\n this.hideTimeout = window.setTimeout(this.destroy.bind(this), this.hideDelay);\n }\n\n ngOnDestroy(): void {\n this.destroy();\n }\n\n destroy(): void {\n if (this.componentRef !== null) {\n window.clearInterval(this.showTimeout);\n window.clearInterval(this.hideDelay);\n this.appRef.detachView(this.componentRef.hostView);\n this.componentRef.destroy();\n this.componentRef = null;\n }\n }\n}\n","export enum TooltipPosition {\n ABOVE = 'above',\n BELOW = 'below',\n LEFT = 'left',\n RIGHT = 'right',\n DYNAMIC = 'dynamic',\n DEFAULT = 'below'\n}\n\nexport enum TooltipTheme {\n DARK = 'dark',\n LIGHT = 'light',\n DEFAULT = 'dark'\n}\n","export { AlertMode, AlertBannerDisplay } from './alert-banner/alert-banner.component';\nexport { SelectOption } from './options/select-option';\nexport * from './cng-select/dropdown-panel';","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatSelectModule } from '@angular/material/select';\nimport { AutoCompleteChipSelectItemComponent } from './auto-complete-chip-select-item/auto-complete-chip-select-item.component';\nimport { AutoCompleteSelectOptionComponent } from './auto-complete-select-option/auto-complete-select-option.component';\nimport {\n FormsModule,\n ReactiveFormsModule\n} from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { NgxMatSelectSearchModule } from 'ngx-mat-select-search';\nimport { RadioSelectComponent } from './radio-select/radio-select.component';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { FilterPipe } from './pipes/filter.pipe';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TimeFieldComponent } from './time-field/time-field.component';\nimport { DateTzTimeFieldComponent } from './date-tz-time-field/date-tz-time-field.component';\nimport { SpacerComponent } from './spacer/spacer.component';\nimport { DurationFieldComponent } from './duration-field/duration-field.component';\nimport { DateTzDurationFieldComponent } from './date-tz-duration-field/date-tz-duration-field.component';\nimport { AcaDatePickerComponent } from './aca-date-picker/aca-date-picker.component'; // the old widget\nimport { MckDatePickerComponent } from './mck-date-picker/mck-date-picker.component'; // the old form field \nimport { DateTzCalendarWidgetComponent } from './date-tz-calendar-widget/date-tz-calendar-widget.component'; // the new widget\nimport { DateTzDatePickerComponent } from './date-tz-date-picker/date-tz-date-picker.component'; // the new form field \nimport { CalendarIconComponent } from './icons/calendar/calendar-icon.component';\nimport { ChevronIconComponent } from './icons/calendar/chevron-icon.component';\nimport { SelectOptionComponent } from './select-option/select-option.component';\nimport { CloseIconComponent } from './icons/close/close-icon.component';\nimport { SelectedChipCountComponent } from './selected-chip-count/selected-chip-count.component';\nimport { AlertBannerComponent } from './alert-banner/alert-banner.component';\nimport { ErrorMessageComponent } from './error-message/error-message.component';\nimport { ToggleComponent } from './toggle/toggle.component';\nimport { LabelComponent } from './label/label.component';\nimport { ModalComponent } from './modal/modal.component';\nimport { CollapseHeaderComponent } from './collapse-header/collapse-header.component';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { SwitchGroupComponent } from './switch-group/switch-group.component';\nimport { ModalButtonRowComponent } from './modal-button-row/modal-button-row.component';\nimport { InformationalImageComponent } from './informational-image/informational-image.component';\nimport { GroupHeaderPipe } from './auto-complete-chip-select-item/groupHeader.pipe';\nimport { SelectComponent } from './select/select.component';\nimport { LegendDropdownComponent } from './legend-dropdown/legend-dropdown.component';\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\nimport { RecurrencePatternForm } from './recurrence-pattern-form/recurrence-pattern-form.component'; \nimport { RecurrenceDateForm } from './recurrence-date-form/recurrence-date-form.component';\nimport { ConflictsModalComponent } from './conflicts-modal/conflicts-modal.component';\nimport { RecurringBookingForm } from './recurrence-booking-form/recurrence-booking-form.component';\nimport { OverrideChangesModalComponent } from './override-changes-modal/override-changes-modal.component';\nimport { SanitizePipe } from './pipes/sanitise.pipe';\nimport { ConflictAlertModalComponent } from './conflict-alert-modal/conflict-alert-modal.component';\nimport { CngSelectComponent } from './cng-select/cng-select.component';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { DropdownTriggerForDirective } from './cng-select/dropdown-trigger-for.directive';\nimport { CngSelectOptionsComponent } from './cng-select/cng-select-options.component';\nimport { TooltipComponent } from './tooltip/tooltip.component';\nimport { TooltipDirective } from './tooltip/tooltip.directive';\nimport { ZoomWarningComponent } from './zoom-warning-modal/components/zoom-warning/zoom-warning.component';\n\nexport const MATERIAL_MODULES: any[] = [\n MatButtonModule,\n MatSnackBarModule,\n MatDialogModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatProgressSpinnerModule,\n MatProgressBarModule,\n MatAutocompleteModule,\n MatSelectModule,\n MatChipsModule,\n MatRippleModule,\n MatMenuModule,\n MatCheckboxModule,\n MatTooltipModule,\n MatRadioModule,\n MatTabsModule,\n MatSlideToggleModule,\n MatExpansionModule,\n OverlayModule\n];\n\n@NgModule({\n imports: [CommonModule,\n ...MATERIAL_MODULES,\n ReactiveFormsModule,\n FormsModule,\n NgxMatSelectSearchModule, NgxSkeletonLoaderModule],\n declarations: [\n AutoCompleteChipSelectItemComponent,\n AutoCompleteSelectOptionComponent,\n AcaDatePickerComponent,\n MckDatePickerComponent,\n DateTzCalendarWidgetComponent,\n DateTzDatePickerComponent,\n TimeFieldComponent,\n DateTzTimeFieldComponent,\n DurationFieldComponent,\n DateTzDurationFieldComponent,\n GroupHeaderPipe,\n RadioSelectComponent,\n FilterPipe,\n SanitizePipe,\n SpacerComponent,\n CalendarIconComponent,\n ChevronIconComponent,\n SelectOptionComponent,\n CloseIconComponent,\n SelectedChipCountComponent,\n AlertBannerComponent,\n ErrorMessageComponent,\n ToggleComponent,\n LabelComponent,\n ModalComponent,\n CollapseHeaderComponent,\n SwitchGroupComponent,\n ModalButtonRowComponent,\n InformationalImageComponent,\n SelectComponent,\n LegendDropdownComponent,\n RecurrencePatternForm,\n RecurrenceDateForm,\n RecurringBookingForm,\n ConflictsModalComponent,\n OverrideChangesModalComponent,\n ConflictAlertModalComponent,\n CngSelectComponent, \n DropdownTriggerForDirective,\n CngSelectOptionsComponent,\n TooltipComponent,\n TooltipDirective,\n ZoomWarningComponent\n ],\n exports: [\n AutoCompleteChipSelectItemComponent,\n AutoCompleteSelectOptionComponent,\n AcaDatePickerComponent,\n MckDatePickerComponent,\n DateTzCalendarWidgetComponent,\n DateTzDatePickerComponent,\n TimeFieldComponent,\n DateTzTimeFieldComponent,\n DurationFieldComponent,\n DateTzDurationFieldComponent,\n RadioSelectComponent,\n FilterPipe,\n SanitizePipe,\n SpacerComponent,\n CalendarIconComponent,\n ChevronIconComponent,\n AlertBannerComponent,\n ReactiveFormsModule,\n FormsModule,\n ToggleComponent,\n LabelComponent,\n ModalComponent,\n CollapseHeaderComponent,\n SwitchGroupComponent,\n ModalButtonRowComponent,\n InformationalImageComponent,\n SelectComponent,\n LegendDropdownComponent,\n RecurrencePatternForm,\n RecurrenceDateForm,\n RecurringBookingForm,\n ConflictsModalComponent,\n OverrideChangesModalComponent,\n ConflictAlertModalComponent,\n CngSelectComponent, DropdownTriggerForDirective,\n CngSelectOptionsComponent,\n TooltipComponent,\n TooltipDirective,\n ZoomWarningComponent\n ]\n})\nexport class UiModule {\n}\n","/**\n * Generate a list of time options for the given date\n * @param datestamp Date to generate options for\n * @param show_past Whether past times should be options\n */\n\nimport {\n closestToTimeSlot,\n closestToTimeSlotTz,\n DurationGroup,\n durationHumanized,\n timeFormatString,\n timeWithGmtOffsetFormatString,\n unique\n} from '@mckinsey-converge/base';\nimport { SelectOption } from '../types';\nimport { DateTZ } from \"@mckinsey-converge/date-tz\";\nimport { DateTime } from 'luxon';\n\n// 24 hours\nexport const ALL_DAY_BOOKING_VALUE = 60 * 24;\n\nexport const DEFAULT_DURATION = 30;\n\n// R--- depreciate.\nexport const generateAvailableTimes = (\n datestamp: number,\n showPast: boolean,\n step: number = 15,\n timezone: string = new DateTZ({ date: Date.now() }).local_tz\n): SelectOption[] => {\n // R--- refactor to only used dateTz input and drop timezone param.\n // now needs the building timezone for isAfter to work correctly\n const now = new DateTZ({ date: Date.now(), is_local_tz: false, building_tz: timezone });\n // date needs the building timezone for isAfter to work correctly\n let date = new DateTZ({ date: datestamp, is_local_tz: false, building_tz: timezone });\n // Check if we're today or a future date\n const blocks: SelectOption[] = [];\n if (showPast || date.isAfterDate(now, 'day')) {\n // later than today\n date = date.startOfValue('day');\n } else {\n // today\n date = now;\n }\n // Get the closest timeslot to the start time\n const inputDate = DateTime.fromMillis(date.ms);\n const closestDate = closestToTimeSlot(inputDate, step);\n // Date changed to the closest time\n date = new DateTZ({ date: closestDate.valueOf(), is_local_tz: false, building_tz: timezone });\n const end = date.endOfValue('day');\n // Add options for the rest of the day\n while (date.isBeforeDate(end)) {\n blocks.push({\n display: timeWithGmtOffsetFormatString(date),\n shortDisplay: date.formatDate('hh:mma'),\n value: date.formatDate('HH:mm')\n });\n date = date.addValue({ minutes: step });\n }\n return blocks;\n};\n\n\nexport const generateAvailableTimesTz = (\n fromDateTz: DateTZ,\n showPast: boolean,\n step: number = 15,\n timezone: string = new DateTZ({ date: Date.now() }).local_tz,\n all_day: boolean = false,\n extras: SelectOption[] = [],\n startFromDateTz: boolean = false\n): SelectOption[] => {\n // now needs the building timezone for isAfter to work correctly\n const now = new DateTZ({ date: Date.now(), is_local_tz: false, building_tz: timezone });\n // date needs the building timezone for isAfter to work correctly\n let dateTz = fromDateTz.clone();\n // Check if we're today or a future date\n const blocks: SelectOption[] = [];\n if (showPast || dateTz.isAfterDate(now, 'day')) {\n // later than today\n dateTz = dateTz.startOfValue('day');\n } else {\n // today/fromDateTz using the flag\n dateTz = startFromDateTz ? dateTz : now;\n }\n // Get the closest timeslot to the start time\n dateTz = closestToTimeSlotTz(dateTz, step);\n // Date changed to the closest time\n const end = dateTz.endOfValue('day');\n // Add the all day option for today\n if (all_day && dateTz.isSameDate(now, 'day')) {\n const startOfDay = dateTz.startOfValue('day');\n blocks.push({\n display: timeWithGmtOffsetFormatString(startOfDay),\n shortDisplay: startOfDay.formatDate('hh:mma'),\n value: startOfDay\n })\n }\n // Add options for the rest of the day\n while (dateTz.isBeforeDate(end)) {\n blocks.push({\n display: timeWithGmtOffsetFormatString(dateTz),\n shortDisplay: dateTz.formatDate('hh:mma'),\n value: dateTz, \n });\n \n dateTz = dateTz.addValue({ minutes: step });\n }\n\n return unique(extras.concat(blocks), 'shortDisplay');\n};\n\n/**\n * Generates list of duration options for new booking flow.\n * @param date - The start dateTime\n * @param max - The max number of minutes to go to from the date param.\n * @param min - The min number of minutes to display first time from.\n * @param step - The number of minutes to step up by for timeslots.\n */\nexport const generateDurationOptions = (\n date: DateTZ,\n max: number,\n min: number,\n step: number,\n extended: boolean): SelectOption[] => {\n const blocks: SelectOption[] = [];\n let value = min;\n while (value <= max) {\n let duration: string;\n if (extended) {\n const d = durationHumanized(value - min, true);\n duration = d ? `+${d}` : 'Current';\n } else {\n duration = durationHumanized(value, true);\n }\n\n blocks.push({\n value,\n display: `${date.addValue({ minutes: value }).formatDate(timeFormatString()).toLocaleLowerCase()} (${duration})`,\n });\n value += step;\n }\n return blocks;\n};\n\nexport const allDayOption: SelectOption = ({\n value: ALL_DAY_BOOKING_VALUE,\n display: 'All Day'\n});\n\nexport const oneWeekOption: SelectOption = ({\n value: 60 * 24 * 7, // 1 week\n display: 'One Week'\n});\n\nexport const defaultDurationGroups: DurationGroup[] = [\n {\n start: 15,\n step: 15,\n max: 60 * 24\n }\n // , {\n // start: 60,\n // step: 30,\n // max: (60 * 8) - 1 // 8 hours\n // }, {\n // start: 60 * 8,\n // step: 60,\n // max: 60 * 24 // 24 hours\n // }\n];\n\n/**\n * Maps the {@link DurationGroup} to {@link SelectOption} and appends the default all day and week options.\n */\nexport const generateDurationOptionsFromGroups = (date: DateTZ, durationGroups: DurationGroup[], extended: boolean): SelectOption[] => [\n ...(durationGroups.map(duration => generateDurationOptions(date, duration.max, duration.start, duration.step, extended)).reduce(((previousValue, currentValue) => {\n previousValue.push(...currentValue);\n return previousValue;\n }), [])),\n // allDayOption,\n // oneWeekOption\n ];\n","import { Component, OnInit } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'mck-zoom-warning',\n templateUrl: './zoom-warning.component.html',\n styleUrls: ['./zoom-warning.component.scss']\n})\nexport class ZoomWarningComponent {\n\n constructor(private dialogRef: MatDialogRef) {}\n\n onCloseClick(): void {\n this.dialogRef.close();\n }\n}\n","
\n

Excessive zoom warning

\n
\n\n
\n
\n

\n
\n
\n
\n\n
\n \n
\n
","export * from './lib/user.module';\nexport * from './lib/user.actions'\nexport * from './lib/user.types'\nexport * from './lib/user.reducer'\n","import { \n createLoadingAction\n } from '../../../loading/src/lib/loading.actions';\nimport {\n UserState,\n UserStoreState\n} from './user.types';\nimport { User } from '../../../data-common/src/lib/users/user.class';\nimport { createSelector } from '@ngrx/store';\n\nexport const loadUser = createLoadingAction('CurrentUser', 'current');\n\nexport const selectUserState = ({ user }: UserStoreState) => user;\n\nexport const selectHasUserData = createSelector(createSelector(selectUserState, loadUser.selectors.model), (state) => !!state.optionalSuccess);\n\nexport const selectCurrentUser = createSelector(selectUserState, loadUser.selectors.optionalSuccess);\n","import { Injectable } from '@angular/core';\nimport {\n Actions,\n Effect\n} from '@ngrx/effects';\nimport { createLoadingEffect } from '@mckinsey-converge/loading';\nimport { loadUser } from './user.actions';\nimport { UsersService } from '../../../data-common/src/lib/users/users.service';\n\n\n@Injectable()\nexport class UserEffects {\n\n constructor(private actions: Actions,\n private userService: UsersService) {\n }\n\n @Effect()\n loadUser = createLoadingEffect(this.actions, loadUser, () => this.userService.loadCurrentUser());\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { StoreModule } from '@ngrx/store';\nimport { userReducer } from './user.reducer';\nimport { EffectsModule } from '@ngrx/effects';\nimport { UserEffects } from './user.effects';\n\n@NgModule({\n imports: [\n CommonModule,\n StoreModule.forFeature('user', userReducer),\n EffectsModule.forFeature([UserEffects])\n ]\n})\nexport class UserModule {\n}\n","import { createReducer } from '@ngrx/store';\nimport { UserState } from './user.types';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { loadUser } from './user.actions';\n\n\nexport const initialUserState: UserState = {\n current: LoadingModel.empty()\n};\n\nexport const userReducer = createReducer(initialUserState,\n ...loadUser.ons);\n","function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = \"./$$_lazy_route_resource lazy recursive\";","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { ShellWrapperComponent } from './shell/shell.component';\n\nconst routes: Routes = [\n {\n path: '',\n component: ShellWrapperComponent,\n children: [\n {\n path: 'home',\n loadChildren: () => import('./booking/booking.module').then((m) => m.BookingModule),\n },\n { path: '**', redirectTo: 'home' },\n ],\n },\n { path: '**', redirectTo: 'home' },\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes, { useHash: true })],\n exports: [RouterModule],\n})\nexport class AppRoutingModule {}\n","import {\n Component,\n OnInit,\n ViewEncapsulation\n} from '@angular/core';\nimport { ActivatedRoute, GuardsCheckEnd, NavigationEnd, NavigationStart, Router } from '@angular/router';\nimport { BaseDirective, detectIE } from '@mckinsey-converge/base';\nimport {\n ApplicationService,\n BookingsService,\n OrganisationService,\n SpacesService\n} from '@mckinsey-converge/data-common';\nimport { environment } from 'src/environments/environment';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ZoomWarningComponent } from '@mckinsey-converge/ui';\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: [\n './styles/app.component.scss',\n './styles/custom-element.styles.scss',\n './styles/native-element.styles.scss'\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class AppComponent extends BaseDirective implements OnInit {\n constructor(\n private _app: ApplicationService,\n private _org: OrganisationService,\n private _spaces: SpacesService,\n private _bookings: BookingsService,\n private _router: Router,\n private _route: ActivatedRoute,\n private _dialog: MatDialog,\n ) {\n super();\n\n // ensure app is trusted in dev mode so we can preserve login.\n if (!environment.production) {\n localStorage.setItem('trusted', 'true');\n }\n\n\n if (detectIE() && detectIE() < 12) {\n location.href = `${location.origin}${location.pathname}assets/not-supported.html`;\n return;\n }\n }\n\n public ngOnInit(): void {\n this._router.events.subscribe((val: NavigationStart) => {\n const bookingForm = JSON.parse(localStorage.getItem('bookingForm'));\n if (val && val.navigationTrigger && val.url) {\n // Redirect everyone who doesn't have an active bookingForm back to the home page.\n const cleanHash = location?.hash.split('?')[0];\n const isLoadBookingUrl = cleanHash.indexOf('#/home/booking/') === 0;\n const isLoadCateringUrl = cleanHash.indexOf('#/home/catering/') === 0;\n if (!isLoadBookingUrl && !isLoadCateringUrl && cleanHash && ['#/home', '#/home/manage', '#/home/create', '#/home/edit'].indexOf(cleanHash) === -1 && bookingForm && !bookingForm?.activeForm) {\n location.href = `${location.origin}`;\n return;\n }\n }\n\n })\n this.adjustZoom();\n }\n\n private adjustZoom() {\n const clientWidth = document.body.clientWidth;\n if (this.isMobileOrTablet()) { // Do not show the warning if it's a mobile or tablet device\n return;\n }\n if (clientWidth < 1300) {\n this._dialog.open(ZoomWarningComponent);\n }\n }\n private isMobileOrTablet(): boolean {\n const userAgent = navigator.userAgent || navigator.vendor;\n const maxTouchPoints = navigator.maxTouchPoints || 0; // Check for touch points \n if (maxTouchPoints > 0 && window.innerWidth <= 1024) {\n return true;\n } // Check for common mobile/tablet user agent strings \n const mobileAgents = ['Android', 'webOS', 'iPhone', 'iPad', 'iPod', 'BlackBerry', 'IEMobile', 'Opera Mini'];\n for (const agent of mobileAgents) {\n if (userAgent.indexOf(agent) > -1) {\n return true;\n }\n }\n return false;\n }\n}\n","
\n \n
\n","// remove after trigger build\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { NgModule } from '@angular/core';\nimport { HttpClientModule } from '@angular/common/http';\nimport { FormsModule } from '@angular/forms';\nimport { MAT_LABEL_GLOBAL_OPTIONS } from '@angular/material/core';\n\nimport { ComposerModule } from '@placeos/composer';\n\nimport { AppRoutingModule } from './app-routing.module';\nimport { AppComponent } from './app.component';\nimport { environment } from '../environments/environment';\nimport { SharedContentModule } from './shared/shared.module';\n\nimport { ShellWrapperComponent } from './shell/shell.component';\nimport {\n ActionReducer,\n MetaReducer,\n StoreModule\n} from '@ngrx/store';\nimport { StoreDevtoolsModule } from '@ngrx/store-devtools';\nimport { BookingModule } from 'src/app/booking/booking.module';\nimport { BookingsModule } from '@mckinsey-converge/bookings';\nimport { BuildingsModule } from '@mckinsey-converge/buildings';\nimport { EffectsModule } from '@ngrx/effects';\nimport { DEFAULT_SETTINGS } from 'src/environments/settings';\nimport { provideMockSettingsObject } from '@mckinsey-converge/data-common';\nimport { OrganisationModule } from '@mckinsey-converge/organisation';\nimport { localStorageSync } from 'ngrx-store-localstorage';\nimport { UiModule } from '@mckinsey-converge/ui';\nimport { RoomsModule } from '@mckinsey-converge/rooms';\nimport { ENVIRONMENT_TOKEN } from '@mckinsey-converge/environment';\nimport { LegacyOverlaysModule } from '@mckinsey-converge/legacy-overlays';\nimport { UserModule } from '@mckinsey-converge/user';\nimport { MapModule } from 'src/app/map/map.module';\n\n/**\n * Cache some state in local storage. Not for use in production.\n */\nexport function localStorageSyncReducer(reducer: ActionReducer): ActionReducer {\n // Keys needed to fix prod reloading. MCK-1229\n let keys = [\n 'buildings',\n 'bookingForm',\n 'rooms',\n ];\n\n if (!environment.production) {\n keys = [\n 'bookings',\n 'buildings',\n 'organisation',\n 'bookingForm',\n 'rooms',\n 'user'\n ];\n }\n\n return localStorageSync({\n keys,\n rehydrate: true,\n })(reducer);\n}\n\nconst metaReducers: Array> = [localStorageSyncReducer];\n\n\n@NgModule({\n declarations: [\n AppComponent,\n ShellWrapperComponent\n ],\n imports: [\n BrowserModule,\n BrowserAnimationsModule,\n AppRoutingModule,\n HttpClientModule,\n FormsModule,\n ComposerModule,\n SharedContentModule,\n LegacyOverlaysModule,\n StoreModule.forRoot({}, { metaReducers }),\n StoreDevtoolsModule.instrument({\n maxAge: 100,\n logOnly: environment.production\n }),\n EffectsModule.forRoot(),\n BookingsModule,\n BookingModule,\n BuildingsModule,\n MapModule,\n OrganisationModule,\n RoomsModule,\n UiModule,\n UserModule\n ],\n providers: [\n { provide: MAT_LABEL_GLOBAL_OPTIONS, useValue: { float: 'nevet' } },\n provideMockSettingsObject(DEFAULT_SETTINGS),\n { provide: ENVIRONMENT_TOKEN, useValue: environment }\n ],\n bootstrap: [AppComponent]\n})\nexport class AppModule {\n}\n","import { Component, OnInit, Input, Output, EventEmitter, ViewChild } from '@angular/core';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\nimport { BookingStateService, OrganisationService } from '@mckinsey-converge/data-common';\nimport { DateNow, DateTZ, getTimezoneOffsetString, toMiddayUTC } from '@mckinsey-converge/date-tz';\n\n@Component({\n selector: 'calendar-date-widget',\n templateUrl: './calendar-date-widget.component.html',\n styleUrls: ['./calendar-date-widget.component.scss'],\n})\nexport class CalendarDateWidgetComponent extends BaseDirective implements OnInit {\n /** Currently selected date */\n @Input() public dateTz: DateTZ = DateNow(new Date());\n /** Currently building timezone */\n @Input() public timezone: string;\n /** Currently active zone */\n @Input() public zone: string;\n /** Whether to show new item button */\n @Input() public show_add_item = false;\n /** Whether to show the events for the active month */\n @Input() public show_events: boolean = false;\n /** Preserve last selected date */\n @Input() public retainSelectedDate: boolean = false;\n /** Emitter for changes selected date */\n @Output() public dateChangeTz = new EventEmitter();\n /** Emitter for add item button */\n @Output() public event = new EventEmitter();\n /** Counters of the events on given dates. Key format is `yyyy-MM-dd` */\n public event_map: { [date: string]: number };\n\n public fromDateTz = DateNow().subtractValue({ months: 6 });\n\n public get now() {\n return DateNow();\n }\n\n /** Display string for the currently selected date */\n public get tz(): string {\n return getTimezoneOffsetString(this.timezone_value);\n }\n\n public get timezone_value() {\n return localStorage.getItem('CONCIERGE.timezone') || this.timezone || this.now.building_tz;\n }\n\n public get is_today() {\n return new DateTZ({\n date: toMiddayUTC(this.dateTz).ms,\n is_local_tz: false,\n building_tz: this.timezone_value,\n }).isSameDate(\n new DateTZ({\n date: Date.now(),\n is_local_tz: false,\n building_tz: this.timezone_value,\n }),\n 'day'\n );\n }\n\n constructor(private _bookings: BookingStateService, private _org: OrganisationService) {\n super();\n }\n\n public ngOnInit(): void {\n // CONCIERGE.date: Get the localstorage date and timezone when changing pages.\n let date: any;\n if(!this.retainSelectedDate) {\n date = +localStorage.getItem('CONCIERGE.date') || this.now.ms;\n } else {\n date = this.now.ms;\n }\n\n \n /* istanbul ignore else */\n if (date && (date !== this.dateTz.ms || this.timezone_value !== this.dateTz.building_tz)) {\n // CONCIERGE.date Reapply the localstorage date and timezone when changing pages.\n this.timeout(\n 'init',\n () => {\n this.dateTz = new DateTZ({\n date,\n is_local_tz: false,\n building_tz: this.timezone_value,\n });\n this.dateChangeTz.emit(this.dateTz);\n this.updateDate();\n },\n 10\n );\n }\n this.subscription(\n 'events',\n this._bookings._noOfMeetings.subscribe((list) => {\n this.event_map = {};\n this.event_map = list[0];\n })\n );\n }\n\n public noOfCount(event) {\n // Disabling bellow until find more reliable way to call as it is been called multiple times on hover/click\n // this._bookings.getDailyMeetingCount();\n // event.stopPropogation();\n }\n\n /**\n * Change the selected date with the arrow controls\n *\n */\n public changeDate(value: number) {\n let date = new DateTZ({\n date: toMiddayUTC(this.dateTz).ms,\n is_local_tz: false,\n building_tz: this.timezone_value,\n });\n date = date.addValue({ days: value });\n this.dateTz = date;\n this.dateChangeTz.emit(this.dateTz);\n localStorage.setItem('CONCIERGE.date', `${this.dateTz.ms}`);\n localStorage.setItem('CONCIERGE.timezone', `${this.timezone_value}`);\n this.updateDate();\n }\n\n /**\n * Change the selected date with the calendar widget\n *\n */\n public applyDatePickerValue(dateInputTz: DateTZ) {\n this.dateTz = new DateTZ({\n date: toMiddayUTC(dateInputTz).ms,\n is_local_tz: false,\n building_tz: this.timezone_value,\n });\n this.dateChangeTz.emit(this.dateTz);\n localStorage.setItem('CONCIERGE.date', `${this.dateTz.ms}`);\n localStorage.setItem('CONCIERGE.timezone', `${this.timezone_value}`);\n this.updateDate();\n this.closeDatePicker();\n }\n\n public updateDate() {\n this.timeout('update_date', () => this._bookings.setDate(this.dateTz));\n }\n\n /** Reset date to the current date */\n public resetDate() {\n this.dateTz = new DateTZ({\n date: toMiddayUTC(this.now).ms,\n is_local_tz: false,\n building_tz: this.timezone_value,\n });\n this.dateChangeTz.emit(this.dateTz);\n localStorage.setItem('CONCIERGE.date', `${this.dateTz.ms}`);\n localStorage.setItem('CONCIERGE.timezone', `${this.timezone_value}`);\n this.updateDate();\n }\n\n public closeDatePicker() {\n this.updateDate();\n }\n\n /** New Item button click */\n public newItem(): void {\n this.event.emit('new_item');\n }\n}\n","
\n\n \n
\n
\n \n
\n

Today

\n

{{ dateTz.ms | date: 'mediumDate':tz }}

\n
\n \n
\n
\n \n \n
\n
\n
\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { BookingCalendarWrapperComponent } from './booking-calendar-wrapper.component';\n\n\nconst routes: Routes = [\n { path: '', component: BookingCalendarWrapperComponent },\n { path: ':level', component: BookingCalendarWrapperComponent },\n { path: '**', redirectTo: '' }\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class BookingCalendarRoutingModule {}\n","import {\n Component,\n OnInit,\n ViewEncapsulation\n} from '@angular/core';\nimport { ActivatedRoute, GuardsCheckEnd, NavigationEnd, NavigationStart, Router } from '@angular/router';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n ApplicationService,\n BookingFormData,\n BookingsService,\n Building,\n OrganisationService,\n SettingsService,\n SpacesService,\n selectActiveForm\n} from '@mckinsey-converge/data-common';\nimport { Store, select } from '@ngrx/store';\nimport { distinctUntilChanged, first } from 'rxjs/operators';\n\nimport { RoutePayload, TopBarHeaderMode } from 'src/app/components/topbar-header/topbar-header.component';\nimport { RoomResultsState } from '../room-details/room-details.component';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n@Component({\n selector: 'booking-calendar-wrapper',\n templateUrl: './booking-calendar-wrapper.html',\n styleUrls: ['./booking-calendar.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class BookingCalendarWrapperComponent extends BaseDirective implements OnInit {\n public TopBarHeaderMode = TopBarHeaderMode;\n\n public backRoute: RoutePayload = {\n route: ['/home', 'results'],\n queryParams: { display: 'list' },\n };\n orgBuildings: Building[] = [];\n \n constructor(\n private _org: OrganisationService,\n private _spaces: SpacesService,\n private _bookings: BookingsService,\n private settingService: SettingsService,\n private store: Store,\n ) {\n super();\n\n \n }\n\n public ngOnInit(): void {\n /** allow booking bypass to receive bookings for staff calendar view only */\n this.settingService.bypass_bookings = true;\n\n this.orgBuildings = this._org.buildings;\n\n this.subscription('activeForm', this.store.pipe(\n select(selectActiveForm),\n distinctUntilChanged()\n ).subscribe((next: BookingFormData | undefined) => {\n if (next && next?.dateTz) {\n localStorage.setItem('CONCIERGE.date', `${next.dateTz.ms}`);\n localStorage.setItem('CONCIERGE.timezone', `${next.timezone}`);\n const building = this._org.buildings.find(\n (_) => _.id === next.location.filter(el => el.groupChild)[0]?.meta?.building?.id\n );\n if(building) {\n this._org.building = building;\n }\n \n }\n }));\n\n this._org.initialised.pipe(first((_) => _)).subscribe(() => {\n this.orgBuildings = this._org.buildings;\n })\n\n \n }\n\n public onBackCallback() {}\n\n public ngOnDestroy(): void {\n /** disallowed booking bypass when you are moving from staff app calendar view*/\n this.settingService.bypass_bookings = false;\n }\n\n}\n","
\n\t
\n\t\t \n\t\t\n\t
\n\t\n\t\n
","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { BookingCalendarWrapperComponent } from './booking-calendar-wrapper.component';\n\nimport { StaffCalendarComponent } from './staff-calendar/staff-calendar.component';\nimport { CalendarDateWidgetComponent } from './booking-calendar-date-widget/calendar-date-widget.component';\nimport { DayViewTimelineComponent } from './staff-calendar/timeline/timeline.component';\nimport { DayViewSpaceComponent } from './staff-calendar/space/space.component';\nimport { DayViewSpaceEventComponent } from './staff-calendar/space/event/event.component';\n\n\nimport { BookingCalendarRoutingModule } from './booking-calendar-routing.module';\nimport { SharedContentModule } from 'src/app/shared/shared.module';\nimport { UiModule } from '@mckinsey-converge/ui';\n\nimport {CngMenuItemComponent} from './cng-menu-item/cng-menu-item.component';\n\nexport const bookingModuleDeclarations = [\n BookingCalendarWrapperComponent,\n StaffCalendarComponent,\n CalendarDateWidgetComponent,\n DayViewTimelineComponent,\n DayViewSpaceComponent,\n DayViewSpaceEventComponent,\n CngMenuItemComponent\n ];\n\nexport const bookingModuleImports = [\n CommonModule,FormsModule,\n ReactiveFormsModule,\n SharedContentModule,\n UiModule,\n \n \n];\n\n\n@NgModule({\n declarations: [...bookingModuleDeclarations],\n imports: [\n ...bookingModuleImports,\n BookingCalendarRoutingModule,\n // StoreModule.forFeature('bookingForm', bookingFormReducer)\n ]\n})\nexport class BookingCalendarModule {\n}","import {Component, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {NavItem} from './nav-item';\nimport { MatMenu } from '@angular/material/menu';\n\n@Component({\n selector: 'cng-menu-item',\n templateUrl: './cng-menu-item.component.html',\n styleUrls: ['./cng-menu-item.component.scss']\n})\nexport class CngMenuItemComponent implements OnInit {\n @Input() items: NavItem[];\n @Input() activeOption: string;\n @ViewChild('childMenu', {static: true}) public childMenu: any;\n\n @Output() public onChildSelect = new EventEmitter<{}>();\n \n constructor(public router: Router) {\n }\n\n ngOnInit() {\n }\n\n public notifySelection(node) {\n this.onChildSelect.emit(node);\n }\n}\n","\n \n \n 0\">\n \n \n \n \n \n \n \n \n \n ","import {\n Component,\n OnInit,\n Input,\n OnChanges,\n SimpleChanges,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { Router } from '@angular/router';\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { Space, BOOKING_STATUS, CloseDialogService, DialogIds, BookingStoreState, User } from '@mckinsey-converge/data-common';\nimport { ApplicationService } from '@mckinsey-converge/data-common';\nimport { CateringOrder } from '@mckinsey-converge/data-common';\n\nimport { Booking } from '@mckinsey-converge/data-common';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { RoomStoreState } from '@mckinsey-converge/rooms';\nimport { BuildingStoreState } from '@mckinsey-converge/buildings';\nimport { UserStoreState, selectCurrentUser } from '@mckinsey-converge/user';\nimport { Store } from '@ngrx/store';\nimport { take } from 'rxjs/operators';\n\n/** Details about the associated event overlapping with other events */\nexport interface IEventOverlap {\n /** Index of this item with the overlapping items */\n index: number;\n /** Total number of items overlapping with this one */\n total: number;\n}\nexport interface BookingDetailInfo {\n bookedBy: {\n display:boolean,\n value: string\n }\n}\nexport type RoomResultsState = BookingStoreState\n & RoomStoreState\n & BuildingStoreState\n & UserStoreState;\n \n@Component({\n selector: 'day-view-space-event',\n templateUrl: './event.component.html',\n styleUrls: ['./event.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DayViewSpaceEventComponent extends BaseDirective implements OnInit, OnChanges {\n /** Event to display */\n @Input() public booking: Booking;\n /** Date to display bookings for */\n @Input() public dateTz: DateTZ = DateNow(new Date());\n /** Space associated with the booking */\n @Input() public space: Space;\n /** Whether the item is a fixed size */\n @Input() public fixed: boolean;\n /** Overlap details for the booking */\n @Input() public overlap: IEventOverlap;\n /** Whether an action is being processed for this booking */\n @Input() public loading: boolean;\n /** Emitter for the current position of the booking within the timeline */\n @Output() public position = new EventEmitter<{ top: number; height: number }>();\n\n /** Position of the booking start time in the day */\n public top: number;\n /** Position of the booking relative to overlapping bookings */\n public left: number;\n /** Height based of the duration of the booking */\n public height: number;\n /** Size of the booking when overlapping with other bookings */\n public width: number;\n /** Offset from the booking's top that the setup time starts */\n public overflow_top: number;\n /** Offset from the booking's bottom that the breakdown time ends */\n public overflow_bottom: number;\n\n public approved: boolean;\n public declined: boolean;\n public bookingDetails: BookingDetailInfo;\n currentUser: User;\n constructor(\n private _service: ApplicationService,\n public store: Store,\n private _dialog: MatDialog,\n private _router: Router,\n private cdRef: ChangeDetectorRef,\n private closeDialogService: CloseDialogService\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.subscription('currentUser', this.store.select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n })\n );\n\n this.approved = this.booking.status === BOOKING_STATUS.approved;\n this.declined = this.booking.status === BOOKING_STATUS.declined;\n // test comment\n const {creator, organiser, booker_concierge} = this.booking;\n this.bookingDetails = {\n bookedBy: {\n display: creator && ( creator.email !== organiser.email || (creator.email === organiser.email && booker_concierge !== null && organiser.email !==booker_concierge['email']) ),\n value: (creator.email === organiser.email && booker_concierge !== null && organiser.email !==booker_concierge['email']) ? booker_concierge['name'] || booker_concierge['email'] : creator?.name || creator.email\n }\n }\n }\n\n public get local_id(): string {\n return this.booking.icaluid.substr(0, 6);\n }\n\n /** Type of booking */\n public get type(): string {\n const userEmail = this.currentUser.email;\n const { creator, organiser } = this.booking;\n if(userEmail === creator.email || userEmail === organiser.email) \n return this.booking.getType();\n else \n return 'others-booking';\n }\n\n /** Period that the booking will occur during the day */\n public get period(): string {\n // the booking time is being pass in as the local timezone version.\n return this.booking.time_period;\n }\n\n /** Number attendees expected to turn up to the booking */\n public get expected(): number {\n const expected = this.booking.expected_attendees;\n return this.space ? expected[this.space.email] || 0 : 0;\n }\n\n /** Whether the meeting has catering attached */\n public get has_catering(): boolean {\n return !!this.order;\n }\n\n public get order(): CateringOrder {\n return this.booking.catering.find((order) => order.location_id === this.space.email);\n }\n\n /** Whether booking is active */\n public get active(): boolean {\n const booking = this._service.get('CONCIERGE.day_view.viewing');\n return !booking || booking.id === this.booking.id;\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n /* istanbul ignore else */\n if (changes.booking || changes.overlap || changes.dateTz) {\n this.calculatePosition();\n this.approved = this.booking.status === BOOKING_STATUS.approved;\n this.declined = this.booking.status === BOOKING_STATUS.declined;\n }\n }\n\n /** Store the order details for viewing in another component */\n public storeOrder(order: CateringOrder) {\n const booking_details = this.booking.toApiJSON();\n localStorage.setItem('CONCIERGE.view_order', JSON.stringify(order.toJSON()));\n localStorage.setItem('CONCIERGE.view_booking', JSON.stringify(booking_details));\n localStorage.setItem('CONCIERGE.date', `${this.booking.startDateTz.ms}`);\n localStorage.setItem('CONCIERGE.timezone', `${this.booking.startDateTz.building_tz}`);\n }\n\n /**\n * View catering order for the booking\n */\n public viewOrder(order: CateringOrder) {\n /* istanbul ignore else */\n if (this.booking && this.booking.catering) {\n /* istanbul ignore else */\n if (localStorage) {\n this.storeOrder(order);\n }\n this._router.navigate(['/catering', 'orders'], {\n queryParams: { booking: this.booking.id, view: order.id },\n });\n }\n }\n\n /** Calculate the position */\n private calculatePosition() {\n /* istanbul ignore else */\n if (this.booking) {\n const overlap = this.overlap || { index: 0, total: 1 };\n const shown_date = this.dateTz.startOfValue('day');\n const date = this.booking.startDateTz.startOfValue('minute');\n const end = this.booking.endDateTz.startOfValue('minute');\n const from_previous_day = !date.isSameDate(shown_date, 'day');\n if (end.isBeforeDate(shown_date, 'day')) { // Hide booking if not on shown date\n this.top = -100;\n this.height = 1;\n return;\n }\n\n //R-- Stragest thing, but one time this was logging bookings form different timezones?\n // this.dateTz.logDateTz('calculatePosition this.dateTz')\n // this.booking.startDateTz.logDateTz('calculatePosition this.booking.startDateTz')\n\n const start = from_previous_day ? 0 : Math.abs(+date.dateDiff(shown_date, 'hours', 'hours').toFixed(3));\n const duration = Math.min(\n this.booking.duration,\n Math.abs(shown_date.dateDiff(date.addValue({ minutes: this.booking.duration }), 'minutes'))\n );\n this.top = Math.max(0, (start / 24) * 100);\n this.height = Math.min(\n 100 - this.top,\n this.fixed ? duration / 60 : (duration / 60 / 24) * 100\n );\n this.position.emit({ top: this.top, height: (duration / 60 / 24) * 100 });\n this.width = Math.min(100, 100 / overlap.total + 5);\n this.left = Math.min(100 - this.width, this.width * overlap.index - 5 * overlap.index);\n this.overflow_top =\n (this.booking.setup[this.space.email]\n ? (this.booking.setup[this.space.email] / 60) / duration\n : -0.1) * 100;\n this.overflow_bottom =\n (this.booking.breakdown[this.space.email]\n ? (this.booking.breakdown[this.space.email] / 60) / duration\n : -0.1) * 100;\n if (this.booking.all_day) {\n this.top = 0;\n this.height = 100;\n }\n }\n }\n\n public get emailURL() {\n const userEmail = this.currentUser.email;\n const userName = this.currentUser.name\n const { creator, organiser } = this.booking;\n\t\treturn `mailto:${encodeURIComponent(organiser.email)}?cc=${encodeURIComponent(userEmail)}&subject=Request%20to%20release%20room%20reservation%20-%20${encodeURIComponent(this.space.simple_name)}`;\n\t}\n\n /** Whether booking has been ended */\n public expired(): boolean {\n return ['started','in_progress','expired_yesterday', 'done'].includes(this.booking.timeBasedStatusLabel);\n }\n}\n","\n \n \n 50 ? ' low' : '')\"\n [style.z-index]=\"(overlap?.index || 0) + 2\"\n \n >\n
\n
{{ booking.all_day ? 'All Day' : period }}
\n
\n \n\n \n \n
\n
\n
\n
\n
Host: 
\n
\n {{ booking.organiser?.name || booking.organiser }}\n
\n
\n \n
Booked by: 
\n
\n {{ bookingDetails.bookedBy.value }}\n
\n
\n
\n
\n
{{ booking.title }}
\n
\n
\n
\n {{ booking.attendees ? booking.attendees.length || 'No' : 'No' }} Attendee{{\n booking.attendees?.length === 1 ? '' : 's'\n }}{{ expected ? '(' + expected + ' Expected)' : '' }}\n
\n
\n
0\">\n
\n Company: {{ booking.company.length }}\n
\n
\n
\n
Welcomed by: {{ booking.organiser?.name || booking.organiser }}
\n
\n
\n
Catered
\n
\n
\n \n \n \n \n\n","import {\n Component,\n OnChanges,\n Input,\n SimpleChanges,\n Output,\n EventEmitter,\n ViewChild,\n ElementRef,\n OnInit,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { CdkDragMove, CdkDragDrop } from '@angular/cdk/drag-drop';\nimport { MatDialog } from '@angular/material/dialog';\nimport { first } from 'rxjs/operators';\n\nimport { IEventOverlap } from './event/event.component';\nimport { BaseDirective, closestToTimeSlotTz, Identity } from '@mckinsey-converge/base';\nimport { OrganisationService, Space } from '@mckinsey-converge/data-common';\nimport { ApplicationService } from '@mckinsey-converge/data-common';\nimport { Booking } from '@mckinsey-converge/data-common';\nimport { ConfirmModalComponent } from '@mckinsey-converge/legacy-overlays';\nimport { DialogEvent, HashMap } from '@mckinsey-converge/base';\nimport { DayViewSettings } from '@mckinsey-converge/data-common';\nimport { SpacesService } from '@mckinsey-converge/data-common';\nimport { BookingsService } from '@mckinsey-converge/data-common';\n\nimport { BookingStateService } from '@mckinsey-converge/data-common';\nimport { convertTimezonedTimestampToLocalDateTz, DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n// import { BookingModalComponent } from 'src/app/bookings/booking-modal/booking-modal.component';\n\n@Component({\n selector: 'day-view-space',\n templateUrl: './space.component.html',\n styleUrls: ['./space.component.scss'],\n})\nexport class DayViewSpaceComponent extends BaseDirective implements OnInit, OnChanges {\n /** List of space dropzones connected to */\n @Input() public space_list: string[];\n /** Date to display events for */\n @Input() public dateTz: DateTZ;\n /** Space to display events for */\n @Input() public space: Space;\n /** Scroll value of the day view */\n @Input() public scroll: number;\n /** Only show events with setup and/or breakdown times */\n @Input() public overflow_only: boolean;\n /** Mapping of whether to show events with a given legend id */\n @Input() public legend: HashMap = {};\n /** Scroll value to add to drop placeholders */\n @Input('scrollTop') public scroll_top: number;\n /** Last update time of the displayed bookings */\n @Input('lastUpdate') public last_update: number;\n\n @Input() public eventMovingLoader : HashMap = {};\n /** Emitter for whether the space column is in view */\n @Output() public inView = new EventEmitter();\n /** Emitter for whether an event is being dragged */\n @Output() public dragging = new EventEmitter();\n /** Emitter for whether an event is being dropped and moving in progress */\n @Output() public moving = new EventEmitter<{}>();\n /** List of bookings for the current date and space */\n public event_list: Booking[] = [];\n /** Mapping of event IDs to overlap details */\n public overlap_details: HashMap = {};\n /** Mapping of positions of event in the day */\n public position_list: HashMap<{ top: number; height: number }> = {};\n /** Override for mapped position */\n public top: number;\n /** Client Rectangle for the container element box */\n public box: ClientRect;\n /** Whether the space list is in view */\n public in_view: boolean;\n /** ID of the booking with an action processing */\n public override_state: string;\n /** Map of bookings to whether they are loading */\n public loading: HashMap = {};\n /** Settings for day view */\n public settings: DayViewSettings = {} as any;\n\n /** Container element for the component contents */\n @ViewChild('view', { static: true }) private view: ElementRef;\n\n /** List of timeblocks to display */\n public time_blocks: Identity[] = this.generateTimeBlocks();\n\n /** Generate time blocks to display on the day view */\n private generateTimeBlocks(): Identity[] {\n const blocks: Identity[] = [];\n const date = DateNow(new Date()).startOfValue('hour');\n for (let i = 0; i < 24; i++) {\n blocks.push({\n id: date.setValue({ hour: i }).formatDate('HH:mm'),\n name: date.setValue({ hour: i }).formatDate('h:mma').toLocaleLowerCase(),\n });\n }\n return blocks;\n }\n constructor(\n private _service: ApplicationService,\n private _spaces: SpacesService,\n private _booking_state_service: BookingStateService,\n private _bookings: BookingsService,\n private _dialog: MatDialog,\n private cdr: ChangeDetectorRef,\n private _org: OrganisationService,\n ) {\n super();\n }\n\n /** Events to display for the active date */\n public events: Booking[] = []\n\n public ngOnInit(): void {\n this.events = this.filterEvents();\n this._service.initialised.pipe(first((_) => _)).subscribe(() => {\n this.settings = this._service.setting('app.day_view') || {};\n // this.subscription(\n // 'breakdown',\n // this._service\n // .listen('APP.breakdown')\n // .subscribe((state) => {\n // this.overflow_only = state;\n // this.events = [...this.filterEvents()];\n // })\n // );\n // this.subscription(\n // 'legend',\n // this._service\n // .listen('CONCIERGE.legend')\n // .subscribe((state) => (this.legend = state || {}))\n // );\n this.subscription(\n 'bookings',\n this._booking_state_service.filtered.subscribe((list) => {\n this.event_list = [...list];\n this.events = [...this.filterEvents()];\n this.cdr.detectChanges();\n })\n );\n this.checkInView();\n });\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n /* istanbul ignore else */\n if (changes.scroll) {\n this.checkInView();\n }\n if (changes.space) {\n this.event_list = [...this.event_list];\n this.timeout('in_view', () => this.checkInView(), 100);\n }\n /* istanbul ignore else */\n if (changes.last_update) {\n this.timeout('update_overlaps', () => this.calculateOverlaps(), 1000);\n }\n }\n\n //replace this with concierge space.comp filterEvents\n // private filterEvents(): Booking[] {\n // if (this.space) {\n // const bookings = this.event_list;\n // const list = bookings.filter((event) => {\n // if (this.override_state && this.override_state === event.icaluid) {\n // this.loading[event.id] = true;\n // }\n\n // const ignore = event.is_recurrent && event.recurrence_type === 'master';\n\n // return (\n // !ignore && !event.declined && // filtered declied bookings\n // event.room.email === this.space.email &&\n // (!this.overflow_only ||\n // event.setup[event.room.email] ||\n // event.breakdown[event.room.email])\n // );\n // }).map(e => new Booking({...e.toJSON()}) );\n\n // return list;\n // }\n // return [];\n // }\n\n private filterEvents(): Booking[] {\n if (!this.space) {\n return [];\n }\n \n return this.event_list.filter((event) => {\n // Mark as loading if override state matches.\n if (this.override_state && this.override_state === event.icaluid) {\n this.loading[event.id] = true;\n }\n \n const isRecurrentMaster = event.is_recurrent && event.recurrence_type === 'master';\n const isRoomEmailMatch = event.multi_rooms.some(room => room.email === this.space.email);\n \n // Determine if the event should be included based on setup or breakdown conditions.\n const isIncludedInSetupOrBreakdown = event.multi_rooms.some(room => {\n return event.setup[room.email] || event.breakdown[room.email];\n });\n \n return !isRecurrentMaster && isRoomEmailMatch && (!this.overflow_only || isIncludedInSetupOrBreakdown);\n }).map(event => new Booking({...event.toJSON()}));\n }\n\n /* istanbul ignore next */\n /**\n * Track by function for ngFor optimisation\n * @param index Index of the item\n * @param item Data associated with the item at the given index\n */\n public trackByFn(index: number, item: Booking) {\n return item.id || index;\n }\n\n /**\n * Calculate to overlap details for the booking events on the space\n */\n private calculateOverlaps() {\n const events = this.events.sort(\n (a, b) =>\n a.startDateTz.ms - b.startDateTz.ms ||\n a.duration - b.duration ||\n (a.title || '').localeCompare(b.title || '')\n );\n events.forEach((i) => (this.overlap_details[i.id] = { index: 0, total: 1 }));\n for (const bkn of events) {\n const bkn_start = bkn.startDateTz.startOfValue('minute');\n const bkn_end = bkn.endDateTz.startOfValue('minute');\n let count = 1;\n let index = 0;\n const collisions: Booking[] = [];\n for (const cmp of events) {\n /* istanbul ignore else */\n if (bkn.id !== cmp.id) {\n const cmp_start = cmp.startDateTz.startOfValue('minute');\n const cmp_end = cmp.endDateTz.startOfValue('minute');\n /* istanbul ignore else */\n if (\n bkn_start.isSameDate(cmp_start, 'minute') ||\n (bkn_start.isAfterDate(cmp_start) && bkn_start.isBeforeDate(cmp_end)) ||\n bkn_end.isSameDate(cmp_end, 'minute') ||\n (bkn_end.isAfterDate(cmp_start) && bkn_end.isBeforeDate(cmp_end))\n ) {\n count++;\n collisions.push(bkn);\n /* istanbul ignore else */\n if (\n events.findIndex((i) => i.id === bkn.id) >\n events.findIndex((i) => i.id === cmp.id)\n ) {\n index++;\n }\n }\n }\n }\n this.overlap_details[bkn.id] = { index: Math.max(0, index), total: count };\n }\n }\n\n /**\n * Check whether the space column is with the view of the\n */\n private checkInView() {\n /* istanbul ignore else */\n if (this.view && this.view.nativeElement) {\n const el = this.view.nativeElement;\n this.in_view =\n el.offsetLeft + this.scroll >= -240 &&\n el.offsetLeft + this.scroll <= window.innerWidth;\n this.inView.emit(this.in_view);\n }\n }\n\n /**\n * Initialise drag events\n */\n public initDrag() {\n this.box = this.view.nativeElement.getBoundingClientRect();\n this.dragging.emit(true);\n }\n\n /**\n * Cleanup after drag\n */\n public endDrag() {\n this.timeout('end_drag', () => (this.top = 0), 10);\n this.dragging.emit(false);\n }\n\n /**\n * Update top position of the dragged event placeholder\n * @param booking Booking being dragged\n * @param event Drag event\n */\n public updateDragTop(event: CdkDragMove) {\n /* istanbul ignore else */\n if (event.delta.y) {\n const y = event.pointerPosition.y;\n const top = (y - this.box.top - this.scroll_top) / this.box.height;\n const top_minutes = (Math.round((top * 24 * 60) / 15) * 15) / 60;\n this.top = (top_minutes / 24) * 100;\n\n }\n }\n\n\n\n\n\n public checkAvailabilityOnGivenTime(selectedBlockStart, selectedBlockEnd) {\n const runningBookings =\n this.events?.filter((bks) => {\n const startEpoch = new DateTZ({\n date: bks.start_epoch * 1000,\n is_local_tz: false,\n building_tz: bks.timezone,\n }).ms;\n const endEpoch = new DateTZ({\n date: bks.end_epoch * 1000,\n is_local_tz: false,\n building_tz: bks.timezone,\n }).ms;\n const hasValidBreakdown: boolean =\n bks.breakdown &&\n Object.values(bks.breakdown).some((value) => value !== null);\n if (selectedBlockStart.ms === endEpoch && hasValidBreakdown) {\n return true;\n } else\n return (\n (selectedBlockStart.ms >= startEpoch && selectedBlockStart.ms < endEpoch) ||\n (selectedBlockEnd.ms > startEpoch && selectedBlockEnd.ms < endEpoch)\n );\n }) || [];\n return !!runningBookings.length;\n }\n\n\t\t/** Whether booking has been ended */\n public expired(booking): boolean {\n\t\t\treturn booking.timeBasedStatusLabel === 'done';\n\t\t}\n\n\t\t\n}\n","\n\n
\n
\n
\n
\n
\n\n \n \n \n\t\t\n
\n
\n \n
\n
\n
\n \n\n\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { MatDialog } from '@angular/material/dialog';\nimport { first, take } from 'rxjs/operators';\n\nimport { BaseDirective, HashMap, Identity } from '@mckinsey-converge/base';\n// import { BookingModalComponent } from 'src/app/bookings/booking-modal/booking-modal.component';\n\nexport interface NavItem {\n\tdisplayName: string;\n\ticonName?: string;\n\troute?: string;\n\tmeta?:{}; \n\tchildren?: NavItem[];\n}\n\n\nimport {\n ApplicationService,\n BookingStateService,\n BookingStoreState,\n BuildingLevel,\n OrganisationService,\n selectBookingByIdResultsFromState,\n User,\n Booking,\n SpacesService,\n Space,\n Building,\n searchRoomsAndBookings\n} from '@mckinsey-converge/data-common';\n\n\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { UserStoreState } from '@mckinsey-converge/user';\nimport { Store } from '@ngrx/store';\nimport { BuildingStoreState } from 'libs/buildings/src';\nimport { MyBookingsStoreState } from '@mckinsey-converge/bookings';\nimport { Subscription } from 'rxjs';\nimport { DropdownOpion } from '@mckinsey-converge/ui';\n\nexport type RoomBookingStoreState = BookingStoreState & BuildingStoreState & MyBookingsStoreState & UserStoreState;\n\n@Component({\n selector: 'staff-calendar',\n templateUrl: './staff-calendar.component.html',\n styleUrls: ['./staff-calendar.component.scss']\n})\nexport class StaffCalendarComponent extends BaseDirective implements OnInit {\n /** Currently selected date, starts out with no timezone data, gets updated later */\n public dateTz: DateTZ = DateNow(new Date());\n\n /** ID of the currently selected level */\n public active_level: string = '';\n /** ID of the currently selected type */\n public active_type: string = '';\n /** List of levels available for the active building */\n public levels: BuildingLevel[] = [];\n /** List of space types available for the active building */\n public space_types: Identity[] = [];\n /** Whether to show only items with a setup and/or breakdown time */\n public only_overflow: boolean;\n \n\n\t\tprivate spaceTypesSubscription: Subscription;\n\n\t\tevent_list: Booking[] = [];\n\t\tsearchStr: any;\n\t\tfoundSearchLength: number = 0;\n\t\tsearchedCounter: any = 1;\n\t\tshowSrchWarning: boolean;\n\t\ttotalFoundItem: number = 0;\n spaces: Space[] = [];\n\t\tbuildingsInSameCity: Building[];\n\t\tbuildingMenuItems: NavItem[];\n\t\tactiveBuildingName: string;\n\t levelsDD: any = [];\n\t roomLevelDD: { ddBoxClass: string; options: any; defaultSelected: any; onChangeCallback: any; };\n \n\n\n constructor(\n private _service: ApplicationService,\n private _org: OrganisationService,\n private _dialog: MatDialog,\n private _router: Router,\n private _route: ActivatedRoute,\n private _booking_state_service: BookingStateService,\n private _spaces: SpacesService,\n private store: Store,\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this._service.title = 'Day View';\n\n\t\t\t\tthis._org.initialised.pipe(first((_) => _)).subscribe(() => {\n // Init dateTz here once the organization data is loaded.\n this.dateTz = new DateTZ({ date: this.dateTz.ms, is_local_tz: false, building_tz: this.timezone });\n this.subscription(\n 'route.params',\n this._route.paramMap.subscribe((params) => {\n /* istanbul ignore else */\n if (params.has('level') && this.active_level !== params.get('level')) {\n const level = this._org.levelWithID(params.get('level'));\n /* istanbul ignore else */\n if (level) {\n const building = this._org.buildings.find(\n (bld) => bld.id === level.building_id\n );\n /* istanbul ignore else */\n if (building) {\n this.active_level = level.id;\n this._org.building = building;\n this._booking_state_service.setZone(this.active_level || this._org.building.id);\n }\n }\n }\n })\n );\n this.subscription(\n 'building',\n this._org.listen('active_building').subscribe(() => {\n this._booking_state_service.updateRoomList();\n // Update dateTz here when the building is changed.\n\t\t\t\t\t\t\t\t\t\tthis.dateTz = new DateTZ({\n\t\t\t\t\t\t\t\t\t\t\tdate: this.dateTz.ms,\n\t\t\t\t\t\t\t\t\t\t\tis_local_tz: false,\n\t\t\t\t\t\t\t\t\t\t\tbuilding_tz: this.timezone,\n\t\t\t\t\t\t\t\t\t\t});\n const building = this._org.building;\n\n /* istanbul ignore else */\n if (!building.levels.find((lvl) => lvl.id === this.active_level)) {\n this.active_level = building?.levels[0]?.id;\n this.updateLevel();\n }\n\t\t\t\t\t\t\t\t\t\tthis.initSpace();\n\n this.levels = [{ id: '', name: 'All Levels' } as any].concat(building.levels);\n\t\t\t\t\t\t\t\t\t\tthis.levels.sort((a, b) => b.name.localeCompare(a.name, undefined, {\n\t\t\t\t\t\t\t\t\t\t\t\tnumeric: true,\n\t\t\t\t\t\t\t\t\t\t\t\tignorePunctuation: true,\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\tthis.levelsDD = [];\n\t\t\t\t\t\t\t\t\t\tthis.levels.forEach(el => {\n\t\t\t\t\t\t\t\t\t\t\tthis.levelsDD.push({\n\t\t\t\t\t\t\t\t\t\t\t\t display: el.name, value: el.id, meta: {} \n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\t\t\tthis.roomLevelDD = {\n\t\t\t\t\t\t\t\t\t\t\tddBoxClass: 'room-level',\n\t\t\t\t\t\t\t\t\t\t\toptions: this.levelsDD,\n\t\t\t\t\t\t\t\t\t\t\tdefaultSelected: this.levelsDD.filter(el => el.value === this.active_level )[0],\n\t\t\t\t\t\t\t\t\t\t\tonChangeCallback: this.onChangeActiveLevel.bind(this)\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\tthis.buildingsInSameCity = this._org.buildings.filter(\n\t\t\t\t\t\t\t\t\t\t\t(_) => _.city === building.city\n\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\tthis.generateBuildingMenu();\n\n \n })\n );\n \n });\n\n this.subscription(\n 'bookings',\n this._booking_state_service.filtered.subscribe((list) => {\n this.event_list = [...this.filterEvents(list)];\n\n })\n );\n }\n\n private filterEvents(list): Booking[] {\n\t\t\tconst bookings = list;\n\t\t\tconst filterd_booking = bookings.filter((event) => {\n\t\t\t\t\tconst ignore = event.is_recurrent && event.recurrence_type === 'master';\n\t\t\t\t\treturn ( !ignore );\n\t\t\t});\n\n\t\t\treturn filterd_booking || [];\n }\n\n public initSpace() {\n this.subscription(\n 'spaces',\n this._spaces.listen('list').subscribe((spaces) => {\n const zone_id = !this.active_level ? this._org.building.id : this.active_level;\n this.spaces = this._spaces.filter((_) => _.zones.indexOf(zone_id) >= 0 && _.bookable);\n })\n );\n }\n\n // isIncludes = (item: any, field: string, searchVaue: string) => (item && item[field] && item[field].toLowerCase().includes(searchVaue));\n \n searchBooking(value) {\n\n // Resetting warning flag\n this.showSrchWarning = false;\n\n // Converting search value to lower case for case-insensitive comparison\n const searchValue = value.toLowerCase().trim();\n \n // Combining event list and space arrays into one arrya for searchig \n const allItems = [...this.event_list, ...this.spaces];\n // Filtering the combine array to find matching room or booking\n const filteredItems = searchRoomsAndBookings(allItems, searchValue);\n \n // Updating the total number of found items in serach\n this.totalFoundItem = filteredItems.length;\n\n // Setting showSrchWarning flag if no result were found \n this.showSrchWarning = !this.totalFoundItem;\n\n // Updating lenght of found items for later use\n this.foundSearchLength = this.totalFoundItem - 1;\n\n if(this.searchStr !== value) {\n // Setting the first found as the current viewing item\n this._service.set('CONCIERGE.day_view.viewing', filteredItems[0]);\n // Resetting the search counter\n this.searchedCounter = 0;\n }\n else {\n // Handling case where seached string is the same as previou one \n // Incrementing search counter, loopoing back to 0 if it exceed the length of found items\n this.searchedCounter = ( this.searchedCounter < this.foundSearchLength ) ? this.searchedCounter + 1 : 0\n // Setting the next found items as the current viewing item\n this._service.set('CONCIERGE.day_view.viewing', filteredItems[this.searchedCounter]);\n }\n\n // Storing the current search string for future camparison\n this.searchStr = value;\n }\n\n\n public ngOnDestroy(): void {\n this._service.set('CONCIERGE.day_view.viewing', []);\n }\n\n\n \n\n // that encapsulates the common elements.\n public get timezone() {\n return this._org.building?.timezone || localStorage.getItem('CONCIERGE.timezone');\n }\n\n public updateDateTz(dateTz: DateTZ) {\n this.dateTz = dateTz;\n }\n\n public updateLevel() {\n this._booking_state_service.setZone(this.active_level || this._org.building.id);\n\t\t\t\tthis.initSpace();\n // this._router?.url?.includes('/booking-calendar') && this._router.navigate(['/home/results/booking-calendar', this.active_level], {relativeTo: this._route});\n }\n\n\t\tpublic generateBuildingMenu() {\n\n\n\t\t\tif(this.buildingsInSameCity.length) {\n\n\t\t\t\tconst menuItem: NavItem[] = [{\n\t\t\t\t\tdisplayName: this._org.building.name,\n\t\t\t\t\ticonName: 'close',\n\t\t\t\t\tchildren:[]\n\t\t\t\t}];\n\n\n\t\t\t\tthis.buildingsInSameCity.forEach(el => {\n\t\t\t\t\tconst buildingLevels: NavItem[] = [];\n\n\t\t\t\t\tel.levels.forEach(lvl => buildingLevels.push({\n\t\t\t\t\t\tdisplayName: lvl.name,\n\t\t\t\t\t\tchildren: [],\n\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\tlevel_id : lvl.id,\n\t\t\t\t\t\t\tbuilding_id: lvl.building_id\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t);\n\n\t\t\t\t\tbuildingLevels.push({ displayName: 'All Levels', children: [], meta: {\n\t\t\t\t\t\t\tlevel_id : '',\n\t\t\t\t\t\t\tbuilding_id: el.id\n\t\t\t\t\t\t} \n\t\t\t\t\t});\n\n\t\t\t\t\tmenuItem[0].children.push({\n\t\t\t\t\t\tdisplayName: el.name,\n\t\t\t\t\t\tchildren: buildingLevels,\n\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\tbuilding_id: el.id\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t});\n\n\t\t\t\tthis.buildingMenuItems = menuItem;\n\n\t\t\t}\n\n\t\t\t\n\t\t}\n\n\t\tpublic updateActiveBuilding (node) {\n\t\t\t// console.log(node);\n\t\t\tconst building = this.buildingsInSameCity.filter(bld => bld.id === node.meta.building_id)[0];\n\t\t\tthis._org.building = building;\n\t\t\tthis.activeBuildingName = building.name;\n\n\t\t\n\t\t\t\tthis.levels = [{ id: '', name: 'All Levels' } as any].concat(building.levels);\n\t\t\t\tthis.levels.sort((a, b) => b.name.localeCompare(a.name, undefined, {\n\t\t\t\t\t\tnumeric: true,\n\t\t\t\t\t\tignorePunctuation: true,\n\t\t\t\t\t})\n\t\t\t\t);\n\n\n\t\t\t\tthis.active_level = node.meta.level_id;\n\t\t\t\tthis.roomLevelDD.defaultSelected = this.levelsDD.filter(el => el.value === this.active_level )[0];\n\t\t\t\tthis.updateLevel();\n\t\t}\n\n\t\tonChangeActiveLevel(level:any) {\n\t\t\tthis.active_level = level.value;\n\t\t\t\n\t\t\tthis.updateLevel();\n\n\t\t}\n\n\t\t\n}\n\n","
\n
\n \n
\n \n
\n \n \n 0\">\n
\n {{activeBuildingName || item.displayName}}\n
\n \n
\n
\n \n
\n \n \n
\n
\n \n 1\">\n\n
\n \n \n \n
{{ totalFoundItem }}
\n \n
\n \n No search found!\n
\n
\n
\n\n \n \n \n \n
\n\n
\n \n
\n
\n
\n\n","import {\n Component,\n ElementRef,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Renderer2,\n SimpleChanges,\n ViewChild, NgZone, DoCheck, ChangeDetectionStrategy, ChangeDetectorRef\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { MatDialog } from '@angular/material/dialog';\nimport { filter, first } from 'rxjs/operators';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { Space } from '@mckinsey-converge/data-common';\nimport { ApplicationService } from '@mckinsey-converge/data-common';\nimport { Booking } from '@mckinsey-converge/data-common';\nimport { HashMap, Identity } from '@mckinsey-converge/base';\n// import { MeetingDetailsModalComponent } from 'src/app/calendar/meeting-details-modal/meeting-details-modal.component';\nimport { SpacesService } from '@mckinsey-converge/data-common';\nimport { OrganisationService } from '@mckinsey-converge/data-common';\nimport { BookingStateService } from '@mckinsey-converge/data-common';\nimport { DateNow, DateTZ, toMiddayUTC } from '@mckinsey-converge/date-tz';\nimport { isToday } from 'date-fns';\nimport { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\n\n\n\nconst UPDATE_INTERVAL = 10;\n\n@Component({\n selector: 'day-view-timeline',\n templateUrl: './timeline.component.html',\n styleUrls: ['./timeline.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DayViewTimelineComponent\n extends BaseDirective\n implements OnInit, OnChanges, OnDestroy\n{\n /** DateTZ object of the active date */\n @Input() public dateTz: DateTZ = DateNow(new Date());\n /** ID of the active level */\n @Input() public level: string;\n /** ID of the room type to filter displayed spaces by */\n @Input() public space_type: string;\n /** List of shown legend items */\n @Input() public legend: HashMap = {};\n /** Whether to show only items with a setup and/or breakdown time */\n @Input() public overflow_only: boolean;\n /** Whether space bookings are being loaded */\n @Input() public loading: boolean;\n\n @Input() undo_action;\n\n /** List of timeblocks to display */\n public time_blocks: Identity[] = this.generateTimeBlocks();\n /** Top value of the content scroll */\n public scroll_top: number = 0;\n /** Left value of the content scroll */\n public scroll_left: number = 0;\n /** Offset of the scroll value when starting a drag */\n public scroll_offset: number = 0;\n /** List of spaces to display for */\n public spaces: Space[] = [];\n /** List of spaces to display for */\n public filtered_spaces: Space[] = [];\n /** Mapping of space ids to whether they are in view */\n public in_view: { [id: string]: boolean } = {};\n /** Percent of the day that is now */\n public now: number;\n /** Currently active hour of the day */\n public active_hour: string;\n /** Mapping of spaces loading booking date */\n public loading_space: { [id: string]: boolean } = {};\n /** Booking ID to open modal for */\n public view_id: string;\n /** Last update time for the space bookings */\n public last_update: number = 0;\n /** Whether an event is being dragged */\n public is_dragging: boolean;\n /** Client rectangle for the scroll area */\n public box: ClientRect;\n /** Whether to show the holding bay */\n // public show_holding_bay: boolean = true;\n\n public space_zones: string[] = [];\n\n public is_today: boolean = this.isToday();\n public modalInitialized = false;\n\n /** Scrollable area of the day view */\n @ViewChild('scroll_area', { static: true }) private scroll_area: ElementRef;\n\n @ViewChild(CdkVirtualScrollViewport) virtualScroll: CdkVirtualScrollViewport;\n isEventMoving: boolean = false;\n bookingEl: any;\n timeoutID: any;\n column: any;\n\n /** Update scroll box when the window is resized */\n @HostListener('window:resize')\n public onResize() {\n if (this.scroll_area['elementRef'].nativeElement) {\n this.box = this.scroll_area['elementRef'].nativeElement.getBoundingClientRect();\n }\n }\n\n public get is_loading() {\n return this._booking_state_service.loading;\n }\n\n public isToday() {\n return new DateTZ({\n date: toMiddayUTC(this.dateTz).ms,\n is_local_tz: false,\n building_tz: this._org.building?.timezone || localStorage.getItem('CONCIERGE.timezone'),\n }).isSameDate(\n new DateTZ({\n date: Date.now(),\n is_local_tz: false,\n building_tz: this._org.building?.timezone || localStorage.getItem('CONCIERGE.timezone'),\n }),\n 'day'\n );\n }\n\n constructor(\n private _service: ApplicationService,\n private _spaces: SpacesService,\n private _booking_state_service: BookingStateService,\n private _org: OrganisationService,\n private _route: ActivatedRoute,\n private _renderer: Renderer2,\n private _dialog: MatDialog,\n private _zone: NgZone,\n private cdr: ChangeDetectorRef,\n ) {\n super();\n }\n\n public get holding_bay(): Space {\n const bld = this._org.building;\n /* istanbul ignore else */\n if (bld && bld.holding_bay) {\n return this._spaces.find(bld.holding_bay);\n }\n return null;\n }\n\n public ngOnInit(): void {\n this._spaces.initialised.pipe(first((_) => _)).subscribe(() => {\n this._org.initialised.pipe(first((_) => _)).subscribe(() => {\n this._booking_state_service.startPollingEveryFiveMin();\n const zone_id = !this.level ? this._org.building.id : this.level;\n this.spaces = this._spaces.filter((_) => _.zones.indexOf(zone_id) >= 0);\n this.init();\n this.initSpaces();\n // Update time\n this.updateTime();\n this._zone.runOutsideAngular(() => {\n this.interval('time', () => this.updateTime(), 15 * 1000);\n });\n // R--- return to see if the booking service needs updating\n this.subscription(\n 'dateTz',\n this._booking_state_service.dateTz.subscribe((dateTz) => {\n // const dateTz = new DateTZ({date});\n this.dateTz = dateTz;\n })\n );\n });\n });\n this.is_today = this.isToday();\n\n this.subscription(\n 'spaces',\n this._spaces.listen('list').subscribe((spaces) => {\n const zone_id = !this.level ? this._org.building.id : this.level;\n this.spaces = this._spaces.filter((_) => _.zones.indexOf(zone_id) >= 0);\n this.init();\n this.initSpaces();\n // Update time\n this.updateTime();\n })\n );\n\n }\n\n ngAfterViewInit() {\n const d2 = this._renderer.createElement('div');\n this._renderer.addClass(d2, 'adjustable-room-block-2');\n this.virtualScroll.elementRef && this._renderer.appendChild(this.virtualScroll.elementRef.nativeElement, d2);\n }\n\n\n public ngOnChanges(changes: SimpleChanges): void {\n /* istanbul ignore else */\n if (changes.level && this._org.building) {\n const zone_id = !this.level ? this._org.building.id : this.level;\n this.spaces = this._spaces.filter((_) => _.zones.indexOf(zone_id) >= 0);\n this.updateTime();\n this.initSpaces();\n }\n if (changes.space_type) {\n this.initSpaces();\n }\n }\n\n public ngOnDestroy() {\n if (this._booking_state_service?.stopPolling) this._booking_state_service?.stopPolling();\n }\n\n public init() {\n this._service.title = 'Day View';\n this.subscription(\n 'viewing',\n this._service\n .listen('CONCIERGE.day_view.viewing')\n .subscribe((event) => this.scrollIntoView(event) )\n );\n // Subscribe to route query changes\n this.subscription(\n 'route.query',\n this._route.queryParamMap.subscribe((params) => {\n /* istanbul ignore else */\n if (params.has('view') || localStorage.getItem('CONCIERGE.view_booking')) {\n this.view_id = params.get('view');\n const details = localStorage.getItem('CONCIERGE.view_booking');\n const spaceJson = localStorage.getItem('CONCIERGE.view_booking_space');\n /* istanbul ignore else */\n if (details) {\n const space: Space | undefined = spaceJson\n ? new Space(JSON.parse(spaceJson))\n : undefined;\n const booking = new Booking({ ...JSON.parse(details), room: space });\n if(!this.modalInitialized) {\n this.modalInitialized = true;\n // this.view(booking, space);\n localStorage.removeItem('CONCIERGE.view_booking');\n localStorage.removeItem('CONCIERGE.view_booking_space');\n }\n }\n }\n })\n );\n \n /* istanbul ignore else */\n if (this.scroll_area['elementRef'].nativeElement) {\n this.box = this.scroll_area['elementRef'].nativeElement.getBoundingClientRect();\n }\n }\n\n /**\n * Update scroll parameters to match the change in the scroll position\n * @param event\n */\n public updateScroll(event) {\n this.scroll_top = event.target.scrollTop;\n this.scroll_left = event.target.scrollLeft;\n }\n\n\n\n /** Generate time blocks to display on the day view */\n private generateTimeBlocks(): Identity[] {\n const blocks: Identity[] = [];\n const date = DateNow(new Date()).startOfValue('hour');\n for (let i = 0; i < 24; i++) {\n blocks.push({\n id: date.setValue({ hour: i }).formatDate('HH:mm'),\n name: date.setValue({ hour: i }).formatDate('h:mma').toLocaleLowerCase(),\n });\n }\n return blocks;\n }\n\n /** Update the now line position */\n private updateTime() {\n const now = new DateTZ({\n date: Date.now(),\n is_local_tz: false,\n building_tz: this._org.building?.timezone || localStorage.getItem('CONCIERGE.timezone'),\n });\n this.now = (now.dateHour + now.minutes / 60) / 24;\n this.active_hour = now.startOfValue('hour').formatDate('HH:mm');\n this.is_today = this.isToday();\n this.cdr.detectChanges();\n }\n\n\n /**\n * Scroll booking to the event on the day view\n * @param booking Booking to scroll into view\n */\n private scrollIntoView(searchData: Booking | Space ) {\n if (searchData && this.scroll_area && this.scroll_area['elementRef'].nativeElement) {\n this.column && this._renderer.removeClass(this.column, 'wild');\n\n /** Select space column element using space id in search data - \n * space.id if seach data is space object or data.space.id if search data is booking object\n * \n */\n const spaceId = searchData['space'] ? searchData['space'].id : searchData.id;\n const element: HTMLDivElement = this.scroll_area['elementRef']\n .nativeElement.querySelector(`#space-col-${spaceId}`);\n\n\n this.column = element;\n\n this.bookingEl && this._renderer.removeClass(this.bookingEl, 'wild');\n if(searchData['space'] && searchData['space'].id) \n this.bookingEl = element?.querySelector(`#${searchData.id}`)?.querySelector('.event-container');\n\n\n /* istanbul ignore else */\n if (element) {\n this.timeoutID && clearTimeout(this.timeoutID);\n this._renderer.addClass(element, 'wild');\n this.bookingEl && this._renderer.addClass(this.bookingEl, 'wild');\n const scroll_box = this.scroll_area['elementRef'].nativeElement.getBoundingClientRect();\n\n let date_percent;\n if(searchData['space'] && searchData['space'].id) {\n date_percent = Math.abs(\n searchData['startDateTz'].dateDiff(\n searchData['startDateTz'].startOfValue('day'),\n 'minutes'\n )\n ) / (24 * 60);\n }\n \n\n const box = element.getBoundingClientRect();\n const left = box.left - scroll_box.left + this.scroll_area['elementRef'].nativeElement.scrollLeft - 500;\n const top = (searchData['space'] && searchData['space'].id) ? \n this.scroll_area['elementRef'].nativeElement.scrollHeight * date_percent - 10 :\n 0\n\n\n this.scroll_area['elementRef'].nativeElement.scrollTo({\n left: left,\n top: top,\n behavior: 'smooth',\n });\n\n this.timeoutID = setTimeout(()=> {\n element && this._renderer.removeClass(element, 'wild');\n this.bookingEl && this._renderer.removeClass(this.bookingEl, 'wild');\n }, 3000);\n }\n }\n }\n\n /**\n * Setup an auto-scroll for the display view\n * @param x\n * @param y\n */\n public scrollView(x: number, y: number) {\n /* istanbul ignore else */\n if (x || y) {\n this.scroll_area['elementRef'].nativeElement.scrollTop += y || 0;\n this.scroll_area['elementRef'].nativeElement.scrollLeft += x || 0;\n /* istanbul ignore else */\n if (\n (y &&\n this.scroll_area['elementRef'].nativeElement.scrollTop >=\n this.scroll_area['elementRef'].nativeElement.scrollHeight) ||\n (x &&\n this.scroll_area['elementRef'].nativeElement.scrollLeft >=\n this.scroll_area['elementRef'].nativeElement.scrollWidth) ||\n (y && this.scroll_area['elementRef'].nativeElement.scrollTop <= 0) ||\n (x && this.scroll_area['elementRef'].nativeElement.scrollLeft <= 0)\n ) {\n this.clearInterval('auto_scroll');\n }\n // this.updateScroll({ target: this.scroll_area['elementRef'].nativeElement });\n }\n }\n\n public clearSelected() {\n this._service.set('CONCIERGE.day_view.viewing', null);\n }\n\n public cancelScroll() {\n this.clearInterval('auto_scroll');\n }\n\n /** */\n\n // public dragChange(is_dragging: boolean) {\n // if (is_dragging) {\n // this.scroll_offset = this.scroll_area['elementRef'].nativeElement.scrollTop; \n // this.subscription(\n // 'listen_move',\n // this._renderer.listen('window', 'mousemove', (event: MouseEvent) => {\n // const position = { x: event.clientX, y: event.clientY };\n // const y = position.y > this.box.bottom - this.box.height * 0.05\n // ? 1\n // : position.y < this.box.top + this.box.height * 0.05\n // ? -1\n // : 0;\n // const x = position.x > this.box.right - this.box.width * 0.05\n // ? 1\n // : position.x < this.box.left + this.box.height * 0.05\n // ? -1\n // : 0;\n // this.scrollView(x * 5, y * 5);\n // this._zone.runOutsideAngular(() => {\n // this.interval('auto_scroll', () => {\n // return this.scrollView(x * 40, y * 40) \n // }, 15);\n // });\n // this.cdr.detectChanges();\n // })\n // );\n // this.clearInterval('bookings');\n // } else {\n // this.cancelScroll();\n // this.unsub('listen_move');\n // }\n // }\n\n private initSpaces() {\n const holding_bay = this.holding_bay;\n this.filtered_spaces = this.spaces.filter(\n (i) =>\n (!this.space_type || i.zones.indexOf(this.space_type) >= 0) &&\n (!holding_bay || i.id !== holding_bay.id) &&\n i.bookable\n );\n this.filtered_spaces.sort((a, b) => a.local_name.localeCompare(b.local_name));\n this.space_zones = this.spaces.map((i) => `space-col-${i.id}`);\n }\n\n\n\n\t// public onEventDragging(isDragging: boolean): void {\n\t// \t\t// Check if dragging is initiated\n\t// \t\tif (isDragging) {\n\t// \t\t\t// Store the current scroll position\n\t// \t\t\tthis.scroll_offset = this.scroll_area['elementRef'].nativeElement.scrollTop;\n\t// \t\t\t// Subscribe to mouse move events\n\t// \t\t\tthis.subscribeToMouseMove();\n\t// \t\t\t// Clear existing interval for bookings\n\t// \t\t\tthis.clearInterval('bookings');\n\t// \t\t} else {\n\t// \t\t\t// Cancel scroll operation\n\t// \t\t\tthis.cancelScroll();\n\t// \t\t\t// Unsubscribe from mouse move events\n\t// \t\t\tthis.unsubscribeFromMouseMove();\n\t// \t\t}\n\t// }\n\n\t// Subscribe to mouse move events and handle scroll logic\n\t// private subscribeToMouseMove(): void {\n\t// \tthis.subscription(\n\t// \t\t'listen_move',\n\t// \t\tthis._renderer.listen('window', 'mousemove', (event: MouseEvent) => {\n\t// \t\t\t// Get mouse position\n\t// \t\t\tconst position = { x: event.clientX, y: event.clientY };\n\t// \t\t\t// Calculate scroll direction based on mouse position\n\t// \t\t\tconst [x, y] = this.calculateScrollDirection(position);\n\t// \t\t\t// Scroll the view based on calculated direction\n\t// \t\t\tthis.scrollView(x * 5, y * 5);\n\t// \t\t\t// Run auto-scroll logic\n\t// \t\t\tthis.runAutoScroll(x, y);\n\t// \t\t\t// Detect changes to update the view\n\t// \t\t\tthis.cdr.detectChanges();\n\t// \t\t})\n\t// \t);\n\t// }\n\n\t// Calculate scroll direction based on mouse position\n\t// private calculateScrollDirection(position: { x: number, y: number }): [number, number] {\n\t// \tconst tolerance = 0.05;\n\t// \tconst x = this.calculateDirection(position.x, this.box.left, this.box.right, tolerance);\n\t// \tconst y = this.calculateDirection(position.y, this.box.top, this.box.bottom, tolerance);\n\t// \treturn [x, y];\n\t// }\n\n\t// Calculate direction based on mouse position and element boundaries\n\t// private calculateDirection(pos: number, min: number, max: number, tolerance: number): number {\n\t// \tif (pos > max - this.box.width * tolerance) {\n\t// \t\t\treturn 1; // Scroll right\n\t// \t} else if (pos < min + this.box.width * tolerance) {\n\t// \t\t\treturn -1; // Scroll left\n\t// \t} else {\n\t// \t\t\treturn 0; // Do not scroll\n\t// \t}\n\t// }\n\n\t// Run auto-scroll logic\n\t// private runAutoScroll(x: number, y: number): void {\n\t// \tthis._zone.runOutsideAngular(() => {\n\t// \t\t\tthis.interval('auto_scroll', () => this.scrollView(x * 10, y * 10), 10);\n\t// \t});\n\t// }\n\n\t// Unsubscribe from mouse move events\n\t// private unsubscribeFromMouseMove(): void {\n\t// \tthis.unsub('listen_move');\n\t// }\n\n // public movingEvent(booking) {\n // this.isEventMoving = booking.isMoving;\n // this.loading_space[booking.movingId] = booking.isMoving;\n \n // }\n\n}\n\n","
\n\t
\n\t\t\n\t
\n\n\t
\n\t\t
\n\t\t\t\n\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
Time
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
{{ timeslot.name }}
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
{{ room.local_name }}
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tCapacity - {{ room.capacity || '0' }}\n\t\t\t\t\t\t\t{{ room.capacity === 1 ? 'person' : 'people' }}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\n\t\t
\n\n\t\t
\n\t\t\t
\n\t\t
\n
\n
\n
\n\t
\n\t\t
Moving meeting
\n\t\t
\n\t\t\t\n\t\t
\n\t
\n
\n","import {\n Component,\n Input,\n Output,\n EventEmitter\n} from '@angular/core';\nimport {\n Router\n} from '@angular/router';\nimport {\n BaseDirective,\n} from '@mckinsey-converge/base';\nimport {\n generateFeedbackUrl,\n Urls\n} from '../../utilities/urls';\nimport {\n Store\n} from '@ngrx/store';\nimport {\n Booking,\n Building,\n BookingStoreState,\n clearBookingFormData,\n cateringAllowed,\n openBookingSurvey,\n roomHasCateringHours\n} from '@mckinsey-converge/data-common';\n\nexport enum TopBarHeaderMode {\n Light = 'light',\n Dark = 'dark',\n}\n\nexport interface statusObject {\n text: string,\n title: string,\n image: string,\n}\n\n@Component({\n selector: 'booking-confirmation',\n template: `\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n

{{ data?.isEditSeries || (booking.is_recurrent && booking.recurrence_type === 'master') ? 'Recurring Series' : 'Booking' }} {{data?.status.title}}

\n
\n \n \n \n
\n
\n
\n

{{ booking.title }}

\n

Room is no longer available for your chosen date and time

\n
\n \n
\n
Status: {{data?.status.text}}
\n
Date: {{data?.dateString}}
\n
Time: {{data?.timeString}}
\n
{{data?.typeString}} meeting ({{data?.durationString}})
\n
\n
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
{{booking?.recurrence_period === 'list' ? 'Specific dates' : booking?.recurrence_period | titlecase}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t - Conflicts({{data?.isConflictWithOccurences()?.total_Conflicts}}) \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
Start date: {{data?.dateString}}
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
End date: {{data?.endDateString}}
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
Time: {{data?.timeString}}
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
{{data?.type}} meeting ({{data?.durationString}})
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\n
\n \n
\n
\n
\n
\n
\n \n \n \n
\n
\n
\n
\n \n
\n Address: {{building.address}},\n {{building.city}}\n
\n
Room: {{booking.space.local_name}}
\n
Room Capacity: {{booking.space.capacity}}
\n
\n \n
\n \n \n \n \n
\n
\n
\n
\n \n
\n \n

{{ data?.status.text }}

\n
\n
\n \n
\n \n

\n \n

\n
\n
\n
\n
\n
\n
\n
\n
\n \n

{{booking.organiser.name}}

\n

{{attendees}}

\n

{{company}}

\n

{{charge_code}}

\n

{{headcount}}

\n

{{notes}}

\n

\n
\n \n

\n

\n

\n

\n

\n

\n \n \n \n

\n
\n
\n
\n
\n

Catering is available for this meeting room

\n Add catering\n\n \n
\n
\n
\n
\n \n

\n

\n

 

\n \n
\n\n
\n
\n
\n

Ooops - we're sorry!

\n

Unfortunately your selected room has been booked by another user

\n

Please try searching for another room.

\n
\n
\n
\n
\n
\n \n
\n \n
\n
\n \n
\n \n
\n
\n
\n
\n
\n `,\n styleUrls: ['./booking-confirmation.component.scss']\n})\nexport class BookingConfirmationComponent extends BaseDirective {\n /** The theme to use **/\n @Input() public mode: TopBarHeaderMode = TopBarHeaderMode.Light;\n\n @Input() public confirmed: boolean;\n @Input() public loading: boolean;\n\n @Input() public modal: boolean;\n\t\t@Input('dataForConfirmation') public data: any; // consolidated data using for confirmation template\n\n /** Emitter for close events */\n @Output() public callback = new EventEmitter();\n\n public currentPage: string;\n\n\t\tpublic get booking(): Booking {\n\t\t\treturn this.data?.booking\n\t\t};\n\n\n public get building(): Building {\n return this.data?.booking.room.building;\n };\n\n public get disableCateringButton(): boolean {\n return !cateringAllowed(this.data?.booking, this.building);\n }\n\n public get charge_code() {\n return (this.data?.booking.equipment_codes || {})[\n this.data?.booking.room.email\n ] || 'No Charge Code'\n }\n\n public get headcount() {\n return (this.data?.booking.expected_attendees || {})[\n this.data?.booking.room.email\n ] || 0\n }\n\n public get attendees() {\n const a = Array.isArray(this.data?.booking.attendees) ? this.data?.booking.attendees.map(u => u?.name ? u.name : '') : [];\n return a.join(', ');\n }\n\n public get company() {\n return this.data?.booking.company.join(', ');\n }\n\n public get notes() {\n const note = this.data?.booking.notes.find(n => n.type === 'equipment');\n return note ? note.message : '';\n }\n\n public get feedback() {\n return generateFeedbackUrl(this.currentPage);\n }\n\n public get roomHasCatering() {\n return roomHasCateringHours(this.building, this.data?.booking?.space) && cateringAllowed(this.data?.booking, this.building);\n }\n\n public listItems(order) {\n return order.items.map(i => `(${i.amount}) ${i.name}`).join(', ');\n }\n\n public formatDeliveryTime(order) {\n return this.data?.booking.startDateTz.addValue({ minutes: order?.delivery_time }).formatDate(\"h:mma\");\n }\n\n constructor(\n private store: Store,\n private _router: Router,\n ) {\n super();\n }\n\n public getStatusColor (statusText: string): string {\n switch (statusText) {\n case 'confirmed':\n return 'approved'\n case 'unavailable':\n return 'cancelled'\n default:\n return statusText;\n }\n }\n\n public hasData() {\n return (this.confirmed && !this.loading) || this.isUnavailable();\n }\n\n public goToHelp() {\n window.open(Urls.Help);\n }\n\n public async returnHome() {\n \n if (this.modal) {\n this.confirmed = false;\n this.loading = false;\n this.callback.emit();\n } else {\n if(!this.isUnavailable()){\n this.store.dispatch(openBookingSurvey());\n // Clear everything out\n this.store.dispatch(clearBookingFormData());\n this._router.navigate(['/', 'home']);\n } else {\n await this._router.navigate(['/home', 'results'], { queryParams: { display: 'list' }});\n }\n }\n }\n\n public async startCatering() {\n this.store.dispatch(clearBookingFormData());\n this.confirmed = false;\n this.loading = false;\n this.callback.emit();\n await this._router.navigate(['/', 'home', 'catering', this.data?.booking.id]);\n }\n\n public isUnavailable() {\n return this.data?.status.text.toLowerCase() === 'unavailable'\n }\n}\n","import {\n Component,\n OnInit,\n} from '@angular/core';\nimport {\n select,\n} from '@ngrx/store';\nimport {\n Booking,\n BookingFormData,\n selectActiveForm,\n checkCollisions,\n getStatusErrorMessage,\n clearBookingFormData,\n BOOKING_STATUS,\n\t\tSpace,\n\t\tgetLastDateFromList\n} from '@mckinsey-converge/data-common';\nimport {\n distinctUntilChanged,\n} from 'rxjs/operators';\nimport { BookingFormBaseComponent } from './booking-form-base.component';\nimport { ConflictsModalComponent, ConflictsModalComponentData } from '@mckinsey-converge/ui';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DialogEvent, shorterLocalDateFormatString } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'app-booking-create',\n templateUrl: './booking-form-base.component.html',\n styleUrls: ['./booking-create.component.scss']\n})\nexport class BookingCreateComponent extends BookingFormBaseComponent implements OnInit {\n\n\n public ngOnInit(): void {\n super.ngOnInit();\n this.subscription('activeForm', this.store.pipe(\n select(selectActiveForm),\n distinctUntilChanged()\n ).subscribe((next: BookingFormData | undefined) => {\n if (next && next?.dateTz && next?.selectedRoom?.space) {\n this.data.next(next);\n this.booking = this.bookingFormToBooking(next);\n }\n }));\n\n\t\t\t\t// in the parent component\n\t\t\t\tthis.updateConfimatinModal();\n }\n\n\n /**\n * Save booking changes\n */\n public saveChanges() {\n this.loading = true;\n this.booking = this.bookingFormToBooking(this.data.value);\n // const booking_form_data = this.data.value;\n this.booking.status = BOOKING_STATUS.approved;\n checkCollisions(\n this._spaces,\n this.booking\n ).then((bookable: boolean) => {\n if (!bookable) {\n // Refactored for\n //\thttps://acaprojects.atlassian.net/browse/MCK-1498\n //\thttps://mckinsey.atlassian.net/browse/CNG-97\n // API is retuning bookings ouside of requested time range\n // TODO check booking date and times for conflict manually\n this.booking.status = BOOKING_STATUS.unavailable;\n return;\n }\n\n // this.booking['opt_out'] = false;\n this._bookings_service.save(this.booking).then(\n (bkn) => {\n\t\t\t\t\t\t\t\t\t// update template properties and booking\n\t\t\t\t\t\t\t\t\tthis.handleBookingSuccessResponse(bkn);\n },\n (err) => {\n if (err.status === 409) {\n this.handleBookingErrorMessage();\n } else {\n\t\t\t\t\t\t\t\t\t\t\tthis.loading = false;\n \tthis.confirmed = false;\n this.displayWarningBanner(getStatusErrorMessage(err.status));\n }\n }\n );\n },(err) => {\n this.timeout('error', () => {\n\t\t\t\t\t\t\t\t\tthis.handleBookingErrorMessage();\n }, 500);\n }\n );\n }\n\n}\n","
\n
\n \n

{{ warningMessage }}

\n \n
\n
\n \n \n \n \n
\n
\n
\n
\n
\n
\n

Book {{booking?.space?.local_name}}

\n
\n
\n \n
\n
\n
\n
\n

{{ data?.value?.is_recurrent ? 'Recurring' : 'Room' }} Booking Details

\n
\n
Date: {{dateString}}
\n
Time: {{timeString}}
\n
{{type}} meeting ({{durationString}})
\n
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
{{data?.value?.recurrence_period === 'list' ? 'Specific dates' : data?.value?.recurrence_period | titlecase}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t - Conflicts({{isConflictWithOccurences()?.total_Conflicts}}) \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
Start date: {{dateString}}
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
End date: {{endDateString}}
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
Time: {{timeString}}
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
{{type}} meeting ({{durationString}})
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\n
\n
Address: {{building?.address}},\n {{building?.city}}
\n
Room: {{booking?.space?.local_name}}
\n
Capacity: {{booking?.space?.capacity}}
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n
\n","import {Component,OnInit,Input,Output,EventEmitter,\n } from '@angular/core';\n import {\n Booking,\n selectActiveForm,\n BookingFormData,\n\t\tBookingStoreState,\n } from '@mckinsey-converge/data-common';\n import {\n\t\tStore,\n select,\n } from '@ngrx/store';\n import {\n distinctUntilChanged, take,\n } from 'rxjs/operators';\n import { BaseDirective } from '@mckinsey-converge/base';\n\timport {\n\t\tRoomStoreState,\n\t} from '@mckinsey-converge/rooms';\n\timport {\n\t\tBuildingStoreState\n\t} from '@mckinsey-converge/buildings';\n\timport { UserStoreState } from '@mckinsey-converge/user';\n\n\texport type RoomResultsState = BookingStoreState\n & RoomStoreState\n & BuildingStoreState\n & UserStoreState;\n\n\n @Component({\n selector: 'app-booking-edit-wrapper',\n template: `
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
`,\n styleUrls: ['./booking-create.component.scss']\n })\n export class BookingEditWrapperComponent extends BaseDirective implements OnInit {\n\n\t\tpublic booking: Booking;\n\t\tpublic loading: boolean = true;\n\n constructor(\n public store: Store,\n ) {\n super();\n }\n\n public ngOnInit(): void {\n\n this.subscription('activeForm',\n this.store.pipe(take(1),\n\t\t\t\t\tselect(selectActiveForm),\n \tdistinctUntilChanged()\n\t\t\t\t\t).subscribe((next: BookingFormData | undefined) => {\n\t\t\t\t\t\tthis.loading = false;\n \t\tif (next && next?.dateTz) {\n \t\tthis.booking = new Booking(next);\n \t\t}\n }));\n\n }\n\n }\n","import {\n Component,\n OnInit,\n Input,\n Output,\n EventEmitter,\n} from '@angular/core';\nimport {\n Booking,\n selectActiveForm,\n storeBookingFormData,\n BookingFormData,\n checkCollisions,\n getStatusErrorMessage,\n clearBookingFormData,\n BOOKING_STATUS,\n getLastDateFromList,\n Space,\n SeriesAction\n} from '@mckinsey-converge/data-common';\nimport {\n select,\n} from '@ngrx/store';\nimport {\n distinctUntilChanged,\n} from 'rxjs/operators';\nimport { BookingFormBaseComponent } from './booking-form-base.component';\nimport * as cloneDeep from 'lodash/cloneDeep';\n\n@Component({\n selector: 'app-booking-edit',\n templateUrl: './booking-form-base.component.html',\n styleUrls: ['./booking-create.component.scss']\n})\nexport class BookingEditComponent extends BookingFormBaseComponent implements OnInit {\n @Input() public booking: Booking;\n @Output() public updateCallback = new EventEmitter();\n public roomEmail: string;\n\n public ngOnInit(): void {\n super.ngOnInit();\n\n this.subscription('activeForm', this.store.pipe(\n select(selectActiveForm),\n distinctUntilChanged()\n ).subscribe((next: BookingFormData | undefined) => {\n if (next && next?.dateTz && next?.selectedRoom?.space) {\n this.data.next(next);\n this.isEditSeries = next.action === SeriesAction.EDIT;\n }\n }));\n\n this.modal = !this.isEditSeries;\n this.roomEmail = this.booking.space.email;\n const attendees = (this.data?.value?.attendees?.length && this.data?.value?.attendees[0]?.meta)\n ? this.data.value.attendees\n : this.booking.attendees.filter(bk => bk.name !== '' && bk.email !=='').map(u => {\n return {\n value: u.email,\n display: u.name,\n groupId: 'one',\n groupHeader: true,\n shortDisplay: u.name,\n meta: { external: u.external, user: u, color: u.email.toLowerCase().includes('mckinsey.') ? 'internal' : 'external' },\n }\n });\n\n const company = (this.data?.value?.company?.length && this.data?.value?.company[0]?.groupId)\n ? this.data?.value?.company\n : this.booking.company.map(u => {\n return {\n value: u,\n display: u,\n groupId: 'two',\n groupHeader: true,\n shortDisplay: u,\n }\n });\n\n const head_count = this.booking?.expected_attendees[this.roomEmail] ? this.booking?.expected_attendees[this.roomEmail] : 0;\n const code = this.booking?.equipment_codes[this.roomEmail] ? this.booking?.equipment_codes[this.roomEmail] : '';\n const organiser = (this.data?.value?.organiser && this.data?.value?.organiser?.meta)\n ? this.data?.value?.organiser\n : {\n display: this.booking.organiser.name,\n value: this.booking.organiser.email,\n meta: { user: this.booking.organiser }\n };\n const notes = Array.isArray(this.booking.notes) ? this.booking.notes.find(n => n.type === 'equipment')?.message : this.booking.notes;\n const selectedRoom = this.data?.value?.selectedRoom\n ?\n this.data?.value?.selectedRoom\n :\n {\n space: this.booking.room, // this.building,\n };\n\n const payload = {\n ...this.booking.toJSON(),\n attendees,\n code,\n head_count,\n notes,\n organiser,\n selectedRoom,\n company\n };\n this.store.dispatch(storeBookingFormData({\n payload: payload\n }));\n \n if(this.isEditSeries) {\n this.booking = this.bookingFormToBooking(this.data.value, this.isEditSeries); \n }\n // in parent component\n this.updateConfimatinModal();\n\n\n }\n\n public updateNotes(booking, note, room) {\n const notes = [];\n const cateringNotes = this._cateringNotesService.getNotes();\n const isEquipmentNote = booking.notes.find(note => note.type === 'equipment');\n const isCateringNote = booking.notes.find(note => note.type === 'catering');\n\n if (cateringNotes.length && !isCateringNote) {\n notes.push(cateringNotes[0]);\n }\n\n if (isEquipmentNote) {\n booking.notes.map(item => {\n const message = cateringNotes.length && item.type === 'catering' ? cateringNotes[0].message : item.message;\n\n notes.push({\n ...item,\n author : this.currentUser.name,\n message : item.type === 'equipment' ? note : message,\n space: item.type === 'equipment' ? room : item.space,\n date: item.type === 'equipment' ? new Date().getTime() : item.date\n })\n });\n } else {\n if (note) {\n notes.push({\n author: this.currentUser.name,\n type: \"equipment\",\n message: note,\n space: room,\n date: new Date().getTime()\n })\n }\n }\n return notes;\n }\n\n /**\n * Save booking changes\n */\n public saveChanges() {\n const booking_form_data = this.data.value;\n\n if(!this.isEditSeries) {\n\t\t\t // clone booking to allow editing\n const booking = cloneDeep(this.booking);\n \n\t\t\tbooking.title = booking_form_data.title;\n\t\t\tbooking.attendees = this.formToAttendees(booking_form_data.attendees);\n\t\t\tbooking.company = this.formToCompany(booking_form_data.company);\n\t\t\tbooking.notes = this.updateNotes(this.booking, booking_form_data.notes, this.roomEmail);;\n\t\t\tbooking.equipment_codes = { [this.roomEmail]: booking_form_data.code };\n\t\t\tbooking.expected_attendees = { [this.roomEmail]: booking_form_data.head_count };\n\t\t\tbooking.organiser = booking_form_data.organiser?.meta.user;\n\t\t\tconst has_note_buffer = booking_form_data.notes && booking_form_data.notes?.length ? {[booking_form_data.selectedRoom?.space?.email || booking?.space?.email]: 900} : null; // 900 seconds = 15 min\n\t\t\t// Removing the note does not remove the existing setup / breakdown\n\t\t\tif (has_note_buffer) {\n\t\t\t booking.setup = has_note_buffer;\n\t\t\t booking.breakdown = has_note_buffer;\n\t\t\t}\n booking.opt_out = booking_form_data.opt_out;\n\t\t\tthis.booking = booking;\n\t\t }\n\t\t else {\n\t\t\tthis.booking = this.bookingFormToBooking(booking_form_data, this.isEditSeries);\n\t\t }\n\n\n this.loading = true;\n checkCollisions(\n this._spaces,\n this.booking\n ).then((bookable: boolean) => {\n // We expect the current booking to be returned form this api call,\n if (bookable) {\n\n this._bookings_service.save(this.booking, this.isEditSeries).then(\n (bkn) => {\n // update template properties and booking\n this.handleBookingSuccessResponse(bkn);\n // update callback in case of standard booking edit\n this.updateCallback && this.updateCallback.emit(this.booking);\n\n },\n (err) => {\n if (err.status === 409) {\n this.handleBookingErrorMessage();\n } else {\n this.loading = false;\n this.confirmed = false;\n this.displayWarningBanner(getStatusErrorMessage(err.status));\n }\n }\n );\n } else {\n this.handleBookingErrorMessage();\n return;\n }\n },\n (err) => {\n this.handleBookingErrorMessage();\n }\n );\n }\n\n public callback() {\n this.closeCallback.emit(true);\n }\n\n}\n","import {\n Component,\n OnInit,\n Output,\n EventEmitter,\n} from '@angular/core';\nimport { TopBarHeaderMode, RoutePayload } from 'src/app/components/topbar-header/topbar-header.component';\nimport {\n Store\n} from '@ngrx/store';\nimport {\n BaseDirective,\n dateLocalFormatString,\n startEndTimeWithZoneFormatString,\n humaniseDuration,\n toTitleCase,\n dateBuildingFormatString,\n shorterLocalDateFormatString,\n DialogEvent,\n} from '@mckinsey-converge/base';\nimport {\n ApplicationService,\n Booking,\n BookingsService,\n BookingStateService,\n Space,\n SpacesService,\n User,\n BookingNote,\n BookingFormData,\n BookingStoreState,\n storeBookingFormData,\n bookingStatusDetails,\n clearBookingFormData,\n CateringNotesService,\n getLastDateFromList,\n BOOKING_STATUS,\n DataForConfirmation,\n UsersService\n} from '@mckinsey-converge/data-common';\nimport {\n BehaviorSubject,\n} from 'rxjs';\nimport {\n take,\n} from 'rxjs/operators';\nimport {\n BuildingStoreState\n} from '@mckinsey-converge/buildings';\nimport {\n RoomStoreState,\n} from '@mckinsey-converge/rooms';\nimport {\n Router\n} from '@angular/router';\nimport { UserStoreState } from '@mckinsey-converge/user';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DateNow, DateTZ } from \"@mckinsey-converge/date-tz\";\nimport { ConflictsModalComponent, ConflictsModalComponentData } from '@mckinsey-converge/ui';\n\n\nexport type RoomResultsState = BookingStoreState\n & RoomStoreState\n & BuildingStoreState\n & UserStoreState;\n\n@Component({\n selector: 'app-booking-base',\n templateUrl: './booking-form-base.component.html',\n styleUrls: ['./booking-create.component.scss']\n})\nexport class BookingFormBaseComponent extends BaseDirective implements OnInit {\n public TopBarHeaderMode = TopBarHeaderMode;\n\n public backRoute: RoutePayload = {\n route: ['/home', 'results', 'room'],\n queryParams: {}\n };\n\n @Output() public closeCallback = new EventEmitter();\n\n // Eliminate selectedRoom (room building capacity )\n public modal = false;\n public data = new BehaviorSubject(undefined);\n public submitTimestamp: number;\n public confirmed: boolean = false;\n /** Whether booking has succeeded */\n public success: boolean;\n public updated: boolean;\n /** Display loading template */\n public loading: boolean;\n public booking: Booking = new Booking({});\n /** Current User */\n public currentUser: User;\n public invalidForm: boolean = true;\n public showWarningBanner: boolean = false;\n public warningMessage: string;\n\n dataForConfirmation: DataForConfirmation;\n isEditSeries: boolean = false;\n // set property if user room selection from next business day section on result page\n public nextBusinessDay: boolean = false;\n\n\n constructor(\n public _service: ApplicationService,\n public store: Store,\n public router: Router,\n public _bookings_service: BookingsService,\n public _booking_state_service: BookingStateService,\n public _spaces: SpacesService,\n public _cateringNotesService: CateringNotesService,\n public dialog: MatDialog,\n private _users: UsersService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.subscription('currentUser', this.store.select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n })\n );\n\n\n }\n\n public get building(){\n return this.booking.room.building;\n }\n\n public get type() {\n return this.booking.bookingTypeLabel;\n }\n\n public get internal_external_type() {\n return this.booking.room?.[0].filters.external === true? \"External\" : \"Internal\";\n }\n\n public get date(){\n // R--- remove if no longer used.\n return this.booking.startDateTz;\n }\n\n public get dateString() {\n return this.booking.startDateTz.formatDate('ccc d MMM yyyy'); //shorterLocalDateFormatString(this.booking.startDateTz);\n \n }\n\n public get timeString() {\n return startEndTimeWithZoneFormatString(this.booking.startDateTz, this.booking?.displayEndDateTz);\n }\n\n public get durationString() {\n return humaniseDuration(this.booking?.duration);\n }\n\n public get status() {\n return bookingStatusDetails(this.booking);\n }\n\n public async goToBackRoute() {\n await this.router.navigate(this.backRoute.route, { queryParams: this.backRoute.queryParams });\n }\n\n /**\n * Continue to Booking Form\n */\n public createBooking() { // todo change links based on usage\n // trigger the booking form submit\n this.submitTimestamp = new Date().getTime();\n }\n\n // submit the booking form\n public submitForm(formGroup: any) {\n let creator: User;\n if (formGroup.has_delegate) {\n if (formGroup.organiser.value !== this.currentUser.email) {\n creator = this.currentUser;\n }\n }\n\n // Combines booking with selected form fields and not the entire formGroup like other places.\n // to combine booking with selected form fields on submit - WHY IS THIS NEEDED TO DISPACH TO STORE BOOKING FORM DATA ???\n // THIS ISSUE IS SPILLING INTO - libs/data-common/src/lib/booking/booking.selectors.ts lno: 70\n // - due to .toJSON recurrence_starts becomes Array ?!?\n this.store.dispatch(storeBookingFormData({\n payload: {\n ...this.booking.toJSON(),\n attendees: formGroup.attendees,\n code: formGroup.code,\n head_count: formGroup.head_count,\n notes: formGroup.notes,\n organiser: formGroup.organiser,\n creator,\n title: formGroup.title,\n company: formGroup.company,\n opt_out: formGroup.opt_out\n }\n }));\n this.saveChanges();\n }\n\n // submit the booking form\n public validateForm(valid: boolean) {\n this.invalidForm = !valid;\n }\n\n public setupNotes(note: string, roomEmail: string) {\n if (note && note.length ) {\n // this note was required to update setup and breakdown\n return [{\n author: this.currentUser.name,\n type: \"equipment\",\n message: !Array.isArray(note) ? note : note[0].message,\n space: roomEmail,\n date: new Date().getTime()\n }] as BookingNote[];\n }\n\n return [];\n }\n\n public formToAttendees(attendees: any[]) {\n return !attendees ? [] : attendees.map(a => {\n let raw_user = {\n first_name: '',\n last_name: '',\n email: '',\n name: '',\n type: 'internal',\n external: false,\n visitor: false,\n };\n if (a.meta?.external) {\n // External users get assigned a random email\n const nameParts = a.display.split(' ');\n const length = nameParts.length;\n if (length) {\n raw_user.first_name = nameParts[0];\n raw_user.name = nameParts.join(' ');\n }\n if (length > 1) {\n nameParts.shift();\n raw_user.last_name = nameParts.join(' ');\n }\n raw_user.email = a.value ?? `${Math.floor(Math.random() * 99999)}@guest.mckinsey.com`;\n raw_user.type = 'external'; // retain external identity\n raw_user.external = true;\n raw_user.visitor = true;\n } else if (a.meta?.user) {\n raw_user = a.meta.user;\n }\n else {\n raw_user = a;\n }\n return new User(raw_user);\n });\n }\n\n public formToCompany(companies: any[]) {\n return !companies ? [] : companies.map(a => {\n return a.value;\n });\n }\n\n /**\n * Save booking changes\n */\n public saveChanges() {\n this.loading = true;\n const booking_form_data = this.data.value;\n // override in child class\n }\n\n public callback() {\n // mock interface\n }\n\n public get is_request(): boolean {\n const data = this.data.value;\n\n /* istanbul ignore else */\n if (!data?.selectedRoom?.space) {\n return false;\n }\n\n const space = new Space(data.selectedRoom.space);\n return space.byRequest({\n dateTz: data.dateTz,\n duration: data.duration,\n host: this.currentUser\n });\n }\n\n public displayWarningBanner(custom: string) {\n this.warningMessage = custom;\n this.showWarningBanner = true;\n this.timeout('close banner', () => {\n this.showWarningBanner = false;\n }, 10000);\n }\n\n public hideWarningBanner() {\n this.showWarningBanner= false;\n }\n\n public discardChanges() {\n this.store.dispatch(clearBookingFormData());\n this.closeCallback.emit(true)\n }\n\n\n\n setupOrganiser(booking_form_data: BookingFormData) {\n if(booking_form_data.organiser?.meta?.user){\n return booking_form_data.organiser?.meta?.user;\n }\n else{\n booking_form_data.organiser = {...booking_form_data.organiser, meta: {user: this.currentUser}}\n return booking_form_data.organiser?.meta.user;\n }\n }\n\n public bookingFormToBooking(bookingData, isEditSeries: boolean = false): Booking {\n let booking_form_data = bookingData;\n const has_note_buffer = booking_form_data.notes && booking_form_data.notes?.length ? {[booking_form_data.selectedRoom.space.email]: 900} : {}; // 900 seconds = 15 min\n const attendees = this.formToAttendees(booking_form_data.attendees);\n const company = this.formToCompany(booking_form_data.company);\n const start_epoch = booking_form_data?.dateTz?.seconds;\n const end_epoch = booking_form_data.dateTz.addValue({ minutes: booking_form_data.duration }).seconds;\n // set property if user room selection from next business day section on result page\n this.nextBusinessDay = booking_form_data?.nextBusinessDay || false\n\n const raw_data = {\n id: isEditSeries ? booking_form_data.id : '',\n all_day: booking_form_data.all_day || false,\n attendees,\n booking_type: booking_form_data.bookingType.value,\n catering: booking_form_data.catering || [],\n start_epoch,\n end_epoch,\n timezone: booking_form_data.timezone,\n equipment_codes: {[booking_form_data.selectedRoom.space.email]: booking_form_data.code},\n expected_attendees: {[booking_form_data.selectedRoom.space.email]: booking_form_data.head_count},\n has_catering: booking_form_data.has_catering || false,\n needs_space: booking_form_data.needs_space || false,\n organiser: this.setupOrganiser(booking_form_data),\n notes: this.setupNotes(booking_form_data.notes, booking_form_data.selectedRoom.space.email),\n creator: booking_form_data.creator,\n room: booking_form_data.selectedRoom.space,\n title: booking_form_data.title,\n setup: has_note_buffer,\n breakdown: has_note_buffer,\n company,\n /* Staff Recurring form fields */\n is_recurrent: booking_form_data.is_recurrent,\n recurrence_count: booking_form_data.recurrence_count,\n recurrence_days: booking_form_data.recurrence_days,\n recurrence_endTz: booking_form_data.recurrence_endTz,\n recurrence_exceptions: booking_form_data.recurrence_exceptions,\n recurrence_interval: booking_form_data.recurrence_interval,\n recurrence_period: booking_form_data.recurrence_period,\n recurrence_starts: booking_form_data.recurrence_starts,\n\n occurrence_details: booking_form_data.occurrence_details,\n // occurrence_edits: booking_form_data.occurrence_edits || null,\n // occurrence_ids: booking_form_data.occurrence_ids || null,\n recurrence_type: booking_form_data.recurrence_type || null,\n recurrence_master_id: booking_form_data.recurrence_master_id,\n edits: booking_form_data?.edits,\n ignore: booking_form_data?.ignore,\n\n opt_out: bookingData.opt_out\n\n\n };\n\n return new Booking(raw_data);\n }\n\n\n public async handleBookingSuccessResponse(bkn) {\n\n // const user: User = this._users.current;\n // if(this._users.current.email === bkn.organiser.email) {\n // this._users.current.opt_out = true;\n // }else {\n // this._users.current.delegates.map(el => { \n // if(el.email === bkn.organiser.email) {\n // el.opt_out = true;\n // }\n // return el;\n // })\n // }\n \n\n //const responceBkn = new Booking({...bkn}); // \n this.booking = new Booking({ ...this.booking, ...bkn.toApiJSON() });\n this.updateConfimatinModal();\n this._booking_state_service.replace(this.booking);\n\n /**\n * update the master booking in case of recurring to have latest updated in the system\n */\n if(this.booking.recurrence_master_id !== null && this.isEditSeries)\n {\n const master_booking = await this._bookings_service.show(this.booking.recurrence_master_id);\n this._booking_state_service.replace(master_booking);\n }\n\n // Clear the current booking form\n this.store.dispatch(clearBookingFormData());\n\n this.loading = false;\n this.success = true;\n this.confirmed = true;\n\n // Heap track event\n this._service.analytics.track('update', {\n booking_id: this.booking.id,\n office: this.booking.room.building.name, // this.building.name,\n room: this.booking.room.simple_name,\n start_time: this.booking.startDateTz.ms,\n end_time: this.booking.endDateTz.ms,\n catering: !!this.booking.catering.length,\n headcount: this.data.value.head_count,\n });\n\n }\n\n\n public handleBookingErrorMessage() {\n this.loading = false;\n this.booking.status = BOOKING_STATUS.unavailable\n this._booking_state_service.replace(this.booking);\n this.confirmed = true;\n this.success = false;\n this.updateConfimatinModal();\n }\n\n /**\n * Public method to update the confirmation modal data.\n * This method updates the dataForConfirmation object with the necessary information\n * for displaying the confirmation modal in the application.\n */\n public updateConfimatinModal() {\n\n // Prepare an object with booking details and related information for the confirmation modal\n this.dataForConfirmation = {\n booking: this.booking, // Information about the booking\n status: this.status, // Status of the booking (e.g., confirmed, pending, etc.)\n dateString: this.dateString, // Date of the booking in string format\n endDateString: this.endDateString, // End date of the booking in string format\n timeString: this.timeString, // Time of the booking in string format\n durationString: this.durationString, // Duration of the booking in string format\n type: this.type, // Type of booking (e.g., internal, external, etc.)\n isEditSeries: this.isEditSeries, // Boolean indicating whether it's an edit in a series of events\n // Function to check if there are conflicts with occurrences of the booking\n isConflictWithOccurences: this.isConflictWithOccurences.bind(this),\n // Function to open a modal in case of conflicts with recurring events\n openRecurrenceConflictsModal: this.openRecurrenceConflictsModal.bind(this)\n }\n }\n\n /**\n * Checks if there are conflicts with the current booking and its occurrences.\n * Calculates the difference between total occurrences and available occurrences\n * to determine if there are conflicts.\n *\n * @returns {Object} An object containing conflict information:\n * - is_conflict: A boolean indicating if there are conflicts (true if conflicts exist, false otherwise).\n * - total_Conflicts: The total number of conflicts (the difference between total occurrences and available occurrences).\n */\n // public isConflictWithOccurences() {\n // const conflicts = this?.booking?.room?.totalOccurrences - this?.booking?.room?.availableOccurrences;\n // return { is_conflict: !!conflicts, total_Conflicts: conflicts };\n // }\n\n public isConflictWithOccurences() {\n let totalConflicts = 0;\n\n if (this.booking.multi_rooms && this.booking.multi_rooms.length > 0) {\n this.booking.multi_rooms.forEach((room) => {\n totalConflicts += Math.max(room.totalOccurrences - room.availableOccurrences, 0);\n });\n } else if (this.booking.room) {\n totalConflicts =\n this?.booking?.room?.totalOccurrences - this?.booking?.room?.availableOccurrences;\n }\n\n const result = {\n is_conflict: totalConflicts > 0,\n total_Conflicts: totalConflicts,\n };\n return result;\n}\n\n\n/**\n * Retrieves the end date string for the booking, considering recurrence if applicable.\n * If the booking is recurrent, it calculates the end date based on recurrence starts;\n * otherwise, it uses the booking's start date as the end date.\n *\n * @returns {string} The formatted end date string in a shorter local date format.\n */\n public get endDateString(): string {\n // Determine the array of date-time strings based on recurrence or single start date\n let recurrenceStart: Array= [];\n const { is_recurrent, recurrence_starts, occurrence_details, timezone} = this.booking;\n if(is_recurrent && recurrence_starts.length) {\n recurrenceStart = this.booking.recurrence_starts;\n }\n else if(is_recurrent && !recurrence_starts.length && occurrence_details?.length) {\n this.booking.occurrence_details.forEach(element => {\n recurrenceStart.push(new DateTZ({ date: element.start_epoch * 1000, is_local_tz: false, building_tz: timezone}));\n });\n recurrenceStart = recurrenceStart.sort((d1: DateTZ, d2: DateTZ) => d1.ms - d2.ms);\n }\n else {\n recurrenceStart = [this.booking.startDateTz];\n }\n\n\n // const endDtz = (this.booking.is_recurrent && this.booking.recurrence_starts.length) ? this.booking.recurrence_starts : [this.booking.startDateTz]\n // Get the last date from the list of date-time strings and format it in a shorter local date format\n const requestedEndDateTz = getLastDateFromList(recurrenceStart); //shorterLocalDateFormatString(getLastDateFromList(recurrenceStart));\n \n // add one day if user room selection from next business day section on result page\n const endDatestring = this.nextBusinessDay ? requestedEndDateTz.addValue({ minutes: this.data?.value.offset }) : requestedEndDateTz;\n\n return endDatestring.formatDate('ccc d MMM yyyy');\n }\n\n /**\n * Opens a modal to display recurrence conflicts for a given room.\n *\n * @param {Space} room - The room for which recurrence conflicts are being displayed.\n *\n * This function opens a modal dialog to show recurrence exceptions (conflicts)\n * for the specified room.\n *\n * TO DO: SAME FUNCTION BEING USED IN apps/staff/src/app/booking/room-details/room-details.component.ts\n * and mckinsey-converge/apps/staff/src/app/booking/catering/catering.component.ts\n */\n public openRecurrenceConflictsModal(room: Space) {\n let { recurrence_exceptions } = this.data.value;\n\n const recurr_ref = this.dialog.open(ConflictsModalComponent, {\n maxWidth: '95vw',\n width: '32em',\n data: {\n room_name: room.simple_name,\n conflicts: recurrence_exceptions,\n timezone: room.building.timezone,\n status: 'confirmed'\n }\n });\n this.subscription(\n 'conflicts_modal_events',\n recurr_ref.componentInstance.event.subscribe((event: DialogEvent) => {\n recurr_ref.close();\n })\n );\n recurr_ref.afterClosed().subscribe(() => this.unsub('conflicts_modal_events'));\n }\n\n\n}\n","import {BehaviorSubject,fromEvent,\n} from 'rxjs';\nimport {take,throttleTime,tap,distinctUntilChanged,map\n} from 'rxjs/operators';\nimport {select,Store\n} from '@ngrx/store';\nimport {Component,Inject,OnInit,\n} from '@angular/core';\nimport { BaseDirective, dateBuildingFormatString, startEndTimeWithZoneFormatString, humaniseDuration, toTitleCase, closestToTimeSlotTz\n} from '@mckinsey-converge/base';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { User,\n\tApplicationService,\n\tAvailableBookingFields,\n\tBooking,\n\tBookingFormData,\n\tBookingFlowSettings,\n\tSpacesService,\n\tstoreBookingFormData,\n\tDateDurationData,\n\tselectFilteredByIdResults,\n\tgenerateBookingForm,\n\tcateringAllowed,\n\trulesForSpace,\n\tgetStatusErrorMessage,\n\troomHasCateringHours,\n\tBookingsService,\n\tSpaceConflictAlertModalData,\n\tSpaceFilterReason,\n\tBuilding,\n\tBuildingCity,\n\tflattenDisplayOffices,\n\troomSizeOptions,\n\tDEFAULT_BOOKING_DURATION,\n\tbookingTypeOptions,\n\troomFormDataToQuery,\n\tclearBookingFormData,\n\tBookingStateService,\n\tRecurrencePeriod,\n\tselectActiveForm,\n\tSeriesAction\n} from '@mckinsey-converge/data-common';\nimport { first } from 'rxjs/operators';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport { TopBarHeaderMode } from 'src/app/components/topbar-header/topbar-header.component';\nimport { CancelBookingModalComponent } from '../cancel-booking-modal/cancel-booking-modal.component';\nimport { BookingDurationModalComponent } from '../booking-duration-modal/booking-duration-modal.component';\nimport { RoomResultsState } from '../room-details/room-details.component';\nimport {\n\tloadByIdResults, loadRoomsForResults, loadRoomsForResultsMap,\n} from '@mckinsey-converge/rooms';\nimport { FormGroup } from '@angular/forms';\nimport { loadBookingsWithQuery } from '@mckinsey-converge/bookings';\nimport { DateNow, DateTZ } from \"@mckinsey-converge/date-tz\";\nimport { ConflictAlertModalComponent, SelectOption } from '@mckinsey-converge/ui';\nimport { buildingStateSelector, selectBuildingOptionsGroupedByCity } from '@mckinsey-converge/buildings';\nimport { RoomBookingModalComponent } from '../room-booking-modal/room-booking-modal.component';\nimport { Router, ActivatedRoute } from '@angular/router';\n\nconst EMPTY_ARRAY = [];\n\n@Component({\n\tselector: 'app-booking-details-modal',\n\ttemplate: `\n
\n
 
\n
\n \n

Your booking date and/or time was successfully updated

\n \n
\n
\n \n

{{ warningMessage }}

\n \n
\n \n
\n
\n
\n
\n \n Recurring booking status: {{ statusText }} \n
\n
\n \n
\n \n This is one occurrence in a recurring series which occurs every {{recurrence_interval > 1 ? recurrence_interval + ' Days' : 'Day'}} effective {{ _data?.master_booking?.dateString }} until {{ _data?.master_booking?.endDateString }}.\n \n \n This is one occurrence in a recurring series which occurs every {{recurrence_interval > 1 ? recurrence_interval + ' Weeks' : 'Week'}} effective {{ _data?.master_booking?.dateString }} until {{ _data?.master_booking?.endDateString }}.\n \n \n This is one occurrence in a recurring series which occurs every {{recurrence_interval > 1 ? recurrence_interval + ' Months' : 'Month'}} effective {{ _data?.master_booking?.dateString }} until {{ _data?.master_booking?.endDateString }}.\n \n \n This is one occurrence in a recurring series which occurs on Specific Dates effective {{ _data?.master_booking?.dateString }} until {{ _data?.master_booking?.endDateString }}\n
\n
\n
\n
{{ occurrence.dateTz.formatDate('dd MMM yyyy') }}
\n
\n
\n
\n
\n
\n
\n
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n Edit series\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n
\n
\n\n
\n
\n

Booking {{ statusText.toLowerCase() }}

\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t {{timeString}} \n
\n
\n
\n \n
\n

This is a multiroom booking. To request edits, please contact your local backoffice team.

\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n

Booking Status: {{statusText}}

\n

\n \n

\n
\n
\n \n
\n \n Cancel booking\n \n
\n
\n
\n
\n
\n
\n

\n \n {{title}}\n

\n

\n Date: {{dateString}}
\n Time: {{timeString}}
\n {{type}} meeting ({{durationString}})\n

\n\n \n Edit date or time\n \n\n

\n Address: {{roomLocation}}
\n Room: {{roomName}}
\n Capacity: {{capacity}}\n

\n\n
\n
\n \n
\n\n \n
\n\n \n {{ checkingExtendable ? 'Checking availability...' : 'Extend booking duration'}}\n \n
\n
\n

\n \n

\n

\n \n \n \n

\n \n \n

\n \n \n \n

\n \n \n
\n
\n
\n
\n

\n \n Booking Details\n

\n

Host: {{host}}

\n

Attendees: {{attendeesString}}

\n

Company: {{companyString}}

\n

Charge code: {{chargeCode}}

\n

Headcount estimate: {{headcount}}

\n

Additional requirements: {{requirements}}

\n\t\t\t\t\t\t\t\t

Email notification for this booking has been opt out.

\n\n \n Update details\n \n
\n
\n

\n \n Catering\n

\n

Catering available for this room

\n \n Add catering\n \n\n \n
\n
\n
\n
\n

\n \n

\n \n \n \n \n \n \n
\n
\n

\n \n

\n

\n \n

\n \n
\n
\n
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n
\n\t\t\t\t\n
\n\n \n
\n\n \n\n
\n \n \n
\n
\n \n
\n `,\n\tstyleUrls: ['./booking-details-modal.component.scss']\n})\nexport class BookingDetailsModalComponent extends BaseDirective implements OnInit {\n\tpublic TopBarHeaderMode = TopBarHeaderMode;\n\tpublic title: string;\n\tpublic roomName: string;\n\tpublic roomLocation: string;\n\tpublic host: string;\n\tpublic hostEmail: string;\n\tpublic type: string;\n\tpublic status: string;\n\tpublic statusText: string = '';\n\tpublic statusImage: string;\n\tpublic durationString: string;\n\tpublic dateString: string;\n\tpublic timeString: string;\n\tpublic capacity: number;\n\tpublic attendeesString: string;\n\tpublic chargeCode: string;\n\tpublic headcount: number;\n\tpublic requirements: string;\n\tpublic showDetails: boolean;\n\tpublic warningMessage: string;\n\tpublic mapUrl: string;\n\tpublic focusedRoom: string;\n\tpublic expandedLocation = false;\n\tpublic isRecurrentBooking = false;\n\tpublic isMultiroomBooking:boolean = false;\n\n\tpublic checkingExtendable: boolean;\n\tpublic extendableMaximum: number;\n\n\tpublic receiptionEmail: string;\n\n\tpublic data = new BehaviorSubject(undefined);\n\tpublic byIdResults = new BehaviorSubject(undefined);\n\n\t// Track event date changes in the UI in this param\n\tpublic alternativeWeekStartDateTz: DateTZ;\n\t/** Current User */\n\tpublic currentUser: User;\n\tpublic expandedAvailability: boolean = false;\n\t// Set in the room availablity callback\n\tpublic mobile: boolean = false;\n\tpublic loading: boolean = false;\n\tpublic showInfoBanner: boolean = false;\n\tpublic showWarningBanner: boolean = false;\n\tpublic showCatering: boolean = false;\n\t/** Application settings for bookings */\n\tpublic settings: BookingFlowSettings;\n\tpublic form: FormGroup;\n\tpublic companyString: string;\n\n\tinvalidDueToOfficeRule: boolean;\n\tbuildings: SelectOption[];\n\tmaster_booking: Booking;\n\n\tprivate recurrence_period: RecurrencePeriod;\n\tprivate recurrence_interval: number;\n\toccurrence_details: { start_epoch: number; dateTz: DateTZ; id: string; }[];\n\tdisableSeriesEditButton: boolean = false;\n\topt_out: boolean;\n\t/** List of available booking fields for the form */\n\tpublic get available_fields(): AvailableBookingFields[] {\n\t\treturn this.settings?.show_fields || [];\n\t}\n\n\tpublic get emailURL() {\n\t\treturn `mailto:${encodeURIComponent(this.receiptionEmail)}?cc=${encodeURIComponent(this.hostEmail)}&subject=Enquiry%3A%20${encodeURIComponent(this.roomName)}&body=Details%3A%0ADate%3A%20${encodeURIComponent(this.dateString)}%0ATime%3A%20${encodeURIComponent(this.timeString)}%0A${encodeURIComponent(this.type)}%20meeting%20(${encodeURIComponent(this.durationString)})%0AAddress%3A%20${encodeURIComponent(this.roomLocation)}%0ARoom%3A%20${encodeURIComponent(this.roomName)}%0ACapacity%3A%20${encodeURIComponent(this.capacity)}%20people%0A%0ANeeding%20assistance%20with%3A%0A`;\n\t}\n\n\tpublic disableCancelButton: boolean = false;\n\tpublic disableEditTimeButton: boolean = false;\n\tpublic disableUpdateDetailsButton: boolean = false;\n\n\tprivate _specific_dates = false;\n\n\n\tconstructor(\n\t\t private router: Router,\n private route: ActivatedRoute,\n\t\t@Inject(MAT_DIALOG_DATA) public _data: any,\n\t\tprivate dialogRef: MatDialogRef,\n\t\tprivate store: Store,\n\t\tpublic _bookings: BookingsService,\n\t\tprivate _service: ApplicationService,\n\t\tprivate _spaces: SpacesService,\n\t\tprivate dialog: MatDialog,\n\t) {\n\t\tsuper();\n\t\tthis.roomLocation = this._data.booking.room.street_and_city;\n\t\tthis.initDisplayValues(this._data.booking);\n\t\tthis.timeout('slowinit', () => {\n\t\t\tthis.initDisplayValues(this._data.booking);\n\t\t\tif (this._data.cancel && this.displayCancelModal()) {\n\t\t\t\tthis.cancelBooking();\n\t\t\t}\n\t\t\tif (this._data.addCatering && this.roomHasCatering) {\n\t\t\t\tthis.addCatering();\n\t\t\t}\n\t\t\t// Close up the loader panel\n\t\t\tthis.timeout('hide modal mask', () => {\n\t\t\t\tthis._data.hasLoaderUrl = false;\n\t\t\t}, 300);\n\t\t}, 1000);\n\t}\n\n\n\tpublic ngOnInit() {\n\n\t\t/**\n\t\t * Update booking recurrence and occurrence details based on master booking data.\n\t\t *\n\t\t * This code block checks if there is a master booking available in the data.\n\t\t * If a master booking exists, it extracts recurrence period and interval information,\n\t\t * and processes occurrence details, excluding the current booking itself. Occurrence\n\t\t * start epochs are converted to milliseconds and date-time strings are created in the\n\t\t * building's timezone.\n\t\t */\n\t\tif(this._data?.master_booking !== null) {\n\t\t\tthis.recurrence_period = this._data?.master_booking?.recurrence_period;\n\t\t\tthis.recurrence_interval = this._data?.master_booking?.recurrence_interval;\n\n\t\t\tconst bookingData = this._data?.master_booking || this._data?.booking;\n\n\t\t\tthis.occurrence_details = bookingData.occurrence_details && bookingData.occurrence_details\n\t\t\t\t.filter(ocurrence => ocurrence.id !== bookingData.id)\n\t\t\t\t.map(ocurrence => ({\n\t\t\t\t\t...ocurrence,\n\t\t\t\t\tstart_epoch: ocurrence.start_epoch * 1000, // Convert start epoch to milliseconds\n\t\t\t\t\tdateTz: new DateTZ({\n\t\t\t\t\t\tdate: ocurrence.start_epoch * 1000, // Create a DateTZ object with the converted epoch\n\t\t\t\t\t\tis_local_tz: false,\n\t\t\t\t\t\tbuilding_tz: bookingData.timezone\n\t\t\t\t\t})\n\t\t\t\t}));\n\t\t}\n\n\n\t\tthis.subscription('currentUser', this.store.select(selectCurrentUser)\n\t\t\t.pipe(take(1))\n\t\t\t.subscribe((user: User | undefined) => {\n\t\t\t\t// Once we know we have the user loaded.\n\t\t\t\tthis.currentUser = new User(user);\n\t\t\t})\n\t\t);\n\n\t\tthis.subscription('byId', this.store.pipe(\n\t\t\tselect(selectFilteredByIdResults)\n\t\t).subscribe(next => {\n\t\t\t// Should be fired when loading by ID in URL\n\t\t\tthis.byIdResults.next(next.success?.spaces?.length ? next.success.spaces[0].settings.bookings : EMPTY_ARRAY);\n\t\t}));\n\n\t\tthis._spaces.initialised.pipe(first((_) => _)).subscribe(() => {\n\t\t\tthis.settings = this._service.setting('app.booking');\n\t\t\tthis.form = generateBookingForm(this._data.booking, this.available_fields);\n\t\t});\n\n\t\tconst breakpoint = 450;\n\t\tif (window) {\n\t\t\tthis.mobile = window.innerWidth < breakpoint;\n\t\t}\n\n\t\tfromEvent(window, 'resize').pipe(throttleTime(500)).pipe(tap({\n\t\t\tnext: val => {\n\t\t\t\tconst target = val.target as Window;\n\t\t\t\tthis.mobile = target.innerWidth < breakpoint;\n\t\t\t}\n\t\t})).subscribe();\n\n\n\t\tthis.subscription('buildings', this.store.pipe(\n\t\t\tselect(buildingStateSelector),\n\t\t\tselect(selectBuildingOptionsGroupedByCity),\n\t\t\tmap((grouped: Map) => {\n\t\t\t\treturn flattenDisplayOffices(grouped);\n\t\t\t}),\n\t\t\tdistinctUntilChanged()\n\t\t).subscribe(next => {\n\t\t\tthis.buildings = next;\n\t\t\t!this.showDetails && this.dispatchToGetFloorCurrentStatus(this._data.booking);\n\t\t}));\n\n\n\t}\n\n\n\tpublic get disableCateringButton() {\n\t\tswitch (this.status) {\n\t\t\tcase 'cancelled':\n\t\t\tcase 'declined':\n\t\t\tcase 'expired':\n\t\t\t\treturn true\n\t\t\tdefault:\n\t\t\t\treturn !cateringAllowed(this._data?.booking, this._data.booking.room.building);\n\t\t}\n\t}\n\n\tpublic get roomHasCatering() {\n\t\treturn roomHasCateringHours(this._data.booking.room.building, this._data.booking?.room);\n\t}\n\n\tpublic get catering() {\n\t\treturn this._data.booking?.catering || [];\n\t}\n\n\tpublic formatDeliveryTime(order) {\n\t\treturn this._data.booking.startDateTz.addValue({ minutes: order?.delivery_time }).formatDate(\"h:mma\");\n\t}\n\n\tpublic initDisplayValues(booking: Booking) {\n\t\tconst roomEmail = booking.room.email || '';\n\t\tthis.dateString = dateBuildingFormatString(booking.startDateTz, true);\n\t\tthis.timeString = startEndTimeWithZoneFormatString(booking.startDateTz, booking.displayEndDateTz);\n\t\tthis.host = booking.organiser.name;\n\t\tthis.opt_out = booking.opt_out;\n\t\tthis.hostEmail = booking.organiser.email;\n\t\tthis.title = booking.title;\n\t\tthis.type = toTitleCase(booking.booking_type);\n\t\tthis.roomName = booking.local_room_name || '';\n\t\tthis.durationString = humaniseDuration(booking.duration);\n\t\tthis.capacity = booking.room.capacity; // in case of multiroom booking should we sum the capacity for all the rooms?\n\t\tthis.attendeesString = booking.attendees.map(a => a.name).join(', ');\n\t\tthis.chargeCode = booking.equipment_codes[roomEmail];\n\t\tthis.headcount = booking.expected_attendees[roomEmail];\n\t\tthis.mapUrl = booking.room.level.map_url;\n\t\tthis.extendableMaximum = 0;\n\t\tthis.focusedRoom = `area-${booking.room.map_id}-status`;\n\t\tthis.checkingExtendable = false;\n\t\tthis.receiptionEmail = this._data.booking.room.building?._settings?.discovery_info?.reception_email || '';\n\t\tthis.companyString = booking.company.join(', ');\n\t\t// UI button availability\n\t\tthis.disableCancelButton = true; // CSS hide disabled\n\t\tthis.disableEditTimeButton = true;\n\t\tthis.disableUpdateDetailsButton = true;\n\t\tthis.isRecurrentBooking = (booking.recurrence_type !== null || booking.recurrence_type === '') && booking.recurrence_period !== null ? true : false;\n\t\tthis.isMultiroomBooking = booking.is_multiroom ? true : false\n\n\t\t// Room Availability modal start date\n\t\tthis.setAlternativeWeekStartDate(booking.startDateTz);\n\n\t\t// Get the equiptment notes\n\t\tconst requirements = booking.notes.find(n => {\n\t\t\tif (n.type === 'equipment') {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t});\n\t\tthis.requirements = requirements ? requirements.message : '';\n\n\t\t// Setup the UI status based on the booking approval status\n\t\tif (booking.status) {\n\t\t\t// mark bookings before today expired\n\t\t\tconst orgStatus = booking.status;\n\t\t\tthis.status = booking.status;\n\t\t\tconst recentlyExpired = DateNow(new Date()).subtractValue({ minutes: 5 }).isBeforeDate(booking.startDateTz.addValue({ minutes: booking.duration }));\n\t\t\tif (!['declined', 'cancelled'].includes(booking.status)) {\n\t\t\t\tthis.status = DateNow(new Date()).isAfterDate(booking.startDateTz.addValue({ minutes: booking.duration })) ? 'expired' : booking.status;\n\t\t\t}\n\n\t\t\tif(this._data.master_booking && this._data.master_booking.status === 'tentative' ) {\n\t\t\t\tthis.disableSeriesEditButton = true;\n\t\t\t}\n\n\t\t\tswitch (this.status) {\n\t\t\t\tcase 'tentative':\n\t\t\t\t\tthis.statusImage = 'assets/icon/booking_pending.svg';\n\t\t\t\t\tthis.statusText = 'Pending';\n\t\t\t\t\tthis.disableCancelButton = false;\n\t\t\t\t\tthis.disableUpdateDetailsButton = false;\n\t\t\t\t\tthis.disableEditTimeButton = false;\n\t\t\t\t\t// Verify the booking date makes it updatable.\n\t\t\t\t\tif (DateNow(new Date()).isAfterDate(booking.startDateTz)) {\n\t\t\t\t\t\t// disable edit date time\n\t\t\t\t\t\tthis.disableEditTimeButton = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'accepted':\n\t\t\t\t\tthis.statusImage = 'assets/icon/booking_confirmed.svg';\n\t\t\t\t\tthis.statusText = 'Confirmed';\n\t\t\t\t\tthis.disableCancelButton = false;\n\t\t\t\t\tthis.disableUpdateDetailsButton = false;\n\t\t\t\t\tthis.disableEditTimeButton = false;\n\t\t\t\t\tthis.checkingExtendable = true;\n\t\t\t\t\t// edit date time on but returns to tenative on save\n\t\t\t\t\tthis.findMaxExtension().then(v => {\n\t\t\t\t\t\tthis.extendableMaximum = v;\n\t\t\t\t\t\tthis.checkingExtendable = false;\n\t\t\t\t\t});\n\t\t\t\t\t// Verify the booking date makes it updatable.\n\t\t\t\t\tif (DateNow(new Date()).isAfterDate(booking.startDateTz)) {\n\t\t\t\t\t\t// disable edit date time\n\t\t\t\t\t\tthis.disableEditTimeButton = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'approved':\n\t\t\t\t\tthis.statusImage = 'assets/icon/booking_confirmed.svg';\n\t\t\t\t\tthis.statusText = 'Confirmed';\n\t\t\t\t\tthis.disableCancelButton = false;\n\t\t\t\t\tthis.disableUpdateDetailsButton = false;\n\t\t\t\t\tthis.disableEditTimeButton = false; // BLOCKED: API doesn't update 'approval_status' on save.\n\t\t\t\t\tthis.checkingExtendable = true;\n\t\t\t\t\t// edit date time on, back to pending on change.\n\t\t\t\t\tthis.findMaxExtension().then(v => {\n\t\t\t\t\t\tthis.extendableMaximum = v;\n\t\t\t\t\t\tthis.checkingExtendable = false;\n\t\t\t\t\t});\n\t\t\t\t\t// Verify the booking date makes it updatable.\n\t\t\t\t\tif (DateNow(new Date()).isAfterDate(booking.startDateTz)) {\n\t\t\t\t\t\t// disable edit date time\n\t\t\t\t\t\tthis.disableEditTimeButton = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'declined':\n\t\t\t\t\tthis.statusImage = 'assets/icon/booking_cancelled.svg';\n\t\t\t\t\tthis.statusText = 'Cancelled';\n\t\t\t\t\t// you can edit time and go back to pending\n\t\t\t\t\tthis.extendableMaximum = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'cancelled':\n\t\t\t\t\tthis.statusImage = 'assets/icon/booking_cancelled.svg';\n\t\t\t\t\tthis.statusText = 'Cancelled';\n\t\t\t\t\tthis.extendableMaximum = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'expired':\n\t\t\t\t\tthis.statusImage = 'assets/icon/booking_expired.svg';\n\t\t\t\t\tthis.statusText = 'Expired';\n\t\t\t\t\tthis.extendableMaximum = 0;\n\n\t\t\t\t\tif (recentlyExpired && ['accepted', 'approved'].includes(orgStatus)) {\n\t\t\t\t\t\tthis.checkingExtendable = true;\n\t\t\t\t\t\tthis.findMaxExtension().then(v => {\n\t\t\t\t\t\t\tthis.extendableMaximum = v;\n\t\t\t\t\t\t\tthis.checkingExtendable = false;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: // TODO What is an appropriate default ? And refactor where else this is common.\n\t\t\t\t\tthis.statusImage = 'assets/icon/booking_expired.svg';\n\t\t\t\t\tthis.statusText = 'Expired';\n\t\t\t\t\tthis.extendableMaximum = 0;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic listItems(order) {\n\t\treturn order.items.map(i => `(${i.amount}) ${i.name}`).join(', ');\n\t}\n\n\tpublic expandLocation() {\n\t\tthis.expandedLocation = true;\n\t}\n\n\tpublic handleClose(fetchRooms: boolean = false) {\n\t\tthis.expandedLocation = false;\n\t\tthis.expandedAvailability = false;\n\t\tif (fetchRooms) {\n\t\t\tthis.fetchRooms(false);\n\t\t\tthis.invalidDueToOfficeRule && this.alertIfItHasConflict(false, true);\n\t\t\tthis.invalidDueToOfficeRule = false;\n\t\t}\n\t}\n\n\tpublic close(flag: string = '') {\n\t\tthis.dialogRef.close(flag);\n\t}\n\n\t/**\n\t * Check if there are any booking collisions with the new booking time\n\t * @param room_id 'sys-' id of room in question\n\t * @param date proposed booking time\n\t * @param duration proposed booking length (in minutes)\n\t */\n\tprivate async findMaxExtension(): Promise {\n\t\tconst setupInSeconds = this._data.booking.setup[this._data.booking.room.email] || 0;\n\t\tconst breakdownInMinutes = this._data.booking.breakdown[this._data.booking.room.email] ? this._data.booking.breakdown[this._data.booking.room.email] / 60 : 0;\n\n\t\t// Add a seconds, since the end time ends in :59, and add the setup time\n\t\tconst endTz = this._data.booking.endDateTz.addValue({ seconds: setupInSeconds + 1 });// (this._data.booking.date + this._data.booking.duration*60000)*0.001 -1\n\t\tconst params = {\n\t\t\troom_ids: this._data.booking.room.id,\n\t\t\tdateTz: endTz, // (((end + 60 + setupSeconds) * 1000)),\n\t\t\tduration: 60 + breakdownInMinutes,\n\t\t\thide_bookings: true,\n\t\t};\n\n\t\treturn await this._spaces\n\t\t\t.available(params, null, false)\n\t\t\t.then(\n\t\t\t\t(list) => {\n\t\t\t\t\t// measure gap in booking instead and have options\n\t\t\t\t\tconst gapInMinutes = ((list[0].available_until - (endTz.seconds - 60)) / 60);\n\t\t\t\t\tconst value = Math.min(60, gapInMinutes);\n\t\t\t\t\treturn value >= 15 ? value : 0;\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t);\n\t}\n\n\tpublic toggleUpdateView() {\n\t\tthis.showDetails = !this.showDetails;\n\t\t!this.showDetails && this.dispatchToGetFloorCurrentStatus(this._data.booking);\n\t}\n\n\n\n\n\tpublic getLocation(booking: Booking): any {\n\n\t\tif (this.buildings && booking.building_zone) {\n\t\t\treturn this.buildings.find(b => booking.building_zone === b.value);\n\t\t}\n\t\treturn [];\n\t}\n\n\n\t/**\n * Dispatches data for getting the current status of the booking floor.\n *\n * This function prepares and dispatches necessary data to retrieve the current status\n * of the booking floor.\n *\n * @param {Object} booking - The booking details object, containing room, date, duration, etc.\n * @param {boolean} editingSeries - A boolean indicating whether the booking is part of a series and being edited.\n\n */\n\tpublic dispatchToGetFloorCurrentStatus(booking, editingSeries: boolean = false) {\n\t\tconst timezone = booking.timezone;\n\t\tconst { capacity, internal_or_external } = booking.room;\n\t\tconst roomOption = capacity < 3 ? 0 : (capacity > 2 && capacity < 10) ? 1 : 2;\n\t\tconst roomSize = roomSizeOptions[roomOption];\n\n\t\t// Process recurrence data if the booking is part of a series being edited\n\t\tlet recurringBookingData = {};\n\t\tlet recurrenceStart = [];\n\t\tif(booking.is_recurrent && editingSeries) {\n\n\t\t\tthis._data.master_booking.occurrence_details.forEach(element => {\n\t\t\t\trecurrenceStart.push(new DateTZ({ date: element.start_epoch * 1000, is_local_tz: false, building_tz: timezone}));\n\t\t\t});\n\t\t\trecurrenceStart = recurrenceStart.sort((d1: DateTZ, d2: DateTZ) => d1.ms - d2.ms);\n\n\t\t\tconst {\n\t\t\t\tid,\n\t\t\t\trecurrence_period,\n\t\t\t\trecurrence_interval,\n\t\t\t\trecurrence_count,\n\t\t\t\tis_recurrent,\n\t\t\t\trecurrence_exceptions,\n\t\t\t\trecurrence_pattern,\n\t\t\t\trecurrence_days,\n\t\t\t\trecurrenEndFromOcurrences,\n\t\t\t\toccurrence_details,\n\t\t\t\toccurrence_edits,\n\t\t\t\toccurrence_ids,\n\t\t\t\trecurrence_type,\n\t\t\t\trecurrence_master_id,\n\t\t\t\tedits } = this._data.master_booking\n\n\t\t\tconst rec_endTz = recurrenEndFromOcurrences.bind(this._data.master_booking);\n\t\t\tconst recurrence_endTz = rec_endTz(occurrence_details)\n\n\n\n\n\t\t\trecurringBookingData = {\n\t\t\t\tid:id,\n\t\t\t\trecurrence_period: recurrence_period,\n\t\t\t\trecurrence_interval: recurrence_interval || 1,\n\t\t\t\trecurrence_endTz: recurrence_endTz, //this._data.master_booking.recurrence_endTz,\n\t\t\t\trecurrence_count: recurrence_count || 1,\n\t\t\t\tis_recurrent: is_recurrent,\n\t\t\t\trecurrence_starts: recurrenceStart,\n\t\t\t\trecurrence_exceptions: recurrence_exceptions || [],\n\t\t\t\trecurrence_pattern: recurrence_pattern || \"weekly\", //Helper value to store the last selected pattern (daily, weekly, monthly),\n\t\t\t\trecurrence_days: recurrence_days || [],\n\n\t\t\t\toccurrence_details: occurrence_details,\n occurrence_edits: occurrence_edits || null,\n occurrence_ids: occurrence_ids || null,\n recurrence_type: recurrence_type || null,\n recurrence_master_id: recurrence_master_id,\n\t\t\t\tedits: edits\n\t\t\t}\n\t\t};\n\n\n\t\tconst formGroup: BookingFormData = {\n\t\t\tlocation: [this.getLocation(booking)],\n\t\t\t//date: booking.date,\n\t\t\t// dateTz: recurrenceStart[0], //building_tz: timezone\n\t\t\tdateTz: recurrenceStart.length >=1 ? recurrenceStart[0] : closestToTimeSlotTz(new DateTZ({ date: Date.now(), is_local_tz: false }),\t15\t).toZone(timezone),\n\t\t\tduration: booking.duration,\n\t\t\tbookingType: internal_or_external === 'internal' ? bookingTypeOptions[0] : bookingTypeOptions[1],\n\t\t\troomSize: roomSize,\n\t\t\tselectedRoom: null,\n\t\t\ttimezone: timezone,\n\t\t\t// buildings: buildings,\n\t\t\t...this._data?.master_booking?.toJSON(),\n\t\t\t...recurringBookingData,\n\t\t\topt_out:booking.opt_out,\n\t\t\taction: 'edit_booking'\n\n\t\t};\n\n\t\t// Clear existing form and result data, then dispatch the updated form data\n\t\tthis.clearFormAndResultData();\n\t\tthis.store.dispatch(storeBookingFormData({ payload: formGroup }));\n\n\t\t// Dispatch a request to load available rooms based on the updated form data\n\t\tthis.store.dispatch(loadRoomsForResultsMap.request(roomFormDataToQuery(formGroup)))\n\t}\n\n\t/**\n * Opens a modal for editing a recurring series of bookings.\n */\n\tpublic editRecurringSeries() {\n\t\t// Dispatch the current status of the booking floor for editing the recurring series\n\t\tthis.dispatchToGetFloorCurrentStatus(this._data.booking, true);\n\n\t\tconst dialog_ref = this.dialog.open(RoomBookingModalComponent, {\n\t\t\t\tpanelClass: 'mck-modal',\n\t\t\t\tautoFocus: false,\n\t\t\t\tbackdropClass: 'mck-modal-backdrop',\n\t\t\t\tdata: {\n\t\t\t\t\tnavigateTo: this.navigateT0Search.bind(this),\n\t\t\t\t\taction: SeriesAction.EDIT, // Indicates the action type (editing a series)\n\t\t\t\t}\n\t\t});\n\n\t\t// Subscribe to the modal's closed event to handle the result\n\t\tdialog_ref.afterClosed().subscribe((flag) => {\n\t\t\t// Close the modal if the operation was successful (flag is truthy)\n\t\t\tflag && this.close(flag); //console.log('ROOM MODAL CLOSED')\n\t\t});\n\n\t}\n\n\tnavigateT0Search() {\n\t\tthis.router.navigate(['../home/results'], { relativeTo: this.route });\n\t}\n\n\n\tpublic clearFormAndResultData() {\n\t\tthis.store.dispatch(clearBookingFormData());\n\t\tthis.store.dispatch(loadRoomsForResults.clear());\n\t}\n\n\n\tpublic toggleEditView() {\n\t\tthis.fetchRooms(true);\n\t\tthis.expandedAvailability = true;\n\t}\n\n\tpublic updateBookingState(booking: Booking) {\n\t\tthis._data.booking = booking;\n\t\tthis.initDisplayValues(booking);\n\t\tthis.store.dispatch(loadBookingsWithQuery({ 'id': booking.id, 'email': this.currentUser.email, 'target': 'bookingById', 'offset': 0 }));\n\t\t// reload all booking for user from - apps/staff/src/app/booking/room-booking/room-booking.component.ts\n\t\tthis._data.refresh(); //\n\t}\n\n\tpublic cancelBooking(opts: { series?: boolean } = {}) {\n\t\t// Open the cancel booking modal\n\t\tthis.dialog.open(CancelBookingModalComponent, {\n\t\t\tpanelClass: 'mck-noexpand',\n\t\t\tdata: {\n\t\t\t\t...this._data,\n\t\t\t\t...opts,\n\t\t\t\tcallback: () => {\n\t\t\t\t\tconst booking = this._data.booking.clone();\n\t\t\t\t\tthis._data.booking.delete(opts).then(\n\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\tthis.close();\n\t\t\t\t\t\t\t// @TODO:API The deleted record is still being returned for quite some time regardless of timeout.\n\t\t\t\t\t\t\tthis._data.refresh()\n\t\t\t\t\t\t\t// this.timeout('refresh', () => this._data.refresh(), 1000);\n\t\t\t\t\t\t\t// Heap track event\n\t\t\t\t\t\t\tthis._service.analytics.track('delete', {\n\t\t\t\t\t\t\t\tbooking_id: booking.id,\n\t\t\t\t\t\t\t\toffice: booking.room.building.name,\n\t\t\t\t\t\t\t\troom: booking.room.name,\n\t\t\t\t\t\t\t\tstart_time: booking.startDateTz.ms,\n\t\t\t\t\t\t\t\tend_time: booking.endDateTz.ms,\n\t\t\t\t\t\t\t\tcatering: !!booking.catering.legth,\n\t\t\t\t\t\t\t\theadcount: booking?.expected_attendees[booking.room.email],\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\t(err) => {\n\t\t\t\t\t\t\tthis.displayWarningBanner(getStatusErrorMessage(err?.status));\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tautoFocus: false,\n\t\t\tbackdropClass: 'mck-modal-backdrop',\n\t\t});\n\t}\n\n\tpublic extendBooking() {\n\t\t// open the extend booking modal\n\t\tconst dialogRefX = this.dialog.open(BookingDurationModalComponent, {\n\t\t\tpanelClass: 'mck-noexpand',\n\t\t\tdata: {\n\t\t\t\tbooking: this._data.booking,\n\t\t\t\tmaximum: this.extendableMaximum,\n\t\t\t},\n\t\t\tautoFocus: false,\n\t\t\tbackdropClass: 'mck-modal-backdrop',\n\t\t});\n\n\t\tdialogRefX.afterClosed().subscribe((booking?: Booking) => {\n\t\t\tif (booking) {\n\t\t\t\tthis.updateBookingState(booking);\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic displayCancelModal() {\n\t\t// Can the display cancel modal open? If it isn't one of these statuses\n\t\treturn !['cancelled', 'expired', 'declined'].includes(this.status);\n\t}\n\n\n\tpublic confirmChanges(data: DateDurationData) {\n\t\t// Confirm the changes returned from the room availability modal.\n\t\tthis.mobile = data.mobile;\n\t\tthis.setAlternativeWeekStartDate(data.dateTz);\n\n\t\t// New booking flow has this.data\n\t\tif (this.data.value) {\n\t\t\tthis.fetchRooms(true, this.alternativeWeekStartDateTz);\n\t\t\t// submit\n\t\t\tthis.store.dispatch(storeBookingFormData({\n\t\t\t\tpayload: {\n\t\t\t\t\t...this.data.value,\n\t\t\t\t\tdateTz: data.dateTz,\n\t\t\t\t\tduration: data.duration,\n\t\t\t\t}\n\t\t\t}));\n\t\t} else if (data.save) {\n\t\t\t// update booking date/duration\n\t\t\tconst booking = this._data.booking.clone();\n\t\t\tconst pendingChanges = booking.duration !== data.duration || booking.startDateTz.ms !== data.dateTz.ms;\n\t\t\t// booking.duration = data.duration;\n\t\t\tbooking.startDateTz = data.dateTz; // date = data.dateTz.ms;\n\t\t\tbooking.endDateTz = data.dateTz.addValue({ minutes: data.duration });\n\t\t\tthis.loading = true;\n\n\t\t\tconst roomRules = rulesForSpace({\n\t\t\t\ttime: booking.date,\n\t\t\t\tduration: booking.duration,\n\t\t\t\tuser: this.currentUser,\n\t\t\t\trules: this._data.booking.room.building?.booking_rules,\n\t\t\t\tspace: booking.room\n\t\t\t});\n\n\t\t\t// Rooms requiring approval are reset to tentative when the time changes.\n\t\t\tif (pendingChanges && !roomRules?.auto_approve) {\n\t\t\t\t// https://acaprojects.atlassian.net/browse/MCK-1481\n\t\t\t\t/**\n\t\t\t\t * Having 2 ways of containing the status is icky but until PlaceOS\n\t\t\t\t * depreciates approval_status it's necessry.\n\t\t\t\t */\n\t\t\t\t// booking.approval_status[booking.room.email] = \"tentative\";\n\t\t\t\tbooking.status = \"tentative\";\n\t\t\t\tbooking.time_changed = true;\n\t\t\t}\n\t\t\telse if (roomRules.reason === SpaceFilterReason.OfficeRules) {\n\t\t\t\t// this.alertIfItHasConflict(false, true);\n\t\t\t\tthis.invalidDueToOfficeRule = true;\n\t\t\t\tthis.loading = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// booking.save() won't use the toAPIJSON conversion so use the booking service.\n\t\t\tthis._bookings.save(booking).then(\n\t\t\t\t(bkn) => {\n\t\t\t\t\t// update booking\n\t\t\t\t\tthis.updateBookingState(booking);\n\t\t\t\t\tthis.form = generateBookingForm(booking, this.available_fields);\n\t\t\t\t\tthis.loading = false;\n\t\t\t\t\tthis.displayInfoBanner();\n\t\t\t\t\tbooking.room.building.name\n\t\t\t\t\tthis._service.analytics.track('update', {\n\t\t\t\t\t\tbooking_id: booking.id,\n\t\t\t\t\t\toffice: booking.room.building.name,\n\t\t\t\t\t\troom: booking.room.global_name,\n\t\t\t\t\t\tstart_time: booking.startDateTz.ms,\n\t\t\t\t\t\tend_time: booking.endDateTz.ms,\n\t\t\t\t\t\tcatering: !!booking.catering.legth,\n\t\t\t\t\t\theadcount: booking.head_count,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t(err) => {\n\t\t\t\t\tthis.loading = false;\n\t\t\t\t\tthis.expandedAvailability = false;\n\t\t\t\t\tthis.displayWarningBanner(getStatusErrorMessage(err?.status));\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Open dialog if booking date and time is out of office rule\n\t * TO DO : Redundant code - same validaiton been applied over room detail while creating new booking - need to handle more graceful way. better if user been prohibited from choose future date if out of office rule on show avaialability calender itself\n\t * related to - https://acaprojects.atlassian.net/browse/MCK-2419\n\t */\n\n\talertIfItHasConflict(isBookable, isAvailable) {\n\t\t// this.isAlertDisplayed = true;\n\t\tconst data = {\n\t\t\theaderText: !isBookable ? SpaceConflictAlertModalData.NotBookableHeaderText : !isAvailable ? SpaceConflictAlertModalData.NotAvailableHeaderText : '',\n\t\t\tmessage: SpaceConflictAlertModalData.NotBookableDueToOfficeRule,\n\t\t\tbuttonLabel: 'Close',\n\t\t\tcallback: () => null,\n\t\t\tshouldClose: false\n\t\t};\n\t\tconst dialog = this.dialog.open(ConflictAlertModalComponent,\n\t\t\t{\n\t\t\t\tdata: data,\n\t\t\t\tpanelClass: 'mck-alert',\n\t\t\t\tautoFocus: false,\n\t\t\t\tbackdropClass: 'mck-modal-backdrop',\n\t\t\t\tdisableClose: !isBookable\n\t\t\t});\n\t}\n\n\n\n\tpublic displayInfoBanner() {\n\t\tthis.showInfoBanner = true;\n\t\tthis.timeout('close banner', () => {\n\t\t\tthis.showInfoBanner = false;\n\t\t}, 3000);\n\t}\n\n\tpublic displayWarningBanner(custom: string) {\n\t\tthis.warningMessage = custom;\n\t\tthis.showWarningBanner = true;\n\t\tthis.timeout('close banner', () => {\n\t\t\tthis.showWarningBanner = false;\n\t\t}, 10000);\n\t}\n\n\tpublic hideInfoBanner() {\n\t\tthis.showInfoBanner = false;\n\t}\n\n\tpublic hideWarningBanner() {\n\t\tthis.showWarningBanner = false;\n\t}\n\n\tpublic setAlternativeWeekStartDate(bookingDate: DateTZ) {\n\t\tif (!bookingDate) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.mobile) {\n\t\t\tthis.alternativeWeekStartDateTz = bookingDate.clone();\n\t\t} else {\n\t\t\tthis.alternativeWeekStartDateTz = bookingDate.clone().startOfValue('week').startOfValue('day');\n\t\t}\n\t}\n\n\tpublic updateCalendarWeekView(alternativeWeekStartDateTz: DateTZ) {\n\t\tthis.alternativeWeekStartDateTz = alternativeWeekStartDateTz.clone();\n\t\tthis.fetchRooms(true, this.alternativeWeekStartDateTz);\n\t}\n\n\tpublic fetchRooms(allWeek: boolean = true, alternativeWeekStartDateTz: DateTZ = null) {\n\t\tif (!this._data?.booking?.space?.id) {\n\t\t\treturn\n\t\t}\n\n\t\tconst day = 24 * 60;\n\t\tconst week = day * 7;\n\t\tconst date = (alternativeWeekStartDateTz || this._data?.booking?.startDateTz).clone(); // new DateTZ({date: alternativeWeekStartDateTz || this._data?.booking?.date});\n\t\tconst startOfDay = date.startOfValue('day').setValue({ second: 0, millisecond: 0 });\n\t\tconst startOfWeek = date.startOfValue('week');\n\n\t\t// Query for the entire day for this room\n\t\tconst query = {\n\t\t\tdateTz: allWeek ? startOfWeek : startOfDay,\n\t\t\tduration: allWeek ? week : day,\n\t\t\tlocations: this._data?.booking?.space?.id,\n\t\t\tcapacity: this._data?.booking?.space?.capacity,\n\t\t};\n\t\tthis.store.dispatch(loadByIdResults.request(query));\n\t}\n\n\tpublic addCatering() {\n\t\t// For the Add Catering button\n\t\tthis.showCatering = true;\n\t}\n\n\tpublic saveBookingWithCatering(form: FormGroup) {\n\t\t// Response from the catering modal closing\n\t\t// Close catering and confirmation modals and just show booking details modal\n\t\tif (!form) {\n\t\t\tthis.showCatering = false;\n\t\t\tthis.showDetails = false;\n\t\t\treturn;\n\t\t}\n\t\t// Update the booking state.\n\t\tconst booking = this._data.booking.clone();\n\t\tbooking.catering = form.controls.catering.value;\n\n\t\tif (booking.catering.length) {\n\t\t\tconst setup = {};\n\t\t\tsetup[booking.room.email] = booking.setup[booking.room.email] || 900;\n\t\t\tconst breakdown = {};\n\t\t\tbreakdown[booking.room.email] = booking.breakdown[booking.room.email] || 900;\n\n\t\t\tbooking.setup = setup\n\t\t\tbooking.breakdown = breakdown\n\t\t}\n\n\t\tthis.updateBookingState(booking);\n\t}\n\n\tpublic set specific_dates(val: boolean) {\n\t\tthis._specific_dates = val;\n\t}\n\n\tpublic get specific_dates(): boolean {\n\t\treturn this._specific_dates;\n\t}\n\n\n\tpublic toggleSpecificDates() {\n\t\tthis.specific_dates = !this.specific_dates;\n\t}\n\n\n}\n","import {\n Component,\n Inject,\n OnInit,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n BaseDirective,\n } from '@mckinsey-converge/base';\nimport {\n Booking,\n BookingsService,\n DEFAULT_BOOKING_DURATION,\n} from '@mckinsey-converge/data-common';\nimport {\n MAT_DIALOG_DATA,\n MatDialogRef\n} from '@angular/material/dialog';\nimport {\n FormControl,\n FormGroup,\n Validators\n} from '@angular/forms';\nimport * as cloneDeep from 'lodash/cloneDeep';\n\ninterface extendData {\n booking: Booking;\n maximum: number\n}\n\n@Component({\n selector: 'app-booking-duration-modal',\n template: `\n \n
\n \n

Your booking failed to update, please try again

\n \n
\n
\n \n
Extend booking duration
\n
\n
\n \n \n
\n
\n \n
\n
\n `,\n styleUrls: ['./booking-duration-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class BookingDurationModalComponent extends BaseDirective implements OnInit {\n\n public loading: string;\n public showWarningBanner: boolean = false;\n\n public get durationGroups() {\n const step = 15;\n const steps = Math.floor(this.data.maximum / step);\n const max = (steps * step) + this.data.booking.duration;\n\n return [{\n start: this.data.booking.duration,\n step,\n max\n }];\n }\n\n public formGroup = new FormGroup({\n date: new FormControl(this.data.booking.date, [Validators.required]),\n dateTz: new FormControl(this.data.booking.startDateTz, [Validators.required]),\n duration: new FormControl(DEFAULT_BOOKING_DURATION, [Validators.required]),\n });\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: extendData,\n private dialogRef: MatDialogRef,\n public _bookings: BookingsService,\n ) {\n super();\n }\n\n ngOnInit() {\n this.formGroup.setValue({\n date: this.data.booking.date,\n dateTz: this.data.booking.startDateTz,\n duration: this.data.booking.duration,\n });\n }\n\n public closeModal(booking?: Booking) {\n this.dialogRef.close(booking);\n }\n\n public updateBookingDuration() {\n const formData = this.formGroup.getRawValue();\n this.loading = 'Saving...';\n\n // clone booking to allow editing\n // const booking = this.data.booking.clone(); // this line commented for bug appearing in CNG-352. Used cloneDeep instead\n const booking = cloneDeep(this.data?.booking);\n booking.endDateTz = booking.startDateTz.addValue({ minutes: formData.duration });\n this._bookings.save(booking).then(\n () => {\n this.loading = null;\n this.closeModal(booking);\n },\n (err) => {\n this.loading = null;\n this.displayWarningBanner()\n }\n );\n }\n\n\n public displayWarningBanner() {\n this.showWarningBanner = true;\n this.timeout('close banner', () => {\n this.showWarningBanner = false;\n }, 10000);\n }\n\n public hideWarningBanner() {\n this.showWarningBanner= false;\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n OnInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { BookingResultsViewModel } from '../manage-bookings/manage-bookings.viewmodel';\nimport {\n BaseDirective,\n shorterLocalDateFormatString,\n timeWithZoneFormatString,\n startEndTimeFormatString,\n humaniseDuration,\n closestToTimeSlotTz,\n} from '@mckinsey-converge/base';\nimport { DateNow, DateTZ, localTimezone } from \"@mckinsey-converge/date-tz\";\nimport { Booking, BookingFormData, BookingStoreState, bookingTypeOptions, Building, BuildingCity, clearBookingFormData, defaultRoomSizeOption, DEFAULT_BOOKING_DURATION, flattenDisplayOffices, roomFormDataToQuery, roomSizeOptions, storeBookingFormData } from '@mckinsey-converge/data-common';\nimport { buildingStateSelector, BuildingStoreState, selectBuildingOptionsGroupedByCity } from '@mckinsey-converge/buildings';\nimport {\n select,\n Store\n} from '@ngrx/store';\nimport {\n BehaviorSubject,\n} from 'rxjs';\n\nimport { distinctUntilChanged, map } from 'rxjs/operators';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { loadRoomsForResults, loadRoomsForResultsMap } from '@mckinsey-converge/rooms';\nimport { MyBookingsStoreState } from '@mckinsey-converge/bookings';\nimport { UserStoreState } from '@mckinsey-converge/user';\n\nexport type RoomBookingStoreState = BookingStoreState & BuildingStoreState & MyBookingsStoreState & UserStoreState;\n@Component({\n selector: 'app-booking-result-item',\n templateUrl: './booking-result-item.component.html',\n styleUrls: ['./booking-result-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BookingResultItemComponent extends BaseDirective implements OnInit {\n /**\n * If undefined, we display in loading state.\n */\n @Input()\n public viewModel: BookingResultsViewModel | undefined;\n \n @Input()\n public bookings: BookingResultsViewModel[];\n\n @Input()\n public list: string;\n\n @Input() public index: number;\n\n @Input() public small: boolean = false;\n\n @Output()\n public bookingSelect = new EventEmitter();\n\n public buildings = new BehaviorSubject[]>([]);\n\n public roomName: string;\n public roomLocation: string;\n public host: string;\n public status: string;\n public timeStringParts: string[] = [' ', ' '];\n public localTimeStringParts: string[] = [' ', ' '];\n public isAnotherTimezone: boolean = false;\n public statusText: string;\n public statusImage: string;\n public durationString: string;\n public timeRangeString: string;\n public building: any;\n public get dateString() {\n if (!this.bookings || !this.bookings.length) return '';\n const bkn1 = this.bookings[this.index].booking;\n const d1 = new DateTZ({ date: bkn1.startDateTz.ms, is_local_tz: false, building_tz: bkn1.startDateTz.building_tz });\n if (this.index === 0) {\n return shorterLocalDateFormatString(d1);\n }\n const bkn2 = this.bookings[this.index - 1].booking;\n const d2 = new DateTZ({ date: bkn2.startDateTz.ms, is_local_tz: false, building_tz: bkn2.startDateTz.building_tz });\n if (!d1.isSameDate(d2, 'day')) {\n return shorterLocalDateFormatString(d1);\n }\n return '';\n }\n public get todayString() {\n if (!this.bookings || !this.bookings.length) {\n return '';\n }\n \n // Strip the booking of it's timezone infomation so isSameDate is just based on timestamp and local time.\n const d1 = new DateTZ({ date: this.bookings[this.index].booking.startDateTz.ms });\n return DateNow(new Date()).isSameDate(d1, 'day') ? '(Today)' : '';\n }\n\n public get attendeesCount(): number {\n // allAttendees is booking.attendees + 1 (booking.organizer)\n return this.viewModel.booking?.allAttendees.length; \n }\n\n public get has_catering(): number {\n return this.viewModel.booking?.has_catering && this.viewModel.booking?.catering?.length;\n }\n\n public get upcoming() {\n return ['tentative', 'accepted', 'approved'].includes(this.status);\n }\n\n constructor(private store: Store,\n private cdRef: ChangeDetectorRef) {\n super();\n }\n\n public ngOnInit(): void {\n this.setupDisplayFields();\n this.subscription('buildings', this.store.pipe(\n select(buildingStateSelector),\n select(selectBuildingOptionsGroupedByCity),\n map((grouped: Map) => {\n return flattenDisplayOffices(grouped);\n }),\n distinctUntilChanged()\n ).subscribe(next => {\n this.buildings.next(next);\n }));\n this.cdRef.detectChanges();\n }\n\n public hasData() {\n return this.viewModel !== undefined;\n }\n\n public getTooltipText(){\n return this.viewModel.booking.local_room_name.split(',');\n }\n\n public setupDisplayFields() { \n if (!this.viewModel?.booking) {\n return;\n }\n this.timeStringParts = timeWithZoneFormatString(this.viewModel.booking.startDateTz).split(' ');\n this.timeRangeString = startEndTimeFormatString(this.viewModel.booking.startDateTz, this.viewModel.booking.displayEndDateTz);\n this.isAnotherTimezone = !this.viewModel.booking.startDateTz.is_local_tz;\n this.localTimeStringParts = timeWithZoneFormatString(this.viewModel.booking.startDateTz.toZone(localTimezone())).split(' ');\n this.host = this.viewModel.booking.organiser.name;\n this.roomName = this.viewModel.booking.local_room_name.split(',')[0];\n this.roomLocation = this.viewModel.booking.room.street_and_city;\n this.durationString = humaniseDuration(this.viewModel.booking.duration, 'medium');\n\n if (this.viewModel.booking.status) {\n // mark bookings before today expired\n this.status = (DateNow(new Date()).isAfterDate(this.viewModel.booking.endDateTz) && this.list !== 'cancelled') ? 'expired' : this.viewModel.booking.status;\n switch(this.status) {\n case 'tentative':\n this.statusImage = 'assets/icon/booking_pending.svg';\n this.statusText = 'Pending';\n break;\n case 'accepted':\n this.statusImage = 'assets/icon/booking_confirmed.svg';\n this.statusText = 'Confirmed';\n break;\n case 'approved':\n this.statusImage = 'assets/icon/booking_confirmed.svg';\n this.statusText = 'Confirmed';\n break;\n case 'declined':\n this.statusImage = 'assets/icon/booking_cancelled.svg';\n this.statusText = 'Cancelled';\n break;\n case 'cancelled':\n this.statusImage = 'assets/icon/booking_cancelled.svg';\n this.statusText = 'Cancelled';\n break;\n case 'expired':\n this.statusImage = 'assets/icon/booking_expired.svg';\n this.statusText = 'Expired';\n break;\n default: // TODO\n this.statusImage = 'assets/icon/booking_expired.svg';\n this.statusText = 'Expired';\n break;\n }\n }\n this.cdRef.detectChanges();\n return;\n }\n\n}\n","

\n {{ dateString }} {{ todayString }}\n

\n
\n
\n
\n
\n
\n {{ timeStringParts[0] }} ({{ timeStringParts[1] }}) ({{\n durationString\n }})\n
\n
\n {{ localTimeStringParts[0] }} ({{ localTimeStringParts[1] }}) in your\n local timezone\n
\n
\n
\n \n \n \n \n \n
\n
\n
\n
\n
{{ statusText }}
\n
\n {{ timeRangeString }}\n
\n
\n \n
\n
\n
\n
\n
\n
\n \n \n
{{ viewModel.booking.title }}
\n {{\n viewModel.booking.bookingTypeLabel\n }}\n \n Multiroom\n \n \n
\n \n \n \n
\n
\n \n {{ roomName }}\n {{ roomLocation }}\n Host: {{ host }}\n {{ attendeesCount }}pp\n Catered\n \n \n \n \n \n \n \n \n
\n
\n
\n\n
\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { RoomBookingComponent } from 'src/app/booking/room-booking/room-booking.component';\nimport { RoomResultsComponent } from 'src/app/booking/room-results/room-results.component';\nimport { RoomDetailsComponent } from 'src/app/booking/room-details/room-details.component';\nimport { BookingCreateComponent } from './booking-create/booking-create.component';\nimport { BookingEditWrapperComponent } from './booking-create/booking-edit-wrapper.component';\nimport { RoomFiltersModalComponent } from 'src/app/booking/room-filters-modal/room-filters-modal.component';\nimport { ManageBookingsComponent } from './manage-bookings/manage-bookings.component';\nimport { OfficeFloorComponent } from './office-floor/office-floor/office-floor.component';\n\nconst routes: Routes = [\n {\n path: 'results',\n component: RoomResultsComponent,\n },\n {\n path: 'results/filter',\n component: RoomFiltersModalComponent,\n },\n {\n path: 'results/room',\n component: RoomDetailsComponent,\n },\n {\n path: 'create',\n component: BookingCreateComponent,\n },\n {\n path: 'edit',\n component: BookingEditWrapperComponent,\n },\n {\n path: 'manage',\n component: ManageBookingsComponent,\n },\n {\n path: 'catering/:id',\n data: { hasCatering: true },\n component: ManageBookingsComponent,\n },\n {\n path: 'booking/:id/:verb',\n component: ManageBookingsComponent,\n },\n {\n path: 'booking/:id',\n component: ManageBookingsComponent,\n },\n {\n path: 'floor-map',\n component: OfficeFloorComponent,\n },\n {\n path: 'results/booking-calendar',\n loadChildren: () => import('./booking-calendar/booking-calendar.module').then((m) => m.BookingCalendarModule),\n },\n {\n path: '**',\n component: RoomBookingComponent,\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class BookingRoutingModule {}\n","import {\n createReducer,\n on\n} from '@ngrx/store';\nimport { \n BookingFormState,\n clearBookingFormData,\n clearRoomFilters,\n openBookingSurvey,\n storeBookingFormData,\n storeRoomFilters\n} from '@mckinsey-converge/data-common';\nimport { closestToTimeSlotTz } from '@mckinsey-converge/base';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\n\nexport const initialBookingFormState: BookingFormState = {\n activeFormFilters: []\n};\n\nexport const bookingFormReducer = createReducer(initialBookingFormState,\n on(storeBookingFormData, (state: BookingFormState, action) => {\n return {\n ...state,\n activeForm: {\n ...state.activeForm,\n ...action.payload\n }\n } as BookingFormState;\n }),\n on(clearBookingFormData, state => ({\n ...state,\n activeForm: \n {\n location: state?.activeForm?.location,\n timezone: state?.activeForm?.timezone,\n dateTz: closestToTimeSlotTz(new DateTZ({ date: Date.now(), is_local_tz: false, building_tz: state?.activeForm?.timezone, }), 15)\n \n }\n }) as BookingFormState),\n on(openBookingSurvey, state => ({\n ...state,\n bookingCompleted: new Date()\n }) as BookingFormState),\n on(storeRoomFilters, (state: BookingFormState, action) => {\n return {\n ...state,\n activeFormFilters: action.payload\n } as BookingFormState;\n }),\n on(clearRoomFilters, (state: BookingFormState) => ({\n ...state,\n activeFormFilters: initialBookingFormState.activeFormFilters\n }) as BookingFormState)\n);\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { BookingRoutingModule } from './booking-routing.module';\nimport { BookingsListingComponent } from './bookings-listing/bookings-listing.component'\nimport { RoomBookingComponent } from './room-booking/room-booking.component';\nimport { RoomDetailsComponent } from './room-details/room-details.component';\nimport { BookingFormBaseComponent } from './booking-create/booking-form-base.component';\nimport { BookingCreateComponent } from './booking-create/booking-create.component';\nimport { BookingEditComponent } from './booking-create/booking-edit.component';\nimport { BookingConfirmationComponent } from './booking-confirmation/booking-confirmation.component';\nimport { UiModule } from '@mckinsey-converge/ui';\nimport { NgxMatSelectSearchModule } from 'ngx-mat-select-search';\nimport { MatSelectModule } from '@angular/material/select';\nimport {\n FormsModule,\n ReactiveFormsModule\n} from '@angular/forms';\nimport { SharedContentModule } from 'src/app/shared/shared.module';\nimport { MatButtonModule } from '@angular/material/button';\nimport { StoreModule } from '@ngrx/store';\nimport { bookingFormReducer } from 'src/app/booking/booking.form.reducer';\nimport { BookingResultItemComponent } from './booking-result-item/booking-result-item.component';\nimport { BookingDetailsModalComponent } from './booking-details-modal/booking-details-modal.component';\nimport { BookingDurationModalComponent } from './booking-duration-modal/booking-duration-modal.component';\nimport { CancelBookingModalComponent } from './cancel-booking-modal/cancel-booking-modal.component';\nimport { ManageBookingsComponent } from './manage-bookings/manage-bookings.component';\nimport { RoomResultsComponent } from './room-results/room-results.component';\nimport { SearchedLocationComponent } from './searched-location/searched-location.component';\nimport { ResultsHeaderComponent } from './results-header/results-header.component';\nimport { RoomAvailabilityPreviewComponent } from './room-availability-preview/room-availability-preview.component';\nimport { RoomLocationPreviewComponent } from './room-location-preview/room-location-preview.component';\nimport { RoomResultItemComponent } from './room-result-item/room-result-item.component';\nimport { RoomBookingFormComponent } from './room-booking-form/room-booking-form.component';\nimport { RoomBookingDetailsFormComponent } from './room-booking-details-form/room-booking-details-form.component';\nimport { RoomBookingModalComponent } from './room-booking-modal/room-booking-modal.component';\nimport { RoomResultsPaginatedComponent } from './room-results-paginated/room-results-paginated.component';\nimport { RoomFiltersModalComponent } from './room-filters-modal/room-filters-modal.component';\nimport { RoomFiltersFormComponent } from './room-filters-form/room-filters-form.component';\nimport { RoomAvailabilityPreviewModalComponent } from './room-availability-preview-modal/room-availability-preview-modal.component';\nimport { MapModule } from 'src/app/map/map.module';\nimport { OfficeFloorMapModule } from 'src/app/booking/office-floor/office-floor-map.module';\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\nimport { RoomResultsSectionComponent } from './room-results-section/room-results-section.component';\nimport { CalendarModule, DateAdapter } from 'angular-calendar';\nimport { adapterFactory } from 'angular-calendar/date-adapters/date-fns';\nimport { BookingCateringComponent } from './catering/catering.component';\nimport { OrderTableComponent } from './catering/order-table/order-table.component';\nimport { BookingCateringOrderDetailsComponent } from './catering/order-details/order-details.component';\nimport { BookingCateringOrderListComponent } from './catering/order-list/order-list.component';\nimport { CateringOrderListItemComponent } from './catering/order-list/item/item.component';\nimport { CateringMenuCategoryComponent } from './catering/order-details/category/category.component';\nimport { SurveyModalComponent } from '../components/survey-modal/survey-modal.component';\nimport { BookingEditWrapperComponent } from './booking-create/booking-edit-wrapper.component';\n\nexport const bookingModuleDeclarations = [\n BookingFormBaseComponent,\n BookingCreateComponent,\n BookingEditComponent,\n BookingConfirmationComponent,\n BookingDetailsModalComponent,\n BookingDurationModalComponent,\n BookingsListingComponent,\n BookingResultItemComponent,\n CancelBookingModalComponent,\n ManageBookingsComponent,\n BookingCateringComponent,\n BookingCateringOrderDetailsComponent,\n BookingCateringOrderListComponent,\n CateringMenuCategoryComponent,\n CateringOrderListItemComponent,\n RoomBookingComponent,\n RoomDetailsComponent,\n RoomResultsComponent,\n SearchedLocationComponent,\n ResultsHeaderComponent,\n RoomAvailabilityPreviewComponent,\n RoomLocationPreviewComponent,\n RoomResultItemComponent,\n RoomBookingModalComponent,\n RoomBookingFormComponent,\n RoomBookingDetailsFormComponent,\n RoomResultsPaginatedComponent,\n RoomFiltersModalComponent,\n RoomFiltersFormComponent,\n RoomResultsSectionComponent,\n RoomAvailabilityPreviewModalComponent,\n CateringMenuCategoryComponent,\n OrderTableComponent,\n SurveyModalComponent,\n BookingEditWrapperComponent\n];\n\nexport const bookingModuleImports = [\n CommonModule,\n UiModule,\n MatSelectModule,\n MatButtonModule,\n NgxMatSelectSearchModule,\n ReactiveFormsModule,\n SharedContentModule,\n FormsModule,\n NgxSkeletonLoaderModule,\n MapModule,\n CalendarModule.forRoot({\n provide: DateAdapter,\n useFactory: adapterFactory,\n }),\n OfficeFloorMapModule\n];\n\n\n@NgModule({\n declarations: [...bookingModuleDeclarations],\n imports: [\n ...bookingModuleImports,\n BookingRoutingModule,\n StoreModule.forFeature('bookingForm', bookingFormReducer)\n ]\n})\nexport class BookingModule {\n}","import { Component, Input, OnInit, OnChanges, ChangeDetectionStrategy, ChangeDetectorRef, NgZone } from '@angular/core';\nimport { throttleTime, tap, first, distinctUntilChanged, map } from 'rxjs/operators';\nimport { fromEvent } from 'rxjs';\nimport { TopBarHeaderMode } from 'src/app/components/topbar-header/topbar-header.component';\nimport { select, Store } from '@ngrx/store';\nimport { BehaviorSubject } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { BuildingStoreState, buildingStateSelector, selectBuildingOptionsGroupedByCity } from '@mckinsey-converge/buildings';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Booking, User, IEngineResponse, BookingStoreState, clearBookingFormData, BookingsService, UsersService, flattenDisplayOffices, BuildingCity, Building } from '@mckinsey-converge/data-common';\nimport { UserStoreState } from '@mckinsey-converge/user';\nimport { loadBookingsWithQuery, loadUpcomingBookingsResults, MyBookingsStoreState } from '@mckinsey-converge/bookings';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport {\n mapResultsToViewModels,\n BookingResultsViewModel,\n} from 'src/app/booking/manage-bookings/manage-bookings.viewmodel';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport { BookingDetailsModalComponent } from '../booking-details-modal/booking-details-modal.component';\nimport { BookingPagination } from '@mckinsey-converge/bookings';\nimport { DateNow } from '@mckinsey-converge/date-tz';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { loadRoomsForResults } from '@mckinsey-converge/rooms';\n\nexport type ManageBookingsStoreState = BookingStoreState &\n BuildingStoreState &\n MyBookingsStoreState &\n UserStoreState;\n\n@Component({\n selector: 'app-bookings-listing',\n templateUrl: './bookings-listing.component.html',\n styleUrls: ['./bookings-listing.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BookingsListingComponent extends BaseDirective implements OnInit, OnChanges {\n @Input() public config: any;\n @Input() public buildings: BehaviorSubject[]>;\n @Input() public searchBookingBy: string;\n @Input() public selectedHost: string;\n @Input() public activeTab: string;\n\n public bookingResults = new BehaviorSubject>(\n LoadingModel.empty()\n );\n public bookings: BookingResultsViewModel[];\n public showBookings = false;\n public reloading = false;\n public TopBarHeaderMode = TopBarHeaderMode;\n public mobile: boolean = false;\n\n /** Current User */\n public currentUser: User;\n master_booking: BookingResultsViewModel;\n allBookings: any[];\n\n public pagination: BookingPagination = {\n currentPage: 1,\n totalRecords: 0,\n pageLimit: 10,\n };\n bookingPerPage: any[] = [];\n filteredByHost: any[] = [];\n\n public get lastPage() {\n return this.pages.total === this.pagination.currentPage;\n }\n\n public get pages() {\n const p = this.pagination;\n const total = Math.ceil(p.totalRecords / p.pageLimit) ;\n const group = Math.ceil(p.currentPage / 5);\n const startPosition = Math.max(\n 1,\n Math.min(group > 1 ? (group - 1) * (p.pageLimit + 1) : 1, total - 4)\n );\n let pages = [];\n for (let x = startPosition; x <= Math.min(startPosition + 4, total); x++) {\n pages.push(x);\n }\n if (!pages.length) {\n pages.push(1);\n }\n const maxed = () => {\n if (total <= 5 || p.currentPage >= total) {\n return false;\n }\n return true;\n };\n const mined = () => {\n if (total <= 5 || p.currentPage < 6) {\n return false;\n }\n return true;\n };\n const start = p.currentPage > 5;\n const end = !(p.currentPage >= total);\n return {\n total,\n pages,\n min: mined(),\n max: maxed(),\n start,\n end,\n };\n }\n\n constructor(\n private store: Store,\n private _route: ActivatedRoute,\n private _router: Router,\n private dialog: MatDialog,\n private _bookings: BookingsService,\n private _zone: NgZone,\n private cdRef: ChangeDetectorRef\n ) {\n super();\n }\n\n public ngOnInit(): void {\n const breakpoint = 450;\n const selector = this.config.selector;\n const target = this.config.type;\n\n this.subscription(\n 'currentUser',\n this.store\n .select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n \n })\n );\n\n this.subscription('buildings', this.store.pipe(\n select(buildingStateSelector),\n select(selectBuildingOptionsGroupedByCity),\n map((grouped: Map) => {\n return flattenDisplayOffices(grouped);\n }),\n distinctUntilChanged()\n ).subscribe(next => {\n // this.buildings.next(next);\n if(this.activeTab === this.config.type) {\n this.store.dispatch(\n loadBookingsWithQuery({\n email: this.currentUser.email,\n from: DateNow(new Date()).ms,\n target,\n offset: 0,\n })\n );\n }\n\n // start the timer at the top of the minute;\n const offset = DateNow(new Date()).startOfValue('minute').addValue({ minutes: 1 }).ms - DateNow(new Date()).ms;\n // fetch it on one minute interval now that there is room data.\n setTimeout(() => {\n this.refresh(target);\n this._zone.runOutsideAngular(() => {\n this.interval('refreshBookings', () => this.refresh(target, true), 60 * 1000);\n });\n\n }, offset + 5000);\n\n \n }));\n\n\n\n const sort_asc = (a, b) => a.date - b.date;\n const sort_desc = (a, b) => b.date - a.date;\n\n this.subscription(\n 'bookingResults',\n this.store.pipe(select(selector)).subscribe((next) => {\n this.bookingResults.next(next);\n if (!next.isEmpty() && Array.isArray(next?.success?.results)) {\n let results = [...next?.success?.results].sort(\n this.config.reverse_sort ? sort_desc : sort_asc\n );\n this.showBookings = !!results.length;\n this.reloading = false;\n // save all bookings to reuse later \n this.allBookings = results;\n \n /** Filter all booings of active tab by selected host if any */\n this.filterBySelectedHost(true);\n\n } else {\n this.showBookings = false;\n this.reloading = false;\n this.bookings = [];\n this.pagination.totalRecords = 0;\n this.cdRef.detectChanges();\n }\n })\n );\n\n if (window) {\n this.mobile = window.innerWidth < breakpoint;\n\n }\n\n fromEvent(window, 'resize')\n .pipe(throttleTime(500))\n .pipe(\n tap({\n next: (val) => {\n const target = val.target as Window;\n this.mobile = target.innerWidth < breakpoint;\n },\n })\n ).subscribe();\n \n this.timeout('query', () =>\n this.subscription(\n 'route.query',\n this._route.queryParamMap.subscribe((params) => {\n if (params.has('page')) this.setPage(+params.get('page'), false);\n })\n )\n );\n }\n\n //For each result from results, it find its level and building from the lists and map with BookingResultsViewModel but filter all master from list.\n public getViewModel = (results) => mapResultsToViewModels(results).filter(b => !(b.booking.is_recurrent && b.booking.recurrence_type === 'master'));\n\n\n public splitArrayIntoSubarrays(originalArray, subarrayLength) {\n var newArray = [];\n for (var i = 0; i < originalArray.length; i += subarrayLength) {\n newArray.push(originalArray.slice(i, i + subarrayLength));\n }\n return newArray;\n }\n\n\n public ngOnChanges($change: any) {\n \n if ($change?.buildings?.currentValue !== $change?.buildings?.previousValue || $change?.activeTab?.currentValue !== $change?.activeTab?.previousValue) {\n this.refresh(this.config.type);\n }\n if ($change?.selectedHost?.currentValue !== $change?.selectedHost?.previousValue) {\n this.filterBySelectedHost(true);\n } else\n if ($change?.searchBookingBy?.currentValue !== $change?.searchBookingBy?.previousValue) {\n this.filterBySelectedHost(false);\n }\n }\n\n\n\n public filterBySelectedHost(isHostChanged: boolean) {\n\n // Converting search value to lower case for case-insensitive comparison\n const searchHost = this.selectedHost.toLowerCase().trim();\n // this.filteredByHost = [];\n\n if(this.allBookings) {\n\n if(searchHost) {\n if(isHostChanged) {\n // Combining event list and space arrays into one arrya for searchig \n const allItems = [...this.allBookings];\n // Filtering the combine array to find matching host email \n this.filteredByHost = allItems.filter( (item: any ) => \n this.isIncludes(item?.host, 'email', searchHost) ||\n this.isIncludes(item?.organiser, 'email', searchHost)\n );\n }\n else {\n this.filteredByHost = [...this.filteredByHost];\n }\n \n }\n else {\n this.filteredByHost = [...this.allBookings];\n }\n\n //Now send filtered booking by host to filter further by search input given in the field\n this.filterBookingsBySearchValue([...this.filteredByHost]);\n\n \n }\n }\n\n \n public isIncludes = (item: any, field: string, searchVaue: string) => (item && item[field] && item[field].toLowerCase().includes(searchVaue));\n\n public filterBookingsBySearchValue(filteredByHost) {\n\n // Converting search value to lower case for case-insensitive comparison\n const searchValue = this.searchBookingBy.toLowerCase().trim();\n let filteredItems = [];\n\n if(filteredByHost) {\n\n if(searchValue) {\n // Combining event list and space arrays into one arrya for searchig \n const allItems = [...filteredByHost];\n // Filtering the combine array to find matching room or booking \n filteredItems = allItems.filter( (item: any ) => \n this.isIncludes(item, 'title', searchValue) ||\n this.isIncludes(item?.creator, 'name', searchValue) ||\n this.isIncludes(item?.organiser, 'name', searchValue) ||\n this.isIncludes(item, 'local_room_name', searchValue) || // search with room name \n this.isIncludes(item, 'simple_name', searchValue) || \n (item?.attendees && !!item?.attendees.filter(el => el.name.toLowerCase().includes(searchValue)).length ) \n );\n }\n else {\n filteredItems = [...filteredByHost];\n }\n\n const filteredBookings = this.getViewModel(filteredItems);\n \n this.pagination.totalRecords = filteredBookings.length;\n this.pagination.currentPage = !this.lastPage ? 1 : this.pagination.currentPage;\n this.bookingPerPage = this.splitArrayIntoSubarrays(filteredBookings, this.pagination.pageLimit);\n this.bookings = this.bookingPerPage[this.pagination.currentPage-1];\n this.cdRef.detectChanges();\n }\n \n }\n\n \n\n\n\n\n public showResults() {\n // Don't show the loading state while we're reloading with Building details.\n return this.reloading; // || !this.bookingResults?.value?.isLoading;\n }\n\n public getBuilding(booking: Booking) {\n if (this.buildings && booking.building_zone) {\n return this.buildings.value.find((b) => booking.building_zone === b.value)?.meta.building;\n }\n return null;\n }\n\n // From the Manage Bookings page\n public async viewBooking(viewModel: BookingResultsViewModel) {\n\n if(viewModel.booking.is_recurrent) {\n let booking = this.allBookings.find(bkn => bkn.id === viewModel.booking.recurrence_master_id && bkn.recurrence_type === 'master1') ;\n if (!booking) {\n booking = await this._bookings.show(viewModel.booking.recurrence_master_id);\n }\n this.master_booking = mapResultsToViewModels([booking])[0];\n }\n this.cdRef.detectChanges();\n\n // real booking.room here.\n const dialogRefX = this.dialog.open(BookingDetailsModalComponent, {\n panelClass: 'mck-modal-wide-manage-booking',\n data: {\n booking: viewModel.booking,\n refresh: () => {\n this.refresh('all');\n },\n\n building: this.getBuilding(viewModel.booking),\n master_booking: this.master_booking?.booking || null,\n },\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n\n dialogRefX.afterClosed().subscribe((flag) => {\n flag !== 'DoNotClearActiveForm' && this.clearFormAndResultData();\n this.cdRef.detectChanges();\n // this.timeout('refreshBookings', () => this.refresh('all'), 1000);\n // this.timeout('refreshBookings', () => this.refresh('all'), 5000);\n });\n }\n\n public clearFormAndResultData() {\n this.store.dispatch(clearBookingFormData());\n this.store.dispatch(loadRoomsForResults.clear());\n this.cdRef.detectChanges();\n }\n\n public readonly prevPage = () => this.setPage(this.pagination.currentPage - 1);\n public readonly nextPage = () => this.setPage(this.pagination.currentPage + 1);\n public readonly prevGroup = () => this.setPage(this.pages.pages.length);\n public readonly nextGroup = () => this.setPage(this.pages.pages.length + 1);\n public readonly gotoPage = (page: number) => this.setPage(page);\n\n public setPage(page_idx: number, route: boolean = true) {\n if (!this.pages.total) return;\n const page = Math.max(1, Math.min(page_idx, this.pages.total));\n if (route) this._router.navigate([], { relativeTo: this._route, queryParams: { page } });\n this.pagination.currentPage = page;\n this.bookings = this.bookingPerPage[this.pagination.currentPage-1];\n this.cdRef.detectChanges();\n // this.refresh();\n }\n\n public refresh(target: string = this.activeTab, dontShowReloading = false) {\n if (!this.currentUser?.email) {\n return;\n }\n\n \n const offset = 0 ; //(this.pagination.currentPage - 1) * this.pagination.pageLimit;\n // fetch it on one minute interval now that there is room data.\n if(this.activeTab === this.config.type) {\n\n this.store.dispatch(\n loadBookingsWithQuery({\n email: this.currentUser.email,\n from: DateNow(new Date()).ms,\n target:this.activeTab,\n offset,\n })\n );\n this.reloading = !dontShowReloading;\n this.cdRef.detectChanges();\n }\n \n\n \n\n \n }\n\n identify(index, item) {\n return item.booking.id;\n }\n}\n","
\n \n \n
\n
\n \n \n \n \n \n \n \n \n
\n
\n
\n \n

You have no upcoming bookings

\n
\n
\n \n

End of list. Past meetings are saved for up to 48 hours.

\n
\n
\n \n

End of list. Cancelled meetings are saved for up to 48 hours.

\n
\n
\n
\n \n \n \n \n
\n
\n
\n
    \n
  • \n
  • 1
  • \n
  • ...
  • \n
  • \n {{p}}\n
  • \n
  • ...
  • \n
  • \n {{pages.total}}\n
  • \n
  • \n
\n
\n","import { Component, Inject, ViewEncapsulation } from '@angular/core';\nimport {\n dateBuildingFormatString,\n startEndTimeWithZoneFormatString,\n} from '@mckinsey-converge/base';\nimport { Booking, Building, RecurrencePeriod } from '@mckinsey-converge/data-common';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { BaseClass } from '@mckinsey-converge/base';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\n\ninterface data {\n booking: Booking;\n building: Building;\n callback: Function;\n master_booking?: Booking;\n hasLoaderUrl?: boolean;\n refresh?: Function;\n\t\tseries?:{};\n}\n\n@Component({\n selector: 'app-cancel-booking-modal',\n template: `\n \n
\n \n
\n
\n \n
{{ subtitle }}
\n
\n
\n

{{ data.booking.title }}

\n\n \n

\n Daily from \n \n

\n weekly on {{ data?.master_booking?.recurrence_days[0] | titlecase }}\n

\n

from

\n \n Monthly on \n\n {{ data?.master_booking?.dateString }} until\n {{ data?.master_booking?.endDateString }}\n

\n \n \n Specific Dates: \n
\n
\n
Date
\n
\n
\n {{ occurrence.dateTz.formatDate('dd MMM yyyy') }}\n
\n
\n
\n
\n
\n
\n\n

{{ dateString }}

\n

{{ timeString }}

\n

{{ buildingAddress }}

\n

{{ data.booking.room.local_room_name }}

\n \n
\n \n
\n
\n `,\n styleUrls: ['./cancel-booking-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class CancelBookingModalComponent extends BaseClass {\n public title: string;\n public roomName: string;\n public buildingAddress: string;\n public dateString: string;\n public timeString: string;\n public canceled = false;\n private _specific_dates = false;\n private recurrence_period: RecurrencePeriod;\n public occurrence_details: { start_epoch: number; dateTz: DateTZ; id: string }[];\n private recurrence_interval: number;\n\n public get subtitle() {\n return this.canceled\n ? `${this.title} booking cancelled`\n : this.data?.series\n ? 'Are you sure you want to cancel this recurring series?'\n : 'Are you sure you want to cancel this booking?';\n }\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: data,\n private dialogRef: MatDialogRef\n ) {\n super();\n this.dateString = dateBuildingFormatString(this.data.booking.startDateTz, true);\n this.timeString = startEndTimeWithZoneFormatString(this.data.booking.startDateTz, this.data.booking.displayEndDateTz);\n this.title = this.data.booking.title;\n this.buildingAddress = this.data.booking.room.street_and_city;\n\n\n\t\t\t\tif(this.data?.master_booking !== null) {\n\n\t\t\t\t\tthis.recurrence_period = this.data?.master_booking?.recurrence_period;\n\t\t\t\t\tthis.recurrence_interval = this.data?.master_booking?.recurrence_interval;\n\n\t\t\t\t\tthis.occurrence_details = this.data?.master_booking?.occurrence_details &&\n\t\t\t\t\t\tthis.data?.master_booking?.occurrence_details\n\t\t\t\t\t\t\t.filter((ocurrence) => ocurrence.id !== this.data?.master_booking?.id)\n\t\t\t\t\t\t\t.map((ocurrence) => ({\n\t\t\t\t\t\t\t\t...ocurrence,\n\t\t\t\t\t\t\t\tstart_epoch: ocurrence.start_epoch * 1000,\n\t\t\t\t\t\t\t\tdateTz: new DateTZ({\n\t\t\t\t\t\t\t\t\tdate: ocurrence.start_epoch * 1000,\n\t\t\t\t\t\t\t\t\tis_local_tz: false,\n\t\t\t\t\t\t\t\t\tbuilding_tz: this.data.master_booking.timezone,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t}));\n\t\t\t\t}\n\n }\n\n public closeModal() {\n this.dialogRef.close();\n }\n\n public cancelBooking() {\n this.canceled = true;\n this.data.callback();\n this.timeout('closeModal', () => this.closeModal(), 2000);\n }\n\n public set specific_dates(val: boolean) {\n this._specific_dates = val;\n }\n\n public get specific_dates(): boolean {\n return this._specific_dates;\n }\n\n public toggleSpecificDates() {\n this.specific_dates = !this.specific_dates;\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n OnInit\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport {\n Booking,\n Building,\n CateringOrder,\n Space,\n bookingStatusDetails,\n ApplicationService,\n CateringCategory,\n BookingsService,\n DataForConfirmation,\n getLastDateFromList\n} from '@mckinsey-converge/data-common';\nimport {\n DialogEvent,\n HashMap,\n shorterLocalDateFormatString\n} from '@mckinsey-converge/base';\nimport {\n BaseDirective,\n dateBuildingFormatString,\n startEndTimeWithZoneFormatString,\n humaniseDuration,\n toTitleCase\n} from '@mckinsey-converge/base';\nimport { TopBarHeaderMode } from 'src/app/components/topbar-header/topbar-header.component';\nimport {\n CateringDetailsModalComponent,\n CateringDetailsModalData\n} from '@mckinsey-converge/legacy-overlays';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\nexport interface BookingFlowEvent {\n /** Type of flow event */\n type: 'previous' | 'next' | 'reset' | 'close' | 'error';\n /** Step which the event was emitted from */\n step: string;\n /** Additional metadata for the event */\n metadata?: HashMap;\n}\n\n@Component({\n selector: 'booking-catering',\n templateUrl: './catering.component.html',\n styleUrls: ['./catering.component.scss']\n})\nexport class BookingCateringComponent extends BaseDirective implements OnInit {\n /** Form fields for the booking */\n @Input() public form: FormGroup;\n /** Emitter for flow update events */\n @Output() public event = new EventEmitter();\n @Input() public booking: Booking;\n @Input() public isOccurence: boolean;\n /** Emitter for open catering */\n @Output() public showCatering = new EventEmitter();\n dataForConfirmation: DataForConfirmation;\n isEditSeries: boolean = false;\n\n constructor(\n private _dialog: MatDialog,\n public _service: ApplicationService,\n public _bookings: BookingsService,\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.updateConfimatinModal();\n }\n\n /** Active order to display details for */\n public active_order: CateringOrder;\n public TopBarHeaderMode = TopBarHeaderMode;\n public confirmed: boolean = false;\n public next_disabled: boolean = true;\n\n public loading: boolean = false;\n\n\n public get building(): Building[] {\n return this.booking.room.building;\n };\n\n /** Field for storing catering details */\n public get catering_field() {\n return this.form && this.form.controls.catering ? this.form.controls.catering : null;\n }\n\n /** List of spaces selected for the booking */\n public get space_list(): Space[] {\n return this.form && this.form?.controls?.space_list?.value.length\n ? this.form.controls.space_list.value\n : [];\n }\n\n /** Date of the booking */\n public get dateTz(): number {\n return this.form && this.form.controls.dateTz\n ? this.form.controls.dateTz.value\n : DateNow(new Date()).startOfValue('minute');\n }\n\n /** Duration of the booking */\n public get duration(): number {\n return this.form && this.form.controls.duration ? this.form.controls.duration.value : 60;\n }\n\n /** Whether booking is all day */\n public get all_day(): boolean {\n return this.form && this.form.controls.all_day && this.form.controls.all_day.value;\n }\n\n\n public get type() {\n return toTitleCase(this.booking?.class);\n }\n\n public get dateString() {\n return dateBuildingFormatString(this.booking.startDateTz);\n }\n\n public get timeString() {\n return startEndTimeWithZoneFormatString(this.booking.startDateTz, this.booking?.displayEndDateTz);\n }\n\n public get durationString() {\n return humaniseDuration(this.booking?.duration);\n }\n\n public get status() {\n return bookingStatusDetails(this.booking);\n }\n\n /** Create a new catering order */\n public newOrder(): void {\n const order = new CateringOrder({ booking_timezone: this.booking?.timezone });\n this.active_order = order;\n }\n\n // Combine the same items for the same timeslot into the same order item\n public combineItems = (newItems: CateringCategory[], oldItems: CateringCategory[]) => {\n // Group and Sum the items in an Item ID keyed object\n const itemsObj = {};\n oldItems.forEach((i) => {\n if (itemsObj[i.id]) {\n itemsObj[i.id].setAmount(itemsObj[i.id].amount + i.amount);\n } else {\n itemsObj[i.id] = i;\n }\n });\n newItems.forEach((i) => {\n if (itemsObj[i.id]) {\n itemsObj[i.id].setAmount(itemsObj[i.id].amount + i.amount);\n } else {\n itemsObj[i.id] = i;\n }\n })\n // Convert the object to an array\n const items = [];\n for (const item in itemsObj) {\n items.push(itemsObj[item]);\n }\n // return the items consolidated by item ID.\n return items;\n }\n\n /** Handle changes to catering order */\n public handleOrderEvent(order: CateringOrder) {\n /* istanbul ignore else */\n if (order) {\n this.next_disabled = false;\n const orders = this.form.controls.catering.value;\n // When the order edit button is clicked we are editing an existing order\n const index = orders.findIndex((an_order) => {\n return order.id === an_order.id\n });\n\n // If editing an existing order row it will have an index, if not create a new row\n if (index < 0) {\n // Add the new order\n orders.push(order);\n } else {\n // Replace the existing order with the edited order\n orders.splice(index, 1, order);\n }\n\n // Setup the \"reduced\" data containers\n const reduceItems = {};\n const reduceOrders = {};\n orders.forEach((o) => {\n if (reduceItems[o.delivery_time]) {\n // An order for this timeslot already exists, combine the same items to dedupe rows\n reduceItems[o.delivery_time] = this.combineItems(o.items, reduceItems[o.delivery_time]);\n } else {\n // Since this is a new timeslot, use the existing items\n reduceItems[o.delivery_time] = o.items;\n // Copy the order and clear its item contents, placeholder for the updated items\n reduceOrders[o.delivery_time] = o;\n reduceOrders[o.delivery_time].items = [];\n }\n });\n\n // Add the reduced items to the reduced orders\n let consolidatedOrders = [];\n for (const deliveryTime in reduceOrders) {\n const order = reduceOrders[deliveryTime];\n order.items = reduceItems[deliveryTime]\n consolidatedOrders.push(order);\n }\n\n this.form.controls.catering.setValue(consolidatedOrders);\n }\n this.active_order = null;\n }\n\n public closeCallback() {\n // Bail and close the catering component\n this.next_disabled = true;\n this.active_order = null;\n\n // Need to clone to avoid readonly errors\n this.form.controls.catering.setValue(this.booking.catering.map(order => order.clone()));\n this.event.emit();\n }\n\n public closeConfirmation() {\n this.event.emit();\n }\n\n /** Open modal for adding equipment requirements to booking */\n private openCateringDetailsModal() {\n const ref = this._dialog.open(\n CateringDetailsModalComponent,\n {\n maxWidth: '95vw',\n width: '32em',\n data: {\n spaces: this.form.controls.space_list.value,\n notes_field: this.form.controls.notes,\n catering: this.form.controls.catering,\n booking: this.booking\n }\n }\n );\n this.subscription(\n 'modal_events',\n ref.componentInstance.event.subscribe((event: DialogEvent) => {\n // Catering requirements and charge code modal closed event\n /* istanbul ignore else */\n if (event.reason === 'done') {\n // Closed with the reason done\n ref.close();\n\n // Display the loading animation and the Booking Confrimation component\n this.loading = true;\n this.confirmed = true;\n\n this.saveBooking();\n }\n })\n );\n ref.afterClosed().subscribe(() => this.unsub('modal_events'));\n }\n\n public saveBooking() {\n // Clone and append the catering and note data to the booking\n let booking = this.booking.clone();\n booking.catering = this.form.controls.catering.value;\n booking.notes = this.form.controls.notes.value;\n if(booking.notes.length || booking.catering.length) {\n\n const setup = { ...booking.setup };\n setup[booking.space.email] = booking.setup[booking.space.email] || 900;\n booking.setup = setup;\n\n const breakdown = { ...booking.breakdown };\n breakdown[booking.space.email] = booking.breakdown[booking.space.email] || 900;\n booking.breakdown = breakdown;\n }\n\n\n // Save to the API and respond. && !this.isOccurence\n this._bookings.save(booking, booking.is_recurrent ).then(\n (bkn) => {\n this.booking = new Booking({ ...this.booking, ...bkn.toApiJSON() }); \n // Stop the loading animation and show the booking confirmation component.\n this.updateConfimatinModal();\n\n this.loading = false;\n this.confirmed = true;\n this.event.emit(this.form)\n },\n (err) => {\n // Stop the loading animation and return to the catering flow with an error.\n this.loading = false;\n this.confirmed = false;\n this._service.notifyError(\n `Error updating booking.`\n );\n }\n )\n }\n\n public handleOrderListEvent($event: any) {\n const orders = this.form.controls.catering.value;\n // Handle the Previous and Next buttons\n if ($event.type === 'previous') {\n // Bail and close the catering component\n this.next_disabled = true;\n this.active_order = null;\n // Need to clone to avoid readonly errors\n this.form.controls.catering.setValue(this.booking.catering.map(order => order.clone()));\n this.event.emit();\n }\n if ($event.type === 'next') {\n // Move on to the catering details modal\n this.next_disabled = false;\n if (orders.length) {\n this.openCateringDetailsModal();\n } else {\n // Display the loading animation and the Booking Confrimation component\n this.loading = true;\n this.confirmed = true;\n this.saveBooking();\n }\n }\n }\n\n public openCatering() {\n // Start catering from the Booking Confirmation page Add Catering button\n this.confirmed = false;\n this.next_disabled = true;\n this.showCatering.emit();\n }\n\n /**\n * Public method to update the confirmation modal data.\n * This method updates the dataForConfirmation object with the necessary information\n * for displaying the confirmation modal in the application.\n */\n public updateConfimatinModal() {\n\n // Prepare an object with booking details and related information for the confirmation modal\n this.dataForConfirmation = {\n booking: this.booking, // Information about the booking\n status: this.status, // Status of the booking (e.g., confirmed, pending, etc.)\n dateString: this.dateString, // Date of the booking in string format\n endDateString: this.endDateString, // End date of the booking in string format\n timeString: this.timeString, // Time of the booking in string format\n durationString: this.durationString, // Duration of the booking in string format\n type: this.type, // Type of booking (e.g., internal, external, etc.)\n isEditSeries: this.isEditSeries, // Boolean indicating whether it's an edit in a series of events\n // Function to check if there are conflicts with occurrences of the booking\n isConflictWithOccurences: this.isConflictWithOccurences.bind(this),\n // Function to open a modal in case of conflicts with recurring events\n // openRecurrenceConflictsModal: this.openRecurrenceConflictsModal.bind(this)\n }\n }\n\n /**\n * Checks if there are conflicts with the current booking and its occurrences.\n * Calculates the difference between total occurrences and available occurrences\n * to determine if there are conflicts.\n *\n * @returns {Object} An object containing conflict information:\n * - is_conflict: A boolean indicating if there are conflicts (true if conflicts exist, false otherwise).\n * - total_Conflicts: The total number of conflicts (the difference between total occurrences and available occurrences).\n */\n // public isConflictWithOccurences() {\n // const conflicts = this?.booking?.room?.totalOccurrences - this?.booking?.room?.availableOccurrences;\n // return { is_conflict: !!conflicts, total_Conflicts: conflicts };\n // }\n\n public isConflictWithOccurences() {\n let totalConflicts = 0;\n \n this.booking.multi_rooms.forEach(room => {\n totalConflicts += Math.max(room.totalOccurrences - room.availableOccurrences, 0);\n });\n \n\n const result = {\n is_conflict: totalConflicts > 0, \n total_Conflicts: totalConflicts \n };\n return result;\n }\n\n /**\n * Retrieves the end date string for the booking, considering recurrence if applicable.\n * If the booking is recurrent, it calculates the end date based on recurrence starts;\n * otherwise, it uses the booking's start date as the end date.\n *\n * @returns {string} The formatted end date string in a shorter local date format.\n */\n public get endDateString(): string {\n // Determine the array of date-time strings based on recurrence or single start date\n let recurrenceStart: Array= [];\n const { is_recurrent, recurrence_starts, occurrence_details, timezone} = this.booking;\n if(is_recurrent && recurrence_starts.length) {\n recurrenceStart = this.booking.recurrence_starts;\n }\n else if(is_recurrent && !recurrence_starts.length && occurrence_details.length) {\n this.booking.occurrence_details.forEach(element => {\n recurrenceStart.push(new DateTZ({ date: element.start_epoch * 1000, is_local_tz: false, building_tz: timezone}));\n });\n recurrenceStart = recurrenceStart.sort((d1: DateTZ, d2: DateTZ) => d1.ms - d2.ms);\n }\n else {\n recurrenceStart = [this.booking.startDateTz];\n }\n\n\n // const endDtz = (this.booking.is_recurrent && this.booking.recurrence_starts.length) ? this.booking.recurrence_starts : [this.booking.startDateTz]\n // Get the last date from the list of date-time strings and format it in a shorter local date format\n return shorterLocalDateFormatString(getLastDateFromList(recurrenceStart));\n }\n\n}\n","
\n
\n \n \n
\n
\n
\n
\n \n \n \n
\n \n \n \n
\n
\n \n
\n
\n
","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { FormControl } from '@angular/forms';\n\nimport { CateringCategory } from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'a-category-display',\n templateUrl: './category.component.html',\n styleUrls: ['./category.component.scss']\n})\nexport class CateringMenuCategoryComponent {\n /** Category to display details for */\n @Input() public category: CateringCategory;\n /** Form control for the list of order items */\n @Input() public items: FormControl;\n /** Currency symbol for the active space */\n @Input() public symbol: string;\n /** Whether item should be disabled if not available anytime */\n @Input() public disabled: boolean;\n /** Whether to show smaller version of component */\n @Input() public compact: boolean;\n /** Emitter for close events */\n @Output() public close = new EventEmitter();\n}\n","
\n
\n \n
{{ category?.name }}
\n
\n
\n\n
\n \n
\n
\n\n
\n
\n \n
\n
\n Category contains no available items\n
\n
\n
\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport {\n FormControl,\n FormGroup\n} from '@angular/forms';\nimport { BehaviorSubject } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport {\n Building,\n CateringCategory,\n CateringItem,\n CateringMenuService,\n CateringOrder,\n OrganisationService,\n Space\n} from '@mckinsey-converge/data-common';\nimport {\n DialogEvent,\n Identity\n} from '@mckinsey-converge/base';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n BookingCateringConfirmModalComponent,\n CateringConfirmModalData\n} from '@mckinsey-converge/legacy-overlays';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\ninterface StartEndResponse {\n timezone: string,\n start: DateTZ;\n end: DateTZ\n}\n\n@Component({\n selector: 'a-catering-order-details',\n templateUrl: './order-details.component.html',\n styleUrls: ['./order-details.component.scss']\n})\nexport class BookingCateringOrderDetailsComponent extends BaseDirective implements OnInit {\n /** Catering order to edit details of */\n @Input() public order: CateringOrder;\n /** Booking date */\n @Input() public dateTz: DateTZ;\n /** Booking duration */\n @Input() public duration: number;\n /** Booking duration */\n @Input() public space_list: Space[];\n /** Whether booking is all day */\n @Input() public all_day: boolean;\n /** Whether top header details should be shown */\n @Input() public hide_details: boolean;\n /** Whether to show smaller version of component */\n @Input() public compact: boolean;\n /** Emitter for changes to the catering order */\n @Output() public event = new EventEmitter();\n /** Form controls for order */\n public form: FormGroup;\n /** List of available catering item categories */\n public category_list: CateringCategory[] = [];\n /** Active category to display details for */\n public active_category: CateringCategory;\n /** List of available times for delivering catering */\n public available_times: Identity[] = [];\n /** Whether the menu is loading */\n public loading: boolean;\n /** Whether the search input should be shown */\n public show_search: boolean;\n /** Current search string for filtering */\n public readonly search$ = new BehaviorSubject('');\n /** List of menu items that match the search string */\n public matched_items: CateringItem[] = [];\n\n @ViewChild('input') private _input_el: ElementRef;\n\n /** Whether user is able to order from the currently selected space */\n public get can_order(): boolean {\n return (\n (this.active_building.has_catering || this.category_list.length) &&\n (!this.within_restricted_time || this.has_available_items) &&\n !this.out_of_hours\n );\n }\n\n /** Building associated with the selected space */\n public get active_building(): Building {\n const form_controls = (this.form || { controls: { location_id: { value: '' } } }).controls;\n const space: Space =\n this.space_list.find((space) => space.email == form_controls.location_id.value) ||\n ({ level: {} } as any);\n return (\n this._org.buildings.find((bld) => space.level?.building_id === bld.id) ||\n ({ catering_restricted_from: 0 } as any)\n );\n }\n\n /** Currency code for the active building */\n public get symbol(): string {\n return this.active_building.currency || 'USD';\n }\n\n /** Number of items in the order */\n public get item_count(): number {\n return this.form\n ? this.form.controls.items.value.reduce((total, item) => total + item.amount, 0)\n : 0;\n }\n\n /* istanbul ignore next */\n /** Whether booking time is outside of catering hours */\n public get out_of_hours(): boolean {\n return this.form.controls.delivery_time.value < 0;\n }\n\n /** Whether booking is with the restricted ordering period */\n public get within_restricted_time(): boolean {\n const expired = DateNow(new Date()).addValue({ hours: this.active_building.catering_restricted_from }).startOfValue('minute');\n return this.dateTz.isBeforeDate(expired);\n }\n\n /** Whether items are available for order at anytime */\n public get has_available_items(): boolean {\n return this.category_list.reduce(\n (available, category) => available || category.can_order_anytime,\n false\n );\n }\n\n constructor(\n private _menu: CateringMenuService,\n private _org: OrganisationService,\n private _dialog: MatDialog\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.generateAvailableTimes();\n this.subscription('search', this.search$.pipe(map((str) => {\n const search = str.toLowerCase();\n const items = [];\n for (const category of this.category_list) {\n if (category.items) {\n for (const group of category.items) {\n if ((group as any).items) {\n if (\n (group as any).package &&\n (group.name.toLowerCase().includes(search) ||\n (group as any).items.find((item) =>\n item.name.toLowerCase().includes(search)\n ))\n ) {\n items.push(group);\n } else {\n for (const item of (group as any).items) {\n if (item.name.toLowerCase().includes(search)) {\n items.push(item);\n }\n }\n }\n } else {\n if (group.name.toLowerCase().includes(search)) {\n items.push(group);\n }\n }\n }\n }\n }\n return items;\n })).subscribe((items) => this.matched_items = items));\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n /* istanbul ignore else */\n if (changes.date || changes.duration) {\n this.generateAvailableTimes();\n /* istanbul ignore else */\n if (\n this.form &&\n !this.available_times.find(\n (time) => time.id === this.form.controls.delivery_time.value\n )\n ) {\n this.form.controls.delivery_time.setValue(this.available_times[0].id);\n }\n }\n /* istanbul ignore else */\n if (changes.space_list) {\n /* istanbul ignore else */\n if (this.form && this.space_list && !this.form.controls.location_id.value) {\n this.form.controls.location_id.setValue(this.space_list[0].email);\n }\n }\n /* istanbul ignore else */\n if (changes.order && this.order) {\n this.initForm();\n }\n }\n\n public focusSearch() {\n if (this._input_el && this.show_search) {\n this._input_el.nativeElement.focus();\n }\n }\n\n public initForm() {\n this.form = new FormGroup({\n id: new FormControl(this.order.id),\n booking_date: new FormControl(\n this.all_day ? this.dateTz.startOfValue('day').ms : this.dateTz.ms\n ),\n location_id: new FormControl(this.order.location_id || this.space_list[0]?.email),\n delivery_time: new FormControl(this.order.delivery_time || this.available_times[0].id),\n items: new FormControl(this.order.items.map((item) => new CateringItem(item)))\n });\n this.subscription(\n 'space_change',\n this.form.controls.location_id.valueChanges.subscribe((space) => {\n this.generateAvailableTimes();\n if (\n !this.available_times.find(\n (time) => time.id === this.form.controls.delivery_time.value\n )\n ) {\n this.form.controls.delivery_time.setValue(this.available_times[0].id);\n }\n this.form.controls.items.setValue([]);\n this.loadMenu();\n })\n );\n this.loadMenu();\n this.generateAvailableTimes();\n if (\n this.form &&\n !this.available_times.find((time) => time.id === this.form.controls.delivery_time.value)\n ) {\n this.form.controls.delivery_time.setValue(this.available_times[0].id);\n }\n }\n\n public confirmOrder() {\n const ref = this._dialog.open(BookingCateringConfirmModalComponent, {\n maxWidth: '95vw',\n data: {\n all_day: this.all_day,\n dateTz: this.dateTz,\n form: this.form\n }\n });\n this.subscription(\n 'confirm_event',\n ref.componentInstance.event.subscribe((event: DialogEvent) => {\n /* istanbul ignore else */\n if (event.reason === 'done') {\n const order = new CateringOrder({ ...this.order, ...this.form.value });\n // order is emited but who is receiving?\n this.event.emit(order);\n ref.close();\n }\n })\n );\n ref.afterClosed().subscribe(() => {\n this.unsub('confirm_event');\n });\n }\n\n private loadMenu() {\n const space = this.space_list.find(\n (space) => space.email === this.form.controls.location_id.value\n );\n\n this.loading = true;\n this._menu\n .query({ zone_id: this._org.buildings.find((bld) => space?.zones.includes(bld.id))?.id })\n .then(\n (list) => {\n this.loading = false;\n this.category_list = list.map((i) => new CateringCategory(i))\n .filter(c => !c.out_of_stock);\n },\n () => (this.loading = false)\n );\n }\n\n /** Generate a list of available delivery times for the given booking time */\n private generateAvailableTimes() {\n let { timezone, start, end } = this.generateStartAndEndTimes();\n start = start.setValue({ minute: Math.ceil(start.minutes / 5) * 5 });\n // will be different from staff in these commonly named methods.\n const start_date = this.dateTz;\n this.available_times = [];\n while (start.isBeforeDate(end)) {\n this.available_times.push({\n id: Math.abs(start_date.dateDiff(start, 'minutes')),\n name: start.formatDate('h:mma').toLocaleLowerCase(),\n });\n start = start.addValue({ minutes: 5 });\n }\n /* istanbul ignore else */\n if (this.available_times.length === 0) {\n this.available_times.push({ id: -1, name: 'Out of hours' });\n }\n }\n\n private generateStartAndEndTimes(): StartEndResponse {\n const now = DateNow(new Date())\n let timezone = now.local_tz;\n const space_email = this.form ? this.form.controls.location_id.value : null;\n let catering_hours = { start: 7, end: 20 };\n let building_time = this.dateTz.startOfValue('day');\n let cat_start_time = building_time.addValue({ hours: catering_hours.start });\n let cat_end_time = building_time.addValue({ hours: catering_hours.end });\n\n if (space_email) {\n // Fetch the Space and Building\n const space = this.space_list.find((space) => space.email === space_email);\n const building = this._org.buildings.find((bld) => space?.zones.includes(bld.id));\n if (building.timezone) {\n // Update to the building timezone if defined.\n timezone = building.timezone;\n building_time = this.dateTz.toZone(timezone).startOfValue('day');\n }\n if (building?.catering_hours) {\n // Update to the building catering hours if defined.\n catering_hours = building?.catering_hours;\n }\n // Update the hours with the currently defined timezone.\n cat_start_time = building_time.addValue({ hours: catering_hours.start });\n cat_end_time = building_time.addValue({ hours: catering_hours.end });\n }\n\n // Start Time of the Booking\n let start = this.dateTz.toZone(timezone);\n let end = this.dateTz.toZone(timezone).addValue({ minutes: this.duration });\n\n // Do the booking start and end time coincide with the catering hours?\n if (start.isBeforeDate(cat_start_time)) {\n // booking start before catering opens'\n if (cat_end_time.isAfterDate(start)) {\n // catering closes after booking starts'\n start = cat_start_time.addValue({});\n } else {\n // were just closed, catering closes before booking start'\n start = cat_end_time.addValue({});\n end = cat_end_time.addValue({});\n return { timezone, start, end };\n }\n } else {\n // booking starts after catering is open'\n if (cat_end_time.isBeforeDate(start)) {\n // were just closed, catering closed before booking start'\n start = cat_end_time.addValue({});\n end = cat_end_time.addValue({});\n return { timezone, start, end };\n }\n }\n\n if (end.isBeforeDate(cat_end_time)) {\n // booking ends before catering closes'\n if (cat_start_time.isAfterDate(end)) {\n // were just closed, catering opens is after booking ends'\n start = cat_start_time.addValue({});\n end = cat_start_time.addValue({});\n return { timezone, start, end };\n }\n } else {\n // booking ends after catering closes'\n // set the booking end to the catering close time.'\n end = cat_end_time.addValue({});\n }\n\n return { timezone, start, end };\n }\n}\n\n","
\n
\n
\n
\n
Deliver to:
\n \n \n \n {{ space.local_name }}\n \n \n \n
\n
\n
At:
\n \n \n \n {{ time.name }}\n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n
\n
\n
\n
\n \n
\n \n
\n
\n \n \n
\n \n
\n
{{ item.name }}
\n \n
\n
\n
\n
\n
\n
\n \n Back\n \n \n Confirm Order({{ item_count || '0' }})\n \n
\n
\n
\n\n
\n
\n \"No\n
\n

\n Catering is not available for this booking.
\n Catering must be ordered within business hours at {{ active_building?.name }}.\n

\n
\n
\n\n
\n
\n
\n \n
\n
\n Loading menu for {{ active_building?.name }}...\n
\n
\n
\n
\n\n \n\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output\n} from '@angular/core';\n\nimport {\n CateringOrder,\n Space,\n SpacesService\n} from '@mckinsey-converge/data-common';\nimport { DateNow } from '@mckinsey-converge/date-tz'\n\n\n@Component({\n selector: 'catering-order-list-item',\n templateUrl: './item.component.html',\n styleUrls: ['./item.component.scss']\n})\nexport class CateringOrderListItemComponent implements OnInit {\n /** Catering order to display */\n @Input() order: CateringOrder;\n /** */\n @Input() public space_list: Space[];\n /** Selected datetime */\n @Input() date: number = DateNow(new Date()).ms;\n /** Emitter for edit events */\n @Output() public edit = new EventEmitter();\n /** Emitter for delete events */\n @Output() public delete = new EventEmitter();\n\n public room: Space;\n\n public ngOnInit(): void {\n this.room = (this.space_list || []).find(space => space.email === this.order.location_id);\n }\n\n public get space_in_booking(): boolean {\n return !!this.room;\n }\n\n /** Space selected for delivery */\n public get local_space_name(): string {\n return this.room?.local_name || '';\n }\n\n /** Delivery time for the order */\n public get delivery_time(): string {\n /* istanbul ignore else */\n if (!this.order) {\n return '';\n }\n\n // R--- there's probably a helper for this calculation on the Catering Order \n return this.order.bookingDateTz.addValue({ minutes: this.order.delivery_time || 0 }).formatDate('h:mma').toLocaleLowerCase();\n }\n\n /** Total cost of the order */\n public get order_cost(): number {\n const items = (this.order || { items: [] }).items as any;\n return items.reduce((amount, item) => amount + item.amount * item.unit_price, 0);\n }\n\n /** Number of items in the order */\n public get item_count(): number {\n const items = (this.order || { items: [] }).items as any;\n return items.reduce((amount, item) => amount + item.amount, 0);\n }\n\n /** Currency symbol for the selected space */\n public get symbol(): string {\n /* istanbul ignore else */\n if (!this.room || !this.room.level) {\n return 'USD';\n }\n\n return this.room?.building?.currency || 'USD';\n }\n\n constructor(private _spaces: SpacesService) {\n }\n}\n","
\n Deliver to {{ local_space_name }} at {{ delivery_time }}\n
\n
\n
\n {{ item_count }}\n { item_count, plural, =1 { item } other { items } }\n
\n
{{ order_cost / 100 | currency: symbol }}
\n
\n
\n \n \n \n \n
\n","import {\n Component,\n EventEmitter,\n Input,\n Output\n} from '@angular/core';\nimport { FormControl } from '@angular/forms';\n\nimport {\n CateringOrder,\n Space\n} from '@mckinsey-converge/data-common';\nimport { BookingFlowEvent } from '../../catering/catering.component';\nimport { DateTZ } from '@mckinsey-converge/date-tz'\n\n\n@Component({\n selector: 'a-catering-order-list',\n templateUrl: './order-list.component.html',\n styleUrls: ['./order-list.component.scss']\n})\nexport class BookingCateringOrderListComponent {\n /** Form field for storing catering orders */\n @Input() public catering: FormControl;\n /** Selected datetime for the booking */\n @Input() public date: number;\n /** */\n @Input() public space_list: Space[];\n /** Whether booking is all day */\n @Input() public all_day: boolean;\n /** Whether booking is all day */\n @Input() public next_disabled: boolean;\n /** Emitter for flow update events */\n @Output() public event = new EventEmitter();\n /** Emiiter for order events */\n @Output() public order = new EventEmitter();\n\n public delete: boolean = false;\n\n /** List of orders in the booking */\n public get orders(): CateringOrder[] {\n /* istanbul ignore else */\n if (!this.catering) {\n return [];\n }\n let orders = [];\n const date_ = new DateTZ({date: this.date})\n this.catering.value.forEach(\n order => {\n const newOrder = order;\n newOrder.booking_date = this.all_day\n ? date_.startOfValue('day').ms\n : this.date;\n orders.push(newOrder);\n }\n \n );\n return orders;\n }\n\n /** Emit event for a new catering order */\n public newOrder() {\n this.order.emit();\n }\n\n /** Emit event for editing existing order */\n public editOrder(order: CateringOrder) {\n this.order.emit(order);\n }\n\n /** Remove order from the list */\n public deleteOrder(order: CateringOrder) {\n const orders = this.orders;\n const index = orders.findIndex(an_order => order.id === an_order.id);\n /* istanbul ignore else */\n if (index >= 0) {\n orders.splice(index, 1);\n this.catering.setValue(orders);\n this.delete = true;\n }\n }\n\n /**\n * Proceed to the next step in the space booking flow\n */\n public next(): void {\n // Open the confirmation modal\n this.event.emit({ type: 'next', step: 'catering' });\n }\n\n /** Move flow to previous step */\n public previous(): void {\n this.event.emit({ type: 'previous', step: 'catering' });\n }\n}\n","
\n
\n

Catering Orders

\n
\n
\n \n
\n \n
\n \n
\n
\n
\n
\n \n Back\n \n \n Next\n \n
\n
\n
\n\n
\n
\n \n
\n
No catering orders
\n \n
\n
\n","import {\n Component,\n Input,\n} from '@angular/core';\nimport {\n BaseDirective,\n} from '@mckinsey-converge/base';\nimport {\n Booking,\n} from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'catering-order-table',\n template: `\n
\n \n \n \n \n \n \n \n \n \n \n \n
\n Delivery\n Charge CodeOrder
\n {{formatDeliveryTime(order)}}\n \n {{order?.charge_code}} \n \n {{listItems(order)}}\n
\n
\n `,\n styleUrls: ['./order-table.component.scss']\n})\nexport class OrderTableComponent extends BaseDirective {\n /** The theme to use **/\n @Input() public booking: Booking;\n\n public listItems(order) {\n return order.items.map(i => `${i.name}${i.amount > 1 ? ` (${i.amount})` : ''}`).join(', ');\n }\n\n public formatDeliveryTime(order) {\n return this.booking.startDateTz.addValue({ minutes: order?.delivery_time }).formatDate('h:mma').toLocaleLowerCase();\n }\n\n public oddEvenClass(x) {\n return x % 2 === 0 ? 'odd' : 'even';\n }\n}\n","import {\n Component,\n Directive,\n ElementRef,\n HostListener,\n Input,\n OnInit\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { TopBarHeaderMode } from 'src/app/components/topbar-header/topbar-header.component';\nimport {\n select,\n Store\n} from '@ngrx/store';\nimport {\n BaseDirective,\n} from '@mckinsey-converge/base';\nimport {\n User,\n Booking,\n Building,\n BuildingCity,\n flattenDisplayOffices,\n selectCancelledBookingsResultsFromState,\n selectUpcomingBookingsResultsFromState,\n selectPastBookingsResultsFromState,\n selectBookingByIdResultsFromState,\n UsersService,\n} from '@mckinsey-converge/data-common';\nimport {\n clearBookingByIdResults,\n} from '@mckinsey-converge/bookings';\nimport {\n BehaviorSubject,\n} from 'rxjs';\nimport {\n distinctUntilChanged,\n first,\n map,\n take,\n} from 'rxjs/operators';\nimport { loadBookingsWithQuery } from '@mckinsey-converge/bookings';\nimport { loadOrganisations } from '@mckinsey-converge/organisation';\nimport {\n SelectOption\n} from '@mckinsey-converge/ui';\nimport {\n buildingStateSelector,\n selectBuildingOptionsGroupedByCity\n} from '@mckinsey-converge/buildings';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { BookingDetailsModalComponent } from '../booking-details-modal/booking-details-modal.component';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport { RoomBookingStoreState } from '../room-booking/room-booking.component';\nimport { MatTabChangeEvent } from '@angular/material/tabs';\nimport { SearchBarConfig } from 'libs/legacy-ui/src/lib/cng-search-bar/cng-search-bar.component';\n\n\n@Component({\n selector: 'app-manage-bookings',\n template: `\n
\n
 
\n
\n \n
\n
\n
\n
\n

Manage Bookings

\n\n
\n \n \n
\n \n
\n \n
\n\n\n \n \n
\n \n \n \n
\n
\n\n
\n
\n
\n
\n `,\n styleUrls: ['./manage-bookings.component.scss']\n})\nexport class ManageBookingsComponent extends BaseDirective implements OnInit {\n public TopBarHeaderMode = TopBarHeaderMode;\n public buildings = new BehaviorSubject[]>([]);\n public bookingTypes = [\n {\n type: 'upcoming',\n display: 'Upcoming',\n selector: selectUpcomingBookingsResultsFromState\n },\n {\n type: 'past',\n display: 'Past',\n selector: selectPastBookingsResultsFromState\n },\n {\n type: 'cancelled',\n display: 'Cancelled',\n reverse_sort: true,\n selector: selectCancelledBookingsResultsFromState\n },\n ];\n\n /** Current User */\n public currentUser: User;\n public dialogRef: MatDialogRef;\n public modalInitialized = false;\n public hasLoaderUrl = true;\n\n public activeTab = 'upcoming';\n\n /**\n * Configs for delegate dropdown\n */\n /* if user has no delegates, hide the dropdown */\n public has_delegate: boolean = false; \n /* Holds list of all host/delegates */\n public host_list: User[];\n public hostOptions: { display: string; value: string; meta: { user: User; }; }[];\n public delegateDD: { ddBoxClass: string; options: any; defaultSelected: any; onChangeCallback: any; ddOptionBoxWidth: string };\n public selectedHost: string = '';\n\n public searchBookingBy: any = '';\n\n\n searchBarConfig: SearchBarConfig = {\n placeholder: 'Search by title, room name, attendees...',\n totalFoundItem: 0,\n showSrchWarning: false\n };\n\n constructor(\n private dialog: MatDialog,\n private store: Store,\n private route: ActivatedRoute,\n private _router: Router,\n private _users: UsersService,\n ) {\n super();\n }\n\n public ngOnInit(): void {\n\n // Get the router params\n const bookingId = this.route.snapshot.paramMap.get('id');\n const verb = this.route.snapshot.paramMap.get('verb');\n // Load the buildings data\n this.store.dispatch(loadOrganisations.request());\n this.route.data.subscribe(initData => {\n // Determine if the cancel or booking submodal is loading\n const cancel = verb === 'cancel';\n const addCatering = initData.hasCatering;\n /**\n * When using the catering or cancel URLs,\n * Users reported the modals loading after one another was\n * jarring so, so the UI is masked out until the modal is loaded.\n */\n this.hasLoaderUrl = addCatering || cancel;\n\n this.subscription('buildings', this.store.pipe(\n select(buildingStateSelector),\n select(selectBuildingOptionsGroupedByCity),\n map((grouped: Map) => {\n return flattenDisplayOffices(grouped);\n }),\n distinctUntilChanged()\n ).subscribe(next => {\n this.buildings.next(next);\n if (bookingId && !this.modalInitialized) {\n this.store.dispatch(clearBookingByIdResults())\n this.modalInitialized = true;\n // Once the data loads viewBooking\n this.subscription('bookingResults', this.store.pipe(\n select(selectBookingByIdResultsFromState)\n ).subscribe(next => {\n const booking = next.success ? next.success?.[0] : null;\n if (booking && booking.room) {\n // Modal Madness, close the existing booking details modals.\n if (this.dialogRef) {\n this.dialogRef.close();\n }\n if (this.dialog) {\n this.dialog.closeAll();\n }\n // Call viewBookingFromEmailLink with cancel = true to trigger the cancel modal\n // Call viewBookingFromEmailLink with addCatering = true to trigger the add Catering modal\n this.viewBookingFromEmailLink(booking, cancel, addCatering);\n\n // Remove the \"loader\" url from view\n this.timeout('rewrite url',() => {\n this._router.navigate(['/home','manage'], { replaceUrl: true });\n })\n }\n }));\n }\n }));\n\n })\n\n this.subscription('currentUser', this.store.select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n if (bookingId) {\n // If there's a booking ID loadBookingById\n this.store.dispatch(loadBookingsWithQuery({ 'id': bookingId, 'email': this.currentUser.email, 'target': 'bookingById', 'offset': 0 }));\n }\n }));\n\n\n this._users.initialised.pipe(first((_) => _)).subscribe(() => {\n const user: User = this._users.current;\n\n const delegates = user.delegates.map((del) => {\n const ifUser = this._users.find(del.email);\n return ifUser ? \n new User({ email: ifUser.email, name: ifUser.name, opt_out: del.opt_out }) : \n new User({ email: del.email, name: del.email.split('@')[0].split('_').map((s) => s.charAt(0).toUpperCase() + s.substring(1))\n .join(' ')\n , opt_out: del.opt_out });\n });\n\n if (delegates.length) {\n this.has_delegate = true;\n\n this.host_list = [user].concat(delegates);\n const options = this.host_list.map(h => ({ display: h.name, value: h.email, meta: { user: h } }))\n \n this.hostOptions = [{ display: 'All', value: '', meta: { user: null } }].concat(options);\n this.selectedHost = this.hostOptions[0].value;\n this.delegateDD = {\n ddBoxClass: '',\n options: this.hostOptions,\n defaultSelected: this.hostOptions[0],\n onChangeCallback: this.onChangeDelegates.bind(this),\n ddOptionBoxWidth: '200px'\n }\n }\n \n });\n }\n\n public onChangeDelegates(del) {\n this.selectedHost = del.value;\n }\n\n public getBuilding(booking: Booking) {\n if (this.buildings && booking.building_zone) {\n return this.buildings.value.find(b => booking.building_zone === b.value)?.meta.building;\n }\n return null;\n }\n\n // Only fires from an email link\n public viewBookingFromEmailLink(booking: Booking, cancel: boolean = false, addCatering: boolean = false) {\n if (this.modalInitialized && this.dialogRef) {\n this.dialogRef.close();\n this.dialogRef = null;\n }\n // R--- Verify the email links are working.\n // Open the booking details modal\n if (!this.dialogRef && booking.room) {\n this.dialogRef = this.dialog.open(BookingDetailsModalComponent, {\n panelClass: 'mck-modal-wide-manage-booking',\n data: {\n booking,\n building: this.getBuilding(booking),\n cancel,\n addCatering,\n hasLoaderUrl: this.hasLoaderUrl,\n refresh: () => null\n },\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n // Close up the loader panel\n setTimeout(() => {\n this.hasLoaderUrl = false;\n }, 1000);\n }\n }\n\n public clearPage(event : MatTabChangeEvent) {\n this.activeTab = this.bookingTypes[event.index].type;\n this._router.navigate([], { relativeTo: this.route, queryParams: { page: 1 } });\n }\n\n\n searchBooking(value) {\n this.searchBookingBy = value;\n }\n\n}\n","import {\n Booking\n} from '@mckinsey-converge/data-common';\n\n\nexport class BookingResultsViewModel {\n constructor(public booking: Booking) {\n }\n}\n\n/**\n * For each result from results, we find its level and building from the lists.\n */\nexport const mapResultsToViewModels = (results: Booking[]): BookingResultsViewModel[] => {\n if (!results || !results[0]?.space) {\n return [];\n }\n return results.map((booking: Booking) => {\n return new BookingResultsViewModel(\n booking,\n );\n }); \n}\n\n","import { Component, Inject, OnInit, ViewEncapsulation, ElementRef, Input, ViewChild, ChangeDetectorRef } from '@angular/core';\nimport {\n Space,\n RoomResultsViewModel,\n BookingStoreState,\n User,\n Booking,\n BookingFormData,\n BOOKING_STATUS,\n checkCollisions,\n SpacesService,\n BookingsService,\n BookingStateService,\n clearBookingFormData,\n ApplicationService,\n selectFilteredByIdResults,\n FilteredSpaces,\n selectActiveForm,\n roomFormDataToQuery,\n storeBookingFormData,\n getNextFreeBookingSlot,\n} from '@mckinsey-converge/data-common';\nimport { MAP_OVERLAY_DATA } from '@acaprojects/ngx-interactive-map';\nimport { DateTime } from 'luxon';\nimport { Point, BaseDirective, closestToTimeSlot, HashMap, closestToTimeSlotTz } from '@mckinsey-converge/base';\nimport { BehaviorSubject, Observable, interval, timer, of } from 'rxjs';\nimport { CENTER_POINT, MIN_ZOOM_LEVEL } from 'src/app/map/map.utils';\nimport { Store, select } from '@ngrx/store';\nimport { RoomStoreState, loadByIdResults, loadRoomsForResults } from '@mckinsey-converge/rooms';\nimport { BuildingStoreState } from '@mckinsey-converge/buildings';\nimport { UserStoreState } from '@mckinsey-converge/user';\nexport type RoomResultsState = BookingStoreState &\n RoomStoreState &\n BuildingStoreState &\n UserStoreState;\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport { delay, map, take } from 'rxjs/operators';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n// import { WAITING_TIME } from '../floor-map.utils'; // commented and re declare below due to circular dependency overlay > util > overlay\n\nexport const WAITING_TIME = 15;\n\ninterface SpaceWithReturnData extends Space {\n // callback?: Function,\n room?: RoomResultsViewModel;\n parentComponent?: any;\n roomObs?: Observable\n}\n\ninterface InProgressRoomBookingTimeInfo {\n\tcurrentStatus: string,\n\tactiveBookings: Booking[],\n\ttimeUntilNextBooking: number,\n\ttimeRemainingInActiveBooking : number,\n}\n/**\n * Replaces the built-in {@link MapPinComponent} based on design.\n */\n@Component({\n selector: 'foor-map-overlay',\n template: `\n
\n
\n\n
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n \t\n
\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tThis room is available\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tRoom {{ data.simple_name || data.name || '' }} is available for booking\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tBook now for:\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tUntil next booking\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t Available if you book in the next {{minutesRemaining}}:{{secondsRemaining}} minutes\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\tRefresing availability ...\n\t\t\t\t\t\t\t
\n \t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\tThis room is booked\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t Apologies, this room has been booked recently by another user, please try another one. \n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n
\n
\n
\n `,\n styleUrls: ['./floor-map-overlay.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n})\nexport class FloorMapOverlayComponent extends BaseDirective implements OnInit {\n public selectedRoomId = this.data.id;\n\n public zoom = new BehaviorSubject(MIN_ZOOM_LEVEL);\n public center = new BehaviorSubject(CENTER_POINT);\n\n public date = DateTime.now().valueOf();\n /** Current User */\n public currentUser: User;\n\n public availableUntil = parseInt(this.data?.settings?.available_until.toString()) * 1000;\n public diff: any;\n\n public latestBooking: any[];\n public latestBookingStartTime: string;\n public diffInHours: number;\n public diffInMinutes: number;\n public booking: Booking = new Booking({});\n public loading: boolean;\n public bookingData = new BehaviorSubject(undefined);\n public confirmed: boolean = false;\n /** Whether booking has succeeded */\n public success: boolean;\n public diffInMs: number;\n public futureBookingsForTheDay: HashMap[];\n public untilNextBookingFlag: boolean = false;\n public start_epoch: any;\n public end_epoch_15: any;\n public end_epoch_30: any;\n\n public userSelectedRoom: RoomResultsViewModel;\n\n // @ViewChild('time', { static: false }) public time: ElementRef;\n public isTimerActive: boolean = true;\n minutesRemaining: number | string;\n secondsRemaining: number | string;\n isAvailable: boolean = true;\n intervalCall_15: any;\n intervalCall_1: any ;\n\t\ttimerIndex = 0;\n\t\tpublic currentMin;\n\n constructor(\n @Inject(MAP_OVERLAY_DATA) public data: SpaceWithReturnData,\n private elementRef: ElementRef,\n public store: Store,\n public _spaces: SpacesService,\n public _bookings_service: BookingsService,\n public _booking_state_service: BookingStateService,\n public _service: ApplicationService,\n // public cdRef: ChangeDetectorRef,\n ) {\n super();\n }\n\n public updateRoomData(space) {\n\n\t\t\t\t\t\t// get all booking of selected room\n this.fetchRoomWithBookings(false);\n\n\t\t\t\t\t\t// subscrip selected room detail with all bookings for the day\n this.subscription(\n 'bookingSpaceResults',\n this.store.pipe(select(selectFilteredByIdResults)).subscribe((next) => {\n if (next.success.spaces) {\n\n space.space = next.success.spaces[0];\n this.userSelectedRoom = space;\n\n this.isTimerActive = true;\n\n this.availableUntil = parseInt(this.userSelectedRoom.space.settings.available_until.toString()) * 1000;\n\n\t\t\t\t\t\t\t\t\t\t\t\t//Retrive and calculate reamining time related information for the selected room and its upcomming bookings\n\t\t\t\t\t\t\t\t\t\t\t\tconst {currentStatus, activeBookings, timeRemainingInActiveBooking, timeUntilNextBooking} = this.calculateRoomBookingTimeInfo();\n\t\t\t\t\t\t\t\t\t\t\t\tthis.diff = timeUntilNextBooking\n // inform user if space has been booked by other\n if( currentStatus !== 'available') {\n if(activeBookings.length && timeRemainingInActiveBooking < 15 && timeUntilNextBooking >= 15 ) {\n this.setupTimer();\n // this.isAvailable = true;\n //update up start and end epoch times for a booking button options\n this.updateSchedulingEpochs();\n } else {\n this.isAvailable = false;\n this.intervalCall_1?.unsubscribe();\n clearInterval(this.intervalCall_15);\n }\n\n }else {\n this.setupTimer();\n // this.isAvailable = true;\n //update up start and end epoch times for a booking button options\n this.updateSchedulingEpochs();\n }\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Determine available time until next booking start time\n this.determineNextBookingStartTime();\n }\n })\n );\n\n }\n\n\t\t/**\n\t\t * Retrive and calculate reamining time related information for the selected room and its upcomming bookings\n\t\t * @returns\n\t\t */\n\t\tpublic calculateRoomBookingTimeInfo(): InProgressRoomBookingTimeInfo {\n\n\t\t\tconst now: any = DateNow(new Date()); // current date time\n\n\t\t\t// Retirive a list of bookings and map them to booking objects\n\t\t\tconst bookings = this.userSelectedRoom.space.settings.bookings.map(b => new Booking(b));\n\n\t\t\t// Filter active/in-progress bookings based on the current time\n\t\t\tconst activeBookings = bookings.filter(booking =>\n\t\t\t\t\t\tnow.isAfterDate(booking.startDateTz.startOfValue('second')) &&\n\t\t\t\t\t\tnow.isBeforeDate(booking.endDateTz.startOfValue('second') )\n\t\t\t);\n\n\t\t\t// Retrive the status of the selected room from parent component data\n\t\t\tconst currentStatus = this.data.parentComponent.roomStatus.statusMap[this.selectedRoomId]; // \" 'available' / 'in-use'\"\"\n\n\t\t\t// Initialize the variable to track time-related information\n\t\t\tlet timeRemainingInActiveBooking = 0; // The remaining time in the active booking in milliseconds\n\t\t\tlet timeUntilNextBooking = 30; // Time until the start of the next booking minutes\n\n\t\t\t// Check if ther are active bookings (room is 'in-use')\n\t\t\tif(activeBookings.length) {\n\t\t\t\tconst nowTime: any = DateTime.now()\n\t\t\t\t// Calculate the time remaining in the active booking in minutes\n\t\t\t\ttimeRemainingInActiveBooking = Math.abs(Math.round((activeBookings[0].end_epoch * 1000 - nowTime.ts) / 60000));\n\n\t\t\t\t// Determine if an extra minute should be added based on the current minute's remainder when devided by WAITING_TIME\n\t\t\t\tconst addMin = DateTime.now().get('minute') % WAITING_TIME === 0 ? 1 : 0;\n\n\t\t\t\t// calculate the start time of the next booking in the same time slot\n\t\t\t\tconst nextBookingStartTime: any = closestToTimeSlot(DateTime.now().plus({ minutes: addMin, seconds:0 }).setZone(this.userSelectedRoom?.building?.timezone), WAITING_TIME);\n\n\t\t\t\t// Filter futute booking for the day to find the next booking\n\t\t\t\tconst futureBookingsForTheDay = this.userSelectedRoom.space?.settings?.bookings.filter((item) =>\n\t\t\t\t\titem.start_epoch * 1000 >= nextBookingStartTime.ts\n\t\t\t\t);\n\n\t\t\t\t// Check if there is an futute booking for the day\n\t\t\t\tif(futureBookingsForTheDay.length) {\n\t\t\t\t\t// calculate the time until start of the next booking in minutes\n\t\t\t\t\tconst nextBookingStartTimeMs = futureBookingsForTheDay[0].start_epoch * 1000;\n\t\t\t\t\ttimeUntilNextBooking = Math.floor((nextBookingStartTimeMs - nowTime.ts) / (1000 * 60));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t\t\t\tcurrentStatus: currentStatus,\n\t\t\t\t\t\t\tactiveBookings: activeBookings,\n\t\t\t\t\t\t\ttimeUntilNextBooking: timeUntilNextBooking,\n\t\t\t\t\t\t\ttimeRemainingInActiveBooking : timeRemainingInActiveBooking,\n\t\t\t\t\t\t};\n\n\t\t}\n\n public setup15MinTimer() {\n //interval for 15 min\n !this.timerIndex && setTimeout(()=>this.setUpTime(), 1100 ) ;\n this.timerIndex++\n this.intervalCall_15 = window.setInterval(\n () => { this.intervalCall_1?.unsubscribe(); setTimeout(()=>this.setUpTime(), 1100 ) }\n , ( 1000 * 60 * WAITING_TIME ) );\n\n\n }\n\n public setUpTime() {\n // console.log(DateTime.now().setZone(this.userSelectedRoom?.building?.timezone).get('minute'));\n // console.log(DateTime.now().setZone(this.userSelectedRoom?.building?.timezone).get('minute') % WAITING_TIME)\n // console.log(DateTime.now().setZone(this.userSelectedRoom?.building?.timezone).get('second'))\n const addMin = DateTime.now().get('minute') % WAITING_TIME === 0 ? 1 : 0 ;\n const addSeconds = 60 - DateTime.now().get('second');\n let start:any = closestToTimeSlot(DateTime.now().plus({ minutes: addMin, seconds:0 }).setZone(this.userSelectedRoom?.building?.timezone), WAITING_TIME);\n start = start.toLocaleString(DateTime.TIME_SIMPLE);\n if(start !== this.start_epoch ) {\n\n this.start_epoch = start;\n\n // this.availableUntil = parseInt(this.userSelectedRoom.space.settings.available_until.toString()) * 1000;\n // const currentTime = new Date(DateTime.now().valueOf());\n // const endTime = new Date(this.availableUntil);\n // this.diff = Math.abs(Math.round((endTime.getTime() - currentTime.getTime()) / 60000));\n\n const addMin = DateTime.now().get('minute') % WAITING_TIME === 0 ? 1 : 0 ;\n const addSeconds = 60 - DateTime.now().get('second');\n this.startTimer(addMin);\n\n }\n\n\t\t\t\t\t\t//update up start and end epoch times for a booking button options\n\t\t\t\t\t\tthis.updateSchedulingEpochs()\n\n // let end_15: any = closestToTimeSlot(DateTime.now().plus({ minutes: addMin, seconds:0 }).setZone(this.userSelectedRoom?.building?.timezone), WAITING_TIME).plus({ minutes: 15 });\n // end_15 = end_15.toLocaleString(DateTime.TIME_SIMPLE);\n // if(end_15 !== this.end_epoch_15) {\n // this.end_epoch_15 = end_15\n // }\n\n // let end_30: any = closestToTimeSlot(DateTime.now().plus({ minutes: addMin, seconds:0 }).setZone(this.userSelectedRoom?.building?.timezone), WAITING_TIME).plus({ minutes: 30 });\n // end_30 = end_30.toLocaleString(DateTime.TIME_SIMPLE);\n // if(end_30 !== this.end_epoch_30) {\n // this.end_epoch_30 = end_30;\n // }\n }\n\n public ngOnInit(): void {\n this.fetchRoomWithBookings(false);\n\n this.data.parentComponent.childCallback = this.updateRoomData.bind(this);\n this.userSelectedRoom = this.data?.room;\n\t\t\t\tthis.updateSchedulingEpochs();\n this.updateRoomData(this.userSelectedRoom);\n\t\t\t\t// Determine available time until next booking start time\n // this.determineNextBookingStartTime();\n\n this.subscription(\n 'currentUser',\n this.store\n .select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n })\n );\n\n //update up start and end epoch times for a booking button options\n // this.updateSchedulingEpochs();\n this.data.parentComponent.isOverlayOpened = true;\n }\n\n /**\n * This function sets up start and end epoch times for a booking scheduling system.\n * It calculates and assigns various epoch times based on the current time,\n * available until time, and user-selected room's timezone.\n */\n public updateSchedulingEpochs() {\n\n\t\t\tconst now: any = DateTime.now();\n\n\t\t\t// Calculate the time difference in minutes between current and available until time\n\t\t\tconst {currentStatus, activeBookings, timeRemainingInActiveBooking, timeUntilNextBooking} = this.calculateRoomBookingTimeInfo();\n\t\t\t// this.diff = Math.abs(Math.round((this.availableUntil - now.ts) / 60000)); // recheck\n\t\t\tthis.diff = timeUntilNextBooking;\n\n\t\t\t// Determine system availability based on time difference\n\t\t\tthis.isAvailable = timeRemainingInActiveBooking < 15 && timeUntilNextBooking >= 15 // this.diff >= 15;\n\n\t\t\t// Calculate the next time slot for scheduling\n\t\t\tconst addMin = now.get('minute') % WAITING_TIME === 0 ? 1 : 0;\n\t\t\tconst adjustedTime = now.plus({ minutes: addMin, seconds: 0 }).setZone(this.userSelectedRoom?.building?.timezone);\n\n\t\t\t// Calculate and assign the start and end epoch times with 15 and 30-minute intervals\n\t\t\tconst timeSlot = closestToTimeSlot(adjustedTime, WAITING_TIME);\n\t\t\tthis.start_epoch = timeSlot.toLocaleString(DateTime.TIME_SIMPLE);\n\t\t\tthis.end_epoch_15 = timeSlot.plus({ minutes: 15 }).toLocaleString(DateTime.TIME_SIMPLE);\n\t\t\tthis.end_epoch_30 = timeSlot.plus({ minutes: 30 }).toLocaleString(DateTime.TIME_SIMPLE);\n }\n\n ngAfterViewInit() {\n this.setupTimer();\n }\n\n public setupTimer() {\n console.log(DateTime.now().get('second'))\n const addMin = DateTime.now().setZone(this.userSelectedRoom?.building?.timezone).get('minute') % WAITING_TIME === 0 ? 1 : 0 ;\n const addSeconds = 60 - DateTime.now().get('second');\n this.startTimer(addMin);\n }\n\n\n // countdown timer for coachmark\n public startTimer(display = 0, addSeconds = 0) {\n\n // const currentTime = new Date(DateTime.now().valueOf());\n // const endTime = new Date(closestToTimeSlot(DateTime.now().plus({minutes: display, seconds: addSeconds}).setZone(this.userSelectedRoom?.building?.timezone), WAITING_TIME).valueOf());\n // const availableTimeToBook = Math.abs((endTime.getTime() - currentTime.getTime()) / 60000)* 60;\n // let timer = availableTimeToBook; //(this.diff -35) * 60;\n // let minutes;\n // let seconds;\n let timer = 0 ;\n if(timer >= 0){\n this.intervalCall_1 = interval(1000).subscribe(x => {\n\n const currentTime = new Date(DateTime.now().valueOf());\n const endTime = new Date(closestToTimeSlot(DateTime.now().plus({minutes: display, seconds: addSeconds}).setZone(this.userSelectedRoom?.building?.timezone), WAITING_TIME).valueOf());\n const availableTimeToBook = Math.abs((endTime.getTime() - currentTime.getTime()) / 60000)* 60;\n let timer = availableTimeToBook; //(this.diff -35) * 60;\n\n this.isTimerActive = true;\n this.minutesRemaining = Math.floor(timer / 60);\n this.secondsRemaining = Math.floor(timer % 60);\n\n this.minutesRemaining = this.minutesRemaining < 10 ? \"0\" + this.minutesRemaining : this.minutesRemaining;\n this.secondsRemaining = this.secondsRemaining < 10 ? \"0\" + this.secondsRemaining : this.secondsRemaining;\n\n --timer;\n\n if (timer <= 0) {\n timer = 0\n this.intervalCall_1?.unsubscribe();\n // clearInterval(this.intervalCall_1);\n this.isTimerActive = false;\n !this.timerIndex && this.setup15MinTimer();\n\n\t\t\t\t\t\t\t\t\t\tthis.store.select(selectActiveForm).pipe(take(1))\n\t\t\t\t\t\t\t\t\t\t\t.subscribe((form) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst addMin = DateTime.now().setZone(this.userSelectedRoom?.building?.timezone).get('minute') % WAITING_TIME === 0 ? 1 : 0 ;\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst addSeconds = 60 - DateTime.now().setZone(this.userSelectedRoom?.building?.timezone).get('second');\n\t\t\t\t\t\t\t\t\t\t\t\t\tform['date'] = closestToTimeSlot(DateTime.now().setZone(this.userSelectedRoom?.building?.timezone).plus({ minutes: addMin, seconds:0 }), WAITING_TIME).valueOf(),\n\t\t\t\t\t\t\t\t\t\t\t\t\tform.dateTz = closestToTimeSlotTz(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tnew DateTZ({ date: DateTime.now().plus({ minutes: addMin, seconds:0 }), is_local_tz: false, building_tz: form.timezone }),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tWAITING_TIME\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.store.dispatch(storeBookingFormData({ payload: form }));\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.store.dispatch(loadRoomsForResults.request(roomFormDataToQuery(form)));\n\n\t\t\t\t\t\t\t\t\t\t\t});\n\n }\n }) //, 1000, endTime)\n }\n }\n\n\t\t/**\n\t\t * This function updates information related to the lates booking in the selected room\n\t\t */\n public determineNextBookingStartTime() {\n\n\t\t\t\t// Get the current time using DateTime library\n const now = DateTime.now();\n\n\t\t\t\t// Determine if an extra minute should be added based on the current minute's remainder when devided by WAITING_TIME\n const addMin = now.get('minute') % WAITING_TIME === 0 ? 1 : 0;\n\n\t\t\t\t// Adjust the current time by adding the calculated minutes adna setting the timezone based on the selected room's building\n const addjustedTime: any = closestToTimeSlot(\n now.plus({ minutes: addMin, seconds:0 })\n .setZone(this.userSelectedRoom?.building?.timezone), WAITING_TIME\n );\n\n\t\t\t\t\t\t// Check if room is selected and has bookings settings\n if (this.userSelectedRoom?.space) {\n\t\t\t\t\t// Returive the list of future bookings or initializem it as an empaty array\n const futureBookings = this.userSelectedRoom?.space?.settings?.bookings || [];\n\n\t\t\t\t\t\t// Calculate the end time for a 30-minute interval from the addjested time\n const endEpoch30 = addjustedTime.plus({ minutes: 30 }).ts;\n\n\t\t\t\t\t\t// Filter future booking that start after end_epoch_30\n\t\t\t\t\t\tconst futureBookingsForTheDay = futureBookings.filter(item => item.start_epoch * 1000 >= endEpoch30);\n\n\t\t\t\t\t\t// Check if there are futute bookings found\n\t\t\t\t\t\tif(futureBookingsForTheDay.length > 0) {\n\t\t\t\t\t\t\t//Extract the start time of latest booking\n\t\t\t\t\t\t\tconst latestBookingStartTime = new Date(futureBookingsForTheDay[0].start_epoch * 1000);\n\n\t\t\t\t\t\t\t// Calculate the time difference between the latest booking start time and the current time in milliseconds\n\t\t\t\t\t\t\tconst timeDiffMs = latestBookingStartTime.getTime() - now.valueOf();\n\t\t\t\t\t\t\tthis.diffInMs = timeDiffMs;\n\t\t\t\t\t\t\t// Calculate the timne differenc in hours and minutes\n\t\t\t\t\t\t\tthis.diffInHours = Math.floor(timeDiffMs / (1000 * 60 * 60));\n \tthis.diffInMinutes = Math.floor((timeDiffMs % (1000 * 60 * 60)) / (1000 * 60));\n\n\t\t\t\t\t\t\t// Set flag to indicate the wether the difference is NaN (no future booking)\n \tthis.untilNextBookingFlag = !isNaN(timeDiffMs);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis.untilNextBookingFlag = false;\n\t\t\t\t\t\t}\n }\n\n }\n\n //fetch all the bookings for selected room for the day to the store\n public fetchRoomWithBookings(allWeek: boolean = true) {\n const day = 24 * 60;\n const week = day * 7;\n const date = (this.booking?.startDateTz).clone();\n const startOfDay = date.startOfValue('day').setValue({ second: 0, millisecond: 0 });\n const startOfWeek = date.startOfValue('week');\n\n // Query for the entire day for this room\n const query = {\n dateTz: allWeek ? startOfWeek : startOfDay,\n duration: allWeek ? week : day,\n locations: this.data?.id,\n capacity: this.booking?.space?.capacity,\n };\n this.store.dispatch(loadByIdResults.request(query));\n }\n\n public closeModal() {\n const modal = this.elementRef.nativeElement.querySelector('.map-overlay-container');\n modal.classList.add('hide');\n this.data.parentComponent.isOverlayOpened = false;\n this.timerIndex = 0;\n this.isAvailable = false;\n\t\t\t\tthis.untilNextBookingFlag = false;\n this.intervalCall_1?.unsubscribe();\n // clearInterval(this.intervalCall_1);\n // this.intervalCall_15?.unsubscribe();\n clearInterval(this.intervalCall_15);\n }\n\n public roomDataCallback() {\n if (this.data.parentComponent.roomSelected && this.userSelectedRoom) {\n this.data.parentComponent.roomSelected(this.userSelectedRoom);\n }\n }\n\n public onBook(minutes: number) {\n minutes = Math.round(minutes);\n const {filters, settings} = this.userSelectedRoom.space;\n if ( (filters && filters?.equipment_code ) || (settings && settings?.equipment_code) ) {\n this.roomDataCallback();\n } else {\n this.saveChanges(minutes);\n }\n }\n\n public bookingFormToBooking(minutes): Booking {\n const booking_form_data = this.bookingData.value;\n const has_note_buffer =\n booking_form_data?.notes && booking_form_data.notes?.length\n ? { [booking_form_data.selectedRoom.space.email]: 900 }\n : {}; // 900 seconds = 15 min\n const attendees = this.booking.attendees;\n const company = this.booking.company;\n const start_epoch = closestToTimeSlot(DateTime.now(), 15).valueOf() / 1000;\n const end_epoch =\n closestToTimeSlot(DateTime.now(), 15).plus({ minutes: minutes }).valueOf() / 1000;\n\n const raw_data = {\n space: { id: this.selectedRoomId },\n all_day: false,\n attendees,\n // booking_type: booking_form_data?.bookingType.value,\n booking_type: this.userSelectedRoom.space.filters.external === true? \"External\" : \"Internal\",\n catering: [],\n start_epoch,\n end_epoch,\n timezone: booking_form_data?.timezone,\n equipment_codes: {\n [booking_form_data?.selectedRoom.space.email]: booking_form_data?.code,\n },\n expected_attendees: {\n [this.data.email]: 1,\n },\n has_catering: false,\n needs_space: false,\n notes: this.booking.notes,\n organiser: this.currentUser,\n creator: this.currentUser,\n room: this.userSelectedRoom.space,\n title: 'Ad hoc meeting',\n setup: has_note_buffer,\n breakdown: has_note_buffer,\n company,\n };\n console.log(new Booking(raw_data));\n return new Booking(raw_data);\n }\n\n //function for sending final booking request\n public saveChanges(minutes) {\n this.loading = true;\n this.booking = this.bookingFormToBooking(minutes);\n // const booking_form_data = this.bookingData.value;\n this.booking.status = BOOKING_STATUS.approved;\n checkCollisions(this._spaces, this.booking).then(\n (bookable: boolean) => {\n if (!bookable) {\n // TODO - Refactor for https://acaprojects.atlassian.net/browse/MCK-1498\n // API is retuning bookings ouside of requested time range\n // TODO check booking date and times for conflict manually\n this.booking.status = BOOKING_STATUS.unavailable;\n return;\n }\n\n this._bookings_service.save(this.booking).then(\n (bkn) => {\n this.loading = false;\n this.success = true;\n this.confirmed = true;\n this._booking_state_service.replace(bkn);\n\n // When saved, the returned booking has a null room.\n // Correct this so the rest of the code doesn't flake out.\n this.booking = new Booking({ ...bkn.toJSON(), room: this.booking.room });\n // Clear the current booking form\n this.store.dispatch(clearBookingFormData());\n\n // Heap track event\n this._service.analytics.track('create', {\n booking_id: bkn.id,\n office: this.booking.room.building.name,\n room: this.booking.local_room_name,\n start_time: bkn.startDateTz.ms,\n end_time: bkn.endDateTz.ms,\n catering: !!bkn.catering.length,\n headcount: 1,\n });\n this.data.parentComponent.confirmBooking(this.booking);\n },\n (err) => {\n this.loading = false;\n this.confirmed = false;\n if (err.status === 409) {\n // Unavailable Confirmation\n this.booking.status = BOOKING_STATUS.unavailable;\n this._booking_state_service.replace(this.booking);\n this.confirmed = true;\n this.success = false;\n } else {\n console.log(err);\n }\n }\n );\n },\n (err) => {\n // Unavailable Confirmation\n this.loading = false;\n this.timeout(\n 'error',\n () => {\n this.booking.status = BOOKING_STATUS.unavailable;\n this._booking_state_service.replace(this.booking);\n this.confirmed = true;\n this.success = false;\n },\n 500\n );\n }\n );\n }\n}\n","import { SelectOption } from '@mckinsey-converge/ui';\nimport {\n Space,\n SpaceStatus,\n RoomResultsViewModel,\n MapListener\n} from '@mckinsey-converge/data-common';\nimport {\n HashMap,\n Point\n} from '@mckinsey-converge/base';\nimport { MapFeature } from '@acaprojects/ngx-interactive-map/lib/helpers/map.interfaces';\nimport { FloorMapOverlayComponent } from './floor-map-overlay/floor-map-overlay.component';\n\nexport const MIN_ZOOM_LEVEL = 1;\nexport const MAX_ZOOM_LEVEL = 10;\nexport const CENTER_POINT: Point = { x: 0.5, y: 0.5 };\n\nexport const WAITING_TIME = 15;\n\nconst mapSpaceStatusToDisplay = (status: SpaceStatus): string => {\n switch (status) {\n case SpaceStatus.NotBookable:\n return 'Not Bookable';\n case SpaceStatus.Requestable:\n return 'Available by Request';\n case SpaceStatus.Unavailable:\n return 'In Use';\n case SpaceStatus.Available:\n default:\n return 'Available';\n }\n};\n\nconst mapSpaceStatusToOption = (status: SpaceStatus) => ({\n value: status,\n display: mapSpaceStatusToDisplay(status)\n});\n\nexport const legendOptions = (): SelectOption[] => [\n SpaceStatus.Available,\n SpaceStatus.Requestable,\n SpaceStatus.Unavailable,\n SpaceStatus.NotBookable\n].map(mapSpaceStatusToOption);\n\n\nexport const defaultMapBookingRules = [\n 'Rooms showing yellow are restricted and must be requested',\n 'Rooms showing green are available to book for one hour',\n 'Rooms showing red are booked',\n 'Rooms showing grey are not bookable but may be used if they are empty'\n];\n\nexport const defaultMapBookingSubtitle = 'You may request restricted rooms but they will need to be approved by an admin';\n\nexport const generateMapStyleForSpace = (\n space: Space,\n status: SpaceStatus,\n colorStatusMap: HashMap) => {\n const id =\n `${space.map_id}`.indexOf('area') < 0\n ? `area-${space.map_id}-status`\n : space.map_id;\n return (\n {\n id,\n styles: {\n fill: colorStatusMap[`space-${status}`] || '#000',\n opacity: 1\n }\n });\n};\n\n/**\n * Generates actions for mapview handling.\n * @param space - the space to generate\n * @param clickSpace - called when clicked or touched\n * @param hoverSpace - called when you hover over a space\n * @param leaveSpace - called when you leave a space.\n */\nexport const generateMapListenersForSpace = (\n space: Space,\n hoverSpace: () => void,\n leaveSpace: () => void,\n clickSpace: () => void\n): MapListener[] => {\n const id =\n `${space.map_id}`.indexOf('area') < 0\n ? `area-${space.map_id}-status`\n : space.map_id;\n const listeners: MapListener[] = [];\n listeners.push({\n id,\n event: 'mouseenter',\n callback: hoverSpace\n });\n listeners.push({\n id,\n event: 'mouseleave',\n callback: leaveSpace\n });\n if (space.bookable) {\n listeners.push({\n id,\n event: 'click',\n callback: clickSpace\n });\n listeners.push({\n id,\n event: 'touchend',\n callback: clickSpace\n });\n }\n return listeners;\n};\n\n\nexport const spaceToMapFeature = (space: Space): MapFeature => ({\n id: `area-${space.map_id}-status`,\n coordinates: null,\n content: FloorMapOverlayComponent,\n data: {\n ...space\n }\n});\n\nexport const roomToMapFeature = (room: RoomResultsViewModel, parentComponent?: any): MapFeature => ({\n id: `area-${room.space.map_id}-status`,\n coordinates: null,\n content: FloorMapOverlayComponent,\n data: {\n ...room.space,\n parentComponent,\n room\n }\n});\n\n// service account for office floor map view - read only\nexport const SERVICE_ACCOUNT = 'svc_kiosk_converge@mckinsey.onmicrosoft.com';","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { OfficeFloorComponent } from './office-floor/office-floor.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { LibraryModule } from '@acaprojects/ngx-interactive-map';\nimport { MatSelectModule } from '@angular/material/select';\nimport { UiModule } from '@mckinsey-converge/ui';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MapModule } from 'src/app/map/map.module';\nimport { FloorMapOverlayComponent } from './floor-map-overlay/floor-map-overlay.component';\n\nexport const mapModuleImports = [\n CommonModule,\n MatButtonModule,\n LibraryModule,\n MatSelectModule,\n UiModule,\n MatDialogModule,\n MapModule,\n];\n\nexport const mapModuleDeclarations = [\n OfficeFloorComponent,\n FloorMapOverlayComponent,\n // MapControlsComponent,\n // MapFiltersComponent,\n // OfficeInformationModalComponent,\n // MapOverlayComponent\n];\n\n@NgModule({\n declarations: [\n ...mapModuleDeclarations,\n ],\n exports: [\n ...mapModuleDeclarations\n ],\n imports: [\n ...mapModuleImports\n ]\n})\nexport class OfficeFloorMapModule {\n}\n","import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { BehaviorSubject, combineLatest, interval } from 'rxjs';\nimport { BaseDirective, closestToTimeSlot, closestToTimeSlotTz, HashMap, Point } from '@mckinsey-converge/base';\nimport { MapFeature } from '@acaprojects/ngx-interactive-map/lib/helpers/map.interfaces';\nimport { select, Store } from '@ngrx/store';\nimport { BuildingStoreState } from '@mckinsey-converge/buildings';\nimport * as cloneDeep from 'lodash/cloneDeep';\nimport {\n Building,\n BuildingLevel,\n SettingsService,\n Space,\n mapBuildingLevelToOption,\n mapResultsToViewModels,\n RoomResultsViewModel,\n selectActiveForm,\n selectBookingLocations,\n selectSelectedBuildingOptions,\n roomFormDataToQuery,\n FilteredSpaces,\n BookingStoreState,\n storeBookingFormData,\n BookingFormData,\n MapListener,\n selectFilteredDiffSizeResults,\n User,\n selectMapFilteredResults,\n ApplicationService,\n clearRoomFilters,\n\t\tbookingTypeOptions,\n defaultRoomSizeOption,\n} from '@mckinsey-converge/data-common';\nimport { distinctUntilChanged, map, take, withLatestFrom } from 'rxjs/operators';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { filterUndefined } from '@mckinsey-converge/rx-utils';\nimport { MatDialog } from '@angular/material/dialog';\nimport { OfficeInformationModalComponent } from 'src/app/map/office-information-modal/office-information-modal.component';\n\nimport {\n CENTER_POINT,\n generateMapListenersForSpace,\n generateMapStyleForSpace,\n MAX_ZOOM_LEVEL,\n MIN_ZOOM_LEVEL,\n roomToMapFeature,\n SERVICE_ACCOUNT,\n WAITING_TIME,\n} from '../floor-map.utils';\nimport {\n loadDiffSizeResults,\n loadRoomsForResults,\n loadRoomsForResultsMap,\n mapRoomToSelectOption,\n RoomStoreState,\n} from '@mckinsey-converge/rooms';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { selectCurrentUser, UserStoreState } from '@mckinsey-converge/user';\nimport { ActivatedRoute, Router, RouterStateSnapshot } from '@angular/router';\nimport { Location } from '@angular/common';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\nimport { DateTime } from 'luxon';\n\nexport type MapSearchStoreState = BuildingStoreState &\n RoomStoreState &\n BookingStoreState &\n UserStoreState;\n\n@Component({\n selector: 'app-office-floor',\n templateUrl: './office-floor.component.html',\n styleUrls: ['./office-floor.component.scss'],\n})\nexport class OfficeFloorComponent extends BaseDirective implements OnInit, OnChanges {\n @Input()\n public openHeader: boolean = true;\n\n public zoom = new BehaviorSubject(MIN_ZOOM_LEVEL);\n\n public center = new BehaviorSubject(CENTER_POINT);\n public listeners = new BehaviorSubject([]);\n\n public focusedMapSpace = new BehaviorSubject(undefined);\n public features = combineLatest([this.focusedMapSpace]).pipe(\n map((items) => items.filter((i) => !!i))\n );\n\n public focusedRoom = new BehaviorSubject(undefined);\n\n public resultBuildings = new BehaviorSubject([]);\n public resultSpaces = new BehaviorSubject([]);\n public activeBuilding = new BehaviorSubject(undefined);\n public activeLevel = new BehaviorSubject(undefined);\n public activeSpace = new BehaviorSubject(undefined);\n\n /** Mapping of elements to CSS styles */\n public style_map = new BehaviorSubject>>({});\n\n public mapUrl = this.activeLevel.pipe(map((level) => level?.map_url ?? ''));\n\n public bookingLocations = new BehaviorSubject[]>([]);\n public buildingLevelOptions = new BehaviorSubject[]>([]);\n public spaceListOptions = new BehaviorSubject[]>([]);\n\n public activeBuildingOption = combineLatest([this.activeBuilding, this.bookingLocations]).pipe(\n map(([building, locations]) => locations.find((l) => l.value === building?.id))\n );\n\n public activeLevelOption = this.activeLevel.pipe(map(mapBuildingLevelToOption));\n public activeSpaceOption = this.activeSpace.pipe(map(mapRoomToSelectOption));\n public bookingFormData = new BehaviorSubject(undefined);\n\n public roomStatus: any;\n public payload: any;\n /** Current User */\n public currentUser: User;\n public bookingConfirmed = false;\n public bookingData: {};\n serviceAccount: boolean;\n\n constructor(\n private store: Store,\n public dialog: MatDialog,\n private settingService: SettingsService,\n private router: Router,\n private route: ActivatedRoute,\n public _service: ApplicationService,\n private location: Location\n ) {\n super();\n this.payload = location.getState();\n this.payload.floorMap = false;\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n throw new Error('Method not implemented.');\n }\n\n public ngOnInit(): void {\n //clear filters first if any applied previously \n this.store.dispatch(clearRoomFilters());\n\n const selection = { value: this.payload?.payload, display: '' };\n this.payload.building.value = this.payload.building[0].id;\n\n this.subscription(\n 'currentUser',\n this.store\n .select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n this.serviceAccount = this.currentUser.email === SERVICE_ACCOUNT\n })\n );\n\n // get the active form values\n this.subscription(\n 'activeForm',\n this.store\n .pipe(select(selectActiveForm), distinctUntilChanged())\n .subscribe((next: BookingFormData | undefined) => {\n if (next) {\n next.duration = 30;\n this.bookingFormData.next(next); /// <---- timezone setting can be done here\n }\n })\n );\n\n this.subscription(\n 'bookingLocations',\n this.store.pipe(select(selectBookingLocations)).subscribe((next) => {\n this.bookingLocations.next(next);\n // update the map view MCK-1100 when location changes\n const self = this;\n setTimeout(() => {\n self.selectActiveBuilding(self.bookingLocations.value[0]);\n }, 0);\n })\n );\n\n this.subscription(\n 'bookingSpaceResults',\n combineLatest([\n this.store.pipe(\n select(selectMapFilteredResults),\n map((r: LoadingModel) => r.success)\n ),\n this.activeBuilding.pipe(filterUndefined()),\n this.activeLevel.pipe(filterUndefined()),\n ]).subscribe(([filteredSpaces, building, level]) => {\n this.roomStatus = filteredSpaces;\n\n const spacesFromSelection = (filteredSpaces.spaces || []).filter(\n (s) =>\n !!s.map_id &&\n s.zones.includes(building.id) &&\n s.zones.includes(this.payload?.payload)\n );\n\n this.resultSpaces.next(cloneDeep(spacesFromSelection));\n\n const listeners: MapListener[] = [];\n const styles: HashMap> = {};\n const colour_map = this.settingService.get('app.explore.colors') || {};\n spacesFromSelection.forEach((space) => {\n const status = filteredSpaces.statusMap[space.id];\n const mapStyle = generateMapStyleForSpace(space, status, colour_map);\n styles[`#${mapStyle.id}`] = mapStyle.styles;\n listeners.push(\n ...generateMapListenersForSpace(\n space,\n () => {},\n () => {},\n () => {\n if(!this.serviceAccount) {\n this.activeSpace.next(space);\n this.focusOnRoom();\n }\n \n }\n )\n );\n });\n this.style_map.next(styles);\n this.listeners.next(listeners);\n this.isOverlayOpened && this.focusOnRoom();\n })\n );\n\n this.subscription(\n 'bookingResults',\n this.resultSpaces\n .pipe(withLatestFrom(this.activeSpace))\n .subscribe(([resultSpaces, activeSpace]) => {\n this.spaceListOptions.next(resultSpaces.map(mapRoomToSelectOption));\n })\n );\n\n this.subscription(\n 'setActiveSpace',\n this.resultSpaces\n .subscribe((next) => {\n // console.log(this.focusedRoom?.value?.space?.id);\n const space = next.find((s) => s.id === this.focusedRoom?.value?.space?.id)\n space && this.activeSpace.next(space);\n })\n );\n\n\n \n\n this.subscription(\n 'storeResultedBuildings',\n this.store.pipe(select(selectSelectedBuildingOptions)).subscribe((buildings) => {\n this.resultBuildings.next(this.payload.building);\n // if we dont have active building yet, set it here.\n if (buildings.length > 0 && !this.activeBuilding.value) {\n const firstBuilding = buildings[0];\n this.activeBuilding.next(firstBuilding);\n }\n })\n );\n\n this.subscription(\n 'activeBuildingChange',\n this.activeBuilding\n .pipe(\n filterUndefined(),\n map((b: Building) => b.levels)\n )\n .subscribe((levels) => {\n this.buildingLevelOptions.next(levels.map(mapBuildingLevelToOption));\n })\n );\n\n // if levels change and active level no longer part of list, pick first.\n this.subscription(\n 'updateActiveLevelOnActiveBuildingChange',\n this.activeBuilding\n .pipe(\n filterUndefined(),\n distinctUntilChanged(),\n withLatestFrom(this.activeLevel),\n map(\n ([building, activeLevel]) =>\n (activeLevel && building.levels.find((l) => l.id === activeLevel.id)) ||\n building.levels[0]\n )\n )\n .subscribe((level) => {\n this.activeLevel.next(level);\n })\n );\n\n // re-request rooms every minute to update space status.\n this.subscription(\n 'updateSpaceStatusInterval',\n interval(60 * 1000)\n .pipe(withLatestFrom(this.store.select(selectActiveForm)))\n .subscribe(([, form]) => {\n \n form['date'] = closestToTimeSlot(DateTime.now().plus({ minutes: 1 }), WAITING_TIME).valueOf(),\n form.dateTz = closestToTimeSlotTz(\n new DateTZ({ date: DateTime.now().plus({ minutes: 1 }), is_local_tz: false, building_tz: form.timezone }),\n WAITING_TIME\n )\n this.store.dispatch(storeBookingFormData({ payload: form }));\n this.store.dispatch(loadRoomsForResults.request(roomFormDataToQuery(form)));\n })\n );\n\n this.selectActiveBuilding(this.payload.building);\n this.selectBuildingLevel(selection);\n\n }\n\n public zoomIn() {\n if (this.zoom.value < MAX_ZOOM_LEVEL) {\n this.zoom.next(this.zoom.value + 1);\n }\n }\n\n public zoomOut() {\n if (this.zoom.value > MIN_ZOOM_LEVEL) {\n this.zoom.next(this.zoom.value - 1);\n }\n }\n\n public displayOfficeInformation() {\n this.dialog.open(OfficeInformationModalComponent, {\n data: this.activeBuilding.value,\n panelClass: 'mck-alert',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n }\n\n public resetZoomLevels() {\n this.zoom.next(MIN_ZOOM_LEVEL);\n this.center.next(CENTER_POINT);\n this.focusedRoom.next(undefined);\n }\n\n public selectActiveBuilding(selection: SelectOption) {\n this.resultBuildings\n .pipe(\n map((all) => all.find((b) => b.id === selection.value)),\n take(1),\n filterUndefined()\n )\n .subscribe((next) => {\n this.activeBuilding.next(next);\n });\n }\n\n public selectBuildingLevel(selection: SelectOption) {\n this.activeBuilding\n .pipe(\n map((b) => b.levels?.find((l) => l.id === selection?.value)),\n take(1),\n filterUndefined()\n )\n .subscribe((next) => {\n this.activeLevel.next(next);\n });\n }\n\n public selectActiveSpace(selection?: SelectOption) {\n this.resultSpaces\n .pipe(\n map((all) => all.find((s) => s.id === this.focusedRoom?.value.space.id)),\n // take(1),\n filterUndefined()\n )\n .subscribe((next) => {\n this.activeSpace.next(next);\n });\n }\n\n public focusOnRoom() {\n // this.selectedSpace = space;\n this.activeSpace.pipe(take(1), filterUndefined()).subscribe((next) => {\n let delay = 0;\n if (next.level.id !== this.activeLevel.value.id) {\n this.activeLevel.next(next.level);\n delay = 500;\n }\n this.timeout(\n 'updateLevelAndRoom',\n () => {\n const focusedRoom = mapResultsToViewModels(\n [this.activeSpace.value],\n [this.activeLevel.value],\n [this.activeBuilding.value]\n );\n // this.focusedRoom.next(null);\n \n this.focusedRoom.next(cloneDeep(focusedRoom[0]));\n this.isOverlayOpened && this.childCallback( cloneDeep(focusedRoom[0]) );\n\n\t\t\t\t\tconst { filters, settings } = this.focusedRoom?.value?.space; // use of new data structure fields\n if ( this.roomStatus.statusMap[this.focusedRoom.value.space.id] === 'requestable' || (filters?.equipment_code || settings?.equipment_code) ) {\n // submit\n this.store.dispatch(\n storeBookingFormData({\n payload: {\n ...this.bookingFormData.value,\n selectedRoom: this.focusedRoom.value,\n },\n })\n );\n this.roomSelected(this.focusedRoom.value);\n }\n !this.isOverlayOpened && this.focusedMapSpace.next(roomToMapFeature(this.focusedRoom.value, this));\n this.zoom.next(6);\n },\n delay\n );\n });\n }\n\n public isOverlayOpened = false;\n public childCallback;\n\n public exitFullscreen(route: string): void {\n this.store.dispatch(clearRoomFilters());\n\n this.store.select(selectActiveForm).pipe(take(1))\n\t\t\t\t\t.subscribe((form) => {\n\t\t\t\t\t\tform.bookingType = bookingTypeOptions[0],\n form.roomSize = defaultRoomSizeOption,\n\t\t\t\t\t\t\tthis.store.dispatch(storeBookingFormData({ payload: form }));\n\t\t\t\t\t});\n\n const navigationExtras = {\n state: { payload: this.activeLevel.value },\n relativeTo: this.route,\n queryParams: {\n display: 'map',\n },\n };\n this._service.kioskFormFilter = true;\n this.router.navigate([route], navigationExtras);\n }\n\n // public triggerRefresh(){\n // this.subscription(\n // 'activeForm',\n // this.store\n // .pipe(select(selectActiveForm), distinctUntilChanged())\n // .subscribe((next: BookingFormData | undefined) => {\n // if (next) {\n // next.duration = 35;\n // this.bookingFormData.next(next);\n // }\n // })\n // );\n\n // this.subscription(\n // 'bookingSpaceResults',\n // combineLatest([\n // this.store.pipe(\n // select(selectMapFilteredResults),\n // map((r: LoadingModel) => r.success)\n // ),\n // this.activeBuilding.pipe(filterUndefined()),\n // this.activeLevel.pipe(filterUndefined()),\n // ]).subscribe(([filteredSpaces, building, level]) => {\n // this.roomStatus = filteredSpaces;\n\n // const spacesFromSelection = (filteredSpaces.spaces || []).filter(\n // (s) =>\n // !!s.map_id &&\n // s.zones.includes(building.id) &&\n // s.zones.includes(this.payload?.payload)\n // );\n\n // this.resultSpaces.next(spacesFromSelection);\n\n // const listeners: MapListener[] = [];\n // const styles: HashMap> = {};\n // const colour_map = this.settingService.get('app.explore.colors') || {};\n // spacesFromSelection.forEach((space) => {\n // const status = filteredSpaces.statusMap[space.id];\n // const mapStyle = generateMapStyleForSpace(space, status, colour_map);\n // styles[`#${mapStyle.id}`] = mapStyle.styles;\n // listeners.push(\n // ...generateMapListenersForSpace(\n // space,\n // () => {},\n // () => {},\n // () => {\n // this.activeSpace.next(space);\n // this.focusOnRoom();\n // }\n // )\n // );\n // });\n // this.style_map.next(styles);\n // this.listeners.next(listeners);\n // })\n // );\n\n // this.subscription(\n // 'bookingResults',\n // this.resultSpaces\n // .pipe(withLatestFrom(this.activeSpace))\n // .subscribe(([resultSpaces, activeSpace]) => {\n // this.spaceListOptions.next(resultSpaces.map(mapRoomToSelectOption));\n // })\n // );\n // }\n\n public roomSelected(room: RoomResultsViewModel) {\n // submit\n // this.store.dispatch(\n // storeBookingFormData({\n // payload: {\n // ...this.bookingFormData.value,\n // selectedRoom: room,\n // },\n // })\n // );\n\n let organiser = { display: this.currentUser.name, value: this.currentUser.email };\n this.store.dispatch(\n storeBookingFormData({\n payload: {\n organiser: organiser,\n title: 'Ad hoc meeting',\n // attendees: [this.currentUser],\n code: '',\n notes: '',\n head_count: 1,\n selectedRoom: room,\n },\n })\n );\n\n this.router.navigate(['../create'], { relativeTo: this.route });\n }\n\n public getDayOfWeek(date: string | number | Date) {\n const dayOfWeek = new Date(date).getDay();\n return isNaN(dayOfWeek)\n ? null\n : ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'][\n dayOfWeek\n ];\n }\n\n public confirmBooking = (bookingData: {}) => {\n this.bookingConfirmed = true;\n this.bookingData = bookingData;\n };\n}\n","
\n
\n
\n \n \n \n \n
\n \n
\n
\n
\n
\n
\n
Booking Confirmed
\n
\n
\n \n
Confirmed
\n
\n
\n
Status: Confirmed
\n
Date: {{this.getDayOfWeek(this.bookingData?.date_string)}}, {{this.bookingData?.date_string}}
\n
Time: {{this.bookingData?.time_period}} GMT{{this.bookingData?.tz_offset}}
\n
{{this.bookingData?.booking_type}} meeting ({{this.bookingData?.duration}} minutes)
\n
Address: {{this.activeBuilding?.value.address}}, {{this.activeBuilding?.value.city}}
\n
Room: {{this.focusedRoom.value.title}}
\n
Room {{this.focusedRoom.value.capacity}}
\n
\n
\n
\n
\n
\n
\n
Host: {{this.currentUser?.name}}
\n
Attendees: {{this.currentUser?.name}}
\n
Charge Code: {{this.focusedRoom?.value.space.filters.charge_code === false ? \"No charge code\" : \"\"}}
\n
Headcount Estimate: {{this.bookingData?.attendees.length}}
\n
Additional Requirements: {{this.bookingData?.notes[0]}}
\n
\n
\n
\n
\n \n Close\n \n
\n
\n
\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output\n} from '@angular/core';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { BehaviorSubject } from 'rxjs';\nimport {\n ActivatedRoute,\n ParamMap,\n Router\n} from '@angular/router';\nimport { deepDistinctUntilChanged } from '@mckinsey-converge/rx-utils';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'app-results-header',\n template: `\n
\n
\n

Results

\n Matching your search criteria {{resultsCount>=0 ? '('+resultsCount+')' : ''}} \n
\n \n \n
\n `,\n styleUrls: ['./results-header.component.scss']\n})\nexport class ResultsHeaderComponent extends BaseDirective implements OnInit {\n\n public toggleOptions: SelectOption[] = [\n {\n value: 0,\n display: 'List',\n meta: { \n mobile: true\n }\n },\n {\n value: 1,\n display: 'Map',\n meta: { \n mobile: true\n }\n },\n {\n value: 2,\n display: 'Calendar',\n meta: { \n route: 'booking-calendar',\n mobile: false\n }\n }\n ];\n\n public selectedToggle = new BehaviorSubject>(this.toggleOptions[0]);\n\n @Input()\n public resultsCount: number | undefined;\n\n @Output()\n public selectedToggleChange = new EventEmitter>();\n\n constructor(private router: Router,\n private route: ActivatedRoute) {\n super();\n }\n\n public ngOnInit(): void {\n this.selectedToggleChange.next(this.selectedToggle.value);\n\n this.subscription('paramsToUI', this.route.queryParamMap\n .pipe(deepDistinctUntilChanged())\n .subscribe((next: ParamMap) => {\n const retrievedOption = this.toggleOptions.find(o => o.display.toLowerCase() === next.get('display'));\n this.onSelectedChange(retrievedOption ?? this.toggleOptions[0]);\n }));\n }\n\n public onSelectedChange(option: SelectOption) {\n this.selectedToggle.next(option);\n this.selectedToggleChange.next(option);\n\n if(option.meta?.route) {\n this.router.navigate(['booking-calendar'], { relativeTo: this.route });\n }\n else {\n // toggle route.\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: {\n display: option.display.toLowerCase()\n },\n queryParamsHandling: 'merge'\n });\n }\n \n\n }\n\n}\n","import {\n Component,\n Inject,\n OnInit,\n Output,\n EventEmitter,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n MAT_DIALOG_DATA,\n MatDialogRef\n} from '@angular/material/dialog';\n\nimport {\n AbstractControl,\n FormControl,\n FormGroup,\n Validators\n} from '@angular/forms';\nimport {\n dateBuildingFormatString,\n startEndTimeWithZoneFormatString,\n humaniseDuration,\n closestToTimeSlotTz\n} from '@mckinsey-converge/base';\nimport {\n Space,\n SpacesService,\n DEFAULT_BOOKING_DURATION,\n checkCollisions,\n Booking\n} from '@mckinsey-converge/data-common';\nimport { DateTZ, convertLocalTimestampToTimezonedDateTz, convertTimezonedTimestampToLocalDateTz, DateNow } from '@mckinsey-converge/date-tz';\n\ninterface ModalData {\n dateTz: DateTZ,\n duration: number,\n pendingDateTz: DateTZ,\n pendingDuration: number,\n space?: Space,\n rules?: any,\n bookingId?: string,\n currentBooking?: Booking,\n}\n\n@Component({\n selector: 'app-room-availability-preview-modal',\n template: `\n
\n \n
\n \n
New Booking Date/Time
\n
\n
\n \n \n \n \n \n \n \n \n
\n
\n

Room is available for selected date/time.

\n

Room is unavailable for selected date/time.

\n

Checking availability for selected date/time...

\n

\n Please be aware that this booking starts at {{localStart}} and ends at {{localEnd}} in your local timezone.\n

\n
\n
\n
\n
\n

Old

\n

Date: {{dateString}}

\n

Time: {{timeString}}

\n

({{durationString}})

\n \n
\n
\n

New

\n

Date: {{pendingDateString}}

\n

Time: {{pendingTimeString}}

\n

({{pendingDurationString}})

\n
\n
\n
\n
\n \n \n \n
\n `,\n styleUrls: ['./room-availability-preview-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class RoomAvailabilityPreviewModalComponent implements OnInit {\n @Output() public submitForm = new EventEmitter();\n public dateString: string;\n public timeString: string;\n public durationString: string;\n public pendingDateString: string;\n public pendingTimeString: string;\n public pendingDurationString: string;\n public mapBookingRules: readonly string[];\n public mapBookingSubtitle: string;\n public fromDateTz: DateTZ = closestToTimeSlotTz(new DateTZ(), 15);\n public available: boolean = null;\n public formGroup = new FormGroup({\n dateTz: new FormControl(this.fromDateTz, [Validators.required]),\n duration: new FormControl(DEFAULT_BOOKING_DURATION, [Validators.required])\n });\n public localTimezone = \"\";\n public buildingTimezone = \"\";\n public localStart = \"\";\n public localEnd = \"\"\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: ModalData,\n private dialogRef: MatDialogRef,\n private _spaces: SpacesService,\n ) {}\n\n public get pending_date(){\n return this.data.pendingDateTz; // new DateTZ({ date: this.data.pendingDate.valueOf(), is_local_tz: false, building_tz: this.data?.space?.timezone })\n }\n\n public ngOnInit(): void {\n console.log('Here 1');\n this.formGroup.setValue({\n dateTz: this.data.pendingDateTz,\n duration: this.data.pendingDuration,\n });\n console.log('Here 2');\n this.updateDisplay();\n }\n\n // Method run when the confirming the modal.\n public applyChanges(changes: any): void {\n this.data.pendingDateTz = changes.pendingDateTz; // new Date(changes.pendingDate.valueOf());\n this.data.pendingDuration = changes.pendingDuration;\n this.updateDisplay();\n }\n\n public updateDisplay() {\n // this.data.dateTz is the existing time in building time\n // this.data.pendingDateTz is the new time in building time\n const dateTz = this.data.dateTz;\n this.dateString = dateBuildingFormatString(dateTz);\n this.timeString = startEndTimeWithZoneFormatString(dateTz, dateTz.addValue({ minutes: this.data.duration }));\n this.durationString = humaniseDuration(this.data.duration);\n\n const pendingDateTz = this.data.pendingDateTz;\n this.pendingDateString = dateBuildingFormatString(pendingDateTz);\n this.pendingTimeString = startEndTimeWithZoneFormatString(pendingDateTz, pendingDateTz.addValue({ minutes: this.data.pendingDuration }));\n this.pendingDurationString = humaniseDuration(this.data.pendingDuration);\n this.fromDateTz = closestToTimeSlotTz(pendingDateTz, 15); // building value\n\n const setup = {};\n setup[this.data.space.email] = this.data?.currentBooking?.setup[this.data?.space?.email] || 0;\n const breakdown = {};\n breakdown[this.data.space.email] = this.data?.currentBooking?.setup[this.data?.space?.email] || 0;\n\n this.updateCoachmarkTimes(this.data?.space?.timezone);\n\n const mockBooking = new Booking({\n id: this.data.bookingId,\n start_epoch: this.data.pendingDateTz.seconds,\n end_epoch: this.data.pendingDateTz.addValue({ minutes: this.data.pendingDuration }).seconds,\n room: this.data.space,\n setup,\n breakdown, \n });\n\n checkCollisions(\n this._spaces,\n mockBooking\n ).then((bookable: boolean) => {\n this.available = bookable;\n }).catch(() => {\n this.available = false;\n });\n }\n\n public closeModal() {\n this.dialogRef.close(null);\n }\n\n public updateDatePickerValue(dateTz: DateTZ) {\n const pending_date: DateTZ = this.formGroup.value.dateTz\n const day = pending_date.setValue({ \n day: dateTz.dateDay,\n month: dateTz.dateMonth,\n year: dateTz.dateYear\n });\n this.setValue(day, this.formGroup.controls.dateTz);\n }\n\n public setValue($value, formControl: AbstractControl) {\n // valid options are in building time\n formControl.setValue($value); // bulding time\n this.submitForm.emit(this.formGroup.value);\n }\n\n public confirm() {\n const setup = {};\n setup[this.data.space.email] = this.data?.currentBooking?.setup[this.data?.space?.email] || 0;\n const breakdown = {};\n breakdown[this.data.space.email] = this.data?.currentBooking?.setup[this.data?.space?.email] || 0;\n\n const buildingDate = convertLocalTimestampToTimezonedDateTz(this.data.pendingDateTz.ms, this.data?.currentBooking?.timezone);\n const mockBooking = new Booking({\n id: this.data.bookingId,\n start_epoch: buildingDate.seconds,\n end_epoch: buildingDate.addValue({ minutes: this.data.pendingDuration }),\n room: this.data.space,\n setup,\n breakdown, \n });\n\n checkCollisions(\n this._spaces,\n mockBooking\n ).then((bookable: boolean) => {\n this.available = bookable;\n this.dialogRef.close({\n ...this.formGroup.value,\n }); \n }).catch(() => {\n this.available = false;\n });\n }\n\n private updateCoachmarkTimes(timezone: string) {\n if (timezone) {\n this.buildingTimezone = timezone;\n const localizedStartDate = this.formGroup.value.dateTz;\n const localizedEndDate = localizedStartDate.addValue({ minutes: this.formGroup.value.duration });\n this.localStart = localizedStartDate.formatLocalDate(\"h:mma\");\n this.localEnd = localizedEndDate.formatLocalDate(\"h:mma\");\n } else {\n this.buildingTimezone = this.localTimezone.slice(0);\n this.localStart = \"\";\n this.localEnd = \"\";\n } \n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n Input,\n OnInit,\n OnChanges,\n ElementRef,\n ViewChild,\n EventEmitter,\n Output,\n SimpleChanges,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { fromEvent, Subject, BehaviorSubject, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { throttleTime, tap } from 'rxjs/operators';\nimport { CalendarEvent, CalendarEventTimesChangedEvent } from 'angular-calendar';\nimport { BaseClass, durationHumanized, isLessThanBreakpoint } from '@mckinsey-converge/base';\nimport {\n Booking,\n Building,\n BuildingLevel,\n Space,\n User,\n rulesForSpace,\n SpaceRules,\n} from '@mckinsey-converge/data-common';\nimport { generateFeedbackUrl, Urls } from '../../utilities/urls';\nimport { TopBarHeaderMode } from '../room-location-preview/room-location-preview.component';\nimport { RoomAvailabilityPreviewModalComponent } from '../room-availability-preview-modal/room-availability-preview-modal.component';\nimport {\n DateNow,\n DateTZ,\n convertLocalTimestampToTimezonedDateTz,\n convertTimezonedTimestampToLocalDateTz,\n timezoneOffset,\n} from '@mckinsey-converge/date-tz';\nimport { utcToZonedTime } from 'date-fns-tz';\nimport { FormControl } from '@angular/forms';\nimport { DateTime } from 'luxon';\n\nconst WEEKEND_DAYS = [6, 7];\nconst colors = {\n grey: {\n secondary: '#D2D2D2',\n primary: '#A19F9F',\n },\n blue: {\n secondary: '#C0DBF5',\n primary: '#00A9F4',\n },\n red: {\n secondary: '#EB5757',\n primary: '#EB5757',\n },\n};\n\ninterface CalendarClickEvent {\n date: Date;\n}\n\nexport interface BookingBumper {\n top?: string;\n bottom?: string;\n height: string;\n backgroundColor: string;\n}\nexport interface BookingBumpers {\n top: BookingBumper;\n bottom: BookingBumper;\n}\n\nexport type BookingPlus = Booking & { start: number; end: number }; // R--- why again?\nexport type CalendarEventPlus = CalendarEvent & { bumper?: BookingBumpers; booking?: Booking };\n\n@Component({\n selector: 'room-availability-preview',\n templateUrl: './room-availability-preview.component.html',\n styleUrls: ['./room-availability-preview.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RoomAvailabilityPreviewComponent extends BaseClass implements OnInit, OnChanges {\n @ViewChild('scrollContainer') scrollContainer: ElementRef;\n\n @Input() public alternativeWeekStartDateTz: DateTZ;\n // Used when editing a booking\n @Input() public bookingId?: string;\n @Input() public bookings: BookingPlus[];\n /** retain as mutable */\n @Input() public building: Building;\n // R--- could probably use the currentBooking ID edit,\n // The bookingId was an after thought\n @Input() public currentBooking: Booking;\n @Input() public currentUser: User;\n @Input() public dateTz: DateTZ;\n @Input() public duration: number;\n @Input() public expanded: boolean;\n @Input() public level: BuildingLevel;\n /** The theme to use **/\n @Input() public mode: TopBarHeaderMode = TopBarHeaderMode.Light;\n @Input() public space: Space;\n // @Input() public timezone: string;\n\n @Output() public confirmChanges: EventEmitter = new EventEmitter();\n @Output() public handleExpand: EventEmitter = new EventEmitter();\n @Output() public updateCalendarWeekView: EventEmitter = new EventEmitter();\n @Output() public warnIfItHasConflict: EventEmitter = new EventEmitter();\n\n constructor(public dialog: MatDialog) {\n super();\n }\n\n public breakpoint = 768;\n public mobile = false;\n public showDatePicker = false;\n public events: CalendarEventPlus[] = [];\n public dayStartHour: number;\n public dayEndHour: number;\n public viewDateTz: DateTZ;\n public weekViewDateTz: DateTZ;\n public weekViewRangeText: string;\n public showWeekend: boolean = false;\n public currentPage: string;\n public calendarPopupValue = new BehaviorSubject(DateNow(new Date()));\n public pendingChange: boolean = false;\n public pendingDateTz: DateTZ;\n public pendingDuration: number;\n public eventSnapSize: number = 15;\n public dayRefresh: Subject = new Subject();\n public weekRefresh: Subject = new Subject();\n public addMarginOnConflict: boolean = false; // helps to add html class to adjust margin top in case of QR code scan conflict\n public event: CalendarEventPlus = {\n start: new Date(),\n end: new Date(),\n title: '',\n color: colors.blue,\n cssClass: 'selected',\n actions: null,\n resizable: {\n beforeStart: false,\n afterEnd: false,\n },\n draggable: false,\n };\n\n public get timezone(): string {\n return this.dateTz.building_tz;\n }\n\n public get one_day_in_millis() {\n return 86400000;\n }\n\n public get thirty_minutes_in_millis() {\n return 1800000;\n }\n public rules: SpaceRules;\n public modal_data: any = {};\n public scrollFired: boolean = false;\n\n // Values to display a span on the date picker, but the date picker doesn't support this.\n public date_span = {\n start: 0,\n end: 0,\n };\n\n // I can't think of any reason the calendar widget needs to go back further than 2 years, if even that.\n public fromDateTz = DateNow(new Date()).subtractValue({ years: 2 });\n\n public dateControl = new FormControl(new Date().valueOf());\n\n public isEventDate(d: CalendarClickEvent) {\n const date = new DateTZ({ date: d.date.valueOf() }); // local time I think.. problem TODO\n return this.pendingDateTz.isSameDate(date, 'day');\n }\n\n public get inputDate(): Observable {\n return this.calendarPopupValue.pipe(map((d) => d));\n }\n\n public get feedback() {\n return generateFeedbackUrl(this.currentPage);\n }\n\n public ngOnInit(): void {\n // R--- retrun to document\n this.mobile = isLessThanBreakpoint(this.breakpoint);\n this.pendingDateTz = this.dateTz.clone();\n const date = this.dateTz.clone();\n const currentBookingStartDate = this.currentBooking\n ? this.currentBooking.startDateTz.addValue({ seconds: 0 })\n : date;\n this.alternativeWeekStartDateTz = date.startOfValue('week').startOfValue('day');\n\n // Not sure if this is correct\n this.weekViewDateTz = this.alternativeWeekStartDateTz.clone();\n\n this.calendarCenter();\n this.pendingDuration = this.duration;\n this.viewDateTz = new DateTZ({ \n date: DateTime.fromISO(this.pendingDateTz.formatDate('yyyy-MM-dd'))\n }).setValue({ hour: 12, minute: 0 });\n this.setCalendarValue(this.pendingDateTz);\n this.showWeekend =\n WEEKEND_DAYS.includes(currentBookingStartDate.dateWeekday) ||\n WEEKEND_DAYS.includes(date.dateWeekday);\n this.setupEventName();\n this.transformBookings();\n fromEvent(window, 'resize')\n .pipe(throttleTime(500))\n .pipe(\n tap({\n next: (val) => {\n const target = val.target as Window;\n this.mobile = target.innerWidth < this.breakpoint;\n this.expanded ? this.weekRefresh.next() : this.dayRefresh.next();\n },\n })\n )\n .subscribe();\n\n this.rules = rulesForSpace({\n time: this.dateTz.ms,\n duration: this.duration,\n user: this.currentUser,\n rules: this.building?.booking_rules,\n space: this.space,\n });\n\n // Update the display when the screen resizes.\n fromEvent(window, 'resize')\n .pipe(throttleTime(500))\n .pipe(\n tap({\n next: (val) => {\n this.mobile = isLessThanBreakpoint(this.breakpoint);\n this.calendarCenter();\n this.setDislayValues();\n },\n })\n )\n .subscribe();\n this.dateControl.setValue(this.dateTz);\n this.transformBookings();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.expanded) {\n // set if the event is editable\n this.event.draggable = this.expanded;\n this.event.resizable = {\n beforeStart: this.expanded,\n afterEnd: this.expanded,\n };\n const date = this.dateTz;\n this.setCalendarValue(date);\n }\n\n if (this.dayStartHour) this.scrollTo();\n\n if (!this.pendingDateTz) return;\n\n if (changes.bookings || changes.expanded) {\n this.transformBookings();\n }\n if (changes.alternativeWeekStartDateTz) {\n this.setDislayValues();\n }\n if (changes.expanded) {\n this.expanded ? this.weekRefresh.next() : this.dayRefresh.next();\n }\n }\n\n public setDislayValues() {\n const tz_offset = timezoneOffset(this.alternativeWeekStartDateTz.building_tz).hours\n const week_start_date = this.alternativeWeekStartDateTz.subtractValue({hours: tz_offset}).clone(); // Operation needed to trick the mwl-calendar-week-view to display the correct day if the day changes between timezones \n this.weekViewDateTz = this.weekViewDateTz || this.alternativeWeekStartDateTz.clone();\n let week_view_date = this.weekViewDateTz.startOfValue('week'); // new DateTZ({date: this.weekViewDate?.valueOf()}).startOfValue('week')\n if (!this.showWeekend) {\n // Advance from Sunday to Monday\n week_view_date = week_view_date.addValue({ days: 1 });\n }\n\n if (this.mobile) {\n this.weekViewDateTz = week_start_date\n this.weekViewRangeText = `${this.weekViewDateTz.formatDate('d MMMM')}`;\n this.calendarPopupValue.next(this.weekViewDateTz);\n } else {\n this.weekViewDateTz = week_start_date.addValue({ days: this.showWeekend ? 0 : 1 }); // new Date(week_start_date.addValue({ days: this.showWeekend ? 0 : 1 }).ms);\n this.weekViewRangeText = `${week_view_date.formatDate('d MMMM')} - ${week_view_date\n .addValue({ days: this.showWeekend ? 6 : 4 })\n .formatDate('d MMMM yyyy')}`;\n this.calendarPopupValue.next(week_view_date);\n }\n }\n\n public getBumpers(booking: Booking, selected: boolean = false) {\n const email = booking.space.email || this.space.email;\n const setup = booking.setup[email] ? booking.setup[email] / 60 : 0;\n const breakdown = booking.breakdown[email] ? booking.breakdown[email] / 60 : 0;\n\n return {\n top: {\n top: `-${setup - 1}px`,\n height: `${setup}px`,\n backgroundColor: selected ? colors.blue.secondary : colors.grey.secondary,\n },\n bottom: {\n bottom: `-${breakdown - 1}px`,\n height: `${breakdown}px`,\n backgroundColor: selected ? colors.blue.secondary : colors.grey.secondary,\n },\n };\n }\n\n public setupEventName() {\n this.setDislayValues();\n const pending_date = this.pendingDateTz.clone();\n const start_date = pending_date.setValue({ second: 0, millisecond: 0 });\n this.event.start = start_date.JSDate;\n this.event.end = start_date.addValue({ minutes: this.pendingDuration }).JSDate;\n const startHour = parseInt(pending_date.formatDate('H'), 10);\n\n if (startHour === 0) {\n this.dayStartHour = startHour;\n } else if (startHour < 6) {\n const offset = startHour > 3 ? startHour - 2 : startHour;\n this.dayStartHour = startHour - offset;\n } else {\n // The min of 18 is needed so start times after 6pm\n // don't push the calendar view beyond midnight.\n const offset = Math.min(18, startHour - 3);\n this.dayStartHour = offset;\n }\n\n if (!this.scrollFired && this.dayStartHour) {\n this.scrollTo();\n }\n\n this.dayEndHour = Math.max(24, this.dayStartHour + 6);\n this.event.title = `${pending_date\n .formatDate('h:mma')\n .toLocaleLowerCase()} (${durationHumanized(this.pendingDuration, true)})`;\n this.event.cssClass = `selected ${this.showWeekend ? 'show-weekend' : ''} ${\n this.mobile && this.expanded ? 'mobile' : ''\n } `;\n\n if (this.currentBooking) {\n this.event.bumper = this.getBumpers(this.currentBooking);\n this.event.booking = this.currentBooking;\n }\n this.expanded ? this.weekRefresh.next() : this.dayRefresh.next();\n }\n\n public transformBookings() {\n this.calendarSpan();\n const events = [];\n if (Array.isArray(this.bookings)) {\n this.bookings.forEach((raw_booking) => {\n const booking = new Booking(raw_booking);\n const { mode, duration } = this.displayClass(\n booking.startDateTz.ms,\n booking.endDateTz.ms\n );\n\n // back off a ms when end of day to avoid all day wrapping to next day.\n let end = booking.endDateTz;\n const endTime = booking.endDateTz;\n if (endTime.minutes === 0 && endTime.seconds === 0) {\n // back off a ms when the end of day to avoid all day wrapping to next day.\n end = booking.endDateTz.subtractValue({ seconds: 1 });\n }\n\n // When editing skip over the current booking\n if (booking.id === this.bookingId) return;\n\n const utcStart = booking.startDateTz; // building time\n const utcEnd = end; // building time\n // adjust the time to appear as the same time locally ( but technically incorrect for building timezone )\n const adjustedStartDate = utcToZonedTime(utcStart.ms, booking.timezone); // return local time\n const adjustedEndDate = utcToZonedTime(utcEnd.ms, booking.timezone); // return local time\n\n events.push({\n start: adjustedStartDate,\n end: adjustedEndDate,\n title: `Booked by ${booking.booker['name']}`,\n color: colors.grey,\n actions: null,\n cssClass: `booked ${this.mobile && 'mobile'} ${\n this.showWeekend ? 'show-weekend' : ''\n } ${mode}`,\n bumper: this.getBumpers(booking),\n resizable: {\n beforeStart: false,\n afterEnd: false,\n },\n draggable: false,\n booking,\n });\n });\n }\n\n const { mode, duration } = this.displayClass(\n this.event.start.getTime(),\n this.event.end.getTime()\n );\n const event = Object.assign({}, this.event);\n const endTime = new DateTZ({ date: this.event.start.valueOf() }).addValue({\n minutes: this.pendingDuration,\n }); // building time\n if (endTime.minutes === 0 && endTime.second === 0) {\n // back off a ms when the end of day to avoid all day wrapping to next day.\n event.end = endTime.subtractValue({ milliseconds: 1 }).JSDate; // building time\n }\n\n // adjust the time to appear as the same time locally ( but technically incorrect for building timezone )\n // will need to adjust the other way with drag and drop and click actions.\n event.start = utcToZonedTime(event.start, this.timezone); // local time\n event.end = utcToZonedTime(event.end, this.timezone); // local time\n\n event.cssClass = `selected ${this.mobile && this.expanded ? 'mobile' : ''} ${mode}`;\n if (this.currentBooking) {\n event.bumper = this.getBumpers(this.currentBooking, true);\n event.booking = this.currentBooking;\n }\n\n events.push(event);\n this.events = events.slice();\n this.updateTileColor();\n }\n\n public updateTileColor() {\n const pending_date = this.pendingDateTz.clone();\n const start = pending_date.setValue({ second: 0, millisecond: 0 });\n const end = start.addValue({ minutes: this.pendingDuration });\n const booked = this.events.filter((e) => !e.draggable); // this.events are in local time\n const conflict = this.hasConflict(start, end, booked);\n const isEvents = this.events.filter((e) => e.draggable);\n if(isEvents.length ) {\n isEvents[0].color = conflict ? colors.red : colors.blue;\n this.addMarginOnConflict = conflict ? true : false;\n \n } \n !this.expanded && this.warnIfItHasConflict.emit({room: this.space, hasConflict: conflict});\n }\n public displayClass(start: number, end: number) {\n const duration = end - start;\n return {\n duration,\n mode: duration > this.thirty_minutes_in_millis ? 'extended' : 'minimal',\n };\n }\n\n public setCalendarValue(dateTz: DateTZ) {\n let toDate = DateNow().startOfValue('minute');\n if (dateTz) {\n toDate = dateTz.startOfValue('minute');\n }\n if (!this.mobile && toDate.dateWeekday !== 7) {\n toDate = toDate.startOfValue('week');\n }\n this.updateCalendarWeekView.emit(toDate);\n this.weekRefresh.next();\n this.alternativeWeekStartDateTz = toDate;\n this.setDislayValues();\n }\n\n /**\n * Convert the true bulding based time object to a timestamp skewed to the local time\n *\n * @param buildingTz - DateTZ object of time in bulding timezone\n * @returns number - timestamp in local time skewed from bulding time\n */\n public convertTimezonedValueForCalendar(buildingTz: DateTZ) {\n return convertTimezonedTimestampToLocalDateTz(buildingTz.ms, this.timezone).ms;\n }\n\n public hasConflict(startTz, endTz, booked) {\n // Convert the start and end building times to the local timezone for comparison with the localized bookings.\n const localizedStartTime = startTz.ms;\n const localizedEndTime = endTz.ms;\n let email = this.space?.email || this.currentBooking?.room?.email;\n return booked.some((b) => {\n email = email || b.booking?.room?.email;\n // Booking here are local time to render on the calendar correctly\n const setup = b.booking?.setup[email] || 0;\n // R--- This weird augmented booking with start and end needs to be with DateTZ and a getter when ms is needed.\n const bookingStartTime = new DateTZ({ date: b.start.valueOf() }); // local times\n const bookingEndTime = new DateTZ({ date: b.end.valueOf() }); // local times\n const bstart = bookingStartTime.subtractValue({ seconds: setup }).ms;\n const breakdown = b.booking?.breakdown[email] || 0;\n const bend = bookingEndTime.addValue({ seconds: breakdown }).ms;\n\n if (\n (localizedStartTime >= bstart && localizedStartTime < bend) || // booking starts durring a meeting\n (localizedStartTime <= bstart && localizedEndTime > bstart) || // booking ends durring meeting\n (localizedStartTime >= bstart && localizedEndTime <= bend) || // booking starts and ends durring a meeting\n (localizedStartTime <= bstart && localizedEndTime >= bend) // booking overlaps entire meeting\n ) {\n return b.booking?.id !== this.currentBooking?.id;\n }\n return false;\n });\n }\n\n public eventTimesChanged({ event, newStart, newEnd }: CalendarEventTimesChangedEvent): void {\n const s = convertLocalTimestampToTimezonedDateTz(\n newStart.valueOf(),\n this.timezone\n );\n if (s.ms < Date.now()) return;\n // newStart and newEnd are local times from the calendar component\n // merging in with localized bookings in this.events\n this.events = this.events.map((iEvent) => {\n if (event.id && iEvent.id === event.id) {\n return {\n ...event,\n start: newStart,\n end: newEnd,\n };\n }\n return iEvent;\n }); // local times\n\n let buildingStartDateTz = new DateTZ(\n { date: newStart.valueOf()}\n );\n let buildingEndDateTz = new DateTZ(\n { date: Math.ceil(newEnd.valueOf()/900000)*900000 } //For latest bug in CNG-309, make sure end time follows a 15-min interval\n );\n\n // Clear out the seconds and miliseconds to avoid collision by seconds.\n buildingStartDateTz.setValue({ millisecond: 0, second: 0 });\n\n if (buildingStartDateTz < DateNow(new Date())) {\n // compare building time to now\n // Abandon updates if the past\n this.transformBookings();\n return;\n }\n\n let pendingDuration = Math.floor(\n (buildingEndDateTz.ms - buildingStartDateTz.ms) / 60 / 1000\n );\n // Make adjustments to the time and duration so the snap to behavior aligns\n // with the Mckinsey time and duration rules.\n const new_start = buildingStartDateTz.clone(); //new DateTZ({date: buildingNewStart.getTime()}); // building time\n if (pendingDuration >= 60) {\n // check that duration is inc of 1/2 hr\n const d = pendingDuration % 30;\n // if (d) {\n // pendingDuration = Math.floor(pendingDuration + (30 - d));\n // buildingEndDateTz = new_start.addValue({ minutes: pendingDuration }); // building time\n // }\n // check that the start time is 1/2 hr\n const m = parseInt(new_start.formatDate('m'), 10);\n const md = m % 30;\n // if (md) {\n // buildingStartDateTz = new_start.addValue({ minutes: md }); // building time\n // buildingEndDateTz = new_start.addValue({ minutes: pendingDuration }); // building time\n // }\n // Update snap to rules\n // this.eventSnapSize = 30; //done for CNG-309\n } else {\n // check that duration is inc of 1/4 hr\n const d = pendingDuration % 15;\n if (d) {\n // pendingDuration = Math.floor(pendingDuration + (15 - d));\n // buildingEndDateTz = new_start.addValue({ minutes: pendingDuration }); // building time\n }\n this.eventSnapSize = 15;\n }\n\n // Drag and Drop / Resize duration\n const dnd_duration = buildingEndDateTz.ms - buildingStartDateTz.ms;\n if (dnd_duration >= this.one_day_in_millis - 1) {\n // Add that millisecond back in so the angular calender drag and drop snapping still works.\n buildingEndDateTz = buildingEndDateTz.addValue({ milliseconds: 1 });\n }\n\n if (this.rules?.max_length) {\n if (dnd_duration / 60000 > this.rules?.max_length) {\n // Abandon updates if exceeeds max duration\n this.transformBookings();\n return;\n }\n }\n\n // Setup values for conflict checking, add on the setup and breakdown times form comparison\n let conflictCheckStartTime = buildingStartDateTz.clone();\n let conflictCheckEndTime = buildingEndDateTz.clone();\n // Setup and Breakdown\n if (this.currentBooking) {\n const setup = this.currentBooking.setup[this.currentBooking.space.email] || 0;\n if (setup) {\n const start = buildingStartDateTz.clone();\n conflictCheckStartTime = start.subtractValue({ seconds: setup });\n }\n const breakdown = this.currentBooking.breakdown[this.currentBooking.space.email] || 0;\n if (breakdown) {\n const end = buildingEndDateTz.subtractValue({ seconds: 1 });\n conflictCheckEndTime = end.addValue({ minutes: breakdown });\n }\n }\n\n // check existing events\n const start = conflictCheckStartTime;\n const end = conflictCheckEndTime;\n const booked = this.events.filter((e) => e.draggable === false); // this.events are in local time\n const conflict = this.hasConflict(start, end, booked);\n this.dateControl.setValue(start);\n if (conflict) {\n // Abandon updates if conflict\n this.transformBookings();\n return;\n }\n\n // check if the time or duration has changed\n if (this.pendingDateTz !== buildingStartDateTz) {\n this.pendingChange = true;\n } else if (this.pendingDuration !== pendingDuration) {\n this.pendingChange = true;\n }\n\n // set the new Pending Date\n this.pendingDateTz = convertLocalTimestampToTimezonedDateTz(buildingStartDateTz.ms, this.timezone); // building time\n this.pendingDuration = pendingDuration;\n\n this.setupEventName();\n this.transformBookings();\n }\n\n public hourClicked(event: CalendarClickEvent) {\n // convert the calender local input to the building times\n const buildingStartDate = convertLocalTimestampToTimezonedDateTz(\n event.date.valueOf(),\n this.timezone\n ); // return building time\n let startTz = buildingStartDate.clone();\n let endTz = startTz.addValue({ minutes: this.pendingDuration });\n\n if (buildingStartDate.ms < Date.now()) {\n // compare building time to now\n // Abandon past events\n return;\n }\n\n // this.pendingDate is in building time\n if (this.pendingDateTz.ms !== startTz.ms) {\n // comparing building to building\n // Setup and Breakdown\n if (this.currentBooking) {\n const setup = this.currentBooking.setup[this.currentBooking.space.email] || 0;\n if (setup) {\n startTz = startTz.subtractValue({ seconds: setup });\n }\n const breakdown =\n this.currentBooking.breakdown[this.currentBooking.space.email] || 0;\n if (breakdown) {\n endTz = endTz.addValue({ minutes: breakdown });\n }\n }\n\n // check existing events\n const booked = this.events.filter((e) => e.draggable === false);\n // building start and end time but localized bookings\n const conflict = this.hasConflict(startTz, endTz, booked);\n if (conflict) {\n // Abandon updates if conflict\n this.transformBookings();\n return;\n }\n\n this.pendingChange = true;\n this.pendingDateTz = buildingStartDate; // building time\n\n this.setupEventName();\n this.transformBookings();\n }\n }\n\n public displayConfirmationModal() {\n this.modal_data = {\n pendingDateTz: this.pendingDateTz, // building time , new time\n pendingDuration: this.pendingDuration,\n dateTz: this.dateTz, // building time, existing time\n duration: this.duration,\n space: new Space(this.space),\n rules: this.rules,\n bookingId: this.bookingId,\n currentBooking: this.currentBooking,\n };\n\n const dialogRef = this.dialog.open(RoomAvailabilityPreviewModalComponent, {\n data: this.modal_data,\n panelClass: 'mck-modal',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n\n dialogRef.componentInstance.submitForm.subscribe((d: any) => {\n // Apply the confirmed changes\n this.pendingChange = true;\n this.pendingDateTz = d.dateTz;\n this.pendingDuration = d.duration;\n\n dialogRef.componentInstance.applyChanges({\n dateTz: d.dateTz,\n duration: this.pendingDuration,\n pendingDateTz: this.pendingDateTz,\n pendingDuration: this.pendingDuration,\n });\n this.setupEventName();\n this.transformBookings();\n // Change View\n this.setCalendarValue(d.dateTz);\n });\n\n dialogRef.afterClosed().subscribe((d) => {\n // Update the current with pending record\n if (d) {\n // convert the local input values returned into the same time in the building timezone\n const buildingDate = convertLocalTimestampToTimezonedDateTz(\n d.dateTz.ms,\n this.timezone\n );\n this.dateTz = buildingDate;\n this.duration = d.duration;\n this.viewDateTz = new DateTZ({ \n date: DateTime.fromISO(buildingDate.formatDate('yyyy-MM-dd'))\n }).setValue({ hour: 12, minute: 0 })\n this.pendingChange = false;\n this.confirmChanges.emit({ ...d, mobile: this.mobile, save: true });\n } else {\n // this is ok\n const md = this.modal_data;\n this.dateTz = md.dateTz;\n this.duration = md.duration;\n this.pendingDateTz = md.dateTz;\n this.pendingDuration = md.duration;\n this.viewDateTz = new DateTZ({ \n date: DateTime.fromISO(md.dateTz.formatDate('yyyy-MM-dd'))\n }).setValue({ hour: 12, minute: 0 })\n this.pendingChange = false;\n // This is reverting the changes\n this.confirmChanges.emit({\n dateTz: md.dateTz,\n duration: this.duration,\n mobile: this.mobile,\n save: !!d,\n });\n this.setupEventName();\n this.transformBookings();\n this.weekRefresh.next();\n this.alternativeWeekStartDateTz = this.viewDateTz;\n this.setDislayValues();\n }\n });\n }\n\n public goToHelp() {\n window.open(Urls.Help);\n }\n\n public scrollTo() {\n if (this.scrollFired) return;\n this.timeout(\n 'scroll_to',\n () => {\n const ele = document.getElementById('calendarScrollContainer');\n if (ele) {\n ele.scrollTo({\n top: this.dayStartHour * 64,\n left: 0,\n behavior: 'smooth',\n });\n this.scrollFired = true;\n }\n },\n 500\n );\n }\n\n public toggleDatePicker() {\n this.showDatePicker = !this.showDatePicker;\n }\n\n public collapse() {\n this.handleExpand.emit(false);\n // Reset to the initial view\n this.pendingDateTz = this.dateTz; // = new Date(this.date);\n this.pendingDuration = this.duration;\n this.viewDateTz = new DateTZ({ \n date: DateTime.fromISO(this.dateTz.formatDate('yyyy-MM-dd'))\n }).setValue({ hour: 12, minute: 0 })\n this.pendingChange = false;\n this.setupEventName();\n this.transformBookings();\n this.dayRefresh.next();\n }\n\n public calendarBack() {\n let today = this.alternativeWeekStartDateTz; // new DateTZ({date: this.alternativeWeekStartDate});\n if (this.mobile) {\n today = today.subtractValue({ days: 1 });\n } else {\n today = today.subtractValue({ weeks: 1 }).startOfValue('day');\n }\n this.updateCalendarWeekView.emit(today);\n this.weekRefresh.next();\n this.alternativeWeekStartDateTz = today;\n this.setDislayValues();\n }\n\n public calendarSpan() {\n let today = this.pendingDateTz; // new DateTZ({date: this.pendingDate.valueOf()});\n if (this.mobile || !this.expanded) {\n this.date_span.start = today.startOfValue('day').ms;\n this.date_span.end = today.endOfValue('day').ms;\n } else {\n this.date_span.start = today.startOfValue('week').ms;\n this.date_span.end = today.endOfValue('week').ms;\n }\n }\n\n public calendarCenter() {\n let today = this.pendingDateTz.startOfValue('day');\n if (!this.mobile) {\n today = today.startOfValue('week');\n }\n\n this.updateCalendarWeekView.emit(today);\n this.weekRefresh.next();\n this.alternativeWeekStartDateTz = today;\n this.setDislayValues();\n }\n\n public calendarForward() {\n let today = this.alternativeWeekStartDateTz // new DateTZ({date: this.alternativeWeekStartDate});\n if (this.mobile) {\n today = today.addValue({ days: 1 });\n } else {\n today = today.addValue({ weeks: 1 }).startOfValue('day');\n }\n this.updateCalendarWeekView.emit(today);\n this.weekRefresh.next();\n this.alternativeWeekStartDateTz = today;\n this.setDislayValues();\n }\n\n public toggleWeekend() {\n this.showWeekend = !this.showWeekend;\n this.setupEventName();\n }\n}\n","
\n
\n \n \n
\n
\n \n \n
\n
\n
\n

Room Availability

\n

{{space.local_name}}

\n

{{building?.name}}, {{level?.name}}, {{building?.address}}

\n
\n
\n
\n
\n \n \n \n
\n
\n {{weekViewRangeText}}\n \n \n
\n \n Show Weekend\n \n
\n
\n
\n \n\n \n
\n \n {{ day.date | calendarDate:'weekViewColumnHeader':locale }} {{ day.date | calendarDate:'weekViewColumnSubHeader':locale }}\n

{{ isEventDate(day) ? '(Current Selection)' : '' }}

\n
\n
\n \n\n \n \n
\n
\n
\n
\n \n \n &ngsp;\n \n \n
\n \n
\n
\n
\n\n
\n
\n \n \n
\n
\n \n\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n OnChanges,\n Output,\n ViewContainerRef,\n ViewChild\n} from '@angular/core';\nimport {\n AbstractControl,\n FormControl,\n FormGroup,\n FormGroupDirective,\n Validators\n} from '@angular/forms';\nimport {\n BehaviorSubject,\n Observable,\n of,\n Subject\n} from 'rxjs';\nimport {\n catchError,\n debounceTime,\n distinctUntilChanged,\n first,\n map,\n switchMap,\n take,\n withLatestFrom,\n} from 'rxjs/operators';\nimport {\n Store\n} from '@ngrx/store';\nimport {\n checkCollisions,\n Booking,\n User,\n UsersService,\n BookingFormData,\n selectActiveForm,\n SpacesService,\n} from '@mckinsey-converge/data-common';\nimport {\n matchToHighlight\n} from '@mckinsey-converge/base';\n\nimport {\n BaseTemplateComponent,\n SelectOption\n} from '@mckinsey-converge/ui';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\n@Component({\n selector: 'app-room-booking-details-form',\n templateUrl: './room-booking-details-form.component.html',\n styleUrls: ['./room-booking-details-form.component.scss']\n})\nexport class RoomBookingDetailsFormComponent extends BaseTemplateComponent implements OnInit, OnChanges {\n @ViewChild('formRef')\n public formRef: FormGroupDirective;\n /** Number of characters needed before a search will start */\n @Input() public limit = 3;\n /** When the value changes, the form is submitted */\n @Input() public triggerSubmit = '';\n /** Need booking details */\n @Input() public booking: Booking = null;\n /** Data returned to parent */\n @Output() public submitForm = new EventEmitter();\n /** Data returned to parent */\n @Output() public validateForm = new EventEmitter();\n /** Current User */\n public currentUser: User;\n /** Host list to display */\n public host_list: User[];\n /** User list to display from the Attendees search */\n public user_list: User[];\n /** Whether user list is loading */\n public loading: boolean;\n /** Whether to show the attendees hint */\n public showHint = false;\n /** Attendee Input / Search String */\n public searchString: string;\n /** List of users from an API search */\n public searchResults: Observable;\n /** Subject holding the value of the search */\n public searchSubject = new Subject();\n /** Host field options */\n public hostOptions = [];\n /** Attendees options */\n public options = new BehaviorSubject[]>([]);\n /** Selected Attendees */\n public selectedOptions = new BehaviorSubject[]>([]);\n public selectedUsers = new BehaviorSubject[]>([]);\n public needs_charge_code = false;\n public has_delegate = false;\n public available: boolean = null;\n public notesHandle = null;\n public noteValidationClass = '';\n public selectedCompanies = new BehaviorSubject[]>([]);\n public companyOptions = new BehaviorSubject[]>([]);\n\n /** Data collected on this form */\n public bookingFormGroup = new FormGroup({\n organiser: new FormControl(),\n title: new FormControl('', [ Validators.minLength(1)]), //Validators.pattern(\"[^=`~!@#$%*{};:'\\\",_.<>]*\")\n attendees: new FormControl(),\n code: new FormControl('', [Validators.minLength(4), Validators.pattern(/^[a-zA-Z0-9]*$/)]),\n notes: new FormControl(),\n head_count: new FormControl(1, [Validators.required, Validators.min(1)]),\n user_list: new FormControl(),\n host_list: new FormControl(),\n company: new FormControl(),\n opt_out: new FormControl()\n });\n action: string;\n // Indecates that processing request to check availability of breakdown if special requirement being added by user\n checkingBreakdown: boolean = false;\n\n public get invalid_charge_error(): string {\n if (this.bookingFormGroup.controls.code.errors?.required) {\n return 'Charge Code is required';\n }\n if (this.bookingFormGroup.controls.code.errors?.minlength) {\n return 'Charge Code must be at least four characters';\n }\n if (this.bookingFormGroup.controls.code.errors?.pattern) {\n return 'Charge Code cannot contain spaces or special characters';\n }\n return '';\n }\n\n public get headCountControl(): AbstractControl {\n return this.bookingFormGroup.get('head_count');\n }\n\n constructor(\n private _spaces: SpacesService,\n private _snackBar: MatSnackBar,\n private store: Store,\n vcRef: ViewContainerRef,\n private _users: UsersService) {\n super(vcRef);\n }\n\n public ngOnInit(): void {\n super.ngOnInit();\n this.subscription('currentUser', this.store.select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n })\n );\n\n this._users.initialised.pipe(first((_) => _)).subscribe(() => {\n const user: User = this._users.current;\n const delegates = user.delegates.map((del) => {\n // the kludgy or new User is for when the user service isn't ready.\n const ifUser = this._users.find(del.email);\n return ifUser ? \n new User({ email: ifUser.email, name: ifUser.name, opt_out: del.opt_out }) : \n new User({ email: del.email, name: del.email.split('@')[0].split('_').map((s) => s.charAt(0).toUpperCase() + s.substring(1))\n .join(' ')\n , opt_out: del.opt_out });\n\n // (del) => new User({ email: del.email, name: del.email.split('@')[0].split('_').join(' '), opt_out: del.opt_out })\n });\n if (delegates.length) {\n this.has_delegate = true;\n }\n this.host_list = [user].concat(delegates);\n this.hostOptions = this.host_list.map(h => ({ display: h.name, value: h.email, meta: { user: h } }));\n });\n\n // if we have an active form, refill the information here once.\n this.subscription('reduxData', this.store.select(selectActiveForm)\n .pipe(take(1))\n .subscribe((next: BookingFormData | undefined) => {\n if (next) {\n // Get the Equipment charge code mandatory requirement\n const { filters, settings } = next.selectedRoom?.space;\n const roomBasedEqCode = filters?.equipment_code || settings?.equipment_code;\n const officeBasedEqCode = next.selectedRoom?.building?.required?.equipment_code;\n this.needs_charge_code = roomBasedEqCode !== undefined ? roomBasedEqCode : officeBasedEqCode !== undefined ? officeBasedEqCode: false;\n \n\n if (this.needs_charge_code) {\n this.bookingFormGroup.controls.code.setValidators([Validators.required, Validators.minLength(4), Validators.pattern(/^[a-zA-Z0-9]*$/)]);\n }\n // build the initial options\n const options = [];\n const attendees = next?.attendees || [];\n const organiser = next?.organiser || { display: this.currentUser.name , value: this.currentUser.email, meta: { external: false, user: this.currentUser }};\n const company = next?.company || [];\n\n const opt_out = next?.opt_out || false;\n this.action = next.action || 'new';\n // Load the saved form\n this.bookingFormGroup.setValue({\n organiser,\n title: next.title || '',\n attendees, // options will display current user\n code: next.code || '',\n notes: next.notes || '',\n head_count: next.head_count || '',\n user_list: [],\n host_list: [],\n company,\n opt_out: opt_out\n });\n this.selectedOptions.next(attendees);\n this.options.next(attendees);\n this.selectedCompanies.next(company);\n this.companyOptions.next(company);\n }\n })\n );\n\n // Listen for input changes\n this.searchResults = this.searchSubject.pipe(\n debounceTime(500),\n distinctUntilChanged(),\n switchMap((query) => {\n this.loading = true;\n return query.length >= this.limit\n ? this._users.query({\n q: query,\n cache: 60 * 1000\n })\n : Promise.resolve([]);\n }),\n catchError((_) => of([])),\n map((list: User[]) => {\n this.loading = false;\n return list;\n })\n );\n\n // Process API results\n this.subscription(\n 'search_results',\n this.searchResults.subscribe((list) => {\n this.user_list = list;\n this.user_list.forEach((i: any) => {\n i.match_name = matchToHighlight(i.match_name);\n i.match_email = matchToHighlight(i.match_email);\n return i;\n });\n\n // Build options from returned users\n const options = this.user_list.map(u => {\n return {\n value: u.email,\n display: `${u.name} ${u.email}`,\n groupId: 'one',\n groupHeader: true,\n shortDisplay: `${u.name}`,\n meta: { external: false, user: u },\n };\n });\n // Add the manual option to the beginning of the array\n options.unshift({\n value: this.searchString,\n display: this.searchString,\n groupId: 'one',\n groupHeader: true,\n shortDisplay: this.searchString,\n meta: { external: true, user: null },\n });\n // this.loading = false;\n this.options.next(options);\n })\n );\n\n this.bookingFormGroup.valueChanges.subscribe(val => {\n\n clearTimeout(this.notesHandle);\n if (val?.notes?.length) {\n this.checkingBreakdown = true;\n \n // Check for conflicts if adding a note and default setup and breakdown times.\n this.notesHandle = setTimeout(() => {\n this.validateForm.emit(false);\n const booking = this.booking.clone();\n const setup = {};\n setup[booking.space.email] = booking.setup[booking.space.email] || 900;\n const breakdown = {};\n breakdown[booking.space.email] = booking.breakdown[booking.space.email] || 900;\n\n const mockBooking = new Booking({\n id: booking.id,\n room: booking.space,\n start_epoch: booking.startDateTz.seconds,\n end_epoch: booking.endDateTz.seconds,\n setup,\n breakdown,\n });\n\n checkCollisions(\n this._spaces,\n mockBooking\n ).then((bookable: boolean) => {\n this.checkingBreakdown = false;\n this.available = bookable;\n // this.validateForm.emit(true);\n this.validateForm.emit(this.bookingFormGroup.valid);\n this.noteValidationClass = bookable === false ? 'booked' : 'available';\n // this.loading = false;\n }).catch(() => {\n this.checkingBreakdown = false;\n this.available = false;\n this.validateForm.emit(false);\n this.noteValidationClass = 'booked';\n // this.loading = false;\n\n return;\n });\n }, 200);\n } else {\n this.checkingBreakdown = false;\n this.available = null;\n this.noteValidationClass = '';\n this.validateForm.emit(this.bookingFormGroup.valid);\n }\n\n });\n }\n\n public setOrganiserOptOut(opt_out) {\n this.bookingFormGroup.controls.opt_out.setValue(opt_out);\n }\n\n public updateOrganiser(user) {\n console.log(user);\n }\n\n /** Listen for changes */\n public ngOnChanges(changes: any) {\n if (changes.triggerSubmit && this.formRef) {\n // Trigger the form submit and validation\n this.formRef.onSubmit(undefined);\n }\n }\n\n /**\n * \n * @param key : formcontrol name \n * Function trim value being submitted with only spaces/beginning/end \n */\n public trim(key: string): void {\n this.bookingFormGroup.get(key).setValue(this.bookingFormGroup.get(key).value.trim());\n }\n\n /** Toggle an attendee on/off */\n public toggle(option: SelectOption) {\n const inputValue = option.value\n .split(' ')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n // Check for character limit\n if (\n // this.selectedOptions.value.some((option: SelectOption) => option.value === inputValue) ||\n inputValue.length > 50\n ) {\n this._snackBar.open('Attendee name cannot exceed 50 characters', 'Close', {\n duration: 5000,\n });\n return;\n }\n\n this.selectedOptions\n .pipe(\n take(1),\n withLatestFrom(this.options),\n map(([selectedOptions, options]) => {\n let opts = selectedOptions.slice();\n const found = opts.some((v) => inputValue === v.value);\n if (found) {\n opts = opts.filter((v) => inputValue !== v.value);\n } else {\n const color = inputValue.toLowerCase().includes('mckinsey.')\n ? 'internal'\n : 'external';\n opts.push({\n ...option,\n value: inputValue,\n display: inputValue,\n shortDisplay: inputValue,\n meta: {\n ...option.meta,\n color,\n },\n });\n }\n\n return opts;\n })\n )\n .subscribe((next) => {\n if (!this.bookingFormGroup.controls.head_count.touched) {\n this.bookingFormGroup.controls.head_count.setValue(next.length + 1);\n }\n this.selectedOptions.next(next);\n });\n }\n\n public clearHeadcount() {\n this.headCountControl.setValue(1);\n }\n\n /** Return the data to the listening parent */\n public onSubmitForm() {\n this.bookingFormGroup.markAllAsTouched();\n // a bit of an issue that the form state isn't saved unless valid\n if (this.bookingFormGroup.valid) {\n const form_data = this.bookingFormGroup.value;\n form_data.user_list = this.user_list;\n form_data.host_list = this.host_list;\n form_data.has_delegate = this.has_delegate;\n this.submitForm.emit(form_data);\n }\n }\n\n /** Take the input and feed it back to the parent to add to attendees array */\n public updateAttendeeOptionsFromUserInput(v: string) {\n const l = v.length;\n const options = this.selectedOptions.value.slice();\n if (!l) {\n this.options.next([]);\n return;\n }\n if (l > 2) {\n // Triggers the API call to search for the user input\n this.searchSubject.next(v);\n }\n\n options.unshift({\n value: v,\n display: v,\n groupId: 'one',\n groupHeader: true,\n shortDisplay: v,\n meta: { external: true },\n });\n this.searchString = v;\n this.options.next(options);\n }\n\n public toggleAttendeesHint() {\n this.showHint = !this.showHint;\n }\n\n public updateCompanyOptionsFromUserInput(v: string) {\n if (!v.length) {\n this.companyOptions.next([]);\n return;\n }\n this.companyOptions.next([{\n value: v,\n display: v,\n groupId: 'two',\n groupHeader: true,\n shortDisplay: v,\n }]);\n }\n\n public toggleCompany(option: SelectOption) {\n this.selectedCompanies.pipe(\n take(1),\n withLatestFrom(this.companyOptions),\n map(([selectedCompanies, options]) => {\n let opts = selectedCompanies.slice();\n const found = opts.some(v => option.value === v.value);\n if (found) {\n opts = opts.filter(v => option.value !== v.value);\n } else {\n opts.push(option);\n }\n\n return opts;\n })\n ).subscribe(next => {\n this.selectedCompanies.next(next);\n });\n }\n}\n","\n
\n
\n
\n \n Meeting Title*\n \n \n \n \n
\n \n {{ ( bookingFormGroup?.get('title').errors && bookingFormGroup?.get('title').hasError('pattern')) ? 'Some special characters (^=`~!@#$%*{};:\\'_\\\",.\\<>) are not allowed' : 'Meeting Title is required'}}\n \n
\n
\n
\n
\n \n \n
\n
\n
\n Optout email notification \n
\n\n
\n \n \n \n Why do we need this?\n
\n
\n Attendee emails are used for visitor management purposes.\n Converge won't send any emails to attendees.\n
\n \n
\n\n
\n
\n \n \n
\n
\n \n Charge Code{{ needs_charge_code ? '*' : '' }}\n \n \n \n \n
\n \n {{ invalid_charge_error }}\n \n
\n
\n
\n
\n \n Headcount estimate*\n \n \n \n \n
\n \n Headcount is required\n \n
\n
\n
\n
\n\n
\n
\n \n Additional requirements (e.g room setup, equipment...)\n \n \n \n \n \n \n

Checking breakdown availability for selected date/time...

\n

\n \n A set up and breakdown time of 15 mins was added to either side\n of your booking to cater for these additional requirements.\n

\n

\n \n A set up and break down time of 15mins was added to either side of your booking to cater for these additional requirements. This has resulted in a conflict with another booking. Please adjust your booking accordingly.\n

\n
\n
\n
\n
\n
\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n OnChanges,\n Output,\n ViewContainerRef,\n ViewChild\n} from '@angular/core';\nimport {\n FormControl,\n FormGroup,\n FormGroupDirective,\n Validators\n} from '@angular/forms';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\nimport { closestToTimeSlot, closestToTimeSlotTz, resetSecondsOnTimestamp } from '@mckinsey-converge/base';\n\nimport {\n distinctUntilChanged,\n map,\n skip,\n take,\n withLatestFrom\n} from 'rxjs/operators';\nimport {\n select,\n Store\n} from '@ngrx/store';\nimport {\n buildingStateSelector,\n selectBuildingOptionsGroupedByCity\n} from '@mckinsey-converge/buildings';\nimport {\n Building,\n BuildingCity,\n flattenDisplayOffices,\n toggleSelectedByGroup,\n storeBookingFormData,\n BookingFormData,\n bookingTypeOptions,\n DEFAULT_BOOKING_DURATION,\n defaultRoomSizeOption,\n internalBookingTypeOption,\n roomSizeOptions,\n selectActiveForm,\n ApplicationService,\n roomSizeOptionsKiosk,\n\t\tRecurrencePeriod,\n generateBookingForm,\n SeriesAction,\n setRecurrenceStartsTime\n} from '@mckinsey-converge/data-common';\nimport { BehaviorSubject } from 'rxjs';\nimport {\n BaseTemplateComponent,\n SelectOption\n} from '@mckinsey-converge/ui';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { DateTime } from 'luxon';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Booking } from '../../../../../../libs/data-common/src';\nimport * as cloneDeep from 'lodash/cloneDeep';\n@Component({\n selector: 'app-room-booking-form',\n templateUrl: './room-booking-form.component.html',\n styleUrls: ['./room-booking-form.component.scss']\n})\nexport class RoomBookingFormComponent extends BaseTemplateComponent implements OnInit, OnChanges {\n @ViewChild('formRef')\n formRef: FormGroupDirective;\n\n @Output()\n public submitForm = new EventEmitter();\n\n @Input()\n public showCancel = false;\n\n @Input()\n public triggerSubmit: number;\n\n /**\n * Used only if showCancel is true.\n */\n @Output()\n public cancelSubmit = new EventEmitter();\n\n // fromDate is the selected date\n public fromDate: number = closestToTimeSlot(DateTime.now(), 15).valueOf(); // R--- depreciate\n /** DateTZ object of the date and time that the date and time picker will begin it's options from */\n public fromDateTz: DateTZ = closestToTimeSlotTz(new DateTZ({ date: Date.now(), is_local_tz: false }), 15);\n public bookingTypeOptions = bookingTypeOptions;\n public roomSizeOptions = roomSizeOptions;\n public localTimezone = DateNow(new Date()).building_tz;\n public localStart = \"\";\n public localEnd = \"\"\n\n public formGroup: FormGroup = new FormGroup({\n id: new FormControl('', []), // used in case of recurring series edit\n location: new FormControl([], [Validators.required]),\n date: new FormControl(this.fromDate, [Validators.required]),\n dateTz: new FormControl(this.fromDateTz, [Validators.required]), // starts out as the next closest available time interval\n duration: new FormControl(DEFAULT_BOOKING_DURATION, [Validators.required]),\n bookingType: new FormControl(internalBookingTypeOption),\n roomSize: new FormControl(defaultRoomSizeOption),\n selectedRoom: new FormControl({}),\n timezone: new FormControl(\"\"),\n offset: new FormControl(\"\"),\n\n\t\trecurrence_period: new FormControl(RecurrencePeriod.WEEKLY),\n recurrence_interval: new FormControl( 1),\n recurrence_endTz: new FormControl( new DateTZ({ date: 1 }).addValue({days: 1})),\n recurrence_count: new FormControl( 0),\n is_recurrent: new FormControl(null),\n recurrence_starts: new FormControl( []),\n recurrence_exceptions: new FormControl([]),\n recurrence_pattern: new FormControl(RecurrencePeriod.WEEKLY), //Helper value to store the last selected pattern (daily, weekly, monthly),\n recurrence_days: new FormControl( []),\n\n ignore: new FormControl('', []), // used in case of recurring series edit\n // TODO, there's a few missing from interface BookingFormData, libs/data-common/src/lib/booking/booking.form.data.ts\n });\n\n\n public options = new BehaviorSubject[]>([]);\n\n public selectedOptions = new BehaviorSubject[]>([]);\n\n constructor(private store: Store,\n // private _service: ApplicationService,\n vcRef: ViewContainerRef, private _snackBar: MatSnackBar) {\n super(vcRef);\n // if(this._service?.kioskFormFilter) {\n // this.formGroup.setValue({\n // roomSize: roomSizeOptions[3]\n // })\n // }\n }\n\n public ngOnInit(): void {\n\n\n super.ngOnInit();\n // R--- Complicated, need the TZ aware inputs and to not init those inputs until the building timezone is available.\n // R--- See if there's any way to make the timezone retrieval less fragile.\n\n // if we have an active form, refill the information here once.\n // Doesn't run on initial steps, only if you go back to the home page\n this.subscription('reduxData', this.store.select(selectActiveForm)\n .pipe(take(1))\n .subscribe((next: BookingFormData | undefined) => {\n if (next) {\n // set the fromDate correctly\n this.fromDateTz = next.is_recurrent ? next.dateTz : closestToTimeSlotTz(DateNow(), 15); // R--- shouldn't this actually be the current date start of day to make all the options available?\n\n const form = cloneDeep(next);\n this.formGroup.patchValue({\n ...form,\n }, { emitEvent: true });\n\n // this.formGroup.markAllAsTouched();\n // this.formGroup.updateValueAndValidity();\n\n }\n })\n );\n\n // R--- I only see this fire when the modal opens or going to the home page\n this.subscription('formChanges', this.formGroup.valueChanges\n .pipe(\n skip(1), // initial form changes\n distinctUntilChanged())\n .subscribe((next) => {\n const timezone = next.timezone || this.localTimezone\n /**\n * When the selected date changes update the time picker's start time\n * to the nearest available slot of the current day\n */\n this.fromDateTz = next.is_recurrent ? next.dateTz : closestToTimeSlotTz(DateNow(), 15);\n\n /**\n * When the new selected date arrives, update the coachmark displayed below the date time picker\n */\n this.updateCoachmarkTimes(timezone);\n\n })\n );\n\n this.subscription('buildings', this.store.pipe(\n select(buildingStateSelector),\n select(selectBuildingOptionsGroupedByCity),\n map((grouped: Map) => {\n return flattenDisplayOffices(grouped);\n }),\n distinctUntilChanged()\n )\n .subscribe(next => {\n this.options.next(next);\n }));\n }\n\n public ngOnChanges(changes: any) {\n if (changes.triggerSubmit && this.formRef) {\n // Trigger the form submit and validation\n this.formRef.onSubmit(undefined);\n }\n }\n\n public onSubmitForm() {\n if(this.formGroup.controls?.is_recurrent?.value){\n setRecurrenceStartsTime(this.formGroup)\n }\n // Check for past date time\n const formGroupData = this.formGroup.value;\n const is_past = this._checkDateInPast();\n if (is_past) {\n this.openSnackBar('Start Time updated to after current time, please click search again.', 'Close');\n return;\n } else {\n this.formGroup.setValue({\n ...formGroupData,\n date: resetSecondsOnTimestamp(formGroupData.dateTz.ms),\n dateTz: formGroupData.dateTz.setValue({ millisecond: 0, second: 0 })\n });\n }\n this.formGroup.markAllAsTouched();\n if (this.formGroup.valid) {\n this.submitForm.emit(this.formGroup.value);\n }\n }\n\n public openSnackBar(message: string, action: string) {\n this._snackBar.open(message, action, {\n duration: 5000,\n panelClass: ['yellow-snackbar']\n });\n }\n\n // Fires when the location selector value is changed\n public toggle(option: SelectOption) {\n // update the selected value\n this.selectedOptions.pipe(\n take(1),\n withLatestFrom(this.options),\n map(([selectedOptions, options]) => {\n return toggleSelectedByGroup(options, selectedOptions, option);\n })\n ).subscribe(next => {\n // deselecting the location option sets the timezone to local so convert.\n const formGroupDate = this.formGroup.value;\n if (!next.length) {\n this.formGroup.setValue({\n ...this.formGroup.value,\n timezone: this.localTimezone,\n date: formGroupDate.dateTz.ms,\n dateTz: formGroupDate.dateTz.toZone(this.localTimezone)\n });\n } else {\n const buildingTimezone = next[0]?.meta?.building?.timezone || next[0]?.meta?.city?.timezone;\n this.formGroup.setValue({\n ...this.formGroup.value,\n timezone: buildingTimezone,\n date: formGroupDate.dateTz.ms,\n dateTz: formGroupDate.dateTz.toZone(buildingTimezone)\n });\n }\n this._checkDateInPast();\n // Must fire last or location picker will be buggy.\n this.selectedOptions.next(next);\n });\n }\n\n private _checkDateInPast() {\n // Check for past date time\n const formGroupData = this.formGroup.value;\n const date = new DateTZ({ date: this.formGroup.value.dateTz.ms, building_tz: formGroupData.timezone, is_local_tz:false }).addValue({ seconds: 30 })\n const now = DateNow(new Date())\n if (now.isAfterDate(date)) {\n // Reset the start time if in the past\n const closestTz = closestToTimeSlotTz(new DateTZ({ date: Date.now(), is_local_tz: false, building_tz: formGroupData.timezone }).addValue({ minutes: 1 }), 15)\n const prevClosestTz = closestTz.subtractValue({minutes: 15})\n const prevDateTz = prevClosestTz.addValue({ seconds: 30 });\n // R-- why do I do this on submit? move to a another method.\n if(now.isAfterDate(prevDateTz)){\n this.fromDateTz = closestTz;\n }else{\n this.fromDateTz = prevClosestTz;\n }\n\n this.formGroup.setValue({\n ...formGroupData,\n date: resetSecondsOnTimestamp(this.fromDateTz.ms),\n dateTz: this.fromDateTz.setValue({ millisecond: 0, second: 0 })\n });\n return true;\n }\n return false;\n }\n\n private updateCoachmarkTimes(timezone: string) {\n // Resolve the problem that locally I might have the same TZ offset but the names don't match.\n const localTzOffset = DateTime.now().setZone(this.localTimezone).offset;\n const buildingTzOffset = DateTime.now().setZone(timezone).offset;\n\n this.fromDateTz = new DateTZ({ date: this.fromDateTz.ms, is_local_tz: false, building_tz: timezone });\n\n if (localTzOffset !== buildingTzOffset) {\n const startDate = this.formGroup.value.dateTz.clone();\n this.localStart = startDate.formatLocalDate(\"h:mma\");\n this.localEnd = startDate.addValue({ minutes: this.formGroup.value.duration }).formatLocalDate(\"h:mma\");\n } else {\n // No location is selected so coachmark is hidden\n this.localStart = \"\";\n this.localEnd = \"\";\n }\n }\n}\n","\n
\n \n\n\n
\n \n\n \n \n \n \n
\n Please be aware that this booking starts at {{localStart}} and ends at {{localEnd}} in your local timezone.\n
\n
\n\n
\n
\n Recurring booking\n
\n \n \n\n
\n\n \n\n \n \n \n \n \n
","import { Component, ViewEncapsulation, Inject } from '@angular/core';\nimport { BookingFormData, storeBookingFormData, SeriesAction} from '@mckinsey-converge/data-common';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { Store } from '@ngrx/store';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n// import { Router, ActivatedRoute } from '@angular/router';\n\n@Component({\n selector: 'app-room-booking-modal',\n template: `\n
\n \n \n \n \n \n \n \n \n
\n `,\n styleUrls: ['./room-booking-modal.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class RoomBookingModalComponent extends BaseDirective {\n public trigger = Date();\n\n constructor(\n private store: Store,\n private dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private _data: any ) {\n super();\n }\n\n public triggerSubmit() {\n this.trigger = Date();\n }\n\n public submitForm(next: BookingFormData) {\n /// submit\n\n const ignore = this._data?.action === SeriesAction.EDIT ? next.id : null;\n const bookable = this._data?.action === SeriesAction.EDIT || null;\n\n this.store.dispatch(storeBookingFormData({\n payload: {\n ...next,\n ignore, // ignore id in case of recurring edit series\n bookable, // true in case of recurring edit series\n action: this._data?.action || '' // 'edit' in case of recurring edit series\n }\n }));\n this.close('DoNotClearActiveForm'); // do not clear active form if for submit as form need forther in result module\n this._data && this._data.navigateTo && this._data.navigateTo(); // navigate to result in case of staff recurring edit\n\n }\n\n public close(flag: string = '') {\n this.dialogRef.close(flag);\n }\n}\n","import {\n Component,\n OnInit,\n OnDestroy\n} from '@angular/core';\nimport {\n select,\n Store\n} from '@ngrx/store';\nimport { BuildingStoreState } from '@mckinsey-converge/buildings';\nimport {\n AlertMode,\n SelectOption\n} from '@mckinsey-converge/ui';\nimport { loadOrganisations } from '@mckinsey-converge/organisation';\nimport { BaseDirective,\n dateBuildingFormatString,\n} from '@mckinsey-converge/base';\nimport {\n Booking,\n User,\n Building,\n BuildingCity,\n IEngineResponse,\n flattenDisplayOffices,\n selectCancelledBookingsResultsFromState,\n selectHomepageBookingsResultsFromState,\n selectPastBookingsResultsFromState,\n BookingStoreState,\n BookingFormData,\n clearBookingFormData,\n storeBookingFormData,\n BookingsService\n} from '@mckinsey-converge/data-common';\nimport { TopBarHeaderMode } from 'src/app/components/topbar-header/topbar-header.component';\nimport { Urls } from 'src/app/utilities/urls';\nimport {\n ActivatedRoute,\n Router\n} from '@angular/router';\nimport { MatDialog } from '@angular/material/dialog';\nimport { BookingDetailsModalComponent } from '../booking-details-modal/booking-details-modal.component';\nimport { loadRoomsForResults } from '@mckinsey-converge/rooms';\nimport { loadBookingsWithQuery, MyBookingsStoreState } from '@mckinsey-converge/bookings';\nimport { UserStoreState } from '@mckinsey-converge/user';\nimport {\n BehaviorSubject,\n} from 'rxjs';\nimport {\n distinctUntilChanged,\n elementAt,\n map,\n take,\n} from 'rxjs/operators';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport {\n mapResultsToViewModels,\n BookingResultsViewModel\n} from 'src/app/booking/manage-bookings/manage-bookings.viewmodel';\nimport {\n buildingStateSelector,\n selectBuildingOptionsGroupedByCity\n} from '@mckinsey-converge/buildings';\nimport { DateNow } from '@mckinsey-converge/date-tz';\n\nexport type RoomBookingStoreState = BookingStoreState & BuildingStoreState & MyBookingsStoreState & UserStoreState;\n\n@Component({\n selector: 'app-room-booking',\n template: `\n
\n
\n \n \n
\n
\n
\n
\n

Meeting Room Booking

\n
\n \"Booking\n
\n
\n
\n
\n
\n \n \n \n \n
\n
\n
\n

Your Bookings

\n
\n
\n \n
You have no upcoming bookings
\n
\n
\n \n \n
\n
\n \n \n \n \n
\n
\n \n Manage\n
\n
\n
\n
\n
\n `,\n styleUrls: ['./room-booking.component.scss']\n})\nexport class RoomBookingComponent extends BaseDirective implements OnInit, OnDestroy {\n public TopBarHeaderMode = TopBarHeaderMode;\n public AlertMode = AlertMode;\n\n public width = 16;\n\n // public showBanner = true;\n public showBookings = false;\n public showManageButtonA = false;\n public showManageButtonB = false;\n public showManageButtonC = false;\n public dateString: string;\n\n public homepageBookingResults = new BehaviorSubject>(LoadingModel.empty());\n public pastBookingResults = new BehaviorSubject>(LoadingModel.empty());\n public upcomingBookings: BookingResultsViewModel[];\n public buildings = new BehaviorSubject[]>([]);\n public reloading = false;\n\n /** Current User */\n public currentUser: User;\n master_booking: BookingResultsViewModel;\n allBookings: any[];\n\n constructor(private store: Store,\n private router: Router,\n private route: ActivatedRoute,\n private _bookings: BookingsService,\n private dialog: MatDialog) {\n super();\n this.dateString = dateBuildingFormatString(DateNow(new Date()));\n }\n\n public ngOnDestroy() {\n if (typeof window === 'object') {\n window.onbeforeunload = undefined;\n }\n\t\t\t\t// clear interval\n\t\t\t\tthis.clearInterval('refreshBookings');\n }\n\n public ngOnInit(): void {\n // only run on window onload\n if (typeof window === 'object') {\n window.onbeforeunload = (event) => {\n const e = event || window.event;\n this.store.dispatch(clearBookingFormData())\n return e;\n };\n }\n\n this.store.dispatch(loadOrganisations.request());\n\n this.subscription('buildings', this.store.pipe(\n select(buildingStateSelector),\n select(selectBuildingOptionsGroupedByCity),\n map((grouped: Map) => {\n return flattenDisplayOffices(grouped);\n }),\n distinctUntilChanged()\n ).subscribe(next => {\n this.buildings.next(next);\n // console.log('on buildings ')\n // this.refresh('homepage');\n }));\n\n this.subscription('currentUser', this.store.select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User) => {\n // Once we know we have the user loaded\n this.currentUser = new User(user);\n this.store.dispatch(loadBookingsWithQuery({ 'email': this.currentUser.email, 'from': DateNow(new Date()).ms, 'target': 'homepage' }));\n // start the timer at the top of the minute;\n // const offset = DateNow(new Date()).startOfValue('minute').addValue({ minutes: 1 }).ms - DateNow(new Date()).ms;\n // fetch it on one minute interval now that there is room data.\n // setTimeout(() => {\n // console.log('on setTimeout ')\n // this.refresh('homepage')\n this.interval('refreshBookings', () => {\n\t\t\t\t\t\t\t\t\t\t\tthis.refresh('homepage')\n\t\t\t\t\t\t\t\t\t\t}, 60 * 1000);\n // }, offset + 5000)\n\n })\n );\n\n this.reloading = true;\n this.subscription('homepageResults', this.store.pipe(\n select(selectHomepageBookingsResultsFromState)\n ).subscribe(next => {\n // this.reloading = true;\n this.homepageBookingResults.next(next);\n if (!next.isEmpty() && next.success && Array.isArray(next.success.results) && next.success.total) {\n this.reloading = false;\n this.showManageButtonA = true;\n this.upcomingBookings = mapResultsToViewModels(next.success.results).filter(b => !(b.booking.is_recurrent && b.booking.recurrence_type === 'master'));\n this.allBookings = next.success.results;\n\n if (this.upcomingBookings.length) {\n this.showBookings = true;\n }\n } else {\n this.reloading = false;\n this.showManageButtonA = false;\n this.upcomingBookings = [];\n this.showBookings = false;\n }\n }));\n\n this.subscription('pastResults', this.store.pipe(\n select(selectPastBookingsResultsFromState)\n ).subscribe(next => {\n if (!next.isEmpty() && next.optionalSuccess?.total) {\n this.showManageButtonB = true;\n }\n }));\n\n this.subscription('cancelledResults', this.store.pipe(\n select(selectCancelledBookingsResultsFromState)\n ).subscribe(next => {\n if (!next.isEmpty() && next.optionalSuccess?.total) {\n this.showManageButtonC = true;\n }\n }));\n }\n\n public showResults() {\n // Don't show the loading state while we're reloading with Building details.\n return !this.reloading; //|| this.homepageBookingResults.value.hasLoaded();\n }\n\n public getBuilding(booking: Booking) {\n if (this.buildings && booking.building_zone) {\n return this.buildings.value.find(b => booking.building_zone === b.value)?.meta.building;\n }\n return '';\n }\n\n // public hideBanner() {\n // this.showBanner = false;\n // }\n\n public learnMore() {\n window.open(Urls.LearnMore);\n }\n\n public routeToResults(next: BookingFormData) {\n this.store.dispatch(storeBookingFormData({\n payload: {\n ...next\n }\n }));\n this.store.dispatch(loadRoomsForResults.clear());\n this.router.navigate(['results'], { relativeTo: this.route });\n }\n\n public routeToManageBookings() {\n this.router.navigate(['manage'], { relativeTo: this.route });\n }\n\n public refresh(target: string) {\n if (!this.currentUser?.email) {\n return;\n }\n\n // tslint:disable-next-line: max-line-length\n this.store.dispatch(loadBookingsWithQuery({ 'email': this.currentUser.email, 'from': DateNow(new Date()).ms, target }));\n }\n\n\n\t\t/**\n\t\t * Displays detailed information about a booking in a modal dialog.\n\t\t * If the booking is part of a recurring series, it retrieves the master booking\n\t\t * details and displays them along with the selected booking. The modal allows\n\t\t * users to view and interact with the booking details. After the modal is closed,\n\t\t * it checks for special flags to determine if the active form and result data should be cleared.\n\t\t *\n\t\t * @param {BookingResultsViewModel} viewModel - The view model containing booking information to display.\n\t\t */\n public async viewBooking(viewModel: BookingResultsViewModel) {\n\n\t\t\t// Handle logic for recurring bookings to fetch the master booking details\n \t// and set the master_booking property for displaying in the modal\n\t\t\tif(viewModel.booking.is_recurrent) {\n\t\t\t\t\tlet booking = this.allBookings.find(bkn => bkn.id === viewModel.booking.recurrence_master_id && bkn.recurrence_type === 'master1') ;\n\t\t\t\t\tif (!booking) {\n\t\t\t\t\t\t\tbooking = await this._bookings.show(viewModel.booking.recurrence_master_id);\n\t\t\t\t\t}\n\t\t\t\t\tthis.master_booking = mapResultsToViewModels([booking])[0];\n\t\t\t}\n\n\t\t\t// Open a modal dialog to display the booking details along with master booking (if applicable)\n\t\t\tconst dialogRefX = this.dialog.open(BookingDetailsModalComponent, {\n\t\t\t\t\tpanelClass: 'mck-modal-wide-manage-booking',\n\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tbooking: viewModel.booking,\t// Selected booking information\n\t\t\t\t\t\t\tbuilding: this.getBuilding(viewModel.booking),\t// Building information for the booking\n\t\t\t\t\t\t\tmaster_booking: this.master_booking?.booking || null,\t// Master booking details (if available)\n\t\t\t\t\t\t\trefresh: () => {\n\t\t\t\t\t\t\t\t\tthis.refresh('homepage');\t// Function to refresh the homepage after modal closure\n\t\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tautoFocus: false,\n\t\t\t\t\tbackdropClass: 'mck-modal-backdrop',\n\t\t\t});\n\n\t\t\tdialogRefX.afterClosed().subscribe((flag) => {\n\t\t\t\t// Clear form and result data if the flag indicates it's necessary\n\t\t\t\t\tflag !== 'DoNotClearActiveForm' && this.clearFormAndResultData();\n\t\t\t});\n }\n\n\t\t/**\n\t\t * Clears active form and result data from the store.\n\t\t *\n\t\t * This function dispatches actions to clear the active form data and the loaded\n\t\t * rooms data from the store. It is typically used after a modal interaction or\n\t\t * a specific user action to reset the form state and loaded room information.\n\t\t */\n public clearFormAndResultData() {\n this.store.dispatch(clearBookingFormData());\n this.store.dispatch(loadRoomsForResults.clear());\n }\n\n\n}\n","import { Component, OnInit } from '@angular/core';\nimport {\n TopBarHeaderMode,\n RoutePayload,\n} from 'src/app/components/topbar-header/topbar-header.component';\nimport { select, Store } from '@ngrx/store';\nimport {\n Booking,\n User,\n Space,\n BookingFormData,\n selectActiveForm,\n selectFilteredByIdResults,\n BookingStoreState,\n storeBookingFormData,\n DateDurationData,\n OrganisationService,\n SpaceConflictAlertModalData,\n SpaceStatus,\n filterSpacesByAppliedFilters,\n FilteredSpaces,\n Building,\n SpaceFilterReason,\n getLastDateFromList,\n RoomResultsViewModel,\n stringToMinutes,\n} from '@mckinsey-converge/data-common';\nimport {\n BaseDirective,\n dateBuildingFormatString,\n DialogEvent,\n shorterLocalDateFormatString,\n startEndTimeWithZoneFormatString,\n} from '@mckinsey-converge/base';\nimport { BehaviorSubject, fromEvent } from 'rxjs';\nimport { distinctUntilChanged, take, throttleTime, tap, filter } from 'rxjs/operators';\nimport { BuildingStoreState } from '@mckinsey-converge/buildings';\nimport { RoomStoreState, loadByIdResults } from '@mckinsey-converge/rooms';\nimport { Router, NavigationStart, Event as NavigationEvent } from '@angular/router';\nimport { UserStoreState } from '@mckinsey-converge/user';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { MatDialog } from '@angular/material/dialog';\nimport {\n ConflictAlertModalComponent,\n ConflictsModalComponent,\n ConflictsModalComponentData,\n} from '@mckinsey-converge/ui';\n\nexport type RoomResultsState = BookingStoreState &\n RoomStoreState &\n BuildingStoreState &\n UserStoreState;\n\nconst EMPTY_ARRAY = [];\n\n@Component({\n selector: 'app-room-details',\n templateUrl: './room-details.component.html',\n styleUrls: ['./room-details.component.scss'],\n})\nexport class RoomDetailsComponent extends BaseDirective implements OnInit {\n public TopBarHeaderMode = TopBarHeaderMode;\n public booking: Booking;\n // @TODO get this from current settings.\n public backRoute: RoutePayload = {\n route: ['/home', 'results'],\n queryParams: { display: 'list' },\n };\n\n public data = new BehaviorSubject(undefined);\n public byIdResults = new BehaviorSubject(undefined);\n public open: boolean = true;\n // Set to a config once we know where the files are hosted.\n public rootFolderURL = 'assets/img/rooms/';\n // Set in the room availablity callback\n public mobile: boolean = false;\n public expandedLocation: boolean = false;\n public expandedAvailability: boolean = false;\n // Track event date changes in the UI in this param\n public alternativeWeekStartDateTz: DateTZ = new DateTZ();\n /** Current User */\n public currentUser: User;\n /** Display warning banner by default */\n public showInfoBanner: boolean = true;\n /** Space class created from subscribed active form room data */\n public room: Space;\n /** Requested booking start time from subscribed active form data */\n public requestedDateTz: DateTZ;\n /** Requested booking end time from subscribed active form data */\n public requestedEndDateTz: DateTZ;\n\n /** Track alert dialog should display's only once for not bookable or unavailable */\n private isAlertDisplayed: boolean = false;\n /** Update availability status of current rooom */\n public availabilityStatus: string;\n /** Space validity per rule */\n public isSpaceValidAsPerRule: FilteredSpaces;\n\n public orgBuildings: Building[] = [];\n /** Subtype of a room or space. */\n public roomSubtype: string = '';\n\n /* recurrence booking - occurence availability */\n public occurenceAvailability: string = '';\n // set property if user room selection from next business day section on result page\n public nextBusinessDay: boolean = false;\n\n constructor(\n private store: Store,\n private router: Router,\n private _org: OrganisationService,\n public dialog: MatDialog\n ) {\n super();\n /**\n * Router extras expecting from\n * On navigation from result or home page after QR code scan\n */\n if ( this.router.getCurrentNavigation() !== null && this.router.getCurrentNavigation().extras?.state?.payload ) {\n // set property if user room selection from next business day section on result page\n this.nextBusinessDay = this.router.getCurrentNavigation().extras.state.payload?.nextBusinessDay\n this.store.dispatch(storeBookingFormData({\n payload: this.router.getCurrentNavigation().extras.state.payload,\n })\n );\n }\n }\n\n public ngOnInit(): void {\n this.availabilityStatus = 'unavailable';\n this.orgBuildings = this._org.buildings;\n\n this.subscription(\n 'currentUser',\n this.store\n .select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n })\n );\n\n this.subscription(\n 'activeForm',\n this.store\n .pipe(select(selectActiveForm), distinctUntilChanged())\n .subscribe((next: BookingFormData | undefined) => {\n if (next) {\n // set property if user room selection from next business day section on result page\n this.nextBusinessDay = next?.nextBusinessDay || false;\n\n this.data.next(next);\n // R--- selectedRoom could sure use some clarity, why is everything but the kitchen sink in there?\n if (!this.data.value?.selectedRoom || !this.data.value?.dateTz.ms) {\n return;\n }\n // Create a full fledged Space object since the selectedRoom.space is just JSON\n this.room = new Space(this.data.value?.selectedRoom?.space);\n\n // Check room validtion of selected room to maintain status on detail page\n this.checkAvailabiltyAsPerRule();\n this.setAlternativeWeekStartDate(this.data.value?.dateTz);\n\n // Query for the entire day for this room\n this.fetchRooms(false);\n this.setRoomSubType();\n\n this.requestedDateTz = this.data.value?.dateTz;\n if (next.is_recurrent) {\n const { is_local_tz, building_tz} = this?.data?.value?.dateTz;\n const endDateTz = getLastDateFromList( this?.data?.value?.recurrence_starts );\n const endDate = new DateTZ({ date: endDateTz.date.valueOf(), is_local_tz, building_tz }) \n // add one day if user room selection from next business day section on result page\n this.requestedEndDateTz = this.nextBusinessDay ? endDate.addValue({ minutes: this.data?.value.offset }) : endDate;\n\n this.occurenceAvailability = `${this?.room?.availableOccurrences} out of ${this?.room?.totalOccurrences}`;\n }\n }\n })\n );\n\n this.subscription(\n 'byId',\n this.store.pipe(select(selectFilteredByIdResults)).subscribe((next) => {\n this.byIdResults.next(\n next.success?.spaces?.length\n ? next.success.spaces[0].settings.bookings\n : EMPTY_ARRAY\n );\n })\n );\n\n const breakpoint = 450;\n if (window) {\n this.mobile = window.innerWidth < breakpoint;\n }\n\n fromEvent(window, 'resize')\n .pipe(throttleTime(500))\n .pipe(\n tap({\n next: (val) => {\n const target = val.target as Window;\n this.mobile = target.innerWidth < breakpoint;\n },\n })\n )\n .subscribe();\n }\n\n public setRoomSubType() {\n //test\n const room_type = `${this?.room.internal_or_external}_room_types`;\n const temp: string = Array.isArray(this?.room?.room_type)\n ? this?.room?.room_type[0]\n : this?.room?.room_type;\n const type = this?._org?.getOrganizationFiltersByRoomType(room_type)[temp];\n this.roomSubtype = type !== undefined ? `( ${type} Room )` : '';\n }\n\n public isConflictWithOccurences() {\n const conflicts = this?.room?.totalOccurrences - this?.room?.availableOccurrences;\n return { is_conflict: !!conflicts, total_Conflicts: conflicts };\n }\n\n /**\n\t\t * Opens a modal to display recurrence conflicts for a given room.\n\t\t *\n\t\t * @param {Space} room - The room for which recurrence conflicts are being displayed.\n\t\t *\n\t\t * This function opens a modal dialog to show recurrence exceptions (conflicts)\n\t\t * for the specified room.\n\t\t *\n\t\t * TO DO: SAME FUNCTION BEING USED IN apps/staff/src/app/booking/room-details/room-details.component.ts\n\t\t */\n public openRecurrenceConflictsModal(room: Space) {\n let { recurrence_exceptions } = this.data.value;\n\n const recurr_ref = this.dialog.open(\n ConflictsModalComponent,\n {\n maxWidth: '95vw',\n width: '32em',\n data: {\n room_name: room.simple_name,\n conflicts: recurrence_exceptions,\n timezone: room.building.timezone,\n },\n }\n );\n this.subscription(\n 'conflicts_modal_events',\n recurr_ref.componentInstance.event.subscribe((event: DialogEvent) => {\n recurr_ref.close();\n })\n );\n recurr_ref.afterClosed().subscribe(() => this.unsub('conflicts_modal_events'));\n }\n\n\t\t/**\n\t\t * Retrieves the end date string for the booking, considering recurrence if applicable.\n\t\t * If the booking is recurrent.\n\t\t *\n\t\t * @returns {string} The formatted end date string in a shorter local date format.\n\t\t */\n\t\t public get endDateString(): string {\n\t\t\t// if this.requestedEndDateTz is not in use anywhere here in this file than remove that property and use const here\n\t\t\tif(!this.requestedEndDateTz) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\treturn this.requestedEndDateTz.formatDate('ccc d MMM yyyy'); // shorterLocalDateFormatString(this.requestedEndDateTz);\n\t\t}\n\n /**\n * Functino to check if room is available as per room/user rules\n */\n public checkAvailabiltyAsPerRule() {\n this.orgBuildings =\n !this.orgBuildings.length && this.data.value?.buildings\n ? this.data.value?.buildings\n : this.orgBuildings;\n this.isSpaceValidAsPerRule = filterSpacesByAppliedFilters(\n [],\n [this.room],\n this.data.value,\n this.orgBuildings,\n this.currentUser\n );\n }\n\n /**\n * Function popup advise alert dialog if scanned (QR code) room details found conflicts with other booking/s\n * @param room\n */\n alertIfItHasConflict(isBookable, isAvailable) {\n this.isAlertDisplayed = true;\n const data = {\n headerText: !isBookable\n ? SpaceConflictAlertModalData.NotBookableHeaderText\n : !isAvailable\n ? SpaceConflictAlertModalData.NotAvailableHeaderText\n : '',\n message:\n this.isSpaceValidAsPerRule.specificReason === SpaceFilterReason.OfficeRules\n ? SpaceConflictAlertModalData.NotBookableDueToOfficeRule\n : !isBookable\n ? SpaceConflictAlertModalData.NotBookableMessage\n : !isAvailable\n ? SpaceConflictAlertModalData.NotAvailableMessage\n : '',\n buttonLabel: !isBookable\n ? SpaceConflictAlertModalData.NotBookableButtonLabel\n : !isAvailable\n ? SpaceConflictAlertModalData.NotAvailableButtonLabel\n : '',\n callback: !isBookable\n ? this.goToBackRoute.bind(this)\n : !isAvailable\n ? this.expandAvailability.bind(this, true)\n : null,\n shouldClose: isBookable,\n };\n const dialog = this.dialog.open(ConflictAlertModalComponent, {\n data: data,\n panelClass: 'mck-alert',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n disableClose: !isBookable,\n });\n }\n\n public warnIfItHasConflict({ room: room, hasConflict: hasConflict }) {\n if (\n (!room.bookable || !this.isSpaceValidAsPerRule.spaces.length) &&\n !this.isAlertDisplayed\n ) {\n // room is not bookable(not available to book) and no warning dialog displayed yet\n this.alertIfItHasConflict(false, true);\n this.updateAvailabilityStatus(SpaceStatus.Unavailable);\n } else if (!room.available && hasConflict && !this.isAlertDisplayed) {\n //room is not available AT THIS TIME to book (booked) and has conflict with other booking and no warning dialog displayed yet\n this.alertIfItHasConflict(room.bookable, !hasConflict); // (true, true/false)\n this.updateAvailabilityStatus(SpaceStatus.Booked);\n } else {\n /**\n * Update status of availability - Uavailable/Booked/Requestable/Bookable\n * If room is not bookable(not available to book) and warning dialog dispalyed once\n * If room is bookable but not available to boot AT THIS TIME (or and has conflict with other booking) and warning dialog displayed once\n * If room is bookable and availanle to book AT THIS TIME then check the type of room Requestable? or Bookable\n */\n const status =\n !room.bookable || !this.isSpaceValidAsPerRule.spaces.length\n ? SpaceStatus.Unavailable\n : !room.available && hasConflict\n ? SpaceStatus.Booked\n : this.is_request\n ? SpaceStatus.Requestable\n : SpaceStatus.Bookable;\n this.updateAvailabilityStatus(status);\n }\n }\n\n public updateAvailabilityStatus(primaryCheck: string, secondaryCheck?: string) {\n this.availabilityStatus =\n primaryCheck !== ''\n ? primaryCheck\n : this.data.value.is_recurrent ||\n ['unavailable', 'booked'].indexOf(this.availabilityStatus) === -1\n ? secondaryCheck\n : this.availabilityStatus;\n }\n\n public get catering(): string {\n return (\n DateNow(new Date())\n .setValue({ minute: 0, hour: this.room?.building?.catering_hours.start })\n .formatDate('ha')\n .toLocaleLowerCase() +\n ' - ' +\n DateNow(new Date())\n .setValue({ minute: 0, hour: this.room?.building?.catering_hours.end })\n .formatDate('ha')\n .toLocaleLowerCase()\n );\n }\n\n public get dateString(): string {\n\t\t\t\tif(!this.requestedDateTz) return '';\n return this.requestedDateTz.formatDate('ccc d MMM yyyy');; //shorterLocalDateFormatString(this.requestedDateTz);\n \n }\n\n public get focusedRoomMapKey(): string {\n return `area-${this.room?.map_id}-status`;\n }\n\n /** Whether we are only allowed to 'request' the selected space */\n public get is_request(): boolean {\n const data = this.data.value;\n\n /* istanbul ignore else */\n if (!data?.selectedRoom?.space) {\n return false;\n }\n\n const space = new Space(data.selectedRoom.space);\n const isRequest = space.byRequest({\n dateTz: data.dateTz,\n duration: data.duration,\n host: this.currentUser,\n });\n this.updateAvailabilityStatus(\n '',\n isRequest ? SpaceStatus.Requestable : SpaceStatus.Bookable\n );\n return isRequest;\n }\n\n public get roomFeatures(): string[] {\n // const room_type = `${this.room.internal_or_external}_room_types`\n const combinedFeatures = {\n // ...this._org.getOrganizationFiltersByRoomType(room_type),\n ...this._org.getOrganizationFiltersByRoomType('equipment_types'),\n };\n const features = this.room !== undefined ? this.room?.featuresArray.map(\n (feature: string) => combinedFeatures[feature]\n ) : [];\n\n return [...new Set(features)].filter((f) => !!f);\n }\n\n public get roomHasCatering() {\n // Building scope catering available is true or false\n const building = this.data.value?.selectedRoom?.building;\n let hasCatering = building ? building.has_catering : false;\n // but if Room catering is false it overrides the building\n if (this.room?.has_catering === false) {\n hasCatering = false;\n }\n return hasCatering;\n }\n\n public get roomImagesFileSlug(): string {\n return this.room?.email.split('@')[0];\n }\n\n public get mapUrl(): string {\n return this.room?.level?.map_url;\n }\n\n public get timeString(): string {\n\t\t\tif(!this.requestedDateTz) return '';\n\t\t\treturn startEndTimeWithZoneFormatString(\n\t\t\t\t\tthis.requestedDateTz,\n\t\t\t\t\tthis.requestedDateTz.addValue({ minutes: this.data.value?.duration })\n\t\t\t);\n }\n\n /**\n * Get the timezone form the subscribed activeForm\n */\n public get timezone(): string {\n // R--- this.room.timezone wasn't reliable enough on page refresh, something to look into\n return this.data.value.selectedRoom?.building.timezone;\n }\n\n public setAlternativeWeekStartDate(bookingDate: DateTZ) {\n if (!bookingDate) {\n return;\n }\n\n const booking_date = bookingDate.clone();\n if (this.mobile) {\n this.alternativeWeekStartDateTz = booking_date;\n } else {\n this.alternativeWeekStartDateTz = booking_date.startOfValue('week');\n }\n }\n\n public updateCalendarWeekView(alternativeWeekStartDateTz: DateTZ) {\n this.alternativeWeekStartDateTz = alternativeWeekStartDateTz;\n this.fetchRooms(!this.mobile, this.alternativeWeekStartDateTz);\n }\n\n public confirmChanges(data: DateDurationData) {\n // R-- refactor room-availability-preview to return DateTZ so setAlternativeWeekStartDate can use it.\n this.mobile = data.mobile;\n this.setAlternativeWeekStartDate(data.dateTz);\n\n this.fetchRooms(!this.mobile, this.alternativeWeekStartDateTz);\n // submit\n this.store.dispatch(\n storeBookingFormData({\n payload: {\n ...this.data.value,\n dateTz: data.dateTz,\n duration: data.duration,\n },\n })\n );\n }\n\n public fetchRooms(allWeek: boolean = true, alternativeWeekStartDateTz: DateTZ = null) {\n if (!this.room?.id) {\n return;\n }\n\n const day = 24 * 60;\n const week = day * 7;\n\n let start_date = (alternativeWeekStartDateTz || this.data.value.dateTz).clone();\n if (allWeek && start_date.dateWeekday !== 7) {\n start_date = start_date.startOfValue('week');\n }\n\n const startOfDay = start_date.startOfValue('day').setValue({ second: 0, millisecond: 0 });\n const startOfWeek = start_date.setValue({ second: 0, millisecond: 0 }).startOfValue('day');\n\n // Query for the entire day for this room\n const query = {\n dateTz: allWeek ? startOfWeek : startOfDay,\n duration: allWeek ? week : day,\n locations: this.room?.id,\n capacity: this.data.value?.roomSize.value,\n };\n this.store.dispatch(loadByIdResults.request(query));\n }\n\n public removeDateOffset() {\n const data = this.data.value;\n let { dateTz, offset } = data;\n dateTz = dateTz.subtractValue({ minutes: ((typeof offset === 'string' && offset == '') || (typeof offset === 'undefined')) ? 0 : Number(offset) });\n this.store.dispatch(\n storeBookingFormData({\n payload: {\n ...data,\n dateTz: dateTz,\n offset: 0,\n },\n })\n );\n }\n\n public goToBackRoute() {\n this.removeDateOffset();\n this.router.navigate(this.backRoute.route, { queryParams: this.backRoute.queryParams });\n }\n\n public expandMap(open: boolean) {\n this.expandedLocation = open;\n }\n\n public expandAvailability(open: boolean) {\n this.fetchRooms(!this.mobile);\n this.expandedAvailability = open;\n }\n\n public handleClose() {\n this.expandedLocation = false;\n this.expandedAvailability = false;\n this.setAlternativeWeekStartDate(this.data.value?.dateTz);\n this.fetchRooms(false);\n }\n\n /**\n * Continue to Booking Form\n */\n public bookRoom() {\n // submit\n this.store.dispatch(\n storeBookingFormData({\n payload: {\n ...this.data.value,\n },\n })\n );\n\n const bookingRoute = this.data.value.id ? 'edit' : 'create';\n this.router.navigate(['/home', bookingRoute]);\n }\n\n public hideInfoBanner() {\n this.showInfoBanner = false;\n }\n}\n","
\n
\n \n \n
\n
\n \n

This room is not guaranteed until booking confirmation is received.

\n \n
\n
\n \n

This time slot is not available, drag or choose a diferent date or time.

\n
\n
\n
\n \n
\n
\n
\n {{ availabilityStatus | titlecase }} {{ occurenceAvailability }}\n
\n
\n

{{room?.local_name}}

{{data.value?.bookingType.display}}
\n \n
\n
\n \n Equipment\n
    \n
  • \n {{feature}}\n
  • \n
\n
\n
\n
\n \n Catering Available\n
    \n
  • {{catering}}
  • \n
  • (specified in the last booking step)
  • \n
\n
\n
\n
\n
\n
\n

Room Availability:

\n

{{dateString}}

\n \n
\n \n
\n
\n
\n

Room Location:

\n

{{room?.building?.name}}, {{room?.level?.name}}

\n \n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n\n
\n
\n \n {{ open ? '(tap to close)' : '(tap to open)'}}\n
\n

{{ data?.value?.is_recurrent ? 'Recurring' : 'Room' }} Booking Detail

\n
\n\n
\n
Date: {{dateString}}
\n
Time: {{timeString}}
\n
\n
\n
{{data?.value?.recurrence_period === 'list' ? 'Specific dates' :\n data?.value?.recurrence_period | titlecase}}\n -\n Conflicts({{isConflictWithOccurences()?.total_Conflicts}}) \n
\n
Start date: {{dateString}}
\n
End date: {{endDateString}}
\n
Time: {{timeString}}
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n","import {\n Component,\n EventEmitter,\n OnInit,\n Output\n} from '@angular/core';\nimport {\n instantBookOptions,\n roomDetailsRequired,\n roomEquipmentRequiredOptions,\n selectFormFilters,\n selectIsInternal,\n roomCateringAvailable,\n OrganisationService\n} from '@mckinsey-converge/data-common';\nimport {\n select,\n Store\n} from '@ngrx/store';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { BehaviorSubject } from 'rxjs';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport {\n map,\n take\n} from 'rxjs/operators';\n\n@Component({\n selector: 'app-room-filters-form',\n template: `\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n `,\n styleUrls: ['./room-filters-form.component.scss']\n})\nexport class RoomFiltersFormComponent extends BaseDirective implements OnInit {\n\n public instantBookOptions = instantBookOptions;\n public roomEquipmentRequiredOptions = roomEquipmentRequiredOptions;\n public roomDetailsRequired = roomDetailsRequired;\n public roomCateringAvailable = roomCateringAvailable;\n public internalRoomTypeRequiredOptions = [];\n public externalRoomTypeRequiredOptions = [];\n public isInternal = false;\n\n public selectedOptions = new BehaviorSubject[]>([]);\n\n @Output()\n public cancelSubmit = new EventEmitter();\n\n @Output()\n public filtersSubmit = new EventEmitter[]>();\n\n constructor(private store: Store, private _org: OrganisationService) {\n super();\n }\n\n public ngOnInit(): void {\n this.subscription('bookingType',\n this.store.pipe(\n select(selectIsInternal)\n ).subscribe(next => {\n this.isInternal = next;\n }));\n this.subscription('filters',\n this.store.pipe(\n select(selectFormFilters)\n ).subscribe(next => {\n this.selectedOptions.next(next);\n }));\n\n this.externalRoomTypeRequiredOptions = this.getFilters('external_room_types')\n this.internalRoomTypeRequiredOptions = this.getFilters('internal_room_types')\n }\n\n public toggleOptionChecked(selectOption: SelectOption) {\n this.selectedOptions.pipe(\n take(1),\n map(options => {\n const found = options.find(o => o.value === selectOption.value);\n if (found) {\n // remove\n return options.filter(o => o.value !== selectOption.value);\n }\n // add\n return [...options, selectOption];\n })\n ).subscribe(next => {\n this.selectedOptions.next(next);\n });\n }\n\n public submitFilters() {\n this.selectedOptions.pipe(\n take(1)\n ).subscribe(options => {\n this.filtersSubmit.emit(options);\n });\n }\n\n public getFilters(type:string) {\n const filters = this._org.getOrganizationFiltersByRoomType(type) || {}\n return Object.keys(filters).map((key) => {\n const display = filters[key]\n return {\n value: key,\n display,\n shortDisplay: display\n }\n })\n }\n}\n","import {\n Component,\n ViewChild\n} from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { Store } from '@ngrx/store';\nimport { storeRoomFilters } from '@mckinsey-converge/data-common';\nimport { RoomFiltersFormComponent } from 'src/app/booking/room-filters-form/room-filters-form.component';\n\n@Component({\n selector: 'app-room-filters',\n template: `\n
\n \n \n \n \n \n \n \n \n
\n `,\n styleUrls: ['./room-filters-modal.component.scss']\n})\nexport class RoomFiltersModalComponent {\n\n @ViewChild(RoomFiltersFormComponent)\n public form: RoomFiltersFormComponent;\n\n constructor(\n private store: Store,\n private dialogRef: MatDialogRef) {\n }\n\n public close() {\n this.dialogRef.close();\n }\n\n public submitFilters(filters: SelectOption[]) {\n this.store.dispatch(storeRoomFilters({\n payload: filters\n }));\n this.close();\n }\n}\n","import {\n Component,\n Input,\n OnInit,\n OnChanges,\n EventEmitter,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport {\n BehaviorSubject,\n combineLatest,\n} from 'rxjs';\nimport {\n map,\n take,\n} from 'rxjs/operators';\nimport { filterUndefined } from '@mckinsey-converge/rx-utils';\nimport {\n select,\n Store\n} from '@ngrx/store';\nimport {\n CENTER_POINT,\n generateMapStyleForSpace,\n legendOptions,\n MAX_ZOOM_LEVEL,\n MIN_ZOOM_LEVEL,\n spaceToMapFeature,\n} from 'src/app/map/map.utils';\nimport {\n Building,\n BuildingLevel,\n SettingsService,\n Space,\n SpaceStatus,\n selectMapFilteredResults,\n FilteredSpaces\n} from '@mckinsey-converge/data-common';\nimport {\n Point,\n HashMap,\n BaseDirective,\n} from '@mckinsey-converge/base';\nimport { MapFeature } from '@acaprojects/ngx-interactive-map/lib/helpers/map.interfaces';\nimport { OfficeInformationModalComponent } from 'src/app/map/office-information-modal/office-information-modal.component';\nimport { MapSearchStoreState } from '../../map/map-search/map-search.component';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport {\n generateFeedbackUrl,\n Urls\n} from '../../utilities/urls';\n\nexport enum TopBarHeaderMode {\n Light = 'light',\n Dark = 'dark',\n}\n\n@Component({\n selector: 'room-location-preview',\n template: `\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n \n {{building.name}}, {{level.name}}\n
\n
The pinpoint indicates your selected room's location on the floor. No futher interaction is available.
\n
\n
\n
\n \n
\n \n \n
\n \n
\n
\n
\n \n \n
\n
\n \n
\n
\n
\n
\n `,\n styleUrls: ['./room-location-preview.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class RoomLocationPreviewComponent extends BaseDirective implements OnInit, OnChanges {\n public legendOptions = legendOptions();\n\n @Input()\n public mapUrl: string;\n\n @Input()\n public focus: any; // @todo fix\n\n @Input()\n public expanded: boolean;\n\n @Input()\n public building: Building;\n\n @Input()\n public space: Space;\n\n @Input()\n public level: any; // @todo fix\n\n /** The theme to use **/\n @Input() public mode: TopBarHeaderMode = TopBarHeaderMode.Dark;\n\n // Use \"booking_preview\" to show smaller height with zoom icon\n @Input() public viewMode: String = null;\n\n @Output()\n public handleExpand: EventEmitter = new EventEmitter();\n\n public currentPage: string;\n\n public get feedback() {\n return generateFeedbackUrl(this.currentPage);\n }\n\n public get zoomLevel() {\n return this.expanded ? this.minZoom.value : this.zoom.value;\n }\n\n constructor(\n private store: Store,\n public dialog: MatDialog,\n private settingService: SettingsService) {\n super();\n }\n\n public focusedRoom = new BehaviorSubject(undefined);\n public featuresRoom = new BehaviorSubject(undefined);\n public zoom = new BehaviorSubject(MIN_ZOOM_LEVEL);\n public minZoom = new BehaviorSubject(MAX_ZOOM_LEVEL / 3);\n public features = combineLatest([this.featuresRoom]).pipe(map(items => items.filter(i => !!i)));\n public setIntervalHandle: any = null;\n public count = 0;\n public center = new BehaviorSubject(CENTER_POINT);\n /** Mapping of elements to CSS styles */\n public style_map = new BehaviorSubject>>({});\n\n public activeBuilding = new BehaviorSubject(undefined);\n public activeLevel = new BehaviorSubject(undefined);\n public activeSpace = new BehaviorSubject(undefined);\n\n public ngOnChanges(changes: any): void {\n if (changes.expanded && changes.expanded.currentValue) {\n this.activeSpace.pipe(\n take(1),\n filterUndefined(),\n map(spaceToMapFeature)\n ).subscribe(next => {\n this.featuresRoom.next(next);\n });\n } else if (changes.expanded && changes.expanded.previousValue && !changes.expanded.currentValue) {\n this.featuresRoom.next(undefined);\n }\n }\n\n public ngOnInit(): void {\n this.timeout('Getting Title', () => this.updateRoute(document.title));\n\n // MCK-1850 And it's even slower when loading form scratch via an email link, so 10 second interval.\n this.timeout('Zoom to Room', () => this.initMapZoom(), 2000);\n this.activeSpace.next(this.space);\n this.activeBuilding.next(this.building);\n this.activeLevel.next(this.level);\n\n this.subscription('bookingSpaceResults',\n combineLatest([\n this.store.pipe(\n select(selectMapFilteredResults),\n map((r: LoadingModel) => r.success)\n ),\n this.activeBuilding.pipe(filterUndefined()),\n this.activeLevel.pipe(filterUndefined())\n ]).subscribe(([filteredSpaces, building, level]) => {\n const spacesFromSelection = (filteredSpaces.spaces || [])\n .filter(s => !!s.map_id && s.zones.includes(building.id) && s.zones.includes(level.id));\n\n const styles: HashMap> = {};\n // const colour_map = this.settingService.get('app.explore.colors') || {};\n // spacesFromSelection.forEach(space => {\n // const status = filteredSpaces.statusMap[space.id] || SpaceStatus.Available;\n // const mapStyle = generateMapStyleForSpace(space, status, colour_map);\n // styles[`#${mapStyle.id}`] = mapStyle.styles;\n // });\n this.style_map.next(styles);\n \n })\n );\n\n }\n\n public initMapZoom() {\n const self = this;\n // Doesn't reliably zoom to room until that component is finished loading and processing elements.\n // But this alone is not enough when loading from an email link due to how slow the loading is. See the ngOnInit\n this.setIntervalHandle = setInterval(() => {\n if (!this.focus) {\n return;\n }\n \n self.zoomToRoom();\n self.count ++;\n if (self.count > 4) {\n clearInterval(self.setIntervalHandle);\n self.setIntervalHandle = null;\n }\n }, 1000);\n }\n\n public updateRoute(location) {\n location = location.substr(0, location.indexOf(' |'));\n this.currentPage = location;\n }\n\n public goToHelp() {\n window.open(Urls.Help);\n }\n\n public zoomToRoom(): void {\n this.focusedRoom.next(this.focus);\n this.zoom.next(MAX_ZOOM_LEVEL);\n }\n\n public zoomIn() {\n if (this.minZoom.value < MAX_ZOOM_LEVEL) {\n this.minZoom.next(this.minZoom.value + 1);\n }\n }\n\n public zoomOut() {\n if (this.minZoom.value > MIN_ZOOM_LEVEL) {\n this.minZoom.next(this.minZoom.value - 1);\n }\n }\n\n public resetZoomLevels() {\n this.minZoom.next(MIN_ZOOM_LEVEL);\n this.zoom.next(MIN_ZOOM_LEVEL);\n this.center.next(CENTER_POINT);\n this.focusedRoom.next(undefined);\n }\n\n public collapse() {\n this.handleExpand.emit(false);\n const self = this;\n self.count = 0;\n\n this.zoom.next(MAX_ZOOM_LEVEL);\n this.center.next(CENTER_POINT);\n this.focusedRoom.next(undefined);\n\n // Doesn't reliably zoom to room until that component is finished loading and processing elements.\n this.setIntervalHandle = setInterval(() => {\n self.zoomToRoom();\n self.count ++;\n if (self.count > 4) {\n clearInterval(self.setIntervalHandle);\n self.setIntervalHandle = null;\n }\n }, 200);\n }\n\n public displayOfficeInformation() {\n this.dialog.open(OfficeInformationModalComponent,\n {\n data: this.building,\n panelClass: 'mck-alert',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n OnInit,\n OnChanges,\n SimpleChanges,\n} from '@angular/core';\nimport { BookingFormData, RoomResultsViewModel, setupRoomImages, User } from '@mckinsey-converge/data-common';\nimport { ImageDirective, SpaceImageObject } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'app-room-result-item',\n template: `\n
\n
\n
\n
\n {{ availability === 'requestable' ? 'Requestable' : 'Bookable'}}\n {{ viewModel?.space?.availableOccurrences }} out of {{ viewModel?.space?.totalOccurrences }} \n
\n
\n
\n Images Coming Soon\n
\n \n
\n
\n
\n Images Coming Soon\n
\n \n
\n
\n
\n
\n \n {{viewModel.levelDisplay}}, {{viewModel.title}}\n {{type}}\n {{viewModel.office}}\n {{viewModel.capacity}}\n \n \n \n \n \n \n
\n
\n
\n
\n
\n
\n `,\n styleUrls: ['./room-result-item.component.scss']\n})\nexport class RoomResultItemComponent extends ImageDirective implements OnInit, OnChanges {\n\n public rootFolderURL: string = 'assets/img/rooms/';\n public fileSlug: string = '';\n public type: string = '';\n\n /**\n * If undefined, we display in loading state.\n */\n @Input()\n public viewModel: RoomResultsViewModel | undefined;\n\n @Input()\n public data: BookingFormData;\n\n @Input()\n public user: User;\n\n @Output()\n public roomSelect = new EventEmitter();\n\n public availability: \"requestable\" | \"bookable\" | \"booked\" | \"non-bookable\" | null;\n\n public foundImages: SpaceImageObject[] = [1,2].map(n => {\n return {path: `assets/img/rooms/placeholder-${n}.png`};\n });\n\n public ngOnInit(): void {\n if (this.viewModel && this.viewModel.space) {\n this.fileSlug = this.viewModel.space.email.split('@')[0];\n setupRoomImages(this, [1,2], this.rootFolderURL, this.fileSlug);\n const t = this.viewModel.space.internal_or_external;// || 'internal';\n this.type = `${t[0]?.toUpperCase()}${t.toLocaleLowerCase().substring(1)}`\n }\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.availability !== null && (\n changes.data &&\n changes.data.firstChange === true &&\n changes.data.currentValue &&\n changes.data.currentValue.dateTz &&\n changes.data.currentValue.duration\n )) {\n this.availability = this.viewModel.space.byRequest({\n dateTz: this.data.dateTz,\n duration: this.data.duration,\n host: this.user\n }) === false ? \"bookable\" : \"requestable\";\n\n }\n }\n\n public hasData() {\n return this.viewModel !== undefined;\n }\n\n public get typeClass() {\n return this.type.toLocaleLowerCase();\n }\n\n public showLabel(path) {\n return path.includes('placeholder');\n }\n public get timestamp () {\n return (new Date()).getTime()\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewContainerRef\n} from '@angular/core';\nimport {\n select,\n Store\n} from '@ngrx/store';\nimport {\n ActivatedRoute,\n Router\n} from '@angular/router';\nimport {\n BehaviorSubject,\n combineLatest,\n Observable\n} from 'rxjs';\nimport {\n RoomResultsViewModel,\n BookingFormData,\n BookingStoreState,\n selectActiveForm,\n storeBookingFormData,\n SpaceFilterReason,\n User,\n OrganisationService,\n} from '@mckinsey-converge/data-common';\nimport {\n map,\n take,\n distinctUntilChanged\n} from 'rxjs/operators';\nimport {\n AlertBannerDisplay,\n AlertMode,\n BaseTemplateComponent,\n ConflictsModalComponent,\n ConflictsModalComponentData,\n\t\tOverrideChangesModalComponent\n} from '@mckinsey-converge/ui';\nimport { RoomResultsCoachmarkViewmodel } from 'src/app/booking/room-results/room-results-coachmark.viewmodel';\nimport {\n RoomStoreState\n} from '@mckinsey-converge/rooms';\nimport {\n BuildingStoreState,\n} from '@mckinsey-converge/buildings';\nimport { selectCurrentUser, UserStoreState } from '@mckinsey-converge/user';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DialogEvent } from '@mckinsey-converge/base';\n\n\nexport type RoomResultsState = BookingStoreState\n & RoomStoreState\n & BuildingStoreState\n & UserStoreState;\n\n@Component({\n selector: 'app-room-results-paginated',\n template: `\n \n
\n
\n \n \n \n \n \n \n \n \n \n\n
\n \n
\n
\n \n \n \n
\n \n
\n
\n
\n
\n
\n `,\n styleUrls: ['./room-results-paginated.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class RoomResultsPaginatedComponent extends BaseTemplateComponent implements OnInit {\n public ROOM_DISPLAY_STEP = 10;\n public ROOM_DISPLAY_START = 3;\n public AlertMode = AlertMode;\n public AlertBannerDisplay = AlertBannerDisplay;\n /** Offset to add to the start time when selecting a space */\n @Input() public offset = 0;\n\n @Input()\n public viewModels: Observable;\n\n @Input()\n public coachMark: Observable | undefined;\n\n /**\n * If true, show skeleton.\n */\n @Input()\n public isLoading: Observable;\n\n @Output()\n public coachMarkAction = new EventEmitter();\n\n // set property if user room selection from next business day section on result page\n @Input() public nextBusinessDay = false;\n\n public displayCount = new BehaviorSubject(this.ROOM_DISPLAY_START);\n\n /**\n * Fake pagination since API does not support it.\n */\n public displayViewModels: Observable;\n\n public showLoadMore: Observable;\n\n public remainingResults: Observable;\n\n public data = new BehaviorSubject(undefined);\n public currentUser: User;\n\n constructor(vcRef: ViewContainerRef,\n private store: Store,\n private router: Router,\n private route: ActivatedRoute,\n private _org: OrganisationService,\n private cdRef: ChangeDetectorRef,\n private _dialog: MatDialog) {\n super(vcRef);\n }\n\n public ngOnInit(): void {\n super.ngOnInit();\n //test commet for to trigger build again\n this.displayViewModels = combineLatest([this.viewModels, this.displayCount])\n .pipe(\n map(([vm, displayCount]) => { this.cdRef.markForCheck(); return vm?.slice(0, displayCount) } ));\n\n this.showLoadMore = combineLatest([this.viewModels, this.displayCount])\n .pipe(\n map(([vm, displayCount]) => {\n return ((vm?.length ?? 0) > displayCount);\n })\n );\n this.remainingResults = combineLatest([this.viewModels, this.displayCount])\n .pipe(\n map(([vm, displayCount]) => vm && (vm.length - displayCount) || 0));\n\n this.subscription('currentUser', this.store.select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n })\n );\n\n this.subscription('activeForm', this.store.pipe(\n select(selectActiveForm),\n distinctUntilChanged()\n ).subscribe((next: BookingFormData | undefined) => {\n if (next) {\n this.data.next(next);\n this.cdRef.detectChanges();\n\n }\n }));\n this.cdRef.detectChanges();\n }\n\n public loadMore() {\n // fake pagination\n this.displayCount.pipe(\n take(1),\n map(v => v + this.ROOM_DISPLAY_STEP)\n ).subscribe(next => {\n this.displayCount.next(next);\n this.cdRef.detectChanges();\n });\n }\n\n public trackViewModelById(index: number, item: RoomResultsViewModel) {\n return item.space.id;\n }\n\n\n\t\t/**\n\t\t * Handles the selection of a room from the search results.\n\t\t * Depending on the room's availability and recurrence conflicts, this function decides\n\t\t * whether to open a modal for recurrence conflicts, override changes, or navigate to the\n\t\t * room details page. It updates the state and user interface accordingly.\n\t\t *\n\t\t * @param {RoomResultsViewModel} room - The selected room from the search results.\n\t\t * @param {number} availableOccurrences - The number of available occurrences of the room.\n\t\t * @param {number} totalOccurrences - The total number of occurrences of the room.\n\t\t */\n public roomSelected(room: RoomResultsViewModel, availableOccurrences: number, totalOccurrences: number) {\n\n const { is_recurrent } = this.data.value;\n this.data.value.recurrence_exceptions = [];\n if(is_recurrent){\n // Handle recurrence conflicts if the booking is part of a recurring series\n const spaceConflicts = room.space.recurrence_availability.filter(recurr => !recurr.available);\n this.data.value.recurrence_exceptions = spaceConflicts.map((recurr)=> recurr.date);\n }\n\n\t\t// Determine the action based on recurrence conflicts, occurrence edits, and room availability\n\t\tif(this.data.value.recurrence_exceptions.length) {\n this.openRecurrenceConflictsModal(room);\t// Open modal for recurrence conflicts\n }\n else if( this.data.value.occurrence_edits && this.data.value.occurrence_edits.length) {\n this.overrideChanges(room);\t// Open modal to override changes\n }\n else {\n this.goToRoomDetail(room);\t// Navigate to the room details page\n }\n\n }\n\n\t\t/**\n\t\t * Navigates to the room details page for the selected room.\n\t\t * It updates the URL and navigates to the room details page with appropriate query parameters.\n\t\t *\n\t\t * @param {RoomResultsViewModel} room - The selected room from the search results.\n\t\t *\n\t\t * @remarks\n\t\t * The function manages timezone offset and other necessary details to provide accurate room information.\n\t\t * The state object is used to pass relevant data for correct page rendering and form population.\n\t\t *\n\t\t * @private\n\t\t */\n private goToRoomDetail(room) {\n\t\t\t// Handle timezone offset for accurate date and time information\n let { dateTz } = this.data.value;\n if (this.offset) {\n dateTz = dateTz.addValue({ minutes: this.offset });\n }\n\n /**\n * selectedRoom.space is fully fledged Space class\n * this.data.value.booking.room is not and does not contain the timezone\n * this.data.value.booking.timezone is legit\n */\n // UPDATE: providing payload as part of extras instead dispatching storeBookingFormData event to avoid redundant backend request calls\n this.router.navigate(['room'], { relativeTo: this.route, state:{payload : {\n ...this.data.value,\n buildings: this._org.buildings, // require to manage browser refresh on room detail screen!\n dateTz,\n offset: this.offset,\n selectedRoom: room,\n nextBusinessDay: this.nextBusinessDay\n }\n }});\n }\n\n\n /**\n\t * Opens a modal to display recurrence conflicts for the selected room.\n\t * It shows recurrence conflicts, allowing the user to resolve them before proceeding.\n\t * After the modal is closed, it navigates to the room details page if there are no unresolved conflicts.\n\t *\n\t * @param {RoomResultsViewModel} room - The selected room from the search results.\n\t *\n\t * @private\n\t */\n private openRecurrenceConflictsModal(room: RoomResultsViewModel) {\n let { recurrence_exceptions } = this.data.value;\n\n\t\t// Open modal for recurrence conflicts\n const recurr_ref = this._dialog.open(ConflictsModalComponent, {\n maxWidth: '95vw',\n width: '32em',\n data: {\n room_name: room.space.simple_name,\n conflicts: recurrence_exceptions,\n timezone: room.building.timezone\n }\n });\n this.subscription(\n 'conflicts_modal_events',\n recurr_ref.componentInstance.event.subscribe((event: DialogEvent) => {\n\n\t\t\t\tif (event.reason === 'done' && !(this.data.value.occurrence_edits && !this.data.value.occurrence_edits.length) ) {\n\t\t\t\t\t\tthis.goToRoomDetail(room); \t// Navigate to room details page after resolving conflicts\n\t\t\t\t}\n recurr_ref.close();\n })\n );\n recurr_ref.afterClosed().subscribe(() => this.unsub('conflicts_modal_events'));\n }\n\n\t/**\n\t * Opens a modal to allow the user to override changes made to the booking.\n\t * It provides options to confirm or cancel the override, depending on user preference.\n\t * After the modal is closed, it navigates to the room details page if the user confirms the override.\n\t *\n\t * @param {RoomResultsViewModel} room - The selected room from the search results.\n\t *\n\t * @private\n\t */\n private overrideChanges(room: RoomResultsViewModel) {\n\t\t// Open modal for overriding changes made to the booking\n const ref = this._dialog.open(OverrideChangesModalComponent, {\n width: '576px',\n data: {\n edits: this.data.value.occurrence_edits,\n timezone: this.data.value.timezone\n }\n });\n ref.componentInstance.event.subscribe(event => {\n if (event.reason === 'done') {\n this.goToRoomDetail(room);\t// Navigate to room details page after confirming the override\n ref.close();\n } else if (event.reason === 'close') {\n ref.close();\n }\n });\n }\n\n\n\n\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport { BehaviorSubject, combineLatest, Observable, of, Subject } from 'rxjs';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { distinctUntilChanged, filter, map } from 'rxjs/operators';\nimport { BookingRulesLink, RoomResultsCoachmarkViewmodel } from 'src/app/booking/room-results/room-results-coachmark.viewmodel';\nimport {\n Building,\n BuildingLevel,\n mapResultsToViewModels,\n RoomResultsViewModel,\n FilteredSpaces,\n SpaceFilterReason,\n selectActiveForm,\n BookingStoreState,\n BookingFormData,\n OrganisationService,\n} from '@mckinsey-converge/data-common';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { select, Store } from '@ngrx/store';\nimport { RoomStoreState } from '@mckinsey-converge/rooms';\nimport {\n BuildingStoreState,\n} from '@mckinsey-converge/buildings';\nimport { UserStoreState } from '@mckinsey-converge/user';\n\n\nexport type RoomResultsState = BookingStoreState &\n RoomStoreState &\n BuildingStoreState &\n UserStoreState;\n\n\n@Component({\n selector: 'app-room-results-section',\n template: `\n
\n \n
\n\n \n \n \n\n \n \n \n \n `,\n styleUrls: ['./room-results-section.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n})\nexport class RoomResultsSectionComponent extends BaseDirective implements OnInit {\n @Input() public rules_link?: BookingRulesLink;\n /** Offset to add to the start time when selecting a space */\n @Input() public offset = 0;\n\n // set property if user room selection from next business day section on result page\n @Input() public nextBusinessDay : boolean = false\n\n @Input()\n public collapsable: boolean;\n\n /**\n * If collapsable is true, this is used in the collapse header.\n */\n @Input()\n public collapseTitle: string;\n\n /**\n * If collapsable is true, this is used in the collapse header.\n */\n @Input()\n public collapseDescription: string;\n\n @Input()\n public levelBuildings: Observable<{ flattenedLevels: BuildingLevel[]; buildings: Building[] }>;\n\n @Input()\n public results: BehaviorSubject>;\n\n @Output()\n public coachMarkAction = new EventEmitter();\n\n public mainResultViewModels = new BehaviorSubject(\n undefined\n );\n\n public editing_form = new BehaviorSubject(false);\n\n public resultsLoading: Observable;\n public coachMarkDisplay: Observable;\n\n public AlternateBuildings = [];\n public location: any;\n\n private subscribeResultsToViewModels = (\n subName: string,\n resultsObservable: Observable>,\n flattenLevelBuildings: Observable<{ flattenedLevels: any; buildings: Building[] }>,\n viewModelSubject: Subject\n ) => {\n this.subscription(\n subName,\n combineLatest([\n resultsObservable.pipe(map((r) => r.optionalSuccess?.spaces || [])),\n flattenLevelBuildings,\n ])\n .pipe(\n map(([results, { flattenedLevels, buildings }]) =>\n mapResultsToViewModels(\n results?.length && results[0]?.building ? results : [],\n flattenedLevels,\n buildings\n )\n )\n )\n .subscribe((next) => {\n viewModelSubject.next(next);\n })\n );\n };\n\n constructor(private store: Store, private _org: OrganisationService) {\n super();\n }\n\n public ngOnInit(): void {\n this.resultsLoading = this.results.pipe(map((m) => m.isLoading));\n\n this.subscription(\n 'activeForm',\n combineLatest([this.editing_form, this.store])\n .pipe(\n filter(([edit]) => !edit),\n map(([_, store]) => store),\n select(selectActiveForm),\n distinctUntilChanged()\n )\n .subscribe((next: BookingFormData | undefined) => {\n if (next) {\n this.location = next.location;\n this.updateCoachMark();\n } else {\n }\n })\n );\n\n this.subscription(\n 'buildings',\n this._org.listen('buildings').subscribe(() => {\n this.updateCoachMark();\n })\n );\n\n this.coachMarkDisplay = this.results.pipe(\n map((r) => r.optionalSuccess?.reason || SpaceFilterReason.None),\n map(\n (r) =>\n new RoomResultsCoachmarkViewmodel(r, this.rules_link, this.AlternateBuildings)\n )\n );\n\n this.subscribeResultsToViewModels(\n 'resultListing',\n this.results,\n this.levelBuildings || of({ flattenedLevels: [], buildings: [] }),\n this.mainResultViewModels\n );\n }\n\n updateCoachMark() {\n const buildingsInSameCity = this._org.buildings?.filter(_ => {\n // Make sure this.location is populated to pass unit tests -\n if (!this.location || this.location.length === 0) return false;\n // If all offices are selected, city name will be at this.location[0]?.meta?.city.name, otherwise use this.location[0]?.meta?.city \n const cityFromLocation = typeof this.location[0]?.meta?.city === 'object' && this.location[0]?.meta?.city !== null\n ? this.location[0]?.meta?.city.name\n : this.location[0]?.meta?.city;\n return _.city === cityFromLocation;\n });\n const AlternateBuildings = buildingsInSameCity?.filter(\n (building) =>\n !this.location.some(\n (locationItem) => locationItem.meta?.building?.id === building.id\n )\n );\n this.AlternateBuildings = AlternateBuildings;\n this.coachMarkDisplay = this.results.pipe(\n map((r) => r.optionalSuccess?.reason || SpaceFilterReason.None),\n map(\n (r) =>\n new RoomResultsCoachmarkViewmodel(r, this.rules_link, this.AlternateBuildings)\n )\n );\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n if (changes.results || changes.levelBuildings || changes.mainResultViewModels) {\n this.subscribeResultsToViewModels(\n 'resultListing',\n this.results,\n this.levelBuildings || of({ flattenedLevels: [], buildings: [] }),\n this.mainResultViewModels\n );\n }\n }\n\n public onCoachmarkAction(reason: SpaceFilterReason) {\n this.coachMarkAction.emit(reason);\n }\n}\n","import { SpaceFilterReason } from '@mckinsey-converge/data-common';\n\nexport interface BookingRulesLink {\n name: string;\n url: string;\n}\nexport class RoomResultsCoachmarkViewmodel {\n public visible: boolean;\n public title: string;\n public actionButtonText: string;\n\n constructor(public reason: SpaceFilterReason, public rules_link?: BookingRulesLink, alternateBuildings?:any[]) {\n this.visible = true;\n switch (reason) {\n case SpaceFilterReason.DateTime:\n this.title =\n 'There are no available rooms that match your search criteria. ' +\n 'Please adjust your search criteria and try again.';\n this.actionButtonText = 'Return to search';\n break;\n case SpaceFilterReason.OfficeRules:\n this.title =\n `There are no available rooms that match your search criteria.\n Please adjust your search criteria and try again.`;\n if (alternateBuildings && alternateBuildings.length > 0) {\n this.title += ` Alternatively, you can try ${alternateBuildings.length > 1 \n ? alternateBuildings.slice(0, -1).map(building => building.name).join(', ') + ', or ' + alternateBuildings[alternateBuildings.length - 1].name \n : alternateBuildings[0]?.name\n }.`;\n }\n if (rules_link) {\n this.title +=\n `
For information on booking rules please see ` +\n `${rules_link.name}`;\n }\n this.actionButtonText = 'Return to search';\n break;\n case SpaceFilterReason.Filters:\n this.title =\n 'No rooms available for your filter criteria. ' +\n 'Try to clear the filter please.';\n this.actionButtonText = 'Clear filter';\n break;\n case SpaceFilterReason.AlternateBuildingsFound:\n this.title = `There are no available rooms that match your search criteria. Please try ${\n alternateBuildings.length > 1 \n ? alternateBuildings.slice(0, -1).map(building => building.name).join(', ') + ', or ' + alternateBuildings[alternateBuildings.length - 1].name \n : alternateBuildings[0]?.name\n }.`;\n this.actionButtonText = 'Return to search';\n break;\n case SpaceFilterReason.None:\n this.visible = false;\n this.title = '';\n this.actionButtonText = '';\n break;\n }\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { TopBarHeaderMode } from 'src/app/components/topbar-header/topbar-header.component';\nimport { select, Store } from '@ngrx/store';\nimport {\n laterThatDayFromDateTz,\n loadRoomsWithQuery,\n RoomStoreState,\n mapRoomToSelectOption,\n loadRoomsForResultsMap,\n} from '@mckinsey-converge/rooms';\nimport { BaseDirective, timeWithZoneFormatString } from '@mckinsey-converge/base';\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs';\nimport {\n Building,\n BuildingLevel,\n flattenBuildingsWithLevels,\n BookingStoreState,\n FilteredSpaces,\n SpaceFilterReason,\n clearRoomFilters,\n selectActiveForm,\n selectFilteredLaterDayResults,\n selectFilteredNextDayResults,\n selectFilteredResults,\n selectFormFilters,\n BookingFormData,\n roomFormDataToQuery,\n selectFilteredDiffSizeResults,\n OrganisationService,\n CollapseService\n} from '@mckinsey-converge/data-common';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { debounceTime, distinctUntilChanged, filter, map, shareReplay } from 'rxjs/operators';\nimport {\n buildingStateSelector,\n BuildingStoreState,\n loadBuildings,\n} from '@mckinsey-converge/buildings';\nimport * as cloneDeep from 'lodash/cloneDeep';\nimport { filterUndefined, resultCountObservable } from '@mckinsey-converge/rx-utils';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { MatDialog } from '@angular/material/dialog';\nimport { RoomBookingModalComponent } from 'src/app/booking/room-booking-modal/room-booking-modal.component';\nimport { RoomFiltersModalComponent } from 'src/app/booking/room-filters-modal/room-filters-modal.component';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport {\n BookingRulesLink,\n RoomResultsCoachmarkViewmodel,\n} from 'src/app/booking/room-results/room-results-coachmark.viewmodel';\nimport { UserStoreState } from '@mckinsey-converge/user';\nimport { FormControl } from '@angular/forms';\nimport { Location } from '@angular/common';\n\nexport type RoomResultsState = BookingStoreState &\n RoomStoreState &\n BuildingStoreState &\n UserStoreState;\n\n@Component({\n selector: 'app-room-results',\n template: `\n \n
\n \n
\n
\n
\n
\n
\n \n
\n
\n
\n {{ open ? '(tap to close)' : '(tap to open)' }}\n \n
\n
\n
\n
\n
\n \n \n
\n
\n
\n \n
\n
\n
\n \n \n
\n \n \n
\n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n `,\n styleUrls: ['./room-results.component.scss'],\n animations: [\n trigger('collapseHeight', [\n state(\n 'open',\n style({\n height: '*',\n opacity: 1,\n })\n ),\n state(\n 'closed',\n style({\n overflow: 'hidden',\n opacity: 0,\n height: '0px',\n })\n ),\n transition('open <=> closed', animate('600ms ease-out')),\n ]),\n trigger('expandWidth', [\n state(\n 'open',\n style({\n maxWidth: '1024px',\n })\n ),\n state(\n 'closed',\n style({\n maxWidth: '96%',\n })\n ),\n transition('open <=> closed', animate('600ms ease-out')),\n ]),\n ],\n})\nexport class RoomResultsComponent extends BaseDirective implements OnInit {\n public TopBarHeaderMode = TopBarHeaderMode;\n\n public day_offset = 1;\n\n public data = new BehaviorSubject(undefined);\n public filters = new BehaviorSubject[]>([]);\n\n public mainResults = new BehaviorSubject>(LoadingModel.empty());\n public mainResultsFiltered = new BehaviorSubject>(\n LoadingModel.empty()\n );\n public laterThatDayResults = new BehaviorSubject>(\n LoadingModel.empty()\n );\n public nextBusinessDayResults = new BehaviorSubject>(\n LoadingModel.empty()\n );\n public diffSizeResults = new BehaviorSubject>(\n LoadingModel.empty()\n );\n public mainResultsSpaces: SelectOption[];\n\n public laterThatDayDisplay = new BehaviorSubject(undefined);\n\n public mainCoachMarkDisplay = this.mainResults.pipe(\n map((r) => r.optionalSuccess?.reason || SpaceFilterReason.None),\n map((r) => new RoomResultsCoachmarkViewmodel(r, this.rules_link))\n );\n\n public rules_link?: BookingRulesLink;\n\n public mainResultsCount = resultCountObservable(\n this.mainResultsFiltered,\n this.mainResultsFiltered.pipe(map((r) => r.optionalSuccess?.spaces))\n );\n public laterThatDayCount = resultCountObservable(\n this.laterThatDayResults,\n this.laterThatDayResults.pipe(map((r) => r.optionalSuccess?.spaces))\n );\n public nextBusinessDayCount = resultCountObservable(\n this.nextBusinessDayResults,\n this.nextBusinessDayResults.pipe(map((r) => r.optionalSuccess?.spaces))\n );\n public diffSizeCount = resultCountObservable(\n this.diffSizeResults,\n this.diffSizeResults.pipe(map((r) => r.optionalSuccess?.spaces))\n );\n\n public selectedToggle = new BehaviorSubject(0);\n\n public flattenLevelBuildings: Observable<{\n flattenedLevels: BuildingLevel[];\n buildings: Building[];\n }>;\n\n public open: boolean = true;\n public editing_form = new BehaviorSubject(false);\n\n public spaceControl = new FormControl();\n\n public selectedSpace: SelectOption;\n public resetInput: number;\n\n public searchStringPresent = false;\n public payload: any = {\n payload: { name: 'test', id: 'test-id' },\n building: {},\n floorMap: true,\n };\n\n public isOpen = true;\n\n public toggle() {\n this.isOpen = !this.isOpen;\n }\n\n constructor(\n private store: Store,\n private router: Router,\n private route: ActivatedRoute,\n private dialog: MatDialog,\n private _org: OrganisationService,\n private location: Location,\n private collapseService: CollapseService\n ) {\n super();\n this.payload = location.getState();\n }\n\n public ngOnInit(): void {\n this.subscription(\n 'filters',\n this.store.pipe(select(selectFormFilters), distinctUntilChanged()).subscribe((next) => {\n return this.filters.next(next);\n })\n );\n\n this.subscription(\n 'activeForm',\n combineLatest([this.editing_form, this.store])\n .pipe(\n filter(([edit]) => !edit),\n map(([_, store]) => store),\n select(selectActiveForm),\n distinctUntilChanged()\n )\n .subscribe((next: BookingFormData | undefined) => {\n if (next) {\n const day = next.dateTz.dateWeekday - 1;\n this.day_offset = day >= 4 ? 7 - day : 1;\n const building = this._org.buildings.find(\n (_) => _.id === next.location[0]?.meta?.building?.id\n );\n this.rules_link =\n building?.setting('booking.rules_link') ||\n next.location.find(\n office => office?.meta?.building?._settings?.discovery_info?.booking?.rules_link\n )?.meta?.building?._settings?.discovery_info?.booking?.rules_link;\n // next.location[0]?.meta?.building?.settings?.discovery_info?.booking\n // ?.rules_link;\n const nday = laterThatDayFromDateTz(next.dateTz);\n this.laterThatDayDisplay.next(`at ${timeWithZoneFormatString(nday)}`);\n // this.store.dispatch(loadRoomsWithQuery(roomFormDataToQuery(next)));\n this.data.next(next);\n \n //Dispatches actions to load rooms based on the provided value.\n this.despatchLoadRooms();\n\n // this.data.next(next);\n } else {\n // no form data, likely visiting directly. navigate back to start\n this.router.navigate(['../'], {\n replaceUrl: true,\n relativeTo: this.route,\n });\n }\n })\n );\n\n this.subscription(\n 'results',\n this.store.pipe(select(selectFilteredResults)).subscribe((next) => {\n this.mainResults.next(next);\n this.mainResultsFiltered.next(next);\n // Populate results for Search\n this.mainResultsSpaces = next.success?.spaces\n ? next.success?.spaces?.map(mapRoomToSelectOption)\n : [];\n })\n );\n\n this.subscription(\n 'laterResults',\n this.store.pipe(select(selectFilteredLaterDayResults)).subscribe((next) => {\n this.laterThatDayResults.next(next);\n })\n );\n\n this.subscription(\n 'nextDayResults',\n this.store.pipe(select(selectFilteredNextDayResults)).subscribe((next) => {\n this.nextBusinessDayResults.next(next);\n })\n );\n\n this.subscription(\n 'diffSize',\n this.store.pipe(select(selectFilteredDiffSizeResults)).subscribe((next) => {\n this.diffSizeResults.next(next);\n })\n );\n\n this.flattenLevelBuildings = this.store.pipe(\n select(buildingStateSelector),\n select(loadBuildings.selectors.optionalSuccess),\n filterUndefined(),\n map(flattenBuildingsWithLevels),\n shareReplay(1)\n );\n\n this.subscription(\n 'spaceChanges',\n this.spaceControl.valueChanges.subscribe((value) => {\n const mainResultsFiltered = cloneDeep(this.mainResults.value);\n const filteredRooms = this.mainResults.value.success?.spaces?.filter((s) => {\n if (s.id === value.value) {\n return true;\n }\n return false;\n });\n mainResultsFiltered.success.spaces = filteredRooms;\n this.mainResultsFiltered.next(mainResultsFiltered);\n })\n );\n\n // if coming from kiosk map url, route there\n if (this.payload?.floorMap) {\n this.router.navigate([`../home/floor-map`], {\n state: { ...this.payload },\n queryParams: {\n display: '',\n },\n });\n }\n\n this.subscription(\n 'spaceChanges',\n this.selectedToggle.subscribe((value) => {\n //Dispatches actions to load rooms based on the provided value.\n this.despatchLoadRooms();\n })\n );\n }\n\n /**\n * Dispatches actions to load rooms based on the provided value.\n * @param {number} value - The value indicating the mode of operation.\n * 0: Load rooms for regular view.\n * 1: Load rooms for results map view.\n */\n public despatchLoadRooms() {\n const selectedMenuIndex = this.selectedToggle.value; // List/Map/Calendar\n const isForFloorMap = this.payload?.floorMap;\n // If value is 0 and floorMap is not present in payload\n if(selectedMenuIndex === 0 && !isForFloorMap) {\n // Dispatch action to load rooms with query generated from form data\n this.store.dispatch(loadRoomsWithQuery(roomFormDataToQuery(this.data.value)));\n }\n \n // If value is 1 or floorMap is present in payload\n if(selectedMenuIndex === 1 || isForFloorMap) {\n // Dispatch action to load rooms for results map view with query generated from form data\n this.store.dispatch( loadRoomsForResultsMap.request(roomFormDataToQuery(this.data.value)));\n }\n }\n\n public clearRoomSearch() {\n this.resetInput = Date.now();\n this.selectedSpace = null;\n const mainResults = cloneDeep(this.mainResults.value);\n this.mainResultsFiltered.next(mainResults);\n this.searchStringPresent = false;\n }\n\n public inputTextChange(event: any) {\n this.searchStringPresent = !!event.length;\n }\n\n public changeInput(event) {\n if (event) {\n this.clearRoomSearch();\n }\n }\n\n public filteredRoomsChange(event: SelectOption[]) {\n const roomIds = event.map((o) => o.value);\n const mainResultsFiltered = cloneDeep(this.mainResults.value);\n const filteredRooms = this.mainResults?.value?.success?.spaces\n ? this.mainResults?.value?.success?.spaces?.filter((s) => {\n if (roomIds.includes(s.id)) {\n return true;\n }\n return false;\n })\n : [];\n mainResultsFiltered.success.spaces = filteredRooms;\n this.mainResultsFiltered.next(mainResultsFiltered);\n }\n\n public changeSearchResults() {\n this.editing_form.next(true);\n const dialog_ref = this.dialog.open(RoomBookingModalComponent, {\n panelClass: 'mck-modal',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n dialog_ref.afterClosed().subscribe(() => {\n this.editing_form.next(false);\n this.collapseService.collapsePanel();\n });\n }\n\n public filterResults() {\n this.dialog.open(RoomFiltersModalComponent, {\n panelClass: 'mck-modal',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n }\n\n public onCoachmarkAction(reason: SpaceFilterReason) {\n switch (reason) {\n case SpaceFilterReason.Filters:\n this.store.dispatch(clearRoomFilters());\n break;\n case SpaceFilterReason.OfficeRules:\n case SpaceFilterReason.DateTime:\n this.changeSearchResults();\n break;\n }\n }\n\n public selectedToggleChange(event: SelectOption) {\n this.selectedToggle.next(event.value);\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges\n} from '@angular/core';\n\nimport {\n humaniseDuration,\n timeFormatString,\n timeWithGmtOffsetFormatString,\n weekDayMonthYearFormat\n} from '@mckinsey-converge/base';\nimport {\n truncateLocationList,\n BookingFormData,\n getLastDateFromList\n} from '@mckinsey-converge/data-common';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { DateTZ } from '@mckinsey-converge/date-tz'\n\n@Component({\n selector: 'app-searched-location',\n template: `\n
\n
\n {{name}}\n {{date}}\n {{timing}}\n {{types}}\n No filters applied\n Filtering unavailable for this view\n {{filterDisplay}}\n
\n
\n \n Filter {{filterCount}}\n \n
\n
\n `,\n styleUrls: ['./searched-location.component.scss']\n})\nexport class SearchedLocationComponent implements OnInit, OnChanges {\n\n @Input()\n public data: BookingFormData;\n\n @Input()\n public filters: SelectOption[] = [];\n\n @Output()\n public changeClick = new EventEmitter();\n\n @Output()\n public filterClick = new EventEmitter();\n\n @Input()\n public canFilter = true;\n\n public name = '';\n public date = '';\n public timing = '';\n public types = '';\n public filterDisplay = '';\n public filterCount = '';\n\n constructor() {\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.data || changes.filters) {\n this.computeDisplay();\n }\n }\n\n public ngOnInit(): void {\n this.computeDisplay();\n }\n\n\n public computeDisplay() {\n if (!this.data) {\n return;\n }\n const { duration, dateTz, location, roomSize, bookingType, is_recurrent, recurrence_endTz } = this.data;\n\n \n // this.requestedEndDateTz = new DateTZ({ date: endDate.date.valueOf(), is_local_tz, building_tz })\n\n const group = location.find(l => l.groupHeader);\n if (group) {\n this.name = group.shortDisplay;\n } else {\n this.name = truncateLocationList(location);\n }\n\n // R--- blocked until TZ booking form inputs\n const building_tz = location[0]?.meta?.building?.timezone || location[0]?.meta?.city?.timezone;\n const startDate = new DateTZ({date: dateTz.ms, is_local_tz: false, building_tz })\n\n if(is_recurrent) {\n const occEndDate = getLastDateFromList( this?.data?.recurrence_starts );\n \tconst endRecDate = new DateTZ({date: occEndDate.ms, is_local_tz: false, building_tz });\n this.date = `From ${weekDayMonthYearFormat(startDate)} until ${weekDayMonthYearFormat(endRecDate)}` ;\n }\n else {\n this.date = weekDayMonthYearFormat(startDate);\n }\n\n const startDisplay = startDate.formatDate(`${timeFormatString()}`).toLocaleLowerCase();\n const endDate = startDate.addValue({ minutes: duration });\n const endDisplay = timeWithGmtOffsetFormatString(endDate);\n this.timing = `${startDisplay}-${endDisplay}`; // - TODO correct for DST?\n\n const durationDisplay = humaniseDuration(duration, 'short');\n this.types = `${durationDisplay}, ${bookingType.display}, ${roomSize.display}`;\n\n this.filterDisplay = this.filters.map(f => f.shortDisplay).join(', ');\n this.filterCount = this.filters.length > 0 ? `(${this.filters.length})` : '';\n }\n}\n","import {\n Component,\n OnInit\n} from '@angular/core';\nimport { first } from 'rxjs/operators';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n ApplicationLink,\n ApplicationService\n} from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'a-footer-menu',\n templateUrl: './footer-menu.component.html',\n styleUrls: ['./footer-menu.component.scss']\n})\nexport class FooterMenuComponent extends BaseDirective implements OnInit {\n\n /** Tiles to display on the home page */\n public tiles: ApplicationLink[] = [];\n\n constructor(private _service: ApplicationService) {\n super();\n }\n\n /** Angular Component initialisation lifecycle hook */\n public ngOnInit(): void {\n this._service.initialised.pipe(first(_ => _)).subscribe(() => {\n this.tiles = this._service.setting('app.home.tiles') || [];\n });\n }\n}\n","\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output\n} from '@angular/core';\nimport {\n ActivatedRoute,\n Router\n} from '@angular/router';\nimport { first } from 'rxjs/operators';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n ApplicationService,\n Building,\n BuildingLevel,\n OrganisationService\n} from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'a-map-controls',\n templateUrl: './map-controls.component.html',\n styleUrls: ['./map-controls.component.scss']\n})\nexport class MapControlsComponent extends BaseDirective implements OnInit {\n /** ID of the active building */\n @Input() public building: string;\n /** ID of the active level */\n @Input() public level: string;\n /** Emitter for changes to the active level */\n @Output() public levelChange = new EventEmitter();\n /** Details of the active building */\n public building_details: Building = this._org.building;\n /** List of available buildings */\n public building_list: Building[] = [];\n /** List of available levels */\n public level_list: readonly BuildingLevel[] = [];\n\n public get can_select_building(): boolean {\n return !!this._service.setting('app.explore.can_select_building');\n }\n\n constructor(\n private _route: ActivatedRoute,\n private _router: Router,\n private _service: ApplicationService,\n private _org: OrganisationService\n ) {\n super();\n }\n\n public ngOnInit() {\n this._org.listen('buildings').pipe(first(_ => !!_ && !!_.length)).subscribe(() => {\n this.subscription(\n 'route.query',\n this._route.queryParamMap.subscribe(params => {\n /* istanbul ignore else */\n if (params.has('level')) {\n const level_id = params.get('level');\n const level = this._org.levelWithID(level_id);\n this.level = level.id;\n this.setBuilding(level.building_id);\n this.levelChange.emit(this.level);\n this.clearTimeout('check_building');\n }\n })\n );\n this.building_list = this._org.buildings;\n this.timeout('check_building', () => {\n /* istanbul ignore else */\n if (!this.building) {\n this.setBuilding(this._org.building.id);\n }\n this.levelChange.emit(this.level);\n });\n });\n }\n\n public setBuilding(bld_id: string) {\n const building = this._org.buildings.find(bld => bld.id === bld_id);\n /* istanbul ignore else */\n if (building) {\n this.building_details = building;\n this.building = bld_id;\n this._org.building = building;\n this.level_list = building.levels;\n /* istanbul ignore else */\n if (this.level_list.length && !this.level_list.find(lvl => lvl.id === this.level)) {\n this.updateLevel(this.level_list[0].id);\n }\n }\n }\n\n public updateLevel(lvl_id: string) {\n this.level = lvl_id;\n this.levelChange.emit(this.level);\n this._router.navigate([], {\n relativeTo: this._route,\n queryParams: { level: lvl_id }\n });\n }\n}\n","
\n 1\"\n >\n \n {{ building_details?.code }} - {{ building_details?.name }} \n \n
\n
{{ bld.code }}
\n
{{ bld.name }}
\n
{{ bld.address }}
\n
\n
\n
\n \n \n \n \n {{ level.name }}\n \n \n \n
\n","import {\n Component,\n EventEmitter,\n Input,\n Output\n} from '@angular/core';\n\nimport {\n ApplicationLink,\n ApplicationService\n} from '@mckinsey-converge/data-common';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\nimport { DateNow } from '@mckinsey-converge/date-tz';\n\n\n@Component({\n selector: 'a-overlay-menu',\n templateUrl: './overlay-menu.component.html',\n styleUrls: ['./overlay-menu.component.scss']\n})\nexport class OverlayMenuComponent extends BaseDirective {\n /** Whether to show the menu */\n @Input() public show: boolean;\n /** Emitter for changes to show */\n @Output() public showChange = new EventEmitter();\n\n /** List of links to display on the menu */\n public get menu_items(): ApplicationLink[] {\n const settings = this._service.setting('app.general.menu') || { items: [] };\n return settings.items || [];\n }\n\n /** Copyright details for the application */\n public get copyright(): string {\n return (this._service.setting('app.general.menu') || {}).copyright || '';\n }\n\n public get settings() {\n const settings = this._service.setting('app.general.menu') || { position: '' };\n return settings;\n }\n\n constructor(private _service: ApplicationService) {\n super();\n }\n\n /** Current year to display for copyright */\n public get year(): number {\n return DateNow(new Date()).dateYear;\n }\n\n /** Close the overlay menu */\n public close() {\n this.show = false;\n this.showChange.emit(this.show);\n }\n\n public delayedClose() {\n this.timeout('close', () => this.close(), 50);\n }\n\n public cancelClose() {\n this.timeout('cancel_close', () => this.clearTimeout('close'), 10);\n }\n}\n","\n
\n
\n
\n \n
\n
\n \n
\n
\n Copyright © {{ year }} {{ copyright }}\n
\n
\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnInit\n} from '@angular/core';\nimport { throttleTime, tap } from 'rxjs/operators';\nimport { BehaviorSubject, fromEvent } from 'rxjs';\nimport { ImageDirective } from '@mckinsey-converge/base';\nimport { setupRoomImages } from '@mckinsey-converge/data-common';\nimport { SpaceImageObject } from 'libs/base/src/lib/types.utilities'\n\n@Component({\n selector: 'mck-responsive-inline-images',\n template: `\n
\n
\n \n
\n Images Coming Soon\n
\n \n
\n
\n
\n Images Coming Soon\n
\n
\n
\n `,\n styleUrls: ['./responsive-inline-images.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ResponsiveInlineImagesComponent extends ImageDirective implements OnInit {\n\n /** Input array of images */\n @Input() public rootFolderURL: string;\n @Input() public fileSlug: string;\n\n /** Ignore this param, it's only use is to bypass the image onload event in testing */\n @Input() public imagesLoaded: boolean;\n public loadImages = new BehaviorSubject([]);\n\n public foundImages: SpaceImageObject[] = [1,2,3].map(n => {\n return {path: `assets/img/rooms/placeholder-${n}.png`};\n });\n\n public mobile = false;\n\n constructor(private cdRef: ChangeDetectorRef,) {\n super();\n }\n\n public ngOnInit(): void {\n const breakpoint = 768;\n\n if (window) {\n this.mobile = window.innerWidth < breakpoint;\n }\n\n fromEvent(window, 'resize').pipe(throttleTime(500)).pipe(tap({\n next: val => {\n const target = val.target as Window;\n this.mobile = target.innerWidth < breakpoint;\n }\n })).subscribe();\n setupRoomImages(this, [1,2,3], this.rootFolderURL, this.fileSlug, this.imagesLoaded);\n this.subscription(\n\t\t\t\t\t\t'found_images',\n\t\t\t\t\t\tthis.loadImages.subscribe((imgArr: SpaceImageObject[]) => {\n\t\t\t\t\t\t\tif(imgArr.length) this.foundImages = imgArr;\n\t\t\t\t\t\t\tthis.cdRef.detectChanges();\n\t\t\t\t\t\t}));\n }\n\n public showLabel(path) {\n return path.includes('placeholder');\n } \n\n public get timestamp () {\n return (new Date()).getTime()\n }\n}\n","import {\n Component,\n Inject,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n MatDialogRef,\n MAT_DIALOG_DATA\n} from '@angular/material/dialog';\nimport {\n BaseClass\n} from '@mckinsey-converge/base';\nimport { ComposerService } from '@placeos/composer';\nimport { first } from 'rxjs/operators';\n\n@Component({\n selector: 'a-survey-modal',\n templateUrl: './survey-modal.component.html',\n styleUrls: ['./survey-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class SurveyModalComponent extends BaseClass implements OnInit {\n constructor(\n @Inject(MAT_DIALOG_DATA) public _data: any,\n private _composer: ComposerService,\n private _dialog_ref: MatDialogRef,\n ) {\n super();\n }\n\n /* present experience question by default */\n public token = '';\n public phase = 'intro';\n public baseUrl = '';\n\n public questions = {\n created_at: 0,\n updated_at: 0,\n header_question: \"What went wrong?\",\n header_subtext: \"Select one or several options\",\n options: [],\n id: \"\"\n }\n\n public answers = {\n questions_id: \"\",\n positive: true, // Experience is positive until the questions are displayed\n option_responses: [],\n comments: \"\"\n };\n\n // Show the questions and mark the experience negative. (false positive)\n public showQuestions(): void {\n this.answers.positive = false;\n this.phase = 'questions';\n }\n\n public ngOnInit(): void {\n /* fetch the question options once composer is initialized */\n this._composer.initialised.pipe(first(_ => _)).subscribe(() => {\n const token = this._composer.auth.token;\n this.token = token;\n this.baseUrl = this._composer.auth.api_endpoint.replace(this._composer.auth.route, '/api/staff/feedback')\n this.getFeedbackQuestionsFromApi(token, this._data)\n });\n }\n\n public getFeedbackQuestionsFromApi(token: string, questionID: string) {\n new Promise((resolve, reject) => {\n const url = `${this.baseUrl}/questions/${questionID}`;\n let result: any = null;\n this._composer.http.get(url).subscribe(\n (d) => (result = d),\n (e) => {\n reject(e);\n },\n () => {\n resolve(result);\n }\n );\n }).then(d => {\n this.questions = d;\n this.answers = {\n questions_id: this.questions.id,\n positive: true,\n option_responses: this.questions.options.map(q => ({ // map the questions to default answers.\n id: q.id,\n checked: false,\n })),\n comments: \"\"\n };\n }).catch(e => {\n console.log('error', e)\n });\n }\n\n // Handle the checkbox changes\n public handleChange(value: any) {\n this.answers.option_responses.some((o, i) => {\n if (o.id === value.id) {\n this.answers.option_responses[i].checked = !this.answers.option_responses[i].checked;\n return true;\n }\n });\n }\n\n // Handle the comment input changes\n public handleComment($evemt: any) {\n this.answers.comments = $evemt.target.value;\n }\n\n // Submit the Survey in it's current state.\n public confirm() {\n new Promise((resolve, reject) => {\n let result: any = null;\n this._composer.http.post(this.baseUrl, this.answers).subscribe(\n (d) => (result = d),\n (e) => {\n reject(e);\n },\n () => {\n resolve(result);\n }\n );\n }).then(d => {\n this.phase = 'exit';\n this.closeModal(true);\n }).catch(e => {\n console.log('error', e)\n this.phase = 'exit';\n this.closeModal(true);\n });\n \n }\n\n // Close the modal\n public closeModal(delayed: boolean = false) {\n if (delayed) {\n this.timeout('closeModal', () => {\n this._dialog_ref.close();\n }, 2000);\n } else {\n this._dialog_ref.close();\n }\n }\n}\n","
\n \n
\n
\n \n
\n How was your booking experience?\n
\n
\n
\n \n \n
\n
\n\n\n
\n
\n \n
\n \n What went wrong?\n

Select one or several options

\n
\n
\n
\n
\n {{question.option}}\n
\n
\n \n \n \n \n
\n
\n \n \n \n
\n\n
\n
\n \n
\n\n \n
\n Thank you!\n
\n \n
\n
\n
\n
","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n distinctUntilChanged,\n first,\n} from 'rxjs/operators';\nimport {\n ApplicationIcon,\n BookingFormState,\n SettingsService,\n openBookingSurvey,\n clearBookingFormData,\n BookingFormData,\n SeriesAction,\n selectActiveForm,\n OrganisationService\n} from '@mckinsey-converge/data-common';\nimport { loadRoomsForResults } from '@mckinsey-converge/rooms';\n\nimport { loadOrganisations } from '@mckinsey-converge/organisation';\nimport { BuildingStoreState } from '@mckinsey-converge/buildings';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport {\n NavigationEnd,\n Router,\n ActivatedRoute\n} from '@angular/router';\nimport {\n generateFeedbackUrl,\n Urls\n} from '../../utilities/urls';\nimport { SurveyModalComponent } from '../survey-modal/survey-modal.component';\nimport {\n Store, select\n} from '@ngrx/store';\n\nexport enum TopBarHeaderMode {\n Light = 'light',\n Dark = 'dark',\n}\n\nexport interface RoutePayload {\n /** IE ['/home', 'results'] */\n route: string[];\n /** IE { display: '/list' } */\n queryParams?: object;\n}\n\nexport type RoomBookingStoreState = BookingFormState & BuildingStoreState;\n\n@Component({\n selector: 'a-topbar-header',\n template: `\n
\n
\n \n
\n
\n
\n {{ logo.content }}\n \n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n \n
\n
\n `,\n styleUrls: ['./topbar-header.component.scss'],\n // encapsulation: ViewEncapsulation.None,\n})\nexport class TopbarHeaderComponent extends BaseDirective implements OnInit {\n /** Logo of the application organisation */\n public logo: ApplicationIcon;\n /** Whether to show menu */\n @Input() public menu: boolean;\n /** Whether to show modal close icon */\n @Input() public modal: boolean = false;\n /** Whether t show modal back icon */\n @Input() public backModal: boolean = false;\n /** Whether to disable the survey triggers */\n @Input() public noSurvey: boolean = false;\n /** Name of the page being rendered */\n @Input() public page: string;\n /** The theme to use **/\n @Input() public mode: TopBarHeaderMode = TopBarHeaderMode.Dark;\n /** Override the home route. **/\n @Input() public homeOverride: string | undefined;\n /** Show history back instead of logo block */\n @Input() public back: RoutePayload;\n /** Emitter for changes to menu state */\n @Output() public menuChange = new EventEmitter();\n /** Emitter for the close button */\n @Output() public closeCallback = new EventEmitter();\n /** Emitter for the back button */\n @Output() public onBack = new EventEmitter();\n /** Name of the currently active page */\n public currentPage: string;\n /** Survey modal state */\n public modalOpen: boolean = false;\n isEditSeries: boolean = false;\n\n public get feedback() {\n const feedback_url = this._org.getOrganizationFiltersByRoomType('feedback_url');\n return `${feedback_url}${this.currentPage}`;\n // return generateFeedbackUrl(this.currentPage);\n }\n\n public surveyDialogRef: MatDialogRef = null;\n\n public bookingCompleted: Date = new Date();\n public feedbackId: string = null;\n\n constructor(private store: Store,\n private _settings: SettingsService,\n private _dialog: MatDialog,\n private route: ActivatedRoute,\n private _org: OrganisationService,\n private _router: Router) {\n super();\n }\n\n public ngOnInit(): void {\n this.store.dispatch(loadOrganisations.request());\n this._settings.initialised.pipe(first(_ => _)).subscribe(() => {\n this.logo = this._settings.get(`app.logo_${this.mode}`) || { type: 'icon' };\n });\n this.timeout('Getting Title', () => this.updateRoute(document.title));\n this._router.events.subscribe((event: NavigationEnd) => {\n /* istanbul ignore else */\n if (event instanceof NavigationEnd) {\n this.timeout('Getting Title', () => this.updateRoute(document.title));\n }\n });\n\n // if the survey is allowed (don't in modals! due to duplicate appearances)\n if (!this.noSurvey) {\n // get the active form values\n this.subscription('openSurveyModal', this.store.pipe(\n distinctUntilChanged()\n ).subscribe((next: any | undefined) => {\n const feedbackId = next.organisation?.data?.success?._settings?.discovery_info?.feedback_id;\n if (feedbackId && this.feedbackId !== feedbackId) {\n this.feedbackId = feedbackId;\n }\n if (next.bookingForm?.bookingCompleted && this.bookingCompleted.getTime() < next.bookingForm.bookingCompleted.getTime()) {\n this.bookingCompleted = new Date(next.bookingForm.bookingCompleted.getTime());\n this.openFeedbackModal();\n }\n }));\n }\n\n\n this.subscription('activeForm', this.store.pipe(\n select(selectActiveForm),\n distinctUntilChanged()\n ).subscribe((next: BookingFormData | undefined) => {\n if (next) {\n this.isEditSeries = next.action === SeriesAction.EDIT;\n }\n }));\n }\n\n public updateRoute(location) {\n location = location.substr(0, location.indexOf(' |'));\n this.currentPage = location;\n }\n\n /** Set menu state to `true` */\n public showMenu() {\n this.menu = true;\n this.menuChange.emit(this.menu);\n }\n\n public async goToHome() {\n this.isEditSeries && this.clearFormAndResultData();\n await this._router.navigate([this.homeOverride ?? '/']);\n // await this._router.navigate(['/', 'home'], { relativeTo: this.route });\n this._dialog.closeAll();\n }\n\n\n\tpublic clearFormAndResultData() {\n\t\tthis.store.dispatch(clearBookingFormData());\n\t\tthis.store.dispatch(loadRoomsForResults.clear());\n\t}\n\n public goToHelp() {\n const help_url = this._org.getOrganizationFiltersByRoomType('help_url');\n window.open(help_url || Urls.Help);\n }\n\n public goToFeedback() {\n // Over-engineered button action to mimic/test booking confirmation event.\n this.store.dispatch(openBookingSurvey());\n }\n\n public openFeedbackModal() {\n if (!this.modalOpen && !this.surveyDialogRef) {\n this.modalOpen = true;\n this.surveyDialogRef = this._dialog.open(SurveyModalComponent, {\n disableClose: true,\n panelClass: 'mck-modal-survey',\n data: this.feedbackId,\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n this.surveyDialogRef.afterClosed().subscribe(() => {\n this.modalOpen = false;\n this.surveyDialogRef = null;\n });\n }\n\n }\n\n public async goToBackRoute() {\n this.onBack.emit();\n await this._router.navigate(this.back.route, { queryParams: this.back.queryParams });\n }\n\n}\n","import {\n Component,\n OnInit\n} from '@angular/core';\nimport {\n FormControl,\n FormGroup,\n Validators\n} from '@angular/forms';\nimport { first } from 'rxjs/operators';\n\nimport {\n ApplicationIcon,\n ApplicationService,\n UsersService\n} from '@mckinsey-converge/data-common';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'app-login',\n templateUrl: './login.component.html',\n styleUrls: ['./login.component.scss']\n})\nexport class LoginComponent extends BaseDirective implements OnInit {\n /** Logo of the application organisation */\n public logo: ApplicationIcon;\n /** Whether the user credentials are being checked */\n public loading: boolean;\n /** Form fields for the login form */\n public form: FormGroup;\n\n constructor(private _service: ApplicationService, private _users: UsersService) {\n super();\n }\n\n public ngOnInit(): void {\n this.loading = true;\n this.form = new FormGroup({\n username: new FormControl('', [Validators.required]),\n password: new FormControl('', [Validators.required])\n });\n this._service.initialised.pipe(first(_ => _)).subscribe(() => {\n this.loading = false;\n this.logo = this._service.setting('app.logo_light') || { type: 'icon' };\n });\n }\n\n /** Perform user login */\n public login() {\n this.loading = true;\n const form = this.form.value;\n this._users.login({\n username: form.username,\n password: form.password\n }, { form: true }).then(() => {\n this.loading = false;\n }, () => {\n this.loading = false;\n this.form.controls.password.setErrors({ check: true });\n });\n }\n\n}\n","
\n
\n
\n
\n
\n {{ logo.content }}\n \n
\n
\n
\n \n
\n \n Username:\n \n \n \n Username is required\n \n
\n
\n \n Password:\n \n \n \n Invalid username or password\n \n
\n
\n
\n
\n \n
\n
\n
\n
\n\n
\n
\n \n
\n
Converge is loading
\n
\n
\n","import {\n Component,\n EventEmitter,\n OnInit,\n Output,\n ViewEncapsulation\n} from '@angular/core';\n@Component({\n selector: 'app-map-controls',\n template: `\n
\n
\n \n
\n \n \n
\n \n \n
\n \n \n \n \n
\n
\n `,\n styleUrls: ['./map-controls.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n})\nexport class MapControlsComponent implements OnInit {\n @Output()\n public zoomOutClick = new EventEmitter();\n\n @Output()\n public zoomInClick = new EventEmitter();\n\n @Output()\n public refreshClick = new EventEmitter();\n\n @Output()\n public infoClick = new EventEmitter();\n\n @Output() toggleEvent = new EventEmitter();\n\n public isClosed = true;\n\n toggle() {\n this.toggleEvent.emit();\n this.isClosed = !this.isClosed;\n }\n\n constructor() {}\n\n ngOnInit(): void {}\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewEncapsulation\n} from '@angular/core';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { FormControl } from '@angular/forms';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { legendOptions } from '../map.utils';\n\n@Component({\n selector: 'app-map-filters',\n template: `\n
\n
\n \n \n
\n \n \n
\n \n
\n
\n \n \n \n \n
\n
\n `,\n styleUrls: ['./map-filters.component.scss'],\n encapsulation: ViewEncapsulation.Emulated\n})\nexport class MapFiltersComponent extends BaseDirective implements OnInit {\n\n public legendOptions = legendOptions();\n\n @Input()\n public buildings: SelectOption[];\n\n @Input()\n public selectedBuilding: SelectOption;\n\n @Output()\n public selectedBuildingChange = new EventEmitter>();\n\n @Input()\n public levels: SelectOption[];\n\n @Input()\n public selectedLevel: SelectOption;\n\n @Output()\n public selectedLevelChange = new EventEmitter>();\n\n @Input()\n public spaces: SelectOption[];\n\n @Output()\n public selectedSpaceChange = new EventEmitter>();\n\n @Input()\n public selectedSpace: SelectOption;\n\n @Output()\n public searchClick = new EventEmitter();\n\n public buildingControl = new FormControl();\n\n public levelControl = new FormControl();\n\n public spaceControl = new FormControl();\n\n public resetInput: number;\n\n public searchStringPresent = false;\n\n constructor() {\n super();\n }\n\n public ngOnInit(): void {\n this.subscription('buildingChanges',\n this.buildingControl.valueChanges.subscribe(value => this.selectedBuildingChange.emit(value)));\n this.subscription('levelChanges',\n this.levelControl.valueChanges.subscribe(value => this.selectedLevelChange.emit(value)));\n this.subscription('spaceChanges',\n this.spaceControl.valueChanges.subscribe(value => {\n this.selectedSpaceChange.emit(value);\n this.searchClick.emit();\n }));\n }\n\n public clearRoomSearch() {\n this.resetInput = Date.now();\n this.selectedSpace = null;\n this.searchStringPresent = false;\n // TODO, reset the focused room if required?\n }\n\n public inputTextChange(event: any) {\n this.searchStringPresent = !!event.length;\n }\n}\n","import {\n Component,\n Inject,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n Space,\n RoomResultsViewModel,\n} from '@mckinsey-converge/data-common';\nimport { MAP_OVERLAY_DATA } from '@acaprojects/ngx-interactive-map';\n\n\ninterface SpaceWithReturnData extends Space {\n // callback?: Function,\n room?: RoomResultsViewModel,\n parentComponent?: any,\n}\n/**\n * Replaces the built-in {@link MapPinComponent} based on design.\n */\n@Component({\n selector: 'app-map-overlay',\n template: `\n
\n \n
\n
\n
\n \n
\n
\n
\n {{data.simple_name || 'No Label'}}\n \n \n
{{ data.status === 'requestable' ? 'Requestable' : 'Bookable'}} {{ data?.room?.space?.availableOccurrences }} out of {{ data?.room?.space?.totalOccurrences }}
\n
\n
\n
\n\n
\n `,\n styleUrls: ['./map-overlay.component.scss'],\n encapsulation: ViewEncapsulation.Emulated\n})\nexport class MapOverlayComponent implements OnInit {\n constructor(\n @Inject(MAP_OVERLAY_DATA) public data: SpaceWithReturnData,\n ) {\n }\n public ngOnInit(): void {\n }\n\n\n public roomDataCallback() {\n if (this.data.parentComponent.roomSelected && this.data.room) {\n this.data.parentComponent.roomSelected(this.data.room)\n }\n }\n\n public get is_recurrent () {\n return this.data.parentComponent?.bookingFormData?.value?.is_recurrent || false;\n }\n\n public closeOverlay() {\n this.data.parentComponent?.closeMapOverlayOutlet();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { BehaviorSubject, combineLatest, interval } from 'rxjs';\nimport { BaseDirective, HashMap, Point } from '@mckinsey-converge/base';\nimport { MapFeature } from '@acaprojects/ngx-interactive-map/lib/helpers/map.interfaces';\nimport { select, Store } from '@ngrx/store';\nimport { BuildingStoreState } from '@mckinsey-converge/buildings';\nimport {\n Building,\n BuildingLevel,\n SettingsService,\n Space,\n mapBuildingLevelToOption,\n mapResultsToViewModels,\n RoomResultsViewModel,\n selectActiveForm,\n selectBookingLocations,\n selectMapFilteredResults,\n selectSelectedBuildingOptions,\n roomFormDataToQuery,\n FilteredSpaces,\n BookingStoreState,\n storeBookingFormData,\n BookingFormData,\n MapListener,\n selectFilteredDiffSizeResults\n} from '@mckinsey-converge/data-common';\nimport { distinctUntilChanged, map, take, withLatestFrom } from 'rxjs/operators';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { filterUndefined } from '@mckinsey-converge/rx-utils';\nimport { MatDialog } from '@angular/material/dialog';\nimport { OfficeInformationModalComponent } from 'src/app/map/office-information-modal/office-information-modal.component';\nimport {\n CENTER_POINT,\n generateMapListenersForSpace,\n generateMapStyleForSpace,\n MAX_ZOOM_LEVEL,\n MIN_ZOOM_LEVEL,\n roomToMapFeature,\n} from 'src/app/map/map.utils';\nimport {\n loadRoomsForResults,\n loadRoomsForResultsMap,\n mapRoomToSelectOption,\n RoomStoreState,\n} from '@mckinsey-converge/rooms';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { UserStoreState } from '@mckinsey-converge/user';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Location } from '@angular/common';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\n\nexport type MapSearchStoreState = BuildingStoreState &\n RoomStoreState &\n BookingStoreState &\n UserStoreState;\n\n@Component({\n selector: 'app-map-search',\n template: `\n
\n
\n \n \n
\n
\n
\n \n
\n \n \n \n \n
\n
\n `,\n styleUrls: ['./map-search.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n animations: [\n trigger('expandHeight', [\n state(\n 'open',\n style({\n height: '470px',\n })\n ),\n state(\n 'closed',\n style({\n height: 'calc(100vh - 270px)',\n })\n ),\n transition('open <=> closed', animate('600ms ease-out')),\n ]),\n ],\n})\nexport class MapSearchComponent extends BaseDirective implements OnInit {\n @Input()\n public openHeader: boolean = true;\n\n public zoom = new BehaviorSubject(MIN_ZOOM_LEVEL);\n\n public center = new BehaviorSubject(CENTER_POINT);\n public listeners = new BehaviorSubject([]);\n\n public focusedMapSpace = new BehaviorSubject(undefined);\n public features = combineLatest([this.focusedMapSpace]).pipe(\n map((items) => items.filter((i) => !!i))\n );\n\n public focusedRoom = new BehaviorSubject(undefined);\n\n public resultBuildings = new BehaviorSubject([]);\n public resultSpaces = new BehaviorSubject([]);\n // public resultSpaces = new BehaviorSubject>(\n // LoadingModel.empty()\n // );\n\n public activeBuilding = new BehaviorSubject(undefined);\n public activeLevel = new BehaviorSubject(undefined);\n public activeSpace = new BehaviorSubject(undefined);\n\n /** Mapping of elements to CSS styles */\n public style_map = new BehaviorSubject>>({});\n\n public mapUrl = this.activeLevel.pipe(map((level) => level?.map_url ?? ''));\n\n public bookingLocations = new BehaviorSubject[]>([]);\n public buildingLevelOptions = new BehaviorSubject[]>([]);\n public spaceListOptions = new BehaviorSubject[]>([]);\n\n public activeBuildingOption = combineLatest([this.activeBuilding, this.bookingLocations]).pipe(\n map(([building, locations]) => locations.find((l) => l.value === building?.id))\n );\n\n public activeLevelOption = this.activeLevel.pipe(map(mapBuildingLevelToOption));\n public activeSpaceOption = this.activeSpace.pipe(map(mapRoomToSelectOption));\n public bookingFormData = new BehaviorSubject(undefined);\n public floorData: any;\n public floorDataParam: any;\n @Output() toggleEvent = new EventEmitter();\n\n //to capture state for toggling expandHeight animation\n public isOpen = true;\n resultsLoading: any;\n\n propagateToggle() {\n this.toggleEvent.emit();\n this.isOpen = !this.isOpen;\n }\n \n\n constructor(\n private store: Store,\n public dialog: MatDialog,\n private settingService: SettingsService,\n private router: Router,\n private location: Location,\n private route: ActivatedRoute\n ) {\n super();\n this.floorData = location.getState();\n }\n\n public ngOnInit(): void {\n // this.resultsLoading = this.resultSpaces.pipe(map((m) => m.isLoading));\n \n this.subscription(\n 'bookingLocations',\n this.store.pipe(select(selectBookingLocations)).subscribe((next) => {\n this.bookingLocations.next(next);\n // update the map view MCK-1100 when location changes\n const self = this;\n setTimeout(() => {\n self.selectActiveBuilding(self.bookingLocations.value[0]);\n }, 0);\n })\n );\n this.subscription(\n 'bookingSpaceResults',\n combineLatest([\n this.store.pipe(\n select(selectMapFilteredResults),\n map((r: LoadingModel) => { \n this.resultsLoading = r.isLoading;\n return r.success;})\n ),\n this.activeBuilding.pipe(filterUndefined()),\n this.activeLevel.pipe(filterUndefined()),\n ]).subscribe(([filteredSpaces, building, level]) => {\n const spacesFromSelection = (filteredSpaces.spaces || []).filter(\n (s) => !!s.map_id && s.zones.includes(building.id)\n );\n this.resultSpaces.next(spacesFromSelection);\n\n const listeners: MapListener[] = [];\n const styles: HashMap> = {};\n const colour_map = this.settingService.get('app.explore.colors') || {};\n spacesFromSelection.forEach((space) => {\n const status = filteredSpaces.statusMap[space.id];\n const mapStyle = generateMapStyleForSpace(space, status, colour_map);\n styles[`#${mapStyle.id}`] = mapStyle.styles;\n listeners.push(\n ...generateMapListenersForSpace(\n space,\n () => {},\n () => {},\n status !== 'in-use' ? \n () => {\n this.activeSpace.next(space);\n this.focusOnRoom(status);\n } \n : ()=> {}\n )\n );\n });\n this.style_map.next(styles);\n this.listeners.next(listeners);\n })\n );\n this.subscription(\n 'bookingResults',\n this.resultSpaces\n .pipe(withLatestFrom(this.activeSpace))\n .subscribe(([resultSpaces, activeSpace]) => {\n this.spaceListOptions.next(resultSpaces.map(mapRoomToSelectOption));\n })\n );\n\n this.subscription(\n 'storeResultedBuildings',\n this.store.pipe(select(selectSelectedBuildingOptions)).subscribe((buildings) => {\n this.resultBuildings.next(buildings);\n // if we dont have active building yet, set it here.\n if (buildings.length > 0 && !this.activeBuilding.value) {\n const firstBuilding = buildings[0];\n this.activeBuilding.next(firstBuilding);\n }\n })\n );\n\n this.subscription(\n 'activeBuildingChange',\n this.activeBuilding\n .pipe(\n filterUndefined(),\n map((b: Building) => b.levels)\n )\n .subscribe((levels) => {\n this.buildingLevelOptions.next(levels.map(mapBuildingLevelToOption));\n \n if(this.activeLevel.value){\n this.floorDataParam = {\n display: this.activeLevel.value.name,\n value: this.activeLevel.value.id,\n };\n this.selectBuildingLevel(this.floorDataParam);\n setTimeout(() => {\n this.refreshFloorNumber();\n });\n }\n \n })\n );\n\n // if levels change and active level no longer part of list, pick first.\n this.subscription(\n 'updateActiveLevelOnActiveBuildingChange',\n this.activeBuilding\n .pipe(\n filterUndefined(),\n distinctUntilChanged(),\n withLatestFrom(this.activeLevel),\n map(\n ([building, activeLevel]) =>\n (activeLevel && building.levels.find((l) => l.id === activeLevel.id)) ||\n building.levels[0]\n )\n )\n .subscribe((level) => {\n this.activeLevel.next(level);\n })\n );\n\n // re-request rooms every minute to update space status.\n this.subscription(\n 'updateSpaceStatusInterval',\n interval(60 * 1000)\n .pipe(withLatestFrom(this.store.select(selectActiveForm)))\n .subscribe(([, form]) => {\n this.store.dispatch(loadRoomsForResultsMap.request(roomFormDataToQuery(form) ));\n })\n );\n\n // get the active form values\n this.subscription(\n 'activeForm',\n this.store\n .pipe(select(selectActiveForm), distinctUntilChanged())\n .subscribe((next: BookingFormData | undefined) => {\n if (next) {\n this.bookingFormData.next(next);\n }\n })\n );\n\n if (this.floorData?.payload) {\n this.floorDataParam = {\n display: this.floorData?.payload.name,\n value: this.floorData?.payload.id,\n };\n this.selectBuildingLevel(this.floorDataParam);\n setTimeout(() => {\n this.refreshFloorNumber();\n });\n }\n }\n\n public refreshFloorNumber(): void {\n this.activeLevelOption = this.activeLevel.pipe(map(mapBuildingLevelToOption));\n }\n\n public zoomIn() {\n if (this.zoom.value < MAX_ZOOM_LEVEL) {\n this.zoom.next(this.zoom.value + 1);\n }\n }\n\n public zoomOut() {\n if (this.zoom.value > MIN_ZOOM_LEVEL) {\n this.zoom.next(this.zoom.value - 1);\n }\n }\n\n public displayOfficeInformation() {\n this.dialog.open(OfficeInformationModalComponent, {\n data: this.activeBuilding.value,\n panelClass: 'mck-alert',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n }\n\n public resetZoomLevels() {\n this.zoom.next(MIN_ZOOM_LEVEL);\n this.center.next(CENTER_POINT);\n this.focusedRoom.next(undefined);\n // this.focusedMapSpace.next(undefined);\n }\n\n public closeMapOverlayOutlet = () => this.focusedMapSpace.next(undefined);\n \n\n public selectActiveBuilding(selection: SelectOption) {\n this.resultBuildings\n .pipe(\n map((all) => all.find((b) => b.id === selection.value)),\n take(1),\n filterUndefined()\n )\n .subscribe((next) => {\n this.activeBuilding.next(next);\n });\n }\n\n public selectBuildingLevel(selection: SelectOption) {\n this.activeBuilding\n .pipe(\n map((b) => b.levels?.find((l) => l.id === selection?.value)),\n take(1),\n filterUndefined()\n )\n .subscribe((next) => {\n\t\t\t\tthis.store.dispatch(loadRoomsForResultsMap.request(roomFormDataToQuery(this.bookingFormData.value) ));\n this.activeLevel.next(next);\n\n /**\n * update mapUrl as per active level on change of filter search\n */\n this.mapUrl = this.activeLevel.pipe(map((level) => level?.map_url ?? ''))\n });\n }\n\n public selectActiveSpace(selection: SelectOption) {\n this.resultSpaces\n .pipe(\n map((all) => all.find((s) => s.id === selection?.value)),\n take(1),\n filterUndefined()\n )\n .subscribe((next) => {\n this.activeSpace.next(next);\n });\n }\n\n public focusOnRoom(status?:string) {\n this.activeSpace.pipe(take(1), filterUndefined()).subscribe((next) => {\n let delay = 0;\n if (next.level.id !== this.activeLevel.value.id) {\n this.activeLevel.next(next.level);\n delay = 500;\n }\n this.timeout(\n 'updateLevelAndRoom',\n () => {\n const focusedRoom = mapResultsToViewModels(\n [this.activeSpace.value],\n [this.activeLevel.value],\n [this.activeBuilding.value]\n );\n this.focusedRoom.next(focusedRoom[0]);\n this.focusedMapSpace.next(roomToMapFeature(this.focusedRoom.value, this, status));\n this.zoom.next(MAX_ZOOM_LEVEL);\n },\n delay\n );\n });\n }\n\n public roomSelected(room: RoomResultsViewModel) {\n\n\n const { is_recurrent } = this.bookingFormData.value;\n this.bookingFormData.value.recurrence_exceptions = [];\n if(is_recurrent){\n // Handle recurrence conflicts if the booking is part of a recurring series\n const spaceConflicts = room.space.recurrence_availability.filter(recurr => !recurr.available);\n this.bookingFormData.value.recurrence_exceptions = spaceConflicts.map((recurr)=> recurr.date);\n }\n\n\n // Handle timezone offset for accurate date and time information\n let { dateTz } = this.bookingFormData.value;\n // if (this.offset) {\n dateTz = dateTz.addValue({ minutes: 0 });\n // }\n\n /**\n * selectedRoom.space is fully fledged Space class\n * this.bookingFormData.value.booking.room is not and does not contain the timezone\n * this.bookingFormData.value.booking.timezone is legit\n */\n // UPDATE: providing payload as part of extras instead dispatching storeBookingFormData event to avoid redundant backend request calls\n this.router.navigate(['room'], { relativeTo: this.route, state:{payload : {\n ...this.bookingFormData.value,\n // buildings: this._org.buildings, // require to manage browser refresh on room detail screen!\n dateTz,\n offset: 0,\n selectedRoom: room\n }\n }});\n\n\n // submit\n // this.store.dispatch(\n // storeBookingFormData({\n // payload: {\n // ...this.bookingFormData.value,\n // selectedRoom: room,\n // },\n // })\n // );\n\n // this.router.navigate(['room'], { relativeTo: this.route });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MapSearchComponent } from './map-search/map-search.component';\nimport { MapControlsComponent } from './map-controls/map-controls.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { LibraryModule } from '@acaprojects/ngx-interactive-map';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MapFiltersComponent } from './map-filters/map-filters.component';\nimport { UiModule } from '@mckinsey-converge/ui';\nimport { OfficeInformationModalComponent } from './office-information-modal/office-information-modal.component';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MapOverlayComponent } from './map-overlay/map-overlay.component';\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\n\nexport const mapModuleImports = [\n CommonModule,\n MatButtonModule,\n LibraryModule,\n MatSelectModule,\n UiModule,\n MatDialogModule,\n NgxSkeletonLoaderModule\n];\n\nexport const mapModuleDeclarations = [\n MapSearchComponent,\n MapControlsComponent,\n MapFiltersComponent,\n OfficeInformationModalComponent,\n MapOverlayComponent\n];\n\n@NgModule({\n declarations: [\n ...mapModuleDeclarations\n ],\n exports: [\n ...mapModuleDeclarations\n ],\n imports: [\n ...mapModuleImports\n ]\n})\nexport class MapModule {\n}\n","import { SelectOption } from '@mckinsey-converge/ui';\nimport {\n Space,\n SpaceStatus,\n RoomResultsViewModel,\n MapListener\n} from '@mckinsey-converge/data-common';\nimport {\n HashMap,\n Point\n} from '@mckinsey-converge/base';\nimport { MapFeature } from '@acaprojects/ngx-interactive-map/lib/helpers/map.interfaces';\nimport { MapOverlayComponent } from 'src/app/map/map-overlay/map-overlay.component';\n\nexport const MIN_ZOOM_LEVEL = 1;\nexport const MAX_ZOOM_LEVEL = 10;\nexport const CENTER_POINT: Point = { x: 0.5, y: 0.5 };\n\nconst mapSpaceStatusToDisplay = (status: SpaceStatus): string => {\n switch (status) {\n case SpaceStatus.NotBookable:\n return 'Not Bookable';\n case SpaceStatus.Requestable:\n return 'Available by Request';\n case SpaceStatus.Unavailable:\n return 'In Use';\n case SpaceStatus.Available:\n default:\n return 'Available';\n }\n};\n\nconst mapSpaceStatusToOption = (status: SpaceStatus) => ({\n value: status,\n display: mapSpaceStatusToDisplay(status)\n});\n\nexport const legendOptions = (): SelectOption[] => [\n SpaceStatus.Available,\n SpaceStatus.Requestable,\n SpaceStatus.Unavailable,\n SpaceStatus.NotBookable\n].map(mapSpaceStatusToOption);\n\n\nexport const defaultMapBookingRules = [\n 'Rooms showing yellow are restricted and must be requested',\n 'Rooms showing green are available to book for one hour',\n 'Rooms showing red are booked',\n 'Rooms showing grey are not bookable but may be used if they are empty'\n];\n\nexport const defaultMapBookingSubtitle = 'You may request restricted rooms but they will need to be approved by an admin';\n\nexport const generateMapStyleForSpace = (\n space: Space,\n status: SpaceStatus,\n colorStatusMap: HashMap) => {\n const id =\n `${space.map_id}`.indexOf('area') < 0\n ? `area-${space.map_id}-status`\n : space.map_id;\n return (\n {\n id,\n styles: {\n fill: colorStatusMap[`space-${status}`] || '#000',\n opacity: 0.99\n }\n });\n};\n\n/**\n * Generates actions for mapview handling.\n * @param space - the space to generate\n * @param clickSpace - called when clicked or touched\n * @param hoverSpace - called when you hover over a space\n * @param leaveSpace - called when you leave a space.\n */\nexport const generateMapListenersForSpace = (\n space: Space,\n hoverSpace: () => void,\n leaveSpace: () => void,\n clickSpace: () => void\n): MapListener[] => {\n const id =\n `${space.map_id}`.indexOf('area') < 0\n ? `area-${space.map_id}-status`\n : space.map_id;\n const listeners: MapListener[] = [];\n listeners.push({\n id,\n event: 'mouseenter',\n callback: hoverSpace\n });\n listeners.push({\n id,\n event: 'mouseleave',\n callback: leaveSpace\n });\n if (space.bookable) {\n listeners.push({\n id,\n event: 'click',\n callback: clickSpace\n });\n listeners.push({\n id,\n event: 'touchend',\n callback: clickSpace\n });\n }\n return listeners;\n};\n\n\nexport const spaceToMapFeature = (space: Space): MapFeature => ({\n id: `area-${space.map_id}-status`,\n coordinates: null,\n content: MapOverlayComponent,\n data: {\n ...space\n }\n});\n\nexport const roomToMapFeature = (room: RoomResultsViewModel, parentComponent?: any, status?: string): MapFeature => ({\n id: `area-${room.space.map_id}-status`,\n coordinates: null,\n content: MapOverlayComponent,\n data: {\n ...room.space,\n parentComponent,\n room,\n status:status\n }\n});","import {\n Component,\n Inject,\n ViewEncapsulation\n} from '@angular/core';\nimport { HashMap } from '@mckinsey-converge/base';\nimport { \n BookingRuleDetails,\n Building,\n} from '@mckinsey-converge/data-common';\nimport {\n MAT_DIALOG_DATA,\n MatDialogRef\n} from '@angular/material/dialog';\nimport {\n defaultMapBookingRules,\n defaultMapBookingSubtitle\n} from 'src/app/map/map.utils';\n\n@Component({\n selector: 'app-office-information-modal',\n template: `\n \n
\n
Booking in {{building?.name}}
\n
{{targetLinks(info)}}
\n
\n
\n
    \n \n
\n
\n
\n {{group.title}}\n
    \n \n
\n
\n
\n When booking from maps:\n
    \n \n
\n \n

\n For more info email: {{contact}}\n

\n

\n
\n
\n
\n \n
\n
\n `,\n styleUrls: ['./office-information-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class OfficeInformationModalComponent {\n constructor(@Inject(MAT_DIALOG_DATA) public building: Building,\n private dialogRef: MatDialogRef) {\n }\n\n\n /** Booking rule details */\n public get rules(): string[] {\n const building: Building = this.building;\n const details: BookingRuleDetails = building?.booking_details;\n return details?.rules || [] as any;\n }\n\n /** Booking rule details */\n public get info(): string {\n const building: Building = this.building;\n const details: BookingRuleDetails = building?.booking_details;\n return details?.info || defaultMapBookingSubtitle;\n }\n\n public get customHtml(): string | undefined {\n const building: Building = this.building;\n const details: BookingRuleDetails = building?.booking_details;\n return details?.custom_html;\n }\n\n /** Booking map rule details */\n public get map_rules(): string[] {\n const building: Building = this.building;\n const details: BookingRuleDetails = building?.booking_details;\n return details?.map_rules || defaultMapBookingRules as any;\n }\n\n /** Other special booking rules */\n public get other_rules(): { title: string, rules: string[] }[] {\n const building: Building = this.building;\n const details: BookingRuleDetails = building?.booking_details;\n const rules: HashMap = (details as any)?.other_rules || {};\n return Object.keys(rules).reduce((a, v) => {\n \n a.push({ title: v, rules: rules[v] || [] });\n return a;\n }, []);\n }\n\n public get contact(): string {\n const building: Building = this.building;\n const details: BookingRuleDetails = building?.booking_details;\n return details?.contact || '';\n }\n\n public get link(): { url?: string, name?: string } {\n const building: Building = this.building;\n const details: BookingRuleDetails = building?.booking_details;\n return details?.link || {};\n }\n\n public closeModal() {\n this.dialogRef.close();\n }\n\n public targetLinks(info: string) {\n const regex = /[] = [\n BaseDirective,\n LoginComponent,\n TopbarHeaderComponent,\n ResponsiveInlineImagesComponent,\n OverlayMenuComponent,\n FooterMenuComponent,\n MapControlsComponent\n];\n\nconst MATERIAL_MODULES: any[] = [\n MatButtonModule,\n MatSnackBarModule,\n MatDialogModule,\n MatFormFieldModule,\n MatInputModule,\n MatProgressSpinnerModule,\n MatProgressBarModule,\n MatAutocompleteModule,\n MatSelectModule,\n MatChipsModule,\n MatRippleModule,\n MatMenuModule,\n MatCheckboxModule,\n MatTooltipModule,\n MatRadioModule,\n MatTabsModule,\n MatSlideToggleModule\n];\n\nconst CDK_MODULES: any[] = [\n ScrollingModule,\n DragDropModule,\n CdkTableModule\n];\n\n\n@NgModule({\n declarations: [\n ...COMPONENTS\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n APipesModule,\n AInteractiveMapModule,\n ACustomEventsModule,\n RouterModule,\n EditorModule,\n ComposerModule,\n LegacyUiModule,\n LegacyOverlaysModule,\n IvyCarouselModule,\n ...MATERIAL_MODULES,\n ...CDK_MODULES\n ],\n exports: [\n APipesModule,\n AInteractiveMapModule,\n ACustomEventsModule,\n LegacyUiModule,\n LegacyOverlaysModule,\n ...COMPONENTS,\n ...MATERIAL_MODULES,\n ...CDK_MODULES\n ]\n})\nexport class SharedContentModule {\n}\n","import { Component, OnInit } from '@angular/core';\nimport { filter, first, map, distinctUntilChanged, shareReplay } from 'rxjs/operators';\nimport {\n ApplicationLoadingState,\n BaseDirective,\n closestToTimeSlot,\n closestToTimeSlotTz,\n LoadingState,\n} from '@mckinsey-converge/base';\nimport {\n ApplicationIcon,\n ApplicationService,\n Building,\n BuildingCity,\n defaultRoomSizeOption,\n DEFAULT_BOOKING_DURATION,\n flattenDisplayOffices,\n internalBookingTypeOption,\n mapBuildingToSelectOption,\n mapCityToAllSelectOption,\n mapResultsToViewModels,\n OrganisationService,\n SpacesService,\n storeBookingFormData,\n availabilityOptionsToQuery,\n bookingTypeOptions,\n selectFilteredDiffSizeResults,\n flattenBuildingsWithLevels,\n clearRoomFilters,\n allBookingTypeOption,\n roomSizeOptions,\n roomSizeOptionsKiosk,\n} from '@mckinsey-converge/data-common';\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs';\nimport { select, Store } from '@ngrx/store';\nimport { loadUser, selectHasUserData, UserStoreState } from '@mckinsey-converge/user';\nimport { ComposerService } from '@placeos/composer';\nimport { ActivatedRoute, Router, NavigationStart, Event as NavigationEvent } from '@angular/router';\n\nimport {\n DateNow,\n DateTZ,\n convertLocalTimestampToTimezonedDateTz,\n} from '@mckinsey-converge/date-tz';\nimport { DateTime } from 'luxon';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport {\n buildingStateSelector,\n loadBuildings,\n selectBuildingOptionsGroupedByCity,\n} from '@mckinsey-converge/buildings';\nimport { loadDiffSizeResults, loadRoomsForResults, loadRoomsForResultsMap } from '@mckinsey-converge/rooms';\nimport { timeStamp } from 'console';\nimport { filterUndefined } from '@mckinsey-converge/rx-utils';\n\n@Component({\n selector: 'app-shell-wrapper',\n templateUrl: './shell.component.html',\n styleUrls: ['./shell.component.scss'],\n})\nexport class ShellWrapperComponent extends BaseDirective implements OnInit {\n /** Loading state of the application */\n public loading_state: ApplicationLoadingState;\n /** Logo of the application organisation */\n public logo: ApplicationIcon;\n\n private userLoading = new BehaviorSubject(true);\n public isQRCode = new BehaviorSubject(true);\n public buildingOptions = new BehaviorSubject[]>([]);\n public zone_id: any;\n public floor: any;\n\n constructor(\n private _service: ApplicationService,\n private placeOs: ComposerService,\n private _org: OrganisationService,\n private activatedRoute: ActivatedRoute,\n private _spaces: SpacesService,\n private router: Router,\n private store: Store\n ) {\n super();\n\n // Initialize roomID\n let roomId = null;\n if (this.activatedRoute.snapshot.queryParamMap.get('id')) {\n roomId = this.activatedRoute.snapshot.queryParamMap.get('id');\n } else if (localStorage.oauth_redirect && localStorage.oauth_redirect.includes('?id=')) {\n roomId = localStorage.oauth_redirect.split('=')[1];\n }\n // roomId ? this.isQRCode.next(false) : this.isQRCode.next(true);\n\n // Initialize zoneID\n let zone_id = null;\n if (this.activatedRoute.snapshot.queryParamMap.get('zone_id')) {\n zone_id = this.activatedRoute.snapshot.queryParamMap.get('zone_id');\n } else if (\n localStorage.oauth_redirect &&\n localStorage.oauth_redirect.includes('?zone_id=')\n ) {\n zone_id = localStorage.oauth_redirect.split('=')[1];\n if (zone_id.includes('&')) {\n zone_id = zone_id.split('&')[0];\n }\n }\n\n this.zone_id = zone_id;\n\n // Initialize floor number\n let floor = null;\n if (this.activatedRoute.snapshot.queryParamMap.get('floor')) {\n floor = this.activatedRoute.snapshot.queryParamMap.get('floor');\n } else if (localStorage.oauth_redirect && localStorage.oauth_redirect.includes('&floor=')) {\n floor = localStorage.oauth_redirect.split('&floor=')[1];\n }\n this.floor = floor;\n (floor && zone_id) || roomId ? this.isQRCode.next(false) : this.isQRCode.next(true);\n }\n\n /** Whether the user needs to login */\n public get show_login(): Observable {\n return this.userLoading;\n }\n\n /** Whether a module is still loading data */\n public get is_loading(): Observable {\n return this.userLoading;\n }\n\n /** List of modules with a loading state */\n public get loading_state_list(): LoadingState[] {\n const list: LoadingState[] = [];\n for (const mod in this.loading_state) {\n if (this.loading_state[mod]) {\n list.push(this.loading_state[mod]);\n }\n }\n return list;\n }\n\n /**\n * Function: To check and fetch room details if available for the scanned roomId\n * @param buildings\n * @param roomId\n */\n public checkRoomId(buildings: Building[], roomId: string) {\n let formGroup = {\n location: [],\n date: closestToTimeSlot(DateTime.now(), 15).valueOf(),\n dateTz: closestToTimeSlotTz(new DateTZ({ date: Date.now(), is_local_tz: true }), 15),\n duration: DEFAULT_BOOKING_DURATION,\n bookingType: bookingTypeOptions[0],\n roomSize: defaultRoomSizeOption,\n selectedRoom: null,\n timezone: null,\n buildings: buildings,\n };\n\n const params = {\n room_ids: roomId,\n };\n\n const availibityParams = {\n room_ids: roomId,\n dateTz: closestToTimeSlotTz(new DateTZ({ date: Date.now(), is_local_tz: false }), 15),\n duration: DEFAULT_BOOKING_DURATION,\n hide_declined: true,\n };\n const query = availabilityOptionsToQuery(availibityParams);\n this._spaces.queryRooms(query).subscribe(\n (res) => {\n //Convert raw data into API object\n const list = res.map((i) => this._spaces.process(i));\n this._spaces.setSpaceList(list);\n /**\n * Building form data to resue to navigate to result page if room is not available!\n */\n const bookingRoom = mapResultsToViewModels(\n list,\n list[0].building.levels,\n buildings\n );\n const city = list[0].building.city;\n const timezone = list[0].timezone;\n const grouped_by_city = {\n key: { name: city, timezone },\n value: buildings?.filter((bld) => bld.city === city) || [],\n };\n const city_buildings = grouped_by_city.value.map((bld) =>\n mapBuildingToSelectOption(grouped_by_city.key.name, bld)\n );\n const options = [mapCityToAllSelectOption(grouped_by_city.key), ...city_buildings];\n\n const seledtedZone: SelectOption = options.filter(\n (e) => e.value === list[0].building.id\n )[0];\n const buildingTimezone = list[0].timezone;\n // form group data\n formGroup = {\n location: [seledtedZone],\n date: closestToTimeSlot(DateTime.now(), 15).valueOf(),\n dateTz: closestToTimeSlotTz(\n new DateTZ({ date: Date.now(), is_local_tz: false }),\n 15\n ).toZone(buildingTimezone),\n duration: DEFAULT_BOOKING_DURATION,\n bookingType:\n list[0].internal_or_external === 'internal'\n ? bookingTypeOptions[0]\n : bookingTypeOptions[1],\n roomSize: defaultRoomSizeOption,\n selectedRoom: bookingRoom[0],\n timezone: buildingTimezone,\n buildings: buildings,\n };\n\n this.store.dispatch(\n storeBookingFormData({\n payload: formGroup,\n })\n );\n this.router.navigate([`../home/results/room`], {\n state: { payload: { ...formGroup, offset: 0 } },\n });\n localStorage.oauth_redirect = localStorage.oauth_redirect.split('?')[0];\n this.isQRCode.next(true);\n },\n (error) => {\n // console.log(error);\n this.isQRCode.next(true);\n // this.router.navigate([`home/`]); // to navigate to default route if room dont exists\n /**\n * Navigate to room result page if no room/id exist in the db/ removed from the db in future -\n */\n this.store.dispatch(storeBookingFormData({ payload: formGroup }));\n this.router.navigate([`../home/results`], {\n state: { payload: { ...formGroup, offset: 0 } },\n queryParams: { display: 'list' },\n });\n }\n );\n }\n\n public ngOnInit(): void {\n // when qr code lands on a url for the second time, reload it (to compensate for different browser/device combination default behaviors)\n this.subscription(\n 'navigationEventShell',\n this.router.events\n .pipe(filter((event) => event instanceof NavigationStart))\n .subscribe((event: NavigationEvent) => {\n if (event instanceof NavigationStart) {\n if (\n event.navigationTrigger === 'popstate' &&\n (event.url.includes('home?zone_id=') || event.url.includes('home?id='))\n ) {\n this.userLoading.next(true);\n window.location.reload();\n }\n }\n })\n );\n\n let roomId = null;\n if (this.activatedRoute.snapshot.queryParamMap.get('id')) {\n roomId = this.activatedRoute.snapshot.queryParamMap.get('id');\n } else if (localStorage.oauth_redirect && localStorage.oauth_redirect.includes('?id=')) {\n roomId = localStorage.oauth_redirect.split('=')[1];\n }\n\n if (roomId) {\n this.subscription(\n 'buildings',\n this._org\n .listen('buildings')\n .pipe(first((_) => !!_ && !!_.length))\n .subscribe((bld_list: Building[]) => {\n this.checkRoomId(bld_list, roomId);\n })\n );\n }\n\n if (this.zone_id && this.floor) {\n this.subscription(\n 'buildings',\n this._org\n .listen('buildings')\n .pipe(first((_) => !!_ && !!_.length))\n .subscribe((bld_list: Building[]) => {\n const building = bld_list.filter((el) => el.id === this.zone_id);\n\n const city = building[0].city;\n const timezone = building[0].timezone;\n\n const grouped_by_city = {\n key: { name: city, timezone },\n value: building || [],\n };\n const city_buildings = grouped_by_city.value.map((bld) =>\n mapBuildingToSelectOption(grouped_by_city.key.name, bld)\n );\n const options = [\n mapCityToAllSelectOption(grouped_by_city.key),\n ...city_buildings,\n ];\n\n const seledtedZone: SelectOption = options.filter(\n (e) => e.value === building[0].id\n )[0];\n const buildingTimezone = building[0].timezone;\n // form group data\n const addMin = DateTime.now().get('minute') % 5 === 0 ? 1 : 0;\n const formGroup = {\n location: [seledtedZone],\n date: closestToTimeSlot(\n DateTime.now().plus({ minutes: addMin }),\n 15\n ).valueOf(),\n dateTz: closestToTimeSlotTz(\n new DateTZ({\n date: DateTime.now().plus({ minutes: addMin }),\n is_local_tz: false,\n building_tz: buildingTimezone,\n }),\n 15\n ),\n duration: 35,\n bookingType: allBookingTypeOption, // all rooms (including internal and external both)\n roomSize: roomSizeOptionsKiosk[3],\n selectedRoom: null,\n timezone: buildingTimezone,\n buildings: bld_list,\n };\n\n const query2 = {\n // capacity: 3,\n locations: this.zone_id,\n // capacity_max: 9,\n // diff_capacity: true,\n hide_declined: true,\n dateTz: closestToTimeSlotTz(\n new DateTZ({\n date: DateTime.now().plus({ minutes: addMin }),\n is_local_tz: false,\n building_tz: buildingTimezone,\n }),\n 15\n ),\n duration: 35,\n };\n\n //clear search filters first if any applied previously\n this.store.dispatch(clearRoomFilters());\n\n this.store.dispatch(loadRoomsForResults.clear());\n this.store.dispatch(storeBookingFormData({ payload: formGroup }));\n\n this.store.dispatch(loadRoomsForResults.request(query2));\n localStorage.oauth_redirect = '';\n // To do: navigate to floor-map route\n this.router.navigate([`../home/results`], {\n state: {\n payload: this.floor,\n building: building,\n floorMap: true,\n url: window.location.href,\n },\n queryParams: { display: '' },\n });\n this.isQRCode.next(true);\n })\n );\n }\n\n this.subscription(\n 'loading',\n this._service.listen('loading').subscribe((loading) => {\n this.loading_state = loading;\n })\n );\n\n this._service.initialised.pipe(first((_) => _)).subscribe(() => {\n this.logo = this._service.setting('app.logo_light') || { type: 'icon' };\n });\n\n /**\n * Load current user into redux. this is meant to remove old way of loading user from user's service.\n */\n this.subscription(\n 'currentUser',\n combineLatest([\n this.store.pipe(select(selectHasUserData)),\n this.placeOs.initialised,\n this.isQRCode, // added to track room details if QR code used to open app\n ])\n .pipe(\n filter(([_, initialized, isQRCodeScanedAndReady]) => {\n console.log(_);\n return initialized && isQRCodeScanedAndReady;\n })\n )\n .subscribe(([next]) => {\n this.userLoading.next(!next);\n if (!next) {\n this.store.dispatch(loadUser.request());\n }\n })\n );\n }\n}\n","
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
Converge is loading
\n
\n
\n
\n","export enum Urls {\n LearnMore = 'https://our-firm.intranet.mckinsey.com/covid-portal/travel',\n Feedback = 'mailto:converge_feedback@mckinsey.com?subject=Feedback for page: ',\n Help = 'https://mckinsey.service-now.com/ghd?id=topic_simple&topic_id=54e8eb091bea3d1831b17449cd4bcbed',\n OfficeContacts = 'https://our-firm.intranet.mckinsey.com/ourfirm/geographies',\n}\n\nexport const generateFeedbackUrl = (page: string) => {\n return `${Urls.Feedback}${page}`;\n};\n","import { EnvironmentData } from '@mckinsey-converge/environment';\n\nexport const environment: EnvironmentData = {\n production: true,\n hmr: false,\n heap_io_id: 91016686,\n};\n","import { SettingsData } from '@mckinsey-converge/data-common';\n\n;\n/**\n * GENERAL APPLICATION SETTINGS\n */\nconst general = {\n menu: {\n items: [],\n copyright: 'McKinsey & Company',\n position: 'left'\n }\n};\n\n/**\n * HOME PAGE SETTINGS\n */\nconst home = {\n background: 'assets/img/skyline.jpg',\n tiles: [\n {\n name: 'Book',\n route: '/book/spaces',\n icon: {\n type: 'icon',\n class: 'custom-book'\n }\n },\n {\n name: 'Maps',\n route: '/explore/space',\n icon: {\n type: 'icon',\n class: 'custom-spaces'\n }\n },\n {\n name: 'My Day',\n route: '/schedule',\n icon: {\n type: 'icon',\n class: 'custom-schedule'\n }\n }\n ]\n};\n/**\n * HELP/SUPPORT SETTINGS\n */\nconst help = {\n tiles: [],\n columns: 2\n};\n/**\n * BOOKING FLOW SETTINGS\n */\nconst booking = {\n booking_types: [\n { name: 'Internal', id: 'internal' },\n { name: 'External', id: 'external' },\n ],\n show_fields: [\n 'attendees',\n 'body',\n 'catering',\n 'dateTz',\n 'duration',\n 'organiser',\n 'title',\n 'type',\n 'all_day',\n 'needs_space',\n 'has_catering'\n ],\n html_body: false,\n multiple_spaces: true,\n desk_start: 9\n};\n/*===========================*\\\n|| SPACE LISTING SETTINGS ||\n\\*===========================*/\nconst space_display = {\n show_images: false\n};\n/*===========================*\\\n|| USER DIRECTORY SETTINGS ||\n\\*===========================*/\nconst directory = {\n show_avatars: true,\n min_search_length: 3\n};\n/*===========================*\\\n|| EXPLORE MAP SETTINGS ||\n\\*===========================*/\nconst explore = {\n colors: {\n 'space-available': '#43a047',\n 'space-requestable': '#ffb300',\n 'space-unavailable': '#e53935',\n 'space-in-use': '#d4483e',\n 'space-not-bookable': '#ccc',\n 'desk-available': '#43a047',\n 'desk-available-stroke': '#1b5e20',\n 'desk-unavailable': '#e53935',\n 'desk-unavailable-stroke': '#b71c1c',\n 'desk-reserved': '#ffb300',\n 'desk-reserved-stroke': '#ff6f00',\n 'desk-not-bookable': '#fff',\n 'desk-not-bookable-stroke': '#ccc',\n 'zone-low': '#43a047',\n 'zone-medium': '#ffb300',\n 'zone-high': '#e53935'\n },\n can_select_building: true,\n show_legend_group_names: false,\n show_timeline: true,\n legend: {\n General: [\n { key: 'space-available', name: 'Available' },\n { key: 'space-requestable', name: 'Available by request' },\n { key: 'space-unavailable', name: 'In use' },\n { key: 'space-not-bookable', name: 'Not Bookable' }\n ]\n }\n};\n\n/*=========================*\\\n|| DAY VIEW SETTINGS ||\n\\*=========================*/\nconst day_view = {\n dragdrop: false,\n};\n\n\n/**\n * ROOT APPLICATION SETTINGS\n */\nconst app = {\n title: 'McKinsey & Company',\n description: 'McKinsey & Company Staff UI written with Angular Framework',\n short_name: 'STAFF',\n logo_light: {\n type: 'img',\n src: 'assets/img/logo.svg',\n background: ''\n },\n logo_dark: {\n type: 'img',\n src: 'assets/img/logo-inverse.svg',\n background: ''\n },\n heap_io: {\n app_id: 3540602199,\n force_ssl: true,\n secure_cookie: true,\n disable_text_capture: true,\n cookie_path: '/staff/'\n },\n general,\n home,\n help,\n booking,\n space_display,\n directory,\n explore,\n day_view\n}\n\n\n/**\n * ROOT SETTIGNS\n */\nexport const DEFAULT_SETTINGS: SettingsData = {\n debug: true,\n composer: {\n domain: '',\n route: '/staff',\n protocol: '',\n port: '',\n use_domain: false,\n local_login: false\n },\n app,\n mock: false,\n frontend: 'staff',\n};\n","import { ApplicationRef, NgModuleRef } from '@angular/core';\nimport { createNewHosts } from '@angularclass/hmr';\n\nexport const hmrBootstrap = (\n module: any,\n bootstrap: () => Promise>,\n) => {\n let ngModule: NgModuleRef;\n module.hot.accept();\n bootstrap().then(mod => (ngModule = mod));\n module.hot.dispose(() => {\n const appRef: ApplicationRef = ngModule.injector.get(ApplicationRef);\n const elements = appRef.components.map(c => c.location.nativeElement);\n const makeVisible = createNewHosts(elements);\n ngModule.destroy();\n makeVisible();\n });\n};\n","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\nimport { environment } from './environments/environment';\nimport { hmrBootstrap } from './hmr';\nimport { AppModule } from './app/app.module';\n\nif (environment.production) {\n enableProdMode();\n}\n\nconst bootstrap = () => platformBrowserDynamic().bootstrapModule(AppModule);\n\n// comes from https://medium.com/wizardnet972/hot-module-replacement-with-angular-cli-5fc7a3ae4a9c\nif (environment.hmr) {\n if ((module as any).hot) {\n hmrBootstrap(module, bootstrap);\n } else {\n console.error('HMR is not enabled for webpack-dev-server!');\n console.log('Are you using the --hmr flag for ng serve?');\n }\n} else {\n bootstrap().catch(err => console.log(err));\n}\n"]} \ No newline at end of file +{"version":3,"sources":["webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/animations/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/animations/src/lib/angular-animations.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/animations/src/lib/animations.module.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/base.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/base.directive.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/base.module.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/cdk-drop-list-scroll-container.directive.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/date.spec-helpers.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/date.utils.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/general.utilities.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/image.directive.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/numbers-only.directive.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/base/src/lib/replace.pipe.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/bookings/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/bookings/src/lib/bookings.actions.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/bookings/src/lib/bookings.effects.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/bookings/src/lib/bookings.module.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/bookings/src/lib/bookings.reducer.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/bookings/src/lib/bookings.utils.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/buildings/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/buildings/src/lib/buildings.actions.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/buildings/src/lib/buildings.effects.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/buildings/src/lib/buildings.module.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/buildings/src/lib/buildings.reducer.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/api.utilities.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/app.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/base-api.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/base.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/booking-filter.utils.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/booking.form.actions.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/booking.form.data.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/booking.form.spec-helpers.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/booking.selectors.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/booking.utils.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/booking/room-results/room-results.viewmodel.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/booking-state.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/booking.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/booking.types.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/booking.utilities.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/bookings.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/bookingsPaginated.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/bookings/space.utilities.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering-categories.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering-category.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering-item.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering-items.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering-menu.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering-notes.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering-order.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/catering.utilities.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/catering/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/close-modal-dialog-service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/collapse-accordion-service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/data-common.module.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/hotkeys.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/location/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/location/location.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/location/location.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/organisation/building.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/organisation/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/organisation/level.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/organisation/organisation.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/organisation/organisation.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/paginated.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/recurrence/recurrence.utils.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/reports/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/reports/report.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/reports/reports.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/service-manager.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/settings.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/spaces/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/spaces/space.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/spaces/space.utilities.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/spaces/spaces.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/spec-helpers.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/users/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/users/user.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/users/user.utilities.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/users/users.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/data-common/src/lib/validation.utilities.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/date-tz/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/date-tz/src/lib/date-tz.class.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/environment/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/environment/src/lib/environment.module.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/environment/src/lib/environment.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/environment/src/lib/version.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/booking-confirm/booking-confirm.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/booking-confirm/booking-confirm.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/booking-form/booking-form.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/booking-form/booking-form.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/catering-confirm-modal/catering-confirm-modal.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/catering-confirm-modal/catering-confirm-modal.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/catering-details-modal/catering-details-modal.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/catering-details-modal/catering-details-modal.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/confirm-modal/confirm-modal.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/confirm-modal/confirm-modal.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/legacy-overlays.module.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/new-user-modal/new-user-modal.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/new-user-modal/new-user-modal.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/no-catering-modal/no-catering-modal.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/no-catering-modal/no-catering-modal.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/requirement-details-modal/requirement-details-modal.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/requirement-details-modal/requirement-details-modal.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/space-select-modal/space-select-modal.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/space-select-modal/space-select-modal.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/user-form/user-form.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-overlays/src/lib/user-form/user-form.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/action-icon/action-icon.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/action-icon/action-icon.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/bookings/catering/item/item.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/bookings/catering/item/item.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/bookings/catering/package-options-modal/package-options-modal.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/bookings/catering/package-options-modal/package-options-modal.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/cng-search-bar/cng-search-bar.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/cng-search-bar/cng-search-bar.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/cng-search-bar/hover-class.directive.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/action-field/action-field.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/action-field/action-field.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/counter/counter.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/counter/counter.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/date-field/date-field.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/date-field/date-field.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/duration-field/duration-field.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/duration-field/duration-field.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/time-field/time-field.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/time-field/time-field.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/user-list-field/user-list-field.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/user-list-field/user-list-field.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/user-search-field/user-search-field.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/custom-fields/user-search-field/user-search-field.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/feedback/feedback.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/feedback/feedback.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/icon/icon.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/icon/icon.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/legacy-ui.module.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/popout-menu/popout-menu.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/popout-menu/popout-menu.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/searchbar/searchbar.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/searchbar/searchbar.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/user-avatar/user-avatar.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/user-avatar/user-avatar.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/loading/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/loading/src/lib/loading.actions.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/loading/src/lib/loading.effects.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/loading/src/lib/loading.model.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/loading/src/lib/loading.selectors.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/loading/testing/effects.testing.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/loading/testing/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/organisation/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/organisation/src/lib/organisation.actions.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/organisation/src/lib/organisation.effects.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/organisation/src/lib/organisation.module.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/organisation/src/lib/organisation.reducer.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/rooms/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/rooms/src/lib/rooms.actions.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/rooms/src/lib/rooms.effects.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/rooms/src/lib/rooms.module.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/rooms/src/lib/rooms.reducer.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/rooms/src/lib/rooms.types.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/rooms/src/lib/rooms.utils.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/rx-utils/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/rx-utils/src/lib/loading-model.utils.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/rx-utils/src/lib/operators.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/rx-utils/src/lib/rx-utils.module.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/aca-date-picker/aca-date-picker.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/aca-date-picker/aca-date-picker.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/alert-banner/alert-banner.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/auto-complete-chip-select-item/auto-complete-chip-select-item.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/auto-complete-chip-select-item/groupHeader.pipe.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/auto-complete-select-option/auto-complete-select-option.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/auto-complete-select-option/auto-complete-select-option.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/base-template.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/catering-drop-modal/components/catering-drop/catering-drop-modal.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/catering-drop-modal/components/catering-drop/catering-drop-modal.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/cng-select/cng-select-options.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/cng-select/cng-select-options.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/cng-select/cng-select.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/cng-select/cng-select.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/cng-select/dropdown-trigger-for.directive.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/collapse-header/collapse-header.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/conflict-alert-modal/conflict-alert-modal.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/conflict-alert-modal/conflict-alert-modal.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/conflicts-modal/conflicts-modal.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/conflicts-modal/conflicts-modal.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/custom-snackbar-component/custom-snackbar-component.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/custom-snackbar-component/custom-snackbar-component.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/custom-snackbar-component/custom-snackbar-component.service.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/date-tz-calendar-widget/date-tz-calendar-widget.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/date-tz-calendar-widget/date-tz-calendar-widget.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/date-tz-date-picker/date-tz-date-picker.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/date-tz-duration-field/date-tz-duration-field.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/date-tz-time-field/date-tz-time-field.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/duration-field/duration-field.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/error-message/error-message.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/icons/calendar/calendar-icon.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/icons/calendar/chevron-icon.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/icons/close/close-icon.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/informational-image/informational-image.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/label/label.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/legend-dropdown/legend-dropdown.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/mck-date-picker/mck-date-picker.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/modal-button-row/modal-button-row.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/modal/modal.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/override-changes-modal/override-changes-modal.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/override-changes-modal/override-changes-modal.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/pipes/filter.pipe.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/pipes/sanitise.pipe.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/radio-select/radio-select.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/recurrence-booking-form/recurrence-booking-form.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/recurrence-booking-form/recurrence-booking-form.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/recurrence-date-form/recurrence-date-form.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/recurrence-date-form/recurrence-date-form.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/recurrence-pattern-form/recurrence-pattern-form.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/recurrence-pattern-form/recurrence-pattern-form.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/select-option/select-option.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/select/select.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/select/select.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/selected-chip-count/selected-chip-count.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/spacer/spacer.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/switch-group/switch-group.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/time-field/time-field.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/toggle/toggle.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/tooltip/tooltip.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/tooltip/tooltip.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/tooltip/tooltip.directive.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/tooltip/tooltip.enums.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/types.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/ui.module.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/utils/time.utils.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/zoom-warning-modal/components/zoom-warning/zoom-warning.component.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/zoom-warning-modal/components/zoom-warning/zoom-warning.component.html","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/user/src/index.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/user/src/lib/user.actions.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/user/src/lib/user.effects.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/user/src/lib/user.module.ts","webpack:///home/runner/work/mckinsey-converge/mckinsey-converge/libs/user/src/lib/user.reducer.ts","webpack:///$_lazy_route_resource lazy namespace object","webpack:///src/app/app-routing.module.ts","webpack:///src/app/app.component.ts","webpack:///src/app/app.component.html","webpack:///src/app/app.module.ts","webpack:///src/app/booking/booking-calendar/booking-calendar-date-widget/calendar-date-widget.component.ts","webpack:///src/app/booking/booking-calendar/booking-calendar-date-widget/calendar-date-widget.component.html","webpack:///src/app/booking/booking-calendar/booking-calendar-routing.module.ts","webpack:///src/app/booking/booking-calendar/booking-calendar-wrapper.component.ts","webpack:///src/app/booking/booking-calendar/booking-calendar-wrapper.html","webpack:///src/app/booking/booking-calendar/booking-calendar.module.ts","webpack:///src/app/booking/booking-calendar/cng-menu-item/cng-menu-item.component.ts","webpack:///src/app/booking/booking-calendar/cng-menu-item/cng-menu-item.component.html","webpack:///src/app/booking/booking-calendar/staff-calendar/space/event/event.component.ts","webpack:///src/app/booking/booking-calendar/staff-calendar/space/event/event.component.html","webpack:///src/app/booking/booking-calendar/staff-calendar/space/space.component.ts","webpack:///src/app/booking/booking-calendar/staff-calendar/space/space.component.html","webpack:///src/app/booking/booking-calendar/staff-calendar/staff-calendar.component.ts","webpack:///src/app/booking/booking-calendar/staff-calendar/staff-calendar.component.html","webpack:///src/app/booking/booking-calendar/staff-calendar/timeline/timeline.component.ts","webpack:///src/app/booking/booking-calendar/staff-calendar/timeline/timeline.component.html","webpack:///src/app/booking/booking-confirmation/booking-confirmation.component.ts","webpack:///src/app/booking/booking-create/booking-create.component.ts","webpack:///src/app/booking/booking-create/booking-form-base.component.html","webpack:///src/app/booking/booking-create/booking-edit-wrapper.component.ts","webpack:///src/app/booking/booking-create/booking-edit.component.ts","webpack:///src/app/booking/booking-create/booking-form-base.component.ts","webpack:///src/app/booking/booking-details-modal/booking-details-modal.component.ts","webpack:///src/app/booking/booking-details-modal/booking-details-modal.component.html","webpack:///src/app/booking/booking-duration-modal/booking-duration-modal.component.ts","webpack:///src/app/booking/booking-result-item/booking-result-item.component.ts","webpack:///src/app/booking/booking-result-item/booking-result-item.component.html","webpack:///src/app/booking/booking-routing.module.ts","webpack:///src/app/booking/booking.form.reducer.ts","webpack:///src/app/booking/booking.module.ts","webpack:///src/app/booking/bookings-listing/bookings-listing.component.ts","webpack:///src/app/booking/bookings-listing/bookings-listing.component.html","webpack:///src/app/booking/cancel-booking-modal/cancel-booking-modal.component.ts","webpack:///src/app/booking/catering/catering.component.ts","webpack:///src/app/booking/catering/catering.component.html","webpack:///src/app/booking/catering/order-details/category/category.component.ts","webpack:///src/app/booking/catering/order-details/category/category.component.html","webpack:///src/app/booking/catering/order-details/order-details.component.ts","webpack:///src/app/booking/catering/order-details/order-details.component.html","webpack:///src/app/booking/catering/order-list/item/item.component.ts","webpack:///src/app/booking/catering/order-list/item/item.component.html","webpack:///src/app/booking/catering/order-list/order-list.component.ts","webpack:///src/app/booking/catering/order-list/order-list.component.html","webpack:///src/app/booking/catering/order-table/order-table.component.ts","webpack:///src/app/booking/manage-bookings/manage-bookings.component.ts","webpack:///src/app/booking/manage-bookings/manage-bookings.viewmodel.ts","webpack:///src/app/booking/office-floor/floor-map-overlay/floor-map-overlay.component.ts","webpack:///src/app/booking/office-floor/floor-map.utils.ts","webpack:///src/app/booking/office-floor/office-floor-map.module.ts","webpack:///src/app/booking/office-floor/office-floor/office-floor.component.ts","webpack:///src/app/booking/office-floor/office-floor/office-floor.component.html","webpack:///src/app/booking/results-header/results-header.component.ts","webpack:///src/app/booking/room-availability-preview-modal/room-availability-preview-modal.component.ts","webpack:///src/app/booking/room-availability-preview/room-availability-preview.component.ts","webpack:///src/app/booking/room-availability-preview/room-availability-preview.component.html","webpack:///src/app/booking/room-booking-details-form/room-booking-details-form.component.ts","webpack:///src/app/booking/room-booking-details-form/room-booking-details-form.component.html","webpack:///src/app/booking/room-booking-form/room-booking-form.component.ts","webpack:///src/app/booking/room-booking-form/room-booking-form.component.html","webpack:///src/app/booking/room-booking-modal/room-booking-modal.component.ts","webpack:///src/app/booking/room-booking/room-booking.component.ts","webpack:///src/app/booking/room-details/room-details.component.ts","webpack:///src/app/booking/room-details/room-details.component.html","webpack:///src/app/booking/room-filters-form/room-filters-form.component.ts","webpack:///src/app/booking/room-filters-modal/room-filters-modal.component.ts","webpack:///src/app/booking/room-location-preview/room-location-preview.component.ts","webpack:///src/app/booking/room-result-item/room-result-item.component.ts","webpack:///src/app/booking/room-results-paginated/room-results-paginated.component.ts","webpack:///src/app/booking/room-results-section/room-results-section.component.ts","webpack:///src/app/booking/room-results/room-results-coachmark.viewmodel.ts","webpack:///src/app/booking/room-results/room-results.component.ts","webpack:///src/app/booking/searched-location/searched-location.component.ts","webpack:///src/app/components/footer-menu/footer-menu.component.ts","webpack:///src/app/components/footer-menu/footer-menu.component.html","webpack:///src/app/components/map-controls/map-controls.component.ts","webpack:///src/app/components/map-controls/map-controls.component.html","webpack:///src/app/components/overlay-menu/overlay-menu.component.ts","webpack:///src/app/components/overlay-menu/overlay-menu.component.html","webpack:///src/app/components/responsive-inline-images/responsive-inline-images.component.ts","webpack:///src/app/components/survey-modal/survey-modal.component.ts","webpack:///src/app/components/survey-modal/survey-modal.component.html","webpack:///src/app/components/topbar-header/topbar-header.component.ts","webpack:///src/app/login/login.component.ts","webpack:///src/app/login/login.component.html","webpack:///src/app/map/map-controls/map-controls.component.ts","webpack:///src/app/map/map-filters/map-filters.component.ts","webpack:///src/app/map/map-overlay/map-overlay.component.ts","webpack:///src/app/map/map-search/map-search.component.ts","webpack:///src/app/map/map.module.ts","webpack:///src/app/map/map.utils.ts","webpack:///src/app/map/office-information-modal/office-information-modal.component.ts","webpack:///src/app/shared/shared.module.ts","webpack:///src/app/shell/shell.component.ts","webpack:///src/app/shell/shell.component.html","webpack:///src/app/utilities/urls.ts","webpack:///src/environments/environment.ts","webpack:///src/environments/settings.ts","webpack:///src/hmr.ts","webpack:///src/main.ts"],"names":["ANIMATION_SHOW_ENTER_LEAVE","trigger","transition","style","opacity","height","animate","ANIMATION_SHOW_CONTRACT_EXPAND","state","AnimationsModule","CommonModule","NgModule","imports","BaseClass","_timers","_intervals","_subscriptions","_initialised","BehaviorSubject","key","hasOwnProperty","clearTimeout","clearInterval","unsub","name","fn","delay","Function","setTimeout","Error","setInterval","Subscription","unsubscribe","getValue","BaseDirective","destroy","Directive","selector","BaseModule","NumbersOnlyDirective","declarations","exports","ScrollDirection","CdkDropListScrollContainer","_cdkDropList","_renderer","direction","X","last_scroll","x","y","changes","scrollContainer","element","nativeElement","closest","subscription","items","subscribe","list","toArray","forEach","i","index","listen","onDrop","onDrag","updateListPosition","timeout","scroll","scrollLeft","scrollTop","BOTH","Y","_dropListRef","_cacheOwnPosition","_siblings","isReceiving","CdkDrag","Input","ContentChildren","initialTime","mockDate","timeOverride","set","Date","resetDate","reset","closestToTimeSlot","date","stepMinute","start","millisecond","second","minute","Math","ceil","plus","minutes","closestToTimeSlotTz","dateTz","setValue","addValue","durationHumanized","duration","short","h","floor","d","m","weekDayMonthYearFormat","formatDate","extractDateFromInput","input","checkHour","startDate","dayjs","dayJsTimeFormatString","isValid","cleanedInput","times","split","undefined","length","dayJsHoursMinutes","month","year","hour","nearestStepToInput","step","currentStartDate","luxonDate","DateTime","fromMillis","valueOf","closestDate","toFormat","nearestDurationToInput","durationGroups","value","parseInt","indexOf","add","diff","closestDurationGroup","find","max","offset","reduce","previousValue","currentValue","resetSecondsOnTimestamp","timestamp","toMillis","formatDateWithSuffix","dateObj","day","getDate","toLocaleString","getFullYear","nthNumber","number","getListOfDateFormat","extend","utc","timezone","isToday","weekday","customParseFormat","log","type","msg","args","stream","force","app_name","window","debug","colors","console","getItemWithKeys","keys","map","slice","isMobileDevice","r","navigator","userAgent","match","isMobileSafari","agent","isAndroidChrome","padZero","str","toString","unique","array","filter","el","pos","arr","humaniseDuration","durationInput","size","singular","format","hours","filterList","fields","results","filters","toLowerCase","f","parts","push","word","count","regex","RegExp","sort","a","b","localeCompare","item_list","JSON","parse","stringify","item","match_count","match_index","field_list","matched","field","matches","replace","changed","tokens","k","join","matchToHighlight","timeToDate","time","DateNow","startOfValue","ms","randomInt","random","timeFormatString","is24HourTime","hoursMinutes","timezoneNameToDate","timeZoneName","zone","toZone","e","timezoneDisplay","gmtOffsetDisplay","timeWithZoneFormatString","toLocaleLowerCase","timeWithGmtOffsetFormatString","startEndTimeFormatString","startDateTz","endDateTz","startEndTimeWithZoneFormatString","dateLocalFormatString","comma","formatLocalDate","dateBuildingFormatString","shorterLocalDateFormatString","shorterBuildingDateFormatString","localeString","toLocaleTimeString","document","querySelector","getAttribute","language","downloadFile","filename","contents","createElement","setAttribute","encodeURIComponent","display","body","appendChild","click","removeChild","csvToJson","csv","lines","splice","v","line","part","jsonToCsv","json","Array","Object","valid_keys","detectIE","ua","msie","substring","trident","rv","edge","eventToPoint","event","MouseEvent","clientX","clientY","touches","flatten","an_array","stack","res","next","pop","isArray","reverse","seed","xmur3","rand","sfc32","predictableRandomInt","imul","charCodeAt","c","t","isLessThanBreakpoint","breakpoint","innerWidth","toTitleCase","toUpperCase","ImageDirective","_el","initalValue","stopPropagation","HostListener","ReplacePipe","from","to","Pipe","bookingStateSelector","bookings","loadBookingsWithQuery","createAction","props","loadHomepageBookingsResults","createLoadingAction","loadUpcomingBookingsResults","loadPastBookingsResults","loadCancelledBookingsResults","loadBookingByIdResults","clearBookingByIdResults","BookingsEffects","actions","bookingService","afterBookingsRequestResultsLoadOthersEffect","pipe","ofType","mergeMap","action","DateTZ","yourBookingsRequest","email","pagination","limit","show_cancelled","end_epoch","subtractValue","seconds","include_rooms","upcomingRequest","pastRequest","start_epoch","cancelledRequest","byIdRequest","id","effects","target","request","loadHomepageBookingsResultsEffect","createLoadingEffect","userBookings","loadUpcomingBookingsResultsEffect","loadPastBookingsResultsEffect","loadCancelledBookingsResultsEffect","loadBookingByIdResultsEffect","Effect","Injectable","BookingsModule","EffectsModule","forFeature","StoreModule","bookingsReducer","initialBookingsState","query","LoadingModel","empty","homepage","upcoming","past","cancelled","bookingById","createReducer","on","ons","initialBookingFormState","activeFormFilters","bookingFormReducer","storeBookingFormData","activeForm","payload","clearBookingFormData","openBookingSurvey","bookingCompleted","storeRoomFilters","clearRoomFilters","mapBookingToSelectOption","booking","loadBuildings","buildingStateSelector","buildings","selectLoadBuildingsSuccess","createSelector","selectors","optionalSuccess","selectBuildingOptionsGroupedByCity","success","mapped","Map","s","found","city","get","selectLevelByZoneId","param","levels","l","BuildingsEffects","organizationService","loadBuildingsWithOrg","loadBuildingsAfterOrg","loadOrganisations","BuildingsModule","buildingsReducer","initialBuildingState","data","toQueryString","ApplicationService","store","analytics","_app_ref","_zone","_title","_settings","_hotkeys","_composer","_snackbar","_environment","snack","_subjects","_observers","isStable","first","_","run","waitForSettings","message","on_action","icon","content","openSnack","openSnackBar","notify","asObservable","initialised","init","setupComposer","select","selectCurrentUser","user","take","setupAnalytics","fmno","application","loading","composer","settings","protocol","location","host","domain","hostname","port","url","use_domain","origin","route","includes","mock","href","localStorage","getItem","config","scope","auth_uri","token_uri","redirect_uri","handle_login","local_login","setup","heap_io_id","heapIo","app_id","load","identify","frontend","isIt","_kioskFormFilter","title_suffix","setting","setTitle","getTitle","auth","api_endpoint","is_initialised","providedIn","BaseDataClass","raw_data","event_subject","Subject","events","_server_names","zone_id","_service","form","toJSON","Promise","resolve","reject","promise","update","then","metadata","task_name","parameters","task","obj","_changes","new_key","ServiceManager","serviceFor","BaseAPIService","settingsService","_subscribers","_promises","_compare","_list_filter","_name","_api_route","form_data","concierge","err","engine","endpoint","predicate","query_params","cache","result","http","process","processApiResult","catchError","error","of","new_item","post","injectConcierge","analyticsEvent","updateList","method","post_data","_task","put","removeItem","should_inject_concierge","apiSubRoute","token","sessionStorage","access_token","headers","HttpHeaders","requestOptions","q","label","raw_item","old_list","compareFn","new_list","mixed_list","spaceExtraFeatureToDisplayName","feature","SpaceFeatures","VideoConference","ConferencePhone","WirelessContentSharing","FlipChart","Glassboard","ElectronicWhiteboard","ConferenceRoom","TeamRoom","PartnerOffice","PhoneBooth","NaturalLight","BoardRoom","CocktailRoom","TheatreRoom","WorkshopRoom","UShapeRoom","Miscellaneous","Catering","instantBookOption","shortDisplay","instantBookOptions","mapSpaceFeaturesToSelectOption","roomEquipmentRequiredOptions","internalRoomTypeRequiredOptions","externalRoomTypeRequiredOptions","roomDetailsRequired","roomCateringAvailable","SpaceFilterReason","filterSpacesByAppliedFilters","formFilters","spaces","currentUser","isStaffMap","instantBook","some","onlyCatering","featureFilters","formFiltersEmpty","options","rulesCount","ruleReason","excludedByFiltersCount","statusMap","filteredSpaces","space","Space","raw_space","building","zones","rules","rulesForSpace","booking_rules","reason","valid","hide","hasAllFeatures","internalRoomTypeFilters","every","featuresArray","canBook","bookable","matchesType","bookingType","internal_or_external","hasCatering","has_catering","status","statusFromBookings","Booking","auto_approve","group","is_recurrent","availableOccurrences","totalOccurrences","buildingsInSameCity","meta","alternateBuildings","locationItem","specificReason","None","Filters","OfficeRules","AlternateBuildingsFound","DEFAULT_BOOKING_DURATION","internalBookingTypeOption","allBookingTypeOption","bookingTypeOptions","defaultRoomSizeOption","roomSizeOptions","roomSizeOptionsKiosk","roomCapacityToValue","roomSize","roomMaxCapacityToValue","roomFormDataToQuery","filteredLocationIds","groupChild","locations","capacity","capacity_max","is_multiroom","merged","recurrence_period","recurrence_interval","recurrence_endTz","recurrence_count","recurrence_starts","recurrence_exceptions","recurrence_days","ignore","now","defaultTestBookingForm","selectBookingFormsData","bookingForm","selectActiveForm","is_local_tz","building_tz","endTzDate","recEditingSearchPayload","SeriesAction","EDIT","selectBookingType","selectBookingLocations","groupHeader","selectIsInternal","selectFormFilters","selectRoomResultsFromState","roomStateSelector","loadRoomsForResults","model","selectRoomResultsFromState_map","loadRoomsForResultsMap","selectLaterThatDayResultsFromState","loadLaterThatDayResults","selectNextDayResultsFromState","loadNextDayResults","selectByIdResultsFromState","loadByIdResults","selectDiffSizeResultsFromState","loadDiffSizeResults","selectHomepageBookingsResultsFromState","selectUpcomingBookingsResultsFromState","selectPastBookingsResultsFromState","selectCancelledBookingsResultsFromState","selectBookingByIdResultsFromState","filterSpacesByAppliedFiltersIfSuccess","mutate","selectFilteredResults","selectMapFilteredResults","selectFilteredLaterDayResults","selectFilteredNextDayResults","selectFilteredByIdResults","selectFilteredDiffSizeResults","selectSelectedBuildingOptions","MAX_ABBREV_LOCATIONS","mapBuildingToSelectOption","dropdownOverride","code","address","groupId","mapCityToAllSelectOption","flattenDisplayOffices","grouped","toggleSelectedByGroup","selectedOptions","option","toSelect","selected","newGroup","remainingChildrenInGroup","o","ng","truncateLocationList","truncatedLocations","shouldTruncate","mapBuildingLevelToOption","level","flattenBuildingsWithLevels","flattenedLevels","placeholderRoute","num","setupRoomImages","componentReference","image_positions","rootFolderURL","fileSlug","imagesLoaded","foundImages","path","n","desiredImageName","desiredImage","pathname","tester","Image","onload","loadImages","src","bookingStatusDetails","image","text","title","roomHasCateringHours","catering_hours","cateringAllowed","disallowedStatus","opens","closed","end","openMinutes","closeMinutes","startOfDay","cateringOpenTime","cateringCloseTime","checkCollisions","service","availabilityParams","room_ids","breakdown","hide_bookings","recurrence_type","icaluid","available","start_time","end_time","has_conflict","bkn","b_setup","b_breakdown","recurrence_master_id","getStatusErrorMessage","RoomResultsViewModel","levelDisplay","short_name","local_name","office","mapResultsToViewModels","BookingStateService","_org","_spaces","ngZone","_poll","_long_poll","_long_poll_week","_bookings","_noOfMeetings","_filters","_dateTz","_loading","_state","combineLatest","filtered","bdTz","booking_date","startTz","endTz","endOfValue","filterBookings","shareReplay","filtered_week","bd","getEndOfWeek","filtered_month","search","debounceTime","switchMap","fzone","queryBooking","zone_ids","available_from","available_to","search_long_week","querySpace","space_list","processBookings","dailyCount","days","daily_count","buildSpaceLongQuery","counts","details","runOutsideAngular","interval","updateRoomList","new_bookings","concat","undo","attempted_to_delete","bkg","booking_master","period","replaceBookings","room_email","fromTz","toTz","intersects","timePeriodsIntersect","roomSatisfiesConditions","multi_rooms","room","in_zone","has_space","space_emails","in_zones","declined","getType","show","hide_type","dateWeekday","time_changed","SettingsService","is_concierge","nowTz","defaultTitle","defaultLocalTimezone","Intl","DateTimeFormat","resolvedOptions","timeZone","defaultBuildingZone","defaultOrgainiser","User","active_user","defaultBookingType","building_zone","booking_type","attendees","organiser","creator","booked_by","room_setup","room_breakdown","notes","equipment_codes","equipment_code","expected_attendees","headcount","check_ins","notify_users","company","booker","booker_concierge","level_zone","opt_out","multiroom_master_id","room_id","findSpace","roomsData","roomId","newRoom","defaultStartTz","startEpochProvided","startDateTzProvided","round","created_epoch","all_day","show_as","approvalStatus","approval_status","catering","CateringOrder","edited_fields","edits","values","occurrence_edits","recurrence_end","occurrence_ids","occurrence_details","author","isEdit","opts","note","handleRecurrenceFields","recurrence_list","location_name","from_room","approve","old_start","old_end","creation_date","creationDateTz","cateringOrders","allAttendees","checked_in","checkInsArray","has_visitors","occurence","getTime","shift","_recurrence_endTz","byRequest","tentative","isAnyRoomDeclined","delivery_time","getTimezoneOffsetString","abs","dateDiff","displayEndDateTz","external","buildingTzDt","isBeforeDate","isAfterDate","recurrenEndFromOcurrences","mergeCateringOrders","order_list","orders","order","location_id","booking_timezone","BOOKING_STATUS","MINUTE","HOUR","DAY","WEEK","MONTH","DURATION_MAP","months","week","weeks","bookingOptionsToQuery","property","until","getFreeBookingSlots","min_size","dateTzMs","slots","bkn_start","bkn_end","getNextFreeBookingSlot","date_","block","generateBookingForm","use_fields","isConcierge","manualTimezone","user_service","current_user","current","FormControl","disabled","Validators","required","validators","minLength","updateOn","needs_space","is_before_date","setValidators","validateEndTime","disable","dateValidators","isFuture","validDateTZ","updateValueAndValidity","list_length","valueChanges","expected","codes","new_expected","new_codes","space_needed","simplified_fields","handleAllDay","clone","enable","occurrences","RecurrencePeriod","LIST","occurrence","CLONE","BookingAction","start_dateTz","d1","d2","_recurr_end","fields_with_recurrence","WEEKLY","recurrence_pattern","arrayWithValues","FormGroup","control","validDate","isSameDate","JSDate","getMinLength","rule_list","min","min_block","min_length","conditions","stringToMinutes","durationGreaterThanOrEqual","duration_1","duration_2","requestable","free_slots","next_free_slot","currently_free","time_until_next_block","free_tomorrow","free_today","available_until","spaceStatusToDisplay","filter_options","filtered_list","updated_list","start1","end1","start2","end2","formatWhen","startTZ","endTZ","displayEndTZ","isIncludes","searchVaue","searchRoomsAndBookings","allItems","searchValue","relevantItems","filteredItems","duplicateMultiroomEntriesIfAny","updatedBookings","duplicatesCount","duplicatedBooking","cloneDeep","BookingsService","setService","uniqueId","respond","series","toApiJSON","taskObsr","requests","booking_id","forkJoin","BookingsPaginatedService","getHoldingBay","queryHoldingBay","response","PaginatedAPIService","space_rules_for_user","rule_block","checkRules","ruleset","max_length","counter","condition","groups","j","last_location","check","CateringCategoriesService","CateringCategory","is_category","must_select","order_anytime","CateringItem","_amount","instance_id","from_month","to_month","description","prior_notice","notice","unit_price","price","supplier_cost","minimum_quantity","maximum_quantity","parent_categories","category_ids","categories","image_path","admin_only","restricted_from","catering_type","amount","allergy","cateringItems","filteredCateringItems","out_of_stock","availableItems","substr","anytime","can_order_anytime","CateringItemsService","CateringMenuService","CateringNotesService","cateringNotes","hasBookingAttached","bookingDateTz","charge_code","kitchen","pantry","symbol","total","deliver_date","mergeCateringItemWithFormData","existing","override","CloseDialogService","dialogRefMap","dialogRef","close","DialogIds","CollapseService","collapseSubject","collapse$","DataCommonModule","INVALID_STANDALONE_KEYS","HotkeysService","keydown_states","keydown_observers","combo_end","registered_combos","addEventListener","mapKey","last_down","preventDefault","combo","combination","validCombination","last_key","updateCombinationEndList","presses","key_list","non_meta","MapLocation","map_id","desk_id","normalise","x_max","Organisation","BuildingLevel","levelWithID","fixed","confidence","at_desk","bld","building_id","LocationService","Building","disc_info","discovery_info","extras","extra_id","extra_name","loan_items","_roles","roles","_lockers","lockers","locker_structure","_systems","systems","_phone_numbers","phone_numbers","_location","longitude","latitude","searchables","neighbourhoods","lvl","lvl_features","level_id","booking_details","catering_restricted_from","currency","requires_equipment_code","requires_expected_attendees","holding_bay","visitor_space","sort_order","_data","bld_id","level_name","lower_name","map_url","floor_type","available_buildings","OrganisationService","_users","_spaceTypesSubject","_organisation","ids","bld_list","_active_building","organisation","loadOrganisation","loadLevels","space_types","loadSpaceTypes","tags","org_data","bld_data","lvl_data","type_data","types","getOrganizationFiltersByRoomType","internalSubSet","getRoomTypeSubsetDDOptions","filterOptions","setItem","DaysOfWeek","RepeatsOn","recurrencePeriodToDurationType","DAILY","ABSOLUTE_MONTHLY","generateWeekDays","params","start_week","week_days","activeDate","active","full_name","day_index","getFirstDateFromList","getLastDateFromList","recurrenceDetails","recurr","getPeriod","recurrenceRecurringDetails","removeExpiredOcurrences","controls","tz","date_now","setStartAndEndDateFromArray","dates","setRecurrenceStartsTime","dateHour","Report","cleanData","txt","charAt","UNIX_timestamp","getMonth","getHours","suffix","getMinutes","timeConverter","formatCancelledBy","room_field","price_field","row","space_service","org_service","CurrencyPipe","transform","organizer","person","isCancelled","cancelled_by","cancelled_date","cancelled_at_epoch","remove_fields","output","idx_a","idx_b","csv_json","ReportsService","fromCSV","_service_list","findIndex","provider","provideFor","useValue","SETTINGS_TOKEN","SettingsObject","_app_name","_overrides","_observables","_bypass_bookings","VERSION","built","semver","hash","override_settings","Inject","OPTION_DEFAULTS","SpaceEquipments","SpaceStyles","EMPTY_ARRAY","allowStaffRoomWithBookings","room_style","equipment","bypass_bookings","defaultGlobalName","defaultSettings","room_name","support_url","features","extra_features","room_type","simple_name","rulesFor","nowMs","runningBookings","bks","startEpoch","endEpoch","spaceWithBookings","roomType","natural_light","Set","recurrence_availability","availabilityOptionsToQuery","hide_declined","blds","bld_b","a_has_zone","b_has_zone","SPACE_LIST","SpacesService","queryRooms","updateSpace","uploadSpacePhotos","setList","filterAvailableSpaces","faker","SERVICE","generateMockOrganisationService","jest","generateMockBuilding","getRoomFilterOptionsPerLocation","generateMockDataService","generateMockSpacesService","generateMockUsersService","loadCurrentUser","bookingState","setZone","setDate","setFilters","remove","startPolling","startPollingMonth","startPollingWeek","startPollingEveryFiveMin","test_app","logo_light","background","logo_dark","heap_io","force_ssl","secure_cookie","disable_text_capture","cookie_path","TEST_SETTINGS","app","generateMockSettingsService","overrides","provideMockSettingsObject","provide","generateMockAppService","settingsOverrides","notifyInfo","notifyWarn","notifySuccess","notifyError","navigate","navigateBack","Composer","Hotkeys","Users","Locations","Base","Menu","Spaces","Bookings","Reports","CateringItems","CateringCategories","Settings","generateMockUser","booking_list","fill","generateMockBooking","mockReturnValue","save","addFrom","removeFrom","clearList","removeFromList","accept","decline","checkin","is_logged_in","queryRoomsForQR","queryObsr","checkinIndividualVisitor","updateObsr","mockImplementation","SPACE_COUNT","generateMinimalRoomDetails","generateMockSpace","space_id","recurring_search","lastName","room_booking_screen","vc","linked","commerce","productName","searchable","controlable","hourly_rate","sort_priority","business","USER_DOMAIN","BOOKING_COUNT","BOOKING_DATE","setMockBookingStartDatetime","visitor","generateMockCateringOrder","menu","date_start","users","lorem","paragraph","BLD_COUNT","LVL_COUNT","generateMockLevel","levelGenerator","firstName","test","nested","level2","org","USER_COUNT","USER_EMAILS","companyName","delegates","delegate_count","first_name","last_name","phone","phoneNumber","department","staff_code","avatar","pickMenuItem","menu_map","category","generateMockLocation","fixed_locations","maps","ORG_COUNT","generateMockOrganisation","generateMockBuildingSetByCity","generateMockModalData","pendingDate","pendingDuration","mockDateToBuildingTz","windows_id","mobile","business_unit","organisation_id","organisation_name","officeLocation","desk","generateUserForm","pattern","maxLength","UsersService","uhttp","expiry","reload","client_id","Md5","hashStr","go","append","authorise","logout","tries","locate","loadDelegates","promises","del","all","HAS_ERROR","buildValidateDate","validateDate","is_from","buildValidateStartTime","validateStartTime","date_obj","buildValidateDuration","validateDuration","buildValidateAttendees","validateAttendees","invalid","dateControlTz","noWhitespaceValidator","isWhitespace","trim","whitespace","date_org","local_tz","zoneName","compare_to","unit","ans_unit","newDate","startOf","monday","sunday","later","endOf","isLastDayOfMonth","minus","hasSame","dateYear","dateMonth","dateDay","trunc","toSeconds","toUTC","toJSDate","getDay","convertLocalTimestampToTimezonedDateTz","buildingTimezone","convertTimezonedTimestampToLocalDateTz","localOffset","getTimezoneOffset","desiredOffset","eleA","localTimezone","offset_minutes","toMiddayUTC","timezoneOffset","EnvironmentModule","providers","ENVIRONMENT_TOKEN","EnvironmentService","environment","production","BookingConfirmComponent","_booking_state_service","_router","_dialog","_dialog_ref","closeDialogService","renderer","EventEmitter","show_attendees","lastMomentConflict","old_booking","is_request","approved","bookingDetails","bookedBy","disableClose","checkSpaceAvailability","newEmail","replaceObjects","constructor","replacement","nk","buffer","elem","has_note_buffer","updated","master_booking","pollOnce","closeDialog","MeetingDetails","emit","erroMessage","queryParams","ref","open","ConflictsModalComponent","maxWidth","width","local_room_name","conflicts","copy_conflicts","componentInstance","clipboard","writeText","conflictsText","afterClosed","listType","collapseList","attendeesListRef","expandList","show_locations","locationsListRef","show_orders","cateringListRef","listRef","listElement","listItems","getElementsByClassName","totalHeight","offsetHeight","setStyle","addClass","removeClass","duration_value","recurrenceDates","a_space","dateTZ","MAT_DIALOG_DATA","Component","templateUrl","styleUrls","Output","ViewChild","$event","BookingFormComponent","cdRef","user_list","fromDateTz","untilDateTz","localStart","localEnd","chipOptions","showTimeCateringWarning","updateCoachmarkTimes","skip","distinctUntilChanged","recurrenceStarts","clearValidators","arrayValidators","disableInputs","checkTimeCateringWarning","has_id","is_edit","patchValue","SpaceSelectModalComponent","multiple","needsCatering","NewUserModalComponent","detectChanges","localTzOffset","buildingTzOffset","toggledControlName","startDateTime","fromISO","endDateTime","bookingDate","dayStartAt7am","dayEndAt8pm","markForCheck","changeDetection","ChangeDetectionStrategy","OnPush","BookingCateringConfirmModalComponent","CateringDetailsModalComponent","_cateringNotesService","head_counts","needs_charge_code","active_space","note_list","notes_field","generateFormFields","markAllAsTouched","is_valid","new_notes","setNotes","_scrollToBottom","_content_el","scrollTo","top","scrollHeight","left","behavior","active_form","errors","minlength","submit","CONFIRM_METADATA","maxHeight","ConfirmModalComponent","DECLARATIONS","NoCateringModalComponent","RequirementDetailsModalComponent","UserFormComponent","LegacyOverlaysModule","LegacyUiModule","FormsModule","ReactiveFormsModule","UiModule","EditorModule","new_user","confirm","cancel","codes_field","head_counts_field","firstSpaceEmail","head_count","anySpaceNeedsChargeCode","roomBasedEqCode","officeBasedEqCode","change$","selected_spaces","request_map","formGroup","triggerSearch","savedSelection","request_id","search_results$","active_building","resp","active_type","_space","setDefaultBuilding","grouped_by_city","city_buildings","noCateringDialogRef","panelClass","autoFocus","backdropClass","defaultBld","opt","space_a","space_b","withLatestFrom","formData","ActionIconComponent","hasSelectionRequirements","getActiveList","CateringMenuItemComponent","initial_state","an_cat","setAmount","cat","an_item","updatePackageSelection","setPrice","selectPackageOptions","confirmed_item","cart_item","active_items","updatedList","PackageOptionsModalComponent","done","a_list","animations","checkItemRequirements","getActiveItems","a_package","needed","CngSearchBarComponent","placeholder","totalFoundItem","showSrchWarning","searchStr","configChanges","clearSearch","box","onSearch","resetSearch","HoverClassDirective","elementRef","hoverClass","classList","ActionFieldComponent","show_tooltip","performAction","CounterComponent","useInput","previous_value","handleTimeout","ctrl_key","shift_key","new_value","changeInput","Number","isNaN","_onChange","_onTouch","NG_VALUE_ACCESSOR","useExisting","forwardRef","multi","DateFieldComponent","_from","position","onChange","old_date","new_d","new_date","_trigger","closeMenu","openMenu","_to","years","menuOpen","MatMenuTrigger","openDatePicker","closeDatePicker","DurationFieldComponent","specialPreprops","duration_options","generateDurationOptions","blocks","TimeFieldComponent","no_past_times","show_select","_time_options","generateAvailableTimes","select_field","focus","openedChange","datestamp","show_past","showSelect","UserListFieldComponent","search$","search_str","match_name","match_email","inputAutoComplete","openPanel","closePanel","active_list","a_user","file","files","reader","FileReader","readAsText","evt","processCsvData","srcElement","endsWith","addUser","template","MatAutocompleteTrigger","addUsersFromFile","downloadCSVTemplate","read","UserSearchFieldComponent","resetSearchString","FeedbackComponent","updateRoute","NavigationEnd","current_page","IconComponent","PopoutMenuComponent","SearchbarComponent","UserAvatarComponent","MATERIAL_MODULES","MatButtonModule","MatSnackBarModule","MatDialogModule","MatFormFieldModule","MatInputModule","MatProgressSpinnerModule","MatProgressBarModule","MatAutocompleteModule","MatSelectModule","MatChipsModule","MatRippleModule","MatMenuModule","MatCheckboxModule","MatTooltipModule","MatRadioModule","MatTabsModule","MatSlideToggleModule","ACA_PIPES_MODULE","valueChange","autofocus","focusField","input_field","actionPrefix","stateKey","buildAction","postfix","clear","wrapLoading","selectData","warn","selSuccess","selectSuccess","selOptionalSuccess","selectOptionalSuccess","selError","selectOptionalError","selLoading","selectIsLoading","actionObject","caller","flatMap","isLoading","hasError","hasSuccess","_success","isEmpty","isSuccess","isError","hasLoaded","shouldLoad","selectIsSuccess","selectIsError","selectHasLoaded","selectIsEmpty","generateMockActions","dispatcher","Actions","verifyActionSuccess","effect","expect","toBeDefined","toStrictEqual","verifyActionError","organisationStateSelector","OrganisationEffects","organisationService","OrganisationModule","organisationReducer","initialState","rooms","loadRoomsWithQuery","selectRoomResultsSuccess","RoomsEffects","spaceService","afterRequestResultsLoadOthersEffect","laterThatDayFromDateTz","nextBusinessDay","diff_capacity","loadRoomsForResultsEffect","roomQueryOptionsToSpaceAvailabilityOptions","loadRoomsForResultsMapEffect","loadLaterThatDayResultsEffect","loadNextDayResultsEffect","loadDiffSizeResultsEffect","loadRoomByIdResultsEffect","roomByIdQueryOptionsToSpaceAvailabilityOptions","RoomsModule","roomsReducer","initialRoomsState","byid","todayFromDate","retDate","mapRoomToSelectOption","resultCountObservable","loadingObservable","resultsObservable","viewModelLength","deepDistinctUntilChanged","deepEqual","filterUndefined","RxUtilsModule","AcaDatePickerComponent","klass","show_last_selection","min_offset","max_offset","date_list","month_name","days_of_week","day_format","month_format","generateMonth","generateDaysOfTheWeek","updateOptions","counters","difference","today","end_","non_month","_change_timer","new_offset","updateDate","changeMonth","AlertMode","AlertBannerDisplay","AlertBannerComponent","mode","Warning","showClose","V1","iconPath","materialColor","closeIcon","_onModeChange","Coachmark","BlueCoachmark","AutoCompleteChipSelectItemComponent","optionSelected","feedbackOutput","chipsCleared","onClickConfirm","selectOnlyOneGroup","localFilter","selectOnlyOneGroupChange","separatorKeysCodes","ENTER","COMMA","filterFormControl","focused","mobileFullScreen","autocompleteOptions","filteredAutocompleteOptions","enableCTAs","hasChips","scrollEvent","panelOpen","contains","onFocus","blur","valueAccessor","color","enabled","selectedGroupHeader","getFilteredAutocompleteOptions","groupHeaders","g","searchString","exactMatches","moreOptions","joinedOptions","groupIds","parents","jo","matInput","feedbackInput","useCTAs","focusIn","fromPanel","componentInput","loseFocus","isDisabled","spl","removeEventListener","dirty","touched","keyedInput","onPanelFocusChange","selectOption","encapsulation","ViewEncapsulation","Self","Optional","GroupHeaderPipe","hasHeader","displayAsHeader","AutoCompleteSelectOptionComponent","filteredOptionsChange","inputTextChange","emptyBoxEvent","_options","updateFilteredOptions","selectedValue","resetInput","filteredOptions","startWith","_filter","filterValue","filterValues","matchesAll","onChangeInput","BaseTemplateComponent","vcRef","isRendered","attemptViewEmbed","createEmbeddedView","TemplateRef","CateringDropComponent","onCancel","onConfirm","CngSelectOptionsComponent","CngSelectComponent","isClosed","defaultSelected","onChangeCallback","DropdownTriggerForDirective","overlay","viewContainerRef","isDropdownOpen","dropdownClosingActionsSub","EMPTY","isPanelOpened","destroyDropdown","openDropdown","ddWidth","dropdownPanel","offsetWidth","overlayRef","create","hasBackdrop","scrollStrategy","scrollStrategies","positionStrategy","flexibleConnectedTo","withPositions","originX","originY","overlayX","overlayY","offsetY","templatePortal","TemplatePortal","templateRef","attach","dropdownClosingActions","backdropClick$","backdropClick","detachment$","detachments","dropdownClosed","merge","detach","dispose","CollapseHeaderComponent","collapseService","isExpanded","collapseSubscription","expansionPanel","ConflictAlertModalComponent","dialogData","callback","dateIsToday","CustomSnackbarComponent","snackBar","dismiss","snackType","MAT_SNACK_BAR_DATA","closeSnackbar","SnackBarService","verticalPosition","horizontalPosition","_snackType","openFromComponent","DateTzCalendarWidgetComponent","className","selectedDateTz","_today","registerOnChange","registerOnTouched","startOfMonthDateTz","DateTzDatePickerComponent","icon_only","onSelect","can_pick_today","selectedDateTzValue","resetToLastSelection","_acaDatePicker","initialDateSelectionTz","writeValue","newValueTz","newDateTz","onDatePickerClose","DateTzDurationFieldComponent","defaultDurationGroups","DEFAULT_DURATION","currentStartDateTz","nearestStep","placeHolderOption","selectedOption","generateDurationOptionsFromGroups","extended","dopt","DateTzTimeFieldComponent","noPastTimes","show_current","startFromDateTz","selectedTimeString","generateAvailableTimesTz","generateOptionForDateTz","os","timeOptions","displayString","newTimeTz","setSelectedValues","ErrorMessageComponent","CalendarIconComponent","ChevronIconComponent","CloseIconComponent","InformationalImageComponent","LabelComponent","LegendDropdownComponent","isOpen","placeholderOpen","MckDatePickerComponent","dateValue","initialDateSelection","goToToday","secondarySubmit","primarySubmit","ModalButtonRowComponent","primaryDisabled","disableFixed","secondaryDisabled","smallButtons","ModalComponent","shouldClose","OverrideChangesModalComponent","getDateString","epoch","toISOString","uniqueDates","filteredEdits","dateString","has","FilterPipe","searchText","objectKey","splitKeys","it","included","SecurityContext","SanitizePipe","sanitizer","sanitize","RESOURCE_URL","URL","SCRIPT","STYLE","HTML","RadioSelectComponent","RecurringBookingForm","recurrence_types","PATTERN","DATE","recurrencePeriod","current_type","pattern_form","recurrencePatternFormControl","RecurrencePatternForm","onChangeType","RecurrenceDateForm","selected_dates","setPickerToGivenDate","tempForSort","start_date","formDateTz","is_selected","setDateTzForm","dateTsValue","addDate","fromStartTz","untilTz","repeat_period_options","validateRecurrenceInterval","repeat_every_options","recurrenceIntervalFormControl","fromEndTz","setEndDateFromStartDate","recurrenceDateStartTzFormControl","recurrencePeriodFormControl","generateMaxIntervals","recurrenceDaysFormControl","current_days","generateOcurrenceList","recurrenceEndFormControl","end_date","updateActiveWeekday","updateValidators","date_diff","periodToDurationType","first_date","recurr_days","daysInMonth","_week_days","new_day","current_index","setRepeatEvery","setRepeatPeriod","SelectOptionComponent","ignoreDisabled","noEntriesFoundLabel","SelectComponent","searchEnabled","splitDisplay","showDivider","SelectedChipCountComponent","SpacerMode","SpacerComponent","Horizontal","SwitchGroupComponent","optionChecked","closestTimeSlot","buildingDate","newTime","ToggleComponent","selectedChange","TooltipComponent","isVisible","TooltipPosition","DEFAULT","theme","TooltipTheme","tooltip","visible","TooltipDirective","appRef","componentFactoryResolver","injector","showDelay","hideDelay","componentRef","initializeTooltip","setHideTooltipTimeout","touchTimeout","bind","componentFactory","resolveComponentFactory","attachView","hostView","rootNodes","tooltipDOMElement","setTooltipComponentProperties","showTimeout","showTooltip","instance","getBoundingClientRect","right","bottom","BELOW","ABOVE","RIGHT","LEFT","hideTimeout","detachView","MatIconModule","MatExpansionModule","OverlayModule","NgxMatSelectSearchModule","NgxSkeletonLoaderModule","ZoomWarningComponent","entryComponents","ALL_DAY_BOOKING_VALUE","showPast","inputDate","allDayOption","oneWeekOption","onCloseClick","loadUser","selectUserState","selectHasUserData","UserEffects","userService","UserModule","userReducer","initialUserState","webpackEmptyAsyncContext","req","module","routes","component","ShellWrapperComponent","children","loadChildren","BookingModule","redirectTo","AppRoutingModule","RouterModule","forRoot","useHash","AppComponent","_app","_route","val","navigationTrigger","cleanHash","isLoadBookingUrl","isLoadCateringUrl","adjustZoom","clientWidth","isMobileOrTablet","vendor","maxTouchPoints","mobileAgents","localStorageSyncReducer","reducer","localStorageSync","rehydrate","metaReducers","AppModule","MAT_LABEL_GLOBAL_OPTIONS","DEFAULT_SETTINGS","BrowserModule","BrowserAnimationsModule","HttpClientModule","ComposerModule","SharedContentModule","StoreDevtoolsModule","instrument","maxAge","logOnly","MapModule","bootstrap","CalendarDateWidgetComponent","show_add_item","show_events","retainSelectedDate","dateChangeTz","timezone_value","event_map","dateInputTz","changeDate","noOfCount","applyDatePickerValue","BookingCalendarWrapperComponent","BookingCalendarRoutingModule","forChild","settingService","TopBarHeaderMode","backRoute","orgBuildings","onBackCallback","bookingModuleDeclarations","StaffCalendarComponent","DayViewTimelineComponent","DayViewSpaceComponent","DayViewSpaceEventComponent","CngMenuItemComponent","bookingModuleImports","BookingCalendarModule","router","onChildSelect","node","overlap","calculatePosition","storeOrder","view","shown_date","from_previous_day","toFixed","overflow_top","overflow_bottom","timeBasedStatusLabel","userEmail","time_period","userName","cdr","legend","eventMovingLoader","inView","dragging","moving","event_list","overlap_details","position_list","time_blocks","generateTimeBlocks","filterEvents","checkInView","last_update","calculateOverlaps","override_state","isRecurrentMaster","isRoomEmailMatch","isIncludedInSetupOrBreakdown","overflow_only","collisions","cmp","cmp_start","cmp_end","in_view","offsetLeft","delta","pointerPosition","scroll_top","top_minutes","selectedBlockStart","selectedBlockEnd","hasValidBreakdown","active_level","foundSearchLength","searchedCounter","levelsDD","paramMap","updateLevel","initSpace","numeric","ignorePunctuation","roomLevelDD","ddBoxClass","onChangeActiveLevel","generateBuildingMenu","filterd_booking","menuItem","displayName","iconName","buildingLevels","buildingMenuItems","activeBuildingName","searchBooking","updateDateTz","UPDATE_INTERVAL","scroll_left","scroll_offset","filtered_spaces","loading_space","space_zones","is_today","modalInitialized","isEventMoving","scroll_area","initSpaces","updateTime","virtualScroll","space_type","stopPolling","scrollIntoView","queryParamMap","view_id","spaceJson","active_hour","searchData","column","spaceId","bookingEl","timeoutID","scroll_box","date_percent","scrollWidth","CdkVirtualScrollViewport","clearSelected","updateScroll","BookingConfirmationComponent","Light","placeIntoModal","statusText","confirmed","isUnavailable","Urls","Help","modal","dispatch","ocurrence","specificDates","u","generateFeedbackUrl","currentPage","BookingCreateComponent","selectedRoom","bookingFormToBooking","updateConfimatinModal","unavailable","_bookings_service","handleBookingSuccessResponse","handleBookingErrorMessage","displayWarningBanner","BookingFormBaseComponent","BookingEditWrapperComponent","BookingEditComponent","updateCallback","isEditSeries","roomEmail","bk","getNotes","isEquipmentNote","isCateringNote","booking_form_data","formToAttendees","formToCompany","updateNotes","closeCallback","dialog","invalidForm","showWarningBanner","submitTimestamp","has_delegate","saveChanges","raw_user","nameParts","companies","custom","warningMessage","bookingData","setupOrganiser","setupNotes","track","dataForConfirmation","endDateString","timeString","durationString","isConflictWithOccurences","openRecurrenceConflictsModal","totalConflicts","is_conflict","total_Conflicts","recurr_ref","bookingTypeLabel","recurrenceStart","requestedEndDateTz","endDatestring","BookingDetailsModalComponent","expandedLocation","isRecurrentBooking","isMultiroomBooking","byIdResults","expandedAvailability","showInfoBanner","showCatering","disableSeriesEditButton","disableCancelButton","disableEditTimeButton","disableUpdateDetailsButton","_specific_dates","roomLocation","street_and_city","initDisplayValues","displayCancelModal","cancelBooking","addCatering","roomHasCatering","hasLoaderUrl","available_fields","fromEvent","throttleTime","tap","showDetails","dispatchToGetFloorCurrentStatus","hostEmail","roomName","attendeesString","chargeCode","mapUrl","extendableMaximum","focusedRoom","checkingExtendable","receiptionEmail","reception_email","companyString","setAlternativeWeekStartDate","requirements","orgStatus","recentlyExpired","statusImage","findMaxExtension","fetchRooms","invalidDueToOfficeRule","alertIfItHasConflict","flag","setupInSeconds","breakdownInMinutes","gapInMinutes","editingSeries","roomOption","recurringBookingData","rec_endTz","getLocation","clearFormAndResultData","dialog_ref","RoomBookingModalComponent","navigateTo","navigateT0Search","relativeTo","refresh","CancelBookingModalComponent","legth","dialogRefX","BookingDurationModalComponent","maximum","updateBookingState","alternativeWeekStartDateTz","pendingChanges","roomRules","displayInfoBanner","global_name","isBookable","isAvailable","headerText","buttonLabel","allWeek","startOfWeek","specific_dates","show_fields","getRawValue","closeModal","steps","updateBookingDuration","bookingSelect","BookingResultItemComponent","small","timeStringParts","localTimeStringParts","isAnotherTimezone","setupDisplayFields","viewModel","timeRangeString","bkn1","bkn2","RoomResultsComponent","RoomFiltersModalComponent","RoomDetailsComponent","ManageBookingsComponent","OfficeFloorComponent","RoomBookingComponent","BookingRoutingModule","BookingsListingComponent","BookingCateringComponent","BookingCateringOrderDetailsComponent","BookingCateringOrderListComponent","CateringMenuCategoryComponent","CateringOrderListItemComponent","SearchedLocationComponent","ResultsHeaderComponent","RoomAvailabilityPreviewComponent","RoomLocationPreviewComponent","RoomResultItemComponent","RoomBookingFormComponent","RoomBookingDetailsFormComponent","RoomResultsPaginatedComponent","RoomFiltersFormComponent","RoomResultsSectionComponent","RoomAvailabilityPreviewModalComponent","OrderTableComponent","SurveyModalComponent","CalendarModule","DateAdapter","useFactory","adapterFactory","OfficeFloorMapModule","bookingResults","showBookings","reloading","totalRecords","pageLimit","bookingPerPage","filteredByHost","getViewModel","prevPage","setPage","nextPage","prevGroup","pages","nextGroup","gotoPage","page","activeTab","sort_asc","sort_desc","reverse_sort","allBookings","filterBySelectedHost","originalArray","subarrayLength","newArray","$change","selectedHost","searchBookingBy","isHostChanged","searchHost","filterBookingsBySearchValue","filteredBookings","lastPage","splitArrayIntoSubarrays","getBuilding","page_idx","dontShowReloading","p","startPosition","maxed","mined","canceled","buildingAddress","next_disabled","combineItems","newItems","oldItems","itemsObj","active_order","an_order","reduceItems","reduceOrders","consolidatedOrders","deliveryTime","saveBooking","openCateringDetailsModal","_menu","category_list","available_times","matched_items","expired","available_categories","within_category_restricted_time","initForm","_input_el","show_search","loadMenu","generateStartAndEndTimes","space_email","building_time","cat_start_time","cat_end_time","within_restricted_time","has_available_items","out_of_hours","form_controls","confirmOrder","edit","newOrder","previous","bookingTypes","searchBarConfig","bookingId","snapshot","verb","initData","closeAll","viewBookingFromEmailLink","replaceUrl","ifUser","host_list","hostOptions","delegateDD","onChangeDelegates","ddOptionBoxWidth","clearPage","BookingResultsViewModel","WAITING_TIME","FloorMapOverlayComponent","selectedRoomId","zoom","MIN_ZOOM_LEVEL","center","CENTER_POINT","availableUntil","untilNextBookingFlag","isTimerActive","timerIndex","fetchRoomWithBookings","userSelectedRoom","calculateRoomBookingTimeInfo","currentStatus","activeBookings","timeRemainingInActiveBooking","timeUntilNextBooking","setupTimer","updateSchedulingEpochs","intervalCall_1","intervalCall_15","determineNextBookingStartTime","parentComponent","roomStatus","nowTime","ts","addMin","nextBookingStartTime","futureBookingsForTheDay","nextBookingStartTimeMs","setUpTime","addSeconds","TIME_SIMPLE","startTimer","childCallback","updateRoomData","isOverlayOpened","adjustedTime","timeSlot","end_epoch_15","end_epoch_30","timer","currentTime","endTime","availableTimeToBook","minutesRemaining","secondsRemaining","setup15MinTimer","addjustedTime","futureBookings","endEpoch30","latestBookingStartTime","timeDiffMs","diffInMs","diffInHours","diffInMinutes","roomSelected","roomDataCallback","confirmBooking","MAP_OVERLAY_DATA","Emulated","MAX_ZOOM_LEVEL","mapSpaceStatusToDisplay","mapSpaceStatusToOption","legendOptions","defaultMapBookingRules","defaultMapBookingSubtitle","generateMapStyleForSpace","colorStatusMap","styles","generateMapListenersForSpace","hoverSpace","leaveSpace","clickSpace","listeners","spaceToMapFeature","coordinates","roomToMapFeature","SERVICE_ACCOUNT","mapModuleImports","LibraryModule","mapModuleDeclarations","openHeader","focusedMapSpace","resultBuildings","resultSpaces","activeBuilding","activeLevel","activeSpace","style_map","bookingLocations","buildingLevelOptions","spaceListOptions","activeBuildingOption","activeLevelOption","activeSpaceOption","bookingFormData","bookingConfirmed","getState","floorMap","selection","serviceAccount","self","selectActiveBuilding","spacesFromSelection","colour_map","mapStyle","focusOnRoom","firstBuilding","selectBuildingLevel","OfficeInformationModalComponent","navigationExtras","kioskFormFilter","dayOfWeek","toggleOptions","selectedToggle","selectedToggleChange","retrievedOption","onSelectedChange","queryParamsHandling","submitForm","pendingDateTz","updateDisplay","pendingDateString","pendingTimeString","pendingDurationString","currentBooking","mockBooking","pending_date","$value","formControl","localizedStartDate","localizedEndDate","updateDatePickerValue","WEEKEND_DAYS","grey","secondary","primary","blue","red","confirmChanges","handleExpand","updateCalendarWeekView","warnIfItHasConflict","showDatePicker","showWeekend","calendarPopupValue","pendingChange","eventSnapSize","dayRefresh","weekRefresh","addMarginOnConflict","cssClass","resizable","beforeStart","afterEnd","draggable","modal_data","scrollFired","date_span","dateControl","currentBookingStartDate","weekViewDateTz","calendarCenter","viewDateTz","setCalendarValue","setupEventName","transformBookings","expanded","setDislayValues","dayStartHour","tz_offset","week_start_date","week_view_date","weekViewRangeText","backgroundColor","startHour","dayEndHour","bumper","getBumpers","calendarSpan","raw_booking","displayClass","utcStart","utcEnd","adjustedStartDate","utcToZonedTime","adjustedEndDate","assign","milliseconds","updateTileColor","booked","conflict","hasConflict","isEvents","thirty_minutes_in_millis","toDate","buildingTz","localizedStartTime","localizedEndTime","bookingStartTime","bookingEndTime","bstart","bend","newStart","newEnd","iEvent","buildingStartDateTz","buildingEndDateTz","new_start","md","dnd_duration","one_day_in_millis","conflictCheckStartTime","conflictCheckEndTime","buildingStartDate","applyChanges","ele","getElementById","_snackBar","triggerSubmit","validateForm","showHint","searchSubject","selectedUsers","notesHandle","noteValidationClass","selectedCompanies","companyOptions","bookingFormGroup","checkingBreakdown","searchResults","unshift","formRef","onSubmit","inputValue","inputValueEmail","emailRegex","headCountControl","showCancel","cancelSubmit","fromDate","emitEvent","formGroupData","is_past","_checkDateInPast","formGroupDate","closestTz","prevClosestTz","prevDateTz","showManageButtonA","showManageButtonB","showManageButtonC","homepageBookingResults","pastBookingResults","onbeforeunload","upcomingBookings","LearnMore","routeToResults","routeToManageBookings","isAlertDisplayed","roomSubtype","occurenceAvailability","getCurrentNavigation","availabilityStatus","checkAvailabiltyAsPerRule","setRoomSubType","requestedDateTz","endDate","temp","isSpaceValidAsPerRule","goToBackRoute","expandAvailability","updateAvailabilityStatus","primaryCheck","secondaryCheck","removeDateOffset","bookingRoute","isRequest","combinedFeatures","handleClose","expandMap","bookRoom","isInternal","filtersSubmit","getFilters","toggleOptionChecked","submitFilters","Dark","viewMode","featuresRoom","minZoom","setIntervalHandle","initMapZoom","zoomToRoom","roomSelect","availability","firstChange","coachMarkAction","ROOM_DISPLAY_STEP","ROOM_DISPLAY_START","displayCount","displayViewModels","viewModels","vm","showLoadMore","remainingResults","spaceConflicts","overrideChanges","goToRoomDetail","mainResultViewModels","editing_form","AlternateBuildings","subscribeResultsToViewModels","subName","flattenLevelBuildings","viewModelSubject","resultsLoading","updateCoachMark","coachMarkDisplay","RoomResultsCoachmarkViewmodel","rules_link","levelBuildings","cityFromLocation","actionButtonText","day_offset","mainResults","mainResultsFiltered","laterThatDayResults","nextBusinessDayResults","diffSizeResults","laterThatDayDisplay","mainCoachMarkDisplay","mainResultsCount","laterThatDayCount","nextBusinessDayCount","diffSizeCount","spaceControl","searchStringPresent","nday","despatchLoadRooms","mainResultsSpaces","filteredRooms","selectedMenuIndex","isForFloorMap","selectedSpace","clearRoomSearch","roomIds","collapsePanel","changeSearchResults","overflow","changeClick","filterClick","canFilter","timing","filterDisplay","filterCount","computeDisplay","occEndDate","endRecDate","startDisplay","endDisplay","durationDisplay","FooterMenuComponent","tiles","MapControlsComponent","levelChange","building_details","building_list","level_list","setBuilding","lvl_id","OverlayMenuComponent","showChange","copyright","delayedClose","cancelClose","ResponsiveInlineImagesComponent","imgArr","phase","baseUrl","questions","created_at","updated_at","header_question","header_subtext","answers","questions_id","positive","option_responses","comments","getFeedbackQuestionsFromApi","questionID","checked","$evemt","delayed","TopbarHeaderComponent","backModal","noSurvey","menuChange","onBack","modalOpen","surveyDialogRef","feedbackId","logo","feedback_id","openFeedbackModal","homeOverride","help_url","back","feedback_url","goToFeedback","goToHelp","LoginComponent","username","password","login","setErrors","zoomOutClick","zoomInClick","refreshClick","infoClick","toggleEvent","toggle","MapFiltersComponent","selectedBuildingChange","selectedLevelChange","selectedSpaceChange","searchClick","buildingControl","levelControl","MapOverlayComponent","closeMapOverlayOutlet","closeOverlay","MapSearchComponent","floorData","floorDataParam","refreshFloorNumber","selectActiveSpace","displayOfficeInformation","propagateToggle","zoomIn","zoomOut","resetZoomLevels","info","custom_html","map_rules","other_rules","contact","link","COMPONENTS","CDK_MODULES","ScrollingModule","DragDropModule","CdkTableModule","APipesModule","AInteractiveMapModule","ACustomEventsModule","IvyCarouselModule","placeOs","activatedRoute","userLoading","isQRCode","buildingOptions","oauth_redirect","availibityParams","setSpaceList","bookingRoom","seledtedZone","NavigationStart","checkRoomId","query2","loading_state","initialized","isQRCodeScanedAndReady","mod","Feedback","hmr","general","home","help","columns","booking_types","html_body","multiple_spaces","desk_start","space_display","show_images","directory","show_avatars","min_search_length","explore","can_select_building","show_legend_group_names","show_timeline","General","day_view","dragdrop","hmrBootstrap","ngModule","hot","ApplicationRef","elements","components","makeVisible","createNewHosts","enableProdMode","platformBrowser","bootstrapModule"],"mappings":"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","file":"main-es5.js","sourcesContent":["export * from './lib/animations.module';\nexport * from './lib/angular-animations'\n","import { trigger, transition, style, animate, state } from '@angular/animations';\n\nexport const ANIMATION_SHOW_ENTER_LEAVE = trigger('show', [\n transition(':enter', [\n style({ opacity: 0, height: 0 }),\n animate(300, style({ opacity: 1, height: '*' }))\n ]),\n transition(':leave', [\n style({ opacity: 1, height: '*' }),\n animate(300, style({ opacity: 0, height: 0 }))\n ])\n]);\n\nexport const ANIMATION_SHOW_CONTRACT_EXPAND = trigger('show', [\n state('show', style({ opacity: 1, height: '*' })),\n state('hide', style({ opacity: 0, height: 0 })),\n transition('show <=> hide', animate('200ms ease-in'))\n]);\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class AnimationsModule {}\n","export * from './lib/base.module';\nexport * from './lib/types.utilities';\nexport * from './lib/general.utilities';\nexport * from './lib/base.class';\nexport * from './lib/base.directive';\nexport * from './lib/date.utils'\nexport * from './lib/date.spec-helpers'\nexport * from './lib/replace.pipe'\nexport * from './lib/cdk-drop-list-scroll-container.directive'\nexport * from './lib/image.directive';\n","import { Subscription, BehaviorSubject } from \"rxjs\";\n\nexport class BaseClass {\n /** Store for named timers */\n protected _timers: { [name: string]: number } = {};\n /** Store for named intervals */\n protected _intervals: { [name: string]: number } = {};\n /** Store for named subscription unsub callbacks */\n protected _subscriptions: { [name: string]: (Subscription | (() => void)) } = {};\n /** Subject which stores the initialised state of the object */\n protected readonly _initialised = new BehaviorSubject(false);\n\n /** Observable of the initialised state of the object */\n public get initialised(): BehaviorSubject {\n return this._initialised;\n }\n /** Whether the object has been initialised */\n public get is_initialised(): boolean {\n return this._initialised.getValue();\n }\n\n protected destroy() {\n for (const key in this._timers) {\n if (this._timers.hasOwnProperty(key)) {\n this.clearTimeout(key);\n }\n }\n for (const key in this._intervals) {\n if (this._intervals.hasOwnProperty(key)) {\n this.clearInterval(key);\n }\n }\n for (const key in this._subscriptions) {\n if (this._subscriptions.hasOwnProperty(key)) {\n this.unsub(key);\n }\n }\n }\n\n /**\n * Creates a named timer\n * @param name Name of the timer\n * @param fn Callback function for the timer\n * @param delay Callback delay\n */\n protected timeout(name: string, fn: () => void, delay: number = 300) {\n if (name && fn && fn instanceof Function) {\n this.clearTimeout(name);\n this._timers[name] = setTimeout(() => {\n fn();\n this._timers[name] = null;\n }, delay);\n } else {\n throw new Error(\n name ? 'Cannot create named timeout without a name' : 'Cannot create a timeout without a callback'\n );\n }\n }\n\n /**\n * Clears the named timer\n * @param name Timer name\n */\n protected clearTimeout(name: string) {\n if (this._timers[name]) {\n clearTimeout(this._timers[name]);\n this._timers[name] = null;\n }\n }\n\n /**\n * Creates a named interval\n * @param name Name of the interval\n * @param fn Callback function for the interval\n * @param delay Callback delay\n */\n protected interval(name: string, fn: () => void, delay: number = 300) {\n if (name && fn && fn instanceof Function) {\n this.clearInterval(name);\n this._intervals[name] = setInterval(() => fn(), delay);\n } else {\n throw new Error(\n name ? 'Cannot create named interval without a name' : 'Cannot create a interval without a callback'\n );\n }\n }\n\n /**\n * Clears the named interval\n * @param name Timer name\n */\n protected clearInterval(name: string) {\n if (this._intervals[name]) {\n clearInterval(this._intervals[name]);\n this._intervals[name] = null;\n }\n }\n\n /**\n * Store named subscription\n * @param name Name of the subscription\n * @param unsub Unsubscribe callback or Subscription object\n */\n protected subscription(name: string, unsub: Subscription | (() => void)) {\n this.unsub(name);\n this._subscriptions[name] = unsub\n }\n\n /**\n * Call unsubscribe callback with the given name\n * @param name\n */\n protected unsub(name: string) {\n if (this._subscriptions && this._subscriptions[name]) {\n this._subscriptions[name] instanceof Subscription\n ? (this._subscriptions[name] as Subscription).unsubscribe()\n : (this._subscriptions[name] as any)();\n this._subscriptions[name] = null;\n }\n }\n}\n","\nimport { Directive, OnDestroy } from '@angular/core';\nimport { BaseClass } from './base.class';\n\n@Directive({\n selector: 'a-very-basic-component-base-that-should-not-be-used'\n})\nexport class BaseDirective extends BaseClass implements OnDestroy {\n public ngOnDestroy(): void {\n this.destroy();\n }\n}","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NumbersOnlyDirective } from './numbers-only.directive';\n\n@NgModule({\n imports: [CommonModule,],\n declarations: [\n NumbersOnlyDirective\n ],\n exports: [\n NumbersOnlyDirective\n ]\n})\nexport class BaseModule {\n}\n","import {\n Directive,\n Input,\n Renderer2,\n SimpleChanges,\n OnChanges,\n ContentChildren,\n QueryList,\n AfterContentInit\n} from '@angular/core';\nimport { CdkDropList, CdkDrag } from '@angular/cdk/drag-drop';\nimport { BaseDirective } from './base.directive';\n\nexport enum ScrollDirection {\n NONE,\n X,\n Y,\n BOTH\n}\n\n@Directive({\n selector: '[cdkDropList][scrollContainer]'\n})\nexport class CdkDropListScrollContainer extends BaseDirective\n implements OnChanges, AfterContentInit {\n /** Direction of scroll to determine updating the position of the drop list */\n @Input() direction: ScrollDirection = ScrollDirection.X;\n /** Name of the scroll container for the list */\n @Input() scrollContainer: string;\n /** Scroll container element */\n public element: HTMLElement;\n /** Last scroll position */\n public last_scroll: { x: number; y: number } = { x: 0, y: 0 };\n\n /** Draggable children elements */\n @ContentChildren(CdkDrag) private items: QueryList;\n\n constructor(private _cdkDropList: CdkDropList, private _renderer: Renderer2) {\n super();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.scrollContainer && this.scrollContainer) {\n this.element = this._cdkDropList.element.nativeElement.closest(\n this.scrollContainer\n ) as HTMLElement;\n }\n }\n\n public ngAfterContentInit(): void {\n this.subscription(\n 'drag_items',\n this.items.changes.subscribe((items: QueryList) => {\n const list = items.toArray();\n list.forEach((i, index) => {\n this.subscription(\n `list-item-${index}`,\n this._renderer.listen(i.element.nativeElement, 'mousedown', () => {\n this.subscription(\n 'item-dragged',\n this._renderer.listen('window', 'mouseup', () => this.onDrop())\n );\n this.onDrag();\n })\n );\n this.subscription(\n `list-item-touch-${index}`,\n this._renderer.listen(i.element.nativeElement, 'touchstart', () => {\n this.subscription(\n 'item-dragged',\n this._renderer.listen('window', 'touchend', () => this.onDrop())\n );\n this.onDrag();\n })\n );\n });\n })\n );\n }\n\n /** Start listing for scroll events on the container */\n public onDrag() {\n if (this.element) {\n this.subscription(\n 'scroll',\n this._renderer.listen(this.element, 'scroll', () => this.updateListPosition())\n );\n }\n }\n\n /** Stop listening for scroll events on the container */\n public onDrop() {\n this.unsub('scroll');\n }\n\n /**\n * Forcefully update the position data of the drop list\n */\n private updateListPosition() {\n this.timeout(\n 'update_positions',\n () => {\n const scroll = { x: this.element.scrollLeft, y: this.element.scrollTop };\n if (\n ((this.direction === ScrollDirection.BOTH ||\n this.direction === ScrollDirection.Y) &&\n scroll.y !== this.last_scroll.y) ||\n ((this.direction === ScrollDirection.BOTH ||\n this.direction === ScrollDirection.X) &&\n scroll.x !== this.last_scroll.x)\n ) {\n (this._cdkDropList._dropListRef as any)._cacheOwnPosition();\n (this._cdkDropList._dropListRef as any)._siblings.forEach(i =>\n i.isReceiving() ? i._cacheOwnPosition() : null\n );\n }\n this.last_scroll = scroll;\n },\n 50\n );\n }\n}\n","import MockDate from 'mockdate';\n\n/**\n * August 13, 2020 at 7:22:12 UTC\n */\nconst initialTime = 1597346532 * 1000;\n\nexport const mockDate = (timeOverride = initialTime) => MockDate.set(new Date(timeOverride));\n\nexport const resetDate = () => MockDate.reset();\n","import { DateNow, DateTZ } from '@mckinsey-converge/date-tz'\nimport { DateTime } from 'luxon';\nimport * as dayjs from 'dayjs';\nimport {\n dayJsHoursMinutes,\n dayJsTimeFormatString,\n} from './general.utilities';\n\n/**\n * Allows you to split up durations into a group.\n */\nexport interface DurationGroup {\n /**\n * Step amount to generate between start and max.\n */\n step: number;\n /**\n * Where to start in minutes.\n */\n start: number;\n /**\n * Where to end in minutes.\n */\n max: number;\n}\n\n/**\n * Find the multiple of `stepMinute` which is closest to the 'minutes' property of the given date.\n * @param date - Any Lexon date.\n * @param stepMinute - The number of minutes between one timeslot and the next. Integer value\n * 1 to 59, inclusive.\n */\n// R--- depreciate this one\nexport const closestToTimeSlot = (date: DateTime, stepMinute: number, start: number = 0) : DateTime => {\n return date.set({ millisecond: 0, second: 0, minute: Math.ceil(date.minute / stepMinute) * stepMinute })\n .plus({ minutes: start % 60 }) // apply offset as well if it starts at 15.\n};\n\nexport const closestToTimeSlotTz = (dateTz: DateTZ, stepMinute: number, start: number = 0) : DateTZ => {\n return dateTz.setValue({ millisecond: 0, second: 0, minute: Math.ceil(dateTz.minutes / stepMinute) * stepMinute })\n .addValue({ minutes: start % 60 }) // apply offset as well if it starts at 15.\n};\n\n/**\n * Convert duration to human readable string\n * @param duration Duration in minutes\n * @param short Whether to use short form of duration words e.g. hours as hrs, or minutes as mins\n */\nexport function durationHumanized(duration: number, short: boolean = false): string {\n if (!duration || duration < 0) {\n return '';\n }\n const h = Math.floor(duration / 60);\n let d = `${h >= 1 ? h + (short ? ' hr' : ' hour' + (h === 1 ? '' : 's')) : ''}`;\n if (duration % 60 !== 0) {\n if (d) {\n d += short ? ' ' : ', ';\n }\n const m = duration % 60;\n d += `${m >= 1 ? m + (short ? ' min' : ' minute' + (m === 1 ? '' : 's')) : ''}`;\n }\n return d;\n}\n\nexport const weekDayMonthYearFormat = (date: DateTZ): string => date.formatDate('ccc dd MMM yyyy');\n\n/**\n * Tries to extract best-fit input\n * @return undefined if not valid. otherwise if good\n */\nexport const extractDateFromInput = (input: string,\n checkHour,\n startDate: dayjs.Dayjs): dayjs.Dayjs | undefined => {\n // check if input has am/pm or normal 24 hour time.\n // let date = dayjs(input, 'HH:mm');\n // let date = dayjs(input, 'h:mma');\n let date = dayjs(input, dayJsTimeFormatString());\n if (!date.isValid()) {\n // patch if time is in format xx:x to assume you meant xx:x0\n let cleanedInput = input;\n const times = input.split(':');\n if(!input){\n return undefined\n }\n if (times.length === 2) {\n if (times[1].length === 1) {\n cleanedInput = `${times[0]}:${times[1]}0`;\n }\n }\n // may be other input, lets try next value (without am/pm)\n date = dayjs(cleanedInput, dayJsHoursMinutes());\n // might be just purely an hour\n if (!date.isValid() && checkHour) {\n date = dayjs(input, 'H');\n }\n }\n // We expect input times to be in the future. If now is in the afternoon, this\n // simple block will ensure the returned date is also in the afternoon.\n //\n // NB: dayjs parses times as morning by default.\n if (date.isValid()) {\n // Move to the selected start date\n date = date.month(startDate.month()).date(startDate.date()).year(startDate.year());\n if (startDate.hour() > date.hour() && date.date() === startDate.date()) {\n date = date.set('hour', date.hour() + 12);\n }\n }\n\n return date.isValid() ? date : undefined;\n};\n\n\n/**\n * 1. Calculates the date from input via {@link extractDateFromInput}.\n * 2. Finds the nearest time slot that it can be via {@link closestToTimeSlot}.\n * 3. Then returns the time-format string the input expects so autocomplete can suggest\n * closest match.\n * @param step The step between time slots.\n * @param input The input text.\n */\nexport const nearestStepToInput = (\n step: number,\n input: string,\n currentStartDate: number,\n start: number = 0\n): string => {\n let date = extractDateFromInput(input, false, dayjs(currentStartDate));\n if (date) {\n const luxonDate = DateTime.fromMillis(date.valueOf());\n const closestDate = closestToTimeSlot(luxonDate, step, start);\n return closestDate.toFormat(dayJsHoursMinutes());\n } else {\n return input;\n }\n};\n/**\n * Similiar to {@link nearestStepToInput} instead:\n * 1. Calculates the date from input via {@link extractDateFromInput}.\n * 2. Finds which duration group is closest to the currentStartDate. If not found\n * return vanilla text.\n * 3. Finds the nearest time slot that it can be via {@link closestToTimeSlot}.\n * 4. Then returns the time-format string the input expects so autocomplete can suggest\n * closest match.\n */\nexport const nearestDurationToInput = (durationGroups: DurationGroup[],\n currentStartDate: number,\n value: string): string => {\n\n let date = extractDateFromInput(value, false, dayjs(currentStartDate));\n\n if (!date) {\n // Check if the input is a duration \n const duration = parseInt(value);\n if (typeof (duration) === 'number' && value.indexOf(':') === -1 && duration > 12) {\n date = dayjs(currentStartDate).add(duration, 'm');\n }\n }\n\n if (date) {\n const minutes = date.diff(currentStartDate, 'minute');\n const closestDurationGroup = durationGroups.find(d => {\n return (minutes <= d.max);\n });\n if (closestDurationGroup) {\n const offset = [closestDurationGroup].reduce((previousValue, currentValue) => {\n return previousValue + currentValue.start;\n }, 0);\n const luxonDate = DateTime.fromMillis(date.valueOf());\n const closestDate = closestToTimeSlot(luxonDate, closestDurationGroup.step, 0);\n return closestDate.toFormat(dayJsHoursMinutes());\n }\n }\n\n return value;\n};\n\nexport const resetSecondsOnTimestamp = (timestamp: number) => {\n return DateTime.fromMillis(timestamp).set({ second: 0, millisecond: 0 }).toMillis();\n}\n\nexport const formatDateWithSuffix = (date: string): string => {\n const dateObj = new Date(date);\n const day = dateObj.getDate();\n const month = dateObj.toLocaleString(\"default\", { month: \"short\" });\n const year = dateObj.getFullYear();\n return `${day}${nthNumber(day)} ${month} ${year}`; //this.event.date_string;\n}\n\nconst nthNumber = (number) => {\n return number > 0\n ? [\"th\", \"st\", \"nd\", \"rd\"][\n (number > 3 && number < 21) || number % 10 > 3 ? 0 : number % 10\n ]\n : \"\";\n};\n\nexport const getListOfDateFormat = () => {\n return [\t\n 'MMMM dd y', \t//March 07 2023\n 'MMM dd, y',\t//Mar 07 2023\n 'MMMM dd',\t\t//March 07\n 'MMM dd', \t\t//Mar 07\n 'MM dd', \t\t//03 07\n\n 'MM-dd-yy',\t\t//03-07-23\n 'MM-dd-yyyy',\t//03-07-2023\n 'MMMM-dd-yyyy', //March-07-2023\n 'MMMM-dd-yy',\t//March-07-23\n\n 'MMMM-dd',\t\t//March-07\n 'MMM-dd',\t\t//Mar-07\n \n 'MMM-dd-y',\t\t//Mar-07-2023\n\n 'MM/dd',\t\t//03/07\n 'MM/dd/yy',\t\t//03/07/23\n 'MM/dd/yyyy',\t//03/07/2023\n \n 'dd/MM',\t\t//07/03\n 'dd/MM/yy',\t\t//07/03/23\n 'dd/MM/yyyy',\t//07/03/2023\n \n 'dd-MMMM',\t\t//07-March\n 'dd MMMM',\t\t//07 March\n 'dd-MMM',\t\t//07-Mar\n 'dd MMM',\t\t//07 Mar\n\n 'dd-MM-y',\t\t//07-03-23\n 'dd MMMM yy',\t//07 March 23\n \n 'dd/MMM/y',\t //07/Mar/2023\n 'dd/MMMM/y', //07/March/2023\n 'dd/MMM/yy', //07/Mar/23\n 'dd/MMMM/yy', //07/March/23\n \n\n 'dd-MMMM-yy',\t//07-March-23\n 'dd-MMM-yy',\t//07-Mar-23\n 'dd-MM-yy',\t\t//07-03-23\n 'MMMM-dd-yy',\t//March-07-23\n 'MMM-dd-yy',\t//Mar-07-23\n\n 'MMMM dd yy',\t//March 07 23\n 'MMM dd, yy',\t//Mar 07 23\n 'MM dd, yy',\t//03 07 23\n\n 'dd MMMM y',\t//07 March 2023\n 'dd MMM, y',\t//07 Mar 2023\n 'dd MM, yy',\t//07 03, 23\n 'dd-MMM-y',\t//07-Mar-2023\n\n 'h:mm a', // 3:30 pm\n 'h:mma' // 3:30 pm\n\n ];\n}","import { HashMap, Point } from './types.utilities';\n\nimport * as dayjs from 'dayjs';\nimport * as utc from 'dayjs/plugin/utc';\nimport * as timezone from 'dayjs/plugin/timezone';\nimport * as isToday from 'dayjs/plugin/isToday';\nimport * as weekday from 'dayjs/plugin/weekday';\nimport * as customParseFormat from 'dayjs/plugin/customParseFormat';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n// TODO: this is not the best place to import this timezone addition\ndayjs.extend(utc);\ndayjs.extend(timezone);\ndayjs.extend(isToday);\ndayjs.extend(weekday);\ndayjs.extend(customParseFormat);\n\n/** Available console output streams. */\nexport type ConsoleStream = 'debug' | 'warn' | 'log' | 'error' | 'info';\n\n/**\n * Log data to the browser console\n * @param type Type of message\n * @param msg Message body\n * @param args array of argments to log to the console\n * @param stream Stream to emit the console on. 'debug', 'log', 'warn' or 'error'\n * @param force Whether to force message to be emitted when debug is disabled\n */\nexport function log(\n type: string,\n msg: string,\n args?: any,\n stream: ConsoleStream = 'debug',\n force: boolean = false,\n app_name: string = 'STAFF'\n) {\n if ((window as any).debug || force) {\n const colors: string[] = [\n 'color: #E91E63',\n 'color: #3F51B5',\n 'color: default',\n ];\n if (args) {\n console[stream](\n `%c[${app_name}]%c[${type}] %c${msg}`,\n ...colors,\n args\n );\n } else {\n console[stream](`%c[${app_name}]%c[${type}] %c${msg}`, ...colors);\n }\n }\n}\n\n/**\n * Get item from the nested object\n * @param keys List of sub-keys to search for\n * @param map Object to search\n */\n export function getItemWithKeys(keys: string[], map: HashMap) {\n const key = keys[0];\n if (map && key in map) {\n return keys.length > 1\n ? getItemWithKeys(keys.slice(1), map[key] || {})\n : map[key];\n }\n return null;\n}\n\n/* istanbul ignore next */\n/**\n * Checks whether the platform is a mobile device.\n */\nexport function isMobileDevice(): boolean {\n const r = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i;\n return !!navigator.userAgent.match(r);\n}\n\n/* istanbul ignore next */\n/**\n * Checks whether the browser is Mobile Safari.\n */\nexport function isMobileSafari(): boolean {\n const agent = navigator.userAgent;\n return !!(\n agent.match(/iPhone|iPad|iPod/) &&\n agent.match(/AppleWebKit/) &&\n !agent.match('CriOS')\n );\n}\n\n/* istanbul ignore next */\n/**\n * Checks whether the browser is Android Chrome.\n */\nexport function isAndroidChrome(): boolean {\n const agent = navigator.userAgent;\n return !!(agent.match(/Android/) && agent.match(/Chrome/));\n}\n\n/**\n * Generate string representation of a number with zeros padding the length\n * @param value Number to pad with zeros\n * @param length Length of the resulting string\n */\nexport function padZero(value: number, length: number): string {\n let str = value.toString();\n while (str.length < length) {\n str = '0' + str;\n }\n return str;\n}\n\n/**\n * Remove duplicates from the given array\n * @param array List of items to remove duplicates from\n * @param key Key on array objects to compare for uniqueness\n */\nexport function unique(array: T[], key: keyof T | undefined = undefined) {\n return array.filter(\n (el, pos, arr) =>\n el &&\n arr.indexOf(\n key\n ? arr.find((i) => i && i[key] === el[key])\n : arr.find((i) => i === el)\n ) === pos\n );\n}\n\n/**\n * Convert duration to human readable string\n * @param duration Duration in minutes\n * @param short Whether to use short form of duration words e.g. hours as h\n */\nexport function humaniseDuration(durationInput: number, size: string = 'long') {\n const duration = Math.floor(durationInput);\n if (!duration || duration < 0) {\n return '';\n }\n let singular = false;\n let format = { hours: ' hour', minutes: ' minute' };\n switch (size) {\n case 'medium':\n format = { hours: 'hr', minutes: 'min' };\n break;\n case 'short':\n format = { hours: 'h', minutes: 'm' };\n singular = true;\n break;\n }\n const h = Math.floor(duration / 60);\n let d = `${\n h >= 1\n ? h +\n (singular ? format.hours : format.hours + (h === 1 ? '' : 's'))\n : ''\n }`;\n if (duration % 60 !== 0) {\n if (d) {\n d += singular ? ' ' : ', ';\n }\n const m = duration % 60;\n d += `${\n m >= 1\n ? m +\n (singular\n ? format.minutes\n : format.minutes + (m === 1 ? '' : 's'))\n : ''\n }`;\n }\n return d;\n}\n\n/**\n * Get a filtered list of items\n * @param filter Value to filter on\n * @param items List of results to filter\n * @param fields Fields to check for matches on each item\n */\nexport function filterList(\n filter: string,\n items?: T[],\n fields: string[] = ['id']\n): T[] {\n let results: any[];\n // Tokenise filter string\n const filters = (filter || '').toLowerCase().split(' ');\n const list = {};\n for (const f of filters) {\n /* istanbul ignore else */\n if (f) {\n /* istanbul ignore else */\n if (!list[f]) {\n list[f] = 0;\n }\n list[f]++;\n }\n }\n // Group similar tokens\n const parts = [];\n for (const f in list) {\n /* istanbul ignore else */\n if (list.hasOwnProperty(f)) {\n parts.push({ word: f, count: list[f], regex: new RegExp(f, 'gi') });\n }\n }\n parts.sort(\n (a, b) => b.word.length - a.word.length || a.word.localeCompare(b.word)\n );\n const item_list = JSON.parse(JSON.stringify(items || []));\n /* istanbul ignore else */\n if (filter) {\n results = item_list.filter((item) => {\n let match_count = 0;\n item.match_index = 65535;\n item.match = '';\n const field_list = {};\n // Initialise field match variables\n for (const f of fields) {\n field_list[f] = {\n value: (item[f] || '').toLowerCase(),\n index: 65536,\n matched: 0,\n };\n }\n // Search for matches with the tokenised filter string\n for (const i of parts) {\n /* istanbul ignore else */\n if (i.word) {\n // Check fields for matches\n for (const f of fields) {\n const field = field_list[f];\n const index = field.value.indexOf(i.word);\n field.index = index < field.index ? index : field.index;\n field.matches = (\n field.value.match(i.regex) || []\n ).length;\n field.value = field.value.replace(i.regex, ' ');\n }\n // Update token match count\n for (const f of fields) {\n const field = field_list[f];\n /* istanbul ignore else */\n if (field.matches >= i.count) {\n match_count++;\n // Update field matches\n let changed = 0;\n const tokens = (\n item[`match_${f}`] ||\n item[f] ||\n ''\n ).split(' ');\n for (const k of tokens) {\n /* istanbul ignore else */\n if (changed >= i.count) {\n break;\n }\n /* istanbul ignore else */\n if (\n k.toLowerCase().indexOf(i.word) >= 0 &&\n k.indexOf('`') < 0\n ) {\n tokens[tokens.indexOf(k)] = k.replace(\n i.regex,\n '`$&`'\n );\n changed++;\n }\n }\n item[`match_${f}`] = tokens.join(' ');\n break;\n }\n }\n }\n }\n // Get field with the most relevent match\n for (const f of fields) {\n const field = field_list[f];\n /* istanbul ignore else */\n if (field.index < item.match_index && field.index >= 0) {\n item.match_index = field.index;\n item.match = f;\n }\n }\n return (\n item.match_index >= 0 &&\n item.match &&\n match_count >= parts.length\n );\n });\n } else {\n results = item_list;\n }\n // Sort by order of relevence then name\n results.sort((a, b) => {\n const diff = a.match_index - b.match_index;\n return diff === 0 ? a.name.localeCompare(b.name) : diff;\n });\n return results;\n}\n\n/**\n * Convert a match string from `filterList` to renderable HTML\n * @param str Match string to change\n */\nexport function matchToHighlight(str: string): string {\n /* istanbul ignore else */\n if (str) {\n str = str.replace(\n /\\`[a-zA-Z0-9\\@\\.\\_]*\\`/g,\n '$&'\n );\n str = str.replace(/\\`/g, '');\n }\n return str;\n}\n\n/**\n * Convert time string to ms from UTC epoch for today\n * @param time Time string in the format `HH:mm`\n */\nexport function timeToDate(time: string): number {\n const parts = time.split(':');\n const date = DateNow(new Date())\n .setValue({\n hour: +parts[0],\n minute: +parts[1],\n })\n .startOfValue('minute');\n return date.ms;\n}\n\n/**\n * Generate a random number\n * @param ceil Biggest value to generate not inclusive\n * @param floor Smallest value to generate. Defaults to 0\n */\nexport function randomInt(ceil: number, floor: number = 0) {\n return Math.floor(Math.random() * (ceil - floor)) + floor;\n}\n\n/**\n * Get time format string for locale\n * @param isLowerCaseAmPm - if true, we use lowercase for am/pm.\n */\nexport function timeFormatString(): string {\n return is24HourTime() ? 'HH:mm' : 'h:mma';\n}\n\nexport const hoursMinutes = (): string => (is24HourTime() ? 'HH:mm' : 'h:mma');\n\nexport function dayJsTimeFormatString(): string {\n return is24HourTime() ? 'HH:mm' : 'h:mma';\n}\n\nexport const dayJsHoursMinutes = (): string =>\n is24HourTime() ? 'HH:mm' : 'h:mm';\n\n/**\n * Converts a timeZone name into a date object.\n * @param timeZoneName - name of timezone\n */\nexport const timezoneNameToDate = (\n timeZoneName: string | undefined\n): DateTZ | undefined => {\n let zone: DateTZ | undefined;\n if (timeZoneName) {\n try {\n zone = DateNow(new Date()).toZone(timeZoneName);\n } catch (e) {\n // invalid timezone. Suppress logs here.\n // console.error(e);\n }\n }\n return zone;\n};\n\nexport const timezoneDisplay = (date: DateTZ) =>\n !!date ? `${date.formatDate('ZZZZ')}` : '';\nexport const gmtOffsetDisplay = (date: DateTZ) =>\n !!date ? `(GMT${date.formatDate('ZZ')})` : '';\n\n/**\n * Returns a full time with timezone.\n * @param date\n */\nexport function timeWithZoneFormatString(date: DateTZ): string {\n return `${date\n .formatDate(timeFormatString())\n .toLocaleLowerCase()} ${timezoneDisplay(date)}`;\n}\n\nexport function timeWithGmtOffsetFormatString(date: DateTZ): string {\n return `${date\n .formatDate(timeFormatString())\n .toLocaleLowerCase()} ${gmtOffsetDisplay(date)}`;\n}\n\n/**\n * Returns a full start end range.\n *\n * Start and end both use lowercase am/pm markers (c.f. timeFormatString).\n * @param startDateTz start time DateTZ object\n * @param endDateTz end time DateTZ object\n */\nexport function startEndTimeFormatString(\n startDateTz: DateTZ,\n endDateTz: DateTZ\n): string {\n return `${startDateTz\n .formatDate(timeFormatString())\n .toLocaleLowerCase()}-${endDateTz\n .formatDate(timeFormatString())\n .toLocaleLowerCase()}`;\n}\n\n/**\n * Returns a full start end range with timezone.\n *\n * Start and end both use lowercase am/pm markers (c.f. timeFormatString).\n * @param startDateTz start time DateTZ object\n * @param endDateTz end time DateTZ object\n */\nexport function startEndTimeWithZoneFormatString(\n startDateTz: DateTZ,\n endDateTz: DateTZ\n): string {\n return `${startDateTz\n .formatDate(timeFormatString())\n .toLocaleLowerCase()}-${endDateTz\n .formatDate(timeFormatString())\n .toLocaleLowerCase()} ${gmtOffsetDisplay(startDateTz)}`;\n}\n\n/**\n * Returns a full date with weekday day month year.\n * @param date\n * @param comma optional boolean to display a comma after the month\n */\nexport function dateLocalFormatString(date: DateTZ, comma?: boolean): string {\n if (comma) {\n return date.formatLocalDate('cccc d MMMM, yyyy');\n }\n return date.formatLocalDate('cccc d MMMM yyyy');\n}\n\nexport function dateBuildingFormatString(\n date: DateTZ,\n comma?: boolean\n): string {\n if (comma) {\n return date.formatDate('cccc d MMMM, yyyy');\n }\n return date.formatDate('cccc d MMMM yyyy');\n}\n\nexport function shorterLocalDateFormatString(\n date: DateTZ,\n comma?: boolean\n): string {\n if (comma) {\n return date.formatLocalDate('ccc d MMM, yyyy');\n }\n return date.formatLocalDate('ccc d MMM yyyy');\n}\n\nexport function shorterBuildingDateFormatString(\n date: DateTZ,\n comma?: boolean\n): string {\n if (comma) {\n return date.formatDate('ccc d MMM, yyyy');\n }\n return date.formatDate('ccc d MMM yyyy');\n}\n\n/** Whether locale string is displayed in 24 hour time */\nexport function is24HourTime(): boolean {\n const date = new Date();\n const localeString = date\n .toLocaleTimeString(\n document.querySelector('html').getAttribute('lang') ||\n navigator.language\n )\n .toLowerCase();\n return localeString.indexOf('am') < 0 && localeString.indexOf('pm') < 0;\n}\n\n/* istanbul ignore next */\n/**\n * Downloads a file to the users computer with the given filename and contents\n * @param filename Name of the file to download\n * @param contents Contents of the file to download\n */\nexport function downloadFile(filename: string, contents: string) {\n const element = document.createElement('a');\n element.setAttribute(\n 'href',\n 'data:text/plain;charset=utf-8,' +\n encodeURIComponent('\\uFEFF' + contents)\n );\n element.setAttribute('download', filename);\n\n element.style.display = 'none';\n document.body.appendChild(element);\n\n element.click();\n\n document.body.removeChild(element);\n}\n\n/**\n * Parse raw CSV data into a JSON object\n * @param csv CSV data to parse\n */\nexport function csvToJson(csv: string) {\n const lines = csv.split('\\n');\n let fields = lines.splice(0, 1)[0].split(',');\n fields = fields.map((v) => v.replace('\\r', ''));\n const list: any[] = [];\n for (const line of lines) {\n let parts = line.split(',');\n parts = parts.map((v) => v.replace('\\r', ''));\n /* istanbul ignore else */\n if (parts.length >= fields.length) {\n const item: any = {};\n for (let i = 0; i <= parts.length; i++) {\n let part = null;\n part = parts[i];\n /* istanbul ignore else */\n if (part !== undefined) {\n item[(fields[i] || '').split(' ').join('_').toLowerCase()] =\n part;\n }\n }\n list.push(item);\n }\n }\n\n return list;\n}\n\n/**\n * Convert javascript array to CSV string\n * @param json Javascript array to convert\n */\nexport function jsonToCsv(json: HashMap[]) {\n /* istanbul ignore else */\n if (json instanceof Array && json.length > 0) {\n const keys = Object.keys(json[0]);\n const valid_keys = keys.filter((key) => json[0].hasOwnProperty(key));\n return `${valid_keys.join(',')}\\n${json\n .map((item) =>\n valid_keys\n .map((key) => {\n return typeof item[key] !== 'boolean'\n ? `\"${item[key] || ''}\"`\n : item[key];\n })\n .join(',')\n )\n .join('\\n')}`;\n }\n return '';\n}\n\n/* istanbul ignore next */\n/**\n * detect IE\n * returns version of IE or false, if browser is not Internet Explorer\n */\nexport function detectIE() {\n var ua = window.navigator.userAgent;\n\n var msie = ua.indexOf('MSIE ');\n if (msie > 0) {\n // IE 10 or older => return version number\n return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\n }\n\n var trident = ua.indexOf('Trident/');\n if (trident > 0) {\n // IE 11 => return version number\n var rv = ua.indexOf('rv:');\n return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\n }\n\n var edge = ua.indexOf('Edge/');\n if (edge > 0) {\n // Edge (IE 12+) => return version number\n return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);\n }\n\n // other browser\n return false;\n}\n\n/**\n * Grab point details from mouse or touch event\n * @param event Event to grab details from\n */\nexport function eventToPoint(event: MouseEvent | TouchEvent): Point {\n if (!event) {\n return { x: -1, y: -1 };\n }\n if (event instanceof MouseEvent) {\n return { x: event.clientX, y: event.clientY };\n } else {\n return event.touches && event.touches.length > 0\n ? { x: event.touches[0].clientX, y: event.touches[0].clientY }\n : { x: -1, y: -1 };\n }\n}\n\n/* istanbul ignore next */\n/**\n * Flatten nested array\n * @param an_array Array to flatten\n */\nexport function flatten(an_array: T[]) {\n const stack = [...an_array];\n const res = [];\n while (stack.length) {\n // pop value from stack\n const next = stack.pop();\n if (Array.isArray(next)) {\n // push back array items, won't modify the original input\n stack.push(...next);\n } else {\n res.push(next);\n }\n }\n // reverse to restore input order\n return res.reverse();\n}\n\nconst seed = xmur3('PlaceOS');\nconst rand = sfc32(0x9e3779b9, 0x243f6a88, 0xb7e15162, seed());\n\nexport function predictableRandomInt(ceil: number = 100, floor: number = 0) {\n return Math.floor(rand() * (ceil - floor)) + floor;\n}\n\n// https://stackoverflow.com/questions/521295/seeding-the-random-number-generator-in-javascript\nfunction xmur3(str) {\n for (var i = 0, h = 1779033703 ^ str.length; i < str.length; i++)\n (h = Math.imul(h ^ str.charCodeAt(i), 3432918353)),\n (h = (h << 13) | (h >>> 19));\n return function () {\n h = Math.imul(h ^ (h >>> 16), 2246822507);\n h = Math.imul(h ^ (h >>> 13), 3266489909);\n return (h ^= h >>> 16) >>> 0;\n };\n}\n\nfunction sfc32(a, b, c, d) {\n return function () {\n a >>>= 0;\n b >>>= 0;\n c >>>= 0;\n d >>>= 0;\n var t = (a + b) | 0;\n a = b ^ (b >>> 9);\n b = (c + (c << 3)) | 0;\n c = (c << 21) | (c >>> 11);\n d = (d + 1) | 0;\n t = (t + d) | 0;\n c = (c + t) | 0;\n return (t >>> 0) / 4294967296;\n };\n}\n\nexport function isLessThanBreakpoint(breakpoint: number): boolean {\n if (window) {\n return window.innerWidth < breakpoint;\n }\n return false;\n}\n\nexport function toTitleCase(str: string): string {\n return typeof str === 'string'\n ? str\n .toLowerCase()\n .split(' ')\n .map(function (word) {\n return word.replace(word[0], word[0].toUpperCase());\n })\n .join(' ')\n : '';\n}\n","\nimport { Directive, OnDestroy } from '@angular/core';\nimport { BaseClass } from './base.class';\nimport { SpaceImageObject } from '@mckinsey-converge/base';\nimport { BehaviorSubject } from 'rxjs';\n\n@Directive({\n selector: 'a-very-basic-component-image-that-should-not-be-used'\n})\nexport class ImageDirective extends BaseClass implements OnDestroy {\n public foundImages?: SpaceImageObject[];\n public loadImages?: BehaviorSubject\n public ngOnDestroy(): void {\n this.destroy();\n }\n}","import {\n Directive,\n ElementRef,\n HostListener\n} from '@angular/core';\n\n@Directive({\n selector: 'input[type=number], input[numbersOnly]'\n})\nexport class NumbersOnlyDirective {\n\n constructor(private _el: ElementRef) {\n }\n\n @HostListener('input', ['$event']) onInputChange(event) {\n const initalValue = this._el.nativeElement.value;\n this._el.nativeElement.value = initalValue.replace(/[^0-9]*/g, '');\n if (initalValue !== this._el.nativeElement.value) {\n event.stopPropagation();\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'replace'\n})\nexport class ReplacePipe implements PipeTransform {\n\n transform(value: string, from: string = '_', to: string = ' '): string {\n return (value|| '').split(from).join(to);\n }\n}\n","export * from './lib/bookings.module';\nexport * from './lib/bookings.actions'\nexport * from './lib/bookings.reducer'\nexport * from './lib/bookings.types'\nexport * from './lib/bookings.utils'\n","\nimport { IBookingQueryOptions, PaginatedBooking } from '@mckinsey-converge/data-common';\nimport { \n createLoadingAction\n} from '../../../loading/src/lib/loading.actions';\n\nimport {\n MyBookingsState,\n MyBookingsStoreState,\n} from './bookings.types';\nimport {\n createAction,\n props\n} from '@ngrx/store';\n\nexport const bookingStateSelector = (state: MyBookingsStoreState) => state.bookings;\n\nexport const loadBookingsWithQuery = createAction('[Bookings] Load Bookings with query', props());\n\nexport const loadHomepageBookingsResults = createLoadingAction('HomepageBookings', 'homepage');\n\nexport const loadUpcomingBookingsResults = createLoadingAction('UpcomingBookings', 'upcoming');\n\nexport const loadPastBookingsResults = createLoadingAction('PastBookings', 'past');\n\nexport const loadCancelledBookingsResults = createLoadingAction('CancelledBookings', 'cancelled');\n\nexport const loadBookingByIdResults = createLoadingAction('BookingById', 'bookingById');\n\nexport const clearBookingByIdResults = createAction('[BookingById] Clear Booking Data');\n","import { Injectable } from '@angular/core';\nimport {\n Actions,\n Effect,\n ofType\n} from '@ngrx/effects';\nimport {\n IBookingQueryOptions,\n BookingsPaginatedService\n} from '../../../data-common/src/lib/bookings';\nimport {\n createLoadingEffect,\n LoadingAction\n} from '@mckinsey-converge/loading';\nimport {\n loadHomepageBookingsResults,\n loadPastBookingsResults,\n loadUpcomingBookingsResults,\n loadCancelledBookingsResults,\n loadBookingsWithQuery,\n loadBookingByIdResults\n} from './bookings.actions';\nimport { mergeMap } from 'rxjs/operators';\nimport {\n\n} from './bookings.utils';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\n\n@Injectable()\nexport class BookingsEffects {\n constructor(private actions: Actions,\n private bookingService: BookingsPaginatedService) {\n }\n\n @Effect()\n public afterBookingsRequestResultsLoadOthersEffect = this.actions.pipe(\n ofType(loadBookingsWithQuery),\n mergeMap((action: LoadingAction) => {\n const date = new DateTZ({date: action.from})\n const yourBookingsRequest = {\n email: action.email,\n pagination: true,\n limit: null,\n offset: action.offset,\n show_cancelled: false,\n sort: 'start_epoch asc',\n filters: {\n end_epoch: `>=${date.subtractValue({ minutes: 5 }).seconds}`,\n },\n include_rooms: true\n };\n const upcomingRequest = {\n email: action.email,\n pagination: true,\n limit: null,\n offset: action.offset,\n show_cancelled: false,\n sort: 'start_epoch asc',\n filters: {\n end_epoch: `>=${date.seconds}`,\n },\n include_rooms: true\n };\n const pastRequest = {\n email: action.email,\n pagination: true,\n limit: null,\n offset: action.offset,\n show_cancelled: false,\n sort: 'start_epoch desc',\n filters: {\n start_epoch: `>${date.subtractValue({ hours: 48 }).seconds}`,\n end_epoch: `<${date.seconds}`,\n },\n include_rooms: true\n };\n const cancelledRequest = {\n email: action.email,\n pagination: true,\n limit: null,\n offset: action.offset,\n show_cancelled: true,\n sort: 'start_epoch desc',\n filters: {\n start_epoch: `>${date.subtractValue({ hours: 48 }).seconds}`,\n },\n include_rooms: true\n };\n const byIdRequest = {\n email: action.email,\n id: action.id,\n pagination: true,\n limit: 1,\n include_rooms: true\n };\n\n const effects = [];\n switch(action.target) {\n case 'upcoming':\n effects.push(loadUpcomingBookingsResults.request(upcomingRequest));\n break;\n case 'past':\n effects.push(loadPastBookingsResults.request(pastRequest));\n break;\n case 'cancelled':\n effects.push(loadCancelledBookingsResults.request(cancelledRequest));\n break;\n case 'bookingById':\n effects.push(loadBookingByIdResults.request(byIdRequest));\n break\n case 'homepage':\n effects.push(loadHomepageBookingsResults.request(yourBookingsRequest));\n // effects.push(loadPastBookingsResults.request(pastRequest));\n break\n default:\n }\n return effects;\n })\n );\n\n @Effect()\n public loadHomepageBookingsResultsEffect = createLoadingEffect(this.actions, loadHomepageBookingsResults,\n (action) => this.bookingService.userBookings(action, `homepage-${action.filters?.start_epoch || ''}${action.filters?.end_epoch || ''}`));\n\n @Effect()\n public loadUpcomingBookingsResultsEffect = createLoadingEffect(this.actions, loadUpcomingBookingsResults,\n (action) => this.bookingService.userBookings(action, `upcoming-${action.filters?.start_epoch || ''}${action.filters?.end_epoch || ''}`));\n \n @Effect()\n public loadPastBookingsResultsEffect = createLoadingEffect(this.actions, loadPastBookingsResults,\n (action) =>\n this.bookingService.userBookings(action, `past-${action.filters?.start_epoch || ''}${action.filters?.end_epoch || ''}`));\n\n @Effect()\n public loadCancelledBookingsResultsEffect = createLoadingEffect(this.actions, loadCancelledBookingsResults,\n (action) =>\n this.bookingService.userBookings(action, `cancelled-${action.filters?.start_epoch || ''}${action.filters?.end_epoch || ''}`));\n\n @Effect()\n public loadBookingByIdResultsEffect = createLoadingEffect(this.actions, loadBookingByIdResults,\n (action) => \n this.bookingService.userBookings(action, `bookingById-${action.id}`));\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\nimport { bookingsReducer } from './bookings.reducer';\nimport { BookingsEffects } from './bookings.effects';\n\n@NgModule({\n imports: [\n CommonModule,\n EffectsModule.forFeature([BookingsEffects]),\n StoreModule.forFeature('bookings', bookingsReducer)\n ]\n})\nexport class BookingsModule {\n}\n","import { LoadingModel } from '@mckinsey-converge/loading';\nimport {\n createReducer,\n on\n} from '@ngrx/store';\nimport {\n loadHomepageBookingsResults,\n loadUpcomingBookingsResults,\n loadPastBookingsResults,\n loadCancelledBookingsResults,\n loadBookingByIdResults,\n clearBookingByIdResults,\n} from './bookings.actions';\nimport { MyBookingsState } from './bookings.types';\n \nimport { \n BookingFormState,\n clearBookingFormData,\n clearRoomFilters,\n openBookingSurvey,\n storeBookingFormData,\n storeRoomFilters\n} from '@mckinsey-converge/data-common';\n\n\nexport const initialBookingsState: MyBookingsState = {\n query: LoadingModel.empty(),\n homepage: LoadingModel.empty(),\n upcoming: LoadingModel.empty(),\n past: LoadingModel.empty(),\n cancelled: LoadingModel.empty(),\n bookingById: LoadingModel.empty(),\n};\n\nexport const bookingsReducer = createReducer(initialBookingsState,\n on(clearBookingByIdResults, (state: MyBookingsState) => ({\n ...state,\n bookingById: LoadingModel.empty(),\n }) as MyBookingsState),\n ...loadHomepageBookingsResults.ons,\n ...loadUpcomingBookingsResults.ons,\n ...loadPastBookingsResults.ons,\n ...loadCancelledBookingsResults.ons,\n ...loadBookingByIdResults.ons,\n );\n\n\n\n export const initialBookingFormState: BookingFormState = {\n activeFormFilters: []\n };\n \n export const bookingFormReducer = createReducer(initialBookingFormState,\n on(storeBookingFormData, (state: BookingFormState, action) => {\n return {\n ...state,\n activeForm: {\n ...state.activeForm,\n ...action.payload\n }\n } as BookingFormState;\n }),\n on(clearBookingFormData, state => ({\n ...state,\n activeForm: undefined\n }) as BookingFormState),\n on(openBookingSurvey, state => ({\n ...state,\n bookingCompleted: new Date()\n }) as BookingFormState),\n on(storeRoomFilters, (state: BookingFormState, action) => {\n return {\n ...state,\n activeFormFilters: action.payload\n } as BookingFormState;\n }),\n on(clearRoomFilters, (state: BookingFormState) => ({\n ...state,\n activeFormFilters: initialBookingFormState.activeFormFilters\n }) as BookingFormState)\n );\n \n","import { Booking } from '@mckinsey-converge/data-common';\nimport { SelectOption } from '@mckinsey-converge/ui';\n\nexport const mapBookingToSelectOption = (booking?: Booking): SelectOption => booking ? ({\n value: booking.id,\n display: booking.name\n}) : undefined;\n","export * from './lib/buildings.module';\nexport * from './lib/buildings.actions'\nexport * from './lib/buildings.types'\nexport * from './lib/buildings.reducer'\n","import { \n createLoadingAction,\n} from '../../../loading/src/lib/loading.actions';\nimport {\n Building,\n BuildingCity,\n} from '../../../data-common/src/lib/organisation/building.class';\nimport {\n BuildingLevel,\n} from '../../../data-common/src/lib/organisation/level.class'\nimport {\n Organisation,\n} from '../../../data-common/src/lib/organisation/organisation.class'\nimport { createSelector } from '@ngrx/store';\nimport {\n BuildingState,\n BuildingStoreState\n} from './buildings.types';\n\nexport const loadBuildings = createLoadingAction('Buildings', 'data');\n\nexport const buildingStateSelector = (state: BuildingStoreState) => state.buildings;\n\nexport const selectLoadBuildingsSuccess = createSelector(buildingStateSelector, loadBuildings.selectors.optionalSuccess);\n\n/**\n * Groups buildings by city\n */\nexport const selectBuildingOptionsGroupedByCity = createSelector(loadBuildings.selectors.optionalSuccess, (success) => {\n if (success) {\n const mapped = new Map();\n success.forEach(s => {\n const found = Array.from(mapped.keys()).find(c => c.name === s.city);\n let list = found ? mapped.get(found) : undefined;\n if (!list) {\n list = [];\n mapped.set({\n name: s.city,\n timezone: s.timezone\n }, list);\n }\n list.push(s);\n });\n return mapped;\n }\n return new Map();\n});\n\nexport const selectLevelByZoneId = createSelector(selectLoadBuildingsSuccess,\n (buildings, param: string) => {\n if (buildings) {\n return buildings.map(b => b.levels.find((l: BuildingLevel) => l.id === param))\n ?.[0] ?? undefined;\n }\n return undefined;\n });\n","import { Injectable } from '@angular/core';\nimport {\n Actions,\n Effect,\n ofType\n} from '@ngrx/effects';\nimport {\n Organisation,\n OrganisationService\n} from '../../../data-common/src/lib/organisation';\nimport { loadBuildings } from './buildings.actions';\nimport {\n createLoadingEffect,\n LoadingAction,\n Payload\n} from '@mckinsey-converge/loading';\nimport { loadOrganisations } from '../../../organisation/src/lib/organisation.actions';\nimport { map } from 'rxjs/operators';\n\n\n@Injectable()\nexport class BuildingsEffects {\n\n constructor(private actions: Actions,\n private organizationService: OrganisationService) {\n\n }\n\n @Effect()\n public loadBuildings = createLoadingEffect(this.actions, loadBuildings,\n (action) => this.organizationService.loadBuildingsWithOrg(action));\n\n @Effect()\n public loadBuildingsAfterOrg = this.actions.pipe(\n ofType(loadOrganisations.success),\n map((action: LoadingAction>) => loadBuildings.request(action.payload)));\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EffectsModule } from '@ngrx/effects';\nimport { BuildingsEffects } from './buildings.effects';\nimport { StoreModule } from '@ngrx/store';\nimport { buildingsReducer } from './buildings.reducer';\n\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule,\n EffectsModule.forFeature([\n BuildingsEffects\n ]),\n StoreModule.forFeature('buildings', buildingsReducer)\n ]\n})\nexport class BuildingsModule {\n}\n","import { createReducer } from '@ngrx/store';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { loadBuildings } from './buildings.actions';\nimport { BuildingState } from './buildings.types';\n\nexport const initialBuildingState: BuildingState = {\n data: LoadingModel.empty()\n};\n\nexport const buildingsReducer = createReducer(initialBuildingState,\n ...loadBuildings.ons\n);\n","export * from './lib/data-common.module';\nexport * from './lib/booking';\nexport * from './lib/bookings';\nexport * from './lib/catering';\nexport * from './lib/location';\nexport * from './lib/organisation';\nexport * from './lib/spaces';\nexport * from './lib/users';\nexport * from './lib/app.service';\nexport * from './lib/hotkeys.service';\nexport * from './lib/base.service';\nexport * from './lib/base-api.class';\nexport * from './lib/reports'\nexport * from './lib/service-manager.class';\nexport * from './lib/settings.service';\nexport * from './lib/spec-helpers';\nexport * from './lib/settings.interfaces';\nexport * from './lib/validation.utilities';\nexport * from './lib/status.interfaces';\nexport * from './lib/recurrence/recurrence.utils';\nexport * from './lib/close-modal-dialog-service';\nexport * from './lib/validation.utilities';\nexport * from './lib/collapse-accordion-service';","import { HashMap } from '@mckinsey-converge/base';\n\n/**\n * Convert map into a query string\n * @param map Key value pairs to convert\n */\nexport function toQueryString(map: HashMap) {\n let str = '';\n if (map) {\n for (const key in map) {\n if (map.hasOwnProperty(key) && map[key] !== undefined && map[key] !== null) {\n str += `${(str ? '&' : '')}${key}=${map[key]}`;\n }\n }\n }\n return str;\n}\n","import {\n ApplicationRef,\n Injectable,\n NgZone,\n} from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { take, first } from 'rxjs/operators';\n\nimport { ComposerService } from '@placeos/composer';\nimport { PlaceOSOptions } from '@placeos/ts-client';\nimport { HeapIoService } from '@acaprojects/ngx-heap-io';\n\nimport {\n BehaviorSubject,\n Observable,\n Subject\n} from 'rxjs';\n\nimport {\n ApplicationLoadingState,\n BaseClass,\n ConsoleStream,\n log\n} from '@mckinsey-converge/base';\nimport { SettingsService } from './settings.service';\n\nimport { HotkeysService } from './hotkeys.service';\nimport {\n ApplicationIcon,\n ComposerSettings\n} from './settings.interfaces';\nimport { EnvironmentService } from '../../../environment/src/lib/environment.service'; // '@mckinsey-converge/environment';\nimport {\n Store\n} from '@ngrx/store';\nimport { selectCurrentUser } from '../../../user/src/lib/user.actions';\nimport { UserStoreState } from '../../../user/src/lib/user.types';\nimport { Booking } from './bookings';\nimport { filter } from 'rxjs/operators';\nimport { SnackBarService } from '../../../ui/src/lib/custom-snackbar-component/custom-snackbar-component.service';\n\ndeclare global {\n interface Window {\n application: ApplicationService;\n mock: {\n enabled: boolean;\n backend: any;\n };\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApplicationService extends BaseClass {\n /** Map of state variables for Service */\n protected _subjects: {\n [key: string]: BehaviorSubject | Subject;\n } = {};\n /** Map of observables for state variables */\n protected _observers: { [key: string]: Observable } = {};\n _kioskFormFilter: boolean;\n\n constructor(\n public store: Store,\n public analytics: HeapIoService,\n private _app_ref: ApplicationRef,\n private _zone: NgZone,\n private _title: Title,\n private _settings: SettingsService,\n private _hotkeys: HotkeysService,\n private _composer: ComposerService,\n private _snackbar: MatSnackBar,\n private _environment: EnvironmentService,\n private snack: SnackBarService\n\n ) {\n super();\n this.set('system', null);\n this.set('title', 'Home');\n this.set('loading', {});\n this.set('CONCIERGE.day_view.viewing', null);\n this.set('undo', new BehaviorSubject<{\n action: 'series' | 'booking',\n booking: Booking\n } | null>(null));\n\n this.set('APP.breakdown', false);\n\n this._app_ref.isStable.pipe(first(_ => _)).subscribe(() => {\n this._zone.run(() => {\n this.log('APP', `Application has stablised.`);\n this.waitForSettings();\n });\n });\n }\n\n public set kioskFormFilter(isIt: boolean) {\n this._kioskFormFilter = isIt;\n }\n\n public get kioskFormFilter():boolean {\n return this._kioskFormFilter \n }\n\n /** Analytics service */\n public get Analytics() {\n return {};\n }\n\n /** Hotkeys service */\n public get Hotkeys() {\n return this._hotkeys;\n }\n\n /**\n * Get a setting from the settings service\n * @param key Name of the setting. i.e. nested items can be grabbed using `.` to seperate key names\n */\n public setting(key: string): any {\n return this._settings.get(key);\n }\n\n /**\n * Title of the page\n */\n public set title(value: string) {\n const title_suffix = this.setting('app.title');\n this.set('title', value);\n this._title.setTitle(`${value ? value + ' | ' : ''}${title_suffix}`);\n }\n\n /**\n * Title of the page\n */\n public get title(): string {\n return this._title.getTitle();\n }\n\n /** Root API Endpoint */\n public get endpoint() {\n return `/api/staff/`;\n }\n\n /** Root API Endpoint for engine */\n public get engine_endpoint() {\n return this._composer.auth.api_endpoint + '/';\n }\n\n /** Whether settings has been loaded */\n public get has_settings(): boolean {\n return this._settings.is_initialised;\n }\n\n /**\n * Create notification popup\n * @param type CSS Class to add to the notification\n * @param message Message to display on the notificaiton\n * @param action Display text for the callback action\n * @param on_action Callback of action on the notification\n * @param icon Icon to render to the left of the notification message\n */\n public notify(\n type: string,\n message: string,\n action: string = 'OK',\n on_action?: () => void,\n icon: ApplicationIcon = {\n type: 'icon',\n class: 'material-icons',\n content: 'info'\n }\n ): void {\n this.openSnack(message, type);\n // const snackbar_ref = this._snackbar.open(message, action, {\n // panelClass: [type],\n // duration: 5000\n // });\n // this.subscription(\n // 'snackbar_close',\n // snackbar_ref.afterDismissed().subscribe(() => {\n // this.unsub('snackbar_close');\n // this.unsub('notify');\n // })\n // );\n // if (action) {\n // on_action = on_action || (() => snackbar_ref.dismiss());\n // this.subscription(\n // 'notify',\n // snackbar_ref.onAction().subscribe(() => on_action())\n // );\n // }\n }\n\n public openSnack(message, type) {\n this.snack.openSnackBar(message, type, 5000);\n }\n \n /**\n * Create success notification popup\n * @param msg Message to display on the notificaiton\n * @param action Display text for the callback action\n * @param on_action Callback of action on the notification\n */\n public notifySuccess(msg: string, action?: string, on_action?: () => void): void {\n const icon: ApplicationIcon = {\n type: 'icon',\n class: 'material-icons',\n content: 'done'\n };\n this.notify('success', msg, action, on_action, icon);\n }\n\n /**\n * Create error notification popup\n * @param msg Message to display on the notificaiton\n * @param action Display text for the callback action\n * @param on_action Callback of action on the notification\n */\n public notifyError(msg: string, action?: string, on_action?: () => void): void {\n const icon: ApplicationIcon = {\n type: 'icon',\n class: 'material-icons',\n content: 'error'\n };\n this.notify('error', msg, action, on_action, icon);\n }\n\n /**\n * Create warning notification popup\n * @param msg Message to display on the notificaiton\n * @param action Display text for the callback action\n * @param on_action Callback of action on the notification\n */\n public notifyWarn(msg: string, action?: string, on_action?: () => void): void {\n const icon: ApplicationIcon = {\n type: 'icon',\n class: 'material-icons',\n content: 'warning'\n };\n this.notify('warn', msg, action, on_action, icon);\n }\n\n /**\n * Create info notification popup\n * @param msg Message to display on the notificaiton\n * @param action Display text for the callback action\n * @param on_action Callback of action on the notification\n */\n public notifyInfo(msg: string, action?: string, on_action?: () => void): void {\n this.notify('info', msg, action, on_action);\n }\n\n /**\n * Log data to the browser console\n * @param type Type of message\n * @param msg Message body\n * @param args array of argments to log to the console\n * @param stream Stream to emit the console on. 'debug', 'log', 'warn' or 'error'\n * @param force Whether to force message to be emitted when debug is disabled\n */\n public log(\n type: string,\n msg: string,\n args?: any,\n stream: ConsoleStream = 'debug',\n force: boolean = false\n ): void {\n log(type, msg, args, stream, force);\n }\n\n /**\n * Get the current value of the named property\n * @param name Property name\n */\n public get(name: string): U {\n return this._subjects[name] && this._subjects[name] instanceof BehaviorSubject\n ? (this._subjects[name] as BehaviorSubject).getValue()\n : null;\n }\n\n /**\n * Listen to value change of the named property\n * @param name Property name\n * @param next Callback for value changes\n */\n public listen(name: string): Observable {\n if (!this._observers[name]) {\n this.set(name, null);\n }\n return this._observers[name];\n }\n\n /**\n * Update the value of the named property\n * @param name Property name\n * @param value New value\n */\n public set(name: string, value: U): void {\n if (!this._subjects[name]) {\n this._subjects[name] = new BehaviorSubject(value);\n this._observers[name] = this._subjects[name].asObservable();\n } else {\n this._subjects[name].next(value);\n }\n }\n\n /** Wait for settings to be initialised before setting up the application */\n private waitForSettings() {\n // Wait until the settings have loaded before initialising\n this._settings.initialised.pipe(first(_ => _)).subscribe(() => this.init());\n }\n\n /**\n * Initialise application services\n */\n private init(): void {\n this.setupComposer();\n this.subscription('currentUser', this.store.select(selectCurrentUser)\n .pipe( filter(user => user !== undefined) )\n .pipe(take(1))\n .subscribe((user: any) => {\n // Once we know we have the user loaded.\n this.setupAnalytics(user?.fmno);\n })\n );\n this._composer.initialised.pipe(first(_ => _)).subscribe(() => {\n this._initialised.next(true);\n });\n // Add service to window if in debug mode\n if (window.debug) {\n window.application = this;\n }\n }\n\n /**\n * Initialise the composer library comms\n */\n private setupComposer(): void {\n this.log('SYSTEM', 'Setup up composer...');\n const loading: ApplicationLoadingState = this.get('loading');\n loading.composer = {\n message: 'Initialising service connection',\n state: 'loading'\n };\n this.set('loading', loading);\n // Get application settings\n const settings: ComposerSettings = this._settings.get('composer') || {};\n const protocol = settings.protocol || location.protocol;\n const host = settings.domain || location.hostname;\n const port = settings.port || location.port;\n const url = settings.use_domain ? `${protocol}//${host}:${port}` : location.origin;\n const route = host.includes('localhost') && port === '4200' ? '' : settings.route || '';\n const mock =\n this._settings.get('mock') ||\n location.href.includes('mock=true') ||\n localStorage.getItem('mock') === 'true';\n // Generate configuration object\n const config: PlaceOSOptions = {\n scope: 'public',\n host: `${host}:${port}`,\n auth_uri: `${url}/auth/oauth/authorize`,\n token_uri: `${url}/auth/token`,\n redirect_uri: `${location.origin}${route}/oauth-resp.html`,\n handle_login: !settings.local_login,\n mock\n };\n this._composer.setup(config);\n loading.composer = {\n message: 'Initialising service connection',\n state: 'complete'\n };\n this.set('loading', loading);\n }\n\n private setupAnalytics(fmno: string) {\n this.log('HEAP', `Loading heap ${this._environment?.heap_io_id}`);\n // Default Heap app ID via the default setting\n const heapIo = this._settings.get('app.heap_io');\n if (this._environment?.heap_io_id) {\n // Apply Heap app ID via the environmental setting\n heapIo.app_id = this._environment.heap_io_id;\n }\n if (heapIo) {\n this.analytics.load(heapIo);\n if (fmno) {\n this.analytics.identify(fmno);\n }\n } else {\n this.log('HEAP', `Heap could not be found for the current frontend ${this._settings.frontend}`);\n }\n }\n\n}\n","import { Subject } from 'rxjs';\n\nimport {\n BaseClass,\n HashMap\n} from '@mckinsey-converge/base';\nimport {\n ServiceLike,\n ServiceManager\n} from './service-manager.class';\n\nexport type ApiEventType = 'value_change' | 'item_saved' | 'reset' | 'other';\n\nexport interface ApiEvent {\n type: ApiEventType;\n metadata: T;\n}\n\n\nexport class BaseDataClass extends BaseClass {\n /** Subject for emitting events on the object */\n protected readonly event_subject = new Subject();\n /** Observable for events on this object */\n public readonly events = this.event_subject.asObservable();\n /** Unique Identifier of the object */\n public readonly id: string;\n /** Human readable name of the object */\n public readonly name: string;\n /** Email address associated with the object */\n public readonly email: string;\n /** Map of local property names to server ones */\n protected _server_names: HashMap = {};\n\n /** Service for managing model on the server */\n protected get _service(): ServiceLike {\n return ServiceManager.serviceFor(BaseDataClass);\n }\n\n constructor(raw_data: HashMap) {\n super();\n this.id = raw_data.id || raw_data.zone_id || raw_data.email || '';\n this.name = raw_data.name || '';\n this.email = `${raw_data.email || ''}`.toLowerCase();\n }\n\n /**\n * Save pending changes to server\n */\n public save(): Promise {\n if (this._service) {\n const form = this.toJSON();\n return new Promise((resolve, reject) => {\n const promise = this.id\n ? this._service.update(this.id, form)\n : this._service.add(form);\n promise.then(\n (d) => {\n this.event_subject.next({ type: 'item_saved', metadata: d });\n resolve(d);\n },\n (_) => reject(_)\n );\n });\n } else {\n Promise.reject('No service to process request');\n }\n }\n\n /**\n * Delete this item from the server\n */\n public delete(): Promise {\n if (this.id) {\n return this._service.delete(this.id);\n }\n }\n\n /**\n * Run task for this item on the service\n * @param task_name Name of the task\n * @param parameters Parameters to pass to the task request\n */\n public runTask(task_name: string, parameters: HashMap): Promise {\n if (this.id) {\n return this._service.task(this.id, task_name, parameters);\n }\n }\n\n /**\n * Convert object into plain object\n */\n public toJSON(this: BaseDataClass): HashMap {\n const obj: any = { ...this };\n // Remove local private members\n delete obj._service;\n delete obj._changes;\n delete obj.event_subject;\n delete obj.events;\n // Remove parent private members\n delete obj._timers;\n delete obj._intervals;\n delete obj._subscriptions;\n delete obj._server_names;\n delete obj._initialised;\n // Convert remaining members to be public\n const keys = Object.keys(obj);\n for (const key of keys) {\n if (key[0] === '_') {\n const new_key = this._server_names[key.substring(1)] || key.substring(1);\n obj[new_key] = obj[key];\n delete obj[key];\n } else if (obj[key] === undefined) {\n delete obj[key];\n }\n }\n return obj;\n }\n\n /**\n * Make a copy of this object\n */\n public clone(): BaseDataClass {\n return new BaseDataClass(this);\n }\n\n /**\n * Make a copy of this object without identification data\n */\n public duplicate(): BaseDataClass {\n return new BaseDataClass({ ...this, id: null, email: null });\n }\n}\n","import { ComposerService } from '@placeos/composer';\nimport { BehaviorSubject, Observable, of, Subject, Subscriber } from 'rxjs';\n\nimport { BaseDataClass } from './base-api.class';\nimport { BaseClass, HashMap } from '@mckinsey-converge/base';\nimport { ApplicationService } from './app.service';\nimport { toQueryString } from './api.utilities';\nimport { SettingsService } from './settings.service';\nimport { catchError, map } from 'rxjs/operators';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\n\nexport interface IEngineResponse {\n results: HashMap[];\n total: number;\n}\n\nexport class BaseAPIService extends BaseClass {\n /** Application service */\n public parent: ApplicationService;\n /** Display name of the service */\n protected _name: string;\n /** API Route of the service */\n protected _api_route: string;\n /** Map of state variables for Service */\n protected _subjects: { [key: string]: BehaviorSubject | Subject } = {};\n /** Map of observables for state variables */\n protected _observers: { [key: string]: Observable } = {};\n /** Map of poll subscribers for API endpoints */\n protected _subscribers: { [key: string]: Subscriber } = {};\n /** Map of promises for Service */\n protected _promises: { [key: string]: Promise } = {};\n /** Comparison function for service items */\n protected _compare: (a: T, b: T) => boolean = (a, b) =>\n a === b || (a as any).id === (b as any).id;\n /** Default filter function for list method */\n protected _list_filter: (a: T) => boolean = (a) => !!a;\n\n /** Http Client */\n protected get http() {\n return this._composer.http;\n }\n constructor(protected _composer: ComposerService,\n protected settingsService: SettingsService) {\n super();\n this._name = 'Base';\n this._api_route = 'base';\n this.set('list', []);\n }\n\n /**\n * Injects concierge into form_data.\n */\n private injectConcierge(form_data: HashMap) {\n // we only send it over when concierge, since the BE may check for presence rather than\n // if its true or not.\n if (this.settingsService.concierge) {\n return { ...form_data, concierge: true }\n }\n return form_data;\n }\n\n /**\n * Initailise service\n */\n public init() {\n this.load().then(\n (_) => this._initialised.next(true),\n (err) => this.timeout('init', () => this.init(), 1000)\n );\n }\n\n /**\n * Get API route for the service\n * @param engine Whether endpoint is using the application API or engine API\n */\n public route(engine: boolean = false) {\n const endpoint = engine\n ? this._composer.auth.api_endpoint\n : '/api/staff';\n return `${endpoint}/${this._api_route}`;\n }\n\n /** API Route of the service */\n public get api_route() {\n return this._api_route;\n }\n\n /**\n * Get the current value of the named property\n * @param name Property name\n */\n public get(name: string): U {\n if (!this._observers[name]) {\n this.set(name, null);\n }\n return (this._subjects[name] as BehaviorSubject).getValue();\n }\n\n /**\n * Listen to value change of the named property\n * @param name Property name\n * @param next Callback for value changes\n */\n public listen(name: string): Observable {\n if (!this._observers[name]) {\n this.set(name, null);\n }\n return this._observers[name];\n }\n\n /**\n * Update the value of the named property\n * @param name Property name\n * @param value New value\n */\n protected set(name: string, value: U): void {\n if (!this._subjects[name]) {\n this._subjects[name] = new BehaviorSubject(value);\n this._observers[name] = this._subjects[name].asObservable();\n } else {\n this._subjects[name].next(value);\n }\n }\n\n /**\n * Get list of loaded items\n * @param predicate Function for filtering the list\n */\n public filter(predicate: (a: T) => boolean = this._list_filter): T[] {\n const list: T[] = this.get('list');\n return list.filter(predicate);\n }\n\n /**\n * Get item with the given id from the loaded items\n * @param id ID of the item\n */\n public find(id: string): T {\n const list = this.get('list');\n return list.find((i) => i.id === id || (i.email?.toLowerCase() === id?.toLowerCase()));\n }\n\n /**\n * Query the index of the API route associated with this service\n * @param query_params Map of query paramaters to add to the request URL\n */\n public query(query_params: HashMap = {}): Promise {\n let engine = false;\n let cache = 1000;\n /* istanbul ignore else */\n if (query_params) {\n engine = !!query_params.engine;\n delete query_params.engine;\n cache = typeof query_params.cache !== 'boolean' ? query_params.cache || 1000 : 1000;\n typeof query_params.cache !== 'boolean' && delete query_params.cache;\n }\n let query = toQueryString(query_params);\n const key = `query|${query}`;\n if (!this._promises[key]) {\n // Bring back once implemented in the API\n // if (this.settingsService.concierge) {\n // query = query + '&check_access=true';\n // }\n this._promises[key] = new Promise((resolve, reject) => {\n const url = `${this.route(engine)}${query ? '?' + query : ''}`;\n let result: T[] | HashMap[] = [];\n this.http.get(url).subscribe(\n (d: IEngineResponse | HashMap[]) => {\n result =\n d && d instanceof Array\n ? d.map((i) => this.process(i))\n : d && !(d instanceof Array) && d.results\n ? (d.results as HashMap[])\n : d && !(d instanceof Array) && !d.results \n ? [d]\n : [];\n },\n (e) => {\n reject(e);\n this._promises[key] = null;\n },\n () => {\n resolve(result);\n this.timeout(key, () => (this._promises[key] = null), cache);\n }\n );\n });\n }\n return this._promises[key];\n }\n\n /**\n * query function version -2 - returns observable instead of promise...\n * Query the index of the API route associated with this service\n * @param query_params Map of query paramaters to add to the request URL\n */\n public queryObsr(query_params: HashMap = {}):Observable{\n let engine = false;\n let cache = 1000;\n /* istanbul ignore else */\n if (query_params) {\n engine = !!query_params.engine;\n delete query_params.engine;\n }\n let query = toQueryString(query_params);\n const key = `query|${query}`;\n const url = `${this.route(engine)}${query ? '?' + query : ''}`;\n return this.http.get(url).pipe(\n map((d: IEngineResponse | HashMap[]) => this.processApiResult(d) ),\n catchError((error: any, result?: T) => {\n console.log(error);\n return of(result as T);\n })\n );;\n }\n\n\n /**\n * \n * @param d \n * @returns \n */\n processApiResult(d: IEngineResponse | HashMap[]): IEngineResponse | HashMap[]{\n let result: IEngineResponse | HashMap[] =\n d && d instanceof Array\n ? d.map((i) => this.process(i))\n : d && !(d instanceof Array) && d.results\n ? (d.results as HashMap[])\n : d && !(d instanceof Array) && !d.results \n ? [d]\n : [];\n return result;\n }\n\n /**\n * query function version -2 - returns observable instead of promise...\n * Query the index of the API route associated with this service\n * @param query_params Map of query paramaters to add to the request URL\n */\n public queryRoomsForQR(query_params: HashMap = {}):Observable{\n let engine = false;\n let cache = 1000;\n /* istanbul ignore else */\n if (query_params) {\n engine = !!query_params.engine;\n delete query_params.engine;\n }\n let query = toQueryString(query_params);\n const key = `query|${query}`;\n const url = `${this.route(engine)}${query ? '?' + query : ''}`;\n return this.http.get(url);\n }\n \n /**\n * Query the API route for a sepecific item\n * @param id ID of the item\n * @param query_params Map of query paramaters to add to the request URL\n */\n public show(id: string, query_params: HashMap = {}): Promise {\n let engine = false;\n /* istanbul ignore else */\n if (query_params) {\n engine = !!query_params.engine;\n delete query_params.engine;\n }\n const query = toQueryString(query_params);\n const key = `show|${id}|${query}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const url = `${this.route(engine)}/${id}${query ? '?' + query : ''}`;\n let result: T = null;\n this.http.get(url).subscribe(\n (d) => (result = this.process(d)),\n (e) => {\n reject(e);\n this._promises.new_item = null;\n },\n () => {\n resolve(result);\n this.timeout(key, () => (this._promises[key] = null), 1000);\n }\n );\n });\n }\n return this._promises[key];\n }\n\n /**\n * Make post request for a new item to the service\n * @param form_data Data to post to the server\n * @param query_params Map of query paramaters to add to the request URL\n */\n public add(form_data: HashMap, query_params: HashMap = {}): Promise {\n /* istanbul ignore else */\n if (!this._promises.new_item) {\n this._promises.new_item = new Promise((resolve, reject) => {\n const query = toQueryString(query_params);\n const url = `${this.route(query_params.engine)}${query ? '?' + query : ''}`;\n let result: T = null;\n this.http.post(url, this.injectConcierge(form_data)).subscribe(\n (d) => (result = this.process(d)),\n (e) => {\n reject(e);\n this.analyticsEvent(`create-${this._name.toLowerCase()}-failed`);\n this._promises.new_item = null;\n },\n () => {\n resolve(result);\n this.set('list', this.updateList(this.get('list'), [result]));\n this.analyticsEvent(`create-${this._name.toLowerCase()}-success`);\n this._promises.new_item = null;\n }\n );\n });\n }\n return this._promises.new_item;\n }\n\n /**\n * Perform API task for the given item ID\n * @param id ID of the item\n * @param task_name Name of the task\n * @param form_data Map of data to pass to the API\n * @param method Verb to use for request\n */\n public \n task(\n id: string,\n task_name: string,\n form_data: HashMap = {},\n method: 'post' | 'get' = 'post'\n ): Promise {\n const query = toQueryString(this.injectConcierge(form_data));\n const key = `task|${id}|${task_name}|${query}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const post_data = { ...form_data, id, _task: task_name };\n const url = `${this.route(false)}/${id}/${task_name}`;\n let result: any;\n const request =\n method === 'post'\n ? this.http.post(url, post_data)\n : this.http.get(`${url}${query ? '?' + query : ''}`);\n request.subscribe(\n (d) => (result = d),\n (e) => {\n reject(e);\n this.analyticsEvent(\n `${this._name.toLowerCase()}-task-${task_name}-failed`,\n id\n );\n delete this._promises[key];\n },\n () => {\n resolve(result as U);\n this.analyticsEvent(\n `${this._name.toLowerCase()}-task-${task_name}-success`,\n id\n );\n this.timeout(key, () => delete this._promises[key], 1000);\n }\n );\n });\n }\n return this._promises[key];\n }\n\n\n /**\n * V-2\n * Perform API task for the given item ID\n * @param id ID of the item\n * @param task_name Name of the task\n * @param form_data Map of data to pass to the API\n * @param method Verb to use for request\n */\n public taskObsr( \n id: string, \n task_name: string, \n form_data: HashMap = {}, \n method: 'post' | 'get' = 'post' ):Observable{\n const query = toQueryString(this.injectConcierge(form_data));\n let engine = false;\n let cache = 1000;\n const post_data = { ...form_data, id, _task: task_name };\n const url = `${this.route(false)}/${id}/${task_name}`;\n let result: any;\n\n const request = method === 'post'\n ? this.http.post(url, post_data)\n : this.http.get(`${url}${query ? '?' + query : ''}`);\n \n return request;\n }\n\n\n /**\n * Make put request for changes to the item with the given id\n * @param id ID of the item being updated\n * @param form_data New values for the item\n * @param query_params Map of query paramaters to add to the request URL\n */\n public update(id: string, form_data: HashMap, query_params: HashMap = {}): Promise {\n const key = `update|${id}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const query = toQueryString(this.injectConcierge(query_params));\n const url = `${this.route(query_params.engine)}/${id}${query ? '?' + query : ''}`;\n let result: T = null;\n this.http.put(url, this.injectConcierge(form_data)).subscribe(\n (d) => (result = this.process(d)),\n (e) => {\n reject(e);\n this.analyticsEvent(`update-${this._name.toLowerCase()}-failed`, id);\n this._promises[key] = null;\n },\n () => {\n resolve(result);\n this.set(\n 'list',\n this.updateList(this.removeItem(this.get('list'), { id } as any), [\n result\n ])\n );\n this.analyticsEvent(`update-${this._name.toLowerCase()}-success`, id);\n this._promises[key] = null;\n }\n );\n });\n }\n return this._promises[key];\n }\n\n\n /**\n * update function version -2 - returns observable instead of promise...\n * @param id url id with respect to update api\n * @param form_data data to be update \n * @param should_inject_concierge common value to be set to add concierge: true to the query url and body\n * @param query_params Map of query paramaters to add to the request URL\n */\n public updateObsr(id: string, form_data: HashMap, should_inject_concierge: Boolean = false, query_params: HashMap = {}):Observable{\n const query = should_inject_concierge ? toQueryString(this.injectConcierge(query_params)) : false;\n const url = `${this.route(query_params.engine)}/${id}${query ? '?' + query : ''}`;\n const body = should_inject_concierge ? this.injectConcierge(form_data) : form_data;\n \n return this.http.put(url, body)\n .pipe(\n map((d: IEngineResponse | HashMap[]) => this.processApiResult(d) \n ),\n catchError((error: any, result?: T) => {\n console.log(error);\n this.analyticsEvent(`update-${this._name.toLowerCase()}-failed`, id);\n return of(error as T);\n })\n );\n\n }\n\n /**\n * update function version -2 - returns observable instead of promise...\n * @param form_data data to be update \n * @param should_inject_concierge common value to be set to add concierge: true to the query url and body\n * @param query_params Map of query paramaters to add to the request URL\n */\n public uploadSpacePhotos(apiSubRoute: string, form_data: HashMap, should_inject_concierge: Boolean = false, query_params: HashMap = {}):Observable{\n const query = should_inject_concierge ? toQueryString(this.injectConcierge(query_params)) : false;\n const url = `${this.route(query_params.engine)}/${apiSubRoute}${query ? '?' + query : ''}`;\n const body = should_inject_concierge ? this.injectConcierge(form_data) : form_data;\n\n const token = sessionStorage.length ? JSON.parse(sessionStorage.getItem('OAUTH.params')).access_token : '';\n\n const headers = new HttpHeaders({\n 'Authorization': `Bearer ${token}`,\n });\n \n const requestOptions = { headers: headers };\n\n // return this.httpClient.post(url, body, {\n // ...requestOptions \n // });\n\n return this.http.post(url, body);\n\n }\n\n /**\n * Make delete request for the given item\n * @param id ID of item\n */\n public delete(id: string, q: HashMap = {}): Promise {\n const key = `delete|${id}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const query = toQueryString(q);\n const url = `${this.route()}/${id}${query ? '?' + query : ''}`;\n this.http.delete(url).subscribe(\n (_) => null,\n (e) => {\n reject(e);\n this._promises[key] = null;\n },\n () => {\n this.set('list', this.removeItem(this.get('list'), { id } as any));\n this._promises[key] = null;\n resolve();\n }\n );\n });\n }\n return this._promises[key];\n }\n\n /**\n * Load initial data for the service\n */\n protected async load(): Promise {\n }\n\n /**\n * Post analytics event for this service\n * @param action Name of the action to post\n */\n protected analyticsEvent(action: string, label?: string) {\n // if (this.parent && this.parent.Analytics) {\n // this.parent.Analytics.track(this._name, { desc: `${this.parent.name.toLowerCase()}-${action}`, label });\n // }\n }\n\n /**\n * Convert raw API data into a valid API Object\n * @param raw_item Raw API data\n */\n protected process(raw_item: HashMap): T {\n return raw_item as T;\n }\n\n /**\n * Update recorded list of items\n * @param old_list Old list of items\n * @param list List of updated items\n * @param compareFn Function to compare items to remove duplicates\n */\n public updateList(\n old_list: T[],\n list: T[],\n compareFn: (a: T, b: T) => boolean = this._compare\n ): T[] {\n /* istanbul ignore else */\n if (!list || list.length === 0) {\n return old_list;\n }\n const new_list: T[] = [];\n const mixed_list = [...list, ...old_list];\n /* istanbul ignore else */\n if (!compareFn) {\n compareFn = this._compare;\n }\n for (const item of mixed_list) {\n const found = new_list.find((i) => compareFn(i, item));\n /* istanbul ignore else */\n if (!found) {\n new_list.push(item);\n }\n }\n return new_list;\n }\n\n /**\n * Remove the given item from the given list\n * @param list List of items\n * @param item Item to remove\n * @param compareFn Function to compare items\n */\n protected removeItem(list: T[], item: T, compareFn?: (a: T, b: T) => boolean) {\n const new_list = [];\n /* istanbul ignore else */\n if (!compareFn) {\n compareFn = this._compare;\n }\n list.forEach((i) => (compareFn(item, i) ? null : new_list.push(i)));\n return new_list;\n }\n}\n","import { SelectOption } from '../../../../ui/src/lib/options/select-option';\nimport { Building } from '../organisation/building.class';\nimport { Booking } from '../bookings/booking.class';\nimport { User } from '../users';\nimport { Space } from '../spaces';\nimport { SpaceBookingRuleOptions } from '../spaces/space.class';\nimport {\n BookingFormData,\n} from './booking.form.data';\nimport { statusFromBookings } from '../bookings/booking.utilities';\nimport { rulesForSpace } from '../bookings/space.utilities';\nimport { SpaceStatus } from '../bookings/space.types';\nimport { SpaceFeatures } from '../spaces/space.class';\nimport { HashMap } from 'libs/base/src/lib/types.utilities';\n\nexport const spaceExtraFeatureToDisplayName = (feature: SpaceFeatures) => {\n switch (feature) {\n case SpaceFeatures.VideoConference:\n return 'Video conference (VC)';\n case SpaceFeatures.ConferencePhone:\n return 'Conference phone';\n case SpaceFeatures.WirelessContentSharing:\n return 'Wireless content sharing';\n case SpaceFeatures.FlipChart:\n return 'Flip chart';\n case SpaceFeatures.Glassboard:\n return 'Glassboard';\n case SpaceFeatures.ElectronicWhiteboard:\n return 'Whiteboard';\n case SpaceFeatures.ConferenceRoom:\n return 'Conference';\n case SpaceFeatures.TeamRoom:\n return 'Team';\n case SpaceFeatures.PartnerOffice:\n return 'Partner';\n case SpaceFeatures.PhoneBooth:\n return 'Phone booth';\n case SpaceFeatures.NaturalLight:\n return 'Room with window only (natural light)';\n case SpaceFeatures.BoardRoom:\n return 'Boardroom room style';\n case SpaceFeatures.CocktailRoom:\n return 'Cocktail room style';\n case SpaceFeatures.TheatreRoom:\n return 'Theatre room style';\n case SpaceFeatures.WorkshopRoom:\n return 'Workshop room style';\n case SpaceFeatures.UShapeRoom:\n return 'U Shape room style';\n case SpaceFeatures.Miscellaneous:\n return 'Miscellaneous room style'\n case SpaceFeatures.Catering:\n return 'Rooms with catering';\n // TODO: add any special display handling here.\n default:\n return feature;\n }\n};\n\n\nexport const instantBookOption: SelectOption = {\n value: 'instant-book',\n display: 'Listing you can book without waiting for a host approval',\n shortDisplay: 'Instant book'\n};\nexport const instantBookOptions: SelectOption[] = [\n instantBookOption\n];\n\nexport const mapSpaceFeaturesToSelectOption = (f: SpaceFeatures): SelectOption => {\n const display = spaceExtraFeatureToDisplayName(f);\n return ({\n value: f,\n display,\n // Useful for long text, like that of the instant-book\n // option.\n //\n // We do not expect this option object to be modified\n // at any further point before it appears on screen -\n // although that may change in future releases.\n shortDisplay: display\n });\n};\n\nexport const roomEquipmentRequiredOptions: SelectOption[] = [\n SpaceFeatures.VideoConference,\n SpaceFeatures.ConferencePhone,\n SpaceFeatures.WirelessContentSharing,\n SpaceFeatures.FlipChart,\n SpaceFeatures.Glassboard,\n SpaceFeatures.ElectronicWhiteboard\n].map(mapSpaceFeaturesToSelectOption);\n\nexport const internalRoomTypeRequiredOptions: SelectOption[] = [\n SpaceFeatures.PartnerOffice,\n SpaceFeatures.ConferenceRoom,\n SpaceFeatures.TeamRoom,\n SpaceFeatures.PhoneBooth\n].map(mapSpaceFeaturesToSelectOption);\n\nexport const externalRoomTypeRequiredOptions: SelectOption[] = [\n SpaceFeatures.ConferenceRoom,\n SpaceFeatures.TeamRoom\n].map(mapSpaceFeaturesToSelectOption);\n\nexport const roomDetailsRequired: SelectOption[] = [\n SpaceFeatures.NaturalLight,\n SpaceFeatures.BoardRoom,\n SpaceFeatures.CocktailRoom,\n SpaceFeatures.TheatreRoom,\n SpaceFeatures.WorkshopRoom,\n SpaceFeatures.UShapeRoom,\n SpaceFeatures.Miscellaneous\n].map(mapSpaceFeaturesToSelectOption);\n\nexport const roomCateringAvailable: SelectOption[] = [\n SpaceFeatures.Catering,\n].map(mapSpaceFeaturesToSelectOption);\n\n/**\n * Defines the reason by which spaces are filtered out / missing.\n */\nexport enum SpaceFilterReason {\n /**\n * Spaces were shown and not all filtered out.\n */\n None = 'None',\n\n /**\n * If room filters are applied to the set of rooms,\n * and rooms are available if not applied by filtering.\n */\n Filters = 'Filters',\n\n /**\n * We check office rules first to determine if its been filtered.\n */\n OfficeRules = 'OfficeRules',\n\n /**\n * Fallback as the end case if no results are found.\n */\n DateTime = 'DateTime',\n\n /**\n * In case there are no results for a buiding but there are other office buidings in the same city.\n */\n AlternateBuildingsFound = 'AlternateBuildingsFound',\n\n /**\n * If room is non-bookable in the system\n */\n NonBookable = 'NonBookable'\n}\n\nexport interface FilteredSpaces {\n spaces: Space[] | undefined;\n reason: SpaceFilterReason;\n statusMap: HashMap;\n specificReason?: SpaceFilterReason;\n}\n\n/**\n * Filter spaces by filters locally. TBD in the future for real API pagination.\n *\n * @param formFilters - the set of filters to apply on the list of spaces.\n * @param spaces - the list of spaces to filter\n * @param activeForm - the landing page set of filters.\n * @param buildings - the list of buildings loaded, used to retrieve building-specific booking rules.\n * @param currentUser - the current user\n */\nexport const filterSpacesByAppliedFilters = (\n formFilters: SelectOption[],\n spaces: Space[] | undefined, // the resultshere are raw JSON Spaces, not an array of the Space class\n activeForm: BookingFormData,\n buildings: Building[] = [],\n currentUser: User | undefined,\n isStaffMap: boolean = false): FilteredSpaces => {\n const instantBook: boolean = formFilters.some(f => f.value === instantBookOption.value);\n const onlyCatering: boolean = formFilters.some(f => f.value === SpaceFeatures.Catering);\n // Drop incompatible spaces. If no filters were given, just return the array unchanged.\n const featureFilters = formFilters.filter(filter => ![instantBookOption.value, SpaceFeatures.Catering].includes(filter.value));\n const formFiltersEmpty = featureFilters.length === 0;\n\n // R--- refactor activeForm? Only after forms can handle dateTz\n // Blocked by date time input refactor\n const options: SpaceBookingRuleOptions = {\n duration: activeForm.duration,\n host: currentUser,\n dateTz: activeForm.dateTz,\n };\n let rulesCount = 0;\n let ruleReason = '';\n let excludedByFiltersCount = 0;\n const statusMap: HashMap = {};\n // console.group();\n const filteredSpaces = spaces?.map(space => space instanceof Space ? space : new Space(space)).filter(raw_space => {\n const space = new Space(raw_space); // Construct the full fledged space\n const building = buildings.find(b => space.zones.includes(b.id));\n const rules = rulesForSpace({\n time: options?.dateTz?.ms,\n duration: options.duration,\n user: options.host,\n rules: building?.booking_rules,\n space\n });\n ruleReason = rules.reason;\n let valid = !rules.hide;\n if (!valid) {\n rulesCount++;\n return false;\n }\n\n\n // Check for all the form filters ( except 'catering' )\n let hasAllFeatures: boolean;\n const internalRoomTypeFilters = [\n 'conference',\n 'meeting_room',\n 'partner',\n 'phone_booth',\n 'team_room',\n ];\n\n if (featureFilters.length === 0) {\n hasAllFeatures = true;\n } else if(featureFilters.every(f => internalRoomTypeFilters.includes(f.value))) { // If all featureFilters(selected filters) are present in internalRoomTypeFilters, make the filtering inclusive(return on first true) \n hasAllFeatures = featureFilters.some(f => space.featuresArray.includes(f.value));\n } else { // If any featureFilters(selected filters) are not present in internalRoomTypeFilters, make the filtering exclusive(return on first false)\n hasAllFeatures = featureFilters.every(f => space.featuresArray.includes(f.value));\n }\n\n const canBook = instantBook ? space.bookable : true;\n const matchesType = activeForm?.bookingType?.value === 'allRooms'\n ? true\n : space?.internal_or_external?.length\n ? space.internal_or_external === activeForm?.bookingType?.value\n : true;\n valid = valid && matchesType && (formFiltersEmpty || hasAllFeatures) && canBook;\n let hasCatering = building?.has_catering;\n if (space?.has_catering === false) {\n hasCatering = false;\n }\n // need the room catering to override.\n if (onlyCatering && !hasCatering) {\n valid = false;\n // console.log('Excluded by Catering');\n }\n\n // count this space if the only reason it can't be shown is because one of the filters excluded it\n if (!hasAllFeatures) {\n valid = false;\n // console.log('Excluded by Status');\n }\n\n const status = statusFromBookings(\n space.bookings.length ? space.bookings.map(b => new Booking(b)) : space.settings.bookings.map(b => new Booking(b)),\n space.bookable && !rules.hide,\n !rules.auto_approve,\n activeForm.dateTz,\n space\n );\n\n // only compute room availability here right now if instant book option is chosen and room still valid.\n if (instantBook && valid) {\n valid = status.status === SpaceStatus.Available;\n if (!valid) console.group('Excluded by Status');\n \n }\n\n\n /** \n * If there are rooms that are recurring but not available at all during the queried times, we filter them out from the results displayed on the page.\n * The \"Available\" status indicates whether a room can be booked during the queried times.\n * The \"isStaffMap\" flag- This helps to indicate that all occurrences of this room are booked during the queried times and are currently in use.\n * \"isStaffMap\" flag allows including such rooms in the list, which will be displayed in red on the map.\n */\n if(activeForm.is_recurrent && !space.availableOccurrences && !isStaffMap) {\n valid = false;\n }\n /** */\n\n // cache space status\n if (valid) {\n if(activeForm.is_recurrent && space.availableOccurrences && space.availableOccurrences<= space.totalOccurrences) {\n // space is available and requested for recurrence booking and few occurences are available to book then let the space select/bookable from map with limited availability\n statusMap[space.id] = !rules.auto_approve ? SpaceStatus.Requestable : SpaceStatus.Available;\n }else\n {\n statusMap[space.id] = status.status;\n }\n \n } else {\n excludedByFiltersCount++;\n }\n // console.log('Valid:', valid);\n return valid;\n });\n\n const buildingsInSameCity = buildings.filter(\n (_) =>activeForm?.location!==undefined && activeForm?.location?.length && _.city === activeForm?.location[0]?.meta?.building?.city\n ) || [];\n const alternateBuildings = buildingsInSameCity.filter(building =>\n !activeForm.location.some(locationItem =>\n locationItem.meta?.building?.id === building.id\n )\n );\n\n // console.groupEnd();\n let reason, specificReason = SpaceFilterReason.None;\n // console.log('Spaces:', filteredSpaces?.length, excludedByFiltersCount, rulesCount, ruleReason)\n if (filteredSpaces?.length === 0) {\n if (excludedByFiltersCount > 0 && (!formFiltersEmpty || onlyCatering)) {\n reason = SpaceFilterReason.Filters;\n } else if (rulesCount > 0) {\n reason = SpaceFilterReason.OfficeRules;\n } else if(alternateBuildings){\n reason = SpaceFilterReason.AlternateBuildingsFound;\n }\n else {\n reason = SpaceFilterReason.DateTime;\n }\n\n if (ruleReason === SpaceFilterReason.OfficeRules) {\n specificReason = SpaceFilterReason.OfficeRules;\n }\n }\n\n return { spaces: filteredSpaces, reason, statusMap, specificReason };\n};\n","import { BookingFormData } from './booking.form.data';\nimport {\n createAction,\n props\n} from '@ngrx/store';\nimport { Payload } from '../../../../loading/src/lib/loading.actions';;\nimport { SelectOption } from '../../../../ui/src/lib/options/select-option';\n\n\nexport const storeBookingFormData = createAction('[BookingForm] Store Form Data',\n props>>());\n\nexport const clearBookingFormData = createAction('[BookingForm] Clear Form Data');\n\nexport const storeRoomFilters = createAction('[BookingForm] Store Room Filters',\n props[]>>());\n\nexport const clearRoomFilters = createAction('[BookingForm] Clear Room Filters');\n\nexport const openBookingSurvey = createAction('[BookingSurvey] Open Survey Modal');\n","import { SelectOption } from '../../../../ui/src/lib/options/select-option';\nimport { RoomQueryOptions } from '../../../../rooms/src/lib/rooms.types';\nimport { User } from '../users/user.class';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\nimport { DaysOfWeek, RecurrencePeriod } from '../recurrence/recurrence.utils';\nimport { Building } from '../organisation';\n\nexport const DEFAULT_BOOKING_DURATION = 30;\n\nexport const internalBookingTypeOption = {\n value: 'internal',\n display: 'Internal',\n};\n\nexport const allBookingTypeOption = {\n value: 'allRooms',\n display: 'All Rooms',\n};\n\nexport const bookingTypeOptions: SelectOption[] = [\n internalBookingTypeOption,\n {\n value: 'external',\n display: 'External',\n }\n];\n\nexport const defaultRoomSizeOption = {\n value: '2',\n display: '3-9 People',\n};\n\nexport const roomSizeOptions: SelectOption[] = [\n {\n value: '1',\n display: '1-2 People',\n },\n defaultRoomSizeOption,\n {\n value: '3',\n display: '10+ People',\n }\n];\n\nexport const roomSizeOptionsKiosk: SelectOption[] = [\n ...roomSizeOptions,\n {\n value: '4',\n display: 'All Rooms',\n },\n];\n\nexport const roomCapacityToValue = (roomSize: string): number => {\n switch (roomSize) {\n case '1':\n return 1;\n case '2':\n return 3;\n case '3':\n return 10;\n case '4':\n return null;\n }\n};\n\nexport const roomMaxCapacityToValue = (roomSize: string): number => {\n switch (roomSize) {\n case '1':\n return 2;\n case '2':\n return 9;\n default:\n return null;\n }\n};\n\nexport interface BookingFormData {\n // R--- off the rails, define these \"any's\"\n id?: string;\n location: SelectOption[];\n dateTz: DateTZ;\n /**\n * Duration, in minutes.\n */\n duration: number;\n bookingType: SelectOption;\n roomSize: SelectOption;\n selectedRoom?: any;\n organiser?: SelectOption;\n title?: string;\n attendees?: any[];\n code?: string;\n notes?: string;\n head_count?: number;\n creator?: User;\n company?: any[];\n //Recurrence fields\n recurrence_period?: RecurrencePeriod;\n recurrence_interval?: number;\n recurrence_endTz?: DateTZ;\n recurrence_count?: number;\n recurrence_starts?: Array;\n recurrence_exceptions?: Array; //SHOULD BE DATETZ\n recurrence_days?: Array;\n timezone?: string;\n offset?: number;\n buildings?: Building[];\n is_recurrent?: boolean;\n is_multiroom?: boolean;\n merged?: boolean;\n action?: string; // helping to set staff app recurring action flag for edit/clone in the active form\n ignore?: string; // helping while editing - recurring series rooms search api call\n bookable?: boolean; // set while editing - recurring series rooms search api call\n occurrence_edits?: string[];\n opt_out?:boolean;\n nextBusinessDay?: boolean // set property if user room selection from next business day section on result page\n}\n\n/**\n * Converts form data into API query parameters.\n */\nexport const roomFormDataToQuery = (\n data: BookingFormData\n): RoomQueryOptions => {\n // remove all buildings chip from query\n const filteredLocationIds = data?.location\n .filter((l) => l.groupChild)\n .map((l) => l.value)\n .join(',');\n return {\n dateTz: data?.dateTz,\n duration: data?.duration,\n locations: filteredLocationIds,\n capacity: roomCapacityToValue(data?.roomSize?.value),\n capacity_max: roomMaxCapacityToValue(data?.roomSize?.value),\n\n is_recurrent: data?.is_recurrent,\n is_multiroom: data?.is_multiroom,\n merged: data?.merged,\n recurrence_period: data?.recurrence_period,\n recurrence_interval: data?.recurrence_interval,\n recurrence_endTz: data?.recurrence_endTz,\n recurrence_count: data?.recurrence_count,\n recurrence_starts: data?.recurrence_starts,\n recurrence_exceptions: data?.recurrence_exceptions, //SHOULD BE DATETZ\n recurrence_days: data?.recurrence_days,\n timezone: data?.timezone,\n offset: data?.offset,\n buildings: data?.buildings,\n bookable: data?.bookable,\n ignore: data?.ignore\n };\n};\n","import { BookingFormState } from './booking.form.types';\nimport {\n DEFAULT_BOOKING_DURATION,\n defaultRoomSizeOption,\n internalBookingTypeOption\n} from './booking.form.data';\nimport { DateNow } from '@mckinsey-converge/date-tz';\n\nconst now = DateNow(new Date())\n\nexport const defaultTestBookingForm = (): BookingFormState => ({\n activeForm: {\n dateTz: now,\n duration: 2 * DEFAULT_BOOKING_DURATION,\n location: [],\n bookingType: internalBookingTypeOption,\n roomSize: defaultRoomSizeOption\n },\n activeFormFilters: []\n});\n","import { createSelector } from '@ngrx/store';\nimport {\n RoomStoreState\n} from '../../../../rooms/src/lib/rooms.types';\nimport {\n loadLaterThatDayResults,\n loadNextDayResults,\n loadRoomsForResults,\n roomStateSelector,\n loadByIdResults,\n loadDiffSizeResults,\n loadRoomsForResultsMap\n} from '../../../../rooms/src/lib/rooms.actions';\nimport {\n loadHomepageBookingsResults,\n loadUpcomingBookingsResults,\n loadPastBookingsResults,\n loadCancelledBookingsResults,\n loadBookingByIdResults,\n bookingStateSelector\n} from '../../../../bookings/src/lib/bookings.actions';\nimport { Building } from '../organisation/building.class';\nimport { BuildingStoreState } from '../../../../buildings/src/lib/buildings.types';\nimport { selectLoadBuildingsSuccess } from '../../../../buildings/src/lib/buildings.actions';\nimport { Space } from '../spaces/space.class';\nimport { User } from '../users/user.class';\nimport { selectCurrentUser } from '../../../../user/src/lib/user.actions';\nimport { UserStoreState } from '../../../../user/src/lib/user.types';\nimport { LoadingModel } from '../../../../loading/src/lib/loading.model';\nimport { SelectOption } from '../../../../ui/src/lib/options/select-option';\n\nimport {\n SpaceFilterReason,\n filterSpacesByAppliedFilters,\n FilteredSpaces\n} from './booking-filter.utils';\nimport {\n BookingFormData,\n internalBookingTypeOption,\n} from './booking.form.data';\nimport {\n BookingFormState,\n BookingStoreState,\n} from './booking.form.types';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\nimport { BookingAction, RecurrencePeriod, SeriesAction } from '../recurrence/recurrence.utils';\n\n\nexport const selectBookingFormsData =\n (state: BookingStoreState | RoomStoreState | BuildingStoreState | UserStoreState) =>\n (state as any).bookingForm as BookingFormState;\n\nexport const selectActiveForm = createSelector(selectBookingFormsData, state => {\n // Recreate because serialized form dateTz doesn't have DateTZ class methods\n if (!state.activeForm?.dateTz) {\n return state.activeForm\n }\n const { date, is_local_tz, building_tz} = state.activeForm?.dateTz;\n const endTzDate = state.activeForm?.recurrence_endTz?.date;\n const recurrence_endTz = endTzDate ? {\n recurrence_endTz : new DateTZ({ date: endTzDate.valueOf(), is_local_tz, building_tz })\n } : {};\n\n const recurrence_starts = state.activeForm?.recurrence_starts\n\t\t\t? {\n\t\t\t\t\trecurrence_starts: state.activeForm?.recurrence_starts.map( el =>\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// at final step of booking creation process recurrence_start becomes Array which need to be Array\n\t\t\t\t\t\t\t// To Do: Refactor - apps/staff/src/app/booking/booking-create/booking-form-base.component.ts lno: 186\n\t\t\t\t\t\t\treturn new DateTZ({ date: typeof el === 'number' ? el * 1000 : el.date.valueOf(), is_local_tz, building_tz })\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t: {};\n\n\n const recEditingSearchPayload = (state.activeForm.action === SeriesAction.EDIT && state.activeForm.is_recurrent)\n\t\t\t?\n\t\t {\n\t\t\t\tid: state.activeForm.id,\n\t\t\t\tignore: state.activeForm.ignore,\n\t\t\t\tbookable: state.activeForm.bookable\n\t\t\t}\n\t\t\t: {};\n\n\n\n\n return {\n ...state.activeForm,\n dateTz: new DateTZ({ date: date.valueOf(), is_local_tz, building_tz }),\n ...recurrence_endTz,\n ...recurrence_starts,\n\t\t\t\t...recEditingSearchPayload\n }\n});\n\nexport const selectBookingType = createSelector(selectActiveForm,\n (form) => form?.bookingType);\n\nexport const selectBookingLocations = createSelector(selectActiveForm,\n (form) => (form?.location || []).filter(f => !f.groupHeader));\n\nexport const selectIsInternal = createSelector(selectBookingType,\n (type) => type?.value === internalBookingTypeOption.value);\n\nexport const selectFormFilters = createSelector(selectBookingFormsData,\n (state) => state.activeFormFilters || []);\n\nconst selectRoomResultsFromState = createSelector(roomStateSelector,\n loadRoomsForResults.selectors.model);\n\nconst selectRoomResultsFromState_map = createSelector(roomStateSelector,\n loadRoomsForResultsMap.selectors.model);\n\nconst selectLaterThatDayResultsFromState = createSelector(roomStateSelector,\n loadLaterThatDayResults.selectors.model);\nconst selectNextDayResultsFromState = createSelector(roomStateSelector,\n loadNextDayResults.selectors.model);\nconst selectByIdResultsFromState = createSelector(roomStateSelector,\n loadByIdResults.selectors.model);\nconst selectDiffSizeResultsFromState = createSelector(roomStateSelector,\n loadDiffSizeResults.selectors.model);\n\nexport const selectHomepageBookingsResultsFromState = createSelector(bookingStateSelector,\n loadHomepageBookingsResults.selectors.model);\nexport const selectUpcomingBookingsResultsFromState = createSelector(bookingStateSelector,\n loadUpcomingBookingsResults.selectors.model);\nexport const selectPastBookingsResultsFromState = createSelector(bookingStateSelector,\n loadPastBookingsResults.selectors.model);\nexport const selectCancelledBookingsResultsFromState = createSelector(bookingStateSelector,\n loadCancelledBookingsResults.selectors.model);\nexport const selectBookingByIdResultsFromState = createSelector(bookingStateSelector,\n loadBookingByIdResults.selectors.model);\n\n/**\n * Wraps {@link filterSpacesByAppliedFilters} with {@link LoadingModel} interop.\n * This will only filter data if there is data to filter, and returns a success {@link LoadingModel}.\n * The \"isStaffMap\" flag- This helps to indicate that all occurrences of this room are booked during the queried times and are currently in use.\n * \"isStaffMap\" flag allows including such rooms in the list, which will be displayed in red on the map.\n */\nconst filterSpacesByAppliedFiltersIfSuccess = (\n results: LoadingModel,\n formFilters: SelectOption[],\n activeForm: BookingFormData,\n buildings: Building[] | undefined,\n currentUser: User | undefined,\n isStaffMap: boolean = false): LoadingModel => {\n const data = results.optionalSuccess;\n\n // don't filter model if no success found\n return !activeForm ? results.mutate({\n spaces: data, // the result here is a raw JSON Space, not the Space class\n reason: SpaceFilterReason.None,\n statusMap: {}\n }) : results.mutate(\n filterSpacesByAppliedFilters(formFilters, data, activeForm, buildings || activeForm.buildings, currentUser, isStaffMap));\n};\n\nexport const selectFilteredResults = createSelector(selectRoomResultsFromState,\n selectFormFilters,\n selectActiveForm,\n selectLoadBuildingsSuccess,\n selectCurrentUser,\n filterSpacesByAppliedFiltersIfSuccess);\n\nexport const selectMapFilteredResults = createSelector(selectRoomResultsFromState_map,\n selectActiveForm,\n selectLoadBuildingsSuccess,\n selectCurrentUser,\n (results, activeForm, buildings, currentUser, isStaffMap) => filterSpacesByAppliedFiltersIfSuccess(results, [], activeForm, buildings, currentUser, true));\n\nexport const selectFilteredLaterDayResults = createSelector(selectLaterThatDayResultsFromState,\n selectFormFilters,\n selectActiveForm,\n selectLoadBuildingsSuccess,\n selectCurrentUser,\n filterSpacesByAppliedFiltersIfSuccess);\n\nexport const selectFilteredNextDayResults = createSelector(selectNextDayResultsFromState,\n selectFormFilters,\n selectActiveForm,\n selectLoadBuildingsSuccess,\n selectCurrentUser,\n filterSpacesByAppliedFiltersIfSuccess);\n\n\nexport const selectFilteredByIdResults = createSelector(selectByIdResultsFromState,\n selectActiveForm,\n selectLoadBuildingsSuccess,\n selectCurrentUser,\n (results, activeForm, buildings, currentUser) => filterSpacesByAppliedFiltersIfSuccess(results, [], activeForm, buildings, currentUser));\n\nexport const selectFilteredDiffSizeResults = createSelector(selectDiffSizeResultsFromState,\n selectFormFilters,\n selectActiveForm,\n selectLoadBuildingsSuccess,\n selectCurrentUser,\n filterSpacesByAppliedFiltersIfSuccess);\n\n/**\n * Maps selected options by loaded buildings.\n */\nexport const selectSelectedBuildingOptions = createSelector(\n selectBookingLocations,\n selectLoadBuildingsSuccess,\n (locations, buildings) => (locations\n .map(l => buildings?.find(b => b.id === l.value))\n .filter(f => !!f) as Building[])\n);\n\n","import { Building, BuildingCity } from '../organisation/building.class';\nimport { Booking } from '../bookings/booking.class';\nimport { BuildingLevel } from '../organisation/level.class';\nimport { Space } from '../spaces/space.class';\nimport { SpacesService } from '../spaces/spaces.service';\nimport {\n timezoneDisplay,\n timezoneNameToDate,\n unique,\n ImageDirective,\n} from '@mckinsey-converge/base';\nimport { SelectOption } from '../../../../ui/src/lib/options/select-option';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n/**\n * If more than 3 are selected, we truncate location display.\n */\nconst MAX_ABBREV_LOCATIONS = 3;\n\nexport const mapBuildingToSelectOption = (\n city: string,\n building: Building\n): SelectOption => ({\n display: `${building.name} ${timezoneDisplay(\n timezoneNameToDate(building.timezone)\n )}`,\n dropdownOverride: `${building.code}-${building.name}, ${building.address}`,\n value: building.id,\n groupId: city,\n groupChild: true,\n shortDisplay: `${building.name} ${timezoneDisplay(\n timezoneNameToDate(building.timezone)\n )}`,\n meta: { building, city },\n});\n\nexport const mapCityToAllSelectOption = (\n city: BuildingCity\n): SelectOption => ({\n display: `${city.name} (All Offices) ${timezoneDisplay(\n timezoneNameToDate(city.timezone)\n )}`,\n value: city.name,\n groupHeader: true,\n groupId: city.name,\n shortDisplay: `${city.name} (All Offices) ${timezoneDisplay(\n timezoneNameToDate(city.timezone)\n )}`,\n meta: { city },\n});\n\n/**\n * Flattens a map of {@link BuildingCity} to {@link Building} array into a list of {@link SelectOption}.\n * @param grouped The grouping\n */\nexport const flattenDisplayOffices = (\n grouped: Map\n) => {\n const options: SelectOption[] = [];\n grouped.forEach((value, key) => {\n options.push(mapCityToAllSelectOption(key));\n value.forEach((b) =>\n options.push(mapBuildingToSelectOption(key.name, b))\n );\n });\n return options;\n};\n\n/**\n * This method will either add or remove a selected option from the selectedOptions list based on\n * these conditions:\n * 1. If the option EXISTS in the list AND is a groupHeader, de-select all of its children.\n * 2. If the option EXISTS in the list AND is a groupChild, remove it and its associated header from the list.\n * 3. If the option does NOT EXIST in the list AND is a groupHeader, select all other children.\n * 4. If the option does NOT EXIST in the list AND is a groupChild, add it to the list.\n *\n * Special note regarding item 4:\n * 4a. If that selection completes the children selection, select its associated header as well.\n */\nexport const toggleSelectedByGroup = (\n options: SelectOption[],\n selectedOptions: SelectOption[],\n option: SelectOption\n) => {\n if (selectedOptions.find((s) => s.value === option.value)) {\n return selectedOptions.filter((s) => {\n let filter = s.value !== option.value;\n // if group header, also remove any option that is the child of it.\n if (option.groupHeader) {\n filter =\n filter &&\n (!s.groupChild ||\n (s.groupChild && s.groupId !== option.groupId));\n } else if (option.groupChild) {\n // if child removing, remove the associated header.\n filter =\n filter &&\n (!s.groupHeader ||\n (s.groupHeader && s.groupId !== option.groupId));\n }\n return filter;\n });\n }\n // option does NOT EXIST\n // if adding header, add the other children to the selected list, ensuring no dupes.\n if (option.groupHeader) {\n const toSelect = options.filter(\n (v) =>\n v.groupChild &&\n v.groupId === option.value &&\n !selectedOptions.find((selected) => selected.value === v.value)\n );\n return [...selectedOptions, option, ...toSelect];\n }\n // add group child, add the group header if all satisfied\n const newGroup = [...selectedOptions, option];\n\n // check if we have selected all children from options by filtering down by city and checking if\n // they're in the selected options list.\n const remainingChildrenInGroup = options.filter(\n (o) =>\n o.groupChild &&\n o.groupId === option.groupId &&\n !newGroup.find((ng) => ng.value === o.value)\n );\n // if we dont have remaining children, add the group\n if (remainingChildrenInGroup.length === 0) {\n return [\n ...newGroup,\n options.find((o) => o.groupHeader && o.groupId === option.groupId),\n ];\n }\n return newGroup;\n};\n\n/**\n * If the list of locations are larger than {@link MAX_ABBREV_LOCATIONS}, then truncate\n * and display the remaining count.\n */\nexport const truncateLocationList = (\n locations: readonly SelectOption[]\n): string => {\n // comma separate the locations\n let truncatedLocations = [...locations];\n const shouldTruncate = locations.length > MAX_ABBREV_LOCATIONS;\n if (shouldTruncate) {\n truncatedLocations = truncatedLocations.splice(0, MAX_ABBREV_LOCATIONS);\n }\n let display = truncatedLocations\n .map((l) => l.shortDisplay || l.display)\n .join(', ');\n if (shouldTruncate) {\n display += `...(${locations.length})`;\n }\n return display;\n};\n\nexport const mapBuildingLevelToOption = (\n level?: BuildingLevel\n): SelectOption =>\n level\n ? {\n value: level.id,\n display: level.name,\n }\n : undefined;\n\n/**\n * Returns all levels included with the building, deduped.\n * @param buildings\n */\nexport const flattenBuildingsWithLevels = (buildings: Building[]) => {\n const flattenedLevels = unique(\n buildings.reduce((next: BuildingLevel[], building: Building) => {\n next.push(...building.levels);\n return next;\n }, []),\n 'id'\n );\n return {\n flattenedLevels,\n buildings,\n };\n};\n\n/** Gets route to image placeholder if room image isn't found */\n\nexport const placeholderRoute = (num: number): string => {\n let index: number;\n if (num <= 3) {\n index = num;\n } else if (num % 3 === 0) {\n index = 3;\n } else {\n index = 1;\n }\n return `assets/img/rooms/placeholder-${index}.png`;\n};\n\n/**\n * Method takes the rootFolderURL and fileSlug to create an array of three images\n * that should exist. If a room image exists, it replaces the placehoder image.\n */\nexport const setupRoomImages = (\n componentReference: ImageDirective,\n image_positions: number[],\n rootFolderURL: string,\n fileSlug: string,\n imagesLoaded: boolean = false\n): void => {\n let foundImages: any[] = image_positions.map((i) =>\n i ? { path: placeholderRoute(i) } : false\n );\n image_positions.forEach((n) => {\n const desiredImageName = `${rootFolderURL}${fileSlug}-part-${n}.png`;\n const desiredImage = location.pathname.includes('concierge') ? `${location.origin}/staff/${desiredImageName}` : desiredImageName;\n if (!imagesLoaded) {\n const tester = new Image();\n tester.onload = () => {\n // Will never run on unit test\n foundImages[n - 1] = { path: desiredImage };\n componentReference.foundImages = [...foundImages.slice()];\n componentReference?.loadImages && componentReference?.loadImages.next([...foundImages.slice()]);\n };\n tester.src = desiredImage;\n }\n\n // Force valid image output on unit test\n if (imagesLoaded) {\n foundImages[n - 1] = { path: desiredImage };\n componentReference.foundImages = foundImages.slice();\n }\n });\n};\n\nexport const bookingStatusDetails = (booking: Booking) => {\n const now = DateNow(new Date());\n let image = '';\n let text = '';\n let title = '';\n\n if (booking?.status) {\n const status = now > booking.endDateTz ? 'expired' : booking.status;\n switch (status) {\n case 'unavailable':\n image = 'assets/icon/booking_cancelled.svg';\n title = 'Unavailable';\n text = 'Unavailable';\n break;\n case 'declined':\n image = 'assets/icon/booking_cancelled.svg';\n title = 'Cancelled';\n text = 'Cancelled';\n break;\n case 'cancelled':\n image = 'assets/icon/booking_cancelled.svg';\n title = 'Cancelled';\n text = 'Cancelled';\n break;\n case 'expired':\n image = 'assets/icon/booking_expired.svg';\n title = 'Expired';\n text = 'Expired';\n break;\n case 'tentative':\n image = 'assets/icon/booking_pending.svg';\n title = 'Requested';\n text = 'Pending';\n break;\n case 'accepted':\n image = 'assets/icon/booking_confirmed.svg';\n title = 'Confirmed';\n text = 'Confirmed';\n break;\n case 'approved':\n image = 'assets/icon/booking_confirmed.svg';\n title = 'Confirmed';\n text = 'Confirmed';\n break;\n default:\n // TODO\n image = 'assets/icon/booking_expired.svg';\n title = 'Expired';\n text = 'Expired';\n break;\n }\n }\n return { text, title, image };\n};\n\nexport const roomHasCateringHours = (building: Building, space: Space) => {\n let hasCatering = building\n ? building.has_catering && building.catering_hours\n : false;\n // Room catering status as false overrides building status\n if (space?.has_catering === false) {\n hasCatering = false;\n }\n return hasCatering;\n};\n\nexport const cateringAllowed = (booking: Booking, building: Building) => {\n const status = bookingStatusDetails(booking);\n const disallowedStatus = ['declined', 'cancelled', 'expired'].includes(\n status.text\n );\n const opens = building?.catering_hours?.start;\n const closed = building?.catering_hours?.end;\n\n if (disallowedStatus) {\n return false;\n }\n\n if (typeof opens === 'undefined' || typeof closed === 'undefined') {\n return false;\n }\n\n // Catering time could be a decimal so convert to a date\n const openMinutes = opens * 60;\n const closeMinutes = closed * 60;\n\n const startOfDay = booking.startDateTz.startOfValue('day');\n const cateringOpenTime = startOfDay.addValue({ minutes: openMinutes });\n const cateringCloseTime = startOfDay.addValue({ minutes: closeMinutes });\n\n if (\n cateringOpenTime.ms <= booking.startDateTz.ms ||\n cateringCloseTime.ms > booking.startDateTz.ms\n ) {\n // Booking ends before catering opens\n if (booking.endDateTz.ms <= cateringOpenTime.ms) {\n return false;\n }\n // Booking starts after catering closes\n if (booking.startDateTz.ms > cateringCloseTime.ms) {\n return false;\n }\n\n // Start time is OK\n if (booking.startDateTz.ms > DateNow(new Date()).ms) {\n // Due to COVID, no orders are available once a meeting begins.\n return true;\n }\n }\n\n return false;\n};\n\nexport const checkCollisions = (\n service: SpacesService,\n booking: Booking\n): Promise => {\n return new Promise((resolve, reject) => {\n\n let availabilityParams: {\n room_ids: string;\n dateTz: DateTZ;\n duration: number;\n setup: number;\n breakdown: number;\n hide_bookings: boolean;\n [key: string]: any;\n } = {\n room_ids: booking.space.id,\n dateTz: booking.startDateTz,\n duration: booking.duration,\n setup: booking.setup[booking.space.email],\n breakdown: booking.breakdown[booking.space.email],\n hide_bookings: false,\n };\n\n if (booking.recurrence_type === \"master\" || booking.recurrence_type === null) {\n availabilityParams = {\n ...availabilityParams,\n ignore: booking?.icaluid,\n recurrence_count: booking?.recurrence_count,\n recurrence_period: booking?.recurrence_period,\n recurrence_endTz: booking?.recurrence_endTz,\n recurrence_interval: booking?.recurrence_interval,\n recurrence_starts: booking?.recurrence_starts,\n is_recurrent: booking?.is_recurrent,\n recurrence_days: booking?.recurrence_days\n } as typeof availabilityParams;\n }\n\n service\n .available(\n availabilityParams,\n null,\n false\n )\n .then(\n (list) => {\n const space = list.length ? list[0] : null;\n if (space) {\n if (!space.bookable) return reject('Has conflict');\n const setup = booking?.setup[space?.email] || 0;\n const breakdown = booking?.breakdown[space?.email] || 0;\n const start_time = booking?.startDateTz.seconds - setup;\n const end_time = booking.endDateTz.seconds + breakdown;\n\n const bookings = space.settings.bookings;\n // console.log('Bookings:', bookings);\n // Compare the existing bookings to see if any truely conflict.\n if (bookings.length) {\n const has_conflict = bookings.find(bkn => {\n const b_setup = bkn.setup[space.email] || 0;\n const b_breakdown = bkn.setup[space.email] || 0;\n const start = (bkn.start_epoch || bkn.start) - b_setup;\n const end = (bkn.end_epoch || bkn.end) + b_breakdown;\n return (\n (end_time > start && end_time <= end) || // Booking ends during the meeting\n (start_time >= start && start_time < end) || // Booking starts during a meeting\n (start_time <= start && end_time >= end) // Booking overlaps entire meeting\n ) && \n ( \n bkn.id !== booking.id \n || \n ( !!booking.is_recurrent && (booking.recurrence_type === \"master\" || booking.recurrence_type === null ) ) \n ?\n bkn.recurrence_master_id !== booking.id\n :\n false\n \n )\n\n\n\n });\n // Conflicts found, reject\n if (has_conflict) return reject('has booking conflict');\n }\n return resolve(space.bookable);\n }\n reject('space not found');\n },\n () => reject('available error')\n );\n });\n};\n\nexport const getStatusErrorMessage = (status?: number) => {\n let msg = '';\n switch (status) {\n\t\t\tcase 400:\n\t\t\t\tmsg = 'Apologies, the booking cannot be finalized because the current time has exceeded the scheduled start time for this booking. Please try again.';\n\t\t\t\tbreak;\n\t\t\tcase 403:\n\t\t\t\tmsg = 'Your do not have permission to update this booking.';\n\t\t\t\tbreak;\n\t\t\tcase 409:\n\t\t\t\tmsg = 'Sorry, your booking time conflicts with another booking.';\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tmsg = 'Your booking failed to update, please try again';\n }\n return msg;\n};\n","export * from './room-results/room-results.viewmodel'\nexport * from './booking-filter.utils'\nexport * from './booking.form.actions'\nexport * from './booking.form.data'\nexport * from './booking.form.spec-helpers'\nexport * from './booking.form.types'\nexport * from './booking.selectors'\nexport * from './booking.utils'","import { Space } from '../../spaces/space.class';\nimport { BuildingLevel } from '../../organisation/level.class';\nimport { Building } from '../../organisation/building.class';\n\nexport class RoomResultsViewModel {\n\n public levelDisplay: string;\n public title: string;\n public office: string;\n public capacity: string;\n\n constructor(public space: Space,\n public level?: BuildingLevel,\n public building?: Building) {\n\n this.levelDisplay = `Level ${this.space?.level?.short_name}`;\n this.title = this.space.local_name;\n this.office = this.building ? `(${this.building?.code}) ${this.building?.name}` : '';\n this.capacity = `Capacity: ${this.space.capacity} people`;\n }\n}\n\n/**\n * For each result from results, we find its level and building from the lists.\n */\nexport const mapResultsToViewModels = (results: Space[],\n flattenedLevels: BuildingLevel[],\n buildings: Building[]): RoomResultsViewModel[] =>\n results.map((r: Space) => {\n const level = flattenedLevels.find(l => r.zones.includes(l.id));\n const building = buildings.find(b => r.zones.includes(b.id));\n return new RoomResultsViewModel(\n r,\n level,\n building\n );\n });\n","import { Injectable, NgZone } from '@angular/core';\nimport { BehaviorSubject, combineLatest, of, Observable } from 'rxjs';\nimport {\n catchError,\n debounceTime,\n filter,\n first,\n map,\n shareReplay,\n switchMap,\n} from 'rxjs/operators';\nimport { BaseClass } from '@mckinsey-converge/base';\nimport { replaceBookings, timePeriodsIntersect } from './booking.utilities';\nimport { SpacesService } from '../spaces/spaces.service';\nimport { Booking } from '../bookings/booking.class';\nimport { Space } from '../spaces/space.class';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { OrganisationService } from '../organisation/organisation.service';\n\nexport type BookingType =\n | 'internal'\n | 'client'\n | 'external'\n | 'setup'\n | 'training'\n | 'interview'\n | 'declined';\n\nexport interface BookingFilters {\n /** List of zone ids to get bookings for */\n zone_ids?: string[];\n space_emails?: string[];\n hide_type?: BookingType[];\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BookingStateService extends BaseClass {\n /** List of bookings */\n private _poll = new BehaviorSubject(false);\n /** List of bookings */\n private _long_poll = new BehaviorSubject<'month' | ''>('');\n private _long_poll_week = new BehaviorSubject<'week' | ''>('');\n /** List of bookings */\n private _bookings = new BehaviorSubject([]);\n /** List of meeting count per date */\n public _noOfMeetings = new BehaviorSubject<{}>({});\n /** Filter details for bookings */\n private _filters = new BehaviorSubject({});\n /** Currently active date */\n private _dateTz = new BehaviorSubject(DateNow(new Date()));\n /** Currently displayed zone */\n private _zone = new BehaviorSubject(' ');\n /** Whether booking data is being loaded */\n private _loading = new BehaviorSubject(false);\n /** Observable for filter and booking list changes */\n private _state = combineLatest(\n this._bookings,\n this._filters,\n this._dateTz,\n this._zone\n );\n\n /** Observable for list of bookings */\n public readonly bookings = this._bookings.asObservable();\n /** Observable for active date */\n public readonly dateTz = this._dateTz.asObservable();\n /** Observable for active zone */ // R-- zone was this._date.asObservable(); this looks like a mistake but it exists from the beginning of time\n public readonly zone = this._dateTz.asObservable();\n /** Observable for loading state of bookings */\n public readonly loading = this._loading.asObservable();\n\n public get booking_date() {\n // When this class is initialized this._dateTz is local timezone\n return this._dateTz.value;\n }\n\n public get timezone() {\n return localStorage.getItem('CONCIERGE.timezone');\n }\n\n /** Obsevable for filtered list of bookings */\n public readonly filtered = this._state.pipe(\n map((state) => {\n const bdTz = this.timezone\n ? new DateTZ({\n date: this.booking_date.ms,\n is_local_tz: false,\n building_tz: this.timezone,\n })\n : this.booking_date;\n const startTz = bdTz.startOfValue('day');\n const endTz = startTz.addValue({}).endOfValue('day');\n return this.filterBookings(startTz, endTz);\n }),\n shareReplay(1)\n );\n\n /** Obsevable for filtered list of bookings of the active week */\n public readonly filtered_week = this._state.pipe(\n map(() => {\n // Tested to be valid in building time now.\n const bd = this.timezone\n ? new DateTZ({\n date: this.booking_date.ms,\n is_local_tz: false,\n building_tz: this.timezone,\n })\n : this.booking_date;\n const start = bd.startOfValue('week').startOfValue('day');\n const end = this.getEndOfWeek(bd);\n return this.filterBookings(start, end);\n })\n );\n\n /** Obsevable for filtered list of bookings for active month */\n public readonly filtered_month = this._state.pipe(\n map(() => {\n const start = this.booking_date.startOfValue('month');\n const end = this.booking_date.endOfValue('month');\n return this.filterBookings(start, end);\n })\n );\n\n /** Active filters */\n public get filters() {\n return this._filters.getValue();\n }\n\n constructor(\n private _org: OrganisationService,\n private _spaces: SpacesService,\n private ngZone: NgZone,\n ) {\n super();\n\n this._org.initialised.pipe(first((_) => _)).subscribe(() => {\n // Just to get the timezone correct\n this._dateTz.next(\n new DateTZ({\n date: this._dateTz.value.ms,\n is_local_tz: false,\n building_tz: this._org.building?.timezone,\n })\n );\n });\n\n /** Generate observable for updating bookings */\n const search = combineLatest(this._poll, this._zone, this._dateTz).pipe(\n filter((i) => !!i[0]),\n debounceTime(500),\n switchMap(() => {\n const fzone = this._zone.getValue();\n if (!fzone) {\n return of([]);\n }\n this._loading.next(true);\n const start = this.booking_date.startOfValue('day');\n const end = start.endOfValue('day');\n return this._spaces.queryBooking({\n zone_ids: fzone,\n available_from: start.seconds,\n available_to: end.seconds,\n });\n }),\n catchError(() => of([]))\n );\n\n const search_long_week = combineLatest(\n this._long_poll_week,\n this._zone,\n this._dateTz\n ).pipe(\n filter((i) => !!i[0]),\n debounceTime(500),\n switchMap((props) => {\n const type = props[0];\n const fzone = props[1];\n const dateTz = props[2];\n if (!fzone) {\n return of([]);\n }\n this._loading.next(true);\n return this.querySpace(type, fzone, dateTz, false);\n }),\n catchError((e) => { \n return of([]);\n })\n );\n\n //TO DO: make sure both spaces have same booking\n /** Subscribe to update observable */\n search.subscribe((space_list) => {\n this.processBookings(space_list);\n this._loading.next(false);\n });\n search_long_week.subscribe((space_list) => {\n this.processBookings(space_list, this._long_poll_week.getValue() as any);\n this._loading.next(false);\n });\n }\n\n /**\n * Function to build\n */\n private buildSpaceLongQuery(dailyCount: boolean = false): Observable {\n return combineLatest(\n this._long_poll,\n this._zone,\n this._dateTz\n ).pipe(\n filter((i) => !!i[0]),\n debounceTime(500),\n switchMap((props) => {\n const type = props[0];\n const fzone = dailyCount ? this._org.building.id : props[1];\n const dateTz = props[2];\n if (!fzone) {\n return of([]);\n }\n this._loading.next(true);\n return this.querySpace(type, fzone, dateTz, dailyCount);\n }),\n catchError((e) => { \n return of([]);\n })\n );\n }\n\n private querySpace(type: string, fzone: string, dateTz: DateTZ, dailyCount: boolean = false) : Observable | Observable{\n const start = () => {\n const s = dateTz;\n if (type === 'week') {\n return s.startOfValue('week');\n } else {\n return s.startOfValue('month');\n }\n };\n\n const end = () => {\n const e = start();\n if (type === 'week') {\n /**\n * To Do: date-tz.class.ts endOfValue subtracts 1 day from end of week for 7 days a week type which returns Friday instead of Saturday\n * below is the adjustment -\n */\n return e.addValue({ days: 1 }).endOfValue('week');\n } else {\n return e.endOfValue('month');\n }\n /**\n * R--- when testing March 2022 London offices, the month is an hour short.\n * Is this a Luxon bug or London DST?\n */\n };\n\n // dates here are ok\n return this._spaces.queryBooking({\n zone_ids: fzone,\n available_from: start().seconds,\n available_to: end().seconds,\n ...(dailyCount) ? { daily_count: true } : ''\n });\n }\n\n\n public getDailyMeetingCount() : void {\n this._long_poll.next('month');\n this.buildSpaceLongQuery(true).subscribe((counts) => {\n this._noOfMeetings.next(counts);\n this._loading.next(false);\n });\n }\n\n /**\n * Update the booking filters\n * @param details\n */\n public setFilters(details: BookingFilters) {\n this._filters.next(details);\n }\n\n /**\n * Update the booking date\n * @param details\n */\n public setDate(dateTz: DateTZ) {\n this._dateTz.next(dateTz);\n }\n\n /**\n * Update the booking's zone\n * @param details\n */\n public setZone(zone: string) {\n this._zone.next(zone);\n }\n\n /**\n * update day view once\n */\n public pollOnce(){\n this._poll.next(true);\n }\n \n /**\n * Start polling to update bookings\n * @param delay Duration between polling events in milliseconds\n */\n public startPolling(delay: number = 30 * 1000) {\n this._poll.next(true);\n this.ngZone.runOutsideAngular(() => {\n this.interval('polling', () => this._poll.next(true), delay);\n });\n }\n\n /**\n * Start polling to update bookings\n * @param delay Duration between polling events in milliseconds\n */\n public startPollingWeek(delay: number = 4 * 30 * 1000 ) {\n this._long_poll_week.next('week');\n this.ngZone.runOutsideAngular(() => {\n this.interval(\n 'polling_long',\n () => this._long_poll_week.next('week'),\n delay\n );\n });\n }\n /**\n * Start polling to update bookings\n * @param delay Duration between polling events in milliseconds\n */\n public startPollingEveryFiveMin(delay: number = 60 * 1000) {\n this._poll.next(true);\n this.ngZone.runOutsideAngular(() => {\n this.interval('polling', () => this._poll.next(true), delay);\n });\n }\n \n /**\n * Start polling to update bookings\n * @param delay Duration between polling events in milliseconds\n */\n public startPollingMonth(delay: number = 5 * 60 * 1000) {\n this._long_poll.next('month');\n this.ngZone.runOutsideAngular(() => {\n this.interval(\n 'polling_long',\n () => this._long_poll.next('month'),\n delay\n );\n });\n }\n\n\n /**\n * Stop polling to update bookings;\n */\n public stopPolling() {\n this._poll.next(false);\n this.clearInterval('polling');\n this._long_poll.next('');\n this.clearInterval('polling_long');\n }\n\n public updateRoomList() {\n this._spaces.updateRoomList();\n }\n\n /**\n * Add booking to bookings listing\n * @param booking\n */\n public add(booking: Booking) {\n const bookings = this._bookings.getValue();\n const new_bookings = bookings.concat([booking]);\n this._bookings.next(new_bookings);\n }\n\n /**\n * Update booking in the bookings list\n * @param booking\n */\n public replace(booking: Booking) {\n const bookings = this._bookings.getValue();\n const new_bookings = bookings\n .filter(\n (bkn) =>\n bkn.icaluid !== booking.icaluid && bkn.id !== booking.id\n )\n .concat([booking]);\n this._bookings.next(new_bookings);\n }\n\n /**\n * Remove booking in the bookings list\n * @param booking\n */\n public remove(booking: Booking) {\n const bookings = this._bookings.getValue();\n const new_bookings = bookings.filter(\n (bkn) => bkn.icaluid !== booking.icaluid\n );\n this._bookings.next(new_bookings);\n }\n\n public attentToDelete(\n booking: Booking,\n action: 'series' | 'booking' = 'booking',\n undo: boolean = false\n ) {\n const bookings = this._bookings.getValue();\n const attempted_to_delete = ((action) => {\n return (bkg: Booking) => {\n switch (action) {\n case 'booking': {\n const booking_master = bookings.find(\n (bkn) => bkn.icaluid === booking.icaluid\n );\n if (!booking_master) return false;\n return bkg.id === booking.id;\n }\n case 'series': {\n const booking_master = bookings.find(\n (bkg) =>\n bkg.id ===\n (booking.recurrence_type === 'occurrence'\n ? booking.recurrence_master_id\n : booking.id)\n );\n if (!booking_master) return false;\n return (\n booking_master.id === bkg.id ||\n bkg.recurrence_master_id === booking_master.id\n );\n }\n default:\n false;\n }\n };\n })(action);\n\n const new_bookings = [...bookings].map((bkg) => {\n if (!undo && attempted_to_delete(bkg)) {\n bkg.attempted_to_delete = action;\n }\n\n if (undo && attempted_to_delete(bkg)) {\n bkg.attempted_to_delete = null;\n }\n\n return bkg;\n });\n\n this._bookings.next(new_bookings);\n }\n\n private processBookings(\n space_list: Space[],\n period: 'day' | 'week' | 'month' = 'day'\n ) {\n const start = () => {\n switch (period) {\n case 'month':\n return this.booking_date.startOfValue('month');\n case 'week':\n return this.booking_date.startOfValue('week');\n default:\n return this.booking_date.startOfValue('day');\n }\n };\n const end = () => {\n const s = start();\n switch (period) {\n case 'month':\n return s.endOfValue('month');\n case 'week':\n return s.endOfValue('week');\n default:\n return s.endOfValue('day');\n }\n };\n\n let bookings = this._bookings.getValue();\n space_list.forEach((space) => {\n return (bookings = replaceBookings(\n bookings,\n space.bookings.map((bkn) => new Booking(bkn)),\n {\n room_email: space.email,\n fromTz: start(),\n toTz: end(),\n }\n ));\n });\n this._bookings.next(bookings);\n }\n\n // private filterBookings(startTz: DateTZ, endTz: DateTZ) {\n // const filters = this._filters.getValue();\n // const bookings = this._bookings.getValue();\n // const fzone = this._zone.getValue();\n // return bookings.filter((bkn) => {\n // const intersects = timePeriodsIntersect(\n // startTz.ms,\n // endTz.ms,\n // bkn.startDateTz.ms,\n // bkn.endDateTz.ms\n // );\n // const in_zone = bkn.room.zones.includes(fzone);\n // const has_space =\n // !filters.space_emails?.length ||\n // filters.space_emails.includes(bkn.room.email);\n // const in_zones =\n // !filters.zone_ids?.length ||\n // !!bkn.room.zones.find((zone) =>\n // filters.zone_ids.includes(zone)\n // );\n // const type = bkn.declined ? 'declined' : bkn.getType();\n\n // const show =\n // !filters.hide_type?.length ||\n // !filters.hide_type.includes(type as any);\n // return intersects && has_space && in_zone && in_zones && show;\n // });\n // }\n\n private filterBookings(startTz: DateTZ, endTz: DateTZ) {\n const filters = this._filters.getValue();\n const bookings = this._bookings.getValue();\n const fzone = this._zone.getValue();\n return bookings.filter((bkn) => {\n const intersects = timePeriodsIntersect(\n startTz.ms,\n endTz.ms,\n bkn.startDateTz.ms,\n bkn.endDateTz.ms\n );\n // Check if any room in the booking satisfies the conditions\n const roomSatisfiesConditions = bkn.multi_rooms.some((room) => {\n const in_zone = room.zones.includes(fzone);\n const has_space =\n !filters.space_emails?.length ||\n filters.space_emails.includes(room.email);\n const in_zones =\n !filters.zone_ids?.length ||\n !!room.zones.find((zone) => filters.zone_ids.includes(zone));\n return in_zone && has_space && in_zones;\n });\n \n const type = bkn.declined ? 'declined' : bkn.getType();\n \n const show =\n !filters.hide_type?.length ||\n !filters.hide_type.includes(type as any);\n return intersects && roomSatisfiesConditions && show;\n });\n } \n\n /**If Sunday add one day to get Saturday as end of week */\n private getEndOfWeek(date: DateTZ): DateTZ {\n return date.dateWeekday === 7\n ? date.addValue({ days: 1 }).endOfValue('week').endOfValue('day')\n : date.endOfValue('week').endOfValue('day');\n }\n}\n","import { BaseDataClass } from '../base-api.class';\nimport { CateringOrder } from '../catering';\nimport { User } from '../users';\nimport {\n flatten,\n HashMap,\n humaniseDuration,\n shorterBuildingDateFormatString,\n shorterLocalDateFormatString,\n toTitleCase,\n unique\n} from '@mckinsey-converge/base';\nimport { Space } from '../spaces/space.class';\nimport { ServiceManager } from '../service-manager.class';\nimport { SettingsService } from '../settings.service';\nimport {\n BookingNote,\n} from './booking.types';\nimport { convertLocalTimestampToTimezonedDateTz, DateNow, DateTZ, getTimezoneOffsetString } from '@mckinsey-converge/date-tz';\nimport { DaysOfWeek, getLastDateFromList, handleRecurrenceFields, RecurrencePeriod } from '../recurrence/recurrence.utils';\nimport { findSpace } from '../spaces';\nimport { DateTime } from 'luxon';\n\n\nexport interface IBookingQueryOptions {\n /** booking ID */\n id?: string;\n email?: string;\n target?: string;\n from?: number; // R--- depreciate\n until?: number; // R--- depreciate\n fromTz?: DateTZ;\n untilTz?: DateTZ;\n show_cancelled?: boolean;\n pagination?: boolean;\n limit?: number;\n offset?: number;\n sort?: string,\n filters?: any;\n include_rooms?: boolean;\n building_zone?: string;\n}\n\nexport class Booking extends BaseDataClass {\n /** Unique calendar event ID */\n // public readonly icaluid: string;\n /** Subject or title of the booking */\n public title: string;\n /** Luxon based date class of the booking start time */\n public startDateTz: DateTZ;\n /** Luxon based date class of the booking start time */\n public endDateTz: DateTZ;\n /** Description or details of the booking */\n public readonly body: string;\n /** Type of booking */\n public readonly booking_type: string;\n /** List of catering orders for the booking */\n public catering: readonly CateringOrder[];\n /** Whether booking's duration covers all day */\n public readonly all_day: boolean;\n /** Mapping of emails to approval statuses */\n public approval_status: HashMap;\n /**\n * New booking approval status set in constructor\n *\n * timeBasedStatusLabel is a getter calculated via current time, some parts of the application\n * may use status when it should use timeBasedStatusLabel\n */\n public status: 'tentative' | 'accepted' | 'approved' | 'declined' | 'cancelled' | 'expired' | 'unavailable';\n /** Host/Organiser of the booking */\n public organiser: User;\n /** List of people invited to attend the booking */\n public attendees: User[];\n /** Author of the booking */\n public readonly creator: User;\n\n /** List of notes associated with the booking */\n public notes: readonly BookingNote[];\n /** Mapping of spaces to equipment charge codes */\n public equipment_codes: HashMap;\n /** Mapping of spaces to expected number of attendees */\n public expected_attendees: HashMap;\n /** Map of space emails to the setup time before the meeting in minutes */\n public setup: HashMap;\n /** List of checked in attendees */\n public check_ins: object;\n /** Map of space emails to the breakdown time before the meeting in minutes */\n public breakdown: HashMap;\n /** List of fields edited since creation */\n public readonly edits: string[];\n /** List of users to be notified on visitor arrivals */\n public readonly notify_users: readonly string[];\n /** Whether the time or duration has changed */\n public time_changed = false;\n /**\n * Booking Space\n * Bookings only have one room on MCK\n */\n public room: Space;\n /** building_zone */\n public building_zone: string;\n /** Initialized Timezone */\n public timezone: string;\n /** Array of company names */\n public company?: string[];\n /** Flag for multiroom booking */\n public is_multiroom: boolean;\n /** Multiroom booking ID */\n public multiroom_master_id: string; \n /** Merged - field holds flag for merged-multiroom booking which tightly coupled with multiroom booking only */\n public merged: boolean;\n /** Type of recurrence, Shows whether this is a master or an occurence in the series. */\n public readonly recurrence_type: string;\n /** The frequency of the recurring booking. */\n public readonly recurrence_period: RecurrencePeriod;\n /** The interval time between each period. Defaults to 1. For example, with a period of \"weekly\" and an interval of 2, the recurrencd happen every 2 weeks. */\n public readonly recurrence_interval: number;\n /** Unix epoch in seconds of the recurrence end date */\n private _recurrence_endTz: DateTZ;\n /** The number of times to repeat the recurring booking. */\n public readonly recurrence_count: number;\n /** ID of the booking considered the master */\n public readonly recurrence_master_id: string;\n /** An array of booking IDs which belong to this recurring series. This INCLUDES the master booking ID. */\n public readonly occurrence_ids: string[];\n /** A list of INDIVIDUAL edits to any of the bookings in the series. This is so we can prompt the user if they are going to override previously updated bookings with a whole-series update. */\n public readonly occurrence_edits: string[];\n /** A list of Ocurrences */\n public readonly occurrence_details: { id: string, start_epoch: number }[];\n /** When the booking was created */\n public created_epoch: number;\n /** Is the Application concierge */\n public is_concierge: boolean;\n /**helper to know if recurring toggle is on */\n public is_recurrent: boolean;\n /**array of start dates of each ocurrence in the series */\n public recurrence_starts: Array\n /**array of conflicting dates not to be included in the recurrence series */\n public recurrence_exceptions: Array\n\n public recurrence_days?: Array\n\n /** Master recurrence start */\n public recurrence_start: number;\n\n /** Start Epoch */\n public start_epoch: number;\n public end_epoch: number;\n public level_zone: string;\n public opt_out: boolean;\n public multi_rooms: Space[];\n public room_setup: any;\n public room_breakdown: any;\n public headcount: number;\n public equipment_code: string;\n\n /** Currently back-end is not properly setting the recurrence_end property, this is a workaround */\n public get recurrence_endTz(): DateTZ {\n return this._recurrence_endTz;\n }\n\n public set recurrence_endTz(date: DateTZ) {\n this._recurrence_endTz = date;\n }\n\n /** Mark a booking for deleting */\n public attempted_to_delete?: 'series' | 'booking' | null;\n\n // No specific reason to set readonly but canm be change if needed to update in future\n public readonly booked_by : string | { name: string };\n public readonly booker: Object;\n public readonly booker_concierge: Object\n\n constructor(raw_data: HashMap = {}) {\n super(raw_data);\n // Needed to check if the current app is Concierge or Staff\n const settingsService = ServiceManager.serviceFor(SettingsService) as unknown as SettingsService;\n this.is_concierge = settingsService.concierge;\n\n /**\n * Setup Defaults when raw_data values are not provided\n */\n const nowTz = new DateTZ();\n\n const defaultTitle = ''; // Blank since the create booking form will init with test values.\n const defaultLocalTimezone = Intl?.DateTimeFormat()?.resolvedOptions()?.timeZone;\n const defaultBuildingZone = null // R --- no idea, should be a building.id but which and how\n const defaultOrgainiser = User.active_user || new User(); // meh, non American use.\n const defaultBookingType = 'internal';\n\n /**\n * Process the simple raw_data with defaults mixed in\n */\n this.title = raw_data.title || defaultTitle;\n this.timezone = raw_data.timezone || defaultLocalTimezone;\n // Used by components to get the building details\n this.building_zone = raw_data.building_zone || defaultBuildingZone;\n this.body = raw_data.body || '';\n // Provided booking type\n this.booking_type = raw_data.booking_type || defaultBookingType;\n // Attendees provided in API booking data\n this.attendees = (raw_data.attendees || []).map((i) => new User(i));\n // Provided organiser, active user, or empty user?\n this.organiser = raw_data.organiser ? new User(raw_data.organiser) : defaultOrgainiser;\n // Creator is provided or defaults to the organizer\n this.creator = (raw_data.booked_by ? new User(raw_data.booked_by) : defaultOrgainiser) || this.organiser;\n // Setup and breakdown times can conflict but not the true event start and end times\n this.setup = raw_data.setup || {};\n this.breakdown = raw_data.breakdown || {};\n this.room_setup = raw_data.room_setup;\n this.room_breakdown = raw_data.room_breakdown;\n // Notes are assigned by room but we only support a single room\n this.notes = raw_data.notes || [];\n this.equipment_codes = raw_data.equipment_codes || {};\n this.equipment_code = raw_data.equipment_code || '';\n this.expected_attendees = raw_data.expected_attendees || {};\n this.headcount = raw_data.headcount;\n this.check_ins = raw_data.check_ins || {};\n this.notify_users = raw_data.notify_users?.length ? raw_data.notify_users : [this.organiser?.name];\n this.company = raw_data.company || [];\n // retain booked by if there : helps to get correct creator above\n this.booked_by = raw_data.booked_by;\n this.booker = raw_data.booker;\n this.booker_concierge = raw_data.booker_concierge;\n this.level_zone = raw_data.level_zone;\n this.opt_out = raw_data.opt_out;\n\n /**\n * \n */\n this.merged = raw_data?.merged || null;\n\n /**\n * Multiroom fields\n */\n this.is_multiroom = raw_data.is_multiroom || null;\n this.multiroom_master_id = raw_data.multiroom_master_id || null;\n\n /**\n * Setup Defaults when raw_data values are not provided\n *\n * all room_ids and space_list inputs can be refactored into just room like an API booking\n *\n * raw_data.room can be provides as the Space class or JSON object\n */\n // this.room = raw_data.room ? new Space(raw_data.room) : new Space();\n // this.room = raw_data?.room ? (Array.isArray(raw_data?.room) && raw_data.room.length > 0) ? raw_data?.room.map((element) => new Space(element))[0]: [new Space(raw_data.room)][0] : [new Space()][0];\n // this.room = raw_data.room ? new Space(raw_data.room) : new Space();\n\n if (raw_data && raw_data.room) {\n if (Array.isArray(raw_data.room) && raw_data.room.length) {\n this.room = raw_data.room.map((element) => new Space(element))[0];\n } else if (Array.isArray(raw_data.room) && raw_data.room.length === 0) {\n this.room = [new Space()][0];\n } else {\n this.room = [new Space(raw_data.room)][0];\n }\n } else {\n this.room = [new Space()][0];\n }\n\n\n const room_id = raw_data.room_id || raw_data.room_ids // Not sure why we have room_id and room_ids\n if (!this.room?.id && room_id?.length) {\n this.room = findSpace(room_id[0]) || this.room;\n }\n\n const roomsData = raw_data?.multi_rooms || raw_data?.room;\n this.multi_rooms = roomsData\n ? Array.isArray(roomsData)\n ? roomsData.map((element) => new Space(element))\n : [new Space(roomsData)]\n : [new Space()];\n\n \n const room_ids = [...(raw_data?.room_id || []), ...(raw_data?.room_ids || [])];\n\n room_ids.forEach(roomId => {\n const newRoom = findSpace(roomId);\n // Check if the room is found and not already included in this.room\n if (newRoom && !this.multi_rooms.some(room => room.id === newRoom.id)) {\n // Add the new room to this.room\n this.multi_rooms.push(newRoom);\n }\n });\n\n // this.room is sometimes getting set to undefined when raw_data?.room is coming as an object\n if(this.multi_rooms.length && this.room === undefined){\n this.room = this.multi_rooms[0];\n }\n \n /**\n * Setup the booking start and end time\n *\n *\n * Booking defaults to now if start is not defined.\n * Booking durration is now a getter\n */\n // now rounded to the next 5 minute increment\n const defaultStartTz = new DateTZ({ date: nowTz.ms, is_local_tz: false, building_tz: this.timezone }).setValue({ minute: Math.ceil(nowTz.minutes / 5) * 5 });\n\n /**\n * When saving a booking the BaseDataClass doens't know to use the toAPIJson\n * so startDateTz isn't being convert to the epoch timestamp\n *\n * I'm not testing for the end time values because we can assume those follow the same pattern.\n */\n const startEpochProvided = !!(raw_data.start_epoch || raw_data.start);\n const startDateTzProvided = !!raw_data.startDateTz;\n\n /**\n * Not trying to be fancy here, just clear.\n */\n if (!startEpochProvided && startDateTzProvided) {\n /**\n * Once a booking is saved the BaseDataClass recreates the Booking\n * but doesn't use the toApiJSON method adapt the class input, mainly the\n * startDateTz isn't converted to the start_epoch timestamp.\n */\n this.startDateTz = raw_data.startDateTz;\n this.endDateTz = raw_data.endDateTz;\n } else if (startEpochProvided) {\n /**\n * A Booking created from the API responses arrives with the booking\n * start_epoch and end_epoch timestamps.\n */\n this.startDateTz = new DateTZ({\n date: ((raw_data.start_epoch || raw_data.start) * 1000),\n is_local_tz: false,\n building_tz: this.timezone\n });\n this.endDateTz = new DateTZ({\n date: ((raw_data.end_epoch || raw_data.end)* 1000),\n is_local_tz: false,\n building_tz: this.timezone\n });\n } else {\n /**\n * And there are uses of new Booking where there are no inputs\n * and defaults are necessary.\n */\n this.startDateTz = defaultStartTz;\n this.endDateTz = defaultStartTz.addValue({ minutes: 60 });;\n }\n\n /**\n * End time was by design ending at one minute before, IE 4:00PM is 3:59PM,\n * because of calendar and conflcit checking\n *\n * Check and finesse it.\n * Not sure why but some booking endtime added extra seconds\n */\n if ((this.endDateTz.minutes % 5) !== 0 || this.endDateTz.second > 0) {\n // Not sure of the source but some bookings do not conform.\n this.endDateTz = this.endDateTz.setValue({ second: 0, minute: Math.round(this.endDateTz.minutes / 5) * 5 });\n }\n\n\n\n /**\n * Setup the booking created_date\n *\n * if it exists as a key, use the value directly.\n * if we initialize without a value, switch to checking duration.\n * Ref: MCK-826\n */\n this.created_epoch = raw_data.created_epoch || nowTz.seconds;\n\n\n /**\n * Setup the booking all_day boolean\n *\n * if it exists as a key, use the value directly.\n * if we initialize without a value, switch to checking duration.\n * Ref: MCK-826\n */\n if ('all_day' in raw_data) {\n this.all_day = raw_data.all_day;\n } else {\n this.all_day = !!raw_data.all_day || this.duration > 23 * 60;\n }\n\n\n // R--- TODO Concierge will use startDateTz so i'm not sure if this is needed.\n if (!this.is_concierge && this.all_day && this.timezone) {\n /**\n * Concierge has a all_day form field, I can see it may need this for that, does it really?\n */\n this.startDateTz = this.startDateTz.startOfValue('day')\n }\n\n /**\n * Setup the booking approval status\n */\n let status = raw_data.status;\n // If not provided default to approved.\n if (!raw_data.status) {\n status = 'accepted';\n }\n // \"show_as\" is a special rule to override how the applications display the status\n if (raw_data.show_as && raw_data.show_as === 'cancelled') {\n status = 'declined';\n }\n const approvalStatus = {};\n this.multi_rooms.forEach(room => {\n approvalStatus[room.email] = status;\n });\n // Tracking new \"status\" and legacy \"approval_status\" from raw_data.status.\n this.status = status;\n this.approval_status = raw_data.approval_status || {};\n\n /**\n * Catering setup\n *\n * Bring in and sort the catering order by delivery time\n */\n\n this.catering = (raw_data.catering instanceof Array ? raw_data.catering : []).map(\n (i) => new CateringOrder(i)\n );\n\n\n\n /**\n * Edited fields setup\n *\n * Bring in and sort the catering order by delivery time\n *\n * cateringOrders can return the order sorted\n */\n const edited_fields = Array.isArray(raw_data.edits)\n ? raw_data.edits\n : unique(\n flatten(\n Object.keys(raw_data.edits || {}).map((room) => {\n return flatten(Object.values(raw_data.edits[room]));\n })\n )\n );\n this.edits = edited_fields;\n\n /**\n * New Recurring booking feilds\n *\n * New fields do not match the BookingRecurrenceDetails type\n * and are simpler to manage this way\n */\n this.recurrence_count = raw_data.recurrence_count || null;\n this.recurrence_days = raw_data.recurrence_days || null;\n this.occurrence_edits = raw_data.occurrence_edits || null;\n this.recurrence_endTz = raw_data.recurrence_end ? new DateTZ({date: raw_data.recurrence_end * 1000, is_local_tz: false, building_tz: this.timezone}) : null;\n this.recurrence_exceptions = raw_data.recurrence_exceptions || null;\n this.occurrence_ids = raw_data.occurrence_ids || null;\n this.recurrence_interval = raw_data.recurrence_interval || null;\n this.recurrence_period = raw_data.recurrence_period || null;\n this.recurrence_type = raw_data.recurrence_type || null;\n this.recurrence_master_id = raw_data.recurrence_master_id\n this.occurrence_details = raw_data.occurrence_details\n this.is_recurrent = raw_data.is_recurrent || (!!this.recurrence_type && !!this.recurrence_period) || null;\n this.recurrence_starts = raw_data.recurrence_starts || []\n this.start_epoch = raw_data.start_epoch\n this.end_epoch = raw_data.end_epoch\n\n /**\n * I'm not clear why, but the booking body, aka description is copied into the notes.\n * R--- In concerge data description is only a key when saving, also in the note array?\n */\n if (raw_data.body && !this.notes.find((i) => i.type === 'description')) {\n this.notes = [\n ...this.notes,\n {\n type: 'description',\n date: 0,\n message: raw_data.body,\n author: this.organiser.email\n }\n ];\n }\n\n /**\n * In case there is a cancellation in progress the property attempted_to_delete is set to false\n * And it is persisted until the booking is gone\n */\n this.attempted_to_delete = raw_data.attempted_to_delete || null;\n }\n\n\n /** Service for managing Bookings */\n protected get _service() {\n return ServiceManager.serviceFor(Booking);\n }\n\n /** Alias to approval_status */\n public get auto_approve(): boolean {\n // if concierge we auto_approve always.\n if (this.is_concierge) {\n return true;\n }\n return !this.multi_rooms.some(room => room.byRequest({\n dateTz: this.startDateTz,\n duration: this.duration,\n host: this.organiser\n }));\n }\n\n /** Whether booking has been approved */\n public get approved(): boolean {\n return !this.declined && !this.tentative;\n }\n\n /** All of the booking attendees including the organizer */\n public get allAttendees(): User[] {\n return unique([this.organiser].concat(this.attendees), 'email');\n }\n\n /** Computer format for booking type */\n public get bookingTypeId(): string {\n return this.booking_type.toLowerCase();\n }\n\n /** Human format for booking type */\n public get bookingTypeLabel(): string {\n return toTitleCase(this.booking_type);\n }\n\n /** Get accessor for the check in object, app expect array */\n public get checkInsArray(): string[] {\n return Object.keys(this.check_ins || {})\n }\n\n /** Legacy getter for \"class\" */ // R-- TODO remove\n public get class(): string {\n return this.booking_type;\n }\n\n /** */\n public get displayEndDateTz(): DateTZ {\n if ((this.endDateTz.minutes % 5) !== 0) {\n // All the bookings should end in 59 seconds\n return this.endDateTz.addValue({ seconds: 1 });\n }\n // but if not they return 00\n return this.endDateTz;\n }\n\n /** Whether booking has been declined */\n public get declined(): boolean {\n /**\n * I'm not sure, nor is Cam if this is ever used to decline\n * all booking for a specific room\n */\n const isAnyRoomDeclined = this.multi_rooms.some(room => room.name.toLowerCase().includes('decline'));\n if (isAnyRoomDeclined) {\n return true;\n }\n\n if (this.status.includes('decline')) {\n return true;\n }\n\n return false;\n }\n\n /** Description of the booking purpose */\n public get description(): string {\n const note = (this.notes || []).find((i) => i.type === 'description');\n return note ? note.message : '';\n }\n\n /** Catering getter */\n public get cateringOrders() {\n // Return the catering orders sorted by delivery time\n return this.catering ? this.catering.slice().sort((a, b) => {\n if (a?.delivery_time > b?.delivery_time) return 1;\n if (b?.delivery_time > a?.delivery_time) return -1;\n\n return 0;\n }) : [];\n }\n\n /** Get the created date as DateTz */\n public get creationDateTz() {\n return new DateTZ({ date: this.created_epoch * 1000, is_local_tz: false, building_tz: this.timezone })\n }\n\n public get tz_offset() {\n return getTimezoneOffsetString(this.timezone);\n }\n\n /** Display value for the date */\n public get date_string(): string {\n return this.startDateTz.formatDate('dd MMM yyyy');\n }\n\n /**\n * Get the booking durration based on start and end times\n */\n public get duration(): number {\n return Math.abs(this.startDateTz.startOfValue('minute').dateDiff(this.displayEndDateTz, 'minutes'));\n }\n\n /** Unix timestamp of the booking start */\n public get date() { // R--- remove if not necessary\n return this.startDateTz.ms;\n }\n\n /** Whether booking contains external visitors in the attendee list */\n public get has_visitors(): boolean {\n return this.attendees.reduce((a, v) => a || v.external, false);\n }\n\n /** Does the booking have catering orders */\n public get has_catering(): boolean {\n return !!this.catering.length;\n }\n\n /**\n * Unique calendar event ID\n * same as this.id, used to support existing component usage\n */\n public get icaluid(): string {\n return this.id;\n }\n\n /**\n * Get the booking room id\n */\n public get room_id(): string {\n return this.room.id;\n }\n\n /** Legacy getter of room, aka space */\n public get space(): Space {\n return this.room;\n }\n\n /** Status of the booking */\n public get timeBasedStatusLabel(): 'future' | 'upcoming' | 'done' | 'started' | 'in_progress' | 'expired_yesterday' {\n const buildingTzDt = DateNow(new Date()).toZone(this.timezone) ; // building time\n\n if (DateNow(new Date()).isBeforeDate(this.startDateTz.subtractValue({ minutes: 15 }))) {\n return 'future';\n } else if (DateNow(new Date()).isBeforeDate(this.startDateTz)) {\n return 'upcoming';\n } else if (DateNow(new Date()).isBeforeDate(this.startDateTz.addValue({ minutes: 15 }))) {\n return 'started';\n } else if (DateNow(new Date()).isBeforeDate(this.startDateTz.addValue({ minutes: this.duration }))) {\n return 'in_progress';\n }\n // if current time is 12 AM (as per timezone) and booking expired yesterday\n else if(buildingTzDt.startOfValue('day').addValue({ minutes: 1 }).isAfterDate(this.startDateTz, 'day') ) {\n return 'expired_yesterday'\n }\n\n return 'done';\n }\n\n /** Whether booking is tentative */\n public get tentative(): boolean {\n if (\n this.status &&\n this.status.indexOf('tentative') >= 0\n ) {\n return true;\n }\n\n return false;\n }\n\n /** Display valuie for the start and end times of the booking */\n public get time_period(): string {\n return `${this.startDateTz.formatDate('h:mma')} - ${this.displayEndDateTz.formatDate('h:mma')}`;\n }\n\n /** Display value for the start time of the booking */\n public get start_time(): string {\n return this.startDateTz.formatDate('h:mma');\n }\n\n /** Display value for the end time of the booking */\n public get end_time(): string {\n return this.endDateTz.formatDate('h:mma');\n }\n\n /** Display value for the duration of the booking */\n public get length_string(): string {\n return humaniseDuration(this.duration);\n }\n\n /** Display value for the location of the booking */\n // public get local_room_name(): string {\n // return this.room?.local_name || 'No location';\n // }\n public get local_room_name(): string {\n if (this.multi_rooms.length === 0) {\n return 'No location';\n } else {\n return this.multi_rooms.map(room => room.local_name).join(', ');\n }\n } \n\n /** Display value for the level of the first space in the booking */\n public get level(): string {\n return this.space.level.name;\n }\n\n /**\n * Make a copy of this object\n */\n public clone(): Booking {\n return new Booking(this.toJSON());\n }\n\n /**\n * Make a copy of this object without identification data\n */\n public duplicate(isEdit = false): Booking {\n return new Booking({\n ...this.toJSON(),\n id: isEdit ? this.id : null,\n });\n }\n\n /**\n *\n * @param status\n * @returns void\n */\n public undo(status?: 'accept' | 'decline', opts: { series?: boolean } = {}): Promise {\n return this._service.undo(\n this.id, status || 'accept',\n opts\n );\n }\n\n /**\n * Delete booking from the server\n */\n public delete(opts: { series?: boolean } = {}): Promise {\n if (this.id) {\n return this._service.delete(this.id, { ...opts });\n\n // R-- ask Cam again is he's positive these extra params are not needed for anything\n // return this._service.delete(this.id, {\n // concierge: this.is_concierge,\n // host: this.organiser.email,\n // room_id: this.space?.id,\n // icaluid: this.icaluid,\n // start: json.start,\n // end: json.end\n // });\n }\n }\n\n /**\n * Convert object into plain object\n */\n public toJSON(this: Booking): HashMap {\n let data = super.toJSON();\n // Remove the description from the notes\n data.notes = Array.isArray(data.notes) ? data.notes.filter((note) => note.type !== 'description') : data.notes;\n // Encode the nested objects\n data.room = data.room.toJSON();\n\n\n\n data.organiser = data.organiser.toJSON();\n data.creator = data.creator?.toJSON ? data.creator.toJSON(): data.creator;\n // Map the attendees User objects\n data.attendees = data.attendees.map((i: User) => i.toJSON());\n\n // New recurring booking\n data = handleRecurrenceFields(data)\n\n if(data.recurrence_list){\n data.recurrence_starts = [...data.recurrence_list]\n delete data.recurrence_list\n }\n\n return data;\n }\n\n /**\n * Convert object into plain object\n */\n public toApiJSON(this: Booking): HashMap {\n let data = super.toJSON();\n\n // Update booking payload contains additional fields\n data.icaluid = \"\";\n if (data.id) {\n data.icaluid = data.id;\n data.location_name = this.multi_rooms.map((item)=>{return item.local_name}).join(', ');\n data.from_room = this.multi_rooms.map((item)=>{return item.email}).join(', ');\n data.building_zone = this.room?.building?.id;\n }\n\n /**\n * These fields are rather in flux\n * According to Cam \"approve\" will be the prefered field\n * and auto_approve and approval_status can be removed.\n */\n data.approve = this.auto_approve; // this value appear incorrect on update\n data.auto_approve = [this.auto_approve]; // Needed to update approval status until BE accepts \"approve\"\n // delete data.approval_status;\n\n // Booking start and end data\n delete data.startDateTz;\n delete data.endDateTz;\n data.start = this.startDateTz.seconds;\n data.end = this.endDateTz.seconds;\n data.old_start = this.startDateTz.seconds; // remove is not necessary\n data.old_end = this.endDateTz.seconds; // remove is not necessary\n\n // Creation date value\n delete data.created_epoch;\n data.creation_date = this.creationDateTz.seconds;\n\n // Catering fields\n // data.catering = data.catering.toJSON();\n data.catering = this.cateringOrders;\n data.has_catering = this.has_catering;\n delete data.cateringOrders\n\n // Attendees appear quite incomplete\n // Map the attendees User objects\n data.attendees = this.allAttendees.map((i: User) => i.toJSON ? i.toJSON() : i);\n\n // Orgainizer and Creator data\n data.organiser = data.organiser.toJSON ? data.organiser.toJSON() : data.organiser;\n data.creator = data.creator.toJSON ? data.creator.toJSON() : data.creator;\n\n // Convert check_ins to checked_in array\n delete data.check_ins;\n data.checked_in = this.checkInsArray;\n\n // edits - edit booking is showing all fields even w/o an edit :(\n\n // Room data\n data.room_ids = this.multi_rooms.map((item)=>{return item.email});\n delete data.room;\n\n // New recurring booking\n data = handleRecurrenceFields(data)\n\n\n if(data.recurrence_list){\n data.recurrence_starts = [...data.recurrence_list]\n delete data.recurrence_list\n }\n\n // Not found in dev data\n delete data.name;\n delete data.email;\n delete data.is_concierge;\n // delete data.building_zone;\n // delete data.status;\n\n return data;\n }\n\n public getType(): string {\n if (!this || this.status?.includes('decline')) {\n return 'cancelled';\n }\n const booking_type = this.booking_type;\n if (booking_type === 'internal' && this.has_visitors) {\n return 'external';\n }\n return booking_type;\n }\n\n /** fallback for a booking when the recurrence_end is null but it's a series booking */\n public recurrenEndFromOcurrences(occurrence_details: { id: string, start_epoch: number }[]): DateTZ {\n const date = occurrence_details?.map(occurence => occurence)\n .sort((a, b) => new Date(a.start_epoch * 1000).getTime() - new Date(b.start_epoch * 1000).getTime())\n .reverse()\n .shift()\n .start_epoch * 1000\n return new DateTZ({date, is_local_tz: false, building_tz: this.timezone});\n }\n\n public get dateString() {\n return shorterLocalDateFormatString(this.startDateTz);\n }\n public get dateBuildingString() {\n return shorterBuildingDateFormatString(this.startDateTz);\n }\n\n public get endDateString(): string {\n return shorterLocalDateFormatString(this.recurrenEndFromOcurrences(this.occurrence_details));\n }\n}\n\n/**\n * Merge catering orders with same time and location\n * @param order_list List of catering orders\n */\nexport function mergeCateringOrders(order_list: CateringOrder[]) {\n // R--- investigate when this is used. Staff doesn't use it when adding catering orders.\n for (let i = 0; i < order_list.length; i++) {\n const orders = order_list.filter(\n (order) =>\n order.location_id === order_list[i].location_id &&\n order.delivery_time === order_list[i].delivery_time\n );\n if (orders.length > 1) {\n const new_list = order_list.filter(\n (order) =>\n !(order.location_id === order_list[i].location_id &&\n order.delivery_time === order_list[i].delivery_time)\n );\n new_list.push(new CateringOrder({\n ...order_list[i],\n items: flatten(orders.map(order => order.items)),\n booking_date: this.startDateTz.ms,\n booking_timezone: this.booking_timezone,\n }));\n order_list = new_list;\n i = 0;\n }\n }\n return order_list;\n}\n","import { DateTZ } from \"@mckinsey-converge/date-tz\";\n\nexport interface SpaceRules {\n auto_approve: boolean; // if false sapce is requestable else bookable\n hide: boolean;\n max_length?: number;\n min_length?: number;\n reason?: string // specially for non-bookable rooms\n}\n\nexport interface BookingNote {\n /** Type of note */\n type: 'equipment' | 'catering' | 'description' | 'private' | 'other' | 'catering-private';\n /** Name of the note's author */\n author: string;\n /** Contents of the note */\n message: string;\n /** Time the note was added to the booking */\n date: number;\n /** Display value for the time */\n time?: string;\n /** ID of the space associated with the note */\n space?: string;\n /** ID of the catering order associated with the note */\n order_id?: string;\n}\n\nexport interface DateDurationData {\n dateTz: DateTZ,\n duration: number,\n mobile: boolean,\n save?: boolean,\n}\n\nexport enum BOOKING_STATUS {\n approved = 'approved',\n declined = 'declined',\n tentative = 'tentative',\n unavailable = 'unavailable'\n}","import {\n AbstractControl,\n FormControl,\n FormGroup,\n Validators\n} from '@angular/forms';\n\nimport { AvailableBookingFields } from '../settings.interfaces';\nimport {\n HashMap,\n humaniseDuration,\n mockDate as mockDateBase,\n resetDate as resetDateBase,\n timeFormatString,\n unique\n} from '@mckinsey-converge/base';\nimport { CateringOrder } from '../catering/catering-order.class';\nimport { ServiceManager } from '../service-manager.class';\nimport { User } from '../users/user.class';\nimport { Booking, IBookingQueryOptions } from './booking.class';\nimport {\n BookingRule,\n SpaceStatus\n} from './space.types';\nimport { validateEndTime } from '../validation.utilities';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { BookingAction, RecurrencePeriod, SeriesAction } from '../recurrence/recurrence.utils';\nimport { Space } from '../spaces';\nimport * as cloneDeep from 'lodash/cloneDeep';\n\nconst MINUTE = 1;\nconst HOUR = 60;\nconst DAY = 24 * HOUR;\nconst WEEK = 7 * DAY;\nconst MONTH = 30 * DAY;\n\nconst DURATION_MAP: { [duration: string]: number } = {\n month: MONTH,\n months: MONTH,\n week: WEEK,\n weeks: WEEK,\n day: DAY,\n days: DAY,\n hour: HOUR,\n hours: HOUR,\n minute: MINUTE,\n minutes: MINUTE\n};\n\n/**\n * Deprecated. Use @mckinsey-converge/base's import.\n */\nexport const mockDate = mockDateBase;\n\n/**\n * Deprecated. Use @mckinsey-converge/base's import.\n */\nexport const resetDate = resetDateBase;\n\nexport interface IBookingSlot {\n start: number;\n end: number;\n}\n\n\nexport function bookingOptionsToQuery(options: IBookingQueryOptions): HashMap {\n let query: HashMap = {};\n if (options) {\n query = { ...options };\n delete query.type;\n if (options.filters) {\n delete query.filters;\n for (const property in options.filters) {\n if (!query[property]) {\n query[property] = options.filters[property]\n }\n }\n }\n\n // id?: string;\n // cancelled?: boolean;\n if (options.until) {\n query.to = options.until;\n delete query.until;\n }\n \n }\n return query;\n}\n\n\n/**\n * Generate a list of free time slots between the given bookings\n * @param list List of bookings to find slots between\n * @param min_size Minimum length of a free slot in minutes\n */\nexport function getFreeBookingSlots(list: Booking[]=[], min_size: number = 30, dateTzMs: number = DateNow(new Date()).ms,): IBookingSlot[] {\n /* istanbul ignore else */\n if (!list.length) {\n return [\n {\n start: 0,\n end: DateNow(new Date()).startOfValue('minute').ms * 10\n }\n ];\n }\n const slots: IBookingSlot[] = [];\n let start = new DateTZ({ date: dateTzMs });\n list.sort((a, b) => a.date - b.date);\n for (const booking of list) {\n const bkn_start = booking.startDateTz;\n const bkn_end = booking.endDateTz;\n if (bkn_start.isAfterDate(start)) {\n const diff = Math.abs(bkn_start.dateDiff(start, 'minutes'));\n /* istanbul ignore else */\n if (diff >= min_size) {\n slots.push({ start: start.ms, end: bkn_start.ms });\n }\n start = bkn_end;\n } else if (start.startOfValue('minute').ms === bkn_start.startOfValue('minute').ms) {\n start = bkn_end;\n }\n }\n slots.push({\n start: start.ms,\n // R--- these X 10's make no sense. why not + 2 years?\n end: DateNow(new Date()).startOfValue('minute').ms * 10\n });\n\n return slots;\n}\n\n/**\n * Get the next free time slot from the given bookings\n * @param list List of bookings to find the next slot\n * @param date Date to find next slot after in ms since UTC epoch\n * @param min_size Minimum length of the free slot in minutes\n * \n * R--- Possibly depreciate, I don't see it used anywhere except for its own test\n */\nexport function getNextFreeBookingSlot(\n list: Booking[],\n date: number = DateNow(new Date()).ms,\n min_size: number = 15\n): IBookingSlot {\n const slots = getFreeBookingSlots(list, min_size, date);\n const date_ = new DateTZ({date})\n const time = date_.startOfValue('minute').setValue({ second: 1 });\n for (const block of slots) {\n const start = new DateTZ({date: block.start});\n const end = new DateTZ({date: block.end});\n if (start.startOfValue('minute').isAfterDate(time)) {\n return block;\n } else if (time.isBeforeDate(end.startOfValue('minute'))) {\n const duration = end.startOfValue('minute').dateDiff(time, 'minutes');\n /* istanbul ignore else */\n if (duration >= min_size) {\n return block;\n }\n }\n }\n return slots[slots.length - 1];\n}\n\n/**\n * Generate form fields for the given booking\n * @param booking Booking to generate form for\n * @param current_user Current user of the system to default as the host\n */\nexport function generateBookingForm(\n booking: Booking,\n use_fields: AvailableBookingFields[],\n isConcierge: boolean = false,\n manualTimezone?: string,\n action?: SeriesAction | BookingAction | null\n ): FormGroup {\n if (!booking) {\n throw Error('No booking passed');\n }\n\n const user_service = ServiceManager.serviceFor(User);\n const current_user =\n user_service.current ||\n new User({ id: 'local-user', name: 'Local User', email: 'local@place.tech' });\n\n const fields: HashMap = {\n id: new FormControl(booking.id || ''),\n space_list: new FormControl( booking.is_multiroom? booking.multi_rooms : [booking.room], []),\n room: new FormControl(booking.room, {}),\n dateTz: new FormControl({ value: booking.startDateTz || DateNow(), disabled: false }, [Validators.required]),\n duration: new FormControl({ value: booking.duration, disabled: false }),\n organiser: new FormControl(booking.organiser || current_user, [Validators.required]),\n attendees: new FormControl(booking.attendees, []),\n title: new FormControl(booking.title || '', { validators: [ Validators.required, Validators.minLength(1) ], updateOn: 'blur' }), //Validators.pattern(\"[^=`~!@#$%*{};:'\\\",_.<>]*\")\n booking_type: new FormControl(booking.booking_type),\n body: new FormControl(booking.body),\n notes: new FormControl(booking.notes),\n equipment_codes: new FormControl(booking.equipment_codes),\n expected_attendees: new FormControl(booking.expected_attendees),\n company: new FormControl(booking.company),\n is_multiroom: new FormControl(booking.is_multiroom),\n merged: new FormControl({value: booking?.merged, disabled: true}),\n catering: new FormControl(\n booking.cateringOrders.map(\n (order) => new CateringOrder({\n ...order,\n booking_date: booking.startDateTz.ms,\n booking_timezone: booking.timezone,\n })\n )\n ),\n all_day: new FormControl(!!booking.all_day),\n has_catering: new FormControl(!!booking.has_catering),\n needs_space: new FormControl(true),\n action: new FormControl(''),\n timezone: new FormControl(manualTimezone || \"\"),\n is_before_date: new FormControl(false)\n };\n if (!isConcierge) {\n fields.duration.setValidators([Validators.required, validateEndTime(fields.dateTz)]);\n }\n /* istanbul ignore else */\n if (booking.id && booking.id !== 'ad-hoc') {\n fields.organiser.disable();\n /* istanbul ignore else */\n if (booking.endDateTz.ms < DateNow(new Date()).ms) {\n fields.dateTz.disable();\n }\n } else {\n const dateValidators = [Validators.required];\n if (!isConcierge) {\n dateValidators.push(isFuture);\n }\n dateValidators.push(validDateTZ)\n fields.dateTz.setValidators(dateValidators);\n fields.dateTz.updateValueAndValidity();\n }\n let list_length = -1;\n fields.space_list.valueChanges.subscribe((list) => {\n const expected = fields.expected_attendees.value || {};\n const matches = Object.keys(expected).filter((key) =>\n list?.find((space) => space.email === key)\n ).length;\n if (list && list.length && matches === 0) {\n const codes = fields.equipment_codes.value || {};\n if (Object.keys(expected).length >= 0 || Object.keys(codes).length >= 0) {\n const key = Object.keys(expected)[0] || Object.keys(codes)[0];\n const new_expected = {};\n const new_codes = {};\n const notes = fields.notes.value;\n notes.forEach((note) => (note.space === key ? (note.space = list[0].email) : ''));\n new_expected[list[0].email] = expected[key];\n new_codes[list[0].email] = codes[key];\n fields.expected_attendees.setValue(new_expected);\n fields.equipment_codes.setValue(new_codes);\n }\n }\n list_length = list?.length;\n });\n fields.dateTz.valueChanges.subscribe((_) => {\n fields.duration.updateValueAndValidity();\n });\n fields.needs_space.valueChanges.subscribe((space_needed) => {\n if (!space_needed) {\n fields.space_list.setValue([]);\n }\n });\n fields.has_catering.valueChanges.subscribe((has_catering) => {\n if (!has_catering) {\n fields.catering.setValue([]);\n }\n });\n const simplified_fields: HashMap = [\n 'id',\n 'space_list',\n 'space_ids',\n 'notes',\n 'dateTz',\n 'booking_type',\n 'equipment_codes',\n 'expected_attendees',\n 'timezone',\n 'is_before_date',\n ...use_fields\n ].reduce((map, key) => {\n /* istanbul ignore else */\n if (fields[key]) {\n map[key] = fields[key];\n }\n return map;\n }, {});\n \n if (simplified_fields.all_day) {\n const handleAllDay = (value) => {\n if (value) {\n let startOfDay = simplified_fields.dateTz.value.clone();\n // When the booking space isn't set we still need a way to determine midnight\n // and here we use the current concierge building selection's timezone.\n if (manualTimezone) {\n startOfDay = startOfDay.toZone(manualTimezone);\n }\n\n simplified_fields.dateTz.setValidators([Validators.required]);\n simplified_fields.dateTz.setValue(simplified_fields.all_day.value\n ? startOfDay.startOfValue('day')\n : simplified_fields.dateTz.value);\n simplified_fields.duration.setValue(simplified_fields.all_day.value\n ? 24 * 60\n : simplified_fields.duration.value);\n simplified_fields.dateTz.updateValueAndValidity();\n simplified_fields.duration.disable();\n // simplified_fields.dateTz.disable();\n } else {\n const dateValidators = [Validators.required];\n if (!isConcierge) {\n dateValidators.push(isFuture);\n }\n dateValidators.push(validDateTZ)\n simplified_fields.dateTz.setValidators(dateValidators);\n simplified_fields.duration.setValue(booking.duration || 30);\n simplified_fields.dateTz.updateValueAndValidity();\n simplified_fields.duration.enable();\n simplified_fields.dateTz.enable();\n }\n };\n simplified_fields.all_day.valueChanges.subscribe(handleAllDay);\n handleAllDay(simplified_fields.all_day.value);\n }\n\n const occurrences = booking.occurrence_details || [];\n\n //Add recurrence fields\n if(action && booking.recurrence_period === RecurrencePeriod.LIST){\n booking.recurrence_starts = occurrences\n .filter(occurrence => occurrence.id !== booking.recurrence_master_id)\n .map((occurrence) => new DateTZ({date: occurrence.start_epoch * 1000, is_local_tz: false, building_tz: booking.timezone})\n ) \n }\n /**If series exists then set the start and end dates from the first and last bookings in the occurrences array\n * this prevents prefilled form errors due to individual edits\n */\n if(action && action !== SeriesAction.CLONE && action !== BookingAction.CLONE && occurrences && occurrences.length && !booking.id){\n const start_dateTz = new DateTZ({\n date: occurrences.sort((d1, d2) => d1.start_epoch - d2.start_epoch)[0].start_epoch * 1000, \n is_local_tz: false, building_tz: booking.timezone\n })\n simplified_fields.dateTz.setValue(start_dateTz)\n const end = occurrences.sort((d1, d2) => d2.start_epoch - d1.start_epoch)[0].start_epoch * 1000\n booking.recurrence_endTz = new DateTZ({date: end, is_local_tz: false, building_tz: booking.timezone}) \n }\n\n // R-- needs TZ aware fields\n const _recurr_end = simplified_fields.dateTz?.value || new DateTZ({ date: 1 }); // new DateTZ({date: simplified_fields.date?.value}) \n const fields_with_recurrence = {\n ...simplified_fields,\n recurrence_period: new FormControl(booking.recurrence_period || RecurrencePeriod.WEEKLY),\n recurrence_interval: new FormControl(booking.recurrence_interval || 1),\n recurrence_endTz: new FormControl(booking.recurrence_endTz || _recurr_end.addValue({days: 1})),\n recurrence_count: new FormControl(booking.recurrence_count || 0),\n is_recurrent: new FormControl(booking.is_recurrent),\n recurrence_starts: new FormControl(booking.recurrence_starts || []),\n recurrence_exceptions: new FormControl([]),\n recurrence_pattern: new FormControl(RecurrencePeriod.WEEKLY), //Helper value to store the last selected pattern (daily, weekly, monthly),\n recurrence_days: new FormControl(booking.recurrence_days || [])\n }\n\n if(booking.is_recurrent && action !== BookingAction.CLONE){\n fields_with_recurrence.recurrence_starts.setValidators([arrayWithValues])\n fields_with_recurrence.recurrence_starts.updateValueAndValidity()\n fields_with_recurrence.recurrence_endTz.setValidators([Validators.required, validDateTZ]);\n }\n // Generate form group for booking item\n const form = new FormGroup(fields_with_recurrence);\n return form;\n}\n\n/**\n * Validate whether date is in the future\n * @param control Control to check value\n */\nexport function isFuture(control: AbstractControl) {\n const dateTz = control.value; // new DateTZ({date: control.value});\n return dateTz.isBeforeDate(DateNow(new Date()).subtractValue({ minutes: 5 }))\n ? { dateTz: 'Date needs to be in the future' }\n : null;\n}\n\n/**\n * Validate whether an array has values\n * @param control Control to check value\n */\nexport function arrayWithValues (control: AbstractControl) {\n return control.value.length !== 0 ? null : { field: 'Needs at least one value'}\n}\n\n/**\n * Validate whether a date has a valid value (future or current date)\n * @param control Control to check value\n */\n export function validDate (control: AbstractControl) {\n if(!control.value){\n return { date: 'Needs a valid date'}\n }\n const date = new DateTZ({date: control.value})\n const now = DateNow(new Date())\n const isValid = now.isBeforeDate(date, 'day') || now.isSameDate(date, 'day')\n return isValid ? null : { date: 'Needs a valid date'}\n}\n\n/**\n * Validate whether a date has a valid DateTZ value (future or current date)\n * @param control Control to check value\n */\n export function validDateTZ (control: AbstractControl) {\n if(!control.value){\n return { date: 'Needs a valid date'}\n }\n const date = DateNow(control.value.JSDate);\n const now = DateNow(new Date());\n const isValid = now.isBeforeDate(date, 'day') || now.isSameDate(date, 'day')\n return isValid ? null : { date: 'Needs a valid date'}\n}\n\n/**\n * Get minimum duration from ruleset in minutes\n * Default to 5min\n */\nexport function getMinLength(rule_list: HashMap): number {\n return Object.values(rule_list).reduce((min, block) => {\n const min_block = block.reduce((min_length, el) => {\n if (el.conditions.min_length && stringToMinutes(el.conditions.min_length) > min) {\n return stringToMinutes(el.conditions.min_length);\n } else {\n return min_length;\n }\n }, 5);\n if (min_block > min) {\n return min_block;\n } else {\n return min;\n }\n }, 5) as number;\n}\n\n/**\n * Whether the first input is greater than the last. Converts duration strings into minutes\n * @param duration_1 First input can be a number in minutes or a duration string e.g. `1 hour`\n * @param duration_2 Second input can be a number in minutes or a duration string e.g. `30 minutes`\n */\nexport function durationGreaterThanOrEqual(\n duration_1: string | number,\n duration_2: string | number\n) {\n const first: number = typeof duration_1 === 'string' ? stringToMinutes(duration_1) : duration_1;\n const second: number =\n typeof duration_2 === 'string' ? stringToMinutes(duration_2) : duration_2;\n return first >= second;\n}\n\n/**\n * Conver time string into minutes\n * @param str timestring e.g. `'1 day'`, `'15 minutes'`, `'2 weeks'`\n */\nexport function stringToMinutes(str: string): number {\n const parts = str.split(' ');\n return +parts[0] * DURATION_MAP[parts[1]];\n}\n\n/**\n * Get current status within bookings\n * @param bookings List of bookings\n * @param host Host of the new event\n * @param date Datetime of the new event\n */\nexport function statusFromBookings(\n bookings: Booking[] = [],\n bookable: boolean = true,\n requestable: boolean = false,\n dateTz: DateTZ = DateNow(),\n space?: Space\n) {\n const free_slots = getFreeBookingSlots(bookings.filter((bkn) => !bkn.declined));\n const now = DateNow() // new DateTZ({date}); // now should be now\n // commeted bellow piece as correct way to get next free booking slot is at line- 488\n // const next_free_slot = free_slots.find((slot) => {\n // return slot && (slot.start > now.ms || now.ms > slot.start - slot.start % 1000 || now.ms < slot.end - slot.end % 60 * 1000);\n // // const start = new DateTZ({date: slot?.start || 0 });\n // // const end = new DateTZ({date: slot?.end || 0}); // slot end isn't late enough? or after now/\n // // return start.isAfterDate(now) || (now.isAfterDate(start.startOfValue('second')) && now.isBeforeDate(end.startOfValue('minute')))\n // });\n\n const next_free_slot = getNextFreeBookingSlot(bookings.filter((bkn) => !bkn.declined), dateTz.ms);\n \n const start = new DateTZ({date: next_free_slot?.start || 0});\n const end = new DateTZ({date: next_free_slot?.end || 0});\n const currently_free = dateTz.isAfterDate(start.startOfValue('second')) && dateTz.isBeforeDate(end.startOfValue('minute'));\n const time_until_next_block = humaniseDuration(\n currently_free ? end.dateDiff(dateTz, 'minutes') : start.dateDiff(dateTz, 'minutes'),\n 'short'\n );\n\n const free_tomorrow = !currently_free && !start.isSameDate(dateTz, 'day');\n const free_today = currently_free && !end.isSameDate(dateTz, 'day');\n \n return {\n status: (!bookable\n ? SpaceStatus.NotBookable\n : currently_free\n ? requestable\n ? SpaceStatus.Requestable\n : SpaceStatus.Available\n : SpaceStatus.InProgress) as SpaceStatus,\n available_until: free_today\n ? 'No meetings today'\n : currently_free\n ? `Free until ${end.formatDate(timeFormatString())}(${time_until_next_block})`\n : free_tomorrow\n ? 'Unavailable today'\n : `Free at ${start.formatDate(timeFormatString())}(${time_until_next_block})`\n };\n}\n\n/**\n * V1 version display.\n */\nexport const spaceStatusToDisplay = (status: SpaceStatus): string => {\n switch (status) {\n case SpaceStatus.NotBookable:\n return 'Not Bookable';\n case SpaceStatus.Requestable:\n return 'Available by Request';\n case SpaceStatus.Unavailable:\n return 'Unavailable';\n case SpaceStatus.InProgress:\n return 'Meeting in Progress';\n case SpaceStatus.Available:\n default:\n return 'Available';\n }\n};\n\nexport function replaceBookings(\n list: Booking[],\n new_bookings: Booking[],\n filter_options: { room_email: string; fromTz: DateTZ; toTz: DateTZ }\n) {\n const filtered_list = list.filter((booking) => {\n return (\n !(booking.multi_rooms.some(room => room?.email === filter_options.room_email)) ||\n !timePeriodsIntersect(filter_options.fromTz.ms, filter_options.toTz.ms, booking.startDateTz.ms, booking.endDateTz.ms)\n );\n });\n const updated_list = filtered_list.concat(new_bookings);\n updated_list.sort((a, b) => a.date - b.date);\n return unique(updated_list, 'icaluid');\n}\n\nexport function timePeriodsIntersect(\n start1: number,\n end1: number,\n start2: number,\n end2: number,\n type = ''\n) {\n return (\n (start1 >= start2 && start1 < end2) ||\n (end1 > start2 && end1 <= end2) ||\n (start2 >= start1 && start2 < end1) ||\n (end2 > start1 && end2 <= end1)\n );\n}\n\nexport function formatWhen({\n all_day,\n startTZ,\n endTZ,\n displayEndTZ\n}): string {\n if (all_day) {\n return `${startTZ.formatDate('dd MMM yyyy')} - All Day`;\n } else {\n if (startTZ.isSameDate(endTZ, 'day')) {\n return `${startTZ.formatDate('dd MMM yyyy, h:mma')} - ${displayEndTZ.formatDate('h:mma')}`;\n } else {\n return `${startTZ.formatDate('dd MMM yyyy, h:mma')} - ${displayEndTZ.formatDate('dd MMM yyyy, h:mma')}`;\n }\n }\n}\n\nexport const isIncludes = (item: any, field: string, searchVaue: string) => (item && item[field] && item[field].toLowerCase().includes(searchVaue));\n\nexport function searchRoomsAndBookings(allItems: (Space | Booking)[], searchValue: string, isConcierge:boolean = false) {\n\n let relevantItems: (Space | Booking)[] = [];\n\n if(isConcierge) {\n relevantItems = allItems.filter( (item: any ) => \n isIncludes(item, 'title', searchValue) ||\n isIncludes(item.creator, 'name', searchValue) ||\n isIncludes(item.organiser, 'name', searchValue) ||\n isIncludes(item, 'simple_name', searchValue) || // search with room name \n (item?.attendees && !!item?.attendees.filter(el => el.name.toLowerCase().includes(searchValue)).length ) \n );\n } else {\n relevantItems = allItems.filter( (item: any ) => \n this.isIncludes(item.creator, 'name', searchValue) ||\n this.isIncludes(item.organiser, 'name', searchValue) ||\n this.isIncludes(item, 'simple_name', searchValue) \n );\n }\n\n const filteredItems = this.duplicateMultiroomEntriesIfAny(relevantItems);\n \n return filteredItems;\n} \n\nexport function duplicateMultiroomEntriesIfAny(bookings) {\n // Initialize an array to hold the original and duplicated entries \n const updatedBookings = [...bookings];\n\n // Loop through the original bookings array \n [...bookings].forEach(booking => {\n if(booking?.is_multiroom) {\n // calculate the number of times to duplicates the booking\n const duplicatesCount = booking.multi_rooms.filter(el => el.id !== booking.space.id);\n\n // Create the duplicate and add them to the updatedBookings array.\n for(let i = 0; i < duplicatesCount.length; i++) {\n // Deep copy the booking to ensure references are not copied\n const duplicatedBooking = cloneDeep(booking); \n duplicatedBooking.room = duplicatesCount[i]; \n updatedBookings.push(duplicatedBooking);\n }\n }\n });\n\n // Return the array with duplicated entries \n return updatedBookings;\n\n}\n \n","\nimport { Injectable } from '@angular/core';\nimport { ComposerService } from '@placeos/composer';\nimport { BaseAPIService } from '../base.service';\nimport { Booking, IBookingQueryOptions } from './booking.class';\nimport { bookingOptionsToQuery } from './booking.utilities';\nimport {\n HashMap\n} from '@mckinsey-converge/base';\nimport { ServiceManager } from '../service-manager.class';\nimport { SettingsService } from '../settings.service';\nimport { BookingCheckinParams } from './space.types';\nimport { DateNow } from \"@mckinsey-converge/date-tz\";\nimport { Observable } from 'rxjs/internal/Observable';\nimport { forkJoin } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BookingsService extends BaseAPIService {\n constructor(protected _composer: ComposerService,\n settingsService: SettingsService,\n ) {\n super(_composer, settingsService);\n ServiceManager.setService(Booking, this);\n this._name = 'Bookings';\n this._api_route = 'bookings';\n this._compare = (a, b) => !(a.id || '').localeCompare(b.id) || !(a.icaluid || '').localeCompare(b.icaluid);\n }\n\n /**\n * Get user bookings\n * @param options\n */\n public userBookings(options: IBookingQueryOptions,\n uniqueId?: string): Promise {\n if (!options) {\n throw new Error('Booking avilability requires request options');\n }\n const now = DateNow(new Date())\n if (!options.from) {\n options.from = now\n .startOfValue('day')\n .subtractValue({ days: 2 })\n .ms;\n }\n if (!options.until) {\n options.until = null;\n }\n\n const key = `bookings|${options.id ? options.id : ''}|${uniqueId ?? ''}`;\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const respond = (list: Booking[]) => {\n delete this._promises[key];\n resolve(list);\n };\n const error = e => {\n reject(e);\n delete this._promises[key];\n };\n const query = bookingOptionsToQuery(options);\n if (options.id) {\n this.show(options.id, query).then(i => respond([i]), error);\n } else {\n this.query(query).then(respond, error);\n }\n });\n }\n return this._promises[key];\n }\n\n\n /**\n * Save changes to the booking\n * @param booking Booking update or add to the database\n */\n public save(booking: Booking, series?: boolean): Promise {\n const body = booking.toApiJSON()\n if(series){\n body.series = true\n }\n return booking.id ? this.update(booking.id, body) : this.add(body);\n }\n\n /**\n * Checkin atteendee of a booking\n * @param id ID of the booking\n * @param fields Fields associated with the booking and attendee\n */\n public checkin(id: string, fields: BookingCheckinParams) {\n return this.task(id, 'checkin', fields);\n }\n public checkinIndividualVisitor(id: string, fields: BookingCheckinParams) {\n return this.taskObsr(id, 'checkin', fields); \n }\n\n public accept(id: string, fields?: HashMap) {\n return this.task(id, 'accept', fields);\n }\n\n public undo(id: string, status: 'accept' | 'decline', fields?: HashMap) {\n return this.task(id, status, fields);\n }\n\n public decline(id: string, fields?: HashMap) {\n return this.task(id, this.settingsService.concierge ? 'concierge_decline' : 'decline', fields);\n }\n\n protected process(raw_data: HashMap): Booking {\n return new Booking(raw_data);\n }\n\n public declineMultiple(bookings: Booking[]): Observable {\n const requests = [];\n bookings.forEach(bkg => {\n const booking = bkg.toJSON();\n const id = booking.id;\n const fields = {\n booking_id: booking.id,\n organiser: booking.organiser.email,\n room_email: booking.space?.email,\n icaluid: booking.icaluid,\n start: booking.startDateTz.formatDate('h:mm a').toLocaleLowerCase(),\n end: booking.endDateTz.formatDate('h:mm a').toLocaleLowerCase(),\n };\n if (bkg.is_recurrent && bkg.recurrence_type === 'master') {\n // Add series=true for recurrent bookings\n fields['series'] = true;\n } \n requests.push(this.taskObsr(id, 'concierge_decline', fields) ); \n });\n return forkJoin(requests);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ComposerService } from '@placeos/composer';\nimport { PaginatedAPIService } from '../paginated.service';\nimport { Booking, IBookingQueryOptions, } from './booking.class';\nimport { bookingOptionsToQuery } from './booking.utilities';\nimport {\n HashMap\n} from '@mckinsey-converge/base';\nimport { ServiceManager } from '../service-manager.class';\nimport { SettingsService } from '../settings.service';\nimport { BookingCheckinParams } from './space.types';\nimport { Observable } from 'rxjs';\n\nexport interface PaginatedBooking {\n results: Booking[];\n total: number;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BookingsPaginatedService extends PaginatedAPIService {\n constructor(protected _composer: ComposerService,\n settingsService: SettingsService,\n ) {\n super(_composer, settingsService);\n ServiceManager.setService(Booking, this);\n this._name = 'Bookings';\n this._api_route = 'bookings';\n this._compare = (a, b) => !(a.id || '').localeCompare(b.id) || !(a.icaluid || '').localeCompare(b.icaluid);\n }\n\n /**\n * Get user bookings\n * @param options\n */\n public userBookings(options: IBookingQueryOptions,\n uniqueId?: string): Promise {\n if (!options) {\n throw new Error('Booking avilability requires request options');\n }\n\n const key = `bookingsPaginated|${options.id ? options.id : ''}|${uniqueId ?? ''}`;\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const respond = (response: any) => {\n delete this._promises[key];\n resolve(response);\n };\n const error = e => {\n reject(e);\n delete this._promises[key];\n };\n const query = bookingOptionsToQuery(options);\n if (options.id) {\n this.show(options.id, query).then(i => respond([i]), error);\n } else {\n this.query(query).then(respond, error);\n }\n });\n }\n\n return this._promises[key];\n }\n\n\n /**\n * Save changes to the booking\n * @param booking Booking update or add to the database\n */\n public save(booking: Booking): Promise {\n return booking.id ? this.update(booking.id, booking.toJSON()) : this.add(booking.toJSON());\n }\n\n /**\n * Checkin atteendee of a booking\n * @param id ID of the booking\n * @param fields Fields associated with the booking and attendee\n */\n public checkin(id: string, fields: BookingCheckinParams) {\n return this.task(id, 'checkin', fields);\n }\n\n public accept(id: string, fields?: HashMap) {\n return this.task(id, 'accept', fields);\n }\n\n public decline(id: string, fields?: HashMap) {\n return this.task(id, this.settingsService.concierge ? 'concierge_decline' : 'decline', fields);\n }\n\n public undo(id: string, status: 'accept' | 'decline', fields?: HashMap) {\n return this.task(id, status, fields);\n }\n\n protected process(raw_data: HashMap): Booking {\n return new Booking(raw_data);\n }\n\n // public getHoldingBay(query: IBookingQueryOptions): Promise {\n // const key = `bookingsPaginated|holding-bay`;\n // if (!this._promises[key]) {\n // this._promises[key] = new Promise((resolve, reject) => {\n // const respond = (response: any) => {\n // delete this._promises[key];\n // resolve(response);\n // };\n // const error = e => {\n // reject(e);\n // delete this._promises[key];\n // }; \n // this.query(query, { url: '/api/staff/bookings/holding_bay' }).then(respond, error);\n // });\n // }\n\n // return this._promises[key];\n // }\n\n public getHoldingBay = (query: IBookingQueryOptions): Observable => this.queryHoldingBay(query, { url: '/api/staff/bookings/holding_bay' });\n}\n","export * from './booking.class'\nexport * from './space.types'\nexport * from './bookings.service'\nexport * from './bookingsPaginated.service'\nexport * from './booking.utilities'\nexport * from './booking-state.service'\nexport * from './space.utilities'\nexport * from './booking.types'\n","import { SpaceRules } from './booking.types';\n\nimport {\n durationGreaterThanOrEqual,\n stringToMinutes\n} from './booking.utilities';\nimport {\n SpaceCheckOptions,\n SpaceRuleOptions\n} from './space.types';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n/**\n * Get booking rules for the given user and space\n * @param options\n */\nexport function rulesForSpace(options: SpaceRuleOptions): SpaceRules {\n if (!options) {\n throw Error('Options are needed to check for rule matches');\n }\n const space_rules_for_user: SpaceRules = {\n auto_approve: true,\n hide: true,\n reason: ''\n };\n let match = false;\n /* istanbul ignore else */\n if (options.space) {\n for (const type in options.rules) {\n if (\n options.rules.hasOwnProperty(type) &&\n options.rules[type] instanceof Array &&\n options.space.zones.find((zone) => zone === type)\n ) {\n for (const rule_block of options.rules[type]) {\n /* istanbul ignore else */\n if (\n checkRules({\n user: options.user,\n space: options.space,\n time: options.time,\n duration: options.duration,\n rules: rule_block.conditions\n })\n ) {\n const ruleset = rule_block.rules;\n const conditions = rule_block.conditions;\n space_rules_for_user.hide = false;\n /* istanbul ignore else */\n if (conditions.max_length) {\n space_rules_for_user.max_length = stringToMinutes(\n conditions.max_length as string\n );\n }\n /* istanbul ignore else */\n if (conditions.min_length) {\n space_rules_for_user.min_length = stringToMinutes(\n conditions.min_length as string\n );\n }\n // NOTE: use max_length in conditions instead of book_length in rules\n // if (ruleset.book_length) {\n // space_rules_for_user.max_length = stringToMinutes(ruleset.book_length as string);\n // }\n /* istanbul ignore else */\n if (ruleset.auto_approve !== undefined) {\n space_rules_for_user.auto_approve = ruleset.auto_approve;\n }\n match = true;\n space_rules_for_user.reason = '';\n break;\n }\n else {\n space_rules_for_user.reason = 'OfficeRules';\n }\n }\n }\n \n /* istanbul ignore else */\n if (!space_rules_for_user.hide) {\n break;\n }\n }\n }\n if (!match) {\n space_rules_for_user.hide = true;\n }\n return space_rules_for_user;\n}\n\n\n/**\n * Check if user matches the given ruleset\n * @param options\n */\nfunction checkRules(options: SpaceCheckOptions): boolean {\n /* istanbul ignore else */\n if (options.rules) {\n const time = new DateTZ({date: options.time});\n const count = Object.keys(options.rules).length;\n let matches = 0;\n Object.keys(options.rules).forEach((key) => {\n let counter = 0;\n const condition: string[] =\n options.rules[key] instanceof Array\n ? (options.rules[key] as [])\n : [options.rules[key] as string];\n switch (key) {\n case 'groups':\n /* istanbul ignore else */\n if (options.user && options.user.groups) {\n counter = 0;\n condition.forEach((i) =>\n options.user.groups.find((j) => j === i) ? counter++ : null\n );\n /* istanbul ignore else */\n if (counter > 0) {\n matches++;\n }\n }\n break;\n case 'locations':\n /* istanbul ignore else */\n if (options.user && options.user.location) {\n counter = 0;\n condition.forEach((i) =>\n (options.user.last_location.name || '').indexOf(i) >= 0\n ? counter++\n : null\n );\n /* istanbul ignore else */\n if (counter >= options.rules[key].length) {\n matches++;\n }\n }\n break;\n case 'is_before':\n /* istanbul ignore else */\n if (options.time) {\n const duration = stringToMinutes(condition[0]);\n const check = DateNow(new Date()).addValue({ minutes: duration });\n let match = time.isBeforeDate(check);\n /* istanbul ignore else */\n matches += match ? 1 : 0;\n }\n break;\n case 'is_after':\n /* istanbul ignore else */\n if (options.time) {\n\n const duration = stringToMinutes(condition[0]);\n const check = DateNow(new Date());\n time.isAfterDate(check.addValue({ minutes: duration })) ? matches++ : '';\n }\n break;\n case 'min_length':\n /* istanbul ignore else */\n if (\n options.duration &&\n durationGreaterThanOrEqual(options.duration, condition[0])\n ) {\n matches++;\n }\n break;\n case 'max_length':\n /* istanbul ignore else */\n if (\n options.duration &&\n durationGreaterThanOrEqual(condition[0], options.duration)\n ) {\n matches++;\n }\n break;\n }\n });\n return matches >= count;\n }\n return false;\n}\n","\nimport { Injectable } from '@angular/core';\nimport { ComposerService } from '@placeos/composer';\nimport { CateringCategory } from './catering-category.class';\nimport { BaseAPIService } from '../base.service';\nimport { SettingsService } from '../settings.service';\nimport { ServiceManager } from '../service-manager.class';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CateringCategoriesService extends BaseAPIService {\n\n constructor(protected _composer: ComposerService,\n settingsService: SettingsService) {\n super(_composer, settingsService);\n ServiceManager.setService(CateringCategory, this);\n this._name = 'catering category/group';\n this._api_route = 'catering/category';\n }\n\n public query(): never {\n throw Error('No index endpoint for catering categories. Use catering menu service.');\n }\n\n public show(): never {\n throw Error('No show endpoint for catering categories. Use catering menu service.');\n }\n\n public processItem(raw_item: any) {\n return new CateringCategory(raw_item);\n }\n\n public format(item: CateringCategory) {\n return { ...item };\n }\n}\n","import { CateringItem } from \"./catering-item.class\";\nimport { HashMap } from '@mckinsey-converge/base';\n\nexport class CateringCategory extends CateringItem {\n /** Whether item is a category */\n public is_category = true;\n public admin_only: boolean;\n public restricted_from: number;\n\n constructor(data: HashMap) {\n super(data);\n this.is_category = true;\n (this as any).must_select = this.must_select || 0;\n (this as any).order_anytime = !!data.order_anytime && this.package;\n }\n\n /**\n * Convert class object into plain object\n */\n public toJSON(this: CateringItem): HashMap {\n const obj = super.toJSON();\n obj.order_anytime = !!obj.order_anytime && obj.package;\n return obj;\n }\n}\n","import { HashMap } from '@mckinsey-converge/base';\n\nexport interface CateringAvailability {\n /** Month of the year that the item starts being available */\n readonly from_month: number;\n /** Month of the year that the item ends being available */\n readonly to_month: number;\n}\n\nexport class CateringItem {\n /** Unique ID of the catering item */\n public readonly id: string;\n /** Display name of the catering item */\n public readonly name: string;\n /** Description of the item */\n public readonly description: string;\n /** URL to the image associated with the item */\n public readonly image_path: string;\n /** Type of catering item */\n public readonly catering_type: string;\n /** Availability of the item */\n public readonly available: CateringAvailability;\n /** Time in hours that is needed to prepare the item beforehand */\n public readonly prior_notice: number;\n /** Cost of the item without decimals */\n private unit_price: number;\n /** Cost of the item without decimals */\n public readonly supplier_cost: number;\n /** Minimum number this item allowed in an order */\n public readonly minimum_quantity: number;\n /** Maximum number this item allowed in an order */\n public readonly maximum_quantity: number;\n /** List of categories that the item is contained in */\n public readonly parent_categories: readonly string[];\n /** Allegen information associated with the item */\n public readonly allergy: string;\n /** Whether the supply of this item has run out */\n public out_of_stock: boolean;\n /** Whether item can be ordered within the time limit set by the building */\n public readonly order_anytime: boolean;\n /** Number of child items that must be selected as part of the package */\n public readonly must_select: number;\n /** List of associated items */\n public readonly items: CateringItem[];\n public readonly availableItems: CateringItem[];\n /** Whether child items are part of a package */\n public readonly package: boolean;\n /** List of zone ids associated with the category */\n public readonly zones: readonly string[];\n /** Number of this item in the assoicated order */\n private _amount = 0;\n /** Unique ID of the catering item */\n private instance_id: string;\n /** Whether item is a category */\n public is_category: boolean = false;\n /** Whether item is disabled in Staff App */\n public admin_only: boolean;\n /** restricted_from indicates category restriction from hours ahead of delivery time */\n public restricted_from: number;\n\n public get can_order_anytime(): boolean {\n return (\n this.order_anytime ||\n !this.package && this.items.reduce(\n (anytime, item) => anytime || item.can_order_anytime,\n false,\n )\n );\n }\n\n /** Number of this item in the assoicated order */\n public get amount(): number {\n return this._amount || 0;\n }\n\n /** Unit price in the assoicated order */\n public get price(): number {\n return this.unit_price || 0;\n }\n\n /** Total cost of the amount of items set */\n public get total(): number {\n return (this._amount * this.unit_price) || 0;\n }\n\n constructor(data: HashMap) {\n this.instance_id = `item-${Math.floor(Math.random() * 999_999_999)}`;\n this.id = data.id || '';\n this.name = data.name || '';\n this.is_category = this.id.includes('category-');\n this.available = {\n from_month: (data.available ? data.available.from_month : data.available_from) || -1,\n to_month: (data.available ? data.available.to_month : data.available_to) || -1,\n };\n this.description = data.description || '';\n this.prior_notice = data.prior_notice || data.notice;\n this.unit_price = data.unit_price || data.price || 0;\n this.supplier_cost = data.supplier_cost;\n this.minimum_quantity = Math.max(0, data.minimum_quantity || 0);\n this.maximum_quantity = Math.max(1, data.maximum_quantity || 999);\n this.parent_categories = data.category_ids || data.parent_categories || data.categories;\n this.order_anytime = !!data.order_anytime;\n this.image_path = data.image_path || '';\n this.admin_only = data.admin_only;\n this.restricted_from = data.restricted_from || 0;\n this.catering_type = data.catering_type;\n this.must_select = data.must_select ?? 0;\n this._amount = data._amount || data.amount || 0;\n this.allergy = data.allergy || '';\n const cateringItems: CateringItem[] = (data.items || []).map(item => new CateringItem(item));\n this.items = cateringItems;\n const filteredCateringItems = cateringItems.filter(c => !c.out_of_stock);\n this.availableItems = filteredCateringItems;\n this.out_of_stock = !!data.out_of_stock ||\n // if original items are empty, we hit the bottom, so if we filter out items then its out of stock.\n (cateringItems.length > 0 && filteredCateringItems.length === 0);\n this.package = data.package === 'true' || data.package === true;\n this.zones = data.zones && data.zones.length ? [...data.zones] : [];\n }\n\n public setAmount(amount: number = 0): void {\n if (amount <= this._amount) {\n if (amount < this.minimum_quantity) {\n amount = 0;\n }\n } else {\n if (amount < this.minimum_quantity) {\n amount = this.minimum_quantity;\n }\n }\n this._amount = Math.max(0, Math.min(this.maximum_quantity, amount));\n }\n\n /**\n * Updates the unit_price in the assoicated order if necessary\n * @param price value to compare to unit_price\n */\n public setPrice(price: number = 0): void {\n if(this.unit_price !== price) this.unit_price = price;\n }\n\n /**\n * Increase amount of the item the order\n * @param amount Amount to increase by\n */\n public addToOrder(amount: number = 1) {\n amount = Math.max(1, amount);\n this._amount += amount;\n if (this._amount < 0) {\n this._amount = 0;\n } else if (this._amount < this.minimum_quantity) {\n this._amount = this.minimum_quantity;\n } else if (this._amount > this.maximum_quantity) {\n this._amount = this.maximum_quantity;\n }\n }\n\n /**\n * Decrease amount of the item the order\n * @param amount Amount to decrease by\n */\n public removeFromOrder(amount: number = 1) {\n amount = Math.max(1, amount);\n this._amount -= amount;\n if (this._amount < 0) {\n this._amount = 0;\n } else if (this._amount < this.minimum_quantity) {\n this._amount = 0;\n }\n }\n\n /**\n * Convert class object into plain object\n */\n public toJSON(this: CateringItem): HashMap {\n const obj: any = { ...this };\n // Remove local private members\n delete obj._changes;\n delete obj._server_names;\n // Convert remaining members to be public\n obj.price = obj.unit_price;\n obj.categories = obj.parent_categories;\n const keys = Object.keys(obj);\n for (const key of keys) {\n if (key[0] === '_') {\n const new_key = key.substr(1);\n obj[new_key] = obj[key];\n delete obj[key];\n } else if (obj[key] === undefined) {\n delete obj[key];\n }\n }\n obj.items = obj.items.map((item: CateringItem) => item.toJSON());\n return obj;\n }\n}\n","\nimport { Injectable } from '@angular/core';\nimport { ComposerService } from '@placeos/composer';\nimport { BaseAPIService } from '../base.service';\nimport { CateringItem } from './catering-item.class';\nimport { SettingsService } from '../settings.service';\nimport { ServiceManager } from '../service-manager.class';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CateringItemsService extends BaseAPIService {\n constructor(protected _composer: ComposerService,\n settingsService: SettingsService) {\n super(_composer, settingsService);\n ServiceManager.setService(CateringItem, this);\n this._name = 'Catering Menu';\n this._api_route = 'catering/item';\n }\n\n public query(): never {\n throw Error('No index endpoint for catering items. Use menu service.');\n }\n\n public show(): never {\n throw Error('No show endpoint for catering items. Use menu service.');\n }\n\n public processItem(raw_item: any) {\n return new CateringItem(raw_item);\n }\n\n public format(item: CateringItem) {\n return item instanceof CateringItem ? item.toJSON() : item;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ComposerService } from '@placeos/composer';\n\nimport { CateringItem } from './catering-item.class';\nimport { CateringCategory } from './catering-category.class';\nimport { BaseAPIService } from '../base.service';\nimport { HashMap } from '@mckinsey-converge/base';\nimport { SettingsService } from '../settings.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CateringMenuService extends BaseAPIService {\n constructor(protected _composer: ComposerService,\n settingsService: SettingsService) {\n super(_composer, settingsService);\n this._name = 'Catering Menu';\n this._api_route = 'menu';\n }\n\n /**\n * Convert user data to local format\n * @param user User data\n */\n protected processItem(item: HashMap) {\n return item.items ? new CateringCategory(item) : new CateringItem(item);\n }\n}\n","\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CateringNotesService {\n\n public cateringNotes = [];\n\n \n public setNotes(notes) {\n this.cateringNotes = notes;\n }\n\n public getNotes() {\n return this.cateringNotes;\n }\n}","import { CateringItem } from './catering-item.class';\nimport { HashMap } from '@mckinsey-converge/base';\n\nimport { CateringCategory } from './catering-category.class';\nimport { Booking } from '../bookings';\n\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\nexport type CateringOrderMutableProperties =\n | 'items'\n | 'location_id'\n | 'location'\n | 'delivery_time'\n | 'charge_code'\n | 'notes'\n | 'status';\n\nexport type CateringOrderStatus = 'accepted' | 'preparing' | 'ready' | 'delivered' | 'cancelled';\n\nconst now = DateNow(new Date());\n\n// R--- refactor booking date to be dateTz\nexport class CateringOrder {\n /**\n * Booking fields\n * \n * The app handles booking data inconsisently. Ususally these booking fields are provided\n * for related booking data, but on occasion the full Booking class is used.\n */\n\n /** Unique Booking ID for the catering order */\n readonly booking_id: string;\n /** \n * Timestamp based booking time of the booking associated with the order\n * \n * Must be provide as the true Booking startDateTz or as a new DateTZ with \n * the correct date: timestamp, local_tz = false and bulding_tz values\n */\n readonly booking_date: number;\n /**\n * Timezone of the booking associated with the order\n */\n readonly booking_timezone: string;\n /** ID of the location to deliver the items to */\n location_id: string = '';\n /** Display text for the location to deliver the items to */\n location: string = '';\n /**\n * Smart timezone aware catering datetime with timezone\n */\n readonly bookingDateTz: DateTZ;\n\n /** \n * Booking associated with the order \n * \n * The booking attached to the CateringOrder is a special case used \n * mainly on the Concierge catering reports because someone created \n * a bad pattern to save catering changes to the booking. \n * \n * Avoid when possible.\n */\n public booking: Booking = null;\n\n /**\n * Catering specific fields\n * \n * The app handles booking data inconsisently. Ususally these booking fields are provided\n * for related booking data, but on occasion the full Booking class is used.\n */\n\n /** Whether the order status change is loading */\n public loading: boolean;\n /** Unique ID for the catering order */\n readonly id: string;\n /** Number of minutes after the start of the associated meeting to delivery the order */\n readonly delivery_time: number = 0;\n /** Status of the catering order */\n readonly status: CateringOrderStatus;\n /** Whether items in the order need to be prepared in the kitchen */\n readonly kitchen: boolean;\n /** Whether items in the order are in the pantry */\n readonly pantry: boolean;\n /** List of items */\n readonly items: readonly (CateringItem | CateringCategory)[] = [];\n /** Creation time of the order */\n readonly created_at: number;\n /** Charge code associated with the order */\n readonly charge_code: string;\n /** Notes associated with the order */\n readonly notes: string;\n // /** Mapping of properties to their changes */\n // private _changes: HashMap = {};\n /** Map of local property names to server ones */\n protected _server_names: HashMap = {};\n /** Currency code for the location of the order */\n public symbol: string;\n /** Whether the is an error with the order */\n public error: boolean;\n\n\n constructor(data: HashMap) {\n /** \n * Setup Defaults when raw_data values are not provided\n */\n const nowTz = DateNow(new Date());\n // now rounded to the next 5 minute increment\n const defaultStartTz = nowTz.setValue({ minute: Math.ceil(nowTz.minutes / 5) * 5 });\n const defaultLocalTimezone = Intl?.DateTimeFormat()?.resolvedOptions()?.timeZone;\n\n this.id = data.id || `order-${Math.floor(Math.random() * 999_999_999)}`;\n\n // If the booking is provided default the booking values to the true booking values\n this.booking = data.booking || null;\n\n \n // Has a booking so init with those values\n if (this.hasBookingAttached) {\n this.booking_date = this.booking.startDateTz.ms;\n this.booking_timezone = this.booking.timezone;\n this.bookingDateTz = this.booking.startDateTz;\n this.location_id = data.location_id || '';\n this.location = data.location || '';\n } else {\n this.booking_date = data.booking_date || defaultStartTz.ms;\n this.booking_timezone = data.booking_timezone || defaultLocalTimezone;\n this.bookingDateTz = new DateTZ({ date: this.booking_date, is_local_tz: false, building_tz: this.booking_timezone });\n this.location_id = data.location_id || '';\n this.location = data.location || '';\n }\n \n this.delivery_time = typeof data.delivery_time === 'number' ? data.delivery_time : 0;\n this.status = data.status || 'accepted';\n this.charge_code = data.charge_code || data.code;\n this.notes = data.notes;\n this.kitchen = data.kitchen instanceof Array ? !!data.kitchen.length : data.kitchen;\n this.pantry = data.pantry instanceof Array ? !!data.pantry.length : data.pantry;\n this.symbol = data.symbol || 'USD';\n this.items = (data.items || [])\n .map(item => (item.items ? new CateringCategory(item) : new CateringItem(item)))\n .filter(item => !!item.amount);\n }\n\n /** Special Case, check if a full booking is attached */\n public get hasBookingAttached(): boolean {\n return !!this.booking;\n }\n\n /** Display string for the types of items in the order */\n public get type(): string {\n let type = '';\n /* istanbul ignore else */\n if (this.kitchen) type += 'Kitchen';\n /* istanbul ignore else */\n if (this.pantry) {\n /* istanbul ignore else */\n if (type) type += ' + ';\n type += 'Pantry';\n }\n return type;\n }\n\n /** Total cost of the order */\n public get total(): number {\n return this.items.reduce((total, item) => total + (item.total || 0), 0);\n }\n\n /** Total number of items in the order */\n public get item_count(): number {\n return this.items.reduce((total, item) => total + (item.amount || 0), 0);\n }\n\n public get deliver_date(): DateTZ {\n return (this.bookingDateTz || this.booking?.startDateTz).addValue({ minutes: this.delivery_time })\n }\n\n /** Display string for the delivery time of the order (short version) */\n public get deliver_at(): string {\n return this.deliver_date.formatDate('h:mm a');\n }\n\n /** Display string for the delivery time of the order */\n public get deliver_at_time(): string {\n return this.deliver_date.formatDate('h:mma').toLocaleLowerCase();\n }\n\n /** Display string for the delivery date of the order */\n public get deliver_on_date(): string {\n return this.deliver_date.formatDate('dd MMM yyyy');\n }\n\n /**\n * Make a copy of this object\n */\n public clone(): CateringOrder {\n return new CateringOrder(this.toJSON());\n }\n\n /**\n * Convert class object into plain object\n */\n public toJSON(this: CateringOrder): HashMap {\n const obj: any = { ...this };\n // Remove local private members\n delete obj._server_names;\n // Remove local public members\n delete obj.booking;\n delete obj.loading;\n delete obj.bookingDateTz;\n\n // Convert remaining members to be public\n const keys = Object.keys(obj);\n for (const key of keys) {\n if (key[0] === '_') {\n const new_key = this._server_names[key.substr(1)] || key.substr(1);\n obj[new_key] = obj[key];\n delete obj[key];\n } else if (obj[key] === undefined) {\n delete obj[key];\n }\n }\n obj.items = obj.items.map((item: CateringItem) => item.toJSON());\n\n return obj;\n }\n}\n","import { CateringItem } from './catering-item.class';\n\nexport const mergeCateringItemWithFormData = (existing: CateringItem, override: any) =>\n new CateringItem({\n ...(existing instanceof CateringItem ? existing.toJSON() : existing),\n ...override\n });\n","export * from './catering-item.class';\nexport * from './catering-category.class';\nexport * from './catering-menu.service';\nexport * from './catering-order.class';\nexport * from './catering-categories.service';\nexport * from './catering-items.service';\nexport * from './catering.utilities';\nexport * from './catering-notes.service';\n","import { Injectable } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CloseDialogService {\n private dialogRefMap = new Map>();\n\n constructor() { }\n\n // Register a dialog with its ID\n registerDialog(id: string, dialogRef: MatDialogRef): void {\n this.dialogRefMap.set(id, dialogRef);\n }\n\n // Close a specific dialog by ID\n closeDialog(id: string): void {\n const dialogRef = this.dialogRefMap.get(id);\n if (dialogRef) {\n dialogRef.close();\n this.dialogRefMap.delete(id);\n }\n }\n\n // Optional: Close all dialogs\n closeAllDialogs(): void {\n this.dialogRefMap.forEach((dialogRef, id) => {\n dialogRef.close();\n this.dialogRefMap.delete(id);\n });\n }\n}\n\nexport enum DialogIds {\n MeetingDetails = 'meetingDetailsDialogId',\n BookingConfirmation = 'bookingConfirmationDialogId',\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CollapseService {\n private collapseSubject = new BehaviorSubject(false);\n collapse$ = this.collapseSubject.asObservable();\n\n collapsePanel() {\n this.collapseSubject.next(false);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class DataCommonModule {}\n","import { Injectable } from '@angular/core';\nimport {\n BehaviorSubject,\n Observable,\n Subscription\n} from 'rxjs';\n\nimport {\n HashMap,\n unique\n} from '@mckinsey-converge/base';\n\n/** List of keys that cannot be in a combination by themselves or with each other */\nconst INVALID_STANDALONE_KEYS: string[] = ['control', 'shift', 'alt', 'meta', 'os'];\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HotkeysService {\n /** Map of subjects which store press states of keys */\n private keydown_states: HashMap> = {};\n /** Map of obserers for key state subjects */\n private keydown_observers: HashMap> = {};\n /** List of keys at the end of a combination */\n private combo_end: string[] = [];\n /** List of registered hotkey combinations */\n private registered_combos: string[][] = [];\n /** Counter for the number of keydown events. Used for checking order of key presses */\n private counter: number = 0;\n /** Last key code to be pressed */\n private last_down: string;\n\n constructor() {\n window.addEventListener('keydown', (event: KeyboardEvent) => {\n const code = this.mapKey((event.code || '').toLowerCase());\n /* istanbul ignore else */\n if (this.last_down !== code) {\n /* istanbul ignore else */\n if (!this.keydown_states[code]) {\n this.keydown_states[code] = new BehaviorSubject(null);\n this.keydown_observers[code] = this.keydown_states[code].asObservable();\n }\n this.keydown_states[code].next(++this.counter);\n /* istanbul ignore else */\n if (this.combo_end.indexOf(code) >= 0) {\n event.preventDefault();\n }\n this.last_down = code;\n }\n });\n\n window.addEventListener('keyup', (event: KeyboardEvent) => {\n const code = this.mapKey((event.code || '').toLowerCase());\n /* istanbul ignore else */\n if (this.keydown_states[code]) {\n this.keydown_states[code].next(null);\n }\n /* istanbul ignore else */\n if (this.last_down === code) {\n this.last_down = null;\n }\n });\n }\n\n /**\n * Listen to the given key combination\n * @param combo Array of key codes to listen to or a hotkey string e.g. `Alt+Shift+KeyK`\n * @param next Callback for combination presses\n */\n public listen(combo: string | string[], next: () => void): Subscription {\n combo = (combo instanceof Array ? combo : combo.split('+'));\n const combination: string[] = combo.map(i => this.mapKey(i.toLowerCase()));\n /* istanbul ignore else */\n if (combination.length > 0 && this.validCombination(combination)) {\n this.registered_combos.push(combination);\n const last_key = combination[combination.length - 1];\n /* istanbul ignore else */\n if (!this.keydown_states[last_key]) {\n this.keydown_states[last_key] = new BehaviorSubject(null);\n this.keydown_observers[last_key] = this.keydown_states[last_key].asObservable();\n }\n this.updateCombinationEndList();\n return this.keydown_observers[last_key].subscribe((count) => {\n /* istanbul ignore else */\n if (count) {\n const presses: number[] = [];\n /* istanbul ignore else */\n if (combination.length > 0) {\n // Check that keys are pressed\n for (const key of combination) {\n const state = this.keydown_states[key];\n presses.push(state ? state.getValue() || -1 : -1);\n }\n // Check that keys are pressed in the correct order\n for (let i = 0; i < combination.length - 1; i++) {\n if (presses[i] > presses[i + 1]) {\n return;\n }\n }\n }\n const total = presses.reduce((a, v) => a + (v > 0 ? 1 : -1), 0);\n /* istanbul ignore else */\n if (total >= combination.length) {\n next();\n }\n }\n });\n }\n return null;\n }\n\n /**\n * Map key codes with multiple versions to simple form\n * @param code Code to transform\n */\n private mapKey(code: string): string {\n /* istanbul ignore else */\n if (code.indexOf('alt') >= 0 || code.indexOf('shift') >= 0 || code.indexOf('control') >= 0) {\n return code.replace('left', '').replace('right', '');\n }\n return code;\n }\n\n /**\n * Update the list of the last keys in combinations to allow for prevent default actions on pre-existing hotkeys\n */\n private updateCombinationEndList(): void {\n const key_list = [];\n for (const combo of this.registered_combos) {\n this.combo_end.push(combo[combo.length - 1]);\n }\n this.combo_end = unique(key_list);\n }\n\n /**\n * Checks if the given hotkey combination is allowed and valid\n * @param combo Array of key codes\n */\n private validCombination(combo: string[]): boolean {\n let non_meta = 0;\n for (const key of combo) {\n /* istanbul ignore else */\n if (INVALID_STANDALONE_KEYS.indexOf(key) < 0) {\n non_meta++;\n }\n }\n return non_meta > 0;\n }\n}\n","export * from './location.class';\nexport * from './location.service';\n","import { HashMap } from '@mckinsey-converge/base';\n\nimport { Organisation } from '../organisation/organisation.class';\nimport {\n ServiceLike,\n ServiceManager\n} from '../service-manager.class';\nimport { BuildingLevel } from '../organisation/level.class';\n\nexport class MapLocation {\n /** ID of the element on the associated map */\n public readonly id?: string;\n /** Name of the location */\n public readonly name?: string;\n /** X coordinate of the location */\n public readonly x?: number;\n /** Y coordinate of the location */\n public readonly y?: number;\n /** Level details for the location */\n public readonly level: BuildingLevel;\n /** Whether the position is fixed */\n public readonly fixed: boolean;\n /** Accuracy of the location when not fixed */\n public readonly confidence?: number;\n /** Whether location is at a desk */\n public readonly at_desk?: boolean;\n /** Whether location is set */\n public readonly empty: boolean;\n\n /** Service for managing model on the server */\n protected get _service(): ServiceLike {\n return ServiceManager.serviceFor(MapLocation);\n }\n\n /** Display string for the building and level of the location */\n public get display(): string {\n const service = ServiceManager.serviceFor(Organisation);\n if (!service) {\n return this.level.name;\n }\n const bld = service.buildings.find((bld) => bld.id === this.level.building_id);\n return bld ? `${bld.name}, ${this.level.name}` : this.level.name;\n }\n\n /** Whether location is in a different building from the active one */\n public get in_another_building(): boolean {\n const service = ServiceManager.serviceFor(Organisation);\n return service && service.building.id !== this.level.building_id;\n }\n\n constructor(raw_data: HashMap) {\n this.id = raw_data.id || raw_data.map_id || raw_data.desk_id;\n this.name = raw_data.name || '';\n this.x = raw_data.x\n ? Math.floor(this.normalise(raw_data.x, raw_data.x_max || 10000) * 10000)\n : null;\n this.y = raw_data.y\n ? Math.floor(this.normalise(raw_data.y, raw_data.x_max || 10000) * 10000)\n : null;\n const service = ServiceManager.serviceFor(Organisation);\n this.level =\n raw_data.level instanceof BuildingLevel\n ? raw_data.level\n : service\n ? service.levelWithID(raw_data.level)\n : new BuildingLevel(raw_data.level);\n this.fixed = this.x === null && this.y === null;\n this.confidence = Math.max(5, Math.min(15, raw_data.confidence || 0));\n this.at_desk = this.id && this.id.indexOf('area-') === 0;\n this.empty = !(this.name && this.level && (this.id || this.x || this.y));\n }\n\n /** Normalise the given value within the max */\n private normalise(value: number, max: number): number {\n return value / (max * 1.0);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ComposerService } from '@placeos/composer';\n\nimport { BaseAPIService } from '../base.service';\nimport { MapLocation } from './location.class';\nimport { HashMap } from '@mckinsey-converge/base';\nimport { ServiceManager } from '../service-manager.class';\nimport { SettingsService } from '../settings.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocationService extends BaseAPIService {\n constructor(protected _composer: ComposerService,\n settingsService: SettingsService) {\n super(_composer, settingsService);\n ServiceManager.setService(MapLocation, this);\n this._name = 'Location';\n this._api_route = 'people';\n }\n\n public add(...args): never {\n throw new Error('Create not allowed for location service')\n }\n\n public update(...args): never {\n throw new Error('Update not allowed for location service')\n }\n\n public delete(...args): never {\n throw new Error('Delete not allowed for location service')\n }\n\n public process(item: HashMap) {\n return new MapLocation(item) as any;\n }\n}\n","import { BaseDataClass } from '../base-api.class';\nimport {\n getItemWithKeys,\n HashMap,\n Identity\n} from '@mckinsey-converge/base';\nimport { BuildingLevel } from './level.class';\nimport { BookingRule } from '../bookings';\nimport { ServiceManager } from '../service-manager.class';\n\nexport interface BuildingCity {\n timezone: string\n name: string\n}\n\nexport interface IBuildingRoleUser {\n name: string;\n email: string;\n phone: string;\n}\n\nexport interface LockerMap {\n [zone: string]: {\n [area: string]: {\n [type: string]: (string | boolean)[][];\n };\n };\n}\n\nexport interface ICoordinates {\n longitude: number;\n latitude: number;\n}\n\nexport interface LevelFeature {\n id: string;\n level_id: string;\n name: string;\n}\n\nexport interface BookingRuleDetails {\n /** List of booking rules details for the building */\n readonly rules: readonly string[];\n /** Custom booking rules for the map */\n readonly map_rules?: readonly string[];\n /** Custom booking rules for the map */\n readonly other_rules?: readonly string[];\n /** Contact email address for the building */\n readonly contact?: string;\n /** Information string to display before the rule listings */\n readonly info?: string;\n /** Link for more details */\n readonly link?: { url?: string, name?: string };\n /**\n * Allow buildings to define their own rules formats where needed or for special messages.\n */\n readonly custom_html?: string;\n}\n\nexport class Building extends BaseDataClass {\n /** Service for managing buildings */\n protected get _service() {\n return ServiceManager.serviceFor(Building);\n }\n\n /** Engine Zone ID for the building */\n public readonly zone_id: string;\n /** Organisation Code for the building */\n public readonly code: string;\n /** Geographical address of the building */\n public readonly address: string;\n /** Details about the booking rules for the building */\n public readonly booking_details: BookingRuleDetails;\n /** Details about the booking rules for the building */\n public readonly booking_rules: HashMap;\n /** Number of hour before a booking catering is restricted */\n public readonly catering_restricted_from: number;\n /** Currency code for the country assoicated with the building */\n public readonly currency: string;\n /** Map of fields that are required on the form */\n public readonly required: HashMap;\n /** IANA timezone database string for the location the building resides */\n public readonly timezone: string;\n /** Whether catering is available in this building */\n public readonly has_catering: boolean;\n /** ID of the system used for the holding bay */\n public readonly holding_bay: string;\n /** ID of the system used for standalone visitors bookings */\n public readonly visitor_space: string;\n /** List of zones to determine sort order spaces */\n public readonly sort_order: readonly string[];\n /** Searchable map features */\n public readonly searchables: readonly LevelFeature[];\n /** List of available extras for the building */\n public readonly extras: readonly Identity[];\n /** List of available extra equipment for loan at the building */\n public readonly loan_items: readonly Identity[];\n /** List of available levels for the building */\n public readonly levels: readonly BuildingLevel[];\n /** The city the building belongs in **/\n public readonly city: string;\n\n public readonly catering_hours: { readonly start: number, readonly end: number };\n /** Map of custom settings for the building */\n private _settings: HashMap;\n /** Map of roles and list of the associated users */\n private _roles: HashMap;\n /** Map of the locker ID arrays */\n private _lockers: LockerMap;\n /** Map of important system ids for the building */\n private _systems: HashMap;\n /** Map of important phone numbers for the building */\n private _phone_numbers: HashMap;\n /** Globe coordiates for the build */\n private _location: ICoordinates;\n /** List of zones associated with the building */\n public readonly zones: readonly string[];\n\n constructor(raw_data: HashMap) {\n super(raw_data);\n const settings = raw_data.settings || {};\n const disc_info = settings.discovery_info || {};\n this.zone_id = raw_data.zone_id || raw_data.zone;\n this.extras = (raw_data.extras || disc_info.extras || []).map(i => ({\n id: i.extra_id || i.id,\n name: i.extra_name || i.name\n }));\n this.loan_items = (raw_data.loan_items || disc_info.loan_items || []).map(i => ({\n id: i.extra_id || i.id,\n name: i.extra_name || i.name\n }));\n this.levels = (raw_data.levels || disc_info.levels || []).map(i => new BuildingLevel({\n ...i,\n building_id: this.id\n }));\n this._roles = raw_data.roles || disc_info.roles || {};\n this._lockers = raw_data.lockers || raw_data.locker_structure || disc_info.locker_structure || {};\n this._systems = raw_data.systems || disc_info.systems || {};\n this._settings = settings;\n this._phone_numbers = raw_data.phone_numbers || disc_info.phone_numbers || {};\n this._location = raw_data.location || disc_info.location || { longitude: null, latitude: null };\n this.catering_hours = raw_data.catering_hours || disc_info.catering_hours || settings.catering_hours || {\n start: 7,\n end: 20\n };\n const searchables = [];\n if (raw_data.neighbourhoods) {\n for (const lvl in raw_data.neighbourhoods) {\n if (raw_data.neighbourhoods.hasOwnProperty(lvl)) {\n const lvl_features = raw_data.neighbourhoods[lvl] || {};\n for (const feature in lvl_features) {\n if (lvl_features.hasOwnProperty(feature)) {\n searchables.push({\n id: lvl_features[feature],\n name: feature,\n level_id: lvl\n });\n }\n }\n }\n }\n }\n this.searchables = searchables;\n this.code = raw_data.code || disc_info.code || settings.code || '';\n this.address = raw_data.address || disc_info.address || settings.address || '';\n this.booking_details = raw_data.booking_details || disc_info.booking_details || settings.booking_details || {};\n this.booking_rules = raw_data.booking_rules || disc_info.booking_rules || settings.booking_rules || {};\n this.catering_restricted_from = raw_data.catering_restricted_from || disc_info.catering_restricted_from || settings.catering_restricted_from || 0;\n this.currency = raw_data.currency || disc_info.currency || settings.currency || 'USD';\n this.required = raw_data.required || disc_info.required || settings.required || {};\n if (disc_info.requires_equipment_code) {\n this.required.equipment_code = true;\n }\n if (disc_info.requires_expected_attendees) {\n this.required.expected_attendees = true;\n }\n this.timezone = raw_data.timezone || disc_info.timezone || settings.timezone || '';\n this.has_catering = raw_data.has_catering || disc_info.has_catering || settings.has_catering || false;\n this.holding_bay = raw_data.holding_bay || disc_info.holding_bay || settings.holding_bay || '';\n this.visitor_space = raw_data.visitor_space || disc_info.visitor_space || settings.visitor_space || '';\n this.sort_order = raw_data.sort_order || disc_info.sort_order || settings.sort_order || [];\n this.city = raw_data.city || disc_info.city || 'No City';\n }\n\n /**\n * Get a custom building setting\n * @param key Name of the setting. i.e. nested items can be grabbed using `.` to seperate key names\n */\n public setting(key: string): any {\n const keys = key.split('.');\n const value = getItemWithKeys(keys, this._settings) || getItemWithKeys(['discovery_info', ...keys], this._settings);\n return value;\n }\n\n /**\n * Get list of users with the associated role\n * @param name Role to find users for\n */\n public role(name: string): IBuildingRoleUser[] {\n return [...(this._roles[name] || [])];\n }\n\n /**\n * Get list of the names of available user role lists\n */\n public get role_names(): string[] {\n return Object.keys(this._roles).filter(i => this._roles.hasOwnProperty(i));\n }\n\n /** Map of the locker ID arrays */\n public get lockers(): LockerMap {\n return { ...(this._lockers || {}) };\n }\n\n /** Map of important system ids for the building */\n public get systems(): HashMap {\n return { ...(this._systems || {}) };\n }\n\n /** Map of important phone numbers for the building */\n public get phone_numbers(): HashMap {\n return { ...(this._phone_numbers || {}) };\n }\n\n /** Real coordinates */\n public get location(): ICoordinates {\n return { ...this._location };\n }\n\n /**\n * Get search map feature for the given level ID\n * @param level_id ID of level to grab features for\n */\n public featuresForLevel(level_id: string): LevelFeature[] {\n return (this.searchables || []).filter(i => i.level_id === level_id);\n }\n\n /**\n * Building objects are readonly and cannot be changed\n */\n public async save(): Promise {\n throw new Error('Building objects are readonly and cannot be changed');\n }\n\n /**\n * Building objects are readonly and cannot be deleted\n */\n public async delete(): Promise {\n throw new Error('Building objects are readonly and cannot be deleted');\n }\n}\n","export * from './building.class';\nexport * from './level.class';\nexport * from './organisation.class';\nexport * from './organisation.service';\n","import { HashMap } from 'libs/base/src/lib/types.utilities';\n\n/** Building Level data */\nexport class BuildingLevel {\n /** ID of the building level zone */\n readonly id: string;\n /** ID of the building zone associated with the level */\n readonly building_id: string;\n /** Name of the level */\n readonly name: string;\n /** Number or short identifier of the level */\n readonly short_name: string;\n /** Map URL for the level */\n readonly map_url: string;\n /** Usage type for the level */\n readonly type: 'staff' | 'client' | 'any';\n /** Setting for the level */\n readonly settings: HashMap;\n\n constructor(_data: HashMap = {}) {\n this.id = _data.id || _data.level_id || '';\n this.building_id = _data.bld_id || _data.building_id || '';\n this.name = _data.name || _data.level_name || '';\n const lower_name = this.name.toLowerCase();\n const num = lower_name.indexOf('level') >= 0 ? lower_name.replace(/ ?level ?/gi, '') : lower_name.substr(0, 1).toUpperCase();\n this.short_name = _data.short_name || num || '';\n this.map_url = _data.map_url || '';\n this.type = _data.type || _data.floor_type || 'any';\n this.settings = _data.settings;\n }\n}\n","import { BaseDataClass } from '../base-api.class';\nimport {\n getItemWithKeys,\n HashMap\n} from '@mckinsey-converge/base';\n\n/* istanbul ignore next */\n\nexport class Organisation extends BaseDataClass {\n /** List of available building zone ids for the organisation */\n public readonly available_buildings: readonly string[];\n /** Map of custom settings for the building */\n private _settings: HashMap;\n\n constructor(raw_data: HashMap = {}) {\n super(raw_data);\n this._settings = raw_data.settings || {};\n this.available_buildings = (raw_data.settings?.discovery_info?.buildings || []).map(\n (bld) => bld.zone_id\n );\n }\n\n /**\n * Get a custom building setting\n * @param key Name of the setting. i.e. nested items can be grabbed using `.` to seperate key names\n */\n public setting(key: string): any {\n const keys = key.split('.');\n const value = getItemWithKeys(keys, this._settings);\n return value;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ComposerService } from '@placeos/composer';\n\nimport { BaseAPIService } from '../base.service';\nimport { Organisation } from './organisation.class';\nimport { Building } from './building.class';\nimport {\n ApplicationLoadingState,\n HashMap,\n Identity\n} from '@mckinsey-converge/base';\nimport { BuildingLevel } from './level.class';\nimport { first } from 'rxjs/operators';\nimport { ApplicationService } from '../app.service';\nimport { ServiceManager } from '../service-manager.class';\nimport { UsersService } from '../users';\nimport { SettingsService } from '../settings.service';\nimport { Observable, Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OrganisationService extends BaseAPIService {\n /** Organisation data for the application */\n private _organisation: Organisation;\n /** Actively displayed building */\n private _active_building: string;\n\n private _spaceTypesSubject: Subject = new Subject();\n\n constructor(\n protected _composer: ComposerService,\n private _service: ApplicationService,\n private _users: UsersService,\n settingsService: SettingsService,\n ) {\n super(_composer, settingsService);\n ServiceManager.setService(Organisation, this);\n ServiceManager.setService(Building, this);\n this._name = 'Organisation';\n this._api_route = 'zones';\n this.set('buildings', []);\n this.set('active_building', null);\n this._users.initialised.pipe(first((_) => _)).subscribe(() => this.init());\n }\n\n /**\n * Add is not available on organisation service\n */\n public async add(form_data: HashMap, query_params?: HashMap): Promise {\n throw new Error('Add is not available on the organisation service');\n }\n\n /**\n * Update is not available on organisation service\n */\n public async update(\n id: string,\n form_data: HashMap,\n query_params?: HashMap\n ): Promise {\n throw new Error('Update is not available on the organisation service');\n }\n\n /**\n * Delete is not available on organisation service\n */\n public async delete(id: string): Promise {\n throw new Error('Delete is not available on the organisation service');\n }\n\n /**\n * Get list of levels for the given building ID\n * @param bld_id Building ID\n */\n public levels(bld_id: string): readonly BuildingLevel[] {\n return (this.buildings.find((i) => i.id === bld_id) || ({} as Building)).levels;\n }\n\n /**\n * Get a setting from the organisation or active building\n * @param key Name of the setting. i.e. nested items can be grabbed using `.` to seperate key names\n */\n public setting(key: string) {\n return this.building.setting(key) || this._organisation.setting(key);\n }\n\n /** Active building */\n public get building(): Building {\n return this.buildings.find((i) => i.id === this._active_building);\n }\n\n /** List of types of spaces */\n public get space_types(): Identity[] {\n return this.get('space_types') || [];\n }\n\n public set building(bld: Building) {\n if (bld instanceof Building) {\n this._active_building = bld.id;\n } else {\n this._active_building = bld;\n }\n this.set('active_building', this.building);\n this.loadSpaceTypes();\n localStorage.setItem('PlaceOS.building', this._active_building);\n localStorage.setItem('CONCIERGE.timezone', bld.timezone);\n }\n\n /** List of buildings for the organisation */\n public get buildings(): Building[] {\n return this.get('buildings') || [];\n }\n\n /**\n * Get list of available equipment\n * @param id ID of the building to get the list from. i.e. Defaults to the active building\n */\n public getExtras(id: string, bld_id?: string) {\n const bld = this.buildings.find((i) => i.id === bld_id) || this.building;\n if (bld && id) {\n return bld.extras.filter((i) => `${i.id}`.indexOf(id) >= 0);\n }\n return [];\n }\n\n /**\n * Get the first level matching the list of given IDs\n * @param ids List of ID to search with\n */\n public levelWithID(ids: string | string[]): BuildingLevel {\n const list = ids instanceof Array ? ids : [ids];\n const bld_list = this.buildings;\n for (const id of list) {\n for (const bld of bld_list) {\n for (const lvl of bld.levels) {\n if (lvl.id === id) {\n return lvl;\n }\n }\n }\n }\n return null;\n }\n\n /**\n * Initialise service data\n */\n protected async load(): Promise {\n /* istanbul ignore else */\n if (localStorage) {\n this._active_building = localStorage.getItem(`${this.settingsService.frontend.toUpperCase()}.building`);\n }\n const loading: ApplicationLoadingState = this._service.get('loading') || {};\n loading.organisation = { message: 'Loading organisation data', state: 'loading' };\n await this.loadOrganisation();\n loading.organisation = { message: 'Loading organisation data', state: 'complete' };\n loading.buildings = { message: 'Loading building data', state: 'loading' };\n this._service.set('loading', loading);\n await this.loadBuildings();\n loading.buildings = { message: 'Loading building data', state: 'complete' };\n loading.levels = { message: 'Loading building floor data', state: 'loading' };\n this._service.set('loading', loading);\n await this.loadLevels();\n loading.levels = { message: 'Loading building floor data', state: 'complete' };\n this._service.set('loading', loading);\n loading.space_types = { message: 'Loading space type data', state: 'loading' };\n this._service.set('loading', loading);\n await this.loadSpaceTypes();\n loading.space_types = { message: 'Loading space type data', state: 'complete' };\n this._service.set('loading', loading);\n const user = this._users.current;\n\n if (user) {\n const id = localStorage.getItem('PlaceOS.building');\n const building = this.buildings.find(bld => id && bld.id === id) || this.buildings.find((bld) => bld.code === user.location);\n if (building) {\n this._active_building = building.id;\n this.set('active_building', building);\n } else if(this.building) {\n // This conditional solves a problem of infinite loop when user building doesn't exist.\n this._active_building = this.building.id;\n this.set('active_building', this.building);\n }\n }\n }\n\n /**\n * Load organisation data for application\n */\n public async loadOrganisation(): Promise {\n const org_data = await this.query({ tags: 'org', engine: true });\n this._organisation = new Organisation(org_data[0]);\n this.set('organisation', this._organisation);\n return this._organisation;\n }\n\n /**\n * Load building data for the organisation already stored in the service..\n */\n public async loadBuildings(): Promise {\n return this.loadBuildingsWithOrg(this._organisation);\n }\n\n /**\n * Load building data for the organisation passed.\n */\n public async loadBuildingsWithOrg(organisation: Organisation): Promise {\n const bld_data = await this.query({ tags: 'building', engine: true, limit: 1000 });\n const buildings = (bld_data as HashMap[])\n .map((i) => new Building(i))\n .filter((bld) => organisation.available_buildings.includes(bld.id));\n this.set('buildings', buildings);\n /* istanbul ignore else */\n if (!this._active_building && buildings && buildings.length > 0) {\n this._active_building = buildings[0].id;\n }\n return buildings;\n }\n\n /**\n * Load level data for the buildings\n */\n public async loadLevels(): Promise {\n const lvl_data = await this.query({ tags: 'level', engine: true, limit: 1000 });\n const levels = (lvl_data as HashMap[]).map((i) => new BuildingLevel(i));\n this.set('levels', levels);\n return levels;\n }\n\n /**\n * Load space type data for the buildings\n */\n public async loadSpaceTypes(): Promise {\n const type_data = await this.query({ tags: 'room', engine: true, limit: 1000, building_id: this._active_building });\n const types = (type_data as HashMap[]).map((i) => ({ id: i.id, name: i.name }));\n this.set('space_types', types);\n // Emit the updated space_types\n this._spaceTypesSubject.next(types);\n }\n\n /**\n * Observable to listen for changes in space_types\n */\n public get spaceTypesObservable(): Observable {\n return this._spaceTypesSubject.asObservable();\n }\n\n public getOrganizationFiltersByRoomType(key: string) {\n if (!this._organisation) {\n return {}\n }\n const discovery_info = this._organisation.setting('discovery_info')\n\n return discovery_info && discovery_info[key] ? discovery_info[key] : {}\n }\n\n public getRoomTypeSubsetDDOptions(type:string) {\n const filters = this.getOrganizationFiltersByRoomType(type) || {}\n return [...Object.keys(filters).map((key) => {\n const display = filters[key].toString();\n return {\n display,\n value: key,\n meta: {}\n }\n }) ];\n }\n\n\n\n /**\n * The function will generate filter options, excluding London. London has its own set of options as per the request. \n * The filter options pertain to a subset of room type options managed by the room admin module.\n * @returns filterOptions: filter options for day view space type filter\n */\n public getRoomFilterOptionsPerLocation() {\n let internalSubSet = this.getRoomTypeSubsetDDOptions('internal_room_types');\n if(this.building.name.toLowerCase().includes('london')) {\n internalSubSet = internalSubSet.filter(e => !e.value.includes('meeting') && !e.value.includes('partner') );\n }\n const filterOptions = [];\n internalSubSet.forEach(el => filterOptions.push({name: el.display, id: el.value} ) ); \n return filterOptions\n }\n\n}\n","import { ComposerService } from '@placeos/composer';\nimport { BehaviorSubject, Observable, of, Subject, Subscriber } from 'rxjs';\n\nimport { BaseAPIService } from './base.service';\nimport { BaseClass, HashMap } from '@mckinsey-converge/base';\nimport { ApplicationService } from './app.service';\nimport { toQueryString } from './api.utilities';\nimport { SettingsService } from './settings.service';\nimport { catchError, map } from 'rxjs/operators';\n\nexport interface IEngineResponse {\n results: HashMap[];\n total: number;\n}\n\nexport class PaginatedAPIService extends BaseClass {\n /** Application service */\n public parent: ApplicationService;\n /** Display name of the service */\n protected _name: string;\n /** API Route of the service */\n protected _api_route: string;\n /** Map of state variables for Service */\n protected _subjects: { [key: string]: BehaviorSubject | Subject } = {};\n /** Map of observables for state variables */\n protected _observers: { [key: string]: Observable } = {};\n /** Map of poll subscribers for API endpoints */\n protected _subscribers: { [key: string]: Subscriber } = {};\n /** Map of promises for Service */\n protected _promises: { [key: string]: Promise } = {};\n /** Comparison function for service items */\n protected _compare: (a: T, b: T) => boolean = (a, b) =>\n a === b || (a as any).id === (b as any).id;\n /** Default filter function for list method */\n protected _list_filter: (a: T) => boolean = (a) => !!a;\n\n /** Http Client */\n protected get http() {\n return this._composer.http;\n }\n\n constructor(protected _composer: ComposerService,\n protected settingsService: SettingsService) {\n super();\n this._name = 'Base';\n this._api_route = 'base';\n this.set('list', []);\n }\n\n /**\n * Injects concierge into form_data.\n */\n private injectConcierge(form_data: HashMap) {\n // we only send it over when concierge, since the BE may check for presence rather than\n // if its true or not.\n if (this.settingsService.concierge) {\n return { ...form_data, concierge: true }\n }\n return form_data;\n }\n\n /**\n * Initailise service\n */\n public init() {\n this.load().then(\n (_) => this._initialised.next(true),\n (err) => this.timeout('init', () => this.init(), 1000)\n );\n }\n\n /**\n * Get API route for the service\n * @param engine Whether endpoint is using the application API or engine API\n */\n public route(engine: boolean = false) {\n const endpoint = engine\n ? this._composer.auth.api_endpoint\n : '/api/staff';\n return `${endpoint}/${this._api_route}`;\n }\n\n /** API Route of the service */\n public get api_route() {\n return this._api_route;\n }\n\n /**\n * Get the current value of the named property\n * @param name Property name\n */\n public get(name: string): U {\n if (!this._observers[name]) {\n this.set(name, null);\n }\n return (this._subjects[name] as BehaviorSubject).getValue();\n }\n\n /**\n * Listen to value change of the named property\n * @param name Property name\n * @param next Callback for value changes\n */\n public listen(name: string): Observable {\n if (!this._observers[name]) {\n this.set(name, null);\n }\n return this._observers[name];\n }\n\n /**\n * Update the value of the named property\n * @param name Property name\n * @param value New value\n */\n protected set(name: string, value: U): void {\n if (!this._subjects[name]) {\n this._subjects[name] = new BehaviorSubject(value);\n this._observers[name] = this._subjects[name].asObservable();\n } else {\n this._subjects[name].next(value);\n }\n }\n\n /**\n * Get list of loaded items\n * @param predicate Function for filtering the list\n */\n public filter(predicate: (a: T) => boolean = this._list_filter): T[] {\n const list: T[] = this.get('list');\n return list.filter(predicate);\n }\n\n /**\n * Get item with the given id from the loaded items\n * @param id ID of the item\n */\n public find(id: string): T {\n const list = this.get('list');\n return list.find((i) => i.id === id || (i.email?.toLowerCase() === id?.toLowerCase()));\n }\n\n /**\n * Query the index of the API route associated with this service\n * @param query_params Map of query paramaters to add to the request URL\n */\n public query(query_params: HashMap = {}, config: { url?: string } = {}): Promise {\n let engine = false;\n let cache = 1000;\n /* istanbul ignore else */\n if (query_params) {\n engine = !!query_params.engine;\n delete query_params.engine;\n cache = query_params.cache || 1000;\n delete query_params.cache;\n }\n const query = toQueryString(query_params);\n const key = `query|${query}`;\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const url = config && config.url ? `${config.url}${query ? '?' + query : ''}` : `${this.route(engine)}${query ? '?' + query : ''}`;\n let result: IEngineResponse;\n this.http.get(url).subscribe(\n (d: IEngineResponse | HashMap[]) => {\n if (d && d instanceof Array) {\n const results = d.map((i) => this.process(i));\n result = {\n results,\n total: results.length,\n }\n } else if (d && !(d instanceof Array) && d.results && d.total) {\n const results = d.results.map((i) => this.process(i));\n result = {\n results,\n total: d.total,\n }\n } else if (d && !(d instanceof Array) && d.results) {\n const results = d.results.map((i) => this.process(i));\n result = {\n results,\n total: results.length,\n }\n } else {\n result = {\n results: [],\n total: 0,\n }\n }\n },\n (e) => {\n reject(e);\n this._promises[key] = null;\n },\n () => {\n resolve(result);\n this.timeout(key, () => (this._promises[key] = null), cache);\n }\n );\n });\n }\n return this._promises[key];\n }\n\n /**\n * \n * @param query_params \n * @param config \n * @returns \n */\n queryHoldingBay(query_params: HashMap = {}, config: { url?: string } = {}):Observable {\n const query = toQueryString(query_params);\n const url = `${config.url}${query ? '?' + query : ''}`;\n return this.http.get(url).pipe(\n map((d: IEngineResponse | HashMap[]) => this.processApiResult(d) ),\n catchError((error: any, result?: T) => {\n console.log(error);\n return of(result as T);\n })\n );\n }\n\n /**\n * \n * @param d \n * @returns \n */\n processApiResult(d: IEngineResponse | HashMap[]): IEngineResponse{\n let result: IEngineResponse;\n if (d && d instanceof Array) {\n const results = d.map((i) => this.process(i));\n result = {\n results,\n total: results.length,\n }\n } else if (d && !(d instanceof Array) && d.results && d.total) {\n const results = d.results.map((i) => this.process(i));\n result = {\n results,\n total: d.total,\n }\n } else if (d && !(d instanceof Array) && d.results) {\n const results = d.results.map((i) => this.process(i));\n result = {\n results,\n total: results.length,\n }\n } else {\n result = {\n results: [],\n total: 0,\n }\n }\n return result;\n }\n \n\n /**\n * Query the API route for a sepecific item\n * @param id ID of the item\n * @param query_params Map of query paramaters to add to the request URL\n */\n public show(id: string, query_params: HashMap = {}): Promise {\n let engine = false;\n /* istanbul ignore else */\n if (query_params) {\n engine = !!query_params.engine;\n delete query_params.engine;\n }\n const query = toQueryString(query_params);\n const key = `show|${id}|${query}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const url = `${this.route(engine)}/${id}${query ? '?' + query : ''}`;\n let result: T = null;\n this.http.get(url).subscribe(\n (d) => {\n result = this.process(d); \n },\n (e) => {\n reject(e);\n this._promises.new_item = null;\n },\n () => {\n resolve(result);\n this.timeout(key, () => (this._promises[key] = null), 1000);\n }\n );\n });\n }\n return this._promises[key];\n }\n\n /**\n * Make post request for a new item to the service\n * @param form_data Data to post to the server\n * @param query_params Map of query paramaters to add to the request URL\n */\n public add(form_data: HashMap, query_params: HashMap = {}): Promise {\n /* istanbul ignore else */\n if (!this._promises.new_item) {\n this._promises.new_item = new Promise((resolve, reject) => {\n const query = toQueryString(query_params);\n const url = `${this.route(query_params.engine)}${query ? '?' + query : ''}`;\n let result: T = null;\n this.http.post(url, this.injectConcierge(form_data)).subscribe(\n (d) => (result = this.process(d)),\n (e) => {\n reject(e);\n this.analyticsEvent(`create-${this._name.toLowerCase()}-failed`);\n this._promises.new_item = null;\n },\n () => {\n resolve(result);\n this.set('list', this.updateList(this.get('list'), [result]));\n this.analyticsEvent(`create-${this._name.toLowerCase()}-success`);\n this._promises.new_item = null;\n }\n );\n });\n }\n return this._promises.new_item;\n }\n\n /**\n * Perform API task for the given item ID\n * @param id ID of the item\n * @param task_name Name of the task\n * @param form_data Map of data to pass to the API\n * @param method Verb to use for request\n */\n public task(\n id: string,\n task_name: string,\n form_data: HashMap = {},\n method: 'post' | 'get' = 'post'\n ): Promise {\n const query = toQueryString(this.injectConcierge(form_data));\n const key = `task|${id}|${task_name}|${query}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const post_data = { ...form_data, id, _task: task_name };\n const url = `${this.route(false)}/${id}/${task_name}`;\n let result: any;\n const request =\n method === 'post'\n ? this.http.post(url, post_data)\n : this.http.get(`${url}${query ? '?' + query : ''}`);\n request.subscribe(\n (d) => (result = d),\n (e) => {\n reject(e);\n this.analyticsEvent(\n `${this._name.toLowerCase()}-task-${task_name}-failed`,\n id\n );\n delete this._promises[key];\n },\n () => {\n resolve(result as U);\n this.analyticsEvent(\n `${this._name.toLowerCase()}-task-${task_name}-success`,\n id\n );\n this.timeout(key, () => delete this._promises[key], 1000);\n }\n );\n });\n }\n return this._promises[key];\n }\n\n\n /**\n * Make put request for changes to the item with the given id\n * @param id ID of the item being updated\n * @param form_data New values for the item\n * @param query_params Map of query paramaters to add to the request URL\n */\n public update(id: string, form_data: HashMap, query_params: HashMap = {}): Promise {\n const key = `update|${id}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const query = toQueryString(this.injectConcierge(query_params));\n const url = `${this.route(query_params.engine)}/${id}${query ? '?' + query : ''}`;\n let result: T = null;\n this.http.put(url, this.injectConcierge(form_data)).subscribe(\n (d) => (result = this.process(d)),\n (e) => {\n reject(e);\n this.analyticsEvent(`update-${this._name.toLowerCase()}-failed`, id);\n this._promises[key] = null;\n },\n () => {\n resolve(result);\n this.set(\n 'list',\n this.updateList(this.removeItem(this.get('list'), { id } as any), [\n result\n ])\n );\n this.analyticsEvent(`update-${this._name.toLowerCase()}-success`, id);\n this._promises[key] = null;\n }\n );\n });\n }\n return this._promises[key];\n }\n\n /**\n * Make delete request for the given item\n * @param id ID of item\n */\n public delete(id: string, q: HashMap = {}): Promise {\n const key = `delete|${id}`;\n /* istanbul ignore else */\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const query = toQueryString(q);\n const url = `${this.route()}/${id}${query ? '?' + query : ''}`;\n this.http.delete(url).subscribe(\n (_) => null,\n (e) => {\n reject(e);\n this._promises[key] = null;\n },\n () => {\n this.set('list', this.removeItem(this.get('list'), { id } as any));\n this._promises[key] = null;\n resolve();\n }\n );\n });\n }\n return this._promises[key];\n }\n\n /**\n * Load initial data for the service\n */\n protected async load(): Promise {\n }\n\n /**\n * Post analytics event for this service\n * @param action Name of the action to post\n */\n protected analyticsEvent(action: string, label?: string) {\n // if (this.parent && this.parent.Analytics) {\n // this.parent.Analytics.track(this._name, { desc: `${this.parent.name.toLowerCase()}-${action}`, label });\n // }\n }\n\n /**\n * Convert raw API data into a valid API Object\n * @param raw_item Raw API data\n */\n protected process(raw_item: HashMap): T {\n return raw_item as T;\n }\n\n /**\n * Update recorded list of items\n * @param old_list Old list of items\n * @param list List of updated items\n * @param compareFn Function to compare items to remove duplicates\n */\n public updateList(\n old_list: T[],\n list: T[],\n compareFn: (a: T, b: T) => boolean = this._compare\n ): T[] {\n /* istanbul ignore else */\n if (!list || list.length === 0) {\n return old_list;\n }\n const new_list: T[] = [];\n const mixed_list = [...list, ...old_list];\n /* istanbul ignore else */\n if (!compareFn) {\n compareFn = this._compare;\n }\n for (const item of mixed_list) {\n const found = new_list.find((i) => compareFn(i, item));\n /* istanbul ignore else */\n if (!found) {\n new_list.push(item);\n }\n }\n return new_list;\n }\n\n /**\n * Remove the given item from the given list\n * @param list List of items\n * @param item Item to remove\n * @param compareFn Function to compare items\n */\n protected removeItem(list: T[], item: T, compareFn?: (a: T, b: T) => boolean) {\n const new_list = [];\n /* istanbul ignore else */\n if (!compareFn) {\n compareFn = this._compare;\n }\n list.forEach((i) => (compareFn(item, i) ? null : new_list.push(i)));\n return new_list;\n }\n}\n","import { FormGroup } from \"@angular/forms\";\nimport { HashMap } from \"@mckinsey-converge/base\"\nimport { DateNow, DateTZ } from \"@mckinsey-converge/date-tz\"\n\nexport enum RecurrencePeriod {\n LIST = 'list',\n DAILY = 'daily',\n WEEKLY = 'weekly',\n //RELATIVE_MONTHLY = 'relativeMonthly', for the moment we will only support absoluteMonthly\n ABSOLUTE_MONTHLY = 'monthly'\n}\n\nexport enum DaysOfWeek {\n SUNDAY = 'sunday',\n MONDAY = 'monday',\n TUESDAY = 'tuesday',\n WEDNESDAY = 'wednesday',\n THURSDAY = 'thursday',\n FRIDAY = 'friday',\n SATURDAY = 'saturday'\n\n}\n\nexport enum SeriesAction {\n EDIT = 'edit',\n CLONE = 'clone'\n}\n\nexport enum BookingAction {\n CLONE = 'booking_clone',\n EDIT = 'booking_edit'\n}\n\nexport interface WeekDays {\n id: string;\n active: boolean;\n day_index: number;\n full_name: string;\n}\n\nexport interface RepeatPeriod {\n id: RecurrencePeriod;\n label: string\n}\n\nexport enum RepeatsOn {\n PATTERN = 'pattern',\n DATE = 'date'\n}\n\nexport interface RecurrenceType {\n type: RepeatsOn;\n label: string;\n}\n\nexport interface RecurrenceDetails {\n period: RecurrencePeriod,\n end: DateTZ,\n list: Array\n interval: number\n}\n\nexport interface RecurrenceRecurringDetails extends RecurrenceDetails {\n start: number\n}\n\nexport const recurrencePeriodToDurationType = (period: RecurrencePeriod) =>{\n switch (period) {\n case RecurrencePeriod.DAILY:\n return 'days'\n case RecurrencePeriod.WEEKLY:\n return 'weeks' \n case RecurrencePeriod.ABSOLUTE_MONTHLY:\n return 'months' \n default:\n return 'days'\n }\n}\n\n/**\n * Generate weekdays from monday to saturday\n */\nexport const generateWeekDays = (date: number, params: { building_tz?: string } = {}): Array=> {\n const { building_tz } = params;\n let start_week = DateNow(new Date()).startOfValue('week').addValue({days : 1}); //set monday as start of week\n const week_days: Array = []\n for (let i = 1; i <= 7; i++) {\n const activeDate = new DateTZ({date, building_tz, is_local_tz: false })\n const active = activeDate.dateWeekday === i\n const full_name = start_week.formatDate('EEEE')\n const day_index = i === 7 ? 0 : i //Sunday must be indexed as day 0\n week_days.push({id: full_name.substring(0, 1), active, day_index, full_name: full_name.toLocaleLowerCase()});\n start_week = start_week.addValue({ days : 1 });\n }\n return week_days\n}\n\nexport const getFirstDateFromList = (list: Array) => {\n return list.reduce((a, b) => { return a.isBeforeDate(b) ? a : b; });\n}\n\nexport const getLastDateFromList = (list: Array) => {\n return list.reduce((a, b) => { return a.isAfterDate(b) ? a : b; });\n}\n\nexport const recurrenceDetails = (recurr: RecurrenceDetails): string => {\n const end = getLastDateFromList(recurr.list).formatDate('ccc dd MMM yyyy')\n const getPeriod = (period: string) => {\n if(recurr.interval === 1){\n return `Occurs Every ${period} until ${end}`\n }else{\n return `Occurs Every ${recurr.interval} ${period}s until ${end}`\n }\n } \n \n switch (recurr.period) {\n case RecurrencePeriod.DAILY:\n return getPeriod('Day')\n case RecurrencePeriod.WEEKLY:\n return getPeriod('Week')\n case RecurrencePeriod.ABSOLUTE_MONTHLY:\n return getPeriod('Month')\n case RecurrencePeriod.LIST:\n return `Occurs on Specific Dates until ${getLastDateFromList(recurr.list).formatDate('ccc dd MMM yyyy')}`\n default:\n return ''\n }\n}\n\nexport const recurrenceRecurringDetails = (recurr: RecurrenceRecurringDetails): string => {\n const end = recurr.end\n const start = new DateTZ({ date: recurr.start })\n\n const getPeriod = (period: string) => {\n if(recurr.interval === 1){\n return `occurs every ${period} effective ${start.formatDate('dd MMM yyyy')} until ${end.formatDate('dd MMM yyyy')}`\n }else{\n return `occurs every ${recurr.interval} ${period}s effective ${start.formatDate('dd MMM yyyy')} until ${end.formatDate('dd MMM yyyy')}`\n }\n }\n\n switch (recurr.period) {\n case RecurrencePeriod.DAILY:\n return getPeriod('Day')\n case RecurrencePeriod.WEEKLY:\n return getPeriod('Week')\n case RecurrencePeriod.ABSOLUTE_MONTHLY:\n return getPeriod('Month')\n case RecurrencePeriod.LIST:\n return `occurs on Specific Dates`\n default:\n return ''\n }\n}\n\nexport const handleRecurrenceFields = (data: HashMap) => {\n if(data.is_recurrent){\n if(data.recurrence_period !== RecurrencePeriod.LIST){\n delete data.recurrence_starts\n delete data.recurrence_endTz\n if(data.recurrence_period !== RecurrencePeriod.WEEKLY){\n delete data.recurrence_days\n }\n } else if(data.recurrence_period){\n data.recurrence_list = [...(data.recurrence_starts || []).map((date: DateTZ) => date.startOfValue('minute').seconds)]\n delete data.recurrence_interval;\n delete data.recurrence_endTz;\n delete data.recurrence_count;\n delete data.recurrence_starts\n delete data.recurrence_days\n }\n delete data.is_recurrent\n }else{\n delete data.recurrence_period;\n delete data.recurrence_interval;\n delete data.recurrence_endTz;\n delete data.recurrence_count;\n delete data.recurrence_starts\n delete data.is_recurrent\n delete data.recurrence_exceptions\n delete data.recurrence_days\n }\n\n return data\n}\n\n/** Removes expired occurrences and updates start and end dates when cloning a series */\nexport const removeExpiredOcurrences = (form: FormGroup) =>{\n if(form.controls.action?.value === SeriesAction.CLONE ){\n const tz = form.controls.space_list.value[0].timezone\n const date_now = new DateTZ({ is_local_tz: false, building_tz: tz });\n const occurrences = form.controls.recurrence_starts.value.filter((date: DateTZ) =>\n date_now.isBeforeDate(date, 'day') || date_now.isSameDate(date, 'day')\n )\n form.controls.recurrence_starts.setValue(occurrences)\n const { start, end } = setStartAndEndDateFromArray(occurrences, tz)\n form.controls.dateTz.setValue(start)\n form.controls.recurrence_endTz.setValue(end)\n }\n}\n\n/** \n * Returns starts and end dates from an array of dates in milliseconds \n **/\n export const setStartAndEndDateFromArray = (dates: Array, tz: string): {start: DateTZ, end: DateTZ} =>{\n if(dates.length !== 0){\n return {\n start: dates.sort((d1, d2) => d1.ms - d2.ms)[0] ,\n end: dates.sort((d1, d2) => d2.ms - d1.ms)[0]\n }\n }\n //if the dates array is empty set the start and end dates as the current and next day\n const now = DateNow(new Date()).toZone(tz)\n return {start: now, end: now.addValue({days: 1})}\n}\n\nexport const setRecurrenceStartsTime = (form: FormGroup) => {\n const { recurrence_starts, dateTz } = form.value\n const list = (recurrence_starts || []).map((date: DateTZ) => date.setValue({hour: dateTz.dateHour, minute: dateTz.minutes}))\n form.controls.recurrence_starts.setValue(list)\n}","export * from './report.class'\nexport * from './reports.service'\n","import { CurrencyPipe } from '@angular/common';\n\nimport {\n csvToJson,\n downloadFile,\n HashMap,\n humaniseDuration,\n jsonToCsv,\n} from '@mckinsey-converge/base';\n\nimport { ServiceManager } from '../service-manager.class';\nimport { Space } from '../spaces';\nimport { Organisation } from '../organisation';\n\nexport class Report {\n /** Type of report */\n public readonly type: string;\n /** List of data associated with the report */\n public readonly data: T[];\n\n constructor(raw_data: HashMap = {}) {\n this.type = raw_data.type || '';\n this.data = this.cleanData(raw_data.data);\n }\n\n /** Create report data structure from CSV */\n public static fromCSV(type: string, data: string): Report {\n const csv_json = csvToJson(data);\n return new Report({ type, data: csv_json });\n }\n\n /** Download report data as CSV format */\n public downloadCSV(name: string = 'unnamed.csv'): void {\n downloadFile(name, jsonToCsv(this.data));\n }\n\n /** Download report data as JSON format */\n public downloadJSON(name: string = 'unnamed.json'): void {\n downloadFile(name, JSON.stringify(this.data, undefined, 4));\n }\n\n public formatCancelledBy(email: string) {\n if (email !== null && email !== undefined) {\n let name = email.split('@')[0];\n name = name.split('_').join(' '); //get name from email and convert it to title case\n name = name.replace(/\\w\\S*/g, function (txt) {\n return `${txt\n .charAt(0)\n .toUpperCase()}${txt.substr(1).toLowerCase()}`;\n });\n return name;\n } else {\n return email;\n }\n }\n\n public timeConverter( UNIX_timestamp: number ){\n if(!UNIX_timestamp) return '';\n let a = new Date(UNIX_timestamp * 1000);\n let months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];\n let year = a.getFullYear();\n let month = months[a.getMonth()];\n let date = a.getDate();\n let hour = ((a.getHours() + 11) % 12 + 1);\n let suffix = a.getHours() >= 12 ? \"PM\":\"AM\";\n let min = a.getMinutes() === 0 ? '00':a.getMinutes();\n let time = date + ' ' + month + ' ' + year + ' - ' + hour + ':' + min + ' ' + suffix;\n return time;\n }\n\n private cleanData(data: T[] = []) {\n if (data.length > 0 && this.type === 'day') {\n for (let i = 0; i < data.length; i++) {\n data[i]['booker'] = data[i]['booker'].name;\n data[i]['expected_attendees'] = Object.values(data[i]['expected_attendees'])[0];\n }\n } else if (data.length > 0 && this.type === 'audit') {\n for (let i = 0; i < data.length; i++) {\n data[i]['created_at'] = this.timeConverter(data[i]['created_at']);\n }\n } else if (data.length > 0 && this.type === 'catering') {\n for (let i = 0; i < data.length; i++) {\n data[i]['Cancelled By'] = this.formatCancelledBy(\n data[i]['Cancelled By']\n );\n }\n const fields = Object.keys(data[0]);\n const room_field = fields.find(\n (key) =>\n key.toLowerCase().includes('room') &&\n key.toLowerCase().includes('email')\n );\n const price_field = fields.find((key) =>\n key.toLowerCase().includes('price')\n );\n\n for (let row of data) {\n /* istanbul ignore else */\n const space_service = ServiceManager.serviceFor(Space);\n if (room_field && price_field && space_service) {\n const room = space_service.find(\n row[room_field].toLowerCase()\n );\n const org_service = ServiceManager.serviceFor(Organisation);\n const bld = org_service.buildings.find(\n (bld: { id: any }) =>\n bld.id === room?.level?.building_id\n );\n row[price_field] = new CurrencyPipe('en_us').transform(\n row[price_field] / 100,\n bld?.currency\n );\n }\n /* istanbul ignore else */\n for (let field of fields) {\n row[field] =\n typeof row[field] === 'string'\n ? row[field].replace(/\\,/g, '٫')\n : row[field];\n }\n }\n } else if (this.type === 'bookings') {\n data = data.map((i: HashMap) => {\n const booking = i;\n try {\n if (booking.setup instanceof Object) {\n booking.setup = booking.setup[booking.room_email];\n }\n if (booking.breakdown instanceof Object) {\n booking.breakdown =\n booking.breakdown[booking.room_email];\n }\n booking.setup = humaniseDuration((booking.setup || 0) / 60);\n booking.breakdown = humaniseDuration(\n (booking.breakdown || 0) / 60\n );\n booking.description = (booking.description || '')\n .replace(/<[^>]*>?/gm, '')\n .replace(/\\,/g, '٫')\n .replace(/\\r?\\n|\\r/g, ' ');\n booking['Meeting Host'] =\n booking.organizer?.name || booking.organizer;\n booking['Booked By'] =\n booking.booked_by?.name ||\n booking.booked_by?.email ||\n '';\n booking.charge_code =\n booking.equipment_codes[booking.room_email] || '';\n // booking.expected_attendees = Object.keys(booking.expected_attendees).map(key => booking.expected_attendees[key]).join(', ');\n booking.attendees = (booking.attendees || [])\n .map((person) => person.name || person.email || person)\n .join('٫ ');\n booking.notes = (booking.notes || [])\n .map((note) =>\n note.author &&\n (note.type === 'description' ||\n note.type === 'private')\n ? `[${note.author}|${note.type}]${note.message\n .replace(/<[^>]*>?/gm, '')\n .replace(/\\,/g, '٫')\n .replace(/\\r?\\n|\\r/g, ' ')}`\n : ''\n )\n .join(' | ');\n booking.cancelled = booking.isCancelled;\n booking.status = booking.status[booking.room_email] || '';\n booking.company = booking.company.join(', ');\n if (booking.cancelled_by) {\n booking.cancelled_by = this.formatCancelledBy(\n booking.cancelled_by\n );\n }\n booking.cancelled_date = this.timeConverter(booking.cancelled_at_epoch);\n\n } catch (e) {}\n const remove_fields = [\n 'id',\n 'icaluid',\n 'accepted_at',\n 'accepted_by',\n 'check_ins',\n 'changeKey',\n 'created',\n 'booking_type',\n 'edit_history',\n 'end_epoch',\n 'old_attendees',\n 'start_epoch',\n 'expected_attendees',\n 'isAllDay',\n 'isCancelled',\n 'body',\n 'is_free',\n 'lastModifiedDateTime',\n 'locationType',\n 'locations',\n 'organizer',\n 'booked_by',\n 'originalEndTimeZone',\n 'originalStartTimeZone',\n 'room_booking_status',\n 'room_email',\n 'room_emails',\n 'room_id',\n 'sensitivity',\n 'seriesMasterId',\n 'show_as',\n 'notes',\n 'subject',\n 'type',\n 'previous_booking',\n 'catering',\n 'responseStatus',\n 'equipment_codes',\n 'cancelled_at_epoch',\n ];\n for (const field of remove_fields) {\n if (booking[field] !== undefined) {\n delete booking[field];\n }\n }\n const output = {};\n const order = [\n 'title',\n 'start',\n 'end',\n 'location',\n 'Meeting Host',\n 'Booked By',\n 'booked_at',\n 'booked_ahead_by',\n 'all_day',\n 'attendees',\n 'company',\n 'description',\n 'cancelled',\n 'cancelled_by',\n 'cancelled_date',\n ];\n const keys = Object.keys(booking);\n keys.sort((a, b) => {\n const idx_a = order.indexOf(a);\n const idx_b = order.indexOf(b);\n return (\n (idx_a === -1 ? keys.length : idx_a) -\n (idx_b === -1 ? keys.length : idx_b)\n );\n });\n for (const key of keys) {\n output[key] = booking[key];\n }\n return output;\n }) as any;\n }\n return data;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ComposerService } from '@placeos/composer';\n\nimport { Report } from './report.class';\nimport { BaseAPIService } from '../base.service';\nimport { SettingsService } from '../settings.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ReportsService extends BaseAPIService {\n constructor(protected _composer: ComposerService,\n settingsService: SettingsService) {\n super(_composer, settingsService);\n this._name = 'Reports';\n this._api_route = 'reports';\n }\n\n protected process(raw_data: any): Report {\n return raw_data instanceof Array\n ? new Report({ data: raw_data })\n : Report.fromCSV('', raw_data);\n }\n}\n","import { Type } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { HashMap } from '@mckinsey-converge/base';\n\n\nexport interface ServiceLike extends HashMap {\n parent: any;\n add: (_: HashMap) => Promise;\n update: (id: string, _: HashMap) => Promise;\n delete: (id: string, params?: HashMap) => Promise;\n task: (id: string, name: string, data: HashMap) => Promise;\n listen: (prop: string) => Observable;\n}\n\nexport interface ServiceProvider {\n provideFor: Type;\n useValue: T;\n}\n\nexport class ServiceManager {\n /** Map of available services for child classes */\n private static _service_list: ServiceProvider[] = [];\n\n /** Set the services used to handle data model requests */\n public static setService(type: Type, service: any): void {\n if (window.debug) {\n (window as any).ServiceManager = this._service_list;\n }\n const index = ServiceManager._service_list.findIndex(provider => provider.provideFor === type);\n if (index >= 0) {\n ServiceManager._service_list.splice(index, 1, { provideFor: type, useValue: service });\n } else {\n ServiceManager._service_list.push({ provideFor: type, useValue: service });\n }\n }\n\n /** Get the services used to handle data model requests */\n public static serviceFor(type: Type): ServiceLike {\n const provider = ServiceManager._service_list.find(provider => provider.provideFor === type) || { useValue: null };\n return provider.useValue;\n }\n\n constructor() {\n throw new Error('ServiceMananger is static class');\n }\n}\n","import {\n Inject,\n Injectable\n} from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport {\n BehaviorSubject,\n Observable\n} from 'rxjs';\n\nimport { VERSION } from '@mckinsey-converge/environment';\nimport {\n BaseClass,\n getItemWithKeys,\n HashMap,\n log\n} from '@mckinsey-converge/base';\nimport { ServiceManager } from './service-manager.class';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\ndeclare global {\n interface Window {\n debug: boolean;\n }\n}\n\nexport const SETTINGS_TOKEN = 'settings_service_data';\n\ntype SettingsAppData = T & {\n title: string;\n description: string;\n short_name: string;\n logo_light: {\n type: string;\n src: string;\n background: string;\n }\n logo_dark: {\n type: string;\n src: string;\n background: string;\n }\n heap_io: {\n app_id: number;\n force_ssl: boolean;\n secure_cookie: boolean;\n disable_text_capture: boolean;\n cookie_path: string;\n }\n}\n\nexport interface SettingsData {\n debug: boolean;\n mock: boolean;\n frontend: 'staff' | 'concierge' | 'booking';\n composer: {\n domain: string;\n route: string;\n protocol: string;\n port: string;\n use_domain: boolean;\n local_login: boolean;\n }\n app: SettingsAppData;\n}\n\nexport class SettingsObject {\n constructor(public data: SettingsData) {\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SettingsService extends BaseClass {\n /** Name of the application */\n private _app_name = 'Converge';\n /** List of override settings in order of priority */\n private _overrides = new BehaviorSubject([]);\n /** Mapping of behaviour subjects */\n private _subjects: HashMap> = {};\n /** Mapping of observables */\n private _observables: HashMap> = {};\n /** Which frontend we're in. staff, concierge, or bookings **/\n public readonly frontend: string;\n private _bypass_bookings: boolean = false;\n\n /**\n * @hidden\n */\n public set overrides(value: HashMap[]) {\n this._overrides.next(value);\n }\n\n /** Get observable for key */\n public listen(name: string): Observable {\n if (!this._observables[name]) {\n this._subjects[name] = new BehaviorSubject(null);\n this._observables[name] = this._subjects[name].asObservable();\n }\n return this._observables[name];\n }\n\n /** Update observable value for key */\n public post(name: string, value: T): void {\n if (!this._observables[name]) {\n this._subjects[name] = new BehaviorSubject(null);\n this._observables[name] = this._subjects[name].asObservable();\n }\n this._subjects[name].next(value);\n }\n\n public value(name: string): T {\n return !this._observables[name] ? null : this._subjects[name].getValue();\n }\n\n /** Page title */\n public get title() {\n return this._title.getTitle();\n }\n\n public set title(value: string) {\n this._title.setTitle(`${value} | ${this._app_name}`);\n }\n\n constructor(private _title: Title,\n @Inject(SETTINGS_TOKEN)\n private settings: SettingsObject) {\n super();\n ServiceManager.setService(SettingsService, this);\n const time = new DateTZ({date: VERSION.time});\n const built = DateNow(new Date()).isSameDate(time, 'day')\n ? `Today at ${time.formatDate('h:mma')}`\n : time.formatDate('do MMM yyyy, h:mma');\n const frontend = this.get('frontend') || 'Unknown';\n this.frontend = frontend;\n log('CORE', `${VERSION.semver}`, null, 'debug', true, frontend?.toUpperCase());\n log('APP', `${VERSION.hash} | Built: ${built}`, null, 'debug', true, frontend?.toUpperCase());\n this.init();\n }\n\n /**\n * Initialise the settings\n */\n public async init() {\n if (this.get('debug')) {\n window.debug = true;\n }\n if (this.get('app')?.name) {\n this._app_name = this.get('app').name;\n }\n log('Settings', 'Successfully loaded settings');\n this._initialised.next(true);\n }\n\n /** Whether settings service has initialised */\n public get app_name() {\n return this._app_name;\n }\n\n public get concierge() {\n return this.frontend === 'concierge';\n }\n\n public set bypass_bookings(value: boolean) {\n this._bypass_bookings = value;\n }\n\n public get bypass_bookings() {\n return this._bypass_bookings;\n }\n\n /**\n * Get a setting\n * @param key Name of the setting. i.e. nested items can be grabbed using `.` to seperate key names\n */\n public get(key: string): any {\n const keys = key.split('.');\n if (keys[0] !== 'app') {\n return getItemWithKeys(keys, this.settings.data);\n }\n const override_settings = this._overrides.getValue();\n for (const override of override_settings) {\n const value = getItemWithKeys(keys.slice(1), override);\n if (value != null) {\n return value;\n }\n }\n return getItemWithKeys(keys, this.settings.data);\n }\n}\n","export * from './space.class';\nexport * from './spaces.service';\nexport * from './space.utilities';\n","import { BaseDataClass } from '../base-api.class';\nimport {\n HashMap,\n} from '@mckinsey-converge/base';\nimport {\n Building,\n BuildingLevel,\n Organisation\n} from '../organisation';\nimport { User } from '../users';\nimport { ServiceManager } from '../service-manager.class';\nimport { SettingsService } from '../settings.service';\nimport { SpaceRules } from '../bookings/booking.types';\nimport { rulesForSpace } from '../bookings/space.utilities';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\nimport { DaysOfWeek, RecurrencePeriod } from '../recurrence/recurrence.utils';\nimport { DateTime } from 'luxon';\n\nexport interface ISpaceAvailabilityOptions {\n /** Start date and time of the availability block */\n dateTz?: DateTZ;\n /** Length of the availability block */\n duration: number;\n /** */\n id?: string;\n /** List of spaces to look at the availability for */\n room_ids?: string;\n /** Whether the spaces looked at should be bookable */\n bookable?: boolean;\n /** List of spaces or zones to ignore */\n ignore?: string;\n /** List of zones to look at the availability for */\n zone_ids?: string | string[];\n /** Whether space bookings should not be returned */\n hide_bookings?: boolean;\n /** Min capacity on the room **/\n capacity?: number\n clear?: boolean;\n /** Length of the setup */\n setup?: number;\n /** Length of the breakdown */\n breakdown?: number;\n /** Hide declined bookings */\n hide_declined?: boolean;\n /** Max capacity on the room **/\n capacity_max?: number\n\n diff_capacity?: boolean\n\n /** Fields to include recurrence in the availability search */\n recurrence_period?: RecurrencePeriod;\n recurrence_interval?: number;\n recurrence_endTz?: DateTZ;\n recurrence_count?: number;\n recurrence_starts?: Array\n is_recurrent?: boolean\n is_multiroom?: boolean\n merged?: boolean\n recurrence_days?: Array\n}\n\nexport interface SpaceBookingRuleOptions {\n dateTz: DateTZ;\n duration: number;\n host: User;\n}\n\nexport const OPTION_DEFAULTS: ISpaceAvailabilityOptions = {\n duration: 60\n};\n\nexport interface RecurrenceAvailability {\n /** Unix epoch in seconds */\n readonly date: number;\n /** Whetehr space is available at this time */\n readonly available: boolean;\n}\n\n/**\n * Room Settings Type\n *\n * Exmaple:\n * available: true\n * available_until: 1644344999\n * bookings: []\n * catering: false\n * charge_code: false\n * extra_features: \"meeting_room boardroom\"\n * internal_or_external: \"internal\"\n * map_id: \"08.8.15\"\n * natural_light: false\n * room_booking_screen: true\n * room_name: \"8.15 Meeting\"\n * vc: false\n * recurrence_availability: {\n * date: \"1642596300\",\n * available: false,\n * }\n */\nexport interface RoomSettings {\n // Local room name is required.\n room_name?: string\n // TBD if anything else should be required\n available?: boolean\n available_until?: number\n bookings?: HashMap[]\n catering?: boolean\n charge_code?: boolean\n extra_features?: string\n internal_or_external?: string\n map_id?: string\n natural_light?: boolean\n room_booking_screen?: boolean\n vc?: boolean\n recurrence_availability?: RecurrenceAvailability[]\n equipment_code?: boolean\n external?: boolean\n}\n\n/**\n * List of space features that come from settings.\n *\n * Im sure this list will grow. It is not the most comprehensive list.\n */\nexport enum SpaceFeatures {\n BoardRoom = 'boardroom',\n Catering = 'catering',\n CocktailRoom = 'cocktail',\n ConferencePhone = 'conference_phone',\n ConferenceRoom = 'conference',\n ElectronicWhiteboard = 'whiteboard',\n FlipChart = 'flipchart',\n Glassboard = 'glassboard',\n PartnerOffice = 'partner',\n PhoneBooth = 'phone_booth',\n TheatreRoom = 'theatre',\n TeamRoom = 'team_room',\n VideoConference = 'vc',\n NaturalLight = 'natural_light',\n WirelessContentSharing = 'wireless_content_sharing',\n WorkshopRoom = 'workshop',\n UShapeRoom = 'u_shape',\n Miscellaneous = 'miscellaneous'\n}\n\nexport enum SpaceEquipments {\n conference_phone,\n whiteboard,\n vc,\n flipchart,\n glassboard,\n wireless_content_sharing\n}\nexport enum SpaceStyles {\n boardroom,\n cocktail,\n conference,\n partner,\n theatre,\n team_room,\n // natural_light,\n workshop,\n u_shape,\n miscellaneous\n}\n\nconst EMPTY_ARRAY = [];\n\nexport class Space extends BaseDataClass {\n /** Whether space can be booked by users */\n public readonly bookable: boolean;\n /** People capacity of the space */\n public readonly capacity: number;\n /** Index to force order when sorting multiple spaces */\n public readonly sort_priority: number;\n /** Settings has extensive info displayed in the app. */\n public readonly settings: RoomSettings;\n /** URL for the control interface of the space */\n public readonly support_url: string;\n /** Engine zones associated with the space */\n public readonly zones: readonly string[];\n /** Is the Application concierge */\n public is_concierge: boolean = false;\n /** To allow bookings with rooms for staff calendar view only */\n public allowStaffRoomWithBookings: boolean = false;\n\n /** Simple name == local name being using in seeting.room_name\n\t\t *\n\t\t*/\n public simple_name: string;\n\n /** Room style set of all room style one room has\n * [\"boardroom\", \"cocktail\", \"miscellaneous\", \"natural_light\", \"theatre\", \"u-shape\", \"workshop\"] */\n public room_style: string[] = [];\n\n /** Equipment set of all room equipment one room has\n * [\"conference_phone\", \"whiteboard\", \"vc\", \"flipchart\", \"glassboard\", \"whiteboard\", \"wireless_content_sharing\"] */\n public equipment: string[] = [];\n\n /** Filters has charge code settings for booking and catering */\n public filters: RoomSettings;\n\n /** room_type subset of internal or external rooms */\n public room_type: string[] | string;\n /**\n * Features used in identifying room types.\n *\n * Both features and extra_features are space delimited strings.\n *\n * There is a getter featuresArray that returns the\n * combination of the two as an array.\n */\n public readonly features: string;\n public readonly extra_features: string;\n public map_id: string;\n\n\n /** Service for managing spaces */\n protected get _service() {\n return ServiceManager.serviceFor(Building);\n }\n\n /** Return the rooms' building */\n public get building() {\n return this._service?.buildings.find((bld) => {\n return this.zones.includes(bld.id);\n });\n }\n\n /** Return building timezone */\n public get timezone() {\n return this.building?.timezone;\n }\n\n constructor(raw_data: HashMap = {}) {\n super(raw_data);\n\n // Needed to check if the current app is Concierge or Staff\n const settingsService = ServiceManager.serviceFor(SettingsService) as unknown as SettingsService;\n this.is_concierge = !!settingsService?.concierge;\n this.allowStaffRoomWithBookings = settingsService?.bypass_bookings || false;\n\n const defaultGlobalName = raw_data.name || raw_data.email || 'Meeting Room';\n const defaultSettings = {\n room_name: defaultGlobalName\n }\n /**\n * Duplicate of base-api.class just for readability\n * .name is the full, mckinsey standardised name of the room.\n * You can think of it was what people would call the room when\n * considering every office and room globally.\n *\n * this.name = raw_data.name;\n */\n /**\n * Settings has extensive info displayed in the app.\n * setting.room_name is always used when displaying the room name in the applications\n * setting.room_name is the more office-specific room name, you can think of this as\n * the one people in that office would refer to the room as.\n *\n */\n this.settings = raw_data.settings || defaultSettings;\n this.filters = raw_data?.filters;\n // Room fields\n this.bookable = raw_data.bookable || false;\n this.capacity = raw_data.capacity || 0;\n this.support_url = raw_data.support_url;\n this.zones = raw_data.zones instanceof Array ? raw_data.zones : [];\n // Feature fields\n this.features = raw_data.features || '';\n this.extra_features = raw_data.settings?.extra_features || '';\n\n\t\tthis.room_type = raw_data?.room_type;\n this.simple_name = raw_data?.simple_name;\n this.map_id = raw_data?.map_id || raw_data.settings?.map_id || '';\n this.room_style = raw_data?.room_style || [];\n this.equipment = raw_data?.equipment || [];\n\n }\n\n /**\n * Return the global room name\n * IE LDN-4-408-06\n */\n public get global_name(): string {\n return this.name || ''\n }\n\n /**\n * Return the local room name\n * i.e. 4.08\n * TO DO: ROOM-DATA-STRUCTURE-REFACTOR - stop using/remove seetings.room_name\n */\n public get local_name(): string {\n return this.simple_name || this.name || ''; // this.settings?.room_name\n }\n\n public get street_and_city(): string {\n return this.building ? `${this.building.address}, ${this.building.city}` : '';\n }\n\n /**\n * Return the map_id from settings\n * TO DO: ROOM-DATA-STRUCTURE-REFACTOR - stop using/remove seetings.map_id and use map_id from space modal( after testing over prod)\n */\n // public get map_id(): string {\n // return this?.map_id || this.settings?.map_id || '';\n // }\n\n /** Internal / External status */\n public get internal_or_external(): string {\n const external = this.filters?.external;\n return external ? 'external' : 'internal'; // ( external ? 'external' : this.settings?.internal_or_external ) || 'internal';\n }\n\n /**\n * Works in conjunction with available_until.\n *\n * If a room is bookable that only means you can make a booking but not when.\n * Available indicates that it is available to be booked durring the queried times.\n */\n public get available(): boolean {\n return this.settings?.available ?? false;\n }\n\n public get currently_in_use(): boolean {\n const nowMs = new DateTZ({ date: DateTime.now(), is_local_tz: false, building_tz: this.timezone }).ms;\n const runningBookings = this.settings?.bookings?.filter( bks => {\n const startEpoch = new DateTZ({ date: bks.start_epoch * 1000, is_local_tz: false, building_tz: bks.timezone}).ms;\n const endEpoch = new DateTZ({ date: bks.end_epoch * 1000, is_local_tz: false, building_tz: bks.timezone}).ms;\n return startEpoch <= nowMs && endEpoch >= nowMs;\n })\n // console.log(raw_data.settings.room_name+' : '+ nowMs.ms);\n // console.log('IS IN USER CURRENTLY : ', isinUsernow);\n return !!runningBookings.length;\n }\n\n /** Last returned availability time */\n public get available_until(): number {\n return this.settings?.available_until;\n }\n\n /** Bookings associated with the space */\n public get bookings(): HashMap[] {\n // We should need to care if a room as bookings in Staff\n if (!this.is_concierge && !this.allowStaffRoomWithBookings) {\n return EMPTY_ARRAY;\n }\n\n if (this.settings?.bookings?.length) {\n /**\n * When we're dealing with Concierge the API data arriving is rooms, and those rooms contain booking,\n * but those bookings don't contain a room since the room is the root.\n * In order for Concierge to filter bookings by room we need to reattach this room\n * to each of the bookings, with it's own bookings.\n *\n * It's loopy and kooky but correcting for this pattern is beyond the scope of this refactor.\n */\n const spaceWithBookings = new Space(this.toJSON());\n return this.settings?.bookings.map(b => {\n b.room = spaceWithBookings;\n return b;\n });\n }\n return EMPTY_ARRAY;\n }\n\n /**\n\t\t * Whether space has catering\n * TO DO: ROOM-DATA-STRUCTURE-REFACTOR - stop using/remove seetings.catering and use filters?.catering instead\n\t\t */\n public get has_catering(): boolean {\n return this.filters?.catering || this.settings?.catering || false;\n }\n\n /** Returns an array of the space delimited feature and extra_feature strings.\n * TO DO: ROOM-DATA-STRUCTURE-REFACTOR - stop using/remove features, extra_features\n */\n public get featuresArray(): (SpaceFeatures | string)[] {\n // (this.simple_name === \"Entresol M-06\" ) && console.log('raw_data : ', this)\n const roomType = Array.isArray(this.room_type) ? this.room_type : [this.room_type]\n const features = [\n ...this.features.split(' '),\n ...this.extra_features?.split(' '),\n\n ...roomType, // required to work with staff>result>filters\n ...this?.room_style,\n ...this?.equipment,\n\n (this.filters?.natural_light) && SpaceFeatures.NaturalLight || undefined, // || this.settings?.natural_light\n // this.settings?.natural_light && SpaceFeatures.NaturalLight || undefined,\n // this.settings?.vc && SpaceFeatures.VideoConference || undefined,\n ].filter(f => !!f).map(f => f.toLowerCase());\n //will be an array... new Set() turns it into a set, but [... ] turns it back into an array again\n return [ ...new Set(features) ];\n }\n\n /** Level in which the space is associated */\n public get level(): BuildingLevel {\n const service = ServiceManager.serviceFor(Organisation);\n return (service ? service.levelWithID(this.zones as any) : null) || new BuildingLevel({});\n }\n\n /**\n * Return the new recurrence_availability from settings\n */\n public get recurrence_availability(): RecurrenceAvailability[] {\n return this.settings?.recurrence_availability || [];\n }\n\n public get availableOccurrences(): number {\n if(this?.recurrence_availability) {\n return this?.recurrence_availability?.filter(recurr => recurr.available).length;\n }\n }\n\n public get totalOccurrences(): number {\n return this?.recurrence_availability.length;\n }\n\n /**\n * Make a copy of this object\n */\n public clone(): Space {\n return new Space(this);\n }\n\n /**\n * Make a copy of this object without identification data\n */\n public duplicate(): Space {\n const space = { ...this };\n space.settings.bookings = []; // clear out bookings\n return new Space({ ...space, id: null, email: null });\n }\n\n /**\n * Generate the booking rules for space with given options\n * @param options Conditions for generating the space rules\n */\n public rulesFor(options: SpaceBookingRuleOptions): SpaceRules {\n if (!this._service || !this.level) {\n return { auto_approve: true, hide: false };\n }\n\n const building = this.is_concierge ? this.level.building_id : this.building\n\n if (!building) {\n return { auto_approve: true, hide: false };\n }\n const { dateTz, duration, host } = options;\n const rules: SpaceRules = rulesForSpace({\n time: dateTz.ms,\n duration,\n space: this,\n user: host,\n rules: building.booking_rules\n });\n return rules;\n }\n\n /**\n * Whether space can only be booked by request\n * @param options Conditions for checking the space rules\n */\n public byRequest(options: SpaceBookingRuleOptions) {\n const rules = this.rulesFor(options);\n return !rules.auto_approve;\n }\n\n /**\n * Convert object into plain object\n */\n public toJSON(this: Space): HashMap {\n return { ...super.toJSON(), settings: { ...this.settings, bookings: [] }, filters: { ...this.filters }, equipment: [ ...this.equipment] };\n }\n}\n","import { HashMap } from '@mckinsey-converge/base';\nimport {\n ISpaceAvailabilityOptions,\n Space\n} from './space.class';\nimport { Building } from '../organisation/building.class';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\nimport { handleRecurrenceFields, RecurrencePeriod } from '../recurrence/recurrence.utils';\n\nexport function availabilityOptionsToQuery(options: ISpaceAvailabilityOptions): HashMap {\n let query: HashMap = {};\n if (options) {\n query = { ...options };\n if (options.dateTz) {\n const date = options.dateTz.startOfValue('minute');\n query.available_from = date.seconds; // Add one second or API will not allow end to end booking\n query.available_to = date.addValue({ minutes: options.duration || 60 }).subtractValue({ seconds: 1 }).seconds;\n\n if (options.setup) query.setup = options.setup ;\n if (options.breakdown) query.breakdown = options.breakdown;\n \n delete query.dateTz;\n delete query.duration;\n }\n\n if (!options.capacity_max) delete query.capacity_max\n\n if (options.hide_declined) query.hide_declined = options.hide_declined;\n query = handleRecurrenceFields(query)\n }\n return query;\n}\n\n/**\n * Compare two spaces to determine order\n * @param first\n * @param second\n */\nexport function sort(first: Space, second: Space, blds: Building[] = []) {\n const bld = blds.find(bld => first.zones.includes(bld.id));\n const bld_b = blds.find(bld => second.zones.includes(bld.id));\n if (bld) {\n if (bld !== bld_b) {\n return (bld.name).localeCompare(bld_b?.name);\n }\n const sort_order = [...bld.sort_order].reverse();\n for (const zone_id of sort_order) {\n if (zone_id === '*') {\n continue;\n }\n const a_has_zone = first.zones.indexOf(zone_id) >= 0;\n const b_has_zone = second.zones.indexOf(zone_id) >= 0;\n if (a_has_zone && !b_has_zone) {\n return 1;\n } else if (b_has_zone && !a_has_zone) {\n return -1;\n }\n }\n }\n return first.name.localeCompare(second.name);\n}\n","import { Injectable } from '@angular/core';\nimport { ComposerService } from '@placeos/composer';\nimport { first } from 'rxjs/operators';\n\nimport { BaseAPIService } from '../base.service';\nimport { ISpaceAvailabilityOptions, Space } from './space.class';\nimport { ApplicationLoadingState, HashMap } from '@mckinsey-converge/base';\nimport { availabilityOptionsToQuery } from './space.utilities';\nimport { ServiceManager } from '../service-manager.class';\nimport { OrganisationService } from '../organisation';\nimport { ApplicationService } from '../app.service';\nimport { SettingsService } from '../settings.service';\nimport { DateNow } from '@mckinsey-converge/date-tz';\nimport { Observable } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\n\nlet SPACE_LIST = [];\n\nexport function findSpace(id: string) {\n return SPACE_LIST.find((_) => _.id === id || _.email === id);\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SpacesService extends BaseAPIService {\n constructor(\n protected _composer: ComposerService,\n private _org: OrganisationService,\n private _service: ApplicationService,\n settingsService: SettingsService\n ) {\n \n super(_composer, settingsService);\n ServiceManager.setService(Space, this);\n this._name = 'Space';\n this._api_route = 'rooms';\n this._compare = (a, b) =>\n !a.id.localeCompare(b.id) || !a.email.localeCompare(b.email);\n this._list_filter = (a: Space) => {\n const bld = this._org.building;\n return a.level.building_id === bld.id;\n };\n this._org.initialised\n .pipe(first((_) => _))\n .subscribe(() => this.init());\n }\n\n public async query(query: HashMap = {}, setList:boolean = false) {\n const list = await super.query(query);\n if ( (query.hasOwnProperty('cache') && query.cache === false) || !Object.keys(query).length || setList) {\n this.set('list', list);\n SPACE_LIST = list;\n }\n return list;\n }\n\n public filterAvailableSpaces(list: Space[]) {\n return list.filter((i) => {\n if (i.recurrence_availability?.length) return i; //if recurrence, send the space regardless of availability (needed for edit and cloning series)\n return i.available;\n });\n }\n\n /**\n * Get available spaces\n * @param options\n */\n public available(\n options: ISpaceAvailabilityOptions,\n uniqueId?: string,\n filter: boolean = true\n ): Promise {\n if (!options) {\n throw new Error('Space avilability requires request options');\n }\n\n const now = DateNow(new Date());\n if (!options.dateTz) {\n options.dateTz = now.startOfValue('minute');\n }\n\n if (options.hide_declined === undefined) {\n options.hide_declined = true;\n }\n\n const key = `available|${options.id ? options.id : ''}|${\n uniqueId ?? ''\n }`;\n if (!this._promises[key]) {\n this._promises[key] = new Promise((resolve, reject) => {\n const respond = (list: Space[]) => {\n delete this._promises[key];\n resolve(filter ? this.filterAvailableSpaces(list) : list);\n };\n const error = (e) => {\n reject(e);\n delete this._promises[key];\n };\n const query = availabilityOptionsToQuery(options);\n if (options.id) {\n this.show(options.id, query).then(\n (i) => respond([i]),\n error\n );\n } else {\n this.query(query).then(respond, error);\n }\n });\n }\n\n return this._promises[key];\n }\n\n /**\n * Load initial data for the service\n */\n protected async load(): Promise {\n const loading: ApplicationLoadingState =\n this._service.get('loading') || {};\n if (!loading.spaces) {\n loading.spaces = {\n message: 'Loading space data',\n state: 'loading',\n };\n this._service.set('loading', loading);\n }\n // Adjusted the query by incorporating the \"zone_ids\" option to filter rooms based on specific zone IDs instead of considering all thousands of rooms.\n const option = {\n zone_ids: this._org.building.id\n }\n await this.query(option, true).catch(() => {\n loading.spaces = { message: 'Loading space data', state: 'failed' };\n this._service.set('loading', loading);\n });\n loading.spaces = { message: 'Loading space data', state: 'complete' };\n this._service.set('loading', loading);\n }\n\n /**\n * Convert raw data into API object\n * @param raw_data Raw API data\n */\n public process(raw_data: HashMap): Space {\n return new Space(raw_data);\n }\n /**\n * \n * Special observable function to make http call for rooms\n * @param query \n * @returns observable\n */\n public queryRooms = (query: HashMap = {}): Observable => super.queryRoomsForQR(query);\n\n public setSpaceList(list) {\n this.set('list', list);\n SPACE_LIST = list;\n }\n\n public queryBooking = (query: HashMap = {}) : Observable | Observable => super.queryObsr(query);\n public updateSpace = (id: string, form_data: HashMap, should_inject_concierge: Boolean = false, query_params: HashMap = {}) : Observable | Observable => super.updateObsr(id, form_data, should_inject_concierge, query_params);\n public uploadSpacePhotos = (apiSubRoute: string, form_data: HashMap, should_inject_concierge: Boolean = false, query_params: HashMap = {}) : Observable | Observable => super.uploadSpacePhotos(apiSubRoute, form_data, should_inject_concierge, query_params);\n \n public updateRoomList() {\n this.load().then((_) => null)\n }\n}\n","import {\n BehaviorSubject,\n of\n} from 'rxjs';\nimport {\n Building,\n Organisation\n} from './organisation';\nimport { BaseDataClass } from './base-api.class';\nimport { MapLocation } from './location';\nimport { User } from './users';\nimport { Booking } from './bookings';\nimport {\n RoomSettings,\n Space,\n SpaceFeatures\n} from './spaces';\nimport { ServiceManager } from './service-manager.class';\nimport {\n CateringCategory,\n CateringItem\n} from './catering';\nimport {\n HashMap,\n padZero,\n predictableRandomInt,\n unique\n} from '@mckinsey-converge/base';\n\nimport * as faker from 'faker';\n\nimport {\n SETTINGS_TOKEN,\n SettingsData,\n SettingsObject,\n SettingsService\n} from './settings.service';\nimport { Report } from './reports';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\nfaker.seed(2560);\n\nlet SERVICE: any;\n\ndeclare global {\n interface Jest {\n fn: () => any\n }\n}\n\n\ndeclare let jest: Jest;\n\n/* istanbul ignore file */\n\nexport function generateMockOrganisationService(): HashMap {\n return {\n levelWithID: jest.fn(),\n listen: jest.fn(),\n loadOrganisation: jest.fn(),\n initialised: of(true),\n building: new Building(generateMockBuilding({ id: 'bld-01' })),\n loadBuildingsWithOrg: jest.fn(),\n getOrganizationFiltersByRoomType: jest.fn(),\n getRoomTypeSubsetDDOptions: jest.fn(),\n getRoomFilterOptionsPerLocation: jest.fn(),\n ...generateMockDataService('OrganisationService')\n };\n}\n\nexport const generateMockSpacesService = (): HashMap => ({\n available: jest.fn(),\n ...generateMockDataService('SpacesService')\n});\n\nexport const generateMockUsersService = (): HashMap => ({\n loadCurrentUser: jest.fn(),\n ...generateMockDataService('UsersService')\n});\n\nexport const bookingState = () => ({\n bookings: of([]),\n filtered: of([]),\n filtered_week: of([]),\n filtered_month: of([]),\n setZone: jest.fn(),\n setDate: jest.fn(),\n setFilters: jest.fn(),\n add: jest.fn(),\n replace: jest.fn(),\n remove: jest.fn(),\n startPolling: jest.fn(),\n startPollingMonth: jest.fn(),\n startPollingWeek: jest.fn(),\n startPollingEveryFiveMin: jest.fn(),\n _noOfMeetings: of([])\n});\n\nconst test_app = {\n title: 'McKinsey & Company',\n description: 'McKinsey & Company Staff UI written with Angular Framework',\n short_name: 'STAFF',\n logo_light: {\n type: 'img',\n src: 'assets/img/logo.svg',\n background: ''\n },\n logo_dark: {\n type: 'img',\n src: 'assets/img/logo-inverse.svg',\n background: ''\n },\n heap_io: {\n app_id: 3540602199,\n force_ssl: true,\n secure_cookie: true,\n disable_text_capture: true,\n cookie_path: '/staff/'\n }\n};\n\nexport const TEST_SETTINGS: SettingsData = {\n debug: true,\n composer: {\n domain: '',\n route: '/test',\n protocol: '',\n port: '',\n use_domain: false,\n local_login: false\n },\n app: test_app,\n mock: false,\n frontend: 'staff'\n};\n\nexport const generateMockSettingsService = (overrides: Partial> = {}) => new SettingsService({ getTitle: () => jest.fn() } as any,\n new SettingsObject({\n ...TEST_SETTINGS,\n ...overrides\n }));\n\n/**\n * Provides an injectable instance for settings.\n */\nexport const provideMockSettingsObject = (settings: Partial> = {}) => ({\n provide: SETTINGS_TOKEN,\n useValue: new SettingsObject({\n ...TEST_SETTINGS,\n ...settings\n })\n});\n\n/**\n * Generate a mocked version of the application service\n */\nexport function generateMockAppService(settingsOverrides: Partial> = {}) {\n SERVICE = {\n setting: jest.fn(),\n notify: jest.fn(),\n notifyInfo: jest.fn(),\n notifyWarn: jest.fn(),\n notifySuccess: jest.fn(),\n notifyError: jest.fn(),\n log: jest.fn(),\n navigate: jest.fn(),\n navigateBack: jest.fn(),\n get: jest.fn(),\n listen: jest.fn(),\n set: jest.fn(),\n Composer: { auth: { token: 'test' } },\n Hotkeys: { listen: jest.fn() },\n Users: generateMockUsersService(),\n Organisation: generateMockOrganisationService(),\n Locations: generateMockDataService('LocationsService'),\n Base: generateMockDataService('BaseService'),\n Menu: generateMockDataService('CateringMenuService'),\n Spaces: generateMockSpacesService(),\n Bookings: generateMockDataService('BookingsService'),\n Reports: generateMockDataService('ReportsService'),\n CateringItems: generateMockDataService('CateringItemsService'),\n CateringCategories: generateMockDataService('CateringCategoriesService'),\n Settings: generateMockSettingsService(settingsOverrides),\n initialised: of(true)\n };\n ServiceManager.setService(BaseDataClass, SERVICE.Base);\n ServiceManager.setService(Organisation, SERVICE.Organisation);\n ServiceManager.setService(Building, SERVICE.Organisation);\n ServiceManager.setService(User, SERVICE.Users);\n ServiceManager.setService(Booking, SERVICE.Bookings);\n ServiceManager.setService(Space, SERVICE.Spaces);\n ServiceManager.setService(MapLocation, SERVICE.Locations);\n ServiceManager.setService(Report, SERVICE.Reports);\n ServiceManager.setService(CateringItem, SERVICE.CateringItems);\n ServiceManager.setService(CateringCategory, SERVICE.CateringCategories);\n SERVICE.Organisation.buildings = [SERVICE.Organisation.building];\n SERVICE.Users.current = new User(generateMockUser());\n SERVICE.Users.initialised = of(true);\n SERVICE.Bookings.booking_list = new BehaviorSubject(new Array(10).fill(0).map(_ => new Booking(generateMockBooking())));\n SERVICE.listen.mockReturnValue(of(null, []));\n return SERVICE;\n}\n\nexport function generateMockDataService(name: string) {\n const service = {\n find: jest.fn(),\n filter: jest.fn(),\n listen: jest.fn(),\n get: jest.fn(),\n set: jest.fn(),\n setting: jest.fn(),\n query: jest.fn(),\n show: jest.fn(),\n add: jest.fn(),\n save: jest.fn(),\n remove: jest.fn(),\n delete: jest.fn(),\n update: jest.fn(),\n addFrom: jest.fn(),\n removeFrom: jest.fn(),\n task: jest.fn(),\n available: jest.fn(),\n process: jest.fn(),\n updateList: jest.fn(),\n clearList: jest.fn(),\n removeFromList: jest.fn(),\n accept: jest.fn(),\n decline: jest.fn(),\n checkin: jest.fn(),\n is_logged_in: false,\n initialised: of(true),\n getHoldingBay: jest.fn(),\n name,\n queryRooms: of(true),\n queryRoomsForQR: of([]),\n queryObsr: of([]),\n queryBooking: of(true),\n checkinIndividualVisitor: jest.fn(),\n taskObsr: of(true),\n updateSpace: jest.fn(),\n updateObsr: of([]),\n uploadSpacePhotos: of([])\n\n };\n\n service.getHoldingBay.mockImplementation(_ => Promise.resolve([new Booking({})]));\n service.save.mockImplementation(_ => Promise.resolve(new Booking({})));\n\n service.listen.mockReturnValue(of(null));\n service.filter.mockReturnValue([]);\n return service;\n}\n\nlet SPACE_COUNT: number = 0;\n\nexport function generateMinimalRoomDetails(count: number) {\n return {\n name: `space-0${count}`,\n email: `space-0${count}@test.com`,\n settings: {\n name: `localname-0${count}`,\n catering: true\n }\n }\n}\n\nexport function generateMockSpace(overrides: HashMap = {}, space_id: number = null, recurring_search: boolean = false ): Space {\n const id = `space-${space_id || SPACE_COUNT++}`;\n const name = overrides.name || `${faker.name} ${faker.name.lastName()} Space`;\n const startOfDay = DateNow(new Date()).startOfValue('day');\n let settings: RoomSettings = {\n available: true,\n available_until: startOfDay.addValue({ days: 1 }).seconds, // (Date.now() / 1000) + (60 * 60 * 24), // now plus 24 hrs\n bookings: Array(10).fill(0).map(i => generateMockBooking()),\n catering: true,\n charge_code: true,\n extra_features: \"meeting_room boardroom\",\n internal_or_external: \"internal\",\n map_id: \"1\",\n natural_light: false,\n room_booking_screen: true,\n room_name: `${name} - Local Name`,\n vc: false,\n }\n if (overrides.settings) {\n settings = { ...settings, ...overrides.settings };\n delete overrides.settings;\n }\n if (recurring_search) {\n settings.recurrence_availability = [\n {\n date: startOfDay.seconds,\n available: false,\n },\n {\n date: startOfDay.addValue({ days: 1 }).seconds,\n available: false,\n },\n {\n date: startOfDay.addValue({ days: 2 }).seconds,\n available: false,\n },\n {\n date: startOfDay.addValue({ days: 3 }).seconds,\n available: false,\n },\n ]\n }\n\n const linked = Math.floor(predictableRandomInt(99999)) % 2 === 0 && SPACE_COUNT > 1;\n return new Space({\n id,\n name: `${name} - Global Name`,\n map_id: `${space_id || SPACE_COUNT}`,\n type: faker.commerce.productName(),\n searchable: Math.floor(predictableRandomInt(99999)) % 2 === 0,\n controlable: Math.floor(predictableRandomInt(99999)) % 2 === 0,\n hourly_rate: Math.floor(predictableRandomInt(300)) * 100,\n bookable: Math.floor(predictableRandomInt(99999)) % 2 === 0,\n capacity: 15,\n sort_priority: 0,\n setup: Math.floor(predictableRandomInt(6)) * 5,\n breakdown: Math.floor(predictableRandomInt(6)) * 5,\n support_url: `/control/#/${id}`,\n image: faker.image.business(),\n zones: ['zone_lvl-0'],\n features: `${SpaceFeatures.BoardRoom} ${SpaceFeatures.ElectronicWhiteboard}`,\n email: `${name.toLowerCase().split(' ').join('.')}@${USER_DOMAIN}`,\n settings,\n ...overrides\n });\n}\n\nlet BOOKING_COUNT = 0;\nlet BOOKING_DATE = DateNow(new Date()).setValue({ hour: 6 }).setValue({minute: 0}).subtractValue({ days: 10 }).startOfValue('minute');\n\n/**\n * Set the initial time used for generating mock bookings\n * @param time New initial time as ms from UTC epoch\n */\nexport function setMockBookingStartDatetime(time: number) {\n const date = new DateTZ({date: time})\n BOOKING_DATE = date.startOfValue('minute');\n}\n\n/**\n * Create mock raw API data for a booking\n * @param override Overrides the properties of the generated booking with it's own\n */\nexport function generateMockBooking(override: HashMap = {}) {\n const id = `booking-${BOOKING_COUNT++}`;\n BOOKING_DATE = BOOKING_DATE.addValue({ minutes: Math.floor(predictableRandomInt(4) + 2) * 15 });\n const start = BOOKING_DATE.ms;\n const duration = Math.floor(predictableRandomInt(4) + 2) * 15;\n BOOKING_DATE = BOOKING_DATE.addValue({ minutes: Math.floor(predictableRandomInt(4)) * 15 });\n const organiser = generateMockUser({ external: false, visitor: false });\n const orders = Array(Math.floor(predictableRandomInt(5)))\n .fill(0)\n .map(_ => generateMockCateringOrder({ booking_date: start }, override.room_ids, override.menu));\n const hasCatering = Math.floor(predictableRandomInt(34567)) % 3 === 0;\n const date_start = new DateTZ({date: start})\n return {\n id,\n title: `${faker.commerce.productName()} Meeting`,\n attendees: Array(Math.floor(predictableRandomInt(5) + 2))\n .fill(0)\n .map((_, i) => generateMockUser(override.users)),\n organiser,\n start_epoch: date_start.seconds,\n end_epoch: date_start.addValue({ minutes: duration }).seconds,\n body: faker.lorem.paragraph(),\n notes: [{ type: 'other', message: faker.lorem.paragraph() }],\n location: faker.address.city(),\n // Mckinsey only has internal or external meetings\n booking_type: ['internal', 'external'][predictableRandomInt(2)],\n setup: { 'space-01': Math.max(0, (predictableRandomInt(12) - 6) * 5) },\n breakdown: { 'space-01': Math.max(0, (predictableRandomInt(12) - 6) * 5) },\n status: 'accepted',\n catering: hasCatering ? orders : [],\n room: new Space(generateMinimalRoomDetails(1)), // returns space-01 type values\n equipment_codes: {},\n company:[],\n ...override\n };\n}\n\nlet BLD_COUNT = 0;\nlet LVL_COUNT = 0;\n\n/**\n * Generate raw mock data for creating a building\n * @param id Forced ID for the mock\n * @param overrides Supply object value overrides in place. Supports a levelGenerator function\n * to stabilize level ids for testing.\n */\nexport function generateMockBuilding(overrides: HashMap = {}): HashMap {\n const id = `zone_bld-${BLD_COUNT++}`;\n const levels = Array(10)\n .fill(0)\n .map((_, i) => generateMockLevel(undefined, overrides.levelGenerator?.(i)));\n const features: any = {};\n for (const lvl of levels) {\n const count = Math.floor(predictableRandomInt(3) + 2);\n features[lvl.level_id] = {};\n for (let i = 0; i < count; i++) {\n features[lvl.level_id][faker.commerce.productName()] = `feature-${i + 1}`;\n }\n }\n return {\n id,\n zone_id: id,\n extras: Array(10)\n .fill(0)\n .map(i => {\n const name = faker.commerce.productName();\n return {\n extra_id: name\n .split(' ')\n .join('-')\n .toLowerCase(),\n extra_name: name\n };\n }),\n code: 'NYO',\n name: faker.name.firstName(),\n address: 'building address field',\n city: 'building city',\n loan_items: Array(10)\n .fill(0)\n .map(i => {\n const name = faker.commerce.productName();\n return {\n extra_id: name\n .split(' ')\n .join('-')\n .toLowerCase(),\n extra_name: name\n };\n }),\n levels,\n roles: {\n 'first-aiders': Array(10)\n .fill(0)\n .map(i => generateMockUser())\n },\n neighbourhoods: features,\n settings: {\n test: {\n nested: {\n level2: true,\n org: false\n }\n },\n city: faker.address.city()\n },\n timezone: 'America/Chicago',\n ...overrides\n };\n}\n\n/**\n * Generate raw mock data for a building level\n * @param id Forced ID for the mock\n * @param overrides value overrides\n */\nexport function generateMockLevel(id?: string, overrides: HashMap = {}): HashMap {\n if (!id) {\n id = `zone_lvl-${LVL_COUNT++}`;\n }\n return {\n id,\n level_id: id,\n level_name: `Level ${LVL_COUNT}`,\n short_name: `L ${LVL_COUNT}`,\n ...overrides\n };\n}\n\nlet USER_COUNT = 0;\n\nexport let USER_DOMAIN = 'acaprojects.com';\n\nconst USER_EMAILS: string[] = [];\n\n/**\n * Generate raw mock data for a user\n * @param id Forced ID for the mock\n * @param name Forced name for the user\n * @param external Whether user is external of the organisation\n */\nexport function generateMockUser(override: HashMap = {}): HashMap {\n const id = `user-${USER_COUNT++}`;\n const name = `${faker.name.firstName()} ${faker.name.lastName()}`;\n const external = override.external || !(predictableRandomInt(99999) % 2);\n const organisation = external ? faker.company.companyName() : USER_DOMAIN.split('.')[0];\n let delegates: {email: string, opt_out: boolean}[] = [];\n const delegate_count = Math.min(predictableRandomInt(4) + 1, USER_EMAILS.length);\n for (let i = 0; i < delegate_count; i++) {\n delegates.push({email: USER_EMAILS[Math.floor(predictableRandomInt(USER_EMAILS.length))], opt_out: false});\n }\n delegates = unique(delegates);\n const email = `${name\n .split(' ')\n .join('.')\n .toLowerCase()}@${external ? 'not-' : ''}${USER_DOMAIN}`;\n USER_EMAILS.push(email);\n return {\n id,\n name,\n first_name: name.split(' ')[0],\n last_name: name.split(' ')[1],\n email,\n phone: faker.phone.phoneNumber(),\n visitor: external,\n organisation: {\n id: organisation\n .split(' ')\n .join('.')\n .toLowerCase(),\n name: organisation\n },\n department: faker.commerce.department(),\n staff_code: padZero(Math.floor(predictableRandomInt(99999)), 5),\n delegates,\n image: faker.image.avatar(),\n ...override\n };\n}\n\nexport function generateMockCateringOrder(overrides: HashMap = {}, room_id: string = '', menu: HashMap = {}) {\n return {\n id: `order-${predictableRandomInt(9999_9999)}`,\n delivery_time: predictableRandomInt(6) * 5,\n location_id: room_id, // R--- could be undefined\n items: new Array(predictableRandomInt(5, 1)).fill(0).map(i => pickMenuItem(menu)),\n ...overrides\n };\n}\n\nfunction pickMenuItem(menu_map: HashMap = {}) {\n const zones = Object.keys(menu_map);\n const menu = menu_map[zones[predictableRandomInt(zones.length)]] || [];\n const category = menu[predictableRandomInt(menu.length)] || { items: [] };\n const group = { ...(category.items[predictableRandomInt(category.items.length)] || {}) };\n if (!group.package && group.items?.length) {\n const item = { ...group.items[predictableRandomInt(group.items.length)] };\n item.amount = predictableRandomInt(5, 1);\n return item;\n }\n group.amount = predictableRandomInt(5, 1);\n return group;\n}\n\nexport function generateMockLocation(overrides: HashMap, fixed_locations: string[], maps: string[]): HashMap {\n const fixed = predictableRandomInt(999_999_999) % 2 === 0;\n if (fixed && (!overrides || overrides.fixed)) {\n return {\n map_id: fixed_locations[predictableRandomInt(fixed_locations.length)],\n level: maps[predictableRandomInt(maps.length)],\n ...overrides\n };\n } else {\n return {\n x: predictableRandomInt(900, 100),\n x_max: 1000,\n y: predictableRandomInt(500, 100),\n level: maps[predictableRandomInt(maps.length)],\n confidence: predictableRandomInt(30),\n ...overrides\n };\n }\n}\n\nlet ORG_COUNT = 0;\n\nexport function generateMockOrganisation(): HashMap {\n const buildings = Array(3).fill(0).map(i => generateMockBuilding());\n return {\n id: `zone_org-${ORG_COUNT++}`,\n name: `Organisation ${ORG_COUNT}`,\n buildings,\n settings: {\n discovery_info: {\n buildings\n },\n test: {\n nested: {\n org: true\n }\n }\n }\n };\n}\n\n\nexport const generateMockBuildingSetByCity = () => {\n const buildings: Building[] = Array(10).fill(0)\n .map(() => new Building(generateMockBuilding()));\n buildings.push(...Array(2).fill(0).map(() => new Building(generateMockBuilding({\n settings: {\n city: 'Auckland'\n },\n city: 'Auckland'\n }))));\n buildings.push(...Array(5).fill(0).map(() => new Building(generateMockBuilding({\n settings: {\n city: 'NYC'\n },\n city: 'NYC'\n }))));\n return buildings;\n};\n\nexport function generateMockModalData(data: HashMap = null) : HashMap {\n if (data) {\n return data;\n }\n return {\n pendingDate: new Date(1603087100 + (1000 * 60 * 15)),\n pendingDuration: 60,\n date: 1603087100,\n duration: 30,\n }\n}\n\nexport const mockDateToBuildingTz = (date?: number) =>{\n return new DateTZ({date, building_tz: 'America/Chicago', is_local_tz: false})\n}","export * from './user.class'\nexport * from './user.utilities'\nexport * from './users.service'\n","import { BaseDataClass } from '../base-api.class';\nimport {\n HashMap,\n Identity\n} from '@mckinsey-converge/base';\nimport { MapLocation } from '../location';\nimport { ServiceManager } from '../service-manager.class';\n\nexport class User extends BaseDataClass {\n \n /** Currently logged in user */\n public static get active_user(): User {\n const service = ServiceManager.serviceFor(User);\n return service ? service.current : null;\n }\n\n /** First name of the user */\n public readonly first_name: string;\n /** Last name of the user */\n public readonly last_name: string;\n /** Windows user ID */\n public readonly windows_id: string;\n /** FMNO */\n public readonly fmno: string;\n /** Type of user */\n public readonly type: 'partner' | 'external' | 'internal';\n /** Contact phone number of the user */\n public readonly phone: string;\n /** Organisational department the user is part of */\n public readonly business_unit: string;\n /** Whether user is external from the application's organisation */\n public readonly external: boolean;\n /** Whether user is a visitor */\n public readonly visitor: boolean;\n /** Organisational Identifier for the user */\n public readonly staff_code: string;\n /** Basic location descriptor for the user */\n public readonly location: string;\n /** List of users that this user can act on behalf */\n public readonly delegates: readonly {email: string, opt_out: boolean}[];\n /** URL of the user's avatar image */\n public readonly image: string;\n /** List of user groups associated with this user */\n public readonly groups: readonly string[];\n /** Organisation the user is associated with */\n private _organisation: Identity;\n\n /** Map location of the user */\n private _location: MapLocation;\n /** List of desk bookings */\n // private _desk_bookings: HashMap = {}; // R--- can't explain why this is here.\n /** Host/Organisawe email notification opt out/in setting */\n public opt_out: boolean;\n\n constructor(raw_data: HashMap = {}) {\n super(raw_data);\n this.first_name = raw_data.first_name || '';\n this.last_name = raw_data.last_name || '';\n this.windows_id = raw_data.email || '';\n this.fmno = raw_data.fmno;\n this.external = raw_data.external || false;\n this.visitor = raw_data.visitor || false;\n\n\n this.type = this.visitor ? 'external' : 'internal';\n this.phone = raw_data.phone || raw_data.mobile || '';\n this.business_unit = raw_data.business_unit || raw_data.department || '';\n this._organisation = raw_data.organisation || {\n id: raw_data.organisation_id,\n name: raw_data.organisation_name\n };\n\n this._location = null;\n this.image = raw_data.image || '';\n this.staff_code = raw_data.staff_code || raw_data.fmno || '';\n this.delegates = raw_data.delegates || [];\n this._location = new MapLocation(\n raw_data.location && raw_data.location instanceof Object\n ? raw_data.location\n : { name: raw_data.location }\n );\n this.groups = raw_data.groups || [];\n this.location = raw_data.location || raw_data.officeLocation || '';\n this.opt_out = raw_data.opt_out;\n }\n\n /** Organisation the user is associated with */\n public get organisation() {\n return this._organisation;\n }\n\n /** Map location of the user */\n public get last_location(): MapLocation {\n return new MapLocation(this._location || {});\n }\n\n /**\n * Ask the server for the users current location\n */\n public locate(): Promise {\n const service: any = ServiceManager.serviceFor(MapLocation);\n return new Promise((resolve, reject) => {\n if (service) {\n service.show(this.id, { desk: this.email }).then(\n l => {\n this._location = l;\n resolve(l);\n },\n e => reject(e)\n );\n } else {\n resolve(null);\n }\n });\n }\n\n /**\n * Whether user is available during the given period\n * @param start Start time as a unix timestamp with milliseconds\n * @param end End time as a unix timestamp with milliseconds\n */\n public available(start?: number, end?: number): Promise {\n return new Promise(resolve => {\n this._service.query({ email: this.email, start, end }).then(\n l => resolve(l && l.length > 0),\n _ => resolve(false)\n );\n });\n }\n\n /**\n * Make a copy of this object\n */\n public clone(): User {\n return new User(this);\n }\n\n /**\n * Make a copy of this object without identification data\n */\n public duplicate(): User {\n return new User({ ...this, id: null, email: null });\n }\n\n /**\n * Convert object into plain object\n */\n public toJSON(this: User): HashMap {\n const data = super.toJSON();\n delete data.location;\n return data;\n }\n}\n\n// R--- Might need an toApiJSON due to visitor field.","import {\n FormControl,\n FormGroup,\n Validators\n} from '@angular/forms';\n\nimport { HashMap } from '@mckinsey-converge/base';\nimport { User } from './user.class';\n\n/**\n * Generate form fields for the given user\n * @param user User to generate form for\n */\nexport function generateUserForm(user: User): FormGroup {\n if (!user) {\n throw Error('No user passed');\n }\n const fields: HashMap = {\n id: new FormControl(user.id || ''),\n name: new FormControl(user.name || ''),\n first_name: new FormControl(user.first_name || '', [Validators.required, Validators.pattern(/^(?![\\d\\s]+$)[^\\d]+$/), Validators.maxLength(50)]),\n last_name: new FormControl(user.last_name || '', [Validators.required, Validators.pattern(/^(?![\\d\\s]+$)[^\\d]+$/), Validators.maxLength(50)]),\n email: new FormControl(user.email || '', [Validators.email])\n };\n // Generate form group for booking item\n return new FormGroup(fields);\n}\n","import { Injectable } from '@angular/core';\nimport { Location } from '@angular/common';\nimport {\n HttpClient,\n HttpHeaders\n} from '@angular/common/http';\nimport { ComposerService } from '@placeos/composer';\nimport { first } from 'rxjs/operators';\n\nimport { Md5 } from 'ts-md5/dist/md5';\n\nimport { BaseAPIService } from '../base.service';\nimport { User } from './user.class';\nimport {\n ApplicationLoadingState,\n HashMap,\n unique\n} from '@mckinsey-converge/base';\n\nimport { ApplicationService } from '../app.service';\nimport { ServiceManager } from '../service-manager.class';\nimport { SettingsService } from '../settings.service';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\nexport interface ILoginOptions {\n /** URL to post login request to */\n url?: string;\n /** Whether form data is passed in the body of the request */\n form?: boolean;\n /** Custom headers to pass into the post request */\n headers?: HashMap;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UsersService extends BaseAPIService {\n constructor(\n protected _composer: ComposerService,\n protected uhttp: HttpClient,\n protected location: Location,\n private _service: ApplicationService,\n settingsService: SettingsService\n ) {\n super(_composer, settingsService);\n ServiceManager.setService(User, this);\n this._name = 'Users';\n this._api_route = 'users';\n this._compare = (a, b) => !a.id.localeCompare(b.id) || !a.email.localeCompare(b.email);\n this.set('list', []);\n this.set('current_user', new User({ id: 'local_user', name: 'Local User' }));\n this.set('delegates', null);\n this._composer.initialised.pipe(first((_) => _)).subscribe(() => this.init());\n }\n\n /** Currently logged in user */\n public get current(): User {\n return this.get('current_user');\n }\n\n /** Whether the user has properly logged in */\n public get is_logged_in(): boolean {\n return this.current && this.current.id !== 'local_user';\n }\n\n /* istanbul ignore next */\n /**\n * Sets the access token and expiry for the user\n * @param token OAuth bearer token\n * @param expiry Expiry epoch timestamp in ms\n * @param reload Whether to reload the page after setting tokens\n */\n public setToken(token: string, expiry?: number, reload: boolean = true) {\n if (!expiry) {\n const now = DateNow(new Date())\n expiry = now.addValue({ days: 7 }).endOfValue('day').ms;\n }\n const path = `${location.origin}${\n this._service.setting('composer.route') || ''\n }/oauth-resp.html`;\n const client_id = Md5.hashStr(path);\n if (sessionStorage) {\n sessionStorage.setItem(`${client_id}_access_token`, token);\n sessionStorage.setItem(`${client_id}_expires_at`, `${expiry}`);\n }\n if (localStorage) {\n localStorage.setItem(`${client_id}_access_token`, token);\n localStorage.setItem(`${client_id}_expires_at`, `${expiry}`);\n }\n if (reload) {\n this.location.go(this.location.path());\n }\n return path;\n }\n\n /**\n * Post login request to the API\n * @param query_params Key value pairs to pass into\n * @param options Options for the login request\n */\n public async login(query_params: HashMap, options: ILoginOptions = {}): Promise {\n if (this.settingsService.concierge) {\n if (!this._promises['login']) {\n this._promises['login'] = new Promise((resolve, reject) => {\n this.set('status', 'loading');\n let headers = new HttpHeaders();\n if (!options || options.form !== false) {\n headers = headers.append('Content-Type', 'application/x-www-form-urlencoded');\n }\n const url = (options ? options.url : '') || '/auth/signin';\n this.uhttp.post(url, query_params, { headers }).subscribe(\n (_) => null,\n (e) => reject(e),\n () => {\n this._composer.auth.authorise();\n resolve();\n }\n );\n });\n }\n return this._promises['login'];\n }\n }\n\n\n /**\n * Logout of user and redirect to logout URL\n */\n public logout() {\n this._composer.auth.logout();\n }\n\n /**\n * Loads current user from API. This diverges from {@link load} in order to simply return\n * the user object instead of setting it on the service.\n */\n public async loadCurrentUser(): Promise {\n return this.show('current')\n }\n\n /**\n * Load initial data for the service\n */\n protected load(tries: number = 0): Promise {\n const loading: ApplicationLoadingState = this._service.get('loading') || {};\n loading.user = { message: 'Loading user credentials', state: 'loading' };\n this._service.set('loading', loading);\n this.set('status', 'loading');\n return new Promise((resolve) => {\n // this is due to unclear nature of the merge between concierge and staff\n // concierge has the retries enabled, while staff continuously retries.\n if (this.settingsService.concierge && tries > 4) {\n this.set('status', 'invalid');\n loading.user = { message: 'Loading user credentials', state: 'failed' };\n this._service.set('loading', loading);\n return resolve();\n }\n this.show('current').then(\n async (current_user) => {\n this.set('status', 'available');\n this.set('current_user', current_user);\n this._initialised.next(true);\n if (this._service && this._service.setting('app.user.grab_api_details')) {\n this.show(current_user.email).then(\n async (user) => {\n this.set('current_user', user);\n if (this._service.setting('app.user.update_location')) {\n this.interval('location', () => user.locate(), 5000);\n }\n await this.loadDelegates().catch(_ => null);\n resolve();\n loading.user = {\n message: 'Loading user credentials',\n state: 'complete'\n };\n this._service.set('loading', loading);\n },\n () => this.timeout('load', () => this.load(++tries).then(() => resolve()), Math.min(3000, 300 * tries))\n );\n } else {\n \n // is after process\n if (this._service.setting('app.user.update_location')) {\n this.interval('location', () => current_user.locate(), 5000);\n }\n await this.loadDelegates().catch(_ => null);\n resolve();\n loading.user = { message: 'Loading user credentials', state: 'complete' };\n this._service.set('loading', loading);\n }\n },\n () => this.timeout('load', () => this.load(++tries).then(() => resolve()), Math.min(3000, 300 * tries))\n );\n });\n }\n\n private async loadDelegates() {\n const delegates = this.current.delegates;\n if (!delegates || !delegates.length) {\n return [];\n }\n const promises: Promise[] = [];\n for (const del of delegates) {\n promises.push(this.show(del.email));\n }\n const list = await Promise.all(promises);\n this.set('delegates', list);\n this.set('list', unique((this.get('list') || []).concat(list)));\n return list;\n }\n\n /**\n * Convert raw API data into a valid User Object\n * @param raw_item Raw API data\n */\n protected process(raw_data: any): User {\n return new User(raw_data);\n }\n}","import { AbstractControl } from '@angular/forms';\n\nimport { User } from './users';\n\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n\nconst HAS_ERROR = true;\n\n/**\n * Build start time validation function\n * @param date Date of the time to check\n */\nexport function buildValidateDate(date?: number) {\n const from = new DateTZ({ date });\n return (c) => validateDate(c, date);\n}\n\n/**\n * Check that control value is a date that is the same or after from date\n * @param control Angular form control\n * @param is_from Comparison date(ms from UTC epoch). Defaults to the current time\n */\nexport function validateDate(control: AbstractControl, is_from?: number) {\n const from = new DateTZ({date: is_from})\n const date = new DateTZ({date: control.value})\n return date.isBeforeDate(from) ? { date: HAS_ERROR, message: 'Booking needs to be made in the future' } : null;\n}\n\n/**\n * Build start time validation function\n * @param date Date of the time to check\n * @param is_from Comparison date(ms from UTC epoch). Defaults to the current time\n */\nexport function buildValidateStartTime(date: number, is_from?: number) {\n const from = new DateTZ({date: is_from})\n return (c) => validateStartTime(c, date, from.ms);\n}\n\n/**\n * Check that control value time is after the comparison date time\n * @param control Angular form control\n * @param date Date of the time to check\n * @param is_from Comparison date(ms from UTC epoch). Defaults to the current time\n */\nexport function validateStartTime(control: AbstractControl, date: number, is_from?: number) {\n const now = new DateTZ({date: is_from});\n const parts = control.value.split(':');\n const date_obj = new DateTZ({date});\n return date_obj.setValue({ hour: +parts[0], minute: +parts[1] }).isBeforeDate(now) ? {\n start: HAS_ERROR,\n message: 'Booking time needs to be made in the future'\n } : null;\n}\n\nexport function buildValidateDuration(min: number = 30, max: number = 240) {\n return (c) => validateDuration(c, min, max);\n}\n\nexport function validateDuration(control: AbstractControl, min: number = 30, max: number = 240) {\n if (control.value < (min || 30)) {\n return { duration: HAS_ERROR, message: `Minimum booking duration is ${min} minute${min === 1 ? 's' : ''}` };\n } else if (control.value > (max || 480)) {\n return { length: HAS_ERROR, message: `Maximum booking duration is ${max} minute${max === 1 ? 's' : ''}` };\n }\n return null;\n}\n\nexport function buildValidateAttendees(host: User, min: number = 0) {\n return (c) => validateAttendees(c, host, min);\n}\n\nexport function validateAttendees(control: AbstractControl, host: User, min: number = 0) {\n if (!control || !(control.value instanceof Array)) {\n return min > 0\n ? { invalid: true, message: `Minimum of ${min} attendee${min === 1 ? ' is' : 's are'} required other than you` }\n : null;\n }\n const list: User[] = control.value;\n if (host) {\n const result = list.find(a => a.email === host.email);\n if (result) {\n list.splice(list.indexOf(result), 1);\n }\n }\n return list.length >= min ? null : {\n count: true,\n message: `Minimum of ${min} attendee${min === 1 ? ' is' : 's are'} required other than you`\n };\n}\n\nexport function validateEndTime(dateControlTz: AbstractControl) {\n return (control: AbstractControl) => {\n // const date = new DateTZ({date: date_control ? date_control.value : undefined})\n const now = DateNow(new Date())\n return dateControlTz.value.addValue({ minutes: control.value || 60 }).isBeforeDate(now)? { end_time: true } : null;\n };\n}\n\nexport function noWhitespaceValidator(control: AbstractControl) {\n const value = control?.value;\n if ( value === '') {\n return null; // Return null if control value is undefined or null\n }\n const isWhitespace = value.trim().length === 0;\n // const isValid = !isWhitespace;\n return !isWhitespace ? null : { whitespace: true };\n}\n\n","export * from './lib/date-tz.class'","import { DateObjectUnits, DateTime, DateTimeUnit, DurationLike, DurationUnits } from 'luxon';\nimport { getTimezoneOffset } from 'date-fns-tz';\n\nfunction padZero(value: number, length: number): string {\n let str = `${value}`;\n while (str.length < length) str = `0${str}`;\n return str;\n}\n\ninterface DateTZParams {\n date?: number | DateTime\n building_tz?: string\n is_local_tz?: boolean\n all_day?: boolean\n}\n\nconst now = new Date()\n\nexport class DateTZ {\n date: DateTime\n date_org: DateTime\n building_tz: string\n is_local_tz: boolean = true\n all_day: boolean\n local_tz: string\n valid: boolean\n\n constructor(data?: DateTZParams) { \n this.date_org = typeof data?.date === 'number' ? DateTime.fromMillis(data?.date) : data?.date ? data?.date : DateTime.fromMillis(now.valueOf())\n this.is_local_tz = data?.is_local_tz === false ? data?.is_local_tz : true\n this.all_day = data?.all_day || false\n this.local_tz = DateTime.now().zoneName\n this.building_tz = data?.building_tz || this.local_tz\n this.date = !this.is_local_tz ? this.date_org.setZone(this.building_tz) : this.date_org\n this.valid = this.date.isValid\n }\n\n //get epoch milliseconds\n public get ms(): number {\n return this.date.valueOf()\n }\n\n //get epoch seconds\n public get seconds(): number {\n return Math.trunc(this.date.toSeconds())\n }\n\n //get the second of the minute\n public get second(): number {\n return this.date.second\n }\n\n //get the minutes of the hour\n public get minutes(): number {\n return this.date.minute\n }\n\n //get the minutes of the hour\n public get hours(): number {\n return this.date.hour\n }\n\n public get utc(): number {\n const newDate = new DateTZ({...this, date: this.date.toUTC()})\n return newDate.seconds\n }\n\n public get dateDay(): number {\n return this.date.day\n }\n\n public get dateHour(): number {\n return this.date.hour\n }\n\n public get dateYear(): number {\n return this.date.year\n }\n\n public get dateWeekday(): number {\n try {\n return this.date.weekday;\n } catch (e) {\n return this.date.toJSDate().getDay();\n }\n }\n\n public get dateMonth(): number {\n return this.date.month\n }\n\n public dateDiff (compare_to: DateTZ, unit: DurationUnits, ans_unit = 'minutes'): number {\n return this.date.diff(compare_to.date, unit)[ans_unit]\n }\n\n //set the date to the begining of the given unit\n public startOfValue (unit: DateTimeUnit) {\n // All the luxon start of values work as needed except for week\n let newDate = new DateTZ({...this, date: this.date.startOf(unit)})\n // Special week logic\n if (unit === 'week') {\n if (this.dateWeekday === 7) {\n // Don't change, we want sunday as the start of the week even though luxon thinks it is Monday\n newDate = new DateTZ({ ...this, date: this.date })\n } else if (this.dateWeekday === 1) {\n // If this.date is monday, just subtract one more day to make it Sunday\n const monday = new DateTZ({ ...this, date: this.date })\n newDate = monday.subtractValue({ days: 1 });\n } else {\n // If later than monday, startOfWeek back to monday and then subtact another day to get to Sunday.\n const monday = new DateTZ({...this, date: this.date.startOf(unit)})\n newDate = monday.subtractValue({ days: 1 })\n }\n }\n\n return newDate\n }\n\n //set the date to the end of the given unit\n public endOfValue (unit: DateTimeUnit) : DateTZ {\n // All the luxon start of values work as needed except for week\n let newDate = new DateTZ({...this, date: this.date.startOf(unit)})\n // Special week logic\n if (unit === 'week') {\n if (this.dateWeekday === 6) {\n // Don't change, we want saturday as the end of the week even though luxon thinks it is Sunday\n newDate = new DateTZ({ ...this, date: this.date })\n } else if (this.dateWeekday === 7) {\n // If this.date is Sunday, this alone is the luxon end of week so add a day\n // to get to monday, then endOfWeek to Sunday, and subtract 1 day to Saturday\n const sunday = new DateTZ({ ...this, date: this.date }).addValue({ days: 1 })\n newDate = sunday.endOfValue(unit).subtractValue({ days: 1 }); // return next saturday\n } else {\n // If not saturday or sunday\n // endOfWeek to Sunday and then subtact a day to get to Saturday.\n const later = new DateTZ({...this, date: this.date.endOf(unit)})\n newDate = later.subtractValue({ days: 1 })\n }\n } else {\n newDate = new DateTZ({...this, date: this.date.endOf(unit)})\n }\n\n return newDate\n }\n \n public startEpoch (): number {\n const org = new DateTZ({date: this.date_org})\n return this.all_day\n ? this.startOfValue('day').ms - this.dateDiff(org, 'minutes')\n : this.ms\n }\n\n //clone the given value and unit to the date\n public clone (): DateTZ {\n // return new DateTZ({...this})\n return this.addValue({ seconds: 0 })\n }\n\n //adds the given value and unit to the date\n public addValue (duration: DurationLike, isLastDayOfMonth?: boolean): DateTZ {\n return new DateTZ({...this, date: isLastDayOfMonth ? this.date.plus(duration).endOf('month') : this.date.plus(duration)});\n }\n\n //subtracts the given value and unit to the date\n public subtractValue (duration: DurationLike): DateTZ {\n const newDate = new DateTZ({...this, date: this.date.minus(duration)})\n return newDate\n }\n\n public setValue (obj: DateObjectUnits): DateTZ {\n const newDate = new DateTZ({...this, date: this.date.set(obj)})\n return newDate\n }\n\n public formatDate (format: string): string {\n // Return new immuatable via \"plus\" to prevent \n // TypeError: Cannot assign to read only property 'weekData' of object\n // https://github.com/moment/luxon/issues/601\n return this.date.plus({ seconds: 0 }).toFormat(format)\n }\n\n public formatLocalDate (format: string): string {\n // setZone already returns new immutable so it doesn't have the formatDate issue.\n return this.date.plus({ seconds: 0 }).setZone(this.local_tz).toFormat(format)\n }\n\n public isSameDate(compare_to: DateTZ, value: DateTimeUnit): boolean {\n return this.date.hasSame(compare_to.date, value)\n }\n\n public isAfterDate(compare_to: DateTZ, unit?: DateTimeUnit): boolean {\n switch (unit) {\n case 'year':\n return this.dateYear > compare_to.dateYear\n case 'month':\n if(this.isAfterDate(compare_to, 'year')){\n return true\n }else if(!this.isSameDate(compare_to, 'year')){\n return false\n }else{\n return this.dateMonth > compare_to.dateMonth\n }\n case 'day':\n if(this.isAfterDate(compare_to, 'month')){\n return true\n }else if(!this.isSameDate(compare_to, 'month')){\n return false\n }else{\n return this.dateDay > compare_to.dateDay\n }\n case 'hour':\n if(this.isAfterDate(compare_to, 'day')){\n return true\n }else if(!this.isSameDate(compare_to, 'day')){\n return false\n }else{\n return this.dateHour > compare_to.dateHour\n }\n case 'minute':\n if(this.isAfterDate(compare_to, 'hour')){\n return true\n }else if(!this.isSameDate(compare_to, 'hour')){\n return false\n }else{\n return this.minutes > compare_to.minutes\n }\n default:\n return this.ms > compare_to.ms;\n }\n }\n\n public isBeforeDate(compare_to: DateTZ, unit?: DateTimeUnit): boolean {\n switch (unit) {\n case 'year':\n return this.dateYear < compare_to.dateYear\n case 'month':\n if(this.isBeforeDate(compare_to, 'year')){\n return true\n }else if(!this.isSameDate(compare_to, 'year')){\n return false\n }else{\n return this.dateMonth < compare_to.dateMonth\n }\n case 'day':\n if(this.isBeforeDate(compare_to, 'month')){\n return true\n }else if(!this.isSameDate(compare_to, 'month')){\n return false\n }else{\n return this.dateDay < compare_to.dateDay\n }\n case 'hour':\n if(this.isBeforeDate(compare_to, 'day')){\n return true\n }else if(!this.isSameDate(compare_to, 'day')){\n return false\n }else{\n return this.dateHour < compare_to.dateHour\n }\n case 'minute':\n if(this.isBeforeDate(compare_to, 'hour')){\n return true\n }else if(!this.isSameDate(compare_to, 'hour')){\n return false\n }else{\n return this.minutes < compare_to.minutes\n }\n default:\n return this.ms < compare_to.ms;\n }\n }\n\n public toZone(tz: string): DateTZ {\n const newDate = new DateTZ({\n ...this, \n date: this.date.setZone(tz), \n building_tz: tz, \n is_local_tz: false\n })\n return newDate\n }\n\n public setTimestamp(timestamp: number): DateTZ {\n const newDate = new DateTZ({\n ...this, \n date: timestamp,\n })\n return newDate\n }\n\n public get JSDate(): Date {\n return this.date.toJSDate()\n }\n\n // helper to log out the dateTZ values\n public logDateTz (label: string = ''): void {\n console.log(`${label} local tz/date/time`, this.addValue({ seconds: 0 }).formatLocalDate(\"cccc d MMMM,yyyy h:mma\"), this.local_tz)\n console.log(`${label} building tz/date/time`, this.addValue({ seconds: 0 }).formatDate(\"cccc d MMMM,yyyy h:mma\"), this.building_tz)\n }\n}\n\nexport const DateNow = (date: Date = new Date()) => {\n return new DateTZ({date: date.valueOf()})\n} \n\n// input the local time and the building timezone\nexport const convertLocalTimestampToTimezonedDateTz = (timestamp: number, buildingTimezone: string): DateTZ => {\n const date = new Date(timestamp);\n return new DateTZ({ date: timestamp, building_tz: buildingTimezone, is_local_tz: false }).setValue({\n day: date.getDate(),\n hour: date.getHours(),\n minute: date.getMinutes()\n });\n}\n\n// input the building time and the building timezone\nexport const convertTimezonedTimestampToLocalDateTz = (timestamp: number, buildingTimezone: string): DateTZ => {\n const local_tz = DateTime.now().zoneName;\n const localOffset = getTimezoneOffset(local_tz, new Date(timestamp));\n const desiredOffset = getTimezoneOffset(buildingTimezone, new Date(timestamp));\n if (localOffset > desiredOffset) {\n const eleA = timestamp + (localOffset - desiredOffset);\n return new DateTZ({date: eleA, building_tz: buildingTimezone, is_local_tz: false});\n } else {\n const eleA = timestamp + (desiredOffset - localOffset);\n return new DateTZ({date: eleA, building_tz: buildingTimezone, is_local_tz: false});\n }\n}\n\nexport const localTimezone = () => {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n}\n\nexport const getTimezoneOffsetString = (tz: string) => {\n const offset_minutes = Math.floor(getTimezoneOffset(tz) / 1000 / 60);\n const hours = Math.floor(offset_minutes/60);\n const minutes = offset_minutes % 60;\n return `${offset_minutes > 0 ? '+' : '-'}${padZero(Math.abs(hours), 2)}${padZero(minutes, 2)}`;\n}\n\nexport function toMiddayUTC(value: DateTZ = DateNow()) {\n // exclude Auckland from rouding up timezone as it has 12+ hours UTC timezone difference\n return value.building_tz.includes('Auckland') ? value : new DateTZ({\n date: value.setValue({ hour: 12, minute: 0 }).ms,\n is_local_tz: false,\n building_tz: 'UTC',\n }).setValue({ hour: 12, minute: 0 });\n}\n\n/**returns the offset between two timezones in minutes and hours */\nexport function timezoneOffset(tz: string){\n const nowTz = DateNow(new Date())\n const offset = nowTz.date.offset - nowTz.toZone(tz).date.offset\n return {minutes: offset, hours: offset/60}\n}\n\nexport function isToday (date, timezone) {\n\n return new DateTZ({\n date: toMiddayUTC(date).ms,\n is_local_tz: false,\n building_tz: timezone\n }).isSameDate(\n new DateTZ({\n date: Date.now(),\n is_local_tz: false,\n building_tz: timezone,\n }),\n 'day'\n );\n}\n","export * from './lib/environment.module';\nexport * from './lib/version';\nexport * from './lib/environment.service'\nexport * from './lib/types'\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n providers: []\n})\nexport class EnvironmentModule {\n}\n","import {\n Inject,\n Injectable\n} from '@angular/core';\nimport { EnvironmentData } from './types';\n\nexport const ENVIRONMENT_TOKEN = 'environments_service_data';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EnvironmentService {\n\n public get production(): boolean {\n return this.environment.production;\n }\n\n public get heap_io_id(): number {\n return this.environment.heap_io_id;\n }\n\n constructor(@Inject(ENVIRONMENT_TOKEN) private environment: EnvironmentData) {\n }\n}\n","// IMPORTANT: THIS FILE IS AUTO GENERATED! DO NOT MANUALLY EDIT OR CHECKIN!\n/* tslint:disable */\nexport const VERSION = {\n \"dirty\": false,\n \"raw\": \"f71e31100\",\n \"hash\": \"f71e31100\",\n \"distance\": null,\n \"tag\": null,\n \"semver\": null,\n \"suffix\": \"f71e31100\",\n \"semverString\": null,\n \"version\": \"0.0.0\",\n \"time\": 1730271155891\n};\n/* tslint:enable */\n","export * from './lib/legacy-overlays.module';\nexport * from './lib/space-select-modal/space-select-modal.component';\nexport * from './lib/new-user-modal/new-user-modal.component';\nexport * from './lib/confirm-modal/confirm-modal.component';\nexport * from './lib/catering-confirm-modal/catering-confirm-modal.component';\nexport * from './lib/catering-details-modal/catering-details-modal.component';\nexport * from './lib/requirement-details-modal/requirement-details-modal.component';\nexport * from './lib/booking-confirm/booking-confirm.component';\nexport * from './lib/user-form/user-form.component'\nexport * from './lib/booking-form/booking-form.component'\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n OnInit,\n Output,\n Renderer2,\n ViewChild\n} from '@angular/core';\nimport {\n MAT_DIALOG_DATA,\n MatDialogRef\n} from '@angular/material/dialog';\nimport { Router } from '@angular/router';\n\nimport {\n ApplicationService,\n Booking,\n BookingsService,\n BookingStateService,\n CateringOrder,\n getFirstDateFromList,\n OrganisationService,\n rulesForSpace,\n recurrenceDetails,\n SeriesAction,\n SettingsService,\n Space,\n SpacesService,\n User,\n UsersService,\n formatWhen,\n BOOKING_STATUS,\n CloseDialogService,\n DialogIds\n} from '@mckinsey-converge/data-common';\nimport {\n BaseDirective,\n DialogEvent,\n HashMap,\n humaniseDuration\n} from '@mckinsey-converge/base';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ConflictsModalComponent, ConflictsModalComponentData } from '@mckinsey-converge/ui';\n\n\nexport interface BookingConfirmModalData {\n old_booking: Booking;\n booking: Booking;\n action?: SeriesAction\n}\n\nexport interface BookingDetailInfo {\n bookedBy: {\n display:boolean,\n value: string\n }\n}\n\n@Component({\n selector: 'a-booking-confirm-modal',\n templateUrl: './booking-confirm.component.html',\n styleUrls: ['./booking-confirm.component.scss']\n})\nexport class BookingConfirmComponent extends BaseDirective implements OnInit{\n /** Emitter for user actions on the modal */\n @Output() public event = new EventEmitter();\n /** Display string for changes are being processed */\n public loading: string;\n /** Whether space availability is being checked */\n public checking_available: boolean;\n /** Whether to show all attendees */\n public show_attendees: boolean = false;\n /** Whether to show all locations */\n public show_locations: boolean;\n /** Whether to show all catering orders */\n public show_orders: boolean;\n /** Whether booking has succeeded */\n public success: boolean;\n /** Whether booking needs to be accepted */\n public readonly is_request: boolean;\n\n public approved: boolean;\n public declined: boolean;\n public bookingDetails: BookingDetailInfo;\n lastMomentConflict: boolean = false;\n \n @ViewChild('attendeesListRef') attendeesListRef: ElementRef;\n @ViewChild('locationsListRef') locationsListRef: ElementRef;\n @ViewChild('cateringListRef') cateringListRef: ElementRef;\n\n /** Booking to confirm changes to */\n public get old_booking(): Booking {\n return this._data.old_booking;\n }\n\n /** Booking to confirm changes to */\n public get booking(): Booking {\n return this._data.booking;\n }\n\n /** Active user */\n public get user(): User {\n return this._users.current;\n }\n\n /** Title of the displayed event */\n public get title(): string {\n return this.booking.title;\n }\n\n /** Comapny names */\n public get company(): string[] {\n return this.booking.company;\n }\n \n\n /** Display string of when the event will occur */\n public get when(): string {\n const duration_value = this.booking.duration;\n const all_day = this.booking.all_day && duration_value < 25 * 60;\n if(this.booking.is_recurrent && this.booking.recurrence_starts && this.booking.recurrence_starts.length){\n return formatWhen({all_day, ...this.recurrenceDates })\n }\n return formatWhen({\n all_day,\n startTZ: this.booking.startDateTz,\n endTZ: this.booking.endDateTz,\n displayEndTZ: this.booking.displayEndDateTz})\n }\n\n public get recurrenceDates(){\n const startTZ = getFirstDateFromList(this.booking.recurrence_starts)\n const endTZ = startTZ.addValue({minutes: this.booking.duration})\n return {startTZ, endTZ, displayEndTZ: endTZ}\n }\n\n /** Display string for the recurrence value of the booking */\n public get recurrence(): string {\n return recurrenceDetails({\n period: this.booking.recurrence_period,\n end: this.booking.recurrence_endTz,\n list: this.booking.recurrence_starts,\n interval: this.booking.recurrence_interval\n });\n }\n\n /** Display string for the event's duration */\n public get duration(): string {\n const duration_value = this.booking.duration;\n return this.booking.all_day ? 'All Day' : humaniseDuration(duration_value);\n }\n\n /** List of spaces associated with the event */\n public get spaces(): Space[] {\n return this.booking.multi_rooms;\n }\n\n /** List of attendees associated with the event not including the host */\n public get attendees(): User[] {\n const attendees = this.booking.attendees;\n return attendees.filter((i) => i.email !== this.organiser.email);\n }\n\n /** Host of the event */\n public get organiser(): User {\n return this.booking.organiser || this._users.current;\n }\n\n /** Host of the event */\n public get equipment_codes(): HashMap {\n return this.booking.equipment_codes || {};\n }\n\n /** Host of the event */\n public get catering_codes(): HashMap {\n const catering = this.catering;\n const codes = {};\n for (const order of this.catering) {\n codes[order.location_id] = order.charge_code;\n }\n return codes;\n }\n\n /** Host of the event */\n public get equipment_notes(): HashMap {\n return this.booking.notes\n .filter((note) => note.type === 'equipment')\n .reduce((map, notes) => {\n map[notes.space] = notes.message;\n return map;\n }, {});\n }\n\n /** Details about the event */\n public get notes(): string {\n return this.booking.body;\n }\n\n /** List of catering orders in the booking */\n public get catering(): CateringOrder[] {\n return (this.booking.catering || []).map((order) => {\n const space: any = this.spaces.find(\n (a_space) => a_space.email === order.location_id\n ) || {\n level: {}\n };\n const building: any =\n this._org.buildings.find((bld) => bld.id === space.level.building_id) || {};\n return new CateringOrder({\n ...order,\n location: space.local_name,\n symbol: building.currency,\n booking_date: this.booking.startDateTz.ms,\n booking_timezone: this.booking.timezone,\n });\n });\n }\n\n /** Map of changes to the booking */\n public get changes(): HashMap {\n return {};\n }\n\n constructor(\n private _service: ApplicationService,\n private _users: UsersService,\n private _org: OrganisationService,\n private _bookings: BookingsService,\n private _booking_state_service: BookingStateService,\n private _spaces: SpacesService,\n private _router: Router,\n private _dialog: MatDialog,\n private _dialog_ref: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private _data: BookingConfirmModalData,\n public settings: SettingsService,\n private closeDialogService: CloseDialogService, \n private renderer: Renderer2,\n ) {\n super();\n this.booking.time_changed =\n this.old_booking &&\n (this.old_booking.startDateTz.ms !== this.booking.startDateTz.ms ||\n this.old_booking.duration !== this.booking.duration);\n // in concierge, all bookings are acceptable without explicit approval.\n\n const rules = rulesForSpace({ user: this.user, space: this.booking.room, duration: 60 });\n this.is_request = this.settings.concierge ? false : rules.auto_approve;\n }\n\n ngOnInit(): void {\n this.approved = this.booking.status === BOOKING_STATUS.approved;\n this.declined = this.booking.status === BOOKING_STATUS.declined; \n // test comment\n const {creator, organiser, booker_concierge} = this.booking;\n this.bookingDetails = {\n bookedBy: {\n display: creator && ( creator.email !== organiser.email || (creator.email === organiser.email && (booker_concierge !== null && booker_concierge !==undefined ) && organiser.email !==booker_concierge['email']) ),\n value: (creator.email === organiser.email && booker_concierge !== null && (booker_concierge['email'] && organiser.email !==booker_concierge['email']) ) ? booker_concierge['name'] || booker_concierge['email'] : creator?.name || creator.email\n }\n }\n }\n\n /**\n * Save booking changes\n */\n public saveChanges() {\n this.loading = 'Checking availability of selected spaces';\n this._dialog_ref.disableClose = true;\n this.checkSpaceAvailability().then(\n () => {\n this.loading = 'Processing booking request...';\n // Change the unchanged settings to the selected room\n const newEmail = this.booking.space.email;\n const replaceObjects = ['setup', 'breakdown', 'approval_status']\n replaceObjects.forEach(key => {\n const obj = this.booking[key];\n if (obj && obj.constructor === Object) {\n const keys = Object.keys(obj);\n if (keys.length > 0) {\n const replacement = {};\n keys.forEach(nk => {\n replacement[newEmail] = obj[nk];\n })\n this.booking[key] = replacement;\n }\n }\n });\n\n const buffer = {};\n this.booking.multi_rooms.map(room => room.email).forEach(elem => buffer[elem] = 900);\n\n // // if no setup or breakdown time already added and notes or catering exist? add 15 min buffer setup and breakdown to booking\n // if(this.booking.setup === null || this.booking.breakdown === null){\n // const has_note_buffer = (this.booking.notes && this.booking.notes?.length) || (this.booking.catering && this.booking.catering?.length) ? \n // buffer : null; // 900 seconds = 15 min\n // if (has_note_buffer) {\n // this.booking.setup = has_note_buffer;\n // this.booking.breakdown = has_note_buffer; \n // this.booking.room_setup = has_note_buffer; \n // this.booking.room_breakdown = has_note_buffer; \n // }\n // }\n\n // if no setup time already added and notes or catering exist? add 15 min buffer setup time to booking\n if (this.booking.setup === null || this.booking.setup === undefined) {\n const has_note_buffer = (this.booking.notes && this.booking.notes.length) || \n (this.booking.catering && this.booking.catering.length) ? \n buffer : null; // 900 seconds = 15 min\n if (has_note_buffer) {\n this.booking.setup = has_note_buffer;\n this.booking.room_setup = has_note_buffer;\n }\n }\n\n // if no breakdown time already added and notes or catering exist? add 15 min buffer breakdown time to booking\n if (this.booking.breakdown === null || this.booking.breakdown === undefined) {\n const has_note_buffer = (this.booking.notes && this.booking.notes.length) || \n (this.booking.catering && this.booking.catering.length) ? \n buffer : null; // 900 seconds = 15 min\n if (has_note_buffer) {\n this.booking.breakdown = has_note_buffer;\n this.booking.room_breakdown = has_note_buffer;\n }\n }\n\n\n this._bookings.save(this.booking, this._data.action === SeriesAction.EDIT).then(\n async (bkn) => {\n this.loading = null;\n this.success = true;\n this._dialog_ref.disableClose = false;\n const updated = new Booking({ ...this.booking, ...bkn.toApiJSON() });\n this._booking_state_service.replace(updated);\n \n /**\n * update the master booking in case of recurring to have latest updated in the system\n */\n if(updated.recurrence_master_id !== null)\n { \n const master_booking = await this._bookings.show(updated.recurrence_master_id);\n this._booking_state_service.replace(master_booking);\n }\n\n if (bkn.is_recurrent && bkn.recurrence_type === 'master') {\n this._booking_state_service.pollOnce();\n this.closeDialogService.closeDialog(DialogIds.MeetingDetails);\n }\n\n localStorage.removeItem('ACA_STAFF.booking_form_data');\n this.event.emit({ reason: 'done' });\n this._service.notifySuccess(\n `Successfully ${this.booking.id ? 'updated' : 'created'} booking`\n );\n },\n (err) => {\n\n this._dialog_ref.disableClose = false;\n let erroMessage: string = '';\n switch(err.status){\n\t\t\t\t\t\t\t\t\t\t\t\t\tcase 400:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\terroMessage = 'Apologies, the booking cannot be finalized because the current time has exceeded the scheduled start time for this booking. Please try again.';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t\tcase 409:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\terroMessage = 'Apologies, this room has been booked recently by another user, please try another one.';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.lastMomentConflict = true;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n this.loading = erroMessage;\n this._service.notifyError(\n `Error ${this.booking.id ? 'updating' : 'creating'} booking: ${erroMessage}`\n );\n setTimeout(()=> {\n this.loading = null;\n this.event.emit({ reason: 'last-moment-conflict' });\n }, 4000) ;\n }\n );\n },\n (err) => {\n\n this.lastMomentConflict = true;\n this._dialog_ref.disableClose = false;\n const erroMessage = 'Apologies, this room has been booked recently by another user, please try another one.';\n this.loading = erroMessage;\n this._service.notifyError(\n `Error ${this.booking.id ? 'updating' : 'creating'} booking: ${erroMessage}`\n );\n setTimeout(()=> {\n this.loading = null;\n this.event.emit({ reason: 'last-moment-conflict' });\n }, 4000) ;\n }\n );\n }\n\n /**\n * Staff only\n */\n public newBooking() {\n this._router.navigate(['/book', 'spaces']);\n this._dialog_ref.close();\n }\n\n /**\n * Staff only\n */\n public toSchedule() {\n this._router.navigate(['/schedule'], {\n queryParams: { email: this.booking.organiser.email }\n });\n this._dialog_ref.close();\n }\n\n /**\n * Check whether the selected spaces are available for the selected time period\n */\n public checkSpaceAvailability(): Promise {\n const spaces: Space[] = this.spaces;\n if (\n (this.booking.id &&\n (this.booking.startDateTz.ms === this.old_booking.startDateTz.ms &&\n this.booking.duration === this.old_booking.duration)) ||\n (spaces && spaces.length <= 0)\n ) {\n return Promise.resolve();\n }\n return new Promise((resolve, reject) => {\n // Use of this.booking.timezone is unreliable, use booking space instead.\n const all_day = this.booking.all_day;\n // R--- should be nothing to do with date as a timestamp getter\n this._spaces\n .available({\n room_ids: spaces.map((space) => space.id).join(','),\n dateTz: this.booking.startDateTz,\n duration: all_day ? 24 * 60 : this.booking.duration,\n ignore: this.booking.icaluid,\n recurrence_count: this.booking.recurrence_count,\n recurrence_period: this.booking.recurrence_period,\n recurrence_endTz: this.booking.recurrence_endTz,\n recurrence_interval: this.booking.recurrence_interval,\n recurrence_starts: this.booking.recurrence_starts,\n is_recurrent: this.booking.is_recurrent,\n recurrence_days: this.booking.recurrence_days\n })\n .then(\n (space_list) => {\n for (const space of space_list) {\n if (!space.bookable) {\n this.lastMomentConflict = true;\n return reject(\n `${space.name} is not available at the select time period.`\n );\n }\n }\n if (space_list.length < spaces.length) {\n this.lastMomentConflict = true;\n return reject(\n `${spaces[0].name} is not available at the select time period.`\n );\n }\n resolve();\n },\n (err) => reject(err)\n );\n });\n }\n\n public openConflictsModal(){\n const ref = this._dialog.open(ConflictsModalComponent, {\n maxWidth: '95vw',\n width: '32em',\n data: {\n room_name: this.booking.local_room_name,\n conflicts: this.booking.recurrence_exceptions,\n copy_conflicts: true,\n timezone: this.booking.timezone\n }\n });\n\n this.subscription(\n 'modal_events',\n ref.componentInstance.event.subscribe((event: DialogEvent) => {\n if(event.reason === 'close'){\n ref.close();\n }else if(event.reason === 'action'){\n navigator.clipboard.writeText(this.conflictsText)\n }\n \n })\n );\n ref.afterClosed().subscribe(() => this.unsub('modal_events'));\n }\n\n public get conflictsText(){\n let text = ''\n this.booking.recurrence_exceptions.map((date)=>{\n const dateTZ = new DateTZ({date: date*1000});\n const display = dateTZ.formatDate('ccc dd MMM yyyy');\n text = `${text}\\n${display}${dateTZ.isSameDate(DateNow(new Date()), 'day') ? ' (Today)' : ''}`;\n })\n return text\n }\n\n public toggleList(listType: 'attendees' | 'locations' | 'catering') {\n if (listType === 'attendees') {\n this.show_attendees ? this.collapseList(this.attendeesListRef) : this.expandList(this.attendeesListRef);\n this.show_attendees = !this.show_attendees;\n } else if (listType === 'locations') {\n this.show_locations ? this.collapseList(this.locationsListRef) : this.expandList(this.locationsListRef);\n this.show_locations = !this.show_locations;\n } else if (listType === 'catering') {\n this.show_orders ? this.collapseList(this.cateringListRef) : this.expandList(this.cateringListRef);\n this.show_orders = !this.show_orders;\n }\n }\n\n public expandList(listRef: ElementRef) {\n const listElement = listRef.nativeElement;\n const listItems = listElement.getElementsByClassName('list-item');\n let totalHeight = 0;\n\n for (let i = 0; i < listItems.length; i++) {\n totalHeight += listItems[i].offsetHeight;\n }\n\n this.renderer.setStyle(listElement, 'max-height', `${totalHeight}px`);\n this.renderer.addClass(listElement, 'shown');\n }\n\n public collapseList(listRef: ElementRef) {\n const listElement = listRef.nativeElement;\n this.renderer.setStyle(listElement, 'max-height', '4.5em');\n this.renderer.removeClass(listElement, 'shown');\n }\n}\n","\n \n\n\n
\n \n \n \n \n
\n
\n\n
\n
\n
\n \n
\n
\n {{ loading }}\n
\n
\n
\n
\n\n \n \n \n
My Day\n \n\n","import {\n Component,\n Input,\n OnInit, ChangeDetectionStrategy, ChangeDetectorRef, Output, EventEmitter \n} from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { MatDialog } from '@angular/material/dialog';\nimport { distinctUntilChanged, first, skip } from 'rxjs/operators';\n\nimport {\n BaseDirective,\n closestToTimeSlotTz,\n Identity,\n unique\n} from '@mckinsey-converge/base';\nimport {\n ApplicationService,\n arrayWithValues,\n BookingAction,\n CateringOrder,\n SeriesAction,\n SettingsService,\n User,\n UsersService\n} from '@mckinsey-converge/data-common';\n\nimport { NewUserModalComponent } from '../new-user-modal/new-user-modal.component';\nimport {\n SpaceSelectModalComponent,\n SpaceSelectModalData\n} from '../space-select-modal/space-select-modal.component';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { DateTime } from 'luxon';\nimport { MatChipsModule} from '@angular/material/chips';\n\n\n@Component({\n selector: 'a-booking-form',\n templateUrl: './booking-form.component.html',\n styleUrls: ['./booking-form.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BookingFormComponent extends BaseDirective implements OnInit {\n /** Form fields for booking */\n @Input() public form: FormGroup;\n /** List of available users to host bookings */\n public user_list: User[] = [];\n public nowTz: DateTZ = DateNow(new Date());\n /** From date input for date field */\n public fromDateTz: DateTZ = this.nowTz.setValue({ minute: Math.ceil(this.nowTz.minutes / 5) * 5 });\n /** Last bookable date, concierge only */\n public readonly untilDateTz = DateNow(new Date()).addValue({ days: 365 }).endOfValue('day');\n public isConcierge: boolean;\n public localTimezone = DateNow(new Date()).building_tz;\n public localStart = \"\";\n public localEnd = \"\";\n // Define an array to store selected company options\n public chipOptions: any[] = [];\n public showTimeCateringWarning: boolean = false;\n\n constructor(\n private _service: ApplicationService,\n private _users: UsersService,\n private _dialog: MatDialog,\n private settingsService: SettingsService,\n private cdRef: ChangeDetectorRef\n ) {\n super();\n this.isConcierge = this.settingsService.concierge;\n }\n\n public ngOnInit(): void {\n // Trim title \n // this.form.get('title').setValue(this.form.get('title').value.trim());\n\n this.chipOptions = [...this.form.controls.company.value];\n\n this.localTimezone = DateNow(new Date()).building_tz;\n const building_tz = (\n this.form.controls.action &&\n (\n this.form.controls.action.value === 'booking_clone' ||\n this.form.controls.action.value === 'clone' ||\n this.form.controls.action.value === 'edit' ||\n this.form.controls.action.value === 'booking_edit'\n ) &&\n this.form.controls.dateTz &&\n this.form.controls.dateTz.value\n ) ? this.form.controls.dateTz.value.building_tz : this.localTimezone;\n\n this.nowTz = new DateTZ({ date: Date.now(), is_local_tz: false, building_tz });\n this.fromDateTz = closestToTimeSlotTz(this.nowTz, 15);\n\n this._users.initialised.pipe(first((_) => _)).subscribe(() => {\n const user: User = this._users.current;\n const delegates = user.delegates.map(\n (del) => this._users.find(del.email) || new User({ email: del.email, name: del.email.split('@')[0] })\n );\n this.user_list = [user].concat(delegates);\n });\n\n this.updateCoachmarkTimes(this.form.controls.timezone.value);\n this.subscription('formChanges', this.form.valueChanges\n .pipe(\n skip(1), // initial form changes\n distinctUntilChanged())\n .subscribe(() => {\n this.timeout('update_coachmark', () => {\n this.updateCoachmarkTimes(this.form.controls.timezone.value);\n }, 500);\n })\n );\n\n this.subscription('isRecurrentChanges', this.form.controls.is_recurrent.valueChanges\n .subscribe(() => {\n const recurrenceStarts = this.form.controls.recurrence_starts\n if(!this.form.controls.is_recurrent.value){\n recurrenceStarts.clearValidators() \n }else{\n const arrayValidators = [Validators.required];\n arrayValidators.push(arrayWithValues);\n recurrenceStarts.setValidators(arrayValidators);\n }\n recurrenceStarts.updateValueAndValidity()\n })\n ); \n\n /**Disable Inputs */\n this.disableInputs();\n\n /**turn is_recurrent to false if editing or cloning a stand-alone/occurrence */\n if(this.form.controls.id?.value && !this.form.controls.action?.value){\n this.form.controls.is_recurrent.setValue(false)\n }\n\n // Subscribe to changes in dateTz, duration, and has_catering\n this.subscription('dateTz_changes', this.form.controls.dateTz.valueChanges.subscribe(() => {\n this.checkTimeCateringWarning();\n }));\n\n this.subscription('duration_changes', this.form.controls.duration.valueChanges.subscribe(() => {\n this.checkTimeCateringWarning();\n }));\n\n // No need to subscribe to catering_changes since we're now handling has_catering\n this.subscription('has_catering_changes', this.form.controls.has_catering.valueChanges.subscribe(() => {\n this.checkTimeCateringWarning();\n }));\n\n // Initial check\n this.checkTimeCateringWarning();\n}\n\n /**\n * \n * @param key : formcontrol name \n * Function trim value being submitted with only spaces/beginning/end \n */\n public trim(key: string): void {\n this.form.get(key).setValue(this.form.get(key).value.trim());\n }\n\n /** Whether notes and description should use the HTML editor */\n public get use_html(): boolean {\n return this._service.setting('app.booking.html_body') || false;\n }\n\n /** List of available types for bookings */\n public get booking_types(): Identity[] {\n return this._service.setting('app.booking.booking_types') || [];\n }\n\n /** Display string for the list of active spaces */\n public get spaces(): string {\n const spaces = this.form.controls.space_list.value;\n return spaces.length === 1\n ? spaces[0].local_name\n : spaces.length > 1\n ? `${spaces.length} spaces selected`\n : 'No Spaces selected';\n }\n\n public disableInputs() {\n const { id, action, needs_space, is_recurrent } = this.form.value;\n const has_id = !!id;\n const is_edit = action === BookingAction.EDIT;\n if (has_id) {\n this.form.get('is_recurrent')?.disable();\n }\n\n if(is_edit){\n this.form.get('is_multiroom')?.disable();\n }\n\n if (!this.isConcierge && !needs_space) {\n this.form.get('has_catering')?.disable();\n }\n if(has_id && is_edit && is_recurrent){\n this.form.get('dateTz')?.disable()\n this.form.patchValue({ action: null });\n }\n }\n\n /**\n * Open modal to change the space details for the booking\n */\n public openSpacesModal(): void {\n const ref = this._dialog.open(\n SpaceSelectModalComponent,\n {\n width: 'auto',\n height: 'auto',\n maxWidth: '95vw',\n data: {\n spaces: this.form.controls.space_list.value,\n dateTz: this.form.controls.dateTz.value,\n duration: this.form.controls.duration.value,\n host: this.form.controls.organiser.value,\n multiple: true,\n needsCatering: !!this.form.controls.catering?.value?.length,\n }\n }\n );\n this.subscription(\n 'new_spaces',\n ref.componentInstance.event.subscribe((event) => {\n /* istanbul ignore else */\n if (event.reason === 'done') {\n let space_list = this.form.controls.space_list.value;\n space_list = event.metadata;\n this.form.controls.space_list.setValue(unique(space_list, 'id'));\n const catering = this.form.controls?.catering?.value.map((order: CateringOrder) => {\n order.location = space_list[0].name;\n order.location_id = space_list[0].email;\n return order;\n })\n this.form.controls.catering?.setValue(catering || [])\n ref.close();\n this.unsub('new_spaces');\n }\n if (event.reason === 'close') {\n ref.close();\n this.unsub('new_spaces');\n }\n })\n );\n }\n\n /**\n * Open modal to change the recurrence details for the booking\n */\n public openNewUserModal() {\n const ref = this._dialog.open(NewUserModalComponent, {\n width: 'auto',\n height: 'auto'\n });\n this.subscription(\n 'new_user',\n ref.componentInstance.event.subscribe((event) => {\n /* istanbul ignore else */\n if (event.reason === 'done') {\n const attendees = this.form.controls.attendees?.value;\n attendees.push(event.metadata);\n this.form.controls.attendees.setValue(unique(attendees, 'email'));\n ref.close();\n this.unsub('new_user');\n this.cdRef.detectChanges();\n }\n })\n );\n }\n\n // Add & Remove chip and set the value of the form control accordingly\n addCompany(event, company): void {\n if (company) {\n this.chipOptions.push(company);\n this.form.controls.company.setValue(this.chipOptions);\n }\n event.preventDefault();\n }\n\n removeOption(option: any): void {\n const index = this.chipOptions.indexOf(option);\n if (index >= 0) {\n this.chipOptions.splice(index, 1);\n }\n this.form.controls.company.setValue(this.chipOptions);\n }\n\n private updateCoachmarkTimes(timezone: string) {\n if (!timezone) timezone = this.localTimezone;\n // Resolve the problem that locally I might have the same TZ offset but the names don't match.\n const localTzOffset = DateTime.now().setZone(this.localTimezone).offset;\n const buildingTzOffset = DateTime.now().setZone(timezone).offset;\n const dateTz = this.form.controls.dateTz.value;\n if (dateTz && localTzOffset !== buildingTzOffset) {\n const startDate = dateTz.clone();\n this.localStart = startDate.formatLocalDate(\"h:mma\");\n this.localEnd = startDate.addValue({ minutes: this.form.value.duration }).formatLocalDate(\"h:mma\");\n } else {\n // No location is selected so coachmark is hidden\n this.localStart = \"\";\n this.localEnd = \"\";\n }\n this.cdRef.detectChanges();\n }\n\n public get isSeriesAction(){\n return this.form.value.action === SeriesAction.CLONE || this.form.value.action === SeriesAction.EDIT\n }\n\n onToggleChange(toggledControlName: string, is_multiroom: boolean): void {\n if (toggledControlName === 'is_recurrent') {\n // If the is_recurrent toggle is being activated, deactivate is_multiroom\n if (this.form.controls.is_recurrent?.value) {\n this.form.controls.is_multiroom?.setValue(false);\n this.form.controls.merged?.setValue(false);\n this.form.get('merged')?.disable();\n\n }\n } else if (toggledControlName === 'is_multiroom') {\n // If the is_multiroom toggle is being activated, deactivate is_recurrent\n if (this.form.controls.is_multiroom?.value) {\n this.form.controls.is_recurrent?.setValue(false);\n }\n if(is_multiroom) { \n this.form.get('merged').setValue(false);\n this.form.get('merged')?.enable() \n } else {\n this.form.get('merged').setValue(false); \n this.form.get('merged')?.disable(); }\n }\n }\n \n private checkTimeCateringWarning() {\n const dateTz = this.form.controls.dateTz.value;\n const duration = this.form.controls.duration.value;\n const hasCatering = this.form.controls.has_catering?.value;\n const cateringOrders = this.form.controls.catering?.value;\n \n if (dateTz && duration && hasCatering && cateringOrders && cateringOrders.length > 0) {\n // Create DateTime object for the start time\n const startDateTime = DateTime.fromISO(dateTz.date, { zone: dateTz.building_tz });\n \n // Calculate the end time\n const endDateTime = startDateTime.plus({ minutes: duration });\n \n // Get the date part of the startDateTime\n const bookingDate = startDateTime.startOf('day');\n\n // Define 7 am and 8 pm on the booking date\n const dayStartAt7am = bookingDate.set({ hour: 7 });\n const dayEndAt8pm = bookingDate.set({ hour: 20 });\n\n // Check if booking ends before or at 7 am, or starts at or after 8 pm\n if (endDateTime <= dayStartAt7am || startDateTime >= dayEndAt8pm) {\n // Booking is outside of catering hours and has catering selected\n this.showTimeCateringWarning = true;\n } else {\n this.showTimeCateringWarning = false;\n }\n } else {\n this.showTimeCateringWarning = false;\n }\n\n // Inform Angular that the component needs to be checked\n this.cdRef.markForCheck();\n }\n\n}\n","
\n \n \n \n
\n
\n \n Title*:\n \n \n \n\n \n {{ ( form?.get('title').errors && form?.get('title').hasError('pattern')) \n ? 'Some special characters (^=`~!@#$%*{};:\\'_\\\",.\\<>) are not allowed' : 'Title is required'}} \n \n \n
\n\n
\n \n
\n \n \n
\n Date and time must be in the future\n
\n
\n
\n
\n
\n \n \n
\n Date and time must be in the future\n
\n
\n
\n
\n \n \n
\n \n
\n Duration is invalid. End time must be in the future\n
\n
\n
\n
\n Please be aware that this booking starts at {{localStart}} and ends at {{localEnd}} in your local timezone.\n
\n
\n Warning: Changing the booking time outside of catering hours will drop your catering order.\n
\n
\n
\n
\n
\n Recurring booking\n
\n \n
\n Multiroom\n
\n
\n \n
\n
Merged
\n
\n \n
\n
\n \n \n
\n \n \n \n \n \n {{ user.name || user.email }}\n \n \n \n
\n
\n \n \n \n {{ form?.get('attendees').errors?.customError }}\n \n
\n
\n \n
\n \n
\n \n
\n \n \n {{ ( form?.get('company').errors && form?.get('company').hasError('pattern'))\n ? 'Some special characters (^=`~@#$%*{};:_\\\",.\\<>) are not allowed' : ''}}\n \n
\n \n
\n \n \n {{ selected }}\n
\n
\n
\n
\n\n
1\">\n \n \n \n \n {{ type.name }}\n \n \n \n
\n
\n Need a meeting space?\n \n
\n
\n \n \n Need catering?\n \n
\n
\n \n \n \n \n \n \n \n
\n\n","import {\n Component,\n EventEmitter,\n Inject,\n OnInit,\n Output\n} from '@angular/core';\nimport {\n MAT_DIALOG_DATA,\n MatDialogRef\n} from '@angular/material/dialog';\nimport {\n FormControl,\n FormGroup\n} from '@angular/forms';\n\nimport {\n ApplicationService,\n CateringItem,\n OrganisationService,\n Space,\n SpacesService\n} from '@mckinsey-converge/data-common';\nimport {\n BaseDirective,\n DialogEvent\n} from '@mckinsey-converge/base';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\n\n\nexport interface CateringConfirmModalData {\n all_day: boolean;\n form: FormGroup;\n dateTz: DateTZ;\n}\n\n@Component({\n selector: 'a-catering-confirm-modal',\n templateUrl: './catering-confirm-modal.component.html',\n styleUrls: ['./catering-confirm-modal.component.scss']\n})\nexport class BookingCateringConfirmModalComponent extends BaseDirective implements OnInit {\n /** Emitter for user actions on the modal */\n @Output() public event = new EventEmitter();\n /** List of selected items for the order */\n public item_list: CateringItem[] = [];\n\n /** Space selected for delivery */\n public get space(): Space {\n return this._spaces.find(this._data.form?.controls?.location_id?.value);\n }\n\n /** Delivery time for the order */\n public get delivery_time(): string {\n let date = this._data.dateTz;\n if (this._data.form && this._data.form.controls.delivery_time) {\n date = date.addValue({ minutes: this._data.form.controls.delivery_time.value });\n }\n return date.formatDate('h:mma').toLocaleLowerCase();\n }\n\n /** Form field for order items */\n public get item_field(): FormControl {\n return this._data.form.controls.items as any;\n }\n\n /** Total cost of the order */\n public get order_cost(): number {\n return this.item_list.reduce((amount, item) => {\n const price = item.price\n return amount + item.amount * price\n }, 0);\n }\n\n /** Currency symbol for the selected space */\n public get symbol(): string {\n /* istanbul ignore else */\n if (!this.space || !this.space.level) {\n return 'USD';\n }\n const building = this._org.buildings.find(\n (bld) => bld.id === this.space.level.building_id\n ) || { currency: 'USD' };\n return building.currency;\n }\n\n constructor(\n private _service: ApplicationService,\n private _org: OrganisationService,\n private _spaces: SpacesService,\n private _dialog_ref: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private _data: CateringConfirmModalData\n ) {\n super();\n if (!this._data.form) {\n this._service.notifyError('No form data for order');\n this._dialog_ref.close();\n }\n }\n\n public ngOnInit(): void {\n /* istanbul ignore else */\n if (this._data.form.controls.items) {\n this.subscription(\n 'item_list',\n this._data.form.controls.items.valueChanges.subscribe((items) => {\n /* istanbul ignore else */\n if (!items || items.length <= 0) {\n this._dialog_ref.close();\n }\n })\n );\n }\n this.item_list = this._data.form.controls.items.value.map((item) => new CateringItem(item.toJSON()));\n }\n}\n","
\n
Confirm Catering Order
\n \n
\n\n
\n
\n Delivering to {{ space?.local_name || '<Unset>' }} at {{ delivery_time }}\n
\n
\n \n
\n
\n \n
{{ order_cost / 100 | currency:symbol }}
\n
\n
\n
\n\n
\n \n
\n
\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n OnInit,\n Output,\n ViewChild\n} from '@angular/core';\nimport {\n AbstractControl,\n FormControl,\n FormGroup,\n Validators\n} from '@angular/forms';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\n\nimport {\n OrganisationService,\n BookingNote,\n CateringOrder,\n Space,\n UsersService,\n CateringNotesService,\n Booking\n} from '@mckinsey-converge/data-common';\nimport {\n DialogEvent,\n HashMap\n} from '@mckinsey-converge/base';\n\nimport { DateNow } from '@mckinsey-converge/date-tz';\n\n\nexport interface CateringDetailsModalData {\n spaces: Space[];\n notes_field: AbstractControl;\n catering: AbstractControl;\n booking: Booking\n}\n\n@Component({\n selector: 'a-catering-details-modal',\n templateUrl: './catering-details-modal.component.html',\n styleUrls: ['./catering-details-modal.component.scss']\n})\nexport class CateringDetailsModalComponent implements OnInit {\n /** Emitter for modal events */\n @Output() public event = new EventEmitter();\n /** Mapping of spaces to notes */\n public notes: HashMap = {};\n /** Mapping of spaces to cost codes */\n public codes: HashMap = {};\n /** Mapping of spaces to estimated head count */\n public head_counts: HashMap = {};\n /** Mapping of spaces to form fields */\n public form: HashMap = {};\n /** Map of spaces to whether they need a charge code */\n public needs_charge_code: HashMap = {};\n /** Index of the active space */\n public active_space: number = 0;\n\n @ViewChild('content', { static: true }) private _content_el: ElementRef;\n\n /** List of selected spaces */\n public get space_list(): Space[] {\n return (this._data.spaces || []).filter((space) =>\n this._data.catering.value.find((order) => order.location_id === space.email)\n );\n }\n\n public get active_form(): FormGroup {\n return this.form[this.space_list[this.active_space].email];\n }\n\n public get invalid_charge_code(): boolean {\n return this.active_form.controls.code.errors?.pattern || this.active_form.controls.code.errors?.minlength;\n }\n\n /** Whether form fields are valid */\n public get is_valid(): boolean {\n return this.space_list.reduce(\n (valid, space) => valid && this.form[space.email].valid,\n true\n );\n }\n\n constructor(\n private _org: OrganisationService,\n private _users: UsersService,\n private _cateringNotesService: CateringNotesService,\n @Inject(MAT_DIALOG_DATA) private _data: CateringDetailsModalData\n ) {\n }\n\n public ngOnInit(): void {\n const note_list = this._data.notes_field.value.filter(\n (note: BookingNote) => note.type === 'catering'\n );\n this.notes = note_list.reduce((map, note) => {\n map[note.space] = note.message;\n return map;\n }, {});\n this.codes = this._data.catering.value.reduce((map, order: CateringOrder) => {\n map[order.location_id] = order.charge_code;\n return map;\n }, {});\n this.generateFormFields();\n }\n\n public submit(): void {\n this.space_list.forEach((space) => this.form[space.email].markAllAsTouched());\n /* istanbul ignore else */\n if (this.is_valid) {\n // Update notes\n const notes = this._data.notes_field.value.filter(\n (note: BookingNote) => note.type !== 'catering'\n );\n const new_notes = this.space_list.map(\n (space) =>\n ({\n author: this._data.booking.booked_by ? this._data.booking.booked_by['name'] : this._users.current.name,\n type: 'catering',\n message: this.form[space.email].controls.notes.value,\n space: space.email,\n date: DateNow(new Date()).ms\n } as BookingNote)\n );\n this._cateringNotesService.setNotes(new_notes);\n this._data.notes_field.setValue(notes.concat(new_notes).filter((note) => note.message));\n // Save the notes\n const orders = this._data.catering.value.map(\n (order) =>\n new CateringOrder({\n ...order,\n charge_code: this.form[order.location_id]\n ? this.form[order.location_id].controls.code.value\n : ''\n })\n );\n\n this._data.catering.setValue(orders);\n // This should go to the next\n this.event.emit({ reason: 'done' });\n } else {\n this._scrollToBottom();\n }\n }\n\n /** Generate form fields for each space */\n private generateFormFields(): void {\n for (const space of this.space_list) {\n const building = this._org.buildings.find(\n bld => bld.id === space.level.building_id\n );\n \n this.needs_charge_code[space.email] = space?.filters?.charge_code || space?.settings?.charge_code || false;\n this.form[space.email] = new FormGroup({\n notes: new FormControl(this.notes[space.email] || ''),\n code: new FormControl(this.codes[space.email] || '',\n this.needs_charge_code[space.email] ?\n [Validators.pattern(/^[a-zA-Z0-9]{4,}$/), Validators.minLength(4), Validators.required ] : [Validators.pattern(/^[a-zA-Z0-9]{4,}$/), Validators.minLength(4)])\n });\n }\n }\n\n /** Scroll the content container to the bottom */\n private _scrollToBottom(): void {\n this._content_el?.nativeElement.scrollTo({\n top: this._content_el.nativeElement.scrollHeight,\n left: 0,\n behavior: 'smooth'\n });\n }\n}\n","
\n
\n \n \n \n
\n \n
\n\n
\n
\n \n
Please specify any allergies or gluten intolerances
\n
\n
\n
\n \n \n \n \n
\n
\n \n Charge Code\n *\n \n \n \n \n Note: Your booking will be confirmed before you are charged.\n \n \n {{ invalid_charge_code ? 'Valid Charge Code Required' : 'Charge Code is required'}}\n \n \n
\n
\n
\n
\n\n
\n \n
\n
\n","import {\n Component,\n EventEmitter,\n Inject,\n Output\n} from '@angular/core';\nimport {\n MAT_DIALOG_DATA,\n MatDialogRef\n} from '@angular/material/dialog';\n\nimport { ApplicationIcon } from '@mckinsey-converge/data-common';\nimport {\n BaseDirective,\n DialogEvent\n} from '@mckinsey-converge/base';\n\nexport interface ConfirmModalData {\n /** Title of the modal */\n title: string;\n /** Contents of the modal */\n content: string;\n /** Text displaed on the confirmation button */\n action?: string;\n /** Icon to display on the modal */\n icon: ApplicationIcon;\n}\n\nexport const CONFIRM_METADATA = {\n height: 'auto',\n width: '24em',\n maxHeight: 'calc(100vh - 2em)',\n maxWidth: 'calc(100vw - 2em)'\n};\n\n@Component({\n selector: 'confirm-modal',\n templateUrl: './confirm-modal.component.html',\n styleUrls: ['./confirm-modal.component.scss']\n})\nexport class ConfirmModalComponent extends BaseDirective {\n /** Emitter for user action on the modal */\n @Output() public event = new EventEmitter();\n /** Loading state */\n public loading: string;\n\n /** Title of the confirm modal */\n public get title(): string {\n return (this._data ? this._data.title : null) || 'Confirm';\n }\n\n /** Body of the confirm modal */\n public get content(): string {\n return (this._data ? this._data.content : null) || 'Are you sure?';\n }\n\n /** Display text on the confirm button */\n public get action(): string {\n return (this._data ? this._data.action : null) || 'Ok';\n }\n\n /** Display icon properties */\n public get icon(): ApplicationIcon {\n return (this._data ? this._data.icon : null) || null;\n }\n\n constructor(\n private _dialog: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private _data: ConfirmModalData\n ) {\n super();\n }\n\n /**\n * User confirmation of the content of the modal\n */\n public accept() {\n this.event.emit({ reason: 'done' });\n }\n}\n","
\n

{{ title || 'Confirm' }}

\n
\n\n
\n \n
\n

\n
\n
\n
\n\n
\n \n \n
\n
\n\n
\n
\n
\n \n
\n
{{ loading }}
\n
\n
\n
\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { LegacyUiModule } from '@mckinsey-converge/legacy-ui';\nimport { UiModule } from '@mckinsey-converge/ui';\nimport {\n FormsModule,\n ReactiveFormsModule\n} from '@angular/forms';\nimport { SpaceSelectModalComponent } from './space-select-modal/space-select-modal.component';\nimport { NewUserModalComponent } from './new-user-modal/new-user-modal.component';\nimport { ConfirmModalComponent } from './confirm-modal/confirm-modal.component';\nimport { NoCateringModalComponent } from './no-catering-modal/no-catering-modal.component';\nimport { BookingCateringConfirmModalComponent } from './catering-confirm-modal/catering-confirm-modal.component';\nimport { CateringDetailsModalComponent } from './catering-details-modal/catering-details-modal.component';\nimport { RequirementDetailsModalComponent } from './requirement-details-modal/requirement-details-modal.component';\nimport { BookingConfirmComponent } from './booking-confirm/booking-confirm.component';\nimport { BaseModule } from '@mckinsey-converge/base';\nimport { UserFormComponent } from './user-form/user-form.component';\nimport { BookingFormComponent } from './booking-form/booking-form.component';\nimport { EditorModule } from '@tinymce/tinymce-angular';\n\nconst DECLARATIONS = [\n SpaceSelectModalComponent,\n NewUserModalComponent,\n ConfirmModalComponent,\n NoCateringModalComponent,\n BookingCateringConfirmModalComponent,\n CateringDetailsModalComponent,\n RequirementDetailsModalComponent,\n BookingConfirmComponent,\n UserFormComponent,\n BookingFormComponent,\n];\n\n@NgModule({\n imports: [\n LegacyUiModule,\n FormsModule,\n ReactiveFormsModule,\n CommonModule,\n UiModule,\n BaseModule,\n EditorModule,\n ],\n declarations: [\n ...DECLARATIONS\n ],\n exports: [\n ...DECLARATIONS,\n BaseModule\n ]\n})\nexport class LegacyOverlaysModule {\n}\n","import { Component, EventEmitter, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\n\nimport { BaseDirective, DialogEvent } from '@mckinsey-converge/base';\nimport { generateUserForm, User } from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'new-user-modal',\n templateUrl: './new-user-modal.component.html',\n styleUrls: ['./new-user-modal.component.scss'],\n})\nexport class NewUserModalComponent extends BaseDirective implements OnInit {\n /** Emitter for user action on the modal */\n @Output() public event = new EventEmitter();\n /** Form fields for the new user */\n public form: FormGroup;\n /** New user data store */\n public user: User;\n /** Whether user details are being saved */\n public loading: boolean;\n\n public ngOnInit(): void {\n this.user = new User();\n this.form = generateUserForm(this.user);\n }\n\n public saveChanges() {\n this.form.markAllAsTouched();\n if (this.form.valid) {\n if (!this.form.controls.email.value) {\n this.form.controls.email.setValue(\n `${Math.floor(Math.random() * 99999)}@guest.mckinsey.com`\n );\n }\n const firstName = this.form.value.first_name.split(' ')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n\n const lastName = this.form.value.last_name.split(' ')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n \n const new_user = new User({\n ...this.form.value,\n name: `${firstName} ${lastName}`,\n type: 'external',\n external: true,\n visitor: true,\n });\n this.event.emit({ reason: 'done', metadata: new_user });\n }\n }\n}\n","
\n

Add External Attendee

\n \n
\n
\n \n
\n
\n \n \n
\n\n
\n
\n
\n \n
\n
\n Saving attendee...\n
\n
\n
\n
\n\n","import {\n Component,\n Output,\n EventEmitter\n} from '@angular/core';\nimport {\n MatDialogRef,\n} from '@angular/material/dialog';\nimport {\n BaseDirective,\n DialogEvent\n} from '@mckinsey-converge/base';\n\n@Component({\n selector: 'no-catering-modal',\n templateUrl: './no-catering-modal.component.html',\n styleUrls: ['./no-catering-modal.component.scss']\n})\nexport class NoCateringModalComponent extends BaseDirective {\n constructor(\n private _dialog_ref: MatDialogRef,\n ) {\n super();\n }\n\n // /** Emitter for user action on the modal */\n @Output() public event = new EventEmitter();\n\n // Submit the Survey in it's current state.\n public confirm() {\n this.event.emit({ reason: 'done' });\n this._dialog_ref.close();\n }\n\n // Close the modal\n public cancel() {\n this.event.emit({ reason: 'close' });\n this._dialog_ref.close();\n }\n}\n","
\n \n
\n
\n
\n \n

Catering is not available for your new room selection. \n
Are you sure you want to change rooms?

\n
\n
\n \n \n \n
\n
\n
","import {\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n OnInit,\n Output,\n ViewChild\n} from '@angular/core';\nimport {\n AbstractControl,\n FormControl,\n FormGroup,\n Validators\n} from '@angular/forms';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\n\nimport {\n BookingNote,\n OrganisationService,\n SettingsService,\n Space,\n UsersService\n} from '@mckinsey-converge/data-common';\nimport {\n DialogEvent,\n HashMap\n} from '@mckinsey-converge/base';\n\nimport { DateNow } from '@mckinsey-converge/date-tz';\n\n\nexport interface RequirementDetailsModalData {\n spaces: Space[];\n notes_field: AbstractControl;\n codes_field: AbstractControl;\n head_counts_field: AbstractControl;\n standalone?: boolean;\n}\n\n@Component({\n selector: 'a-requirement-details-modal',\n templateUrl: './requirement-details-modal.component.html',\n styleUrls: ['./requirement-details-modal.component.scss']\n})\nexport class RequirementDetailsModalComponent implements OnInit {\n /** Emitter for modal events */\n @Output() public event = new EventEmitter();\n /** Mapping of spaces to notes */\n public notes: HashMap = {};\n /** Mapping of spaces to cost codes */\n public codes: HashMap = {};\n /** Mapping of spaces to estimated head count */\n public head_counts: HashMap = {};\n /** Mapping of spaces to form fields */\n public form: HashMap = {};\n /** Map of spaces to whether they need a charge code */\n public needs_charge_code: boolean;\n /** Index of the active space */\n public active_space: number = 0;\n\n @ViewChild('content', { static: true }) private _content_el: ElementRef;\n\n /** List of selected spaces */\n public get space_list(): Space[] {\n return this._data.spaces;\n }\n\n public get has_recurrence(): boolean {\n return false\n }\n\n public get active_form(): FormGroup {\n return this.form[this.space_list[this.active_space].email];\n }\n\n public get invalid_charge_code(): boolean {\n return this.active_form.controls.code.errors?.minlength || this.active_form.controls.code.errors?.pattern;\n }\n\n /** Whether form fields are valid */\n public get is_valid(): boolean {\n // return this.space_list.reduce((valid, space) => valid && this.form[space.email].valid, true);\n return this.space_list.length > 0 && this.space_list.reduce((valid, space) => valid && this.form[space.email].valid, true);\n }\n\n public isConcierge: boolean;\n public frontend: string;\n\n constructor(\n private _org: OrganisationService,\n private _users: UsersService,\n @Inject(MAT_DIALOG_DATA) private _data: RequirementDetailsModalData,\n private _settings: SettingsService,\n ) {\n this.isConcierge = _settings.concierge;\n this.frontend = _settings.frontend;\n }\n\n public ngOnInit(): void {\n const note_list = this._data.notes_field.value\n .filter((note: BookingNote) => note.type === 'equipment');\n this.notes = note_list.reduce((map, note) => {\n map[note.space] = note.message;\n return map;\n }, {});\n this.codes = { ...this._data.codes_field.value };\n this.head_counts = { ...this._data.head_counts_field.value };\n this.generateFormFields();\n }\n\n public submit(): void {\n // Get the email of the first space\n const firstSpaceEmail = this.space_list[0].email;\n\n // Copy values from the first space's form controls to all other spaces\n this.space_list.forEach(space => {\n if (space.email !== firstSpaceEmail) {\n this.form[space.email].controls.notes.setValue(this.form[firstSpaceEmail].controls.notes.value);\n this.form[space.email].controls.code.setValue(this.form[firstSpaceEmail].controls.code.value);\n this.form[space.email].controls.head_count.setValue(this.form[firstSpaceEmail].controls.head_count.value);\n }\n });\n\n this.space_list.forEach(space => this.form[space.email].markAllAsTouched());\n /* istanbul ignore else */\n if (this.is_valid) {\n // Update notes \n const notes = this._data.notes_field.value\n .filter((note: BookingNote) => note.type !== 'equipment');\n const new_notes = this.space_list.map(space => ({\n author: this._users.current.name,\n type: 'equipment',\n message: this.form[space.email].controls.notes.value.trim(),\n space: space.email,\n date: DateNow(new Date()).ms\n } as BookingNote));\n this._data.notes_field.setValue(notes.concat(new_notes).filter(note => note.message));\n this._data.codes_field.setValue(this.space_list.reduce((map, space) => {\n map[space.email] = this.form[space.email].controls.code.value;\n return map;\n }, {}));\n this._data.head_counts_field.setValue(this.space_list.reduce((map, space) => {\n map[space.email] = this.form[space.email].controls.head_count.value;\n return map;\n }, {}));\n this.event.emit({ reason: 'done' });\n } else {\n this._content_el.nativeElement.scrollTo({\n top: this._content_el.nativeElement.scrollHeight,\n left: 0,\n behavior: 'smooth'\n });\n }\n }\n\n /** Generate form fields for each space */\n // private generateFormFields(): void {\n // for (const space of this.space_list) {\n // const building = this._org.buildings.find(\n // bld => bld.id === space[0]?.level.building_id\n // );\n // // this.needs_charge_code[space.email] = space?.settings?.equipment_code || building?.required?.equipment_code || false;\n // const { filters, settings } = space;\n // const roomBasedEqCode = filters?.equipment_code || settings?.equipment_code;\n // const officeBasedEqCode = building?.required?.equipment_code;\n // this.needs_charge_code[space.email] = roomBasedEqCode !== undefined ? roomBasedEqCode : officeBasedEqCode !== undefined ? officeBasedEqCode: false;\n\n // this.form[space.email] = new FormGroup({\n // notes: new FormControl(this.notes[space.email] || ''),\n // code: new FormControl(\n // this.codes[space.email] || '',\n // this.needs_charge_code[space.email] ?\n // [Validators.pattern(/^[a-zA-Z0-9]*$/), Validators.minLength(4), Validators.required] : [Validators.minLength(4), Validators.pattern(/^[a-zA-Z0-9]*$/)]\n // ),\n // head_count: new FormControl(this.head_counts[space.email] || '', [Validators.required, Validators.pattern(/^(?!0+$)/)])\n // });\n // }\n // }\n \n private generateFormFields(): void {\n // Initialize a variable to determine if any space needs a charge code\n let anySpaceNeedsChargeCode = false;\n \n // First pass to determine if any space needs a charge code\n for (const space of this.space_list) {\n const building = this._org.buildings.find(\n bld => bld.id === space?.level.building_id\n );\n const { filters, settings } = space;\n const roomBasedEqCode = filters?.equipment_code;\n const officeBasedEqCode = building?.required?.equipment_code;\n \n // this.needs_charge_code[space.email] = space?.settings?.equipment_code || building?.required?.equipment_code || false;\n if (roomBasedEqCode || officeBasedEqCode) {\n anySpaceNeedsChargeCode = true;\n this.needs_charge_code = true;\n break;\n } else{\n this.needs_charge_code = false;\n }\n }\n \n // Second pass to create form groups with the determined charge code requirement.\n // We show only the first space, but if one of the selected spaces needs a mandatory charge code,\n // then all spaces need a mandatory charge code\n for (const space of this.space_list) { \n this.form[space.email] = new FormGroup({\n notes: new FormControl(this.notes[space.email] || ''),\n code: new FormControl(\n this.codes[space.email] || '',\n anySpaceNeedsChargeCode ?\n [Validators.pattern(/^[a-zA-Z0-9]*$/), Validators.minLength(4), Validators.required] :\n [Validators.minLength(4), Validators.pattern(/^[a-zA-Z0-9]*$/)]\n ),\n head_count: new FormControl(this.head_counts[space.email] || '', [Validators.required, Validators.pattern(/^(?!0+$)/)])\n });\n }\n }\n}\n","
\n
\n \n \n \n \n {{\n this.space_list.length > 1 ? this.space_list.length + ' spaces selected' :\n this.space_list[0]?.local_name || 'No spaces selected'\n }}\n \n \n \n \n
\n \n
\n\n
\n
\n \n
\n {{\n has_recurrence && !isConcierge\n ? 'To update headcount information, add equipment or catering, please edit individual meeting occurences in My Day'\n : \"Would you like to add equipment to your booking's spaces?\"\n }}\n
\n
\n
\n
\n \n \n \n \n
\n
\n \n \n Charge Code*\n \n \n \n \n Note: Your booking will be confirmed before you are\n charged.\n \n \n {{ invalid_charge_code ? 'Valid Charge Code Required' : 'Charge Code is required'}}\n \n \n
\n
\n \n Headcount Estimate*\n \n \n \n \n Note: This estimate is used to calculate catering and/or\n assign rooms. Please keep updated of any changes.\n \n \n Headcount Estimate is required\n \n \n
\n \n
\n
\n
\n\n
\n \n
\n
\n","import {\n Component,\n EventEmitter,\n Inject,\n OnInit,\n Output,\n} from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport {\n BehaviorSubject,\n Observable,\n of,\n Subject\n} from 'rxjs';\nimport {\n catchError,\n debounceTime,\n distinctUntilChanged,\n first,\n map,\n switchMap,\n take,\n withLatestFrom\n} from 'rxjs/operators';\nimport {\n Building,\n mapBuildingToSelectOption,\n mapCityToAllSelectOption,\n OrganisationService,\n SettingsService,\n Space,\n SpaceBookingRuleOptions,\n SpacesService,\n toggleSelectedByGroup,\n User,\n UsersService\n} from '@mckinsey-converge/data-common';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n DialogEvent,\n HashMap,\n Identity,\n unique\n} from '@mckinsey-converge/base';\nimport { NoCateringModalComponent } from '../no-catering-modal/no-catering-modal.component'\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { SelectOption } from '@mckinsey-converge/ui';\n\nexport interface SpaceSelectModalData {\n /** List of selected spaces */\n spaces: Space[];\n /** Start time for availability of spaces */\n dateTz: DateTZ;\n /** Duration of the availability block to look for */\n duration: number;\n /** Host of the booking being made */\n host: User;\n /** Whether multiple spaces can be selected */\n multiple: boolean;\n /** Force zone ids */\n zone_ids?: string;\n /** Booking needs catering */\n needsCatering?: boolean,\n}\n\n@Component({\n selector: 'a-space-select-modal',\n templateUrl: './space-select-modal.component.html',\n styleUrls: ['./space-select-modal.component.scss']\n})\nexport class SpaceSelectModalComponent extends BaseDirective implements OnInit {\n /** Emitter for user action on the modal */\n @Output() public event = new EventEmitter();\n /** Whether space list is being loaded */\n public loading: boolean;\n /** List of available spaces to select from */\n public spaces: Space[] = [];\n /** Active building to filter spaces on */\n public active_building: Building;\n /** Active building to filter spaces on */\n public active_type: Identity;\n /** List of items from an API search */\n public search_results$: Observable;\n /** Subject holding the value of the search */\n public readonly change$ = new Subject();\n /** List of currently selected spaces */\n public selected_spaces: Space[] = [];\n /** Mapping as to whether a space is by request */\n public request_map: HashMap = {};\n /** Whether selected list should be shown on mobile */\n public show_list: boolean;\n\n /** host to load (only in staff) **/\n public host: User;\n\n /** List of available buildings */\n public types: Identity[] = [];\n\n public isConcierge: boolean;\n public frontend: string;\n\n /** List of available buildings */\n public get buildings(): Building[] {\n return this._org.buildings;\n }\n\n /** Whether multiple spaces can be selected */\n public get multiple(): boolean {\n return false;\n }\n\n public get has_zone(): boolean {\n return !!this._data.zone_ids;\n }\n\n public formGroup = new FormGroup({\n location: new FormControl([]),\n });\n\n public options = new BehaviorSubject[]>([]);\n\n public selectedOptions = new BehaviorSubject[]>([]);\n\n\n public noCateringDialogRef: MatDialogRef;\n\n /** List of zones to filter the spaces on */\n public zone_ids: string[] = [];\n\n\n public get initialBuildingIds(): string[] {\n return this._org.building ? [this._org.building.id] : [];\n }\n\n public savedSelection\n\n constructor(\n private _org: OrganisationService,\n private _users: UsersService,\n private _spaces: SpacesService,\n private _settings: SettingsService,\n private _dialog: MatDialog,\n @Inject(MAT_DIALOG_DATA) private _data: SpaceSelectModalData\n ) {\n super();\n this.isConcierge = _settings.concierge;\n this.frontend = _settings.frontend;\n }\n\n public ngOnInit(): void {\n this._spaces.initialised.pipe(first((_) => _)).subscribe(() => {\n let request_id = 0;\n // Listen for input changes\n this.search_results$ = this.change$.pipe(\n debounceTime(400),\n distinctUntilChanged(),\n switchMap((bld) => {\n this.loading = true;\n const zone_ids: string[] = [];\n /* istanbul ignore else */\n if (this.active_building) {\n zone_ids.push(this.active_building.id);\n }\n\n if (bld?.includes('|')) {\n bld = this.savedSelection\n }\n\n const id = request_id;\n return this._spaces.available({\n zone_ids: bld?.length ? bld : this._data.spaces[0].building.id || zone_ids.join(','),\n dateTz: this._data.dateTz,\n duration: this._data.duration\n }).then(async (list) => ({ id, list }));\n }),\n catchError((_) => of({ id: request_id, list: [], error: _ })),\n map((resp: { id: number, list: Space[] }) => {\n this.loading = false;\n const filtered_list = resp.list.filter((space: Space) => {\n // if concierge skip rules check.\n if (this._settings.concierge) {\n return (this.active_type && this.active_type.id ? space.zones.includes(`${this.active_type.id}`) : true) &&\n !this.selected_spaces.find((s) => s.id === space.id);\n }\n\n const rules = space.rulesFor({\n dateTz: this._data.dateTz,\n duration: this._data.duration,\n host: this.host || this._data.host\n });\n return (\n rules.hide !== true &&\n (this.active_type && this.active_type.id\n ? space.zones.includes(`${this.active_type.id}`)\n : true) &&\n !this.selected_spaces.find((_space) => _space.id === space.id)\n );\n });\n return resp.id === request_id ? filtered_list : this.spaces;\n })\n );\n // Process API results\n this.subscription(\n 'search_results',\n this.search_results$.subscribe((list) => {\n this.spaces = list.filter((space) => {\n if (!space.available) {\n return false;\n }\n for (const zone of this.zone_ids) {\n if (space.zones.includes(zone)) {\n return true;\n }\n }\n return !this.zone_ids.length;\n });\n this.spaces.sort((a, b) => this.sort(a, b));\n if (!this.selectedOptions.value.length) {\n this.setDefaultBuilding()\n }\n })\n );\n this.active_building = this._data.spaces?.length\n ? this._org.buildings.find((i) => i.id === this._data.spaces[0].level.building_id)\n : this._org.building;\n this.types = [{ id: '', name: 'Any Space Type' } as any].concat(\n this._org.space_types || []\n );\n this.active_type = this.types[0];\n this.change$.next('');\n });\n\n this.subscription('buildings', this._org.listen('buildings').subscribe((bld_list) => {\n const city = this._org.building.city\n const timezone = this._org.building.timezone\n const grouped_by_city = {\n key: { name: city, timezone },\n value: bld_list?.filter((bld) => bld.city === city) || []\n }\n const city_buildings = grouped_by_city.value.map(\n (bld) => mapBuildingToSelectOption(grouped_by_city.key.name, bld)\n )\n const buildings = [\n mapCityToAllSelectOption(grouped_by_city.key),\n ...city_buildings\n ]\n this.options.next(buildings)\n }));\n\n }\n\n /** Add space to selected list */\n public addSpace(space: Space) {\n this.selected_spaces.push(space);\n this.selected_spaces = unique(this.selected_spaces, 'id');\n }\n\n /** Remove space from selected list */\n public removeSpace(space: Space) {\n this.selected_spaces = this.selected_spaces.filter((a_space) => a_space.id !== space.id);\n }\n\n /** Emit current state of the selected list */\n public save(list: Space[]) {\n if (!this._data.needsCatering) {\n // No catering order to warn about\n this.event.emit({ reason: 'done', metadata: list });\n return;\n }\n // Check if the room has catering \n if (list[0].has_catering) {\n this.event.emit({ reason: 'done', metadata: list });\n return;\n }\n // If not warn that the room doesn't have catering\n this.noCateringDialogRef = this._dialog.open(NoCateringModalComponent, {\n panelClass: 'mck-modal-mini',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n this.subscription(\n 'no-catering-modal',\n this.noCateringDialogRef.componentInstance.event.subscribe((event) => {\n if (event.reason === 'done') {\n this.event.emit({ reason: 'done', metadata: list });\n }\n if (event.reason === 'close') {\n this.event.emit({ reason: 'close' });\n }\n })\n );\n }\n\n private update() {\n const map = {};\n const options: SpaceBookingRuleOptions = {\n dateTz: this._data.dateTz,\n duration: this._data.duration,\n host: this._data.host\n };\n this.selected_spaces.forEach((space) => (map[space.id] = space.byRequest(options)));\n this.spaces.forEach((space) => (map[space.id] = space.byRequest(options)));\n this.request_map = map;\n }\n\n public setDefaultBuilding() {\n const defaultBld = this.options.value.filter(opt => opt.value === this._org.building.id)\n this.selectedOptions.next(defaultBld)\n }\n\n /**\n * Compare two spaces to determine order\n * @param space_a\n * @param space_b\n */\n public sort(space_a: Space, space_b: Space) {\n const bld = this._org.buildings.find((bld) => space_a.zones.includes(bld.id)) || { name: '', sort_order: [] };\n const bld_b = this._org.buildings.find((bld) => space_b.zones.includes(bld.id));\n if (bld && bld !== bld_b) {\n return bld.name.localeCompare(bld_b?.name);\n }\n const sort_order = [...bld.sort_order].reverse();\n for (const zone_id of sort_order) {\n if (zone_id === '*') {\n continue;\n }\n const a_has_zone = space_a.zones.indexOf(zone_id) >= 0;\n const b_has_zone = space_b.zones.indexOf(zone_id) >= 0;\n if (a_has_zone && !b_has_zone) {\n return 1;\n } else if (b_has_zone && !a_has_zone) {\n return -1;\n }\n }\n return space_a.name.localeCompare(space_b.name);\n }\n\n public toggle(option: SelectOption) {\n // update the selected value\n this.selectedOptions.pipe(\n take(1),\n withLatestFrom(this.options),\n map(([selectedOptions, options]) => {\n return toggleSelectedByGroup(options, selectedOptions, option);\n })\n ).subscribe(next => {\n const formData = this.formGroup.value;\n this.formGroup.setValue({\n location: formData.location,\n });\n this.selectedOptions.next(next);\n this.savedSelection = next.map((bld) => bld.value)\n\n });\n }\n\n /**\n * Update the selected space list\n * @param space Space to add/toggle in the selected list\n */\n public selectSpace(space: Space) {\n const list = this.spaces;\n if (list.find((item) => item.id === space.id)) {\n this.spaces = list.filter((item) => item.id !== space.id);\n } else {\n this.spaces = [space];\n }\n }\n\n public clearList() {\n this.spaces = []\n this.savedSelection = []\n }\n\n public triggerSearch = () => {\n if (this.savedSelection.length) {\n this.change$.next(this.savedSelection)\n } else {\n this.spaces = []\n }\n }\n\n}\n","
\n
Select meeting space{{ multiple ? 's' : '' }}
\n \n
\n\n
\n
\n \n \n 1\">Type\n 1\">\n \n \n {{ type?.name }}\n \n \n \n \n
\n \n \n
\n
\n
{{ space.local_name }}
\n
{{ space.level.name }}
\n
\n
\n \n
\n
\n \n
{{ space.capacity || '0' }}
\n
\n
\n \n {{ (!isConcierge && request_map[space.id]) ? 'Request' : 'Select' }}\n \n
\n
\n
\n
\n
\n
\n
\n

Selected spaces

\n
\n \n
\n \n \n
\n
\n
{{ space.name }}
\n
{{ space.level.name }}
\n
\n
\n \n
{{ space.capacity || '0' }}
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n \n
\n \n
\n \n
\n
\n\n
\n
\n \n
\n
Loading available spaces...
\n
\n
\n\n
\n
\n \n
\n
No results available, please select another office.
\n
\n
\n\n
\n
\n \n
\n
No selected spaces
\n
\n
\n","import { Component, Input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\n@Component({\n selector: 'user-form',\n templateUrl: './user-form.component.html',\n styleUrls: ['./user-form.component.scss']\n})\nexport class UserFormComponent {\n /** Group of form fields used for creating the system */\n @Input() public form: FormGroup;\n}\n","
\n
\n
\n First Name:\n \n \n First name is required\n \n \n
\n
\n Last Name:\n \n \n Last name is required\n \n
\n
\n Email:\n \n \n A valid email is required\n \n
\n
\n
\n","export * from './lib/legacy-ui.module';\nexport * from './lib/custom-fields';\nexport * from './lib/icon/icon.component';\nexport * from './lib/feedback/feedback.component';\nexport * from './lib/action-icon/action-icon.component';\nexport * from './lib/user-avatar/user-avatar.component';\nexport * from './lib/bookings/catering/item/item.component';\nexport * from './lib/cng-search-bar/cng-search-bar.component';\n","import { Component, OnInit, Input } from '@angular/core';\nimport { ApplicationIcon } from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'action-icon',\n templateUrl: './action-icon.component.html',\n styleUrls: ['./action-icon.component.scss']\n})\nexport class ActionIconComponent implements OnInit {\n /** Icon to display */\n @Input() public icon: ApplicationIcon;\n /** Whether action is being processed */\n @Input() public loading: boolean;\n /** State of the action */\n @Input() public state: 'success' | 'error' | '' = '';\n\n constructor() {}\n\n ngOnInit(): void {}\n}\n","
\n \n
\n \n
\n
\n \n
\n
\n","import {\n Component,\n Input,\n OnChanges,\n SimpleChanges\n} from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { FormControl } from '@angular/forms';\n\nimport {\n ApplicationService,\n CateringCategory,\n CateringItem,\n SettingsService\n} from '@mckinsey-converge/data-common';\nimport { ANIMATION_SHOW_CONTRACT_EXPAND } from '@mckinsey-converge/animations';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { PackageOptionsModalComponent } from '../package-options-modal/package-options-modal.component';\n\nfunction hasSelectionRequirements(category: CateringCategory) {\n return (\n category.must_select < category.items.length ||\n (category.must_select === category.items.length &&\n category.items.find((item: any) => item.items && item.must_select < item.items.length))\n );\n}\n\nfunction getActiveList(category: CateringCategory) {\n const items = category.items || [];\n let list = items.filter((item) => item.amount > 0).map((item) => item.id);\n for (const item of items) {\n if ((item as any).items && (item as any).items.length) {\n list = list.concat(getActiveList(item as any));\n }\n }\n return list;\n}\n\n@Component({\n selector: 'a-catering-menu-item',\n templateUrl: './item.component.html',\n styleUrls: ['./item.component.scss'],\n animations: [ANIMATION_SHOW_CONTRACT_EXPAND]\n})\nexport class CateringMenuItemComponent extends BaseDirective implements OnChanges {\n /** Whether item is a child of another */\n @Input() public subitem: boolean;\n /** Item to display */\n @Input() public item: CateringCategory;\n /** Field for storing items */\n @Input() public field: FormControl;\n /** Current symbol for the selected space */\n @Input() public symbol: string;\n /** Whether item should be disabled if not available anytime */\n @Input() public disabled: boolean;\n /** Whether to show smaller version of component */\n @Input() public compact: boolean;\n /** Whether to show children items */\n public show_children: boolean;\n public initial_state = null;\n\n /** List of contents of the package */\n public get contents(): string {\n return this.item.items\n ? this.item.items.reduce((list, item) => {\n /* istanbul ignore else */\n if (list) {\n list += '\\n\\n';\n }\n return (list += `${item.name}${\n (item as any).items\n ? (item as any).items.reduce(\n (a_list, an_item) =>\n (a_list += `\\n ${an_item.amount ? '✓' : '•'} ${an_item.name} `),\n ''\n )\n : ''\n } ${item.amount ? '✓' : ''}`);\n }, '')\n : '';\n }\n\n constructor(private _service: ApplicationService, private _dialog: MatDialog,\n public settings: SettingsService) {\n super();\n // on the item selection set the revert/close state\n this.initial_state = this.item;\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n /* istanbul ignore else */\n if (changes.field && this.field) {\n const list = this.field.value;\n // check the category\n let item = list.find((an_cat) => an_cat.id === this.item.id);\n if (item) {\n // update the category level amount\n this.item.setAmount(item ? item.amount : 0);\n } else {\n // find a category item\n for (var cat of list) {\n item = cat?.items.find((an_item) => an_item.id === this.item.id);\n if (item) {\n this.item.setAmount(item ? item.amount : 0);\n break;\n }\n }; \n } \n\n // On the confirm catering order modal set the revert/close state\n if (!this.initial_state && this.item.amount) {\n this.initial_state = this.item;\n }\n\n this.subscription(\n 'field_change',\n this.field.valueChanges.subscribe((list) => {\n const item = list.find((an_item) => an_item.id === this.item.id);\n this.item.setAmount(item ? item.amount : 0);\n this.updatePackageSelection();\n })\n );\n }\n }\n\n /**\n * Update the amount of the item in the order\n * @param value New amount\n */\n public updateAmount(value: number) {\n /* istanbul ignore else */\n if (this.field) {\n const list: CateringItem[] = this.field.value;\n const item = list.find((an_item) => an_item.id === this.item.id);\n if (item) {\n this.item.setAmount(value);\n item.setAmount(value);\n // MCK-1550 fix\n const price = this.item.price;\n item.setPrice(price)\n } else {\n const amount = this.item.amount;\n this.item.setAmount(value);\n if (\n this.item.package &&\n amount < value &&\n this.item.items &&\n this.item.items.length &&\n hasSelectionRequirements(this.item)\n ) {\n this.selectPackageOptions().then(\n (confirmed_item) => {\n list.push(new CateringCategory(confirmed_item));\n this.field.setValue(list.filter((an_item) => an_item.amount));\n },\n () => {\n this.item.setAmount(999);\n this.timeout('amount', () => this.item.setAmount(0), 5);\n this._service.notifyWarn(\n 'Package options not selected. Item removed from order'\n );\n }\n );\n } else {\n list.push(new CateringItem(this.item));\n }\n }\n this.field.setValue(list.filter((an_item) => an_item.amount));\n }\n }\n\n public updatePackageSelection() {\n const cart_item = this.field.value.find((item) => item.id === this.item.id);\n if (cart_item) {\n const active_items = getActiveList(cart_item);\n this.timeout(\n 'update_package',\n () => {\n this.item.items.forEach((item) => {\n item.setAmount(active_items.includes(item.id) ? 1 : 0);\n if ((item as any).items) {\n (item as any).items.forEach((item) => {\n item.setAmount(active_items.includes(item.id) ? 1 : 0);\n });\n }\n });\n },\n 5\n );\n }\n }\n\n /** Reselect package options */\n public updatePackageOptions(): void {\n let updatedList: CateringItem[] = [];\n this.selectPackageOptions().then(\n (confirmed_item) => {\n // Update the existing category package\n this.field.value.forEach((category: CateringCategory) => {\n if (category.id === confirmed_item.id) {\n updatedList.push(new CateringCategory(confirmed_item))\n } else {\n updatedList.push(category)\n }\n })\n this.field.setValue(updatedList.filter((an_item) => an_item.amount));\n },\n () => {\n this.item.setAmount(999);\n this.timeout('amount', () => this.item.setAmount(0), 5);\n this._service.notifyWarn(\n 'Package options not selected. Item removed from order'\n );\n }\n );\n }\n\n /**\n * Open modal for user to select package options\n */\n private selectPackageOptions(): Promise {\n return new Promise((resolve, reject) => {\n const ref = this._dialog.open(PackageOptionsModalComponent, {\n maxWidth: '95vw',\n data: {\n item: new CateringCategory(this.item)\n },\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n let done = false;\n ref.componentInstance.event.subscribe((event) => {\n /* istanbul ignore else */\n if (event.reason === 'done') {\n done = true;\n resolve(ref.componentInstance.item);\n this.initial_state = this.item;\n ref.close();\n }\n });\n ref.afterClosed().subscribe(() => {\n /* istanbul ignore else */\n if (!done) {\n if (this.initial_state) {\n resolve(this.initial_state);\n } else {\n reject();\n }\n }\n });\n });\n }\n}\n","\n \n
\n
{{ item.name }}
\n
{{ item.package ? '[Package] ' : '' }}{{ item.description }}
\n
\n
\n {{ item.unit_price / 100 | currency: symbol }}\n
\n \n { item.availableItems.length, plural, =1 { Contains {{ item.availableItems.length }} item } other {\n Contains {{ item.availableItems.length }} items } }\n
\n 0\"\n [matTooltip]=\"contents\"\n >\n {{ item.must_select }}\n \n Selected\n \n
\n 0\"\n (click)=\"updatePackageOptions()\"\n i18n=\"Catering order item options change action\"\n >\n Customise\n \n \n \n
\n {{ item.unit_price / 100 | currency: symbol }}\n
\n \n \n \n \n\n
\n \n
\n","import {\n Component,\n EventEmitter,\n Inject,\n Output\n} from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\n\nimport {\n DialogEvent,\n HashMap\n} from '@mckinsey-converge/base';\nimport {\n CateringCategory,\n CateringItem\n} from '@mckinsey-converge/data-common';\n\nexport interface PackageOptionsModalData {\n item: CateringCategory;\n}\n\nexport function checkItemRequirements(category: CateringCategory): boolean {\n const items = category.items || [];\n return category.must_select >= items.length\n ? items.reduce((valid, item) => valid && checkItemRequirements(item as any), true)\n : items.reduce((amount, item) => amount + (item.amount ? 1 : 0), 0) ===\n category.must_select;\n}\n\nexport function getActiveItems(category: CateringCategory): HashMap {\n let map = {};\n if (category.items) {\n const item = category.items.find(item => item.amount > 0);\n if (item) {\n map[category.id] = item.id;\n }\n category.items.forEach(item => map = { ...map, ...getActiveItems(item as any) });\n }\n return map;\n}\n\n@Component({\n selector: 'a-package-options-modal',\n templateUrl: './package-options-modal.component.html',\n styleUrls: ['./package-options-modal.component.scss']\n})\nexport class PackageOptionsModalComponent {\n /** Emitter for user actions on the modal */\n @Output() public event = new EventEmitter();\n\n /** Item to select options for */\n public get item(): CateringCategory {\n return this._data.item;\n }\n\n /** Whether package requirements have been met */\n public get requirements_met(): boolean {\n return checkItemRequirements(this.item);\n }\n\n public get active_items(): HashMap {\n return getActiveItems(this.item);\n }\n\n constructor(@Inject(MAT_DIALOG_DATA) private _data: PackageOptionsModalData) {\n }\n\n /**\n * Update the list of selected items\n */\n public updateAmount(a_package: CateringCategory, option: CateringItem, state: boolean) {\n if (state) {\n const needed = a_package.must_select;\n const active = a_package.items.filter(an_item => an_item.amount > 0).length;\n if (active >= needed) {\n const item = a_package.items.find(an_item => an_item.amount > 0);\n item.setAmount(0);\n }\n option.setAmount(1);\n } else {\n option.setAmount(0);\n }\n }\n}\n","
\n

Package Options

\n \n
\n\n
\n \n
\n
\n\n
\n \n
\n
\n\n \n \n
\n \n 1\"\n [checked]=\"!!option.amount\"\n (change)=\"updateAmount(package, option, $event.checked)\"\n >\n {{ option.name }}\n \n \n {{ option.name }}\n \n \n = package.items.length || option.must_select\">\n {{ option.name }}\n \n \n
\n
\n
\n
\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\n\n// Interface to define the structure of the configuration object for the search bar\nexport interface SearchBarConfig {\n placeholder?: string;\n totalFoundItem?: number;\n showSrchWarning?: boolean;\n}\n\n@Component({\n selector: 'cng-search-bar',\n templateUrl: './cng-search-bar.component.html',\n styleUrls: ['./cmg-search-bar.component.scss']\n})\nexport class CngSearchBarComponent implements OnChanges {\n // Input property to accept configuration for the search bar\n @Input() config: SearchBarConfig = {\n placeholder: 'Search ...',\n totalFoundItem: 0,\n showSrchWarning: false\n };\n\n // Output event emitter to emit search strings to parent components\n @Output() search = new EventEmitter();\n\n // Local variable to store the search string entered by the user\n searchStr: string = '';\n\n // Lifecycle hook that is called when any data-bound property of a directive changes\n ngOnChanges(changes: SimpleChanges): void {\n // Check if the config property has changed\n if (changes.config) {\n const configChanges = changes.config.currentValue;\n // Update the config with new values or fallback to defaults\n this.config = {\n placeholder: configChanges.placeholder || 'Search ...',\n totalFoundItem: configChanges.totalFoundItem || 0,\n showSrchWarning: configChanges.showSrchWarning || false\n };\n }\n }\n\n // Method to handle the search action\n onSearch(value: string): void {\n // Emit the search string if it's not empty\n if (value) {\n this.search.emit(value);\n } else {\n this.clearSearch();\n }\n }\n\n // Method to clear the search input and reset related configurations\n clearSearch(box: HTMLInputElement | null = null): void {\n this.searchStr = '';\n if (box) {\n box.value = '';\n }\n this.config.showSrchWarning = false;\n this.config.totalFoundItem = 0;\n this.search.emit('');\n }\n\n // Method to reset the search-related warnings and item count\n resetSearch(): void {\n this.config.showSrchWarning = false;\n this.config.totalFoundItem = 0;\n }\n}\n","
\n \n \n
{{ config.totalFoundItem }}
\n \n \n \n
\n \n No search found!\n
\n
\n ","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\n\n@Directive({\n selector: '[hover-class]'\n})\nexport class HoverClassDirective {\n @Input('hover-class') hoverClass: string;\n\n constructor(private elementRef: ElementRef) {}\n\n @HostListener('mouseenter') onMouseEnter() {\n this.update('add');\n }\n\n @HostListener('mouseleave') onMouseLeave() {\n this.update('remove');\n }\n\n @HostListener('blur') onBlur() {\n this.update('remove');\n }\n\n private update(action: string): void {\n this.hoverClass.split(' ').forEach(item => this.elementRef.nativeElement.classList[action](item));\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'an-action-field',\n templateUrl: './action-field.component.html',\n styleUrls: ['./action-field.component.scss']\n})\nexport class ActionFieldComponent extends BaseDirective {\n /** Name of the field */\n @Input() public name: string;\n /** Value to display on the field */\n @Input() public placeholder: string;\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Emitter for user interaction events */\n @Output('onAction') public on_action = new EventEmitter();\n /** Whether to show tooltip */\n public show_tooltip = false;\n\n /**\n * Emit that the user has performed an action on the field\n */\n public performAction() {\n this.show_tooltip = !this.show_tooltip;\n this.on_action.emit();\n }\n}\n","\n
{{ placeholder }}
\n
\n \n
\n\n","import { Component, forwardRef, Input } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'a-counter',\n templateUrl: './counter.component.html',\n styleUrls: ['./counter.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n /* istanbul ignore next */\n useExisting: forwardRef(() => CounterComponent),\n multi: true,\n },\n ],\n})\nexport class CounterComponent implements ControlValueAccessor {\n /** Maximum amount for the counter */\n @Input() public max: number = 10;\n /** Minimum amount for the counter */\n @Input() public min: number = 0;\n\n @Input() public useInput = false;\n\n /** Current value of the counter */\n public value: number;\n public previous_value: number = 0;\n /** Whether shift key is being held by the user */\n public shift_key: boolean;\n /** Whether control key is being held by the user */\n public ctrl_key: boolean;\n\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n /**\n * Add the `step` to the current value\n */\n public add() {\n if (!this.value) {\n this.value = this.min || 0;\n }\n const step = this.ctrl_key ? 100 : this.shift_key ? 10 : 1;\n this.value += step;\n if (this.value > this.max) {\n this.value = this.max || 10;\n }\n this.setValue(this.value);\n }\n\n /** Remove the `step` from the current value */\n public remove() {\n if (!this.value) {\n this.value = this.min || 0;\n }\n const step = this.ctrl_key ? 100 : this.shift_key ? 10 : 1;\n this.value -= step;\n if (this.value < this.min) {\n this.value = this.min || 0;\n }\n this.setValue(this.value);\n }\n\n public handleTimeout = null;\n\n public onInputChange(new_value: string) {\n if (this.handleTimeout) {\n clearTimeout(this.handleTimeout);\n this.handleTimeout = null;\n }\n this.handleTimeout = setTimeout(() => this.changeInput(new_value), 500);\n }\n\n public changeInput(new_value: string) {\n let value = Number(new_value);\n if (isNaN(value)) {\n value = this.previous_value;\n }\n if (value < this.min) {\n value = this.min || 0;\n }\n if (value > this.max) {\n value = this.max || 10;\n }\n this.setValue(value);\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: number): void {\n this.previous_value = new_value;\n this.value = new_value;\n /* istanbul ignore else */\n if (this._onChange) {\n this._onChange(new_value);\n }\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: number) {\n this.value = value;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n}\n","\n \n \n
\n {{value || '0'}}\n
\n \n\n","import { Component, OnInit, forwardRef, Input, ViewChild, Output, EventEmitter } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport { MatMenuTrigger } from '@angular/material/menu';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n@Component({\n selector: 'a-date-field',\n templateUrl: './date-field.component.html',\n styleUrls: ['./date-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateFieldComponent),\n multi: true\n }\n ]\n})\nexport class DateFieldComponent extends BaseDirective implements OnInit, ControlValueAccessor {\n /** Earliest date available the user is allowed to pick */\n @Input('from') public _from: number = DateNow(new Date()).ms;\n /** Latest date available the user is allowed to pick */\n @Input('to') public _to: number;\n /** Position of the tooltip */\n @Input() public position: 'right' | 'left' = 'right';\n /** Offset of the tooltip */\n @Input() public offset: 'top' | 'bottom' = 'bottom';\n /** Whether form control is disabled */\n @Input() public disabled: boolean;\n /** Whether form control is invalid, touched and contains errors */\n @Input() public error?: boolean;\n /** Optional event emitter for changes */\n @Output() public onChange = new EventEmitter();\n /** Whether to show the calendar tooltip */\n public show_tooltip: boolean;\n /** Currently selected date */\n public date: number;\n\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n @ViewChild(MatMenuTrigger, { static: true }) private _trigger: MatMenuTrigger;\n\n /** First allowed date on the calendar */\n public get from(): number {\n return this._from || DateNow(new Date()).startOfValue('day').ms;\n }\n /** Current date value */\n public get until(): number {\n return this._to || DateNow(new Date()).endOfValue('day').addValue({ years: 1 }).ms;\n }\n /** Display value for the current date */\n public get date_string(): string {\n // R--- Needs TZ aware inputs\n const date = new DateTZ({date: this.date})\n return date.formatDate('dd MMM yyyy');\n }\n\n /** Whether date picker is open */\n public get is_open(): boolean {\n return this._trigger.menuOpen;\n }\n\n public ngOnInit() {\n this.date = DateNow(new Date()).ms;\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: number) {\n // Keep hours and minutes of the old date\n const old_date = new DateTZ({date: this.date });\n const new_d = new DateTZ({date: new_value})\n let new_date = new_d\n .setValue({ hour: old_date.dateHour, minute: old_date.minutes })\n .ms;\n // Check that new date is before from\n if (new_date < this.from) {\n new_date = this.from;\n }\n this.date = new_date;\n if (this._onChange) {\n this._onChange(new_date);\n this.onChange.emit(new_date);\n }\n this.show_tooltip = false;\n }\n\n /* istanbul ignore next */\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: number) {\n this.date = value;\n this.show_tooltip = false;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /** Set the state of the tooltip to closed after delay */\n public closeDatePicker() {\n this._trigger.closeMenu();\n }\n\n /** Set the state of the tooltip to closed after delay */\n public openDatePicker() {\n this._trigger.openMenu();\n }\n}\n","\n
{{ date_string }}
\n
\n \n
\n\n\n
\n \n
\n
\n","import {\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\n\nimport {\n humaniseDuration,\n Identity,\n timeFormatString\n} from '@mckinsey-converge/base';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\n\n@Component({\n selector: 'a-duration-field',\n templateUrl: './duration-field.component.html',\n styleUrls: ['./duration-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DurationFieldComponent),\n multi: true\n }\n ]\n})\nexport class DurationFieldComponent extends BaseDirective\n implements OnInit, OnChanges, ControlValueAccessor {\n /** Maximum duration option available */\n @Input() public max: number = 240;\n /** Minimum duration option available */\n @Input() public min: number = 15;\n /** Step value between options */\n @Input() public step: number = 15;\n /** Reference time for displaying next to durations */\n @Input() public time: number;\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Special case prepopulation i.e. out of step options */\n @Input() public specialPreprops: Array = [];\n /** Whether form all_day is enabled. */\n @Input() public all_day: boolean = false;\n\n public duration: number = 60;\n /** List of available duration options */\n public duration_options: Identity[];\n\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n public ngOnInit(): void {\n this.duration_options = this.generateDurationOptions(this.max, this.min, this.step, this.all_day);\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n /* istanbul ignore else */\n if (changes.max || changes.min || changes.step || changes.time || changes.all_day) {\n this.duration_options = this.generateDurationOptions(this.max, this.min, this.step, this.all_day);\n }\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: number): void {\n this.duration = new_value;\n /* istanbul ignore else */\n if (this._onChange) {\n this._onChange(+new_value);\n }\n }\n\n /* istanbul ignore next */\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: number) {\n this.duration = value;\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n\n private generateDurationOptions(max: number, min: number, step: number, all_day: boolean = false): Identity[] {\n const blocks: Identity[] = [];\n let time = min;\n // R--- Change input to dateTz\n let date = this.time ? new DateTZ({date: this.time}) : null;\n\n // Add special case for 10min duration/prepropulation\n for (const option of this.specialPreprops) {\n blocks.push({\n id: option,\n name: date\n ? `${date.addValue({ minutes: option }).formatDate(timeFormatString()).toLocaleLowerCase()} (${humaniseDuration(option)})`\n : `${humaniseDuration(option)}`\n });\n }\n\n\n while (time <= max) {\n blocks.push({\n id: time,\n name: date\n ? `${date.addValue({ minutes: time }).formatDate(timeFormatString()).toLocaleLowerCase()} (${humaniseDuration(time)})`\n : `${humaniseDuration(time)}`\n });\n time += step;\n }\n if (all_day) {\n blocks.push({ id: 24 * 60, name: 'All Day' }); \n }\n blocks.push({ id: 7 * 24 * 60, name: '1 week' });\n return blocks;\n }\n}\n","
\n \n \n \n {{ option.name }}\n \n \n \n
\n","export * from './action-field/action-field.component'\nexport * from './counter/counter.component'\nexport * from './date-field/date-field.component'\nexport * from './duration-field/duration-field.component'\nexport * from './time-field/time-field.component'\nexport * from './user-search-field/user-search-field.component'\nexport * from './user-list-field/user-list-field.component'\n","import {\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\nimport { MatSelect } from '@angular/material/select';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n Identity,\n timeFormatString\n} from '@mckinsey-converge/base';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n@Component({\n selector: 'a-time-field',\n templateUrl: './time-field.component.html',\n styleUrls: ['./time-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TimeFieldComponent),\n multi: true\n }\n ]\n})\nexport class TimeFieldComponent extends BaseDirective implements OnInit, OnChanges, ControlValueAccessor {\n /** Time step between each allowed time option */\n @Input() public step: number = 15;\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Whether past times are allowed */\n @Input() public no_past_times: boolean = true;\n /** String representing the currently set time */\n public date: number = DateNow(new Date()).ms;\n /** String representing the currently set time */\n public time: string = DateNow(new Date()).formatDate('HH:mm');\n /** Available time blocks for the selected date */\n public _time_options: Identity[];\n /** Whether select field should be shown */\n public show_select: boolean;\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n /** Select field for selecting the time */\n @ViewChild('select') private select_field: MatSelect;\n\n // R--- This is the form input that needs to be TZ active.\n public ngOnInit(): void {\n this.show_select = true;\n this._time_options = this.generateAvailableTimes(this.date, !this.no_past_times, this.step);\n this.timeout('hide', () => this.show_select = false);\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.no_past_times || changes.step) {\n this._time_options = this.generateAvailableTimes(this.date, !this.no_past_times, this.step);\n }\n }\n\n public get date_(){\n return new DateTZ({date: this.date})\n }\n\n /** Available time blocks for the selected date */\n public get time_options() {\n const time = (this.time || '00:00').split(':');\n const date = this.date_.setValue({ hour: +time[0], minute: +time[1] });\n if (date.minutes % 15 !== 0 && !this._time_options.find(time => time.id === date.formatDate('HH:mm'))) {\n this._time_options.push({\n name: `${date.formatDate(timeFormatString())}`,\n id: date.formatDate('HH:mm')\n });\n this._time_options.sort((a, b) => `${a.id}`.localeCompare(`${b.id}`));\n }\n return this._time_options;\n }\n\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: string): void {\n this.time = new_value;\n if (this._onChange) {\n const time = (this.time || '00:00').split(':');\n const date = this.date_.setValue({ hour: +time[0], minute: +time[1] }).startOfValue('minute');\n this._onChange(date.ms);\n }\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: number) {\n if (!value) {\n return;\n }\n this.date = value;\n let date = this.date_.startOfValue('minute');\n date = date.setValue({ minute: Math.ceil(date.minutes / 5) * 5 });\n this.time = date.formatDate('HH:mm');\n this._time_options = this.generateAvailableTimes(this.date, !this.no_past_times, this.step);\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n\n /**\n * Show select field for time options\n */\n public showSelect() {\n this.show_select = true;\n this.timeout('on_shown', () => {\n if (this.select_field) {\n this.select_field.focus();\n this.select_field.open();\n this.subscription('listen_close', this.select_field.openedChange.subscribe((state) => {\n if (!state) {\n this.show_select = false;\n }\n }));\n }\n });\n }\n\n /**\n * Generate a list of time options for the given date\n * @param datestamp Date to generate options for\n * @param show_past Whether past times should be options\n */\n private generateAvailableTimes(datestamp: number, show_past: boolean, step: number = 15): Identity[] {\n let date = new DateTZ({date: datestamp});\n const blocks = [];\n if (show_past || date.isAfterDate(DateNow(new Date()))) {\n date = date.startOfValue('day');\n } else if (date.isAfterDate(DateNow(new Date()))) {\n date = DateNow(new Date());\n }\n date = date.setValue({ minute: Math.ceil(date.minutes / step) * step });\n const end = date.endOfValue('day');\n // Add options for the rest of the day\n while (date.isBeforeDate(end)) {\n blocks.push({\n name: `${date.formatDate(timeFormatString()).toLocaleLowerCase()}`,\n id: date.formatDate('HH:mm')\n });\n date = date.addValue({ minutes: step });\n }\n return blocks;\n }\n}\n","\n
\n \n
\n
\n \n
\n\n\n \n \n {{ option.name }}\n \n \n\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n forwardRef,\n Input,\n OnInit,\n Output,\n ViewChild\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\nimport {\n Observable,\n of,\n Subject\n} from 'rxjs';\nimport {\n catchError,\n debounceTime,\n distinctUntilChanged,\n tap,\n map,\n switchMap,\n finalize\n} from 'rxjs/operators';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n ApplicationService,\n User,\n UsersService\n} from '@mckinsey-converge/data-common';\nimport {\n csvToJson,\n downloadFile,\n filterList,\n matchToHighlight\n} from '@mckinsey-converge/base';\nimport { MatAutocompleteTrigger } from '@angular/material/autocomplete';\n\n@Component({\n selector: 'a-user-list-field',\n templateUrl: './user-list-field.component.html',\n styleUrls: ['./user-list-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UserListFieldComponent),\n multi: true\n }\n ]\n})\nexport class UserListFieldComponent extends BaseDirective implements OnInit, ControlValueAccessor {\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Number of characters needed before a search will start */\n @Input() public limit: number = 3;\n /** Emitter for action to make a new user */\n @Output('newUser') public new_user = new EventEmitter();\n\n /** User list to display */\n public user_list: User[];\n /** List of active selected users on the list */\n public active_list: User[];\n /** Whether user list is loading */\n public loading: boolean;\n /** String */\n public search_str: string;\n /** List of users from an API search */\n public search_results$: Observable;\n /** Subject holding the value of the search */\n public search$ = new Subject();\n\n /** Form control on change handler */\n private _onChange: (_: User[]) => void;\n /** Form control on touch handler */\n private _onTouch: (_: User[]) => void;\n\n @ViewChild(MatAutocompleteTrigger, {read: MatAutocompleteTrigger}) inputAutoComplete: MatAutocompleteTrigger;\n\n constructor(private _service: ApplicationService, private _users: UsersService, private cdRef: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit() {\n // Listen for input changes\n this.search_results$ = this.search$.pipe(\n debounceTime(100),\n distinctUntilChanged(),\n switchMap((query) => {\n this.loading = true;\n return query.length >= this.limit\n ? this._users.query({\n q: query.slice(0, Math.max(this.limit, 3)),\n cache: 60 * 1000\n })\n : Promise.resolve([]);\n }),\n catchError((_) => of([])),\n map((list: User[]) => {\n this.loading = false;\n return filterList(this.search_str, list, ['name', 'email']);\n })\n );\n // Process API results\n this.subscription(\n 'search_results',\n this.search_results$.subscribe((list) => {\n this.user_list = list;\n this.user_list.forEach((i: any) => {\n i.match_name = matchToHighlight(i.match_name);\n i.match_email = matchToHighlight(i.match_email);\n return i;\n });\n this.user_list.length ? this.inputAutoComplete.openPanel() : this.inputAutoComplete.closePanel();\n })\n );\n }\n\n /**\n * Add user to the user list\n * @param user\n */\n public addUser(user: User) {\n /* istanbul ignore else */\n if (!this.active_list) {\n this.active_list = [];\n }\n const index = this.active_list.findIndex((a_user) => a_user.id === user.id);\n /* istanbul ignore else */\n if (index < 0) {\n this.active_list = [...this.active_list, user];\n }\n this.setValue(this.active_list);\n this.search_str = '';\n }\n\n /**\n * Remove user from the user list\n * @param user\n */\n public removeUser(user: User) {\n this.active_list = this.active_list.filter((a_user) => a_user.id !== user.id);\n this.setValue(this.active_list);\n }\n\n /**\n * Load CSV file and populate the user list with the contents\n * @param event File input field event\n */\n public addUsersFromFile(event) {\n /* istanbul ignore else */\n if (event.target) {\n const file = event.target.files[0];\n /* istanbul ignore else */\n if (file) {\n const reader = new FileReader();\n reader.readAsText(file, 'UTF-8');\n reader.addEventListener('load', (evt) => {\n this.processCsvData((evt.srcElement as any).result);\n event.target.value = '';\n this.cdRef.detectChanges();\n });\n reader.addEventListener('error', (_) =>\n this._service.notifyError('Error reading file.')\n );\n }\n }\n }\n\n /**\n * Process raw CSV data and save user data to attendee list\n * @param data CSV data\n */\n private processCsvData(data: string) {\n const list = csvToJson(data) || [];\n const id = this._users.current.staff_code; \n list.forEach((el) => {\n const firstName = el.first_name.split(' ').map((word: string) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(' ');\n const lastName = el.last_name.split(' ').map((word: string) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(' ');\n\n el.name = el.name || `${firstName} ${lastName}`;\n const display = (el.name || `${Math.floor(Math.random() * 9999_9999)}`)\n .split(' ')\n .join('_')\n .toLowerCase();\n /* istanbul ignore else */\n if (!el.email) {\n el.email = `${display}+${id}@guest.mckinsey.com`;\n }\n el.type = 'external';\n el.external = !el.email.endsWith(\"@mckinsey.com\") && !el.email.endsWith(\"@external.mckinsey.com\");\n this.addUser(new User(el));\n });\n }\n\n /* istanbul ignore next */\n /** Download template CSV file */\n public downloadCSVTemplate() {\n const template = `Organisation Name,First Name,Last Name,Email,Phone\\nFake Org,John,Smith,john.smith@example.com,01234567898`;\n downloadFile('template.csv', template);\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: User[]): void {\n this.active_list = new_value;\n if (this._onChange) {\n this._onChange(new_value);\n }\n }\n\n /* istanbul ignore next */\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: User[]) {\n this.active_list = value;\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: User[]) => void): void {\n this._onChange = fn;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: User[]) => void): void {\n this._onTouch = fn;\n }\n}\n","
\n \n \n
\n \n
\n
\n \n
\n
\n \n \n
{{ option.name }}
\n
{{ option.email }}
\n
\n
\n
\n \n \n \n
\n
\n \n \n {{ user.name }}\n \n \n \n
\n
\n\n
No attendees
\n
\n","import {\n Component,\n forwardRef,\n Input,\n OnInit,\n ViewChild\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\nimport {\n Observable,\n of,\n Subject\n} from 'rxjs';\nimport {\n catchError,\n debounceTime,\n distinctUntilChanged,\n map,\n switchMap\n} from 'rxjs/operators';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n User,\n UsersService\n} from '@mckinsey-converge/data-common';\nimport {\n filterList,\n matchToHighlight\n} from '@mckinsey-converge/base';\nimport { MatAutocompleteTrigger } from '@angular/material/autocomplete';\n\n@Component({\n selector: 'a-user-search-field',\n templateUrl: './user-search-field.component.html',\n styleUrls: ['./user-search-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UserSearchFieldComponent),\n multi: true\n }\n ]\n})\nexport class UserSearchFieldComponent extends BaseDirective implements OnInit, ControlValueAccessor {\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Limit available options to these */\n @Input() public options: User[];\n /** Currently selected user */\n public active_user: User;\n /** User list to display */\n public user_list: User[];\n /** Whether user list is loading */\n public loading: boolean;\n /** Current display value of the search input field */\n public search_str: string;\n /** List of users from an API search */\n public search_results$: Observable;\n /** Subject holding the value of the search */\n public search$ = new Subject();\n\n /** Form control on change handler */\n private _onChange: (_: User) => void;\n /** Form control on touch handler */\n private _onTouch: (_: User) => void;\n @ViewChild(MatAutocompleteTrigger, {read: MatAutocompleteTrigger}) inputAutoComplete: MatAutocompleteTrigger;\n \n constructor(private _users: UsersService) {\n super();\n }\n\n public ngOnInit(): void {\n\n // Listen for input changes\n this.search_results$ = this.search$.pipe(\n debounceTime(400),\n distinctUntilChanged(),\n switchMap(query => {\n this.loading = true;\n return this.options && this.options.length > 0\n ? Promise.resolve(this.options)\n : query.length >= 3\n ? (this._users.query({ q: query, cache: 60 * 1000 }) as Promise)\n : Promise.resolve([]);\n }),\n catchError((err) => of([])),\n map((list: User[]) => {\n this.loading = false;\n return filterList(this.search_str, list, ['name', 'email']);\n })\n );\n // Process API results\n this.subscription('search_results', this.search_results$.subscribe(list => {\n this.user_list = list;\n this.user_list.forEach((i: any) => {\n i.match_name = matchToHighlight(i.match_name);\n i.match_email = matchToHighlight(i.match_email);\n return i;\n });\n this.user_list.length ? this.inputAutoComplete.openPanel() : this.inputAutoComplete.closePanel();\n }));\n }\n\n /**\n * Reset the search string back to the name of the active user\n */\n public resetSearchString() {\n if (this.active_user) {\n this.search_str = this.active_user.name;\n }\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: User): void {\n this.active_user = new_value;\n if (this._onChange) {\n this._onChange(new_value);\n }\n this.resetSearchString();\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: User) {\n this.active_user = value;\n this.resetSearchString();\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: User) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: User) => void): void {\n this._onTouch = fn;\n }\n}\n","
\n \n \n
\n \n
\n
\n \n
\n
\n \n \n
{{ option.name }}
\n
{{ option.email }}
\n
\n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'feedback',\n templateUrl: './feedback.component.html',\n styleUrls: ['./feedback.component.scss'],\n})\nexport class FeedbackComponent extends BaseDirective implements OnInit {\n /** Name of the currently active page */\n public current_page: string;\n\n constructor(private _router: Router) {\n super();\n }\n\n public ngOnInit(): void {\n this.timeout('Getting Title', () => this.updateRoute(document.title), 1000);\n this._router.events.subscribe((event: NavigationEnd) => {\n /* istanbul ignore else */\n if (event instanceof NavigationEnd) {\n this.timeout('Getting Title', () => this.updateRoute(document.title));\n }\n });\n }\n\n public updateRoute(location) {\n location = location.substr(0, location.indexOf(' |'));\n this.current_page = location;\n }\n}\n","\n
\n Feedback\n \n \n \n
\n
\n","import {\n Component,\n Input\n} from '@angular/core';\nimport { ApplicationIcon } from '@mckinsey-converge/data-common';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'app-icon',\n templateUrl: './icon.component.html',\n styleUrls: ['./icon.component.scss']\n})\nexport class IconComponent extends BaseDirective {\n @Input() public icon: ApplicationIcon;\n}\n","
\n {{ icon.content }}\n \n
\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n ActionFieldComponent,\n CounterComponent,\n DateFieldComponent,\n DurationFieldComponent,\n TimeFieldComponent,\n UserListFieldComponent,\n UserSearchFieldComponent\n} from './custom-fields';\nimport { IconComponent } from './icon/icon.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { ACA_PIPES_MODULE } from '@acaprojects/ngx-pipes';\nimport {\n FormsModule,\n ReactiveFormsModule\n} from '@angular/forms';\nimport { FeedbackComponent } from './feedback/feedback.component';\nimport { ActionIconComponent } from './action-icon/action-icon.component';\nimport { PopoutMenuComponent } from './popout-menu/popout-menu.component';\nimport { SearchbarComponent } from './searchbar/searchbar.component';\nimport { UserAvatarComponent } from './user-avatar/user-avatar.component';\nimport { CateringMenuItemComponent } from './bookings/catering/item/item.component';\nimport { PackageOptionsModalComponent } from './bookings/catering/package-options-modal/package-options-modal.component';\nimport { BaseModule } from '@mckinsey-converge/base';\nimport { UiModule } from '@mckinsey-converge/ui';\nimport { CngSearchBarComponent } from './cng-search-bar/cng-search-bar.component';\nimport { HoverClassDirective } from './cng-search-bar/hover-class.directive';\n\nconst DECLARATIONS = [\n ActionFieldComponent,\n IconComponent,\n CounterComponent,\n DateFieldComponent,\n DurationFieldComponent,\n TimeFieldComponent,\n UserSearchFieldComponent,\n UserListFieldComponent,\n FeedbackComponent,\n ActionIconComponent,\n PopoutMenuComponent,\n SearchbarComponent,\n UserAvatarComponent,\n CateringMenuItemComponent,\n PackageOptionsModalComponent,\n CngSearchBarComponent,\n HoverClassDirective\n];\n\nconst MATERIAL_MODULES: any[] = [\n MatButtonModule,\n MatSnackBarModule,\n MatDialogModule,\n MatFormFieldModule,\n MatInputModule,\n MatProgressSpinnerModule,\n MatProgressBarModule,\n MatAutocompleteModule,\n MatSelectModule,\n MatChipsModule,\n MatRippleModule,\n MatMenuModule,\n MatCheckboxModule,\n MatTooltipModule,\n MatRadioModule,\n MatTabsModule,\n MatSlideToggleModule\n];\n\n@NgModule({\n imports: [\n CommonModule,\n ACA_PIPES_MODULE,\n FormsModule,\n ReactiveFormsModule,\n ...MATERIAL_MODULES,\n BaseModule,\n UiModule\n ],\n declarations: [\n ...DECLARATIONS\n ],\n exports: [\n ACA_PIPES_MODULE,\n ...DECLARATIONS,\n ...MATERIAL_MODULES,\n BaseModule,\n ]\n})\nexport class LegacyUiModule {\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output\n} from '@angular/core';\nimport { ApplicationIcon } from '@mckinsey-converge/data-common';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\nexport interface PopoutAction extends ApplicationIcon {\n /** ID of the action */\n id: string;\n}\n\n@Component({\n selector: 'a-popout-menu',\n templateUrl: './popout-menu.component.html',\n styleUrls: ['./popout-menu.component.scss']\n})\nexport class PopoutMenuComponent extends BaseDirective {\n /** List of available actions */\n @Input() public actions: PopoutAction[] = [];\n /** Emitter for user actions */\n @Output() public action = new EventEmitter();\n /** Whether actions should show */\n public show: boolean;\n\n public close() {\n this.timeout('close', () => {\n this.show = false;\n });\n }\n}\n","\n \n\n\n","import { Component, OnInit, Input, EventEmitter, Output, ViewChild, ElementRef, SimpleChanges, OnChanges } from '@angular/core';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'a-searchbar',\n templateUrl: './searchbar.component.html',\n styleUrls: ['./searchbar.component.scss']\n})\nexport class SearchbarComponent extends BaseDirective implements OnChanges {\n /** Current contents of the searchbar input */\n @Input('value') public value: string;\n /** Current contents of the searchbar input */\n @Input() public placeholder: string;\n /** Whether external changes are being processed */\n @Input() public loading: boolean;\n /** Whether external changes are being processed */\n @Input() public autofocus: boolean;\n /** Emitter for changes to the searchbar value */\n @Output() public valueChange = new EventEmitter();\n /** Input field reference */\n @ViewChild('input', { static: true }) private input_field: ElementRef;\n\n public ngOnChanges(changes: SimpleChanges): void {\n /* istanbul ignore else */\n if (changes.autofocus && this.autofocus) {\n this.focusField()\n }\n }\n\n public focusField() {\n /* istanbul ignore else */\n if (this.input_field && this.input_field.nativeElement) {\n this.input_field.nativeElement.focus();\n }\n }\n}\n","
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n","import { Component, Input } from '@angular/core';\nimport { User } from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'a-user-avatar',\n templateUrl: './user-avatar.component.html',\n styleUrls: ['./user-avatar.component.scss']\n})\nexport class UserAvatarComponent {\n /** User to display avatar for */\n @Input() public user: User;\n\n public get initials(): string {\n if (!this.user) {\n return 'NA';\n }\n const parts = this.user.name.split(' ');\n return parts.length > 1\n ? `${parts[0][0]}${parts[parts.length - 1][0]}`\n : this.user.name.slice(0, 2);\n }\n}\n","
\n
{{ initials }}
\n
\n\n \n\n","export * from './lib/loading.actions'\nexport * from './lib/loading.model'\nexport * from './lib/loading.effects'\nexport * from './lib/loading.selectors'\nexport * from '../testing'\n","import {\n createAction,\n createSelector,\n on,\n On,\n props\n} from '@ngrx/store';\nimport {\n LoadingModel,\n wrapLoading\n} from './loading.model';\nimport {\n selectIsLoading,\n selectOptionalError,\n selectOptionalSuccess,\n selectSuccess\n} from './loading.selectors';\nimport { MemoizedSelector } from '@ngrx/store/src/selector';\nimport {\n ActionCreator,\n NotAllowedCheck,\n TypedAction\n} from '@ngrx/store/src/models';\nimport { HashMap } from '@mckinsey-converge/base';\n\nexport interface Payload {\n payload: T\n}\n\nexport type LoadingAction = T & TypedAction\nexport type LoadingActionCreator = T extends null | undefined ?\n ActionCreator TypedAction>\n : ActionCreator) => LoadingAction>\n\ntype ClearAction = ActionCreator TypedAction>\n\ninterface Selectors {\n success: MemoizedSelector\n optionalSuccess: MemoizedSelector\n error: MemoizedSelector\n loading: MemoizedSelector\n model: (TState) => LoadingModel\n}\n\nexport interface LoadingActionObject {\n request: LoadingActionCreator\n success: LoadingActionCreator>\n error: LoadingActionCreator>\n clear: ClearAction,\n ons: On[],\n selectors: Selectors\n}\n\n/**\n * Creates a {@link LoadingActionObject} that contains a set of ActionCreators\n * for request, success, error, loading, and clear data. Also, it contains\n * the necessary On reducers and selectors in order to properly connect them in\n * a standardized way to data in the application.\n *\n * `TState` is the type of data on your reducer, not global store.\n * `TRequest` is an object type to use in request methods.\n * `TSuccess` is the object type of the T parameter on `LoadingModel`.\n *\n * This assumes you have state represented by:\n * ```typescript\n * interface SomeState {\n * stateKey: LoadingModel\n * }\n * ```\n *\n * To dispatch an action:\n * ```typescript\n *\n * // request parameters depend on the object type used as second type parameter\n * // in createLoadingAction\n * this.store.dispatch(someLoadingAction.request())\n *\n * // action created with createLoadingAction\n * this.store.dispatch(someLoadingAction.request({\n * name: 'Andrew G',\n * age: 24\n * }))\n *\n * ```\n *\n * The generated selectors only select data from its fractured state, not the global\n * store. In order to use them, make sure you {@link select} the global state\n * before using them:\n *\n * ```typescript\n *\n * this.store.pipe(\n * select(selectSomeState),\n * select(someLoadingAction.selectors.success)\n * ).subscribe(next => {\n *\n * })\n *\n * ```\n *\n * @param actionPrefix - Prefixes actions to uniquely identify them.\n * @param stateKey - The field within the reducer state to set data on.\n */\nexport const createLoadingAction = (\n actionPrefix: string,\n stateKey: keyof TState\n): LoadingActionObject => {\n const buildAction = (postfix: string) => `[${actionPrefix}] ${postfix}`;\n // @ts-ignore\n const request = createAction(buildAction('request'), props());\n const success = createAction(buildAction('success'), props>());\n const error = createAction(buildAction('error'), props>());\n const clear = createAction(buildAction('clear'));\n const ons: On[] = [\n on(request, (state: TState & HashMap>, action: LoadingAction) =>\n ({\n ...state,\n [stateKey]: wrapLoading(state[stateKey]).loading()\n })),\n on(success, (state: TState & HashMap>, action: LoadingAction>) => ({\n ...state,\n [stateKey]: LoadingModel.success(action.payload)\n })),\n // some reason specifying state like in success and request does not work.\n on(error, (state: any, action: LoadingAction>) => ({\n ...state,\n [stateKey]: LoadingModel.error(action.payload)\n })),\n on(clear, () => ({\n ...this.state,\n [stateKey]: LoadingModel.empty()\n }))\n ];\n const selectData = (state: TState) => {\n if (!state) {\n console.warn('[LoadingActions] State is empty for key', stateKey);\n }\n return wrapLoading(state?.[stateKey] as unknown as LoadingModel);\n };\n const selSuccess = createSelector, TSuccess>(\n selectData,\n selectSuccess\n );\n const selOptionalSuccess = createSelector(\n selectData,\n selectOptionalSuccess\n );\n const selError = createSelector(\n selectData,\n selectOptionalError\n );\n const selLoading = createSelector(\n selectData,\n selectIsLoading\n );\n return {\n request,\n success,\n error,\n clear,\n ons,\n selectors: {\n success: selSuccess,\n optionalSuccess: selOptionalSuccess,\n error: selError,\n loading: selLoading,\n model: selectData\n }\n };\n};\n","import {\n Actions,\n ofType\n} from '@ngrx/effects';\n\nimport { \n LoadingAction,\n LoadingActionObject\n} from '../../../loading/src/lib/loading.actions';\n\nimport {\n catchError,\n flatMap,\n map\n} from 'rxjs/operators';\nimport {\n Observable,\n of\n} from 'rxjs';\nimport { TypedAction } from '@ngrx/store/src/models';\n\n/**\n * This creates an effect to use in Effects classes. This coordinates a simple\n * success and error payload effect.\n * @param actions - The actions object\n * @param actionObject - The created createLoadingAction object.\n * @param caller - Define what API method or asynchronous operation is needed to\n * run this. Return TSuccess.\n */\nexport const createLoadingEffect = (\n actions: Actions, actionObject: LoadingActionObject,\n caller: (action: LoadingAction) => Promise): Observable> => actions.pipe(\n ofType(actionObject.request),\n flatMap((action) => caller(action as LoadingAction)),\n map((response: TSuccess) => actionObject.success({ payload: response })),\n catchError(err => {\n return of(actionObject.error({ payload: err }));\n })\n);\n","/* eslint-disable no-underscore-dangle,no-useless-constructor */\n/**\n * Wraps around the typical data objects we write for success, error, loading, and empty state. This convenience\n * wrapper consolidates all of that logic into a handy wrapper.\n */\nexport class LoadingModel {\n static empty = () => new LoadingModel(false, false, false, undefined);\n\n static success = (success?: T): LoadingModel =>\n new LoadingModel(false, false, true, success);\n\n static error = (error?: Error, optionalSuccess?: T): LoadingModel =>\n new LoadingModel(false, true, false, optionalSuccess, error);\n\n /**\n * Mutates the model with a success state, preserving other state fields.\n * @param success - override success state.\n */\n mutate = (\n success: T2 | null) => new LoadingModel(\n this.isLoading,\n this.hasError,\n !!success,\n !success ? undefined : success\n );\n\n loading = (success: T | null = this.success) =>\n new LoadingModel(\n true,\n false,\n !!success && this.hasSuccess,\n !success ? undefined : success\n );\n\n public get success(): T {\n return this._success as T;\n }\n\n public get optionalSuccess(): T | undefined {\n return this._success;\n }\n\n constructor(\n public isLoading: boolean,\n private hasError: boolean,\n private hasSuccess: boolean,\n private _success?: T,\n public error?: Error\n ) {\n }\n\n isEmpty = () => !this.isSuccess() && !this.isError();\n\n hasLoaded = () => !this.isEmpty() && !this.isLoading;\n\n isSuccess = () => this.hasSuccess;\n\n isError = () => this.hasError;\n\n shouldLoad = () => !this.isSuccess() && !this.isLoading;\n\n public toString = () =>\n `Loading: ${this.isLoading}, Success: ${this.hasSuccess}:**${this._success}**, ` +\n `Error: ${this.hasError}:${this.error}`;\n}\n\n/**\n * Wraps an object that conforms to LoadingModel to restore object loss from\n * hydrating state during development.\n */\nexport const wrapLoading = (loading: any): LoadingModel => {\n if (loading instanceof LoadingModel) {\n return loading;\n } else {\n if (!loading) {\n return LoadingModel.empty();\n } else {\n return new LoadingModel(\n loading.isLoading || false,\n loading.hasError || false,\n loading.hasSuccess || false,\n loading._success,\n loading.error\n );\n }\n }\n};\n","import { LoadingModel, wrapLoading } from './loading.model';\n\nexport const selectSuccess = (state: LoadingModel) =>\n wrapLoading(state).success;\nexport const selectOptionalSuccess = (state: LoadingModel) =>\n wrapLoading(state).optionalSuccess;\nexport const selectIsLoading = (state: LoadingModel) =>\n wrapLoading(state).isLoading;\nexport const selectIsSuccess = (state: LoadingModel) =>\n wrapLoading(state).isSuccess();\nexport const selectOptionalError = (state: LoadingModel) =>\n wrapLoading(state).error;\nexport const selectIsError = (state: LoadingModel) =>\n wrapLoading(state).isError();\nexport const selectHasLoaded = (state: LoadingModel) =>\n wrapLoading(state).hasLoaded();\nexport const selectIsEmpty = (state: LoadingModel) =>\n wrapLoading(state).isEmpty();\n\n","import {\n Observable,\n Subject\n} from 'rxjs';\nimport { Action } from '@ngrx/store';\nimport { Actions } from '@ngrx/effects';\nimport { TypedAction } from '@ngrx/store/src/models';\nimport { take } from 'rxjs/operators';\nimport {\n LoadingActionObject\n} from '../src/lib/loading.actions';\n\nexport const generateMockActions = () => {\n const dispatcher = new Subject();\n return {\n dispatcher,\n actions: new Actions(dispatcher)\n };\n};\n\n/**\n * Simple verifier that checks if the request action results in a success returned.\n */\nexport const verifyActionSuccess = (\n action: LoadingActionObject,\n effect: Observable>,\n dispatcher: Subject,\n options: {\n data: TSuccess,\n payload?: TRequest,\n }) => {\n let result: TypedAction;\n effect\n .pipe(take(1))\n .subscribe(next => {\n result = next;\n });\n // payload has type issues, just ignore them since we specify TRequest as type param already.\n dispatcher.next(action.request((options.payload || {}) as never));\n\n expect(result).toBeDefined();\n expect(result).toStrictEqual(action.success({ payload: options.data }));\n};\n\n/**\n * Simple verifier that checks if the request action results in a failure returned.\n */\nexport const verifyActionError = (\n action: LoadingActionObject,\n effect: Observable>,\n dispatcher: Subject,\n options: {\n error: Error,\n payload?: TRequest\n }) => {\n let result: TypedAction;\n effect\n .pipe(take(1))\n .subscribe(next => {\n result = next;\n });\n // payload has type issues, just ignore them since we specify TRequest as type param already.\n dispatcher.next(action.request((options.payload || {}) as never));\n\n expect(result).toBeDefined();\n expect(result).toStrictEqual(action.error({ payload: options.error }));\n};\n","export * from './effects.testing'\n","export * from './lib/organisation.module';\nexport * from './lib/organisation.actions';\n","import { OrganisationState } from './organisation.reducer';\nimport { createLoadingAction } from '@mckinsey-converge/loading';\nimport { Organisation } from '@mckinsey-converge/data-common';\n\nexport const organisationStateSelector = (state: { organisation: OrganisationState }) => state.organisation;\n\nexport const loadOrganisations = createLoadingAction('Organisation', 'data');\n","import { Injectable } from '@angular/core';\nimport {\n Actions,\n Effect\n} from '@ngrx/effects';\nimport { createLoadingEffect } from '@mckinsey-converge/loading';\nimport { loadOrganisations } from './organisation.actions';\nimport { OrganisationService } from '@mckinsey-converge/data-common';\n\n\n@Injectable()\nexport class OrganisationEffects {\n\n constructor(private actions: Actions,\n private organisationService: OrganisationService) {\n }\n\n @Effect()\n public loadOrganisations = createLoadingEffect(this.actions, loadOrganisations,\n () => this.organisationService.loadOrganisation())\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\nimport { organisationReducer } from './organisation.reducer';\nimport { OrganisationEffects } from './organisation.effects';\n\n@NgModule({\n imports: [\n CommonModule,\n EffectsModule.forFeature([\n OrganisationEffects\n ]),\n StoreModule.forFeature('organisation', organisationReducer)\n ]\n})\nexport class OrganisationModule {\n}\n","import { LoadingModel } from '@mckinsey-converge/loading';\nimport { Organisation } from '@mckinsey-converge/data-common';\nimport { createReducer } from '@ngrx/store';\nimport { loadOrganisations } from './organisation.actions';\n\nexport interface OrganisationState {\n data: LoadingModel\n}\n\nconst initialState: OrganisationState = {\n data: LoadingModel.empty()\n};\n\nexport const organisationReducer = createReducer(initialState,\n ...loadOrganisations.ons);\n","export * from './lib/rooms.module';\nexport * from './lib/rooms.actions'\nexport * from './lib/rooms.reducer'\nexport * from './lib/rooms.types'\nexport * from './lib/rooms.utils'\n","import { createLoadingAction } from '../../../loading/src/lib/loading.actions';\nimport { Space } from '../../../data-common/src/lib/spaces/space.class';\nimport {\n RoomQueryOptions,\n RoomState,\n RoomStoreState\n} from './rooms.types';\nimport {\n createAction,\n createSelector,\n props\n} from '@ngrx/store';\n\nexport const roomStateSelector = (state: RoomStoreState) => state.rooms;\n\nexport const loadRoomsWithQuery = createAction('[Rooms] Load Rooms with query', props());\n\nexport const loadRoomsForResults = createLoadingAction('Rooms', 'query');\n\nexport const loadRoomsForResultsMap = createLoadingAction('Rooms for map', 'query');\n\n\nexport const loadLaterThatDayResults = createLoadingAction('Later Rooms', 'later');\n\nexport const loadNextDayResults = createLoadingAction('Next Day Rooms', 'next');\n\nexport const loadByIdResults = createLoadingAction('By Id Rooms', 'byid');\n\nexport const selectRoomResultsSuccess = createSelector(roomStateSelector,\n loadRoomsForResults.selectors.optionalSuccess);\n\nexport const loadDiffSizeResults = createLoadingAction('Different Size Rooms', 'size');\n","import { Injectable } from '@angular/core';\nimport {\n Actions,\n Effect,\n ofType\n} from '@ngrx/effects';\nimport { SpacesService } from '@mckinsey-converge/data-common';\nimport {\n createLoadingEffect,\n LoadingAction\n} from '@mckinsey-converge/loading';\nimport {\n loadLaterThatDayResults,\n loadNextDayResults,\n loadRoomsForResults,\n loadRoomsForResultsMap,\n loadRoomsWithQuery,\n loadByIdResults,\n loadDiffSizeResults\n} from './rooms.actions';\nimport { mergeMap } from 'rxjs/operators';\nimport {\n laterThatDayFromDateTz,\n nextBusinessDay,\n} from './rooms.utils';\nimport {\n RoomQueryOptions,\n roomQueryOptionsToSpaceAvailabilityOptions,\n roomByIdQueryOptionsToSpaceAvailabilityOptions\n} from './rooms.types';\n\n@Injectable()\nexport class RoomsEffects {\n constructor(private actions: Actions,\n private spaceService: SpacesService) {\n }\n\n @Effect()\n public afterRequestResultsLoadOthersEffect = this.actions.pipe(\n ofType(loadRoomsWithQuery),\n mergeMap((action: LoadingAction) => {\n return [\n loadRoomsForResults.request({\n ...action,\n dateTz: action.dateTz\n }),\n // loadRoomsForResultsMap.request({\n // ...action,\n // dateTz: action.dateTz\n // }),\n loadLaterThatDayResults.request({\n ...action,\n dateTz: laterThatDayFromDateTz(action.dateTz)\n }),\n loadNextDayResults.request({\n ...action,\n dateTz: nextBusinessDay(action.dateTz)\n }),\n loadDiffSizeResults.request({\n ...action,\n dateTz: action.dateTz,\n diff_capacity: true\n }),\n ];\n })\n );\n\n @Effect()\n public loadRoomsForResultsEffect = createLoadingEffect(this.actions, loadRoomsForResults,\n (action) => this.spaceService.available(roomQueryOptionsToSpaceAvailabilityOptions(action), 'rooms'));\n \n @Effect() \n public loadRoomsForResultsMapEffect = createLoadingEffect(this.actions, loadRoomsForResultsMap,\n (action) => this.spaceService.available(roomQueryOptionsToSpaceAvailabilityOptions(action), 'rooms for maps', false));\n\n @Effect()\n public loadLaterThatDayResultsEffect = createLoadingEffect(this.actions, loadLaterThatDayResults,\n (action) =>\n this.spaceService.available(roomQueryOptionsToSpaceAvailabilityOptions(action), 'laterResults'));\n\n @Effect()\n public loadNextDayResultsEffect = createLoadingEffect(this.actions, loadNextDayResults,\n (action) =>\n this.spaceService.available(roomQueryOptionsToSpaceAvailabilityOptions(action), 'nextDay'));\n\n @Effect()\n public loadDiffSizeResultsEffect = createLoadingEffect(this.actions, loadDiffSizeResults,\n (action) =>\n this.spaceService.available(roomQueryOptionsToSpaceAvailabilityOptions(action), 'diffSize'));\n\n @Effect()\n public loadRoomByIdResultsEffect = createLoadingEffect(this.actions, loadByIdResults,\n (action) => \n this.spaceService.available(roomByIdQueryOptionsToSpaceAvailabilityOptions(action), 'byId', false));\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\nimport { roomsReducer } from './rooms.reducer';\nimport { RoomsEffects } from './rooms.effects';\n\n@NgModule({\n imports: [\n CommonModule,\n EffectsModule.forFeature([RoomsEffects]),\n StoreModule.forFeature('rooms', roomsReducer)\n ]\n})\nexport class RoomsModule {\n}\n","import { LoadingModel } from '@mckinsey-converge/loading';\nimport { createReducer } from '@ngrx/store';\nimport {\n loadLaterThatDayResults,\n loadNextDayResults,\n loadRoomsForResults,\n loadByIdResults,\n loadDiffSizeResults,\n loadRoomsForResultsMap\n} from './rooms.actions';\nimport { RoomState } from './rooms.types';\n\nexport const initialRoomsState: RoomState = {\n query: LoadingModel.empty(),\n later: LoadingModel.empty(),\n next: LoadingModel.empty(),\n byid: LoadingModel.empty(),\n size: LoadingModel.empty(),\n};\n\nexport const roomsReducer = createReducer(initialRoomsState,\n ...loadRoomsForResults.ons,\n ...loadRoomsForResultsMap.ons,\n\n ...loadLaterThatDayResults.ons,\n ...loadNextDayResults.ons,\n ...loadByIdResults.ons,\n ...loadDiffSizeResults.ons);\n","import { LoadingModel } from '../../../loading/src/lib/loading.model';\nimport {\n Building,\n DaysOfWeek,\n ISpaceAvailabilityOptions,\n RecurrencePeriod,\n Space\n} from '@mckinsey-converge/data-common';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\n\nexport interface RoomStoreState {\n rooms: RoomState;\n}\n\nexport interface RoomState {\n query: LoadingModel\n later: LoadingModel\n next: LoadingModel\n byid: LoadingModel\n size: LoadingModel\n}\n\nexport interface RoomQueryOptions {\n dateTz: DateTZ;\n duration: number;\n locations: string;\n capacity?: number;\n capacity_max?: number;\n diff_capacity?: boolean;\n //Recurrence fields\n recurrence_period?: RecurrencePeriod;\n recurrence_interval?: number;\n recurrence_endTz?: DateTZ;\n recurrence_count?: number;\n recurrence_starts?: Array;\n recurrence_exceptions?: Array; //SHOULD BE DATETZ\n recurrence_days?: Array;\n timezone?: string;\n offset?: number;\n buildings?: Building[];\n is_recurrent?: boolean;\n is_multiroom?: boolean;\n merged?: boolean;\n bookable?: boolean;\n ignore?: string;\n}\n\nexport const roomQueryOptionsToSpaceAvailabilityOptions = (options: RoomQueryOptions): ISpaceAvailabilityOptions => ({\n dateTz: options.dateTz,\n duration: options.duration,\n capacity: options.capacity,\n zone_ids: options.locations,\n capacity_max: options.capacity_max,\n diff_capacity: options.diff_capacity,\n /** Fields to include recurrence in the availability search */\n is_recurrent: options?.is_recurrent,\n is_multiroom: options?.is_multiroom,\n merged: options?.merged,\n recurrence_period: options?.recurrence_period,\n recurrence_interval: options?.recurrence_interval,\n recurrence_endTz: options?.recurrence_endTz,\n recurrence_count: options?.recurrence_count,\n recurrence_starts: options?.recurrence_starts,\n recurrence_days: options?.recurrence_days,\n bookable: options?.bookable,\n ignore: options?.ignore\n});\n\nexport const roomByIdQueryOptionsToSpaceAvailabilityOptions = (options: RoomQueryOptions): ISpaceAvailabilityOptions => ({\n dateTz: options.dateTz,\n duration: options.duration,\n capacity: options.capacity,\n room_ids: options.locations,\n capacity_max: options.capacity_max\n});\n","import { Space } from '@mckinsey-converge/data-common';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { DateTZ } from \"@mckinsey-converge/date-tz\";\n\nexport const todayFromDate = (date: number) => new DateTZ({date});\n\n/**\n * Adds 60 mins.\n */\nexport const laterThatDayFromDateTz = (dateTz: DateTZ) => {\n return dateTz.addValue({ minutes: 60 })\n};\n\n/**\n * Next business day. In most cases 1 day, but on Fridays, it follows to the monday.\n * @param date\n */\nexport const nextBusinessDay = (dateTz: DateTZ) => {\n let retDate = dateTz.addValue({ days: 1 });\n if (retDate.dateWeekday >= 6) {\n retDate = retDate.setValue({ weekday: 8 });\n }\n return retDate;\n};\n\nexport const mapRoomToSelectOption = (room?: Space): SelectOption => room ? ({\n value: room.id,\n shortDisplay: room.local_name,\n display: `${room.local_name}, ${room.level?.name}`\n}) : undefined;\n","export * from './lib/rx-utils.module';\nexport * from './lib/operators'\nexport * from './lib/loading-model.utils'\n","import {\n combineLatest,\n Observable\n} from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { LoadingModel } from '@mckinsey-converge/loading';\n\n/**\n * Generates the results count based on if data has loaded or not. If not, undefined is returned.\n * Otherwise, it'll return the count of the results.\n */\nexport const resultCountObservable = (loadingObservable: Observable>,\n resultsObservable: Observable\n): Observable => combineLatest([\n loadingObservable.pipe(map(r => r.hasLoaded())),\n resultsObservable.pipe(map(v => v?.length))\n]).pipe(map(([isLoading, viewModelLength]) => isLoading ? viewModelLength : undefined));\n","import {\n distinctUntilChanged,\n filter\n} from 'rxjs/operators';\nimport * as deepEqual from 'fast-deep-equal';\n\n/**\n * Useful for nested objects to prevent unnecessary triggers in RX chain.\n */\nexport const deepDistinctUntilChanged = () => distinctUntilChanged(deepEqual);\n\n/**\n * Won't emit if value is undefined.\n */\nexport const filterUndefined = () => filter(f => !!f);\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class RxUtilsModule {}\n","export * from './lib/ui.module';\nexport * from './lib/types';\nexport * from './lib/base-template.component';\nexport * from './lib/recurrence-pattern-form/recurrence-pattern-form.component';\nexport * from './lib/recurrence-booking-form/recurrence-booking-form.component';\nexport * from './lib/conflicts-modal/conflicts-modal.component'\nexport * from './lib/override-changes-modal/override-changes-modal.component'\nexport * from './lib/date-tz-calendar-widget/date-tz-calendar-widget.component';\nexport * from './lib/date-tz-date-picker/date-tz-date-picker.component';\nexport * from './lib/date-tz-duration-field/date-tz-duration-field.component';\nexport * from './lib/date-tz-time-field/date-tz-time-field.component';\nexport * from './lib/aca-date-picker/aca-date-picker.component';\nexport * from './lib/conflict-alert-modal/conflict-alert-modal.component';\nexport * from './lib/tooltip/tooltip.enums';\nexport * from './lib/zoom-warning-modal/components/zoom-warning/zoom-warning.component';\nexport * from './lib/catering-drop-modal/components/catering-drop/catering-drop-modal.component';\n","import { Component, OnInit, Input, Output, OnChanges, SimpleChanges, forwardRef, EventEmitter } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\nexport interface IDatePickerOptions {\n /** Unix timestamp with millisecond. First selectable date */\n from?: number;\n /** Unix timestamp with millisecond. Last selectable date */\n to?: number;\n /** Luxon format string for formatting days of the week. Defaults to `DDD` */\n day_format?: string;\n /** Luxon format string for formatting active month. Defaults to `MMMM yyyy` */\n month_format?: string;\n}\n\ninterface IDateBlock {\n /** Timestamp value of the date */\n value: number;\n /** Day of the month to display */\n display: string;\n /** Whether block is the selected date */\n active: boolean;\n /** Whether block not selectable */\n disabled: boolean;\n /** Whether block outside the active month */\n non_month: boolean;\n /** Whether the block is today */\n today: boolean;\n /** Number of events on this block */\n count?: number;\n}\n\n@Component({\n selector: 'aca-date-picker',\n templateUrl: './aca-date-picker.component.html',\n styleUrls: ['./aca-date-picker.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AcaDatePickerComponent),\n multi: true\n }\n ]\n})\nexport class AcaDatePickerComponent implements OnInit, OnChanges, ControlValueAccessor {\n /** CSS class to add to the root element of the component */\n @Input() public klass = 'default';\n /** Counters of the events on given dates. Key format is `yyyy-MM-dd` */\n @Input() public counters: { [date: string]: number };\n /** Settings for the date picker component */\n @Input() public options: IDatePickerOptions;\n /** Offset of the display month from the current month */\n @Output() public month = new EventEmitter();\n /** Display the last selected day as active */\n @Input() public show_last_selection?: boolean = true\n\n public date: number = DateNow(new Date()).ms;\n\n // R--- this is the date picker that needs to be TZ aware\n /** Offset of the month displayed from the current month */\n public offset = 0;\n /** Minimum offset for changing the month */\n public min_offset = -999999;\n /** Maximum offset for changing the month */\n public max_offset = 999999;\n /** Blocks representing the rendering details of the display days of the month */\n public date_list: IDateBlock[] = [];\n /** Name of the actively displayed month */\n public month_name = DateNow(new Date()).formatDate('MMMM yyyy');\n /** Name of the days of the week to display */\n public days_of_week = [];\n /** First selectable date */\n private from: DateTZ;\n /** Last selectable date */\n private to: DateTZ;\n /** Luxon format string for formatting days of the week. Defaults to `dd` */\n private day_format = 'EEE';\n /** Luxon format string for formatting active month. Defaults to `MMMM yyyy` */\n private month_format = 'MMMM yyyy';\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n /** ID of the timer used for changing the month */\n private _change_timer: number;\n\n public ngOnInit(): void {\n this.generateMonth();\n this.generateDaysOfTheWeek();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.options) {\n this.updateOptions();\n }\n if (changes.counters) {\n this.generateMonth();\n }\n }\n\n /** Change date using the given block */\n public setDate(item: IDateBlock) {\n this.date = item.value;\n if (this._onChange) {\n this._onChange(this.date);\n }\n this.generateMonth();\n }\n\n /**\n * Update offset to show the selected date\n */\n public updateDate(): void {\n \n if (!this.date) {\n return;\n }\n const now = DateNow(new Date()).startOfValue('month');\n const date_ = new DateTZ({date: this.date})\n const date = date_.startOfValue('month');\n if (date.valid) {\n const difference = date.dateDiff(now, 'months', 'months');\n if (this.offset !== difference) {\n this.offset = difference;\n this.month.emit(this.offset);\n }\n this.generateMonth();\n }\n }\n\n /**\n * Update local properties based off changes to settings\n */\n public updateOptions(): void {\n if (this.options) {\n // Setup from date\n if (this.options.from) {\n const date_ = new DateTZ({date: this.options.from})\n this.from = date_.startOfValue('day');;\n const today = DateNow(new Date()).startOfValue('month');\n const date = this.from.startOfValue('month');\n this.min_offset = date.dateDiff(today, 'months', 'months');\n } else if (this.from) {\n this.from = null;\n this.min_offset = -999999;\n }\n // Setup to date\n if (this.options.to) {\n const date_ = new DateTZ({date: this.options.to})\n this.to = date_.startOfValue('day');\n const today = DateNow(new Date()).startOfValue('month');\n const date = this.to.startOfValue('month');\n this.max_offset = date.dateDiff(today, 'months', 'months');\n } else if (this.to) {\n this.to = null;\n this.max_offset = 999999;\n }\n if (this.options.month_format) {\n this.month_format = this.options.month_format || 'MMMM yyyy';\n }\n if (this.options.day_format) {\n this.day_format = this.options.day_format || 'EEE';\n this.generateDaysOfTheWeek();\n }\n // Update date blocks\n this.generateMonth();\n }\n }\n\n /**\n * Generate the display blocks for the days of the active month\n */\n private generateMonth(): void {\n if (!this.date) {\n return;\n }\n const date = DateNow(new Date()).addValue({ months : this.offset });\n const active = new DateTZ({date: this.date});\n let start = date.setValue({ day: 1 }).setValue({ weekday: 7 }).subtractValue({ weeks: 1 });\n const end_ = new DateTZ({date: start.ms})\n const end = end_.addValue({ weeks: 1 }).endOfValue('month').addValue({ days: 2 }).endOfValue('week');\n this.date_list = [];\n while (start.isBeforeDate(end) || start.isSameDate(end, 'day')) {\n this.date_list.push({\n value: start.ms,\n display: start.formatDate('d'),\n active: this.show_last_selection && active.isSameDate(start, 'day'),\n non_month: !date.isSameDate(start, 'month'),\n count: this.counters ? this.counters[start.formatDate('yyyy-MM-dd')] || 0 : 0,\n disabled: (this.from ? start.isBeforeDate(this.from, 'day') : false) || (this.to ? start.isAfterDate(this.to, 'day') : false),\n today: DateNow(new Date()).isSameDate(start, 'day')\n });\n start = start.addValue({ days : 1 });\n }\n this.month_name = date.formatDate(this.month_format);\n }\n\n /**\n * Generate this weekdays to display in the header of the calendar\n */\n private generateDaysOfTheWeek() {\n let date = DateNow(new Date()).startOfValue('week');\n this.days_of_week = [];\n for (let i = 0; i < 7; i++) {\n this.days_of_week.push(date.formatDate(this.day_format));\n date = date.addValue({ days : 1 });\n }\n }\n\n /**\n * Changes the month offset by the given value.\n * Does nothing if the new month is not available to be selected\n * @param value Number of months to change the offset by\n */\n public changeMonth(value: number): void {\n if (this._change_timer) {\n clearTimeout(this._change_timer);\n }\n this._change_timer = setTimeout(() => {\n const new_offset = this.offset + value;\n const now = DateNow(new Date())\n const date = now.addValue({ months : new_offset, days: now.dateMonth === 2 ? 2 : 0 }); //add 2 days if month is february to avoid calc errors\n if (this.from && date.isBeforeDate(this.from, 'month')) { return; }\n if (this.to && date.isAfterDate(this.to, 'month')) { return; }\n this.offset = new_offset;\n this.month.emit(this.offset);\n this.generateMonth();\n this._change_timer = null;\n }, 100);\n }\n\n /**\n * Reset the month offset to the month of the selected date\n */\n public reset() {\n const date = new DateTZ({date: this.date});\n const offset = this.offset;\n this.offset = DateNow(new Date()).dateDiff(date, 'months', 'months');\n if (offset !== this.offset) {\n this.generateMonth();\n }\n this.month.emit(this.offset);\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: number) {\n this.date = value;\n this.updateDate();\n this.generateMonth();\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n}\n","
\n
\n
\n
\n
\n
{{month_name}}
\n
= max_offset\" (click)=\"changeMonth(1)\" (touchend)=\"changeMonth(1)\">\n
\n
\n
\n
\n
{{item}}
\n
\n
\n
\n
\n {{item.display}}\n
\n
{{item.count > 9 ? '+9' : item.count}}
\n
\n
\n
\n
","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges\n} from '@angular/core';\n\nexport enum AlertMode {\n Warning = 'warning',\n Coachmark = 'coachmark',\n BlueCoachmark = 'blue-coachmark',\n Error = 'error'\n}\n\nexport enum AlertBannerDisplay {\n /**\n * New UI\n */\n V2 = 'v2',\n\n /**\n * Default, legacy ui.\n */\n V1 = 'v1',\n}\n\n@Component({\n selector: 'mck-alert-banner',\n template: `\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n \n \n
\n `,\n styleUrls: ['./alert-banner.component.scss']\n})\nexport class AlertBannerComponent implements OnInit, OnChanges {\n\n @Input()\n public mode: AlertMode = AlertMode.Warning;\n\n @Output()\n public close = new EventEmitter();\n\n @Output()\n public action = new EventEmitter();\n\n @Input()\n public message: string;\n\n @Input()\n public buttonText: string;\n\n @Input()\n public showClose = true;\n\n @Input()\n public display: AlertBannerDisplay = AlertBannerDisplay.V1;\n\n public iconPath: string = 'assets/icon/warning-yellow.svg';\n public materialColor: string = 'black';\n public closeIcon: string = 'close_outline.svg';\n\n public ngOnInit(): void {\n this._onModeChange();\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n if (changes.mode) {\n this._onModeChange();\n }\n }\n\n private _onModeChange() {\n this.iconPath = 'assets/icon/warning-yellow.svg';\n this.closeIcon = 'close_outline.svg';\n switch (this.mode) {\n case AlertMode.Warning:\n this.materialColor = 'black';\n break;\n case AlertMode.Coachmark:\n this.materialColor = 'coachmark';\n this.closeIcon = 'close_outline_coachmark.svg';\n break;\n case AlertMode.BlueCoachmark:\n this.iconPath = 'assets/icon/info-bg-dark.svg'\n this.materialColor = 'blue-coachmark'\n break;\n case AlertMode.Error:\n this.iconPath = 'assets/img/error-icon.svg'\n this.materialColor = 'white'\n break;\n default:\n this.materialColor = 'black';\n }\n }\n\n}\n","import {\n Component,\n Directive,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Self,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n NgControl\n} from '@angular/forms';\nimport { SelectOption } from '../types';\nimport {\n BehaviorSubject,\n combineLatest,\n from,\n Subject\n} from 'rxjs';\nimport {\n COMMA,\n ENTER\n} from '@angular/cdk/keycodes';\nimport { MatChipInputEvent } from '@angular/material/chips';\nimport {\n distinctUntilChanged,\n map,\n take\n} from 'rxjs/operators';\nimport { MatCheckboxChange } from '@angular/material/checkbox';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { MatAutocompleteTrigger } from '@angular/material/autocomplete';\n\n@Component({\n selector: 'mck-autocomplete-chip-select-item',\n template: `\n
\n \n {{label}}\n \n
\n \n
\n
\n \n
\n \n
\n \n
\n
\n
\n \n \n \n \n {{selected.shortDisplay}}\n close\n \n \n \n \n
\n \n \n {{option.dropdownOverride || option.display}}\n \n \n
\n
\n \n Clear\n \n \n Confirm\n \n
\n \n \n {{errorMessage}}\n
\n `,\n styleUrls: ['./auto-complete-chip-select-item.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class AutoCompleteChipSelectItemComponent extends BaseDirective implements OnInit, OnChanges, ControlValueAccessor, OnDestroy {\n\n @ViewChild('trigger')\n trigger: MatAutocompleteTrigger;\n\n @ViewChild('componentInput')\n componentInput: HTMLInputElement;\n\n @Input()\n label: string;\n\n @Input()\n required?: boolean;\n\n @Input()\n feedbackInput?: boolean;\n\n @Input()\n loading?: boolean;\n\n @Input()\n placeHolder: string;\n\n @Input()\n options: Subject[]>;\n\n @Input()\n selectedOptions: Subject[]>;\n\n @Input()\n useCTAs?: boolean;\n\n @Output()\n optionSelected = new EventEmitter>();\n\n @Output()\n feedbackOutput = new EventEmitter();\n\n @Output()\n chipsCleared: EventEmitter = new EventEmitter();\n\n @Output()\n onClickConfirm: EventEmitter = new EventEmitter();\n\n /**\n * If true, only allow 1 group at a time to get selected. Show others as disabled.\n */\n @Input()\n selectOnlyOneGroup = false;\n\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n\n @Input() public localFilter: boolean = true;\n\n /**\n * If error exists, a message.\n */\n @Input()\n errorMessage?: string;\n\n @Input()\n hideDropdownCarret?: boolean;\n\n @Input()\n displayCTA?: boolean;\n\n private selectOnlyOneGroupChange = new BehaviorSubject(false);\n\n separatorKeysCodes = [ENTER, COMMA];\n\n public filterFormControl: FormControl = new FormControl();\n\n public focused = false;\n public mobileFullScreen = false;\n\n public autocompleteOptions = new BehaviorSubject[]>([]);\n public filteredAutocompleteOptions = new BehaviorSubject[]>([]);\n\n /** List shown to user, filters children if a group header is added **/\n public chipOptions = new BehaviorSubject[]>([]);\n\n /** Form control on change handler */\n private _onChange?: (_: SelectOption[]) => void;\n /** Form control on touch handler */\n private _onTouch?: (_: string) => void;\n\n private value = new BehaviorSubject[]>([]);\n\n public enableCTAs: boolean = false\n\n public hasChips: boolean = false;\n\n constructor(@Self() @Optional() private control: NgControl) {\n super();\n if (this.control) {\n this.control.valueAccessor = this;\n }\n }\n\n public get invalid(): boolean {\n return this.control ? this.control.invalid : false;\n }\n\n public get showError(): boolean {\n if (!this.control) {\n return false;\n }\n\n const { dirty, touched } = this.control;\n\n return this.invalid ? (dirty && touched) : false;\n }\n\n public iconFillClass(color?: string): string {\n return color === 'external' ? 'mck-icon-fill-gray' : 'mck-icon-fill-white'\n }\n\n ngOnInit() {\n this.subscription('autoCompleteOptions', combineLatest([\n this.options,\n this.selectedOptions,\n this.selectOnlyOneGroupChange\n ])\n .pipe(\n map(([options, selectedOptions, selectOnlyOneGroup]) => {\n this.hasChips = !!selectedOptions.length;\n return options.map(option => {\n const selected = !!selectedOptions.find(s => s.value === option.value);\n let enabled = true;\n if (selectOnlyOneGroup) {\n // find first group item in selection\n const selectedGroupHeader = selectedOptions.find(s => s.groupHeader || s.groupId === option.groupId);\n\n // if no options chosen, enable it, otherwise only allow selections from other options.\n enabled =\n selectedOptions.length === 0 ||\n (selectedGroupHeader ? selectedGroupHeader.groupId === option.groupId : false);\n this.enableCTAs = selectedOptions.length !== 0\n }\n\n return {\n ...option,\n enabled,\n selected\n } as SelectOption;\n });\n })\n ).subscribe(next => {\n const options = next.sort((a, b) => {\n if (a.groupId === b.groupId) {\n return b.display > a.display ? -1 : 1;\n }\n return b.groupId > a.groupId ? -1 : 1;\n });\n this.autocompleteOptions.next(options);\n this.filteredAutocompleteOptions.next(this.getFilteredAutocompleteOptions(this.filterFormControl.value?.trim()));\n }));\n this.subscription('filterFormControlChanges',\n this.filterFormControl.valueChanges.subscribe(value => {\n if (this.localFilter && value.length) {\n this.filteredAutocompleteOptions.next(this.getFilteredAutocompleteOptions(value));\n } else {\n this.filteredAutocompleteOptions.next(this.getFilteredAutocompleteOptions());\n }\n }));\n this.subscription('chipOptions', this.selectedOptions\n .pipe(map(selectedOptions => {\n // find group headers and check if children are part of that group.\n // if part of group, filter them out as redundant.\n const groupHeaders = selectedOptions.filter(s => s.groupHeader) || [];\n return selectedOptions.filter(s => s.groupHeader || s.groupChild && !(groupHeaders.find(g => g.groupId === s.groupId)));\n }))\n .subscribe(next => {\n this.chipOptions.next(next);\n }));\n\n this.subscription('formData', this.selectedOptions\n .pipe(map(selected => {\n // group headers always contain children, so only pick out children for data\n return selected;\n }))\n .subscribe(next => {\n this.value.next(next);\n }));\n\n // tie value changes to change.\n this.subscription('valueChanges', this.value\n .pipe(distinctUntilChanged())\n .subscribe(next => {\n if (this._onChange) {\n // rewrote this to avoid read only error\n const values = [];\n next.forEach((v, i) => {\n const value = { ...v };\n if (v.meta?.user) {\n value.display = v.meta.user.name;\n }\n values.push(value);\n });\n this._onChange(values);\n }\n }));\n\n window.addEventListener('scroll', this.scrollEvent, true);\n }\n\n getFilteredAutocompleteOptions(searchString: string = '') {\n // Exact matches of the groupId or display value\n const exactMatches = this.autocompleteOptions.value.filter(o => {\n if (searchString && searchString.length) {\n return o.groupId.toLowerCase().indexOf(searchString.toLowerCase()) === 0 || o.display.toLowerCase().indexOf(searchString.toLowerCase()) === 0;\n }\n return o.groupId && o.display;\n });\n // Fuzzier search of the dropdownOverride field\n const moreOptions = this.autocompleteOptions.value.filter(o => {\n if (o?.dropdownOverride?.length && searchString) {\n const match = o.dropdownOverride?.toLowerCase().indexOf(searchString.toLowerCase()) > -1;\n // only return found locations that don't exist in exactMatches.\n return match && !exactMatches.find(e => {\n return e.value === o.value\n });\n }\n return false;\n });\n\n // Merge the two result sets\n let joinedOptions = exactMatches.concat(moreOptions).sort((a, b) => {\n if (a.groupId === b.groupId) {\n return b.display > a.display ? -1 : 1;\n }\n return b.groupId > a.groupId ? -1 : 1;\n });\n\n // Create a 1D array of the groupId\n const groupIds = joinedOptions.map(o => o.groupId);\n // Get a deduped list of the group parents\n const parents = this.autocompleteOptions.value.filter(o => {\n return o?.groupHeader && groupIds.indexOf(o.groupId) !== -1;\n });\n\n // Remove the parents from the joinedOptions and merge with the reduced parents set, and then sort by groupId.\n // Resulting array sets the parents first in order so the widget renders properly.\n const filteredAutocompleteOptions = parents.concat(joinedOptions.filter(jo => !!jo.dropdownOverride)).sort((a, b) => {\n return b.groupId > a.groupId ? -1 : 1;\n });\n return filteredAutocompleteOptions;\n }\n\n loseFocus(): void {\n this.mobileFullScreen = false;\n this.focused = false;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.selectOnlyOneGroup) {\n this.selectOnlyOneGroupChange.next(this.selectOnlyOneGroup);\n }\n }\n\n keyedInput(matInput: string) {\n if (this.feedbackInput) {\n this.feedbackOutput.emit(matInput);\n }\n }\n\n selectOption(value: string) {\n this.options.pipe(\n take(1),\n map((options: SelectOption[]) => options.find(o => o.value === value))\n ).subscribe(next => {\n if (next) {\n this.optionSelected.emit(next);\n }\n });\n }\n\n removeOption(value: SelectOption) {\n this.optionSelected.emit(value);\n if (this.useCTAs) {\n this.onClickConfirm.emit();\n }\n\n }\n\n clearSelections() {\n this.selectedOptions.next([]);\n this.chipsCleared.emit();\n }\n\n onClickArrow() {\n // only close events we allow arrow to close panel.\n if (this.focused) {\n this.onFocus(false);\n }\n }\n\n onPanelFocusChange(focusIn: boolean) {\n this.onFocus(focusIn, true);\n }\n\n onFocus(focusIn: boolean, fromPanel?: boolean) {\n if (!focusIn && this.useCTAs) {\n this.onClickConfirm.emit();\n }\n // Only for location input???\n if (this.localFilter && fromPanel && focusIn) {\n // open on focus, mobile needs a refocus\n this.mobileFullScreen = true;\n this.timeout('showDefaults', () => {\n // All results do not show as expected unless I focus again.\n // Something about the mobile styles.\n this.onFocus(true);\n }, 100)\n }\n\n if (this.feedbackInput && !fromPanel) {\n // clear input when input creates options\n this.componentInput.value = '';\n this.filterFormControl.setValue('');\n this.feedbackOutput.emit('');\n }\n\n if (this.focused !== focusIn) {\n this.focused = focusIn;\n // clear on close\n if (!focusIn) {\n this.componentInput.value = '';\n this.filterFormControl.setValue('');\n }\n if (!fromPanel) {\n if (focusIn) {\n this.trigger.openPanel();\n } else {\n this.trigger.closePanel();\n // close the mobile full screen\n this.loseFocus();\n }\n }\n }\n }\n\n onChanged(value: SelectOption, event: MatCheckboxChange) {\n this.optionSelected.emit(value);\n }\n\n add(event: MatChipInputEvent) {\n // reset\n if (event.input) {\n event.input.value = '';\n }\n this.filterFormControl.setValue('');\n }\n\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouch = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n // TODO: disabled not implemented yet.\n this.disabled = isDisabled;\n }\n\n writeValue(obj: SelectOption[] | undefined): void {\n // update selected options when this value is written\n this.options?.pipe(\n take(1),\n map((options: SelectOption[]) => {\n return options.filter(o => obj ? !!obj.find(spl => o.value === spl.value) : false );\n })\n ).subscribe(next => {\n this.selectedOptions.next(next);\n });\n }\n\n private scrollEvent = (event): void => {\n if (this.trigger === null) {\n return;\n }\n /**\n * IF - to confirm user not scrolling from autocomplete opened panel and close panel if scroll event triggers from outside of panel\n */\n if (this.trigger.panelOpen && event.target.closest('.mat-autocomplete-panel') === null && !event.srcElement.classList.contains('mat-form-field-autofill-control')) {\n this.onFocus(false);\n this.trigger['_element'].nativeElement.blur();\n }\n }\n public ngOnDestroy(): void {\n window.removeEventListener('scroll', this.scrollEvent, true);\n }\n}\n\n\n","import {\n Pipe,\n PipeTransform\n} from '@angular/core';\nimport { SelectOption } from '../types';\n\n/**\n * Patch orphaned SelectOption children into acting as their own group headers.\n *\n * This intends to help in the common scenario where filters have (for whatever\n * reason) prevented the child's usual group header from appearing.\n */\n@Pipe({\n name: 'groupHeaderPatch',\n})\nexport class GroupHeaderPipe implements PipeTransform {\n transform(items: SelectOption[]): SelectOption[] {\n if (!items) {\n return [];\n }\n\n return items.map(v => {\n const hasHeader = !!items.find(i => i.groupHeader && i.groupId === v.groupId);\n return {\n ...v,\n displayAsHeader: !hasHeader,\n }\n })\n }\n\n}\n","import { Component, Input, Output, forwardRef, SimpleChanges, OnChanges, OnInit, EventEmitter, ViewChild, OnDestroy } from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Observable } from 'rxjs';\nimport { map, startWith } from 'rxjs/operators';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { MatAutocompleteTrigger } from '@angular/material/autocomplete';\nimport {\n BehaviorSubject\n} from 'rxjs';\n\n/**\n * @title Autocomplete filtering select of a single option via text search.\n */\n@Component({\n selector: 'mck-autocomplete-select-option',\n templateUrl: 'auto-complete-select-option.component.html',\n styleUrls: ['auto-complete-select-option.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AutoCompleteSelectOptionComponent),\n multi: true\n }\n ],\n})\nexport class AutoCompleteSelectOptionComponent implements OnInit, OnChanges, ControlValueAccessor, OnDestroy{\n @Input()\n public label: string;\n\n @Input()\n public required: boolean;\n\n @Input()\n public options: SelectOption[] = [];\n\n @Input()\n public selectedValue: SelectOption | undefined;\n\n @Input()\n public resetInput: number | undefined;\n\n @Input()\n public placeholder: string;\n\n @Input()\n public noEntriesFoundLabel: string;\n\n @Output()\n public filteredOptionsChange = new EventEmitter[]>();\n\n @Output()\n public inputTextChange = new EventEmitter();\n\n @Output() emptyBoxEvent = new EventEmitter();\n\n /** Form control on change handler */\n private _onChange: (_: SelectOption) => void;\n /** Form control on touch handler */\n private _onTouch: (_: SelectOption) => void;\n\n filterFormControl = new FormControl();\n filteredOptions: Observable[]>;\n\n /** The selected value */\n public value = new BehaviorSubject('');\n\n /** Available options to search / select from */\n public _options = new BehaviorSubject[]>(this.options);\n @ViewChild('trigger')\n trigger: MatAutocompleteTrigger;\n\n ngOnInit() {\n this.updateFilteredOptions();\n window.addEventListener('scroll', this.scrollEvent, true);\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n // Watch and apply changes from the parent component.\n if (changes.options || changes.selectedValue) {\n if (changes.options && !changes.selectedValue) {\n this.filterFormControl.setValue('')\n }\n this.updateFilteredOptions();\n }\n if (changes.resetInput) {\n this.filterFormControl.setValue('');\n this.updateFilteredOptions();\n }\n \n }\n\n private updateFilteredOptions() {\n this.filteredOptions = this.filterFormControl.valueChanges\n .pipe(\n startWith(''),\n map(value => typeof value === 'string' ? value : value && value?.display ? value.display : ''),\n map(name => name ? this._filter(name) : this.options.slice())\n );\n }\n\n displayFn(data: SelectOption): string {\n return data && data?.display ? data.display : '';\n }\n\n private _filter(display: string): SelectOption[] {\n const filterValue = display.toLowerCase();\n // return all the matches found\n const filtered = this.options.filter(option => {\n // split this input and index both, if both\n // match return true.\n if (filterValue.includes(' ')) {\n const filterValues =filterValue.split(' ');\n let matchesAll = true;\n for (let x = 0; x < filterValues.length; x++) {\n if (option.display.toLowerCase().indexOf(filterValues[x]) === -1) {\n matchesAll = false;\n }\n }\n if (matchesAll) {\n return true;\n }\n }\n // match the whole string\n return option.display.toLowerCase().indexOf(filterValue) > -1;\n });\n this.inputTextChange.emit(filterValue);\n this.filteredOptionsChange.emit(filtered);\n return filtered;\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: SelectOption): void {\n this.value.next(new_value);\n if (this._onChange) {\n this._onChange(this.options.find(f => f.value === new_value.value));\n }\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: SelectOption | null) {\n if (value != null) {\n this.value.next(value.value);\n }\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: SelectOption) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: SelectOption) => void): void {\n this._onTouch = fn;\n }\n\n public onChangeInput() {\n if (this.filterFormControl.value === '') {\n this.emptyBoxEvent.emit(true);\n }\n }\n\n private scrollEvent = (event): void => {\n if (this.trigger === null) {\n return;\n }\n /**\n * IF - to confirm user not scrolling from autocomplete opened panel and close panel if scroll event triggers from outside of panel\n */\n if (this.trigger.panelOpen && event.target.closest('.mat-autocomplete-panel') === null ) {\n this.trigger.closePanel();\n this.trigger['_element'].nativeElement.blur();\n }\n }\n public ngOnDestroy(): void {\n window.removeEventListener('scroll', this.scrollEvent, true);\n }\n\n}","
\n {{label}}\n \n \n \n \n {{option.shortDisplay || option.display}}\n \n \n \n
","import {\n AfterViewInit,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\n/**\n * A helper class for rendering embedded views (ng-template) as standalone components.\n *\n * If the view is lazy and does not render upon initialization,\n * it attempts embedding view again later.\n *\n * When testing a component directly that extends this class, its best to wrap the component\n * in a wrapper component for testing so that it can render itself.\n */\nexport class BaseTemplateComponent extends BaseDirective implements AfterViewInit, OnInit, OnDestroy {\n @ViewChild(TemplateRef, { static: true })\n public template: TemplateRef;\n\n private isRendered = false;\n\n constructor(private vcRef: ViewContainerRef) {\n super();\n }\n\n public ngOnInit(): void {\n // try early rendering\n this.attemptViewEmbed();\n }\n\n public attemptViewEmbed() {\n if (this.template && !this.isRendered) {\n this.isRendered = true;\n this.vcRef.createEmbeddedView(this.template);\n return true;\n }\n return false;\n }\n\n public ngAfterViewInit(): void {\n if (!this.isRendered) {\n console.log('View not rendered yet, attempting to post initialization');\n setTimeout(() => {\n console.log('Timeout ended, trying again', this.template);\n if (!this.attemptViewEmbed()) {\n console.log('Attempting render in after view initialization');\n setTimeout(() => {\n if (!this.attemptViewEmbed()) {\n console.error('FAILED TO LOAD TEMPLATE');\n }\n }, 1000);\n }\n });\n }\n }\n\n public ngOnDestroy(): void {\n super.ngOnDestroy();\n this.isRendered = false;\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'catering-drop-modal',\n templateUrl: './catering-drop-modal.component.html',\n styleUrls: ['./catering-drop-modal.component.scss']\n})\nexport class CateringDropComponent {\n\n constructor(private dialogRef: MatDialogRef) {}\n\n onConfirm(): void {\n this.dialogRef.close(true);\n}\n\nonCancel(): void {\n this.dialogRef.close(false);\n}\n}\n","
\n

Catering conflict

\n
\n\n
\n
\n

Proceed without catering?

\n
\n
\n
\n\n
\n \n \n
\n
","import {\n Component,\n Output,\n TemplateRef,\n ViewChild,\n EventEmitter,\n Input\n } from \"@angular/core\";\n import { DropdownPanel } from \"./dropdown-panel\";\n \n @Component({\n selector: \"cng-select-options\",\n templateUrl: \"./cng-select-options.component.html\",\n styleUrls: [\"./cng-select-options.component.scss\"]\n })\n export class CngSelectOptionsComponent implements DropdownPanel {\n @ViewChild(TemplateRef) templateRef: TemplateRef;\n @Output() closed = new EventEmitter();\n @Input() ddWidth: string;\n \n constructor() {}\n }\n ","\n
\n \n
\n
","import {\n Component,\n Output,\n TemplateRef,\n ViewChild,\n EventEmitter,\n Input,\n OnInit\n } from \"@angular/core\";\n import { DropdownPanel, DropdownOpion } from \"./dropdown-panel\";\n \n @Component({\n selector: \"cng-select\",\n templateUrl: \"./cng-select.component.html\",\n styleUrls: [\"./cng-select.component.scss\"]\n })\n export class CngSelectComponent implements OnInit {\n @Input() data: any;\n public isClosed: boolean = false;\n public selected: DropdownOpion;\n constructor() {\n\n }\n ngOnInit(): void {\n this.selected = this.data.defaultSelected;\n }\n\n public optionSelected(item: DropdownOpion) {\n // this.selected = item;\n this.data.defaultSelected = item;\n this.data?.onChangeCallback && this.data?.onChangeCallback(item);\n }\n }\n ","\n\n
\n {{data?.defaultSelected?.display}}\n
\n \n
\n
\n\n
{{item?.display}}
\n
","import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n ViewContainerRef\n } from '@angular/core';\n import { DropdownPanel } from './dropdown-panel';\n import { Overlay, OverlayRef } from '@angular/cdk/overlay';\n import { TemplatePortal } from '@angular/cdk/portal';\n import { merge, Observable, Subscription } from 'rxjs';\n \n @Directive({\n selector: '[dropdownTriggerFor]',\n host: {\n '(click)': 'toggleDropdown()'\n }\n })\n export class DropdownTriggerForDirective implements OnDestroy, AfterViewInit, OnInit {\n private isDropdownOpen = false;\n private overlayRef: OverlayRef;\n private dropdownClosingActionsSub = Subscription.EMPTY;\n \n @Input('dropdownTriggerFor') public dropdownPanel: DropdownPanel;\n @Output() isPanelOpened = new EventEmitter();\n constructor(\n private overlay: Overlay,\n private elementRef: ElementRef,\n private viewContainerRef: ViewContainerRef,\n private renderer: Renderer2\n ) {\n \n }\n ngOnInit(): void {\n // const cngSelectEl = this.elementRef.nativeElement.nextElementSibling; \n // const parentWidth = this.elementRef.nativeElement.offsetWidth; \n // this.renderer.setStyle(cngSelectEl, 'width', `${parentWidth}px`);\n }\n ngAfterViewInit(): void {\n \n }\n\n \n toggleDropdown(): void {\n this.isDropdownOpen ? this.destroyDropdown() : this.openDropdown();\n \n }\n \n openDropdown(): void {\n let {ddWidth} = this.dropdownPanel;\n this.dropdownPanel.ddWidth = ddWidth !=='' ? ddWidth : `${this.elementRef.nativeElement.offsetWidth}px`;\n this.isDropdownOpen = true;\n this.isPanelOpened.emit(this.isDropdownOpen);\n this.overlayRef = this.overlay.create({\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n scrollStrategy: this.overlay.scrollStrategies.close(),\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withPositions([\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 8\n }\n ])\n });\n \n const templatePortal = new TemplatePortal(\n this.dropdownPanel.templateRef,\n this.viewContainerRef\n );\n this.overlayRef.attach(templatePortal);\n \n this.dropdownClosingActionsSub = this.dropdownClosingActions().subscribe(\n () => this.destroyDropdown()\n );\n }\n \n private dropdownClosingActions(): Observable {\n const backdropClick$ = this.overlayRef.backdropClick();\n const detachment$ = this.overlayRef.detachments();\n const dropdownClosed = this.dropdownPanel.closed;\n \n return merge(backdropClick$, detachment$, dropdownClosed);\n }\n \n private destroyDropdown(): void {\n if (!this.overlayRef || !this.isDropdownOpen) {\n return;\n }\n \n this.dropdownClosingActionsSub.unsubscribe();\n this.isDropdownOpen = false;\n this.isPanelOpened.emit(this.isDropdownOpen);\n this.overlayRef.detach();\n }\n \n ngOnDestroy(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n }\n }\n }\n ","import {\n Component,\n Input,\n OnInit,\n OnDestroy,\n ViewChild,\n AfterViewInit\n} from '@angular/core';\nimport { MatExpansionPanel } from '@angular/material/expansion';\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { CollapseService } from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'mck-collapse-header',\n template: `\n \n \n {{title}}\n
\n
\n \n
\n \n
\n
\n {{description}}\n \n \n \n \n `,\n styleUrls: ['./collapse-header.component.scss'],\n})\nexport class CollapseHeaderComponent implements OnInit, OnDestroy {\n\n @Input() title: string;\n @Input() description: string;\n @Input() isLoading = false;\n\n @ViewChild('expansionPanel') expansionPanel: MatExpansionPanel;\n\n public isExpanded = new BehaviorSubject(false);\n private collapseSubscription: Subscription;\n\n constructor(private collapseService: CollapseService) {}\n\n ngOnInit(): void {\n this.collapseSubscription = this.collapseService.collapse$.subscribe(() => {\n if (this.expansionPanel) {\n this.expansionPanel.close(); // Close the panel\n }\n });\n }\n\n ngOnDestroy(): void {\n this.collapseSubscription.unsubscribe();\n }\n}\n","import { ChangeDetectionStrategy, Component, Inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\nexport interface RoomAvaibilityModalData {\n\theaderText: string,\n\tmessage: string,\n\tbuttonLabel: string,\n\tcallback: Function,\n shouldClose: boolean\n}\n\n@Component({\n selector: 'conflict-alert-modal',\n templateUrl: 'conflict-alert-modal.component.html',\n styleUrls: ['./conflict-alert-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class ConflictAlertModalComponent implements OnInit {\n constructor(public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public dialogData: RoomAvaibilityModalData) {\n }\n ngOnInit(): void {}\n\n public done() {\n this.dialogData?.callback(); this.dialogRef.close()\n }\n}\n","
\n \n
\n\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{{dialogData?.headerText}}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
{{dialogData?.message}}
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t\n\t\t\t\t\t \n\t\t\t\n
","import {Component, EventEmitter, Inject, Input, OnInit, Output} from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport {DialogEvent} from '@mckinsey-converge/base';\nimport {DateTZ, isToday} from '@mckinsey-converge/date-tz';\n\nexport interface ConflictsModalComponentData {\n room_name: string;\n conflicts: number[];\n copy_conflicts?: boolean;\n timezone: string;\n status?: string;\n}\n\n@Component({\n selector: 'app-conflicts-modal',\n templateUrl: './conflicts-modal.component.html',\n styleUrls: ['./conflicts-modal.component.scss']\n})\nexport class ConflictsModalComponent implements OnInit{\n public room_name: string;\n public conflicts: number[];\n public copy_conflicts: boolean;\n public timezone;\n public status: string;\n\n\n @Output() public event = new EventEmitter();\n\n constructor(@Inject(MAT_DIALOG_DATA) private _data: ConflictsModalComponentData){\n\n }\n\n public ngOnInit(){\n this.timezone = this._data.timezone;\n this.room_name = this._data.room_name\n this.conflicts = this._data.conflicts\n this.copy_conflicts = this._data.copy_conflicts\n this.status = this._data.status\n }\n\n public formatDate(date: number) {\n const dateTZ = new DateTZ({date: date*1000, is_local_tz: false, building_tz: this._data.timezone});\n const dateIsToday = isToday(dateTZ, this.timezone);\n const display = dateTZ.formatDate('ccc dd MMM yyyy');\n return `${display}${dateIsToday ? ' (Today)' : ''}`;\n }\n\n public continue(): void {\n this.event.emit({ reason: 'done' });\n }\n\n public close(): void {\n this.event.emit({ reason: 'close' });\n }\n\n public copy(): void {\n this.event.emit({ reason: 'action' });\n }\n\n\n}\n","
\n \n
\n\n
\n

Conflicts ({{conflicts.length}})

\n
\n The {{room_name}} room is not available on the following dates.\n Do you want to proceed without booking these days?\n
\n
\n The {{room_name}} room is not available on the following dates.\n You need to make individual bookings to cover these days, please.\n
\n
\n
\n
\n Date\n
\n
\n
\n {{formatDate(conflict)}}\n
\n
\n
\n
\n\n \n {{copy_conflicts ? 'Copy to clipboard' : 'Close'}}\n \n \n {{copy_conflicts ? 'Close' : 'Continue'}}\n \n\n","import { Component, OnInit, Inject } from '@angular/core';\nimport { MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar';\n\n@Component({\n selector: 'custom-snackbar',\n templateUrl: './custom-snackbar-component.component.html',\n styleUrls: ['./custom-snackbar-component.component.scss'],\n})\nexport class CustomSnackbarComponent implements OnInit {\n constructor(@Inject(MAT_SNACK_BAR_DATA) public data: any) {\n }\n\n ngOnInit() {}\n\n get getIcon() {\n switch (this.data.snackType) {\n case 'success':\n return {\n type: this.data.snackType,\n iconPath: 'assets/icon/toast-success.svg',\n };\n case 'error':\n return {\n type: this.data.snackType,\n iconPath: 'assets/icon/toast-failure.svg',\n };\n case 'warn':\n return {\n type: this.data.snackType,\n iconPath: 'assets/icon/toast-warning.svg',\n };\n case 'info':\n return {\n type: this.data.snackType,\n iconPath: 'assets/icon/toast-info.svg',\n };\n default:\n return { type: 'info', iconPath: 'assets/icon/toast-info.svg' };\n }\n }\n\n closeSnackbar() {\n this.data.snackBar.dismiss();\n }\n}\n","
\n
\n
\n \"{{getIcon.type}}\n
\n
\n {{data.message}}\n
\n
\n
\n
close
\n
\n
","import { Injectable } from '@angular/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { CustomSnackbarComponent } from './custom-snackbar-component.component';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SnackBarService {\n messageText: string[];\n constructor(public snackBar: MatSnackBar) {}\n\n public openSnackBar(\n message,\n type,\n duration?,\n verticalPosition?,\n horizontalPosition?\n ) {\n const _snackType = type !== undefined ? type : 'success';\n this.snackBar.openFromComponent(CustomSnackbarComponent, {\n duration: duration || 4000,\n horizontalPosition: horizontalPosition || 'end',\n verticalPosition: verticalPosition || 'top',\n data: {\n message: message,\n snackType: _snackType,\n snackBar: this.snackBar,\n },\n });\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n Output,\n OnChanges,\n SimpleChanges,\n forwardRef,\n EventEmitter,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BaseClass } from '@mckinsey-converge/base';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\nexport interface IDateTzPickerOptions {\n /** DateTZ object. First selectable date */\n fromDateTz?: DateTZ;\n /** DateTZ object. Last selectable date */\n untilDateTz?: DateTZ;\n /** Luxon format string for formatting days of the week. Defaults to `DDD` */\n day_format?: string;\n /** Luxon format string for formatting active month. Defaults to `MMMM yyyy` */\n month_format?: string;\n}\n\ninterface IDateBlock {\n /** Timestamp value of the date */\n value: DateTZ;\n /** Day of the month to display */\n display: string;\n /** Whether block is the selected date */\n active: boolean;\n /** Whether block not selectable */\n disabled: boolean;\n /** Whether block outside the active month */\n non_month: boolean;\n /** Whether the block is today */\n today: boolean;\n /** Number of events on this block */\n count?: number;\n}\n\n@Component({\n selector: 'date-tz-calendar-widget',\n templateUrl: './date-tz-calendar-widget.component.html',\n styleUrls: ['./date-tz-calendar-widget.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateTzCalendarWidgetComponent),\n multi: true,\n },\n ],\n})\nexport class DateTzCalendarWidgetComponent\n extends BaseClass\n implements OnInit, OnChanges, ControlValueAccessor\n{\n /** CSS class to add to the root element of the component */\n @Input() public className = 'default';\n /** Counters of the events on given dates. Key format is `yyyy-MM-dd` */\n @Input() public counters: { [date: string]: number };\n /** Settings for the date picker component */\n @Input() public options: IDateTzPickerOptions;\n /** Offset of the display month from the current month */\n @Output() public month = new EventEmitter();\n\n public readonly weeks = new Array(6).fill(0);\n public selectedDateTz: DateTZ = DateNow();\n\n // R--- this is the date picker that needs to be TZ aware\n /** Offset of the month displayed from the current month */\n public offset = 0;\n /** Minimum offset for changing the month */\n public min_offset = -999999;\n /** Maximum offset for changing the month */\n public max_offset = 999999;\n /** Blocks representing the rendering details of the display days of the month */\n public date_list: IDateBlock[] = [];\n /** Name of the actively displayed month */\n public month_name = DateNow(new Date()).formatDate('MMMM yyyy');\n /** Name of the days of the week to display */\n public days_of_week = [];\n /** First selectable date */\n private fromTz: DateTZ;\n /** Last selectable date */\n private toTz: DateTZ;\n /** Luxon format string for formatting days of the week. Defaults to `dd` */\n private day_format = 'EEE';\n /** Luxon format string for formatting active month. Defaults to `MMMM yyyy` */\n private month_format = 'MMMM yyyy';\n /** Form control on change handler */\n private _onChange: (_: DateTZ) => void;\n /** Form control on touch handler */\n private _onTouch: (_: DateTZ) => void;\n\n private _today = DateNow();\n\n public get timezone() {\n return this.selectedDateTz?.building_tz || '';\n }\n\n public ngOnInit(): void {\n this.generateMonth();\n this.generateDaysOfTheWeek();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.options) {\n this.updateOptions();\n }\n if (changes.counters) {\n this.generateMonth();\n }\n }\n\n /** Change date using the given block */\n public setDate(item: IDateBlock) {\n this.selectedDateTz = item.value;\n if (this._onChange) {\n this._onChange(this.selectedDateTz);\n }\n this.generateMonth();\n }\n\n /**\n * Update offset to show the selected date 2\n */\n public updateDate(): void {\n if (!this.selectedDateTz) {\n return;\n }\n const now = this._today.startOfValue('month');\n const startOfMonthDateTz = this.selectedDateTz.startOfValue('month');\n if (startOfMonthDateTz.valid) {\n const difference = startOfMonthDateTz.dateDiff(\n now,\n 'months',\n 'months'\n );\n if (this.offset !== difference) {\n this.offset = Math.round(difference);\n this.month.emit(this.offset);\n }\n this.generateMonth();\n }\n }\n\n /**\n * Update local properties based off changes to settings\n */\n public updateOptions(): void {\n if (this.options) {\n // Setup from date\n if (this.options.fromDateTz) {\n const today = this._today.startOfValue('month');\n this.fromTz = this.options.fromDateTz.startOfValue('day');\n this.min_offset = Math.round(\n this.fromTz\n .startOfValue('month')\n .dateDiff(today, 'months', 'months')\n );\n } else if (this.fromTz) {\n this.fromTz = null; // R-- check if ok\n this.min_offset = -999999;\n }\n // Setup to date\n if (this.options.untilDateTz) {\n const today = this._today.startOfValue('month');\n this.toTz = this.options.untilDateTz.startOfValue('day');\n this.max_offset = this.toTz\n .startOfValue('month')\n .dateDiff(today, 'months', 'months');\n } else if (this.toTz) {\n this.toTz = null;\n this.max_offset = 999999;\n }\n if (this.options.month_format) {\n this.month_format = this.options.month_format || 'MMMM yyyy';\n }\n if (this.options.day_format) {\n this.day_format = this.options.day_format || 'EEE';\n this.generateDaysOfTheWeek();\n }\n // Update date blocks\n this.generateMonth();\n }\n }\n\n /**\n * Generate the display blocks for the days of the active month\n */\n private generateMonth(): void {\n this._today = new DateTZ({ date: Date.now(), is_local_tz: !this.timezone, building_tz: this.timezone });\n const startOfMonthDateTz = this._today.addValue({ months: this.offset });\n const active = this.selectedDateTz || DateNow();\n let startDate = startOfMonthDateTz\n .setValue({ day: 1 })\n .setValue({ weekday: 7 })\n .subtractValue({ weeks: 1 });\n this.date_list = [];\n for (let i = 0; i < 42; i++) {\n this.date_list.push({\n value: startDate,\n display: startDate.formatDate('d'),\n active: active.isSameDate(startDate, 'day'),\n non_month: !startOfMonthDateTz.isSameDate(startDate, 'month'),\n count: this.counters\n ? this.counters[startDate.formatDate('yyyy-MM-dd')] || 0\n : 0,\n disabled:\n (this.fromTz ? startDate.ms < this.fromTz.ms : false) ||\n (this.toTz ? startDate.ms > this.toTz.ms : false),\n today: this._today.isSameDate(startDate, 'day'),\n });\n startDate = startDate.addValue({ days: 1 });\n }\n this.month_name = startOfMonthDateTz.formatDate(this.month_format);\n }\n\n /**\n * Generate this weekdays to display in the header of the calendar\n */\n private generateDaysOfTheWeek() {\n let date = this._today.startOfValue('week');\n this.days_of_week = [];\n for (let i = 0; i < 7; i++) {\n this.days_of_week.push(date.formatDate(this.day_format));\n date = date.addValue({ days: 1 });\n }\n }\n\n /**\n * Changes the month offset by the given value.\n * Does nothing if the new month is not available to be selected\n * @param value Number of months to change the offset by\n */\n public changeMonth(value: number): void {\n const new_offset = Math.min(\n this.max_offset,\n Math.max(this.min_offset, this.offset + value)\n );\n this.offset = Math.round(new_offset);\n this.generateMonth();\n this.month.emit(this.offset);\n }\n\n /**\n * Reset the month offset to the month of the selected date\n */\n public reset() {\n const offset = this.offset;\n this.offset = Math.round(\n this._today.dateDiff(this.selectedDateTz, 'months', 'months')\n );\n if (offset !== this.offset) this.generateMonth();\n this.month.emit(this.offset);\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: DateTZ) {\n if (value) {\n this.selectedDateTz = value;\n this.updateDate();\n this.generateMonth();\n }\n }\n\n public readonly registerOnChange = (fn: (_: DateTZ) => void) => this._onChange = fn;\n public readonly registerOnTouched = (fn: (_: DateTZ) => void) => this._onTouch = fn;\n}\n","
\n
\n \n
\n \n
{{ month_name }}
\n = max_offset\"\n (click)=\"changeMonth(1)\"\n >\n
\n \n
\n \n \n \n \n \n \n \n \n \n
{{ item }}
\n \n {{ item.display }}\n
\n
{{item.count > 9 ? '+9' : item.count}}
\n \n
\n
\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n ViewChild,\n OnInit\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\n\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport {\n BehaviorSubject,\n Observable\n} from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { DateTzCalendarWidgetComponent } from '../date-tz-calendar-widget/date-tz-calendar-widget.component';\n\n@Component({\n selector: 'date-tz-date-picker',\n template: `\n \n {{label}}\n \n
{{ dateString | async }}
\n
\n \n
\n \n \n \n
\n \n Today\n \n
\n
\n \n `,\n styleUrls: ['./date-tz-date-picker.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateTzDatePickerComponent),\n multi: true\n }\n ]\n})\nexport class DateTzDatePickerComponent extends BaseDirective implements OnInit, ControlValueAccessor {\n @Input() public label?: string;\n /** Earliest date available the user is allowed to pick */\n @Input() public fromDateTz: DateTZ = DateNow(new Date());\n /** Latest date available the user is allowed to pick */\n @Input() public untilDateTz: DateTZ = DateNow(new Date()).endOfValue('day').addValue({ years: 1 });\n /** Position of the tooltip */\n @Input() public position: 'right' | 'left' = 'right';\n /** Offset of the tooltip */\n @Input() public offset: 'top' | 'bottom' = 'bottom';\n /** Whether form control is disabled */\n @Input() public disabled: boolean;\n // R-- possible TODO, address all_day that disables this input and displays \"Add Day for the value like the time picker\"\n @Input() public all_day: boolean = false;\n /** Whether to show the calendar tooltip */\n @Input() public icon_only: boolean = false;\n\n @Input() public counters: any;\n\n @Input() public initialDateSelectionTz?: DateTZ;\n\n @Output() public onSelect = new EventEmitter();\n\n @Input() public invalid?: boolean;\n\n @Input() public timezone?: string;\n\n @Input() public can_pick_today: boolean = true;\n\n /** Whether form control is invalid, touched and contains errors */\n @Input() public error?: boolean;\n\n public ngOnInit(): void {\n if (this.initialDateSelectionTz) {\n this.writeValue(this.initialDateSelectionTz)\n }\n }\n\n /** Whether to show the calendar tooltip */\n public show_tooltip: boolean;\n /** Form control on change handler */\n private _onChange: (_: DateTZ) => void;\n /** Form control on touch handler */\n private _onTouch: (_: DateTZ) => void;\n\n @ViewChild(MatMenuTrigger, { static: true }) private _trigger: MatMenuTrigger;\n @ViewChild(DateTzCalendarWidgetComponent, {static: true }) private _acaDatePicker: DateTzCalendarWidgetComponent;\n /** Currently selected date */\n public selectedDateTzValue = new BehaviorSubject(DateNow(new Date()));\n\n /** Display value for the current date */\n public get dateString(): Observable {\n return this.selectedDateTzValue.pipe(map(d => {\n const display = d.formatDate('ccc dd MMM yyyy');\n return `${display}${d.isSameDate(new DateTZ({ is_local_tz: false, building_tz: d.building_tz }), 'day') ? ' (Today)' : ''}`;\n }));\n }\n\n /** Whether date picker is open */\n public get is_open(): boolean {\n return this._trigger.menuOpen;\n }\n\n // date\n public get dateTzObservable(): Observable {\n return this.selectedDateTzValue.pipe(map(d => {\n return d \n }));\n\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(newValueTz: DateTZ) {\n // Keep hours and minutes of the old date\n const old_date = this.selectedDateTzValue.value;\n let newDateTz = newValueTz.setValue({ hour: old_date.dateHour, minute: old_date.minutes, second: old_date.second });\n\n // Check that new date is before from\n if (newDateTz.ms < this.fromDateTz.ms) {\n newDateTz = this.fromDateTz;\n }\n\n this.selectedDateTzValue.next(newDateTz);\n if (this._onChange) {\n this._onChange(newDateTz);\n }\n\n this.onSelect.emit(newDateTz);\n this.show_tooltip = false;\n }\n\n public goToToday() {\n const building_tz = this.timezone || this.fromDateTz.building_tz\n const is_local_tz = DateNow(new Date()).building_tz === building_tz\n this.setValue(new DateTZ({ is_local_tz, building_tz }));\n }\n\n public resetToLastSelection = () => this._acaDatePicker.updateDate();\n\n public onDatePickerClose() {\n this.resetToLastSelection();\n }\n /* istanbul ignore next */\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(selectedDateTz: DateTZ) {\n this.selectedDateTzValue.next(selectedDateTz);\n this.show_tooltip = false;\n }\n\n public readonly registerOnChange = (fn: (_: DateTZ) => void) => this._onChange = fn;\n public readonly registerOnTouched = (fn: (_: DateTZ) => void) => this._onTouch = fn;\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /** Set the state of the tooltip to closed after delay */\n public closeDatePicker() {\n this._trigger.closeMenu();\n }\n\n /** Set the state of the tooltip to closed after delay */\n public openDatePicker() {\n this._trigger.openMenu();\n }\n}\n","import {\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n BaseDirective,\n DurationGroup,\n nearestDurationToInput,\n} from '@mckinsey-converge/base';\nimport {\n ControlValueAccessor,\n FormControl,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\nimport {\n BehaviorSubject,\n combineLatest\n} from 'rxjs';\n\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { map } from 'rxjs/operators'; \nimport {\n DEFAULT_DURATION,\n defaultDurationGroups,\n generateDurationOptionsFromGroups\n} from '../utils/time.utils';\nimport { MatSelect } from '@angular/material/select';\nimport { convertLocalTimestampToTimezonedDateTz, convertTimezonedTimestampToLocalDateTz, DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n@Component({\n selector: 'date-tz-duration-field',\n template: `\n
\n {{label}}\n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n
\n `,\n styleUrls: ['./date-tz-duration-field.component.css'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateTzDurationFieldComponent),\n multi: true\n }\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class DateTzDurationFieldComponent extends BaseDirective implements OnInit, ControlValueAccessor, OnChanges {\n @Input() public label?: string;\n @Input() public required: boolean;\n @Input() max_length?: number;\n\n // /** Whether form field is disabled */\n // @Input() public disabled: boolean;\n /** Start date value to count from */\n @Input() public startDateTz: DateTZ;\n /** Set to limit the duration options */\n @Input() public extended?: boolean;\n /** Whether form all_day is enabled. */\n // R-- need to address all_day that disables this input and displays \"Add Day for the value\"\n @Input() public all_day: boolean = false;\n\n /**\n * Specify the slice of durations to use when generating options.\n */\n @Input() public durationGroups: DurationGroup[] = defaultDurationGroups;\n\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n /** Select field for selecting the time */\n @ViewChild('select') private select_field: MatSelect;\n\n /** Component will return a number of minutes */\n public value = new BehaviorSubject(DEFAULT_DURATION);\n\n public currentStartDateTz = new BehaviorSubject(DateNow(new Date()));\n\n public filterFormControl: FormControl = new FormControl();\n\n public nearestStep = combineLatest([this.filterFormControl.valueChanges, this.currentStartDateTz]).pipe(\n \n map(([value, currentStartDate]) => { \n /**\n * convert current start date/time to building time zone first\n * \n */\n const ms = convertTimezonedTimestampToLocalDateTz(currentStartDate.ms, currentStartDate.building_tz).ms;\n return nearestDurationToInput(this.durationGroups, ms, value); \n }\n ));\n\n public options = new BehaviorSubject[]>([]);\n\n public placeHolderOption = this.options.pipe(\n map(options => options.find(o => o.value === DEFAULT_DURATION))\n );\n\n public selectedOption = combineLatest([this.options, this.value]).pipe(\n map(([options, value]) => options.find(o => o.value === value))\n );\n\n public isSelected(option: SelectOption) {\n return this.value.pipe(map(t => t === option.value));\n }\n\n public isDisabled(option: SelectOption) {\n return this.max_length ? option.value > this.max_length : false;\n }\n\n public get isOpen() {\n return this.select_field?.panelOpen ?? false;\n }\n\n ngOnInit(): void {\n this.subscription('OptionsCalculation',\n this.currentStartDateTz.pipe(\n map(d => generateDurationOptionsFromGroups(d, this.durationGroups, this.extended))\n ).subscribe(next => {\n this.options.next(next);\n }));\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.timezone) {\n const dopt = generateDurationOptionsFromGroups(this.currentStartDateTz.value, this.durationGroups, this.extended);\n this.options.next(dopt);\n }\n if (changes.startDateTz) {\n this.currentStartDateTz.next(changes.startDateTz.currentValue);\n }\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: number): void {\n this.writeValue(new_value);\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n writeValue(obj: number): void {\n this.value.next(obj);\n if (this._onChange) {\n this._onChange(obj);\n }\n }\n\n // public setDisabledState(disabled: boolean) {\n // this.disabled = disabled;\n // }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n}\n","import {\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { MatSelect } from '@angular/material/select';\n\nimport {\n BaseDirective,\n closestToTimeSlotTz,\n nearestStepToInput,\n timeWithGmtOffsetFormatString,\n} from '@mckinsey-converge/base';\n\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport {\n generateAvailableTimes,\n generateAvailableTimesTz,\n} from '../utils/time.utils';\nimport { BehaviorSubject, combineLatest } from 'rxjs';\nimport { filter, map, withLatestFrom } from 'rxjs/operators';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { DateTime } from 'luxon';\n\n@Component({\n selector: 'date-tz-time-field',\n template: `\n
\n {{\n label\n }}\n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n
\n `,\n styleUrls: ['./date-tz-time-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateTzTimeFieldComponent),\n multi: true,\n },\n ],\n encapsulation: ViewEncapsulation.None,\n})\nexport class DateTzTimeFieldComponent\n extends BaseDirective\n implements OnInit, OnChanges, ControlValueAccessor\n{\n @Input() public label?: string;\n @Input() public required: boolean;\n /** Time step between each allowed time option */\n @Input() public step = 15;\n /** Whether form field is disabled */\n // @Input() public disabled: boolean;\n /** Whether past times are allowed */\n @Input() public noPastTimes = true;\n /** Representing the DateTZ object datetime to start time options from **/\n @Input() public fromDateTz: DateTZ = DateNow(new Date());\n // Disables this input and displays R--- \"All Day\" for the value\n @Input() public all_day: boolean = false;\n @Input() public show_current: boolean = false;\n @Input() public startFromDateTz: boolean = false;\n\n /** Form control on change handler */\n private _onChange: (_: DateTZ) => void;\n /** Form control on touch handler */\n private _onTouch: (_: DateTZ) => void;\n\n /** Select field for selecting the time */\n @ViewChild('select') private select_field: MatSelect;\n /** DateTZ object representing the currently set datetime */\n public selectedDateTz = new BehaviorSubject(\n closestToTimeSlotTz(DateNow(new Date()), this.step)\n );\n\n /** string representing the currently set datetime display value, needed for the input to display the slected value */\n public selectedTimeString = new BehaviorSubject(\n timeWithGmtOffsetFormatString(this.selectedDateTz.value)\n );\n\n public filterFormControl: FormControl = new FormControl();\n\n /** Available time blocks for the selected date */\n public options = new BehaviorSubject[]>(\n generateAvailableTimesTz(\n DateNow(),\n !this.noPastTimes,\n this.step,\n this.timezone,\n this.all_day,\n this.show_current\n ? [generateOptionForDateTz(DateNow())]\n : [],\n this.startFromDateTz\n )\n );\n\n public ngOnInit(): void {\n // Generate the time input options for the booking date\n this.options.next(\n generateAvailableTimesTz(\n this.selectedDateTz.value,\n !this.noPastTimes,\n this.step,\n this.timezone,\n this.all_day,\n this.show_current\n ? [generateOptionForDateTz(this.selectedDateTz.value)]\n : [],\n this.startFromDateTz\n )\n );\n // Subscribe to selected option changes\n this.subscription(\n 'dateTimeChanges',\n combineLatest([this.selectedDateTz])\n .pipe(\n map(([selectedDateTz]) => {\n /**\n * The selectedDateTz should already be pegged to the closest time slot, but\n * if the selected time rolls into the past this can correct it. // R--- verify this statement\n */\n return closestToTimeSlotTz(selectedDateTz, this.step);\n }),\n withLatestFrom(this.options),\n filter(\n ([date, timeOptions]: [\n DateTZ,\n SelectOption[]\n ]) => {\n // if new time slot opened up when date / time changes, add it here.\n return !timeOptions.find(\n (t) => t.value === date.formatDate('HH:mm')\n );\n }\n ),\n map(([dateTz, timeOptions]) => {\n // TODO probably an issue here with going from a future date and time earlier than now back to day showing null\n // Push the current date option in\n timeOptions.push({\n display: timeWithGmtOffsetFormatString(dateTz),\n shortDisplay: dateTz.formatDate('hh:mma'),\n value: dateTz,\n });\n\n // Sort the time options\n timeOptions.sort((a, b) =>\n `${a.value}`.localeCompare(`${b.value}`)\n );\n return timeOptions;\n })\n )\n .subscribe((next) => {\n return this.options.next(next);\n })\n );\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (\n changes.no_past_times ||\n changes.step ||\n changes.fromDateTz ||\n changes.all_day\n ) {\n // If there's a new date value then update the time options\n this.options.next(\n generateAvailableTimesTz(\n this.selectedDateTz.value,\n !this.noPastTimes,\n this.step,\n this.timezone,\n this.all_day,\n this.show_current\n ? [generateOptionForDateTz(this.selectedDateTz.value)]\n : [],\n this.startFromDateTz\n )\n );\n // If today and all day goes from on to off the selected value isn't going to be available.\n if (\n changes.all_day &&\n !changes.all_day.currentValue &&\n changes.all_day.previousValue\n ) {\n this.setValue(this.options.value[0].display);\n }\n }\n }\n\n /**\n * Getter if the time picker options are visiable or not\n */\n public get isOpen() {\n return this.select_field?.panelOpen ?? false;\n }\n\n /**\n * Getter to return the current form timestamp from the from date object\n */\n public get timezone(): string {\n return this.fromDateTz.building_tz;\n }\n\n /**\n * A filter for finding a matching value when using the input text search\n */\n public nearestStep = combineLatest([\n this.filterFormControl.valueChanges,\n this.selectedDateTz,\n ]).pipe(\n map(([value, selectedDateTz]) => {\n return nearestStepToInput(\n this.step,\n value,\n DateTime.now().valueOf()\n );\n })\n );\n\n /**\n * Default text displayed in the search field when the component initializes\n */\n public placeHolderOption = this.options.pipe(\n map((os) => os.length > 0 && os[0])\n );\n\n /**\n * Returns the selected option object by matching the selectedDateTz formated string with the option.display string\n */\n public selectedOption = combineLatest([\n this.options,\n this.selectedDateTz,\n ]).pipe(\n map(([options, selectedDateTz]) =>\n options.find(\n (o) =>\n o.display === timeWithGmtOffsetFormatString(selectedDateTz)\n )\n )\n );\n\n /**\n * Determines the visually selected value when the options list is visible.\n *\n * @param option DateTZ\n * @returns boolean\n */\n public isSelected(option: SelectOption) {\n return this.selectedTimeString.value === option.display;\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: DateTZ) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: DateTZ) => void): void {\n this._onTouch = fn;\n }\n\n /**\n * Method just used in unit tests to test disabling the input\n * @param disabled\n */\n // public setDisabledState(disabled: boolean) {\n // this.disabled = disabled;\n // }\n\n /**\n * Update the selected values\n * @param dateTz the DateTz object for the new time\n */\n public setSelectedValues(dateTz: DateTZ) {\n // Update the selected DateTz and string representations\n this.selectedTimeString.next(timeWithGmtOffsetFormatString(dateTz));\n this.selectedDateTz.next(dateTz);\n if (this._onChange) {\n this._onChange(dateTz);\n }\n }\n\n /**\n * Update the form field value\n * @param displayString The \"display\" value of this.options set by the time picker\n */\n public setValue(displayString: string): void {\n // Convert the display time string to the actual option object via an array find.\n const newTimeTz = this.options.value.find(\n (opt) => opt.display === displayString\n ).value;\n // Update the selected DateTz and string representations\n this.setSelectedValues(newTimeTz);\n // Send the\n if (newTimeTz) {\n if (this._onChange) {\n this._onChange(newTimeTz);\n }\n }\n }\n\n /**\n * Fires when the form control value is changed\n * @param dateTz The new value for the component\n */\n public writeValue(dateTz: DateTZ | null) {\n // Init is null ?\n if (dateTz != null) {\n // Update the selected DateTz and string representations\n this.setSelectedValues(dateTz);\n // Update the available options\n this.options.next(\n generateAvailableTimesTz(\n dateTz,\n !this.noPastTimes,\n this.step,\n dateTz.building_tz,\n this.all_day,\n this.show_current\n ? [generateOptionForDateTz(dateTz)]\n : [],\n this.startFromDateTz\n )\n );\n }\n }\n}\n\nfunction generateOptionForDateTz(dateTz: DateTZ): SelectOption {\n return {\n display: timeWithGmtOffsetFormatString(dateTz),\n shortDisplay: dateTz.formatDate('hh:mma'),\n value: dateTz, \n }\n}\n","import {\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n BaseDirective,\n nearestDurationToInput,\n DurationGroup,\n} from '@mckinsey-converge/base';\nimport {\n ControlValueAccessor,\n FormControl,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\nimport {\n BehaviorSubject,\n combineLatest\n} from 'rxjs';\n\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport {\n map\n} from 'rxjs/operators';\nimport {\n DEFAULT_DURATION,\n defaultDurationGroups,\n generateDurationOptionsFromGroups\n} from '../utils/time.utils';\nimport { MatSelect } from '@angular/material/select';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n@Component({\n selector: 'mck-duration-field',\n template: `\n
\n {{label}}\n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n
\n `,\n styleUrls: ['./duration-field.component.css'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DurationFieldComponent),\n multi: true\n }\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class DurationFieldComponent extends BaseDirective implements OnInit, ControlValueAccessor, OnChanges {\n @Input()\n public label: string;\n @Input()\n public required: boolean;\n @Input() max_length?: number;\n\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Start date value to count from */\n @Input() public startDate: number;\n /** Set to limit the duration options */\n @Input() public extended?: boolean;\n /** Representing desired timezone **/\n @Input() public timezone?: string = new DateTZ({ date: Date.now() }).local_tz;\n\n /**\n * Specify the slice of durations to use when generating options.\n */\n @Input() public durationGroups: DurationGroup[] = defaultDurationGroups;\n\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n /** Select field for selecting the time */\n @ViewChild('select') private select_field: MatSelect;\n\n public value = new BehaviorSubject(DEFAULT_DURATION);\n\n public currentStartDate = new BehaviorSubject(DateNow(new Date()));\n\n public filterFormControl: FormControl = new FormControl();\n\n public nearestStep = combineLatest([this.filterFormControl.valueChanges, this.currentStartDate]).pipe(\n map(([value, currentStartDate]) => nearestDurationToInput(this.durationGroups, currentStartDate.ms, value)\n ));\n\n public options = new BehaviorSubject[]>([]);\n\n public placeHolderOption = this.options.pipe(\n map(options => options.find(o => o.value === DEFAULT_DURATION))\n );\n\n public selectedOption = combineLatest([this.options, this.value]).pipe(\n map(([options, value]) => options.find(o => o.value === value))\n );\n\n public isSelected(option: SelectOption) {\n return this.value.pipe(map(t => t === option.value));\n }\n\n public isDisabled(option: SelectOption) {\n return this.max_length ? option.value > this.max_length : false;\n }\n\n public get isOpen() {\n return this.select_field?.panelOpen ?? false;\n }\n\n ngOnInit(): void {\n this.subscription('OptionsCalculation',\n this.currentStartDate.pipe(\n map(d => generateDurationOptionsFromGroups(d.toZone(this.timezone), this.durationGroups, this.extended))\n ).subscribe(next => {\n this.options.next(next);\n }));\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.timezone) {\n const dopt = generateDurationOptionsFromGroups(this.currentStartDate.value.toZone(this.timezone), this.durationGroups, this.extended);\n this.options.next(dopt);\n }\n if (changes.startDate) {\n // R--- refactor input param\n const date = new DateTZ({date: this.startDate})\n this.currentStartDate.next(date);\n }\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: number): void {\n this.writeValue(new_value);\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n writeValue(obj: number): void {\n this.value.next(obj);\n if (this._onChange) {\n this._onChange(obj);\n }\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'mck-error-message',\n template: `\n
\n
\n
\n \n \n \n
\n
\n `,\n styleUrls: ['./error-message.component.scss']\n})\nexport class ErrorMessageComponent {\n\n constructor() {\n }\n\n}\n","import {\n Component,\n Input,\n ViewContainerRef\n} from '@angular/core';\nimport { BaseTemplateComponent } from '../../base-template.component';\n\n@Component({\n selector: 'mck-calendar-icon',\n template: `\n \n \n \n \n \n `,\n})\nexport class CalendarIconComponent extends BaseTemplateComponent {\n\n @Input()\n fillClass?: string;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n}\n","import {\n Component,\n Input,\n ViewContainerRef\n} from '@angular/core';\nimport { BaseTemplateComponent } from '../../base-template.component';\n\n@Component({\n selector: 'mck-chevron-icon',\n template: `\n \n \n
\n \n \n \n
\n
\n \n
\n `\n})\nexport class ChevronIconComponent extends BaseTemplateComponent {\n\n @Input()\n fillClass?: string;\n\n @Input()\n up?: boolean;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n}\n","import {\n Component,\n Input,\n OnInit\n} from '@angular/core';\n\n@Component({\n selector: 'mck-close-icon',\n template: `\n \n \n \n \n `\n})\nexport class CloseIconComponent implements OnInit {\n\n @Input()\n fillClass?: string;\n\n constructor() {\n }\n\n ngOnInit(): void {\n }\n\n}\n","import {\n Component,\n Input,\n ViewContainerRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { BaseTemplateComponent } from '../base-template.component';\n\n@Component(\n {\n selector: 'mck-informational-image',\n template: `\n \n
\n
\n
\n \n
\n
\n
\n
\n `,\n styleUrls: ['./informational-image.component.scss'],\n encapsulation: ViewEncapsulation.None\n }\n)\nexport class InformationalImageComponent extends BaseTemplateComponent {\n\n @Input()\n public src: string;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n}\n","import {\n Component,\n Input,\n OnInit,\n ViewContainerRef\n} from '@angular/core';\nimport { BaseTemplateComponent } from '../base-template.component';\n\n@Component({\n selector: 'mck-label',\n template: `\n \n \n \n *\n \n \n `,\n styleUrls: ['./label.component.scss']\n})\nexport class LabelComponent extends BaseTemplateComponent implements OnInit {\n\n @Input()\n required = false;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n\n}\n","import {\n Component,\n Input,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { MatSelect } from '@angular/material/select';\nimport { SelectOption } from '../options/select-option';\n\n@Component({\n selector: 'mck-legend-dropdown',\n template: `\n
\n \n \n \n \n
\n \n \n \n {{ buildPlaceholder() }}\n \n
\n \n
\n \n
\n `,\n styleUrls: ['./legend-dropdown.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class LegendDropdownComponent {\n\n @Input()\n public placeholder: string;\n\n @Input()\n public options: SelectOption[] = [];\n\n @Input()\n public placeholderOpen?: string\n\n /** Select field for selecting the value */\n @ViewChild('select') private select_field: MatSelect;\n\n public get isOpen() {\n return this.select_field?.panelOpen ?? false;\n }\n\n public buildPlaceholder(){\n return this.isOpen && this.placeholderOpen ? this.placeholderOpen : this.placeholder\n }\n}\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n ViewChild,\n OnInit\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\n\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport {\n BehaviorSubject,\n Observable\n} from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { AcaDatePickerComponent } from '../aca-date-picker/aca-date-picker.component';\n\n@Component({\n selector: 'mck-date-picker',\n template: `\n \n Date\n \n
{{ dateString | async }}
\n
\n \n
\n \n \n \n
\n \n Today\n \n
\n
\n \n `,\n styleUrls: ['./mck-date-picker.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MckDatePickerComponent),\n multi: true\n }\n ]\n})\nexport class MckDatePickerComponent extends BaseDirective implements OnInit, ControlValueAccessor {\n /** Earliest date available the user is allowed to pick */\n @Input('from') public _from: number = DateNow(new Date()).ms;\n /** Latest date available the user is allowed to pick */\n @Input('to') public _to: number;\n /** Position of the tooltip */\n @Input() public position: 'right' | 'left' = 'right';\n /** Offset of the tooltip */\n @Input() public offset: 'top' | 'bottom' = 'bottom';\n /** Whether form control is disabled */\n @Input() public disabled: boolean;\n /** Whether to show the calendar tooltip */\n @Input() public icon_only: boolean = false;\n\n @Input() public initialDateSelection?: number;\n\n @Input() public invalid?: boolean;\n\n @Output() public onSelect = new EventEmitter();\n\n // R--- or is this the date picker to refactor. too tired.\n public ngOnInit(): void {\n if (this.initialDateSelection) {\n this.writeValue(this.initialDateSelection)\n }\n }\n\n /** Whether to show the calendar tooltip */\n public show_tooltip: boolean;\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n @ViewChild(MatMenuTrigger, { static: true }) private _trigger: MatMenuTrigger;\n @ViewChild(AcaDatePickerComponent, {static: true }) private _acaDatePicker: AcaDatePickerComponent;\n\n /** Currently selected date */\n public dateValue = new BehaviorSubject(DateNow(new Date()));\n\n /** First allowed date on the calendar */\n public get from(): number {\n return this._from || DateNow(new Date()).startOfValue('day').ms;\n }\n\n /** Current date value */\n public get until(): number {\n return this._to || DateNow(new Date()).endOfValue('day').addValue({ years: 1 }).ms;\n }\n\n /** Display value for the current date */\n public get dateString(): Observable {\n return this.dateValue.pipe(map(d => {\n const display = d.formatDate('ccc dd MMM yyyy');\n return `${display}${d.isSameDate(DateNow(new Date()), 'day') ? ' (Today)' : ''}`;\n }));\n }\n\n /** Whether date picker is open */\n public get is_open(): boolean {\n return this._trigger.menuOpen;\n }\n\n public get date(): Observable {\n return this.dateValue;\n\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: number) {\n // Keep hours and minutes of the old date\n const old_date = this.dateValue.value;\n const d = new DateTZ({date: new_value})\n let new_date = d\n .setValue({ hour: old_date.dateHour, minute: old_date.minutes })\n .ms;\n // Check that new date is before from\n if (new_date < this.from) {\n new_date = this.from;\n }\n const new_d = new DateTZ({ date: new_date })\n this.dateValue.next(new_d);\n if (this._onChange) {\n this._onChange(new_date);\n }\n this.onSelect.emit(new_date);\n this.show_tooltip = false;\n }\n\n public goToToday() {\n this.setValue(DateNow(new Date()).ms);\n }\n\n public resetToLastSelection = () => this._acaDatePicker.updateDate();\n\n public onDatePickerClose() {\n this.resetToLastSelection();\n }\n\n /* istanbul ignore next */\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: number) {\n const date = new DateTZ({date: value})\n this.dateValue.next(date);\n this.show_tooltip = false;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /* istanbul ignore next */\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /** Set the state of the tooltip to closed after delay */\n public closeDatePicker() {\n this._trigger.closeMenu();\n }\n\n /** Set the state of the tooltip to closed after delay */\n public openDatePicker() {\n this._trigger.openMenu();\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n ViewContainerRef\n} from '@angular/core';\nimport { BaseTemplateComponent } from '../base-template.component';\n\n@Component({\n selector: 'mck-modal-button-row',\n template: `\n \n \n \n \n
\n \n {{secondaryLabel}}\n \n \n {{primaryLabel}}\n\n \n
\n \n
\n `,\n styleUrls: ['./modal-button-row.component.scss']\n})\nexport class ModalButtonRowComponent extends BaseTemplateComponent {\n\n @Input()\n primaryLabel?: string;\n\n /**\n * Specify if you want to disable the primary button\n */\n @Input()\n primaryDisabled?: boolean = false;\n\n /**\n * Used only if primaryLabel is specified.\n */\n @Output()\n public primarySubmit = new EventEmitter();\n\n /**\n * Specify if you want to show a secondary label button\n */\n @Input()\n secondaryLabel?: string;\n\n @Input()\n disableFixed: boolean = false;\n\n /**\n * Specify if you want to disable the secondary button\n */\n @Input()\n secondaryDisabled?: boolean = false;\n\n /**\n * Used only if secondaryLabel is specified.\n */\n @Output()\n public secondarySubmit = new EventEmitter();\n\n @Input()\n smallButtons?: boolean = false;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n\n}\n","import {\n Component,\n Input\n} from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'mck-modal',\n template: `\n \n
\n
\n \n
\n
\n

{{header}}

\n
\n
\n \n
\n `,\n styleUrls: ['./modal.component.scss']\n})\nexport class ModalComponent {\n\n @Input()\n header?: string;\n @Input() shouldClose?: boolean = true;\n\n constructor(private dialogRef: MatDialogRef) {\n }\n\n public close() {\n this.dialogRef.close();\n }\n}\n","import { Component, EventEmitter, Inject, OnInit, Output } from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { DialogEvent } from '@mckinsey-converge/base';\nimport { DateTZ, isToday } from '@mckinsey-converge/date-tz';\n\n\n@Component({\n selector: 'override-changes-modal',\n templateUrl: './override-changes-modal.component.html',\n styleUrls: ['./override-changes-modal.component.scss']\n})\nexport class OverrideChangesModalComponent implements OnInit{\n\n public edits;\n public timezone;\n\n @Output() public event = new EventEmitter();\n\n constructor(@Inject(MAT_DIALOG_DATA) private _data: OverrideChangesModalComponent){\n\n }\n\n public ngOnInit(){\n // this.edits = this._data.edits.sort((a, b) => a - b);\n\n // Function to convert epoch to 'YYYY-MM-DD' format\n const getDateString = (epoch) => {\n return new Date(epoch * 1000).toISOString().split('T')[0];\n };\n\n // Set to store unique date strings\n const uniqueDates = new Set();\n\n // Filter the edits array\n const filteredEdits = this._data.edits.filter(epoch => {\n const dateString = getDateString(epoch);\n if (!uniqueDates.has(dateString)) {\n uniqueDates.add(dateString);\n return true;\n }\n return false;\n });\n\n this.edits = filteredEdits;\n }\n\n public formatDate(date: number) {\n const dateTZ = new DateTZ({date: date*1000, is_local_tz: false, building_tz: this._data.timezone });\n const dateIsToday = isToday(dateTZ, this._data.timezone);\n const display = dateTZ.formatDate('ccc dd MMM yyyy');\n return `${display}${dateIsToday ? ' (Today)' : ''}`;\n }\n\n public continue(): void {\n this.event.emit({ reason: 'done' });\n }\n\n public close(): void {\n this.event.emit({ reason: 'close' });\n }\n}","
\n \n \n
\n\n \n \n \n\n

Overriding Changes

\n

Editing the series here will override all previous changes made to individual occurrences. Are you sure you want to proceed?

\n\n \n \n \n \n \n \n \n \n \n \n \n
Dates
{{formatDate(edit)}}
\n
\n\n\n \n \n","import {\n Pipe,\n PipeTransform\n} from '@angular/core';\n\n/**\n * Transforms input by returning a subset of items based on if the\n * any items include the search text based on passed objectKey.\n *\n * objectKey can be pipe separated keys. e.g: 'name|age'. Then it will check against all.\n */\n@Pipe({\n name: 'filter'\n})\nexport class FilterPipe implements PipeTransform {\n transform(items: any[], searchText: string, objectKey?: string): any[] {\n if (!items) return [];\n if (!searchText) return items;\n searchText = searchText.toLowerCase();\n const splitKeys = objectKey?.split('|') ?? [];\n return items.filter(it => {\n let included = false;\n splitKeys.forEach((key) => {\n if (it[key]?.toLowerCase().includes(searchText)) {\n included = true;\n }\n });\n if (splitKeys.length === 0) {\n return it.toLowerCase().includes(searchText);\n }\n return included;\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport {\n DomSanitizer,\n SafeHtml,\n SafeResourceUrl,\n SafeScript,\n SafeStyle,\n} from '@angular/platform-browser';\n\nexport enum SecurityContext {\n NONE = 0,\n HTML = 1,\n STYLE = 2,\n SCRIPT = 3,\n URL = 4,\n RESOURCE_URL = 5,\n}\n\n@Pipe({\n name: 'sanitize',\n})\nexport class SanitizePipe implements PipeTransform {\n constructor(private sanitizer: DomSanitizer) {}\n\n transform(\n value: string,\n type: 'resource' | 'url' | 'script' | 'style' | 'html' = 'html'\n ): SafeHtml | SafeResourceUrl | SafeScript | SafeStyle {\n switch (type) {\n case 'resource':\n return (\n this.sanitizer.sanitize(\n SecurityContext.RESOURCE_URL,\n value\n ) || ''\n );\n case 'url':\n return (\n this.sanitizer.sanitize(SecurityContext.URL, value) || ''\n );\n case 'script':\n return (\n this.sanitizer.sanitize(SecurityContext.SCRIPT, value) || ''\n );\n case 'style':\n return (\n this.sanitizer.sanitize(SecurityContext.STYLE, value) || ''\n );\n }\n return this.sanitizer.sanitize(SecurityContext.HTML, value) || '';\n }\n}\n","import {\n Component,\n forwardRef,\n Input,\n OnInit,\n ViewContainerRef\n} from '@angular/core';\nimport { SelectOption } from '../types';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\nimport { BaseTemplateComponent } from '../base-template.component';\nimport { BehaviorSubject } from 'rxjs';\n\n@Component({\n selector: 'mck-radio-select',\n template: `\n \n
\n {{label}}\n \n {{option.display}}\n \n
\n
\n `,\n styleUrls: ['./radio-select.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RadioSelectComponent),\n multi: true\n }\n ]\n})\nexport class RadioSelectComponent extends BaseTemplateComponent implements OnInit, ControlValueAccessor {\n\n @Input()\n label: string;\n\n @Input()\n required?: boolean;\n\n @Input()\n options: SelectOption[];\n\n public value = new BehaviorSubject | undefined>(undefined);\n\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Form control on change handler */\n private _onChange: (_: SelectOption) => void;\n /** Form control on touch handler */\n private _onTouch: (_: SelectOption) => void;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouch = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public setValue(value: string) {\n const obj = this.options.find(o => o.value === value);\n this.writeValue(obj);\n if (this._onChange) {\n this._onChange(obj)\n }\n }\n\n writeValue(obj: SelectOption): void {\n this.value.next(obj);\n }\n}\n","import { Component, Input, OnInit, ViewChild } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\nimport { OrganisationService, RecurrencePeriod, RecurrenceType, removeExpiredOcurrences, RepeatsOn } from \"@mckinsey-converge/data-common\";\nimport { DateTZ } from \"@mckinsey-converge/date-tz\";\nimport { first } from \"rxjs/operators\";\nimport { RecurrencePatternForm } from \"../recurrence-pattern-form/recurrence-pattern-form.component\";\n\n@Component({\n selector: 'recurrence-booking-form',\n templateUrl: './recurrence-booking-form.component.html',\n styleUrls: ['./recurrence-booking-form.component.scss']\n})\n\nexport class RecurringBookingForm implements OnInit {\n /** Form fields for booking */\n @Input() public form: FormGroup;\n\n public current_type: RecurrenceType; \n public recurrence_types: Array = [\n {type: RepeatsOn.PATTERN, label: 'Repeats on'},\n {type: RepeatsOn.DATE, label: 'Repeats on specific date'}\n ]\n\n public building_tz = \"\";\n\n @ViewChild(RecurrencePatternForm) pattern_form: RecurrencePatternForm;\n\n constructor(\n private _org: OrganisationService,\n ) {}\n\n public get recurrencePeriod(){\n return this.form.get('recurrence_period')\n }\n\n public ngOnInit(): void {\n this._org.initialised.pipe(first((_) => _)).subscribe(() => {\n this.building_tz = this._org?.building?.timezone || 'America/Chicago';\n })\n if(this.recurrencePeriod.value === RecurrencePeriod.LIST){\n this.current_type = this.recurrence_types[1];\n removeExpiredOcurrences(this.form)\n }else{\n this.current_type = this.recurrence_types[0];\n }\n }\n\n public onChangeType(value: string) {\n this.current_type = this.recurrence_types.filter((type) => type.type === value)[0]\n if(this.current_type.type === RepeatsOn.PATTERN){\n this.recurrencePeriod.setValue(this.pattern_form.recurrencePatternFormControl.value)\n }else{\n this.recurrencePeriod.setValue(RecurrencePeriod.LIST)\n }\n }\n\n public dateToBuildingTz(date?: number){\n return new DateTZ({date, building_tz: this.building_tz, is_local_tz: false})\n }\n\n public get error(){\n const recurrence_starts = this.form.controls.recurrence_starts\n const recurrence_days = this.form.controls.recurrence_days\n return recurrence_starts.invalid || recurrence_days.invalid\n }\n\n}\n","
\n \n
\n \n \n {{recurrence_types[0].label}}\n \n \n \n
\n
\n \n \n {{recurrence_types[1].label}}\n \n \n \n
\n
\n
\nThe recurrence pattern is not valid.","import { Component, Input, OnInit, ViewChild } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\nimport { MatMenuTrigger } from \"@angular/material/menu\";\nimport { BaseDirective, closestToTimeSlotTz } from \"@mckinsey-converge/base\";\nimport { OrganisationService } from \"@mckinsey-converge/data-common\";\nimport { DateNow, DateTZ,toMiddayUTC } from \"@mckinsey-converge/date-tz\";\n\n@Component({\n selector: 'recurrence-date-form',\n templateUrl: './recurrence-date-form.component.html',\n styleUrls: ['./recurrence-date-form.component.scss']\n})\n\nexport class RecurrenceDateForm extends BaseDirective implements OnInit {\n /** Form fields for booking */\n @Input() public form: FormGroup;\n @Input() disabled: boolean;\n @ViewChild(MatMenuTrigger, { static: true }) private _trigger: MatMenuTrigger;\n\n public selected_dates: Array = []\n public timezone: string = '';\n public nowTz: DateTZ = DateNow(new Date());\n public fromDateTz: DateTZ = this.nowTz.clone();\n public untilDateTz: DateTZ = this.fromDateTz.endOfValue('day').addValue({ years: 1 });\n public dateTz: DateTZ = DateNow(new Date());\n\n public get recurrenceStarts(){\n return this.form.get('recurrence_starts');\n }\n\n public get formDateTz(){\n return this.form.get('dateTz');\n }\n\n constructor (private _org: OrganisationService) {\n super();\n }\n\n public ngOnInit(): void {\n // Setup some data to only run once, the previous giters were hogs\n this.timezone = this.form.get('timezone').value;\n this.nowTz = new DateTZ({ date: Date.now(), is_local_tz: false, building_tz: this.timezone });\n // R--- The fromDateTz is curious, would it make sense to be based on the form dateTz?\n this.fromDateTz = this.nowTz.clone()\n this.untilDateTz = this.fromDateTz.endOfValue('day').addValue({ years: 1 });\n\n if(this.recurrenceStarts.value){\n const tempForSort = [...this.recurrenceStarts.value]; // due to cannot assign to read only property '0' of object '[object Array]'\n this.selected_dates = tempForSort.sort((d1: DateTZ, d2: DateTZ) => d1.ms - d2.ms);\n }\n this.subscription('ocurrenceChanges', this.recurrenceStarts.valueChanges\n .subscribe(() => {\n this.selected_dates = [...this.recurrenceStarts.value]\n })\n ); \n }\n\n /**\n * Add value to the list of selected dates\n * @param newDateTz\n */\n public addDate(newDateTz: DateTZ) {\n const d = newDateTz.clone();\n const start_date = this.formDateTz.value;\n let new_date = d.setValue({hour: start_date.dateHour, minute: start_date.minutes})\n \n /** Prevent user from selecting past dates */\n if (new_date.isBeforeDate(this.fromDateTz)) {\n new_date = this.fromDateTz;\n }\n\n /** Prevent user from selecting the same date more than once */\n const is_selected = this.selected_dates.filter((date: DateTZ)=> new_date.isSameDate(date, 'day'))\n if(is_selected.length){\n return\n }\n \n this.selected_dates.push(new_date);\n this.recurrenceStarts.setValue(this.selected_dates.sort((d1, d2) => d1.ms - d2.ms));\n this.setDateTzForm();\n }\n\n /**\n * \n * @param dateMsValue: number\n * @returns \n */\n public setPickerToGivenDate(dateTsValue: DateTZ) {\n this.fromDateTz = dateTsValue.clone();\n }\n\n /**\n * Function calls on close of date picker without date selection\n */\n public onDatePickerClose = () => {\n this.setPickerToGivenDate(this.nowTz)\n };\n\n public goToToday() {\n this.addDate(this.nowTz);\n this.setPickerToGivenDate(this.nowTz);\n }\n\n public closeDatePicker() {\n this._trigger.closeMenu();\n }\n\n public openDatePicker() {\n this._trigger.openMenu();\n }\n\n public deleteDate(date: DateTZ) {\n const index = this.selected_dates.map((d: DateTZ) => d.ms).indexOf(date.ms)\n this.selected_dates.splice(index, 1)\n this.recurrenceStarts.setValue(this.selected_dates)\n this.setDateTzForm()\n }\n\n public isToday(date) {\n return new DateTZ({\n date: toMiddayUTC(date).ms,\n is_local_tz: false,\n building_tz: this.timezone,\n }).isSameDate(\n new DateTZ({\n date: Date.now(),\n is_local_tz: false,\n building_tz: this.timezone,\n }),\n 'day'\n );\n }\n\n public formatDate(date: DateTZ){\n const isToday = this.isToday(date);\n const display = date.formatDate('ccc dd MMM yyyy');\n\n return `${display}${isToday ? ' (Today)' : ''}`;\n }\n\n private setDateTzForm(): void {\n if (this.selected_dates.length === 0)\n return;\n\n const tz = this._org.building.timezone;\n const date_now = DateNow(new Date()).toZone(tz);\n let dateTz = this.selected_dates[0].clone();\n\n dateTz = dateTz.setValue({\n hour: (this.formDateTz.value as DateTZ).hours,\n minute: (this.formDateTz.value as DateTZ).minutes\n });\n\n if (this.selected_dates[0].isSameDate(this.nowTz, \"day\") && dateTz.hours < date_now.hours) {\n const { minutes: minute, hours: hour } = closestToTimeSlotTz(this.nowTz, 15);\n dateTz = dateTz.setValue({ minute, hour, second: 0 });\n }\n\n this.formDateTz.setValue(dateTz);\n }\n}\n","
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
DateAction
{{formatDate(date)}}Delete
\n
[+] Add another date
\n \n
\n \n Today\n \n
\n
\n
\n
","import { Component, Input, OnInit } from \"@angular/core\";\nimport { FormGroup, Validators } from \"@angular/forms\";\nimport { BaseDirective, closestToTimeSlotTz } from \"@mckinsey-converge/base\";\nimport { arrayWithValues, generateWeekDays, RecurrencePeriod, recurrencePeriodToDurationType, RepeatPeriod, validDateTZ, WeekDays } from \"@mckinsey-converge/data-common\";\nimport { DateNow, DateTZ } from \"@mckinsey-converge/date-tz\";\n\n@Component({\n selector: 'recurrence-pattern-form',\n templateUrl: './recurrence-pattern-form.component.html',\n styleUrls: ['./recurrence-pattern-form.component.scss']\n})\n\nexport class RecurrencePatternForm extends BaseDirective implements OnInit {\n /** Form fields for booking */\n @Input() public form: FormGroup;\n @Input() disabled: boolean;\n\n /** Range of dates for the Start Date Picker*/\n public nowTz: DateTZ = DateNow(new Date());\n public fromStartTz: DateTZ = this.nowTz.setValue({ minute: Math.ceil(this.nowTz.minutes / 5) * 5 });\n public untilTz: DateTZ = this.nowTz.addValue({ years: 1 }).endOfValue('day');\n public timezone: string = '';\n \n\n /** Range of dates for the End Date Picker*/\n public fromEndTz: DateTZ;\n\n public repeat_period_options: Array = [\n {label: 'Day', id: RecurrencePeriod.DAILY},\n {label: 'Week',id: RecurrencePeriod.WEEKLY},\n {label: 'Month', id: RecurrencePeriod.ABSOLUTE_MONTHLY}\n ]\n public week_days: Array = []\n\n public repeat_every_options\n\n\n public get recurrenceDateStartTzFormControl() {\n return this.form.get('dateTz')\n }\n\n public get recurrenceEndFormControl(){\n return this.form.get('recurrence_endTz')\n }\n\n public get recurrencePeriodFormControl(){\n return this.form.get('recurrence_period')\n }\n\n public get recurrenceIntervalFormControl(){\n return this.form.get('recurrence_interval')\n }\n\n public get recurrencePatternFormControl(){\n return this.form.get('recurrence_pattern')\n }\n\n public get recurrenceDaysFormControl(){\n return this.form.get('recurrence_days')\n }\n\n public ngOnInit(): void {\n // Setup some data to only run once, the previous giters were hogs\n this.timezone = this.form.get('timezone').value;\n this.nowTz = new DateTZ({ date: Date.now(), is_local_tz: false, building_tz: this.timezone });\n // R--- The from date is curious, why isn't it based on the form dateTz?\n this.repeat_every_options = new Array(1)\n this.fromStartTz = closestToTimeSlotTz(this.nowTz, 15)\n this.untilTz = this.nowTz.addValue({ years: 1 }).endOfValue('day');\n this.fromEndTz = this.fromStartTz.addValue({days: 1})\n\n this.setEndDateFromStartDate(this.recurrenceDateStartTzFormControl.value) //make sure end date is after start date\n\n if(!this.recurrencePeriodFormControl.value){\n this.recurrencePeriodFormControl.setValue(RecurrencePeriod.WEEKLY)\n }\n\n if(this.recurrencePeriodFormControl.value !== RecurrencePeriod.LIST){\n this.recurrencePatternFormControl.setValue(this.recurrencePeriodFormControl.value)\n }\n\n this.week_days = generateWeekDays(this.recurrenceDateStartTzFormControl.value.ms, { building_tz: this.fromStartTz.building_tz })\n this.generateMaxIntervals()\n\n if(this.recurrenceDaysFormControl.value.length > 0){\n this.week_days = this.week_days.map((day) => \n ({...day, active: this.recurrenceDaysFormControl.value.includes(day.full_name)})\n )\n }\n\n if(!this.recurrenceDaysFormControl.value.length && this.recurrencePeriodFormControl.value === RecurrencePeriod.WEEKLY){\n const current_days = this.week_days.filter((day) => day.active).map((day)=>day.full_name)\n this.recurrenceDaysFormControl.setValue(current_days)\n }\n\n this.generateOcurrenceList()\n\n this.subscription('startTimeChanges', this.recurrenceDateStartTzFormControl.valueChanges\n .subscribe((next) => {\n this.setEndDateFromStartDate(next) \n })\n );\n\n this.subscription('endTimeChanges', this.recurrenceEndFormControl.valueChanges\n .subscribe(() => {\n this.generateMaxIntervals();\n })\n );\n \n this.subscription('recurrencePeriodFormControlChanges', this.recurrencePeriodFormControl.valueChanges\n .subscribe(() => {\n this.generateMaxIntervals();\n })\n ); \n }\n\n public setEndDateFromStartDate(startDateTz: DateTZ){\n let end_date = this.recurrenceEndFormControl.value.setValue({hour: startDateTz.dateHour, minute: startDateTz.minutes})\n\n /**Update the End date picker range */\n this.fromEndTz = startDateTz.isSameDate(this.untilTz,'day') ? startDateTz : startDateTz.addValue({days: 1})\n\n if(end_date.isBeforeDate(this.fromEndTz)){\n end_date = this.fromEndTz\n }\n\n this.recurrenceEndFormControl.setValue(end_date)\n\n this.generateMaxIntervals()\n this.updateActiveWeekday() \n }\n\n public setRepeatPeriod(value: RecurrencePeriod){\n this.updateValidators(value)\n this.recurrencePeriodFormControl.setValue(value);\n this.recurrencePatternFormControl.setValue(value);\n this.recurrenceIntervalFormControl.setValue(1)\n this.generateOcurrenceList();\n }\n\n public setRepeatEvery(value: number){\n this.recurrenceIntervalFormControl.setValue(value)\n this.generateOcurrenceList()\n }\n\n public repeatTimeString(value: string){\n return this.recurrenceIntervalFormControl.value !== 1 ? `${value}(s)` : value\n }\n\n public get displayWeekdays(){\n return this.recurrencePatternFormControl.value === RecurrencePeriod.WEEKLY\n }\n\n /* Check if selected interval is valid and reset to 1 if not*/\n private validateRecurrenceInterval = () => {\n if(this.repeat_every_options.length < this.recurrenceIntervalFormControl.value){\n this.recurrenceIntervalFormControl.setValue(1)\n } \n };\n\n /**\n * Generate max value for dorpdown interval\n */\n public generateMaxIntervals(){\n const start = this.recurrenceDateStartTzFormControl.value;\n const date_diff = this.recurrenceEndFormControl.value.dateDiff(start, this.periodToDurationType, this.periodToDurationType)\n //If no diff default to 1\n this.repeat_every_options = new Array(Math.round(date_diff) || 1)\n this.validateRecurrenceInterval();\n if(this.recurrencePeriodFormControl.value !== RecurrencePeriod.LIST){\n this.generateOcurrenceList()\n }\n }\n\n /**\n * Generate ocurrence list base on the selected interval\n */\n public generateOcurrenceList() {\n\n /**If selected period is list then we don't want \n * to generate a list based on the repeats on selections*/\n if(this.recurrencePeriodFormControl.value === RecurrencePeriod.LIST){\n return\n }\n\n const occurrence = []\n const first_date = this.recurrenceDateStartTzFormControl.value;\n let start = first_date\n const end = this.recurrenceEndFormControl.value;\n const interval = this.recurrenceIntervalFormControl.value\n const recurr_days = this.week_days.filter(day => day.active)\n /**\n * isLastDayOfMonth : Boolean\n * flag - to generate last day of every month in case of day or month reccuring booking if start date is last day of month\n */\n // const isLastDayOfMonth = first_date.date.day === first_date.date.daysInMonth && this.recurrencePeriodFormControl.value === RecurrencePeriod.ABSOLUTE_MONTHLY;\n const isLastDayOfMonth = first_date.dateDay === 31 && this.recurrencePeriodFormControl.value === RecurrencePeriod.ABSOLUTE_MONTHLY ;\n \n if(this.recurrencePeriodFormControl.value === RecurrencePeriod.WEEKLY){\n start = start.startOfValue('week')\n }\n\n while (end.dateDiff(start.startOfValue('day'), this.periodToDurationType, this.periodToDurationType) >= 0) {\n \n if(this.recurrencePeriodFormControl.value !== RecurrencePeriod.WEEKLY){\n occurrence.push(start) \n start = start.addValue({[this.periodToDurationType]: interval}, isLastDayOfMonth);\n /**\n * IF - should only consider resetting start under mentioned condition of ticket - https://acaprojects.atlassian.net/browse/MCK-2085\n * In summery - If user select any date except 31st, other months in the series (no matter 30 or 31 day month) should have same date select as start date.\n * If user select 31st as an start date, other month in the seleries should have select last day of the month (30th/31st/28th/29th).\n * Exception for February - February should select 28th or 29th If in above both selection includes date between 28th - 31st.\n * \n */\n if(start.dateDay !== first_date.dateDay && start.dateDay !== start.date.daysInMonth && this.recurrencePeriodFormControl.value === RecurrencePeriod.ABSOLUTE_MONTHLY) {\n start = start.setValue({day: first_date.dateDay});\n } \n }else {\n recurr_days.forEach((day)=>{\n const date = start.addValue({days: day.day_index})\n if((date.isAfterDate(first_date) || date.isSameDate(first_date, 'day')) && \n (date.isBeforeDate(end) || date.isSameDate(end, 'day'))){\n occurrence.push(date)\n }\n })\n start = start.addValue({[this.periodToDurationType]: interval})\n }\n }\n\n this.form.controls.recurrence_count.setValue(occurrence.length)\n this.form.controls.recurrence_starts.setValue(occurrence.sort((d1, d2) => d1.ms - d2.ms))\n \n }\n\n public get periodToDurationType(){\n const period = this.recurrencePeriodFormControl.value\n return recurrencePeriodToDurationType(period)\n }\n\n /**\n * Update active weekday in the weekdays array\n */\n private updateActiveWeekday() {\n const _week_days = this.week_days.map((day)=>{\n if(this.recurrenceDaysFormControl.value.includes(day.full_name)){\n return {...day, active: true}\n }else{\n return {...day, active: false}\n }\n })\n this.week_days = [..._week_days] \n }\n\n public setWeekDays(new_day: WeekDays){\n const days = this.recurrenceDaysFormControl.value\n if(this.disabled){\n return\n }\n\n if(!new_day.active){\n days.push(new_day.full_name)\n }else{\n const current_index = days.indexOf(new_day.full_name)\n days.splice(current_index,1)\n }\n this.recurrenceDaysFormControl.setValue([...days])\n this.updateActiveWeekday()\n this.generateOcurrenceList()\n }\n\n /**Update the recurrence days validator if period changes */\n public updateValidators(value: RecurrencePeriod){\n if(value === RecurrencePeriod.WEEKLY && this.recurrencePeriodFormControl.value !== RecurrencePeriod.WEEKLY){\n const arrayValidators = [Validators.required];\n arrayValidators.push(arrayWithValues);\n this.recurrenceDaysFormControl.setValidators(arrayValidators);\n this.recurrenceDaysFormControl.updateValueAndValidity();\n }else if(value !== RecurrencePeriod.WEEKLY && this.recurrencePeriodFormControl.value === RecurrencePeriod.WEEKLY){\n this.recurrenceDaysFormControl.clearValidators();\n this.recurrenceDaysFormControl.updateValueAndValidity();\n }\n }\n}\n","
\n
\n \n \n \n Date and time must be in the future\n
\n
\n \n \n \n Date and time must be in the future\n
\n
\n
\n \n
\n \n \n \n {{ i + 1}}\n \n \n \n \n \n \n {{ repeatTimeString(option.label) }}\n \n \n \n
\n
\n
\n \n
\n
\n {{day.id}}\n
\n
\n
\n
\n
","import {\n Component,\n Input,\n ViewContainerRef\n} from '@angular/core';\nimport { BaseTemplateComponent } from '../base-template.component';\nimport { SelectOption } from '../types';\n\n@Component({\n selector: 'mck-select-option',\n template: `\n \n \n \n \n {{ option.display }}\n \n \n `,\n styleUrls: ['./select-option.component.css']\n})\nexport class SelectOptionComponent extends BaseTemplateComponent {\n\n @Input()\n option: SelectOption;\n\n @Input()\n selected: boolean;\n\n /**\n * If true, we still display as if it wasn't disabled.\n */\n @Input()\n ignoreDisabled = false;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n\n}\n","import {\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n BehaviorSubject,\n combineLatest\n} from 'rxjs';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { map } from 'rxjs/operators';\nimport { MatSelect } from '@angular/material/select';\nimport {\n ControlValueAccessor,\n FormControl,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\n\n@Component({\n selector: 'mck-select',\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectComponent),\n multi: true\n }\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class SelectComponent implements OnInit, OnChanges, ControlValueAccessor {\n\n @Input()\n public label: string;\n\n @Input()\n public required: boolean;\n\n @Input()\n public options: SelectOption[] = [];\n\n @Input()\n public selectedValue: SelectOption | undefined;\n\n /**\n * When true, can filter by searching on the input.\n */\n @Input()\n public searchEnabled = false;\n\n @Input()\n public splitDisplay = false;\n\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n\n @Input()\n public noEntriesFoundLabel: string;\n\n @Input()\n public showDivider: boolean = false\n\n /** Form control on change handler */\n private _onChange: (_: SelectOption) => void;\n /** Form control on touch handler */\n private _onTouch: (_: SelectOption) => void;\n\n public filterFormControl: FormControl = new FormControl();\n\n public value = new BehaviorSubject(this.selectedValue || this.options[0]?.value);\n\n /** Available time blocks for the selected date */\n public _options = new BehaviorSubject[]>(this.options);\n\n /** Select field for selecting the value */\n @ViewChild('select') private select_field: MatSelect;\n\n public selectedOption = combineLatest([this._options, this.value]).pipe(\n map(([options, value]) => options.find(o => o.value === value))\n );\n\n public placeHolderOption = this._options.pipe(\n map(os => os.length > 0 && os[0])\n );\n\n public isSelected(option: SelectOption) {\n return this.value.pipe(map(t => t === option.value));\n }\n\n public get isOpen() {\n return this.select_field?.panelOpen ?? false;\n }\n\n\n constructor() {\n }\n\n public ngOnInit(): void {\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.options) {\n this._options.next(this.options);\n this.value.next(this.selectedValue || this.options?.[0]?.value);\n }\n if (changes.selectedValue) {\n this.value.next(this.selectedValue?.value);\n }\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: string): void {\n this.value.next(new_value);\n if (this._onChange) {\n this._onChange(this.options.find(f => f.value === new_value));\n }\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: SelectOption | null) {\n if (value != null) {\n this.value.next(value.value);\n }\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: SelectOption) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: SelectOption) => void): void {\n this._onTouch = fn;\n }\n\n}\n","
\n {{label}}\n \n \n \n \n \n \n \n \n \n \n
\n \n
\n \n
\n","import {\n Component,\n EventEmitter,\n Input,\n Output\n} from '@angular/core';\n\n@Component({\n selector: 'mck-selected-chip-count',\n template: `\n \n {{count}}\n \n \n `,\n styleUrls: ['./selected-chip-count.component.scss']\n})\nexport class SelectedChipCountComponent {\n\n @Input()\n count: number;\n\n @Output()\n close = new EventEmitter();\n\n}\n","import {\n Component,\n Input,\n OnInit,\n ViewContainerRef\n} from '@angular/core';\nimport { BaseTemplateComponent } from '../base-template.component';\n\nexport enum SpacerMode {\n /**\n * If vertical, it expands in the vertical direction. Size is width.\n */\n Vertical = 'vertical',\n /**\n * If horizontal, it expands in the horizontal direction. Size is height.\n */\n Horizontal = 'horizontal',\n}\n\n@Component({\n selector: 'mck-spacer',\n template: `\n \n
\n
\n
\n
\n
\n `,\n styleUrls: ['./spacer.component.css'],\n})\nexport class SpacerComponent extends BaseTemplateComponent implements OnInit {\n SpacerMode = SpacerMode;\n\n @Input()\n size: string;\n\n @Input()\n mode: SpacerMode = SpacerMode.Horizontal;\n\n @Input()\n autoSize?: boolean;\n\n @Input()\n spacerClass?: string;\n\n constructor(vcRef: ViewContainerRef) {\n super(vcRef);\n }\n\n\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output\n} from '@angular/core';\nimport { SelectOption } from '@mckinsey-converge/ui';\n\n@Component({\n selector: 'mck-switch-group',\n template: `\n
\n {{title}}\n {{option.display}}\n
\n `,\n styleUrls: ['./switch-group.component.scss']\n})\nexport class SwitchGroupComponent implements OnInit {\n\n @Input()\n title: string;\n\n @Input()\n options: SelectOption[];\n\n @Input()\n selectedOptions: SelectOption[] = [];\n\n @Output()\n optionChecked = new EventEmitter>();\n\n constructor() {\n }\n\n ngOnInit(): void {\n }\n\n public onCheckedChange(option: SelectOption) {\n this.optionChecked.emit(option);\n }\n\n public isSelected(option: SelectOption) {\n return !!this.selectedOptions.find(s => s.value === option.value);\n }\n}\n","import {\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\nimport { MatSelect } from '@angular/material/select';\n\nimport {\n BaseDirective,\n closestToTimeSlot,\n nearestStepToInput,\n timeWithGmtOffsetFormatString\n} from '@mckinsey-converge/base';\n\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { generateAvailableTimes } from '../utils/time.utils';\nimport {\n BehaviorSubject,\n combineLatest\n} from 'rxjs';\nimport {\n filter,\n map,\n withLatestFrom\n} from 'rxjs/operators';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { DateTime } from 'luxon';\n\n@Component({\n selector: 'mck-time-field',\n template: `\n
\n {{label}}\n \n \n \n \n \n \n \n \n \n
\n \n
\n \n
\n `,\n styleUrls: ['./time-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TimeFieldComponent),\n multi: true\n }\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class TimeFieldComponent extends BaseDirective implements OnInit, OnChanges, ControlValueAccessor {\n @Input()\n public label: string;\n @Input()\n public required: boolean;\n /** Time step between each allowed time option */\n @Input() public step = 15;\n /** Whether form field is disabled */\n @Input() public disabled: boolean;\n /** Whether past times are allowed */\n @Input() public noPastTimes = true;\n /** Representing the date from start **/\n @Input() public from: number;\n /** Representing desired timezone **/\n @Input() public timezone?: string = new DateTZ({ date: Date.now() }).local_tz;\n\n // R-- Which time field is going to be used, there's too many\n /** Form control on change handler */\n private _onChange: (_: number) => void;\n /** Form control on touch handler */\n private _onTouch: (_: number) => void;\n\n /** Select field for selecting the time */\n @ViewChild('select') private select_field: MatSelect;\n\n /** String representing the currently set date */\n public date = new BehaviorSubject(DateNow(new Date()).ms);\n\n public filterFormControl: FormControl = new FormControl();\n\n public nearestStep = combineLatest([\n this.filterFormControl.valueChanges,\n this.date]).pipe(\n map(([value, date]) => nearestStepToInput(this.step, value, DateTime.now().valueOf()))\n );\n\n /** String representing the currently set time */\n public value = new BehaviorSubject(closestToTimeSlot(DateTime.now(), this.step).toFormat('HH:mm'));\n\n /** Available time blocks for the selected date */\n public options = new BehaviorSubject[]>(generateAvailableTimes(DateNow(new Date()).ms, !this.noPastTimes, this.step, this.timezone));\n\n public selectedOption = combineLatest([this.options, this.value]).pipe(\n map(([options, value]) => options.find(o => o.value === value))\n );\n\n public placeHolderOption = this.options.pipe(\n map(os => os.length > 0 && os[0])\n );\n\n public isSelected(option: SelectOption) {\n return this.value.pipe(map(t => t === option.value));\n }\n\n public get isOpen() {\n return this.select_field?.panelOpen ?? false;\n }\n\n public ngOnInit(): void {\n // Generate the time input options for the booking date\n this.options.next(generateAvailableTimes(this.date.value, !this.noPastTimes, this.step, this.timezone));\n\n // Subscribe to selected option changes\n this.subscription('dateTimeChanges',\n combineLatest([\n this.date\n ]).pipe(\n map(([date]) => {\n // R--- The time input needing to be TZ aware.\n const closestTimeSlot = closestToTimeSlot(DateTime.fromMillis(date.valueOf()), this.step);\n // Need to return the date with building timezone or the HH:mm representation will no match the option values\n return new DateTZ({date: closestTimeSlot.valueOf(), is_local_tz:false, building_tz: this.timezone});\n }),\n withLatestFrom(this.options),\n filter(([date, timeOptions]: [DateTZ, SelectOption[]]) => {\n // if new time slot opened up when date / time changes, add it here.\n return !timeOptions.find(t => t.value === date.formatDate('HH:mm'));\n }),\n map(([date, timeOptions]) => {\n // TODO probably an issue here with going from a future date and time earlier than now back to day showing null\n // Push the current date option in\n timeOptions.push({\n display: timeWithGmtOffsetFormatString(date),\n value: date.formatDate('HH:mm')\n });\n // Sort the time options\n timeOptions.sort((a, b) => `${a.value}`.localeCompare(`${b.value}`));\n return timeOptions;\n })\n ).subscribe(next => this.options.next(next)));\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.no_past_times || changes.step || changes.timezone) {\n // If there's a new date value then update the time options\n this.options.next(generateAvailableTimes(this.date.value, !this.noPastTimes, this.step, this.timezone));\n const buildingDate = new DateTZ({date: this.from, is_local_tz: false, building_tz: this.timezone}).startOfValue('minute');\n this.value.next(buildingDate.formatDate('HH:mm'));\n }\n if (changes.from) {\n // When the from input param changes update the date value\n this.date.next(this.from);\n }\n }\n\n /**\n * Update the form field value\n * @param new_value New value to set on the form field\n */\n public setValue(new_value: string): void {\n // value comes in as a HH:mm string\n const newTime = (new_value.indexOf(':') > 0 ? new_value : '00:00').split(':');\n // need the date with the building timezone so the hour set is relative to there and not local.\n const d = new DateTZ({ date: this.date.value, is_local_tz: false, building_tz: this.timezone });\n const date = d.setValue({ hour: parseInt(newTime[0]), minute: parseInt(newTime[1]) });\n if (date) {\n if (this._onChange) {\n this._onChange(date.ms);\n }\n }\n }\n\n /**\n * Update local value when form control value is changed\n * @param value The new value for the component\n */\n public writeValue(value: number | null) {\n if (value != null) {\n // Time input value in building time milliseconds\n this.date.next(value);\n // Get the closest time to slot in case the browser was idle and elapse the valid times\n const date = closestToTimeSlot(DateTime.fromMillis(value).startOf('minute'), this.step);\n // Need the building time so HH:mm is correct\n const buildingDate = new DateTZ({date: date.valueOf(), is_local_tz: false, building_tz: this.timezone}).startOfValue('minute');\n this.options.next(generateAvailableTimes(buildingDate.ms, !this.noPastTimes, this.step, this.timezone));\n }\n }\n\n public setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /**\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function to register\n */\n public registerOnChange(fn: (_: number) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function to register\n */\n public registerOnTouched(fn: (_: number) => void): void {\n this._onTouch = fn;\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output\n} from '@angular/core';\nimport { SelectOption } from '@mckinsey-converge/ui';\n\n@Component({\n selector: 'mck-toggle',\n template: `\n
\n \n
\n `,\n styleUrls: ['./toggle.component.scss']\n})\nexport class ToggleComponent {\n\n @Input()\n options: SelectOption[];\n\n @Input()\n selected: SelectOption;\n\n @Output()\n selectedChange = new EventEmitter>();\n\n public onTapOption(option: SelectOption) {\n this.selectedChange.emit(option);\n }\n\n isSelected(option: SelectOption) {\n return this.selected === option;\n }\n}\n","import { Component, Input } from '@angular/core';\nimport {TooltipPosition, TooltipTheme} from \"./tooltip.enums\";\n\n@Component({\n selector: 'app-tooltip',\n templateUrl: './tooltip.component.html',\n styleUrls: ['./tooltip.component.scss']\n})\nexport class TooltipComponent {\n isVisible: boolean = false; // To control the visibility of the tooltip\n position: TooltipPosition = TooltipPosition.DEFAULT;\n theme: TooltipTheme = TooltipTheme.DEFAULT;\n tooltip = '';\n left = 0;\n top = 0;\n visible = false;\n}","
\n
\n
\n {{string}}\n
\n
\n
","import {\n ApplicationRef,\n ComponentFactoryResolver,\n ComponentRef,\n Directive,\n ElementRef,\n EmbeddedViewRef,\n HostListener,\n Injector,\n Input,\n ViewContainerRef\n} from '@angular/core';\nimport {TooltipComponent} from \"./tooltip.component\";\nimport {TooltipPosition, TooltipTheme} from \"./tooltip.enums\";\n\n@Directive({\n selector: '[tooltip]'\n})\nexport class TooltipDirective {\n\n @Input() tooltip = '';\n @Input() position: TooltipPosition = TooltipPosition.DEFAULT;\n @Input() theme: TooltipTheme = TooltipTheme.DEFAULT;\n @Input() trigger: 'hover' | 'click' = 'hover'; \n @Input() showDelay = 0;\n @Input() hideDelay = 0;\n @Input() show: boolean = true;\n\n private componentRef: ComponentRef | null = null;\n private showTimeout?: number;\n private hideTimeout?: number;\n private touchTimeout?: number;\n\n constructor(private elementRef: ElementRef, private appRef: ApplicationRef,\nprivate componentFactoryResolver: ComponentFactoryResolver, private injector: Injector) {\n }\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (this.trigger === 'hover') {\n this.initializeTooltip();\n }\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n if (this.trigger === 'hover') {\n this.setHideTooltipTimeout();\n }\n }\n\n @HostListener('click')\n onClick(): void {\n if (this.trigger === 'click') {\n if (this.componentRef === null) {\n this.initializeTooltip();\n } else {\n this.destroy(); // Hide tooltip if it is already shown\n }\n }\n }\n\n @HostListener('touchstart', ['$event'])\n onTouchStart($event: TouchEvent): void {\n $event.preventDefault();\n window.clearTimeout(this.touchTimeout);\n this.touchTimeout = window.setTimeout(this.initializeTooltip.bind(this), 500);\n }\n\n @HostListener('touchend')\n onTouchEnd(): void {\n window.clearTimeout(this.touchTimeout);\n this.setHideTooltipTimeout();\n }\n\n private initializeTooltip() {\n if (this.componentRef === null) {\n window.clearInterval(this.hideDelay);\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(TooltipComponent);\n this.componentRef = componentFactory.create(this.injector);\n\n this.appRef.attachView(this.componentRef.hostView);\n const [tooltipDOMElement] = (this.componentRef.hostView as EmbeddedViewRef).rootNodes;\n\n this.setTooltipComponentProperties();\n\n document.body.appendChild(tooltipDOMElement);\n this.showTimeout = window.setTimeout(this.showTooltip.bind(this), this.showDelay);\n }\n }\n\n private setTooltipComponentProperties() {\n if (this.componentRef !== null) {\n this.componentRef.instance.tooltip = this.tooltip;\n this.componentRef.instance.position = this.position;\n this.componentRef.instance.theme = this.theme;\n\n const {left, right, top, bottom} = this.elementRef.nativeElement.getBoundingClientRect();\n\n switch (this.position) {\n case TooltipPosition.BELOW: {\n this.componentRef.instance.left = Math.round((right - left) / 2 + left);\n this.componentRef.instance.top = Math.round(bottom);\n break;\n }\n case TooltipPosition.ABOVE: {\n this.componentRef.instance.left = Math.round((right - left) / 2 + left);\n this.componentRef.instance.top = Math.round(top);\n break;\n }\n case TooltipPosition.RIGHT: {\n this.componentRef.instance.left = Math.round(right);\n this.componentRef.instance.top = Math.round(top + (bottom - top) / 2);\n break;\n }\n case TooltipPosition.LEFT: {\n this.componentRef.instance.left = Math.round(left);\n this.componentRef.instance.top = Math.round(top + (bottom - top) / 2);\n break;\n }\n default: {\n break;\n }\n }\n }\n }\n\n private showTooltip() {\n if (this.componentRef !== null) {\n this.componentRef.instance.visible = this.show ? true : false;\n }\n }\n\n private setHideTooltipTimeout() {\n this.hideTimeout = window.setTimeout(this.destroy.bind(this), this.hideDelay);\n }\n\n ngOnDestroy(): void {\n this.destroy();\n }\n\n destroy(): void {\n if (this.componentRef !== null) {\n window.clearInterval(this.showTimeout);\n window.clearInterval(this.hideDelay);\n this.appRef.detachView(this.componentRef.hostView);\n this.componentRef.destroy();\n this.componentRef = null;\n }\n }\n}\n","export enum TooltipPosition {\n ABOVE = 'above',\n BELOW = 'below',\n LEFT = 'left',\n RIGHT = 'right',\n DYNAMIC = 'dynamic',\n DEFAULT = 'below'\n}\n\nexport enum TooltipTheme {\n DARK = 'dark',\n LIGHT = 'light',\n DEFAULT = 'dark'\n}\n","export { AlertMode, AlertBannerDisplay } from './alert-banner/alert-banner.component';\nexport { SelectOption } from './options/select-option';\nexport * from './cng-select/dropdown-panel';","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatSelectModule } from '@angular/material/select';\nimport { AutoCompleteChipSelectItemComponent } from './auto-complete-chip-select-item/auto-complete-chip-select-item.component';\nimport { AutoCompleteSelectOptionComponent } from './auto-complete-select-option/auto-complete-select-option.component';\nimport {\n FormsModule,\n ReactiveFormsModule\n} from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { NgxMatSelectSearchModule } from 'ngx-mat-select-search';\nimport { RadioSelectComponent } from './radio-select/radio-select.component';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { FilterPipe } from './pipes/filter.pipe';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TimeFieldComponent } from './time-field/time-field.component';\nimport { DateTzTimeFieldComponent } from './date-tz-time-field/date-tz-time-field.component';\nimport { SpacerComponent } from './spacer/spacer.component';\nimport { DurationFieldComponent } from './duration-field/duration-field.component';\nimport { DateTzDurationFieldComponent } from './date-tz-duration-field/date-tz-duration-field.component';\nimport { AcaDatePickerComponent } from './aca-date-picker/aca-date-picker.component'; // the old widget\nimport { MckDatePickerComponent } from './mck-date-picker/mck-date-picker.component'; // the old form field \nimport { DateTzCalendarWidgetComponent } from './date-tz-calendar-widget/date-tz-calendar-widget.component'; // the new widget\nimport { DateTzDatePickerComponent } from './date-tz-date-picker/date-tz-date-picker.component'; // the new form field \nimport { CalendarIconComponent } from './icons/calendar/calendar-icon.component';\nimport { ChevronIconComponent } from './icons/calendar/chevron-icon.component';\nimport { SelectOptionComponent } from './select-option/select-option.component';\nimport { CloseIconComponent } from './icons/close/close-icon.component';\nimport { SelectedChipCountComponent } from './selected-chip-count/selected-chip-count.component';\nimport { AlertBannerComponent } from './alert-banner/alert-banner.component';\nimport { ErrorMessageComponent } from './error-message/error-message.component';\nimport { ToggleComponent } from './toggle/toggle.component';\nimport { LabelComponent } from './label/label.component';\nimport { ModalComponent } from './modal/modal.component';\nimport { CollapseHeaderComponent } from './collapse-header/collapse-header.component';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { SwitchGroupComponent } from './switch-group/switch-group.component';\nimport { ModalButtonRowComponent } from './modal-button-row/modal-button-row.component';\nimport { InformationalImageComponent } from './informational-image/informational-image.component';\nimport { GroupHeaderPipe } from './auto-complete-chip-select-item/groupHeader.pipe';\nimport { SelectComponent } from './select/select.component';\nimport { LegendDropdownComponent } from './legend-dropdown/legend-dropdown.component';\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\nimport { RecurrencePatternForm } from './recurrence-pattern-form/recurrence-pattern-form.component'; \nimport { RecurrenceDateForm } from './recurrence-date-form/recurrence-date-form.component';\nimport { ConflictsModalComponent } from './conflicts-modal/conflicts-modal.component';\nimport { RecurringBookingForm } from './recurrence-booking-form/recurrence-booking-form.component';\nimport { OverrideChangesModalComponent } from './override-changes-modal/override-changes-modal.component';\nimport { SanitizePipe } from './pipes/sanitise.pipe';\nimport { ConflictAlertModalComponent } from './conflict-alert-modal/conflict-alert-modal.component';\nimport { CngSelectComponent } from './cng-select/cng-select.component';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { DropdownTriggerForDirective } from './cng-select/dropdown-trigger-for.directive';\nimport { CngSelectOptionsComponent } from './cng-select/cng-select-options.component';\nimport { TooltipComponent } from './tooltip/tooltip.component';\nimport { TooltipDirective } from './tooltip/tooltip.directive';\nimport { ZoomWarningComponent } from './zoom-warning-modal/components/zoom-warning/zoom-warning.component';\nimport { CustomSnackbarComponent } from './custom-snackbar-component/custom-snackbar-component.component';\nimport { SnackBarService } from './custom-snackbar-component/custom-snackbar-component.service';\nimport { CateringDropComponent } from './catering-drop-modal/components/catering-drop/catering-drop-modal.component';\n\nexport const MATERIAL_MODULES: any[] = [\n MatButtonModule,\n MatSnackBarModule,\n MatDialogModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatProgressSpinnerModule,\n MatProgressBarModule,\n MatAutocompleteModule,\n MatSelectModule,\n MatChipsModule,\n MatRippleModule,\n MatMenuModule,\n MatCheckboxModule,\n MatTooltipModule,\n MatRadioModule,\n MatTabsModule,\n MatSlideToggleModule,\n MatExpansionModule,\n OverlayModule\n];\n\n@NgModule({\n imports: [CommonModule,\n ...MATERIAL_MODULES,\n ReactiveFormsModule,\n FormsModule,\n NgxMatSelectSearchModule, \n NgxSkeletonLoaderModule,\n MatSnackBarModule],\n declarations: [\n AutoCompleteChipSelectItemComponent,\n AutoCompleteSelectOptionComponent,\n AcaDatePickerComponent,\n MckDatePickerComponent,\n DateTzCalendarWidgetComponent,\n DateTzDatePickerComponent,\n TimeFieldComponent,\n DateTzTimeFieldComponent,\n DurationFieldComponent,\n DateTzDurationFieldComponent,\n GroupHeaderPipe,\n RadioSelectComponent,\n FilterPipe,\n SanitizePipe,\n SpacerComponent,\n CalendarIconComponent,\n ChevronIconComponent,\n SelectOptionComponent,\n CloseIconComponent,\n SelectedChipCountComponent,\n AlertBannerComponent,\n ErrorMessageComponent,\n ToggleComponent,\n LabelComponent,\n ModalComponent,\n CollapseHeaderComponent,\n SwitchGroupComponent,\n ModalButtonRowComponent,\n InformationalImageComponent,\n SelectComponent,\n LegendDropdownComponent,\n RecurrencePatternForm,\n RecurrenceDateForm,\n RecurringBookingForm,\n ConflictsModalComponent,\n OverrideChangesModalComponent,\n ConflictAlertModalComponent,\n CngSelectComponent, \n DropdownTriggerForDirective,\n CngSelectOptionsComponent,\n TooltipComponent,\n TooltipDirective,\n ZoomWarningComponent,\n CustomSnackbarComponent,\n CateringDropComponent\n ],\n exports: [\n AutoCompleteChipSelectItemComponent,\n AutoCompleteSelectOptionComponent,\n AcaDatePickerComponent,\n MckDatePickerComponent,\n DateTzCalendarWidgetComponent,\n DateTzDatePickerComponent,\n TimeFieldComponent,\n DateTzTimeFieldComponent,\n DurationFieldComponent,\n DateTzDurationFieldComponent,\n RadioSelectComponent,\n FilterPipe,\n SanitizePipe,\n SpacerComponent,\n CalendarIconComponent,\n ChevronIconComponent,\n AlertBannerComponent,\n ReactiveFormsModule,\n FormsModule,\n ToggleComponent,\n LabelComponent,\n ModalComponent,\n CollapseHeaderComponent,\n SwitchGroupComponent,\n ModalButtonRowComponent,\n InformationalImageComponent,\n SelectComponent,\n LegendDropdownComponent,\n RecurrencePatternForm,\n RecurrenceDateForm,\n RecurringBookingForm,\n ConflictsModalComponent,\n OverrideChangesModalComponent,\n ConflictAlertModalComponent,\n CngSelectComponent, \n DropdownTriggerForDirective,\n CngSelectOptionsComponent,\n TooltipComponent,\n TooltipDirective,\n ZoomWarningComponent,\n ],\n entryComponents: [\n CustomSnackbarComponent,\n CateringDropComponent\n ]\n \n})\nexport class UiModule {\n}\n","/**\n * Generate a list of time options for the given date\n * @param datestamp Date to generate options for\n * @param show_past Whether past times should be options\n */\n\nimport {\n closestToTimeSlot,\n closestToTimeSlotTz,\n DurationGroup,\n durationHumanized,\n timeFormatString,\n timeWithGmtOffsetFormatString,\n unique\n} from '@mckinsey-converge/base';\nimport { SelectOption } from '../types';\nimport { DateTZ } from \"@mckinsey-converge/date-tz\";\nimport { DateTime } from 'luxon';\n\n// 24 hours\nexport const ALL_DAY_BOOKING_VALUE = 60 * 24;\n\nexport const DEFAULT_DURATION = 30;\n\n// R--- depreciate.\nexport const generateAvailableTimes = (\n datestamp: number,\n showPast: boolean,\n step: number = 15,\n timezone: string = new DateTZ({ date: Date.now() }).local_tz\n): SelectOption[] => {\n // R--- refactor to only used dateTz input and drop timezone param.\n // now needs the building timezone for isAfter to work correctly\n const now = new DateTZ({ date: Date.now(), is_local_tz: false, building_tz: timezone });\n // date needs the building timezone for isAfter to work correctly\n let date = new DateTZ({ date: datestamp, is_local_tz: false, building_tz: timezone });\n // Check if we're today or a future date\n const blocks: SelectOption[] = [];\n if (showPast || date.isAfterDate(now, 'day')) {\n // later than today\n date = date.startOfValue('day');\n } else {\n // today\n date = now;\n }\n // Get the closest timeslot to the start time\n const inputDate = DateTime.fromMillis(date.ms);\n const closestDate = closestToTimeSlot(inputDate, step);\n // Date changed to the closest time\n date = new DateTZ({ date: closestDate.valueOf(), is_local_tz: false, building_tz: timezone });\n const end = date.endOfValue('day');\n // Add options for the rest of the day\n while (date.isBeforeDate(end)) {\n blocks.push({\n display: timeWithGmtOffsetFormatString(date),\n shortDisplay: date.formatDate('hh:mma'),\n value: date.formatDate('HH:mm')\n });\n date = date.addValue({ minutes: step });\n }\n return blocks;\n};\n\n\nexport const generateAvailableTimesTz = (\n fromDateTz: DateTZ,\n showPast: boolean,\n step: number = 15,\n timezone: string = new DateTZ({ date: Date.now() }).local_tz,\n all_day: boolean = false,\n extras: SelectOption[] = [],\n startFromDateTz: boolean = false\n): SelectOption[] => {\n // now needs the building timezone for isAfter to work correctly\n const now = new DateTZ({ date: Date.now(), is_local_tz: false, building_tz: timezone });\n // date needs the building timezone for isAfter to work correctly\n let dateTz = fromDateTz.clone();\n // Check if we're today or a future date\n const blocks: SelectOption[] = [];\n if (showPast || dateTz.isAfterDate(now, 'day')) {\n // later than today\n dateTz = dateTz.startOfValue('day');\n } else {\n // today/fromDateTz using the flag\n dateTz = startFromDateTz ? dateTz : now;\n }\n // Get the closest timeslot to the start time\n dateTz = closestToTimeSlotTz(dateTz, step);\n // Date changed to the closest time\n const end = dateTz.endOfValue('day');\n // Add the all day option for today\n if (all_day && dateTz.isSameDate(now, 'day')) {\n const startOfDay = dateTz.startOfValue('day');\n blocks.push({\n display: timeWithGmtOffsetFormatString(startOfDay),\n shortDisplay: startOfDay.formatDate('hh:mma'),\n value: startOfDay\n })\n }\n // Add options for the rest of the day\n while (dateTz.isBeforeDate(end)) {\n blocks.push({\n display: timeWithGmtOffsetFormatString(dateTz),\n shortDisplay: dateTz.formatDate('hh:mma'),\n value: dateTz, \n });\n \n dateTz = dateTz.addValue({ minutes: step });\n }\n\n return unique(extras.concat(blocks), 'shortDisplay');\n};\n\n/**\n * Generates list of duration options for new booking flow.\n * @param date - The start dateTime\n * @param max - The max number of minutes to go to from the date param.\n * @param min - The min number of minutes to display first time from.\n * @param step - The number of minutes to step up by for timeslots.\n */\nexport const generateDurationOptions = (\n date: DateTZ,\n max: number,\n min: number,\n step: number,\n extended: boolean): SelectOption[] => {\n const blocks: SelectOption[] = [];\n let value = min;\n while (value <= max) {\n let duration: string;\n if (extended) {\n const d = durationHumanized(value - min, true);\n duration = d ? `+${d}` : 'Current';\n } else {\n duration = durationHumanized(value, true);\n }\n\n blocks.push({\n value,\n display: `${date.addValue({ minutes: value }).formatDate(timeFormatString()).toLocaleLowerCase()} (${duration})`,\n });\n value += step;\n }\n return blocks;\n};\n\nexport const allDayOption: SelectOption = ({\n value: ALL_DAY_BOOKING_VALUE,\n display: 'All Day'\n});\n\nexport const oneWeekOption: SelectOption = ({\n value: 60 * 24 * 7, // 1 week\n display: 'One Week'\n});\n\nexport const defaultDurationGroups: DurationGroup[] = [\n {\n start: 15,\n step: 15,\n max: 60 * 24\n }\n // , {\n // start: 60,\n // step: 30,\n // max: (60 * 8) - 1 // 8 hours\n // }, {\n // start: 60 * 8,\n // step: 60,\n // max: 60 * 24 // 24 hours\n // }\n];\n\n/**\n * Maps the {@link DurationGroup} to {@link SelectOption} and appends the default all day and week options.\n */\nexport const generateDurationOptionsFromGroups = (date: DateTZ, durationGroups: DurationGroup[], extended: boolean): SelectOption[] => [\n ...(durationGroups.map(duration => generateDurationOptions(date, duration.max, duration.start, duration.step, extended)).reduce(((previousValue, currentValue) => {\n previousValue.push(...currentValue);\n return previousValue;\n }), [])),\n // allDayOption,\n // oneWeekOption\n ];\n","import { Component, OnInit } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'mck-zoom-warning',\n templateUrl: './zoom-warning.component.html',\n styleUrls: ['./zoom-warning.component.scss']\n})\nexport class ZoomWarningComponent {\n\n constructor(private dialogRef: MatDialogRef) {}\n\n onCloseClick(): void {\n this.dialogRef.close();\n }\n}\n","
\n

Excessive zoom warning

\n
\n\n
\n
\n

\n
\n
\n
\n\n
\n \n
\n
","export * from './lib/user.module';\nexport * from './lib/user.actions'\nexport * from './lib/user.types'\nexport * from './lib/user.reducer'\n","import { \n createLoadingAction\n } from '../../../loading/src/lib/loading.actions';\nimport {\n UserState,\n UserStoreState\n} from './user.types';\nimport { User } from '../../../data-common/src/lib/users/user.class';\nimport { createSelector } from '@ngrx/store';\n\nexport const loadUser = createLoadingAction('CurrentUser', 'current');\n\nexport const selectUserState = ({ user }: UserStoreState) => user;\n\nexport const selectHasUserData = createSelector(createSelector(selectUserState, loadUser.selectors.model), (state) => !!state.optionalSuccess);\n\nexport const selectCurrentUser = createSelector(selectUserState, loadUser.selectors.optionalSuccess);\n","import { Injectable } from '@angular/core';\nimport {\n Actions,\n Effect\n} from '@ngrx/effects';\nimport { createLoadingEffect } from '@mckinsey-converge/loading';\nimport { loadUser } from './user.actions';\nimport { UsersService } from '../../../data-common/src/lib/users/users.service';\n\n\n@Injectable()\nexport class UserEffects {\n\n constructor(private actions: Actions,\n private userService: UsersService) {\n }\n\n @Effect()\n loadUser = createLoadingEffect(this.actions, loadUser, () => this.userService.loadCurrentUser());\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { StoreModule } from '@ngrx/store';\nimport { userReducer } from './user.reducer';\nimport { EffectsModule } from '@ngrx/effects';\nimport { UserEffects } from './user.effects';\n\n@NgModule({\n imports: [\n CommonModule,\n StoreModule.forFeature('user', userReducer),\n EffectsModule.forFeature([UserEffects])\n ]\n})\nexport class UserModule {\n}\n","import { createReducer } from '@ngrx/store';\nimport { UserState } from './user.types';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { loadUser } from './user.actions';\n\n\nexport const initialUserState: UserState = {\n current: LoadingModel.empty()\n};\n\nexport const userReducer = createReducer(initialUserState,\n ...loadUser.ons);\n","function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = \"./$$_lazy_route_resource lazy recursive\";","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { ShellWrapperComponent } from './shell/shell.component';\n\nconst routes: Routes = [\n {\n path: '',\n component: ShellWrapperComponent,\n children: [\n {\n path: 'home',\n loadChildren: () => import('./booking/booking.module').then((m) => m.BookingModule),\n },\n { path: '**', redirectTo: 'home' },\n ],\n },\n { path: '**', redirectTo: 'home' },\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes, { useHash: true })],\n exports: [RouterModule],\n})\nexport class AppRoutingModule {}\n","import {\n Component,\n OnInit,\n ViewEncapsulation\n} from '@angular/core';\nimport { ActivatedRoute, GuardsCheckEnd, NavigationEnd, NavigationStart, Router } from '@angular/router';\nimport { BaseDirective, detectIE } from '@mckinsey-converge/base';\nimport {\n ApplicationService,\n BookingsService,\n OrganisationService,\n SpacesService\n} from '@mckinsey-converge/data-common';\nimport { environment } from 'src/environments/environment';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ZoomWarningComponent } from '@mckinsey-converge/ui';\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: [\n './styles/app.component.scss',\n './styles/custom-element.styles.scss',\n './styles/native-element.styles.scss'\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class AppComponent extends BaseDirective implements OnInit {\n constructor(\n private _app: ApplicationService,\n private _org: OrganisationService,\n private _spaces: SpacesService,\n private _bookings: BookingsService,\n private _router: Router,\n private _route: ActivatedRoute,\n private _dialog: MatDialog,\n ) {\n super();\n\n // ensure app is trusted in dev mode so we can preserve login.\n if (!environment.production) {\n localStorage.setItem('trusted', 'true');\n }\n\n\n if (detectIE() && detectIE() < 12) {\n location.href = `${location.origin}${location.pathname}assets/not-supported.html`;\n return;\n }\n }\n\n public ngOnInit(): void {\n this._router.events.subscribe((val: NavigationStart) => {\n const bookingForm = JSON.parse(localStorage.getItem('bookingForm'));\n if (val && val.navigationTrigger && val.url) {\n // Redirect everyone who doesn't have an active bookingForm back to the home page.\n const cleanHash = location?.hash.split('?')[0];\n const isLoadBookingUrl = cleanHash.indexOf('#/home/booking/') === 0;\n const isLoadCateringUrl = cleanHash.indexOf('#/home/catering/') === 0;\n if (!isLoadBookingUrl && !isLoadCateringUrl && cleanHash && ['#/home', '#/home/manage', '#/home/create', '#/home/edit'].indexOf(cleanHash) === -1 && bookingForm && !bookingForm?.activeForm) {\n location.href = `${location.origin}`;\n return;\n }\n }\n\n })\n this.adjustZoom();\n }\n\n private adjustZoom() {\n const clientWidth = document.body.clientWidth;\n if (this.isMobileOrTablet()) { // Do not show the warning if it's a mobile or tablet device\n return;\n }\n if (clientWidth < 1300) {\n this._dialog.open(ZoomWarningComponent);\n }\n }\n private isMobileOrTablet(): boolean {\n const userAgent = navigator.userAgent || navigator.vendor;\n const maxTouchPoints = navigator.maxTouchPoints || 0; // Check for touch points \n if (maxTouchPoints > 0 && window.innerWidth <= 1024) {\n return true;\n } // Check for common mobile/tablet user agent strings \n const mobileAgents = ['Android', 'webOS', 'iPhone', 'iPad', 'iPod', 'BlackBerry', 'IEMobile', 'Opera Mini'];\n for (const agent of mobileAgents) {\n if (userAgent.indexOf(agent) > -1) {\n return true;\n }\n }\n return false;\n }\n}\n","
\n \n
\n","// remove after trigger build\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { NgModule } from '@angular/core';\nimport { HttpClientModule } from '@angular/common/http';\nimport { FormsModule } from '@angular/forms';\nimport { MAT_LABEL_GLOBAL_OPTIONS } from '@angular/material/core';\n\nimport { ComposerModule } from '@placeos/composer';\n\nimport { AppRoutingModule } from './app-routing.module';\nimport { AppComponent } from './app.component';\nimport { environment } from '../environments/environment';\nimport { SharedContentModule } from './shared/shared.module';\n\nimport { ShellWrapperComponent } from './shell/shell.component';\nimport {\n ActionReducer,\n MetaReducer,\n StoreModule\n} from '@ngrx/store';\nimport { StoreDevtoolsModule } from '@ngrx/store-devtools';\nimport { BookingModule } from 'src/app/booking/booking.module';\nimport { BookingsModule } from '@mckinsey-converge/bookings';\nimport { BuildingsModule } from '@mckinsey-converge/buildings';\nimport { EffectsModule } from '@ngrx/effects';\nimport { DEFAULT_SETTINGS } from 'src/environments/settings';\nimport { provideMockSettingsObject } from '@mckinsey-converge/data-common';\nimport { OrganisationModule } from '@mckinsey-converge/organisation';\nimport { localStorageSync } from 'ngrx-store-localstorage';\nimport { UiModule } from '@mckinsey-converge/ui';\nimport { RoomsModule } from '@mckinsey-converge/rooms';\nimport { ENVIRONMENT_TOKEN } from '@mckinsey-converge/environment';\nimport { LegacyOverlaysModule } from '@mckinsey-converge/legacy-overlays';\nimport { UserModule } from '@mckinsey-converge/user';\nimport { MapModule } from 'src/app/map/map.module';\n\n/**\n * Cache some state in local storage. Not for use in production.\n */\nexport function localStorageSyncReducer(reducer: ActionReducer): ActionReducer {\n // Keys needed to fix prod reloading. MCK-1229\n let keys = [\n 'buildings',\n 'bookingForm',\n 'rooms',\n ];\n\n if (!environment.production) {\n keys = [\n 'bookings',\n 'buildings',\n 'organisation',\n 'bookingForm',\n 'rooms',\n 'user'\n ];\n }\n\n return localStorageSync({\n keys,\n rehydrate: true,\n })(reducer);\n}\n\nconst metaReducers: Array> = [localStorageSyncReducer];\n\n\n@NgModule({\n declarations: [\n AppComponent,\n ShellWrapperComponent\n ],\n imports: [\n BrowserModule,\n BrowserAnimationsModule,\n AppRoutingModule,\n HttpClientModule,\n FormsModule,\n ComposerModule,\n SharedContentModule,\n LegacyOverlaysModule,\n StoreModule.forRoot({}, { metaReducers }),\n StoreDevtoolsModule.instrument({\n maxAge: 100,\n logOnly: environment.production\n }),\n EffectsModule.forRoot(),\n BookingsModule,\n BookingModule,\n BuildingsModule,\n MapModule,\n OrganisationModule,\n RoomsModule,\n UiModule,\n UserModule\n ],\n providers: [\n { provide: MAT_LABEL_GLOBAL_OPTIONS, useValue: { float: 'nevet' } },\n provideMockSettingsObject(DEFAULT_SETTINGS),\n { provide: ENVIRONMENT_TOKEN, useValue: environment }\n ],\n bootstrap: [AppComponent]\n})\nexport class AppModule {\n}\n","import { Component, OnInit, Input, Output, EventEmitter, ViewChild } from '@angular/core';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\nimport { BookingStateService, OrganisationService } from '@mckinsey-converge/data-common';\nimport { DateNow, DateTZ, getTimezoneOffsetString, toMiddayUTC } from '@mckinsey-converge/date-tz';\n\n@Component({\n selector: 'calendar-date-widget',\n templateUrl: './calendar-date-widget.component.html',\n styleUrls: ['./calendar-date-widget.component.scss'],\n})\nexport class CalendarDateWidgetComponent extends BaseDirective implements OnInit {\n /** Currently selected date */\n @Input() public dateTz: DateTZ = DateNow(new Date());\n /** Currently building timezone */\n @Input() public timezone: string;\n /** Currently active zone */\n @Input() public zone: string;\n /** Whether to show new item button */\n @Input() public show_add_item = false;\n /** Whether to show the events for the active month */\n @Input() public show_events: boolean = false;\n /** Preserve last selected date */\n @Input() public retainSelectedDate: boolean = false;\n /** Emitter for changes selected date */\n @Output() public dateChangeTz = new EventEmitter();\n /** Emitter for add item button */\n @Output() public event = new EventEmitter();\n /** Counters of the events on given dates. Key format is `yyyy-MM-dd` */\n public event_map: { [date: string]: number };\n\n public fromDateTz = DateNow().subtractValue({ months: 6 });\n\n public get now() {\n return DateNow();\n }\n\n /** Display string for the currently selected date */\n public get tz(): string {\n return getTimezoneOffsetString(this.timezone_value);\n }\n\n public get timezone_value() {\n return localStorage.getItem('CONCIERGE.timezone') || this.timezone || this.now.building_tz;\n }\n\n public get is_today() {\n return new DateTZ({\n date: toMiddayUTC(this.dateTz).ms,\n is_local_tz: false,\n building_tz: this.timezone_value,\n }).isSameDate(\n new DateTZ({\n date: Date.now(),\n is_local_tz: false,\n building_tz: this.timezone_value,\n }),\n 'day'\n );\n }\n\n constructor(private _bookings: BookingStateService, private _org: OrganisationService) {\n super();\n }\n\n public ngOnInit(): void {\n // CONCIERGE.date: Get the localstorage date and timezone when changing pages.\n let date: any;\n if(!this.retainSelectedDate) {\n date = +localStorage.getItem('CONCIERGE.date') || this.now.ms;\n } else {\n date = this.now.ms;\n }\n\n \n /* istanbul ignore else */\n if (date && (date !== this.dateTz.ms || this.timezone_value !== this.dateTz.building_tz)) {\n // CONCIERGE.date Reapply the localstorage date and timezone when changing pages.\n this.timeout(\n 'init',\n () => {\n this.dateTz = new DateTZ({\n date,\n is_local_tz: false,\n building_tz: this.timezone_value,\n });\n this.dateChangeTz.emit(this.dateTz);\n this.updateDate();\n },\n 10\n );\n }\n this.subscription(\n 'events',\n this._bookings._noOfMeetings.subscribe((list) => {\n this.event_map = {};\n this.event_map = list[0];\n })\n );\n }\n\n public noOfCount(event) {\n // Disabling bellow until find more reliable way to call as it is been called multiple times on hover/click\n // this._bookings.getDailyMeetingCount();\n // event.stopPropogation();\n }\n\n /**\n * Change the selected date with the arrow controls\n *\n */\n public changeDate(value: number) {\n let date = new DateTZ({\n date: toMiddayUTC(this.dateTz).ms,\n is_local_tz: false,\n building_tz: this.timezone_value,\n });\n date = date.addValue({ days: value });\n this.dateTz = date;\n this.dateChangeTz.emit(this.dateTz);\n localStorage.setItem('CONCIERGE.date', `${this.dateTz.ms}`);\n localStorage.setItem('CONCIERGE.timezone', `${this.timezone_value}`);\n this.updateDate();\n }\n\n /**\n * Change the selected date with the calendar widget\n *\n */\n public applyDatePickerValue(dateInputTz: DateTZ) {\n this.dateTz = new DateTZ({\n date: toMiddayUTC(dateInputTz).ms,\n is_local_tz: false,\n building_tz: this.timezone_value,\n });\n this.dateChangeTz.emit(this.dateTz);\n localStorage.setItem('CONCIERGE.date', `${this.dateTz.ms}`);\n localStorage.setItem('CONCIERGE.timezone', `${this.timezone_value}`);\n this.updateDate();\n this.closeDatePicker();\n }\n\n public updateDate() {\n this.timeout('update_date', () => this._bookings.setDate(this.dateTz));\n }\n\n /** Reset date to the current date */\n public resetDate() {\n this.dateTz = new DateTZ({\n date: toMiddayUTC(this.now).ms,\n is_local_tz: false,\n building_tz: this.timezone_value,\n });\n this.dateChangeTz.emit(this.dateTz);\n localStorage.setItem('CONCIERGE.date', `${this.dateTz.ms}`);\n localStorage.setItem('CONCIERGE.timezone', `${this.timezone_value}`);\n this.updateDate();\n }\n\n public closeDatePicker() {\n this.updateDate();\n }\n\n /** New Item button click */\n public newItem(): void {\n this.event.emit('new_item');\n }\n}\n","
\n\n \n
\n
\n \n
\n

Today

\n

{{ dateTz.ms | date: 'mediumDate':tz }}

\n
\n \n
\n
\n \n \n
\n
\n
\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { BookingCalendarWrapperComponent } from './booking-calendar-wrapper.component';\n\n\nconst routes: Routes = [\n { path: '', component: BookingCalendarWrapperComponent },\n { path: ':level', component: BookingCalendarWrapperComponent },\n { path: '**', redirectTo: '' }\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class BookingCalendarRoutingModule {}\n","import {\n Component,\n OnInit,\n ViewEncapsulation\n} from '@angular/core';\nimport { ActivatedRoute, GuardsCheckEnd, NavigationEnd, NavigationStart, Router } from '@angular/router';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n ApplicationService,\n BookingFormData,\n BookingsService,\n Building,\n OrganisationService,\n SettingsService,\n SpacesService,\n selectActiveForm\n} from '@mckinsey-converge/data-common';\nimport { Store, select } from '@ngrx/store';\nimport { distinctUntilChanged, first } from 'rxjs/operators';\n\nimport { RoutePayload, TopBarHeaderMode } from 'src/app/components/topbar-header/topbar-header.component';\nimport { RoomResultsState } from '../room-details/room-details.component';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\n@Component({\n selector: 'booking-calendar-wrapper',\n templateUrl: './booking-calendar-wrapper.html',\n styleUrls: ['./booking-calendar.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class BookingCalendarWrapperComponent extends BaseDirective implements OnInit {\n public TopBarHeaderMode = TopBarHeaderMode;\n\n public backRoute: RoutePayload = {\n route: ['/home', 'results'],\n queryParams: { display: 'list' },\n };\n orgBuildings: Building[] = [];\n \n constructor(\n private _org: OrganisationService,\n private _spaces: SpacesService,\n private _bookings: BookingsService,\n private settingService: SettingsService,\n private store: Store,\n ) {\n super();\n\n \n }\n\n public ngOnInit(): void {\n /** allow booking bypass to receive bookings for staff calendar view only */\n this.settingService.bypass_bookings = true;\n\n this.orgBuildings = this._org.buildings;\n\n this.subscription('activeForm', this.store.pipe(\n select(selectActiveForm),\n distinctUntilChanged()\n ).subscribe((next: BookingFormData | undefined) => {\n if (next && next?.dateTz) {\n localStorage.setItem('CONCIERGE.date', `${next.dateTz.ms}`);\n localStorage.setItem('CONCIERGE.timezone', `${next.timezone}`);\n const building = this._org.buildings.find(\n (_) => _.id === next.location.filter(el => el.groupChild)[0]?.meta?.building?.id\n );\n if(building) {\n this._org.building = building;\n }\n \n }\n }));\n\n this._org.initialised.pipe(first((_) => _)).subscribe(() => {\n this.orgBuildings = this._org.buildings;\n })\n\n \n }\n\n public onBackCallback() {}\n\n public ngOnDestroy(): void {\n /** disallowed booking bypass when you are moving from staff app calendar view*/\n this.settingService.bypass_bookings = false;\n }\n\n}\n","
\n\t
\n\t\t \n\t\t\n\t
\n\t\n\t\n
","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { BookingCalendarWrapperComponent } from './booking-calendar-wrapper.component';\n\nimport { StaffCalendarComponent } from './staff-calendar/staff-calendar.component';\nimport { CalendarDateWidgetComponent } from './booking-calendar-date-widget/calendar-date-widget.component';\nimport { DayViewTimelineComponent } from './staff-calendar/timeline/timeline.component';\nimport { DayViewSpaceComponent } from './staff-calendar/space/space.component';\nimport { DayViewSpaceEventComponent } from './staff-calendar/space/event/event.component';\n\n\nimport { BookingCalendarRoutingModule } from './booking-calendar-routing.module';\nimport { SharedContentModule } from 'src/app/shared/shared.module';\nimport { UiModule } from '@mckinsey-converge/ui';\n\nimport {CngMenuItemComponent} from './cng-menu-item/cng-menu-item.component';\n\nexport const bookingModuleDeclarations = [\n BookingCalendarWrapperComponent,\n StaffCalendarComponent,\n CalendarDateWidgetComponent,\n DayViewTimelineComponent,\n DayViewSpaceComponent,\n DayViewSpaceEventComponent,\n CngMenuItemComponent\n ];\n\nexport const bookingModuleImports = [\n CommonModule,FormsModule,\n ReactiveFormsModule,\n SharedContentModule,\n UiModule,\n \n \n];\n\n\n@NgModule({\n declarations: [...bookingModuleDeclarations],\n imports: [\n ...bookingModuleImports,\n BookingCalendarRoutingModule,\n // StoreModule.forFeature('bookingForm', bookingFormReducer)\n ]\n})\nexport class BookingCalendarModule {\n}","import {Component, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {NavItem} from './nav-item';\nimport { MatMenu } from '@angular/material/menu';\n\n@Component({\n selector: 'cng-menu-item',\n templateUrl: './cng-menu-item.component.html',\n styleUrls: ['./cng-menu-item.component.scss']\n})\nexport class CngMenuItemComponent implements OnInit {\n @Input() items: NavItem[];\n @Input() activeOption: string;\n @ViewChild('childMenu', {static: true}) public childMenu: any;\n\n @Output() public onChildSelect = new EventEmitter<{}>();\n \n constructor(public router: Router) {\n }\n\n ngOnInit() {\n }\n\n public notifySelection(node) {\n this.onChildSelect.emit(node);\n }\n}\n","\n \n \n 0\">\n \n \n \n \n \n \n \n \n \n ","import {\n Component,\n OnInit,\n Input,\n OnChanges,\n SimpleChanges,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { Router } from '@angular/router';\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { Space, BOOKING_STATUS, CloseDialogService, DialogIds, BookingStoreState, User } from '@mckinsey-converge/data-common';\nimport { ApplicationService } from '@mckinsey-converge/data-common';\nimport { CateringOrder } from '@mckinsey-converge/data-common';\n\nimport { Booking } from '@mckinsey-converge/data-common';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { RoomStoreState } from '@mckinsey-converge/rooms';\nimport { BuildingStoreState } from '@mckinsey-converge/buildings';\nimport { UserStoreState, selectCurrentUser } from '@mckinsey-converge/user';\nimport { Store } from '@ngrx/store';\nimport { take } from 'rxjs/operators';\n\n/** Details about the associated event overlapping with other events */\nexport interface IEventOverlap {\n /** Index of this item with the overlapping items */\n index: number;\n /** Total number of items overlapping with this one */\n total: number;\n}\nexport interface BookingDetailInfo {\n bookedBy: {\n display:boolean,\n value: string\n }\n}\nexport type RoomResultsState = BookingStoreState\n & RoomStoreState\n & BuildingStoreState\n & UserStoreState;\n \n@Component({\n selector: 'day-view-space-event',\n templateUrl: './event.component.html',\n styleUrls: ['./event.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DayViewSpaceEventComponent extends BaseDirective implements OnInit, OnChanges {\n /** Event to display */\n @Input() public booking: Booking;\n /** Date to display bookings for */\n @Input() public dateTz: DateTZ = DateNow(new Date());\n /** Space associated with the booking */\n @Input() public space: Space;\n /** Whether the item is a fixed size */\n @Input() public fixed: boolean;\n /** Overlap details for the booking */\n @Input() public overlap: IEventOverlap;\n /** Whether an action is being processed for this booking */\n @Input() public loading: boolean;\n /** Emitter for the current position of the booking within the timeline */\n @Output() public position = new EventEmitter<{ top: number; height: number }>();\n\n /** Position of the booking start time in the day */\n public top: number;\n /** Position of the booking relative to overlapping bookings */\n public left: number;\n /** Height based of the duration of the booking */\n public height: number;\n /** Size of the booking when overlapping with other bookings */\n public width: number;\n /** Offset from the booking's top that the setup time starts */\n public overflow_top: number;\n /** Offset from the booking's bottom that the breakdown time ends */\n public overflow_bottom: number;\n\n public approved: boolean;\n public declined: boolean;\n public bookingDetails: BookingDetailInfo;\n currentUser: User;\n constructor(\n private _service: ApplicationService,\n public store: Store,\n private _dialog: MatDialog,\n private _router: Router,\n private cdRef: ChangeDetectorRef,\n private closeDialogService: CloseDialogService\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.subscription('currentUser', this.store.select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n })\n );\n\n this.approved = this.booking.status === BOOKING_STATUS.approved;\n this.declined = this.booking.status === BOOKING_STATUS.declined;\n // test comment\n const {creator, organiser, booker_concierge} = this.booking;\n this.bookingDetails = {\n bookedBy: {\n display: creator && ( creator.email !== organiser.email || (creator.email === organiser.email && booker_concierge !== null && organiser.email !==booker_concierge['email']) ),\n value: (creator.email === organiser.email && booker_concierge !== null && organiser.email !==booker_concierge['email']) ? booker_concierge['name'] || booker_concierge['email'] : creator?.name || creator.email\n }\n }\n }\n\n public get local_id(): string {\n return this.booking.icaluid.substr(0, 6);\n }\n\n /** Type of booking */\n public get type(): string {\n const userEmail = this.currentUser.email;\n const { creator, organiser } = this.booking;\n if(userEmail === creator.email || userEmail === organiser.email) \n return this.booking.getType();\n else \n return 'others-booking';\n }\n\n /** Period that the booking will occur during the day */\n public get period(): string {\n // the booking time is being pass in as the local timezone version.\n return this.booking.time_period;\n }\n\n /** Number attendees expected to turn up to the booking */\n public get expected(): number {\n const expected = this.booking.expected_attendees;\n return this.space ? expected[this.space.email] || 0 : 0;\n }\n\n /** Whether the meeting has catering attached */\n public get has_catering(): boolean {\n return !!this.order;\n }\n\n public get order(): CateringOrder {\n return this.booking.catering.find((order) => order.location_id === this.space.email);\n }\n\n /** Whether booking is active */\n public get active(): boolean {\n const booking = this._service.get('CONCIERGE.day_view.viewing');\n return !booking || booking.id === this.booking.id;\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n /* istanbul ignore else */\n if (changes.booking || changes.overlap || changes.dateTz) {\n this.calculatePosition();\n this.approved = this.booking.status === BOOKING_STATUS.approved;\n this.declined = this.booking.status === BOOKING_STATUS.declined;\n }\n }\n\n /** Store the order details for viewing in another component */\n public storeOrder(order: CateringOrder) {\n const booking_details = this.booking.toApiJSON();\n localStorage.setItem('CONCIERGE.view_order', JSON.stringify(order.toJSON()));\n localStorage.setItem('CONCIERGE.view_booking', JSON.stringify(booking_details));\n localStorage.setItem('CONCIERGE.date', `${this.booking.startDateTz.ms}`);\n localStorage.setItem('CONCIERGE.timezone', `${this.booking.startDateTz.building_tz}`);\n }\n\n /**\n * View catering order for the booking\n */\n public viewOrder(order: CateringOrder) {\n /* istanbul ignore else */\n if (this.booking && this.booking.catering) {\n /* istanbul ignore else */\n if (localStorage) {\n this.storeOrder(order);\n }\n this._router.navigate(['/catering', 'orders'], {\n queryParams: { booking: this.booking.id, view: order.id },\n });\n }\n }\n\n /** Calculate the position */\n private calculatePosition() {\n /* istanbul ignore else */\n if (this.booking) {\n const overlap = this.overlap || { index: 0, total: 1 };\n const shown_date = this.dateTz.startOfValue('day');\n const date = this.booking.startDateTz.startOfValue('minute');\n const end = this.booking.endDateTz.startOfValue('minute');\n const from_previous_day = !date.isSameDate(shown_date, 'day');\n if (end.isBeforeDate(shown_date, 'day')) { // Hide booking if not on shown date\n this.top = -100;\n this.height = 1;\n return;\n }\n\n //R-- Stragest thing, but one time this was logging bookings form different timezones?\n // this.dateTz.logDateTz('calculatePosition this.dateTz')\n // this.booking.startDateTz.logDateTz('calculatePosition this.booking.startDateTz')\n\n const start = from_previous_day ? 0 : Math.abs(+date.dateDiff(shown_date, 'hours', 'hours').toFixed(3));\n const duration = Math.min(\n this.booking.duration,\n Math.abs(shown_date.dateDiff(date.addValue({ minutes: this.booking.duration }), 'minutes'))\n );\n this.top = Math.max(0, (start / 24) * 100);\n this.height = Math.min(\n 100 - this.top,\n this.fixed ? duration / 60 : (duration / 60 / 24) * 100\n );\n this.position.emit({ top: this.top, height: (duration / 60 / 24) * 100 });\n this.width = Math.min(100, 100 / overlap.total + 5);\n this.left = Math.min(100 - this.width, this.width * overlap.index - 5 * overlap.index);\n this.overflow_top =\n (this.booking.setup[this.space.email]\n ? (this.booking.setup[this.space.email] / 60) / duration\n : -0.1) * 100;\n this.overflow_bottom =\n (this.booking.breakdown[this.space.email]\n ? (this.booking.breakdown[this.space.email] / 60) / duration\n : -0.1) * 100;\n if (this.booking.all_day) {\n this.top = 0;\n this.height = 100;\n }\n }\n }\n\n public get emailURL() {\n const userEmail = this.currentUser.email;\n const userName = this.currentUser.name\n const { creator, organiser } = this.booking;\n\t\treturn `mailto:${encodeURIComponent(organiser.email)}?cc=${encodeURIComponent(userEmail)}&subject=Request%20to%20release%20room%20reservation%20-%20${encodeURIComponent(this.space.simple_name)}`;\n\t}\n\n /** Whether booking has been ended */\n public expired(): boolean {\n return ['started','in_progress','expired_yesterday', 'done'].includes(this.booking.timeBasedStatusLabel);\n }\n}\n","\n \n \n 50 ? ' low' : '')\"\n [style.z-index]=\"(overlap?.index || 0) + 2\"\n \n >\n
\n
{{ booking.all_day ? 'All Day' : period }}
\n
\n \n\n \n \n
\n
\n
\n
\n
Host: 
\n
\n {{ booking.organiser?.name || booking.organiser }}\n
\n
\n \n
Booked by: 
\n
\n {{ bookingDetails.bookedBy.value }}\n
\n
\n
\n
\n
{{ booking.title }}
\n
\n
\n
\n {{ booking.attendees ? booking.attendees.length || 'No' : 'No' }} Attendee{{\n booking.attendees?.length === 1 ? '' : 's'\n }}{{ expected ? '(' + expected + ' Expected)' : '' }}\n
\n
\n
0\">\n
\n Company: {{ booking.company.length }}\n
\n
\n
\n
Welcomed by: {{ booking.organiser?.name || booking.organiser }}
\n
\n
\n
Catered
\n
\n
\n \n \n \n \n\n","import {\n Component,\n OnChanges,\n Input,\n SimpleChanges,\n Output,\n EventEmitter,\n ViewChild,\n ElementRef,\n OnInit,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { CdkDragMove, CdkDragDrop } from '@angular/cdk/drag-drop';\nimport { MatDialog } from '@angular/material/dialog';\nimport { first } from 'rxjs/operators';\n\nimport { IEventOverlap } from './event/event.component';\nimport { BaseDirective, closestToTimeSlotTz, Identity } from '@mckinsey-converge/base';\nimport { OrganisationService, Space } from '@mckinsey-converge/data-common';\nimport { ApplicationService } from '@mckinsey-converge/data-common';\nimport { Booking } from '@mckinsey-converge/data-common';\nimport { ConfirmModalComponent } from '@mckinsey-converge/legacy-overlays';\nimport { DialogEvent, HashMap } from '@mckinsey-converge/base';\nimport { DayViewSettings } from '@mckinsey-converge/data-common';\nimport { SpacesService } from '@mckinsey-converge/data-common';\nimport { BookingsService } from '@mckinsey-converge/data-common';\n\nimport { BookingStateService } from '@mckinsey-converge/data-common';\nimport { convertTimezonedTimestampToLocalDateTz, DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n// import { BookingModalComponent } from 'src/app/bookings/booking-modal/booking-modal.component';\n\n@Component({\n selector: 'day-view-space',\n templateUrl: './space.component.html',\n styleUrls: ['./space.component.scss'],\n})\nexport class DayViewSpaceComponent extends BaseDirective implements OnInit, OnChanges {\n /** List of space dropzones connected to */\n @Input() public space_list: string[];\n /** Date to display events for */\n @Input() public dateTz: DateTZ;\n /** Space to display events for */\n @Input() public space: Space;\n /** Scroll value of the day view */\n @Input() public scroll: number;\n /** Only show events with setup and/or breakdown times */\n @Input() public overflow_only: boolean;\n /** Mapping of whether to show events with a given legend id */\n @Input() public legend: HashMap = {};\n /** Scroll value to add to drop placeholders */\n @Input('scrollTop') public scroll_top: number;\n /** Last update time of the displayed bookings */\n @Input('lastUpdate') public last_update: number;\n\n @Input() public eventMovingLoader : HashMap = {};\n /** Emitter for whether the space column is in view */\n @Output() public inView = new EventEmitter();\n /** Emitter for whether an event is being dragged */\n @Output() public dragging = new EventEmitter();\n /** Emitter for whether an event is being dropped and moving in progress */\n @Output() public moving = new EventEmitter<{}>();\n /** List of bookings for the current date and space */\n public event_list: Booking[] = [];\n /** Mapping of event IDs to overlap details */\n public overlap_details: HashMap = {};\n /** Mapping of positions of event in the day */\n public position_list: HashMap<{ top: number; height: number }> = {};\n /** Override for mapped position */\n public top: number;\n /** Client Rectangle for the container element box */\n public box: ClientRect;\n /** Whether the space list is in view */\n public in_view: boolean;\n /** ID of the booking with an action processing */\n public override_state: string;\n /** Map of bookings to whether they are loading */\n public loading: HashMap = {};\n /** Settings for day view */\n public settings: DayViewSettings = {} as any;\n\n /** Container element for the component contents */\n @ViewChild('view', { static: true }) private view: ElementRef;\n\n /** List of timeblocks to display */\n public time_blocks: Identity[] = this.generateTimeBlocks();\n\n /** Generate time blocks to display on the day view */\n private generateTimeBlocks(): Identity[] {\n const blocks: Identity[] = [];\n const date = DateNow(new Date()).startOfValue('hour');\n for (let i = 0; i < 24; i++) {\n blocks.push({\n id: date.setValue({ hour: i }).formatDate('HH:mm'),\n name: date.setValue({ hour: i }).formatDate('h:mma').toLocaleLowerCase(),\n });\n }\n return blocks;\n }\n constructor(\n private _service: ApplicationService,\n private _spaces: SpacesService,\n private _booking_state_service: BookingStateService,\n private _bookings: BookingsService,\n private _dialog: MatDialog,\n private cdr: ChangeDetectorRef,\n private _org: OrganisationService,\n ) {\n super();\n }\n\n /** Events to display for the active date */\n public events: Booking[] = []\n\n public ngOnInit(): void {\n this.events = this.filterEvents();\n this._service.initialised.pipe(first((_) => _)).subscribe(() => {\n this.settings = this._service.setting('app.day_view') || {};\n // this.subscription(\n // 'breakdown',\n // this._service\n // .listen('APP.breakdown')\n // .subscribe((state) => {\n // this.overflow_only = state;\n // this.events = [...this.filterEvents()];\n // })\n // );\n // this.subscription(\n // 'legend',\n // this._service\n // .listen('CONCIERGE.legend')\n // .subscribe((state) => (this.legend = state || {}))\n // );\n this.subscription(\n 'bookings',\n this._booking_state_service.filtered.subscribe((list) => {\n this.event_list = [...list];\n this.events = [...this.filterEvents()];\n this.cdr.detectChanges();\n })\n );\n this.checkInView();\n });\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n /* istanbul ignore else */\n if (changes.scroll) {\n this.checkInView();\n }\n if (changes.space) {\n this.event_list = [...this.event_list];\n this.timeout('in_view', () => this.checkInView(), 100);\n }\n /* istanbul ignore else */\n if (changes.last_update) {\n this.timeout('update_overlaps', () => this.calculateOverlaps(), 1000);\n }\n }\n\n //replace this with concierge space.comp filterEvents\n // private filterEvents(): Booking[] {\n // if (this.space) {\n // const bookings = this.event_list;\n // const list = bookings.filter((event) => {\n // if (this.override_state && this.override_state === event.icaluid) {\n // this.loading[event.id] = true;\n // }\n\n // const ignore = event.is_recurrent && event.recurrence_type === 'master';\n\n // return (\n // !ignore && !event.declined && // filtered declied bookings\n // event.room.email === this.space.email &&\n // (!this.overflow_only ||\n // event.setup[event.room.email] ||\n // event.breakdown[event.room.email])\n // );\n // }).map(e => new Booking({...e.toJSON()}) );\n\n // return list;\n // }\n // return [];\n // }\n\n private filterEvents(): Booking[] {\n if (!this.space) {\n return [];\n }\n \n return this.event_list.filter((event) => {\n // Mark as loading if override state matches.\n if (this.override_state && this.override_state === event.icaluid) {\n this.loading[event.id] = true;\n }\n \n const isRecurrentMaster = event.is_recurrent && event.recurrence_type === 'master';\n const isRoomEmailMatch = event.multi_rooms.some(room => room.email === this.space.email);\n \n // Determine if the event should be included based on setup or breakdown conditions.\n const isIncludedInSetupOrBreakdown = event.multi_rooms.some(room => {\n return event.setup[room.email] || event.breakdown[room.email];\n });\n \n return !isRecurrentMaster && isRoomEmailMatch && (!this.overflow_only || isIncludedInSetupOrBreakdown);\n }).map(event => new Booking({...event.toJSON()}));\n }\n\n /* istanbul ignore next */\n /**\n * Track by function for ngFor optimisation\n * @param index Index of the item\n * @param item Data associated with the item at the given index\n */\n public trackByFn(index: number, item: Booking) {\n return item.id || index;\n }\n\n /**\n * Calculate to overlap details for the booking events on the space\n */\n private calculateOverlaps() {\n const events = this.events.sort(\n (a, b) =>\n a.startDateTz.ms - b.startDateTz.ms ||\n a.duration - b.duration ||\n (a.title || '').localeCompare(b.title || '')\n );\n events.forEach((i) => (this.overlap_details[i.id] = { index: 0, total: 1 }));\n for (const bkn of events) {\n const bkn_start = bkn.startDateTz.startOfValue('minute');\n const bkn_end = bkn.endDateTz.startOfValue('minute');\n let count = 1;\n let index = 0;\n const collisions: Booking[] = [];\n for (const cmp of events) {\n /* istanbul ignore else */\n if (bkn.id !== cmp.id) {\n const cmp_start = cmp.startDateTz.startOfValue('minute');\n const cmp_end = cmp.endDateTz.startOfValue('minute');\n /* istanbul ignore else */\n if (\n bkn_start.isSameDate(cmp_start, 'minute') ||\n (bkn_start.isAfterDate(cmp_start) && bkn_start.isBeforeDate(cmp_end)) ||\n bkn_end.isSameDate(cmp_end, 'minute') ||\n (bkn_end.isAfterDate(cmp_start) && bkn_end.isBeforeDate(cmp_end))\n ) {\n count++;\n collisions.push(bkn);\n /* istanbul ignore else */\n if (\n events.findIndex((i) => i.id === bkn.id) >\n events.findIndex((i) => i.id === cmp.id)\n ) {\n index++;\n }\n }\n }\n }\n this.overlap_details[bkn.id] = { index: Math.max(0, index), total: count };\n }\n }\n\n /**\n * Check whether the space column is with the view of the\n */\n private checkInView() {\n /* istanbul ignore else */\n if (this.view && this.view.nativeElement) {\n const el = this.view.nativeElement;\n this.in_view =\n el.offsetLeft + this.scroll >= -240 &&\n el.offsetLeft + this.scroll <= window.innerWidth;\n this.inView.emit(this.in_view);\n }\n }\n\n /**\n * Initialise drag events\n */\n public initDrag() {\n this.box = this.view.nativeElement.getBoundingClientRect();\n this.dragging.emit(true);\n }\n\n /**\n * Cleanup after drag\n */\n public endDrag() {\n this.timeout('end_drag', () => (this.top = 0), 10);\n this.dragging.emit(false);\n }\n\n /**\n * Update top position of the dragged event placeholder\n * @param booking Booking being dragged\n * @param event Drag event\n */\n public updateDragTop(event: CdkDragMove) {\n /* istanbul ignore else */\n if (event.delta.y) {\n const y = event.pointerPosition.y;\n const top = (y - this.box.top - this.scroll_top) / this.box.height;\n const top_minutes = (Math.round((top * 24 * 60) / 15) * 15) / 60;\n this.top = (top_minutes / 24) * 100;\n\n }\n }\n\n\n\n\n\n public checkAvailabilityOnGivenTime(selectedBlockStart, selectedBlockEnd) {\n const runningBookings =\n this.events?.filter((bks) => {\n const startEpoch = new DateTZ({\n date: bks.start_epoch * 1000,\n is_local_tz: false,\n building_tz: bks.timezone,\n }).ms;\n const endEpoch = new DateTZ({\n date: bks.end_epoch * 1000,\n is_local_tz: false,\n building_tz: bks.timezone,\n }).ms;\n const hasValidBreakdown: boolean =\n bks.breakdown &&\n Object.values(bks.breakdown).some((value) => value !== null);\n if (selectedBlockStart.ms === endEpoch && hasValidBreakdown) {\n return true;\n } else\n return (\n (selectedBlockStart.ms >= startEpoch && selectedBlockStart.ms < endEpoch) ||\n (selectedBlockEnd.ms > startEpoch && selectedBlockEnd.ms < endEpoch)\n );\n }) || [];\n return !!runningBookings.length;\n }\n\n\t\t/** Whether booking has been ended */\n public expired(booking): boolean {\n\t\t\treturn booking.timeBasedStatusLabel === 'done';\n\t\t}\n\n\t\t\n}\n","\n\n
\n
\n
\n
\n
\n\n \n \n \n\t\t\n
\n
\n \n
\n
\n
\n \n\n\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { MatDialog } from '@angular/material/dialog';\nimport { first, take } from 'rxjs/operators';\n\nimport { BaseDirective, HashMap, Identity } from '@mckinsey-converge/base';\n// import { BookingModalComponent } from 'src/app/bookings/booking-modal/booking-modal.component';\n\nexport interface NavItem {\n\tdisplayName: string;\n\ticonName?: string;\n\troute?: string;\n\tmeta?:{}; \n\tchildren?: NavItem[];\n}\n\n\nimport {\n ApplicationService,\n BookingStateService,\n BookingStoreState,\n BuildingLevel,\n OrganisationService,\n selectBookingByIdResultsFromState,\n User,\n Booking,\n SpacesService,\n Space,\n Building,\n searchRoomsAndBookings\n} from '@mckinsey-converge/data-common';\n\n\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { UserStoreState } from '@mckinsey-converge/user';\nimport { Store } from '@ngrx/store';\nimport { BuildingStoreState } from 'libs/buildings/src';\nimport { MyBookingsStoreState } from '@mckinsey-converge/bookings';\nimport { Subscription } from 'rxjs';\nimport { DropdownOpion } from '@mckinsey-converge/ui';\n\nexport type RoomBookingStoreState = BookingStoreState & BuildingStoreState & MyBookingsStoreState & UserStoreState;\n\n@Component({\n selector: 'staff-calendar',\n templateUrl: './staff-calendar.component.html',\n styleUrls: ['./staff-calendar.component.scss']\n})\nexport class StaffCalendarComponent extends BaseDirective implements OnInit {\n /** Currently selected date, starts out with no timezone data, gets updated later */\n public dateTz: DateTZ = DateNow(new Date());\n\n /** ID of the currently selected level */\n public active_level: string = '';\n /** ID of the currently selected type */\n public active_type: string = '';\n /** List of levels available for the active building */\n public levels: BuildingLevel[] = [];\n /** List of space types available for the active building */\n public space_types: Identity[] = [];\n /** Whether to show only items with a setup and/or breakdown time */\n public only_overflow: boolean;\n \n\n\t\tprivate spaceTypesSubscription: Subscription;\n\n\t\tevent_list: Booking[] = [];\n\t\tsearchStr: any;\n\t\tfoundSearchLength: number = 0;\n\t\tsearchedCounter: any = 1;\n\t\tshowSrchWarning: boolean;\n\t\ttotalFoundItem: number = 0;\n spaces: Space[] = [];\n\t\tbuildingsInSameCity: Building[];\n\t\tbuildingMenuItems: NavItem[];\n\t\tactiveBuildingName: string;\n\t levelsDD: any = [];\n\t roomLevelDD: { ddBoxClass: string; options: any; defaultSelected: any; onChangeCallback: any; };\n \n\n\n constructor(\n private _service: ApplicationService,\n private _org: OrganisationService,\n private _dialog: MatDialog,\n private _router: Router,\n private _route: ActivatedRoute,\n private _booking_state_service: BookingStateService,\n private _spaces: SpacesService,\n private store: Store,\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this._service.title = 'Day View';\n\n\t\t\t\tthis._org.initialised.pipe(first((_) => _)).subscribe(() => {\n // Init dateTz here once the organization data is loaded.\n this.dateTz = new DateTZ({ date: this.dateTz.ms, is_local_tz: false, building_tz: this.timezone });\n this.subscription(\n 'route.params',\n this._route.paramMap.subscribe((params) => {\n /* istanbul ignore else */\n if (params.has('level') && this.active_level !== params.get('level')) {\n const level = this._org.levelWithID(params.get('level'));\n /* istanbul ignore else */\n if (level) {\n const building = this._org.buildings.find(\n (bld) => bld.id === level.building_id\n );\n /* istanbul ignore else */\n if (building) {\n this.active_level = level.id;\n this._org.building = building;\n this._booking_state_service.setZone(this.active_level || this._org.building.id);\n }\n }\n }\n })\n );\n this.subscription(\n 'building',\n this._org.listen('active_building').subscribe(() => {\n this._booking_state_service.updateRoomList();\n // Update dateTz here when the building is changed.\n\t\t\t\t\t\t\t\t\t\tthis.dateTz = new DateTZ({\n\t\t\t\t\t\t\t\t\t\t\tdate: this.dateTz.ms,\n\t\t\t\t\t\t\t\t\t\t\tis_local_tz: false,\n\t\t\t\t\t\t\t\t\t\t\tbuilding_tz: this.timezone,\n\t\t\t\t\t\t\t\t\t\t});\n const building = this._org.building;\n\n /* istanbul ignore else */\n if (!building.levels.find((lvl) => lvl.id === this.active_level)) {\n this.active_level = building?.levels[0]?.id;\n this.updateLevel();\n }\n\t\t\t\t\t\t\t\t\t\tthis.initSpace();\n\n this.levels = [{ id: '', name: 'All Levels' } as any].concat(building.levels);\n\t\t\t\t\t\t\t\t\t\tthis.levels.sort((a, b) => b.name.localeCompare(a.name, undefined, {\n\t\t\t\t\t\t\t\t\t\t\t\tnumeric: true,\n\t\t\t\t\t\t\t\t\t\t\t\tignorePunctuation: true,\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\tthis.levelsDD = [];\n\t\t\t\t\t\t\t\t\t\tthis.levels.forEach(el => {\n\t\t\t\t\t\t\t\t\t\t\tthis.levelsDD.push({\n\t\t\t\t\t\t\t\t\t\t\t\t display: el.name, value: el.id, meta: {} \n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\t\t\tthis.roomLevelDD = {\n\t\t\t\t\t\t\t\t\t\t\tddBoxClass: 'room-level',\n\t\t\t\t\t\t\t\t\t\t\toptions: this.levelsDD,\n\t\t\t\t\t\t\t\t\t\t\tdefaultSelected: this.levelsDD.filter(el => el.value === this.active_level )[0],\n\t\t\t\t\t\t\t\t\t\t\tonChangeCallback: this.onChangeActiveLevel.bind(this)\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\tthis.buildingsInSameCity = this._org.buildings.filter(\n\t\t\t\t\t\t\t\t\t\t\t(_) => _.city === building.city\n\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\tthis.generateBuildingMenu();\n\n \n })\n );\n \n });\n\n this.subscription(\n 'bookings',\n this._booking_state_service.filtered.subscribe((list) => {\n this.event_list = [...this.filterEvents(list)];\n\n })\n );\n }\n\n private filterEvents(list): Booking[] {\n\t\t\tconst bookings = list;\n\t\t\tconst filterd_booking = bookings.filter((event) => {\n\t\t\t\t\tconst ignore = event.is_recurrent && event.recurrence_type === 'master';\n\t\t\t\t\treturn ( !ignore );\n\t\t\t});\n\n\t\t\treturn filterd_booking || [];\n }\n\n public initSpace() {\n this.subscription(\n 'spaces',\n this._spaces.listen('list').subscribe((spaces) => {\n const zone_id = !this.active_level ? this._org.building.id : this.active_level;\n this.spaces = this._spaces.filter((_) => _.zones.indexOf(zone_id) >= 0 && _.bookable);\n })\n );\n }\n\n // isIncludes = (item: any, field: string, searchVaue: string) => (item && item[field] && item[field].toLowerCase().includes(searchVaue));\n \n searchBooking(value) {\n\n // Resetting warning flag\n this.showSrchWarning = false;\n\n // Converting search value to lower case for case-insensitive comparison\n const searchValue = value.toLowerCase().trim();\n \n // Combining event list and space arrays into one arrya for searchig \n const allItems = [...this.event_list, ...this.spaces];\n // Filtering the combine array to find matching room or booking\n const filteredItems = searchRoomsAndBookings(allItems, searchValue);\n \n // Updating the total number of found items in serach\n this.totalFoundItem = filteredItems.length;\n\n // Setting showSrchWarning flag if no result were found \n this.showSrchWarning = !this.totalFoundItem;\n\n // Updating lenght of found items for later use\n this.foundSearchLength = this.totalFoundItem - 1;\n\n if(this.searchStr !== value) {\n // Setting the first found as the current viewing item\n this._service.set('CONCIERGE.day_view.viewing', filteredItems[0]);\n // Resetting the search counter\n this.searchedCounter = 0;\n }\n else {\n // Handling case where seached string is the same as previou one \n // Incrementing search counter, loopoing back to 0 if it exceed the length of found items\n this.searchedCounter = ( this.searchedCounter < this.foundSearchLength ) ? this.searchedCounter + 1 : 0\n // Setting the next found items as the current viewing item\n this._service.set('CONCIERGE.day_view.viewing', filteredItems[this.searchedCounter]);\n }\n\n // Storing the current search string for future camparison\n this.searchStr = value;\n }\n\n\n public ngOnDestroy(): void {\n this._service.set('CONCIERGE.day_view.viewing', []);\n }\n\n\n \n\n // that encapsulates the common elements.\n public get timezone() {\n return this._org.building?.timezone || localStorage.getItem('CONCIERGE.timezone');\n }\n\n public updateDateTz(dateTz: DateTZ) {\n this.dateTz = dateTz;\n }\n\n public updateLevel() {\n this._booking_state_service.setZone(this.active_level || this._org.building.id);\n\t\t\t\tthis.initSpace();\n // this._router?.url?.includes('/booking-calendar') && this._router.navigate(['/home/results/booking-calendar', this.active_level], {relativeTo: this._route});\n }\n\n\t\tpublic generateBuildingMenu() {\n\n\n\t\t\tif(this.buildingsInSameCity.length) {\n\n\t\t\t\tconst menuItem: NavItem[] = [{\n\t\t\t\t\tdisplayName: this._org.building.name,\n\t\t\t\t\ticonName: 'close',\n\t\t\t\t\tchildren:[]\n\t\t\t\t}];\n\n\n\t\t\t\tthis.buildingsInSameCity.forEach(el => {\n\t\t\t\t\tconst buildingLevels: NavItem[] = [];\n\n\t\t\t\t\tel.levels.forEach(lvl => buildingLevels.push({\n\t\t\t\t\t\tdisplayName: lvl.name,\n\t\t\t\t\t\tchildren: [],\n\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\tlevel_id : lvl.id,\n\t\t\t\t\t\t\tbuilding_id: lvl.building_id\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t);\n\n\t\t\t\t\tbuildingLevels.push({ displayName: 'All Levels', children: [], meta: {\n\t\t\t\t\t\t\tlevel_id : '',\n\t\t\t\t\t\t\tbuilding_id: el.id\n\t\t\t\t\t\t} \n\t\t\t\t\t});\n\n\t\t\t\t\tmenuItem[0].children.push({\n\t\t\t\t\t\tdisplayName: el.name,\n\t\t\t\t\t\tchildren: buildingLevels,\n\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\tbuilding_id: el.id\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t});\n\n\t\t\t\tthis.buildingMenuItems = menuItem;\n\n\t\t\t}\n\n\t\t\t\n\t\t}\n\n\t\tpublic updateActiveBuilding (node) {\n\t\t\t// console.log(node);\n\t\t\tconst building = this.buildingsInSameCity.filter(bld => bld.id === node.meta.building_id)[0];\n\t\t\tthis._org.building = building;\n\t\t\tthis.activeBuildingName = building.name;\n\n\t\t\n\t\t\t\tthis.levels = [{ id: '', name: 'All Levels' } as any].concat(building.levels);\n\t\t\t\tthis.levels.sort((a, b) => b.name.localeCompare(a.name, undefined, {\n\t\t\t\t\t\tnumeric: true,\n\t\t\t\t\t\tignorePunctuation: true,\n\t\t\t\t\t})\n\t\t\t\t);\n\n\n\t\t\t\tthis.active_level = node.meta.level_id;\n\t\t\t\tthis.roomLevelDD.defaultSelected = this.levelsDD.filter(el => el.value === this.active_level )[0];\n\t\t\t\tthis.updateLevel();\n\t\t}\n\n\t\tonChangeActiveLevel(level:any) {\n\t\t\tthis.active_level = level.value;\n\t\t\t\n\t\t\tthis.updateLevel();\n\n\t\t}\n\n\t\t\n}\n\n","
\n
\n \n
\n \n
\n \n \n 0\">\n
\n {{activeBuildingName || item.displayName}}\n
\n \n
\n
\n \n
\n \n \n
\n
\n \n 1\">\n\n
\n \n \n \n
{{ totalFoundItem }}
\n \n
\n \n No search found!\n
\n
\n
\n\n \n \n \n \n
\n\n
\n \n
\n
\n
\n\n","import {\n Component,\n ElementRef,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Renderer2,\n SimpleChanges,\n ViewChild, NgZone, DoCheck, ChangeDetectionStrategy, ChangeDetectorRef\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { MatDialog } from '@angular/material/dialog';\nimport { filter, first } from 'rxjs/operators';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { Space } from '@mckinsey-converge/data-common';\nimport { ApplicationService } from '@mckinsey-converge/data-common';\nimport { Booking } from '@mckinsey-converge/data-common';\nimport { HashMap, Identity } from '@mckinsey-converge/base';\n// import { MeetingDetailsModalComponent } from 'src/app/calendar/meeting-details-modal/meeting-details-modal.component';\nimport { SpacesService } from '@mckinsey-converge/data-common';\nimport { OrganisationService } from '@mckinsey-converge/data-common';\nimport { BookingStateService } from '@mckinsey-converge/data-common';\nimport { DateNow, DateTZ, toMiddayUTC } from '@mckinsey-converge/date-tz';\nimport { isToday } from 'date-fns';\nimport { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\n\n\n\nconst UPDATE_INTERVAL = 10;\n\n@Component({\n selector: 'day-view-timeline',\n templateUrl: './timeline.component.html',\n styleUrls: ['./timeline.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DayViewTimelineComponent\n extends BaseDirective\n implements OnInit, OnChanges, OnDestroy\n{\n /** DateTZ object of the active date */\n @Input() public dateTz: DateTZ = DateNow(new Date());\n /** ID of the active level */\n @Input() public level: string;\n /** ID of the room type to filter displayed spaces by */\n @Input() public space_type: string;\n /** List of shown legend items */\n @Input() public legend: HashMap = {};\n /** Whether to show only items with a setup and/or breakdown time */\n @Input() public overflow_only: boolean;\n /** Whether space bookings are being loaded */\n @Input() public loading: boolean;\n\n @Input() undo_action;\n\n /** List of timeblocks to display */\n public time_blocks: Identity[] = this.generateTimeBlocks();\n /** Top value of the content scroll */\n public scroll_top: number = 0;\n /** Left value of the content scroll */\n public scroll_left: number = 0;\n /** Offset of the scroll value when starting a drag */\n public scroll_offset: number = 0;\n /** List of spaces to display for */\n public spaces: Space[] = [];\n /** List of spaces to display for */\n public filtered_spaces: Space[] = [];\n /** Mapping of space ids to whether they are in view */\n public in_view: { [id: string]: boolean } = {};\n /** Percent of the day that is now */\n public now: number;\n /** Currently active hour of the day */\n public active_hour: string;\n /** Mapping of spaces loading booking date */\n public loading_space: { [id: string]: boolean } = {};\n /** Booking ID to open modal for */\n public view_id: string;\n /** Last update time for the space bookings */\n public last_update: number = 0;\n /** Whether an event is being dragged */\n public is_dragging: boolean;\n /** Client rectangle for the scroll area */\n public box: ClientRect;\n /** Whether to show the holding bay */\n // public show_holding_bay: boolean = true;\n\n public space_zones: string[] = [];\n\n public is_today: boolean = this.isToday();\n public modalInitialized = false;\n\n /** Scrollable area of the day view */\n @ViewChild('scroll_area', { static: true }) private scroll_area: ElementRef;\n\n @ViewChild(CdkVirtualScrollViewport) virtualScroll: CdkVirtualScrollViewport;\n isEventMoving: boolean = false;\n bookingEl: any;\n timeoutID: any;\n column: any;\n\n /** Update scroll box when the window is resized */\n @HostListener('window:resize')\n public onResize() {\n if (this.scroll_area['elementRef'].nativeElement) {\n this.box = this.scroll_area['elementRef'].nativeElement.getBoundingClientRect();\n }\n }\n\n public get is_loading() {\n return this._booking_state_service.loading;\n }\n\n public isToday() {\n return new DateTZ({\n date: toMiddayUTC(this.dateTz).ms,\n is_local_tz: false,\n building_tz: this._org.building?.timezone || localStorage.getItem('CONCIERGE.timezone'),\n }).isSameDate(\n new DateTZ({\n date: Date.now(),\n is_local_tz: false,\n building_tz: this._org.building?.timezone || localStorage.getItem('CONCIERGE.timezone'),\n }),\n 'day'\n );\n }\n\n constructor(\n private _service: ApplicationService,\n private _spaces: SpacesService,\n private _booking_state_service: BookingStateService,\n private _org: OrganisationService,\n private _route: ActivatedRoute,\n private _renderer: Renderer2,\n private _dialog: MatDialog,\n private _zone: NgZone,\n private cdr: ChangeDetectorRef,\n ) {\n super();\n }\n\n public get holding_bay(): Space {\n const bld = this._org.building;\n /* istanbul ignore else */\n if (bld && bld.holding_bay) {\n return this._spaces.find(bld.holding_bay);\n }\n return null;\n }\n\n public ngOnInit(): void {\n this._spaces.initialised.pipe(first((_) => _)).subscribe(() => {\n this._org.initialised.pipe(first((_) => _)).subscribe(() => {\n this._booking_state_service.startPollingEveryFiveMin();\n const zone_id = !this.level ? this._org.building.id : this.level;\n this.spaces = this._spaces.filter((_) => _.zones.indexOf(zone_id) >= 0);\n this.init();\n this.initSpaces();\n // Update time\n this.updateTime();\n this._zone.runOutsideAngular(() => {\n this.interval('time', () => this.updateTime(), 15 * 1000);\n });\n // R--- return to see if the booking service needs updating\n this.subscription(\n 'dateTz',\n this._booking_state_service.dateTz.subscribe((dateTz) => {\n // const dateTz = new DateTZ({date});\n this.dateTz = dateTz;\n })\n );\n });\n });\n this.is_today = this.isToday();\n\n this.subscription(\n 'spaces',\n this._spaces.listen('list').subscribe((spaces) => {\n const zone_id = !this.level ? this._org.building.id : this.level;\n this.spaces = this._spaces.filter((_) => _.zones.indexOf(zone_id) >= 0);\n this.init();\n this.initSpaces();\n // Update time\n this.updateTime();\n })\n );\n\n }\n\n ngAfterViewInit() {\n const d2 = this._renderer.createElement('div');\n this._renderer.addClass(d2, 'adjustable-room-block-2');\n this.virtualScroll.elementRef && this._renderer.appendChild(this.virtualScroll.elementRef.nativeElement, d2);\n }\n\n\n public ngOnChanges(changes: SimpleChanges): void {\n /* istanbul ignore else */\n if (changes.level && this._org.building) {\n const zone_id = !this.level ? this._org.building.id : this.level;\n this.spaces = this._spaces.filter((_) => _.zones.indexOf(zone_id) >= 0);\n this.updateTime();\n this.initSpaces();\n }\n if (changes.space_type) {\n this.initSpaces();\n }\n }\n\n public ngOnDestroy() {\n if (this._booking_state_service?.stopPolling) this._booking_state_service?.stopPolling();\n }\n\n public init() {\n this._service.title = 'Day View';\n this.subscription(\n 'viewing',\n this._service\n .listen('CONCIERGE.day_view.viewing')\n .subscribe((event) => this.scrollIntoView(event) )\n );\n // Subscribe to route query changes\n this.subscription(\n 'route.query',\n this._route.queryParamMap.subscribe((params) => {\n /* istanbul ignore else */\n if (params.has('view') || localStorage.getItem('CONCIERGE.view_booking')) {\n this.view_id = params.get('view');\n const details = localStorage.getItem('CONCIERGE.view_booking');\n const spaceJson = localStorage.getItem('CONCIERGE.view_booking_space');\n /* istanbul ignore else */\n if (details) {\n const space: Space | undefined = spaceJson\n ? new Space(JSON.parse(spaceJson))\n : undefined;\n const booking = new Booking({ ...JSON.parse(details), room: space });\n if(!this.modalInitialized) {\n this.modalInitialized = true;\n // this.view(booking, space);\n localStorage.removeItem('CONCIERGE.view_booking');\n localStorage.removeItem('CONCIERGE.view_booking_space');\n }\n }\n }\n })\n );\n \n /* istanbul ignore else */\n if (this.scroll_area['elementRef'].nativeElement) {\n this.box = this.scroll_area['elementRef'].nativeElement.getBoundingClientRect();\n }\n }\n\n /**\n * Update scroll parameters to match the change in the scroll position\n * @param event\n */\n public updateScroll(event) {\n this.scroll_top = event.target.scrollTop;\n this.scroll_left = event.target.scrollLeft;\n }\n\n\n\n /** Generate time blocks to display on the day view */\n private generateTimeBlocks(): Identity[] {\n const blocks: Identity[] = [];\n const date = DateNow(new Date()).startOfValue('hour');\n for (let i = 0; i < 24; i++) {\n blocks.push({\n id: date.setValue({ hour: i }).formatDate('HH:mm'),\n name: date.setValue({ hour: i }).formatDate('h:mma').toLocaleLowerCase(),\n });\n }\n return blocks;\n }\n\n /** Update the now line position */\n private updateTime() {\n const now = new DateTZ({\n date: Date.now(),\n is_local_tz: false,\n building_tz: this._org.building?.timezone || localStorage.getItem('CONCIERGE.timezone'),\n });\n this.now = (now.dateHour + now.minutes / 60) / 24;\n this.active_hour = now.startOfValue('hour').formatDate('HH:mm');\n this.is_today = this.isToday();\n this.cdr.detectChanges();\n }\n\n\n /**\n * Scroll booking to the event on the day view\n * @param booking Booking to scroll into view\n */\n private scrollIntoView(searchData: Booking | Space ) {\n if (searchData && this.scroll_area && this.scroll_area['elementRef'].nativeElement) {\n this.column && this._renderer.removeClass(this.column, 'wild');\n\n /** Select space column element using space id in search data - \n * space.id if seach data is space object or data.space.id if search data is booking object\n * \n */\n const spaceId = searchData['space'] ? searchData['space'].id : searchData.id;\n const element: HTMLDivElement = this.scroll_area['elementRef']\n .nativeElement.querySelector(`#space-col-${spaceId}`);\n\n\n this.column = element;\n\n this.bookingEl && this._renderer.removeClass(this.bookingEl, 'wild');\n if(searchData['space'] && searchData['space'].id) \n this.bookingEl = element?.querySelector(`#${searchData.id}`)?.querySelector('.event-container');\n\n\n /* istanbul ignore else */\n if (element) {\n this.timeoutID && clearTimeout(this.timeoutID);\n this._renderer.addClass(element, 'wild');\n this.bookingEl && this._renderer.addClass(this.bookingEl, 'wild');\n const scroll_box = this.scroll_area['elementRef'].nativeElement.getBoundingClientRect();\n\n let date_percent;\n if(searchData['space'] && searchData['space'].id) {\n date_percent = Math.abs(\n searchData['startDateTz'].dateDiff(\n searchData['startDateTz'].startOfValue('day'),\n 'minutes'\n )\n ) / (24 * 60);\n }\n \n\n const box = element.getBoundingClientRect();\n const left = box.left - scroll_box.left + this.scroll_area['elementRef'].nativeElement.scrollLeft - 500;\n const top = (searchData['space'] && searchData['space'].id) ? \n this.scroll_area['elementRef'].nativeElement.scrollHeight * date_percent - 10 :\n 0\n\n\n this.scroll_area['elementRef'].nativeElement.scrollTo({\n left: left,\n top: top,\n behavior: 'smooth',\n });\n\n this.timeoutID = setTimeout(()=> {\n element && this._renderer.removeClass(element, 'wild');\n this.bookingEl && this._renderer.removeClass(this.bookingEl, 'wild');\n }, 3000);\n }\n }\n }\n\n /**\n * Setup an auto-scroll for the display view\n * @param x\n * @param y\n */\n public scrollView(x: number, y: number) {\n /* istanbul ignore else */\n if (x || y) {\n this.scroll_area['elementRef'].nativeElement.scrollTop += y || 0;\n this.scroll_area['elementRef'].nativeElement.scrollLeft += x || 0;\n /* istanbul ignore else */\n if (\n (y &&\n this.scroll_area['elementRef'].nativeElement.scrollTop >=\n this.scroll_area['elementRef'].nativeElement.scrollHeight) ||\n (x &&\n this.scroll_area['elementRef'].nativeElement.scrollLeft >=\n this.scroll_area['elementRef'].nativeElement.scrollWidth) ||\n (y && this.scroll_area['elementRef'].nativeElement.scrollTop <= 0) ||\n (x && this.scroll_area['elementRef'].nativeElement.scrollLeft <= 0)\n ) {\n this.clearInterval('auto_scroll');\n }\n // this.updateScroll({ target: this.scroll_area['elementRef'].nativeElement });\n }\n }\n\n public clearSelected() {\n this._service.set('CONCIERGE.day_view.viewing', null);\n }\n\n public cancelScroll() {\n this.clearInterval('auto_scroll');\n }\n\n /** */\n\n // public dragChange(is_dragging: boolean) {\n // if (is_dragging) {\n // this.scroll_offset = this.scroll_area['elementRef'].nativeElement.scrollTop; \n // this.subscription(\n // 'listen_move',\n // this._renderer.listen('window', 'mousemove', (event: MouseEvent) => {\n // const position = { x: event.clientX, y: event.clientY };\n // const y = position.y > this.box.bottom - this.box.height * 0.05\n // ? 1\n // : position.y < this.box.top + this.box.height * 0.05\n // ? -1\n // : 0;\n // const x = position.x > this.box.right - this.box.width * 0.05\n // ? 1\n // : position.x < this.box.left + this.box.height * 0.05\n // ? -1\n // : 0;\n // this.scrollView(x * 5, y * 5);\n // this._zone.runOutsideAngular(() => {\n // this.interval('auto_scroll', () => {\n // return this.scrollView(x * 40, y * 40) \n // }, 15);\n // });\n // this.cdr.detectChanges();\n // })\n // );\n // this.clearInterval('bookings');\n // } else {\n // this.cancelScroll();\n // this.unsub('listen_move');\n // }\n // }\n\n private initSpaces() {\n const holding_bay = this.holding_bay;\n this.filtered_spaces = this.spaces.filter(\n (i) =>\n (!this.space_type || i.zones.indexOf(this.space_type) >= 0) &&\n (!holding_bay || i.id !== holding_bay.id) &&\n i.bookable\n );\n this.filtered_spaces.sort((a, b) => a.local_name.localeCompare(b.local_name));\n this.space_zones = this.spaces.map((i) => `space-col-${i.id}`);\n }\n\n\n\n\t// public onEventDragging(isDragging: boolean): void {\n\t// \t\t// Check if dragging is initiated\n\t// \t\tif (isDragging) {\n\t// \t\t\t// Store the current scroll position\n\t// \t\t\tthis.scroll_offset = this.scroll_area['elementRef'].nativeElement.scrollTop;\n\t// \t\t\t// Subscribe to mouse move events\n\t// \t\t\tthis.subscribeToMouseMove();\n\t// \t\t\t// Clear existing interval for bookings\n\t// \t\t\tthis.clearInterval('bookings');\n\t// \t\t} else {\n\t// \t\t\t// Cancel scroll operation\n\t// \t\t\tthis.cancelScroll();\n\t// \t\t\t// Unsubscribe from mouse move events\n\t// \t\t\tthis.unsubscribeFromMouseMove();\n\t// \t\t}\n\t// }\n\n\t// Subscribe to mouse move events and handle scroll logic\n\t// private subscribeToMouseMove(): void {\n\t// \tthis.subscription(\n\t// \t\t'listen_move',\n\t// \t\tthis._renderer.listen('window', 'mousemove', (event: MouseEvent) => {\n\t// \t\t\t// Get mouse position\n\t// \t\t\tconst position = { x: event.clientX, y: event.clientY };\n\t// \t\t\t// Calculate scroll direction based on mouse position\n\t// \t\t\tconst [x, y] = this.calculateScrollDirection(position);\n\t// \t\t\t// Scroll the view based on calculated direction\n\t// \t\t\tthis.scrollView(x * 5, y * 5);\n\t// \t\t\t// Run auto-scroll logic\n\t// \t\t\tthis.runAutoScroll(x, y);\n\t// \t\t\t// Detect changes to update the view\n\t// \t\t\tthis.cdr.detectChanges();\n\t// \t\t})\n\t// \t);\n\t// }\n\n\t// Calculate scroll direction based on mouse position\n\t// private calculateScrollDirection(position: { x: number, y: number }): [number, number] {\n\t// \tconst tolerance = 0.05;\n\t// \tconst x = this.calculateDirection(position.x, this.box.left, this.box.right, tolerance);\n\t// \tconst y = this.calculateDirection(position.y, this.box.top, this.box.bottom, tolerance);\n\t// \treturn [x, y];\n\t// }\n\n\t// Calculate direction based on mouse position and element boundaries\n\t// private calculateDirection(pos: number, min: number, max: number, tolerance: number): number {\n\t// \tif (pos > max - this.box.width * tolerance) {\n\t// \t\t\treturn 1; // Scroll right\n\t// \t} else if (pos < min + this.box.width * tolerance) {\n\t// \t\t\treturn -1; // Scroll left\n\t// \t} else {\n\t// \t\t\treturn 0; // Do not scroll\n\t// \t}\n\t// }\n\n\t// Run auto-scroll logic\n\t// private runAutoScroll(x: number, y: number): void {\n\t// \tthis._zone.runOutsideAngular(() => {\n\t// \t\t\tthis.interval('auto_scroll', () => this.scrollView(x * 10, y * 10), 10);\n\t// \t});\n\t// }\n\n\t// Unsubscribe from mouse move events\n\t// private unsubscribeFromMouseMove(): void {\n\t// \tthis.unsub('listen_move');\n\t// }\n\n // public movingEvent(booking) {\n // this.isEventMoving = booking.isMoving;\n // this.loading_space[booking.movingId] = booking.isMoving;\n \n // }\n\n}\n\n","
\n\t
\n\t\t\n\t
\n\n\t
\n\t\t
\n\t\t\t\n\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
Time
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
{{ timeslot.name }}
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
{{ room.local_name }}
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tCapacity - {{ room.capacity || '0' }}\n\t\t\t\t\t\t\t{{ room.capacity === 1 ? 'person' : 'people' }}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\n\t\t
\n\n\t\t
\n\t\t\t
\n\t\t
\n
\n
\n
\n\t
\n\t\t
Moving meeting
\n\t\t
\n\t\t\t\n\t\t
\n\t
\n
\n","import {\n Component,\n Input,\n Output,\n EventEmitter\n} from '@angular/core';\nimport {\n Router\n} from '@angular/router';\nimport {\n BaseDirective, shorterBuildingDateFormatString,\n} from '@mckinsey-converge/base';\nimport {\n generateFeedbackUrl,\n Urls\n} from '../../utilities/urls';\nimport {\n Store\n} from '@ngrx/store';\nimport {\n Booking,\n Building,\n BookingStoreState,\n clearBookingFormData,\n cateringAllowed,\n openBookingSurvey,\n roomHasCateringHours\n} from '@mckinsey-converge/data-common';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\n\nexport enum TopBarHeaderMode {\n Light = 'light',\n Dark = 'dark',\n}\n\nexport interface statusObject {\n text: string,\n title: string,\n image: string,\n}\n\n@Component({\n selector: 'booking-confirmation',\n template: `\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n

{{ data?.isEditSeries || (booking.is_recurrent && booking.recurrence_type === 'master') ? 'Recurring Series' : 'Booking' }} {{data?.status.title}}

\n
\n \n \n \n
\n
\n
\n

{{ booking.title }}

\n

Room is no longer available for your chosen date and time

\n
\n \n
\n
Status: {{data?.status.text}}
\n
Date: {{data?.dateString}}
\n
Time: {{data?.timeString}}
\n
{{data?.typeString}} meeting ({{data?.durationString}})
\n
\n
\n
\n \n {{booking?.recurrence_period === 'list' ? 'Specific dates' : booking?.recurrence_period | titlecase}}\n \n - Conflicts({{data?.isConflictWithOccurences()?.total_Conflicts}}) \n
\n
Start date: {{data?.dateString}}
\n
End date: {{data?.endDateString}}
\n
Time: {{data?.timeString}}
\n
{{data?.type}} meeting ({{data?.durationString}})
\n
\n\n
\n \n
\n
\n
\n
\n
\n \n \n \n
\n
\n
\n
\n \n
\n Address: {{building.address}},\n {{building.city}}\n
\n
Room: {{booking.space.local_name}}
\n
Room Capacity: {{booking.space.capacity}}
\n
\n \n
\n \n \n \n \n
\n
\n
\n
\n \n
\n \n

{{ data?.status.text }}

\n
\n
\n \n
\n \n

\n \n

\n
\n
\n
\n
\n
\n
\n
\n
\n \n

{{booking.organiser.name}}

\n

{{attendees}}

\n

{{company}}

\n

{{charge_code}}

\n

{{headcount}}

\n

{{notes}}

\n

\n
\n \n

\n

\n

\n

\n

\n

\n \n \n \n

\n
\n
\n
\n
\n

Catering is available for this meeting room

\n Add catering\n\n \n
\n
\n
\n
\n \n

\n

\n

 

\n \n
\n\n
\n
\n
\n

Ooops - we're sorry!

\n

Unfortunately your selected room has been booked by another user

\n

Please try searching for another room.

\n
\n
\n
\n
\n
\n \n
\n \n
\n
\n \n
\n \n
\n
\n
\n
\n
\n `,\n styleUrls: ['./booking-confirmation.component.scss']\n})\nexport class BookingConfirmationComponent extends BaseDirective {\n /** The theme to use **/\n @Input() public mode: TopBarHeaderMode = TopBarHeaderMode.Light;\n\n @Input() public confirmed: boolean;\n @Input() public loading: boolean;\n\n @Input() public modal: boolean;\n /**\n * placeIntoModal: Input decorator indecate as a flag to adapt component design into a dialog modal \n * (by hiding header and adjusting height so that fit into a modal)\n */\n @Input() public placeIntoModal: boolean = false;\n\t\t@Input('dataForConfirmation') public data: any; // consolidated data using for confirmation template\n\n /** Emitter for close events */\n @Output() public callback = new EventEmitter();\n\n public currentPage: string;\n\n\t\tpublic get booking(): Booking {\n\t\t\treturn this.data?.booking\n\t\t};\n\n\n public get building(): Building {\n return this.data?.booking.room.building;\n };\n\n public get disableCateringButton(): boolean {\n return !cateringAllowed(this.data?.booking, this.building);\n }\n\n public get charge_code() {\n return (this.data?.booking.equipment_codes || {})[\n this.data?.booking.room.email\n ] || 'No Charge Code'\n }\n\n public get headcount() {\n return (this.data?.booking.expected_attendees || {})[\n this.data?.booking.room.email\n ] || 0\n }\n\n public get attendees() {\n const a = Array.isArray(this.data?.booking.attendees) ? this.data?.booking.attendees.map(u => u?.name ? u.name : '') : [];\n return a.join(', ');\n }\n\n public get company() {\n return this.data?.booking.company.join(', ');\n }\n\n public get notes() {\n const note = this.data?.booking.notes.find(n => n.type === 'equipment');\n return note ? note.message : '';\n }\n\n public get feedback() {\n return generateFeedbackUrl(this.currentPage);\n }\n\n public get roomHasCatering() {\n return roomHasCateringHours(this.building, this.data?.booking?.space) && cateringAllowed(this.data?.booking, this.building);\n }\n\n public listItems(order) {\n return order.items.map(i => `(${i.amount}) ${i.name}`).join(', ');\n }\n\n public formatDeliveryTime(order) {\n return this.data?.booking.startDateTz.addValue({ minutes: order?.delivery_time }).formatDate(\"h:mma\");\n }\n\n constructor(\n private store: Store,\n private _router: Router,\n ) {\n super();\n }\n\n public getStatusColor (statusText: string): string {\n switch (statusText) {\n case 'confirmed':\n return 'approved'\n case 'unavailable':\n return 'cancelled'\n default:\n return statusText;\n }\n }\n\n public hasData() {\n return (this.confirmed && !this.loading) || this.isUnavailable();\n }\n\n public goToHelp() {\n window.open(Urls.Help);\n }\n\n public async returnHome() {\n \n if (this.modal || this.placeIntoModal) {\n this.confirmed = false;\n this.loading = false;\n this.callback.emit();\n } else {\n if(!this.isUnavailable()){\n this.store.dispatch(openBookingSurvey());\n // Clear everything out\n this.store.dispatch(clearBookingFormData());\n this._router.navigate(['/', 'home']);\n } else {\n await this._router.navigate(['/home', 'results'], { queryParams: { display: 'list' }});\n }\n }\n }\n\n public async startCatering() {\n this.store.dispatch(clearBookingFormData());\n this.confirmed = false;\n this.loading = false;\n this.callback.emit();\n await this._router.navigate(['/', 'home', 'catering', this.data?.booking.id]);\n }\n\n public isUnavailable() {\n return this.data?.status.text.toLowerCase() === 'unavailable'\n }\n\n getTooltipText() { \n return this.data.booking.occurrence_details?.filter(ocurrence => ocurrence.id !== this.data.booking.id).map((item)=>{\n let date = item.start_epoch * 1000;\n let specificDates = new DateTZ({date, is_local_tz: false, building_tz: this.data.booking.timezone});\n return shorterBuildingDateFormatString(specificDates).slice(3);\n })\n }\n\n \n}\n","import {\n Component,\n OnInit,\n} from '@angular/core';\nimport {\n select,\n} from '@ngrx/store';\nimport {\n Booking,\n BookingFormData,\n selectActiveForm,\n checkCollisions,\n getStatusErrorMessage,\n clearBookingFormData,\n BOOKING_STATUS,\n\t\tSpace,\n\t\tgetLastDateFromList\n} from '@mckinsey-converge/data-common';\nimport {\n distinctUntilChanged,\n} from 'rxjs/operators';\nimport { BookingFormBaseComponent } from './booking-form-base.component';\nimport { ConflictsModalComponent, ConflictsModalComponentData } from '@mckinsey-converge/ui';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DialogEvent, shorterLocalDateFormatString } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'app-booking-create',\n templateUrl: './booking-form-base.component.html',\n styleUrls: ['./booking-create.component.scss']\n})\nexport class BookingCreateComponent extends BookingFormBaseComponent implements OnInit {\n\n\n public ngOnInit(): void {\n super.ngOnInit();\n this.subscription('activeForm', this.store.pipe(\n select(selectActiveForm),\n distinctUntilChanged()\n ).subscribe((next: BookingFormData | undefined) => {\n if (next && next?.dateTz && next?.selectedRoom?.space) {\n this.data.next(next);\n this.booking = this.bookingFormToBooking(next);\n }\n }));\n\n\t\t\t\t// in the parent component\n\t\t\t\tthis.updateConfimatinModal();\n }\n\n\n /**\n * Save booking changes\n */\n public saveChanges() {\n this.loading = true;\n this.booking = this.bookingFormToBooking(this.data.value);\n // const booking_form_data = this.data.value;\n this.booking.status = BOOKING_STATUS.approved;\n checkCollisions(\n this._spaces,\n this.booking\n ).then((bookable: boolean) => {\n if (!bookable) {\n // Refactored for\n //\thttps://acaprojects.atlassian.net/browse/MCK-1498\n //\thttps://mckinsey.atlassian.net/browse/CNG-97\n // API is retuning bookings ouside of requested time range\n // TODO check booking date and times for conflict manually\n this.booking.status = BOOKING_STATUS.unavailable;\n return;\n }\n\n // this.booking['opt_out'] = false;\n this._bookings_service.save(this.booking).then(\n (bkn) => {\n\t\t\t\t\t\t\t\t\t// update template properties and booking\n\t\t\t\t\t\t\t\t\tthis.handleBookingSuccessResponse(bkn);\n },\n (err) => {\n if (err.status === 409) {\n this.handleBookingErrorMessage();\n } else {\n\t\t\t\t\t\t\t\t\t\t\tthis.loading = false;\n \tthis.confirmed = false;\n this.displayWarningBanner(getStatusErrorMessage(err.status));\n }\n }\n );\n },(err) => {\n this.timeout('error', () => {\n\t\t\t\t\t\t\t\t\tthis.handleBookingErrorMessage();\n }, 500);\n }\n );\n }\n\n}\n","
\n
\n \n

{{ warningMessage }}

\n \n
\n
\n \n \n \n \n
\n
\n
\n
\n
\n
\n

Book {{booking?.space?.local_name}}

\n
\n
\n \n
\n
\n
\n
\n

{{ data?.value?.is_recurrent ? 'Recurring' : 'Room' }} Booking Details

\n
\n
Date: {{dateString}}
\n
Time: {{timeString}}
\n
{{type}} meeting ({{durationString}})
\n
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
{{data?.value?.recurrence_period === 'list' ? 'Specific dates' : data?.value?.recurrence_period | titlecase}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t - Conflicts({{isConflictWithOccurences()?.total_Conflicts}}) \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
Start date: {{dateString}}
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
End date: {{endDateString}}
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
Time: {{timeString}}
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
{{type}} meeting ({{durationString}})
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\n
\n
Address: {{building?.address}},\n {{building?.city}}
\n
Room: {{booking?.space?.local_name}}
\n
Capacity: {{booking?.space?.capacity}}
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n
\n","import {Component,OnInit,Input,Output,EventEmitter,\n } from '@angular/core';\n import {\n Booking,\n selectActiveForm,\n BookingFormData,\n\t\tBookingStoreState,\n } from '@mckinsey-converge/data-common';\n import {\n\t\tStore,\n select,\n } from '@ngrx/store';\n import {\n distinctUntilChanged, take,\n } from 'rxjs/operators';\n import { BaseDirective } from '@mckinsey-converge/base';\n\timport {\n\t\tRoomStoreState,\n\t} from '@mckinsey-converge/rooms';\n\timport {\n\t\tBuildingStoreState\n\t} from '@mckinsey-converge/buildings';\n\timport { UserStoreState } from '@mckinsey-converge/user';\n\n\texport type RoomResultsState = BookingStoreState\n & RoomStoreState\n & BuildingStoreState\n & UserStoreState;\n\n\n @Component({\n selector: 'app-booking-edit-wrapper',\n template: `
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
`,\n styleUrls: ['./booking-create.component.scss']\n })\n export class BookingEditWrapperComponent extends BaseDirective implements OnInit {\n\n\t\tpublic booking: Booking;\n\t\tpublic loading: boolean = true;\n\n constructor(\n public store: Store,\n ) {\n super();\n }\n\n public ngOnInit(): void {\n\n this.subscription('activeForm',\n this.store.pipe(take(1),\n\t\t\t\t\tselect(selectActiveForm),\n \tdistinctUntilChanged()\n\t\t\t\t\t).subscribe((next: BookingFormData | undefined) => {\n\t\t\t\t\t\tthis.loading = false;\n \t\tif (next && next?.dateTz) {\n \t\tthis.booking = new Booking(next);\n \t\t}\n }));\n\n }\n\n }\n","import {\n Component,\n OnInit,\n Input,\n Output,\n EventEmitter,\n} from '@angular/core';\nimport {\n Booking,\n selectActiveForm,\n storeBookingFormData,\n BookingFormData,\n checkCollisions,\n getStatusErrorMessage,\n clearBookingFormData,\n BOOKING_STATUS,\n getLastDateFromList,\n Space,\n SeriesAction\n} from '@mckinsey-converge/data-common';\nimport {\n select,\n} from '@ngrx/store';\nimport {\n distinctUntilChanged,\n} from 'rxjs/operators';\nimport { BookingFormBaseComponent } from './booking-form-base.component';\nimport * as cloneDeep from 'lodash/cloneDeep';\n\n@Component({\n selector: 'app-booking-edit',\n templateUrl: './booking-form-base.component.html',\n styleUrls: ['./booking-create.component.scss']\n})\nexport class BookingEditComponent extends BookingFormBaseComponent implements OnInit {\n @Input() public booking: Booking;\n @Output() public updateCallback = new EventEmitter();\n /**\n * placeIntoModal: Input decorator indecate as a flag to adapt component design into a dialog modal \n * (by hiding header and adjusting height so that fit into a modal)\n */\n @Input() public placeIntoModal: boolean = false;\n public roomEmail: string;\n\n public ngOnInit(): void {\n super.ngOnInit();\n\n this.subscription('activeForm', this.store.pipe(\n select(selectActiveForm),\n distinctUntilChanged()\n ).subscribe((next: BookingFormData | undefined) => {\n if (next && next?.dateTz && next?.selectedRoom?.space) {\n this.data.next(next);\n this.isEditSeries = next.action === SeriesAction.EDIT;\n }\n }));\n\n this.modal = !this.isEditSeries && !this.placeIntoModal;\n this.roomEmail = this.booking.space.email;\n const attendees = (this.data?.value?.attendees?.length && this.data?.value?.attendees[0]?.meta)\n ? this.data.value.attendees\n : this.booking.attendees.filter(bk => bk.name !== '' && bk.email !=='').map(u => {\n return {\n value: u.email,\n display: u.name,\n groupId: 'one',\n groupHeader: true,\n shortDisplay: u.name,\n meta: { external: u.external, user: u, color: u.email.toLowerCase().includes('mckinsey.') ? 'internal' : 'external' },\n }\n });\n\n const company = (this.data?.value?.company?.length && this.data?.value?.company[0]?.groupId)\n ? this.data?.value?.company\n : this.booking.company.map(u => {\n return {\n value: u,\n display: u,\n groupId: 'two',\n groupHeader: true,\n shortDisplay: u,\n }\n });\n\n const head_count = this.booking?.expected_attendees[this.roomEmail] ? this.booking?.expected_attendees[this.roomEmail] : 0;\n const code = this.booking?.equipment_codes[this.roomEmail] ? this.booking?.equipment_codes[this.roomEmail] : '';\n const organiser = (this.data?.value?.organiser && this.data?.value?.organiser?.meta)\n ? this.data?.value?.organiser\n : {\n display: this.booking.organiser.name,\n value: this.booking.organiser.email,\n meta: { user: this.booking.organiser }\n };\n const notes = Array.isArray(this.booking.notes) ? this.booking.notes.find(n => n.type === 'equipment')?.message : this.booking.notes;\n const selectedRoom = this.data?.value?.selectedRoom\n ?\n this.data?.value?.selectedRoom\n :\n {\n space: this.booking.room, // this.building,\n };\n\n const payload = {\n ...this.booking.toJSON(),\n attendees,\n code,\n head_count,\n notes,\n organiser,\n selectedRoom,\n company\n };\n this.store.dispatch(storeBookingFormData({\n payload: payload\n }));\n \n if(this.isEditSeries) {\n this.booking = this.bookingFormToBooking(this.data.value, this.isEditSeries); \n }\n // in parent component\n this.updateConfimatinModal();\n\n\n }\n\n public updateNotes(booking, note, room) {\n const notes = [];\n const cateringNotes = this._cateringNotesService.getNotes();\n const isEquipmentNote = booking.notes.find(note => note.type === 'equipment');\n const isCateringNote = booking.notes.find(note => note.type === 'catering');\n\n if (cateringNotes.length && !isCateringNote) {\n notes.push(cateringNotes[0]);\n }\n\n if (isEquipmentNote) {\n booking.notes.map(item => {\n const message = cateringNotes.length && item.type === 'catering' ? cateringNotes[0].message : item.message;\n\n notes.push({\n ...item,\n author : this.currentUser.name,\n message : item.type === 'equipment' ? note : message,\n space: item.type === 'equipment' ? room : item.space,\n date: item.type === 'equipment' ? new Date().getTime() : item.date\n })\n });\n } else {\n if (note) {\n notes.push({\n author: this.currentUser.name,\n type: \"equipment\",\n message: note,\n space: room,\n date: new Date().getTime()\n })\n }\n }\n return notes;\n }\n\n /**\n * Save booking changes\n */\n public saveChanges() {\n const booking_form_data = this.data.value;\n\n if(!this.isEditSeries) {\n\t\t\t // clone booking to allow editing\n const booking = cloneDeep(this.booking);\n \n\t\t\tbooking.title = booking_form_data.title;\n\t\t\tbooking.attendees = this.formToAttendees(booking_form_data.attendees);\n\t\t\tbooking.company = this.formToCompany(booking_form_data.company);\n\t\t\tbooking.notes = this.updateNotes(this.booking, booking_form_data.notes, this.roomEmail);;\n\t\t\tbooking.equipment_codes = { [this.roomEmail]: booking_form_data.code };\n\t\t\tbooking.expected_attendees = { [this.roomEmail]: booking_form_data.head_count };\n\t\t\tbooking.organiser = booking_form_data.organiser?.meta.user;\n\t\t\tconst has_note_buffer = booking_form_data.notes && booking_form_data.notes?.length ? {[booking_form_data.selectedRoom?.space?.email || booking?.space?.email]: 900} : null; // 900 seconds = 15 min\n\t\t\t// Removing the note does not remove the existing setup / breakdown\n\t\t\tif (has_note_buffer) {\n\t\t\t booking.setup = has_note_buffer;\n\t\t\t booking.breakdown = has_note_buffer;\n\t\t\t}\n booking.opt_out = booking_form_data.opt_out;\n\t\t\tthis.booking = booking;\n\t\t }\n\t\t else {\n\t\t\tthis.booking = this.bookingFormToBooking(booking_form_data, this.isEditSeries);\n\t\t }\n\n\n this.loading = true;\n checkCollisions(\n this._spaces,\n this.booking\n ).then((bookable: boolean) => {\n // We expect the current booking to be returned form this api call,\n if (bookable) {\n\n this._bookings_service.save(this.booking, this.isEditSeries).then(\n (bkn) => {\n // update template properties and booking\n this.handleBookingSuccessResponse(bkn);\n // update callback in case of standard booking edit\n this.updateCallback && this.updateCallback.emit(this.booking);\n\n },\n (err) => {\n if (err.status === 409) {\n this.handleBookingErrorMessage();\n } else {\n this.loading = false;\n this.confirmed = false;\n this.displayWarningBanner(getStatusErrorMessage(err.status));\n }\n }\n );\n } else {\n this.handleBookingErrorMessage();\n return;\n }\n },\n (err) => {\n this.handleBookingErrorMessage();\n }\n );\n }\n\n public callback() {\n this.closeCallback.emit(true);\n }\n\n}\n","import {\n Component,\n OnInit,\n Output,\n EventEmitter,\n} from '@angular/core';\nimport { TopBarHeaderMode, RoutePayload } from 'src/app/components/topbar-header/topbar-header.component';\nimport {\n Store\n} from '@ngrx/store';\nimport {\n BaseDirective,\n dateLocalFormatString,\n startEndTimeWithZoneFormatString,\n humaniseDuration,\n toTitleCase,\n dateBuildingFormatString,\n shorterLocalDateFormatString,\n DialogEvent,\n} from '@mckinsey-converge/base';\nimport {\n ApplicationService,\n Booking,\n BookingsService,\n BookingStateService,\n Space,\n SpacesService,\n User,\n BookingNote,\n BookingFormData,\n BookingStoreState,\n storeBookingFormData,\n bookingStatusDetails,\n clearBookingFormData,\n CateringNotesService,\n getLastDateFromList,\n BOOKING_STATUS,\n DataForConfirmation,\n UsersService\n} from '@mckinsey-converge/data-common';\nimport {\n BehaviorSubject,\n} from 'rxjs';\nimport {\n take,\n} from 'rxjs/operators';\nimport {\n BuildingStoreState\n} from '@mckinsey-converge/buildings';\nimport {\n RoomStoreState,\n} from '@mckinsey-converge/rooms';\nimport {\n Router\n} from '@angular/router';\nimport { UserStoreState } from '@mckinsey-converge/user';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DateNow, DateTZ } from \"@mckinsey-converge/date-tz\";\nimport { ConflictsModalComponent, ConflictsModalComponentData } from '@mckinsey-converge/ui';\n\n\nexport type RoomResultsState = BookingStoreState\n & RoomStoreState\n & BuildingStoreState\n & UserStoreState;\n\n@Component({\n selector: 'app-booking-base',\n templateUrl: './booking-form-base.component.html',\n styleUrls: ['./booking-create.component.scss']\n})\nexport class BookingFormBaseComponent extends BaseDirective implements OnInit {\n public TopBarHeaderMode = TopBarHeaderMode;\n\n public backRoute: RoutePayload = {\n route: ['/home', 'results', 'room'],\n queryParams: {}\n };\n\n @Output() public closeCallback = new EventEmitter();\n\n /**\n * placeIntoModal: Input decorator indecate as a flag to adapt component design into a dialog modal \n * (by hiding header and adjusting height so that fit into a modal)\n */\n public placeIntoModal = false;\n // Eliminate selectedRoom (room building capacity )\n public modal = false;\n public data = new BehaviorSubject(undefined);\n public submitTimestamp: number;\n public confirmed: boolean = false;\n /** Whether booking has succeeded */\n public success: boolean;\n public updated: boolean;\n /** Display loading template */\n public loading: boolean= false;\n public booking: Booking = new Booking({});\n /** Current User */\n public currentUser: User;\n public invalidForm: boolean = true;\n public showWarningBanner: boolean = false;\n public warningMessage: string;\n\n dataForConfirmation: DataForConfirmation;\n isEditSeries: boolean = false;\n // set property if user room selection from next business day section on result page\n public nextBusinessDay: boolean = false;\n\n\n constructor(\n public _service: ApplicationService,\n public store: Store,\n public router: Router,\n public _bookings_service: BookingsService,\n public _booking_state_service: BookingStateService,\n public _spaces: SpacesService,\n public _cateringNotesService: CateringNotesService,\n public dialog: MatDialog,\n private _users: UsersService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.subscription('currentUser', this.store.select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n })\n );\n\n\n }\n\n public get building(){\n return this.booking.room.building;\n }\n\n public get type() {\n return this.booking.bookingTypeLabel;\n }\n\n public get internal_external_type() {\n return this.booking.room?.[0].filters.external === true? \"External\" : \"Internal\";\n }\n\n public get date(){\n // R--- remove if no longer used.\n return this.booking.startDateTz;\n }\n\n public get dateString() {\n return this.booking.startDateTz.formatDate('ccc d MMM yyyy'); //shorterLocalDateFormatString(this.booking.startDateTz);\n \n }\n\n public get timeString() {\n return startEndTimeWithZoneFormatString(this.booking.startDateTz, this.booking?.displayEndDateTz);\n }\n\n public get durationString() {\n return humaniseDuration(this.booking?.duration);\n }\n\n public get status() {\n return bookingStatusDetails(this.booking);\n }\n\n public async goToBackRoute() {\n await this.router.navigate(this.backRoute.route, { queryParams: this.backRoute.queryParams });\n }\n\n /**\n * Continue to Booking Form\n */\n public createBooking() { // todo change links based on usage\n // trigger the booking form submit\n this.submitTimestamp = new Date().getTime();\n }\n\n // submit the booking form\n public submitForm(formGroup: any) {\n let creator: User;\n if (formGroup.has_delegate) {\n if (formGroup.organiser.value !== this.currentUser.email) {\n creator = this.currentUser;\n }\n }\n\n // Combines booking with selected form fields and not the entire formGroup like other places.\n // to combine booking with selected form fields on submit - WHY IS THIS NEEDED TO DISPACH TO STORE BOOKING FORM DATA ???\n // THIS ISSUE IS SPILLING INTO - libs/data-common/src/lib/booking/booking.selectors.ts lno: 70\n // - due to .toJSON recurrence_starts becomes Array ?!?\n this.store.dispatch(storeBookingFormData({\n payload: {\n ...this.booking.toJSON(),\n attendees: formGroup.attendees,\n code: formGroup.code,\n head_count: formGroup.head_count,\n notes: formGroup.notes,\n organiser: formGroup.organiser,\n creator,\n title: formGroup.title,\n company: formGroup.company,\n opt_out: formGroup.opt_out\n }\n }));\n this.saveChanges();\n }\n\n // submit the booking form\n public validateForm(valid: boolean) {\n this.invalidForm = !valid;\n }\n\n public setupNotes(note: string, roomEmail: string) {\n if (note && note.length ) {\n // this note was required to update setup and breakdown\n return [{\n author: this.currentUser.name,\n type: \"equipment\",\n message: !Array.isArray(note) ? note : note[0].message,\n space: roomEmail,\n date: new Date().getTime()\n }] as BookingNote[];\n }\n\n return [];\n }\n\n public formToAttendees(attendees: any[]) {\n return !attendees ? [] : attendees.map(a => {\n let raw_user = {\n first_name: '',\n last_name: '',\n email: '',\n name: '',\n type: 'internal',\n external: false,\n visitor: false,\n };\n if (a.meta?.external) {\n // External users get assigned a random email\n const nameParts = a.display.split(' ');\n const length = nameParts.length;\n if (length) {\n raw_user.first_name = nameParts[0];\n raw_user.name = nameParts.join(' ');\n }\n if (length > 1) {\n nameParts.shift();\n raw_user.last_name = nameParts.join(' ');\n }\n raw_user.email = a.value ?? `${Math.floor(Math.random() * 99999)}@guest.mckinsey.com`;\n raw_user.type = 'external'; // retain external identity\n raw_user.external = true;\n raw_user.visitor = true;\n } else if (a.meta?.user) {\n raw_user = a.meta.user;\n }\n else {\n raw_user = a;\n }\n return new User(raw_user);\n });\n }\n\n public formToCompany(companies: any[]) {\n return !companies ? [] : companies.map(a => {\n return a.value;\n });\n }\n\n /**\n * Save booking changes\n */\n public saveChanges() {\n this.loading = true;\n const booking_form_data = this.data.value;\n // override in child class\n }\n\n public callback() {\n // mock interface\n }\n\n public get is_request(): boolean {\n const data = this.data.value;\n\n /* istanbul ignore else */\n if (!data?.selectedRoom?.space) {\n return false;\n }\n\n const space = new Space(data.selectedRoom.space);\n return space.byRequest({\n dateTz: data.dateTz,\n duration: data.duration,\n host: this.currentUser\n });\n }\n\n public displayWarningBanner(custom: string) {\n this.warningMessage = custom;\n this.showWarningBanner = true;\n this.timeout('close banner', () => {\n this.showWarningBanner = false;\n }, 10000);\n }\n\n public hideWarningBanner() {\n this.showWarningBanner= false;\n }\n\n public discardChanges() {\n this.store.dispatch(clearBookingFormData());\n this.closeCallback.emit(true)\n }\n\n\n\n setupOrganiser(booking_form_data: BookingFormData) {\n if(booking_form_data.organiser?.meta?.user){\n return booking_form_data.organiser?.meta?.user;\n }\n else{\n booking_form_data.organiser = {...booking_form_data.organiser, meta: {user: this.currentUser}}\n return booking_form_data.organiser?.meta.user;\n }\n }\n\n public bookingFormToBooking(bookingData, isEditSeries: boolean = false): Booking {\n let booking_form_data = bookingData;\n const has_note_buffer = booking_form_data.notes && booking_form_data.notes?.length ? {[booking_form_data.selectedRoom.space.email]: 900} : {}; // 900 seconds = 15 min\n const attendees = this.formToAttendees(booking_form_data.attendees);\n const company = this.formToCompany(booking_form_data.company);\n const start_epoch = booking_form_data?.dateTz?.seconds;\n const end_epoch = booking_form_data.dateTz.addValue({ minutes: booking_form_data.duration }).seconds;\n // set property if user room selection from next business day section on result page\n this.nextBusinessDay = booking_form_data?.nextBusinessDay || false\n\n const raw_data = {\n id: isEditSeries ? booking_form_data.id : '',\n all_day: booking_form_data.all_day || false,\n attendees,\n booking_type: booking_form_data.bookingType.value,\n catering: booking_form_data.catering || [],\n start_epoch,\n end_epoch,\n timezone: booking_form_data.timezone,\n equipment_codes: {[booking_form_data.selectedRoom.space.email]: booking_form_data.code},\n expected_attendees: {[booking_form_data.selectedRoom.space.email]: booking_form_data.head_count},\n has_catering: booking_form_data.has_catering || false,\n needs_space: booking_form_data.needs_space || false,\n organiser: this.setupOrganiser(booking_form_data),\n notes: this.setupNotes(booking_form_data.notes, booking_form_data.selectedRoom.space.email),\n creator: booking_form_data.creator,\n room: booking_form_data.selectedRoom.space,\n title: booking_form_data.title,\n setup: has_note_buffer,\n breakdown: has_note_buffer,\n company,\n /* Staff Recurring form fields */\n is_recurrent: booking_form_data.is_recurrent,\n recurrence_count: booking_form_data.recurrence_count,\n recurrence_days: booking_form_data.recurrence_days,\n recurrence_endTz: booking_form_data.recurrence_endTz,\n recurrence_exceptions: booking_form_data.recurrence_exceptions,\n recurrence_interval: booking_form_data.recurrence_interval,\n recurrence_period: booking_form_data.recurrence_period,\n recurrence_starts: booking_form_data.recurrence_starts,\n\n occurrence_details: booking_form_data.occurrence_details,\n // occurrence_edits: booking_form_data.occurrence_edits || null,\n // occurrence_ids: booking_form_data.occurrence_ids || null,\n recurrence_type: booking_form_data.recurrence_type || null,\n recurrence_master_id: booking_form_data.recurrence_master_id,\n edits: booking_form_data?.edits,\n ignore: booking_form_data?.ignore,\n\n opt_out: bookingData.opt_out\n\n\n };\n\n return new Booking(raw_data);\n }\n\n\n public async handleBookingSuccessResponse(bkn) {\n\n // const user: User = this._users.current;\n // if(this._users.current.email === bkn.organiser.email) {\n // this._users.current.opt_out = true;\n // }else {\n // this._users.current.delegates.map(el => { \n // if(el.email === bkn.organiser.email) {\n // el.opt_out = true;\n // }\n // return el;\n // })\n // }\n \n\n //const responceBkn = new Booking({...bkn}); // \n this.booking = new Booking({ ...this.booking, ...bkn.toApiJSON() });\n this.updateConfimatinModal();\n this._booking_state_service.replace(this.booking);\n\n /**\n * update the master booking in case of recurring to have latest updated in the system\n */\n if(this.booking.recurrence_master_id !== null && this.isEditSeries)\n {\n const master_booking = await this._bookings_service.show(this.booking.recurrence_master_id);\n this._booking_state_service.replace(master_booking);\n }\n\n // Clear the current booking form\n this.store.dispatch(clearBookingFormData());\n\n this.loading = false;\n this.success = true;\n this.confirmed = true;\n\n // Heap track event\n this._service.analytics.track('update', {\n booking_id: this.booking.id,\n office: this.booking.room.building.name, // this.building.name,\n room: this.booking.room.simple_name,\n start_time: this.booking.startDateTz.ms,\n end_time: this.booking.endDateTz.ms,\n catering: !!this.booking.catering.length,\n headcount: this.data.value.head_count,\n });\n\n }\n\n\n public handleBookingErrorMessage() {\n this.loading = false;\n this.booking.status = BOOKING_STATUS.unavailable\n this._booking_state_service.replace(this.booking);\n this.confirmed = true;\n this.success = false;\n this.updateConfimatinModal();\n }\n\n /**\n * Public method to update the confirmation modal data.\n * This method updates the dataForConfirmation object with the necessary information\n * for displaying the confirmation modal in the application.\n */\n public updateConfimatinModal() {\n\n // Prepare an object with booking details and related information for the confirmation modal\n this.dataForConfirmation = {\n booking: this.booking, // Information about the booking\n status: this.status, // Status of the booking (e.g., confirmed, pending, etc.)\n dateString: this.dateString, // Date of the booking in string format\n endDateString: this.endDateString, // End date of the booking in string format\n timeString: this.timeString, // Time of the booking in string format\n durationString: this.durationString, // Duration of the booking in string format\n type: this.type, // Type of booking (e.g., internal, external, etc.)\n isEditSeries: this.isEditSeries, // Boolean indicating whether it's an edit in a series of events\n // Function to check if there are conflicts with occurrences of the booking\n isConflictWithOccurences: this.isConflictWithOccurences.bind(this),\n // Function to open a modal in case of conflicts with recurring events\n openRecurrenceConflictsModal: this.openRecurrenceConflictsModal.bind(this)\n }\n }\n\n /**\n * Checks if there are conflicts with the current booking and its occurrences.\n * Calculates the difference between total occurrences and available occurrences\n * to determine if there are conflicts.\n *\n * @returns {Object} An object containing conflict information:\n * - is_conflict: A boolean indicating if there are conflicts (true if conflicts exist, false otherwise).\n * - total_Conflicts: The total number of conflicts (the difference between total occurrences and available occurrences).\n */\n // public isConflictWithOccurences() {\n // const conflicts = this?.booking?.room?.totalOccurrences - this?.booking?.room?.availableOccurrences;\n // return { is_conflict: !!conflicts, total_Conflicts: conflicts };\n // }\n\n public isConflictWithOccurences() {\n let totalConflicts = 0;\n\n if (this.booking.multi_rooms && this.booking.multi_rooms.length > 0) {\n this.booking.multi_rooms.forEach((room) => {\n totalConflicts += Math.max(room.totalOccurrences - room.availableOccurrences, 0);\n });\n } \n if (this.booking.room) {\n totalConflicts =\n this?.booking?.room?.totalOccurrences - this?.booking?.room?.availableOccurrences;\n }\n\n const result = {\n is_conflict: totalConflicts > 0,\n total_Conflicts: totalConflicts,\n };\n return result;\n}\n\n\n/**\n * Retrieves the end date string for the booking, considering recurrence if applicable.\n * If the booking is recurrent, it calculates the end date based on recurrence starts;\n * otherwise, it uses the booking's start date as the end date.\n *\n * @returns {string} The formatted end date string in a shorter local date format.\n */\n public get endDateString(): string {\n // Determine the array of date-time strings based on recurrence or single start date\n let recurrenceStart: Array= [];\n const { is_recurrent, recurrence_starts, occurrence_details, timezone} = this.booking;\n if(is_recurrent && recurrence_starts.length) {\n recurrenceStart = this.booking.recurrence_starts;\n }\n else if(is_recurrent && !recurrence_starts.length && occurrence_details?.length) {\n this.booking.occurrence_details.forEach(element => {\n recurrenceStart.push(new DateTZ({ date: element.start_epoch * 1000, is_local_tz: false, building_tz: timezone}));\n });\n recurrenceStart = recurrenceStart.sort((d1: DateTZ, d2: DateTZ) => d1.ms - d2.ms);\n }\n else {\n recurrenceStart = [this.booking.startDateTz];\n }\n\n\n // const endDtz = (this.booking.is_recurrent && this.booking.recurrence_starts.length) ? this.booking.recurrence_starts : [this.booking.startDateTz]\n // Get the last date from the list of date-time strings and format it in a shorter local date format\n const requestedEndDateTz = getLastDateFromList(recurrenceStart); //shorterLocalDateFormatString(getLastDateFromList(recurrenceStart));\n \n // add one day if user room selection from next business day section on result page\n const endDatestring = this.nextBusinessDay ? requestedEndDateTz.addValue({ minutes: this.data?.value.offset }) : requestedEndDateTz;\n\n return endDatestring.formatDate('ccc d MMM yyyy');\n }\n\n /**\n * Opens a modal to display recurrence conflicts for a given room.\n *\n * @param {Space} room - The room for which recurrence conflicts are being displayed.\n *\n * This function opens a modal dialog to show recurrence exceptions (conflicts)\n * for the specified room.\n *\n * TO DO: SAME FUNCTION BEING USED IN apps/staff/src/app/booking/room-details/room-details.component.ts\n * and mckinsey-converge/apps/staff/src/app/booking/catering/catering.component.ts\n */\n public openRecurrenceConflictsModal(room: Space) {\n let { recurrence_exceptions } = this.data.value;\n\n const recurr_ref = this.dialog.open(ConflictsModalComponent, {\n maxWidth: '95vw',\n width: '32em',\n data: {\n room_name: room.simple_name,\n conflicts: recurrence_exceptions,\n timezone: room.building.timezone,\n status: 'confirmed'\n }\n });\n this.subscription(\n 'conflicts_modal_events',\n recurr_ref.componentInstance.event.subscribe((event: DialogEvent) => {\n recurr_ref.close();\n })\n );\n recurr_ref.afterClosed().subscribe(() => this.unsub('conflicts_modal_events'));\n }\n\n\n}\n","import {BehaviorSubject,fromEvent,\n} from 'rxjs';\nimport {take,throttleTime,tap,distinctUntilChanged,map\n} from 'rxjs/operators';\nimport {select,Store\n} from '@ngrx/store';\nimport {Component,Inject,OnInit,\n} from '@angular/core';\nimport { BaseDirective, dateBuildingFormatString, startEndTimeWithZoneFormatString, humaniseDuration, toTitleCase, closestToTimeSlotTz\n} from '@mckinsey-converge/base';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { User,\n\tApplicationService,\n\tAvailableBookingFields,\n\tBooking,\n\tBookingFormData,\n\tBookingFlowSettings,\n\tSpacesService,\n\tstoreBookingFormData,\n\tDateDurationData,\n\tselectFilteredByIdResults,\n\tgenerateBookingForm,\n\tcateringAllowed,\n\trulesForSpace,\n\tgetStatusErrorMessage,\n\troomHasCateringHours,\n\tBookingsService,\n\tSpaceConflictAlertModalData,\n\tSpaceFilterReason,\n\tBuilding,\n\tBuildingCity,\n\tflattenDisplayOffices,\n\troomSizeOptions,\n\tDEFAULT_BOOKING_DURATION,\n\tbookingTypeOptions,\n\troomFormDataToQuery,\n\tclearBookingFormData,\n\tBookingStateService,\n\tRecurrencePeriod,\n\tselectActiveForm,\n\tSeriesAction\n} from '@mckinsey-converge/data-common';\nimport { first } from 'rxjs/operators';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport { TopBarHeaderMode } from 'src/app/components/topbar-header/topbar-header.component';\nimport { CancelBookingModalComponent } from '../cancel-booking-modal/cancel-booking-modal.component';\nimport { BookingDurationModalComponent } from '../booking-duration-modal/booking-duration-modal.component';\nimport { RoomResultsState } from '../room-details/room-details.component';\nimport {\n\tloadByIdResults, loadRoomsForResults, loadRoomsForResultsMap,\n} from '@mckinsey-converge/rooms';\nimport { FormGroup } from '@angular/forms';\nimport { loadBookingsWithQuery } from '@mckinsey-converge/bookings';\nimport { DateNow, DateTZ } from \"@mckinsey-converge/date-tz\";\nimport { ConflictAlertModalComponent, SelectOption } from '@mckinsey-converge/ui';\nimport { buildingStateSelector, selectBuildingOptionsGroupedByCity } from '@mckinsey-converge/buildings';\nimport { RoomBookingModalComponent } from '../room-booking-modal/room-booking-modal.component';\nimport { Router, ActivatedRoute } from '@angular/router';\n\nconst EMPTY_ARRAY = [];\n\n@Component({\n\tselector: 'app-booking-details-modal',\n\ttemplateUrl: 'booking-details-modal.component.html',\n\tstyleUrls: ['./booking-details-modal.component.scss']\n})\nexport class BookingDetailsModalComponent extends BaseDirective implements OnInit {\n\tpublic TopBarHeaderMode = TopBarHeaderMode;\n\tpublic title: string;\n\tpublic roomName: string;\n\tpublic roomLocation: string;\n\tpublic host: string;\n\tpublic hostEmail: string;\n\tpublic type: string;\n\tpublic status: string;\n\tpublic statusText: string = '';\n\tpublic statusImage: string;\n\tpublic durationString: string;\n\tpublic dateString: string;\n\tpublic timeString: string;\n\tpublic capacity: number;\n\tpublic attendeesString: string;\n\tpublic chargeCode: string;\n\tpublic headcount: number;\n\tpublic requirements: string;\n\tpublic showDetails: boolean;\n\tpublic warningMessage: string;\n\tpublic mapUrl: string;\n\tpublic focusedRoom: string;\n\tpublic expandedLocation = false;\n\tpublic isRecurrentBooking = false;\n\tpublic isMultiroomBooking:boolean = false;\n\n\tpublic checkingExtendable: boolean;\n\tpublic extendableMaximum: number;\n\n\tpublic receiptionEmail: string;\n\n\tpublic data = new BehaviorSubject(undefined);\n\tpublic byIdResults = new BehaviorSubject(undefined);\n\n\t// Track event date changes in the UI in this param\n\tpublic alternativeWeekStartDateTz: DateTZ;\n\t/** Current User */\n\tpublic currentUser: User;\n\tpublic expandedAvailability: boolean = false;\n\t// Set in the room availablity callback\n\tpublic mobile: boolean = false;\n\tpublic loading: boolean = false;\n\tpublic showInfoBanner: boolean = false;\n\tpublic showWarningBanner: boolean = false;\n\tpublic showCatering: boolean = false;\n\t/** Application settings for bookings */\n\tpublic settings: BookingFlowSettings;\n\tpublic form: FormGroup;\n\tpublic companyString: string;\n\n\tinvalidDueToOfficeRule: boolean;\n\tbuildings: SelectOption[];\n\tmaster_booking: Booking;\n\n\tprivate recurrence_period: RecurrencePeriod;\n\tprivate recurrence_interval: number;\n\toccurrence_details: { start_epoch: number; dateTz: DateTZ; id: string; }[];\n\tdisableSeriesEditButton: boolean = false;\n\topt_out: boolean;\n\t/** List of available booking fields for the form */\n\tpublic get available_fields(): AvailableBookingFields[] {\n\t\treturn this.settings?.show_fields || [];\n\t}\n\n\tpublic get emailURL() {\n\t\treturn `mailto:${encodeURIComponent(this.receiptionEmail)}?cc=${encodeURIComponent(this.hostEmail)}&subject=Enquiry%3A%20${encodeURIComponent(this.roomName)}&body=Details%3A%0ADate%3A%20${encodeURIComponent(this.dateString)}%0ATime%3A%20${encodeURIComponent(this.timeString)}%0A${encodeURIComponent(this.type)}%20meeting%20(${encodeURIComponent(this.durationString)})%0AAddress%3A%20${encodeURIComponent(this.roomLocation)}%0ARoom%3A%20${encodeURIComponent(this.roomName)}%0ACapacity%3A%20${encodeURIComponent(this.capacity)}%20people%0A%0ANeeding%20assistance%20with%3A%0A`;\n\t}\n\n\tpublic disableCancelButton: boolean = false;\n\tpublic disableEditTimeButton: boolean = false;\n\tpublic disableUpdateDetailsButton: boolean = false;\n\n\tprivate _specific_dates = false;\n\n\n\tconstructor(\n\t\t private router: Router,\n private route: ActivatedRoute,\n\t\t@Inject(MAT_DIALOG_DATA) public _data: any,\n\t\tprivate dialogRef: MatDialogRef,\n\t\tprivate store: Store,\n\t\tpublic _bookings: BookingsService,\n\t\tprivate _service: ApplicationService,\n\t\tprivate _spaces: SpacesService,\n\t\tprivate dialog: MatDialog,\n\t) {\n\t\tsuper();\n\t\tthis.roomLocation = this._data.booking.room.street_and_city;\n\t\tthis.initDisplayValues(this._data.booking);\n\t\tthis.timeout('slowinit', () => {\n\t\t\tthis.initDisplayValues(this._data.booking);\n\t\t\tif (this._data.cancel && this.displayCancelModal()) {\n\t\t\t\tthis.cancelBooking();\n\t\t\t}\n\t\t\tif (this._data.addCatering && this.roomHasCatering) {\n\t\t\t\tthis.addCatering();\n\t\t\t}\n\t\t\t// Close up the loader panel\n\t\t\tthis.timeout('hide modal mask', () => {\n\t\t\t\tthis._data.hasLoaderUrl = false;\n\t\t\t}, 300);\n\t\t}, 1000);\n\t}\n\n\n\tpublic ngOnInit() {\n\n\t\t/**\n\t\t * Update booking recurrence and occurrence details based on master booking data.\n\t\t *\n\t\t * This code block checks if there is a master booking available in the data.\n\t\t * If a master booking exists, it extracts recurrence period and interval information,\n\t\t * and processes occurrence details, excluding the current booking itself. Occurrence\n\t\t * start epochs are converted to milliseconds and date-time strings are created in the\n\t\t * building's timezone.\n\t\t */\n\t\tif(this._data?.master_booking !== null) {\n\t\t\tthis.recurrence_period = this._data?.master_booking?.recurrence_period;\n\t\t\tthis.recurrence_interval = this._data?.master_booking?.recurrence_interval;\n\n\t\t\tconst bookingData = this._data?.master_booking || this._data?.booking;\n\n\t\t\tthis.occurrence_details = bookingData.occurrence_details && bookingData.occurrence_details\n\t\t\t\t.filter(ocurrence => ocurrence.id !== bookingData.id)\n\t\t\t\t.map(ocurrence => ({\n\t\t\t\t\t...ocurrence,\n\t\t\t\t\tstart_epoch: ocurrence.start_epoch * 1000, // Convert start epoch to milliseconds\n\t\t\t\t\tdateTz: new DateTZ({\n\t\t\t\t\t\tdate: ocurrence.start_epoch * 1000, // Create a DateTZ object with the converted epoch\n\t\t\t\t\t\tis_local_tz: false,\n\t\t\t\t\t\tbuilding_tz: bookingData.timezone\n\t\t\t\t\t})\n\t\t\t\t}));\n\t\t}\n\n\n\t\tthis.subscription('currentUser', this.store.select(selectCurrentUser)\n\t\t\t.pipe(take(1))\n\t\t\t.subscribe((user: User | undefined) => {\n\t\t\t\t// Once we know we have the user loaded.\n\t\t\t\tthis.currentUser = new User(user);\n\t\t\t})\n\t\t);\n\n\t\tthis.subscription('byId', this.store.pipe(\n\t\t\tselect(selectFilteredByIdResults)\n\t\t).subscribe(next => {\n\t\t\t// Should be fired when loading by ID in URL\n\t\t\tthis.byIdResults.next(next.success?.spaces?.length ? next.success.spaces[0].settings.bookings : EMPTY_ARRAY);\n\t\t}));\n\n\t\tthis._spaces.initialised.pipe(first((_) => _)).subscribe(() => {\n\t\t\tthis.settings = this._service.setting('app.booking');\n\t\t\tthis.form = generateBookingForm(this._data.booking, this.available_fields);\n\t\t});\n\n\t\tconst breakpoint = 450;\n\t\tif (window) {\n\t\t\tthis.mobile = window.innerWidth < breakpoint;\n\t\t}\n\n\t\tfromEvent(window, 'resize').pipe(throttleTime(500)).pipe(tap({\n\t\t\tnext: val => {\n\t\t\t\tconst target = val.target as Window;\n\t\t\t\tthis.mobile = target.innerWidth < breakpoint;\n\t\t\t}\n\t\t})).subscribe();\n\n\n\t\tthis.subscription('buildings', this.store.pipe(\n\t\t\tselect(buildingStateSelector),\n\t\t\tselect(selectBuildingOptionsGroupedByCity),\n\t\t\tmap((grouped: Map) => {\n\t\t\t\treturn flattenDisplayOffices(grouped);\n\t\t\t}),\n\t\t\tdistinctUntilChanged()\n\t\t).subscribe(next => {\n\t\t\tthis.buildings = next;\n\t\t\t!this.showDetails && this.dispatchToGetFloorCurrentStatus(this._data.booking);\n\t\t}));\n\n\n\t}\n\n\t// public get isCateringAdded()\n\n\tpublic get disableCateringButton() {\n\t\tswitch (this.status) {\n\t\t\tcase 'cancelled':\n\t\t\tcase 'declined':\n\t\t\tcase 'expired':\n\t\t\t\treturn true\n\t\t\tdefault:\n\t\t\t\treturn !cateringAllowed(this._data?.booking, this._data.booking.room.building);\n\t\t}\n\t}\n\n\tpublic get roomHasCatering() {\n\t\treturn roomHasCateringHours(this._data.booking.room.building, this._data.booking?.room);\n\t}\n\n\tpublic get catering() {\n\t\treturn this._data.booking?.catering || [];\n\t}\n\n\tpublic formatDeliveryTime(order) {\n\t\treturn this._data.booking.startDateTz.addValue({ minutes: order?.delivery_time }).formatDate(\"h:mma\");\n\t}\n\n\tpublic initDisplayValues(booking: Booking) {\n\t\tconst roomEmail = booking.room.email || '';\n\t\tthis.dateString = dateBuildingFormatString(booking.startDateTz, true);\n\t\tthis.timeString = startEndTimeWithZoneFormatString(booking.startDateTz, booking.displayEndDateTz);\n\t\tthis.host = booking.organiser.name;\n\t\tthis.opt_out = booking.opt_out;\n\t\tthis.hostEmail = booking.organiser.email;\n\t\tthis.title = booking.title;\n\t\tthis.type = toTitleCase(booking.booking_type);\n\t\tthis.roomName = booking.local_room_name || '';\n\t\tthis.durationString = humaniseDuration(booking.duration);\n\t\tthis.capacity = booking.room.capacity; // in case of multiroom booking should we sum the capacity for all the rooms?\n\t\tthis.attendeesString = booking.attendees.map(a => a.name).join(', ');\n\t\tthis.chargeCode = booking.equipment_codes[roomEmail];\n\t\tthis.headcount = booking.expected_attendees[roomEmail];\n\t\tthis.mapUrl = booking.room.level.map_url;\n\t\tthis.extendableMaximum = 0;\n\t\tthis.focusedRoom = `area-${booking.room.map_id}-status`;\n\t\tthis.checkingExtendable = false;\n\t\tthis.receiptionEmail = this._data.booking.room.building?._settings?.discovery_info?.reception_email || '';\n\t\tthis.companyString = booking.company.join(', ');\n\t\t// UI button availability\n\t\tthis.disableCancelButton = true; // CSS hide disabled\n\t\tthis.disableEditTimeButton = true;\n\t\tthis.disableUpdateDetailsButton = true;\n\t\tthis.isRecurrentBooking = (booking.recurrence_type !== null || booking.recurrence_type === '') && booking.recurrence_period !== null ? true : false;\n\t\tthis.isMultiroomBooking = booking.is_multiroom ? true : false\n\n\t\t// Room Availability modal start date\n\t\tthis.setAlternativeWeekStartDate(booking.startDateTz);\n\n\t\t// Get the equiptment notes\n\t\tconst requirements = booking.notes.find(n => {\n\t\t\tif (n.type === 'equipment') {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t});\n\t\tthis.requirements = requirements ? requirements.message : '';\n\n\t\t// Setup the UI status based on the booking approval status\n\t\tif (booking.status) {\n\t\t\t// mark bookings before today expired\n\t\t\tconst orgStatus = booking.status;\n\t\t\tthis.status = booking.status;\n\t\t\tconst recentlyExpired = DateNow(new Date()).subtractValue({ minutes: 5 }).isBeforeDate(booking.startDateTz.addValue({ minutes: booking.duration }));\n\t\t\tif (!['declined', 'cancelled'].includes(booking.status)) {\n\t\t\t\tthis.status = DateNow(new Date()).isAfterDate(booking.startDateTz.addValue({ minutes: booking.duration })) ? 'expired' : booking.status;\n\t\t\t}\n\n\t\t\tif(this._data.master_booking && this._data.master_booking.status === 'tentative' ) {\n\t\t\t\tthis.disableSeriesEditButton = true;\n\t\t\t}\n\n\t\t\tswitch (this.status) {\n\t\t\t\tcase 'tentative':\n\t\t\t\t\tthis.statusImage = 'assets/icon/booking_pending.svg';\n\t\t\t\t\tthis.statusText = 'Pending';\n\t\t\t\t\tthis.disableCancelButton = false;\n\t\t\t\t\tthis.disableUpdateDetailsButton = false;\n\t\t\t\t\tthis.disableEditTimeButton = false;\n\t\t\t\t\t// Verify the booking date makes it updatable.\n\t\t\t\t\tif (DateNow(new Date()).isAfterDate(booking.startDateTz)) {\n\t\t\t\t\t\t// disable edit date time\n\t\t\t\t\t\tthis.disableEditTimeButton = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'accepted':\n\t\t\t\t\tthis.statusImage = 'assets/icon/booking_confirmed.svg';\n\t\t\t\t\tthis.statusText = 'Confirmed';\n\t\t\t\t\tthis.disableCancelButton = false;\n\t\t\t\t\tthis.disableUpdateDetailsButton = false;\n\t\t\t\t\tthis.disableEditTimeButton = false;\n\t\t\t\t\tthis.checkingExtendable = true;\n\t\t\t\t\t// edit date time on but returns to tenative on save\n\t\t\t\t\tthis.findMaxExtension().then(v => {\n\t\t\t\t\t\tthis.extendableMaximum = v;\n\t\t\t\t\t\tthis.checkingExtendable = false;\n\t\t\t\t\t});\n\t\t\t\t\t// Verify the booking date makes it updatable.\n\t\t\t\t\tif (DateNow(new Date()).isAfterDate(booking.startDateTz)) {\n\t\t\t\t\t\t// disable edit date time\n\t\t\t\t\t\tthis.disableEditTimeButton = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'approved':\n\t\t\t\t\tthis.statusImage = 'assets/icon/booking_confirmed.svg';\n\t\t\t\t\tthis.statusText = 'Confirmed';\n\t\t\t\t\tthis.disableCancelButton = false;\n\t\t\t\t\tthis.disableUpdateDetailsButton = false;\n\t\t\t\t\tthis.disableEditTimeButton = false; // BLOCKED: API doesn't update 'approval_status' on save.\n\t\t\t\t\tthis.checkingExtendable = true;\n\t\t\t\t\t// edit date time on, back to pending on change.\n\t\t\t\t\tthis.findMaxExtension().then(v => {\n\t\t\t\t\t\tthis.extendableMaximum = v;\n\t\t\t\t\t\tthis.checkingExtendable = false;\n\t\t\t\t\t});\n\t\t\t\t\t// Verify the booking date makes it updatable.\n\t\t\t\t\tif (DateNow(new Date()).isAfterDate(booking.startDateTz)) {\n\t\t\t\t\t\t// disable edit date time\n\t\t\t\t\t\tthis.disableEditTimeButton = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'declined':\n\t\t\t\t\tthis.statusImage = 'assets/icon/booking_cancelled.svg';\n\t\t\t\t\tthis.statusText = 'Cancelled';\n\t\t\t\t\t// you can edit time and go back to pending\n\t\t\t\t\tthis.extendableMaximum = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'cancelled':\n\t\t\t\t\tthis.statusImage = 'assets/icon/booking_cancelled.svg';\n\t\t\t\t\tthis.statusText = 'Cancelled';\n\t\t\t\t\tthis.extendableMaximum = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'expired':\n\t\t\t\t\tthis.statusImage = 'assets/icon/booking_expired.svg';\n\t\t\t\t\tthis.statusText = 'Expired';\n\t\t\t\t\tthis.extendableMaximum = 0;\n\n\t\t\t\t\tif (recentlyExpired && ['accepted', 'approved'].includes(orgStatus)) {\n\t\t\t\t\t\tthis.checkingExtendable = true;\n\t\t\t\t\t\tthis.findMaxExtension().then(v => {\n\t\t\t\t\t\t\tthis.extendableMaximum = v;\n\t\t\t\t\t\t\tthis.checkingExtendable = false;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: // TODO What is an appropriate default ? And refactor where else this is common.\n\t\t\t\t\tthis.statusImage = 'assets/icon/booking_expired.svg';\n\t\t\t\t\tthis.statusText = 'Expired';\n\t\t\t\t\tthis.extendableMaximum = 0;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic listItems(order) {\n\t\treturn order.items.map(i => `(${i.amount}) ${i.name}`).join(', ');\n\t}\n\n\tpublic expandLocation() {\n\t\tthis.expandedLocation = true;\n\t}\n\n\tpublic handleClose(fetchRooms: boolean = false) {\n\t\tthis.expandedLocation = false;\n\t\tthis.expandedAvailability = false;\n\t\tif (fetchRooms) {\n\t\t\tthis.fetchRooms(false);\n\t\t\tthis.invalidDueToOfficeRule && this.alertIfItHasConflict(false, true);\n\t\t\tthis.invalidDueToOfficeRule = false;\n\t\t}\n\t}\n\n\tpublic close(flag: string = '') {\n\t\tthis.dialogRef.close(flag);\n\t}\n\n\t/**\n\t * Check if there are any booking collisions with the new booking time\n\t * @param room_id 'sys-' id of room in question\n\t * @param date proposed booking time\n\t * @param duration proposed booking length (in minutes)\n\t */\n\tprivate async findMaxExtension(): Promise {\n\t\tconst setupInSeconds = this._data.booking.setup[this._data.booking.room.email] || 0;\n\t\tconst breakdownInMinutes = this._data.booking.breakdown[this._data.booking.room.email] ? this._data.booking.breakdown[this._data.booking.room.email] / 60 : 0;\n\n\t\t// Add a seconds, since the end time ends in :59, and add the setup time\n\t\tconst endTz = this._data.booking.endDateTz.addValue({ seconds: setupInSeconds + 1 });// (this._data.booking.date + this._data.booking.duration*60000)*0.001 -1\n\t\tconst params = {\n\t\t\troom_ids: this._data.booking.room.id,\n\t\t\tdateTz: endTz, // (((end + 60 + setupSeconds) * 1000)),\n\t\t\tduration: 60 + breakdownInMinutes,\n\t\t\thide_bookings: true,\n\t\t};\n\n\t\treturn await this._spaces\n\t\t\t.available(params, null, false)\n\t\t\t.then(\n\t\t\t\t(list) => {\n\t\t\t\t\t// measure gap in booking instead and have options\n\t\t\t\t\tconst gapInMinutes = ((list[0].available_until - (endTz.seconds - 60)) / 60);\n\t\t\t\t\tconst value = Math.min(60, gapInMinutes);\n\t\t\t\t\treturn value >= 15 ? value : 0;\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t);\n\t}\n\n\tpublic toggleUpdateView() {\n\t\tthis.showDetails = !this.showDetails;\n\t\t!this.showDetails && this.dispatchToGetFloorCurrentStatus(this._data.booking);\n\t}\n\n\n\n\n\tpublic getLocation(booking: Booking): any {\n\n\t\tif (this.buildings && booking.building_zone) {\n\t\t\treturn this.buildings.find(b => booking.building_zone === b.value);\n\t\t}\n\t\treturn [];\n\t}\n\n\n\t/**\n * Dispatches data for getting the current status of the booking floor.\n *\n * This function prepares and dispatches necessary data to retrieve the current status\n * of the booking floor.\n *\n * @param {Object} booking - The booking details object, containing room, date, duration, etc.\n * @param {boolean} editingSeries - A boolean indicating whether the booking is part of a series and being edited.\n\n */\n\tpublic dispatchToGetFloorCurrentStatus(booking, editingSeries: boolean = false) {\n\t\tconst timezone = booking.timezone;\n\t\tconst { capacity, internal_or_external } = booking.room;\n\t\tconst roomOption = capacity < 3 ? 0 : (capacity > 2 && capacity < 10) ? 1 : 2;\n\t\tconst roomSize = roomSizeOptions[roomOption];\n\n\t\t// Process recurrence data if the booking is part of a series being edited\n\t\tlet recurringBookingData = {};\n\t\tlet recurrenceStart = [];\n\t\tif(booking.is_recurrent && editingSeries) {\n\n\t\t\tthis._data.master_booking.occurrence_details.forEach(element => {\n\t\t\t\trecurrenceStart.push(new DateTZ({ date: element.start_epoch * 1000, is_local_tz: false, building_tz: timezone}));\n\t\t\t});\n\t\t\trecurrenceStart = recurrenceStart.sort((d1: DateTZ, d2: DateTZ) => d1.ms - d2.ms);\n\n\t\t\tconst {\n\t\t\t\tid,\n\t\t\t\trecurrence_period,\n\t\t\t\trecurrence_interval,\n\t\t\t\trecurrence_count,\n\t\t\t\tis_recurrent,\n\t\t\t\trecurrence_exceptions,\n\t\t\t\trecurrence_pattern,\n\t\t\t\trecurrence_days,\n\t\t\t\trecurrenEndFromOcurrences,\n\t\t\t\toccurrence_details,\n\t\t\t\toccurrence_edits,\n\t\t\t\toccurrence_ids,\n\t\t\t\trecurrence_type,\n\t\t\t\trecurrence_master_id,\n\t\t\t\tedits } = this._data.master_booking\n\n\t\t\tconst rec_endTz = recurrenEndFromOcurrences.bind(this._data.master_booking);\n\t\t\tconst recurrence_endTz = rec_endTz(occurrence_details)\n\n\n\n\n\t\t\trecurringBookingData = {\n\t\t\t\tid:id,\n\t\t\t\trecurrence_period: recurrence_period,\n\t\t\t\trecurrence_interval: recurrence_interval || 1,\n\t\t\t\trecurrence_endTz: recurrence_endTz, //this._data.master_booking.recurrence_endTz,\n\t\t\t\trecurrence_count: recurrence_count || 1,\n\t\t\t\tis_recurrent: is_recurrent,\n\t\t\t\trecurrence_starts: recurrenceStart,\n\t\t\t\trecurrence_exceptions: recurrence_exceptions || [],\n\t\t\t\trecurrence_pattern: recurrence_pattern || \"weekly\", //Helper value to store the last selected pattern (daily, weekly, monthly),\n\t\t\t\trecurrence_days: recurrence_days || [],\n\n\t\t\t\toccurrence_details: occurrence_details,\n occurrence_edits: occurrence_edits || null,\n occurrence_ids: occurrence_ids || null,\n recurrence_type: recurrence_type || null,\n recurrence_master_id: recurrence_master_id,\n\t\t\t\tedits: edits\n\t\t\t}\n\t\t};\n\n\n\t\tconst formGroup: BookingFormData = {\n\t\t\tlocation: [this.getLocation(booking)],\n\t\t\t//date: booking.date,\n\t\t\t// dateTz: recurrenceStart[0], //building_tz: timezone\n\t\t\tdateTz: recurrenceStart.length >=1 ? recurrenceStart[0] : closestToTimeSlotTz(new DateTZ({ date: Date.now(), is_local_tz: false }),\t15\t).toZone(timezone),\n\t\t\tduration: booking.duration,\n\t\t\tbookingType: internal_or_external === 'internal' ? bookingTypeOptions[0] : bookingTypeOptions[1],\n\t\t\troomSize: roomSize,\n\t\t\tselectedRoom: null,\n\t\t\ttimezone: timezone,\n\t\t\t// buildings: buildings,\n\t\t\t...this._data?.master_booking?.toJSON(),\n\t\t\t...recurringBookingData,\n\t\t\topt_out:booking.opt_out,\n\t\t\taction: 'edit_booking'\n\n\t\t};\n\n\t\t// Clear existing form and result data, then dispatch the updated form data\n\t\tthis.clearFormAndResultData();\n\t\tthis.store.dispatch(storeBookingFormData({ payload: formGroup }));\n\n\t\t// Dispatch a request to load available rooms based on the updated form data\n\t\tthis.store.dispatch(loadRoomsForResultsMap.request(roomFormDataToQuery(formGroup)))\n\t}\n\n\t/**\n * Opens a modal for editing a recurring series of bookings.\n */\n\tpublic editRecurringSeries() {\n\t\t// Dispatch the current status of the booking floor for editing the recurring series\n\t\tthis.dispatchToGetFloorCurrentStatus(this._data.booking, true);\n\n\t\tconst dialog_ref = this.dialog.open(RoomBookingModalComponent, {\n\t\t\t\tpanelClass: 'mck-modal',\n\t\t\t\tautoFocus: false,\n\t\t\t\tbackdropClass: 'mck-modal-backdrop',\n\t\t\t\tdata: {\n\t\t\t\t\tnavigateTo: this.navigateT0Search.bind(this),\n\t\t\t\t\taction: SeriesAction.EDIT, // Indicates the action type (editing a series)\n\t\t\t\t}\n\t\t});\n\n\t\t// Subscribe to the modal's closed event to handle the result\n\t\tdialog_ref.afterClosed().subscribe((flag) => {\n\t\t\t// Close the modal if the operation was successful (flag is truthy)\n\t\t\tflag && this.close(flag); //console.log('ROOM MODAL CLOSED')\n\t\t});\n\n\t}\n\n\tnavigateT0Search() {\n\t\tthis.router.navigate(['../home/results'], { relativeTo: this.route });\n\t}\n\n\n\tpublic clearFormAndResultData() {\n\t\tthis.store.dispatch(clearBookingFormData());\n\t\tthis.store.dispatch(loadRoomsForResults.clear());\n\t}\n\n\n\tpublic toggleEditView() {\n\t\tthis.fetchRooms(true);\n\t\tthis.expandedAvailability = true;\n\t}\n\n\tpublic updateBookingState(booking: Booking) {\n\t\tthis._data.booking = booking;\n\t\tthis.initDisplayValues(booking);\n\t\tthis.store.dispatch(loadBookingsWithQuery({ 'id': booking.id, 'email': this.currentUser.email, 'target': 'bookingById', 'offset': 0 }));\n\t\t// reload all booking for user from - apps/staff/src/app/booking/room-booking/room-booking.component.ts\n\t\tthis._data.refresh(); //\n\t}\n\n\tpublic cancelBooking(opts: { series?: boolean } = {}) {\n\t\t// Open the cancel booking modal\n\t\tthis.dialog.open(CancelBookingModalComponent, {\n\t\t\tpanelClass: 'mck-noexpand',\n\t\t\tdata: {\n\t\t\t\t...this._data,\n\t\t\t\t...opts,\n\t\t\t\tcallback: () => {\n\t\t\t\t\tconst booking = this._data.booking.clone();\n\t\t\t\t\tthis._data.booking.delete(opts).then(\n\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\tthis.close();\n\t\t\t\t\t\t\t// @TODO:API The deleted record is still being returned for quite some time regardless of timeout.\n\t\t\t\t\t\t\tthis._data.refresh()\n\t\t\t\t\t\t\t// this.timeout('refresh', () => this._data.refresh(), 1000);\n\t\t\t\t\t\t\t// Heap track event\n\t\t\t\t\t\t\tthis._service.analytics.track('delete', {\n\t\t\t\t\t\t\t\tbooking_id: booking.id,\n\t\t\t\t\t\t\t\toffice: booking.room.building.name,\n\t\t\t\t\t\t\t\troom: booking.room.name,\n\t\t\t\t\t\t\t\tstart_time: booking.startDateTz.ms,\n\t\t\t\t\t\t\t\tend_time: booking.endDateTz.ms,\n\t\t\t\t\t\t\t\tcatering: !!booking.catering.legth,\n\t\t\t\t\t\t\t\theadcount: booking?.expected_attendees[booking.room.email],\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\t(err) => {\n\t\t\t\t\t\t\tthis.displayWarningBanner(getStatusErrorMessage(err?.status));\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tautoFocus: false,\n\t\t\tbackdropClass: 'mck-modal-backdrop',\n\t\t});\n\t}\n\n\tpublic extendBooking() {\n\t\t// open the extend booking modal\n\t\tconst dialogRefX = this.dialog.open(BookingDurationModalComponent, {\n\t\t\tpanelClass: 'mck-noexpand',\n\t\t\tdata: {\n\t\t\t\tbooking: this._data.booking,\n\t\t\t\tmaximum: this.extendableMaximum,\n\t\t\t},\n\t\t\tautoFocus: false,\n\t\t\tbackdropClass: 'mck-modal-backdrop',\n\t\t});\n\n\t\tdialogRefX.afterClosed().subscribe((booking?: Booking) => {\n\t\t\tif (booking) {\n\t\t\t\tthis.updateBookingState(booking);\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic displayCancelModal() {\n\t\t// Can the display cancel modal open? If it isn't one of these statuses\n\t\treturn !['cancelled', 'expired', 'declined'].includes(this.status);\n\t}\n\n\n\tpublic confirmChanges(data: DateDurationData) {\n\t\t// Confirm the changes returned from the room availability modal.\n\t\tthis.mobile = data.mobile;\n\t\tthis.setAlternativeWeekStartDate(data.dateTz);\n\n\t\t// New booking flow has this.data\n\t\tif (this.data.value) {\n\t\t\tthis.fetchRooms(true, this.alternativeWeekStartDateTz);\n\t\t\t// submit\n\t\t\tthis.store.dispatch(storeBookingFormData({\n\t\t\t\tpayload: {\n\t\t\t\t\t...this.data.value,\n\t\t\t\t\tdateTz: data.dateTz,\n\t\t\t\t\tduration: data.duration,\n\t\t\t\t}\n\t\t\t}));\n\t\t} else if (data.save) {\n\t\t\t// update booking date/duration\n\t\t\tconst booking = this._data.booking.clone();\n\t\t\tconst pendingChanges = booking.duration !== data.duration || booking.startDateTz.ms !== data.dateTz.ms;\n\t\t\t// booking.duration = data.duration;\n\t\t\tbooking.startDateTz = data.dateTz; // date = data.dateTz.ms;\n\t\t\tbooking.endDateTz = data.dateTz.addValue({ minutes: data.duration });\n\t\t\tthis.loading = true;\n\n\t\t\tconst roomRules = rulesForSpace({\n\t\t\t\ttime: booking.date,\n\t\t\t\tduration: booking.duration,\n\t\t\t\tuser: this.currentUser,\n\t\t\t\trules: this._data.booking.room.building?.booking_rules,\n\t\t\t\tspace: booking.room\n\t\t\t});\n\n\t\t\t// Rooms requiring approval are reset to tentative when the time changes.\n\t\t\tif (pendingChanges && !roomRules?.auto_approve) {\n\t\t\t\t// https://acaprojects.atlassian.net/browse/MCK-1481\n\t\t\t\t/**\n\t\t\t\t * Having 2 ways of containing the status is icky but until PlaceOS\n\t\t\t\t * depreciates approval_status it's necessry.\n\t\t\t\t */\n\t\t\t\t// booking.approval_status[booking.room.email] = \"tentative\";\n\t\t\t\tbooking.status = \"tentative\";\n\t\t\t\tbooking.time_changed = true;\n\t\t\t}\n\t\t\telse if (roomRules.reason === SpaceFilterReason.OfficeRules) {\n\t\t\t\t// this.alertIfItHasConflict(false, true);\n\t\t\t\tthis.invalidDueToOfficeRule = true;\n\t\t\t\tthis.loading = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// booking.save() won't use the toAPIJSON conversion so use the booking service.\n\t\t\tthis._bookings.save(booking).then(\n\t\t\t\t(bkn) => {\n\t\t\t\t\t// update booking\n\t\t\t\t\tthis.updateBookingState(booking);\n\t\t\t\t\tthis.form = generateBookingForm(booking, this.available_fields);\n\t\t\t\t\tthis.loading = false;\n\t\t\t\t\tthis.displayInfoBanner();\n\t\t\t\t\tbooking.room.building.name\n\t\t\t\t\tthis._service.analytics.track('update', {\n\t\t\t\t\t\tbooking_id: booking.id,\n\t\t\t\t\t\toffice: booking.room.building.name,\n\t\t\t\t\t\troom: booking.room.global_name,\n\t\t\t\t\t\tstart_time: booking.startDateTz.ms,\n\t\t\t\t\t\tend_time: booking.endDateTz.ms,\n\t\t\t\t\t\tcatering: !!booking.catering.legth,\n\t\t\t\t\t\theadcount: booking.head_count,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t(err) => {\n\t\t\t\t\tthis.loading = false;\n\t\t\t\t\tthis.expandedAvailability = false;\n\t\t\t\t\tthis.displayWarningBanner(getStatusErrorMessage(err?.status));\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Open dialog if booking date and time is out of office rule\n\t * TO DO : Redundant code - same validaiton been applied over room detail while creating new booking - need to handle more graceful way. better if user been prohibited from choose future date if out of office rule on show avaialability calender itself\n\t * related to - https://acaprojects.atlassian.net/browse/MCK-2419\n\t */\n\n\talertIfItHasConflict(isBookable, isAvailable) {\n\t\t// this.isAlertDisplayed = true;\n\t\tconst data = {\n\t\t\theaderText: !isBookable ? SpaceConflictAlertModalData.NotBookableHeaderText : !isAvailable ? SpaceConflictAlertModalData.NotAvailableHeaderText : '',\n\t\t\tmessage: SpaceConflictAlertModalData.NotBookableDueToOfficeRule,\n\t\t\tbuttonLabel: 'Close',\n\t\t\tcallback: () => null,\n\t\t\tshouldClose: false\n\t\t};\n\t\tconst dialog = this.dialog.open(ConflictAlertModalComponent,\n\t\t\t{\n\t\t\t\tdata: data,\n\t\t\t\tpanelClass: 'mck-alert',\n\t\t\t\tautoFocus: false,\n\t\t\t\tbackdropClass: 'mck-modal-backdrop',\n\t\t\t\tdisableClose: !isBookable\n\t\t\t});\n\t}\n\n\n\n\tpublic displayInfoBanner() {\n\t\tthis.showInfoBanner = true;\n\t\tthis.timeout('close banner', () => {\n\t\t\tthis.showInfoBanner = false;\n\t\t}, 3000);\n\t}\n\n\tpublic displayWarningBanner(custom: string) {\n\t\tthis.warningMessage = custom;\n\t\tthis.showWarningBanner = true;\n\t\tthis.timeout('close banner', () => {\n\t\t\tthis.showWarningBanner = false;\n\t\t}, 10000);\n\t}\n\n\tpublic hideInfoBanner() {\n\t\tthis.showInfoBanner = false;\n\t}\n\n\tpublic hideWarningBanner() {\n\t\tthis.showWarningBanner = false;\n\t}\n\n\tpublic setAlternativeWeekStartDate(bookingDate: DateTZ) {\n\t\tif (!bookingDate) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.mobile) {\n\t\t\tthis.alternativeWeekStartDateTz = bookingDate.clone();\n\t\t} else {\n\t\t\tthis.alternativeWeekStartDateTz = bookingDate.clone().startOfValue('week').startOfValue('day');\n\t\t}\n\t}\n\n\tpublic updateCalendarWeekView(alternativeWeekStartDateTz: DateTZ) {\n\t\tthis.alternativeWeekStartDateTz = alternativeWeekStartDateTz.clone();\n\t\tthis.fetchRooms(true, this.alternativeWeekStartDateTz);\n\t}\n\n\tpublic fetchRooms(allWeek: boolean = true, alternativeWeekStartDateTz: DateTZ = null) {\n\t\tif (!this._data?.booking?.space?.id) {\n\t\t\treturn\n\t\t}\n\n\t\tconst day = 24 * 60;\n\t\tconst week = day * 7;\n\t\tconst date = (alternativeWeekStartDateTz || this._data?.booking?.startDateTz).clone(); // new DateTZ({date: alternativeWeekStartDateTz || this._data?.booking?.date});\n\t\tconst startOfDay = date.startOfValue('day').setValue({ second: 0, millisecond: 0 });\n\t\tconst startOfWeek = date.startOfValue('week');\n\n\t\t// Query for the entire day for this room\n\t\tconst query = {\n\t\t\tdateTz: allWeek ? startOfWeek : startOfDay,\n\t\t\tduration: allWeek ? week : day,\n\t\t\tlocations: this._data?.booking?.space?.id,\n\t\t\tcapacity: this._data?.booking?.space?.capacity,\n\t\t};\n\t\tthis.store.dispatch(loadByIdResults.request(query));\n\t}\n\n\tpublic addCatering() {\n\t\t// For the Add Catering button\n\t\tthis.showCatering = true;\n\t}\n\n\tpublic saveBookingWithCatering(form: FormGroup) {\n\t\t// Response from the catering modal closing\n\t\t// Close catering and confirmation modals and just show booking details modal\n\t\tif (!form) {\n\t\t\tthis.showCatering = false;\n\t\t\tthis.showDetails = false;\n\t\t\treturn;\n\t\t}\n\t\t// Update the booking state.\n\t\tconst booking = this._data.booking.clone();\n\t\tbooking.catering = form.controls.catering.value;\n\n\t\tif (booking.catering.length) {\n\t\t\tconst setup = {};\n\t\t\tsetup[booking.room.email] = booking.setup[booking.room.email] || 900;\n\t\t\tconst breakdown = {};\n\t\t\tbreakdown[booking.room.email] = booking.breakdown[booking.room.email] || 900;\n\n\t\t\tbooking.setup = setup\n\t\t\tbooking.breakdown = breakdown\n\t\t}\n\n\t\tthis.updateBookingState(booking);\n\t}\n\n\tpublic set specific_dates(val: boolean) {\n\t\tthis._specific_dates = val;\n\t}\n\n\tpublic get specific_dates(): boolean {\n\t\treturn this._specific_dates;\n\t}\n\n\n\tpublic toggleSpecificDates() {\n\t\tthis.specific_dates = !this.specific_dates;\n\t}\n\n\n}\n","\n
\n
\n
 
\n
\n \n

Your booking date and/or time was successfully updated

\n \n
\n
\n \n

{{ warningMessage }}

\n \n
\n \n \n
\n
\n
\n
\n \n Recurring booking status: {{ statusText }} \n
\n
\n \n
\n \n This is one occurrence in a recurring series which occurs every {{recurrence_interval > 1 ? recurrence_interval + ' Days' : 'Day'}} effective {{ _data?.master_booking?.dateString }} until {{ _data?.master_booking?.endDateString }}.\n \n \n This is one occurrence in a recurring series which occurs every {{recurrence_interval > 1 ? recurrence_interval + ' Weeks' : 'Week'}} effective {{ _data?.master_booking?.dateString }} until {{ _data?.master_booking?.endDateString }}.\n \n \n This is one occurrence in a recurring series which occurs every {{recurrence_interval > 1 ? recurrence_interval + ' Months' : 'Month'}} effective {{ _data?.master_booking?.dateString }} until {{ _data?.master_booking?.endDateString }}.\n \n \n This is one occurrence in a recurring series which occurs on Specific Dates effective {{ _data?.master_booking?.dateString }} until {{ _data?.master_booking?.endDateString }}\n
\n
\n
\n
{{ occurrence.dateTz.formatDate('dd MMM yyyy') }}
\n
\n
\n
\n
\n
\n
\n
\n \n Edit series\n \n \n \n
\n
\n\n
\n
\n

{{statusText}}

\n {{timeString}} \n
\n
\n
\n \n
\n

This is a multiroom booking. To request edits, please contact your local backoffice team.

\n
\n
\n
\n
\n \n
\n
\n
\n \n
\n \n
\n\n
\n
\n {{roomName}}\n
\n
\n {{roomLocation}}\n
\n
\n Capacity: {{capacity}}\n
\n \n
\n\n\n\n
\n\n \n \n
\n \n Cancel booking\n \n
\n \n
\n\n\n
\n \n\n
\n \n
\n \n
\n
\n
\n

\n \n Schedule\n

\n \n \n
\n\n

\n Date: {{dateString}}
\n Time: {{timeString}}
\n {{type}} meeting ({{durationString}})\n

\n \n {{ checkingExtendable ? 'Checking availability...' : 'Extend booking duration'}}\n \n
\n \n
\n
\n

\n \n

\n

\n \n \n \n

\n
\n \n\n \n
\n
\n
\n

\n Meeting\n

\n \n \n
\n \n
\n
Meeting title:   {{ title}}
\n
Host:   {{ host}}
\n
Attendees:   {{attendeesString}}\n
\n
Company:   {{companyString}}
\n
Charge code:   {{chargeCode}}
\n
Headcount estimate:   {{headcount}}
\n
Additional requirements:   {{requirements}}
\n
Email notification for this booking has been opt out.
\n
\n \n
\n
\n\n
\n
\n

\n \n

\n \n \n \n \n \n \n
\n
\n \n\n
\n
\n
\n \n
\n
\n \n
\n\n \n
\n\n \n
\n
\n \n \n \n

\n \n \n \n

\n \n \n
\n\n
\n
\n \n
\n

\n \n Catering\n

\n \n \n
\n Catering available for this room\n
\n \n \n
\n
\n\n \n
\n \n
\n

\n \n

\n

\n \n

\n \n
\n
\n
\n\n
\n
\n \n
\n
\n \n \n \n \n \n
\n\n \n
\n
\n\n
\n \n
\n \n \n
\n
\n
\n\n
\n \n
\n\n
\n \n
\n \n
\n
\n
\n\n
\n\n","import {\n Component,\n Inject,\n OnInit,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n BaseDirective,\n } from '@mckinsey-converge/base';\nimport {\n Booking,\n BookingsService,\n DEFAULT_BOOKING_DURATION,\n} from '@mckinsey-converge/data-common';\nimport {\n MAT_DIALOG_DATA,\n MatDialogRef\n} from '@angular/material/dialog';\nimport {\n FormControl,\n FormGroup,\n Validators\n} from '@angular/forms';\nimport * as cloneDeep from 'lodash/cloneDeep';\n\ninterface extendData {\n booking: Booking;\n maximum: number\n}\n\n@Component({\n selector: 'app-booking-duration-modal',\n template: `\n \n
\n \n

Your booking failed to update, please try again

\n \n
\n
\n \n
Extend booking duration
\n
\n
\n \n \n
\n
\n \n
\n
\n `,\n styleUrls: ['./booking-duration-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class BookingDurationModalComponent extends BaseDirective implements OnInit {\n\n public loading: string;\n public showWarningBanner: boolean = false;\n\n public get durationGroups() {\n const step = 15;\n const steps = Math.floor(this.data.maximum / step);\n const max = (steps * step) + this.data.booking.duration;\n\n return [{\n start: this.data.booking.duration,\n step,\n max\n }];\n }\n\n public formGroup = new FormGroup({\n date: new FormControl(this.data.booking.date, [Validators.required]),\n dateTz: new FormControl(this.data.booking.startDateTz, [Validators.required]),\n duration: new FormControl(DEFAULT_BOOKING_DURATION, [Validators.required]),\n });\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: extendData,\n private dialogRef: MatDialogRef,\n public _bookings: BookingsService,\n ) {\n super();\n }\n\n ngOnInit() {\n this.formGroup.setValue({\n date: this.data.booking.date,\n dateTz: this.data.booking.startDateTz,\n duration: this.data.booking.duration,\n });\n }\n\n public closeModal(booking?: Booking) {\n this.dialogRef.close(booking);\n }\n\n public updateBookingDuration() {\n const formData = this.formGroup.getRawValue();\n this.loading = 'Saving...';\n\n // clone booking to allow editing\n // const booking = this.data.booking.clone(); // this line commented for bug appearing in CNG-352. Used cloneDeep instead\n const booking = cloneDeep(this.data?.booking);\n booking.endDateTz = booking.startDateTz.addValue({ minutes: formData.duration });\n this._bookings.save(booking).then(\n () => {\n this.loading = null;\n this.closeModal(booking);\n },\n (err) => {\n this.loading = null;\n this.displayWarningBanner()\n }\n );\n }\n\n\n public displayWarningBanner() {\n this.showWarningBanner = true;\n this.timeout('close banner', () => {\n this.showWarningBanner = false;\n }, 10000);\n }\n\n public hideWarningBanner() {\n this.showWarningBanner= false;\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n OnInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { BookingResultsViewModel } from '../manage-bookings/manage-bookings.viewmodel';\nimport {\n BaseDirective,\n shorterLocalDateFormatString,\n timeWithZoneFormatString,\n startEndTimeFormatString,\n humaniseDuration,\n closestToTimeSlotTz,\n} from '@mckinsey-converge/base';\nimport { DateNow, DateTZ, localTimezone } from \"@mckinsey-converge/date-tz\";\nimport { Booking, BookingFormData, BookingStoreState, bookingTypeOptions, Building, BuildingCity, clearBookingFormData, defaultRoomSizeOption, DEFAULT_BOOKING_DURATION, flattenDisplayOffices, roomFormDataToQuery, roomSizeOptions, storeBookingFormData } from '@mckinsey-converge/data-common';\nimport { buildingStateSelector, BuildingStoreState, selectBuildingOptionsGroupedByCity } from '@mckinsey-converge/buildings';\nimport {\n select,\n Store\n} from '@ngrx/store';\nimport {\n BehaviorSubject,\n} from 'rxjs';\n\nimport { distinctUntilChanged, map } from 'rxjs/operators';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { loadRoomsForResults, loadRoomsForResultsMap } from '@mckinsey-converge/rooms';\nimport { MyBookingsStoreState } from '@mckinsey-converge/bookings';\nimport { UserStoreState } from '@mckinsey-converge/user';\n\nexport type RoomBookingStoreState = BookingStoreState & BuildingStoreState & MyBookingsStoreState & UserStoreState;\n@Component({\n selector: 'app-booking-result-item',\n templateUrl: './booking-result-item.component.html',\n styleUrls: ['./booking-result-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BookingResultItemComponent extends BaseDirective implements OnInit {\n /**\n * If undefined, we display in loading state.\n */\n @Input()\n public viewModel: BookingResultsViewModel | undefined;\n \n @Input()\n public bookings: BookingResultsViewModel[];\n\n @Input()\n public list: string;\n\n @Input() public index: number;\n\n @Input() public small: boolean = false;\n\n @Output()\n public bookingSelect = new EventEmitter();\n\n public buildings = new BehaviorSubject[]>([]);\n\n public roomName: string;\n public roomLocation: string;\n public host: string;\n public status: string;\n public timeStringParts: string[] = [' ', ' '];\n public localTimeStringParts: string[] = [' ', ' '];\n public isAnotherTimezone: boolean = false;\n public statusText: string;\n public statusImage: string;\n public durationString: string;\n public timeRangeString: string;\n public building: any;\n public get dateString() {\n if (!this.bookings || !this.bookings.length) return '';\n const bkn1 = this.bookings[this.index].booking;\n const d1 = new DateTZ({ date: bkn1.startDateTz.ms, is_local_tz: false, building_tz: bkn1.startDateTz.building_tz });\n if (this.index === 0) {\n return shorterLocalDateFormatString(d1);\n }\n const bkn2 = this.bookings[this.index - 1].booking;\n const d2 = new DateTZ({ date: bkn2.startDateTz.ms, is_local_tz: false, building_tz: bkn2.startDateTz.building_tz });\n if (!d1.isSameDate(d2, 'day')) {\n return shorterLocalDateFormatString(d1);\n }\n return '';\n }\n public get todayString() {\n if (!this.bookings || !this.bookings.length) {\n return '';\n }\n \n // Strip the booking of it's timezone infomation so isSameDate is just based on timestamp and local time.\n const d1 = new DateTZ({ date: this.bookings[this.index].booking.startDateTz.ms });\n return DateNow(new Date()).isSameDate(d1, 'day') ? '(Today)' : '';\n }\n\n public get attendeesCount(): number {\n // allAttendees is booking.attendees + 1 (booking.organizer)\n return this.viewModel.booking?.allAttendees.length; \n }\n\n public get has_catering(): number {\n return this.viewModel.booking?.has_catering && this.viewModel.booking?.catering?.length;\n }\n\n public get upcoming() {\n return ['tentative', 'accepted', 'approved'].includes(this.status);\n }\n\n constructor(private store: Store,\n private cdRef: ChangeDetectorRef) {\n super();\n }\n\n public ngOnInit(): void {\n this.setupDisplayFields();\n this.subscription('buildings', this.store.pipe(\n select(buildingStateSelector),\n select(selectBuildingOptionsGroupedByCity),\n map((grouped: Map) => {\n return flattenDisplayOffices(grouped);\n }),\n distinctUntilChanged()\n ).subscribe(next => {\n this.buildings.next(next);\n }));\n this.cdRef.detectChanges();\n }\n\n public hasData() {\n return this.viewModel !== undefined;\n }\n\n public getTooltipText(){\n return this.viewModel.booking.local_room_name.split(',');\n }\n\n public setupDisplayFields() { \n if (!this.viewModel?.booking) {\n return;\n }\n this.timeStringParts = timeWithZoneFormatString(this.viewModel.booking.startDateTz).split(' ');\n this.timeRangeString = startEndTimeFormatString(this.viewModel.booking.startDateTz, this.viewModel.booking.displayEndDateTz);\n this.isAnotherTimezone = !this.viewModel.booking.startDateTz.is_local_tz;\n this.localTimeStringParts = timeWithZoneFormatString(this.viewModel.booking.startDateTz.toZone(localTimezone())).split(' ');\n this.host = this.viewModel.booking.organiser.name;\n this.roomName = this.viewModel.booking.local_room_name.split(',')[0];\n this.roomLocation = this.viewModel.booking.room.street_and_city;\n this.durationString = humaniseDuration(this.viewModel.booking.duration, 'medium');\n\n if (this.viewModel.booking.status) {\n // mark bookings before today expired\n this.status = (DateNow(new Date()).isAfterDate(this.viewModel.booking.endDateTz) && this.list !== 'cancelled') ? 'expired' : this.viewModel.booking.status;\n switch(this.status) {\n case 'tentative':\n this.statusImage = 'assets/icon/booking_pending.svg';\n this.statusText = 'Pending';\n break;\n case 'accepted':\n this.statusImage = 'assets/icon/booking_confirmed.svg';\n this.statusText = 'Confirmed';\n break;\n case 'approved':\n this.statusImage = 'assets/icon/booking_confirmed.svg';\n this.statusText = 'Confirmed';\n break;\n case 'declined':\n this.statusImage = 'assets/icon/booking_cancelled.svg';\n this.statusText = 'Cancelled';\n break;\n case 'cancelled':\n this.statusImage = 'assets/icon/booking_cancelled.svg';\n this.statusText = 'Cancelled';\n break;\n case 'expired':\n this.statusImage = 'assets/icon/booking_expired.svg';\n this.statusText = 'Expired';\n break;\n default: // TODO\n this.statusImage = 'assets/icon/booking_expired.svg';\n this.statusText = 'Expired';\n break;\n }\n }\n this.cdRef.detectChanges();\n return;\n }\n\n}\n","

\n {{ dateString }} {{ todayString }}\n

\n
\n
\n
\n
\n
\n {{ timeStringParts[0] }} ({{ timeStringParts[1] }}) ({{\n durationString\n }})\n
\n
\n {{ localTimeStringParts[0] }} ({{ localTimeStringParts[1] }}) in your\n local timezone\n
\n
\n
\n \n \n \n \n \n
\n
\n
\n
\n
{{ statusText }}
\n
\n {{ timeRangeString }}\n
\n
\n \n
\n
\n
\n
\n
\n
\n \n \n
{{ viewModel.booking.title }}
\n {{\n viewModel.booking.bookingTypeLabel\n }}\n \n {{viewModel.booking?.merged ? 'Merged' : 'Multiroom'}} \n \n \n
\n \n \n \n
\n
\n \n {{ roomName }}\n {{ roomLocation }}\n Host: {{ host }}\n {{ attendeesCount }}pp\n Catered\n \n \n \n \n \n \n \n \n
\n
\n
\n\n
\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { RoomBookingComponent } from 'src/app/booking/room-booking/room-booking.component';\nimport { RoomResultsComponent } from 'src/app/booking/room-results/room-results.component';\nimport { RoomDetailsComponent } from 'src/app/booking/room-details/room-details.component';\nimport { BookingCreateComponent } from './booking-create/booking-create.component';\nimport { BookingEditWrapperComponent } from './booking-create/booking-edit-wrapper.component';\nimport { RoomFiltersModalComponent } from 'src/app/booking/room-filters-modal/room-filters-modal.component';\nimport { ManageBookingsComponent } from './manage-bookings/manage-bookings.component';\nimport { OfficeFloorComponent } from './office-floor/office-floor/office-floor.component';\n\nconst routes: Routes = [\n {\n path: 'results',\n component: RoomResultsComponent,\n },\n {\n path: 'results/filter',\n component: RoomFiltersModalComponent,\n },\n {\n path: 'results/room',\n component: RoomDetailsComponent,\n },\n {\n path: 'create',\n component: BookingCreateComponent,\n },\n {\n path: 'edit',\n component: BookingEditWrapperComponent,\n },\n {\n path: 'manage',\n component: ManageBookingsComponent,\n },\n {\n path: 'catering/:id',\n data: { hasCatering: true },\n component: ManageBookingsComponent,\n },\n {\n path: 'booking/:id/:verb',\n component: ManageBookingsComponent,\n },\n {\n path: 'booking/:id',\n component: ManageBookingsComponent,\n },\n {\n path: 'floor-map',\n component: OfficeFloorComponent,\n },\n {\n path: 'results/booking-calendar',\n loadChildren: () => import('./booking-calendar/booking-calendar.module').then((m) => m.BookingCalendarModule),\n },\n {\n path: '**',\n component: RoomBookingComponent,\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class BookingRoutingModule {}\n","import {\n createReducer,\n on\n} from '@ngrx/store';\nimport { \n BookingFormState,\n clearBookingFormData,\n clearRoomFilters,\n openBookingSurvey,\n storeBookingFormData,\n storeRoomFilters\n} from '@mckinsey-converge/data-common';\nimport { closestToTimeSlotTz } from '@mckinsey-converge/base';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\n\nexport const initialBookingFormState: BookingFormState = {\n activeFormFilters: []\n};\n\nexport const bookingFormReducer = createReducer(initialBookingFormState,\n on(storeBookingFormData, (state: BookingFormState, action) => {\n return {\n ...state,\n activeForm: {\n ...state.activeForm,\n ...action.payload\n }\n } as BookingFormState;\n }),\n on(clearBookingFormData, state => ({\n ...state,\n activeForm: \n {\n location: state?.activeForm?.location,\n timezone: state?.activeForm?.timezone,\n dateTz: closestToTimeSlotTz(new DateTZ({ date: Date.now(), is_local_tz: false, building_tz: state?.activeForm?.timezone, }), 15)\n \n }\n }) as BookingFormState),\n on(openBookingSurvey, state => ({\n ...state,\n bookingCompleted: new Date()\n }) as BookingFormState),\n on(storeRoomFilters, (state: BookingFormState, action) => {\n return {\n ...state,\n activeFormFilters: action.payload\n } as BookingFormState;\n }),\n on(clearRoomFilters, (state: BookingFormState) => ({\n ...state,\n activeFormFilters: initialBookingFormState.activeFormFilters\n }) as BookingFormState)\n);\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { BookingRoutingModule } from './booking-routing.module';\nimport { BookingsListingComponent } from './bookings-listing/bookings-listing.component'\nimport { RoomBookingComponent } from './room-booking/room-booking.component';\nimport { RoomDetailsComponent } from './room-details/room-details.component';\nimport { BookingFormBaseComponent } from './booking-create/booking-form-base.component';\nimport { BookingCreateComponent } from './booking-create/booking-create.component';\nimport { BookingEditComponent } from './booking-create/booking-edit.component';\nimport { BookingConfirmationComponent } from './booking-confirmation/booking-confirmation.component';\nimport { UiModule } from '@mckinsey-converge/ui';\nimport { NgxMatSelectSearchModule } from 'ngx-mat-select-search';\nimport { MatSelectModule } from '@angular/material/select';\nimport {\n FormsModule,\n ReactiveFormsModule\n} from '@angular/forms';\nimport { SharedContentModule } from 'src/app/shared/shared.module';\nimport { MatButtonModule } from '@angular/material/button';\nimport { StoreModule } from '@ngrx/store';\nimport { bookingFormReducer } from 'src/app/booking/booking.form.reducer';\nimport { BookingResultItemComponent } from './booking-result-item/booking-result-item.component';\nimport { BookingDetailsModalComponent } from './booking-details-modal/booking-details-modal.component';\nimport { BookingDurationModalComponent } from './booking-duration-modal/booking-duration-modal.component';\nimport { CancelBookingModalComponent } from './cancel-booking-modal/cancel-booking-modal.component';\nimport { ManageBookingsComponent } from './manage-bookings/manage-bookings.component';\nimport { RoomResultsComponent } from './room-results/room-results.component';\nimport { SearchedLocationComponent } from './searched-location/searched-location.component';\nimport { ResultsHeaderComponent } from './results-header/results-header.component';\nimport { RoomAvailabilityPreviewComponent } from './room-availability-preview/room-availability-preview.component';\nimport { RoomLocationPreviewComponent } from './room-location-preview/room-location-preview.component';\nimport { RoomResultItemComponent } from './room-result-item/room-result-item.component';\nimport { RoomBookingFormComponent } from './room-booking-form/room-booking-form.component';\nimport { RoomBookingDetailsFormComponent } from './room-booking-details-form/room-booking-details-form.component';\nimport { RoomBookingModalComponent } from './room-booking-modal/room-booking-modal.component';\nimport { RoomResultsPaginatedComponent } from './room-results-paginated/room-results-paginated.component';\nimport { RoomFiltersModalComponent } from './room-filters-modal/room-filters-modal.component';\nimport { RoomFiltersFormComponent } from './room-filters-form/room-filters-form.component';\nimport { RoomAvailabilityPreviewModalComponent } from './room-availability-preview-modal/room-availability-preview-modal.component';\nimport { MapModule } from 'src/app/map/map.module';\nimport { OfficeFloorMapModule } from 'src/app/booking/office-floor/office-floor-map.module';\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\nimport { RoomResultsSectionComponent } from './room-results-section/room-results-section.component';\nimport { CalendarModule, DateAdapter } from 'angular-calendar';\nimport { adapterFactory } from 'angular-calendar/date-adapters/date-fns';\nimport { BookingCateringComponent } from './catering/catering.component';\nimport { OrderTableComponent } from './catering/order-table/order-table.component';\nimport { BookingCateringOrderDetailsComponent } from './catering/order-details/order-details.component';\nimport { BookingCateringOrderListComponent } from './catering/order-list/order-list.component';\nimport { CateringOrderListItemComponent } from './catering/order-list/item/item.component';\nimport { CateringMenuCategoryComponent } from './catering/order-details/category/category.component';\nimport { SurveyModalComponent } from '../components/survey-modal/survey-modal.component';\nimport { BookingEditWrapperComponent } from './booking-create/booking-edit-wrapper.component';\n\nexport const bookingModuleDeclarations = [\n BookingFormBaseComponent,\n BookingCreateComponent,\n BookingEditComponent,\n BookingConfirmationComponent,\n BookingDetailsModalComponent,\n BookingDurationModalComponent,\n BookingsListingComponent,\n BookingResultItemComponent,\n CancelBookingModalComponent,\n ManageBookingsComponent,\n BookingCateringComponent,\n BookingCateringOrderDetailsComponent,\n BookingCateringOrderListComponent,\n CateringMenuCategoryComponent,\n CateringOrderListItemComponent,\n RoomBookingComponent,\n RoomDetailsComponent,\n RoomResultsComponent,\n SearchedLocationComponent,\n ResultsHeaderComponent,\n RoomAvailabilityPreviewComponent,\n RoomLocationPreviewComponent,\n RoomResultItemComponent,\n RoomBookingModalComponent,\n RoomBookingFormComponent,\n RoomBookingDetailsFormComponent,\n RoomResultsPaginatedComponent,\n RoomFiltersModalComponent,\n RoomFiltersFormComponent,\n RoomResultsSectionComponent,\n RoomAvailabilityPreviewModalComponent,\n CateringMenuCategoryComponent,\n OrderTableComponent,\n SurveyModalComponent,\n BookingEditWrapperComponent\n];\n\nexport const bookingModuleImports = [\n CommonModule,\n UiModule,\n MatSelectModule,\n MatButtonModule,\n NgxMatSelectSearchModule,\n ReactiveFormsModule,\n SharedContentModule,\n FormsModule,\n NgxSkeletonLoaderModule,\n MapModule,\n CalendarModule.forRoot({\n provide: DateAdapter,\n useFactory: adapterFactory,\n }),\n OfficeFloorMapModule\n];\n\n\n@NgModule({\n declarations: [...bookingModuleDeclarations],\n imports: [\n ...bookingModuleImports,\n BookingRoutingModule,\n StoreModule.forFeature('bookingForm', bookingFormReducer)\n ]\n})\nexport class BookingModule {\n}","import { Component, Input, OnInit, OnChanges, ChangeDetectionStrategy, ChangeDetectorRef, NgZone } from '@angular/core';\nimport { throttleTime, tap, first, distinctUntilChanged, map } from 'rxjs/operators';\nimport { fromEvent } from 'rxjs';\nimport { TopBarHeaderMode } from 'src/app/components/topbar-header/topbar-header.component';\nimport { select, Store } from '@ngrx/store';\nimport { BehaviorSubject } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { BuildingStoreState, buildingStateSelector, selectBuildingOptionsGroupedByCity } from '@mckinsey-converge/buildings';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Booking, User, IEngineResponse, BookingStoreState, clearBookingFormData, BookingsService, UsersService, flattenDisplayOffices, BuildingCity, Building } from '@mckinsey-converge/data-common';\nimport { UserStoreState } from '@mckinsey-converge/user';\nimport { loadBookingsWithQuery, loadUpcomingBookingsResults, MyBookingsStoreState } from '@mckinsey-converge/bookings';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport {\n mapResultsToViewModels,\n BookingResultsViewModel,\n} from 'src/app/booking/manage-bookings/manage-bookings.viewmodel';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport { BookingDetailsModalComponent } from '../booking-details-modal/booking-details-modal.component';\nimport { BookingPagination } from '@mckinsey-converge/bookings';\nimport { DateNow } from '@mckinsey-converge/date-tz';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { loadRoomsForResults } from '@mckinsey-converge/rooms';\n\nexport type ManageBookingsStoreState = BookingStoreState &\n BuildingStoreState &\n MyBookingsStoreState &\n UserStoreState;\n\n@Component({\n selector: 'app-bookings-listing',\n templateUrl: './bookings-listing.component.html',\n styleUrls: ['./bookings-listing.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BookingsListingComponent extends BaseDirective implements OnInit, OnChanges {\n @Input() public config: any;\n @Input() public buildings: BehaviorSubject[]>;\n @Input() public searchBookingBy: string;\n @Input() public selectedHost: string;\n @Input() public activeTab: string;\n\n public bookingResults = new BehaviorSubject>(\n LoadingModel.empty()\n );\n public bookings: BookingResultsViewModel[];\n public showBookings = false;\n public reloading = false;\n public TopBarHeaderMode = TopBarHeaderMode;\n public mobile: boolean = false;\n\n /** Current User */\n public currentUser: User;\n master_booking: BookingResultsViewModel;\n allBookings: any[];\n\n public pagination: BookingPagination = {\n currentPage: 1,\n totalRecords: 0,\n pageLimit: 10,\n };\n bookingPerPage: any[] = [];\n filteredByHost: any[] = [];\n\n public get lastPage() {\n return this.pages.total === this.pagination.currentPage;\n }\n\n public get pages() {\n const p = this.pagination;\n const total = Math.ceil(p.totalRecords / p.pageLimit) ;\n const group = Math.ceil(p.currentPage / 5);\n const startPosition = Math.max(\n 1,\n Math.min(group > 1 ? (group - 1) * (p.pageLimit + 1) : 1, total - 4)\n );\n let pages = [];\n for (let x = startPosition; x <= Math.min(startPosition + 4, total); x++) {\n pages.push(x);\n }\n if (!pages.length) {\n pages.push(1);\n }\n const maxed = () => {\n if (total <= 5 || p.currentPage >= total) {\n return false;\n }\n return true;\n };\n const mined = () => {\n if (total <= 5 || p.currentPage < 6) {\n return false;\n }\n return true;\n };\n const start = p.currentPage > 5;\n const end = !(p.currentPage >= total);\n return {\n total,\n pages,\n min: mined(),\n max: maxed(),\n start,\n end,\n };\n }\n\n constructor(\n private store: Store,\n private _route: ActivatedRoute,\n private _router: Router,\n private dialog: MatDialog,\n private _bookings: BookingsService,\n private _zone: NgZone,\n private cdRef: ChangeDetectorRef\n ) {\n super();\n }\n\n public ngOnInit(): void {\n const breakpoint = 450;\n const selector = this.config.selector;\n const target = this.config.type;\n\n this.subscription(\n 'currentUser',\n this.store\n .select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n \n })\n );\n\n this.subscription('buildings', this.store.pipe(\n select(buildingStateSelector),\n select(selectBuildingOptionsGroupedByCity),\n map((grouped: Map) => {\n return flattenDisplayOffices(grouped);\n }),\n distinctUntilChanged()\n ).subscribe(next => {\n // this.buildings.next(next);\n if(this.activeTab === this.config.type) {\n this.store.dispatch(\n loadBookingsWithQuery({\n email: this.currentUser.email,\n from: DateNow(new Date()).ms,\n target,\n offset: 0,\n })\n );\n }\n\n // start the timer at the top of the minute;\n const offset = DateNow(new Date()).startOfValue('minute').addValue({ minutes: 1 }).ms - DateNow(new Date()).ms;\n // fetch it on one minute interval now that there is room data.\n setTimeout(() => {\n this.refresh(target);\n this._zone.runOutsideAngular(() => {\n this.interval('refreshBookings', () => this.refresh(target, true), 60 * 1000);\n });\n\n }, offset + 5000);\n\n \n }));\n\n\n\n const sort_asc = (a, b) => a.date - b.date;\n const sort_desc = (a, b) => b.date - a.date;\n\n this.subscription(\n 'bookingResults',\n this.store.pipe(select(selector)).subscribe((next) => {\n this.bookingResults.next(next);\n if (!next.isEmpty() && Array.isArray(next?.success?.results)) {\n let results = [...next?.success?.results].sort(\n this.config.reverse_sort ? sort_desc : sort_asc\n );\n this.showBookings = !!results.length;\n this.reloading = false;\n // save all bookings to reuse later \n this.allBookings = results;\n \n /** Filter all booings of active tab by selected host if any */\n this.filterBySelectedHost(true);\n\n } else {\n this.showBookings = false;\n this.reloading = false;\n this.bookings = [];\n this.pagination.totalRecords = 0;\n this.cdRef.detectChanges();\n }\n })\n );\n\n if (window) {\n this.mobile = window.innerWidth < breakpoint;\n\n }\n\n fromEvent(window, 'resize')\n .pipe(throttleTime(500))\n .pipe(\n tap({\n next: (val) => {\n const target = val.target as Window;\n this.mobile = target.innerWidth < breakpoint;\n },\n })\n ).subscribe();\n \n this.timeout('query', () =>\n this.subscription(\n 'route.query',\n this._route.queryParamMap.subscribe((params) => {\n if (params.has('page')) this.setPage(+params.get('page'), false);\n })\n )\n );\n }\n\n //For each result from results, it find its level and building from the lists and map with BookingResultsViewModel but filter all master from list.\n public getViewModel = (results) => mapResultsToViewModels(results).filter(b => !(b.booking.is_recurrent && b.booking.recurrence_type === 'master'));\n\n\n public splitArrayIntoSubarrays(originalArray, subarrayLength) {\n var newArray = [];\n for (var i = 0; i < originalArray.length; i += subarrayLength) {\n newArray.push(originalArray.slice(i, i + subarrayLength));\n }\n return newArray;\n }\n\n\n public ngOnChanges($change: any) {\n \n if ($change?.buildings?.currentValue !== $change?.buildings?.previousValue || $change?.activeTab?.currentValue !== $change?.activeTab?.previousValue) {\n this.refresh(this.config.type);\n }\n if ($change?.selectedHost?.currentValue !== $change?.selectedHost?.previousValue) {\n this.filterBySelectedHost(true);\n } else\n if ($change?.searchBookingBy?.currentValue !== $change?.searchBookingBy?.previousValue) {\n this.filterBySelectedHost(false);\n }\n }\n\n\n\n public filterBySelectedHost(isHostChanged: boolean) {\n\n // Converting search value to lower case for case-insensitive comparison\n const searchHost = this.selectedHost.toLowerCase().trim();\n // this.filteredByHost = [];\n\n if(this.allBookings) {\n\n if(searchHost) {\n if(isHostChanged) {\n // Combining event list and space arrays into one arrya for searchig \n const allItems = [...this.allBookings];\n // Filtering the combine array to find matching host email \n this.filteredByHost = allItems.filter( (item: any ) => \n this.isIncludes(item?.host, 'email', searchHost) ||\n this.isIncludes(item?.organiser, 'email', searchHost)\n );\n }\n else {\n this.filteredByHost = [...this.filteredByHost];\n }\n \n }\n else {\n this.filteredByHost = [...this.allBookings];\n }\n\n //Now send filtered booking by host to filter further by search input given in the field\n this.filterBookingsBySearchValue([...this.filteredByHost]);\n\n \n }\n }\n\n \n public isIncludes = (item: any, field: string, searchVaue: string) => (item && item[field] && item[field].toLowerCase().includes(searchVaue));\n\n public filterBookingsBySearchValue(filteredByHost) {\n\n // Converting search value to lower case for case-insensitive comparison\n const searchValue = this.searchBookingBy.toLowerCase().trim();\n let filteredItems = [];\n\n if(filteredByHost) {\n\n if(searchValue) {\n // Combining event list and space arrays into one arrya for searchig \n const allItems = [...filteredByHost];\n // Filtering the combine array to find matching room or booking \n filteredItems = allItems.filter( (item: any ) => \n this.isIncludes(item, 'title', searchValue) ||\n this.isIncludes(item?.creator, 'name', searchValue) ||\n this.isIncludes(item?.organiser, 'name', searchValue) ||\n this.isIncludes(item, 'local_room_name', searchValue) || // search with room name \n this.isIncludes(item, 'simple_name', searchValue) || \n (item?.attendees && !!item?.attendees.filter(el => el.name.toLowerCase().includes(searchValue)).length ) \n );\n }\n else {\n filteredItems = [...filteredByHost];\n }\n\n const filteredBookings = this.getViewModel(filteredItems);\n \n this.pagination.totalRecords = filteredBookings.length;\n this.pagination.currentPage = !this.lastPage ? 1 : this.pagination.currentPage;\n this.bookingPerPage = this.splitArrayIntoSubarrays(filteredBookings, this.pagination.pageLimit);\n this.bookings = this.bookingPerPage[this.pagination.currentPage-1];\n this.cdRef.detectChanges();\n }\n \n }\n\n \n\n\n\n\n public showResults() {\n // Don't show the loading state while we're reloading with Building details.\n return this.reloading; // || !this.bookingResults?.value?.isLoading;\n }\n\n public getBuilding(booking: Booking) {\n if (this.buildings && booking.building_zone) {\n return this.buildings.value.find((b) => booking.building_zone === b.value)?.meta.building;\n }\n return null;\n }\n\n // From the Manage Bookings page\n public async viewBooking(viewModel: BookingResultsViewModel) {\n\n if(viewModel.booking.is_recurrent) {\n let booking = this.allBookings.find(bkn => bkn.id === viewModel.booking.recurrence_master_id && bkn.recurrence_type === 'master1') ;\n if (!booking) {\n booking = await this._bookings.show(viewModel.booking.recurrence_master_id);\n }\n this.master_booking = mapResultsToViewModels([booking])[0];\n }\n this.cdRef.detectChanges();\n\n // real booking.room here.\n const dialogRefX = this.dialog.open(BookingDetailsModalComponent, {\n panelClass: 'mck-modal-wide-manage-booking',\n data: {\n booking: viewModel.booking,\n refresh: () => {\n this.refresh('all');\n },\n\n building: this.getBuilding(viewModel.booking),\n master_booking: this.master_booking?.booking || null,\n },\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n\n dialogRefX.afterClosed().subscribe((flag) => {\n flag !== 'DoNotClearActiveForm' && this.clearFormAndResultData();\n this.cdRef.detectChanges();\n // this.timeout('refreshBookings', () => this.refresh('all'), 1000);\n // this.timeout('refreshBookings', () => this.refresh('all'), 5000);\n });\n }\n\n public clearFormAndResultData() {\n this.store.dispatch(clearBookingFormData());\n this.store.dispatch(loadRoomsForResults.clear());\n this.cdRef.detectChanges();\n }\n\n public readonly prevPage = () => this.setPage(this.pagination.currentPage - 1);\n public readonly nextPage = () => this.setPage(this.pagination.currentPage + 1);\n public readonly prevGroup = () => this.setPage(this.pages.pages.length);\n public readonly nextGroup = () => this.setPage(this.pages.pages.length + 1);\n public readonly gotoPage = (page: number) => this.setPage(page);\n\n public setPage(page_idx: number, route: boolean = true) {\n if (!this.pages.total) return;\n const page = Math.max(1, Math.min(page_idx, this.pages.total));\n if (route) this._router.navigate([], { relativeTo: this._route, queryParams: { page } });\n this.pagination.currentPage = page;\n this.bookings = this.bookingPerPage[this.pagination.currentPage-1];\n this.cdRef.detectChanges();\n // this.refresh();\n }\n\n public refresh(target: string = this.activeTab, dontShowReloading = false) {\n if (!this.currentUser?.email) {\n return;\n }\n\n \n const offset = 0 ; //(this.pagination.currentPage - 1) * this.pagination.pageLimit;\n // fetch it on one minute interval now that there is room data.\n if(this.activeTab === this.config.type) {\n\n this.store.dispatch(\n loadBookingsWithQuery({\n email: this.currentUser.email,\n from: DateNow(new Date()).ms,\n target:this.activeTab,\n offset,\n })\n );\n this.reloading = !dontShowReloading;\n this.cdRef.detectChanges();\n }\n \n\n \n\n \n }\n\n identify(index, item) {\n return item.booking.id;\n }\n}\n","
\n \n \n
\n
\n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n \n

End of list. You have no upcoming bookings

\n
\n
\n \n

End of list. Past meetings are saved for up to 48 hours.

\n
\n
\n \n

End of list. Cancelled meetings are saved for up to 48 hours.

\n
\n
\n
\n \n \n \n \n
\n
\n
\n
    \n
  • \n
  • 1
  • \n
  • ...
  • \n
  • \n {{p}}\n
  • \n
  • ...
  • \n
  • \n {{pages.total}}\n
  • \n
  • \n
\n
","import { Component, Inject, ViewEncapsulation } from '@angular/core';\nimport {\n dateBuildingFormatString,\n startEndTimeWithZoneFormatString,\n} from '@mckinsey-converge/base';\nimport { Booking, Building, RecurrencePeriod } from '@mckinsey-converge/data-common';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { BaseClass } from '@mckinsey-converge/base';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\n\ninterface data {\n booking: Booking;\n building: Building;\n callback: Function;\n master_booking?: Booking;\n hasLoaderUrl?: boolean;\n refresh?: Function;\n\t\tseries?:{};\n}\n\n@Component({\n selector: 'app-cancel-booking-modal',\n template: `\n \n
\n \n
\n
\n \n
{{ subtitle }}
\n
\n
\n

{{ data.booking.title }}

\n\n \n

\n Daily from \n \n

\n weekly on {{ data?.master_booking?.recurrence_days[0] | titlecase }}\n

\n

from

\n \n Monthly on \n\n {{ data?.master_booking?.dateString }} until\n {{ data?.master_booking?.endDateString }}\n

\n \n \n Specific Dates: \n
\n
\n
Date
\n
\n
\n {{ occurrence.dateTz.formatDate('dd MMM yyyy') }}\n
\n
\n
\n
\n
\n
\n\n

{{ dateString }}

\n

{{ timeString }}

\n

{{ buildingAddress }}

\n

{{ data.booking.room.local_room_name }}

\n \n
\n \n
\n
\n `,\n styleUrls: ['./cancel-booking-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class CancelBookingModalComponent extends BaseClass {\n public title: string;\n public roomName: string;\n public buildingAddress: string;\n public dateString: string;\n public timeString: string;\n public canceled = false;\n private _specific_dates = false;\n private recurrence_period: RecurrencePeriod;\n public occurrence_details: { start_epoch: number; dateTz: DateTZ; id: string }[];\n private recurrence_interval: number;\n\n public get subtitle() {\n return this.canceled\n ? `${this.title} booking cancelled`\n : this.data?.series\n ? 'Are you sure you want to cancel this recurring series?'\n : 'Are you sure you want to cancel this booking?';\n }\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: data,\n private dialogRef: MatDialogRef\n ) {\n super();\n this.dateString = dateBuildingFormatString(this.data.booking.startDateTz, true);\n this.timeString = startEndTimeWithZoneFormatString(this.data.booking.startDateTz, this.data.booking.displayEndDateTz);\n this.title = this.data.booking.title;\n this.buildingAddress = this.data.booking.room.street_and_city;\n\n\n\t\t\t\tif(this.data?.master_booking !== null) {\n\n\t\t\t\t\tthis.recurrence_period = this.data?.master_booking?.recurrence_period;\n\t\t\t\t\tthis.recurrence_interval = this.data?.master_booking?.recurrence_interval;\n\n\t\t\t\t\tthis.occurrence_details = this.data?.master_booking?.occurrence_details &&\n\t\t\t\t\t\tthis.data?.master_booking?.occurrence_details\n\t\t\t\t\t\t\t.filter((ocurrence) => ocurrence.id !== this.data?.master_booking?.id)\n\t\t\t\t\t\t\t.map((ocurrence) => ({\n\t\t\t\t\t\t\t\t...ocurrence,\n\t\t\t\t\t\t\t\tstart_epoch: ocurrence.start_epoch * 1000,\n\t\t\t\t\t\t\t\tdateTz: new DateTZ({\n\t\t\t\t\t\t\t\t\tdate: ocurrence.start_epoch * 1000,\n\t\t\t\t\t\t\t\t\tis_local_tz: false,\n\t\t\t\t\t\t\t\t\tbuilding_tz: this.data.master_booking.timezone,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t}));\n\t\t\t\t}\n\n }\n\n public closeModal() {\n this.dialogRef.close();\n }\n\n public cancelBooking() {\n this.canceled = true;\n this.data.callback();\n this.timeout('closeModal', () => this.closeModal(), 2000);\n }\n\n public set specific_dates(val: boolean) {\n this._specific_dates = val;\n }\n\n public get specific_dates(): boolean {\n return this._specific_dates;\n }\n\n public toggleSpecificDates() {\n this.specific_dates = !this.specific_dates;\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n OnInit\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport {\n Booking,\n Building,\n CateringOrder,\n Space,\n bookingStatusDetails,\n ApplicationService,\n CateringCategory,\n BookingsService,\n DataForConfirmation,\n getLastDateFromList\n} from '@mckinsey-converge/data-common';\nimport {\n DialogEvent,\n HashMap,\n shorterLocalDateFormatString\n} from '@mckinsey-converge/base';\nimport {\n BaseDirective,\n dateBuildingFormatString,\n startEndTimeWithZoneFormatString,\n humaniseDuration,\n toTitleCase\n} from '@mckinsey-converge/base';\nimport { TopBarHeaderMode } from 'src/app/components/topbar-header/topbar-header.component';\nimport {\n CateringDetailsModalComponent,\n CateringDetailsModalData\n} from '@mckinsey-converge/legacy-overlays';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\nexport interface BookingFlowEvent {\n /** Type of flow event */\n type: 'previous' | 'next' | 'reset' | 'close' | 'error';\n /** Step which the event was emitted from */\n step: string;\n /** Additional metadata for the event */\n metadata?: HashMap;\n}\n\n@Component({\n selector: 'booking-catering',\n templateUrl: './catering.component.html',\n styleUrls: ['./catering.component.scss']\n})\nexport class BookingCateringComponent extends BaseDirective implements OnInit {\n /** Form fields for the booking */\n @Input() public form: FormGroup;\n /** Emitter for flow update events */\n @Output() public event = new EventEmitter();\n @Input() public booking: Booking;\n @Input() public isOccurence: boolean;\n /** Emitter for open catering */\n @Output() public showCatering = new EventEmitter();\n /**\n * placeIntoModal: Input decorator indecate as a flag to adapt component design into a dialog modal \n * (by hiding header and adjusting height so that fit into a modal)\n */\n @Input() public placeIntoModal: boolean = false;\n dataForConfirmation: DataForConfirmation;\n isEditSeries: boolean = false;\n\n constructor(\n private _dialog: MatDialog,\n public _service: ApplicationService,\n public _bookings: BookingsService,\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.updateConfimatinModal();\n }\n\n /** Active order to display details for */\n public active_order: CateringOrder;\n public TopBarHeaderMode = TopBarHeaderMode;\n public confirmed: boolean = false;\n public next_disabled: boolean = true;\n\n public loading: boolean = false;\n\n\n public get building(): Building[] {\n return this.booking.room.building;\n };\n\n /** Field for storing catering details */\n public get catering_field() {\n return this.form && this.form.controls.catering ? this.form.controls.catering : null;\n }\n\n /** List of spaces selected for the booking */\n public get space_list(): Space[] {\n return this.form && this.form?.controls?.space_list?.value.length\n ? this.form.controls.space_list.value\n : [];\n }\n\n /** Date of the booking */\n public get dateTz(): number {\n return this.form && this.form.controls.dateTz\n ? this.form.controls.dateTz.value\n : DateNow(new Date()).startOfValue('minute');\n }\n\n /** Duration of the booking */\n public get duration(): number {\n return this.form && this.form.controls.duration ? this.form.controls.duration.value : 60;\n }\n\n /** Whether booking is all day */\n public get all_day(): boolean {\n return this.form && this.form.controls.all_day && this.form.controls.all_day.value;\n }\n\n\n public get type() {\n return toTitleCase(this.booking?.class);\n }\n\n public get dateString() {\n return dateBuildingFormatString(this.booking.startDateTz);\n }\n\n public get timeString() {\n return startEndTimeWithZoneFormatString(this.booking.startDateTz, this.booking?.displayEndDateTz);\n }\n\n public get durationString() {\n return humaniseDuration(this.booking?.duration);\n }\n\n public get status() {\n return bookingStatusDetails(this.booking);\n }\n\n /** Create a new catering order */\n public newOrder(): void {\n const order = new CateringOrder({ booking_timezone: this.booking?.timezone });\n this.active_order = order;\n }\n\n // Combine the same items for the same timeslot into the same order item\n public combineItems = (newItems: CateringCategory[], oldItems: CateringCategory[]) => {\n // Group and Sum the items in an Item ID keyed object\n const itemsObj = {};\n oldItems.forEach((i) => {\n if (itemsObj[i.id]) {\n itemsObj[i.id].setAmount(itemsObj[i.id].amount + i.amount);\n } else {\n itemsObj[i.id] = i;\n }\n });\n newItems.forEach((i) => {\n if (itemsObj[i.id]) {\n itemsObj[i.id].setAmount(itemsObj[i.id].amount + i.amount);\n } else {\n itemsObj[i.id] = i;\n }\n })\n // Convert the object to an array\n const items = [];\n for (const item in itemsObj) {\n items.push(itemsObj[item]);\n }\n // return the items consolidated by item ID.\n return items;\n }\n\n /** Handle changes to catering order */\n public handleOrderEvent(order: CateringOrder) {\n /* istanbul ignore else */\n if (order) {\n this.next_disabled = false;\n const orders = this.form.controls.catering.value;\n // When the order edit button is clicked we are editing an existing order\n const index = orders.findIndex((an_order) => {\n return order.id === an_order.id\n });\n\n // If editing an existing order row it will have an index, if not create a new row\n if (index < 0) {\n // Add the new order\n orders.push(order);\n } else {\n // Replace the existing order with the edited order\n orders.splice(index, 1, order);\n }\n\n // Setup the \"reduced\" data containers\n const reduceItems = {};\n const reduceOrders = {};\n orders.forEach((o) => {\n if (reduceItems[o.delivery_time]) {\n // An order for this timeslot already exists, combine the same items to dedupe rows\n reduceItems[o.delivery_time] = this.combineItems(o.items, reduceItems[o.delivery_time]);\n } else {\n // Since this is a new timeslot, use the existing items\n reduceItems[o.delivery_time] = o.items;\n // Copy the order and clear its item contents, placeholder for the updated items\n reduceOrders[o.delivery_time] = o;\n reduceOrders[o.delivery_time].items = [];\n }\n });\n\n // Add the reduced items to the reduced orders\n let consolidatedOrders = [];\n for (const deliveryTime in reduceOrders) {\n const order = reduceOrders[deliveryTime];\n order.items = reduceItems[deliveryTime]\n consolidatedOrders.push(order);\n }\n\n this.form.controls.catering.setValue(consolidatedOrders);\n }\n this.active_order = null;\n }\n\n public closeCallback() {\n // Bail and close the catering component\n this.next_disabled = true;\n this.active_order = null;\n\n // Need to clone to avoid readonly errors\n this.form.controls.catering.setValue(this.booking.catering.map(order => order.clone()));\n this.event.emit();\n }\n\n public closeConfirmation() {\n this.event.emit();\n }\n\n /** Open modal for adding equipment requirements to booking */\n private openCateringDetailsModal() {\n const ref = this._dialog.open(\n CateringDetailsModalComponent,\n {\n maxWidth: '95vw',\n width: '32em',\n data: {\n spaces: this.form.controls.space_list.value,\n notes_field: this.form.controls.notes,\n catering: this.form.controls.catering,\n booking: this.booking\n }\n }\n );\n this.subscription(\n 'modal_events',\n ref.componentInstance.event.subscribe((event: DialogEvent) => {\n // Catering requirements and charge code modal closed event\n /* istanbul ignore else */\n if (event.reason === 'done') {\n // Closed with the reason done\n ref.close();\n\n // Display the loading animation and the Booking Confrimation component\n this.loading = true;\n this.confirmed = true;\n\n this.saveBooking();\n }\n })\n );\n ref.afterClosed().subscribe(() => this.unsub('modal_events'));\n }\n\n public saveBooking() {\n // Clone and append the catering and note data to the booking\n let booking = this.booking.clone();\n booking.catering = this.form.controls.catering.value;\n booking.notes = this.form.controls.notes.value;\n if(booking.notes.length || booking.catering.length) {\n\n const setup = { ...booking.setup };\n setup[booking.space.email] = booking.setup[booking.space.email] || 900;\n booking.setup = setup;\n\n const breakdown = { ...booking.breakdown };\n breakdown[booking.space.email] = booking.breakdown[booking.space.email] || 900;\n booking.breakdown = breakdown;\n }\n\n\n // Save to the API and respond. && !this.isOccurence\n this._bookings.save(booking, booking.is_recurrent ).then(\n (bkn) => {\n this.booking = new Booking({ ...this.booking, ...bkn.toApiJSON() }); \n // Stop the loading animation and show the booking confirmation component.\n this.updateConfimatinModal();\n\n this.loading = false;\n this.confirmed = true;\n this.event.emit(this.form)\n },\n (err) => {\n // Stop the loading animation and return to the catering flow with an error.\n this.loading = false;\n this.confirmed = false;\n this._service.notifyError(\n `Error updating booking.`\n );\n }\n )\n }\n\n public handleOrderListEvent($event: any) {\n const orders = this.form.controls.catering.value;\n // Handle the Previous and Next buttons\n if ($event.type === 'previous') {\n // Bail and close the catering component\n this.next_disabled = true;\n this.active_order = null;\n // Need to clone to avoid readonly errors\n this.form.controls.catering.setValue(this.booking.catering.map(order => order.clone()));\n this.event.emit();\n }\n if ($event.type === 'next') {\n // Move on to the catering details modal\n this.next_disabled = false;\n if (orders.length) {\n this.openCateringDetailsModal();\n } else {\n // Display the loading animation and the Booking Confrimation component\n this.loading = true;\n this.confirmed = true;\n this.saveBooking();\n }\n }\n }\n\n public openCatering() {\n // Start catering from the Booking Confirmation page Add Catering button\n this.confirmed = false;\n this.next_disabled = true;\n this.showCatering.emit();\n }\n\n /**\n * Public method to update the confirmation modal data.\n * This method updates the dataForConfirmation object with the necessary information\n * for displaying the confirmation modal in the application.\n */\n public updateConfimatinModal() {\n\n // Prepare an object with booking details and related information for the confirmation modal\n this.dataForConfirmation = {\n booking: this.booking, // Information about the booking\n status: this.status, // Status of the booking (e.g., confirmed, pending, etc.)\n dateString: this.dateString, // Date of the booking in string format\n endDateString: this.endDateString, // End date of the booking in string format\n timeString: this.timeString, // Time of the booking in string format\n durationString: this.durationString, // Duration of the booking in string format\n type: this.type, // Type of booking (e.g., internal, external, etc.)\n isEditSeries: this.isEditSeries, // Boolean indicating whether it's an edit in a series of events\n // Function to check if there are conflicts with occurrences of the booking\n isConflictWithOccurences: this.isConflictWithOccurences.bind(this),\n // Function to open a modal in case of conflicts with recurring events\n // openRecurrenceConflictsModal: this.openRecurrenceConflictsModal.bind(this)\n }\n }\n\n /**\n * Checks if there are conflicts with the current booking and its occurrences.\n * Calculates the difference between total occurrences and available occurrences\n * to determine if there are conflicts.\n *\n * @returns {Object} An object containing conflict information:\n * - is_conflict: A boolean indicating if there are conflicts (true if conflicts exist, false otherwise).\n * - total_Conflicts: The total number of conflicts (the difference between total occurrences and available occurrences).\n */\n // public isConflictWithOccurences() {\n // const conflicts = this?.booking?.room?.totalOccurrences - this?.booking?.room?.availableOccurrences;\n // return { is_conflict: !!conflicts, total_Conflicts: conflicts };\n // }\n\n public isConflictWithOccurences() {\n let totalConflicts = 0;\n \n this.booking.multi_rooms.forEach(room => {\n totalConflicts += Math.max(room.totalOccurrences - room.availableOccurrences, 0);\n });\n \n\n const result = {\n is_conflict: totalConflicts > 0, \n total_Conflicts: totalConflicts \n };\n return result;\n }\n\n /**\n * Retrieves the end date string for the booking, considering recurrence if applicable.\n * If the booking is recurrent, it calculates the end date based on recurrence starts;\n * otherwise, it uses the booking's start date as the end date.\n *\n * @returns {string} The formatted end date string in a shorter local date format.\n */\n public get endDateString(): string {\n // Determine the array of date-time strings based on recurrence or single start date\n let recurrenceStart: Array= [];\n const { is_recurrent, recurrence_starts, occurrence_details, timezone} = this.booking;\n if(is_recurrent && recurrence_starts.length) {\n recurrenceStart = this.booking.recurrence_starts;\n }\n else if(is_recurrent && !recurrence_starts.length && occurrence_details.length) {\n this.booking.occurrence_details.forEach(element => {\n recurrenceStart.push(new DateTZ({ date: element.start_epoch * 1000, is_local_tz: false, building_tz: timezone}));\n });\n recurrenceStart = recurrenceStart.sort((d1: DateTZ, d2: DateTZ) => d1.ms - d2.ms);\n }\n else {\n recurrenceStart = [this.booking.startDateTz];\n }\n\n\n // const endDtz = (this.booking.is_recurrent && this.booking.recurrence_starts.length) ? this.booking.recurrence_starts : [this.booking.startDateTz]\n // Get the last date from the list of date-time strings and format it in a shorter local date format\n return shorterLocalDateFormatString(getLastDateFromList(recurrenceStart));\n }\n\n}\n","
\n
\n \n \n
\n
\n
\n
\n \n \n \n
\n \n \n \n
\n
\n \n
\n
\n
","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { FormControl } from '@angular/forms';\n\nimport { CateringCategory } from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'a-category-display',\n templateUrl: './category.component.html',\n styleUrls: ['./category.component.scss']\n})\nexport class CateringMenuCategoryComponent {\n /** Category to display details for */\n @Input() public category: CateringCategory;\n /** Form control for the list of order items */\n @Input() public items: FormControl;\n /** Currency symbol for the active space */\n @Input() public symbol: string;\n /** Whether item should be disabled if not available anytime */\n @Input() public disabled: boolean;\n /** Whether to show smaller version of component */\n @Input() public compact: boolean;\n /** Emitter for close events */\n @Output() public close = new EventEmitter();\n}\n","
\n
\n \n
{{ category?.name }}
\n
\n
\n\n
\n \n
\n
\n\n
\n
\n \n
\n
\n Category contains no available items\n
\n
\n
\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport {\n FormControl,\n FormGroup\n} from '@angular/forms';\nimport { BehaviorSubject } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport {\n Building,\n CateringCategory,\n CateringItem,\n CateringMenuService,\n CateringOrder,\n OrganisationService,\n Space\n} from '@mckinsey-converge/data-common';\nimport {\n DialogEvent,\n Identity\n} from '@mckinsey-converge/base';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n BookingCateringConfirmModalComponent,\n CateringConfirmModalData\n} from '@mckinsey-converge/legacy-overlays';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n\ninterface StartEndResponse {\n timezone: string,\n start: DateTZ;\n end: DateTZ\n}\n\n@Component({\n selector: 'a-catering-order-details',\n templateUrl: './order-details.component.html',\n styleUrls: ['./order-details.component.scss']\n})\nexport class BookingCateringOrderDetailsComponent extends BaseDirective implements OnInit {\n /** Catering order to edit details of */\n @Input() public order: CateringOrder;\n /** Booking date */\n @Input() public dateTz: DateTZ;\n /** Booking duration */\n @Input() public duration: number;\n /** Booking duration */\n @Input() public space_list: Space[];\n /** Whether booking is all day */\n @Input() public all_day: boolean;\n /** Whether top header details should be shown */\n @Input() public hide_details: boolean;\n /** Whether to show smaller version of component */\n @Input() public compact: boolean;\n /** Emitter for changes to the catering order */\n @Output() public event = new EventEmitter();\n /** Form controls for order */\n public form: FormGroup;\n /** List of available catering item categories */\n public category_list: CateringCategory[] = [];\n /** Active category to display details for */\n public active_category: CateringCategory;\n /** List of available times for delivering catering */\n public available_times: Identity[] = [];\n /** Whether the menu is loading */\n public loading: boolean;\n /** Whether the search input should be shown */\n public show_search: boolean;\n /** Current search string for filtering */\n public readonly search$ = new BehaviorSubject('');\n /** List of menu items that match the search string */\n public matched_items: CateringItem[] = [];\n\n /**\n * placeIntoModal: Input decorator indecate as a flag to adapt component design into a dialog modal \n * (by hiding header and adjusting height so that fit into a modal)\n */\n @Input() public placeIntoModal: boolean = false;\n\n @ViewChild('input') private _input_el: ElementRef;\n\n /** Whether user is able to order from the currently selected space */\n public get can_order(): boolean {\n return (\n (this.active_building.has_catering || this.category_list.length) &&\n (!this.within_restricted_time || this.has_available_items) &&\n !this.out_of_hours\n );\n }\n\n /** Building associated with the selected space */\n public get active_building(): Building {\n const form_controls = (this.form || { controls: { location_id: { value: '' } } }).controls;\n const space: Space =\n this.space_list.find((space) => space.email == form_controls.location_id.value) ||\n ({ level: {} } as any);\n return (\n this._org.buildings.find((bld) => space.level?.building_id === bld.id) ||\n ({ catering_restricted_from: 0 } as any)\n );\n }\n\n /** Currency code for the active building */\n public get symbol(): string {\n return this.active_building.currency || 'USD';\n }\n\n /** Number of items in the order */\n public get item_count(): number {\n return this.form\n ? this.form.controls.items.value.reduce((total, item) => total + item.amount, 0)\n : 0;\n }\n\n /* istanbul ignore next */\n /** Whether booking time is outside of catering hours */\n public get out_of_hours(): boolean {\n return this.form.controls.delivery_time.value < 0;\n }\n\n /** Whether booking is with the restricted ordering period */\n public get within_restricted_time(): boolean {\n const expired = DateNow(new Date()).addValue({ hours: this.active_building.catering_restricted_from }).startOfValue('minute');\n return this.dateTz.isBeforeDate(expired);\n }\n\n /** Whether booking is with the restricted ordering period */\n public within_category_restricted_time(item?: CateringItem ): boolean {\n /**\n * Update : https://mckinsey.atlassian.net/browse/CNG-574\n * Right now the frontend is restricting catering orders based off the field .settings.discovery_info.catering_restricted_from,\n * so for this ticket change it’s best we keep that field as the default time restriction, then add a new field to catering categories called \n * restricted_from which will override the old field if it’s present!\n * restricted_from can be set by concierge admin to restrict item from being order before set time ex if it been set to 24 then the item should\n * available to order before 24 hours of booking/order time!\n */\n\n if(!!item?.restricted_from) {\n const expired = DateNow(new Date()).addValue({ hours: item?.restricted_from }).startOfValue('minute');\n return this.dateTz.isBeforeDate(expired);\n } else {\n return false;\n }\n \n }\n\n /** Whether items are available for order at anytime */\n public get has_available_items(): boolean {\n return this.category_list.reduce(\n (available, category) => available || category.can_order_anytime,\n false\n );\n }\n\n constructor(\n private _menu: CateringMenuService,\n private _org: OrganisationService,\n private _dialog: MatDialog\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.generateAvailableTimes();\n this.subscription('search', this.search$.pipe(map((str) => {\n const search = str.toLowerCase();\n const items = [];\n const available_categories = this.category_list.filter(item => !this.within_category_restricted_time(item) )\n\n for (const category of available_categories) {\n if (category.items) {\n for (const group of category.items) {\n if ((group as any).items.length) {\n if (\n (group as any).package &&\n (group.name.toLowerCase().includes(search) ||\n (group as any).items.find((item) =>\n item.name.toLowerCase().includes(search)\n ))\n ) {\n items.push(group);\n } else {\n for (const item of (group as any).items) {\n if (item.name.toLowerCase().includes(search)) {\n items.push(item);\n }\n }\n }\n } else {\n if (group.name.toLowerCase().includes(search)) {\n items.push(group);\n }\n }\n }\n }\n }\n \n return items;\n })).subscribe((items) => this.matched_items = items));\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n /* istanbul ignore else */\n if (changes.date || changes.duration) {\n this.generateAvailableTimes();\n /* istanbul ignore else */\n if (\n this.form &&\n !this.available_times.find(\n (time) => time.id === this.form.controls.delivery_time.value\n )\n ) {\n this.form.controls.delivery_time.setValue(this.available_times[0].id);\n }\n }\n /* istanbul ignore else */\n if (changes.space_list) {\n /* istanbul ignore else */\n if (this.form && this.space_list && !this.form.controls.location_id.value) {\n this.form.controls.location_id.setValue(this.space_list[0].email);\n }\n }\n /* istanbul ignore else */\n if (changes.order && this.order) {\n this.initForm();\n }\n }\n\n public focusSearch() {\n if (this._input_el && this.show_search) {\n this._input_el.nativeElement.focus();\n }\n }\n\n public initForm() {\n this.form = new FormGroup({\n id: new FormControl(this.order.id),\n booking_date: new FormControl(\n this.all_day ? this.dateTz.startOfValue('day').ms : this.dateTz.ms\n ),\n location_id: new FormControl(this.order.location_id || this.space_list[0]?.email),\n delivery_time: new FormControl(this.order.delivery_time || this.available_times[0].id),\n items: new FormControl(this.order.items.map((item) => new CateringItem(item)))\n });\n this.subscription(\n 'space_change',\n this.form.controls.location_id.valueChanges.subscribe((space) => {\n this.generateAvailableTimes();\n if (\n !this.available_times.find(\n (time) => time.id === this.form.controls.delivery_time.value\n )\n ) {\n this.form.controls.delivery_time.setValue(this.available_times[0].id);\n }\n this.form.controls.items.setValue([]);\n this.loadMenu();\n })\n );\n this.loadMenu();\n this.generateAvailableTimes();\n if (\n this.form &&\n !this.available_times.find((time) => time.id === this.form.controls.delivery_time.value)\n ) {\n this.form.controls.delivery_time.setValue(this.available_times[0].id);\n }\n }\n\n public confirmOrder() {\n const ref = this._dialog.open(BookingCateringConfirmModalComponent, {\n maxWidth: '95vw',\n data: {\n all_day: this.all_day,\n dateTz: this.dateTz,\n form: this.form\n }\n });\n this.subscription(\n 'confirm_event',\n ref.componentInstance.event.subscribe((event: DialogEvent) => {\n /* istanbul ignore else */\n if (event.reason === 'done') {\n const order = new CateringOrder({ ...this.order, ...this.form.value });\n // order is emited but who is receiving?\n this.event.emit(order);\n ref.close();\n }\n })\n );\n ref.afterClosed().subscribe(() => {\n this.unsub('confirm_event');\n });\n }\n\n private loadMenu() {\n const space = this.space_list.find(\n (space) => space.email === this.form.controls.location_id.value\n );\n\n this.loading = true;\n this._menu\n .query({ zone_id: this._org.buildings.find((bld) => space?.zones.includes(bld.id))?.id })\n .then(\n (list) => {\n this.loading = false;\n this.category_list = list.map((i) => new CateringCategory(i))\n .filter(c => !c.out_of_stock);\n },\n () => (this.loading = false)\n );\n }\n\n /** Generate a list of available delivery times for the given booking time */\n private generateAvailableTimes() {\n let { timezone, start, end } = this.generateStartAndEndTimes();\n start = start.setValue({ minute: Math.ceil(start.minutes / 5) * 5 });\n // will be different from staff in these commonly named methods.\n const start_date = this.dateTz;\n this.available_times = [];\n while (start.isBeforeDate(end)) {\n this.available_times.push({\n id: Math.abs(start_date.dateDiff(start, 'minutes')),\n name: start.formatDate('h:mma').toLocaleLowerCase(),\n });\n start = start.addValue({ minutes: 5 });\n }\n /* istanbul ignore else */\n if (this.available_times.length === 0) {\n this.available_times.push({ id: -1, name: 'Out of hours' });\n }\n }\n\n private generateStartAndEndTimes(): StartEndResponse {\n const now = DateNow(new Date())\n let timezone = now.local_tz;\n const space_email = this.form ? this.form.controls.location_id.value : null;\n let catering_hours = { start: 7, end: 20 };\n let building_time = this.dateTz.startOfValue('day');\n let cat_start_time = building_time.addValue({ hours: catering_hours.start });\n let cat_end_time = building_time.addValue({ hours: catering_hours.end });\n\n if (space_email) {\n // Fetch the Space and Building\n const space = this.space_list.find((space) => space.email === space_email);\n const building = this._org.buildings.find((bld) => space?.zones.includes(bld.id));\n if (building.timezone) {\n // Update to the building timezone if defined.\n timezone = building.timezone;\n building_time = this.dateTz.toZone(timezone).startOfValue('day');\n }\n if (building?.catering_hours) {\n // Update to the building catering hours if defined.\n catering_hours = building?.catering_hours;\n }\n // Update the hours with the currently defined timezone.\n cat_start_time = building_time.addValue({ hours: catering_hours.start });\n cat_end_time = building_time.addValue({ hours: catering_hours.end });\n }\n\n // Start Time of the Booking\n let start = this.dateTz.toZone(timezone);\n let end = this.dateTz.toZone(timezone).addValue({ minutes: this.duration });\n\n // Do the booking start and end time coincide with the catering hours?\n if (start.isBeforeDate(cat_start_time)) {\n // booking start before catering opens'\n if (cat_end_time.isAfterDate(start)) {\n // catering closes after booking starts'\n start = cat_start_time.addValue({});\n } else {\n // were just closed, catering closes before booking start'\n start = cat_end_time.addValue({});\n end = cat_end_time.addValue({});\n return { timezone, start, end };\n }\n } else {\n // booking starts after catering is open'\n if (cat_end_time.isBeforeDate(start)) {\n // were just closed, catering closed before booking start'\n start = cat_end_time.addValue({});\n end = cat_end_time.addValue({});\n return { timezone, start, end };\n }\n }\n\n if (end.isBeforeDate(cat_end_time)) {\n // booking ends before catering closes'\n if (cat_start_time.isAfterDate(end)) {\n // were just closed, catering opens is after booking ends'\n start = cat_start_time.addValue({});\n end = cat_start_time.addValue({});\n return { timezone, start, end };\n }\n } else {\n // booking ends after catering closes'\n // set the booking end to the catering close time.'\n end = cat_end_time.addValue({});\n }\n\n return { timezone, start, end };\n }\n}\n\n","
\n
\n
\n
\n
Deliver to:
\n \n \n \n {{ space.local_name }}\n \n \n \n
\n
\n
At:
\n \n \n \n {{ time.name }}\n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n
\n
\n
\n
\n \n
\n \n
\n
\n \n \n
\n \n
\n
{{ item.name }}
\n \n
\n
\n
\n
\n
\n
\n \n Back\n \n \n Confirm Order({{ item_count || '0' }})\n \n
\n
\n
\n\n
\n
\n \"No\n
\n

\n Catering is not available for this booking.
\n Catering must be ordered within business hours at {{ active_building?.name }}.\n

\n
\n
\n\n
\n
\n
\n \n
\n
\n Loading menu for {{ active_building?.name }}...\n
\n
\n
\n
\n\n \n\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output\n} from '@angular/core';\n\nimport {\n CateringOrder,\n Space,\n SpacesService\n} from '@mckinsey-converge/data-common';\nimport { DateNow } from '@mckinsey-converge/date-tz'\n\n\n@Component({\n selector: 'catering-order-list-item',\n templateUrl: './item.component.html',\n styleUrls: ['./item.component.scss']\n})\nexport class CateringOrderListItemComponent implements OnInit {\n /** Catering order to display */\n @Input() order: CateringOrder;\n /** */\n @Input() public space_list: Space[];\n /** Selected datetime */\n @Input() date: number = DateNow(new Date()).ms;\n /** Emitter for edit events */\n @Output() public edit = new EventEmitter();\n /** Emitter for delete events */\n @Output() public delete = new EventEmitter();\n\n public room: Space;\n\n public ngOnInit(): void {\n this.room = (this.space_list || []).find(space => space.email === this.order.location_id);\n }\n\n public get space_in_booking(): boolean {\n return !!this.room;\n }\n\n /** Space selected for delivery */\n public get local_space_name(): string {\n return this.room?.local_name || '';\n }\n\n /** Delivery time for the order */\n public get delivery_time(): string {\n /* istanbul ignore else */\n if (!this.order) {\n return '';\n }\n\n // R--- there's probably a helper for this calculation on the Catering Order \n return this.order.bookingDateTz.addValue({ minutes: this.order.delivery_time || 0 }).formatDate('h:mma').toLocaleLowerCase();\n }\n\n /** Total cost of the order */\n public get order_cost(): number {\n const items = (this.order || { items: [] }).items as any;\n return items.reduce((amount, item) => amount + item.amount * item.unit_price, 0);\n }\n\n /** Number of items in the order */\n public get item_count(): number {\n const items = (this.order || { items: [] }).items as any;\n return items.reduce((amount, item) => amount + item.amount, 0);\n }\n\n /** Currency symbol for the selected space */\n public get symbol(): string {\n /* istanbul ignore else */\n if (!this.room || !this.room.level) {\n return 'USD';\n }\n\n return this.room?.building?.currency || 'USD';\n }\n\n constructor(private _spaces: SpacesService) {\n }\n}\n","
\n Deliver to {{ local_space_name }} at {{ delivery_time }}\n
\n
\n
\n {{ item_count }}\n { item_count, plural, =1 { item } other { items } }\n
\n
{{ order_cost / 100 | currency: symbol }}
\n
\n
\n \n \n \n \n
\n","import {\n Component,\n EventEmitter,\n Input,\n Output\n} from '@angular/core';\nimport { FormControl } from '@angular/forms';\n\nimport {\n CateringOrder,\n Space\n} from '@mckinsey-converge/data-common';\nimport { BookingFlowEvent } from '../../catering/catering.component';\nimport { DateTZ } from '@mckinsey-converge/date-tz'\n\n\n@Component({\n selector: 'a-catering-order-list',\n templateUrl: './order-list.component.html',\n styleUrls: ['./order-list.component.scss']\n})\nexport class BookingCateringOrderListComponent {\n /** Form field for storing catering orders */\n @Input() public catering: FormControl;\n /** Selected datetime for the booking */\n @Input() public date: number;\n /** */\n @Input() public space_list: Space[];\n /** Whether booking is all day */\n @Input() public all_day: boolean;\n /** Whether booking is all day */\n @Input() public next_disabled: boolean;\n /** Emitter for flow update events */\n @Output() public event = new EventEmitter();\n /** Emiiter for order events */\n @Output() public order = new EventEmitter();\n /**\n * placeIntoModal: Input decorator indecate as a flag to adapt component design into a dialog modal \n * (by hiding header and adjusting height so that fit into a modal)\n */\n @Input() public placeIntoModal: boolean = false;\n \n public delete: boolean = false;\n\n /** List of orders in the booking */\n public get orders(): CateringOrder[] {\n /* istanbul ignore else */\n if (!this.catering) {\n return [];\n }\n let orders = [];\n const date_ = new DateTZ({date: this.date})\n this.catering.value.forEach(\n order => {\n const newOrder = order;\n newOrder.booking_date = this.all_day\n ? date_.startOfValue('day').ms\n : this.date;\n orders.push(newOrder);\n }\n \n );\n return orders;\n }\n\n /** Emit event for a new catering order */\n public newOrder() {\n this.order.emit();\n }\n\n /** Emit event for editing existing order */\n public editOrder(order: CateringOrder) {\n this.order.emit(order);\n }\n\n /** Remove order from the list */\n public deleteOrder(order: CateringOrder) {\n const orders = this.orders;\n const index = orders.findIndex(an_order => order.id === an_order.id);\n /* istanbul ignore else */\n if (index >= 0) {\n orders.splice(index, 1);\n this.catering.setValue(orders);\n this.delete = true;\n }\n }\n\n /**\n * Proceed to the next step in the space booking flow\n */\n public next(): void {\n // Open the confirmation modal\n this.event.emit({ type: 'next', step: 'catering' });\n }\n\n /** Move flow to previous step */\n public previous(): void {\n this.event.emit({ type: 'previous', step: 'catering' });\n }\n}\n","
\n
\n

Catering Orders

\n
\n
\n \n
\n \n
\n \n
\n
\n
\n
\n \n Back\n \n \n Next\n \n
\n
\n
\n\n
\n
\n \n
\n
No catering orders
\n \n
\n
\n","import {\n Component,\n Input,\n} from '@angular/core';\nimport {\n BaseDirective,\n} from '@mckinsey-converge/base';\nimport {\n Booking,\n} from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'catering-order-table',\n template: `\n
\n \n \n \n \n \n \n \n \n \n \n \n
\n Delivery\n Charge CodeOrder
\n {{formatDeliveryTime(order)}}\n \n {{order?.charge_code}} \n \n {{listItems(order)}}\n
\n
\n `,\n styleUrls: ['./order-table.component.scss']\n})\nexport class OrderTableComponent extends BaseDirective {\n /** The theme to use **/\n @Input() public booking: Booking;\n\n public listItems(order) {\n return order.items.map(i => `${i.name}${i.amount > 1 ? ` (${i.amount})` : ''}`).join(', ');\n }\n\n public formatDeliveryTime(order) {\n return this.booking.startDateTz.addValue({ minutes: order?.delivery_time }).formatDate('h:mma').toLocaleLowerCase();\n }\n\n public oddEvenClass(x) {\n return x % 2 === 0 ? 'odd' : 'even';\n }\n}\n","import {\n Component,\n Directive,\n ElementRef,\n HostListener,\n Input,\n OnInit\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { TopBarHeaderMode } from 'src/app/components/topbar-header/topbar-header.component';\nimport {\n select,\n Store\n} from '@ngrx/store';\nimport {\n BaseDirective,\n} from '@mckinsey-converge/base';\nimport {\n User,\n Booking,\n Building,\n BuildingCity,\n flattenDisplayOffices,\n selectCancelledBookingsResultsFromState,\n selectUpcomingBookingsResultsFromState,\n selectPastBookingsResultsFromState,\n selectBookingByIdResultsFromState,\n UsersService,\n} from '@mckinsey-converge/data-common';\nimport {\n clearBookingByIdResults,\n} from '@mckinsey-converge/bookings';\nimport {\n BehaviorSubject,\n} from 'rxjs';\nimport {\n distinctUntilChanged,\n first,\n map,\n take,\n} from 'rxjs/operators';\nimport { loadBookingsWithQuery } from '@mckinsey-converge/bookings';\nimport { loadOrganisations } from '@mckinsey-converge/organisation';\nimport {\n SelectOption\n} from '@mckinsey-converge/ui';\nimport {\n buildingStateSelector,\n selectBuildingOptionsGroupedByCity\n} from '@mckinsey-converge/buildings';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { BookingDetailsModalComponent } from '../booking-details-modal/booking-details-modal.component';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport { RoomBookingStoreState } from '../room-booking/room-booking.component';\nimport { MatTabChangeEvent } from '@angular/material/tabs';\nimport { SearchBarConfig } from 'libs/legacy-ui/src/lib/cng-search-bar/cng-search-bar.component';\n\n\n@Component({\n selector: 'app-manage-bookings',\n template: `\n
\n
 
\n
\n \n
\n
\n
\n
\n

Manage Bookings

\n\n
\n \n \n
\n \n
\n \n
\n\n\n \n \n
\n \n \n \n
\n
\n\n
\n
\n
\n
\n `,\n styleUrls: ['./manage-bookings.component.scss']\n})\nexport class ManageBookingsComponent extends BaseDirective implements OnInit {\n public TopBarHeaderMode = TopBarHeaderMode;\n public buildings = new BehaviorSubject[]>([]);\n public bookingTypes = [\n {\n type: 'upcoming',\n display: 'Upcoming',\n selector: selectUpcomingBookingsResultsFromState\n },\n {\n type: 'past',\n display: 'Past',\n selector: selectPastBookingsResultsFromState\n },\n {\n type: 'cancelled',\n display: 'Cancelled',\n reverse_sort: true,\n selector: selectCancelledBookingsResultsFromState\n },\n ];\n\n /** Current User */\n public currentUser: User;\n public dialogRef: MatDialogRef;\n public modalInitialized = false;\n public hasLoaderUrl = true;\n\n public activeTab = 'upcoming';\n\n /**\n * Configs for delegate dropdown\n */\n /* if user has no delegates, hide the dropdown */\n public has_delegate: boolean = false; \n /* Holds list of all host/delegates */\n public host_list: User[];\n public hostOptions: { display: string; value: string; meta: { user: User; }; }[];\n public delegateDD: { ddBoxClass: string; options: any; defaultSelected: any; onChangeCallback: any; ddOptionBoxWidth: string };\n public selectedHost: string = '';\n\n public searchBookingBy: any = '';\n\n\n searchBarConfig: SearchBarConfig = {\n placeholder: 'Search by title, room name, attendees...',\n totalFoundItem: 0,\n showSrchWarning: false\n };\n\n constructor(\n private dialog: MatDialog,\n private store: Store,\n private route: ActivatedRoute,\n private _router: Router,\n private _users: UsersService,\n ) {\n super();\n }\n\n public ngOnInit(): void {\n\n // Get the router params\n const bookingId = this.route.snapshot.paramMap.get('id');\n const verb = this.route.snapshot.paramMap.get('verb');\n // Load the buildings data\n this.store.dispatch(loadOrganisations.request());\n this.route.data.subscribe(initData => {\n // Determine if the cancel or booking submodal is loading\n const cancel = verb === 'cancel';\n const addCatering = initData.hasCatering;\n /**\n * When using the catering or cancel URLs,\n * Users reported the modals loading after one another was\n * jarring so, so the UI is masked out until the modal is loaded.\n */\n this.hasLoaderUrl = addCatering || cancel;\n\n this.subscription('buildings', this.store.pipe(\n select(buildingStateSelector),\n select(selectBuildingOptionsGroupedByCity),\n map((grouped: Map) => {\n return flattenDisplayOffices(grouped);\n }),\n distinctUntilChanged()\n ).subscribe(next => {\n this.buildings.next(next);\n if (bookingId && !this.modalInitialized) {\n this.store.dispatch(clearBookingByIdResults())\n this.modalInitialized = true;\n // Once the data loads viewBooking\n this.subscription('bookingResults', this.store.pipe(\n select(selectBookingByIdResultsFromState)\n ).subscribe(next => {\n const booking = next.success ? next.success?.[0] : null;\n if (booking && booking.room) {\n // Modal Madness, close the existing booking details modals.\n if (this.dialogRef) {\n this.dialogRef.close();\n }\n if (this.dialog) {\n this.dialog.closeAll();\n }\n // Call viewBookingFromEmailLink with cancel = true to trigger the cancel modal\n // Call viewBookingFromEmailLink with addCatering = true to trigger the add Catering modal\n this.viewBookingFromEmailLink(booking, cancel, addCatering);\n\n // Remove the \"loader\" url from view\n this.timeout('rewrite url',() => {\n this._router.navigate(['/home','manage'], { replaceUrl: true });\n })\n }\n }));\n }\n }));\n\n })\n\n this.subscription('currentUser', this.store.select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n if (bookingId) {\n // If there's a booking ID loadBookingById\n this.store.dispatch(loadBookingsWithQuery({ 'id': bookingId, 'email': this.currentUser.email, 'target': 'bookingById', 'offset': 0 }));\n }\n }));\n\n\n this._users.initialised.pipe(first((_) => _)).subscribe(() => {\n const user: User = this._users.current;\n\n const delegates = user.delegates.map((del) => {\n const ifUser = this._users.find(del.email);\n return ifUser ? \n new User({ email: ifUser.email, name: ifUser.name, opt_out: del.opt_out }) : \n new User({ email: del.email, name: del.email.split('@')[0].split('_').map((s) => s.charAt(0).toUpperCase() + s.substring(1))\n .join(' ')\n , opt_out: del.opt_out });\n });\n\n if (delegates.length) {\n this.has_delegate = true;\n\n this.host_list = [user].concat(delegates);\n const options = this.host_list.map(h => ({ display: h.name, value: h.email, meta: { user: h } }))\n \n this.hostOptions = [{ display: 'All', value: '', meta: { user: null } }].concat(options);\n this.selectedHost = this.hostOptions[0].value;\n this.delegateDD = {\n ddBoxClass: '',\n options: this.hostOptions,\n defaultSelected: this.hostOptions[0],\n onChangeCallback: this.onChangeDelegates.bind(this),\n ddOptionBoxWidth: '200px'\n }\n }\n \n });\n }\n\n public onChangeDelegates(del) {\n this.selectedHost = del.value;\n }\n\n public getBuilding(booking: Booking) {\n if (this.buildings && booking.building_zone) {\n return this.buildings.value.find(b => booking.building_zone === b.value)?.meta.building;\n }\n return null;\n }\n\n // Only fires from an email link\n public viewBookingFromEmailLink(booking: Booking, cancel: boolean = false, addCatering: boolean = false) {\n if (this.modalInitialized && this.dialogRef) {\n this.dialogRef.close();\n this.dialogRef = null;\n }\n // R--- Verify the email links are working.\n // Open the booking details modal\n if (!this.dialogRef && booking.room) {\n this.dialogRef = this.dialog.open(BookingDetailsModalComponent, {\n panelClass: 'mck-modal-wide-manage-booking',\n data: {\n booking,\n building: this.getBuilding(booking),\n cancel,\n addCatering,\n hasLoaderUrl: this.hasLoaderUrl,\n refresh: () => null\n },\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n // Close up the loader panel\n setTimeout(() => {\n this.hasLoaderUrl = false;\n }, 1000);\n }\n }\n\n public clearPage(event : MatTabChangeEvent) {\n this.activeTab = this.bookingTypes[event.index].type;\n this._router.navigate([], { relativeTo: this.route, queryParams: { page: 1 } });\n }\n\n\n searchBooking(value) {\n this.searchBookingBy = value;\n }\n\n}\n","import {\n Booking\n} from '@mckinsey-converge/data-common';\n\n\nexport class BookingResultsViewModel {\n constructor(public booking: Booking) {\n }\n}\n\n/**\n * For each result from results, we find its level and building from the lists.\n */\nexport const mapResultsToViewModels = (results: Booking[]): BookingResultsViewModel[] => {\n if (!results || !results[0]?.space) {\n return [];\n }\n return results.map((booking: Booking) => {\n return new BookingResultsViewModel(\n booking,\n );\n }); \n}\n\n","import { Component, Inject, OnInit, ViewEncapsulation, ElementRef, Input, ViewChild, ChangeDetectorRef } from '@angular/core';\nimport {\n Space,\n RoomResultsViewModel,\n BookingStoreState,\n User,\n Booking,\n BookingFormData,\n BOOKING_STATUS,\n checkCollisions,\n SpacesService,\n BookingsService,\n BookingStateService,\n clearBookingFormData,\n ApplicationService,\n selectFilteredByIdResults,\n FilteredSpaces,\n selectActiveForm,\n roomFormDataToQuery,\n storeBookingFormData,\n getNextFreeBookingSlot,\n} from '@mckinsey-converge/data-common';\nimport { MAP_OVERLAY_DATA } from '@acaprojects/ngx-interactive-map';\nimport { DateTime } from 'luxon';\nimport { Point, BaseDirective, closestToTimeSlot, HashMap, closestToTimeSlotTz } from '@mckinsey-converge/base';\nimport { BehaviorSubject, Observable, interval, timer, of } from 'rxjs';\nimport { CENTER_POINT, MIN_ZOOM_LEVEL } from 'src/app/map/map.utils';\nimport { Store, select } from '@ngrx/store';\nimport { RoomStoreState, loadByIdResults, loadRoomsForResults } from '@mckinsey-converge/rooms';\nimport { BuildingStoreState } from '@mckinsey-converge/buildings';\nimport { UserStoreState } from '@mckinsey-converge/user';\nexport type RoomResultsState = BookingStoreState &\n RoomStoreState &\n BuildingStoreState &\n UserStoreState;\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport { delay, map, take } from 'rxjs/operators';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\n// import { WAITING_TIME } from '../floor-map.utils'; // commented and re declare below due to circular dependency overlay > util > overlay\n\nexport const WAITING_TIME = 15;\n\ninterface SpaceWithReturnData extends Space {\n // callback?: Function,\n room?: RoomResultsViewModel;\n parentComponent?: any;\n roomObs?: Observable\n}\n\ninterface InProgressRoomBookingTimeInfo {\n\tcurrentStatus: string,\n\tactiveBookings: Booking[],\n\ttimeUntilNextBooking: number,\n\ttimeRemainingInActiveBooking : number,\n}\n/**\n * Replaces the built-in {@link MapPinComponent} based on design.\n */\n@Component({\n selector: 'foor-map-overlay',\n template: `\n
\n
\n\n
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n \t\n
\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tThis room is available\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tRoom {{ data.simple_name || data.name || '' }} is available for booking\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tBook now for:\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tUntil next booking\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t Available if you book in the next {{minutesRemaining}}:{{secondsRemaining}} minutes\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\tRefresing availability ...\n\t\t\t\t\t\t\t
\n \t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\tThis room is booked\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t Apologies, this room has been booked recently by another user, please try another one. \n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n
\n
\n
\n `,\n styleUrls: ['./floor-map-overlay.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n})\nexport class FloorMapOverlayComponent extends BaseDirective implements OnInit {\n public selectedRoomId = this.data.id;\n\n public zoom = new BehaviorSubject(MIN_ZOOM_LEVEL);\n public center = new BehaviorSubject(CENTER_POINT);\n\n public date = DateTime.now().valueOf();\n /** Current User */\n public currentUser: User;\n\n public availableUntil = parseInt(this.data?.settings?.available_until.toString()) * 1000;\n public diff: any;\n\n public latestBooking: any[];\n public latestBookingStartTime: string;\n public diffInHours: number;\n public diffInMinutes: number;\n public booking: Booking = new Booking({});\n public loading: boolean;\n public bookingData = new BehaviorSubject(undefined);\n public confirmed: boolean = false;\n /** Whether booking has succeeded */\n public success: boolean;\n public diffInMs: number;\n public futureBookingsForTheDay: HashMap[];\n public untilNextBookingFlag: boolean = false;\n public start_epoch: any;\n public end_epoch_15: any;\n public end_epoch_30: any;\n\n public userSelectedRoom: RoomResultsViewModel;\n\n // @ViewChild('time', { static: false }) public time: ElementRef;\n public isTimerActive: boolean = true;\n minutesRemaining: number | string;\n secondsRemaining: number | string;\n isAvailable: boolean = true;\n intervalCall_15: any;\n intervalCall_1: any ;\n\t\ttimerIndex = 0;\n\t\tpublic currentMin;\n\n constructor(\n @Inject(MAP_OVERLAY_DATA) public data: SpaceWithReturnData,\n private elementRef: ElementRef,\n public store: Store,\n public _spaces: SpacesService,\n public _bookings_service: BookingsService,\n public _booking_state_service: BookingStateService,\n public _service: ApplicationService,\n // public cdRef: ChangeDetectorRef,\n ) {\n super();\n }\n\n public updateRoomData(space) {\n\n\t\t\t\t\t\t// get all booking of selected room\n this.fetchRoomWithBookings(false);\n\n\t\t\t\t\t\t// subscrip selected room detail with all bookings for the day\n this.subscription(\n 'bookingSpaceResults',\n this.store.pipe(select(selectFilteredByIdResults)).subscribe((next) => {\n if (next.success.spaces) {\n\n space.space = next.success.spaces[0];\n this.userSelectedRoom = space;\n\n this.isTimerActive = true;\n\n this.availableUntil = parseInt(this.userSelectedRoom.space.settings.available_until.toString()) * 1000;\n\n\t\t\t\t\t\t\t\t\t\t\t\t//Retrive and calculate reamining time related information for the selected room and its upcomming bookings\n\t\t\t\t\t\t\t\t\t\t\t\tconst {currentStatus, activeBookings, timeRemainingInActiveBooking, timeUntilNextBooking} = this.calculateRoomBookingTimeInfo();\n\t\t\t\t\t\t\t\t\t\t\t\tthis.diff = timeUntilNextBooking\n // inform user if space has been booked by other\n if( currentStatus !== 'available') {\n if(activeBookings.length && timeRemainingInActiveBooking < 15 && timeUntilNextBooking >= 15 ) {\n this.setupTimer();\n // this.isAvailable = true;\n //update up start and end epoch times for a booking button options\n this.updateSchedulingEpochs();\n } else {\n this.isAvailable = false;\n this.intervalCall_1?.unsubscribe();\n clearInterval(this.intervalCall_15);\n }\n\n }else {\n this.setupTimer();\n // this.isAvailable = true;\n //update up start and end epoch times for a booking button options\n this.updateSchedulingEpochs();\n }\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Determine available time until next booking start time\n this.determineNextBookingStartTime();\n }\n })\n );\n\n }\n\n\t\t/**\n\t\t * Retrive and calculate reamining time related information for the selected room and its upcomming bookings\n\t\t * @returns\n\t\t */\n\t\tpublic calculateRoomBookingTimeInfo(): InProgressRoomBookingTimeInfo {\n\n\t\t\tconst now: any = DateNow(new Date()); // current date time\n\n\t\t\t// Retirive a list of bookings and map them to booking objects\n\t\t\tconst bookings = this.userSelectedRoom.space.settings.bookings.map(b => new Booking(b));\n\n\t\t\t// Filter active/in-progress bookings based on the current time\n\t\t\tconst activeBookings = bookings.filter(booking =>\n\t\t\t\t\t\tnow.isAfterDate(booking.startDateTz.startOfValue('second')) &&\n\t\t\t\t\t\tnow.isBeforeDate(booking.endDateTz.startOfValue('second') )\n\t\t\t);\n\n\t\t\t// Retrive the status of the selected room from parent component data\n\t\t\tconst currentStatus = this.data.parentComponent.roomStatus.statusMap[this.selectedRoomId]; // \" 'available' / 'in-use'\"\"\n\n\t\t\t// Initialize the variable to track time-related information\n\t\t\tlet timeRemainingInActiveBooking = 0; // The remaining time in the active booking in milliseconds\n\t\t\tlet timeUntilNextBooking = 30; // Time until the start of the next booking minutes\n\n\t\t\t// Check if ther are active bookings (room is 'in-use')\n\t\t\tif(activeBookings.length) {\n\t\t\t\tconst nowTime: any = DateTime.now()\n\t\t\t\t// Calculate the time remaining in the active booking in minutes\n\t\t\t\ttimeRemainingInActiveBooking = Math.abs(Math.round((activeBookings[0].end_epoch * 1000 - nowTime.ts) / 60000));\n\n\t\t\t\t// Determine if an extra minute should be added based on the current minute's remainder when devided by WAITING_TIME\n\t\t\t\tconst addMin = DateTime.now().get('minute') % WAITING_TIME === 0 ? 1 : 0;\n\n\t\t\t\t// calculate the start time of the next booking in the same time slot\n\t\t\t\tconst nextBookingStartTime: any = closestToTimeSlot(DateTime.now().plus({ minutes: addMin, seconds:0 }).setZone(this.userSelectedRoom?.building?.timezone), WAITING_TIME);\n\n\t\t\t\t// Filter futute booking for the day to find the next booking\n\t\t\t\tconst futureBookingsForTheDay = this.userSelectedRoom.space?.settings?.bookings.filter((item) =>\n\t\t\t\t\titem.start_epoch * 1000 >= nextBookingStartTime.ts\n\t\t\t\t);\n\n\t\t\t\t// Check if there is an futute booking for the day\n\t\t\t\tif(futureBookingsForTheDay.length) {\n\t\t\t\t\t// calculate the time until start of the next booking in minutes\n\t\t\t\t\tconst nextBookingStartTimeMs = futureBookingsForTheDay[0].start_epoch * 1000;\n\t\t\t\t\ttimeUntilNextBooking = Math.floor((nextBookingStartTimeMs - nowTime.ts) / (1000 * 60));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t\t\t\tcurrentStatus: currentStatus,\n\t\t\t\t\t\t\tactiveBookings: activeBookings,\n\t\t\t\t\t\t\ttimeUntilNextBooking: timeUntilNextBooking,\n\t\t\t\t\t\t\ttimeRemainingInActiveBooking : timeRemainingInActiveBooking,\n\t\t\t\t\t\t};\n\n\t\t}\n\n public setup15MinTimer() {\n //interval for 15 min\n !this.timerIndex && setTimeout(()=>this.setUpTime(), 1100 ) ;\n this.timerIndex++\n this.intervalCall_15 = window.setInterval(\n () => { this.intervalCall_1?.unsubscribe(); setTimeout(()=>this.setUpTime(), 1100 ) }\n , ( 1000 * 60 * WAITING_TIME ) );\n\n\n }\n\n public setUpTime() {\n // console.log(DateTime.now().setZone(this.userSelectedRoom?.building?.timezone).get('minute'));\n // console.log(DateTime.now().setZone(this.userSelectedRoom?.building?.timezone).get('minute') % WAITING_TIME)\n // console.log(DateTime.now().setZone(this.userSelectedRoom?.building?.timezone).get('second'))\n const addMin = DateTime.now().get('minute') % WAITING_TIME === 0 ? 1 : 0 ;\n const addSeconds = 60 - DateTime.now().get('second');\n let start:any = closestToTimeSlot(DateTime.now().plus({ minutes: addMin, seconds:0 }).setZone(this.userSelectedRoom?.building?.timezone), WAITING_TIME);\n start = start.toLocaleString(DateTime.TIME_SIMPLE);\n if(start !== this.start_epoch ) {\n\n this.start_epoch = start;\n\n // this.availableUntil = parseInt(this.userSelectedRoom.space.settings.available_until.toString()) * 1000;\n // const currentTime = new Date(DateTime.now().valueOf());\n // const endTime = new Date(this.availableUntil);\n // this.diff = Math.abs(Math.round((endTime.getTime() - currentTime.getTime()) / 60000));\n\n const addMin = DateTime.now().get('minute') % WAITING_TIME === 0 ? 1 : 0 ;\n const addSeconds = 60 - DateTime.now().get('second');\n this.startTimer(addMin);\n\n }\n\n\t\t\t\t\t\t//update up start and end epoch times for a booking button options\n\t\t\t\t\t\tthis.updateSchedulingEpochs()\n\n // let end_15: any = closestToTimeSlot(DateTime.now().plus({ minutes: addMin, seconds:0 }).setZone(this.userSelectedRoom?.building?.timezone), WAITING_TIME).plus({ minutes: 15 });\n // end_15 = end_15.toLocaleString(DateTime.TIME_SIMPLE);\n // if(end_15 !== this.end_epoch_15) {\n // this.end_epoch_15 = end_15\n // }\n\n // let end_30: any = closestToTimeSlot(DateTime.now().plus({ minutes: addMin, seconds:0 }).setZone(this.userSelectedRoom?.building?.timezone), WAITING_TIME).plus({ minutes: 30 });\n // end_30 = end_30.toLocaleString(DateTime.TIME_SIMPLE);\n // if(end_30 !== this.end_epoch_30) {\n // this.end_epoch_30 = end_30;\n // }\n }\n\n public ngOnInit(): void {\n this.fetchRoomWithBookings(false);\n\n this.data.parentComponent.childCallback = this.updateRoomData.bind(this);\n this.userSelectedRoom = this.data?.room;\n\t\t\t\tthis.updateSchedulingEpochs();\n this.updateRoomData(this.userSelectedRoom);\n\t\t\t\t// Determine available time until next booking start time\n // this.determineNextBookingStartTime();\n\n this.subscription(\n 'currentUser',\n this.store\n .select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n })\n );\n\n //update up start and end epoch times for a booking button options\n // this.updateSchedulingEpochs();\n this.data.parentComponent.isOverlayOpened = true;\n }\n\n /**\n * This function sets up start and end epoch times for a booking scheduling system.\n * It calculates and assigns various epoch times based on the current time,\n * available until time, and user-selected room's timezone.\n */\n public updateSchedulingEpochs() {\n\n\t\t\tconst now: any = DateTime.now();\n\n\t\t\t// Calculate the time difference in minutes between current and available until time\n\t\t\tconst {currentStatus, activeBookings, timeRemainingInActiveBooking, timeUntilNextBooking} = this.calculateRoomBookingTimeInfo();\n\t\t\t// this.diff = Math.abs(Math.round((this.availableUntil - now.ts) / 60000)); // recheck\n\t\t\tthis.diff = timeUntilNextBooking;\n\n\t\t\t// Determine system availability based on time difference\n\t\t\tthis.isAvailable = timeRemainingInActiveBooking < 15 && timeUntilNextBooking >= 15 // this.diff >= 15;\n\n\t\t\t// Calculate the next time slot for scheduling\n\t\t\tconst addMin = now.get('minute') % WAITING_TIME === 0 ? 1 : 0;\n\t\t\tconst adjustedTime = now.plus({ minutes: addMin, seconds: 0 }).setZone(this.userSelectedRoom?.building?.timezone);\n\n\t\t\t// Calculate and assign the start and end epoch times with 15 and 30-minute intervals\n\t\t\tconst timeSlot = closestToTimeSlot(adjustedTime, WAITING_TIME);\n\t\t\tthis.start_epoch = timeSlot.toLocaleString(DateTime.TIME_SIMPLE);\n\t\t\tthis.end_epoch_15 = timeSlot.plus({ minutes: 15 }).toLocaleString(DateTime.TIME_SIMPLE);\n\t\t\tthis.end_epoch_30 = timeSlot.plus({ minutes: 30 }).toLocaleString(DateTime.TIME_SIMPLE);\n }\n\n ngAfterViewInit() {\n this.setupTimer();\n }\n\n public setupTimer() {\n console.log(DateTime.now().get('second'))\n const addMin = DateTime.now().setZone(this.userSelectedRoom?.building?.timezone).get('minute') % WAITING_TIME === 0 ? 1 : 0 ;\n const addSeconds = 60 - DateTime.now().get('second');\n this.startTimer(addMin);\n }\n\n\n // countdown timer for coachmark\n public startTimer(display = 0, addSeconds = 0) {\n\n // const currentTime = new Date(DateTime.now().valueOf());\n // const endTime = new Date(closestToTimeSlot(DateTime.now().plus({minutes: display, seconds: addSeconds}).setZone(this.userSelectedRoom?.building?.timezone), WAITING_TIME).valueOf());\n // const availableTimeToBook = Math.abs((endTime.getTime() - currentTime.getTime()) / 60000)* 60;\n // let timer = availableTimeToBook; //(this.diff -35) * 60;\n // let minutes;\n // let seconds;\n let timer = 0 ;\n if(timer >= 0){\n this.intervalCall_1 = interval(1000).subscribe(x => {\n\n const currentTime = new Date(DateTime.now().valueOf());\n const endTime = new Date(closestToTimeSlot(DateTime.now().plus({minutes: display, seconds: addSeconds}).setZone(this.userSelectedRoom?.building?.timezone), WAITING_TIME).valueOf());\n const availableTimeToBook = Math.abs((endTime.getTime() - currentTime.getTime()) / 60000)* 60;\n let timer = availableTimeToBook; //(this.diff -35) * 60;\n\n this.isTimerActive = true;\n this.minutesRemaining = Math.floor(timer / 60);\n this.secondsRemaining = Math.floor(timer % 60);\n\n this.minutesRemaining = this.minutesRemaining < 10 ? \"0\" + this.minutesRemaining : this.minutesRemaining;\n this.secondsRemaining = this.secondsRemaining < 10 ? \"0\" + this.secondsRemaining : this.secondsRemaining;\n\n --timer;\n\n if (timer <= 0) {\n timer = 0\n this.intervalCall_1?.unsubscribe();\n // clearInterval(this.intervalCall_1);\n this.isTimerActive = false;\n !this.timerIndex && this.setup15MinTimer();\n\n\t\t\t\t\t\t\t\t\t\tthis.store.select(selectActiveForm).pipe(take(1))\n\t\t\t\t\t\t\t\t\t\t\t.subscribe((form) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst addMin = DateTime.now().setZone(this.userSelectedRoom?.building?.timezone).get('minute') % WAITING_TIME === 0 ? 1 : 0 ;\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst addSeconds = 60 - DateTime.now().setZone(this.userSelectedRoom?.building?.timezone).get('second');\n\t\t\t\t\t\t\t\t\t\t\t\t\tform['date'] = closestToTimeSlot(DateTime.now().setZone(this.userSelectedRoom?.building?.timezone).plus({ minutes: addMin, seconds:0 }), WAITING_TIME).valueOf(),\n\t\t\t\t\t\t\t\t\t\t\t\t\tform.dateTz = closestToTimeSlotTz(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tnew DateTZ({ date: DateTime.now().plus({ minutes: addMin, seconds:0 }), is_local_tz: false, building_tz: form.timezone }),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tWAITING_TIME\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.store.dispatch(storeBookingFormData({ payload: form }));\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.store.dispatch(loadRoomsForResults.request(roomFormDataToQuery(form)));\n\n\t\t\t\t\t\t\t\t\t\t\t});\n\n }\n }) //, 1000, endTime)\n }\n }\n\n\t\t/**\n\t\t * This function updates information related to the lates booking in the selected room\n\t\t */\n public determineNextBookingStartTime() {\n\n\t\t\t\t// Get the current time using DateTime library\n const now = DateTime.now();\n\n\t\t\t\t// Determine if an extra minute should be added based on the current minute's remainder when devided by WAITING_TIME\n const addMin = now.get('minute') % WAITING_TIME === 0 ? 1 : 0;\n\n\t\t\t\t// Adjust the current time by adding the calculated minutes adna setting the timezone based on the selected room's building\n const addjustedTime: any = closestToTimeSlot(\n now.plus({ minutes: addMin, seconds:0 })\n .setZone(this.userSelectedRoom?.building?.timezone), WAITING_TIME\n );\n\n\t\t\t\t\t\t// Check if room is selected and has bookings settings\n if (this.userSelectedRoom?.space) {\n\t\t\t\t\t// Returive the list of future bookings or initializem it as an empaty array\n const futureBookings = this.userSelectedRoom?.space?.settings?.bookings || [];\n\n\t\t\t\t\t\t// Calculate the end time for a 30-minute interval from the addjested time\n const endEpoch30 = addjustedTime.plus({ minutes: 30 }).ts;\n\n\t\t\t\t\t\t// Filter future booking that start after end_epoch_30\n\t\t\t\t\t\tconst futureBookingsForTheDay = futureBookings.filter(item => item.start_epoch * 1000 >= endEpoch30);\n\n\t\t\t\t\t\t// Check if there are futute bookings found\n\t\t\t\t\t\tif(futureBookingsForTheDay.length > 0) {\n\t\t\t\t\t\t\t//Extract the start time of latest booking\n\t\t\t\t\t\t\tconst latestBookingStartTime = new Date(futureBookingsForTheDay[0].start_epoch * 1000);\n\n\t\t\t\t\t\t\t// Calculate the time difference between the latest booking start time and the current time in milliseconds\n\t\t\t\t\t\t\tconst timeDiffMs = latestBookingStartTime.getTime() - now.valueOf();\n\t\t\t\t\t\t\tthis.diffInMs = timeDiffMs;\n\t\t\t\t\t\t\t// Calculate the timne differenc in hours and minutes\n\t\t\t\t\t\t\tthis.diffInHours = Math.floor(timeDiffMs / (1000 * 60 * 60));\n \tthis.diffInMinutes = Math.floor((timeDiffMs % (1000 * 60 * 60)) / (1000 * 60));\n\n\t\t\t\t\t\t\t// Set flag to indicate the wether the difference is NaN (no future booking)\n \tthis.untilNextBookingFlag = !isNaN(timeDiffMs);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis.untilNextBookingFlag = false;\n\t\t\t\t\t\t}\n }\n\n }\n\n //fetch all the bookings for selected room for the day to the store\n public fetchRoomWithBookings(allWeek: boolean = true) {\n const day = 24 * 60;\n const week = day * 7;\n const date = (this.booking?.startDateTz).clone();\n const startOfDay = date.startOfValue('day').setValue({ second: 0, millisecond: 0 });\n const startOfWeek = date.startOfValue('week');\n\n // Query for the entire day for this room\n const query = {\n dateTz: allWeek ? startOfWeek : startOfDay,\n duration: allWeek ? week : day,\n locations: this.data?.id,\n capacity: this.booking?.space?.capacity,\n };\n this.store.dispatch(loadByIdResults.request(query));\n }\n\n public closeModal() {\n const modal = this.elementRef.nativeElement.querySelector('.map-overlay-container');\n modal.classList.add('hide');\n this.data.parentComponent.isOverlayOpened = false;\n this.timerIndex = 0;\n this.isAvailable = false;\n\t\t\t\tthis.untilNextBookingFlag = false;\n this.intervalCall_1?.unsubscribe();\n // clearInterval(this.intervalCall_1);\n // this.intervalCall_15?.unsubscribe();\n clearInterval(this.intervalCall_15);\n }\n\n public roomDataCallback() {\n if (this.data.parentComponent.roomSelected && this.userSelectedRoom) {\n this.data.parentComponent.roomSelected(this.userSelectedRoom);\n }\n }\n\n public onBook(minutes: number) {\n minutes = Math.round(minutes);\n const {filters, settings} = this.userSelectedRoom.space;\n if ( (filters && filters?.equipment_code ) || (settings && settings?.equipment_code) ) {\n this.roomDataCallback();\n } else {\n this.saveChanges(minutes);\n }\n }\n\n public bookingFormToBooking(minutes): Booking {\n const booking_form_data = this.bookingData.value;\n const has_note_buffer =\n booking_form_data?.notes && booking_form_data.notes?.length\n ? { [booking_form_data.selectedRoom.space.email]: 900 }\n : {}; // 900 seconds = 15 min\n const attendees = this.booking.attendees;\n const company = this.booking.company;\n const start_epoch = closestToTimeSlot(DateTime.now(), 15).valueOf() / 1000;\n const end_epoch =\n closestToTimeSlot(DateTime.now(), 15).plus({ minutes: minutes }).valueOf() / 1000;\n\n const raw_data = {\n space: { id: this.selectedRoomId },\n all_day: false,\n attendees,\n // booking_type: booking_form_data?.bookingType.value,\n booking_type: this.userSelectedRoom.space.filters.external === true? \"External\" : \"Internal\",\n catering: [],\n start_epoch,\n end_epoch,\n timezone: booking_form_data?.timezone,\n equipment_codes: {\n [booking_form_data?.selectedRoom.space.email]: booking_form_data?.code,\n },\n expected_attendees: {\n [this.data.email]: 1,\n },\n has_catering: false,\n needs_space: false,\n notes: this.booking.notes,\n organiser: this.currentUser,\n creator: this.currentUser,\n room: this.userSelectedRoom.space,\n title: 'Ad hoc meeting',\n setup: has_note_buffer,\n breakdown: has_note_buffer,\n company,\n };\n console.log(new Booking(raw_data));\n return new Booking(raw_data);\n }\n\n //function for sending final booking request\n public saveChanges(minutes) {\n this.loading = true;\n this.booking = this.bookingFormToBooking(minutes);\n // const booking_form_data = this.bookingData.value;\n this.booking.status = BOOKING_STATUS.approved;\n checkCollisions(this._spaces, this.booking).then(\n (bookable: boolean) => {\n if (!bookable) {\n // TODO - Refactor for https://acaprojects.atlassian.net/browse/MCK-1498\n // API is retuning bookings ouside of requested time range\n // TODO check booking date and times for conflict manually\n this.booking.status = BOOKING_STATUS.unavailable;\n return;\n }\n\n this._bookings_service.save(this.booking).then(\n (bkn) => {\n this.loading = false;\n this.success = true;\n this.confirmed = true;\n this._booking_state_service.replace(bkn);\n\n // When saved, the returned booking has a null room.\n // Correct this so the rest of the code doesn't flake out.\n this.booking = new Booking({ ...bkn.toJSON(), room: this.booking.room });\n // Clear the current booking form\n this.store.dispatch(clearBookingFormData());\n\n // Heap track event\n this._service.analytics.track('create', {\n booking_id: bkn.id,\n office: this.booking.room.building.name,\n room: this.booking.local_room_name,\n start_time: bkn.startDateTz.ms,\n end_time: bkn.endDateTz.ms,\n catering: !!bkn.catering.length,\n headcount: 1,\n });\n this.data.parentComponent.confirmBooking(this.booking);\n },\n (err) => {\n this.loading = false;\n this.confirmed = false;\n if (err.status === 409) {\n // Unavailable Confirmation\n this.booking.status = BOOKING_STATUS.unavailable;\n this._booking_state_service.replace(this.booking);\n this.confirmed = true;\n this.success = false;\n } else {\n console.log(err);\n }\n }\n );\n },\n (err) => {\n // Unavailable Confirmation\n this.loading = false;\n this.timeout(\n 'error',\n () => {\n this.booking.status = BOOKING_STATUS.unavailable;\n this._booking_state_service.replace(this.booking);\n this.confirmed = true;\n this.success = false;\n },\n 500\n );\n }\n );\n }\n}\n","import { SelectOption } from '@mckinsey-converge/ui';\nimport {\n Space,\n SpaceStatus,\n RoomResultsViewModel,\n MapListener\n} from '@mckinsey-converge/data-common';\nimport {\n HashMap,\n Point\n} from '@mckinsey-converge/base';\nimport { MapFeature } from '@acaprojects/ngx-interactive-map/lib/helpers/map.interfaces';\nimport { FloorMapOverlayComponent } from './floor-map-overlay/floor-map-overlay.component';\n\nexport const MIN_ZOOM_LEVEL = 1;\nexport const MAX_ZOOM_LEVEL = 10;\nexport const CENTER_POINT: Point = { x: 0.5, y: 0.5 };\n\nexport const WAITING_TIME = 15;\n\nconst mapSpaceStatusToDisplay = (status: SpaceStatus): string => {\n switch (status) {\n case SpaceStatus.NotBookable:\n return 'Not Bookable';\n case SpaceStatus.Requestable:\n return 'Available by Request';\n case SpaceStatus.Unavailable:\n return 'In Use';\n case SpaceStatus.Available:\n default:\n return 'Available';\n }\n};\n\nconst mapSpaceStatusToOption = (status: SpaceStatus) => ({\n value: status,\n display: mapSpaceStatusToDisplay(status)\n});\n\nexport const legendOptions = (): SelectOption[] => [\n SpaceStatus.Available,\n SpaceStatus.Requestable,\n SpaceStatus.Unavailable,\n SpaceStatus.NotBookable\n].map(mapSpaceStatusToOption);\n\n\nexport const defaultMapBookingRules = [\n 'Rooms showing yellow are restricted and must be requested',\n 'Rooms showing green are available to book for one hour',\n 'Rooms showing red are booked',\n 'Rooms showing grey are not bookable but may be used if they are empty'\n];\n\nexport const defaultMapBookingSubtitle = 'You may request restricted rooms but they will need to be approved by an admin';\n\nexport const generateMapStyleForSpace = (\n space: Space,\n status: SpaceStatus,\n colorStatusMap: HashMap) => {\n const id =\n `${space.map_id}`.indexOf('area') < 0\n ? `area-${space.map_id}-status`\n : space.map_id;\n return (\n {\n id,\n styles: {\n fill: colorStatusMap[`space-${status}`] || '#000',\n opacity: 1\n }\n });\n};\n\n/**\n * Generates actions for mapview handling.\n * @param space - the space to generate\n * @param clickSpace - called when clicked or touched\n * @param hoverSpace - called when you hover over a space\n * @param leaveSpace - called when you leave a space.\n */\nexport const generateMapListenersForSpace = (\n space: Space,\n hoverSpace: () => void,\n leaveSpace: () => void,\n clickSpace: () => void\n): MapListener[] => {\n const id =\n `${space.map_id}`.indexOf('area') < 0\n ? `area-${space.map_id}-status`\n : space.map_id;\n const listeners: MapListener[] = [];\n listeners.push({\n id,\n event: 'mouseenter',\n callback: hoverSpace\n });\n listeners.push({\n id,\n event: 'mouseleave',\n callback: leaveSpace\n });\n if (space.bookable) {\n listeners.push({\n id,\n event: 'click',\n callback: clickSpace\n });\n listeners.push({\n id,\n event: 'touchend',\n callback: clickSpace\n });\n }\n return listeners;\n};\n\n\nexport const spaceToMapFeature = (space: Space): MapFeature => ({\n id: `area-${space.map_id}-status`,\n coordinates: null,\n content: FloorMapOverlayComponent,\n data: {\n ...space\n }\n});\n\nexport const roomToMapFeature = (room: RoomResultsViewModel, parentComponent?: any): MapFeature => ({\n id: `area-${room.space.map_id}-status`,\n coordinates: null,\n content: FloorMapOverlayComponent,\n data: {\n ...room.space,\n parentComponent,\n room\n }\n});\n\n// service account for office floor map view - read only\nexport const SERVICE_ACCOUNT = 'svc_kiosk_converge@mckinsey.onmicrosoft.com';","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { OfficeFloorComponent } from './office-floor/office-floor.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { LibraryModule } from '@acaprojects/ngx-interactive-map';\nimport { MatSelectModule } from '@angular/material/select';\nimport { UiModule } from '@mckinsey-converge/ui';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MapModule } from 'src/app/map/map.module';\nimport { FloorMapOverlayComponent } from './floor-map-overlay/floor-map-overlay.component';\n\nexport const mapModuleImports = [\n CommonModule,\n MatButtonModule,\n LibraryModule,\n MatSelectModule,\n UiModule,\n MatDialogModule,\n MapModule,\n];\n\nexport const mapModuleDeclarations = [\n OfficeFloorComponent,\n FloorMapOverlayComponent,\n // MapControlsComponent,\n // MapFiltersComponent,\n // OfficeInformationModalComponent,\n // MapOverlayComponent\n];\n\n@NgModule({\n declarations: [\n ...mapModuleDeclarations,\n ],\n exports: [\n ...mapModuleDeclarations\n ],\n imports: [\n ...mapModuleImports\n ]\n})\nexport class OfficeFloorMapModule {\n}\n","import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { BehaviorSubject, combineLatest, interval } from 'rxjs';\nimport { BaseDirective, closestToTimeSlot, closestToTimeSlotTz, HashMap, Point } from '@mckinsey-converge/base';\nimport { MapFeature } from '@acaprojects/ngx-interactive-map/lib/helpers/map.interfaces';\nimport { select, Store } from '@ngrx/store';\nimport { BuildingStoreState } from '@mckinsey-converge/buildings';\nimport * as cloneDeep from 'lodash/cloneDeep';\nimport {\n Building,\n BuildingLevel,\n SettingsService,\n Space,\n mapBuildingLevelToOption,\n mapResultsToViewModels,\n RoomResultsViewModel,\n selectActiveForm,\n selectBookingLocations,\n selectSelectedBuildingOptions,\n roomFormDataToQuery,\n FilteredSpaces,\n BookingStoreState,\n storeBookingFormData,\n BookingFormData,\n MapListener,\n selectFilteredDiffSizeResults,\n User,\n selectMapFilteredResults,\n ApplicationService,\n clearRoomFilters,\n\t\tbookingTypeOptions,\n defaultRoomSizeOption,\n} from '@mckinsey-converge/data-common';\nimport { distinctUntilChanged, map, take, withLatestFrom } from 'rxjs/operators';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { filterUndefined } from '@mckinsey-converge/rx-utils';\nimport { MatDialog } from '@angular/material/dialog';\nimport { OfficeInformationModalComponent } from 'src/app/map/office-information-modal/office-information-modal.component';\n\nimport {\n CENTER_POINT,\n generateMapListenersForSpace,\n generateMapStyleForSpace,\n MAX_ZOOM_LEVEL,\n MIN_ZOOM_LEVEL,\n roomToMapFeature,\n SERVICE_ACCOUNT,\n WAITING_TIME,\n} from '../floor-map.utils';\nimport {\n loadDiffSizeResults,\n loadRoomsForResults,\n loadRoomsForResultsMap,\n mapRoomToSelectOption,\n RoomStoreState,\n} from '@mckinsey-converge/rooms';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { selectCurrentUser, UserStoreState } from '@mckinsey-converge/user';\nimport { ActivatedRoute, Router, RouterStateSnapshot } from '@angular/router';\nimport { Location } from '@angular/common';\nimport { DateTZ } from '@mckinsey-converge/date-tz';\nimport { DateTime } from 'luxon';\n\nexport type MapSearchStoreState = BuildingStoreState &\n RoomStoreState &\n BookingStoreState &\n UserStoreState;\n\n@Component({\n selector: 'app-office-floor',\n templateUrl: './office-floor.component.html',\n styleUrls: ['./office-floor.component.scss'],\n})\nexport class OfficeFloorComponent extends BaseDirective implements OnInit, OnChanges {\n @Input()\n public openHeader: boolean = true;\n\n public zoom = new BehaviorSubject(MIN_ZOOM_LEVEL);\n\n public center = new BehaviorSubject(CENTER_POINT);\n public listeners = new BehaviorSubject([]);\n\n public focusedMapSpace = new BehaviorSubject(undefined);\n public features = combineLatest([this.focusedMapSpace]).pipe(\n map((items) => items.filter((i) => !!i))\n );\n\n public focusedRoom = new BehaviorSubject(undefined);\n\n public resultBuildings = new BehaviorSubject([]);\n public resultSpaces = new BehaviorSubject([]);\n public activeBuilding = new BehaviorSubject(undefined);\n public activeLevel = new BehaviorSubject(undefined);\n public activeSpace = new BehaviorSubject(undefined);\n\n /** Mapping of elements to CSS styles */\n public style_map = new BehaviorSubject>>({});\n\n public mapUrl = this.activeLevel.pipe(map((level) => level?.map_url ?? ''));\n\n public bookingLocations = new BehaviorSubject[]>([]);\n public buildingLevelOptions = new BehaviorSubject[]>([]);\n public spaceListOptions = new BehaviorSubject[]>([]);\n\n public activeBuildingOption = combineLatest([this.activeBuilding, this.bookingLocations]).pipe(\n map(([building, locations]) => locations.find((l) => l.value === building?.id))\n );\n\n public activeLevelOption = this.activeLevel.pipe(map(mapBuildingLevelToOption));\n public activeSpaceOption = this.activeSpace.pipe(map(mapRoomToSelectOption));\n public bookingFormData = new BehaviorSubject(undefined);\n\n public roomStatus: any;\n public payload: any;\n /** Current User */\n public currentUser: User;\n public bookingConfirmed = false;\n public bookingData: {};\n serviceAccount: boolean;\n\n constructor(\n private store: Store,\n public dialog: MatDialog,\n private settingService: SettingsService,\n private router: Router,\n private route: ActivatedRoute,\n public _service: ApplicationService,\n private location: Location\n ) {\n super();\n this.payload = location.getState();\n this.payload.floorMap = false;\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n throw new Error('Method not implemented.');\n }\n\n public ngOnInit(): void {\n //clear filters first if any applied previously \n this.store.dispatch(clearRoomFilters());\n\n const selection = { value: this.payload?.payload, display: '' };\n this.payload.building.value = this.payload.building[0].id;\n\n this.subscription(\n 'currentUser',\n this.store\n .select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n this.serviceAccount = this.currentUser.email === SERVICE_ACCOUNT\n })\n );\n\n // get the active form values\n this.subscription(\n 'activeForm',\n this.store\n .pipe(select(selectActiveForm), distinctUntilChanged())\n .subscribe((next: BookingFormData | undefined) => {\n if (next) {\n next.duration = 30;\n this.bookingFormData.next(next); /// <---- timezone setting can be done here\n }\n })\n );\n\n this.subscription(\n 'bookingLocations',\n this.store.pipe(select(selectBookingLocations)).subscribe((next) => {\n this.bookingLocations.next(next);\n // update the map view MCK-1100 when location changes\n const self = this;\n setTimeout(() => {\n self.selectActiveBuilding(self.bookingLocations.value[0]);\n }, 0);\n })\n );\n\n this.subscription(\n 'bookingSpaceResults',\n combineLatest([\n this.store.pipe(\n select(selectMapFilteredResults),\n map((r: LoadingModel) => r.success)\n ),\n this.activeBuilding.pipe(filterUndefined()),\n this.activeLevel.pipe(filterUndefined()),\n ]).subscribe(([filteredSpaces, building, level]) => {\n this.roomStatus = filteredSpaces;\n\n const spacesFromSelection = (filteredSpaces.spaces || []).filter(\n (s) =>\n !!s.map_id &&\n s.zones.includes(building.id) &&\n s.zones.includes(this.payload?.payload)\n );\n\n this.resultSpaces.next(cloneDeep(spacesFromSelection));\n\n const listeners: MapListener[] = [];\n const styles: HashMap> = {};\n const colour_map = this.settingService.get('app.explore.colors') || {};\n spacesFromSelection.forEach((space) => {\n const status = filteredSpaces.statusMap[space.id];\n const mapStyle = generateMapStyleForSpace(space, status, colour_map);\n styles[`#${mapStyle.id}`] = mapStyle.styles;\n listeners.push(\n ...generateMapListenersForSpace(\n space,\n () => {},\n () => {},\n () => {\n if(!this.serviceAccount) {\n this.activeSpace.next(space);\n this.focusOnRoom();\n }\n \n }\n )\n );\n });\n this.style_map.next(styles);\n this.listeners.next(listeners);\n this.isOverlayOpened && this.focusOnRoom();\n })\n );\n\n this.subscription(\n 'bookingResults',\n this.resultSpaces\n .pipe(withLatestFrom(this.activeSpace))\n .subscribe(([resultSpaces, activeSpace]) => {\n this.spaceListOptions.next(resultSpaces.map(mapRoomToSelectOption));\n })\n );\n\n this.subscription(\n 'setActiveSpace',\n this.resultSpaces\n .subscribe((next) => {\n // console.log(this.focusedRoom?.value?.space?.id);\n const space = next.find((s) => s.id === this.focusedRoom?.value?.space?.id)\n space && this.activeSpace.next(space);\n })\n );\n\n\n \n\n this.subscription(\n 'storeResultedBuildings',\n this.store.pipe(select(selectSelectedBuildingOptions)).subscribe((buildings) => {\n this.resultBuildings.next(this.payload.building);\n // if we dont have active building yet, set it here.\n if (buildings.length > 0 && !this.activeBuilding.value) {\n const firstBuilding = buildings[0];\n this.activeBuilding.next(firstBuilding);\n }\n })\n );\n\n this.subscription(\n 'activeBuildingChange',\n this.activeBuilding\n .pipe(\n filterUndefined(),\n map((b: Building) => b.levels)\n )\n .subscribe((levels) => {\n this.buildingLevelOptions.next(levels.map(mapBuildingLevelToOption));\n })\n );\n\n // if levels change and active level no longer part of list, pick first.\n this.subscription(\n 'updateActiveLevelOnActiveBuildingChange',\n this.activeBuilding\n .pipe(\n filterUndefined(),\n distinctUntilChanged(),\n withLatestFrom(this.activeLevel),\n map(\n ([building, activeLevel]) =>\n (activeLevel && building.levels.find((l) => l.id === activeLevel.id)) ||\n building.levels[0]\n )\n )\n .subscribe((level) => {\n this.activeLevel.next(level);\n })\n );\n\n // re-request rooms every minute to update space status.\n this.subscription(\n 'updateSpaceStatusInterval',\n interval(60 * 1000)\n .pipe(withLatestFrom(this.store.select(selectActiveForm)))\n .subscribe(([, form]) => {\n \n form['date'] = closestToTimeSlot(DateTime.now().plus({ minutes: 1 }), WAITING_TIME).valueOf(),\n form.dateTz = closestToTimeSlotTz(\n new DateTZ({ date: DateTime.now().plus({ minutes: 1 }), is_local_tz: false, building_tz: form.timezone }),\n WAITING_TIME\n )\n this.store.dispatch(storeBookingFormData({ payload: form }));\n this.store.dispatch(loadRoomsForResults.request(roomFormDataToQuery(form)));\n })\n );\n\n this.selectActiveBuilding(this.payload.building);\n this.selectBuildingLevel(selection);\n\n }\n\n public zoomIn() {\n if (this.zoom.value < MAX_ZOOM_LEVEL) {\n this.zoom.next(this.zoom.value + 1);\n }\n }\n\n public zoomOut() {\n if (this.zoom.value > MIN_ZOOM_LEVEL) {\n this.zoom.next(this.zoom.value - 1);\n }\n }\n\n public displayOfficeInformation() {\n this.dialog.open(OfficeInformationModalComponent, {\n data: this.activeBuilding.value,\n panelClass: 'mck-alert',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n }\n\n public resetZoomLevels() {\n this.zoom.next(MIN_ZOOM_LEVEL);\n this.center.next(CENTER_POINT);\n this.focusedRoom.next(undefined);\n }\n\n public selectActiveBuilding(selection: SelectOption) {\n this.resultBuildings\n .pipe(\n map((all) => all.find((b) => b.id === selection.value)),\n take(1),\n filterUndefined()\n )\n .subscribe((next) => {\n this.activeBuilding.next(next);\n });\n }\n\n public selectBuildingLevel(selection: SelectOption) {\n this.activeBuilding\n .pipe(\n map((b) => b.levels?.find((l) => l.id === selection?.value)),\n take(1),\n filterUndefined()\n )\n .subscribe((next) => {\n this.activeLevel.next(next);\n });\n }\n\n public selectActiveSpace(selection?: SelectOption) {\n this.resultSpaces\n .pipe(\n map((all) => all.find((s) => s.id === this.focusedRoom?.value.space.id)),\n // take(1),\n filterUndefined()\n )\n .subscribe((next) => {\n this.activeSpace.next(next);\n });\n }\n\n public focusOnRoom() {\n // this.selectedSpace = space;\n this.activeSpace.pipe(take(1), filterUndefined()).subscribe((next) => {\n let delay = 0;\n if (next.level.id !== this.activeLevel.value.id) {\n this.activeLevel.next(next.level);\n delay = 500;\n }\n this.timeout(\n 'updateLevelAndRoom',\n () => {\n const focusedRoom = mapResultsToViewModels(\n [this.activeSpace.value],\n [this.activeLevel.value],\n [this.activeBuilding.value]\n );\n // this.focusedRoom.next(null);\n \n this.focusedRoom.next(cloneDeep(focusedRoom[0]));\n this.isOverlayOpened && this.childCallback( cloneDeep(focusedRoom[0]) );\n\n\t\t\t\t\tconst { filters, settings } = this.focusedRoom?.value?.space; // use of new data structure fields\n if ( this.roomStatus.statusMap[this.focusedRoom.value.space.id] === 'requestable' || (filters?.equipment_code || settings?.equipment_code) ) {\n // submit\n this.store.dispatch(\n storeBookingFormData({\n payload: {\n ...this.bookingFormData.value,\n selectedRoom: this.focusedRoom.value,\n },\n })\n );\n this.roomSelected(this.focusedRoom.value);\n }\n !this.isOverlayOpened && this.focusedMapSpace.next(roomToMapFeature(this.focusedRoom.value, this));\n this.zoom.next(6);\n },\n delay\n );\n });\n }\n\n public isOverlayOpened = false;\n public childCallback;\n\n public exitFullscreen(route: string): void {\n this.store.dispatch(clearRoomFilters());\n\n this.store.select(selectActiveForm).pipe(take(1))\n\t\t\t\t\t.subscribe((form) => {\n\t\t\t\t\t\tform.bookingType = bookingTypeOptions[0],\n form.roomSize = defaultRoomSizeOption,\n\t\t\t\t\t\t\tthis.store.dispatch(storeBookingFormData({ payload: form }));\n\t\t\t\t\t});\n\n const navigationExtras = {\n state: { payload: this.activeLevel.value },\n relativeTo: this.route,\n queryParams: {\n display: 'map',\n },\n };\n this._service.kioskFormFilter = true;\n this.router.navigate([route], navigationExtras);\n }\n\n // public triggerRefresh(){\n // this.subscription(\n // 'activeForm',\n // this.store\n // .pipe(select(selectActiveForm), distinctUntilChanged())\n // .subscribe((next: BookingFormData | undefined) => {\n // if (next) {\n // next.duration = 35;\n // this.bookingFormData.next(next);\n // }\n // })\n // );\n\n // this.subscription(\n // 'bookingSpaceResults',\n // combineLatest([\n // this.store.pipe(\n // select(selectMapFilteredResults),\n // map((r: LoadingModel) => r.success)\n // ),\n // this.activeBuilding.pipe(filterUndefined()),\n // this.activeLevel.pipe(filterUndefined()),\n // ]).subscribe(([filteredSpaces, building, level]) => {\n // this.roomStatus = filteredSpaces;\n\n // const spacesFromSelection = (filteredSpaces.spaces || []).filter(\n // (s) =>\n // !!s.map_id &&\n // s.zones.includes(building.id) &&\n // s.zones.includes(this.payload?.payload)\n // );\n\n // this.resultSpaces.next(spacesFromSelection);\n\n // const listeners: MapListener[] = [];\n // const styles: HashMap> = {};\n // const colour_map = this.settingService.get('app.explore.colors') || {};\n // spacesFromSelection.forEach((space) => {\n // const status = filteredSpaces.statusMap[space.id];\n // const mapStyle = generateMapStyleForSpace(space, status, colour_map);\n // styles[`#${mapStyle.id}`] = mapStyle.styles;\n // listeners.push(\n // ...generateMapListenersForSpace(\n // space,\n // () => {},\n // () => {},\n // () => {\n // this.activeSpace.next(space);\n // this.focusOnRoom();\n // }\n // )\n // );\n // });\n // this.style_map.next(styles);\n // this.listeners.next(listeners);\n // })\n // );\n\n // this.subscription(\n // 'bookingResults',\n // this.resultSpaces\n // .pipe(withLatestFrom(this.activeSpace))\n // .subscribe(([resultSpaces, activeSpace]) => {\n // this.spaceListOptions.next(resultSpaces.map(mapRoomToSelectOption));\n // })\n // );\n // }\n\n public roomSelected(room: RoomResultsViewModel) {\n // submit\n // this.store.dispatch(\n // storeBookingFormData({\n // payload: {\n // ...this.bookingFormData.value,\n // selectedRoom: room,\n // },\n // })\n // );\n\n let organiser = { display: this.currentUser.name, value: this.currentUser.email };\n this.store.dispatch(\n storeBookingFormData({\n payload: {\n organiser: organiser,\n title: 'Ad hoc meeting',\n // attendees: [this.currentUser],\n code: '',\n notes: '',\n head_count: 1,\n selectedRoom: room,\n },\n })\n );\n\n this.router.navigate(['../create'], { relativeTo: this.route });\n }\n\n public getDayOfWeek(date: string | number | Date) {\n const dayOfWeek = new Date(date).getDay();\n return isNaN(dayOfWeek)\n ? null\n : ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'][\n dayOfWeek\n ];\n }\n\n public confirmBooking = (bookingData: {}) => {\n this.bookingConfirmed = true;\n this.bookingData = bookingData;\n };\n}\n","
\n
\n
\n \n \n \n \n
\n \n
\n
\n
\n
\n
\n
Booking Confirmed
\n
\n
\n \n
Confirmed
\n
\n
\n
Status: Confirmed
\n
Date: {{this.getDayOfWeek(this.bookingData?.date_string)}}, {{this.bookingData?.date_string}}
\n
Time: {{this.bookingData?.time_period}} GMT{{this.bookingData?.tz_offset}}
\n
{{this.bookingData?.booking_type}} meeting ({{this.bookingData?.duration}} minutes)
\n
Address: {{this.activeBuilding?.value.address}}, {{this.activeBuilding?.value.city}}
\n
Room: {{this.focusedRoom.value.title}}
\n
Room {{this.focusedRoom.value.capacity}}
\n
\n
\n
\n
\n
\n
\n
Host: {{this.currentUser?.name}}
\n
Attendees: {{this.currentUser?.name}}
\n
Charge Code: {{this.focusedRoom?.value.space.filters.charge_code === false ? \"No charge code\" : \"\"}}
\n
Headcount Estimate: {{this.bookingData?.attendees.length}}
\n
Additional Requirements: {{this.bookingData?.notes[0]}}
\n
\n
\n
\n
\n \n Close\n \n
\n
\n
\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output\n} from '@angular/core';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { BehaviorSubject } from 'rxjs';\nimport {\n ActivatedRoute,\n ParamMap,\n Router\n} from '@angular/router';\nimport { deepDistinctUntilChanged } from '@mckinsey-converge/rx-utils';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'app-results-header',\n template: `\n
\n
\n

Results

\n Matching your search criteria {{resultsCount>=0 ? '('+resultsCount+')' : ''}} \n
\n \n \n
\n `,\n styleUrls: ['./results-header.component.scss']\n})\nexport class ResultsHeaderComponent extends BaseDirective implements OnInit {\n\n public toggleOptions: SelectOption[] = [\n {\n value: 0,\n display: 'List',\n meta: { \n mobile: true\n }\n },\n {\n value: 1,\n display: 'Map',\n meta: { \n mobile: true\n }\n },\n {\n value: 2,\n display: 'Calendar',\n meta: { \n route: 'booking-calendar',\n mobile: false\n }\n }\n ];\n\n public selectedToggle = new BehaviorSubject>(this.toggleOptions[0]);\n\n @Input()\n public resultsCount: number | undefined;\n\n @Output()\n public selectedToggleChange = new EventEmitter>();\n\n constructor(private router: Router,\n private route: ActivatedRoute) {\n super();\n }\n\n public ngOnInit(): void {\n this.selectedToggleChange.next(this.selectedToggle.value);\n\n this.subscription('paramsToUI', this.route.queryParamMap\n .pipe(deepDistinctUntilChanged())\n .subscribe((next: ParamMap) => {\n const retrievedOption = this.toggleOptions.find(o => o.display.toLowerCase() === next.get('display'));\n this.onSelectedChange(retrievedOption ?? this.toggleOptions[0]);\n }));\n }\n\n public onSelectedChange(option: SelectOption) {\n this.selectedToggle.next(option);\n this.selectedToggleChange.next(option);\n\n if(option.meta?.route) {\n this.router.navigate(['booking-calendar'], { relativeTo: this.route });\n }\n else {\n // toggle route.\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: {\n display: option.display.toLowerCase()\n },\n queryParamsHandling: 'merge'\n });\n }\n \n\n }\n\n}\n","import {\n Component,\n Inject,\n OnInit,\n Output,\n EventEmitter,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n MAT_DIALOG_DATA,\n MatDialogRef\n} from '@angular/material/dialog';\n\nimport {\n AbstractControl,\n FormControl,\n FormGroup,\n Validators\n} from '@angular/forms';\nimport {\n dateBuildingFormatString,\n startEndTimeWithZoneFormatString,\n humaniseDuration,\n closestToTimeSlotTz\n} from '@mckinsey-converge/base';\nimport {\n Space,\n SpacesService,\n DEFAULT_BOOKING_DURATION,\n checkCollisions,\n Booking\n} from '@mckinsey-converge/data-common';\nimport { DateTZ, convertLocalTimestampToTimezonedDateTz, convertTimezonedTimestampToLocalDateTz, DateNow } from '@mckinsey-converge/date-tz';\n\ninterface ModalData {\n dateTz: DateTZ,\n duration: number,\n pendingDateTz: DateTZ,\n pendingDuration: number,\n space?: Space,\n rules?: any,\n bookingId?: string,\n currentBooking?: Booking,\n}\n\n@Component({\n selector: 'app-room-availability-preview-modal',\n template: `\n
\n \n
\n \n
New Booking Date/Time
\n
\n
\n \n \n \n \n \n \n \n \n
\n
\n

Room is available for selected date/time.

\n

Room is unavailable for selected date/time.

\n

Checking availability for selected date/time...

\n

\n Please be aware that this booking starts at {{localStart}} and ends at {{localEnd}} in your local timezone.\n

\n
\n
\n
\n
\n

Old

\n

Date: {{dateString}}

\n

Time: {{timeString}}

\n

({{durationString}})

\n \n
\n
\n

New

\n

Date: {{pendingDateString}}

\n

Time: {{pendingTimeString}}

\n

({{pendingDurationString}})

\n
\n
\n
\n
\n \n \n \n
\n `,\n styleUrls: ['./room-availability-preview-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class RoomAvailabilityPreviewModalComponent implements OnInit {\n @Output() public submitForm = new EventEmitter();\n public dateString: string;\n public timeString: string;\n public durationString: string;\n public pendingDateString: string;\n public pendingTimeString: string;\n public pendingDurationString: string;\n public mapBookingRules: readonly string[];\n public mapBookingSubtitle: string;\n public fromDateTz: DateTZ = closestToTimeSlotTz(new DateTZ(), 15);\n public available: boolean = null;\n public formGroup = new FormGroup({\n dateTz: new FormControl(this.fromDateTz, [Validators.required]),\n duration: new FormControl(DEFAULT_BOOKING_DURATION, [Validators.required])\n });\n public localTimezone = \"\";\n public buildingTimezone = \"\";\n public localStart = \"\";\n public localEnd = \"\"\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: ModalData,\n private dialogRef: MatDialogRef,\n private _spaces: SpacesService,\n ) {}\n\n public get pending_date(){\n return this.data.pendingDateTz; // new DateTZ({ date: this.data.pendingDate.valueOf(), is_local_tz: false, building_tz: this.data?.space?.timezone })\n }\n\n public ngOnInit(): void {\n console.log('Here 1');\n this.formGroup.setValue({\n dateTz: this.data.pendingDateTz,\n duration: this.data.pendingDuration,\n });\n console.log('Here 2');\n this.updateDisplay();\n }\n\n // Method run when the confirming the modal.\n public applyChanges(changes: any): void {\n this.data.pendingDateTz = changes.pendingDateTz; // new Date(changes.pendingDate.valueOf());\n this.data.pendingDuration = changes.pendingDuration;\n this.updateDisplay();\n }\n\n public updateDisplay() {\n // this.data.dateTz is the existing time in building time\n // this.data.pendingDateTz is the new time in building time\n const dateTz = this.data.dateTz;\n this.dateString = dateBuildingFormatString(dateTz);\n this.timeString = startEndTimeWithZoneFormatString(dateTz, dateTz.addValue({ minutes: this.data.duration }));\n this.durationString = humaniseDuration(this.data.duration);\n\n const pendingDateTz = this.data.pendingDateTz;\n this.pendingDateString = dateBuildingFormatString(pendingDateTz);\n this.pendingTimeString = startEndTimeWithZoneFormatString(pendingDateTz, pendingDateTz.addValue({ minutes: this.data.pendingDuration }));\n this.pendingDurationString = humaniseDuration(this.data.pendingDuration);\n this.fromDateTz = closestToTimeSlotTz(pendingDateTz, 15); // building value\n\n const setup = {};\n setup[this.data.space.email] = this.data?.currentBooking?.setup[this.data?.space?.email] || 0;\n const breakdown = {};\n breakdown[this.data.space.email] = this.data?.currentBooking?.setup[this.data?.space?.email] || 0;\n\n this.updateCoachmarkTimes(this.data?.space?.timezone);\n\n const mockBooking = new Booking({\n id: this.data.bookingId,\n start_epoch: this.data.pendingDateTz.seconds,\n end_epoch: this.data.pendingDateTz.addValue({ minutes: this.data.pendingDuration }).seconds,\n room: this.data.space,\n setup,\n breakdown, \n });\n\n checkCollisions(\n this._spaces,\n mockBooking\n ).then((bookable: boolean) => {\n this.available = bookable;\n }).catch(() => {\n this.available = false;\n });\n }\n\n public closeModal() {\n this.dialogRef.close(null);\n }\n\n public updateDatePickerValue(dateTz: DateTZ) {\n const pending_date: DateTZ = this.formGroup.value.dateTz\n const day = pending_date.setValue({ \n day: dateTz.dateDay,\n month: dateTz.dateMonth,\n year: dateTz.dateYear\n });\n this.setValue(day, this.formGroup.controls.dateTz);\n }\n\n public setValue($value, formControl: AbstractControl) {\n // valid options are in building time\n formControl.setValue($value); // bulding time\n this.submitForm.emit(this.formGroup.value);\n }\n\n public confirm() {\n const setup = {};\n setup[this.data.space.email] = this.data?.currentBooking?.setup[this.data?.space?.email] || 0;\n const breakdown = {};\n breakdown[this.data.space.email] = this.data?.currentBooking?.setup[this.data?.space?.email] || 0;\n\n const buildingDate = convertLocalTimestampToTimezonedDateTz(this.data.pendingDateTz.ms, this.data?.currentBooking?.timezone);\n const mockBooking = new Booking({\n id: this.data.bookingId,\n start_epoch: buildingDate.seconds,\n end_epoch: buildingDate.addValue({ minutes: this.data.pendingDuration }),\n room: this.data.space,\n setup,\n breakdown, \n });\n\n checkCollisions(\n this._spaces,\n mockBooking\n ).then((bookable: boolean) => {\n this.available = bookable;\n this.dialogRef.close({\n ...this.formGroup.value,\n }); \n }).catch(() => {\n this.available = false;\n });\n }\n\n private updateCoachmarkTimes(timezone: string) {\n if (timezone) {\n this.buildingTimezone = timezone;\n const localizedStartDate = this.formGroup.value.dateTz;\n const localizedEndDate = localizedStartDate.addValue({ minutes: this.formGroup.value.duration });\n this.localStart = localizedStartDate.formatLocalDate(\"h:mma\");\n this.localEnd = localizedEndDate.formatLocalDate(\"h:mma\");\n } else {\n this.buildingTimezone = this.localTimezone.slice(0);\n this.localStart = \"\";\n this.localEnd = \"\";\n } \n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n Input,\n OnInit,\n OnChanges,\n ElementRef,\n ViewChild,\n EventEmitter,\n Output,\n SimpleChanges,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { fromEvent, Subject, BehaviorSubject, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { throttleTime, tap } from 'rxjs/operators';\nimport { CalendarEvent, CalendarEventTimesChangedEvent } from 'angular-calendar';\nimport { BaseClass, durationHumanized, isLessThanBreakpoint } from '@mckinsey-converge/base';\nimport {\n Booking,\n Building,\n BuildingLevel,\n Space,\n User,\n rulesForSpace,\n SpaceRules,\n} from '@mckinsey-converge/data-common';\nimport { generateFeedbackUrl, Urls } from '../../utilities/urls';\nimport { TopBarHeaderMode } from '../room-location-preview/room-location-preview.component';\nimport { RoomAvailabilityPreviewModalComponent } from '../room-availability-preview-modal/room-availability-preview-modal.component';\nimport {\n DateNow,\n DateTZ,\n convertLocalTimestampToTimezonedDateTz,\n convertTimezonedTimestampToLocalDateTz,\n timezoneOffset,\n} from '@mckinsey-converge/date-tz';\nimport { utcToZonedTime } from 'date-fns-tz';\nimport { FormControl } from '@angular/forms';\nimport { DateTime } from 'luxon';\n\nconst WEEKEND_DAYS = [6, 7];\nconst colors = {\n grey: {\n secondary: '#D2D2D2',\n primary: '#A19F9F',\n },\n blue: {\n secondary: '#C0DBF5',\n primary: '#00A9F4',\n },\n red: {\n secondary: '#EB5757',\n primary: '#EB5757',\n },\n};\n\ninterface CalendarClickEvent {\n date: Date;\n}\n\nexport interface BookingBumper {\n top?: string;\n bottom?: string;\n height: string;\n backgroundColor: string;\n}\nexport interface BookingBumpers {\n top: BookingBumper;\n bottom: BookingBumper;\n}\n\nexport type BookingPlus = Booking & { start: number; end: number }; // R--- why again?\nexport type CalendarEventPlus = CalendarEvent & { bumper?: BookingBumpers; booking?: Booking };\n\n@Component({\n selector: 'room-availability-preview',\n templateUrl: './room-availability-preview.component.html',\n styleUrls: ['./room-availability-preview.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RoomAvailabilityPreviewComponent extends BaseClass implements OnInit, OnChanges {\n @ViewChild('scrollContainer') scrollContainer: ElementRef;\n\n @Input() public alternativeWeekStartDateTz: DateTZ;\n // Used when editing a booking\n @Input() public bookingId?: string;\n @Input() public bookings: BookingPlus[];\n /** retain as mutable */\n @Input() public building: Building;\n // R--- could probably use the currentBooking ID edit,\n // The bookingId was an after thought\n @Input() public currentBooking: Booking;\n @Input() public currentUser: User;\n @Input() public dateTz: DateTZ;\n @Input() public duration: number;\n @Input() public expanded: boolean;\n @Input() public level: BuildingLevel;\n /** The theme to use **/\n @Input() public mode: TopBarHeaderMode = TopBarHeaderMode.Light;\n @Input() public space: Space;\n // @Input() public timezone: string;\n\n @Output() public confirmChanges: EventEmitter = new EventEmitter();\n @Output() public handleExpand: EventEmitter = new EventEmitter();\n @Output() public updateCalendarWeekView: EventEmitter = new EventEmitter();\n @Output() public warnIfItHasConflict: EventEmitter = new EventEmitter();\n\n /**\n * placeIntoModal: Input decorator indecate as a flag to adapt component design into a dialog modal \n * (by hiding header and adjusting height so that fit into a modal)\n */\n @Input() public placeIntoModal: boolean = false;\n\n constructor(public dialog: MatDialog) {\n super();\n }\n\n public breakpoint = 768;\n public mobile = false;\n public showDatePicker = false;\n public events: CalendarEventPlus[] = [];\n public dayStartHour: number;\n public dayEndHour: number;\n public viewDateTz: DateTZ;\n public weekViewDateTz: DateTZ;\n public weekViewRangeText: string;\n public showWeekend: boolean = false;\n public currentPage: string;\n public calendarPopupValue = new BehaviorSubject(DateNow(new Date()));\n public pendingChange: boolean = false;\n public pendingDateTz: DateTZ;\n public pendingDuration: number;\n public eventSnapSize: number = 15;\n public dayRefresh: Subject = new Subject();\n public weekRefresh: Subject = new Subject();\n public addMarginOnConflict: boolean = false; // helps to add html class to adjust margin top in case of QR code scan conflict\n public event: CalendarEventPlus = {\n start: new Date(),\n end: new Date(),\n title: '',\n color: colors.blue,\n cssClass: 'selected',\n actions: null,\n resizable: {\n beforeStart: false,\n afterEnd: false,\n },\n draggable: false,\n };\n\n public get timezone(): string {\n return this.dateTz.building_tz;\n }\n\n public get one_day_in_millis() {\n return 86400000;\n }\n\n public get thirty_minutes_in_millis() {\n return 1800000;\n }\n public rules: SpaceRules;\n public modal_data: any = {};\n public scrollFired: boolean = false;\n\n // Values to display a span on the date picker, but the date picker doesn't support this.\n public date_span = {\n start: 0,\n end: 0,\n };\n\n // I can't think of any reason the calendar widget needs to go back further than 2 years, if even that.\n public fromDateTz = DateNow(new Date()).subtractValue({ years: 2 });\n\n public dateControl = new FormControl(new Date().valueOf());\n\n public isEventDate(d: CalendarClickEvent) {\n const date = new DateTZ({ date: d.date.valueOf() }); // local time I think.. problem TODO\n return this.pendingDateTz.isSameDate(date, 'day');\n }\n\n public get inputDate(): Observable {\n return this.calendarPopupValue.pipe(map((d) => d));\n }\n\n public get feedback() {\n return generateFeedbackUrl(this.currentPage);\n }\n\n public ngOnInit(): void {\n // R--- retrun to document\n this.mobile = isLessThanBreakpoint(this.breakpoint);\n this.pendingDateTz = this.dateTz.clone();\n const date = this.dateTz.clone();\n const currentBookingStartDate = this.currentBooking\n ? this.currentBooking.startDateTz.addValue({ seconds: 0 })\n : date;\n this.alternativeWeekStartDateTz = date.startOfValue('week').startOfValue('day');\n\n // Not sure if this is correct\n this.weekViewDateTz = this.alternativeWeekStartDateTz.clone();\n\n this.calendarCenter();\n this.pendingDuration = this.duration;\n this.viewDateTz = new DateTZ({ \n date: DateTime.fromISO(this.pendingDateTz.formatDate('yyyy-MM-dd'))\n }).setValue({ hour: 12, minute: 0 });\n this.setCalendarValue(this.pendingDateTz);\n this.showWeekend =\n WEEKEND_DAYS.includes(currentBookingStartDate.dateWeekday) ||\n WEEKEND_DAYS.includes(date.dateWeekday);\n this.setupEventName();\n this.transformBookings();\n fromEvent(window, 'resize')\n .pipe(throttleTime(500))\n .pipe(\n tap({\n next: (val) => {\n const target = val.target as Window;\n this.mobile = target.innerWidth < this.breakpoint;\n this.expanded ? this.weekRefresh.next() : this.dayRefresh.next();\n },\n })\n )\n .subscribe();\n\n this.rules = rulesForSpace({\n time: this.dateTz.ms,\n duration: this.duration,\n user: this.currentUser,\n rules: this.building?.booking_rules,\n space: this.space,\n });\n\n // Update the display when the screen resizes.\n fromEvent(window, 'resize')\n .pipe(throttleTime(500))\n .pipe(\n tap({\n next: (val) => {\n this.mobile = isLessThanBreakpoint(this.breakpoint);\n this.calendarCenter();\n this.setDislayValues();\n },\n })\n )\n .subscribe();\n this.dateControl.setValue(this.dateTz);\n this.transformBookings();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.expanded) {\n // set if the event is editable\n this.event.draggable = this.expanded;\n this.event.resizable = {\n beforeStart: this.expanded,\n afterEnd: this.expanded,\n };\n const date = this.dateTz;\n this.setCalendarValue(date);\n }\n\n if (this.dayStartHour) this.scrollTo();\n\n if (!this.pendingDateTz) return;\n\n if (changes.bookings || changes.expanded) {\n this.transformBookings();\n }\n if (changes.alternativeWeekStartDateTz) {\n this.setDislayValues();\n }\n if (changes.expanded) {\n this.expanded ? this.weekRefresh.next() : this.dayRefresh.next();\n }\n }\n\n public setDislayValues() {\n const tz_offset = timezoneOffset(this.alternativeWeekStartDateTz.building_tz).hours\n const week_start_date = this.alternativeWeekStartDateTz.subtractValue({hours: tz_offset}).clone(); // Operation needed to trick the mwl-calendar-week-view to display the correct day if the day changes between timezones \n this.weekViewDateTz = this.weekViewDateTz || this.alternativeWeekStartDateTz.clone();\n let week_view_date = this.weekViewDateTz.startOfValue('week'); // new DateTZ({date: this.weekViewDate?.valueOf()}).startOfValue('week')\n if (!this.showWeekend) {\n // Advance from Sunday to Monday\n week_view_date = week_view_date.addValue({ days: 1 });\n }\n\n if (this.mobile) {\n this.weekViewDateTz = week_start_date\n this.weekViewRangeText = `${this.weekViewDateTz.formatDate('d MMMM')}`;\n this.calendarPopupValue.next(this.weekViewDateTz);\n } else {\n this.weekViewDateTz = week_start_date.addValue({ days: this.showWeekend ? 0 : 1 }); // new Date(week_start_date.addValue({ days: this.showWeekend ? 0 : 1 }).ms);\n this.weekViewRangeText = `${week_view_date.formatDate('d MMMM')} - ${week_view_date\n .addValue({ days: this.showWeekend ? 6 : 4 })\n .formatDate('d MMMM yyyy')}`;\n this.calendarPopupValue.next(week_view_date);\n }\n }\n\n public getBumpers(booking: Booking, selected: boolean = false) {\n const email = booking.space.email || this.space.email;\n const setup = booking.setup[email] ? booking.setup[email] / 60 : 0;\n const breakdown = booking.breakdown[email] ? booking.breakdown[email] / 60 : 0;\n\n return {\n top: {\n top: `-${setup - 1}px`,\n height: `${setup}px`,\n backgroundColor: selected ? colors.blue.secondary : colors.grey.secondary,\n },\n bottom: {\n bottom: `-${breakdown - 1}px`,\n height: `${breakdown}px`,\n backgroundColor: selected ? colors.blue.secondary : colors.grey.secondary,\n },\n };\n }\n\n public setupEventName() {\n this.setDislayValues();\n const pending_date = this.pendingDateTz.clone();\n const start_date = pending_date.setValue({ second: 0, millisecond: 0 });\n this.event.start = start_date.JSDate;\n this.event.end = start_date.addValue({ minutes: this.pendingDuration }).JSDate;\n const startHour = parseInt(pending_date.formatDate('H'), 10);\n\n if (startHour === 0) {\n this.dayStartHour = startHour;\n } else if (startHour < 6) {\n const offset = startHour > 3 ? startHour - 2 : startHour;\n this.dayStartHour = startHour - offset;\n } else {\n // The min of 18 is needed so start times after 6pm\n // don't push the calendar view beyond midnight.\n const offset = Math.min(18, startHour - 3);\n this.dayStartHour = offset;\n }\n\n if (!this.scrollFired && this.dayStartHour) {\n this.scrollTo();\n }\n\n this.dayEndHour = Math.max(24, this.dayStartHour + 6);\n this.event.title = `${pending_date\n .formatDate('h:mma')\n .toLocaleLowerCase()} (${durationHumanized(this.pendingDuration, true)})`;\n this.event.cssClass = `selected ${this.showWeekend ? 'show-weekend' : ''} ${\n this.mobile && this.expanded ? 'mobile' : ''\n } `;\n\n if (this.currentBooking) {\n this.event.bumper = this.getBumpers(this.currentBooking);\n this.event.booking = this.currentBooking;\n }\n this.expanded ? this.weekRefresh.next() : this.dayRefresh.next();\n }\n\n public transformBookings() {\n this.calendarSpan();\n const events = [];\n if (Array.isArray(this.bookings)) {\n this.bookings.forEach((raw_booking) => {\n const booking = new Booking(raw_booking);\n const { mode, duration } = this.displayClass(\n booking.startDateTz.ms,\n booking.endDateTz.ms\n );\n\n // back off a ms when end of day to avoid all day wrapping to next day.\n let end = booking.endDateTz;\n const endTime = booking.endDateTz;\n if (endTime.minutes === 0 && endTime.seconds === 0) {\n // back off a ms when the end of day to avoid all day wrapping to next day.\n end = booking.endDateTz.subtractValue({ seconds: 1 });\n }\n\n // When editing skip over the current booking\n if (booking.id === this.bookingId) return;\n\n const utcStart = booking.startDateTz; // building time\n const utcEnd = end; // building time\n // adjust the time to appear as the same time locally ( but technically incorrect for building timezone )\n const adjustedStartDate = utcToZonedTime(utcStart.ms, booking.timezone); // return local time\n const adjustedEndDate = utcToZonedTime(utcEnd.ms, booking.timezone); // return local time\n\n events.push({\n start: adjustedStartDate,\n end: adjustedEndDate,\n title: `Booked by ${booking.booker['name']}`,\n color: colors.grey,\n actions: null,\n cssClass: `booked ${this.mobile && 'mobile'} ${\n this.showWeekend ? 'show-weekend' : ''\n } ${mode}`,\n bumper: this.getBumpers(booking),\n resizable: {\n beforeStart: false,\n afterEnd: false,\n },\n draggable: false,\n booking,\n });\n });\n }\n\n const { mode, duration } = this.displayClass(\n this.event.start.getTime(),\n this.event.end.getTime()\n );\n const event = Object.assign({}, this.event);\n const endTime = new DateTZ({ date: this.event.start.valueOf() }).addValue({\n minutes: this.pendingDuration,\n }); // building time\n if (endTime.minutes === 0 && endTime.second === 0) {\n // back off a ms when the end of day to avoid all day wrapping to next day.\n event.end = endTime.subtractValue({ milliseconds: 1 }).JSDate; // building time\n }\n\n // adjust the time to appear as the same time locally ( but technically incorrect for building timezone )\n // will need to adjust the other way with drag and drop and click actions.\n event.start = utcToZonedTime(event.start, this.timezone); // local time\n event.end = utcToZonedTime(event.end, this.timezone); // local time\n\n event.cssClass = `selected ${this.mobile && this.expanded ? 'mobile' : ''} ${mode}`;\n if (this.currentBooking) {\n event.bumper = this.getBumpers(this.currentBooking, true);\n event.booking = this.currentBooking;\n }\n\n events.push(event);\n this.events = events.slice();\n this.updateTileColor();\n }\n\n public updateTileColor() {\n const pending_date = this.pendingDateTz.clone();\n const start = pending_date.setValue({ second: 0, millisecond: 0 });\n const end = start.addValue({ minutes: this.pendingDuration });\n const booked = this.events.filter((e) => !e.draggable); // this.events are in local time\n const conflict = this.hasConflict(start, end, booked);\n const isEvents = this.events.filter((e) => e.draggable);\n if(isEvents.length ) {\n isEvents[0].color = conflict ? colors.red : colors.blue;\n this.addMarginOnConflict = conflict ? true : false;\n \n } \n !this.expanded && this.warnIfItHasConflict.emit({room: this.space, hasConflict: conflict});\n }\n public displayClass(start: number, end: number) {\n const duration = end - start;\n return {\n duration,\n mode: duration > this.thirty_minutes_in_millis ? 'extended' : 'minimal',\n };\n }\n\n public setCalendarValue(dateTz: DateTZ) {\n let toDate = DateNow().startOfValue('minute');\n if (dateTz) {\n toDate = dateTz.startOfValue('minute');\n }\n if (!this.mobile && toDate.dateWeekday !== 7) {\n toDate = toDate.startOfValue('week');\n }\n this.updateCalendarWeekView.emit(toDate);\n this.weekRefresh.next();\n this.alternativeWeekStartDateTz = toDate;\n this.setDislayValues();\n }\n\n /**\n * Convert the true bulding based time object to a timestamp skewed to the local time\n *\n * @param buildingTz - DateTZ object of time in bulding timezone\n * @returns number - timestamp in local time skewed from bulding time\n */\n public convertTimezonedValueForCalendar(buildingTz: DateTZ) {\n return convertTimezonedTimestampToLocalDateTz(buildingTz.ms, this.timezone).ms;\n }\n\n public hasConflict(startTz, endTz, booked) {\n // Convert the start and end building times to the local timezone for comparison with the localized bookings.\n const localizedStartTime = startTz.ms;\n const localizedEndTime = endTz.ms;\n let email = this.space?.email || this.currentBooking?.room?.email;\n return booked.some((b) => {\n email = email || b.booking?.room?.email;\n // Booking here are local time to render on the calendar correctly\n const setup = b.booking?.setup[email] || 0;\n // R--- This weird augmented booking with start and end needs to be with DateTZ and a getter when ms is needed.\n const bookingStartTime = new DateTZ({ date: b.start.valueOf() }); // local times\n const bookingEndTime = new DateTZ({ date: b.end.valueOf() }); // local times\n const bstart = bookingStartTime.subtractValue({ seconds: setup }).ms;\n const breakdown = b.booking?.breakdown[email] || 0;\n const bend = bookingEndTime.addValue({ seconds: breakdown }).ms;\n\n if (\n (localizedStartTime >= bstart && localizedStartTime < bend) || // booking starts durring a meeting\n (localizedStartTime <= bstart && localizedEndTime > bstart) || // booking ends durring meeting\n (localizedStartTime >= bstart && localizedEndTime <= bend) || // booking starts and ends durring a meeting\n (localizedStartTime <= bstart && localizedEndTime >= bend) // booking overlaps entire meeting\n ) {\n return b.booking?.id !== this.currentBooking?.id;\n }\n return false;\n });\n }\n\n public eventTimesChanged({ event, newStart, newEnd }: CalendarEventTimesChangedEvent): void {\n const s = convertLocalTimestampToTimezonedDateTz(\n newStart.valueOf(),\n this.timezone\n );\n if (s.ms < Date.now()) return;\n // newStart and newEnd are local times from the calendar component\n // merging in with localized bookings in this.events\n this.events = this.events.map((iEvent) => {\n if (event.id && iEvent.id === event.id) {\n return {\n ...event,\n start: newStart,\n end: newEnd,\n };\n }\n return iEvent;\n }); // local times\n\n let buildingStartDateTz = new DateTZ(\n { date: newStart.valueOf()}\n );\n let buildingEndDateTz = new DateTZ(\n { date: Math.ceil(newEnd.valueOf()/900000)*900000 } //For latest bug in CNG-309, make sure end time follows a 15-min interval\n );\n\n // Clear out the seconds and miliseconds to avoid collision by seconds.\n buildingStartDateTz.setValue({ millisecond: 0, second: 0 });\n\n if (buildingStartDateTz < DateNow(new Date())) {\n // compare building time to now\n // Abandon updates if the past\n this.transformBookings();\n return;\n }\n\n let pendingDuration = Math.floor(\n (buildingEndDateTz.ms - buildingStartDateTz.ms) / 60 / 1000\n );\n // Make adjustments to the time and duration so the snap to behavior aligns\n // with the Mckinsey time and duration rules.\n const new_start = buildingStartDateTz.clone(); //new DateTZ({date: buildingNewStart.getTime()}); // building time\n if (pendingDuration >= 60) {\n // check that duration is inc of 1/2 hr\n const d = pendingDuration % 30;\n // if (d) {\n // pendingDuration = Math.floor(pendingDuration + (30 - d));\n // buildingEndDateTz = new_start.addValue({ minutes: pendingDuration }); // building time\n // }\n // check that the start time is 1/2 hr\n const m = parseInt(new_start.formatDate('m'), 10);\n const md = m % 30;\n // if (md) {\n // buildingStartDateTz = new_start.addValue({ minutes: md }); // building time\n // buildingEndDateTz = new_start.addValue({ minutes: pendingDuration }); // building time\n // }\n // Update snap to rules\n // this.eventSnapSize = 30; //done for CNG-309\n } else {\n // check that duration is inc of 1/4 hr\n const d = pendingDuration % 15;\n if (d) {\n // pendingDuration = Math.floor(pendingDuration + (15 - d));\n // buildingEndDateTz = new_start.addValue({ minutes: pendingDuration }); // building time\n }\n this.eventSnapSize = 15;\n }\n\n // Drag and Drop / Resize duration\n const dnd_duration = buildingEndDateTz.ms - buildingStartDateTz.ms;\n if (dnd_duration >= this.one_day_in_millis - 1) {\n // Add that millisecond back in so the angular calender drag and drop snapping still works.\n buildingEndDateTz = buildingEndDateTz.addValue({ milliseconds: 1 });\n }\n\n if (this.rules?.max_length) {\n if (dnd_duration / 60000 > this.rules?.max_length) {\n // Abandon updates if exceeeds max duration\n this.transformBookings();\n return;\n }\n }\n\n // Setup values for conflict checking, add on the setup and breakdown times form comparison\n let conflictCheckStartTime = buildingStartDateTz.clone();\n let conflictCheckEndTime = buildingEndDateTz.clone();\n // Setup and Breakdown\n if (this.currentBooking) {\n const setup = this.currentBooking.setup[this.currentBooking.space.email] || 0;\n if (setup) {\n const start = buildingStartDateTz.clone();\n conflictCheckStartTime = start.subtractValue({ seconds: setup });\n }\n const breakdown = this.currentBooking.breakdown[this.currentBooking.space.email] || 0;\n if (breakdown) {\n const end = buildingEndDateTz.subtractValue({ seconds: 1 });\n conflictCheckEndTime = end.addValue({ minutes: breakdown });\n }\n }\n\n // check existing events\n const start = conflictCheckStartTime;\n const end = conflictCheckEndTime;\n const booked = this.events.filter((e) => e.draggable === false); // this.events are in local time\n const conflict = this.hasConflict(start, end, booked);\n this.dateControl.setValue(start);\n if (conflict) {\n // Abandon updates if conflict\n this.transformBookings();\n return;\n }\n\n // check if the time or duration has changed\n if (this.pendingDateTz !== buildingStartDateTz) {\n this.pendingChange = true;\n } else if (this.pendingDuration !== pendingDuration) {\n this.pendingChange = true;\n }\n\n // set the new Pending Date\n this.pendingDateTz = convertLocalTimestampToTimezonedDateTz(buildingStartDateTz.ms, this.timezone); // building time\n this.pendingDuration = pendingDuration;\n\n this.setupEventName();\n this.transformBookings();\n }\n\n public hourClicked(event: CalendarClickEvent) {\n // convert the calender local input to the building times\n const buildingStartDate = convertLocalTimestampToTimezonedDateTz(\n event.date.valueOf(),\n this.timezone\n ); // return building time\n let startTz = buildingStartDate.clone();\n let endTz = startTz.addValue({ minutes: this.pendingDuration });\n\n if (buildingStartDate.ms < Date.now()) {\n // compare building time to now\n // Abandon past events\n return;\n }\n\n // this.pendingDate is in building time\n if (this.pendingDateTz.ms !== startTz.ms) {\n // comparing building to building\n // Setup and Breakdown\n if (this.currentBooking) {\n const setup = this.currentBooking.setup[this.currentBooking.space.email] || 0;\n if (setup) {\n startTz = startTz.subtractValue({ seconds: setup });\n }\n const breakdown =\n this.currentBooking.breakdown[this.currentBooking.space.email] || 0;\n if (breakdown) {\n endTz = endTz.addValue({ minutes: breakdown });\n }\n }\n\n // check existing events\n const booked = this.events.filter((e) => e.draggable === false);\n // building start and end time but localized bookings\n const conflict = this.hasConflict(startTz, endTz, booked);\n if (conflict) {\n // Abandon updates if conflict\n this.transformBookings();\n return;\n }\n\n this.pendingChange = true;\n this.pendingDateTz = buildingStartDate; // building time\n\n this.setupEventName();\n this.transformBookings();\n }\n }\n\n public displayConfirmationModal() {\n this.modal_data = {\n pendingDateTz: this.pendingDateTz, // building time , new time\n pendingDuration: this.pendingDuration,\n dateTz: this.dateTz, // building time, existing time\n duration: this.duration,\n space: new Space(this.space),\n rules: this.rules,\n bookingId: this.bookingId,\n currentBooking: this.currentBooking,\n };\n\n const dialogRef = this.dialog.open(RoomAvailabilityPreviewModalComponent, {\n data: this.modal_data,\n panelClass: 'mck-modal',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n\n dialogRef.componentInstance.submitForm.subscribe((d: any) => {\n // Apply the confirmed changes\n this.pendingChange = true;\n this.pendingDateTz = d.dateTz;\n this.pendingDuration = d.duration;\n\n dialogRef.componentInstance.applyChanges({\n dateTz: d.dateTz,\n duration: this.pendingDuration,\n pendingDateTz: this.pendingDateTz,\n pendingDuration: this.pendingDuration,\n });\n this.setupEventName();\n this.transformBookings();\n // Change View\n this.setCalendarValue(d.dateTz);\n });\n\n dialogRef.afterClosed().subscribe((d) => {\n // Update the current with pending record\n if (d) {\n // convert the local input values returned into the same time in the building timezone\n const buildingDate = convertLocalTimestampToTimezonedDateTz(\n d.dateTz.ms,\n this.timezone\n );\n this.dateTz = buildingDate;\n this.duration = d.duration;\n this.viewDateTz = new DateTZ({ \n date: DateTime.fromISO(buildingDate.formatDate('yyyy-MM-dd'))\n }).setValue({ hour: 12, minute: 0 })\n this.pendingChange = false;\n this.confirmChanges.emit({ ...d, mobile: this.mobile, save: true });\n } else {\n // this is ok\n const md = this.modal_data;\n this.dateTz = md.dateTz;\n this.duration = md.duration;\n this.pendingDateTz = md.dateTz;\n this.pendingDuration = md.duration;\n this.viewDateTz = new DateTZ({ \n date: DateTime.fromISO(md.dateTz.formatDate('yyyy-MM-dd'))\n }).setValue({ hour: 12, minute: 0 })\n this.pendingChange = false;\n // This is reverting the changes\n this.confirmChanges.emit({\n dateTz: md.dateTz,\n duration: this.duration,\n mobile: this.mobile,\n save: !!d,\n });\n this.setupEventName();\n this.transformBookings();\n this.weekRefresh.next();\n this.alternativeWeekStartDateTz = this.viewDateTz;\n this.setDislayValues();\n }\n });\n }\n\n public goToHelp() {\n window.open(Urls.Help);\n }\n\n public scrollTo() {\n if (this.scrollFired) return;\n this.timeout(\n 'scroll_to',\n () => {\n const ele = document.getElementById('calendarScrollContainer');\n if (ele) {\n ele.scrollTo({\n top: this.dayStartHour * 64,\n left: 0,\n behavior: 'smooth',\n });\n this.scrollFired = true;\n }\n },\n 500\n );\n }\n\n public toggleDatePicker() {\n this.showDatePicker = !this.showDatePicker;\n }\n\n public collapse() {\n this.handleExpand.emit(false);\n // Reset to the initial view\n this.pendingDateTz = this.dateTz; // = new Date(this.date);\n this.pendingDuration = this.duration;\n this.viewDateTz = new DateTZ({ \n date: DateTime.fromISO(this.dateTz.formatDate('yyyy-MM-dd'))\n }).setValue({ hour: 12, minute: 0 })\n this.pendingChange = false;\n this.setupEventName();\n this.transformBookings();\n this.dayRefresh.next();\n }\n\n public calendarBack() {\n let today = this.alternativeWeekStartDateTz; // new DateTZ({date: this.alternativeWeekStartDate});\n if (this.mobile) {\n today = today.subtractValue({ days: 1 });\n } else {\n today = today.subtractValue({ weeks: 1 }).startOfValue('day');\n }\n this.updateCalendarWeekView.emit(today);\n this.weekRefresh.next();\n this.alternativeWeekStartDateTz = today;\n this.setDislayValues();\n }\n\n public calendarSpan() {\n let today = this.pendingDateTz; // new DateTZ({date: this.pendingDate.valueOf()});\n if (this.mobile || !this.expanded) {\n this.date_span.start = today.startOfValue('day').ms;\n this.date_span.end = today.endOfValue('day').ms;\n } else {\n this.date_span.start = today.startOfValue('week').ms;\n this.date_span.end = today.endOfValue('week').ms;\n }\n }\n\n public calendarCenter() {\n let today = this.pendingDateTz.startOfValue('day');\n if (!this.mobile) {\n today = today.startOfValue('week');\n }\n\n this.updateCalendarWeekView.emit(today);\n this.weekRefresh.next();\n this.alternativeWeekStartDateTz = today;\n this.setDislayValues();\n }\n\n public calendarForward() {\n let today = this.alternativeWeekStartDateTz // new DateTZ({date: this.alternativeWeekStartDate});\n if (this.mobile) {\n today = today.addValue({ days: 1 });\n } else {\n today = today.addValue({ weeks: 1 }).startOfValue('day');\n }\n this.updateCalendarWeekView.emit(today);\n this.weekRefresh.next();\n this.alternativeWeekStartDateTz = today;\n this.setDislayValues();\n }\n\n public toggleWeekend() {\n this.showWeekend = !this.showWeekend;\n this.setupEventName();\n }\n}\n","
\n
\n \n \n
\n
\n \n \n
\n
\n
\n

Room Availability

\n

{{space.local_name}}

\n

{{building?.name}}, {{level?.name}}, {{building?.address}}

\n
\n
\n
\n
\n \n \n \n
\n
\n {{weekViewRangeText}}\n \n \n
\n \n Show Weekend\n \n
\n
\n
\n \n\n \n
\n \n {{ day.date | calendarDate:'weekViewColumnHeader':locale }} {{ day.date | calendarDate:'weekViewColumnSubHeader':locale }}\n

{{ isEventDate(day) ? '(Current Selection)' : '' }}

\n
\n
\n \n\n \n \n
\n
\n
\n
\n \n \n &ngsp;\n \n \n
\n \n
\n
\n
\n\n
\n
\n \n \n
\n
\n \n\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n OnChanges,\n Output,\n ViewContainerRef,\n ViewChild\n} from '@angular/core';\nimport {\n AbstractControl,\n FormControl,\n FormGroup,\n FormGroupDirective,\n Validators\n} from '@angular/forms';\nimport {\n BehaviorSubject,\n Observable,\n of,\n Subject\n} from 'rxjs';\nimport {\n catchError,\n debounceTime,\n distinctUntilChanged,\n first,\n map,\n switchMap,\n take,\n withLatestFrom,\n} from 'rxjs/operators';\nimport {\n Store\n} from '@ngrx/store';\nimport {\n checkCollisions,\n Booking,\n User,\n UsersService,\n BookingFormData,\n selectActiveForm,\n SpacesService,\n ApplicationService,\n} from '@mckinsey-converge/data-common';\nimport {\n matchToHighlight\n} from '@mckinsey-converge/base';\n\nimport {\n BaseTemplateComponent,\n SelectOption\n} from '@mckinsey-converge/ui';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\n@Component({\n selector: 'app-room-booking-details-form',\n templateUrl: './room-booking-details-form.component.html',\n styleUrls: ['./room-booking-details-form.component.scss']\n})\nexport class RoomBookingDetailsFormComponent extends BaseTemplateComponent implements OnInit, OnChanges {\n @ViewChild('formRef')\n public formRef: FormGroupDirective;\n /** Number of characters needed before a search will start */\n @Input() public limit = 3;\n /** When the value changes, the form is submitted */\n @Input() public triggerSubmit = '';\n /** Need booking details */\n @Input() public booking: Booking = null;\n /** Data returned to parent */\n @Output() public submitForm = new EventEmitter();\n /** Data returned to parent */\n @Output() public validateForm = new EventEmitter();\n /** Current User */\n public currentUser: User;\n /** Host list to display */\n public host_list: User[];\n /** User list to display from the Attendees search */\n public user_list: User[];\n /** Whether user list is loading */\n public loading: boolean;\n /** Whether to show the attendees hint */\n public showHint = false;\n /** Attendee Input / Search String */\n public searchString: string;\n /** List of users from an API search */\n public searchResults: Observable;\n /** Subject holding the value of the search */\n public searchSubject = new Subject();\n /** Host field options */\n public hostOptions = [];\n /** Attendees options */\n public options = new BehaviorSubject[]>([]);\n /** Selected Attendees */\n public selectedOptions = new BehaviorSubject[]>([]);\n public selectedUsers = new BehaviorSubject[]>([]);\n public needs_charge_code = false;\n public has_delegate = false;\n public available: boolean = null;\n public notesHandle = null;\n public noteValidationClass = '';\n public selectedCompanies = new BehaviorSubject[]>([]);\n public companyOptions = new BehaviorSubject[]>([]);\n\n /** Data collected on this form */\n public bookingFormGroup = new FormGroup({\n organiser: new FormControl(),\n title: new FormControl('', [ Validators.minLength(1)]), //Validators.pattern(\"[^=`~!@#$%*{};:'\\\",_.<>]*\")\n attendees: new FormControl(),\n code: new FormControl('', [Validators.minLength(4), Validators.pattern(/^[a-zA-Z0-9]*$/)]),\n notes: new FormControl(),\n head_count: new FormControl(1, [Validators.required, Validators.min(1)]),\n user_list: new FormControl(),\n host_list: new FormControl(),\n company: new FormControl(),\n opt_out: new FormControl()\n });\n action: string;\n // Indecates that processing request to check availability of breakdown if special requirement being added by user\n checkingBreakdown: boolean = false;\n\n public get invalid_charge_error(): string {\n if (this.bookingFormGroup.controls.code.errors?.required) {\n return 'Charge Code is required';\n }\n if (this.bookingFormGroup.controls.code.errors?.minlength) {\n return 'Charge Code must be at least four characters';\n }\n if (this.bookingFormGroup.controls.code.errors?.pattern) {\n return 'Charge Code cannot contain spaces or special characters';\n }\n return '';\n }\n\n public get headCountControl(): AbstractControl {\n return this.bookingFormGroup.get('head_count');\n }\n\n constructor(\n private _spaces: SpacesService,\n private _snackBar: MatSnackBar,\n private store: Store,\n vcRef: ViewContainerRef,\n private _service: ApplicationService,\n private _users: UsersService) {\n super(vcRef);\n }\n\n public ngOnInit(): void {\n super.ngOnInit();\n this.subscription('currentUser', this.store.select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n })\n );\n\n this._users.initialised.pipe(first((_) => _)).subscribe(() => {\n const user: User = this._users.current;\n const delegates = user.delegates.map((del) => {\n // the kludgy or new User is for when the user service isn't ready.\n const ifUser = this._users.find(del.email);\n return ifUser ? \n new User({ email: ifUser.email, name: ifUser.name, opt_out: del.opt_out }) : \n new User({ email: del.email, name: del.email.split('@')[0].split('_').map((s) => s.charAt(0).toUpperCase() + s.substring(1))\n .join(' ')\n , opt_out: del.opt_out });\n\n // (del) => new User({ email: del.email, name: del.email.split('@')[0].split('_').join(' '), opt_out: del.opt_out })\n });\n if (delegates.length) {\n this.has_delegate = true;\n }\n this.host_list = [user].concat(delegates);\n this.hostOptions = this.host_list.map(h => ({ display: h.name, value: h.email, meta: { user: h } }));\n });\n\n // if we have an active form, refill the information here once.\n this.subscription('reduxData', this.store.select(selectActiveForm)\n .pipe(take(1))\n .subscribe((next: BookingFormData | undefined) => {\n if (next) {\n // Get the Equipment charge code mandatory requirement\n const { filters, settings } = next.selectedRoom?.space;\n const roomBasedEqCode = filters?.equipment_code || settings?.equipment_code;\n const officeBasedEqCode = next.selectedRoom?.building?.required?.equipment_code;\n this.needs_charge_code = roomBasedEqCode !== undefined ? roomBasedEqCode : officeBasedEqCode !== undefined ? officeBasedEqCode: false;\n \n\n if (this.needs_charge_code) {\n this.bookingFormGroup.controls.code.setValidators([Validators.required, Validators.minLength(4), Validators.pattern(/^[a-zA-Z0-9]*$/)]);\n }\n // build the initial options\n const options = [];\n const attendees = next?.attendees || [];\n const organiser = next?.organiser || { display: this.currentUser.name , value: this.currentUser.email, meta: { external: false, user: this.currentUser }};\n const company = next?.company || [];\n\n const opt_out = next?.opt_out || false;\n this.action = next.action || 'new';\n // Load the saved form\n this.bookingFormGroup.setValue({\n organiser,\n title: next.title || '',\n attendees, // options will display current user\n code: next.code || '',\n notes: next.notes || '',\n head_count: next.head_count || '',\n user_list: [],\n host_list: [],\n company,\n opt_out: opt_out\n });\n this.selectedOptions.next(attendees);\n this.options.next(attendees);\n this.selectedCompanies.next(company);\n this.companyOptions.next(company);\n }\n })\n );\n\n // Listen for input changes\n this.searchResults = this.searchSubject.pipe(\n debounceTime(500),\n distinctUntilChanged(),\n switchMap((query) => {\n this.loading = true;\n return query.length >= this.limit\n ? this._users.query({\n q: query,\n cache: 60 * 1000\n })\n : Promise.resolve([]);\n }),\n catchError((_) => of([])),\n map((list: User[]) => {\n this.loading = false;\n return list;\n })\n );\n\n // Process API results\n this.subscription(\n 'search_results',\n this.searchResults.subscribe((list) => {\n this.user_list = list;\n this.user_list.forEach((i: any) => {\n i.match_name = matchToHighlight(i.match_name);\n i.match_email = matchToHighlight(i.match_email);\n return i;\n });\n\n // Build options from returned users\n const options = this.user_list.map(u => {\n return {\n value: u.email,\n display: `${u.name} ${u.email}`,\n groupId: 'one',\n groupHeader: true,\n shortDisplay: `${u.name}`,\n meta: { external: false, user: u },\n };\n });\n // Add the manual option to the beginning of the array\n options.unshift({\n value: this.searchString,\n display: this.searchString,\n groupId: 'one',\n groupHeader: true,\n shortDisplay: this.searchString,\n meta: { external: true, user: null },\n });\n // this.loading = false;\n this.options.next(options);\n })\n );\n\n this.bookingFormGroup.valueChanges.subscribe(val => {\n\n clearTimeout(this.notesHandle);\n if (val?.notes?.length) {\n this.checkingBreakdown = true;\n \n // Check for conflicts if adding a note and default setup and breakdown times.\n this.notesHandle = setTimeout(() => {\n this.validateForm.emit(false);\n const booking = this.booking.clone();\n const setup = {};\n setup[booking.space.email] = booking.setup[booking.space.email] || 900;\n const breakdown = {};\n breakdown[booking.space.email] = booking.breakdown[booking.space.email] || 900;\n\n const mockBooking = new Booking({\n id: booking.id,\n room: booking.space,\n start_epoch: booking.startDateTz.seconds,\n end_epoch: booking.endDateTz.seconds,\n setup,\n breakdown,\n });\n\n checkCollisions(\n this._spaces,\n mockBooking\n ).then((bookable: boolean) => {\n this.checkingBreakdown = false;\n this.available = bookable;\n // this.validateForm.emit(true);\n this.validateForm.emit(this.bookingFormGroup.valid);\n this.noteValidationClass = bookable === false ? 'booked' : 'available';\n // this.loading = false;\n }).catch(() => {\n this.checkingBreakdown = false;\n this.available = false;\n this.validateForm.emit(false);\n this.noteValidationClass = 'booked';\n // this.loading = false;\n\n return;\n });\n }, 200);\n } else {\n this.checkingBreakdown = false;\n this.available = null;\n this.noteValidationClass = '';\n this.validateForm.emit(this.bookingFormGroup.valid);\n }\n\n });\n }\n\n public setOrganiserOptOut(opt_out) {\n this.bookingFormGroup.controls.opt_out.setValue(opt_out);\n }\n\n public updateOrganiser(user) {\n console.log(user);\n }\n\n /** Listen for changes */\n public ngOnChanges(changes: any) {\n if (changes.triggerSubmit && this.formRef) {\n // Trigger the form submit and validation\n this.formRef.onSubmit(undefined);\n }\n }\n\n /**\n * \n * @param key : formcontrol name \n * Function trim value being submitted with only spaces/beginning/end \n */\n public trim(key: string): void {\n this.bookingFormGroup.get(key).setValue(this.bookingFormGroup.get(key).value.trim());\n }\n\n /** Toggle an attendee on/off */\n public toggle(option: SelectOption) {\n const inputValue = option.value\n .split(' ')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n\n let inputValueEmail = '';\n // Check if inputValue is a valid email\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(inputValue)) {\n // If not, replace all spaces with underscores and append a random guest email string\n inputValueEmail = inputValue.replace(/\\s+/g, '_') + `${Math.floor(Math.random() * 99999)}@guest.mckinsey.com`;\n }\n\n // Check for character limit\n if (\n // this.selectedOptions.value.some((option: SelectOption) => option.value === inputValue) ||\n inputValue.length > 50\n ) {\n this._service.notifyWarn('Attendee name cannot exceed 50 characters');\n return;\n }\n\n this.selectedOptions\n .pipe(\n take(1),\n withLatestFrom(this.options),\n map(([selectedOptions, options]) => {\n let opts = selectedOptions.slice();\n const found = opts.some((v) => inputValue === v.value);\n if (found) {\n opts = opts.filter((v) => inputValue !== v.value);\n } else {\n const color = inputValue.toLowerCase().includes('mckinsey.')\n ? 'internal'\n : 'external';\n opts.push({\n ...option,\n value: inputValueEmail,\n display: inputValue,\n shortDisplay: inputValue,\n meta: {\n ...option.meta,\n color,\n },\n });\n }\n\n return opts;\n })\n )\n .subscribe((next) => {\n if (!this.bookingFormGroup.controls.head_count.touched) {\n this.bookingFormGroup.controls.head_count.setValue(next.length + 1);\n }\n this.selectedOptions.next(next);\n });\n }\n\n public clearHeadcount() {\n this.headCountControl.setValue(1);\n }\n\n /** Return the data to the listening parent */\n public onSubmitForm() {\n this.bookingFormGroup.markAllAsTouched();\n // a bit of an issue that the form state isn't saved unless valid\n if (this.bookingFormGroup.valid) {\n const form_data = this.bookingFormGroup.value;\n form_data.user_list = this.user_list;\n form_data.host_list = this.host_list;\n form_data.has_delegate = this.has_delegate;\n this.submitForm.emit(form_data);\n }\n }\n\n /** Take the input and feed it back to the parent to add to attendees array */\n public updateAttendeeOptionsFromUserInput(v: string) {\n const l = v.length;\n const options = this.selectedOptions.value.slice();\n if (!l) {\n this.options.next([]);\n return;\n }\n if (l > 2) {\n // Triggers the API call to search for the user input\n this.searchSubject.next(v);\n }\n\n options.unshift({\n value: v,\n display: v,\n groupId: 'one',\n groupHeader: true,\n shortDisplay: v,\n meta: { external: true },\n });\n this.searchString = v;\n this.options.next(options);\n }\n\n public toggleAttendeesHint() {\n this.showHint = !this.showHint;\n }\n\n public updateCompanyOptionsFromUserInput(v: string) {\n if (!v.length) {\n this.companyOptions.next([]);\n return;\n }\n this.companyOptions.next([{\n value: v,\n display: v,\n groupId: 'two',\n groupHeader: true,\n shortDisplay: v,\n }]);\n }\n\n public toggleCompany(option: SelectOption) {\n this.selectedCompanies.pipe(\n take(1),\n withLatestFrom(this.companyOptions),\n map(([selectedCompanies, options]) => {\n let opts = selectedCompanies.slice();\n const found = opts.some(v => option.value === v.value);\n if (found) {\n opts = opts.filter(v => option.value !== v.value);\n } else {\n opts.push(option);\n }\n\n return opts;\n })\n ).subscribe(next => {\n this.selectedCompanies.next(next);\n });\n }\n}\n","\n
\n
\n
\n \n Meeting Title*\n \n \n \n \n
\n \n {{ ( bookingFormGroup?.get('title').errors && bookingFormGroup?.get('title').hasError('pattern')) ? 'Some special characters (^=`~!@#$%*{};:\\'_\\\",.\\<>) are not allowed' : 'Meeting Title is required'}}\n \n
\n
\n
\n
\n \n \n
\n
\n
\n Optout email notification \n
\n\n
\n \n \n \n Why do we need this?\n
\n
\n Attendee emails are used for visitor management purposes.\n Converge won't send any emails to attendees.\n
\n \n
\n\n
\n
\n \n \n
\n
\n \n Charge Code{{ needs_charge_code ? '*' : '' }}\n \n \n \n \n
\n \n {{ invalid_charge_error }}\n \n
\n
\n
\n
\n \n Headcount estimate*\n \n \n \n \n
\n \n Headcount is required\n \n
\n
\n
\n
\n\n
\n
\n \n Additional requirements (e.g room setup, equipment...)\n \n \n \n \n \n \n

Checking breakdown availability for selected date/time...

\n

\n \n A set up and breakdown time of 15 mins was added to either side\n of your booking to cater for these additional requirements.\n

\n

\n \n A set up and break down time of 15mins was added to either side of your booking to cater for these additional requirements. This has resulted in a conflict with another booking. Please adjust your booking accordingly.\n

\n
\n
\n
\n
\n
\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n OnChanges,\n Output,\n ViewContainerRef,\n ViewChild\n} from '@angular/core';\nimport {\n FormControl,\n FormGroup,\n FormGroupDirective,\n Validators\n} from '@angular/forms';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\nimport { closestToTimeSlot, closestToTimeSlotTz, resetSecondsOnTimestamp } from '@mckinsey-converge/base';\n\nimport {\n distinctUntilChanged,\n map,\n skip,\n take,\n withLatestFrom\n} from 'rxjs/operators';\nimport {\n select,\n Store\n} from '@ngrx/store';\nimport {\n buildingStateSelector,\n selectBuildingOptionsGroupedByCity\n} from '@mckinsey-converge/buildings';\nimport {\n Building,\n BuildingCity,\n flattenDisplayOffices,\n toggleSelectedByGroup,\n storeBookingFormData,\n BookingFormData,\n bookingTypeOptions,\n DEFAULT_BOOKING_DURATION,\n defaultRoomSizeOption,\n internalBookingTypeOption,\n roomSizeOptions,\n selectActiveForm,\n ApplicationService,\n roomSizeOptionsKiosk,\n\t\tRecurrencePeriod,\n generateBookingForm,\n SeriesAction,\n setRecurrenceStartsTime\n} from '@mckinsey-converge/data-common';\nimport { BehaviorSubject } from 'rxjs';\nimport {\n BaseTemplateComponent,\n SelectOption\n} from '@mckinsey-converge/ui';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { DateTime } from 'luxon';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Booking } from '../../../../../../libs/data-common/src';\nimport * as cloneDeep from 'lodash/cloneDeep';\n@Component({\n selector: 'app-room-booking-form',\n templateUrl: './room-booking-form.component.html',\n styleUrls: ['./room-booking-form.component.scss']\n})\nexport class RoomBookingFormComponent extends BaseTemplateComponent implements OnInit, OnChanges {\n @ViewChild('formRef')\n formRef: FormGroupDirective;\n\n @Output()\n public submitForm = new EventEmitter();\n\n @Input()\n public showCancel = false;\n\n @Input()\n public triggerSubmit: number;\n\n /**\n * Used only if showCancel is true.\n */\n @Output()\n public cancelSubmit = new EventEmitter();\n\n // fromDate is the selected date\n public fromDate: number = closestToTimeSlot(DateTime.now(), 15).valueOf(); // R--- depreciate\n /** DateTZ object of the date and time that the date and time picker will begin it's options from */\n public fromDateTz: DateTZ = closestToTimeSlotTz(new DateTZ({ date: Date.now(), is_local_tz: false }), 15);\n public bookingTypeOptions = bookingTypeOptions;\n public roomSizeOptions = roomSizeOptions;\n public localTimezone = DateNow(new Date()).building_tz;\n public localStart = \"\";\n public localEnd = \"\"\n\n public formGroup: FormGroup = new FormGroup({\n id: new FormControl('', []), // used in case of recurring series edit\n location: new FormControl([], [Validators.required]),\n date: new FormControl(this.fromDate, [Validators.required]),\n dateTz: new FormControl(this.fromDateTz, [Validators.required]), // starts out as the next closest available time interval\n duration: new FormControl(DEFAULT_BOOKING_DURATION, [Validators.required]),\n bookingType: new FormControl(internalBookingTypeOption),\n roomSize: new FormControl(defaultRoomSizeOption),\n selectedRoom: new FormControl({}),\n timezone: new FormControl(\"\"),\n offset: new FormControl(\"\"),\n\n\t\trecurrence_period: new FormControl(RecurrencePeriod.WEEKLY),\n recurrence_interval: new FormControl( 1),\n recurrence_endTz: new FormControl( new DateTZ({ date: 1 }).addValue({days: 1})),\n recurrence_count: new FormControl( 0),\n is_recurrent: new FormControl(null),\n recurrence_starts: new FormControl( []),\n recurrence_exceptions: new FormControl([]),\n recurrence_pattern: new FormControl(RecurrencePeriod.WEEKLY), //Helper value to store the last selected pattern (daily, weekly, monthly),\n recurrence_days: new FormControl( []),\n\n ignore: new FormControl('', []), // used in case of recurring series edit\n // TODO, there's a few missing from interface BookingFormData, libs/data-common/src/lib/booking/booking.form.data.ts\n });\n\n\n public options = new BehaviorSubject[]>([]);\n\n public selectedOptions = new BehaviorSubject[]>([]);\n\n constructor(private store: Store,\n // private _service: ApplicationService,\n vcRef: ViewContainerRef, \n private _snackBar: MatSnackBar,\n private _service: ApplicationService,\n ) {\n super(vcRef);\n // if(this._service?.kioskFormFilter) {\n // this.formGroup.setValue({\n // roomSize: roomSizeOptions[3]\n // })\n // }\n }\n\n public ngOnInit(): void {\n\n\n super.ngOnInit();\n // R--- Complicated, need the TZ aware inputs and to not init those inputs until the building timezone is available.\n // R--- See if there's any way to make the timezone retrieval less fragile.\n\n // if we have an active form, refill the information here once.\n // Doesn't run on initial steps, only if you go back to the home page\n this.subscription('reduxData', this.store.select(selectActiveForm)\n .pipe(take(1))\n .subscribe((next: BookingFormData | undefined) => {\n if (next) {\n // set the fromDate correctly\n this.fromDateTz = next.is_recurrent ? next.dateTz : closestToTimeSlotTz(DateNow(), 15); // R--- shouldn't this actually be the current date start of day to make all the options available?\n\n const form = cloneDeep(next);\n this.formGroup.patchValue({\n ...form,\n }, { emitEvent: true });\n\n // this.formGroup.markAllAsTouched();\n // this.formGroup.updateValueAndValidity();\n\n }\n })\n );\n\n // R--- I only see this fire when the modal opens or going to the home page\n this.subscription('formChanges', this.formGroup.valueChanges\n .pipe(\n skip(1), // initial form changes\n distinctUntilChanged())\n .subscribe((next) => {\n const timezone = next.timezone || this.localTimezone\n /**\n * When the selected date changes update the time picker's start time\n * to the nearest available slot of the current day\n */\n this.fromDateTz = next.is_recurrent ? next.dateTz : closestToTimeSlotTz(DateNow(), 15);\n\n /**\n * When the new selected date arrives, update the coachmark displayed below the date time picker\n */\n this.updateCoachmarkTimes(timezone);\n\n })\n );\n\n this.subscription('buildings', this.store.pipe(\n select(buildingStateSelector),\n select(selectBuildingOptionsGroupedByCity),\n map((grouped: Map) => {\n return flattenDisplayOffices(grouped);\n }),\n distinctUntilChanged()\n )\n .subscribe(next => {\n this.options.next(next);\n }));\n }\n\n public ngOnChanges(changes: any) {\n if (changes.triggerSubmit && this.formRef) {\n // Trigger the form submit and validation\n this.formRef.onSubmit(undefined);\n }\n }\n\n public onSubmitForm() {\n if(this.formGroup.controls?.is_recurrent?.value){\n setRecurrenceStartsTime(this.formGroup)\n }\n // Check for past date time\n const formGroupData = this.formGroup.value;\n const is_past = this._checkDateInPast();\n if (is_past) {\n this._service.notifyWarn('Start Time updated to after current time, please click search again.');\n return;\n } else {\n this.formGroup.setValue({\n ...formGroupData,\n date: resetSecondsOnTimestamp(formGroupData.dateTz.ms),\n dateTz: formGroupData.dateTz.setValue({ millisecond: 0, second: 0 })\n });\n }\n this.formGroup.markAllAsTouched();\n if (this.formGroup.valid) {\n this.submitForm.emit(this.formGroup.value);\n }\n }\n\n // public openSnackBar(message: string, action: string) {\n // this._snackBar.open(message, action, {\n // duration: 5000,\n // panelClass: ['yellow-snackbar']\n // });\n // }\n\n // Fires when the location selector value is changed\n public toggle(option: SelectOption) {\n // update the selected value\n this.selectedOptions.pipe(\n take(1),\n withLatestFrom(this.options),\n map(([selectedOptions, options]) => {\n return toggleSelectedByGroup(options, selectedOptions, option);\n })\n ).subscribe(next => {\n // deselecting the location option sets the timezone to local so convert.\n const formGroupDate = this.formGroup.value;\n if (!next.length) {\n this.formGroup.setValue({\n ...this.formGroup.value,\n timezone: this.localTimezone,\n date: formGroupDate.dateTz.ms,\n dateTz: formGroupDate.dateTz.toZone(this.localTimezone)\n });\n } else {\n const buildingTimezone = next[0]?.meta?.building?.timezone || next[0]?.meta?.city?.timezone;\n this.formGroup.setValue({\n ...this.formGroup.value,\n timezone: buildingTimezone,\n date: formGroupDate.dateTz.ms,\n dateTz: formGroupDate.dateTz.toZone(buildingTimezone)\n });\n }\n this._checkDateInPast();\n // Must fire last or location picker will be buggy.\n this.selectedOptions.next(next);\n });\n }\n\n private _checkDateInPast() {\n // Check for past date time\n const formGroupData = this.formGroup.value;\n const date = new DateTZ({ date: this.formGroup.value.dateTz.ms, building_tz: formGroupData.timezone, is_local_tz:false }).addValue({ seconds: 30 })\n const now = DateNow(new Date())\n if (now.isAfterDate(date)) {\n // Reset the start time if in the past\n const closestTz = closestToTimeSlotTz(new DateTZ({ date: Date.now(), is_local_tz: false, building_tz: formGroupData.timezone }).addValue({ minutes: 1 }), 15)\n const prevClosestTz = closestTz.subtractValue({minutes: 15})\n const prevDateTz = prevClosestTz.addValue({ seconds: 30 });\n // R-- why do I do this on submit? move to a another method.\n if(now.isAfterDate(prevDateTz)){\n this.fromDateTz = closestTz;\n }else{\n this.fromDateTz = prevClosestTz;\n }\n\n this.formGroup.setValue({\n ...formGroupData,\n date: resetSecondsOnTimestamp(this.fromDateTz.ms),\n dateTz: this.fromDateTz.setValue({ millisecond: 0, second: 0 })\n });\n return true;\n }\n return false;\n }\n\n private updateCoachmarkTimes(timezone: string) {\n // Resolve the problem that locally I might have the same TZ offset but the names don't match.\n const localTzOffset = DateTime.now().setZone(this.localTimezone).offset;\n const buildingTzOffset = DateTime.now().setZone(timezone).offset;\n\n this.fromDateTz = new DateTZ({ date: this.fromDateTz.ms, is_local_tz: false, building_tz: timezone });\n\n if (localTzOffset !== buildingTzOffset) {\n const startDate = this.formGroup.value.dateTz.clone();\n this.localStart = startDate.formatLocalDate(\"h:mma\");\n this.localEnd = startDate.addValue({ minutes: this.formGroup.value.duration }).formatLocalDate(\"h:mma\");\n } else {\n // No location is selected so coachmark is hidden\n this.localStart = \"\";\n this.localEnd = \"\";\n }\n }\n}\n","\n
\n \n\n\n
\n \n\n \n \n \n \n
\n Please be aware that this booking starts at {{localStart}} and ends at {{localEnd}} in your local timezone.\n
\n
\n\n
\n
\n Recurring booking\n
\n \n \n\n
\n\n \n\n \n \n \n \n \n
","import { Component, ViewEncapsulation, Inject } from '@angular/core';\nimport { BookingFormData, storeBookingFormData, SeriesAction} from '@mckinsey-converge/data-common';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { Store } from '@ngrx/store';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n// import { Router, ActivatedRoute } from '@angular/router';\n\n@Component({\n selector: 'app-room-booking-modal',\n template: `\n
\n \n \n \n \n \n \n \n \n
\n `,\n styleUrls: ['./room-booking-modal.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class RoomBookingModalComponent extends BaseDirective {\n public trigger = Date();\n\n constructor(\n private store: Store,\n private dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private _data: any ) {\n super();\n }\n\n public triggerSubmit() {\n this.trigger = Date();\n }\n\n public submitForm(next: BookingFormData) {\n /// submit\n\n const ignore = this._data?.action === SeriesAction.EDIT ? next.id : null;\n const bookable = this._data?.action === SeriesAction.EDIT || null;\n\n this.store.dispatch(storeBookingFormData({\n payload: {\n ...next,\n ignore, // ignore id in case of recurring edit series\n bookable, // true in case of recurring edit series\n action: this._data?.action || '' // 'edit' in case of recurring edit series\n }\n }));\n this.close('DoNotClearActiveForm'); // do not clear active form if for submit as form need forther in result module\n this._data && this._data.navigateTo && this._data.navigateTo(); // navigate to result in case of staff recurring edit\n\n }\n\n public close(flag: string = '') {\n this.dialogRef.close(flag);\n }\n}\n","import {\n Component,\n OnInit,\n OnDestroy\n} from '@angular/core';\nimport {\n select,\n Store\n} from '@ngrx/store';\nimport { BuildingStoreState } from '@mckinsey-converge/buildings';\nimport {\n AlertMode,\n SelectOption\n} from '@mckinsey-converge/ui';\nimport { loadOrganisations } from '@mckinsey-converge/organisation';\nimport { BaseDirective,\n dateBuildingFormatString,\n} from '@mckinsey-converge/base';\nimport {\n Booking,\n User,\n Building,\n BuildingCity,\n IEngineResponse,\n flattenDisplayOffices,\n selectCancelledBookingsResultsFromState,\n selectHomepageBookingsResultsFromState,\n selectPastBookingsResultsFromState,\n BookingStoreState,\n BookingFormData,\n clearBookingFormData,\n storeBookingFormData,\n BookingsService\n} from '@mckinsey-converge/data-common';\nimport { TopBarHeaderMode } from 'src/app/components/topbar-header/topbar-header.component';\nimport { Urls } from 'src/app/utilities/urls';\nimport {\n ActivatedRoute,\n Router\n} from '@angular/router';\nimport { MatDialog } from '@angular/material/dialog';\nimport { BookingDetailsModalComponent } from '../booking-details-modal/booking-details-modal.component';\nimport { loadRoomsForResults } from '@mckinsey-converge/rooms';\nimport { loadBookingsWithQuery, MyBookingsStoreState } from '@mckinsey-converge/bookings';\nimport { UserStoreState } from '@mckinsey-converge/user';\nimport {\n BehaviorSubject,\n} from 'rxjs';\nimport {\n distinctUntilChanged,\n elementAt,\n map,\n take,\n} from 'rxjs/operators';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport {\n mapResultsToViewModels,\n BookingResultsViewModel\n} from 'src/app/booking/manage-bookings/manage-bookings.viewmodel';\nimport {\n buildingStateSelector,\n selectBuildingOptionsGroupedByCity\n} from '@mckinsey-converge/buildings';\nimport { DateNow } from '@mckinsey-converge/date-tz';\n\nexport type RoomBookingStoreState = BookingStoreState & BuildingStoreState & MyBookingsStoreState & UserStoreState;\n\n@Component({\n selector: 'app-room-booking',\n template: `\n
\n
\n \n \n
\n
\n
\n
\n

Meeting Room Booking

\n
\n \"Booking\n
\n
\n
\n
\n
\n \n \n \n \n
\n
\n
\n

Your Bookings

\n
\n
\n \n
You have no upcoming bookings
\n
\n
\n \n \n
\n
\n \n \n \n \n
\n
\n \n Manage\n
\n
\n
\n
\n
\n `,\n styleUrls: ['./room-booking.component.scss']\n})\nexport class RoomBookingComponent extends BaseDirective implements OnInit, OnDestroy {\n public TopBarHeaderMode = TopBarHeaderMode;\n public AlertMode = AlertMode;\n\n public width = 16;\n\n // public showBanner = true;\n public showBookings = false;\n public showManageButtonA = false;\n public showManageButtonB = false;\n public showManageButtonC = false;\n public dateString: string;\n\n public homepageBookingResults = new BehaviorSubject>(LoadingModel.empty());\n public pastBookingResults = new BehaviorSubject>(LoadingModel.empty());\n public upcomingBookings: BookingResultsViewModel[];\n public buildings = new BehaviorSubject[]>([]);\n public reloading = false;\n\n /** Current User */\n public currentUser: User;\n master_booking: BookingResultsViewModel;\n allBookings: any[];\n\n constructor(private store: Store,\n private router: Router,\n private route: ActivatedRoute,\n private _bookings: BookingsService,\n private dialog: MatDialog) {\n super();\n this.dateString = dateBuildingFormatString(DateNow(new Date()));\n }\n\n public ngOnDestroy() {\n if (typeof window === 'object') {\n window.onbeforeunload = undefined;\n }\n\t\t\t\t// clear interval\n\t\t\t\tthis.clearInterval('refreshBookings');\n }\n\n public ngOnInit(): void {\n // only run on window onload\n if (typeof window === 'object') {\n window.onbeforeunload = (event) => {\n const e = event || window.event;\n this.store.dispatch(clearBookingFormData())\n return e;\n };\n }\n\n this.store.dispatch(loadOrganisations.request());\n\n this.subscription('buildings', this.store.pipe(\n select(buildingStateSelector),\n select(selectBuildingOptionsGroupedByCity),\n map((grouped: Map) => {\n return flattenDisplayOffices(grouped);\n }),\n distinctUntilChanged()\n ).subscribe(next => {\n this.buildings.next(next);\n // console.log('on buildings ')\n // this.refresh('homepage');\n }));\n\n this.subscription('currentUser', this.store.select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User) => {\n // Once we know we have the user loaded\n this.currentUser = new User(user);\n this.store.dispatch(loadBookingsWithQuery({ 'email': this.currentUser.email, 'from': DateNow(new Date()).ms, 'target': 'homepage' }));\n // start the timer at the top of the minute;\n // const offset = DateNow(new Date()).startOfValue('minute').addValue({ minutes: 1 }).ms - DateNow(new Date()).ms;\n // fetch it on one minute interval now that there is room data.\n // setTimeout(() => {\n // console.log('on setTimeout ')\n // this.refresh('homepage')\n this.interval('refreshBookings', () => {\n\t\t\t\t\t\t\t\t\t\t\tthis.refresh('homepage')\n\t\t\t\t\t\t\t\t\t\t}, 60 * 1000);\n // }, offset + 5000)\n\n })\n );\n\n this.reloading = true;\n this.subscription('homepageResults', this.store.pipe(\n select(selectHomepageBookingsResultsFromState)\n ).subscribe(next => {\n // this.reloading = true;\n this.homepageBookingResults.next(next);\n if (!next.isEmpty() && next.success && Array.isArray(next.success.results) && next.success.total) {\n this.reloading = false;\n this.showManageButtonA = true;\n this.upcomingBookings = mapResultsToViewModels(next.success.results).filter(b => !(b.booking.is_recurrent && b.booking.recurrence_type === 'master'));\n this.allBookings = next.success.results;\n\n if (this.upcomingBookings.length) {\n this.showBookings = true;\n }\n } else {\n this.reloading = false;\n this.showManageButtonA = false;\n this.upcomingBookings = [];\n this.showBookings = false;\n }\n }));\n\n this.subscription('pastResults', this.store.pipe(\n select(selectPastBookingsResultsFromState)\n ).subscribe(next => {\n if (!next.isEmpty() && next.optionalSuccess?.total) {\n this.showManageButtonB = true;\n }\n }));\n\n this.subscription('cancelledResults', this.store.pipe(\n select(selectCancelledBookingsResultsFromState)\n ).subscribe(next => {\n if (!next.isEmpty() && next.optionalSuccess?.total) {\n this.showManageButtonC = true;\n }\n }));\n }\n\n public showResults() {\n // Don't show the loading state while we're reloading with Building details.\n return !this.reloading; //|| this.homepageBookingResults.value.hasLoaded();\n }\n\n public getBuilding(booking: Booking) {\n if (this.buildings && booking.building_zone) {\n return this.buildings.value.find(b => booking.building_zone === b.value)?.meta.building;\n }\n return '';\n }\n\n // public hideBanner() {\n // this.showBanner = false;\n // }\n\n public learnMore() {\n window.open(Urls.LearnMore);\n }\n\n public routeToResults(next: BookingFormData) {\n this.store.dispatch(storeBookingFormData({\n payload: {\n ...next\n }\n }));\n this.store.dispatch(loadRoomsForResults.clear());\n this.router.navigate(['results'], { relativeTo: this.route });\n }\n\n public routeToManageBookings() {\n this.router.navigate(['manage'], { relativeTo: this.route });\n }\n\n public refresh(target: string) {\n if (!this.currentUser?.email) {\n return;\n }\n\n // tslint:disable-next-line: max-line-length\n this.store.dispatch(loadBookingsWithQuery({ 'email': this.currentUser.email, 'from': DateNow(new Date()).ms, target }));\n }\n\n\n\t\t/**\n\t\t * Displays detailed information about a booking in a modal dialog.\n\t\t * If the booking is part of a recurring series, it retrieves the master booking\n\t\t * details and displays them along with the selected booking. The modal allows\n\t\t * users to view and interact with the booking details. After the modal is closed,\n\t\t * it checks for special flags to determine if the active form and result data should be cleared.\n\t\t *\n\t\t * @param {BookingResultsViewModel} viewModel - The view model containing booking information to display.\n\t\t */\n public async viewBooking(viewModel: BookingResultsViewModel) {\n\n\t\t\t// Handle logic for recurring bookings to fetch the master booking details\n \t// and set the master_booking property for displaying in the modal\n\t\t\tif(viewModel.booking.is_recurrent) {\n\t\t\t\t\tlet booking = this.allBookings.find(bkn => bkn.id === viewModel.booking.recurrence_master_id && bkn.recurrence_type === 'master1') ;\n\t\t\t\t\tif (!booking) {\n\t\t\t\t\t\t\tbooking = await this._bookings.show(viewModel.booking.recurrence_master_id);\n\t\t\t\t\t}\n\t\t\t\t\tthis.master_booking = mapResultsToViewModels([booking])[0];\n\t\t\t}\n\n\t\t\t// Open a modal dialog to display the booking details along with master booking (if applicable)\n\t\t\tconst dialogRefX = this.dialog.open(BookingDetailsModalComponent, {\n\t\t\t\t\tpanelClass: 'mck-modal-wide-manage-booking',\n\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tbooking: viewModel.booking,\t// Selected booking information\n\t\t\t\t\t\t\tbuilding: this.getBuilding(viewModel.booking),\t// Building information for the booking\n\t\t\t\t\t\t\tmaster_booking: this.master_booking?.booking || null,\t// Master booking details (if available)\n\t\t\t\t\t\t\trefresh: () => {\n\t\t\t\t\t\t\t\t\tthis.refresh('homepage');\t// Function to refresh the homepage after modal closure\n\t\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tautoFocus: false,\n\t\t\t\t\tbackdropClass: 'mck-modal-backdrop',\n\t\t\t});\n\n\t\t\tdialogRefX.afterClosed().subscribe((flag) => {\n\t\t\t\t// Clear form and result data if the flag indicates it's necessary\n\t\t\t\t\tflag !== 'DoNotClearActiveForm' && this.clearFormAndResultData();\n\t\t\t});\n }\n\n\t\t/**\n\t\t * Clears active form and result data from the store.\n\t\t *\n\t\t * This function dispatches actions to clear the active form data and the loaded\n\t\t * rooms data from the store. It is typically used after a modal interaction or\n\t\t * a specific user action to reset the form state and loaded room information.\n\t\t */\n public clearFormAndResultData() {\n this.store.dispatch(clearBookingFormData());\n this.store.dispatch(loadRoomsForResults.clear());\n }\n\n\n}\n","import { Component, OnInit } from '@angular/core';\nimport {\n TopBarHeaderMode,\n RoutePayload,\n} from 'src/app/components/topbar-header/topbar-header.component';\nimport { select, Store } from '@ngrx/store';\nimport {\n Booking,\n User,\n Space,\n BookingFormData,\n selectActiveForm,\n selectFilteredByIdResults,\n BookingStoreState,\n storeBookingFormData,\n DateDurationData,\n OrganisationService,\n SpaceConflictAlertModalData,\n SpaceStatus,\n filterSpacesByAppliedFilters,\n FilteredSpaces,\n Building,\n SpaceFilterReason,\n getLastDateFromList,\n RoomResultsViewModel,\n stringToMinutes,\n} from '@mckinsey-converge/data-common';\nimport {\n BaseDirective,\n dateBuildingFormatString,\n DialogEvent,\n shorterLocalDateFormatString,\n startEndTimeWithZoneFormatString,\n} from '@mckinsey-converge/base';\nimport { BehaviorSubject, fromEvent } from 'rxjs';\nimport { distinctUntilChanged, take, throttleTime, tap, filter } from 'rxjs/operators';\nimport { BuildingStoreState } from '@mckinsey-converge/buildings';\nimport { RoomStoreState, loadByIdResults } from '@mckinsey-converge/rooms';\nimport { Router, NavigationStart, Event as NavigationEvent } from '@angular/router';\nimport { UserStoreState } from '@mckinsey-converge/user';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport { DateNow, DateTZ } from '@mckinsey-converge/date-tz';\nimport { MatDialog } from '@angular/material/dialog';\nimport {\n ConflictAlertModalComponent,\n ConflictsModalComponent,\n ConflictsModalComponentData,\n} from '@mckinsey-converge/ui';\n\nexport type RoomResultsState = BookingStoreState &\n RoomStoreState &\n BuildingStoreState &\n UserStoreState;\n\nconst EMPTY_ARRAY = [];\n\n@Component({\n selector: 'app-room-details',\n templateUrl: './room-details.component.html',\n styleUrls: ['./room-details.component.scss'],\n})\nexport class RoomDetailsComponent extends BaseDirective implements OnInit {\n public TopBarHeaderMode = TopBarHeaderMode;\n public booking: Booking;\n // @TODO get this from current settings.\n public backRoute: RoutePayload = {\n route: ['/home', 'results'],\n queryParams: { display: 'list' },\n };\n\n public data = new BehaviorSubject(undefined);\n public byIdResults = new BehaviorSubject(undefined);\n public open: boolean = true;\n // Set to a config once we know where the files are hosted.\n public rootFolderURL = 'assets/img/rooms/';\n // Set in the room availablity callback\n public mobile: boolean = false;\n public expandedLocation: boolean = false;\n public expandedAvailability: boolean = false;\n // Track event date changes in the UI in this param\n public alternativeWeekStartDateTz: DateTZ = new DateTZ();\n /** Current User */\n public currentUser: User;\n /** Display warning banner by default */\n public showInfoBanner: boolean = true;\n /** Space class created from subscribed active form room data */\n public room: Space;\n /** Requested booking start time from subscribed active form data */\n public requestedDateTz: DateTZ;\n /** Requested booking end time from subscribed active form data */\n public requestedEndDateTz: DateTZ;\n\n /** Track alert dialog should display's only once for not bookable or unavailable */\n private isAlertDisplayed: boolean = false;\n /** Update availability status of current rooom */\n public availabilityStatus: string;\n /** Space validity per rule */\n public isSpaceValidAsPerRule: FilteredSpaces;\n\n public orgBuildings: Building[] = [];\n /** Subtype of a room or space. */\n public roomSubtype: string = '';\n\n /* recurrence booking - occurence availability */\n public occurenceAvailability: string = '';\n // set property if user room selection from next business day section on result page\n public nextBusinessDay: boolean = false;\n\n constructor(\n private store: Store,\n private router: Router,\n private _org: OrganisationService,\n public dialog: MatDialog\n ) {\n super();\n /**\n * Router extras expecting from\n * On navigation from result or home page after QR code scan\n */\n if ( this.router.getCurrentNavigation() !== null && this.router.getCurrentNavigation().extras?.state?.payload ) {\n // set property if user room selection from next business day section on result page\n this.nextBusinessDay = this.router.getCurrentNavigation().extras.state.payload?.nextBusinessDay\n this.store.dispatch(storeBookingFormData({\n payload: this.router.getCurrentNavigation().extras.state.payload,\n })\n );\n }\n }\n\n public ngOnInit(): void {\n this.availabilityStatus = 'unavailable';\n this.orgBuildings = this._org.buildings;\n\n this.subscription(\n 'currentUser',\n this.store\n .select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n })\n );\n\n this.subscription(\n 'activeForm',\n this.store\n .pipe(select(selectActiveForm), distinctUntilChanged())\n .subscribe((next: BookingFormData | undefined) => {\n if (next) {\n // set property if user room selection from next business day section on result page\n this.nextBusinessDay = next?.nextBusinessDay || false;\n\n this.data.next(next);\n // R--- selectedRoom could sure use some clarity, why is everything but the kitchen sink in there?\n if (!this.data.value?.selectedRoom || !this.data.value?.dateTz.ms) {\n return;\n }\n // Create a full fledged Space object since the selectedRoom.space is just JSON\n this.room = new Space(this.data.value?.selectedRoom?.space);\n\n // Check room validtion of selected room to maintain status on detail page\n this.checkAvailabiltyAsPerRule();\n this.setAlternativeWeekStartDate(this.data.value?.dateTz);\n\n // Query for the entire day for this room\n this.fetchRooms(false);\n this.setRoomSubType();\n\n this.requestedDateTz = this.data.value?.dateTz;\n if (next.is_recurrent) {\n const { is_local_tz, building_tz} = this?.data?.value?.dateTz;\n const endDateTz = getLastDateFromList( this?.data?.value?.recurrence_starts );\n const endDate = new DateTZ({ date: endDateTz.date.valueOf(), is_local_tz, building_tz }) \n // add one day if user room selection from next business day section on result page\n this.requestedEndDateTz = this.nextBusinessDay ? endDate.addValue({ minutes: this.data?.value.offset }) : endDate;\n\n this.occurenceAvailability = `${this?.room?.availableOccurrences} out of ${this?.room?.totalOccurrences}`;\n }\n }\n })\n );\n\n this.subscription(\n 'byId',\n this.store.pipe(select(selectFilteredByIdResults)).subscribe((next) => {\n this.byIdResults.next(\n next.success?.spaces?.length\n ? next.success.spaces[0].settings.bookings\n : EMPTY_ARRAY\n );\n })\n );\n\n const breakpoint = 450;\n if (window) {\n this.mobile = window.innerWidth < breakpoint;\n }\n\n fromEvent(window, 'resize')\n .pipe(throttleTime(500))\n .pipe(\n tap({\n next: (val) => {\n const target = val.target as Window;\n this.mobile = target.innerWidth < breakpoint;\n },\n })\n )\n .subscribe();\n }\n\n public setRoomSubType() {\n //test\n const room_type = `${this?.room.internal_or_external}_room_types`;\n const temp: string = Array.isArray(this?.room?.room_type)\n ? this?.room?.room_type[0]\n : this?.room?.room_type;\n const type = this?._org?.getOrganizationFiltersByRoomType(room_type)[temp];\n this.roomSubtype = type !== undefined ? `( ${type} Room )` : '';\n }\n\n public isConflictWithOccurences() {\n const conflicts = this?.room?.totalOccurrences - this?.room?.availableOccurrences;\n return { is_conflict: !!conflicts, total_Conflicts: conflicts };\n }\n\n /**\n\t\t * Opens a modal to display recurrence conflicts for a given room.\n\t\t *\n\t\t * @param {Space} room - The room for which recurrence conflicts are being displayed.\n\t\t *\n\t\t * This function opens a modal dialog to show recurrence exceptions (conflicts)\n\t\t * for the specified room.\n\t\t *\n\t\t * TO DO: SAME FUNCTION BEING USED IN apps/staff/src/app/booking/room-details/room-details.component.ts\n\t\t */\n public openRecurrenceConflictsModal(room: Space) {\n let { recurrence_exceptions } = this.data.value;\n\n const recurr_ref = this.dialog.open(\n ConflictsModalComponent,\n {\n maxWidth: '95vw',\n width: '32em',\n data: {\n room_name: room.simple_name,\n conflicts: recurrence_exceptions,\n timezone: room.building.timezone,\n },\n }\n );\n this.subscription(\n 'conflicts_modal_events',\n recurr_ref.componentInstance.event.subscribe((event: DialogEvent) => {\n recurr_ref.close();\n })\n );\n recurr_ref.afterClosed().subscribe(() => this.unsub('conflicts_modal_events'));\n }\n\n\t\t/**\n\t\t * Retrieves the end date string for the booking, considering recurrence if applicable.\n\t\t * If the booking is recurrent.\n\t\t *\n\t\t * @returns {string} The formatted end date string in a shorter local date format.\n\t\t */\n\t\t public get endDateString(): string {\n\t\t\t// if this.requestedEndDateTz is not in use anywhere here in this file than remove that property and use const here\n\t\t\tif(!this.requestedEndDateTz) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\treturn this.requestedEndDateTz.formatDate('ccc d MMM yyyy'); // shorterLocalDateFormatString(this.requestedEndDateTz);\n\t\t}\n\n /**\n * Functino to check if room is available as per room/user rules\n */\n public checkAvailabiltyAsPerRule() {\n this.orgBuildings =\n !this.orgBuildings.length && this.data.value?.buildings\n ? this.data.value?.buildings\n : this.orgBuildings;\n this.isSpaceValidAsPerRule = filterSpacesByAppliedFilters(\n [],\n [this.room],\n this.data.value,\n this.orgBuildings,\n this.currentUser\n );\n }\n\n /**\n * Function popup advise alert dialog if scanned (QR code) room details found conflicts with other booking/s\n * @param room\n */\n alertIfItHasConflict(isBookable, isAvailable) {\n this.isAlertDisplayed = true;\n const data = {\n headerText: !isBookable\n ? SpaceConflictAlertModalData.NotBookableHeaderText\n : !isAvailable\n ? SpaceConflictAlertModalData.NotAvailableHeaderText\n : '',\n message:\n this.isSpaceValidAsPerRule.specificReason === SpaceFilterReason.OfficeRules\n ? SpaceConflictAlertModalData.NotBookableDueToOfficeRule\n : !isBookable\n ? SpaceConflictAlertModalData.NotBookableMessage\n : !isAvailable\n ? SpaceConflictAlertModalData.NotAvailableMessage\n : '',\n buttonLabel: !isBookable\n ? SpaceConflictAlertModalData.NotBookableButtonLabel\n : !isAvailable\n ? SpaceConflictAlertModalData.NotAvailableButtonLabel\n : '',\n callback: !isBookable\n ? this.goToBackRoute.bind(this)\n : !isAvailable\n ? this.expandAvailability.bind(this, true)\n : null,\n shouldClose: isBookable,\n };\n const dialog = this.dialog.open(ConflictAlertModalComponent, {\n data: data,\n panelClass: 'mck-alert',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n disableClose: !isBookable,\n });\n }\n\n public warnIfItHasConflict({ room: room, hasConflict: hasConflict }) {\n if (\n (!room.bookable || !this.isSpaceValidAsPerRule.spaces.length) &&\n !this.isAlertDisplayed\n ) {\n // room is not bookable(not available to book) and no warning dialog displayed yet\n this.alertIfItHasConflict(false, true);\n this.updateAvailabilityStatus(SpaceStatus.Unavailable);\n } else if (!room.available && hasConflict && !this.isAlertDisplayed) {\n //room is not available AT THIS TIME to book (booked) and has conflict with other booking and no warning dialog displayed yet\n this.alertIfItHasConflict(room.bookable, !hasConflict); // (true, true/false)\n this.updateAvailabilityStatus(SpaceStatus.Booked);\n } else {\n /**\n * Update status of availability - Uavailable/Booked/Requestable/Bookable\n * If room is not bookable(not available to book) and warning dialog dispalyed once\n * If room is bookable but not available to boot AT THIS TIME (or and has conflict with other booking) and warning dialog displayed once\n * If room is bookable and availanle to book AT THIS TIME then check the type of room Requestable? or Bookable\n */\n const status =\n !room.bookable || !this.isSpaceValidAsPerRule.spaces.length\n ? SpaceStatus.Unavailable\n : !room.available && hasConflict\n ? SpaceStatus.Booked\n : this.is_request\n ? SpaceStatus.Requestable\n : SpaceStatus.Bookable;\n this.updateAvailabilityStatus(status);\n }\n }\n\n public updateAvailabilityStatus(primaryCheck: string, secondaryCheck?: string) {\n this.availabilityStatus =\n primaryCheck !== ''\n ? primaryCheck\n : this.data.value.is_recurrent ||\n ['unavailable', 'booked'].indexOf(this.availabilityStatus) === -1\n ? secondaryCheck\n : this.availabilityStatus;\n }\n\n public get catering(): string {\n return (\n DateNow(new Date())\n .setValue({ minute: 0, hour: this.room?.building?.catering_hours.start })\n .formatDate('ha')\n .toLocaleLowerCase() +\n ' - ' +\n DateNow(new Date())\n .setValue({ minute: 0, hour: this.room?.building?.catering_hours.end })\n .formatDate('ha')\n .toLocaleLowerCase()\n );\n }\n\n public get dateString(): string {\n\t\t\t\tif(!this.requestedDateTz) return '';\n return this.requestedDateTz.formatDate('ccc d MMM yyyy');; //shorterLocalDateFormatString(this.requestedDateTz);\n \n }\n\n public get focusedRoomMapKey(): string {\n return `area-${this.room?.map_id}-status`;\n }\n\n /** Whether we are only allowed to 'request' the selected space */\n public get is_request(): boolean {\n const data = this.data.value;\n\n /* istanbul ignore else */\n if (!data?.selectedRoom?.space) {\n return false;\n }\n\n const space = new Space(data.selectedRoom.space);\n const isRequest = space.byRequest({\n dateTz: data.dateTz,\n duration: data.duration,\n host: this.currentUser,\n });\n this.updateAvailabilityStatus(\n '',\n isRequest ? SpaceStatus.Requestable : SpaceStatus.Bookable\n );\n return isRequest;\n }\n\n public get roomFeatures(): string[] {\n // const room_type = `${this.room.internal_or_external}_room_types`\n const combinedFeatures = {\n // ...this._org.getOrganizationFiltersByRoomType(room_type),\n ...this._org.getOrganizationFiltersByRoomType('equipment_types'),\n };\n const features = this.room !== undefined ? this.room?.featuresArray.map(\n (feature: string) => combinedFeatures[feature]\n ) : [];\n\n return [...new Set(features)].filter((f) => !!f);\n }\n\n public get roomHasCatering() {\n // Building scope catering available is true or false\n const building = this.data.value?.selectedRoom?.building;\n let hasCatering = building ? building.has_catering : false;\n // but if Room catering is false it overrides the building\n if (this.room?.has_catering === false) {\n hasCatering = false;\n }\n return hasCatering;\n }\n\n public get roomImagesFileSlug(): string {\n return this.room?.email.split('@')[0];\n }\n\n public get mapUrl(): string {\n return this.room?.level?.map_url;\n }\n\n public get timeString(): string {\n\t\t\tif(!this.requestedDateTz) return '';\n\t\t\treturn startEndTimeWithZoneFormatString(\n\t\t\t\t\tthis.requestedDateTz,\n\t\t\t\t\tthis.requestedDateTz.addValue({ minutes: this.data.value?.duration })\n\t\t\t);\n }\n\n /**\n * Get the timezone form the subscribed activeForm\n */\n public get timezone(): string {\n // R--- this.room.timezone wasn't reliable enough on page refresh, something to look into\n return this.data.value.selectedRoom?.building.timezone;\n }\n\n public setAlternativeWeekStartDate(bookingDate: DateTZ) {\n if (!bookingDate) {\n return;\n }\n\n const booking_date = bookingDate.clone();\n if (this.mobile) {\n this.alternativeWeekStartDateTz = booking_date;\n } else {\n this.alternativeWeekStartDateTz = booking_date.startOfValue('week');\n }\n }\n\n public updateCalendarWeekView(alternativeWeekStartDateTz: DateTZ) {\n this.alternativeWeekStartDateTz = alternativeWeekStartDateTz;\n this.fetchRooms(!this.mobile, this.alternativeWeekStartDateTz);\n }\n\n public confirmChanges(data: DateDurationData) {\n // R-- refactor room-availability-preview to return DateTZ so setAlternativeWeekStartDate can use it.\n this.mobile = data.mobile;\n this.setAlternativeWeekStartDate(data.dateTz);\n\n this.fetchRooms(!this.mobile, this.alternativeWeekStartDateTz);\n // submit\n this.store.dispatch(\n storeBookingFormData({\n payload: {\n ...this.data.value,\n dateTz: data.dateTz,\n duration: data.duration,\n },\n })\n );\n }\n\n public fetchRooms(allWeek: boolean = true, alternativeWeekStartDateTz: DateTZ = null) {\n if (!this.room?.id) {\n return;\n }\n\n const day = 24 * 60;\n const week = day * 7;\n\n let start_date = (alternativeWeekStartDateTz || this.data.value.dateTz).clone();\n if (allWeek && start_date.dateWeekday !== 7) {\n start_date = start_date.startOfValue('week');\n }\n\n const startOfDay = start_date.startOfValue('day').setValue({ second: 0, millisecond: 0 });\n const startOfWeek = start_date.setValue({ second: 0, millisecond: 0 }).startOfValue('day');\n\n // Query for the entire day for this room\n const query = {\n dateTz: allWeek ? startOfWeek : startOfDay,\n duration: allWeek ? week : day,\n locations: this.room?.id,\n capacity: this.data.value?.roomSize.value,\n };\n this.store.dispatch(loadByIdResults.request(query));\n }\n\n public removeDateOffset() {\n const data = this.data.value;\n let { dateTz, offset } = data;\n dateTz = dateTz.subtractValue({ minutes: ((typeof offset === 'string' && offset == '') || (typeof offset === 'undefined')) ? 0 : Number(offset) });\n this.store.dispatch(\n storeBookingFormData({\n payload: {\n ...data,\n dateTz: dateTz,\n offset: 0,\n },\n })\n );\n }\n\n public goToBackRoute() {\n this.removeDateOffset();\n this.router.navigate(this.backRoute.route, { queryParams: this.backRoute.queryParams });\n }\n\n public expandMap(open: boolean) {\n this.expandedLocation = open;\n }\n\n public expandAvailability(open: boolean) {\n this.fetchRooms(!this.mobile);\n this.expandedAvailability = open;\n }\n\n public handleClose() {\n this.expandedLocation = false;\n this.expandedAvailability = false;\n this.setAlternativeWeekStartDate(this.data.value?.dateTz);\n this.fetchRooms(false);\n }\n\n /**\n * Continue to Booking Form\n */\n public bookRoom() {\n // submit\n this.store.dispatch(\n storeBookingFormData({\n payload: {\n ...this.data.value,\n },\n })\n );\n\n const bookingRoute = this.data.value.id ? 'edit' : 'create';\n this.router.navigate(['/home', bookingRoute]);\n }\n\n public hideInfoBanner() {\n this.showInfoBanner = false;\n }\n}\n","
\n
\n \n \n
\n
\n \n

This room is not guaranteed until booking confirmation is received.

\n \n
\n
\n \n

This time slot is not available, drag or choose a diferent date or time.

\n
\n
\n
\n \n
\n
\n
\n {{ availabilityStatus | titlecase }} {{ occurenceAvailability }}\n
\n
\n

{{room?.local_name}}

{{data.value?.bookingType.display}}
\n \n
\n
\n \n Equipment\n
    \n
  • \n {{feature}}\n
  • \n
\n
\n
\n
\n \n Catering Available\n
    \n
  • {{catering}}
  • \n
  • (specified in the last booking step)
  • \n
\n
\n
\n
\n
\n
\n

Room Availability:

\n

{{dateString}}

\n \n
\n \n
\n
\n
\n

Room Location:

\n

{{room?.building?.name}}, {{room?.level?.name}}

\n \n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n\n
\n
\n \n {{ open ? '(tap to close)' : '(tap to open)'}}\n
\n

{{ data?.value?.is_recurrent ? 'Recurring' : 'Room' }} Booking Detail

\n
\n\n
\n
Date: {{dateString}}
\n
Time: {{timeString}}
\n
\n
\n
{{data?.value?.recurrence_period === 'list' ? 'Specific dates' :\n data?.value?.recurrence_period | titlecase}}\n -\n Conflicts({{isConflictWithOccurences()?.total_Conflicts}}) \n
\n
Start date: {{dateString}}
\n
End date: {{endDateString}}
\n
Time: {{timeString}}
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n","import {\n Component,\n EventEmitter,\n OnInit,\n Output\n} from '@angular/core';\nimport {\n instantBookOptions,\n roomDetailsRequired,\n roomEquipmentRequiredOptions,\n selectFormFilters,\n selectIsInternal,\n roomCateringAvailable,\n OrganisationService\n} from '@mckinsey-converge/data-common';\nimport {\n select,\n Store\n} from '@ngrx/store';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { BehaviorSubject } from 'rxjs';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport {\n map,\n take\n} from 'rxjs/operators';\n\n@Component({\n selector: 'app-room-filters-form',\n template: `\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n `,\n styleUrls: ['./room-filters-form.component.scss']\n})\nexport class RoomFiltersFormComponent extends BaseDirective implements OnInit {\n\n public instantBookOptions = instantBookOptions;\n public roomEquipmentRequiredOptions = roomEquipmentRequiredOptions;\n public roomDetailsRequired = roomDetailsRequired;\n public roomCateringAvailable = roomCateringAvailable;\n public internalRoomTypeRequiredOptions = [];\n public externalRoomTypeRequiredOptions = [];\n public isInternal = false;\n\n public selectedOptions = new BehaviorSubject[]>([]);\n\n @Output()\n public cancelSubmit = new EventEmitter();\n\n @Output()\n public filtersSubmit = new EventEmitter[]>();\n\n constructor(private store: Store, private _org: OrganisationService) {\n super();\n }\n\n public ngOnInit(): void {\n this.subscription('bookingType',\n this.store.pipe(\n select(selectIsInternal)\n ).subscribe(next => {\n this.isInternal = next;\n }));\n this.subscription('filters',\n this.store.pipe(\n select(selectFormFilters)\n ).subscribe(next => {\n this.selectedOptions.next(next);\n }));\n\n this.externalRoomTypeRequiredOptions = this.getFilters('external_room_types')\n this.internalRoomTypeRequiredOptions = this.getFilters('internal_room_types')\n }\n\n public toggleOptionChecked(selectOption: SelectOption) {\n this.selectedOptions.pipe(\n take(1),\n map(options => {\n const found = options.find(o => o.value === selectOption.value);\n if (found) {\n // remove\n return options.filter(o => o.value !== selectOption.value);\n }\n // add\n return [...options, selectOption];\n })\n ).subscribe(next => {\n this.selectedOptions.next(next);\n });\n }\n\n public submitFilters() {\n this.selectedOptions.pipe(\n take(1)\n ).subscribe(options => {\n this.filtersSubmit.emit(options);\n });\n }\n\n public getFilters(type:string) {\n const filters = this._org.getOrganizationFiltersByRoomType(type) || {}\n return Object.keys(filters).map((key) => {\n const display = filters[key]\n return {\n value: key,\n display,\n shortDisplay: display\n }\n })\n }\n}\n","import {\n Component,\n ViewChild\n} from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { Store } from '@ngrx/store';\nimport { storeRoomFilters } from '@mckinsey-converge/data-common';\nimport { RoomFiltersFormComponent } from 'src/app/booking/room-filters-form/room-filters-form.component';\n\n@Component({\n selector: 'app-room-filters',\n template: `\n
\n \n \n \n \n \n \n \n \n
\n `,\n styleUrls: ['./room-filters-modal.component.scss']\n})\nexport class RoomFiltersModalComponent {\n\n @ViewChild(RoomFiltersFormComponent)\n public form: RoomFiltersFormComponent;\n\n constructor(\n private store: Store,\n private dialogRef: MatDialogRef) {\n }\n\n public close() {\n this.dialogRef.close();\n }\n\n public submitFilters(filters: SelectOption[]) {\n this.store.dispatch(storeRoomFilters({\n payload: filters\n }));\n this.close();\n }\n}\n","import {\n Component,\n Input,\n OnInit,\n OnChanges,\n EventEmitter,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport {\n BehaviorSubject,\n combineLatest,\n} from 'rxjs';\nimport {\n map,\n take,\n} from 'rxjs/operators';\nimport { filterUndefined } from '@mckinsey-converge/rx-utils';\nimport {\n select,\n Store\n} from '@ngrx/store';\nimport {\n CENTER_POINT,\n generateMapStyleForSpace,\n legendOptions,\n MAX_ZOOM_LEVEL,\n MIN_ZOOM_LEVEL,\n spaceToMapFeature,\n} from 'src/app/map/map.utils';\nimport {\n Building,\n BuildingLevel,\n SettingsService,\n Space,\n SpaceStatus,\n selectMapFilteredResults,\n FilteredSpaces\n} from '@mckinsey-converge/data-common';\nimport {\n Point,\n HashMap,\n BaseDirective,\n} from '@mckinsey-converge/base';\nimport { MapFeature } from '@acaprojects/ngx-interactive-map/lib/helpers/map.interfaces';\nimport { OfficeInformationModalComponent } from 'src/app/map/office-information-modal/office-information-modal.component';\nimport { MapSearchStoreState } from '../../map/map-search/map-search.component';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport {\n generateFeedbackUrl,\n Urls\n} from '../../utilities/urls';\n\nexport enum TopBarHeaderMode {\n Light = 'light',\n Dark = 'dark',\n}\n\n@Component({\n selector: 'room-location-preview',\n template: `\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n \n {{building.name}}, {{level.name}}\n
\n \n
\n
The pinpoint indicates your selected room's location on the floor. No futher interaction is available.
\n \n
\n
\n \n
\n \n \n
\n \n
\n
\n\n\n
\n \n
\n
\n \n \n
\n
\n \n
\n
\n
\n
\n `,\n styleUrls: ['./room-location-preview.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class RoomLocationPreviewComponent extends BaseDirective implements OnInit, OnChanges {\n public legendOptions = legendOptions();\n\n @Input()\n public mapUrl: string;\n\n @Input()\n public focus: any; // @todo fix\n\n @Input()\n public expanded: boolean;\n\n @Input()\n public building: Building;\n\n @Input()\n public space: Space;\n\n @Input()\n public level: any; // @todo fix\n\n /** The theme to use **/\n @Input() public mode: TopBarHeaderMode = TopBarHeaderMode.Dark;\n\n // Use \"booking_preview\" to show smaller height with zoom icon\n @Input() public viewMode: String = null;\n\n @Output()\n public handleExpand: EventEmitter = new EventEmitter();\n\n public currentPage: string;\n\n public get feedback() {\n return generateFeedbackUrl(this.currentPage);\n }\n\n public get zoomLevel() {\n return this.expanded ? this.minZoom.value : this.zoom.value;\n }\n\n constructor(\n private store: Store,\n public dialog: MatDialog,\n private settingService: SettingsService) {\n super();\n }\n\n public focusedRoom = new BehaviorSubject(undefined);\n public featuresRoom = new BehaviorSubject(undefined);\n public zoom = new BehaviorSubject(MIN_ZOOM_LEVEL);\n public minZoom = new BehaviorSubject(MAX_ZOOM_LEVEL / 3);\n public features = combineLatest([this.featuresRoom]).pipe(map(items => items.filter(i => !!i)));\n public setIntervalHandle: any = null;\n public count = 0;\n public center = new BehaviorSubject(CENTER_POINT);\n /** Mapping of elements to CSS styles */\n public style_map = new BehaviorSubject>>({});\n\n public activeBuilding = new BehaviorSubject(undefined);\n public activeLevel = new BehaviorSubject(undefined);\n public activeSpace = new BehaviorSubject(undefined);\n\n public ngOnChanges(changes: any): void {\n if (changes.expanded && changes.expanded.currentValue) {\n this.activeSpace.pipe(\n take(1),\n filterUndefined(),\n map(spaceToMapFeature)\n ).subscribe(next => {\n this.featuresRoom.next(next);\n });\n } else if (changes.expanded && changes.expanded.previousValue && !changes.expanded.currentValue) {\n this.featuresRoom.next(undefined);\n }\n }\n\n public ngOnInit(): void {\n this.timeout('Getting Title', () => this.updateRoute(document.title));\n\n // MCK-1850 And it's even slower when loading form scratch via an email link, so 10 second interval.\n this.timeout('Zoom to Room', () => this.initMapZoom(), 2000);\n this.activeSpace.next(this.space);\n this.activeBuilding.next(this.building);\n this.activeLevel.next(this.level);\n\n this.subscription('bookingSpaceResults',\n combineLatest([\n this.store.pipe(\n select(selectMapFilteredResults),\n map((r: LoadingModel) => r.success)\n ),\n this.activeBuilding.pipe(filterUndefined()),\n this.activeLevel.pipe(filterUndefined())\n ]).subscribe(([filteredSpaces, building, level]) => {\n const spacesFromSelection = (filteredSpaces.spaces || [])\n .filter(s => !!s.map_id && s.zones.includes(building.id) && s.zones.includes(level.id));\n\n const styles: HashMap> = {};\n // const colour_map = this.settingService.get('app.explore.colors') || {};\n // spacesFromSelection.forEach(space => {\n // const status = filteredSpaces.statusMap[space.id] || SpaceStatus.Available;\n // const mapStyle = generateMapStyleForSpace(space, status, colour_map);\n // styles[`#${mapStyle.id}`] = mapStyle.styles;\n // });\n this.style_map.next(styles);\n \n })\n );\n\n }\n\n public initMapZoom() {\n const self = this;\n // Doesn't reliably zoom to room until that component is finished loading and processing elements.\n // But this alone is not enough when loading from an email link due to how slow the loading is. See the ngOnInit\n this.setIntervalHandle = setInterval(() => {\n if (!this.focus) {\n return;\n }\n \n self.zoomToRoom();\n self.count ++;\n if (self.count > 4) {\n clearInterval(self.setIntervalHandle);\n self.setIntervalHandle = null;\n }\n }, 1000);\n }\n\n public updateRoute(location) {\n location = location.substr(0, location.indexOf(' |'));\n this.currentPage = location;\n }\n\n public goToHelp() {\n window.open(Urls.Help);\n }\n\n public zoomToRoom(): void {\n this.focusedRoom.next(this.focus);\n this.zoom.next(MAX_ZOOM_LEVEL);\n }\n\n public zoomIn() {\n if (this.minZoom.value < MAX_ZOOM_LEVEL) {\n this.minZoom.next(this.minZoom.value + 1);\n }\n }\n\n public zoomOut() {\n if (this.minZoom.value > MIN_ZOOM_LEVEL) {\n this.minZoom.next(this.minZoom.value - 1);\n }\n }\n\n public resetZoomLevels() {\n this.minZoom.next(MIN_ZOOM_LEVEL);\n this.zoom.next(MIN_ZOOM_LEVEL);\n this.center.next(CENTER_POINT);\n this.focusedRoom.next(undefined);\n }\n\n public collapse() {\n this.handleExpand.emit(false);\n const self = this;\n self.count = 0;\n\n this.zoom.next(MAX_ZOOM_LEVEL);\n this.center.next(CENTER_POINT);\n this.focusedRoom.next(undefined);\n\n // Doesn't reliably zoom to room until that component is finished loading and processing elements.\n this.setIntervalHandle = setInterval(() => {\n self.zoomToRoom();\n self.count ++;\n if (self.count > 4) {\n clearInterval(self.setIntervalHandle);\n self.setIntervalHandle = null;\n }\n }, 200);\n }\n\n public displayOfficeInformation() {\n this.dialog.open(OfficeInformationModalComponent,\n {\n data: this.building,\n panelClass: 'mck-alert',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n OnInit,\n OnChanges,\n SimpleChanges,\n} from '@angular/core';\nimport { BookingFormData, RoomResultsViewModel, setupRoomImages, User } from '@mckinsey-converge/data-common';\nimport { ImageDirective, SpaceImageObject } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'app-room-result-item',\n template: `\n
\n
\n
\n
\n {{ availability === 'requestable' ? 'Requestable' : 'Bookable'}}\n {{ viewModel?.space?.availableOccurrences }} out of {{ viewModel?.space?.totalOccurrences }} \n
\n
\n
\n Images Coming Soon\n
\n \n
\n
\n
\n Images Coming Soon\n
\n \n
\n
\n
\n
\n \n {{viewModel.levelDisplay}}, {{viewModel.title}}\n {{type}}\n {{viewModel.office}}\n {{viewModel.capacity}}\n \n \n \n \n \n \n
\n
\n
\n
\n
\n
\n `,\n styleUrls: ['./room-result-item.component.scss']\n})\nexport class RoomResultItemComponent extends ImageDirective implements OnInit, OnChanges {\n\n public rootFolderURL: string = 'assets/img/rooms/';\n public fileSlug: string = '';\n public type: string = '';\n\n /**\n * If undefined, we display in loading state.\n */\n @Input()\n public viewModel: RoomResultsViewModel | undefined;\n\n @Input()\n public data: BookingFormData;\n\n @Input()\n public user: User;\n\n @Output()\n public roomSelect = new EventEmitter();\n\n public availability: \"requestable\" | \"bookable\" | \"booked\" | \"non-bookable\" | null;\n\n public foundImages: SpaceImageObject[] = [1,2].map(n => {\n return {path: `assets/img/rooms/placeholder-${n}.png`};\n });\n\n public ngOnInit(): void {\n if (this.viewModel && this.viewModel.space) {\n this.fileSlug = this.viewModel.space.email.split('@')[0];\n setupRoomImages(this, [1,2], this.rootFolderURL, this.fileSlug);\n const t = this.viewModel.space.internal_or_external;// || 'internal';\n this.type = `${t[0]?.toUpperCase()}${t.toLocaleLowerCase().substring(1)}`\n }\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.availability !== null && (\n changes.data &&\n changes.data.firstChange === true &&\n changes.data.currentValue &&\n changes.data.currentValue.dateTz &&\n changes.data.currentValue.duration\n )) {\n this.availability = this.viewModel.space.byRequest({\n dateTz: this.data.dateTz,\n duration: this.data.duration,\n host: this.user\n }) === false ? \"bookable\" : \"requestable\";\n\n }\n }\n\n public hasData() {\n return this.viewModel !== undefined;\n }\n\n public get typeClass() {\n return this.type.toLocaleLowerCase();\n }\n\n public showLabel(path) {\n return path.includes('placeholder');\n }\n public get timestamp () {\n return (new Date()).getTime()\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewContainerRef\n} from '@angular/core';\nimport {\n select,\n Store\n} from '@ngrx/store';\nimport {\n ActivatedRoute,\n Router\n} from '@angular/router';\nimport {\n BehaviorSubject,\n combineLatest,\n Observable\n} from 'rxjs';\nimport {\n RoomResultsViewModel,\n BookingFormData,\n BookingStoreState,\n selectActiveForm,\n storeBookingFormData,\n SpaceFilterReason,\n User,\n OrganisationService,\n} from '@mckinsey-converge/data-common';\nimport {\n map,\n take,\n distinctUntilChanged\n} from 'rxjs/operators';\nimport {\n AlertBannerDisplay,\n AlertMode,\n BaseTemplateComponent,\n ConflictsModalComponent,\n ConflictsModalComponentData,\n\t\tOverrideChangesModalComponent\n} from '@mckinsey-converge/ui';\nimport { RoomResultsCoachmarkViewmodel } from 'src/app/booking/room-results/room-results-coachmark.viewmodel';\nimport {\n RoomStoreState\n} from '@mckinsey-converge/rooms';\nimport {\n BuildingStoreState,\n} from '@mckinsey-converge/buildings';\nimport { selectCurrentUser, UserStoreState } from '@mckinsey-converge/user';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DialogEvent } from '@mckinsey-converge/base';\n\n\nexport type RoomResultsState = BookingStoreState\n & RoomStoreState\n & BuildingStoreState\n & UserStoreState;\n\n@Component({\n selector: 'app-room-results-paginated',\n template: `\n \n
\n
\n \n \n \n \n \n \n \n \n \n\n
\n \n
\n
\n \n \n \n
\n \n
\n
\n
\n
\n
\n `,\n styleUrls: ['./room-results-paginated.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class RoomResultsPaginatedComponent extends BaseTemplateComponent implements OnInit {\n public ROOM_DISPLAY_STEP = 10;\n public ROOM_DISPLAY_START = 3;\n public AlertMode = AlertMode;\n public AlertBannerDisplay = AlertBannerDisplay;\n /** Offset to add to the start time when selecting a space */\n @Input() public offset = 0;\n\n @Input()\n public viewModels: Observable;\n\n @Input()\n public coachMark: Observable | undefined;\n\n /**\n * If true, show skeleton.\n */\n @Input()\n public isLoading: Observable;\n\n @Output()\n public coachMarkAction = new EventEmitter();\n\n // set property if user room selection from next business day section on result page\n @Input() public nextBusinessDay = false;\n\n public displayCount = new BehaviorSubject(this.ROOM_DISPLAY_START);\n\n /**\n * Fake pagination since API does not support it.\n */\n public displayViewModels: Observable;\n\n public showLoadMore: Observable;\n\n public remainingResults: Observable;\n\n public data = new BehaviorSubject(undefined);\n public currentUser: User;\n\n constructor(vcRef: ViewContainerRef,\n private store: Store,\n private router: Router,\n private route: ActivatedRoute,\n private _org: OrganisationService,\n private cdRef: ChangeDetectorRef,\n private _dialog: MatDialog) {\n super(vcRef);\n }\n\n public ngOnInit(): void {\n super.ngOnInit();\n //test commet for to trigger build again\n this.displayViewModels = combineLatest([this.viewModels, this.displayCount])\n .pipe(\n map(([vm, displayCount]) => { this.cdRef.markForCheck(); return vm?.slice(0, displayCount) } ));\n\n this.showLoadMore = combineLatest([this.viewModels, this.displayCount])\n .pipe(\n map(([vm, displayCount]) => {\n return ((vm?.length ?? 0) > displayCount);\n })\n );\n this.remainingResults = combineLatest([this.viewModels, this.displayCount])\n .pipe(\n map(([vm, displayCount]) => vm && (vm.length - displayCount) || 0));\n\n this.subscription('currentUser', this.store.select(selectCurrentUser)\n .pipe(take(1))\n .subscribe((user: User | undefined) => {\n // Once we know we have the user loaded.\n this.currentUser = new User(user);\n })\n );\n\n this.subscription('activeForm', this.store.pipe(\n select(selectActiveForm),\n distinctUntilChanged()\n ).subscribe((next: BookingFormData | undefined) => {\n if (next) {\n this.data.next(next);\n this.cdRef.detectChanges();\n\n }\n }));\n this.cdRef.detectChanges();\n }\n\n public loadMore() {\n // fake pagination\n this.displayCount.pipe(\n take(1),\n map(v => v + this.ROOM_DISPLAY_STEP)\n ).subscribe(next => {\n this.displayCount.next(next);\n this.cdRef.detectChanges();\n });\n }\n\n public trackViewModelById(index: number, item: RoomResultsViewModel) {\n return item.space.id;\n }\n\n\n\t\t/**\n\t\t * Handles the selection of a room from the search results.\n\t\t * Depending on the room's availability and recurrence conflicts, this function decides\n\t\t * whether to open a modal for recurrence conflicts, override changes, or navigate to the\n\t\t * room details page. It updates the state and user interface accordingly.\n\t\t *\n\t\t * @param {RoomResultsViewModel} room - The selected room from the search results.\n\t\t * @param {number} availableOccurrences - The number of available occurrences of the room.\n\t\t * @param {number} totalOccurrences - The total number of occurrences of the room.\n\t\t */\n public roomSelected(room: RoomResultsViewModel, availableOccurrences: number, totalOccurrences: number) {\n\n const { is_recurrent } = this.data.value;\n this.data.value.recurrence_exceptions = [];\n if(is_recurrent){\n // Handle recurrence conflicts if the booking is part of a recurring series\n const spaceConflicts = room.space.recurrence_availability.filter(recurr => !recurr.available);\n this.data.value.recurrence_exceptions = spaceConflicts.map((recurr)=> recurr.date);\n }\n\n\t\t// Determine the action based on recurrence conflicts, occurrence edits, and room availability\n\t\tif(this.data.value.recurrence_exceptions.length) {\n this.openRecurrenceConflictsModal(room);\t// Open modal for recurrence conflicts\n }\n else if( this.data.value.occurrence_edits && this.data.value.occurrence_edits.length) {\n this.overrideChanges(room);\t// Open modal to override changes\n }\n else {\n this.goToRoomDetail(room);\t// Navigate to the room details page\n }\n\n }\n\n\t\t/**\n\t\t * Navigates to the room details page for the selected room.\n\t\t * It updates the URL and navigates to the room details page with appropriate query parameters.\n\t\t *\n\t\t * @param {RoomResultsViewModel} room - The selected room from the search results.\n\t\t *\n\t\t * @remarks\n\t\t * The function manages timezone offset and other necessary details to provide accurate room information.\n\t\t * The state object is used to pass relevant data for correct page rendering and form population.\n\t\t *\n\t\t * @private\n\t\t */\n private goToRoomDetail(room) {\n\t\t\t// Handle timezone offset for accurate date and time information\n let { dateTz } = this.data.value;\n if (this.offset) {\n dateTz = dateTz.addValue({ minutes: this.offset });\n }\n\n /**\n * selectedRoom.space is fully fledged Space class\n * this.data.value.booking.room is not and does not contain the timezone\n * this.data.value.booking.timezone is legit\n */\n // UPDATE: providing payload as part of extras instead dispatching storeBookingFormData event to avoid redundant backend request calls\n this.router.navigate(['room'], { relativeTo: this.route, state:{payload : {\n ...this.data.value,\n buildings: this._org.buildings, // require to manage browser refresh on room detail screen!\n dateTz,\n offset: this.offset,\n selectedRoom: room,\n nextBusinessDay: this.nextBusinessDay\n }\n }});\n }\n\n\n /**\n\t * Opens a modal to display recurrence conflicts for the selected room.\n\t * It shows recurrence conflicts, allowing the user to resolve them before proceeding.\n\t * After the modal is closed, it navigates to the room details page if there are no unresolved conflicts.\n\t *\n\t * @param {RoomResultsViewModel} room - The selected room from the search results.\n\t *\n\t * @private\n\t */\n private openRecurrenceConflictsModal(room: RoomResultsViewModel) {\n let { recurrence_exceptions } = this.data.value;\n\n\t\t// Open modal for recurrence conflicts\n const recurr_ref = this._dialog.open(ConflictsModalComponent, {\n maxWidth: '95vw',\n width: '32em',\n data: {\n room_name: room.space.simple_name,\n conflicts: recurrence_exceptions,\n timezone: room.building.timezone\n }\n });\n this.subscription(\n 'conflicts_modal_events',\n recurr_ref.componentInstance.event.subscribe((event: DialogEvent) => {\n\n\t\t\t\tif (event.reason === 'done' && !(this.data.value.occurrence_edits && !this.data.value.occurrence_edits.length) ) {\n\t\t\t\t\t\tthis.goToRoomDetail(room); \t// Navigate to room details page after resolving conflicts\n\t\t\t\t}\n recurr_ref.close();\n })\n );\n recurr_ref.afterClosed().subscribe(() => this.unsub('conflicts_modal_events'));\n }\n\n\t/**\n\t * Opens a modal to allow the user to override changes made to the booking.\n\t * It provides options to confirm or cancel the override, depending on user preference.\n\t * After the modal is closed, it navigates to the room details page if the user confirms the override.\n\t *\n\t * @param {RoomResultsViewModel} room - The selected room from the search results.\n\t *\n\t * @private\n\t */\n private overrideChanges(room: RoomResultsViewModel) {\n\t\t// Open modal for overriding changes made to the booking\n const ref = this._dialog.open(OverrideChangesModalComponent, {\n width: '576px',\n data: {\n edits: this.data.value.occurrence_edits,\n timezone: this.data.value.timezone\n }\n });\n ref.componentInstance.event.subscribe(event => {\n if (event.reason === 'done') {\n this.goToRoomDetail(room);\t// Navigate to room details page after confirming the override\n ref.close();\n } else if (event.reason === 'close') {\n ref.close();\n }\n });\n }\n\n\n\n\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport { BehaviorSubject, combineLatest, Observable, of, Subject } from 'rxjs';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { distinctUntilChanged, filter, map } from 'rxjs/operators';\nimport { BookingRulesLink, RoomResultsCoachmarkViewmodel } from 'src/app/booking/room-results/room-results-coachmark.viewmodel';\nimport {\n Building,\n BuildingLevel,\n mapResultsToViewModels,\n RoomResultsViewModel,\n FilteredSpaces,\n SpaceFilterReason,\n selectActiveForm,\n BookingStoreState,\n BookingFormData,\n OrganisationService,\n} from '@mckinsey-converge/data-common';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { select, Store } from '@ngrx/store';\nimport { RoomStoreState } from '@mckinsey-converge/rooms';\nimport {\n BuildingStoreState,\n} from '@mckinsey-converge/buildings';\nimport { UserStoreState } from '@mckinsey-converge/user';\n\n\nexport type RoomResultsState = BookingStoreState &\n RoomStoreState &\n BuildingStoreState &\n UserStoreState;\n\n\n@Component({\n selector: 'app-room-results-section',\n template: `\n
\n \n
\n\n \n \n \n\n \n \n \n \n `,\n styleUrls: ['./room-results-section.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n})\nexport class RoomResultsSectionComponent extends BaseDirective implements OnInit {\n @Input() public rules_link?: BookingRulesLink;\n /** Offset to add to the start time when selecting a space */\n @Input() public offset = 0;\n\n // set property if user room selection from next business day section on result page\n @Input() public nextBusinessDay : boolean = false\n\n @Input()\n public collapsable: boolean;\n\n /**\n * If collapsable is true, this is used in the collapse header.\n */\n @Input()\n public collapseTitle: string;\n\n /**\n * If collapsable is true, this is used in the collapse header.\n */\n @Input()\n public collapseDescription: string;\n\n @Input()\n public levelBuildings: Observable<{ flattenedLevels: BuildingLevel[]; buildings: Building[] }>;\n\n @Input()\n public results: BehaviorSubject>;\n\n @Output()\n public coachMarkAction = new EventEmitter();\n\n public mainResultViewModels = new BehaviorSubject(\n undefined\n );\n\n public editing_form = new BehaviorSubject(false);\n\n public resultsLoading: Observable;\n public coachMarkDisplay: Observable;\n\n public AlternateBuildings = [];\n public location: any;\n\n private subscribeResultsToViewModels = (\n subName: string,\n resultsObservable: Observable>,\n flattenLevelBuildings: Observable<{ flattenedLevels: any; buildings: Building[] }>,\n viewModelSubject: Subject\n ) => {\n this.subscription(\n subName,\n combineLatest([\n resultsObservable.pipe(map((r) => r.optionalSuccess?.spaces || [])),\n flattenLevelBuildings,\n ])\n .pipe(\n map(([results, { flattenedLevels, buildings }]) =>\n mapResultsToViewModels(\n results?.length && results[0]?.building ? results : [],\n flattenedLevels,\n buildings\n )\n )\n )\n .subscribe((next) => {\n viewModelSubject.next(next);\n })\n );\n };\n\n constructor(private store: Store, private _org: OrganisationService) {\n super();\n }\n\n public ngOnInit(): void {\n this.resultsLoading = this.results.pipe(map((m) => m.isLoading));\n\n this.subscription(\n 'activeForm',\n combineLatest([this.editing_form, this.store])\n .pipe(\n filter(([edit]) => !edit),\n map(([_, store]) => store),\n select(selectActiveForm),\n distinctUntilChanged()\n )\n .subscribe((next: BookingFormData | undefined) => {\n if (next) {\n this.location = next.location;\n this.updateCoachMark();\n } else {\n }\n })\n );\n\n this.subscription(\n 'buildings',\n this._org.listen('buildings').subscribe(() => {\n this.updateCoachMark();\n })\n );\n\n this.coachMarkDisplay = this.results.pipe(\n map((r) => r.optionalSuccess?.reason || SpaceFilterReason.None),\n map(\n (r) =>\n new RoomResultsCoachmarkViewmodel(r, this.rules_link, this.AlternateBuildings)\n )\n );\n\n this.subscribeResultsToViewModels(\n 'resultListing',\n this.results,\n this.levelBuildings || of({ flattenedLevels: [], buildings: [] }),\n this.mainResultViewModels\n );\n }\n\n updateCoachMark() {\n const buildingsInSameCity = this._org.buildings?.filter(_ => {\n // Make sure this.location is populated to pass unit tests -\n if (!this.location || this.location.length === 0) return false;\n // If all offices are selected, city name will be at this.location[0]?.meta?.city.name, otherwise use this.location[0]?.meta?.city \n const cityFromLocation = typeof this.location[0]?.meta?.city === 'object' && this.location[0]?.meta?.city !== null\n ? this.location[0]?.meta?.city.name\n : this.location[0]?.meta?.city;\n return _.city === cityFromLocation;\n });\n const AlternateBuildings = buildingsInSameCity?.filter(\n (building) =>\n !this.location.some(\n (locationItem) => locationItem.meta?.building?.id === building.id\n )\n );\n this.AlternateBuildings = AlternateBuildings;\n this.coachMarkDisplay = this.results.pipe(\n map((r) => r.optionalSuccess?.reason || SpaceFilterReason.None),\n map(\n (r) =>\n new RoomResultsCoachmarkViewmodel(r, this.rules_link, this.AlternateBuildings)\n )\n );\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n if (changes.results || changes.levelBuildings || changes.mainResultViewModels) {\n this.subscribeResultsToViewModels(\n 'resultListing',\n this.results,\n this.levelBuildings || of({ flattenedLevels: [], buildings: [] }),\n this.mainResultViewModels\n );\n }\n }\n\n public onCoachmarkAction(reason: SpaceFilterReason) {\n this.coachMarkAction.emit(reason);\n }\n}\n","import { SpaceFilterReason } from '@mckinsey-converge/data-common';\n\nexport interface BookingRulesLink {\n name: string;\n url: string;\n}\nexport class RoomResultsCoachmarkViewmodel {\n public visible: boolean;\n public title: string;\n public actionButtonText: string;\n\n constructor(public reason: SpaceFilterReason, public rules_link?: BookingRulesLink, alternateBuildings?:any[]) {\n this.visible = true;\n switch (reason) {\n case SpaceFilterReason.DateTime:\n this.title =\n 'There are no available rooms that match your search criteria. ' +\n 'Please adjust your search criteria and try again.';\n this.actionButtonText = 'Return to search';\n break;\n case SpaceFilterReason.OfficeRules:\n this.title =\n `There are no available rooms that match your search criteria.\n Please adjust your search criteria and try again.`;\n if (alternateBuildings && alternateBuildings.length > 0) {\n this.title += ` Alternatively, you can try ${alternateBuildings.length > 1 \n ? alternateBuildings.slice(0, -1).map(building => building.name).join(', ') + ', or ' + alternateBuildings[alternateBuildings.length - 1].name \n : alternateBuildings[0]?.name\n }.`;\n }\n if (rules_link) {\n this.title +=\n `
For information on booking rules please see ` +\n `${rules_link.name}`;\n }\n this.actionButtonText = 'Return to search';\n break;\n case SpaceFilterReason.Filters:\n this.title =\n 'No rooms available for your filter criteria. ' +\n 'Try to clear the filter please.';\n this.actionButtonText = 'Clear filter';\n break;\n case SpaceFilterReason.AlternateBuildingsFound:\n this.title = `There are no available rooms that match your search criteria. Please try ${\n alternateBuildings.length > 1 \n ? alternateBuildings.slice(0, -1).map(building => building.name).join(', ') + ', or ' + alternateBuildings[alternateBuildings.length - 1].name \n : alternateBuildings[0]?.name\n }.`;\n this.actionButtonText = 'Return to search';\n break;\n case SpaceFilterReason.None:\n this.visible = false;\n this.title = '';\n this.actionButtonText = '';\n break;\n }\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { TopBarHeaderMode } from 'src/app/components/topbar-header/topbar-header.component';\nimport { select, Store } from '@ngrx/store';\nimport {\n laterThatDayFromDateTz,\n loadRoomsWithQuery,\n RoomStoreState,\n mapRoomToSelectOption,\n loadRoomsForResultsMap,\n} from '@mckinsey-converge/rooms';\nimport { BaseDirective, timeWithZoneFormatString } from '@mckinsey-converge/base';\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs';\nimport {\n Building,\n BuildingLevel,\n flattenBuildingsWithLevels,\n BookingStoreState,\n FilteredSpaces,\n SpaceFilterReason,\n clearRoomFilters,\n selectActiveForm,\n selectFilteredLaterDayResults,\n selectFilteredNextDayResults,\n selectFilteredResults,\n selectFormFilters,\n BookingFormData,\n roomFormDataToQuery,\n selectFilteredDiffSizeResults,\n OrganisationService,\n CollapseService\n} from '@mckinsey-converge/data-common';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { debounceTime, distinctUntilChanged, filter, map, shareReplay } from 'rxjs/operators';\nimport {\n buildingStateSelector,\n BuildingStoreState,\n loadBuildings,\n} from '@mckinsey-converge/buildings';\nimport * as cloneDeep from 'lodash/cloneDeep';\nimport { filterUndefined, resultCountObservable } from '@mckinsey-converge/rx-utils';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { MatDialog } from '@angular/material/dialog';\nimport { RoomBookingModalComponent } from 'src/app/booking/room-booking-modal/room-booking-modal.component';\nimport { RoomFiltersModalComponent } from 'src/app/booking/room-filters-modal/room-filters-modal.component';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport {\n BookingRulesLink,\n RoomResultsCoachmarkViewmodel,\n} from 'src/app/booking/room-results/room-results-coachmark.viewmodel';\nimport { UserStoreState } from '@mckinsey-converge/user';\nimport { FormControl } from '@angular/forms';\nimport { Location } from '@angular/common';\n\nexport type RoomResultsState = BookingStoreState &\n RoomStoreState &\n BuildingStoreState &\n UserStoreState;\n\n@Component({\n selector: 'app-room-results',\n template: `\n \n
\n \n
\n
\n
\n
\n
\n \n
\n
\n
\n {{ open ? '(tap to close)' : '(tap to open)' }}\n \n
\n
\n
\n
\n
\n \n \n
\n
\n
\n \n
\n
\n
\n \n \n
\n \n \n
\n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n `,\n styleUrls: ['./room-results.component.scss'],\n animations: [\n trigger('collapseHeight', [\n state(\n 'open',\n style({\n height: '*',\n opacity: 1,\n })\n ),\n state(\n 'closed',\n style({\n overflow: 'hidden',\n opacity: 0,\n height: '0px',\n })\n ),\n transition('open <=> closed', animate('600ms ease-out')),\n ]),\n trigger('expandWidth', [\n state(\n 'open',\n style({\n maxWidth: '1024px',\n })\n ),\n state(\n 'closed',\n style({\n maxWidth: '96%',\n })\n ),\n transition('open <=> closed', animate('600ms ease-out')),\n ]),\n ],\n})\nexport class RoomResultsComponent extends BaseDirective implements OnInit {\n public TopBarHeaderMode = TopBarHeaderMode;\n\n public day_offset = 1;\n\n public data = new BehaviorSubject(undefined);\n public filters = new BehaviorSubject[]>([]);\n\n public mainResults = new BehaviorSubject>(LoadingModel.empty());\n public mainResultsFiltered = new BehaviorSubject>(\n LoadingModel.empty()\n );\n public laterThatDayResults = new BehaviorSubject>(\n LoadingModel.empty()\n );\n public nextBusinessDayResults = new BehaviorSubject>(\n LoadingModel.empty()\n );\n public diffSizeResults = new BehaviorSubject>(\n LoadingModel.empty()\n );\n public mainResultsSpaces: SelectOption[];\n\n public laterThatDayDisplay = new BehaviorSubject(undefined);\n\n public mainCoachMarkDisplay = this.mainResults.pipe(\n map((r) => r.optionalSuccess?.reason || SpaceFilterReason.None),\n map((r) => new RoomResultsCoachmarkViewmodel(r, this.rules_link))\n );\n\n public rules_link?: BookingRulesLink;\n\n public mainResultsCount = resultCountObservable(\n this.mainResultsFiltered,\n this.mainResultsFiltered.pipe(map((r) => r.optionalSuccess?.spaces))\n );\n public laterThatDayCount = resultCountObservable(\n this.laterThatDayResults,\n this.laterThatDayResults.pipe(map((r) => r.optionalSuccess?.spaces))\n );\n public nextBusinessDayCount = resultCountObservable(\n this.nextBusinessDayResults,\n this.nextBusinessDayResults.pipe(map((r) => r.optionalSuccess?.spaces))\n );\n public diffSizeCount = resultCountObservable(\n this.diffSizeResults,\n this.diffSizeResults.pipe(map((r) => r.optionalSuccess?.spaces))\n );\n\n public selectedToggle = new BehaviorSubject(0);\n\n public flattenLevelBuildings: Observable<{\n flattenedLevels: BuildingLevel[];\n buildings: Building[];\n }>;\n\n public open: boolean = true;\n public editing_form = new BehaviorSubject(false);\n\n public spaceControl = new FormControl();\n\n public selectedSpace: SelectOption;\n public resetInput: number;\n\n public searchStringPresent = false;\n public payload: any = {\n payload: { name: 'test', id: 'test-id' },\n building: {},\n floorMap: true,\n };\n\n public isOpen = true;\n\n public toggle() {\n this.isOpen = !this.isOpen;\n }\n\n constructor(\n private store: Store,\n private router: Router,\n private route: ActivatedRoute,\n private dialog: MatDialog,\n private _org: OrganisationService,\n private location: Location,\n private collapseService: CollapseService\n ) {\n super();\n this.payload = location.getState();\n }\n\n public ngOnInit(): void {\n this.subscription(\n 'filters',\n this.store.pipe(select(selectFormFilters), distinctUntilChanged()).subscribe((next) => {\n return this.filters.next(next);\n })\n );\n\n this.subscription(\n 'activeForm',\n combineLatest([this.editing_form, this.store])\n .pipe(\n filter(([edit]) => !edit),\n map(([_, store]) => store),\n select(selectActiveForm),\n distinctUntilChanged()\n )\n .subscribe((next: BookingFormData | undefined) => {\n if (next) {\n const day = next.dateTz.dateWeekday - 1;\n this.day_offset = day >= 4 ? 7 - day : 1;\n const building = this._org.buildings.find(\n (_) => _.id === next.location[0]?.meta?.building?.id\n );\n this.rules_link =\n building?.setting('booking.rules_link') ||\n next.location.find(\n office => office?.meta?.building?._settings?.discovery_info?.booking?.rules_link\n )?.meta?.building?._settings?.discovery_info?.booking?.rules_link;\n // next.location[0]?.meta?.building?.settings?.discovery_info?.booking\n // ?.rules_link;\n const nday = laterThatDayFromDateTz(next.dateTz);\n this.laterThatDayDisplay.next(`at ${timeWithZoneFormatString(nday)}`);\n // this.store.dispatch(loadRoomsWithQuery(roomFormDataToQuery(next)));\n this.data.next(next);\n \n //Dispatches actions to load rooms based on the provided value.\n this.despatchLoadRooms();\n\n // this.data.next(next);\n } else {\n // no form data, likely visiting directly. navigate back to start\n this.router.navigate(['../'], {\n replaceUrl: true,\n relativeTo: this.route,\n });\n }\n })\n );\n\n this.subscription(\n 'results',\n this.store.pipe(select(selectFilteredResults)).subscribe((next) => {\n this.mainResults.next(next);\n this.mainResultsFiltered.next(next);\n // Populate results for Search\n this.mainResultsSpaces = next.success?.spaces\n ? next.success?.spaces?.map(mapRoomToSelectOption)\n : [];\n })\n );\n\n this.subscription(\n 'laterResults',\n this.store.pipe(select(selectFilteredLaterDayResults)).subscribe((next) => {\n this.laterThatDayResults.next(next);\n })\n );\n\n this.subscription(\n 'nextDayResults',\n this.store.pipe(select(selectFilteredNextDayResults)).subscribe((next) => {\n this.nextBusinessDayResults.next(next);\n })\n );\n\n this.subscription(\n 'diffSize',\n this.store.pipe(select(selectFilteredDiffSizeResults)).subscribe((next) => {\n this.diffSizeResults.next(next);\n })\n );\n\n this.flattenLevelBuildings = this.store.pipe(\n select(buildingStateSelector),\n select(loadBuildings.selectors.optionalSuccess),\n filterUndefined(),\n map(flattenBuildingsWithLevels),\n shareReplay(1)\n );\n\n this.subscription(\n 'spaceChanges',\n this.spaceControl.valueChanges.subscribe((value) => {\n const mainResultsFiltered = cloneDeep(this.mainResults.value);\n const filteredRooms = this.mainResults.value.success?.spaces?.filter((s) => {\n if (s.id === value.value) {\n return true;\n }\n return false;\n });\n mainResultsFiltered.success.spaces = filteredRooms;\n this.mainResultsFiltered.next(mainResultsFiltered);\n })\n );\n\n // if coming from kiosk map url, route there\n if (this.payload?.floorMap) {\n this.router.navigate([`../home/floor-map`], {\n state: { ...this.payload },\n queryParams: {\n display: '',\n },\n });\n }\n\n this.subscription(\n 'spaceChanges',\n this.selectedToggle.subscribe((value) => {\n //Dispatches actions to load rooms based on the provided value.\n this.despatchLoadRooms();\n })\n );\n }\n\n /**\n * Dispatches actions to load rooms based on the provided value.\n * @param {number} value - The value indicating the mode of operation.\n * 0: Load rooms for regular view.\n * 1: Load rooms for results map view.\n */\n public despatchLoadRooms() {\n const selectedMenuIndex = this.selectedToggle.value; // List/Map/Calendar\n const isForFloorMap = this.payload?.floorMap;\n // If value is 0 and floorMap is not present in payload\n if(selectedMenuIndex === 0 && !isForFloorMap) {\n // Dispatch action to load rooms with query generated from form data\n this.store.dispatch(loadRoomsWithQuery(roomFormDataToQuery(this.data.value)));\n }\n \n // If value is 1 or floorMap is present in payload\n if(selectedMenuIndex === 1 || isForFloorMap) {\n // Dispatch action to load rooms for results map view with query generated from form data\n this.store.dispatch( loadRoomsForResultsMap.request(roomFormDataToQuery(this.data.value)));\n }\n }\n\n public clearRoomSearch() {\n this.resetInput = Date.now();\n this.selectedSpace = null;\n const mainResults = cloneDeep(this.mainResults.value);\n this.mainResultsFiltered.next(mainResults);\n this.searchStringPresent = false;\n }\n\n public inputTextChange(event: any) {\n this.searchStringPresent = !!event.length;\n }\n\n public changeInput(event) {\n if (event) {\n this.clearRoomSearch();\n }\n }\n\n public filteredRoomsChange(event: SelectOption[]) {\n const roomIds = event.map((o) => o.value);\n const mainResultsFiltered = cloneDeep(this.mainResults.value);\n const filteredRooms = this.mainResults?.value?.success?.spaces\n ? this.mainResults?.value?.success?.spaces?.filter((s) => {\n if (roomIds.includes(s.id)) {\n return true;\n }\n return false;\n })\n : [];\n mainResultsFiltered.success.spaces = filteredRooms;\n this.mainResultsFiltered.next(mainResultsFiltered);\n }\n\n public changeSearchResults() {\n this.editing_form.next(true);\n const dialog_ref = this.dialog.open(RoomBookingModalComponent, {\n panelClass: 'mck-modal',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n dialog_ref.afterClosed().subscribe(() => {\n this.editing_form.next(false);\n this.collapseService.collapsePanel();\n });\n }\n\n public filterResults() {\n this.dialog.open(RoomFiltersModalComponent, {\n panelClass: 'mck-modal',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n }\n\n public onCoachmarkAction(reason: SpaceFilterReason) {\n switch (reason) {\n case SpaceFilterReason.Filters:\n this.store.dispatch(clearRoomFilters());\n break;\n case SpaceFilterReason.OfficeRules:\n case SpaceFilterReason.DateTime:\n this.changeSearchResults();\n break;\n }\n }\n\n public selectedToggleChange(event: SelectOption) {\n this.selectedToggle.next(event.value);\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges\n} from '@angular/core';\n\nimport {\n humaniseDuration,\n timeFormatString,\n timeWithGmtOffsetFormatString,\n weekDayMonthYearFormat\n} from '@mckinsey-converge/base';\nimport {\n truncateLocationList,\n BookingFormData,\n getLastDateFromList\n} from '@mckinsey-converge/data-common';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { DateTZ } from '@mckinsey-converge/date-tz'\n\n@Component({\n selector: 'app-searched-location',\n template: `\n
\n
\n {{name}}\n {{date}}\n {{timing}}\n {{types}}\n No filters applied\n Filtering unavailable for this view\n {{filterDisplay}}\n
\n
\n \n Filter {{filterCount}}\n \n
\n
\n `,\n styleUrls: ['./searched-location.component.scss']\n})\nexport class SearchedLocationComponent implements OnInit, OnChanges {\n\n @Input()\n public data: BookingFormData;\n\n @Input()\n public filters: SelectOption[] = [];\n\n @Output()\n public changeClick = new EventEmitter();\n\n @Output()\n public filterClick = new EventEmitter();\n\n @Input()\n public canFilter = true;\n\n public name = '';\n public date = '';\n public timing = '';\n public types = '';\n public filterDisplay = '';\n public filterCount = '';\n\n constructor() {\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.data || changes.filters) {\n this.computeDisplay();\n }\n }\n\n public ngOnInit(): void {\n this.computeDisplay();\n }\n\n\n public computeDisplay() {\n if (!this.data) {\n return;\n }\n const { duration, dateTz, location, roomSize, bookingType, is_recurrent, recurrence_endTz } = this.data;\n\n \n // this.requestedEndDateTz = new DateTZ({ date: endDate.date.valueOf(), is_local_tz, building_tz })\n\n const group = location.find(l => l.groupHeader);\n if (group) {\n this.name = group.shortDisplay;\n } else {\n this.name = truncateLocationList(location);\n }\n\n // R--- blocked until TZ booking form inputs\n const building_tz = location[0]?.meta?.building?.timezone || location[0]?.meta?.city?.timezone;\n const startDate = new DateTZ({date: dateTz.ms, is_local_tz: false, building_tz })\n\n if(is_recurrent) {\n const occEndDate = getLastDateFromList( this?.data?.recurrence_starts );\n \tconst endRecDate = new DateTZ({date: occEndDate.ms, is_local_tz: false, building_tz });\n this.date = `From ${weekDayMonthYearFormat(startDate)} until ${weekDayMonthYearFormat(endRecDate)}` ;\n }\n else {\n this.date = weekDayMonthYearFormat(startDate);\n }\n\n const startDisplay = startDate.formatDate(`${timeFormatString()}`).toLocaleLowerCase();\n const endDate = startDate.addValue({ minutes: duration });\n const endDisplay = timeWithGmtOffsetFormatString(endDate);\n this.timing = `${startDisplay}-${endDisplay}`; // - TODO correct for DST?\n\n const durationDisplay = humaniseDuration(duration, 'short');\n this.types = `${durationDisplay}, ${bookingType.display}, ${roomSize.display}`;\n\n this.filterDisplay = this.filters.map(f => f.shortDisplay).join(', ');\n this.filterCount = this.filters.length > 0 ? `(${this.filters.length})` : '';\n }\n}\n","import {\n Component,\n OnInit\n} from '@angular/core';\nimport { first } from 'rxjs/operators';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n ApplicationLink,\n ApplicationService\n} from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'a-footer-menu',\n templateUrl: './footer-menu.component.html',\n styleUrls: ['./footer-menu.component.scss']\n})\nexport class FooterMenuComponent extends BaseDirective implements OnInit {\n\n /** Tiles to display on the home page */\n public tiles: ApplicationLink[] = [];\n\n constructor(private _service: ApplicationService) {\n super();\n }\n\n /** Angular Component initialisation lifecycle hook */\n public ngOnInit(): void {\n this._service.initialised.pipe(first(_ => _)).subscribe(() => {\n this.tiles = this._service.setting('app.home.tiles') || [];\n });\n }\n}\n","\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output\n} from '@angular/core';\nimport {\n ActivatedRoute,\n Router\n} from '@angular/router';\nimport { first } from 'rxjs/operators';\n\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport {\n ApplicationService,\n Building,\n BuildingLevel,\n OrganisationService\n} from '@mckinsey-converge/data-common';\n\n@Component({\n selector: 'a-map-controls',\n templateUrl: './map-controls.component.html',\n styleUrls: ['./map-controls.component.scss']\n})\nexport class MapControlsComponent extends BaseDirective implements OnInit {\n /** ID of the active building */\n @Input() public building: string;\n /** ID of the active level */\n @Input() public level: string;\n /** Emitter for changes to the active level */\n @Output() public levelChange = new EventEmitter();\n /** Details of the active building */\n public building_details: Building = this._org.building;\n /** List of available buildings */\n public building_list: Building[] = [];\n /** List of available levels */\n public level_list: readonly BuildingLevel[] = [];\n\n public get can_select_building(): boolean {\n return !!this._service.setting('app.explore.can_select_building');\n }\n\n constructor(\n private _route: ActivatedRoute,\n private _router: Router,\n private _service: ApplicationService,\n private _org: OrganisationService\n ) {\n super();\n }\n\n public ngOnInit() {\n this._org.listen('buildings').pipe(first(_ => !!_ && !!_.length)).subscribe(() => {\n this.subscription(\n 'route.query',\n this._route.queryParamMap.subscribe(params => {\n /* istanbul ignore else */\n if (params.has('level')) {\n const level_id = params.get('level');\n const level = this._org.levelWithID(level_id);\n this.level = level.id;\n this.setBuilding(level.building_id);\n this.levelChange.emit(this.level);\n this.clearTimeout('check_building');\n }\n })\n );\n this.building_list = this._org.buildings;\n this.timeout('check_building', () => {\n /* istanbul ignore else */\n if (!this.building) {\n this.setBuilding(this._org.building.id);\n }\n this.levelChange.emit(this.level);\n });\n });\n }\n\n public setBuilding(bld_id: string) {\n const building = this._org.buildings.find(bld => bld.id === bld_id);\n /* istanbul ignore else */\n if (building) {\n this.building_details = building;\n this.building = bld_id;\n this._org.building = building;\n this.level_list = building.levels;\n /* istanbul ignore else */\n if (this.level_list.length && !this.level_list.find(lvl => lvl.id === this.level)) {\n this.updateLevel(this.level_list[0].id);\n }\n }\n }\n\n public updateLevel(lvl_id: string) {\n this.level = lvl_id;\n this.levelChange.emit(this.level);\n this._router.navigate([], {\n relativeTo: this._route,\n queryParams: { level: lvl_id }\n });\n }\n}\n","
\n 1\"\n >\n \n {{ building_details?.code }} - {{ building_details?.name }} \n \n
\n
{{ bld.code }}
\n
{{ bld.name }}
\n
{{ bld.address }}
\n
\n
\n
\n \n \n \n \n {{ level.name }}\n \n \n \n
\n","import {\n Component,\n EventEmitter,\n Input,\n Output\n} from '@angular/core';\n\nimport {\n ApplicationLink,\n ApplicationService\n} from '@mckinsey-converge/data-common';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\nimport { DateNow } from '@mckinsey-converge/date-tz';\n\n\n@Component({\n selector: 'a-overlay-menu',\n templateUrl: './overlay-menu.component.html',\n styleUrls: ['./overlay-menu.component.scss']\n})\nexport class OverlayMenuComponent extends BaseDirective {\n /** Whether to show the menu */\n @Input() public show: boolean;\n /** Emitter for changes to show */\n @Output() public showChange = new EventEmitter();\n\n /** List of links to display on the menu */\n public get menu_items(): ApplicationLink[] {\n const settings = this._service.setting('app.general.menu') || { items: [] };\n return settings.items || [];\n }\n\n /** Copyright details for the application */\n public get copyright(): string {\n return (this._service.setting('app.general.menu') || {}).copyright || '';\n }\n\n public get settings() {\n const settings = this._service.setting('app.general.menu') || { position: '' };\n return settings;\n }\n\n constructor(private _service: ApplicationService) {\n super();\n }\n\n /** Current year to display for copyright */\n public get year(): number {\n return DateNow(new Date()).dateYear;\n }\n\n /** Close the overlay menu */\n public close() {\n this.show = false;\n this.showChange.emit(this.show);\n }\n\n public delayedClose() {\n this.timeout('close', () => this.close(), 50);\n }\n\n public cancelClose() {\n this.timeout('cancel_close', () => this.clearTimeout('close'), 10);\n }\n}\n","\n
\n
\n
\n \n
\n
\n \n
\n
\n Copyright © {{ year }} {{ copyright }}\n
\n
\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnInit\n} from '@angular/core';\nimport { throttleTime, tap } from 'rxjs/operators';\nimport { BehaviorSubject, fromEvent } from 'rxjs';\nimport { ImageDirective } from '@mckinsey-converge/base';\nimport { setupRoomImages } from '@mckinsey-converge/data-common';\nimport { SpaceImageObject } from 'libs/base/src/lib/types.utilities'\n\n@Component({\n selector: 'mck-responsive-inline-images',\n template: `\n
\n
\n \n
\n Images Coming Soon\n
\n \n
\n
\n
\n Images Coming Soon\n
\n
\n
\n `,\n styleUrls: ['./responsive-inline-images.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ResponsiveInlineImagesComponent extends ImageDirective implements OnInit {\n\n /** Input array of images */\n @Input() public rootFolderURL: string;\n @Input() public fileSlug: string;\n\n /** Ignore this param, it's only use is to bypass the image onload event in testing */\n @Input() public imagesLoaded: boolean;\n public loadImages = new BehaviorSubject([]);\n\n public foundImages: SpaceImageObject[] = [1,2,3].map(n => {\n return {path: `assets/img/rooms/placeholder-${n}.png`};\n });\n\n public mobile = false;\n\n constructor(private cdRef: ChangeDetectorRef,) {\n super();\n }\n\n public ngOnInit(): void {\n const breakpoint = 768;\n\n if (window) {\n this.mobile = window.innerWidth < breakpoint;\n }\n\n fromEvent(window, 'resize').pipe(throttleTime(500)).pipe(tap({\n next: val => {\n const target = val.target as Window;\n this.mobile = target.innerWidth < breakpoint;\n }\n })).subscribe();\n setupRoomImages(this, [1,2,3], this.rootFolderURL, this.fileSlug, this.imagesLoaded);\n this.subscription(\n\t\t\t\t\t\t'found_images',\n\t\t\t\t\t\tthis.loadImages.subscribe((imgArr: SpaceImageObject[]) => {\n\t\t\t\t\t\t\tif(imgArr.length) this.foundImages = imgArr;\n\t\t\t\t\t\t\tthis.cdRef.detectChanges();\n\t\t\t\t\t\t}));\n }\n\n public showLabel(path) {\n return path.includes('placeholder');\n } \n\n public get timestamp () {\n return (new Date()).getTime()\n }\n}\n","import {\n Component,\n Inject,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n MatDialogRef,\n MAT_DIALOG_DATA\n} from '@angular/material/dialog';\nimport {\n BaseClass\n} from '@mckinsey-converge/base';\nimport { ComposerService } from '@placeos/composer';\nimport { first } from 'rxjs/operators';\n\n@Component({\n selector: 'a-survey-modal',\n templateUrl: './survey-modal.component.html',\n styleUrls: ['./survey-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class SurveyModalComponent extends BaseClass implements OnInit {\n constructor(\n @Inject(MAT_DIALOG_DATA) public _data: any,\n private _composer: ComposerService,\n private _dialog_ref: MatDialogRef,\n ) {\n super();\n }\n\n /* present experience question by default */\n public token = '';\n public phase = 'intro';\n public baseUrl = '';\n\n public questions = {\n created_at: 0,\n updated_at: 0,\n header_question: \"What went wrong?\",\n header_subtext: \"Select one or several options\",\n options: [],\n id: \"\"\n }\n\n public answers = {\n questions_id: \"\",\n positive: true, // Experience is positive until the questions are displayed\n option_responses: [],\n comments: \"\"\n };\n\n // Show the questions and mark the experience negative. (false positive)\n public showQuestions(): void {\n this.answers.positive = false;\n this.phase = 'questions';\n }\n\n public ngOnInit(): void {\n /* fetch the question options once composer is initialized */\n this._composer.initialised.pipe(first(_ => _)).subscribe(() => {\n const token = this._composer.auth.token;\n this.token = token;\n this.baseUrl = this._composer.auth.api_endpoint.replace(this._composer.auth.route, '/api/staff/feedback')\n this.getFeedbackQuestionsFromApi(token, this._data)\n });\n }\n\n public getFeedbackQuestionsFromApi(token: string, questionID: string) {\n new Promise((resolve, reject) => {\n const url = `${this.baseUrl}/questions/${questionID}`;\n let result: any = null;\n this._composer.http.get(url).subscribe(\n (d) => (result = d),\n (e) => {\n reject(e);\n },\n () => {\n resolve(result);\n }\n );\n }).then(d => {\n this.questions = d;\n this.answers = {\n questions_id: this.questions.id,\n positive: true,\n option_responses: this.questions.options.map(q => ({ // map the questions to default answers.\n id: q.id,\n checked: false,\n })),\n comments: \"\"\n };\n }).catch(e => {\n console.log('error', e)\n });\n }\n\n // Handle the checkbox changes\n public handleChange(value: any) {\n this.answers.option_responses.some((o, i) => {\n if (o.id === value.id) {\n this.answers.option_responses[i].checked = !this.answers.option_responses[i].checked;\n return true;\n }\n });\n }\n\n // Handle the comment input changes\n public handleComment($evemt: any) {\n this.answers.comments = $evemt.target.value;\n }\n\n // Submit the Survey in it's current state.\n public confirm() {\n new Promise((resolve, reject) => {\n let result: any = null;\n this._composer.http.post(this.baseUrl, this.answers).subscribe(\n (d) => (result = d),\n (e) => {\n reject(e);\n },\n () => {\n resolve(result);\n }\n );\n }).then(d => {\n this.phase = 'exit';\n this.closeModal(true);\n }).catch(e => {\n console.log('error', e)\n this.phase = 'exit';\n this.closeModal(true);\n });\n \n }\n\n // Close the modal\n public closeModal(delayed: boolean = false) {\n if (delayed) {\n this.timeout('closeModal', () => {\n this._dialog_ref.close();\n }, 2000);\n } else {\n this._dialog_ref.close();\n }\n }\n}\n","
\n \n
\n
\n \n
\n How was your booking experience?\n
\n
\n
\n \n \n
\n
\n\n\n
\n
\n \n
\n \n What went wrong?\n

Select one or several options

\n
\n
\n
\n
\n {{question.option}}\n
\n
\n \n \n \n \n
\n
\n \n \n \n
\n\n
\n
\n \n
\n\n \n
\n Thank you!\n
\n \n
\n
\n
\n
","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n distinctUntilChanged,\n first,\n} from 'rxjs/operators';\nimport {\n ApplicationIcon,\n BookingFormState,\n SettingsService,\n openBookingSurvey,\n clearBookingFormData,\n BookingFormData,\n SeriesAction,\n selectActiveForm,\n OrganisationService\n} from '@mckinsey-converge/data-common';\nimport { loadRoomsForResults } from '@mckinsey-converge/rooms';\n\nimport { loadOrganisations } from '@mckinsey-converge/organisation';\nimport { BuildingStoreState } from '@mckinsey-converge/buildings';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport {\n NavigationEnd,\n Router,\n ActivatedRoute\n} from '@angular/router';\nimport {\n generateFeedbackUrl,\n Urls\n} from '../../utilities/urls';\nimport { SurveyModalComponent } from '../survey-modal/survey-modal.component';\nimport {\n Store, select\n} from '@ngrx/store';\n\nexport enum TopBarHeaderMode {\n Light = 'light',\n Dark = 'dark',\n}\n\nexport interface RoutePayload {\n /** IE ['/home', 'results'] */\n route: string[];\n /** IE { display: '/list' } */\n queryParams?: object;\n}\n\nexport type RoomBookingStoreState = BookingFormState & BuildingStoreState;\n\n@Component({\n selector: 'a-topbar-header',\n template: `\n
\n
\n \n
\n
\n
\n {{ logo.content }}\n \n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n \n
\n
\n `,\n styleUrls: ['./topbar-header.component.scss'],\n // encapsulation: ViewEncapsulation.None,\n})\nexport class TopbarHeaderComponent extends BaseDirective implements OnInit {\n /** Logo of the application organisation */\n public logo: ApplicationIcon;\n /** Whether to show menu */\n @Input() public menu: boolean;\n /** Whether to show modal close icon */\n @Input() public modal: boolean = false;\n /** Whether t show modal back icon */\n @Input() public backModal: boolean = false;\n /** Whether to disable the survey triggers */\n @Input() public noSurvey: boolean = false;\n /** Name of the page being rendered */\n @Input() public page: string;\n /** The theme to use **/\n @Input() public mode: TopBarHeaderMode = TopBarHeaderMode.Dark;\n /** Override the home route. **/\n @Input() public homeOverride: string | undefined;\n /** Show history back instead of logo block */\n @Input() public back: RoutePayload;\n /** Emitter for changes to menu state */\n @Output() public menuChange = new EventEmitter();\n /** Emitter for the close button */\n @Output() public closeCallback = new EventEmitter();\n /** Emitter for the back button */\n @Output() public onBack = new EventEmitter();\n /** Name of the currently active page */\n public currentPage: string;\n /** Survey modal state */\n public modalOpen: boolean = false;\n isEditSeries: boolean = false;\n\n public get feedback() {\n const feedback_url = this._org.getOrganizationFiltersByRoomType('feedback_url');\n return `${feedback_url}${this.currentPage}`;\n // return generateFeedbackUrl(this.currentPage);\n }\n\n public surveyDialogRef: MatDialogRef = null;\n\n public bookingCompleted: Date = new Date();\n public feedbackId: string = null;\n\n constructor(private store: Store,\n private _settings: SettingsService,\n private _dialog: MatDialog,\n private route: ActivatedRoute,\n private _org: OrganisationService,\n private _router: Router) {\n super();\n }\n\n public ngOnInit(): void {\n this.store.dispatch(loadOrganisations.request());\n this._settings.initialised.pipe(first(_ => _)).subscribe(() => {\n this.logo = this._settings.get(`app.logo_${this.mode}`) || { type: 'icon' };\n });\n this.timeout('Getting Title', () => this.updateRoute(document.title));\n this._router.events.subscribe((event: NavigationEnd) => {\n /* istanbul ignore else */\n if (event instanceof NavigationEnd) {\n this.timeout('Getting Title', () => this.updateRoute(document.title));\n }\n });\n\n // if the survey is allowed (don't in modals! due to duplicate appearances)\n if (!this.noSurvey) {\n // get the active form values\n this.subscription('openSurveyModal', this.store.pipe(\n distinctUntilChanged()\n ).subscribe((next: any | undefined) => {\n const feedbackId = next.organisation?.data?.success?._settings?.discovery_info?.feedback_id;\n if (feedbackId && this.feedbackId !== feedbackId) {\n this.feedbackId = feedbackId;\n }\n if (next.bookingForm?.bookingCompleted && this.bookingCompleted.getTime() < next.bookingForm.bookingCompleted.getTime()) {\n this.bookingCompleted = new Date(next.bookingForm.bookingCompleted.getTime());\n this.openFeedbackModal();\n }\n }));\n }\n\n\n this.subscription('activeForm', this.store.pipe(\n select(selectActiveForm),\n distinctUntilChanged()\n ).subscribe((next: BookingFormData | undefined) => {\n if (next) {\n this.isEditSeries = next.action === SeriesAction.EDIT;\n }\n }));\n }\n\n public updateRoute(location) {\n location = location.substr(0, location.indexOf(' |'));\n this.currentPage = location;\n }\n\n /** Set menu state to `true` */\n public showMenu() {\n this.menu = true;\n this.menuChange.emit(this.menu);\n }\n\n public async goToHome() {\n this.isEditSeries && this.clearFormAndResultData();\n await this._router.navigate([this.homeOverride ?? '/']);\n // await this._router.navigate(['/', 'home'], { relativeTo: this.route });\n this._dialog.closeAll();\n }\n\n\n\tpublic clearFormAndResultData() {\n\t\tthis.store.dispatch(clearBookingFormData());\n\t\tthis.store.dispatch(loadRoomsForResults.clear());\n\t}\n\n public goToHelp() {\n const help_url = this._org.getOrganizationFiltersByRoomType('help_url');\n window.open(help_url || Urls.Help);\n }\n\n public goToFeedback() {\n // Over-engineered button action to mimic/test booking confirmation event.\n this.store.dispatch(openBookingSurvey());\n }\n\n public openFeedbackModal() {\n if (!this.modalOpen && !this.surveyDialogRef) {\n this.modalOpen = true;\n this.surveyDialogRef = this._dialog.open(SurveyModalComponent, {\n disableClose: true,\n panelClass: 'mck-modal-survey',\n data: this.feedbackId,\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n this.surveyDialogRef.afterClosed().subscribe(() => {\n this.modalOpen = false;\n this.surveyDialogRef = null;\n });\n }\n\n }\n\n public async goToBackRoute() {\n this.onBack.emit();\n await this._router.navigate(this.back.route, { queryParams: this.back.queryParams });\n }\n\n}\n","import {\n Component,\n OnInit\n} from '@angular/core';\nimport {\n FormControl,\n FormGroup,\n Validators\n} from '@angular/forms';\nimport { first } from 'rxjs/operators';\n\nimport {\n ApplicationIcon,\n ApplicationService,\n UsersService\n} from '@mckinsey-converge/data-common';\nimport { BaseDirective } from '@mckinsey-converge/base';\n\n@Component({\n selector: 'app-login',\n templateUrl: './login.component.html',\n styleUrls: ['./login.component.scss']\n})\nexport class LoginComponent extends BaseDirective implements OnInit {\n /** Logo of the application organisation */\n public logo: ApplicationIcon;\n /** Whether the user credentials are being checked */\n public loading: boolean;\n /** Form fields for the login form */\n public form: FormGroup;\n\n constructor(private _service: ApplicationService, private _users: UsersService) {\n super();\n }\n\n public ngOnInit(): void {\n this.loading = true;\n this.form = new FormGroup({\n username: new FormControl('', [Validators.required]),\n password: new FormControl('', [Validators.required])\n });\n this._service.initialised.pipe(first(_ => _)).subscribe(() => {\n this.loading = false;\n this.logo = this._service.setting('app.logo_light') || { type: 'icon' };\n });\n }\n\n /** Perform user login */\n public login() {\n this.loading = true;\n const form = this.form.value;\n this._users.login({\n username: form.username,\n password: form.password\n }, { form: true }).then(() => {\n this.loading = false;\n }, () => {\n this.loading = false;\n this.form.controls.password.setErrors({ check: true });\n });\n }\n\n}\n","
\n
\n
\n
\n
\n {{ logo.content }}\n \n
\n
\n
\n \n
\n \n Username:\n \n \n \n Username is required\n \n
\n
\n \n Password:\n \n \n \n Invalid username or password\n \n
\n
\n
\n
\n \n
\n
\n
\n
\n\n
\n
\n \n
\n
Converge is loading
\n
\n
\n","import {\n Component,\n EventEmitter,\n OnInit,\n Output,\n ViewEncapsulation\n} from '@angular/core';\n@Component({\n selector: 'app-map-controls',\n template: `\n
\n
\n \n
\n \n \n
\n \n \n
\n \n \n \n \n
\n
\n `,\n styleUrls: ['./map-controls.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n})\nexport class MapControlsComponent implements OnInit {\n @Output()\n public zoomOutClick = new EventEmitter();\n\n @Output()\n public zoomInClick = new EventEmitter();\n\n @Output()\n public refreshClick = new EventEmitter();\n\n @Output()\n public infoClick = new EventEmitter();\n\n @Output() toggleEvent = new EventEmitter();\n\n public isClosed = true;\n\n toggle() {\n this.toggleEvent.emit();\n this.isClosed = !this.isClosed;\n }\n\n constructor() {}\n\n ngOnInit(): void {}\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewEncapsulation\n} from '@angular/core';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { FormControl } from '@angular/forms';\nimport { BaseDirective } from '@mckinsey-converge/base';\nimport { legendOptions } from '../map.utils';\n\n@Component({\n selector: 'app-map-filters',\n template: `\n
\n
\n \n \n
\n \n \n
\n \n
\n
\n \n \n \n \n
\n
\n `,\n styleUrls: ['./map-filters.component.scss'],\n encapsulation: ViewEncapsulation.Emulated\n})\nexport class MapFiltersComponent extends BaseDirective implements OnInit {\n\n public legendOptions = legendOptions();\n\n @Input()\n public buildings: SelectOption[];\n\n @Input()\n public selectedBuilding: SelectOption;\n\n @Output()\n public selectedBuildingChange = new EventEmitter>();\n\n @Input()\n public levels: SelectOption[];\n\n @Input()\n public selectedLevel: SelectOption;\n\n @Output()\n public selectedLevelChange = new EventEmitter>();\n\n @Input()\n public spaces: SelectOption[];\n\n @Output()\n public selectedSpaceChange = new EventEmitter>();\n\n @Input()\n public selectedSpace: SelectOption;\n\n @Output()\n public searchClick = new EventEmitter();\n\n public buildingControl = new FormControl();\n\n public levelControl = new FormControl();\n\n public spaceControl = new FormControl();\n\n public resetInput: number;\n\n public searchStringPresent = false;\n\n constructor() {\n super();\n }\n\n public ngOnInit(): void {\n this.subscription('buildingChanges',\n this.buildingControl.valueChanges.subscribe(value => this.selectedBuildingChange.emit(value)));\n this.subscription('levelChanges',\n this.levelControl.valueChanges.subscribe(value => this.selectedLevelChange.emit(value)));\n this.subscription('spaceChanges',\n this.spaceControl.valueChanges.subscribe(value => {\n this.selectedSpaceChange.emit(value);\n this.searchClick.emit();\n }));\n }\n\n public clearRoomSearch() {\n this.resetInput = Date.now();\n this.selectedSpace = null;\n this.searchStringPresent = false;\n // TODO, reset the focused room if required?\n }\n\n public inputTextChange(event: any) {\n this.searchStringPresent = !!event.length;\n }\n}\n","import {\n Component,\n Inject,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n Space,\n RoomResultsViewModel,\n} from '@mckinsey-converge/data-common';\nimport { MAP_OVERLAY_DATA } from '@acaprojects/ngx-interactive-map';\n\n\ninterface SpaceWithReturnData extends Space {\n // callback?: Function,\n room?: RoomResultsViewModel,\n parentComponent?: any,\n}\n/**\n * Replaces the built-in {@link MapPinComponent} based on design.\n */\n@Component({\n selector: 'app-map-overlay',\n template: `\n
\n \n
\n
\n
\n \n
\n
\n
\n {{data.simple_name || 'No Label'}}\n \n \n
{{ data.status === 'requestable' ? 'Requestable' : 'Bookable'}} {{ data?.room?.space?.availableOccurrences }} out of {{ data?.room?.space?.totalOccurrences }}
\n
\n
\n
\n\n
\n `,\n styleUrls: ['./map-overlay.component.scss'],\n encapsulation: ViewEncapsulation.Emulated\n})\nexport class MapOverlayComponent implements OnInit {\n constructor(\n @Inject(MAP_OVERLAY_DATA) public data: SpaceWithReturnData,\n ) {\n }\n public ngOnInit(): void {\n }\n\n\n public roomDataCallback() {\n if (this.data.parentComponent.roomSelected && this.data.room) {\n this.data.parentComponent.roomSelected(this.data.room)\n }\n }\n\n public get is_recurrent () {\n return this.data.parentComponent?.bookingFormData?.value?.is_recurrent || false;\n }\n\n public closeOverlay() {\n this.data.parentComponent?.closeMapOverlayOutlet();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { BehaviorSubject, combineLatest, interval } from 'rxjs';\nimport { BaseDirective, HashMap, Point } from '@mckinsey-converge/base';\nimport { MapFeature } from '@acaprojects/ngx-interactive-map/lib/helpers/map.interfaces';\nimport { select, Store } from '@ngrx/store';\nimport { BuildingStoreState } from '@mckinsey-converge/buildings';\nimport {\n Building,\n BuildingLevel,\n SettingsService,\n Space,\n mapBuildingLevelToOption,\n mapResultsToViewModels,\n RoomResultsViewModel,\n selectActiveForm,\n selectBookingLocations,\n selectMapFilteredResults,\n selectSelectedBuildingOptions,\n roomFormDataToQuery,\n FilteredSpaces,\n BookingStoreState,\n storeBookingFormData,\n BookingFormData,\n MapListener,\n selectFilteredDiffSizeResults\n} from '@mckinsey-converge/data-common';\nimport { distinctUntilChanged, map, take, withLatestFrom } from 'rxjs/operators';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { filterUndefined } from '@mckinsey-converge/rx-utils';\nimport { MatDialog } from '@angular/material/dialog';\nimport { OfficeInformationModalComponent } from 'src/app/map/office-information-modal/office-information-modal.component';\nimport {\n CENTER_POINT,\n generateMapListenersForSpace,\n generateMapStyleForSpace,\n MAX_ZOOM_LEVEL,\n MIN_ZOOM_LEVEL,\n roomToMapFeature,\n} from 'src/app/map/map.utils';\nimport {\n loadRoomsForResults,\n loadRoomsForResultsMap,\n mapRoomToSelectOption,\n RoomStoreState,\n} from '@mckinsey-converge/rooms';\nimport { LoadingModel } from '@mckinsey-converge/loading';\nimport { UserStoreState } from '@mckinsey-converge/user';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Location } from '@angular/common';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\n\nexport type MapSearchStoreState = BuildingStoreState &\n RoomStoreState &\n BookingStoreState &\n UserStoreState;\n\n@Component({\n selector: 'app-map-search',\n template: `\n
\n
\n \n \n
\n
\n
\n \n
\n \n \n \n \n
\n
\n `,\n styleUrls: ['./map-search.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n animations: [\n trigger('expandHeight', [\n state(\n 'open',\n style({\n height: '470px',\n })\n ),\n state(\n 'closed',\n style({\n height: 'calc(100vh - 270px)',\n })\n ),\n transition('open <=> closed', animate('600ms ease-out')),\n ]),\n ],\n})\nexport class MapSearchComponent extends BaseDirective implements OnInit {\n @Input()\n public openHeader: boolean = true;\n\n public zoom = new BehaviorSubject(MIN_ZOOM_LEVEL);\n\n public center = new BehaviorSubject(CENTER_POINT);\n public listeners = new BehaviorSubject([]);\n\n public focusedMapSpace = new BehaviorSubject(undefined);\n public features = combineLatest([this.focusedMapSpace]).pipe(\n map((items) => items.filter((i) => !!i))\n );\n\n public focusedRoom = new BehaviorSubject(undefined);\n\n public resultBuildings = new BehaviorSubject([]);\n public resultSpaces = new BehaviorSubject([]);\n // public resultSpaces = new BehaviorSubject>(\n // LoadingModel.empty()\n // );\n\n public activeBuilding = new BehaviorSubject(undefined);\n public activeLevel = new BehaviorSubject(undefined);\n public activeSpace = new BehaviorSubject(undefined);\n\n /** Mapping of elements to CSS styles */\n public style_map = new BehaviorSubject>>({});\n\n public mapUrl = this.activeLevel.pipe(map((level) => level?.map_url ?? ''));\n\n public bookingLocations = new BehaviorSubject[]>([]);\n public buildingLevelOptions = new BehaviorSubject[]>([]);\n public spaceListOptions = new BehaviorSubject[]>([]);\n\n public activeBuildingOption = combineLatest([this.activeBuilding, this.bookingLocations]).pipe(\n map(([building, locations]) => locations.find((l) => l.value === building?.id))\n );\n\n public activeLevelOption = this.activeLevel.pipe(map(mapBuildingLevelToOption));\n public activeSpaceOption = this.activeSpace.pipe(map(mapRoomToSelectOption));\n public bookingFormData = new BehaviorSubject(undefined);\n public floorData: any;\n public floorDataParam: any;\n @Output() toggleEvent = new EventEmitter();\n\n //to capture state for toggling expandHeight animation\n public isOpen = true;\n resultsLoading: any;\n\n propagateToggle() {\n this.toggleEvent.emit();\n this.isOpen = !this.isOpen;\n }\n \n\n constructor(\n private store: Store,\n public dialog: MatDialog,\n private settingService: SettingsService,\n private router: Router,\n private location: Location,\n private route: ActivatedRoute\n ) {\n super();\n this.floorData = location.getState();\n }\n\n public ngOnInit(): void {\n // this.resultsLoading = this.resultSpaces.pipe(map((m) => m.isLoading));\n \n this.subscription(\n 'bookingLocations',\n this.store.pipe(select(selectBookingLocations)).subscribe((next) => {\n this.bookingLocations.next(next);\n // update the map view MCK-1100 when location changes\n const self = this;\n setTimeout(() => {\n self.selectActiveBuilding(self.bookingLocations.value[0]);\n }, 0);\n })\n );\n this.subscription(\n 'bookingSpaceResults',\n combineLatest([\n this.store.pipe(\n select(selectMapFilteredResults),\n map((r: LoadingModel) => { \n this.resultsLoading = r.isLoading;\n return r.success;})\n ),\n this.activeBuilding.pipe(filterUndefined()),\n this.activeLevel.pipe(filterUndefined()),\n ]).subscribe(([filteredSpaces, building, level]) => {\n const spacesFromSelection = (filteredSpaces.spaces || []).filter(\n (s) => !!s.map_id && s.zones.includes(building.id)\n );\n this.resultSpaces.next(spacesFromSelection);\n\n const listeners: MapListener[] = [];\n const styles: HashMap> = {};\n const colour_map = this.settingService.get('app.explore.colors') || {};\n spacesFromSelection.forEach((space) => {\n const status = filteredSpaces.statusMap[space.id];\n const mapStyle = generateMapStyleForSpace(space, status, colour_map);\n styles[`#${mapStyle.id}`] = mapStyle.styles;\n listeners.push(\n ...generateMapListenersForSpace(\n space,\n () => {},\n () => {},\n status !== 'in-use' ? \n () => {\n this.activeSpace.next(space);\n this.focusOnRoom(status);\n } \n : ()=> {}\n )\n );\n });\n this.style_map.next(styles);\n this.listeners.next(listeners);\n })\n );\n this.subscription(\n 'bookingResults',\n this.resultSpaces\n .pipe(withLatestFrom(this.activeSpace))\n .subscribe(([resultSpaces, activeSpace]) => {\n this.spaceListOptions.next(resultSpaces.map(mapRoomToSelectOption));\n })\n );\n\n this.subscription(\n 'storeResultedBuildings',\n this.store.pipe(select(selectSelectedBuildingOptions)).subscribe((buildings) => {\n this.resultBuildings.next(buildings);\n // if we dont have active building yet, set it here.\n if (buildings.length > 0 && !this.activeBuilding.value) {\n const firstBuilding = buildings[0];\n this.activeBuilding.next(firstBuilding);\n }\n })\n );\n\n this.subscription(\n 'activeBuildingChange',\n this.activeBuilding\n .pipe(\n filterUndefined(),\n map((b: Building) => b.levels)\n )\n .subscribe((levels) => {\n this.buildingLevelOptions.next(levels.map(mapBuildingLevelToOption));\n \n if(this.activeLevel.value){\n this.floorDataParam = {\n display: this.activeLevel.value.name,\n value: this.activeLevel.value.id,\n };\n this.selectBuildingLevel(this.floorDataParam);\n setTimeout(() => {\n this.refreshFloorNumber();\n });\n }\n \n })\n );\n\n // if levels change and active level no longer part of list, pick first.\n this.subscription(\n 'updateActiveLevelOnActiveBuildingChange',\n this.activeBuilding\n .pipe(\n filterUndefined(),\n distinctUntilChanged(),\n withLatestFrom(this.activeLevel),\n map(\n ([building, activeLevel]) =>\n (activeLevel && building.levels.find((l) => l.id === activeLevel.id)) ||\n building.levels[0]\n )\n )\n .subscribe((level) => {\n this.activeLevel.next(level);\n })\n );\n\n // re-request rooms every minute to update space status.\n this.subscription(\n 'updateSpaceStatusInterval',\n interval(60 * 1000)\n .pipe(withLatestFrom(this.store.select(selectActiveForm)))\n .subscribe(([, form]) => {\n this.store.dispatch(loadRoomsForResultsMap.request(roomFormDataToQuery(form) ));\n })\n );\n\n // get the active form values\n this.subscription(\n 'activeForm',\n this.store\n .pipe(select(selectActiveForm), distinctUntilChanged())\n .subscribe((next: BookingFormData | undefined) => {\n if (next) {\n this.bookingFormData.next(next);\n }\n })\n );\n\n if (this.floorData?.payload) {\n this.floorDataParam = {\n display: this.floorData?.payload.name,\n value: this.floorData?.payload.id,\n };\n this.selectBuildingLevel(this.floorDataParam);\n setTimeout(() => {\n this.refreshFloorNumber();\n });\n }\n }\n\n public refreshFloorNumber(): void {\n this.activeLevelOption = this.activeLevel.pipe(map(mapBuildingLevelToOption));\n }\n\n public zoomIn() {\n if (this.zoom.value < MAX_ZOOM_LEVEL) {\n this.zoom.next(this.zoom.value + 1);\n }\n }\n\n public zoomOut() {\n if (this.zoom.value > MIN_ZOOM_LEVEL) {\n this.zoom.next(this.zoom.value - 1);\n }\n }\n\n public displayOfficeInformation() {\n this.dialog.open(OfficeInformationModalComponent, {\n data: this.activeBuilding.value,\n panelClass: 'mck-alert',\n autoFocus: false,\n backdropClass: 'mck-modal-backdrop',\n });\n }\n\n public resetZoomLevels() {\n this.zoom.next(MIN_ZOOM_LEVEL);\n this.center.next(CENTER_POINT);\n this.focusedRoom.next(undefined);\n // this.focusedMapSpace.next(undefined);\n }\n\n public closeMapOverlayOutlet = () => {\n this.focusedMapSpace.next(undefined)\n this.zoom.next(MIN_ZOOM_LEVEL);\n this.center.next(CENTER_POINT);\n this.focusedRoom.next(undefined);\n };\n \n\n public selectActiveBuilding(selection: SelectOption) {\n this.resultBuildings\n .pipe(\n map((all) => all.find((b) => b.id === selection.value)),\n take(1),\n filterUndefined()\n )\n .subscribe((next) => {\n this.activeBuilding.next(next);\n });\n }\n\n public selectBuildingLevel(selection: SelectOption) {\n this.activeBuilding\n .pipe(\n map((b) => b.levels?.find((l) => l.id === selection?.value)),\n take(1),\n filterUndefined()\n )\n .subscribe((next) => {\n\t\t\t\tthis.store.dispatch(loadRoomsForResultsMap.request(roomFormDataToQuery(this.bookingFormData.value) ));\n this.activeLevel.next(next);\n\n /**\n * update mapUrl as per active level on change of filter search\n */\n this.mapUrl = this.activeLevel.pipe(map((level) => level?.map_url ?? ''))\n });\n }\n\n public selectActiveSpace(selection: SelectOption) {\n this.resultSpaces\n .pipe(\n map((all) => all.find((s) => s.id === selection?.value)),\n take(1),\n filterUndefined()\n )\n .subscribe((next) => {\n this.activeSpace.next(next);\n });\n }\n\n public focusOnRoom(status?:string) {\n this.activeSpace.pipe(take(1), filterUndefined()).subscribe((next) => {\n let delay = 0;\n if (next.level.id !== this.activeLevel.value.id) {\n this.activeLevel.next(next.level);\n delay = 500;\n }\n this.timeout(\n 'updateLevelAndRoom',\n () => {\n const focusedRoom = mapResultsToViewModels(\n [this.activeSpace.value],\n [this.activeLevel.value],\n [this.activeBuilding.value]\n );\n this.focusedRoom.next(focusedRoom[0]);\n this.focusedMapSpace.next(roomToMapFeature(this.focusedRoom.value, this, status));\n this.zoom.next(MAX_ZOOM_LEVEL);\n },\n delay\n );\n });\n }\n\n public roomSelected(room: RoomResultsViewModel) {\n\n\n const { is_recurrent } = this.bookingFormData.value;\n this.bookingFormData.value.recurrence_exceptions = [];\n if(is_recurrent){\n // Handle recurrence conflicts if the booking is part of a recurring series\n const spaceConflicts = room.space.recurrence_availability.filter(recurr => !recurr.available);\n this.bookingFormData.value.recurrence_exceptions = spaceConflicts.map((recurr)=> recurr.date);\n }\n\n\n // Handle timezone offset for accurate date and time information\n let { dateTz } = this.bookingFormData.value;\n // if (this.offset) {\n dateTz = dateTz.addValue({ minutes: 0 });\n // }\n\n /**\n * selectedRoom.space is fully fledged Space class\n * this.bookingFormData.value.booking.room is not and does not contain the timezone\n * this.bookingFormData.value.booking.timezone is legit\n */\n // UPDATE: providing payload as part of extras instead dispatching storeBookingFormData event to avoid redundant backend request calls\n this.router.navigate(['room'], { relativeTo: this.route, state:{payload : {\n ...this.bookingFormData.value,\n // buildings: this._org.buildings, // require to manage browser refresh on room detail screen!\n dateTz,\n offset: 0,\n selectedRoom: room\n }\n }});\n\n\n // submit\n // this.store.dispatch(\n // storeBookingFormData({\n // payload: {\n // ...this.bookingFormData.value,\n // selectedRoom: room,\n // },\n // })\n // );\n\n // this.router.navigate(['room'], { relativeTo: this.route });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MapSearchComponent } from './map-search/map-search.component';\nimport { MapControlsComponent } from './map-controls/map-controls.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { LibraryModule } from '@acaprojects/ngx-interactive-map';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MapFiltersComponent } from './map-filters/map-filters.component';\nimport { UiModule } from '@mckinsey-converge/ui';\nimport { OfficeInformationModalComponent } from './office-information-modal/office-information-modal.component';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MapOverlayComponent } from './map-overlay/map-overlay.component';\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\n\nexport const mapModuleImports = [\n CommonModule,\n MatButtonModule,\n LibraryModule,\n MatSelectModule,\n UiModule,\n MatDialogModule,\n NgxSkeletonLoaderModule\n];\n\nexport const mapModuleDeclarations = [\n MapSearchComponent,\n MapControlsComponent,\n MapFiltersComponent,\n OfficeInformationModalComponent,\n MapOverlayComponent\n];\n\n@NgModule({\n declarations: [\n ...mapModuleDeclarations\n ],\n exports: [\n ...mapModuleDeclarations\n ],\n imports: [\n ...mapModuleImports\n ]\n})\nexport class MapModule {\n}\n","import { SelectOption } from '@mckinsey-converge/ui';\nimport {\n Space,\n SpaceStatus,\n RoomResultsViewModel,\n MapListener\n} from '@mckinsey-converge/data-common';\nimport {\n HashMap,\n Point\n} from '@mckinsey-converge/base';\nimport { MapFeature } from '@acaprojects/ngx-interactive-map/lib/helpers/map.interfaces';\nimport { MapOverlayComponent } from 'src/app/map/map-overlay/map-overlay.component';\n\nexport const MIN_ZOOM_LEVEL = 1;\nexport const MAX_ZOOM_LEVEL = 10;\nexport const CENTER_POINT: Point = { x: 0.5, y: 0.5 };\n\nconst mapSpaceStatusToDisplay = (status: SpaceStatus): string => {\n switch (status) {\n case SpaceStatus.NotBookable:\n return 'Not Bookable';\n case SpaceStatus.Requestable:\n return 'Available by Request';\n case SpaceStatus.Unavailable:\n return 'In Use';\n case SpaceStatus.Available:\n default:\n return 'Available';\n }\n};\n\nconst mapSpaceStatusToOption = (status: SpaceStatus) => ({\n value: status,\n display: mapSpaceStatusToDisplay(status)\n});\n\nexport const legendOptions = (): SelectOption[] => [\n SpaceStatus.Available,\n SpaceStatus.Requestable,\n SpaceStatus.Unavailable,\n SpaceStatus.NotBookable\n].map(mapSpaceStatusToOption);\n\n\nexport const defaultMapBookingRules = [\n 'Rooms showing yellow are restricted and must be requested',\n 'Rooms showing green are available to book for one hour',\n 'Rooms showing red are booked',\n 'Rooms showing grey are not bookable but may be used if they are empty'\n];\n\nexport const defaultMapBookingSubtitle = 'You may request restricted rooms but they will need to be approved by an admin';\n\nexport const generateMapStyleForSpace = (\n space: Space,\n status: SpaceStatus,\n colorStatusMap: HashMap) => {\n const id =\n `${space.map_id}`.indexOf('area') < 0\n ? `area-${space.map_id}-status`\n : space.map_id;\n return (\n {\n id,\n styles: {\n fill: colorStatusMap[`space-${status}`] || '#000',\n opacity: 0.99\n }\n });\n};\n\n/**\n * Generates actions for mapview handling.\n * @param space - the space to generate\n * @param clickSpace - called when clicked or touched\n * @param hoverSpace - called when you hover over a space\n * @param leaveSpace - called when you leave a space.\n */\nexport const generateMapListenersForSpace = (\n space: Space,\n hoverSpace: () => void,\n leaveSpace: () => void,\n clickSpace: () => void\n): MapListener[] => {\n const id =\n `${space.map_id}`.indexOf('area') < 0\n ? `area-${space.map_id}-status`\n : space.map_id;\n const listeners: MapListener[] = [];\n listeners.push({\n id,\n event: 'mouseenter',\n callback: hoverSpace\n });\n listeners.push({\n id,\n event: 'mouseleave',\n callback: leaveSpace\n });\n if (space.bookable) {\n listeners.push({\n id,\n event: 'click',\n callback: clickSpace\n });\n listeners.push({\n id,\n event: 'touchend',\n callback: clickSpace\n });\n }\n return listeners;\n};\n\n\nexport const spaceToMapFeature = (space: Space): MapFeature => ({\n id: `area-${space.map_id}-status`,\n coordinates: null,\n content: MapOverlayComponent,\n data: {\n ...space\n }\n});\n\nexport const roomToMapFeature = (room: RoomResultsViewModel, parentComponent?: any, status?: string): MapFeature => ({\n id: `area-${room.space.map_id}-status`,\n coordinates: null,\n content: MapOverlayComponent,\n data: {\n ...room.space,\n parentComponent,\n room,\n status:status\n }\n});","import {\n Component,\n Inject,\n ViewEncapsulation\n} from '@angular/core';\nimport { HashMap } from '@mckinsey-converge/base';\nimport { \n BookingRuleDetails,\n Building,\n} from '@mckinsey-converge/data-common';\nimport {\n MAT_DIALOG_DATA,\n MatDialogRef\n} from '@angular/material/dialog';\nimport {\n defaultMapBookingRules,\n defaultMapBookingSubtitle\n} from 'src/app/map/map.utils';\n\n@Component({\n selector: 'app-office-information-modal',\n template: `\n \n
\n
Booking in {{building?.name}}
\n
{{targetLinks(info)}}
\n
\n
\n
    \n \n
\n
\n
\n {{group.title}}\n
    \n \n
\n
\n
\n When booking from maps:\n
    \n \n
\n \n

\n For more info email: {{contact}}\n

\n

\n
\n
\n
\n \n
\n
\n `,\n styleUrls: ['./office-information-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class OfficeInformationModalComponent {\n constructor(@Inject(MAT_DIALOG_DATA) public building: Building,\n private dialogRef: MatDialogRef) {\n }\n\n\n /** Booking rule details */\n public get rules(): string[] {\n const building: Building = this.building;\n const details: BookingRuleDetails = building?.booking_details;\n return details?.rules || [] as any;\n }\n\n /** Booking rule details */\n public get info(): string {\n const building: Building = this.building;\n const details: BookingRuleDetails = building?.booking_details;\n return details?.info || defaultMapBookingSubtitle;\n }\n\n public get customHtml(): string | undefined {\n const building: Building = this.building;\n const details: BookingRuleDetails = building?.booking_details;\n return details?.custom_html;\n }\n\n /** Booking map rule details */\n public get map_rules(): string[] {\n const building: Building = this.building;\n const details: BookingRuleDetails = building?.booking_details;\n return details?.map_rules || defaultMapBookingRules as any;\n }\n\n /** Other special booking rules */\n public get other_rules(): { title: string, rules: string[] }[] {\n const building: Building = this.building;\n const details: BookingRuleDetails = building?.booking_details;\n const rules: HashMap = (details as any)?.other_rules || {};\n return Object.keys(rules).reduce((a, v) => {\n \n a.push({ title: v, rules: rules[v] || [] });\n return a;\n }, []);\n }\n\n public get contact(): string {\n const building: Building = this.building;\n const details: BookingRuleDetails = building?.booking_details;\n return details?.contact || '';\n }\n\n public get link(): { url?: string, name?: string } {\n const building: Building = this.building;\n const details: BookingRuleDetails = building?.booking_details;\n return details?.link || {};\n }\n\n public closeModal() {\n this.dialogRef.close();\n }\n\n public targetLinks(info: string) {\n const regex = /[] = [\n BaseDirective,\n LoginComponent,\n TopbarHeaderComponent,\n ResponsiveInlineImagesComponent,\n OverlayMenuComponent,\n FooterMenuComponent,\n MapControlsComponent\n];\n\nconst MATERIAL_MODULES: any[] = [\n MatButtonModule,\n MatSnackBarModule,\n MatDialogModule,\n MatFormFieldModule,\n MatInputModule,\n MatProgressSpinnerModule,\n MatProgressBarModule,\n MatAutocompleteModule,\n MatSelectModule,\n MatChipsModule,\n MatRippleModule,\n MatMenuModule,\n MatCheckboxModule,\n MatTooltipModule,\n MatRadioModule,\n MatTabsModule,\n MatSlideToggleModule\n];\n\nconst CDK_MODULES: any[] = [\n ScrollingModule,\n DragDropModule,\n CdkTableModule\n];\n\n\n@NgModule({\n declarations: [\n ...COMPONENTS\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n APipesModule,\n AInteractiveMapModule,\n ACustomEventsModule,\n RouterModule,\n EditorModule,\n ComposerModule,\n LegacyUiModule,\n LegacyOverlaysModule,\n IvyCarouselModule,\n ...MATERIAL_MODULES,\n ...CDK_MODULES\n ],\n exports: [\n APipesModule,\n AInteractiveMapModule,\n ACustomEventsModule,\n LegacyUiModule,\n LegacyOverlaysModule,\n ...COMPONENTS,\n ...MATERIAL_MODULES,\n ...CDK_MODULES\n ]\n})\nexport class SharedContentModule {\n}\n","import { Component, OnInit } from '@angular/core';\nimport { filter, first, map, distinctUntilChanged, shareReplay } from 'rxjs/operators';\nimport {\n ApplicationLoadingState,\n BaseDirective,\n closestToTimeSlot,\n closestToTimeSlotTz,\n LoadingState,\n} from '@mckinsey-converge/base';\nimport {\n ApplicationIcon,\n ApplicationService,\n Building,\n BuildingCity,\n defaultRoomSizeOption,\n DEFAULT_BOOKING_DURATION,\n flattenDisplayOffices,\n internalBookingTypeOption,\n mapBuildingToSelectOption,\n mapCityToAllSelectOption,\n mapResultsToViewModels,\n OrganisationService,\n SpacesService,\n storeBookingFormData,\n availabilityOptionsToQuery,\n bookingTypeOptions,\n selectFilteredDiffSizeResults,\n flattenBuildingsWithLevels,\n clearRoomFilters,\n allBookingTypeOption,\n roomSizeOptions,\n roomSizeOptionsKiosk,\n} from '@mckinsey-converge/data-common';\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs';\nimport { select, Store } from '@ngrx/store';\nimport { loadUser, selectHasUserData, UserStoreState } from '@mckinsey-converge/user';\nimport { ComposerService } from '@placeos/composer';\nimport { ActivatedRoute, Router, NavigationStart, Event as NavigationEvent } from '@angular/router';\n\nimport {\n DateNow,\n DateTZ,\n convertLocalTimestampToTimezonedDateTz,\n} from '@mckinsey-converge/date-tz';\nimport { DateTime } from 'luxon';\nimport { SelectOption } from '@mckinsey-converge/ui';\nimport { selectCurrentUser } from '@mckinsey-converge/user';\nimport {\n buildingStateSelector,\n loadBuildings,\n selectBuildingOptionsGroupedByCity,\n} from '@mckinsey-converge/buildings';\nimport { loadDiffSizeResults, loadRoomsForResults, loadRoomsForResultsMap } from '@mckinsey-converge/rooms';\nimport { timeStamp } from 'console';\nimport { filterUndefined } from '@mckinsey-converge/rx-utils';\n\n@Component({\n selector: 'app-shell-wrapper',\n templateUrl: './shell.component.html',\n styleUrls: ['./shell.component.scss'],\n})\nexport class ShellWrapperComponent extends BaseDirective implements OnInit {\n /** Loading state of the application */\n public loading_state: ApplicationLoadingState;\n /** Logo of the application organisation */\n public logo: ApplicationIcon;\n\n private userLoading = new BehaviorSubject(true);\n public isQRCode = new BehaviorSubject(true);\n public buildingOptions = new BehaviorSubject[]>([]);\n public zone_id: any;\n public floor: any;\n\n constructor(\n private _service: ApplicationService,\n private placeOs: ComposerService,\n private _org: OrganisationService,\n private activatedRoute: ActivatedRoute,\n private _spaces: SpacesService,\n private router: Router,\n private store: Store\n ) {\n super();\n\n // Initialize roomID\n let roomId = null;\n if (this.activatedRoute.snapshot.queryParamMap.get('id')) {\n roomId = this.activatedRoute.snapshot.queryParamMap.get('id');\n } else if (localStorage.oauth_redirect && localStorage.oauth_redirect.includes('?id=')) {\n roomId = localStorage.oauth_redirect.split('=')[1];\n }\n // roomId ? this.isQRCode.next(false) : this.isQRCode.next(true);\n\n // Initialize zoneID\n let zone_id = null;\n if (this.activatedRoute.snapshot.queryParamMap.get('zone_id')) {\n zone_id = this.activatedRoute.snapshot.queryParamMap.get('zone_id');\n } else if (\n localStorage.oauth_redirect &&\n localStorage.oauth_redirect.includes('?zone_id=')\n ) {\n zone_id = localStorage.oauth_redirect.split('=')[1];\n if (zone_id.includes('&')) {\n zone_id = zone_id.split('&')[0];\n }\n }\n\n this.zone_id = zone_id;\n\n // Initialize floor number\n let floor = null;\n if (this.activatedRoute.snapshot.queryParamMap.get('floor')) {\n floor = this.activatedRoute.snapshot.queryParamMap.get('floor');\n } else if (localStorage.oauth_redirect && localStorage.oauth_redirect.includes('&floor=')) {\n floor = localStorage.oauth_redirect.split('&floor=')[1];\n }\n this.floor = floor;\n (floor && zone_id) || roomId ? this.isQRCode.next(false) : this.isQRCode.next(true);\n }\n\n /** Whether the user needs to login */\n public get show_login(): Observable {\n return this.userLoading;\n }\n\n /** Whether a module is still loading data */\n public get is_loading(): Observable {\n return this.userLoading;\n }\n\n /** List of modules with a loading state */\n public get loading_state_list(): LoadingState[] {\n const list: LoadingState[] = [];\n for (const mod in this.loading_state) {\n if (this.loading_state[mod]) {\n list.push(this.loading_state[mod]);\n }\n }\n return list;\n }\n\n /**\n * Function: To check and fetch room details if available for the scanned roomId\n * @param buildings\n * @param roomId\n */\n public checkRoomId(buildings: Building[], roomId: string) {\n let formGroup = {\n location: [],\n date: closestToTimeSlot(DateTime.now(), 15).valueOf(),\n dateTz: closestToTimeSlotTz(new DateTZ({ date: Date.now(), is_local_tz: true }), 15),\n duration: DEFAULT_BOOKING_DURATION,\n bookingType: bookingTypeOptions[0],\n roomSize: defaultRoomSizeOption,\n selectedRoom: null,\n timezone: null,\n buildings: buildings,\n };\n\n const params = {\n room_ids: roomId,\n };\n\n const availibityParams = {\n room_ids: roomId,\n dateTz: closestToTimeSlotTz(new DateTZ({ date: Date.now(), is_local_tz: false }), 15),\n duration: DEFAULT_BOOKING_DURATION,\n hide_declined: true,\n };\n const query = availabilityOptionsToQuery(availibityParams);\n this._spaces.queryRooms(query).subscribe(\n (res) => {\n //Convert raw data into API object\n const list = res.map((i) => this._spaces.process(i));\n this._spaces.setSpaceList(list);\n /**\n * Building form data to resue to navigate to result page if room is not available!\n */\n const bookingRoom = mapResultsToViewModels(\n list,\n list[0].building.levels,\n buildings\n );\n const city = list[0].building.city;\n const timezone = list[0].timezone;\n const grouped_by_city = {\n key: { name: city, timezone },\n value: buildings?.filter((bld) => bld.city === city) || [],\n };\n const city_buildings = grouped_by_city.value.map((bld) =>\n mapBuildingToSelectOption(grouped_by_city.key.name, bld)\n );\n const options = [mapCityToAllSelectOption(grouped_by_city.key), ...city_buildings];\n\n const seledtedZone: SelectOption = options.filter(\n (e) => e.value === list[0].building.id\n )[0];\n const buildingTimezone = list[0].timezone;\n // form group data\n formGroup = {\n location: [seledtedZone],\n date: closestToTimeSlot(DateTime.now(), 15).valueOf(),\n dateTz: closestToTimeSlotTz(\n new DateTZ({ date: Date.now(), is_local_tz: false }),\n 15\n ).toZone(buildingTimezone),\n duration: DEFAULT_BOOKING_DURATION,\n bookingType:\n list[0].internal_or_external === 'internal'\n ? bookingTypeOptions[0]\n : bookingTypeOptions[1],\n roomSize: defaultRoomSizeOption,\n selectedRoom: bookingRoom[0],\n timezone: buildingTimezone,\n buildings: buildings,\n };\n\n this.store.dispatch(\n storeBookingFormData({\n payload: formGroup,\n })\n );\n this.router.navigate([`../home/results/room`], {\n state: { payload: { ...formGroup, offset: 0 } },\n });\n localStorage.oauth_redirect = localStorage.oauth_redirect.split('?')[0];\n this.isQRCode.next(true);\n },\n (error) => {\n // console.log(error);\n this.isQRCode.next(true);\n // this.router.navigate([`home/`]); // to navigate to default route if room dont exists\n /**\n * Navigate to room result page if no room/id exist in the db/ removed from the db in future -\n */\n this.store.dispatch(storeBookingFormData({ payload: formGroup }));\n this.router.navigate([`../home/results`], {\n state: { payload: { ...formGroup, offset: 0 } },\n queryParams: { display: 'list' },\n });\n }\n );\n }\n\n public ngOnInit(): void {\n // when qr code lands on a url for the second time, reload it (to compensate for different browser/device combination default behaviors)\n this.subscription(\n 'navigationEventShell',\n this.router.events\n .pipe(filter((event) => event instanceof NavigationStart))\n .subscribe((event: NavigationEvent) => {\n if (event instanceof NavigationStart) {\n if (\n event.navigationTrigger === 'popstate' &&\n (event.url.includes('home?zone_id=') || event.url.includes('home?id='))\n ) {\n this.userLoading.next(true);\n window.location.reload();\n }\n }\n })\n );\n\n let roomId = null;\n if (this.activatedRoute.snapshot.queryParamMap.get('id')) {\n roomId = this.activatedRoute.snapshot.queryParamMap.get('id');\n } else if (localStorage.oauth_redirect && localStorage.oauth_redirect.includes('?id=')) {\n roomId = localStorage.oauth_redirect.split('=')[1];\n }\n\n if (roomId) {\n this.subscription(\n 'buildings',\n this._org\n .listen('buildings')\n .pipe(first((_) => !!_ && !!_.length))\n .subscribe((bld_list: Building[]) => {\n this.checkRoomId(bld_list, roomId);\n })\n );\n }\n\n if (this.zone_id && this.floor) {\n this.subscription(\n 'buildings',\n this._org\n .listen('buildings')\n .pipe(first((_) => !!_ && !!_.length))\n .subscribe((bld_list: Building[]) => {\n const building = bld_list.filter((el) => el.id === this.zone_id);\n\n const city = building[0].city;\n const timezone = building[0].timezone;\n\n const grouped_by_city = {\n key: { name: city, timezone },\n value: building || [],\n };\n const city_buildings = grouped_by_city.value.map((bld) =>\n mapBuildingToSelectOption(grouped_by_city.key.name, bld)\n );\n const options = [\n mapCityToAllSelectOption(grouped_by_city.key),\n ...city_buildings,\n ];\n\n const seledtedZone: SelectOption = options.filter(\n (e) => e.value === building[0].id\n )[0];\n const buildingTimezone = building[0].timezone;\n // form group data\n const addMin = DateTime.now().get('minute') % 5 === 0 ? 1 : 0;\n const formGroup = {\n location: [seledtedZone],\n date: closestToTimeSlot(\n DateTime.now().plus({ minutes: addMin }),\n 15\n ).valueOf(),\n dateTz: closestToTimeSlotTz(\n new DateTZ({\n date: DateTime.now().plus({ minutes: addMin }),\n is_local_tz: false,\n building_tz: buildingTimezone,\n }),\n 15\n ),\n duration: 35,\n bookingType: allBookingTypeOption, // all rooms (including internal and external both)\n roomSize: roomSizeOptionsKiosk[3],\n selectedRoom: null,\n timezone: buildingTimezone,\n buildings: bld_list,\n };\n\n const query2 = {\n // capacity: 3,\n locations: this.zone_id,\n // capacity_max: 9,\n // diff_capacity: true,\n hide_declined: true,\n dateTz: closestToTimeSlotTz(\n new DateTZ({\n date: DateTime.now().plus({ minutes: addMin }),\n is_local_tz: false,\n building_tz: buildingTimezone,\n }),\n 15\n ),\n duration: 35,\n };\n\n //clear search filters first if any applied previously\n this.store.dispatch(clearRoomFilters());\n\n this.store.dispatch(loadRoomsForResults.clear());\n this.store.dispatch(storeBookingFormData({ payload: formGroup }));\n\n this.store.dispatch(loadRoomsForResults.request(query2));\n localStorage.oauth_redirect = '';\n // To do: navigate to floor-map route\n this.router.navigate([`../home/results`], {\n state: {\n payload: this.floor,\n building: building,\n floorMap: true,\n url: window.location.href,\n },\n queryParams: { display: '' },\n });\n this.isQRCode.next(true);\n })\n );\n }\n\n this.subscription(\n 'loading',\n this._service.listen('loading').subscribe((loading) => {\n this.loading_state = loading;\n })\n );\n\n this._service.initialised.pipe(first((_) => _)).subscribe(() => {\n this.logo = this._service.setting('app.logo_light') || { type: 'icon' };\n });\n\n /**\n * Load current user into redux. this is meant to remove old way of loading user from user's service.\n */\n this.subscription(\n 'currentUser',\n combineLatest([\n this.store.pipe(select(selectHasUserData)),\n this.placeOs.initialised,\n this.isQRCode, // added to track room details if QR code used to open app\n ])\n .pipe(\n filter(([_, initialized, isQRCodeScanedAndReady]) => {\n console.log(_);\n return initialized && isQRCodeScanedAndReady;\n })\n )\n .subscribe(([next]) => {\n this.userLoading.next(!next);\n if (!next) {\n this.store.dispatch(loadUser.request());\n }\n })\n );\n }\n}\n","
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
Converge is loading
\n
\n
\n
\n","export enum Urls {\n LearnMore = 'https://our-firm.intranet.mckinsey.com/covid-portal/travel',\n Feedback = 'mailto:converge_feedback@mckinsey.com?subject=Feedback for page: ',\n Help = 'https://mckinsey.service-now.com/ghd?id=topic_simple&topic_id=54e8eb091bea3d1831b17449cd4bcbed',\n OfficeContacts = 'https://our-firm.intranet.mckinsey.com/ourfirm/geographies',\n}\n\nexport const generateFeedbackUrl = (page: string) => {\n return `${Urls.Feedback}${page}`;\n};\n","import { EnvironmentData } from '@mckinsey-converge/environment';\n\nexport const environment: EnvironmentData = {\n production: true,\n hmr: false,\n heap_io_id: 91016686,\n};\n","import { SettingsData } from '@mckinsey-converge/data-common';\n\n;\n/**\n * GENERAL APPLICATION SETTINGS\n */\nconst general = {\n menu: {\n items: [],\n copyright: 'McKinsey & Company',\n position: 'left'\n }\n};\n\n/**\n * HOME PAGE SETTINGS\n */\nconst home = {\n background: 'assets/img/skyline.jpg',\n tiles: [\n {\n name: 'Book',\n route: '/book/spaces',\n icon: {\n type: 'icon',\n class: 'custom-book'\n }\n },\n {\n name: 'Maps',\n route: '/explore/space',\n icon: {\n type: 'icon',\n class: 'custom-spaces'\n }\n },\n {\n name: 'My Day',\n route: '/schedule',\n icon: {\n type: 'icon',\n class: 'custom-schedule'\n }\n }\n ]\n};\n/**\n * HELP/SUPPORT SETTINGS\n */\nconst help = {\n tiles: [],\n columns: 2\n};\n/**\n * BOOKING FLOW SETTINGS\n */\nconst booking = {\n booking_types: [\n { name: 'Internal', id: 'internal' },\n { name: 'External', id: 'external' },\n ],\n show_fields: [\n 'attendees',\n 'body',\n 'catering',\n 'dateTz',\n 'duration',\n 'organiser',\n 'title',\n 'type',\n 'all_day',\n 'needs_space',\n 'has_catering'\n ],\n html_body: false,\n multiple_spaces: true,\n desk_start: 9\n};\n/*===========================*\\\n|| SPACE LISTING SETTINGS ||\n\\*===========================*/\nconst space_display = {\n show_images: false\n};\n/*===========================*\\\n|| USER DIRECTORY SETTINGS ||\n\\*===========================*/\nconst directory = {\n show_avatars: true,\n min_search_length: 3\n};\n/*===========================*\\\n|| EXPLORE MAP SETTINGS ||\n\\*===========================*/\nconst explore = {\n colors: {\n 'space-available': '#43a047',\n 'space-requestable': '#ffb300',\n 'space-unavailable': '#e53935',\n 'space-in-use': '#d4483e',\n 'space-not-bookable': '#ccc',\n 'desk-available': '#43a047',\n 'desk-available-stroke': '#1b5e20',\n 'desk-unavailable': '#e53935',\n 'desk-unavailable-stroke': '#b71c1c',\n 'desk-reserved': '#ffb300',\n 'desk-reserved-stroke': '#ff6f00',\n 'desk-not-bookable': '#fff',\n 'desk-not-bookable-stroke': '#ccc',\n 'zone-low': '#43a047',\n 'zone-medium': '#ffb300',\n 'zone-high': '#e53935'\n },\n can_select_building: true,\n show_legend_group_names: false,\n show_timeline: true,\n legend: {\n General: [\n { key: 'space-available', name: 'Available' },\n { key: 'space-requestable', name: 'Available by request' },\n { key: 'space-unavailable', name: 'In use' },\n { key: 'space-not-bookable', name: 'Not Bookable' }\n ]\n }\n};\n\n/*=========================*\\\n|| DAY VIEW SETTINGS ||\n\\*=========================*/\nconst day_view = {\n dragdrop: false,\n};\n\n\n/**\n * ROOT APPLICATION SETTINGS\n */\nconst app = {\n title: 'McKinsey & Company',\n description: 'McKinsey & Company Staff UI written with Angular Framework',\n short_name: 'STAFF',\n logo_light: {\n type: 'img',\n src: 'assets/img/logo.svg',\n background: ''\n },\n logo_dark: {\n type: 'img',\n src: 'assets/img/logo-inverse.svg',\n background: ''\n },\n heap_io: {\n app_id: 3540602199,\n force_ssl: true,\n secure_cookie: true,\n disable_text_capture: true,\n cookie_path: '/staff/'\n },\n general,\n home,\n help,\n booking,\n space_display,\n directory,\n explore,\n day_view\n}\n\n\n/**\n * ROOT SETTIGNS\n */\nexport const DEFAULT_SETTINGS: SettingsData = {\n debug: true,\n composer: {\n domain: '',\n route: '/staff',\n protocol: '',\n port: '',\n use_domain: false,\n local_login: false\n },\n app,\n mock: false,\n frontend: 'staff',\n};\n","import { ApplicationRef, NgModuleRef } from '@angular/core';\nimport { createNewHosts } from '@angularclass/hmr';\n\nexport const hmrBootstrap = (\n module: any,\n bootstrap: () => Promise>,\n) => {\n let ngModule: NgModuleRef;\n module.hot.accept();\n bootstrap().then(mod => (ngModule = mod));\n module.hot.dispose(() => {\n const appRef: ApplicationRef = ngModule.injector.get(ApplicationRef);\n const elements = appRef.components.map(c => c.location.nativeElement);\n const makeVisible = createNewHosts(elements);\n ngModule.destroy();\n makeVisible();\n });\n};\n","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\nimport { environment } from './environments/environment';\nimport { hmrBootstrap } from './hmr';\nimport { AppModule } from './app/app.module';\n\nif (environment.production) {\n enableProdMode();\n}\n\nconst bootstrap = () => platformBrowserDynamic().bootstrapModule(AppModule);\n\n// comes from https://medium.com/wizardnet972/hot-module-replacement-with-angular-cli-5fc7a3ae4a9c\nif (environment.hmr) {\n if ((module as any).hot) {\n hmrBootstrap(module, bootstrap);\n } else {\n console.error('HMR is not enabled for webpack-dev-server!');\n console.log('Are you using the --hmr flag for ng serve?');\n }\n} else {\n bootstrap().catch(err => console.log(err));\n}\n"]} \ No newline at end of file diff --git a/staff/styles-es2015.js b/staff/styles-es2015.js index 971ce82ff..1210889a1 100644 --- a/staff/styles-es2015.js +++ b/staff/styles-es2015.js @@ -11,7 +11,7 @@ var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "../../node_modules/css-loader/dist/runtime/api.js"); exports = ___CSS_LOADER_API_IMPORT___(true); // Module -exports.push([module.i, "@charset \"UTF-8\";\n/* Theme for the ripple elements.*/\n/* stylelint-disable material/no-prefixes */\n/* stylelint-enable */\n.mat-badge-content {\n font-weight: 600;\n font-size: 12px;\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.mat-badge-small .mat-badge-content {\n font-size: 9px;\n}\n.mat-badge-large .mat-badge-content {\n font-size: 24px;\n}\n.mat-h1, .mat-headline, .mat-typography h1 {\n font: 400 24px/32px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n margin: 0 0 16px;\n}\n.mat-h2, .mat-title, .mat-typography h2 {\n font: 500 20px/32px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n margin: 0 0 16px;\n}\n.mat-h3, .mat-subheading-2, .mat-typography h3 {\n font: 400 16px/28px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n margin: 0 0 16px;\n}\n.mat-h4, .mat-subheading-1, .mat-typography h4 {\n font: 400 15px/24px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n margin: 0 0 16px;\n}\n.mat-h5, .mat-typography h5 {\n font: 400 calc(14px * 0.83)/20px Roboto, \"Helvetica Neue\", sans-serif;\n margin: 0 0 12px;\n}\n.mat-h6, .mat-typography h6 {\n font: 400 calc(14px * 0.67)/20px Roboto, \"Helvetica Neue\", sans-serif;\n margin: 0 0 12px;\n}\n.mat-body-strong, .mat-body-2 {\n font: 500 14px/24px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n.mat-body, .mat-body-1, .mat-typography {\n font: 400 14px/20px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n.mat-body p, .mat-body-1 p, .mat-typography p {\n margin: 0 0 12px;\n}\n.mat-small, .mat-caption {\n font: 400 12px/20px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n.mat-display-4, .mat-typography .mat-display-4 {\n font: 300 112px/112px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: -0.05em;\n margin: 0 0 56px;\n}\n.mat-display-3, .mat-typography .mat-display-3 {\n font: 400 56px/56px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: -0.02em;\n margin: 0 0 64px;\n}\n.mat-display-2, .mat-typography .mat-display-2 {\n font: 400 45px/48px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: -0.005em;\n margin: 0 0 64px;\n}\n.mat-display-1, .mat-typography .mat-display-1 {\n font: 400 34px/40px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n margin: 0 0 64px;\n}\n.mat-bottom-sheet-container {\n font: 400 14px/20px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n.mat-button, .mat-raised-button, .mat-icon-button, .mat-stroked-button,\n.mat-flat-button, .mat-fab, .mat-mini-fab {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 14px;\n font-weight: 500;\n}\n.mat-button-toggle {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.mat-card {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.mat-card-title {\n font-size: 24px;\n font-weight: 500;\n}\n.mat-card-header .mat-card-title {\n font-size: 20px;\n}\n.mat-card-subtitle,\n.mat-card-content {\n font-size: 14px;\n}\n.mat-checkbox {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.mat-checkbox-layout .mat-checkbox-label {\n line-height: 24px;\n}\n.mat-chip {\n font-size: 14px;\n font-weight: 500;\n}\n.mat-chip .mat-chip-trailing-icon.mat-icon,\n.mat-chip .mat-chip-remove.mat-icon {\n font-size: 18px;\n}\n.mat-table {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.mat-header-cell {\n font-size: 12px;\n font-weight: 500;\n}\n.mat-cell, .mat-footer-cell {\n font-size: 14px;\n}\n.mat-calendar {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.mat-calendar-body {\n font-size: 13px;\n}\n.mat-calendar-body-label,\n.mat-calendar-period-button {\n font-size: 14px;\n font-weight: 500;\n}\n.mat-calendar-table-header th {\n font-size: 11px;\n font-weight: 400;\n}\n.mat-dialog-title {\n font: 500 20px/32px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n.mat-expansion-panel-header {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 15px;\n font-weight: 400;\n}\n.mat-expansion-panel-content {\n font: 400 14px/20px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n.mat-form-field {\n font-size: inherit;\n font-weight: 400;\n line-height: 1.125;\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n.mat-form-field-wrapper {\n padding-bottom: 1.34375em;\n}\n.mat-form-field-prefix .mat-icon,\n.mat-form-field-suffix .mat-icon {\n font-size: 150%;\n line-height: 1.125;\n}\n.mat-form-field-prefix .mat-icon-button,\n.mat-form-field-suffix .mat-icon-button {\n height: 1.5em;\n width: 1.5em;\n}\n.mat-form-field-prefix .mat-icon-button .mat-icon,\n.mat-form-field-suffix .mat-icon-button .mat-icon {\n height: 1.125em;\n line-height: 1.125;\n}\n.mat-form-field-infix {\n padding: 0.5em 0;\n border-top: 0.84375em solid transparent;\n}\n.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\n.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.34375em) scale(0.75);\n width: 133.3333333333%;\n}\n.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.34374em) scale(0.75);\n width: 133.3333433333%;\n}\n.mat-form-field-label-wrapper {\n top: -0.84375em;\n padding-top: 0.84375em;\n}\n.mat-form-field-label {\n top: 1.34375em;\n}\n.mat-form-field-underline {\n bottom: 1.34375em;\n}\n.mat-form-field-subscript-wrapper {\n font-size: 75%;\n margin-top: 0.6666666667em;\n top: calc(100% - 1.7916666667em);\n}\n.mat-form-field-appearance-legacy .mat-form-field-wrapper {\n padding-bottom: 1.25em;\n}\n.mat-form-field-appearance-legacy .mat-form-field-infix {\n padding: 0.4375em 0;\n}\n.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\n.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.001px);\n -ms-transform: translateY(-1.28125em) scale(0.75);\n width: 133.3333333333%;\n}\n.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.00101px);\n -ms-transform: translateY(-1.28124em) scale(0.75);\n width: 133.3333433333%;\n}\n.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.00102px);\n -ms-transform: translateY(-1.28123em) scale(0.75);\n width: 133.3333533333%;\n}\n.mat-form-field-appearance-legacy .mat-form-field-label {\n top: 1.28125em;\n}\n.mat-form-field-appearance-legacy .mat-form-field-underline {\n bottom: 1.25em;\n}\n.mat-form-field-appearance-legacy .mat-form-field-subscript-wrapper {\n margin-top: 0.5416666667em;\n top: calc(100% - 1.6666666667em);\n}\n@media print {\n .mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\n.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.28122em) scale(0.75);\n }\n .mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.28121em) scale(0.75);\n }\n .mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.2812em) scale(0.75);\n }\n}\n.mat-form-field-appearance-fill .mat-form-field-infix {\n padding: 0.25em 0 0.75em 0;\n}\n.mat-form-field-appearance-fill .mat-form-field-label {\n top: 1.09375em;\n margin-top: -0.5em;\n}\n.mat-form-field-appearance-fill.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\n.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-0.59375em) scale(0.75);\n width: 133.3333333333%;\n}\n.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-0.59374em) scale(0.75);\n width: 133.3333433333%;\n}\n.mat-form-field-appearance-outline .mat-form-field-infix {\n padding: 1em 0 1em 0;\n}\n.mat-form-field-appearance-outline .mat-form-field-label {\n top: 1.84375em;\n margin-top: -0.25em;\n}\n.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\n.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.59375em) scale(0.75);\n width: 133.3333333333%;\n}\n.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.59374em) scale(0.75);\n width: 133.3333433333%;\n}\n.mat-grid-tile-header,\n.mat-grid-tile-footer {\n font-size: 14px;\n}\n.mat-grid-tile-header .mat-line,\n.mat-grid-tile-footer .mat-line {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n box-sizing: border-box;\n}\n.mat-grid-tile-header .mat-line:nth-child(n+2),\n.mat-grid-tile-footer .mat-line:nth-child(n+2) {\n font-size: 12px;\n}\ninput.mat-input-element {\n margin-top: -0.0625em;\n}\n.mat-menu-item {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 14px;\n font-weight: 400;\n}\n.mat-paginator,\n.mat-paginator-page-size .mat-select-trigger {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 12px;\n}\n.mat-radio-button {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.mat-select {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.mat-select-trigger {\n height: 1.125em;\n}\n.mat-slide-toggle-content {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.mat-slider-thumb-label-text {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 12px;\n font-weight: 500;\n}\n.mat-stepper-vertical, .mat-stepper-horizontal {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.mat-step-label {\n font-size: 14px;\n font-weight: 400;\n}\n.mat-step-sub-label-error {\n font-weight: normal;\n}\n.mat-step-label-error {\n font-size: 14px;\n}\n.mat-step-label-selected {\n font-size: 14px;\n font-weight: 500;\n}\n.mat-tab-group {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.mat-tab-label, .mat-tab-link {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 14px;\n font-weight: 500;\n}\n.mat-toolbar,\n.mat-toolbar h1,\n.mat-toolbar h2,\n.mat-toolbar h3,\n.mat-toolbar h4,\n.mat-toolbar h5,\n.mat-toolbar h6 {\n font: 500 20px/32px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n margin: 0;\n}\n.mat-tooltip {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 10px;\n padding-top: 6px;\n padding-bottom: 6px;\n}\n.mat-tooltip-handset {\n font-size: 14px;\n padding-top: 8px;\n padding-bottom: 8px;\n}\n.mat-list-item {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.mat-list-option {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.mat-list-base .mat-list-item {\n font-size: 16px;\n}\n.mat-list-base .mat-list-item .mat-line {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n box-sizing: border-box;\n}\n.mat-list-base .mat-list-item .mat-line:nth-child(n+2) {\n font-size: 14px;\n}\n.mat-list-base .mat-list-option {\n font-size: 16px;\n}\n.mat-list-base .mat-list-option .mat-line {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n box-sizing: border-box;\n}\n.mat-list-base .mat-list-option .mat-line:nth-child(n+2) {\n font-size: 14px;\n}\n.mat-list-base .mat-subheader {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 14px;\n font-weight: 500;\n}\n.mat-list-base[dense] .mat-list-item {\n font-size: 12px;\n}\n.mat-list-base[dense] .mat-list-item .mat-line {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n box-sizing: border-box;\n}\n.mat-list-base[dense] .mat-list-item .mat-line:nth-child(n+2) {\n font-size: 12px;\n}\n.mat-list-base[dense] .mat-list-option {\n font-size: 12px;\n}\n.mat-list-base[dense] .mat-list-option .mat-line {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n box-sizing: border-box;\n}\n.mat-list-base[dense] .mat-list-option .mat-line:nth-child(n+2) {\n font-size: 12px;\n}\n.mat-list-base[dense] .mat-subheader {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 12px;\n font-weight: 500;\n}\n.mat-option {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 16px;\n}\n.mat-optgroup-label {\n font: 500 14px/24px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n.mat-simple-snackbar {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 14px;\n}\n.mat-simple-snackbar-action {\n line-height: 1;\n font-family: inherit;\n font-size: inherit;\n font-weight: 500;\n}\n.mat-tree {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.mat-tree-node,\n.mat-nested-tree-node {\n font-weight: 400;\n font-size: 14px;\n}\n.mat-ripple {\n overflow: hidden;\n position: relative;\n}\n.mat-ripple:not(:empty) {\n transform: translateZ(0);\n}\n.mat-ripple.mat-ripple-unbounded {\n overflow: visible;\n}\n.mat-ripple-element {\n position: absolute;\n border-radius: 50%;\n pointer-events: none;\n transition: opacity, transform 0ms cubic-bezier(0, 0, 0.2, 1);\n transform: scale(0);\n}\n.cdk-high-contrast-active .mat-ripple-element {\n display: none;\n}\n.cdk-visually-hidden {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n outline: 0;\n -webkit-appearance: none;\n -moz-appearance: none;\n}\n.cdk-overlay-container, .cdk-global-overlay-wrapper {\n pointer-events: none;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n}\n.cdk-overlay-container {\n position: fixed;\n z-index: 1000;\n}\n.cdk-overlay-container:empty {\n display: none;\n}\n.cdk-global-overlay-wrapper {\n display: flex;\n position: absolute;\n z-index: 1000;\n}\n.cdk-overlay-pane {\n position: absolute;\n pointer-events: auto;\n box-sizing: border-box;\n z-index: 1000;\n display: flex;\n max-width: 100%;\n max-height: 100%;\n}\n.cdk-overlay-backdrop {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 1000;\n pointer-events: auto;\n -webkit-tap-highlight-color: transparent;\n transition: opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1);\n opacity: 0;\n}\n.cdk-overlay-backdrop.cdk-overlay-backdrop-showing {\n opacity: 1;\n}\n@media screen and (-ms-high-contrast: active) {\n .cdk-overlay-backdrop.cdk-overlay-backdrop-showing {\n opacity: 0.6;\n }\n}\n.cdk-overlay-dark-backdrop {\n background: rgba(0, 0, 0, 0.32);\n}\n.cdk-overlay-transparent-backdrop, .cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing {\n opacity: 0;\n}\n.cdk-overlay-connected-position-bounding-box {\n position: absolute;\n z-index: 1000;\n display: flex;\n flex-direction: column;\n min-width: 1px;\n min-height: 1px;\n}\n.cdk-global-scrollblock {\n position: fixed;\n width: 100%;\n overflow-y: scroll;\n}\n@-webkit-keyframes cdk-text-field-autofill-start {\n /*!*/\n}\n@keyframes cdk-text-field-autofill-start {\n /*!*/\n}\n@-webkit-keyframes cdk-text-field-autofill-end {\n /*!*/\n}\n@keyframes cdk-text-field-autofill-end {\n /*!*/\n}\n.cdk-text-field-autofill-monitored:-webkit-autofill {\n -webkit-animation: cdk-text-field-autofill-start 0s 1ms;\n animation: cdk-text-field-autofill-start 0s 1ms;\n}\n.cdk-text-field-autofill-monitored:not(:-webkit-autofill) {\n -webkit-animation: cdk-text-field-autofill-end 0s 1ms;\n animation: cdk-text-field-autofill-end 0s 1ms;\n}\ntextarea.cdk-textarea-autosize {\n resize: none;\n}\ntextarea.cdk-textarea-autosize-measuring {\n height: auto !important;\n overflow: hidden !important;\n padding: 2px 0 !important;\n box-sizing: content-box !important;\n}\n/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/**\n * Spacing\n */\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/*===================*\\\n|| Icon sizes ||\n\\*===================*/\n/**\n * Makes text have maximum lines with ellipsis. Works on most modern browsers except\n * of Firefox..\n */\n/**\n * Spacing\n */\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/*===================*\\\n|| Icon sizes ||\n\\*===================*/\n/* Theme for the ripple elements.*/\n/* stylelint-disable material/no-prefixes */\n/* stylelint-enable */\n.mck-inherit-font {\n font: inherit;\n}\n.mck-content-expand, .mck-content-page {\n width: 100%;\n height: 100%;\n}\n.mck-content-expand-width {\n width: 100%;\n}\n.mck-content-expand-height {\n height: 100%;\n}\n.mck-content-with-footer-height {\n height: calc(100vh - 58px);\n}\n.mck-content-full-height, .mck-content-page-container {\n height: 100vh;\n}\n.mck-content-page {\n background: #F8F9FA;\n}\n.mck-content-body {\n width: 100%;\n display: block;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-content-body {\n max-width: 1024px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-content-body {\n max-width: 1024px;\n }\n}\n.mck-content-group {\n padding-left: 1rem;\n padding-right: 1rem;\n width: 100%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-content-group {\n max-width: 759px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-content-group {\n max-width: 759px;\n }\n}\n.mck-shadow {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n}\n.mck-flex-1 {\n flex: 1;\n}\n.mck-row, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix, .mck-row-flow {\n display: flex;\n flex-direction: row;\n}\n.mck-row.mck-center-justify, .mck-center-justify.mck-row-flow, .mck-row.mck-center, .mck-row.mck-button.mat-button, .mck-row.mat-button.mck-stroked-button, .mck-row.mat-button.mck-warning-button, .mck-row.mat-button.mck-secondary-button, .mck-row.mat-button.mck-primary-button, .mck-row.mck-button.mat-stroked-button, .mck-row.mat-stroked-button.mck-stroked-button, .mck-row.mat-stroked-button.mck-warning-button, .mck-row.mat-stroked-button.mck-secondary-button, .mck-row.mat-stroked-button.mck-primary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix, .mck-center.mck-row-flow, .mck-row-flow.mck-button.mat-button, .mck-row-flow.mat-button.mck-stroked-button, .mck-row-flow.mat-button.mck-warning-button, .mck-row-flow.mat-button.mck-secondary-button, .mck-row-flow.mat-button.mck-primary-button, .mck-row-flow.mck-button.mat-stroked-button, .mck-row-flow.mat-stroked-button.mck-stroked-button, .mck-row-flow.mat-stroked-button.mck-warning-button, .mck-row-flow.mat-stroked-button.mck-secondary-button, .mck-row-flow.mat-stroked-button.mck-primary-button {\n justify-content: center;\n}\n.mck-row.mck-center-align, .mck-center-align.mck-row-flow, .mck-row.mck-center, .mck-row.mck-button.mat-button, .mck-row.mat-button.mck-stroked-button, .mck-row.mat-button.mck-warning-button, .mck-row.mat-button.mck-secondary-button, .mck-row.mat-button.mck-primary-button, .mck-row.mck-button.mat-stroked-button, .mck-row.mat-stroked-button.mck-stroked-button, .mck-row.mat-stroked-button.mck-warning-button, .mck-row.mat-stroked-button.mck-secondary-button, .mck-row.mat-stroked-button.mck-primary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix, .mck-center.mck-row-flow, .mck-row-flow.mck-button.mat-button, .mck-row-flow.mat-button.mck-stroked-button, .mck-row-flow.mat-button.mck-warning-button, .mck-row-flow.mat-button.mck-secondary-button, .mck-row-flow.mat-button.mck-primary-button, .mck-row-flow.mck-button.mat-stroked-button, .mck-row-flow.mat-stroked-button.mck-stroked-button, .mck-row-flow.mat-stroked-button.mck-warning-button, .mck-row-flow.mat-stroked-button.mck-secondary-button, .mck-row-flow.mat-stroked-button.mck-primary-button {\n align-items: center;\n}\n.mck-row.mck-stretch, .mck-form-input mat-form-field.mck-center-suffix .mck-stretch.mat-form-field-infix, .mck-stretch.mck-row-flow {\n align-items: stretch;\n}\n.mck-row-flow {\n flex-wrap: wrap;\n}\n.mck-row.mck-scroll, .mck-form-input mat-form-field.mck-center-suffix .mck-scroll.mat-form-field-infix, .mck-scroll.mck-row-flow {\n overflow-x: scroll;\n}\n.mck-column, .mck-button.mat-button.mat-button, .mat-button.mat-button.mck-stroked-button, .mat-button.mat-button.mck-warning-button, .mat-button.mat-button.mck-secondary-button, .mat-button.mat-button.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button, .mat-stroked-button.mat-stroked-button.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-primary-button {\n display: flex;\n flex-direction: column;\n}\n.mck-column.mck-center, .mck-column.mck-button.mat-button, .mck-column.mat-button.mck-stroked-button, .mck-column.mat-button.mck-warning-button, .mck-column.mat-button.mck-secondary-button, .mck-column.mat-button.mck-primary-button, .mck-column.mck-button.mat-stroked-button, .mck-column.mat-stroked-button.mck-stroked-button, .mck-column.mat-stroked-button.mck-warning-button, .mck-column.mat-stroked-button.mck-secondary-button, .mck-column.mat-stroked-button.mck-primary-button, .mck-center.mck-button.mat-button, .mck-center.mat-button.mck-stroked-button, .mck-center.mat-button.mck-warning-button, .mck-center.mat-button.mck-secondary-button, .mck-center.mat-button.mck-primary-button, .mck-button.mat-button, .mat-button.mck-stroked-button, .mat-button.mck-warning-button, .mat-button.mck-secondary-button, .mat-button.mck-primary-button, .mck-button.mat-button.mat-stroked-button, .mat-button.mat-stroked-button.mck-stroked-button, .mat-button.mat-stroked-button.mck-warning-button, .mat-button.mat-stroked-button.mck-secondary-button, .mat-button.mat-stroked-button.mck-primary-button, .mck-center.mck-button.mat-stroked-button, .mck-center.mat-stroked-button.mck-stroked-button, .mck-center.mat-stroked-button.mck-warning-button, .mck-center.mat-stroked-button.mck-secondary-button, .mck-center.mat-stroked-button.mck-primary-button, .mck-button.mat-stroked-button, .mat-stroked-button.mck-stroked-button, .mat-stroked-button.mck-warning-button, .mat-stroked-button.mck-secondary-button, .mat-stroked-button.mck-primary-button, .mck-form-input mat-form-field.mck-center-suffix .mck-column.mat-form-field-infix, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mck-button.mat-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-button.mck-stroked-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-button.mck-warning-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-button.mck-secondary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-button.mck-primary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mck-button.mat-stroked-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-stroked-button.mck-stroked-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-stroked-button.mck-warning-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-stroked-button.mck-secondary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-stroked-button.mck-primary-button {\n justify-content: center;\n align-items: center;\n}\n.mck-column.mck-space-between, .mck-space-between.mck-button.mat-button, .mck-space-between.mat-button.mck-stroked-button, .mck-space-between.mat-button.mck-warning-button, .mck-space-between.mat-button.mck-secondary-button, .mck-space-between.mat-button.mck-primary-button, .mck-space-between.mck-button.mat-stroked-button, .mck-space-between.mat-stroked-button.mck-stroked-button, .mck-space-between.mat-stroked-button.mck-warning-button, .mck-space-between.mat-stroked-button.mck-secondary-button, .mck-space-between.mat-stroked-button.mck-primary-button {\n justify-content: space-between;\n}\n.mck-column.mck-stretch, .mck-stretch.mck-button.mat-button, .mck-stretch.mat-button.mck-stroked-button, .mck-stretch.mat-button.mck-warning-button, .mck-stretch.mat-button.mck-secondary-button, .mck-stretch.mat-button.mck-primary-button, .mck-stretch.mck-button.mat-stroked-button, .mck-stretch.mat-stroked-button.mck-stroked-button, .mck-stretch.mat-stroked-button.mck-warning-button, .mck-stretch.mat-stroked-button.mck-secondary-button, .mck-stretch.mat-stroked-button.mck-primary-button {\n align-items: stretch;\n}\n.mck-column.mck-scroll, .mck-scroll.mck-button.mat-button, .mck-scroll.mat-button.mck-stroked-button, .mck-scroll.mat-button.mck-warning-button, .mck-scroll.mat-button.mck-secondary-button, .mck-scroll.mat-button.mck-primary-button, .mck-scroll.mck-button.mat-stroked-button, .mck-scroll.mat-stroked-button.mck-stroked-button, .mck-scroll.mat-stroked-button.mck-warning-button, .mck-scroll.mat-stroked-button.mck-secondary-button, .mck-scroll.mat-stroked-button.mck-primary-button {\n overflow-y: scroll;\n overflow-y: overlay;\n}\n.mck-column.mck-flex-end, .mck-flex-end.mck-button.mat-button, .mck-flex-end.mat-button.mck-stroked-button, .mck-flex-end.mat-button.mck-warning-button, .mck-flex-end.mat-button.mck-secondary-button, .mck-flex-end.mat-button.mck-primary-button, .mck-flex-end.mck-button.mat-stroked-button, .mck-flex-end.mat-stroked-button.mck-stroked-button, .mck-flex-end.mat-stroked-button.mck-warning-button, .mck-flex-end.mat-stroked-button.mck-secondary-button, .mck-flex-end.mat-stroked-button.mck-primary-button {\n justify-content: flex-end;\n}\n.mck-overflow {\n overflow: auto;\n}\n.mck-bordered, .mck-input {\n border-radius: 0;\n border: 1px solid #B3B3B3;\n}\n.mck-bordered:hover, .mck-input:hover {\n border-color: #464646;\n}\n.mck-bordered:focus, .mck-input:focus {\n border-color: #1F40E6;\n}\n.mck-bordered[disabled=true], .mck-input[disabled=true] {\n pointer-events: none;\n border-color: #f0f0f0;\n color: #ccc;\n}\n.mck-date-display {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n height: 43px;\n padding: 1rem 0.5rem;\n transition: border 200ms, box-shadow 200ms;\n}\n.mck-form-input .mat-form-field-wrapper {\n padding-bottom: 0.5rem;\n}\n.mck-form-input mat-form-field {\n min-width: auto !important;\n}\n.mck-form-input mat-form-field .mat-form-field-infix {\n width: 100%;\n padding-top: 0.7rem !important;\n padding-bottom: 0.5rem !important;\n}\n.mck-form-input mat-form-field .mat-form-field-outline {\n min-height: 2.7rem;\n color: rgba(0, 0, 0, 0.27);\n}\n.mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\n margin-top: 2px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-flex {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-flex {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-outline, .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\n height: 2rem;\n min-height: 2rem;\n }\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-outline, .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\n height: 2rem;\n min-height: 2rem;\n }\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n}\n.mck-form-input mat-form-field.mat-s {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-form-input mat-select {\n margin-top: 0.2rem;\n}\n.mck-form-input mat-select .mat-select-arrow {\n visibility: hidden;\n}\n.mck-form-input mat-select .mat-select-value > .mat-select-value-text > span {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 400;\n font-family: \"McKinsey Sans\";\n}\n.mck-form-input .mat-form-field-outline > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input .mat-form-field-outline > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input .mat-form-field-outline > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: #B3B3B3;\n border-width: 1px;\n border-radius: 0;\n}\n.mck-form-input .available .mat-form-field-outline > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input .available .mat-form-field-outline > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input .available .mat-form-field-outline > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: #3aa537;\n}\n.mck-form-input .booked .mat-form-field-outline > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input .booked .mat-form-field-outline > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input .booked .mat-form-field-outline > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: #e12e41;\n}\n.mck-form-input .mat-form-field-outline-thick > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input .mat-form-field-outline-thick > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input .mat-form-field-outline-thick > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: #1F40E6;\n border-width: 1px;\n border-radius: 0;\n}\n.mck-form-input > mat-form-field.mck-error .mat-form-field-wrapper {\n padding-bottom: 0;\n}\n.mck-form-input > mat-form-field.mck-error .mat-form-field-outline > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input > mat-form-field.mck-error .mat-form-field-outline > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input > mat-form-field.mck-error .mat-form-field-outline > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: #E12E40;\n}\n.mck-form-input mck-close-icon.mat-chip-remove.mat-chip-remove {\n opacity: 1;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n}\n.mck-form-input mat-label {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 400;\n text-align: left;\n margin-bottom: 0.5rem;\n}\n.mck-form-input mat-radio-button {\n margin-right: 1rem;\n}\n.mck-form-input .mat-radio-label-content {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-form-input .mat-radio-outer-circle {\n border-color: #1F40E6 !important;\n border-width: 1px !important;\n}\n.mck-form-input .mat-radio-inner-circle {\n background-color: #1F40E6 !important;\n}\n.mck-form-input mat-radio-group {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n}\n.mck-form-input mat-radio-group > mat-radio-button:last-child {\n margin-right: 0;\n}\n.mck-form-input-container > .mck-form-input, .mck-form-input-container > mck-select {\n margin-bottom: 0.5rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-form-input-container > .mck-form-input, .mck-form-input-container > mck-select {\n margin-bottom: 1.75rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-form-input-container > .mck-form-input, .mck-form-input-container > mck-select {\n margin-bottom: 1.75rem;\n }\n}\n.mck-form-input-container .mck-radio-select {\n margin-bottom: 1rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-form-input-container .mck-radio-select {\n margin-bottom: 1.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-form-input-container .mck-radio-select {\n margin-bottom: 1.5rem;\n }\n}\n.mck-form-input mat-chip.mat-standard-chip.mat-standard-chip {\n border-radius: 3px;\n min-height: 1.5rem;\n background-color: #333333;\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 0.75rem;\n line-height: 1.5rem;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input mat-chip.mat-standard-chip.mat-standard-chip {\n line-height: inherit;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input mat-chip.mat-standard-chip.mat-standard-chip {\n line-height: inherit;\n }\n}\n.mck-form-input mat-checkbox.mat-checkbox.mat-checkbox {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n}\n.mck-form-input mat-checkbox div.mat-checkbox-background.mat-checkbox-background {\n background-color: #1F40E6;\n}\n.mck-form-input mat-checkbox div.mat-checkbox-background.mat-checkbox-background.mck-checkbox-disabled.mat-checkbox-disabled {\n background-color: #D0D0D0;\n}\n.mck-form-input mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n color: #B3B3B3;\n}\n.mck-borderless {\n border: none;\n}\n.mck-borderless:hover, .mck-borderless:focus, .mck-borderless:disabled {\n border: none;\n}\n.mck-select-panel {\n margin-top: 0 !important;\n border-radius: unset !important;\n margin-top: 35px !important;\n margin-left: 5px;\n}\n.mck-select-panel mat-option {\n padding-left: 0;\n padding-right: 0;\n}\n.mck-select-panel mat-option.mat-option-text {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-select-panel.mck-margin-top {\n margin-top: 1.5rem !important;\n}\n.mck-checkbox-panel.mat-autocomplete-panel.mat-autocomplete-panel {\n top: -10px;\n max-height: 278px;\n}\n.mck-checkbox-panel mat-option.mck-truncated .mat-checkbox-label.mat-checkbox-label {\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n.mck-checkbox-panel mat-option {\n padding-left: 0;\n padding-right: 0;\n line-height: 24px;\n height: unset;\n min-height: 36px;\n}\n.mck-checkbox-panel mat-option .mat-checkbox-label.mat-checkbox-label {\n flex: 1;\n}\n.mck-checkbox-panel mat-option .mat-checkbox-label.mat-checkbox-label {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n text-align: left;\n}\n.mck-checkbox-panel mat-option.mck-checkbox-group-header .mat-checkbox-label.mat-checkbox-label {\n font-weight: 500;\n}\n.mck-checkbox-panel mat-option.mck-checkbox-group-child {\n margin-left: 2rem;\n}\n.mck-checkbox-panel mat-option mat-checkbox label.mat-checkbox-layout {\n width: 100%;\n padding-left: 16px;\n padding-right: 16px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-checkbox-panel mat-option mat-checkbox label.mat-checkbox-layout {\n padding-left: 2px;\n padding-right: 2px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-checkbox-panel mat-option mat-checkbox label.mat-checkbox-layout {\n padding-left: 2px;\n padding-right: 2px;\n }\n}\n.mck-checkbox-panel mat-option mat-checkbox div.mat-checkbox-frame.mat-checkbox-frame {\n border: 1px solid #B3B3B3;\n border-radius: 0;\n}\n.mck-checkbox-panel mat-option mat-checkbox.mat-checkbox-checked div.mat-checkbox-background.mat-checkbox-background {\n background-color: #1F40E6;\n}\n.mck-checkbox-panel mat-option mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled div.mat-checkbox-background.mat-checkbox-background {\n background-color: #D0D0D0;\n}\n.mck-checkbox-panel mat-option mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled .mat-checkbox-label.mat-checkbox-label {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n color: #B3B3B3;\n text-align: left;\n}\n.mck-checkbox-panel mat-option mat-checkbox .mat-checkbox-inner-container {\n width: 1.25rem;\n height: 1.25rem;\n}\n.mck-select-option-selected {\n font-weight: 500;\n font-family: \"McKinsey Sans\";\n color: black;\n background-color: #E6E6E6;\n}\n.mck-select-option-selected .mck-spacer-content {\n background-color: #1F40E6;\n margin-right: 0.75rem;\n}\n.mck-select-option-unselected {\n font-weight: 400;\n font-family: \"McKinsey Sans\";\n}\n.mck-select-option-unselected.mck-ignore-disabled {\n color: black;\n}\n.mck-select-option-unselected .mck-spacer-content {\n visibility: hidden;\n margin-right: 0.75rem;\n}\n.mck-button.mat-button.mat-button, .mat-button.mat-button.mck-stroked-button, .mat-button.mat-button.mck-warning-button, .mat-button.mat-button.mck-secondary-button, .mat-button.mat-button.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button, .mat-stroked-button.mat-stroked-button.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-primary-button {\n height: 40px;\n border-radius: 0;\n border: none;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button, .mat-button.mat-button.mck-stroked-button, .mat-button.mat-button.mck-warning-button, .mat-button.mat-button.mck-secondary-button, .mat-button.mat-button.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button, .mat-stroked-button.mat-stroked-button.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-primary-button {\n height: 48px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button, .mat-button.mat-button.mck-stroked-button, .mat-button.mat-button.mck-warning-button, .mat-button.mat-button.mck-secondary-button, .mat-button.mat-button.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button, .mat-stroked-button.mat-stroked-button.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-primary-button {\n height: 48px;\n }\n}\n.mck-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper, .mck-button.mat-stroked-button.mat-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: normal;\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper, .mck-button.mat-stroked-button.mat-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper {\n font-size: 0.875rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper, .mck-button.mat-stroked-button.mat-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper {\n font-size: 0.875rem;\n }\n}\n.mck-button.mat-button.mat-button.mck-short, .mat-button.mat-button.mck-short.mck-stroked-button, .mat-button.mat-button.mck-short.mck-warning-button, .mat-button.mat-button.mck-short.mck-secondary-button, .mat-button.mat-button.mck-short.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short, .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button {\n height: 32px;\n min-width: 83px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-short, .mat-button.mat-button.mck-short.mck-stroked-button, .mat-button.mat-button.mck-short.mck-warning-button, .mat-button.mat-button.mck-short.mck-secondary-button, .mat-button.mat-button.mck-short.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short, .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-short, .mat-button.mat-button.mck-short.mck-stroked-button, .mat-button.mat-button.mck-short.mck-warning-button, .mat-button.mat-button.mck-short.mck-secondary-button, .mat-button.mat-button.mck-short.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short, .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-short.mck-short-height, .mat-button.mat-button.mck-short.mck-short-height.mck-stroked-button, .mat-button.mat-button.mck-short.mck-short-height.mck-warning-button, .mat-button.mat-button.mck-short.mck-short-height.mck-secondary-button, .mat-button.mat-button.mck-short.mck-short-height.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short.mck-short-height, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-primary-button {\n height: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-short.mck-short-height, .mat-button.mat-button.mck-short.mck-short-height.mck-stroked-button, .mat-button.mat-button.mck-short.mck-short-height.mck-warning-button, .mat-button.mat-button.mck-short.mck-short-height.mck-secondary-button, .mat-button.mat-button.mck-short.mck-short-height.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short.mck-short-height, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-primary-button {\n height: 40px;\n }\n}\n.mck-button.mat-button.mat-button.mck-square, .mat-button.mat-button.mck-square.mck-stroked-button, .mat-button.mat-button.mck-square.mck-warning-button, .mat-button.mat-button.mck-square.mck-secondary-button, .mat-button.mat-button.mck-square.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-square, .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button {\n height: 32px;\n width: 32px;\n min-width: 32px;\n padding: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-square, .mat-button.mat-button.mck-square.mck-stroked-button, .mat-button.mat-button.mck-square.mck-warning-button, .mat-button.mat-button.mck-square.mck-secondary-button, .mat-button.mat-button.mck-square.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-square, .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button {\n width: 40px;\n height: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-square, .mat-button.mat-button.mck-square.mck-stroked-button, .mat-button.mat-button.mck-square.mck-warning-button, .mat-button.mat-button.mck-square.mck-secondary-button, .mat-button.mat-button.mck-square.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-square, .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button {\n width: 40px;\n height: 40px;\n }\n}\n.mck-primary-button.mat-button.mat-button {\n background-color: #1F40E6;\n}\n.mck-primary-button.mat-button.mat-button[disabled], .mck-primary-button.mat-button.mat-button.disabled {\n background-color: #D0D0D0;\n color: #757575;\n cursor: not-allowed;\n}\n.mck-primary-button.mat-button.mat-button[disabled] > .mat-button-wrapper.mat-button-wrapper, .mck-primary-button.mat-button.mat-button.disabled > .mat-button-wrapper.mat-button-wrapper {\n color: #757575;\n}\n.mck-primary-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper {\n color: white;\n}\n.mck-secondary-button.mat-stroked-button.mat-stroked-button {\n border: 1px solid #D0D0D0;\n border-radius: 0;\n border: 1px solid #2251FF;\n color: #2251FF;\n}\n.mck-secondary-button.mat-stroked-button.mat-stroked-button[disabled], .mck-secondary-button.mat-stroked-button.mat-stroked-button.disabled {\n border: 1px solid #D0D0D0;\n color: #333333;\n cursor: not-allowed;\n}\n.mck-secondary-button.mat-button.mat-button {\n background-color: white;\n}\n.mck-secondary-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper {\n color: #333333;\n}\n.mck-warning-button.mat-button.mat-button {\n background-color: #ffd048;\n}\n.mck-warning-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper {\n color: black;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button {\n border: 2px solid #B3B3B3;\n border-radius: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding-left: 1.75rem;\n padding-right: 1.75rem;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short {\n height: 32px;\n min-width: 83px;\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short {\n height: 48px;\n min-width: 155px;\n }\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-primary {\n border-width: 1px;\n border-color: #1F40E6;\n color: #1F40E6;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-thin-border-light {\n border-color: #D0D0D0;\n border-width: 1px;\n}\n.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: normal;\n color: #1F40E6;\n}\n.mck-toggle-button {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n border: 1px solid #B3B3B3;\n border-color: #D0D0D0;\n min-width: 59px;\n background-color: white;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-toggle-button {\n min-width: 132px;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-toggle-button {\n min-width: 132px;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n }\n}\n.mck-toggle-button-selected {\n color: #1F40E6;\n}\n.mck-date-picker {\n width: 100% !important;\n height: 100% !important;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-date-picker {\n max-width: 23rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-date-picker {\n max-width: 23rem;\n }\n}\n.mck-date-picker > .header.header {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n color: #051C2C;\n margin-top: 1.25rem;\n}\n.mck-date-picker > .header.header > .arrow.arrow {\n width: 2.375rem;\n height: 2rem;\n}\n.mck-date-picker > .header.header > .arrow.arrow > .icon.icon {\n width: 1rem;\n height: 1rem;\n}\n.mck-date-picker > .header.header > .arrow.arrow > .next.next {\n background-image: url('arrow-forward.svg');\n}\n.mck-date-picker > .header.header > .arrow.arrow > .previous.previous {\n background-image: url('arrow-backward.svg');\n}\n.mck-date-picker > .month {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n}\n.mck-date-picker > .week {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n color: #767676;\n}\n.mck-date-picker > .body {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.mck-date-picker > .body > div > div.date > .dot {\n display: none;\n}\n.mck-date-picker > .body > div > div.date.disabled {\n background-color: transparent;\n border-radius: 0;\n color: #767676;\n}\n.mck-date-picker > .body > div > div.date.active {\n border-radius: 0;\n background-color: #1F40E6;\n}\n.mck-date-picker > .body > div > div.date.non-month {\n color: #767676;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-spacer-content-collapse-tablet {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-spacer-content-collapse-tablet {\n display: none;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .mck-spacer-content-collapse-tablet {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .mck-spacer-content-collapse-tablet {\n display: none;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-spacer-content-expand-mobile {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-spacer-content-expand-mobile {\n display: none;\n }\n}\n.mck-spacer-content-divider {\n background-color: #E6E6E6;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n border-radius: 0;\n border-top: 1px solid #E6E6E6;\n border-bottom: 1px solid #E6E6E6;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded {\n background-color: #F0F0F0;\n border-bottom: none;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded .mck-collapse-icon {\n width: 24px;\n height: 24px;\n background-image: url('chevron-close.svg');\n background-size: contain;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded .mck-collapse-icon {\n width: 48px;\n height: 48px;\n background-image: url('chevron-close-large.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded .mck-collapse-icon {\n width: 48px;\n height: 48px;\n background-image: url('chevron-close-large.svg');\n background-size: contain;\n }\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body {\n padding-left: 0;\n padding-right: 0;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 0.75rem;\n line-height: 1.4;\n padding-left: 1rem;\n padding-right: 1rem;\n text-align: left;\n color: black;\n font-weight: normal;\n padding-bottom: 0.5rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\n font-size: 1rem;\n line-height: 1.6;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\n font-size: 1rem;\n line-height: 1.6;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n }\n}\n.mck-expansion-panel mat-expansion-panel-header {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.mck-expansion-panel mat-expansion-panel-header > span.mat-content {\n align-items: center;\n}\n.mck-expansion-panel mat-panel-title {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n color: black;\n font-weight: normal;\n}\n.mck-expansion-panel .mck-collapse-icon {\n width: 24px;\n height: 24px;\n background-image: url('chevron-open.svg');\n background-size: contain;\n transform: rotate(0deg);\n transition: transform 0.5s ease;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel .mck-collapse-icon {\n width: 48px;\n height: 48px;\n background-image: url('chevron-open-large.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel .mck-collapse-icon {\n width: 48px;\n height: 48px;\n background-image: url('chevron-open-large.svg');\n background-size: contain;\n }\n}\n.mck-expansion-panel .mck-collapse-icon.expanded {\n transform: rotate(180deg);\n}\n.mck-icon-fill-open {\n fill: #1F40E6;\n}\n.mck-icon-fill-close {\n fill: #767676;\n}\n.mck-icon-fill-black {\n fill: black;\n stroke: black;\n}\n.mck-icon-fill-white {\n fill: white;\n stroke: white;\n}\n.mck-icon-fill-gray {\n fill: #333333;\n stroke: #333333;\n}\n.mck-min {\n max-width: 581px !important;\n width: 80vw;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-min {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-min .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-min {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-min .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n.mck-noexpand {\n max-width: 581px !important;\n width: 80vw !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-noexpand {\n width: calc(100vw - 32px) !important;\n max-height: 100vh;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-noexpand {\n width: calc(100vw - 32px) !important;\n max-height: 100vh;\n }\n}\n.mck-modal {\n max-width: 800px !important;\n width: 80vw;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n.mck-modal-mini {\n max-width: 580px !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-mini {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-mini .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-mini {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-mini .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n.mck-modal-survey {\n max-width: 691px !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-survey .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-survey .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n.mck-modal-wide {\n max-width: 1024px !important;\n width: 100vw;\n height: 95vh;\n max-height: 100vh;\n}\n.mck-modal-wide .mat-dialog-content {\n background-color: #F8F9FA;\n padding: 0 !important;\n overflow: hidden;\n}\n.mck-modal-wide .mat-dialog-content .mat-icon-button[name=CloseButton] {\n position: relative;\n right: 32px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide .mat-dialog-content .mat-icon-button[name=CloseButton] .close-image {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide .mat-dialog-content .mat-icon-button[name=CloseButton] .close-image {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n.mck-modal-wide-manage-booking {\n max-width: 1024px !important;\n width: 100vw;\n max-height: 95vh;\n}\n.mck-modal-wide-manage-booking .mat-dialog-content {\n background-color: #F8F9FA;\n padding: 0 !important;\n overflow: hidden;\n}\n.mck-modal-wide-manage-booking .mat-dialog-content .mat-icon-button[name=CloseButton] {\n position: relative;\n right: 32px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide-manage-booking .mat-dialog-content .mat-icon-button[name=CloseButton] .close-image {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide-manage-booking .mat-dialog-content .mat-icon-button[name=CloseButton] .close-image {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide-manage-booking {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide-manage-booking .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide-manage-booking {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide-manage-booking .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-alert {\n max-width: 100vw !important;\n width: 100vw;\n margin-left: 1rem;\n margin-right: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-alert {\n max-width: 100vw !important;\n width: 100vw;\n margin-left: 1rem;\n margin-right: 1rem;\n }\n}\n.mck-alert-backdrop {\n background: rgba(5, 28, 44, 0.85);\n}\n.mck-slide-toggle.mat-slide-toggle.mat-checked:not(.mat-disabled) .mat-slide-toggle-bar.mat-slide-toggle-bar {\n background-color: #2251FF;\n}\n.mck-slide-toggle.mat-slide-toggle.mat-checked:not(.mat-disabled) .mat-slide-toggle-thumb.mat-slide-toggle-thumb {\n background-color: white;\n}\n.mck-slide-toggle.mat-slide-toggle {\n height: auto;\n}\n.mck-slide-toggle .mat-slide-toggle-content.mat-slide-toggle-content {\n flex: 1;\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n white-space: normal;\n}\n.mck-slide-toggle .mat-slide-toggle-thumb.mat-slide-toggle-thumb {\n width: 14px;\n height: 14px;\n transform: translate(50%, 50%);\n}\n.mck-slide-toggle .mat-slide-toggle-thumb-container.mat-slide-toggle-thumb-container {\n top: -4px;\n left: -4px;\n}\n.mck-slide-toggle .mat-slide-toggle-bar.mat-slide-toggle-bar {\n height: 20px;\n background-color: #D0D0D0;\n border-radius: 20px;\n}\n.mck-skeleton {\n background-color: #E6E6E6;\n}\n.mck-skeleton-checkbox {\n float: left;\n}\n.mck-skeleton-checkbox > .loader.loader {\n background-color: #E6E6E6;\n width: 20px;\n height: 20px;\n margin-bottom: 0;\n}\n.mck-skeleton-header > .loader.loader {\n background-color: #E6E6E6;\n width: 100vw;\n margin-bottom: 0;\n max-width: 215px;\n}\n.mck-skeleton-image > .loader.loader {\n background-color: #E6E6E6;\n width: 81px;\n height: 82px;\n margin-bottom: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-skeleton-image > .loader.loader {\n width: 219px;\n height: 119px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-skeleton-image > .loader.loader {\n width: 219px;\n height: 119px;\n }\n}\n.mck-skeleton-status > .loader.loader {\n background-color: #E6E6E6;\n width: 117px;\n height: 78px;\n margin-top: 10px;\n margin-bottom: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-skeleton-status > .loader.loader {\n width: 117px;\n height: 78px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-skeleton-status > .loader.loader {\n width: 117px;\n height: 78px;\n }\n}\n.mck-skeleton-line-1 > .loader.loader {\n background-color: #E6E6E6;\n height: 23px;\n max-width: 176px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-1 > .loader.loader {\n max-width: 219px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-1 > .loader.loader {\n max-width: 219px;\n }\n}\n.mck-skeleton-line-2 > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 165px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-2 > .loader.loader {\n max-width: 189px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-2 > .loader.loader {\n max-width: 189px;\n }\n}\n.mck-skeleton-line-3 > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 147px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-3 > .loader.loader {\n max-width: 189px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-3 > .loader.loader {\n max-width: 189px;\n }\n}\n.mck-skeleton-line-30p > .loader.loader, .mck-skeleton-line-30p-thin > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 30%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-30p > .loader.loader, .mck-skeleton-line-30p-thin > .loader.loader {\n max-width: 30%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-30p > .loader.loader, .mck-skeleton-line-30p-thin > .loader.loader {\n max-width: 30%;\n }\n}\n.mck-skeleton-line-30p-thin > .loader.loader, .mck-skeleton-line-30p-thin-thin > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-45p > .loader.loader, .mck-skeleton-line-45p-thin > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 45%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-45p > .loader.loader, .mck-skeleton-line-45p-thin > .loader.loader {\n max-width: 45%;\n margin-right: 45%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-45p > .loader.loader, .mck-skeleton-line-45p-thin > .loader.loader {\n max-width: 45%;\n margin-right: 45%;\n }\n}\n.mck-skeleton-line-45p-thin > .loader.loader, .mck-skeleton-line-45p-thin-thin > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-50p > .loader.loader, .mck-skeleton-line-50p-thin > .loader.loader, .mck-skeleton-line-50p-thick > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 50%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-50p > .loader.loader, .mck-skeleton-line-50p-thin > .loader.loader, .mck-skeleton-line-50p-thick > .loader.loader {\n max-width: 50%;\n margin-right: 45%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-50p > .loader.loader, .mck-skeleton-line-50p-thin > .loader.loader, .mck-skeleton-line-50p-thick > .loader.loader {\n max-width: 50%;\n margin-right: 45%;\n }\n}\n.mck-skeleton-line-50p-thin > .loader.loader, .mck-skeleton-line-50p-thin-thin > .loader.loader, .mck-skeleton-line-50p-thick-thin > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-50p-thick > .loader.loader, .mck-skeleton-line-50p-thin-thick > .loader.loader, .mck-skeleton-line-50p-thick-thick > .loader.loader {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-60p > .loader.loader, .mck-skeleton-line-60p-thin > .loader.loader, .mck-skeleton-line-60p-thick > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 60%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-60p > .loader.loader, .mck-skeleton-line-60p-thin > .loader.loader, .mck-skeleton-line-60p-thick > .loader.loader {\n max-width: 60%;\n margin-right: 35%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-60p > .loader.loader, .mck-skeleton-line-60p-thin > .loader.loader, .mck-skeleton-line-60p-thick > .loader.loader {\n max-width: 60%;\n margin-right: 35%;\n }\n}\n.mck-skeleton-line-60p-thin > .loader.loader, .mck-skeleton-line-60p-thin-thin > .loader.loader, .mck-skeleton-line-60p-thick-thin > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-60p-thick > .loader.loader, .mck-skeleton-line-60p-thin-thick > .loader.loader, .mck-skeleton-line-60p-thick-thick > .loader.loader {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-70p > .loader.loader, .mck-skeleton-line-70p-thin > .loader.loader, .mck-skeleton-line-70p-thick > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 70%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-70p > .loader.loader, .mck-skeleton-line-70p-thin > .loader.loader, .mck-skeleton-line-70p-thick > .loader.loader {\n max-width: 70%;\n margin-right: 25%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-70p > .loader.loader, .mck-skeleton-line-70p-thin > .loader.loader, .mck-skeleton-line-70p-thick > .loader.loader {\n max-width: 70%;\n margin-right: 25%;\n }\n}\n.mck-skeleton-line-70p-thin > .loader.loader, .mck-skeleton-line-70p-thin-thin > .loader.loader, .mck-skeleton-line-70p-thick-thin > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-70p-thick > .loader.loader, .mck-skeleton-line-70p-thin-thick > .loader.loader, .mck-skeleton-line-70p-thick-thick > .loader.loader {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-80p > .loader.loader, .mck-skeleton-line-80p-thin > .loader.loader, .mck-skeleton-line-80p-thick > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 80%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-80p > .loader.loader, .mck-skeleton-line-80p-thin > .loader.loader, .mck-skeleton-line-80p-thick > .loader.loader {\n max-width: 80%;\n margin-right: 15%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-80p > .loader.loader, .mck-skeleton-line-80p-thin > .loader.loader, .mck-skeleton-line-80p-thick > .loader.loader {\n max-width: 80%;\n margin-right: 15%;\n }\n}\n.mck-skeleton-line-80p-thin > .loader.loader, .mck-skeleton-line-80p-thin-thin > .loader.loader, .mck-skeleton-line-80p-thick-thin > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-80p-thick > .loader.loader, .mck-skeleton-line-80p-thin-thick > .loader.loader, .mck-skeleton-line-80p-thick-thick > .loader.loader {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-90p > .loader.loader, .mck-skeleton-line-90p-thin > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 90%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-90p > .loader.loader, .mck-skeleton-line-90p-thin > .loader.loader {\n max-width: 90%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-90p > .loader.loader, .mck-skeleton-line-90p-thin > .loader.loader {\n max-width: 90%;\n }\n}\n.mck-skeleton-line-90p-thin > .loader.loader, .mck-skeleton-line-90p-thin-thin > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-load-more > .loader.loader {\n background-color: #E6E6E6;\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n width: calc(100vw - (2 * 1rem));\n height: 40px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-load-more > .loader.loader {\n max-width: 320px;\n height: 50px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-load-more > .loader.loader {\n max-width: 320px;\n height: 50px;\n }\n}\n.mck-skeleton-load-more-100p > .loader.loader, .mck-skeleton-header > .loader.loader, .mck-skeleton-room-availability > .loader.loader {\n background-color: #E6E6E6;\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n width: calc(100vw - (2 * 1rem));\n height: 40px;\n max-width: none;\n width: 100%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-load-more-100p > .loader.loader, .mck-skeleton-header > .loader.loader, .mck-skeleton-room-availability > .loader.loader {\n max-width: none;\n width: 100%;\n height: 50px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-load-more-100p > .loader.loader, .mck-skeleton-header > .loader.loader, .mck-skeleton-room-availability > .loader.loader {\n max-width: none;\n width: 100%;\n height: 50px;\n }\n}\n.mck-skeleton-load-more-100p > .loader.loader-room-availability > .loader.loader, .mck-skeleton-header > .loader.loader-room-availability > .loader.loader, .mck-skeleton-room-availability > .loader.loader-room-availability > .loader.loader {\n height: 124px;\n margin-bottom: 4px;\n}\n.mck-heading-5 {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 1.5rem;\n line-height: 1.333;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-heading-5 {\n font-size: 1.75rem;\n line-height: 1.142;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-heading-5 {\n font-size: 1.75rem;\n line-height: 1.142;\n }\n}\nngx-mat-select-search .mat-select-search-no-entries-found {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\nngx-mat-select-search .mat-select-search-input {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\nngx-mat-select-search button.mat-button.mat-select-search-clear {\n background-color: transparent;\n border: none;\n color: black;\n}\n::-webkit-scrollbar {\n width: 16px;\n height: 18px;\n}\n::-webkit-scrollbar-thumb {\n height: 1.5rem;\n border: 4px solid rgba(0, 0, 0, 0);\n background-clip: padding-box;\n border-radius: 8px;\n background-color: #757575;\n -webkit-box-shadow: inset -1px -1px 0px rgba(0, 0, 0, 0.05), inset 1px 1px 0px rgba(0, 0, 0, 0.05);\n}\n::-webkit-scrollbar-button {\n width: 0;\n height: 0;\n display: none;\n}\n::-webkit-scrollbar-corner {\n background-color: transparent;\n}\nheader {\n z-index: 2;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mb-block {\n display: block;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mb-block {\n display: block;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mb-bottom {\n padding-bottom: 110px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mb-bottom {\n padding-bottom: 110px;\n }\n}\n.map-filters-container .mck-form-input mat-form-field .mat-form-field-infix {\n top: 5px;\n}\n.map-filters-container .mck-form-input mat-form-field .mat-form-field-outline {\n height: 48px;\n background-color: white;\n}\n.map-filters-container .mck-form-input mat-form-field .mat-form-field-infix {\n padding-top: 0.5rem !important;\n}\n.office-level-row .mat-select-placeholder {\n color: #333333;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .office-level-row .legend-container .mat-form-field-outline, .office-level-row .mat-form-field-infix {\n height: 45px !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .office-level-row .legend-container .mat-form-field-outline, .office-level-row .mat-form-field-infix {\n height: 45px !important;\n }\n}\n.office-level-row .select-divider {\n display: block;\n top: 0 !important;\n width: 44px !important;\n right: -11px !important;\n background: transparent !important;\n border-width: 0 0 0 1px;\n border-color: #c6c6c6;\n border-style: solid;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .office-level-row .select-divider {\n height: calc(100% - 1px) !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .office-level-row .select-divider {\n height: calc(100% - 1px) !important;\n }\n}\n.office-level-row .disabled .select-divider {\n background: #F0F0F0 !important;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .office-level-row .disabled .select-divider {\n height: calc(100% - 2px) !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .office-level-row .disabled .select-divider {\n height: calc(100% - 2px) !important;\n }\n}\n.office-level-row .disabled .select-chevron {\n opacity: 0.5;\n margin-left: 10px;\n}\n.office-level-row .legend-container .mat-form-field-outline, .office-level-row .mat-form-field-infix, .map-controls .legend-container .mat-form-field-outline, .map-controls .mat-form-field-infix {\n display: flex !important;\n width: 100% !important;\n justify-content: space-between !important;\n}\n.booking-form-container {\n overflow-y: auto;\n max-height: calc(100vh - 345px);\n}\n.booking-form-container .mck-form-input mat-label, .booking-form-container .mck-form-input .mat-radio-label-content {\n font-family: \"McKinsey Sans\" !important;\n color: #333333;\n}\n.booking-form-container .mck-form-input input::-moz-placeholder {\n font-family: \"McKinsey Sans\";\n color: #B3B3B3;\n}\n.booking-form-container .mck-form-input input, .booking-form-container .mck-form-input input::placeholder {\n font-family: \"McKinsey Sans\";\n color: #B3B3B3;\n}\n/*\nStart Angular Calendar\n*/\n.cal-week-view {\n /* stylelint-disable-next-line selector-type-no-unknown */\n}\n.cal-week-view * {\n box-sizing: border-box;\n}\n.cal-week-view .cal-day-headers {\n -js-display: flex;\n display: flex;\n padding-left: 70px;\n border: 1px solid;\n}\n.cal-week-view .cal-day-headers .cal-header {\n flex: 1;\n text-align: left;\n padding: 12px;\n margin-top: 20px;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 16px;\n font-weight: 400;\n}\n.cal-week-view .cal-day-headers .cal-header p {\n font-size: 16px;\n font-weight: 300;\n margin: 0;\n}\n.cal-week-view .cal-day-headers .cal-header.show-weekend {\n font-size: 12px;\n}\n.cal-week-view .cal-day-headers .cal-header.show-weekend p {\n font-size: 12px;\n}\n.cal-week-view .cal-day-headers .cal-header:not(:last-child) {\n border-right: 1px solid;\n}\n.cal-week-view .cal-day-headers .cal-header:first-child {\n border-left: 1px solid;\n}\n.cal-week-view .cal-day-headers span {\n font-weight: 400;\n opacity: 0.5;\n}\n.cal-week-view .cal-day-column {\n flex-grow: 1;\n border-left: solid 1px;\n padding-top: 5px;\n}\n.cal-week-view .cal-event {\n font-size: 12px;\n border: 1px solid;\n outline: none;\n}\n.cal-week-view .cal-event .berry {\n position: absolute;\n left: calc(50% - 7px);\n display: none;\n height: 14px;\n width: 14px;\n background-color: #00A9F4;\n border-radius: 50%;\n}\n.cal-week-view .cal-event .berry.top {\n top: -7px;\n}\n.cal-week-view .cal-event .berry.bot {\n bottom: -7px;\n}\n.cal-week-view .cal-event .bumper {\n position: absolute;\n left: 3px;\n display: block;\n width: calc(100% - 6px);\n border-radius: 3px;\n z-index: -1;\n opacity: 0.6;\n}\n.cal-week-view .cal-event.expanded:focus {\n border-style: dashed;\n border-width: 2px;\n outline: none;\n}\n.cal-week-view .cal-event.expanded:focus .berry {\n display: block;\n}\n.cal-week-view .cal-time-label-column {\n width: 70px;\n height: 100%;\n}\n.cal-week-view .cal-current-time-marker {\n position: absolute;\n width: 100%;\n height: 2px;\n z-index: 2;\n}\n.cal-week-view .cal-all-day-events {\n border: solid 1px;\n border-top: 0;\n border-bottom-width: 3px;\n padding-top: 3px;\n position: relative;\n}\n.cal-week-view .cal-all-day-events .cal-day-columns {\n height: 100%;\n width: 100%;\n -js-display: flex;\n display: flex;\n position: absolute;\n top: 0;\n z-index: 0;\n}\n.cal-week-view .cal-all-day-events .cal-events-row {\n position: relative;\n height: 31px;\n margin-left: 70px;\n}\n.cal-week-view .cal-all-day-events .cal-event-container {\n display: inline-block;\n position: absolute;\n}\n.cal-week-view .cal-all-day-events .cal-event-container.resize-active {\n z-index: 1;\n pointer-events: none;\n}\n.cal-week-view .cal-all-day-events .cal-event {\n padding: 0 5px;\n margin-left: 2px;\n margin-right: 2px;\n height: 28px;\n line-height: 28px;\n}\n.cal-week-view .cal-all-day-events .cal-time-label-column {\n -js-display: flex;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n}\n.cal-week-view .cal-all-day-events .cal-resize-handle {\n width: 6px;\n height: 100%;\n cursor: col-resize;\n position: absolute;\n top: 0;\n}\n.cal-week-view .cal-all-day-events .cal-resize-handle.cal-resize-handle-after-end {\n right: 0;\n}\n.cal-week-view .cal-event,\n.cal-week-view .cal-header {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.cal-week-view .cal-drag-active {\n pointer-events: none;\n z-index: 1;\n}\n.cal-week-view .cal-drag-active * {\n pointer-events: none;\n}\n.cal-week-view .cal-time-events {\n position: relative;\n border: solid 1px;\n border-top: 0;\n -js-display: flex;\n display: flex;\n}\n.cal-week-view .cal-time-events .cal-day-columns {\n -js-display: flex;\n display: flex;\n flex-grow: 1;\n /*\n First and last item's hour visibility adjustment in the list \n */\n}\n.cal-week-view .cal-time-events .cal-day-columns .cal-hour:nth-of-type(2) .cal-time, .cal-week-view .cal-time-events .cal-day-columns .cal-hour:nth-of-type(8) .cal-time {\n top: -9px;\n}\n.cal-week-view .cal-time-events .cal-day-column {\n position: relative;\n}\n.cal-week-view .cal-time-events .cal-events-container {\n position: relative;\n}\n.cal-week-view .cal-time-events .cal-event-container {\n position: absolute;\n z-index: 1;\n}\n.cal-week-view .cal-time-events .cal-event {\n overflow: visible;\n width: 103%;\n height: calc(100% - 2px);\n margin: 1px;\n padding: 0 5px;\n line-height: 25px;\n left: -3%;\n position: relative;\n}\n.expanded .cal-week-view .cal-time-events .cal-event {\n width: 100%;\n left: 0%;\n}\n.cal-week-view .cal-time-events .cal-resize-handle {\n width: 100%;\n height: 8px;\n cursor: row-resize;\n position: absolute;\n z-index: 10;\n}\n.cal-week-view .cal-time-events .cal-resize-handle.cal-resize-handle-after-end {\n bottom: -4px;\n}\n.cal-week-view .cal-time-events .cal-resize-handle.cal-resize-handle-before-start {\n top: -4px;\n}\n.cal-week-view .cal-hour-segment {\n position: relative;\n}\n.cal-week-view .cal-hour-segment::after {\n content: \" \";\n}\n.cal-week-view .cal-draggable {\n cursor: move;\n}\n.cal-week-view mwl-calendar-week-view-hour-segment,\n.cal-week-view .cal-hour-segment {\n display: block;\n}\n.cal-week-view .cal-hour .cal-time {\n z-index: 2;\n position: relative;\n top: -14px;\n background-color: #f4f4f4;\n height: 5rem;\n width: 4rem;\n border-right: 1px solid #A19F9F;\n border-width: thin;\n}\n.cal-week-view .cal-hour .cal-hour-start {\n border: none !important;\n}\n.expanded .cal-week-view .cal-hour .cal-time {\n background-color: #f8f9fa;\n width: 4.44rem;\n}\n.cal-week-view .cal-hour:not(:last-child) .cal-hour-segment,\n.cal-week-view .cal-hour:last-child :not(:last-child) .cal-hour-segment {\n border-bottom: thin solid;\n border-color: #DBDBDB;\n}\n.cal-week-view .cal-time {\n font-weight: bold;\n padding-top: 5px;\n width: 70px;\n text-align: center;\n}\n.cal-week-view .cal-hour-segment.cal-after-hour-start .cal-time {\n display: none;\n}\n.cal-week-view {\n background-color: #fff;\n border-top: solid 1px #e1e1e1;\n}\n.cal-week-view .cal-day-headers {\n border-color: #e1e1e1;\n border-top: 0;\n border-left-width: 0;\n border-right-width: 0;\n}\n.cal-week-view .cal-day-headers .cal-header:not(:last-child) {\n border-right-color: #e1e1e1;\n}\n.cal-week-view .cal-day-headers .cal-header:first-child {\n border-left-color: #e1e1e1;\n}\n.cal-week-view .cal-day-column {\n border-left-color: #e1e1e1;\n}\n.cal-week-view .cal-event {\n background-color: #d1e8ff;\n border-color: #1e90ff;\n color: #1e90ff;\n}\n.cal-week-view .cal-all-day-events {\n border-color: #e1e1e1;\n}\n.cal-week-view .cal-header.cal-event-date {\n color: #2251FF;\n}\n.cal-week-view .cal-header.cal-weekend span {\n color: #8b0000;\n}\n.cal-week-view .cal-time-events {\n border-color: #e1e1e1;\n}\n.expanded .cal-week-view .cal-time-events .cal-day-columns:not(.cal-resize-active) .cal-hour-segment:hover {\n background-color: #C0DBF5;\n}\n.cal-week-view .cal-hour-odd {\n background-color: #fafafa;\n}\n.cal-week-view .cal-drag-over .cal-hour-segment {\n background-color: #ededed;\n}\n.cal-week-view .cal-hour:not(:last-child) .cal-hour-segment,\n.cal-week-view .cal-hour:last-child :not(:last-child) .cal-hour-segment {\n border-bottom-color: #e1e1e1;\n}\n.cal-week-view .cal-current-time-marker {\n display: none;\n}\n.cal-day-view mwl-calendar-week-view-header {\n display: none;\n}\n.cal-day-view .cal-events-container {\n margin-left: 70px;\n}\n.cal-day-view .cal-day-column {\n border-left: 0;\n}\n.cal-day-view .cal-current-time-marker {\n margin-left: 70px;\n width: calc(100% - 70px);\n}\n.cal-tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.5;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n font-size: 14px;\n word-wrap: break-word;\n opacity: 0.9;\n margin-bottom: 4px;\n}\n.cal-tooltip.cal-tooltip-top {\n padding: 5px 0;\n margin-top: -3px;\n}\n.cal-tooltip.cal-tooltip-top .cal-tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n}\n.cal-tooltip.cal-tooltip-right {\n padding: 0 5px;\n margin-left: 3px;\n}\n.cal-tooltip.cal-tooltip-right .cal-tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n}\n.cal-tooltip.cal-tooltip-bottom {\n padding: 5px 0;\n margin-top: 3px;\n}\n.cal-tooltip.cal-tooltip-bottom .cal-tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n}\n.cal-tooltip.cal-tooltip-left {\n padding: 0 5px;\n margin-left: -3px;\n}\n.cal-tooltip.cal-tooltip-left .cal-tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n}\n.cal-tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n text-align: center;\n border-radius: 0.25rem;\n}\n.cal-tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.cal-tooltip.cal-tooltip-top .cal-tooltip-arrow {\n border-top-color: #fff;\n}\n.cal-tooltip.cal-tooltip-right .cal-tooltip-arrow {\n border-right-color: #fff;\n}\n.cal-tooltip.cal-tooltip-bottom .cal-tooltip-arrow {\n border-bottom-color: #fff;\n}\n.cal-tooltip.cal-tooltip-left .cal-tooltip-arrow {\n border-left-color: #fff;\n}\n.cal-tooltip-inner {\n padding: 10px;\n color: #000;\n background-color: #fff;\n box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.2);\n}\n.cal-event-container .cal-event {\n border-radius: 0 !important;\n}\n.cal-event-container .cal-event .cal-event-title {\n font-size: 14px;\n font-weight: 400;\n padding: 10px 14px;\n color: black;\n display: block;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .cal-event-container .cal-event .cal-event-title {\n font-size: 12px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .cal-event-container .cal-event .cal-event-title {\n font-size: 12px;\n }\n}\n.cal-event-container.selected {\n width: 100% !important;\n left: 0% !important;\n z-index: 2 !important;\n}\n.cal-event-container.selected .cal-event {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.cal-event-container.selected .cal-event .cal-event-title {\n white-space: pre-wrap;\n text-align: center;\n}\n.cal-event-container.selected.mobile {\n left: 0% !important;\n width: 100% !important;\n}\n.cal-event-container.selected.minimal .cal-event-title {\n top: 0;\n transform: none;\n}\n.cal-event-container.mobile {\n left: 0% !important;\n width: 100% !important;\n}\n.cal-event-container.booked {\n width: 100% !important;\n left: 0% !important;\n}\n.cal-event-container.booked .cal-event .cal-event-title {\n width: 100%;\n}\n.cal-event-container.booked.mobile {\n left: 0% !important;\n width: 100% !important;\n}\n.cal-event-container.booked.minimal .cal-event-title {\n padding: 1px 14px;\n}\n.cal-event-container.show-weekend .cal-event .cal-event-title {\n font-size: 13px;\n}\n.cal-week-view {\n position: relative;\n}\n.cal-week-view .cal-time {\n font-weight: 400;\n}\n.cal-week-view .cal-hour {\n background-color: #ffffff;\n}\n.cal-week-view .cal-hour-odd {\n background-color: #ffffff;\n}\n.cal-week-view .cal-time-events {\n background-color: #ffffff;\n}\n.cal-week-view .cal-day-headers {\n position: fixed;\n width: 100%;\n max-width: 1008px;\n background: #F8F9FA;\n z-index: 3;\n height: 82px;\n}\n@media only screen and (orientation: portrait) and (min-width: 801px) and (max-width: 1024px) {\n .cal-week-view .cal-day-headers {\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1049px) and (max-width: 1280px) {\n .cal-week-view .cal-day-headers {\n width: 100%;\n }\n}\n.expanded .cal-week-view .cal-time-events {\n padding-top: 87px;\n position: relative;\n top: 1px;\n z-index: 1;\n border: 1px solid #f0f0f0;\n}\n.expanded .cal-event-container.mobile {\n left: 20% !important;\n width: 80% !important;\n}\n/*\nEnd Start Angular Calendar\n*/\n.mat-ripple-element {\n background-color: rgba(0, 0, 0, 0.1);\n}\n.mat-option {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-option:hover:not(.mat-option-disabled), .mat-option:focus:not(.mat-option-disabled) {\n background: rgba(0, 0, 0, 0.04);\n}\n.mat-option.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled) {\n background: rgba(0, 0, 0, 0.04);\n}\n.mat-option.mat-active {\n background: rgba(0, 0, 0, 0.04);\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-option.mat-option-disabled {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-primary .mat-option.mat-selected:not(.mat-option-disabled) {\n color: #3f51b5;\n}\n.mat-accent .mat-option.mat-selected:not(.mat-option-disabled) {\n color: #448aff;\n}\n.mat-warn .mat-option.mat-selected:not(.mat-option-disabled) {\n color: #f44336;\n}\n.mat-optgroup-label {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-optgroup-disabled .mat-optgroup-label {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-pseudo-checkbox {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-pseudo-checkbox::after {\n color: #fafafa;\n}\n.mat-pseudo-checkbox-disabled {\n color: #b0b0b0;\n}\n.mat-primary .mat-pseudo-checkbox-checked,\n.mat-primary .mat-pseudo-checkbox-indeterminate {\n background: #3f51b5;\n}\n.mat-pseudo-checkbox-checked,\n.mat-pseudo-checkbox-indeterminate,\n.mat-accent .mat-pseudo-checkbox-checked,\n.mat-accent .mat-pseudo-checkbox-indeterminate {\n background: #448aff;\n}\n.mat-warn .mat-pseudo-checkbox-checked,\n.mat-warn .mat-pseudo-checkbox-indeterminate {\n background: #f44336;\n}\n.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,\n.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled {\n background: #b0b0b0;\n}\n.mat-elevation-z0 {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z1 {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z2 {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z3 {\n box-shadow: 0px 3px 3px -2px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 0, 0, 0.14), 0px 1px 8px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z4 {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z5 {\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 5px 8px 0px rgba(0, 0, 0, 0.14), 0px 1px 14px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z6 {\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z7 {\n box-shadow: 0px 4px 5px -2px rgba(0, 0, 0, 0.2), 0px 7px 10px 1px rgba(0, 0, 0, 0.14), 0px 2px 16px 1px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z8 {\n box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z9 {\n box-shadow: 0px 5px 6px -3px rgba(0, 0, 0, 0.2), 0px 9px 12px 1px rgba(0, 0, 0, 0.14), 0px 3px 16px 2px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z10 {\n box-shadow: 0px 6px 6px -3px rgba(0, 0, 0, 0.2), 0px 10px 14px 1px rgba(0, 0, 0, 0.14), 0px 4px 18px 3px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z11 {\n box-shadow: 0px 6px 7px -4px rgba(0, 0, 0, 0.2), 0px 11px 15px 1px rgba(0, 0, 0, 0.14), 0px 4px 20px 3px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z12 {\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z13 {\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 13px 19px 2px rgba(0, 0, 0, 0.14), 0px 5px 24px 4px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z14 {\n box-shadow: 0px 7px 9px -4px rgba(0, 0, 0, 0.2), 0px 14px 21px 2px rgba(0, 0, 0, 0.14), 0px 5px 26px 4px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z15 {\n box-shadow: 0px 8px 9px -5px rgba(0, 0, 0, 0.2), 0px 15px 22px 2px rgba(0, 0, 0, 0.14), 0px 6px 28px 5px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z16 {\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z17 {\n box-shadow: 0px 8px 11px -5px rgba(0, 0, 0, 0.2), 0px 17px 26px 2px rgba(0, 0, 0, 0.14), 0px 6px 32px 5px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z18 {\n box-shadow: 0px 9px 11px -5px rgba(0, 0, 0, 0.2), 0px 18px 28px 2px rgba(0, 0, 0, 0.14), 0px 7px 34px 6px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z19 {\n box-shadow: 0px 9px 12px -6px rgba(0, 0, 0, 0.2), 0px 19px 29px 2px rgba(0, 0, 0, 0.14), 0px 7px 36px 6px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z20 {\n box-shadow: 0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 20px 31px 3px rgba(0, 0, 0, 0.14), 0px 8px 38px 7px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z21 {\n box-shadow: 0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 21px 33px 3px rgba(0, 0, 0, 0.14), 0px 8px 40px 7px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z22 {\n box-shadow: 0px 10px 14px -6px rgba(0, 0, 0, 0.2), 0px 22px 35px 3px rgba(0, 0, 0, 0.14), 0px 8px 42px 7px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z23 {\n box-shadow: 0px 11px 14px -7px rgba(0, 0, 0, 0.2), 0px 23px 36px 3px rgba(0, 0, 0, 0.14), 0px 9px 44px 8px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z24 {\n box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12);\n}\n.mat-app-background {\n background-color: #fafafa;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-theme-loaded-marker {\n display: none;\n}\n.mat-autocomplete-panel {\n background: white;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-autocomplete-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover) {\n background: white;\n}\n.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover):not(.mat-option-disabled) {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-badge-content {\n color: white;\n background: #3f51b5;\n}\n.cdk-high-contrast-active .mat-badge-content {\n outline: solid 1px;\n border-radius: 0;\n}\n.mat-badge-accent .mat-badge-content {\n background: #448aff;\n color: white;\n}\n.mat-badge-warn .mat-badge-content {\n color: white;\n background: #f44336;\n}\n.mat-badge {\n position: relative;\n}\n.mat-badge-hidden .mat-badge-content {\n display: none;\n}\n.mat-badge-disabled .mat-badge-content {\n background: #b9b9b9;\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-badge-content {\n position: absolute;\n text-align: center;\n display: inline-block;\n border-radius: 50%;\n transition: transform 200ms ease-in-out;\n transform: scale(0.6);\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n pointer-events: none;\n}\n.ng-animate-disabled .mat-badge-content,\n.mat-badge-content._mat-animation-noopable {\n transition: none;\n}\n.mat-badge-content.mat-badge-active {\n transform: none;\n}\n.mat-badge-small .mat-badge-content {\n width: 16px;\n height: 16px;\n line-height: 16px;\n}\n.mat-badge-small.mat-badge-above .mat-badge-content {\n top: -8px;\n}\n.mat-badge-small.mat-badge-below .mat-badge-content {\n bottom: -8px;\n}\n.mat-badge-small.mat-badge-before .mat-badge-content {\n left: -16px;\n}\n[dir=rtl] .mat-badge-small.mat-badge-before .mat-badge-content {\n left: auto;\n right: -16px;\n}\n.mat-badge-small.mat-badge-after .mat-badge-content {\n right: -16px;\n}\n[dir=rtl] .mat-badge-small.mat-badge-after .mat-badge-content {\n right: auto;\n left: -16px;\n}\n.mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: -8px;\n}\n[dir=rtl] .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: auto;\n right: -8px;\n}\n.mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: -8px;\n}\n[dir=rtl] .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: auto;\n left: -8px;\n}\n.mat-badge-medium .mat-badge-content {\n width: 22px;\n height: 22px;\n line-height: 22px;\n}\n.mat-badge-medium.mat-badge-above .mat-badge-content {\n top: -11px;\n}\n.mat-badge-medium.mat-badge-below .mat-badge-content {\n bottom: -11px;\n}\n.mat-badge-medium.mat-badge-before .mat-badge-content {\n left: -22px;\n}\n[dir=rtl] .mat-badge-medium.mat-badge-before .mat-badge-content {\n left: auto;\n right: -22px;\n}\n.mat-badge-medium.mat-badge-after .mat-badge-content {\n right: -22px;\n}\n[dir=rtl] .mat-badge-medium.mat-badge-after .mat-badge-content {\n right: auto;\n left: -22px;\n}\n.mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: -11px;\n}\n[dir=rtl] .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: auto;\n right: -11px;\n}\n.mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: -11px;\n}\n[dir=rtl] .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: auto;\n left: -11px;\n}\n.mat-badge-large .mat-badge-content {\n width: 28px;\n height: 28px;\n line-height: 28px;\n}\n.mat-badge-large.mat-badge-above .mat-badge-content {\n top: -14px;\n}\n.mat-badge-large.mat-badge-below .mat-badge-content {\n bottom: -14px;\n}\n.mat-badge-large.mat-badge-before .mat-badge-content {\n left: -28px;\n}\n[dir=rtl] .mat-badge-large.mat-badge-before .mat-badge-content {\n left: auto;\n right: -28px;\n}\n.mat-badge-large.mat-badge-after .mat-badge-content {\n right: -28px;\n}\n[dir=rtl] .mat-badge-large.mat-badge-after .mat-badge-content {\n right: auto;\n left: -28px;\n}\n.mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: -14px;\n}\n[dir=rtl] .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: auto;\n right: -14px;\n}\n.mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: -14px;\n}\n[dir=rtl] .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: auto;\n left: -14px;\n}\n.mat-bottom-sheet-container {\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\n background: white;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-button, .mat-icon-button, .mat-stroked-button {\n color: inherit;\n background: transparent;\n}\n.mat-button.mat-primary, .mat-icon-button.mat-primary, .mat-stroked-button.mat-primary {\n color: #3f51b5;\n}\n.mat-button.mat-accent, .mat-icon-button.mat-accent, .mat-stroked-button.mat-accent {\n color: #448aff;\n}\n.mat-button.mat-warn, .mat-icon-button.mat-warn, .mat-stroked-button.mat-warn {\n color: #f44336;\n}\n.mat-button.mat-primary[disabled], .mat-button.mat-accent[disabled], .mat-button.mat-warn[disabled], .mat-button[disabled][disabled], .mat-icon-button.mat-primary[disabled], .mat-icon-button.mat-accent[disabled], .mat-icon-button.mat-warn[disabled], .mat-icon-button[disabled][disabled], .mat-stroked-button.mat-primary[disabled], .mat-stroked-button.mat-accent[disabled], .mat-stroked-button.mat-warn[disabled], .mat-stroked-button[disabled][disabled] {\n color: rgba(0, 0, 0, 0.26);\n}\n.mat-button.mat-primary .mat-button-focus-overlay, .mat-icon-button.mat-primary .mat-button-focus-overlay, .mat-stroked-button.mat-primary .mat-button-focus-overlay {\n background-color: #3f51b5;\n}\n.mat-button.mat-accent .mat-button-focus-overlay, .mat-icon-button.mat-accent .mat-button-focus-overlay, .mat-stroked-button.mat-accent .mat-button-focus-overlay {\n background-color: #448aff;\n}\n.mat-button.mat-warn .mat-button-focus-overlay, .mat-icon-button.mat-warn .mat-button-focus-overlay, .mat-stroked-button.mat-warn .mat-button-focus-overlay {\n background-color: #f44336;\n}\n.mat-button[disabled] .mat-button-focus-overlay, .mat-icon-button[disabled] .mat-button-focus-overlay, .mat-stroked-button[disabled] .mat-button-focus-overlay {\n background-color: transparent;\n}\n.mat-button .mat-ripple-element, .mat-icon-button .mat-ripple-element, .mat-stroked-button .mat-ripple-element {\n opacity: 0.1;\n background-color: currentColor;\n}\n.mat-button-focus-overlay {\n background: black;\n}\n.mat-stroked-button:not([disabled]) {\n border-color: rgba(0, 0, 0, 0.12);\n}\n.mat-flat-button, .mat-raised-button, .mat-fab, .mat-mini-fab {\n color: rgba(0, 0, 0, 0.87);\n background-color: white;\n}\n.mat-flat-button.mat-primary, .mat-raised-button.mat-primary, .mat-fab.mat-primary, .mat-mini-fab.mat-primary {\n color: white;\n}\n.mat-flat-button.mat-accent, .mat-raised-button.mat-accent, .mat-fab.mat-accent, .mat-mini-fab.mat-accent {\n color: white;\n}\n.mat-flat-button.mat-warn, .mat-raised-button.mat-warn, .mat-fab.mat-warn, .mat-mini-fab.mat-warn {\n color: white;\n}\n.mat-flat-button.mat-primary[disabled], .mat-flat-button.mat-accent[disabled], .mat-flat-button.mat-warn[disabled], .mat-flat-button[disabled][disabled], .mat-raised-button.mat-primary[disabled], .mat-raised-button.mat-accent[disabled], .mat-raised-button.mat-warn[disabled], .mat-raised-button[disabled][disabled], .mat-fab.mat-primary[disabled], .mat-fab.mat-accent[disabled], .mat-fab.mat-warn[disabled], .mat-fab[disabled][disabled], .mat-mini-fab.mat-primary[disabled], .mat-mini-fab.mat-accent[disabled], .mat-mini-fab.mat-warn[disabled], .mat-mini-fab[disabled][disabled] {\n color: rgba(0, 0, 0, 0.26);\n}\n.mat-flat-button.mat-primary, .mat-raised-button.mat-primary, .mat-fab.mat-primary, .mat-mini-fab.mat-primary {\n background-color: #3f51b5;\n}\n.mat-flat-button.mat-accent, .mat-raised-button.mat-accent, .mat-fab.mat-accent, .mat-mini-fab.mat-accent {\n background-color: #448aff;\n}\n.mat-flat-button.mat-warn, .mat-raised-button.mat-warn, .mat-fab.mat-warn, .mat-mini-fab.mat-warn {\n background-color: #f44336;\n}\n.mat-flat-button.mat-primary[disabled], .mat-flat-button.mat-accent[disabled], .mat-flat-button.mat-warn[disabled], .mat-flat-button[disabled][disabled], .mat-raised-button.mat-primary[disabled], .mat-raised-button.mat-accent[disabled], .mat-raised-button.mat-warn[disabled], .mat-raised-button[disabled][disabled], .mat-fab.mat-primary[disabled], .mat-fab.mat-accent[disabled], .mat-fab.mat-warn[disabled], .mat-fab[disabled][disabled], .mat-mini-fab.mat-primary[disabled], .mat-mini-fab.mat-accent[disabled], .mat-mini-fab.mat-warn[disabled], .mat-mini-fab[disabled][disabled] {\n background-color: rgba(0, 0, 0, 0.12);\n}\n.mat-flat-button.mat-primary .mat-ripple-element, .mat-raised-button.mat-primary .mat-ripple-element, .mat-fab.mat-primary .mat-ripple-element, .mat-mini-fab.mat-primary .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.mat-flat-button.mat-accent .mat-ripple-element, .mat-raised-button.mat-accent .mat-ripple-element, .mat-fab.mat-accent .mat-ripple-element, .mat-mini-fab.mat-accent .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.mat-flat-button.mat-warn .mat-ripple-element, .mat-raised-button.mat-warn .mat-ripple-element, .mat-fab.mat-warn .mat-ripple-element, .mat-mini-fab.mat-warn .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.mat-stroked-button:not([class*=mat-elevation-z]), .mat-flat-button:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-raised-button:not([class*=mat-elevation-z]) {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-raised-button:not([disabled]):active:not([class*=mat-elevation-z]) {\n box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);\n}\n.mat-raised-button[disabled]:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-fab:not([class*=mat-elevation-z]), .mat-mini-fab:not([class*=mat-elevation-z]) {\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-fab:not([disabled]):active:not([class*=mat-elevation-z]), .mat-mini-fab:not([disabled]):active:not([class*=mat-elevation-z]) {\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);\n}\n.mat-fab[disabled]:not([class*=mat-elevation-z]), .mat-mini-fab[disabled]:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-button-toggle-standalone,\n.mat-button-toggle-group {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\n.mat-button-toggle-group-appearance-standard {\n box-shadow: none;\n}\n.mat-button-toggle {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-button-toggle .mat-button-toggle-focus-overlay {\n background-color: rgba(0, 0, 0, 0.12);\n}\n.mat-button-toggle-appearance-standard {\n color: rgba(0, 0, 0, 0.87);\n background: white;\n}\n.mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay {\n background-color: black;\n}\n.mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\n border-left: solid 1px rgba(0, 0, 0, 0.12);\n}\n[dir=rtl] .mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\n border-left: none;\n border-right: solid 1px rgba(0, 0, 0, 0.12);\n}\n.mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle + .mat-button-toggle {\n border-left: none;\n border-right: none;\n border-top: solid 1px rgba(0, 0, 0, 0.12);\n}\n.mat-button-toggle-checked {\n background-color: #e0e0e0;\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-button-toggle-checked.mat-button-toggle-appearance-standard {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-button-toggle-disabled {\n color: rgba(0, 0, 0, 0.26);\n background-color: #eeeeee;\n}\n.mat-button-toggle-disabled.mat-button-toggle-appearance-standard {\n background: white;\n}\n.mat-button-toggle-disabled.mat-button-toggle-checked {\n background-color: #bdbdbd;\n}\n.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\n.mat-button-toggle-group-appearance-standard {\n border: solid 1px rgba(0, 0, 0, 0.12);\n}\n.mat-card {\n background: white;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-card:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-card.mat-card-flat:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-card-subtitle {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-checkbox-frame {\n border-color: rgba(0, 0, 0, 0.54);\n}\n.mat-checkbox-checkmark {\n fill: #fafafa;\n}\n.mat-checkbox-checkmark-path {\n stroke: #fafafa !important;\n}\n.mat-checkbox-mixedmark {\n background-color: #fafafa;\n}\n.mat-checkbox-indeterminate.mat-primary .mat-checkbox-background, .mat-checkbox-checked.mat-primary .mat-checkbox-background {\n background-color: #3f51b5;\n}\n.mat-checkbox-indeterminate.mat-accent .mat-checkbox-background, .mat-checkbox-checked.mat-accent .mat-checkbox-background {\n background-color: #448aff;\n}\n.mat-checkbox-indeterminate.mat-warn .mat-checkbox-background, .mat-checkbox-checked.mat-warn .mat-checkbox-background {\n background-color: #f44336;\n}\n.mat-checkbox-disabled.mat-checkbox-checked .mat-checkbox-background, .mat-checkbox-disabled.mat-checkbox-indeterminate .mat-checkbox-background {\n background-color: #b0b0b0;\n}\n.mat-checkbox-disabled:not(.mat-checkbox-checked) .mat-checkbox-frame {\n border-color: #b0b0b0;\n}\n.mat-checkbox-disabled .mat-checkbox-label {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-checkbox .mat-ripple-element {\n background-color: black;\n}\n.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element,\n.mat-checkbox:active:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element {\n background: #3f51b5;\n}\n.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element,\n.mat-checkbox:active:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element {\n background: #448aff;\n}\n.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element,\n.mat-checkbox:active:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element {\n background: #f44336;\n}\n.mat-chip.mat-standard-chip {\n background-color: #e0e0e0;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-chip.mat-standard-chip .mat-chip-remove {\n color: rgba(0, 0, 0, 0.87);\n opacity: 0.4;\n}\n.mat-chip.mat-standard-chip:not(.mat-chip-disabled):active {\n box-shadow: 0px 3px 3px -2px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 0, 0, 0.14), 0px 1px 8px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-chip.mat-standard-chip:not(.mat-chip-disabled) .mat-chip-remove:hover {\n opacity: 0.54;\n}\n.mat-chip.mat-standard-chip.mat-chip-disabled {\n opacity: 0.4;\n}\n.mat-chip.mat-standard-chip::after {\n background: black;\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary {\n background-color: #3f51b5;\n color: white;\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-chip-remove {\n color: white;\n opacity: 0.4;\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn {\n background-color: #f44336;\n color: white;\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-chip-remove {\n color: white;\n opacity: 0.4;\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent {\n background-color: #448aff;\n color: white;\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-chip-remove {\n color: white;\n opacity: 0.4;\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.mat-table {\n background: white;\n}\n.mat-table thead, .mat-table tbody, .mat-table tfoot,\nmat-header-row, mat-row, mat-footer-row,\n[mat-header-row], [mat-row], [mat-footer-row],\n.mat-table-sticky {\n background: inherit;\n}\nmat-row, mat-header-row, mat-footer-row,\nth.mat-header-cell, td.mat-cell, td.mat-footer-cell {\n border-bottom-color: rgba(0, 0, 0, 0.12);\n}\n.mat-header-cell {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-cell, .mat-footer-cell {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-calendar-arrow {\n border-top-color: rgba(0, 0, 0, 0.54);\n}\n.mat-datepicker-toggle,\n.mat-datepicker-content .mat-calendar-next-button,\n.mat-datepicker-content .mat-calendar-previous-button {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-calendar-table-header {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-calendar-table-header-divider::after {\n background: rgba(0, 0, 0, 0.12);\n}\n.mat-calendar-body-label {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-calendar-body-cell-content {\n color: rgba(0, 0, 0, 0.87);\n border-color: transparent;\n}\n.mat-calendar-body-disabled > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected),\n.cdk-keyboard-focused .mat-calendar-body-active > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected),\n.cdk-program-focused .mat-calendar-body-active > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\n background-color: rgba(0, 0, 0, 0.04);\n}\n.mat-calendar-body-today:not(.mat-calendar-body-selected) {\n border-color: rgba(0, 0, 0, 0.38);\n}\n.mat-calendar-body-disabled > .mat-calendar-body-today:not(.mat-calendar-body-selected) {\n border-color: rgba(0, 0, 0, 0.18);\n}\n.mat-calendar-body-selected {\n background-color: #3f51b5;\n color: white;\n}\n.mat-calendar-body-disabled > .mat-calendar-body-selected {\n background-color: rgba(63, 81, 181, 0.4);\n}\n.mat-calendar-body-today.mat-calendar-body-selected {\n box-shadow: inset 0 0 0 1px white;\n}\n.mat-datepicker-content {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n background-color: white;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-datepicker-content.mat-accent .mat-calendar-body-selected {\n background-color: #448aff;\n color: white;\n}\n.mat-datepicker-content.mat-accent .mat-calendar-body-disabled > .mat-calendar-body-selected {\n background-color: rgba(68, 138, 255, 0.4);\n}\n.mat-datepicker-content.mat-accent .mat-calendar-body-today.mat-calendar-body-selected {\n box-shadow: inset 0 0 0 1px white;\n}\n.mat-datepicker-content.mat-warn .mat-calendar-body-selected {\n background-color: #f44336;\n color: white;\n}\n.mat-datepicker-content.mat-warn .mat-calendar-body-disabled > .mat-calendar-body-selected {\n background-color: rgba(244, 67, 54, 0.4);\n}\n.mat-datepicker-content.mat-warn .mat-calendar-body-today.mat-calendar-body-selected {\n box-shadow: inset 0 0 0 1px white;\n}\n.mat-datepicker-content-touch {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-datepicker-toggle-active {\n color: #3f51b5;\n}\n.mat-datepicker-toggle-active.mat-accent {\n color: #448aff;\n}\n.mat-datepicker-toggle-active.mat-warn {\n color: #f44336;\n}\n.mat-dialog-container {\n box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12);\n background: white;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-divider {\n border-top-color: rgba(0, 0, 0, 0.12);\n}\n.mat-divider-vertical {\n border-right-color: rgba(0, 0, 0, 0.12);\n}\n.mat-expansion-panel {\n background: white;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-expansion-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-action-row {\n border-top-color: rgba(0, 0, 0, 0.12);\n}\n.mat-expansion-panel .mat-expansion-panel-header.cdk-keyboard-focused:not([aria-disabled=true]), .mat-expansion-panel .mat-expansion-panel-header.cdk-program-focused:not([aria-disabled=true]), .mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover:not([aria-disabled=true]) {\n background: rgba(0, 0, 0, 0.04);\n}\n@media (hover: none) {\n .mat-expansion-panel:not(.mat-expanded):not([aria-disabled=true]) .mat-expansion-panel-header:hover {\n background: white;\n }\n}\n.mat-expansion-panel-header-title {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-expansion-panel-header-description,\n.mat-expansion-indicator::after {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-expansion-panel-header[aria-disabled=true] {\n color: rgba(0, 0, 0, 0.26);\n}\n.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title,\n.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description {\n color: inherit;\n}\n.mat-form-field-label {\n color: rgba(0, 0, 0, 0.6);\n}\n.mat-hint {\n color: rgba(0, 0, 0, 0.6);\n}\n.mat-form-field.mat-focused .mat-form-field-label {\n color: #3f51b5;\n}\n.mat-form-field.mat-focused .mat-form-field-label.mat-accent {\n color: #448aff;\n}\n.mat-form-field.mat-focused .mat-form-field-label.mat-warn {\n color: #f44336;\n}\n.mat-focused .mat-form-field-required-marker {\n color: #448aff;\n}\n.mat-form-field-ripple {\n background-color: rgba(0, 0, 0, 0.87);\n}\n.mat-form-field.mat-focused .mat-form-field-ripple {\n background-color: #3f51b5;\n}\n.mat-form-field.mat-focused .mat-form-field-ripple.mat-accent {\n background-color: #448aff;\n}\n.mat-form-field.mat-focused .mat-form-field-ripple.mat-warn {\n background-color: #f44336;\n}\n.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid) .mat-form-field-infix::after {\n color: #3f51b5;\n}\n.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-accent .mat-form-field-infix::after {\n color: #448aff;\n}\n.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-warn .mat-form-field-infix::after {\n color: #f44336;\n}\n.mat-form-field.mat-form-field-invalid .mat-form-field-label {\n color: #f44336;\n}\n.mat-form-field.mat-form-field-invalid .mat-form-field-label.mat-accent,\n.mat-form-field.mat-form-field-invalid .mat-form-field-label .mat-form-field-required-marker {\n color: #f44336;\n}\n.mat-form-field.mat-form-field-invalid .mat-form-field-ripple,\n.mat-form-field.mat-form-field-invalid .mat-form-field-ripple.mat-accent {\n background-color: #f44336;\n}\n.mat-error {\n color: #f44336;\n}\n.mat-form-field-appearance-legacy .mat-form-field-label {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-form-field-appearance-legacy .mat-hint {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-form-field-appearance-legacy .mat-form-field-underline {\n background-color: rgba(0, 0, 0, 0.42);\n}\n.mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline {\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.42) 0%, rgba(0, 0, 0, 0.42) 33%, transparent 0%);\n background-size: 4px 100%;\n background-repeat: repeat-x;\n}\n.mat-form-field-appearance-standard .mat-form-field-underline {\n background-color: rgba(0, 0, 0, 0.42);\n}\n.mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline {\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.42) 0%, rgba(0, 0, 0, 0.42) 33%, transparent 0%);\n background-size: 4px 100%;\n background-repeat: repeat-x;\n}\n.mat-form-field-appearance-fill .mat-form-field-flex {\n background-color: rgba(0, 0, 0, 0.04);\n}\n.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-flex {\n background-color: rgba(0, 0, 0, 0.02);\n}\n.mat-form-field-appearance-fill .mat-form-field-underline::before {\n background-color: rgba(0, 0, 0, 0.42);\n}\n.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-label {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-underline::before {\n background-color: transparent;\n}\n.mat-form-field-appearance-outline .mat-form-field-outline {\n color: rgba(0, 0, 0, 0.12);\n}\n.mat-form-field-appearance-outline .mat-form-field-outline-thick {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick {\n color: #3f51b5;\n}\n.mat-form-field-appearance-outline.mat-focused.mat-accent .mat-form-field-outline-thick {\n color: #448aff;\n}\n.mat-form-field-appearance-outline.mat-focused.mat-warn .mat-form-field-outline-thick {\n color: #f44336;\n}\n.mat-form-field-appearance-outline.mat-form-field-invalid.mat-form-field-invalid .mat-form-field-outline-thick {\n color: #f44336;\n}\n.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-label {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline {\n color: rgba(0, 0, 0, 0.06);\n}\n.mat-icon.mat-primary {\n color: #3f51b5;\n}\n.mat-icon.mat-accent {\n color: #448aff;\n}\n.mat-icon.mat-warn {\n color: #f44336;\n}\n.mat-form-field-type-mat-native-select .mat-form-field-infix::after {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-input-element:disabled,\n.mat-form-field-type-mat-native-select.mat-form-field-disabled .mat-form-field-infix::after {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-input-element {\n caret-color: #3f51b5;\n}\n.mat-input-element::-moz-placeholder {\n color: rgba(0, 0, 0, 0.42);\n}\n.mat-input-element::placeholder {\n color: rgba(0, 0, 0, 0.42);\n}\n.mat-input-element::-moz-placeholder {\n color: rgba(0, 0, 0, 0.42);\n}\n.mat-input-element::-webkit-input-placeholder {\n color: rgba(0, 0, 0, 0.42);\n}\n.mat-input-element:-ms-input-placeholder {\n color: rgba(0, 0, 0, 0.42);\n}\n.mat-accent .mat-input-element {\n caret-color: #448aff;\n}\n.mat-warn .mat-input-element,\n.mat-form-field-invalid .mat-input-element {\n caret-color: #f44336;\n}\n.mat-form-field-type-mat-native-select.mat-form-field-invalid .mat-form-field-infix::after {\n color: #f44336;\n}\n.mat-list-base .mat-list-item {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-list-base .mat-list-option {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-list-base .mat-subheader {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-list-item-disabled {\n background-color: #eeeeee;\n}\n.mat-list-option:hover, .mat-list-option:focus,\n.mat-nav-list .mat-list-item:hover,\n.mat-nav-list .mat-list-item:focus,\n.mat-action-list .mat-list-item:hover,\n.mat-action-list .mat-list-item:focus {\n background: rgba(0, 0, 0, 0.04);\n}\n.mat-list-single-selected-option, .mat-list-single-selected-option:hover, .mat-list-single-selected-option:focus {\n background: rgba(0, 0, 0, 0.12);\n}\n.mat-menu-panel {\n background: white;\n}\n.mat-menu-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-menu-item {\n background: transparent;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-menu-item[disabled], .mat-menu-item[disabled]::after {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-menu-item .mat-icon-no-color,\n.mat-menu-item-submenu-trigger::after {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-menu-item:hover:not([disabled]),\n.mat-menu-item.cdk-program-focused:not([disabled]),\n.mat-menu-item.cdk-keyboard-focused:not([disabled]),\n.mat-menu-item-highlighted:not([disabled]) {\n background: rgba(0, 0, 0, 0.04);\n}\n.mat-paginator {\n background: white;\n}\n.mat-paginator,\n.mat-paginator-page-size .mat-select-trigger {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-paginator-decrement,\n.mat-paginator-increment {\n border-top: 2px solid rgba(0, 0, 0, 0.54);\n border-right: 2px solid rgba(0, 0, 0, 0.54);\n}\n.mat-paginator-first,\n.mat-paginator-last {\n border-top: 2px solid rgba(0, 0, 0, 0.54);\n}\n.mat-icon-button[disabled] .mat-paginator-decrement,\n.mat-icon-button[disabled] .mat-paginator-increment,\n.mat-icon-button[disabled] .mat-paginator-first,\n.mat-icon-button[disabled] .mat-paginator-last {\n border-color: rgba(0, 0, 0, 0.38);\n}\n.mat-progress-bar-background {\n fill: #c5cae9;\n}\n.mat-progress-bar-buffer {\n background-color: #c5cae9;\n}\n.mat-progress-bar-fill::after {\n background-color: #3f51b5;\n}\n.mat-progress-bar.mat-accent .mat-progress-bar-background {\n fill: #82b1ff;\n}\n.mat-progress-bar.mat-accent .mat-progress-bar-buffer {\n background-color: #82b1ff;\n}\n.mat-progress-bar.mat-accent .mat-progress-bar-fill::after {\n background-color: #448aff;\n}\n.mat-progress-bar.mat-warn .mat-progress-bar-background {\n fill: #ffcdd2;\n}\n.mat-progress-bar.mat-warn .mat-progress-bar-buffer {\n background-color: #ffcdd2;\n}\n.mat-progress-bar.mat-warn .mat-progress-bar-fill::after {\n background-color: #f44336;\n}\n.mat-progress-spinner circle, .mat-spinner circle {\n stroke: #3f51b5;\n}\n.mat-progress-spinner.mat-accent circle, .mat-spinner.mat-accent circle {\n stroke: #448aff;\n}\n.mat-progress-spinner.mat-warn circle, .mat-spinner.mat-warn circle {\n stroke: #f44336;\n}\n.mat-radio-outer-circle {\n border-color: rgba(0, 0, 0, 0.54);\n}\n.mat-radio-button.mat-primary.mat-radio-checked .mat-radio-outer-circle {\n border-color: #3f51b5;\n}\n.mat-radio-button.mat-primary .mat-radio-inner-circle,\n.mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .mat-radio-button.mat-primary.mat-radio-checked .mat-radio-persistent-ripple, .mat-radio-button.mat-primary:active .mat-radio-persistent-ripple {\n background-color: #3f51b5;\n}\n.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle {\n border-color: #448aff;\n}\n.mat-radio-button.mat-accent .mat-radio-inner-circle,\n.mat-radio-button.mat-accent .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .mat-radio-button.mat-accent.mat-radio-checked .mat-radio-persistent-ripple, .mat-radio-button.mat-accent:active .mat-radio-persistent-ripple {\n background-color: #448aff;\n}\n.mat-radio-button.mat-warn.mat-radio-checked .mat-radio-outer-circle {\n border-color: #f44336;\n}\n.mat-radio-button.mat-warn .mat-radio-inner-circle,\n.mat-radio-button.mat-warn .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .mat-radio-button.mat-warn.mat-radio-checked .mat-radio-persistent-ripple, .mat-radio-button.mat-warn:active .mat-radio-persistent-ripple {\n background-color: #f44336;\n}\n.mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-outer-circle,\n.mat-radio-button.mat-radio-disabled .mat-radio-outer-circle {\n border-color: rgba(0, 0, 0, 0.38);\n}\n.mat-radio-button.mat-radio-disabled .mat-radio-ripple .mat-ripple-element,\n.mat-radio-button.mat-radio-disabled .mat-radio-inner-circle {\n background-color: rgba(0, 0, 0, 0.38);\n}\n.mat-radio-button.mat-radio-disabled .mat-radio-label-content {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-radio-button .mat-ripple-element {\n background-color: black;\n}\n.mat-select-value {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-select-placeholder {\n color: rgba(0, 0, 0, 0.42);\n}\n.mat-select-disabled .mat-select-value {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-select-arrow {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-select-panel {\n background: white;\n}\n.mat-select-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-select-panel .mat-option.mat-selected:not(.mat-option-multiple) {\n background: rgba(0, 0, 0, 0.12);\n}\n.mat-form-field.mat-focused.mat-primary .mat-select-arrow {\n color: #3f51b5;\n}\n.mat-form-field.mat-focused.mat-accent .mat-select-arrow {\n color: #448aff;\n}\n.mat-form-field.mat-focused.mat-warn .mat-select-arrow {\n color: #f44336;\n}\n.mat-form-field .mat-select.mat-select-invalid .mat-select-arrow {\n color: #f44336;\n}\n.mat-form-field .mat-select.mat-select-disabled .mat-select-arrow {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-drawer-container {\n background-color: #fafafa;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-drawer {\n background-color: white;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-drawer.mat-drawer-push {\n background-color: white;\n}\n.mat-drawer:not(.mat-drawer-side) {\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\n}\n.mat-drawer-side {\n border-right: solid 1px rgba(0, 0, 0, 0.12);\n}\n.mat-drawer-side.mat-drawer-end {\n border-left: solid 1px rgba(0, 0, 0, 0.12);\n border-right: none;\n}\n[dir=rtl] .mat-drawer-side {\n border-left: solid 1px rgba(0, 0, 0, 0.12);\n border-right: none;\n}\n[dir=rtl] .mat-drawer-side.mat-drawer-end {\n border-left: none;\n border-right: solid 1px rgba(0, 0, 0, 0.12);\n}\n.mat-drawer-backdrop.mat-drawer-shown {\n background-color: rgba(0, 0, 0, 0.6);\n}\n.mat-slide-toggle.mat-checked .mat-slide-toggle-thumb {\n background-color: #448aff;\n}\n.mat-slide-toggle.mat-checked .mat-slide-toggle-bar {\n background-color: rgba(68, 138, 255, 0.54);\n}\n.mat-slide-toggle.mat-checked .mat-ripple-element {\n background-color: #448aff;\n}\n.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-thumb {\n background-color: #3f51b5;\n}\n.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-bar {\n background-color: rgba(63, 81, 181, 0.54);\n}\n.mat-slide-toggle.mat-primary.mat-checked .mat-ripple-element {\n background-color: #3f51b5;\n}\n.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-thumb {\n background-color: #f44336;\n}\n.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-bar {\n background-color: rgba(244, 67, 54, 0.54);\n}\n.mat-slide-toggle.mat-warn.mat-checked .mat-ripple-element {\n background-color: #f44336;\n}\n.mat-slide-toggle:not(.mat-checked) .mat-ripple-element {\n background-color: black;\n}\n.mat-slide-toggle-thumb {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n background-color: #fafafa;\n}\n.mat-slide-toggle-bar {\n background-color: rgba(0, 0, 0, 0.38);\n}\n.mat-slider-track-background {\n background-color: rgba(0, 0, 0, 0.26);\n}\n.mat-primary .mat-slider-track-fill,\n.mat-primary .mat-slider-thumb,\n.mat-primary .mat-slider-thumb-label {\n background-color: #3f51b5;\n}\n.mat-primary .mat-slider-thumb-label-text {\n color: white;\n}\n.mat-accent .mat-slider-track-fill,\n.mat-accent .mat-slider-thumb,\n.mat-accent .mat-slider-thumb-label {\n background-color: #448aff;\n}\n.mat-accent .mat-slider-thumb-label-text {\n color: white;\n}\n.mat-warn .mat-slider-track-fill,\n.mat-warn .mat-slider-thumb,\n.mat-warn .mat-slider-thumb-label {\n background-color: #f44336;\n}\n.mat-warn .mat-slider-thumb-label-text {\n color: white;\n}\n.mat-slider-focus-ring {\n background-color: rgba(68, 138, 255, 0.2);\n}\n.mat-slider:hover .mat-slider-track-background,\n.cdk-focused .mat-slider-track-background {\n background-color: rgba(0, 0, 0, 0.38);\n}\n.mat-slider-disabled .mat-slider-track-background,\n.mat-slider-disabled .mat-slider-track-fill,\n.mat-slider-disabled .mat-slider-thumb {\n background-color: rgba(0, 0, 0, 0.26);\n}\n.mat-slider-disabled:hover .mat-slider-track-background {\n background-color: rgba(0, 0, 0, 0.26);\n}\n.mat-slider-min-value .mat-slider-focus-ring {\n background-color: rgba(0, 0, 0, 0.12);\n}\n.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb,\n.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb-label {\n background-color: rgba(0, 0, 0, 0.87);\n}\n.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb,\n.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb-label {\n background-color: rgba(0, 0, 0, 0.26);\n}\n.mat-slider-min-value:not(.mat-slider-thumb-label-showing) .mat-slider-thumb {\n border-color: rgba(0, 0, 0, 0.26);\n background-color: transparent;\n}\n.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover .mat-slider-thumb, .mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused .mat-slider-thumb {\n border-color: rgba(0, 0, 0, 0.38);\n}\n.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover.mat-slider-disabled .mat-slider-thumb, .mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused.mat-slider-disabled .mat-slider-thumb {\n border-color: rgba(0, 0, 0, 0.26);\n}\n.mat-slider-has-ticks .mat-slider-wrapper::after {\n border-color: rgba(0, 0, 0, 0.7);\n}\n.mat-slider-horizontal .mat-slider-ticks {\n background-image: repeating-linear-gradient(to right, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent);\n background-image: -moz-repeating-linear-gradient(0.0001deg, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent);\n}\n.mat-slider-vertical .mat-slider-ticks {\n background-image: repeating-linear-gradient(to bottom, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent);\n}\n.mat-step-header.cdk-keyboard-focused, .mat-step-header.cdk-program-focused, .mat-step-header:hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n@media (hover: none) {\n .mat-step-header:hover {\n background: none;\n }\n}\n.mat-step-header .mat-step-label,\n.mat-step-header .mat-step-optional {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-step-header .mat-step-icon {\n background-color: rgba(0, 0, 0, 0.54);\n color: white;\n}\n.mat-step-header .mat-step-icon-selected,\n.mat-step-header .mat-step-icon-state-done,\n.mat-step-header .mat-step-icon-state-edit {\n background-color: #3f51b5;\n color: white;\n}\n.mat-step-header .mat-step-icon-state-error {\n background-color: transparent;\n color: #f44336;\n}\n.mat-step-header .mat-step-label.mat-step-label-active {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-step-header .mat-step-label.mat-step-label-error {\n color: #f44336;\n}\n.mat-stepper-horizontal, .mat-stepper-vertical {\n background-color: white;\n}\n.mat-stepper-vertical-line::before {\n border-left-color: rgba(0, 0, 0, 0.12);\n}\n.mat-horizontal-stepper-header::before,\n.mat-horizontal-stepper-header::after,\n.mat-stepper-horizontal-line {\n border-top-color: rgba(0, 0, 0, 0.12);\n}\n.mat-sort-header-arrow {\n color: #757575;\n}\n.mat-tab-nav-bar,\n.mat-tab-header {\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n}\n.mat-tab-group-inverted-header .mat-tab-nav-bar,\n.mat-tab-group-inverted-header .mat-tab-header {\n border-top: 1px solid rgba(0, 0, 0, 0.12);\n border-bottom: none;\n}\n.mat-tab-label, .mat-tab-link {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-tab-label.mat-tab-disabled, .mat-tab-link.mat-tab-disabled {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-tab-header-pagination-chevron {\n border-color: rgba(0, 0, 0, 0.87);\n}\n.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(0, 0, 0, 0.38);\n}\n.mat-tab-group[class*=mat-background-] .mat-tab-header,\n.mat-tab-nav-bar[class*=mat-background-] {\n border-bottom: none;\n border-top: none;\n}\n.mat-tab-group.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(197, 202, 233, 0.3);\n}\n.mat-tab-group.mat-primary .mat-ink-bar, .mat-tab-nav-bar.mat-primary .mat-ink-bar {\n background-color: #3f51b5;\n}\n.mat-tab-group.mat-primary.mat-background-primary .mat-ink-bar, .mat-tab-nav-bar.mat-primary.mat-background-primary .mat-ink-bar {\n background-color: white;\n}\n.mat-tab-group.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(130, 177, 255, 0.3);\n}\n.mat-tab-group.mat-accent .mat-ink-bar, .mat-tab-nav-bar.mat-accent .mat-ink-bar {\n background-color: #448aff;\n}\n.mat-tab-group.mat-accent.mat-background-accent .mat-ink-bar, .mat-tab-nav-bar.mat-accent.mat-background-accent .mat-ink-bar {\n background-color: white;\n}\n.mat-tab-group.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(255, 205, 210, 0.3);\n}\n.mat-tab-group.mat-warn .mat-ink-bar, .mat-tab-nav-bar.mat-warn .mat-ink-bar {\n background-color: #f44336;\n}\n.mat-tab-group.mat-warn.mat-background-warn .mat-ink-bar, .mat-tab-nav-bar.mat-warn.mat-background-warn .mat-ink-bar {\n background-color: white;\n}\n.mat-tab-group.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(197, 202, 233, 0.3);\n}\n.mat-tab-group.mat-background-primary .mat-tab-header, .mat-tab-group.mat-background-primary .mat-tab-links, .mat-tab-group.mat-background-primary .mat-tab-header-pagination, .mat-tab-nav-bar.mat-background-primary .mat-tab-header, .mat-tab-nav-bar.mat-background-primary .mat-tab-links, .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination {\n background-color: #3f51b5;\n}\n.mat-tab-group.mat-background-primary .mat-tab-label, .mat-tab-group.mat-background-primary .mat-tab-link, .mat-tab-nav-bar.mat-background-primary .mat-tab-label, .mat-tab-nav-bar.mat-background-primary .mat-tab-link {\n color: white;\n}\n.mat-tab-group.mat-background-primary .mat-tab-label.mat-tab-disabled, .mat-tab-group.mat-background-primary .mat-tab-link.mat-tab-disabled, .mat-tab-nav-bar.mat-background-primary .mat-tab-label.mat-tab-disabled, .mat-tab-nav-bar.mat-background-primary .mat-tab-link.mat-tab-disabled {\n color: rgba(255, 255, 255, 0.4);\n}\n.mat-tab-group.mat-background-primary .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-chevron {\n border-color: white;\n}\n.mat-tab-group.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(255, 255, 255, 0.4);\n}\n.mat-tab-group.mat-background-primary .mat-ripple-element, .mat-tab-nav-bar.mat-background-primary .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.mat-tab-group.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(130, 177, 255, 0.3);\n}\n.mat-tab-group.mat-background-accent .mat-tab-header, .mat-tab-group.mat-background-accent .mat-tab-links, .mat-tab-group.mat-background-accent .mat-tab-header-pagination, .mat-tab-nav-bar.mat-background-accent .mat-tab-header, .mat-tab-nav-bar.mat-background-accent .mat-tab-links, .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination {\n background-color: #448aff;\n}\n.mat-tab-group.mat-background-accent .mat-tab-label, .mat-tab-group.mat-background-accent .mat-tab-link, .mat-tab-nav-bar.mat-background-accent .mat-tab-label, .mat-tab-nav-bar.mat-background-accent .mat-tab-link {\n color: white;\n}\n.mat-tab-group.mat-background-accent .mat-tab-label.mat-tab-disabled, .mat-tab-group.mat-background-accent .mat-tab-link.mat-tab-disabled, .mat-tab-nav-bar.mat-background-accent .mat-tab-label.mat-tab-disabled, .mat-tab-nav-bar.mat-background-accent .mat-tab-link.mat-tab-disabled {\n color: rgba(255, 255, 255, 0.4);\n}\n.mat-tab-group.mat-background-accent .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-chevron {\n border-color: white;\n}\n.mat-tab-group.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(255, 255, 255, 0.4);\n}\n.mat-tab-group.mat-background-accent .mat-ripple-element, .mat-tab-nav-bar.mat-background-accent .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.mat-tab-group.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(255, 205, 210, 0.3);\n}\n.mat-tab-group.mat-background-warn .mat-tab-header, .mat-tab-group.mat-background-warn .mat-tab-links, .mat-tab-group.mat-background-warn .mat-tab-header-pagination, .mat-tab-nav-bar.mat-background-warn .mat-tab-header, .mat-tab-nav-bar.mat-background-warn .mat-tab-links, .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination {\n background-color: #f44336;\n}\n.mat-tab-group.mat-background-warn .mat-tab-label, .mat-tab-group.mat-background-warn .mat-tab-link, .mat-tab-nav-bar.mat-background-warn .mat-tab-label, .mat-tab-nav-bar.mat-background-warn .mat-tab-link {\n color: white;\n}\n.mat-tab-group.mat-background-warn .mat-tab-label.mat-tab-disabled, .mat-tab-group.mat-background-warn .mat-tab-link.mat-tab-disabled, .mat-tab-nav-bar.mat-background-warn .mat-tab-label.mat-tab-disabled, .mat-tab-nav-bar.mat-background-warn .mat-tab-link.mat-tab-disabled {\n color: rgba(255, 255, 255, 0.4);\n}\n.mat-tab-group.mat-background-warn .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-chevron {\n border-color: white;\n}\n.mat-tab-group.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(255, 255, 255, 0.4);\n}\n.mat-tab-group.mat-background-warn .mat-ripple-element, .mat-tab-nav-bar.mat-background-warn .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.mat-toolbar {\n background: whitesmoke;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-toolbar.mat-primary {\n background: #3f51b5;\n color: white;\n}\n.mat-toolbar.mat-accent {\n background: #448aff;\n color: white;\n}\n.mat-toolbar.mat-warn {\n background: #f44336;\n color: white;\n}\n.mat-toolbar .mat-form-field-underline,\n.mat-toolbar .mat-form-field-ripple,\n.mat-toolbar .mat-focused .mat-form-field-ripple {\n background-color: currentColor;\n}\n.mat-toolbar .mat-form-field-label,\n.mat-toolbar .mat-focused .mat-form-field-label,\n.mat-toolbar .mat-select-value,\n.mat-toolbar .mat-select-arrow,\n.mat-toolbar .mat-form-field.mat-focused .mat-select-arrow {\n color: inherit;\n}\n.mat-toolbar .mat-input-element {\n caret-color: currentColor;\n}\n.mat-tooltip {\n background: rgba(97, 97, 97, 0.9);\n}\n.mat-tree {\n background: white;\n}\n.mat-tree-node,\n.mat-nested-tree-node {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-snack-bar-container {\n color: rgba(255, 255, 255, 0.7);\n background: #323232;\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-simple-snackbar-action {\n color: #448aff;\n}\n/* You can add global styles to this file, and also import other style files */\n.dark-mode {\n color: white;\n}\n.dark-mode .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-option {\n color: white;\n}\n.dark-mode .mat-option:hover:not(.mat-option-disabled), .dark-mode .mat-option:focus:not(.mat-option-disabled) {\n background: rgba(255, 255, 255, 0.04);\n}\n.dark-mode .mat-option.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled) {\n background: rgba(255, 255, 255, 0.04);\n}\n.dark-mode .mat-option.mat-active {\n background: rgba(255, 255, 255, 0.04);\n color: white;\n}\n.dark-mode .mat-option.mat-option-disabled {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-primary .mat-option.mat-selected:not(.mat-option-disabled) {\n color: #00bcd4;\n}\n.dark-mode .mat-accent .mat-option.mat-selected:not(.mat-option-disabled) {\n color: #2979ff;\n}\n.dark-mode .mat-warn .mat-option.mat-selected:not(.mat-option-disabled) {\n color: #f44336;\n}\n.dark-mode .mat-optgroup-label {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-optgroup-disabled .mat-optgroup-label {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-pseudo-checkbox {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-pseudo-checkbox::after {\n color: #303030;\n}\n.dark-mode .mat-pseudo-checkbox-disabled {\n color: #686868;\n}\n.dark-mode .mat-primary .mat-pseudo-checkbox-checked,\n.dark-mode .mat-primary .mat-pseudo-checkbox-indeterminate {\n background: #00bcd4;\n}\n.dark-mode .mat-pseudo-checkbox-checked,\n.dark-mode .mat-pseudo-checkbox-indeterminate,\n.dark-mode .mat-accent .mat-pseudo-checkbox-checked,\n.dark-mode .mat-accent .mat-pseudo-checkbox-indeterminate {\n background: #2979ff;\n}\n.dark-mode .mat-warn .mat-pseudo-checkbox-checked,\n.dark-mode .mat-warn .mat-pseudo-checkbox-indeterminate {\n background: #f44336;\n}\n.dark-mode .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,\n.dark-mode .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled {\n background: #686868;\n}\n.dark-mode .mat-elevation-z0 {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z1 {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z2 {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z3 {\n box-shadow: 0px 3px 3px -2px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 0, 0, 0.14), 0px 1px 8px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z4 {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z5 {\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 5px 8px 0px rgba(0, 0, 0, 0.14), 0px 1px 14px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z6 {\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z7 {\n box-shadow: 0px 4px 5px -2px rgba(0, 0, 0, 0.2), 0px 7px 10px 1px rgba(0, 0, 0, 0.14), 0px 2px 16px 1px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z8 {\n box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z9 {\n box-shadow: 0px 5px 6px -3px rgba(0, 0, 0, 0.2), 0px 9px 12px 1px rgba(0, 0, 0, 0.14), 0px 3px 16px 2px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z10 {\n box-shadow: 0px 6px 6px -3px rgba(0, 0, 0, 0.2), 0px 10px 14px 1px rgba(0, 0, 0, 0.14), 0px 4px 18px 3px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z11 {\n box-shadow: 0px 6px 7px -4px rgba(0, 0, 0, 0.2), 0px 11px 15px 1px rgba(0, 0, 0, 0.14), 0px 4px 20px 3px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z12 {\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z13 {\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 13px 19px 2px rgba(0, 0, 0, 0.14), 0px 5px 24px 4px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z14 {\n box-shadow: 0px 7px 9px -4px rgba(0, 0, 0, 0.2), 0px 14px 21px 2px rgba(0, 0, 0, 0.14), 0px 5px 26px 4px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z15 {\n box-shadow: 0px 8px 9px -5px rgba(0, 0, 0, 0.2), 0px 15px 22px 2px rgba(0, 0, 0, 0.14), 0px 6px 28px 5px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z16 {\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z17 {\n box-shadow: 0px 8px 11px -5px rgba(0, 0, 0, 0.2), 0px 17px 26px 2px rgba(0, 0, 0, 0.14), 0px 6px 32px 5px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z18 {\n box-shadow: 0px 9px 11px -5px rgba(0, 0, 0, 0.2), 0px 18px 28px 2px rgba(0, 0, 0, 0.14), 0px 7px 34px 6px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z19 {\n box-shadow: 0px 9px 12px -6px rgba(0, 0, 0, 0.2), 0px 19px 29px 2px rgba(0, 0, 0, 0.14), 0px 7px 36px 6px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z20 {\n box-shadow: 0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 20px 31px 3px rgba(0, 0, 0, 0.14), 0px 8px 38px 7px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z21 {\n box-shadow: 0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 21px 33px 3px rgba(0, 0, 0, 0.14), 0px 8px 40px 7px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z22 {\n box-shadow: 0px 10px 14px -6px rgba(0, 0, 0, 0.2), 0px 22px 35px 3px rgba(0, 0, 0, 0.14), 0px 8px 42px 7px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z23 {\n box-shadow: 0px 11px 14px -7px rgba(0, 0, 0, 0.2), 0px 23px 36px 3px rgba(0, 0, 0, 0.14), 0px 9px 44px 8px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z24 {\n box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-app-background, .dark-mode.mat-app-background {\n background-color: #303030;\n color: white;\n}\n.mat-theme-loaded-marker {\n display: none;\n}\n.dark-mode .mat-autocomplete-panel {\n background: #424242;\n color: white;\n}\n.dark-mode .mat-autocomplete-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover) {\n background: #424242;\n}\n.dark-mode .mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover):not(.mat-option-disabled) {\n color: white;\n}\n.dark-mode .mat-badge-content {\n color: white;\n background: #00bcd4;\n}\n.cdk-high-contrast-active .dark-mode .mat-badge-content {\n outline: solid 1px;\n border-radius: 0;\n}\n.dark-mode .mat-badge-accent .mat-badge-content {\n background: #2979ff;\n color: white;\n}\n.dark-mode .mat-badge-warn .mat-badge-content {\n color: white;\n background: #f44336;\n}\n.dark-mode .mat-badge {\n position: relative;\n}\n.dark-mode .mat-badge-hidden .mat-badge-content {\n display: none;\n}\n.dark-mode .mat-badge-disabled .mat-badge-content {\n background: #6e6e6e;\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-badge-content {\n position: absolute;\n text-align: center;\n display: inline-block;\n border-radius: 50%;\n transition: transform 200ms ease-in-out;\n transform: scale(0.6);\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n pointer-events: none;\n}\n.dark-mode .ng-animate-disabled .mat-badge-content,\n.dark-mode .mat-badge-content._mat-animation-noopable {\n transition: none;\n}\n.dark-mode .mat-badge-content.mat-badge-active {\n transform: none;\n}\n.dark-mode .mat-badge-small .mat-badge-content {\n width: 16px;\n height: 16px;\n line-height: 16px;\n}\n.dark-mode .mat-badge-small.mat-badge-above .mat-badge-content {\n top: -8px;\n}\n.dark-mode .mat-badge-small.mat-badge-below .mat-badge-content {\n bottom: -8px;\n}\n.dark-mode .mat-badge-small.mat-badge-before .mat-badge-content {\n left: -16px;\n}\n[dir=rtl] .dark-mode .mat-badge-small.mat-badge-before .mat-badge-content {\n left: auto;\n right: -16px;\n}\n.dark-mode .mat-badge-small.mat-badge-after .mat-badge-content {\n right: -16px;\n}\n[dir=rtl] .dark-mode .mat-badge-small.mat-badge-after .mat-badge-content {\n right: auto;\n left: -16px;\n}\n.dark-mode .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: -8px;\n}\n[dir=rtl] .dark-mode .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: auto;\n right: -8px;\n}\n.dark-mode .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: -8px;\n}\n[dir=rtl] .dark-mode .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: auto;\n left: -8px;\n}\n.dark-mode .mat-badge-medium .mat-badge-content {\n width: 22px;\n height: 22px;\n line-height: 22px;\n}\n.dark-mode .mat-badge-medium.mat-badge-above .mat-badge-content {\n top: -11px;\n}\n.dark-mode .mat-badge-medium.mat-badge-below .mat-badge-content {\n bottom: -11px;\n}\n.dark-mode .mat-badge-medium.mat-badge-before .mat-badge-content {\n left: -22px;\n}\n[dir=rtl] .dark-mode .mat-badge-medium.mat-badge-before .mat-badge-content {\n left: auto;\n right: -22px;\n}\n.dark-mode .mat-badge-medium.mat-badge-after .mat-badge-content {\n right: -22px;\n}\n[dir=rtl] .dark-mode .mat-badge-medium.mat-badge-after .mat-badge-content {\n right: auto;\n left: -22px;\n}\n.dark-mode .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: -11px;\n}\n[dir=rtl] .dark-mode .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: auto;\n right: -11px;\n}\n.dark-mode .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: -11px;\n}\n[dir=rtl] .dark-mode .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: auto;\n left: -11px;\n}\n.dark-mode .mat-badge-large .mat-badge-content {\n width: 28px;\n height: 28px;\n line-height: 28px;\n}\n.dark-mode .mat-badge-large.mat-badge-above .mat-badge-content {\n top: -14px;\n}\n.dark-mode .mat-badge-large.mat-badge-below .mat-badge-content {\n bottom: -14px;\n}\n.dark-mode .mat-badge-large.mat-badge-before .mat-badge-content {\n left: -28px;\n}\n[dir=rtl] .dark-mode .mat-badge-large.mat-badge-before .mat-badge-content {\n left: auto;\n right: -28px;\n}\n.dark-mode .mat-badge-large.mat-badge-after .mat-badge-content {\n right: -28px;\n}\n[dir=rtl] .dark-mode .mat-badge-large.mat-badge-after .mat-badge-content {\n right: auto;\n left: -28px;\n}\n.dark-mode .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: -14px;\n}\n[dir=rtl] .dark-mode .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: auto;\n right: -14px;\n}\n.dark-mode .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: -14px;\n}\n[dir=rtl] .dark-mode .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: auto;\n left: -14px;\n}\n.dark-mode .mat-bottom-sheet-container {\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\n background: #424242;\n color: white;\n}\n.dark-mode .mat-button, .dark-mode .mat-icon-button, .dark-mode .mat-stroked-button {\n color: inherit;\n background: transparent;\n}\n.dark-mode .mat-button.mat-primary, .dark-mode .mat-icon-button.mat-primary, .dark-mode .mat-stroked-button.mat-primary {\n color: #00bcd4;\n}\n.dark-mode .mat-button.mat-accent, .dark-mode .mat-icon-button.mat-accent, .dark-mode .mat-stroked-button.mat-accent {\n color: #2979ff;\n}\n.dark-mode .mat-button.mat-warn, .dark-mode .mat-icon-button.mat-warn, .dark-mode .mat-stroked-button.mat-warn {\n color: #f44336;\n}\n.dark-mode .mat-button.mat-primary[disabled], .dark-mode .mat-button.mat-accent[disabled], .dark-mode .mat-button.mat-warn[disabled], .dark-mode .mat-button[disabled][disabled], .dark-mode .mat-icon-button.mat-primary[disabled], .dark-mode .mat-icon-button.mat-accent[disabled], .dark-mode .mat-icon-button.mat-warn[disabled], .dark-mode .mat-icon-button[disabled][disabled], .dark-mode .mat-stroked-button.mat-primary[disabled], .dark-mode .mat-stroked-button.mat-accent[disabled], .dark-mode .mat-stroked-button.mat-warn[disabled], .dark-mode .mat-stroked-button[disabled][disabled] {\n color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-button.mat-primary .mat-button-focus-overlay, .dark-mode .mat-icon-button.mat-primary .mat-button-focus-overlay, .dark-mode .mat-stroked-button.mat-primary .mat-button-focus-overlay {\n background-color: #00bcd4;\n}\n.dark-mode .mat-button.mat-accent .mat-button-focus-overlay, .dark-mode .mat-icon-button.mat-accent .mat-button-focus-overlay, .dark-mode .mat-stroked-button.mat-accent .mat-button-focus-overlay {\n background-color: #2979ff;\n}\n.dark-mode .mat-button.mat-warn .mat-button-focus-overlay, .dark-mode .mat-icon-button.mat-warn .mat-button-focus-overlay, .dark-mode .mat-stroked-button.mat-warn .mat-button-focus-overlay {\n background-color: #f44336;\n}\n.dark-mode .mat-button[disabled] .mat-button-focus-overlay, .dark-mode .mat-icon-button[disabled] .mat-button-focus-overlay, .dark-mode .mat-stroked-button[disabled] .mat-button-focus-overlay {\n background-color: transparent;\n}\n.dark-mode .mat-button .mat-ripple-element, .dark-mode .mat-icon-button .mat-ripple-element, .dark-mode .mat-stroked-button .mat-ripple-element {\n opacity: 0.1;\n background-color: currentColor;\n}\n.dark-mode .mat-button-focus-overlay {\n background: white;\n}\n.dark-mode .mat-stroked-button:not([disabled]) {\n border-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-flat-button, .dark-mode .mat-raised-button, .dark-mode .mat-fab, .dark-mode .mat-mini-fab {\n color: white;\n background-color: #424242;\n}\n.dark-mode .mat-flat-button.mat-primary, .dark-mode .mat-raised-button.mat-primary, .dark-mode .mat-fab.mat-primary, .dark-mode .mat-mini-fab.mat-primary {\n color: white;\n}\n.dark-mode .mat-flat-button.mat-accent, .dark-mode .mat-raised-button.mat-accent, .dark-mode .mat-fab.mat-accent, .dark-mode .mat-mini-fab.mat-accent {\n color: white;\n}\n.dark-mode .mat-flat-button.mat-warn, .dark-mode .mat-raised-button.mat-warn, .dark-mode .mat-fab.mat-warn, .dark-mode .mat-mini-fab.mat-warn {\n color: white;\n}\n.dark-mode .mat-flat-button.mat-primary[disabled], .dark-mode .mat-flat-button.mat-accent[disabled], .dark-mode .mat-flat-button.mat-warn[disabled], .dark-mode .mat-flat-button[disabled][disabled], .dark-mode .mat-raised-button.mat-primary[disabled], .dark-mode .mat-raised-button.mat-accent[disabled], .dark-mode .mat-raised-button.mat-warn[disabled], .dark-mode .mat-raised-button[disabled][disabled], .dark-mode .mat-fab.mat-primary[disabled], .dark-mode .mat-fab.mat-accent[disabled], .dark-mode .mat-fab.mat-warn[disabled], .dark-mode .mat-fab[disabled][disabled], .dark-mode .mat-mini-fab.mat-primary[disabled], .dark-mode .mat-mini-fab.mat-accent[disabled], .dark-mode .mat-mini-fab.mat-warn[disabled], .dark-mode .mat-mini-fab[disabled][disabled] {\n color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-flat-button.mat-primary, .dark-mode .mat-raised-button.mat-primary, .dark-mode .mat-fab.mat-primary, .dark-mode .mat-mini-fab.mat-primary {\n background-color: #00bcd4;\n}\n.dark-mode .mat-flat-button.mat-accent, .dark-mode .mat-raised-button.mat-accent, .dark-mode .mat-fab.mat-accent, .dark-mode .mat-mini-fab.mat-accent {\n background-color: #2979ff;\n}\n.dark-mode .mat-flat-button.mat-warn, .dark-mode .mat-raised-button.mat-warn, .dark-mode .mat-fab.mat-warn, .dark-mode .mat-mini-fab.mat-warn {\n background-color: #f44336;\n}\n.dark-mode .mat-flat-button.mat-primary[disabled], .dark-mode .mat-flat-button.mat-accent[disabled], .dark-mode .mat-flat-button.mat-warn[disabled], .dark-mode .mat-flat-button[disabled][disabled], .dark-mode .mat-raised-button.mat-primary[disabled], .dark-mode .mat-raised-button.mat-accent[disabled], .dark-mode .mat-raised-button.mat-warn[disabled], .dark-mode .mat-raised-button[disabled][disabled], .dark-mode .mat-fab.mat-primary[disabled], .dark-mode .mat-fab.mat-accent[disabled], .dark-mode .mat-fab.mat-warn[disabled], .dark-mode .mat-fab[disabled][disabled], .dark-mode .mat-mini-fab.mat-primary[disabled], .dark-mode .mat-mini-fab.mat-accent[disabled], .dark-mode .mat-mini-fab.mat-warn[disabled], .dark-mode .mat-mini-fab[disabled][disabled] {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-flat-button.mat-primary .mat-ripple-element, .dark-mode .mat-raised-button.mat-primary .mat-ripple-element, .dark-mode .mat-fab.mat-primary .mat-ripple-element, .dark-mode .mat-mini-fab.mat-primary .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-flat-button.mat-accent .mat-ripple-element, .dark-mode .mat-raised-button.mat-accent .mat-ripple-element, .dark-mode .mat-fab.mat-accent .mat-ripple-element, .dark-mode .mat-mini-fab.mat-accent .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-flat-button.mat-warn .mat-ripple-element, .dark-mode .mat-raised-button.mat-warn .mat-ripple-element, .dark-mode .mat-fab.mat-warn .mat-ripple-element, .dark-mode .mat-mini-fab.mat-warn .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-stroked-button:not([class*=mat-elevation-z]), .dark-mode .mat-flat-button:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-raised-button:not([class*=mat-elevation-z]) {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-raised-button:not([disabled]):active:not([class*=mat-elevation-z]) {\n box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-raised-button[disabled]:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-fab:not([class*=mat-elevation-z]), .dark-mode .mat-mini-fab:not([class*=mat-elevation-z]) {\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-fab:not([disabled]):active:not([class*=mat-elevation-z]), .dark-mode .mat-mini-fab:not([disabled]):active:not([class*=mat-elevation-z]) {\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-fab[disabled]:not([class*=mat-elevation-z]), .dark-mode .mat-mini-fab[disabled]:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-button-toggle-standalone,\n.dark-mode .mat-button-toggle-group {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\n.dark-mode .mat-button-toggle-group-appearance-standard {\n box-shadow: none;\n}\n.dark-mode .mat-button-toggle {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-button-toggle .mat-button-toggle-focus-overlay {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-button-toggle-appearance-standard {\n color: white;\n background: #424242;\n}\n.dark-mode .mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay {\n background-color: white;\n}\n.dark-mode .mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\n border-left: solid 1px rgba(255, 255, 255, 0.12);\n}\n.dark-mode [dir=rtl] .mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\n border-left: none;\n border-right: solid 1px rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle + .mat-button-toggle {\n border-left: none;\n border-right: none;\n border-top: solid 1px rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-button-toggle-checked {\n background-color: #212121;\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-button-toggle-checked.mat-button-toggle-appearance-standard {\n color: white;\n}\n.dark-mode .mat-button-toggle-disabled {\n color: rgba(255, 255, 255, 0.3);\n background-color: black;\n}\n.dark-mode .mat-button-toggle-disabled.mat-button-toggle-appearance-standard {\n background: #424242;\n}\n.dark-mode .mat-button-toggle-disabled.mat-button-toggle-checked {\n background-color: #424242;\n}\n.dark-mode .mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\n.dark-mode .mat-button-toggle-group-appearance-standard {\n border: solid 1px rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-card {\n background: #424242;\n color: white;\n}\n.dark-mode .mat-card:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-card.mat-card-flat:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-card-subtitle {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-checkbox-frame {\n border-color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-checkbox-checkmark {\n fill: #303030;\n}\n.dark-mode .mat-checkbox-checkmark-path {\n stroke: #303030 !important;\n}\n.dark-mode .mat-checkbox-mixedmark {\n background-color: #303030;\n}\n.dark-mode .mat-checkbox-indeterminate.mat-primary .mat-checkbox-background, .dark-mode .mat-checkbox-checked.mat-primary .mat-checkbox-background {\n background-color: #00bcd4;\n}\n.dark-mode .mat-checkbox-indeterminate.mat-accent .mat-checkbox-background, .dark-mode .mat-checkbox-checked.mat-accent .mat-checkbox-background {\n background-color: #2979ff;\n}\n.dark-mode .mat-checkbox-indeterminate.mat-warn .mat-checkbox-background, .dark-mode .mat-checkbox-checked.mat-warn .mat-checkbox-background {\n background-color: #f44336;\n}\n.dark-mode .mat-checkbox-disabled.mat-checkbox-checked .mat-checkbox-background, .dark-mode .mat-checkbox-disabled.mat-checkbox-indeterminate .mat-checkbox-background {\n background-color: #686868;\n}\n.dark-mode .mat-checkbox-disabled:not(.mat-checkbox-checked) .mat-checkbox-frame {\n border-color: #686868;\n}\n.dark-mode .mat-checkbox-disabled .mat-checkbox-label {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-checkbox .mat-ripple-element {\n background-color: white;\n}\n.dark-mode .mat-checkbox-checked:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element,\n.dark-mode .mat-checkbox:active:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element {\n background: #00bcd4;\n}\n.dark-mode .mat-checkbox-checked:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element,\n.dark-mode .mat-checkbox:active:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element {\n background: #2979ff;\n}\n.dark-mode .mat-checkbox-checked:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element,\n.dark-mode .mat-checkbox:active:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element {\n background: #f44336;\n}\n.dark-mode .mat-chip.mat-standard-chip {\n background-color: #616161;\n color: white;\n}\n.dark-mode .mat-chip.mat-standard-chip .mat-chip-remove {\n color: white;\n opacity: 0.4;\n}\n.dark-mode .mat-chip.mat-standard-chip:not(.mat-chip-disabled):active {\n box-shadow: 0px 3px 3px -2px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 0, 0, 0.14), 0px 1px 8px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-chip.mat-standard-chip:not(.mat-chip-disabled) .mat-chip-remove:hover {\n opacity: 0.54;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-disabled {\n opacity: 0.4;\n}\n.dark-mode .mat-chip.mat-standard-chip::after {\n background: white;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-primary {\n background-color: #00bcd4;\n color: white;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-chip-remove {\n color: white;\n opacity: 0.4;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-warn {\n background-color: #f44336;\n color: white;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-chip-remove {\n color: white;\n opacity: 0.4;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-accent {\n background-color: #2979ff;\n color: white;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-chip-remove {\n color: white;\n opacity: 0.4;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-table {\n background: #424242;\n}\n.dark-mode .mat-table thead, .dark-mode .mat-table tbody, .dark-mode .mat-table tfoot,\n.dark-mode mat-header-row, .dark-mode mat-row, .dark-mode mat-footer-row,\n.dark-mode [mat-header-row], .dark-mode [mat-row], .dark-mode [mat-footer-row],\n.dark-mode .mat-table-sticky {\n background: inherit;\n}\n.dark-mode mat-row, .dark-mode mat-header-row, .dark-mode mat-footer-row,\n.dark-mode th.mat-header-cell, .dark-mode td.mat-cell, .dark-mode td.mat-footer-cell {\n border-bottom-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-header-cell {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-cell, .dark-mode .mat-footer-cell {\n color: white;\n}\n.dark-mode .mat-calendar-arrow {\n border-top-color: white;\n}\n.dark-mode .mat-datepicker-toggle,\n.dark-mode .mat-datepicker-content .mat-calendar-next-button,\n.dark-mode .mat-datepicker-content .mat-calendar-previous-button {\n color: white;\n}\n.dark-mode .mat-calendar-table-header {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-calendar-table-header-divider::after {\n background: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-calendar-body-label {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-calendar-body-cell-content {\n color: white;\n border-color: transparent;\n}\n.dark-mode .mat-calendar-body-disabled > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected),\n.dark-mode .cdk-keyboard-focused .mat-calendar-body-active > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected),\n.dark-mode .cdk-program-focused .mat-calendar-body-active > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\n background-color: rgba(255, 255, 255, 0.04);\n}\n.dark-mode .mat-calendar-body-today:not(.mat-calendar-body-selected) {\n border-color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-calendar-body-disabled > .mat-calendar-body-today:not(.mat-calendar-body-selected) {\n border-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-calendar-body-selected {\n background-color: #00bcd4;\n color: white;\n}\n.dark-mode .mat-calendar-body-disabled > .mat-calendar-body-selected {\n background-color: rgba(0, 188, 212, 0.4);\n}\n.dark-mode .mat-calendar-body-today.mat-calendar-body-selected {\n box-shadow: inset 0 0 0 1px white;\n}\n.dark-mode .mat-datepicker-content {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n background-color: #424242;\n color: white;\n}\n.dark-mode .mat-datepicker-content.mat-accent .mat-calendar-body-selected {\n background-color: #2979ff;\n color: white;\n}\n.dark-mode .mat-datepicker-content.mat-accent .mat-calendar-body-disabled > .mat-calendar-body-selected {\n background-color: rgba(41, 121, 255, 0.4);\n}\n.dark-mode .mat-datepicker-content.mat-accent .mat-calendar-body-today.mat-calendar-body-selected {\n box-shadow: inset 0 0 0 1px white;\n}\n.dark-mode .mat-datepicker-content.mat-warn .mat-calendar-body-selected {\n background-color: #f44336;\n color: white;\n}\n.dark-mode .mat-datepicker-content.mat-warn .mat-calendar-body-disabled > .mat-calendar-body-selected {\n background-color: rgba(244, 67, 54, 0.4);\n}\n.dark-mode .mat-datepicker-content.mat-warn .mat-calendar-body-today.mat-calendar-body-selected {\n box-shadow: inset 0 0 0 1px white;\n}\n.dark-mode .mat-datepicker-content-touch {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-datepicker-toggle-active {\n color: #00bcd4;\n}\n.dark-mode .mat-datepicker-toggle-active.mat-accent {\n color: #2979ff;\n}\n.dark-mode .mat-datepicker-toggle-active.mat-warn {\n color: #f44336;\n}\n.dark-mode .mat-dialog-container {\n box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12);\n background: #424242;\n color: white;\n}\n.dark-mode .mat-divider {\n border-top-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-divider-vertical {\n border-right-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-expansion-panel {\n background: #424242;\n color: white;\n}\n.dark-mode .mat-expansion-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-action-row {\n border-top-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-expansion-panel .mat-expansion-panel-header.cdk-keyboard-focused:not([aria-disabled=true]), .dark-mode .mat-expansion-panel .mat-expansion-panel-header.cdk-program-focused:not([aria-disabled=true]), .dark-mode .mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover:not([aria-disabled=true]) {\n background: rgba(255, 255, 255, 0.04);\n}\n@media (hover: none) {\n .dark-mode .mat-expansion-panel:not(.mat-expanded):not([aria-disabled=true]) .mat-expansion-panel-header:hover {\n background: #424242;\n }\n}\n.dark-mode .mat-expansion-panel-header-title {\n color: white;\n}\n.dark-mode .mat-expansion-panel-header-description,\n.dark-mode .mat-expansion-indicator::after {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-expansion-panel-header[aria-disabled=true] {\n color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title,\n.dark-mode .mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description {\n color: inherit;\n}\n.dark-mode .mat-form-field-label {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-hint {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-form-field.mat-focused .mat-form-field-label {\n color: #00bcd4;\n}\n.dark-mode .mat-form-field.mat-focused .mat-form-field-label.mat-accent {\n color: #2979ff;\n}\n.dark-mode .mat-form-field.mat-focused .mat-form-field-label.mat-warn {\n color: #f44336;\n}\n.dark-mode .mat-focused .mat-form-field-required-marker {\n color: #2979ff;\n}\n.dark-mode .mat-form-field-ripple {\n background-color: white;\n}\n.dark-mode .mat-form-field.mat-focused .mat-form-field-ripple {\n background-color: #00bcd4;\n}\n.dark-mode .mat-form-field.mat-focused .mat-form-field-ripple.mat-accent {\n background-color: #2979ff;\n}\n.dark-mode .mat-form-field.mat-focused .mat-form-field-ripple.mat-warn {\n background-color: #f44336;\n}\n.dark-mode .mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid) .mat-form-field-infix::after {\n color: #00bcd4;\n}\n.dark-mode .mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-accent .mat-form-field-infix::after {\n color: #2979ff;\n}\n.dark-mode .mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-warn .mat-form-field-infix::after {\n color: #f44336;\n}\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-label {\n color: #f44336;\n}\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-label.mat-accent,\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-label .mat-form-field-required-marker {\n color: #f44336;\n}\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-ripple,\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-ripple.mat-accent {\n background-color: #f44336;\n}\n.dark-mode .mat-error {\n color: #f44336;\n}\n.dark-mode .mat-form-field-appearance-legacy .mat-form-field-label {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-form-field-appearance-legacy .mat-hint {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-form-field-appearance-legacy .mat-form-field-underline {\n background-color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline {\n background-image: linear-gradient(to right, rgba(255, 255, 255, 0.7) 0%, rgba(255, 255, 255, 0.7) 33%, transparent 0%);\n background-size: 4px 100%;\n background-repeat: repeat-x;\n}\n.dark-mode .mat-form-field-appearance-standard .mat-form-field-underline {\n background-color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline {\n background-image: linear-gradient(to right, rgba(255, 255, 255, 0.7) 0%, rgba(255, 255, 255, 0.7) 33%, transparent 0%);\n background-size: 4px 100%;\n background-repeat: repeat-x;\n}\n.dark-mode .mat-form-field-appearance-fill .mat-form-field-flex {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-flex {\n background-color: rgba(255, 255, 255, 0.05);\n}\n.dark-mode .mat-form-field-appearance-fill .mat-form-field-underline::before {\n background-color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-label {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-underline::before {\n background-color: transparent;\n}\n.dark-mode .mat-form-field-appearance-outline .mat-form-field-outline {\n color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-form-field-appearance-outline .mat-form-field-outline-thick {\n color: white;\n}\n.dark-mode .mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick {\n color: #00bcd4;\n}\n.dark-mode .mat-form-field-appearance-outline.mat-focused.mat-accent .mat-form-field-outline-thick {\n color: #2979ff;\n}\n.dark-mode .mat-form-field-appearance-outline.mat-focused.mat-warn .mat-form-field-outline-thick {\n color: #f44336;\n}\n.dark-mode .mat-form-field-appearance-outline.mat-form-field-invalid.mat-form-field-invalid .mat-form-field-outline-thick {\n color: #f44336;\n}\n.dark-mode .mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-label {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline {\n color: rgba(255, 255, 255, 0.15);\n}\n.dark-mode .mat-icon.mat-primary {\n color: #00bcd4;\n}\n.dark-mode .mat-icon.mat-accent {\n color: #2979ff;\n}\n.dark-mode .mat-icon.mat-warn {\n color: #f44336;\n}\n.dark-mode .mat-form-field-type-mat-native-select .mat-form-field-infix::after {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-input-element:disabled,\n.dark-mode .mat-form-field-type-mat-native-select.mat-form-field-disabled .mat-form-field-infix::after {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-input-element {\n caret-color: #00bcd4;\n}\n.dark-mode .mat-input-element::-moz-placeholder {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-input-element::placeholder {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-input-element::-moz-placeholder {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-input-element::-webkit-input-placeholder {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-input-element:-ms-input-placeholder {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-input-element option {\n color: rgba(0, 0, 0, 0.87);\n}\n.dark-mode .mat-input-element option:disabled {\n color: rgba(0, 0, 0, 0.38);\n}\n.dark-mode .mat-accent .mat-input-element {\n caret-color: #2979ff;\n}\n.dark-mode .mat-warn .mat-input-element,\n.dark-mode .mat-form-field-invalid .mat-input-element {\n caret-color: #f44336;\n}\n.dark-mode .mat-form-field-type-mat-native-select.mat-form-field-invalid .mat-form-field-infix::after {\n color: #f44336;\n}\n.dark-mode .mat-list-base .mat-list-item {\n color: white;\n}\n.dark-mode .mat-list-base .mat-list-option {\n color: white;\n}\n.dark-mode .mat-list-base .mat-subheader {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-list-item-disabled {\n background-color: black;\n}\n.dark-mode .mat-list-option:hover, .dark-mode .mat-list-option:focus,\n.dark-mode .mat-nav-list .mat-list-item:hover,\n.dark-mode .mat-nav-list .mat-list-item:focus,\n.dark-mode .mat-action-list .mat-list-item:hover,\n.dark-mode .mat-action-list .mat-list-item:focus {\n background: rgba(255, 255, 255, 0.04);\n}\n.dark-mode .mat-list-single-selected-option, .dark-mode .mat-list-single-selected-option:hover, .dark-mode .mat-list-single-selected-option:focus {\n background: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-menu-panel {\n background: #424242;\n}\n.dark-mode .mat-menu-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-menu-item {\n background: transparent;\n color: white;\n}\n.dark-mode .mat-menu-item[disabled], .dark-mode .mat-menu-item[disabled]::after {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-menu-item .mat-icon-no-color,\n.dark-mode .mat-menu-item-submenu-trigger::after {\n color: white;\n}\n.dark-mode .mat-menu-item:hover:not([disabled]),\n.dark-mode .mat-menu-item.cdk-program-focused:not([disabled]),\n.dark-mode .mat-menu-item.cdk-keyboard-focused:not([disabled]),\n.dark-mode .mat-menu-item-highlighted:not([disabled]) {\n background: rgba(255, 255, 255, 0.04);\n}\n.dark-mode .mat-paginator {\n background: #424242;\n}\n.dark-mode .mat-paginator,\n.dark-mode .mat-paginator-page-size .mat-select-trigger {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-paginator-decrement,\n.dark-mode .mat-paginator-increment {\n border-top: 2px solid white;\n border-right: 2px solid white;\n}\n.dark-mode .mat-paginator-first,\n.dark-mode .mat-paginator-last {\n border-top: 2px solid white;\n}\n.dark-mode .mat-icon-button[disabled] .mat-paginator-decrement,\n.dark-mode .mat-icon-button[disabled] .mat-paginator-increment,\n.dark-mode .mat-icon-button[disabled] .mat-paginator-first,\n.dark-mode .mat-icon-button[disabled] .mat-paginator-last {\n border-color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-progress-bar-background {\n fill: #b2ebf2;\n}\n.dark-mode .mat-progress-bar-buffer {\n background-color: #b2ebf2;\n}\n.dark-mode .mat-progress-bar-fill::after {\n background-color: #00bcd4;\n}\n.dark-mode .mat-progress-bar.mat-accent .mat-progress-bar-background {\n fill: #82b1ff;\n}\n.dark-mode .mat-progress-bar.mat-accent .mat-progress-bar-buffer {\n background-color: #82b1ff;\n}\n.dark-mode .mat-progress-bar.mat-accent .mat-progress-bar-fill::after {\n background-color: #2979ff;\n}\n.dark-mode .mat-progress-bar.mat-warn .mat-progress-bar-background {\n fill: #ffcdd2;\n}\n.dark-mode .mat-progress-bar.mat-warn .mat-progress-bar-buffer {\n background-color: #ffcdd2;\n}\n.dark-mode .mat-progress-bar.mat-warn .mat-progress-bar-fill::after {\n background-color: #f44336;\n}\n.dark-mode .mat-progress-spinner circle, .dark-mode .mat-spinner circle {\n stroke: #00bcd4;\n}\n.dark-mode .mat-progress-spinner.mat-accent circle, .dark-mode .mat-spinner.mat-accent circle {\n stroke: #2979ff;\n}\n.dark-mode .mat-progress-spinner.mat-warn circle, .dark-mode .mat-spinner.mat-warn circle {\n stroke: #f44336;\n}\n.dark-mode .mat-radio-outer-circle {\n border-color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-radio-button.mat-primary.mat-radio-checked .mat-radio-outer-circle {\n border-color: #00bcd4;\n}\n.dark-mode .mat-radio-button.mat-primary .mat-radio-inner-circle,\n.dark-mode .mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .dark-mode .mat-radio-button.mat-primary.mat-radio-checked .mat-radio-persistent-ripple, .dark-mode .mat-radio-button.mat-primary:active .mat-radio-persistent-ripple {\n background-color: #00bcd4;\n}\n.dark-mode .mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle {\n border-color: #2979ff;\n}\n.dark-mode .mat-radio-button.mat-accent .mat-radio-inner-circle,\n.dark-mode .mat-radio-button.mat-accent .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .dark-mode .mat-radio-button.mat-accent.mat-radio-checked .mat-radio-persistent-ripple, .dark-mode .mat-radio-button.mat-accent:active .mat-radio-persistent-ripple {\n background-color: #2979ff;\n}\n.dark-mode .mat-radio-button.mat-warn.mat-radio-checked .mat-radio-outer-circle {\n border-color: #f44336;\n}\n.dark-mode .mat-radio-button.mat-warn .mat-radio-inner-circle,\n.dark-mode .mat-radio-button.mat-warn .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .dark-mode .mat-radio-button.mat-warn.mat-radio-checked .mat-radio-persistent-ripple, .dark-mode .mat-radio-button.mat-warn:active .mat-radio-persistent-ripple {\n background-color: #f44336;\n}\n.dark-mode .mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-outer-circle,\n.dark-mode .mat-radio-button.mat-radio-disabled .mat-radio-outer-circle {\n border-color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-radio-button.mat-radio-disabled .mat-radio-ripple .mat-ripple-element,\n.dark-mode .mat-radio-button.mat-radio-disabled .mat-radio-inner-circle {\n background-color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-radio-button.mat-radio-disabled .mat-radio-label-content {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-radio-button .mat-ripple-element {\n background-color: white;\n}\n.dark-mode .mat-select-value {\n color: white;\n}\n.dark-mode .mat-select-placeholder {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-select-disabled .mat-select-value {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-select-arrow {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-select-panel {\n background: #424242;\n}\n.dark-mode .mat-select-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-select-panel .mat-option.mat-selected:not(.mat-option-multiple) {\n background: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-form-field.mat-focused.mat-primary .mat-select-arrow {\n color: #00bcd4;\n}\n.dark-mode .mat-form-field.mat-focused.mat-accent .mat-select-arrow {\n color: #2979ff;\n}\n.dark-mode .mat-form-field.mat-focused.mat-warn .mat-select-arrow {\n color: #f44336;\n}\n.dark-mode .mat-form-field .mat-select.mat-select-invalid .mat-select-arrow {\n color: #f44336;\n}\n.dark-mode .mat-form-field .mat-select.mat-select-disabled .mat-select-arrow {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-drawer-container {\n background-color: #303030;\n color: white;\n}\n.dark-mode .mat-drawer {\n background-color: #424242;\n color: white;\n}\n.dark-mode .mat-drawer.mat-drawer-push {\n background-color: #424242;\n}\n.dark-mode .mat-drawer:not(.mat-drawer-side) {\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-drawer-side {\n border-right: solid 1px rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-drawer-side.mat-drawer-end {\n border-left: solid 1px rgba(255, 255, 255, 0.12);\n border-right: none;\n}\n.dark-mode [dir=rtl] .mat-drawer-side {\n border-left: solid 1px rgba(255, 255, 255, 0.12);\n border-right: none;\n}\n.dark-mode [dir=rtl] .mat-drawer-side.mat-drawer-end {\n border-left: none;\n border-right: solid 1px rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-drawer-backdrop.mat-drawer-shown {\n background-color: rgba(189, 189, 189, 0.6);\n}\n.dark-mode .mat-slide-toggle.mat-checked .mat-slide-toggle-thumb {\n background-color: #2979ff;\n}\n.dark-mode .mat-slide-toggle.mat-checked .mat-slide-toggle-bar {\n background-color: rgba(41, 121, 255, 0.54);\n}\n.dark-mode .mat-slide-toggle.mat-checked .mat-ripple-element {\n background-color: #2979ff;\n}\n.dark-mode .mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-thumb {\n background-color: #00bcd4;\n}\n.dark-mode .mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-bar {\n background-color: rgba(0, 188, 212, 0.54);\n}\n.dark-mode .mat-slide-toggle.mat-primary.mat-checked .mat-ripple-element {\n background-color: #00bcd4;\n}\n.dark-mode .mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-thumb {\n background-color: #f44336;\n}\n.dark-mode .mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-bar {\n background-color: rgba(244, 67, 54, 0.54);\n}\n.dark-mode .mat-slide-toggle.mat-warn.mat-checked .mat-ripple-element {\n background-color: #f44336;\n}\n.dark-mode .mat-slide-toggle:not(.mat-checked) .mat-ripple-element {\n background-color: white;\n}\n.dark-mode .mat-slide-toggle-thumb {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n background-color: #bdbdbd;\n}\n.dark-mode .mat-slide-toggle-bar {\n background-color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-slider-track-background {\n background-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-primary .mat-slider-track-fill,\n.dark-mode .mat-primary .mat-slider-thumb,\n.dark-mode .mat-primary .mat-slider-thumb-label {\n background-color: #00bcd4;\n}\n.dark-mode .mat-primary .mat-slider-thumb-label-text {\n color: white;\n}\n.dark-mode .mat-accent .mat-slider-track-fill,\n.dark-mode .mat-accent .mat-slider-thumb,\n.dark-mode .mat-accent .mat-slider-thumb-label {\n background-color: #2979ff;\n}\n.dark-mode .mat-accent .mat-slider-thumb-label-text {\n color: white;\n}\n.dark-mode .mat-warn .mat-slider-track-fill,\n.dark-mode .mat-warn .mat-slider-thumb,\n.dark-mode .mat-warn .mat-slider-thumb-label {\n background-color: #f44336;\n}\n.dark-mode .mat-warn .mat-slider-thumb-label-text {\n color: white;\n}\n.dark-mode .mat-slider-focus-ring {\n background-color: rgba(41, 121, 255, 0.2);\n}\n.dark-mode .mat-slider:hover .mat-slider-track-background,\n.dark-mode .cdk-focused .mat-slider-track-background {\n background-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-slider-disabled .mat-slider-track-background,\n.dark-mode .mat-slider-disabled .mat-slider-track-fill,\n.dark-mode .mat-slider-disabled .mat-slider-thumb {\n background-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-slider-disabled:hover .mat-slider-track-background {\n background-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-slider-min-value .mat-slider-focus-ring {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb,\n.dark-mode .mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb-label {\n background-color: white;\n}\n.dark-mode .mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb,\n.dark-mode .mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb-label {\n background-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing) .mat-slider-thumb {\n border-color: rgba(255, 255, 255, 0.3);\n background-color: transparent;\n}\n.dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover .mat-slider-thumb, .dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused .mat-slider-thumb {\n border-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover.mat-slider-disabled .mat-slider-thumb, .dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused.mat-slider-disabled .mat-slider-thumb {\n border-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-slider-has-ticks .mat-slider-wrapper::after {\n border-color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-slider-horizontal .mat-slider-ticks {\n background-image: repeating-linear-gradient(to right, rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0.7) 2px, transparent 0, transparent);\n background-image: -moz-repeating-linear-gradient(0.0001deg, rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0.7) 2px, transparent 0, transparent);\n}\n.dark-mode .mat-slider-vertical .mat-slider-ticks {\n background-image: repeating-linear-gradient(to bottom, rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0.7) 2px, transparent 0, transparent);\n}\n.dark-mode .mat-step-header.cdk-keyboard-focused, .dark-mode .mat-step-header.cdk-program-focused, .dark-mode .mat-step-header:hover {\n background-color: rgba(255, 255, 255, 0.04);\n}\n@media (hover: none) {\n .dark-mode .mat-step-header:hover {\n background: none;\n }\n}\n.dark-mode .mat-step-header .mat-step-label,\n.dark-mode .mat-step-header .mat-step-optional {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-step-header .mat-step-icon {\n background-color: rgba(255, 255, 255, 0.7);\n color: white;\n}\n.dark-mode .mat-step-header .mat-step-icon-selected,\n.dark-mode .mat-step-header .mat-step-icon-state-done,\n.dark-mode .mat-step-header .mat-step-icon-state-edit {\n background-color: #00bcd4;\n color: white;\n}\n.dark-mode .mat-step-header .mat-step-icon-state-error {\n background-color: transparent;\n color: #f44336;\n}\n.dark-mode .mat-step-header .mat-step-label.mat-step-label-active {\n color: white;\n}\n.dark-mode .mat-step-header .mat-step-label.mat-step-label-error {\n color: #f44336;\n}\n.dark-mode .mat-stepper-horizontal, .dark-mode .mat-stepper-vertical {\n background-color: #424242;\n}\n.dark-mode .mat-stepper-vertical-line::before {\n border-left-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-horizontal-stepper-header::before,\n.dark-mode .mat-horizontal-stepper-header::after,\n.dark-mode .mat-stepper-horizontal-line {\n border-top-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-sort-header-arrow {\n color: #c6c6c6;\n}\n.dark-mode .mat-tab-nav-bar,\n.dark-mode .mat-tab-header {\n border-bottom: 1px solid rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-tab-group-inverted-header .mat-tab-nav-bar,\n.dark-mode .mat-tab-group-inverted-header .mat-tab-header {\n border-top: 1px solid rgba(255, 255, 255, 0.12);\n border-bottom: none;\n}\n.dark-mode .mat-tab-label, .dark-mode .mat-tab-link {\n color: white;\n}\n.dark-mode .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-link.mat-tab-disabled {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-tab-header-pagination-chevron {\n border-color: white;\n}\n.dark-mode .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-tab-group[class*=mat-background-] .mat-tab-header,\n.dark-mode .mat-tab-nav-bar[class*=mat-background-] {\n border-bottom: none;\n border-top: none;\n}\n.dark-mode .mat-tab-group.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(178, 235, 242, 0.3);\n}\n.dark-mode .mat-tab-group.mat-primary .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-primary .mat-ink-bar {\n background-color: #00bcd4;\n}\n.dark-mode .mat-tab-group.mat-primary.mat-background-primary .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-primary.mat-background-primary .mat-ink-bar {\n background-color: white;\n}\n.dark-mode .mat-tab-group.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(130, 177, 255, 0.3);\n}\n.dark-mode .mat-tab-group.mat-accent .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-accent .mat-ink-bar {\n background-color: #2979ff;\n}\n.dark-mode .mat-tab-group.mat-accent.mat-background-accent .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-accent.mat-background-accent .mat-ink-bar {\n background-color: white;\n}\n.dark-mode .mat-tab-group.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(255, 205, 210, 0.3);\n}\n.dark-mode .mat-tab-group.mat-warn .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-warn .mat-ink-bar {\n background-color: #f44336;\n}\n.dark-mode .mat-tab-group.mat-warn.mat-background-warn .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-warn.mat-background-warn .mat-ink-bar {\n background-color: white;\n}\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(178, 235, 242, 0.3);\n}\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-header, .dark-mode .mat-tab-group.mat-background-primary .mat-tab-links, .dark-mode .mat-tab-group.mat-background-primary .mat-tab-header-pagination, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-header, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-links, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination {\n background-color: #00bcd4;\n}\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-label, .dark-mode .mat-tab-group.mat-background-primary .mat-tab-link, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-label, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-link {\n color: white;\n}\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-group.mat-background-primary .mat-tab-link.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-link.mat-tab-disabled {\n color: rgba(255, 255, 255, 0.4);\n}\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-chevron {\n border-color: white;\n}\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(255, 255, 255, 0.4);\n}\n.dark-mode .mat-tab-group.mat-background-primary .mat-ripple-element, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(130, 177, 255, 0.3);\n}\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-header, .dark-mode .mat-tab-group.mat-background-accent .mat-tab-links, .dark-mode .mat-tab-group.mat-background-accent .mat-tab-header-pagination, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-header, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-links, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination {\n background-color: #2979ff;\n}\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-label, .dark-mode .mat-tab-group.mat-background-accent .mat-tab-link, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-label, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-link {\n color: white;\n}\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-group.mat-background-accent .mat-tab-link.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-link.mat-tab-disabled {\n color: rgba(255, 255, 255, 0.4);\n}\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-chevron {\n border-color: white;\n}\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(255, 255, 255, 0.4);\n}\n.dark-mode .mat-tab-group.mat-background-accent .mat-ripple-element, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(255, 205, 210, 0.3);\n}\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-header, .dark-mode .mat-tab-group.mat-background-warn .mat-tab-links, .dark-mode .mat-tab-group.mat-background-warn .mat-tab-header-pagination, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-header, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-links, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination {\n background-color: #f44336;\n}\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-label, .dark-mode .mat-tab-group.mat-background-warn .mat-tab-link, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-label, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-link {\n color: white;\n}\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-group.mat-background-warn .mat-tab-link.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-link.mat-tab-disabled {\n color: rgba(255, 255, 255, 0.4);\n}\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-chevron {\n border-color: white;\n}\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(255, 255, 255, 0.4);\n}\n.dark-mode .mat-tab-group.mat-background-warn .mat-ripple-element, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-toolbar {\n background: #212121;\n color: white;\n}\n.dark-mode .mat-toolbar.mat-primary {\n background: #00bcd4;\n color: white;\n}\n.dark-mode .mat-toolbar.mat-accent {\n background: #2979ff;\n color: white;\n}\n.dark-mode .mat-toolbar.mat-warn {\n background: #f44336;\n color: white;\n}\n.dark-mode .mat-toolbar .mat-form-field-underline,\n.dark-mode .mat-toolbar .mat-form-field-ripple,\n.dark-mode .mat-toolbar .mat-focused .mat-form-field-ripple {\n background-color: currentColor;\n}\n.dark-mode .mat-toolbar .mat-form-field-label,\n.dark-mode .mat-toolbar .mat-focused .mat-form-field-label,\n.dark-mode .mat-toolbar .mat-select-value,\n.dark-mode .mat-toolbar .mat-select-arrow,\n.dark-mode .mat-toolbar .mat-form-field.mat-focused .mat-select-arrow {\n color: inherit;\n}\n.dark-mode .mat-toolbar .mat-input-element {\n caret-color: currentColor;\n}\n.dark-mode .mat-tooltip {\n background: rgba(97, 97, 97, 0.9);\n}\n.dark-mode .mat-tree {\n background: #424242;\n}\n.dark-mode .mat-tree-node,\n.dark-mode .mat-nested-tree-node {\n color: white;\n}\n.dark-mode .mat-snack-bar-container {\n color: rgba(0, 0, 0, 0.87);\n background: #fafafa;\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-simple-snackbar-action {\n color: inherit;\n}\n.mat-stroked-button.mat-black {\n border: solid black 1px;\n border-radius: 0;\n display: flex;\n align-items: center;\n height: 2em;\n padding-left: 2.5em;\n padding-right: 2.5em;\n}\n.mat-stroked-button.mat-black .mat-button-wrapper {\n font-weight: normal;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n color: black;\n}\n.mat-stroked-button.mat-coachmark {\n border: solid #6f4d00 1px;\n border-radius: 0;\n display: flex;\n align-items: center;\n height: 2em;\n padding-left: 2.5em;\n padding-right: 2.5em;\n}\n.mat-stroked-button.mat-coachmark .mat-button-wrapper {\n font-weight: normal;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n color: #6f4d00;\n}\n.mat-stroked-button.mat-blue-coachmark {\n border: solid #1B1B19 1px;\n border-radius: 0;\n display: flex;\n align-items: center;\n height: 2em;\n padding-left: 2.5em;\n padding-right: 2.5em;\n}\n.mat-stroked-button.mat-blue-coachmark .mat-button-wrapper {\n font-weight: normal;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n color: #1B1B19;\n}\nhtml,\nbody {\n height: 100%;\n width: 100%;\n}\nbody {\n background-color: #fff;\n}\n.app,\nbody {\n font-family: \"Helvetica Neue\", \"Helvetica\", Arial, sans-serif;\n font-weight: 300;\n}\n.app {\n position: absolute;\n}\nhtml,\nbody {\n margin: 0;\n padding: 0;\n font-size: 16px;\n}\n.app {\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n}\n* {\n font-family: \"Helvetica Neue\", \"Helvetica\", Arial, sans-serif;\n box-sizing: border-box;\n}\n.center {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n margin: auto;\n}\n.loading {\n display: inline-block;\n padding: 1.5em;\n border-radius: 1em;\n color: #000;\n font-size: 10mm;\n text-align: center;\n}\n.bounce,\n.bounce .circle,\n.bounce .circle .inner {\n height: 4em;\n width: 4em;\n border-radius: 100%;\n}\n.bounce .circle {\n -webkit-animation: sk-scaleout 0.8s infinite ease-in-out;\n animation: sk-scaleout 0.8s infinite ease-in-out;\n}\n.bounce .circle .inner {\n background-color: #000;\n}\n@-webkit-keyframes sk-scaleout {\n 0% {\n -webkit-transform: scale(0);\n }\n 20% {\n opacity: 1;\n }\n 100% {\n -webkit-transform: scale(1);\n opacity: 0;\n }\n}\n@keyframes sk-scaleout {\n 0% {\n transform: scale(0);\n }\n 20% {\n opacity: 1;\n }\n 100% {\n transform: scale(1);\n opacity: 0;\n }\n}\n.no-script {\n height: 10em;\n width: 15em;\n padding: 0.5em 1em;\n background-color: #FFF;\n border-radius: 0.1em;\n box-shadow: 0 0.1em 0.2em 0.1em rgba(0, 0, 0, 0.2);\n text-align: center;\n position: absolute;\n top: 1em;\n left: 50%;\n transform: translateX(-50%);\n}\n.no-script img {\n border-radius: 0.2em;\n height: 6em;\n width: 6em;\n}\n.no-script .title {\n padding: 0 1em;\n font-style: italic;\n font-size: 1.2em;\n}\n.no-script .content {\n display: flex;\n}\n.aca-coin {\n position: relative;\n height: 4em;\n width: 4em;\n padding: 0.5em;\n margin: 0.5em;\n border-radius: 100%;\n background-color: #dd3d5e;\n -webkit-animation: coin-spin 2s infinite ease-in-out;\n animation: coin-spin 2s infinite ease-in-out;\n}\n.aca-logo {\n height: 3em;\n width: 3em;\n background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDIwMDEwOTA0Ly9FTiIKICJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy1TVkctMjAwMTA5MDQvRFREL3N2ZzEwLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4wIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiB3aWR0aD0iNzc5LjAwMDAwMHB0IiBoZWlnaHQ9IjMyNC4wMDAwMDBwdCIgdmlld0JveD0iMCAwIDc3OS4wMDAwMDAgMzI0LjAwMDAwMCIKIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiPgo8bWV0YWRhdGE+CkNyZWF0ZWQgYnkgcG90cmFjZSAxLjE0LCB3cml0dGVuIGJ5IFBldGVyIFNlbGluZ2VyIDIwMDEtMjAxNwo8L21ldGFkYXRhPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjAwMDAwMCwzMjQuMDAwMDAwKSBzY2FsZSgwLjEwMDAwMCwtMC4xMDAwMDApIgpmaWxsPSIjZmZmIiBzdHJva2U9Im5vbmUiPgo8cGF0aCBkPSJNNDAwNSAzMjI4IGMtNDQ3IC0yNSAtODM5IC0yMzUgLTExMDkgLTU5NiAtMzE5IC00MjYgLTQxMSAtMTE0NQotMjE2IC0xNjk3IDE2NyAtNDcxIDU0OSAtODAzIDEwMzcgLTkwMiAxMTEgLTIzIDUwNSAtMjYgNjIzIC01IDEyNyAyMyAyODAgNjIKMzgyIDk5IGw5OCAzNSAwIDEwNSBjMCA5NiAtMiAxMDUgLTE3IDEwMCAtMTAgLTMgLTU3IC0yMiAtMTA2IC00MSAtMTkzIC04MAotMzczIC0xMTEgLTYzNyAtMTExIC0yNzQgMCAtNDAxIDI3IC01OTcgMTI5IC0xMTYgNjAgLTE5OSAxMjQgLTMwMyAyMzMgLTE3MgoxNzggLTI3NiAzODggLTMyNSA2NTYgLTM2IDE5NSAtMzYgNTA4IDAgNzAzIDEwMSA1NTUgNDY2IDk1MiA5ODIgMTA3MCA5MyAyMQo0MTUgMzAgNTI1IDE1IDEyNCAtMTggMjc2IC01NiAzNzkgLTk2IDUwIC0xOSA5MyAtMzUgOTUgLTM1IDIgMCA0IDUyIDQgMTE1CmwwIDExNCAtODcgMjcgYy0yMjggNjkgLTQ2OSA5NyAtNzI4IDgyeiIvPgo8cGF0aCBkPSJNNTkxIDE2MzMgYy0zMjEgLTg1MSAtNTg2IC0xNTU0IC01ODkgLTE1NjEgLTMgLTkgMjQgLTEyIDExNiAtMTIKbDEyMCAwIDYwIDE2MiBjMzMgOTAgMTEzIDMwOCAxNzggNDg2IGwxMTkgMzIyIDY3NSAwIDY3NSAwIDEwNCAtMjgyIGM1NyAtMTU2CjEzNyAtMzc0IDE3OCAtNDg2IGw3NSAtMjAyIDExOSAwIGM4OSAwIDExOSAzIDExOCAxMyAwIDYgLTI2MCA3MDcgLTU3NyAxNTU3CmwtNTc3IDE1NDUgLTEwNSAzIC0xMDYgMyAtNTgzIC0xNTQ4eiIvPgo8cGF0aCBkPSJNNjQwNSAzMTYzIGMtMzggLTk5IC0xMTU5IC0zMDcyIC0xMTYzIC0zMDg2IC00IC0xNSA2IC0xNyAxMTQgLTE3CmwxMTkgMCAxMDQgMjgzIGM1NyAxNTUgMTM3IDM3MyAxNzggNDg1IGw3NSAyMDIgNjc2IC0yIDY3NiAtMyAxNzYgLTQ4MCAxNzcKLTQ4MCAxMjIgLTMgMTIzIC0zIC04IDIzIGMtNCAxMiAtMjY0IDcxMyAtNTc5IDE1NTggbC01NzMgMTUzNSAtMTA1IDMgYy05MyAyCi0xMDUgMSAtMTEyIC0xNXoiLz4KPC9nPgo8L3N2Zz4K);\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n}\n@-webkit-keyframes coin-spin {\n 0% {\n transform: rotateY(0deg) translateY(0%);\n }\n 49% {\n transform: rotateY(179deg) translateY(20%);\n }\n 50% {\n transform: rotateY(181deg) translateY(20%);\n }\n 100% {\n transform: rotateY(359deg) translateY(0%);\n }\n}\n@keyframes coin-spin {\n 0% {\n transform: rotateY(0deg) translateY(0%);\n }\n 49% {\n transform: rotateY(179deg) translateY(20%);\n }\n 50% {\n transform: rotateY(181deg) translateY(20%);\n }\n 100% {\n transform: rotateY(359deg) translateY(0%);\n }\n}\n.shadow {\n position: absolute;\n bottom: 0;\n left: 50%;\n -webkit-animation: floating-shadow 2s infinite ease-in-out;\n animation: floating-shadow 2s infinite ease-in-out;\n width: 48px;\n height: 6px;\n background-color: rgba(0, 0, 0, 0.2);\n border-radius: 100%;\n}\n@-webkit-keyframes floating-shadow {\n 0% {\n transform: translateX(-50%) scale(1);\n }\n 45% {\n transform: translateX(-50%) scale(1.3);\n }\n 55% {\n transform: translateX(-50%) scale(1.3);\n }\n 100% {\n transform: translateX(-50%) scale(1);\n }\n}\n@keyframes floating-shadow {\n 0% {\n transform: translateX(-50%) scale(1);\n }\n 45% {\n transform: translateX(-50%) scale(1.3);\n }\n 55% {\n transform: translateX(-50%) scale(1.3);\n }\n 100% {\n transform: translateX(-50%) scale(1);\n }\n}\nhtml, body {\n height: 100%;\n}\nbody {\n margin: 0;\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.yellow-snackbar {\n background: #ffd149;\n color: rgba(0, 0, 0, 0.9);\n text-align: center;\n}\n.yellow-snackbar span {\n color: rgba(0, 0, 0, 0.9);\n}\n.sub app-map-controls > div mck-legend-dropdown {\n position: relative;\n top: -6px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .sub app-map-controls > div .map-info-button {\n display: none !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .sub app-map-controls > div .map-info-button {\n display: none !important;\n }\n}\n.mck-modal-backdrop {\n background-color: rgba(5, 28, 44, 0.85);\n}\n.pulsate {\n -webkit-animation: pulsate 2s ease-out;\n animation: pulsate 2s ease-out;\n -webkit-animation-iteration-count: infinite;\n animation-iteration-count: infinite;\n opacity: 0.3;\n}\n@-webkit-keyframes pulsate {\n 0% {\n opacity: 0.3;\n }\n 50% {\n opacity: 1;\n }\n 100% {\n opacity: 0.3;\n }\n}\n@keyframes pulsate {\n 0% {\n opacity: 0.3;\n }\n 50% {\n opacity: 1;\n }\n 100% {\n opacity: 0.3;\n }\n}\n.mat-form-field-invalid .mat-form-field-outline > div, .mat-form-field-invalid .mat-form-field-outline-thick > div {\n border-color: #f44336 !important;\n}\n.mck-toggle {\n position: relative;\n}\n.mck-toggle .mat-slide-toggle-thumb {\n height: 0.875rem;\n width: 0.875rem;\n border-radius: 50%;\n}\n.mck-toggle .mat-slide-toggle-thumb-container {\n top: 0.2rem;\n left: 0.2rem;\n}\n.mck-toggle .mat-slide-toggle-bar {\n position: relative;\n width: 2.5rem;\n height: 1.25rem;\n flex-shrink: 0;\n border-radius: 1.25rem;\n background-color: #d0d0d0;\n}\n.mck-toggle .mat-slide-toggle-bar .mat-slide-toggle-ripple {\n top: calc(50% - 23px);\n}\n.mck-toggle.mat-checked .mat-slide-toggle-thumb-container {\n left: 0.42rem;\n}\n.mck-toggle.mat-checked .mat-slide-toggle-thumb {\n background-color: white;\n}\n.mck-toggle.mat-checked .mat-slide-toggle-bar {\n background-color: #2152fe;\n}\n.mck-chevron-icon svg {\n transform: rotate(180deg);\n transition: transform 0.5s ease;\n}\n.mck-chevron-icon.turn-up svg {\n transform: rotate(0deg);\n}\n.mat-tab-label {\n padding: 0 6px 0 2px !important;\n min-width: auto !important;\n margin-right: 40px;\n font-family: \"McKinsey Sans\";\n font-size: 20px;\n font-weight: 400;\n color: #333333;\n opacity: 1 !important;\n}\n.mat-tab-label.mat-tab-label-active .mat-tab-label-content {\n color: #2251FF;\n}\n.mat-tab-label .mat-tab-label-content {\n color: #333333;\n padding-bottom: 20px;\n}\n.mat-tab-group.mat-primary .mat-ink-bar, .mat-tab-nav-bar.mat-primary .mat-ink-bar {\n background-color: #2251FF;\n height: 4px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-tab .mat-tab-header {\n transform: scale(0.65) !important;\n width: 100vw;\n display: block;\n position: relative;\n left: -19%;\n }\n .mck-tab .mat-tab-header .mat-tab-header-pagination {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-tab .mat-tab-header {\n transform: scale(0.65) !important;\n width: 100vw;\n display: block;\n position: relative;\n left: -19%;\n }\n .mck-tab .mat-tab-header .mat-tab-header-pagination {\n display: none;\n }\n}\n.status {\n background: #fff;\n color: #000;\n}\n.status.tentative, .status.pending, .status.requested {\n background: #FFF3CE;\n color: #6A4F00;\n}\n.status.accepted {\n background: #D1F4DD;\n color: #006200;\n}\n.status.approved {\n background: #D1F4DD;\n color: #006200;\n}\n.status.expired {\n background: #F0F0F0;\n color: #757575;\n}\n.status.declined, .status.cancelled {\n background: #FFE5EA;\n color: #B0001D;\n}\n.banner {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 26px;\n box-sizing: border-box;\n}\n.banner .banner-text {\n width: calc(100% - 50px);\n padding: 0 20px;\n box-sizing: border-box;\n font-weight: 500;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n margin: 0;\n text-align: left;\n}\n.banner img:last-child {\n cursor: pointer;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .banner {\n align-items: end;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .banner {\n align-items: end;\n }\n}\n.banner.advise {\n background-color: #EBEBF6;\n justify-content: start !important;\n border: 1px solid rgba(106, 79, 0, 0.11);\n}\n.banner.advise .banner-text {\n color: #1B1B19;\n}\n.banner.info {\n background-color: #E6ECFF;\n}\n.banner.info .banner-text {\n color: #1E32E6;\n}\n.banner.warning {\n background-color: #fdf1f3;\n}\n.banner.warning .banner-text {\n color: #B0001D;\n}\n.banner.fixed {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n z-index: 5;\n}\n.fullpage-modal {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 3;\n background-color: #f8f9fa;\n}\n.fullpage-modal .header {\n z-index: 1;\n}\n.coachmark {\n margin-top: 0;\n position: relative;\n top: -6px;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n line-height: 20px;\n color: #333333;\n}\n.bottom-panel-buttons {\n position: fixed;\n bottom: 0;\n width: 100%;\n min-height: 80px;\n background-color: white;\n border: 1px solid #E6E6E6;\n z-index: 1002;\n}\n.bottom-panel-buttons .buttons {\n padding: 24px 16px;\n border: none;\n background-color: transparent;\n max-width: 684px;\n margin: 0 auto;\n display: flex;\n}\n.bottom-panel-buttons .buttons button {\n flex: 1;\n height: 48px;\n font-size: 16px;\n max-width: 332px;\n}\n.bottom-panel-buttons .buttons button:nth-child(1) {\n margin-right: 5px;\n border: 1px solid #D0D0D0;\n}\n.bottom-panel-buttons .buttons button:nth-child(2) {\n margin-left: 5px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .bottom-panel-buttons .buttons {\n padding: 16px 0;\n }\n .bottom-panel-buttons .buttons button {\n margin: 0 16px;\n }\n .bottom-panel-buttons .buttons button:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel-buttons .buttons button:nth-child(2) {\n margin-left: 8px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .bottom-panel-buttons .buttons {\n padding: 16px 0;\n }\n .bottom-panel-buttons .buttons button {\n margin: 0 16px;\n }\n .bottom-panel-buttons .buttons button:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel-buttons .buttons button:nth-child(2) {\n margin-left: 8px;\n }\n}\n.modal_mask {\n width: 100vw;\n height: 100vh;\n position: fixed;\n top: 0;\n left: 0;\n background-color: white;\n z-index: 3;\n}", "",{"version":3,"sources":["styles.scss","/home/runner/work/mckinsey-converge/mckinsey-converge/node_modules/@angular/material/_theming.scss","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/styles/variables.scss","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/styles/mixins.scss","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/vars.scss","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/mixins.scss","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/styles.scss","/home/runner/work/mckinsey-converge/mckinsey-converge/apps/staff/src/calendar.scss","/home/runner/work/mckinsey-converge/mckinsey-converge/apps/staff/src/styles.scss"],"names":[],"mappings":"AAAA,gBAAgB;ACq5ChB,kCAAA;AAuiDA,2CAAA;AAwCA,qBAAA;AAl/BE;EACE,gBArLoB;EAsLpB,eAvLkB;EAwLlB,iDAAA;AD7+DJ;ACg/DE;EAEE,cAAA;AD9+DJ;ACi/DE;EACE,eAAA;AD9+DJ;ACmrDE;EA9NE,wDAAA;EAYF,sBAAA;EAoNE,gBAAA;AD/qDJ;ACkrDE;EAnOE,wDAAA;EAYF,sBAAA;EAyNE,gBAAA;AD9qDJ;ACirDE;EAxOE,wDAAA;EAYF,sBAAA;EA8NE,gBAAA;AD7qDJ;ACgrDE;EA7OE,wDAAA;EAYF,sBAAA;EAmOE,gBAAA;AD5qDJ;ACkrDE;EArPE,qEAAA;EA8PA,gBAAA;ADtrDJ;ACyrDE;EAjQE,qEAAA;EA0QA,gBAAA;AD7rDJ;ACgsDE;EA7QE,wDAAA;EAYF,sBAAA;AD17CF;AC+rDE;EAjRE,wDAAA;EAYF,sBAAA;ADr7CF;AC6rDI;EACE,gBAAA;AD3rDN;AC+rDE;EAzRE,wDAAA;EAYF,sBAAA;AD76CF;AC8rDE;EA7RE,0DAAA;EAYF,uBAAA;EAmRE,gBAAA;AD1rDJ;AC6rDE;EAlSE,wDAAA;EAYF,uBAAA;EAwRE,gBAAA;ADzrDJ;AC4rDE;EAvSE,wDAAA;EAYF,wBAAA;EA6RE,gBAAA;ADxrDJ;AC2rDE;EA5SE,wDAAA;EAYF,sBAAA;EAkSE,gBAAA;ADvrDJ;ACs7DE;EA7iBE,wDAAA;EAYF,sBAAA;ADh5CF;ACulEE;;EAGI,iDAAA;EACA,eAAA;EACA,gBAAA;ADrlEN;AC6qEE;EACE,iDAAA;AD1qEJ;ACysEE;EACE,iDAAA;ADtsEJ;ACysEE;EAEI,eAAA;EACA,gBAAA;ADvsEN;AC2sEE;EACE,eAAA;ADxsEJ;AC2sEE;;EAEE,eAAA;ADxsEJ;AC6yEE;EACE,iDAAA;AD1yEJ;AC8yEE;EACE,iBAAA;AD3yEJ;ACu4EE;EACE,eAAA;EACA,gBAAA;ADp4EJ;ACs4EI;;EAEE,eAzFsB;AD3yE5B;AC26EE;EACE,iDAAA;ADx6EJ;AC26EE;EACE,eAAA;EACA,gBAAA;ADx6EJ;AC26EE;EACE,eAAA;ADx6EJ;ACqjFE;EACE,iDAAA;ADljFJ;ACqjFE;EACE,eArI0B;AD76E9B;ACqjFE;;EAGI,eAAA;EACA,gBAAA;ADnjFN;ACujFE;EAEI,eAjJiC;EAkJjC,gBAAA;ADrjFN;AC4kFE;EAtxCE,wDAAA;EAYF,sBAAA;AD7zCF;ACsoFE;EAEI,iDAAA;EACA,eAAA;EACA,gBAAA;ADpoFN;ACwoFE;EA71CE,wDAAA;EAYF,sBAAA;ADlzCF;AC0kJE;EA7yGE,kBAeU;EAdV,gBAeY;EAdZ,kBAeY;EAdZ,iDAeY;EAGd,sBAAA;AD1yCF;ACskJE;EACE,yBAPuB;AD5jJ3B;ACykJI;;EACE,eAvB2B;EAwB3B,kBAtCU;AD/hJhB;ACykJI;;EACE,aAAA;EACA,YAAA;ADtkJN;ACwkJM;;EACE,eAAA;EACA,kBAhDQ;ADrhJhB;AC0kJE;EACE,gBAAA;EAEA,uCAAA;ADxkJJ;AC4kJI;;EArEF,6CAAA;EAEA,sBAAA;ADngJF;AC8kJI;EA7EF,6CAAA;EAEA,sBAAA;AD//IF;ACilJE;EACE,eAAA;EACA,sBAnEiB;AD3gJrB;ACilJE;EACE,cAAA;AD9kJJ;ACilJE;EAGE,iBAhEuB;ADhhJ3B;ACmlJE;EACE,cA/EoB;EAgFpB,0BAzEqB;EA6ErB,gCAAA;ADnlJJ;AC0oII;EACE,sBAJqB;ADnoI3B;AC0oII;EACE,mBAAA;ADxoIN;AC4oIM;;EAzDJ,oFAAA;EAIA,iDAAA;EAGA,sBAAA;ADplIF;AC6oIM;EAhEJ,sFAAA;EAIA,iDAAA;EAGA,sBAAA;AD/kIF;ACgpIM;EAxEJ,sFAAA;EAIA,iDAAA;EAGA,sBAAA;AD1kIF;ACkpII;EACE,cAAA;ADhpIN;ACmpII;EAGE,cAzCqB;AD1mI3B;ACspII;EACE,0BAjDmB;EAqDnB,gCAAA;ADvpIN;AC6pIE;EAGM;;IAvFN,6CAAA;EDnkIA;ECiqIM;IA9FN,6CAAA;EDhkIA;ECsqIM;IAtGN,4CAAA;ED7jIA;AACF;ACi+HI;EACE,0BAAA;AD/9HN;ACk+HI;EACE,cAAA;EACA,kBAT2B;ADv9HjC;ACo+HM;;EAhCJ,6CAAA;EAEA,sBAAA;ADj8HF;ACw+HM;EAzCJ,6CAAA;EAEA,sBAAA;AD77HF;ACkwII;EACE,oBAAA;AD/vIN;ACkwII;EACE,cAAA;EACA,mBAT8B;ADvvIpC;ACowIM;;EAvCJ,6CAAA;EAEA,sBAAA;AD1tIF;ACwwIM;EAhDJ,6CAAA;EAEA,sBAAA;ADttIF;ACsjFE;;EAGE,eAAA;ADpjFJ;ACogFE;;EARA,mBAAA;EACA,gBAAA;EACA,uBAAA;EAQE,cAAA;EACA,sBAAA;AD//EJ;ACkgFI;;EACE,eAwCqB;ADviF3B;ACysFE;EACE,qBAAA;ADtsFJ;ACi1FE;EAEI,iDAAA;EACA,eAAA;EACA,gBAAA;AD/0FN;AC43FE;;EAGI,iDAAA;EACA,eAAA;AD13FN;ACmhGE;EACE,iDAAA;ADhhGJ;ACwlGE;EACE,iDAAA;ADrlGJ;ACwlGE;EACE,eAAA;ADrlGJ;ACgvGE;EACE,iDAAA;AD7uGJ;ACs5GE;EAEI,iDAAA;EACA,eAAA;EACA,gBAAA;ADp5GN;ACs+GE;EACE,iDAAA;ADn+GJ;ACs+GE;EAEI,eAAA;EACA,gBAAA;ADp+GN;ACw+GE;EACE,mBAAA;ADr+GJ;ACw+GE;EACE,eAAA;ADr+GJ;ACw+GE;EAEI,eAAA;EACA,gBAAA;ADt+GN;ACqoHE;EACE,iDAAA;ADloHJ;ACqoHE;EAEI,iDAAA;EACA,eAAA;EACA,gBAAA;ADnoHN;ACksHE;;;;;;;EAhoFE,wDAAA;EAYF,sBAAA;EA4nFE,SAAA;AD9rHJ;ACwtHE;EACE,iDAAA;EACA,eAnBoB;EAoBpB,gBAnB2B;EAoB3B,mBApB2B;ADjsH/B;ACwtHE;EACE,eArB4B;EAsB5B,gBApBA;EAqBA,mBArBA;ADhsHJ;AC6pFE;EACE,iDAHY;ADvpFhB;AC6pFE;EACE,iDAPY;ADnpFhB;AC+pFI;EACE,eAAA;AD5pFN;AC64EE;EARA,mBAAA;EACA,gBAAA;EACA,uBAAA;EAQE,cAAA;EACA,sBAAA;ADz4EJ;AC44EI;EACE,eAyQuB;ADnpF7B;ACspFI;EACE,eAAA;ADppFN;ACg4EE;EARA,mBAAA;EACA,gBAAA;EACA,uBAAA;EAQE,cAAA;EACA,sBAAA;AD53EJ;AC+3EI;EACE,eA8QuB;AD3oF7B;AC8oFI;EACE,iDAAA;EACA,eAAA;EACA,gBAAA;AD5oFN;ACkpFI;EACE,eAAA;AD/oFN;AC62EE;EARA,mBAAA;EACA,gBAAA;EACA,uBAAA;EAQE,cAAA;EACA,sBAAA;ADz2EJ;AC42EI;EACE,eA4RuB;ADtoF7B;ACyoFI;EACE,eAAA;ADvoFN;ACg2EE;EARA,mBAAA;EACA,gBAAA;EACA,uBAAA;EAQE,cAAA;EACA,sBAAA;AD51EJ;AC+1EI;EACE,eAiSuB;AD9nF7B;ACioFI;EACE,iDA1CU;EA2CV,eAAA;EACA,gBAAA;AD/nFN;AC6hCE;EAEI,iDAAA;EACA,eAAA;AD3hCN;ACijCE;EArFE,wDAAA;EAYF,sBAAA;ADn+BF;AC8pHE;EAEI,iDAAA;EACA,eAAA;AD5pHN;ACgqHE;EACE,cAAA;EAEE,oBAAA;EACA,kBAAA;EACA,gBAAA;AD9pHN;ACk1IE;EACE,iDAAA;AD/0IJ;ACk1IE;;EAEE,gBAAA;EACA,eAAA;AD/0IJ;AC60BE;EACE,gBAAA;EAIA,kBAAA;AD70BJ;ACo1BI;EACE,wBAAA;ADl1BN;ACs1BE;EACE,iBAAA;ADn1BJ;ACs1BE;EACE,kBAAA;EACA,kBAAA;EACA,oBAAA;EAEA,6DAAA;EACA,mBAAA;ADp1BJ;AC7YI;EAquCE,aAAA;ADr1BN;AC3aE;EACE,SAAA;EACA,mBAAA;EACA,WAAA;EACA,YAAA;EACA,gBAAA;EACA,UAAA;EACA,kBAAA;EACA,UAAA;EAGA,UAAA;EAGA,wBAAA;EACA,qBAAA;AD0aJ;ACxjBE;EAEE,oBAAA;EAGA,MAAA;EACA,OAAA;EACA,YAAA;EACA,WAAA;ADwjBJ;ACpjBE;EACE,eAAA;EACA,aA3B4B;ADklBhC;ACrjBI;EAGE,aAAA;ADqjBN;AC7iBE;EACE,aAAA;EACA,kBAAA;EACA,aA1CkB;AD0lBtB;AC5iBE;EAGE,kBAAA;EACA,oBAAA;EACA,sBAAA;EACA,aApDkB;EAwDlB,aAAA;EACA,eAAA;EACA,gBAAA;AD0iBJ;ACviBE;EAEE,kBAAA;EACA,MAAA;EACA,SAAA;EACA,OAAA;EACA,QAAA;EAEA,aApE2B;EAqE3B,oBAAA;EACA,wCAAA;EACA,0DAAA;EACA,UAAA;ADwiBJ;ACtiBI;EACE,UAAA;ADwiBN;ACliBM;EAPF;IAQI,YAAA;EDqiBN;AACF;ACjiBE;EACE,+BArFmC;ADynBvC;AC5hBI;EACE,UAAA;AD+hBN;ACzhBE;EACE,kBAAA;EACA,aA1GkB;EA+GlB,aAAA;EAIA,sBAAA;EAGA,cAAA;EACA,eAAA;ADmhBJ;AC/gBE;EACE,eAAA;EAKA,WAAA;EAKA,kBAAA;AD0gBJ;ACjbE;EAA0C,IAAA;ADqb5C;ACrbE;EAA0C,IAAA;ADqb5C;ACpbE;EAAwC,IAAA;ADub1C;ACvbE;EAAwC,IAAA;ADub1C;ACrbE;EAEE,uDAAA;UAAA,+CAAA;ADsbJ;ACnbE;EAEE,qDAAA;UAAA,6CAAA;ADqbJ;AChbE;EACE,YAAA;ADmbJ;AC7aE;EACE,uBAAA;EACA,2BAAA;EAGA,yBAAA;EACA,kCAAA;AD8aJ;AE9qBA;;0BAAA;AAQA;;0BAAA;AAkCA;;cAAA;AAgBA;;sBAAA;AA1DA;;0BAAA;AAQA;;0BAAA;AAkCA;;cAAA;AAgBA;;sBAAA;AC5CA;;sBAAA;AC6BA;;EAAA;AAqCA;;sBAAA;AAkBA;;sBAAA;ACkOA;;;EAAA;ADzRA;;EAAA;AAqCA;;sBAAA;AAkBA;;sBAAA;AHmzCA,kCAAA;AAuiDA,2CAAA;AAwCA,qBAAA;AK99FQ;EAEI,aAAA;ANwuBZ;AMnuBQ;EACI,WAAA;EACA,YAAA;ANquBZ;AMnuBY;EACI,WAAA;ANquBhB;AMluBY;EACI,YAAA;ANouBhB;AMhuBQ;EACI,0BAAA;ANkuBZ;AM/tBQ;EACI,aAAA;ANiuBZ;AM9tBQ;EAEI,mBF5BY;AJ2vBxB;AMxtBQ;EACI,WAAA;EACA,cAAA;AN0tBZ;AKlwBY;ECsCJ;IAIQ,iBAAA;EN4tBd;AACF;AKvwBY;ECsCJ;IAIQ,iBAAA;ENiuBd;AACF;AM9tBQ;ED8BJ,kBDxBY;ECyBZ,mBDzBY;EEJJ,WAAA;ANiuBZ;AKjxBY;EC8CJ;IAKQ,gBAAA;ENkuBd;AACF;AKtxBY;EC8CJ;IAKQ,gBAAA;ENuuBd;AACF;AMnuBI;EL4aF,yHAAA;AD0TF;AMluBI;EACI,OAAA;ANouBR;AMjuBI;EACI,aAAA;EACA,mBAAA;ANmuBR;AMhuBY;EACI,uBAAA;ANkuBhB;AM/tBY;EACI,mBAAA;ANiuBhB;AM1tBQ;EACI,oBAAA;AN4tBZ;AMztBQ;EAEI,eAAA;AN0tBZ;AMvtBQ;EACI,kBAAA;ANytBZ;AMrtBI;EACI,aAAA;EACA,sBAAA;ANutBR;AMrtBQ;EACI,uBAAA;EACA,mBAAA;ANutBZ;AMptBQ;EACI,8BAAA;ANstBZ;AMntBQ;EACI,oBAAA;ANqtBZ;AMltBQ;EACI,kBAAA;EACA,mBAAA;ANotBZ;AMjtBQ;EACI,yBAAA;ANmtBZ;AM/sBI;EACI,cAAA;ANitBR;AM9sBI;EACI,gBAAA;EACA,yBAAA;ANgtBR;AM9sBQ;EACI,qBAAA;ANgtBZ;AM7sBQ;EACI,qBF5IF;AJ21BV;AM5sBQ;EACI,oBAAA;EACA,qBAAA;EACA,WAAA;AN8sBZ;AM1sBI;EACI,kBAAA;EACA,aAAA;EACA,mBAAA;EACA,WAAA;EACA,YAAA;EACA,oBAAA;EACA,0CAAA;AN4sBR;AMvsBQ;EACI,sBFhHM;AJyzBlB;AMtsBQ;EACI,0BAAA;ANwsBZ;AMtsBY;EACI,WAAA;EACA,8BAAA;EACA,iCAAA;ANwsBhB;AMrsBY;EACI,kBAAA;EACA,0BAAA;ANusBhB;AM5rBgB;EACI,eAAA;AN8rBpB;AKl3BY;ECuLI;IAEQ,oBF/IN;IEgJM,qBFhJN;EJ60BhB;AACF;AKx3BY;ECuLI;IAEQ,oBF/IN;IEgJM,qBFhJN;EJm1BhB;AACF;AK93BY;EC+LQ;IACI,YAAA;IACA,gBAAA;ENksBtB;EM/rBkB;IACI,yBAAA;IACA,4BAAA;ENisBtB;AACF;AKx4BY;EC+LQ;IACI,YAAA;IACA,gBAAA;EN4sBtB;EMzsBkB;IACI,yBAAA;IACA,4BAAA;EN2sBtB;AACF;AMtsBQ;ED8CJ,kBAAA;EACA,kBAAA;EACA,8DA9Kc;EA+Kd,eAAA;EACA,mBAAA;EChDQ,gBAAA;AN4sBZ;AMzsBQ;EACI,kBAAA;AN2sBZ;AMzsBY;EACI,kBAAA;AN2sBhB;AMxsBY;EDkCR,kBAAA;EACA,kBAAA;EACA,8DA9Kc;EA+Kd,eAAA;EACA,mBAAA;ECpCY,gBAAA;EAEA,4BAAA;AN6sBhB;AMxsBY;EAGI,qBF1OP;EE2OO,iBAAA;EACA,gBAAA;ANwsBhB;AMlsBgB;EAGI,qBAAA;ANksBpB;AM3rBgB;EAGI,qBAAA;AN2rBpB;AMrrBY;EAGI,qBF3QN;EE4QM,iBAAA;EACA,gBAAA;ANqrBhB;AMhrBY;EAEI,iBAAA;ANirBhB;AM7qBgB;EAGI,qBF9QN;AJ27Bd;AMxqBQ;EACI,UAAA;EACA,aAAA;EACA,sBAAA;EACA,uBAAA;EACA,mBAAA;AN0qBZ;AMvqBQ;EDrCJ,kBAAA;EACA,kBAAA;EACA,8DA9Kc;EA+Kd,eAAA;EACA,mBAAA;ECmCQ,gBAAA;EACA,gBAAA;EACA,qBFzPM;AJs6BlB;AM1qBQ;EACI,kBFvPI;AJm6BhB;AMzqBQ;EDhDJ,kBAAA;EACA,kBAAA;EACA,8DA9Kc;EA+Kd,eAAA;EACA,mBAAA;EC8CQ,gBAAA;AN+qBZ;AM3qBY;EACI,gCAAA;EACA,4BAAA;AN6qBhB;AM1qBY;EACI,oCAAA;AN4qBhB;AMxqBQ;EACI,aAAA;EACA,mBAAA;EACA,eAAA;AN0qBZ;AMxqBY;EACI,eAAA;AN0qBhB;AMrqBY;EACI,qBF5RE;AJm8BlB;AKj/BY;ECyUA;IAIQ,sBFhRG;EJw7BrB;AACF;AKt/BY;ECyUA;IAIQ,sBFhRG;EJ67BrB;AACF;AM1qBY;EACI,mBF9RA;AJ08BhB;AK9/BY;ECiVA;IAIQ,qBF3RH;EJw8Bf;AACF;AKngCY;ECiVA;IAIQ,qBF3RH;EJ68Bf;AACF;AM9qBQ;EACI,kBAAA;EACA,kBAAA;EACA,yBF7VC;EE8VD,oBFnTO;EEoTP,uBFpTO;EEqTP,oBFlTM;EC+Cd,4BAZiB;EAajB,kBAAA;EACA,kBAAA;EA+KA,kBAAA;EACA,mBAAA;ALswBJ;AKjhCY;ECsVJ;IASQ,oBAAA;ENsrBd;AACF;AKthCY;ECsVJ;IASQ,oBAAA;EN2rBd;AACF;AMvrBY;ED1GR,kBAAA;EACA,kBAAA;EACA,8DA9Kc;EA+Kd,eAAA;EACA,mBAAA;EAkBA,gBAAA;EACA,YAAA;ALmxBJ;AM5rBY;EACI,yBFlXN;AJgjCV;AM5rBgB;EACI,yBFjXW;AJ+iC/B;AM1rBY;EDtHR,kBAAA;EACA,kBAAA;EACA,8DA9Kc;EA+Kd,eAAA;EACA,mBAAA;EAkBA,gBAAA;EACA,YAAA;ECiGY,cFxXP;AJ0jCT;AM7rBI;EACI,YAAA;AN+rBR;AM7rBQ;EACI,YAAA;AN+rBZ;AM3rBI;EACI,wBAAA;EACA,+BAAA;EACA,2BAAA;EACA,gBAAA;AN6rBR;AM3rBQ;EACI,eAAA;EACA,gBAAA;AN6rBZ;AM3rBY;ED/IR,kBAAA;EACA,kBAAA;EACA,8DA9Kc;EA+Kd,eAAA;EACA,mBAAA;EC6IY,gBAAA;ANisBhB;AM7rBQ;EACI,6BAAA;AN+rBZ;AM1rBQ;EACI,UAAA;EACA,iBAAA;AN4rBZ;AMxrBY;ED3FR,oBAAA;EACA,gBAAA;EACA,qBC0F+B;EDzF/B,4BAAA;ALsxBJ;AMzrBQ;EACI,eAAA;EACA,gBAAA;EACA,iBAAA;EACA,aAAA;EACA,gBAAA;AN2rBZ;AMzrBY;EACI,OAAA;AN2rBhB;AMxrBY;EDjLR,kBAAA;EACA,kBAAA;EACA,8DA9Kc;EA+Kd,eAAA;EACA,mBAAA;EAkBA,gBAAA;EACA,YAAA;EC4JY,gBAAA;ANgsBhB;AM5rBgB;EACI,gBAAA;AN8rBpB;AM1rBY;EACI,iBF3XA;AJujChB;AMxrBgB;EACI,WAAA;EACA,kBAAA;EACA,mBAAA;AN0rBpB;AKxnCY;EC2bI;IAKQ,iBAAA;IACA,kBAAA;EN4rBtB;AACF;AK9nCY;EC2bI;IAKQ,iBAAA;IACA,kBAAA;ENksBtB;AACF;AM/rBgB;ED9KZ,yBAAA;EACA,gBAAA;ALg3BJ;AM9rBoB;EACI,yBFpdd;AJopCV;AM3rBoB;EACI,yBFtdO;AJmpC/B;AMxrBoB;ED5NhB,kBAAA;EACA,kBAAA;EACA,8DA9Kc;EA+Kd,eAAA;EACA,mBAAA;EAkBA,gBAAA;EACA,YAAA;ECuMoB,cF9df;EE+de,gBAAA;ANgsBxB;AM5rBgB;EACI,cF3aG;EE4aH,eF5aG;AJ0mCvB;AMvrBQ;EACI,gBAAA;EACA,4BD3ZS;EC4ZT,YAAA;EACA,yBF1eM;AJmqClB;AMvrBY;EACI,yBFtfN;EEufM,qBFjcC;AJ0nCjB;AMrrBQ;EACI,gBAAA;EACA,4BDvaS;AL8lCrB;AMrrBY;EACI,YAAA;ANurBhB;AMprBY;EACI,kBAAA;EACA,qBF/cC;AJqoCjB;AMhrBQ;EACI,YAAA;EACA,gBAAA;EACA,YAAA;EAGA,4BD3bS;AL2mCrB;AK5rCY;ECsgBJ;IASQ,YAAA;ENirBd;AACF;AKjsCY;ECsgBJ;IASQ,YAAA;ENsrBd;AACF;AMprBY;EDpRR,kBAAA;EACA,kBAAA;EACA,8DA9Kc;EA+Kd,eAAA;EACA,mBAAA;ECkRY,mBAAA;EACA,qBF1eG;EE2eH,sBF3eG;EE4eH,4BDtcK;ALgoCrB;AK7sCY;EC8gBA;IAQQ,mBAAA;EN2rBlB;AACF;AKltCY;EC8gBA;IAQQ,mBAAA;ENgsBlB;AACF;AM7rBY;EACI,YAAA;EACA,eAAA;AN+rBhB;AK/tCY;EC8hBA;IAKQ,YAAA;IACA,gBAAA;ENgsBlB;AACF;AKruCY;EC8hBA;IAKQ,YAAA;IACA,gBAAA;ENssBlB;AACF;AK3uCY;ECwiBI;IAEQ,YAAA;ENqsBtB;AACF;AKhvCY;ECwiBI;IAEQ,YAAA;EN0sBtB;AACF;AMtsBY;EACI,YAAA;EACA,WAAA;EACA,eAAA;EACA,UAAA;ANwsBhB;AK3vCY;EC+iBA;IAOQ,WAAA;IACA,YAAA;ENysBlB;AACF;AKjwCY;EC+iBA;IAOQ,WAAA;IACA,YAAA;EN+sBlB;AACF;AMvsBQ;EACI,yBFtkBF;AJ+wCV;AMvsBY;EACI,yBFrkBe;EEskBf,cAAA;EACA,mBAAA;ANysBhB;AMvsBgB;EACI,cAAA;ANysBpB;AMrsBY;EACI,YAAA;ANusBhB;AM/rBQ;EDjTJ,yBAAA;EACA,gBAAA;ECkTQ,yBAAA;EACA,cAAA;ANksBZ;AMjsBY;EACI,yBAAA;EACA,cAAA;EACA,mBAAA;ANmsBhB;AM/rBQ;EACI,uBAAA;ANisBZ;AM/rBY;EACI,cFrmBH;AJsyCb;AMzrBQ;EACI,yBFzmBS;AJoyCrB;AMzrBY;EACI,YAAA;AN2rBhB;AMnrBQ;EDzVJ,yBAAA;EACA,gBAAA;EC0VQ,aAAA;EACA,sBAAA;EACA,uBAAA;EACA,qBFjkBW;EEkkBX,sBFlkBW;AJwvCvB;AMprBY;EACI,YAAA;EACA,eAAA;EACA,qBFzlBG;EE0lBH,sBF1lBG;AJgxCnB;AK3zCY;ECioBA;IAOQ,YAAA;IACA,gBAAA;ENurBlB;AACF;AKj0CY;ECioBA;IAOQ,YAAA;IACA,gBAAA;EN6rBlB;AACF;AMzrBY;EACI,iBAAA;EACA,qBFrpBN;EEspBM,cFtpBN;AJi1CV;AMxrBY;EACI,qBFtpBe;EEupBf,iBAAA;AN0rBhB;AMtrBQ;ED5ZJ,kBAAA;EACA,kBAAA;EACA,8DA9Kc;EA+Kd,eAAA;EACA,mBAAA;EC0ZQ,mBAAA;EACA,cFlqBF;AJ81CV;AMxrBI;EDnaA,kBAAA;EACA,kBAAA;EACA,8DA9Kc;EA+Kd,eAAA;EACA,mBAAA;EAwCA,yBAAA;EC0XI,qBFrqBuB;EEsqBvB,eAAA;EACA,uBAAA;AN8rBR;AKp2CY;ECiqBR;IAQQ,gBAAA;IACA,mBF5nBM;IE6nBN,sBF7nBM;EJ4zChB;AACF;AK32CY;ECiqBR;IAQQ,gBAAA;IACA,mBF5nBM;IE6nBN,sBF7nBM;EJm0ChB;AACF;AMpsBQ;EACI,cFprBF;AJ03CV;AMlsBI;EACI,sBAAA;EACA,uBAAA;ANosBR;AKz3CY;ECmrBR;IAKQ,gBAAA;ENqsBV;AACF;AK93CY;ECmrBR;IAKQ,gBAAA;EN0sBV;AACF;AMxsBQ;ED7bJ,kBAAA;EACA,kBAAA;EACA,8DA9Kc;EA+Kd,eAAA;EACA,mBAAA;EC2bQ,gBAAA;EACA,cFlsBC;EEmsBD,mBFxoBW;AJs1CvB;AM5sBY;EACI,eAAA;EACA,YAAA;AN8sBhB;AM5sBgB;EACI,WAAA;EACA,YAAA;AN8sBpB;AM1sBgB;EACI,0CAAA;AN4sBpB;AMzsBgB;EACI,2CAAA;AN2sBpB;AMpsBQ;EDzdJ,kBAAA;EACA,kBAAA;EACA,8DA9Kc;EA+Kd,eAAA;EACA,mBAAA;ECudQ,gBAAA;AN0sBZ;AMvsBQ;ED9dJ,kBAAA;EACA,kBAAA;EACA,8DA9Kc;EA+Kd,eAAA;EACA,mBAAA;EC4dQ,gBAAA;EACA,cFluBM;AJ+6ClB;AM1sBQ;EDpeJ,kBAAA;EACA,kBAAA;EACA,8DA9Kc;EA+Kd,eAAA;EACA,mBAAA;ALirCJ;AM7sBgB;EACI,aAAA;AN+sBpB;AM5sBgB;EACI,6BAAA;EACA,gBAAA;EACA,cFhvBF;AJ87ClB;AM3sBgB;EACI,gBAAA;EACA,yBFvvBV;AJo8CV;AM1sBgB;EACI,cFzvBF;AJq8ClB;AK97CY;ECyvBJ;IAEQ,aAAA;ENusBd;AACF;AKn8CY;ECyvBJ;IAEQ,aAAA;EN4sBd;AACF;AK/7CQ;ECgvBA;IAKQ,aAAA;EN8sBd;AACF;AKp8CQ;ECgvBA;IAKQ,aAAA;ENmtBd;AACF;AKt9CY;ECswBJ;IAEQ,aAAA;ENktBd;AACF;AK39CY;ECswBJ;IAEQ,aAAA;ENutBd;AACF;AMptBQ;EACI,yBFzwBM;AJ+9ClB;AMjtBQ;EL9SN,wHAAA;EKgTU,gBAAA;EACA,6BAAA;EACA,gCAAA;ANmtBZ;AMjtBY;EACI,yBFvxBG;EEwxBH,mBAAA;ANmtBhB;AMjtBgB;EDhdZ,WCidkC;EDhdlC,YCgdkC;ED/clC,0CAAA;EACA,wBAAA;ALoqCJ;AKn/CY;EC4xBI;IDhdZ,WCmdsC;IDldtC,YCkdsC;IDjdtC,gDAAA;IACA,wBAAA;EL2qCF;AACF;AK3/CY;EC4xBI;IDhdZ,WCmdsC;IDldtC,YCkdsC;IDjdtC,gDAAA;IACA,wBAAA;ELmrCF;AACF;AM/tBY;EACI,eAAA;EACA,gBAAA;ANiuBhB;AM/tBgB;ED3sBZ,4BAZiB;EAajB,kBAAA;EACA,kBAAA;EAqJA,kBAAA;EACA,gBAAA;ECqjBgB,kBFtvBJ;EEuvBI,mBFvvBJ;EE2vBI,gBAAA;EACA,YAAA;EACA,mBAAA;EACA,sBFpwBF;AJs+ClB;AKphDY;ECwyBI;IDhjBR,eAAA;IACA,gBAAA;ELgyCN;AACF;AK1hDY;ECwyBI;IDhjBR,eAAA;IACA,gBAAA;ELsyCN;AACF;AKhiDY;ECwyBI;ID1iBZ,kBAAA;IACA,kBAAA;IACA,8DA9Kc;IA+Kd,eAAA;IACA,mBAAA;ELsyCF;AACF;AKziDY;ECwyBI;ID1iBZ,kBAAA;IACA,kBAAA;IACA,8DA9Kc;IA+Kd,eAAA;IACA,mBAAA;EL+yCF;AACF;AM3vBQ;EACI,kBFpwBI;EEqwBJ,mBFrwBI;AJkgDhB;AM3vBY;EAEI,mBAAA;AN4vBhB;AMxvBQ;EDnkBJ,kBAAA;EACA,kBAAA;EACA,8DA9Kc;EA+Kd,eAAA;EACA,mBAAA;ECikBQ,gBAAA;EACA,YAAA;EACA,mBAAA;AN8vBZ;AM3vBQ;ED5fJ,WC6f0B;ED5f1B,YC4f0B;ED3f1B,yCAAA;EACA,wBAAA;EC8fQ,uBAAA;EACA,+BAAA;AN6vBZ;AK3kDY;ECw0BJ;ID5fJ,WC+f8B;ID9f9B,YC8f8B;ID7f9B,+CAAA;IACA,wBAAA;ELmwCF;AACF;AKnlDY;ECw0BJ;ID5fJ,WC+f8B;ID9f9B,YC8f8B;ID7f9B,+CAAA;IACA,wBAAA;EL2wCF;AACF;AM5wBY;EACI,yBAAA;AN8wBhB;AMzwBI;EACI,aF31BE;AJsmDV;AMxwBI;EACI,aF71BU;AJumDlB;AMvwBI;EACI,WAAA;EACA,aAAA;ANywBR;AMtwBI;EACI,WAAA;EACA,aAAA;ANwwBR;AMrwBI;EACI,aAAA;EACA,eAAA;ANuwBR;AMpwBI;EACI,2BAAA;EACA,WAAA;EACA,iBAAA;ANswBR;AKjnDY;ECw2BR;IAMQ,YAAA;IACA,YAAA;IACA,iBAAA;ENuwBV;EMrwBU;IACI,2BAAA;ENuwBd;AACF;AK3nDY;ECw2BR;IAMQ,YAAA;IACA,YAAA;IACA,iBAAA;ENixBV;EM/wBU;IACI,2BAAA;ENixBd;AACF;AM7wBI;EACI,2BAAA;EACA,sBAAA;EACA,iBAAA;AN+wBR;AK1oDY;ECw3BR;IAMQ,oCAAA;IACA,iBAAA;ENgxBV;AACF;AKhpDY;ECw3BR;IAMQ,oCAAA;IACA,iBAAA;ENsxBV;AACF;AMnxBI;EACI,2BAAA;EACA,WAAA;EACA,iBAAA;ANqxBR;AK3pDY;ECm4BR;IAMQ,YAAA;IACA,YAAA;IACA,iBAAA;ENsxBV;EMpxBU;IACI,2BAAA;ENsxBd;AACF;AKrqDY;ECm4BR;IAMQ,YAAA;IACA,YAAA;IACA,iBAAA;ENgyBV;EM9xBU;IACI,2BAAA;ENgyBd;AACF;AM5xBI;EACI,2BAAA;EACA,iBAAA;AN8xBR;AKnrDY;ECm5BR;IAKQ,YAAA;IACA,YAAA;IACA,iBAAA;EN+xBV;EM7xBU;IACI,2BAAA;EN+xBd;AACF;AK7rDY;ECm5BR;IAKQ,YAAA;IACA,YAAA;IACA,iBAAA;ENyyBV;EMvyBU;IACI,2BAAA;ENyyBd;AACF;AMryBI;EACI,2BAAA;EACA,iBAAA;ANuyBR;AK3sDY;ECu6BA;IACI,2BAAA;ENuyBd;AACF;AKhtDY;ECu6BA;IACI,2BAAA;EN4yBd;AACF;AMxyBI;EACI,4BAAA;EACA,YAAA;EACA,YAAA;EACA,iBAAA;AN0yBR;AMzyBQ;EACI,yBAAA;EACA,qBAAA;EACA,gBAAA;AN2yBZ;AM1yBY;EACI,kBAAA;EACA,WAAA;AN4yBhB;AKpuDY;EC07BQ;IACI,YAAA;IACA,WAAA;EN6yBtB;AACF;AK1uDY;EC07BQ;IACI,YAAA;IACA,WAAA;ENmzBtB;AACF;AKhvDY;EC66BR;IAsBQ,YAAA;IACA,YAAA;IACA,iBAAA;ENizBV;EMhzBU;IACI,2BAAA;ENkzBd;AACF;AK1vDY;EC66BR;IAsBQ,YAAA;IACA,YAAA;IACA,iBAAA;EN2zBV;EM1zBU;IACI,2BAAA;EN4zBd;AACF;AMvzBI;EACI,4BAAA;EACA,YAAA;EAEA,gBAAA;ANwzBR;AMvzBQ;EACI,yBAAA;EACA,qBAAA;EACA,gBAAA;ANyzBZ;AMxzBY;EACI,kBAAA;EACA,WAAA;AN0zBhB;AKlxDY;EC09BQ;IACI,YAAA;IACA,WAAA;EN2zBtB;AACF;AKxxDY;EC09BQ;IACI,YAAA;IACA,WAAA;ENi0BtB;AACF;AK9xDY;EC68BR;IAsBQ,YAAA;IACA,YAAA;IACA,iBAAA;EN+zBV;EM9zBU;IACI,2BAAA;ENg0Bd;AACF;AKxyDY;EC68BR;IAsBQ,YAAA;IACA,YAAA;IACA,iBAAA;ENy0BV;EMx0BU;IACI,2BAAA;EN00Bd;AACF;AKlzDY;EC6+BR;IAEQ,2BAAA;IACA,YAAA;IACA,iBFj8BI;IEk8BJ,kBFl8BI;EJywDd;AACF;AK1zDY;EC6+BR;IAEQ,2BAAA;IACA,YAAA;IACA,iBFj8BI;IEk8BJ,kBFl8BI;EJixDd;AACF;AM70BQ;EACI,iCFt+BO;AJqzDnB;AMz0BY;EACI,yBFt/BI;AJi0DpB;AMx0BY;EACI,uBAAA;AN00BhB;AMt0BQ;EACI,YAAA;ANw0BZ;AMr0BQ;EACI,OAAA;EDhxBR,kBAAA;EACA,kBAAA;EACA,8DA9Kc;EA+Kd,eAAA;EACA,mBAAA;EC8wBQ,gBAAA;ED5sBR,oBAAA;EACA,gBAAA;EACA,qBC2sB2B;ED1sB3B,4BAAA;EC2sBQ,mBAAA;AN80BZ;AM30BQ;EACI,WAAA;EACA,YAAA;EACA,8BAAA;AN60BZ;AM10BQ;EACI,SAAA;EACA,UAAA;AN40BZ;AMz0BQ;EACI,YAAA;EACA,yBFniCmB;EEoiCnB,mBAAA;AN20BZ;AMv0BI;ED1sBA,yBDzVc;AJ62DlB;AMv0BQ;EACI,WAAA;ANy0BZ;AMx0BY;ED/sBR,yBDzVc;EE0iCF,WAAA;EACA,YAAA;EACA,gBAAA;AN00BhB;AMt0BQ;EDvtBJ,yBDzVc;EEkjCN,YAAA;EACA,gBAAA;EACA,gBAAA;ANw0BZ;AMr0BQ;ED9tBJ,yBDzVc;EC6Vd,WAAA;EACA,YAAA;EC4tBQ,gBAAA;ANw0BZ;AKt4DY;EC2jCJ;IDttBA,YAAA;IACA,aAAA;ELqiDN;AACF;AK54DY;EC2jCJ;IDttBA,YAAA;IACA,aAAA;EL2iDN;AACF;AMj1BQ;EDpuBJ,yBDzVc;ECuWd,YAAA;EACA,YAAA;ECwtBQ,gBAAA;EACA,gBAAA;ANo1BZ;AKz5DY;ECikCJ;IDltBA,YAAA;IACA,YAAA;EL8iDN;AACF;AK/5DY;ECikCJ;IDltBA,YAAA;IACA,YAAA;ELojDN;AACF;AM71BQ;ED3uBJ,yBDzVc;EEskCN,YAAA;EACA,gBAAA;AN+1BZ;AK16DY;ECwkCJ;IAMQ,gBAAA;ENg2Bd;AACF;AK/6DY;ECwkCJ;IAMQ,gBAAA;ENq2Bd;AACF;AMl2BQ;EDrvBJ,yBDzVc;EEglCN,YAAA;EACA,gBAAA;ANo2BZ;AKz7DY;ECklCJ;IAMQ,gBAAA;ENq2Bd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","file":"styles.scss","sourcesContent":["@charset \"UTF-8\";\n/* Theme for the ripple elements.*/\n/* stylelint-disable material/no-prefixes */\n/* stylelint-enable */\n.mat-badge-content {\n font-weight: 600;\n font-size: 12px;\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.mat-badge-small .mat-badge-content {\n font-size: 9px;\n}\n\n.mat-badge-large .mat-badge-content {\n font-size: 24px;\n}\n\n.mat-h1, .mat-headline, .mat-typography h1 {\n font: 400 24px/32px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n margin: 0 0 16px;\n}\n\n.mat-h2, .mat-title, .mat-typography h2 {\n font: 500 20px/32px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n margin: 0 0 16px;\n}\n\n.mat-h3, .mat-subheading-2, .mat-typography h3 {\n font: 400 16px/28px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n margin: 0 0 16px;\n}\n\n.mat-h4, .mat-subheading-1, .mat-typography h4 {\n font: 400 15px/24px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n margin: 0 0 16px;\n}\n\n.mat-h5, .mat-typography h5 {\n font: 400 calc(14px * 0.83)/20px Roboto, \"Helvetica Neue\", sans-serif;\n margin: 0 0 12px;\n}\n\n.mat-h6, .mat-typography h6 {\n font: 400 calc(14px * 0.67)/20px Roboto, \"Helvetica Neue\", sans-serif;\n margin: 0 0 12px;\n}\n\n.mat-body-strong, .mat-body-2 {\n font: 500 14px/24px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n\n.mat-body, .mat-body-1, .mat-typography {\n font: 400 14px/20px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n.mat-body p, .mat-body-1 p, .mat-typography p {\n margin: 0 0 12px;\n}\n\n.mat-small, .mat-caption {\n font: 400 12px/20px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n\n.mat-display-4, .mat-typography .mat-display-4 {\n font: 300 112px/112px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: -0.05em;\n margin: 0 0 56px;\n}\n\n.mat-display-3, .mat-typography .mat-display-3 {\n font: 400 56px/56px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: -0.02em;\n margin: 0 0 64px;\n}\n\n.mat-display-2, .mat-typography .mat-display-2 {\n font: 400 45px/48px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: -0.005em;\n margin: 0 0 64px;\n}\n\n.mat-display-1, .mat-typography .mat-display-1 {\n font: 400 34px/40px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n margin: 0 0 64px;\n}\n\n.mat-bottom-sheet-container {\n font: 400 14px/20px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n\n.mat-button, .mat-raised-button, .mat-icon-button, .mat-stroked-button,\n.mat-flat-button, .mat-fab, .mat-mini-fab {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 14px;\n font-weight: 500;\n}\n\n.mat-button-toggle {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.mat-card {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.mat-card-title {\n font-size: 24px;\n font-weight: 500;\n}\n\n.mat-card-header .mat-card-title {\n font-size: 20px;\n}\n\n.mat-card-subtitle,\n.mat-card-content {\n font-size: 14px;\n}\n\n.mat-checkbox {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.mat-checkbox-layout .mat-checkbox-label {\n line-height: 24px;\n}\n\n.mat-chip {\n font-size: 14px;\n font-weight: 500;\n}\n.mat-chip .mat-chip-trailing-icon.mat-icon,\n.mat-chip .mat-chip-remove.mat-icon {\n font-size: 18px;\n}\n\n.mat-table {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.mat-header-cell {\n font-size: 12px;\n font-weight: 500;\n}\n\n.mat-cell, .mat-footer-cell {\n font-size: 14px;\n}\n\n.mat-calendar {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.mat-calendar-body {\n font-size: 13px;\n}\n\n.mat-calendar-body-label,\n.mat-calendar-period-button {\n font-size: 14px;\n font-weight: 500;\n}\n\n.mat-calendar-table-header th {\n font-size: 11px;\n font-weight: 400;\n}\n\n.mat-dialog-title {\n font: 500 20px/32px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n\n.mat-expansion-panel-header {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 15px;\n font-weight: 400;\n}\n\n.mat-expansion-panel-content {\n font: 400 14px/20px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n\n.mat-form-field {\n font-size: inherit;\n font-weight: 400;\n line-height: 1.125;\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n\n.mat-form-field-wrapper {\n padding-bottom: 1.34375em;\n}\n\n.mat-form-field-prefix .mat-icon,\n.mat-form-field-suffix .mat-icon {\n font-size: 150%;\n line-height: 1.125;\n}\n.mat-form-field-prefix .mat-icon-button,\n.mat-form-field-suffix .mat-icon-button {\n height: 1.5em;\n width: 1.5em;\n}\n.mat-form-field-prefix .mat-icon-button .mat-icon,\n.mat-form-field-suffix .mat-icon-button .mat-icon {\n height: 1.125em;\n line-height: 1.125;\n}\n\n.mat-form-field-infix {\n padding: 0.5em 0;\n border-top: 0.84375em solid transparent;\n}\n\n.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\n.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.34375em) scale(0.75);\n width: 133.3333333333%;\n}\n.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.34374em) scale(0.75);\n width: 133.3333433333%;\n}\n\n.mat-form-field-label-wrapper {\n top: -0.84375em;\n padding-top: 0.84375em;\n}\n\n.mat-form-field-label {\n top: 1.34375em;\n}\n\n.mat-form-field-underline {\n bottom: 1.34375em;\n}\n\n.mat-form-field-subscript-wrapper {\n font-size: 75%;\n margin-top: 0.6666666667em;\n top: calc(100% - 1.7916666667em);\n}\n\n.mat-form-field-appearance-legacy .mat-form-field-wrapper {\n padding-bottom: 1.25em;\n}\n.mat-form-field-appearance-legacy .mat-form-field-infix {\n padding: 0.4375em 0;\n}\n.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\n.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.001px);\n -ms-transform: translateY(-1.28125em) scale(0.75);\n width: 133.3333333333%;\n}\n.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.00101px);\n -ms-transform: translateY(-1.28124em) scale(0.75);\n width: 133.3333433333%;\n}\n.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.00102px);\n -ms-transform: translateY(-1.28123em) scale(0.75);\n width: 133.3333533333%;\n}\n.mat-form-field-appearance-legacy .mat-form-field-label {\n top: 1.28125em;\n}\n.mat-form-field-appearance-legacy .mat-form-field-underline {\n bottom: 1.25em;\n}\n.mat-form-field-appearance-legacy .mat-form-field-subscript-wrapper {\n margin-top: 0.5416666667em;\n top: calc(100% - 1.6666666667em);\n}\n\n@media print {\n .mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\n.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.28122em) scale(0.75);\n }\n .mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.28121em) scale(0.75);\n }\n .mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.2812em) scale(0.75);\n }\n}\n.mat-form-field-appearance-fill .mat-form-field-infix {\n padding: 0.25em 0 0.75em 0;\n}\n.mat-form-field-appearance-fill .mat-form-field-label {\n top: 1.09375em;\n margin-top: -0.5em;\n}\n.mat-form-field-appearance-fill.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\n.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-0.59375em) scale(0.75);\n width: 133.3333333333%;\n}\n.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-0.59374em) scale(0.75);\n width: 133.3333433333%;\n}\n\n.mat-form-field-appearance-outline .mat-form-field-infix {\n padding: 1em 0 1em 0;\n}\n.mat-form-field-appearance-outline .mat-form-field-label {\n top: 1.84375em;\n margin-top: -0.25em;\n}\n.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\n.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.59375em) scale(0.75);\n width: 133.3333333333%;\n}\n.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.59374em) scale(0.75);\n width: 133.3333433333%;\n}\n\n.mat-grid-tile-header,\n.mat-grid-tile-footer {\n font-size: 14px;\n}\n.mat-grid-tile-header .mat-line,\n.mat-grid-tile-footer .mat-line {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n box-sizing: border-box;\n}\n.mat-grid-tile-header .mat-line:nth-child(n+2),\n.mat-grid-tile-footer .mat-line:nth-child(n+2) {\n font-size: 12px;\n}\n\ninput.mat-input-element {\n margin-top: -0.0625em;\n}\n\n.mat-menu-item {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 14px;\n font-weight: 400;\n}\n\n.mat-paginator,\n.mat-paginator-page-size .mat-select-trigger {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 12px;\n}\n\n.mat-radio-button {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.mat-select {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.mat-select-trigger {\n height: 1.125em;\n}\n\n.mat-slide-toggle-content {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.mat-slider-thumb-label-text {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 12px;\n font-weight: 500;\n}\n\n.mat-stepper-vertical, .mat-stepper-horizontal {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.mat-step-label {\n font-size: 14px;\n font-weight: 400;\n}\n\n.mat-step-sub-label-error {\n font-weight: normal;\n}\n\n.mat-step-label-error {\n font-size: 14px;\n}\n\n.mat-step-label-selected {\n font-size: 14px;\n font-weight: 500;\n}\n\n.mat-tab-group {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.mat-tab-label, .mat-tab-link {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 14px;\n font-weight: 500;\n}\n\n.mat-toolbar,\n.mat-toolbar h1,\n.mat-toolbar h2,\n.mat-toolbar h3,\n.mat-toolbar h4,\n.mat-toolbar h5,\n.mat-toolbar h6 {\n font: 500 20px/32px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n margin: 0;\n}\n\n.mat-tooltip {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 10px;\n padding-top: 6px;\n padding-bottom: 6px;\n}\n\n.mat-tooltip-handset {\n font-size: 14px;\n padding-top: 8px;\n padding-bottom: 8px;\n}\n\n.mat-list-item {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.mat-list-option {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.mat-list-base .mat-list-item {\n font-size: 16px;\n}\n.mat-list-base .mat-list-item .mat-line {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n box-sizing: border-box;\n}\n.mat-list-base .mat-list-item .mat-line:nth-child(n+2) {\n font-size: 14px;\n}\n.mat-list-base .mat-list-option {\n font-size: 16px;\n}\n.mat-list-base .mat-list-option .mat-line {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n box-sizing: border-box;\n}\n.mat-list-base .mat-list-option .mat-line:nth-child(n+2) {\n font-size: 14px;\n}\n.mat-list-base .mat-subheader {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 14px;\n font-weight: 500;\n}\n\n.mat-list-base[dense] .mat-list-item {\n font-size: 12px;\n}\n.mat-list-base[dense] .mat-list-item .mat-line {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n box-sizing: border-box;\n}\n.mat-list-base[dense] .mat-list-item .mat-line:nth-child(n+2) {\n font-size: 12px;\n}\n.mat-list-base[dense] .mat-list-option {\n font-size: 12px;\n}\n.mat-list-base[dense] .mat-list-option .mat-line {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n box-sizing: border-box;\n}\n.mat-list-base[dense] .mat-list-option .mat-line:nth-child(n+2) {\n font-size: 12px;\n}\n.mat-list-base[dense] .mat-subheader {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 12px;\n font-weight: 500;\n}\n\n.mat-option {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 16px;\n}\n\n.mat-optgroup-label {\n font: 500 14px/24px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n\n.mat-simple-snackbar {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 14px;\n}\n\n.mat-simple-snackbar-action {\n line-height: 1;\n font-family: inherit;\n font-size: inherit;\n font-weight: 500;\n}\n\n.mat-tree {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.mat-tree-node,\n.mat-nested-tree-node {\n font-weight: 400;\n font-size: 14px;\n}\n\n.mat-ripple {\n overflow: hidden;\n position: relative;\n}\n.mat-ripple:not(:empty) {\n transform: translateZ(0);\n}\n\n.mat-ripple.mat-ripple-unbounded {\n overflow: visible;\n}\n\n.mat-ripple-element {\n position: absolute;\n border-radius: 50%;\n pointer-events: none;\n transition: opacity, transform 0ms cubic-bezier(0, 0, 0.2, 1);\n transform: scale(0);\n}\n.cdk-high-contrast-active .mat-ripple-element {\n display: none;\n}\n\n.cdk-visually-hidden {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n outline: 0;\n -webkit-appearance: none;\n -moz-appearance: none;\n}\n\n.cdk-overlay-container, .cdk-global-overlay-wrapper {\n pointer-events: none;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n}\n\n.cdk-overlay-container {\n position: fixed;\n z-index: 1000;\n}\n.cdk-overlay-container:empty {\n display: none;\n}\n\n.cdk-global-overlay-wrapper {\n display: flex;\n position: absolute;\n z-index: 1000;\n}\n\n.cdk-overlay-pane {\n position: absolute;\n pointer-events: auto;\n box-sizing: border-box;\n z-index: 1000;\n display: flex;\n max-width: 100%;\n max-height: 100%;\n}\n\n.cdk-overlay-backdrop {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 1000;\n pointer-events: auto;\n -webkit-tap-highlight-color: transparent;\n transition: opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1);\n opacity: 0;\n}\n.cdk-overlay-backdrop.cdk-overlay-backdrop-showing {\n opacity: 1;\n}\n@media screen and (-ms-high-contrast: active) {\n .cdk-overlay-backdrop.cdk-overlay-backdrop-showing {\n opacity: 0.6;\n }\n}\n\n.cdk-overlay-dark-backdrop {\n background: rgba(0, 0, 0, 0.32);\n}\n\n.cdk-overlay-transparent-backdrop, .cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing {\n opacity: 0;\n}\n\n.cdk-overlay-connected-position-bounding-box {\n position: absolute;\n z-index: 1000;\n display: flex;\n flex-direction: column;\n min-width: 1px;\n min-height: 1px;\n}\n\n.cdk-global-scrollblock {\n position: fixed;\n width: 100%;\n overflow-y: scroll;\n}\n\n@keyframes cdk-text-field-autofill-start {\n /*!*/\n}\n@keyframes cdk-text-field-autofill-end {\n /*!*/\n}\n.cdk-text-field-autofill-monitored:-webkit-autofill {\n animation: cdk-text-field-autofill-start 0s 1ms;\n}\n\n.cdk-text-field-autofill-monitored:not(:-webkit-autofill) {\n animation: cdk-text-field-autofill-end 0s 1ms;\n}\n\ntextarea.cdk-textarea-autosize {\n resize: none;\n}\n\ntextarea.cdk-textarea-autosize-measuring {\n height: auto !important;\n overflow: hidden !important;\n padding: 2px 0 !important;\n box-sizing: content-box !important;\n}\n\n/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/**\n * Spacing\n */\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n/*===================*\\\n|| Icon sizes ||\n\\*===================*/\n/**\n * Makes text have maximum lines with ellipsis. Works on most modern browsers except\n * of Firefox..\n */\n/**\n * Spacing\n */\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n/*===================*\\\n|| Icon sizes ||\n\\*===================*/\n/* Theme for the ripple elements.*/\n/* stylelint-disable material/no-prefixes */\n/* stylelint-enable */\n.mck-inherit-font {\n font: inherit;\n}\n.mck-content-expand, .mck-content-page {\n width: 100%;\n height: 100%;\n}\n.mck-content-expand-width {\n width: 100%;\n}\n.mck-content-expand-height {\n height: 100%;\n}\n.mck-content-with-footer-height {\n height: calc(100vh - 58px);\n}\n.mck-content-full-height, .mck-content-page-container {\n height: 100vh;\n}\n.mck-content-page {\n background: #F8F9FA;\n}\n.mck-content-body {\n width: 100%;\n display: block;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-content-body {\n max-width: 1024px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-content-body {\n max-width: 1024px;\n }\n}\n.mck-content-group {\n padding-left: 1rem;\n padding-right: 1rem;\n width: 100%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-content-group {\n max-width: 759px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-content-group {\n max-width: 759px;\n }\n}\n.mck-shadow {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n}\n.mck-flex-1 {\n flex: 1;\n}\n.mck-row, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix, .mck-row-flow {\n display: flex;\n flex-direction: row;\n}\n.mck-row.mck-center-justify, .mck-center-justify.mck-row-flow, .mck-row.mck-center, .mck-row.mck-button.mat-button, .mck-row.mat-button.mck-stroked-button, .mck-row.mat-button.mck-warning-button, .mck-row.mat-button.mck-secondary-button, .mck-row.mat-button.mck-primary-button, .mck-row.mck-button.mat-stroked-button, .mck-row.mat-stroked-button.mck-stroked-button, .mck-row.mat-stroked-button.mck-warning-button, .mck-row.mat-stroked-button.mck-secondary-button, .mck-row.mat-stroked-button.mck-primary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix, .mck-center.mck-row-flow, .mck-row-flow.mck-button.mat-button, .mck-row-flow.mat-button.mck-stroked-button, .mck-row-flow.mat-button.mck-warning-button, .mck-row-flow.mat-button.mck-secondary-button, .mck-row-flow.mat-button.mck-primary-button, .mck-row-flow.mck-button.mat-stroked-button, .mck-row-flow.mat-stroked-button.mck-stroked-button, .mck-row-flow.mat-stroked-button.mck-warning-button, .mck-row-flow.mat-stroked-button.mck-secondary-button, .mck-row-flow.mat-stroked-button.mck-primary-button {\n justify-content: center;\n}\n.mck-row.mck-center-align, .mck-center-align.mck-row-flow, .mck-row.mck-center, .mck-row.mck-button.mat-button, .mck-row.mat-button.mck-stroked-button, .mck-row.mat-button.mck-warning-button, .mck-row.mat-button.mck-secondary-button, .mck-row.mat-button.mck-primary-button, .mck-row.mck-button.mat-stroked-button, .mck-row.mat-stroked-button.mck-stroked-button, .mck-row.mat-stroked-button.mck-warning-button, .mck-row.mat-stroked-button.mck-secondary-button, .mck-row.mat-stroked-button.mck-primary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix, .mck-center.mck-row-flow, .mck-row-flow.mck-button.mat-button, .mck-row-flow.mat-button.mck-stroked-button, .mck-row-flow.mat-button.mck-warning-button, .mck-row-flow.mat-button.mck-secondary-button, .mck-row-flow.mat-button.mck-primary-button, .mck-row-flow.mck-button.mat-stroked-button, .mck-row-flow.mat-stroked-button.mck-stroked-button, .mck-row-flow.mat-stroked-button.mck-warning-button, .mck-row-flow.mat-stroked-button.mck-secondary-button, .mck-row-flow.mat-stroked-button.mck-primary-button {\n align-items: center;\n}\n.mck-row.mck-stretch, .mck-form-input mat-form-field.mck-center-suffix .mck-stretch.mat-form-field-infix, .mck-stretch.mck-row-flow {\n align-items: stretch;\n}\n.mck-row-flow {\n flex-wrap: wrap;\n}\n.mck-row.mck-scroll, .mck-form-input mat-form-field.mck-center-suffix .mck-scroll.mat-form-field-infix, .mck-scroll.mck-row-flow {\n overflow-x: scroll;\n}\n.mck-column, .mck-button.mat-button.mat-button, .mat-button.mat-button.mck-stroked-button, .mat-button.mat-button.mck-warning-button, .mat-button.mat-button.mck-secondary-button, .mat-button.mat-button.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button, .mat-stroked-button.mat-stroked-button.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-primary-button {\n display: flex;\n flex-direction: column;\n}\n.mck-column.mck-center, .mck-column.mck-button.mat-button, .mck-column.mat-button.mck-stroked-button, .mck-column.mat-button.mck-warning-button, .mck-column.mat-button.mck-secondary-button, .mck-column.mat-button.mck-primary-button, .mck-column.mck-button.mat-stroked-button, .mck-column.mat-stroked-button.mck-stroked-button, .mck-column.mat-stroked-button.mck-warning-button, .mck-column.mat-stroked-button.mck-secondary-button, .mck-column.mat-stroked-button.mck-primary-button, .mck-center.mck-button.mat-button, .mck-center.mat-button.mck-stroked-button, .mck-center.mat-button.mck-warning-button, .mck-center.mat-button.mck-secondary-button, .mck-center.mat-button.mck-primary-button, .mck-button.mat-button, .mat-button.mck-stroked-button, .mat-button.mck-warning-button, .mat-button.mck-secondary-button, .mat-button.mck-primary-button, .mck-button.mat-button.mat-stroked-button, .mat-button.mat-stroked-button.mck-stroked-button, .mat-button.mat-stroked-button.mck-warning-button, .mat-button.mat-stroked-button.mck-secondary-button, .mat-button.mat-stroked-button.mck-primary-button, .mck-center.mck-button.mat-stroked-button, .mck-center.mat-stroked-button.mck-stroked-button, .mck-center.mat-stroked-button.mck-warning-button, .mck-center.mat-stroked-button.mck-secondary-button, .mck-center.mat-stroked-button.mck-primary-button, .mck-button.mat-stroked-button, .mat-stroked-button.mck-stroked-button, .mat-stroked-button.mck-warning-button, .mat-stroked-button.mck-secondary-button, .mat-stroked-button.mck-primary-button, .mck-form-input mat-form-field.mck-center-suffix .mck-column.mat-form-field-infix, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mck-button.mat-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-button.mck-stroked-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-button.mck-warning-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-button.mck-secondary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-button.mck-primary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mck-button.mat-stroked-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-stroked-button.mck-stroked-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-stroked-button.mck-warning-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-stroked-button.mck-secondary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-stroked-button.mck-primary-button {\n justify-content: center;\n align-items: center;\n}\n.mck-column.mck-space-between, .mck-space-between.mck-button.mat-button, .mck-space-between.mat-button.mck-stroked-button, .mck-space-between.mat-button.mck-warning-button, .mck-space-between.mat-button.mck-secondary-button, .mck-space-between.mat-button.mck-primary-button, .mck-space-between.mck-button.mat-stroked-button, .mck-space-between.mat-stroked-button.mck-stroked-button, .mck-space-between.mat-stroked-button.mck-warning-button, .mck-space-between.mat-stroked-button.mck-secondary-button, .mck-space-between.mat-stroked-button.mck-primary-button {\n justify-content: space-between;\n}\n.mck-column.mck-stretch, .mck-stretch.mck-button.mat-button, .mck-stretch.mat-button.mck-stroked-button, .mck-stretch.mat-button.mck-warning-button, .mck-stretch.mat-button.mck-secondary-button, .mck-stretch.mat-button.mck-primary-button, .mck-stretch.mck-button.mat-stroked-button, .mck-stretch.mat-stroked-button.mck-stroked-button, .mck-stretch.mat-stroked-button.mck-warning-button, .mck-stretch.mat-stroked-button.mck-secondary-button, .mck-stretch.mat-stroked-button.mck-primary-button {\n align-items: stretch;\n}\n.mck-column.mck-scroll, .mck-scroll.mck-button.mat-button, .mck-scroll.mat-button.mck-stroked-button, .mck-scroll.mat-button.mck-warning-button, .mck-scroll.mat-button.mck-secondary-button, .mck-scroll.mat-button.mck-primary-button, .mck-scroll.mck-button.mat-stroked-button, .mck-scroll.mat-stroked-button.mck-stroked-button, .mck-scroll.mat-stroked-button.mck-warning-button, .mck-scroll.mat-stroked-button.mck-secondary-button, .mck-scroll.mat-stroked-button.mck-primary-button {\n overflow-y: scroll;\n overflow-y: overlay;\n}\n.mck-column.mck-flex-end, .mck-flex-end.mck-button.mat-button, .mck-flex-end.mat-button.mck-stroked-button, .mck-flex-end.mat-button.mck-warning-button, .mck-flex-end.mat-button.mck-secondary-button, .mck-flex-end.mat-button.mck-primary-button, .mck-flex-end.mck-button.mat-stroked-button, .mck-flex-end.mat-stroked-button.mck-stroked-button, .mck-flex-end.mat-stroked-button.mck-warning-button, .mck-flex-end.mat-stroked-button.mck-secondary-button, .mck-flex-end.mat-stroked-button.mck-primary-button {\n justify-content: flex-end;\n}\n.mck-overflow {\n overflow: auto;\n}\n.mck-bordered, .mck-input {\n border-radius: 0;\n border: 1px solid #B3B3B3;\n}\n.mck-bordered:hover, .mck-input:hover {\n border-color: #464646;\n}\n.mck-bordered:focus, .mck-input:focus {\n border-color: #1F40E6;\n}\n.mck-bordered[disabled=true], .mck-input[disabled=true] {\n pointer-events: none;\n border-color: #f0f0f0;\n color: #ccc;\n}\n.mck-date-display {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n height: 43px;\n padding: 1rem 0.5rem;\n transition: border 200ms, box-shadow 200ms;\n}\n.mck-form-input .mat-form-field-wrapper {\n padding-bottom: 0.5rem;\n}\n.mck-form-input mat-form-field {\n min-width: auto !important;\n}\n.mck-form-input mat-form-field .mat-form-field-infix {\n width: 100%;\n padding-top: 0.7rem !important;\n padding-bottom: 0.5rem !important;\n}\n.mck-form-input mat-form-field .mat-form-field-outline {\n min-height: 2.7rem;\n color: rgba(0, 0, 0, 0.27);\n}\n.mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\n margin-top: 2px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-flex {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-flex {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-outline, .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\n height: 2rem;\n min-height: 2rem;\n }\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-outline, .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\n height: 2rem;\n min-height: 2rem;\n }\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n}\n.mck-form-input mat-form-field.mat-s {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-form-input mat-select {\n margin-top: 0.2rem;\n}\n.mck-form-input mat-select .mat-select-arrow {\n visibility: hidden;\n}\n.mck-form-input mat-select .mat-select-value > .mat-select-value-text > span {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 400;\n font-family: \"McKinsey Sans\";\n}\n.mck-form-input .mat-form-field-outline > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input .mat-form-field-outline > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input .mat-form-field-outline > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: #B3B3B3;\n border-width: 1px;\n border-radius: 0;\n}\n.mck-form-input .available .mat-form-field-outline > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input .available .mat-form-field-outline > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input .available .mat-form-field-outline > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: #3aa537;\n}\n.mck-form-input .booked .mat-form-field-outline > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input .booked .mat-form-field-outline > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input .booked .mat-form-field-outline > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: #e12e41;\n}\n.mck-form-input .mat-form-field-outline-thick > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input .mat-form-field-outline-thick > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input .mat-form-field-outline-thick > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: #1F40E6;\n border-width: 1px;\n border-radius: 0;\n}\n.mck-form-input > mat-form-field.mck-error .mat-form-field-wrapper {\n padding-bottom: 0;\n}\n.mck-form-input > mat-form-field.mck-error .mat-form-field-outline > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input > mat-form-field.mck-error .mat-form-field-outline > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input > mat-form-field.mck-error .mat-form-field-outline > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: #E12E40;\n}\n.mck-form-input mck-close-icon.mat-chip-remove.mat-chip-remove {\n opacity: 1;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n}\n.mck-form-input mat-label {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 400;\n text-align: left;\n margin-bottom: 0.5rem;\n}\n.mck-form-input mat-radio-button {\n margin-right: 1rem;\n}\n.mck-form-input .mat-radio-label-content {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-form-input .mat-radio-outer-circle {\n border-color: #1F40E6 !important;\n border-width: 1px !important;\n}\n.mck-form-input .mat-radio-inner-circle {\n background-color: #1F40E6 !important;\n}\n.mck-form-input mat-radio-group {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n}\n.mck-form-input mat-radio-group > mat-radio-button:last-child {\n margin-right: 0;\n}\n.mck-form-input-container > .mck-form-input, .mck-form-input-container > mck-select {\n margin-bottom: 0.5rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-form-input-container > .mck-form-input, .mck-form-input-container > mck-select {\n margin-bottom: 1.75rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-form-input-container > .mck-form-input, .mck-form-input-container > mck-select {\n margin-bottom: 1.75rem;\n }\n}\n.mck-form-input-container .mck-radio-select {\n margin-bottom: 1rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-form-input-container .mck-radio-select {\n margin-bottom: 1.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-form-input-container .mck-radio-select {\n margin-bottom: 1.5rem;\n }\n}\n.mck-form-input mat-chip.mat-standard-chip.mat-standard-chip {\n border-radius: 3px;\n min-height: 1.5rem;\n background-color: #333333;\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 0.75rem;\n line-height: 1.5rem;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input mat-chip.mat-standard-chip.mat-standard-chip {\n line-height: inherit;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input mat-chip.mat-standard-chip.mat-standard-chip {\n line-height: inherit;\n }\n}\n.mck-form-input mat-checkbox.mat-checkbox.mat-checkbox {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n}\n.mck-form-input mat-checkbox div.mat-checkbox-background.mat-checkbox-background {\n background-color: #1F40E6;\n}\n.mck-form-input mat-checkbox div.mat-checkbox-background.mat-checkbox-background.mck-checkbox-disabled.mat-checkbox-disabled {\n background-color: #D0D0D0;\n}\n.mck-form-input mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n color: #B3B3B3;\n}\n.mck-borderless {\n border: none;\n}\n.mck-borderless:hover, .mck-borderless:focus, .mck-borderless:disabled {\n border: none;\n}\n.mck-select-panel {\n margin-top: 0 !important;\n border-radius: unset !important;\n margin-top: 35px !important;\n margin-left: 5px;\n}\n.mck-select-panel mat-option {\n padding-left: 0;\n padding-right: 0;\n}\n.mck-select-panel mat-option.mat-option-text {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-select-panel.mck-margin-top {\n margin-top: 1.5rem !important;\n}\n.mck-checkbox-panel.mat-autocomplete-panel.mat-autocomplete-panel {\n top: -10px;\n max-height: 278px;\n}\n.mck-checkbox-panel mat-option.mck-truncated .mat-checkbox-label.mat-checkbox-label {\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n.mck-checkbox-panel mat-option {\n padding-left: 0;\n padding-right: 0;\n line-height: 24px;\n height: unset;\n min-height: 36px;\n}\n.mck-checkbox-panel mat-option .mat-checkbox-label.mat-checkbox-label {\n flex: 1;\n}\n.mck-checkbox-panel mat-option .mat-checkbox-label.mat-checkbox-label {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n text-align: left;\n}\n.mck-checkbox-panel mat-option.mck-checkbox-group-header .mat-checkbox-label.mat-checkbox-label {\n font-weight: 500;\n}\n.mck-checkbox-panel mat-option.mck-checkbox-group-child {\n margin-left: 2rem;\n}\n.mck-checkbox-panel mat-option mat-checkbox label.mat-checkbox-layout {\n width: 100%;\n padding-left: 16px;\n padding-right: 16px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-checkbox-panel mat-option mat-checkbox label.mat-checkbox-layout {\n padding-left: 2px;\n padding-right: 2px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-checkbox-panel mat-option mat-checkbox label.mat-checkbox-layout {\n padding-left: 2px;\n padding-right: 2px;\n }\n}\n.mck-checkbox-panel mat-option mat-checkbox div.mat-checkbox-frame.mat-checkbox-frame {\n border: 1px solid #B3B3B3;\n border-radius: 0;\n}\n.mck-checkbox-panel mat-option mat-checkbox.mat-checkbox-checked div.mat-checkbox-background.mat-checkbox-background {\n background-color: #1F40E6;\n}\n.mck-checkbox-panel mat-option mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled div.mat-checkbox-background.mat-checkbox-background {\n background-color: #D0D0D0;\n}\n.mck-checkbox-panel mat-option mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled .mat-checkbox-label.mat-checkbox-label {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n color: #B3B3B3;\n text-align: left;\n}\n.mck-checkbox-panel mat-option mat-checkbox .mat-checkbox-inner-container {\n width: 1.25rem;\n height: 1.25rem;\n}\n.mck-select-option-selected {\n font-weight: 500;\n font-family: \"McKinsey Sans\";\n color: black;\n background-color: #E6E6E6;\n}\n.mck-select-option-selected .mck-spacer-content {\n background-color: #1F40E6;\n margin-right: 0.75rem;\n}\n.mck-select-option-unselected {\n font-weight: 400;\n font-family: \"McKinsey Sans\";\n}\n.mck-select-option-unselected.mck-ignore-disabled {\n color: black;\n}\n.mck-select-option-unselected .mck-spacer-content {\n visibility: hidden;\n margin-right: 0.75rem;\n}\n.mck-button.mat-button.mat-button, .mat-button.mat-button.mck-stroked-button, .mat-button.mat-button.mck-warning-button, .mat-button.mat-button.mck-secondary-button, .mat-button.mat-button.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button, .mat-stroked-button.mat-stroked-button.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-primary-button {\n height: 40px;\n border-radius: 0;\n border: none;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button, .mat-button.mat-button.mck-stroked-button, .mat-button.mat-button.mck-warning-button, .mat-button.mat-button.mck-secondary-button, .mat-button.mat-button.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button, .mat-stroked-button.mat-stroked-button.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-primary-button {\n height: 48px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button, .mat-button.mat-button.mck-stroked-button, .mat-button.mat-button.mck-warning-button, .mat-button.mat-button.mck-secondary-button, .mat-button.mat-button.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button, .mat-stroked-button.mat-stroked-button.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-primary-button {\n height: 48px;\n }\n}\n.mck-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper, .mck-button.mat-stroked-button.mat-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: normal;\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper, .mck-button.mat-stroked-button.mat-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper {\n font-size: 0.875rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper, .mck-button.mat-stroked-button.mat-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper {\n font-size: 0.875rem;\n }\n}\n.mck-button.mat-button.mat-button.mck-short, .mat-button.mat-button.mck-short.mck-stroked-button, .mat-button.mat-button.mck-short.mck-warning-button, .mat-button.mat-button.mck-short.mck-secondary-button, .mat-button.mat-button.mck-short.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short, .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button {\n height: 32px;\n min-width: 83px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-short, .mat-button.mat-button.mck-short.mck-stroked-button, .mat-button.mat-button.mck-short.mck-warning-button, .mat-button.mat-button.mck-short.mck-secondary-button, .mat-button.mat-button.mck-short.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short, .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-short, .mat-button.mat-button.mck-short.mck-stroked-button, .mat-button.mat-button.mck-short.mck-warning-button, .mat-button.mat-button.mck-short.mck-secondary-button, .mat-button.mat-button.mck-short.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short, .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-short.mck-short-height, .mat-button.mat-button.mck-short.mck-short-height.mck-stroked-button, .mat-button.mat-button.mck-short.mck-short-height.mck-warning-button, .mat-button.mat-button.mck-short.mck-short-height.mck-secondary-button, .mat-button.mat-button.mck-short.mck-short-height.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short.mck-short-height, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-primary-button {\n height: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-short.mck-short-height, .mat-button.mat-button.mck-short.mck-short-height.mck-stroked-button, .mat-button.mat-button.mck-short.mck-short-height.mck-warning-button, .mat-button.mat-button.mck-short.mck-short-height.mck-secondary-button, .mat-button.mat-button.mck-short.mck-short-height.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short.mck-short-height, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-primary-button {\n height: 40px;\n }\n}\n.mck-button.mat-button.mat-button.mck-square, .mat-button.mat-button.mck-square.mck-stroked-button, .mat-button.mat-button.mck-square.mck-warning-button, .mat-button.mat-button.mck-square.mck-secondary-button, .mat-button.mat-button.mck-square.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-square, .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button {\n height: 32px;\n width: 32px;\n min-width: 32px;\n padding: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-square, .mat-button.mat-button.mck-square.mck-stroked-button, .mat-button.mat-button.mck-square.mck-warning-button, .mat-button.mat-button.mck-square.mck-secondary-button, .mat-button.mat-button.mck-square.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-square, .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button {\n width: 40px;\n height: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-square, .mat-button.mat-button.mck-square.mck-stroked-button, .mat-button.mat-button.mck-square.mck-warning-button, .mat-button.mat-button.mck-square.mck-secondary-button, .mat-button.mat-button.mck-square.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-square, .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button {\n width: 40px;\n height: 40px;\n }\n}\n.mck-primary-button.mat-button.mat-button {\n background-color: #1F40E6;\n}\n.mck-primary-button.mat-button.mat-button[disabled], .mck-primary-button.mat-button.mat-button.disabled {\n background-color: #D0D0D0;\n color: #757575;\n cursor: not-allowed;\n}\n.mck-primary-button.mat-button.mat-button[disabled] > .mat-button-wrapper.mat-button-wrapper, .mck-primary-button.mat-button.mat-button.disabled > .mat-button-wrapper.mat-button-wrapper {\n color: #757575;\n}\n.mck-primary-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper {\n color: white;\n}\n.mck-secondary-button.mat-stroked-button.mat-stroked-button {\n border: 1px solid #D0D0D0;\n border-radius: 0;\n border: 1px solid #2251FF;\n color: #2251FF;\n}\n.mck-secondary-button.mat-stroked-button.mat-stroked-button[disabled], .mck-secondary-button.mat-stroked-button.mat-stroked-button.disabled {\n border: 1px solid #D0D0D0;\n color: #333333;\n cursor: not-allowed;\n}\n.mck-secondary-button.mat-button.mat-button {\n background-color: white;\n}\n.mck-secondary-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper {\n color: #333333;\n}\n.mck-warning-button.mat-button.mat-button {\n background-color: #ffd048;\n}\n.mck-warning-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper {\n color: black;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button {\n border: 2px solid #B3B3B3;\n border-radius: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding-left: 1.75rem;\n padding-right: 1.75rem;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short {\n height: 32px;\n min-width: 83px;\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short {\n height: 48px;\n min-width: 155px;\n }\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-primary {\n border-width: 1px;\n border-color: #1F40E6;\n color: #1F40E6;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-thin-border-light {\n border-color: #D0D0D0;\n border-width: 1px;\n}\n.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: normal;\n color: #1F40E6;\n}\n.mck-toggle-button {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n border: 1px solid #B3B3B3;\n border-color: #D0D0D0;\n min-width: 59px;\n background-color: white;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-toggle-button {\n min-width: 132px;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-toggle-button {\n min-width: 132px;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n }\n}\n.mck-toggle-button-selected {\n color: #1F40E6;\n}\n.mck-date-picker {\n width: 100% !important;\n height: 100% !important;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-date-picker {\n max-width: 23rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-date-picker {\n max-width: 23rem;\n }\n}\n.mck-date-picker > .header.header {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n color: #051C2C;\n margin-top: 1.25rem;\n}\n.mck-date-picker > .header.header > .arrow.arrow {\n width: 2.375rem;\n height: 2rem;\n}\n.mck-date-picker > .header.header > .arrow.arrow > .icon.icon {\n width: 1rem;\n height: 1rem;\n}\n.mck-date-picker > .header.header > .arrow.arrow > .next.next {\n background-image: url(\"libs/ui/src/lib/icons/arrow-forward.svg\");\n}\n.mck-date-picker > .header.header > .arrow.arrow > .previous.previous {\n background-image: url(\"libs/ui/src/lib/icons/arrow-backward.svg\");\n}\n.mck-date-picker > .month {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n}\n.mck-date-picker > .week {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n color: #767676;\n}\n.mck-date-picker > .body {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.mck-date-picker > .body > div > div.date > .dot {\n display: none;\n}\n.mck-date-picker > .body > div > div.date.disabled {\n background-color: transparent;\n border-radius: 0;\n color: #767676;\n}\n.mck-date-picker > .body > div > div.date.active {\n border-radius: 0;\n background-color: #1F40E6;\n}\n.mck-date-picker > .body > div > div.date.non-month {\n color: #767676;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-spacer-content-collapse-tablet {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-spacer-content-collapse-tablet {\n display: none;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .mck-spacer-content-collapse-tablet {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .mck-spacer-content-collapse-tablet {\n display: none;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-spacer-content-expand-mobile {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-spacer-content-expand-mobile {\n display: none;\n }\n}\n.mck-spacer-content-divider {\n background-color: #E6E6E6;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n border-radius: 0;\n border-top: 1px solid #E6E6E6;\n border-bottom: 1px solid #E6E6E6;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded {\n background-color: #F0F0F0;\n border-bottom: none;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded .mck-collapse-icon {\n width: 24px;\n height: 24px;\n background-image: url(\"libs/ui/src/lib/icons/chevron-close.svg\");\n background-size: contain;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded .mck-collapse-icon {\n width: 48px;\n height: 48px;\n background-image: url(\"libs/ui/src/lib/icons/chevron-close-large.svg\");\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded .mck-collapse-icon {\n width: 48px;\n height: 48px;\n background-image: url(\"libs/ui/src/lib/icons/chevron-close-large.svg\");\n background-size: contain;\n }\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body {\n padding-left: 0;\n padding-right: 0;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 0.75rem;\n line-height: 1.4;\n padding-left: 1rem;\n padding-right: 1rem;\n text-align: left;\n color: black;\n font-weight: normal;\n padding-bottom: 0.5rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\n font-size: 1rem;\n line-height: 1.6;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\n font-size: 1rem;\n line-height: 1.6;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n }\n}\n.mck-expansion-panel mat-expansion-panel-header {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.mck-expansion-panel mat-expansion-panel-header > span.mat-content {\n align-items: center;\n}\n.mck-expansion-panel mat-panel-title {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n color: black;\n font-weight: normal;\n}\n.mck-expansion-panel .mck-collapse-icon {\n width: 24px;\n height: 24px;\n background-image: url(\"libs/ui/src/lib/icons/chevron-open.svg\");\n background-size: contain;\n transform: rotate(0deg);\n transition: transform 0.5s ease;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel .mck-collapse-icon {\n width: 48px;\n height: 48px;\n background-image: url(\"libs/ui/src/lib/icons/chevron-open-large.svg\");\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel .mck-collapse-icon {\n width: 48px;\n height: 48px;\n background-image: url(\"libs/ui/src/lib/icons/chevron-open-large.svg\");\n background-size: contain;\n }\n}\n.mck-expansion-panel .mck-collapse-icon.expanded {\n transform: rotate(180deg);\n}\n.mck-icon-fill-open {\n fill: #1F40E6;\n}\n.mck-icon-fill-close {\n fill: #767676;\n}\n.mck-icon-fill-black {\n fill: black;\n stroke: black;\n}\n.mck-icon-fill-white {\n fill: white;\n stroke: white;\n}\n.mck-icon-fill-gray {\n fill: #333333;\n stroke: #333333;\n}\n.mck-min {\n max-width: 581px !important;\n width: 80vw;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-min {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-min .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-min {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-min .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n.mck-noexpand {\n max-width: 581px !important;\n width: 80vw !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-noexpand {\n width: calc(100vw - 32px) !important;\n max-height: 100vh;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-noexpand {\n width: calc(100vw - 32px) !important;\n max-height: 100vh;\n }\n}\n.mck-modal {\n max-width: 800px !important;\n width: 80vw;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n.mck-modal-mini {\n max-width: 580px !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-mini {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-mini .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-mini {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-mini .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n.mck-modal-survey {\n max-width: 691px !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-survey .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-survey .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n.mck-modal-wide {\n max-width: 1024px !important;\n width: 100vw;\n height: 95vh;\n max-height: 100vh;\n}\n.mck-modal-wide .mat-dialog-content {\n background-color: #F8F9FA;\n padding: 0 !important;\n overflow: hidden;\n}\n.mck-modal-wide .mat-dialog-content .mat-icon-button[name=CloseButton] {\n position: relative;\n right: 32px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide .mat-dialog-content .mat-icon-button[name=CloseButton] .close-image {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide .mat-dialog-content .mat-icon-button[name=CloseButton] .close-image {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n.mck-modal-wide-manage-booking {\n max-width: 1024px !important;\n width: 100vw;\n max-height: 95vh;\n}\n.mck-modal-wide-manage-booking .mat-dialog-content {\n background-color: #F8F9FA;\n padding: 0 !important;\n overflow: hidden;\n}\n.mck-modal-wide-manage-booking .mat-dialog-content .mat-icon-button[name=CloseButton] {\n position: relative;\n right: 32px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide-manage-booking .mat-dialog-content .mat-icon-button[name=CloseButton] .close-image {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide-manage-booking .mat-dialog-content .mat-icon-button[name=CloseButton] .close-image {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide-manage-booking {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide-manage-booking .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide-manage-booking {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide-manage-booking .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-alert {\n max-width: 100vw !important;\n width: 100vw;\n margin-left: 1rem;\n margin-right: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-alert {\n max-width: 100vw !important;\n width: 100vw;\n margin-left: 1rem;\n margin-right: 1rem;\n }\n}\n.mck-alert-backdrop {\n background: rgba(5, 28, 44, 0.85);\n}\n.mck-slide-toggle.mat-slide-toggle.mat-checked:not(.mat-disabled) .mat-slide-toggle-bar.mat-slide-toggle-bar {\n background-color: #2251FF;\n}\n.mck-slide-toggle.mat-slide-toggle.mat-checked:not(.mat-disabled) .mat-slide-toggle-thumb.mat-slide-toggle-thumb {\n background-color: white;\n}\n.mck-slide-toggle.mat-slide-toggle {\n height: auto;\n}\n.mck-slide-toggle .mat-slide-toggle-content.mat-slide-toggle-content {\n flex: 1;\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n white-space: normal;\n}\n.mck-slide-toggle .mat-slide-toggle-thumb.mat-slide-toggle-thumb {\n width: 14px;\n height: 14px;\n transform: translate(50%, 50%);\n}\n.mck-slide-toggle .mat-slide-toggle-thumb-container.mat-slide-toggle-thumb-container {\n top: -4px;\n left: -4px;\n}\n.mck-slide-toggle .mat-slide-toggle-bar.mat-slide-toggle-bar {\n height: 20px;\n background-color: #D0D0D0;\n border-radius: 20px;\n}\n.mck-skeleton {\n background-color: #E6E6E6;\n}\n.mck-skeleton-checkbox {\n float: left;\n}\n.mck-skeleton-checkbox > .loader.loader {\n background-color: #E6E6E6;\n width: 20px;\n height: 20px;\n margin-bottom: 0;\n}\n.mck-skeleton-header > .loader.loader {\n background-color: #E6E6E6;\n width: 100vw;\n margin-bottom: 0;\n max-width: 215px;\n}\n.mck-skeleton-image > .loader.loader {\n background-color: #E6E6E6;\n width: 81px;\n height: 82px;\n margin-bottom: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-skeleton-image > .loader.loader {\n width: 219px;\n height: 119px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-skeleton-image > .loader.loader {\n width: 219px;\n height: 119px;\n }\n}\n.mck-skeleton-status > .loader.loader {\n background-color: #E6E6E6;\n width: 117px;\n height: 78px;\n margin-top: 10px;\n margin-bottom: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-skeleton-status > .loader.loader {\n width: 117px;\n height: 78px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-skeleton-status > .loader.loader {\n width: 117px;\n height: 78px;\n }\n}\n.mck-skeleton-line-1 > .loader.loader {\n background-color: #E6E6E6;\n height: 23px;\n max-width: 176px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-1 > .loader.loader {\n max-width: 219px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-1 > .loader.loader {\n max-width: 219px;\n }\n}\n.mck-skeleton-line-2 > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 165px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-2 > .loader.loader {\n max-width: 189px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-2 > .loader.loader {\n max-width: 189px;\n }\n}\n.mck-skeleton-line-3 > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 147px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-3 > .loader.loader {\n max-width: 189px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-3 > .loader.loader {\n max-width: 189px;\n }\n}\n.mck-skeleton-line-30p > .loader.loader, .mck-skeleton-line-30p-thin > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 30%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-30p > .loader.loader, .mck-skeleton-line-30p-thin > .loader.loader {\n max-width: 30%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-30p > .loader.loader, .mck-skeleton-line-30p-thin > .loader.loader {\n max-width: 30%;\n }\n}\n.mck-skeleton-line-30p-thin > .loader.loader, .mck-skeleton-line-30p-thin-thin > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-45p > .loader.loader, .mck-skeleton-line-45p-thin > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 45%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-45p > .loader.loader, .mck-skeleton-line-45p-thin > .loader.loader {\n max-width: 45%;\n margin-right: 45%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-45p > .loader.loader, .mck-skeleton-line-45p-thin > .loader.loader {\n max-width: 45%;\n margin-right: 45%;\n }\n}\n.mck-skeleton-line-45p-thin > .loader.loader, .mck-skeleton-line-45p-thin-thin > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-50p > .loader.loader, .mck-skeleton-line-50p-thin > .loader.loader, .mck-skeleton-line-50p-thick > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 50%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-50p > .loader.loader, .mck-skeleton-line-50p-thin > .loader.loader, .mck-skeleton-line-50p-thick > .loader.loader {\n max-width: 50%;\n margin-right: 45%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-50p > .loader.loader, .mck-skeleton-line-50p-thin > .loader.loader, .mck-skeleton-line-50p-thick > .loader.loader {\n max-width: 50%;\n margin-right: 45%;\n }\n}\n.mck-skeleton-line-50p-thin > .loader.loader, .mck-skeleton-line-50p-thin-thin > .loader.loader, .mck-skeleton-line-50p-thick-thin > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-50p-thick > .loader.loader, .mck-skeleton-line-50p-thin-thick > .loader.loader, .mck-skeleton-line-50p-thick-thick > .loader.loader {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-60p > .loader.loader, .mck-skeleton-line-60p-thin > .loader.loader, .mck-skeleton-line-60p-thick > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 60%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-60p > .loader.loader, .mck-skeleton-line-60p-thin > .loader.loader, .mck-skeleton-line-60p-thick > .loader.loader {\n max-width: 60%;\n margin-right: 35%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-60p > .loader.loader, .mck-skeleton-line-60p-thin > .loader.loader, .mck-skeleton-line-60p-thick > .loader.loader {\n max-width: 60%;\n margin-right: 35%;\n }\n}\n.mck-skeleton-line-60p-thin > .loader.loader, .mck-skeleton-line-60p-thin-thin > .loader.loader, .mck-skeleton-line-60p-thick-thin > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-60p-thick > .loader.loader, .mck-skeleton-line-60p-thin-thick > .loader.loader, .mck-skeleton-line-60p-thick-thick > .loader.loader {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-70p > .loader.loader, .mck-skeleton-line-70p-thin > .loader.loader, .mck-skeleton-line-70p-thick > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 70%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-70p > .loader.loader, .mck-skeleton-line-70p-thin > .loader.loader, .mck-skeleton-line-70p-thick > .loader.loader {\n max-width: 70%;\n margin-right: 25%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-70p > .loader.loader, .mck-skeleton-line-70p-thin > .loader.loader, .mck-skeleton-line-70p-thick > .loader.loader {\n max-width: 70%;\n margin-right: 25%;\n }\n}\n.mck-skeleton-line-70p-thin > .loader.loader, .mck-skeleton-line-70p-thin-thin > .loader.loader, .mck-skeleton-line-70p-thick-thin > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-70p-thick > .loader.loader, .mck-skeleton-line-70p-thin-thick > .loader.loader, .mck-skeleton-line-70p-thick-thick > .loader.loader {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-80p > .loader.loader, .mck-skeleton-line-80p-thin > .loader.loader, .mck-skeleton-line-80p-thick > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 80%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-80p > .loader.loader, .mck-skeleton-line-80p-thin > .loader.loader, .mck-skeleton-line-80p-thick > .loader.loader {\n max-width: 80%;\n margin-right: 15%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-80p > .loader.loader, .mck-skeleton-line-80p-thin > .loader.loader, .mck-skeleton-line-80p-thick > .loader.loader {\n max-width: 80%;\n margin-right: 15%;\n }\n}\n.mck-skeleton-line-80p-thin > .loader.loader, .mck-skeleton-line-80p-thin-thin > .loader.loader, .mck-skeleton-line-80p-thick-thin > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-80p-thick > .loader.loader, .mck-skeleton-line-80p-thin-thick > .loader.loader, .mck-skeleton-line-80p-thick-thick > .loader.loader {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-90p > .loader.loader, .mck-skeleton-line-90p-thin > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 90%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-90p > .loader.loader, .mck-skeleton-line-90p-thin > .loader.loader {\n max-width: 90%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-90p > .loader.loader, .mck-skeleton-line-90p-thin > .loader.loader {\n max-width: 90%;\n }\n}\n.mck-skeleton-line-90p-thin > .loader.loader, .mck-skeleton-line-90p-thin-thin > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-load-more > .loader.loader {\n background-color: #E6E6E6;\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n width: calc(100vw - (2 * 1rem));\n height: 40px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-load-more > .loader.loader {\n max-width: 320px;\n height: 50px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-load-more > .loader.loader {\n max-width: 320px;\n height: 50px;\n }\n}\n.mck-skeleton-load-more-100p > .loader.loader, .mck-skeleton-header > .loader.loader, .mck-skeleton-room-availability > .loader.loader {\n background-color: #E6E6E6;\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n width: calc(100vw - (2 * 1rem));\n height: 40px;\n max-width: none;\n width: 100%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-load-more-100p > .loader.loader, .mck-skeleton-header > .loader.loader, .mck-skeleton-room-availability > .loader.loader {\n max-width: none;\n width: 100%;\n height: 50px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-load-more-100p > .loader.loader, .mck-skeleton-header > .loader.loader, .mck-skeleton-room-availability > .loader.loader {\n max-width: none;\n width: 100%;\n height: 50px;\n }\n}\n.mck-skeleton-load-more-100p > .loader.loader-room-availability > .loader.loader, .mck-skeleton-header > .loader.loader-room-availability > .loader.loader, .mck-skeleton-room-availability > .loader.loader-room-availability > .loader.loader {\n height: 124px;\n margin-bottom: 4px;\n}\n\n.mck-heading-5 {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 1.5rem;\n line-height: 1.333;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-heading-5 {\n font-size: 1.75rem;\n line-height: 1.142;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-heading-5 {\n font-size: 1.75rem;\n line-height: 1.142;\n }\n}\n\nngx-mat-select-search .mat-select-search-no-entries-found {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\nngx-mat-select-search .mat-select-search-input {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\nngx-mat-select-search button.mat-button.mat-select-search-clear {\n background-color: transparent;\n border: none;\n color: black;\n}\n\n::-webkit-scrollbar {\n width: 16px;\n height: 18px;\n}\n\n::-webkit-scrollbar-thumb {\n height: 1.5rem;\n border: 4px solid rgba(0, 0, 0, 0);\n background-clip: padding-box;\n border-radius: 8px;\n background-color: #757575;\n -webkit-box-shadow: inset -1px -1px 0px rgba(0, 0, 0, 0.05), inset 1px 1px 0px rgba(0, 0, 0, 0.05);\n}\n\n::-webkit-scrollbar-button {\n width: 0;\n height: 0;\n display: none;\n}\n\n::-webkit-scrollbar-corner {\n background-color: transparent;\n}\n\nheader {\n z-index: 2;\n}\n\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mb-block {\n display: block;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mb-block {\n display: block;\n }\n}\n\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mb-bottom {\n padding-bottom: 110px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mb-bottom {\n padding-bottom: 110px;\n }\n}\n\n.map-filters-container .mck-form-input mat-form-field .mat-form-field-infix {\n top: 5px;\n}\n.map-filters-container .mck-form-input mat-form-field .mat-form-field-outline {\n height: 48px;\n background-color: white;\n}\n.map-filters-container .mck-form-input mat-form-field .mat-form-field-infix {\n padding-top: 0.5rem !important;\n}\n\n.office-level-row .mat-select-placeholder {\n color: #333333;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .office-level-row .legend-container .mat-form-field-outline, .office-level-row .mat-form-field-infix {\n height: 45px !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .office-level-row .legend-container .mat-form-field-outline, .office-level-row .mat-form-field-infix {\n height: 45px !important;\n }\n}\n.office-level-row .select-divider {\n display: block;\n top: 0 !important;\n width: 44px !important;\n right: -11px !important;\n background: transparent !important;\n border-width: 0 0 0 1px;\n border-color: #c6c6c6;\n border-style: solid;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .office-level-row .select-divider {\n height: calc(100% - 1px) !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .office-level-row .select-divider {\n height: calc(100% - 1px) !important;\n }\n}\n.office-level-row .disabled .select-divider {\n background: #F0F0F0 !important;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .office-level-row .disabled .select-divider {\n height: calc(100% - 2px) !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .office-level-row .disabled .select-divider {\n height: calc(100% - 2px) !important;\n }\n}\n.office-level-row .disabled .select-chevron {\n opacity: 0.5;\n margin-left: 10px;\n}\n\n.office-level-row .legend-container .mat-form-field-outline, .office-level-row .mat-form-field-infix, .map-controls .legend-container .mat-form-field-outline, .map-controls .mat-form-field-infix {\n display: flex !important;\n width: 100% !important;\n justify-content: space-between !important;\n}\n\n.booking-form-container {\n overflow-y: auto;\n max-height: calc(100vh - 345px);\n}\n\n.booking-form-container .mck-form-input mat-label, .booking-form-container .mck-form-input .mat-radio-label-content {\n font-family: \"McKinsey Sans\" !important;\n color: #333333;\n}\n.booking-form-container .mck-form-input input, .booking-form-container .mck-form-input input::placeholder {\n font-family: \"McKinsey Sans\";\n color: #B3B3B3;\n}\n\n/*\nStart Angular Calendar\n*/\n.cal-week-view {\n /* stylelint-disable-next-line selector-type-no-unknown */\n}\n\n.cal-week-view * {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n\n.cal-week-view .cal-day-headers {\n display: -webkit-box;\n display: -ms-flexbox;\n -js-display: flex;\n display: flex;\n padding-left: 70px;\n border: 1px solid;\n}\n\n.cal-week-view .cal-day-headers .cal-header {\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n text-align: left;\n padding: 12px;\n margin-top: 20px;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 16px;\n font-weight: 400;\n}\n.cal-week-view .cal-day-headers .cal-header p {\n font-size: 16px;\n font-weight: 300;\n margin: 0;\n}\n.cal-week-view .cal-day-headers .cal-header.show-weekend {\n font-size: 12px;\n}\n.cal-week-view .cal-day-headers .cal-header.show-weekend p {\n font-size: 12px;\n}\n\n.cal-week-view .cal-day-headers .cal-header:not(:last-child) {\n border-right: 1px solid;\n}\n\n.cal-week-view .cal-day-headers .cal-header:first-child {\n border-left: 1px solid;\n}\n\n.cal-week-view .cal-day-headers span {\n font-weight: 400;\n opacity: 0.5;\n}\n\n.cal-week-view .cal-day-column {\n -webkit-box-flex: 1;\n -ms-flex-positive: 1;\n flex-grow: 1;\n border-left: solid 1px;\n padding-top: 5px;\n}\n\n.cal-week-view .cal-event {\n font-size: 12px;\n border: 1px solid;\n outline: none;\n}\n.cal-week-view .cal-event .berry {\n position: absolute;\n left: calc(50% - 7px);\n display: none;\n height: 14px;\n width: 14px;\n background-color: #00A9F4;\n border-radius: 50%;\n}\n.cal-week-view .cal-event .berry.top {\n top: -7px;\n}\n.cal-week-view .cal-event .berry.bot {\n bottom: -7px;\n}\n.cal-week-view .cal-event .bumper {\n position: absolute;\n left: 3px;\n display: block;\n width: calc(100% - 6px);\n border-radius: 3px;\n z-index: -1;\n opacity: 0.6;\n}\n.cal-week-view .cal-event.expanded:focus {\n border-style: dashed;\n border-width: 2px;\n outline: none;\n}\n.cal-week-view .cal-event.expanded:focus .berry {\n display: block;\n}\n\n.cal-week-view .cal-time-label-column {\n width: 70px;\n height: 100%;\n}\n\n.cal-week-view .cal-current-time-marker {\n position: absolute;\n width: 100%;\n height: 2px;\n z-index: 2;\n}\n\n.cal-week-view .cal-all-day-events {\n border: solid 1px;\n border-top: 0;\n border-bottom-width: 3px;\n padding-top: 3px;\n position: relative;\n}\n\n.cal-week-view .cal-all-day-events .cal-day-columns {\n height: 100%;\n width: 100%;\n display: -webkit-box;\n display: -ms-flexbox;\n -js-display: flex;\n display: flex;\n position: absolute;\n top: 0;\n z-index: 0;\n}\n\n.cal-week-view .cal-all-day-events .cal-events-row {\n position: relative;\n height: 31px;\n margin-left: 70px;\n}\n\n.cal-week-view .cal-all-day-events .cal-event-container {\n display: inline-block;\n position: absolute;\n}\n\n.cal-week-view .cal-all-day-events .cal-event-container.resize-active {\n z-index: 1;\n pointer-events: none;\n}\n\n.cal-week-view .cal-all-day-events .cal-event {\n padding: 0 5px;\n margin-left: 2px;\n margin-right: 2px;\n height: 28px;\n line-height: 28px;\n}\n\n.cal-week-view .cal-all-day-events .cal-time-label-column {\n display: -webkit-box;\n display: -ms-flexbox;\n -js-display: flex;\n display: flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n font-size: 14px;\n}\n\n.cal-week-view .cal-all-day-events .cal-resize-handle {\n width: 6px;\n height: 100%;\n cursor: col-resize;\n position: absolute;\n top: 0;\n}\n\n.cal-week-view .cal-all-day-events .cal-resize-handle.cal-resize-handle-after-end {\n right: 0;\n}\n\n.cal-week-view .cal-event,\n.cal-week-view .cal-header {\n overflow: hidden;\n -o-text-overflow: ellipsis;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.cal-week-view .cal-drag-active {\n pointer-events: none;\n z-index: 1;\n}\n\n.cal-week-view .cal-drag-active * {\n pointer-events: none;\n}\n\n.cal-week-view .cal-time-events {\n position: relative;\n border: solid 1px;\n border-top: 0;\n display: -webkit-box;\n display: -ms-flexbox;\n -js-display: flex;\n display: flex;\n}\n\n.cal-week-view .cal-time-events .cal-day-columns {\n display: -webkit-box;\n display: -ms-flexbox;\n -js-display: flex;\n display: flex;\n -webkit-box-flex: 1;\n -ms-flex-positive: 1;\n flex-grow: 1;\n /*\n First and last item's hour visibility adjustment in the list \n */\n}\n.cal-week-view .cal-time-events .cal-day-columns .cal-hour:nth-of-type(2) .cal-time, .cal-week-view .cal-time-events .cal-day-columns .cal-hour:nth-of-type(8) .cal-time {\n top: -9px;\n}\n\n.cal-week-view .cal-time-events .cal-day-column {\n position: relative;\n}\n\n.cal-week-view .cal-time-events .cal-events-container {\n position: relative;\n}\n\n.cal-week-view .cal-time-events .cal-event-container {\n position: absolute;\n z-index: 1;\n}\n\n.cal-week-view .cal-time-events .cal-event {\n overflow: visible;\n width: 103%;\n height: calc(100% - 2px);\n margin: 1px;\n padding: 0 5px;\n line-height: 25px;\n left: -3%;\n position: relative;\n}\n\n.expanded .cal-week-view .cal-time-events .cal-event {\n width: 100%;\n left: 0%;\n}\n\n.cal-week-view .cal-time-events .cal-resize-handle {\n width: 100%;\n height: 8px;\n cursor: row-resize;\n position: absolute;\n z-index: 10;\n}\n\n.cal-week-view .cal-time-events .cal-resize-handle.cal-resize-handle-after-end {\n bottom: -4px;\n}\n\n.cal-week-view .cal-time-events .cal-resize-handle.cal-resize-handle-before-start {\n top: -4px;\n}\n\n.cal-week-view .cal-hour-segment {\n position: relative;\n}\n\n.cal-week-view .cal-hour-segment::after {\n content: \" \";\n}\n\n.cal-week-view .cal-draggable {\n cursor: move;\n}\n\n.cal-week-view mwl-calendar-week-view-hour-segment,\n.cal-week-view .cal-hour-segment {\n display: block;\n}\n\n.cal-week-view .cal-hour .cal-time {\n z-index: 2;\n position: relative;\n top: -14px;\n background-color: #f4f4f4;\n height: 5rem;\n width: 4rem;\n border-right: 1px solid #A19F9F;\n border-width: thin;\n}\n.cal-week-view .cal-hour .cal-hour-start {\n border: none !important;\n}\n\n.expanded .cal-week-view .cal-hour .cal-time {\n background-color: #f8f9fa;\n width: 4.44rem;\n}\n\n.cal-week-view .cal-hour:not(:last-child) .cal-hour-segment,\n.cal-week-view .cal-hour:last-child :not(:last-child) .cal-hour-segment {\n border-bottom: thin solid;\n border-color: #DBDBDB;\n}\n\n.cal-week-view .cal-time {\n font-weight: bold;\n padding-top: 5px;\n width: 70px;\n text-align: center;\n}\n\n.cal-week-view .cal-hour-segment.cal-after-hour-start .cal-time {\n display: none;\n}\n\n.cal-week-view {\n background-color: #fff;\n border-top: solid 1px #e1e1e1;\n}\n\n.cal-week-view .cal-day-headers {\n border-color: #e1e1e1;\n border-top: 0;\n border-left-width: 0;\n border-right-width: 0;\n}\n\n.cal-week-view .cal-day-headers .cal-header:not(:last-child) {\n border-right-color: #e1e1e1;\n}\n\n.cal-week-view .cal-day-headers .cal-header:first-child {\n border-left-color: #e1e1e1;\n}\n\n.cal-week-view .cal-day-column {\n border-left-color: #e1e1e1;\n}\n\n.cal-week-view .cal-event {\n background-color: #d1e8ff;\n border-color: #1e90ff;\n color: #1e90ff;\n}\n\n.cal-week-view .cal-all-day-events {\n border-color: #e1e1e1;\n}\n\n.cal-week-view .cal-header.cal-event-date {\n color: #2251FF;\n}\n\n.cal-week-view .cal-header.cal-weekend span {\n color: #8b0000;\n}\n\n.cal-week-view .cal-time-events {\n border-color: #e1e1e1;\n}\n\n.expanded .cal-week-view .cal-time-events .cal-day-columns:not(.cal-resize-active) .cal-hour-segment:hover {\n background-color: #C0DBF5;\n}\n\n.cal-week-view .cal-hour-odd {\n background-color: #fafafa;\n}\n\n.cal-week-view .cal-drag-over .cal-hour-segment {\n background-color: #ededed;\n}\n\n.cal-week-view .cal-hour:not(:last-child) .cal-hour-segment,\n.cal-week-view .cal-hour:last-child :not(:last-child) .cal-hour-segment {\n border-bottom-color: #e1e1e1;\n}\n\n.cal-week-view .cal-current-time-marker {\n display: none;\n}\n\n.cal-day-view mwl-calendar-week-view-header {\n display: none;\n}\n\n.cal-day-view .cal-events-container {\n margin-left: 70px;\n}\n\n.cal-day-view .cal-day-column {\n border-left: 0;\n}\n\n.cal-day-view .cal-current-time-marker {\n margin-left: 70px;\n width: calc(100% - 70px);\n}\n\n.cal-tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.5;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n font-size: 14px;\n word-wrap: break-word;\n opacity: 0.9;\n margin-bottom: 4px;\n}\n\n.cal-tooltip.cal-tooltip-top {\n padding: 5px 0;\n margin-top: -3px;\n}\n\n.cal-tooltip.cal-tooltip-top .cal-tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n}\n\n.cal-tooltip.cal-tooltip-right {\n padding: 0 5px;\n margin-left: 3px;\n}\n\n.cal-tooltip.cal-tooltip-right .cal-tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n}\n\n.cal-tooltip.cal-tooltip-bottom {\n padding: 5px 0;\n margin-top: 3px;\n}\n\n.cal-tooltip.cal-tooltip-bottom .cal-tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n}\n\n.cal-tooltip.cal-tooltip-left {\n padding: 0 5px;\n margin-left: -3px;\n}\n\n.cal-tooltip.cal-tooltip-left .cal-tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n}\n\n.cal-tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n text-align: center;\n border-radius: 0.25rem;\n}\n\n.cal-tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n\n.cal-tooltip.cal-tooltip-top .cal-tooltip-arrow {\n border-top-color: #fff;\n}\n\n.cal-tooltip.cal-tooltip-right .cal-tooltip-arrow {\n border-right-color: #fff;\n}\n\n.cal-tooltip.cal-tooltip-bottom .cal-tooltip-arrow {\n border-bottom-color: #fff;\n}\n\n.cal-tooltip.cal-tooltip-left .cal-tooltip-arrow {\n border-left-color: #fff;\n}\n\n.cal-tooltip-inner {\n padding: 10px;\n color: #000;\n background-color: #fff;\n box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.2);\n}\n\n.cal-event-container .cal-event {\n border-radius: 0 !important;\n}\n.cal-event-container .cal-event .cal-event-title {\n font-size: 14px;\n font-weight: 400;\n padding: 10px 14px;\n color: black;\n display: block;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .cal-event-container .cal-event .cal-event-title {\n font-size: 12px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .cal-event-container .cal-event .cal-event-title {\n font-size: 12px;\n }\n}\n.cal-event-container.selected {\n width: 100% !important;\n left: 0% !important;\n z-index: 2 !important;\n}\n.cal-event-container.selected .cal-event {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.cal-event-container.selected .cal-event .cal-event-title {\n white-space: pre-wrap;\n text-align: center;\n}\n.cal-event-container.selected.mobile {\n left: 0% !important;\n width: 100% !important;\n}\n.cal-event-container.selected.minimal .cal-event-title {\n top: 0;\n transform: none;\n}\n.cal-event-container.mobile {\n left: 0% !important;\n width: 100% !important;\n}\n.cal-event-container.booked {\n width: 100% !important;\n left: 0% !important;\n}\n.cal-event-container.booked .cal-event .cal-event-title {\n width: 100%;\n}\n.cal-event-container.booked.mobile {\n left: 0% !important;\n width: 100% !important;\n}\n.cal-event-container.booked.minimal .cal-event-title {\n padding: 1px 14px;\n}\n.cal-event-container.show-weekend .cal-event .cal-event-title {\n font-size: 13px;\n}\n\n.cal-week-view {\n position: relative;\n}\n.cal-week-view .cal-time {\n font-weight: 400;\n}\n.cal-week-view .cal-hour {\n background-color: #ffffff;\n}\n.cal-week-view .cal-hour-odd {\n background-color: #ffffff;\n}\n.cal-week-view .cal-time-events {\n background-color: #ffffff;\n}\n\n.cal-week-view .cal-day-headers {\n position: fixed;\n width: 100%;\n max-width: 1008px;\n background: #F8F9FA;\n z-index: 3;\n height: 82px;\n}\n@media only screen and (orientation: portrait) and (min-width: 801px) and (max-width: 1024px) {\n .cal-week-view .cal-day-headers {\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1049px) and (max-width: 1280px) {\n .cal-week-view .cal-day-headers {\n width: 100%;\n }\n}\n\n.expanded .cal-week-view .cal-time-events {\n padding-top: 87px;\n position: relative;\n top: 1px;\n z-index: 1;\n border: 1px solid #f0f0f0;\n}\n.expanded .cal-event-container.mobile {\n left: 20% !important;\n width: 80% !important;\n}\n\n/*\nEnd Start Angular Calendar\n*/\n.mat-ripple-element {\n background-color: rgba(0, 0, 0, 0.1);\n}\n\n.mat-option {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-option:hover:not(.mat-option-disabled), .mat-option:focus:not(.mat-option-disabled) {\n background: rgba(0, 0, 0, 0.04);\n}\n.mat-option.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled) {\n background: rgba(0, 0, 0, 0.04);\n}\n.mat-option.mat-active {\n background: rgba(0, 0, 0, 0.04);\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-option.mat-option-disabled {\n color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-primary .mat-option.mat-selected:not(.mat-option-disabled) {\n color: #3f51b5;\n}\n\n.mat-accent .mat-option.mat-selected:not(.mat-option-disabled) {\n color: #448aff;\n}\n\n.mat-warn .mat-option.mat-selected:not(.mat-option-disabled) {\n color: #f44336;\n}\n\n.mat-optgroup-label {\n color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-optgroup-disabled .mat-optgroup-label {\n color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-pseudo-checkbox {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-pseudo-checkbox::after {\n color: #fafafa;\n}\n\n.mat-pseudo-checkbox-disabled {\n color: #b0b0b0;\n}\n\n.mat-primary .mat-pseudo-checkbox-checked,\n.mat-primary .mat-pseudo-checkbox-indeterminate {\n background: #3f51b5;\n}\n\n.mat-pseudo-checkbox-checked,\n.mat-pseudo-checkbox-indeterminate,\n.mat-accent .mat-pseudo-checkbox-checked,\n.mat-accent .mat-pseudo-checkbox-indeterminate {\n background: #448aff;\n}\n\n.mat-warn .mat-pseudo-checkbox-checked,\n.mat-warn .mat-pseudo-checkbox-indeterminate {\n background: #f44336;\n}\n\n.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,\n.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled {\n background: #b0b0b0;\n}\n\n.mat-elevation-z0 {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z1 {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z2 {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z3 {\n box-shadow: 0px 3px 3px -2px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 0, 0, 0.14), 0px 1px 8px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z4 {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z5 {\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 5px 8px 0px rgba(0, 0, 0, 0.14), 0px 1px 14px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z6 {\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z7 {\n box-shadow: 0px 4px 5px -2px rgba(0, 0, 0, 0.2), 0px 7px 10px 1px rgba(0, 0, 0, 0.14), 0px 2px 16px 1px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z8 {\n box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z9 {\n box-shadow: 0px 5px 6px -3px rgba(0, 0, 0, 0.2), 0px 9px 12px 1px rgba(0, 0, 0, 0.14), 0px 3px 16px 2px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z10 {\n box-shadow: 0px 6px 6px -3px rgba(0, 0, 0, 0.2), 0px 10px 14px 1px rgba(0, 0, 0, 0.14), 0px 4px 18px 3px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z11 {\n box-shadow: 0px 6px 7px -4px rgba(0, 0, 0, 0.2), 0px 11px 15px 1px rgba(0, 0, 0, 0.14), 0px 4px 20px 3px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z12 {\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z13 {\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 13px 19px 2px rgba(0, 0, 0, 0.14), 0px 5px 24px 4px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z14 {\n box-shadow: 0px 7px 9px -4px rgba(0, 0, 0, 0.2), 0px 14px 21px 2px rgba(0, 0, 0, 0.14), 0px 5px 26px 4px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z15 {\n box-shadow: 0px 8px 9px -5px rgba(0, 0, 0, 0.2), 0px 15px 22px 2px rgba(0, 0, 0, 0.14), 0px 6px 28px 5px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z16 {\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z17 {\n box-shadow: 0px 8px 11px -5px rgba(0, 0, 0, 0.2), 0px 17px 26px 2px rgba(0, 0, 0, 0.14), 0px 6px 32px 5px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z18 {\n box-shadow: 0px 9px 11px -5px rgba(0, 0, 0, 0.2), 0px 18px 28px 2px rgba(0, 0, 0, 0.14), 0px 7px 34px 6px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z19 {\n box-shadow: 0px 9px 12px -6px rgba(0, 0, 0, 0.2), 0px 19px 29px 2px rgba(0, 0, 0, 0.14), 0px 7px 36px 6px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z20 {\n box-shadow: 0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 20px 31px 3px rgba(0, 0, 0, 0.14), 0px 8px 38px 7px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z21 {\n box-shadow: 0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 21px 33px 3px rgba(0, 0, 0, 0.14), 0px 8px 40px 7px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z22 {\n box-shadow: 0px 10px 14px -6px rgba(0, 0, 0, 0.2), 0px 22px 35px 3px rgba(0, 0, 0, 0.14), 0px 8px 42px 7px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z23 {\n box-shadow: 0px 11px 14px -7px rgba(0, 0, 0, 0.2), 0px 23px 36px 3px rgba(0, 0, 0, 0.14), 0px 9px 44px 8px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z24 {\n box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12);\n}\n\n.mat-app-background {\n background-color: #fafafa;\n color: rgba(0, 0, 0, 0.87);\n}\n\n.mat-theme-loaded-marker {\n display: none;\n}\n\n.mat-autocomplete-panel {\n background: white;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-autocomplete-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover) {\n background: white;\n}\n.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover):not(.mat-option-disabled) {\n color: rgba(0, 0, 0, 0.87);\n}\n\n.mat-badge-content {\n color: white;\n background: #3f51b5;\n}\n.cdk-high-contrast-active .mat-badge-content {\n outline: solid 1px;\n border-radius: 0;\n}\n\n.mat-badge-accent .mat-badge-content {\n background: #448aff;\n color: white;\n}\n\n.mat-badge-warn .mat-badge-content {\n color: white;\n background: #f44336;\n}\n\n.mat-badge {\n position: relative;\n}\n\n.mat-badge-hidden .mat-badge-content {\n display: none;\n}\n\n.mat-badge-disabled .mat-badge-content {\n background: #b9b9b9;\n color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-badge-content {\n position: absolute;\n text-align: center;\n display: inline-block;\n border-radius: 50%;\n transition: transform 200ms ease-in-out;\n transform: scale(0.6);\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n pointer-events: none;\n}\n\n.ng-animate-disabled .mat-badge-content,\n.mat-badge-content._mat-animation-noopable {\n transition: none;\n}\n\n.mat-badge-content.mat-badge-active {\n transform: none;\n}\n\n.mat-badge-small .mat-badge-content {\n width: 16px;\n height: 16px;\n line-height: 16px;\n}\n.mat-badge-small.mat-badge-above .mat-badge-content {\n top: -8px;\n}\n.mat-badge-small.mat-badge-below .mat-badge-content {\n bottom: -8px;\n}\n.mat-badge-small.mat-badge-before .mat-badge-content {\n left: -16px;\n}\n[dir=rtl] .mat-badge-small.mat-badge-before .mat-badge-content {\n left: auto;\n right: -16px;\n}\n.mat-badge-small.mat-badge-after .mat-badge-content {\n right: -16px;\n}\n[dir=rtl] .mat-badge-small.mat-badge-after .mat-badge-content {\n right: auto;\n left: -16px;\n}\n.mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: -8px;\n}\n[dir=rtl] .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: auto;\n right: -8px;\n}\n.mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: -8px;\n}\n[dir=rtl] .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: auto;\n left: -8px;\n}\n\n.mat-badge-medium .mat-badge-content {\n width: 22px;\n height: 22px;\n line-height: 22px;\n}\n.mat-badge-medium.mat-badge-above .mat-badge-content {\n top: -11px;\n}\n.mat-badge-medium.mat-badge-below .mat-badge-content {\n bottom: -11px;\n}\n.mat-badge-medium.mat-badge-before .mat-badge-content {\n left: -22px;\n}\n[dir=rtl] .mat-badge-medium.mat-badge-before .mat-badge-content {\n left: auto;\n right: -22px;\n}\n.mat-badge-medium.mat-badge-after .mat-badge-content {\n right: -22px;\n}\n[dir=rtl] .mat-badge-medium.mat-badge-after .mat-badge-content {\n right: auto;\n left: -22px;\n}\n.mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: -11px;\n}\n[dir=rtl] .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: auto;\n right: -11px;\n}\n.mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: -11px;\n}\n[dir=rtl] .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: auto;\n left: -11px;\n}\n\n.mat-badge-large .mat-badge-content {\n width: 28px;\n height: 28px;\n line-height: 28px;\n}\n.mat-badge-large.mat-badge-above .mat-badge-content {\n top: -14px;\n}\n.mat-badge-large.mat-badge-below .mat-badge-content {\n bottom: -14px;\n}\n.mat-badge-large.mat-badge-before .mat-badge-content {\n left: -28px;\n}\n[dir=rtl] .mat-badge-large.mat-badge-before .mat-badge-content {\n left: auto;\n right: -28px;\n}\n.mat-badge-large.mat-badge-after .mat-badge-content {\n right: -28px;\n}\n[dir=rtl] .mat-badge-large.mat-badge-after .mat-badge-content {\n right: auto;\n left: -28px;\n}\n.mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: -14px;\n}\n[dir=rtl] .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: auto;\n right: -14px;\n}\n.mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: -14px;\n}\n[dir=rtl] .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: auto;\n left: -14px;\n}\n\n.mat-bottom-sheet-container {\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\n background: white;\n color: rgba(0, 0, 0, 0.87);\n}\n\n.mat-button, .mat-icon-button, .mat-stroked-button {\n color: inherit;\n background: transparent;\n}\n.mat-button.mat-primary, .mat-icon-button.mat-primary, .mat-stroked-button.mat-primary {\n color: #3f51b5;\n}\n.mat-button.mat-accent, .mat-icon-button.mat-accent, .mat-stroked-button.mat-accent {\n color: #448aff;\n}\n.mat-button.mat-warn, .mat-icon-button.mat-warn, .mat-stroked-button.mat-warn {\n color: #f44336;\n}\n.mat-button.mat-primary[disabled], .mat-button.mat-accent[disabled], .mat-button.mat-warn[disabled], .mat-button[disabled][disabled], .mat-icon-button.mat-primary[disabled], .mat-icon-button.mat-accent[disabled], .mat-icon-button.mat-warn[disabled], .mat-icon-button[disabled][disabled], .mat-stroked-button.mat-primary[disabled], .mat-stroked-button.mat-accent[disabled], .mat-stroked-button.mat-warn[disabled], .mat-stroked-button[disabled][disabled] {\n color: rgba(0, 0, 0, 0.26);\n}\n.mat-button.mat-primary .mat-button-focus-overlay, .mat-icon-button.mat-primary .mat-button-focus-overlay, .mat-stroked-button.mat-primary .mat-button-focus-overlay {\n background-color: #3f51b5;\n}\n.mat-button.mat-accent .mat-button-focus-overlay, .mat-icon-button.mat-accent .mat-button-focus-overlay, .mat-stroked-button.mat-accent .mat-button-focus-overlay {\n background-color: #448aff;\n}\n.mat-button.mat-warn .mat-button-focus-overlay, .mat-icon-button.mat-warn .mat-button-focus-overlay, .mat-stroked-button.mat-warn .mat-button-focus-overlay {\n background-color: #f44336;\n}\n.mat-button[disabled] .mat-button-focus-overlay, .mat-icon-button[disabled] .mat-button-focus-overlay, .mat-stroked-button[disabled] .mat-button-focus-overlay {\n background-color: transparent;\n}\n.mat-button .mat-ripple-element, .mat-icon-button .mat-ripple-element, .mat-stroked-button .mat-ripple-element {\n opacity: 0.1;\n background-color: currentColor;\n}\n\n.mat-button-focus-overlay {\n background: black;\n}\n\n.mat-stroked-button:not([disabled]) {\n border-color: rgba(0, 0, 0, 0.12);\n}\n\n.mat-flat-button, .mat-raised-button, .mat-fab, .mat-mini-fab {\n color: rgba(0, 0, 0, 0.87);\n background-color: white;\n}\n.mat-flat-button.mat-primary, .mat-raised-button.mat-primary, .mat-fab.mat-primary, .mat-mini-fab.mat-primary {\n color: white;\n}\n.mat-flat-button.mat-accent, .mat-raised-button.mat-accent, .mat-fab.mat-accent, .mat-mini-fab.mat-accent {\n color: white;\n}\n.mat-flat-button.mat-warn, .mat-raised-button.mat-warn, .mat-fab.mat-warn, .mat-mini-fab.mat-warn {\n color: white;\n}\n.mat-flat-button.mat-primary[disabled], .mat-flat-button.mat-accent[disabled], .mat-flat-button.mat-warn[disabled], .mat-flat-button[disabled][disabled], .mat-raised-button.mat-primary[disabled], .mat-raised-button.mat-accent[disabled], .mat-raised-button.mat-warn[disabled], .mat-raised-button[disabled][disabled], .mat-fab.mat-primary[disabled], .mat-fab.mat-accent[disabled], .mat-fab.mat-warn[disabled], .mat-fab[disabled][disabled], .mat-mini-fab.mat-primary[disabled], .mat-mini-fab.mat-accent[disabled], .mat-mini-fab.mat-warn[disabled], .mat-mini-fab[disabled][disabled] {\n color: rgba(0, 0, 0, 0.26);\n}\n.mat-flat-button.mat-primary, .mat-raised-button.mat-primary, .mat-fab.mat-primary, .mat-mini-fab.mat-primary {\n background-color: #3f51b5;\n}\n.mat-flat-button.mat-accent, .mat-raised-button.mat-accent, .mat-fab.mat-accent, .mat-mini-fab.mat-accent {\n background-color: #448aff;\n}\n.mat-flat-button.mat-warn, .mat-raised-button.mat-warn, .mat-fab.mat-warn, .mat-mini-fab.mat-warn {\n background-color: #f44336;\n}\n.mat-flat-button.mat-primary[disabled], .mat-flat-button.mat-accent[disabled], .mat-flat-button.mat-warn[disabled], .mat-flat-button[disabled][disabled], .mat-raised-button.mat-primary[disabled], .mat-raised-button.mat-accent[disabled], .mat-raised-button.mat-warn[disabled], .mat-raised-button[disabled][disabled], .mat-fab.mat-primary[disabled], .mat-fab.mat-accent[disabled], .mat-fab.mat-warn[disabled], .mat-fab[disabled][disabled], .mat-mini-fab.mat-primary[disabled], .mat-mini-fab.mat-accent[disabled], .mat-mini-fab.mat-warn[disabled], .mat-mini-fab[disabled][disabled] {\n background-color: rgba(0, 0, 0, 0.12);\n}\n.mat-flat-button.mat-primary .mat-ripple-element, .mat-raised-button.mat-primary .mat-ripple-element, .mat-fab.mat-primary .mat-ripple-element, .mat-mini-fab.mat-primary .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.mat-flat-button.mat-accent .mat-ripple-element, .mat-raised-button.mat-accent .mat-ripple-element, .mat-fab.mat-accent .mat-ripple-element, .mat-mini-fab.mat-accent .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.mat-flat-button.mat-warn .mat-ripple-element, .mat-raised-button.mat-warn .mat-ripple-element, .mat-fab.mat-warn .mat-ripple-element, .mat-mini-fab.mat-warn .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n\n.mat-stroked-button:not([class*=mat-elevation-z]), .mat-flat-button:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-raised-button:not([class*=mat-elevation-z]) {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-raised-button:not([disabled]):active:not([class*=mat-elevation-z]) {\n box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);\n}\n.mat-raised-button[disabled]:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-fab:not([class*=mat-elevation-z]), .mat-mini-fab:not([class*=mat-elevation-z]) {\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-fab:not([disabled]):active:not([class*=mat-elevation-z]), .mat-mini-fab:not([disabled]):active:not([class*=mat-elevation-z]) {\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);\n}\n.mat-fab[disabled]:not([class*=mat-elevation-z]), .mat-mini-fab[disabled]:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-button-toggle-standalone,\n.mat-button-toggle-group {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\n.mat-button-toggle-group-appearance-standard {\n box-shadow: none;\n}\n\n.mat-button-toggle {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-button-toggle .mat-button-toggle-focus-overlay {\n background-color: rgba(0, 0, 0, 0.12);\n}\n\n.mat-button-toggle-appearance-standard {\n color: rgba(0, 0, 0, 0.87);\n background: white;\n}\n.mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay {\n background-color: black;\n}\n\n.mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\n border-left: solid 1px rgba(0, 0, 0, 0.12);\n}\n\n[dir=rtl] .mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\n border-left: none;\n border-right: solid 1px rgba(0, 0, 0, 0.12);\n}\n\n.mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle + .mat-button-toggle {\n border-left: none;\n border-right: none;\n border-top: solid 1px rgba(0, 0, 0, 0.12);\n}\n\n.mat-button-toggle-checked {\n background-color: #e0e0e0;\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-button-toggle-checked.mat-button-toggle-appearance-standard {\n color: rgba(0, 0, 0, 0.87);\n}\n\n.mat-button-toggle-disabled {\n color: rgba(0, 0, 0, 0.26);\n background-color: #eeeeee;\n}\n.mat-button-toggle-disabled.mat-button-toggle-appearance-standard {\n background: white;\n}\n.mat-button-toggle-disabled.mat-button-toggle-checked {\n background-color: #bdbdbd;\n}\n\n.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\n.mat-button-toggle-group-appearance-standard {\n border: solid 1px rgba(0, 0, 0, 0.12);\n}\n\n.mat-card {\n background: white;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-card:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-card.mat-card-flat:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-card-subtitle {\n color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-checkbox-frame {\n border-color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-checkbox-checkmark {\n fill: #fafafa;\n}\n\n.mat-checkbox-checkmark-path {\n stroke: #fafafa !important;\n}\n\n.mat-checkbox-mixedmark {\n background-color: #fafafa;\n}\n\n.mat-checkbox-indeterminate.mat-primary .mat-checkbox-background, .mat-checkbox-checked.mat-primary .mat-checkbox-background {\n background-color: #3f51b5;\n}\n.mat-checkbox-indeterminate.mat-accent .mat-checkbox-background, .mat-checkbox-checked.mat-accent .mat-checkbox-background {\n background-color: #448aff;\n}\n.mat-checkbox-indeterminate.mat-warn .mat-checkbox-background, .mat-checkbox-checked.mat-warn .mat-checkbox-background {\n background-color: #f44336;\n}\n\n.mat-checkbox-disabled.mat-checkbox-checked .mat-checkbox-background, .mat-checkbox-disabled.mat-checkbox-indeterminate .mat-checkbox-background {\n background-color: #b0b0b0;\n}\n.mat-checkbox-disabled:not(.mat-checkbox-checked) .mat-checkbox-frame {\n border-color: #b0b0b0;\n}\n.mat-checkbox-disabled .mat-checkbox-label {\n color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-checkbox .mat-ripple-element {\n background-color: black;\n}\n\n.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element,\n.mat-checkbox:active:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element {\n background: #3f51b5;\n}\n.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element,\n.mat-checkbox:active:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element {\n background: #448aff;\n}\n.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element,\n.mat-checkbox:active:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element {\n background: #f44336;\n}\n\n.mat-chip.mat-standard-chip {\n background-color: #e0e0e0;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-chip.mat-standard-chip .mat-chip-remove {\n color: rgba(0, 0, 0, 0.87);\n opacity: 0.4;\n}\n.mat-chip.mat-standard-chip:not(.mat-chip-disabled):active {\n box-shadow: 0px 3px 3px -2px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 0, 0, 0.14), 0px 1px 8px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-chip.mat-standard-chip:not(.mat-chip-disabled) .mat-chip-remove:hover {\n opacity: 0.54;\n}\n.mat-chip.mat-standard-chip.mat-chip-disabled {\n opacity: 0.4;\n}\n.mat-chip.mat-standard-chip::after {\n background: black;\n}\n\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary {\n background-color: #3f51b5;\n color: white;\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-chip-remove {\n color: white;\n opacity: 0.4;\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn {\n background-color: #f44336;\n color: white;\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-chip-remove {\n color: white;\n opacity: 0.4;\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent {\n background-color: #448aff;\n color: white;\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-chip-remove {\n color: white;\n opacity: 0.4;\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n\n.mat-table {\n background: white;\n}\n\n.mat-table thead, .mat-table tbody, .mat-table tfoot,\nmat-header-row, mat-row, mat-footer-row,\n[mat-header-row], [mat-row], [mat-footer-row],\n.mat-table-sticky {\n background: inherit;\n}\n\nmat-row, mat-header-row, mat-footer-row,\nth.mat-header-cell, td.mat-cell, td.mat-footer-cell {\n border-bottom-color: rgba(0, 0, 0, 0.12);\n}\n\n.mat-header-cell {\n color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-cell, .mat-footer-cell {\n color: rgba(0, 0, 0, 0.87);\n}\n\n.mat-calendar-arrow {\n border-top-color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-datepicker-toggle,\n.mat-datepicker-content .mat-calendar-next-button,\n.mat-datepicker-content .mat-calendar-previous-button {\n color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-calendar-table-header {\n color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-calendar-table-header-divider::after {\n background: rgba(0, 0, 0, 0.12);\n}\n\n.mat-calendar-body-label {\n color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-calendar-body-cell-content {\n color: rgba(0, 0, 0, 0.87);\n border-color: transparent;\n}\n\n.mat-calendar-body-disabled > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\n color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected),\n.cdk-keyboard-focused .mat-calendar-body-active > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected),\n.cdk-program-focused .mat-calendar-body-active > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\n background-color: rgba(0, 0, 0, 0.04);\n}\n\n.mat-calendar-body-today:not(.mat-calendar-body-selected) {\n border-color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-calendar-body-disabled > .mat-calendar-body-today:not(.mat-calendar-body-selected) {\n border-color: rgba(0, 0, 0, 0.18);\n}\n\n.mat-calendar-body-selected {\n background-color: #3f51b5;\n color: white;\n}\n\n.mat-calendar-body-disabled > .mat-calendar-body-selected {\n background-color: rgba(63, 81, 181, 0.4);\n}\n\n.mat-calendar-body-today.mat-calendar-body-selected {\n box-shadow: inset 0 0 0 1px white;\n}\n\n.mat-datepicker-content {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n background-color: white;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-datepicker-content.mat-accent .mat-calendar-body-selected {\n background-color: #448aff;\n color: white;\n}\n.mat-datepicker-content.mat-accent .mat-calendar-body-disabled > .mat-calendar-body-selected {\n background-color: rgba(68, 138, 255, 0.4);\n}\n.mat-datepicker-content.mat-accent .mat-calendar-body-today.mat-calendar-body-selected {\n box-shadow: inset 0 0 0 1px white;\n}\n.mat-datepicker-content.mat-warn .mat-calendar-body-selected {\n background-color: #f44336;\n color: white;\n}\n.mat-datepicker-content.mat-warn .mat-calendar-body-disabled > .mat-calendar-body-selected {\n background-color: rgba(244, 67, 54, 0.4);\n}\n.mat-datepicker-content.mat-warn .mat-calendar-body-today.mat-calendar-body-selected {\n box-shadow: inset 0 0 0 1px white;\n}\n\n.mat-datepicker-content-touch {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-datepicker-toggle-active {\n color: #3f51b5;\n}\n.mat-datepicker-toggle-active.mat-accent {\n color: #448aff;\n}\n.mat-datepicker-toggle-active.mat-warn {\n color: #f44336;\n}\n\n.mat-dialog-container {\n box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12);\n background: white;\n color: rgba(0, 0, 0, 0.87);\n}\n\n.mat-divider {\n border-top-color: rgba(0, 0, 0, 0.12);\n}\n\n.mat-divider-vertical {\n border-right-color: rgba(0, 0, 0, 0.12);\n}\n\n.mat-expansion-panel {\n background: white;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-expansion-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-action-row {\n border-top-color: rgba(0, 0, 0, 0.12);\n}\n\n.mat-expansion-panel .mat-expansion-panel-header.cdk-keyboard-focused:not([aria-disabled=true]), .mat-expansion-panel .mat-expansion-panel-header.cdk-program-focused:not([aria-disabled=true]), .mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover:not([aria-disabled=true]) {\n background: rgba(0, 0, 0, 0.04);\n}\n\n@media (hover: none) {\n .mat-expansion-panel:not(.mat-expanded):not([aria-disabled=true]) .mat-expansion-panel-header:hover {\n background: white;\n }\n}\n.mat-expansion-panel-header-title {\n color: rgba(0, 0, 0, 0.87);\n}\n\n.mat-expansion-panel-header-description,\n.mat-expansion-indicator::after {\n color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-expansion-panel-header[aria-disabled=true] {\n color: rgba(0, 0, 0, 0.26);\n}\n.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title,\n.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description {\n color: inherit;\n}\n\n.mat-form-field-label {\n color: rgba(0, 0, 0, 0.6);\n}\n\n.mat-hint {\n color: rgba(0, 0, 0, 0.6);\n}\n\n.mat-form-field.mat-focused .mat-form-field-label {\n color: #3f51b5;\n}\n.mat-form-field.mat-focused .mat-form-field-label.mat-accent {\n color: #448aff;\n}\n.mat-form-field.mat-focused .mat-form-field-label.mat-warn {\n color: #f44336;\n}\n\n.mat-focused .mat-form-field-required-marker {\n color: #448aff;\n}\n\n.mat-form-field-ripple {\n background-color: rgba(0, 0, 0, 0.87);\n}\n\n.mat-form-field.mat-focused .mat-form-field-ripple {\n background-color: #3f51b5;\n}\n.mat-form-field.mat-focused .mat-form-field-ripple.mat-accent {\n background-color: #448aff;\n}\n.mat-form-field.mat-focused .mat-form-field-ripple.mat-warn {\n background-color: #f44336;\n}\n\n.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid) .mat-form-field-infix::after {\n color: #3f51b5;\n}\n.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-accent .mat-form-field-infix::after {\n color: #448aff;\n}\n.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-warn .mat-form-field-infix::after {\n color: #f44336;\n}\n\n.mat-form-field.mat-form-field-invalid .mat-form-field-label {\n color: #f44336;\n}\n.mat-form-field.mat-form-field-invalid .mat-form-field-label.mat-accent,\n.mat-form-field.mat-form-field-invalid .mat-form-field-label .mat-form-field-required-marker {\n color: #f44336;\n}\n.mat-form-field.mat-form-field-invalid .mat-form-field-ripple,\n.mat-form-field.mat-form-field-invalid .mat-form-field-ripple.mat-accent {\n background-color: #f44336;\n}\n\n.mat-error {\n color: #f44336;\n}\n\n.mat-form-field-appearance-legacy .mat-form-field-label {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-form-field-appearance-legacy .mat-hint {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-form-field-appearance-legacy .mat-form-field-underline {\n background-color: rgba(0, 0, 0, 0.42);\n}\n.mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline {\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.42) 0%, rgba(0, 0, 0, 0.42) 33%, transparent 0%);\n background-size: 4px 100%;\n background-repeat: repeat-x;\n}\n\n.mat-form-field-appearance-standard .mat-form-field-underline {\n background-color: rgba(0, 0, 0, 0.42);\n}\n.mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline {\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.42) 0%, rgba(0, 0, 0, 0.42) 33%, transparent 0%);\n background-size: 4px 100%;\n background-repeat: repeat-x;\n}\n\n.mat-form-field-appearance-fill .mat-form-field-flex {\n background-color: rgba(0, 0, 0, 0.04);\n}\n.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-flex {\n background-color: rgba(0, 0, 0, 0.02);\n}\n.mat-form-field-appearance-fill .mat-form-field-underline::before {\n background-color: rgba(0, 0, 0, 0.42);\n}\n.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-label {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-underline::before {\n background-color: transparent;\n}\n\n.mat-form-field-appearance-outline .mat-form-field-outline {\n color: rgba(0, 0, 0, 0.12);\n}\n.mat-form-field-appearance-outline .mat-form-field-outline-thick {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick {\n color: #3f51b5;\n}\n.mat-form-field-appearance-outline.mat-focused.mat-accent .mat-form-field-outline-thick {\n color: #448aff;\n}\n.mat-form-field-appearance-outline.mat-focused.mat-warn .mat-form-field-outline-thick {\n color: #f44336;\n}\n.mat-form-field-appearance-outline.mat-form-field-invalid.mat-form-field-invalid .mat-form-field-outline-thick {\n color: #f44336;\n}\n.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-label {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline {\n color: rgba(0, 0, 0, 0.06);\n}\n\n.mat-icon.mat-primary {\n color: #3f51b5;\n}\n.mat-icon.mat-accent {\n color: #448aff;\n}\n.mat-icon.mat-warn {\n color: #f44336;\n}\n\n.mat-form-field-type-mat-native-select .mat-form-field-infix::after {\n color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-input-element:disabled,\n.mat-form-field-type-mat-native-select.mat-form-field-disabled .mat-form-field-infix::after {\n color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-input-element {\n caret-color: #3f51b5;\n}\n.mat-input-element::placeholder {\n color: rgba(0, 0, 0, 0.42);\n}\n.mat-input-element::-moz-placeholder {\n color: rgba(0, 0, 0, 0.42);\n}\n.mat-input-element::-webkit-input-placeholder {\n color: rgba(0, 0, 0, 0.42);\n}\n.mat-input-element:-ms-input-placeholder {\n color: rgba(0, 0, 0, 0.42);\n}\n\n.mat-accent .mat-input-element {\n caret-color: #448aff;\n}\n\n.mat-warn .mat-input-element,\n.mat-form-field-invalid .mat-input-element {\n caret-color: #f44336;\n}\n\n.mat-form-field-type-mat-native-select.mat-form-field-invalid .mat-form-field-infix::after {\n color: #f44336;\n}\n\n.mat-list-base .mat-list-item {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-list-base .mat-list-option {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-list-base .mat-subheader {\n color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-list-item-disabled {\n background-color: #eeeeee;\n}\n\n.mat-list-option:hover, .mat-list-option:focus,\n.mat-nav-list .mat-list-item:hover,\n.mat-nav-list .mat-list-item:focus,\n.mat-action-list .mat-list-item:hover,\n.mat-action-list .mat-list-item:focus {\n background: rgba(0, 0, 0, 0.04);\n}\n\n.mat-list-single-selected-option, .mat-list-single-selected-option:hover, .mat-list-single-selected-option:focus {\n background: rgba(0, 0, 0, 0.12);\n}\n\n.mat-menu-panel {\n background: white;\n}\n.mat-menu-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-menu-item {\n background: transparent;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-menu-item[disabled], .mat-menu-item[disabled]::after {\n color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-menu-item .mat-icon-no-color,\n.mat-menu-item-submenu-trigger::after {\n color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-menu-item:hover:not([disabled]),\n.mat-menu-item.cdk-program-focused:not([disabled]),\n.mat-menu-item.cdk-keyboard-focused:not([disabled]),\n.mat-menu-item-highlighted:not([disabled]) {\n background: rgba(0, 0, 0, 0.04);\n}\n\n.mat-paginator {\n background: white;\n}\n\n.mat-paginator,\n.mat-paginator-page-size .mat-select-trigger {\n color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-paginator-decrement,\n.mat-paginator-increment {\n border-top: 2px solid rgba(0, 0, 0, 0.54);\n border-right: 2px solid rgba(0, 0, 0, 0.54);\n}\n\n.mat-paginator-first,\n.mat-paginator-last {\n border-top: 2px solid rgba(0, 0, 0, 0.54);\n}\n\n.mat-icon-button[disabled] .mat-paginator-decrement,\n.mat-icon-button[disabled] .mat-paginator-increment,\n.mat-icon-button[disabled] .mat-paginator-first,\n.mat-icon-button[disabled] .mat-paginator-last {\n border-color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-progress-bar-background {\n fill: #c5cae9;\n}\n\n.mat-progress-bar-buffer {\n background-color: #c5cae9;\n}\n\n.mat-progress-bar-fill::after {\n background-color: #3f51b5;\n}\n\n.mat-progress-bar.mat-accent .mat-progress-bar-background {\n fill: #82b1ff;\n}\n.mat-progress-bar.mat-accent .mat-progress-bar-buffer {\n background-color: #82b1ff;\n}\n.mat-progress-bar.mat-accent .mat-progress-bar-fill::after {\n background-color: #448aff;\n}\n\n.mat-progress-bar.mat-warn .mat-progress-bar-background {\n fill: #ffcdd2;\n}\n.mat-progress-bar.mat-warn .mat-progress-bar-buffer {\n background-color: #ffcdd2;\n}\n.mat-progress-bar.mat-warn .mat-progress-bar-fill::after {\n background-color: #f44336;\n}\n\n.mat-progress-spinner circle, .mat-spinner circle {\n stroke: #3f51b5;\n}\n.mat-progress-spinner.mat-accent circle, .mat-spinner.mat-accent circle {\n stroke: #448aff;\n}\n.mat-progress-spinner.mat-warn circle, .mat-spinner.mat-warn circle {\n stroke: #f44336;\n}\n\n.mat-radio-outer-circle {\n border-color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-radio-button.mat-primary.mat-radio-checked .mat-radio-outer-circle {\n border-color: #3f51b5;\n}\n.mat-radio-button.mat-primary .mat-radio-inner-circle,\n.mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .mat-radio-button.mat-primary.mat-radio-checked .mat-radio-persistent-ripple, .mat-radio-button.mat-primary:active .mat-radio-persistent-ripple {\n background-color: #3f51b5;\n}\n.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle {\n border-color: #448aff;\n}\n.mat-radio-button.mat-accent .mat-radio-inner-circle,\n.mat-radio-button.mat-accent .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .mat-radio-button.mat-accent.mat-radio-checked .mat-radio-persistent-ripple, .mat-radio-button.mat-accent:active .mat-radio-persistent-ripple {\n background-color: #448aff;\n}\n.mat-radio-button.mat-warn.mat-radio-checked .mat-radio-outer-circle {\n border-color: #f44336;\n}\n.mat-radio-button.mat-warn .mat-radio-inner-circle,\n.mat-radio-button.mat-warn .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .mat-radio-button.mat-warn.mat-radio-checked .mat-radio-persistent-ripple, .mat-radio-button.mat-warn:active .mat-radio-persistent-ripple {\n background-color: #f44336;\n}\n.mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-outer-circle,\n.mat-radio-button.mat-radio-disabled .mat-radio-outer-circle {\n border-color: rgba(0, 0, 0, 0.38);\n}\n.mat-radio-button.mat-radio-disabled .mat-radio-ripple .mat-ripple-element,\n.mat-radio-button.mat-radio-disabled .mat-radio-inner-circle {\n background-color: rgba(0, 0, 0, 0.38);\n}\n.mat-radio-button.mat-radio-disabled .mat-radio-label-content {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-radio-button .mat-ripple-element {\n background-color: black;\n}\n\n.mat-select-value {\n color: rgba(0, 0, 0, 0.87);\n}\n\n.mat-select-placeholder {\n color: rgba(0, 0, 0, 0.42);\n}\n\n.mat-select-disabled .mat-select-value {\n color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-select-arrow {\n color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-select-panel {\n background: white;\n}\n.mat-select-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-select-panel .mat-option.mat-selected:not(.mat-option-multiple) {\n background: rgba(0, 0, 0, 0.12);\n}\n\n.mat-form-field.mat-focused.mat-primary .mat-select-arrow {\n color: #3f51b5;\n}\n.mat-form-field.mat-focused.mat-accent .mat-select-arrow {\n color: #448aff;\n}\n.mat-form-field.mat-focused.mat-warn .mat-select-arrow {\n color: #f44336;\n}\n.mat-form-field .mat-select.mat-select-invalid .mat-select-arrow {\n color: #f44336;\n}\n.mat-form-field .mat-select.mat-select-disabled .mat-select-arrow {\n color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-drawer-container {\n background-color: #fafafa;\n color: rgba(0, 0, 0, 0.87);\n}\n\n.mat-drawer {\n background-color: white;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-drawer.mat-drawer-push {\n background-color: white;\n}\n.mat-drawer:not(.mat-drawer-side) {\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\n}\n\n.mat-drawer-side {\n border-right: solid 1px rgba(0, 0, 0, 0.12);\n}\n.mat-drawer-side.mat-drawer-end {\n border-left: solid 1px rgba(0, 0, 0, 0.12);\n border-right: none;\n}\n\n[dir=rtl] .mat-drawer-side {\n border-left: solid 1px rgba(0, 0, 0, 0.12);\n border-right: none;\n}\n[dir=rtl] .mat-drawer-side.mat-drawer-end {\n border-left: none;\n border-right: solid 1px rgba(0, 0, 0, 0.12);\n}\n\n.mat-drawer-backdrop.mat-drawer-shown {\n background-color: rgba(0, 0, 0, 0.6);\n}\n\n.mat-slide-toggle.mat-checked .mat-slide-toggle-thumb {\n background-color: #448aff;\n}\n.mat-slide-toggle.mat-checked .mat-slide-toggle-bar {\n background-color: rgba(68, 138, 255, 0.54);\n}\n.mat-slide-toggle.mat-checked .mat-ripple-element {\n background-color: #448aff;\n}\n.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-thumb {\n background-color: #3f51b5;\n}\n.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-bar {\n background-color: rgba(63, 81, 181, 0.54);\n}\n.mat-slide-toggle.mat-primary.mat-checked .mat-ripple-element {\n background-color: #3f51b5;\n}\n.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-thumb {\n background-color: #f44336;\n}\n.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-bar {\n background-color: rgba(244, 67, 54, 0.54);\n}\n.mat-slide-toggle.mat-warn.mat-checked .mat-ripple-element {\n background-color: #f44336;\n}\n.mat-slide-toggle:not(.mat-checked) .mat-ripple-element {\n background-color: black;\n}\n\n.mat-slide-toggle-thumb {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n background-color: #fafafa;\n}\n\n.mat-slide-toggle-bar {\n background-color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-slider-track-background {\n background-color: rgba(0, 0, 0, 0.26);\n}\n\n.mat-primary .mat-slider-track-fill,\n.mat-primary .mat-slider-thumb,\n.mat-primary .mat-slider-thumb-label {\n background-color: #3f51b5;\n}\n.mat-primary .mat-slider-thumb-label-text {\n color: white;\n}\n\n.mat-accent .mat-slider-track-fill,\n.mat-accent .mat-slider-thumb,\n.mat-accent .mat-slider-thumb-label {\n background-color: #448aff;\n}\n.mat-accent .mat-slider-thumb-label-text {\n color: white;\n}\n\n.mat-warn .mat-slider-track-fill,\n.mat-warn .mat-slider-thumb,\n.mat-warn .mat-slider-thumb-label {\n background-color: #f44336;\n}\n.mat-warn .mat-slider-thumb-label-text {\n color: white;\n}\n\n.mat-slider-focus-ring {\n background-color: rgba(68, 138, 255, 0.2);\n}\n\n.mat-slider:hover .mat-slider-track-background,\n.cdk-focused .mat-slider-track-background {\n background-color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-slider-disabled .mat-slider-track-background,\n.mat-slider-disabled .mat-slider-track-fill,\n.mat-slider-disabled .mat-slider-thumb {\n background-color: rgba(0, 0, 0, 0.26);\n}\n.mat-slider-disabled:hover .mat-slider-track-background {\n background-color: rgba(0, 0, 0, 0.26);\n}\n\n.mat-slider-min-value .mat-slider-focus-ring {\n background-color: rgba(0, 0, 0, 0.12);\n}\n.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb,\n.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb-label {\n background-color: rgba(0, 0, 0, 0.87);\n}\n.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb,\n.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb-label {\n background-color: rgba(0, 0, 0, 0.26);\n}\n.mat-slider-min-value:not(.mat-slider-thumb-label-showing) .mat-slider-thumb {\n border-color: rgba(0, 0, 0, 0.26);\n background-color: transparent;\n}\n.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover .mat-slider-thumb, .mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused .mat-slider-thumb {\n border-color: rgba(0, 0, 0, 0.38);\n}\n.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover.mat-slider-disabled .mat-slider-thumb, .mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused.mat-slider-disabled .mat-slider-thumb {\n border-color: rgba(0, 0, 0, 0.26);\n}\n\n.mat-slider-has-ticks .mat-slider-wrapper::after {\n border-color: rgba(0, 0, 0, 0.7);\n}\n\n.mat-slider-horizontal .mat-slider-ticks {\n background-image: repeating-linear-gradient(to right, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent);\n background-image: -moz-repeating-linear-gradient(0.0001deg, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent);\n}\n\n.mat-slider-vertical .mat-slider-ticks {\n background-image: repeating-linear-gradient(to bottom, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent);\n}\n\n.mat-step-header.cdk-keyboard-focused, .mat-step-header.cdk-program-focused, .mat-step-header:hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n@media (hover: none) {\n .mat-step-header:hover {\n background: none;\n }\n}\n.mat-step-header .mat-step-label,\n.mat-step-header .mat-step-optional {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-step-header .mat-step-icon {\n background-color: rgba(0, 0, 0, 0.54);\n color: white;\n}\n.mat-step-header .mat-step-icon-selected,\n.mat-step-header .mat-step-icon-state-done,\n.mat-step-header .mat-step-icon-state-edit {\n background-color: #3f51b5;\n color: white;\n}\n.mat-step-header .mat-step-icon-state-error {\n background-color: transparent;\n color: #f44336;\n}\n.mat-step-header .mat-step-label.mat-step-label-active {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-step-header .mat-step-label.mat-step-label-error {\n color: #f44336;\n}\n\n.mat-stepper-horizontal, .mat-stepper-vertical {\n background-color: white;\n}\n\n.mat-stepper-vertical-line::before {\n border-left-color: rgba(0, 0, 0, 0.12);\n}\n\n.mat-horizontal-stepper-header::before,\n.mat-horizontal-stepper-header::after,\n.mat-stepper-horizontal-line {\n border-top-color: rgba(0, 0, 0, 0.12);\n}\n\n.mat-sort-header-arrow {\n color: #757575;\n}\n\n.mat-tab-nav-bar,\n.mat-tab-header {\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n}\n\n.mat-tab-group-inverted-header .mat-tab-nav-bar,\n.mat-tab-group-inverted-header .mat-tab-header {\n border-top: 1px solid rgba(0, 0, 0, 0.12);\n border-bottom: none;\n}\n\n.mat-tab-label, .mat-tab-link {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-tab-label.mat-tab-disabled, .mat-tab-link.mat-tab-disabled {\n color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-tab-header-pagination-chevron {\n border-color: rgba(0, 0, 0, 0.87);\n}\n\n.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-tab-group[class*=mat-background-] .mat-tab-header,\n.mat-tab-nav-bar[class*=mat-background-] {\n border-bottom: none;\n border-top: none;\n}\n\n.mat-tab-group.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(197, 202, 233, 0.3);\n}\n.mat-tab-group.mat-primary .mat-ink-bar, .mat-tab-nav-bar.mat-primary .mat-ink-bar {\n background-color: #3f51b5;\n}\n.mat-tab-group.mat-primary.mat-background-primary .mat-ink-bar, .mat-tab-nav-bar.mat-primary.mat-background-primary .mat-ink-bar {\n background-color: white;\n}\n.mat-tab-group.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(130, 177, 255, 0.3);\n}\n.mat-tab-group.mat-accent .mat-ink-bar, .mat-tab-nav-bar.mat-accent .mat-ink-bar {\n background-color: #448aff;\n}\n.mat-tab-group.mat-accent.mat-background-accent .mat-ink-bar, .mat-tab-nav-bar.mat-accent.mat-background-accent .mat-ink-bar {\n background-color: white;\n}\n.mat-tab-group.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(255, 205, 210, 0.3);\n}\n.mat-tab-group.mat-warn .mat-ink-bar, .mat-tab-nav-bar.mat-warn .mat-ink-bar {\n background-color: #f44336;\n}\n.mat-tab-group.mat-warn.mat-background-warn .mat-ink-bar, .mat-tab-nav-bar.mat-warn.mat-background-warn .mat-ink-bar {\n background-color: white;\n}\n.mat-tab-group.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(197, 202, 233, 0.3);\n}\n.mat-tab-group.mat-background-primary .mat-tab-header, .mat-tab-group.mat-background-primary .mat-tab-links, .mat-tab-group.mat-background-primary .mat-tab-header-pagination, .mat-tab-nav-bar.mat-background-primary .mat-tab-header, .mat-tab-nav-bar.mat-background-primary .mat-tab-links, .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination {\n background-color: #3f51b5;\n}\n.mat-tab-group.mat-background-primary .mat-tab-label, .mat-tab-group.mat-background-primary .mat-tab-link, .mat-tab-nav-bar.mat-background-primary .mat-tab-label, .mat-tab-nav-bar.mat-background-primary .mat-tab-link {\n color: white;\n}\n.mat-tab-group.mat-background-primary .mat-tab-label.mat-tab-disabled, .mat-tab-group.mat-background-primary .mat-tab-link.mat-tab-disabled, .mat-tab-nav-bar.mat-background-primary .mat-tab-label.mat-tab-disabled, .mat-tab-nav-bar.mat-background-primary .mat-tab-link.mat-tab-disabled {\n color: rgba(255, 255, 255, 0.4);\n}\n.mat-tab-group.mat-background-primary .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-chevron {\n border-color: white;\n}\n.mat-tab-group.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(255, 255, 255, 0.4);\n}\n.mat-tab-group.mat-background-primary .mat-ripple-element, .mat-tab-nav-bar.mat-background-primary .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.mat-tab-group.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(130, 177, 255, 0.3);\n}\n.mat-tab-group.mat-background-accent .mat-tab-header, .mat-tab-group.mat-background-accent .mat-tab-links, .mat-tab-group.mat-background-accent .mat-tab-header-pagination, .mat-tab-nav-bar.mat-background-accent .mat-tab-header, .mat-tab-nav-bar.mat-background-accent .mat-tab-links, .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination {\n background-color: #448aff;\n}\n.mat-tab-group.mat-background-accent .mat-tab-label, .mat-tab-group.mat-background-accent .mat-tab-link, .mat-tab-nav-bar.mat-background-accent .mat-tab-label, .mat-tab-nav-bar.mat-background-accent .mat-tab-link {\n color: white;\n}\n.mat-tab-group.mat-background-accent .mat-tab-label.mat-tab-disabled, .mat-tab-group.mat-background-accent .mat-tab-link.mat-tab-disabled, .mat-tab-nav-bar.mat-background-accent .mat-tab-label.mat-tab-disabled, .mat-tab-nav-bar.mat-background-accent .mat-tab-link.mat-tab-disabled {\n color: rgba(255, 255, 255, 0.4);\n}\n.mat-tab-group.mat-background-accent .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-chevron {\n border-color: white;\n}\n.mat-tab-group.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(255, 255, 255, 0.4);\n}\n.mat-tab-group.mat-background-accent .mat-ripple-element, .mat-tab-nav-bar.mat-background-accent .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.mat-tab-group.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(255, 205, 210, 0.3);\n}\n.mat-tab-group.mat-background-warn .mat-tab-header, .mat-tab-group.mat-background-warn .mat-tab-links, .mat-tab-group.mat-background-warn .mat-tab-header-pagination, .mat-tab-nav-bar.mat-background-warn .mat-tab-header, .mat-tab-nav-bar.mat-background-warn .mat-tab-links, .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination {\n background-color: #f44336;\n}\n.mat-tab-group.mat-background-warn .mat-tab-label, .mat-tab-group.mat-background-warn .mat-tab-link, .mat-tab-nav-bar.mat-background-warn .mat-tab-label, .mat-tab-nav-bar.mat-background-warn .mat-tab-link {\n color: white;\n}\n.mat-tab-group.mat-background-warn .mat-tab-label.mat-tab-disabled, .mat-tab-group.mat-background-warn .mat-tab-link.mat-tab-disabled, .mat-tab-nav-bar.mat-background-warn .mat-tab-label.mat-tab-disabled, .mat-tab-nav-bar.mat-background-warn .mat-tab-link.mat-tab-disabled {\n color: rgba(255, 255, 255, 0.4);\n}\n.mat-tab-group.mat-background-warn .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-chevron {\n border-color: white;\n}\n.mat-tab-group.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(255, 255, 255, 0.4);\n}\n.mat-tab-group.mat-background-warn .mat-ripple-element, .mat-tab-nav-bar.mat-background-warn .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.12);\n}\n\n.mat-toolbar {\n background: whitesmoke;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-toolbar.mat-primary {\n background: #3f51b5;\n color: white;\n}\n.mat-toolbar.mat-accent {\n background: #448aff;\n color: white;\n}\n.mat-toolbar.mat-warn {\n background: #f44336;\n color: white;\n}\n.mat-toolbar .mat-form-field-underline,\n.mat-toolbar .mat-form-field-ripple,\n.mat-toolbar .mat-focused .mat-form-field-ripple {\n background-color: currentColor;\n}\n.mat-toolbar .mat-form-field-label,\n.mat-toolbar .mat-focused .mat-form-field-label,\n.mat-toolbar .mat-select-value,\n.mat-toolbar .mat-select-arrow,\n.mat-toolbar .mat-form-field.mat-focused .mat-select-arrow {\n color: inherit;\n}\n.mat-toolbar .mat-input-element {\n caret-color: currentColor;\n}\n\n.mat-tooltip {\n background: rgba(97, 97, 97, 0.9);\n}\n\n.mat-tree {\n background: white;\n}\n\n.mat-tree-node,\n.mat-nested-tree-node {\n color: rgba(0, 0, 0, 0.87);\n}\n\n.mat-snack-bar-container {\n color: rgba(255, 255, 255, 0.7);\n background: #323232;\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-simple-snackbar-action {\n color: #448aff;\n}\n\n/* You can add global styles to this file, and also import other style files */\n.dark-mode {\n color: white;\n}\n.dark-mode .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-option {\n color: white;\n}\n.dark-mode .mat-option:hover:not(.mat-option-disabled), .dark-mode .mat-option:focus:not(.mat-option-disabled) {\n background: rgba(255, 255, 255, 0.04);\n}\n.dark-mode .mat-option.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled) {\n background: rgba(255, 255, 255, 0.04);\n}\n.dark-mode .mat-option.mat-active {\n background: rgba(255, 255, 255, 0.04);\n color: white;\n}\n.dark-mode .mat-option.mat-option-disabled {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-primary .mat-option.mat-selected:not(.mat-option-disabled) {\n color: #00bcd4;\n}\n.dark-mode .mat-accent .mat-option.mat-selected:not(.mat-option-disabled) {\n color: #2979ff;\n}\n.dark-mode .mat-warn .mat-option.mat-selected:not(.mat-option-disabled) {\n color: #f44336;\n}\n.dark-mode .mat-optgroup-label {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-optgroup-disabled .mat-optgroup-label {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-pseudo-checkbox {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-pseudo-checkbox::after {\n color: #303030;\n}\n.dark-mode .mat-pseudo-checkbox-disabled {\n color: #686868;\n}\n.dark-mode .mat-primary .mat-pseudo-checkbox-checked,\n.dark-mode .mat-primary .mat-pseudo-checkbox-indeterminate {\n background: #00bcd4;\n}\n.dark-mode .mat-pseudo-checkbox-checked,\n.dark-mode .mat-pseudo-checkbox-indeterminate,\n.dark-mode .mat-accent .mat-pseudo-checkbox-checked,\n.dark-mode .mat-accent .mat-pseudo-checkbox-indeterminate {\n background: #2979ff;\n}\n.dark-mode .mat-warn .mat-pseudo-checkbox-checked,\n.dark-mode .mat-warn .mat-pseudo-checkbox-indeterminate {\n background: #f44336;\n}\n.dark-mode .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,\n.dark-mode .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled {\n background: #686868;\n}\n.dark-mode .mat-elevation-z0 {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z1 {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z2 {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z3 {\n box-shadow: 0px 3px 3px -2px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 0, 0, 0.14), 0px 1px 8px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z4 {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z5 {\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 5px 8px 0px rgba(0, 0, 0, 0.14), 0px 1px 14px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z6 {\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z7 {\n box-shadow: 0px 4px 5px -2px rgba(0, 0, 0, 0.2), 0px 7px 10px 1px rgba(0, 0, 0, 0.14), 0px 2px 16px 1px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z8 {\n box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z9 {\n box-shadow: 0px 5px 6px -3px rgba(0, 0, 0, 0.2), 0px 9px 12px 1px rgba(0, 0, 0, 0.14), 0px 3px 16px 2px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z10 {\n box-shadow: 0px 6px 6px -3px rgba(0, 0, 0, 0.2), 0px 10px 14px 1px rgba(0, 0, 0, 0.14), 0px 4px 18px 3px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z11 {\n box-shadow: 0px 6px 7px -4px rgba(0, 0, 0, 0.2), 0px 11px 15px 1px rgba(0, 0, 0, 0.14), 0px 4px 20px 3px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z12 {\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z13 {\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 13px 19px 2px rgba(0, 0, 0, 0.14), 0px 5px 24px 4px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z14 {\n box-shadow: 0px 7px 9px -4px rgba(0, 0, 0, 0.2), 0px 14px 21px 2px rgba(0, 0, 0, 0.14), 0px 5px 26px 4px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z15 {\n box-shadow: 0px 8px 9px -5px rgba(0, 0, 0, 0.2), 0px 15px 22px 2px rgba(0, 0, 0, 0.14), 0px 6px 28px 5px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z16 {\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z17 {\n box-shadow: 0px 8px 11px -5px rgba(0, 0, 0, 0.2), 0px 17px 26px 2px rgba(0, 0, 0, 0.14), 0px 6px 32px 5px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z18 {\n box-shadow: 0px 9px 11px -5px rgba(0, 0, 0, 0.2), 0px 18px 28px 2px rgba(0, 0, 0, 0.14), 0px 7px 34px 6px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z19 {\n box-shadow: 0px 9px 12px -6px rgba(0, 0, 0, 0.2), 0px 19px 29px 2px rgba(0, 0, 0, 0.14), 0px 7px 36px 6px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z20 {\n box-shadow: 0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 20px 31px 3px rgba(0, 0, 0, 0.14), 0px 8px 38px 7px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z21 {\n box-shadow: 0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 21px 33px 3px rgba(0, 0, 0, 0.14), 0px 8px 40px 7px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z22 {\n box-shadow: 0px 10px 14px -6px rgba(0, 0, 0, 0.2), 0px 22px 35px 3px rgba(0, 0, 0, 0.14), 0px 8px 42px 7px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z23 {\n box-shadow: 0px 11px 14px -7px rgba(0, 0, 0, 0.2), 0px 23px 36px 3px rgba(0, 0, 0, 0.14), 0px 9px 44px 8px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z24 {\n box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-app-background, .dark-mode.mat-app-background {\n background-color: #303030;\n color: white;\n}\n.mat-theme-loaded-marker {\n display: none;\n}\n\n.dark-mode .mat-autocomplete-panel {\n background: #424242;\n color: white;\n}\n.dark-mode .mat-autocomplete-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover) {\n background: #424242;\n}\n.dark-mode .mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover):not(.mat-option-disabled) {\n color: white;\n}\n.dark-mode .mat-badge-content {\n color: white;\n background: #00bcd4;\n}\n.cdk-high-contrast-active .dark-mode .mat-badge-content {\n outline: solid 1px;\n border-radius: 0;\n}\n\n.dark-mode .mat-badge-accent .mat-badge-content {\n background: #2979ff;\n color: white;\n}\n.dark-mode .mat-badge-warn .mat-badge-content {\n color: white;\n background: #f44336;\n}\n.dark-mode .mat-badge {\n position: relative;\n}\n.dark-mode .mat-badge-hidden .mat-badge-content {\n display: none;\n}\n.dark-mode .mat-badge-disabled .mat-badge-content {\n background: #6e6e6e;\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-badge-content {\n position: absolute;\n text-align: center;\n display: inline-block;\n border-radius: 50%;\n transition: transform 200ms ease-in-out;\n transform: scale(0.6);\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n pointer-events: none;\n}\n.dark-mode .ng-animate-disabled .mat-badge-content,\n.dark-mode .mat-badge-content._mat-animation-noopable {\n transition: none;\n}\n.dark-mode .mat-badge-content.mat-badge-active {\n transform: none;\n}\n.dark-mode .mat-badge-small .mat-badge-content {\n width: 16px;\n height: 16px;\n line-height: 16px;\n}\n.dark-mode .mat-badge-small.mat-badge-above .mat-badge-content {\n top: -8px;\n}\n.dark-mode .mat-badge-small.mat-badge-below .mat-badge-content {\n bottom: -8px;\n}\n.dark-mode .mat-badge-small.mat-badge-before .mat-badge-content {\n left: -16px;\n}\n[dir=rtl] .dark-mode .mat-badge-small.mat-badge-before .mat-badge-content {\n left: auto;\n right: -16px;\n}\n.dark-mode .mat-badge-small.mat-badge-after .mat-badge-content {\n right: -16px;\n}\n[dir=rtl] .dark-mode .mat-badge-small.mat-badge-after .mat-badge-content {\n right: auto;\n left: -16px;\n}\n.dark-mode .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: -8px;\n}\n[dir=rtl] .dark-mode .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: auto;\n right: -8px;\n}\n.dark-mode .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: -8px;\n}\n[dir=rtl] .dark-mode .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: auto;\n left: -8px;\n}\n.dark-mode .mat-badge-medium .mat-badge-content {\n width: 22px;\n height: 22px;\n line-height: 22px;\n}\n.dark-mode .mat-badge-medium.mat-badge-above .mat-badge-content {\n top: -11px;\n}\n.dark-mode .mat-badge-medium.mat-badge-below .mat-badge-content {\n bottom: -11px;\n}\n.dark-mode .mat-badge-medium.mat-badge-before .mat-badge-content {\n left: -22px;\n}\n[dir=rtl] .dark-mode .mat-badge-medium.mat-badge-before .mat-badge-content {\n left: auto;\n right: -22px;\n}\n.dark-mode .mat-badge-medium.mat-badge-after .mat-badge-content {\n right: -22px;\n}\n[dir=rtl] .dark-mode .mat-badge-medium.mat-badge-after .mat-badge-content {\n right: auto;\n left: -22px;\n}\n.dark-mode .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: -11px;\n}\n[dir=rtl] .dark-mode .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: auto;\n right: -11px;\n}\n.dark-mode .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: -11px;\n}\n[dir=rtl] .dark-mode .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: auto;\n left: -11px;\n}\n.dark-mode .mat-badge-large .mat-badge-content {\n width: 28px;\n height: 28px;\n line-height: 28px;\n}\n.dark-mode .mat-badge-large.mat-badge-above .mat-badge-content {\n top: -14px;\n}\n.dark-mode .mat-badge-large.mat-badge-below .mat-badge-content {\n bottom: -14px;\n}\n.dark-mode .mat-badge-large.mat-badge-before .mat-badge-content {\n left: -28px;\n}\n[dir=rtl] .dark-mode .mat-badge-large.mat-badge-before .mat-badge-content {\n left: auto;\n right: -28px;\n}\n.dark-mode .mat-badge-large.mat-badge-after .mat-badge-content {\n right: -28px;\n}\n[dir=rtl] .dark-mode .mat-badge-large.mat-badge-after .mat-badge-content {\n right: auto;\n left: -28px;\n}\n.dark-mode .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: -14px;\n}\n[dir=rtl] .dark-mode .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: auto;\n right: -14px;\n}\n.dark-mode .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: -14px;\n}\n[dir=rtl] .dark-mode .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: auto;\n left: -14px;\n}\n.dark-mode .mat-bottom-sheet-container {\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\n background: #424242;\n color: white;\n}\n.dark-mode .mat-button, .dark-mode .mat-icon-button, .dark-mode .mat-stroked-button {\n color: inherit;\n background: transparent;\n}\n.dark-mode .mat-button.mat-primary, .dark-mode .mat-icon-button.mat-primary, .dark-mode .mat-stroked-button.mat-primary {\n color: #00bcd4;\n}\n.dark-mode .mat-button.mat-accent, .dark-mode .mat-icon-button.mat-accent, .dark-mode .mat-stroked-button.mat-accent {\n color: #2979ff;\n}\n.dark-mode .mat-button.mat-warn, .dark-mode .mat-icon-button.mat-warn, .dark-mode .mat-stroked-button.mat-warn {\n color: #f44336;\n}\n.dark-mode .mat-button.mat-primary[disabled], .dark-mode .mat-button.mat-accent[disabled], .dark-mode .mat-button.mat-warn[disabled], .dark-mode .mat-button[disabled][disabled], .dark-mode .mat-icon-button.mat-primary[disabled], .dark-mode .mat-icon-button.mat-accent[disabled], .dark-mode .mat-icon-button.mat-warn[disabled], .dark-mode .mat-icon-button[disabled][disabled], .dark-mode .mat-stroked-button.mat-primary[disabled], .dark-mode .mat-stroked-button.mat-accent[disabled], .dark-mode .mat-stroked-button.mat-warn[disabled], .dark-mode .mat-stroked-button[disabled][disabled] {\n color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-button.mat-primary .mat-button-focus-overlay, .dark-mode .mat-icon-button.mat-primary .mat-button-focus-overlay, .dark-mode .mat-stroked-button.mat-primary .mat-button-focus-overlay {\n background-color: #00bcd4;\n}\n.dark-mode .mat-button.mat-accent .mat-button-focus-overlay, .dark-mode .mat-icon-button.mat-accent .mat-button-focus-overlay, .dark-mode .mat-stroked-button.mat-accent .mat-button-focus-overlay {\n background-color: #2979ff;\n}\n.dark-mode .mat-button.mat-warn .mat-button-focus-overlay, .dark-mode .mat-icon-button.mat-warn .mat-button-focus-overlay, .dark-mode .mat-stroked-button.mat-warn .mat-button-focus-overlay {\n background-color: #f44336;\n}\n.dark-mode .mat-button[disabled] .mat-button-focus-overlay, .dark-mode .mat-icon-button[disabled] .mat-button-focus-overlay, .dark-mode .mat-stroked-button[disabled] .mat-button-focus-overlay {\n background-color: transparent;\n}\n.dark-mode .mat-button .mat-ripple-element, .dark-mode .mat-icon-button .mat-ripple-element, .dark-mode .mat-stroked-button .mat-ripple-element {\n opacity: 0.1;\n background-color: currentColor;\n}\n.dark-mode .mat-button-focus-overlay {\n background: white;\n}\n.dark-mode .mat-stroked-button:not([disabled]) {\n border-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-flat-button, .dark-mode .mat-raised-button, .dark-mode .mat-fab, .dark-mode .mat-mini-fab {\n color: white;\n background-color: #424242;\n}\n.dark-mode .mat-flat-button.mat-primary, .dark-mode .mat-raised-button.mat-primary, .dark-mode .mat-fab.mat-primary, .dark-mode .mat-mini-fab.mat-primary {\n color: white;\n}\n.dark-mode .mat-flat-button.mat-accent, .dark-mode .mat-raised-button.mat-accent, .dark-mode .mat-fab.mat-accent, .dark-mode .mat-mini-fab.mat-accent {\n color: white;\n}\n.dark-mode .mat-flat-button.mat-warn, .dark-mode .mat-raised-button.mat-warn, .dark-mode .mat-fab.mat-warn, .dark-mode .mat-mini-fab.mat-warn {\n color: white;\n}\n.dark-mode .mat-flat-button.mat-primary[disabled], .dark-mode .mat-flat-button.mat-accent[disabled], .dark-mode .mat-flat-button.mat-warn[disabled], .dark-mode .mat-flat-button[disabled][disabled], .dark-mode .mat-raised-button.mat-primary[disabled], .dark-mode .mat-raised-button.mat-accent[disabled], .dark-mode .mat-raised-button.mat-warn[disabled], .dark-mode .mat-raised-button[disabled][disabled], .dark-mode .mat-fab.mat-primary[disabled], .dark-mode .mat-fab.mat-accent[disabled], .dark-mode .mat-fab.mat-warn[disabled], .dark-mode .mat-fab[disabled][disabled], .dark-mode .mat-mini-fab.mat-primary[disabled], .dark-mode .mat-mini-fab.mat-accent[disabled], .dark-mode .mat-mini-fab.mat-warn[disabled], .dark-mode .mat-mini-fab[disabled][disabled] {\n color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-flat-button.mat-primary, .dark-mode .mat-raised-button.mat-primary, .dark-mode .mat-fab.mat-primary, .dark-mode .mat-mini-fab.mat-primary {\n background-color: #00bcd4;\n}\n.dark-mode .mat-flat-button.mat-accent, .dark-mode .mat-raised-button.mat-accent, .dark-mode .mat-fab.mat-accent, .dark-mode .mat-mini-fab.mat-accent {\n background-color: #2979ff;\n}\n.dark-mode .mat-flat-button.mat-warn, .dark-mode .mat-raised-button.mat-warn, .dark-mode .mat-fab.mat-warn, .dark-mode .mat-mini-fab.mat-warn {\n background-color: #f44336;\n}\n.dark-mode .mat-flat-button.mat-primary[disabled], .dark-mode .mat-flat-button.mat-accent[disabled], .dark-mode .mat-flat-button.mat-warn[disabled], .dark-mode .mat-flat-button[disabled][disabled], .dark-mode .mat-raised-button.mat-primary[disabled], .dark-mode .mat-raised-button.mat-accent[disabled], .dark-mode .mat-raised-button.mat-warn[disabled], .dark-mode .mat-raised-button[disabled][disabled], .dark-mode .mat-fab.mat-primary[disabled], .dark-mode .mat-fab.mat-accent[disabled], .dark-mode .mat-fab.mat-warn[disabled], .dark-mode .mat-fab[disabled][disabled], .dark-mode .mat-mini-fab.mat-primary[disabled], .dark-mode .mat-mini-fab.mat-accent[disabled], .dark-mode .mat-mini-fab.mat-warn[disabled], .dark-mode .mat-mini-fab[disabled][disabled] {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-flat-button.mat-primary .mat-ripple-element, .dark-mode .mat-raised-button.mat-primary .mat-ripple-element, .dark-mode .mat-fab.mat-primary .mat-ripple-element, .dark-mode .mat-mini-fab.mat-primary .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-flat-button.mat-accent .mat-ripple-element, .dark-mode .mat-raised-button.mat-accent .mat-ripple-element, .dark-mode .mat-fab.mat-accent .mat-ripple-element, .dark-mode .mat-mini-fab.mat-accent .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-flat-button.mat-warn .mat-ripple-element, .dark-mode .mat-raised-button.mat-warn .mat-ripple-element, .dark-mode .mat-fab.mat-warn .mat-ripple-element, .dark-mode .mat-mini-fab.mat-warn .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-stroked-button:not([class*=mat-elevation-z]), .dark-mode .mat-flat-button:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-raised-button:not([class*=mat-elevation-z]) {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-raised-button:not([disabled]):active:not([class*=mat-elevation-z]) {\n box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-raised-button[disabled]:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-fab:not([class*=mat-elevation-z]), .dark-mode .mat-mini-fab:not([class*=mat-elevation-z]) {\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-fab:not([disabled]):active:not([class*=mat-elevation-z]), .dark-mode .mat-mini-fab:not([disabled]):active:not([class*=mat-elevation-z]) {\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-fab[disabled]:not([class*=mat-elevation-z]), .dark-mode .mat-mini-fab[disabled]:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-button-toggle-standalone,\n.dark-mode .mat-button-toggle-group {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\n.dark-mode .mat-button-toggle-group-appearance-standard {\n box-shadow: none;\n}\n.dark-mode .mat-button-toggle {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-button-toggle .mat-button-toggle-focus-overlay {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-button-toggle-appearance-standard {\n color: white;\n background: #424242;\n}\n.dark-mode .mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay {\n background-color: white;\n}\n.dark-mode .mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\n border-left: solid 1px rgba(255, 255, 255, 0.12);\n}\n.dark-mode [dir=rtl] .mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\n border-left: none;\n border-right: solid 1px rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle + .mat-button-toggle {\n border-left: none;\n border-right: none;\n border-top: solid 1px rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-button-toggle-checked {\n background-color: #212121;\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-button-toggle-checked.mat-button-toggle-appearance-standard {\n color: white;\n}\n.dark-mode .mat-button-toggle-disabled {\n color: rgba(255, 255, 255, 0.3);\n background-color: black;\n}\n.dark-mode .mat-button-toggle-disabled.mat-button-toggle-appearance-standard {\n background: #424242;\n}\n.dark-mode .mat-button-toggle-disabled.mat-button-toggle-checked {\n background-color: #424242;\n}\n.dark-mode .mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\n.dark-mode .mat-button-toggle-group-appearance-standard {\n border: solid 1px rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-card {\n background: #424242;\n color: white;\n}\n.dark-mode .mat-card:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-card.mat-card-flat:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-card-subtitle {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-checkbox-frame {\n border-color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-checkbox-checkmark {\n fill: #303030;\n}\n.dark-mode .mat-checkbox-checkmark-path {\n stroke: #303030 !important;\n}\n.dark-mode .mat-checkbox-mixedmark {\n background-color: #303030;\n}\n.dark-mode .mat-checkbox-indeterminate.mat-primary .mat-checkbox-background, .dark-mode .mat-checkbox-checked.mat-primary .mat-checkbox-background {\n background-color: #00bcd4;\n}\n.dark-mode .mat-checkbox-indeterminate.mat-accent .mat-checkbox-background, .dark-mode .mat-checkbox-checked.mat-accent .mat-checkbox-background {\n background-color: #2979ff;\n}\n.dark-mode .mat-checkbox-indeterminate.mat-warn .mat-checkbox-background, .dark-mode .mat-checkbox-checked.mat-warn .mat-checkbox-background {\n background-color: #f44336;\n}\n.dark-mode .mat-checkbox-disabled.mat-checkbox-checked .mat-checkbox-background, .dark-mode .mat-checkbox-disabled.mat-checkbox-indeterminate .mat-checkbox-background {\n background-color: #686868;\n}\n.dark-mode .mat-checkbox-disabled:not(.mat-checkbox-checked) .mat-checkbox-frame {\n border-color: #686868;\n}\n.dark-mode .mat-checkbox-disabled .mat-checkbox-label {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-checkbox .mat-ripple-element {\n background-color: white;\n}\n.dark-mode .mat-checkbox-checked:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element,\n.dark-mode .mat-checkbox:active:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element {\n background: #00bcd4;\n}\n.dark-mode .mat-checkbox-checked:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element,\n.dark-mode .mat-checkbox:active:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element {\n background: #2979ff;\n}\n.dark-mode .mat-checkbox-checked:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element,\n.dark-mode .mat-checkbox:active:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element {\n background: #f44336;\n}\n.dark-mode .mat-chip.mat-standard-chip {\n background-color: #616161;\n color: white;\n}\n.dark-mode .mat-chip.mat-standard-chip .mat-chip-remove {\n color: white;\n opacity: 0.4;\n}\n.dark-mode .mat-chip.mat-standard-chip:not(.mat-chip-disabled):active {\n box-shadow: 0px 3px 3px -2px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 0, 0, 0.14), 0px 1px 8px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-chip.mat-standard-chip:not(.mat-chip-disabled) .mat-chip-remove:hover {\n opacity: 0.54;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-disabled {\n opacity: 0.4;\n}\n.dark-mode .mat-chip.mat-standard-chip::after {\n background: white;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-primary {\n background-color: #00bcd4;\n color: white;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-chip-remove {\n color: white;\n opacity: 0.4;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-warn {\n background-color: #f44336;\n color: white;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-chip-remove {\n color: white;\n opacity: 0.4;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-accent {\n background-color: #2979ff;\n color: white;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-chip-remove {\n color: white;\n opacity: 0.4;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-table {\n background: #424242;\n}\n.dark-mode .mat-table thead, .dark-mode .mat-table tbody, .dark-mode .mat-table tfoot,\n.dark-mode mat-header-row, .dark-mode mat-row, .dark-mode mat-footer-row,\n.dark-mode [mat-header-row], .dark-mode [mat-row], .dark-mode [mat-footer-row],\n.dark-mode .mat-table-sticky {\n background: inherit;\n}\n.dark-mode mat-row, .dark-mode mat-header-row, .dark-mode mat-footer-row,\n.dark-mode th.mat-header-cell, .dark-mode td.mat-cell, .dark-mode td.mat-footer-cell {\n border-bottom-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-header-cell {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-cell, .dark-mode .mat-footer-cell {\n color: white;\n}\n.dark-mode .mat-calendar-arrow {\n border-top-color: white;\n}\n.dark-mode .mat-datepicker-toggle,\n.dark-mode .mat-datepicker-content .mat-calendar-next-button,\n.dark-mode .mat-datepicker-content .mat-calendar-previous-button {\n color: white;\n}\n.dark-mode .mat-calendar-table-header {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-calendar-table-header-divider::after {\n background: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-calendar-body-label {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-calendar-body-cell-content {\n color: white;\n border-color: transparent;\n}\n.dark-mode .mat-calendar-body-disabled > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected),\n.dark-mode .cdk-keyboard-focused .mat-calendar-body-active > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected),\n.dark-mode .cdk-program-focused .mat-calendar-body-active > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\n background-color: rgba(255, 255, 255, 0.04);\n}\n.dark-mode .mat-calendar-body-today:not(.mat-calendar-body-selected) {\n border-color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-calendar-body-disabled > .mat-calendar-body-today:not(.mat-calendar-body-selected) {\n border-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-calendar-body-selected {\n background-color: #00bcd4;\n color: white;\n}\n.dark-mode .mat-calendar-body-disabled > .mat-calendar-body-selected {\n background-color: rgba(0, 188, 212, 0.4);\n}\n.dark-mode .mat-calendar-body-today.mat-calendar-body-selected {\n box-shadow: inset 0 0 0 1px white;\n}\n.dark-mode .mat-datepicker-content {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n background-color: #424242;\n color: white;\n}\n.dark-mode .mat-datepicker-content.mat-accent .mat-calendar-body-selected {\n background-color: #2979ff;\n color: white;\n}\n.dark-mode .mat-datepicker-content.mat-accent .mat-calendar-body-disabled > .mat-calendar-body-selected {\n background-color: rgba(41, 121, 255, 0.4);\n}\n.dark-mode .mat-datepicker-content.mat-accent .mat-calendar-body-today.mat-calendar-body-selected {\n box-shadow: inset 0 0 0 1px white;\n}\n.dark-mode .mat-datepicker-content.mat-warn .mat-calendar-body-selected {\n background-color: #f44336;\n color: white;\n}\n.dark-mode .mat-datepicker-content.mat-warn .mat-calendar-body-disabled > .mat-calendar-body-selected {\n background-color: rgba(244, 67, 54, 0.4);\n}\n.dark-mode .mat-datepicker-content.mat-warn .mat-calendar-body-today.mat-calendar-body-selected {\n box-shadow: inset 0 0 0 1px white;\n}\n.dark-mode .mat-datepicker-content-touch {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-datepicker-toggle-active {\n color: #00bcd4;\n}\n.dark-mode .mat-datepicker-toggle-active.mat-accent {\n color: #2979ff;\n}\n.dark-mode .mat-datepicker-toggle-active.mat-warn {\n color: #f44336;\n}\n.dark-mode .mat-dialog-container {\n box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12);\n background: #424242;\n color: white;\n}\n.dark-mode .mat-divider {\n border-top-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-divider-vertical {\n border-right-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-expansion-panel {\n background: #424242;\n color: white;\n}\n.dark-mode .mat-expansion-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-action-row {\n border-top-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-expansion-panel .mat-expansion-panel-header.cdk-keyboard-focused:not([aria-disabled=true]), .dark-mode .mat-expansion-panel .mat-expansion-panel-header.cdk-program-focused:not([aria-disabled=true]), .dark-mode .mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover:not([aria-disabled=true]) {\n background: rgba(255, 255, 255, 0.04);\n}\n@media (hover: none) {\n .dark-mode .mat-expansion-panel:not(.mat-expanded):not([aria-disabled=true]) .mat-expansion-panel-header:hover {\n background: #424242;\n }\n}\n.dark-mode .mat-expansion-panel-header-title {\n color: white;\n}\n.dark-mode .mat-expansion-panel-header-description,\n.dark-mode .mat-expansion-indicator::after {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-expansion-panel-header[aria-disabled=true] {\n color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title,\n.dark-mode .mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description {\n color: inherit;\n}\n.dark-mode .mat-form-field-label {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-hint {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-form-field.mat-focused .mat-form-field-label {\n color: #00bcd4;\n}\n.dark-mode .mat-form-field.mat-focused .mat-form-field-label.mat-accent {\n color: #2979ff;\n}\n.dark-mode .mat-form-field.mat-focused .mat-form-field-label.mat-warn {\n color: #f44336;\n}\n.dark-mode .mat-focused .mat-form-field-required-marker {\n color: #2979ff;\n}\n.dark-mode .mat-form-field-ripple {\n background-color: white;\n}\n.dark-mode .mat-form-field.mat-focused .mat-form-field-ripple {\n background-color: #00bcd4;\n}\n.dark-mode .mat-form-field.mat-focused .mat-form-field-ripple.mat-accent {\n background-color: #2979ff;\n}\n.dark-mode .mat-form-field.mat-focused .mat-form-field-ripple.mat-warn {\n background-color: #f44336;\n}\n.dark-mode .mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid) .mat-form-field-infix::after {\n color: #00bcd4;\n}\n.dark-mode .mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-accent .mat-form-field-infix::after {\n color: #2979ff;\n}\n.dark-mode .mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-warn .mat-form-field-infix::after {\n color: #f44336;\n}\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-label {\n color: #f44336;\n}\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-label.mat-accent,\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-label .mat-form-field-required-marker {\n color: #f44336;\n}\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-ripple,\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-ripple.mat-accent {\n background-color: #f44336;\n}\n.dark-mode .mat-error {\n color: #f44336;\n}\n.dark-mode .mat-form-field-appearance-legacy .mat-form-field-label {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-form-field-appearance-legacy .mat-hint {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-form-field-appearance-legacy .mat-form-field-underline {\n background-color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline {\n background-image: linear-gradient(to right, rgba(255, 255, 255, 0.7) 0%, rgba(255, 255, 255, 0.7) 33%, transparent 0%);\n background-size: 4px 100%;\n background-repeat: repeat-x;\n}\n.dark-mode .mat-form-field-appearance-standard .mat-form-field-underline {\n background-color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline {\n background-image: linear-gradient(to right, rgba(255, 255, 255, 0.7) 0%, rgba(255, 255, 255, 0.7) 33%, transparent 0%);\n background-size: 4px 100%;\n background-repeat: repeat-x;\n}\n.dark-mode .mat-form-field-appearance-fill .mat-form-field-flex {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-flex {\n background-color: rgba(255, 255, 255, 0.05);\n}\n.dark-mode .mat-form-field-appearance-fill .mat-form-field-underline::before {\n background-color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-label {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-underline::before {\n background-color: transparent;\n}\n.dark-mode .mat-form-field-appearance-outline .mat-form-field-outline {\n color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-form-field-appearance-outline .mat-form-field-outline-thick {\n color: white;\n}\n.dark-mode .mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick {\n color: #00bcd4;\n}\n.dark-mode .mat-form-field-appearance-outline.mat-focused.mat-accent .mat-form-field-outline-thick {\n color: #2979ff;\n}\n.dark-mode .mat-form-field-appearance-outline.mat-focused.mat-warn .mat-form-field-outline-thick {\n color: #f44336;\n}\n.dark-mode .mat-form-field-appearance-outline.mat-form-field-invalid.mat-form-field-invalid .mat-form-field-outline-thick {\n color: #f44336;\n}\n.dark-mode .mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-label {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline {\n color: rgba(255, 255, 255, 0.15);\n}\n.dark-mode .mat-icon.mat-primary {\n color: #00bcd4;\n}\n.dark-mode .mat-icon.mat-accent {\n color: #2979ff;\n}\n.dark-mode .mat-icon.mat-warn {\n color: #f44336;\n}\n.dark-mode .mat-form-field-type-mat-native-select .mat-form-field-infix::after {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-input-element:disabled,\n.dark-mode .mat-form-field-type-mat-native-select.mat-form-field-disabled .mat-form-field-infix::after {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-input-element {\n caret-color: #00bcd4;\n}\n.dark-mode .mat-input-element::placeholder {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-input-element::-moz-placeholder {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-input-element::-webkit-input-placeholder {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-input-element:-ms-input-placeholder {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-input-element option {\n color: rgba(0, 0, 0, 0.87);\n}\n.dark-mode .mat-input-element option:disabled {\n color: rgba(0, 0, 0, 0.38);\n}\n.dark-mode .mat-accent .mat-input-element {\n caret-color: #2979ff;\n}\n.dark-mode .mat-warn .mat-input-element,\n.dark-mode .mat-form-field-invalid .mat-input-element {\n caret-color: #f44336;\n}\n.dark-mode .mat-form-field-type-mat-native-select.mat-form-field-invalid .mat-form-field-infix::after {\n color: #f44336;\n}\n.dark-mode .mat-list-base .mat-list-item {\n color: white;\n}\n.dark-mode .mat-list-base .mat-list-option {\n color: white;\n}\n.dark-mode .mat-list-base .mat-subheader {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-list-item-disabled {\n background-color: black;\n}\n.dark-mode .mat-list-option:hover, .dark-mode .mat-list-option:focus,\n.dark-mode .mat-nav-list .mat-list-item:hover,\n.dark-mode .mat-nav-list .mat-list-item:focus,\n.dark-mode .mat-action-list .mat-list-item:hover,\n.dark-mode .mat-action-list .mat-list-item:focus {\n background: rgba(255, 255, 255, 0.04);\n}\n.dark-mode .mat-list-single-selected-option, .dark-mode .mat-list-single-selected-option:hover, .dark-mode .mat-list-single-selected-option:focus {\n background: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-menu-panel {\n background: #424242;\n}\n.dark-mode .mat-menu-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-menu-item {\n background: transparent;\n color: white;\n}\n.dark-mode .mat-menu-item[disabled], .dark-mode .mat-menu-item[disabled]::after {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-menu-item .mat-icon-no-color,\n.dark-mode .mat-menu-item-submenu-trigger::after {\n color: white;\n}\n.dark-mode .mat-menu-item:hover:not([disabled]),\n.dark-mode .mat-menu-item.cdk-program-focused:not([disabled]),\n.dark-mode .mat-menu-item.cdk-keyboard-focused:not([disabled]),\n.dark-mode .mat-menu-item-highlighted:not([disabled]) {\n background: rgba(255, 255, 255, 0.04);\n}\n.dark-mode .mat-paginator {\n background: #424242;\n}\n.dark-mode .mat-paginator,\n.dark-mode .mat-paginator-page-size .mat-select-trigger {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-paginator-decrement,\n.dark-mode .mat-paginator-increment {\n border-top: 2px solid white;\n border-right: 2px solid white;\n}\n.dark-mode .mat-paginator-first,\n.dark-mode .mat-paginator-last {\n border-top: 2px solid white;\n}\n.dark-mode .mat-icon-button[disabled] .mat-paginator-decrement,\n.dark-mode .mat-icon-button[disabled] .mat-paginator-increment,\n.dark-mode .mat-icon-button[disabled] .mat-paginator-first,\n.dark-mode .mat-icon-button[disabled] .mat-paginator-last {\n border-color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-progress-bar-background {\n fill: #b2ebf2;\n}\n.dark-mode .mat-progress-bar-buffer {\n background-color: #b2ebf2;\n}\n.dark-mode .mat-progress-bar-fill::after {\n background-color: #00bcd4;\n}\n.dark-mode .mat-progress-bar.mat-accent .mat-progress-bar-background {\n fill: #82b1ff;\n}\n.dark-mode .mat-progress-bar.mat-accent .mat-progress-bar-buffer {\n background-color: #82b1ff;\n}\n.dark-mode .mat-progress-bar.mat-accent .mat-progress-bar-fill::after {\n background-color: #2979ff;\n}\n.dark-mode .mat-progress-bar.mat-warn .mat-progress-bar-background {\n fill: #ffcdd2;\n}\n.dark-mode .mat-progress-bar.mat-warn .mat-progress-bar-buffer {\n background-color: #ffcdd2;\n}\n.dark-mode .mat-progress-bar.mat-warn .mat-progress-bar-fill::after {\n background-color: #f44336;\n}\n.dark-mode .mat-progress-spinner circle, .dark-mode .mat-spinner circle {\n stroke: #00bcd4;\n}\n.dark-mode .mat-progress-spinner.mat-accent circle, .dark-mode .mat-spinner.mat-accent circle {\n stroke: #2979ff;\n}\n.dark-mode .mat-progress-spinner.mat-warn circle, .dark-mode .mat-spinner.mat-warn circle {\n stroke: #f44336;\n}\n.dark-mode .mat-radio-outer-circle {\n border-color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-radio-button.mat-primary.mat-radio-checked .mat-radio-outer-circle {\n border-color: #00bcd4;\n}\n.dark-mode .mat-radio-button.mat-primary .mat-radio-inner-circle,\n.dark-mode .mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .dark-mode .mat-radio-button.mat-primary.mat-radio-checked .mat-radio-persistent-ripple, .dark-mode .mat-radio-button.mat-primary:active .mat-radio-persistent-ripple {\n background-color: #00bcd4;\n}\n.dark-mode .mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle {\n border-color: #2979ff;\n}\n.dark-mode .mat-radio-button.mat-accent .mat-radio-inner-circle,\n.dark-mode .mat-radio-button.mat-accent .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .dark-mode .mat-radio-button.mat-accent.mat-radio-checked .mat-radio-persistent-ripple, .dark-mode .mat-radio-button.mat-accent:active .mat-radio-persistent-ripple {\n background-color: #2979ff;\n}\n.dark-mode .mat-radio-button.mat-warn.mat-radio-checked .mat-radio-outer-circle {\n border-color: #f44336;\n}\n.dark-mode .mat-radio-button.mat-warn .mat-radio-inner-circle,\n.dark-mode .mat-radio-button.mat-warn .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .dark-mode .mat-radio-button.mat-warn.mat-radio-checked .mat-radio-persistent-ripple, .dark-mode .mat-radio-button.mat-warn:active .mat-radio-persistent-ripple {\n background-color: #f44336;\n}\n.dark-mode .mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-outer-circle,\n.dark-mode .mat-radio-button.mat-radio-disabled .mat-radio-outer-circle {\n border-color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-radio-button.mat-radio-disabled .mat-radio-ripple .mat-ripple-element,\n.dark-mode .mat-radio-button.mat-radio-disabled .mat-radio-inner-circle {\n background-color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-radio-button.mat-radio-disabled .mat-radio-label-content {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-radio-button .mat-ripple-element {\n background-color: white;\n}\n.dark-mode .mat-select-value {\n color: white;\n}\n.dark-mode .mat-select-placeholder {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-select-disabled .mat-select-value {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-select-arrow {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-select-panel {\n background: #424242;\n}\n.dark-mode .mat-select-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-select-panel .mat-option.mat-selected:not(.mat-option-multiple) {\n background: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-form-field.mat-focused.mat-primary .mat-select-arrow {\n color: #00bcd4;\n}\n.dark-mode .mat-form-field.mat-focused.mat-accent .mat-select-arrow {\n color: #2979ff;\n}\n.dark-mode .mat-form-field.mat-focused.mat-warn .mat-select-arrow {\n color: #f44336;\n}\n.dark-mode .mat-form-field .mat-select.mat-select-invalid .mat-select-arrow {\n color: #f44336;\n}\n.dark-mode .mat-form-field .mat-select.mat-select-disabled .mat-select-arrow {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-drawer-container {\n background-color: #303030;\n color: white;\n}\n.dark-mode .mat-drawer {\n background-color: #424242;\n color: white;\n}\n.dark-mode .mat-drawer.mat-drawer-push {\n background-color: #424242;\n}\n.dark-mode .mat-drawer:not(.mat-drawer-side) {\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-drawer-side {\n border-right: solid 1px rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-drawer-side.mat-drawer-end {\n border-left: solid 1px rgba(255, 255, 255, 0.12);\n border-right: none;\n}\n.dark-mode [dir=rtl] .mat-drawer-side {\n border-left: solid 1px rgba(255, 255, 255, 0.12);\n border-right: none;\n}\n.dark-mode [dir=rtl] .mat-drawer-side.mat-drawer-end {\n border-left: none;\n border-right: solid 1px rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-drawer-backdrop.mat-drawer-shown {\n background-color: rgba(189, 189, 189, 0.6);\n}\n.dark-mode .mat-slide-toggle.mat-checked .mat-slide-toggle-thumb {\n background-color: #2979ff;\n}\n.dark-mode .mat-slide-toggle.mat-checked .mat-slide-toggle-bar {\n background-color: rgba(41, 121, 255, 0.54);\n}\n.dark-mode .mat-slide-toggle.mat-checked .mat-ripple-element {\n background-color: #2979ff;\n}\n.dark-mode .mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-thumb {\n background-color: #00bcd4;\n}\n.dark-mode .mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-bar {\n background-color: rgba(0, 188, 212, 0.54);\n}\n.dark-mode .mat-slide-toggle.mat-primary.mat-checked .mat-ripple-element {\n background-color: #00bcd4;\n}\n.dark-mode .mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-thumb {\n background-color: #f44336;\n}\n.dark-mode .mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-bar {\n background-color: rgba(244, 67, 54, 0.54);\n}\n.dark-mode .mat-slide-toggle.mat-warn.mat-checked .mat-ripple-element {\n background-color: #f44336;\n}\n.dark-mode .mat-slide-toggle:not(.mat-checked) .mat-ripple-element {\n background-color: white;\n}\n.dark-mode .mat-slide-toggle-thumb {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n background-color: #bdbdbd;\n}\n.dark-mode .mat-slide-toggle-bar {\n background-color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-slider-track-background {\n background-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-primary .mat-slider-track-fill,\n.dark-mode .mat-primary .mat-slider-thumb,\n.dark-mode .mat-primary .mat-slider-thumb-label {\n background-color: #00bcd4;\n}\n.dark-mode .mat-primary .mat-slider-thumb-label-text {\n color: white;\n}\n.dark-mode .mat-accent .mat-slider-track-fill,\n.dark-mode .mat-accent .mat-slider-thumb,\n.dark-mode .mat-accent .mat-slider-thumb-label {\n background-color: #2979ff;\n}\n.dark-mode .mat-accent .mat-slider-thumb-label-text {\n color: white;\n}\n.dark-mode .mat-warn .mat-slider-track-fill,\n.dark-mode .mat-warn .mat-slider-thumb,\n.dark-mode .mat-warn .mat-slider-thumb-label {\n background-color: #f44336;\n}\n.dark-mode .mat-warn .mat-slider-thumb-label-text {\n color: white;\n}\n.dark-mode .mat-slider-focus-ring {\n background-color: rgba(41, 121, 255, 0.2);\n}\n.dark-mode .mat-slider:hover .mat-slider-track-background,\n.dark-mode .cdk-focused .mat-slider-track-background {\n background-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-slider-disabled .mat-slider-track-background,\n.dark-mode .mat-slider-disabled .mat-slider-track-fill,\n.dark-mode .mat-slider-disabled .mat-slider-thumb {\n background-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-slider-disabled:hover .mat-slider-track-background {\n background-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-slider-min-value .mat-slider-focus-ring {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb,\n.dark-mode .mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb-label {\n background-color: white;\n}\n.dark-mode .mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb,\n.dark-mode .mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb-label {\n background-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing) .mat-slider-thumb {\n border-color: rgba(255, 255, 255, 0.3);\n background-color: transparent;\n}\n.dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover .mat-slider-thumb, .dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused .mat-slider-thumb {\n border-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover.mat-slider-disabled .mat-slider-thumb, .dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused.mat-slider-disabled .mat-slider-thumb {\n border-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-slider-has-ticks .mat-slider-wrapper::after {\n border-color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-slider-horizontal .mat-slider-ticks {\n background-image: repeating-linear-gradient(to right, rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0.7) 2px, transparent 0, transparent);\n background-image: -moz-repeating-linear-gradient(0.0001deg, rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0.7) 2px, transparent 0, transparent);\n}\n.dark-mode .mat-slider-vertical .mat-slider-ticks {\n background-image: repeating-linear-gradient(to bottom, rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0.7) 2px, transparent 0, transparent);\n}\n.dark-mode .mat-step-header.cdk-keyboard-focused, .dark-mode .mat-step-header.cdk-program-focused, .dark-mode .mat-step-header:hover {\n background-color: rgba(255, 255, 255, 0.04);\n}\n@media (hover: none) {\n .dark-mode .mat-step-header:hover {\n background: none;\n }\n}\n.dark-mode .mat-step-header .mat-step-label,\n.dark-mode .mat-step-header .mat-step-optional {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-step-header .mat-step-icon {\n background-color: rgba(255, 255, 255, 0.7);\n color: white;\n}\n.dark-mode .mat-step-header .mat-step-icon-selected,\n.dark-mode .mat-step-header .mat-step-icon-state-done,\n.dark-mode .mat-step-header .mat-step-icon-state-edit {\n background-color: #00bcd4;\n color: white;\n}\n.dark-mode .mat-step-header .mat-step-icon-state-error {\n background-color: transparent;\n color: #f44336;\n}\n.dark-mode .mat-step-header .mat-step-label.mat-step-label-active {\n color: white;\n}\n.dark-mode .mat-step-header .mat-step-label.mat-step-label-error {\n color: #f44336;\n}\n.dark-mode .mat-stepper-horizontal, .dark-mode .mat-stepper-vertical {\n background-color: #424242;\n}\n.dark-mode .mat-stepper-vertical-line::before {\n border-left-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-horizontal-stepper-header::before,\n.dark-mode .mat-horizontal-stepper-header::after,\n.dark-mode .mat-stepper-horizontal-line {\n border-top-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-sort-header-arrow {\n color: #c6c6c6;\n}\n.dark-mode .mat-tab-nav-bar,\n.dark-mode .mat-tab-header {\n border-bottom: 1px solid rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-tab-group-inverted-header .mat-tab-nav-bar,\n.dark-mode .mat-tab-group-inverted-header .mat-tab-header {\n border-top: 1px solid rgba(255, 255, 255, 0.12);\n border-bottom: none;\n}\n.dark-mode .mat-tab-label, .dark-mode .mat-tab-link {\n color: white;\n}\n.dark-mode .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-link.mat-tab-disabled {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-tab-header-pagination-chevron {\n border-color: white;\n}\n.dark-mode .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-tab-group[class*=mat-background-] .mat-tab-header,\n.dark-mode .mat-tab-nav-bar[class*=mat-background-] {\n border-bottom: none;\n border-top: none;\n}\n.dark-mode .mat-tab-group.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(178, 235, 242, 0.3);\n}\n.dark-mode .mat-tab-group.mat-primary .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-primary .mat-ink-bar {\n background-color: #00bcd4;\n}\n.dark-mode .mat-tab-group.mat-primary.mat-background-primary .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-primary.mat-background-primary .mat-ink-bar {\n background-color: white;\n}\n.dark-mode .mat-tab-group.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(130, 177, 255, 0.3);\n}\n.dark-mode .mat-tab-group.mat-accent .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-accent .mat-ink-bar {\n background-color: #2979ff;\n}\n.dark-mode .mat-tab-group.mat-accent.mat-background-accent .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-accent.mat-background-accent .mat-ink-bar {\n background-color: white;\n}\n.dark-mode .mat-tab-group.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(255, 205, 210, 0.3);\n}\n.dark-mode .mat-tab-group.mat-warn .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-warn .mat-ink-bar {\n background-color: #f44336;\n}\n.dark-mode .mat-tab-group.mat-warn.mat-background-warn .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-warn.mat-background-warn .mat-ink-bar {\n background-color: white;\n}\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(178, 235, 242, 0.3);\n}\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-header, .dark-mode .mat-tab-group.mat-background-primary .mat-tab-links, .dark-mode .mat-tab-group.mat-background-primary .mat-tab-header-pagination, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-header, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-links, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination {\n background-color: #00bcd4;\n}\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-label, .dark-mode .mat-tab-group.mat-background-primary .mat-tab-link, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-label, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-link {\n color: white;\n}\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-group.mat-background-primary .mat-tab-link.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-link.mat-tab-disabled {\n color: rgba(255, 255, 255, 0.4);\n}\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-chevron {\n border-color: white;\n}\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(255, 255, 255, 0.4);\n}\n.dark-mode .mat-tab-group.mat-background-primary .mat-ripple-element, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(130, 177, 255, 0.3);\n}\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-header, .dark-mode .mat-tab-group.mat-background-accent .mat-tab-links, .dark-mode .mat-tab-group.mat-background-accent .mat-tab-header-pagination, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-header, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-links, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination {\n background-color: #2979ff;\n}\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-label, .dark-mode .mat-tab-group.mat-background-accent .mat-tab-link, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-label, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-link {\n color: white;\n}\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-group.mat-background-accent .mat-tab-link.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-link.mat-tab-disabled {\n color: rgba(255, 255, 255, 0.4);\n}\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-chevron {\n border-color: white;\n}\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(255, 255, 255, 0.4);\n}\n.dark-mode .mat-tab-group.mat-background-accent .mat-ripple-element, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(255, 205, 210, 0.3);\n}\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-header, .dark-mode .mat-tab-group.mat-background-warn .mat-tab-links, .dark-mode .mat-tab-group.mat-background-warn .mat-tab-header-pagination, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-header, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-links, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination {\n background-color: #f44336;\n}\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-label, .dark-mode .mat-tab-group.mat-background-warn .mat-tab-link, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-label, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-link {\n color: white;\n}\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-group.mat-background-warn .mat-tab-link.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-link.mat-tab-disabled {\n color: rgba(255, 255, 255, 0.4);\n}\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-chevron {\n border-color: white;\n}\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(255, 255, 255, 0.4);\n}\n.dark-mode .mat-tab-group.mat-background-warn .mat-ripple-element, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-toolbar {\n background: #212121;\n color: white;\n}\n.dark-mode .mat-toolbar.mat-primary {\n background: #00bcd4;\n color: white;\n}\n.dark-mode .mat-toolbar.mat-accent {\n background: #2979ff;\n color: white;\n}\n.dark-mode .mat-toolbar.mat-warn {\n background: #f44336;\n color: white;\n}\n.dark-mode .mat-toolbar .mat-form-field-underline,\n.dark-mode .mat-toolbar .mat-form-field-ripple,\n.dark-mode .mat-toolbar .mat-focused .mat-form-field-ripple {\n background-color: currentColor;\n}\n.dark-mode .mat-toolbar .mat-form-field-label,\n.dark-mode .mat-toolbar .mat-focused .mat-form-field-label,\n.dark-mode .mat-toolbar .mat-select-value,\n.dark-mode .mat-toolbar .mat-select-arrow,\n.dark-mode .mat-toolbar .mat-form-field.mat-focused .mat-select-arrow {\n color: inherit;\n}\n.dark-mode .mat-toolbar .mat-input-element {\n caret-color: currentColor;\n}\n.dark-mode .mat-tooltip {\n background: rgba(97, 97, 97, 0.9);\n}\n.dark-mode .mat-tree {\n background: #424242;\n}\n.dark-mode .mat-tree-node,\n.dark-mode .mat-nested-tree-node {\n color: white;\n}\n.dark-mode .mat-snack-bar-container {\n color: rgba(0, 0, 0, 0.87);\n background: #fafafa;\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-simple-snackbar-action {\n color: inherit;\n}\n\n.mat-stroked-button.mat-black {\n border: solid black 1px;\n border-radius: 0;\n display: flex;\n align-items: center;\n height: 2em;\n padding-left: 2.5em;\n padding-right: 2.5em;\n}\n.mat-stroked-button.mat-black .mat-button-wrapper {\n font-weight: normal;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n color: black;\n}\n\n.mat-stroked-button.mat-coachmark {\n border: solid #6f4d00 1px;\n border-radius: 0;\n display: flex;\n align-items: center;\n height: 2em;\n padding-left: 2.5em;\n padding-right: 2.5em;\n}\n.mat-stroked-button.mat-coachmark .mat-button-wrapper {\n font-weight: normal;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n color: #6f4d00;\n}\n\n.mat-stroked-button.mat-blue-coachmark {\n border: solid #1B1B19 1px;\n border-radius: 0;\n display: flex;\n align-items: center;\n height: 2em;\n padding-left: 2.5em;\n padding-right: 2.5em;\n}\n.mat-stroked-button.mat-blue-coachmark .mat-button-wrapper {\n font-weight: normal;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n color: #1B1B19;\n}\n\nhtml,\nbody {\n height: 100%;\n width: 100%;\n}\n\nbody {\n background-color: #fff;\n}\n\n.app,\nbody {\n font-family: \"Helvetica Neue\", \"Helvetica\", Arial, sans-serif;\n font-weight: 300;\n}\n\n.app {\n position: absolute;\n}\n\nhtml,\nbody {\n margin: 0;\n padding: 0;\n font-size: 16px;\n}\n\n.app {\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n}\n\n* {\n font-family: \"Helvetica Neue\", \"Helvetica\", Arial, sans-serif;\n box-sizing: border-box;\n}\n\n.center {\n position: absolute;\n top: 50%;\n left: 50%;\n -webkit-transform: translate(-50%, -50%);\n -ms-transform: translate(-50%, -50%);\n transform: translate(-50%, -50%);\n margin: auto;\n}\n\n.loading {\n display: inline-block;\n padding: 1.5em;\n border-radius: 1em;\n color: #000;\n font-size: 10mm;\n text-align: center;\n}\n\n.bounce,\n.bounce .circle,\n.bounce .circle .inner {\n height: 4em;\n width: 4em;\n border-radius: 100%;\n}\n\n.bounce .circle {\n -webkit-animation: sk-scaleout 0.8s infinite ease-in-out;\n animation: sk-scaleout 0.8s infinite ease-in-out;\n}\n\n.bounce .circle .inner {\n background-color: #000;\n}\n\n@-webkit-keyframes sk-scaleout {\n 0% {\n -webkit-transform: scale(0);\n }\n 20% {\n opacity: 1;\n }\n 100% {\n -webkit-transform: scale(1);\n opacity: 0;\n }\n}\n@keyframes sk-scaleout {\n 0% {\n -webkit-transform: scale(0);\n transform: scale(0);\n }\n 20% {\n opacity: 1;\n }\n 100% {\n -webkit-transform: scale(1);\n transform: scale(1);\n opacity: 0;\n }\n}\n.no-script {\n height: 10em;\n width: 15em;\n padding: 0.5em 1em;\n background-color: #FFF;\n border-radius: 0.1em;\n box-shadow: 0 0.1em 0.2em 0.1em rgba(0, 0, 0, 0.2);\n text-align: center;\n position: absolute;\n top: 1em;\n left: 50%;\n transform: translateX(-50%);\n}\n\n.no-script img {\n border-radius: 0.2em;\n height: 6em;\n width: 6em;\n}\n\n.no-script .title {\n padding: 0 1em;\n font-style: italic;\n font-size: 1.2em;\n}\n\n.no-script .content {\n display: flex;\n}\n\n.aca-coin {\n position: relative;\n height: 4em;\n width: 4em;\n padding: 0.5em;\n margin: 0.5em;\n border-radius: 100%;\n background-color: #dd3d5e;\n animation: coin-spin 2s infinite ease-in-out;\n}\n\n.aca-logo {\n height: 3em;\n width: 3em;\n background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDIwMDEwOTA0Ly9FTiIKICJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy1TVkctMjAwMTA5MDQvRFREL3N2ZzEwLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4wIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiB3aWR0aD0iNzc5LjAwMDAwMHB0IiBoZWlnaHQ9IjMyNC4wMDAwMDBwdCIgdmlld0JveD0iMCAwIDc3OS4wMDAwMDAgMzI0LjAwMDAwMCIKIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiPgo8bWV0YWRhdGE+CkNyZWF0ZWQgYnkgcG90cmFjZSAxLjE0LCB3cml0dGVuIGJ5IFBldGVyIFNlbGluZ2VyIDIwMDEtMjAxNwo8L21ldGFkYXRhPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjAwMDAwMCwzMjQuMDAwMDAwKSBzY2FsZSgwLjEwMDAwMCwtMC4xMDAwMDApIgpmaWxsPSIjZmZmIiBzdHJva2U9Im5vbmUiPgo8cGF0aCBkPSJNNDAwNSAzMjI4IGMtNDQ3IC0yNSAtODM5IC0yMzUgLTExMDkgLTU5NiAtMzE5IC00MjYgLTQxMSAtMTE0NQotMjE2IC0xNjk3IDE2NyAtNDcxIDU0OSAtODAzIDEwMzcgLTkwMiAxMTEgLTIzIDUwNSAtMjYgNjIzIC01IDEyNyAyMyAyODAgNjIKMzgyIDk5IGw5OCAzNSAwIDEwNSBjMCA5NiAtMiAxMDUgLTE3IDEwMCAtMTAgLTMgLTU3IC0yMiAtMTA2IC00MSAtMTkzIC04MAotMzczIC0xMTEgLTYzNyAtMTExIC0yNzQgMCAtNDAxIDI3IC01OTcgMTI5IC0xMTYgNjAgLTE5OSAxMjQgLTMwMyAyMzMgLTE3MgoxNzggLTI3NiAzODggLTMyNSA2NTYgLTM2IDE5NSAtMzYgNTA4IDAgNzAzIDEwMSA1NTUgNDY2IDk1MiA5ODIgMTA3MCA5MyAyMQo0MTUgMzAgNTI1IDE1IDEyNCAtMTggMjc2IC01NiAzNzkgLTk2IDUwIC0xOSA5MyAtMzUgOTUgLTM1IDIgMCA0IDUyIDQgMTE1CmwwIDExNCAtODcgMjcgYy0yMjggNjkgLTQ2OSA5NyAtNzI4IDgyeiIvPgo8cGF0aCBkPSJNNTkxIDE2MzMgYy0zMjEgLTg1MSAtNTg2IC0xNTU0IC01ODkgLTE1NjEgLTMgLTkgMjQgLTEyIDExNiAtMTIKbDEyMCAwIDYwIDE2MiBjMzMgOTAgMTEzIDMwOCAxNzggNDg2IGwxMTkgMzIyIDY3NSAwIDY3NSAwIDEwNCAtMjgyIGM1NyAtMTU2CjEzNyAtMzc0IDE3OCAtNDg2IGw3NSAtMjAyIDExOSAwIGM4OSAwIDExOSAzIDExOCAxMyAwIDYgLTI2MCA3MDcgLTU3NyAxNTU3CmwtNTc3IDE1NDUgLTEwNSAzIC0xMDYgMyAtNTgzIC0xNTQ4eiIvPgo8cGF0aCBkPSJNNjQwNSAzMTYzIGMtMzggLTk5IC0xMTU5IC0zMDcyIC0xMTYzIC0zMDg2IC00IC0xNSA2IC0xNyAxMTQgLTE3CmwxMTkgMCAxMDQgMjgzIGM1NyAxNTUgMTM3IDM3MyAxNzggNDg1IGw3NSAyMDIgNjc2IC0yIDY3NiAtMyAxNzYgLTQ4MCAxNzcKLTQ4MCAxMjIgLTMgMTIzIC0zIC04IDIzIGMtNCAxMiAtMjY0IDcxMyAtNTc5IDE1NTggbC01NzMgMTUzNSAtMTA1IDMgYy05MyAyCi0xMDUgMSAtMTEyIC0xNXoiLz4KPC9nPgo8L3N2Zz4K);\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n}\n\n@keyframes coin-spin {\n 0% {\n transform: rotateY(0deg) translateY(0%);\n }\n 49% {\n transform: rotateY(179deg) translateY(20%);\n }\n 50% {\n transform: rotateY(181deg) translateY(20%);\n }\n 100% {\n transform: rotateY(359deg) translateY(0%);\n }\n}\n.shadow {\n position: absolute;\n bottom: 0;\n left: 50%;\n animation: floating-shadow 2s infinite ease-in-out;\n width: 48px;\n height: 6px;\n background-color: rgba(0, 0, 0, 0.2);\n border-radius: 100%;\n}\n\n@keyframes floating-shadow {\n 0% {\n transform: translateX(-50%) scale(1);\n }\n 45% {\n transform: translateX(-50%) scale(1.3);\n }\n 55% {\n transform: translateX(-50%) scale(1.3);\n }\n 100% {\n transform: translateX(-50%) scale(1);\n }\n}\nhtml, body {\n height: 100%;\n}\n\nbody {\n margin: 0;\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.yellow-snackbar {\n background: #ffd149;\n color: rgba(0, 0, 0, 0.9);\n text-align: center;\n}\n.yellow-snackbar span {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.sub app-map-controls > div mck-legend-dropdown {\n position: relative;\n top: -6px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .sub app-map-controls > div .map-info-button {\n display: none !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .sub app-map-controls > div .map-info-button {\n display: none !important;\n }\n}\n\n.mck-modal-backdrop {\n background-color: rgba(5, 28, 44, 0.85);\n}\n\n.pulsate {\n animation: pulsate 2s ease-out;\n animation-iteration-count: infinite;\n opacity: 0.3;\n}\n\n@keyframes pulsate {\n 0% {\n opacity: 0.3;\n }\n 50% {\n opacity: 1;\n }\n 100% {\n opacity: 0.3;\n }\n}\n.mat-form-field-invalid .mat-form-field-outline > div, .mat-form-field-invalid .mat-form-field-outline-thick > div {\n border-color: #f44336 !important;\n}\n\n.mck-toggle {\n position: relative;\n}\n.mck-toggle .mat-slide-toggle-thumb {\n height: 0.875rem;\n width: 0.875rem;\n border-radius: 50%;\n}\n.mck-toggle .mat-slide-toggle-thumb-container {\n top: 0.2rem;\n left: 0.2rem;\n}\n.mck-toggle .mat-slide-toggle-bar {\n position: relative;\n width: 2.5rem;\n height: 1.25rem;\n flex-shrink: 0;\n border-radius: 1.25rem;\n background-color: #d0d0d0;\n}\n.mck-toggle .mat-slide-toggle-bar .mat-slide-toggle-ripple {\n top: calc(50% - 23px);\n}\n.mck-toggle.mat-checked .mat-slide-toggle-thumb-container {\n left: 0.42rem;\n}\n.mck-toggle.mat-checked .mat-slide-toggle-thumb {\n background-color: white;\n}\n.mck-toggle.mat-checked .mat-slide-toggle-bar {\n background-color: #2152fe;\n}\n\n.mck-chevron-icon svg {\n transform: rotate(180deg);\n transition: transform 0.5s ease;\n}\n.mck-chevron-icon.turn-up svg {\n transform: rotate(0deg);\n}\n\n.mat-tab-label {\n padding: 0 6px 0 2px !important;\n min-width: auto !important;\n margin-right: 40px;\n font-family: \"McKinsey Sans\";\n font-size: 20px;\n font-weight: 400;\n color: #333333;\n opacity: 1 !important;\n}\n.mat-tab-label.mat-tab-label-active .mat-tab-label-content {\n color: #2251FF;\n}\n.mat-tab-label .mat-tab-label-content {\n color: #333333;\n padding-bottom: 20px;\n}\n\n.mat-tab-group.mat-primary .mat-ink-bar, .mat-tab-nav-bar.mat-primary .mat-ink-bar {\n background-color: #2251FF;\n height: 4px;\n}\n\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-tab .mat-tab-header {\n transform: scale(0.65) !important;\n width: 100vw;\n display: block;\n position: relative;\n left: -19%;\n }\n .mck-tab .mat-tab-header .mat-tab-header-pagination {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-tab .mat-tab-header {\n transform: scale(0.65) !important;\n width: 100vw;\n display: block;\n position: relative;\n left: -19%;\n }\n .mck-tab .mat-tab-header .mat-tab-header-pagination {\n display: none;\n }\n}\n.status {\n background: #fff;\n color: #000;\n}\n.status.tentative, .status.pending, .status.requested {\n background: #FFF3CE;\n color: #6A4F00;\n}\n.status.accepted {\n background: #D1F4DD;\n color: #006200;\n}\n.status.approved {\n background: #D1F4DD;\n color: #006200;\n}\n.status.expired {\n background: #F0F0F0;\n color: #757575;\n}\n.status.declined, .status.cancelled {\n background: #FFE5EA;\n color: #B0001D;\n}\n\n.banner {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 26px;\n box-sizing: border-box;\n}\n.banner .banner-text {\n width: calc(100% - 50px);\n padding: 0 20px;\n box-sizing: border-box;\n font-weight: 500;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n margin: 0;\n text-align: left;\n}\n.banner img:last-child {\n cursor: pointer;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .banner {\n align-items: end;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .banner {\n align-items: end;\n }\n}\n.banner.advise {\n background-color: #EBEBF6;\n justify-content: start !important;\n border: 1px solid rgba(106, 79, 0, 0.11);\n}\n.banner.advise .banner-text {\n color: #1B1B19;\n}\n.banner.info {\n background-color: #E6ECFF;\n}\n.banner.info .banner-text {\n color: #1E32E6;\n}\n.banner.warning {\n background-color: #fdf1f3;\n}\n.banner.warning .banner-text {\n color: #B0001D;\n}\n.banner.fixed {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n z-index: 5;\n}\n\n.fullpage-modal {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 3;\n background-color: #f8f9fa;\n}\n.fullpage-modal .header {\n z-index: 1;\n}\n\n.coachmark {\n margin-top: 0;\n position: relative;\n top: -6px;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n line-height: 20px;\n color: #333333;\n}\n\n.bottom-panel-buttons {\n position: fixed;\n bottom: 0;\n width: 100%;\n min-height: 80px;\n background-color: white;\n border: 1px solid #E6E6E6;\n z-index: 1002;\n}\n.bottom-panel-buttons .buttons {\n padding: 24px 16px;\n border: none;\n background-color: transparent;\n max-width: 684px;\n margin: 0 auto;\n display: flex;\n}\n.bottom-panel-buttons .buttons button {\n flex: 1;\n height: 48px;\n font-size: 16px;\n max-width: 332px;\n}\n.bottom-panel-buttons .buttons button:nth-child(1) {\n margin-right: 5px;\n border: 1px solid #D0D0D0;\n}\n.bottom-panel-buttons .buttons button:nth-child(2) {\n margin-left: 5px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .bottom-panel-buttons .buttons {\n padding: 16px 0;\n }\n .bottom-panel-buttons .buttons button {\n margin: 0 16px;\n }\n .bottom-panel-buttons .buttons button:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel-buttons .buttons button:nth-child(2) {\n margin-left: 8px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .bottom-panel-buttons .buttons {\n padding: 16px 0;\n }\n .bottom-panel-buttons .buttons button {\n margin: 0 16px;\n }\n .bottom-panel-buttons .buttons button:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel-buttons .buttons button:nth-child(2) {\n margin-left: 8px;\n }\n}\n\n.modal_mask {\n width: 100vw;\n height: 100vh;\n position: fixed;\n top: 0;\n left: 0;\n background-color: white;\n z-index: 3;\n}","// Import all the theming functionality.\n// We want overlays to always appear over user content, so set a baseline\n// very high z-index for the overlay container, which is where we create the new\n// stacking context for all overlays.\n$cdk-z-index-overlay-container: 1000 !default;\n$cdk-z-index-overlay: 1000 !default;\n$cdk-z-index-overlay-backdrop: 1000 !default;\n\n// Background color for all of the backdrops\n$cdk-overlay-dark-backdrop-background: rgba(0, 0, 0, 0.32) !default;\n\n// Default backdrop animation is based on the Material Design swift-ease-out.\n$backdrop-animation-duration: 400ms !default;\n$backdrop-animation-timing-function: cubic-bezier(0.25, 0.8, 0.25, 1) !default;\n\n\n@mixin cdk-overlay() {\n .cdk-overlay-container, .cdk-global-overlay-wrapper {\n // Disable events from being captured on the overlay container.\n pointer-events: none;\n\n // The container should be the size of the viewport.\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n }\n\n // The overlay-container is an invisible element which contains all individual overlays.\n .cdk-overlay-container {\n position: fixed;\n z-index: $cdk-z-index-overlay-container;\n\n &:empty {\n // Hide the element when it doesn't have any child nodes. This doesn't\n // include overlays that have been detached, rather than disposed.\n display: none;\n }\n }\n\n // We use an extra wrapper element in order to use make the overlay itself a flex item.\n // This makes centering the overlay easy without running into the subpixel rendering\n // problems tied to using `transform` and without interfering with the other position\n // strategies.\n .cdk-global-overlay-wrapper {\n display: flex;\n position: absolute;\n z-index: $cdk-z-index-overlay;\n }\n\n // A single overlay pane.\n .cdk-overlay-pane {\n // Note: it's important for this one to start off `absolute`,\n // in order for us to be able to measure it correctly.\n position: absolute;\n pointer-events: auto;\n box-sizing: border-box;\n z-index: $cdk-z-index-overlay;\n\n // For connected-position overlays, we set `display: flex` in\n // order to force `max-width` and `max-height` to take effect.\n display: flex;\n max-width: 100%;\n max-height: 100%;\n }\n\n .cdk-overlay-backdrop {\n // TODO(jelbourn): reuse sidenav fullscreen mixin.\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n\n z-index: $cdk-z-index-overlay-backdrop;\n pointer-events: auto;\n -webkit-tap-highlight-color: transparent;\n transition: opacity $backdrop-animation-duration $backdrop-animation-timing-function;\n opacity: 0;\n\n &.cdk-overlay-backdrop-showing {\n opacity: 1;\n\n // In high contrast mode the rgba background will become solid so we need to fall back\n // to making it opaque using `opacity`. Note that we can't use the `cdk-high-contrast`\n // mixin, because we can't normalize the import path to the _a11y.scss both for the\n // source and when this file is distributed. See #10908.\n @media screen and (-ms-high-contrast: active) {\n opacity: 0.6;\n }\n }\n }\n\n .cdk-overlay-dark-backdrop {\n background: $cdk-overlay-dark-backdrop-background;\n }\n\n .cdk-overlay-transparent-backdrop {\n // Note: as of Firefox 57, having the backdrop be `background: none` will prevent it from\n // capturing the user's mouse scroll events. Since we also can't use something like\n // `rgba(0, 0, 0, 0)`, we work around the inconsistency by not setting the background at\n // all and using `opacity` to make the element transparent.\n &, &.cdk-overlay-backdrop-showing {\n opacity: 0;\n }\n }\n\n // Overlay parent element used with the connected position strategy. Used to constrain the\n // overlay element's size to fit within the viewport.\n .cdk-overlay-connected-position-bounding-box {\n position: absolute;\n z-index: $cdk-z-index-overlay;\n\n // We use `display: flex` on this element exclusively for centering connected overlays.\n // When *not* centering, a top/left/bottom/right will be set which overrides the normal\n // flex layout.\n display: flex;\n\n // We use the `column` direction here to avoid some flexbox issues in Edge\n // when using the \"grow after open\" options.\n flex-direction: column;\n\n // Add some dimensions so the element has an `innerText` which some people depend on in tests.\n min-width: 1px;\n min-height: 1px;\n }\n\n // Used when disabling global scrolling.\n .cdk-global-scrollblock {\n position: fixed;\n\n // Necessary for the content not to lose its width. Note that we're using 100%, instead of\n // 100vw, because 100vw includes the width plus the scrollbar, whereas 100% is the width\n // that the element had before we made it `fixed`.\n width: 100%;\n\n // Note: this will always add a scrollbar to whatever element it is on, which can\n // potentially result in double scrollbars. It shouldn't be an issue, because we won't\n // block scrolling on a page that doesn't have a scrollbar in the first place.\n overflow-y: scroll;\n }\n}\n\n@mixin cdk-a11y {\n .cdk-visually-hidden {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n\n // Avoid browsers rendering the focus ring in some cases.\n outline: 0;\n\n // Avoid some cases where the browser will still render the native controls (see #9049).\n -webkit-appearance: none;\n -moz-appearance: none;\n }\n}\n\n/// Emits the mixin's content nested under `$selector-context` if `$selector-context`\n/// is non-empty.\n/// @param selector-context The selector under which to nest the mixin's content.\n@mixin _cdk-optionally-nest-content($selector-context) {\n @if ($selector-context == '') {\n @content;\n }\n @else {\n #{$selector-context} {\n @content;\n }\n }\n}\n\n/// Applies styles for users in high contrast mode. Note that this only applies\n/// to Microsoft browsers. Chrome can be included by checking for the `html[hc]`\n/// attribute, however Chrome handles high contrast differently.\n///\n/// @param target Which kind of high contrast setting to target. Defaults to `active`, can be\n/// `white-on-black` or `black-on-white`.\n/// @param encapsulation Whether to emit styles for view encapsulation. Values are:\n/// * `on` - works for `Emulated`, `Native`, and `ShadowDom`\n/// * `off` - works for `None`\n/// * `any` - works for all encapsulation modes by emitting the CSS twice (default).\n@mixin cdk-high-contrast($target: active, $encapsulation: 'any') {\n @if ($target != 'active' and $target != 'black-on-white' and $target != 'white-on-black') {\n @error 'Unknown cdk-high-contrast value \"#{$target}\" provided. ' +\n 'Allowed values are \"active\", \"black-on-white\", and \"white-on-black\"';\n }\n\n @if ($encapsulation != 'on' and $encapsulation != 'off' and $encapsulation != 'any') {\n @error 'Unknown cdk-high-contrast encapsulation \"#{$encapsulation}\" provided. ' +\n 'Allowed values are \"on\", \"off\", and \"any\"';\n }\n\n // If the selector context has multiple parts, such as `.section, .region`, just doing\n // `.cdk-high-contrast-xxx #{&}` will only apply the parent selector to the first part of the\n // context. We address this by nesting the selector context under .cdk-high-contrast.\n @at-root {\n $selector-context: #{&};\n\n @if ($encapsulation != 'on') {\n .cdk-high-contrast-#{$target} {\n @include _cdk-optionally-nest-content($selector-context) {\n @content;\n }\n }\n }\n\n @if ($encapsulation != 'off') {\n .cdk-high-contrast-#{$target} :host {\n @include _cdk-optionally-nest-content($selector-context) {\n @content;\n }\n }\n }\n }\n}\n\n// Core styles that enable monitoring autofill state of text fields.\n@mixin cdk-text-field {\n // Keyframes that apply no styles, but allow us to monitor when an text field becomes autofilled\n // by watching for the animation events that are fired when they start. Note: the /*!*/ comment is\n // needed to prevent LibSass from stripping the keyframes out.\n // Based on: https://medium.com/@brunn/detecting-autofilled-fields-in-javascript-aed598d25da7\n @keyframes cdk-text-field-autofill-start {/*!*/}\n @keyframes cdk-text-field-autofill-end {/*!*/}\n\n .cdk-text-field-autofill-monitored:-webkit-autofill {\n // Since Chrome 80 we need a 1ms delay, or the animationstart event won't fire.\n animation: cdk-text-field-autofill-start 0s 1ms;\n }\n\n .cdk-text-field-autofill-monitored:not(:-webkit-autofill) {\n // Since Chrome 80 we need a 1ms delay, or the animationstart event won't fire.\n animation: cdk-text-field-autofill-end 0s 1ms;\n }\n\n // Remove the resize handle on autosizing textareas, because whatever height\n // the user resized to will be overwritten once they start typing again.\n textarea.cdk-textarea-autosize {\n resize: none;\n }\n\n // This class is temporarily applied to the textarea when it is being measured. It is immediately\n // removed when measuring is complete. We use `!important` rules here to make sure user-specified\n // rules do not interfere with the measurement.\n textarea.cdk-textarea-autosize-measuring {\n height: auto !important;\n overflow: hidden !important;\n // Having 2px top and bottom padding seems to fix a bug where Chrome gets an incorrect\n // measurement. We just have to account for it later and subtract it off the final result.\n padding: 2px 0 !important;\n box-sizing: content-box !important;\n }\n}\n\n// Used to generate UIDs for keyframes used to change the text field autofill styles.\n$cdk-text-field-autofill-color-frame-count: 0;\n\n// Mixin used to apply custom background and foreground colors to an autofilled text field.\n// Based on: https://stackoverflow.com/questions/2781549/\n// removing-input-background-colour-for-chrome-autocomplete#answer-37432260\n@mixin cdk-text-field-autofill-color($background, $foreground:'') {\n @keyframes cdk-text-field-autofill-color-#{$cdk-text-field-autofill-color-frame-count} {\n to {\n background: $background;\n @if $foreground != '' { color: $foreground; }\n }\n }\n\n &:-webkit-autofill {\n animation: cdk-text-field-autofill-color-#{$cdk-text-field-autofill-color-frame-count} both;\n }\n\n &.cdk-text-field-autofill-monitored:-webkit-autofill {\n // Since Chrome 80 we need a 1ms delay for cdk-text-field-autofill-start, or the animationstart\n // event won't fire.\n animation: cdk-text-field-autofill-start 0s 1ms,\n cdk-text-field-autofill-color-#{$cdk-text-field-autofill-color-frame-count} both;\n }\n\n $cdk-text-field-autofill-color-frame-count:\n $cdk-text-field-autofill-color-frame-count + 1 !global;\n}\n\n\n// Core styles that can be used to apply material design treatments to any element.\n// Media queries\n// TODO(josephperrott): Change $mat-xsmall and $mat-small usages to rely on BreakpointObserver,\n$mat-xsmall: 'max-width: 599px';\n$mat-small: 'max-width: 959px';\n\n// TODO: Revisit all z-indices before beta\n// z-index master list\n\n$z-index-fab: 20 !default;\n$z-index-drawer: 100 !default;\n\n// Global constants\n$pi: 3.14159265;\n\n// Padding between input toggles and their labels\n$mat-toggle-padding: 8px !default;\n// Width and height of input toggles\n$mat-toggle-size: 20px !default;\n\n// Easing Curves\n// TODO(jelbourn): all of these need to be revisited\n\n// The default animation curves used by material design.\n$mat-linear-out-slow-in-timing-function: cubic-bezier(0, 0, 0.2, 0.1) !default;\n$mat-fast-out-slow-in-timing-function: cubic-bezier(0.4, 0, 0.2, 1) !default;\n$mat-fast-out-linear-in-timing-function: cubic-bezier(0.4, 0, 1, 1) !default;\n\n$ease-in-out-curve-function: cubic-bezier(0.35, 0, 0.25, 1) !default;\n\n$swift-ease-out-duration: 400ms !default;\n$swift-ease-out-timing-function: cubic-bezier(0.25, 0.8, 0.25, 1) !default;\n$swift-ease-out: all $swift-ease-out-duration $swift-ease-out-timing-function !default;\n\n$swift-ease-in-duration: 300ms !default;\n$swift-ease-in-timing-function: cubic-bezier(0.55, 0, 0.55, 0.2) !default;\n$swift-ease-in: all $swift-ease-in-duration $swift-ease-in-timing-function !default;\n\n$swift-ease-in-out-duration: 500ms !default;\n$swift-ease-in-out-timing-function: $ease-in-out-curve-function !default;\n$swift-ease-in-out: all $swift-ease-in-out-duration $swift-ease-in-out-timing-function !default;\n\n$swift-linear-duration: 80ms !default;\n$swift-linear-timing-function: linear !default;\n$swift-linear: all $swift-linear-duration $swift-linear-timing-function !default;\n\n\n\n// A collection of mixins and CSS classes that can be used to apply elevation to a material\n// element.\n// See: https://material.io/design/environment/elevation.html\n// Examples:\n//\n//\n// .mat-foo {\n// @include $mat-elevation(2);\n//\n// &:active {\n// @include $mat-elevation(8);\n// }\n// }\n//\n//

Some content

\n//\n// For an explanation of the design behind how elevation is implemented, see the design doc at\n// https://goo.gl/Kq0k9Z.\n\n// Colors for umbra, penumbra, and ambient shadows. As described in the design doc, each elevation\n// level is created using a set of 3 shadow values, one for umbra (the shadow representing the\n// space completely obscured by an object relative to its light source), one for penumbra (the\n// space partially obscured by an object), and one for ambient (the space which contains the object\n// itself). For a further explanation of these terms and their meanings, see\n// https://en.wikipedia.org/wiki/Umbra,_penumbra_and_antumbra.\n\n// Maps for the different shadow sets and their values within each z-space. These values were\n// created by taking a few reference shadow sets created by Google's Designers and interpolating\n// all of the values between them.\n\n@function _get-umbra-map($color, $opacity) {\n $shadow-color: if(type-of($color) == color, rgba($color, $opacity * 0.2), $color);\n\n @return (\n 0: '0px 0px 0px 0px #{$shadow-color}',\n 1: '0px 2px 1px -1px #{$shadow-color}',\n 2: '0px 3px 1px -2px #{$shadow-color}',\n 3: '0px 3px 3px -2px #{$shadow-color}',\n 4: '0px 2px 4px -1px #{$shadow-color}',\n 5: '0px 3px 5px -1px #{$shadow-color}',\n 6: '0px 3px 5px -1px #{$shadow-color}',\n 7: '0px 4px 5px -2px #{$shadow-color}',\n 8: '0px 5px 5px -3px #{$shadow-color}',\n 9: '0px 5px 6px -3px #{$shadow-color}',\n 10: '0px 6px 6px -3px #{$shadow-color}',\n 11: '0px 6px 7px -4px #{$shadow-color}',\n 12: '0px 7px 8px -4px #{$shadow-color}',\n 13: '0px 7px 8px -4px #{$shadow-color}',\n 14: '0px 7px 9px -4px #{$shadow-color}',\n 15: '0px 8px 9px -5px #{$shadow-color}',\n 16: '0px 8px 10px -5px #{$shadow-color}',\n 17: '0px 8px 11px -5px #{$shadow-color}',\n 18: '0px 9px 11px -5px #{$shadow-color}',\n 19: '0px 9px 12px -6px #{$shadow-color}',\n 20: '0px 10px 13px -6px #{$shadow-color}',\n 21: '0px 10px 13px -6px #{$shadow-color}',\n 22: '0px 10px 14px -6px #{$shadow-color}',\n 23: '0px 11px 14px -7px #{$shadow-color}',\n 24: '0px 11px 15px -7px #{$shadow-color}'\n );\n}\n\n@function _get-penumbra-map($color, $opacity) {\n $shadow-color: if(type-of($color) == color, rgba($color, $opacity * 0.14), $color);\n\n @return (\n 0: '0px 0px 0px 0px #{$shadow-color}',\n 1: '0px 1px 1px 0px #{$shadow-color}',\n 2: '0px 2px 2px 0px #{$shadow-color}',\n 3: '0px 3px 4px 0px #{$shadow-color}',\n 4: '0px 4px 5px 0px #{$shadow-color}',\n 5: '0px 5px 8px 0px #{$shadow-color}',\n 6: '0px 6px 10px 0px #{$shadow-color}',\n 7: '0px 7px 10px 1px #{$shadow-color}',\n 8: '0px 8px 10px 1px #{$shadow-color}',\n 9: '0px 9px 12px 1px #{$shadow-color}',\n 10: '0px 10px 14px 1px #{$shadow-color}',\n 11: '0px 11px 15px 1px #{$shadow-color}',\n 12: '0px 12px 17px 2px #{$shadow-color}',\n 13: '0px 13px 19px 2px #{$shadow-color}',\n 14: '0px 14px 21px 2px #{$shadow-color}',\n 15: '0px 15px 22px 2px #{$shadow-color}',\n 16: '0px 16px 24px 2px #{$shadow-color}',\n 17: '0px 17px 26px 2px #{$shadow-color}',\n 18: '0px 18px 28px 2px #{$shadow-color}',\n 19: '0px 19px 29px 2px #{$shadow-color}',\n 20: '0px 20px 31px 3px #{$shadow-color}',\n 21: '0px 21px 33px 3px #{$shadow-color}',\n 22: '0px 22px 35px 3px #{$shadow-color}',\n 23: '0px 23px 36px 3px #{$shadow-color}',\n 24: '0px 24px 38px 3px #{$shadow-color}'\n );\n}\n\n@function _get-ambient-map($color, $opacity) {\n $shadow-color: if(type-of($color) == color, rgba($color, $opacity * 0.12), $color);\n\n @return (\n 0: '0px 0px 0px 0px #{$shadow-color}',\n 1: '0px 1px 3px 0px #{$shadow-color}',\n 2: '0px 1px 5px 0px #{$shadow-color}',\n 3: '0px 1px 8px 0px #{$shadow-color}',\n 4: '0px 1px 10px 0px #{$shadow-color}',\n 5: '0px 1px 14px 0px #{$shadow-color}',\n 6: '0px 1px 18px 0px #{$shadow-color}',\n 7: '0px 2px 16px 1px #{$shadow-color}',\n 8: '0px 3px 14px 2px #{$shadow-color}',\n 9: '0px 3px 16px 2px #{$shadow-color}',\n 10: '0px 4px 18px 3px #{$shadow-color}',\n 11: '0px 4px 20px 3px #{$shadow-color}',\n 12: '0px 5px 22px 4px #{$shadow-color}',\n 13: '0px 5px 24px 4px #{$shadow-color}',\n 14: '0px 5px 26px 4px #{$shadow-color}',\n 15: '0px 6px 28px 5px #{$shadow-color}',\n 16: '0px 6px 30px 5px #{$shadow-color}',\n 17: '0px 6px 32px 5px #{$shadow-color}',\n 18: '0px 7px 34px 6px #{$shadow-color}',\n 19: '0px 7px 36px 6px #{$shadow-color}',\n 20: '0px 8px 38px 7px #{$shadow-color}',\n 21: '0px 8px 40px 7px #{$shadow-color}',\n 22: '0px 8px 42px 7px #{$shadow-color}',\n 23: '0px 9px 44px 8px #{$shadow-color}',\n 24: '0px 9px 46px 8px #{$shadow-color}'\n );\n}\n\n// The default duration value for elevation transitions.\n$mat-elevation-transition-duration: 280ms !default;\n\n// The default easing value for elevation transitions.\n$mat-elevation-transition-timing-function: $mat-fast-out-slow-in-timing-function;\n\n// The default color for elevation shadows.\n$mat-elevation-color: black !default;\n\n// The default opacity scaling value for elevation shadows.\n$mat-elevation-opacity: 1 !default;\n\n// Prefix for elevation-related selectors.\n$_mat-elevation-prefix: 'mat-elevation-z';\n\n// Applies the correct css rules to an element to give it the elevation specified by $zValue.\n// The $zValue must be between 0 and 24.\n@mixin mat-elevation($zValue, $color: $mat-elevation-color, $opacity: $mat-elevation-opacity) {\n @if type-of($zValue) != number or not unitless($zValue) {\n @error '$zValue must be a unitless number';\n }\n @if $zValue < 0 or $zValue > 24 {\n @error '$zValue must be between 0 and 24';\n }\n\n box-shadow: #{map-get(_get-umbra-map($color, $opacity), $zValue)},\n #{map-get(_get-penumbra-map($color, $opacity), $zValue)},\n #{map-get(_get-ambient-map($color, $opacity), $zValue)};\n}\n\n@mixin _mat-theme-elevation($zValue, $theme, $opacity: $mat-elevation-opacity) {\n $foreground: map-get($theme, foreground);\n $elevation-color: map-get($foreground, elevation);\n $elevation-color-or-default: if($elevation-color == null, $mat-elevation-color, $elevation-color);\n\n @include mat-elevation($zValue, $elevation-color-or-default, $opacity);\n}\n\n// Applies the elevation to an element in a manner that allows\n// consumers to override it via the Material elevation classes.\n@mixin mat-overridable-elevation(\n $zValue,\n $color: $mat-elevation-color,\n $opacity: $mat-elevation-opacity) {\n &:not([class*='#{$_mat-elevation-prefix}']) {\n @include mat-elevation($zValue, $color, $opacity);\n }\n}\n\n@mixin _mat-theme-overridable-elevation($zValue, $theme, $opacity: $mat-elevation-opacity) {\n $foreground: map-get($theme, foreground);\n $elevation-color: map-get($foreground, elevation);\n $elevation-color-or-default: if($elevation-color == null, $mat-elevation-color, $elevation-color);\n\n @include mat-overridable-elevation($zValue, $elevation-color-or-default, $opacity);\n}\n\n// Returns a string that can be used as the value for a transition property for elevation.\n// Calling this function directly is useful in situations where a component needs to transition\n// more than one property.\n//\n// .foo {\n// transition: mat-elevation-transition-property-value(), opacity 100ms ease;\n// }\n@function mat-elevation-transition-property-value(\n $duration: $mat-elevation-transition-duration,\n $easing: $mat-elevation-transition-timing-function) {\n @return box-shadow #{$duration} #{$easing};\n}\n\n// Applies the correct css rules needed to have an element transition between elevations.\n// This mixin should be applied to elements whose elevation values will change depending on their\n// context (e.g. when active or disabled).\n//\n// NOTE(traviskaufman): Both this mixin and the above function use default parameters so they can\n// be used in the same way by clients.\n@mixin mat-elevation-transition(\n $duration: $mat-elevation-transition-duration,\n $easing: $mat-elevation-transition-timing-function) {\n transition: mat-elevation-transition-property-value($duration, $easing);\n}\n\n// Color palettes from the Material Design spec.\n// See https://material.io/design/color/\n//\n// Contrast colors are hard-coded because it is too difficult (probably impossible) to\n// calculate them. These contrast colors are pulled from the public Material Design spec swatches.\n// While the contrast colors in the spec are not prescriptive, we use them for convenience.\n\n\n// @deprecated renamed to $dark-primary-text.\n// @breaking-change 8.0.0\n$black-87-opacity: rgba(black, 0.87);\n// @deprecated renamed to $light-primary-text.\n// @breaking-change 8.0.0\n$white-87-opacity: rgba(white, 0.87);\n// @deprecated use $dark-[secondary-text,disabled-text,dividers,focused] instead.\n// @breaking-change 8.0.0\n$black-12-opacity: rgba(black, 0.12);\n// @deprecated use $light-[secondary-text,disabled-text,dividers,focused] instead.\n// @breaking-change 8.0.0\n$white-12-opacity: rgba(white, 0.12);\n// @deprecated use $dark-[secondary-text,disabled-text,dividers,focused] instead.\n// @breaking-change 8.0.0\n$black-6-opacity: rgba(black, 0.06);\n// @deprecated use $light-[secondary-text,disabled-text,dividers,focused] instead.\n// @breaking-change 8.0.0\n$white-6-opacity: rgba(white, 0.06);\n\n$dark-primary-text: rgba(black, 0.87);\n$dark-secondary-text: rgba(black, 0.54);\n$dark-disabled-text: rgba(black, 0.38);\n$dark-dividers: rgba(black, 0.12);\n$dark-focused: rgba(black, 0.12);\n$light-primary-text: white;\n$light-secondary-text: rgba(white, 0.7);\n$light-disabled-text: rgba(white, 0.5);\n$light-dividers: rgba(white, 0.12);\n$light-focused: rgba(white, 0.12);\n\n$mat-red: (\n 50: #ffebee,\n 100: #ffcdd2,\n 200: #ef9a9a,\n 300: #e57373,\n 400: #ef5350,\n 500: #f44336,\n 600: #e53935,\n 700: #d32f2f,\n 800: #c62828,\n 900: #b71c1c,\n A100: #ff8a80,\n A200: #ff5252,\n A400: #ff1744,\n A700: #d50000,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $dark-primary-text,\n 500: $light-primary-text,\n 600: $light-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $light-primary-text,\n A400: $light-primary-text,\n A700: $light-primary-text,\n )\n);\n\n$mat-pink: (\n 50: #fce4ec,\n 100: #f8bbd0,\n 200: #f48fb1,\n 300: #f06292,\n 400: #ec407a,\n 500: #e91e63,\n 600: #d81b60,\n 700: #c2185b,\n 800: #ad1457,\n 900: #880e4f,\n A100: #ff80ab,\n A200: #ff4081,\n A400: #f50057,\n A700: #c51162,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $dark-primary-text,\n 500: $light-primary-text,\n 600: $light-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $light-primary-text,\n A400: $light-primary-text,\n A700: $light-primary-text,\n )\n);\n\n$mat-purple: (\n 50: #f3e5f5,\n 100: #e1bee7,\n 200: #ce93d8,\n 300: #ba68c8,\n 400: #ab47bc,\n 500: #9c27b0,\n 600: #8e24aa,\n 700: #7b1fa2,\n 800: #6a1b9a,\n 900: #4a148c,\n A100: #ea80fc,\n A200: #e040fb,\n A400: #d500f9,\n A700: #aa00ff,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $light-primary-text,\n 400: $light-primary-text,\n 500: $light-primary-text,\n 600: $light-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $light-primary-text,\n A400: $light-primary-text,\n A700: $light-primary-text,\n )\n);\n\n$mat-deep-purple: (\n 50: #ede7f6,\n 100: #d1c4e9,\n 200: #b39ddb,\n 300: #9575cd,\n 400: #7e57c2,\n 500: #673ab7,\n 600: #5e35b1,\n 700: #512da8,\n 800: #4527a0,\n 900: #311b92,\n A100: #b388ff,\n A200: #7c4dff,\n A400: #651fff,\n A700: #6200ea,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $light-primary-text,\n 400: $light-primary-text,\n 500: $light-primary-text,\n 600: $light-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $light-primary-text,\n A400: $light-primary-text,\n A700: $light-primary-text,\n )\n);\n\n$mat-indigo: (\n 50: #e8eaf6,\n 100: #c5cae9,\n 200: #9fa8da,\n 300: #7986cb,\n 400: #5c6bc0,\n 500: #3f51b5,\n 600: #3949ab,\n 700: #303f9f,\n 800: #283593,\n 900: #1a237e,\n A100: #8c9eff,\n A200: #536dfe,\n A400: #3d5afe,\n A700: #304ffe,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $light-primary-text,\n 400: $light-primary-text,\n 500: $light-primary-text,\n 600: $light-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $light-primary-text,\n A400: $light-primary-text,\n A700: $light-primary-text,\n )\n);\n\n$mat-blue: (\n 50: #e3f2fd,\n 100: #bbdefb,\n 200: #90caf9,\n 300: #64b5f6,\n 400: #42a5f5,\n 500: #2196f3,\n 600: #1e88e5,\n 700: #1976d2,\n 800: #1565c0,\n 900: #0d47a1,\n A100: #82b1ff,\n A200: #448aff,\n A400: #2979ff,\n A700: #2962ff,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $dark-primary-text,\n 500: $light-primary-text,\n 600: $light-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $light-primary-text,\n A400: $light-primary-text,\n A700: $light-primary-text,\n )\n);\n\n$mat-light-blue: (\n 50: #e1f5fe,\n 100: #b3e5fc,\n 200: #81d4fa,\n 300: #4fc3f7,\n 400: #29b6f6,\n 500: #03a9f4,\n 600: #039be5,\n 700: #0288d1,\n 800: #0277bd,\n 900: #01579b,\n A100: #80d8ff,\n A200: #40c4ff,\n A400: #00b0ff,\n A700: #0091ea,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $dark-primary-text,\n 500: $light-primary-text,\n 600: $light-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $dark-primary-text,\n A400: $dark-primary-text,\n A700: $light-primary-text,\n )\n);\n\n$mat-cyan: (\n 50: #e0f7fa,\n 100: #b2ebf2,\n 200: #80deea,\n 300: #4dd0e1,\n 400: #26c6da,\n 500: #00bcd4,\n 600: #00acc1,\n 700: #0097a7,\n 800: #00838f,\n 900: #006064,\n A100: #84ffff,\n A200: #18ffff,\n A400: #00e5ff,\n A700: #00b8d4,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $dark-primary-text,\n 500: $light-primary-text,\n 600: $light-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $dark-primary-text,\n A400: $dark-primary-text,\n A700: $dark-primary-text,\n )\n);\n\n$mat-teal: (\n 50: #e0f2f1,\n 100: #b2dfdb,\n 200: #80cbc4,\n 300: #4db6ac,\n 400: #26a69a,\n 500: #009688,\n 600: #00897b,\n 700: #00796b,\n 800: #00695c,\n 900: #004d40,\n A100: #a7ffeb,\n A200: #64ffda,\n A400: #1de9b6,\n A700: #00bfa5,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $dark-primary-text,\n 500: $light-primary-text,\n 600: $light-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $dark-primary-text,\n A400: $dark-primary-text,\n A700: $dark-primary-text,\n )\n);\n\n$mat-green: (\n 50: #e8f5e9,\n 100: #c8e6c9,\n 200: #a5d6a7,\n 300: #81c784,\n 400: #66bb6a,\n 500: #4caf50,\n 600: #43a047,\n 700: #388e3c,\n 800: #2e7d32,\n 900: #1b5e20,\n A100: #b9f6ca,\n A200: #69f0ae,\n A400: #00e676,\n A700: #00c853,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $dark-primary-text,\n 500: $dark-primary-text,\n 600: $light-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $dark-primary-text,\n A400: $dark-primary-text,\n A700: $dark-primary-text,\n )\n);\n\n$mat-light-green: (\n 50: #f1f8e9,\n 100: #dcedc8,\n 200: #c5e1a5,\n 300: #aed581,\n 400: #9ccc65,\n 500: #8bc34a,\n 600: #7cb342,\n 700: #689f38,\n 800: #558b2f,\n 900: #33691e,\n A100: #ccff90,\n A200: #b2ff59,\n A400: #76ff03,\n A700: #64dd17,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $dark-primary-text,\n 500: $dark-primary-text,\n 600: $dark-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $dark-primary-text,\n A400: $dark-primary-text,\n A700: $dark-primary-text,\n )\n);\n\n$mat-lime: (\n 50: #f9fbe7,\n 100: #f0f4c3,\n 200: #e6ee9c,\n 300: #dce775,\n 400: #d4e157,\n 500: #cddc39,\n 600: #c0ca33,\n 700: #afb42b,\n 800: #9e9d24,\n 900: #827717,\n A100: #f4ff81,\n A200: #eeff41,\n A400: #c6ff00,\n A700: #aeea00,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $dark-primary-text,\n 500: $dark-primary-text,\n 600: $dark-primary-text,\n 700: $dark-primary-text,\n 800: $dark-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $dark-primary-text,\n A400: $dark-primary-text,\n A700: $dark-primary-text,\n )\n);\n\n$mat-yellow: (\n 50: #fffde7,\n 100: #fff9c4,\n 200: #fff59d,\n 300: #fff176,\n 400: #ffee58,\n 500: #ffeb3b,\n 600: #fdd835,\n 700: #fbc02d,\n 800: #f9a825,\n 900: #f57f17,\n A100: #ffff8d,\n A200: #ffff00,\n A400: #ffea00,\n A700: #ffd600,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $dark-primary-text,\n 500: $dark-primary-text,\n 600: $dark-primary-text,\n 700: $dark-primary-text,\n 800: $dark-primary-text,\n 900: $dark-primary-text,\n A100: $dark-primary-text,\n A200: $dark-primary-text,\n A400: $dark-primary-text,\n A700: $dark-primary-text,\n )\n);\n\n$mat-amber: (\n 50: #fff8e1,\n 100: #ffecb3,\n 200: #ffe082,\n 300: #ffd54f,\n 400: #ffca28,\n 500: #ffc107,\n 600: #ffb300,\n 700: #ffa000,\n 800: #ff8f00,\n 900: #ff6f00,\n A100: #ffe57f,\n A200: #ffd740,\n A400: #ffc400,\n A700: #ffab00,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $dark-primary-text,\n 500: $dark-primary-text,\n 600: $dark-primary-text,\n 700: $dark-primary-text,\n 800: $dark-primary-text,\n 900: $dark-primary-text,\n A100: $dark-primary-text,\n A200: $dark-primary-text,\n A400: $dark-primary-text,\n A700: $dark-primary-text,\n )\n);\n\n$mat-orange: (\n 50: #fff3e0,\n 100: #ffe0b2,\n 200: #ffcc80,\n 300: #ffb74d,\n 400: #ffa726,\n 500: #ff9800,\n 600: #fb8c00,\n 700: #f57c00,\n 800: #ef6c00,\n 900: #e65100,\n A100: #ffd180,\n A200: #ffab40,\n A400: #ff9100,\n A700: #ff6d00,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $dark-primary-text,\n 500: $dark-primary-text,\n 600: $dark-primary-text,\n 700: $dark-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $dark-primary-text,\n A400: $dark-primary-text,\n A700: black,\n )\n);\n\n$mat-deep-orange: (\n 50: #fbe9e7,\n 100: #ffccbc,\n 200: #ffab91,\n 300: #ff8a65,\n 400: #ff7043,\n 500: #ff5722,\n 600: #f4511e,\n 700: #e64a19,\n 800: #d84315,\n 900: #bf360c,\n A100: #ff9e80,\n A200: #ff6e40,\n A400: #ff3d00,\n A700: #dd2c00,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $dark-primary-text,\n 500: $light-primary-text,\n 600: $light-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $dark-primary-text,\n A400: $light-primary-text,\n A700: $light-primary-text,\n )\n);\n\n$mat-brown: (\n 50: #efebe9,\n 100: #d7ccc8,\n 200: #bcaaa4,\n 300: #a1887f,\n 400: #8d6e63,\n 500: #795548,\n 600: #6d4c41,\n 700: #5d4037,\n 800: #4e342e,\n 900: #3e2723,\n A100: #d7ccc8,\n A200: #bcaaa4,\n A400: #8d6e63,\n A700: #5d4037,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $light-primary-text,\n 400: $light-primary-text,\n 500: $light-primary-text,\n 600: $light-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $dark-primary-text,\n A400: $light-primary-text,\n A700: $light-primary-text,\n )\n);\n\n$mat-grey: (\n 50: #fafafa,\n 100: #f5f5f5,\n 200: #eeeeee,\n 300: #e0e0e0,\n 400: #bdbdbd,\n 500: #9e9e9e,\n 600: #757575,\n 700: #616161,\n 800: #424242,\n 900: #212121,\n A100: #ffffff,\n A200: #eeeeee,\n A400: #bdbdbd,\n A700: #616161,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $dark-primary-text,\n 500: $dark-primary-text,\n 600: $light-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $dark-primary-text,\n A400: $dark-primary-text,\n A700: $light-primary-text,\n )\n);\n\n// Alias for alternate spelling.\n$mat-gray: $mat-grey;\n\n$mat-blue-grey: (\n 50: #eceff1,\n 100: #cfd8dc,\n 200: #b0bec5,\n 300: #90a4ae,\n 400: #78909c,\n 500: #607d8b,\n 600: #546e7a,\n 700: #455a64,\n 800: #37474f,\n 900: #263238,\n A100: #cfd8dc,\n A200: #b0bec5,\n A400: #78909c,\n A700: #455a64,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $light-primary-text,\n 500: $light-primary-text,\n 600: $light-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $dark-primary-text,\n A400: $light-primary-text,\n A700: $light-primary-text,\n )\n);\n\n// Alias for alternate spelling.\n$mat-blue-gray: $mat-blue-grey;\n\n\n// Background palette for light themes.\n$mat-light-theme-background: (\n status-bar: map_get($mat-grey, 300),\n app-bar: map_get($mat-grey, 100),\n background: map_get($mat-grey, 50),\n hover: rgba(black, 0.04), // TODO(kara): check style with Material Design UX\n card: white,\n dialog: white,\n disabled-button: rgba(black, 0.12),\n raised-button: white,\n focused-button: $dark-focused,\n selected-button: map_get($mat-grey, 300),\n selected-disabled-button: map_get($mat-grey, 400),\n disabled-button-toggle: map_get($mat-grey, 200),\n unselected-chip: map_get($mat-grey, 300),\n disabled-list-option: map_get($mat-grey, 200),\n tooltip: map_get($mat-grey, 700),\n);\n\n// Background palette for dark themes.\n$mat-dark-theme-background: (\n status-bar: black,\n app-bar: map_get($mat-grey, 900),\n background: #303030,\n hover: rgba(white, 0.04), // TODO(kara): check style with Material Design UX\n card: map_get($mat-grey, 800),\n dialog: map_get($mat-grey, 800),\n disabled-button: rgba(white, 0.12),\n raised-button: map-get($mat-grey, 800),\n focused-button: $light-focused,\n selected-button: map_get($mat-grey, 900),\n selected-disabled-button: map_get($mat-grey, 800),\n disabled-button-toggle: black,\n unselected-chip: map_get($mat-grey, 700),\n disabled-list-option: black,\n tooltip: map_get($mat-grey, 700),\n);\n\n// Foreground palette for light themes.\n$mat-light-theme-foreground: (\n base: black,\n divider: $dark-dividers,\n dividers: $dark-dividers,\n disabled: $dark-disabled-text,\n disabled-button: rgba(black, 0.26),\n disabled-text: $dark-disabled-text,\n elevation: black,\n hint-text: $dark-disabled-text,\n secondary-text: $dark-secondary-text,\n icon: rgba(black, 0.54),\n icons: rgba(black, 0.54),\n text: rgba(black, 0.87),\n slider-min: rgba(black, 0.87),\n slider-off: rgba(black, 0.26),\n slider-off-active: rgba(black, 0.38),\n);\n\n// Foreground palette for dark themes.\n$mat-dark-theme-foreground: (\n base: white,\n divider: $light-dividers,\n dividers: $light-dividers,\n disabled: $light-disabled-text,\n disabled-button: rgba(white, 0.3),\n disabled-text: $light-disabled-text,\n elevation: black,\n hint-text: $light-disabled-text,\n secondary-text: $light-secondary-text,\n icon: white,\n icons: white,\n text: white,\n slider-min: white,\n slider-off: rgba(white, 0.3),\n slider-off-active: rgba(white, 0.3),\n);\n\n\n\n// For a given hue in a palette, return the contrast color from the map of contrast palettes.\n// @param $color-map\n// @param $hue\n@function mat-contrast($palette, $hue) {\n @return map-get(map-get($palette, contrast), $hue);\n}\n\n\n// Creates a map of hues to colors for a theme. This is used to define a theme palette in terms\n// of the Material Design hues.\n// @param $color-map\n// @param $primary\n// @param $lighter\n@function mat-palette($base-palette, $default: 500, $lighter: 100, $darker: 700, $text: $default) {\n $result: map_merge($base-palette, (\n default: map-get($base-palette, $default),\n lighter: map-get($base-palette, $lighter),\n darker: map-get($base-palette, $darker),\n text: map-get($base-palette, $text),\n\n default-contrast: mat-contrast($base-palette, $default),\n lighter-contrast: mat-contrast($base-palette, $lighter),\n darker-contrast: mat-contrast($base-palette, $darker)\n ));\n\n // For each hue in the palette, add a \"-contrast\" color to the map.\n @each $hue, $color in $base-palette {\n $result: map_merge($result, (\n '#{$hue}-contrast': mat-contrast($base-palette, $hue)\n ));\n }\n\n @return $result;\n}\n\n\n// Gets a color from a theme palette (the output of mat-palette).\n// The hue can be one of the standard values (500, A400, etc.), one of the three preconfigured\n// hues (default, lighter, darker), or any of the aforementioned prefixed with \"-contrast\".\n//\n// @param $color-map The theme palette (output of mat-palette).\n// @param $hue The hue from the palette to use. If this is a value between 0 and 1, it will\n// be treated as opacity.\n// @param $opacity The alpha channel value for the color.\n@function mat-color($palette, $hue: default, $opacity: null) {\n // If hueKey is a number between zero and one, then it actually contains an\n // opacity value, so recall this function with the default hue and that given opacity.\n @if type-of($hue) == number and $hue >= 0 and $hue <= 1 {\n @return mat-color($palette, default, $hue);\n }\n\n $color: map-get($palette, $hue);\n\n @if (type-of($color) != color) {\n // If the $color resolved to something different from a color (e.g. a CSS variable),\n // we can't apply the opacity anyway so we return the value as is, otherwise Sass can\n // throw an error or output something invalid.\n @return $color;\n }\n\n @return rgba($color, if($opacity == null, opacity($color), $opacity));\n}\n\n\n// Creates a container object for a light theme to be given to individual component theme mixins.\n@function mat-light-theme($primary, $accent, $warn: mat-palette($mat-red)) {\n @return (\n primary: $primary,\n accent: $accent,\n warn: $warn,\n is-dark: false,\n foreground: $mat-light-theme-foreground,\n background: $mat-light-theme-background,\n );\n}\n\n\n// Creates a container object for a dark theme to be given to individual component theme mixins.\n@function mat-dark-theme($primary, $accent, $warn: mat-palette($mat-red)) {\n @return (\n primary: $primary,\n accent: $accent,\n warn: $warn,\n is-dark: true,\n foreground: $mat-dark-theme-foreground,\n background: $mat-dark-theme-background,\n );\n}\n\n\n\n$mat-ripple-color-opacity: 0.1;\n\n@mixin mat-ripple() {\n\n // The host element of an mat-ripple directive should always have a position of \"absolute\" or\n // \"relative\" so that the ripples inside are correctly positioned relatively to the container.\n .mat-ripple {\n overflow: hidden;\n\n // By default, every ripple container should have position: relative in favor of creating an\n // easy API for developers using the MatRipple directive.\n position: relative;\n\n // Promote containers that have ripples to a new layer. We want to target `:not(:empty)`,\n // because we don't want all ripple containers to have their own layer since they're used in a\n // lot of places and the layer is only relevant while animating. Note that ideally we'd use\n // the `contain` property here (see #13175), because `:empty` can be broken by having extra\n // text inside the element, but it isn't very well supported yet.\n &:not(:empty) {\n transform: translateZ(0);\n }\n }\n\n .mat-ripple.mat-ripple-unbounded {\n overflow: visible;\n }\n\n .mat-ripple-element {\n position: absolute;\n border-radius: 50%;\n pointer-events: none;\n\n transition: opacity, transform 0ms cubic-bezier(0, 0, 0.2, 1);\n transform: scale(0);\n\n // In high contrast mode the ripple is opaque, causing it to obstruct the content.\n @include cdk-high-contrast(active, off) {\n display: none;\n }\n }\n}\n\n/* Theme for the ripple elements.*/\n@mixin mat-ripple-theme($theme) {\n $foreground: map_get($theme, foreground);\n $foreground-base: map_get($foreground, base);\n\n .mat-ripple-element {\n // If the ripple color is resolves to a color *type*, we can use it directly, otherwise\n // (e.g. it resolves to a CSS variable) we fall back to using the color and setting an opacity.\n @if (type-of($foreground-base) == color) {\n background-color: rgba($foreground-base, $mat-ripple-color-opacity);\n }\n @else {\n background-color: $foreground-base;\n opacity: $mat-ripple-color-opacity;\n }\n }\n}\n\n\n\n// Utility for fetching a nested value from a typography config.\n@function _mat-get-type-value($config, $level, $name) {\n @return map-get(map-get($config, $level), $name);\n}\n\n// Gets the font size for a level inside a typography config.\n@function mat-font-size($config, $level) {\n @return _mat-get-type-value($config, $level, font-size);\n}\n\n// Gets the line height for a level inside a typography config.\n@function mat-line-height($config, $level) {\n @return _mat-get-type-value($config, $level, line-height);\n}\n\n// Gets the font weight for a level inside a typography config.\n@function mat-font-weight($config, $level) {\n @return _mat-get-type-value($config, $level, font-weight);\n}\n\n// Gets the letter spacing for a level inside a typography config.\n@function mat-letter-spacing($config, $level) {\n @return _mat-get-type-value($config, $level, letter-spacing);\n}\n\n// Gets the font-family from a typography config and removes the quotes around it.\n@function mat-font-family($config, $level: null) {\n $font-family: map-get($config, font-family);\n\n @if $level != null {\n $font-family: _mat-get-type-value($config, $level, font-family);\n }\n\n // Guard against unquoting non-string values, because it's deprecated.\n @return if(type-of($font-family) == string, unquote($font-family), $font-family);\n}\n\n// Outputs the shorthand `font` CSS property, based on a set of typography values. Falls back to\n// the individual properties if a value that isn't allowed in the shorthand is passed in.\n@mixin mat-typography-font-shorthand($font-size, $font-weight, $line-height, $font-family) {\n // If any of the values are set to `inherit`, we can't use the shorthand\n // so we fall back to passing in the individual properties.\n @if ($font-size == inherit or\n $font-weight == inherit or\n $line-height == inherit or\n $font-family == inherit or\n $font-size == null or\n $font-weight == null or\n $line-height == null or\n $font-family == null) {\n\n font-size: $font-size;\n font-weight: $font-weight;\n line-height: $line-height;\n font-family: $font-family;\n }\n @else {\n // Otherwise use the shorthand `font`, because it's the least amount of bytes. Note\n // that we need to use interpolation for `font-size/line-height` in order to prevent\n // Sass from dividing the two values.\n font: $font-weight #{$font-size}/#{$line-height} $font-family;\n }\n}\n\n// Converts a typography level into CSS styles.\n@mixin mat-typography-level-to-styles($config, $level) {\n $font-size: mat-font-size($config, $level);\n $font-weight: mat-font-weight($config, $level);\n $line-height: mat-line-height($config, $level);\n $font-family: mat-font-family($config, $level);\n\n @include mat-typography-font-shorthand($font-size, $font-weight, $line-height, $font-family);\n letter-spacing: mat-letter-spacing($config, $level);\n}\n\n\n@mixin mat-option-theme($theme) {\n $foreground: map-get($theme, foreground);\n $background: map-get($theme, background);\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n\n .mat-option {\n color: mat-color($foreground, text);\n\n &:hover:not(.mat-option-disabled),\n &:focus:not(.mat-option-disabled) {\n background: mat-color($background, hover);\n }\n\n // In multiple mode there is a checkbox to show that the option is selected.\n &.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled) {\n background: mat-color($background, hover);\n }\n\n &.mat-active {\n background: mat-color($background, hover);\n color: mat-color($foreground, text);\n }\n\n &.mat-option-disabled {\n color: mat-color($foreground, hint-text);\n }\n }\n\n .mat-primary .mat-option.mat-selected:not(.mat-option-disabled) {\n color: mat-color($primary, text);\n }\n\n .mat-accent .mat-option.mat-selected:not(.mat-option-disabled) {\n color: mat-color($accent, text);\n }\n\n .mat-warn .mat-option.mat-selected:not(.mat-option-disabled) {\n color: mat-color($warn, text);\n }\n}\n\n@mixin mat-option-typography($config) {\n .mat-option {\n font: {\n family: mat-font-family($config);\n size: mat-font-size($config, subheading-2);\n }\n }\n}\n\n\n\n\n\n@mixin mat-optgroup-theme($theme) {\n $foreground: map-get($theme, foreground);\n\n .mat-optgroup-label {\n color: mat-color($foreground, secondary-text);\n }\n\n .mat-optgroup-disabled .mat-optgroup-label {\n color: mat-color($foreground, hint-text);\n }\n}\n\n@mixin mat-optgroup-typography($config) {\n .mat-optgroup-label {\n @include mat-typography-level-to-styles($config, body-2);\n }\n}\n\n\n\n@mixin mat-pseudo-checkbox-theme($theme) {\n $is-dark-theme: map-get($theme, is-dark);\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $background: map-get($theme, background);\n\n // NOTE(traviskaufman): While the spec calls for translucent blacks/whites for disabled colors,\n // this does not work well with elements layered on top of one another. To get around this we\n // blend the colors together based on the base color and the theme background.\n $white-30pct-opacity-on-dark: #686868;\n $black-26pct-opacity-on-light: #b0b0b0;\n $disabled-color: if($is-dark-theme, $white-30pct-opacity-on-dark, $black-26pct-opacity-on-light);\n $colored-box-selector: '.mat-pseudo-checkbox-checked, .mat-pseudo-checkbox-indeterminate';\n\n .mat-pseudo-checkbox {\n color: mat-color(map-get($theme, foreground), secondary-text);\n\n &::after {\n color: mat-color($background, background);\n }\n }\n\n .mat-pseudo-checkbox-disabled {\n color: $disabled-color;\n }\n\n .mat-primary .mat-pseudo-checkbox-checked,\n .mat-primary .mat-pseudo-checkbox-indeterminate {\n background: mat-color(map-get($theme, primary));\n }\n\n // Default to the accent color. Note that the pseudo checkboxes are meant to inherit the\n // theme from their parent, rather than implementing their own theming, which is why we\n // don't attach to the `mat-*` classes. Also note that this needs to be below `.mat-primary`\n // in order to allow for the color to be overwritten if the checkbox is inside a parent that\n // has `mat-accent` and is placed inside another parent that has `mat-primary`.\n .mat-pseudo-checkbox-checked,\n .mat-pseudo-checkbox-indeterminate,\n .mat-accent .mat-pseudo-checkbox-checked,\n .mat-accent .mat-pseudo-checkbox-indeterminate {\n background: mat-color(map-get($theme, accent));\n }\n\n .mat-warn .mat-pseudo-checkbox-checked,\n .mat-warn .mat-pseudo-checkbox-indeterminate {\n background: mat-color(map-get($theme, warn));\n }\n\n .mat-pseudo-checkbox-checked,\n .mat-pseudo-checkbox-indeterminate {\n &.mat-pseudo-checkbox-disabled {\n background: $disabled-color;\n }\n }\n}\n\n\n\n// Represents a typography level from the Material design spec.\n@function mat-typography-level(\n $font-size,\n $line-height: $font-size,\n $font-weight: 400,\n $font-family: null,\n $letter-spacing: normal) {\n\n @return (\n font-size: $font-size,\n line-height: $line-height,\n font-weight: $font-weight,\n font-family: $font-family,\n letter-spacing: $letter-spacing\n );\n}\n\n// Represents a collection of typography levels.\n// Defaults come from https://material.io/guidelines/style/typography.html\n// Note: The spec doesn't mention letter spacing. The values here come from\n// eyeballing it until it looked exactly like the spec examples.\n@function mat-typography-config(\n $font-family: 'Roboto, \"Helvetica Neue\", sans-serif',\n $display-4: mat-typography-level(112px, 112px, 300, $letter-spacing: -0.05em),\n $display-3: mat-typography-level(56px, 56px, 400, $letter-spacing: -0.02em),\n $display-2: mat-typography-level(45px, 48px, 400, $letter-spacing: -0.005em),\n $display-1: mat-typography-level(34px, 40px, 400),\n $headline: mat-typography-level(24px, 32px, 400),\n $title: mat-typography-level(20px, 32px, 500),\n $subheading-2: mat-typography-level(16px, 28px, 400),\n $subheading-1: mat-typography-level(15px, 24px, 400),\n $body-2: mat-typography-level(14px, 24px, 500),\n $body-1: mat-typography-level(14px, 20px, 400),\n $caption: mat-typography-level(12px, 20px, 400),\n $button: mat-typography-level(14px, 14px, 500),\n // Line-height must be unit-less fraction of the font-size.\n $input: mat-typography-level(inherit, 1.125, 400)\n) {\n\n // Declare an initial map with all of the levels.\n $config: (\n display-4: $display-4,\n display-3: $display-3,\n display-2: $display-2,\n display-1: $display-1,\n headline: $headline,\n title: $title,\n subheading-2: $subheading-2,\n subheading-1: $subheading-1,\n body-2: $body-2,\n body-1: $body-1,\n caption: $caption,\n button: $button,\n input: $input,\n );\n\n // Loop through the levels and set the `font-family` of the ones that don't have one to the base.\n // Note that Sass can't modify maps in place, which means that we need to merge and re-assign.\n @each $key, $level in $config {\n @if map-get($level, font-family) == null {\n $new-level: map-merge($level, (font-family: $font-family));\n $config: map-merge($config, ($key: $new-level));\n }\n }\n\n // Add the base font family to the config.\n @return map-merge($config, (font-family: $font-family));\n}\n\n// Adds the base typography styles, based on a config.\n@mixin mat-base-typography($config, $selector: '.mat-typography') {\n .mat-h1, .mat-headline, #{$selector} h1 {\n @include mat-typography-level-to-styles($config, headline);\n margin: 0 0 16px;\n }\n\n .mat-h2, .mat-title, #{$selector} h2 {\n @include mat-typography-level-to-styles($config, title);\n margin: 0 0 16px;\n }\n\n .mat-h3, .mat-subheading-2, #{$selector} h3 {\n @include mat-typography-level-to-styles($config, subheading-2);\n margin: 0 0 16px;\n }\n\n .mat-h4, .mat-subheading-1, #{$selector} h4 {\n @include mat-typography-level-to-styles($config, subheading-1);\n margin: 0 0 16px;\n }\n\n // Note: the spec doesn't have anything that would correspond to h5 and h6, but we add these for\n // consistency. The font sizes come from the Chrome user agent styles which have h5 at 0.83em\n // and h6 at 0.67em.\n .mat-h5, #{$selector} h5 {\n @include mat-typography-font-shorthand(\n // calc is used here to support css variables\n calc(#{mat-font-size($config, body-1)} * 0.83),\n mat-font-weight($config, body-1),\n mat-line-height($config, body-1),\n mat-font-family($config, body-1)\n );\n\n margin: 0 0 12px;\n }\n\n .mat-h6, #{$selector} h6 {\n @include mat-typography-font-shorthand(\n // calc is used here to support css variables\n calc(#{mat-font-size($config, body-1)} * 0.67),\n mat-font-weight($config, body-1),\n mat-line-height($config, body-1),\n mat-font-family($config, body-1)\n );\n\n margin: 0 0 12px;\n }\n\n .mat-body-strong, .mat-body-2 {\n @include mat-typography-level-to-styles($config, body-2);\n }\n\n .mat-body, .mat-body-1, #{$selector} {\n @include mat-typography-level-to-styles($config, body-1);\n\n p {\n margin: 0 0 12px;\n }\n }\n\n .mat-small, .mat-caption {\n @include mat-typography-level-to-styles($config, caption);\n }\n\n .mat-display-4, #{$selector} .mat-display-4 {\n @include mat-typography-level-to-styles($config, display-4);\n margin: 0 0 56px;\n }\n\n .mat-display-3, #{$selector} .mat-display-3 {\n @include mat-typography-level-to-styles($config, display-3);\n margin: 0 0 64px;\n }\n\n .mat-display-2, #{$selector} .mat-display-2 {\n @include mat-typography-level-to-styles($config, display-2);\n margin: 0 0 64px;\n }\n\n .mat-display-1, #{$selector} .mat-display-1 {\n @include mat-typography-level-to-styles($config, display-1);\n margin: 0 0 64px;\n }\n}\n\n\n\n\n@mixin mat-autocomplete-theme($theme) {\n $foreground: map-get($theme, foreground);\n $background: map-get($theme, background);\n\n .mat-autocomplete-panel {\n @include _mat-theme-overridable-elevation(4, $theme);\n background: mat-color($background, card);\n color: mat-color($foreground, text);\n\n // Selected options in autocompletes should not be gray, but we\n // only want to override the background for selected options if\n // they are *not* in hover or focus state. This change has to be\n // made here because base option styles are shared between the\n // autocomplete and the select.\n .mat-option.mat-selected:not(.mat-active):not(:hover) {\n background: mat-color($background, card);\n\n &:not(.mat-option-disabled) {\n color: mat-color($foreground, text);\n }\n }\n }\n\n}\n\n@mixin mat-autocomplete-typography($config) { }\n\n// This contains all of the styles for the badge\n// rather than just the color/theme because of\n// no style sheet support for directives.\n\n\n\n\n\n$mat-badge-font-size: 12px;\n$mat-badge-font-weight: 600;\n$mat-badge-default-size: 22px !default;\n$mat-badge-small-size: $mat-badge-default-size - 6;\n$mat-badge-large-size: $mat-badge-default-size + 6;\n\n// Mixin for building offset given different sizes\n@mixin _mat-badge-size($size) {\n .mat-badge-content {\n width: $size;\n height: $size;\n line-height: $size;\n }\n\n &.mat-badge-above {\n .mat-badge-content {\n top: -$size / 2;\n }\n }\n\n &.mat-badge-below {\n .mat-badge-content {\n bottom: -$size / 2;\n }\n }\n\n &.mat-badge-before {\n .mat-badge-content {\n left: -$size;\n }\n }\n\n [dir='rtl'] &.mat-badge-before {\n .mat-badge-content {\n left: auto;\n right: -$size;\n }\n }\n\n &.mat-badge-after {\n .mat-badge-content {\n right: -$size;\n }\n }\n\n [dir='rtl'] &.mat-badge-after {\n .mat-badge-content {\n right: auto;\n left: -$size;\n }\n }\n\n &.mat-badge-overlap {\n &.mat-badge-before {\n .mat-badge-content {\n left: -$size / 2;\n }\n }\n\n [dir='rtl'] &.mat-badge-before {\n .mat-badge-content {\n left: auto;\n right: -$size / 2;\n }\n }\n\n &.mat-badge-after {\n .mat-badge-content {\n right: -$size / 2;\n }\n }\n\n [dir='rtl'] &.mat-badge-after {\n .mat-badge-content {\n right: auto;\n left: -$size / 2;\n }\n }\n }\n}\n\n@mixin mat-badge-theme($theme) {\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $primary: map-get($theme, primary);\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n .mat-badge-content {\n color: mat-color($primary, default-contrast);\n background: mat-color($primary);\n\n @include cdk-high-contrast(active, off) {\n outline: solid 1px;\n border-radius: 0;\n }\n }\n\n .mat-badge-accent {\n .mat-badge-content {\n background: mat-color($accent);\n color: mat-color($accent, default-contrast);\n }\n }\n\n .mat-badge-warn {\n .mat-badge-content {\n color: mat-color($warn, default-contrast);\n background: mat-color($warn);\n }\n }\n\n .mat-badge {\n position: relative;\n }\n\n .mat-badge-hidden {\n .mat-badge-content {\n display: none;\n }\n }\n\n .mat-badge-disabled {\n .mat-badge-content {\n $app-background: mat-color($background, 'background');\n $badge-color: mat-color($foreground, disabled-button);\n\n // The disabled color usually has some kind of opacity, but because the badge is overlayed\n // on top of something else, it won't look good if it's opaque. If it is a color *type*,\n // we convert it into a solid color by taking the opacity from the rgba value and using\n // the value to determine the percentage of the background to put into foreground when\n // mixing the colors together.\n @if (type-of($badge-color) == color and type-of($app-background) == color) {\n $badge-opacity: opacity($badge-color);\n background: mix($app-background, rgba($badge-color, 1), (1 - $badge-opacity) * 100%);\n }\n @else {\n background: $badge-color;\n }\n\n color: mat-color($foreground, disabled-text);\n }\n }\n\n .mat-badge-content {\n position: absolute;\n text-align: center;\n display: inline-block;\n border-radius: 50%;\n transition: transform 200ms ease-in-out;\n transform: scale(0.6);\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n pointer-events: none;\n }\n\n .ng-animate-disabled .mat-badge-content,\n .mat-badge-content._mat-animation-noopable {\n transition: none;\n }\n\n // The active class is added after the element is added\n // so it can animate scale to default\n .mat-badge-content.mat-badge-active {\n // Scale to `none` instead of `1` to avoid blurry text in some browsers.\n transform: none;\n }\n\n .mat-badge-small {\n @include _mat-badge-size($mat-badge-small-size);\n }\n .mat-badge-medium {\n @include _mat-badge-size($mat-badge-default-size);\n }\n .mat-badge-large {\n @include _mat-badge-size($mat-badge-large-size);\n }\n}\n\n@mixin mat-badge-typography($config) {\n .mat-badge-content {\n font-weight: $mat-badge-font-weight;\n font-size: $mat-badge-font-size;\n font-family: mat-font-family($config);\n }\n\n .mat-badge-small .mat-badge-content {\n // Set the font size to 75% of the original.\n font-size: $mat-badge-font-size * 0.75;\n }\n\n .mat-badge-large .mat-badge-content {\n font-size: $mat-badge-font-size * 2;\n }\n}\n\n\n\n\n\n@mixin mat-bottom-sheet-theme($theme) {\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n .mat-bottom-sheet-container {\n @include _mat-theme-elevation(16, $theme);\n background: mat-color($background, dialog);\n color: mat-color($foreground, text);\n }\n}\n\n@mixin mat-bottom-sheet-typography($config) {\n .mat-bottom-sheet-container {\n @include mat-typography-level-to-styles($config, body-1);\n }\n}\n\n\n\n\n\n$_mat-button-ripple-opacity: 0.1;\n\n// Applies a focus style to an mat-button element for each of the supported palettes.\n@mixin _mat-button-focus-overlay-color($theme) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n\n &.mat-primary .mat-button-focus-overlay {\n background-color: mat-color($primary);\n }\n\n &.mat-accent .mat-button-focus-overlay {\n background-color: mat-color($accent);\n }\n\n &.mat-warn .mat-button-focus-overlay {\n background-color: mat-color($warn);\n }\n\n &[disabled] .mat-button-focus-overlay {\n background-color: transparent;\n }\n}\n\n// Applies the background color for a ripple. If the value provided is not a Sass color,\n// we assume that we've been given a CSS variable. Since we can't perform alpha-blending\n// on a CSS variable, we instead add the opacity directly to the ripple element.\n@mixin _mat-button-ripple-background($palette, $hue, $opacity) {\n $background-color: mat-color($palette, $hue, $opacity);\n background-color: $background-color;\n @if (type-of($background-color) != color) {\n opacity: $opacity;\n }\n}\n\n@mixin _mat-button-ripple-color($theme, $hue, $opacity: $_mat-button-ripple-opacity) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n\n &.mat-primary .mat-ripple-element {\n @include _mat-button-ripple-background($primary, $hue, $opacity);\n }\n\n &.mat-accent .mat-ripple-element {\n @include _mat-button-ripple-background($accent, $hue, $opacity);\n }\n\n &.mat-warn .mat-ripple-element {\n @include _mat-button-ripple-background($warn, $hue, $opacity);\n }\n}\n\n// Applies a property to an mat-button element for each of the supported palettes.\n@mixin _mat-button-theme-property($theme, $property, $hue) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n &.mat-primary {\n #{$property}: mat-color($primary, $hue);\n }\n &.mat-accent {\n #{$property}: mat-color($accent, $hue);\n }\n &.mat-warn {\n #{$property}: mat-color($warn, $hue);\n }\n\n &.mat-primary, &.mat-accent, &.mat-warn, &[disabled] {\n &[disabled] {\n $palette: if($property == 'color', $foreground, $background);\n #{$property}: mat-color($palette, disabled-button);\n }\n }\n}\n\n@mixin mat-button-theme($theme) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n .mat-button, .mat-icon-button, .mat-stroked-button {\n // Buttons without a background color should inherit the font color. This is necessary to\n // ensure that the button is readable on custom background colors. It's wrong to always assume\n // that those buttons are always placed inside of containers with the default background\n // color of the theme (e.g. themed toolbars).\n color: inherit;\n background: transparent;\n\n @include _mat-button-theme-property($theme, 'color', text);\n @include _mat-button-focus-overlay-color($theme);\n\n // Setup the ripple color to be based on the text color. This ensures that the ripples\n // are matching with the current theme palette and are in contrast to the background color\n // (e.g in themed toolbars).\n .mat-ripple-element {\n opacity: $_mat-button-ripple-opacity;\n background-color: currentColor;\n }\n }\n\n .mat-button-focus-overlay {\n background: map_get($foreground, base);\n }\n\n // Note: this needs a bit extra specificity, because we're not guaranteed the inclusion\n // order of the theme styles and the button reset may end up resetting this as well.\n .mat-stroked-button:not([disabled]) {\n border-color: mat-color($foreground, divider);\n }\n\n .mat-flat-button, .mat-raised-button, .mat-fab, .mat-mini-fab {\n // Default font and background color when not using any color palette.\n color: mat-color($foreground, text);\n background-color: mat-color($background, raised-button);\n\n @include _mat-button-theme-property($theme, 'color', default-contrast);\n @include _mat-button-theme-property($theme, 'background-color', default);\n @include _mat-button-ripple-color($theme, default-contrast);\n }\n\n .mat-stroked-button, .mat-flat-button {\n @include _mat-theme-overridable-elevation(0, $theme);\n }\n\n .mat-raised-button {\n @include _mat-theme-overridable-elevation(2, $theme);\n\n &:not([disabled]):active {\n @include _mat-theme-overridable-elevation(8, $theme);\n }\n\n &[disabled] {\n @include _mat-theme-overridable-elevation(0, $theme);\n }\n }\n\n .mat-fab, .mat-mini-fab {\n @include _mat-theme-overridable-elevation(6, $theme);\n\n &:not([disabled]):active {\n @include _mat-theme-overridable-elevation(12, $theme);\n }\n\n &[disabled] {\n @include _mat-theme-overridable-elevation(0, $theme);\n }\n }\n}\n\n@mixin mat-button-typography($config) {\n .mat-button, .mat-raised-button, .mat-icon-button, .mat-stroked-button,\n .mat-flat-button, .mat-fab, .mat-mini-fab {\n font: {\n family: mat-font-family($config, button);\n size: mat-font-size($config, button);\n weight: mat-font-weight($config, button);\n }\n }\n}\n\n\n\n\n\n\n@mixin mat-button-toggle-theme($theme) {\n $foreground: map-get($theme, foreground);\n $background: map-get($theme, background);\n $divider-color: mat-color($foreground, divider);\n\n .mat-button-toggle-standalone,\n .mat-button-toggle-group {\n @include _mat-theme-elevation(2, $theme);\n }\n\n .mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\n .mat-button-toggle-group-appearance-standard {\n box-shadow: none;\n }\n\n .mat-button-toggle {\n color: mat-color($foreground, hint-text);\n\n .mat-button-toggle-focus-overlay {\n background-color: mat-color($background, focused-button);\n }\n }\n\n .mat-button-toggle-appearance-standard {\n color: mat-color($foreground, text);\n background: mat-color($background, card);\n\n .mat-button-toggle-focus-overlay {\n background-color: mat-color($background, focused-button, 1);\n }\n }\n\n .mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\n border-left: solid 1px $divider-color;\n }\n\n [dir='rtl'] .mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\n border-left: none;\n border-right: solid 1px $divider-color;\n }\n\n .mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical {\n .mat-button-toggle + .mat-button-toggle {\n border-left: none;\n border-right: none;\n border-top: solid 1px $divider-color;\n }\n }\n\n .mat-button-toggle-checked {\n background-color: mat-color($background, selected-button);\n color: mat-color($foreground, secondary-text);\n\n &.mat-button-toggle-appearance-standard {\n color: mat-color($foreground, text);\n }\n }\n\n .mat-button-toggle-disabled {\n color: mat-color($foreground, disabled-button);\n background-color: mat-color($background, disabled-button-toggle);\n\n &.mat-button-toggle-appearance-standard {\n background: mat-color($background, card);\n }\n\n &.mat-button-toggle-checked {\n background-color: mat-color($background, selected-disabled-button);\n }\n }\n\n .mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\n .mat-button-toggle-group-appearance-standard {\n border: solid 1px $divider-color;\n }\n}\n\n@mixin mat-button-toggle-typography($config) {\n .mat-button-toggle {\n font-family: mat-font-family($config);\n }\n}\n\n\n\n\n\n\n\n@mixin mat-card-theme($theme) {\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n .mat-card {\n @include _mat-theme-overridable-elevation(1, $theme);\n background: mat-color($background, card);\n color: mat-color($foreground, text);\n\n // Needs extra specificity to be able to override the elevation selectors.\n &.mat-card-flat {\n @include _mat-theme-overridable-elevation(0, $theme);\n }\n }\n\n .mat-card-subtitle {\n color: mat-color($foreground, secondary-text);\n }\n}\n\n@mixin mat-card-typography($config) {\n .mat-card {\n font-family: mat-font-family($config);\n }\n\n .mat-card-title {\n font: {\n size: mat-font-size($config, headline);\n weight: mat-font-weight($config, title);\n }\n }\n\n .mat-card-header .mat-card-title {\n font-size: mat-font-size($config, title);\n }\n\n .mat-card-subtitle,\n .mat-card-content {\n font-size: mat-font-size($config, body-1);\n }\n}\n\n\n\n\n\n@mixin mat-checkbox-theme($theme) {\n $is-dark-theme: map-get($theme, is-dark);\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n\n // The color of the checkbox's checkmark / mixedmark.\n $checkbox-mark-color: mat-color($background, background);\n\n // NOTE(traviskaufman): While the spec calls for translucent blacks/whites for disabled colors,\n // this does not work well with elements layered on top of one another. To get around this we\n // blend the colors together based on the base color and the theme background.\n $white-30pct-opacity-on-dark: #686868;\n $black-26pct-opacity-on-light: #b0b0b0;\n $disabled-color: if($is-dark-theme, $white-30pct-opacity-on-dark, $black-26pct-opacity-on-light);\n\n .mat-checkbox-frame {\n border-color: mat-color($foreground, secondary-text);\n }\n\n .mat-checkbox-checkmark {\n fill: $checkbox-mark-color;\n }\n\n .mat-checkbox-checkmark-path {\n // !important is needed here because a stroke must be set as an\n // attribute on the SVG in order for line animation to work properly.\n stroke: $checkbox-mark-color !important;\n }\n\n .mat-checkbox-mixedmark {\n background-color: $checkbox-mark-color;\n }\n\n .mat-checkbox-indeterminate, .mat-checkbox-checked {\n &.mat-primary .mat-checkbox-background {\n background-color: mat-color($primary);\n }\n\n &.mat-accent .mat-checkbox-background {\n background-color: mat-color($accent);\n }\n\n &.mat-warn .mat-checkbox-background {\n background-color: mat-color($warn);\n }\n }\n\n .mat-checkbox-disabled {\n &.mat-checkbox-checked,\n &.mat-checkbox-indeterminate {\n .mat-checkbox-background {\n background-color: $disabled-color;\n }\n }\n\n &:not(.mat-checkbox-checked) {\n .mat-checkbox-frame {\n border-color: $disabled-color;\n }\n }\n\n .mat-checkbox-label {\n color: mat-color($foreground, secondary-text);\n }\n }\n\n // Switch this to a solid color since we're using `opacity`\n // to control how opaque the ripple should be.\n .mat-checkbox .mat-ripple-element {\n background-color: map_get(map-get($theme, foreground), base);\n }\n\n .mat-checkbox-checked:not(.mat-checkbox-disabled),\n .mat-checkbox:active:not(.mat-checkbox-disabled) {\n &.mat-primary .mat-ripple-element {\n background: mat-color($primary);\n }\n\n &.mat-accent .mat-ripple-element {\n background: mat-color($accent);\n }\n\n &.mat-warn .mat-ripple-element {\n background: mat-color($warn);\n }\n }\n}\n\n@mixin mat-checkbox-typography($config) {\n .mat-checkbox {\n font-family: mat-font-family($config);\n }\n\n // TODO(kara): Remove this style when fixing vertical baseline\n .mat-checkbox-layout .mat-checkbox-label {\n line-height: mat-line-height($config, body-2);\n }\n}\n\n\n\n\n\n\n$mat-chip-remove-font-size: 18px;\n\n@mixin mat-chips-color($foreground, $background) {\n background-color: $background;\n color: $foreground;\n\n .mat-chip-remove {\n color: $foreground;\n opacity: 0.4;\n }\n}\n\n\n// Applies the background color for a ripple element.\n// If the color value provided is not a Sass color,\n// we assume that we've been given a CSS variable.\n// Since we can't perform alpha-blending on a CSS variable,\n// we instead add the opacity directly to the ripple element.\n@mixin _mat-chips-ripple-background($palette, $default-contrast, $opacity) {\n $background-color: mat-color($palette, $default-contrast, $opacity);\n background-color: $background-color;\n @if (type-of($background-color) != color) {\n opacity: $opacity;\n }\n}\n\n@mixin mat-chips-theme-color($palette) {\n @include mat-chips-color(mat-color($palette, default-contrast), mat-color($palette));\n\n .mat-ripple-element {\n @include _mat-chips-ripple-background($palette, default-contrast, 0.1);\n }\n}\n\n@mixin mat-chips-theme($theme) {\n $is-dark-theme: map-get($theme, is-dark);\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n $unselected-background: mat-color($background, unselected-chip);\n $unselected-foreground: mat-color($foreground, text);\n\n .mat-chip.mat-standard-chip {\n @include mat-chips-color($unselected-foreground, $unselected-background);\n\n &:not(.mat-chip-disabled) {\n &:active {\n @include _mat-theme-elevation(3, $theme);\n }\n\n .mat-chip-remove:hover {\n opacity: 0.54;\n }\n }\n\n &.mat-chip-disabled {\n opacity: 0.4;\n }\n\n &::after {\n background: map_get($foreground, base);\n }\n }\n\n .mat-chip.mat-standard-chip.mat-chip-selected {\n &.mat-primary {\n @include mat-chips-theme-color($primary);\n }\n\n &.mat-warn {\n @include mat-chips-theme-color($warn);\n }\n\n &.mat-accent {\n @include mat-chips-theme-color($accent);\n }\n }\n}\n\n@mixin mat-chips-typography($config) {\n .mat-chip {\n font-size: mat-font-size($config, body-2);\n font-weight: mat-font-weight($config, body-2);\n\n .mat-chip-trailing-icon.mat-icon,\n .mat-chip-remove.mat-icon {\n font-size: $mat-chip-remove-font-size;\n }\n }\n}\n\n\n\n\n\n@mixin mat-table-theme($theme) {\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n .mat-table {\n background: mat-color($background, 'card');\n }\n\n .mat-table thead, .mat-table tbody, .mat-table tfoot,\n mat-header-row, mat-row, mat-footer-row,\n [mat-header-row], [mat-row], [mat-footer-row],\n .mat-table-sticky {\n background: inherit;\n }\n\n mat-row, mat-header-row, mat-footer-row,\n th.mat-header-cell, td.mat-cell, td.mat-footer-cell {\n border-bottom-color: mat-color($foreground, divider);\n }\n\n .mat-header-cell {\n color: mat-color($foreground, secondary-text);\n }\n\n .mat-cell, .mat-footer-cell {\n color: mat-color($foreground, text);\n }\n}\n\n@mixin mat-table-typography($config) {\n .mat-table {\n font-family: mat-font-family($config);\n }\n\n .mat-header-cell {\n font-size: mat-font-size($config, caption);\n font-weight: mat-font-weight($config, body-2);\n }\n\n .mat-cell, .mat-footer-cell {\n font-size: mat-font-size($config, body-1);\n }\n}\n\n\n\n\n\n\n\n$mat-datepicker-selected-today-box-shadow-width: 1px;\n$mat-datepicker-selected-fade-amount: 0.6;\n$mat-datepicker-today-fade-amount: 0.2;\n$mat-calendar-body-font-size: 13px !default;\n$mat-calendar-weekday-table-font-size: 11px !default;\n\n@mixin _mat-datepicker-color($palette) {\n .mat-calendar-body-selected {\n background-color: mat-color($palette);\n color: mat-color($palette, default-contrast);\n }\n\n .mat-calendar-body-disabled > .mat-calendar-body-selected {\n $background: mat-color($palette);\n\n @if (type-of($background) == color) {\n background-color: fade-out($background, $mat-datepicker-selected-fade-amount);\n }\n @else {\n // If we couldn't resolve to background to a color (e.g. it's a CSS variable),\n // fall back to fading the content out via `opacity`.\n opacity: $mat-datepicker-today-fade-amount;\n }\n }\n\n .mat-calendar-body-today.mat-calendar-body-selected {\n box-shadow: inset 0 0 0 $mat-datepicker-selected-today-box-shadow-width\n mat-color($palette, default-contrast);\n }\n}\n\n@mixin mat-datepicker-theme($theme) {\n $foreground: map-get($theme, foreground);\n $background: map-get($theme, background);\n\n .mat-calendar-arrow {\n border-top-color: mat-color($foreground, icon);\n }\n\n // The prev/next buttons need a bit more specificity to\n // avoid being overwritten by the .mat-icon-button.\n .mat-datepicker-toggle,\n .mat-datepicker-content .mat-calendar-next-button,\n .mat-datepicker-content .mat-calendar-previous-button {\n color: mat-color($foreground, icon);\n }\n\n .mat-calendar-table-header {\n color: mat-color($foreground, hint-text);\n }\n\n .mat-calendar-table-header-divider::after {\n background: mat-color($foreground, divider);\n }\n\n .mat-calendar-body-label {\n color: mat-color($foreground, secondary-text);\n }\n\n .mat-calendar-body-cell-content {\n color: mat-color($foreground, text);\n border-color: transparent;\n }\n\n .mat-calendar-body-disabled > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\n color: mat-color($foreground, disabled-text);\n }\n\n .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover,\n .cdk-keyboard-focused .mat-calendar-body-active,\n .cdk-program-focused .mat-calendar-body-active {\n & > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\n background-color: mat-color($background, hover);\n }\n }\n\n .mat-calendar-body-today:not(.mat-calendar-body-selected) {\n // Note: though it's not text, the border is a hint about the fact that this is today's date,\n // so we use the hint color.\n border-color: mat-color($foreground, hint-text);\n }\n\n .mat-calendar-body-disabled > .mat-calendar-body-today:not(.mat-calendar-body-selected) {\n $color: mat-color($foreground, hint-text);\n\n @if (type-of($color) == color) {\n border-color: fade-out($color, $mat-datepicker-today-fade-amount);\n }\n @else {\n // If the color didn't resolve to a color value, but something like a CSS variable, we can't\n // fade it out so we fall back to reducing the element opacity. Note that we don't use the\n // $mat-datepicker-today-fade-amount, because hint text usually has some opacity applied\n // to it already and we don't want them to stack on top of each other.\n opacity: 0.5;\n }\n }\n\n @include _mat-datepicker-color(map-get($theme, primary));\n\n .mat-datepicker-content {\n @include _mat-theme-elevation(4, $theme);\n background-color: mat-color($background, card);\n color: mat-color($foreground, text);\n\n &.mat-accent {\n @include _mat-datepicker-color(map-get($theme, accent));\n }\n\n &.mat-warn {\n @include _mat-datepicker-color(map-get($theme, warn));\n }\n }\n\n .mat-datepicker-content-touch {\n @include _mat-theme-elevation(0, $theme);\n }\n\n .mat-datepicker-toggle-active {\n color: mat-color(map-get($theme, primary), text);\n\n &.mat-accent {\n color: mat-color(map-get($theme, accent), text);\n }\n\n &.mat-warn {\n color: mat-color(map-get($theme, warn), text);\n }\n }\n}\n\n@mixin mat-datepicker-typography($config) {\n .mat-calendar {\n font-family: mat-font-family($config);\n }\n\n .mat-calendar-body {\n font-size: $mat-calendar-body-font-size;\n }\n\n .mat-calendar-body-label,\n .mat-calendar-period-button {\n font: {\n size: mat-font-size($config, button);\n weight: mat-font-weight($config, button);\n }\n }\n\n .mat-calendar-table-header th {\n font: {\n size: $mat-calendar-weekday-table-font-size;\n weight: mat-font-weight($config, body-1);\n }\n }\n}\n\n\n\n\n\n\n\n@mixin mat-dialog-theme($theme) {\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n .mat-dialog-container {\n @include _mat-theme-elevation(24, $theme);\n background: mat-color($background, dialog);\n color: mat-color($foreground, text);\n }\n}\n\n@mixin mat-dialog-typography($config) {\n .mat-dialog-title {\n @include mat-typography-level-to-styles($config, title);\n }\n}\n\n\n\n\n\n\n@mixin mat-expansion-panel-theme($theme) {\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n .mat-expansion-panel {\n @include _mat-theme-overridable-elevation(2, $theme);\n background: mat-color($background, card);\n color: mat-color($foreground, text);\n }\n\n .mat-action-row {\n border-top-color: mat-color($foreground, divider);\n }\n\n .mat-expansion-panel {\n & .mat-expansion-panel-header.cdk-keyboard-focused,\n & .mat-expansion-panel-header.cdk-program-focused,\n &:not(.mat-expanded) .mat-expansion-panel-header:hover {\n &:not([aria-disabled='true']) {\n background: mat-color($background, hover);\n }\n }\n }\n\n // Disable the hover on touch devices since it can appear like it is stuck. We can't use\n // `@media (hover)` above, because the desktop support browser support isn't great.\n @media (hover: none) {\n .mat-expansion-panel:not(.mat-expanded):not([aria-disabled='true'])\n .mat-expansion-panel-header:hover {\n background: mat-color($background, card);\n }\n }\n\n .mat-expansion-panel-header-title {\n color: mat-color($foreground, text);\n }\n\n .mat-expansion-panel-header-description,\n .mat-expansion-indicator::after {\n color: mat-color($foreground, secondary-text);\n }\n\n .mat-expansion-panel-header[aria-disabled='true'] {\n color: mat-color($foreground, disabled-button);\n\n .mat-expansion-panel-header-title,\n .mat-expansion-panel-header-description {\n color: inherit;\n }\n }\n}\n\n@mixin mat-expansion-panel-typography($config) {\n .mat-expansion-panel-header {\n font: {\n family: mat-font-family($config, subheading-1);\n size: mat-font-size($config, subheading-1);\n weight: mat-font-weight($config, subheading-1);\n }\n }\n\n .mat-expansion-panel-content {\n @include mat-typography-level-to-styles($config, body-1);\n }\n}\n\n\n\n\n// This mixin will ensure that lines that overflow the container will hide the overflow and\n// truncate neatly with an ellipsis.\n@mixin mat-truncate-line() {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n// Mixin to provide all mat-line styles, changing secondary font size based on whether the list\n// is in dense mode.\n@mixin mat-line-base($secondary-font-size) {\n .mat-line {\n @include mat-truncate-line();\n display: block;\n box-sizing: border-box;\n\n // all lines but the top line should have smaller text\n &:nth-child(n+2) {\n font-size: $secondary-font-size;\n }\n }\n}\n\n// This mixin normalizes default element styles, e.g. font weight for heading text.\n@mixin mat-normalize-text() {\n & > * {\n margin: 0;\n padding: 0;\n font-weight: normal;\n font-size: inherit;\n }\n}\n\n// This mixin provides base styles for the wrapper around mat-line elements in a list.\n@mixin mat-line-wrapper-base() {\n @include mat-normalize-text();\n\n display: flex;\n flex-direction: column;\n width: 100%;\n box-sizing: border-box;\n overflow: hidden;\n\n // Must remove wrapper when lines are empty or it takes up horizontal\n // space and pushes other elements to the right.\n &:empty {\n display: none;\n }\n}\n\n\n\n// Include this empty mixin for consistency with the other components.\n@mixin mat-grid-list-theme($theme) { }\n\n@mixin mat-grid-list-typography($config) {\n .mat-grid-tile-header,\n .mat-grid-tile-footer {\n @include mat-line-base(mat-font-size($config, caption));\n font-size: mat-font-size($config, body-1);\n }\n}\n\n\n\n\n// Include this empty mixin for consistency with the other components.\n@mixin mat-icon-theme($theme) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n .mat-icon {\n &.mat-primary {\n color: mat-color($primary, text);\n }\n\n &.mat-accent {\n color: mat-color($accent, text);\n }\n\n &.mat-warn {\n color: mat-color($warn, text);\n }\n }\n}\n\n@mixin mat-icon-typography($config) { }\n\n\n\n\n\n// Renders a gradient for showing the dashed line when the input is disabled.\n// Unlike using a border, a gradient allows us to adjust the spacing of the dotted line\n// to match the Material Design spec.\n@mixin mat-control-disabled-underline($color) {\n background-image: linear-gradient(to right, $color 0%, $color 33%, transparent 0%);\n background-size: 4px 100%;\n background-repeat: repeat-x;\n}\n\n// Figures out the color of the placeholder for a form control.\n// Used primarily to prevent the various form controls from\n// becoming out of sync since these colors aren't in a palette.\n@function _mat-control-placeholder-color($theme) {\n $foreground: map-get($theme, foreground);\n $is-dark-theme: map-get($theme, is-dark);\n @return mat-color($foreground, secondary-text, if($is-dark-theme, 0.5, 0.42));\n}\n\n\n/* stylelint-disable material/no-prefixes */\n@mixin user-select($value) {\n -webkit-user-select: $value;\n -moz-user-select: $value;\n -ms-user-select: $value;\n user-select: $value;\n}\n\n@mixin input-placeholder {\n &::placeholder {\n @content;\n }\n\n &::-moz-placeholder {\n @content;\n }\n\n &::-webkit-input-placeholder {\n @content;\n }\n\n &:-ms-input-placeholder {\n @content;\n }\n}\n\n@mixin cursor-grab {\n cursor: -webkit-grab;\n cursor: grab;\n}\n\n@mixin cursor-grabbing {\n cursor: -webkit-grabbing;\n cursor: grabbing;\n}\n\n@mixin backface-visibility($value) {\n -webkit-backface-visibility: $value;\n backface-visibility: $value;\n}\n/* stylelint-enable */\n\n\n\n@mixin mat-input-theme($theme) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $foreground: map-get($theme, foreground);\n\n .mat-form-field-type-mat-native-select .mat-form-field-infix::after {\n color: mat-color($foreground, secondary-text);\n }\n\n .mat-input-element:disabled,\n .mat-form-field-type-mat-native-select.mat-form-field-disabled .mat-form-field-infix::after {\n color: mat-color($foreground, disabled-text);\n }\n\n .mat-input-element {\n caret-color: mat-color($primary, text);\n\n @include input-placeholder {\n color: _mat-control-placeholder-color($theme);\n }\n\n // On dark themes we set the native `select` color to some shade of white,\n // however the color propagates to all of the `option` elements, which are\n // always on a white background inside the dropdown, causing them to blend in.\n // Since we can't change background of the dropdown, we need to explicitly\n // reset the color of the options to something dark.\n @if (map-get($theme, is-dark)) {\n option {\n color: $dark-primary-text;\n }\n\n option:disabled {\n color: $dark-disabled-text;\n }\n }\n }\n\n .mat-accent .mat-input-element {\n caret-color: mat-color($accent, text);\n }\n\n .mat-warn .mat-input-element,\n .mat-form-field-invalid .mat-input-element {\n caret-color: mat-color($warn, text);\n }\n\n .mat-form-field-type-mat-native-select.mat-form-field-invalid .mat-form-field-infix::after {\n color: mat-color($warn, text);\n }\n}\n\n@mixin mat-input-typography($config) {\n // The unit-less line-height from the font config.\n $line-height: mat-line-height($config, input);\n\n // The amount of space between the top of the line and the top of the actual text\n // (as a fraction of the font-size).\n $line-spacing: ($line-height - 1) / 2;\n\n // elements seem to have their height set slightly too large on Safari causing the text to\n // be misaligned w.r.t. the placeholder. Adding this margin corrects it.\n input.mat-input-element {\n margin-top: -$line-spacing * 1em;\n }\n}\n\n\n\n\n\n\n\n@mixin mat-list-theme($theme) {\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n .mat-list-base {\n .mat-list-item {\n color: mat-color($foreground, text);\n }\n\n .mat-list-option {\n color: mat-color($foreground, text);\n }\n\n .mat-subheader {\n color: mat-color($foreground, secondary-text);\n }\n }\n\n .mat-list-item-disabled {\n background-color: mat-color($background, disabled-list-option);\n }\n\n .mat-list-option,\n .mat-nav-list .mat-list-item,\n .mat-action-list .mat-list-item {\n &:hover, &:focus {\n background: mat-color($background, 'hover');\n }\n }\n\n .mat-list-single-selected-option {\n &, &:hover, &:focus {\n background: mat-color($background, hover, 0.12);\n }\n }\n}\n\n@mixin mat-list-typography($config) {\n $font-family: mat-font-family($config);\n\n .mat-list-item {\n font-family: $font-family;\n }\n\n .mat-list-option {\n font-family: $font-family;\n }\n\n // Default list\n .mat-list-base {\n .mat-list-item {\n font-size: mat-font-size($config, subheading-2);\n @include mat-line-base(mat-font-size($config, body-1));\n }\n\n .mat-list-option {\n font-size: mat-font-size($config, subheading-2);\n @include mat-line-base(mat-font-size($config, body-1));\n }\n\n .mat-subheader {\n font-family: mat-font-family($config, body-2);\n font-size: mat-font-size($config, body-2);\n font-weight: mat-font-weight($config, body-2);\n }\n }\n\n // Dense list\n .mat-list-base[dense] {\n .mat-list-item {\n font-size: mat-font-size($config, caption);\n @include mat-line-base(mat-font-size($config, caption));\n }\n\n .mat-list-option {\n font-size: mat-font-size($config, caption);\n @include mat-line-base(mat-font-size($config, caption));\n }\n\n .mat-subheader {\n font-family: $font-family;\n font-size: mat-font-size($config, caption);\n font-weight: mat-font-weight($config, body-2);\n }\n }\n}\n\n\n\n\n\n\n\n@mixin mat-menu-theme($theme) {\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n .mat-menu-panel {\n @include _mat-theme-overridable-elevation(4, $theme);\n background: mat-color($background, 'card');\n }\n\n .mat-menu-item {\n background: transparent;\n color: mat-color($foreground, 'text');\n\n &[disabled] {\n &, &::after {\n color: mat-color($foreground, 'disabled');\n }\n }\n }\n\n .mat-menu-item .mat-icon-no-color,\n .mat-menu-item-submenu-trigger::after {\n color: mat-color($foreground, 'icon');\n }\n\n .mat-menu-item:hover,\n .mat-menu-item.cdk-program-focused,\n .mat-menu-item.cdk-keyboard-focused,\n .mat-menu-item-highlighted {\n &:not([disabled]) {\n background: mat-color($background, 'hover');\n }\n }\n}\n\n@mixin mat-menu-typography($config) {\n .mat-menu-item {\n font: {\n family: mat-font-family($config, body-1);\n size: mat-font-size($config, body-1);\n weight: mat-font-weight($config, body-1);\n }\n }\n}\n\n\n\n\n\n\n@mixin mat-paginator-theme($theme) {\n $foreground: map-get($theme, foreground);\n $background: map-get($theme, background);\n\n .mat-paginator {\n background: mat-color($background, 'card');\n }\n\n .mat-paginator,\n .mat-paginator-page-size .mat-select-trigger {\n color: mat-color($foreground, secondary-text);\n }\n\n .mat-paginator-decrement,\n .mat-paginator-increment {\n border-top: 2px solid mat-color($foreground, 'icon');\n border-right: 2px solid mat-color($foreground, 'icon');\n }\n\n .mat-paginator-first,\n .mat-paginator-last {\n border-top: 2px solid mat-color($foreground, 'icon');\n }\n\n .mat-icon-button[disabled] {\n .mat-paginator-decrement,\n .mat-paginator-increment,\n .mat-paginator-first,\n .mat-paginator-last {\n border-color: mat-color($foreground, 'disabled');\n }\n }\n}\n\n@mixin mat-paginator-typography($config) {\n .mat-paginator,\n .mat-paginator-page-size .mat-select-trigger {\n font: {\n family: mat-font-family($config, caption);\n size: mat-font-size($config, caption);\n }\n }\n}\n\n\n\n\n\n@mixin mat-progress-bar-theme($theme) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n\n .mat-progress-bar-background {\n fill: mat-color($primary, lighter);\n }\n\n .mat-progress-bar-buffer {\n background-color: mat-color($primary, lighter);\n }\n\n .mat-progress-bar-fill::after {\n background-color: mat-color($primary);\n }\n\n .mat-progress-bar.mat-accent {\n .mat-progress-bar-background {\n fill: mat-color($accent, lighter);\n }\n\n .mat-progress-bar-buffer {\n background-color: mat-color($accent, lighter);\n }\n\n .mat-progress-bar-fill::after {\n background-color: mat-color($accent);\n }\n }\n\n .mat-progress-bar.mat-warn {\n .mat-progress-bar-background {\n fill: mat-color($warn, lighter);\n }\n\n .mat-progress-bar-buffer {\n background-color: mat-color($warn, lighter);\n }\n\n .mat-progress-bar-fill::after {\n background-color: mat-color($warn);\n }\n }\n}\n\n@mixin mat-progress-bar-typography($config) { }\n\n\n\n\n\n\n@mixin mat-progress-spinner-theme($theme) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n\n .mat-progress-spinner, .mat-spinner {\n circle {\n stroke: mat-color($primary);\n }\n\n &.mat-accent circle {\n stroke: mat-color($accent);\n }\n\n &.mat-warn circle {\n stroke: mat-color($warn);\n }\n }\n}\n\n@mixin mat-progress-spinner-typography($config) { }\n\n\n\n\n\n@mixin _mat-radio-color($palette) {\n &.mat-radio-checked .mat-radio-outer-circle {\n border-color: mat-color($palette);\n }\n\n .mat-radio-inner-circle,\n .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),\n &.mat-radio-checked .mat-radio-persistent-ripple,\n &:active .mat-radio-persistent-ripple {\n background-color: mat-color($palette);\n }\n}\n\n@mixin mat-radio-theme($theme) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n .mat-radio-outer-circle {\n border-color: mat-color($foreground, secondary-text);\n }\n\n .mat-radio-button {\n &.mat-primary {\n @include _mat-radio-color($primary);\n }\n\n &.mat-accent {\n @include _mat-radio-color($accent);\n }\n\n &.mat-warn {\n @include _mat-radio-color($warn);\n }\n\n // This needs extra specificity, because the classes above are combined\n // (e.g. `.mat-radio-button.mat-accent`) which increases their specificity a lot.\n // TODO: consider making the selectors into descendants (`.mat-primary .mat-radio-button`).\n &.mat-radio-disabled {\n &.mat-radio-checked .mat-radio-outer-circle,\n .mat-radio-outer-circle {\n border-color: mat-color($foreground, disabled);\n }\n\n .mat-radio-ripple .mat-ripple-element,\n .mat-radio-inner-circle {\n background-color: mat-color($foreground, disabled);\n }\n\n .mat-radio-label-content {\n color: mat-color($foreground, disabled);\n }\n }\n\n // Switch this to a solid color since we're using `opacity`\n // to control how opaque the ripple should be.\n .mat-ripple-element {\n background-color: map_get($foreground, base);\n }\n }\n}\n\n@mixin mat-radio-typography($config) {\n .mat-radio-button {\n font-family: mat-font-family($config);\n }\n}\n\n\n\n\n\n\n\n\n@mixin mat-select-theme($theme) {\n $foreground: map-get($theme, foreground);\n $background: map-get($theme, background);\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n\n .mat-select-value {\n color: mat-color($foreground, text);\n }\n\n .mat-select-placeholder {\n color: _mat-control-placeholder-color($theme);\n }\n\n .mat-select-disabled .mat-select-value {\n color: mat-color($foreground, disabled-text);\n }\n\n .mat-select-arrow {\n color: mat-color($foreground, secondary-text);\n }\n\n .mat-select-panel {\n background: mat-color($background, card);\n @include _mat-theme-overridable-elevation(4, $theme);\n\n .mat-option.mat-selected:not(.mat-option-multiple) {\n background: mat-color($background, hover, 0.12);\n }\n }\n\n .mat-form-field {\n &.mat-focused {\n &.mat-primary .mat-select-arrow {\n color: mat-color($primary, text);\n }\n\n &.mat-accent .mat-select-arrow {\n color: mat-color($accent, text);\n }\n\n &.mat-warn .mat-select-arrow {\n color: mat-color($warn, text);\n }\n }\n\n .mat-select.mat-select-invalid .mat-select-arrow {\n color: mat-color($warn, text);\n }\n\n .mat-select.mat-select-disabled .mat-select-arrow {\n color: mat-color($foreground, disabled-text);\n }\n }\n}\n\n@mixin mat-select-typography($config) {\n // The unit-less line-height from the font config.\n $line-height: mat-line-height($config, input);\n\n .mat-select {\n font-family: mat-font-family($config);\n }\n\n .mat-select-trigger {\n height: $line-height * 1em;\n }\n}\n\n\n\n\n\n\n@mixin mat-sidenav-theme($theme) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n $drawer-background-color: mat-color($background, dialog);\n $drawer-container-background-color: mat-color($background, background);\n $drawer-push-background-color: mat-color($background, dialog);\n $drawer-side-border: solid 1px mat-color($foreground, divider);\n\n .mat-drawer-container {\n background-color: $drawer-container-background-color;\n color: mat-color($foreground, text);\n }\n\n .mat-drawer {\n background-color: $drawer-background-color;\n color: mat-color($foreground, text);\n\n &.mat-drawer-push {\n background-color: $drawer-push-background-color;\n }\n\n &:not(.mat-drawer-side) {\n // The elevation of z-16 is noted in the design specifications.\n // See https://material.io/design/components/navigation-drawer.html\n @include _mat-theme-elevation(16, $theme);\n }\n }\n\n .mat-drawer-side {\n border-right: $drawer-side-border;\n\n &.mat-drawer-end {\n border-left: $drawer-side-border;\n border-right: none;\n }\n }\n\n [dir='rtl'] .mat-drawer-side {\n border-left: $drawer-side-border;\n border-right: none;\n\n &.mat-drawer-end {\n border-left: none;\n border-right: $drawer-side-border;\n }\n }\n\n .mat-drawer-backdrop.mat-drawer-shown {\n $opacity: 0.6;\n $backdrop-color: mat-color($background, card, $opacity);\n\n @if (type-of($backdrop-color) == color) {\n // We use invert() here to have the darken the background color expected to be used. If the\n // background is light, we use a dark backdrop. If the background is dark,\n // we use a light backdrop.\n background-color: invert($backdrop-color);\n }\n @else {\n // If we couldn't resolve the backdrop color to a color value, fall back to using\n // `opacity` to make it opaque since its end value could be a solid color.\n background-color: $backdrop-color;\n opacity: $opacity;\n }\n }\n}\n\n@mixin mat-sidenav-typography($config) { }\n\n\n\n\n\n\n@mixin _mat-slide-toggle-checked($palette, $thumb-checked-hue) {\n &.mat-checked {\n .mat-slide-toggle-thumb {\n background-color: mat-color($palette, $thumb-checked-hue);\n }\n\n .mat-slide-toggle-bar {\n // Opacity is determined from the specs for the selection controls.\n // See: https://material.io/design/components/selection-controls.html#specs\n background-color: mat-color($palette, $thumb-checked-hue, 0.54);\n }\n\n .mat-ripple-element {\n // Set no opacity for the ripples because the ripple opacity will be adjusted dynamically\n // based on the type of interaction with the slide-toggle (e.g. for hover, focus)\n background-color: mat-color($palette, $thumb-checked-hue);\n }\n }\n}\n\n@mixin mat-slide-toggle-theme($theme) {\n $is-dark: map_get($theme, is-dark);\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n // Color hues are based on the specs which briefly show the hues that are applied to a switch.\n // The 2018 specs no longer describe how dark switches should look like. Due to the lack of\n // information for dark themed switches, we partially keep the old behavior that is based on\n // the previous specifications. For the checked color we always use the `default` hue because\n // that follows MDC and also makes it easier for people to create a custom theme without needing\n // to specify each hue individually.\n $thumb-unchecked-hue: if($is-dark, 400, 50);\n $thumb-checked-hue: default;\n\n $bar-unchecked-color: mat-color($foreground, disabled);\n $ripple-unchecked-color: mat-color($foreground, base);\n\n .mat-slide-toggle {\n @include _mat-slide-toggle-checked($accent, $thumb-checked-hue);\n\n &.mat-primary {\n @include _mat-slide-toggle-checked($primary, $thumb-checked-hue);\n }\n\n &.mat-warn {\n @include _mat-slide-toggle-checked($warn, $thumb-checked-hue);\n }\n\n &:not(.mat-checked) .mat-ripple-element {\n // Set no opacity for the ripples because the ripple opacity will be adjusted dynamically\n // based on the type of interaction with the slide-toggle (e.g. for hover, focus)\n background-color: $ripple-unchecked-color;\n }\n }\n\n .mat-slide-toggle-thumb {\n @include _mat-theme-elevation(1, $theme);\n background-color: mat-color($mat-grey, $thumb-unchecked-hue);\n }\n\n .mat-slide-toggle-bar {\n background-color: $bar-unchecked-color;\n }\n}\n\n@mixin mat-slide-toggle-typography($config) {\n .mat-slide-toggle-content {\n font-family: mat-font-family($config);\n }\n}\n\n\n\n\n\n@mixin _mat-slider-inner-content-theme($palette) {\n .mat-slider-track-fill,\n .mat-slider-thumb,\n .mat-slider-thumb-label {\n background-color: mat-color($palette);\n }\n\n .mat-slider-thumb-label-text {\n color: mat-color($palette, default-contrast);\n }\n}\n\n@mixin mat-slider-theme($theme) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n $mat-slider-off-color: mat-color($foreground, slider-off);\n $mat-slider-off-focused-color: mat-color($foreground, slider-off-active);\n $mat-slider-disabled-color: mat-color($foreground, slider-off);\n $mat-slider-labeled-min-value-thumb-color: mat-color($foreground, slider-min);\n $mat-slider-labeled-min-value-thumb-label-color: mat-color($foreground, slider-off);\n $mat-slider-tick-opacity: 0.7;\n $mat-slider-tick-color: mat-color($foreground, base, $mat-slider-tick-opacity);\n $mat-slider-tick-size: 2px;\n\n .mat-slider-track-background {\n background-color: $mat-slider-off-color;\n }\n\n .mat-primary {\n @include _mat-slider-inner-content-theme($primary);\n }\n\n .mat-accent {\n @include _mat-slider-inner-content-theme($accent);\n }\n\n .mat-warn {\n @include _mat-slider-inner-content-theme($warn);\n }\n\n .mat-slider-focus-ring {\n $opacity: 0.2;\n $color: mat-color($accent, default, $opacity);\n background-color: $color;\n\n // `mat-color` uses `rgba` for the opacity which won't work with\n // CSS variables so we need to use `opacity` as a fallback.\n @if (type-of($color) != color) {\n opacity: $opacity;\n }\n }\n\n .mat-slider:hover,\n .cdk-focused {\n .mat-slider-track-background {\n background-color: $mat-slider-off-focused-color;\n }\n }\n\n .mat-slider-disabled {\n .mat-slider-track-background,\n .mat-slider-track-fill,\n .mat-slider-thumb {\n background-color: $mat-slider-disabled-color;\n }\n\n &:hover {\n .mat-slider-track-background {\n background-color: $mat-slider-disabled-color;\n }\n }\n }\n\n .mat-slider-min-value {\n .mat-slider-focus-ring {\n $opacity: 0.12;\n $color: mat-color($foreground, base, $opacity);\n background-color: $color;\n\n // `mat-color` uses `rgba` for the opacity which won't work with\n // CSS variables so we need to use `opacity` as a fallback.\n @if (type-of($color) != color) {\n opacity: $opacity;\n }\n }\n\n &.mat-slider-thumb-label-showing {\n .mat-slider-thumb,\n .mat-slider-thumb-label {\n background-color: $mat-slider-labeled-min-value-thumb-color;\n }\n\n &.cdk-focused {\n .mat-slider-thumb,\n .mat-slider-thumb-label {\n background-color: $mat-slider-labeled-min-value-thumb-label-color;\n }\n }\n }\n\n &:not(.mat-slider-thumb-label-showing) {\n .mat-slider-thumb {\n border-color: $mat-slider-off-color;\n background-color: transparent;\n }\n\n &:hover,\n &.cdk-focused {\n .mat-slider-thumb {\n border-color: $mat-slider-off-focused-color;\n }\n\n &.mat-slider-disabled .mat-slider-thumb {\n border-color: $mat-slider-disabled-color;\n }\n }\n }\n }\n\n .mat-slider-has-ticks .mat-slider-wrapper::after {\n border-color: $mat-slider-tick-color;\n\n // `mat-color` uses `rgba` for the opacity which won't work with\n // CSS variables so we need to use `opacity` as a fallback.\n @if (type-of($mat-slider-tick-color) != color) {\n opacity: $mat-slider-tick-opacity;\n }\n }\n\n .mat-slider-horizontal .mat-slider-ticks {\n background-image: repeating-linear-gradient(to right, $mat-slider-tick-color,\n $mat-slider-tick-color $mat-slider-tick-size, transparent 0, transparent);\n // Firefox doesn't draw the gradient correctly with 'to right'\n // (see https://bugzilla.mozilla.org/show_bug.cgi?id=1314319).\n background-image: -moz-repeating-linear-gradient(0.0001deg, $mat-slider-tick-color,\n $mat-slider-tick-color $mat-slider-tick-size, transparent 0, transparent);\n\n // `mat-color` uses `rgba` for the opacity which won't work with\n // CSS variables so we need to use `opacity` as a fallback.\n @if (type-of($mat-slider-tick-color) != color) {\n opacity: $mat-slider-tick-opacity;\n }\n }\n\n .mat-slider-vertical .mat-slider-ticks {\n background-image: repeating-linear-gradient(to bottom, $mat-slider-tick-color,\n $mat-slider-tick-color $mat-slider-tick-size, transparent 0, transparent);\n\n // `mat-color` uses `rgba` for the opacity which won't work with\n // CSS variables so we need to use `opacity` as a fallback.\n @if (type-of($mat-slider-tick-color) != color) {\n opacity: $mat-slider-tick-opacity;\n }\n }\n}\n\n@mixin mat-slider-typography($config) {\n .mat-slider-thumb-label-text {\n font: {\n family: mat-font-family($config);\n size: mat-font-size($config, caption);\n weight: mat-font-weight($config, body-2);\n }\n }\n}\n\n\n\n\n\n@mixin mat-stepper-theme($theme) {\n $foreground: map-get($theme, foreground);\n $background: map-get($theme, background);\n $primary: map-get($theme, primary);\n $warn: map-get($theme, warn);\n\n .mat-step-header {\n &.cdk-keyboard-focused,\n &.cdk-program-focused,\n &:hover {\n background-color: mat-color($background, hover);\n }\n\n // On touch devices the :hover state will linger on the element after a tap.\n // Reset it via `@media` after the declaration, because the media query isn't\n // supported by all browsers yet.\n @media (hover: none) {\n &:hover {\n background: none;\n }\n }\n\n .mat-step-label,\n .mat-step-optional {\n // TODO(josephperrott): Update to using a corrected disabled-text contrast\n // instead of secondary-text.\n color: mat-color($foreground, secondary-text);\n }\n\n .mat-step-icon {\n // TODO(josephperrott): Update to using a corrected disabled-text contrast\n // instead of secondary-text.\n background-color: mat-color($foreground, secondary-text);\n color: mat-color($primary, default-contrast);\n }\n\n .mat-step-icon-selected,\n .mat-step-icon-state-done,\n .mat-step-icon-state-edit {\n background-color: mat-color($primary);\n color: mat-color($primary, default-contrast);\n }\n\n .mat-step-icon-state-error {\n background-color: transparent;\n color: mat-color($warn, text);\n }\n\n .mat-step-label.mat-step-label-active {\n color: mat-color($foreground, text);\n }\n\n .mat-step-label.mat-step-label-error {\n color: mat-color($warn, text);\n }\n }\n\n .mat-stepper-horizontal, .mat-stepper-vertical {\n background-color: mat-color($background, card);\n }\n\n .mat-stepper-vertical-line::before {\n border-left-color: mat-color($foreground, divider);\n }\n\n .mat-horizontal-stepper-header::before,\n .mat-horizontal-stepper-header::after,\n .mat-stepper-horizontal-line {\n border-top-color: mat-color($foreground, divider);\n }\n}\n\n@mixin mat-stepper-typography($config) {\n .mat-stepper-vertical, .mat-stepper-horizontal {\n font-family: mat-font-family($config);\n }\n\n .mat-step-label {\n font: {\n size: mat-font-size($config, body-1);\n weight: mat-font-weight($config, body-1);\n };\n }\n\n .mat-step-sub-label-error {\n font-weight: normal;\n }\n\n .mat-step-label-error {\n font-size: mat-font-size($config, body-2);\n }\n\n .mat-step-label-selected {\n font: {\n size: mat-font-size($config, body-2);\n weight: mat-font-weight($config, body-2);\n };\n }\n}\n\n@mixin mat-sort-theme($theme) {\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n .mat-sort-header-arrow {\n $table-background: mat-color($background, 'card');\n $text-color: mat-color($foreground, secondary-text);\n\n // Because the arrow is made up of multiple elements that are stacked on top of each other,\n // we can't use the semi-trasparent color from the theme directly. If the value is a color\n // *type*, we convert it into a solid color by taking the opacity from the rgba value and\n // using the value to determine the percentage of the background to put into foreground\n // when mixing the colors together. Otherwise, if it resolves to something different\n // (e.g. it resolves to a CSS variable), we use the color directly.\n @if (type-of($table-background) == color and type-of($text-color) == color) {\n $text-opacity: opacity($text-color);\n color: mix($table-background, rgba($text-color, 1), (1 - $text-opacity) * 100%);\n }\n @else {\n color: $text-color;\n }\n }\n}\n\n@mixin mat-sort-typography($config) { }\n\n\n\n\n\n@mixin mat-tabs-theme($theme) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n $header-border: 1px solid mat-color($foreground, divider);\n\n .mat-tab-nav-bar,\n .mat-tab-header {\n border-bottom: $header-border;\n }\n\n .mat-tab-group-inverted-header {\n .mat-tab-nav-bar,\n .mat-tab-header {\n border-top: $header-border;\n border-bottom: none;\n }\n }\n\n .mat-tab-label, .mat-tab-link {\n color: mat-color($foreground, text);\n\n &.mat-tab-disabled {\n color: mat-color($foreground, disabled-text);\n }\n }\n\n .mat-tab-header-pagination-chevron {\n border-color: mat-color($foreground, text);\n }\n\n .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: mat-color($foreground, disabled-text);\n }\n\n // Remove header border when there is a background color\n .mat-tab-group[class*='mat-background-'] .mat-tab-header,\n .mat-tab-nav-bar[class*='mat-background-'] {\n border-bottom: none;\n border-top: none;\n }\n\n .mat-tab-group, .mat-tab-nav-bar {\n $theme-colors: (\n primary: $primary,\n accent: $accent,\n warn: $warn\n );\n\n @each $name, $color in $theme-colors {\n // Set the foreground color of the tabs\n &.mat-#{$name} {\n @include _mat-tab-label-focus($color);\n @include _mat-ink-bar($color);\n\n // Override ink bar when background color is the same\n &.mat-background-#{$name} {\n @include _mat-ink-bar($color, default-contrast);\n }\n }\n }\n\n @each $name, $color in $theme-colors {\n // Set background color of the tabs and override focus color\n &.mat-background-#{$name} {\n @include _mat-tab-label-focus($color);\n @include _mat-tabs-background($color);\n }\n }\n }\n}\n\n@mixin _mat-ink-bar($color, $hue: default) {\n .mat-ink-bar {\n background-color: mat-color($color, $hue);\n }\n}\n\n@mixin _mat-tab-label-focus($tab-focus-color) {\n .mat-tab-label,\n .mat-tab-link {\n &.cdk-keyboard-focused,\n &.cdk-program-focused {\n &:not(.mat-tab-disabled) {\n background-color: mat-color($tab-focus-color, lighter, 0.3);\n }\n }\n }\n}\n\n@mixin _mat-tabs-background($background-color) {\n // Set background color for the tab group\n .mat-tab-header, .mat-tab-links, .mat-tab-header-pagination {\n background-color: mat-color($background-color);\n }\n\n // Set labels to contrast against background\n .mat-tab-label, .mat-tab-link {\n color: mat-color($background-color, default-contrast);\n\n &.mat-tab-disabled {\n color: mat-color($background-color, default-contrast, 0.4);\n }\n }\n\n // Set pagination chevrons to contrast background\n .mat-tab-header-pagination-chevron {\n border-color: mat-color($background-color, default-contrast);\n }\n\n .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: mat-color($background-color, default-contrast, 0.4);\n }\n\n // Set ripples color to be the contrast color of the new background. Otherwise the ripple\n // color will be based on the app background color.\n .mat-ripple-element {\n background-color: mat-color($background-color, default-contrast, 0.12);\n }\n}\n\n@mixin mat-tabs-typography($config) {\n .mat-tab-group {\n font-family: mat-font-family($config);\n }\n\n .mat-tab-label, .mat-tab-link {\n font: {\n family: mat-font-family($config, button);\n size: mat-font-size($config, button);\n weight: mat-font-weight($config, button);\n }\n }\n}\n\n\n\n\n\n\n@mixin _mat-toolbar-color($palette) {\n background: mat-color($palette);\n color: mat-color($palette, default-contrast);\n}\n\n@mixin _mat-toolbar-form-field-overrides {\n .mat-form-field-underline,\n .mat-form-field-ripple,\n .mat-focused .mat-form-field-ripple {\n background-color: currentColor;\n }\n\n .mat-form-field-label,\n .mat-focused .mat-form-field-label,\n .mat-select-value,\n .mat-select-arrow,\n .mat-form-field.mat-focused .mat-select-arrow {\n color: inherit;\n }\n\n .mat-input-element {\n caret-color: currentColor;\n }\n}\n\n@mixin mat-toolbar-theme($theme) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n .mat-toolbar {\n background: mat-color($background, app-bar);\n color: mat-color($foreground, text);\n\n &.mat-primary {\n @include _mat-toolbar-color($primary);\n }\n\n &.mat-accent {\n @include _mat-toolbar-color($accent);\n }\n\n &.mat-warn {\n @include _mat-toolbar-color($warn);\n }\n\n @include _mat-toolbar-form-field-overrides;\n }\n}\n\n@mixin mat-toolbar-typography($config) {\n .mat-toolbar,\n .mat-toolbar h1,\n .mat-toolbar h2,\n .mat-toolbar h3,\n .mat-toolbar h4,\n .mat-toolbar h5,\n .mat-toolbar h6 {\n @include mat-typography-level-to-styles($config, title);\n margin: 0;\n }\n}\n\n\n\n\n\n$mat-tooltip-target-height: 22px;\n$mat-tooltip-font-size: 10px;\n$mat-tooltip-vertical-padding: ($mat-tooltip-target-height - $mat-tooltip-font-size) / 2;\n\n$mat-tooltip-handset-target-height: 30px;\n$mat-tooltip-handset-font-size: 14px;\n$mat-tooltip-handset-vertical-padding:\n ($mat-tooltip-handset-target-height - $mat-tooltip-handset-font-size) / 2;\n\n@mixin mat-tooltip-theme($theme) {\n $background: map-get($theme, background);\n\n .mat-tooltip {\n background: mat-color($background, tooltip, 0.9);\n }\n}\n\n@mixin mat-tooltip-typography($config) {\n .mat-tooltip {\n font-family: mat-font-family($config);\n font-size: $mat-tooltip-font-size;\n padding-top: $mat-tooltip-vertical-padding;\n padding-bottom: $mat-tooltip-vertical-padding;\n }\n\n .mat-tooltip-handset {\n font-size: $mat-tooltip-handset-font-size;\n padding-top: $mat-tooltip-handset-vertical-padding;\n padding-bottom: $mat-tooltip-handset-vertical-padding;\n }\n}\n\n\n\n\n\n@mixin mat-snack-bar-theme($theme) {\n $is-dark-theme: map-get($theme, is-dark);\n $accent: map-get($theme, accent);\n\n .mat-snack-bar-container {\n // Use the primary text on the dark theme, even though the lighter one uses\n // a secondary, because the contrast on the light primary text is poor.\n color: if($is-dark-theme, $dark-primary-text, $light-secondary-text);\n background: if($is-dark-theme, map-get($mat-grey, 50), #323232);\n\n @include _mat-theme-elevation(6, $theme);\n }\n\n .mat-simple-snackbar-action {\n color: if($is-dark-theme, inherit, mat-color($accent, text));\n }\n}\n\n@mixin mat-snack-bar-typography($config) {\n .mat-simple-snackbar {\n font: {\n family: mat-font-family($config, body-1);\n size: mat-font-size($config, body-1);\n }\n }\n\n .mat-simple-snackbar-action {\n line-height: 1;\n font: {\n family: inherit;\n size: inherit;\n weight: mat-font-weight($config, button);\n }\n }\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Theme styles that only apply to the fill appearance of the form-field.\n\n@mixin mat-form-field-fill-theme($theme) {\n $foreground: map-get($theme, foreground);\n $is-dark-theme: map-get($theme, is-dark);\n\n $fill-background: mat-color($foreground, base, if($is-dark-theme, 0.1, 0.04));\n $fill-disabled-background: mat-color($foreground, base, if($is-dark-theme, 0.05, 0.02));\n $underline-color: mat-color($foreground, divider, if($is-dark-theme, 0.5, 0.42));\n $label-disabled-color: mat-color($foreground, disabled-text);\n\n .mat-form-field-appearance-fill {\n .mat-form-field-flex {\n background-color: $fill-background;\n }\n\n &.mat-form-field-disabled .mat-form-field-flex {\n background-color: $fill-disabled-background;\n }\n\n .mat-form-field-underline::before {\n background-color: $underline-color;\n }\n\n &.mat-form-field-disabled {\n .mat-form-field-label {\n color: $label-disabled-color;\n }\n\n .mat-form-field-underline::before {\n background-color: transparent;\n }\n }\n }\n}\n\n// Used to make instances of the _mat-form-field-label-floating mixin negligibly different,\n// and prevent Google's CSS Optimizer from collapsing the declarations. This is needed because some\n// of the selectors contain pseudo-classes not recognized in all browsers. If a browser encounters\n// an unknown pseudo-class it will discard the entire rule set.\n$mat-form-field-fill-dedupe: 0;\n\n// Applies a floating label above the form field control itself.\n@mixin _mat-form-field-fill-label-floating($font-scale, $infix-padding, $infix-margin-top) {\n transform: translateY(-$infix-margin-top - $infix-padding + $mat-form-field-fill-dedupe)\n scale($font-scale);\n width: 100% / $font-scale + $mat-form-field-fill-dedupe;\n\n $mat-form-field-fill-dedupe: $mat-form-field-fill-dedupe + 0.00001 !global;\n}\n\n@mixin mat-form-field-fill-typography($config) {\n // The unit-less line-height from the font config.\n $line-height: mat-line-height($config, input);\n // The amount to scale the font for the floating label and subscript.\n $subscript-font-scale: 0.75;\n // The padding on top of the infix.\n $infix-padding-top: 0.25em;\n // The padding below the infix.\n $infix-padding-bottom: 0.75em;\n // The margin applied to the form-field-infix to reserve space for the floating label.\n $infix-margin-top: 1em * $line-height * $subscript-font-scale;\n // The amount we offset the label from the input text in the fill appearance.\n $fill-appearance-label-offset: -0.5em;\n\n .mat-form-field-appearance-fill {\n .mat-form-field-infix {\n padding: $infix-padding-top 0 $infix-padding-bottom 0;\n }\n\n .mat-form-field-label {\n top: $infix-margin-top + $infix-padding-top;\n margin-top: $fill-appearance-label-offset;\n }\n\n &.mat-form-field-can-float {\n &.mat-form-field-should-float .mat-form-field-label,\n .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n @include _mat-form-field-fill-label-floating(\n $subscript-font-scale, $infix-padding-top + $fill-appearance-label-offset,\n $infix-margin-top);\n }\n\n // Server-side rendered matInput with a label attribute but label not shown\n // (used as a pure CSS stand-in for mat-form-field-should-float).\n .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper\n .mat-form-field-label {\n @include _mat-form-field-fill-label-floating(\n $subscript-font-scale, $infix-padding-top + $fill-appearance-label-offset,\n $infix-margin-top);\n }\n }\n }\n}\n\n\n\n\n\n\n\n// Theme styles that only apply to the legacy appearance of the form-field.\n\n@mixin mat-form-field-legacy-theme($theme) {\n $foreground: map-get($theme, foreground);\n $is-dark-theme: map-get($theme, is-dark);\n\n $label-color: mat-color($foreground, secondary-text);\n $underline-color: mat-color($foreground, divider, if($is-dark-theme, 0.7, 0.42));\n\n .mat-form-field-appearance-legacy {\n .mat-form-field-label {\n color: $label-color;\n }\n\n .mat-hint {\n color: $label-color;\n }\n\n .mat-form-field-underline {\n background-color: $underline-color;\n }\n\n &.mat-form-field-disabled .mat-form-field-underline {\n @include mat-control-disabled-underline($underline-color);\n }\n }\n}\n\n// Used to make instances of the _mat-form-field-label-floating mixin negligibly different,\n// and prevent Google's CSS Optimizer from collapsing the declarations. This is needed because some\n// of the selectors contain pseudo-classes not recognized in all browsers. If a browser encounters\n// an unknown pseudo-class it will discard the entire rule set.\n$mat-form-field-legacy-dedupe: 0;\n\n// Applies a floating label above the form field control itself.\n@mixin _mat-form-field-legacy-label-floating($font-scale, $infix-padding, $infix-margin-top) {\n // We use perspective to fix the text blurriness as described here:\n // http://www.useragentman.com/blog/2014/05/04/fixing-typography-inside-of-2-d-css-transforms/\n // This results in a small jitter after the label floats on Firefox, which the\n // translateZ fixes.\n transform: translateY(-$infix-margin-top - $infix-padding) scale($font-scale) perspective(100px)\n translateZ(0.001px + $mat-form-field-legacy-dedupe);\n // The tricks above used to smooth out the animation on chrome and firefox actually make things\n // worse on IE, so we don't include them in the IE version.\n -ms-transform: translateY(-$infix-margin-top - $infix-padding + $mat-form-field-legacy-dedupe)\n scale($font-scale);\n\n width: 100% / $font-scale + $mat-form-field-legacy-dedupe;\n\n $mat-form-field-legacy-dedupe: $mat-form-field-legacy-dedupe + 0.00001 !global;\n}\n\n// Same as mixin above, but omits the translateZ for printing purposes.\n@mixin _mat-form-field-legacy-label-floating-print($font-scale, $infix-padding, $infix-margin-top) {\n // This results in a small jitter after the label floats on Firefox, which the\n // translateZ fixes.\n transform: translateY(-$infix-margin-top - $infix-padding + $mat-form-field-legacy-dedupe)\n scale($font-scale);\n // The tricks above used to smooth out the animation on chrome and firefox actually make things\n // worse on IE, so we don't include them in the IE version.\n $mat-form-field-legacy-dedupe: $mat-form-field-legacy-dedupe + 0.00001 !global;\n}\n\n@mixin mat-form-field-legacy-typography($config) {\n // The unit-less line-height from the font config.\n $line-height: mat-line-height($config, input);\n // The amount to scale the font for the floating label and subscript.\n $subscript-font-scale: 0.75;\n // The amount of space between the top of the line and the top of the actual text\n // (as a fraction of the font-size).\n $line-spacing: ($line-height - 1) / 2;\n // The padding on the infix. Mocks show half of the text size, but seem to measure from the edge\n // of the text itself, not the edge of the line; therefore we subtract off the line spacing.\n $infix-padding: 0.5em - $line-spacing;\n // The margin applied to the form-field-infix to reserve space for the floating label.\n $infix-margin-top: 1em * $line-height * $subscript-font-scale;\n // The space between the bottom of the .mat-form-field-flex area and the subscript wrapper.\n // Mocks show half of the text size, but this margin is applied to an element with the subscript\n // text font size, so we need to divide by the scale factor to make it half of the original text\n // size. We again need to subtract off the line spacing since the mocks measure to the edge of the\n // text, not the edge of the line.\n $subscript-margin-top: 0.5em / $subscript-font-scale - ($line-spacing * 2);\n // The padding applied to the form-field-wrapper to reserve space for the subscript, since it's\n // absolutely positioned. This is a combination of the subscript's margin and line-height, but we\n // need to multiply by the subscript font scale factor since the wrapper has a larger font size.\n $wrapper-padding-bottom: ($subscript-margin-top + $line-height) * $subscript-font-scale;\n\n .mat-form-field-appearance-legacy {\n .mat-form-field-wrapper {\n padding-bottom: $wrapper-padding-bottom;\n }\n\n .mat-form-field-infix {\n padding: $infix-padding 0;\n }\n\n &.mat-form-field-can-float {\n &.mat-form-field-should-float .mat-form-field-label,\n .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n @include _mat-form-field-legacy-label-floating(\n $subscript-font-scale, $infix-padding, $infix-margin-top);\n }\n\n // @breaking-change 8.0.0 will rely on AutofillMonitor instead.\n .mat-form-field-autofill-control:-webkit-autofill + .mat-form-field-label-wrapper\n .mat-form-field-label {\n @include _mat-form-field-legacy-label-floating(\n $subscript-font-scale, $infix-padding, $infix-margin-top);\n }\n\n // Server-side rendered matInput with a label attribute but label not shown\n // (used as a pure CSS stand-in for mat-form-field-should-float).\n .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper\n .mat-form-field-label {\n @include _mat-form-field-legacy-label-floating(\n $subscript-font-scale, $infix-padding, $infix-margin-top);\n }\n }\n\n .mat-form-field-label {\n top: $infix-margin-top + $infix-padding;\n }\n\n .mat-form-field-underline {\n // We want the underline to start at the end of the content box, not the padding box,\n // so we move it up by the padding amount.\n bottom: $wrapper-padding-bottom;\n }\n\n .mat-form-field-subscript-wrapper {\n margin-top: $subscript-margin-top;\n\n // We want the subscript to start at the end of the content box, not the padding box,\n // so we move it up by the padding amount (adjusted for the smaller font size);\n top: calc(100% - #{$wrapper-padding-bottom / $subscript-font-scale});\n }\n }\n\n // translateZ causes the label to not appear while printing, so we override it to not\n // apply translateZ while printing\n @media print {\n .mat-form-field-appearance-legacy {\n &.mat-form-field-can-float {\n &.mat-form-field-should-float .mat-form-field-label,\n .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n @include _mat-form-field-legacy-label-floating-print(\n $subscript-font-scale, $infix-padding, $infix-margin-top);\n }\n\n // @breaking-change 8.0.0 will rely on AutofillMonitor instead.\n .mat-form-field-autofill-control:-webkit-autofill + .mat-form-field-label-wrapper\n .mat-form-field-label {\n @include _mat-form-field-legacy-label-floating-print(\n $subscript-font-scale, $infix-padding, $infix-margin-top);\n }\n\n // Server-side rendered matInput with a label attribute but label not shown\n // (used as a pure CSS stand-in for mat-form-field-should-float).\n .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper\n .mat-form-field-label {\n @include _mat-form-field-legacy-label-floating-print(\n $subscript-font-scale, $infix-padding, $infix-margin-top);\n }\n }\n }\n }\n}\n\n\n\n\n\n\n\n// Theme styles that only apply to the outline appearance of the form-field.\n\n@mixin mat-form-field-outline-theme($theme) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $foreground: map-get($theme, foreground);\n $is-dark-theme: map-get($theme, is-dark);\n\n $label-disabled-color: mat-color($foreground, disabled-text);\n $outline-color: mat-color($foreground, divider, if($is-dark-theme, 0.3, 0.12));\n $outline-color-hover: mat-color($foreground, divider, if($is-dark-theme, 1, 0.87));\n $outline-color-primary: mat-color($primary);\n $outline-color-accent: mat-color($accent);\n $outline-color-warn: mat-color($warn);\n $outline-color-disabled: mat-color($foreground, divider, if($is-dark-theme, 0.15, 0.06));\n\n .mat-form-field-appearance-outline {\n .mat-form-field-outline {\n color: $outline-color;\n }\n\n .mat-form-field-outline-thick {\n color: $outline-color-hover;\n }\n\n &.mat-focused {\n .mat-form-field-outline-thick {\n color: $outline-color-primary;\n }\n\n &.mat-accent .mat-form-field-outline-thick {\n color: $outline-color-accent;\n }\n\n &.mat-warn .mat-form-field-outline-thick {\n color: $outline-color-warn;\n }\n }\n\n // Class repeated so that rule is specific enough to override focused accent color case.\n &.mat-form-field-invalid.mat-form-field-invalid {\n .mat-form-field-outline-thick {\n color: $outline-color-warn;\n }\n }\n\n &.mat-form-field-disabled {\n .mat-form-field-label {\n color: $label-disabled-color;\n }\n\n .mat-form-field-outline {\n color: $outline-color-disabled;\n }\n }\n }\n}\n\n// Used to make instances of the _mat-form-field-label-floating mixin negligibly different,\n// and prevent Google's CSS Optimizer from collapsing the declarations. This is needed because some\n// of the selectors contain pseudo-classes not recognized in all browsers. If a browser encounters\n// an unknown pseudo-class it will discard the entire rule set.\n$mat-form-field-outline-dedupe: 0;\n\n// Applies a floating label above the form field control itself.\n@mixin _mat-form-field-outline-label-floating($font-scale, $infix-padding, $infix-margin-top) {\n transform: translateY(-$infix-margin-top - $infix-padding + $mat-form-field-outline-dedupe)\n scale($font-scale);\n width: 100% / $font-scale + $mat-form-field-outline-dedupe;\n\n $mat-form-field-outline-dedupe: $mat-form-field-outline-dedupe + 0.00001 !global;\n}\n\n@mixin mat-form-field-outline-typography($config) {\n // The unit-less line-height from the font config.\n $line-height: mat-line-height($config, input);\n // The amount to scale the font for the floating label and subscript.\n $subscript-font-scale: 0.75;\n // The padding above and below the infix.\n $infix-padding: 1em;\n // The margin applied to the form-field-infix to reserve space for the floating label.\n $infix-margin-top: 1em * $line-height * $subscript-font-scale;\n // The space between the bottom of the .mat-form-field-flex area and the subscript wrapper.\n // Mocks show half of the text size, but this margin is applied to an element with the subscript\n // text font size, so we need to divide by the scale factor to make it half of the original text\n // size.\n $subscript-margin-top: 0.5em / $subscript-font-scale;\n // The padding applied to the form-field-wrapper to reserve space for the subscript, since it's\n // absolutely positioned. This is a combination of the subscript's margin and line-height, but we\n // need to multiply by the subscript font scale factor since the wrapper has a larger font size.\n $wrapper-padding-bottom: ($subscript-margin-top + $line-height) * $subscript-font-scale;\n // The amount we offset the label from the input text in the outline appearance.\n $outline-appearance-label-offset: -0.25em;\n\n .mat-form-field-appearance-outline {\n .mat-form-field-infix {\n padding: $infix-padding 0 $infix-padding 0;\n }\n\n .mat-form-field-label {\n top: $infix-margin-top + $infix-padding;\n margin-top: $outline-appearance-label-offset;\n }\n\n &.mat-form-field-can-float {\n &.mat-form-field-should-float .mat-form-field-label,\n .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n @include _mat-form-field-outline-label-floating(\n $subscript-font-scale, $infix-padding + $outline-appearance-label-offset,\n $infix-margin-top);\n }\n\n // Server-side rendered matInput with a label attribute but label not shown\n // (used as a pure CSS stand-in for mat-form-field-should-float).\n .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper\n .mat-form-field-label {\n @include _mat-form-field-outline-label-floating(\n $subscript-font-scale, $infix-padding + $outline-appearance-label-offset,\n $infix-margin-top);\n }\n }\n }\n}\n\n\n\n\n\n\n\n// Theme styles that only apply to the standard appearance of the form-field.\n\n@mixin mat-form-field-standard-theme($theme) {\n $foreground: map-get($theme, foreground);\n $is-dark-theme: map-get($theme, is-dark);\n\n $underline-color: mat-color($foreground, divider, if($is-dark-theme, 0.7, 0.42));\n\n .mat-form-field-appearance-standard {\n .mat-form-field-underline {\n background-color: $underline-color;\n }\n\n &.mat-form-field-disabled .mat-form-field-underline {\n @include mat-control-disabled-underline($underline-color);\n }\n }\n}\n\n@mixin mat-form-field-standard-typography($config) {}\n\n\n// Theme styles that apply to all appearances of the form-field.\n@mixin mat-form-field-theme($theme) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n $is-dark-theme: map-get($theme, is-dark);\n\n // Label colors. Required is used for the `*` star shown in the label.\n $label-color: mat-color($foreground, secondary-text, if($is-dark-theme, 0.7, 0.6));\n $focused-label-color: mat-color($primary, text);\n $required-label-color: mat-color($accent, text);\n\n // Underline colors.\n $underline-color-base: mat-color($foreground, divider, if($is-dark-theme, 1, 0.87));\n $underline-color-accent: mat-color($accent, text);\n $underline-color-warn: mat-color($warn, text);\n $underline-focused-color: mat-color($primary, text);\n\n .mat-form-field-label {\n color: $label-color;\n }\n\n .mat-hint {\n color: $label-color;\n }\n\n .mat-form-field.mat-focused .mat-form-field-label {\n color: $focused-label-color;\n\n &.mat-accent {\n color: $underline-color-accent;\n }\n\n &.mat-warn {\n color: $underline-color-warn;\n }\n }\n\n .mat-focused .mat-form-field-required-marker {\n color: $required-label-color;\n }\n\n .mat-form-field-ripple {\n background-color: $underline-color-base;\n }\n\n .mat-form-field.mat-focused {\n .mat-form-field-ripple {\n background-color: $underline-focused-color;\n\n &.mat-accent {\n background-color: $underline-color-accent;\n }\n\n &.mat-warn {\n background-color: $underline-color-warn;\n }\n }\n }\n\n .mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid) {\n .mat-form-field-infix::after {\n color: $underline-focused-color;\n }\n\n &.mat-accent .mat-form-field-infix::after {\n color: $underline-color-accent;\n }\n\n &.mat-warn .mat-form-field-infix::after {\n color: $underline-color-warn;\n }\n }\n\n // Styling for the error state of the form field. Note that while the same can be\n // achieved with the ng-* classes, we use this approach in order to ensure that the same\n // logic is used to style the error state and to show the error messages.\n .mat-form-field.mat-form-field-invalid {\n .mat-form-field-label {\n color: $underline-color-warn;\n\n &.mat-accent,\n .mat-form-field-required-marker {\n color: $underline-color-warn;\n }\n }\n\n .mat-form-field-ripple,\n .mat-form-field-ripple.mat-accent {\n background-color: $underline-color-warn;\n }\n }\n\n .mat-error {\n color: $underline-color-warn;\n }\n\n @include mat-form-field-legacy-theme($theme);\n @include mat-form-field-standard-theme($theme);\n @include mat-form-field-fill-theme($theme);\n @include mat-form-field-outline-theme($theme);\n}\n\n// Used to make instances of the _mat-form-field-label-floating mixin negligibly different,\n// and prevent Google's CSS Optimizer from collapsing the declarations. This is needed because some\n// of the selectors contain pseudo-classes not recognized in all browsers. If a browser encounters\n// an unknown pseudo-class it will discard the entire rule set.\n$mat-form-field-dedupe: 0;\n\n// Applies a floating label above the form field control itself.\n@mixin _mat-form-field-label-floating($font-scale, $infix-padding, $infix-margin-top) {\n transform: translateY(-$infix-margin-top - $infix-padding + $mat-form-field-dedupe)\n scale($font-scale);\n width: 100% / $font-scale + $mat-form-field-dedupe;\n\n $mat-form-field-dedupe: $mat-form-field-dedupe + 0.00001 !global;\n}\n\n@mixin mat-form-field-typography($config) {\n // The unit-less line-height from the font config.\n $line-height: mat-line-height($config, input);\n\n // The amount to scale the font for the floating label and subscript.\n $subscript-font-scale: 0.75;\n // The amount to scale the font for the prefix and suffix icons.\n $prefix-suffix-icon-font-scale: 1.5;\n\n // The padding on the infix. Mocks show half of the text size.\n $infix-padding: 0.5em;\n // The margin applied to the form-field-infix to reserve space for the floating label.\n $infix-margin-top: 1em * $line-height * $subscript-font-scale;\n // Font size to use for the label and subscript text.\n $subscript-font-size: $subscript-font-scale * 100%;\n // Font size to use for the for the prefix and suffix icons.\n $prefix-suffix-icon-font-size: $prefix-suffix-icon-font-scale * 100%;\n // The space between the bottom of the .mat-form-field-flex area and the subscript wrapper.\n // Mocks show half of the text size, but this margin is applied to an element with the subscript\n // text font size, so we need to divide by the scale factor to make it half of the original text\n // size.\n $subscript-margin-top: 0.5em / $subscript-font-scale;\n // The padding applied to the form-field-wrapper to reserve space for the subscript, since it's\n // absolutely positioned. This is a combination of the subscript's margin and line-height, but we\n // need to multiply by the subscript font scale factor since the wrapper has a larger font size.\n $wrapper-padding-bottom: ($subscript-margin-top + $line-height) * $subscript-font-scale;\n\n .mat-form-field {\n @include mat-typography-level-to-styles($config, input);\n }\n\n .mat-form-field-wrapper {\n padding-bottom: $wrapper-padding-bottom;\n }\n\n .mat-form-field-prefix,\n .mat-form-field-suffix {\n // Allow icons in a prefix or suffix to adapt to the correct size.\n .mat-icon {\n font-size: $prefix-suffix-icon-font-size;\n line-height: $line-height;\n }\n\n // Allow icon buttons in a prefix or suffix to adapt to the correct size.\n .mat-icon-button {\n height: $prefix-suffix-icon-font-scale * 1em;\n width: $prefix-suffix-icon-font-scale * 1em;\n\n .mat-icon {\n height: $line-height * 1em;\n line-height: $line-height;\n }\n }\n }\n\n .mat-form-field-infix {\n padding: $infix-padding 0;\n // Throws off the baseline if we do it as a real margin, so we do it as a border instead.\n border-top: $infix-margin-top solid transparent;\n }\n\n .mat-form-field-can-float {\n &.mat-form-field-should-float .mat-form-field-label,\n .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n @include _mat-form-field-label-floating(\n $subscript-font-scale, $infix-padding, $infix-margin-top);\n }\n\n // Server-side rendered matInput with a label attribute but label not shown\n // (used as a pure CSS stand-in for mat-form-field-should-float).\n .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper\n .mat-form-field-label {\n @include _mat-form-field-label-floating(\n $subscript-font-scale, $infix-padding, $infix-margin-top);\n }\n }\n\n .mat-form-field-label-wrapper {\n top: -$infix-margin-top;\n padding-top: $infix-margin-top;\n }\n\n .mat-form-field-label {\n top: $infix-margin-top + $infix-padding;\n }\n\n .mat-form-field-underline {\n // We want the underline to start at the end of the content box, not the padding box,\n // so we move it up by the padding amount.\n bottom: $wrapper-padding-bottom;\n }\n\n .mat-form-field-subscript-wrapper {\n font-size: $subscript-font-size;\n margin-top: $subscript-margin-top;\n\n // We want the subscript to start at the end of the content box, not the padding box,\n // so we move it up by the padding amount (adjusted for the smaller font size);\n top: calc(100% - #{$wrapper-padding-bottom / $subscript-font-scale});\n }\n\n @include mat-form-field-legacy-typography($config);\n @include mat-form-field-standard-typography($config);\n @include mat-form-field-fill-typography($config);\n @include mat-form-field-outline-typography($config);\n}\n\n\n\n\n\n@mixin mat-tree-theme($theme) {\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n .mat-tree {\n background: mat-color($background, 'card');\n }\n\n .mat-tree-node,\n .mat-nested-tree-node {\n color: mat-color($foreground, text);\n }\n}\n\n@mixin mat-tree-typography($config) {\n .mat-tree {\n font-family: mat-font-family($config);\n }\n\n .mat-tree-node,\n .mat-nested-tree-node {\n font-weight: mat-font-weight($config, body-1);\n font-size: mat-font-size($config, body-1);\n }\n}\n\n\n\n// Includes all of the typographic styles.\n@mixin angular-material-typography($config: null) {\n @if $config == null {\n $config: mat-typography-config();\n }\n\n @include mat-badge-typography($config);\n @include mat-base-typography($config);\n @include mat-autocomplete-typography($config);\n @include mat-bottom-sheet-typography($config);\n @include mat-button-typography($config);\n @include mat-button-toggle-typography($config);\n @include mat-card-typography($config);\n @include mat-checkbox-typography($config);\n @include mat-chips-typography($config);\n @include mat-table-typography($config);\n @include mat-datepicker-typography($config);\n @include mat-dialog-typography($config);\n @include mat-expansion-panel-typography($config);\n @include mat-form-field-typography($config);\n @include mat-grid-list-typography($config);\n @include mat-icon-typography($config);\n @include mat-input-typography($config);\n @include mat-menu-typography($config);\n @include mat-paginator-typography($config);\n @include mat-progress-bar-typography($config);\n @include mat-progress-spinner-typography($config);\n @include mat-radio-typography($config);\n @include mat-select-typography($config);\n @include mat-sidenav-typography($config);\n @include mat-slide-toggle-typography($config);\n @include mat-slider-typography($config);\n @include mat-stepper-typography($config);\n @include mat-sort-typography($config);\n @include mat-tabs-typography($config);\n @include mat-toolbar-typography($config);\n @include mat-tooltip-typography($config);\n @include mat-list-typography($config);\n @include mat-option-typography($config);\n @include mat-optgroup-typography($config);\n @include mat-snack-bar-typography($config);\n @include mat-tree-typography($config);\n}\n\n\n// Mixin that renders all of the core styles that are not theme-dependent.\n@mixin mat-core($typography-config: null) {\n @include angular-material-typography($typography-config);\n @include mat-ripple();\n @include cdk-a11y();\n @include cdk-overlay();\n @include cdk-text-field();\n}\n\n// Mixin that renders all of the core styles that depend on the theme.\n@mixin mat-core-theme($theme) {\n @include mat-ripple-theme($theme);\n @include mat-option-theme($theme);\n @include mat-optgroup-theme($theme);\n @include mat-pseudo-checkbox-theme($theme);\n\n // Provides external CSS classes for each elevation value. Each CSS class is formatted as\n // `mat-elevation-z$zValue` where `$zValue` corresponds to the z-space to which the element is\n // elevated.\n @for $zValue from 0 through 24 {\n .#{$_mat-elevation-prefix}#{$zValue} {\n @include _mat-theme-elevation($zValue, $theme);\n }\n }\n\n // Wrapper element that provides the theme background when the user's content isn't\n // inside of a `mat-sidenav-container`. Note that we need to exclude the ampersand\n // selector in case the mixin is included at the top level.\n .mat-app-background#{if(&, ', &.mat-app-background', '')} {\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n background-color: mat-color($background, background);\n color: mat-color($foreground, text);\n }\n\n // Marker that is used to determine whether the user has added a theme to their page.\n @at-root {\n .mat-theme-loaded-marker {\n display: none;\n }\n }\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n@mixin mat-divider-theme($theme) {\n $foreground: map-get($theme, foreground);\n\n .mat-divider {\n border-top-color: mat-color($foreground, divider);\n }\n\n .mat-divider-vertical {\n border-right-color: mat-color($foreground, divider);\n }\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Create a theme.\n@mixin angular-material-theme($theme) {\n @include mat-core-theme($theme);\n @include mat-autocomplete-theme($theme);\n @include mat-badge-theme($theme);\n @include mat-bottom-sheet-theme($theme);\n @include mat-button-theme($theme);\n @include mat-button-toggle-theme($theme);\n @include mat-card-theme($theme);\n @include mat-checkbox-theme($theme);\n @include mat-chips-theme($theme);\n @include mat-table-theme($theme);\n @include mat-datepicker-theme($theme);\n @include mat-dialog-theme($theme);\n @include mat-divider-theme($theme);\n @include mat-expansion-panel-theme($theme);\n @include mat-form-field-theme($theme);\n @include mat-grid-list-theme($theme);\n @include mat-icon-theme($theme);\n @include mat-input-theme($theme);\n @include mat-list-theme($theme);\n @include mat-menu-theme($theme);\n @include mat-paginator-theme($theme);\n @include mat-progress-bar-theme($theme);\n @include mat-progress-spinner-theme($theme);\n @include mat-radio-theme($theme);\n @include mat-select-theme($theme);\n @include mat-sidenav-theme($theme);\n @include mat-slide-toggle-theme($theme);\n @include mat-slider-theme($theme);\n @include mat-stepper-theme($theme);\n @include mat-sort-theme($theme);\n @include mat-tabs-theme($theme);\n @include mat-toolbar-theme($theme);\n @include mat-tooltip-theme($theme);\n @include mat-tree-theme($theme);\n @include mat-snack-bar-theme($theme);\n}\n","/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n\n$color-brand-electric-blue: #2251ff;\n$color-brand-deep-blue: #051c2c;\n$color-brand-cyan: #00a9f4;\n\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n\n$font-dark: #000;\n$font-light: #fff;\n\n$success: #43a047;\n$success-light: lighten($success, 10);\n$success-dark: darken($success, 10);\n$green1: #219653;\n\n$pending: #ffb300;\n$pending-light: lighten($pending, 10);\n$pending-dark: darken($pending, 10);\n\n$error: #e53935;\n$error-light: lighten($error, 10);\n$error-dark: darken($error, 10);\n\n$color-primary: #1937ea;\n$color-primary-light: lighten($color-primary, 10);\n$color-primary-dark: darken($color-primary, 10);\n\n$color-secondary: #4285F4;\n$color-secondary-light: lighten($color-secondary, 10);\n$color-secondary-dark: darken($color-secondary, 10);\n\n$background: #f0f0f0;\n$footer-back: #263238;\n$header-back: linear-gradient(to right, #051C2C, #051C2C 40%, #0B2453 60%, #1F40E6 100%);\n\n$color-ternary: #051c2c;\n\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n\n$font-stack: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n\n$heading-font: \"LarishMcKinsey\", 'Georgia', serif;\n$font: $font-stack;\n\n$font-family-primary: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n$font-family-secondary: \"Bower\", Georgia, \"Times New Roman\" serif;\n\n$base-size: 16px;\n$tablet-size: 16px;\n$mobile-size: 16px;\n\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n\n$break-mobile: 450px;\n$break-tablet: 800px;\n$break-laptop: 1024px;\n\n$break-landscape-mobile: 800px;\n$break-landscape-tablet: 1048px;\n$break-landscape-laptop: 1280px;\n","@import './variables';\n\n@mixin hide-text-overflow {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n@mixin box-shadow($color: #000, $depth: 1) {\n box-shadow: 0 1px 3px 1px * ($depth - 1) rgba(#000, .2),\n 0 1px 1px 0 rgba(#000, .14),\n 0 2px 1px -1px rgba(#000, .12);\n}\n\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n\n@mixin respond-to($media) {\n @if $media == mobile {\n @media only screen and (orientation: portrait) and (max-width: $break-mobile) {\n @content;\n }\n @media only screen and (orientation: landscape) and (max-width: $break-landscape-mobile) {\n @content;\n }\n } @else if $media == mobile-landscape {\n @media only screen and (orientation: landscape) and (max-width: $break-landscape-mobile) {\n @content;\n }\n } @else if $media == mobile-portrait {\n @media only screen and (orientation: portrait) and (max-width: $break-mobile) {\n @content;\n }\n } @else if $media == not-mobile {\n @media only screen and (orientation: portrait) and (min-width: $break-mobile + 1) {\n @content;\n }\n @media only screen and (orientation: landscape) and (min-width: $break-landscape-mobile + 1) {\n @content;\n }\n } @else if $media == laptop {\n @media only screen and (orientation: portrait) and (min-width: $break-tablet + 1) and (max-width: $break-laptop) {\n @content;\n }\n @media only screen and (orientation: landscape) and (min-width: $break-landscape-tablet + 1) and (max-width: $break-landscape-laptop) {\n @content;\n }\n } @else if $media == laptop-landscape {\n @media only screen and (orientation: landscape) and (min-width: $break-landscape-tablet + 1) and (max-width: $break-landscape-laptop) {\n @content;\n }\n } @else if $media == laptop-portrait {\n @media only screen and (orientation: portrait) and (min-width: $break-tablet + 1) and (max-width: $break-laptop) {\n @content;\n }\n } @else if $media == lat {\n @media only screen and (orientation: portrait) and (min-width: $break-mobile + 1) and (max-width: $break-tablet) {\n @content;\n }\n @media only screen and (orientation: landscape) and (min-width: $break-landscape-mobile + 1) and (max-width: $break-landscape-tablet) {\n @content;\n }\n } @else if $media == tablet {\n @media only screen and (orientation: portrait) and (min-width: $break-mobile + 1) and (max-width: $break-tablet) {\n @content;\n }\n @media only screen and (orientation: landscape) and (min-width: $break-landscape-mobile + 1) and (max-width: $break-landscape-tablet) {\n @content;\n }\n } @else if $media == tablet-landscape {\n @media only screen and (orientation: landscape) and (min-width: $break-landscape-mobile + 1) and (max-width: $break-landscape-tablet) {\n @content;\n }\n } @else if $media == tablet-portrait {\n @media only screen and (orientation: portrait) and (min-width: $break-mobile + 1) and (max-width: $break-tablet) {\n @content;\n }\n } @else if ($media == tablet-mobile or $media == not-desktop) {\n @media only screen and (orientation: portrait) and (max-width: $break-tablet) {\n @content;\n }\n @media only screen and (orientation: landscape) and (max-width: $break-landscape-tablet) {\n @content;\n }\n }@else if $media == tablet-landscape {\n @media only screen and (orientation: landscape) and (min-width: $break-landscape-mobile + 1) and (max-width: $break-landscape-tablet) {\n @content;\n }\n } @else if $media == tablet-portrait {\n @media only screen and (orientation: portrait) and (min-width: $break-mobile + 1) and (max-width: $break-tablet) {\n @content;\n }\n } @else if ($media == tablet-mobile or $media == not-desktop) {\n @media only screen and (orientation: portrait) and (max-width: $break-tablet) {\n @content;\n }\n @media only screen and (orientation: landscape) and (max-width: $break-landscape-tablet) {\n @content;\n }\n } @else if $media == desktop {\n @media only screen and (orientation: portrait) and (min-width: $break-tablet) {\n @content;\n }\n @media only screen and (orientation: landscape) and (min-width: $break-landscape-tablet) {\n @content;\n }\n } @else if $media == desktop-landscape {\n @media only screen and (orientation: landscape) and (min-width: $break-landscape-tablet) {\n @content;\n }\n } @else if $media == desktop-portrait {\n @media only screen and (orientation: portrait) and (min-width: $break-tablet) {\n @content;\n }\n } @else if $media == landscape {\n @media only screen and (orientation: landscape) {\n @content;\n }\n } @else if $media == portrait {\n @media only screen and (orientation: portrait) {\n @content;\n }\n }\n}\n","$primary: #1F40E6;\n$form-label: #051C2C;\n$secondary-label: #767676;\n$border: #B3B3B3;\n$background-checkbox-disabled: #D0D0D0;\n$chip-color: #333333;\n$placeholder-color: #7F7F7F;\n$background-color: #F0F0F0;\n$page-background-color: #F8F9FA;\n$selected-option: #E6E6E6;\n$color-brand-yellow: #ffd048;\n$light-yellow: #fff3ce;\n$coachmark-text: #6f4d00;\n$error-color: #E12E40;\n$no-filters-color: #BCBCBC;\n$results-list-background-color: #F4F4F4;\n$primary-highlight: #2251FF;\n$scrollbar-color: #757575;\n\n$available-color: #5D9D52;\n$available-by-request-color: #F5B53F;\n$in-use-color: #D4483E;\n$not-bookable-color: #CCCCCC;\n\n$modal-body-heading: #4D4D4D;\n$alert-overlay-bg: rgba(5, 28, 44, 0.85);\n\n$success: #43a047;\n$success-light: lighten($success, 10);\n$success-dark: darken($success, 10);\n\n$pending: #ffb300;\n$pending-light: lighten($pending, 10);\n$pending-dark: darken($pending, 10);\n\n$error: #e53935;\n$error-light: lighten($error, 10);\n$error-dark: darken($error, 10);\n\n$coachmark-bg: #EBEBF6;\n$coachmark-dark-text: #1B1B19;\n$error-text: #fff;\n\n/**\n * Spacing\n */\n\n// 4px\n$spacing-smallest: 0.25rem;\n\n// 8px\n$spacing-xxsmall: 0.5rem;\n\n// 12px\n$spacing-xsmall: 0.75rem;\n\n// 16px\n$spacing-small: 1rem;\n\n// 20px\n$spacing-small-medium: 1.25rem;\n\n// 24px\n$spacing-medium: 1.5rem;\n\n// 28px\n$spacing-medium-large: 1.75rem;\n\n// 32px\n$spacing-large: 2rem;\n\n// 48px\n$spacing-xlarge: 3rem;\n\n// 64px\n$spacing-xxlarge: 4rem;\n\n// 96px\n$spacing-largest: 6rem;\n\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n\n$device-mobile-size: 450px;\n$device-tablet-size: 800px;\n$device-laptop-size: 1024px;\n\n$device-landscape-mobile-size: 800px;\n$device-landscape-tablet-size: 1048px;\n$device-landscape-laptop-size: 1280px;\n\n\n:export {\n primary: $primary;\n secondaryLabel: $secondary-label;\n}\n\n/*===================*\\\n|| Icon sizes ||\n\\*===================*/\n$icon-small: 16px;\n$icon-medium: 24px;\n$icon-large: 32px;\n$icon-xlarge: 48px;\n","@import \"vars\";\n\n@mixin query-select($orientation, $check-orientation, $size, $qualifier) {\n @if $orientation == none or $orientation == $check-orientation {\n @if ($qualifier == min-width) {\n @media only screen and (orientation: $check-orientation) and (min-width: $size) {\n @content;\n }\n } @else if ($qualifier == max-width) {\n @media only screen and (orientation: $check-orientation) and (max-width: $size) {\n @content;\n }\n }\n }\n}\n\n@mixin bounded-select($orientation, $check-orientation, $min, $max) {\n @if $orientation == none or $orientation == $check-orientation {\n @media only screen and (orientation: $check-orientation) and (min-width: $min) and (max-width: $max) {\n @content;\n }\n }\n}\n\n// this is a copy of respond-to. we don't want to preserve that method since the breakpoints may diverge from the old UI.\n@mixin is-screen-size($media: all, $orientation: none) {\n @if $media == mobile {\n @include query-select($orientation, portrait, $device-mobile-size, max-width) {\n @content;\n }\n @include query-select($orientation, landscape, $device-landscape-mobile-size, max-width) {\n @content;\n }\n } @else if $media == not-mobile {\n @include query-select($orientation, portrait, $device-mobile-size + 1, min-width) {\n @content;\n }\n @include query-select($orientation, landscape, $device-landscape-mobile-size + 1, min-width) {\n @content;\n }\n } @else if $media == laptop {\n @include bounded-select($orientation, portrait, $device-tablet-size + 1, $device-laptop-size) {\n @content;\n }\n @include bounded-select($orientation, landscape, $device-landscape-tablet-size + 1, $device-landscape-laptop-size) {\n @content;\n }\n } @else if $media == tablet {\n @include bounded-select($orientation, portrait, $device-mobile-size + 1, $device-tablet-size) {\n @content;\n }\n @include bounded-select($orientation, landscape, $device-landscape-mobile-size + 1, $device-landscape-tablet-size) {\n @content;\n }\n } @else if $media == desktop {\n @include query-select($orientation, portrait, $device-tablet-size, min-width) {\n @content;\n }\n @include query-select($orientation, landscape, $device-landscape-tablet-size, min-width) {\n @content;\n }\n } @else if $orientation == landscape {\n @media only screen and (orientation: landscape) {\n @content;\n }\n } @else if $orientation == portrait {\n @media only screen and (orientation: portrait) {\n @content;\n }\n }\n}\n\n\n@mixin hide-text-overflow {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n\n@mixin page-padding {\n padding-left: $spacing-small;\n padding-right: $spacing-small;\n}\n\n// Font Mixins\n$font-mckinsey-sans: \"McKinsey Sans\";\n$font-theinhardt: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n$font-bower: \"Bower\";\n\n@mixin bower-bold {\n font-family: $font-bower;\n font-style: normal;\n font-weight: bold;\n text-align: center;\n}\n\n@mixin mckinsey-sans {\n font-family: $font-mckinsey-sans;\n font-style: normal;\n text-align: center;\n}\n\n@mixin display-1 {\n @include bower-bold;\n font-size: 3.75rem; // 60px\n line-height: 1.2; // 72px\n\n @include is-screen-size(not-mobile) {\n font-size: 4rem; // 64px\n line-height: 1.187; // 76px\n }\n}\n\n@mixin display-2 {\n @include bower-bold;\n font-size: 3.5rem; // 56px\n line-height: 1.214; // 68px\n\n @include is-screen-size(not-mobile) {\n font-size: 3.75rem; // 60px\n line-height: 1.2; // 72px\n }\n}\n\n@mixin display-3 {\n @include bower-bold;\n font-size: 3.25rem; // 52px\n line-height: 1.153; // 60px\n\n @include is-screen-size(not-mobile) {\n font-size: 3.5rem; // 56px\n line-height: 1.214; // 68px\n }\n}\n\n@mixin display-4 {\n @include bower-bold;\n font-size: 3rem; // 48px\n line-height: 1.166; // 56px\n\n @include is-screen-size(not-mobile) {\n font-size: 3.25rem; // 52px\n line-height: 1.153; // 64px\n }\n}\n\n@mixin display-5 {\n @include bower-bold;\n font-size: 2rem; // 30px\n line-height: 1.833; // 34px\n\n @include is-screen-size(not-mobile) {\n font-size: 2.25rem; // 36px\n line-height: 1.642; // 40px\n }\n}\n\n@mixin display-7 {\n @include bower-bold;\n font-size: 1.5rem; // 24px\n line-height: 1.333; // 28px\n\n @include is-screen-size(not-mobile) {\n font-size: 1.75rem; // 28px\n line-height: 1.142; // 32px\n }\n}\n\n@mixin heading-1 {\n @include mckinsey-sans;\n font-size: 2.5rem; // 40px\n line-height: 1.2; // 48px\n\n @include is-screen-size(not-mobile) {\n font-size: 2.75rem; // 44px\n line-height: 1.181; // 52px\n }\n}\n\n@mixin heading-2 {\n @include mckinsey-sans;\n font-size: 2.25rem; // 36px\n line-height: 1.111; // 44px\n\n @include is-screen-size(not-mobile) {\n font-size: 2.5rem; // 40px\n line-height: 1.181; // 48px\n }\n}\n\n@mixin heading-3 {\n @include mckinsey-sans;\n font-size: 2rem; // 32px\n line-height: 1.125; // 36px\n\n @include is-screen-size(not-mobile) {\n font-size: 2.25rem; // 36px\n line-height: 1.222; // 44px\n }\n}\n\n@mixin heading-4 {\n @include mckinsey-sans;\n font-size: 1.75rem; // 28px\n line-height: 1.142; // 32px\n\n @include is-screen-size(not-mobile) {\n font-size: 2rem; // 32px\n line-height: 1.125; // 36px\n }\n}\n\n@mixin heading-5 {\n @include mckinsey-sans;\n font-size: 1.5rem; // 24px\n line-height: 1.333; // 288px\n\n @include is-screen-size(not-mobile) {\n font-size: 1.75rem; // 28px\n line-height: 1.142; // 32px\n }\n}\n\n@mixin heading-6 {\n @include mckinsey-sans;\n font-size: 1.25rem; // 20px\n line-height: 1.4; // 24px\n\n @include is-screen-size(not-mobile) {\n font-size: 1.5rem; // 24px\n line-height: 1.155; // 28px\n }\n}\n\n@mixin body-default {\n @include mckinsey-sans;\n font-size: 1rem; // 16px\n line-height: 1.4; // 24px\n\n @include is-screen-size(not-mobile) {\n font-size: 1.25rem; // 20px\n line-height: 1.6; // 26px\n }\n}\n\n/// Doesnt exist in MDS.\n@mixin body-tiny {\n @include mckinsey-sans;\n font-size: 0.75rem; // 12px\n line-height: 1.4; // 20px\n\n @include is-screen-size(not-mobile) {\n font-size: 1rem; // 16px\n line-height: 1.6; // 24px\n }\n}\n\n@mixin form-label {\n font-style: normal;\n text-align: center;\n font-family: $font-theinhardt;\n font-size: 1rem;\n line-height: 1.5rem;\n}\n\n@mixin placeholder-label {\n @include form-label;\n text-align: left;\n color: $placeholder-color;\n font-weight: 300;\n}\n\n@mixin chip-label {\n @include mckinsey-sans;\n font-size: 0.75rem;\n line-height: 1.5rem;\n}\n\n@mixin checkbox-label {\n @include form-label;\n font-weight: 300;\n color: black;\n}\n\n// borders\n\n@mixin mck-checkbox-border {\n border: 1px solid $border;\n border-radius: 0;\n}\n\n@mixin mck-button-border {\n border: 2px solid $border;\n border-radius: 0;\n}\n\n@mixin mck-thin-button-border {\n border: 1px solid $background-checkbox-disabled;\n border-radius: 0;\n}\n\n@mixin mck-content-border {\n border: 1px solid $border;\n}\n\n@mixin mck-content-border-light {\n @include mck-content-border;\n border-color: $selected-option;\n}\n\n@mixin mck-card-content {\n @include mck-content-border;\n background-color: $results-list-background-color;\n}\n\n@mixin mck-card-content-light {\n @include mck-content-border-light;\n background-color: $results-list-background-color;\n}\n\n\n// functions\n\n/**\n * Makes text have maximum lines with ellipsis. Works on most modern browsers except\n * of Firefox..\n */\n@mixin max-lines($count) {\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: $count;\n -webkit-box-orient: vertical;\n}\n\n// images\n@mixin mck-icon($width, $asset, $height: $width, $assetPath: \"libs/ui/src/lib/icons\",) {\n width: $width;\n height: $height;\n background-image: url(\"#{$assetPath}/#{$asset}\");\n background-size: contain;\n}\n\n\n@mixin mck-small-icon($mobile-asset, $desktop-asset: $mobile-asset) {\n @include mck-icon(16px, $asset: $mobile-asset);\n\n @include is-screen-size(not-mobile) {\n @include mck-icon(24px, $asset: $desktop-asset);\n }\n}\n\n// skeleton\n@mixin skeleton-bg {\n background-color: $selected-option;\n}\n\n@mixin placeholder-image-size {\n width: 81px;\n height: 82px;\n\n @include is-screen-size(desktop) {\n width: 219px;\n height: 119px;\n }\n}\n\n@mixin placeholder-status-size {\n width: 117px;\n height: 78px;\n\n @include is-screen-size(desktop) {\n width: 117px;\n height: 78px;\n }\n}\n","@import \"mixins\";\n@import \"vars\";\n@import \"~@angular/material/theming\";\n\n.mck {\n &-inherit {\n &-font {\n // patches global font styling done by legacy ui\n font: inherit;\n }\n }\n\n &-content {\n &-expand {\n width: 100%;\n height: 100%;\n\n &-width {\n width: 100%;\n }\n\n &-height {\n height: 100%;\n }\n }\n\n &-with-footer-height {\n height: calc(100vh - 58px);\n }\n\n &-full-height {\n height: 100vh;\n }\n\n &-page {\n @extend .mck-content-expand;\n background: $page-background-color;\n\n &-container {\n @extend .mck-content-full-height;\n }\n }\n\n &-body {\n width: 100%;\n display: block;\n @include is-screen-size(not-mobile) {\n max-width: 1024px;\n }\n }\n\n &-group {\n @include page-padding;\n width: 100%;\n\n @include is-screen-size(not-mobile) {\n max-width: 759px;\n }\n }\n }\n\n &-shadow {\n @include mat-elevation(1);\n }\n\n &-flex-1 {\n flex: 1;\n }\n\n &-row {\n display: flex;\n flex-direction: row;\n\n &.mck-center {\n &-justify {\n justify-content: center;\n }\n\n &-align {\n align-items: center;\n }\n\n @extend .mck-center-justify;\n @extend .mck-center-align;\n }\n\n &.mck-stretch {\n align-items: stretch;\n }\n\n &-flow {\n @extend .mck-row;\n flex-wrap: wrap;\n }\n\n &.mck-scroll {\n overflow-x: scroll;\n }\n }\n\n &-column {\n display: flex;\n flex-direction: column;\n\n &.mck-center {\n justify-content: center;\n align-items: center;\n }\n\n &.mck-space-between {\n justify-content: space-between;\n }\n\n &.mck-stretch {\n align-items: stretch;\n }\n\n &.mck-scroll {\n overflow-y: scroll;\n overflow-y: overlay;\n }\n\n &.mck-flex-end {\n justify-content: flex-end;\n }\n }\n\n &-overflow {\n overflow: auto;\n }\n\n &-bordered, &-input {\n border-radius: 0;\n border: 1px solid $border;\n\n &:hover {\n border-color: #464646;\n }\n\n &:focus {\n border-color: $primary;\n }\n\n &[disabled=\"true\"] {\n pointer-events: none;\n border-color: #f0f0f0;\n color: #ccc;\n }\n }\n\n &-date-display {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n height: 43px;\n padding: $spacing-small $spacing-xxsmall;\n transition: border 200ms, box-shadow 200ms;\n }\n\n &-form-input {\n\n .mat-form-field-wrapper {\n padding-bottom: $spacing-xxsmall;\n }\n\n mat-form-field {\n min-width: auto !important;\n\n .mat-form-field-infix {\n width: 100%;\n padding-top: 0.7rem !important;\n padding-bottom: $spacing-xxsmall !important;\n }\n\n .mat-form-field-outline {\n min-height: 2.7rem;\n color: rgba(0, 0, 0, 0.27);\n }\n\n &.mck-center-suffix {\n .mat-form-field-infix {\n @extend .mck-row;\n @extend .mck-center;\n }\n }\n\n &.mck-select-dropdown-button {\n .mat-form-field-infix {\n margin-top: 2px;\n }\n\n .mat-form-field-flex {\n @include is-screen-size(mobile) {\n padding-left: $spacing-xxsmall;\n padding-right: $spacing-xxsmall;\n }\n }\n\n @include is-screen-size(mobile) {\n .mat-form-field-outline, .mat-form-field-infix {\n height: 2rem;\n min-height: 2rem;\n }\n\n .mat-form-field-infix {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n }\n }\n }\n\n mat-form-field.mat-s {\n @include form-label;\n text-align: left;\n }\n\n mat-select {\n margin-top: 0.2rem;\n\n .mat-select-arrow {\n visibility: hidden;\n }\n\n & .mat-select-value > .mat-select-value-text > span {\n @include form-label;\n font-weight: 400;\n // color: #333333 !important; //R--- blocks disabled state color\n font-family: \"McKinsey Sans\";\n }\n }\n\n .mat-form-field-outline {\n & > .mat-form-field-outline-start.mat-form-field-outline-start,\n & > .mat-form-field-outline-gap.mat-form-field-outline-gap,\n & > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: $border;\n border-width: 1px;\n border-radius: 0;\n }\n }\n\n .available {\n .mat-form-field-outline {\n & > .mat-form-field-outline-start.mat-form-field-outline-start,\n & > .mat-form-field-outline-gap.mat-form-field-outline-gap,\n & > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: #3aa537;\n }\n }\n }\n\n .booked {\n .mat-form-field-outline {\n & > .mat-form-field-outline-start.mat-form-field-outline-start,\n & > .mat-form-field-outline-gap.mat-form-field-outline-gap,\n & > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: #e12e41;\n }\n }\n }\n\n .mat-form-field-outline-thick {\n & > .mat-form-field-outline-start.mat-form-field-outline-start,\n & > .mat-form-field-outline-gap.mat-form-field-outline-gap,\n & > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: $primary;\n border-width: 1px;\n border-radius: 0;\n }\n }\n\n > mat-form-field.mck-error {\n .mat-form-field-wrapper {\n // less jumping for error message.\n padding-bottom: 0;\n }\n\n .mat-form-field-outline {\n & > .mat-form-field-outline-start.mat-form-field-outline-start,\n & > .mat-form-field-outline-gap.mat-form-field-outline-gap,\n & > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: $error-color;\n }\n }\n }\n\n mck-close-icon.mat-chip-remove.mat-chip-remove {\n opacity: 1;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n }\n\n mat-label {\n @include form-label;\n font-weight: 400;\n text-align: left;\n margin-bottom: $spacing-xxsmall;\n }\n\n mat-radio-button {\n margin-right: $spacing-small;\n }\n\n .mat-radio-label-content {\n @include form-label;\n text-align: left;\n }\n\n .mat-radio {\n &-outer-circle {\n border-color: $primary !important;\n border-width: 1px !important;\n }\n\n &-inner-circle {\n background-color: $primary !important;\n }\n }\n\n mat-radio-group {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n\n & > mat-radio-button:last-child {\n margin-right: 0;\n }\n }\n\n &-container {\n > .mck-form-input, > mck-select {\n margin-bottom: $spacing-xxsmall;\n\n @include is-screen-size(desktop) {\n margin-bottom: $spacing-medium-large;\n }\n }\n\n .mck-radio-select {\n margin-bottom: $spacing-small;\n\n @include is-screen-size(desktop) {\n margin-bottom: $spacing-medium;\n }\n }\n }\n\n mat-chip.mat-standard-chip.mat-standard-chip {\n border-radius: 3px;\n min-height: 1.5rem;\n background-color: $chip-color;\n padding-top: $spacing-smallest;\n padding-bottom: $spacing-smallest;\n padding-left: $spacing-xxsmall;\n @include chip-label;\n @include is-screen-size(mobile) {\n line-height: inherit;\n }\n }\n\n mat-checkbox {\n &.mat-checkbox.mat-checkbox {\n @include checkbox-label;\n }\n\n div.mat-checkbox-background.mat-checkbox-background {\n background-color: $primary;\n\n &.mck-checkbox-disabled.mat-checkbox-disabled {\n background-color: $background-checkbox-disabled;\n }\n }\n\n &.mck-checkbox-disabled.mat-checkbox-disabled {\n @include checkbox-label;\n color: $border;\n }\n }\n }\n\n &-borderless {\n border: none;\n\n &:hover, &:focus, &:disabled {\n border: none;\n }\n }\n\n &-select-panel {\n margin-top: 0 !important;\n border-radius: unset !important;\n margin-top: 35px !important;\n margin-left: 5px;\n\n mat-option {\n padding-left: 0;\n padding-right: 0;\n\n &.mat-option-text {\n @include form-label;\n text-align: left;\n }\n }\n\n &.mck-margin-top {\n margin-top: $spacing-medium !important;\n }\n }\n\n &-checkbox-panel {\n &.mat-autocomplete-panel.mat-autocomplete-panel {\n top: -10px;\n max-height: 278px;\n }\n\n mat-option.mck-truncated {\n & .mat-checkbox-label.mat-checkbox-label {\n @include max-lines(2);\n }\n }\n\n mat-option {\n padding-left: 0;\n padding-right: 0;\n line-height: 24px;\n height: unset;\n min-height: 36px;\n\n & .mat-checkbox-label.mat-checkbox-label {\n flex: 1;\n }\n\n & .mat-checkbox-label.mat-checkbox-label {\n @include checkbox-label;\n text-align: left;\n }\n\n &.mck-checkbox-group-header {\n & .mat-checkbox-label.mat-checkbox-label {\n font-weight: 500;\n }\n }\n\n &.mck-checkbox-group-child {\n margin-left: $spacing-large;\n }\n\n mat-checkbox {\n label.mat-checkbox-layout {\n width: 100%;\n padding-left: 16px;\n padding-right: 16px;\n @include is-screen-size(mobile) {\n padding-left: 2px;\n padding-right: 2px;\n }\n }\n\n div.mat-checkbox-frame.mat-checkbox-frame {\n @include mck-checkbox-border;\n }\n\n &.mat-checkbox-checked {\n div.mat-checkbox-background.mat-checkbox-background {\n background-color: $primary;\n }\n }\n\n &.mck-checkbox-disabled.mat-checkbox-disabled {\n div.mat-checkbox-background.mat-checkbox-background {\n background-color: $background-checkbox-disabled;\n }\n }\n\n &.mck-checkbox-disabled.mat-checkbox-disabled {\n & .mat-checkbox-label.mat-checkbox-label {\n @include checkbox-label;\n color: $border;\n text-align: left;\n }\n }\n\n .mat-checkbox-inner-container {\n width: $spacing-small-medium;\n height: $spacing-small-medium;\n }\n }\n }\n }\n\n &-select-option {\n &-selected {\n font-weight: 500;\n font-family: $font-mckinsey-sans;\n color: black;\n background-color: $selected-option;\n\n .mck-spacer-content {\n background-color: $primary;\n margin-right: $spacing-xsmall;\n }\n }\n\n &-unselected {\n font-weight: 400;\n font-family: $font-mckinsey-sans;\n\n &.mck-ignore-disabled {\n color: black;\n }\n\n .mck-spacer-content {\n visibility: hidden;\n margin-right: $spacing-xsmall;\n }\n }\n }\n\n &-button {\n &.mat-button.mat-button, &.mat-stroked-button.mat-stroked-button {\n height: 40px;\n border-radius: 0;\n border: none;\n @extend .mck-column;\n @extend .mck-center;\n font-family: $font-mckinsey-sans;\n\n @include is-screen-size(not-mobile) {\n height: 48px;\n }\n\n & > .mat-button-wrapper.mat-button-wrapper {\n @include form-label;\n font-weight: normal;\n padding-left: $spacing-smallest;\n padding-right: $spacing-smallest;\n font-family: $font-mckinsey-sans;\n\n @include is-screen-size(mobile) {\n font-size: 0.875rem;\n }\n }\n\n &.mck-short {\n height: 32px;\n min-width: 83px;\n\n @include is-screen-size(not-mobile) {\n height: 48px;\n min-width: 155px;\n }\n\n // some cases buttons in desktop are 40 vs 48px\n &.mck-short-height {\n @include is-screen-size(not-mobile) {\n height: 40px;\n }\n }\n }\n\n &.mck-square {\n height: 32px;\n width: 32px;\n min-width: 32px;\n padding: 0;\n\n @include is-screen-size(not-mobile) {\n width: 40px;\n height: 40px;\n }\n }\n }\n }\n\n &-primary-button {\n @extend .mck-button;\n\n &.mat-button.mat-button {\n background-color: $primary;\n\n &[disabled], &.disabled {\n background-color: $background-checkbox-disabled;\n color: #757575;\n cursor: not-allowed;\n\n & > .mat-button-wrapper.mat-button-wrapper {\n color: #757575;\n }\n }\n\n & > .mat-button-wrapper.mat-button-wrapper {\n color: white;\n }\n }\n }\n\n &-secondary-button {\n @extend .mck-button;\n\n &.mat-stroked-button.mat-stroked-button {\n @include mck-thin-button-border;\n border: 1px solid #2251FF;\n color: #2251FF;\n &[disabled], &.disabled {\n border: 1px solid $background-checkbox-disabled;\n color: #333333;\n cursor: not-allowed;\n }\n }\n\n &.mat-button.mat-button {\n background-color: white;\n\n & > .mat-button-wrapper.mat-button-wrapper {\n color: $chip-color;\n }\n }\n }\n\n &-warning-button {\n @extend .mck-button;\n\n &.mat-button.mat-button {\n background-color: $color-brand-yellow;\n\n & > .mat-button-wrapper.mat-button-wrapper {\n color: black;\n }\n }\n }\n\n &-stroked-button {\n @extend .mck-button;\n\n &.mat-stroked-button.mat-stroked-button {\n @include mck-button-border;\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding-left: $spacing-medium-large;\n padding-right: $spacing-medium-large;\n\n &.mck-short {\n height: 32px;\n min-width: 83px;\n padding-left: $spacing-smallest;\n padding-right: $spacing-smallest;\n\n @include is-screen-size(not-mobile) {\n height: 48px;\n min-width: 155px;\n }\n }\n\n // primary colors\n &.mck-primary {\n border-width: 1px;\n border-color: $primary;\n color: $primary;\n }\n\n &.mck-thin-border-light {\n border-color: $background-checkbox-disabled;\n border-width: 1px;\n }\n }\n\n & > .mat-button-wrapper.mat-button-wrapper {\n @include form-label;\n font-weight: normal;\n color: $primary;\n }\n }\n\n &-toggle-button {\n @include form-label;\n @include mck-content-border;\n border-color: $background-checkbox-disabled;\n min-width: 59px;\n background-color: white;\n\n @include is-screen-size(not-mobile) {\n min-width: 132px;\n padding-top: $spacing-xxsmall;\n padding-bottom: $spacing-xxsmall;\n }\n\n &-selected {\n color: $primary;\n }\n }\n\n &-date-picker {\n width: 100% !important;\n height: 100% !important;\n\n @include is-screen-size(not-mobile) {\n max-width: 23rem;\n }\n\n & > .header.header {\n @include form-label;\n font-weight: 500;\n color: $form-label;\n margin-top: $spacing-small-medium;\n\n & > .arrow.arrow {\n width: 2.375rem;\n height: 2rem;\n\n & > .icon.icon {\n width: 1rem;\n height: 1rem;\n }\n\n\n & > .next.next {\n background-image: url('libs/ui/src/lib/icons/arrow-forward.svg');\n }\n\n & > .previous.previous {\n background-image: url('libs/ui/src/lib/icons/arrow-backward.svg');\n }\n }\n\n\n }\n\n & > .month {\n @include form-label;\n font-weight: 500;\n }\n\n & > .week {\n @include form-label;\n font-weight: 500;\n color: $secondary-label;\n }\n\n & > .body {\n @include form-label;\n\n & > div > div.date {\n & > .dot {\n display: none;\n }\n\n &.disabled {\n background-color: transparent;\n border-radius: 0;\n color: $secondary-label;\n }\n\n &.active {\n border-radius: 0;\n background-color: $primary;\n }\n\n &.non-month {\n color: $secondary-label;\n }\n }\n }\n }\n\n &-spacer-content {\n &-collapse-tablet {\n @include is-screen-size(mobile) {\n display: none;\n }\n @include is-screen-size(tablet) {\n display: none;\n }\n }\n\n &-expand-mobile {\n @include is-screen-size(not-mobile) {\n display: none;\n }\n }\n\n &-divider {\n background-color: $selected-option;\n }\n }\n\n &-expansion-panel {\n &.mat-expansion-panel.mat-expansion-panel {\n @include mat-elevation(0);\n border-radius: 0;\n border-top: 1px solid $selected-option;\n border-bottom: 1px solid $selected-option;\n\n &.mck-expanded {\n background-color: $background-color;\n border-bottom: none;\n\n & .mck-collapse-icon {\n @include mck-icon(24px, 'chevron-close.svg');\n @include is-screen-size(not-mobile) {\n @include mck-icon(48px, 'chevron-close-large.svg');\n }\n }\n }\n\n .mat-expansion-panel-body {\n padding-left: 0;\n padding-right: 0;\n\n & > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\n @include body-tiny;\n padding-left: $spacing-small;\n padding-right: $spacing-small;\n @include is-screen-size(not-mobile) {\n @include form-label;\n }\n text-align: left;\n color: black;\n font-weight: normal;\n padding-bottom: $spacing-xxsmall;\n }\n }\n }\n\n & mat-expansion-panel-header {\n padding-left: $spacing-small;\n padding-right: $spacing-small;\n\n & > span.mat-content {\n // center text and icons\n align-items: center;\n }\n }\n\n & mat-panel-title {\n @include form-label;\n text-align: left;\n color: black;\n font-weight: normal;\n }\n\n .mck-collapse-icon {\n @include mck-icon(24px, 'chevron-open.svg');\n @include is-screen-size(not-mobile) {\n @include mck-icon(48px, 'chevron-open-large.svg');\n }\n transform: rotate(0deg);\n transition: transform 0.5s ease;\n &.expanded {\n transform: rotate(180deg);\n }\n }\n }\n\n &-icon-fill-open {\n fill: $primary;\n }\n\n &-icon-fill-close {\n fill: $secondary-label;\n }\n\n &-icon-fill-black {\n fill: black;\n stroke: black;\n }\n\n &-icon-fill-white {\n fill: white;\n stroke: white;\n }\n\n &-icon-fill-gray {\n fill: #333333;\n stroke: #333333;\n }\n\n &-min {\n max-width: 581px !important;\n width: 80vw;\n max-height: 100vh;\n // Transform the modal into a more 'full-screen' appearance on mobile.\n @include is-screen-size(mobile) {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n\n .mat-dialog-container {\n border-radius: 0 !important;\n }\n }\n }\n\n &-noexpand {\n max-width: 581px !important;\n width: 80vw !important;\n max-height: 100vh;\n // Transform the modal into a more 'full-screen' appearance on mobile.\n @include is-screen-size(mobile) {\n width: calc(100vw - 32px) !important;\n max-height: 100vh;\n }\n }\n\n &-modal {\n max-width: 800px !important;\n width: 80vw;\n max-height: 100vh;\n // Transform the modal into a more 'full-screen' appearance on mobile.\n @include is-screen-size(mobile) {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n\n .mat-dialog-container {\n border-radius: 0 !important;\n }\n }\n }\n\n &-modal-mini {\n max-width: 580px !important;\n max-height: 100vh;\n // Transform the modal into a more 'full-screen' appearance on mobile.\n @include is-screen-size(mobile) {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n\n .mat-dialog-container {\n border-radius: 0 !important;\n }\n }\n }\n\n &-modal-survey {\n max-width: 691px !important;\n max-height: 100vh;\n // Transform the modal into a more 'full-screen' appearance on mobile.\n @include is-screen-size(mobile) {\n .mat-dialog-container {\n border-radius: 0 !important;\n }\n }\n }\n\n &-modal-wide {\n max-width: 1024px !important;\n width: 100vw;\n height: 95vh;\n max-height: 100vh;\n .mat-dialog-content {\n background-color: #F8F9FA;\n padding: 0 !important;\n overflow: hidden;\n .mat-icon-button[name=\"CloseButton\"] {\n position: relative;\n right: 32px;\n @include is-screen-size(mobile) {\n .close-image {\n height: 32px;\n width: 32px;\n }\n }\n }\n }\n // Transform the modal into a more 'full-screen' appearance on mobile.\n @include is-screen-size(mobile) {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n .mat-dialog-container {\n border-radius: 0 !important;\n }\n }\n\n }\n\n &-modal-wide-manage-booking {\n max-width: 1024px !important;\n width: 100vw;\n // height: 95vh;\n max-height: 95vh;\n .mat-dialog-content {\n background-color: #F8F9FA;\n padding: 0 !important;\n overflow: hidden;\n .mat-icon-button[name=\"CloseButton\"] {\n position: relative;\n right: 32px;\n @include is-screen-size(mobile) {\n .close-image {\n height: 32px;\n width: 32px;\n }\n }\n }\n }\n // Transform the modal into a more 'full-screen' appearance on mobile.\n @include is-screen-size(mobile) {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n .mat-dialog-container {\n border-radius: 0 !important;\n }\n }\n\n }\n\n &-alert {\n @include is-screen-size(mobile) {\n max-width: 100vw !important;\n width: 100vw;\n margin-left: $spacing-small;\n margin-right: $spacing-small;\n }\n\n &-backdrop {\n background: $alert-overlay-bg;\n }\n }\n\n &-slide-toggle {\n &.mat-slide-toggle.mat-checked:not(.mat-disabled) {\n & .mat-slide-toggle-bar.mat-slide-toggle-bar {\n background-color: $primary-highlight;\n }\n\n & .mat-slide-toggle-thumb.mat-slide-toggle-thumb {\n background-color: white;\n }\n }\n\n &.mat-slide-toggle {\n height: auto;\n }\n\n .mat-slide-toggle-content.mat-slide-toggle-content {\n flex: 1;\n @include form-label;\n text-align: left;\n @include max-lines(2);\n white-space: normal;\n }\n\n .mat-slide-toggle-thumb.mat-slide-toggle-thumb {\n width: 14px;\n height: 14px;\n transform: translate(50%, 50%);\n }\n\n .mat-slide-toggle-thumb-container.mat-slide-toggle-thumb-container {\n top: -4px;\n left: -4px;\n }\n\n .mat-slide-toggle-bar.mat-slide-toggle-bar {\n height: 20px;\n background-color: $background-checkbox-disabled;\n border-radius: 20px;\n }\n }\n\n &-skeleton {\n @include skeleton-bg;\n\n &-checkbox {\n float: left;\n > .loader.loader {\n @include skeleton-bg;\n width: 20px;\n height: 20px;\n margin-bottom: 0;\n }\n }\n\n &-header > .loader.loader {\n @include skeleton-bg;\n width: 100vw;\n margin-bottom: 0;\n max-width: 215px;\n }\n\n &-image > .loader.loader {\n @include skeleton-bg;\n @include placeholder-image-size;\n margin-bottom: 0;\n }\n\n &-status > .loader.loader {\n @include skeleton-bg;\n @include placeholder-status-size;\n margin-top: 10px;\n margin-bottom: 0;\n }\n\n &-line-1 > .loader.loader {\n @include skeleton-bg;\n height: 23px;\n max-width: 176px;\n\n @include is-screen-size(not-mobile) {\n max-width: 219px;\n }\n }\n\n &-line-2 > .loader.loader {\n @include skeleton-bg;\n height: 18px;\n max-width: 165px;\n\n @include is-screen-size(not-mobile) {\n max-width: 189px;\n }\n }\n\n &-line-3 > .loader.loader {\n @include skeleton-bg;\n height: 18px;\n max-width: 147px;\n\n @include is-screen-size(not-mobile) {\n max-width: 189px;\n }\n }\n\n &-line-30p, &-line-30p-thin {\n > .loader.loader {\n @include skeleton-bg;\n height: 18px;\n max-width: 30%;\n @include is-screen-size(not-mobile) {\n max-width: 30%;\n }\n }\n &-thin {\n > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n }\n }\n }\n\n &-line-45p, &-line-45p-thin {\n > .loader.loader {\n @include skeleton-bg;\n height: 18px;\n max-width: 45%;\n @include is-screen-size(not-mobile) {\n max-width: 45%;\n margin-right: 45%;\n }\n }\n &-thin {\n > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n }\n }\n }\n\n &-line-50p, &-line-50p-thin, &-line-50p-thick {\n > .loader.loader {\n @include skeleton-bg;\n height: 18px;\n max-width: 50%;\n @include is-screen-size(not-mobile) {\n max-width: 50%;\n margin-right: 45%;\n }\n }\n &-thin {\n > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n }\n }\n &-thick {\n > .loader.loader {\n height: 32px;\n margin-bottom: 4px;\n }\n }\n }\n\n &-line-60p, &-line-60p-thin, &-line-60p-thick {\n > .loader.loader {\n @include skeleton-bg;\n height: 18px;\n max-width: 60%;\n @include is-screen-size(not-mobile) {\n max-width: 60%;\n margin-right: 35%;\n }\n }\n &-thin {\n > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n }\n }\n &-thick {\n > .loader.loader {\n height: 32px;\n margin-bottom: 4px;\n }\n }\n }\n\n &-line-70p, &-line-70p-thin, &-line-70p-thick {\n > .loader.loader {\n @include skeleton-bg;\n height: 18px;\n max-width: 70%;\n @include is-screen-size(not-mobile) {\n max-width: 70%;\n margin-right: 25%;\n }\n }\n &-thin {\n > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n }\n }\n &-thick {\n > .loader.loader {\n height: 32px;\n margin-bottom: 4px;\n }\n }\n }\n\n &-line-80p, &-line-80p-thin, &-line-80p-thick {\n > .loader.loader {\n @include skeleton-bg;\n height: 18px;\n max-width: 80%;\n @include is-screen-size(not-mobile) {\n max-width: 80%;\n margin-right: 15%;\n }\n }\n &-thin {\n > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n }\n }\n &-thick {\n > .loader.loader {\n height: 32px;\n margin-bottom: 4px;\n }\n }\n }\n\n &-line-90p, &-line-90p-thin {\n > .loader.loader {\n @include skeleton-bg;\n height: 18px;\n max-width: 90%;\n @include is-screen-size(not-mobile) {\n max-width: 90%;\n }\n }\n &-thin {\n > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n }\n }\n }\n\n &-load-more > .loader.loader {\n @include skeleton-bg;\n margin-top: $spacing-xxsmall;\n margin-bottom: $spacing-xxsmall;\n width: calc(100vw - (2 * #{$spacing-small}));\n height: 40px;\n\n @include is-screen-size(not-mobile) {\n max-width: 320px;\n height: 50px;\n }\n }\n\n &-load-more-100p, &-header, &-room-availability {\n > .loader.loader {\n @include skeleton-bg;\n margin-top: $spacing-xxsmall;\n margin-bottom: $spacing-xxsmall;\n width: calc(100vw - (2 * #{$spacing-small}));\n height: 40px;\n max-width: none;\n width: 100%;\n @include is-screen-size(not-mobile) {\n max-width: none;\n width: 100%;\n height: 50px;\n }\n &-room-availability {\n > .loader.loader {\n height: 124px;\n margin-bottom: 4px;\n }\n }\n }\n }\n\n\n }\n}\n\n\n.mck {\n &-heading-5 {\n @include heading-5;\n }\n}\n\nngx-mat-select-search {\n .mat-select-search-no-entries-found {\n @include form-label;\n text-align: left;\n }\n\n .mat-select-search-input {\n @include form-label;\n text-align: left;\n }\n\n button.mat-button.mat-select-search-clear {\n background-color: transparent;\n border: none;\n color: black;\n }\n}\n\n::-webkit-scrollbar {\n width: 16px;\n height: 18px;\n}\n::-webkit-scrollbar-thumb {\n height: $spacing-medium;\n border: 4px solid rgba(0, 0, 0, 0);\n background-clip: padding-box;\n border-radius: 8px;\n background-color: $scrollbar-color;\n -webkit-box-shadow: inset -1px -1px 0px rgba(0, 0, 0, 0.05), inset 1px 1px 0px rgba(0, 0, 0, 0.05);\n}\n::-webkit-scrollbar-button {\n width: 0;\n height: 0;\n display: none;\n}\n::-webkit-scrollbar-corner {\n background-color: transparent;\n}\nheader {\n z-index: 2;\n}\n.mb-block {\n @include is-screen-size(mobile) {\n display: block;\n }\n}\n.mb-bottom {\n @include is-screen-size(mobile) {\n padding-bottom: 110px;\n }\n}\n\n.map-filters-container .mck-form-input mat-form-field {\n .mat-form-field-infix {\n top: 5px;\n }\n .mat-form-field-outline{\n height: 48px;\n background-color: white;\n }\n\n .mat-form-field-infix {\n padding-top: $spacing-xxsmall !important;\n }\n}\n\n.office-level-row{\n\n .mat-select-placeholder{\n color: #333333;\n font-family: $font-mckinsey-sans;\n }\n\n .legend-container .mat-form-field-outline, .mat-form-field-infix {\n @include is-screen-size(mobile) {\n height: 45px !important;\n }\n }\n\n .select-divider{\n display: block;\n top: 0 !important;\n width: 44px !important;\n right: -11px !important;\n background: transparent !important;\n border-width: 0 0 0 1px;\n border-color: #c6c6c6;\n border-style: solid;\n @include is-screen-size(not-mobile) {\n height: calc(100% - 1px) !important;\n }\n }\n\n .disabled{\n .select-divider{\n background: #F0F0F0 !important;\n @include is-screen-size(not-mobile) {\n height: calc(100% - 2px) !important;\n }\n }\n .select-chevron{\n opacity: 0.5;\n margin-left: 10px;\n }\n }\n}\n\n.office-level-row, .map-controls{\n .legend-container .mat-form-field-outline, .mat-form-field-infix {\n display: flex !important;\n width: 100% !important;\n justify-content: space-between !important;\n }\n}\n\n.booking-form-container {\n overflow-y: auto;\n max-height: calc(100vh - 345px);\n}\n.booking-form-container .mck-form-input{\n\n mat-select {\n & .mat-select-value > .mat-select-value-text > span {\n // color: #051c2c !important; //R--- blocks disabled state color\n }\n }\n\n mat-label, .mat-radio-label-content {\n font-family: $font-mckinsey-sans !important;\n color: #333333;\n }\n\n input, input::placeholder{\n font-family: $font-mckinsey-sans;\n color: #B3B3B3;\n }\n}","/*\nStart Angular Calendar\n*/\n.cal-week-view {\n /* stylelint-disable-next-line selector-type-no-unknown */\n}\n.cal-week-view * {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n.cal-week-view .cal-day-headers {\n display: -webkit-box;\n display: -ms-flexbox;\n -js-display: flex;\n display: flex;\n padding-left: 70px;\n border: 1px solid;\n}\n.cal-week-view .cal-day-headers .cal-header {\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n text-align: left;\n padding: 12px;\n margin-top: 20px;\n font-family: $font;\n font-size: 16px;\n font-weight: 400;\n p {\n font-size: 16px;\n font-weight: 300;\n margin: 0;\n }\n &.show-weekend {\n font-size: 12px;\n p {\n font-size: 12px;\n }\n }\n}\n.cal-week-view .cal-day-headers .cal-header:not(:last-child) {\n border-right: 1px solid;\n}\n.cal-week-view .cal-day-headers .cal-header:first-child {\n border-left: 1px solid;\n}\n.cal-week-view .cal-day-headers span {\n font-weight: 400;\n opacity: 0.5;\n}\n.cal-week-view .cal-day-column {\n -webkit-box-flex: 1;\n -ms-flex-positive: 1;\n flex-grow: 1;\n border-left: solid 1px;\n padding-top: 5px;\n}\n.cal-week-view .cal-event {\n font-size: 12px;\n border: 1px solid;\n outline: none;\n .berry {\n position: absolute;\n left: calc(50% - 7px);\n display: none;\n height: 14px;\n width: 14px;\n background-color: #00A9F4;\n border-radius: 50%;\n &.top {\n top: -7px;\n }\n &.bot {\n bottom: -7px;\n }\n }\n .bumper {\n position: absolute;\n left: 3px;\n display: block;\n width: calc(100% - 6px);\n border-radius: 3px;\n z-index: -1;\n opacity: .60;\n }\n &.expanded {\n &:focus {\n border-style: dashed;\n border-width: 2px;\n outline: none;\n .berry {\n display: block;\n }\n }\n }\n}\n.cal-week-view .cal-time-label-column {\n width: 70px;\n height: 100%;\n}\n.cal-week-view .cal-current-time-marker {\n position: absolute;\n width: 100%;\n height: 2px;\n z-index: 2;\n}\n.cal-week-view .cal-all-day-events {\n border: solid 1px;\n border-top: 0;\n border-bottom-width: 3px;\n padding-top: 3px;\n position: relative;\n}\n.cal-week-view .cal-all-day-events .cal-day-columns {\n height: 100%;\n width: 100%;\n display: -webkit-box;\n display: -ms-flexbox;\n -js-display: flex;\n display: flex;\n position: absolute;\n top: 0;\n z-index: 0;\n}\n.cal-week-view .cal-all-day-events .cal-events-row {\n position: relative;\n height: 31px;\n margin-left: 70px;\n}\n.cal-week-view .cal-all-day-events .cal-event-container {\n display: inline-block;\n position: absolute;\n}\n.cal-week-view .cal-all-day-events .cal-event-container.resize-active {\n z-index: 1;\n pointer-events: none;\n}\n.cal-week-view .cal-all-day-events .cal-event {\n padding: 0 5px;\n margin-left: 2px;\n margin-right: 2px;\n height: 28px;\n line-height: 28px;\n}\n.cal-week-view .cal-all-day-events .cal-time-label-column {\n display: -webkit-box;\n display: -ms-flexbox;\n -js-display: flex;\n display: flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n font-size: 14px;\n}\n.cal-week-view .cal-all-day-events .cal-resize-handle {\n width: 6px;\n height: 100%;\n cursor: col-resize;\n position: absolute;\n top: 0;\n}\n.cal-week-view .cal-all-day-events .cal-resize-handle.cal-resize-handle-after-end {\n right: 0;\n}\n.cal-week-view .cal-event,\n.cal-week-view .cal-header {\n overflow: hidden;\n -o-text-overflow: ellipsis;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.cal-week-view .cal-drag-active {\n pointer-events: none;\n z-index: 1;\n}\n.cal-week-view .cal-drag-active * {\n pointer-events: none;\n}\n.cal-week-view .cal-time-events {\n position: relative;\n border: solid 1px;\n border-top: 0;\n display: -webkit-box;\n display: -ms-flexbox;\n -js-display: flex;\n display: flex;\n}\n.cal-week-view .cal-time-events .cal-day-columns {\n display: -webkit-box;\n display: -ms-flexbox;\n -js-display: flex;\n display: flex;\n -webkit-box-flex: 1;\n -ms-flex-positive: 1;\n flex-grow: 1;\n /*\n First and last item's hour visibility adjustment in the list \n */\n .cal-hour:nth-of-type(2), .cal-hour:nth-of-type(8){ \n .cal-time {\n top: -9px;\n }\n }\n \n}\n.cal-week-view .cal-time-events .cal-day-column {\n position: relative;\n}\n.cal-week-view .cal-time-events .cal-events-container {\n position: relative;\n}\n.cal-week-view .cal-time-events .cal-event-container {\n position: absolute;\n z-index: 1;\n}\n.cal-week-view .cal-time-events .cal-event {\n overflow: visible;\n width: 103%;\n height: calc(100% - 2px);\n margin: 1px;\n padding: 0 5px;\n line-height: 25px;\n left: -3%;\n position: relative;\n}\n.expanded {\n .cal-week-view .cal-time-events .cal-event {\n width: 100%;\n left: 0%;\n }\n}\n.cal-week-view .cal-time-events .cal-resize-handle {\n width: 100%;\n height: 8px;\n cursor: row-resize;\n position: absolute;\n z-index: 10;\n}\n.cal-week-view .cal-time-events .cal-resize-handle.cal-resize-handle-after-end {\n bottom: -4px;\n}\n.cal-week-view .cal-time-events .cal-resize-handle.cal-resize-handle-before-start {\n top: -4px;\n}\n.cal-week-view .cal-hour-segment {\n position: relative;\n}\n.cal-week-view .cal-hour-segment::after {\n content: '\\00a0';\n}\n.cal-week-view .cal-draggable {\n cursor: move;\n}\n.cal-week-view mwl-calendar-week-view-hour-segment,\n.cal-week-view .cal-hour-segment {\n display: block;\n}\n.cal-week-view .cal-hour {\n .cal-time {\n z-index: 2;;\n position: relative;\n top: -14px;\n background-color: #f4f4f4;\n height: 5rem;\n width: 4rem;\n border-right: 1px solid #A19F9F;\n border-width: thin;\n }\n .cal-hour-start {\n border: none !important;\n }\n}\n.expanded {\n .cal-week-view .cal-hour {\n .cal-time {\n background-color: #f8f9fa;\n width: 4.44rem;\n }\n }\n}\n.cal-week-view .cal-hour:not(:last-child) .cal-hour-segment,\n.cal-week-view .cal-hour:last-child :not(:last-child) .cal-hour-segment {\n border-bottom: thin solid;\n border-color: #DBDBDB;\n}\n.cal-week-view .cal-time {\n font-weight: bold;\n padding-top: 5px;\n width: 70px;\n text-align: center;\n}\n.cal-week-view .cal-hour-segment.cal-after-hour-start .cal-time {\n display: none;\n}\n.cal-week-view {\n background-color: #fff;\n border-top: solid 1px #e1e1e1;\n}\n.cal-week-view .cal-day-headers {\n border-color: #e1e1e1;\n border-top: 0;\n border-left-width: 0;\n border-right-width: 0;\n}\n.cal-week-view .cal-day-headers .cal-header:not(:last-child) {\n border-right-color: #e1e1e1;\n}\n.cal-week-view .cal-day-headers .cal-header:first-child {\n border-left-color: #e1e1e1;\n}\n.cal-week-view .cal-day-column {\n border-left-color: #e1e1e1;\n}\n.cal-week-view .cal-event {\n background-color: #d1e8ff;\n border-color: #1e90ff;\n color: #1e90ff;\n}\n.cal-week-view .cal-all-day-events {\n border-color: #e1e1e1;\n}\n.cal-week-view .cal-header.cal-event-date {\n color: $primary-highlight;\n}\n.cal-week-view .cal-header.cal-weekend span {\n color: #8b0000;\n}\n.cal-week-view .cal-time-events {\n border-color: #e1e1e1;\n}\n.expanded {\n .cal-week-view .cal-time-events .cal-day-columns:not(.cal-resize-active) .cal-hour-segment:hover {\n background-color: #C0DBF5;\n }\n}\n.cal-week-view .cal-hour-odd {\n background-color: #fafafa;\n}\n.cal-week-view .cal-drag-over .cal-hour-segment {\n background-color: #ededed;\n}\n.cal-week-view .cal-hour:not(:last-child) .cal-hour-segment,\n.cal-week-view .cal-hour:last-child :not(:last-child) .cal-hour-segment {\n border-bottom-color: #e1e1e1;\n}\n.cal-week-view .cal-current-time-marker {\n display: none;\n}\n.cal-day-view mwl-calendar-week-view-header {\n display: none;\n}\n.cal-day-view .cal-events-container {\n margin-left: 70px;\n}\n.cal-day-view .cal-day-column {\n border-left: 0;\n}\n.cal-day-view .cal-current-time-marker {\n margin-left: 70px;\n width: calc(100% - 70px);\n}\n\n.cal-tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.5;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n font-size: 14px;\n word-wrap: break-word;\n opacity: 0.9;\n margin-bottom: 4px;\n}\n\n.cal-tooltip.cal-tooltip-top {\n padding: 5px 0;\n margin-top: -3px;\n}\n\n.cal-tooltip.cal-tooltip-top .cal-tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n}\n\n.cal-tooltip.cal-tooltip-right {\n padding: 0 5px;\n margin-left: 3px;\n}\n\n.cal-tooltip.cal-tooltip-right .cal-tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n}\n\n.cal-tooltip.cal-tooltip-bottom {\n padding: 5px 0;\n margin-top: 3px;\n}\n\n.cal-tooltip.cal-tooltip-bottom .cal-tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n}\n\n.cal-tooltip.cal-tooltip-left {\n padding: 0 5px;\n margin-left: -3px;\n}\n\n.cal-tooltip.cal-tooltip-left .cal-tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n}\n\n.cal-tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n text-align: center;\n border-radius: 0.25rem;\n}\n\n.cal-tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n\n.cal-tooltip.cal-tooltip-top .cal-tooltip-arrow {\n border-top-color: #fff;\n}\n\n.cal-tooltip.cal-tooltip-right .cal-tooltip-arrow {\n border-right-color: #fff;\n}\n\n.cal-tooltip.cal-tooltip-bottom .cal-tooltip-arrow {\n border-bottom-color: #fff;\n}\n\n.cal-tooltip.cal-tooltip-left .cal-tooltip-arrow {\n border-left-color: #fff;\n}\n\n.cal-tooltip-inner {\n padding: 10px;\n color: #000;\n background-color: #fff;\n box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.2);\n}\n\n//// Incorporate overrides below into above @todo\n.cal-event-container {\n .cal-event {\n border-radius: 0 !important;\n .cal-event-title {\n font-size: 14px;\n font-weight: 400;\n padding: 10px 14px;\n color: black;\n display: block;\n @include is-screen-size(mobile) {\n font-size: 12px;\n }\n }\n }\n &.selected {\n width: 100% !important;\n left: 0% !important;\n .cal-event {\n display: flex;\n justify-content: center;\n align-items: center;\n .cal-event-title {\n white-space: pre-wrap;\n text-align: center;\n }\n }\n z-index: 2 !important;\n &.mobile {\n left: 0% !important;\n width: 100% !important;\n }\n &.minimal {\n .cal-event-title {\n top: 0;\n transform: none;\n }\n }\n }\n &.mobile {\n left: 0% !important;\n width: 100% !important;\n }\n &.booked {\n width: 100% !important;\n left: 0% !important;\n .cal-event {\n .cal-event-title {\n width: 100%;\n }\n }\n &.mobile {\n left: 0% !important;\n width: 100% !important;\n }\n &.minimal {\n .cal-event-title {\n padding: 1px 14px;\n }\n }\n }\n &.show-weekend {\n .cal-event {\n .cal-event-title {\n font-size: 13px;\n }\n }\n\n }\n}\n.cal-week-view {\n position: relative;\n .cal-time {\n font-weight: 400;\n }\n .cal-hour {\n background-color: #ffffff;\n }\n .cal-hour-odd {\n background-color: #ffffff;\n }\n .cal-time-events {\n background-color: #ffffff;\n }\n}\n.cal-week-view .cal-day-headers {\n position: fixed;\n width: 100%;\n max-width: 1008px;\n background: $page-background-color;\n z-index: 3;\n height: 82px;\n @include is-screen-size(laptop) {\n width: 100%;\n }\n}\n\n.expanded {\n .cal-week-view .cal-time-events {\n padding-top: 87px;\n position: relative;\n top: 1px;\n z-index: 1;\n border: 1px solid #f0f0f0;\n }\n\n\n .cal-event-container {\n &.mobile {\n left: 20% !important;\n width: 80% !important;\n }\n }\n}\n\n/*\nEnd Start Angular Calendar\n*/\n","// Custom Theming for Angular Material\n// For more information: https://material.angular.io/guide/theming\n@import '~@angular/material/theming';\n// Plus imports for other components in your app.\n\n// Include the common styles for Angular Material. We include this here so that you only\n// have to load a single css file for Angular Material in your app.\n// Be sure that you only ever include this mixin once!\n@include mat-core();\n\n@import \"./variables\";\n@import 'mixins';\n\n@import \"../../../libs/ui/src/lib/styles.scss\";\n@import \"./calendar.scss\";\n\n// Define the palettes for your theme using the Material Design palettes available in palette.scss\n// (imported above). For each palette, you can optionally specify a default, lighter, and darker\n// hue. Available color palettes: https://material.io/design/color/\n$mckinsey-staff-app-primary: mat-palette($mat-indigo);\n$mckinsey-staff-app-accent: mat-palette($mat-blue, A200, A100, A400);\n\n// The warn palette is optional (defaults to red).\n$mckinsey-staff-app-warn: mat-palette($mat-red);\n\n// Create the theme object (a Sass map containing all of the palettes).\n$mckinsey-staff-app-theme: mat-light-theme($mckinsey-staff-app-primary, $mckinsey-staff-app-accent, $mckinsey-staff-app-warn);\n\n// Include theme styles for core and each component used in your app.\n// Alternatively, you can import and @include the theme mixins for each component\n// that you are using.\n@include angular-material-theme($mckinsey-staff-app-theme);\n\n/* You can add global styles to this file, and also import other style files */\n// Our dark theme\n.dark-mode {\n color: $light-primary-text;\n $dark-primary: mat-palette($mat-cyan);\n $dark-accent: mat-palette($mat-blue, A400, A100, A700);\n $dark-warn: mat-palette($mat-red);\n $dark-theme: mat-dark-theme($dark-primary, $dark-accent, $dark-warn);\n\n @include angular-material-theme($dark-theme);\n}\n\n@mixin outlined-button-mds($color) {\n border: solid $color 1px;\n border-radius: 0;\n display: flex;\n align-items: center;\n height: 2em;\n padding-left: 2.5em;\n padding-right: 2.5em;\n .mat-button-wrapper {\n font-weight: normal;\n font-family: $font-family-primary;\n color: $color;\n }\n}\n\n// TODO: this is not the ideal override. Really, we should be using material theming, or mixins to\n// achieve this styling.\n.mat-stroked-button.mat-black {\n @include outlined-button-mds(black);\n}\n.mat-stroked-button.mat-coachmark {\n @include outlined-button-mds($coachmark-text);\n}\n\n.mat-stroked-button.mat-blue-coachmark {\n @include outlined-button-mds($coachmark-dark-text);\n }\n\nhtml,\nbody {\n height: 100%;\n width: 100%;\n}\n\nbody {\n background-color: #fff;\n}\n\n.app,\nbody {\n font-family: \"Helvetica Neue\", \"Helvetica\", Arial, sans-serif;\n font-weight: 300;\n}\n\n.app {\n position: absolute;\n}\n\nhtml,\nbody {\n margin: 0;\n padding: 0;\n font-size: 16px;\n}\n\n.app {\n top: 0;\n left: 0;\n bottom: 0;\n right: 0\n}\n\n* {\n font-family: \"Helvetica Neue\", \"Helvetica\", Arial, sans-serif;\n box-sizing: border-box;\n}\n\n.center {\n position: absolute;\n top: 50%;\n left: 50%;\n -webkit-transform: translate(-50%, -50%);\n -ms-transform: translate(-50%, -50%);\n transform: translate(-50%, -50%);\n margin: auto;\n}\n\n.loading {\n display: inline-block;\n padding: 1.5em;\n border-radius: 1em;\n color: #000;\n font-size: 10mm;\n text-align: center;\n}\n\n.bounce,\n.bounce .circle,\n.bounce .circle .inner {\n height: 4em;\n width: 4em;\n border-radius: 100%;\n}\n\n.bounce .circle {\n -webkit-animation: sk-scaleout .8s infinite ease-in-out;\n animation: sk-scaleout .8s infinite ease-in-out;\n}\n\n.bounce .circle .inner {\n background-color: #000;\n}\n\n@-webkit-keyframes sk-scaleout {\n 0% {\n -webkit-transform: scale(0)\n }\n 20% {\n opacity: 1\n }\n 100% {\n -webkit-transform: scale(1);\n opacity: 0\n }\n}\n\n@keyframes sk-scaleout {\n 0% {\n -webkit-transform: scale(0);\n transform: scale(0)\n }\n 20% {\n opacity: 1\n }\n 100% {\n -webkit-transform: scale(1);\n transform: scale(1);\n opacity: 0\n }\n}\n\n.no-script {\n height: 10em;\n width: 15em;\n padding: .5em 1em;\n background-color: #FFF;\n border-radius: .1em;\n box-shadow: 0 .1em .2em .1em rgba(0, 0, 0, .2);\n text-align: center;\n position: absolute;\n top: 1em;\n left: 50%;\n transform: translateX(-50%)\n}\n\n.no-script img {\n border-radius: .2em;\n height: 6em;\n width: 6em\n}\n\n.no-script .title {\n padding: 0 1em;\n font-style: italic;\n font-size: 1.2em\n}\n\n.no-script .content {\n display: flex\n}\n\n.aca-coin {\n position: relative;\n height: 4.0em;\n width: 4.0em;\n padding: 0.5em;\n margin: 0.5em;\n border-radius: 100%;\n background-color: #dd3d5e;\n animation: coin-spin 2.0s infinite ease-in-out;\n}\n\n.aca-logo {\n height: 3.0em;\n width: 3.0em;\n background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDIwMDEwOTA0Ly9FTiIKICJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy1TVkctMjAwMTA5MDQvRFREL3N2ZzEwLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4wIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiB3aWR0aD0iNzc5LjAwMDAwMHB0IiBoZWlnaHQ9IjMyNC4wMDAwMDBwdCIgdmlld0JveD0iMCAwIDc3OS4wMDAwMDAgMzI0LjAwMDAwMCIKIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiPgo8bWV0YWRhdGE+CkNyZWF0ZWQgYnkgcG90cmFjZSAxLjE0LCB3cml0dGVuIGJ5IFBldGVyIFNlbGluZ2VyIDIwMDEtMjAxNwo8L21ldGFkYXRhPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjAwMDAwMCwzMjQuMDAwMDAwKSBzY2FsZSgwLjEwMDAwMCwtMC4xMDAwMDApIgpmaWxsPSIjZmZmIiBzdHJva2U9Im5vbmUiPgo8cGF0aCBkPSJNNDAwNSAzMjI4IGMtNDQ3IC0yNSAtODM5IC0yMzUgLTExMDkgLTU5NiAtMzE5IC00MjYgLTQxMSAtMTE0NQotMjE2IC0xNjk3IDE2NyAtNDcxIDU0OSAtODAzIDEwMzcgLTkwMiAxMTEgLTIzIDUwNSAtMjYgNjIzIC01IDEyNyAyMyAyODAgNjIKMzgyIDk5IGw5OCAzNSAwIDEwNSBjMCA5NiAtMiAxMDUgLTE3IDEwMCAtMTAgLTMgLTU3IC0yMiAtMTA2IC00MSAtMTkzIC04MAotMzczIC0xMTEgLTYzNyAtMTExIC0yNzQgMCAtNDAxIDI3IC01OTcgMTI5IC0xMTYgNjAgLTE5OSAxMjQgLTMwMyAyMzMgLTE3MgoxNzggLTI3NiAzODggLTMyNSA2NTYgLTM2IDE5NSAtMzYgNTA4IDAgNzAzIDEwMSA1NTUgNDY2IDk1MiA5ODIgMTA3MCA5MyAyMQo0MTUgMzAgNTI1IDE1IDEyNCAtMTggMjc2IC01NiAzNzkgLTk2IDUwIC0xOSA5MyAtMzUgOTUgLTM1IDIgMCA0IDUyIDQgMTE1CmwwIDExNCAtODcgMjcgYy0yMjggNjkgLTQ2OSA5NyAtNzI4IDgyeiIvPgo8cGF0aCBkPSJNNTkxIDE2MzMgYy0zMjEgLTg1MSAtNTg2IC0xNTU0IC01ODkgLTE1NjEgLTMgLTkgMjQgLTEyIDExNiAtMTIKbDEyMCAwIDYwIDE2MiBjMzMgOTAgMTEzIDMwOCAxNzggNDg2IGwxMTkgMzIyIDY3NSAwIDY3NSAwIDEwNCAtMjgyIGM1NyAtMTU2CjEzNyAtMzc0IDE3OCAtNDg2IGw3NSAtMjAyIDExOSAwIGM4OSAwIDExOSAzIDExOCAxMyAwIDYgLTI2MCA3MDcgLTU3NyAxNTU3CmwtNTc3IDE1NDUgLTEwNSAzIC0xMDYgMyAtNTgzIC0xNTQ4eiIvPgo8cGF0aCBkPSJNNjQwNSAzMTYzIGMtMzggLTk5IC0xMTU5IC0zMDcyIC0xMTYzIC0zMDg2IC00IC0xNSA2IC0xNyAxMTQgLTE3CmwxMTkgMCAxMDQgMjgzIGM1NyAxNTUgMTM3IDM3MyAxNzggNDg1IGw3NSAyMDIgNjc2IC0yIDY3NiAtMyAxNzYgLTQ4MCAxNzcKLTQ4MCAxMjIgLTMgMTIzIC0zIC04IDIzIGMtNCAxMiAtMjY0IDcxMyAtNTc5IDE1NTggbC01NzMgMTUzNSAtMTA1IDMgYy05MyAyCi0xMDUgMSAtMTEyIC0xNXoiLz4KPC9nPgo8L3N2Zz4K);\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n}\n\n@keyframes coin-spin {\n 0% {\n transform: rotateY(0deg) translateY(0%);\n }\n 49% {\n transform: rotateY(179deg) translateY(20%);\n }\n 50% {\n transform: rotateY(181deg) translateY(20%);\n }\n 100% {\n transform: rotateY(359deg) translateY(0%);\n }\n}\n\n.shadow {\n position: absolute;\n bottom: 0;\n left: 50%;\n animation: floating-shadow 2s infinite ease-in-out;\n width: 48px;\n height: 6px;\n background-color: rgba(0, 0, 0, 0.2);\n border-radius: 100%;\n}\n\n@keyframes floating-shadow {\n 0% {\n transform: translateX(-50%) scale(1.0)\n }\n 45% {\n transform: translateX(-50%) scale(1.3);\n }\n 55% {\n transform: translateX(-50%) scale(1.3);\n }\n 100% {\n transform: translateX(-50%) scale(1.0);\n }\n}\n\nhtml, body {\n height: 100%;\n}\n\nbody {\n margin: 0;\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.yellow-snackbar {\n background: #ffd149;\n color:rgba(0, 0, 0, .9);\n text-align: center;\n span {\n color:rgba(0, 0, 0, .9);\n }\n}\n\n// Fix room-room-location-preview show legend input position, no idea why.\n.sub {\n app-map-controls > div {\n mck-legend-dropdown {\n position: relative;\n top: -6px;\n }\n \n .map-info-button {\n @include respond-to(mobile) {\n display: none !important;\n }\n }\n } \n} \n\n.mck-modal-backdrop {\n background-color: rgba(#051C2C, 0.85);\n}\n\n.pulsate {\n animation: pulsate 2s ease-out;\n animation-iteration-count: infinite; \n opacity: 0.3;\n}\n@keyframes pulsate {\n 0% { \n opacity: 0.3;\n }\n 50% { \n opacity: 1.0;\n }\n 100% { \n opacity: 0.3;\n }\n}\n\n.mat-form-field-invalid {\n .mat-form-field-outline, .mat-form-field-outline-thick {\n >div {\n border-color: #f44336 !important;\n }\n \n }\n}\n\n.mck-toggle {\n position: relative;\n .mat-slide-toggle-thumb {\n height: 0.875rem;\n width: 0.875rem;\n border-radius: 50%;\n }\n .mat-slide-toggle-thumb-container {\n top: 0.2rem;\n left: 0.2rem;\n }\n .mat-slide-toggle-bar {\n position: relative;\n width: 2.5rem;\n height: 1.25rem;\n flex-shrink: 0;\n border-radius: 1.25rem;\n background-color: #d0d0d0;\n .mat-slide-toggle-ripple{\n top: calc(50% - 23px);\n }\n }\n \n &.mat-checked {\n .mat-slide-toggle-thumb-container {\n left: 0.42rem;\n }\n .mat-slide-toggle-thumb {\n background-color: white;\n } \n .mat-slide-toggle-bar {\n background-color: #2152fe;\n }\n } \n \n}\n\n.mck-chevron-icon {\n svg {\n transform: rotate(180deg);\n transition: transform 0.5s ease; \n }\n\n &.turn-up {\n svg {\n transform: rotate(0deg); \n }\n \n }\n}\n\n.mat-tab-label {\n padding: 0 6px 0 2px !important;\n min-width: auto !important;\n margin-right: 40px;\n font-family: $font-mckinsey-sans;\n font-size: 20px;\n font-weight: 400;\n color: #333333;\n opacity: 1 !important;\n &.mat-tab-label-active {\n \n .mat-tab-label-content {\n color: $primary-highlight;\n \n }\n }\n .mat-tab-label-content {\n color: #333333;\n padding-bottom: 20px;\n }\n}\n\n.mat-tab-group.mat-primary .mat-ink-bar, .mat-tab-nav-bar.mat-primary .mat-ink-bar {\n background-color: $primary-highlight;\n height: 4px;\n}\n\n@include is-screen-size(mobile) {\n .mck-tab {\n .mat-tab-header {\n transform: scale(.65) !important;\n width: 100vw;\n display: block;\n position: relative;\n left: -19%;\n .mat-tab-header-pagination {\n display: none;\n }\n } \n } \n}\n\n.status {\n background: #fff;\n color: #000;\n &.tentative, &.pending, &.requested {\n background: #FFF3CE;\n color: #6A4F00;\n }\n &.accepted {\n background: #D1F4DD;\n color: #006200;\n }\n &.approved {\n background: #D1F4DD;\n color: #006200;\n }\n &.expired {\n background: #F0F0F0;\n color: #757575;\n }\n &.declined, &.cancelled {\n background: #FFE5EA;\n color: #B0001D;\n }\n}\n\n\n.banner{\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 26px;\n box-sizing: border-box; \n \n .banner-text {\n width: calc(100% - 50px);\n padding: 0 20px;\n box-sizing: border-box;\n font-weight: 500;\n font-family: $font-family-primary;\n margin:0;\n text-align: left;\n }\n \n img:last-child{\n cursor: pointer;\n }\n \n @include is-screen-size(mobile) {\n align-items: end;\n }\n\n &.advise{\n background-color: #EBEBF6;\n justify-content: start !important;\n border: 1px solid rgba(106, 79, 0, 0.11);\n .banner-text {\n color: #1B1B19;\n }\n }\n\n &.info {\n background-color: #E6ECFF;\n .banner-text {\n color: #1E32E6;\n }\n }\n &.warning {\n background-color: #fdf1f3;\n .banner-text {\n color: #B0001D;\n }\n }\n &.fixed {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n z-index: 5;\n }\n }\n\n\n .fullpage-modal {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 3;\n background-color: #f8f9fa;\n .header {\n z-index: 1;\n }\n }\n\n\n.coachmark {\n margin-top: 0;\n position: relative;\n top: -6px;\n font-family: $font-mckinsey-sans;\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n line-height: 20px;\n color: #333333;\n}\n\n.bottom-panel-buttons {\n position: fixed;\n bottom: 0;\n width: 100%;\n min-height: 80px;\n background-color: white;\n border: 1px solid #E6E6E6;\n z-index: 1002;\n \n .buttons {\n padding: 24px 16px;\n border: none;\n background-color: transparent;\n max-width: 684px;\n margin: 0 auto;\n display: flex;\n\n button {\n flex: 1;\n height: 48px;\n font-size: 16px;\n max-width: 332px;\n }\n button:nth-child(1) {\n margin-right: 5px;\n border: 1px solid #D0D0D0;\n }\n button:nth-child(2) {\n margin-left: 5px;\n }\n\n @include is-screen-size(mobile) {\n padding: 16px 0;\n\n button {\n margin: 0 16px;\n }\n button:nth-child(1) {\n margin-right: 8px;\n }\n button:nth-child(2) {\n margin-left: 8px;\n }\n\n }\n }\n }\n\n .modal_mask {\n width: 100vw;\n height: 100vh;\n position: fixed;\n top: 0;\n left: 0;\n background-color: white;\n z-index: 3;\n }\n\n// mat-radio-button[ng-reflect-value=\"4\"] {\n// display: none;\n// }\n"]}]); +exports.push([module.i, "@charset \"UTF-8\";\n/* Theme for the ripple elements.*/\n/* stylelint-disable material/no-prefixes */\n/* stylelint-enable */\n.mat-badge-content {\n font-weight: 600;\n font-size: 12px;\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.mat-badge-small .mat-badge-content {\n font-size: 9px;\n}\n.mat-badge-large .mat-badge-content {\n font-size: 24px;\n}\n.mat-h1, .mat-headline, .mat-typography h1 {\n font: 400 24px/32px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n margin: 0 0 16px;\n}\n.mat-h2, .mat-title, .mat-typography h2 {\n font: 500 20px/32px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n margin: 0 0 16px;\n}\n.mat-h3, .mat-subheading-2, .mat-typography h3 {\n font: 400 16px/28px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n margin: 0 0 16px;\n}\n.mat-h4, .mat-subheading-1, .mat-typography h4 {\n font: 400 15px/24px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n margin: 0 0 16px;\n}\n.mat-h5, .mat-typography h5 {\n font: 400 calc(14px * 0.83)/20px Roboto, \"Helvetica Neue\", sans-serif;\n margin: 0 0 12px;\n}\n.mat-h6, .mat-typography h6 {\n font: 400 calc(14px * 0.67)/20px Roboto, \"Helvetica Neue\", sans-serif;\n margin: 0 0 12px;\n}\n.mat-body-strong, .mat-body-2 {\n font: 500 14px/24px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n.mat-body, .mat-body-1, .mat-typography {\n font: 400 14px/20px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n.mat-body p, .mat-body-1 p, .mat-typography p {\n margin: 0 0 12px;\n}\n.mat-small, .mat-caption {\n font: 400 12px/20px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n.mat-display-4, .mat-typography .mat-display-4 {\n font: 300 112px/112px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: -0.05em;\n margin: 0 0 56px;\n}\n.mat-display-3, .mat-typography .mat-display-3 {\n font: 400 56px/56px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: -0.02em;\n margin: 0 0 64px;\n}\n.mat-display-2, .mat-typography .mat-display-2 {\n font: 400 45px/48px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: -0.005em;\n margin: 0 0 64px;\n}\n.mat-display-1, .mat-typography .mat-display-1 {\n font: 400 34px/40px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n margin: 0 0 64px;\n}\n.mat-bottom-sheet-container {\n font: 400 14px/20px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n.mat-button, .mat-raised-button, .mat-icon-button, .mat-stroked-button,\n.mat-flat-button, .mat-fab, .mat-mini-fab {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 14px;\n font-weight: 500;\n}\n.mat-button-toggle {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.mat-card {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.mat-card-title {\n font-size: 24px;\n font-weight: 500;\n}\n.mat-card-header .mat-card-title {\n font-size: 20px;\n}\n.mat-card-subtitle,\n.mat-card-content {\n font-size: 14px;\n}\n.mat-checkbox {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.mat-checkbox-layout .mat-checkbox-label {\n line-height: 24px;\n}\n.mat-chip {\n font-size: 14px;\n font-weight: 500;\n}\n.mat-chip .mat-chip-trailing-icon.mat-icon,\n.mat-chip .mat-chip-remove.mat-icon {\n font-size: 18px;\n}\n.mat-table {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.mat-header-cell {\n font-size: 12px;\n font-weight: 500;\n}\n.mat-cell, .mat-footer-cell {\n font-size: 14px;\n}\n.mat-calendar {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.mat-calendar-body {\n font-size: 13px;\n}\n.mat-calendar-body-label,\n.mat-calendar-period-button {\n font-size: 14px;\n font-weight: 500;\n}\n.mat-calendar-table-header th {\n font-size: 11px;\n font-weight: 400;\n}\n.mat-dialog-title {\n font: 500 20px/32px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n.mat-expansion-panel-header {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 15px;\n font-weight: 400;\n}\n.mat-expansion-panel-content {\n font: 400 14px/20px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n.mat-form-field {\n font-size: inherit;\n font-weight: 400;\n line-height: 1.125;\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n.mat-form-field-wrapper {\n padding-bottom: 1.34375em;\n}\n.mat-form-field-prefix .mat-icon,\n.mat-form-field-suffix .mat-icon {\n font-size: 150%;\n line-height: 1.125;\n}\n.mat-form-field-prefix .mat-icon-button,\n.mat-form-field-suffix .mat-icon-button {\n height: 1.5em;\n width: 1.5em;\n}\n.mat-form-field-prefix .mat-icon-button .mat-icon,\n.mat-form-field-suffix .mat-icon-button .mat-icon {\n height: 1.125em;\n line-height: 1.125;\n}\n.mat-form-field-infix {\n padding: 0.5em 0;\n border-top: 0.84375em solid transparent;\n}\n.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\n.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.34375em) scale(0.75);\n width: 133.3333333333%;\n}\n.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.34374em) scale(0.75);\n width: 133.3333433333%;\n}\n.mat-form-field-label-wrapper {\n top: -0.84375em;\n padding-top: 0.84375em;\n}\n.mat-form-field-label {\n top: 1.34375em;\n}\n.mat-form-field-underline {\n bottom: 1.34375em;\n}\n.mat-form-field-subscript-wrapper {\n font-size: 75%;\n margin-top: 0.6666666667em;\n top: calc(100% - 1.7916666667em);\n}\n.mat-form-field-appearance-legacy .mat-form-field-wrapper {\n padding-bottom: 1.25em;\n}\n.mat-form-field-appearance-legacy .mat-form-field-infix {\n padding: 0.4375em 0;\n}\n.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\n.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.001px);\n -ms-transform: translateY(-1.28125em) scale(0.75);\n width: 133.3333333333%;\n}\n.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.00101px);\n -ms-transform: translateY(-1.28124em) scale(0.75);\n width: 133.3333433333%;\n}\n.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.00102px);\n -ms-transform: translateY(-1.28123em) scale(0.75);\n width: 133.3333533333%;\n}\n.mat-form-field-appearance-legacy .mat-form-field-label {\n top: 1.28125em;\n}\n.mat-form-field-appearance-legacy .mat-form-field-underline {\n bottom: 1.25em;\n}\n.mat-form-field-appearance-legacy .mat-form-field-subscript-wrapper {\n margin-top: 0.5416666667em;\n top: calc(100% - 1.6666666667em);\n}\n@media print {\n .mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\n.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.28122em) scale(0.75);\n }\n .mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.28121em) scale(0.75);\n }\n .mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.2812em) scale(0.75);\n }\n}\n.mat-form-field-appearance-fill .mat-form-field-infix {\n padding: 0.25em 0 0.75em 0;\n}\n.mat-form-field-appearance-fill .mat-form-field-label {\n top: 1.09375em;\n margin-top: -0.5em;\n}\n.mat-form-field-appearance-fill.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\n.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-0.59375em) scale(0.75);\n width: 133.3333333333%;\n}\n.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-0.59374em) scale(0.75);\n width: 133.3333433333%;\n}\n.mat-form-field-appearance-outline .mat-form-field-infix {\n padding: 1em 0 1em 0;\n}\n.mat-form-field-appearance-outline .mat-form-field-label {\n top: 1.84375em;\n margin-top: -0.25em;\n}\n.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\n.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.59375em) scale(0.75);\n width: 133.3333333333%;\n}\n.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.59374em) scale(0.75);\n width: 133.3333433333%;\n}\n.mat-grid-tile-header,\n.mat-grid-tile-footer {\n font-size: 14px;\n}\n.mat-grid-tile-header .mat-line,\n.mat-grid-tile-footer .mat-line {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n box-sizing: border-box;\n}\n.mat-grid-tile-header .mat-line:nth-child(n+2),\n.mat-grid-tile-footer .mat-line:nth-child(n+2) {\n font-size: 12px;\n}\ninput.mat-input-element {\n margin-top: -0.0625em;\n}\n.mat-menu-item {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 14px;\n font-weight: 400;\n}\n.mat-paginator,\n.mat-paginator-page-size .mat-select-trigger {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 12px;\n}\n.mat-radio-button {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.mat-select {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.mat-select-trigger {\n height: 1.125em;\n}\n.mat-slide-toggle-content {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.mat-slider-thumb-label-text {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 12px;\n font-weight: 500;\n}\n.mat-stepper-vertical, .mat-stepper-horizontal {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.mat-step-label {\n font-size: 14px;\n font-weight: 400;\n}\n.mat-step-sub-label-error {\n font-weight: normal;\n}\n.mat-step-label-error {\n font-size: 14px;\n}\n.mat-step-label-selected {\n font-size: 14px;\n font-weight: 500;\n}\n.mat-tab-group {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.mat-tab-label, .mat-tab-link {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 14px;\n font-weight: 500;\n}\n.mat-toolbar,\n.mat-toolbar h1,\n.mat-toolbar h2,\n.mat-toolbar h3,\n.mat-toolbar h4,\n.mat-toolbar h5,\n.mat-toolbar h6 {\n font: 500 20px/32px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n margin: 0;\n}\n.mat-tooltip {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 10px;\n padding-top: 6px;\n padding-bottom: 6px;\n}\n.mat-tooltip-handset {\n font-size: 14px;\n padding-top: 8px;\n padding-bottom: 8px;\n}\n.mat-list-item {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.mat-list-option {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.mat-list-base .mat-list-item {\n font-size: 16px;\n}\n.mat-list-base .mat-list-item .mat-line {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n box-sizing: border-box;\n}\n.mat-list-base .mat-list-item .mat-line:nth-child(n+2) {\n font-size: 14px;\n}\n.mat-list-base .mat-list-option {\n font-size: 16px;\n}\n.mat-list-base .mat-list-option .mat-line {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n box-sizing: border-box;\n}\n.mat-list-base .mat-list-option .mat-line:nth-child(n+2) {\n font-size: 14px;\n}\n.mat-list-base .mat-subheader {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 14px;\n font-weight: 500;\n}\n.mat-list-base[dense] .mat-list-item {\n font-size: 12px;\n}\n.mat-list-base[dense] .mat-list-item .mat-line {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n box-sizing: border-box;\n}\n.mat-list-base[dense] .mat-list-item .mat-line:nth-child(n+2) {\n font-size: 12px;\n}\n.mat-list-base[dense] .mat-list-option {\n font-size: 12px;\n}\n.mat-list-base[dense] .mat-list-option .mat-line {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n box-sizing: border-box;\n}\n.mat-list-base[dense] .mat-list-option .mat-line:nth-child(n+2) {\n font-size: 12px;\n}\n.mat-list-base[dense] .mat-subheader {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 12px;\n font-weight: 500;\n}\n.mat-option {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 16px;\n}\n.mat-optgroup-label {\n font: 500 14px/24px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n.mat-simple-snackbar {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 14px;\n}\n.mat-simple-snackbar-action {\n line-height: 1;\n font-family: inherit;\n font-size: inherit;\n font-weight: 500;\n}\n.mat-tree {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.mat-tree-node,\n.mat-nested-tree-node {\n font-weight: 400;\n font-size: 14px;\n}\n.mat-ripple {\n overflow: hidden;\n position: relative;\n}\n.mat-ripple:not(:empty) {\n transform: translateZ(0);\n}\n.mat-ripple.mat-ripple-unbounded {\n overflow: visible;\n}\n.mat-ripple-element {\n position: absolute;\n border-radius: 50%;\n pointer-events: none;\n transition: opacity, transform 0ms cubic-bezier(0, 0, 0.2, 1);\n transform: scale(0);\n}\n.cdk-high-contrast-active .mat-ripple-element {\n display: none;\n}\n.cdk-visually-hidden {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n outline: 0;\n -webkit-appearance: none;\n -moz-appearance: none;\n}\n.cdk-overlay-container, .cdk-global-overlay-wrapper {\n pointer-events: none;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n}\n.cdk-overlay-container {\n position: fixed;\n z-index: 1000;\n}\n.cdk-overlay-container:empty {\n display: none;\n}\n.cdk-global-overlay-wrapper {\n display: flex;\n position: absolute;\n z-index: 1000;\n}\n.cdk-overlay-pane {\n position: absolute;\n pointer-events: auto;\n box-sizing: border-box;\n z-index: 1000;\n display: flex;\n max-width: 100%;\n max-height: 100%;\n}\n.cdk-overlay-backdrop {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 1000;\n pointer-events: auto;\n -webkit-tap-highlight-color: transparent;\n transition: opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1);\n opacity: 0;\n}\n.cdk-overlay-backdrop.cdk-overlay-backdrop-showing {\n opacity: 1;\n}\n@media screen and (-ms-high-contrast: active) {\n .cdk-overlay-backdrop.cdk-overlay-backdrop-showing {\n opacity: 0.6;\n }\n}\n.cdk-overlay-dark-backdrop {\n background: rgba(0, 0, 0, 0.32);\n}\n.cdk-overlay-transparent-backdrop, .cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing {\n opacity: 0;\n}\n.cdk-overlay-connected-position-bounding-box {\n position: absolute;\n z-index: 1000;\n display: flex;\n flex-direction: column;\n min-width: 1px;\n min-height: 1px;\n}\n.cdk-global-scrollblock {\n position: fixed;\n width: 100%;\n overflow-y: scroll;\n}\n@-webkit-keyframes cdk-text-field-autofill-start {\n /*!*/\n}\n@keyframes cdk-text-field-autofill-start {\n /*!*/\n}\n@-webkit-keyframes cdk-text-field-autofill-end {\n /*!*/\n}\n@keyframes cdk-text-field-autofill-end {\n /*!*/\n}\n.cdk-text-field-autofill-monitored:-webkit-autofill {\n -webkit-animation: cdk-text-field-autofill-start 0s 1ms;\n animation: cdk-text-field-autofill-start 0s 1ms;\n}\n.cdk-text-field-autofill-monitored:not(:-webkit-autofill) {\n -webkit-animation: cdk-text-field-autofill-end 0s 1ms;\n animation: cdk-text-field-autofill-end 0s 1ms;\n}\ntextarea.cdk-textarea-autosize {\n resize: none;\n}\ntextarea.cdk-textarea-autosize-measuring {\n height: auto !important;\n overflow: hidden !important;\n padding: 2px 0 !important;\n box-sizing: content-box !important;\n}\n/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/**\n * Spacing\n */\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/*===================*\\\n|| Icon sizes ||\n\\*===================*/\n/**\n * Makes text have maximum lines with ellipsis. Works on most modern browsers except\n * of Firefox..\n */\n/**\n * Spacing\n */\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/*===================*\\\n|| Icon sizes ||\n\\*===================*/\n/* Theme for the ripple elements.*/\n/* stylelint-disable material/no-prefixes */\n/* stylelint-enable */\n.mck-inherit-font {\n font: inherit;\n}\n.mck-content-expand, .mck-content-page {\n width: 100%;\n height: 100%;\n}\n.mck-content-expand-width {\n width: 100%;\n}\n.mck-content-expand-height {\n height: 100%;\n}\n.mck-content-with-footer-height {\n height: calc(100vh - 58px);\n}\n.mck-content-full-height, .mck-content-page-container {\n height: 100vh;\n}\n.mck-content-page {\n background: #F8F9FA;\n}\n.mck-content-body {\n width: 100%;\n display: block;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-content-body {\n max-width: 1024px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-content-body {\n max-width: 1024px;\n }\n}\n.mck-content-group {\n padding-left: 1rem;\n padding-right: 1rem;\n width: 100%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-content-group {\n max-width: 759px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-content-group {\n max-width: 759px;\n }\n}\n.mck-shadow {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n}\n.mck-flex-1 {\n flex: 1;\n}\n.mck-row, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix, .mck-row-flow {\n display: flex;\n flex-direction: row;\n}\n.mck-row.mck-center-justify, .mck-center-justify.mck-row-flow, .mck-row.mck-center, .mck-row.mck-button.mat-button, .mck-row.mat-button.mck-stroked-button, .mck-row.mat-button.mck-warning-button, .mck-row.mat-button.mck-secondary-button, .mck-row.mat-button.mck-primary-button, .mck-row.mck-button.mat-stroked-button, .mck-row.mat-stroked-button.mck-stroked-button, .mck-row.mat-stroked-button.mck-warning-button, .mck-row.mat-stroked-button.mck-secondary-button, .mck-row.mat-stroked-button.mck-primary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix, .mck-center.mck-row-flow, .mck-row-flow.mck-button.mat-button, .mck-row-flow.mat-button.mck-stroked-button, .mck-row-flow.mat-button.mck-warning-button, .mck-row-flow.mat-button.mck-secondary-button, .mck-row-flow.mat-button.mck-primary-button, .mck-row-flow.mck-button.mat-stroked-button, .mck-row-flow.mat-stroked-button.mck-stroked-button, .mck-row-flow.mat-stroked-button.mck-warning-button, .mck-row-flow.mat-stroked-button.mck-secondary-button, .mck-row-flow.mat-stroked-button.mck-primary-button {\n justify-content: center;\n}\n.mck-row.mck-center-align, .mck-center-align.mck-row-flow, .mck-row.mck-center, .mck-row.mck-button.mat-button, .mck-row.mat-button.mck-stroked-button, .mck-row.mat-button.mck-warning-button, .mck-row.mat-button.mck-secondary-button, .mck-row.mat-button.mck-primary-button, .mck-row.mck-button.mat-stroked-button, .mck-row.mat-stroked-button.mck-stroked-button, .mck-row.mat-stroked-button.mck-warning-button, .mck-row.mat-stroked-button.mck-secondary-button, .mck-row.mat-stroked-button.mck-primary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix, .mck-center.mck-row-flow, .mck-row-flow.mck-button.mat-button, .mck-row-flow.mat-button.mck-stroked-button, .mck-row-flow.mat-button.mck-warning-button, .mck-row-flow.mat-button.mck-secondary-button, .mck-row-flow.mat-button.mck-primary-button, .mck-row-flow.mck-button.mat-stroked-button, .mck-row-flow.mat-stroked-button.mck-stroked-button, .mck-row-flow.mat-stroked-button.mck-warning-button, .mck-row-flow.mat-stroked-button.mck-secondary-button, .mck-row-flow.mat-stroked-button.mck-primary-button {\n align-items: center;\n}\n.mck-row.mck-stretch, .mck-form-input mat-form-field.mck-center-suffix .mck-stretch.mat-form-field-infix, .mck-stretch.mck-row-flow {\n align-items: stretch;\n}\n.mck-row-flow {\n flex-wrap: wrap;\n}\n.mck-row.mck-scroll, .mck-form-input mat-form-field.mck-center-suffix .mck-scroll.mat-form-field-infix, .mck-scroll.mck-row-flow {\n overflow-x: scroll;\n}\n.mck-column, .mck-button.mat-button.mat-button, .mat-button.mat-button.mck-stroked-button, .mat-button.mat-button.mck-warning-button, .mat-button.mat-button.mck-secondary-button, .mat-button.mat-button.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button, .mat-stroked-button.mat-stroked-button.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-primary-button {\n display: flex;\n flex-direction: column;\n}\n.mck-column.mck-center, .mck-column.mck-button.mat-button, .mck-column.mat-button.mck-stroked-button, .mck-column.mat-button.mck-warning-button, .mck-column.mat-button.mck-secondary-button, .mck-column.mat-button.mck-primary-button, .mck-column.mck-button.mat-stroked-button, .mck-column.mat-stroked-button.mck-stroked-button, .mck-column.mat-stroked-button.mck-warning-button, .mck-column.mat-stroked-button.mck-secondary-button, .mck-column.mat-stroked-button.mck-primary-button, .mck-center.mck-button.mat-button, .mck-center.mat-button.mck-stroked-button, .mck-center.mat-button.mck-warning-button, .mck-center.mat-button.mck-secondary-button, .mck-center.mat-button.mck-primary-button, .mck-button.mat-button, .mat-button.mck-stroked-button, .mat-button.mck-warning-button, .mat-button.mck-secondary-button, .mat-button.mck-primary-button, .mck-button.mat-button.mat-stroked-button, .mat-button.mat-stroked-button.mck-stroked-button, .mat-button.mat-stroked-button.mck-warning-button, .mat-button.mat-stroked-button.mck-secondary-button, .mat-button.mat-stroked-button.mck-primary-button, .mck-center.mck-button.mat-stroked-button, .mck-center.mat-stroked-button.mck-stroked-button, .mck-center.mat-stroked-button.mck-warning-button, .mck-center.mat-stroked-button.mck-secondary-button, .mck-center.mat-stroked-button.mck-primary-button, .mck-button.mat-stroked-button, .mat-stroked-button.mck-stroked-button, .mat-stroked-button.mck-warning-button, .mat-stroked-button.mck-secondary-button, .mat-stroked-button.mck-primary-button, .mck-form-input mat-form-field.mck-center-suffix .mck-column.mat-form-field-infix, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mck-button.mat-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-button.mck-stroked-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-button.mck-warning-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-button.mck-secondary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-button.mck-primary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mck-button.mat-stroked-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-stroked-button.mck-stroked-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-stroked-button.mck-warning-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-stroked-button.mck-secondary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-stroked-button.mck-primary-button {\n justify-content: center;\n align-items: center;\n}\n.mck-column.mck-space-between, .mck-space-between.mck-button.mat-button, .mck-space-between.mat-button.mck-stroked-button, .mck-space-between.mat-button.mck-warning-button, .mck-space-between.mat-button.mck-secondary-button, .mck-space-between.mat-button.mck-primary-button, .mck-space-between.mck-button.mat-stroked-button, .mck-space-between.mat-stroked-button.mck-stroked-button, .mck-space-between.mat-stroked-button.mck-warning-button, .mck-space-between.mat-stroked-button.mck-secondary-button, .mck-space-between.mat-stroked-button.mck-primary-button {\n justify-content: space-between;\n}\n.mck-column.mck-stretch, .mck-stretch.mck-button.mat-button, .mck-stretch.mat-button.mck-stroked-button, .mck-stretch.mat-button.mck-warning-button, .mck-stretch.mat-button.mck-secondary-button, .mck-stretch.mat-button.mck-primary-button, .mck-stretch.mck-button.mat-stroked-button, .mck-stretch.mat-stroked-button.mck-stroked-button, .mck-stretch.mat-stroked-button.mck-warning-button, .mck-stretch.mat-stroked-button.mck-secondary-button, .mck-stretch.mat-stroked-button.mck-primary-button {\n align-items: stretch;\n}\n.mck-column.mck-scroll, .mck-scroll.mck-button.mat-button, .mck-scroll.mat-button.mck-stroked-button, .mck-scroll.mat-button.mck-warning-button, .mck-scroll.mat-button.mck-secondary-button, .mck-scroll.mat-button.mck-primary-button, .mck-scroll.mck-button.mat-stroked-button, .mck-scroll.mat-stroked-button.mck-stroked-button, .mck-scroll.mat-stroked-button.mck-warning-button, .mck-scroll.mat-stroked-button.mck-secondary-button, .mck-scroll.mat-stroked-button.mck-primary-button {\n overflow-y: scroll;\n overflow-y: overlay;\n}\n.mck-column.mck-flex-end, .mck-flex-end.mck-button.mat-button, .mck-flex-end.mat-button.mck-stroked-button, .mck-flex-end.mat-button.mck-warning-button, .mck-flex-end.mat-button.mck-secondary-button, .mck-flex-end.mat-button.mck-primary-button, .mck-flex-end.mck-button.mat-stroked-button, .mck-flex-end.mat-stroked-button.mck-stroked-button, .mck-flex-end.mat-stroked-button.mck-warning-button, .mck-flex-end.mat-stroked-button.mck-secondary-button, .mck-flex-end.mat-stroked-button.mck-primary-button {\n justify-content: flex-end;\n}\n.mck-overflow {\n overflow: auto;\n}\n.mck-bordered, .mck-input {\n border-radius: 0;\n border: 1px solid #B3B3B3;\n}\n.mck-bordered:hover, .mck-input:hover {\n border-color: #464646;\n}\n.mck-bordered:focus, .mck-input:focus {\n border-color: #1F40E6;\n}\n.mck-bordered[disabled=true], .mck-input[disabled=true] {\n pointer-events: none;\n border-color: #f0f0f0;\n color: #ccc;\n}\n.mck-date-display {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n height: 43px;\n padding: 1rem 0.5rem;\n transition: border 200ms, box-shadow 200ms;\n}\n.mck-form-input .mat-form-field-wrapper {\n padding-bottom: 0.5rem;\n}\n.mck-form-input mat-form-field {\n min-width: auto !important;\n}\n.mck-form-input mat-form-field .mat-form-field-infix {\n width: 100%;\n padding-top: 0.7rem !important;\n padding-bottom: 0.5rem !important;\n}\n.mck-form-input mat-form-field .mat-form-field-outline {\n min-height: 2.7rem;\n color: rgba(0, 0, 0, 0.27);\n}\n.mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\n margin-top: 2px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-flex {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-flex {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-outline, .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\n height: 2rem;\n min-height: 2rem;\n }\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-outline, .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\n height: 2rem;\n min-height: 2rem;\n }\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n}\n.mck-form-input mat-form-field.mat-s {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-form-input mat-select {\n margin-top: 0.2rem;\n}\n.mck-form-input mat-select .mat-select-arrow {\n visibility: hidden;\n}\n.mck-form-input mat-select .mat-select-value > .mat-select-value-text > span {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 400;\n font-family: \"McKinsey Sans\";\n}\n.mck-form-input .mat-form-field-outline > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input .mat-form-field-outline > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input .mat-form-field-outline > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: #B3B3B3;\n border-width: 1px;\n border-radius: 0;\n}\n.mck-form-input .available .mat-form-field-outline > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input .available .mat-form-field-outline > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input .available .mat-form-field-outline > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: #3aa537;\n}\n.mck-form-input .booked .mat-form-field-outline > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input .booked .mat-form-field-outline > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input .booked .mat-form-field-outline > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: #e12e41;\n}\n.mck-form-input .mat-form-field-outline-thick > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input .mat-form-field-outline-thick > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input .mat-form-field-outline-thick > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: #1F40E6;\n border-width: 1px;\n border-radius: 0;\n}\n.mck-form-input > mat-form-field.mck-error .mat-form-field-wrapper {\n padding-bottom: 0;\n}\n.mck-form-input > mat-form-field.mck-error .mat-form-field-outline > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input > mat-form-field.mck-error .mat-form-field-outline > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input > mat-form-field.mck-error .mat-form-field-outline > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: #E12E40;\n}\n.mck-form-input mck-close-icon.mat-chip-remove.mat-chip-remove {\n opacity: 1;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n}\n.mck-form-input mat-label {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 400;\n text-align: left;\n margin-bottom: 0.5rem;\n}\n.mck-form-input mat-radio-button {\n margin-right: 1rem;\n}\n.mck-form-input .mat-radio-label-content {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-form-input .mat-radio-outer-circle {\n border-color: #1F40E6 !important;\n border-width: 1px !important;\n}\n.mck-form-input .mat-radio-inner-circle {\n background-color: #1F40E6 !important;\n}\n.mck-form-input mat-radio-group {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n}\n.mck-form-input mat-radio-group > mat-radio-button:last-child {\n margin-right: 0;\n}\n.mck-form-input-container > .mck-form-input, .mck-form-input-container > mck-select {\n margin-bottom: 0.5rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-form-input-container > .mck-form-input, .mck-form-input-container > mck-select {\n margin-bottom: 1.75rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-form-input-container > .mck-form-input, .mck-form-input-container > mck-select {\n margin-bottom: 1.75rem;\n }\n}\n.mck-form-input-container .mck-radio-select {\n margin-bottom: 1rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-form-input-container .mck-radio-select {\n margin-bottom: 1.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-form-input-container .mck-radio-select {\n margin-bottom: 1.5rem;\n }\n}\n.mck-form-input mat-chip.mat-standard-chip.mat-standard-chip {\n border-radius: 3px;\n min-height: 1.5rem;\n background-color: #333333;\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 0.75rem;\n line-height: 1.5rem;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input mat-chip.mat-standard-chip.mat-standard-chip {\n line-height: inherit;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input mat-chip.mat-standard-chip.mat-standard-chip {\n line-height: inherit;\n }\n}\n.mck-form-input mat-checkbox.mat-checkbox.mat-checkbox {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n}\n.mck-form-input mat-checkbox div.mat-checkbox-background.mat-checkbox-background {\n background-color: #1F40E6;\n}\n.mck-form-input mat-checkbox div.mat-checkbox-background.mat-checkbox-background.mck-checkbox-disabled.mat-checkbox-disabled {\n background-color: #D0D0D0;\n}\n.mck-form-input mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n color: #B3B3B3;\n}\n.mck-borderless {\n border: none;\n}\n.mck-borderless:hover, .mck-borderless:focus, .mck-borderless:disabled {\n border: none;\n}\n.mck-select-panel {\n margin-top: 0 !important;\n border-radius: unset !important;\n margin-top: 35px !important;\n margin-left: 5px;\n}\n.mck-select-panel mat-option {\n padding-left: 0;\n padding-right: 0;\n}\n.mck-select-panel mat-option.mat-option-text {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-select-panel.mck-margin-top {\n margin-top: 1.5rem !important;\n}\n.mck-checkbox-panel.mat-autocomplete-panel.mat-autocomplete-panel {\n top: -10px;\n max-height: 278px;\n}\n.mck-checkbox-panel mat-option.mck-truncated .mat-checkbox-label.mat-checkbox-label {\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n.mck-checkbox-panel mat-option {\n padding-left: 0;\n padding-right: 0;\n line-height: 24px;\n height: unset;\n min-height: 36px;\n}\n.mck-checkbox-panel mat-option .mat-checkbox-label.mat-checkbox-label {\n flex: 1;\n}\n.mck-checkbox-panel mat-option .mat-checkbox-label.mat-checkbox-label {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n text-align: left;\n}\n.mck-checkbox-panel mat-option.mck-checkbox-group-header .mat-checkbox-label.mat-checkbox-label {\n font-weight: 500;\n}\n.mck-checkbox-panel mat-option.mck-checkbox-group-child {\n margin-left: 2rem;\n}\n.mck-checkbox-panel mat-option mat-checkbox label.mat-checkbox-layout {\n width: 100%;\n padding-left: 16px;\n padding-right: 16px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-checkbox-panel mat-option mat-checkbox label.mat-checkbox-layout {\n padding-left: 2px;\n padding-right: 2px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-checkbox-panel mat-option mat-checkbox label.mat-checkbox-layout {\n padding-left: 2px;\n padding-right: 2px;\n }\n}\n.mck-checkbox-panel mat-option mat-checkbox div.mat-checkbox-frame.mat-checkbox-frame {\n border: 1px solid #B3B3B3;\n border-radius: 0;\n}\n.mck-checkbox-panel mat-option mat-checkbox.mat-checkbox-checked div.mat-checkbox-background.mat-checkbox-background {\n background-color: #1F40E6;\n}\n.mck-checkbox-panel mat-option mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled div.mat-checkbox-background.mat-checkbox-background {\n background-color: #D0D0D0;\n}\n.mck-checkbox-panel mat-option mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled .mat-checkbox-label.mat-checkbox-label {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n color: #B3B3B3;\n text-align: left;\n}\n.mck-checkbox-panel mat-option mat-checkbox .mat-checkbox-inner-container {\n width: 1.25rem;\n height: 1.25rem;\n}\n.mck-select-option-selected {\n font-weight: 500;\n font-family: \"McKinsey Sans\";\n color: black;\n background-color: #E6E6E6;\n}\n.mck-select-option-selected .mck-spacer-content {\n background-color: #1F40E6;\n margin-right: 0.75rem;\n}\n.mck-select-option-unselected {\n font-weight: 400;\n font-family: \"McKinsey Sans\";\n}\n.mck-select-option-unselected.mck-ignore-disabled {\n color: black;\n}\n.mck-select-option-unselected .mck-spacer-content {\n visibility: hidden;\n margin-right: 0.75rem;\n}\n.mck-button.mat-button.mat-button, .mat-button.mat-button.mck-stroked-button, .mat-button.mat-button.mck-warning-button, .mat-button.mat-button.mck-secondary-button, .mat-button.mat-button.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button, .mat-stroked-button.mat-stroked-button.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-primary-button {\n height: 40px;\n border-radius: 0;\n border: none;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button, .mat-button.mat-button.mck-stroked-button, .mat-button.mat-button.mck-warning-button, .mat-button.mat-button.mck-secondary-button, .mat-button.mat-button.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button, .mat-stroked-button.mat-stroked-button.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-primary-button {\n height: 48px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button, .mat-button.mat-button.mck-stroked-button, .mat-button.mat-button.mck-warning-button, .mat-button.mat-button.mck-secondary-button, .mat-button.mat-button.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button, .mat-stroked-button.mat-stroked-button.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-primary-button {\n height: 48px;\n }\n}\n.mck-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper, .mck-button.mat-stroked-button.mat-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: normal;\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper, .mck-button.mat-stroked-button.mat-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper {\n font-size: 0.875rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper, .mck-button.mat-stroked-button.mat-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper {\n font-size: 0.875rem;\n }\n}\n.mck-button.mat-button.mat-button.mck-short, .mat-button.mat-button.mck-short.mck-stroked-button, .mat-button.mat-button.mck-short.mck-warning-button, .mat-button.mat-button.mck-short.mck-secondary-button, .mat-button.mat-button.mck-short.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short, .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button {\n height: 32px;\n min-width: 83px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-short, .mat-button.mat-button.mck-short.mck-stroked-button, .mat-button.mat-button.mck-short.mck-warning-button, .mat-button.mat-button.mck-short.mck-secondary-button, .mat-button.mat-button.mck-short.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short, .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-short, .mat-button.mat-button.mck-short.mck-stroked-button, .mat-button.mat-button.mck-short.mck-warning-button, .mat-button.mat-button.mck-short.mck-secondary-button, .mat-button.mat-button.mck-short.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short, .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-short.mck-short-height, .mat-button.mat-button.mck-short.mck-short-height.mck-stroked-button, .mat-button.mat-button.mck-short.mck-short-height.mck-warning-button, .mat-button.mat-button.mck-short.mck-short-height.mck-secondary-button, .mat-button.mat-button.mck-short.mck-short-height.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short.mck-short-height, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-primary-button {\n height: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-short.mck-short-height, .mat-button.mat-button.mck-short.mck-short-height.mck-stroked-button, .mat-button.mat-button.mck-short.mck-short-height.mck-warning-button, .mat-button.mat-button.mck-short.mck-short-height.mck-secondary-button, .mat-button.mat-button.mck-short.mck-short-height.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short.mck-short-height, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-primary-button {\n height: 40px;\n }\n}\n.mck-button.mat-button.mat-button.mck-square, .mat-button.mat-button.mck-square.mck-stroked-button, .mat-button.mat-button.mck-square.mck-warning-button, .mat-button.mat-button.mck-square.mck-secondary-button, .mat-button.mat-button.mck-square.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-square, .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button {\n height: 32px;\n width: 32px;\n min-width: 32px;\n padding: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-square, .mat-button.mat-button.mck-square.mck-stroked-button, .mat-button.mat-button.mck-square.mck-warning-button, .mat-button.mat-button.mck-square.mck-secondary-button, .mat-button.mat-button.mck-square.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-square, .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button {\n width: 40px;\n height: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-square, .mat-button.mat-button.mck-square.mck-stroked-button, .mat-button.mat-button.mck-square.mck-warning-button, .mat-button.mat-button.mck-square.mck-secondary-button, .mat-button.mat-button.mck-square.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-square, .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button {\n width: 40px;\n height: 40px;\n }\n}\n.mck-primary-button.mat-button.mat-button {\n background-color: #1F40E6;\n}\n.mck-primary-button.mat-button.mat-button[disabled], .mck-primary-button.mat-button.mat-button.disabled {\n background-color: #D0D0D0;\n color: #757575;\n cursor: not-allowed;\n}\n.mck-primary-button.mat-button.mat-button[disabled] > .mat-button-wrapper.mat-button-wrapper, .mck-primary-button.mat-button.mat-button.disabled > .mat-button-wrapper.mat-button-wrapper {\n color: #757575;\n}\n.mck-primary-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper {\n color: white;\n}\n.mck-secondary-button.mat-stroked-button.mat-stroked-button {\n border: 1px solid #D0D0D0;\n border-radius: 0;\n border: 1px solid #2251FF;\n color: #2251FF;\n}\n.mck-secondary-button.mat-stroked-button.mat-stroked-button[disabled], .mck-secondary-button.mat-stroked-button.mat-stroked-button.disabled {\n border: 1px solid #D0D0D0;\n color: #333333;\n cursor: not-allowed;\n}\n.mck-secondary-button.mat-button.mat-button {\n background-color: white;\n}\n.mck-secondary-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper {\n color: #333333;\n}\n.mck-warning-button.mat-button.mat-button {\n background-color: #ffd048;\n}\n.mck-warning-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper {\n color: black;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button {\n border: 2px solid #B3B3B3;\n border-radius: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding-left: 1.75rem;\n padding-right: 1.75rem;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short {\n height: 32px;\n min-width: 83px;\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short {\n height: 48px;\n min-width: 155px;\n }\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-primary {\n border-width: 1px;\n border-color: #1F40E6;\n color: #1F40E6;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-thin-border-light {\n border-color: #D0D0D0;\n border-width: 1px;\n}\n.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: normal;\n color: #1F40E6;\n}\n.mck-toggle-button {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n border: 1px solid #B3B3B3;\n border-color: #D0D0D0;\n min-width: 59px;\n background-color: white;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-toggle-button {\n min-width: 132px;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-toggle-button {\n min-width: 132px;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n }\n}\n.mck-toggle-button-selected {\n color: #1F40E6;\n}\n.mck-date-picker {\n width: 100% !important;\n height: 100% !important;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-date-picker {\n max-width: 23rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-date-picker {\n max-width: 23rem;\n }\n}\n.mck-date-picker > .header.header {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n color: #051C2C;\n margin-top: 1.25rem;\n}\n.mck-date-picker > .header.header > .arrow.arrow {\n width: 2.375rem;\n height: 2rem;\n}\n.mck-date-picker > .header.header > .arrow.arrow > .icon.icon {\n width: 1rem;\n height: 1rem;\n}\n.mck-date-picker > .header.header > .arrow.arrow > .next.next {\n background-image: url('arrow-forward.svg');\n}\n.mck-date-picker > .header.header > .arrow.arrow > .previous.previous {\n background-image: url('arrow-backward.svg');\n}\n.mck-date-picker > .month {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n}\n.mck-date-picker > .week {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n color: #767676;\n}\n.mck-date-picker > .body {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.mck-date-picker > .body > div > div.date > .dot {\n display: none;\n}\n.mck-date-picker > .body > div > div.date.disabled {\n background-color: transparent;\n border-radius: 0;\n color: #767676;\n}\n.mck-date-picker > .body > div > div.date.active {\n border-radius: 0;\n background-color: #1F40E6;\n}\n.mck-date-picker > .body > div > div.date.non-month {\n color: #767676;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-spacer-content-collapse-tablet {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-spacer-content-collapse-tablet {\n display: none;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .mck-spacer-content-collapse-tablet {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .mck-spacer-content-collapse-tablet {\n display: none;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-spacer-content-expand-mobile {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-spacer-content-expand-mobile {\n display: none;\n }\n}\n.mck-spacer-content-divider {\n background-color: #E6E6E6;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n border-radius: 0;\n border-top: 1px solid #E6E6E6;\n border-bottom: 1px solid #E6E6E6;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded {\n background-color: #F0F0F0;\n border-bottom: none;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded .mck-collapse-icon {\n width: 24px;\n height: 24px;\n background-image: url('chevron-close.svg');\n background-size: contain;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded .mck-collapse-icon {\n width: 48px;\n height: 48px;\n background-image: url('chevron-close-large.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded .mck-collapse-icon {\n width: 48px;\n height: 48px;\n background-image: url('chevron-close-large.svg');\n background-size: contain;\n }\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body {\n padding-left: 0;\n padding-right: 0;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 0.75rem;\n line-height: 1.4;\n padding-left: 1rem;\n padding-right: 1rem;\n text-align: left;\n color: black;\n font-weight: normal;\n padding-bottom: 0.5rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\n font-size: 1rem;\n line-height: 1.6;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\n font-size: 1rem;\n line-height: 1.6;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n }\n}\n.mck-expansion-panel mat-expansion-panel-header {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.mck-expansion-panel mat-expansion-panel-header > span.mat-content {\n align-items: center;\n}\n.mck-expansion-panel mat-panel-title {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n color: black;\n font-weight: normal;\n}\n.mck-expansion-panel .mck-collapse-icon {\n width: 24px;\n height: 24px;\n background-image: url('chevron-open.svg');\n background-size: contain;\n transform: rotate(0deg);\n transition: transform 0.5s ease;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel .mck-collapse-icon {\n width: 48px;\n height: 48px;\n background-image: url('chevron-open-large.svg');\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel .mck-collapse-icon {\n width: 48px;\n height: 48px;\n background-image: url('chevron-open-large.svg');\n background-size: contain;\n }\n}\n.mck-expansion-panel .mck-collapse-icon.expanded {\n transform: rotate(180deg);\n}\n.mck-icon-fill-open {\n fill: #1F40E6;\n}\n.mck-icon-fill-close {\n fill: #767676;\n}\n.mck-icon-fill-black {\n fill: black;\n stroke: black;\n}\n.mck-icon-fill-white {\n fill: white;\n stroke: white;\n}\n.mck-icon-fill-gray {\n fill: #333333;\n stroke: #333333;\n}\n.mck-min {\n max-width: 581px !important;\n width: 80vw;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-min {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-min .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-min {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-min .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n.mck-noexpand {\n max-width: 581px !important;\n width: 80vw !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-noexpand {\n width: calc(100vw - 32px) !important;\n max-height: 100vh;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-noexpand {\n width: calc(100vw - 32px) !important;\n max-height: 100vh;\n }\n}\n.mck-modal {\n max-width: 800px !important;\n width: 80vw;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n.mck-modal-mini {\n max-width: 580px !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-mini {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-mini .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-mini {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-mini .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n.mck-modal-survey {\n max-width: 691px !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-survey .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-survey .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n.mck-modal-wide {\n max-width: 1024px !important;\n width: 100vw;\n height: 95vh;\n max-height: 100vh;\n}\n.mck-modal-wide .mat-dialog-content {\n background-color: #F8F9FA;\n padding: 0 !important;\n overflow: hidden;\n}\n.mck-modal-wide .mat-dialog-content .mat-icon-button[name=CloseButton] {\n position: relative;\n right: 32px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide .mat-dialog-content .mat-icon-button[name=CloseButton] .close-image {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide .mat-dialog-content .mat-icon-button[name=CloseButton] .close-image {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n.mck-modal-wide-manage-booking {\n max-width: 1250px !important;\n width: 100vw;\n max-height: 95vh;\n}\n.mck-modal-wide-manage-booking .mat-dialog-content {\n background-color: #F8F9FA;\n padding: 0 !important;\n overflow: hidden;\n}\n.mck-modal-wide-manage-booking .mat-dialog-content .mat-icon-button[name=CloseButton] {\n position: relative;\n right: 32px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide-manage-booking .mat-dialog-content .mat-icon-button[name=CloseButton] .close-image {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide-manage-booking .mat-dialog-content .mat-icon-button[name=CloseButton] .close-image {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide-manage-booking {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide-manage-booking .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide-manage-booking {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide-manage-booking .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-alert {\n max-width: 100vw !important;\n width: 100vw;\n margin-left: 1rem;\n margin-right: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-alert {\n max-width: 100vw !important;\n width: 100vw;\n margin-left: 1rem;\n margin-right: 1rem;\n }\n}\n.mck-alert-backdrop {\n background: rgba(5, 28, 44, 0.85);\n}\n.mck-slide-toggle.mat-slide-toggle.mat-checked:not(.mat-disabled) .mat-slide-toggle-bar.mat-slide-toggle-bar {\n background-color: #2251FF;\n}\n.mck-slide-toggle.mat-slide-toggle.mat-checked:not(.mat-disabled) .mat-slide-toggle-thumb.mat-slide-toggle-thumb {\n background-color: white;\n}\n.mck-slide-toggle.mat-slide-toggle {\n height: auto;\n}\n.mck-slide-toggle .mat-slide-toggle-content.mat-slide-toggle-content {\n flex: 1;\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n white-space: normal;\n}\n.mck-slide-toggle .mat-slide-toggle-thumb.mat-slide-toggle-thumb {\n width: 14px;\n height: 14px;\n transform: translate(50%, 50%);\n}\n.mck-slide-toggle .mat-slide-toggle-thumb-container.mat-slide-toggle-thumb-container {\n top: -4px;\n left: -4px;\n}\n.mck-slide-toggle .mat-slide-toggle-bar.mat-slide-toggle-bar {\n height: 20px;\n background-color: #D0D0D0;\n border-radius: 20px;\n}\n.mck-skeleton {\n background-color: #E6E6E6;\n}\n.mck-skeleton-checkbox {\n float: left;\n}\n.mck-skeleton-checkbox > .loader.loader {\n background-color: #E6E6E6;\n width: 20px;\n height: 20px;\n margin-bottom: 0;\n}\n.mck-skeleton-header > .loader.loader {\n background-color: #E6E6E6;\n width: 100vw;\n margin-bottom: 0;\n max-width: 215px;\n}\n.mck-skeleton-image > .loader.loader {\n background-color: #E6E6E6;\n width: 81px;\n height: 82px;\n margin-bottom: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-skeleton-image > .loader.loader {\n width: 219px;\n height: 119px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-skeleton-image > .loader.loader {\n width: 219px;\n height: 119px;\n }\n}\n.mck-skeleton-status > .loader.loader {\n background-color: #E6E6E6;\n width: 117px;\n height: 78px;\n margin-top: 10px;\n margin-bottom: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-skeleton-status > .loader.loader {\n width: 117px;\n height: 78px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-skeleton-status > .loader.loader {\n width: 117px;\n height: 78px;\n }\n}\n.mck-skeleton-line-1 > .loader.loader {\n background-color: #E6E6E6;\n height: 23px;\n max-width: 176px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-1 > .loader.loader {\n max-width: 219px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-1 > .loader.loader {\n max-width: 219px;\n }\n}\n.mck-skeleton-line-2 > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 165px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-2 > .loader.loader {\n max-width: 189px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-2 > .loader.loader {\n max-width: 189px;\n }\n}\n.mck-skeleton-line-3 > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 147px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-3 > .loader.loader {\n max-width: 189px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-3 > .loader.loader {\n max-width: 189px;\n }\n}\n.mck-skeleton-line-30p > .loader.loader, .mck-skeleton-line-30p-thin > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 30%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-30p > .loader.loader, .mck-skeleton-line-30p-thin > .loader.loader {\n max-width: 30%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-30p > .loader.loader, .mck-skeleton-line-30p-thin > .loader.loader {\n max-width: 30%;\n }\n}\n.mck-skeleton-line-30p-thin > .loader.loader, .mck-skeleton-line-30p-thin-thin > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-45p > .loader.loader, .mck-skeleton-line-45p-thin > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 45%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-45p > .loader.loader, .mck-skeleton-line-45p-thin > .loader.loader {\n max-width: 45%;\n margin-right: 45%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-45p > .loader.loader, .mck-skeleton-line-45p-thin > .loader.loader {\n max-width: 45%;\n margin-right: 45%;\n }\n}\n.mck-skeleton-line-45p-thin > .loader.loader, .mck-skeleton-line-45p-thin-thin > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-50p > .loader.loader, .mck-skeleton-line-50p-thin > .loader.loader, .mck-skeleton-line-50p-thick > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 50%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-50p > .loader.loader, .mck-skeleton-line-50p-thin > .loader.loader, .mck-skeleton-line-50p-thick > .loader.loader {\n max-width: 50%;\n margin-right: 45%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-50p > .loader.loader, .mck-skeleton-line-50p-thin > .loader.loader, .mck-skeleton-line-50p-thick > .loader.loader {\n max-width: 50%;\n margin-right: 45%;\n }\n}\n.mck-skeleton-line-50p-thin > .loader.loader, .mck-skeleton-line-50p-thin-thin > .loader.loader, .mck-skeleton-line-50p-thick-thin > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-50p-thick > .loader.loader, .mck-skeleton-line-50p-thin-thick > .loader.loader, .mck-skeleton-line-50p-thick-thick > .loader.loader {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-60p > .loader.loader, .mck-skeleton-line-60p-thin > .loader.loader, .mck-skeleton-line-60p-thick > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 60%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-60p > .loader.loader, .mck-skeleton-line-60p-thin > .loader.loader, .mck-skeleton-line-60p-thick > .loader.loader {\n max-width: 60%;\n margin-right: 35%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-60p > .loader.loader, .mck-skeleton-line-60p-thin > .loader.loader, .mck-skeleton-line-60p-thick > .loader.loader {\n max-width: 60%;\n margin-right: 35%;\n }\n}\n.mck-skeleton-line-60p-thin > .loader.loader, .mck-skeleton-line-60p-thin-thin > .loader.loader, .mck-skeleton-line-60p-thick-thin > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-60p-thick > .loader.loader, .mck-skeleton-line-60p-thin-thick > .loader.loader, .mck-skeleton-line-60p-thick-thick > .loader.loader {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-70p > .loader.loader, .mck-skeleton-line-70p-thin > .loader.loader, .mck-skeleton-line-70p-thick > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 70%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-70p > .loader.loader, .mck-skeleton-line-70p-thin > .loader.loader, .mck-skeleton-line-70p-thick > .loader.loader {\n max-width: 70%;\n margin-right: 25%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-70p > .loader.loader, .mck-skeleton-line-70p-thin > .loader.loader, .mck-skeleton-line-70p-thick > .loader.loader {\n max-width: 70%;\n margin-right: 25%;\n }\n}\n.mck-skeleton-line-70p-thin > .loader.loader, .mck-skeleton-line-70p-thin-thin > .loader.loader, .mck-skeleton-line-70p-thick-thin > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-70p-thick > .loader.loader, .mck-skeleton-line-70p-thin-thick > .loader.loader, .mck-skeleton-line-70p-thick-thick > .loader.loader {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-80p > .loader.loader, .mck-skeleton-line-80p-thin > .loader.loader, .mck-skeleton-line-80p-thick > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 80%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-80p > .loader.loader, .mck-skeleton-line-80p-thin > .loader.loader, .mck-skeleton-line-80p-thick > .loader.loader {\n max-width: 80%;\n margin-right: 15%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-80p > .loader.loader, .mck-skeleton-line-80p-thin > .loader.loader, .mck-skeleton-line-80p-thick > .loader.loader {\n max-width: 80%;\n margin-right: 15%;\n }\n}\n.mck-skeleton-line-80p-thin > .loader.loader, .mck-skeleton-line-80p-thin-thin > .loader.loader, .mck-skeleton-line-80p-thick-thin > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-80p-thick > .loader.loader, .mck-skeleton-line-80p-thin-thick > .loader.loader, .mck-skeleton-line-80p-thick-thick > .loader.loader {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-90p > .loader.loader, .mck-skeleton-line-90p-thin > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 90%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-90p > .loader.loader, .mck-skeleton-line-90p-thin > .loader.loader {\n max-width: 90%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-90p > .loader.loader, .mck-skeleton-line-90p-thin > .loader.loader {\n max-width: 90%;\n }\n}\n.mck-skeleton-line-90p-thin > .loader.loader, .mck-skeleton-line-90p-thin-thin > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-load-more > .loader.loader {\n background-color: #E6E6E6;\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n width: calc(100vw - (2 * 1rem));\n height: 40px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-load-more > .loader.loader {\n max-width: 320px;\n height: 50px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-load-more > .loader.loader {\n max-width: 320px;\n height: 50px;\n }\n}\n.mck-skeleton-load-more-100p > .loader.loader, .mck-skeleton-header > .loader.loader, .mck-skeleton-room-availability > .loader.loader {\n background-color: #E6E6E6;\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n width: calc(100vw - (2 * 1rem));\n height: 40px;\n max-width: none;\n width: 100%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-load-more-100p > .loader.loader, .mck-skeleton-header > .loader.loader, .mck-skeleton-room-availability > .loader.loader {\n max-width: none;\n width: 100%;\n height: 50px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-load-more-100p > .loader.loader, .mck-skeleton-header > .loader.loader, .mck-skeleton-room-availability > .loader.loader {\n max-width: none;\n width: 100%;\n height: 50px;\n }\n}\n.mck-skeleton-load-more-100p > .loader.loader-room-availability > .loader.loader, .mck-skeleton-header > .loader.loader-room-availability > .loader.loader, .mck-skeleton-room-availability > .loader.loader-room-availability > .loader.loader {\n height: 124px;\n margin-bottom: 4px;\n}\n.mck-heading-5 {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 1.5rem;\n line-height: 1.333;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-heading-5 {\n font-size: 1.75rem;\n line-height: 1.142;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-heading-5 {\n font-size: 1.75rem;\n line-height: 1.142;\n }\n}\nngx-mat-select-search .mat-select-search-no-entries-found {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\nngx-mat-select-search .mat-select-search-input {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\nngx-mat-select-search button.mat-button.mat-select-search-clear {\n background-color: transparent;\n border: none;\n color: black;\n}\n::-webkit-scrollbar {\n width: 16px;\n height: 18px;\n}\n::-webkit-scrollbar-thumb {\n height: 1.5rem;\n border: 4px solid rgba(0, 0, 0, 0);\n background-clip: padding-box;\n border-radius: 8px;\n background-color: #757575;\n -webkit-box-shadow: inset -1px -1px 0px rgba(0, 0, 0, 0.05), inset 1px 1px 0px rgba(0, 0, 0, 0.05);\n}\n::-webkit-scrollbar-button {\n width: 0;\n height: 0;\n display: none;\n}\n::-webkit-scrollbar-corner {\n background-color: transparent;\n}\nheader {\n z-index: 2;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mb-block {\n display: block;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mb-block {\n display: block;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mb-bottom {\n padding-bottom: 110px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mb-bottom {\n padding-bottom: 110px;\n }\n}\n.map-filters-container .mck-form-input mat-form-field .mat-form-field-infix {\n top: 5px;\n}\n.map-filters-container .mck-form-input mat-form-field .mat-form-field-outline {\n height: 48px;\n background-color: white;\n}\n.map-filters-container .mck-form-input mat-form-field .mat-form-field-infix {\n padding-top: 0.5rem !important;\n}\n.office-level-row .mat-select-placeholder {\n color: #333333;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .office-level-row .legend-container .mat-form-field-outline, .office-level-row .mat-form-field-infix {\n height: 45px !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .office-level-row .legend-container .mat-form-field-outline, .office-level-row .mat-form-field-infix {\n height: 45px !important;\n }\n}\n.office-level-row .select-divider {\n display: block;\n top: 0 !important;\n width: 44px !important;\n right: -11px !important;\n background: transparent !important;\n border-width: 0 0 0 1px;\n border-color: #c6c6c6;\n border-style: solid;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .office-level-row .select-divider {\n height: calc(100% - 1px) !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .office-level-row .select-divider {\n height: calc(100% - 1px) !important;\n }\n}\n.office-level-row .disabled .select-divider {\n background: #F0F0F0 !important;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .office-level-row .disabled .select-divider {\n height: calc(100% - 2px) !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .office-level-row .disabled .select-divider {\n height: calc(100% - 2px) !important;\n }\n}\n.office-level-row .disabled .select-chevron {\n opacity: 0.5;\n margin-left: 10px;\n}\n.office-level-row .legend-container .mat-form-field-outline, .office-level-row .mat-form-field-infix, .map-controls .legend-container .mat-form-field-outline, .map-controls .mat-form-field-infix {\n display: flex !important;\n width: 100% !important;\n justify-content: space-between !important;\n}\n.booking-form-container {\n overflow-y: auto;\n max-height: calc(100vh - 310px);\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-form-container {\n max-height: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-form-container {\n max-height: none;\n }\n}\n.booking-form-container .mck-form-input mat-label, .booking-form-container .mck-form-input .mat-radio-label-content {\n font-family: \"McKinsey Sans\" !important;\n color: #333333;\n}\n.booking-form-container .mck-form-input input::-moz-placeholder {\n font-family: \"McKinsey Sans\";\n color: #B3B3B3;\n}\n.booking-form-container .mck-form-input input, .booking-form-container .mck-form-input input::placeholder {\n font-family: \"McKinsey Sans\";\n color: #B3B3B3;\n}\n/*\nStart Angular Calendar\n*/\n.cal-week-view {\n /* stylelint-disable-next-line selector-type-no-unknown */\n}\n.cal-week-view * {\n box-sizing: border-box;\n}\n.cal-week-view .cal-day-headers {\n -js-display: flex;\n display: flex;\n padding-left: 70px;\n border: 1px solid;\n}\n.cal-week-view .cal-day-headers .cal-header {\n flex: 1;\n text-align: left;\n padding: 12px;\n margin-top: 20px;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 16px;\n font-weight: 400;\n}\n.cal-week-view .cal-day-headers .cal-header p {\n font-size: 16px;\n font-weight: 300;\n margin: 0;\n}\n.cal-week-view .cal-day-headers .cal-header.show-weekend {\n font-size: 12px;\n}\n.cal-week-view .cal-day-headers .cal-header.show-weekend p {\n font-size: 12px;\n}\n.cal-week-view .cal-day-headers .cal-header:not(:last-child) {\n border-right: 1px solid;\n}\n.cal-week-view .cal-day-headers .cal-header:first-child {\n border-left: 1px solid;\n}\n.cal-week-view .cal-day-headers span {\n font-weight: 400;\n opacity: 0.5;\n}\n.cal-week-view .cal-day-column {\n flex-grow: 1;\n border-left: solid 1px;\n padding-top: 5px;\n}\n.cal-week-view .cal-event {\n font-size: 12px;\n border: 1px solid;\n outline: none;\n}\n.cal-week-view .cal-event .berry {\n position: absolute;\n left: calc(50% - 7px);\n display: none;\n height: 14px;\n width: 14px;\n background-color: #00A9F4;\n border-radius: 50%;\n}\n.cal-week-view .cal-event .berry.top {\n top: -7px;\n}\n.cal-week-view .cal-event .berry.bot {\n bottom: -7px;\n}\n.cal-week-view .cal-event .bumper {\n position: absolute;\n left: 3px;\n display: block;\n width: calc(100% - 6px);\n border-radius: 3px;\n z-index: -1;\n opacity: 0.6;\n}\n.cal-week-view .cal-event.expanded:focus {\n border-style: dashed;\n border-width: 2px;\n outline: none;\n}\n.cal-week-view .cal-event.expanded:focus .berry {\n display: block;\n}\n.cal-week-view .cal-time-label-column {\n width: 70px;\n height: 100%;\n}\n.cal-week-view .cal-current-time-marker {\n position: absolute;\n width: 100%;\n height: 2px;\n z-index: 2;\n}\n.cal-week-view .cal-all-day-events {\n border: solid 1px;\n border-top: 0;\n border-bottom-width: 3px;\n padding-top: 3px;\n position: relative;\n}\n.cal-week-view .cal-all-day-events .cal-day-columns {\n height: 100%;\n width: 100%;\n -js-display: flex;\n display: flex;\n position: absolute;\n top: 0;\n z-index: 0;\n}\n.cal-week-view .cal-all-day-events .cal-events-row {\n position: relative;\n height: 31px;\n margin-left: 70px;\n}\n.cal-week-view .cal-all-day-events .cal-event-container {\n display: inline-block;\n position: absolute;\n}\n.cal-week-view .cal-all-day-events .cal-event-container.resize-active {\n z-index: 1;\n pointer-events: none;\n}\n.cal-week-view .cal-all-day-events .cal-event {\n padding: 0 5px;\n margin-left: 2px;\n margin-right: 2px;\n height: 28px;\n line-height: 28px;\n}\n.cal-week-view .cal-all-day-events .cal-time-label-column {\n -js-display: flex;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n}\n.cal-week-view .cal-all-day-events .cal-resize-handle {\n width: 6px;\n height: 100%;\n cursor: col-resize;\n position: absolute;\n top: 0;\n}\n.cal-week-view .cal-all-day-events .cal-resize-handle.cal-resize-handle-after-end {\n right: 0;\n}\n.cal-week-view .cal-event,\n.cal-week-view .cal-header {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.cal-week-view .cal-drag-active {\n pointer-events: none;\n z-index: 1;\n}\n.cal-week-view .cal-drag-active * {\n pointer-events: none;\n}\n.cal-week-view .cal-time-events {\n position: relative;\n border: solid 1px;\n border-top: 0;\n -js-display: flex;\n display: flex;\n}\n.cal-week-view .cal-time-events .cal-day-columns {\n -js-display: flex;\n display: flex;\n flex-grow: 1;\n /*\n First and last item's hour visibility adjustment in the list \n */\n}\n.cal-week-view .cal-time-events .cal-day-columns .cal-hour:nth-of-type(2) .cal-time, .cal-week-view .cal-time-events .cal-day-columns .cal-hour:nth-of-type(8) .cal-time {\n top: -9px;\n}\n.cal-week-view .cal-time-events .cal-day-column {\n position: relative;\n}\n.cal-week-view .cal-time-events .cal-events-container {\n position: relative;\n}\n.cal-week-view .cal-time-events .cal-event-container {\n position: absolute;\n z-index: 1;\n}\n.cal-week-view .cal-time-events .cal-event {\n overflow: visible;\n width: 103%;\n height: calc(100% - 2px);\n margin: 1px;\n padding: 0 5px;\n line-height: 25px;\n left: -3%;\n position: relative;\n}\n.expanded .cal-week-view .cal-time-events .cal-event {\n width: 100%;\n left: 0%;\n}\n.cal-week-view .cal-time-events .cal-resize-handle {\n width: 100%;\n height: 8px;\n cursor: row-resize;\n position: absolute;\n z-index: 10;\n}\n.cal-week-view .cal-time-events .cal-resize-handle.cal-resize-handle-after-end {\n bottom: -4px;\n}\n.cal-week-view .cal-time-events .cal-resize-handle.cal-resize-handle-before-start {\n top: -4px;\n}\n.cal-week-view .cal-hour-segment {\n position: relative;\n}\n.cal-week-view .cal-hour-segment::after {\n content: \" \";\n}\n.cal-week-view .cal-draggable {\n cursor: move;\n}\n.cal-week-view mwl-calendar-week-view-hour-segment,\n.cal-week-view .cal-hour-segment {\n display: block;\n}\n.cal-week-view .cal-hour .cal-time {\n z-index: 2;\n position: relative;\n top: -14px;\n background-color: #f4f4f4;\n height: 5rem;\n width: 4rem;\n border-right: 1px solid #A19F9F;\n border-width: thin;\n}\n.cal-week-view .cal-hour .cal-hour-start {\n border: none !important;\n}\n.expanded .cal-week-view .cal-hour .cal-time {\n background-color: #f8f9fa;\n width: 4.44rem;\n}\n.cal-week-view .cal-hour:not(:last-child) .cal-hour-segment,\n.cal-week-view .cal-hour:last-child :not(:last-child) .cal-hour-segment {\n border-bottom: thin solid;\n border-color: #DBDBDB;\n}\n.cal-week-view .cal-time {\n font-weight: bold;\n padding-top: 5px;\n width: 70px;\n text-align: center;\n}\n.cal-week-view .cal-hour-segment.cal-after-hour-start .cal-time {\n display: none;\n}\n.cal-week-view {\n background-color: #fff;\n border-top: solid 1px #e1e1e1;\n}\n.cal-week-view .cal-day-headers {\n border-color: #e1e1e1;\n border-top: 0;\n border-left-width: 0;\n border-right-width: 0;\n}\n.cal-week-view .cal-day-headers .cal-header:not(:last-child) {\n border-right-color: #e1e1e1;\n}\n.cal-week-view .cal-day-headers .cal-header:first-child {\n border-left-color: #e1e1e1;\n}\n.cal-week-view .cal-day-column {\n border-left-color: #e1e1e1;\n}\n.cal-week-view .cal-event {\n background-color: #d1e8ff;\n border-color: #1e90ff;\n color: #1e90ff;\n}\n.cal-week-view .cal-all-day-events {\n border-color: #e1e1e1;\n}\n.cal-week-view .cal-header.cal-event-date {\n color: #2251FF;\n}\n.cal-week-view .cal-header.cal-weekend span {\n color: #8b0000;\n}\n.cal-week-view .cal-time-events {\n border-color: #e1e1e1;\n}\n.expanded .cal-week-view .cal-time-events .cal-day-columns:not(.cal-resize-active) .cal-hour-segment:hover {\n background-color: #C0DBF5;\n}\n.cal-week-view .cal-hour-odd {\n background-color: #fafafa;\n}\n.cal-week-view .cal-drag-over .cal-hour-segment {\n background-color: #ededed;\n}\n.cal-week-view .cal-hour:not(:last-child) .cal-hour-segment,\n.cal-week-view .cal-hour:last-child :not(:last-child) .cal-hour-segment {\n border-bottom-color: #e1e1e1;\n}\n.cal-week-view .cal-current-time-marker {\n display: none;\n}\n.cal-day-view mwl-calendar-week-view-header {\n display: none;\n}\n.cal-day-view .cal-events-container {\n margin-left: 70px;\n}\n.cal-day-view .cal-day-column {\n border-left: 0;\n}\n.cal-day-view .cal-current-time-marker {\n margin-left: 70px;\n width: calc(100% - 70px);\n}\n.cal-tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.5;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n font-size: 14px;\n word-wrap: break-word;\n opacity: 0.9;\n margin-bottom: 4px;\n}\n.cal-tooltip.cal-tooltip-top {\n padding: 5px 0;\n margin-top: -3px;\n}\n.cal-tooltip.cal-tooltip-top .cal-tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n}\n.cal-tooltip.cal-tooltip-right {\n padding: 0 5px;\n margin-left: 3px;\n}\n.cal-tooltip.cal-tooltip-right .cal-tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n}\n.cal-tooltip.cal-tooltip-bottom {\n padding: 5px 0;\n margin-top: 3px;\n}\n.cal-tooltip.cal-tooltip-bottom .cal-tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n}\n.cal-tooltip.cal-tooltip-left {\n padding: 0 5px;\n margin-left: -3px;\n}\n.cal-tooltip.cal-tooltip-left .cal-tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n}\n.cal-tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n text-align: center;\n border-radius: 0.25rem;\n}\n.cal-tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.cal-tooltip.cal-tooltip-top .cal-tooltip-arrow {\n border-top-color: #fff;\n}\n.cal-tooltip.cal-tooltip-right .cal-tooltip-arrow {\n border-right-color: #fff;\n}\n.cal-tooltip.cal-tooltip-bottom .cal-tooltip-arrow {\n border-bottom-color: #fff;\n}\n.cal-tooltip.cal-tooltip-left .cal-tooltip-arrow {\n border-left-color: #fff;\n}\n.cal-tooltip-inner {\n padding: 10px;\n color: #000;\n background-color: #fff;\n box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.2);\n}\n.cal-event-container .cal-event {\n border-radius: 0 !important;\n}\n.cal-event-container .cal-event .cal-event-title {\n font-size: 14px;\n font-weight: 400;\n padding: 10px 14px;\n color: black;\n display: block;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .cal-event-container .cal-event .cal-event-title {\n font-size: 12px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .cal-event-container .cal-event .cal-event-title {\n font-size: 12px;\n }\n}\n.cal-event-container.selected {\n width: 100% !important;\n left: 0% !important;\n z-index: 2 !important;\n}\n.cal-event-container.selected .cal-event {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.cal-event-container.selected .cal-event .cal-event-title {\n white-space: pre-wrap;\n text-align: center;\n}\n.cal-event-container.selected.mobile {\n left: 0% !important;\n width: 100% !important;\n}\n.cal-event-container.selected.minimal .cal-event-title {\n top: 0;\n transform: none;\n}\n.cal-event-container.mobile {\n left: 0% !important;\n width: 100% !important;\n}\n.cal-event-container.booked {\n width: 100% !important;\n left: 0% !important;\n}\n.cal-event-container.booked .cal-event .cal-event-title {\n width: 100%;\n}\n.cal-event-container.booked.mobile {\n left: 0% !important;\n width: 100% !important;\n}\n.cal-event-container.booked.minimal .cal-event-title {\n padding: 1px 14px;\n}\n.cal-event-container.show-weekend .cal-event .cal-event-title {\n font-size: 13px;\n}\n.cal-week-view {\n position: relative;\n}\n.cal-week-view .cal-time {\n font-weight: 400;\n}\n.cal-week-view .cal-hour {\n background-color: #ffffff;\n}\n.cal-week-view .cal-hour-odd {\n background-color: #ffffff;\n}\n.cal-week-view .cal-time-events {\n background-color: #ffffff;\n}\n.cal-week-view .cal-day-headers {\n position: fixed;\n width: 100%;\n max-width: 1008px;\n background: #F8F9FA;\n z-index: 3;\n height: 82px;\n}\n@media only screen and (orientation: portrait) and (min-width: 801px) and (max-width: 1024px) {\n .cal-week-view .cal-day-headers {\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1049px) and (max-width: 1280px) {\n .cal-week-view .cal-day-headers {\n width: 100%;\n }\n}\n.expanded .cal-week-view .cal-time-events {\n padding-top: 87px;\n position: relative;\n top: 1px;\n z-index: 1;\n border: 1px solid #f0f0f0;\n}\n.expanded .cal-event-container.mobile {\n left: 20% !important;\n width: 80% !important;\n}\n/*\nEnd Start Angular Calendar\n*/\n.mat-ripple-element {\n background-color: rgba(0, 0, 0, 0.1);\n}\n.mat-option {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-option:hover:not(.mat-option-disabled), .mat-option:focus:not(.mat-option-disabled) {\n background: rgba(0, 0, 0, 0.04);\n}\n.mat-option.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled) {\n background: rgba(0, 0, 0, 0.04);\n}\n.mat-option.mat-active {\n background: rgba(0, 0, 0, 0.04);\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-option.mat-option-disabled {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-primary .mat-option.mat-selected:not(.mat-option-disabled) {\n color: #3f51b5;\n}\n.mat-accent .mat-option.mat-selected:not(.mat-option-disabled) {\n color: #448aff;\n}\n.mat-warn .mat-option.mat-selected:not(.mat-option-disabled) {\n color: #f44336;\n}\n.mat-optgroup-label {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-optgroup-disabled .mat-optgroup-label {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-pseudo-checkbox {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-pseudo-checkbox::after {\n color: #fafafa;\n}\n.mat-pseudo-checkbox-disabled {\n color: #b0b0b0;\n}\n.mat-primary .mat-pseudo-checkbox-checked,\n.mat-primary .mat-pseudo-checkbox-indeterminate {\n background: #3f51b5;\n}\n.mat-pseudo-checkbox-checked,\n.mat-pseudo-checkbox-indeterminate,\n.mat-accent .mat-pseudo-checkbox-checked,\n.mat-accent .mat-pseudo-checkbox-indeterminate {\n background: #448aff;\n}\n.mat-warn .mat-pseudo-checkbox-checked,\n.mat-warn .mat-pseudo-checkbox-indeterminate {\n background: #f44336;\n}\n.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,\n.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled {\n background: #b0b0b0;\n}\n.mat-elevation-z0 {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z1 {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z2 {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z3 {\n box-shadow: 0px 3px 3px -2px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 0, 0, 0.14), 0px 1px 8px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z4 {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z5 {\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 5px 8px 0px rgba(0, 0, 0, 0.14), 0px 1px 14px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z6 {\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z7 {\n box-shadow: 0px 4px 5px -2px rgba(0, 0, 0, 0.2), 0px 7px 10px 1px rgba(0, 0, 0, 0.14), 0px 2px 16px 1px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z8 {\n box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z9 {\n box-shadow: 0px 5px 6px -3px rgba(0, 0, 0, 0.2), 0px 9px 12px 1px rgba(0, 0, 0, 0.14), 0px 3px 16px 2px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z10 {\n box-shadow: 0px 6px 6px -3px rgba(0, 0, 0, 0.2), 0px 10px 14px 1px rgba(0, 0, 0, 0.14), 0px 4px 18px 3px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z11 {\n box-shadow: 0px 6px 7px -4px rgba(0, 0, 0, 0.2), 0px 11px 15px 1px rgba(0, 0, 0, 0.14), 0px 4px 20px 3px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z12 {\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z13 {\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 13px 19px 2px rgba(0, 0, 0, 0.14), 0px 5px 24px 4px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z14 {\n box-shadow: 0px 7px 9px -4px rgba(0, 0, 0, 0.2), 0px 14px 21px 2px rgba(0, 0, 0, 0.14), 0px 5px 26px 4px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z15 {\n box-shadow: 0px 8px 9px -5px rgba(0, 0, 0, 0.2), 0px 15px 22px 2px rgba(0, 0, 0, 0.14), 0px 6px 28px 5px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z16 {\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z17 {\n box-shadow: 0px 8px 11px -5px rgba(0, 0, 0, 0.2), 0px 17px 26px 2px rgba(0, 0, 0, 0.14), 0px 6px 32px 5px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z18 {\n box-shadow: 0px 9px 11px -5px rgba(0, 0, 0, 0.2), 0px 18px 28px 2px rgba(0, 0, 0, 0.14), 0px 7px 34px 6px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z19 {\n box-shadow: 0px 9px 12px -6px rgba(0, 0, 0, 0.2), 0px 19px 29px 2px rgba(0, 0, 0, 0.14), 0px 7px 36px 6px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z20 {\n box-shadow: 0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 20px 31px 3px rgba(0, 0, 0, 0.14), 0px 8px 38px 7px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z21 {\n box-shadow: 0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 21px 33px 3px rgba(0, 0, 0, 0.14), 0px 8px 40px 7px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z22 {\n box-shadow: 0px 10px 14px -6px rgba(0, 0, 0, 0.2), 0px 22px 35px 3px rgba(0, 0, 0, 0.14), 0px 8px 42px 7px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z23 {\n box-shadow: 0px 11px 14px -7px rgba(0, 0, 0, 0.2), 0px 23px 36px 3px rgba(0, 0, 0, 0.14), 0px 9px 44px 8px rgba(0, 0, 0, 0.12);\n}\n.mat-elevation-z24 {\n box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12);\n}\n.mat-app-background {\n background-color: #fafafa;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-theme-loaded-marker {\n display: none;\n}\n.mat-autocomplete-panel {\n background: white;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-autocomplete-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover) {\n background: white;\n}\n.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover):not(.mat-option-disabled) {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-badge-content {\n color: white;\n background: #3f51b5;\n}\n.cdk-high-contrast-active .mat-badge-content {\n outline: solid 1px;\n border-radius: 0;\n}\n.mat-badge-accent .mat-badge-content {\n background: #448aff;\n color: white;\n}\n.mat-badge-warn .mat-badge-content {\n color: white;\n background: #f44336;\n}\n.mat-badge {\n position: relative;\n}\n.mat-badge-hidden .mat-badge-content {\n display: none;\n}\n.mat-badge-disabled .mat-badge-content {\n background: #b9b9b9;\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-badge-content {\n position: absolute;\n text-align: center;\n display: inline-block;\n border-radius: 50%;\n transition: transform 200ms ease-in-out;\n transform: scale(0.6);\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n pointer-events: none;\n}\n.ng-animate-disabled .mat-badge-content,\n.mat-badge-content._mat-animation-noopable {\n transition: none;\n}\n.mat-badge-content.mat-badge-active {\n transform: none;\n}\n.mat-badge-small .mat-badge-content {\n width: 16px;\n height: 16px;\n line-height: 16px;\n}\n.mat-badge-small.mat-badge-above .mat-badge-content {\n top: -8px;\n}\n.mat-badge-small.mat-badge-below .mat-badge-content {\n bottom: -8px;\n}\n.mat-badge-small.mat-badge-before .mat-badge-content {\n left: -16px;\n}\n[dir=rtl] .mat-badge-small.mat-badge-before .mat-badge-content {\n left: auto;\n right: -16px;\n}\n.mat-badge-small.mat-badge-after .mat-badge-content {\n right: -16px;\n}\n[dir=rtl] .mat-badge-small.mat-badge-after .mat-badge-content {\n right: auto;\n left: -16px;\n}\n.mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: -8px;\n}\n[dir=rtl] .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: auto;\n right: -8px;\n}\n.mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: -8px;\n}\n[dir=rtl] .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: auto;\n left: -8px;\n}\n.mat-badge-medium .mat-badge-content {\n width: 22px;\n height: 22px;\n line-height: 22px;\n}\n.mat-badge-medium.mat-badge-above .mat-badge-content {\n top: -11px;\n}\n.mat-badge-medium.mat-badge-below .mat-badge-content {\n bottom: -11px;\n}\n.mat-badge-medium.mat-badge-before .mat-badge-content {\n left: -22px;\n}\n[dir=rtl] .mat-badge-medium.mat-badge-before .mat-badge-content {\n left: auto;\n right: -22px;\n}\n.mat-badge-medium.mat-badge-after .mat-badge-content {\n right: -22px;\n}\n[dir=rtl] .mat-badge-medium.mat-badge-after .mat-badge-content {\n right: auto;\n left: -22px;\n}\n.mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: -11px;\n}\n[dir=rtl] .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: auto;\n right: -11px;\n}\n.mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: -11px;\n}\n[dir=rtl] .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: auto;\n left: -11px;\n}\n.mat-badge-large .mat-badge-content {\n width: 28px;\n height: 28px;\n line-height: 28px;\n}\n.mat-badge-large.mat-badge-above .mat-badge-content {\n top: -14px;\n}\n.mat-badge-large.mat-badge-below .mat-badge-content {\n bottom: -14px;\n}\n.mat-badge-large.mat-badge-before .mat-badge-content {\n left: -28px;\n}\n[dir=rtl] .mat-badge-large.mat-badge-before .mat-badge-content {\n left: auto;\n right: -28px;\n}\n.mat-badge-large.mat-badge-after .mat-badge-content {\n right: -28px;\n}\n[dir=rtl] .mat-badge-large.mat-badge-after .mat-badge-content {\n right: auto;\n left: -28px;\n}\n.mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: -14px;\n}\n[dir=rtl] .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: auto;\n right: -14px;\n}\n.mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: -14px;\n}\n[dir=rtl] .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: auto;\n left: -14px;\n}\n.mat-bottom-sheet-container {\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\n background: white;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-button, .mat-icon-button, .mat-stroked-button {\n color: inherit;\n background: transparent;\n}\n.mat-button.mat-primary, .mat-icon-button.mat-primary, .mat-stroked-button.mat-primary {\n color: #3f51b5;\n}\n.mat-button.mat-accent, .mat-icon-button.mat-accent, .mat-stroked-button.mat-accent {\n color: #448aff;\n}\n.mat-button.mat-warn, .mat-icon-button.mat-warn, .mat-stroked-button.mat-warn {\n color: #f44336;\n}\n.mat-button.mat-primary[disabled], .mat-button.mat-accent[disabled], .mat-button.mat-warn[disabled], .mat-button[disabled][disabled], .mat-icon-button.mat-primary[disabled], .mat-icon-button.mat-accent[disabled], .mat-icon-button.mat-warn[disabled], .mat-icon-button[disabled][disabled], .mat-stroked-button.mat-primary[disabled], .mat-stroked-button.mat-accent[disabled], .mat-stroked-button.mat-warn[disabled], .mat-stroked-button[disabled][disabled] {\n color: rgba(0, 0, 0, 0.26);\n}\n.mat-button.mat-primary .mat-button-focus-overlay, .mat-icon-button.mat-primary .mat-button-focus-overlay, .mat-stroked-button.mat-primary .mat-button-focus-overlay {\n background-color: #3f51b5;\n}\n.mat-button.mat-accent .mat-button-focus-overlay, .mat-icon-button.mat-accent .mat-button-focus-overlay, .mat-stroked-button.mat-accent .mat-button-focus-overlay {\n background-color: #448aff;\n}\n.mat-button.mat-warn .mat-button-focus-overlay, .mat-icon-button.mat-warn .mat-button-focus-overlay, .mat-stroked-button.mat-warn .mat-button-focus-overlay {\n background-color: #f44336;\n}\n.mat-button[disabled] .mat-button-focus-overlay, .mat-icon-button[disabled] .mat-button-focus-overlay, .mat-stroked-button[disabled] .mat-button-focus-overlay {\n background-color: transparent;\n}\n.mat-button .mat-ripple-element, .mat-icon-button .mat-ripple-element, .mat-stroked-button .mat-ripple-element {\n opacity: 0.1;\n background-color: currentColor;\n}\n.mat-button-focus-overlay {\n background: black;\n}\n.mat-stroked-button:not([disabled]) {\n border-color: rgba(0, 0, 0, 0.12);\n}\n.mat-flat-button, .mat-raised-button, .mat-fab, .mat-mini-fab {\n color: rgba(0, 0, 0, 0.87);\n background-color: white;\n}\n.mat-flat-button.mat-primary, .mat-raised-button.mat-primary, .mat-fab.mat-primary, .mat-mini-fab.mat-primary {\n color: white;\n}\n.mat-flat-button.mat-accent, .mat-raised-button.mat-accent, .mat-fab.mat-accent, .mat-mini-fab.mat-accent {\n color: white;\n}\n.mat-flat-button.mat-warn, .mat-raised-button.mat-warn, .mat-fab.mat-warn, .mat-mini-fab.mat-warn {\n color: white;\n}\n.mat-flat-button.mat-primary[disabled], .mat-flat-button.mat-accent[disabled], .mat-flat-button.mat-warn[disabled], .mat-flat-button[disabled][disabled], .mat-raised-button.mat-primary[disabled], .mat-raised-button.mat-accent[disabled], .mat-raised-button.mat-warn[disabled], .mat-raised-button[disabled][disabled], .mat-fab.mat-primary[disabled], .mat-fab.mat-accent[disabled], .mat-fab.mat-warn[disabled], .mat-fab[disabled][disabled], .mat-mini-fab.mat-primary[disabled], .mat-mini-fab.mat-accent[disabled], .mat-mini-fab.mat-warn[disabled], .mat-mini-fab[disabled][disabled] {\n color: rgba(0, 0, 0, 0.26);\n}\n.mat-flat-button.mat-primary, .mat-raised-button.mat-primary, .mat-fab.mat-primary, .mat-mini-fab.mat-primary {\n background-color: #3f51b5;\n}\n.mat-flat-button.mat-accent, .mat-raised-button.mat-accent, .mat-fab.mat-accent, .mat-mini-fab.mat-accent {\n background-color: #448aff;\n}\n.mat-flat-button.mat-warn, .mat-raised-button.mat-warn, .mat-fab.mat-warn, .mat-mini-fab.mat-warn {\n background-color: #f44336;\n}\n.mat-flat-button.mat-primary[disabled], .mat-flat-button.mat-accent[disabled], .mat-flat-button.mat-warn[disabled], .mat-flat-button[disabled][disabled], .mat-raised-button.mat-primary[disabled], .mat-raised-button.mat-accent[disabled], .mat-raised-button.mat-warn[disabled], .mat-raised-button[disabled][disabled], .mat-fab.mat-primary[disabled], .mat-fab.mat-accent[disabled], .mat-fab.mat-warn[disabled], .mat-fab[disabled][disabled], .mat-mini-fab.mat-primary[disabled], .mat-mini-fab.mat-accent[disabled], .mat-mini-fab.mat-warn[disabled], .mat-mini-fab[disabled][disabled] {\n background-color: rgba(0, 0, 0, 0.12);\n}\n.mat-flat-button.mat-primary .mat-ripple-element, .mat-raised-button.mat-primary .mat-ripple-element, .mat-fab.mat-primary .mat-ripple-element, .mat-mini-fab.mat-primary .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.mat-flat-button.mat-accent .mat-ripple-element, .mat-raised-button.mat-accent .mat-ripple-element, .mat-fab.mat-accent .mat-ripple-element, .mat-mini-fab.mat-accent .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.mat-flat-button.mat-warn .mat-ripple-element, .mat-raised-button.mat-warn .mat-ripple-element, .mat-fab.mat-warn .mat-ripple-element, .mat-mini-fab.mat-warn .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.mat-stroked-button:not([class*=mat-elevation-z]), .mat-flat-button:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-raised-button:not([class*=mat-elevation-z]) {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-raised-button:not([disabled]):active:not([class*=mat-elevation-z]) {\n box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);\n}\n.mat-raised-button[disabled]:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-fab:not([class*=mat-elevation-z]), .mat-mini-fab:not([class*=mat-elevation-z]) {\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-fab:not([disabled]):active:not([class*=mat-elevation-z]), .mat-mini-fab:not([disabled]):active:not([class*=mat-elevation-z]) {\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);\n}\n.mat-fab[disabled]:not([class*=mat-elevation-z]), .mat-mini-fab[disabled]:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-button-toggle-standalone,\n.mat-button-toggle-group {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\n.mat-button-toggle-group-appearance-standard {\n box-shadow: none;\n}\n.mat-button-toggle {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-button-toggle .mat-button-toggle-focus-overlay {\n background-color: rgba(0, 0, 0, 0.12);\n}\n.mat-button-toggle-appearance-standard {\n color: rgba(0, 0, 0, 0.87);\n background: white;\n}\n.mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay {\n background-color: black;\n}\n.mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\n border-left: solid 1px rgba(0, 0, 0, 0.12);\n}\n[dir=rtl] .mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\n border-left: none;\n border-right: solid 1px rgba(0, 0, 0, 0.12);\n}\n.mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle + .mat-button-toggle {\n border-left: none;\n border-right: none;\n border-top: solid 1px rgba(0, 0, 0, 0.12);\n}\n.mat-button-toggle-checked {\n background-color: #e0e0e0;\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-button-toggle-checked.mat-button-toggle-appearance-standard {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-button-toggle-disabled {\n color: rgba(0, 0, 0, 0.26);\n background-color: #eeeeee;\n}\n.mat-button-toggle-disabled.mat-button-toggle-appearance-standard {\n background: white;\n}\n.mat-button-toggle-disabled.mat-button-toggle-checked {\n background-color: #bdbdbd;\n}\n.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\n.mat-button-toggle-group-appearance-standard {\n border: solid 1px rgba(0, 0, 0, 0.12);\n}\n.mat-card {\n background: white;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-card:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-card.mat-card-flat:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-card-subtitle {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-checkbox-frame {\n border-color: rgba(0, 0, 0, 0.54);\n}\n.mat-checkbox-checkmark {\n fill: #fafafa;\n}\n.mat-checkbox-checkmark-path {\n stroke: #fafafa !important;\n}\n.mat-checkbox-mixedmark {\n background-color: #fafafa;\n}\n.mat-checkbox-indeterminate.mat-primary .mat-checkbox-background, .mat-checkbox-checked.mat-primary .mat-checkbox-background {\n background-color: #3f51b5;\n}\n.mat-checkbox-indeterminate.mat-accent .mat-checkbox-background, .mat-checkbox-checked.mat-accent .mat-checkbox-background {\n background-color: #448aff;\n}\n.mat-checkbox-indeterminate.mat-warn .mat-checkbox-background, .mat-checkbox-checked.mat-warn .mat-checkbox-background {\n background-color: #f44336;\n}\n.mat-checkbox-disabled.mat-checkbox-checked .mat-checkbox-background, .mat-checkbox-disabled.mat-checkbox-indeterminate .mat-checkbox-background {\n background-color: #b0b0b0;\n}\n.mat-checkbox-disabled:not(.mat-checkbox-checked) .mat-checkbox-frame {\n border-color: #b0b0b0;\n}\n.mat-checkbox-disabled .mat-checkbox-label {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-checkbox .mat-ripple-element {\n background-color: black;\n}\n.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element,\n.mat-checkbox:active:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element {\n background: #3f51b5;\n}\n.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element,\n.mat-checkbox:active:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element {\n background: #448aff;\n}\n.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element,\n.mat-checkbox:active:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element {\n background: #f44336;\n}\n.mat-chip.mat-standard-chip {\n background-color: #e0e0e0;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-chip.mat-standard-chip .mat-chip-remove {\n color: rgba(0, 0, 0, 0.87);\n opacity: 0.4;\n}\n.mat-chip.mat-standard-chip:not(.mat-chip-disabled):active {\n box-shadow: 0px 3px 3px -2px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 0, 0, 0.14), 0px 1px 8px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-chip.mat-standard-chip:not(.mat-chip-disabled) .mat-chip-remove:hover {\n opacity: 0.54;\n}\n.mat-chip.mat-standard-chip.mat-chip-disabled {\n opacity: 0.4;\n}\n.mat-chip.mat-standard-chip::after {\n background: black;\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary {\n background-color: #3f51b5;\n color: white;\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-chip-remove {\n color: white;\n opacity: 0.4;\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn {\n background-color: #f44336;\n color: white;\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-chip-remove {\n color: white;\n opacity: 0.4;\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent {\n background-color: #448aff;\n color: white;\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-chip-remove {\n color: white;\n opacity: 0.4;\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.mat-table {\n background: white;\n}\n.mat-table thead, .mat-table tbody, .mat-table tfoot,\nmat-header-row, mat-row, mat-footer-row,\n[mat-header-row], [mat-row], [mat-footer-row],\n.mat-table-sticky {\n background: inherit;\n}\nmat-row, mat-header-row, mat-footer-row,\nth.mat-header-cell, td.mat-cell, td.mat-footer-cell {\n border-bottom-color: rgba(0, 0, 0, 0.12);\n}\n.mat-header-cell {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-cell, .mat-footer-cell {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-calendar-arrow {\n border-top-color: rgba(0, 0, 0, 0.54);\n}\n.mat-datepicker-toggle,\n.mat-datepicker-content .mat-calendar-next-button,\n.mat-datepicker-content .mat-calendar-previous-button {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-calendar-table-header {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-calendar-table-header-divider::after {\n background: rgba(0, 0, 0, 0.12);\n}\n.mat-calendar-body-label {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-calendar-body-cell-content {\n color: rgba(0, 0, 0, 0.87);\n border-color: transparent;\n}\n.mat-calendar-body-disabled > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected),\n.cdk-keyboard-focused .mat-calendar-body-active > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected),\n.cdk-program-focused .mat-calendar-body-active > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\n background-color: rgba(0, 0, 0, 0.04);\n}\n.mat-calendar-body-today:not(.mat-calendar-body-selected) {\n border-color: rgba(0, 0, 0, 0.38);\n}\n.mat-calendar-body-disabled > .mat-calendar-body-today:not(.mat-calendar-body-selected) {\n border-color: rgba(0, 0, 0, 0.18);\n}\n.mat-calendar-body-selected {\n background-color: #3f51b5;\n color: white;\n}\n.mat-calendar-body-disabled > .mat-calendar-body-selected {\n background-color: rgba(63, 81, 181, 0.4);\n}\n.mat-calendar-body-today.mat-calendar-body-selected {\n box-shadow: inset 0 0 0 1px white;\n}\n.mat-datepicker-content {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n background-color: white;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-datepicker-content.mat-accent .mat-calendar-body-selected {\n background-color: #448aff;\n color: white;\n}\n.mat-datepicker-content.mat-accent .mat-calendar-body-disabled > .mat-calendar-body-selected {\n background-color: rgba(68, 138, 255, 0.4);\n}\n.mat-datepicker-content.mat-accent .mat-calendar-body-today.mat-calendar-body-selected {\n box-shadow: inset 0 0 0 1px white;\n}\n.mat-datepicker-content.mat-warn .mat-calendar-body-selected {\n background-color: #f44336;\n color: white;\n}\n.mat-datepicker-content.mat-warn .mat-calendar-body-disabled > .mat-calendar-body-selected {\n background-color: rgba(244, 67, 54, 0.4);\n}\n.mat-datepicker-content.mat-warn .mat-calendar-body-today.mat-calendar-body-selected {\n box-shadow: inset 0 0 0 1px white;\n}\n.mat-datepicker-content-touch {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-datepicker-toggle-active {\n color: #3f51b5;\n}\n.mat-datepicker-toggle-active.mat-accent {\n color: #448aff;\n}\n.mat-datepicker-toggle-active.mat-warn {\n color: #f44336;\n}\n.mat-dialog-container {\n box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12);\n background: white;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-divider {\n border-top-color: rgba(0, 0, 0, 0.12);\n}\n.mat-divider-vertical {\n border-right-color: rgba(0, 0, 0, 0.12);\n}\n.mat-expansion-panel {\n background: white;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-expansion-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-action-row {\n border-top-color: rgba(0, 0, 0, 0.12);\n}\n.mat-expansion-panel .mat-expansion-panel-header.cdk-keyboard-focused:not([aria-disabled=true]), .mat-expansion-panel .mat-expansion-panel-header.cdk-program-focused:not([aria-disabled=true]), .mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover:not([aria-disabled=true]) {\n background: rgba(0, 0, 0, 0.04);\n}\n@media (hover: none) {\n .mat-expansion-panel:not(.mat-expanded):not([aria-disabled=true]) .mat-expansion-panel-header:hover {\n background: white;\n }\n}\n.mat-expansion-panel-header-title {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-expansion-panel-header-description,\n.mat-expansion-indicator::after {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-expansion-panel-header[aria-disabled=true] {\n color: rgba(0, 0, 0, 0.26);\n}\n.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title,\n.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description {\n color: inherit;\n}\n.mat-form-field-label {\n color: rgba(0, 0, 0, 0.6);\n}\n.mat-hint {\n color: rgba(0, 0, 0, 0.6);\n}\n.mat-form-field.mat-focused .mat-form-field-label {\n color: #3f51b5;\n}\n.mat-form-field.mat-focused .mat-form-field-label.mat-accent {\n color: #448aff;\n}\n.mat-form-field.mat-focused .mat-form-field-label.mat-warn {\n color: #f44336;\n}\n.mat-focused .mat-form-field-required-marker {\n color: #448aff;\n}\n.mat-form-field-ripple {\n background-color: rgba(0, 0, 0, 0.87);\n}\n.mat-form-field.mat-focused .mat-form-field-ripple {\n background-color: #3f51b5;\n}\n.mat-form-field.mat-focused .mat-form-field-ripple.mat-accent {\n background-color: #448aff;\n}\n.mat-form-field.mat-focused .mat-form-field-ripple.mat-warn {\n background-color: #f44336;\n}\n.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid) .mat-form-field-infix::after {\n color: #3f51b5;\n}\n.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-accent .mat-form-field-infix::after {\n color: #448aff;\n}\n.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-warn .mat-form-field-infix::after {\n color: #f44336;\n}\n.mat-form-field.mat-form-field-invalid .mat-form-field-label {\n color: #f44336;\n}\n.mat-form-field.mat-form-field-invalid .mat-form-field-label.mat-accent,\n.mat-form-field.mat-form-field-invalid .mat-form-field-label .mat-form-field-required-marker {\n color: #f44336;\n}\n.mat-form-field.mat-form-field-invalid .mat-form-field-ripple,\n.mat-form-field.mat-form-field-invalid .mat-form-field-ripple.mat-accent {\n background-color: #f44336;\n}\n.mat-error {\n color: #f44336;\n}\n.mat-form-field-appearance-legacy .mat-form-field-label {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-form-field-appearance-legacy .mat-hint {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-form-field-appearance-legacy .mat-form-field-underline {\n background-color: rgba(0, 0, 0, 0.42);\n}\n.mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline {\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.42) 0%, rgba(0, 0, 0, 0.42) 33%, transparent 0%);\n background-size: 4px 100%;\n background-repeat: repeat-x;\n}\n.mat-form-field-appearance-standard .mat-form-field-underline {\n background-color: rgba(0, 0, 0, 0.42);\n}\n.mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline {\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.42) 0%, rgba(0, 0, 0, 0.42) 33%, transparent 0%);\n background-size: 4px 100%;\n background-repeat: repeat-x;\n}\n.mat-form-field-appearance-fill .mat-form-field-flex {\n background-color: rgba(0, 0, 0, 0.04);\n}\n.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-flex {\n background-color: rgba(0, 0, 0, 0.02);\n}\n.mat-form-field-appearance-fill .mat-form-field-underline::before {\n background-color: rgba(0, 0, 0, 0.42);\n}\n.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-label {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-underline::before {\n background-color: transparent;\n}\n.mat-form-field-appearance-outline .mat-form-field-outline {\n color: rgba(0, 0, 0, 0.12);\n}\n.mat-form-field-appearance-outline .mat-form-field-outline-thick {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick {\n color: #3f51b5;\n}\n.mat-form-field-appearance-outline.mat-focused.mat-accent .mat-form-field-outline-thick {\n color: #448aff;\n}\n.mat-form-field-appearance-outline.mat-focused.mat-warn .mat-form-field-outline-thick {\n color: #f44336;\n}\n.mat-form-field-appearance-outline.mat-form-field-invalid.mat-form-field-invalid .mat-form-field-outline-thick {\n color: #f44336;\n}\n.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-label {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline {\n color: rgba(0, 0, 0, 0.06);\n}\n.mat-icon.mat-primary {\n color: #3f51b5;\n}\n.mat-icon.mat-accent {\n color: #448aff;\n}\n.mat-icon.mat-warn {\n color: #f44336;\n}\n.mat-form-field-type-mat-native-select .mat-form-field-infix::after {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-input-element:disabled,\n.mat-form-field-type-mat-native-select.mat-form-field-disabled .mat-form-field-infix::after {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-input-element {\n caret-color: #3f51b5;\n}\n.mat-input-element::-moz-placeholder {\n color: rgba(0, 0, 0, 0.42);\n}\n.mat-input-element::placeholder {\n color: rgba(0, 0, 0, 0.42);\n}\n.mat-input-element::-moz-placeholder {\n color: rgba(0, 0, 0, 0.42);\n}\n.mat-input-element::-webkit-input-placeholder {\n color: rgba(0, 0, 0, 0.42);\n}\n.mat-input-element:-ms-input-placeholder {\n color: rgba(0, 0, 0, 0.42);\n}\n.mat-accent .mat-input-element {\n caret-color: #448aff;\n}\n.mat-warn .mat-input-element,\n.mat-form-field-invalid .mat-input-element {\n caret-color: #f44336;\n}\n.mat-form-field-type-mat-native-select.mat-form-field-invalid .mat-form-field-infix::after {\n color: #f44336;\n}\n.mat-list-base .mat-list-item {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-list-base .mat-list-option {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-list-base .mat-subheader {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-list-item-disabled {\n background-color: #eeeeee;\n}\n.mat-list-option:hover, .mat-list-option:focus,\n.mat-nav-list .mat-list-item:hover,\n.mat-nav-list .mat-list-item:focus,\n.mat-action-list .mat-list-item:hover,\n.mat-action-list .mat-list-item:focus {\n background: rgba(0, 0, 0, 0.04);\n}\n.mat-list-single-selected-option, .mat-list-single-selected-option:hover, .mat-list-single-selected-option:focus {\n background: rgba(0, 0, 0, 0.12);\n}\n.mat-menu-panel {\n background: white;\n}\n.mat-menu-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-menu-item {\n background: transparent;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-menu-item[disabled], .mat-menu-item[disabled]::after {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-menu-item .mat-icon-no-color,\n.mat-menu-item-submenu-trigger::after {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-menu-item:hover:not([disabled]),\n.mat-menu-item.cdk-program-focused:not([disabled]),\n.mat-menu-item.cdk-keyboard-focused:not([disabled]),\n.mat-menu-item-highlighted:not([disabled]) {\n background: rgba(0, 0, 0, 0.04);\n}\n.mat-paginator {\n background: white;\n}\n.mat-paginator,\n.mat-paginator-page-size .mat-select-trigger {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-paginator-decrement,\n.mat-paginator-increment {\n border-top: 2px solid rgba(0, 0, 0, 0.54);\n border-right: 2px solid rgba(0, 0, 0, 0.54);\n}\n.mat-paginator-first,\n.mat-paginator-last {\n border-top: 2px solid rgba(0, 0, 0, 0.54);\n}\n.mat-icon-button[disabled] .mat-paginator-decrement,\n.mat-icon-button[disabled] .mat-paginator-increment,\n.mat-icon-button[disabled] .mat-paginator-first,\n.mat-icon-button[disabled] .mat-paginator-last {\n border-color: rgba(0, 0, 0, 0.38);\n}\n.mat-progress-bar-background {\n fill: #c5cae9;\n}\n.mat-progress-bar-buffer {\n background-color: #c5cae9;\n}\n.mat-progress-bar-fill::after {\n background-color: #3f51b5;\n}\n.mat-progress-bar.mat-accent .mat-progress-bar-background {\n fill: #82b1ff;\n}\n.mat-progress-bar.mat-accent .mat-progress-bar-buffer {\n background-color: #82b1ff;\n}\n.mat-progress-bar.mat-accent .mat-progress-bar-fill::after {\n background-color: #448aff;\n}\n.mat-progress-bar.mat-warn .mat-progress-bar-background {\n fill: #ffcdd2;\n}\n.mat-progress-bar.mat-warn .mat-progress-bar-buffer {\n background-color: #ffcdd2;\n}\n.mat-progress-bar.mat-warn .mat-progress-bar-fill::after {\n background-color: #f44336;\n}\n.mat-progress-spinner circle, .mat-spinner circle {\n stroke: #3f51b5;\n}\n.mat-progress-spinner.mat-accent circle, .mat-spinner.mat-accent circle {\n stroke: #448aff;\n}\n.mat-progress-spinner.mat-warn circle, .mat-spinner.mat-warn circle {\n stroke: #f44336;\n}\n.mat-radio-outer-circle {\n border-color: rgba(0, 0, 0, 0.54);\n}\n.mat-radio-button.mat-primary.mat-radio-checked .mat-radio-outer-circle {\n border-color: #3f51b5;\n}\n.mat-radio-button.mat-primary .mat-radio-inner-circle,\n.mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .mat-radio-button.mat-primary.mat-radio-checked .mat-radio-persistent-ripple, .mat-radio-button.mat-primary:active .mat-radio-persistent-ripple {\n background-color: #3f51b5;\n}\n.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle {\n border-color: #448aff;\n}\n.mat-radio-button.mat-accent .mat-radio-inner-circle,\n.mat-radio-button.mat-accent .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .mat-radio-button.mat-accent.mat-radio-checked .mat-radio-persistent-ripple, .mat-radio-button.mat-accent:active .mat-radio-persistent-ripple {\n background-color: #448aff;\n}\n.mat-radio-button.mat-warn.mat-radio-checked .mat-radio-outer-circle {\n border-color: #f44336;\n}\n.mat-radio-button.mat-warn .mat-radio-inner-circle,\n.mat-radio-button.mat-warn .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .mat-radio-button.mat-warn.mat-radio-checked .mat-radio-persistent-ripple, .mat-radio-button.mat-warn:active .mat-radio-persistent-ripple {\n background-color: #f44336;\n}\n.mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-outer-circle,\n.mat-radio-button.mat-radio-disabled .mat-radio-outer-circle {\n border-color: rgba(0, 0, 0, 0.38);\n}\n.mat-radio-button.mat-radio-disabled .mat-radio-ripple .mat-ripple-element,\n.mat-radio-button.mat-radio-disabled .mat-radio-inner-circle {\n background-color: rgba(0, 0, 0, 0.38);\n}\n.mat-radio-button.mat-radio-disabled .mat-radio-label-content {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-radio-button .mat-ripple-element {\n background-color: black;\n}\n.mat-select-value {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-select-placeholder {\n color: rgba(0, 0, 0, 0.42);\n}\n.mat-select-disabled .mat-select-value {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-select-arrow {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-select-panel {\n background: white;\n}\n.mat-select-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-select-panel .mat-option.mat-selected:not(.mat-option-multiple) {\n background: rgba(0, 0, 0, 0.12);\n}\n.mat-form-field.mat-focused.mat-primary .mat-select-arrow {\n color: #3f51b5;\n}\n.mat-form-field.mat-focused.mat-accent .mat-select-arrow {\n color: #448aff;\n}\n.mat-form-field.mat-focused.mat-warn .mat-select-arrow {\n color: #f44336;\n}\n.mat-form-field .mat-select.mat-select-invalid .mat-select-arrow {\n color: #f44336;\n}\n.mat-form-field .mat-select.mat-select-disabled .mat-select-arrow {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-drawer-container {\n background-color: #fafafa;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-drawer {\n background-color: white;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-drawer.mat-drawer-push {\n background-color: white;\n}\n.mat-drawer:not(.mat-drawer-side) {\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\n}\n.mat-drawer-side {\n border-right: solid 1px rgba(0, 0, 0, 0.12);\n}\n.mat-drawer-side.mat-drawer-end {\n border-left: solid 1px rgba(0, 0, 0, 0.12);\n border-right: none;\n}\n[dir=rtl] .mat-drawer-side {\n border-left: solid 1px rgba(0, 0, 0, 0.12);\n border-right: none;\n}\n[dir=rtl] .mat-drawer-side.mat-drawer-end {\n border-left: none;\n border-right: solid 1px rgba(0, 0, 0, 0.12);\n}\n.mat-drawer-backdrop.mat-drawer-shown {\n background-color: rgba(0, 0, 0, 0.6);\n}\n.mat-slide-toggle.mat-checked .mat-slide-toggle-thumb {\n background-color: #448aff;\n}\n.mat-slide-toggle.mat-checked .mat-slide-toggle-bar {\n background-color: rgba(68, 138, 255, 0.54);\n}\n.mat-slide-toggle.mat-checked .mat-ripple-element {\n background-color: #448aff;\n}\n.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-thumb {\n background-color: #3f51b5;\n}\n.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-bar {\n background-color: rgba(63, 81, 181, 0.54);\n}\n.mat-slide-toggle.mat-primary.mat-checked .mat-ripple-element {\n background-color: #3f51b5;\n}\n.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-thumb {\n background-color: #f44336;\n}\n.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-bar {\n background-color: rgba(244, 67, 54, 0.54);\n}\n.mat-slide-toggle.mat-warn.mat-checked .mat-ripple-element {\n background-color: #f44336;\n}\n.mat-slide-toggle:not(.mat-checked) .mat-ripple-element {\n background-color: black;\n}\n.mat-slide-toggle-thumb {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n background-color: #fafafa;\n}\n.mat-slide-toggle-bar {\n background-color: rgba(0, 0, 0, 0.38);\n}\n.mat-slider-track-background {\n background-color: rgba(0, 0, 0, 0.26);\n}\n.mat-primary .mat-slider-track-fill,\n.mat-primary .mat-slider-thumb,\n.mat-primary .mat-slider-thumb-label {\n background-color: #3f51b5;\n}\n.mat-primary .mat-slider-thumb-label-text {\n color: white;\n}\n.mat-accent .mat-slider-track-fill,\n.mat-accent .mat-slider-thumb,\n.mat-accent .mat-slider-thumb-label {\n background-color: #448aff;\n}\n.mat-accent .mat-slider-thumb-label-text {\n color: white;\n}\n.mat-warn .mat-slider-track-fill,\n.mat-warn .mat-slider-thumb,\n.mat-warn .mat-slider-thumb-label {\n background-color: #f44336;\n}\n.mat-warn .mat-slider-thumb-label-text {\n color: white;\n}\n.mat-slider-focus-ring {\n background-color: rgba(68, 138, 255, 0.2);\n}\n.mat-slider:hover .mat-slider-track-background,\n.cdk-focused .mat-slider-track-background {\n background-color: rgba(0, 0, 0, 0.38);\n}\n.mat-slider-disabled .mat-slider-track-background,\n.mat-slider-disabled .mat-slider-track-fill,\n.mat-slider-disabled .mat-slider-thumb {\n background-color: rgba(0, 0, 0, 0.26);\n}\n.mat-slider-disabled:hover .mat-slider-track-background {\n background-color: rgba(0, 0, 0, 0.26);\n}\n.mat-slider-min-value .mat-slider-focus-ring {\n background-color: rgba(0, 0, 0, 0.12);\n}\n.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb,\n.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb-label {\n background-color: rgba(0, 0, 0, 0.87);\n}\n.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb,\n.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb-label {\n background-color: rgba(0, 0, 0, 0.26);\n}\n.mat-slider-min-value:not(.mat-slider-thumb-label-showing) .mat-slider-thumb {\n border-color: rgba(0, 0, 0, 0.26);\n background-color: transparent;\n}\n.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover .mat-slider-thumb, .mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused .mat-slider-thumb {\n border-color: rgba(0, 0, 0, 0.38);\n}\n.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover.mat-slider-disabled .mat-slider-thumb, .mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused.mat-slider-disabled .mat-slider-thumb {\n border-color: rgba(0, 0, 0, 0.26);\n}\n.mat-slider-has-ticks .mat-slider-wrapper::after {\n border-color: rgba(0, 0, 0, 0.7);\n}\n.mat-slider-horizontal .mat-slider-ticks {\n background-image: repeating-linear-gradient(to right, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent);\n background-image: -moz-repeating-linear-gradient(0.0001deg, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent);\n}\n.mat-slider-vertical .mat-slider-ticks {\n background-image: repeating-linear-gradient(to bottom, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent);\n}\n.mat-step-header.cdk-keyboard-focused, .mat-step-header.cdk-program-focused, .mat-step-header:hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n@media (hover: none) {\n .mat-step-header:hover {\n background: none;\n }\n}\n.mat-step-header .mat-step-label,\n.mat-step-header .mat-step-optional {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-step-header .mat-step-icon {\n background-color: rgba(0, 0, 0, 0.54);\n color: white;\n}\n.mat-step-header .mat-step-icon-selected,\n.mat-step-header .mat-step-icon-state-done,\n.mat-step-header .mat-step-icon-state-edit {\n background-color: #3f51b5;\n color: white;\n}\n.mat-step-header .mat-step-icon-state-error {\n background-color: transparent;\n color: #f44336;\n}\n.mat-step-header .mat-step-label.mat-step-label-active {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-step-header .mat-step-label.mat-step-label-error {\n color: #f44336;\n}\n.mat-stepper-horizontal, .mat-stepper-vertical {\n background-color: white;\n}\n.mat-stepper-vertical-line::before {\n border-left-color: rgba(0, 0, 0, 0.12);\n}\n.mat-horizontal-stepper-header::before,\n.mat-horizontal-stepper-header::after,\n.mat-stepper-horizontal-line {\n border-top-color: rgba(0, 0, 0, 0.12);\n}\n.mat-sort-header-arrow {\n color: #757575;\n}\n.mat-tab-nav-bar,\n.mat-tab-header {\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n}\n.mat-tab-group-inverted-header .mat-tab-nav-bar,\n.mat-tab-group-inverted-header .mat-tab-header {\n border-top: 1px solid rgba(0, 0, 0, 0.12);\n border-bottom: none;\n}\n.mat-tab-label, .mat-tab-link {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-tab-label.mat-tab-disabled, .mat-tab-link.mat-tab-disabled {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-tab-header-pagination-chevron {\n border-color: rgba(0, 0, 0, 0.87);\n}\n.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(0, 0, 0, 0.38);\n}\n.mat-tab-group[class*=mat-background-] .mat-tab-header,\n.mat-tab-nav-bar[class*=mat-background-] {\n border-bottom: none;\n border-top: none;\n}\n.mat-tab-group.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(197, 202, 233, 0.3);\n}\n.mat-tab-group.mat-primary .mat-ink-bar, .mat-tab-nav-bar.mat-primary .mat-ink-bar {\n background-color: #3f51b5;\n}\n.mat-tab-group.mat-primary.mat-background-primary .mat-ink-bar, .mat-tab-nav-bar.mat-primary.mat-background-primary .mat-ink-bar {\n background-color: white;\n}\n.mat-tab-group.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(130, 177, 255, 0.3);\n}\n.mat-tab-group.mat-accent .mat-ink-bar, .mat-tab-nav-bar.mat-accent .mat-ink-bar {\n background-color: #448aff;\n}\n.mat-tab-group.mat-accent.mat-background-accent .mat-ink-bar, .mat-tab-nav-bar.mat-accent.mat-background-accent .mat-ink-bar {\n background-color: white;\n}\n.mat-tab-group.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(255, 205, 210, 0.3);\n}\n.mat-tab-group.mat-warn .mat-ink-bar, .mat-tab-nav-bar.mat-warn .mat-ink-bar {\n background-color: #f44336;\n}\n.mat-tab-group.mat-warn.mat-background-warn .mat-ink-bar, .mat-tab-nav-bar.mat-warn.mat-background-warn .mat-ink-bar {\n background-color: white;\n}\n.mat-tab-group.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(197, 202, 233, 0.3);\n}\n.mat-tab-group.mat-background-primary .mat-tab-header, .mat-tab-group.mat-background-primary .mat-tab-links, .mat-tab-group.mat-background-primary .mat-tab-header-pagination, .mat-tab-nav-bar.mat-background-primary .mat-tab-header, .mat-tab-nav-bar.mat-background-primary .mat-tab-links, .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination {\n background-color: #3f51b5;\n}\n.mat-tab-group.mat-background-primary .mat-tab-label, .mat-tab-group.mat-background-primary .mat-tab-link, .mat-tab-nav-bar.mat-background-primary .mat-tab-label, .mat-tab-nav-bar.mat-background-primary .mat-tab-link {\n color: white;\n}\n.mat-tab-group.mat-background-primary .mat-tab-label.mat-tab-disabled, .mat-tab-group.mat-background-primary .mat-tab-link.mat-tab-disabled, .mat-tab-nav-bar.mat-background-primary .mat-tab-label.mat-tab-disabled, .mat-tab-nav-bar.mat-background-primary .mat-tab-link.mat-tab-disabled {\n color: rgba(255, 255, 255, 0.4);\n}\n.mat-tab-group.mat-background-primary .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-chevron {\n border-color: white;\n}\n.mat-tab-group.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(255, 255, 255, 0.4);\n}\n.mat-tab-group.mat-background-primary .mat-ripple-element, .mat-tab-nav-bar.mat-background-primary .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.mat-tab-group.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(130, 177, 255, 0.3);\n}\n.mat-tab-group.mat-background-accent .mat-tab-header, .mat-tab-group.mat-background-accent .mat-tab-links, .mat-tab-group.mat-background-accent .mat-tab-header-pagination, .mat-tab-nav-bar.mat-background-accent .mat-tab-header, .mat-tab-nav-bar.mat-background-accent .mat-tab-links, .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination {\n background-color: #448aff;\n}\n.mat-tab-group.mat-background-accent .mat-tab-label, .mat-tab-group.mat-background-accent .mat-tab-link, .mat-tab-nav-bar.mat-background-accent .mat-tab-label, .mat-tab-nav-bar.mat-background-accent .mat-tab-link {\n color: white;\n}\n.mat-tab-group.mat-background-accent .mat-tab-label.mat-tab-disabled, .mat-tab-group.mat-background-accent .mat-tab-link.mat-tab-disabled, .mat-tab-nav-bar.mat-background-accent .mat-tab-label.mat-tab-disabled, .mat-tab-nav-bar.mat-background-accent .mat-tab-link.mat-tab-disabled {\n color: rgba(255, 255, 255, 0.4);\n}\n.mat-tab-group.mat-background-accent .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-chevron {\n border-color: white;\n}\n.mat-tab-group.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(255, 255, 255, 0.4);\n}\n.mat-tab-group.mat-background-accent .mat-ripple-element, .mat-tab-nav-bar.mat-background-accent .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.mat-tab-group.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(255, 205, 210, 0.3);\n}\n.mat-tab-group.mat-background-warn .mat-tab-header, .mat-tab-group.mat-background-warn .mat-tab-links, .mat-tab-group.mat-background-warn .mat-tab-header-pagination, .mat-tab-nav-bar.mat-background-warn .mat-tab-header, .mat-tab-nav-bar.mat-background-warn .mat-tab-links, .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination {\n background-color: #f44336;\n}\n.mat-tab-group.mat-background-warn .mat-tab-label, .mat-tab-group.mat-background-warn .mat-tab-link, .mat-tab-nav-bar.mat-background-warn .mat-tab-label, .mat-tab-nav-bar.mat-background-warn .mat-tab-link {\n color: white;\n}\n.mat-tab-group.mat-background-warn .mat-tab-label.mat-tab-disabled, .mat-tab-group.mat-background-warn .mat-tab-link.mat-tab-disabled, .mat-tab-nav-bar.mat-background-warn .mat-tab-label.mat-tab-disabled, .mat-tab-nav-bar.mat-background-warn .mat-tab-link.mat-tab-disabled {\n color: rgba(255, 255, 255, 0.4);\n}\n.mat-tab-group.mat-background-warn .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-chevron {\n border-color: white;\n}\n.mat-tab-group.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(255, 255, 255, 0.4);\n}\n.mat-tab-group.mat-background-warn .mat-ripple-element, .mat-tab-nav-bar.mat-background-warn .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.mat-toolbar {\n background: whitesmoke;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-toolbar.mat-primary {\n background: #3f51b5;\n color: white;\n}\n.mat-toolbar.mat-accent {\n background: #448aff;\n color: white;\n}\n.mat-toolbar.mat-warn {\n background: #f44336;\n color: white;\n}\n.mat-toolbar .mat-form-field-underline,\n.mat-toolbar .mat-form-field-ripple,\n.mat-toolbar .mat-focused .mat-form-field-ripple {\n background-color: currentColor;\n}\n.mat-toolbar .mat-form-field-label,\n.mat-toolbar .mat-focused .mat-form-field-label,\n.mat-toolbar .mat-select-value,\n.mat-toolbar .mat-select-arrow,\n.mat-toolbar .mat-form-field.mat-focused .mat-select-arrow {\n color: inherit;\n}\n.mat-toolbar .mat-input-element {\n caret-color: currentColor;\n}\n.mat-tooltip {\n background: rgba(97, 97, 97, 0.9);\n}\n.mat-tree {\n background: white;\n}\n.mat-tree-node,\n.mat-nested-tree-node {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-snack-bar-container {\n color: rgba(255, 255, 255, 0.7);\n background: #323232;\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-simple-snackbar-action {\n color: #448aff;\n}\n/* You can add global styles to this file, and also import other style files */\n.dark-mode {\n color: white;\n}\n.dark-mode .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-option {\n color: white;\n}\n.dark-mode .mat-option:hover:not(.mat-option-disabled), .dark-mode .mat-option:focus:not(.mat-option-disabled) {\n background: rgba(255, 255, 255, 0.04);\n}\n.dark-mode .mat-option.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled) {\n background: rgba(255, 255, 255, 0.04);\n}\n.dark-mode .mat-option.mat-active {\n background: rgba(255, 255, 255, 0.04);\n color: white;\n}\n.dark-mode .mat-option.mat-option-disabled {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-primary .mat-option.mat-selected:not(.mat-option-disabled) {\n color: #00bcd4;\n}\n.dark-mode .mat-accent .mat-option.mat-selected:not(.mat-option-disabled) {\n color: #2979ff;\n}\n.dark-mode .mat-warn .mat-option.mat-selected:not(.mat-option-disabled) {\n color: #f44336;\n}\n.dark-mode .mat-optgroup-label {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-optgroup-disabled .mat-optgroup-label {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-pseudo-checkbox {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-pseudo-checkbox::after {\n color: #303030;\n}\n.dark-mode .mat-pseudo-checkbox-disabled {\n color: #686868;\n}\n.dark-mode .mat-primary .mat-pseudo-checkbox-checked,\n.dark-mode .mat-primary .mat-pseudo-checkbox-indeterminate {\n background: #00bcd4;\n}\n.dark-mode .mat-pseudo-checkbox-checked,\n.dark-mode .mat-pseudo-checkbox-indeterminate,\n.dark-mode .mat-accent .mat-pseudo-checkbox-checked,\n.dark-mode .mat-accent .mat-pseudo-checkbox-indeterminate {\n background: #2979ff;\n}\n.dark-mode .mat-warn .mat-pseudo-checkbox-checked,\n.dark-mode .mat-warn .mat-pseudo-checkbox-indeterminate {\n background: #f44336;\n}\n.dark-mode .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,\n.dark-mode .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled {\n background: #686868;\n}\n.dark-mode .mat-elevation-z0 {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z1 {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z2 {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z3 {\n box-shadow: 0px 3px 3px -2px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 0, 0, 0.14), 0px 1px 8px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z4 {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z5 {\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 5px 8px 0px rgba(0, 0, 0, 0.14), 0px 1px 14px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z6 {\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z7 {\n box-shadow: 0px 4px 5px -2px rgba(0, 0, 0, 0.2), 0px 7px 10px 1px rgba(0, 0, 0, 0.14), 0px 2px 16px 1px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z8 {\n box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z9 {\n box-shadow: 0px 5px 6px -3px rgba(0, 0, 0, 0.2), 0px 9px 12px 1px rgba(0, 0, 0, 0.14), 0px 3px 16px 2px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z10 {\n box-shadow: 0px 6px 6px -3px rgba(0, 0, 0, 0.2), 0px 10px 14px 1px rgba(0, 0, 0, 0.14), 0px 4px 18px 3px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z11 {\n box-shadow: 0px 6px 7px -4px rgba(0, 0, 0, 0.2), 0px 11px 15px 1px rgba(0, 0, 0, 0.14), 0px 4px 20px 3px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z12 {\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z13 {\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 13px 19px 2px rgba(0, 0, 0, 0.14), 0px 5px 24px 4px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z14 {\n box-shadow: 0px 7px 9px -4px rgba(0, 0, 0, 0.2), 0px 14px 21px 2px rgba(0, 0, 0, 0.14), 0px 5px 26px 4px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z15 {\n box-shadow: 0px 8px 9px -5px rgba(0, 0, 0, 0.2), 0px 15px 22px 2px rgba(0, 0, 0, 0.14), 0px 6px 28px 5px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z16 {\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z17 {\n box-shadow: 0px 8px 11px -5px rgba(0, 0, 0, 0.2), 0px 17px 26px 2px rgba(0, 0, 0, 0.14), 0px 6px 32px 5px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z18 {\n box-shadow: 0px 9px 11px -5px rgba(0, 0, 0, 0.2), 0px 18px 28px 2px rgba(0, 0, 0, 0.14), 0px 7px 34px 6px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z19 {\n box-shadow: 0px 9px 12px -6px rgba(0, 0, 0, 0.2), 0px 19px 29px 2px rgba(0, 0, 0, 0.14), 0px 7px 36px 6px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z20 {\n box-shadow: 0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 20px 31px 3px rgba(0, 0, 0, 0.14), 0px 8px 38px 7px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z21 {\n box-shadow: 0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 21px 33px 3px rgba(0, 0, 0, 0.14), 0px 8px 40px 7px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z22 {\n box-shadow: 0px 10px 14px -6px rgba(0, 0, 0, 0.2), 0px 22px 35px 3px rgba(0, 0, 0, 0.14), 0px 8px 42px 7px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z23 {\n box-shadow: 0px 11px 14px -7px rgba(0, 0, 0, 0.2), 0px 23px 36px 3px rgba(0, 0, 0, 0.14), 0px 9px 44px 8px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z24 {\n box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-app-background, .dark-mode.mat-app-background {\n background-color: #303030;\n color: white;\n}\n.mat-theme-loaded-marker {\n display: none;\n}\n.dark-mode .mat-autocomplete-panel {\n background: #424242;\n color: white;\n}\n.dark-mode .mat-autocomplete-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover) {\n background: #424242;\n}\n.dark-mode .mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover):not(.mat-option-disabled) {\n color: white;\n}\n.dark-mode .mat-badge-content {\n color: white;\n background: #00bcd4;\n}\n.cdk-high-contrast-active .dark-mode .mat-badge-content {\n outline: solid 1px;\n border-radius: 0;\n}\n.dark-mode .mat-badge-accent .mat-badge-content {\n background: #2979ff;\n color: white;\n}\n.dark-mode .mat-badge-warn .mat-badge-content {\n color: white;\n background: #f44336;\n}\n.dark-mode .mat-badge {\n position: relative;\n}\n.dark-mode .mat-badge-hidden .mat-badge-content {\n display: none;\n}\n.dark-mode .mat-badge-disabled .mat-badge-content {\n background: #6e6e6e;\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-badge-content {\n position: absolute;\n text-align: center;\n display: inline-block;\n border-radius: 50%;\n transition: transform 200ms ease-in-out;\n transform: scale(0.6);\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n pointer-events: none;\n}\n.dark-mode .ng-animate-disabled .mat-badge-content,\n.dark-mode .mat-badge-content._mat-animation-noopable {\n transition: none;\n}\n.dark-mode .mat-badge-content.mat-badge-active {\n transform: none;\n}\n.dark-mode .mat-badge-small .mat-badge-content {\n width: 16px;\n height: 16px;\n line-height: 16px;\n}\n.dark-mode .mat-badge-small.mat-badge-above .mat-badge-content {\n top: -8px;\n}\n.dark-mode .mat-badge-small.mat-badge-below .mat-badge-content {\n bottom: -8px;\n}\n.dark-mode .mat-badge-small.mat-badge-before .mat-badge-content {\n left: -16px;\n}\n[dir=rtl] .dark-mode .mat-badge-small.mat-badge-before .mat-badge-content {\n left: auto;\n right: -16px;\n}\n.dark-mode .mat-badge-small.mat-badge-after .mat-badge-content {\n right: -16px;\n}\n[dir=rtl] .dark-mode .mat-badge-small.mat-badge-after .mat-badge-content {\n right: auto;\n left: -16px;\n}\n.dark-mode .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: -8px;\n}\n[dir=rtl] .dark-mode .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: auto;\n right: -8px;\n}\n.dark-mode .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: -8px;\n}\n[dir=rtl] .dark-mode .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: auto;\n left: -8px;\n}\n.dark-mode .mat-badge-medium .mat-badge-content {\n width: 22px;\n height: 22px;\n line-height: 22px;\n}\n.dark-mode .mat-badge-medium.mat-badge-above .mat-badge-content {\n top: -11px;\n}\n.dark-mode .mat-badge-medium.mat-badge-below .mat-badge-content {\n bottom: -11px;\n}\n.dark-mode .mat-badge-medium.mat-badge-before .mat-badge-content {\n left: -22px;\n}\n[dir=rtl] .dark-mode .mat-badge-medium.mat-badge-before .mat-badge-content {\n left: auto;\n right: -22px;\n}\n.dark-mode .mat-badge-medium.mat-badge-after .mat-badge-content {\n right: -22px;\n}\n[dir=rtl] .dark-mode .mat-badge-medium.mat-badge-after .mat-badge-content {\n right: auto;\n left: -22px;\n}\n.dark-mode .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: -11px;\n}\n[dir=rtl] .dark-mode .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: auto;\n right: -11px;\n}\n.dark-mode .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: -11px;\n}\n[dir=rtl] .dark-mode .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: auto;\n left: -11px;\n}\n.dark-mode .mat-badge-large .mat-badge-content {\n width: 28px;\n height: 28px;\n line-height: 28px;\n}\n.dark-mode .mat-badge-large.mat-badge-above .mat-badge-content {\n top: -14px;\n}\n.dark-mode .mat-badge-large.mat-badge-below .mat-badge-content {\n bottom: -14px;\n}\n.dark-mode .mat-badge-large.mat-badge-before .mat-badge-content {\n left: -28px;\n}\n[dir=rtl] .dark-mode .mat-badge-large.mat-badge-before .mat-badge-content {\n left: auto;\n right: -28px;\n}\n.dark-mode .mat-badge-large.mat-badge-after .mat-badge-content {\n right: -28px;\n}\n[dir=rtl] .dark-mode .mat-badge-large.mat-badge-after .mat-badge-content {\n right: auto;\n left: -28px;\n}\n.dark-mode .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: -14px;\n}\n[dir=rtl] .dark-mode .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: auto;\n right: -14px;\n}\n.dark-mode .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: -14px;\n}\n[dir=rtl] .dark-mode .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: auto;\n left: -14px;\n}\n.dark-mode .mat-bottom-sheet-container {\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\n background: #424242;\n color: white;\n}\n.dark-mode .mat-button, .dark-mode .mat-icon-button, .dark-mode .mat-stroked-button {\n color: inherit;\n background: transparent;\n}\n.dark-mode .mat-button.mat-primary, .dark-mode .mat-icon-button.mat-primary, .dark-mode .mat-stroked-button.mat-primary {\n color: #00bcd4;\n}\n.dark-mode .mat-button.mat-accent, .dark-mode .mat-icon-button.mat-accent, .dark-mode .mat-stroked-button.mat-accent {\n color: #2979ff;\n}\n.dark-mode .mat-button.mat-warn, .dark-mode .mat-icon-button.mat-warn, .dark-mode .mat-stroked-button.mat-warn {\n color: #f44336;\n}\n.dark-mode .mat-button.mat-primary[disabled], .dark-mode .mat-button.mat-accent[disabled], .dark-mode .mat-button.mat-warn[disabled], .dark-mode .mat-button[disabled][disabled], .dark-mode .mat-icon-button.mat-primary[disabled], .dark-mode .mat-icon-button.mat-accent[disabled], .dark-mode .mat-icon-button.mat-warn[disabled], .dark-mode .mat-icon-button[disabled][disabled], .dark-mode .mat-stroked-button.mat-primary[disabled], .dark-mode .mat-stroked-button.mat-accent[disabled], .dark-mode .mat-stroked-button.mat-warn[disabled], .dark-mode .mat-stroked-button[disabled][disabled] {\n color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-button.mat-primary .mat-button-focus-overlay, .dark-mode .mat-icon-button.mat-primary .mat-button-focus-overlay, .dark-mode .mat-stroked-button.mat-primary .mat-button-focus-overlay {\n background-color: #00bcd4;\n}\n.dark-mode .mat-button.mat-accent .mat-button-focus-overlay, .dark-mode .mat-icon-button.mat-accent .mat-button-focus-overlay, .dark-mode .mat-stroked-button.mat-accent .mat-button-focus-overlay {\n background-color: #2979ff;\n}\n.dark-mode .mat-button.mat-warn .mat-button-focus-overlay, .dark-mode .mat-icon-button.mat-warn .mat-button-focus-overlay, .dark-mode .mat-stroked-button.mat-warn .mat-button-focus-overlay {\n background-color: #f44336;\n}\n.dark-mode .mat-button[disabled] .mat-button-focus-overlay, .dark-mode .mat-icon-button[disabled] .mat-button-focus-overlay, .dark-mode .mat-stroked-button[disabled] .mat-button-focus-overlay {\n background-color: transparent;\n}\n.dark-mode .mat-button .mat-ripple-element, .dark-mode .mat-icon-button .mat-ripple-element, .dark-mode .mat-stroked-button .mat-ripple-element {\n opacity: 0.1;\n background-color: currentColor;\n}\n.dark-mode .mat-button-focus-overlay {\n background: white;\n}\n.dark-mode .mat-stroked-button:not([disabled]) {\n border-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-flat-button, .dark-mode .mat-raised-button, .dark-mode .mat-fab, .dark-mode .mat-mini-fab {\n color: white;\n background-color: #424242;\n}\n.dark-mode .mat-flat-button.mat-primary, .dark-mode .mat-raised-button.mat-primary, .dark-mode .mat-fab.mat-primary, .dark-mode .mat-mini-fab.mat-primary {\n color: white;\n}\n.dark-mode .mat-flat-button.mat-accent, .dark-mode .mat-raised-button.mat-accent, .dark-mode .mat-fab.mat-accent, .dark-mode .mat-mini-fab.mat-accent {\n color: white;\n}\n.dark-mode .mat-flat-button.mat-warn, .dark-mode .mat-raised-button.mat-warn, .dark-mode .mat-fab.mat-warn, .dark-mode .mat-mini-fab.mat-warn {\n color: white;\n}\n.dark-mode .mat-flat-button.mat-primary[disabled], .dark-mode .mat-flat-button.mat-accent[disabled], .dark-mode .mat-flat-button.mat-warn[disabled], .dark-mode .mat-flat-button[disabled][disabled], .dark-mode .mat-raised-button.mat-primary[disabled], .dark-mode .mat-raised-button.mat-accent[disabled], .dark-mode .mat-raised-button.mat-warn[disabled], .dark-mode .mat-raised-button[disabled][disabled], .dark-mode .mat-fab.mat-primary[disabled], .dark-mode .mat-fab.mat-accent[disabled], .dark-mode .mat-fab.mat-warn[disabled], .dark-mode .mat-fab[disabled][disabled], .dark-mode .mat-mini-fab.mat-primary[disabled], .dark-mode .mat-mini-fab.mat-accent[disabled], .dark-mode .mat-mini-fab.mat-warn[disabled], .dark-mode .mat-mini-fab[disabled][disabled] {\n color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-flat-button.mat-primary, .dark-mode .mat-raised-button.mat-primary, .dark-mode .mat-fab.mat-primary, .dark-mode .mat-mini-fab.mat-primary {\n background-color: #00bcd4;\n}\n.dark-mode .mat-flat-button.mat-accent, .dark-mode .mat-raised-button.mat-accent, .dark-mode .mat-fab.mat-accent, .dark-mode .mat-mini-fab.mat-accent {\n background-color: #2979ff;\n}\n.dark-mode .mat-flat-button.mat-warn, .dark-mode .mat-raised-button.mat-warn, .dark-mode .mat-fab.mat-warn, .dark-mode .mat-mini-fab.mat-warn {\n background-color: #f44336;\n}\n.dark-mode .mat-flat-button.mat-primary[disabled], .dark-mode .mat-flat-button.mat-accent[disabled], .dark-mode .mat-flat-button.mat-warn[disabled], .dark-mode .mat-flat-button[disabled][disabled], .dark-mode .mat-raised-button.mat-primary[disabled], .dark-mode .mat-raised-button.mat-accent[disabled], .dark-mode .mat-raised-button.mat-warn[disabled], .dark-mode .mat-raised-button[disabled][disabled], .dark-mode .mat-fab.mat-primary[disabled], .dark-mode .mat-fab.mat-accent[disabled], .dark-mode .mat-fab.mat-warn[disabled], .dark-mode .mat-fab[disabled][disabled], .dark-mode .mat-mini-fab.mat-primary[disabled], .dark-mode .mat-mini-fab.mat-accent[disabled], .dark-mode .mat-mini-fab.mat-warn[disabled], .dark-mode .mat-mini-fab[disabled][disabled] {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-flat-button.mat-primary .mat-ripple-element, .dark-mode .mat-raised-button.mat-primary .mat-ripple-element, .dark-mode .mat-fab.mat-primary .mat-ripple-element, .dark-mode .mat-mini-fab.mat-primary .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-flat-button.mat-accent .mat-ripple-element, .dark-mode .mat-raised-button.mat-accent .mat-ripple-element, .dark-mode .mat-fab.mat-accent .mat-ripple-element, .dark-mode .mat-mini-fab.mat-accent .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-flat-button.mat-warn .mat-ripple-element, .dark-mode .mat-raised-button.mat-warn .mat-ripple-element, .dark-mode .mat-fab.mat-warn .mat-ripple-element, .dark-mode .mat-mini-fab.mat-warn .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-stroked-button:not([class*=mat-elevation-z]), .dark-mode .mat-flat-button:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-raised-button:not([class*=mat-elevation-z]) {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-raised-button:not([disabled]):active:not([class*=mat-elevation-z]) {\n box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-raised-button[disabled]:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-fab:not([class*=mat-elevation-z]), .dark-mode .mat-mini-fab:not([class*=mat-elevation-z]) {\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-fab:not([disabled]):active:not([class*=mat-elevation-z]), .dark-mode .mat-mini-fab:not([disabled]):active:not([class*=mat-elevation-z]) {\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-fab[disabled]:not([class*=mat-elevation-z]), .dark-mode .mat-mini-fab[disabled]:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-button-toggle-standalone,\n.dark-mode .mat-button-toggle-group {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\n.dark-mode .mat-button-toggle-group-appearance-standard {\n box-shadow: none;\n}\n.dark-mode .mat-button-toggle {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-button-toggle .mat-button-toggle-focus-overlay {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-button-toggle-appearance-standard {\n color: white;\n background: #424242;\n}\n.dark-mode .mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay {\n background-color: white;\n}\n.dark-mode .mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\n border-left: solid 1px rgba(255, 255, 255, 0.12);\n}\n.dark-mode [dir=rtl] .mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\n border-left: none;\n border-right: solid 1px rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle + .mat-button-toggle {\n border-left: none;\n border-right: none;\n border-top: solid 1px rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-button-toggle-checked {\n background-color: #212121;\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-button-toggle-checked.mat-button-toggle-appearance-standard {\n color: white;\n}\n.dark-mode .mat-button-toggle-disabled {\n color: rgba(255, 255, 255, 0.3);\n background-color: black;\n}\n.dark-mode .mat-button-toggle-disabled.mat-button-toggle-appearance-standard {\n background: #424242;\n}\n.dark-mode .mat-button-toggle-disabled.mat-button-toggle-checked {\n background-color: #424242;\n}\n.dark-mode .mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\n.dark-mode .mat-button-toggle-group-appearance-standard {\n border: solid 1px rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-card {\n background: #424242;\n color: white;\n}\n.dark-mode .mat-card:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-card.mat-card-flat:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-card-subtitle {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-checkbox-frame {\n border-color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-checkbox-checkmark {\n fill: #303030;\n}\n.dark-mode .mat-checkbox-checkmark-path {\n stroke: #303030 !important;\n}\n.dark-mode .mat-checkbox-mixedmark {\n background-color: #303030;\n}\n.dark-mode .mat-checkbox-indeterminate.mat-primary .mat-checkbox-background, .dark-mode .mat-checkbox-checked.mat-primary .mat-checkbox-background {\n background-color: #00bcd4;\n}\n.dark-mode .mat-checkbox-indeterminate.mat-accent .mat-checkbox-background, .dark-mode .mat-checkbox-checked.mat-accent .mat-checkbox-background {\n background-color: #2979ff;\n}\n.dark-mode .mat-checkbox-indeterminate.mat-warn .mat-checkbox-background, .dark-mode .mat-checkbox-checked.mat-warn .mat-checkbox-background {\n background-color: #f44336;\n}\n.dark-mode .mat-checkbox-disabled.mat-checkbox-checked .mat-checkbox-background, .dark-mode .mat-checkbox-disabled.mat-checkbox-indeterminate .mat-checkbox-background {\n background-color: #686868;\n}\n.dark-mode .mat-checkbox-disabled:not(.mat-checkbox-checked) .mat-checkbox-frame {\n border-color: #686868;\n}\n.dark-mode .mat-checkbox-disabled .mat-checkbox-label {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-checkbox .mat-ripple-element {\n background-color: white;\n}\n.dark-mode .mat-checkbox-checked:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element,\n.dark-mode .mat-checkbox:active:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element {\n background: #00bcd4;\n}\n.dark-mode .mat-checkbox-checked:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element,\n.dark-mode .mat-checkbox:active:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element {\n background: #2979ff;\n}\n.dark-mode .mat-checkbox-checked:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element,\n.dark-mode .mat-checkbox:active:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element {\n background: #f44336;\n}\n.dark-mode .mat-chip.mat-standard-chip {\n background-color: #616161;\n color: white;\n}\n.dark-mode .mat-chip.mat-standard-chip .mat-chip-remove {\n color: white;\n opacity: 0.4;\n}\n.dark-mode .mat-chip.mat-standard-chip:not(.mat-chip-disabled):active {\n box-shadow: 0px 3px 3px -2px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 0, 0, 0.14), 0px 1px 8px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-chip.mat-standard-chip:not(.mat-chip-disabled) .mat-chip-remove:hover {\n opacity: 0.54;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-disabled {\n opacity: 0.4;\n}\n.dark-mode .mat-chip.mat-standard-chip::after {\n background: white;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-primary {\n background-color: #00bcd4;\n color: white;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-chip-remove {\n color: white;\n opacity: 0.4;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-warn {\n background-color: #f44336;\n color: white;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-chip-remove {\n color: white;\n opacity: 0.4;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-accent {\n background-color: #2979ff;\n color: white;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-chip-remove {\n color: white;\n opacity: 0.4;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-table {\n background: #424242;\n}\n.dark-mode .mat-table thead, .dark-mode .mat-table tbody, .dark-mode .mat-table tfoot,\n.dark-mode mat-header-row, .dark-mode mat-row, .dark-mode mat-footer-row,\n.dark-mode [mat-header-row], .dark-mode [mat-row], .dark-mode [mat-footer-row],\n.dark-mode .mat-table-sticky {\n background: inherit;\n}\n.dark-mode mat-row, .dark-mode mat-header-row, .dark-mode mat-footer-row,\n.dark-mode th.mat-header-cell, .dark-mode td.mat-cell, .dark-mode td.mat-footer-cell {\n border-bottom-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-header-cell {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-cell, .dark-mode .mat-footer-cell {\n color: white;\n}\n.dark-mode .mat-calendar-arrow {\n border-top-color: white;\n}\n.dark-mode .mat-datepicker-toggle,\n.dark-mode .mat-datepicker-content .mat-calendar-next-button,\n.dark-mode .mat-datepicker-content .mat-calendar-previous-button {\n color: white;\n}\n.dark-mode .mat-calendar-table-header {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-calendar-table-header-divider::after {\n background: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-calendar-body-label {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-calendar-body-cell-content {\n color: white;\n border-color: transparent;\n}\n.dark-mode .mat-calendar-body-disabled > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected),\n.dark-mode .cdk-keyboard-focused .mat-calendar-body-active > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected),\n.dark-mode .cdk-program-focused .mat-calendar-body-active > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\n background-color: rgba(255, 255, 255, 0.04);\n}\n.dark-mode .mat-calendar-body-today:not(.mat-calendar-body-selected) {\n border-color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-calendar-body-disabled > .mat-calendar-body-today:not(.mat-calendar-body-selected) {\n border-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-calendar-body-selected {\n background-color: #00bcd4;\n color: white;\n}\n.dark-mode .mat-calendar-body-disabled > .mat-calendar-body-selected {\n background-color: rgba(0, 188, 212, 0.4);\n}\n.dark-mode .mat-calendar-body-today.mat-calendar-body-selected {\n box-shadow: inset 0 0 0 1px white;\n}\n.dark-mode .mat-datepicker-content {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n background-color: #424242;\n color: white;\n}\n.dark-mode .mat-datepicker-content.mat-accent .mat-calendar-body-selected {\n background-color: #2979ff;\n color: white;\n}\n.dark-mode .mat-datepicker-content.mat-accent .mat-calendar-body-disabled > .mat-calendar-body-selected {\n background-color: rgba(41, 121, 255, 0.4);\n}\n.dark-mode .mat-datepicker-content.mat-accent .mat-calendar-body-today.mat-calendar-body-selected {\n box-shadow: inset 0 0 0 1px white;\n}\n.dark-mode .mat-datepicker-content.mat-warn .mat-calendar-body-selected {\n background-color: #f44336;\n color: white;\n}\n.dark-mode .mat-datepicker-content.mat-warn .mat-calendar-body-disabled > .mat-calendar-body-selected {\n background-color: rgba(244, 67, 54, 0.4);\n}\n.dark-mode .mat-datepicker-content.mat-warn .mat-calendar-body-today.mat-calendar-body-selected {\n box-shadow: inset 0 0 0 1px white;\n}\n.dark-mode .mat-datepicker-content-touch {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-datepicker-toggle-active {\n color: #00bcd4;\n}\n.dark-mode .mat-datepicker-toggle-active.mat-accent {\n color: #2979ff;\n}\n.dark-mode .mat-datepicker-toggle-active.mat-warn {\n color: #f44336;\n}\n.dark-mode .mat-dialog-container {\n box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12);\n background: #424242;\n color: white;\n}\n.dark-mode .mat-divider {\n border-top-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-divider-vertical {\n border-right-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-expansion-panel {\n background: #424242;\n color: white;\n}\n.dark-mode .mat-expansion-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-action-row {\n border-top-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-expansion-panel .mat-expansion-panel-header.cdk-keyboard-focused:not([aria-disabled=true]), .dark-mode .mat-expansion-panel .mat-expansion-panel-header.cdk-program-focused:not([aria-disabled=true]), .dark-mode .mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover:not([aria-disabled=true]) {\n background: rgba(255, 255, 255, 0.04);\n}\n@media (hover: none) {\n .dark-mode .mat-expansion-panel:not(.mat-expanded):not([aria-disabled=true]) .mat-expansion-panel-header:hover {\n background: #424242;\n }\n}\n.dark-mode .mat-expansion-panel-header-title {\n color: white;\n}\n.dark-mode .mat-expansion-panel-header-description,\n.dark-mode .mat-expansion-indicator::after {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-expansion-panel-header[aria-disabled=true] {\n color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title,\n.dark-mode .mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description {\n color: inherit;\n}\n.dark-mode .mat-form-field-label {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-hint {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-form-field.mat-focused .mat-form-field-label {\n color: #00bcd4;\n}\n.dark-mode .mat-form-field.mat-focused .mat-form-field-label.mat-accent {\n color: #2979ff;\n}\n.dark-mode .mat-form-field.mat-focused .mat-form-field-label.mat-warn {\n color: #f44336;\n}\n.dark-mode .mat-focused .mat-form-field-required-marker {\n color: #2979ff;\n}\n.dark-mode .mat-form-field-ripple {\n background-color: white;\n}\n.dark-mode .mat-form-field.mat-focused .mat-form-field-ripple {\n background-color: #00bcd4;\n}\n.dark-mode .mat-form-field.mat-focused .mat-form-field-ripple.mat-accent {\n background-color: #2979ff;\n}\n.dark-mode .mat-form-field.mat-focused .mat-form-field-ripple.mat-warn {\n background-color: #f44336;\n}\n.dark-mode .mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid) .mat-form-field-infix::after {\n color: #00bcd4;\n}\n.dark-mode .mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-accent .mat-form-field-infix::after {\n color: #2979ff;\n}\n.dark-mode .mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-warn .mat-form-field-infix::after {\n color: #f44336;\n}\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-label {\n color: #f44336;\n}\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-label.mat-accent,\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-label .mat-form-field-required-marker {\n color: #f44336;\n}\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-ripple,\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-ripple.mat-accent {\n background-color: #f44336;\n}\n.dark-mode .mat-error {\n color: #f44336;\n}\n.dark-mode .mat-form-field-appearance-legacy .mat-form-field-label {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-form-field-appearance-legacy .mat-hint {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-form-field-appearance-legacy .mat-form-field-underline {\n background-color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline {\n background-image: linear-gradient(to right, rgba(255, 255, 255, 0.7) 0%, rgba(255, 255, 255, 0.7) 33%, transparent 0%);\n background-size: 4px 100%;\n background-repeat: repeat-x;\n}\n.dark-mode .mat-form-field-appearance-standard .mat-form-field-underline {\n background-color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline {\n background-image: linear-gradient(to right, rgba(255, 255, 255, 0.7) 0%, rgba(255, 255, 255, 0.7) 33%, transparent 0%);\n background-size: 4px 100%;\n background-repeat: repeat-x;\n}\n.dark-mode .mat-form-field-appearance-fill .mat-form-field-flex {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-flex {\n background-color: rgba(255, 255, 255, 0.05);\n}\n.dark-mode .mat-form-field-appearance-fill .mat-form-field-underline::before {\n background-color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-label {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-underline::before {\n background-color: transparent;\n}\n.dark-mode .mat-form-field-appearance-outline .mat-form-field-outline {\n color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-form-field-appearance-outline .mat-form-field-outline-thick {\n color: white;\n}\n.dark-mode .mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick {\n color: #00bcd4;\n}\n.dark-mode .mat-form-field-appearance-outline.mat-focused.mat-accent .mat-form-field-outline-thick {\n color: #2979ff;\n}\n.dark-mode .mat-form-field-appearance-outline.mat-focused.mat-warn .mat-form-field-outline-thick {\n color: #f44336;\n}\n.dark-mode .mat-form-field-appearance-outline.mat-form-field-invalid.mat-form-field-invalid .mat-form-field-outline-thick {\n color: #f44336;\n}\n.dark-mode .mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-label {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline {\n color: rgba(255, 255, 255, 0.15);\n}\n.dark-mode .mat-icon.mat-primary {\n color: #00bcd4;\n}\n.dark-mode .mat-icon.mat-accent {\n color: #2979ff;\n}\n.dark-mode .mat-icon.mat-warn {\n color: #f44336;\n}\n.dark-mode .mat-form-field-type-mat-native-select .mat-form-field-infix::after {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-input-element:disabled,\n.dark-mode .mat-form-field-type-mat-native-select.mat-form-field-disabled .mat-form-field-infix::after {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-input-element {\n caret-color: #00bcd4;\n}\n.dark-mode .mat-input-element::-moz-placeholder {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-input-element::placeholder {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-input-element::-moz-placeholder {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-input-element::-webkit-input-placeholder {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-input-element:-ms-input-placeholder {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-input-element option {\n color: rgba(0, 0, 0, 0.87);\n}\n.dark-mode .mat-input-element option:disabled {\n color: rgba(0, 0, 0, 0.38);\n}\n.dark-mode .mat-accent .mat-input-element {\n caret-color: #2979ff;\n}\n.dark-mode .mat-warn .mat-input-element,\n.dark-mode .mat-form-field-invalid .mat-input-element {\n caret-color: #f44336;\n}\n.dark-mode .mat-form-field-type-mat-native-select.mat-form-field-invalid .mat-form-field-infix::after {\n color: #f44336;\n}\n.dark-mode .mat-list-base .mat-list-item {\n color: white;\n}\n.dark-mode .mat-list-base .mat-list-option {\n color: white;\n}\n.dark-mode .mat-list-base .mat-subheader {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-list-item-disabled {\n background-color: black;\n}\n.dark-mode .mat-list-option:hover, .dark-mode .mat-list-option:focus,\n.dark-mode .mat-nav-list .mat-list-item:hover,\n.dark-mode .mat-nav-list .mat-list-item:focus,\n.dark-mode .mat-action-list .mat-list-item:hover,\n.dark-mode .mat-action-list .mat-list-item:focus {\n background: rgba(255, 255, 255, 0.04);\n}\n.dark-mode .mat-list-single-selected-option, .dark-mode .mat-list-single-selected-option:hover, .dark-mode .mat-list-single-selected-option:focus {\n background: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-menu-panel {\n background: #424242;\n}\n.dark-mode .mat-menu-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-menu-item {\n background: transparent;\n color: white;\n}\n.dark-mode .mat-menu-item[disabled], .dark-mode .mat-menu-item[disabled]::after {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-menu-item .mat-icon-no-color,\n.dark-mode .mat-menu-item-submenu-trigger::after {\n color: white;\n}\n.dark-mode .mat-menu-item:hover:not([disabled]),\n.dark-mode .mat-menu-item.cdk-program-focused:not([disabled]),\n.dark-mode .mat-menu-item.cdk-keyboard-focused:not([disabled]),\n.dark-mode .mat-menu-item-highlighted:not([disabled]) {\n background: rgba(255, 255, 255, 0.04);\n}\n.dark-mode .mat-paginator {\n background: #424242;\n}\n.dark-mode .mat-paginator,\n.dark-mode .mat-paginator-page-size .mat-select-trigger {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-paginator-decrement,\n.dark-mode .mat-paginator-increment {\n border-top: 2px solid white;\n border-right: 2px solid white;\n}\n.dark-mode .mat-paginator-first,\n.dark-mode .mat-paginator-last {\n border-top: 2px solid white;\n}\n.dark-mode .mat-icon-button[disabled] .mat-paginator-decrement,\n.dark-mode .mat-icon-button[disabled] .mat-paginator-increment,\n.dark-mode .mat-icon-button[disabled] .mat-paginator-first,\n.dark-mode .mat-icon-button[disabled] .mat-paginator-last {\n border-color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-progress-bar-background {\n fill: #b2ebf2;\n}\n.dark-mode .mat-progress-bar-buffer {\n background-color: #b2ebf2;\n}\n.dark-mode .mat-progress-bar-fill::after {\n background-color: #00bcd4;\n}\n.dark-mode .mat-progress-bar.mat-accent .mat-progress-bar-background {\n fill: #82b1ff;\n}\n.dark-mode .mat-progress-bar.mat-accent .mat-progress-bar-buffer {\n background-color: #82b1ff;\n}\n.dark-mode .mat-progress-bar.mat-accent .mat-progress-bar-fill::after {\n background-color: #2979ff;\n}\n.dark-mode .mat-progress-bar.mat-warn .mat-progress-bar-background {\n fill: #ffcdd2;\n}\n.dark-mode .mat-progress-bar.mat-warn .mat-progress-bar-buffer {\n background-color: #ffcdd2;\n}\n.dark-mode .mat-progress-bar.mat-warn .mat-progress-bar-fill::after {\n background-color: #f44336;\n}\n.dark-mode .mat-progress-spinner circle, .dark-mode .mat-spinner circle {\n stroke: #00bcd4;\n}\n.dark-mode .mat-progress-spinner.mat-accent circle, .dark-mode .mat-spinner.mat-accent circle {\n stroke: #2979ff;\n}\n.dark-mode .mat-progress-spinner.mat-warn circle, .dark-mode .mat-spinner.mat-warn circle {\n stroke: #f44336;\n}\n.dark-mode .mat-radio-outer-circle {\n border-color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-radio-button.mat-primary.mat-radio-checked .mat-radio-outer-circle {\n border-color: #00bcd4;\n}\n.dark-mode .mat-radio-button.mat-primary .mat-radio-inner-circle,\n.dark-mode .mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .dark-mode .mat-radio-button.mat-primary.mat-radio-checked .mat-radio-persistent-ripple, .dark-mode .mat-radio-button.mat-primary:active .mat-radio-persistent-ripple {\n background-color: #00bcd4;\n}\n.dark-mode .mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle {\n border-color: #2979ff;\n}\n.dark-mode .mat-radio-button.mat-accent .mat-radio-inner-circle,\n.dark-mode .mat-radio-button.mat-accent .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .dark-mode .mat-radio-button.mat-accent.mat-radio-checked .mat-radio-persistent-ripple, .dark-mode .mat-radio-button.mat-accent:active .mat-radio-persistent-ripple {\n background-color: #2979ff;\n}\n.dark-mode .mat-radio-button.mat-warn.mat-radio-checked .mat-radio-outer-circle {\n border-color: #f44336;\n}\n.dark-mode .mat-radio-button.mat-warn .mat-radio-inner-circle,\n.dark-mode .mat-radio-button.mat-warn .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .dark-mode .mat-radio-button.mat-warn.mat-radio-checked .mat-radio-persistent-ripple, .dark-mode .mat-radio-button.mat-warn:active .mat-radio-persistent-ripple {\n background-color: #f44336;\n}\n.dark-mode .mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-outer-circle,\n.dark-mode .mat-radio-button.mat-radio-disabled .mat-radio-outer-circle {\n border-color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-radio-button.mat-radio-disabled .mat-radio-ripple .mat-ripple-element,\n.dark-mode .mat-radio-button.mat-radio-disabled .mat-radio-inner-circle {\n background-color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-radio-button.mat-radio-disabled .mat-radio-label-content {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-radio-button .mat-ripple-element {\n background-color: white;\n}\n.dark-mode .mat-select-value {\n color: white;\n}\n.dark-mode .mat-select-placeholder {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-select-disabled .mat-select-value {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-select-arrow {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-select-panel {\n background: #424242;\n}\n.dark-mode .mat-select-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-select-panel .mat-option.mat-selected:not(.mat-option-multiple) {\n background: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-form-field.mat-focused.mat-primary .mat-select-arrow {\n color: #00bcd4;\n}\n.dark-mode .mat-form-field.mat-focused.mat-accent .mat-select-arrow {\n color: #2979ff;\n}\n.dark-mode .mat-form-field.mat-focused.mat-warn .mat-select-arrow {\n color: #f44336;\n}\n.dark-mode .mat-form-field .mat-select.mat-select-invalid .mat-select-arrow {\n color: #f44336;\n}\n.dark-mode .mat-form-field .mat-select.mat-select-disabled .mat-select-arrow {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-drawer-container {\n background-color: #303030;\n color: white;\n}\n.dark-mode .mat-drawer {\n background-color: #424242;\n color: white;\n}\n.dark-mode .mat-drawer.mat-drawer-push {\n background-color: #424242;\n}\n.dark-mode .mat-drawer:not(.mat-drawer-side) {\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-drawer-side {\n border-right: solid 1px rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-drawer-side.mat-drawer-end {\n border-left: solid 1px rgba(255, 255, 255, 0.12);\n border-right: none;\n}\n.dark-mode [dir=rtl] .mat-drawer-side {\n border-left: solid 1px rgba(255, 255, 255, 0.12);\n border-right: none;\n}\n.dark-mode [dir=rtl] .mat-drawer-side.mat-drawer-end {\n border-left: none;\n border-right: solid 1px rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-drawer-backdrop.mat-drawer-shown {\n background-color: rgba(189, 189, 189, 0.6);\n}\n.dark-mode .mat-slide-toggle.mat-checked .mat-slide-toggle-thumb {\n background-color: #2979ff;\n}\n.dark-mode .mat-slide-toggle.mat-checked .mat-slide-toggle-bar {\n background-color: rgba(41, 121, 255, 0.54);\n}\n.dark-mode .mat-slide-toggle.mat-checked .mat-ripple-element {\n background-color: #2979ff;\n}\n.dark-mode .mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-thumb {\n background-color: #00bcd4;\n}\n.dark-mode .mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-bar {\n background-color: rgba(0, 188, 212, 0.54);\n}\n.dark-mode .mat-slide-toggle.mat-primary.mat-checked .mat-ripple-element {\n background-color: #00bcd4;\n}\n.dark-mode .mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-thumb {\n background-color: #f44336;\n}\n.dark-mode .mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-bar {\n background-color: rgba(244, 67, 54, 0.54);\n}\n.dark-mode .mat-slide-toggle.mat-warn.mat-checked .mat-ripple-element {\n background-color: #f44336;\n}\n.dark-mode .mat-slide-toggle:not(.mat-checked) .mat-ripple-element {\n background-color: white;\n}\n.dark-mode .mat-slide-toggle-thumb {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n background-color: #bdbdbd;\n}\n.dark-mode .mat-slide-toggle-bar {\n background-color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-slider-track-background {\n background-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-primary .mat-slider-track-fill,\n.dark-mode .mat-primary .mat-slider-thumb,\n.dark-mode .mat-primary .mat-slider-thumb-label {\n background-color: #00bcd4;\n}\n.dark-mode .mat-primary .mat-slider-thumb-label-text {\n color: white;\n}\n.dark-mode .mat-accent .mat-slider-track-fill,\n.dark-mode .mat-accent .mat-slider-thumb,\n.dark-mode .mat-accent .mat-slider-thumb-label {\n background-color: #2979ff;\n}\n.dark-mode .mat-accent .mat-slider-thumb-label-text {\n color: white;\n}\n.dark-mode .mat-warn .mat-slider-track-fill,\n.dark-mode .mat-warn .mat-slider-thumb,\n.dark-mode .mat-warn .mat-slider-thumb-label {\n background-color: #f44336;\n}\n.dark-mode .mat-warn .mat-slider-thumb-label-text {\n color: white;\n}\n.dark-mode .mat-slider-focus-ring {\n background-color: rgba(41, 121, 255, 0.2);\n}\n.dark-mode .mat-slider:hover .mat-slider-track-background,\n.dark-mode .cdk-focused .mat-slider-track-background {\n background-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-slider-disabled .mat-slider-track-background,\n.dark-mode .mat-slider-disabled .mat-slider-track-fill,\n.dark-mode .mat-slider-disabled .mat-slider-thumb {\n background-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-slider-disabled:hover .mat-slider-track-background {\n background-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-slider-min-value .mat-slider-focus-ring {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb,\n.dark-mode .mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb-label {\n background-color: white;\n}\n.dark-mode .mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb,\n.dark-mode .mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb-label {\n background-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing) .mat-slider-thumb {\n border-color: rgba(255, 255, 255, 0.3);\n background-color: transparent;\n}\n.dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover .mat-slider-thumb, .dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused .mat-slider-thumb {\n border-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover.mat-slider-disabled .mat-slider-thumb, .dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused.mat-slider-disabled .mat-slider-thumb {\n border-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-slider-has-ticks .mat-slider-wrapper::after {\n border-color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-slider-horizontal .mat-slider-ticks {\n background-image: repeating-linear-gradient(to right, rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0.7) 2px, transparent 0, transparent);\n background-image: -moz-repeating-linear-gradient(0.0001deg, rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0.7) 2px, transparent 0, transparent);\n}\n.dark-mode .mat-slider-vertical .mat-slider-ticks {\n background-image: repeating-linear-gradient(to bottom, rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0.7) 2px, transparent 0, transparent);\n}\n.dark-mode .mat-step-header.cdk-keyboard-focused, .dark-mode .mat-step-header.cdk-program-focused, .dark-mode .mat-step-header:hover {\n background-color: rgba(255, 255, 255, 0.04);\n}\n@media (hover: none) {\n .dark-mode .mat-step-header:hover {\n background: none;\n }\n}\n.dark-mode .mat-step-header .mat-step-label,\n.dark-mode .mat-step-header .mat-step-optional {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-step-header .mat-step-icon {\n background-color: rgba(255, 255, 255, 0.7);\n color: white;\n}\n.dark-mode .mat-step-header .mat-step-icon-selected,\n.dark-mode .mat-step-header .mat-step-icon-state-done,\n.dark-mode .mat-step-header .mat-step-icon-state-edit {\n background-color: #00bcd4;\n color: white;\n}\n.dark-mode .mat-step-header .mat-step-icon-state-error {\n background-color: transparent;\n color: #f44336;\n}\n.dark-mode .mat-step-header .mat-step-label.mat-step-label-active {\n color: white;\n}\n.dark-mode .mat-step-header .mat-step-label.mat-step-label-error {\n color: #f44336;\n}\n.dark-mode .mat-stepper-horizontal, .dark-mode .mat-stepper-vertical {\n background-color: #424242;\n}\n.dark-mode .mat-stepper-vertical-line::before {\n border-left-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-horizontal-stepper-header::before,\n.dark-mode .mat-horizontal-stepper-header::after,\n.dark-mode .mat-stepper-horizontal-line {\n border-top-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-sort-header-arrow {\n color: #c6c6c6;\n}\n.dark-mode .mat-tab-nav-bar,\n.dark-mode .mat-tab-header {\n border-bottom: 1px solid rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-tab-group-inverted-header .mat-tab-nav-bar,\n.dark-mode .mat-tab-group-inverted-header .mat-tab-header {\n border-top: 1px solid rgba(255, 255, 255, 0.12);\n border-bottom: none;\n}\n.dark-mode .mat-tab-label, .dark-mode .mat-tab-link {\n color: white;\n}\n.dark-mode .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-link.mat-tab-disabled {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-tab-header-pagination-chevron {\n border-color: white;\n}\n.dark-mode .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-tab-group[class*=mat-background-] .mat-tab-header,\n.dark-mode .mat-tab-nav-bar[class*=mat-background-] {\n border-bottom: none;\n border-top: none;\n}\n.dark-mode .mat-tab-group.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(178, 235, 242, 0.3);\n}\n.dark-mode .mat-tab-group.mat-primary .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-primary .mat-ink-bar {\n background-color: #00bcd4;\n}\n.dark-mode .mat-tab-group.mat-primary.mat-background-primary .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-primary.mat-background-primary .mat-ink-bar {\n background-color: white;\n}\n.dark-mode .mat-tab-group.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(130, 177, 255, 0.3);\n}\n.dark-mode .mat-tab-group.mat-accent .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-accent .mat-ink-bar {\n background-color: #2979ff;\n}\n.dark-mode .mat-tab-group.mat-accent.mat-background-accent .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-accent.mat-background-accent .mat-ink-bar {\n background-color: white;\n}\n.dark-mode .mat-tab-group.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(255, 205, 210, 0.3);\n}\n.dark-mode .mat-tab-group.mat-warn .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-warn .mat-ink-bar {\n background-color: #f44336;\n}\n.dark-mode .mat-tab-group.mat-warn.mat-background-warn .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-warn.mat-background-warn .mat-ink-bar {\n background-color: white;\n}\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(178, 235, 242, 0.3);\n}\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-header, .dark-mode .mat-tab-group.mat-background-primary .mat-tab-links, .dark-mode .mat-tab-group.mat-background-primary .mat-tab-header-pagination, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-header, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-links, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination {\n background-color: #00bcd4;\n}\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-label, .dark-mode .mat-tab-group.mat-background-primary .mat-tab-link, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-label, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-link {\n color: white;\n}\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-group.mat-background-primary .mat-tab-link.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-link.mat-tab-disabled {\n color: rgba(255, 255, 255, 0.4);\n}\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-chevron {\n border-color: white;\n}\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(255, 255, 255, 0.4);\n}\n.dark-mode .mat-tab-group.mat-background-primary .mat-ripple-element, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(130, 177, 255, 0.3);\n}\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-header, .dark-mode .mat-tab-group.mat-background-accent .mat-tab-links, .dark-mode .mat-tab-group.mat-background-accent .mat-tab-header-pagination, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-header, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-links, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination {\n background-color: #2979ff;\n}\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-label, .dark-mode .mat-tab-group.mat-background-accent .mat-tab-link, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-label, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-link {\n color: white;\n}\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-group.mat-background-accent .mat-tab-link.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-link.mat-tab-disabled {\n color: rgba(255, 255, 255, 0.4);\n}\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-chevron {\n border-color: white;\n}\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(255, 255, 255, 0.4);\n}\n.dark-mode .mat-tab-group.mat-background-accent .mat-ripple-element, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(255, 205, 210, 0.3);\n}\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-header, .dark-mode .mat-tab-group.mat-background-warn .mat-tab-links, .dark-mode .mat-tab-group.mat-background-warn .mat-tab-header-pagination, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-header, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-links, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination {\n background-color: #f44336;\n}\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-label, .dark-mode .mat-tab-group.mat-background-warn .mat-tab-link, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-label, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-link {\n color: white;\n}\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-group.mat-background-warn .mat-tab-link.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-link.mat-tab-disabled {\n color: rgba(255, 255, 255, 0.4);\n}\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-chevron {\n border-color: white;\n}\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(255, 255, 255, 0.4);\n}\n.dark-mode .mat-tab-group.mat-background-warn .mat-ripple-element, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-toolbar {\n background: #212121;\n color: white;\n}\n.dark-mode .mat-toolbar.mat-primary {\n background: #00bcd4;\n color: white;\n}\n.dark-mode .mat-toolbar.mat-accent {\n background: #2979ff;\n color: white;\n}\n.dark-mode .mat-toolbar.mat-warn {\n background: #f44336;\n color: white;\n}\n.dark-mode .mat-toolbar .mat-form-field-underline,\n.dark-mode .mat-toolbar .mat-form-field-ripple,\n.dark-mode .mat-toolbar .mat-focused .mat-form-field-ripple {\n background-color: currentColor;\n}\n.dark-mode .mat-toolbar .mat-form-field-label,\n.dark-mode .mat-toolbar .mat-focused .mat-form-field-label,\n.dark-mode .mat-toolbar .mat-select-value,\n.dark-mode .mat-toolbar .mat-select-arrow,\n.dark-mode .mat-toolbar .mat-form-field.mat-focused .mat-select-arrow {\n color: inherit;\n}\n.dark-mode .mat-toolbar .mat-input-element {\n caret-color: currentColor;\n}\n.dark-mode .mat-tooltip {\n background: rgba(97, 97, 97, 0.9);\n}\n.dark-mode .mat-tree {\n background: #424242;\n}\n.dark-mode .mat-tree-node,\n.dark-mode .mat-nested-tree-node {\n color: white;\n}\n.dark-mode .mat-snack-bar-container {\n color: rgba(0, 0, 0, 0.87);\n background: #fafafa;\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-simple-snackbar-action {\n color: inherit;\n}\n.mat-stroked-button.mat-black {\n border: solid black 1px;\n border-radius: 0;\n display: flex;\n align-items: center;\n height: 2em;\n padding-left: 2.5em;\n padding-right: 2.5em;\n}\n.mat-stroked-button.mat-black .mat-button-wrapper {\n font-weight: normal;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n color: black;\n}\n.mat-stroked-button.mat-coachmark {\n border: solid #6f4d00 1px;\n border-radius: 0;\n display: flex;\n align-items: center;\n height: 2em;\n padding-left: 2.5em;\n padding-right: 2.5em;\n}\n.mat-stroked-button.mat-coachmark .mat-button-wrapper {\n font-weight: normal;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n color: #6f4d00;\n}\n.mat-stroked-button.mat-blue-coachmark {\n border: solid #1B1B19 1px;\n border-radius: 0;\n display: flex;\n align-items: center;\n height: 2em;\n padding-left: 2.5em;\n padding-right: 2.5em;\n}\n.mat-stroked-button.mat-blue-coachmark .mat-button-wrapper {\n font-weight: normal;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n color: #1B1B19;\n}\nhtml,\nbody {\n height: 100%;\n width: 100%;\n}\nbody {\n background-color: #fff;\n}\n.app,\nbody {\n font-family: \"Helvetica Neue\", \"Helvetica\", Arial, sans-serif;\n font-weight: 300;\n}\n.app {\n position: absolute;\n}\nhtml,\nbody {\n margin: 0;\n padding: 0;\n font-size: 16px;\n}\n.app {\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n}\n* {\n font-family: \"Helvetica Neue\", \"Helvetica\", Arial, sans-serif;\n box-sizing: border-box;\n}\n.center {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n margin: auto;\n}\n.loading {\n display: inline-block;\n padding: 1.5em;\n border-radius: 1em;\n color: #000;\n font-size: 10mm;\n text-align: center;\n}\n.bounce,\n.bounce .circle,\n.bounce .circle .inner {\n height: 4em;\n width: 4em;\n border-radius: 100%;\n}\n.bounce .circle {\n -webkit-animation: sk-scaleout 0.8s infinite ease-in-out;\n animation: sk-scaleout 0.8s infinite ease-in-out;\n}\n.bounce .circle .inner {\n background-color: #000;\n}\n@-webkit-keyframes sk-scaleout {\n 0% {\n -webkit-transform: scale(0);\n }\n 20% {\n opacity: 1;\n }\n 100% {\n -webkit-transform: scale(1);\n opacity: 0;\n }\n}\n@keyframes sk-scaleout {\n 0% {\n transform: scale(0);\n }\n 20% {\n opacity: 1;\n }\n 100% {\n transform: scale(1);\n opacity: 0;\n }\n}\n.no-script {\n height: 10em;\n width: 15em;\n padding: 0.5em 1em;\n background-color: #FFF;\n border-radius: 0.1em;\n box-shadow: 0 0.1em 0.2em 0.1em rgba(0, 0, 0, 0.2);\n text-align: center;\n position: absolute;\n top: 1em;\n left: 50%;\n transform: translateX(-50%);\n}\n.no-script img {\n border-radius: 0.2em;\n height: 6em;\n width: 6em;\n}\n.no-script .title {\n padding: 0 1em;\n font-style: italic;\n font-size: 1.2em;\n}\n.no-script .content {\n display: flex;\n}\n.aca-coin {\n position: relative;\n height: 4em;\n width: 4em;\n padding: 0.5em;\n margin: 0.5em;\n border-radius: 100%;\n background-color: #dd3d5e;\n -webkit-animation: coin-spin 2s infinite ease-in-out;\n animation: coin-spin 2s infinite ease-in-out;\n}\n.aca-logo {\n height: 3em;\n width: 3em;\n background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDIwMDEwOTA0Ly9FTiIKICJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy1TVkctMjAwMTA5MDQvRFREL3N2ZzEwLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4wIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiB3aWR0aD0iNzc5LjAwMDAwMHB0IiBoZWlnaHQ9IjMyNC4wMDAwMDBwdCIgdmlld0JveD0iMCAwIDc3OS4wMDAwMDAgMzI0LjAwMDAwMCIKIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiPgo8bWV0YWRhdGE+CkNyZWF0ZWQgYnkgcG90cmFjZSAxLjE0LCB3cml0dGVuIGJ5IFBldGVyIFNlbGluZ2VyIDIwMDEtMjAxNwo8L21ldGFkYXRhPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjAwMDAwMCwzMjQuMDAwMDAwKSBzY2FsZSgwLjEwMDAwMCwtMC4xMDAwMDApIgpmaWxsPSIjZmZmIiBzdHJva2U9Im5vbmUiPgo8cGF0aCBkPSJNNDAwNSAzMjI4IGMtNDQ3IC0yNSAtODM5IC0yMzUgLTExMDkgLTU5NiAtMzE5IC00MjYgLTQxMSAtMTE0NQotMjE2IC0xNjk3IDE2NyAtNDcxIDU0OSAtODAzIDEwMzcgLTkwMiAxMTEgLTIzIDUwNSAtMjYgNjIzIC01IDEyNyAyMyAyODAgNjIKMzgyIDk5IGw5OCAzNSAwIDEwNSBjMCA5NiAtMiAxMDUgLTE3IDEwMCAtMTAgLTMgLTU3IC0yMiAtMTA2IC00MSAtMTkzIC04MAotMzczIC0xMTEgLTYzNyAtMTExIC0yNzQgMCAtNDAxIDI3IC01OTcgMTI5IC0xMTYgNjAgLTE5OSAxMjQgLTMwMyAyMzMgLTE3MgoxNzggLTI3NiAzODggLTMyNSA2NTYgLTM2IDE5NSAtMzYgNTA4IDAgNzAzIDEwMSA1NTUgNDY2IDk1MiA5ODIgMTA3MCA5MyAyMQo0MTUgMzAgNTI1IDE1IDEyNCAtMTggMjc2IC01NiAzNzkgLTk2IDUwIC0xOSA5MyAtMzUgOTUgLTM1IDIgMCA0IDUyIDQgMTE1CmwwIDExNCAtODcgMjcgYy0yMjggNjkgLTQ2OSA5NyAtNzI4IDgyeiIvPgo8cGF0aCBkPSJNNTkxIDE2MzMgYy0zMjEgLTg1MSAtNTg2IC0xNTU0IC01ODkgLTE1NjEgLTMgLTkgMjQgLTEyIDExNiAtMTIKbDEyMCAwIDYwIDE2MiBjMzMgOTAgMTEzIDMwOCAxNzggNDg2IGwxMTkgMzIyIDY3NSAwIDY3NSAwIDEwNCAtMjgyIGM1NyAtMTU2CjEzNyAtMzc0IDE3OCAtNDg2IGw3NSAtMjAyIDExOSAwIGM4OSAwIDExOSAzIDExOCAxMyAwIDYgLTI2MCA3MDcgLTU3NyAxNTU3CmwtNTc3IDE1NDUgLTEwNSAzIC0xMDYgMyAtNTgzIC0xNTQ4eiIvPgo8cGF0aCBkPSJNNjQwNSAzMTYzIGMtMzggLTk5IC0xMTU5IC0zMDcyIC0xMTYzIC0zMDg2IC00IC0xNSA2IC0xNyAxMTQgLTE3CmwxMTkgMCAxMDQgMjgzIGM1NyAxNTUgMTM3IDM3MyAxNzggNDg1IGw3NSAyMDIgNjc2IC0yIDY3NiAtMyAxNzYgLTQ4MCAxNzcKLTQ4MCAxMjIgLTMgMTIzIC0zIC04IDIzIGMtNCAxMiAtMjY0IDcxMyAtNTc5IDE1NTggbC01NzMgMTUzNSAtMTA1IDMgYy05MyAyCi0xMDUgMSAtMTEyIC0xNXoiLz4KPC9nPgo8L3N2Zz4K);\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n}\n@-webkit-keyframes coin-spin {\n 0% {\n transform: rotateY(0deg) translateY(0%);\n }\n 49% {\n transform: rotateY(179deg) translateY(20%);\n }\n 50% {\n transform: rotateY(181deg) translateY(20%);\n }\n 100% {\n transform: rotateY(359deg) translateY(0%);\n }\n}\n@keyframes coin-spin {\n 0% {\n transform: rotateY(0deg) translateY(0%);\n }\n 49% {\n transform: rotateY(179deg) translateY(20%);\n }\n 50% {\n transform: rotateY(181deg) translateY(20%);\n }\n 100% {\n transform: rotateY(359deg) translateY(0%);\n }\n}\n.shadow {\n position: absolute;\n bottom: 0;\n left: 50%;\n -webkit-animation: floating-shadow 2s infinite ease-in-out;\n animation: floating-shadow 2s infinite ease-in-out;\n width: 48px;\n height: 6px;\n background-color: rgba(0, 0, 0, 0.2);\n border-radius: 100%;\n}\n@-webkit-keyframes floating-shadow {\n 0% {\n transform: translateX(-50%) scale(1);\n }\n 45% {\n transform: translateX(-50%) scale(1.3);\n }\n 55% {\n transform: translateX(-50%) scale(1.3);\n }\n 100% {\n transform: translateX(-50%) scale(1);\n }\n}\n@keyframes floating-shadow {\n 0% {\n transform: translateX(-50%) scale(1);\n }\n 45% {\n transform: translateX(-50%) scale(1.3);\n }\n 55% {\n transform: translateX(-50%) scale(1.3);\n }\n 100% {\n transform: translateX(-50%) scale(1);\n }\n}\nhtml, body {\n height: 100%;\n}\nbody {\n margin: 0;\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n.yellow-snackbar {\n background: #ffd149;\n color: rgba(0, 0, 0, 0.9);\n text-align: center;\n}\n.yellow-snackbar span {\n color: rgba(0, 0, 0, 0.9);\n}\n.sub app-map-controls > div mck-legend-dropdown {\n position: relative;\n top: -6px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .sub app-map-controls > div .map-info-button {\n display: none !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .sub app-map-controls > div .map-info-button {\n display: none !important;\n }\n}\n.mck-modal-backdrop {\n background-color: rgba(5, 28, 44, 0.85);\n}\n.pulsate {\n -webkit-animation: pulsate 2s ease-out;\n animation: pulsate 2s ease-out;\n -webkit-animation-iteration-count: infinite;\n animation-iteration-count: infinite;\n opacity: 0.3;\n}\n@-webkit-keyframes pulsate {\n 0% {\n opacity: 0.3;\n }\n 50% {\n opacity: 1;\n }\n 100% {\n opacity: 0.3;\n }\n}\n@keyframes pulsate {\n 0% {\n opacity: 0.3;\n }\n 50% {\n opacity: 1;\n }\n 100% {\n opacity: 0.3;\n }\n}\n.mat-form-field-invalid .mat-form-field-outline > div, .mat-form-field-invalid .mat-form-field-outline-thick > div {\n border-color: #f44336 !important;\n}\n.mck-toggle {\n position: relative;\n}\n.mck-toggle .mat-slide-toggle-thumb {\n height: 0.875rem;\n width: 0.875rem;\n border-radius: 50%;\n}\n.mck-toggle .mat-slide-toggle-thumb-container {\n top: 0.2rem;\n left: 0.2rem;\n}\n.mck-toggle .mat-slide-toggle-bar {\n position: relative;\n width: 2.5rem;\n height: 1.25rem;\n flex-shrink: 0;\n border-radius: 1.25rem;\n background-color: #d0d0d0;\n}\n.mck-toggle .mat-slide-toggle-bar .mat-slide-toggle-ripple {\n top: calc(50% - 23px);\n}\n.mck-toggle.mat-checked .mat-slide-toggle-thumb-container {\n left: 0.42rem;\n}\n.mck-toggle.mat-checked .mat-slide-toggle-thumb {\n background-color: white;\n}\n.mck-toggle.mat-checked .mat-slide-toggle-bar {\n background-color: #2152fe;\n}\n.mck-chevron-icon svg {\n transform: rotate(180deg);\n transition: transform 0.5s ease;\n}\n.mck-chevron-icon.turn-up svg {\n transform: rotate(0deg);\n}\n.mat-tab-label {\n padding: 0 6px 0 2px !important;\n min-width: auto !important;\n margin-right: 40px;\n font-family: \"McKinsey Sans\";\n font-size: 20px;\n font-weight: 400;\n color: #333333;\n opacity: 1 !important;\n}\n.mat-tab-label.mat-tab-label-active .mat-tab-label-content {\n color: #2251FF;\n}\n.mat-tab-label .mat-tab-label-content {\n color: #333333;\n padding-bottom: 20px;\n}\n.mat-tab-group.mat-primary .mat-ink-bar, .mat-tab-nav-bar.mat-primary .mat-ink-bar {\n background-color: #2251FF;\n height: 4px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-tab .mat-tab-header {\n transform: scale(0.65) !important;\n width: 100vw;\n display: block;\n position: relative;\n left: -19%;\n }\n .mck-tab .mat-tab-header .mat-tab-header-pagination {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-tab .mat-tab-header {\n transform: scale(0.65) !important;\n width: 100vw;\n display: block;\n position: relative;\n left: -19%;\n }\n .mck-tab .mat-tab-header .mat-tab-header-pagination {\n display: none;\n }\n}\n.status {\n background: #fff;\n color: #000;\n}\n.status.tentative, .status.pending, .status.requested {\n background: #FFF3CE;\n color: #6A4F00;\n}\n.status.accepted {\n background: #D1F4DD;\n color: #006200;\n}\n.status.approved {\n background: #D1F4DD;\n color: #006200;\n}\n.status.expired {\n background: #F0F0F0;\n color: #757575;\n}\n.status.declined, .status.cancelled {\n background: #FFE5EA;\n color: #B0001D;\n}\n.banner {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 26px;\n box-sizing: border-box;\n}\n.banner .banner-text {\n width: calc(100% - 50px);\n padding: 0 20px;\n box-sizing: border-box;\n font-weight: 500;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n margin: 0;\n text-align: left;\n}\n.banner img:last-child {\n cursor: pointer;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .banner {\n align-items: end;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .banner {\n align-items: end;\n }\n}\n.banner.advise {\n background-color: #EBEBF6;\n justify-content: start !important;\n border: 1px solid rgba(106, 79, 0, 0.11);\n}\n.banner.advise .banner-text {\n color: #1B1B19;\n}\n.banner.info {\n background-color: #E6ECFF;\n}\n.banner.info .banner-text {\n color: #1E32E6;\n}\n.banner.warning {\n background-color: #fdf1f3;\n}\n.banner.warning .banner-text {\n color: #B0001D;\n}\n.banner.fixed {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n z-index: 5;\n}\n.fullpage-modal {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 3;\n background-color: #f8f9fa;\n}\n.fullpage-modal .header {\n z-index: 1;\n}\n.coachmark {\n margin-top: 0;\n position: relative;\n top: -6px;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n line-height: 20px;\n color: #333333;\n}\n.bottom-panel-buttons {\n position: fixed;\n bottom: 0;\n width: 100%;\n min-height: 80px;\n background-color: white;\n border: 1px solid #E6E6E6;\n z-index: 1002;\n}\n.bottom-panel-buttons .buttons {\n padding: 24px 16px;\n border: none;\n background-color: transparent;\n max-width: 684px;\n margin: 0 auto;\n display: flex;\n}\n.bottom-panel-buttons .buttons button {\n flex: 1;\n height: 48px;\n font-size: 16px;\n max-width: 332px;\n}\n.bottom-panel-buttons .buttons button:nth-child(1) {\n margin-right: 5px;\n border: 1px solid #D0D0D0;\n}\n.bottom-panel-buttons .buttons button:nth-child(2) {\n margin-left: 5px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .bottom-panel-buttons .buttons {\n padding: 16px 0;\n }\n .bottom-panel-buttons .buttons button {\n margin: 0 16px;\n }\n .bottom-panel-buttons .buttons button:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel-buttons .buttons button:nth-child(2) {\n margin-left: 8px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .bottom-panel-buttons .buttons {\n padding: 16px 0;\n }\n .bottom-panel-buttons .buttons button {\n margin: 0 16px;\n }\n .bottom-panel-buttons .buttons button:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel-buttons .buttons button:nth-child(2) {\n margin-left: 8px;\n }\n}\n.modal_mask {\n width: 100vw;\n height: 100vh;\n position: fixed;\n top: 0;\n left: 0;\n background-color: white;\n z-index: 3;\n}\n.mat-snack-bar-container {\n width: 380px;\n height: 100%;\n color: #333333;\n background: #fff;\n font-size: 14px;\n font-weight: 500;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\";\n}", "",{"version":3,"sources":["styles.scss","/home/runner/work/mckinsey-converge/mckinsey-converge/node_modules/@angular/material/_theming.scss","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/styles/variables.scss","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/styles/mixins.scss","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/vars.scss","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/mixins.scss","/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/styles.scss","/home/runner/work/mckinsey-converge/mckinsey-converge/apps/staff/src/calendar.scss","/home/runner/work/mckinsey-converge/mckinsey-converge/apps/staff/src/styles.scss"],"names":[],"mappings":"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p8BI;EJywDd;AACF;AK1zDY;EC++BR;IAEQ,2BAAA;IACA,YAAA;IACA,iBFn8BI;IEo8BJ,kBFp8BI;EJixDd;AACF;AM30BQ;EACI,iCFx+BO;AJqzDnB;AMv0BY;EACI,yBFx/BI;AJi0DpB;AMt0BY;EACI,uBAAA;ANw0BhB;AMp0BQ;EACI,YAAA;ANs0BZ;AMn0BQ;EACI,OAAA;EDlxBR,kBAAA;EACA,kBAAA;EACA,8DA9Kc;EA+Kd,eAAA;EACA,mBAAA;ECgxBQ,gBAAA;ED9sBR,oBAAA;EACA,gBAAA;EACA,qBC6sB2B;ED5sB3B,4BAAA;EC6sBQ,mBAAA;AN40BZ;AMz0BQ;EACI,WAAA;EACA,YAAA;EACA,8BAAA;AN20BZ;AMx0BQ;EACI,SAAA;EACA,UAAA;AN00BZ;AMv0BQ;EACI,YAAA;EACA,yBFriCmB;EEsiCnB,mBAAA;ANy0BZ;AMr0BI;ED5sBA,yBDzVc;AJ62DlB;AMr0BQ;EACI,WAAA;ANu0BZ;AMt0BY;EDjtBR,yBDzVc;EE4iCF,WAAA;EACA,YAAA;EACA,gBAAA;ANw0BhB;AMp0BQ;EDztBJ,yBDzVc;EEojCN,YAAA;EACA,gBAAA;EACA,gBAAA;ANs0BZ;AMn0BQ;EDhuBJ,yBDzVc;EC6Vd,WAAA;EACA,YAAA;EC8tBQ,gBAAA;ANs0BZ;AKt4DY;EC6jCJ;IDxtBA,YAAA;IACA,aAAA;ELqiDN;AACF;AK54DY;EC6jCJ;IDxtBA,YAAA;IACA,aAAA;EL2iDN;AACF;AM/0BQ;EDtuBJ,yBDzVc;ECuWd,YAAA;EACA,YAAA;EC0tBQ,gBAAA;EACA,gBAAA;ANk1BZ;AKz5DY;ECmkCJ;IDptBA,YAAA;IACA,YAAA;EL8iDN;AACF;AK/5DY;ECmkCJ;IDptBA,YAAA;IACA,YAAA;ELojDN;AACF;AM31BQ;ED7uBJ,yBDzVc;EEwkCN,YAAA;EACA,gBAAA;AN61BZ;AK16DY;EC0kCJ;IAMQ,gBAAA;EN81Bd;AACF;AK/6DY;EC0kCJ;IAMQ,gBAAA;ENm2Bd;AACF;AMh2BQ;EDvvBJ,yBDzVc;EEklCN,YAAA;EACA,gBAAA;ANk2BZ;AKz7DY;EColCJ;IAMQ,gBAAA;ENm2Bd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","file":"styles.scss","sourcesContent":["@charset \"UTF-8\";\n/* Theme for the ripple elements.*/\n/* stylelint-disable material/no-prefixes */\n/* stylelint-enable */\n.mat-badge-content {\n font-weight: 600;\n font-size: 12px;\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.mat-badge-small .mat-badge-content {\n font-size: 9px;\n}\n\n.mat-badge-large .mat-badge-content {\n font-size: 24px;\n}\n\n.mat-h1, .mat-headline, .mat-typography h1 {\n font: 400 24px/32px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n margin: 0 0 16px;\n}\n\n.mat-h2, .mat-title, .mat-typography h2 {\n font: 500 20px/32px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n margin: 0 0 16px;\n}\n\n.mat-h3, .mat-subheading-2, .mat-typography h3 {\n font: 400 16px/28px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n margin: 0 0 16px;\n}\n\n.mat-h4, .mat-subheading-1, .mat-typography h4 {\n font: 400 15px/24px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n margin: 0 0 16px;\n}\n\n.mat-h5, .mat-typography h5 {\n font: 400 calc(14px * 0.83)/20px Roboto, \"Helvetica Neue\", sans-serif;\n margin: 0 0 12px;\n}\n\n.mat-h6, .mat-typography h6 {\n font: 400 calc(14px * 0.67)/20px Roboto, \"Helvetica Neue\", sans-serif;\n margin: 0 0 12px;\n}\n\n.mat-body-strong, .mat-body-2 {\n font: 500 14px/24px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n\n.mat-body, .mat-body-1, .mat-typography {\n font: 400 14px/20px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n.mat-body p, .mat-body-1 p, .mat-typography p {\n margin: 0 0 12px;\n}\n\n.mat-small, .mat-caption {\n font: 400 12px/20px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n\n.mat-display-4, .mat-typography .mat-display-4 {\n font: 300 112px/112px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: -0.05em;\n margin: 0 0 56px;\n}\n\n.mat-display-3, .mat-typography .mat-display-3 {\n font: 400 56px/56px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: -0.02em;\n margin: 0 0 64px;\n}\n\n.mat-display-2, .mat-typography .mat-display-2 {\n font: 400 45px/48px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: -0.005em;\n margin: 0 0 64px;\n}\n\n.mat-display-1, .mat-typography .mat-display-1 {\n font: 400 34px/40px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n margin: 0 0 64px;\n}\n\n.mat-bottom-sheet-container {\n font: 400 14px/20px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n\n.mat-button, .mat-raised-button, .mat-icon-button, .mat-stroked-button,\n.mat-flat-button, .mat-fab, .mat-mini-fab {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 14px;\n font-weight: 500;\n}\n\n.mat-button-toggle {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.mat-card {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.mat-card-title {\n font-size: 24px;\n font-weight: 500;\n}\n\n.mat-card-header .mat-card-title {\n font-size: 20px;\n}\n\n.mat-card-subtitle,\n.mat-card-content {\n font-size: 14px;\n}\n\n.mat-checkbox {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.mat-checkbox-layout .mat-checkbox-label {\n line-height: 24px;\n}\n\n.mat-chip {\n font-size: 14px;\n font-weight: 500;\n}\n.mat-chip .mat-chip-trailing-icon.mat-icon,\n.mat-chip .mat-chip-remove.mat-icon {\n font-size: 18px;\n}\n\n.mat-table {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.mat-header-cell {\n font-size: 12px;\n font-weight: 500;\n}\n\n.mat-cell, .mat-footer-cell {\n font-size: 14px;\n}\n\n.mat-calendar {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.mat-calendar-body {\n font-size: 13px;\n}\n\n.mat-calendar-body-label,\n.mat-calendar-period-button {\n font-size: 14px;\n font-weight: 500;\n}\n\n.mat-calendar-table-header th {\n font-size: 11px;\n font-weight: 400;\n}\n\n.mat-dialog-title {\n font: 500 20px/32px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n\n.mat-expansion-panel-header {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 15px;\n font-weight: 400;\n}\n\n.mat-expansion-panel-content {\n font: 400 14px/20px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n\n.mat-form-field {\n font-size: inherit;\n font-weight: 400;\n line-height: 1.125;\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n\n.mat-form-field-wrapper {\n padding-bottom: 1.34375em;\n}\n\n.mat-form-field-prefix .mat-icon,\n.mat-form-field-suffix .mat-icon {\n font-size: 150%;\n line-height: 1.125;\n}\n.mat-form-field-prefix .mat-icon-button,\n.mat-form-field-suffix .mat-icon-button {\n height: 1.5em;\n width: 1.5em;\n}\n.mat-form-field-prefix .mat-icon-button .mat-icon,\n.mat-form-field-suffix .mat-icon-button .mat-icon {\n height: 1.125em;\n line-height: 1.125;\n}\n\n.mat-form-field-infix {\n padding: 0.5em 0;\n border-top: 0.84375em solid transparent;\n}\n\n.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\n.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.34375em) scale(0.75);\n width: 133.3333333333%;\n}\n.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.34374em) scale(0.75);\n width: 133.3333433333%;\n}\n\n.mat-form-field-label-wrapper {\n top: -0.84375em;\n padding-top: 0.84375em;\n}\n\n.mat-form-field-label {\n top: 1.34375em;\n}\n\n.mat-form-field-underline {\n bottom: 1.34375em;\n}\n\n.mat-form-field-subscript-wrapper {\n font-size: 75%;\n margin-top: 0.6666666667em;\n top: calc(100% - 1.7916666667em);\n}\n\n.mat-form-field-appearance-legacy .mat-form-field-wrapper {\n padding-bottom: 1.25em;\n}\n.mat-form-field-appearance-legacy .mat-form-field-infix {\n padding: 0.4375em 0;\n}\n.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\n.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.001px);\n -ms-transform: translateY(-1.28125em) scale(0.75);\n width: 133.3333333333%;\n}\n.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.00101px);\n -ms-transform: translateY(-1.28124em) scale(0.75);\n width: 133.3333433333%;\n}\n.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.00102px);\n -ms-transform: translateY(-1.28123em) scale(0.75);\n width: 133.3333533333%;\n}\n.mat-form-field-appearance-legacy .mat-form-field-label {\n top: 1.28125em;\n}\n.mat-form-field-appearance-legacy .mat-form-field-underline {\n bottom: 1.25em;\n}\n.mat-form-field-appearance-legacy .mat-form-field-subscript-wrapper {\n margin-top: 0.5416666667em;\n top: calc(100% - 1.6666666667em);\n}\n\n@media print {\n .mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\n.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.28122em) scale(0.75);\n }\n .mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.28121em) scale(0.75);\n }\n .mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.2812em) scale(0.75);\n }\n}\n.mat-form-field-appearance-fill .mat-form-field-infix {\n padding: 0.25em 0 0.75em 0;\n}\n.mat-form-field-appearance-fill .mat-form-field-label {\n top: 1.09375em;\n margin-top: -0.5em;\n}\n.mat-form-field-appearance-fill.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\n.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-0.59375em) scale(0.75);\n width: 133.3333333333%;\n}\n.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-0.59374em) scale(0.75);\n width: 133.3333433333%;\n}\n\n.mat-form-field-appearance-outline .mat-form-field-infix {\n padding: 1em 0 1em 0;\n}\n.mat-form-field-appearance-outline .mat-form-field-label {\n top: 1.84375em;\n margin-top: -0.25em;\n}\n.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\n.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.59375em) scale(0.75);\n width: 133.3333333333%;\n}\n.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\n transform: translateY(-1.59374em) scale(0.75);\n width: 133.3333433333%;\n}\n\n.mat-grid-tile-header,\n.mat-grid-tile-footer {\n font-size: 14px;\n}\n.mat-grid-tile-header .mat-line,\n.mat-grid-tile-footer .mat-line {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n box-sizing: border-box;\n}\n.mat-grid-tile-header .mat-line:nth-child(n+2),\n.mat-grid-tile-footer .mat-line:nth-child(n+2) {\n font-size: 12px;\n}\n\ninput.mat-input-element {\n margin-top: -0.0625em;\n}\n\n.mat-menu-item {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 14px;\n font-weight: 400;\n}\n\n.mat-paginator,\n.mat-paginator-page-size .mat-select-trigger {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 12px;\n}\n\n.mat-radio-button {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.mat-select {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.mat-select-trigger {\n height: 1.125em;\n}\n\n.mat-slide-toggle-content {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.mat-slider-thumb-label-text {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 12px;\n font-weight: 500;\n}\n\n.mat-stepper-vertical, .mat-stepper-horizontal {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.mat-step-label {\n font-size: 14px;\n font-weight: 400;\n}\n\n.mat-step-sub-label-error {\n font-weight: normal;\n}\n\n.mat-step-label-error {\n font-size: 14px;\n}\n\n.mat-step-label-selected {\n font-size: 14px;\n font-weight: 500;\n}\n\n.mat-tab-group {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.mat-tab-label, .mat-tab-link {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 14px;\n font-weight: 500;\n}\n\n.mat-toolbar,\n.mat-toolbar h1,\n.mat-toolbar h2,\n.mat-toolbar h3,\n.mat-toolbar h4,\n.mat-toolbar h5,\n.mat-toolbar h6 {\n font: 500 20px/32px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n margin: 0;\n}\n\n.mat-tooltip {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 10px;\n padding-top: 6px;\n padding-bottom: 6px;\n}\n\n.mat-tooltip-handset {\n font-size: 14px;\n padding-top: 8px;\n padding-bottom: 8px;\n}\n\n.mat-list-item {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.mat-list-option {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.mat-list-base .mat-list-item {\n font-size: 16px;\n}\n.mat-list-base .mat-list-item .mat-line {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n box-sizing: border-box;\n}\n.mat-list-base .mat-list-item .mat-line:nth-child(n+2) {\n font-size: 14px;\n}\n.mat-list-base .mat-list-option {\n font-size: 16px;\n}\n.mat-list-base .mat-list-option .mat-line {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n box-sizing: border-box;\n}\n.mat-list-base .mat-list-option .mat-line:nth-child(n+2) {\n font-size: 14px;\n}\n.mat-list-base .mat-subheader {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 14px;\n font-weight: 500;\n}\n\n.mat-list-base[dense] .mat-list-item {\n font-size: 12px;\n}\n.mat-list-base[dense] .mat-list-item .mat-line {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n box-sizing: border-box;\n}\n.mat-list-base[dense] .mat-list-item .mat-line:nth-child(n+2) {\n font-size: 12px;\n}\n.mat-list-base[dense] .mat-list-option {\n font-size: 12px;\n}\n.mat-list-base[dense] .mat-list-option .mat-line {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n box-sizing: border-box;\n}\n.mat-list-base[dense] .mat-list-option .mat-line:nth-child(n+2) {\n font-size: 12px;\n}\n.mat-list-base[dense] .mat-subheader {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 12px;\n font-weight: 500;\n}\n\n.mat-option {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 16px;\n}\n\n.mat-optgroup-label {\n font: 500 14px/24px Roboto, \"Helvetica Neue\", sans-serif;\n letter-spacing: normal;\n}\n\n.mat-simple-snackbar {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n font-size: 14px;\n}\n\n.mat-simple-snackbar-action {\n line-height: 1;\n font-family: inherit;\n font-size: inherit;\n font-weight: 500;\n}\n\n.mat-tree {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.mat-tree-node,\n.mat-nested-tree-node {\n font-weight: 400;\n font-size: 14px;\n}\n\n.mat-ripple {\n overflow: hidden;\n position: relative;\n}\n.mat-ripple:not(:empty) {\n transform: translateZ(0);\n}\n\n.mat-ripple.mat-ripple-unbounded {\n overflow: visible;\n}\n\n.mat-ripple-element {\n position: absolute;\n border-radius: 50%;\n pointer-events: none;\n transition: opacity, transform 0ms cubic-bezier(0, 0, 0.2, 1);\n transform: scale(0);\n}\n.cdk-high-contrast-active .mat-ripple-element {\n display: none;\n}\n\n.cdk-visually-hidden {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n outline: 0;\n -webkit-appearance: none;\n -moz-appearance: none;\n}\n\n.cdk-overlay-container, .cdk-global-overlay-wrapper {\n pointer-events: none;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n}\n\n.cdk-overlay-container {\n position: fixed;\n z-index: 1000;\n}\n.cdk-overlay-container:empty {\n display: none;\n}\n\n.cdk-global-overlay-wrapper {\n display: flex;\n position: absolute;\n z-index: 1000;\n}\n\n.cdk-overlay-pane {\n position: absolute;\n pointer-events: auto;\n box-sizing: border-box;\n z-index: 1000;\n display: flex;\n max-width: 100%;\n max-height: 100%;\n}\n\n.cdk-overlay-backdrop {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 1000;\n pointer-events: auto;\n -webkit-tap-highlight-color: transparent;\n transition: opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1);\n opacity: 0;\n}\n.cdk-overlay-backdrop.cdk-overlay-backdrop-showing {\n opacity: 1;\n}\n@media screen and (-ms-high-contrast: active) {\n .cdk-overlay-backdrop.cdk-overlay-backdrop-showing {\n opacity: 0.6;\n }\n}\n\n.cdk-overlay-dark-backdrop {\n background: rgba(0, 0, 0, 0.32);\n}\n\n.cdk-overlay-transparent-backdrop, .cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing {\n opacity: 0;\n}\n\n.cdk-overlay-connected-position-bounding-box {\n position: absolute;\n z-index: 1000;\n display: flex;\n flex-direction: column;\n min-width: 1px;\n min-height: 1px;\n}\n\n.cdk-global-scrollblock {\n position: fixed;\n width: 100%;\n overflow-y: scroll;\n}\n\n@keyframes cdk-text-field-autofill-start {\n /*!*/\n}\n@keyframes cdk-text-field-autofill-end {\n /*!*/\n}\n.cdk-text-field-autofill-monitored:-webkit-autofill {\n animation: cdk-text-field-autofill-start 0s 1ms;\n}\n\n.cdk-text-field-autofill-monitored:not(:-webkit-autofill) {\n animation: cdk-text-field-autofill-end 0s 1ms;\n}\n\ntextarea.cdk-textarea-autosize {\n resize: none;\n}\n\ntextarea.cdk-textarea-autosize-measuring {\n height: auto !important;\n overflow: hidden !important;\n padding: 2px 0 !important;\n box-sizing: content-box !important;\n}\n\n/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n/**\n * Spacing\n */\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n/*===================*\\\n|| Icon sizes ||\n\\*===================*/\n/**\n * Makes text have maximum lines with ellipsis. Works on most modern browsers except\n * of Firefox..\n */\n/**\n * Spacing\n */\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n:export {\n primary: #1F40E6;\n secondaryLabel: #767676;\n}\n\n/*===================*\\\n|| Icon sizes ||\n\\*===================*/\n/* Theme for the ripple elements.*/\n/* stylelint-disable material/no-prefixes */\n/* stylelint-enable */\n.mck-inherit-font {\n font: inherit;\n}\n.mck-content-expand, .mck-content-page {\n width: 100%;\n height: 100%;\n}\n.mck-content-expand-width {\n width: 100%;\n}\n.mck-content-expand-height {\n height: 100%;\n}\n.mck-content-with-footer-height {\n height: calc(100vh - 58px);\n}\n.mck-content-full-height, .mck-content-page-container {\n height: 100vh;\n}\n.mck-content-page {\n background: #F8F9FA;\n}\n.mck-content-body {\n width: 100%;\n display: block;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-content-body {\n max-width: 1024px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-content-body {\n max-width: 1024px;\n }\n}\n.mck-content-group {\n padding-left: 1rem;\n padding-right: 1rem;\n width: 100%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-content-group {\n max-width: 759px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-content-group {\n max-width: 759px;\n }\n}\n.mck-shadow {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n}\n.mck-flex-1 {\n flex: 1;\n}\n.mck-row, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix, .mck-row-flow {\n display: flex;\n flex-direction: row;\n}\n.mck-row.mck-center-justify, .mck-center-justify.mck-row-flow, .mck-row.mck-center, .mck-row.mck-button.mat-button, .mck-row.mat-button.mck-stroked-button, .mck-row.mat-button.mck-warning-button, .mck-row.mat-button.mck-secondary-button, .mck-row.mat-button.mck-primary-button, .mck-row.mck-button.mat-stroked-button, .mck-row.mat-stroked-button.mck-stroked-button, .mck-row.mat-stroked-button.mck-warning-button, .mck-row.mat-stroked-button.mck-secondary-button, .mck-row.mat-stroked-button.mck-primary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix, .mck-center.mck-row-flow, .mck-row-flow.mck-button.mat-button, .mck-row-flow.mat-button.mck-stroked-button, .mck-row-flow.mat-button.mck-warning-button, .mck-row-flow.mat-button.mck-secondary-button, .mck-row-flow.mat-button.mck-primary-button, .mck-row-flow.mck-button.mat-stroked-button, .mck-row-flow.mat-stroked-button.mck-stroked-button, .mck-row-flow.mat-stroked-button.mck-warning-button, .mck-row-flow.mat-stroked-button.mck-secondary-button, .mck-row-flow.mat-stroked-button.mck-primary-button {\n justify-content: center;\n}\n.mck-row.mck-center-align, .mck-center-align.mck-row-flow, .mck-row.mck-center, .mck-row.mck-button.mat-button, .mck-row.mat-button.mck-stroked-button, .mck-row.mat-button.mck-warning-button, .mck-row.mat-button.mck-secondary-button, .mck-row.mat-button.mck-primary-button, .mck-row.mck-button.mat-stroked-button, .mck-row.mat-stroked-button.mck-stroked-button, .mck-row.mat-stroked-button.mck-warning-button, .mck-row.mat-stroked-button.mck-secondary-button, .mck-row.mat-stroked-button.mck-primary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix, .mck-center.mck-row-flow, .mck-row-flow.mck-button.mat-button, .mck-row-flow.mat-button.mck-stroked-button, .mck-row-flow.mat-button.mck-warning-button, .mck-row-flow.mat-button.mck-secondary-button, .mck-row-flow.mat-button.mck-primary-button, .mck-row-flow.mck-button.mat-stroked-button, .mck-row-flow.mat-stroked-button.mck-stroked-button, .mck-row-flow.mat-stroked-button.mck-warning-button, .mck-row-flow.mat-stroked-button.mck-secondary-button, .mck-row-flow.mat-stroked-button.mck-primary-button {\n align-items: center;\n}\n.mck-row.mck-stretch, .mck-form-input mat-form-field.mck-center-suffix .mck-stretch.mat-form-field-infix, .mck-stretch.mck-row-flow {\n align-items: stretch;\n}\n.mck-row-flow {\n flex-wrap: wrap;\n}\n.mck-row.mck-scroll, .mck-form-input mat-form-field.mck-center-suffix .mck-scroll.mat-form-field-infix, .mck-scroll.mck-row-flow {\n overflow-x: scroll;\n}\n.mck-column, .mck-button.mat-button.mat-button, .mat-button.mat-button.mck-stroked-button, .mat-button.mat-button.mck-warning-button, .mat-button.mat-button.mck-secondary-button, .mat-button.mat-button.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button, .mat-stroked-button.mat-stroked-button.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-primary-button {\n display: flex;\n flex-direction: column;\n}\n.mck-column.mck-center, .mck-column.mck-button.mat-button, .mck-column.mat-button.mck-stroked-button, .mck-column.mat-button.mck-warning-button, .mck-column.mat-button.mck-secondary-button, .mck-column.mat-button.mck-primary-button, .mck-column.mck-button.mat-stroked-button, .mck-column.mat-stroked-button.mck-stroked-button, .mck-column.mat-stroked-button.mck-warning-button, .mck-column.mat-stroked-button.mck-secondary-button, .mck-column.mat-stroked-button.mck-primary-button, .mck-center.mck-button.mat-button, .mck-center.mat-button.mck-stroked-button, .mck-center.mat-button.mck-warning-button, .mck-center.mat-button.mck-secondary-button, .mck-center.mat-button.mck-primary-button, .mck-button.mat-button, .mat-button.mck-stroked-button, .mat-button.mck-warning-button, .mat-button.mck-secondary-button, .mat-button.mck-primary-button, .mck-button.mat-button.mat-stroked-button, .mat-button.mat-stroked-button.mck-stroked-button, .mat-button.mat-stroked-button.mck-warning-button, .mat-button.mat-stroked-button.mck-secondary-button, .mat-button.mat-stroked-button.mck-primary-button, .mck-center.mck-button.mat-stroked-button, .mck-center.mat-stroked-button.mck-stroked-button, .mck-center.mat-stroked-button.mck-warning-button, .mck-center.mat-stroked-button.mck-secondary-button, .mck-center.mat-stroked-button.mck-primary-button, .mck-button.mat-stroked-button, .mat-stroked-button.mck-stroked-button, .mat-stroked-button.mck-warning-button, .mat-stroked-button.mck-secondary-button, .mat-stroked-button.mck-primary-button, .mck-form-input mat-form-field.mck-center-suffix .mck-column.mat-form-field-infix, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mck-button.mat-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-button.mck-stroked-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-button.mck-warning-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-button.mck-secondary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-button.mck-primary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mck-button.mat-stroked-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-stroked-button.mck-stroked-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-stroked-button.mck-warning-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-stroked-button.mck-secondary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-stroked-button.mck-primary-button {\n justify-content: center;\n align-items: center;\n}\n.mck-column.mck-space-between, .mck-space-between.mck-button.mat-button, .mck-space-between.mat-button.mck-stroked-button, .mck-space-between.mat-button.mck-warning-button, .mck-space-between.mat-button.mck-secondary-button, .mck-space-between.mat-button.mck-primary-button, .mck-space-between.mck-button.mat-stroked-button, .mck-space-between.mat-stroked-button.mck-stroked-button, .mck-space-between.mat-stroked-button.mck-warning-button, .mck-space-between.mat-stroked-button.mck-secondary-button, .mck-space-between.mat-stroked-button.mck-primary-button {\n justify-content: space-between;\n}\n.mck-column.mck-stretch, .mck-stretch.mck-button.mat-button, .mck-stretch.mat-button.mck-stroked-button, .mck-stretch.mat-button.mck-warning-button, .mck-stretch.mat-button.mck-secondary-button, .mck-stretch.mat-button.mck-primary-button, .mck-stretch.mck-button.mat-stroked-button, .mck-stretch.mat-stroked-button.mck-stroked-button, .mck-stretch.mat-stroked-button.mck-warning-button, .mck-stretch.mat-stroked-button.mck-secondary-button, .mck-stretch.mat-stroked-button.mck-primary-button {\n align-items: stretch;\n}\n.mck-column.mck-scroll, .mck-scroll.mck-button.mat-button, .mck-scroll.mat-button.mck-stroked-button, .mck-scroll.mat-button.mck-warning-button, .mck-scroll.mat-button.mck-secondary-button, .mck-scroll.mat-button.mck-primary-button, .mck-scroll.mck-button.mat-stroked-button, .mck-scroll.mat-stroked-button.mck-stroked-button, .mck-scroll.mat-stroked-button.mck-warning-button, .mck-scroll.mat-stroked-button.mck-secondary-button, .mck-scroll.mat-stroked-button.mck-primary-button {\n overflow-y: scroll;\n overflow-y: overlay;\n}\n.mck-column.mck-flex-end, .mck-flex-end.mck-button.mat-button, .mck-flex-end.mat-button.mck-stroked-button, .mck-flex-end.mat-button.mck-warning-button, .mck-flex-end.mat-button.mck-secondary-button, .mck-flex-end.mat-button.mck-primary-button, .mck-flex-end.mck-button.mat-stroked-button, .mck-flex-end.mat-stroked-button.mck-stroked-button, .mck-flex-end.mat-stroked-button.mck-warning-button, .mck-flex-end.mat-stroked-button.mck-secondary-button, .mck-flex-end.mat-stroked-button.mck-primary-button {\n justify-content: flex-end;\n}\n.mck-overflow {\n overflow: auto;\n}\n.mck-bordered, .mck-input {\n border-radius: 0;\n border: 1px solid #B3B3B3;\n}\n.mck-bordered:hover, .mck-input:hover {\n border-color: #464646;\n}\n.mck-bordered:focus, .mck-input:focus {\n border-color: #1F40E6;\n}\n.mck-bordered[disabled=true], .mck-input[disabled=true] {\n pointer-events: none;\n border-color: #f0f0f0;\n color: #ccc;\n}\n.mck-date-display {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n height: 43px;\n padding: 1rem 0.5rem;\n transition: border 200ms, box-shadow 200ms;\n}\n.mck-form-input .mat-form-field-wrapper {\n padding-bottom: 0.5rem;\n}\n.mck-form-input mat-form-field {\n min-width: auto !important;\n}\n.mck-form-input mat-form-field .mat-form-field-infix {\n width: 100%;\n padding-top: 0.7rem !important;\n padding-bottom: 0.5rem !important;\n}\n.mck-form-input mat-form-field .mat-form-field-outline {\n min-height: 2.7rem;\n color: rgba(0, 0, 0, 0.27);\n}\n.mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\n margin-top: 2px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-flex {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-flex {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-outline, .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\n height: 2rem;\n min-height: 2rem;\n }\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-outline, .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\n height: 2rem;\n min-height: 2rem;\n }\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n}\n.mck-form-input mat-form-field.mat-s {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-form-input mat-select {\n margin-top: 0.2rem;\n}\n.mck-form-input mat-select .mat-select-arrow {\n visibility: hidden;\n}\n.mck-form-input mat-select .mat-select-value > .mat-select-value-text > span {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 400;\n font-family: \"McKinsey Sans\";\n}\n.mck-form-input .mat-form-field-outline > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input .mat-form-field-outline > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input .mat-form-field-outline > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: #B3B3B3;\n border-width: 1px;\n border-radius: 0;\n}\n.mck-form-input .available .mat-form-field-outline > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input .available .mat-form-field-outline > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input .available .mat-form-field-outline > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: #3aa537;\n}\n.mck-form-input .booked .mat-form-field-outline > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input .booked .mat-form-field-outline > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input .booked .mat-form-field-outline > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: #e12e41;\n}\n.mck-form-input .mat-form-field-outline-thick > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input .mat-form-field-outline-thick > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input .mat-form-field-outline-thick > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: #1F40E6;\n border-width: 1px;\n border-radius: 0;\n}\n.mck-form-input > mat-form-field.mck-error .mat-form-field-wrapper {\n padding-bottom: 0;\n}\n.mck-form-input > mat-form-field.mck-error .mat-form-field-outline > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input > mat-form-field.mck-error .mat-form-field-outline > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input > mat-form-field.mck-error .mat-form-field-outline > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: #E12E40;\n}\n.mck-form-input mck-close-icon.mat-chip-remove.mat-chip-remove {\n opacity: 1;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n}\n.mck-form-input mat-label {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 400;\n text-align: left;\n margin-bottom: 0.5rem;\n}\n.mck-form-input mat-radio-button {\n margin-right: 1rem;\n}\n.mck-form-input .mat-radio-label-content {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-form-input .mat-radio-outer-circle {\n border-color: #1F40E6 !important;\n border-width: 1px !important;\n}\n.mck-form-input .mat-radio-inner-circle {\n background-color: #1F40E6 !important;\n}\n.mck-form-input mat-radio-group {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n}\n.mck-form-input mat-radio-group > mat-radio-button:last-child {\n margin-right: 0;\n}\n.mck-form-input-container > .mck-form-input, .mck-form-input-container > mck-select {\n margin-bottom: 0.5rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-form-input-container > .mck-form-input, .mck-form-input-container > mck-select {\n margin-bottom: 1.75rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-form-input-container > .mck-form-input, .mck-form-input-container > mck-select {\n margin-bottom: 1.75rem;\n }\n}\n.mck-form-input-container .mck-radio-select {\n margin-bottom: 1rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-form-input-container .mck-radio-select {\n margin-bottom: 1.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-form-input-container .mck-radio-select {\n margin-bottom: 1.5rem;\n }\n}\n.mck-form-input mat-chip.mat-standard-chip.mat-standard-chip {\n border-radius: 3px;\n min-height: 1.5rem;\n background-color: #333333;\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 0.75rem;\n line-height: 1.5rem;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-form-input mat-chip.mat-standard-chip.mat-standard-chip {\n line-height: inherit;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-form-input mat-chip.mat-standard-chip.mat-standard-chip {\n line-height: inherit;\n }\n}\n.mck-form-input mat-checkbox.mat-checkbox.mat-checkbox {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n}\n.mck-form-input mat-checkbox div.mat-checkbox-background.mat-checkbox-background {\n background-color: #1F40E6;\n}\n.mck-form-input mat-checkbox div.mat-checkbox-background.mat-checkbox-background.mck-checkbox-disabled.mat-checkbox-disabled {\n background-color: #D0D0D0;\n}\n.mck-form-input mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n color: #B3B3B3;\n}\n.mck-borderless {\n border: none;\n}\n.mck-borderless:hover, .mck-borderless:focus, .mck-borderless:disabled {\n border: none;\n}\n.mck-select-panel {\n margin-top: 0 !important;\n border-radius: unset !important;\n margin-top: 35px !important;\n margin-left: 5px;\n}\n.mck-select-panel mat-option {\n padding-left: 0;\n padding-right: 0;\n}\n.mck-select-panel mat-option.mat-option-text {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\n.mck-select-panel.mck-margin-top {\n margin-top: 1.5rem !important;\n}\n.mck-checkbox-panel.mat-autocomplete-panel.mat-autocomplete-panel {\n top: -10px;\n max-height: 278px;\n}\n.mck-checkbox-panel mat-option.mck-truncated .mat-checkbox-label.mat-checkbox-label {\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n.mck-checkbox-panel mat-option {\n padding-left: 0;\n padding-right: 0;\n line-height: 24px;\n height: unset;\n min-height: 36px;\n}\n.mck-checkbox-panel mat-option .mat-checkbox-label.mat-checkbox-label {\n flex: 1;\n}\n.mck-checkbox-panel mat-option .mat-checkbox-label.mat-checkbox-label {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n text-align: left;\n}\n.mck-checkbox-panel mat-option.mck-checkbox-group-header .mat-checkbox-label.mat-checkbox-label {\n font-weight: 500;\n}\n.mck-checkbox-panel mat-option.mck-checkbox-group-child {\n margin-left: 2rem;\n}\n.mck-checkbox-panel mat-option mat-checkbox label.mat-checkbox-layout {\n width: 100%;\n padding-left: 16px;\n padding-right: 16px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-checkbox-panel mat-option mat-checkbox label.mat-checkbox-layout {\n padding-left: 2px;\n padding-right: 2px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-checkbox-panel mat-option mat-checkbox label.mat-checkbox-layout {\n padding-left: 2px;\n padding-right: 2px;\n }\n}\n.mck-checkbox-panel mat-option mat-checkbox div.mat-checkbox-frame.mat-checkbox-frame {\n border: 1px solid #B3B3B3;\n border-radius: 0;\n}\n.mck-checkbox-panel mat-option mat-checkbox.mat-checkbox-checked div.mat-checkbox-background.mat-checkbox-background {\n background-color: #1F40E6;\n}\n.mck-checkbox-panel mat-option mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled div.mat-checkbox-background.mat-checkbox-background {\n background-color: #D0D0D0;\n}\n.mck-checkbox-panel mat-option mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled .mat-checkbox-label.mat-checkbox-label {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 300;\n color: black;\n color: #B3B3B3;\n text-align: left;\n}\n.mck-checkbox-panel mat-option mat-checkbox .mat-checkbox-inner-container {\n width: 1.25rem;\n height: 1.25rem;\n}\n.mck-select-option-selected {\n font-weight: 500;\n font-family: \"McKinsey Sans\";\n color: black;\n background-color: #E6E6E6;\n}\n.mck-select-option-selected .mck-spacer-content {\n background-color: #1F40E6;\n margin-right: 0.75rem;\n}\n.mck-select-option-unselected {\n font-weight: 400;\n font-family: \"McKinsey Sans\";\n}\n.mck-select-option-unselected.mck-ignore-disabled {\n color: black;\n}\n.mck-select-option-unselected .mck-spacer-content {\n visibility: hidden;\n margin-right: 0.75rem;\n}\n.mck-button.mat-button.mat-button, .mat-button.mat-button.mck-stroked-button, .mat-button.mat-button.mck-warning-button, .mat-button.mat-button.mck-secondary-button, .mat-button.mat-button.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button, .mat-stroked-button.mat-stroked-button.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-primary-button {\n height: 40px;\n border-radius: 0;\n border: none;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button, .mat-button.mat-button.mck-stroked-button, .mat-button.mat-button.mck-warning-button, .mat-button.mat-button.mck-secondary-button, .mat-button.mat-button.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button, .mat-stroked-button.mat-stroked-button.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-primary-button {\n height: 48px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button, .mat-button.mat-button.mck-stroked-button, .mat-button.mat-button.mck-warning-button, .mat-button.mat-button.mck-secondary-button, .mat-button.mat-button.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button, .mat-stroked-button.mat-stroked-button.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-primary-button {\n height: 48px;\n }\n}\n.mck-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper, .mck-button.mat-stroked-button.mat-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: normal;\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper, .mck-button.mat-stroked-button.mat-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper {\n font-size: 0.875rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper, .mck-button.mat-stroked-button.mat-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper {\n font-size: 0.875rem;\n }\n}\n.mck-button.mat-button.mat-button.mck-short, .mat-button.mat-button.mck-short.mck-stroked-button, .mat-button.mat-button.mck-short.mck-warning-button, .mat-button.mat-button.mck-short.mck-secondary-button, .mat-button.mat-button.mck-short.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short, .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button {\n height: 32px;\n min-width: 83px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-short, .mat-button.mat-button.mck-short.mck-stroked-button, .mat-button.mat-button.mck-short.mck-warning-button, .mat-button.mat-button.mck-short.mck-secondary-button, .mat-button.mat-button.mck-short.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short, .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-short, .mat-button.mat-button.mck-short.mck-stroked-button, .mat-button.mat-button.mck-short.mck-warning-button, .mat-button.mat-button.mck-short.mck-secondary-button, .mat-button.mat-button.mck-short.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short, .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-short.mck-short-height, .mat-button.mat-button.mck-short.mck-short-height.mck-stroked-button, .mat-button.mat-button.mck-short.mck-short-height.mck-warning-button, .mat-button.mat-button.mck-short.mck-short-height.mck-secondary-button, .mat-button.mat-button.mck-short.mck-short-height.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short.mck-short-height, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-primary-button {\n height: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-short.mck-short-height, .mat-button.mat-button.mck-short.mck-short-height.mck-stroked-button, .mat-button.mat-button.mck-short.mck-short-height.mck-warning-button, .mat-button.mat-button.mck-short.mck-short-height.mck-secondary-button, .mat-button.mat-button.mck-short.mck-short-height.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short.mck-short-height, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-primary-button {\n height: 40px;\n }\n}\n.mck-button.mat-button.mat-button.mck-square, .mat-button.mat-button.mck-square.mck-stroked-button, .mat-button.mat-button.mck-square.mck-warning-button, .mat-button.mat-button.mck-square.mck-secondary-button, .mat-button.mat-button.mck-square.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-square, .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button {\n height: 32px;\n width: 32px;\n min-width: 32px;\n padding: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-button.mat-button.mat-button.mck-square, .mat-button.mat-button.mck-square.mck-stroked-button, .mat-button.mat-button.mck-square.mck-warning-button, .mat-button.mat-button.mck-square.mck-secondary-button, .mat-button.mat-button.mck-square.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-square, .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button {\n width: 40px;\n height: 40px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-button.mat-button.mat-button.mck-square, .mat-button.mat-button.mck-square.mck-stroked-button, .mat-button.mat-button.mck-square.mck-warning-button, .mat-button.mat-button.mck-square.mck-secondary-button, .mat-button.mat-button.mck-square.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-square, .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button {\n width: 40px;\n height: 40px;\n }\n}\n.mck-primary-button.mat-button.mat-button {\n background-color: #1F40E6;\n}\n.mck-primary-button.mat-button.mat-button[disabled], .mck-primary-button.mat-button.mat-button.disabled {\n background-color: #D0D0D0;\n color: #757575;\n cursor: not-allowed;\n}\n.mck-primary-button.mat-button.mat-button[disabled] > .mat-button-wrapper.mat-button-wrapper, .mck-primary-button.mat-button.mat-button.disabled > .mat-button-wrapper.mat-button-wrapper {\n color: #757575;\n}\n.mck-primary-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper {\n color: white;\n}\n.mck-secondary-button.mat-stroked-button.mat-stroked-button {\n border: 1px solid #D0D0D0;\n border-radius: 0;\n border: 1px solid #2251FF;\n color: #2251FF;\n}\n.mck-secondary-button.mat-stroked-button.mat-stroked-button[disabled], .mck-secondary-button.mat-stroked-button.mat-stroked-button.disabled {\n border: 1px solid #D0D0D0;\n color: #333333;\n cursor: not-allowed;\n}\n.mck-secondary-button.mat-button.mat-button {\n background-color: white;\n}\n.mck-secondary-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper {\n color: #333333;\n}\n.mck-warning-button.mat-button.mat-button {\n background-color: #ffd048;\n}\n.mck-warning-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper {\n color: black;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button {\n border: 2px solid #B3B3B3;\n border-radius: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding-left: 1.75rem;\n padding-right: 1.75rem;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short {\n height: 32px;\n min-width: 83px;\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short {\n height: 48px;\n min-width: 155px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short {\n height: 48px;\n min-width: 155px;\n }\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-primary {\n border-width: 1px;\n border-color: #1F40E6;\n color: #1F40E6;\n}\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-thin-border-light {\n border-color: #D0D0D0;\n border-width: 1px;\n}\n.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: normal;\n color: #1F40E6;\n}\n.mck-toggle-button {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n border: 1px solid #B3B3B3;\n border-color: #D0D0D0;\n min-width: 59px;\n background-color: white;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-toggle-button {\n min-width: 132px;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-toggle-button {\n min-width: 132px;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n }\n}\n.mck-toggle-button-selected {\n color: #1F40E6;\n}\n.mck-date-picker {\n width: 100% !important;\n height: 100% !important;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-date-picker {\n max-width: 23rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-date-picker {\n max-width: 23rem;\n }\n}\n.mck-date-picker > .header.header {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n color: #051C2C;\n margin-top: 1.25rem;\n}\n.mck-date-picker > .header.header > .arrow.arrow {\n width: 2.375rem;\n height: 2rem;\n}\n.mck-date-picker > .header.header > .arrow.arrow > .icon.icon {\n width: 1rem;\n height: 1rem;\n}\n.mck-date-picker > .header.header > .arrow.arrow > .next.next {\n background-image: url(\"libs/ui/src/lib/icons/arrow-forward.svg\");\n}\n.mck-date-picker > .header.header > .arrow.arrow > .previous.previous {\n background-image: url(\"libs/ui/src/lib/icons/arrow-backward.svg\");\n}\n.mck-date-picker > .month {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n}\n.mck-date-picker > .week {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n color: #767676;\n}\n.mck-date-picker > .body {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.mck-date-picker > .body > div > div.date > .dot {\n display: none;\n}\n.mck-date-picker > .body > div > div.date.disabled {\n background-color: transparent;\n border-radius: 0;\n color: #767676;\n}\n.mck-date-picker > .body > div > div.date.active {\n border-radius: 0;\n background-color: #1F40E6;\n}\n.mck-date-picker > .body > div > div.date.non-month {\n color: #767676;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-spacer-content-collapse-tablet {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-spacer-content-collapse-tablet {\n display: none;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\n .mck-spacer-content-collapse-tablet {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\n .mck-spacer-content-collapse-tablet {\n display: none;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-spacer-content-expand-mobile {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-spacer-content-expand-mobile {\n display: none;\n }\n}\n.mck-spacer-content-divider {\n background-color: #E6E6E6;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n border-radius: 0;\n border-top: 1px solid #E6E6E6;\n border-bottom: 1px solid #E6E6E6;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded {\n background-color: #F0F0F0;\n border-bottom: none;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded .mck-collapse-icon {\n width: 24px;\n height: 24px;\n background-image: url(\"libs/ui/src/lib/icons/chevron-close.svg\");\n background-size: contain;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded .mck-collapse-icon {\n width: 48px;\n height: 48px;\n background-image: url(\"libs/ui/src/lib/icons/chevron-close-large.svg\");\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded .mck-collapse-icon {\n width: 48px;\n height: 48px;\n background-image: url(\"libs/ui/src/lib/icons/chevron-close-large.svg\");\n background-size: contain;\n }\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body {\n padding-left: 0;\n padding-right: 0;\n}\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 0.75rem;\n line-height: 1.4;\n padding-left: 1rem;\n padding-right: 1rem;\n text-align: left;\n color: black;\n font-weight: normal;\n padding-bottom: 0.5rem;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\n font-size: 1rem;\n line-height: 1.6;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\n font-size: 1rem;\n line-height: 1.6;\n }\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n }\n}\n.mck-expansion-panel mat-expansion-panel-header {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.mck-expansion-panel mat-expansion-panel-header > span.mat-content {\n align-items: center;\n}\n.mck-expansion-panel mat-panel-title {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n color: black;\n font-weight: normal;\n}\n.mck-expansion-panel .mck-collapse-icon {\n width: 24px;\n height: 24px;\n background-image: url(\"libs/ui/src/lib/icons/chevron-open.svg\");\n background-size: contain;\n transform: rotate(0deg);\n transition: transform 0.5s ease;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-expansion-panel .mck-collapse-icon {\n width: 48px;\n height: 48px;\n background-image: url(\"libs/ui/src/lib/icons/chevron-open-large.svg\");\n background-size: contain;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-expansion-panel .mck-collapse-icon {\n width: 48px;\n height: 48px;\n background-image: url(\"libs/ui/src/lib/icons/chevron-open-large.svg\");\n background-size: contain;\n }\n}\n.mck-expansion-panel .mck-collapse-icon.expanded {\n transform: rotate(180deg);\n}\n.mck-icon-fill-open {\n fill: #1F40E6;\n}\n.mck-icon-fill-close {\n fill: #767676;\n}\n.mck-icon-fill-black {\n fill: black;\n stroke: black;\n}\n.mck-icon-fill-white {\n fill: white;\n stroke: white;\n}\n.mck-icon-fill-gray {\n fill: #333333;\n stroke: #333333;\n}\n.mck-min {\n max-width: 581px !important;\n width: 80vw;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-min {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-min .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-min {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-min .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n.mck-noexpand {\n max-width: 581px !important;\n width: 80vw !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-noexpand {\n width: calc(100vw - 32px) !important;\n max-height: 100vh;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-noexpand {\n width: calc(100vw - 32px) !important;\n max-height: 100vh;\n }\n}\n.mck-modal {\n max-width: 800px !important;\n width: 80vw;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n.mck-modal-mini {\n max-width: 580px !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-mini {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-mini .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-mini {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-mini .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n.mck-modal-survey {\n max-width: 691px !important;\n max-height: 100vh;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-survey .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-survey .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n.mck-modal-wide {\n max-width: 1024px !important;\n width: 100vw;\n height: 95vh;\n max-height: 100vh;\n}\n.mck-modal-wide .mat-dialog-content {\n background-color: #F8F9FA;\n padding: 0 !important;\n overflow: hidden;\n}\n.mck-modal-wide .mat-dialog-content .mat-icon-button[name=CloseButton] {\n position: relative;\n right: 32px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide .mat-dialog-content .mat-icon-button[name=CloseButton] .close-image {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide .mat-dialog-content .mat-icon-button[name=CloseButton] .close-image {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n.mck-modal-wide-manage-booking {\n max-width: 1250px !important;\n width: 100vw;\n max-height: 95vh;\n}\n.mck-modal-wide-manage-booking .mat-dialog-content {\n background-color: #F8F9FA;\n padding: 0 !important;\n overflow: hidden;\n}\n.mck-modal-wide-manage-booking .mat-dialog-content .mat-icon-button[name=CloseButton] {\n position: relative;\n right: 32px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide-manage-booking .mat-dialog-content .mat-icon-button[name=CloseButton] .close-image {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide-manage-booking .mat-dialog-content .mat-icon-button[name=CloseButton] .close-image {\n height: 32px;\n width: 32px;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-modal-wide-manage-booking {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide-manage-booking .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-modal-wide-manage-booking {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n }\n .mck-modal-wide-manage-booking .mat-dialog-container {\n border-radius: 0 !important;\n }\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-alert {\n max-width: 100vw !important;\n width: 100vw;\n margin-left: 1rem;\n margin-right: 1rem;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-alert {\n max-width: 100vw !important;\n width: 100vw;\n margin-left: 1rem;\n margin-right: 1rem;\n }\n}\n.mck-alert-backdrop {\n background: rgba(5, 28, 44, 0.85);\n}\n.mck-slide-toggle.mat-slide-toggle.mat-checked:not(.mat-disabled) .mat-slide-toggle-bar.mat-slide-toggle-bar {\n background-color: #2251FF;\n}\n.mck-slide-toggle.mat-slide-toggle.mat-checked:not(.mat-disabled) .mat-slide-toggle-thumb.mat-slide-toggle-thumb {\n background-color: white;\n}\n.mck-slide-toggle.mat-slide-toggle {\n height: auto;\n}\n.mck-slide-toggle .mat-slide-toggle-content.mat-slide-toggle-content {\n flex: 1;\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n white-space: normal;\n}\n.mck-slide-toggle .mat-slide-toggle-thumb.mat-slide-toggle-thumb {\n width: 14px;\n height: 14px;\n transform: translate(50%, 50%);\n}\n.mck-slide-toggle .mat-slide-toggle-thumb-container.mat-slide-toggle-thumb-container {\n top: -4px;\n left: -4px;\n}\n.mck-slide-toggle .mat-slide-toggle-bar.mat-slide-toggle-bar {\n height: 20px;\n background-color: #D0D0D0;\n border-radius: 20px;\n}\n.mck-skeleton {\n background-color: #E6E6E6;\n}\n.mck-skeleton-checkbox {\n float: left;\n}\n.mck-skeleton-checkbox > .loader.loader {\n background-color: #E6E6E6;\n width: 20px;\n height: 20px;\n margin-bottom: 0;\n}\n.mck-skeleton-header > .loader.loader {\n background-color: #E6E6E6;\n width: 100vw;\n margin-bottom: 0;\n max-width: 215px;\n}\n.mck-skeleton-image > .loader.loader {\n background-color: #E6E6E6;\n width: 81px;\n height: 82px;\n margin-bottom: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-skeleton-image > .loader.loader {\n width: 219px;\n height: 119px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-skeleton-image > .loader.loader {\n width: 219px;\n height: 119px;\n }\n}\n.mck-skeleton-status > .loader.loader {\n background-color: #E6E6E6;\n width: 117px;\n height: 78px;\n margin-top: 10px;\n margin-bottom: 0;\n}\n@media only screen and (orientation: portrait) and (min-width: 800px) {\n .mck-skeleton-status > .loader.loader {\n width: 117px;\n height: 78px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\n .mck-skeleton-status > .loader.loader {\n width: 117px;\n height: 78px;\n }\n}\n.mck-skeleton-line-1 > .loader.loader {\n background-color: #E6E6E6;\n height: 23px;\n max-width: 176px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-1 > .loader.loader {\n max-width: 219px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-1 > .loader.loader {\n max-width: 219px;\n }\n}\n.mck-skeleton-line-2 > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 165px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-2 > .loader.loader {\n max-width: 189px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-2 > .loader.loader {\n max-width: 189px;\n }\n}\n.mck-skeleton-line-3 > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 147px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-3 > .loader.loader {\n max-width: 189px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-3 > .loader.loader {\n max-width: 189px;\n }\n}\n.mck-skeleton-line-30p > .loader.loader, .mck-skeleton-line-30p-thin > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 30%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-30p > .loader.loader, .mck-skeleton-line-30p-thin > .loader.loader {\n max-width: 30%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-30p > .loader.loader, .mck-skeleton-line-30p-thin > .loader.loader {\n max-width: 30%;\n }\n}\n.mck-skeleton-line-30p-thin > .loader.loader, .mck-skeleton-line-30p-thin-thin > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-45p > .loader.loader, .mck-skeleton-line-45p-thin > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 45%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-45p > .loader.loader, .mck-skeleton-line-45p-thin > .loader.loader {\n max-width: 45%;\n margin-right: 45%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-45p > .loader.loader, .mck-skeleton-line-45p-thin > .loader.loader {\n max-width: 45%;\n margin-right: 45%;\n }\n}\n.mck-skeleton-line-45p-thin > .loader.loader, .mck-skeleton-line-45p-thin-thin > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-50p > .loader.loader, .mck-skeleton-line-50p-thin > .loader.loader, .mck-skeleton-line-50p-thick > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 50%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-50p > .loader.loader, .mck-skeleton-line-50p-thin > .loader.loader, .mck-skeleton-line-50p-thick > .loader.loader {\n max-width: 50%;\n margin-right: 45%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-50p > .loader.loader, .mck-skeleton-line-50p-thin > .loader.loader, .mck-skeleton-line-50p-thick > .loader.loader {\n max-width: 50%;\n margin-right: 45%;\n }\n}\n.mck-skeleton-line-50p-thin > .loader.loader, .mck-skeleton-line-50p-thin-thin > .loader.loader, .mck-skeleton-line-50p-thick-thin > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-50p-thick > .loader.loader, .mck-skeleton-line-50p-thin-thick > .loader.loader, .mck-skeleton-line-50p-thick-thick > .loader.loader {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-60p > .loader.loader, .mck-skeleton-line-60p-thin > .loader.loader, .mck-skeleton-line-60p-thick > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 60%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-60p > .loader.loader, .mck-skeleton-line-60p-thin > .loader.loader, .mck-skeleton-line-60p-thick > .loader.loader {\n max-width: 60%;\n margin-right: 35%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-60p > .loader.loader, .mck-skeleton-line-60p-thin > .loader.loader, .mck-skeleton-line-60p-thick > .loader.loader {\n max-width: 60%;\n margin-right: 35%;\n }\n}\n.mck-skeleton-line-60p-thin > .loader.loader, .mck-skeleton-line-60p-thin-thin > .loader.loader, .mck-skeleton-line-60p-thick-thin > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-60p-thick > .loader.loader, .mck-skeleton-line-60p-thin-thick > .loader.loader, .mck-skeleton-line-60p-thick-thick > .loader.loader {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-70p > .loader.loader, .mck-skeleton-line-70p-thin > .loader.loader, .mck-skeleton-line-70p-thick > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 70%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-70p > .loader.loader, .mck-skeleton-line-70p-thin > .loader.loader, .mck-skeleton-line-70p-thick > .loader.loader {\n max-width: 70%;\n margin-right: 25%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-70p > .loader.loader, .mck-skeleton-line-70p-thin > .loader.loader, .mck-skeleton-line-70p-thick > .loader.loader {\n max-width: 70%;\n margin-right: 25%;\n }\n}\n.mck-skeleton-line-70p-thin > .loader.loader, .mck-skeleton-line-70p-thin-thin > .loader.loader, .mck-skeleton-line-70p-thick-thin > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-70p-thick > .loader.loader, .mck-skeleton-line-70p-thin-thick > .loader.loader, .mck-skeleton-line-70p-thick-thick > .loader.loader {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-80p > .loader.loader, .mck-skeleton-line-80p-thin > .loader.loader, .mck-skeleton-line-80p-thick > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 80%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-80p > .loader.loader, .mck-skeleton-line-80p-thin > .loader.loader, .mck-skeleton-line-80p-thick > .loader.loader {\n max-width: 80%;\n margin-right: 15%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-80p > .loader.loader, .mck-skeleton-line-80p-thin > .loader.loader, .mck-skeleton-line-80p-thick > .loader.loader {\n max-width: 80%;\n margin-right: 15%;\n }\n}\n.mck-skeleton-line-80p-thin > .loader.loader, .mck-skeleton-line-80p-thin-thin > .loader.loader, .mck-skeleton-line-80p-thick-thin > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-80p-thick > .loader.loader, .mck-skeleton-line-80p-thin-thick > .loader.loader, .mck-skeleton-line-80p-thick-thick > .loader.loader {\n height: 32px;\n margin-bottom: 4px;\n}\n.mck-skeleton-line-90p > .loader.loader, .mck-skeleton-line-90p-thin > .loader.loader {\n background-color: #E6E6E6;\n height: 18px;\n max-width: 90%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-line-90p > .loader.loader, .mck-skeleton-line-90p-thin > .loader.loader {\n max-width: 90%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-line-90p > .loader.loader, .mck-skeleton-line-90p-thin > .loader.loader {\n max-width: 90%;\n }\n}\n.mck-skeleton-line-90p-thin > .loader.loader, .mck-skeleton-line-90p-thin-thin > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n}\n.mck-skeleton-load-more > .loader.loader {\n background-color: #E6E6E6;\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n width: calc(100vw - (2 * 1rem));\n height: 40px;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-load-more > .loader.loader {\n max-width: 320px;\n height: 50px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-load-more > .loader.loader {\n max-width: 320px;\n height: 50px;\n }\n}\n.mck-skeleton-load-more-100p > .loader.loader, .mck-skeleton-header > .loader.loader, .mck-skeleton-room-availability > .loader.loader {\n background-color: #E6E6E6;\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n width: calc(100vw - (2 * 1rem));\n height: 40px;\n max-width: none;\n width: 100%;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-skeleton-load-more-100p > .loader.loader, .mck-skeleton-header > .loader.loader, .mck-skeleton-room-availability > .loader.loader {\n max-width: none;\n width: 100%;\n height: 50px;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-skeleton-load-more-100p > .loader.loader, .mck-skeleton-header > .loader.loader, .mck-skeleton-room-availability > .loader.loader {\n max-width: none;\n width: 100%;\n height: 50px;\n }\n}\n.mck-skeleton-load-more-100p > .loader.loader-room-availability > .loader.loader, .mck-skeleton-header > .loader.loader-room-availability > .loader.loader, .mck-skeleton-room-availability > .loader.loader-room-availability > .loader.loader {\n height: 124px;\n margin-bottom: 4px;\n}\n\n.mck-heading-5 {\n font-family: \"McKinsey Sans\";\n font-style: normal;\n text-align: center;\n font-size: 1.5rem;\n line-height: 1.333;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .mck-heading-5 {\n font-size: 1.75rem;\n line-height: 1.142;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .mck-heading-5 {\n font-size: 1.75rem;\n line-height: 1.142;\n }\n}\n\nngx-mat-select-search .mat-select-search-no-entries-found {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\nngx-mat-select-search .mat-select-search-input {\n font-style: normal;\n text-align: center;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n text-align: left;\n}\nngx-mat-select-search button.mat-button.mat-select-search-clear {\n background-color: transparent;\n border: none;\n color: black;\n}\n\n::-webkit-scrollbar {\n width: 16px;\n height: 18px;\n}\n\n::-webkit-scrollbar-thumb {\n height: 1.5rem;\n border: 4px solid rgba(0, 0, 0, 0);\n background-clip: padding-box;\n border-radius: 8px;\n background-color: #757575;\n -webkit-box-shadow: inset -1px -1px 0px rgba(0, 0, 0, 0.05), inset 1px 1px 0px rgba(0, 0, 0, 0.05);\n}\n\n::-webkit-scrollbar-button {\n width: 0;\n height: 0;\n display: none;\n}\n\n::-webkit-scrollbar-corner {\n background-color: transparent;\n}\n\nheader {\n z-index: 2;\n}\n\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mb-block {\n display: block;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mb-block {\n display: block;\n }\n}\n\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mb-bottom {\n padding-bottom: 110px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mb-bottom {\n padding-bottom: 110px;\n }\n}\n\n.map-filters-container .mck-form-input mat-form-field .mat-form-field-infix {\n top: 5px;\n}\n.map-filters-container .mck-form-input mat-form-field .mat-form-field-outline {\n height: 48px;\n background-color: white;\n}\n.map-filters-container .mck-form-input mat-form-field .mat-form-field-infix {\n padding-top: 0.5rem !important;\n}\n\n.office-level-row .mat-select-placeholder {\n color: #333333;\n font-family: \"McKinsey Sans\";\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .office-level-row .legend-container .mat-form-field-outline, .office-level-row .mat-form-field-infix {\n height: 45px !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .office-level-row .legend-container .mat-form-field-outline, .office-level-row .mat-form-field-infix {\n height: 45px !important;\n }\n}\n.office-level-row .select-divider {\n display: block;\n top: 0 !important;\n width: 44px !important;\n right: -11px !important;\n background: transparent !important;\n border-width: 0 0 0 1px;\n border-color: #c6c6c6;\n border-style: solid;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .office-level-row .select-divider {\n height: calc(100% - 1px) !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .office-level-row .select-divider {\n height: calc(100% - 1px) !important;\n }\n}\n.office-level-row .disabled .select-divider {\n background: #F0F0F0 !important;\n}\n@media only screen and (orientation: portrait) and (min-width: 451px) {\n .office-level-row .disabled .select-divider {\n height: calc(100% - 2px) !important;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 801px) {\n .office-level-row .disabled .select-divider {\n height: calc(100% - 2px) !important;\n }\n}\n.office-level-row .disabled .select-chevron {\n opacity: 0.5;\n margin-left: 10px;\n}\n\n.office-level-row .legend-container .mat-form-field-outline, .office-level-row .mat-form-field-infix, .map-controls .legend-container .mat-form-field-outline, .map-controls .mat-form-field-infix {\n display: flex !important;\n width: 100% !important;\n justify-content: space-between !important;\n}\n\n.booking-form-container {\n overflow-y: auto;\n max-height: calc(100vh - 310px);\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .booking-form-container {\n max-height: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .booking-form-container {\n max-height: none;\n }\n}\n\n.booking-form-container .mck-form-input mat-label, .booking-form-container .mck-form-input .mat-radio-label-content {\n font-family: \"McKinsey Sans\" !important;\n color: #333333;\n}\n.booking-form-container .mck-form-input input, .booking-form-container .mck-form-input input::placeholder {\n font-family: \"McKinsey Sans\";\n color: #B3B3B3;\n}\n\n/*\nStart Angular Calendar\n*/\n.cal-week-view {\n /* stylelint-disable-next-line selector-type-no-unknown */\n}\n\n.cal-week-view * {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n\n.cal-week-view .cal-day-headers {\n display: -webkit-box;\n display: -ms-flexbox;\n -js-display: flex;\n display: flex;\n padding-left: 70px;\n border: 1px solid;\n}\n\n.cal-week-view .cal-day-headers .cal-header {\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n text-align: left;\n padding: 12px;\n margin-top: 20px;\n font-family: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n font-size: 16px;\n font-weight: 400;\n}\n.cal-week-view .cal-day-headers .cal-header p {\n font-size: 16px;\n font-weight: 300;\n margin: 0;\n}\n.cal-week-view .cal-day-headers .cal-header.show-weekend {\n font-size: 12px;\n}\n.cal-week-view .cal-day-headers .cal-header.show-weekend p {\n font-size: 12px;\n}\n\n.cal-week-view .cal-day-headers .cal-header:not(:last-child) {\n border-right: 1px solid;\n}\n\n.cal-week-view .cal-day-headers .cal-header:first-child {\n border-left: 1px solid;\n}\n\n.cal-week-view .cal-day-headers span {\n font-weight: 400;\n opacity: 0.5;\n}\n\n.cal-week-view .cal-day-column {\n -webkit-box-flex: 1;\n -ms-flex-positive: 1;\n flex-grow: 1;\n border-left: solid 1px;\n padding-top: 5px;\n}\n\n.cal-week-view .cal-event {\n font-size: 12px;\n border: 1px solid;\n outline: none;\n}\n.cal-week-view .cal-event .berry {\n position: absolute;\n left: calc(50% - 7px);\n display: none;\n height: 14px;\n width: 14px;\n background-color: #00A9F4;\n border-radius: 50%;\n}\n.cal-week-view .cal-event .berry.top {\n top: -7px;\n}\n.cal-week-view .cal-event .berry.bot {\n bottom: -7px;\n}\n.cal-week-view .cal-event .bumper {\n position: absolute;\n left: 3px;\n display: block;\n width: calc(100% - 6px);\n border-radius: 3px;\n z-index: -1;\n opacity: 0.6;\n}\n.cal-week-view .cal-event.expanded:focus {\n border-style: dashed;\n border-width: 2px;\n outline: none;\n}\n.cal-week-view .cal-event.expanded:focus .berry {\n display: block;\n}\n\n.cal-week-view .cal-time-label-column {\n width: 70px;\n height: 100%;\n}\n\n.cal-week-view .cal-current-time-marker {\n position: absolute;\n width: 100%;\n height: 2px;\n z-index: 2;\n}\n\n.cal-week-view .cal-all-day-events {\n border: solid 1px;\n border-top: 0;\n border-bottom-width: 3px;\n padding-top: 3px;\n position: relative;\n}\n\n.cal-week-view .cal-all-day-events .cal-day-columns {\n height: 100%;\n width: 100%;\n display: -webkit-box;\n display: -ms-flexbox;\n -js-display: flex;\n display: flex;\n position: absolute;\n top: 0;\n z-index: 0;\n}\n\n.cal-week-view .cal-all-day-events .cal-events-row {\n position: relative;\n height: 31px;\n margin-left: 70px;\n}\n\n.cal-week-view .cal-all-day-events .cal-event-container {\n display: inline-block;\n position: absolute;\n}\n\n.cal-week-view .cal-all-day-events .cal-event-container.resize-active {\n z-index: 1;\n pointer-events: none;\n}\n\n.cal-week-view .cal-all-day-events .cal-event {\n padding: 0 5px;\n margin-left: 2px;\n margin-right: 2px;\n height: 28px;\n line-height: 28px;\n}\n\n.cal-week-view .cal-all-day-events .cal-time-label-column {\n display: -webkit-box;\n display: -ms-flexbox;\n -js-display: flex;\n display: flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n font-size: 14px;\n}\n\n.cal-week-view .cal-all-day-events .cal-resize-handle {\n width: 6px;\n height: 100%;\n cursor: col-resize;\n position: absolute;\n top: 0;\n}\n\n.cal-week-view .cal-all-day-events .cal-resize-handle.cal-resize-handle-after-end {\n right: 0;\n}\n\n.cal-week-view .cal-event,\n.cal-week-view .cal-header {\n overflow: hidden;\n -o-text-overflow: ellipsis;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.cal-week-view .cal-drag-active {\n pointer-events: none;\n z-index: 1;\n}\n\n.cal-week-view .cal-drag-active * {\n pointer-events: none;\n}\n\n.cal-week-view .cal-time-events {\n position: relative;\n border: solid 1px;\n border-top: 0;\n display: -webkit-box;\n display: -ms-flexbox;\n -js-display: flex;\n display: flex;\n}\n\n.cal-week-view .cal-time-events .cal-day-columns {\n display: -webkit-box;\n display: -ms-flexbox;\n -js-display: flex;\n display: flex;\n -webkit-box-flex: 1;\n -ms-flex-positive: 1;\n flex-grow: 1;\n /*\n First and last item's hour visibility adjustment in the list \n */\n}\n.cal-week-view .cal-time-events .cal-day-columns .cal-hour:nth-of-type(2) .cal-time, .cal-week-view .cal-time-events .cal-day-columns .cal-hour:nth-of-type(8) .cal-time {\n top: -9px;\n}\n\n.cal-week-view .cal-time-events .cal-day-column {\n position: relative;\n}\n\n.cal-week-view .cal-time-events .cal-events-container {\n position: relative;\n}\n\n.cal-week-view .cal-time-events .cal-event-container {\n position: absolute;\n z-index: 1;\n}\n\n.cal-week-view .cal-time-events .cal-event {\n overflow: visible;\n width: 103%;\n height: calc(100% - 2px);\n margin: 1px;\n padding: 0 5px;\n line-height: 25px;\n left: -3%;\n position: relative;\n}\n\n.expanded .cal-week-view .cal-time-events .cal-event {\n width: 100%;\n left: 0%;\n}\n\n.cal-week-view .cal-time-events .cal-resize-handle {\n width: 100%;\n height: 8px;\n cursor: row-resize;\n position: absolute;\n z-index: 10;\n}\n\n.cal-week-view .cal-time-events .cal-resize-handle.cal-resize-handle-after-end {\n bottom: -4px;\n}\n\n.cal-week-view .cal-time-events .cal-resize-handle.cal-resize-handle-before-start {\n top: -4px;\n}\n\n.cal-week-view .cal-hour-segment {\n position: relative;\n}\n\n.cal-week-view .cal-hour-segment::after {\n content: \" \";\n}\n\n.cal-week-view .cal-draggable {\n cursor: move;\n}\n\n.cal-week-view mwl-calendar-week-view-hour-segment,\n.cal-week-view .cal-hour-segment {\n display: block;\n}\n\n.cal-week-view .cal-hour .cal-time {\n z-index: 2;\n position: relative;\n top: -14px;\n background-color: #f4f4f4;\n height: 5rem;\n width: 4rem;\n border-right: 1px solid #A19F9F;\n border-width: thin;\n}\n.cal-week-view .cal-hour .cal-hour-start {\n border: none !important;\n}\n\n.expanded .cal-week-view .cal-hour .cal-time {\n background-color: #f8f9fa;\n width: 4.44rem;\n}\n\n.cal-week-view .cal-hour:not(:last-child) .cal-hour-segment,\n.cal-week-view .cal-hour:last-child :not(:last-child) .cal-hour-segment {\n border-bottom: thin solid;\n border-color: #DBDBDB;\n}\n\n.cal-week-view .cal-time {\n font-weight: bold;\n padding-top: 5px;\n width: 70px;\n text-align: center;\n}\n\n.cal-week-view .cal-hour-segment.cal-after-hour-start .cal-time {\n display: none;\n}\n\n.cal-week-view {\n background-color: #fff;\n border-top: solid 1px #e1e1e1;\n}\n\n.cal-week-view .cal-day-headers {\n border-color: #e1e1e1;\n border-top: 0;\n border-left-width: 0;\n border-right-width: 0;\n}\n\n.cal-week-view .cal-day-headers .cal-header:not(:last-child) {\n border-right-color: #e1e1e1;\n}\n\n.cal-week-view .cal-day-headers .cal-header:first-child {\n border-left-color: #e1e1e1;\n}\n\n.cal-week-view .cal-day-column {\n border-left-color: #e1e1e1;\n}\n\n.cal-week-view .cal-event {\n background-color: #d1e8ff;\n border-color: #1e90ff;\n color: #1e90ff;\n}\n\n.cal-week-view .cal-all-day-events {\n border-color: #e1e1e1;\n}\n\n.cal-week-view .cal-header.cal-event-date {\n color: #2251FF;\n}\n\n.cal-week-view .cal-header.cal-weekend span {\n color: #8b0000;\n}\n\n.cal-week-view .cal-time-events {\n border-color: #e1e1e1;\n}\n\n.expanded .cal-week-view .cal-time-events .cal-day-columns:not(.cal-resize-active) .cal-hour-segment:hover {\n background-color: #C0DBF5;\n}\n\n.cal-week-view .cal-hour-odd {\n background-color: #fafafa;\n}\n\n.cal-week-view .cal-drag-over .cal-hour-segment {\n background-color: #ededed;\n}\n\n.cal-week-view .cal-hour:not(:last-child) .cal-hour-segment,\n.cal-week-view .cal-hour:last-child :not(:last-child) .cal-hour-segment {\n border-bottom-color: #e1e1e1;\n}\n\n.cal-week-view .cal-current-time-marker {\n display: none;\n}\n\n.cal-day-view mwl-calendar-week-view-header {\n display: none;\n}\n\n.cal-day-view .cal-events-container {\n margin-left: 70px;\n}\n\n.cal-day-view .cal-day-column {\n border-left: 0;\n}\n\n.cal-day-view .cal-current-time-marker {\n margin-left: 70px;\n width: calc(100% - 70px);\n}\n\n.cal-tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.5;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n font-size: 14px;\n word-wrap: break-word;\n opacity: 0.9;\n margin-bottom: 4px;\n}\n\n.cal-tooltip.cal-tooltip-top {\n padding: 5px 0;\n margin-top: -3px;\n}\n\n.cal-tooltip.cal-tooltip-top .cal-tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n}\n\n.cal-tooltip.cal-tooltip-right {\n padding: 0 5px;\n margin-left: 3px;\n}\n\n.cal-tooltip.cal-tooltip-right .cal-tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n}\n\n.cal-tooltip.cal-tooltip-bottom {\n padding: 5px 0;\n margin-top: 3px;\n}\n\n.cal-tooltip.cal-tooltip-bottom .cal-tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n}\n\n.cal-tooltip.cal-tooltip-left {\n padding: 0 5px;\n margin-left: -3px;\n}\n\n.cal-tooltip.cal-tooltip-left .cal-tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n}\n\n.cal-tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n text-align: center;\n border-radius: 0.25rem;\n}\n\n.cal-tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n\n.cal-tooltip.cal-tooltip-top .cal-tooltip-arrow {\n border-top-color: #fff;\n}\n\n.cal-tooltip.cal-tooltip-right .cal-tooltip-arrow {\n border-right-color: #fff;\n}\n\n.cal-tooltip.cal-tooltip-bottom .cal-tooltip-arrow {\n border-bottom-color: #fff;\n}\n\n.cal-tooltip.cal-tooltip-left .cal-tooltip-arrow {\n border-left-color: #fff;\n}\n\n.cal-tooltip-inner {\n padding: 10px;\n color: #000;\n background-color: #fff;\n box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.2);\n}\n\n.cal-event-container .cal-event {\n border-radius: 0 !important;\n}\n.cal-event-container .cal-event .cal-event-title {\n font-size: 14px;\n font-weight: 400;\n padding: 10px 14px;\n color: black;\n display: block;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .cal-event-container .cal-event .cal-event-title {\n font-size: 12px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .cal-event-container .cal-event .cal-event-title {\n font-size: 12px;\n }\n}\n.cal-event-container.selected {\n width: 100% !important;\n left: 0% !important;\n z-index: 2 !important;\n}\n.cal-event-container.selected .cal-event {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.cal-event-container.selected .cal-event .cal-event-title {\n white-space: pre-wrap;\n text-align: center;\n}\n.cal-event-container.selected.mobile {\n left: 0% !important;\n width: 100% !important;\n}\n.cal-event-container.selected.minimal .cal-event-title {\n top: 0;\n transform: none;\n}\n.cal-event-container.mobile {\n left: 0% !important;\n width: 100% !important;\n}\n.cal-event-container.booked {\n width: 100% !important;\n left: 0% !important;\n}\n.cal-event-container.booked .cal-event .cal-event-title {\n width: 100%;\n}\n.cal-event-container.booked.mobile {\n left: 0% !important;\n width: 100% !important;\n}\n.cal-event-container.booked.minimal .cal-event-title {\n padding: 1px 14px;\n}\n.cal-event-container.show-weekend .cal-event .cal-event-title {\n font-size: 13px;\n}\n\n.cal-week-view {\n position: relative;\n}\n.cal-week-view .cal-time {\n font-weight: 400;\n}\n.cal-week-view .cal-hour {\n background-color: #ffffff;\n}\n.cal-week-view .cal-hour-odd {\n background-color: #ffffff;\n}\n.cal-week-view .cal-time-events {\n background-color: #ffffff;\n}\n\n.cal-week-view .cal-day-headers {\n position: fixed;\n width: 100%;\n max-width: 1008px;\n background: #F8F9FA;\n z-index: 3;\n height: 82px;\n}\n@media only screen and (orientation: portrait) and (min-width: 801px) and (max-width: 1024px) {\n .cal-week-view .cal-day-headers {\n width: 100%;\n }\n}\n@media only screen and (orientation: landscape) and (min-width: 1049px) and (max-width: 1280px) {\n .cal-week-view .cal-day-headers {\n width: 100%;\n }\n}\n\n.expanded .cal-week-view .cal-time-events {\n padding-top: 87px;\n position: relative;\n top: 1px;\n z-index: 1;\n border: 1px solid #f0f0f0;\n}\n.expanded .cal-event-container.mobile {\n left: 20% !important;\n width: 80% !important;\n}\n\n/*\nEnd Start Angular Calendar\n*/\n.mat-ripple-element {\n background-color: rgba(0, 0, 0, 0.1);\n}\n\n.mat-option {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-option:hover:not(.mat-option-disabled), .mat-option:focus:not(.mat-option-disabled) {\n background: rgba(0, 0, 0, 0.04);\n}\n.mat-option.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled) {\n background: rgba(0, 0, 0, 0.04);\n}\n.mat-option.mat-active {\n background: rgba(0, 0, 0, 0.04);\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-option.mat-option-disabled {\n color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-primary .mat-option.mat-selected:not(.mat-option-disabled) {\n color: #3f51b5;\n}\n\n.mat-accent .mat-option.mat-selected:not(.mat-option-disabled) {\n color: #448aff;\n}\n\n.mat-warn .mat-option.mat-selected:not(.mat-option-disabled) {\n color: #f44336;\n}\n\n.mat-optgroup-label {\n color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-optgroup-disabled .mat-optgroup-label {\n color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-pseudo-checkbox {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-pseudo-checkbox::after {\n color: #fafafa;\n}\n\n.mat-pseudo-checkbox-disabled {\n color: #b0b0b0;\n}\n\n.mat-primary .mat-pseudo-checkbox-checked,\n.mat-primary .mat-pseudo-checkbox-indeterminate {\n background: #3f51b5;\n}\n\n.mat-pseudo-checkbox-checked,\n.mat-pseudo-checkbox-indeterminate,\n.mat-accent .mat-pseudo-checkbox-checked,\n.mat-accent .mat-pseudo-checkbox-indeterminate {\n background: #448aff;\n}\n\n.mat-warn .mat-pseudo-checkbox-checked,\n.mat-warn .mat-pseudo-checkbox-indeterminate {\n background: #f44336;\n}\n\n.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,\n.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled {\n background: #b0b0b0;\n}\n\n.mat-elevation-z0 {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z1 {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z2 {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z3 {\n box-shadow: 0px 3px 3px -2px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 0, 0, 0.14), 0px 1px 8px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z4 {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z5 {\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 5px 8px 0px rgba(0, 0, 0, 0.14), 0px 1px 14px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z6 {\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z7 {\n box-shadow: 0px 4px 5px -2px rgba(0, 0, 0, 0.2), 0px 7px 10px 1px rgba(0, 0, 0, 0.14), 0px 2px 16px 1px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z8 {\n box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z9 {\n box-shadow: 0px 5px 6px -3px rgba(0, 0, 0, 0.2), 0px 9px 12px 1px rgba(0, 0, 0, 0.14), 0px 3px 16px 2px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z10 {\n box-shadow: 0px 6px 6px -3px rgba(0, 0, 0, 0.2), 0px 10px 14px 1px rgba(0, 0, 0, 0.14), 0px 4px 18px 3px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z11 {\n box-shadow: 0px 6px 7px -4px rgba(0, 0, 0, 0.2), 0px 11px 15px 1px rgba(0, 0, 0, 0.14), 0px 4px 20px 3px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z12 {\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z13 {\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 13px 19px 2px rgba(0, 0, 0, 0.14), 0px 5px 24px 4px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z14 {\n box-shadow: 0px 7px 9px -4px rgba(0, 0, 0, 0.2), 0px 14px 21px 2px rgba(0, 0, 0, 0.14), 0px 5px 26px 4px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z15 {\n box-shadow: 0px 8px 9px -5px rgba(0, 0, 0, 0.2), 0px 15px 22px 2px rgba(0, 0, 0, 0.14), 0px 6px 28px 5px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z16 {\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z17 {\n box-shadow: 0px 8px 11px -5px rgba(0, 0, 0, 0.2), 0px 17px 26px 2px rgba(0, 0, 0, 0.14), 0px 6px 32px 5px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z18 {\n box-shadow: 0px 9px 11px -5px rgba(0, 0, 0, 0.2), 0px 18px 28px 2px rgba(0, 0, 0, 0.14), 0px 7px 34px 6px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z19 {\n box-shadow: 0px 9px 12px -6px rgba(0, 0, 0, 0.2), 0px 19px 29px 2px rgba(0, 0, 0, 0.14), 0px 7px 36px 6px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z20 {\n box-shadow: 0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 20px 31px 3px rgba(0, 0, 0, 0.14), 0px 8px 38px 7px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z21 {\n box-shadow: 0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 21px 33px 3px rgba(0, 0, 0, 0.14), 0px 8px 40px 7px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z22 {\n box-shadow: 0px 10px 14px -6px rgba(0, 0, 0, 0.2), 0px 22px 35px 3px rgba(0, 0, 0, 0.14), 0px 8px 42px 7px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z23 {\n box-shadow: 0px 11px 14px -7px rgba(0, 0, 0, 0.2), 0px 23px 36px 3px rgba(0, 0, 0, 0.14), 0px 9px 44px 8px rgba(0, 0, 0, 0.12);\n}\n\n.mat-elevation-z24 {\n box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12);\n}\n\n.mat-app-background {\n background-color: #fafafa;\n color: rgba(0, 0, 0, 0.87);\n}\n\n.mat-theme-loaded-marker {\n display: none;\n}\n\n.mat-autocomplete-panel {\n background: white;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-autocomplete-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover) {\n background: white;\n}\n.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover):not(.mat-option-disabled) {\n color: rgba(0, 0, 0, 0.87);\n}\n\n.mat-badge-content {\n color: white;\n background: #3f51b5;\n}\n.cdk-high-contrast-active .mat-badge-content {\n outline: solid 1px;\n border-radius: 0;\n}\n\n.mat-badge-accent .mat-badge-content {\n background: #448aff;\n color: white;\n}\n\n.mat-badge-warn .mat-badge-content {\n color: white;\n background: #f44336;\n}\n\n.mat-badge {\n position: relative;\n}\n\n.mat-badge-hidden .mat-badge-content {\n display: none;\n}\n\n.mat-badge-disabled .mat-badge-content {\n background: #b9b9b9;\n color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-badge-content {\n position: absolute;\n text-align: center;\n display: inline-block;\n border-radius: 50%;\n transition: transform 200ms ease-in-out;\n transform: scale(0.6);\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n pointer-events: none;\n}\n\n.ng-animate-disabled .mat-badge-content,\n.mat-badge-content._mat-animation-noopable {\n transition: none;\n}\n\n.mat-badge-content.mat-badge-active {\n transform: none;\n}\n\n.mat-badge-small .mat-badge-content {\n width: 16px;\n height: 16px;\n line-height: 16px;\n}\n.mat-badge-small.mat-badge-above .mat-badge-content {\n top: -8px;\n}\n.mat-badge-small.mat-badge-below .mat-badge-content {\n bottom: -8px;\n}\n.mat-badge-small.mat-badge-before .mat-badge-content {\n left: -16px;\n}\n[dir=rtl] .mat-badge-small.mat-badge-before .mat-badge-content {\n left: auto;\n right: -16px;\n}\n.mat-badge-small.mat-badge-after .mat-badge-content {\n right: -16px;\n}\n[dir=rtl] .mat-badge-small.mat-badge-after .mat-badge-content {\n right: auto;\n left: -16px;\n}\n.mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: -8px;\n}\n[dir=rtl] .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: auto;\n right: -8px;\n}\n.mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: -8px;\n}\n[dir=rtl] .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: auto;\n left: -8px;\n}\n\n.mat-badge-medium .mat-badge-content {\n width: 22px;\n height: 22px;\n line-height: 22px;\n}\n.mat-badge-medium.mat-badge-above .mat-badge-content {\n top: -11px;\n}\n.mat-badge-medium.mat-badge-below .mat-badge-content {\n bottom: -11px;\n}\n.mat-badge-medium.mat-badge-before .mat-badge-content {\n left: -22px;\n}\n[dir=rtl] .mat-badge-medium.mat-badge-before .mat-badge-content {\n left: auto;\n right: -22px;\n}\n.mat-badge-medium.mat-badge-after .mat-badge-content {\n right: -22px;\n}\n[dir=rtl] .mat-badge-medium.mat-badge-after .mat-badge-content {\n right: auto;\n left: -22px;\n}\n.mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: -11px;\n}\n[dir=rtl] .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: auto;\n right: -11px;\n}\n.mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: -11px;\n}\n[dir=rtl] .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: auto;\n left: -11px;\n}\n\n.mat-badge-large .mat-badge-content {\n width: 28px;\n height: 28px;\n line-height: 28px;\n}\n.mat-badge-large.mat-badge-above .mat-badge-content {\n top: -14px;\n}\n.mat-badge-large.mat-badge-below .mat-badge-content {\n bottom: -14px;\n}\n.mat-badge-large.mat-badge-before .mat-badge-content {\n left: -28px;\n}\n[dir=rtl] .mat-badge-large.mat-badge-before .mat-badge-content {\n left: auto;\n right: -28px;\n}\n.mat-badge-large.mat-badge-after .mat-badge-content {\n right: -28px;\n}\n[dir=rtl] .mat-badge-large.mat-badge-after .mat-badge-content {\n right: auto;\n left: -28px;\n}\n.mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: -14px;\n}\n[dir=rtl] .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: auto;\n right: -14px;\n}\n.mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: -14px;\n}\n[dir=rtl] .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: auto;\n left: -14px;\n}\n\n.mat-bottom-sheet-container {\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\n background: white;\n color: rgba(0, 0, 0, 0.87);\n}\n\n.mat-button, .mat-icon-button, .mat-stroked-button {\n color: inherit;\n background: transparent;\n}\n.mat-button.mat-primary, .mat-icon-button.mat-primary, .mat-stroked-button.mat-primary {\n color: #3f51b5;\n}\n.mat-button.mat-accent, .mat-icon-button.mat-accent, .mat-stroked-button.mat-accent {\n color: #448aff;\n}\n.mat-button.mat-warn, .mat-icon-button.mat-warn, .mat-stroked-button.mat-warn {\n color: #f44336;\n}\n.mat-button.mat-primary[disabled], .mat-button.mat-accent[disabled], .mat-button.mat-warn[disabled], .mat-button[disabled][disabled], .mat-icon-button.mat-primary[disabled], .mat-icon-button.mat-accent[disabled], .mat-icon-button.mat-warn[disabled], .mat-icon-button[disabled][disabled], .mat-stroked-button.mat-primary[disabled], .mat-stroked-button.mat-accent[disabled], .mat-stroked-button.mat-warn[disabled], .mat-stroked-button[disabled][disabled] {\n color: rgba(0, 0, 0, 0.26);\n}\n.mat-button.mat-primary .mat-button-focus-overlay, .mat-icon-button.mat-primary .mat-button-focus-overlay, .mat-stroked-button.mat-primary .mat-button-focus-overlay {\n background-color: #3f51b5;\n}\n.mat-button.mat-accent .mat-button-focus-overlay, .mat-icon-button.mat-accent .mat-button-focus-overlay, .mat-stroked-button.mat-accent .mat-button-focus-overlay {\n background-color: #448aff;\n}\n.mat-button.mat-warn .mat-button-focus-overlay, .mat-icon-button.mat-warn .mat-button-focus-overlay, .mat-stroked-button.mat-warn .mat-button-focus-overlay {\n background-color: #f44336;\n}\n.mat-button[disabled] .mat-button-focus-overlay, .mat-icon-button[disabled] .mat-button-focus-overlay, .mat-stroked-button[disabled] .mat-button-focus-overlay {\n background-color: transparent;\n}\n.mat-button .mat-ripple-element, .mat-icon-button .mat-ripple-element, .mat-stroked-button .mat-ripple-element {\n opacity: 0.1;\n background-color: currentColor;\n}\n\n.mat-button-focus-overlay {\n background: black;\n}\n\n.mat-stroked-button:not([disabled]) {\n border-color: rgba(0, 0, 0, 0.12);\n}\n\n.mat-flat-button, .mat-raised-button, .mat-fab, .mat-mini-fab {\n color: rgba(0, 0, 0, 0.87);\n background-color: white;\n}\n.mat-flat-button.mat-primary, .mat-raised-button.mat-primary, .mat-fab.mat-primary, .mat-mini-fab.mat-primary {\n color: white;\n}\n.mat-flat-button.mat-accent, .mat-raised-button.mat-accent, .mat-fab.mat-accent, .mat-mini-fab.mat-accent {\n color: white;\n}\n.mat-flat-button.mat-warn, .mat-raised-button.mat-warn, .mat-fab.mat-warn, .mat-mini-fab.mat-warn {\n color: white;\n}\n.mat-flat-button.mat-primary[disabled], .mat-flat-button.mat-accent[disabled], .mat-flat-button.mat-warn[disabled], .mat-flat-button[disabled][disabled], .mat-raised-button.mat-primary[disabled], .mat-raised-button.mat-accent[disabled], .mat-raised-button.mat-warn[disabled], .mat-raised-button[disabled][disabled], .mat-fab.mat-primary[disabled], .mat-fab.mat-accent[disabled], .mat-fab.mat-warn[disabled], .mat-fab[disabled][disabled], .mat-mini-fab.mat-primary[disabled], .mat-mini-fab.mat-accent[disabled], .mat-mini-fab.mat-warn[disabled], .mat-mini-fab[disabled][disabled] {\n color: rgba(0, 0, 0, 0.26);\n}\n.mat-flat-button.mat-primary, .mat-raised-button.mat-primary, .mat-fab.mat-primary, .mat-mini-fab.mat-primary {\n background-color: #3f51b5;\n}\n.mat-flat-button.mat-accent, .mat-raised-button.mat-accent, .mat-fab.mat-accent, .mat-mini-fab.mat-accent {\n background-color: #448aff;\n}\n.mat-flat-button.mat-warn, .mat-raised-button.mat-warn, .mat-fab.mat-warn, .mat-mini-fab.mat-warn {\n background-color: #f44336;\n}\n.mat-flat-button.mat-primary[disabled], .mat-flat-button.mat-accent[disabled], .mat-flat-button.mat-warn[disabled], .mat-flat-button[disabled][disabled], .mat-raised-button.mat-primary[disabled], .mat-raised-button.mat-accent[disabled], .mat-raised-button.mat-warn[disabled], .mat-raised-button[disabled][disabled], .mat-fab.mat-primary[disabled], .mat-fab.mat-accent[disabled], .mat-fab.mat-warn[disabled], .mat-fab[disabled][disabled], .mat-mini-fab.mat-primary[disabled], .mat-mini-fab.mat-accent[disabled], .mat-mini-fab.mat-warn[disabled], .mat-mini-fab[disabled][disabled] {\n background-color: rgba(0, 0, 0, 0.12);\n}\n.mat-flat-button.mat-primary .mat-ripple-element, .mat-raised-button.mat-primary .mat-ripple-element, .mat-fab.mat-primary .mat-ripple-element, .mat-mini-fab.mat-primary .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.mat-flat-button.mat-accent .mat-ripple-element, .mat-raised-button.mat-accent .mat-ripple-element, .mat-fab.mat-accent .mat-ripple-element, .mat-mini-fab.mat-accent .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.mat-flat-button.mat-warn .mat-ripple-element, .mat-raised-button.mat-warn .mat-ripple-element, .mat-fab.mat-warn .mat-ripple-element, .mat-mini-fab.mat-warn .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n\n.mat-stroked-button:not([class*=mat-elevation-z]), .mat-flat-button:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-raised-button:not([class*=mat-elevation-z]) {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-raised-button:not([disabled]):active:not([class*=mat-elevation-z]) {\n box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);\n}\n.mat-raised-button[disabled]:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-fab:not([class*=mat-elevation-z]), .mat-mini-fab:not([class*=mat-elevation-z]) {\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-fab:not([disabled]):active:not([class*=mat-elevation-z]), .mat-mini-fab:not([disabled]):active:not([class*=mat-elevation-z]) {\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);\n}\n.mat-fab[disabled]:not([class*=mat-elevation-z]), .mat-mini-fab[disabled]:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-button-toggle-standalone,\n.mat-button-toggle-group {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\n.mat-button-toggle-group-appearance-standard {\n box-shadow: none;\n}\n\n.mat-button-toggle {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-button-toggle .mat-button-toggle-focus-overlay {\n background-color: rgba(0, 0, 0, 0.12);\n}\n\n.mat-button-toggle-appearance-standard {\n color: rgba(0, 0, 0, 0.87);\n background: white;\n}\n.mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay {\n background-color: black;\n}\n\n.mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\n border-left: solid 1px rgba(0, 0, 0, 0.12);\n}\n\n[dir=rtl] .mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\n border-left: none;\n border-right: solid 1px rgba(0, 0, 0, 0.12);\n}\n\n.mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle + .mat-button-toggle {\n border-left: none;\n border-right: none;\n border-top: solid 1px rgba(0, 0, 0, 0.12);\n}\n\n.mat-button-toggle-checked {\n background-color: #e0e0e0;\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-button-toggle-checked.mat-button-toggle-appearance-standard {\n color: rgba(0, 0, 0, 0.87);\n}\n\n.mat-button-toggle-disabled {\n color: rgba(0, 0, 0, 0.26);\n background-color: #eeeeee;\n}\n.mat-button-toggle-disabled.mat-button-toggle-appearance-standard {\n background: white;\n}\n.mat-button-toggle-disabled.mat-button-toggle-checked {\n background-color: #bdbdbd;\n}\n\n.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\n.mat-button-toggle-group-appearance-standard {\n border: solid 1px rgba(0, 0, 0, 0.12);\n}\n\n.mat-card {\n background: white;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-card:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-card.mat-card-flat:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-card-subtitle {\n color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-checkbox-frame {\n border-color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-checkbox-checkmark {\n fill: #fafafa;\n}\n\n.mat-checkbox-checkmark-path {\n stroke: #fafafa !important;\n}\n\n.mat-checkbox-mixedmark {\n background-color: #fafafa;\n}\n\n.mat-checkbox-indeterminate.mat-primary .mat-checkbox-background, .mat-checkbox-checked.mat-primary .mat-checkbox-background {\n background-color: #3f51b5;\n}\n.mat-checkbox-indeterminate.mat-accent .mat-checkbox-background, .mat-checkbox-checked.mat-accent .mat-checkbox-background {\n background-color: #448aff;\n}\n.mat-checkbox-indeterminate.mat-warn .mat-checkbox-background, .mat-checkbox-checked.mat-warn .mat-checkbox-background {\n background-color: #f44336;\n}\n\n.mat-checkbox-disabled.mat-checkbox-checked .mat-checkbox-background, .mat-checkbox-disabled.mat-checkbox-indeterminate .mat-checkbox-background {\n background-color: #b0b0b0;\n}\n.mat-checkbox-disabled:not(.mat-checkbox-checked) .mat-checkbox-frame {\n border-color: #b0b0b0;\n}\n.mat-checkbox-disabled .mat-checkbox-label {\n color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-checkbox .mat-ripple-element {\n background-color: black;\n}\n\n.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element,\n.mat-checkbox:active:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element {\n background: #3f51b5;\n}\n.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element,\n.mat-checkbox:active:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element {\n background: #448aff;\n}\n.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element,\n.mat-checkbox:active:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element {\n background: #f44336;\n}\n\n.mat-chip.mat-standard-chip {\n background-color: #e0e0e0;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-chip.mat-standard-chip .mat-chip-remove {\n color: rgba(0, 0, 0, 0.87);\n opacity: 0.4;\n}\n.mat-chip.mat-standard-chip:not(.mat-chip-disabled):active {\n box-shadow: 0px 3px 3px -2px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 0, 0, 0.14), 0px 1px 8px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-chip.mat-standard-chip:not(.mat-chip-disabled) .mat-chip-remove:hover {\n opacity: 0.54;\n}\n.mat-chip.mat-standard-chip.mat-chip-disabled {\n opacity: 0.4;\n}\n.mat-chip.mat-standard-chip::after {\n background: black;\n}\n\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary {\n background-color: #3f51b5;\n color: white;\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-chip-remove {\n color: white;\n opacity: 0.4;\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn {\n background-color: #f44336;\n color: white;\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-chip-remove {\n color: white;\n opacity: 0.4;\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent {\n background-color: #448aff;\n color: white;\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-chip-remove {\n color: white;\n opacity: 0.4;\n}\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n\n.mat-table {\n background: white;\n}\n\n.mat-table thead, .mat-table tbody, .mat-table tfoot,\nmat-header-row, mat-row, mat-footer-row,\n[mat-header-row], [mat-row], [mat-footer-row],\n.mat-table-sticky {\n background: inherit;\n}\n\nmat-row, mat-header-row, mat-footer-row,\nth.mat-header-cell, td.mat-cell, td.mat-footer-cell {\n border-bottom-color: rgba(0, 0, 0, 0.12);\n}\n\n.mat-header-cell {\n color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-cell, .mat-footer-cell {\n color: rgba(0, 0, 0, 0.87);\n}\n\n.mat-calendar-arrow {\n border-top-color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-datepicker-toggle,\n.mat-datepicker-content .mat-calendar-next-button,\n.mat-datepicker-content .mat-calendar-previous-button {\n color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-calendar-table-header {\n color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-calendar-table-header-divider::after {\n background: rgba(0, 0, 0, 0.12);\n}\n\n.mat-calendar-body-label {\n color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-calendar-body-cell-content {\n color: rgba(0, 0, 0, 0.87);\n border-color: transparent;\n}\n\n.mat-calendar-body-disabled > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\n color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected),\n.cdk-keyboard-focused .mat-calendar-body-active > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected),\n.cdk-program-focused .mat-calendar-body-active > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\n background-color: rgba(0, 0, 0, 0.04);\n}\n\n.mat-calendar-body-today:not(.mat-calendar-body-selected) {\n border-color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-calendar-body-disabled > .mat-calendar-body-today:not(.mat-calendar-body-selected) {\n border-color: rgba(0, 0, 0, 0.18);\n}\n\n.mat-calendar-body-selected {\n background-color: #3f51b5;\n color: white;\n}\n\n.mat-calendar-body-disabled > .mat-calendar-body-selected {\n background-color: rgba(63, 81, 181, 0.4);\n}\n\n.mat-calendar-body-today.mat-calendar-body-selected {\n box-shadow: inset 0 0 0 1px white;\n}\n\n.mat-datepicker-content {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n background-color: white;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-datepicker-content.mat-accent .mat-calendar-body-selected {\n background-color: #448aff;\n color: white;\n}\n.mat-datepicker-content.mat-accent .mat-calendar-body-disabled > .mat-calendar-body-selected {\n background-color: rgba(68, 138, 255, 0.4);\n}\n.mat-datepicker-content.mat-accent .mat-calendar-body-today.mat-calendar-body-selected {\n box-shadow: inset 0 0 0 1px white;\n}\n.mat-datepicker-content.mat-warn .mat-calendar-body-selected {\n background-color: #f44336;\n color: white;\n}\n.mat-datepicker-content.mat-warn .mat-calendar-body-disabled > .mat-calendar-body-selected {\n background-color: rgba(244, 67, 54, 0.4);\n}\n.mat-datepicker-content.mat-warn .mat-calendar-body-today.mat-calendar-body-selected {\n box-shadow: inset 0 0 0 1px white;\n}\n\n.mat-datepicker-content-touch {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-datepicker-toggle-active {\n color: #3f51b5;\n}\n.mat-datepicker-toggle-active.mat-accent {\n color: #448aff;\n}\n.mat-datepicker-toggle-active.mat-warn {\n color: #f44336;\n}\n\n.mat-dialog-container {\n box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12);\n background: white;\n color: rgba(0, 0, 0, 0.87);\n}\n\n.mat-divider {\n border-top-color: rgba(0, 0, 0, 0.12);\n}\n\n.mat-divider-vertical {\n border-right-color: rgba(0, 0, 0, 0.12);\n}\n\n.mat-expansion-panel {\n background: white;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-expansion-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-action-row {\n border-top-color: rgba(0, 0, 0, 0.12);\n}\n\n.mat-expansion-panel .mat-expansion-panel-header.cdk-keyboard-focused:not([aria-disabled=true]), .mat-expansion-panel .mat-expansion-panel-header.cdk-program-focused:not([aria-disabled=true]), .mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover:not([aria-disabled=true]) {\n background: rgba(0, 0, 0, 0.04);\n}\n\n@media (hover: none) {\n .mat-expansion-panel:not(.mat-expanded):not([aria-disabled=true]) .mat-expansion-panel-header:hover {\n background: white;\n }\n}\n.mat-expansion-panel-header-title {\n color: rgba(0, 0, 0, 0.87);\n}\n\n.mat-expansion-panel-header-description,\n.mat-expansion-indicator::after {\n color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-expansion-panel-header[aria-disabled=true] {\n color: rgba(0, 0, 0, 0.26);\n}\n.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title,\n.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description {\n color: inherit;\n}\n\n.mat-form-field-label {\n color: rgba(0, 0, 0, 0.6);\n}\n\n.mat-hint {\n color: rgba(0, 0, 0, 0.6);\n}\n\n.mat-form-field.mat-focused .mat-form-field-label {\n color: #3f51b5;\n}\n.mat-form-field.mat-focused .mat-form-field-label.mat-accent {\n color: #448aff;\n}\n.mat-form-field.mat-focused .mat-form-field-label.mat-warn {\n color: #f44336;\n}\n\n.mat-focused .mat-form-field-required-marker {\n color: #448aff;\n}\n\n.mat-form-field-ripple {\n background-color: rgba(0, 0, 0, 0.87);\n}\n\n.mat-form-field.mat-focused .mat-form-field-ripple {\n background-color: #3f51b5;\n}\n.mat-form-field.mat-focused .mat-form-field-ripple.mat-accent {\n background-color: #448aff;\n}\n.mat-form-field.mat-focused .mat-form-field-ripple.mat-warn {\n background-color: #f44336;\n}\n\n.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid) .mat-form-field-infix::after {\n color: #3f51b5;\n}\n.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-accent .mat-form-field-infix::after {\n color: #448aff;\n}\n.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-warn .mat-form-field-infix::after {\n color: #f44336;\n}\n\n.mat-form-field.mat-form-field-invalid .mat-form-field-label {\n color: #f44336;\n}\n.mat-form-field.mat-form-field-invalid .mat-form-field-label.mat-accent,\n.mat-form-field.mat-form-field-invalid .mat-form-field-label .mat-form-field-required-marker {\n color: #f44336;\n}\n.mat-form-field.mat-form-field-invalid .mat-form-field-ripple,\n.mat-form-field.mat-form-field-invalid .mat-form-field-ripple.mat-accent {\n background-color: #f44336;\n}\n\n.mat-error {\n color: #f44336;\n}\n\n.mat-form-field-appearance-legacy .mat-form-field-label {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-form-field-appearance-legacy .mat-hint {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-form-field-appearance-legacy .mat-form-field-underline {\n background-color: rgba(0, 0, 0, 0.42);\n}\n.mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline {\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.42) 0%, rgba(0, 0, 0, 0.42) 33%, transparent 0%);\n background-size: 4px 100%;\n background-repeat: repeat-x;\n}\n\n.mat-form-field-appearance-standard .mat-form-field-underline {\n background-color: rgba(0, 0, 0, 0.42);\n}\n.mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline {\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.42) 0%, rgba(0, 0, 0, 0.42) 33%, transparent 0%);\n background-size: 4px 100%;\n background-repeat: repeat-x;\n}\n\n.mat-form-field-appearance-fill .mat-form-field-flex {\n background-color: rgba(0, 0, 0, 0.04);\n}\n.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-flex {\n background-color: rgba(0, 0, 0, 0.02);\n}\n.mat-form-field-appearance-fill .mat-form-field-underline::before {\n background-color: rgba(0, 0, 0, 0.42);\n}\n.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-label {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-underline::before {\n background-color: transparent;\n}\n\n.mat-form-field-appearance-outline .mat-form-field-outline {\n color: rgba(0, 0, 0, 0.12);\n}\n.mat-form-field-appearance-outline .mat-form-field-outline-thick {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick {\n color: #3f51b5;\n}\n.mat-form-field-appearance-outline.mat-focused.mat-accent .mat-form-field-outline-thick {\n color: #448aff;\n}\n.mat-form-field-appearance-outline.mat-focused.mat-warn .mat-form-field-outline-thick {\n color: #f44336;\n}\n.mat-form-field-appearance-outline.mat-form-field-invalid.mat-form-field-invalid .mat-form-field-outline-thick {\n color: #f44336;\n}\n.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-label {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline {\n color: rgba(0, 0, 0, 0.06);\n}\n\n.mat-icon.mat-primary {\n color: #3f51b5;\n}\n.mat-icon.mat-accent {\n color: #448aff;\n}\n.mat-icon.mat-warn {\n color: #f44336;\n}\n\n.mat-form-field-type-mat-native-select .mat-form-field-infix::after {\n color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-input-element:disabled,\n.mat-form-field-type-mat-native-select.mat-form-field-disabled .mat-form-field-infix::after {\n color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-input-element {\n caret-color: #3f51b5;\n}\n.mat-input-element::placeholder {\n color: rgba(0, 0, 0, 0.42);\n}\n.mat-input-element::-moz-placeholder {\n color: rgba(0, 0, 0, 0.42);\n}\n.mat-input-element::-webkit-input-placeholder {\n color: rgba(0, 0, 0, 0.42);\n}\n.mat-input-element:-ms-input-placeholder {\n color: rgba(0, 0, 0, 0.42);\n}\n\n.mat-accent .mat-input-element {\n caret-color: #448aff;\n}\n\n.mat-warn .mat-input-element,\n.mat-form-field-invalid .mat-input-element {\n caret-color: #f44336;\n}\n\n.mat-form-field-type-mat-native-select.mat-form-field-invalid .mat-form-field-infix::after {\n color: #f44336;\n}\n\n.mat-list-base .mat-list-item {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-list-base .mat-list-option {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-list-base .mat-subheader {\n color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-list-item-disabled {\n background-color: #eeeeee;\n}\n\n.mat-list-option:hover, .mat-list-option:focus,\n.mat-nav-list .mat-list-item:hover,\n.mat-nav-list .mat-list-item:focus,\n.mat-action-list .mat-list-item:hover,\n.mat-action-list .mat-list-item:focus {\n background: rgba(0, 0, 0, 0.04);\n}\n\n.mat-list-single-selected-option, .mat-list-single-selected-option:hover, .mat-list-single-selected-option:focus {\n background: rgba(0, 0, 0, 0.12);\n}\n\n.mat-menu-panel {\n background: white;\n}\n.mat-menu-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-menu-item {\n background: transparent;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-menu-item[disabled], .mat-menu-item[disabled]::after {\n color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-menu-item .mat-icon-no-color,\n.mat-menu-item-submenu-trigger::after {\n color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-menu-item:hover:not([disabled]),\n.mat-menu-item.cdk-program-focused:not([disabled]),\n.mat-menu-item.cdk-keyboard-focused:not([disabled]),\n.mat-menu-item-highlighted:not([disabled]) {\n background: rgba(0, 0, 0, 0.04);\n}\n\n.mat-paginator {\n background: white;\n}\n\n.mat-paginator,\n.mat-paginator-page-size .mat-select-trigger {\n color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-paginator-decrement,\n.mat-paginator-increment {\n border-top: 2px solid rgba(0, 0, 0, 0.54);\n border-right: 2px solid rgba(0, 0, 0, 0.54);\n}\n\n.mat-paginator-first,\n.mat-paginator-last {\n border-top: 2px solid rgba(0, 0, 0, 0.54);\n}\n\n.mat-icon-button[disabled] .mat-paginator-decrement,\n.mat-icon-button[disabled] .mat-paginator-increment,\n.mat-icon-button[disabled] .mat-paginator-first,\n.mat-icon-button[disabled] .mat-paginator-last {\n border-color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-progress-bar-background {\n fill: #c5cae9;\n}\n\n.mat-progress-bar-buffer {\n background-color: #c5cae9;\n}\n\n.mat-progress-bar-fill::after {\n background-color: #3f51b5;\n}\n\n.mat-progress-bar.mat-accent .mat-progress-bar-background {\n fill: #82b1ff;\n}\n.mat-progress-bar.mat-accent .mat-progress-bar-buffer {\n background-color: #82b1ff;\n}\n.mat-progress-bar.mat-accent .mat-progress-bar-fill::after {\n background-color: #448aff;\n}\n\n.mat-progress-bar.mat-warn .mat-progress-bar-background {\n fill: #ffcdd2;\n}\n.mat-progress-bar.mat-warn .mat-progress-bar-buffer {\n background-color: #ffcdd2;\n}\n.mat-progress-bar.mat-warn .mat-progress-bar-fill::after {\n background-color: #f44336;\n}\n\n.mat-progress-spinner circle, .mat-spinner circle {\n stroke: #3f51b5;\n}\n.mat-progress-spinner.mat-accent circle, .mat-spinner.mat-accent circle {\n stroke: #448aff;\n}\n.mat-progress-spinner.mat-warn circle, .mat-spinner.mat-warn circle {\n stroke: #f44336;\n}\n\n.mat-radio-outer-circle {\n border-color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-radio-button.mat-primary.mat-radio-checked .mat-radio-outer-circle {\n border-color: #3f51b5;\n}\n.mat-radio-button.mat-primary .mat-radio-inner-circle,\n.mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .mat-radio-button.mat-primary.mat-radio-checked .mat-radio-persistent-ripple, .mat-radio-button.mat-primary:active .mat-radio-persistent-ripple {\n background-color: #3f51b5;\n}\n.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle {\n border-color: #448aff;\n}\n.mat-radio-button.mat-accent .mat-radio-inner-circle,\n.mat-radio-button.mat-accent .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .mat-radio-button.mat-accent.mat-radio-checked .mat-radio-persistent-ripple, .mat-radio-button.mat-accent:active .mat-radio-persistent-ripple {\n background-color: #448aff;\n}\n.mat-radio-button.mat-warn.mat-radio-checked .mat-radio-outer-circle {\n border-color: #f44336;\n}\n.mat-radio-button.mat-warn .mat-radio-inner-circle,\n.mat-radio-button.mat-warn .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .mat-radio-button.mat-warn.mat-radio-checked .mat-radio-persistent-ripple, .mat-radio-button.mat-warn:active .mat-radio-persistent-ripple {\n background-color: #f44336;\n}\n.mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-outer-circle,\n.mat-radio-button.mat-radio-disabled .mat-radio-outer-circle {\n border-color: rgba(0, 0, 0, 0.38);\n}\n.mat-radio-button.mat-radio-disabled .mat-radio-ripple .mat-ripple-element,\n.mat-radio-button.mat-radio-disabled .mat-radio-inner-circle {\n background-color: rgba(0, 0, 0, 0.38);\n}\n.mat-radio-button.mat-radio-disabled .mat-radio-label-content {\n color: rgba(0, 0, 0, 0.38);\n}\n.mat-radio-button .mat-ripple-element {\n background-color: black;\n}\n\n.mat-select-value {\n color: rgba(0, 0, 0, 0.87);\n}\n\n.mat-select-placeholder {\n color: rgba(0, 0, 0, 0.42);\n}\n\n.mat-select-disabled .mat-select-value {\n color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-select-arrow {\n color: rgba(0, 0, 0, 0.54);\n}\n\n.mat-select-panel {\n background: white;\n}\n.mat-select-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n.mat-select-panel .mat-option.mat-selected:not(.mat-option-multiple) {\n background: rgba(0, 0, 0, 0.12);\n}\n\n.mat-form-field.mat-focused.mat-primary .mat-select-arrow {\n color: #3f51b5;\n}\n.mat-form-field.mat-focused.mat-accent .mat-select-arrow {\n color: #448aff;\n}\n.mat-form-field.mat-focused.mat-warn .mat-select-arrow {\n color: #f44336;\n}\n.mat-form-field .mat-select.mat-select-invalid .mat-select-arrow {\n color: #f44336;\n}\n.mat-form-field .mat-select.mat-select-disabled .mat-select-arrow {\n color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-drawer-container {\n background-color: #fafafa;\n color: rgba(0, 0, 0, 0.87);\n}\n\n.mat-drawer {\n background-color: white;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-drawer.mat-drawer-push {\n background-color: white;\n}\n.mat-drawer:not(.mat-drawer-side) {\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\n}\n\n.mat-drawer-side {\n border-right: solid 1px rgba(0, 0, 0, 0.12);\n}\n.mat-drawer-side.mat-drawer-end {\n border-left: solid 1px rgba(0, 0, 0, 0.12);\n border-right: none;\n}\n\n[dir=rtl] .mat-drawer-side {\n border-left: solid 1px rgba(0, 0, 0, 0.12);\n border-right: none;\n}\n[dir=rtl] .mat-drawer-side.mat-drawer-end {\n border-left: none;\n border-right: solid 1px rgba(0, 0, 0, 0.12);\n}\n\n.mat-drawer-backdrop.mat-drawer-shown {\n background-color: rgba(0, 0, 0, 0.6);\n}\n\n.mat-slide-toggle.mat-checked .mat-slide-toggle-thumb {\n background-color: #448aff;\n}\n.mat-slide-toggle.mat-checked .mat-slide-toggle-bar {\n background-color: rgba(68, 138, 255, 0.54);\n}\n.mat-slide-toggle.mat-checked .mat-ripple-element {\n background-color: #448aff;\n}\n.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-thumb {\n background-color: #3f51b5;\n}\n.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-bar {\n background-color: rgba(63, 81, 181, 0.54);\n}\n.mat-slide-toggle.mat-primary.mat-checked .mat-ripple-element {\n background-color: #3f51b5;\n}\n.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-thumb {\n background-color: #f44336;\n}\n.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-bar {\n background-color: rgba(244, 67, 54, 0.54);\n}\n.mat-slide-toggle.mat-warn.mat-checked .mat-ripple-element {\n background-color: #f44336;\n}\n.mat-slide-toggle:not(.mat-checked) .mat-ripple-element {\n background-color: black;\n}\n\n.mat-slide-toggle-thumb {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n background-color: #fafafa;\n}\n\n.mat-slide-toggle-bar {\n background-color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-slider-track-background {\n background-color: rgba(0, 0, 0, 0.26);\n}\n\n.mat-primary .mat-slider-track-fill,\n.mat-primary .mat-slider-thumb,\n.mat-primary .mat-slider-thumb-label {\n background-color: #3f51b5;\n}\n.mat-primary .mat-slider-thumb-label-text {\n color: white;\n}\n\n.mat-accent .mat-slider-track-fill,\n.mat-accent .mat-slider-thumb,\n.mat-accent .mat-slider-thumb-label {\n background-color: #448aff;\n}\n.mat-accent .mat-slider-thumb-label-text {\n color: white;\n}\n\n.mat-warn .mat-slider-track-fill,\n.mat-warn .mat-slider-thumb,\n.mat-warn .mat-slider-thumb-label {\n background-color: #f44336;\n}\n.mat-warn .mat-slider-thumb-label-text {\n color: white;\n}\n\n.mat-slider-focus-ring {\n background-color: rgba(68, 138, 255, 0.2);\n}\n\n.mat-slider:hover .mat-slider-track-background,\n.cdk-focused .mat-slider-track-background {\n background-color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-slider-disabled .mat-slider-track-background,\n.mat-slider-disabled .mat-slider-track-fill,\n.mat-slider-disabled .mat-slider-thumb {\n background-color: rgba(0, 0, 0, 0.26);\n}\n.mat-slider-disabled:hover .mat-slider-track-background {\n background-color: rgba(0, 0, 0, 0.26);\n}\n\n.mat-slider-min-value .mat-slider-focus-ring {\n background-color: rgba(0, 0, 0, 0.12);\n}\n.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb,\n.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb-label {\n background-color: rgba(0, 0, 0, 0.87);\n}\n.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb,\n.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb-label {\n background-color: rgba(0, 0, 0, 0.26);\n}\n.mat-slider-min-value:not(.mat-slider-thumb-label-showing) .mat-slider-thumb {\n border-color: rgba(0, 0, 0, 0.26);\n background-color: transparent;\n}\n.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover .mat-slider-thumb, .mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused .mat-slider-thumb {\n border-color: rgba(0, 0, 0, 0.38);\n}\n.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover.mat-slider-disabled .mat-slider-thumb, .mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused.mat-slider-disabled .mat-slider-thumb {\n border-color: rgba(0, 0, 0, 0.26);\n}\n\n.mat-slider-has-ticks .mat-slider-wrapper::after {\n border-color: rgba(0, 0, 0, 0.7);\n}\n\n.mat-slider-horizontal .mat-slider-ticks {\n background-image: repeating-linear-gradient(to right, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent);\n background-image: -moz-repeating-linear-gradient(0.0001deg, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent);\n}\n\n.mat-slider-vertical .mat-slider-ticks {\n background-image: repeating-linear-gradient(to bottom, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent);\n}\n\n.mat-step-header.cdk-keyboard-focused, .mat-step-header.cdk-program-focused, .mat-step-header:hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n@media (hover: none) {\n .mat-step-header:hover {\n background: none;\n }\n}\n.mat-step-header .mat-step-label,\n.mat-step-header .mat-step-optional {\n color: rgba(0, 0, 0, 0.54);\n}\n.mat-step-header .mat-step-icon {\n background-color: rgba(0, 0, 0, 0.54);\n color: white;\n}\n.mat-step-header .mat-step-icon-selected,\n.mat-step-header .mat-step-icon-state-done,\n.mat-step-header .mat-step-icon-state-edit {\n background-color: #3f51b5;\n color: white;\n}\n.mat-step-header .mat-step-icon-state-error {\n background-color: transparent;\n color: #f44336;\n}\n.mat-step-header .mat-step-label.mat-step-label-active {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-step-header .mat-step-label.mat-step-label-error {\n color: #f44336;\n}\n\n.mat-stepper-horizontal, .mat-stepper-vertical {\n background-color: white;\n}\n\n.mat-stepper-vertical-line::before {\n border-left-color: rgba(0, 0, 0, 0.12);\n}\n\n.mat-horizontal-stepper-header::before,\n.mat-horizontal-stepper-header::after,\n.mat-stepper-horizontal-line {\n border-top-color: rgba(0, 0, 0, 0.12);\n}\n\n.mat-sort-header-arrow {\n color: #757575;\n}\n\n.mat-tab-nav-bar,\n.mat-tab-header {\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n}\n\n.mat-tab-group-inverted-header .mat-tab-nav-bar,\n.mat-tab-group-inverted-header .mat-tab-header {\n border-top: 1px solid rgba(0, 0, 0, 0.12);\n border-bottom: none;\n}\n\n.mat-tab-label, .mat-tab-link {\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-tab-label.mat-tab-disabled, .mat-tab-link.mat-tab-disabled {\n color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-tab-header-pagination-chevron {\n border-color: rgba(0, 0, 0, 0.87);\n}\n\n.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(0, 0, 0, 0.38);\n}\n\n.mat-tab-group[class*=mat-background-] .mat-tab-header,\n.mat-tab-nav-bar[class*=mat-background-] {\n border-bottom: none;\n border-top: none;\n}\n\n.mat-tab-group.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(197, 202, 233, 0.3);\n}\n.mat-tab-group.mat-primary .mat-ink-bar, .mat-tab-nav-bar.mat-primary .mat-ink-bar {\n background-color: #3f51b5;\n}\n.mat-tab-group.mat-primary.mat-background-primary .mat-ink-bar, .mat-tab-nav-bar.mat-primary.mat-background-primary .mat-ink-bar {\n background-color: white;\n}\n.mat-tab-group.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(130, 177, 255, 0.3);\n}\n.mat-tab-group.mat-accent .mat-ink-bar, .mat-tab-nav-bar.mat-accent .mat-ink-bar {\n background-color: #448aff;\n}\n.mat-tab-group.mat-accent.mat-background-accent .mat-ink-bar, .mat-tab-nav-bar.mat-accent.mat-background-accent .mat-ink-bar {\n background-color: white;\n}\n.mat-tab-group.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(255, 205, 210, 0.3);\n}\n.mat-tab-group.mat-warn .mat-ink-bar, .mat-tab-nav-bar.mat-warn .mat-ink-bar {\n background-color: #f44336;\n}\n.mat-tab-group.mat-warn.mat-background-warn .mat-ink-bar, .mat-tab-nav-bar.mat-warn.mat-background-warn .mat-ink-bar {\n background-color: white;\n}\n.mat-tab-group.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(197, 202, 233, 0.3);\n}\n.mat-tab-group.mat-background-primary .mat-tab-header, .mat-tab-group.mat-background-primary .mat-tab-links, .mat-tab-group.mat-background-primary .mat-tab-header-pagination, .mat-tab-nav-bar.mat-background-primary .mat-tab-header, .mat-tab-nav-bar.mat-background-primary .mat-tab-links, .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination {\n background-color: #3f51b5;\n}\n.mat-tab-group.mat-background-primary .mat-tab-label, .mat-tab-group.mat-background-primary .mat-tab-link, .mat-tab-nav-bar.mat-background-primary .mat-tab-label, .mat-tab-nav-bar.mat-background-primary .mat-tab-link {\n color: white;\n}\n.mat-tab-group.mat-background-primary .mat-tab-label.mat-tab-disabled, .mat-tab-group.mat-background-primary .mat-tab-link.mat-tab-disabled, .mat-tab-nav-bar.mat-background-primary .mat-tab-label.mat-tab-disabled, .mat-tab-nav-bar.mat-background-primary .mat-tab-link.mat-tab-disabled {\n color: rgba(255, 255, 255, 0.4);\n}\n.mat-tab-group.mat-background-primary .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-chevron {\n border-color: white;\n}\n.mat-tab-group.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(255, 255, 255, 0.4);\n}\n.mat-tab-group.mat-background-primary .mat-ripple-element, .mat-tab-nav-bar.mat-background-primary .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.mat-tab-group.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(130, 177, 255, 0.3);\n}\n.mat-tab-group.mat-background-accent .mat-tab-header, .mat-tab-group.mat-background-accent .mat-tab-links, .mat-tab-group.mat-background-accent .mat-tab-header-pagination, .mat-tab-nav-bar.mat-background-accent .mat-tab-header, .mat-tab-nav-bar.mat-background-accent .mat-tab-links, .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination {\n background-color: #448aff;\n}\n.mat-tab-group.mat-background-accent .mat-tab-label, .mat-tab-group.mat-background-accent .mat-tab-link, .mat-tab-nav-bar.mat-background-accent .mat-tab-label, .mat-tab-nav-bar.mat-background-accent .mat-tab-link {\n color: white;\n}\n.mat-tab-group.mat-background-accent .mat-tab-label.mat-tab-disabled, .mat-tab-group.mat-background-accent .mat-tab-link.mat-tab-disabled, .mat-tab-nav-bar.mat-background-accent .mat-tab-label.mat-tab-disabled, .mat-tab-nav-bar.mat-background-accent .mat-tab-link.mat-tab-disabled {\n color: rgba(255, 255, 255, 0.4);\n}\n.mat-tab-group.mat-background-accent .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-chevron {\n border-color: white;\n}\n.mat-tab-group.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(255, 255, 255, 0.4);\n}\n.mat-tab-group.mat-background-accent .mat-ripple-element, .mat-tab-nav-bar.mat-background-accent .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.mat-tab-group.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-group.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(255, 205, 210, 0.3);\n}\n.mat-tab-group.mat-background-warn .mat-tab-header, .mat-tab-group.mat-background-warn .mat-tab-links, .mat-tab-group.mat-background-warn .mat-tab-header-pagination, .mat-tab-nav-bar.mat-background-warn .mat-tab-header, .mat-tab-nav-bar.mat-background-warn .mat-tab-links, .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination {\n background-color: #f44336;\n}\n.mat-tab-group.mat-background-warn .mat-tab-label, .mat-tab-group.mat-background-warn .mat-tab-link, .mat-tab-nav-bar.mat-background-warn .mat-tab-label, .mat-tab-nav-bar.mat-background-warn .mat-tab-link {\n color: white;\n}\n.mat-tab-group.mat-background-warn .mat-tab-label.mat-tab-disabled, .mat-tab-group.mat-background-warn .mat-tab-link.mat-tab-disabled, .mat-tab-nav-bar.mat-background-warn .mat-tab-label.mat-tab-disabled, .mat-tab-nav-bar.mat-background-warn .mat-tab-link.mat-tab-disabled {\n color: rgba(255, 255, 255, 0.4);\n}\n.mat-tab-group.mat-background-warn .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-chevron {\n border-color: white;\n}\n.mat-tab-group.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(255, 255, 255, 0.4);\n}\n.mat-tab-group.mat-background-warn .mat-ripple-element, .mat-tab-nav-bar.mat-background-warn .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.12);\n}\n\n.mat-toolbar {\n background: whitesmoke;\n color: rgba(0, 0, 0, 0.87);\n}\n.mat-toolbar.mat-primary {\n background: #3f51b5;\n color: white;\n}\n.mat-toolbar.mat-accent {\n background: #448aff;\n color: white;\n}\n.mat-toolbar.mat-warn {\n background: #f44336;\n color: white;\n}\n.mat-toolbar .mat-form-field-underline,\n.mat-toolbar .mat-form-field-ripple,\n.mat-toolbar .mat-focused .mat-form-field-ripple {\n background-color: currentColor;\n}\n.mat-toolbar .mat-form-field-label,\n.mat-toolbar .mat-focused .mat-form-field-label,\n.mat-toolbar .mat-select-value,\n.mat-toolbar .mat-select-arrow,\n.mat-toolbar .mat-form-field.mat-focused .mat-select-arrow {\n color: inherit;\n}\n.mat-toolbar .mat-input-element {\n caret-color: currentColor;\n}\n\n.mat-tooltip {\n background: rgba(97, 97, 97, 0.9);\n}\n\n.mat-tree {\n background: white;\n}\n\n.mat-tree-node,\n.mat-nested-tree-node {\n color: rgba(0, 0, 0, 0.87);\n}\n\n.mat-snack-bar-container {\n color: rgba(255, 255, 255, 0.7);\n background: #323232;\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\n}\n\n.mat-simple-snackbar-action {\n color: #448aff;\n}\n\n/* You can add global styles to this file, and also import other style files */\n.dark-mode {\n color: white;\n}\n.dark-mode .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-option {\n color: white;\n}\n.dark-mode .mat-option:hover:not(.mat-option-disabled), .dark-mode .mat-option:focus:not(.mat-option-disabled) {\n background: rgba(255, 255, 255, 0.04);\n}\n.dark-mode .mat-option.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled) {\n background: rgba(255, 255, 255, 0.04);\n}\n.dark-mode .mat-option.mat-active {\n background: rgba(255, 255, 255, 0.04);\n color: white;\n}\n.dark-mode .mat-option.mat-option-disabled {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-primary .mat-option.mat-selected:not(.mat-option-disabled) {\n color: #00bcd4;\n}\n.dark-mode .mat-accent .mat-option.mat-selected:not(.mat-option-disabled) {\n color: #2979ff;\n}\n.dark-mode .mat-warn .mat-option.mat-selected:not(.mat-option-disabled) {\n color: #f44336;\n}\n.dark-mode .mat-optgroup-label {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-optgroup-disabled .mat-optgroup-label {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-pseudo-checkbox {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-pseudo-checkbox::after {\n color: #303030;\n}\n.dark-mode .mat-pseudo-checkbox-disabled {\n color: #686868;\n}\n.dark-mode .mat-primary .mat-pseudo-checkbox-checked,\n.dark-mode .mat-primary .mat-pseudo-checkbox-indeterminate {\n background: #00bcd4;\n}\n.dark-mode .mat-pseudo-checkbox-checked,\n.dark-mode .mat-pseudo-checkbox-indeterminate,\n.dark-mode .mat-accent .mat-pseudo-checkbox-checked,\n.dark-mode .mat-accent .mat-pseudo-checkbox-indeterminate {\n background: #2979ff;\n}\n.dark-mode .mat-warn .mat-pseudo-checkbox-checked,\n.dark-mode .mat-warn .mat-pseudo-checkbox-indeterminate {\n background: #f44336;\n}\n.dark-mode .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,\n.dark-mode .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled {\n background: #686868;\n}\n.dark-mode .mat-elevation-z0 {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z1 {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z2 {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z3 {\n box-shadow: 0px 3px 3px -2px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 0, 0, 0.14), 0px 1px 8px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z4 {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z5 {\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 5px 8px 0px rgba(0, 0, 0, 0.14), 0px 1px 14px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z6 {\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z7 {\n box-shadow: 0px 4px 5px -2px rgba(0, 0, 0, 0.2), 0px 7px 10px 1px rgba(0, 0, 0, 0.14), 0px 2px 16px 1px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z8 {\n box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z9 {\n box-shadow: 0px 5px 6px -3px rgba(0, 0, 0, 0.2), 0px 9px 12px 1px rgba(0, 0, 0, 0.14), 0px 3px 16px 2px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z10 {\n box-shadow: 0px 6px 6px -3px rgba(0, 0, 0, 0.2), 0px 10px 14px 1px rgba(0, 0, 0, 0.14), 0px 4px 18px 3px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z11 {\n box-shadow: 0px 6px 7px -4px rgba(0, 0, 0, 0.2), 0px 11px 15px 1px rgba(0, 0, 0, 0.14), 0px 4px 20px 3px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z12 {\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z13 {\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 13px 19px 2px rgba(0, 0, 0, 0.14), 0px 5px 24px 4px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z14 {\n box-shadow: 0px 7px 9px -4px rgba(0, 0, 0, 0.2), 0px 14px 21px 2px rgba(0, 0, 0, 0.14), 0px 5px 26px 4px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z15 {\n box-shadow: 0px 8px 9px -5px rgba(0, 0, 0, 0.2), 0px 15px 22px 2px rgba(0, 0, 0, 0.14), 0px 6px 28px 5px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z16 {\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z17 {\n box-shadow: 0px 8px 11px -5px rgba(0, 0, 0, 0.2), 0px 17px 26px 2px rgba(0, 0, 0, 0.14), 0px 6px 32px 5px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z18 {\n box-shadow: 0px 9px 11px -5px rgba(0, 0, 0, 0.2), 0px 18px 28px 2px rgba(0, 0, 0, 0.14), 0px 7px 34px 6px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z19 {\n box-shadow: 0px 9px 12px -6px rgba(0, 0, 0, 0.2), 0px 19px 29px 2px rgba(0, 0, 0, 0.14), 0px 7px 36px 6px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z20 {\n box-shadow: 0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 20px 31px 3px rgba(0, 0, 0, 0.14), 0px 8px 38px 7px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z21 {\n box-shadow: 0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 21px 33px 3px rgba(0, 0, 0, 0.14), 0px 8px 40px 7px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z22 {\n box-shadow: 0px 10px 14px -6px rgba(0, 0, 0, 0.2), 0px 22px 35px 3px rgba(0, 0, 0, 0.14), 0px 8px 42px 7px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z23 {\n box-shadow: 0px 11px 14px -7px rgba(0, 0, 0, 0.2), 0px 23px 36px 3px rgba(0, 0, 0, 0.14), 0px 9px 44px 8px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-elevation-z24 {\n box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-app-background, .dark-mode.mat-app-background {\n background-color: #303030;\n color: white;\n}\n.mat-theme-loaded-marker {\n display: none;\n}\n\n.dark-mode .mat-autocomplete-panel {\n background: #424242;\n color: white;\n}\n.dark-mode .mat-autocomplete-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover) {\n background: #424242;\n}\n.dark-mode .mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover):not(.mat-option-disabled) {\n color: white;\n}\n.dark-mode .mat-badge-content {\n color: white;\n background: #00bcd4;\n}\n.cdk-high-contrast-active .dark-mode .mat-badge-content {\n outline: solid 1px;\n border-radius: 0;\n}\n\n.dark-mode .mat-badge-accent .mat-badge-content {\n background: #2979ff;\n color: white;\n}\n.dark-mode .mat-badge-warn .mat-badge-content {\n color: white;\n background: #f44336;\n}\n.dark-mode .mat-badge {\n position: relative;\n}\n.dark-mode .mat-badge-hidden .mat-badge-content {\n display: none;\n}\n.dark-mode .mat-badge-disabled .mat-badge-content {\n background: #6e6e6e;\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-badge-content {\n position: absolute;\n text-align: center;\n display: inline-block;\n border-radius: 50%;\n transition: transform 200ms ease-in-out;\n transform: scale(0.6);\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n pointer-events: none;\n}\n.dark-mode .ng-animate-disabled .mat-badge-content,\n.dark-mode .mat-badge-content._mat-animation-noopable {\n transition: none;\n}\n.dark-mode .mat-badge-content.mat-badge-active {\n transform: none;\n}\n.dark-mode .mat-badge-small .mat-badge-content {\n width: 16px;\n height: 16px;\n line-height: 16px;\n}\n.dark-mode .mat-badge-small.mat-badge-above .mat-badge-content {\n top: -8px;\n}\n.dark-mode .mat-badge-small.mat-badge-below .mat-badge-content {\n bottom: -8px;\n}\n.dark-mode .mat-badge-small.mat-badge-before .mat-badge-content {\n left: -16px;\n}\n[dir=rtl] .dark-mode .mat-badge-small.mat-badge-before .mat-badge-content {\n left: auto;\n right: -16px;\n}\n.dark-mode .mat-badge-small.mat-badge-after .mat-badge-content {\n right: -16px;\n}\n[dir=rtl] .dark-mode .mat-badge-small.mat-badge-after .mat-badge-content {\n right: auto;\n left: -16px;\n}\n.dark-mode .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: -8px;\n}\n[dir=rtl] .dark-mode .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: auto;\n right: -8px;\n}\n.dark-mode .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: -8px;\n}\n[dir=rtl] .dark-mode .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: auto;\n left: -8px;\n}\n.dark-mode .mat-badge-medium .mat-badge-content {\n width: 22px;\n height: 22px;\n line-height: 22px;\n}\n.dark-mode .mat-badge-medium.mat-badge-above .mat-badge-content {\n top: -11px;\n}\n.dark-mode .mat-badge-medium.mat-badge-below .mat-badge-content {\n bottom: -11px;\n}\n.dark-mode .mat-badge-medium.mat-badge-before .mat-badge-content {\n left: -22px;\n}\n[dir=rtl] .dark-mode .mat-badge-medium.mat-badge-before .mat-badge-content {\n left: auto;\n right: -22px;\n}\n.dark-mode .mat-badge-medium.mat-badge-after .mat-badge-content {\n right: -22px;\n}\n[dir=rtl] .dark-mode .mat-badge-medium.mat-badge-after .mat-badge-content {\n right: auto;\n left: -22px;\n}\n.dark-mode .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: -11px;\n}\n[dir=rtl] .dark-mode .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: auto;\n right: -11px;\n}\n.dark-mode .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: -11px;\n}\n[dir=rtl] .dark-mode .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: auto;\n left: -11px;\n}\n.dark-mode .mat-badge-large .mat-badge-content {\n width: 28px;\n height: 28px;\n line-height: 28px;\n}\n.dark-mode .mat-badge-large.mat-badge-above .mat-badge-content {\n top: -14px;\n}\n.dark-mode .mat-badge-large.mat-badge-below .mat-badge-content {\n bottom: -14px;\n}\n.dark-mode .mat-badge-large.mat-badge-before .mat-badge-content {\n left: -28px;\n}\n[dir=rtl] .dark-mode .mat-badge-large.mat-badge-before .mat-badge-content {\n left: auto;\n right: -28px;\n}\n.dark-mode .mat-badge-large.mat-badge-after .mat-badge-content {\n right: -28px;\n}\n[dir=rtl] .dark-mode .mat-badge-large.mat-badge-after .mat-badge-content {\n right: auto;\n left: -28px;\n}\n.dark-mode .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: -14px;\n}\n[dir=rtl] .dark-mode .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content {\n left: auto;\n right: -14px;\n}\n.dark-mode .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: -14px;\n}\n[dir=rtl] .dark-mode .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content {\n right: auto;\n left: -14px;\n}\n.dark-mode .mat-bottom-sheet-container {\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\n background: #424242;\n color: white;\n}\n.dark-mode .mat-button, .dark-mode .mat-icon-button, .dark-mode .mat-stroked-button {\n color: inherit;\n background: transparent;\n}\n.dark-mode .mat-button.mat-primary, .dark-mode .mat-icon-button.mat-primary, .dark-mode .mat-stroked-button.mat-primary {\n color: #00bcd4;\n}\n.dark-mode .mat-button.mat-accent, .dark-mode .mat-icon-button.mat-accent, .dark-mode .mat-stroked-button.mat-accent {\n color: #2979ff;\n}\n.dark-mode .mat-button.mat-warn, .dark-mode .mat-icon-button.mat-warn, .dark-mode .mat-stroked-button.mat-warn {\n color: #f44336;\n}\n.dark-mode .mat-button.mat-primary[disabled], .dark-mode .mat-button.mat-accent[disabled], .dark-mode .mat-button.mat-warn[disabled], .dark-mode .mat-button[disabled][disabled], .dark-mode .mat-icon-button.mat-primary[disabled], .dark-mode .mat-icon-button.mat-accent[disabled], .dark-mode .mat-icon-button.mat-warn[disabled], .dark-mode .mat-icon-button[disabled][disabled], .dark-mode .mat-stroked-button.mat-primary[disabled], .dark-mode .mat-stroked-button.mat-accent[disabled], .dark-mode .mat-stroked-button.mat-warn[disabled], .dark-mode .mat-stroked-button[disabled][disabled] {\n color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-button.mat-primary .mat-button-focus-overlay, .dark-mode .mat-icon-button.mat-primary .mat-button-focus-overlay, .dark-mode .mat-stroked-button.mat-primary .mat-button-focus-overlay {\n background-color: #00bcd4;\n}\n.dark-mode .mat-button.mat-accent .mat-button-focus-overlay, .dark-mode .mat-icon-button.mat-accent .mat-button-focus-overlay, .dark-mode .mat-stroked-button.mat-accent .mat-button-focus-overlay {\n background-color: #2979ff;\n}\n.dark-mode .mat-button.mat-warn .mat-button-focus-overlay, .dark-mode .mat-icon-button.mat-warn .mat-button-focus-overlay, .dark-mode .mat-stroked-button.mat-warn .mat-button-focus-overlay {\n background-color: #f44336;\n}\n.dark-mode .mat-button[disabled] .mat-button-focus-overlay, .dark-mode .mat-icon-button[disabled] .mat-button-focus-overlay, .dark-mode .mat-stroked-button[disabled] .mat-button-focus-overlay {\n background-color: transparent;\n}\n.dark-mode .mat-button .mat-ripple-element, .dark-mode .mat-icon-button .mat-ripple-element, .dark-mode .mat-stroked-button .mat-ripple-element {\n opacity: 0.1;\n background-color: currentColor;\n}\n.dark-mode .mat-button-focus-overlay {\n background: white;\n}\n.dark-mode .mat-stroked-button:not([disabled]) {\n border-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-flat-button, .dark-mode .mat-raised-button, .dark-mode .mat-fab, .dark-mode .mat-mini-fab {\n color: white;\n background-color: #424242;\n}\n.dark-mode .mat-flat-button.mat-primary, .dark-mode .mat-raised-button.mat-primary, .dark-mode .mat-fab.mat-primary, .dark-mode .mat-mini-fab.mat-primary {\n color: white;\n}\n.dark-mode .mat-flat-button.mat-accent, .dark-mode .mat-raised-button.mat-accent, .dark-mode .mat-fab.mat-accent, .dark-mode .mat-mini-fab.mat-accent {\n color: white;\n}\n.dark-mode .mat-flat-button.mat-warn, .dark-mode .mat-raised-button.mat-warn, .dark-mode .mat-fab.mat-warn, .dark-mode .mat-mini-fab.mat-warn {\n color: white;\n}\n.dark-mode .mat-flat-button.mat-primary[disabled], .dark-mode .mat-flat-button.mat-accent[disabled], .dark-mode .mat-flat-button.mat-warn[disabled], .dark-mode .mat-flat-button[disabled][disabled], .dark-mode .mat-raised-button.mat-primary[disabled], .dark-mode .mat-raised-button.mat-accent[disabled], .dark-mode .mat-raised-button.mat-warn[disabled], .dark-mode .mat-raised-button[disabled][disabled], .dark-mode .mat-fab.mat-primary[disabled], .dark-mode .mat-fab.mat-accent[disabled], .dark-mode .mat-fab.mat-warn[disabled], .dark-mode .mat-fab[disabled][disabled], .dark-mode .mat-mini-fab.mat-primary[disabled], .dark-mode .mat-mini-fab.mat-accent[disabled], .dark-mode .mat-mini-fab.mat-warn[disabled], .dark-mode .mat-mini-fab[disabled][disabled] {\n color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-flat-button.mat-primary, .dark-mode .mat-raised-button.mat-primary, .dark-mode .mat-fab.mat-primary, .dark-mode .mat-mini-fab.mat-primary {\n background-color: #00bcd4;\n}\n.dark-mode .mat-flat-button.mat-accent, .dark-mode .mat-raised-button.mat-accent, .dark-mode .mat-fab.mat-accent, .dark-mode .mat-mini-fab.mat-accent {\n background-color: #2979ff;\n}\n.dark-mode .mat-flat-button.mat-warn, .dark-mode .mat-raised-button.mat-warn, .dark-mode .mat-fab.mat-warn, .dark-mode .mat-mini-fab.mat-warn {\n background-color: #f44336;\n}\n.dark-mode .mat-flat-button.mat-primary[disabled], .dark-mode .mat-flat-button.mat-accent[disabled], .dark-mode .mat-flat-button.mat-warn[disabled], .dark-mode .mat-flat-button[disabled][disabled], .dark-mode .mat-raised-button.mat-primary[disabled], .dark-mode .mat-raised-button.mat-accent[disabled], .dark-mode .mat-raised-button.mat-warn[disabled], .dark-mode .mat-raised-button[disabled][disabled], .dark-mode .mat-fab.mat-primary[disabled], .dark-mode .mat-fab.mat-accent[disabled], .dark-mode .mat-fab.mat-warn[disabled], .dark-mode .mat-fab[disabled][disabled], .dark-mode .mat-mini-fab.mat-primary[disabled], .dark-mode .mat-mini-fab.mat-accent[disabled], .dark-mode .mat-mini-fab.mat-warn[disabled], .dark-mode .mat-mini-fab[disabled][disabled] {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-flat-button.mat-primary .mat-ripple-element, .dark-mode .mat-raised-button.mat-primary .mat-ripple-element, .dark-mode .mat-fab.mat-primary .mat-ripple-element, .dark-mode .mat-mini-fab.mat-primary .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-flat-button.mat-accent .mat-ripple-element, .dark-mode .mat-raised-button.mat-accent .mat-ripple-element, .dark-mode .mat-fab.mat-accent .mat-ripple-element, .dark-mode .mat-mini-fab.mat-accent .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-flat-button.mat-warn .mat-ripple-element, .dark-mode .mat-raised-button.mat-warn .mat-ripple-element, .dark-mode .mat-fab.mat-warn .mat-ripple-element, .dark-mode .mat-mini-fab.mat-warn .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-stroked-button:not([class*=mat-elevation-z]), .dark-mode .mat-flat-button:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-raised-button:not([class*=mat-elevation-z]) {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-raised-button:not([disabled]):active:not([class*=mat-elevation-z]) {\n box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-raised-button[disabled]:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-fab:not([class*=mat-elevation-z]), .dark-mode .mat-mini-fab:not([class*=mat-elevation-z]) {\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-fab:not([disabled]):active:not([class*=mat-elevation-z]), .dark-mode .mat-mini-fab:not([disabled]):active:not([class*=mat-elevation-z]) {\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-fab[disabled]:not([class*=mat-elevation-z]), .dark-mode .mat-mini-fab[disabled]:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-button-toggle-standalone,\n.dark-mode .mat-button-toggle-group {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\n.dark-mode .mat-button-toggle-group-appearance-standard {\n box-shadow: none;\n}\n.dark-mode .mat-button-toggle {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-button-toggle .mat-button-toggle-focus-overlay {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-button-toggle-appearance-standard {\n color: white;\n background: #424242;\n}\n.dark-mode .mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay {\n background-color: white;\n}\n.dark-mode .mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\n border-left: solid 1px rgba(255, 255, 255, 0.12);\n}\n.dark-mode [dir=rtl] .mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\n border-left: none;\n border-right: solid 1px rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle + .mat-button-toggle {\n border-left: none;\n border-right: none;\n border-top: solid 1px rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-button-toggle-checked {\n background-color: #212121;\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-button-toggle-checked.mat-button-toggle-appearance-standard {\n color: white;\n}\n.dark-mode .mat-button-toggle-disabled {\n color: rgba(255, 255, 255, 0.3);\n background-color: black;\n}\n.dark-mode .mat-button-toggle-disabled.mat-button-toggle-appearance-standard {\n background: #424242;\n}\n.dark-mode .mat-button-toggle-disabled.mat-button-toggle-checked {\n background-color: #424242;\n}\n.dark-mode .mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\n.dark-mode .mat-button-toggle-group-appearance-standard {\n border: solid 1px rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-card {\n background: #424242;\n color: white;\n}\n.dark-mode .mat-card:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-card.mat-card-flat:not([class*=mat-elevation-z]) {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-card-subtitle {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-checkbox-frame {\n border-color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-checkbox-checkmark {\n fill: #303030;\n}\n.dark-mode .mat-checkbox-checkmark-path {\n stroke: #303030 !important;\n}\n.dark-mode .mat-checkbox-mixedmark {\n background-color: #303030;\n}\n.dark-mode .mat-checkbox-indeterminate.mat-primary .mat-checkbox-background, .dark-mode .mat-checkbox-checked.mat-primary .mat-checkbox-background {\n background-color: #00bcd4;\n}\n.dark-mode .mat-checkbox-indeterminate.mat-accent .mat-checkbox-background, .dark-mode .mat-checkbox-checked.mat-accent .mat-checkbox-background {\n background-color: #2979ff;\n}\n.dark-mode .mat-checkbox-indeterminate.mat-warn .mat-checkbox-background, .dark-mode .mat-checkbox-checked.mat-warn .mat-checkbox-background {\n background-color: #f44336;\n}\n.dark-mode .mat-checkbox-disabled.mat-checkbox-checked .mat-checkbox-background, .dark-mode .mat-checkbox-disabled.mat-checkbox-indeterminate .mat-checkbox-background {\n background-color: #686868;\n}\n.dark-mode .mat-checkbox-disabled:not(.mat-checkbox-checked) .mat-checkbox-frame {\n border-color: #686868;\n}\n.dark-mode .mat-checkbox-disabled .mat-checkbox-label {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-checkbox .mat-ripple-element {\n background-color: white;\n}\n.dark-mode .mat-checkbox-checked:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element,\n.dark-mode .mat-checkbox:active:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element {\n background: #00bcd4;\n}\n.dark-mode .mat-checkbox-checked:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element,\n.dark-mode .mat-checkbox:active:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element {\n background: #2979ff;\n}\n.dark-mode .mat-checkbox-checked:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element,\n.dark-mode .mat-checkbox:active:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element {\n background: #f44336;\n}\n.dark-mode .mat-chip.mat-standard-chip {\n background-color: #616161;\n color: white;\n}\n.dark-mode .mat-chip.mat-standard-chip .mat-chip-remove {\n color: white;\n opacity: 0.4;\n}\n.dark-mode .mat-chip.mat-standard-chip:not(.mat-chip-disabled):active {\n box-shadow: 0px 3px 3px -2px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 0, 0, 0.14), 0px 1px 8px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-chip.mat-standard-chip:not(.mat-chip-disabled) .mat-chip-remove:hover {\n opacity: 0.54;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-disabled {\n opacity: 0.4;\n}\n.dark-mode .mat-chip.mat-standard-chip::after {\n background: white;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-primary {\n background-color: #00bcd4;\n color: white;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-chip-remove {\n color: white;\n opacity: 0.4;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-warn {\n background-color: #f44336;\n color: white;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-chip-remove {\n color: white;\n opacity: 0.4;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-accent {\n background-color: #2979ff;\n color: white;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-chip-remove {\n color: white;\n opacity: 0.4;\n}\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-table {\n background: #424242;\n}\n.dark-mode .mat-table thead, .dark-mode .mat-table tbody, .dark-mode .mat-table tfoot,\n.dark-mode mat-header-row, .dark-mode mat-row, .dark-mode mat-footer-row,\n.dark-mode [mat-header-row], .dark-mode [mat-row], .dark-mode [mat-footer-row],\n.dark-mode .mat-table-sticky {\n background: inherit;\n}\n.dark-mode mat-row, .dark-mode mat-header-row, .dark-mode mat-footer-row,\n.dark-mode th.mat-header-cell, .dark-mode td.mat-cell, .dark-mode td.mat-footer-cell {\n border-bottom-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-header-cell {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-cell, .dark-mode .mat-footer-cell {\n color: white;\n}\n.dark-mode .mat-calendar-arrow {\n border-top-color: white;\n}\n.dark-mode .mat-datepicker-toggle,\n.dark-mode .mat-datepicker-content .mat-calendar-next-button,\n.dark-mode .mat-datepicker-content .mat-calendar-previous-button {\n color: white;\n}\n.dark-mode .mat-calendar-table-header {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-calendar-table-header-divider::after {\n background: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-calendar-body-label {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-calendar-body-cell-content {\n color: white;\n border-color: transparent;\n}\n.dark-mode .mat-calendar-body-disabled > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected),\n.dark-mode .cdk-keyboard-focused .mat-calendar-body-active > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected),\n.dark-mode .cdk-program-focused .mat-calendar-body-active > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\n background-color: rgba(255, 255, 255, 0.04);\n}\n.dark-mode .mat-calendar-body-today:not(.mat-calendar-body-selected) {\n border-color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-calendar-body-disabled > .mat-calendar-body-today:not(.mat-calendar-body-selected) {\n border-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-calendar-body-selected {\n background-color: #00bcd4;\n color: white;\n}\n.dark-mode .mat-calendar-body-disabled > .mat-calendar-body-selected {\n background-color: rgba(0, 188, 212, 0.4);\n}\n.dark-mode .mat-calendar-body-today.mat-calendar-body-selected {\n box-shadow: inset 0 0 0 1px white;\n}\n.dark-mode .mat-datepicker-content {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n background-color: #424242;\n color: white;\n}\n.dark-mode .mat-datepicker-content.mat-accent .mat-calendar-body-selected {\n background-color: #2979ff;\n color: white;\n}\n.dark-mode .mat-datepicker-content.mat-accent .mat-calendar-body-disabled > .mat-calendar-body-selected {\n background-color: rgba(41, 121, 255, 0.4);\n}\n.dark-mode .mat-datepicker-content.mat-accent .mat-calendar-body-today.mat-calendar-body-selected {\n box-shadow: inset 0 0 0 1px white;\n}\n.dark-mode .mat-datepicker-content.mat-warn .mat-calendar-body-selected {\n background-color: #f44336;\n color: white;\n}\n.dark-mode .mat-datepicker-content.mat-warn .mat-calendar-body-disabled > .mat-calendar-body-selected {\n background-color: rgba(244, 67, 54, 0.4);\n}\n.dark-mode .mat-datepicker-content.mat-warn .mat-calendar-body-today.mat-calendar-body-selected {\n box-shadow: inset 0 0 0 1px white;\n}\n.dark-mode .mat-datepicker-content-touch {\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-datepicker-toggle-active {\n color: #00bcd4;\n}\n.dark-mode .mat-datepicker-toggle-active.mat-accent {\n color: #2979ff;\n}\n.dark-mode .mat-datepicker-toggle-active.mat-warn {\n color: #f44336;\n}\n.dark-mode .mat-dialog-container {\n box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12);\n background: #424242;\n color: white;\n}\n.dark-mode .mat-divider {\n border-top-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-divider-vertical {\n border-right-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-expansion-panel {\n background: #424242;\n color: white;\n}\n.dark-mode .mat-expansion-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-action-row {\n border-top-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-expansion-panel .mat-expansion-panel-header.cdk-keyboard-focused:not([aria-disabled=true]), .dark-mode .mat-expansion-panel .mat-expansion-panel-header.cdk-program-focused:not([aria-disabled=true]), .dark-mode .mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover:not([aria-disabled=true]) {\n background: rgba(255, 255, 255, 0.04);\n}\n@media (hover: none) {\n .dark-mode .mat-expansion-panel:not(.mat-expanded):not([aria-disabled=true]) .mat-expansion-panel-header:hover {\n background: #424242;\n }\n}\n.dark-mode .mat-expansion-panel-header-title {\n color: white;\n}\n.dark-mode .mat-expansion-panel-header-description,\n.dark-mode .mat-expansion-indicator::after {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-expansion-panel-header[aria-disabled=true] {\n color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title,\n.dark-mode .mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description {\n color: inherit;\n}\n.dark-mode .mat-form-field-label {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-hint {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-form-field.mat-focused .mat-form-field-label {\n color: #00bcd4;\n}\n.dark-mode .mat-form-field.mat-focused .mat-form-field-label.mat-accent {\n color: #2979ff;\n}\n.dark-mode .mat-form-field.mat-focused .mat-form-field-label.mat-warn {\n color: #f44336;\n}\n.dark-mode .mat-focused .mat-form-field-required-marker {\n color: #2979ff;\n}\n.dark-mode .mat-form-field-ripple {\n background-color: white;\n}\n.dark-mode .mat-form-field.mat-focused .mat-form-field-ripple {\n background-color: #00bcd4;\n}\n.dark-mode .mat-form-field.mat-focused .mat-form-field-ripple.mat-accent {\n background-color: #2979ff;\n}\n.dark-mode .mat-form-field.mat-focused .mat-form-field-ripple.mat-warn {\n background-color: #f44336;\n}\n.dark-mode .mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid) .mat-form-field-infix::after {\n color: #00bcd4;\n}\n.dark-mode .mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-accent .mat-form-field-infix::after {\n color: #2979ff;\n}\n.dark-mode .mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-warn .mat-form-field-infix::after {\n color: #f44336;\n}\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-label {\n color: #f44336;\n}\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-label.mat-accent,\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-label .mat-form-field-required-marker {\n color: #f44336;\n}\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-ripple,\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-ripple.mat-accent {\n background-color: #f44336;\n}\n.dark-mode .mat-error {\n color: #f44336;\n}\n.dark-mode .mat-form-field-appearance-legacy .mat-form-field-label {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-form-field-appearance-legacy .mat-hint {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-form-field-appearance-legacy .mat-form-field-underline {\n background-color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline {\n background-image: linear-gradient(to right, rgba(255, 255, 255, 0.7) 0%, rgba(255, 255, 255, 0.7) 33%, transparent 0%);\n background-size: 4px 100%;\n background-repeat: repeat-x;\n}\n.dark-mode .mat-form-field-appearance-standard .mat-form-field-underline {\n background-color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline {\n background-image: linear-gradient(to right, rgba(255, 255, 255, 0.7) 0%, rgba(255, 255, 255, 0.7) 33%, transparent 0%);\n background-size: 4px 100%;\n background-repeat: repeat-x;\n}\n.dark-mode .mat-form-field-appearance-fill .mat-form-field-flex {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dark-mode .mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-flex {\n background-color: rgba(255, 255, 255, 0.05);\n}\n.dark-mode .mat-form-field-appearance-fill .mat-form-field-underline::before {\n background-color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-label {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-underline::before {\n background-color: transparent;\n}\n.dark-mode .mat-form-field-appearance-outline .mat-form-field-outline {\n color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-form-field-appearance-outline .mat-form-field-outline-thick {\n color: white;\n}\n.dark-mode .mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick {\n color: #00bcd4;\n}\n.dark-mode .mat-form-field-appearance-outline.mat-focused.mat-accent .mat-form-field-outline-thick {\n color: #2979ff;\n}\n.dark-mode .mat-form-field-appearance-outline.mat-focused.mat-warn .mat-form-field-outline-thick {\n color: #f44336;\n}\n.dark-mode .mat-form-field-appearance-outline.mat-form-field-invalid.mat-form-field-invalid .mat-form-field-outline-thick {\n color: #f44336;\n}\n.dark-mode .mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-label {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline {\n color: rgba(255, 255, 255, 0.15);\n}\n.dark-mode .mat-icon.mat-primary {\n color: #00bcd4;\n}\n.dark-mode .mat-icon.mat-accent {\n color: #2979ff;\n}\n.dark-mode .mat-icon.mat-warn {\n color: #f44336;\n}\n.dark-mode .mat-form-field-type-mat-native-select .mat-form-field-infix::after {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-input-element:disabled,\n.dark-mode .mat-form-field-type-mat-native-select.mat-form-field-disabled .mat-form-field-infix::after {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-input-element {\n caret-color: #00bcd4;\n}\n.dark-mode .mat-input-element::placeholder {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-input-element::-moz-placeholder {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-input-element::-webkit-input-placeholder {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-input-element:-ms-input-placeholder {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-input-element option {\n color: rgba(0, 0, 0, 0.87);\n}\n.dark-mode .mat-input-element option:disabled {\n color: rgba(0, 0, 0, 0.38);\n}\n.dark-mode .mat-accent .mat-input-element {\n caret-color: #2979ff;\n}\n.dark-mode .mat-warn .mat-input-element,\n.dark-mode .mat-form-field-invalid .mat-input-element {\n caret-color: #f44336;\n}\n.dark-mode .mat-form-field-type-mat-native-select.mat-form-field-invalid .mat-form-field-infix::after {\n color: #f44336;\n}\n.dark-mode .mat-list-base .mat-list-item {\n color: white;\n}\n.dark-mode .mat-list-base .mat-list-option {\n color: white;\n}\n.dark-mode .mat-list-base .mat-subheader {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-list-item-disabled {\n background-color: black;\n}\n.dark-mode .mat-list-option:hover, .dark-mode .mat-list-option:focus,\n.dark-mode .mat-nav-list .mat-list-item:hover,\n.dark-mode .mat-nav-list .mat-list-item:focus,\n.dark-mode .mat-action-list .mat-list-item:hover,\n.dark-mode .mat-action-list .mat-list-item:focus {\n background: rgba(255, 255, 255, 0.04);\n}\n.dark-mode .mat-list-single-selected-option, .dark-mode .mat-list-single-selected-option:hover, .dark-mode .mat-list-single-selected-option:focus {\n background: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-menu-panel {\n background: #424242;\n}\n.dark-mode .mat-menu-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-menu-item {\n background: transparent;\n color: white;\n}\n.dark-mode .mat-menu-item[disabled], .dark-mode .mat-menu-item[disabled]::after {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-menu-item .mat-icon-no-color,\n.dark-mode .mat-menu-item-submenu-trigger::after {\n color: white;\n}\n.dark-mode .mat-menu-item:hover:not([disabled]),\n.dark-mode .mat-menu-item.cdk-program-focused:not([disabled]),\n.dark-mode .mat-menu-item.cdk-keyboard-focused:not([disabled]),\n.dark-mode .mat-menu-item-highlighted:not([disabled]) {\n background: rgba(255, 255, 255, 0.04);\n}\n.dark-mode .mat-paginator {\n background: #424242;\n}\n.dark-mode .mat-paginator,\n.dark-mode .mat-paginator-page-size .mat-select-trigger {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-paginator-decrement,\n.dark-mode .mat-paginator-increment {\n border-top: 2px solid white;\n border-right: 2px solid white;\n}\n.dark-mode .mat-paginator-first,\n.dark-mode .mat-paginator-last {\n border-top: 2px solid white;\n}\n.dark-mode .mat-icon-button[disabled] .mat-paginator-decrement,\n.dark-mode .mat-icon-button[disabled] .mat-paginator-increment,\n.dark-mode .mat-icon-button[disabled] .mat-paginator-first,\n.dark-mode .mat-icon-button[disabled] .mat-paginator-last {\n border-color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-progress-bar-background {\n fill: #b2ebf2;\n}\n.dark-mode .mat-progress-bar-buffer {\n background-color: #b2ebf2;\n}\n.dark-mode .mat-progress-bar-fill::after {\n background-color: #00bcd4;\n}\n.dark-mode .mat-progress-bar.mat-accent .mat-progress-bar-background {\n fill: #82b1ff;\n}\n.dark-mode .mat-progress-bar.mat-accent .mat-progress-bar-buffer {\n background-color: #82b1ff;\n}\n.dark-mode .mat-progress-bar.mat-accent .mat-progress-bar-fill::after {\n background-color: #2979ff;\n}\n.dark-mode .mat-progress-bar.mat-warn .mat-progress-bar-background {\n fill: #ffcdd2;\n}\n.dark-mode .mat-progress-bar.mat-warn .mat-progress-bar-buffer {\n background-color: #ffcdd2;\n}\n.dark-mode .mat-progress-bar.mat-warn .mat-progress-bar-fill::after {\n background-color: #f44336;\n}\n.dark-mode .mat-progress-spinner circle, .dark-mode .mat-spinner circle {\n stroke: #00bcd4;\n}\n.dark-mode .mat-progress-spinner.mat-accent circle, .dark-mode .mat-spinner.mat-accent circle {\n stroke: #2979ff;\n}\n.dark-mode .mat-progress-spinner.mat-warn circle, .dark-mode .mat-spinner.mat-warn circle {\n stroke: #f44336;\n}\n.dark-mode .mat-radio-outer-circle {\n border-color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-radio-button.mat-primary.mat-radio-checked .mat-radio-outer-circle {\n border-color: #00bcd4;\n}\n.dark-mode .mat-radio-button.mat-primary .mat-radio-inner-circle,\n.dark-mode .mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .dark-mode .mat-radio-button.mat-primary.mat-radio-checked .mat-radio-persistent-ripple, .dark-mode .mat-radio-button.mat-primary:active .mat-radio-persistent-ripple {\n background-color: #00bcd4;\n}\n.dark-mode .mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle {\n border-color: #2979ff;\n}\n.dark-mode .mat-radio-button.mat-accent .mat-radio-inner-circle,\n.dark-mode .mat-radio-button.mat-accent .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .dark-mode .mat-radio-button.mat-accent.mat-radio-checked .mat-radio-persistent-ripple, .dark-mode .mat-radio-button.mat-accent:active .mat-radio-persistent-ripple {\n background-color: #2979ff;\n}\n.dark-mode .mat-radio-button.mat-warn.mat-radio-checked .mat-radio-outer-circle {\n border-color: #f44336;\n}\n.dark-mode .mat-radio-button.mat-warn .mat-radio-inner-circle,\n.dark-mode .mat-radio-button.mat-warn .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .dark-mode .mat-radio-button.mat-warn.mat-radio-checked .mat-radio-persistent-ripple, .dark-mode .mat-radio-button.mat-warn:active .mat-radio-persistent-ripple {\n background-color: #f44336;\n}\n.dark-mode .mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-outer-circle,\n.dark-mode .mat-radio-button.mat-radio-disabled .mat-radio-outer-circle {\n border-color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-radio-button.mat-radio-disabled .mat-radio-ripple .mat-ripple-element,\n.dark-mode .mat-radio-button.mat-radio-disabled .mat-radio-inner-circle {\n background-color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-radio-button.mat-radio-disabled .mat-radio-label-content {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-radio-button .mat-ripple-element {\n background-color: white;\n}\n.dark-mode .mat-select-value {\n color: white;\n}\n.dark-mode .mat-select-placeholder {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-select-disabled .mat-select-value {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-select-arrow {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-select-panel {\n background: #424242;\n}\n.dark-mode .mat-select-panel:not([class*=mat-elevation-z]) {\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-select-panel .mat-option.mat-selected:not(.mat-option-multiple) {\n background: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-form-field.mat-focused.mat-primary .mat-select-arrow {\n color: #00bcd4;\n}\n.dark-mode .mat-form-field.mat-focused.mat-accent .mat-select-arrow {\n color: #2979ff;\n}\n.dark-mode .mat-form-field.mat-focused.mat-warn .mat-select-arrow {\n color: #f44336;\n}\n.dark-mode .mat-form-field .mat-select.mat-select-invalid .mat-select-arrow {\n color: #f44336;\n}\n.dark-mode .mat-form-field .mat-select.mat-select-disabled .mat-select-arrow {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-drawer-container {\n background-color: #303030;\n color: white;\n}\n.dark-mode .mat-drawer {\n background-color: #424242;\n color: white;\n}\n.dark-mode .mat-drawer.mat-drawer-push {\n background-color: #424242;\n}\n.dark-mode .mat-drawer:not(.mat-drawer-side) {\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-drawer-side {\n border-right: solid 1px rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-drawer-side.mat-drawer-end {\n border-left: solid 1px rgba(255, 255, 255, 0.12);\n border-right: none;\n}\n.dark-mode [dir=rtl] .mat-drawer-side {\n border-left: solid 1px rgba(255, 255, 255, 0.12);\n border-right: none;\n}\n.dark-mode [dir=rtl] .mat-drawer-side.mat-drawer-end {\n border-left: none;\n border-right: solid 1px rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-drawer-backdrop.mat-drawer-shown {\n background-color: rgba(189, 189, 189, 0.6);\n}\n.dark-mode .mat-slide-toggle.mat-checked .mat-slide-toggle-thumb {\n background-color: #2979ff;\n}\n.dark-mode .mat-slide-toggle.mat-checked .mat-slide-toggle-bar {\n background-color: rgba(41, 121, 255, 0.54);\n}\n.dark-mode .mat-slide-toggle.mat-checked .mat-ripple-element {\n background-color: #2979ff;\n}\n.dark-mode .mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-thumb {\n background-color: #00bcd4;\n}\n.dark-mode .mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-bar {\n background-color: rgba(0, 188, 212, 0.54);\n}\n.dark-mode .mat-slide-toggle.mat-primary.mat-checked .mat-ripple-element {\n background-color: #00bcd4;\n}\n.dark-mode .mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-thumb {\n background-color: #f44336;\n}\n.dark-mode .mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-bar {\n background-color: rgba(244, 67, 54, 0.54);\n}\n.dark-mode .mat-slide-toggle.mat-warn.mat-checked .mat-ripple-element {\n background-color: #f44336;\n}\n.dark-mode .mat-slide-toggle:not(.mat-checked) .mat-ripple-element {\n background-color: white;\n}\n.dark-mode .mat-slide-toggle-thumb {\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n background-color: #bdbdbd;\n}\n.dark-mode .mat-slide-toggle-bar {\n background-color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-slider-track-background {\n background-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-primary .mat-slider-track-fill,\n.dark-mode .mat-primary .mat-slider-thumb,\n.dark-mode .mat-primary .mat-slider-thumb-label {\n background-color: #00bcd4;\n}\n.dark-mode .mat-primary .mat-slider-thumb-label-text {\n color: white;\n}\n.dark-mode .mat-accent .mat-slider-track-fill,\n.dark-mode .mat-accent .mat-slider-thumb,\n.dark-mode .mat-accent .mat-slider-thumb-label {\n background-color: #2979ff;\n}\n.dark-mode .mat-accent .mat-slider-thumb-label-text {\n color: white;\n}\n.dark-mode .mat-warn .mat-slider-track-fill,\n.dark-mode .mat-warn .mat-slider-thumb,\n.dark-mode .mat-warn .mat-slider-thumb-label {\n background-color: #f44336;\n}\n.dark-mode .mat-warn .mat-slider-thumb-label-text {\n color: white;\n}\n.dark-mode .mat-slider-focus-ring {\n background-color: rgba(41, 121, 255, 0.2);\n}\n.dark-mode .mat-slider:hover .mat-slider-track-background,\n.dark-mode .cdk-focused .mat-slider-track-background {\n background-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-slider-disabled .mat-slider-track-background,\n.dark-mode .mat-slider-disabled .mat-slider-track-fill,\n.dark-mode .mat-slider-disabled .mat-slider-thumb {\n background-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-slider-disabled:hover .mat-slider-track-background {\n background-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-slider-min-value .mat-slider-focus-ring {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb,\n.dark-mode .mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb-label {\n background-color: white;\n}\n.dark-mode .mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb,\n.dark-mode .mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb-label {\n background-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing) .mat-slider-thumb {\n border-color: rgba(255, 255, 255, 0.3);\n background-color: transparent;\n}\n.dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover .mat-slider-thumb, .dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused .mat-slider-thumb {\n border-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover.mat-slider-disabled .mat-slider-thumb, .dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused.mat-slider-disabled .mat-slider-thumb {\n border-color: rgba(255, 255, 255, 0.3);\n}\n.dark-mode .mat-slider-has-ticks .mat-slider-wrapper::after {\n border-color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-slider-horizontal .mat-slider-ticks {\n background-image: repeating-linear-gradient(to right, rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0.7) 2px, transparent 0, transparent);\n background-image: -moz-repeating-linear-gradient(0.0001deg, rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0.7) 2px, transparent 0, transparent);\n}\n.dark-mode .mat-slider-vertical .mat-slider-ticks {\n background-image: repeating-linear-gradient(to bottom, rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0.7) 2px, transparent 0, transparent);\n}\n.dark-mode .mat-step-header.cdk-keyboard-focused, .dark-mode .mat-step-header.cdk-program-focused, .dark-mode .mat-step-header:hover {\n background-color: rgba(255, 255, 255, 0.04);\n}\n@media (hover: none) {\n .dark-mode .mat-step-header:hover {\n background: none;\n }\n}\n.dark-mode .mat-step-header .mat-step-label,\n.dark-mode .mat-step-header .mat-step-optional {\n color: rgba(255, 255, 255, 0.7);\n}\n.dark-mode .mat-step-header .mat-step-icon {\n background-color: rgba(255, 255, 255, 0.7);\n color: white;\n}\n.dark-mode .mat-step-header .mat-step-icon-selected,\n.dark-mode .mat-step-header .mat-step-icon-state-done,\n.dark-mode .mat-step-header .mat-step-icon-state-edit {\n background-color: #00bcd4;\n color: white;\n}\n.dark-mode .mat-step-header .mat-step-icon-state-error {\n background-color: transparent;\n color: #f44336;\n}\n.dark-mode .mat-step-header .mat-step-label.mat-step-label-active {\n color: white;\n}\n.dark-mode .mat-step-header .mat-step-label.mat-step-label-error {\n color: #f44336;\n}\n.dark-mode .mat-stepper-horizontal, .dark-mode .mat-stepper-vertical {\n background-color: #424242;\n}\n.dark-mode .mat-stepper-vertical-line::before {\n border-left-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-horizontal-stepper-header::before,\n.dark-mode .mat-horizontal-stepper-header::after,\n.dark-mode .mat-stepper-horizontal-line {\n border-top-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-sort-header-arrow {\n color: #c6c6c6;\n}\n.dark-mode .mat-tab-nav-bar,\n.dark-mode .mat-tab-header {\n border-bottom: 1px solid rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-tab-group-inverted-header .mat-tab-nav-bar,\n.dark-mode .mat-tab-group-inverted-header .mat-tab-header {\n border-top: 1px solid rgba(255, 255, 255, 0.12);\n border-bottom: none;\n}\n.dark-mode .mat-tab-label, .dark-mode .mat-tab-link {\n color: white;\n}\n.dark-mode .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-link.mat-tab-disabled {\n color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-tab-header-pagination-chevron {\n border-color: white;\n}\n.dark-mode .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(255, 255, 255, 0.5);\n}\n.dark-mode .mat-tab-group[class*=mat-background-] .mat-tab-header,\n.dark-mode .mat-tab-nav-bar[class*=mat-background-] {\n border-bottom: none;\n border-top: none;\n}\n.dark-mode .mat-tab-group.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(178, 235, 242, 0.3);\n}\n.dark-mode .mat-tab-group.mat-primary .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-primary .mat-ink-bar {\n background-color: #00bcd4;\n}\n.dark-mode .mat-tab-group.mat-primary.mat-background-primary .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-primary.mat-background-primary .mat-ink-bar {\n background-color: white;\n}\n.dark-mode .mat-tab-group.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(130, 177, 255, 0.3);\n}\n.dark-mode .mat-tab-group.mat-accent .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-accent .mat-ink-bar {\n background-color: #2979ff;\n}\n.dark-mode .mat-tab-group.mat-accent.mat-background-accent .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-accent.mat-background-accent .mat-ink-bar {\n background-color: white;\n}\n.dark-mode .mat-tab-group.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(255, 205, 210, 0.3);\n}\n.dark-mode .mat-tab-group.mat-warn .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-warn .mat-ink-bar {\n background-color: #f44336;\n}\n.dark-mode .mat-tab-group.mat-warn.mat-background-warn .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-warn.mat-background-warn .mat-ink-bar {\n background-color: white;\n}\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(178, 235, 242, 0.3);\n}\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-header, .dark-mode .mat-tab-group.mat-background-primary .mat-tab-links, .dark-mode .mat-tab-group.mat-background-primary .mat-tab-header-pagination, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-header, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-links, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination {\n background-color: #00bcd4;\n}\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-label, .dark-mode .mat-tab-group.mat-background-primary .mat-tab-link, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-label, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-link {\n color: white;\n}\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-group.mat-background-primary .mat-tab-link.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-link.mat-tab-disabled {\n color: rgba(255, 255, 255, 0.4);\n}\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-chevron {\n border-color: white;\n}\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(255, 255, 255, 0.4);\n}\n.dark-mode .mat-tab-group.mat-background-primary .mat-ripple-element, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(130, 177, 255, 0.3);\n}\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-header, .dark-mode .mat-tab-group.mat-background-accent .mat-tab-links, .dark-mode .mat-tab-group.mat-background-accent .mat-tab-header-pagination, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-header, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-links, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination {\n background-color: #2979ff;\n}\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-label, .dark-mode .mat-tab-group.mat-background-accent .mat-tab-link, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-label, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-link {\n color: white;\n}\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-group.mat-background-accent .mat-tab-link.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-link.mat-tab-disabled {\n color: rgba(255, 255, 255, 0.4);\n}\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-chevron {\n border-color: white;\n}\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(255, 255, 255, 0.4);\n}\n.dark-mode .mat-tab-group.mat-background-accent .mat-ripple-element, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\n.dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\n background-color: rgba(255, 205, 210, 0.3);\n}\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-header, .dark-mode .mat-tab-group.mat-background-warn .mat-tab-links, .dark-mode .mat-tab-group.mat-background-warn .mat-tab-header-pagination, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-header, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-links, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination {\n background-color: #f44336;\n}\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-label, .dark-mode .mat-tab-group.mat-background-warn .mat-tab-link, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-label, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-link {\n color: white;\n}\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-group.mat-background-warn .mat-tab-link.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-link.mat-tab-disabled {\n color: rgba(255, 255, 255, 0.4);\n}\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-chevron {\n border-color: white;\n}\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: rgba(255, 255, 255, 0.4);\n}\n.dark-mode .mat-tab-group.mat-background-warn .mat-ripple-element, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-ripple-element {\n background-color: rgba(255, 255, 255, 0.12);\n}\n.dark-mode .mat-toolbar {\n background: #212121;\n color: white;\n}\n.dark-mode .mat-toolbar.mat-primary {\n background: #00bcd4;\n color: white;\n}\n.dark-mode .mat-toolbar.mat-accent {\n background: #2979ff;\n color: white;\n}\n.dark-mode .mat-toolbar.mat-warn {\n background: #f44336;\n color: white;\n}\n.dark-mode .mat-toolbar .mat-form-field-underline,\n.dark-mode .mat-toolbar .mat-form-field-ripple,\n.dark-mode .mat-toolbar .mat-focused .mat-form-field-ripple {\n background-color: currentColor;\n}\n.dark-mode .mat-toolbar .mat-form-field-label,\n.dark-mode .mat-toolbar .mat-focused .mat-form-field-label,\n.dark-mode .mat-toolbar .mat-select-value,\n.dark-mode .mat-toolbar .mat-select-arrow,\n.dark-mode .mat-toolbar .mat-form-field.mat-focused .mat-select-arrow {\n color: inherit;\n}\n.dark-mode .mat-toolbar .mat-input-element {\n caret-color: currentColor;\n}\n.dark-mode .mat-tooltip {\n background: rgba(97, 97, 97, 0.9);\n}\n.dark-mode .mat-tree {\n background: #424242;\n}\n.dark-mode .mat-tree-node,\n.dark-mode .mat-nested-tree-node {\n color: white;\n}\n.dark-mode .mat-snack-bar-container {\n color: rgba(0, 0, 0, 0.87);\n background: #fafafa;\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\n}\n.dark-mode .mat-simple-snackbar-action {\n color: inherit;\n}\n\n.mat-stroked-button.mat-black {\n border: solid black 1px;\n border-radius: 0;\n display: flex;\n align-items: center;\n height: 2em;\n padding-left: 2.5em;\n padding-right: 2.5em;\n}\n.mat-stroked-button.mat-black .mat-button-wrapper {\n font-weight: normal;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n color: black;\n}\n\n.mat-stroked-button.mat-coachmark {\n border: solid #6f4d00 1px;\n border-radius: 0;\n display: flex;\n align-items: center;\n height: 2em;\n padding-left: 2.5em;\n padding-right: 2.5em;\n}\n.mat-stroked-button.mat-coachmark .mat-button-wrapper {\n font-weight: normal;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n color: #6f4d00;\n}\n\n.mat-stroked-button.mat-blue-coachmark {\n border: solid #1B1B19 1px;\n border-radius: 0;\n display: flex;\n align-items: center;\n height: 2em;\n padding-left: 2.5em;\n padding-right: 2.5em;\n}\n.mat-stroked-button.mat-blue-coachmark .mat-button-wrapper {\n font-weight: normal;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n color: #1B1B19;\n}\n\nhtml,\nbody {\n height: 100%;\n width: 100%;\n}\n\nbody {\n background-color: #fff;\n}\n\n.app,\nbody {\n font-family: \"Helvetica Neue\", \"Helvetica\", Arial, sans-serif;\n font-weight: 300;\n}\n\n.app {\n position: absolute;\n}\n\nhtml,\nbody {\n margin: 0;\n padding: 0;\n font-size: 16px;\n}\n\n.app {\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n}\n\n* {\n font-family: \"Helvetica Neue\", \"Helvetica\", Arial, sans-serif;\n box-sizing: border-box;\n}\n\n.center {\n position: absolute;\n top: 50%;\n left: 50%;\n -webkit-transform: translate(-50%, -50%);\n -ms-transform: translate(-50%, -50%);\n transform: translate(-50%, -50%);\n margin: auto;\n}\n\n.loading {\n display: inline-block;\n padding: 1.5em;\n border-radius: 1em;\n color: #000;\n font-size: 10mm;\n text-align: center;\n}\n\n.bounce,\n.bounce .circle,\n.bounce .circle .inner {\n height: 4em;\n width: 4em;\n border-radius: 100%;\n}\n\n.bounce .circle {\n -webkit-animation: sk-scaleout 0.8s infinite ease-in-out;\n animation: sk-scaleout 0.8s infinite ease-in-out;\n}\n\n.bounce .circle .inner {\n background-color: #000;\n}\n\n@-webkit-keyframes sk-scaleout {\n 0% {\n -webkit-transform: scale(0);\n }\n 20% {\n opacity: 1;\n }\n 100% {\n -webkit-transform: scale(1);\n opacity: 0;\n }\n}\n@keyframes sk-scaleout {\n 0% {\n -webkit-transform: scale(0);\n transform: scale(0);\n }\n 20% {\n opacity: 1;\n }\n 100% {\n -webkit-transform: scale(1);\n transform: scale(1);\n opacity: 0;\n }\n}\n.no-script {\n height: 10em;\n width: 15em;\n padding: 0.5em 1em;\n background-color: #FFF;\n border-radius: 0.1em;\n box-shadow: 0 0.1em 0.2em 0.1em rgba(0, 0, 0, 0.2);\n text-align: center;\n position: absolute;\n top: 1em;\n left: 50%;\n transform: translateX(-50%);\n}\n\n.no-script img {\n border-radius: 0.2em;\n height: 6em;\n width: 6em;\n}\n\n.no-script .title {\n padding: 0 1em;\n font-style: italic;\n font-size: 1.2em;\n}\n\n.no-script .content {\n display: flex;\n}\n\n.aca-coin {\n position: relative;\n height: 4em;\n width: 4em;\n padding: 0.5em;\n margin: 0.5em;\n border-radius: 100%;\n background-color: #dd3d5e;\n animation: coin-spin 2s infinite ease-in-out;\n}\n\n.aca-logo {\n height: 3em;\n width: 3em;\n background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDIwMDEwOTA0Ly9FTiIKICJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy1TVkctMjAwMTA5MDQvRFREL3N2ZzEwLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4wIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiB3aWR0aD0iNzc5LjAwMDAwMHB0IiBoZWlnaHQ9IjMyNC4wMDAwMDBwdCIgdmlld0JveD0iMCAwIDc3OS4wMDAwMDAgMzI0LjAwMDAwMCIKIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiPgo8bWV0YWRhdGE+CkNyZWF0ZWQgYnkgcG90cmFjZSAxLjE0LCB3cml0dGVuIGJ5IFBldGVyIFNlbGluZ2VyIDIwMDEtMjAxNwo8L21ldGFkYXRhPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjAwMDAwMCwzMjQuMDAwMDAwKSBzY2FsZSgwLjEwMDAwMCwtMC4xMDAwMDApIgpmaWxsPSIjZmZmIiBzdHJva2U9Im5vbmUiPgo8cGF0aCBkPSJNNDAwNSAzMjI4IGMtNDQ3IC0yNSAtODM5IC0yMzUgLTExMDkgLTU5NiAtMzE5IC00MjYgLTQxMSAtMTE0NQotMjE2IC0xNjk3IDE2NyAtNDcxIDU0OSAtODAzIDEwMzcgLTkwMiAxMTEgLTIzIDUwNSAtMjYgNjIzIC01IDEyNyAyMyAyODAgNjIKMzgyIDk5IGw5OCAzNSAwIDEwNSBjMCA5NiAtMiAxMDUgLTE3IDEwMCAtMTAgLTMgLTU3IC0yMiAtMTA2IC00MSAtMTkzIC04MAotMzczIC0xMTEgLTYzNyAtMTExIC0yNzQgMCAtNDAxIDI3IC01OTcgMTI5IC0xMTYgNjAgLTE5OSAxMjQgLTMwMyAyMzMgLTE3MgoxNzggLTI3NiAzODggLTMyNSA2NTYgLTM2IDE5NSAtMzYgNTA4IDAgNzAzIDEwMSA1NTUgNDY2IDk1MiA5ODIgMTA3MCA5MyAyMQo0MTUgMzAgNTI1IDE1IDEyNCAtMTggMjc2IC01NiAzNzkgLTk2IDUwIC0xOSA5MyAtMzUgOTUgLTM1IDIgMCA0IDUyIDQgMTE1CmwwIDExNCAtODcgMjcgYy0yMjggNjkgLTQ2OSA5NyAtNzI4IDgyeiIvPgo8cGF0aCBkPSJNNTkxIDE2MzMgYy0zMjEgLTg1MSAtNTg2IC0xNTU0IC01ODkgLTE1NjEgLTMgLTkgMjQgLTEyIDExNiAtMTIKbDEyMCAwIDYwIDE2MiBjMzMgOTAgMTEzIDMwOCAxNzggNDg2IGwxMTkgMzIyIDY3NSAwIDY3NSAwIDEwNCAtMjgyIGM1NyAtMTU2CjEzNyAtMzc0IDE3OCAtNDg2IGw3NSAtMjAyIDExOSAwIGM4OSAwIDExOSAzIDExOCAxMyAwIDYgLTI2MCA3MDcgLTU3NyAxNTU3CmwtNTc3IDE1NDUgLTEwNSAzIC0xMDYgMyAtNTgzIC0xNTQ4eiIvPgo8cGF0aCBkPSJNNjQwNSAzMTYzIGMtMzggLTk5IC0xMTU5IC0zMDcyIC0xMTYzIC0zMDg2IC00IC0xNSA2IC0xNyAxMTQgLTE3CmwxMTkgMCAxMDQgMjgzIGM1NyAxNTUgMTM3IDM3MyAxNzggNDg1IGw3NSAyMDIgNjc2IC0yIDY3NiAtMyAxNzYgLTQ4MCAxNzcKLTQ4MCAxMjIgLTMgMTIzIC0zIC04IDIzIGMtNCAxMiAtMjY0IDcxMyAtNTc5IDE1NTggbC01NzMgMTUzNSAtMTA1IDMgYy05MyAyCi0xMDUgMSAtMTEyIC0xNXoiLz4KPC9nPgo8L3N2Zz4K);\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n}\n\n@keyframes coin-spin {\n 0% {\n transform: rotateY(0deg) translateY(0%);\n }\n 49% {\n transform: rotateY(179deg) translateY(20%);\n }\n 50% {\n transform: rotateY(181deg) translateY(20%);\n }\n 100% {\n transform: rotateY(359deg) translateY(0%);\n }\n}\n.shadow {\n position: absolute;\n bottom: 0;\n left: 50%;\n animation: floating-shadow 2s infinite ease-in-out;\n width: 48px;\n height: 6px;\n background-color: rgba(0, 0, 0, 0.2);\n border-radius: 100%;\n}\n\n@keyframes floating-shadow {\n 0% {\n transform: translateX(-50%) scale(1);\n }\n 45% {\n transform: translateX(-50%) scale(1.3);\n }\n 55% {\n transform: translateX(-50%) scale(1.3);\n }\n 100% {\n transform: translateX(-50%) scale(1);\n }\n}\nhtml, body {\n height: 100%;\n}\n\nbody {\n margin: 0;\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.yellow-snackbar {\n background: #ffd149;\n color: rgba(0, 0, 0, 0.9);\n text-align: center;\n}\n.yellow-snackbar span {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.sub app-map-controls > div mck-legend-dropdown {\n position: relative;\n top: -6px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .sub app-map-controls > div .map-info-button {\n display: none !important;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .sub app-map-controls > div .map-info-button {\n display: none !important;\n }\n}\n\n.mck-modal-backdrop {\n background-color: rgba(5, 28, 44, 0.85);\n}\n\n.pulsate {\n animation: pulsate 2s ease-out;\n animation-iteration-count: infinite;\n opacity: 0.3;\n}\n\n@keyframes pulsate {\n 0% {\n opacity: 0.3;\n }\n 50% {\n opacity: 1;\n }\n 100% {\n opacity: 0.3;\n }\n}\n.mat-form-field-invalid .mat-form-field-outline > div, .mat-form-field-invalid .mat-form-field-outline-thick > div {\n border-color: #f44336 !important;\n}\n\n.mck-toggle {\n position: relative;\n}\n.mck-toggle .mat-slide-toggle-thumb {\n height: 0.875rem;\n width: 0.875rem;\n border-radius: 50%;\n}\n.mck-toggle .mat-slide-toggle-thumb-container {\n top: 0.2rem;\n left: 0.2rem;\n}\n.mck-toggle .mat-slide-toggle-bar {\n position: relative;\n width: 2.5rem;\n height: 1.25rem;\n flex-shrink: 0;\n border-radius: 1.25rem;\n background-color: #d0d0d0;\n}\n.mck-toggle .mat-slide-toggle-bar .mat-slide-toggle-ripple {\n top: calc(50% - 23px);\n}\n.mck-toggle.mat-checked .mat-slide-toggle-thumb-container {\n left: 0.42rem;\n}\n.mck-toggle.mat-checked .mat-slide-toggle-thumb {\n background-color: white;\n}\n.mck-toggle.mat-checked .mat-slide-toggle-bar {\n background-color: #2152fe;\n}\n\n.mck-chevron-icon svg {\n transform: rotate(180deg);\n transition: transform 0.5s ease;\n}\n.mck-chevron-icon.turn-up svg {\n transform: rotate(0deg);\n}\n\n.mat-tab-label {\n padding: 0 6px 0 2px !important;\n min-width: auto !important;\n margin-right: 40px;\n font-family: \"McKinsey Sans\";\n font-size: 20px;\n font-weight: 400;\n color: #333333;\n opacity: 1 !important;\n}\n.mat-tab-label.mat-tab-label-active .mat-tab-label-content {\n color: #2251FF;\n}\n.mat-tab-label .mat-tab-label-content {\n color: #333333;\n padding-bottom: 20px;\n}\n\n.mat-tab-group.mat-primary .mat-ink-bar, .mat-tab-nav-bar.mat-primary .mat-ink-bar {\n background-color: #2251FF;\n height: 4px;\n}\n\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .mck-tab .mat-tab-header {\n transform: scale(0.65) !important;\n width: 100vw;\n display: block;\n position: relative;\n left: -19%;\n }\n .mck-tab .mat-tab-header .mat-tab-header-pagination {\n display: none;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .mck-tab .mat-tab-header {\n transform: scale(0.65) !important;\n width: 100vw;\n display: block;\n position: relative;\n left: -19%;\n }\n .mck-tab .mat-tab-header .mat-tab-header-pagination {\n display: none;\n }\n}\n.status {\n background: #fff;\n color: #000;\n}\n.status.tentative, .status.pending, .status.requested {\n background: #FFF3CE;\n color: #6A4F00;\n}\n.status.accepted {\n background: #D1F4DD;\n color: #006200;\n}\n.status.approved {\n background: #D1F4DD;\n color: #006200;\n}\n.status.expired {\n background: #F0F0F0;\n color: #757575;\n}\n.status.declined, .status.cancelled {\n background: #FFE5EA;\n color: #B0001D;\n}\n\n.banner {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 26px;\n box-sizing: border-box;\n}\n.banner .banner-text {\n width: calc(100% - 50px);\n padding: 0 20px;\n box-sizing: border-box;\n font-weight: 500;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n margin: 0;\n text-align: left;\n}\n.banner img:last-child {\n cursor: pointer;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .banner {\n align-items: end;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .banner {\n align-items: end;\n }\n}\n.banner.advise {\n background-color: #EBEBF6;\n justify-content: start !important;\n border: 1px solid rgba(106, 79, 0, 0.11);\n}\n.banner.advise .banner-text {\n color: #1B1B19;\n}\n.banner.info {\n background-color: #E6ECFF;\n}\n.banner.info .banner-text {\n color: #1E32E6;\n}\n.banner.warning {\n background-color: #fdf1f3;\n}\n.banner.warning .banner-text {\n color: #B0001D;\n}\n.banner.fixed {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n z-index: 5;\n}\n\n.fullpage-modal {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 3;\n background-color: #f8f9fa;\n}\n.fullpage-modal .header {\n z-index: 1;\n}\n\n.coachmark {\n margin-top: 0;\n position: relative;\n top: -6px;\n font-family: \"McKinsey Sans\";\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n line-height: 20px;\n color: #333333;\n}\n\n.bottom-panel-buttons {\n position: fixed;\n bottom: 0;\n width: 100%;\n min-height: 80px;\n background-color: white;\n border: 1px solid #E6E6E6;\n z-index: 1002;\n}\n.bottom-panel-buttons .buttons {\n padding: 24px 16px;\n border: none;\n background-color: transparent;\n max-width: 684px;\n margin: 0 auto;\n display: flex;\n}\n.bottom-panel-buttons .buttons button {\n flex: 1;\n height: 48px;\n font-size: 16px;\n max-width: 332px;\n}\n.bottom-panel-buttons .buttons button:nth-child(1) {\n margin-right: 5px;\n border: 1px solid #D0D0D0;\n}\n.bottom-panel-buttons .buttons button:nth-child(2) {\n margin-left: 5px;\n}\n@media only screen and (orientation: portrait) and (max-width: 450px) {\n .bottom-panel-buttons .buttons {\n padding: 16px 0;\n }\n .bottom-panel-buttons .buttons button {\n margin: 0 16px;\n }\n .bottom-panel-buttons .buttons button:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel-buttons .buttons button:nth-child(2) {\n margin-left: 8px;\n }\n}\n@media only screen and (orientation: landscape) and (max-width: 800px) {\n .bottom-panel-buttons .buttons {\n padding: 16px 0;\n }\n .bottom-panel-buttons .buttons button {\n margin: 0 16px;\n }\n .bottom-panel-buttons .buttons button:nth-child(1) {\n margin-right: 8px;\n }\n .bottom-panel-buttons .buttons button:nth-child(2) {\n margin-left: 8px;\n }\n}\n\n.modal_mask {\n width: 100vw;\n height: 100vh;\n position: fixed;\n top: 0;\n left: 0;\n background-color: white;\n z-index: 3;\n}\n\n.mat-snack-bar-container {\n width: 380px;\n height: 100%;\n color: #333333;\n background: #fff;\n font-size: 14px;\n font-weight: 500;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\";\n}","// Import all the theming functionality.\n// We want overlays to always appear over user content, so set a baseline\n// very high z-index for the overlay container, which is where we create the new\n// stacking context for all overlays.\n$cdk-z-index-overlay-container: 1000 !default;\n$cdk-z-index-overlay: 1000 !default;\n$cdk-z-index-overlay-backdrop: 1000 !default;\n\n// Background color for all of the backdrops\n$cdk-overlay-dark-backdrop-background: rgba(0, 0, 0, 0.32) !default;\n\n// Default backdrop animation is based on the Material Design swift-ease-out.\n$backdrop-animation-duration: 400ms !default;\n$backdrop-animation-timing-function: cubic-bezier(0.25, 0.8, 0.25, 1) !default;\n\n\n@mixin cdk-overlay() {\n .cdk-overlay-container, .cdk-global-overlay-wrapper {\n // Disable events from being captured on the overlay container.\n pointer-events: none;\n\n // The container should be the size of the viewport.\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n }\n\n // The overlay-container is an invisible element which contains all individual overlays.\n .cdk-overlay-container {\n position: fixed;\n z-index: $cdk-z-index-overlay-container;\n\n &:empty {\n // Hide the element when it doesn't have any child nodes. This doesn't\n // include overlays that have been detached, rather than disposed.\n display: none;\n }\n }\n\n // We use an extra wrapper element in order to use make the overlay itself a flex item.\n // This makes centering the overlay easy without running into the subpixel rendering\n // problems tied to using `transform` and without interfering with the other position\n // strategies.\n .cdk-global-overlay-wrapper {\n display: flex;\n position: absolute;\n z-index: $cdk-z-index-overlay;\n }\n\n // A single overlay pane.\n .cdk-overlay-pane {\n // Note: it's important for this one to start off `absolute`,\n // in order for us to be able to measure it correctly.\n position: absolute;\n pointer-events: auto;\n box-sizing: border-box;\n z-index: $cdk-z-index-overlay;\n\n // For connected-position overlays, we set `display: flex` in\n // order to force `max-width` and `max-height` to take effect.\n display: flex;\n max-width: 100%;\n max-height: 100%;\n }\n\n .cdk-overlay-backdrop {\n // TODO(jelbourn): reuse sidenav fullscreen mixin.\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n\n z-index: $cdk-z-index-overlay-backdrop;\n pointer-events: auto;\n -webkit-tap-highlight-color: transparent;\n transition: opacity $backdrop-animation-duration $backdrop-animation-timing-function;\n opacity: 0;\n\n &.cdk-overlay-backdrop-showing {\n opacity: 1;\n\n // In high contrast mode the rgba background will become solid so we need to fall back\n // to making it opaque using `opacity`. Note that we can't use the `cdk-high-contrast`\n // mixin, because we can't normalize the import path to the _a11y.scss both for the\n // source and when this file is distributed. See #10908.\n @media screen and (-ms-high-contrast: active) {\n opacity: 0.6;\n }\n }\n }\n\n .cdk-overlay-dark-backdrop {\n background: $cdk-overlay-dark-backdrop-background;\n }\n\n .cdk-overlay-transparent-backdrop {\n // Note: as of Firefox 57, having the backdrop be `background: none` will prevent it from\n // capturing the user's mouse scroll events. Since we also can't use something like\n // `rgba(0, 0, 0, 0)`, we work around the inconsistency by not setting the background at\n // all and using `opacity` to make the element transparent.\n &, &.cdk-overlay-backdrop-showing {\n opacity: 0;\n }\n }\n\n // Overlay parent element used with the connected position strategy. Used to constrain the\n // overlay element's size to fit within the viewport.\n .cdk-overlay-connected-position-bounding-box {\n position: absolute;\n z-index: $cdk-z-index-overlay;\n\n // We use `display: flex` on this element exclusively for centering connected overlays.\n // When *not* centering, a top/left/bottom/right will be set which overrides the normal\n // flex layout.\n display: flex;\n\n // We use the `column` direction here to avoid some flexbox issues in Edge\n // when using the \"grow after open\" options.\n flex-direction: column;\n\n // Add some dimensions so the element has an `innerText` which some people depend on in tests.\n min-width: 1px;\n min-height: 1px;\n }\n\n // Used when disabling global scrolling.\n .cdk-global-scrollblock {\n position: fixed;\n\n // Necessary for the content not to lose its width. Note that we're using 100%, instead of\n // 100vw, because 100vw includes the width plus the scrollbar, whereas 100% is the width\n // that the element had before we made it `fixed`.\n width: 100%;\n\n // Note: this will always add a scrollbar to whatever element it is on, which can\n // potentially result in double scrollbars. It shouldn't be an issue, because we won't\n // block scrolling on a page that doesn't have a scrollbar in the first place.\n overflow-y: scroll;\n }\n}\n\n@mixin cdk-a11y {\n .cdk-visually-hidden {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n\n // Avoid browsers rendering the focus ring in some cases.\n outline: 0;\n\n // Avoid some cases where the browser will still render the native controls (see #9049).\n -webkit-appearance: none;\n -moz-appearance: none;\n }\n}\n\n/// Emits the mixin's content nested under `$selector-context` if `$selector-context`\n/// is non-empty.\n/// @param selector-context The selector under which to nest the mixin's content.\n@mixin _cdk-optionally-nest-content($selector-context) {\n @if ($selector-context == '') {\n @content;\n }\n @else {\n #{$selector-context} {\n @content;\n }\n }\n}\n\n/// Applies styles for users in high contrast mode. Note that this only applies\n/// to Microsoft browsers. Chrome can be included by checking for the `html[hc]`\n/// attribute, however Chrome handles high contrast differently.\n///\n/// @param target Which kind of high contrast setting to target. Defaults to `active`, can be\n/// `white-on-black` or `black-on-white`.\n/// @param encapsulation Whether to emit styles for view encapsulation. Values are:\n/// * `on` - works for `Emulated`, `Native`, and `ShadowDom`\n/// * `off` - works for `None`\n/// * `any` - works for all encapsulation modes by emitting the CSS twice (default).\n@mixin cdk-high-contrast($target: active, $encapsulation: 'any') {\n @if ($target != 'active' and $target != 'black-on-white' and $target != 'white-on-black') {\n @error 'Unknown cdk-high-contrast value \"#{$target}\" provided. ' +\n 'Allowed values are \"active\", \"black-on-white\", and \"white-on-black\"';\n }\n\n @if ($encapsulation != 'on' and $encapsulation != 'off' and $encapsulation != 'any') {\n @error 'Unknown cdk-high-contrast encapsulation \"#{$encapsulation}\" provided. ' +\n 'Allowed values are \"on\", \"off\", and \"any\"';\n }\n\n // If the selector context has multiple parts, such as `.section, .region`, just doing\n // `.cdk-high-contrast-xxx #{&}` will only apply the parent selector to the first part of the\n // context. We address this by nesting the selector context under .cdk-high-contrast.\n @at-root {\n $selector-context: #{&};\n\n @if ($encapsulation != 'on') {\n .cdk-high-contrast-#{$target} {\n @include _cdk-optionally-nest-content($selector-context) {\n @content;\n }\n }\n }\n\n @if ($encapsulation != 'off') {\n .cdk-high-contrast-#{$target} :host {\n @include _cdk-optionally-nest-content($selector-context) {\n @content;\n }\n }\n }\n }\n}\n\n// Core styles that enable monitoring autofill state of text fields.\n@mixin cdk-text-field {\n // Keyframes that apply no styles, but allow us to monitor when an text field becomes autofilled\n // by watching for the animation events that are fired when they start. Note: the /*!*/ comment is\n // needed to prevent LibSass from stripping the keyframes out.\n // Based on: https://medium.com/@brunn/detecting-autofilled-fields-in-javascript-aed598d25da7\n @keyframes cdk-text-field-autofill-start {/*!*/}\n @keyframes cdk-text-field-autofill-end {/*!*/}\n\n .cdk-text-field-autofill-monitored:-webkit-autofill {\n // Since Chrome 80 we need a 1ms delay, or the animationstart event won't fire.\n animation: cdk-text-field-autofill-start 0s 1ms;\n }\n\n .cdk-text-field-autofill-monitored:not(:-webkit-autofill) {\n // Since Chrome 80 we need a 1ms delay, or the animationstart event won't fire.\n animation: cdk-text-field-autofill-end 0s 1ms;\n }\n\n // Remove the resize handle on autosizing textareas, because whatever height\n // the user resized to will be overwritten once they start typing again.\n textarea.cdk-textarea-autosize {\n resize: none;\n }\n\n // This class is temporarily applied to the textarea when it is being measured. It is immediately\n // removed when measuring is complete. We use `!important` rules here to make sure user-specified\n // rules do not interfere with the measurement.\n textarea.cdk-textarea-autosize-measuring {\n height: auto !important;\n overflow: hidden !important;\n // Having 2px top and bottom padding seems to fix a bug where Chrome gets an incorrect\n // measurement. We just have to account for it later and subtract it off the final result.\n padding: 2px 0 !important;\n box-sizing: content-box !important;\n }\n}\n\n// Used to generate UIDs for keyframes used to change the text field autofill styles.\n$cdk-text-field-autofill-color-frame-count: 0;\n\n// Mixin used to apply custom background and foreground colors to an autofilled text field.\n// Based on: https://stackoverflow.com/questions/2781549/\n// removing-input-background-colour-for-chrome-autocomplete#answer-37432260\n@mixin cdk-text-field-autofill-color($background, $foreground:'') {\n @keyframes cdk-text-field-autofill-color-#{$cdk-text-field-autofill-color-frame-count} {\n to {\n background: $background;\n @if $foreground != '' { color: $foreground; }\n }\n }\n\n &:-webkit-autofill {\n animation: cdk-text-field-autofill-color-#{$cdk-text-field-autofill-color-frame-count} both;\n }\n\n &.cdk-text-field-autofill-monitored:-webkit-autofill {\n // Since Chrome 80 we need a 1ms delay for cdk-text-field-autofill-start, or the animationstart\n // event won't fire.\n animation: cdk-text-field-autofill-start 0s 1ms,\n cdk-text-field-autofill-color-#{$cdk-text-field-autofill-color-frame-count} both;\n }\n\n $cdk-text-field-autofill-color-frame-count:\n $cdk-text-field-autofill-color-frame-count + 1 !global;\n}\n\n\n// Core styles that can be used to apply material design treatments to any element.\n// Media queries\n// TODO(josephperrott): Change $mat-xsmall and $mat-small usages to rely on BreakpointObserver,\n$mat-xsmall: 'max-width: 599px';\n$mat-small: 'max-width: 959px';\n\n// TODO: Revisit all z-indices before beta\n// z-index master list\n\n$z-index-fab: 20 !default;\n$z-index-drawer: 100 !default;\n\n// Global constants\n$pi: 3.14159265;\n\n// Padding between input toggles and their labels\n$mat-toggle-padding: 8px !default;\n// Width and height of input toggles\n$mat-toggle-size: 20px !default;\n\n// Easing Curves\n// TODO(jelbourn): all of these need to be revisited\n\n// The default animation curves used by material design.\n$mat-linear-out-slow-in-timing-function: cubic-bezier(0, 0, 0.2, 0.1) !default;\n$mat-fast-out-slow-in-timing-function: cubic-bezier(0.4, 0, 0.2, 1) !default;\n$mat-fast-out-linear-in-timing-function: cubic-bezier(0.4, 0, 1, 1) !default;\n\n$ease-in-out-curve-function: cubic-bezier(0.35, 0, 0.25, 1) !default;\n\n$swift-ease-out-duration: 400ms !default;\n$swift-ease-out-timing-function: cubic-bezier(0.25, 0.8, 0.25, 1) !default;\n$swift-ease-out: all $swift-ease-out-duration $swift-ease-out-timing-function !default;\n\n$swift-ease-in-duration: 300ms !default;\n$swift-ease-in-timing-function: cubic-bezier(0.55, 0, 0.55, 0.2) !default;\n$swift-ease-in: all $swift-ease-in-duration $swift-ease-in-timing-function !default;\n\n$swift-ease-in-out-duration: 500ms !default;\n$swift-ease-in-out-timing-function: $ease-in-out-curve-function !default;\n$swift-ease-in-out: all $swift-ease-in-out-duration $swift-ease-in-out-timing-function !default;\n\n$swift-linear-duration: 80ms !default;\n$swift-linear-timing-function: linear !default;\n$swift-linear: all $swift-linear-duration $swift-linear-timing-function !default;\n\n\n\n// A collection of mixins and CSS classes that can be used to apply elevation to a material\n// element.\n// See: https://material.io/design/environment/elevation.html\n// Examples:\n//\n//\n// .mat-foo {\n// @include $mat-elevation(2);\n//\n// &:active {\n// @include $mat-elevation(8);\n// }\n// }\n//\n//

Some content

\n//\n// For an explanation of the design behind how elevation is implemented, see the design doc at\n// https://goo.gl/Kq0k9Z.\n\n// Colors for umbra, penumbra, and ambient shadows. As described in the design doc, each elevation\n// level is created using a set of 3 shadow values, one for umbra (the shadow representing the\n// space completely obscured by an object relative to its light source), one for penumbra (the\n// space partially obscured by an object), and one for ambient (the space which contains the object\n// itself). For a further explanation of these terms and their meanings, see\n// https://en.wikipedia.org/wiki/Umbra,_penumbra_and_antumbra.\n\n// Maps for the different shadow sets and their values within each z-space. These values were\n// created by taking a few reference shadow sets created by Google's Designers and interpolating\n// all of the values between them.\n\n@function _get-umbra-map($color, $opacity) {\n $shadow-color: if(type-of($color) == color, rgba($color, $opacity * 0.2), $color);\n\n @return (\n 0: '0px 0px 0px 0px #{$shadow-color}',\n 1: '0px 2px 1px -1px #{$shadow-color}',\n 2: '0px 3px 1px -2px #{$shadow-color}',\n 3: '0px 3px 3px -2px #{$shadow-color}',\n 4: '0px 2px 4px -1px #{$shadow-color}',\n 5: '0px 3px 5px -1px #{$shadow-color}',\n 6: '0px 3px 5px -1px #{$shadow-color}',\n 7: '0px 4px 5px -2px #{$shadow-color}',\n 8: '0px 5px 5px -3px #{$shadow-color}',\n 9: '0px 5px 6px -3px #{$shadow-color}',\n 10: '0px 6px 6px -3px #{$shadow-color}',\n 11: '0px 6px 7px -4px #{$shadow-color}',\n 12: '0px 7px 8px -4px #{$shadow-color}',\n 13: '0px 7px 8px -4px #{$shadow-color}',\n 14: '0px 7px 9px -4px #{$shadow-color}',\n 15: '0px 8px 9px -5px #{$shadow-color}',\n 16: '0px 8px 10px -5px #{$shadow-color}',\n 17: '0px 8px 11px -5px #{$shadow-color}',\n 18: '0px 9px 11px -5px #{$shadow-color}',\n 19: '0px 9px 12px -6px #{$shadow-color}',\n 20: '0px 10px 13px -6px #{$shadow-color}',\n 21: '0px 10px 13px -6px #{$shadow-color}',\n 22: '0px 10px 14px -6px #{$shadow-color}',\n 23: '0px 11px 14px -7px #{$shadow-color}',\n 24: '0px 11px 15px -7px #{$shadow-color}'\n );\n}\n\n@function _get-penumbra-map($color, $opacity) {\n $shadow-color: if(type-of($color) == color, rgba($color, $opacity * 0.14), $color);\n\n @return (\n 0: '0px 0px 0px 0px #{$shadow-color}',\n 1: '0px 1px 1px 0px #{$shadow-color}',\n 2: '0px 2px 2px 0px #{$shadow-color}',\n 3: '0px 3px 4px 0px #{$shadow-color}',\n 4: '0px 4px 5px 0px #{$shadow-color}',\n 5: '0px 5px 8px 0px #{$shadow-color}',\n 6: '0px 6px 10px 0px #{$shadow-color}',\n 7: '0px 7px 10px 1px #{$shadow-color}',\n 8: '0px 8px 10px 1px #{$shadow-color}',\n 9: '0px 9px 12px 1px #{$shadow-color}',\n 10: '0px 10px 14px 1px #{$shadow-color}',\n 11: '0px 11px 15px 1px #{$shadow-color}',\n 12: '0px 12px 17px 2px #{$shadow-color}',\n 13: '0px 13px 19px 2px #{$shadow-color}',\n 14: '0px 14px 21px 2px #{$shadow-color}',\n 15: '0px 15px 22px 2px #{$shadow-color}',\n 16: '0px 16px 24px 2px #{$shadow-color}',\n 17: '0px 17px 26px 2px #{$shadow-color}',\n 18: '0px 18px 28px 2px #{$shadow-color}',\n 19: '0px 19px 29px 2px #{$shadow-color}',\n 20: '0px 20px 31px 3px #{$shadow-color}',\n 21: '0px 21px 33px 3px #{$shadow-color}',\n 22: '0px 22px 35px 3px #{$shadow-color}',\n 23: '0px 23px 36px 3px #{$shadow-color}',\n 24: '0px 24px 38px 3px #{$shadow-color}'\n );\n}\n\n@function _get-ambient-map($color, $opacity) {\n $shadow-color: if(type-of($color) == color, rgba($color, $opacity * 0.12), $color);\n\n @return (\n 0: '0px 0px 0px 0px #{$shadow-color}',\n 1: '0px 1px 3px 0px #{$shadow-color}',\n 2: '0px 1px 5px 0px #{$shadow-color}',\n 3: '0px 1px 8px 0px #{$shadow-color}',\n 4: '0px 1px 10px 0px #{$shadow-color}',\n 5: '0px 1px 14px 0px #{$shadow-color}',\n 6: '0px 1px 18px 0px #{$shadow-color}',\n 7: '0px 2px 16px 1px #{$shadow-color}',\n 8: '0px 3px 14px 2px #{$shadow-color}',\n 9: '0px 3px 16px 2px #{$shadow-color}',\n 10: '0px 4px 18px 3px #{$shadow-color}',\n 11: '0px 4px 20px 3px #{$shadow-color}',\n 12: '0px 5px 22px 4px #{$shadow-color}',\n 13: '0px 5px 24px 4px #{$shadow-color}',\n 14: '0px 5px 26px 4px #{$shadow-color}',\n 15: '0px 6px 28px 5px #{$shadow-color}',\n 16: '0px 6px 30px 5px #{$shadow-color}',\n 17: '0px 6px 32px 5px #{$shadow-color}',\n 18: '0px 7px 34px 6px #{$shadow-color}',\n 19: '0px 7px 36px 6px #{$shadow-color}',\n 20: '0px 8px 38px 7px #{$shadow-color}',\n 21: '0px 8px 40px 7px #{$shadow-color}',\n 22: '0px 8px 42px 7px #{$shadow-color}',\n 23: '0px 9px 44px 8px #{$shadow-color}',\n 24: '0px 9px 46px 8px #{$shadow-color}'\n );\n}\n\n// The default duration value for elevation transitions.\n$mat-elevation-transition-duration: 280ms !default;\n\n// The default easing value for elevation transitions.\n$mat-elevation-transition-timing-function: $mat-fast-out-slow-in-timing-function;\n\n// The default color for elevation shadows.\n$mat-elevation-color: black !default;\n\n// The default opacity scaling value for elevation shadows.\n$mat-elevation-opacity: 1 !default;\n\n// Prefix for elevation-related selectors.\n$_mat-elevation-prefix: 'mat-elevation-z';\n\n// Applies the correct css rules to an element to give it the elevation specified by $zValue.\n// The $zValue must be between 0 and 24.\n@mixin mat-elevation($zValue, $color: $mat-elevation-color, $opacity: $mat-elevation-opacity) {\n @if type-of($zValue) != number or not unitless($zValue) {\n @error '$zValue must be a unitless number';\n }\n @if $zValue < 0 or $zValue > 24 {\n @error '$zValue must be between 0 and 24';\n }\n\n box-shadow: #{map-get(_get-umbra-map($color, $opacity), $zValue)},\n #{map-get(_get-penumbra-map($color, $opacity), $zValue)},\n #{map-get(_get-ambient-map($color, $opacity), $zValue)};\n}\n\n@mixin _mat-theme-elevation($zValue, $theme, $opacity: $mat-elevation-opacity) {\n $foreground: map-get($theme, foreground);\n $elevation-color: map-get($foreground, elevation);\n $elevation-color-or-default: if($elevation-color == null, $mat-elevation-color, $elevation-color);\n\n @include mat-elevation($zValue, $elevation-color-or-default, $opacity);\n}\n\n// Applies the elevation to an element in a manner that allows\n// consumers to override it via the Material elevation classes.\n@mixin mat-overridable-elevation(\n $zValue,\n $color: $mat-elevation-color,\n $opacity: $mat-elevation-opacity) {\n &:not([class*='#{$_mat-elevation-prefix}']) {\n @include mat-elevation($zValue, $color, $opacity);\n }\n}\n\n@mixin _mat-theme-overridable-elevation($zValue, $theme, $opacity: $mat-elevation-opacity) {\n $foreground: map-get($theme, foreground);\n $elevation-color: map-get($foreground, elevation);\n $elevation-color-or-default: if($elevation-color == null, $mat-elevation-color, $elevation-color);\n\n @include mat-overridable-elevation($zValue, $elevation-color-or-default, $opacity);\n}\n\n// Returns a string that can be used as the value for a transition property for elevation.\n// Calling this function directly is useful in situations where a component needs to transition\n// more than one property.\n//\n// .foo {\n// transition: mat-elevation-transition-property-value(), opacity 100ms ease;\n// }\n@function mat-elevation-transition-property-value(\n $duration: $mat-elevation-transition-duration,\n $easing: $mat-elevation-transition-timing-function) {\n @return box-shadow #{$duration} #{$easing};\n}\n\n// Applies the correct css rules needed to have an element transition between elevations.\n// This mixin should be applied to elements whose elevation values will change depending on their\n// context (e.g. when active or disabled).\n//\n// NOTE(traviskaufman): Both this mixin and the above function use default parameters so they can\n// be used in the same way by clients.\n@mixin mat-elevation-transition(\n $duration: $mat-elevation-transition-duration,\n $easing: $mat-elevation-transition-timing-function) {\n transition: mat-elevation-transition-property-value($duration, $easing);\n}\n\n// Color palettes from the Material Design spec.\n// See https://material.io/design/color/\n//\n// Contrast colors are hard-coded because it is too difficult (probably impossible) to\n// calculate them. These contrast colors are pulled from the public Material Design spec swatches.\n// While the contrast colors in the spec are not prescriptive, we use them for convenience.\n\n\n// @deprecated renamed to $dark-primary-text.\n// @breaking-change 8.0.0\n$black-87-opacity: rgba(black, 0.87);\n// @deprecated renamed to $light-primary-text.\n// @breaking-change 8.0.0\n$white-87-opacity: rgba(white, 0.87);\n// @deprecated use $dark-[secondary-text,disabled-text,dividers,focused] instead.\n// @breaking-change 8.0.0\n$black-12-opacity: rgba(black, 0.12);\n// @deprecated use $light-[secondary-text,disabled-text,dividers,focused] instead.\n// @breaking-change 8.0.0\n$white-12-opacity: rgba(white, 0.12);\n// @deprecated use $dark-[secondary-text,disabled-text,dividers,focused] instead.\n// @breaking-change 8.0.0\n$black-6-opacity: rgba(black, 0.06);\n// @deprecated use $light-[secondary-text,disabled-text,dividers,focused] instead.\n// @breaking-change 8.0.0\n$white-6-opacity: rgba(white, 0.06);\n\n$dark-primary-text: rgba(black, 0.87);\n$dark-secondary-text: rgba(black, 0.54);\n$dark-disabled-text: rgba(black, 0.38);\n$dark-dividers: rgba(black, 0.12);\n$dark-focused: rgba(black, 0.12);\n$light-primary-text: white;\n$light-secondary-text: rgba(white, 0.7);\n$light-disabled-text: rgba(white, 0.5);\n$light-dividers: rgba(white, 0.12);\n$light-focused: rgba(white, 0.12);\n\n$mat-red: (\n 50: #ffebee,\n 100: #ffcdd2,\n 200: #ef9a9a,\n 300: #e57373,\n 400: #ef5350,\n 500: #f44336,\n 600: #e53935,\n 700: #d32f2f,\n 800: #c62828,\n 900: #b71c1c,\n A100: #ff8a80,\n A200: #ff5252,\n A400: #ff1744,\n A700: #d50000,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $dark-primary-text,\n 500: $light-primary-text,\n 600: $light-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $light-primary-text,\n A400: $light-primary-text,\n A700: $light-primary-text,\n )\n);\n\n$mat-pink: (\n 50: #fce4ec,\n 100: #f8bbd0,\n 200: #f48fb1,\n 300: #f06292,\n 400: #ec407a,\n 500: #e91e63,\n 600: #d81b60,\n 700: #c2185b,\n 800: #ad1457,\n 900: #880e4f,\n A100: #ff80ab,\n A200: #ff4081,\n A400: #f50057,\n A700: #c51162,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $dark-primary-text,\n 500: $light-primary-text,\n 600: $light-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $light-primary-text,\n A400: $light-primary-text,\n A700: $light-primary-text,\n )\n);\n\n$mat-purple: (\n 50: #f3e5f5,\n 100: #e1bee7,\n 200: #ce93d8,\n 300: #ba68c8,\n 400: #ab47bc,\n 500: #9c27b0,\n 600: #8e24aa,\n 700: #7b1fa2,\n 800: #6a1b9a,\n 900: #4a148c,\n A100: #ea80fc,\n A200: #e040fb,\n A400: #d500f9,\n A700: #aa00ff,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $light-primary-text,\n 400: $light-primary-text,\n 500: $light-primary-text,\n 600: $light-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $light-primary-text,\n A400: $light-primary-text,\n A700: $light-primary-text,\n )\n);\n\n$mat-deep-purple: (\n 50: #ede7f6,\n 100: #d1c4e9,\n 200: #b39ddb,\n 300: #9575cd,\n 400: #7e57c2,\n 500: #673ab7,\n 600: #5e35b1,\n 700: #512da8,\n 800: #4527a0,\n 900: #311b92,\n A100: #b388ff,\n A200: #7c4dff,\n A400: #651fff,\n A700: #6200ea,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $light-primary-text,\n 400: $light-primary-text,\n 500: $light-primary-text,\n 600: $light-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $light-primary-text,\n A400: $light-primary-text,\n A700: $light-primary-text,\n )\n);\n\n$mat-indigo: (\n 50: #e8eaf6,\n 100: #c5cae9,\n 200: #9fa8da,\n 300: #7986cb,\n 400: #5c6bc0,\n 500: #3f51b5,\n 600: #3949ab,\n 700: #303f9f,\n 800: #283593,\n 900: #1a237e,\n A100: #8c9eff,\n A200: #536dfe,\n A400: #3d5afe,\n A700: #304ffe,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $light-primary-text,\n 400: $light-primary-text,\n 500: $light-primary-text,\n 600: $light-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $light-primary-text,\n A400: $light-primary-text,\n A700: $light-primary-text,\n )\n);\n\n$mat-blue: (\n 50: #e3f2fd,\n 100: #bbdefb,\n 200: #90caf9,\n 300: #64b5f6,\n 400: #42a5f5,\n 500: #2196f3,\n 600: #1e88e5,\n 700: #1976d2,\n 800: #1565c0,\n 900: #0d47a1,\n A100: #82b1ff,\n A200: #448aff,\n A400: #2979ff,\n A700: #2962ff,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $dark-primary-text,\n 500: $light-primary-text,\n 600: $light-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $light-primary-text,\n A400: $light-primary-text,\n A700: $light-primary-text,\n )\n);\n\n$mat-light-blue: (\n 50: #e1f5fe,\n 100: #b3e5fc,\n 200: #81d4fa,\n 300: #4fc3f7,\n 400: #29b6f6,\n 500: #03a9f4,\n 600: #039be5,\n 700: #0288d1,\n 800: #0277bd,\n 900: #01579b,\n A100: #80d8ff,\n A200: #40c4ff,\n A400: #00b0ff,\n A700: #0091ea,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $dark-primary-text,\n 500: $light-primary-text,\n 600: $light-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $dark-primary-text,\n A400: $dark-primary-text,\n A700: $light-primary-text,\n )\n);\n\n$mat-cyan: (\n 50: #e0f7fa,\n 100: #b2ebf2,\n 200: #80deea,\n 300: #4dd0e1,\n 400: #26c6da,\n 500: #00bcd4,\n 600: #00acc1,\n 700: #0097a7,\n 800: #00838f,\n 900: #006064,\n A100: #84ffff,\n A200: #18ffff,\n A400: #00e5ff,\n A700: #00b8d4,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $dark-primary-text,\n 500: $light-primary-text,\n 600: $light-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $dark-primary-text,\n A400: $dark-primary-text,\n A700: $dark-primary-text,\n )\n);\n\n$mat-teal: (\n 50: #e0f2f1,\n 100: #b2dfdb,\n 200: #80cbc4,\n 300: #4db6ac,\n 400: #26a69a,\n 500: #009688,\n 600: #00897b,\n 700: #00796b,\n 800: #00695c,\n 900: #004d40,\n A100: #a7ffeb,\n A200: #64ffda,\n A400: #1de9b6,\n A700: #00bfa5,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $dark-primary-text,\n 500: $light-primary-text,\n 600: $light-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $dark-primary-text,\n A400: $dark-primary-text,\n A700: $dark-primary-text,\n )\n);\n\n$mat-green: (\n 50: #e8f5e9,\n 100: #c8e6c9,\n 200: #a5d6a7,\n 300: #81c784,\n 400: #66bb6a,\n 500: #4caf50,\n 600: #43a047,\n 700: #388e3c,\n 800: #2e7d32,\n 900: #1b5e20,\n A100: #b9f6ca,\n A200: #69f0ae,\n A400: #00e676,\n A700: #00c853,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $dark-primary-text,\n 500: $dark-primary-text,\n 600: $light-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $dark-primary-text,\n A400: $dark-primary-text,\n A700: $dark-primary-text,\n )\n);\n\n$mat-light-green: (\n 50: #f1f8e9,\n 100: #dcedc8,\n 200: #c5e1a5,\n 300: #aed581,\n 400: #9ccc65,\n 500: #8bc34a,\n 600: #7cb342,\n 700: #689f38,\n 800: #558b2f,\n 900: #33691e,\n A100: #ccff90,\n A200: #b2ff59,\n A400: #76ff03,\n A700: #64dd17,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $dark-primary-text,\n 500: $dark-primary-text,\n 600: $dark-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $dark-primary-text,\n A400: $dark-primary-text,\n A700: $dark-primary-text,\n )\n);\n\n$mat-lime: (\n 50: #f9fbe7,\n 100: #f0f4c3,\n 200: #e6ee9c,\n 300: #dce775,\n 400: #d4e157,\n 500: #cddc39,\n 600: #c0ca33,\n 700: #afb42b,\n 800: #9e9d24,\n 900: #827717,\n A100: #f4ff81,\n A200: #eeff41,\n A400: #c6ff00,\n A700: #aeea00,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $dark-primary-text,\n 500: $dark-primary-text,\n 600: $dark-primary-text,\n 700: $dark-primary-text,\n 800: $dark-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $dark-primary-text,\n A400: $dark-primary-text,\n A700: $dark-primary-text,\n )\n);\n\n$mat-yellow: (\n 50: #fffde7,\n 100: #fff9c4,\n 200: #fff59d,\n 300: #fff176,\n 400: #ffee58,\n 500: #ffeb3b,\n 600: #fdd835,\n 700: #fbc02d,\n 800: #f9a825,\n 900: #f57f17,\n A100: #ffff8d,\n A200: #ffff00,\n A400: #ffea00,\n A700: #ffd600,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $dark-primary-text,\n 500: $dark-primary-text,\n 600: $dark-primary-text,\n 700: $dark-primary-text,\n 800: $dark-primary-text,\n 900: $dark-primary-text,\n A100: $dark-primary-text,\n A200: $dark-primary-text,\n A400: $dark-primary-text,\n A700: $dark-primary-text,\n )\n);\n\n$mat-amber: (\n 50: #fff8e1,\n 100: #ffecb3,\n 200: #ffe082,\n 300: #ffd54f,\n 400: #ffca28,\n 500: #ffc107,\n 600: #ffb300,\n 700: #ffa000,\n 800: #ff8f00,\n 900: #ff6f00,\n A100: #ffe57f,\n A200: #ffd740,\n A400: #ffc400,\n A700: #ffab00,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $dark-primary-text,\n 500: $dark-primary-text,\n 600: $dark-primary-text,\n 700: $dark-primary-text,\n 800: $dark-primary-text,\n 900: $dark-primary-text,\n A100: $dark-primary-text,\n A200: $dark-primary-text,\n A400: $dark-primary-text,\n A700: $dark-primary-text,\n )\n);\n\n$mat-orange: (\n 50: #fff3e0,\n 100: #ffe0b2,\n 200: #ffcc80,\n 300: #ffb74d,\n 400: #ffa726,\n 500: #ff9800,\n 600: #fb8c00,\n 700: #f57c00,\n 800: #ef6c00,\n 900: #e65100,\n A100: #ffd180,\n A200: #ffab40,\n A400: #ff9100,\n A700: #ff6d00,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $dark-primary-text,\n 500: $dark-primary-text,\n 600: $dark-primary-text,\n 700: $dark-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $dark-primary-text,\n A400: $dark-primary-text,\n A700: black,\n )\n);\n\n$mat-deep-orange: (\n 50: #fbe9e7,\n 100: #ffccbc,\n 200: #ffab91,\n 300: #ff8a65,\n 400: #ff7043,\n 500: #ff5722,\n 600: #f4511e,\n 700: #e64a19,\n 800: #d84315,\n 900: #bf360c,\n A100: #ff9e80,\n A200: #ff6e40,\n A400: #ff3d00,\n A700: #dd2c00,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $dark-primary-text,\n 500: $light-primary-text,\n 600: $light-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $dark-primary-text,\n A400: $light-primary-text,\n A700: $light-primary-text,\n )\n);\n\n$mat-brown: (\n 50: #efebe9,\n 100: #d7ccc8,\n 200: #bcaaa4,\n 300: #a1887f,\n 400: #8d6e63,\n 500: #795548,\n 600: #6d4c41,\n 700: #5d4037,\n 800: #4e342e,\n 900: #3e2723,\n A100: #d7ccc8,\n A200: #bcaaa4,\n A400: #8d6e63,\n A700: #5d4037,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $light-primary-text,\n 400: $light-primary-text,\n 500: $light-primary-text,\n 600: $light-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $dark-primary-text,\n A400: $light-primary-text,\n A700: $light-primary-text,\n )\n);\n\n$mat-grey: (\n 50: #fafafa,\n 100: #f5f5f5,\n 200: #eeeeee,\n 300: #e0e0e0,\n 400: #bdbdbd,\n 500: #9e9e9e,\n 600: #757575,\n 700: #616161,\n 800: #424242,\n 900: #212121,\n A100: #ffffff,\n A200: #eeeeee,\n A400: #bdbdbd,\n A700: #616161,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $dark-primary-text,\n 500: $dark-primary-text,\n 600: $light-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $dark-primary-text,\n A400: $dark-primary-text,\n A700: $light-primary-text,\n )\n);\n\n// Alias for alternate spelling.\n$mat-gray: $mat-grey;\n\n$mat-blue-grey: (\n 50: #eceff1,\n 100: #cfd8dc,\n 200: #b0bec5,\n 300: #90a4ae,\n 400: #78909c,\n 500: #607d8b,\n 600: #546e7a,\n 700: #455a64,\n 800: #37474f,\n 900: #263238,\n A100: #cfd8dc,\n A200: #b0bec5,\n A400: #78909c,\n A700: #455a64,\n contrast: (\n 50: $dark-primary-text,\n 100: $dark-primary-text,\n 200: $dark-primary-text,\n 300: $dark-primary-text,\n 400: $light-primary-text,\n 500: $light-primary-text,\n 600: $light-primary-text,\n 700: $light-primary-text,\n 800: $light-primary-text,\n 900: $light-primary-text,\n A100: $dark-primary-text,\n A200: $dark-primary-text,\n A400: $light-primary-text,\n A700: $light-primary-text,\n )\n);\n\n// Alias for alternate spelling.\n$mat-blue-gray: $mat-blue-grey;\n\n\n// Background palette for light themes.\n$mat-light-theme-background: (\n status-bar: map_get($mat-grey, 300),\n app-bar: map_get($mat-grey, 100),\n background: map_get($mat-grey, 50),\n hover: rgba(black, 0.04), // TODO(kara): check style with Material Design UX\n card: white,\n dialog: white,\n disabled-button: rgba(black, 0.12),\n raised-button: white,\n focused-button: $dark-focused,\n selected-button: map_get($mat-grey, 300),\n selected-disabled-button: map_get($mat-grey, 400),\n disabled-button-toggle: map_get($mat-grey, 200),\n unselected-chip: map_get($mat-grey, 300),\n disabled-list-option: map_get($mat-grey, 200),\n tooltip: map_get($mat-grey, 700),\n);\n\n// Background palette for dark themes.\n$mat-dark-theme-background: (\n status-bar: black,\n app-bar: map_get($mat-grey, 900),\n background: #303030,\n hover: rgba(white, 0.04), // TODO(kara): check style with Material Design UX\n card: map_get($mat-grey, 800),\n dialog: map_get($mat-grey, 800),\n disabled-button: rgba(white, 0.12),\n raised-button: map-get($mat-grey, 800),\n focused-button: $light-focused,\n selected-button: map_get($mat-grey, 900),\n selected-disabled-button: map_get($mat-grey, 800),\n disabled-button-toggle: black,\n unselected-chip: map_get($mat-grey, 700),\n disabled-list-option: black,\n tooltip: map_get($mat-grey, 700),\n);\n\n// Foreground palette for light themes.\n$mat-light-theme-foreground: (\n base: black,\n divider: $dark-dividers,\n dividers: $dark-dividers,\n disabled: $dark-disabled-text,\n disabled-button: rgba(black, 0.26),\n disabled-text: $dark-disabled-text,\n elevation: black,\n hint-text: $dark-disabled-text,\n secondary-text: $dark-secondary-text,\n icon: rgba(black, 0.54),\n icons: rgba(black, 0.54),\n text: rgba(black, 0.87),\n slider-min: rgba(black, 0.87),\n slider-off: rgba(black, 0.26),\n slider-off-active: rgba(black, 0.38),\n);\n\n// Foreground palette for dark themes.\n$mat-dark-theme-foreground: (\n base: white,\n divider: $light-dividers,\n dividers: $light-dividers,\n disabled: $light-disabled-text,\n disabled-button: rgba(white, 0.3),\n disabled-text: $light-disabled-text,\n elevation: black,\n hint-text: $light-disabled-text,\n secondary-text: $light-secondary-text,\n icon: white,\n icons: white,\n text: white,\n slider-min: white,\n slider-off: rgba(white, 0.3),\n slider-off-active: rgba(white, 0.3),\n);\n\n\n\n// For a given hue in a palette, return the contrast color from the map of contrast palettes.\n// @param $color-map\n// @param $hue\n@function mat-contrast($palette, $hue) {\n @return map-get(map-get($palette, contrast), $hue);\n}\n\n\n// Creates a map of hues to colors for a theme. This is used to define a theme palette in terms\n// of the Material Design hues.\n// @param $color-map\n// @param $primary\n// @param $lighter\n@function mat-palette($base-palette, $default: 500, $lighter: 100, $darker: 700, $text: $default) {\n $result: map_merge($base-palette, (\n default: map-get($base-palette, $default),\n lighter: map-get($base-palette, $lighter),\n darker: map-get($base-palette, $darker),\n text: map-get($base-palette, $text),\n\n default-contrast: mat-contrast($base-palette, $default),\n lighter-contrast: mat-contrast($base-palette, $lighter),\n darker-contrast: mat-contrast($base-palette, $darker)\n ));\n\n // For each hue in the palette, add a \"-contrast\" color to the map.\n @each $hue, $color in $base-palette {\n $result: map_merge($result, (\n '#{$hue}-contrast': mat-contrast($base-palette, $hue)\n ));\n }\n\n @return $result;\n}\n\n\n// Gets a color from a theme palette (the output of mat-palette).\n// The hue can be one of the standard values (500, A400, etc.), one of the three preconfigured\n// hues (default, lighter, darker), or any of the aforementioned prefixed with \"-contrast\".\n//\n// @param $color-map The theme palette (output of mat-palette).\n// @param $hue The hue from the palette to use. If this is a value between 0 and 1, it will\n// be treated as opacity.\n// @param $opacity The alpha channel value for the color.\n@function mat-color($palette, $hue: default, $opacity: null) {\n // If hueKey is a number between zero and one, then it actually contains an\n // opacity value, so recall this function with the default hue and that given opacity.\n @if type-of($hue) == number and $hue >= 0 and $hue <= 1 {\n @return mat-color($palette, default, $hue);\n }\n\n $color: map-get($palette, $hue);\n\n @if (type-of($color) != color) {\n // If the $color resolved to something different from a color (e.g. a CSS variable),\n // we can't apply the opacity anyway so we return the value as is, otherwise Sass can\n // throw an error or output something invalid.\n @return $color;\n }\n\n @return rgba($color, if($opacity == null, opacity($color), $opacity));\n}\n\n\n// Creates a container object for a light theme to be given to individual component theme mixins.\n@function mat-light-theme($primary, $accent, $warn: mat-palette($mat-red)) {\n @return (\n primary: $primary,\n accent: $accent,\n warn: $warn,\n is-dark: false,\n foreground: $mat-light-theme-foreground,\n background: $mat-light-theme-background,\n );\n}\n\n\n// Creates a container object for a dark theme to be given to individual component theme mixins.\n@function mat-dark-theme($primary, $accent, $warn: mat-palette($mat-red)) {\n @return (\n primary: $primary,\n accent: $accent,\n warn: $warn,\n is-dark: true,\n foreground: $mat-dark-theme-foreground,\n background: $mat-dark-theme-background,\n );\n}\n\n\n\n$mat-ripple-color-opacity: 0.1;\n\n@mixin mat-ripple() {\n\n // The host element of an mat-ripple directive should always have a position of \"absolute\" or\n // \"relative\" so that the ripples inside are correctly positioned relatively to the container.\n .mat-ripple {\n overflow: hidden;\n\n // By default, every ripple container should have position: relative in favor of creating an\n // easy API for developers using the MatRipple directive.\n position: relative;\n\n // Promote containers that have ripples to a new layer. We want to target `:not(:empty)`,\n // because we don't want all ripple containers to have their own layer since they're used in a\n // lot of places and the layer is only relevant while animating. Note that ideally we'd use\n // the `contain` property here (see #13175), because `:empty` can be broken by having extra\n // text inside the element, but it isn't very well supported yet.\n &:not(:empty) {\n transform: translateZ(0);\n }\n }\n\n .mat-ripple.mat-ripple-unbounded {\n overflow: visible;\n }\n\n .mat-ripple-element {\n position: absolute;\n border-radius: 50%;\n pointer-events: none;\n\n transition: opacity, transform 0ms cubic-bezier(0, 0, 0.2, 1);\n transform: scale(0);\n\n // In high contrast mode the ripple is opaque, causing it to obstruct the content.\n @include cdk-high-contrast(active, off) {\n display: none;\n }\n }\n}\n\n/* Theme for the ripple elements.*/\n@mixin mat-ripple-theme($theme) {\n $foreground: map_get($theme, foreground);\n $foreground-base: map_get($foreground, base);\n\n .mat-ripple-element {\n // If the ripple color is resolves to a color *type*, we can use it directly, otherwise\n // (e.g. it resolves to a CSS variable) we fall back to using the color and setting an opacity.\n @if (type-of($foreground-base) == color) {\n background-color: rgba($foreground-base, $mat-ripple-color-opacity);\n }\n @else {\n background-color: $foreground-base;\n opacity: $mat-ripple-color-opacity;\n }\n }\n}\n\n\n\n// Utility for fetching a nested value from a typography config.\n@function _mat-get-type-value($config, $level, $name) {\n @return map-get(map-get($config, $level), $name);\n}\n\n// Gets the font size for a level inside a typography config.\n@function mat-font-size($config, $level) {\n @return _mat-get-type-value($config, $level, font-size);\n}\n\n// Gets the line height for a level inside a typography config.\n@function mat-line-height($config, $level) {\n @return _mat-get-type-value($config, $level, line-height);\n}\n\n// Gets the font weight for a level inside a typography config.\n@function mat-font-weight($config, $level) {\n @return _mat-get-type-value($config, $level, font-weight);\n}\n\n// Gets the letter spacing for a level inside a typography config.\n@function mat-letter-spacing($config, $level) {\n @return _mat-get-type-value($config, $level, letter-spacing);\n}\n\n// Gets the font-family from a typography config and removes the quotes around it.\n@function mat-font-family($config, $level: null) {\n $font-family: map-get($config, font-family);\n\n @if $level != null {\n $font-family: _mat-get-type-value($config, $level, font-family);\n }\n\n // Guard against unquoting non-string values, because it's deprecated.\n @return if(type-of($font-family) == string, unquote($font-family), $font-family);\n}\n\n// Outputs the shorthand `font` CSS property, based on a set of typography values. Falls back to\n// the individual properties if a value that isn't allowed in the shorthand is passed in.\n@mixin mat-typography-font-shorthand($font-size, $font-weight, $line-height, $font-family) {\n // If any of the values are set to `inherit`, we can't use the shorthand\n // so we fall back to passing in the individual properties.\n @if ($font-size == inherit or\n $font-weight == inherit or\n $line-height == inherit or\n $font-family == inherit or\n $font-size == null or\n $font-weight == null or\n $line-height == null or\n $font-family == null) {\n\n font-size: $font-size;\n font-weight: $font-weight;\n line-height: $line-height;\n font-family: $font-family;\n }\n @else {\n // Otherwise use the shorthand `font`, because it's the least amount of bytes. Note\n // that we need to use interpolation for `font-size/line-height` in order to prevent\n // Sass from dividing the two values.\n font: $font-weight #{$font-size}/#{$line-height} $font-family;\n }\n}\n\n// Converts a typography level into CSS styles.\n@mixin mat-typography-level-to-styles($config, $level) {\n $font-size: mat-font-size($config, $level);\n $font-weight: mat-font-weight($config, $level);\n $line-height: mat-line-height($config, $level);\n $font-family: mat-font-family($config, $level);\n\n @include mat-typography-font-shorthand($font-size, $font-weight, $line-height, $font-family);\n letter-spacing: mat-letter-spacing($config, $level);\n}\n\n\n@mixin mat-option-theme($theme) {\n $foreground: map-get($theme, foreground);\n $background: map-get($theme, background);\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n\n .mat-option {\n color: mat-color($foreground, text);\n\n &:hover:not(.mat-option-disabled),\n &:focus:not(.mat-option-disabled) {\n background: mat-color($background, hover);\n }\n\n // In multiple mode there is a checkbox to show that the option is selected.\n &.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled) {\n background: mat-color($background, hover);\n }\n\n &.mat-active {\n background: mat-color($background, hover);\n color: mat-color($foreground, text);\n }\n\n &.mat-option-disabled {\n color: mat-color($foreground, hint-text);\n }\n }\n\n .mat-primary .mat-option.mat-selected:not(.mat-option-disabled) {\n color: mat-color($primary, text);\n }\n\n .mat-accent .mat-option.mat-selected:not(.mat-option-disabled) {\n color: mat-color($accent, text);\n }\n\n .mat-warn .mat-option.mat-selected:not(.mat-option-disabled) {\n color: mat-color($warn, text);\n }\n}\n\n@mixin mat-option-typography($config) {\n .mat-option {\n font: {\n family: mat-font-family($config);\n size: mat-font-size($config, subheading-2);\n }\n }\n}\n\n\n\n\n\n@mixin mat-optgroup-theme($theme) {\n $foreground: map-get($theme, foreground);\n\n .mat-optgroup-label {\n color: mat-color($foreground, secondary-text);\n }\n\n .mat-optgroup-disabled .mat-optgroup-label {\n color: mat-color($foreground, hint-text);\n }\n}\n\n@mixin mat-optgroup-typography($config) {\n .mat-optgroup-label {\n @include mat-typography-level-to-styles($config, body-2);\n }\n}\n\n\n\n@mixin mat-pseudo-checkbox-theme($theme) {\n $is-dark-theme: map-get($theme, is-dark);\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $background: map-get($theme, background);\n\n // NOTE(traviskaufman): While the spec calls for translucent blacks/whites for disabled colors,\n // this does not work well with elements layered on top of one another. To get around this we\n // blend the colors together based on the base color and the theme background.\n $white-30pct-opacity-on-dark: #686868;\n $black-26pct-opacity-on-light: #b0b0b0;\n $disabled-color: if($is-dark-theme, $white-30pct-opacity-on-dark, $black-26pct-opacity-on-light);\n $colored-box-selector: '.mat-pseudo-checkbox-checked, .mat-pseudo-checkbox-indeterminate';\n\n .mat-pseudo-checkbox {\n color: mat-color(map-get($theme, foreground), secondary-text);\n\n &::after {\n color: mat-color($background, background);\n }\n }\n\n .mat-pseudo-checkbox-disabled {\n color: $disabled-color;\n }\n\n .mat-primary .mat-pseudo-checkbox-checked,\n .mat-primary .mat-pseudo-checkbox-indeterminate {\n background: mat-color(map-get($theme, primary));\n }\n\n // Default to the accent color. Note that the pseudo checkboxes are meant to inherit the\n // theme from their parent, rather than implementing their own theming, which is why we\n // don't attach to the `mat-*` classes. Also note that this needs to be below `.mat-primary`\n // in order to allow for the color to be overwritten if the checkbox is inside a parent that\n // has `mat-accent` and is placed inside another parent that has `mat-primary`.\n .mat-pseudo-checkbox-checked,\n .mat-pseudo-checkbox-indeterminate,\n .mat-accent .mat-pseudo-checkbox-checked,\n .mat-accent .mat-pseudo-checkbox-indeterminate {\n background: mat-color(map-get($theme, accent));\n }\n\n .mat-warn .mat-pseudo-checkbox-checked,\n .mat-warn .mat-pseudo-checkbox-indeterminate {\n background: mat-color(map-get($theme, warn));\n }\n\n .mat-pseudo-checkbox-checked,\n .mat-pseudo-checkbox-indeterminate {\n &.mat-pseudo-checkbox-disabled {\n background: $disabled-color;\n }\n }\n}\n\n\n\n// Represents a typography level from the Material design spec.\n@function mat-typography-level(\n $font-size,\n $line-height: $font-size,\n $font-weight: 400,\n $font-family: null,\n $letter-spacing: normal) {\n\n @return (\n font-size: $font-size,\n line-height: $line-height,\n font-weight: $font-weight,\n font-family: $font-family,\n letter-spacing: $letter-spacing\n );\n}\n\n// Represents a collection of typography levels.\n// Defaults come from https://material.io/guidelines/style/typography.html\n// Note: The spec doesn't mention letter spacing. The values here come from\n// eyeballing it until it looked exactly like the spec examples.\n@function mat-typography-config(\n $font-family: 'Roboto, \"Helvetica Neue\", sans-serif',\n $display-4: mat-typography-level(112px, 112px, 300, $letter-spacing: -0.05em),\n $display-3: mat-typography-level(56px, 56px, 400, $letter-spacing: -0.02em),\n $display-2: mat-typography-level(45px, 48px, 400, $letter-spacing: -0.005em),\n $display-1: mat-typography-level(34px, 40px, 400),\n $headline: mat-typography-level(24px, 32px, 400),\n $title: mat-typography-level(20px, 32px, 500),\n $subheading-2: mat-typography-level(16px, 28px, 400),\n $subheading-1: mat-typography-level(15px, 24px, 400),\n $body-2: mat-typography-level(14px, 24px, 500),\n $body-1: mat-typography-level(14px, 20px, 400),\n $caption: mat-typography-level(12px, 20px, 400),\n $button: mat-typography-level(14px, 14px, 500),\n // Line-height must be unit-less fraction of the font-size.\n $input: mat-typography-level(inherit, 1.125, 400)\n) {\n\n // Declare an initial map with all of the levels.\n $config: (\n display-4: $display-4,\n display-3: $display-3,\n display-2: $display-2,\n display-1: $display-1,\n headline: $headline,\n title: $title,\n subheading-2: $subheading-2,\n subheading-1: $subheading-1,\n body-2: $body-2,\n body-1: $body-1,\n caption: $caption,\n button: $button,\n input: $input,\n );\n\n // Loop through the levels and set the `font-family` of the ones that don't have one to the base.\n // Note that Sass can't modify maps in place, which means that we need to merge and re-assign.\n @each $key, $level in $config {\n @if map-get($level, font-family) == null {\n $new-level: map-merge($level, (font-family: $font-family));\n $config: map-merge($config, ($key: $new-level));\n }\n }\n\n // Add the base font family to the config.\n @return map-merge($config, (font-family: $font-family));\n}\n\n// Adds the base typography styles, based on a config.\n@mixin mat-base-typography($config, $selector: '.mat-typography') {\n .mat-h1, .mat-headline, #{$selector} h1 {\n @include mat-typography-level-to-styles($config, headline);\n margin: 0 0 16px;\n }\n\n .mat-h2, .mat-title, #{$selector} h2 {\n @include mat-typography-level-to-styles($config, title);\n margin: 0 0 16px;\n }\n\n .mat-h3, .mat-subheading-2, #{$selector} h3 {\n @include mat-typography-level-to-styles($config, subheading-2);\n margin: 0 0 16px;\n }\n\n .mat-h4, .mat-subheading-1, #{$selector} h4 {\n @include mat-typography-level-to-styles($config, subheading-1);\n margin: 0 0 16px;\n }\n\n // Note: the spec doesn't have anything that would correspond to h5 and h6, but we add these for\n // consistency. The font sizes come from the Chrome user agent styles which have h5 at 0.83em\n // and h6 at 0.67em.\n .mat-h5, #{$selector} h5 {\n @include mat-typography-font-shorthand(\n // calc is used here to support css variables\n calc(#{mat-font-size($config, body-1)} * 0.83),\n mat-font-weight($config, body-1),\n mat-line-height($config, body-1),\n mat-font-family($config, body-1)\n );\n\n margin: 0 0 12px;\n }\n\n .mat-h6, #{$selector} h6 {\n @include mat-typography-font-shorthand(\n // calc is used here to support css variables\n calc(#{mat-font-size($config, body-1)} * 0.67),\n mat-font-weight($config, body-1),\n mat-line-height($config, body-1),\n mat-font-family($config, body-1)\n );\n\n margin: 0 0 12px;\n }\n\n .mat-body-strong, .mat-body-2 {\n @include mat-typography-level-to-styles($config, body-2);\n }\n\n .mat-body, .mat-body-1, #{$selector} {\n @include mat-typography-level-to-styles($config, body-1);\n\n p {\n margin: 0 0 12px;\n }\n }\n\n .mat-small, .mat-caption {\n @include mat-typography-level-to-styles($config, caption);\n }\n\n .mat-display-4, #{$selector} .mat-display-4 {\n @include mat-typography-level-to-styles($config, display-4);\n margin: 0 0 56px;\n }\n\n .mat-display-3, #{$selector} .mat-display-3 {\n @include mat-typography-level-to-styles($config, display-3);\n margin: 0 0 64px;\n }\n\n .mat-display-2, #{$selector} .mat-display-2 {\n @include mat-typography-level-to-styles($config, display-2);\n margin: 0 0 64px;\n }\n\n .mat-display-1, #{$selector} .mat-display-1 {\n @include mat-typography-level-to-styles($config, display-1);\n margin: 0 0 64px;\n }\n}\n\n\n\n\n@mixin mat-autocomplete-theme($theme) {\n $foreground: map-get($theme, foreground);\n $background: map-get($theme, background);\n\n .mat-autocomplete-panel {\n @include _mat-theme-overridable-elevation(4, $theme);\n background: mat-color($background, card);\n color: mat-color($foreground, text);\n\n // Selected options in autocompletes should not be gray, but we\n // only want to override the background for selected options if\n // they are *not* in hover or focus state. This change has to be\n // made here because base option styles are shared between the\n // autocomplete and the select.\n .mat-option.mat-selected:not(.mat-active):not(:hover) {\n background: mat-color($background, card);\n\n &:not(.mat-option-disabled) {\n color: mat-color($foreground, text);\n }\n }\n }\n\n}\n\n@mixin mat-autocomplete-typography($config) { }\n\n// This contains all of the styles for the badge\n// rather than just the color/theme because of\n// no style sheet support for directives.\n\n\n\n\n\n$mat-badge-font-size: 12px;\n$mat-badge-font-weight: 600;\n$mat-badge-default-size: 22px !default;\n$mat-badge-small-size: $mat-badge-default-size - 6;\n$mat-badge-large-size: $mat-badge-default-size + 6;\n\n// Mixin for building offset given different sizes\n@mixin _mat-badge-size($size) {\n .mat-badge-content {\n width: $size;\n height: $size;\n line-height: $size;\n }\n\n &.mat-badge-above {\n .mat-badge-content {\n top: -$size / 2;\n }\n }\n\n &.mat-badge-below {\n .mat-badge-content {\n bottom: -$size / 2;\n }\n }\n\n &.mat-badge-before {\n .mat-badge-content {\n left: -$size;\n }\n }\n\n [dir='rtl'] &.mat-badge-before {\n .mat-badge-content {\n left: auto;\n right: -$size;\n }\n }\n\n &.mat-badge-after {\n .mat-badge-content {\n right: -$size;\n }\n }\n\n [dir='rtl'] &.mat-badge-after {\n .mat-badge-content {\n right: auto;\n left: -$size;\n }\n }\n\n &.mat-badge-overlap {\n &.mat-badge-before {\n .mat-badge-content {\n left: -$size / 2;\n }\n }\n\n [dir='rtl'] &.mat-badge-before {\n .mat-badge-content {\n left: auto;\n right: -$size / 2;\n }\n }\n\n &.mat-badge-after {\n .mat-badge-content {\n right: -$size / 2;\n }\n }\n\n [dir='rtl'] &.mat-badge-after {\n .mat-badge-content {\n right: auto;\n left: -$size / 2;\n }\n }\n }\n}\n\n@mixin mat-badge-theme($theme) {\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $primary: map-get($theme, primary);\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n .mat-badge-content {\n color: mat-color($primary, default-contrast);\n background: mat-color($primary);\n\n @include cdk-high-contrast(active, off) {\n outline: solid 1px;\n border-radius: 0;\n }\n }\n\n .mat-badge-accent {\n .mat-badge-content {\n background: mat-color($accent);\n color: mat-color($accent, default-contrast);\n }\n }\n\n .mat-badge-warn {\n .mat-badge-content {\n color: mat-color($warn, default-contrast);\n background: mat-color($warn);\n }\n }\n\n .mat-badge {\n position: relative;\n }\n\n .mat-badge-hidden {\n .mat-badge-content {\n display: none;\n }\n }\n\n .mat-badge-disabled {\n .mat-badge-content {\n $app-background: mat-color($background, 'background');\n $badge-color: mat-color($foreground, disabled-button);\n\n // The disabled color usually has some kind of opacity, but because the badge is overlayed\n // on top of something else, it won't look good if it's opaque. If it is a color *type*,\n // we convert it into a solid color by taking the opacity from the rgba value and using\n // the value to determine the percentage of the background to put into foreground when\n // mixing the colors together.\n @if (type-of($badge-color) == color and type-of($app-background) == color) {\n $badge-opacity: opacity($badge-color);\n background: mix($app-background, rgba($badge-color, 1), (1 - $badge-opacity) * 100%);\n }\n @else {\n background: $badge-color;\n }\n\n color: mat-color($foreground, disabled-text);\n }\n }\n\n .mat-badge-content {\n position: absolute;\n text-align: center;\n display: inline-block;\n border-radius: 50%;\n transition: transform 200ms ease-in-out;\n transform: scale(0.6);\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n pointer-events: none;\n }\n\n .ng-animate-disabled .mat-badge-content,\n .mat-badge-content._mat-animation-noopable {\n transition: none;\n }\n\n // The active class is added after the element is added\n // so it can animate scale to default\n .mat-badge-content.mat-badge-active {\n // Scale to `none` instead of `1` to avoid blurry text in some browsers.\n transform: none;\n }\n\n .mat-badge-small {\n @include _mat-badge-size($mat-badge-small-size);\n }\n .mat-badge-medium {\n @include _mat-badge-size($mat-badge-default-size);\n }\n .mat-badge-large {\n @include _mat-badge-size($mat-badge-large-size);\n }\n}\n\n@mixin mat-badge-typography($config) {\n .mat-badge-content {\n font-weight: $mat-badge-font-weight;\n font-size: $mat-badge-font-size;\n font-family: mat-font-family($config);\n }\n\n .mat-badge-small .mat-badge-content {\n // Set the font size to 75% of the original.\n font-size: $mat-badge-font-size * 0.75;\n }\n\n .mat-badge-large .mat-badge-content {\n font-size: $mat-badge-font-size * 2;\n }\n}\n\n\n\n\n\n@mixin mat-bottom-sheet-theme($theme) {\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n .mat-bottom-sheet-container {\n @include _mat-theme-elevation(16, $theme);\n background: mat-color($background, dialog);\n color: mat-color($foreground, text);\n }\n}\n\n@mixin mat-bottom-sheet-typography($config) {\n .mat-bottom-sheet-container {\n @include mat-typography-level-to-styles($config, body-1);\n }\n}\n\n\n\n\n\n$_mat-button-ripple-opacity: 0.1;\n\n// Applies a focus style to an mat-button element for each of the supported palettes.\n@mixin _mat-button-focus-overlay-color($theme) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n\n &.mat-primary .mat-button-focus-overlay {\n background-color: mat-color($primary);\n }\n\n &.mat-accent .mat-button-focus-overlay {\n background-color: mat-color($accent);\n }\n\n &.mat-warn .mat-button-focus-overlay {\n background-color: mat-color($warn);\n }\n\n &[disabled] .mat-button-focus-overlay {\n background-color: transparent;\n }\n}\n\n// Applies the background color for a ripple. If the value provided is not a Sass color,\n// we assume that we've been given a CSS variable. Since we can't perform alpha-blending\n// on a CSS variable, we instead add the opacity directly to the ripple element.\n@mixin _mat-button-ripple-background($palette, $hue, $opacity) {\n $background-color: mat-color($palette, $hue, $opacity);\n background-color: $background-color;\n @if (type-of($background-color) != color) {\n opacity: $opacity;\n }\n}\n\n@mixin _mat-button-ripple-color($theme, $hue, $opacity: $_mat-button-ripple-opacity) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n\n &.mat-primary .mat-ripple-element {\n @include _mat-button-ripple-background($primary, $hue, $opacity);\n }\n\n &.mat-accent .mat-ripple-element {\n @include _mat-button-ripple-background($accent, $hue, $opacity);\n }\n\n &.mat-warn .mat-ripple-element {\n @include _mat-button-ripple-background($warn, $hue, $opacity);\n }\n}\n\n// Applies a property to an mat-button element for each of the supported palettes.\n@mixin _mat-button-theme-property($theme, $property, $hue) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n &.mat-primary {\n #{$property}: mat-color($primary, $hue);\n }\n &.mat-accent {\n #{$property}: mat-color($accent, $hue);\n }\n &.mat-warn {\n #{$property}: mat-color($warn, $hue);\n }\n\n &.mat-primary, &.mat-accent, &.mat-warn, &[disabled] {\n &[disabled] {\n $palette: if($property == 'color', $foreground, $background);\n #{$property}: mat-color($palette, disabled-button);\n }\n }\n}\n\n@mixin mat-button-theme($theme) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n .mat-button, .mat-icon-button, .mat-stroked-button {\n // Buttons without a background color should inherit the font color. This is necessary to\n // ensure that the button is readable on custom background colors. It's wrong to always assume\n // that those buttons are always placed inside of containers with the default background\n // color of the theme (e.g. themed toolbars).\n color: inherit;\n background: transparent;\n\n @include _mat-button-theme-property($theme, 'color', text);\n @include _mat-button-focus-overlay-color($theme);\n\n // Setup the ripple color to be based on the text color. This ensures that the ripples\n // are matching with the current theme palette and are in contrast to the background color\n // (e.g in themed toolbars).\n .mat-ripple-element {\n opacity: $_mat-button-ripple-opacity;\n background-color: currentColor;\n }\n }\n\n .mat-button-focus-overlay {\n background: map_get($foreground, base);\n }\n\n // Note: this needs a bit extra specificity, because we're not guaranteed the inclusion\n // order of the theme styles and the button reset may end up resetting this as well.\n .mat-stroked-button:not([disabled]) {\n border-color: mat-color($foreground, divider);\n }\n\n .mat-flat-button, .mat-raised-button, .mat-fab, .mat-mini-fab {\n // Default font and background color when not using any color palette.\n color: mat-color($foreground, text);\n background-color: mat-color($background, raised-button);\n\n @include _mat-button-theme-property($theme, 'color', default-contrast);\n @include _mat-button-theme-property($theme, 'background-color', default);\n @include _mat-button-ripple-color($theme, default-contrast);\n }\n\n .mat-stroked-button, .mat-flat-button {\n @include _mat-theme-overridable-elevation(0, $theme);\n }\n\n .mat-raised-button {\n @include _mat-theme-overridable-elevation(2, $theme);\n\n &:not([disabled]):active {\n @include _mat-theme-overridable-elevation(8, $theme);\n }\n\n &[disabled] {\n @include _mat-theme-overridable-elevation(0, $theme);\n }\n }\n\n .mat-fab, .mat-mini-fab {\n @include _mat-theme-overridable-elevation(6, $theme);\n\n &:not([disabled]):active {\n @include _mat-theme-overridable-elevation(12, $theme);\n }\n\n &[disabled] {\n @include _mat-theme-overridable-elevation(0, $theme);\n }\n }\n}\n\n@mixin mat-button-typography($config) {\n .mat-button, .mat-raised-button, .mat-icon-button, .mat-stroked-button,\n .mat-flat-button, .mat-fab, .mat-mini-fab {\n font: {\n family: mat-font-family($config, button);\n size: mat-font-size($config, button);\n weight: mat-font-weight($config, button);\n }\n }\n}\n\n\n\n\n\n\n@mixin mat-button-toggle-theme($theme) {\n $foreground: map-get($theme, foreground);\n $background: map-get($theme, background);\n $divider-color: mat-color($foreground, divider);\n\n .mat-button-toggle-standalone,\n .mat-button-toggle-group {\n @include _mat-theme-elevation(2, $theme);\n }\n\n .mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\n .mat-button-toggle-group-appearance-standard {\n box-shadow: none;\n }\n\n .mat-button-toggle {\n color: mat-color($foreground, hint-text);\n\n .mat-button-toggle-focus-overlay {\n background-color: mat-color($background, focused-button);\n }\n }\n\n .mat-button-toggle-appearance-standard {\n color: mat-color($foreground, text);\n background: mat-color($background, card);\n\n .mat-button-toggle-focus-overlay {\n background-color: mat-color($background, focused-button, 1);\n }\n }\n\n .mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\n border-left: solid 1px $divider-color;\n }\n\n [dir='rtl'] .mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\n border-left: none;\n border-right: solid 1px $divider-color;\n }\n\n .mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical {\n .mat-button-toggle + .mat-button-toggle {\n border-left: none;\n border-right: none;\n border-top: solid 1px $divider-color;\n }\n }\n\n .mat-button-toggle-checked {\n background-color: mat-color($background, selected-button);\n color: mat-color($foreground, secondary-text);\n\n &.mat-button-toggle-appearance-standard {\n color: mat-color($foreground, text);\n }\n }\n\n .mat-button-toggle-disabled {\n color: mat-color($foreground, disabled-button);\n background-color: mat-color($background, disabled-button-toggle);\n\n &.mat-button-toggle-appearance-standard {\n background: mat-color($background, card);\n }\n\n &.mat-button-toggle-checked {\n background-color: mat-color($background, selected-disabled-button);\n }\n }\n\n .mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\n .mat-button-toggle-group-appearance-standard {\n border: solid 1px $divider-color;\n }\n}\n\n@mixin mat-button-toggle-typography($config) {\n .mat-button-toggle {\n font-family: mat-font-family($config);\n }\n}\n\n\n\n\n\n\n\n@mixin mat-card-theme($theme) {\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n .mat-card {\n @include _mat-theme-overridable-elevation(1, $theme);\n background: mat-color($background, card);\n color: mat-color($foreground, text);\n\n // Needs extra specificity to be able to override the elevation selectors.\n &.mat-card-flat {\n @include _mat-theme-overridable-elevation(0, $theme);\n }\n }\n\n .mat-card-subtitle {\n color: mat-color($foreground, secondary-text);\n }\n}\n\n@mixin mat-card-typography($config) {\n .mat-card {\n font-family: mat-font-family($config);\n }\n\n .mat-card-title {\n font: {\n size: mat-font-size($config, headline);\n weight: mat-font-weight($config, title);\n }\n }\n\n .mat-card-header .mat-card-title {\n font-size: mat-font-size($config, title);\n }\n\n .mat-card-subtitle,\n .mat-card-content {\n font-size: mat-font-size($config, body-1);\n }\n}\n\n\n\n\n\n@mixin mat-checkbox-theme($theme) {\n $is-dark-theme: map-get($theme, is-dark);\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n\n // The color of the checkbox's checkmark / mixedmark.\n $checkbox-mark-color: mat-color($background, background);\n\n // NOTE(traviskaufman): While the spec calls for translucent blacks/whites for disabled colors,\n // this does not work well with elements layered on top of one another. To get around this we\n // blend the colors together based on the base color and the theme background.\n $white-30pct-opacity-on-dark: #686868;\n $black-26pct-opacity-on-light: #b0b0b0;\n $disabled-color: if($is-dark-theme, $white-30pct-opacity-on-dark, $black-26pct-opacity-on-light);\n\n .mat-checkbox-frame {\n border-color: mat-color($foreground, secondary-text);\n }\n\n .mat-checkbox-checkmark {\n fill: $checkbox-mark-color;\n }\n\n .mat-checkbox-checkmark-path {\n // !important is needed here because a stroke must be set as an\n // attribute on the SVG in order for line animation to work properly.\n stroke: $checkbox-mark-color !important;\n }\n\n .mat-checkbox-mixedmark {\n background-color: $checkbox-mark-color;\n }\n\n .mat-checkbox-indeterminate, .mat-checkbox-checked {\n &.mat-primary .mat-checkbox-background {\n background-color: mat-color($primary);\n }\n\n &.mat-accent .mat-checkbox-background {\n background-color: mat-color($accent);\n }\n\n &.mat-warn .mat-checkbox-background {\n background-color: mat-color($warn);\n }\n }\n\n .mat-checkbox-disabled {\n &.mat-checkbox-checked,\n &.mat-checkbox-indeterminate {\n .mat-checkbox-background {\n background-color: $disabled-color;\n }\n }\n\n &:not(.mat-checkbox-checked) {\n .mat-checkbox-frame {\n border-color: $disabled-color;\n }\n }\n\n .mat-checkbox-label {\n color: mat-color($foreground, secondary-text);\n }\n }\n\n // Switch this to a solid color since we're using `opacity`\n // to control how opaque the ripple should be.\n .mat-checkbox .mat-ripple-element {\n background-color: map_get(map-get($theme, foreground), base);\n }\n\n .mat-checkbox-checked:not(.mat-checkbox-disabled),\n .mat-checkbox:active:not(.mat-checkbox-disabled) {\n &.mat-primary .mat-ripple-element {\n background: mat-color($primary);\n }\n\n &.mat-accent .mat-ripple-element {\n background: mat-color($accent);\n }\n\n &.mat-warn .mat-ripple-element {\n background: mat-color($warn);\n }\n }\n}\n\n@mixin mat-checkbox-typography($config) {\n .mat-checkbox {\n font-family: mat-font-family($config);\n }\n\n // TODO(kara): Remove this style when fixing vertical baseline\n .mat-checkbox-layout .mat-checkbox-label {\n line-height: mat-line-height($config, body-2);\n }\n}\n\n\n\n\n\n\n$mat-chip-remove-font-size: 18px;\n\n@mixin mat-chips-color($foreground, $background) {\n background-color: $background;\n color: $foreground;\n\n .mat-chip-remove {\n color: $foreground;\n opacity: 0.4;\n }\n}\n\n\n// Applies the background color for a ripple element.\n// If the color value provided is not a Sass color,\n// we assume that we've been given a CSS variable.\n// Since we can't perform alpha-blending on a CSS variable,\n// we instead add the opacity directly to the ripple element.\n@mixin _mat-chips-ripple-background($palette, $default-contrast, $opacity) {\n $background-color: mat-color($palette, $default-contrast, $opacity);\n background-color: $background-color;\n @if (type-of($background-color) != color) {\n opacity: $opacity;\n }\n}\n\n@mixin mat-chips-theme-color($palette) {\n @include mat-chips-color(mat-color($palette, default-contrast), mat-color($palette));\n\n .mat-ripple-element {\n @include _mat-chips-ripple-background($palette, default-contrast, 0.1);\n }\n}\n\n@mixin mat-chips-theme($theme) {\n $is-dark-theme: map-get($theme, is-dark);\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n $unselected-background: mat-color($background, unselected-chip);\n $unselected-foreground: mat-color($foreground, text);\n\n .mat-chip.mat-standard-chip {\n @include mat-chips-color($unselected-foreground, $unselected-background);\n\n &:not(.mat-chip-disabled) {\n &:active {\n @include _mat-theme-elevation(3, $theme);\n }\n\n .mat-chip-remove:hover {\n opacity: 0.54;\n }\n }\n\n &.mat-chip-disabled {\n opacity: 0.4;\n }\n\n &::after {\n background: map_get($foreground, base);\n }\n }\n\n .mat-chip.mat-standard-chip.mat-chip-selected {\n &.mat-primary {\n @include mat-chips-theme-color($primary);\n }\n\n &.mat-warn {\n @include mat-chips-theme-color($warn);\n }\n\n &.mat-accent {\n @include mat-chips-theme-color($accent);\n }\n }\n}\n\n@mixin mat-chips-typography($config) {\n .mat-chip {\n font-size: mat-font-size($config, body-2);\n font-weight: mat-font-weight($config, body-2);\n\n .mat-chip-trailing-icon.mat-icon,\n .mat-chip-remove.mat-icon {\n font-size: $mat-chip-remove-font-size;\n }\n }\n}\n\n\n\n\n\n@mixin mat-table-theme($theme) {\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n .mat-table {\n background: mat-color($background, 'card');\n }\n\n .mat-table thead, .mat-table tbody, .mat-table tfoot,\n mat-header-row, mat-row, mat-footer-row,\n [mat-header-row], [mat-row], [mat-footer-row],\n .mat-table-sticky {\n background: inherit;\n }\n\n mat-row, mat-header-row, mat-footer-row,\n th.mat-header-cell, td.mat-cell, td.mat-footer-cell {\n border-bottom-color: mat-color($foreground, divider);\n }\n\n .mat-header-cell {\n color: mat-color($foreground, secondary-text);\n }\n\n .mat-cell, .mat-footer-cell {\n color: mat-color($foreground, text);\n }\n}\n\n@mixin mat-table-typography($config) {\n .mat-table {\n font-family: mat-font-family($config);\n }\n\n .mat-header-cell {\n font-size: mat-font-size($config, caption);\n font-weight: mat-font-weight($config, body-2);\n }\n\n .mat-cell, .mat-footer-cell {\n font-size: mat-font-size($config, body-1);\n }\n}\n\n\n\n\n\n\n\n$mat-datepicker-selected-today-box-shadow-width: 1px;\n$mat-datepicker-selected-fade-amount: 0.6;\n$mat-datepicker-today-fade-amount: 0.2;\n$mat-calendar-body-font-size: 13px !default;\n$mat-calendar-weekday-table-font-size: 11px !default;\n\n@mixin _mat-datepicker-color($palette) {\n .mat-calendar-body-selected {\n background-color: mat-color($palette);\n color: mat-color($palette, default-contrast);\n }\n\n .mat-calendar-body-disabled > .mat-calendar-body-selected {\n $background: mat-color($palette);\n\n @if (type-of($background) == color) {\n background-color: fade-out($background, $mat-datepicker-selected-fade-amount);\n }\n @else {\n // If we couldn't resolve to background to a color (e.g. it's a CSS variable),\n // fall back to fading the content out via `opacity`.\n opacity: $mat-datepicker-today-fade-amount;\n }\n }\n\n .mat-calendar-body-today.mat-calendar-body-selected {\n box-shadow: inset 0 0 0 $mat-datepicker-selected-today-box-shadow-width\n mat-color($palette, default-contrast);\n }\n}\n\n@mixin mat-datepicker-theme($theme) {\n $foreground: map-get($theme, foreground);\n $background: map-get($theme, background);\n\n .mat-calendar-arrow {\n border-top-color: mat-color($foreground, icon);\n }\n\n // The prev/next buttons need a bit more specificity to\n // avoid being overwritten by the .mat-icon-button.\n .mat-datepicker-toggle,\n .mat-datepicker-content .mat-calendar-next-button,\n .mat-datepicker-content .mat-calendar-previous-button {\n color: mat-color($foreground, icon);\n }\n\n .mat-calendar-table-header {\n color: mat-color($foreground, hint-text);\n }\n\n .mat-calendar-table-header-divider::after {\n background: mat-color($foreground, divider);\n }\n\n .mat-calendar-body-label {\n color: mat-color($foreground, secondary-text);\n }\n\n .mat-calendar-body-cell-content {\n color: mat-color($foreground, text);\n border-color: transparent;\n }\n\n .mat-calendar-body-disabled > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\n color: mat-color($foreground, disabled-text);\n }\n\n .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover,\n .cdk-keyboard-focused .mat-calendar-body-active,\n .cdk-program-focused .mat-calendar-body-active {\n & > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\n background-color: mat-color($background, hover);\n }\n }\n\n .mat-calendar-body-today:not(.mat-calendar-body-selected) {\n // Note: though it's not text, the border is a hint about the fact that this is today's date,\n // so we use the hint color.\n border-color: mat-color($foreground, hint-text);\n }\n\n .mat-calendar-body-disabled > .mat-calendar-body-today:not(.mat-calendar-body-selected) {\n $color: mat-color($foreground, hint-text);\n\n @if (type-of($color) == color) {\n border-color: fade-out($color, $mat-datepicker-today-fade-amount);\n }\n @else {\n // If the color didn't resolve to a color value, but something like a CSS variable, we can't\n // fade it out so we fall back to reducing the element opacity. Note that we don't use the\n // $mat-datepicker-today-fade-amount, because hint text usually has some opacity applied\n // to it already and we don't want them to stack on top of each other.\n opacity: 0.5;\n }\n }\n\n @include _mat-datepicker-color(map-get($theme, primary));\n\n .mat-datepicker-content {\n @include _mat-theme-elevation(4, $theme);\n background-color: mat-color($background, card);\n color: mat-color($foreground, text);\n\n &.mat-accent {\n @include _mat-datepicker-color(map-get($theme, accent));\n }\n\n &.mat-warn {\n @include _mat-datepicker-color(map-get($theme, warn));\n }\n }\n\n .mat-datepicker-content-touch {\n @include _mat-theme-elevation(0, $theme);\n }\n\n .mat-datepicker-toggle-active {\n color: mat-color(map-get($theme, primary), text);\n\n &.mat-accent {\n color: mat-color(map-get($theme, accent), text);\n }\n\n &.mat-warn {\n color: mat-color(map-get($theme, warn), text);\n }\n }\n}\n\n@mixin mat-datepicker-typography($config) {\n .mat-calendar {\n font-family: mat-font-family($config);\n }\n\n .mat-calendar-body {\n font-size: $mat-calendar-body-font-size;\n }\n\n .mat-calendar-body-label,\n .mat-calendar-period-button {\n font: {\n size: mat-font-size($config, button);\n weight: mat-font-weight($config, button);\n }\n }\n\n .mat-calendar-table-header th {\n font: {\n size: $mat-calendar-weekday-table-font-size;\n weight: mat-font-weight($config, body-1);\n }\n }\n}\n\n\n\n\n\n\n\n@mixin mat-dialog-theme($theme) {\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n .mat-dialog-container {\n @include _mat-theme-elevation(24, $theme);\n background: mat-color($background, dialog);\n color: mat-color($foreground, text);\n }\n}\n\n@mixin mat-dialog-typography($config) {\n .mat-dialog-title {\n @include mat-typography-level-to-styles($config, title);\n }\n}\n\n\n\n\n\n\n@mixin mat-expansion-panel-theme($theme) {\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n .mat-expansion-panel {\n @include _mat-theme-overridable-elevation(2, $theme);\n background: mat-color($background, card);\n color: mat-color($foreground, text);\n }\n\n .mat-action-row {\n border-top-color: mat-color($foreground, divider);\n }\n\n .mat-expansion-panel {\n & .mat-expansion-panel-header.cdk-keyboard-focused,\n & .mat-expansion-panel-header.cdk-program-focused,\n &:not(.mat-expanded) .mat-expansion-panel-header:hover {\n &:not([aria-disabled='true']) {\n background: mat-color($background, hover);\n }\n }\n }\n\n // Disable the hover on touch devices since it can appear like it is stuck. We can't use\n // `@media (hover)` above, because the desktop support browser support isn't great.\n @media (hover: none) {\n .mat-expansion-panel:not(.mat-expanded):not([aria-disabled='true'])\n .mat-expansion-panel-header:hover {\n background: mat-color($background, card);\n }\n }\n\n .mat-expansion-panel-header-title {\n color: mat-color($foreground, text);\n }\n\n .mat-expansion-panel-header-description,\n .mat-expansion-indicator::after {\n color: mat-color($foreground, secondary-text);\n }\n\n .mat-expansion-panel-header[aria-disabled='true'] {\n color: mat-color($foreground, disabled-button);\n\n .mat-expansion-panel-header-title,\n .mat-expansion-panel-header-description {\n color: inherit;\n }\n }\n}\n\n@mixin mat-expansion-panel-typography($config) {\n .mat-expansion-panel-header {\n font: {\n family: mat-font-family($config, subheading-1);\n size: mat-font-size($config, subheading-1);\n weight: mat-font-weight($config, subheading-1);\n }\n }\n\n .mat-expansion-panel-content {\n @include mat-typography-level-to-styles($config, body-1);\n }\n}\n\n\n\n\n// This mixin will ensure that lines that overflow the container will hide the overflow and\n// truncate neatly with an ellipsis.\n@mixin mat-truncate-line() {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n// Mixin to provide all mat-line styles, changing secondary font size based on whether the list\n// is in dense mode.\n@mixin mat-line-base($secondary-font-size) {\n .mat-line {\n @include mat-truncate-line();\n display: block;\n box-sizing: border-box;\n\n // all lines but the top line should have smaller text\n &:nth-child(n+2) {\n font-size: $secondary-font-size;\n }\n }\n}\n\n// This mixin normalizes default element styles, e.g. font weight for heading text.\n@mixin mat-normalize-text() {\n & > * {\n margin: 0;\n padding: 0;\n font-weight: normal;\n font-size: inherit;\n }\n}\n\n// This mixin provides base styles for the wrapper around mat-line elements in a list.\n@mixin mat-line-wrapper-base() {\n @include mat-normalize-text();\n\n display: flex;\n flex-direction: column;\n width: 100%;\n box-sizing: border-box;\n overflow: hidden;\n\n // Must remove wrapper when lines are empty or it takes up horizontal\n // space and pushes other elements to the right.\n &:empty {\n display: none;\n }\n}\n\n\n\n// Include this empty mixin for consistency with the other components.\n@mixin mat-grid-list-theme($theme) { }\n\n@mixin mat-grid-list-typography($config) {\n .mat-grid-tile-header,\n .mat-grid-tile-footer {\n @include mat-line-base(mat-font-size($config, caption));\n font-size: mat-font-size($config, body-1);\n }\n}\n\n\n\n\n// Include this empty mixin for consistency with the other components.\n@mixin mat-icon-theme($theme) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n .mat-icon {\n &.mat-primary {\n color: mat-color($primary, text);\n }\n\n &.mat-accent {\n color: mat-color($accent, text);\n }\n\n &.mat-warn {\n color: mat-color($warn, text);\n }\n }\n}\n\n@mixin mat-icon-typography($config) { }\n\n\n\n\n\n// Renders a gradient for showing the dashed line when the input is disabled.\n// Unlike using a border, a gradient allows us to adjust the spacing of the dotted line\n// to match the Material Design spec.\n@mixin mat-control-disabled-underline($color) {\n background-image: linear-gradient(to right, $color 0%, $color 33%, transparent 0%);\n background-size: 4px 100%;\n background-repeat: repeat-x;\n}\n\n// Figures out the color of the placeholder for a form control.\n// Used primarily to prevent the various form controls from\n// becoming out of sync since these colors aren't in a palette.\n@function _mat-control-placeholder-color($theme) {\n $foreground: map-get($theme, foreground);\n $is-dark-theme: map-get($theme, is-dark);\n @return mat-color($foreground, secondary-text, if($is-dark-theme, 0.5, 0.42));\n}\n\n\n/* stylelint-disable material/no-prefixes */\n@mixin user-select($value) {\n -webkit-user-select: $value;\n -moz-user-select: $value;\n -ms-user-select: $value;\n user-select: $value;\n}\n\n@mixin input-placeholder {\n &::placeholder {\n @content;\n }\n\n &::-moz-placeholder {\n @content;\n }\n\n &::-webkit-input-placeholder {\n @content;\n }\n\n &:-ms-input-placeholder {\n @content;\n }\n}\n\n@mixin cursor-grab {\n cursor: -webkit-grab;\n cursor: grab;\n}\n\n@mixin cursor-grabbing {\n cursor: -webkit-grabbing;\n cursor: grabbing;\n}\n\n@mixin backface-visibility($value) {\n -webkit-backface-visibility: $value;\n backface-visibility: $value;\n}\n/* stylelint-enable */\n\n\n\n@mixin mat-input-theme($theme) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $foreground: map-get($theme, foreground);\n\n .mat-form-field-type-mat-native-select .mat-form-field-infix::after {\n color: mat-color($foreground, secondary-text);\n }\n\n .mat-input-element:disabled,\n .mat-form-field-type-mat-native-select.mat-form-field-disabled .mat-form-field-infix::after {\n color: mat-color($foreground, disabled-text);\n }\n\n .mat-input-element {\n caret-color: mat-color($primary, text);\n\n @include input-placeholder {\n color: _mat-control-placeholder-color($theme);\n }\n\n // On dark themes we set the native `select` color to some shade of white,\n // however the color propagates to all of the `option` elements, which are\n // always on a white background inside the dropdown, causing them to blend in.\n // Since we can't change background of the dropdown, we need to explicitly\n // reset the color of the options to something dark.\n @if (map-get($theme, is-dark)) {\n option {\n color: $dark-primary-text;\n }\n\n option:disabled {\n color: $dark-disabled-text;\n }\n }\n }\n\n .mat-accent .mat-input-element {\n caret-color: mat-color($accent, text);\n }\n\n .mat-warn .mat-input-element,\n .mat-form-field-invalid .mat-input-element {\n caret-color: mat-color($warn, text);\n }\n\n .mat-form-field-type-mat-native-select.mat-form-field-invalid .mat-form-field-infix::after {\n color: mat-color($warn, text);\n }\n}\n\n@mixin mat-input-typography($config) {\n // The unit-less line-height from the font config.\n $line-height: mat-line-height($config, input);\n\n // The amount of space between the top of the line and the top of the actual text\n // (as a fraction of the font-size).\n $line-spacing: ($line-height - 1) / 2;\n\n // elements seem to have their height set slightly too large on Safari causing the text to\n // be misaligned w.r.t. the placeholder. Adding this margin corrects it.\n input.mat-input-element {\n margin-top: -$line-spacing * 1em;\n }\n}\n\n\n\n\n\n\n\n@mixin mat-list-theme($theme) {\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n .mat-list-base {\n .mat-list-item {\n color: mat-color($foreground, text);\n }\n\n .mat-list-option {\n color: mat-color($foreground, text);\n }\n\n .mat-subheader {\n color: mat-color($foreground, secondary-text);\n }\n }\n\n .mat-list-item-disabled {\n background-color: mat-color($background, disabled-list-option);\n }\n\n .mat-list-option,\n .mat-nav-list .mat-list-item,\n .mat-action-list .mat-list-item {\n &:hover, &:focus {\n background: mat-color($background, 'hover');\n }\n }\n\n .mat-list-single-selected-option {\n &, &:hover, &:focus {\n background: mat-color($background, hover, 0.12);\n }\n }\n}\n\n@mixin mat-list-typography($config) {\n $font-family: mat-font-family($config);\n\n .mat-list-item {\n font-family: $font-family;\n }\n\n .mat-list-option {\n font-family: $font-family;\n }\n\n // Default list\n .mat-list-base {\n .mat-list-item {\n font-size: mat-font-size($config, subheading-2);\n @include mat-line-base(mat-font-size($config, body-1));\n }\n\n .mat-list-option {\n font-size: mat-font-size($config, subheading-2);\n @include mat-line-base(mat-font-size($config, body-1));\n }\n\n .mat-subheader {\n font-family: mat-font-family($config, body-2);\n font-size: mat-font-size($config, body-2);\n font-weight: mat-font-weight($config, body-2);\n }\n }\n\n // Dense list\n .mat-list-base[dense] {\n .mat-list-item {\n font-size: mat-font-size($config, caption);\n @include mat-line-base(mat-font-size($config, caption));\n }\n\n .mat-list-option {\n font-size: mat-font-size($config, caption);\n @include mat-line-base(mat-font-size($config, caption));\n }\n\n .mat-subheader {\n font-family: $font-family;\n font-size: mat-font-size($config, caption);\n font-weight: mat-font-weight($config, body-2);\n }\n }\n}\n\n\n\n\n\n\n\n@mixin mat-menu-theme($theme) {\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n .mat-menu-panel {\n @include _mat-theme-overridable-elevation(4, $theme);\n background: mat-color($background, 'card');\n }\n\n .mat-menu-item {\n background: transparent;\n color: mat-color($foreground, 'text');\n\n &[disabled] {\n &, &::after {\n color: mat-color($foreground, 'disabled');\n }\n }\n }\n\n .mat-menu-item .mat-icon-no-color,\n .mat-menu-item-submenu-trigger::after {\n color: mat-color($foreground, 'icon');\n }\n\n .mat-menu-item:hover,\n .mat-menu-item.cdk-program-focused,\n .mat-menu-item.cdk-keyboard-focused,\n .mat-menu-item-highlighted {\n &:not([disabled]) {\n background: mat-color($background, 'hover');\n }\n }\n}\n\n@mixin mat-menu-typography($config) {\n .mat-menu-item {\n font: {\n family: mat-font-family($config, body-1);\n size: mat-font-size($config, body-1);\n weight: mat-font-weight($config, body-1);\n }\n }\n}\n\n\n\n\n\n\n@mixin mat-paginator-theme($theme) {\n $foreground: map-get($theme, foreground);\n $background: map-get($theme, background);\n\n .mat-paginator {\n background: mat-color($background, 'card');\n }\n\n .mat-paginator,\n .mat-paginator-page-size .mat-select-trigger {\n color: mat-color($foreground, secondary-text);\n }\n\n .mat-paginator-decrement,\n .mat-paginator-increment {\n border-top: 2px solid mat-color($foreground, 'icon');\n border-right: 2px solid mat-color($foreground, 'icon');\n }\n\n .mat-paginator-first,\n .mat-paginator-last {\n border-top: 2px solid mat-color($foreground, 'icon');\n }\n\n .mat-icon-button[disabled] {\n .mat-paginator-decrement,\n .mat-paginator-increment,\n .mat-paginator-first,\n .mat-paginator-last {\n border-color: mat-color($foreground, 'disabled');\n }\n }\n}\n\n@mixin mat-paginator-typography($config) {\n .mat-paginator,\n .mat-paginator-page-size .mat-select-trigger {\n font: {\n family: mat-font-family($config, caption);\n size: mat-font-size($config, caption);\n }\n }\n}\n\n\n\n\n\n@mixin mat-progress-bar-theme($theme) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n\n .mat-progress-bar-background {\n fill: mat-color($primary, lighter);\n }\n\n .mat-progress-bar-buffer {\n background-color: mat-color($primary, lighter);\n }\n\n .mat-progress-bar-fill::after {\n background-color: mat-color($primary);\n }\n\n .mat-progress-bar.mat-accent {\n .mat-progress-bar-background {\n fill: mat-color($accent, lighter);\n }\n\n .mat-progress-bar-buffer {\n background-color: mat-color($accent, lighter);\n }\n\n .mat-progress-bar-fill::after {\n background-color: mat-color($accent);\n }\n }\n\n .mat-progress-bar.mat-warn {\n .mat-progress-bar-background {\n fill: mat-color($warn, lighter);\n }\n\n .mat-progress-bar-buffer {\n background-color: mat-color($warn, lighter);\n }\n\n .mat-progress-bar-fill::after {\n background-color: mat-color($warn);\n }\n }\n}\n\n@mixin mat-progress-bar-typography($config) { }\n\n\n\n\n\n\n@mixin mat-progress-spinner-theme($theme) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n\n .mat-progress-spinner, .mat-spinner {\n circle {\n stroke: mat-color($primary);\n }\n\n &.mat-accent circle {\n stroke: mat-color($accent);\n }\n\n &.mat-warn circle {\n stroke: mat-color($warn);\n }\n }\n}\n\n@mixin mat-progress-spinner-typography($config) { }\n\n\n\n\n\n@mixin _mat-radio-color($palette) {\n &.mat-radio-checked .mat-radio-outer-circle {\n border-color: mat-color($palette);\n }\n\n .mat-radio-inner-circle,\n .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),\n &.mat-radio-checked .mat-radio-persistent-ripple,\n &:active .mat-radio-persistent-ripple {\n background-color: mat-color($palette);\n }\n}\n\n@mixin mat-radio-theme($theme) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n .mat-radio-outer-circle {\n border-color: mat-color($foreground, secondary-text);\n }\n\n .mat-radio-button {\n &.mat-primary {\n @include _mat-radio-color($primary);\n }\n\n &.mat-accent {\n @include _mat-radio-color($accent);\n }\n\n &.mat-warn {\n @include _mat-radio-color($warn);\n }\n\n // This needs extra specificity, because the classes above are combined\n // (e.g. `.mat-radio-button.mat-accent`) which increases their specificity a lot.\n // TODO: consider making the selectors into descendants (`.mat-primary .mat-radio-button`).\n &.mat-radio-disabled {\n &.mat-radio-checked .mat-radio-outer-circle,\n .mat-radio-outer-circle {\n border-color: mat-color($foreground, disabled);\n }\n\n .mat-radio-ripple .mat-ripple-element,\n .mat-radio-inner-circle {\n background-color: mat-color($foreground, disabled);\n }\n\n .mat-radio-label-content {\n color: mat-color($foreground, disabled);\n }\n }\n\n // Switch this to a solid color since we're using `opacity`\n // to control how opaque the ripple should be.\n .mat-ripple-element {\n background-color: map_get($foreground, base);\n }\n }\n}\n\n@mixin mat-radio-typography($config) {\n .mat-radio-button {\n font-family: mat-font-family($config);\n }\n}\n\n\n\n\n\n\n\n\n@mixin mat-select-theme($theme) {\n $foreground: map-get($theme, foreground);\n $background: map-get($theme, background);\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n\n .mat-select-value {\n color: mat-color($foreground, text);\n }\n\n .mat-select-placeholder {\n color: _mat-control-placeholder-color($theme);\n }\n\n .mat-select-disabled .mat-select-value {\n color: mat-color($foreground, disabled-text);\n }\n\n .mat-select-arrow {\n color: mat-color($foreground, secondary-text);\n }\n\n .mat-select-panel {\n background: mat-color($background, card);\n @include _mat-theme-overridable-elevation(4, $theme);\n\n .mat-option.mat-selected:not(.mat-option-multiple) {\n background: mat-color($background, hover, 0.12);\n }\n }\n\n .mat-form-field {\n &.mat-focused {\n &.mat-primary .mat-select-arrow {\n color: mat-color($primary, text);\n }\n\n &.mat-accent .mat-select-arrow {\n color: mat-color($accent, text);\n }\n\n &.mat-warn .mat-select-arrow {\n color: mat-color($warn, text);\n }\n }\n\n .mat-select.mat-select-invalid .mat-select-arrow {\n color: mat-color($warn, text);\n }\n\n .mat-select.mat-select-disabled .mat-select-arrow {\n color: mat-color($foreground, disabled-text);\n }\n }\n}\n\n@mixin mat-select-typography($config) {\n // The unit-less line-height from the font config.\n $line-height: mat-line-height($config, input);\n\n .mat-select {\n font-family: mat-font-family($config);\n }\n\n .mat-select-trigger {\n height: $line-height * 1em;\n }\n}\n\n\n\n\n\n\n@mixin mat-sidenav-theme($theme) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n $drawer-background-color: mat-color($background, dialog);\n $drawer-container-background-color: mat-color($background, background);\n $drawer-push-background-color: mat-color($background, dialog);\n $drawer-side-border: solid 1px mat-color($foreground, divider);\n\n .mat-drawer-container {\n background-color: $drawer-container-background-color;\n color: mat-color($foreground, text);\n }\n\n .mat-drawer {\n background-color: $drawer-background-color;\n color: mat-color($foreground, text);\n\n &.mat-drawer-push {\n background-color: $drawer-push-background-color;\n }\n\n &:not(.mat-drawer-side) {\n // The elevation of z-16 is noted in the design specifications.\n // See https://material.io/design/components/navigation-drawer.html\n @include _mat-theme-elevation(16, $theme);\n }\n }\n\n .mat-drawer-side {\n border-right: $drawer-side-border;\n\n &.mat-drawer-end {\n border-left: $drawer-side-border;\n border-right: none;\n }\n }\n\n [dir='rtl'] .mat-drawer-side {\n border-left: $drawer-side-border;\n border-right: none;\n\n &.mat-drawer-end {\n border-left: none;\n border-right: $drawer-side-border;\n }\n }\n\n .mat-drawer-backdrop.mat-drawer-shown {\n $opacity: 0.6;\n $backdrop-color: mat-color($background, card, $opacity);\n\n @if (type-of($backdrop-color) == color) {\n // We use invert() here to have the darken the background color expected to be used. If the\n // background is light, we use a dark backdrop. If the background is dark,\n // we use a light backdrop.\n background-color: invert($backdrop-color);\n }\n @else {\n // If we couldn't resolve the backdrop color to a color value, fall back to using\n // `opacity` to make it opaque since its end value could be a solid color.\n background-color: $backdrop-color;\n opacity: $opacity;\n }\n }\n}\n\n@mixin mat-sidenav-typography($config) { }\n\n\n\n\n\n\n@mixin _mat-slide-toggle-checked($palette, $thumb-checked-hue) {\n &.mat-checked {\n .mat-slide-toggle-thumb {\n background-color: mat-color($palette, $thumb-checked-hue);\n }\n\n .mat-slide-toggle-bar {\n // Opacity is determined from the specs for the selection controls.\n // See: https://material.io/design/components/selection-controls.html#specs\n background-color: mat-color($palette, $thumb-checked-hue, 0.54);\n }\n\n .mat-ripple-element {\n // Set no opacity for the ripples because the ripple opacity will be adjusted dynamically\n // based on the type of interaction with the slide-toggle (e.g. for hover, focus)\n background-color: mat-color($palette, $thumb-checked-hue);\n }\n }\n}\n\n@mixin mat-slide-toggle-theme($theme) {\n $is-dark: map_get($theme, is-dark);\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n // Color hues are based on the specs which briefly show the hues that are applied to a switch.\n // The 2018 specs no longer describe how dark switches should look like. Due to the lack of\n // information for dark themed switches, we partially keep the old behavior that is based on\n // the previous specifications. For the checked color we always use the `default` hue because\n // that follows MDC and also makes it easier for people to create a custom theme without needing\n // to specify each hue individually.\n $thumb-unchecked-hue: if($is-dark, 400, 50);\n $thumb-checked-hue: default;\n\n $bar-unchecked-color: mat-color($foreground, disabled);\n $ripple-unchecked-color: mat-color($foreground, base);\n\n .mat-slide-toggle {\n @include _mat-slide-toggle-checked($accent, $thumb-checked-hue);\n\n &.mat-primary {\n @include _mat-slide-toggle-checked($primary, $thumb-checked-hue);\n }\n\n &.mat-warn {\n @include _mat-slide-toggle-checked($warn, $thumb-checked-hue);\n }\n\n &:not(.mat-checked) .mat-ripple-element {\n // Set no opacity for the ripples because the ripple opacity will be adjusted dynamically\n // based on the type of interaction with the slide-toggle (e.g. for hover, focus)\n background-color: $ripple-unchecked-color;\n }\n }\n\n .mat-slide-toggle-thumb {\n @include _mat-theme-elevation(1, $theme);\n background-color: mat-color($mat-grey, $thumb-unchecked-hue);\n }\n\n .mat-slide-toggle-bar {\n background-color: $bar-unchecked-color;\n }\n}\n\n@mixin mat-slide-toggle-typography($config) {\n .mat-slide-toggle-content {\n font-family: mat-font-family($config);\n }\n}\n\n\n\n\n\n@mixin _mat-slider-inner-content-theme($palette) {\n .mat-slider-track-fill,\n .mat-slider-thumb,\n .mat-slider-thumb-label {\n background-color: mat-color($palette);\n }\n\n .mat-slider-thumb-label-text {\n color: mat-color($palette, default-contrast);\n }\n}\n\n@mixin mat-slider-theme($theme) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n $mat-slider-off-color: mat-color($foreground, slider-off);\n $mat-slider-off-focused-color: mat-color($foreground, slider-off-active);\n $mat-slider-disabled-color: mat-color($foreground, slider-off);\n $mat-slider-labeled-min-value-thumb-color: mat-color($foreground, slider-min);\n $mat-slider-labeled-min-value-thumb-label-color: mat-color($foreground, slider-off);\n $mat-slider-tick-opacity: 0.7;\n $mat-slider-tick-color: mat-color($foreground, base, $mat-slider-tick-opacity);\n $mat-slider-tick-size: 2px;\n\n .mat-slider-track-background {\n background-color: $mat-slider-off-color;\n }\n\n .mat-primary {\n @include _mat-slider-inner-content-theme($primary);\n }\n\n .mat-accent {\n @include _mat-slider-inner-content-theme($accent);\n }\n\n .mat-warn {\n @include _mat-slider-inner-content-theme($warn);\n }\n\n .mat-slider-focus-ring {\n $opacity: 0.2;\n $color: mat-color($accent, default, $opacity);\n background-color: $color;\n\n // `mat-color` uses `rgba` for the opacity which won't work with\n // CSS variables so we need to use `opacity` as a fallback.\n @if (type-of($color) != color) {\n opacity: $opacity;\n }\n }\n\n .mat-slider:hover,\n .cdk-focused {\n .mat-slider-track-background {\n background-color: $mat-slider-off-focused-color;\n }\n }\n\n .mat-slider-disabled {\n .mat-slider-track-background,\n .mat-slider-track-fill,\n .mat-slider-thumb {\n background-color: $mat-slider-disabled-color;\n }\n\n &:hover {\n .mat-slider-track-background {\n background-color: $mat-slider-disabled-color;\n }\n }\n }\n\n .mat-slider-min-value {\n .mat-slider-focus-ring {\n $opacity: 0.12;\n $color: mat-color($foreground, base, $opacity);\n background-color: $color;\n\n // `mat-color` uses `rgba` for the opacity which won't work with\n // CSS variables so we need to use `opacity` as a fallback.\n @if (type-of($color) != color) {\n opacity: $opacity;\n }\n }\n\n &.mat-slider-thumb-label-showing {\n .mat-slider-thumb,\n .mat-slider-thumb-label {\n background-color: $mat-slider-labeled-min-value-thumb-color;\n }\n\n &.cdk-focused {\n .mat-slider-thumb,\n .mat-slider-thumb-label {\n background-color: $mat-slider-labeled-min-value-thumb-label-color;\n }\n }\n }\n\n &:not(.mat-slider-thumb-label-showing) {\n .mat-slider-thumb {\n border-color: $mat-slider-off-color;\n background-color: transparent;\n }\n\n &:hover,\n &.cdk-focused {\n .mat-slider-thumb {\n border-color: $mat-slider-off-focused-color;\n }\n\n &.mat-slider-disabled .mat-slider-thumb {\n border-color: $mat-slider-disabled-color;\n }\n }\n }\n }\n\n .mat-slider-has-ticks .mat-slider-wrapper::after {\n border-color: $mat-slider-tick-color;\n\n // `mat-color` uses `rgba` for the opacity which won't work with\n // CSS variables so we need to use `opacity` as a fallback.\n @if (type-of($mat-slider-tick-color) != color) {\n opacity: $mat-slider-tick-opacity;\n }\n }\n\n .mat-slider-horizontal .mat-slider-ticks {\n background-image: repeating-linear-gradient(to right, $mat-slider-tick-color,\n $mat-slider-tick-color $mat-slider-tick-size, transparent 0, transparent);\n // Firefox doesn't draw the gradient correctly with 'to right'\n // (see https://bugzilla.mozilla.org/show_bug.cgi?id=1314319).\n background-image: -moz-repeating-linear-gradient(0.0001deg, $mat-slider-tick-color,\n $mat-slider-tick-color $mat-slider-tick-size, transparent 0, transparent);\n\n // `mat-color` uses `rgba` for the opacity which won't work with\n // CSS variables so we need to use `opacity` as a fallback.\n @if (type-of($mat-slider-tick-color) != color) {\n opacity: $mat-slider-tick-opacity;\n }\n }\n\n .mat-slider-vertical .mat-slider-ticks {\n background-image: repeating-linear-gradient(to bottom, $mat-slider-tick-color,\n $mat-slider-tick-color $mat-slider-tick-size, transparent 0, transparent);\n\n // `mat-color` uses `rgba` for the opacity which won't work with\n // CSS variables so we need to use `opacity` as a fallback.\n @if (type-of($mat-slider-tick-color) != color) {\n opacity: $mat-slider-tick-opacity;\n }\n }\n}\n\n@mixin mat-slider-typography($config) {\n .mat-slider-thumb-label-text {\n font: {\n family: mat-font-family($config);\n size: mat-font-size($config, caption);\n weight: mat-font-weight($config, body-2);\n }\n }\n}\n\n\n\n\n\n@mixin mat-stepper-theme($theme) {\n $foreground: map-get($theme, foreground);\n $background: map-get($theme, background);\n $primary: map-get($theme, primary);\n $warn: map-get($theme, warn);\n\n .mat-step-header {\n &.cdk-keyboard-focused,\n &.cdk-program-focused,\n &:hover {\n background-color: mat-color($background, hover);\n }\n\n // On touch devices the :hover state will linger on the element after a tap.\n // Reset it via `@media` after the declaration, because the media query isn't\n // supported by all browsers yet.\n @media (hover: none) {\n &:hover {\n background: none;\n }\n }\n\n .mat-step-label,\n .mat-step-optional {\n // TODO(josephperrott): Update to using a corrected disabled-text contrast\n // instead of secondary-text.\n color: mat-color($foreground, secondary-text);\n }\n\n .mat-step-icon {\n // TODO(josephperrott): Update to using a corrected disabled-text contrast\n // instead of secondary-text.\n background-color: mat-color($foreground, secondary-text);\n color: mat-color($primary, default-contrast);\n }\n\n .mat-step-icon-selected,\n .mat-step-icon-state-done,\n .mat-step-icon-state-edit {\n background-color: mat-color($primary);\n color: mat-color($primary, default-contrast);\n }\n\n .mat-step-icon-state-error {\n background-color: transparent;\n color: mat-color($warn, text);\n }\n\n .mat-step-label.mat-step-label-active {\n color: mat-color($foreground, text);\n }\n\n .mat-step-label.mat-step-label-error {\n color: mat-color($warn, text);\n }\n }\n\n .mat-stepper-horizontal, .mat-stepper-vertical {\n background-color: mat-color($background, card);\n }\n\n .mat-stepper-vertical-line::before {\n border-left-color: mat-color($foreground, divider);\n }\n\n .mat-horizontal-stepper-header::before,\n .mat-horizontal-stepper-header::after,\n .mat-stepper-horizontal-line {\n border-top-color: mat-color($foreground, divider);\n }\n}\n\n@mixin mat-stepper-typography($config) {\n .mat-stepper-vertical, .mat-stepper-horizontal {\n font-family: mat-font-family($config);\n }\n\n .mat-step-label {\n font: {\n size: mat-font-size($config, body-1);\n weight: mat-font-weight($config, body-1);\n };\n }\n\n .mat-step-sub-label-error {\n font-weight: normal;\n }\n\n .mat-step-label-error {\n font-size: mat-font-size($config, body-2);\n }\n\n .mat-step-label-selected {\n font: {\n size: mat-font-size($config, body-2);\n weight: mat-font-weight($config, body-2);\n };\n }\n}\n\n@mixin mat-sort-theme($theme) {\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n .mat-sort-header-arrow {\n $table-background: mat-color($background, 'card');\n $text-color: mat-color($foreground, secondary-text);\n\n // Because the arrow is made up of multiple elements that are stacked on top of each other,\n // we can't use the semi-trasparent color from the theme directly. If the value is a color\n // *type*, we convert it into a solid color by taking the opacity from the rgba value and\n // using the value to determine the percentage of the background to put into foreground\n // when mixing the colors together. Otherwise, if it resolves to something different\n // (e.g. it resolves to a CSS variable), we use the color directly.\n @if (type-of($table-background) == color and type-of($text-color) == color) {\n $text-opacity: opacity($text-color);\n color: mix($table-background, rgba($text-color, 1), (1 - $text-opacity) * 100%);\n }\n @else {\n color: $text-color;\n }\n }\n}\n\n@mixin mat-sort-typography($config) { }\n\n\n\n\n\n@mixin mat-tabs-theme($theme) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n $header-border: 1px solid mat-color($foreground, divider);\n\n .mat-tab-nav-bar,\n .mat-tab-header {\n border-bottom: $header-border;\n }\n\n .mat-tab-group-inverted-header {\n .mat-tab-nav-bar,\n .mat-tab-header {\n border-top: $header-border;\n border-bottom: none;\n }\n }\n\n .mat-tab-label, .mat-tab-link {\n color: mat-color($foreground, text);\n\n &.mat-tab-disabled {\n color: mat-color($foreground, disabled-text);\n }\n }\n\n .mat-tab-header-pagination-chevron {\n border-color: mat-color($foreground, text);\n }\n\n .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: mat-color($foreground, disabled-text);\n }\n\n // Remove header border when there is a background color\n .mat-tab-group[class*='mat-background-'] .mat-tab-header,\n .mat-tab-nav-bar[class*='mat-background-'] {\n border-bottom: none;\n border-top: none;\n }\n\n .mat-tab-group, .mat-tab-nav-bar {\n $theme-colors: (\n primary: $primary,\n accent: $accent,\n warn: $warn\n );\n\n @each $name, $color in $theme-colors {\n // Set the foreground color of the tabs\n &.mat-#{$name} {\n @include _mat-tab-label-focus($color);\n @include _mat-ink-bar($color);\n\n // Override ink bar when background color is the same\n &.mat-background-#{$name} {\n @include _mat-ink-bar($color, default-contrast);\n }\n }\n }\n\n @each $name, $color in $theme-colors {\n // Set background color of the tabs and override focus color\n &.mat-background-#{$name} {\n @include _mat-tab-label-focus($color);\n @include _mat-tabs-background($color);\n }\n }\n }\n}\n\n@mixin _mat-ink-bar($color, $hue: default) {\n .mat-ink-bar {\n background-color: mat-color($color, $hue);\n }\n}\n\n@mixin _mat-tab-label-focus($tab-focus-color) {\n .mat-tab-label,\n .mat-tab-link {\n &.cdk-keyboard-focused,\n &.cdk-program-focused {\n &:not(.mat-tab-disabled) {\n background-color: mat-color($tab-focus-color, lighter, 0.3);\n }\n }\n }\n}\n\n@mixin _mat-tabs-background($background-color) {\n // Set background color for the tab group\n .mat-tab-header, .mat-tab-links, .mat-tab-header-pagination {\n background-color: mat-color($background-color);\n }\n\n // Set labels to contrast against background\n .mat-tab-label, .mat-tab-link {\n color: mat-color($background-color, default-contrast);\n\n &.mat-tab-disabled {\n color: mat-color($background-color, default-contrast, 0.4);\n }\n }\n\n // Set pagination chevrons to contrast background\n .mat-tab-header-pagination-chevron {\n border-color: mat-color($background-color, default-contrast);\n }\n\n .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\n border-color: mat-color($background-color, default-contrast, 0.4);\n }\n\n // Set ripples color to be the contrast color of the new background. Otherwise the ripple\n // color will be based on the app background color.\n .mat-ripple-element {\n background-color: mat-color($background-color, default-contrast, 0.12);\n }\n}\n\n@mixin mat-tabs-typography($config) {\n .mat-tab-group {\n font-family: mat-font-family($config);\n }\n\n .mat-tab-label, .mat-tab-link {\n font: {\n family: mat-font-family($config, button);\n size: mat-font-size($config, button);\n weight: mat-font-weight($config, button);\n }\n }\n}\n\n\n\n\n\n\n@mixin _mat-toolbar-color($palette) {\n background: mat-color($palette);\n color: mat-color($palette, default-contrast);\n}\n\n@mixin _mat-toolbar-form-field-overrides {\n .mat-form-field-underline,\n .mat-form-field-ripple,\n .mat-focused .mat-form-field-ripple {\n background-color: currentColor;\n }\n\n .mat-form-field-label,\n .mat-focused .mat-form-field-label,\n .mat-select-value,\n .mat-select-arrow,\n .mat-form-field.mat-focused .mat-select-arrow {\n color: inherit;\n }\n\n .mat-input-element {\n caret-color: currentColor;\n }\n}\n\n@mixin mat-toolbar-theme($theme) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n .mat-toolbar {\n background: mat-color($background, app-bar);\n color: mat-color($foreground, text);\n\n &.mat-primary {\n @include _mat-toolbar-color($primary);\n }\n\n &.mat-accent {\n @include _mat-toolbar-color($accent);\n }\n\n &.mat-warn {\n @include _mat-toolbar-color($warn);\n }\n\n @include _mat-toolbar-form-field-overrides;\n }\n}\n\n@mixin mat-toolbar-typography($config) {\n .mat-toolbar,\n .mat-toolbar h1,\n .mat-toolbar h2,\n .mat-toolbar h3,\n .mat-toolbar h4,\n .mat-toolbar h5,\n .mat-toolbar h6 {\n @include mat-typography-level-to-styles($config, title);\n margin: 0;\n }\n}\n\n\n\n\n\n$mat-tooltip-target-height: 22px;\n$mat-tooltip-font-size: 10px;\n$mat-tooltip-vertical-padding: ($mat-tooltip-target-height - $mat-tooltip-font-size) / 2;\n\n$mat-tooltip-handset-target-height: 30px;\n$mat-tooltip-handset-font-size: 14px;\n$mat-tooltip-handset-vertical-padding:\n ($mat-tooltip-handset-target-height - $mat-tooltip-handset-font-size) / 2;\n\n@mixin mat-tooltip-theme($theme) {\n $background: map-get($theme, background);\n\n .mat-tooltip {\n background: mat-color($background, tooltip, 0.9);\n }\n}\n\n@mixin mat-tooltip-typography($config) {\n .mat-tooltip {\n font-family: mat-font-family($config);\n font-size: $mat-tooltip-font-size;\n padding-top: $mat-tooltip-vertical-padding;\n padding-bottom: $mat-tooltip-vertical-padding;\n }\n\n .mat-tooltip-handset {\n font-size: $mat-tooltip-handset-font-size;\n padding-top: $mat-tooltip-handset-vertical-padding;\n padding-bottom: $mat-tooltip-handset-vertical-padding;\n }\n}\n\n\n\n\n\n@mixin mat-snack-bar-theme($theme) {\n $is-dark-theme: map-get($theme, is-dark);\n $accent: map-get($theme, accent);\n\n .mat-snack-bar-container {\n // Use the primary text on the dark theme, even though the lighter one uses\n // a secondary, because the contrast on the light primary text is poor.\n color: if($is-dark-theme, $dark-primary-text, $light-secondary-text);\n background: if($is-dark-theme, map-get($mat-grey, 50), #323232);\n\n @include _mat-theme-elevation(6, $theme);\n }\n\n .mat-simple-snackbar-action {\n color: if($is-dark-theme, inherit, mat-color($accent, text));\n }\n}\n\n@mixin mat-snack-bar-typography($config) {\n .mat-simple-snackbar {\n font: {\n family: mat-font-family($config, body-1);\n size: mat-font-size($config, body-1);\n }\n }\n\n .mat-simple-snackbar-action {\n line-height: 1;\n font: {\n family: inherit;\n size: inherit;\n weight: mat-font-weight($config, button);\n }\n }\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Theme styles that only apply to the fill appearance of the form-field.\n\n@mixin mat-form-field-fill-theme($theme) {\n $foreground: map-get($theme, foreground);\n $is-dark-theme: map-get($theme, is-dark);\n\n $fill-background: mat-color($foreground, base, if($is-dark-theme, 0.1, 0.04));\n $fill-disabled-background: mat-color($foreground, base, if($is-dark-theme, 0.05, 0.02));\n $underline-color: mat-color($foreground, divider, if($is-dark-theme, 0.5, 0.42));\n $label-disabled-color: mat-color($foreground, disabled-text);\n\n .mat-form-field-appearance-fill {\n .mat-form-field-flex {\n background-color: $fill-background;\n }\n\n &.mat-form-field-disabled .mat-form-field-flex {\n background-color: $fill-disabled-background;\n }\n\n .mat-form-field-underline::before {\n background-color: $underline-color;\n }\n\n &.mat-form-field-disabled {\n .mat-form-field-label {\n color: $label-disabled-color;\n }\n\n .mat-form-field-underline::before {\n background-color: transparent;\n }\n }\n }\n}\n\n// Used to make instances of the _mat-form-field-label-floating mixin negligibly different,\n// and prevent Google's CSS Optimizer from collapsing the declarations. This is needed because some\n// of the selectors contain pseudo-classes not recognized in all browsers. If a browser encounters\n// an unknown pseudo-class it will discard the entire rule set.\n$mat-form-field-fill-dedupe: 0;\n\n// Applies a floating label above the form field control itself.\n@mixin _mat-form-field-fill-label-floating($font-scale, $infix-padding, $infix-margin-top) {\n transform: translateY(-$infix-margin-top - $infix-padding + $mat-form-field-fill-dedupe)\n scale($font-scale);\n width: 100% / $font-scale + $mat-form-field-fill-dedupe;\n\n $mat-form-field-fill-dedupe: $mat-form-field-fill-dedupe + 0.00001 !global;\n}\n\n@mixin mat-form-field-fill-typography($config) {\n // The unit-less line-height from the font config.\n $line-height: mat-line-height($config, input);\n // The amount to scale the font for the floating label and subscript.\n $subscript-font-scale: 0.75;\n // The padding on top of the infix.\n $infix-padding-top: 0.25em;\n // The padding below the infix.\n $infix-padding-bottom: 0.75em;\n // The margin applied to the form-field-infix to reserve space for the floating label.\n $infix-margin-top: 1em * $line-height * $subscript-font-scale;\n // The amount we offset the label from the input text in the fill appearance.\n $fill-appearance-label-offset: -0.5em;\n\n .mat-form-field-appearance-fill {\n .mat-form-field-infix {\n padding: $infix-padding-top 0 $infix-padding-bottom 0;\n }\n\n .mat-form-field-label {\n top: $infix-margin-top + $infix-padding-top;\n margin-top: $fill-appearance-label-offset;\n }\n\n &.mat-form-field-can-float {\n &.mat-form-field-should-float .mat-form-field-label,\n .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n @include _mat-form-field-fill-label-floating(\n $subscript-font-scale, $infix-padding-top + $fill-appearance-label-offset,\n $infix-margin-top);\n }\n\n // Server-side rendered matInput with a label attribute but label not shown\n // (used as a pure CSS stand-in for mat-form-field-should-float).\n .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper\n .mat-form-field-label {\n @include _mat-form-field-fill-label-floating(\n $subscript-font-scale, $infix-padding-top + $fill-appearance-label-offset,\n $infix-margin-top);\n }\n }\n }\n}\n\n\n\n\n\n\n\n// Theme styles that only apply to the legacy appearance of the form-field.\n\n@mixin mat-form-field-legacy-theme($theme) {\n $foreground: map-get($theme, foreground);\n $is-dark-theme: map-get($theme, is-dark);\n\n $label-color: mat-color($foreground, secondary-text);\n $underline-color: mat-color($foreground, divider, if($is-dark-theme, 0.7, 0.42));\n\n .mat-form-field-appearance-legacy {\n .mat-form-field-label {\n color: $label-color;\n }\n\n .mat-hint {\n color: $label-color;\n }\n\n .mat-form-field-underline {\n background-color: $underline-color;\n }\n\n &.mat-form-field-disabled .mat-form-field-underline {\n @include mat-control-disabled-underline($underline-color);\n }\n }\n}\n\n// Used to make instances of the _mat-form-field-label-floating mixin negligibly different,\n// and prevent Google's CSS Optimizer from collapsing the declarations. This is needed because some\n// of the selectors contain pseudo-classes not recognized in all browsers. If a browser encounters\n// an unknown pseudo-class it will discard the entire rule set.\n$mat-form-field-legacy-dedupe: 0;\n\n// Applies a floating label above the form field control itself.\n@mixin _mat-form-field-legacy-label-floating($font-scale, $infix-padding, $infix-margin-top) {\n // We use perspective to fix the text blurriness as described here:\n // http://www.useragentman.com/blog/2014/05/04/fixing-typography-inside-of-2-d-css-transforms/\n // This results in a small jitter after the label floats on Firefox, which the\n // translateZ fixes.\n transform: translateY(-$infix-margin-top - $infix-padding) scale($font-scale) perspective(100px)\n translateZ(0.001px + $mat-form-field-legacy-dedupe);\n // The tricks above used to smooth out the animation on chrome and firefox actually make things\n // worse on IE, so we don't include them in the IE version.\n -ms-transform: translateY(-$infix-margin-top - $infix-padding + $mat-form-field-legacy-dedupe)\n scale($font-scale);\n\n width: 100% / $font-scale + $mat-form-field-legacy-dedupe;\n\n $mat-form-field-legacy-dedupe: $mat-form-field-legacy-dedupe + 0.00001 !global;\n}\n\n// Same as mixin above, but omits the translateZ for printing purposes.\n@mixin _mat-form-field-legacy-label-floating-print($font-scale, $infix-padding, $infix-margin-top) {\n // This results in a small jitter after the label floats on Firefox, which the\n // translateZ fixes.\n transform: translateY(-$infix-margin-top - $infix-padding + $mat-form-field-legacy-dedupe)\n scale($font-scale);\n // The tricks above used to smooth out the animation on chrome and firefox actually make things\n // worse on IE, so we don't include them in the IE version.\n $mat-form-field-legacy-dedupe: $mat-form-field-legacy-dedupe + 0.00001 !global;\n}\n\n@mixin mat-form-field-legacy-typography($config) {\n // The unit-less line-height from the font config.\n $line-height: mat-line-height($config, input);\n // The amount to scale the font for the floating label and subscript.\n $subscript-font-scale: 0.75;\n // The amount of space between the top of the line and the top of the actual text\n // (as a fraction of the font-size).\n $line-spacing: ($line-height - 1) / 2;\n // The padding on the infix. Mocks show half of the text size, but seem to measure from the edge\n // of the text itself, not the edge of the line; therefore we subtract off the line spacing.\n $infix-padding: 0.5em - $line-spacing;\n // The margin applied to the form-field-infix to reserve space for the floating label.\n $infix-margin-top: 1em * $line-height * $subscript-font-scale;\n // The space between the bottom of the .mat-form-field-flex area and the subscript wrapper.\n // Mocks show half of the text size, but this margin is applied to an element with the subscript\n // text font size, so we need to divide by the scale factor to make it half of the original text\n // size. We again need to subtract off the line spacing since the mocks measure to the edge of the\n // text, not the edge of the line.\n $subscript-margin-top: 0.5em / $subscript-font-scale - ($line-spacing * 2);\n // The padding applied to the form-field-wrapper to reserve space for the subscript, since it's\n // absolutely positioned. This is a combination of the subscript's margin and line-height, but we\n // need to multiply by the subscript font scale factor since the wrapper has a larger font size.\n $wrapper-padding-bottom: ($subscript-margin-top + $line-height) * $subscript-font-scale;\n\n .mat-form-field-appearance-legacy {\n .mat-form-field-wrapper {\n padding-bottom: $wrapper-padding-bottom;\n }\n\n .mat-form-field-infix {\n padding: $infix-padding 0;\n }\n\n &.mat-form-field-can-float {\n &.mat-form-field-should-float .mat-form-field-label,\n .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n @include _mat-form-field-legacy-label-floating(\n $subscript-font-scale, $infix-padding, $infix-margin-top);\n }\n\n // @breaking-change 8.0.0 will rely on AutofillMonitor instead.\n .mat-form-field-autofill-control:-webkit-autofill + .mat-form-field-label-wrapper\n .mat-form-field-label {\n @include _mat-form-field-legacy-label-floating(\n $subscript-font-scale, $infix-padding, $infix-margin-top);\n }\n\n // Server-side rendered matInput with a label attribute but label not shown\n // (used as a pure CSS stand-in for mat-form-field-should-float).\n .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper\n .mat-form-field-label {\n @include _mat-form-field-legacy-label-floating(\n $subscript-font-scale, $infix-padding, $infix-margin-top);\n }\n }\n\n .mat-form-field-label {\n top: $infix-margin-top + $infix-padding;\n }\n\n .mat-form-field-underline {\n // We want the underline to start at the end of the content box, not the padding box,\n // so we move it up by the padding amount.\n bottom: $wrapper-padding-bottom;\n }\n\n .mat-form-field-subscript-wrapper {\n margin-top: $subscript-margin-top;\n\n // We want the subscript to start at the end of the content box, not the padding box,\n // so we move it up by the padding amount (adjusted for the smaller font size);\n top: calc(100% - #{$wrapper-padding-bottom / $subscript-font-scale});\n }\n }\n\n // translateZ causes the label to not appear while printing, so we override it to not\n // apply translateZ while printing\n @media print {\n .mat-form-field-appearance-legacy {\n &.mat-form-field-can-float {\n &.mat-form-field-should-float .mat-form-field-label,\n .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n @include _mat-form-field-legacy-label-floating-print(\n $subscript-font-scale, $infix-padding, $infix-margin-top);\n }\n\n // @breaking-change 8.0.0 will rely on AutofillMonitor instead.\n .mat-form-field-autofill-control:-webkit-autofill + .mat-form-field-label-wrapper\n .mat-form-field-label {\n @include _mat-form-field-legacy-label-floating-print(\n $subscript-font-scale, $infix-padding, $infix-margin-top);\n }\n\n // Server-side rendered matInput with a label attribute but label not shown\n // (used as a pure CSS stand-in for mat-form-field-should-float).\n .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper\n .mat-form-field-label {\n @include _mat-form-field-legacy-label-floating-print(\n $subscript-font-scale, $infix-padding, $infix-margin-top);\n }\n }\n }\n }\n}\n\n\n\n\n\n\n\n// Theme styles that only apply to the outline appearance of the form-field.\n\n@mixin mat-form-field-outline-theme($theme) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $foreground: map-get($theme, foreground);\n $is-dark-theme: map-get($theme, is-dark);\n\n $label-disabled-color: mat-color($foreground, disabled-text);\n $outline-color: mat-color($foreground, divider, if($is-dark-theme, 0.3, 0.12));\n $outline-color-hover: mat-color($foreground, divider, if($is-dark-theme, 1, 0.87));\n $outline-color-primary: mat-color($primary);\n $outline-color-accent: mat-color($accent);\n $outline-color-warn: mat-color($warn);\n $outline-color-disabled: mat-color($foreground, divider, if($is-dark-theme, 0.15, 0.06));\n\n .mat-form-field-appearance-outline {\n .mat-form-field-outline {\n color: $outline-color;\n }\n\n .mat-form-field-outline-thick {\n color: $outline-color-hover;\n }\n\n &.mat-focused {\n .mat-form-field-outline-thick {\n color: $outline-color-primary;\n }\n\n &.mat-accent .mat-form-field-outline-thick {\n color: $outline-color-accent;\n }\n\n &.mat-warn .mat-form-field-outline-thick {\n color: $outline-color-warn;\n }\n }\n\n // Class repeated so that rule is specific enough to override focused accent color case.\n &.mat-form-field-invalid.mat-form-field-invalid {\n .mat-form-field-outline-thick {\n color: $outline-color-warn;\n }\n }\n\n &.mat-form-field-disabled {\n .mat-form-field-label {\n color: $label-disabled-color;\n }\n\n .mat-form-field-outline {\n color: $outline-color-disabled;\n }\n }\n }\n}\n\n// Used to make instances of the _mat-form-field-label-floating mixin negligibly different,\n// and prevent Google's CSS Optimizer from collapsing the declarations. This is needed because some\n// of the selectors contain pseudo-classes not recognized in all browsers. If a browser encounters\n// an unknown pseudo-class it will discard the entire rule set.\n$mat-form-field-outline-dedupe: 0;\n\n// Applies a floating label above the form field control itself.\n@mixin _mat-form-field-outline-label-floating($font-scale, $infix-padding, $infix-margin-top) {\n transform: translateY(-$infix-margin-top - $infix-padding + $mat-form-field-outline-dedupe)\n scale($font-scale);\n width: 100% / $font-scale + $mat-form-field-outline-dedupe;\n\n $mat-form-field-outline-dedupe: $mat-form-field-outline-dedupe + 0.00001 !global;\n}\n\n@mixin mat-form-field-outline-typography($config) {\n // The unit-less line-height from the font config.\n $line-height: mat-line-height($config, input);\n // The amount to scale the font for the floating label and subscript.\n $subscript-font-scale: 0.75;\n // The padding above and below the infix.\n $infix-padding: 1em;\n // The margin applied to the form-field-infix to reserve space for the floating label.\n $infix-margin-top: 1em * $line-height * $subscript-font-scale;\n // The space between the bottom of the .mat-form-field-flex area and the subscript wrapper.\n // Mocks show half of the text size, but this margin is applied to an element with the subscript\n // text font size, so we need to divide by the scale factor to make it half of the original text\n // size.\n $subscript-margin-top: 0.5em / $subscript-font-scale;\n // The padding applied to the form-field-wrapper to reserve space for the subscript, since it's\n // absolutely positioned. This is a combination of the subscript's margin and line-height, but we\n // need to multiply by the subscript font scale factor since the wrapper has a larger font size.\n $wrapper-padding-bottom: ($subscript-margin-top + $line-height) * $subscript-font-scale;\n // The amount we offset the label from the input text in the outline appearance.\n $outline-appearance-label-offset: -0.25em;\n\n .mat-form-field-appearance-outline {\n .mat-form-field-infix {\n padding: $infix-padding 0 $infix-padding 0;\n }\n\n .mat-form-field-label {\n top: $infix-margin-top + $infix-padding;\n margin-top: $outline-appearance-label-offset;\n }\n\n &.mat-form-field-can-float {\n &.mat-form-field-should-float .mat-form-field-label,\n .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n @include _mat-form-field-outline-label-floating(\n $subscript-font-scale, $infix-padding + $outline-appearance-label-offset,\n $infix-margin-top);\n }\n\n // Server-side rendered matInput with a label attribute but label not shown\n // (used as a pure CSS stand-in for mat-form-field-should-float).\n .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper\n .mat-form-field-label {\n @include _mat-form-field-outline-label-floating(\n $subscript-font-scale, $infix-padding + $outline-appearance-label-offset,\n $infix-margin-top);\n }\n }\n }\n}\n\n\n\n\n\n\n\n// Theme styles that only apply to the standard appearance of the form-field.\n\n@mixin mat-form-field-standard-theme($theme) {\n $foreground: map-get($theme, foreground);\n $is-dark-theme: map-get($theme, is-dark);\n\n $underline-color: mat-color($foreground, divider, if($is-dark-theme, 0.7, 0.42));\n\n .mat-form-field-appearance-standard {\n .mat-form-field-underline {\n background-color: $underline-color;\n }\n\n &.mat-form-field-disabled .mat-form-field-underline {\n @include mat-control-disabled-underline($underline-color);\n }\n }\n}\n\n@mixin mat-form-field-standard-typography($config) {}\n\n\n// Theme styles that apply to all appearances of the form-field.\n@mixin mat-form-field-theme($theme) {\n $primary: map-get($theme, primary);\n $accent: map-get($theme, accent);\n $warn: map-get($theme, warn);\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n $is-dark-theme: map-get($theme, is-dark);\n\n // Label colors. Required is used for the `*` star shown in the label.\n $label-color: mat-color($foreground, secondary-text, if($is-dark-theme, 0.7, 0.6));\n $focused-label-color: mat-color($primary, text);\n $required-label-color: mat-color($accent, text);\n\n // Underline colors.\n $underline-color-base: mat-color($foreground, divider, if($is-dark-theme, 1, 0.87));\n $underline-color-accent: mat-color($accent, text);\n $underline-color-warn: mat-color($warn, text);\n $underline-focused-color: mat-color($primary, text);\n\n .mat-form-field-label {\n color: $label-color;\n }\n\n .mat-hint {\n color: $label-color;\n }\n\n .mat-form-field.mat-focused .mat-form-field-label {\n color: $focused-label-color;\n\n &.mat-accent {\n color: $underline-color-accent;\n }\n\n &.mat-warn {\n color: $underline-color-warn;\n }\n }\n\n .mat-focused .mat-form-field-required-marker {\n color: $required-label-color;\n }\n\n .mat-form-field-ripple {\n background-color: $underline-color-base;\n }\n\n .mat-form-field.mat-focused {\n .mat-form-field-ripple {\n background-color: $underline-focused-color;\n\n &.mat-accent {\n background-color: $underline-color-accent;\n }\n\n &.mat-warn {\n background-color: $underline-color-warn;\n }\n }\n }\n\n .mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid) {\n .mat-form-field-infix::after {\n color: $underline-focused-color;\n }\n\n &.mat-accent .mat-form-field-infix::after {\n color: $underline-color-accent;\n }\n\n &.mat-warn .mat-form-field-infix::after {\n color: $underline-color-warn;\n }\n }\n\n // Styling for the error state of the form field. Note that while the same can be\n // achieved with the ng-* classes, we use this approach in order to ensure that the same\n // logic is used to style the error state and to show the error messages.\n .mat-form-field.mat-form-field-invalid {\n .mat-form-field-label {\n color: $underline-color-warn;\n\n &.mat-accent,\n .mat-form-field-required-marker {\n color: $underline-color-warn;\n }\n }\n\n .mat-form-field-ripple,\n .mat-form-field-ripple.mat-accent {\n background-color: $underline-color-warn;\n }\n }\n\n .mat-error {\n color: $underline-color-warn;\n }\n\n @include mat-form-field-legacy-theme($theme);\n @include mat-form-field-standard-theme($theme);\n @include mat-form-field-fill-theme($theme);\n @include mat-form-field-outline-theme($theme);\n}\n\n// Used to make instances of the _mat-form-field-label-floating mixin negligibly different,\n// and prevent Google's CSS Optimizer from collapsing the declarations. This is needed because some\n// of the selectors contain pseudo-classes not recognized in all browsers. If a browser encounters\n// an unknown pseudo-class it will discard the entire rule set.\n$mat-form-field-dedupe: 0;\n\n// Applies a floating label above the form field control itself.\n@mixin _mat-form-field-label-floating($font-scale, $infix-padding, $infix-margin-top) {\n transform: translateY(-$infix-margin-top - $infix-padding + $mat-form-field-dedupe)\n scale($font-scale);\n width: 100% / $font-scale + $mat-form-field-dedupe;\n\n $mat-form-field-dedupe: $mat-form-field-dedupe + 0.00001 !global;\n}\n\n@mixin mat-form-field-typography($config) {\n // The unit-less line-height from the font config.\n $line-height: mat-line-height($config, input);\n\n // The amount to scale the font for the floating label and subscript.\n $subscript-font-scale: 0.75;\n // The amount to scale the font for the prefix and suffix icons.\n $prefix-suffix-icon-font-scale: 1.5;\n\n // The padding on the infix. Mocks show half of the text size.\n $infix-padding: 0.5em;\n // The margin applied to the form-field-infix to reserve space for the floating label.\n $infix-margin-top: 1em * $line-height * $subscript-font-scale;\n // Font size to use for the label and subscript text.\n $subscript-font-size: $subscript-font-scale * 100%;\n // Font size to use for the for the prefix and suffix icons.\n $prefix-suffix-icon-font-size: $prefix-suffix-icon-font-scale * 100%;\n // The space between the bottom of the .mat-form-field-flex area and the subscript wrapper.\n // Mocks show half of the text size, but this margin is applied to an element with the subscript\n // text font size, so we need to divide by the scale factor to make it half of the original text\n // size.\n $subscript-margin-top: 0.5em / $subscript-font-scale;\n // The padding applied to the form-field-wrapper to reserve space for the subscript, since it's\n // absolutely positioned. This is a combination of the subscript's margin and line-height, but we\n // need to multiply by the subscript font scale factor since the wrapper has a larger font size.\n $wrapper-padding-bottom: ($subscript-margin-top + $line-height) * $subscript-font-scale;\n\n .mat-form-field {\n @include mat-typography-level-to-styles($config, input);\n }\n\n .mat-form-field-wrapper {\n padding-bottom: $wrapper-padding-bottom;\n }\n\n .mat-form-field-prefix,\n .mat-form-field-suffix {\n // Allow icons in a prefix or suffix to adapt to the correct size.\n .mat-icon {\n font-size: $prefix-suffix-icon-font-size;\n line-height: $line-height;\n }\n\n // Allow icon buttons in a prefix or suffix to adapt to the correct size.\n .mat-icon-button {\n height: $prefix-suffix-icon-font-scale * 1em;\n width: $prefix-suffix-icon-font-scale * 1em;\n\n .mat-icon {\n height: $line-height * 1em;\n line-height: $line-height;\n }\n }\n }\n\n .mat-form-field-infix {\n padding: $infix-padding 0;\n // Throws off the baseline if we do it as a real margin, so we do it as a border instead.\n border-top: $infix-margin-top solid transparent;\n }\n\n .mat-form-field-can-float {\n &.mat-form-field-should-float .mat-form-field-label,\n .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\n @include _mat-form-field-label-floating(\n $subscript-font-scale, $infix-padding, $infix-margin-top);\n }\n\n // Server-side rendered matInput with a label attribute but label not shown\n // (used as a pure CSS stand-in for mat-form-field-should-float).\n .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper\n .mat-form-field-label {\n @include _mat-form-field-label-floating(\n $subscript-font-scale, $infix-padding, $infix-margin-top);\n }\n }\n\n .mat-form-field-label-wrapper {\n top: -$infix-margin-top;\n padding-top: $infix-margin-top;\n }\n\n .mat-form-field-label {\n top: $infix-margin-top + $infix-padding;\n }\n\n .mat-form-field-underline {\n // We want the underline to start at the end of the content box, not the padding box,\n // so we move it up by the padding amount.\n bottom: $wrapper-padding-bottom;\n }\n\n .mat-form-field-subscript-wrapper {\n font-size: $subscript-font-size;\n margin-top: $subscript-margin-top;\n\n // We want the subscript to start at the end of the content box, not the padding box,\n // so we move it up by the padding amount (adjusted for the smaller font size);\n top: calc(100% - #{$wrapper-padding-bottom / $subscript-font-scale});\n }\n\n @include mat-form-field-legacy-typography($config);\n @include mat-form-field-standard-typography($config);\n @include mat-form-field-fill-typography($config);\n @include mat-form-field-outline-typography($config);\n}\n\n\n\n\n\n@mixin mat-tree-theme($theme) {\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n .mat-tree {\n background: mat-color($background, 'card');\n }\n\n .mat-tree-node,\n .mat-nested-tree-node {\n color: mat-color($foreground, text);\n }\n}\n\n@mixin mat-tree-typography($config) {\n .mat-tree {\n font-family: mat-font-family($config);\n }\n\n .mat-tree-node,\n .mat-nested-tree-node {\n font-weight: mat-font-weight($config, body-1);\n font-size: mat-font-size($config, body-1);\n }\n}\n\n\n\n// Includes all of the typographic styles.\n@mixin angular-material-typography($config: null) {\n @if $config == null {\n $config: mat-typography-config();\n }\n\n @include mat-badge-typography($config);\n @include mat-base-typography($config);\n @include mat-autocomplete-typography($config);\n @include mat-bottom-sheet-typography($config);\n @include mat-button-typography($config);\n @include mat-button-toggle-typography($config);\n @include mat-card-typography($config);\n @include mat-checkbox-typography($config);\n @include mat-chips-typography($config);\n @include mat-table-typography($config);\n @include mat-datepicker-typography($config);\n @include mat-dialog-typography($config);\n @include mat-expansion-panel-typography($config);\n @include mat-form-field-typography($config);\n @include mat-grid-list-typography($config);\n @include mat-icon-typography($config);\n @include mat-input-typography($config);\n @include mat-menu-typography($config);\n @include mat-paginator-typography($config);\n @include mat-progress-bar-typography($config);\n @include mat-progress-spinner-typography($config);\n @include mat-radio-typography($config);\n @include mat-select-typography($config);\n @include mat-sidenav-typography($config);\n @include mat-slide-toggle-typography($config);\n @include mat-slider-typography($config);\n @include mat-stepper-typography($config);\n @include mat-sort-typography($config);\n @include mat-tabs-typography($config);\n @include mat-toolbar-typography($config);\n @include mat-tooltip-typography($config);\n @include mat-list-typography($config);\n @include mat-option-typography($config);\n @include mat-optgroup-typography($config);\n @include mat-snack-bar-typography($config);\n @include mat-tree-typography($config);\n}\n\n\n// Mixin that renders all of the core styles that are not theme-dependent.\n@mixin mat-core($typography-config: null) {\n @include angular-material-typography($typography-config);\n @include mat-ripple();\n @include cdk-a11y();\n @include cdk-overlay();\n @include cdk-text-field();\n}\n\n// Mixin that renders all of the core styles that depend on the theme.\n@mixin mat-core-theme($theme) {\n @include mat-ripple-theme($theme);\n @include mat-option-theme($theme);\n @include mat-optgroup-theme($theme);\n @include mat-pseudo-checkbox-theme($theme);\n\n // Provides external CSS classes for each elevation value. Each CSS class is formatted as\n // `mat-elevation-z$zValue` where `$zValue` corresponds to the z-space to which the element is\n // elevated.\n @for $zValue from 0 through 24 {\n .#{$_mat-elevation-prefix}#{$zValue} {\n @include _mat-theme-elevation($zValue, $theme);\n }\n }\n\n // Wrapper element that provides the theme background when the user's content isn't\n // inside of a `mat-sidenav-container`. Note that we need to exclude the ampersand\n // selector in case the mixin is included at the top level.\n .mat-app-background#{if(&, ', &.mat-app-background', '')} {\n $background: map-get($theme, background);\n $foreground: map-get($theme, foreground);\n\n background-color: mat-color($background, background);\n color: mat-color($foreground, text);\n }\n\n // Marker that is used to determine whether the user has added a theme to their page.\n @at-root {\n .mat-theme-loaded-marker {\n display: none;\n }\n }\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n@mixin mat-divider-theme($theme) {\n $foreground: map-get($theme, foreground);\n\n .mat-divider {\n border-top-color: mat-color($foreground, divider);\n }\n\n .mat-divider-vertical {\n border-right-color: mat-color($foreground, divider);\n }\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Create a theme.\n@mixin angular-material-theme($theme) {\n @include mat-core-theme($theme);\n @include mat-autocomplete-theme($theme);\n @include mat-badge-theme($theme);\n @include mat-bottom-sheet-theme($theme);\n @include mat-button-theme($theme);\n @include mat-button-toggle-theme($theme);\n @include mat-card-theme($theme);\n @include mat-checkbox-theme($theme);\n @include mat-chips-theme($theme);\n @include mat-table-theme($theme);\n @include mat-datepicker-theme($theme);\n @include mat-dialog-theme($theme);\n @include mat-divider-theme($theme);\n @include mat-expansion-panel-theme($theme);\n @include mat-form-field-theme($theme);\n @include mat-grid-list-theme($theme);\n @include mat-icon-theme($theme);\n @include mat-input-theme($theme);\n @include mat-list-theme($theme);\n @include mat-menu-theme($theme);\n @include mat-paginator-theme($theme);\n @include mat-progress-bar-theme($theme);\n @include mat-progress-spinner-theme($theme);\n @include mat-radio-theme($theme);\n @include mat-select-theme($theme);\n @include mat-sidenav-theme($theme);\n @include mat-slide-toggle-theme($theme);\n @include mat-slider-theme($theme);\n @include mat-stepper-theme($theme);\n @include mat-sort-theme($theme);\n @include mat-tabs-theme($theme);\n @include mat-toolbar-theme($theme);\n @include mat-tooltip-theme($theme);\n @include mat-tree-theme($theme);\n @include mat-snack-bar-theme($theme);\n}\n","/*=======================*\\\n|| MDS Colours ||\n\\*=======================*/\n\n$color-brand-electric-blue: #2251ff;\n$color-brand-deep-blue: #051c2c;\n$color-brand-cyan: #00a9f4;\n\n/*=======================*\\\n|| Application Colours ||\n\\*=======================*/\n\n$font-dark: #000;\n$font-light: #fff;\n\n$success: #43a047;\n$success-light: lighten($success, 10);\n$success-dark: darken($success, 10);\n$green1: #219653;\n\n$pending: #ffb300;\n$pending-light: lighten($pending, 10);\n$pending-dark: darken($pending, 10);\n\n$error: #e53935;\n$error-light: lighten($error, 10);\n$error-dark: darken($error, 10);\n\n$color-primary: #1937ea;\n$color-primary-light: lighten($color-primary, 10);\n$color-primary-dark: darken($color-primary, 10);\n\n$color-secondary: #4285F4;\n$color-secondary-light: lighten($color-secondary, 10);\n$color-secondary-dark: darken($color-secondary, 10);\n\n$background: #f0f0f0;\n$footer-back: #263238;\n$header-back: linear-gradient(to right, #051C2C, #051C2C 40%, #0B2453 60%, #1F40E6 100%);\n\n$color-ternary: #051c2c;\n\n/*===========*\\\n|| Fonts ||\n\\*===========*/\n\n$font-stack: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n\n$heading-font: \"LarishMcKinsey\", 'Georgia', serif;\n$font: $font-stack;\n\n$font-family-primary: \"McKinsey Sans\", \"Helvetica Neue\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\n$font-family-secondary: \"Bower\", Georgia, \"Times New Roman\" serif;\n\n$base-size: 16px;\n$tablet-size: 16px;\n$mobile-size: 16px;\n\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n\n$break-mobile: 450px;\n$break-tablet: 800px;\n$break-laptop: 1024px;\n\n$break-landscape-mobile: 800px;\n$break-landscape-tablet: 1048px;\n$break-landscape-laptop: 1280px;\n","@import './variables';\n\n@mixin hide-text-overflow {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n@mixin box-shadow($color: #000, $depth: 1) {\n box-shadow: 0 1px 3px 1px * ($depth - 1) rgba(#000, .2),\n 0 1px 1px 0 rgba(#000, .14),\n 0 2px 1px -1px rgba(#000, .12);\n}\n\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n\n@mixin respond-to($media) {\n @if $media == mobile {\n @media only screen and (orientation: portrait) and (max-width: $break-mobile) {\n @content;\n }\n @media only screen and (orientation: landscape) and (max-width: $break-landscape-mobile) {\n @content;\n }\n } @else if $media == mobile-landscape {\n @media only screen and (orientation: landscape) and (max-width: $break-landscape-mobile) {\n @content;\n }\n } @else if $media == mobile-portrait {\n @media only screen and (orientation: portrait) and (max-width: $break-mobile) {\n @content;\n }\n } @else if $media == not-mobile {\n @media only screen and (orientation: portrait) and (min-width: $break-mobile + 1) {\n @content;\n }\n @media only screen and (orientation: landscape) and (min-width: $break-landscape-mobile + 1) {\n @content;\n }\n } @else if $media == laptop {\n @media only screen and (orientation: portrait) and (min-width: $break-tablet + 1) and (max-width: $break-laptop) {\n @content;\n }\n @media only screen and (orientation: landscape) and (min-width: $break-landscape-tablet + 1) and (max-width: $break-landscape-laptop) {\n @content;\n }\n } @else if $media == laptop-landscape {\n @media only screen and (orientation: landscape) and (min-width: $break-landscape-tablet + 1) and (max-width: $break-landscape-laptop) {\n @content;\n }\n } @else if $media == laptop-portrait {\n @media only screen and (orientation: portrait) and (min-width: $break-tablet + 1) and (max-width: $break-laptop) {\n @content;\n }\n } @else if $media == lat {\n @media only screen and (orientation: portrait) and (min-width: $break-mobile + 1) and (max-width: $break-tablet) {\n @content;\n }\n @media only screen and (orientation: landscape) and (min-width: $break-landscape-mobile + 1) and (max-width: $break-landscape-tablet) {\n @content;\n }\n } @else if $media == tablet {\n @media only screen and (orientation: portrait) and (min-width: $break-mobile + 1) and (max-width: $break-tablet) {\n @content;\n }\n @media only screen and (orientation: landscape) and (min-width: $break-landscape-mobile + 1) and (max-width: $break-landscape-tablet) {\n @content;\n }\n } @else if $media == tablet-landscape {\n @media only screen and (orientation: landscape) and (min-width: $break-landscape-mobile + 1) and (max-width: $break-landscape-tablet) {\n @content;\n }\n } @else if $media == tablet-portrait {\n @media only screen and (orientation: portrait) and (min-width: $break-mobile + 1) and (max-width: $break-tablet) {\n @content;\n }\n } @else if ($media == tablet-mobile or $media == not-desktop) {\n @media only screen and (orientation: portrait) and (max-width: $break-tablet) {\n @content;\n }\n @media only screen and (orientation: landscape) and (max-width: $break-landscape-tablet) {\n @content;\n }\n }@else if $media == tablet-landscape {\n @media only screen and (orientation: landscape) and (min-width: $break-landscape-mobile + 1) and (max-width: $break-landscape-tablet) {\n @content;\n }\n } @else if $media == tablet-portrait {\n @media only screen and (orientation: portrait) and (min-width: $break-mobile + 1) and (max-width: $break-tablet) {\n @content;\n }\n } @else if ($media == tablet-mobile or $media == not-desktop) {\n @media only screen and (orientation: portrait) and (max-width: $break-tablet) {\n @content;\n }\n @media only screen and (orientation: landscape) and (max-width: $break-landscape-tablet) {\n @content;\n }\n } @else if $media == desktop {\n @media only screen and (orientation: portrait) and (min-width: $break-tablet) {\n @content;\n }\n @media only screen and (orientation: landscape) and (min-width: $break-landscape-tablet) {\n @content;\n }\n } @else if $media == desktop-landscape {\n @media only screen and (orientation: landscape) and (min-width: $break-landscape-tablet) {\n @content;\n }\n } @else if $media == desktop-portrait {\n @media only screen and (orientation: portrait) and (min-width: $break-tablet) {\n @content;\n }\n } @else if $media == landscape {\n @media only screen and (orientation: landscape) {\n @content;\n }\n } @else if $media == portrait {\n @media only screen and (orientation: portrait) {\n @content;\n }\n }\n}\n","$primary: #1F40E6;\n$form-label: #051C2C;\n$secondary-label: #767676;\n$border: #B3B3B3;\n$background-checkbox-disabled: #D0D0D0;\n$chip-color: #333333;\n$placeholder-color: #7F7F7F;\n$background-color: #F0F0F0;\n$page-background-color: #F8F9FA;\n$selected-option: #E6E6E6;\n$color-brand-yellow: #ffd048;\n$light-yellow: #fff3ce;\n$coachmark-text: #6f4d00;\n$error-color: #E12E40;\n$no-filters-color: #BCBCBC;\n$results-list-background-color: #F4F4F4;\n$primary-highlight: #2251FF;\n$scrollbar-color: #757575;\n\n$available-color: #5D9D52;\n$available-by-request-color: #F5B53F;\n$in-use-color: #D4483E;\n$not-bookable-color: #CCCCCC;\n\n$modal-body-heading: #4D4D4D;\n$alert-overlay-bg: rgba(5, 28, 44, 0.85);\n\n$success: #43a047;\n$success-light: lighten($success, 10);\n$success-dark: darken($success, 10);\n\n$pending: #ffb300;\n$pending-light: lighten($pending, 10);\n$pending-dark: darken($pending, 10);\n\n$error: #e53935;\n$error-light: lighten($error, 10);\n$error-dark: darken($error, 10);\n\n$coachmark-bg: #EBEBF6;\n$coachmark-dark-text: #1B1B19;\n$error-text: #fff;\n\n/**\n * Spacing\n */\n\n// 4px\n$spacing-smallest: 0.25rem;\n\n// 8px\n$spacing-xxsmall: 0.5rem;\n\n// 12px\n$spacing-xsmall: 0.75rem;\n\n// 16px\n$spacing-small: 1rem;\n\n// 20px\n$spacing-small-medium: 1.25rem;\n\n// 24px\n$spacing-medium: 1.5rem;\n\n// 28px\n$spacing-medium-large: 1.75rem;\n\n// 32px\n$spacing-large: 2rem;\n\n// 48px\n$spacing-xlarge: 3rem;\n\n// 64px\n$spacing-xxlarge: 4rem;\n\n// 96px\n$spacing-largest: 6rem;\n\n/*===================*\\\n|| Media Queries ||\n\\*===================*/\n\n$device-mobile-size: 450px;\n$device-tablet-size: 800px;\n$device-laptop-size: 1024px;\n\n$device-landscape-mobile-size: 800px;\n$device-landscape-tablet-size: 1048px;\n$device-landscape-laptop-size: 1280px;\n\n\n:export {\n primary: $primary;\n secondaryLabel: $secondary-label;\n}\n\n/*===================*\\\n|| Icon sizes ||\n\\*===================*/\n$icon-small: 16px;\n$icon-medium: 24px;\n$icon-large: 32px;\n$icon-xlarge: 48px;\n","@import \"vars\";\n\n@mixin query-select($orientation, $check-orientation, $size, $qualifier) {\n @if $orientation == none or $orientation == $check-orientation {\n @if ($qualifier == min-width) {\n @media only screen and (orientation: $check-orientation) and (min-width: $size) {\n @content;\n }\n } @else if ($qualifier == max-width) {\n @media only screen and (orientation: $check-orientation) and (max-width: $size) {\n @content;\n }\n }\n }\n}\n\n@mixin bounded-select($orientation, $check-orientation, $min, $max) {\n @if $orientation == none or $orientation == $check-orientation {\n @media only screen and (orientation: $check-orientation) and (min-width: $min) and (max-width: $max) {\n @content;\n }\n }\n}\n\n// this is a copy of respond-to. we don't want to preserve that method since the breakpoints may diverge from the old UI.\n@mixin is-screen-size($media: all, $orientation: none) {\n @if $media == mobile {\n @include query-select($orientation, portrait, $device-mobile-size, max-width) {\n @content;\n }\n @include query-select($orientation, landscape, $device-landscape-mobile-size, max-width) {\n @content;\n }\n } @else if $media == not-mobile {\n @include query-select($orientation, portrait, $device-mobile-size + 1, min-width) {\n @content;\n }\n @include query-select($orientation, landscape, $device-landscape-mobile-size + 1, min-width) {\n @content;\n }\n } @else if $media == laptop {\n @include bounded-select($orientation, portrait, $device-tablet-size + 1, $device-laptop-size) {\n @content;\n }\n @include bounded-select($orientation, landscape, $device-landscape-tablet-size + 1, $device-landscape-laptop-size) {\n @content;\n }\n } @else if $media == tablet {\n @include bounded-select($orientation, portrait, $device-mobile-size + 1, $device-tablet-size) {\n @content;\n }\n @include bounded-select($orientation, landscape, $device-landscape-mobile-size + 1, $device-landscape-tablet-size) {\n @content;\n }\n } @else if $media == desktop {\n @include query-select($orientation, portrait, $device-tablet-size, min-width) {\n @content;\n }\n @include query-select($orientation, landscape, $device-landscape-tablet-size, min-width) {\n @content;\n }\n } @else if $orientation == landscape {\n @media only screen and (orientation: landscape) {\n @content;\n }\n } @else if $orientation == portrait {\n @media only screen and (orientation: portrait) {\n @content;\n }\n }\n}\n\n\n@mixin hide-text-overflow {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n\n@mixin page-padding {\n padding-left: $spacing-small;\n padding-right: $spacing-small;\n}\n\n// Font Mixins\n$font-mckinsey-sans: \"McKinsey Sans\";\n$font-theinhardt: \"Theinhardt\", \"Helvetica Neue\", Arial, sans-serif;\n$font-bower: \"Bower\";\n\n@mixin bower-bold {\n font-family: $font-bower;\n font-style: normal;\n font-weight: bold;\n text-align: center;\n}\n\n@mixin mckinsey-sans {\n font-family: $font-mckinsey-sans;\n font-style: normal;\n text-align: center;\n}\n\n@mixin display-1 {\n @include bower-bold;\n font-size: 3.75rem; // 60px\n line-height: 1.2; // 72px\n\n @include is-screen-size(not-mobile) {\n font-size: 4rem; // 64px\n line-height: 1.187; // 76px\n }\n}\n\n@mixin display-2 {\n @include bower-bold;\n font-size: 3.5rem; // 56px\n line-height: 1.214; // 68px\n\n @include is-screen-size(not-mobile) {\n font-size: 3.75rem; // 60px\n line-height: 1.2; // 72px\n }\n}\n\n@mixin display-3 {\n @include bower-bold;\n font-size: 3.25rem; // 52px\n line-height: 1.153; // 60px\n\n @include is-screen-size(not-mobile) {\n font-size: 3.5rem; // 56px\n line-height: 1.214; // 68px\n }\n}\n\n@mixin display-4 {\n @include bower-bold;\n font-size: 3rem; // 48px\n line-height: 1.166; // 56px\n\n @include is-screen-size(not-mobile) {\n font-size: 3.25rem; // 52px\n line-height: 1.153; // 64px\n }\n}\n\n@mixin display-5 {\n @include bower-bold;\n font-size: 2rem; // 30px\n line-height: 1.833; // 34px\n\n @include is-screen-size(not-mobile) {\n font-size: 2.25rem; // 36px\n line-height: 1.642; // 40px\n }\n}\n\n@mixin display-7 {\n @include bower-bold;\n font-size: 1.5rem; // 24px\n line-height: 1.333; // 28px\n\n @include is-screen-size(not-mobile) {\n font-size: 1.75rem; // 28px\n line-height: 1.142; // 32px\n }\n}\n\n@mixin heading-1 {\n @include mckinsey-sans;\n font-size: 2.5rem; // 40px\n line-height: 1.2; // 48px\n\n @include is-screen-size(not-mobile) {\n font-size: 2.75rem; // 44px\n line-height: 1.181; // 52px\n }\n}\n\n@mixin heading-2 {\n @include mckinsey-sans;\n font-size: 2.25rem; // 36px\n line-height: 1.111; // 44px\n\n @include is-screen-size(not-mobile) {\n font-size: 2.5rem; // 40px\n line-height: 1.181; // 48px\n }\n}\n\n@mixin heading-3 {\n @include mckinsey-sans;\n font-size: 2rem; // 32px\n line-height: 1.125; // 36px\n\n @include is-screen-size(not-mobile) {\n font-size: 2.25rem; // 36px\n line-height: 1.222; // 44px\n }\n}\n\n@mixin heading-4 {\n @include mckinsey-sans;\n font-size: 1.75rem; // 28px\n line-height: 1.142; // 32px\n\n @include is-screen-size(not-mobile) {\n font-size: 2rem; // 32px\n line-height: 1.125; // 36px\n }\n}\n\n@mixin heading-5 {\n @include mckinsey-sans;\n font-size: 1.5rem; // 24px\n line-height: 1.333; // 288px\n\n @include is-screen-size(not-mobile) {\n font-size: 1.75rem; // 28px\n line-height: 1.142; // 32px\n }\n}\n\n@mixin heading-6 {\n @include mckinsey-sans;\n font-size: 1.25rem; // 20px\n line-height: 1.4; // 24px\n\n @include is-screen-size(not-mobile) {\n font-size: 1.5rem; // 24px\n line-height: 1.155; // 28px\n }\n}\n\n@mixin body-default {\n @include mckinsey-sans;\n font-size: 1rem; // 16px\n line-height: 1.4; // 24px\n\n @include is-screen-size(not-mobile) {\n font-size: 1.25rem; // 20px\n line-height: 1.6; // 26px\n }\n}\n\n/// Doesnt exist in MDS.\n@mixin body-tiny {\n @include mckinsey-sans;\n font-size: 0.75rem; // 12px\n line-height: 1.4; // 20px\n\n @include is-screen-size(not-mobile) {\n font-size: 1rem; // 16px\n line-height: 1.6; // 24px\n }\n}\n\n@mixin form-label {\n font-style: normal;\n text-align: center;\n font-family: $font-theinhardt;\n font-size: 1rem;\n line-height: 1.5rem;\n}\n\n@mixin placeholder-label {\n @include form-label;\n text-align: left;\n color: $placeholder-color;\n font-weight: 300;\n}\n\n@mixin chip-label {\n @include mckinsey-sans;\n font-size: 0.75rem;\n line-height: 1.5rem;\n}\n\n@mixin checkbox-label {\n @include form-label;\n font-weight: 300;\n color: black;\n}\n\n// borders\n\n@mixin mck-checkbox-border {\n border: 1px solid $border;\n border-radius: 0;\n}\n\n@mixin mck-button-border {\n border: 2px solid $border;\n border-radius: 0;\n}\n\n@mixin mck-thin-button-border {\n border: 1px solid $background-checkbox-disabled;\n border-radius: 0;\n}\n\n@mixin mck-content-border {\n border: 1px solid $border;\n}\n\n@mixin mck-content-border-light {\n @include mck-content-border;\n border-color: $selected-option;\n}\n\n@mixin mck-card-content {\n @include mck-content-border;\n background-color: $results-list-background-color;\n}\n\n@mixin mck-card-content-light {\n @include mck-content-border-light;\n background-color: $results-list-background-color;\n}\n\n\n// functions\n\n/**\n * Makes text have maximum lines with ellipsis. Works on most modern browsers except\n * of Firefox..\n */\n@mixin max-lines($count) {\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: $count;\n -webkit-box-orient: vertical;\n}\n\n// images\n@mixin mck-icon($width, $asset, $height: $width, $assetPath: \"libs/ui/src/lib/icons\",) {\n width: $width;\n height: $height;\n background-image: url(\"#{$assetPath}/#{$asset}\");\n background-size: contain;\n}\n\n\n@mixin mck-small-icon($mobile-asset, $desktop-asset: $mobile-asset) {\n @include mck-icon(16px, $asset: $mobile-asset);\n\n @include is-screen-size(not-mobile) {\n @include mck-icon(24px, $asset: $desktop-asset);\n }\n}\n\n// skeleton\n@mixin skeleton-bg {\n background-color: $selected-option;\n}\n\n@mixin placeholder-image-size {\n width: 81px;\n height: 82px;\n\n @include is-screen-size(desktop) {\n width: 219px;\n height: 119px;\n }\n}\n\n@mixin placeholder-status-size {\n width: 117px;\n height: 78px;\n\n @include is-screen-size(desktop) {\n width: 117px;\n height: 78px;\n }\n}\n","@import \"mixins\";\n@import \"vars\";\n@import \"~@angular/material/theming\";\n\n.mck {\n &-inherit {\n &-font {\n // patches global font styling done by legacy ui\n font: inherit;\n }\n }\n\n &-content {\n &-expand {\n width: 100%;\n height: 100%;\n\n &-width {\n width: 100%;\n }\n\n &-height {\n height: 100%;\n }\n }\n\n &-with-footer-height {\n height: calc(100vh - 58px);\n }\n\n &-full-height {\n height: 100vh;\n }\n\n &-page {\n @extend .mck-content-expand;\n background: $page-background-color;\n\n &-container {\n @extend .mck-content-full-height;\n }\n }\n\n &-body {\n width: 100%;\n display: block;\n @include is-screen-size(not-mobile) {\n max-width: 1024px;\n }\n }\n\n &-group {\n @include page-padding;\n width: 100%;\n\n @include is-screen-size(not-mobile) {\n max-width: 759px;\n }\n }\n }\n\n &-shadow {\n @include mat-elevation(1);\n }\n\n &-flex-1 {\n flex: 1;\n }\n\n &-row {\n display: flex;\n flex-direction: row;\n\n &.mck-center {\n &-justify {\n justify-content: center;\n }\n\n &-align {\n align-items: center;\n }\n\n @extend .mck-center-justify;\n @extend .mck-center-align;\n }\n\n &.mck-stretch {\n align-items: stretch;\n }\n\n &-flow {\n @extend .mck-row;\n flex-wrap: wrap;\n }\n\n &.mck-scroll {\n overflow-x: scroll;\n }\n }\n\n &-column {\n display: flex;\n flex-direction: column;\n\n &.mck-center {\n justify-content: center;\n align-items: center;\n }\n\n &.mck-space-between {\n justify-content: space-between;\n }\n\n &.mck-stretch {\n align-items: stretch;\n }\n\n &.mck-scroll {\n overflow-y: scroll;\n overflow-y: overlay;\n }\n\n &.mck-flex-end {\n justify-content: flex-end;\n }\n }\n\n &-overflow {\n overflow: auto;\n }\n\n &-bordered, &-input {\n border-radius: 0;\n border: 1px solid $border;\n\n &:hover {\n border-color: #464646;\n }\n\n &:focus {\n border-color: $primary;\n }\n\n &[disabled=\"true\"] {\n pointer-events: none;\n border-color: #f0f0f0;\n color: #ccc;\n }\n }\n\n &-date-display {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n height: 43px;\n padding: $spacing-small $spacing-xxsmall;\n transition: border 200ms, box-shadow 200ms;\n }\n\n &-form-input {\n\n .mat-form-field-wrapper {\n padding-bottom: $spacing-xxsmall;\n }\n\n mat-form-field {\n min-width: auto !important;\n\n .mat-form-field-infix {\n width: 100%;\n padding-top: 0.7rem !important;\n padding-bottom: $spacing-xxsmall !important;\n }\n\n .mat-form-field-outline {\n min-height: 2.7rem;\n color: rgba(0, 0, 0, 0.27);\n }\n\n &.mck-center-suffix {\n .mat-form-field-infix {\n @extend .mck-row;\n @extend .mck-center;\n }\n }\n\n &.mck-select-dropdown-button {\n .mat-form-field-infix {\n margin-top: 2px;\n }\n\n .mat-form-field-flex {\n @include is-screen-size(mobile) {\n padding-left: $spacing-xxsmall;\n padding-right: $spacing-xxsmall;\n }\n }\n\n @include is-screen-size(mobile) {\n .mat-form-field-outline, .mat-form-field-infix {\n height: 2rem;\n min-height: 2rem;\n }\n\n .mat-form-field-infix {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n }\n }\n }\n\n mat-form-field.mat-s {\n @include form-label;\n text-align: left;\n }\n\n mat-select {\n margin-top: 0.2rem;\n\n .mat-select-arrow {\n visibility: hidden;\n }\n\n & .mat-select-value > .mat-select-value-text > span {\n @include form-label;\n font-weight: 400;\n // color: #333333 !important; //R--- blocks disabled state color\n font-family: \"McKinsey Sans\";\n }\n }\n\n .mat-form-field-outline {\n & > .mat-form-field-outline-start.mat-form-field-outline-start,\n & > .mat-form-field-outline-gap.mat-form-field-outline-gap,\n & > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: $border;\n border-width: 1px;\n border-radius: 0;\n }\n }\n\n .available {\n .mat-form-field-outline {\n & > .mat-form-field-outline-start.mat-form-field-outline-start,\n & > .mat-form-field-outline-gap.mat-form-field-outline-gap,\n & > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: #3aa537;\n }\n }\n }\n\n .booked {\n .mat-form-field-outline {\n & > .mat-form-field-outline-start.mat-form-field-outline-start,\n & > .mat-form-field-outline-gap.mat-form-field-outline-gap,\n & > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: #e12e41;\n }\n }\n }\n\n .mat-form-field-outline-thick {\n & > .mat-form-field-outline-start.mat-form-field-outline-start,\n & > .mat-form-field-outline-gap.mat-form-field-outline-gap,\n & > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: $primary;\n border-width: 1px;\n border-radius: 0;\n }\n }\n\n > mat-form-field.mck-error {\n .mat-form-field-wrapper {\n // less jumping for error message.\n padding-bottom: 0;\n }\n\n .mat-form-field-outline {\n & > .mat-form-field-outline-start.mat-form-field-outline-start,\n & > .mat-form-field-outline-gap.mat-form-field-outline-gap,\n & > .mat-form-field-outline-end.mat-form-field-outline-end {\n border-color: $error-color;\n }\n }\n }\n\n mck-close-icon.mat-chip-remove.mat-chip-remove {\n opacity: 1;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n }\n\n mat-label {\n @include form-label;\n font-weight: 400;\n text-align: left;\n margin-bottom: $spacing-xxsmall;\n }\n\n mat-radio-button {\n margin-right: $spacing-small;\n }\n\n .mat-radio-label-content {\n @include form-label;\n text-align: left;\n }\n\n .mat-radio {\n &-outer-circle {\n border-color: $primary !important;\n border-width: 1px !important;\n }\n\n &-inner-circle {\n background-color: $primary !important;\n }\n }\n\n mat-radio-group {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n\n & > mat-radio-button:last-child {\n margin-right: 0;\n }\n }\n\n &-container {\n > .mck-form-input, > mck-select {\n margin-bottom: $spacing-xxsmall;\n\n @include is-screen-size(desktop) {\n margin-bottom: $spacing-medium-large;\n }\n }\n\n .mck-radio-select {\n margin-bottom: $spacing-small;\n\n @include is-screen-size(desktop) {\n margin-bottom: $spacing-medium;\n }\n }\n }\n\n mat-chip.mat-standard-chip.mat-standard-chip {\n border-radius: 3px;\n min-height: 1.5rem;\n background-color: $chip-color;\n padding-top: $spacing-smallest;\n padding-bottom: $spacing-smallest;\n padding-left: $spacing-xxsmall;\n @include chip-label;\n @include is-screen-size(mobile) {\n line-height: inherit;\n }\n }\n\n mat-checkbox {\n &.mat-checkbox.mat-checkbox {\n @include checkbox-label;\n }\n\n div.mat-checkbox-background.mat-checkbox-background {\n background-color: $primary;\n\n &.mck-checkbox-disabled.mat-checkbox-disabled {\n background-color: $background-checkbox-disabled;\n }\n }\n\n &.mck-checkbox-disabled.mat-checkbox-disabled {\n @include checkbox-label;\n color: $border;\n }\n }\n }\n\n &-borderless {\n border: none;\n\n &:hover, &:focus, &:disabled {\n border: none;\n }\n }\n\n &-select-panel {\n margin-top: 0 !important;\n border-radius: unset !important;\n margin-top: 35px !important;\n margin-left: 5px;\n\n mat-option {\n padding-left: 0;\n padding-right: 0;\n\n &.mat-option-text {\n @include form-label;\n text-align: left;\n }\n }\n\n &.mck-margin-top {\n margin-top: $spacing-medium !important;\n }\n }\n\n &-checkbox-panel {\n &.mat-autocomplete-panel.mat-autocomplete-panel {\n top: -10px;\n max-height: 278px;\n }\n\n mat-option.mck-truncated {\n & .mat-checkbox-label.mat-checkbox-label {\n @include max-lines(2);\n }\n }\n\n mat-option {\n padding-left: 0;\n padding-right: 0;\n line-height: 24px;\n height: unset;\n min-height: 36px;\n\n & .mat-checkbox-label.mat-checkbox-label {\n flex: 1;\n }\n\n & .mat-checkbox-label.mat-checkbox-label {\n @include checkbox-label;\n text-align: left;\n }\n\n &.mck-checkbox-group-header {\n & .mat-checkbox-label.mat-checkbox-label {\n font-weight: 500;\n }\n }\n\n &.mck-checkbox-group-child {\n margin-left: $spacing-large;\n }\n\n mat-checkbox {\n label.mat-checkbox-layout {\n width: 100%;\n padding-left: 16px;\n padding-right: 16px;\n @include is-screen-size(mobile) {\n padding-left: 2px;\n padding-right: 2px;\n }\n }\n\n div.mat-checkbox-frame.mat-checkbox-frame {\n @include mck-checkbox-border;\n }\n\n &.mat-checkbox-checked {\n div.mat-checkbox-background.mat-checkbox-background {\n background-color: $primary;\n }\n }\n\n &.mck-checkbox-disabled.mat-checkbox-disabled {\n div.mat-checkbox-background.mat-checkbox-background {\n background-color: $background-checkbox-disabled;\n }\n }\n\n &.mck-checkbox-disabled.mat-checkbox-disabled {\n & .mat-checkbox-label.mat-checkbox-label {\n @include checkbox-label;\n color: $border;\n text-align: left;\n }\n }\n\n .mat-checkbox-inner-container {\n width: $spacing-small-medium;\n height: $spacing-small-medium;\n }\n }\n }\n }\n\n &-select-option {\n &-selected {\n font-weight: 500;\n font-family: $font-mckinsey-sans;\n color: black;\n background-color: $selected-option;\n\n .mck-spacer-content {\n background-color: $primary;\n margin-right: $spacing-xsmall;\n }\n }\n\n &-unselected {\n font-weight: 400;\n font-family: $font-mckinsey-sans;\n\n &.mck-ignore-disabled {\n color: black;\n }\n\n .mck-spacer-content {\n visibility: hidden;\n margin-right: $spacing-xsmall;\n }\n }\n }\n\n &-button {\n &.mat-button.mat-button, &.mat-stroked-button.mat-stroked-button {\n height: 40px;\n border-radius: 0;\n border: none;\n @extend .mck-column;\n @extend .mck-center;\n font-family: $font-mckinsey-sans;\n\n @include is-screen-size(not-mobile) {\n height: 48px;\n }\n\n & > .mat-button-wrapper.mat-button-wrapper {\n @include form-label;\n font-weight: normal;\n padding-left: $spacing-smallest;\n padding-right: $spacing-smallest;\n font-family: $font-mckinsey-sans;\n\n @include is-screen-size(mobile) {\n font-size: 0.875rem;\n }\n }\n\n &.mck-short {\n height: 32px;\n min-width: 83px;\n\n @include is-screen-size(not-mobile) {\n height: 48px;\n min-width: 155px;\n }\n\n // some cases buttons in desktop are 40 vs 48px\n &.mck-short-height {\n @include is-screen-size(not-mobile) {\n height: 40px;\n }\n }\n }\n\n &.mck-square {\n height: 32px;\n width: 32px;\n min-width: 32px;\n padding: 0;\n\n @include is-screen-size(not-mobile) {\n width: 40px;\n height: 40px;\n }\n }\n }\n }\n\n &-primary-button {\n @extend .mck-button;\n\n &.mat-button.mat-button {\n background-color: $primary;\n\n &[disabled], &.disabled {\n background-color: $background-checkbox-disabled;\n color: #757575;\n cursor: not-allowed;\n\n & > .mat-button-wrapper.mat-button-wrapper {\n color: #757575;\n }\n }\n\n & > .mat-button-wrapper.mat-button-wrapper {\n color: white;\n }\n }\n }\n\n &-secondary-button {\n @extend .mck-button;\n\n &.mat-stroked-button.mat-stroked-button {\n @include mck-thin-button-border;\n border: 1px solid #2251FF;\n color: #2251FF;\n &[disabled], &.disabled {\n border: 1px solid $background-checkbox-disabled;\n color: #333333;\n cursor: not-allowed;\n }\n }\n\n &.mat-button.mat-button {\n background-color: white;\n\n & > .mat-button-wrapper.mat-button-wrapper {\n color: $chip-color;\n }\n }\n }\n\n &-warning-button {\n @extend .mck-button;\n\n &.mat-button.mat-button {\n background-color: $color-brand-yellow;\n\n & > .mat-button-wrapper.mat-button-wrapper {\n color: black;\n }\n }\n }\n\n &-stroked-button {\n @extend .mck-button;\n\n &.mat-stroked-button.mat-stroked-button {\n @include mck-button-border;\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding-left: $spacing-medium-large;\n padding-right: $spacing-medium-large;\n\n &.mck-short {\n height: 32px;\n min-width: 83px;\n padding-left: $spacing-smallest;\n padding-right: $spacing-smallest;\n\n @include is-screen-size(not-mobile) {\n height: 48px;\n min-width: 155px;\n }\n }\n\n // primary colors\n &.mck-primary {\n border-width: 1px;\n border-color: $primary;\n color: $primary;\n }\n\n &.mck-thin-border-light {\n border-color: $background-checkbox-disabled;\n border-width: 1px;\n }\n }\n\n & > .mat-button-wrapper.mat-button-wrapper {\n @include form-label;\n font-weight: normal;\n color: $primary;\n }\n }\n\n &-toggle-button {\n @include form-label;\n @include mck-content-border;\n border-color: $background-checkbox-disabled;\n min-width: 59px;\n background-color: white;\n\n @include is-screen-size(not-mobile) {\n min-width: 132px;\n padding-top: $spacing-xxsmall;\n padding-bottom: $spacing-xxsmall;\n }\n\n &-selected {\n color: $primary;\n }\n }\n\n &-date-picker {\n width: 100% !important;\n height: 100% !important;\n\n @include is-screen-size(not-mobile) {\n max-width: 23rem;\n }\n\n & > .header.header {\n @include form-label;\n font-weight: 500;\n color: $form-label;\n margin-top: $spacing-small-medium;\n\n & > .arrow.arrow {\n width: 2.375rem;\n height: 2rem;\n\n & > .icon.icon {\n width: 1rem;\n height: 1rem;\n }\n\n\n & > .next.next {\n background-image: url('libs/ui/src/lib/icons/arrow-forward.svg');\n }\n\n & > .previous.previous {\n background-image: url('libs/ui/src/lib/icons/arrow-backward.svg');\n }\n }\n\n\n }\n\n & > .month {\n @include form-label;\n font-weight: 500;\n }\n\n & > .week {\n @include form-label;\n font-weight: 500;\n color: $secondary-label;\n }\n\n & > .body {\n @include form-label;\n\n & > div > div.date {\n & > .dot {\n display: none;\n }\n\n &.disabled {\n background-color: transparent;\n border-radius: 0;\n color: $secondary-label;\n }\n\n &.active {\n border-radius: 0;\n background-color: $primary;\n }\n\n &.non-month {\n color: $secondary-label;\n }\n }\n }\n }\n\n &-spacer-content {\n &-collapse-tablet {\n @include is-screen-size(mobile) {\n display: none;\n }\n @include is-screen-size(tablet) {\n display: none;\n }\n }\n\n &-expand-mobile {\n @include is-screen-size(not-mobile) {\n display: none;\n }\n }\n\n &-divider {\n background-color: $selected-option;\n }\n }\n\n &-expansion-panel {\n &.mat-expansion-panel.mat-expansion-panel {\n @include mat-elevation(0);\n border-radius: 0;\n border-top: 1px solid $selected-option;\n border-bottom: 1px solid $selected-option;\n\n &.mck-expanded {\n background-color: $background-color;\n border-bottom: none;\n\n & .mck-collapse-icon {\n @include mck-icon(24px, 'chevron-close.svg');\n @include is-screen-size(not-mobile) {\n @include mck-icon(48px, 'chevron-close-large.svg');\n }\n }\n }\n\n .mat-expansion-panel-body {\n padding-left: 0;\n padding-right: 0;\n\n & > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\n @include body-tiny;\n padding-left: $spacing-small;\n padding-right: $spacing-small;\n @include is-screen-size(not-mobile) {\n @include form-label;\n }\n text-align: left;\n color: black;\n font-weight: normal;\n padding-bottom: $spacing-xxsmall;\n }\n }\n }\n\n & mat-expansion-panel-header {\n padding-left: $spacing-small;\n padding-right: $spacing-small;\n\n & > span.mat-content {\n // center text and icons\n align-items: center;\n }\n }\n\n & mat-panel-title {\n @include form-label;\n text-align: left;\n color: black;\n font-weight: normal;\n }\n\n .mck-collapse-icon {\n @include mck-icon(24px, 'chevron-open.svg');\n @include is-screen-size(not-mobile) {\n @include mck-icon(48px, 'chevron-open-large.svg');\n }\n transform: rotate(0deg);\n transition: transform 0.5s ease;\n &.expanded {\n transform: rotate(180deg);\n }\n }\n }\n\n &-icon-fill-open {\n fill: $primary;\n }\n\n &-icon-fill-close {\n fill: $secondary-label;\n }\n\n &-icon-fill-black {\n fill: black;\n stroke: black;\n }\n\n &-icon-fill-white {\n fill: white;\n stroke: white;\n }\n\n &-icon-fill-gray {\n fill: #333333;\n stroke: #333333;\n }\n\n &-min {\n max-width: 581px !important;\n width: 80vw;\n max-height: 100vh;\n // Transform the modal into a more 'full-screen' appearance on mobile.\n @include is-screen-size(mobile) {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n\n .mat-dialog-container {\n border-radius: 0 !important;\n }\n }\n }\n\n &-noexpand {\n max-width: 581px !important;\n width: 80vw !important;\n max-height: 100vh;\n // Transform the modal into a more 'full-screen' appearance on mobile.\n @include is-screen-size(mobile) {\n width: calc(100vw - 32px) !important;\n max-height: 100vh;\n }\n }\n\n &-modal {\n max-width: 800px !important;\n width: 80vw;\n max-height: 100vh;\n // Transform the modal into a more 'full-screen' appearance on mobile.\n @include is-screen-size(mobile) {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n\n .mat-dialog-container {\n border-radius: 0 !important;\n }\n }\n }\n\n &-modal-mini {\n max-width: 580px !important;\n max-height: 100vh;\n // Transform the modal into a more 'full-screen' appearance on mobile.\n @include is-screen-size(mobile) {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n\n .mat-dialog-container {\n border-radius: 0 !important;\n }\n }\n }\n\n &-modal-survey {\n max-width: 691px !important;\n max-height: 100vh;\n // Transform the modal into a more 'full-screen' appearance on mobile.\n @include is-screen-size(mobile) {\n .mat-dialog-container {\n border-radius: 0 !important;\n }\n }\n }\n\n &-modal-wide {\n max-width: 1024px !important;\n width: 100vw;\n height: 95vh;\n max-height: 100vh;\n .mat-dialog-content {\n background-color: #F8F9FA;\n padding: 0 !important;\n overflow: hidden;\n .mat-icon-button[name=\"CloseButton\"] {\n position: relative;\n right: 32px;\n @include is-screen-size(mobile) {\n .close-image {\n height: 32px;\n width: 32px;\n }\n }\n }\n }\n // Transform the modal into a more 'full-screen' appearance on mobile.\n @include is-screen-size(mobile) {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n .mat-dialog-container {\n border-radius: 0 !important;\n }\n }\n\n }\n\n &-modal-wide-manage-booking {\n max-width: 1250px !important;\n width: 100vw;\n // height: 95vh;\n max-height: 95vh;\n .mat-dialog-content {\n background-color: #F8F9FA;\n padding: 0 !important;\n overflow: hidden;\n // overflow-y: hidden !important;\n\n .mat-icon-button[name=\"CloseButton\"] {\n position: relative;\n right: 32px;\n @include is-screen-size(mobile) {\n .close-image {\n height: 32px;\n width: 32px;\n }\n }\n }\n }\n // Transform the modal into a more 'full-screen' appearance on mobile.\n @include is-screen-size(mobile) {\n width: 100vw;\n height: 100%;\n max-height: 100vh;\n .mat-dialog-container {\n border-radius: 0 !important;\n }\n }\n\n }\n\n &-alert {\n @include is-screen-size(mobile) {\n max-width: 100vw !important;\n width: 100vw;\n margin-left: $spacing-small;\n margin-right: $spacing-small;\n }\n\n &-backdrop {\n background: $alert-overlay-bg;\n }\n }\n\n &-slide-toggle {\n &.mat-slide-toggle.mat-checked:not(.mat-disabled) {\n & .mat-slide-toggle-bar.mat-slide-toggle-bar {\n background-color: $primary-highlight;\n }\n\n & .mat-slide-toggle-thumb.mat-slide-toggle-thumb {\n background-color: white;\n }\n }\n\n &.mat-slide-toggle {\n height: auto;\n }\n\n .mat-slide-toggle-content.mat-slide-toggle-content {\n flex: 1;\n @include form-label;\n text-align: left;\n @include max-lines(2);\n white-space: normal;\n }\n\n .mat-slide-toggle-thumb.mat-slide-toggle-thumb {\n width: 14px;\n height: 14px;\n transform: translate(50%, 50%);\n }\n\n .mat-slide-toggle-thumb-container.mat-slide-toggle-thumb-container {\n top: -4px;\n left: -4px;\n }\n\n .mat-slide-toggle-bar.mat-slide-toggle-bar {\n height: 20px;\n background-color: $background-checkbox-disabled;\n border-radius: 20px;\n }\n }\n\n &-skeleton {\n @include skeleton-bg;\n\n &-checkbox {\n float: left;\n > .loader.loader {\n @include skeleton-bg;\n width: 20px;\n height: 20px;\n margin-bottom: 0;\n }\n }\n\n &-header > .loader.loader {\n @include skeleton-bg;\n width: 100vw;\n margin-bottom: 0;\n max-width: 215px;\n }\n\n &-image > .loader.loader {\n @include skeleton-bg;\n @include placeholder-image-size;\n margin-bottom: 0;\n }\n\n &-status > .loader.loader {\n @include skeleton-bg;\n @include placeholder-status-size;\n margin-top: 10px;\n margin-bottom: 0;\n }\n\n &-line-1 > .loader.loader {\n @include skeleton-bg;\n height: 23px;\n max-width: 176px;\n\n @include is-screen-size(not-mobile) {\n max-width: 219px;\n }\n }\n\n &-line-2 > .loader.loader {\n @include skeleton-bg;\n height: 18px;\n max-width: 165px;\n\n @include is-screen-size(not-mobile) {\n max-width: 189px;\n }\n }\n\n &-line-3 > .loader.loader {\n @include skeleton-bg;\n height: 18px;\n max-width: 147px;\n\n @include is-screen-size(not-mobile) {\n max-width: 189px;\n }\n }\n\n &-line-30p, &-line-30p-thin {\n > .loader.loader {\n @include skeleton-bg;\n height: 18px;\n max-width: 30%;\n @include is-screen-size(not-mobile) {\n max-width: 30%;\n }\n }\n &-thin {\n > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n }\n }\n }\n\n &-line-45p, &-line-45p-thin {\n > .loader.loader {\n @include skeleton-bg;\n height: 18px;\n max-width: 45%;\n @include is-screen-size(not-mobile) {\n max-width: 45%;\n margin-right: 45%;\n }\n }\n &-thin {\n > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n }\n }\n }\n\n &-line-50p, &-line-50p-thin, &-line-50p-thick {\n > .loader.loader {\n @include skeleton-bg;\n height: 18px;\n max-width: 50%;\n @include is-screen-size(not-mobile) {\n max-width: 50%;\n margin-right: 45%;\n }\n }\n &-thin {\n > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n }\n }\n &-thick {\n > .loader.loader {\n height: 32px;\n margin-bottom: 4px;\n }\n }\n }\n\n &-line-60p, &-line-60p-thin, &-line-60p-thick {\n > .loader.loader {\n @include skeleton-bg;\n height: 18px;\n max-width: 60%;\n @include is-screen-size(not-mobile) {\n max-width: 60%;\n margin-right: 35%;\n }\n }\n &-thin {\n > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n }\n }\n &-thick {\n > .loader.loader {\n height: 32px;\n margin-bottom: 4px;\n }\n }\n }\n\n &-line-70p, &-line-70p-thin, &-line-70p-thick {\n > .loader.loader {\n @include skeleton-bg;\n height: 18px;\n max-width: 70%;\n @include is-screen-size(not-mobile) {\n max-width: 70%;\n margin-right: 25%;\n }\n }\n &-thin {\n > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n }\n }\n &-thick {\n > .loader.loader {\n height: 32px;\n margin-bottom: 4px;\n }\n }\n }\n\n &-line-80p, &-line-80p-thin, &-line-80p-thick {\n > .loader.loader {\n @include skeleton-bg;\n height: 18px;\n max-width: 80%;\n @include is-screen-size(not-mobile) {\n max-width: 80%;\n margin-right: 15%;\n }\n }\n &-thin {\n > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n }\n }\n &-thick {\n > .loader.loader {\n height: 32px;\n margin-bottom: 4px;\n }\n }\n }\n\n &-line-90p, &-line-90p-thin {\n > .loader.loader {\n @include skeleton-bg;\n height: 18px;\n max-width: 90%;\n @include is-screen-size(not-mobile) {\n max-width: 90%;\n }\n }\n &-thin {\n > .loader.loader {\n height: 16px;\n margin-bottom: 4px;\n }\n }\n }\n\n &-load-more > .loader.loader {\n @include skeleton-bg;\n margin-top: $spacing-xxsmall;\n margin-bottom: $spacing-xxsmall;\n width: calc(100vw - (2 * #{$spacing-small}));\n height: 40px;\n\n @include is-screen-size(not-mobile) {\n max-width: 320px;\n height: 50px;\n }\n }\n\n &-load-more-100p, &-header, &-room-availability {\n > .loader.loader {\n @include skeleton-bg;\n margin-top: $spacing-xxsmall;\n margin-bottom: $spacing-xxsmall;\n width: calc(100vw - (2 * #{$spacing-small}));\n height: 40px;\n max-width: none;\n width: 100%;\n @include is-screen-size(not-mobile) {\n max-width: none;\n width: 100%;\n height: 50px;\n }\n &-room-availability {\n > .loader.loader {\n height: 124px;\n margin-bottom: 4px;\n }\n }\n }\n }\n\n\n }\n}\n\n\n.mck {\n &-heading-5 {\n @include heading-5;\n }\n}\n\nngx-mat-select-search {\n .mat-select-search-no-entries-found {\n @include form-label;\n text-align: left;\n }\n\n .mat-select-search-input {\n @include form-label;\n text-align: left;\n }\n\n button.mat-button.mat-select-search-clear {\n background-color: transparent;\n border: none;\n color: black;\n }\n}\n\n::-webkit-scrollbar {\n width: 16px;\n height: 18px;\n}\n::-webkit-scrollbar-thumb {\n height: $spacing-medium;\n border: 4px solid rgba(0, 0, 0, 0);\n background-clip: padding-box;\n border-radius: 8px;\n background-color: $scrollbar-color;\n -webkit-box-shadow: inset -1px -1px 0px rgba(0, 0, 0, 0.05), inset 1px 1px 0px rgba(0, 0, 0, 0.05);\n}\n::-webkit-scrollbar-button {\n width: 0;\n height: 0;\n display: none;\n}\n::-webkit-scrollbar-corner {\n background-color: transparent;\n}\nheader {\n z-index: 2;\n}\n.mb-block {\n @include is-screen-size(mobile) {\n display: block;\n }\n}\n.mb-bottom {\n @include is-screen-size(mobile) {\n padding-bottom: 110px;\n }\n}\n\n.map-filters-container .mck-form-input mat-form-field {\n .mat-form-field-infix {\n top: 5px;\n }\n .mat-form-field-outline{\n height: 48px;\n background-color: white;\n }\n\n .mat-form-field-infix {\n padding-top: $spacing-xxsmall !important;\n }\n}\n\n.office-level-row{\n\n .mat-select-placeholder{\n color: #333333;\n font-family: $font-mckinsey-sans;\n }\n\n .legend-container .mat-form-field-outline, .mat-form-field-infix {\n @include is-screen-size(mobile) {\n height: 45px !important;\n }\n }\n\n .select-divider{\n display: block;\n top: 0 !important;\n width: 44px !important;\n right: -11px !important;\n background: transparent !important;\n border-width: 0 0 0 1px;\n border-color: #c6c6c6;\n border-style: solid;\n @include is-screen-size(not-mobile) {\n height: calc(100% - 1px) !important;\n }\n }\n\n .disabled{\n .select-divider{\n background: #F0F0F0 !important;\n @include is-screen-size(not-mobile) {\n height: calc(100% - 2px) !important;\n }\n }\n .select-chevron{\n opacity: 0.5;\n margin-left: 10px;\n }\n }\n}\n\n.office-level-row, .map-controls{\n .legend-container .mat-form-field-outline, .mat-form-field-infix {\n display: flex !important;\n width: 100% !important;\n justify-content: space-between !important;\n }\n}\n\n.booking-form-container {\n overflow-y: auto;\n max-height: calc(100vh - 310px);\n @include is-screen-size(mobile) {\n max-height: none;\n }\n}\n.booking-form-container .mck-form-input{\n\n mat-select {\n & .mat-select-value > .mat-select-value-text > span {\n // color: #051c2c !important; //R--- blocks disabled state color\n }\n }\n\n mat-label, .mat-radio-label-content {\n font-family: $font-mckinsey-sans !important;\n color: #333333;\n }\n\n input, input::placeholder{\n font-family: $font-mckinsey-sans;\n color: #B3B3B3;\n }\n}","/*\nStart Angular Calendar\n*/\n.cal-week-view {\n /* stylelint-disable-next-line selector-type-no-unknown */\n}\n.cal-week-view * {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n.cal-week-view .cal-day-headers {\n display: -webkit-box;\n display: -ms-flexbox;\n -js-display: flex;\n display: flex;\n padding-left: 70px;\n border: 1px solid;\n}\n.cal-week-view .cal-day-headers .cal-header {\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n text-align: left;\n padding: 12px;\n margin-top: 20px;\n font-family: $font;\n font-size: 16px;\n font-weight: 400;\n p {\n font-size: 16px;\n font-weight: 300;\n margin: 0;\n }\n &.show-weekend {\n font-size: 12px;\n p {\n font-size: 12px;\n }\n }\n}\n.cal-week-view .cal-day-headers .cal-header:not(:last-child) {\n border-right: 1px solid;\n}\n.cal-week-view .cal-day-headers .cal-header:first-child {\n border-left: 1px solid;\n}\n.cal-week-view .cal-day-headers span {\n font-weight: 400;\n opacity: 0.5;\n}\n.cal-week-view .cal-day-column {\n -webkit-box-flex: 1;\n -ms-flex-positive: 1;\n flex-grow: 1;\n border-left: solid 1px;\n padding-top: 5px;\n}\n.cal-week-view .cal-event {\n font-size: 12px;\n border: 1px solid;\n outline: none;\n .berry {\n position: absolute;\n left: calc(50% - 7px);\n display: none;\n height: 14px;\n width: 14px;\n background-color: #00A9F4;\n border-radius: 50%;\n &.top {\n top: -7px;\n }\n &.bot {\n bottom: -7px;\n }\n }\n .bumper {\n position: absolute;\n left: 3px;\n display: block;\n width: calc(100% - 6px);\n border-radius: 3px;\n z-index: -1;\n opacity: .60;\n }\n &.expanded {\n &:focus {\n border-style: dashed;\n border-width: 2px;\n outline: none;\n .berry {\n display: block;\n }\n }\n }\n}\n.cal-week-view .cal-time-label-column {\n width: 70px;\n height: 100%;\n}\n.cal-week-view .cal-current-time-marker {\n position: absolute;\n width: 100%;\n height: 2px;\n z-index: 2;\n}\n.cal-week-view .cal-all-day-events {\n border: solid 1px;\n border-top: 0;\n border-bottom-width: 3px;\n padding-top: 3px;\n position: relative;\n}\n.cal-week-view .cal-all-day-events .cal-day-columns {\n height: 100%;\n width: 100%;\n display: -webkit-box;\n display: -ms-flexbox;\n -js-display: flex;\n display: flex;\n position: absolute;\n top: 0;\n z-index: 0;\n}\n.cal-week-view .cal-all-day-events .cal-events-row {\n position: relative;\n height: 31px;\n margin-left: 70px;\n}\n.cal-week-view .cal-all-day-events .cal-event-container {\n display: inline-block;\n position: absolute;\n}\n.cal-week-view .cal-all-day-events .cal-event-container.resize-active {\n z-index: 1;\n pointer-events: none;\n}\n.cal-week-view .cal-all-day-events .cal-event {\n padding: 0 5px;\n margin-left: 2px;\n margin-right: 2px;\n height: 28px;\n line-height: 28px;\n}\n.cal-week-view .cal-all-day-events .cal-time-label-column {\n display: -webkit-box;\n display: -ms-flexbox;\n -js-display: flex;\n display: flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n font-size: 14px;\n}\n.cal-week-view .cal-all-day-events .cal-resize-handle {\n width: 6px;\n height: 100%;\n cursor: col-resize;\n position: absolute;\n top: 0;\n}\n.cal-week-view .cal-all-day-events .cal-resize-handle.cal-resize-handle-after-end {\n right: 0;\n}\n.cal-week-view .cal-event,\n.cal-week-view .cal-header {\n overflow: hidden;\n -o-text-overflow: ellipsis;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.cal-week-view .cal-drag-active {\n pointer-events: none;\n z-index: 1;\n}\n.cal-week-view .cal-drag-active * {\n pointer-events: none;\n}\n.cal-week-view .cal-time-events {\n position: relative;\n border: solid 1px;\n border-top: 0;\n display: -webkit-box;\n display: -ms-flexbox;\n -js-display: flex;\n display: flex;\n}\n.cal-week-view .cal-time-events .cal-day-columns {\n display: -webkit-box;\n display: -ms-flexbox;\n -js-display: flex;\n display: flex;\n -webkit-box-flex: 1;\n -ms-flex-positive: 1;\n flex-grow: 1;\n /*\n First and last item's hour visibility adjustment in the list \n */\n .cal-hour:nth-of-type(2), .cal-hour:nth-of-type(8){ \n .cal-time {\n top: -9px;\n }\n }\n \n}\n.cal-week-view .cal-time-events .cal-day-column {\n position: relative;\n}\n.cal-week-view .cal-time-events .cal-events-container {\n position: relative;\n}\n.cal-week-view .cal-time-events .cal-event-container {\n position: absolute;\n z-index: 1;\n}\n.cal-week-view .cal-time-events .cal-event {\n overflow: visible;\n width: 103%;\n height: calc(100% - 2px);\n margin: 1px;\n padding: 0 5px;\n line-height: 25px;\n left: -3%;\n position: relative;\n}\n.expanded {\n .cal-week-view .cal-time-events .cal-event {\n width: 100%;\n left: 0%;\n }\n}\n.cal-week-view .cal-time-events .cal-resize-handle {\n width: 100%;\n height: 8px;\n cursor: row-resize;\n position: absolute;\n z-index: 10;\n}\n.cal-week-view .cal-time-events .cal-resize-handle.cal-resize-handle-after-end {\n bottom: -4px;\n}\n.cal-week-view .cal-time-events .cal-resize-handle.cal-resize-handle-before-start {\n top: -4px;\n}\n.cal-week-view .cal-hour-segment {\n position: relative;\n}\n.cal-week-view .cal-hour-segment::after {\n content: '\\00a0';\n}\n.cal-week-view .cal-draggable {\n cursor: move;\n}\n.cal-week-view mwl-calendar-week-view-hour-segment,\n.cal-week-view .cal-hour-segment {\n display: block;\n}\n.cal-week-view .cal-hour {\n .cal-time {\n z-index: 2;;\n position: relative;\n top: -14px;\n background-color: #f4f4f4;\n height: 5rem;\n width: 4rem;\n border-right: 1px solid #A19F9F;\n border-width: thin;\n }\n .cal-hour-start {\n border: none !important;\n }\n}\n.expanded {\n .cal-week-view .cal-hour {\n .cal-time {\n background-color: #f8f9fa;\n width: 4.44rem;\n }\n }\n}\n.cal-week-view .cal-hour:not(:last-child) .cal-hour-segment,\n.cal-week-view .cal-hour:last-child :not(:last-child) .cal-hour-segment {\n border-bottom: thin solid;\n border-color: #DBDBDB;\n}\n.cal-week-view .cal-time {\n font-weight: bold;\n padding-top: 5px;\n width: 70px;\n text-align: center;\n}\n.cal-week-view .cal-hour-segment.cal-after-hour-start .cal-time {\n display: none;\n}\n.cal-week-view {\n background-color: #fff;\n border-top: solid 1px #e1e1e1;\n}\n.cal-week-view .cal-day-headers {\n border-color: #e1e1e1;\n border-top: 0;\n border-left-width: 0;\n border-right-width: 0;\n}\n.cal-week-view .cal-day-headers .cal-header:not(:last-child) {\n border-right-color: #e1e1e1;\n}\n.cal-week-view .cal-day-headers .cal-header:first-child {\n border-left-color: #e1e1e1;\n}\n.cal-week-view .cal-day-column {\n border-left-color: #e1e1e1;\n}\n.cal-week-view .cal-event {\n background-color: #d1e8ff;\n border-color: #1e90ff;\n color: #1e90ff;\n}\n.cal-week-view .cal-all-day-events {\n border-color: #e1e1e1;\n}\n.cal-week-view .cal-header.cal-event-date {\n color: $primary-highlight;\n}\n.cal-week-view .cal-header.cal-weekend span {\n color: #8b0000;\n}\n.cal-week-view .cal-time-events {\n border-color: #e1e1e1;\n}\n.expanded {\n .cal-week-view .cal-time-events .cal-day-columns:not(.cal-resize-active) .cal-hour-segment:hover {\n background-color: #C0DBF5;\n }\n}\n.cal-week-view .cal-hour-odd {\n background-color: #fafafa;\n}\n.cal-week-view .cal-drag-over .cal-hour-segment {\n background-color: #ededed;\n}\n.cal-week-view .cal-hour:not(:last-child) .cal-hour-segment,\n.cal-week-view .cal-hour:last-child :not(:last-child) .cal-hour-segment {\n border-bottom-color: #e1e1e1;\n}\n.cal-week-view .cal-current-time-marker {\n display: none;\n}\n.cal-day-view mwl-calendar-week-view-header {\n display: none;\n}\n.cal-day-view .cal-events-container {\n margin-left: 70px;\n}\n.cal-day-view .cal-day-column {\n border-left: 0;\n}\n.cal-day-view .cal-current-time-marker {\n margin-left: 70px;\n width: calc(100% - 70px);\n}\n\n.cal-tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.5;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n font-size: 14px;\n word-wrap: break-word;\n opacity: 0.9;\n margin-bottom: 4px;\n}\n\n.cal-tooltip.cal-tooltip-top {\n padding: 5px 0;\n margin-top: -3px;\n}\n\n.cal-tooltip.cal-tooltip-top .cal-tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n}\n\n.cal-tooltip.cal-tooltip-right {\n padding: 0 5px;\n margin-left: 3px;\n}\n\n.cal-tooltip.cal-tooltip-right .cal-tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n}\n\n.cal-tooltip.cal-tooltip-bottom {\n padding: 5px 0;\n margin-top: 3px;\n}\n\n.cal-tooltip.cal-tooltip-bottom .cal-tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n}\n\n.cal-tooltip.cal-tooltip-left {\n padding: 0 5px;\n margin-left: -3px;\n}\n\n.cal-tooltip.cal-tooltip-left .cal-tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n}\n\n.cal-tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n text-align: center;\n border-radius: 0.25rem;\n}\n\n.cal-tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n\n.cal-tooltip.cal-tooltip-top .cal-tooltip-arrow {\n border-top-color: #fff;\n}\n\n.cal-tooltip.cal-tooltip-right .cal-tooltip-arrow {\n border-right-color: #fff;\n}\n\n.cal-tooltip.cal-tooltip-bottom .cal-tooltip-arrow {\n border-bottom-color: #fff;\n}\n\n.cal-tooltip.cal-tooltip-left .cal-tooltip-arrow {\n border-left-color: #fff;\n}\n\n.cal-tooltip-inner {\n padding: 10px;\n color: #000;\n background-color: #fff;\n box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.2);\n}\n\n//// Incorporate overrides below into above @todo\n.cal-event-container {\n .cal-event {\n border-radius: 0 !important;\n .cal-event-title {\n font-size: 14px;\n font-weight: 400;\n padding: 10px 14px;\n color: black;\n display: block;\n @include is-screen-size(mobile) {\n font-size: 12px;\n }\n }\n }\n &.selected {\n width: 100% !important;\n left: 0% !important;\n .cal-event {\n display: flex;\n justify-content: center;\n align-items: center;\n .cal-event-title {\n white-space: pre-wrap;\n text-align: center;\n }\n }\n z-index: 2 !important;\n &.mobile {\n left: 0% !important;\n width: 100% !important;\n }\n &.minimal {\n .cal-event-title {\n top: 0;\n transform: none;\n }\n }\n }\n &.mobile {\n left: 0% !important;\n width: 100% !important;\n }\n &.booked {\n width: 100% !important;\n left: 0% !important;\n .cal-event {\n .cal-event-title {\n width: 100%;\n }\n }\n &.mobile {\n left: 0% !important;\n width: 100% !important;\n }\n &.minimal {\n .cal-event-title {\n padding: 1px 14px;\n }\n }\n }\n &.show-weekend {\n .cal-event {\n .cal-event-title {\n font-size: 13px;\n }\n }\n\n }\n}\n.cal-week-view {\n position: relative;\n .cal-time {\n font-weight: 400;\n }\n .cal-hour {\n background-color: #ffffff;\n }\n .cal-hour-odd {\n background-color: #ffffff;\n }\n .cal-time-events {\n background-color: #ffffff;\n }\n}\n.cal-week-view .cal-day-headers {\n position: fixed;\n width: 100%;\n max-width: 1008px;\n background: $page-background-color;\n z-index: 3;\n height: 82px;\n @include is-screen-size(laptop) {\n width: 100%;\n }\n}\n\n.expanded {\n .cal-week-view .cal-time-events {\n padding-top: 87px;\n position: relative;\n top: 1px;\n z-index: 1;\n border: 1px solid #f0f0f0;\n }\n\n\n .cal-event-container {\n &.mobile {\n left: 20% !important;\n width: 80% !important;\n }\n }\n}\n\n/*\nEnd Start Angular Calendar\n*/\n","// Custom Theming for Angular Material\n// For more information: https://material.angular.io/guide/theming\n@import '~@angular/material/theming';\n// Plus imports for other components in your app.\n\n// Include the common styles for Angular Material. We include this here so that you only\n// have to load a single css file for Angular Material in your app.\n// Be sure that you only ever include this mixin once!\n@include mat-core();\n\n@import \"./variables\";\n@import 'mixins';\n\n@import \"../../../libs/ui/src/lib/styles.scss\";\n@import \"./calendar.scss\";\n\n// Define the palettes for your theme using the Material Design palettes available in palette.scss\n// (imported above). For each palette, you can optionally specify a default, lighter, and darker\n// hue. Available color palettes: https://material.io/design/color/\n$mckinsey-staff-app-primary: mat-palette($mat-indigo);\n$mckinsey-staff-app-accent: mat-palette($mat-blue, A200, A100, A400);\n\n// The warn palette is optional (defaults to red).\n$mckinsey-staff-app-warn: mat-palette($mat-red);\n\n// Create the theme object (a Sass map containing all of the palettes).\n$mckinsey-staff-app-theme: mat-light-theme($mckinsey-staff-app-primary, $mckinsey-staff-app-accent, $mckinsey-staff-app-warn);\n\n// Include theme styles for core and each component used in your app.\n// Alternatively, you can import and @include the theme mixins for each component\n// that you are using.\n@include angular-material-theme($mckinsey-staff-app-theme);\n\n/* You can add global styles to this file, and also import other style files */\n// Our dark theme\n.dark-mode {\n color: $light-primary-text;\n $dark-primary: mat-palette($mat-cyan);\n $dark-accent: mat-palette($mat-blue, A400, A100, A700);\n $dark-warn: mat-palette($mat-red);\n $dark-theme: mat-dark-theme($dark-primary, $dark-accent, $dark-warn);\n\n @include angular-material-theme($dark-theme);\n}\n\n@mixin outlined-button-mds($color) {\n border: solid $color 1px;\n border-radius: 0;\n display: flex;\n align-items: center;\n height: 2em;\n padding-left: 2.5em;\n padding-right: 2.5em;\n .mat-button-wrapper {\n font-weight: normal;\n font-family: $font-family-primary;\n color: $color;\n }\n}\n\n// TODO: this is not the ideal override. Really, we should be using material theming, or mixins to\n// achieve this styling.\n.mat-stroked-button.mat-black {\n @include outlined-button-mds(black);\n}\n.mat-stroked-button.mat-coachmark {\n @include outlined-button-mds($coachmark-text);\n}\n\n.mat-stroked-button.mat-blue-coachmark {\n @include outlined-button-mds($coachmark-dark-text);\n }\n\nhtml,\nbody {\n height: 100%;\n width: 100%;\n}\n\nbody {\n background-color: #fff;\n}\n\n.app,\nbody {\n font-family: \"Helvetica Neue\", \"Helvetica\", Arial, sans-serif;\n font-weight: 300;\n}\n\n.app {\n position: absolute;\n}\n\nhtml,\nbody {\n margin: 0;\n padding: 0;\n font-size: 16px;\n}\n\n.app {\n top: 0;\n left: 0;\n bottom: 0;\n right: 0\n}\n\n* {\n font-family: \"Helvetica Neue\", \"Helvetica\", Arial, sans-serif;\n box-sizing: border-box;\n}\n\n.center {\n position: absolute;\n top: 50%;\n left: 50%;\n -webkit-transform: translate(-50%, -50%);\n -ms-transform: translate(-50%, -50%);\n transform: translate(-50%, -50%);\n margin: auto;\n}\n\n.loading {\n display: inline-block;\n padding: 1.5em;\n border-radius: 1em;\n color: #000;\n font-size: 10mm;\n text-align: center;\n}\n\n.bounce,\n.bounce .circle,\n.bounce .circle .inner {\n height: 4em;\n width: 4em;\n border-radius: 100%;\n}\n\n.bounce .circle {\n -webkit-animation: sk-scaleout .8s infinite ease-in-out;\n animation: sk-scaleout .8s infinite ease-in-out;\n}\n\n.bounce .circle .inner {\n background-color: #000;\n}\n\n@-webkit-keyframes sk-scaleout {\n 0% {\n -webkit-transform: scale(0)\n }\n 20% {\n opacity: 1\n }\n 100% {\n -webkit-transform: scale(1);\n opacity: 0\n }\n}\n\n@keyframes sk-scaleout {\n 0% {\n -webkit-transform: scale(0);\n transform: scale(0)\n }\n 20% {\n opacity: 1\n }\n 100% {\n -webkit-transform: scale(1);\n transform: scale(1);\n opacity: 0\n }\n}\n\n.no-script {\n height: 10em;\n width: 15em;\n padding: .5em 1em;\n background-color: #FFF;\n border-radius: .1em;\n box-shadow: 0 .1em .2em .1em rgba(0, 0, 0, .2);\n text-align: center;\n position: absolute;\n top: 1em;\n left: 50%;\n transform: translateX(-50%)\n}\n\n.no-script img {\n border-radius: .2em;\n height: 6em;\n width: 6em\n}\n\n.no-script .title {\n padding: 0 1em;\n font-style: italic;\n font-size: 1.2em\n}\n\n.no-script .content {\n display: flex\n}\n\n.aca-coin {\n position: relative;\n height: 4.0em;\n width: 4.0em;\n padding: 0.5em;\n margin: 0.5em;\n border-radius: 100%;\n background-color: #dd3d5e;\n animation: coin-spin 2.0s infinite ease-in-out;\n}\n\n.aca-logo {\n height: 3.0em;\n width: 3.0em;\n background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDIwMDEwOTA0Ly9FTiIKICJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy1TVkctMjAwMTA5MDQvRFREL3N2ZzEwLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4wIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiB3aWR0aD0iNzc5LjAwMDAwMHB0IiBoZWlnaHQ9IjMyNC4wMDAwMDBwdCIgdmlld0JveD0iMCAwIDc3OS4wMDAwMDAgMzI0LjAwMDAwMCIKIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiPgo8bWV0YWRhdGE+CkNyZWF0ZWQgYnkgcG90cmFjZSAxLjE0LCB3cml0dGVuIGJ5IFBldGVyIFNlbGluZ2VyIDIwMDEtMjAxNwo8L21ldGFkYXRhPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjAwMDAwMCwzMjQuMDAwMDAwKSBzY2FsZSgwLjEwMDAwMCwtMC4xMDAwMDApIgpmaWxsPSIjZmZmIiBzdHJva2U9Im5vbmUiPgo8cGF0aCBkPSJNNDAwNSAzMjI4IGMtNDQ3IC0yNSAtODM5IC0yMzUgLTExMDkgLTU5NiAtMzE5IC00MjYgLTQxMSAtMTE0NQotMjE2IC0xNjk3IDE2NyAtNDcxIDU0OSAtODAzIDEwMzcgLTkwMiAxMTEgLTIzIDUwNSAtMjYgNjIzIC01IDEyNyAyMyAyODAgNjIKMzgyIDk5IGw5OCAzNSAwIDEwNSBjMCA5NiAtMiAxMDUgLTE3IDEwMCAtMTAgLTMgLTU3IC0yMiAtMTA2IC00MSAtMTkzIC04MAotMzczIC0xMTEgLTYzNyAtMTExIC0yNzQgMCAtNDAxIDI3IC01OTcgMTI5IC0xMTYgNjAgLTE5OSAxMjQgLTMwMyAyMzMgLTE3MgoxNzggLTI3NiAzODggLTMyNSA2NTYgLTM2IDE5NSAtMzYgNTA4IDAgNzAzIDEwMSA1NTUgNDY2IDk1MiA5ODIgMTA3MCA5MyAyMQo0MTUgMzAgNTI1IDE1IDEyNCAtMTggMjc2IC01NiAzNzkgLTk2IDUwIC0xOSA5MyAtMzUgOTUgLTM1IDIgMCA0IDUyIDQgMTE1CmwwIDExNCAtODcgMjcgYy0yMjggNjkgLTQ2OSA5NyAtNzI4IDgyeiIvPgo8cGF0aCBkPSJNNTkxIDE2MzMgYy0zMjEgLTg1MSAtNTg2IC0xNTU0IC01ODkgLTE1NjEgLTMgLTkgMjQgLTEyIDExNiAtMTIKbDEyMCAwIDYwIDE2MiBjMzMgOTAgMTEzIDMwOCAxNzggNDg2IGwxMTkgMzIyIDY3NSAwIDY3NSAwIDEwNCAtMjgyIGM1NyAtMTU2CjEzNyAtMzc0IDE3OCAtNDg2IGw3NSAtMjAyIDExOSAwIGM4OSAwIDExOSAzIDExOCAxMyAwIDYgLTI2MCA3MDcgLTU3NyAxNTU3CmwtNTc3IDE1NDUgLTEwNSAzIC0xMDYgMyAtNTgzIC0xNTQ4eiIvPgo8cGF0aCBkPSJNNjQwNSAzMTYzIGMtMzggLTk5IC0xMTU5IC0zMDcyIC0xMTYzIC0zMDg2IC00IC0xNSA2IC0xNyAxMTQgLTE3CmwxMTkgMCAxMDQgMjgzIGM1NyAxNTUgMTM3IDM3MyAxNzggNDg1IGw3NSAyMDIgNjc2IC0yIDY3NiAtMyAxNzYgLTQ4MCAxNzcKLTQ4MCAxMjIgLTMgMTIzIC0zIC04IDIzIGMtNCAxMiAtMjY0IDcxMyAtNTc5IDE1NTggbC01NzMgMTUzNSAtMTA1IDMgYy05MyAyCi0xMDUgMSAtMTEyIC0xNXoiLz4KPC9nPgo8L3N2Zz4K);\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n}\n\n@keyframes coin-spin {\n 0% {\n transform: rotateY(0deg) translateY(0%);\n }\n 49% {\n transform: rotateY(179deg) translateY(20%);\n }\n 50% {\n transform: rotateY(181deg) translateY(20%);\n }\n 100% {\n transform: rotateY(359deg) translateY(0%);\n }\n}\n\n.shadow {\n position: absolute;\n bottom: 0;\n left: 50%;\n animation: floating-shadow 2s infinite ease-in-out;\n width: 48px;\n height: 6px;\n background-color: rgba(0, 0, 0, 0.2);\n border-radius: 100%;\n}\n\n@keyframes floating-shadow {\n 0% {\n transform: translateX(-50%) scale(1.0)\n }\n 45% {\n transform: translateX(-50%) scale(1.3);\n }\n 55% {\n transform: translateX(-50%) scale(1.3);\n }\n 100% {\n transform: translateX(-50%) scale(1.0);\n }\n}\n\nhtml, body {\n height: 100%;\n}\n\nbody {\n margin: 0;\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n}\n\n.yellow-snackbar {\n background: #ffd149;\n color:rgba(0, 0, 0, .9);\n text-align: center;\n span {\n color:rgba(0, 0, 0, .9);\n }\n}\n\n// Fix room-room-location-preview show legend input position, no idea why.\n.sub {\n app-map-controls > div {\n mck-legend-dropdown {\n position: relative;\n top: -6px;\n }\n \n .map-info-button {\n @include respond-to(mobile) {\n display: none !important;\n }\n }\n } \n} \n\n.mck-modal-backdrop {\n background-color: rgba(#051C2C, 0.85);\n}\n\n.pulsate {\n animation: pulsate 2s ease-out;\n animation-iteration-count: infinite; \n opacity: 0.3;\n}\n@keyframes pulsate {\n 0% { \n opacity: 0.3;\n }\n 50% { \n opacity: 1.0;\n }\n 100% { \n opacity: 0.3;\n }\n}\n\n.mat-form-field-invalid {\n .mat-form-field-outline, .mat-form-field-outline-thick {\n >div {\n border-color: #f44336 !important;\n }\n \n }\n}\n\n.mck-toggle {\n position: relative;\n .mat-slide-toggle-thumb {\n height: 0.875rem;\n width: 0.875rem;\n border-radius: 50%;\n }\n .mat-slide-toggle-thumb-container {\n top: 0.2rem;\n left: 0.2rem;\n }\n .mat-slide-toggle-bar {\n position: relative;\n width: 2.5rem;\n height: 1.25rem;\n flex-shrink: 0;\n border-radius: 1.25rem;\n background-color: #d0d0d0;\n .mat-slide-toggle-ripple{\n top: calc(50% - 23px);\n }\n }\n \n &.mat-checked {\n .mat-slide-toggle-thumb-container {\n left: 0.42rem;\n }\n .mat-slide-toggle-thumb {\n background-color: white;\n } \n .mat-slide-toggle-bar {\n background-color: #2152fe;\n }\n } \n \n}\n\n.mck-chevron-icon {\n svg {\n transform: rotate(180deg);\n transition: transform 0.5s ease; \n }\n\n &.turn-up {\n svg {\n transform: rotate(0deg); \n }\n \n }\n}\n\n.mat-tab-label {\n padding: 0 6px 0 2px !important;\n min-width: auto !important;\n margin-right: 40px;\n font-family: $font-mckinsey-sans;\n font-size: 20px;\n font-weight: 400;\n color: #333333;\n opacity: 1 !important;\n &.mat-tab-label-active {\n \n .mat-tab-label-content {\n color: $primary-highlight;\n \n }\n }\n .mat-tab-label-content {\n color: #333333;\n padding-bottom: 20px;\n }\n}\n\n.mat-tab-group.mat-primary .mat-ink-bar, .mat-tab-nav-bar.mat-primary .mat-ink-bar {\n background-color: $primary-highlight;\n height: 4px;\n}\n\n@include is-screen-size(mobile) {\n .mck-tab {\n .mat-tab-header {\n transform: scale(.65) !important;\n width: 100vw;\n display: block;\n position: relative;\n left: -19%;\n .mat-tab-header-pagination {\n display: none;\n }\n } \n } \n}\n\n.status {\n background: #fff;\n color: #000;\n &.tentative, &.pending, &.requested {\n background: #FFF3CE;\n color: #6A4F00;\n }\n &.accepted {\n background: #D1F4DD;\n color: #006200;\n }\n &.approved {\n background: #D1F4DD;\n color: #006200;\n }\n &.expired {\n background: #F0F0F0;\n color: #757575;\n }\n &.declined, &.cancelled {\n background: #FFE5EA;\n color: #B0001D;\n }\n}\n\n\n.banner{\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 26px;\n box-sizing: border-box; \n \n .banner-text {\n width: calc(100% - 50px);\n padding: 0 20px;\n box-sizing: border-box;\n font-weight: 500;\n font-family: $font-family-primary;\n margin:0;\n text-align: left;\n }\n \n img:last-child{\n cursor: pointer;\n }\n \n @include is-screen-size(mobile) {\n align-items: end;\n }\n\n &.advise{\n background-color: #EBEBF6;\n justify-content: start !important;\n border: 1px solid rgba(106, 79, 0, 0.11);\n .banner-text {\n color: #1B1B19;\n }\n }\n\n &.info {\n background-color: #E6ECFF;\n .banner-text {\n color: #1E32E6;\n }\n }\n &.warning {\n background-color: #fdf1f3;\n .banner-text {\n color: #B0001D;\n }\n }\n &.fixed {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n z-index: 5;\n }\n }\n\n\n .fullpage-modal {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 3;\n background-color: #f8f9fa;\n .header {\n z-index: 1;\n }\n }\n\n\n.coachmark {\n margin-top: 0;\n position: relative;\n top: -6px;\n font-family: $font-mckinsey-sans;\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n line-height: 20px;\n color: #333333;\n}\n\n.bottom-panel-buttons {\n position: fixed;\n bottom: 0;\n width: 100%;\n min-height: 80px;\n background-color: white;\n border: 1px solid #E6E6E6;\n z-index: 1002;\n \n .buttons {\n padding: 24px 16px;\n border: none;\n background-color: transparent;\n max-width: 684px;\n margin: 0 auto;\n display: flex;\n\n button {\n flex: 1;\n height: 48px;\n font-size: 16px;\n max-width: 332px;\n }\n button:nth-child(1) {\n margin-right: 5px;\n border: 1px solid #D0D0D0;\n }\n button:nth-child(2) {\n margin-left: 5px;\n }\n\n @include is-screen-size(mobile) {\n padding: 16px 0;\n\n button {\n margin: 0 16px;\n }\n button:nth-child(1) {\n margin-right: 8px;\n }\n button:nth-child(2) {\n margin-left: 8px;\n }\n\n }\n }\n }\n\n .modal_mask {\n width: 100vw;\n height: 100vh;\n position: fixed;\n top: 0;\n left: 0;\n background-color: white;\n z-index: 3;\n }\n\n .mat-snack-bar-container{\n width: 380px;\n height: 100%;\n color: #333333;\n background: #fff;\n font-size: 14px;\n font-weight: 500;\n font-family: \"McKinsey Sans\", \"Helvetica Neue\";\n}\n\n// mat-radio-button[ng-reflect-value=\"4\"] {\n// display: none;\n// }\n"]}]); // Exports exports.locals = { "primary": "#1F40E6", diff --git a/staff/styles-es2015.js.map b/staff/styles-es2015.js.map index 60528fb98..be5486422 100644 --- a/staff/styles-es2015.js.map +++ b/staff/styles-es2015.js.map @@ -1 +1 @@ -{"version":3,"sources":["./src/styles.scss","/home/runner/work/mckinsey-converge/mckinsey-converge/node_modules/css-loader/dist/runtime/api.js","/home/runner/work/mckinsey-converge/mckinsey-converge/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack:///./src/styles.scss?718d"],"names":[],"mappings":"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AO,QAAQ,WAAW,WAAW,WAAW,UAAU,WAAW,OAAO,QAAQ,YAAY,QAAQ,OAAO,WAAW,OAAO,OAAO,WAAW,UAAU,WAAW,OAAO,QAAQ,WAAW,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,UAAU,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,UAAU,WAAW,OAAO,aAAa,aAAa,WAAW,YAAY,OAAO,OAAO,WAAW,YAAY,eAAe,eAAe,QAAQ,OAAO,YAAY,cAAc,aAAa,OAAO,OAAO,WAAW,QAAQ,OAAO,WAAW,QAAQ,OAAO,UAAU,OAAO,OAAO,WAAW,WAAW,WAAW,UAAU,WAAW,OAAO,OAAO,YAAY,QAAQ,OAAO,UAAU,OAAO,OAAO,WAAW,WAAW,WAAW,UAAU,WAAW,OAAO,OAAO,YAAY,QAAQ,OAAO,WAAW,UAAU,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,WAAW,WAAW,UAAU,WAAW,OAAO,OAAO,YAAY,QAAQ,OAAO,UAAU,OAAO,OAAO,WAAW,WAAW,WAAW,UAAU,WAAW,OAAO,OAAO,YAAY,QAAQ,OAAO,YAAY,WAAW,WAAW,OAAO,OAAO,WAAW,UAAU,OAAO,OAAO,YAAY,WAAW,OAAO,OAAO,WAAW,UAAU,OAAO,OAAO,UAAU,WAAW,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,QAAQ,WAAW,UAAU,OAAO,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,WAAW,WAAW,WAAW,WAAW,OAAO,MAAM,YAAY,OAAO,MAAM,UAAU,WAAW,UAAU,UAAU,WAAW,UAAU,WAAW,UAAU,UAAU,WAAW,WAAW,MAAM,OAAO,WAAW,UAAU,UAAU,UAAU,UAAU,OAAO,OAAO,UAAU,YAAY,QAAQ,OAAO,UAAU,OAAO,OAAO,UAAU,WAAW,YAAY,QAAQ,OAAO,WAAW,WAAW,WAAW,YAAY,YAAY,UAAU,WAAW,OAAO,OAAO,WAAW,UAAU,UAAU,UAAU,UAAU,YAAY,aAAa,WAAW,WAAW,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,KAAK,UAAU,OAAO,KAAK,OAAO,aAAa,QAAQ,OAAO,UAAU,OAAO,OAAO,WAAW,YAAY,YAAY,WAAW,UAAU,UAAU,OAAO,OAAO,UAAU,UAAU,WAAW,OAAO,MAAM,WAAW,OAAO,MAAM,WAAW,OAAO,MAAM,WAAW,OAAO,MAAM,WAAW,OAAO,MAAM,WAAW,WAAW,MAAM,MAAM,WAAW,WAAW,MAAM,MAAM,UAAU,MAAM,MAAM,WAAW,WAAW,WAAW,WAAW,MAAM,QAAQ,MAAM,MAAM,MAAM,OAAO,KAAK,OAAO,MAAM,OAAO,MAAM,MAAM,MAAM,OAAO,KAAK,OAAO,MAAM,OAAO,MAAM,OAAO,KAAK,OAAO,MAAM,OAAO,MAAM,QAAQ,KAAK,OAAO,KAAK,OAAO,MAAM,OAAO,MAAM,aAAa,aAAa,YAAY,OAAO,UAAU,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,UAAU,QAAQ,OAAO,UAAU,QAAQ,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,YAAY,QAAQ,OAAO,UAAU,UAAU,OAAO,OAAO,MAAM,WAAW,OAAO,KAAK,OAAO,MAAM,WAAW,OAAO,KAAK,OAAO,aAAa,aAAa,UAAU,OAAO,OAAO,MAAM,WAAW,OAAO,KAAK,OAAO,MAAM,WAAW,OAAO,KAAK,OAAO,YAAY,MAAM,OAAO,UAAU,OAAO,OAAO,UAAU,WAAW,OAAO,OAAO,WAAW,QAAQ,OAAO,WAAW,QAAQ,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,WAAW,OAAO,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,YAAY,OAAO,OAAO,WAAW,WAAW,UAAU,OAAO,OAAO,WAAW,UAAU,WAAW,UAAU,UAAU,WAAW,WAAW,OAAO,OAAO,YAAY,QAAQ,OAAO,WAAW,OAAO,OAAO,UAAU,WAAW,WAAW,QAAQ,OAAO,WAAW,WAAW,QAAQ,QAAQ,UAAU,QAAQ,OAAO,MAAM,YAAY,aAAa,QAAQ,KAAK,OAAO,MAAM,YAAY,aAAa,QAAQ,KAAK,OAAO,MAAM,UAAU,WAAW,QAAQ,QAAQ,WAAW,WAAW,QAAQ,KAAK,OAAO,MAAM,UAAU,WAAW,QAAQ,QAAQ,WAAW,WAAW,QAAQ,KAAK,OAAO,YAAY,WAAW,YAAY,WAAW,WAAW,YAAY,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,QAAQ,OAAO,YAAY,WAAW,YAAY,WAAW,WAAW,YAAY,WAAW,QAAQ,OAAO,YAAY,YAAY,WAAW,QAAQ,QAAQ,WAAW,QAAQ,QAAQ,WAAW,QAAQ,OAAO,YAAY,YAAY,WAAW,QAAQ,OAAO,WAAW,QAAQ,QAAQ,YAAY,OAAO,OAAO,UAAU,UAAU,WAAW,WAAW,WAAW,OAAO,OAAO,YAAY,WAAW,YAAY,WAAW,WAAW,YAAY,WAAW,YAAY,QAAQ,OAAO,YAAY,QAAQ,OAAO,YAAY,WAAW,YAAY,WAAW,WAAW,YAAY,OAAO,OAAO,WAAW,WAAW,QAAQ,OAAO,WAAW,QAAQ,OAAO,UAAU,WAAW,UAAU,OAAO,OAAO,UAAU,QAAQ,OAAO,YAAY,QAAQ,OAAO,MAAM,YAAY,QAAQ,KAAK,OAAO,MAAM,YAAY,QAAQ,KAAK,OAAO,YAAY,QAAQ,OAAO,MAAM,YAAY,OAAO,KAAK,OAAO,MAAM,YAAY,OAAO,KAAK,OAAO,WAAW,WAAW,YAAY,aAAa,aAAa,aAAa,aAAa,YAAY,WAAW,YAAY,WAAW,OAAO,OAAO,MAAM,WAAW,OAAO,KAAK,OAAO,MAAM,WAAW,OAAO,KAAK,OAAO,YAAY,WAAW,YAAY,WAAW,WAAW,YAAY,UAAU,OAAO,OAAO,YAAY,OAAO,QAAQ,YAAY,QAAQ,OAAO,YAAY,WAAW,YAAY,WAAW,WAAW,YAAY,UAAU,YAAY,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,WAAW,WAAW,WAAW,OAAO,OAAO,UAAU,WAAW,OAAO,OAAO,YAAY,WAAW,YAAY,WAAW,WAAW,YAAY,QAAQ,OAAO,WAAW,OAAO,OAAO,UAAU,WAAW,OAAO,OAAO,YAAY,WAAW,aAAa,aAAa,OAAO,OAAO,UAAU,WAAW,WAAW,UAAU,WAAW,OAAO,OAAO,UAAU,QA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aAAa,WAAW,YAAY,WAAW,OAAO,OAAO,OAAO,aAAa,cAAc,aAAa,WAAW,OAAO,KAAK,OAAO,OAAO,aAAa,cAAc,aAAa,WAAW,OAAO,KAAK,OAAO,WAAW,QAAQ,OAAO,YAAY,OAAO,OAAO,YAAY,QAAQ,OAAO,UAAU,UAAU,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,WAAW,UAAU,WAAW,OAAO,OAAO,OAAO,UAAU,UAAU,WAAW,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,OAAO,UAAU,UAAU,WAAW,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,WAAW,WAAW,WAAW,OAAO,OAAO,OAAO,WAAW,WAAW,OAAO,KAAK,OAAO,OAAO,WAAW,WAAW,OAAO,KAAK,OAAO,WAAW,UAAU,WAAW,OAAO,OAAO,OAAO,UAAU,UAAU,WAAW,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,OAAO,UAAU,UAAU,WAAW,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,WAAW,WAAW,OAAO,OAAO,OAAO,UAAU,UAAU,WAAW,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,OAAO,UAAU,UAAU,WAAW,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,WAAW,WAAW,OAAO,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,WAAW,UAAU,UAAU,WAAW,OAAO,OAAO,WAAW,WAAW,WAAW,OAAO,OAAO,WAAW,UAAU,QAAQ,OAAO,OAAO,UAAU,UAAU,QAAQ,KAAK,OAAO,OAAO,UAAU,UAAU,QAAQ,KAAK,OAAO,OAAO,WAAW,UAAU,WAAW,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,OAAO,WAAW,UAAU,WAAW,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,WAAW,UAAU,WAAW,OAAO,OAAO,WAAW,WAAW,WAAW,OAAO,OAAO,WAAW,UAAU,QAAQ,OAAO,OAAO,UAAU,UAAU,QAAQ,KAAK,OAAO,OAAO,UAAU,UAAU,QAAQ,KAAK,OAAO,OAAO,WAAW,UAAU,WAAW,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,OAAO,WAAW,UAAU,WAAW,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,OAAO,WAAW,UAAU,aAAa,eAAe,OAAO,KAAK,OAAO,OAAO,WAAW,UAAU,aAAa,eAAe,OAAO,KAAK,OAAO,aAAa,QAAQ,OAAO,aAAa,QAAQ,OAAO,WAAW,QAAQ,OAAO,UAAU,OAAO,OAAO,UAAU,aAAa,WAAW,YAAY,WAAW,WAAW,aAAa,aAAa,WAAW,cAAc,cAAc,aAAa,OAAO,OAAO,UAAU,UAAU,WAAW,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,UAAU,cAAc,cAAc,OAAO,OAAO,cAAc,QAAQ,OAAO,UAAU,OAAO,OAAO,cAAc,YAAY,UAAU,WAAW,QAAQ,OAAO,cAAc,YAAY,WAAW,WAAW,OAAO,OAAO,cAAc,WAAW,UAAU,aAAa,OAAO,OAAO,OAAO,YAAY,UAAU,OAAO,KAAK,OAAO,OAAO,YAAY,UAAU,OAAO,KAAK,OAAO,cAAc,WAAW,UAAU,aAAa,WAAW,OAAO,OAAO,OAAO,YAAY,UAAU,OAAO,KAAK,OAAO,OAAO,YAAY,UAAU,OAAO,KAAK,OAAO,cAAc,YAAY,WAAW,OAAO,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,cAAc,YAAY,WAAW,OAAO,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,cAAc,YAAY,WAAW,OAAO,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,cAAc,YAAY,UAAU,QAAQ,OAAO,OAAO,UAAU,QAAQ,KAAK,OAAO,OAAO,UAAU,QAAQ,KAAK,QAAQ,UAAU,WAAW,QAAQ,OAAO,cAAc,YAAY,UAAU,QAAQ,OAAO,OAAO,UAAU,WAAW,QAAQ,KAAK,OAAO,OAAO,UAAU,WAAW,QAAQ,KAAK,QAAQ,UAAU,WAAW,QAAQ,OAAO,cAAc,YAAY,UAAU,QAAQ,OAAO,OAAO,UAAU,WAAW,QAAQ,KAAK,OAAO,OAAO,UAAU,WAAW,QAAQ,KAAK,QAAQ,UAAU,WAAW,QAAQ,QAAQ,UAAU,WAAW,QAAQ,OAAO,cAAc,YAAY,UAAU,QAAQ,OAAO,OAAO,UAAU,WAAW,QAAQ,KAAK,OAAO,OAAO,UAAU,WAAW,QAAQ,KAAK,QAAQ,UAAU,WAAW,QAAQ,QAAQ,UAAU,WAAW,QAAQ,OAAO,cAAc,YAAY,UAAU,QAAQ,OAAO,OAAO,UAAU,WAAW,QAAQ,KAAK,OAAO,OAAO,UAAU,WAAW,QAAQ,KAAK,QAAQ,UAAU,WAAW,QAAQ,QAAQ,UAAU,WAAW,QAAQ,OAAO,cAAc,YAAY,UAAU,QAAQ,OAAO,OAAO,UAAU,WAAW,QAAQ,KAAK,OAAO,OAAO,UAAU,WAAW,QAAQ,KAAK,QAAQ,UAAU,WAAW,QAAQ,QAAQ,UAAU,WAAW,QAAQ,OAAO,cAAc,YAAY,UAAU,QAAQ,OAAO,OAAO,UAAU,QAAQ,KAAK,OAAO,OAAO,UAAU,QAAQ,KAAK,QAAQ,UAAU,WAAW,QAAQ,OAAO,cAAc,eAAe,eAAe,aAAa,UAAU,OAAO,OAAO,OAAO,WAAW,UAAU,OAAO,KAAK,OAAO,OAAO,WAAW,UAAU,OAAO,KAAK,OAAO,cAAc,eAAe,eAAe,aAAa,UAAU,UAAU,UAAU,QAAQ,OAAO,OAAO,UAAU,UAAU,UAAU,QAAQ,KAAK,OAAO,OAAO,UAAU,UAAU,UAAU,QAAQ,KAAK,QAAQ,UAAU,WAAW,QAAQ,OAAO,cAAc,YAAY,WAAW,YAAY,WAAW,OAAO,OAAO,OAAO,aAAa,WAAW,OAAO,KAAK,OAAO,OAAO,aAAa,WAAW,OAAO,KAAK,OAAO,aAAa,WAAW,YAAY,WAAW,WAAW,aAAa,OAAO,OAAO,aAAa,WAAW,YAAY,WAAW,WAAW,aAAa,OAAO,OAAO,WAAW,UAAU,UAAU,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,YAAY,aAAa,WAAW,WAAW,aAAa,aAAa,OAAO,OAAO,UAAU,UAAU,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,OAAO,UAAU,OAAO,KAAK,OAAO,OAAO,UAAU,OAAO,KAAK,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,UAAU,OAAO,OAAO,UAAU,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,aAAa,QAAQ,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,OAAO,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,WAAW,OAAO,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,UAAU,WAAW,OAAO,OAAO,WAAW,WAAW,WAAW,OAAO,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,UAAU,OAAO,OAAO,aAAa,YAAY,OAAO,OAAO,aAAa,YAAY,OAAO,QAAQ,KAAK,KAAK,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,UAAU,WAAW,WAAW,OAAO,OAAO,UAAU,WAAW,UAAU,WAAW,YAAY,WAAW,WAAW,OAAO,OAAO,UAAU,WAAW,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,UAAU,OAAO,OAAO,UAAU,WAAW,WAAW,OAAO,OAAO,UAAU,WAAW,UAAU,OAAO,OAAO,WAAW,WAAW,UAAU,UAAU,UAAU,WAAW,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,UAAU,UAAU,WAAW,WAAW,UAAU,UAAU,OAAO,OAAO,WAAW,WAAW,UAAU,OAAO,OAAO,UAAU,QAAQ,OAAO,UAAU,UAAU,OAAO,OAAO,WAAW,UAAU,UAAU,UAAU,OAAO,OAAO,WAAW,UAAU,WAAW,WAAW,WAAW,OAAO,OAAO,UAAU,UAAU,WAAW,UAAU,WAAW,UAAU,UAAU,OAAO,OAAO,WAAW,UAAU,WAAW,OAAO,OAAO,WAAW,WAAW,OAAO,OAAO,UAAU,WAAW,OAAO,OAAO,UAAU,WAAW,WAAW,UAAU,WAAW,OAAO,OAAO,WAAW,UAAU,WAAW,WAAW,UAAU,OAAO,OAAO,UAAU,UAAU,WAAW,WAAW,UAAU,OAAO,OAAO,UAAU,OAAO,QAAQ,WAAW,WAAW,WAAW,OAAO,OAAO,WAAW,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,WAAW,UAAU,WAAW,UAAU,OAAO,OAAO,WAAW,UAAU,UAAU,MAAM,KAAK,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,UAAU,OAAO,OAAO,WAAW,UAAU,WAAW,UAAU,UAAU,WAAW,UAAU,WAAW,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,UAAU,UAAU,WAAW,WAAW,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,QAAQ,UAAU,OAAO,OAAO,UAAU,WAAW,UAAU,WAAW,UAAU,UAAU,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,UAAU,OAAO,QAAQ,WAAW,WAAW,OAAO,OAAO,WAAW,WAAW,UAAU,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,UAAU,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,WAAW,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,YAAY,QAAQ,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,QAAQ,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,WAAW,UAAU,WAAW,OAAO,OAAO,UAAU,WAAW,OAAO,OAAO,UAAU,UAAU,WAAW,WAAW,OAAO,OAAO,UAAU,WAAW,OAAO,OAAO,UAAU,UAAU,WAAW,WAAW,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,UAAU,UAAU,WAAW,WAAW,OAAO,OAAO,UAAU,WAAW,OAAO,OAAO,UAAU,UAAU,WAAW,WAAW,OAAO,OAAO,WAAW,WAAW,WAAW,WAAW,OAAO,OAAO,WAAW,UAAU,UAAU,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,UAAU,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,WAAW,WAAW,UAAU,UAAU,OAAO,OAAO,MAAM,UAAU,OAAO,KAAK,OAAO,MAAM,UAAU,OAAO,KAAK,OAAO,WAAW,WAAW,WAAW,OAAO,OAAO,UAAU,WAAW,WAAW,OAAO,OAAO,WAAW,WAAW,QAAQ,OAAO,WAAW,WAAW,OAAO,OAAO,UAAU,UAAU,QAAQ,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,WAAW,OAAO,OAAO,UAAU,QAAQ,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,QAAQ,OAAO,UAAU,QAAQ,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,UAAU,WAAW,cAAc,aAAa,UAAU,OAAO,OAAO,OAAO,UAAU,OAAO,KAAK,OAAO,OAAO,UAAU,OAAO,KAAK,OAAO,WAAW,WAAW,UAAU,UAAU,WAAW,OAAO,OAAO,WAAW,WAAW,OAAO,QAAQ,KAAK,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,QAAQ,QAAQ,WAAW,OAAO,UAAU,WAAW,OAAO,QAAQ,WAAW,OAAO,QAAQ,YAAY,QAAQ,OAAO,aAAa,OAAO,OAAO,aAAa,OAAO,OAAO,aAAa,OAAO,OAAO,aAAa,OAAO,OAAO,aAAa,OAAO,OAAO,aAAa,OAAO,OAAO,aAAa,OAAO,OAAO,aAAa,OAAO,OAAO,aAAa,OAAO,OAAO,aAAa,OAAO,OAAO,aAAa,OAAO,OAAO,aAAa,OAAO,OAAO,aAAa,OAAO,OAAO,aAAa,OAAO,OAAO,aAAa,OAAO,OAAO,aAAa,OAAO,OAAO,aAAa,OAAO,OAAO,aAAa,OAAO,OAAO,aAAa,OAAO,OAAO,aAAa,OAAO,OAAO,aAAa,OAAO,OAAO,aAAa,OAAO,OAAO,aAAa,OAAO,OAAO,aAAa,OAAO,OAAO,aAAa,OAAO,OAAO,WAAW,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,WAAW,OAAO,OAAO,YAAY,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,WAAW,OAAO,OAAO,aAAa,WAAW,OAAO,OAAO,WAAW,UAAU,OAAO,OAAO,UAAU,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,OAAO,QAAQ,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,YAAY,aAAa,QAAQ,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,WAAW,YAAY,aAAa,QAAQ,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,WAAW,YAAY,aAAa,QAAQ,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,aAAa,aAAa,WAAW,OAAO,OAAO,UAAU,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,YAAY,aAAa,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,YAAY,QAAQ,OAAO,YAAY,QAAQ,OAAO,aAAa,QAAQ,OAAO,YAAY,OAAO,OAAO,YAAY,OAAO,OAAO,YAAY,OAAO,OAAO,YAAY,OAAO,OAAO,YAAY,OAAO,OAAO,YAAY,OAAO,OAAO,YAAY,OAAO,QAAQ,aAAa,OAAO,QAAQ,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,WAAW,WAAW,OAAO,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,QAAQ,WAAW,OAAO,OAAO,WAAW,WAAW,OAAO,OAAO,YAAY,OAAO,OAAO,YAAY,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,QAAQ,OAAO,WAAW,OAAO,OAAO,aAAa,QAAQ,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,YAAY,QAAQ,OAAO,YAAY,QAAQ,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,QAAQ,WAAW,OAAO,QAAQ,WAAW,OAAO,QAAQ,WAAW,OAAO,OAAO,cAAc,eAAe,QAAQ,OAAO,aAAa,YAAY,OAAO,OAAO,aAAa,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,cAAc,cAAc,QAAQ,OAAO,YAAY,YAAY,OAAO,OAAO,YAAY,QAAQ,OAAO,cAAc,cAAc,QAAQ,OAAO,YAAY,YAAY,OAAO,OAAO,YAAY,QAAQ,OAAO,cAAc,cAAc,QAAQ,OAAO,YAAY,YAAY,OAAO,OAAO,YAAY,QAAQ,OAAO,WAAW,OAAO,UAAU,WAAW,OAAO,QAAQ,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,SAAS,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,SAAS,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,aAAa,aAAa,WAAW,OAAO,OAAO,WAAW,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,aAAa,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,aAAa,aAAa,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,WAAW,OAAO,OAAO,YAAY,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,KAAK,WAAW,OAAO,KAAK,OAAO,WAAW,OAAO,QAAQ,WAAW,OAAO,OAAO,WAAW,OAAO,QAAQ,UAAU,OAAO,OAAO,WAAW,QAAQ,OAAO,WAAW,QAAQ,OAAO,YAAY,QAAQ,OAAO,YAAY,QAAQ,OAAO,YAAY,QAAQ,OAAO,YAAY,QAAQ,OAAO,aAAa,QAAQ,OAAO,aAAa,QAAQ,OAAO,aAAa,QAAQ,OAAO,aAAa,QAAQ,OAAO,YAAY,QAAQ,OAAO,YAAY,QAAQ,OAAO,YAAY,QAAQ,OAAO,YAAY,QAAQ,QAAQ,YAAY,QAAQ,QAAQ,aAAa,QAAQ,OAAO,YAAY,QAAQ,MAAM,WAAW,OAAO,MAAM,WAAW,OAAO,MAAM,WAAW,OAAO,MAAM,aAAa,WAAW,WAAW,OAAO,OAAO,WAAW,QAAQ,OAAO,aAAa,WAAW,WAAW,OAAO,MAAM,WAAW,OAAO,MAAM,YAAY,OAAO,MAAM,WAAW,OAAO,MAAM,aAAa,OAAO,MAAM,WAAW,MAAM,OAAO,WAAW,QAAQ,OAAO,YAAY,QAAQ,OAAO,YAAY,QAAQ,OAAO,YAAY,QAAQ,OAAO,WAAW,QAAQ,OAAO,WAAW,QAAQ,OAAO,aAAa,QAAQ,OAAO,aAAa,QAAQ,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,QAAQ,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,YAAY,OAAO,OAAO,YAAY,OAAO,OAAO,YAAY,OAAO,OAAO,YAAY,OAAO,OAAO,YAAY,OAAO,OAAO,WAAW,OAAO,QAAQ,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,YAAY,OAAO,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,QAAQ,WAAW,OAAO,UAAU,WAAW,OAAO,OAAO,WAAW,OAAO,QAAQ,WAAW,OAAO,QAAQ,WAAW,WAAW,OAAO,QAAQ,WAAW,OAAO,UAAU,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,QAAQ,WAAW,OAAO,OAAO,WAAW,OAAO,QAAQ,WAAW,OAAO,OAAO,WAAW,OAAO,QAAQ,WAAW,OAAO,QAAQ,WAAW,OAAO,QAAQ,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,YAAY,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,YAAY,YAAY,OAAO,OAAO,YAAY,YAAY,OAAO,OAAO,YAAY,QAAQ,OAAO,aAAa,OAAO,OAAO,aAAa,QAAQ,OAAO,aAAa,aAAa,OAAO,OAAO,aAAa,aAAa,OAAO,OAAO,WAAW,aAAa,QAAQ,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,aAAa,QAAQ,OAAO,aAAa,aAAa,OAAO,OAAO,aAAa,QAAQ,OAAO,YAAY,QAAQ,SAAS,WAAW,OAAO,OAAO,UAAU,OAAO,SAAS,WAAW,OAAO,OAAO,UAAU,OAAO,SAAS,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,QAAQ,aAAa,QAAQ,SAAS,aAAa,QAAQ,OAAO,aAAa,QAAQ,OAAO,WAAW,OAAO,QAAQ,aAAa,QAAQ,QAAQ,aAAa,QAAQ,OAAO,aAAa,aAAa,OAAO,OAAO,aAAa,QAAQ,OAAO,aAAa,QAAQ,OAAO,aAAa,QAAQ,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,KAAK,WAAW,OAAO,KAAK,QAAQ,WAAW,OAAO,OAAO,WAAW,UAAU,OAAO,QAAQ,WAAW,UAAU,MAAM,MAAM,WAAW,UAAU,MAAM,MAAM,WAAW,MAAM,MAAM,UAAU,MAAM,MAAM,WAAW,MAAM,MAAM,WAAW,MAAM,QAAQ,WAAW,MAAM,MAAM,UAAU,MAAM,OAAO,WAAW,OAAO,OAAO,WAAW,WAAW,MAAM,MAAM,WAAW,MAAM,MAAM,WAAW,MAAM,MAAM,WAAW,MAAM,MAAM,WAAW,MAAM,OAAO,WAAW,WAAW,MAAM,UAAU,WAAW,MAAM,MAAM,WAAW,MAAM,MAAM,WAAW,MAAM,UAAU,WAAW,MAAM,MAAM,WAAW,MAAM,MAAM,WAAW,MAAM,UAAU,WAAW,MAAM,MAAM,WAAW,MAAM,MAAM,WAAW,MAAM,UAAU,WAAW,MAAM,MAAM,WAAW,MAAM,MAAM,UAAU,MAAM,MAAM,WAAW,MAAM,MAAM,WAAW,MAAM,MAAM,WAAW,MAAM,MAAM,WAAW,MAAM,UAAU,WAAW,MAAM,MAAM,WAAW,MAAM,MAAM,UAAU,MAAM,MAAM,WAAW,MAAM,MAAM,WAAW,MAAM,MAAM,WAAW,MAAM,MAAM,WAAW,MAAM,UAAU,WAAW,MAAM,MAAM,WAAW,MAAM,MAAM,UAAU,MAAM,MAAM,WAAW,MAAM,MAAM,WAAW,MAAM,MAAM,WAAW,MAAM,MAAM,WAAW,MAAM,MAAM,WAAW,WAAW,MAAM,MAAM,YAAY,UAAU,MAAM,MAAM,YAAY,UAAU,MAAM,MAAM,YAAY,UAAU,MAAM,QAAQ,WAAW,MAAM,UAAU,UAAU,MAAM,MAAM,WAAW,MAAM,MAAM,WAAW,MAAM,MAAM,WAAW,MAAM,OAAO,WAAW,MAAM,MAAM,WAAW,WAAW,aAAa,OAAO,MAAM,UAAU,MAAM,aAAa,KAAK,aAAa,QAAQ,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,QAAQ,QAAQ,WAAW,OAAO,UAAU,WAAW,OAAO,QAAQ,WAAW,OAAO,QAAQ,YAAY,QAAQ,MAAM,aAAa,OAAO,MAAM,aAAa,OAAO,MAAM,aAAa,OAAO,MAAM,aAAa,OAAO,MAAM,aAAa,OAAO,MAAM,aAAa,OAAO,MAAM,aAAa,OAAO,MAAM,aAAa,OAAO,MAAM,aAAa,OAAO,MAAM,aAAa,OAAO,MAAM,aAAa,OAAO,MAAM,aAAa,OAAO,MAAM,aAAa,OAAO,MAAM,aAAa,OAAO,MAAM,aAAa,OAAO,MAAM,aAAa,OAAO,MAAM,aAAa,OAAO,MAAM,aAAa,OAAO,MAAM,aAAa,OAAO,MAAM,aAAa,OAAO,MAAM,aAAa,OAAO,MAAM,aAAa,OAAO,MAAM,aAAa,OAAO,MAAM,aAAa,OAAO,MAAM,aAAa,OAAO,MAAM,WAAW,UAAU,MAAM,MAAM,UAAU,MAAM,OAAO,WAAW,UAAU,OAAO,OAAO,YAAY,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,WAAW,OAAO,OAAO,aAAa,WAAW,OAAO,OAAO,WAAW,UAAU,OAAO,OAAO,UAAU,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,OAAO,QAAQ,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,YAAY,aAAa,QAAQ,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,WAAW,YAAY,aAAa,QAAQ,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,WAAW,YAAY,aAAa,QAAQ,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,aAAa,aAAa,UAAU,OAAO,OAAO,UAAU,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,YAAY,aAAa,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,YAAY,QAAQ,OAAO,YAAY,QAAQ,OAAO,aAAa,QAAQ,OAAO,YAAY,OAAO,OAAO,YAAY,OAAO,OAAO,YAAY,OAAO,OAAO,YAAY,OAAO,OAAO,YAAY,OAAO,OAAO,YAAY,OAAO,OAAO,YAAY,OAAO,QAAQ,aAAa,OAAO,QAAQ,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,WAAW,WAAW,OAAO,OAAO,WAAW,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,QAAQ,WAAW,OAAO,OAAO,WAAW,UAAU,OAAO,OAAO,YAAY,OAAO,OAAO,YAAY,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,QAAQ,OAAO,WAAW,OAAO,OAAO,aAAa,QAAQ,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,YAAY,QAAQ,OAAO,YAAY,QAAQ,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,QAAQ,WAAW,OAAO,QAAQ,WAAW,OAAO,QAAQ,WAAW,OAAO,OAAO,cAAc,cAAc,QAAQ,OAAO,YAAY,YAAY,OAAO,OAAO,aAAa,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,cAAc,cAAc,QAAQ,OAAO,YAAY,YAAY,OAAO,OAAO,YAAY,QAAQ,OAAO,cAAc,cAAc,QAAQ,OAAO,YAAY,YAAY,OAAO,OAAO,YAAY,QAAQ,OAAO,cAAc,cAAc,QAAQ,OAAO,YAAY,YAAY,OAAO,OAAO,YAAY,QAAQ,OAAO,WAAW,OAAO,UAAU,WAAW,OAAO,QAAQ,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,SAAS,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,WAAW,OAAO,OAAO,WAAW,OAAO,SAAS,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,aAAa,aAAa,UAAU,OAAO,OAAO,WAAW,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,aAAa,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,aAAa,aAAa,UAAU,OAAO,MAAM,WAAW,MAAM,MAAM,WAAW,MAAM,OAAO,WAAW,UAAU,OAAO,OAAO,YAAY,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,KAAK,WAAW,OAAO,KAAK,OAAO,UAAU,OAAO,QAAQ,WAAW,OAAO,OAAO,WAAW,OAAO,QAAQ,UAAU,OAAO,OAAO,WAAW,QAAQ,OAAO,WAAW,QAAQ,OAAO,YAAY,QAAQ,OAAO,YAAY,QAAQ,OAAO,YAAY,QAAQ,OAAO,YAAY,QAAQ,OAAO,aAAa,QAAQ,OAAO,aAAa,QAAQ,OAAO,aAAa,QAAQ,OAAO,aAAa,QAAQ,OAAO,YAAY,QAAQ,OAAO,YAAY,QAAQ,OAAO,YAAY,QAAQ,OAAO,YAAY,QAAQ,QAAQ,YAAY,QAAQ,QAAQ,aAAa,QAAQ,OAAO,YAAY,QAAQ,OAAO,WAAW,QAAQ,OAAO,WAAW,QAAQ,OAAO,WAAW,QAAQ,OAAO,aAAa,WAAW,WAAW,OAAO,OAAO,WAAW,QAAQ,OAAO,aAAa,WAAW,WAAW,OAAO,OAAO,WAAW,QAAQ,OAAO,YAAY,QAAQ,OAAO,WAAW,QAAQ,OAAO,aAAa,QAAQ,OAAO,WAAW,OAAO,OAAO,WAAW,QAAQ,OAAO,WAAW,QAAQ,OAAO,YAAY,QAAQ,OAAO,YAAY,QAAQ,OAAO,WAAW,QAAQ,OAAO,WAAW,QAAQ,OAAO,aAAa,QAAQ,OAAO,aAAa,QAAQ,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,QAAQ,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,YAAY,OAAO,OAAO,YAAY,OAAO,OAAO,YAAY,OAAO,OAAO,YAAY,OAAO,OAAO,YAAY,OAAO,OAAO,aAAa,QAAQ,OAAO,aAAa,QAAQ,OAAO,WAAW,OAAO,QAAQ,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,YAAY,OAAO,OAAO,WAAW,UAAU,OAAO,OAAO,WAAW,OAAO,QAAQ,UAAU,OAAO,UAAU,WAAW,OAAO,OAAO,WAAW,OAAO,QAAQ,WAAW,OAAO,QAAQ,WAAW,WAAW,OAAO,QAAQ,WAAW,OAAO,UAAU,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,QAAQ,WAAW,OAAO,OAAO,WAAW,OAAO,QAAQ,WAAW,OAAO,OAAO,WAAW,OAAO,QAAQ,WAAW,OAAO,QAAQ,WAAW,OAAO,QAAQ,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,YAAY,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,YAAY,WAAW,OAAO,OAAO,YAAY,WAAW,OAAO,OAAO,YAAY,QAAQ,OAAO,aAAa,OAAO,OAAO,aAAa,QAAQ,OAAO,aAAa,aAAa,OAAO,OAAO,aAAa,aAAa,OAAO,OAAO,WAAW,aAAa,QAAQ,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,aAAa,QAAQ,OAAO,aAAa,aAAa,OAAO,OAAO,aAAa,QAAQ,OAAO,YAAY,QAAQ,SAAS,WAAW,OAAO,OAAO,UAAU,OAAO,SAAS,WAAW,OAAO,OAAO,UAAU,OAAO,SAAS,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,QAAQ,aAAa,QAAQ,SAAS,aAAa,QAAQ,OAAO,aAAa,QAAQ,OAAO,WAAW,OAAO,QAAQ,aAAa,QAAQ,QAAQ,aAAa,QAAQ,OAAO,aAAa,aAAa,OAAO,OAAO,aAAa,QAAQ,OAAO,aAAa,QAAQ,OAAO,aAAa,QAAQ,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,KAAK,WAAW,OAAO,KAAK,QAAQ,WAAW,OAAO,OAAO,WAAW,UAAU,OAAO,SAAS,WAAW,UAAU,OAAO,OAAO,WAAW,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,SAAS,WAAW,OAAO,OAAO,UAAU,OAAO,QAAQ,WAAW,QAAQ,QAAQ,WAAW,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,QAAQ,WAAW,WAAW,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,UAAU,OAAO,OAAO,YAAY,UAAU,OAAO,OAAO,YAAY,UAAU,OAAO,OAAO,YAAY,UAAU,OAAO,SAAS,WAAW,OAAO,WAAW,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,QAAQ,UAAU,OAAO,OAAO,WAAW,WAAW,aAAa,OAAO,OAAO,UAAU,OAAO,OAAO,YAAY,WAAW,UAAU,WAAW,UAAU,WAAW,WAAW,OAAO,OAAO,WAAW,WAAW,WAAW,QAAQ,OAAO,YAAY,WAAW,UAAU,WAAW,UAAU,WAAW,WAAW,OAAO,OAAO,WAAW,WAAW,WAAW,QAAQ,OAAO,YAAY,WAAW,UAAU,WAAW,UAAU,WAAW,WAAW,OAAO,OAAO,WAAW,WAAW,WAAW,QAAQ,QAAQ,UAAU,UAAU,OAAO,OAAO,WAAW,OAAO,QAAQ,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,QAAQ,UAAU,UAAU,UAAU,OAAO,OAAO,UAAU,UAAU,UAAU,UAAU,OAAO,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,UAAU,UAAU,WAAW,UAAU,OAAO,OAAO,WAAW,UAAU,WAAW,UAAU,UAAU,WAAW,OAAO,SAAS,UAAU,UAAU,WAAW,OAAO,OAAO,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,KAAK,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,UAAU,OAAO,KAAK,OAAO,KAAK,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,UAAU,OAAO,KAAK,OAAO,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,UAAU,WAAW,OAAO,OAAO,WAAW,UAAU,UAAU,OAAO,OAAO,UAAU,WAAW,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,UAAU,UAAU,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,OAAO,OAAO,UAAU,UAAU,YAAY,WAAW,WAAW,WAAW,OAAO,OAAO,KAAK,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,KAAK,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,WAAW,UAAU,UAAU,WAAW,WAAW,UAAU,UAAU,WAAW,WAAW,OAAO,OAAO,KAAK,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,KAAK,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,KAAK,OAAO,UAAU,OAAO,OAAO,UAAU,WAAW,OAAO,OAAO,WAAW,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,UAAU,OAAO,OAAO,MAAM,WAAW,OAAO,KAAK,OAAO,MAAM,WAAW,OAAO,KAAK,OAAO,WAAW,OAAO,OAAO,WAAW,WAAW,WAAW,WAAW,UAAU,OAAO,OAAO,KAAK,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,KAAK,OAAO,KAAK,UAAU,OAAO,OAAO,UAAU,OAAO,OAAO,UAAU,OAAO,KAAK,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,UAAU,WAAW,OAAO,OAAO,UAAU,UAAU,OAAO,OAAO,WAAW,UAAU,UAAU,UAAU,WAAW,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,OAAO,WAAW,WAAW,OAAO,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;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B;;AAE9B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA,CAAC;;;AAGD;AACA;AACA;AACA,qDAAqD,cAAc;AACnE;AACA,C;;;;;;;;;;;;AC7Fa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,uDAAuD;;AAEvD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;;AAEA,iBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gBAAgB,KAAwC,GAAG,sBAAiB,GAAG,SAAI;;AAEnF;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,qEAAqE,qBAAqB,aAAa;;AAEvG;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA,yDAAyD;AACzD,GAAG;;AAEH;;;AAGA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,0BAA0B;AAC1B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mBAAmB,4BAA4B;AAC/C;AACA;AACA;AACA;;AAEA;;AAEA,oBAAoB,6BAA6B;AACjD;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,E;;;;;;;;;;;AC5QA,UAAU,mBAAO,CAAC,6JAA8E;AAChG,0BAA0B,mBAAO,CAAC,oVAA8L;;AAEhO;;AAEA;AACA,0BAA0B,QAAS;AACnC;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;;;AAIA,0B","file":"styles-es2015.js","sourcesContent":["// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(true);\n// Module\nexports.push([module.id, \"@charset \\\"UTF-8\\\";\\n/* Theme for the ripple elements.*/\\n/* stylelint-disable material/no-prefixes */\\n/* stylelint-enable */\\n.mat-badge-content {\\n font-weight: 600;\\n font-size: 12px;\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n.mat-badge-small .mat-badge-content {\\n font-size: 9px;\\n}\\n.mat-badge-large .mat-badge-content {\\n font-size: 24px;\\n}\\n.mat-h1, .mat-headline, .mat-typography h1 {\\n font: 400 24px/32px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: normal;\\n margin: 0 0 16px;\\n}\\n.mat-h2, .mat-title, .mat-typography h2 {\\n font: 500 20px/32px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: normal;\\n margin: 0 0 16px;\\n}\\n.mat-h3, .mat-subheading-2, .mat-typography h3 {\\n font: 400 16px/28px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: normal;\\n margin: 0 0 16px;\\n}\\n.mat-h4, .mat-subheading-1, .mat-typography h4 {\\n font: 400 15px/24px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: normal;\\n margin: 0 0 16px;\\n}\\n.mat-h5, .mat-typography h5 {\\n font: 400 calc(14px * 0.83)/20px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n margin: 0 0 12px;\\n}\\n.mat-h6, .mat-typography h6 {\\n font: 400 calc(14px * 0.67)/20px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n margin: 0 0 12px;\\n}\\n.mat-body-strong, .mat-body-2 {\\n font: 500 14px/24px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: normal;\\n}\\n.mat-body, .mat-body-1, .mat-typography {\\n font: 400 14px/20px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: normal;\\n}\\n.mat-body p, .mat-body-1 p, .mat-typography p {\\n margin: 0 0 12px;\\n}\\n.mat-small, .mat-caption {\\n font: 400 12px/20px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: normal;\\n}\\n.mat-display-4, .mat-typography .mat-display-4 {\\n font: 300 112px/112px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: -0.05em;\\n margin: 0 0 56px;\\n}\\n.mat-display-3, .mat-typography .mat-display-3 {\\n font: 400 56px/56px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: -0.02em;\\n margin: 0 0 64px;\\n}\\n.mat-display-2, .mat-typography .mat-display-2 {\\n font: 400 45px/48px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: -0.005em;\\n margin: 0 0 64px;\\n}\\n.mat-display-1, .mat-typography .mat-display-1 {\\n font: 400 34px/40px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: normal;\\n margin: 0 0 64px;\\n}\\n.mat-bottom-sheet-container {\\n font: 400 14px/20px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: normal;\\n}\\n.mat-button, .mat-raised-button, .mat-icon-button, .mat-stroked-button,\\n.mat-flat-button, .mat-fab, .mat-mini-fab {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 14px;\\n font-weight: 500;\\n}\\n.mat-button-toggle {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n.mat-card {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n.mat-card-title {\\n font-size: 24px;\\n font-weight: 500;\\n}\\n.mat-card-header .mat-card-title {\\n font-size: 20px;\\n}\\n.mat-card-subtitle,\\n.mat-card-content {\\n font-size: 14px;\\n}\\n.mat-checkbox {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n.mat-checkbox-layout .mat-checkbox-label {\\n line-height: 24px;\\n}\\n.mat-chip {\\n font-size: 14px;\\n font-weight: 500;\\n}\\n.mat-chip .mat-chip-trailing-icon.mat-icon,\\n.mat-chip .mat-chip-remove.mat-icon {\\n font-size: 18px;\\n}\\n.mat-table {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n.mat-header-cell {\\n font-size: 12px;\\n font-weight: 500;\\n}\\n.mat-cell, .mat-footer-cell {\\n font-size: 14px;\\n}\\n.mat-calendar {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n.mat-calendar-body {\\n font-size: 13px;\\n}\\n.mat-calendar-body-label,\\n.mat-calendar-period-button {\\n font-size: 14px;\\n font-weight: 500;\\n}\\n.mat-calendar-table-header th {\\n font-size: 11px;\\n font-weight: 400;\\n}\\n.mat-dialog-title {\\n font: 500 20px/32px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: normal;\\n}\\n.mat-expansion-panel-header {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 15px;\\n font-weight: 400;\\n}\\n.mat-expansion-panel-content {\\n font: 400 14px/20px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: normal;\\n}\\n.mat-form-field {\\n font-size: inherit;\\n font-weight: 400;\\n line-height: 1.125;\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: normal;\\n}\\n.mat-form-field-wrapper {\\n padding-bottom: 1.34375em;\\n}\\n.mat-form-field-prefix .mat-icon,\\n.mat-form-field-suffix .mat-icon {\\n font-size: 150%;\\n line-height: 1.125;\\n}\\n.mat-form-field-prefix .mat-icon-button,\\n.mat-form-field-suffix .mat-icon-button {\\n height: 1.5em;\\n width: 1.5em;\\n}\\n.mat-form-field-prefix .mat-icon-button .mat-icon,\\n.mat-form-field-suffix .mat-icon-button .mat-icon {\\n height: 1.125em;\\n line-height: 1.125;\\n}\\n.mat-form-field-infix {\\n padding: 0.5em 0;\\n border-top: 0.84375em solid transparent;\\n}\\n.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\\n.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\\n transform: translateY(-1.34375em) scale(0.75);\\n width: 133.3333333333%;\\n}\\n.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\\n transform: translateY(-1.34374em) scale(0.75);\\n width: 133.3333433333%;\\n}\\n.mat-form-field-label-wrapper {\\n top: -0.84375em;\\n padding-top: 0.84375em;\\n}\\n.mat-form-field-label {\\n top: 1.34375em;\\n}\\n.mat-form-field-underline {\\n bottom: 1.34375em;\\n}\\n.mat-form-field-subscript-wrapper {\\n font-size: 75%;\\n margin-top: 0.6666666667em;\\n top: calc(100% - 1.7916666667em);\\n}\\n.mat-form-field-appearance-legacy .mat-form-field-wrapper {\\n padding-bottom: 1.25em;\\n}\\n.mat-form-field-appearance-legacy .mat-form-field-infix {\\n padding: 0.4375em 0;\\n}\\n.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\\n.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\\n transform: translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.001px);\\n -ms-transform: translateY(-1.28125em) scale(0.75);\\n width: 133.3333333333%;\\n}\\n.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill + .mat-form-field-label-wrapper .mat-form-field-label {\\n transform: translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.00101px);\\n -ms-transform: translateY(-1.28124em) scale(0.75);\\n width: 133.3333433333%;\\n}\\n.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\\n transform: translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.00102px);\\n -ms-transform: translateY(-1.28123em) scale(0.75);\\n width: 133.3333533333%;\\n}\\n.mat-form-field-appearance-legacy .mat-form-field-label {\\n top: 1.28125em;\\n}\\n.mat-form-field-appearance-legacy .mat-form-field-underline {\\n bottom: 1.25em;\\n}\\n.mat-form-field-appearance-legacy .mat-form-field-subscript-wrapper {\\n margin-top: 0.5416666667em;\\n top: calc(100% - 1.6666666667em);\\n}\\n@media print {\\n .mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\\n.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\\n transform: translateY(-1.28122em) scale(0.75);\\n }\\n .mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill + .mat-form-field-label-wrapper .mat-form-field-label {\\n transform: translateY(-1.28121em) scale(0.75);\\n }\\n .mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\\n transform: translateY(-1.2812em) scale(0.75);\\n }\\n}\\n.mat-form-field-appearance-fill .mat-form-field-infix {\\n padding: 0.25em 0 0.75em 0;\\n}\\n.mat-form-field-appearance-fill .mat-form-field-label {\\n top: 1.09375em;\\n margin-top: -0.5em;\\n}\\n.mat-form-field-appearance-fill.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\\n.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\\n transform: translateY(-0.59375em) scale(0.75);\\n width: 133.3333333333%;\\n}\\n.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\\n transform: translateY(-0.59374em) scale(0.75);\\n width: 133.3333433333%;\\n}\\n.mat-form-field-appearance-outline .mat-form-field-infix {\\n padding: 1em 0 1em 0;\\n}\\n.mat-form-field-appearance-outline .mat-form-field-label {\\n top: 1.84375em;\\n margin-top: -0.25em;\\n}\\n.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\\n.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\\n transform: translateY(-1.59375em) scale(0.75);\\n width: 133.3333333333%;\\n}\\n.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\\n transform: translateY(-1.59374em) scale(0.75);\\n width: 133.3333433333%;\\n}\\n.mat-grid-tile-header,\\n.mat-grid-tile-footer {\\n font-size: 14px;\\n}\\n.mat-grid-tile-header .mat-line,\\n.mat-grid-tile-footer .mat-line {\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n display: block;\\n box-sizing: border-box;\\n}\\n.mat-grid-tile-header .mat-line:nth-child(n+2),\\n.mat-grid-tile-footer .mat-line:nth-child(n+2) {\\n font-size: 12px;\\n}\\ninput.mat-input-element {\\n margin-top: -0.0625em;\\n}\\n.mat-menu-item {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 14px;\\n font-weight: 400;\\n}\\n.mat-paginator,\\n.mat-paginator-page-size .mat-select-trigger {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 12px;\\n}\\n.mat-radio-button {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n.mat-select {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n.mat-select-trigger {\\n height: 1.125em;\\n}\\n.mat-slide-toggle-content {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n.mat-slider-thumb-label-text {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 12px;\\n font-weight: 500;\\n}\\n.mat-stepper-vertical, .mat-stepper-horizontal {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n.mat-step-label {\\n font-size: 14px;\\n font-weight: 400;\\n}\\n.mat-step-sub-label-error {\\n font-weight: normal;\\n}\\n.mat-step-label-error {\\n font-size: 14px;\\n}\\n.mat-step-label-selected {\\n font-size: 14px;\\n font-weight: 500;\\n}\\n.mat-tab-group {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n.mat-tab-label, .mat-tab-link {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 14px;\\n font-weight: 500;\\n}\\n.mat-toolbar,\\n.mat-toolbar h1,\\n.mat-toolbar h2,\\n.mat-toolbar h3,\\n.mat-toolbar h4,\\n.mat-toolbar h5,\\n.mat-toolbar h6 {\\n font: 500 20px/32px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: normal;\\n margin: 0;\\n}\\n.mat-tooltip {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 10px;\\n padding-top: 6px;\\n padding-bottom: 6px;\\n}\\n.mat-tooltip-handset {\\n font-size: 14px;\\n padding-top: 8px;\\n padding-bottom: 8px;\\n}\\n.mat-list-item {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n.mat-list-option {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n.mat-list-base .mat-list-item {\\n font-size: 16px;\\n}\\n.mat-list-base .mat-list-item .mat-line {\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n display: block;\\n box-sizing: border-box;\\n}\\n.mat-list-base .mat-list-item .mat-line:nth-child(n+2) {\\n font-size: 14px;\\n}\\n.mat-list-base .mat-list-option {\\n font-size: 16px;\\n}\\n.mat-list-base .mat-list-option .mat-line {\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n display: block;\\n box-sizing: border-box;\\n}\\n.mat-list-base .mat-list-option .mat-line:nth-child(n+2) {\\n font-size: 14px;\\n}\\n.mat-list-base .mat-subheader {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 14px;\\n font-weight: 500;\\n}\\n.mat-list-base[dense] .mat-list-item {\\n font-size: 12px;\\n}\\n.mat-list-base[dense] .mat-list-item .mat-line {\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n display: block;\\n box-sizing: border-box;\\n}\\n.mat-list-base[dense] .mat-list-item .mat-line:nth-child(n+2) {\\n font-size: 12px;\\n}\\n.mat-list-base[dense] .mat-list-option {\\n font-size: 12px;\\n}\\n.mat-list-base[dense] .mat-list-option .mat-line {\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n display: block;\\n box-sizing: border-box;\\n}\\n.mat-list-base[dense] .mat-list-option .mat-line:nth-child(n+2) {\\n font-size: 12px;\\n}\\n.mat-list-base[dense] .mat-subheader {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 12px;\\n font-weight: 500;\\n}\\n.mat-option {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 16px;\\n}\\n.mat-optgroup-label {\\n font: 500 14px/24px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: normal;\\n}\\n.mat-simple-snackbar {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 14px;\\n}\\n.mat-simple-snackbar-action {\\n line-height: 1;\\n font-family: inherit;\\n font-size: inherit;\\n font-weight: 500;\\n}\\n.mat-tree {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n.mat-tree-node,\\n.mat-nested-tree-node {\\n font-weight: 400;\\n font-size: 14px;\\n}\\n.mat-ripple {\\n overflow: hidden;\\n position: relative;\\n}\\n.mat-ripple:not(:empty) {\\n transform: translateZ(0);\\n}\\n.mat-ripple.mat-ripple-unbounded {\\n overflow: visible;\\n}\\n.mat-ripple-element {\\n position: absolute;\\n border-radius: 50%;\\n pointer-events: none;\\n transition: opacity, transform 0ms cubic-bezier(0, 0, 0.2, 1);\\n transform: scale(0);\\n}\\n.cdk-high-contrast-active .mat-ripple-element {\\n display: none;\\n}\\n.cdk-visually-hidden {\\n border: 0;\\n clip: rect(0 0 0 0);\\n height: 1px;\\n margin: -1px;\\n overflow: hidden;\\n padding: 0;\\n position: absolute;\\n width: 1px;\\n outline: 0;\\n -webkit-appearance: none;\\n -moz-appearance: none;\\n}\\n.cdk-overlay-container, .cdk-global-overlay-wrapper {\\n pointer-events: none;\\n top: 0;\\n left: 0;\\n height: 100%;\\n width: 100%;\\n}\\n.cdk-overlay-container {\\n position: fixed;\\n z-index: 1000;\\n}\\n.cdk-overlay-container:empty {\\n display: none;\\n}\\n.cdk-global-overlay-wrapper {\\n display: flex;\\n position: absolute;\\n z-index: 1000;\\n}\\n.cdk-overlay-pane {\\n position: absolute;\\n pointer-events: auto;\\n box-sizing: border-box;\\n z-index: 1000;\\n display: flex;\\n max-width: 100%;\\n max-height: 100%;\\n}\\n.cdk-overlay-backdrop {\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n z-index: 1000;\\n pointer-events: auto;\\n -webkit-tap-highlight-color: transparent;\\n transition: opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1);\\n opacity: 0;\\n}\\n.cdk-overlay-backdrop.cdk-overlay-backdrop-showing {\\n opacity: 1;\\n}\\n@media screen and (-ms-high-contrast: active) {\\n .cdk-overlay-backdrop.cdk-overlay-backdrop-showing {\\n opacity: 0.6;\\n }\\n}\\n.cdk-overlay-dark-backdrop {\\n background: rgba(0, 0, 0, 0.32);\\n}\\n.cdk-overlay-transparent-backdrop, .cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing {\\n opacity: 0;\\n}\\n.cdk-overlay-connected-position-bounding-box {\\n position: absolute;\\n z-index: 1000;\\n display: flex;\\n flex-direction: column;\\n min-width: 1px;\\n min-height: 1px;\\n}\\n.cdk-global-scrollblock {\\n position: fixed;\\n width: 100%;\\n overflow-y: scroll;\\n}\\n@-webkit-keyframes cdk-text-field-autofill-start {\\n /*!*/\\n}\\n@keyframes cdk-text-field-autofill-start {\\n /*!*/\\n}\\n@-webkit-keyframes cdk-text-field-autofill-end {\\n /*!*/\\n}\\n@keyframes cdk-text-field-autofill-end {\\n /*!*/\\n}\\n.cdk-text-field-autofill-monitored:-webkit-autofill {\\n -webkit-animation: cdk-text-field-autofill-start 0s 1ms;\\n animation: cdk-text-field-autofill-start 0s 1ms;\\n}\\n.cdk-text-field-autofill-monitored:not(:-webkit-autofill) {\\n -webkit-animation: cdk-text-field-autofill-end 0s 1ms;\\n animation: cdk-text-field-autofill-end 0s 1ms;\\n}\\ntextarea.cdk-textarea-autosize {\\n resize: none;\\n}\\ntextarea.cdk-textarea-autosize-measuring {\\n height: auto !important;\\n overflow: hidden !important;\\n padding: 2px 0 !important;\\n box-sizing: content-box !important;\\n}\\n/*=======================*\\\\\\n|| MDS Colours ||\\n\\\\*=======================*/\\n/*=======================*\\\\\\n|| Application Colours ||\\n\\\\*=======================*/\\n/*===========*\\\\\\n|| Fonts ||\\n\\\\*===========*/\\n/*===================*\\\\\\n|| Media Queries ||\\n\\\\*===================*/\\n/*=======================*\\\\\\n|| MDS Colours ||\\n\\\\*=======================*/\\n/*=======================*\\\\\\n|| Application Colours ||\\n\\\\*=======================*/\\n/*===========*\\\\\\n|| Fonts ||\\n\\\\*===========*/\\n/*===================*\\\\\\n|| Media Queries ||\\n\\\\*===================*/\\n/*===================*\\\\\\n|| Media Queries ||\\n\\\\*===================*/\\n/**\\n * Spacing\\n */\\n/*===================*\\\\\\n|| Media Queries ||\\n\\\\*===================*/\\n/*===================*\\\\\\n|| Icon sizes ||\\n\\\\*===================*/\\n/**\\n * Makes text have maximum lines with ellipsis. Works on most modern browsers except\\n * of Firefox..\\n */\\n/**\\n * Spacing\\n */\\n/*===================*\\\\\\n|| Media Queries ||\\n\\\\*===================*/\\n/*===================*\\\\\\n|| Icon sizes ||\\n\\\\*===================*/\\n/* Theme for the ripple elements.*/\\n/* stylelint-disable material/no-prefixes */\\n/* stylelint-enable */\\n.mck-inherit-font {\\n font: inherit;\\n}\\n.mck-content-expand, .mck-content-page {\\n width: 100%;\\n height: 100%;\\n}\\n.mck-content-expand-width {\\n width: 100%;\\n}\\n.mck-content-expand-height {\\n height: 100%;\\n}\\n.mck-content-with-footer-height {\\n height: calc(100vh - 58px);\\n}\\n.mck-content-full-height, .mck-content-page-container {\\n height: 100vh;\\n}\\n.mck-content-page {\\n background: #F8F9FA;\\n}\\n.mck-content-body {\\n width: 100%;\\n display: block;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-content-body {\\n max-width: 1024px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-content-body {\\n max-width: 1024px;\\n }\\n}\\n.mck-content-group {\\n padding-left: 1rem;\\n padding-right: 1rem;\\n width: 100%;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-content-group {\\n max-width: 759px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-content-group {\\n max-width: 759px;\\n }\\n}\\n.mck-shadow {\\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mck-flex-1 {\\n flex: 1;\\n}\\n.mck-row, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix, .mck-row-flow {\\n display: flex;\\n flex-direction: row;\\n}\\n.mck-row.mck-center-justify, .mck-center-justify.mck-row-flow, .mck-row.mck-center, .mck-row.mck-button.mat-button, .mck-row.mat-button.mck-stroked-button, .mck-row.mat-button.mck-warning-button, .mck-row.mat-button.mck-secondary-button, .mck-row.mat-button.mck-primary-button, .mck-row.mck-button.mat-stroked-button, .mck-row.mat-stroked-button.mck-stroked-button, .mck-row.mat-stroked-button.mck-warning-button, .mck-row.mat-stroked-button.mck-secondary-button, .mck-row.mat-stroked-button.mck-primary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix, .mck-center.mck-row-flow, .mck-row-flow.mck-button.mat-button, .mck-row-flow.mat-button.mck-stroked-button, .mck-row-flow.mat-button.mck-warning-button, .mck-row-flow.mat-button.mck-secondary-button, .mck-row-flow.mat-button.mck-primary-button, .mck-row-flow.mck-button.mat-stroked-button, .mck-row-flow.mat-stroked-button.mck-stroked-button, .mck-row-flow.mat-stroked-button.mck-warning-button, .mck-row-flow.mat-stroked-button.mck-secondary-button, .mck-row-flow.mat-stroked-button.mck-primary-button {\\n justify-content: center;\\n}\\n.mck-row.mck-center-align, .mck-center-align.mck-row-flow, .mck-row.mck-center, .mck-row.mck-button.mat-button, .mck-row.mat-button.mck-stroked-button, .mck-row.mat-button.mck-warning-button, .mck-row.mat-button.mck-secondary-button, .mck-row.mat-button.mck-primary-button, .mck-row.mck-button.mat-stroked-button, .mck-row.mat-stroked-button.mck-stroked-button, .mck-row.mat-stroked-button.mck-warning-button, .mck-row.mat-stroked-button.mck-secondary-button, .mck-row.mat-stroked-button.mck-primary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix, .mck-center.mck-row-flow, .mck-row-flow.mck-button.mat-button, .mck-row-flow.mat-button.mck-stroked-button, .mck-row-flow.mat-button.mck-warning-button, .mck-row-flow.mat-button.mck-secondary-button, .mck-row-flow.mat-button.mck-primary-button, .mck-row-flow.mck-button.mat-stroked-button, .mck-row-flow.mat-stroked-button.mck-stroked-button, .mck-row-flow.mat-stroked-button.mck-warning-button, .mck-row-flow.mat-stroked-button.mck-secondary-button, .mck-row-flow.mat-stroked-button.mck-primary-button {\\n align-items: center;\\n}\\n.mck-row.mck-stretch, .mck-form-input mat-form-field.mck-center-suffix .mck-stretch.mat-form-field-infix, .mck-stretch.mck-row-flow {\\n align-items: stretch;\\n}\\n.mck-row-flow {\\n flex-wrap: wrap;\\n}\\n.mck-row.mck-scroll, .mck-form-input mat-form-field.mck-center-suffix .mck-scroll.mat-form-field-infix, .mck-scroll.mck-row-flow {\\n overflow-x: scroll;\\n}\\n.mck-column, .mck-button.mat-button.mat-button, .mat-button.mat-button.mck-stroked-button, .mat-button.mat-button.mck-warning-button, .mat-button.mat-button.mck-secondary-button, .mat-button.mat-button.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button, .mat-stroked-button.mat-stroked-button.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-primary-button {\\n display: flex;\\n flex-direction: column;\\n}\\n.mck-column.mck-center, .mck-column.mck-button.mat-button, .mck-column.mat-button.mck-stroked-button, .mck-column.mat-button.mck-warning-button, .mck-column.mat-button.mck-secondary-button, .mck-column.mat-button.mck-primary-button, .mck-column.mck-button.mat-stroked-button, .mck-column.mat-stroked-button.mck-stroked-button, .mck-column.mat-stroked-button.mck-warning-button, .mck-column.mat-stroked-button.mck-secondary-button, .mck-column.mat-stroked-button.mck-primary-button, .mck-center.mck-button.mat-button, .mck-center.mat-button.mck-stroked-button, .mck-center.mat-button.mck-warning-button, .mck-center.mat-button.mck-secondary-button, .mck-center.mat-button.mck-primary-button, .mck-button.mat-button, .mat-button.mck-stroked-button, .mat-button.mck-warning-button, .mat-button.mck-secondary-button, .mat-button.mck-primary-button, .mck-button.mat-button.mat-stroked-button, .mat-button.mat-stroked-button.mck-stroked-button, .mat-button.mat-stroked-button.mck-warning-button, .mat-button.mat-stroked-button.mck-secondary-button, .mat-button.mat-stroked-button.mck-primary-button, .mck-center.mck-button.mat-stroked-button, .mck-center.mat-stroked-button.mck-stroked-button, .mck-center.mat-stroked-button.mck-warning-button, .mck-center.mat-stroked-button.mck-secondary-button, .mck-center.mat-stroked-button.mck-primary-button, .mck-button.mat-stroked-button, .mat-stroked-button.mck-stroked-button, .mat-stroked-button.mck-warning-button, .mat-stroked-button.mck-secondary-button, .mat-stroked-button.mck-primary-button, .mck-form-input mat-form-field.mck-center-suffix .mck-column.mat-form-field-infix, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mck-button.mat-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-button.mck-stroked-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-button.mck-warning-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-button.mck-secondary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-button.mck-primary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mck-button.mat-stroked-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-stroked-button.mck-stroked-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-stroked-button.mck-warning-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-stroked-button.mck-secondary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-stroked-button.mck-primary-button {\\n justify-content: center;\\n align-items: center;\\n}\\n.mck-column.mck-space-between, .mck-space-between.mck-button.mat-button, .mck-space-between.mat-button.mck-stroked-button, .mck-space-between.mat-button.mck-warning-button, .mck-space-between.mat-button.mck-secondary-button, .mck-space-between.mat-button.mck-primary-button, .mck-space-between.mck-button.mat-stroked-button, .mck-space-between.mat-stroked-button.mck-stroked-button, .mck-space-between.mat-stroked-button.mck-warning-button, .mck-space-between.mat-stroked-button.mck-secondary-button, .mck-space-between.mat-stroked-button.mck-primary-button {\\n justify-content: space-between;\\n}\\n.mck-column.mck-stretch, .mck-stretch.mck-button.mat-button, .mck-stretch.mat-button.mck-stroked-button, .mck-stretch.mat-button.mck-warning-button, .mck-stretch.mat-button.mck-secondary-button, .mck-stretch.mat-button.mck-primary-button, .mck-stretch.mck-button.mat-stroked-button, .mck-stretch.mat-stroked-button.mck-stroked-button, .mck-stretch.mat-stroked-button.mck-warning-button, .mck-stretch.mat-stroked-button.mck-secondary-button, .mck-stretch.mat-stroked-button.mck-primary-button {\\n align-items: stretch;\\n}\\n.mck-column.mck-scroll, .mck-scroll.mck-button.mat-button, .mck-scroll.mat-button.mck-stroked-button, .mck-scroll.mat-button.mck-warning-button, .mck-scroll.mat-button.mck-secondary-button, .mck-scroll.mat-button.mck-primary-button, .mck-scroll.mck-button.mat-stroked-button, .mck-scroll.mat-stroked-button.mck-stroked-button, .mck-scroll.mat-stroked-button.mck-warning-button, .mck-scroll.mat-stroked-button.mck-secondary-button, .mck-scroll.mat-stroked-button.mck-primary-button {\\n overflow-y: scroll;\\n overflow-y: overlay;\\n}\\n.mck-column.mck-flex-end, .mck-flex-end.mck-button.mat-button, .mck-flex-end.mat-button.mck-stroked-button, .mck-flex-end.mat-button.mck-warning-button, .mck-flex-end.mat-button.mck-secondary-button, .mck-flex-end.mat-button.mck-primary-button, .mck-flex-end.mck-button.mat-stroked-button, .mck-flex-end.mat-stroked-button.mck-stroked-button, .mck-flex-end.mat-stroked-button.mck-warning-button, .mck-flex-end.mat-stroked-button.mck-secondary-button, .mck-flex-end.mat-stroked-button.mck-primary-button {\\n justify-content: flex-end;\\n}\\n.mck-overflow {\\n overflow: auto;\\n}\\n.mck-bordered, .mck-input {\\n border-radius: 0;\\n border: 1px solid #B3B3B3;\\n}\\n.mck-bordered:hover, .mck-input:hover {\\n border-color: #464646;\\n}\\n.mck-bordered:focus, .mck-input:focus {\\n border-color: #1F40E6;\\n}\\n.mck-bordered[disabled=true], .mck-input[disabled=true] {\\n pointer-events: none;\\n border-color: #f0f0f0;\\n color: #ccc;\\n}\\n.mck-date-display {\\n position: relative;\\n display: flex;\\n align-items: center;\\n width: 100%;\\n height: 43px;\\n padding: 1rem 0.5rem;\\n transition: border 200ms, box-shadow 200ms;\\n}\\n.mck-form-input .mat-form-field-wrapper {\\n padding-bottom: 0.5rem;\\n}\\n.mck-form-input mat-form-field {\\n min-width: auto !important;\\n}\\n.mck-form-input mat-form-field .mat-form-field-infix {\\n width: 100%;\\n padding-top: 0.7rem !important;\\n padding-bottom: 0.5rem !important;\\n}\\n.mck-form-input mat-form-field .mat-form-field-outline {\\n min-height: 2.7rem;\\n color: rgba(0, 0, 0, 0.27);\\n}\\n.mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\\n margin-top: 2px;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-flex {\\n padding-left: 0.5rem;\\n padding-right: 0.5rem;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-flex {\\n padding-left: 0.5rem;\\n padding-right: 0.5rem;\\n }\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-outline, .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\\n height: 2rem;\\n min-height: 2rem;\\n }\\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\\n padding-top: 0 !important;\\n padding-bottom: 0 !important;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-outline, .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\\n height: 2rem;\\n min-height: 2rem;\\n }\\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\\n padding-top: 0 !important;\\n padding-bottom: 0 !important;\\n }\\n}\\n.mck-form-input mat-form-field.mat-s {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n text-align: left;\\n}\\n.mck-form-input mat-select {\\n margin-top: 0.2rem;\\n}\\n.mck-form-input mat-select .mat-select-arrow {\\n visibility: hidden;\\n}\\n.mck-form-input mat-select .mat-select-value > .mat-select-value-text > span {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n font-weight: 400;\\n font-family: \\\"McKinsey Sans\\\";\\n}\\n.mck-form-input .mat-form-field-outline > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input .mat-form-field-outline > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input .mat-form-field-outline > .mat-form-field-outline-end.mat-form-field-outline-end {\\n border-color: #B3B3B3;\\n border-width: 1px;\\n border-radius: 0;\\n}\\n.mck-form-input .available .mat-form-field-outline > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input .available .mat-form-field-outline > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input .available .mat-form-field-outline > .mat-form-field-outline-end.mat-form-field-outline-end {\\n border-color: #3aa537;\\n}\\n.mck-form-input .booked .mat-form-field-outline > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input .booked .mat-form-field-outline > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input .booked .mat-form-field-outline > .mat-form-field-outline-end.mat-form-field-outline-end {\\n border-color: #e12e41;\\n}\\n.mck-form-input .mat-form-field-outline-thick > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input .mat-form-field-outline-thick > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input .mat-form-field-outline-thick > .mat-form-field-outline-end.mat-form-field-outline-end {\\n border-color: #1F40E6;\\n border-width: 1px;\\n border-radius: 0;\\n}\\n.mck-form-input > mat-form-field.mck-error .mat-form-field-wrapper {\\n padding-bottom: 0;\\n}\\n.mck-form-input > mat-form-field.mck-error .mat-form-field-outline > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input > mat-form-field.mck-error .mat-form-field-outline > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input > mat-form-field.mck-error .mat-form-field-outline > .mat-form-field-outline-end.mat-form-field-outline-end {\\n border-color: #E12E40;\\n}\\n.mck-form-input mck-close-icon.mat-chip-remove.mat-chip-remove {\\n opacity: 1;\\n display: flex;\\n flex-direction: column;\\n justify-content: center;\\n align-items: center;\\n}\\n.mck-form-input mat-label {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n font-weight: 400;\\n text-align: left;\\n margin-bottom: 0.5rem;\\n}\\n.mck-form-input mat-radio-button {\\n margin-right: 1rem;\\n}\\n.mck-form-input .mat-radio-label-content {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n text-align: left;\\n}\\n.mck-form-input .mat-radio-outer-circle {\\n border-color: #1F40E6 !important;\\n border-width: 1px !important;\\n}\\n.mck-form-input .mat-radio-inner-circle {\\n background-color: #1F40E6 !important;\\n}\\n.mck-form-input mat-radio-group {\\n display: flex;\\n flex-direction: row;\\n flex-wrap: wrap;\\n}\\n.mck-form-input mat-radio-group > mat-radio-button:last-child {\\n margin-right: 0;\\n}\\n.mck-form-input-container > .mck-form-input, .mck-form-input-container > mck-select {\\n margin-bottom: 0.5rem;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 800px) {\\n .mck-form-input-container > .mck-form-input, .mck-form-input-container > mck-select {\\n margin-bottom: 1.75rem;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\\n .mck-form-input-container > .mck-form-input, .mck-form-input-container > mck-select {\\n margin-bottom: 1.75rem;\\n }\\n}\\n.mck-form-input-container .mck-radio-select {\\n margin-bottom: 1rem;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 800px) {\\n .mck-form-input-container .mck-radio-select {\\n margin-bottom: 1.5rem;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\\n .mck-form-input-container .mck-radio-select {\\n margin-bottom: 1.5rem;\\n }\\n}\\n.mck-form-input mat-chip.mat-standard-chip.mat-standard-chip {\\n border-radius: 3px;\\n min-height: 1.5rem;\\n background-color: #333333;\\n padding-top: 0.25rem;\\n padding-bottom: 0.25rem;\\n padding-left: 0.5rem;\\n font-family: \\\"McKinsey Sans\\\";\\n font-style: normal;\\n text-align: center;\\n font-size: 0.75rem;\\n line-height: 1.5rem;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-form-input mat-chip.mat-standard-chip.mat-standard-chip {\\n line-height: inherit;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-form-input mat-chip.mat-standard-chip.mat-standard-chip {\\n line-height: inherit;\\n }\\n}\\n.mck-form-input mat-checkbox.mat-checkbox.mat-checkbox {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n font-weight: 300;\\n color: black;\\n}\\n.mck-form-input mat-checkbox div.mat-checkbox-background.mat-checkbox-background {\\n background-color: #1F40E6;\\n}\\n.mck-form-input mat-checkbox div.mat-checkbox-background.mat-checkbox-background.mck-checkbox-disabled.mat-checkbox-disabled {\\n background-color: #D0D0D0;\\n}\\n.mck-form-input mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n font-weight: 300;\\n color: black;\\n color: #B3B3B3;\\n}\\n.mck-borderless {\\n border: none;\\n}\\n.mck-borderless:hover, .mck-borderless:focus, .mck-borderless:disabled {\\n border: none;\\n}\\n.mck-select-panel {\\n margin-top: 0 !important;\\n border-radius: unset !important;\\n margin-top: 35px !important;\\n margin-left: 5px;\\n}\\n.mck-select-panel mat-option {\\n padding-left: 0;\\n padding-right: 0;\\n}\\n.mck-select-panel mat-option.mat-option-text {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n text-align: left;\\n}\\n.mck-select-panel.mck-margin-top {\\n margin-top: 1.5rem !important;\\n}\\n.mck-checkbox-panel.mat-autocomplete-panel.mat-autocomplete-panel {\\n top: -10px;\\n max-height: 278px;\\n}\\n.mck-checkbox-panel mat-option.mck-truncated .mat-checkbox-label.mat-checkbox-label {\\n display: -webkit-box;\\n overflow: hidden;\\n -webkit-line-clamp: 2;\\n -webkit-box-orient: vertical;\\n}\\n.mck-checkbox-panel mat-option {\\n padding-left: 0;\\n padding-right: 0;\\n line-height: 24px;\\n height: unset;\\n min-height: 36px;\\n}\\n.mck-checkbox-panel mat-option .mat-checkbox-label.mat-checkbox-label {\\n flex: 1;\\n}\\n.mck-checkbox-panel mat-option .mat-checkbox-label.mat-checkbox-label {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n font-weight: 300;\\n color: black;\\n text-align: left;\\n}\\n.mck-checkbox-panel mat-option.mck-checkbox-group-header .mat-checkbox-label.mat-checkbox-label {\\n font-weight: 500;\\n}\\n.mck-checkbox-panel mat-option.mck-checkbox-group-child {\\n margin-left: 2rem;\\n}\\n.mck-checkbox-panel mat-option mat-checkbox label.mat-checkbox-layout {\\n width: 100%;\\n padding-left: 16px;\\n padding-right: 16px;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-checkbox-panel mat-option mat-checkbox label.mat-checkbox-layout {\\n padding-left: 2px;\\n padding-right: 2px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-checkbox-panel mat-option mat-checkbox label.mat-checkbox-layout {\\n padding-left: 2px;\\n padding-right: 2px;\\n }\\n}\\n.mck-checkbox-panel mat-option mat-checkbox div.mat-checkbox-frame.mat-checkbox-frame {\\n border: 1px solid #B3B3B3;\\n border-radius: 0;\\n}\\n.mck-checkbox-panel mat-option mat-checkbox.mat-checkbox-checked div.mat-checkbox-background.mat-checkbox-background {\\n background-color: #1F40E6;\\n}\\n.mck-checkbox-panel mat-option mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled div.mat-checkbox-background.mat-checkbox-background {\\n background-color: #D0D0D0;\\n}\\n.mck-checkbox-panel mat-option mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled .mat-checkbox-label.mat-checkbox-label {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n font-weight: 300;\\n color: black;\\n color: #B3B3B3;\\n text-align: left;\\n}\\n.mck-checkbox-panel mat-option mat-checkbox .mat-checkbox-inner-container {\\n width: 1.25rem;\\n height: 1.25rem;\\n}\\n.mck-select-option-selected {\\n font-weight: 500;\\n font-family: \\\"McKinsey Sans\\\";\\n color: black;\\n background-color: #E6E6E6;\\n}\\n.mck-select-option-selected .mck-spacer-content {\\n background-color: #1F40E6;\\n margin-right: 0.75rem;\\n}\\n.mck-select-option-unselected {\\n font-weight: 400;\\n font-family: \\\"McKinsey Sans\\\";\\n}\\n.mck-select-option-unselected.mck-ignore-disabled {\\n color: black;\\n}\\n.mck-select-option-unselected .mck-spacer-content {\\n visibility: hidden;\\n margin-right: 0.75rem;\\n}\\n.mck-button.mat-button.mat-button, .mat-button.mat-button.mck-stroked-button, .mat-button.mat-button.mck-warning-button, .mat-button.mat-button.mck-secondary-button, .mat-button.mat-button.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button, .mat-stroked-button.mat-stroked-button.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-primary-button {\\n height: 40px;\\n border-radius: 0;\\n border: none;\\n font-family: \\\"McKinsey Sans\\\";\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-button.mat-button.mat-button, .mat-button.mat-button.mck-stroked-button, .mat-button.mat-button.mck-warning-button, .mat-button.mat-button.mck-secondary-button, .mat-button.mat-button.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button, .mat-stroked-button.mat-stroked-button.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-primary-button {\\n height: 48px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-button.mat-button.mat-button, .mat-button.mat-button.mck-stroked-button, .mat-button.mat-button.mck-warning-button, .mat-button.mat-button.mck-secondary-button, .mat-button.mat-button.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button, .mat-stroked-button.mat-stroked-button.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-primary-button {\\n height: 48px;\\n }\\n}\\n.mck-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper, .mck-button.mat-stroked-button.mat-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n font-weight: normal;\\n padding-left: 0.25rem;\\n padding-right: 0.25rem;\\n font-family: \\\"McKinsey Sans\\\";\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper, .mck-button.mat-stroked-button.mat-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper {\\n font-size: 0.875rem;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper, .mck-button.mat-stroked-button.mat-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper {\\n font-size: 0.875rem;\\n }\\n}\\n.mck-button.mat-button.mat-button.mck-short, .mat-button.mat-button.mck-short.mck-stroked-button, .mat-button.mat-button.mck-short.mck-warning-button, .mat-button.mat-button.mck-short.mck-secondary-button, .mat-button.mat-button.mck-short.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short, .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button {\\n height: 32px;\\n min-width: 83px;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-button.mat-button.mat-button.mck-short, .mat-button.mat-button.mck-short.mck-stroked-button, .mat-button.mat-button.mck-short.mck-warning-button, .mat-button.mat-button.mck-short.mck-secondary-button, .mat-button.mat-button.mck-short.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short, .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button {\\n height: 48px;\\n min-width: 155px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-button.mat-button.mat-button.mck-short, .mat-button.mat-button.mck-short.mck-stroked-button, .mat-button.mat-button.mck-short.mck-warning-button, .mat-button.mat-button.mck-short.mck-secondary-button, .mat-button.mat-button.mck-short.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short, .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button {\\n height: 48px;\\n min-width: 155px;\\n }\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-button.mat-button.mat-button.mck-short.mck-short-height, .mat-button.mat-button.mck-short.mck-short-height.mck-stroked-button, .mat-button.mat-button.mck-short.mck-short-height.mck-warning-button, .mat-button.mat-button.mck-short.mck-short-height.mck-secondary-button, .mat-button.mat-button.mck-short.mck-short-height.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short.mck-short-height, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-primary-button {\\n height: 40px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-button.mat-button.mat-button.mck-short.mck-short-height, .mat-button.mat-button.mck-short.mck-short-height.mck-stroked-button, .mat-button.mat-button.mck-short.mck-short-height.mck-warning-button, .mat-button.mat-button.mck-short.mck-short-height.mck-secondary-button, .mat-button.mat-button.mck-short.mck-short-height.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short.mck-short-height, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-primary-button {\\n height: 40px;\\n }\\n}\\n.mck-button.mat-button.mat-button.mck-square, .mat-button.mat-button.mck-square.mck-stroked-button, .mat-button.mat-button.mck-square.mck-warning-button, .mat-button.mat-button.mck-square.mck-secondary-button, .mat-button.mat-button.mck-square.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-square, .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button {\\n height: 32px;\\n width: 32px;\\n min-width: 32px;\\n padding: 0;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-button.mat-button.mat-button.mck-square, .mat-button.mat-button.mck-square.mck-stroked-button, .mat-button.mat-button.mck-square.mck-warning-button, .mat-button.mat-button.mck-square.mck-secondary-button, .mat-button.mat-button.mck-square.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-square, .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button {\\n width: 40px;\\n height: 40px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-button.mat-button.mat-button.mck-square, .mat-button.mat-button.mck-square.mck-stroked-button, .mat-button.mat-button.mck-square.mck-warning-button, .mat-button.mat-button.mck-square.mck-secondary-button, .mat-button.mat-button.mck-square.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-square, .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button {\\n width: 40px;\\n height: 40px;\\n }\\n}\\n.mck-primary-button.mat-button.mat-button {\\n background-color: #1F40E6;\\n}\\n.mck-primary-button.mat-button.mat-button[disabled], .mck-primary-button.mat-button.mat-button.disabled {\\n background-color: #D0D0D0;\\n color: #757575;\\n cursor: not-allowed;\\n}\\n.mck-primary-button.mat-button.mat-button[disabled] > .mat-button-wrapper.mat-button-wrapper, .mck-primary-button.mat-button.mat-button.disabled > .mat-button-wrapper.mat-button-wrapper {\\n color: #757575;\\n}\\n.mck-primary-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper {\\n color: white;\\n}\\n.mck-secondary-button.mat-stroked-button.mat-stroked-button {\\n border: 1px solid #D0D0D0;\\n border-radius: 0;\\n border: 1px solid #2251FF;\\n color: #2251FF;\\n}\\n.mck-secondary-button.mat-stroked-button.mat-stroked-button[disabled], .mck-secondary-button.mat-stroked-button.mat-stroked-button.disabled {\\n border: 1px solid #D0D0D0;\\n color: #333333;\\n cursor: not-allowed;\\n}\\n.mck-secondary-button.mat-button.mat-button {\\n background-color: white;\\n}\\n.mck-secondary-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper {\\n color: #333333;\\n}\\n.mck-warning-button.mat-button.mat-button {\\n background-color: #ffd048;\\n}\\n.mck-warning-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper {\\n color: black;\\n}\\n.mck-stroked-button.mat-stroked-button.mat-stroked-button {\\n border: 2px solid #B3B3B3;\\n border-radius: 0;\\n display: flex;\\n flex-direction: column;\\n justify-content: center;\\n padding-left: 1.75rem;\\n padding-right: 1.75rem;\\n}\\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short {\\n height: 32px;\\n min-width: 83px;\\n padding-left: 0.25rem;\\n padding-right: 0.25rem;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short {\\n height: 48px;\\n min-width: 155px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short {\\n height: 48px;\\n min-width: 155px;\\n }\\n}\\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-primary {\\n border-width: 1px;\\n border-color: #1F40E6;\\n color: #1F40E6;\\n}\\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-thin-border-light {\\n border-color: #D0D0D0;\\n border-width: 1px;\\n}\\n.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n font-weight: normal;\\n color: #1F40E6;\\n}\\n.mck-toggle-button {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n border: 1px solid #B3B3B3;\\n border-color: #D0D0D0;\\n min-width: 59px;\\n background-color: white;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-toggle-button {\\n min-width: 132px;\\n padding-top: 0.5rem;\\n padding-bottom: 0.5rem;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-toggle-button {\\n min-width: 132px;\\n padding-top: 0.5rem;\\n padding-bottom: 0.5rem;\\n }\\n}\\n.mck-toggle-button-selected {\\n color: #1F40E6;\\n}\\n.mck-date-picker {\\n width: 100% !important;\\n height: 100% !important;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-date-picker {\\n max-width: 23rem;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-date-picker {\\n max-width: 23rem;\\n }\\n}\\n.mck-date-picker > .header.header {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n font-weight: 500;\\n color: #051C2C;\\n margin-top: 1.25rem;\\n}\\n.mck-date-picker > .header.header > .arrow.arrow {\\n width: 2.375rem;\\n height: 2rem;\\n}\\n.mck-date-picker > .header.header > .arrow.arrow > .icon.icon {\\n width: 1rem;\\n height: 1rem;\\n}\\n.mck-date-picker > .header.header > .arrow.arrow > .next.next {\\n background-image: url('arrow-forward.svg');\\n}\\n.mck-date-picker > .header.header > .arrow.arrow > .previous.previous {\\n background-image: url('arrow-backward.svg');\\n}\\n.mck-date-picker > .month {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n font-weight: 500;\\n}\\n.mck-date-picker > .week {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n font-weight: 500;\\n color: #767676;\\n}\\n.mck-date-picker > .body {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n}\\n.mck-date-picker > .body > div > div.date > .dot {\\n display: none;\\n}\\n.mck-date-picker > .body > div > div.date.disabled {\\n background-color: transparent;\\n border-radius: 0;\\n color: #767676;\\n}\\n.mck-date-picker > .body > div > div.date.active {\\n border-radius: 0;\\n background-color: #1F40E6;\\n}\\n.mck-date-picker > .body > div > div.date.non-month {\\n color: #767676;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-spacer-content-collapse-tablet {\\n display: none;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-spacer-content-collapse-tablet {\\n display: none;\\n }\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\\n .mck-spacer-content-collapse-tablet {\\n display: none;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\\n .mck-spacer-content-collapse-tablet {\\n display: none;\\n }\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-spacer-content-expand-mobile {\\n display: none;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-spacer-content-expand-mobile {\\n display: none;\\n }\\n}\\n.mck-spacer-content-divider {\\n background-color: #E6E6E6;\\n}\\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel {\\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\\n border-radius: 0;\\n border-top: 1px solid #E6E6E6;\\n border-bottom: 1px solid #E6E6E6;\\n}\\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded {\\n background-color: #F0F0F0;\\n border-bottom: none;\\n}\\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded .mck-collapse-icon {\\n width: 24px;\\n height: 24px;\\n background-image: url('chevron-close.svg');\\n background-size: contain;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded .mck-collapse-icon {\\n width: 48px;\\n height: 48px;\\n background-image: url('chevron-close-large.svg');\\n background-size: contain;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded .mck-collapse-icon {\\n width: 48px;\\n height: 48px;\\n background-image: url('chevron-close-large.svg');\\n background-size: contain;\\n }\\n}\\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body {\\n padding-left: 0;\\n padding-right: 0;\\n}\\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\\n font-family: \\\"McKinsey Sans\\\";\\n font-style: normal;\\n text-align: center;\\n font-size: 0.75rem;\\n line-height: 1.4;\\n padding-left: 1rem;\\n padding-right: 1rem;\\n text-align: left;\\n color: black;\\n font-weight: normal;\\n padding-bottom: 0.5rem;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\\n font-size: 1rem;\\n line-height: 1.6;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\\n font-size: 1rem;\\n line-height: 1.6;\\n }\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n }\\n}\\n.mck-expansion-panel mat-expansion-panel-header {\\n padding-left: 1rem;\\n padding-right: 1rem;\\n}\\n.mck-expansion-panel mat-expansion-panel-header > span.mat-content {\\n align-items: center;\\n}\\n.mck-expansion-panel mat-panel-title {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n text-align: left;\\n color: black;\\n font-weight: normal;\\n}\\n.mck-expansion-panel .mck-collapse-icon {\\n width: 24px;\\n height: 24px;\\n background-image: url('chevron-open.svg');\\n background-size: contain;\\n transform: rotate(0deg);\\n transition: transform 0.5s ease;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-expansion-panel .mck-collapse-icon {\\n width: 48px;\\n height: 48px;\\n background-image: url('chevron-open-large.svg');\\n background-size: contain;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-expansion-panel .mck-collapse-icon {\\n width: 48px;\\n height: 48px;\\n background-image: url('chevron-open-large.svg');\\n background-size: contain;\\n }\\n}\\n.mck-expansion-panel .mck-collapse-icon.expanded {\\n transform: rotate(180deg);\\n}\\n.mck-icon-fill-open {\\n fill: #1F40E6;\\n}\\n.mck-icon-fill-close {\\n fill: #767676;\\n}\\n.mck-icon-fill-black {\\n fill: black;\\n stroke: black;\\n}\\n.mck-icon-fill-white {\\n fill: white;\\n stroke: white;\\n}\\n.mck-icon-fill-gray {\\n fill: #333333;\\n stroke: #333333;\\n}\\n.mck-min {\\n max-width: 581px !important;\\n width: 80vw;\\n max-height: 100vh;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-min {\\n width: 100vw;\\n height: 100%;\\n max-height: 100vh;\\n }\\n .mck-min .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-min {\\n width: 100vw;\\n height: 100%;\\n max-height: 100vh;\\n }\\n .mck-min .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n}\\n.mck-noexpand {\\n max-width: 581px !important;\\n width: 80vw !important;\\n max-height: 100vh;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-noexpand {\\n width: calc(100vw - 32px) !important;\\n max-height: 100vh;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-noexpand {\\n width: calc(100vw - 32px) !important;\\n max-height: 100vh;\\n }\\n}\\n.mck-modal {\\n max-width: 800px !important;\\n width: 80vw;\\n max-height: 100vh;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-modal {\\n width: 100vw;\\n height: 100%;\\n max-height: 100vh;\\n }\\n .mck-modal .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-modal {\\n width: 100vw;\\n height: 100%;\\n max-height: 100vh;\\n }\\n .mck-modal .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n}\\n.mck-modal-mini {\\n max-width: 580px !important;\\n max-height: 100vh;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-modal-mini {\\n width: 100vw;\\n height: 100%;\\n max-height: 100vh;\\n }\\n .mck-modal-mini .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-modal-mini {\\n width: 100vw;\\n height: 100%;\\n max-height: 100vh;\\n }\\n .mck-modal-mini .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n}\\n.mck-modal-survey {\\n max-width: 691px !important;\\n max-height: 100vh;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-modal-survey .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-modal-survey .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n}\\n.mck-modal-wide {\\n max-width: 1024px !important;\\n width: 100vw;\\n height: 95vh;\\n max-height: 100vh;\\n}\\n.mck-modal-wide .mat-dialog-content {\\n background-color: #F8F9FA;\\n padding: 0 !important;\\n overflow: hidden;\\n}\\n.mck-modal-wide .mat-dialog-content .mat-icon-button[name=CloseButton] {\\n position: relative;\\n right: 32px;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-modal-wide .mat-dialog-content .mat-icon-button[name=CloseButton] .close-image {\\n height: 32px;\\n width: 32px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-modal-wide .mat-dialog-content .mat-icon-button[name=CloseButton] .close-image {\\n height: 32px;\\n width: 32px;\\n }\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-modal-wide {\\n width: 100vw;\\n height: 100%;\\n max-height: 100vh;\\n }\\n .mck-modal-wide .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-modal-wide {\\n width: 100vw;\\n height: 100%;\\n max-height: 100vh;\\n }\\n .mck-modal-wide .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n}\\n.mck-modal-wide-manage-booking {\\n max-width: 1024px !important;\\n width: 100vw;\\n max-height: 95vh;\\n}\\n.mck-modal-wide-manage-booking .mat-dialog-content {\\n background-color: #F8F9FA;\\n padding: 0 !important;\\n overflow: hidden;\\n}\\n.mck-modal-wide-manage-booking .mat-dialog-content .mat-icon-button[name=CloseButton] {\\n position: relative;\\n right: 32px;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-modal-wide-manage-booking .mat-dialog-content .mat-icon-button[name=CloseButton] .close-image {\\n height: 32px;\\n width: 32px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-modal-wide-manage-booking .mat-dialog-content .mat-icon-button[name=CloseButton] .close-image {\\n height: 32px;\\n width: 32px;\\n }\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-modal-wide-manage-booking {\\n width: 100vw;\\n height: 100%;\\n max-height: 100vh;\\n }\\n .mck-modal-wide-manage-booking .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-modal-wide-manage-booking {\\n width: 100vw;\\n height: 100%;\\n max-height: 100vh;\\n }\\n .mck-modal-wide-manage-booking .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-alert {\\n max-width: 100vw !important;\\n width: 100vw;\\n margin-left: 1rem;\\n margin-right: 1rem;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-alert {\\n max-width: 100vw !important;\\n width: 100vw;\\n margin-left: 1rem;\\n margin-right: 1rem;\\n }\\n}\\n.mck-alert-backdrop {\\n background: rgba(5, 28, 44, 0.85);\\n}\\n.mck-slide-toggle.mat-slide-toggle.mat-checked:not(.mat-disabled) .mat-slide-toggle-bar.mat-slide-toggle-bar {\\n background-color: #2251FF;\\n}\\n.mck-slide-toggle.mat-slide-toggle.mat-checked:not(.mat-disabled) .mat-slide-toggle-thumb.mat-slide-toggle-thumb {\\n background-color: white;\\n}\\n.mck-slide-toggle.mat-slide-toggle {\\n height: auto;\\n}\\n.mck-slide-toggle .mat-slide-toggle-content.mat-slide-toggle-content {\\n flex: 1;\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n text-align: left;\\n display: -webkit-box;\\n overflow: hidden;\\n -webkit-line-clamp: 2;\\n -webkit-box-orient: vertical;\\n white-space: normal;\\n}\\n.mck-slide-toggle .mat-slide-toggle-thumb.mat-slide-toggle-thumb {\\n width: 14px;\\n height: 14px;\\n transform: translate(50%, 50%);\\n}\\n.mck-slide-toggle .mat-slide-toggle-thumb-container.mat-slide-toggle-thumb-container {\\n top: -4px;\\n left: -4px;\\n}\\n.mck-slide-toggle .mat-slide-toggle-bar.mat-slide-toggle-bar {\\n height: 20px;\\n background-color: #D0D0D0;\\n border-radius: 20px;\\n}\\n.mck-skeleton {\\n background-color: #E6E6E6;\\n}\\n.mck-skeleton-checkbox {\\n float: left;\\n}\\n.mck-skeleton-checkbox > .loader.loader {\\n background-color: #E6E6E6;\\n width: 20px;\\n height: 20px;\\n margin-bottom: 0;\\n}\\n.mck-skeleton-header > .loader.loader {\\n background-color: #E6E6E6;\\n width: 100vw;\\n margin-bottom: 0;\\n max-width: 215px;\\n}\\n.mck-skeleton-image > .loader.loader {\\n background-color: #E6E6E6;\\n width: 81px;\\n height: 82px;\\n margin-bottom: 0;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 800px) {\\n .mck-skeleton-image > .loader.loader {\\n width: 219px;\\n height: 119px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\\n .mck-skeleton-image > .loader.loader {\\n width: 219px;\\n height: 119px;\\n }\\n}\\n.mck-skeleton-status > .loader.loader {\\n background-color: #E6E6E6;\\n width: 117px;\\n height: 78px;\\n margin-top: 10px;\\n margin-bottom: 0;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 800px) {\\n .mck-skeleton-status > .loader.loader {\\n width: 117px;\\n height: 78px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\\n .mck-skeleton-status > .loader.loader {\\n width: 117px;\\n height: 78px;\\n }\\n}\\n.mck-skeleton-line-1 > .loader.loader {\\n background-color: #E6E6E6;\\n height: 23px;\\n max-width: 176px;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-skeleton-line-1 > .loader.loader {\\n max-width: 219px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-skeleton-line-1 > .loader.loader {\\n max-width: 219px;\\n }\\n}\\n.mck-skeleton-line-2 > .loader.loader {\\n background-color: #E6E6E6;\\n height: 18px;\\n max-width: 165px;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-skeleton-line-2 > .loader.loader {\\n max-width: 189px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-skeleton-line-2 > .loader.loader {\\n max-width: 189px;\\n }\\n}\\n.mck-skeleton-line-3 > .loader.loader {\\n background-color: #E6E6E6;\\n height: 18px;\\n max-width: 147px;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-skeleton-line-3 > .loader.loader {\\n max-width: 189px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-skeleton-line-3 > .loader.loader {\\n max-width: 189px;\\n }\\n}\\n.mck-skeleton-line-30p > .loader.loader, .mck-skeleton-line-30p-thin > .loader.loader {\\n background-color: #E6E6E6;\\n height: 18px;\\n max-width: 30%;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-skeleton-line-30p > .loader.loader, .mck-skeleton-line-30p-thin > .loader.loader {\\n max-width: 30%;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-skeleton-line-30p > .loader.loader, .mck-skeleton-line-30p-thin > .loader.loader {\\n max-width: 30%;\\n }\\n}\\n.mck-skeleton-line-30p-thin > .loader.loader, .mck-skeleton-line-30p-thin-thin > .loader.loader {\\n height: 16px;\\n margin-bottom: 4px;\\n}\\n.mck-skeleton-line-45p > .loader.loader, .mck-skeleton-line-45p-thin > .loader.loader {\\n background-color: #E6E6E6;\\n height: 18px;\\n max-width: 45%;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-skeleton-line-45p > .loader.loader, .mck-skeleton-line-45p-thin > .loader.loader {\\n max-width: 45%;\\n margin-right: 45%;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-skeleton-line-45p > .loader.loader, .mck-skeleton-line-45p-thin > .loader.loader {\\n max-width: 45%;\\n margin-right: 45%;\\n }\\n}\\n.mck-skeleton-line-45p-thin > .loader.loader, .mck-skeleton-line-45p-thin-thin > .loader.loader {\\n height: 16px;\\n margin-bottom: 4px;\\n}\\n.mck-skeleton-line-50p > .loader.loader, .mck-skeleton-line-50p-thin > .loader.loader, .mck-skeleton-line-50p-thick > .loader.loader {\\n background-color: #E6E6E6;\\n height: 18px;\\n max-width: 50%;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-skeleton-line-50p > .loader.loader, .mck-skeleton-line-50p-thin > .loader.loader, .mck-skeleton-line-50p-thick > .loader.loader {\\n max-width: 50%;\\n margin-right: 45%;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-skeleton-line-50p > .loader.loader, .mck-skeleton-line-50p-thin > .loader.loader, .mck-skeleton-line-50p-thick > .loader.loader {\\n max-width: 50%;\\n margin-right: 45%;\\n }\\n}\\n.mck-skeleton-line-50p-thin > .loader.loader, .mck-skeleton-line-50p-thin-thin > .loader.loader, .mck-skeleton-line-50p-thick-thin > .loader.loader {\\n height: 16px;\\n margin-bottom: 4px;\\n}\\n.mck-skeleton-line-50p-thick > .loader.loader, .mck-skeleton-line-50p-thin-thick > .loader.loader, .mck-skeleton-line-50p-thick-thick > .loader.loader {\\n height: 32px;\\n margin-bottom: 4px;\\n}\\n.mck-skeleton-line-60p > .loader.loader, .mck-skeleton-line-60p-thin > .loader.loader, .mck-skeleton-line-60p-thick > .loader.loader {\\n background-color: #E6E6E6;\\n height: 18px;\\n max-width: 60%;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-skeleton-line-60p > .loader.loader, .mck-skeleton-line-60p-thin > .loader.loader, .mck-skeleton-line-60p-thick > .loader.loader {\\n max-width: 60%;\\n margin-right: 35%;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-skeleton-line-60p > .loader.loader, .mck-skeleton-line-60p-thin > .loader.loader, .mck-skeleton-line-60p-thick > .loader.loader {\\n max-width: 60%;\\n margin-right: 35%;\\n }\\n}\\n.mck-skeleton-line-60p-thin > .loader.loader, .mck-skeleton-line-60p-thin-thin > .loader.loader, .mck-skeleton-line-60p-thick-thin > .loader.loader {\\n height: 16px;\\n margin-bottom: 4px;\\n}\\n.mck-skeleton-line-60p-thick > .loader.loader, .mck-skeleton-line-60p-thin-thick > .loader.loader, .mck-skeleton-line-60p-thick-thick > .loader.loader {\\n height: 32px;\\n margin-bottom: 4px;\\n}\\n.mck-skeleton-line-70p > .loader.loader, .mck-skeleton-line-70p-thin > .loader.loader, .mck-skeleton-line-70p-thick > .loader.loader {\\n background-color: #E6E6E6;\\n height: 18px;\\n max-width: 70%;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-skeleton-line-70p > .loader.loader, .mck-skeleton-line-70p-thin > .loader.loader, .mck-skeleton-line-70p-thick > .loader.loader {\\n max-width: 70%;\\n margin-right: 25%;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-skeleton-line-70p > .loader.loader, .mck-skeleton-line-70p-thin > .loader.loader, .mck-skeleton-line-70p-thick > .loader.loader {\\n max-width: 70%;\\n margin-right: 25%;\\n }\\n}\\n.mck-skeleton-line-70p-thin > .loader.loader, .mck-skeleton-line-70p-thin-thin > .loader.loader, .mck-skeleton-line-70p-thick-thin > .loader.loader {\\n height: 16px;\\n margin-bottom: 4px;\\n}\\n.mck-skeleton-line-70p-thick > .loader.loader, .mck-skeleton-line-70p-thin-thick > .loader.loader, .mck-skeleton-line-70p-thick-thick > .loader.loader {\\n height: 32px;\\n margin-bottom: 4px;\\n}\\n.mck-skeleton-line-80p > .loader.loader, .mck-skeleton-line-80p-thin > .loader.loader, .mck-skeleton-line-80p-thick > .loader.loader {\\n background-color: #E6E6E6;\\n height: 18px;\\n max-width: 80%;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-skeleton-line-80p > .loader.loader, .mck-skeleton-line-80p-thin > .loader.loader, .mck-skeleton-line-80p-thick > .loader.loader {\\n max-width: 80%;\\n margin-right: 15%;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-skeleton-line-80p > .loader.loader, .mck-skeleton-line-80p-thin > .loader.loader, .mck-skeleton-line-80p-thick > .loader.loader {\\n max-width: 80%;\\n margin-right: 15%;\\n }\\n}\\n.mck-skeleton-line-80p-thin > .loader.loader, .mck-skeleton-line-80p-thin-thin > .loader.loader, .mck-skeleton-line-80p-thick-thin > .loader.loader {\\n height: 16px;\\n margin-bottom: 4px;\\n}\\n.mck-skeleton-line-80p-thick > .loader.loader, .mck-skeleton-line-80p-thin-thick > .loader.loader, .mck-skeleton-line-80p-thick-thick > .loader.loader {\\n height: 32px;\\n margin-bottom: 4px;\\n}\\n.mck-skeleton-line-90p > .loader.loader, .mck-skeleton-line-90p-thin > .loader.loader {\\n background-color: #E6E6E6;\\n height: 18px;\\n max-width: 90%;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-skeleton-line-90p > .loader.loader, .mck-skeleton-line-90p-thin > .loader.loader {\\n max-width: 90%;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-skeleton-line-90p > .loader.loader, .mck-skeleton-line-90p-thin > .loader.loader {\\n max-width: 90%;\\n }\\n}\\n.mck-skeleton-line-90p-thin > .loader.loader, .mck-skeleton-line-90p-thin-thin > .loader.loader {\\n height: 16px;\\n margin-bottom: 4px;\\n}\\n.mck-skeleton-load-more > .loader.loader {\\n background-color: #E6E6E6;\\n margin-top: 0.5rem;\\n margin-bottom: 0.5rem;\\n width: calc(100vw - (2 * 1rem));\\n height: 40px;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-skeleton-load-more > .loader.loader {\\n max-width: 320px;\\n height: 50px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-skeleton-load-more > .loader.loader {\\n max-width: 320px;\\n height: 50px;\\n }\\n}\\n.mck-skeleton-load-more-100p > .loader.loader, .mck-skeleton-header > .loader.loader, .mck-skeleton-room-availability > .loader.loader {\\n background-color: #E6E6E6;\\n margin-top: 0.5rem;\\n margin-bottom: 0.5rem;\\n width: calc(100vw - (2 * 1rem));\\n height: 40px;\\n max-width: none;\\n width: 100%;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-skeleton-load-more-100p > .loader.loader, .mck-skeleton-header > .loader.loader, .mck-skeleton-room-availability > .loader.loader {\\n max-width: none;\\n width: 100%;\\n height: 50px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-skeleton-load-more-100p > .loader.loader, .mck-skeleton-header > .loader.loader, .mck-skeleton-room-availability > .loader.loader {\\n max-width: none;\\n width: 100%;\\n height: 50px;\\n }\\n}\\n.mck-skeleton-load-more-100p > .loader.loader-room-availability > .loader.loader, .mck-skeleton-header > .loader.loader-room-availability > .loader.loader, .mck-skeleton-room-availability > .loader.loader-room-availability > .loader.loader {\\n height: 124px;\\n margin-bottom: 4px;\\n}\\n.mck-heading-5 {\\n font-family: \\\"McKinsey Sans\\\";\\n font-style: normal;\\n text-align: center;\\n font-size: 1.5rem;\\n line-height: 1.333;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-heading-5 {\\n font-size: 1.75rem;\\n line-height: 1.142;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-heading-5 {\\n font-size: 1.75rem;\\n line-height: 1.142;\\n }\\n}\\nngx-mat-select-search .mat-select-search-no-entries-found {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n text-align: left;\\n}\\nngx-mat-select-search .mat-select-search-input {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n text-align: left;\\n}\\nngx-mat-select-search button.mat-button.mat-select-search-clear {\\n background-color: transparent;\\n border: none;\\n color: black;\\n}\\n::-webkit-scrollbar {\\n width: 16px;\\n height: 18px;\\n}\\n::-webkit-scrollbar-thumb {\\n height: 1.5rem;\\n border: 4px solid rgba(0, 0, 0, 0);\\n background-clip: padding-box;\\n border-radius: 8px;\\n background-color: #757575;\\n -webkit-box-shadow: inset -1px -1px 0px rgba(0, 0, 0, 0.05), inset 1px 1px 0px rgba(0, 0, 0, 0.05);\\n}\\n::-webkit-scrollbar-button {\\n width: 0;\\n height: 0;\\n display: none;\\n}\\n::-webkit-scrollbar-corner {\\n background-color: transparent;\\n}\\nheader {\\n z-index: 2;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mb-block {\\n display: block;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mb-block {\\n display: block;\\n }\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mb-bottom {\\n padding-bottom: 110px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mb-bottom {\\n padding-bottom: 110px;\\n }\\n}\\n.map-filters-container .mck-form-input mat-form-field .mat-form-field-infix {\\n top: 5px;\\n}\\n.map-filters-container .mck-form-input mat-form-field .mat-form-field-outline {\\n height: 48px;\\n background-color: white;\\n}\\n.map-filters-container .mck-form-input mat-form-field .mat-form-field-infix {\\n padding-top: 0.5rem !important;\\n}\\n.office-level-row .mat-select-placeholder {\\n color: #333333;\\n font-family: \\\"McKinsey Sans\\\";\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .office-level-row .legend-container .mat-form-field-outline, .office-level-row .mat-form-field-infix {\\n height: 45px !important;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .office-level-row .legend-container .mat-form-field-outline, .office-level-row .mat-form-field-infix {\\n height: 45px !important;\\n }\\n}\\n.office-level-row .select-divider {\\n display: block;\\n top: 0 !important;\\n width: 44px !important;\\n right: -11px !important;\\n background: transparent !important;\\n border-width: 0 0 0 1px;\\n border-color: #c6c6c6;\\n border-style: solid;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .office-level-row .select-divider {\\n height: calc(100% - 1px) !important;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .office-level-row .select-divider {\\n height: calc(100% - 1px) !important;\\n }\\n}\\n.office-level-row .disabled .select-divider {\\n background: #F0F0F0 !important;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .office-level-row .disabled .select-divider {\\n height: calc(100% - 2px) !important;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .office-level-row .disabled .select-divider {\\n height: calc(100% - 2px) !important;\\n }\\n}\\n.office-level-row .disabled .select-chevron {\\n opacity: 0.5;\\n margin-left: 10px;\\n}\\n.office-level-row .legend-container .mat-form-field-outline, .office-level-row .mat-form-field-infix, .map-controls .legend-container .mat-form-field-outline, .map-controls .mat-form-field-infix {\\n display: flex !important;\\n width: 100% !important;\\n justify-content: space-between !important;\\n}\\n.booking-form-container {\\n overflow-y: auto;\\n max-height: calc(100vh - 345px);\\n}\\n.booking-form-container .mck-form-input mat-label, .booking-form-container .mck-form-input .mat-radio-label-content {\\n font-family: \\\"McKinsey Sans\\\" !important;\\n color: #333333;\\n}\\n.booking-form-container .mck-form-input input::-moz-placeholder {\\n font-family: \\\"McKinsey Sans\\\";\\n color: #B3B3B3;\\n}\\n.booking-form-container .mck-form-input input, .booking-form-container .mck-form-input input::placeholder {\\n font-family: \\\"McKinsey Sans\\\";\\n color: #B3B3B3;\\n}\\n/*\\nStart Angular Calendar\\n*/\\n.cal-week-view {\\n /* stylelint-disable-next-line selector-type-no-unknown */\\n}\\n.cal-week-view * {\\n box-sizing: border-box;\\n}\\n.cal-week-view .cal-day-headers {\\n -js-display: flex;\\n display: flex;\\n padding-left: 70px;\\n border: 1px solid;\\n}\\n.cal-week-view .cal-day-headers .cal-header {\\n flex: 1;\\n text-align: left;\\n padding: 12px;\\n margin-top: 20px;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 16px;\\n font-weight: 400;\\n}\\n.cal-week-view .cal-day-headers .cal-header p {\\n font-size: 16px;\\n font-weight: 300;\\n margin: 0;\\n}\\n.cal-week-view .cal-day-headers .cal-header.show-weekend {\\n font-size: 12px;\\n}\\n.cal-week-view .cal-day-headers .cal-header.show-weekend p {\\n font-size: 12px;\\n}\\n.cal-week-view .cal-day-headers .cal-header:not(:last-child) {\\n border-right: 1px solid;\\n}\\n.cal-week-view .cal-day-headers .cal-header:first-child {\\n border-left: 1px solid;\\n}\\n.cal-week-view .cal-day-headers span {\\n font-weight: 400;\\n opacity: 0.5;\\n}\\n.cal-week-view .cal-day-column {\\n flex-grow: 1;\\n border-left: solid 1px;\\n padding-top: 5px;\\n}\\n.cal-week-view .cal-event {\\n font-size: 12px;\\n border: 1px solid;\\n outline: none;\\n}\\n.cal-week-view .cal-event .berry {\\n position: absolute;\\n left: calc(50% - 7px);\\n display: none;\\n height: 14px;\\n width: 14px;\\n background-color: #00A9F4;\\n border-radius: 50%;\\n}\\n.cal-week-view .cal-event .berry.top {\\n top: -7px;\\n}\\n.cal-week-view .cal-event .berry.bot {\\n bottom: -7px;\\n}\\n.cal-week-view .cal-event .bumper {\\n position: absolute;\\n left: 3px;\\n display: block;\\n width: calc(100% - 6px);\\n border-radius: 3px;\\n z-index: -1;\\n opacity: 0.6;\\n}\\n.cal-week-view .cal-event.expanded:focus {\\n border-style: dashed;\\n border-width: 2px;\\n outline: none;\\n}\\n.cal-week-view .cal-event.expanded:focus .berry {\\n display: block;\\n}\\n.cal-week-view .cal-time-label-column {\\n width: 70px;\\n height: 100%;\\n}\\n.cal-week-view .cal-current-time-marker {\\n position: absolute;\\n width: 100%;\\n height: 2px;\\n z-index: 2;\\n}\\n.cal-week-view .cal-all-day-events {\\n border: solid 1px;\\n border-top: 0;\\n border-bottom-width: 3px;\\n padding-top: 3px;\\n position: relative;\\n}\\n.cal-week-view .cal-all-day-events .cal-day-columns {\\n height: 100%;\\n width: 100%;\\n -js-display: flex;\\n display: flex;\\n position: absolute;\\n top: 0;\\n z-index: 0;\\n}\\n.cal-week-view .cal-all-day-events .cal-events-row {\\n position: relative;\\n height: 31px;\\n margin-left: 70px;\\n}\\n.cal-week-view .cal-all-day-events .cal-event-container {\\n display: inline-block;\\n position: absolute;\\n}\\n.cal-week-view .cal-all-day-events .cal-event-container.resize-active {\\n z-index: 1;\\n pointer-events: none;\\n}\\n.cal-week-view .cal-all-day-events .cal-event {\\n padding: 0 5px;\\n margin-left: 2px;\\n margin-right: 2px;\\n height: 28px;\\n line-height: 28px;\\n}\\n.cal-week-view .cal-all-day-events .cal-time-label-column {\\n -js-display: flex;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n font-size: 14px;\\n}\\n.cal-week-view .cal-all-day-events .cal-resize-handle {\\n width: 6px;\\n height: 100%;\\n cursor: col-resize;\\n position: absolute;\\n top: 0;\\n}\\n.cal-week-view .cal-all-day-events .cal-resize-handle.cal-resize-handle-after-end {\\n right: 0;\\n}\\n.cal-week-view .cal-event,\\n.cal-week-view .cal-header {\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n.cal-week-view .cal-drag-active {\\n pointer-events: none;\\n z-index: 1;\\n}\\n.cal-week-view .cal-drag-active * {\\n pointer-events: none;\\n}\\n.cal-week-view .cal-time-events {\\n position: relative;\\n border: solid 1px;\\n border-top: 0;\\n -js-display: flex;\\n display: flex;\\n}\\n.cal-week-view .cal-time-events .cal-day-columns {\\n -js-display: flex;\\n display: flex;\\n flex-grow: 1;\\n /*\\n First and last item's hour visibility adjustment in the list \\n */\\n}\\n.cal-week-view .cal-time-events .cal-day-columns .cal-hour:nth-of-type(2) .cal-time, .cal-week-view .cal-time-events .cal-day-columns .cal-hour:nth-of-type(8) .cal-time {\\n top: -9px;\\n}\\n.cal-week-view .cal-time-events .cal-day-column {\\n position: relative;\\n}\\n.cal-week-view .cal-time-events .cal-events-container {\\n position: relative;\\n}\\n.cal-week-view .cal-time-events .cal-event-container {\\n position: absolute;\\n z-index: 1;\\n}\\n.cal-week-view .cal-time-events .cal-event {\\n overflow: visible;\\n width: 103%;\\n height: calc(100% - 2px);\\n margin: 1px;\\n padding: 0 5px;\\n line-height: 25px;\\n left: -3%;\\n position: relative;\\n}\\n.expanded .cal-week-view .cal-time-events .cal-event {\\n width: 100%;\\n left: 0%;\\n}\\n.cal-week-view .cal-time-events .cal-resize-handle {\\n width: 100%;\\n height: 8px;\\n cursor: row-resize;\\n position: absolute;\\n z-index: 10;\\n}\\n.cal-week-view .cal-time-events .cal-resize-handle.cal-resize-handle-after-end {\\n bottom: -4px;\\n}\\n.cal-week-view .cal-time-events .cal-resize-handle.cal-resize-handle-before-start {\\n top: -4px;\\n}\\n.cal-week-view .cal-hour-segment {\\n position: relative;\\n}\\n.cal-week-view .cal-hour-segment::after {\\n content: \\\" \\\";\\n}\\n.cal-week-view .cal-draggable {\\n cursor: move;\\n}\\n.cal-week-view mwl-calendar-week-view-hour-segment,\\n.cal-week-view .cal-hour-segment {\\n display: block;\\n}\\n.cal-week-view .cal-hour .cal-time {\\n z-index: 2;\\n position: relative;\\n top: -14px;\\n background-color: #f4f4f4;\\n height: 5rem;\\n width: 4rem;\\n border-right: 1px solid #A19F9F;\\n border-width: thin;\\n}\\n.cal-week-view .cal-hour .cal-hour-start {\\n border: none !important;\\n}\\n.expanded .cal-week-view .cal-hour .cal-time {\\n background-color: #f8f9fa;\\n width: 4.44rem;\\n}\\n.cal-week-view .cal-hour:not(:last-child) .cal-hour-segment,\\n.cal-week-view .cal-hour:last-child :not(:last-child) .cal-hour-segment {\\n border-bottom: thin solid;\\n border-color: #DBDBDB;\\n}\\n.cal-week-view .cal-time {\\n font-weight: bold;\\n padding-top: 5px;\\n width: 70px;\\n text-align: center;\\n}\\n.cal-week-view .cal-hour-segment.cal-after-hour-start .cal-time {\\n display: none;\\n}\\n.cal-week-view {\\n background-color: #fff;\\n border-top: solid 1px #e1e1e1;\\n}\\n.cal-week-view .cal-day-headers {\\n border-color: #e1e1e1;\\n border-top: 0;\\n border-left-width: 0;\\n border-right-width: 0;\\n}\\n.cal-week-view .cal-day-headers .cal-header:not(:last-child) {\\n border-right-color: #e1e1e1;\\n}\\n.cal-week-view .cal-day-headers .cal-header:first-child {\\n border-left-color: #e1e1e1;\\n}\\n.cal-week-view .cal-day-column {\\n border-left-color: #e1e1e1;\\n}\\n.cal-week-view .cal-event {\\n background-color: #d1e8ff;\\n border-color: #1e90ff;\\n color: #1e90ff;\\n}\\n.cal-week-view .cal-all-day-events {\\n border-color: #e1e1e1;\\n}\\n.cal-week-view .cal-header.cal-event-date {\\n color: #2251FF;\\n}\\n.cal-week-view .cal-header.cal-weekend span {\\n color: #8b0000;\\n}\\n.cal-week-view .cal-time-events {\\n border-color: #e1e1e1;\\n}\\n.expanded .cal-week-view .cal-time-events .cal-day-columns:not(.cal-resize-active) .cal-hour-segment:hover {\\n background-color: #C0DBF5;\\n}\\n.cal-week-view .cal-hour-odd {\\n background-color: #fafafa;\\n}\\n.cal-week-view .cal-drag-over .cal-hour-segment {\\n background-color: #ededed;\\n}\\n.cal-week-view .cal-hour:not(:last-child) .cal-hour-segment,\\n.cal-week-view .cal-hour:last-child :not(:last-child) .cal-hour-segment {\\n border-bottom-color: #e1e1e1;\\n}\\n.cal-week-view .cal-current-time-marker {\\n display: none;\\n}\\n.cal-day-view mwl-calendar-week-view-header {\\n display: none;\\n}\\n.cal-day-view .cal-events-container {\\n margin-left: 70px;\\n}\\n.cal-day-view .cal-day-column {\\n border-left: 0;\\n}\\n.cal-day-view .cal-current-time-marker {\\n margin-left: 70px;\\n width: calc(100% - 70px);\\n}\\n.cal-tooltip {\\n position: absolute;\\n z-index: 1070;\\n display: block;\\n font-style: normal;\\n font-weight: normal;\\n letter-spacing: normal;\\n line-break: auto;\\n line-height: 1.5;\\n text-align: start;\\n text-decoration: none;\\n text-shadow: none;\\n text-transform: none;\\n white-space: normal;\\n word-break: normal;\\n word-spacing: normal;\\n font-size: 14px;\\n word-wrap: break-word;\\n opacity: 0.9;\\n margin-bottom: 4px;\\n}\\n.cal-tooltip.cal-tooltip-top {\\n padding: 5px 0;\\n margin-top: -3px;\\n}\\n.cal-tooltip.cal-tooltip-top .cal-tooltip-arrow {\\n bottom: 0;\\n left: 50%;\\n margin-left: -5px;\\n border-width: 5px 5px 0;\\n}\\n.cal-tooltip.cal-tooltip-right {\\n padding: 0 5px;\\n margin-left: 3px;\\n}\\n.cal-tooltip.cal-tooltip-right .cal-tooltip-arrow {\\n top: 50%;\\n left: 0;\\n margin-top: -5px;\\n border-width: 5px 5px 5px 0;\\n}\\n.cal-tooltip.cal-tooltip-bottom {\\n padding: 5px 0;\\n margin-top: 3px;\\n}\\n.cal-tooltip.cal-tooltip-bottom .cal-tooltip-arrow {\\n top: 0;\\n left: 50%;\\n margin-left: -5px;\\n border-width: 0 5px 5px;\\n}\\n.cal-tooltip.cal-tooltip-left {\\n padding: 0 5px;\\n margin-left: -3px;\\n}\\n.cal-tooltip.cal-tooltip-left .cal-tooltip-arrow {\\n top: 50%;\\n right: 0;\\n margin-top: -5px;\\n border-width: 5px 0 5px 5px;\\n}\\n.cal-tooltip-inner {\\n max-width: 200px;\\n padding: 3px 8px;\\n text-align: center;\\n border-radius: 0.25rem;\\n}\\n.cal-tooltip-arrow {\\n position: absolute;\\n width: 0;\\n height: 0;\\n border-color: transparent;\\n border-style: solid;\\n}\\n.cal-tooltip.cal-tooltip-top .cal-tooltip-arrow {\\n border-top-color: #fff;\\n}\\n.cal-tooltip.cal-tooltip-right .cal-tooltip-arrow {\\n border-right-color: #fff;\\n}\\n.cal-tooltip.cal-tooltip-bottom .cal-tooltip-arrow {\\n border-bottom-color: #fff;\\n}\\n.cal-tooltip.cal-tooltip-left .cal-tooltip-arrow {\\n border-left-color: #fff;\\n}\\n.cal-tooltip-inner {\\n padding: 10px;\\n color: #000;\\n background-color: #fff;\\n box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.2);\\n}\\n.cal-event-container .cal-event {\\n border-radius: 0 !important;\\n}\\n.cal-event-container .cal-event .cal-event-title {\\n font-size: 14px;\\n font-weight: 400;\\n padding: 10px 14px;\\n color: black;\\n display: block;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .cal-event-container .cal-event .cal-event-title {\\n font-size: 12px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .cal-event-container .cal-event .cal-event-title {\\n font-size: 12px;\\n }\\n}\\n.cal-event-container.selected {\\n width: 100% !important;\\n left: 0% !important;\\n z-index: 2 !important;\\n}\\n.cal-event-container.selected .cal-event {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n}\\n.cal-event-container.selected .cal-event .cal-event-title {\\n white-space: pre-wrap;\\n text-align: center;\\n}\\n.cal-event-container.selected.mobile {\\n left: 0% !important;\\n width: 100% !important;\\n}\\n.cal-event-container.selected.minimal .cal-event-title {\\n top: 0;\\n transform: none;\\n}\\n.cal-event-container.mobile {\\n left: 0% !important;\\n width: 100% !important;\\n}\\n.cal-event-container.booked {\\n width: 100% !important;\\n left: 0% !important;\\n}\\n.cal-event-container.booked .cal-event .cal-event-title {\\n width: 100%;\\n}\\n.cal-event-container.booked.mobile {\\n left: 0% !important;\\n width: 100% !important;\\n}\\n.cal-event-container.booked.minimal .cal-event-title {\\n padding: 1px 14px;\\n}\\n.cal-event-container.show-weekend .cal-event .cal-event-title {\\n font-size: 13px;\\n}\\n.cal-week-view {\\n position: relative;\\n}\\n.cal-week-view .cal-time {\\n font-weight: 400;\\n}\\n.cal-week-view .cal-hour {\\n background-color: #ffffff;\\n}\\n.cal-week-view .cal-hour-odd {\\n background-color: #ffffff;\\n}\\n.cal-week-view .cal-time-events {\\n background-color: #ffffff;\\n}\\n.cal-week-view .cal-day-headers {\\n position: fixed;\\n width: 100%;\\n max-width: 1008px;\\n background: #F8F9FA;\\n z-index: 3;\\n height: 82px;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 801px) and (max-width: 1024px) {\\n .cal-week-view .cal-day-headers {\\n width: 100%;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 1049px) and (max-width: 1280px) {\\n .cal-week-view .cal-day-headers {\\n width: 100%;\\n }\\n}\\n.expanded .cal-week-view .cal-time-events {\\n padding-top: 87px;\\n position: relative;\\n top: 1px;\\n z-index: 1;\\n border: 1px solid #f0f0f0;\\n}\\n.expanded .cal-event-container.mobile {\\n left: 20% !important;\\n width: 80% !important;\\n}\\n/*\\nEnd Start Angular Calendar\\n*/\\n.mat-ripple-element {\\n background-color: rgba(0, 0, 0, 0.1);\\n}\\n.mat-option {\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-option:hover:not(.mat-option-disabled), .mat-option:focus:not(.mat-option-disabled) {\\n background: rgba(0, 0, 0, 0.04);\\n}\\n.mat-option.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled) {\\n background: rgba(0, 0, 0, 0.04);\\n}\\n.mat-option.mat-active {\\n background: rgba(0, 0, 0, 0.04);\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-option.mat-option-disabled {\\n color: rgba(0, 0, 0, 0.38);\\n}\\n.mat-primary .mat-option.mat-selected:not(.mat-option-disabled) {\\n color: #3f51b5;\\n}\\n.mat-accent .mat-option.mat-selected:not(.mat-option-disabled) {\\n color: #448aff;\\n}\\n.mat-warn .mat-option.mat-selected:not(.mat-option-disabled) {\\n color: #f44336;\\n}\\n.mat-optgroup-label {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n.mat-optgroup-disabled .mat-optgroup-label {\\n color: rgba(0, 0, 0, 0.38);\\n}\\n.mat-pseudo-checkbox {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n.mat-pseudo-checkbox::after {\\n color: #fafafa;\\n}\\n.mat-pseudo-checkbox-disabled {\\n color: #b0b0b0;\\n}\\n.mat-primary .mat-pseudo-checkbox-checked,\\n.mat-primary .mat-pseudo-checkbox-indeterminate {\\n background: #3f51b5;\\n}\\n.mat-pseudo-checkbox-checked,\\n.mat-pseudo-checkbox-indeterminate,\\n.mat-accent .mat-pseudo-checkbox-checked,\\n.mat-accent .mat-pseudo-checkbox-indeterminate {\\n background: #448aff;\\n}\\n.mat-warn .mat-pseudo-checkbox-checked,\\n.mat-warn .mat-pseudo-checkbox-indeterminate {\\n background: #f44336;\\n}\\n.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,\\n.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled {\\n background: #b0b0b0;\\n}\\n.mat-elevation-z0 {\\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mat-elevation-z1 {\\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mat-elevation-z2 {\\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mat-elevation-z3 {\\n box-shadow: 0px 3px 3px -2px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 0, 0, 0.14), 0px 1px 8px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mat-elevation-z4 {\\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mat-elevation-z5 {\\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 5px 8px 0px rgba(0, 0, 0, 0.14), 0px 1px 14px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mat-elevation-z6 {\\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mat-elevation-z7 {\\n box-shadow: 0px 4px 5px -2px rgba(0, 0, 0, 0.2), 0px 7px 10px 1px rgba(0, 0, 0, 0.14), 0px 2px 16px 1px rgba(0, 0, 0, 0.12);\\n}\\n.mat-elevation-z8 {\\n box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);\\n}\\n.mat-elevation-z9 {\\n box-shadow: 0px 5px 6px -3px rgba(0, 0, 0, 0.2), 0px 9px 12px 1px rgba(0, 0, 0, 0.14), 0px 3px 16px 2px rgba(0, 0, 0, 0.12);\\n}\\n.mat-elevation-z10 {\\n box-shadow: 0px 6px 6px -3px rgba(0, 0, 0, 0.2), 0px 10px 14px 1px rgba(0, 0, 0, 0.14), 0px 4px 18px 3px rgba(0, 0, 0, 0.12);\\n}\\n.mat-elevation-z11 {\\n box-shadow: 0px 6px 7px -4px rgba(0, 0, 0, 0.2), 0px 11px 15px 1px rgba(0, 0, 0, 0.14), 0px 4px 20px 3px rgba(0, 0, 0, 0.12);\\n}\\n.mat-elevation-z12 {\\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);\\n}\\n.mat-elevation-z13 {\\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 13px 19px 2px rgba(0, 0, 0, 0.14), 0px 5px 24px 4px rgba(0, 0, 0, 0.12);\\n}\\n.mat-elevation-z14 {\\n box-shadow: 0px 7px 9px -4px rgba(0, 0, 0, 0.2), 0px 14px 21px 2px rgba(0, 0, 0, 0.14), 0px 5px 26px 4px rgba(0, 0, 0, 0.12);\\n}\\n.mat-elevation-z15 {\\n box-shadow: 0px 8px 9px -5px rgba(0, 0, 0, 0.2), 0px 15px 22px 2px rgba(0, 0, 0, 0.14), 0px 6px 28px 5px rgba(0, 0, 0, 0.12);\\n}\\n.mat-elevation-z16 {\\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\\n}\\n.mat-elevation-z17 {\\n box-shadow: 0px 8px 11px -5px rgba(0, 0, 0, 0.2), 0px 17px 26px 2px rgba(0, 0, 0, 0.14), 0px 6px 32px 5px rgba(0, 0, 0, 0.12);\\n}\\n.mat-elevation-z18 {\\n box-shadow: 0px 9px 11px -5px rgba(0, 0, 0, 0.2), 0px 18px 28px 2px rgba(0, 0, 0, 0.14), 0px 7px 34px 6px rgba(0, 0, 0, 0.12);\\n}\\n.mat-elevation-z19 {\\n box-shadow: 0px 9px 12px -6px rgba(0, 0, 0, 0.2), 0px 19px 29px 2px rgba(0, 0, 0, 0.14), 0px 7px 36px 6px rgba(0, 0, 0, 0.12);\\n}\\n.mat-elevation-z20 {\\n box-shadow: 0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 20px 31px 3px rgba(0, 0, 0, 0.14), 0px 8px 38px 7px rgba(0, 0, 0, 0.12);\\n}\\n.mat-elevation-z21 {\\n box-shadow: 0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 21px 33px 3px rgba(0, 0, 0, 0.14), 0px 8px 40px 7px rgba(0, 0, 0, 0.12);\\n}\\n.mat-elevation-z22 {\\n box-shadow: 0px 10px 14px -6px rgba(0, 0, 0, 0.2), 0px 22px 35px 3px rgba(0, 0, 0, 0.14), 0px 8px 42px 7px rgba(0, 0, 0, 0.12);\\n}\\n.mat-elevation-z23 {\\n box-shadow: 0px 11px 14px -7px rgba(0, 0, 0, 0.2), 0px 23px 36px 3px rgba(0, 0, 0, 0.14), 0px 9px 44px 8px rgba(0, 0, 0, 0.12);\\n}\\n.mat-elevation-z24 {\\n box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12);\\n}\\n.mat-app-background {\\n background-color: #fafafa;\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-theme-loaded-marker {\\n display: none;\\n}\\n.mat-autocomplete-panel {\\n background: white;\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-autocomplete-panel:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover) {\\n background: white;\\n}\\n.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover):not(.mat-option-disabled) {\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-badge-content {\\n color: white;\\n background: #3f51b5;\\n}\\n.cdk-high-contrast-active .mat-badge-content {\\n outline: solid 1px;\\n border-radius: 0;\\n}\\n.mat-badge-accent .mat-badge-content {\\n background: #448aff;\\n color: white;\\n}\\n.mat-badge-warn .mat-badge-content {\\n color: white;\\n background: #f44336;\\n}\\n.mat-badge {\\n position: relative;\\n}\\n.mat-badge-hidden .mat-badge-content {\\n display: none;\\n}\\n.mat-badge-disabled .mat-badge-content {\\n background: #b9b9b9;\\n color: rgba(0, 0, 0, 0.38);\\n}\\n.mat-badge-content {\\n position: absolute;\\n text-align: center;\\n display: inline-block;\\n border-radius: 50%;\\n transition: transform 200ms ease-in-out;\\n transform: scale(0.6);\\n overflow: hidden;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n pointer-events: none;\\n}\\n.ng-animate-disabled .mat-badge-content,\\n.mat-badge-content._mat-animation-noopable {\\n transition: none;\\n}\\n.mat-badge-content.mat-badge-active {\\n transform: none;\\n}\\n.mat-badge-small .mat-badge-content {\\n width: 16px;\\n height: 16px;\\n line-height: 16px;\\n}\\n.mat-badge-small.mat-badge-above .mat-badge-content {\\n top: -8px;\\n}\\n.mat-badge-small.mat-badge-below .mat-badge-content {\\n bottom: -8px;\\n}\\n.mat-badge-small.mat-badge-before .mat-badge-content {\\n left: -16px;\\n}\\n[dir=rtl] .mat-badge-small.mat-badge-before .mat-badge-content {\\n left: auto;\\n right: -16px;\\n}\\n.mat-badge-small.mat-badge-after .mat-badge-content {\\n right: -16px;\\n}\\n[dir=rtl] .mat-badge-small.mat-badge-after .mat-badge-content {\\n right: auto;\\n left: -16px;\\n}\\n.mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content {\\n left: -8px;\\n}\\n[dir=rtl] .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content {\\n left: auto;\\n right: -8px;\\n}\\n.mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content {\\n right: -8px;\\n}\\n[dir=rtl] .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content {\\n right: auto;\\n left: -8px;\\n}\\n.mat-badge-medium .mat-badge-content {\\n width: 22px;\\n height: 22px;\\n line-height: 22px;\\n}\\n.mat-badge-medium.mat-badge-above .mat-badge-content {\\n top: -11px;\\n}\\n.mat-badge-medium.mat-badge-below .mat-badge-content {\\n bottom: -11px;\\n}\\n.mat-badge-medium.mat-badge-before .mat-badge-content {\\n left: -22px;\\n}\\n[dir=rtl] .mat-badge-medium.mat-badge-before .mat-badge-content {\\n left: auto;\\n right: -22px;\\n}\\n.mat-badge-medium.mat-badge-after .mat-badge-content {\\n right: -22px;\\n}\\n[dir=rtl] .mat-badge-medium.mat-badge-after .mat-badge-content {\\n right: auto;\\n left: -22px;\\n}\\n.mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content {\\n left: -11px;\\n}\\n[dir=rtl] .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content {\\n left: auto;\\n right: -11px;\\n}\\n.mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content {\\n right: -11px;\\n}\\n[dir=rtl] .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content {\\n right: auto;\\n left: -11px;\\n}\\n.mat-badge-large .mat-badge-content {\\n width: 28px;\\n height: 28px;\\n line-height: 28px;\\n}\\n.mat-badge-large.mat-badge-above .mat-badge-content {\\n top: -14px;\\n}\\n.mat-badge-large.mat-badge-below .mat-badge-content {\\n bottom: -14px;\\n}\\n.mat-badge-large.mat-badge-before .mat-badge-content {\\n left: -28px;\\n}\\n[dir=rtl] .mat-badge-large.mat-badge-before .mat-badge-content {\\n left: auto;\\n right: -28px;\\n}\\n.mat-badge-large.mat-badge-after .mat-badge-content {\\n right: -28px;\\n}\\n[dir=rtl] .mat-badge-large.mat-badge-after .mat-badge-content {\\n right: auto;\\n left: -28px;\\n}\\n.mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content {\\n left: -14px;\\n}\\n[dir=rtl] .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content {\\n left: auto;\\n right: -14px;\\n}\\n.mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content {\\n right: -14px;\\n}\\n[dir=rtl] .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content {\\n right: auto;\\n left: -14px;\\n}\\n.mat-bottom-sheet-container {\\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\\n background: white;\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-button, .mat-icon-button, .mat-stroked-button {\\n color: inherit;\\n background: transparent;\\n}\\n.mat-button.mat-primary, .mat-icon-button.mat-primary, .mat-stroked-button.mat-primary {\\n color: #3f51b5;\\n}\\n.mat-button.mat-accent, .mat-icon-button.mat-accent, .mat-stroked-button.mat-accent {\\n color: #448aff;\\n}\\n.mat-button.mat-warn, .mat-icon-button.mat-warn, .mat-stroked-button.mat-warn {\\n color: #f44336;\\n}\\n.mat-button.mat-primary[disabled], .mat-button.mat-accent[disabled], .mat-button.mat-warn[disabled], .mat-button[disabled][disabled], .mat-icon-button.mat-primary[disabled], .mat-icon-button.mat-accent[disabled], .mat-icon-button.mat-warn[disabled], .mat-icon-button[disabled][disabled], .mat-stroked-button.mat-primary[disabled], .mat-stroked-button.mat-accent[disabled], .mat-stroked-button.mat-warn[disabled], .mat-stroked-button[disabled][disabled] {\\n color: rgba(0, 0, 0, 0.26);\\n}\\n.mat-button.mat-primary .mat-button-focus-overlay, .mat-icon-button.mat-primary .mat-button-focus-overlay, .mat-stroked-button.mat-primary .mat-button-focus-overlay {\\n background-color: #3f51b5;\\n}\\n.mat-button.mat-accent .mat-button-focus-overlay, .mat-icon-button.mat-accent .mat-button-focus-overlay, .mat-stroked-button.mat-accent .mat-button-focus-overlay {\\n background-color: #448aff;\\n}\\n.mat-button.mat-warn .mat-button-focus-overlay, .mat-icon-button.mat-warn .mat-button-focus-overlay, .mat-stroked-button.mat-warn .mat-button-focus-overlay {\\n background-color: #f44336;\\n}\\n.mat-button[disabled] .mat-button-focus-overlay, .mat-icon-button[disabled] .mat-button-focus-overlay, .mat-stroked-button[disabled] .mat-button-focus-overlay {\\n background-color: transparent;\\n}\\n.mat-button .mat-ripple-element, .mat-icon-button .mat-ripple-element, .mat-stroked-button .mat-ripple-element {\\n opacity: 0.1;\\n background-color: currentColor;\\n}\\n.mat-button-focus-overlay {\\n background: black;\\n}\\n.mat-stroked-button:not([disabled]) {\\n border-color: rgba(0, 0, 0, 0.12);\\n}\\n.mat-flat-button, .mat-raised-button, .mat-fab, .mat-mini-fab {\\n color: rgba(0, 0, 0, 0.87);\\n background-color: white;\\n}\\n.mat-flat-button.mat-primary, .mat-raised-button.mat-primary, .mat-fab.mat-primary, .mat-mini-fab.mat-primary {\\n color: white;\\n}\\n.mat-flat-button.mat-accent, .mat-raised-button.mat-accent, .mat-fab.mat-accent, .mat-mini-fab.mat-accent {\\n color: white;\\n}\\n.mat-flat-button.mat-warn, .mat-raised-button.mat-warn, .mat-fab.mat-warn, .mat-mini-fab.mat-warn {\\n color: white;\\n}\\n.mat-flat-button.mat-primary[disabled], .mat-flat-button.mat-accent[disabled], .mat-flat-button.mat-warn[disabled], .mat-flat-button[disabled][disabled], .mat-raised-button.mat-primary[disabled], .mat-raised-button.mat-accent[disabled], .mat-raised-button.mat-warn[disabled], .mat-raised-button[disabled][disabled], .mat-fab.mat-primary[disabled], .mat-fab.mat-accent[disabled], .mat-fab.mat-warn[disabled], .mat-fab[disabled][disabled], .mat-mini-fab.mat-primary[disabled], .mat-mini-fab.mat-accent[disabled], .mat-mini-fab.mat-warn[disabled], .mat-mini-fab[disabled][disabled] {\\n color: rgba(0, 0, 0, 0.26);\\n}\\n.mat-flat-button.mat-primary, .mat-raised-button.mat-primary, .mat-fab.mat-primary, .mat-mini-fab.mat-primary {\\n background-color: #3f51b5;\\n}\\n.mat-flat-button.mat-accent, .mat-raised-button.mat-accent, .mat-fab.mat-accent, .mat-mini-fab.mat-accent {\\n background-color: #448aff;\\n}\\n.mat-flat-button.mat-warn, .mat-raised-button.mat-warn, .mat-fab.mat-warn, .mat-mini-fab.mat-warn {\\n background-color: #f44336;\\n}\\n.mat-flat-button.mat-primary[disabled], .mat-flat-button.mat-accent[disabled], .mat-flat-button.mat-warn[disabled], .mat-flat-button[disabled][disabled], .mat-raised-button.mat-primary[disabled], .mat-raised-button.mat-accent[disabled], .mat-raised-button.mat-warn[disabled], .mat-raised-button[disabled][disabled], .mat-fab.mat-primary[disabled], .mat-fab.mat-accent[disabled], .mat-fab.mat-warn[disabled], .mat-fab[disabled][disabled], .mat-mini-fab.mat-primary[disabled], .mat-mini-fab.mat-accent[disabled], .mat-mini-fab.mat-warn[disabled], .mat-mini-fab[disabled][disabled] {\\n background-color: rgba(0, 0, 0, 0.12);\\n}\\n.mat-flat-button.mat-primary .mat-ripple-element, .mat-raised-button.mat-primary .mat-ripple-element, .mat-fab.mat-primary .mat-ripple-element, .mat-mini-fab.mat-primary .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.mat-flat-button.mat-accent .mat-ripple-element, .mat-raised-button.mat-accent .mat-ripple-element, .mat-fab.mat-accent .mat-ripple-element, .mat-mini-fab.mat-accent .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.mat-flat-button.mat-warn .mat-ripple-element, .mat-raised-button.mat-warn .mat-ripple-element, .mat-fab.mat-warn .mat-ripple-element, .mat-mini-fab.mat-warn .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.mat-stroked-button:not([class*=mat-elevation-z]), .mat-flat-button:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mat-raised-button:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mat-raised-button:not([disabled]):active:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);\\n}\\n.mat-raised-button[disabled]:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mat-fab:not([class*=mat-elevation-z]), .mat-mini-fab:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mat-fab:not([disabled]):active:not([class*=mat-elevation-z]), .mat-mini-fab:not([disabled]):active:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);\\n}\\n.mat-fab[disabled]:not([class*=mat-elevation-z]), .mat-mini-fab[disabled]:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mat-button-toggle-standalone,\\n.mat-button-toggle-group {\\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\\n.mat-button-toggle-group-appearance-standard {\\n box-shadow: none;\\n}\\n.mat-button-toggle {\\n color: rgba(0, 0, 0, 0.38);\\n}\\n.mat-button-toggle .mat-button-toggle-focus-overlay {\\n background-color: rgba(0, 0, 0, 0.12);\\n}\\n.mat-button-toggle-appearance-standard {\\n color: rgba(0, 0, 0, 0.87);\\n background: white;\\n}\\n.mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay {\\n background-color: black;\\n}\\n.mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\\n border-left: solid 1px rgba(0, 0, 0, 0.12);\\n}\\n[dir=rtl] .mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\\n border-left: none;\\n border-right: solid 1px rgba(0, 0, 0, 0.12);\\n}\\n.mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle + .mat-button-toggle {\\n border-left: none;\\n border-right: none;\\n border-top: solid 1px rgba(0, 0, 0, 0.12);\\n}\\n.mat-button-toggle-checked {\\n background-color: #e0e0e0;\\n color: rgba(0, 0, 0, 0.54);\\n}\\n.mat-button-toggle-checked.mat-button-toggle-appearance-standard {\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-button-toggle-disabled {\\n color: rgba(0, 0, 0, 0.26);\\n background-color: #eeeeee;\\n}\\n.mat-button-toggle-disabled.mat-button-toggle-appearance-standard {\\n background: white;\\n}\\n.mat-button-toggle-disabled.mat-button-toggle-checked {\\n background-color: #bdbdbd;\\n}\\n.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\\n.mat-button-toggle-group-appearance-standard {\\n border: solid 1px rgba(0, 0, 0, 0.12);\\n}\\n.mat-card {\\n background: white;\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-card:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mat-card.mat-card-flat:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mat-card-subtitle {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n.mat-checkbox-frame {\\n border-color: rgba(0, 0, 0, 0.54);\\n}\\n.mat-checkbox-checkmark {\\n fill: #fafafa;\\n}\\n.mat-checkbox-checkmark-path {\\n stroke: #fafafa !important;\\n}\\n.mat-checkbox-mixedmark {\\n background-color: #fafafa;\\n}\\n.mat-checkbox-indeterminate.mat-primary .mat-checkbox-background, .mat-checkbox-checked.mat-primary .mat-checkbox-background {\\n background-color: #3f51b5;\\n}\\n.mat-checkbox-indeterminate.mat-accent .mat-checkbox-background, .mat-checkbox-checked.mat-accent .mat-checkbox-background {\\n background-color: #448aff;\\n}\\n.mat-checkbox-indeterminate.mat-warn .mat-checkbox-background, .mat-checkbox-checked.mat-warn .mat-checkbox-background {\\n background-color: #f44336;\\n}\\n.mat-checkbox-disabled.mat-checkbox-checked .mat-checkbox-background, .mat-checkbox-disabled.mat-checkbox-indeterminate .mat-checkbox-background {\\n background-color: #b0b0b0;\\n}\\n.mat-checkbox-disabled:not(.mat-checkbox-checked) .mat-checkbox-frame {\\n border-color: #b0b0b0;\\n}\\n.mat-checkbox-disabled .mat-checkbox-label {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n.mat-checkbox .mat-ripple-element {\\n background-color: black;\\n}\\n.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element,\\n.mat-checkbox:active:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element {\\n background: #3f51b5;\\n}\\n.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element,\\n.mat-checkbox:active:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element {\\n background: #448aff;\\n}\\n.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element,\\n.mat-checkbox:active:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element {\\n background: #f44336;\\n}\\n.mat-chip.mat-standard-chip {\\n background-color: #e0e0e0;\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-chip.mat-standard-chip .mat-chip-remove {\\n color: rgba(0, 0, 0, 0.87);\\n opacity: 0.4;\\n}\\n.mat-chip.mat-standard-chip:not(.mat-chip-disabled):active {\\n box-shadow: 0px 3px 3px -2px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 0, 0, 0.14), 0px 1px 8px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mat-chip.mat-standard-chip:not(.mat-chip-disabled) .mat-chip-remove:hover {\\n opacity: 0.54;\\n}\\n.mat-chip.mat-standard-chip.mat-chip-disabled {\\n opacity: 0.4;\\n}\\n.mat-chip.mat-standard-chip::after {\\n background: black;\\n}\\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary {\\n background-color: #3f51b5;\\n color: white;\\n}\\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-chip-remove {\\n color: white;\\n opacity: 0.4;\\n}\\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn {\\n background-color: #f44336;\\n color: white;\\n}\\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-chip-remove {\\n color: white;\\n opacity: 0.4;\\n}\\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent {\\n background-color: #448aff;\\n color: white;\\n}\\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-chip-remove {\\n color: white;\\n opacity: 0.4;\\n}\\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.mat-table {\\n background: white;\\n}\\n.mat-table thead, .mat-table tbody, .mat-table tfoot,\\nmat-header-row, mat-row, mat-footer-row,\\n[mat-header-row], [mat-row], [mat-footer-row],\\n.mat-table-sticky {\\n background: inherit;\\n}\\nmat-row, mat-header-row, mat-footer-row,\\nth.mat-header-cell, td.mat-cell, td.mat-footer-cell {\\n border-bottom-color: rgba(0, 0, 0, 0.12);\\n}\\n.mat-header-cell {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n.mat-cell, .mat-footer-cell {\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-calendar-arrow {\\n border-top-color: rgba(0, 0, 0, 0.54);\\n}\\n.mat-datepicker-toggle,\\n.mat-datepicker-content .mat-calendar-next-button,\\n.mat-datepicker-content .mat-calendar-previous-button {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n.mat-calendar-table-header {\\n color: rgba(0, 0, 0, 0.38);\\n}\\n.mat-calendar-table-header-divider::after {\\n background: rgba(0, 0, 0, 0.12);\\n}\\n.mat-calendar-body-label {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n.mat-calendar-body-cell-content {\\n color: rgba(0, 0, 0, 0.87);\\n border-color: transparent;\\n}\\n.mat-calendar-body-disabled > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\\n color: rgba(0, 0, 0, 0.38);\\n}\\n.mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected),\\n.cdk-keyboard-focused .mat-calendar-body-active > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected),\\n.cdk-program-focused .mat-calendar-body-active > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\\n background-color: rgba(0, 0, 0, 0.04);\\n}\\n.mat-calendar-body-today:not(.mat-calendar-body-selected) {\\n border-color: rgba(0, 0, 0, 0.38);\\n}\\n.mat-calendar-body-disabled > .mat-calendar-body-today:not(.mat-calendar-body-selected) {\\n border-color: rgba(0, 0, 0, 0.18);\\n}\\n.mat-calendar-body-selected {\\n background-color: #3f51b5;\\n color: white;\\n}\\n.mat-calendar-body-disabled > .mat-calendar-body-selected {\\n background-color: rgba(63, 81, 181, 0.4);\\n}\\n.mat-calendar-body-today.mat-calendar-body-selected {\\n box-shadow: inset 0 0 0 1px white;\\n}\\n.mat-datepicker-content {\\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\\n background-color: white;\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-datepicker-content.mat-accent .mat-calendar-body-selected {\\n background-color: #448aff;\\n color: white;\\n}\\n.mat-datepicker-content.mat-accent .mat-calendar-body-disabled > .mat-calendar-body-selected {\\n background-color: rgba(68, 138, 255, 0.4);\\n}\\n.mat-datepicker-content.mat-accent .mat-calendar-body-today.mat-calendar-body-selected {\\n box-shadow: inset 0 0 0 1px white;\\n}\\n.mat-datepicker-content.mat-warn .mat-calendar-body-selected {\\n background-color: #f44336;\\n color: white;\\n}\\n.mat-datepicker-content.mat-warn .mat-calendar-body-disabled > .mat-calendar-body-selected {\\n background-color: rgba(244, 67, 54, 0.4);\\n}\\n.mat-datepicker-content.mat-warn .mat-calendar-body-today.mat-calendar-body-selected {\\n box-shadow: inset 0 0 0 1px white;\\n}\\n.mat-datepicker-content-touch {\\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mat-datepicker-toggle-active {\\n color: #3f51b5;\\n}\\n.mat-datepicker-toggle-active.mat-accent {\\n color: #448aff;\\n}\\n.mat-datepicker-toggle-active.mat-warn {\\n color: #f44336;\\n}\\n.mat-dialog-container {\\n box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12);\\n background: white;\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-divider {\\n border-top-color: rgba(0, 0, 0, 0.12);\\n}\\n.mat-divider-vertical {\\n border-right-color: rgba(0, 0, 0, 0.12);\\n}\\n.mat-expansion-panel {\\n background: white;\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-expansion-panel:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mat-action-row {\\n border-top-color: rgba(0, 0, 0, 0.12);\\n}\\n.mat-expansion-panel .mat-expansion-panel-header.cdk-keyboard-focused:not([aria-disabled=true]), .mat-expansion-panel .mat-expansion-panel-header.cdk-program-focused:not([aria-disabled=true]), .mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover:not([aria-disabled=true]) {\\n background: rgba(0, 0, 0, 0.04);\\n}\\n@media (hover: none) {\\n .mat-expansion-panel:not(.mat-expanded):not([aria-disabled=true]) .mat-expansion-panel-header:hover {\\n background: white;\\n }\\n}\\n.mat-expansion-panel-header-title {\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-expansion-panel-header-description,\\n.mat-expansion-indicator::after {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n.mat-expansion-panel-header[aria-disabled=true] {\\n color: rgba(0, 0, 0, 0.26);\\n}\\n.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title,\\n.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description {\\n color: inherit;\\n}\\n.mat-form-field-label {\\n color: rgba(0, 0, 0, 0.6);\\n}\\n.mat-hint {\\n color: rgba(0, 0, 0, 0.6);\\n}\\n.mat-form-field.mat-focused .mat-form-field-label {\\n color: #3f51b5;\\n}\\n.mat-form-field.mat-focused .mat-form-field-label.mat-accent {\\n color: #448aff;\\n}\\n.mat-form-field.mat-focused .mat-form-field-label.mat-warn {\\n color: #f44336;\\n}\\n.mat-focused .mat-form-field-required-marker {\\n color: #448aff;\\n}\\n.mat-form-field-ripple {\\n background-color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-form-field.mat-focused .mat-form-field-ripple {\\n background-color: #3f51b5;\\n}\\n.mat-form-field.mat-focused .mat-form-field-ripple.mat-accent {\\n background-color: #448aff;\\n}\\n.mat-form-field.mat-focused .mat-form-field-ripple.mat-warn {\\n background-color: #f44336;\\n}\\n.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid) .mat-form-field-infix::after {\\n color: #3f51b5;\\n}\\n.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-accent .mat-form-field-infix::after {\\n color: #448aff;\\n}\\n.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-warn .mat-form-field-infix::after {\\n color: #f44336;\\n}\\n.mat-form-field.mat-form-field-invalid .mat-form-field-label {\\n color: #f44336;\\n}\\n.mat-form-field.mat-form-field-invalid .mat-form-field-label.mat-accent,\\n.mat-form-field.mat-form-field-invalid .mat-form-field-label .mat-form-field-required-marker {\\n color: #f44336;\\n}\\n.mat-form-field.mat-form-field-invalid .mat-form-field-ripple,\\n.mat-form-field.mat-form-field-invalid .mat-form-field-ripple.mat-accent {\\n background-color: #f44336;\\n}\\n.mat-error {\\n color: #f44336;\\n}\\n.mat-form-field-appearance-legacy .mat-form-field-label {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n.mat-form-field-appearance-legacy .mat-hint {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n.mat-form-field-appearance-legacy .mat-form-field-underline {\\n background-color: rgba(0, 0, 0, 0.42);\\n}\\n.mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline {\\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.42) 0%, rgba(0, 0, 0, 0.42) 33%, transparent 0%);\\n background-size: 4px 100%;\\n background-repeat: repeat-x;\\n}\\n.mat-form-field-appearance-standard .mat-form-field-underline {\\n background-color: rgba(0, 0, 0, 0.42);\\n}\\n.mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline {\\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.42) 0%, rgba(0, 0, 0, 0.42) 33%, transparent 0%);\\n background-size: 4px 100%;\\n background-repeat: repeat-x;\\n}\\n.mat-form-field-appearance-fill .mat-form-field-flex {\\n background-color: rgba(0, 0, 0, 0.04);\\n}\\n.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-flex {\\n background-color: rgba(0, 0, 0, 0.02);\\n}\\n.mat-form-field-appearance-fill .mat-form-field-underline::before {\\n background-color: rgba(0, 0, 0, 0.42);\\n}\\n.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-label {\\n color: rgba(0, 0, 0, 0.38);\\n}\\n.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-underline::before {\\n background-color: transparent;\\n}\\n.mat-form-field-appearance-outline .mat-form-field-outline {\\n color: rgba(0, 0, 0, 0.12);\\n}\\n.mat-form-field-appearance-outline .mat-form-field-outline-thick {\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick {\\n color: #3f51b5;\\n}\\n.mat-form-field-appearance-outline.mat-focused.mat-accent .mat-form-field-outline-thick {\\n color: #448aff;\\n}\\n.mat-form-field-appearance-outline.mat-focused.mat-warn .mat-form-field-outline-thick {\\n color: #f44336;\\n}\\n.mat-form-field-appearance-outline.mat-form-field-invalid.mat-form-field-invalid .mat-form-field-outline-thick {\\n color: #f44336;\\n}\\n.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-label {\\n color: rgba(0, 0, 0, 0.38);\\n}\\n.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline {\\n color: rgba(0, 0, 0, 0.06);\\n}\\n.mat-icon.mat-primary {\\n color: #3f51b5;\\n}\\n.mat-icon.mat-accent {\\n color: #448aff;\\n}\\n.mat-icon.mat-warn {\\n color: #f44336;\\n}\\n.mat-form-field-type-mat-native-select .mat-form-field-infix::after {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n.mat-input-element:disabled,\\n.mat-form-field-type-mat-native-select.mat-form-field-disabled .mat-form-field-infix::after {\\n color: rgba(0, 0, 0, 0.38);\\n}\\n.mat-input-element {\\n caret-color: #3f51b5;\\n}\\n.mat-input-element::-moz-placeholder {\\n color: rgba(0, 0, 0, 0.42);\\n}\\n.mat-input-element::placeholder {\\n color: rgba(0, 0, 0, 0.42);\\n}\\n.mat-input-element::-moz-placeholder {\\n color: rgba(0, 0, 0, 0.42);\\n}\\n.mat-input-element::-webkit-input-placeholder {\\n color: rgba(0, 0, 0, 0.42);\\n}\\n.mat-input-element:-ms-input-placeholder {\\n color: rgba(0, 0, 0, 0.42);\\n}\\n.mat-accent .mat-input-element {\\n caret-color: #448aff;\\n}\\n.mat-warn .mat-input-element,\\n.mat-form-field-invalid .mat-input-element {\\n caret-color: #f44336;\\n}\\n.mat-form-field-type-mat-native-select.mat-form-field-invalid .mat-form-field-infix::after {\\n color: #f44336;\\n}\\n.mat-list-base .mat-list-item {\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-list-base .mat-list-option {\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-list-base .mat-subheader {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n.mat-list-item-disabled {\\n background-color: #eeeeee;\\n}\\n.mat-list-option:hover, .mat-list-option:focus,\\n.mat-nav-list .mat-list-item:hover,\\n.mat-nav-list .mat-list-item:focus,\\n.mat-action-list .mat-list-item:hover,\\n.mat-action-list .mat-list-item:focus {\\n background: rgba(0, 0, 0, 0.04);\\n}\\n.mat-list-single-selected-option, .mat-list-single-selected-option:hover, .mat-list-single-selected-option:focus {\\n background: rgba(0, 0, 0, 0.12);\\n}\\n.mat-menu-panel {\\n background: white;\\n}\\n.mat-menu-panel:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mat-menu-item {\\n background: transparent;\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-menu-item[disabled], .mat-menu-item[disabled]::after {\\n color: rgba(0, 0, 0, 0.38);\\n}\\n.mat-menu-item .mat-icon-no-color,\\n.mat-menu-item-submenu-trigger::after {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n.mat-menu-item:hover:not([disabled]),\\n.mat-menu-item.cdk-program-focused:not([disabled]),\\n.mat-menu-item.cdk-keyboard-focused:not([disabled]),\\n.mat-menu-item-highlighted:not([disabled]) {\\n background: rgba(0, 0, 0, 0.04);\\n}\\n.mat-paginator {\\n background: white;\\n}\\n.mat-paginator,\\n.mat-paginator-page-size .mat-select-trigger {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n.mat-paginator-decrement,\\n.mat-paginator-increment {\\n border-top: 2px solid rgba(0, 0, 0, 0.54);\\n border-right: 2px solid rgba(0, 0, 0, 0.54);\\n}\\n.mat-paginator-first,\\n.mat-paginator-last {\\n border-top: 2px solid rgba(0, 0, 0, 0.54);\\n}\\n.mat-icon-button[disabled] .mat-paginator-decrement,\\n.mat-icon-button[disabled] .mat-paginator-increment,\\n.mat-icon-button[disabled] .mat-paginator-first,\\n.mat-icon-button[disabled] .mat-paginator-last {\\n border-color: rgba(0, 0, 0, 0.38);\\n}\\n.mat-progress-bar-background {\\n fill: #c5cae9;\\n}\\n.mat-progress-bar-buffer {\\n background-color: #c5cae9;\\n}\\n.mat-progress-bar-fill::after {\\n background-color: #3f51b5;\\n}\\n.mat-progress-bar.mat-accent .mat-progress-bar-background {\\n fill: #82b1ff;\\n}\\n.mat-progress-bar.mat-accent .mat-progress-bar-buffer {\\n background-color: #82b1ff;\\n}\\n.mat-progress-bar.mat-accent .mat-progress-bar-fill::after {\\n background-color: #448aff;\\n}\\n.mat-progress-bar.mat-warn .mat-progress-bar-background {\\n fill: #ffcdd2;\\n}\\n.mat-progress-bar.mat-warn .mat-progress-bar-buffer {\\n background-color: #ffcdd2;\\n}\\n.mat-progress-bar.mat-warn .mat-progress-bar-fill::after {\\n background-color: #f44336;\\n}\\n.mat-progress-spinner circle, .mat-spinner circle {\\n stroke: #3f51b5;\\n}\\n.mat-progress-spinner.mat-accent circle, .mat-spinner.mat-accent circle {\\n stroke: #448aff;\\n}\\n.mat-progress-spinner.mat-warn circle, .mat-spinner.mat-warn circle {\\n stroke: #f44336;\\n}\\n.mat-radio-outer-circle {\\n border-color: rgba(0, 0, 0, 0.54);\\n}\\n.mat-radio-button.mat-primary.mat-radio-checked .mat-radio-outer-circle {\\n border-color: #3f51b5;\\n}\\n.mat-radio-button.mat-primary .mat-radio-inner-circle,\\n.mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .mat-radio-button.mat-primary.mat-radio-checked .mat-radio-persistent-ripple, .mat-radio-button.mat-primary:active .mat-radio-persistent-ripple {\\n background-color: #3f51b5;\\n}\\n.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle {\\n border-color: #448aff;\\n}\\n.mat-radio-button.mat-accent .mat-radio-inner-circle,\\n.mat-radio-button.mat-accent .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .mat-radio-button.mat-accent.mat-radio-checked .mat-radio-persistent-ripple, .mat-radio-button.mat-accent:active .mat-radio-persistent-ripple {\\n background-color: #448aff;\\n}\\n.mat-radio-button.mat-warn.mat-radio-checked .mat-radio-outer-circle {\\n border-color: #f44336;\\n}\\n.mat-radio-button.mat-warn .mat-radio-inner-circle,\\n.mat-radio-button.mat-warn .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .mat-radio-button.mat-warn.mat-radio-checked .mat-radio-persistent-ripple, .mat-radio-button.mat-warn:active .mat-radio-persistent-ripple {\\n background-color: #f44336;\\n}\\n.mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-outer-circle,\\n.mat-radio-button.mat-radio-disabled .mat-radio-outer-circle {\\n border-color: rgba(0, 0, 0, 0.38);\\n}\\n.mat-radio-button.mat-radio-disabled .mat-radio-ripple .mat-ripple-element,\\n.mat-radio-button.mat-radio-disabled .mat-radio-inner-circle {\\n background-color: rgba(0, 0, 0, 0.38);\\n}\\n.mat-radio-button.mat-radio-disabled .mat-radio-label-content {\\n color: rgba(0, 0, 0, 0.38);\\n}\\n.mat-radio-button .mat-ripple-element {\\n background-color: black;\\n}\\n.mat-select-value {\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-select-placeholder {\\n color: rgba(0, 0, 0, 0.42);\\n}\\n.mat-select-disabled .mat-select-value {\\n color: rgba(0, 0, 0, 0.38);\\n}\\n.mat-select-arrow {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n.mat-select-panel {\\n background: white;\\n}\\n.mat-select-panel:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mat-select-panel .mat-option.mat-selected:not(.mat-option-multiple) {\\n background: rgba(0, 0, 0, 0.12);\\n}\\n.mat-form-field.mat-focused.mat-primary .mat-select-arrow {\\n color: #3f51b5;\\n}\\n.mat-form-field.mat-focused.mat-accent .mat-select-arrow {\\n color: #448aff;\\n}\\n.mat-form-field.mat-focused.mat-warn .mat-select-arrow {\\n color: #f44336;\\n}\\n.mat-form-field .mat-select.mat-select-invalid .mat-select-arrow {\\n color: #f44336;\\n}\\n.mat-form-field .mat-select.mat-select-disabled .mat-select-arrow {\\n color: rgba(0, 0, 0, 0.38);\\n}\\n.mat-drawer-container {\\n background-color: #fafafa;\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-drawer {\\n background-color: white;\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-drawer.mat-drawer-push {\\n background-color: white;\\n}\\n.mat-drawer:not(.mat-drawer-side) {\\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\\n}\\n.mat-drawer-side {\\n border-right: solid 1px rgba(0, 0, 0, 0.12);\\n}\\n.mat-drawer-side.mat-drawer-end {\\n border-left: solid 1px rgba(0, 0, 0, 0.12);\\n border-right: none;\\n}\\n[dir=rtl] .mat-drawer-side {\\n border-left: solid 1px rgba(0, 0, 0, 0.12);\\n border-right: none;\\n}\\n[dir=rtl] .mat-drawer-side.mat-drawer-end {\\n border-left: none;\\n border-right: solid 1px rgba(0, 0, 0, 0.12);\\n}\\n.mat-drawer-backdrop.mat-drawer-shown {\\n background-color: rgba(0, 0, 0, 0.6);\\n}\\n.mat-slide-toggle.mat-checked .mat-slide-toggle-thumb {\\n background-color: #448aff;\\n}\\n.mat-slide-toggle.mat-checked .mat-slide-toggle-bar {\\n background-color: rgba(68, 138, 255, 0.54);\\n}\\n.mat-slide-toggle.mat-checked .mat-ripple-element {\\n background-color: #448aff;\\n}\\n.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-thumb {\\n background-color: #3f51b5;\\n}\\n.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-bar {\\n background-color: rgba(63, 81, 181, 0.54);\\n}\\n.mat-slide-toggle.mat-primary.mat-checked .mat-ripple-element {\\n background-color: #3f51b5;\\n}\\n.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-thumb {\\n background-color: #f44336;\\n}\\n.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-bar {\\n background-color: rgba(244, 67, 54, 0.54);\\n}\\n.mat-slide-toggle.mat-warn.mat-checked .mat-ripple-element {\\n background-color: #f44336;\\n}\\n.mat-slide-toggle:not(.mat-checked) .mat-ripple-element {\\n background-color: black;\\n}\\n.mat-slide-toggle-thumb {\\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\\n background-color: #fafafa;\\n}\\n.mat-slide-toggle-bar {\\n background-color: rgba(0, 0, 0, 0.38);\\n}\\n.mat-slider-track-background {\\n background-color: rgba(0, 0, 0, 0.26);\\n}\\n.mat-primary .mat-slider-track-fill,\\n.mat-primary .mat-slider-thumb,\\n.mat-primary .mat-slider-thumb-label {\\n background-color: #3f51b5;\\n}\\n.mat-primary .mat-slider-thumb-label-text {\\n color: white;\\n}\\n.mat-accent .mat-slider-track-fill,\\n.mat-accent .mat-slider-thumb,\\n.mat-accent .mat-slider-thumb-label {\\n background-color: #448aff;\\n}\\n.mat-accent .mat-slider-thumb-label-text {\\n color: white;\\n}\\n.mat-warn .mat-slider-track-fill,\\n.mat-warn .mat-slider-thumb,\\n.mat-warn .mat-slider-thumb-label {\\n background-color: #f44336;\\n}\\n.mat-warn .mat-slider-thumb-label-text {\\n color: white;\\n}\\n.mat-slider-focus-ring {\\n background-color: rgba(68, 138, 255, 0.2);\\n}\\n.mat-slider:hover .mat-slider-track-background,\\n.cdk-focused .mat-slider-track-background {\\n background-color: rgba(0, 0, 0, 0.38);\\n}\\n.mat-slider-disabled .mat-slider-track-background,\\n.mat-slider-disabled .mat-slider-track-fill,\\n.mat-slider-disabled .mat-slider-thumb {\\n background-color: rgba(0, 0, 0, 0.26);\\n}\\n.mat-slider-disabled:hover .mat-slider-track-background {\\n background-color: rgba(0, 0, 0, 0.26);\\n}\\n.mat-slider-min-value .mat-slider-focus-ring {\\n background-color: rgba(0, 0, 0, 0.12);\\n}\\n.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb,\\n.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb-label {\\n background-color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb,\\n.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb-label {\\n background-color: rgba(0, 0, 0, 0.26);\\n}\\n.mat-slider-min-value:not(.mat-slider-thumb-label-showing) .mat-slider-thumb {\\n border-color: rgba(0, 0, 0, 0.26);\\n background-color: transparent;\\n}\\n.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover .mat-slider-thumb, .mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused .mat-slider-thumb {\\n border-color: rgba(0, 0, 0, 0.38);\\n}\\n.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover.mat-slider-disabled .mat-slider-thumb, .mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused.mat-slider-disabled .mat-slider-thumb {\\n border-color: rgba(0, 0, 0, 0.26);\\n}\\n.mat-slider-has-ticks .mat-slider-wrapper::after {\\n border-color: rgba(0, 0, 0, 0.7);\\n}\\n.mat-slider-horizontal .mat-slider-ticks {\\n background-image: repeating-linear-gradient(to right, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent);\\n background-image: -moz-repeating-linear-gradient(0.0001deg, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent);\\n}\\n.mat-slider-vertical .mat-slider-ticks {\\n background-image: repeating-linear-gradient(to bottom, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent);\\n}\\n.mat-step-header.cdk-keyboard-focused, .mat-step-header.cdk-program-focused, .mat-step-header:hover {\\n background-color: rgba(0, 0, 0, 0.04);\\n}\\n@media (hover: none) {\\n .mat-step-header:hover {\\n background: none;\\n }\\n}\\n.mat-step-header .mat-step-label,\\n.mat-step-header .mat-step-optional {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n.mat-step-header .mat-step-icon {\\n background-color: rgba(0, 0, 0, 0.54);\\n color: white;\\n}\\n.mat-step-header .mat-step-icon-selected,\\n.mat-step-header .mat-step-icon-state-done,\\n.mat-step-header .mat-step-icon-state-edit {\\n background-color: #3f51b5;\\n color: white;\\n}\\n.mat-step-header .mat-step-icon-state-error {\\n background-color: transparent;\\n color: #f44336;\\n}\\n.mat-step-header .mat-step-label.mat-step-label-active {\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-step-header .mat-step-label.mat-step-label-error {\\n color: #f44336;\\n}\\n.mat-stepper-horizontal, .mat-stepper-vertical {\\n background-color: white;\\n}\\n.mat-stepper-vertical-line::before {\\n border-left-color: rgba(0, 0, 0, 0.12);\\n}\\n.mat-horizontal-stepper-header::before,\\n.mat-horizontal-stepper-header::after,\\n.mat-stepper-horizontal-line {\\n border-top-color: rgba(0, 0, 0, 0.12);\\n}\\n.mat-sort-header-arrow {\\n color: #757575;\\n}\\n.mat-tab-nav-bar,\\n.mat-tab-header {\\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\\n}\\n.mat-tab-group-inverted-header .mat-tab-nav-bar,\\n.mat-tab-group-inverted-header .mat-tab-header {\\n border-top: 1px solid rgba(0, 0, 0, 0.12);\\n border-bottom: none;\\n}\\n.mat-tab-label, .mat-tab-link {\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-tab-label.mat-tab-disabled, .mat-tab-link.mat-tab-disabled {\\n color: rgba(0, 0, 0, 0.38);\\n}\\n.mat-tab-header-pagination-chevron {\\n border-color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\\n border-color: rgba(0, 0, 0, 0.38);\\n}\\n.mat-tab-group[class*=mat-background-] .mat-tab-header,\\n.mat-tab-nav-bar[class*=mat-background-] {\\n border-bottom: none;\\n border-top: none;\\n}\\n.mat-tab-group.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.mat-tab-group.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.mat-tab-group.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\\n background-color: rgba(197, 202, 233, 0.3);\\n}\\n.mat-tab-group.mat-primary .mat-ink-bar, .mat-tab-nav-bar.mat-primary .mat-ink-bar {\\n background-color: #3f51b5;\\n}\\n.mat-tab-group.mat-primary.mat-background-primary .mat-ink-bar, .mat-tab-nav-bar.mat-primary.mat-background-primary .mat-ink-bar {\\n background-color: white;\\n}\\n.mat-tab-group.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.mat-tab-group.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.mat-tab-group.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\\n background-color: rgba(130, 177, 255, 0.3);\\n}\\n.mat-tab-group.mat-accent .mat-ink-bar, .mat-tab-nav-bar.mat-accent .mat-ink-bar {\\n background-color: #448aff;\\n}\\n.mat-tab-group.mat-accent.mat-background-accent .mat-ink-bar, .mat-tab-nav-bar.mat-accent.mat-background-accent .mat-ink-bar {\\n background-color: white;\\n}\\n.mat-tab-group.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.mat-tab-group.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.mat-tab-group.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\\n background-color: rgba(255, 205, 210, 0.3);\\n}\\n.mat-tab-group.mat-warn .mat-ink-bar, .mat-tab-nav-bar.mat-warn .mat-ink-bar {\\n background-color: #f44336;\\n}\\n.mat-tab-group.mat-warn.mat-background-warn .mat-ink-bar, .mat-tab-nav-bar.mat-warn.mat-background-warn .mat-ink-bar {\\n background-color: white;\\n}\\n.mat-tab-group.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.mat-tab-group.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.mat-tab-group.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\\n background-color: rgba(197, 202, 233, 0.3);\\n}\\n.mat-tab-group.mat-background-primary .mat-tab-header, .mat-tab-group.mat-background-primary .mat-tab-links, .mat-tab-group.mat-background-primary .mat-tab-header-pagination, .mat-tab-nav-bar.mat-background-primary .mat-tab-header, .mat-tab-nav-bar.mat-background-primary .mat-tab-links, .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination {\\n background-color: #3f51b5;\\n}\\n.mat-tab-group.mat-background-primary .mat-tab-label, .mat-tab-group.mat-background-primary .mat-tab-link, .mat-tab-nav-bar.mat-background-primary .mat-tab-label, .mat-tab-nav-bar.mat-background-primary .mat-tab-link {\\n color: white;\\n}\\n.mat-tab-group.mat-background-primary .mat-tab-label.mat-tab-disabled, .mat-tab-group.mat-background-primary .mat-tab-link.mat-tab-disabled, .mat-tab-nav-bar.mat-background-primary .mat-tab-label.mat-tab-disabled, .mat-tab-nav-bar.mat-background-primary .mat-tab-link.mat-tab-disabled {\\n color: rgba(255, 255, 255, 0.4);\\n}\\n.mat-tab-group.mat-background-primary .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-chevron {\\n border-color: white;\\n}\\n.mat-tab-group.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\\n border-color: rgba(255, 255, 255, 0.4);\\n}\\n.mat-tab-group.mat-background-primary .mat-ripple-element, .mat-tab-nav-bar.mat-background-primary .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.12);\\n}\\n.mat-tab-group.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.mat-tab-group.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.mat-tab-group.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\\n background-color: rgba(130, 177, 255, 0.3);\\n}\\n.mat-tab-group.mat-background-accent .mat-tab-header, .mat-tab-group.mat-background-accent .mat-tab-links, .mat-tab-group.mat-background-accent .mat-tab-header-pagination, .mat-tab-nav-bar.mat-background-accent .mat-tab-header, .mat-tab-nav-bar.mat-background-accent .mat-tab-links, .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination {\\n background-color: #448aff;\\n}\\n.mat-tab-group.mat-background-accent .mat-tab-label, .mat-tab-group.mat-background-accent .mat-tab-link, .mat-tab-nav-bar.mat-background-accent .mat-tab-label, .mat-tab-nav-bar.mat-background-accent .mat-tab-link {\\n color: white;\\n}\\n.mat-tab-group.mat-background-accent .mat-tab-label.mat-tab-disabled, .mat-tab-group.mat-background-accent .mat-tab-link.mat-tab-disabled, .mat-tab-nav-bar.mat-background-accent .mat-tab-label.mat-tab-disabled, .mat-tab-nav-bar.mat-background-accent .mat-tab-link.mat-tab-disabled {\\n color: rgba(255, 255, 255, 0.4);\\n}\\n.mat-tab-group.mat-background-accent .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-chevron {\\n border-color: white;\\n}\\n.mat-tab-group.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\\n border-color: rgba(255, 255, 255, 0.4);\\n}\\n.mat-tab-group.mat-background-accent .mat-ripple-element, .mat-tab-nav-bar.mat-background-accent .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.12);\\n}\\n.mat-tab-group.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.mat-tab-group.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.mat-tab-group.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\\n background-color: rgba(255, 205, 210, 0.3);\\n}\\n.mat-tab-group.mat-background-warn .mat-tab-header, .mat-tab-group.mat-background-warn .mat-tab-links, .mat-tab-group.mat-background-warn .mat-tab-header-pagination, .mat-tab-nav-bar.mat-background-warn .mat-tab-header, .mat-tab-nav-bar.mat-background-warn .mat-tab-links, .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination {\\n background-color: #f44336;\\n}\\n.mat-tab-group.mat-background-warn .mat-tab-label, .mat-tab-group.mat-background-warn .mat-tab-link, .mat-tab-nav-bar.mat-background-warn .mat-tab-label, .mat-tab-nav-bar.mat-background-warn .mat-tab-link {\\n color: white;\\n}\\n.mat-tab-group.mat-background-warn .mat-tab-label.mat-tab-disabled, .mat-tab-group.mat-background-warn .mat-tab-link.mat-tab-disabled, .mat-tab-nav-bar.mat-background-warn .mat-tab-label.mat-tab-disabled, .mat-tab-nav-bar.mat-background-warn .mat-tab-link.mat-tab-disabled {\\n color: rgba(255, 255, 255, 0.4);\\n}\\n.mat-tab-group.mat-background-warn .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-chevron {\\n border-color: white;\\n}\\n.mat-tab-group.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\\n border-color: rgba(255, 255, 255, 0.4);\\n}\\n.mat-tab-group.mat-background-warn .mat-ripple-element, .mat-tab-nav-bar.mat-background-warn .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.12);\\n}\\n.mat-toolbar {\\n background: whitesmoke;\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-toolbar.mat-primary {\\n background: #3f51b5;\\n color: white;\\n}\\n.mat-toolbar.mat-accent {\\n background: #448aff;\\n color: white;\\n}\\n.mat-toolbar.mat-warn {\\n background: #f44336;\\n color: white;\\n}\\n.mat-toolbar .mat-form-field-underline,\\n.mat-toolbar .mat-form-field-ripple,\\n.mat-toolbar .mat-focused .mat-form-field-ripple {\\n background-color: currentColor;\\n}\\n.mat-toolbar .mat-form-field-label,\\n.mat-toolbar .mat-focused .mat-form-field-label,\\n.mat-toolbar .mat-select-value,\\n.mat-toolbar .mat-select-arrow,\\n.mat-toolbar .mat-form-field.mat-focused .mat-select-arrow {\\n color: inherit;\\n}\\n.mat-toolbar .mat-input-element {\\n caret-color: currentColor;\\n}\\n.mat-tooltip {\\n background: rgba(97, 97, 97, 0.9);\\n}\\n.mat-tree {\\n background: white;\\n}\\n.mat-tree-node,\\n.mat-nested-tree-node {\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-snack-bar-container {\\n color: rgba(255, 255, 255, 0.7);\\n background: #323232;\\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mat-simple-snackbar-action {\\n color: #448aff;\\n}\\n/* You can add global styles to this file, and also import other style files */\\n.dark-mode {\\n color: white;\\n}\\n.dark-mode .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.dark-mode .mat-option {\\n color: white;\\n}\\n.dark-mode .mat-option:hover:not(.mat-option-disabled), .dark-mode .mat-option:focus:not(.mat-option-disabled) {\\n background: rgba(255, 255, 255, 0.04);\\n}\\n.dark-mode .mat-option.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled) {\\n background: rgba(255, 255, 255, 0.04);\\n}\\n.dark-mode .mat-option.mat-active {\\n background: rgba(255, 255, 255, 0.04);\\n color: white;\\n}\\n.dark-mode .mat-option.mat-option-disabled {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-primary .mat-option.mat-selected:not(.mat-option-disabled) {\\n color: #00bcd4;\\n}\\n.dark-mode .mat-accent .mat-option.mat-selected:not(.mat-option-disabled) {\\n color: #2979ff;\\n}\\n.dark-mode .mat-warn .mat-option.mat-selected:not(.mat-option-disabled) {\\n color: #f44336;\\n}\\n.dark-mode .mat-optgroup-label {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-optgroup-disabled .mat-optgroup-label {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-pseudo-checkbox {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-pseudo-checkbox::after {\\n color: #303030;\\n}\\n.dark-mode .mat-pseudo-checkbox-disabled {\\n color: #686868;\\n}\\n.dark-mode .mat-primary .mat-pseudo-checkbox-checked,\\n.dark-mode .mat-primary .mat-pseudo-checkbox-indeterminate {\\n background: #00bcd4;\\n}\\n.dark-mode .mat-pseudo-checkbox-checked,\\n.dark-mode .mat-pseudo-checkbox-indeterminate,\\n.dark-mode .mat-accent .mat-pseudo-checkbox-checked,\\n.dark-mode .mat-accent .mat-pseudo-checkbox-indeterminate {\\n background: #2979ff;\\n}\\n.dark-mode .mat-warn .mat-pseudo-checkbox-checked,\\n.dark-mode .mat-warn .mat-pseudo-checkbox-indeterminate {\\n background: #f44336;\\n}\\n.dark-mode .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,\\n.dark-mode .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled {\\n background: #686868;\\n}\\n.dark-mode .mat-elevation-z0 {\\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z1 {\\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z2 {\\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z3 {\\n box-shadow: 0px 3px 3px -2px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 0, 0, 0.14), 0px 1px 8px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z4 {\\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z5 {\\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 5px 8px 0px rgba(0, 0, 0, 0.14), 0px 1px 14px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z6 {\\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z7 {\\n box-shadow: 0px 4px 5px -2px rgba(0, 0, 0, 0.2), 0px 7px 10px 1px rgba(0, 0, 0, 0.14), 0px 2px 16px 1px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z8 {\\n box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z9 {\\n box-shadow: 0px 5px 6px -3px rgba(0, 0, 0, 0.2), 0px 9px 12px 1px rgba(0, 0, 0, 0.14), 0px 3px 16px 2px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z10 {\\n box-shadow: 0px 6px 6px -3px rgba(0, 0, 0, 0.2), 0px 10px 14px 1px rgba(0, 0, 0, 0.14), 0px 4px 18px 3px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z11 {\\n box-shadow: 0px 6px 7px -4px rgba(0, 0, 0, 0.2), 0px 11px 15px 1px rgba(0, 0, 0, 0.14), 0px 4px 20px 3px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z12 {\\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z13 {\\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 13px 19px 2px rgba(0, 0, 0, 0.14), 0px 5px 24px 4px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z14 {\\n box-shadow: 0px 7px 9px -4px rgba(0, 0, 0, 0.2), 0px 14px 21px 2px rgba(0, 0, 0, 0.14), 0px 5px 26px 4px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z15 {\\n box-shadow: 0px 8px 9px -5px rgba(0, 0, 0, 0.2), 0px 15px 22px 2px rgba(0, 0, 0, 0.14), 0px 6px 28px 5px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z16 {\\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z17 {\\n box-shadow: 0px 8px 11px -5px rgba(0, 0, 0, 0.2), 0px 17px 26px 2px rgba(0, 0, 0, 0.14), 0px 6px 32px 5px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z18 {\\n box-shadow: 0px 9px 11px -5px rgba(0, 0, 0, 0.2), 0px 18px 28px 2px rgba(0, 0, 0, 0.14), 0px 7px 34px 6px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z19 {\\n box-shadow: 0px 9px 12px -6px rgba(0, 0, 0, 0.2), 0px 19px 29px 2px rgba(0, 0, 0, 0.14), 0px 7px 36px 6px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z20 {\\n box-shadow: 0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 20px 31px 3px rgba(0, 0, 0, 0.14), 0px 8px 38px 7px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z21 {\\n box-shadow: 0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 21px 33px 3px rgba(0, 0, 0, 0.14), 0px 8px 40px 7px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z22 {\\n box-shadow: 0px 10px 14px -6px rgba(0, 0, 0, 0.2), 0px 22px 35px 3px rgba(0, 0, 0, 0.14), 0px 8px 42px 7px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z23 {\\n box-shadow: 0px 11px 14px -7px rgba(0, 0, 0, 0.2), 0px 23px 36px 3px rgba(0, 0, 0, 0.14), 0px 9px 44px 8px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z24 {\\n box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-app-background, .dark-mode.mat-app-background {\\n background-color: #303030;\\n color: white;\\n}\\n.mat-theme-loaded-marker {\\n display: none;\\n}\\n.dark-mode .mat-autocomplete-panel {\\n background: #424242;\\n color: white;\\n}\\n.dark-mode .mat-autocomplete-panel:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover) {\\n background: #424242;\\n}\\n.dark-mode .mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover):not(.mat-option-disabled) {\\n color: white;\\n}\\n.dark-mode .mat-badge-content {\\n color: white;\\n background: #00bcd4;\\n}\\n.cdk-high-contrast-active .dark-mode .mat-badge-content {\\n outline: solid 1px;\\n border-radius: 0;\\n}\\n.dark-mode .mat-badge-accent .mat-badge-content {\\n background: #2979ff;\\n color: white;\\n}\\n.dark-mode .mat-badge-warn .mat-badge-content {\\n color: white;\\n background: #f44336;\\n}\\n.dark-mode .mat-badge {\\n position: relative;\\n}\\n.dark-mode .mat-badge-hidden .mat-badge-content {\\n display: none;\\n}\\n.dark-mode .mat-badge-disabled .mat-badge-content {\\n background: #6e6e6e;\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-badge-content {\\n position: absolute;\\n text-align: center;\\n display: inline-block;\\n border-radius: 50%;\\n transition: transform 200ms ease-in-out;\\n transform: scale(0.6);\\n overflow: hidden;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n pointer-events: none;\\n}\\n.dark-mode .ng-animate-disabled .mat-badge-content,\\n.dark-mode .mat-badge-content._mat-animation-noopable {\\n transition: none;\\n}\\n.dark-mode .mat-badge-content.mat-badge-active {\\n transform: none;\\n}\\n.dark-mode .mat-badge-small .mat-badge-content {\\n width: 16px;\\n height: 16px;\\n line-height: 16px;\\n}\\n.dark-mode .mat-badge-small.mat-badge-above .mat-badge-content {\\n top: -8px;\\n}\\n.dark-mode .mat-badge-small.mat-badge-below .mat-badge-content {\\n bottom: -8px;\\n}\\n.dark-mode .mat-badge-small.mat-badge-before .mat-badge-content {\\n left: -16px;\\n}\\n[dir=rtl] .dark-mode .mat-badge-small.mat-badge-before .mat-badge-content {\\n left: auto;\\n right: -16px;\\n}\\n.dark-mode .mat-badge-small.mat-badge-after .mat-badge-content {\\n right: -16px;\\n}\\n[dir=rtl] .dark-mode .mat-badge-small.mat-badge-after .mat-badge-content {\\n right: auto;\\n left: -16px;\\n}\\n.dark-mode .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content {\\n left: -8px;\\n}\\n[dir=rtl] .dark-mode .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content {\\n left: auto;\\n right: -8px;\\n}\\n.dark-mode .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content {\\n right: -8px;\\n}\\n[dir=rtl] .dark-mode .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content {\\n right: auto;\\n left: -8px;\\n}\\n.dark-mode .mat-badge-medium .mat-badge-content {\\n width: 22px;\\n height: 22px;\\n line-height: 22px;\\n}\\n.dark-mode .mat-badge-medium.mat-badge-above .mat-badge-content {\\n top: -11px;\\n}\\n.dark-mode .mat-badge-medium.mat-badge-below .mat-badge-content {\\n bottom: -11px;\\n}\\n.dark-mode .mat-badge-medium.mat-badge-before .mat-badge-content {\\n left: -22px;\\n}\\n[dir=rtl] .dark-mode .mat-badge-medium.mat-badge-before .mat-badge-content {\\n left: auto;\\n right: -22px;\\n}\\n.dark-mode .mat-badge-medium.mat-badge-after .mat-badge-content {\\n right: -22px;\\n}\\n[dir=rtl] .dark-mode .mat-badge-medium.mat-badge-after .mat-badge-content {\\n right: auto;\\n left: -22px;\\n}\\n.dark-mode .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content {\\n left: -11px;\\n}\\n[dir=rtl] .dark-mode .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content {\\n left: auto;\\n right: -11px;\\n}\\n.dark-mode .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content {\\n right: -11px;\\n}\\n[dir=rtl] .dark-mode .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content {\\n right: auto;\\n left: -11px;\\n}\\n.dark-mode .mat-badge-large .mat-badge-content {\\n width: 28px;\\n height: 28px;\\n line-height: 28px;\\n}\\n.dark-mode .mat-badge-large.mat-badge-above .mat-badge-content {\\n top: -14px;\\n}\\n.dark-mode .mat-badge-large.mat-badge-below .mat-badge-content {\\n bottom: -14px;\\n}\\n.dark-mode .mat-badge-large.mat-badge-before .mat-badge-content {\\n left: -28px;\\n}\\n[dir=rtl] .dark-mode .mat-badge-large.mat-badge-before .mat-badge-content {\\n left: auto;\\n right: -28px;\\n}\\n.dark-mode .mat-badge-large.mat-badge-after .mat-badge-content {\\n right: -28px;\\n}\\n[dir=rtl] .dark-mode .mat-badge-large.mat-badge-after .mat-badge-content {\\n right: auto;\\n left: -28px;\\n}\\n.dark-mode .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content {\\n left: -14px;\\n}\\n[dir=rtl] .dark-mode .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content {\\n left: auto;\\n right: -14px;\\n}\\n.dark-mode .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content {\\n right: -14px;\\n}\\n[dir=rtl] .dark-mode .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content {\\n right: auto;\\n left: -14px;\\n}\\n.dark-mode .mat-bottom-sheet-container {\\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\\n background: #424242;\\n color: white;\\n}\\n.dark-mode .mat-button, .dark-mode .mat-icon-button, .dark-mode .mat-stroked-button {\\n color: inherit;\\n background: transparent;\\n}\\n.dark-mode .mat-button.mat-primary, .dark-mode .mat-icon-button.mat-primary, .dark-mode .mat-stroked-button.mat-primary {\\n color: #00bcd4;\\n}\\n.dark-mode .mat-button.mat-accent, .dark-mode .mat-icon-button.mat-accent, .dark-mode .mat-stroked-button.mat-accent {\\n color: #2979ff;\\n}\\n.dark-mode .mat-button.mat-warn, .dark-mode .mat-icon-button.mat-warn, .dark-mode .mat-stroked-button.mat-warn {\\n color: #f44336;\\n}\\n.dark-mode .mat-button.mat-primary[disabled], .dark-mode .mat-button.mat-accent[disabled], .dark-mode .mat-button.mat-warn[disabled], .dark-mode .mat-button[disabled][disabled], .dark-mode .mat-icon-button.mat-primary[disabled], .dark-mode .mat-icon-button.mat-accent[disabled], .dark-mode .mat-icon-button.mat-warn[disabled], .dark-mode .mat-icon-button[disabled][disabled], .dark-mode .mat-stroked-button.mat-primary[disabled], .dark-mode .mat-stroked-button.mat-accent[disabled], .dark-mode .mat-stroked-button.mat-warn[disabled], .dark-mode .mat-stroked-button[disabled][disabled] {\\n color: rgba(255, 255, 255, 0.3);\\n}\\n.dark-mode .mat-button.mat-primary .mat-button-focus-overlay, .dark-mode .mat-icon-button.mat-primary .mat-button-focus-overlay, .dark-mode .mat-stroked-button.mat-primary .mat-button-focus-overlay {\\n background-color: #00bcd4;\\n}\\n.dark-mode .mat-button.mat-accent .mat-button-focus-overlay, .dark-mode .mat-icon-button.mat-accent .mat-button-focus-overlay, .dark-mode .mat-stroked-button.mat-accent .mat-button-focus-overlay {\\n background-color: #2979ff;\\n}\\n.dark-mode .mat-button.mat-warn .mat-button-focus-overlay, .dark-mode .mat-icon-button.mat-warn .mat-button-focus-overlay, .dark-mode .mat-stroked-button.mat-warn .mat-button-focus-overlay {\\n background-color: #f44336;\\n}\\n.dark-mode .mat-button[disabled] .mat-button-focus-overlay, .dark-mode .mat-icon-button[disabled] .mat-button-focus-overlay, .dark-mode .mat-stroked-button[disabled] .mat-button-focus-overlay {\\n background-color: transparent;\\n}\\n.dark-mode .mat-button .mat-ripple-element, .dark-mode .mat-icon-button .mat-ripple-element, .dark-mode .mat-stroked-button .mat-ripple-element {\\n opacity: 0.1;\\n background-color: currentColor;\\n}\\n.dark-mode .mat-button-focus-overlay {\\n background: white;\\n}\\n.dark-mode .mat-stroked-button:not([disabled]) {\\n border-color: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-flat-button, .dark-mode .mat-raised-button, .dark-mode .mat-fab, .dark-mode .mat-mini-fab {\\n color: white;\\n background-color: #424242;\\n}\\n.dark-mode .mat-flat-button.mat-primary, .dark-mode .mat-raised-button.mat-primary, .dark-mode .mat-fab.mat-primary, .dark-mode .mat-mini-fab.mat-primary {\\n color: white;\\n}\\n.dark-mode .mat-flat-button.mat-accent, .dark-mode .mat-raised-button.mat-accent, .dark-mode .mat-fab.mat-accent, .dark-mode .mat-mini-fab.mat-accent {\\n color: white;\\n}\\n.dark-mode .mat-flat-button.mat-warn, .dark-mode .mat-raised-button.mat-warn, .dark-mode .mat-fab.mat-warn, .dark-mode .mat-mini-fab.mat-warn {\\n color: white;\\n}\\n.dark-mode .mat-flat-button.mat-primary[disabled], .dark-mode .mat-flat-button.mat-accent[disabled], .dark-mode .mat-flat-button.mat-warn[disabled], .dark-mode .mat-flat-button[disabled][disabled], .dark-mode .mat-raised-button.mat-primary[disabled], .dark-mode .mat-raised-button.mat-accent[disabled], .dark-mode .mat-raised-button.mat-warn[disabled], .dark-mode .mat-raised-button[disabled][disabled], .dark-mode .mat-fab.mat-primary[disabled], .dark-mode .mat-fab.mat-accent[disabled], .dark-mode .mat-fab.mat-warn[disabled], .dark-mode .mat-fab[disabled][disabled], .dark-mode .mat-mini-fab.mat-primary[disabled], .dark-mode .mat-mini-fab.mat-accent[disabled], .dark-mode .mat-mini-fab.mat-warn[disabled], .dark-mode .mat-mini-fab[disabled][disabled] {\\n color: rgba(255, 255, 255, 0.3);\\n}\\n.dark-mode .mat-flat-button.mat-primary, .dark-mode .mat-raised-button.mat-primary, .dark-mode .mat-fab.mat-primary, .dark-mode .mat-mini-fab.mat-primary {\\n background-color: #00bcd4;\\n}\\n.dark-mode .mat-flat-button.mat-accent, .dark-mode .mat-raised-button.mat-accent, .dark-mode .mat-fab.mat-accent, .dark-mode .mat-mini-fab.mat-accent {\\n background-color: #2979ff;\\n}\\n.dark-mode .mat-flat-button.mat-warn, .dark-mode .mat-raised-button.mat-warn, .dark-mode .mat-fab.mat-warn, .dark-mode .mat-mini-fab.mat-warn {\\n background-color: #f44336;\\n}\\n.dark-mode .mat-flat-button.mat-primary[disabled], .dark-mode .mat-flat-button.mat-accent[disabled], .dark-mode .mat-flat-button.mat-warn[disabled], .dark-mode .mat-flat-button[disabled][disabled], .dark-mode .mat-raised-button.mat-primary[disabled], .dark-mode .mat-raised-button.mat-accent[disabled], .dark-mode .mat-raised-button.mat-warn[disabled], .dark-mode .mat-raised-button[disabled][disabled], .dark-mode .mat-fab.mat-primary[disabled], .dark-mode .mat-fab.mat-accent[disabled], .dark-mode .mat-fab.mat-warn[disabled], .dark-mode .mat-fab[disabled][disabled], .dark-mode .mat-mini-fab.mat-primary[disabled], .dark-mode .mat-mini-fab.mat-accent[disabled], .dark-mode .mat-mini-fab.mat-warn[disabled], .dark-mode .mat-mini-fab[disabled][disabled] {\\n background-color: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-flat-button.mat-primary .mat-ripple-element, .dark-mode .mat-raised-button.mat-primary .mat-ripple-element, .dark-mode .mat-fab.mat-primary .mat-ripple-element, .dark-mode .mat-mini-fab.mat-primary .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.dark-mode .mat-flat-button.mat-accent .mat-ripple-element, .dark-mode .mat-raised-button.mat-accent .mat-ripple-element, .dark-mode .mat-fab.mat-accent .mat-ripple-element, .dark-mode .mat-mini-fab.mat-accent .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.dark-mode .mat-flat-button.mat-warn .mat-ripple-element, .dark-mode .mat-raised-button.mat-warn .mat-ripple-element, .dark-mode .mat-fab.mat-warn .mat-ripple-element, .dark-mode .mat-mini-fab.mat-warn .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.dark-mode .mat-stroked-button:not([class*=mat-elevation-z]), .dark-mode .mat-flat-button:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-raised-button:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-raised-button:not([disabled]):active:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-raised-button[disabled]:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-fab:not([class*=mat-elevation-z]), .dark-mode .mat-mini-fab:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-fab:not([disabled]):active:not([class*=mat-elevation-z]), .dark-mode .mat-mini-fab:not([disabled]):active:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-fab[disabled]:not([class*=mat-elevation-z]), .dark-mode .mat-mini-fab[disabled]:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-button-toggle-standalone,\\n.dark-mode .mat-button-toggle-group {\\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\\n.dark-mode .mat-button-toggle-group-appearance-standard {\\n box-shadow: none;\\n}\\n.dark-mode .mat-button-toggle {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-button-toggle .mat-button-toggle-focus-overlay {\\n background-color: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-button-toggle-appearance-standard {\\n color: white;\\n background: #424242;\\n}\\n.dark-mode .mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay {\\n background-color: white;\\n}\\n.dark-mode .mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\\n border-left: solid 1px rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode [dir=rtl] .mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\\n border-left: none;\\n border-right: solid 1px rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle + .mat-button-toggle {\\n border-left: none;\\n border-right: none;\\n border-top: solid 1px rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-button-toggle-checked {\\n background-color: #212121;\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-button-toggle-checked.mat-button-toggle-appearance-standard {\\n color: white;\\n}\\n.dark-mode .mat-button-toggle-disabled {\\n color: rgba(255, 255, 255, 0.3);\\n background-color: black;\\n}\\n.dark-mode .mat-button-toggle-disabled.mat-button-toggle-appearance-standard {\\n background: #424242;\\n}\\n.dark-mode .mat-button-toggle-disabled.mat-button-toggle-checked {\\n background-color: #424242;\\n}\\n.dark-mode .mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\\n.dark-mode .mat-button-toggle-group-appearance-standard {\\n border: solid 1px rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-card {\\n background: #424242;\\n color: white;\\n}\\n.dark-mode .mat-card:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-card.mat-card-flat:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-card-subtitle {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-checkbox-frame {\\n border-color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-checkbox-checkmark {\\n fill: #303030;\\n}\\n.dark-mode .mat-checkbox-checkmark-path {\\n stroke: #303030 !important;\\n}\\n.dark-mode .mat-checkbox-mixedmark {\\n background-color: #303030;\\n}\\n.dark-mode .mat-checkbox-indeterminate.mat-primary .mat-checkbox-background, .dark-mode .mat-checkbox-checked.mat-primary .mat-checkbox-background {\\n background-color: #00bcd4;\\n}\\n.dark-mode .mat-checkbox-indeterminate.mat-accent .mat-checkbox-background, .dark-mode .mat-checkbox-checked.mat-accent .mat-checkbox-background {\\n background-color: #2979ff;\\n}\\n.dark-mode .mat-checkbox-indeterminate.mat-warn .mat-checkbox-background, .dark-mode .mat-checkbox-checked.mat-warn .mat-checkbox-background {\\n background-color: #f44336;\\n}\\n.dark-mode .mat-checkbox-disabled.mat-checkbox-checked .mat-checkbox-background, .dark-mode .mat-checkbox-disabled.mat-checkbox-indeterminate .mat-checkbox-background {\\n background-color: #686868;\\n}\\n.dark-mode .mat-checkbox-disabled:not(.mat-checkbox-checked) .mat-checkbox-frame {\\n border-color: #686868;\\n}\\n.dark-mode .mat-checkbox-disabled .mat-checkbox-label {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-checkbox .mat-ripple-element {\\n background-color: white;\\n}\\n.dark-mode .mat-checkbox-checked:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element,\\n.dark-mode .mat-checkbox:active:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element {\\n background: #00bcd4;\\n}\\n.dark-mode .mat-checkbox-checked:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element,\\n.dark-mode .mat-checkbox:active:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element {\\n background: #2979ff;\\n}\\n.dark-mode .mat-checkbox-checked:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element,\\n.dark-mode .mat-checkbox:active:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element {\\n background: #f44336;\\n}\\n.dark-mode .mat-chip.mat-standard-chip {\\n background-color: #616161;\\n color: white;\\n}\\n.dark-mode .mat-chip.mat-standard-chip .mat-chip-remove {\\n color: white;\\n opacity: 0.4;\\n}\\n.dark-mode .mat-chip.mat-standard-chip:not(.mat-chip-disabled):active {\\n box-shadow: 0px 3px 3px -2px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 0, 0, 0.14), 0px 1px 8px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-chip.mat-standard-chip:not(.mat-chip-disabled) .mat-chip-remove:hover {\\n opacity: 0.54;\\n}\\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-disabled {\\n opacity: 0.4;\\n}\\n.dark-mode .mat-chip.mat-standard-chip::after {\\n background: white;\\n}\\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-primary {\\n background-color: #00bcd4;\\n color: white;\\n}\\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-chip-remove {\\n color: white;\\n opacity: 0.4;\\n}\\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-warn {\\n background-color: #f44336;\\n color: white;\\n}\\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-chip-remove {\\n color: white;\\n opacity: 0.4;\\n}\\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-accent {\\n background-color: #2979ff;\\n color: white;\\n}\\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-chip-remove {\\n color: white;\\n opacity: 0.4;\\n}\\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.dark-mode .mat-table {\\n background: #424242;\\n}\\n.dark-mode .mat-table thead, .dark-mode .mat-table tbody, .dark-mode .mat-table tfoot,\\n.dark-mode mat-header-row, .dark-mode mat-row, .dark-mode mat-footer-row,\\n.dark-mode [mat-header-row], .dark-mode [mat-row], .dark-mode [mat-footer-row],\\n.dark-mode .mat-table-sticky {\\n background: inherit;\\n}\\n.dark-mode mat-row, .dark-mode mat-header-row, .dark-mode mat-footer-row,\\n.dark-mode th.mat-header-cell, .dark-mode td.mat-cell, .dark-mode td.mat-footer-cell {\\n border-bottom-color: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-header-cell {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-cell, .dark-mode .mat-footer-cell {\\n color: white;\\n}\\n.dark-mode .mat-calendar-arrow {\\n border-top-color: white;\\n}\\n.dark-mode .mat-datepicker-toggle,\\n.dark-mode .mat-datepicker-content .mat-calendar-next-button,\\n.dark-mode .mat-datepicker-content .mat-calendar-previous-button {\\n color: white;\\n}\\n.dark-mode .mat-calendar-table-header {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-calendar-table-header-divider::after {\\n background: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-calendar-body-label {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-calendar-body-cell-content {\\n color: white;\\n border-color: transparent;\\n}\\n.dark-mode .mat-calendar-body-disabled > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected),\\n.dark-mode .cdk-keyboard-focused .mat-calendar-body-active > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected),\\n.dark-mode .cdk-program-focused .mat-calendar-body-active > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\\n background-color: rgba(255, 255, 255, 0.04);\\n}\\n.dark-mode .mat-calendar-body-today:not(.mat-calendar-body-selected) {\\n border-color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-calendar-body-disabled > .mat-calendar-body-today:not(.mat-calendar-body-selected) {\\n border-color: rgba(255, 255, 255, 0.3);\\n}\\n.dark-mode .mat-calendar-body-selected {\\n background-color: #00bcd4;\\n color: white;\\n}\\n.dark-mode .mat-calendar-body-disabled > .mat-calendar-body-selected {\\n background-color: rgba(0, 188, 212, 0.4);\\n}\\n.dark-mode .mat-calendar-body-today.mat-calendar-body-selected {\\n box-shadow: inset 0 0 0 1px white;\\n}\\n.dark-mode .mat-datepicker-content {\\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\\n background-color: #424242;\\n color: white;\\n}\\n.dark-mode .mat-datepicker-content.mat-accent .mat-calendar-body-selected {\\n background-color: #2979ff;\\n color: white;\\n}\\n.dark-mode .mat-datepicker-content.mat-accent .mat-calendar-body-disabled > .mat-calendar-body-selected {\\n background-color: rgba(41, 121, 255, 0.4);\\n}\\n.dark-mode .mat-datepicker-content.mat-accent .mat-calendar-body-today.mat-calendar-body-selected {\\n box-shadow: inset 0 0 0 1px white;\\n}\\n.dark-mode .mat-datepicker-content.mat-warn .mat-calendar-body-selected {\\n background-color: #f44336;\\n color: white;\\n}\\n.dark-mode .mat-datepicker-content.mat-warn .mat-calendar-body-disabled > .mat-calendar-body-selected {\\n background-color: rgba(244, 67, 54, 0.4);\\n}\\n.dark-mode .mat-datepicker-content.mat-warn .mat-calendar-body-today.mat-calendar-body-selected {\\n box-shadow: inset 0 0 0 1px white;\\n}\\n.dark-mode .mat-datepicker-content-touch {\\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-datepicker-toggle-active {\\n color: #00bcd4;\\n}\\n.dark-mode .mat-datepicker-toggle-active.mat-accent {\\n color: #2979ff;\\n}\\n.dark-mode .mat-datepicker-toggle-active.mat-warn {\\n color: #f44336;\\n}\\n.dark-mode .mat-dialog-container {\\n box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12);\\n background: #424242;\\n color: white;\\n}\\n.dark-mode .mat-divider {\\n border-top-color: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-divider-vertical {\\n border-right-color: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-expansion-panel {\\n background: #424242;\\n color: white;\\n}\\n.dark-mode .mat-expansion-panel:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-action-row {\\n border-top-color: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-expansion-panel .mat-expansion-panel-header.cdk-keyboard-focused:not([aria-disabled=true]), .dark-mode .mat-expansion-panel .mat-expansion-panel-header.cdk-program-focused:not([aria-disabled=true]), .dark-mode .mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover:not([aria-disabled=true]) {\\n background: rgba(255, 255, 255, 0.04);\\n}\\n@media (hover: none) {\\n .dark-mode .mat-expansion-panel:not(.mat-expanded):not([aria-disabled=true]) .mat-expansion-panel-header:hover {\\n background: #424242;\\n }\\n}\\n.dark-mode .mat-expansion-panel-header-title {\\n color: white;\\n}\\n.dark-mode .mat-expansion-panel-header-description,\\n.dark-mode .mat-expansion-indicator::after {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-expansion-panel-header[aria-disabled=true] {\\n color: rgba(255, 255, 255, 0.3);\\n}\\n.dark-mode .mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title,\\n.dark-mode .mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description {\\n color: inherit;\\n}\\n.dark-mode .mat-form-field-label {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-hint {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-form-field.mat-focused .mat-form-field-label {\\n color: #00bcd4;\\n}\\n.dark-mode .mat-form-field.mat-focused .mat-form-field-label.mat-accent {\\n color: #2979ff;\\n}\\n.dark-mode .mat-form-field.mat-focused .mat-form-field-label.mat-warn {\\n color: #f44336;\\n}\\n.dark-mode .mat-focused .mat-form-field-required-marker {\\n color: #2979ff;\\n}\\n.dark-mode .mat-form-field-ripple {\\n background-color: white;\\n}\\n.dark-mode .mat-form-field.mat-focused .mat-form-field-ripple {\\n background-color: #00bcd4;\\n}\\n.dark-mode .mat-form-field.mat-focused .mat-form-field-ripple.mat-accent {\\n background-color: #2979ff;\\n}\\n.dark-mode .mat-form-field.mat-focused .mat-form-field-ripple.mat-warn {\\n background-color: #f44336;\\n}\\n.dark-mode .mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid) .mat-form-field-infix::after {\\n color: #00bcd4;\\n}\\n.dark-mode .mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-accent .mat-form-field-infix::after {\\n color: #2979ff;\\n}\\n.dark-mode .mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-warn .mat-form-field-infix::after {\\n color: #f44336;\\n}\\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-label {\\n color: #f44336;\\n}\\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-label.mat-accent,\\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-label .mat-form-field-required-marker {\\n color: #f44336;\\n}\\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-ripple,\\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-ripple.mat-accent {\\n background-color: #f44336;\\n}\\n.dark-mode .mat-error {\\n color: #f44336;\\n}\\n.dark-mode .mat-form-field-appearance-legacy .mat-form-field-label {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-form-field-appearance-legacy .mat-hint {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-form-field-appearance-legacy .mat-form-field-underline {\\n background-color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline {\\n background-image: linear-gradient(to right, rgba(255, 255, 255, 0.7) 0%, rgba(255, 255, 255, 0.7) 33%, transparent 0%);\\n background-size: 4px 100%;\\n background-repeat: repeat-x;\\n}\\n.dark-mode .mat-form-field-appearance-standard .mat-form-field-underline {\\n background-color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline {\\n background-image: linear-gradient(to right, rgba(255, 255, 255, 0.7) 0%, rgba(255, 255, 255, 0.7) 33%, transparent 0%);\\n background-size: 4px 100%;\\n background-repeat: repeat-x;\\n}\\n.dark-mode .mat-form-field-appearance-fill .mat-form-field-flex {\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.dark-mode .mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-flex {\\n background-color: rgba(255, 255, 255, 0.05);\\n}\\n.dark-mode .mat-form-field-appearance-fill .mat-form-field-underline::before {\\n background-color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-label {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-underline::before {\\n background-color: transparent;\\n}\\n.dark-mode .mat-form-field-appearance-outline .mat-form-field-outline {\\n color: rgba(255, 255, 255, 0.3);\\n}\\n.dark-mode .mat-form-field-appearance-outline .mat-form-field-outline-thick {\\n color: white;\\n}\\n.dark-mode .mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick {\\n color: #00bcd4;\\n}\\n.dark-mode .mat-form-field-appearance-outline.mat-focused.mat-accent .mat-form-field-outline-thick {\\n color: #2979ff;\\n}\\n.dark-mode .mat-form-field-appearance-outline.mat-focused.mat-warn .mat-form-field-outline-thick {\\n color: #f44336;\\n}\\n.dark-mode .mat-form-field-appearance-outline.mat-form-field-invalid.mat-form-field-invalid .mat-form-field-outline-thick {\\n color: #f44336;\\n}\\n.dark-mode .mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-label {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline {\\n color: rgba(255, 255, 255, 0.15);\\n}\\n.dark-mode .mat-icon.mat-primary {\\n color: #00bcd4;\\n}\\n.dark-mode .mat-icon.mat-accent {\\n color: #2979ff;\\n}\\n.dark-mode .mat-icon.mat-warn {\\n color: #f44336;\\n}\\n.dark-mode .mat-form-field-type-mat-native-select .mat-form-field-infix::after {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-input-element:disabled,\\n.dark-mode .mat-form-field-type-mat-native-select.mat-form-field-disabled .mat-form-field-infix::after {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-input-element {\\n caret-color: #00bcd4;\\n}\\n.dark-mode .mat-input-element::-moz-placeholder {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-input-element::placeholder {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-input-element::-moz-placeholder {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-input-element::-webkit-input-placeholder {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-input-element:-ms-input-placeholder {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-input-element option {\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.dark-mode .mat-input-element option:disabled {\\n color: rgba(0, 0, 0, 0.38);\\n}\\n.dark-mode .mat-accent .mat-input-element {\\n caret-color: #2979ff;\\n}\\n.dark-mode .mat-warn .mat-input-element,\\n.dark-mode .mat-form-field-invalid .mat-input-element {\\n caret-color: #f44336;\\n}\\n.dark-mode .mat-form-field-type-mat-native-select.mat-form-field-invalid .mat-form-field-infix::after {\\n color: #f44336;\\n}\\n.dark-mode .mat-list-base .mat-list-item {\\n color: white;\\n}\\n.dark-mode .mat-list-base .mat-list-option {\\n color: white;\\n}\\n.dark-mode .mat-list-base .mat-subheader {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-list-item-disabled {\\n background-color: black;\\n}\\n.dark-mode .mat-list-option:hover, .dark-mode .mat-list-option:focus,\\n.dark-mode .mat-nav-list .mat-list-item:hover,\\n.dark-mode .mat-nav-list .mat-list-item:focus,\\n.dark-mode .mat-action-list .mat-list-item:hover,\\n.dark-mode .mat-action-list .mat-list-item:focus {\\n background: rgba(255, 255, 255, 0.04);\\n}\\n.dark-mode .mat-list-single-selected-option, .dark-mode .mat-list-single-selected-option:hover, .dark-mode .mat-list-single-selected-option:focus {\\n background: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-menu-panel {\\n background: #424242;\\n}\\n.dark-mode .mat-menu-panel:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-menu-item {\\n background: transparent;\\n color: white;\\n}\\n.dark-mode .mat-menu-item[disabled], .dark-mode .mat-menu-item[disabled]::after {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-menu-item .mat-icon-no-color,\\n.dark-mode .mat-menu-item-submenu-trigger::after {\\n color: white;\\n}\\n.dark-mode .mat-menu-item:hover:not([disabled]),\\n.dark-mode .mat-menu-item.cdk-program-focused:not([disabled]),\\n.dark-mode .mat-menu-item.cdk-keyboard-focused:not([disabled]),\\n.dark-mode .mat-menu-item-highlighted:not([disabled]) {\\n background: rgba(255, 255, 255, 0.04);\\n}\\n.dark-mode .mat-paginator {\\n background: #424242;\\n}\\n.dark-mode .mat-paginator,\\n.dark-mode .mat-paginator-page-size .mat-select-trigger {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-paginator-decrement,\\n.dark-mode .mat-paginator-increment {\\n border-top: 2px solid white;\\n border-right: 2px solid white;\\n}\\n.dark-mode .mat-paginator-first,\\n.dark-mode .mat-paginator-last {\\n border-top: 2px solid white;\\n}\\n.dark-mode .mat-icon-button[disabled] .mat-paginator-decrement,\\n.dark-mode .mat-icon-button[disabled] .mat-paginator-increment,\\n.dark-mode .mat-icon-button[disabled] .mat-paginator-first,\\n.dark-mode .mat-icon-button[disabled] .mat-paginator-last {\\n border-color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-progress-bar-background {\\n fill: #b2ebf2;\\n}\\n.dark-mode .mat-progress-bar-buffer {\\n background-color: #b2ebf2;\\n}\\n.dark-mode .mat-progress-bar-fill::after {\\n background-color: #00bcd4;\\n}\\n.dark-mode .mat-progress-bar.mat-accent .mat-progress-bar-background {\\n fill: #82b1ff;\\n}\\n.dark-mode .mat-progress-bar.mat-accent .mat-progress-bar-buffer {\\n background-color: #82b1ff;\\n}\\n.dark-mode .mat-progress-bar.mat-accent .mat-progress-bar-fill::after {\\n background-color: #2979ff;\\n}\\n.dark-mode .mat-progress-bar.mat-warn .mat-progress-bar-background {\\n fill: #ffcdd2;\\n}\\n.dark-mode .mat-progress-bar.mat-warn .mat-progress-bar-buffer {\\n background-color: #ffcdd2;\\n}\\n.dark-mode .mat-progress-bar.mat-warn .mat-progress-bar-fill::after {\\n background-color: #f44336;\\n}\\n.dark-mode .mat-progress-spinner circle, .dark-mode .mat-spinner circle {\\n stroke: #00bcd4;\\n}\\n.dark-mode .mat-progress-spinner.mat-accent circle, .dark-mode .mat-spinner.mat-accent circle {\\n stroke: #2979ff;\\n}\\n.dark-mode .mat-progress-spinner.mat-warn circle, .dark-mode .mat-spinner.mat-warn circle {\\n stroke: #f44336;\\n}\\n.dark-mode .mat-radio-outer-circle {\\n border-color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-radio-button.mat-primary.mat-radio-checked .mat-radio-outer-circle {\\n border-color: #00bcd4;\\n}\\n.dark-mode .mat-radio-button.mat-primary .mat-radio-inner-circle,\\n.dark-mode .mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .dark-mode .mat-radio-button.mat-primary.mat-radio-checked .mat-radio-persistent-ripple, .dark-mode .mat-radio-button.mat-primary:active .mat-radio-persistent-ripple {\\n background-color: #00bcd4;\\n}\\n.dark-mode .mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle {\\n border-color: #2979ff;\\n}\\n.dark-mode .mat-radio-button.mat-accent .mat-radio-inner-circle,\\n.dark-mode .mat-radio-button.mat-accent .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .dark-mode .mat-radio-button.mat-accent.mat-radio-checked .mat-radio-persistent-ripple, .dark-mode .mat-radio-button.mat-accent:active .mat-radio-persistent-ripple {\\n background-color: #2979ff;\\n}\\n.dark-mode .mat-radio-button.mat-warn.mat-radio-checked .mat-radio-outer-circle {\\n border-color: #f44336;\\n}\\n.dark-mode .mat-radio-button.mat-warn .mat-radio-inner-circle,\\n.dark-mode .mat-radio-button.mat-warn .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .dark-mode .mat-radio-button.mat-warn.mat-radio-checked .mat-radio-persistent-ripple, .dark-mode .mat-radio-button.mat-warn:active .mat-radio-persistent-ripple {\\n background-color: #f44336;\\n}\\n.dark-mode .mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-outer-circle,\\n.dark-mode .mat-radio-button.mat-radio-disabled .mat-radio-outer-circle {\\n border-color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-radio-button.mat-radio-disabled .mat-radio-ripple .mat-ripple-element,\\n.dark-mode .mat-radio-button.mat-radio-disabled .mat-radio-inner-circle {\\n background-color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-radio-button.mat-radio-disabled .mat-radio-label-content {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-radio-button .mat-ripple-element {\\n background-color: white;\\n}\\n.dark-mode .mat-select-value {\\n color: white;\\n}\\n.dark-mode .mat-select-placeholder {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-select-disabled .mat-select-value {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-select-arrow {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-select-panel {\\n background: #424242;\\n}\\n.dark-mode .mat-select-panel:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-select-panel .mat-option.mat-selected:not(.mat-option-multiple) {\\n background: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-form-field.mat-focused.mat-primary .mat-select-arrow {\\n color: #00bcd4;\\n}\\n.dark-mode .mat-form-field.mat-focused.mat-accent .mat-select-arrow {\\n color: #2979ff;\\n}\\n.dark-mode .mat-form-field.mat-focused.mat-warn .mat-select-arrow {\\n color: #f44336;\\n}\\n.dark-mode .mat-form-field .mat-select.mat-select-invalid .mat-select-arrow {\\n color: #f44336;\\n}\\n.dark-mode .mat-form-field .mat-select.mat-select-disabled .mat-select-arrow {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-drawer-container {\\n background-color: #303030;\\n color: white;\\n}\\n.dark-mode .mat-drawer {\\n background-color: #424242;\\n color: white;\\n}\\n.dark-mode .mat-drawer.mat-drawer-push {\\n background-color: #424242;\\n}\\n.dark-mode .mat-drawer:not(.mat-drawer-side) {\\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-drawer-side {\\n border-right: solid 1px rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-drawer-side.mat-drawer-end {\\n border-left: solid 1px rgba(255, 255, 255, 0.12);\\n border-right: none;\\n}\\n.dark-mode [dir=rtl] .mat-drawer-side {\\n border-left: solid 1px rgba(255, 255, 255, 0.12);\\n border-right: none;\\n}\\n.dark-mode [dir=rtl] .mat-drawer-side.mat-drawer-end {\\n border-left: none;\\n border-right: solid 1px rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-drawer-backdrop.mat-drawer-shown {\\n background-color: rgba(189, 189, 189, 0.6);\\n}\\n.dark-mode .mat-slide-toggle.mat-checked .mat-slide-toggle-thumb {\\n background-color: #2979ff;\\n}\\n.dark-mode .mat-slide-toggle.mat-checked .mat-slide-toggle-bar {\\n background-color: rgba(41, 121, 255, 0.54);\\n}\\n.dark-mode .mat-slide-toggle.mat-checked .mat-ripple-element {\\n background-color: #2979ff;\\n}\\n.dark-mode .mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-thumb {\\n background-color: #00bcd4;\\n}\\n.dark-mode .mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-bar {\\n background-color: rgba(0, 188, 212, 0.54);\\n}\\n.dark-mode .mat-slide-toggle.mat-primary.mat-checked .mat-ripple-element {\\n background-color: #00bcd4;\\n}\\n.dark-mode .mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-thumb {\\n background-color: #f44336;\\n}\\n.dark-mode .mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-bar {\\n background-color: rgba(244, 67, 54, 0.54);\\n}\\n.dark-mode .mat-slide-toggle.mat-warn.mat-checked .mat-ripple-element {\\n background-color: #f44336;\\n}\\n.dark-mode .mat-slide-toggle:not(.mat-checked) .mat-ripple-element {\\n background-color: white;\\n}\\n.dark-mode .mat-slide-toggle-thumb {\\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\\n background-color: #bdbdbd;\\n}\\n.dark-mode .mat-slide-toggle-bar {\\n background-color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-slider-track-background {\\n background-color: rgba(255, 255, 255, 0.3);\\n}\\n.dark-mode .mat-primary .mat-slider-track-fill,\\n.dark-mode .mat-primary .mat-slider-thumb,\\n.dark-mode .mat-primary .mat-slider-thumb-label {\\n background-color: #00bcd4;\\n}\\n.dark-mode .mat-primary .mat-slider-thumb-label-text {\\n color: white;\\n}\\n.dark-mode .mat-accent .mat-slider-track-fill,\\n.dark-mode .mat-accent .mat-slider-thumb,\\n.dark-mode .mat-accent .mat-slider-thumb-label {\\n background-color: #2979ff;\\n}\\n.dark-mode .mat-accent .mat-slider-thumb-label-text {\\n color: white;\\n}\\n.dark-mode .mat-warn .mat-slider-track-fill,\\n.dark-mode .mat-warn .mat-slider-thumb,\\n.dark-mode .mat-warn .mat-slider-thumb-label {\\n background-color: #f44336;\\n}\\n.dark-mode .mat-warn .mat-slider-thumb-label-text {\\n color: white;\\n}\\n.dark-mode .mat-slider-focus-ring {\\n background-color: rgba(41, 121, 255, 0.2);\\n}\\n.dark-mode .mat-slider:hover .mat-slider-track-background,\\n.dark-mode .cdk-focused .mat-slider-track-background {\\n background-color: rgba(255, 255, 255, 0.3);\\n}\\n.dark-mode .mat-slider-disabled .mat-slider-track-background,\\n.dark-mode .mat-slider-disabled .mat-slider-track-fill,\\n.dark-mode .mat-slider-disabled .mat-slider-thumb {\\n background-color: rgba(255, 255, 255, 0.3);\\n}\\n.dark-mode .mat-slider-disabled:hover .mat-slider-track-background {\\n background-color: rgba(255, 255, 255, 0.3);\\n}\\n.dark-mode .mat-slider-min-value .mat-slider-focus-ring {\\n background-color: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb,\\n.dark-mode .mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb-label {\\n background-color: white;\\n}\\n.dark-mode .mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb,\\n.dark-mode .mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb-label {\\n background-color: rgba(255, 255, 255, 0.3);\\n}\\n.dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing) .mat-slider-thumb {\\n border-color: rgba(255, 255, 255, 0.3);\\n background-color: transparent;\\n}\\n.dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover .mat-slider-thumb, .dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused .mat-slider-thumb {\\n border-color: rgba(255, 255, 255, 0.3);\\n}\\n.dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover.mat-slider-disabled .mat-slider-thumb, .dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused.mat-slider-disabled .mat-slider-thumb {\\n border-color: rgba(255, 255, 255, 0.3);\\n}\\n.dark-mode .mat-slider-has-ticks .mat-slider-wrapper::after {\\n border-color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-slider-horizontal .mat-slider-ticks {\\n background-image: repeating-linear-gradient(to right, rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0.7) 2px, transparent 0, transparent);\\n background-image: -moz-repeating-linear-gradient(0.0001deg, rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0.7) 2px, transparent 0, transparent);\\n}\\n.dark-mode .mat-slider-vertical .mat-slider-ticks {\\n background-image: repeating-linear-gradient(to bottom, rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0.7) 2px, transparent 0, transparent);\\n}\\n.dark-mode .mat-step-header.cdk-keyboard-focused, .dark-mode .mat-step-header.cdk-program-focused, .dark-mode .mat-step-header:hover {\\n background-color: rgba(255, 255, 255, 0.04);\\n}\\n@media (hover: none) {\\n .dark-mode .mat-step-header:hover {\\n background: none;\\n }\\n}\\n.dark-mode .mat-step-header .mat-step-label,\\n.dark-mode .mat-step-header .mat-step-optional {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-step-header .mat-step-icon {\\n background-color: rgba(255, 255, 255, 0.7);\\n color: white;\\n}\\n.dark-mode .mat-step-header .mat-step-icon-selected,\\n.dark-mode .mat-step-header .mat-step-icon-state-done,\\n.dark-mode .mat-step-header .mat-step-icon-state-edit {\\n background-color: #00bcd4;\\n color: white;\\n}\\n.dark-mode .mat-step-header .mat-step-icon-state-error {\\n background-color: transparent;\\n color: #f44336;\\n}\\n.dark-mode .mat-step-header .mat-step-label.mat-step-label-active {\\n color: white;\\n}\\n.dark-mode .mat-step-header .mat-step-label.mat-step-label-error {\\n color: #f44336;\\n}\\n.dark-mode .mat-stepper-horizontal, .dark-mode .mat-stepper-vertical {\\n background-color: #424242;\\n}\\n.dark-mode .mat-stepper-vertical-line::before {\\n border-left-color: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-horizontal-stepper-header::before,\\n.dark-mode .mat-horizontal-stepper-header::after,\\n.dark-mode .mat-stepper-horizontal-line {\\n border-top-color: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-sort-header-arrow {\\n color: #c6c6c6;\\n}\\n.dark-mode .mat-tab-nav-bar,\\n.dark-mode .mat-tab-header {\\n border-bottom: 1px solid rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-tab-group-inverted-header .mat-tab-nav-bar,\\n.dark-mode .mat-tab-group-inverted-header .mat-tab-header {\\n border-top: 1px solid rgba(255, 255, 255, 0.12);\\n border-bottom: none;\\n}\\n.dark-mode .mat-tab-label, .dark-mode .mat-tab-link {\\n color: white;\\n}\\n.dark-mode .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-link.mat-tab-disabled {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-tab-header-pagination-chevron {\\n border-color: white;\\n}\\n.dark-mode .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\\n border-color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-tab-group[class*=mat-background-] .mat-tab-header,\\n.dark-mode .mat-tab-nav-bar[class*=mat-background-] {\\n border-bottom: none;\\n border-top: none;\\n}\\n.dark-mode .mat-tab-group.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-group.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-group.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\\n background-color: rgba(178, 235, 242, 0.3);\\n}\\n.dark-mode .mat-tab-group.mat-primary .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-primary .mat-ink-bar {\\n background-color: #00bcd4;\\n}\\n.dark-mode .mat-tab-group.mat-primary.mat-background-primary .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-primary.mat-background-primary .mat-ink-bar {\\n background-color: white;\\n}\\n.dark-mode .mat-tab-group.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-group.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-group.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\\n background-color: rgba(130, 177, 255, 0.3);\\n}\\n.dark-mode .mat-tab-group.mat-accent .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-accent .mat-ink-bar {\\n background-color: #2979ff;\\n}\\n.dark-mode .mat-tab-group.mat-accent.mat-background-accent .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-accent.mat-background-accent .mat-ink-bar {\\n background-color: white;\\n}\\n.dark-mode .mat-tab-group.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-group.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-group.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\\n background-color: rgba(255, 205, 210, 0.3);\\n}\\n.dark-mode .mat-tab-group.mat-warn .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-warn .mat-ink-bar {\\n background-color: #f44336;\\n}\\n.dark-mode .mat-tab-group.mat-warn.mat-background-warn .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-warn.mat-background-warn .mat-ink-bar {\\n background-color: white;\\n}\\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\\n background-color: rgba(178, 235, 242, 0.3);\\n}\\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-header, .dark-mode .mat-tab-group.mat-background-primary .mat-tab-links, .dark-mode .mat-tab-group.mat-background-primary .mat-tab-header-pagination, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-header, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-links, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination {\\n background-color: #00bcd4;\\n}\\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-label, .dark-mode .mat-tab-group.mat-background-primary .mat-tab-link, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-label, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-link {\\n color: white;\\n}\\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-group.mat-background-primary .mat-tab-link.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-link.mat-tab-disabled {\\n color: rgba(255, 255, 255, 0.4);\\n}\\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-chevron {\\n border-color: white;\\n}\\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\\n border-color: rgba(255, 255, 255, 0.4);\\n}\\n.dark-mode .mat-tab-group.mat-background-primary .mat-ripple-element, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\\n background-color: rgba(130, 177, 255, 0.3);\\n}\\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-header, .dark-mode .mat-tab-group.mat-background-accent .mat-tab-links, .dark-mode .mat-tab-group.mat-background-accent .mat-tab-header-pagination, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-header, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-links, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination {\\n background-color: #2979ff;\\n}\\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-label, .dark-mode .mat-tab-group.mat-background-accent .mat-tab-link, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-label, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-link {\\n color: white;\\n}\\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-group.mat-background-accent .mat-tab-link.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-link.mat-tab-disabled {\\n color: rgba(255, 255, 255, 0.4);\\n}\\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-chevron {\\n border-color: white;\\n}\\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\\n border-color: rgba(255, 255, 255, 0.4);\\n}\\n.dark-mode .mat-tab-group.mat-background-accent .mat-ripple-element, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\\n background-color: rgba(255, 205, 210, 0.3);\\n}\\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-header, .dark-mode .mat-tab-group.mat-background-warn .mat-tab-links, .dark-mode .mat-tab-group.mat-background-warn .mat-tab-header-pagination, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-header, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-links, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination {\\n background-color: #f44336;\\n}\\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-label, .dark-mode .mat-tab-group.mat-background-warn .mat-tab-link, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-label, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-link {\\n color: white;\\n}\\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-group.mat-background-warn .mat-tab-link.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-link.mat-tab-disabled {\\n color: rgba(255, 255, 255, 0.4);\\n}\\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-chevron {\\n border-color: white;\\n}\\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\\n border-color: rgba(255, 255, 255, 0.4);\\n}\\n.dark-mode .mat-tab-group.mat-background-warn .mat-ripple-element, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-toolbar {\\n background: #212121;\\n color: white;\\n}\\n.dark-mode .mat-toolbar.mat-primary {\\n background: #00bcd4;\\n color: white;\\n}\\n.dark-mode .mat-toolbar.mat-accent {\\n background: #2979ff;\\n color: white;\\n}\\n.dark-mode .mat-toolbar.mat-warn {\\n background: #f44336;\\n color: white;\\n}\\n.dark-mode .mat-toolbar .mat-form-field-underline,\\n.dark-mode .mat-toolbar .mat-form-field-ripple,\\n.dark-mode .mat-toolbar .mat-focused .mat-form-field-ripple {\\n background-color: currentColor;\\n}\\n.dark-mode .mat-toolbar .mat-form-field-label,\\n.dark-mode .mat-toolbar .mat-focused .mat-form-field-label,\\n.dark-mode .mat-toolbar .mat-select-value,\\n.dark-mode .mat-toolbar .mat-select-arrow,\\n.dark-mode .mat-toolbar .mat-form-field.mat-focused .mat-select-arrow {\\n color: inherit;\\n}\\n.dark-mode .mat-toolbar .mat-input-element {\\n caret-color: currentColor;\\n}\\n.dark-mode .mat-tooltip {\\n background: rgba(97, 97, 97, 0.9);\\n}\\n.dark-mode .mat-tree {\\n background: #424242;\\n}\\n.dark-mode .mat-tree-node,\\n.dark-mode .mat-nested-tree-node {\\n color: white;\\n}\\n.dark-mode .mat-snack-bar-container {\\n color: rgba(0, 0, 0, 0.87);\\n background: #fafafa;\\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-simple-snackbar-action {\\n color: inherit;\\n}\\n.mat-stroked-button.mat-black {\\n border: solid black 1px;\\n border-radius: 0;\\n display: flex;\\n align-items: center;\\n height: 2em;\\n padding-left: 2.5em;\\n padding-right: 2.5em;\\n}\\n.mat-stroked-button.mat-black .mat-button-wrapper {\\n font-weight: normal;\\n font-family: \\\"McKinsey Sans\\\", \\\"Helvetica Neue\\\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\\n color: black;\\n}\\n.mat-stroked-button.mat-coachmark {\\n border: solid #6f4d00 1px;\\n border-radius: 0;\\n display: flex;\\n align-items: center;\\n height: 2em;\\n padding-left: 2.5em;\\n padding-right: 2.5em;\\n}\\n.mat-stroked-button.mat-coachmark .mat-button-wrapper {\\n font-weight: normal;\\n font-family: \\\"McKinsey Sans\\\", \\\"Helvetica Neue\\\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\\n color: #6f4d00;\\n}\\n.mat-stroked-button.mat-blue-coachmark {\\n border: solid #1B1B19 1px;\\n border-radius: 0;\\n display: flex;\\n align-items: center;\\n height: 2em;\\n padding-left: 2.5em;\\n padding-right: 2.5em;\\n}\\n.mat-stroked-button.mat-blue-coachmark .mat-button-wrapper {\\n font-weight: normal;\\n font-family: \\\"McKinsey Sans\\\", \\\"Helvetica Neue\\\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\\n color: #1B1B19;\\n}\\nhtml,\\nbody {\\n height: 100%;\\n width: 100%;\\n}\\nbody {\\n background-color: #fff;\\n}\\n.app,\\nbody {\\n font-family: \\\"Helvetica Neue\\\", \\\"Helvetica\\\", Arial, sans-serif;\\n font-weight: 300;\\n}\\n.app {\\n position: absolute;\\n}\\nhtml,\\nbody {\\n margin: 0;\\n padding: 0;\\n font-size: 16px;\\n}\\n.app {\\n top: 0;\\n left: 0;\\n bottom: 0;\\n right: 0;\\n}\\n* {\\n font-family: \\\"Helvetica Neue\\\", \\\"Helvetica\\\", Arial, sans-serif;\\n box-sizing: border-box;\\n}\\n.center {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n transform: translate(-50%, -50%);\\n margin: auto;\\n}\\n.loading {\\n display: inline-block;\\n padding: 1.5em;\\n border-radius: 1em;\\n color: #000;\\n font-size: 10mm;\\n text-align: center;\\n}\\n.bounce,\\n.bounce .circle,\\n.bounce .circle .inner {\\n height: 4em;\\n width: 4em;\\n border-radius: 100%;\\n}\\n.bounce .circle {\\n -webkit-animation: sk-scaleout 0.8s infinite ease-in-out;\\n animation: sk-scaleout 0.8s infinite ease-in-out;\\n}\\n.bounce .circle .inner {\\n background-color: #000;\\n}\\n@-webkit-keyframes sk-scaleout {\\n 0% {\\n -webkit-transform: scale(0);\\n }\\n 20% {\\n opacity: 1;\\n }\\n 100% {\\n -webkit-transform: scale(1);\\n opacity: 0;\\n }\\n}\\n@keyframes sk-scaleout {\\n 0% {\\n transform: scale(0);\\n }\\n 20% {\\n opacity: 1;\\n }\\n 100% {\\n transform: scale(1);\\n opacity: 0;\\n }\\n}\\n.no-script {\\n height: 10em;\\n width: 15em;\\n padding: 0.5em 1em;\\n background-color: #FFF;\\n border-radius: 0.1em;\\n box-shadow: 0 0.1em 0.2em 0.1em rgba(0, 0, 0, 0.2);\\n text-align: center;\\n position: absolute;\\n top: 1em;\\n left: 50%;\\n transform: translateX(-50%);\\n}\\n.no-script img {\\n border-radius: 0.2em;\\n height: 6em;\\n width: 6em;\\n}\\n.no-script .title {\\n padding: 0 1em;\\n font-style: italic;\\n font-size: 1.2em;\\n}\\n.no-script .content {\\n display: flex;\\n}\\n.aca-coin {\\n position: relative;\\n height: 4em;\\n width: 4em;\\n padding: 0.5em;\\n margin: 0.5em;\\n border-radius: 100%;\\n background-color: #dd3d5e;\\n -webkit-animation: coin-spin 2s infinite ease-in-out;\\n animation: coin-spin 2s infinite ease-in-out;\\n}\\n.aca-logo {\\n height: 3em;\\n width: 3em;\\n background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDIwMDEwOTA0Ly9FTiIKICJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy1TVkctMjAwMTA5MDQvRFREL3N2ZzEwLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4wIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiB3aWR0aD0iNzc5LjAwMDAwMHB0IiBoZWlnaHQ9IjMyNC4wMDAwMDBwdCIgdmlld0JveD0iMCAwIDc3OS4wMDAwMDAgMzI0LjAwMDAwMCIKIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiPgo8bWV0YWRhdGE+CkNyZWF0ZWQgYnkgcG90cmFjZSAxLjE0LCB3cml0dGVuIGJ5IFBldGVyIFNlbGluZ2VyIDIwMDEtMjAxNwo8L21ldGFkYXRhPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjAwMDAwMCwzMjQuMDAwMDAwKSBzY2FsZSgwLjEwMDAwMCwtMC4xMDAwMDApIgpmaWxsPSIjZmZmIiBzdHJva2U9Im5vbmUiPgo8cGF0aCBkPSJNNDAwNSAzMjI4IGMtNDQ3IC0yNSAtODM5IC0yMzUgLTExMDkgLTU5NiAtMzE5IC00MjYgLTQxMSAtMTE0NQotMjE2IC0xNjk3IDE2NyAtNDcxIDU0OSAtODAzIDEwMzcgLTkwMiAxMTEgLTIzIDUwNSAtMjYgNjIzIC01IDEyNyAyMyAyODAgNjIKMzgyIDk5IGw5OCAzNSAwIDEwNSBjMCA5NiAtMiAxMDUgLTE3IDEwMCAtMTAgLTMgLTU3IC0yMiAtMTA2IC00MSAtMTkzIC04MAotMzczIC0xMTEgLTYzNyAtMTExIC0yNzQgMCAtNDAxIDI3IC01OTcgMTI5IC0xMTYgNjAgLTE5OSAxMjQgLTMwMyAyMzMgLTE3MgoxNzggLTI3NiAzODggLTMyNSA2NTYgLTM2IDE5NSAtMzYgNTA4IDAgNzAzIDEwMSA1NTUgNDY2IDk1MiA5ODIgMTA3MCA5MyAyMQo0MTUgMzAgNTI1IDE1IDEyNCAtMTggMjc2IC01NiAzNzkgLTk2IDUwIC0xOSA5MyAtMzUgOTUgLTM1IDIgMCA0IDUyIDQgMTE1CmwwIDExNCAtODcgMjcgYy0yMjggNjkgLTQ2OSA5NyAtNzI4IDgyeiIvPgo8cGF0aCBkPSJNNTkxIDE2MzMgYy0zMjEgLTg1MSAtNTg2IC0xNTU0IC01ODkgLTE1NjEgLTMgLTkgMjQgLTEyIDExNiAtMTIKbDEyMCAwIDYwIDE2MiBjMzMgOTAgMTEzIDMwOCAxNzggNDg2IGwxMTkgMzIyIDY3NSAwIDY3NSAwIDEwNCAtMjgyIGM1NyAtMTU2CjEzNyAtMzc0IDE3OCAtNDg2IGw3NSAtMjAyIDExOSAwIGM4OSAwIDExOSAzIDExOCAxMyAwIDYgLTI2MCA3MDcgLTU3NyAxNTU3CmwtNTc3IDE1NDUgLTEwNSAzIC0xMDYgMyAtNTgzIC0xNTQ4eiIvPgo8cGF0aCBkPSJNNjQwNSAzMTYzIGMtMzggLTk5IC0xMTU5IC0zMDcyIC0xMTYzIC0zMDg2IC00IC0xNSA2IC0xNyAxMTQgLTE3CmwxMTkgMCAxMDQgMjgzIGM1NyAxNTUgMTM3IDM3MyAxNzggNDg1IGw3NSAyMDIgNjc2IC0yIDY3NiAtMyAxNzYgLTQ4MCAxNzcKLTQ4MCAxMjIgLTMgMTIzIC0zIC04IDIzIGMtNCAxMiAtMjY0IDcxMyAtNTc5IDE1NTggbC01NzMgMTUzNSAtMTA1IDMgYy05MyAyCi0xMDUgMSAtMTEyIC0xNXoiLz4KPC9nPgo8L3N2Zz4K);\\n background-repeat: no-repeat;\\n background-position: center;\\n background-size: contain;\\n}\\n@-webkit-keyframes coin-spin {\\n 0% {\\n transform: rotateY(0deg) translateY(0%);\\n }\\n 49% {\\n transform: rotateY(179deg) translateY(20%);\\n }\\n 50% {\\n transform: rotateY(181deg) translateY(20%);\\n }\\n 100% {\\n transform: rotateY(359deg) translateY(0%);\\n }\\n}\\n@keyframes coin-spin {\\n 0% {\\n transform: rotateY(0deg) translateY(0%);\\n }\\n 49% {\\n transform: rotateY(179deg) translateY(20%);\\n }\\n 50% {\\n transform: rotateY(181deg) translateY(20%);\\n }\\n 100% {\\n transform: rotateY(359deg) translateY(0%);\\n }\\n}\\n.shadow {\\n position: absolute;\\n bottom: 0;\\n left: 50%;\\n -webkit-animation: floating-shadow 2s infinite ease-in-out;\\n animation: floating-shadow 2s infinite ease-in-out;\\n width: 48px;\\n height: 6px;\\n background-color: rgba(0, 0, 0, 0.2);\\n border-radius: 100%;\\n}\\n@-webkit-keyframes floating-shadow {\\n 0% {\\n transform: translateX(-50%) scale(1);\\n }\\n 45% {\\n transform: translateX(-50%) scale(1.3);\\n }\\n 55% {\\n transform: translateX(-50%) scale(1.3);\\n }\\n 100% {\\n transform: translateX(-50%) scale(1);\\n }\\n}\\n@keyframes floating-shadow {\\n 0% {\\n transform: translateX(-50%) scale(1);\\n }\\n 45% {\\n transform: translateX(-50%) scale(1.3);\\n }\\n 55% {\\n transform: translateX(-50%) scale(1.3);\\n }\\n 100% {\\n transform: translateX(-50%) scale(1);\\n }\\n}\\nhtml, body {\\n height: 100%;\\n}\\nbody {\\n margin: 0;\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n.yellow-snackbar {\\n background: #ffd149;\\n color: rgba(0, 0, 0, 0.9);\\n text-align: center;\\n}\\n.yellow-snackbar span {\\n color: rgba(0, 0, 0, 0.9);\\n}\\n.sub app-map-controls > div mck-legend-dropdown {\\n position: relative;\\n top: -6px;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .sub app-map-controls > div .map-info-button {\\n display: none !important;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .sub app-map-controls > div .map-info-button {\\n display: none !important;\\n }\\n}\\n.mck-modal-backdrop {\\n background-color: rgba(5, 28, 44, 0.85);\\n}\\n.pulsate {\\n -webkit-animation: pulsate 2s ease-out;\\n animation: pulsate 2s ease-out;\\n -webkit-animation-iteration-count: infinite;\\n animation-iteration-count: infinite;\\n opacity: 0.3;\\n}\\n@-webkit-keyframes pulsate {\\n 0% {\\n opacity: 0.3;\\n }\\n 50% {\\n opacity: 1;\\n }\\n 100% {\\n opacity: 0.3;\\n }\\n}\\n@keyframes pulsate {\\n 0% {\\n opacity: 0.3;\\n }\\n 50% {\\n opacity: 1;\\n }\\n 100% {\\n opacity: 0.3;\\n }\\n}\\n.mat-form-field-invalid .mat-form-field-outline > div, .mat-form-field-invalid .mat-form-field-outline-thick > div {\\n border-color: #f44336 !important;\\n}\\n.mck-toggle {\\n position: relative;\\n}\\n.mck-toggle .mat-slide-toggle-thumb {\\n height: 0.875rem;\\n width: 0.875rem;\\n border-radius: 50%;\\n}\\n.mck-toggle .mat-slide-toggle-thumb-container {\\n top: 0.2rem;\\n left: 0.2rem;\\n}\\n.mck-toggle .mat-slide-toggle-bar {\\n position: relative;\\n width: 2.5rem;\\n height: 1.25rem;\\n flex-shrink: 0;\\n border-radius: 1.25rem;\\n background-color: #d0d0d0;\\n}\\n.mck-toggle .mat-slide-toggle-bar .mat-slide-toggle-ripple {\\n top: calc(50% - 23px);\\n}\\n.mck-toggle.mat-checked .mat-slide-toggle-thumb-container {\\n left: 0.42rem;\\n}\\n.mck-toggle.mat-checked .mat-slide-toggle-thumb {\\n background-color: white;\\n}\\n.mck-toggle.mat-checked .mat-slide-toggle-bar {\\n background-color: #2152fe;\\n}\\n.mck-chevron-icon svg {\\n transform: rotate(180deg);\\n transition: transform 0.5s ease;\\n}\\n.mck-chevron-icon.turn-up svg {\\n transform: rotate(0deg);\\n}\\n.mat-tab-label {\\n padding: 0 6px 0 2px !important;\\n min-width: auto !important;\\n margin-right: 40px;\\n font-family: \\\"McKinsey Sans\\\";\\n font-size: 20px;\\n font-weight: 400;\\n color: #333333;\\n opacity: 1 !important;\\n}\\n.mat-tab-label.mat-tab-label-active .mat-tab-label-content {\\n color: #2251FF;\\n}\\n.mat-tab-label .mat-tab-label-content {\\n color: #333333;\\n padding-bottom: 20px;\\n}\\n.mat-tab-group.mat-primary .mat-ink-bar, .mat-tab-nav-bar.mat-primary .mat-ink-bar {\\n background-color: #2251FF;\\n height: 4px;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-tab .mat-tab-header {\\n transform: scale(0.65) !important;\\n width: 100vw;\\n display: block;\\n position: relative;\\n left: -19%;\\n }\\n .mck-tab .mat-tab-header .mat-tab-header-pagination {\\n display: none;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-tab .mat-tab-header {\\n transform: scale(0.65) !important;\\n width: 100vw;\\n display: block;\\n position: relative;\\n left: -19%;\\n }\\n .mck-tab .mat-tab-header .mat-tab-header-pagination {\\n display: none;\\n }\\n}\\n.status {\\n background: #fff;\\n color: #000;\\n}\\n.status.tentative, .status.pending, .status.requested {\\n background: #FFF3CE;\\n color: #6A4F00;\\n}\\n.status.accepted {\\n background: #D1F4DD;\\n color: #006200;\\n}\\n.status.approved {\\n background: #D1F4DD;\\n color: #006200;\\n}\\n.status.expired {\\n background: #F0F0F0;\\n color: #757575;\\n}\\n.status.declined, .status.cancelled {\\n background: #FFE5EA;\\n color: #B0001D;\\n}\\n.banner {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n padding: 16px 26px;\\n box-sizing: border-box;\\n}\\n.banner .banner-text {\\n width: calc(100% - 50px);\\n padding: 0 20px;\\n box-sizing: border-box;\\n font-weight: 500;\\n font-family: \\\"McKinsey Sans\\\", \\\"Helvetica Neue\\\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\\n margin: 0;\\n text-align: left;\\n}\\n.banner img:last-child {\\n cursor: pointer;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .banner {\\n align-items: end;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .banner {\\n align-items: end;\\n }\\n}\\n.banner.advise {\\n background-color: #EBEBF6;\\n justify-content: start !important;\\n border: 1px solid rgba(106, 79, 0, 0.11);\\n}\\n.banner.advise .banner-text {\\n color: #1B1B19;\\n}\\n.banner.info {\\n background-color: #E6ECFF;\\n}\\n.banner.info .banner-text {\\n color: #1E32E6;\\n}\\n.banner.warning {\\n background-color: #fdf1f3;\\n}\\n.banner.warning .banner-text {\\n color: #B0001D;\\n}\\n.banner.fixed {\\n position: fixed;\\n top: 0;\\n left: 0;\\n width: 100%;\\n z-index: 5;\\n}\\n.fullpage-modal {\\n position: fixed;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n z-index: 3;\\n background-color: #f8f9fa;\\n}\\n.fullpage-modal .header {\\n z-index: 1;\\n}\\n.coachmark {\\n margin-top: 0;\\n position: relative;\\n top: -6px;\\n font-family: \\\"McKinsey Sans\\\";\\n font-style: normal;\\n font-weight: 400;\\n font-size: 14px;\\n line-height: 20px;\\n color: #333333;\\n}\\n.bottom-panel-buttons {\\n position: fixed;\\n bottom: 0;\\n width: 100%;\\n min-height: 80px;\\n background-color: white;\\n border: 1px solid #E6E6E6;\\n z-index: 1002;\\n}\\n.bottom-panel-buttons .buttons {\\n padding: 24px 16px;\\n border: none;\\n background-color: transparent;\\n max-width: 684px;\\n margin: 0 auto;\\n display: flex;\\n}\\n.bottom-panel-buttons .buttons button {\\n flex: 1;\\n height: 48px;\\n font-size: 16px;\\n max-width: 332px;\\n}\\n.bottom-panel-buttons .buttons button:nth-child(1) {\\n margin-right: 5px;\\n border: 1px solid #D0D0D0;\\n}\\n.bottom-panel-buttons .buttons button:nth-child(2) {\\n margin-left: 5px;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .bottom-panel-buttons .buttons {\\n padding: 16px 0;\\n }\\n .bottom-panel-buttons .buttons button {\\n margin: 0 16px;\\n }\\n .bottom-panel-buttons .buttons button:nth-child(1) {\\n margin-right: 8px;\\n }\\n .bottom-panel-buttons .buttons button:nth-child(2) {\\n margin-left: 8px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .bottom-panel-buttons .buttons {\\n padding: 16px 0;\\n }\\n .bottom-panel-buttons .buttons button {\\n margin: 0 16px;\\n }\\n .bottom-panel-buttons .buttons button:nth-child(1) {\\n margin-right: 8px;\\n }\\n .bottom-panel-buttons .buttons button:nth-child(2) {\\n margin-left: 8px;\\n }\\n}\\n.modal_mask {\\n width: 100vw;\\n height: 100vh;\\n position: fixed;\\n top: 0;\\n left: 0;\\n background-color: white;\\n z-index: 3;\\n}\", \"\",{\"version\":3,\"sources\":[\"styles.scss\",\"/home/runner/work/mckinsey-converge/mckinsey-converge/node_modules/@angular/material/_theming.scss\",\"/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/styles/variables.scss\",\"/home/runner/work/mckinsey-converge/mckinsey-converge/libs/legacy-ui/src/lib/styles/mixins.scss\",\"/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/vars.scss\",\"/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/mixins.scss\",\"/home/runner/work/mckinsey-converge/mckinsey-converge/libs/ui/src/lib/styles.scss\",\"/home/runner/work/mckinsey-converge/mckinsey-converge/apps/staff/src/calendar.scss\",\"/home/runner/work/mckinsey-converge/mckinsey-converge/apps/staff/src/styles.scss\"],\"names\":[],\"mappings\":\"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l8BI;EJywDd;AACF;AK1zDY;EC6+BR;IAEQ,2BAAA;IACA,YAAA;IACA,iBFj8BI;IEk8BJ,kBFl8BI;EJixDd;AACF;AM70BQ;EACI,iCFt+BO;AJqzDnB;AMz0BY;EACI,yBFt/BI;AJi0DpB;AMx0BY;EACI,uBAAA;AN00BhB;AMt0BQ;EACI,YAAA;ANw0BZ;AMr0BQ;EACI,OAAA;EDhxBR,kBAAA;EACA,kBAAA;EACA,8DA9Kc;EA+Kd,eAAA;EACA,mBAAA;EC8wBQ,gBAAA;ED5sBR,oBAAA;EACA,gBAAA;EACA,qBC2sB2B;ED1sB3B,4BAAA;EC2sBQ,mBAAA;AN80BZ;AM30BQ;EACI,WAAA;EACA,YAAA;EACA,8BAAA;AN60BZ;AM10BQ;EACI,SAAA;EACA,UAAA;AN40BZ;AMz0BQ;EACI,YAAA;EACA,yBFniCmB;EEoiCnB,mBAAA;AN20BZ;AMv0BI;ED1sBA,yBDzVc;AJ62DlB;AMv0BQ;EACI,WAAA;ANy0BZ;AMx0BY;ED/sBR,yBDzVc;EE0iCF,WAAA;EACA,YAAA;EACA,gBAAA;AN00BhB;AMt0BQ;EDvtBJ,yBDzVc;EEkjCN,YAAA;EACA,gBAAA;EACA,gBAAA;ANw0BZ;AMr0BQ;ED9tBJ,yBDzVc;EC6Vd,WAAA;EACA,YAAA;EC4tBQ,gBAAA;ANw0BZ;AKt4DY;EC2jCJ;IDttBA,YAAA;IACA,aAAA;ELqiDN;AACF;AK54DY;EC2jCJ;IDttBA,YAAA;IACA,aAAA;EL2iDN;AACF;AMj1BQ;EDpuBJ,yBDzVc;ECuWd,YAAA;EACA,YAAA;ECwtBQ,gBAAA;EACA,gBAAA;ANo1BZ;AKz5DY;ECikCJ;IDltBA,YAAA;IACA,YAAA;EL8iDN;AACF;AK/5DY;ECikCJ;IDltBA,YAAA;IACA,YAAA;ELojDN;AACF;AM71BQ;ED3uBJ,yBDzVc;EEskCN,YAAA;EACA,gBAAA;AN+1BZ;AK16DY;ECwkCJ;IAMQ,gBAAA;ENg2Bd;AACF;AK/6DY;ECwkCJ;IAMQ,gBAAA;ENq2Bd;AACF;AMl2BQ;EDrvBJ,yBDzVc;EEglCN,YAAA;EACA,gBAAA;ANo2BZ;AKz7DY;ECklCJ;IAMQ,gBAAA;ENq2Bd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\",\"file\":\"styles.scss\",\"sourcesContent\":[\"@charset \\\"UTF-8\\\";\\n/* Theme for the ripple elements.*/\\n/* stylelint-disable material/no-prefixes */\\n/* stylelint-enable */\\n.mat-badge-content {\\n font-weight: 600;\\n font-size: 12px;\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n\\n.mat-badge-small .mat-badge-content {\\n font-size: 9px;\\n}\\n\\n.mat-badge-large .mat-badge-content {\\n font-size: 24px;\\n}\\n\\n.mat-h1, .mat-headline, .mat-typography h1 {\\n font: 400 24px/32px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: normal;\\n margin: 0 0 16px;\\n}\\n\\n.mat-h2, .mat-title, .mat-typography h2 {\\n font: 500 20px/32px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: normal;\\n margin: 0 0 16px;\\n}\\n\\n.mat-h3, .mat-subheading-2, .mat-typography h3 {\\n font: 400 16px/28px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: normal;\\n margin: 0 0 16px;\\n}\\n\\n.mat-h4, .mat-subheading-1, .mat-typography h4 {\\n font: 400 15px/24px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: normal;\\n margin: 0 0 16px;\\n}\\n\\n.mat-h5, .mat-typography h5 {\\n font: 400 calc(14px * 0.83)/20px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n margin: 0 0 12px;\\n}\\n\\n.mat-h6, .mat-typography h6 {\\n font: 400 calc(14px * 0.67)/20px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n margin: 0 0 12px;\\n}\\n\\n.mat-body-strong, .mat-body-2 {\\n font: 500 14px/24px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: normal;\\n}\\n\\n.mat-body, .mat-body-1, .mat-typography {\\n font: 400 14px/20px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: normal;\\n}\\n.mat-body p, .mat-body-1 p, .mat-typography p {\\n margin: 0 0 12px;\\n}\\n\\n.mat-small, .mat-caption {\\n font: 400 12px/20px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: normal;\\n}\\n\\n.mat-display-4, .mat-typography .mat-display-4 {\\n font: 300 112px/112px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: -0.05em;\\n margin: 0 0 56px;\\n}\\n\\n.mat-display-3, .mat-typography .mat-display-3 {\\n font: 400 56px/56px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: -0.02em;\\n margin: 0 0 64px;\\n}\\n\\n.mat-display-2, .mat-typography .mat-display-2 {\\n font: 400 45px/48px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: -0.005em;\\n margin: 0 0 64px;\\n}\\n\\n.mat-display-1, .mat-typography .mat-display-1 {\\n font: 400 34px/40px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: normal;\\n margin: 0 0 64px;\\n}\\n\\n.mat-bottom-sheet-container {\\n font: 400 14px/20px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: normal;\\n}\\n\\n.mat-button, .mat-raised-button, .mat-icon-button, .mat-stroked-button,\\n.mat-flat-button, .mat-fab, .mat-mini-fab {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 14px;\\n font-weight: 500;\\n}\\n\\n.mat-button-toggle {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n\\n.mat-card {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n\\n.mat-card-title {\\n font-size: 24px;\\n font-weight: 500;\\n}\\n\\n.mat-card-header .mat-card-title {\\n font-size: 20px;\\n}\\n\\n.mat-card-subtitle,\\n.mat-card-content {\\n font-size: 14px;\\n}\\n\\n.mat-checkbox {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n\\n.mat-checkbox-layout .mat-checkbox-label {\\n line-height: 24px;\\n}\\n\\n.mat-chip {\\n font-size: 14px;\\n font-weight: 500;\\n}\\n.mat-chip .mat-chip-trailing-icon.mat-icon,\\n.mat-chip .mat-chip-remove.mat-icon {\\n font-size: 18px;\\n}\\n\\n.mat-table {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n\\n.mat-header-cell {\\n font-size: 12px;\\n font-weight: 500;\\n}\\n\\n.mat-cell, .mat-footer-cell {\\n font-size: 14px;\\n}\\n\\n.mat-calendar {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n\\n.mat-calendar-body {\\n font-size: 13px;\\n}\\n\\n.mat-calendar-body-label,\\n.mat-calendar-period-button {\\n font-size: 14px;\\n font-weight: 500;\\n}\\n\\n.mat-calendar-table-header th {\\n font-size: 11px;\\n font-weight: 400;\\n}\\n\\n.mat-dialog-title {\\n font: 500 20px/32px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: normal;\\n}\\n\\n.mat-expansion-panel-header {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 15px;\\n font-weight: 400;\\n}\\n\\n.mat-expansion-panel-content {\\n font: 400 14px/20px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: normal;\\n}\\n\\n.mat-form-field {\\n font-size: inherit;\\n font-weight: 400;\\n line-height: 1.125;\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: normal;\\n}\\n\\n.mat-form-field-wrapper {\\n padding-bottom: 1.34375em;\\n}\\n\\n.mat-form-field-prefix .mat-icon,\\n.mat-form-field-suffix .mat-icon {\\n font-size: 150%;\\n line-height: 1.125;\\n}\\n.mat-form-field-prefix .mat-icon-button,\\n.mat-form-field-suffix .mat-icon-button {\\n height: 1.5em;\\n width: 1.5em;\\n}\\n.mat-form-field-prefix .mat-icon-button .mat-icon,\\n.mat-form-field-suffix .mat-icon-button .mat-icon {\\n height: 1.125em;\\n line-height: 1.125;\\n}\\n\\n.mat-form-field-infix {\\n padding: 0.5em 0;\\n border-top: 0.84375em solid transparent;\\n}\\n\\n.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\\n.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\\n transform: translateY(-1.34375em) scale(0.75);\\n width: 133.3333333333%;\\n}\\n.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\\n transform: translateY(-1.34374em) scale(0.75);\\n width: 133.3333433333%;\\n}\\n\\n.mat-form-field-label-wrapper {\\n top: -0.84375em;\\n padding-top: 0.84375em;\\n}\\n\\n.mat-form-field-label {\\n top: 1.34375em;\\n}\\n\\n.mat-form-field-underline {\\n bottom: 1.34375em;\\n}\\n\\n.mat-form-field-subscript-wrapper {\\n font-size: 75%;\\n margin-top: 0.6666666667em;\\n top: calc(100% - 1.7916666667em);\\n}\\n\\n.mat-form-field-appearance-legacy .mat-form-field-wrapper {\\n padding-bottom: 1.25em;\\n}\\n.mat-form-field-appearance-legacy .mat-form-field-infix {\\n padding: 0.4375em 0;\\n}\\n.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\\n.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\\n transform: translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.001px);\\n -ms-transform: translateY(-1.28125em) scale(0.75);\\n width: 133.3333333333%;\\n}\\n.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill + .mat-form-field-label-wrapper .mat-form-field-label {\\n transform: translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.00101px);\\n -ms-transform: translateY(-1.28124em) scale(0.75);\\n width: 133.3333433333%;\\n}\\n.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\\n transform: translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.00102px);\\n -ms-transform: translateY(-1.28123em) scale(0.75);\\n width: 133.3333533333%;\\n}\\n.mat-form-field-appearance-legacy .mat-form-field-label {\\n top: 1.28125em;\\n}\\n.mat-form-field-appearance-legacy .mat-form-field-underline {\\n bottom: 1.25em;\\n}\\n.mat-form-field-appearance-legacy .mat-form-field-subscript-wrapper {\\n margin-top: 0.5416666667em;\\n top: calc(100% - 1.6666666667em);\\n}\\n\\n@media print {\\n .mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\\n.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\\n transform: translateY(-1.28122em) scale(0.75);\\n }\\n .mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill + .mat-form-field-label-wrapper .mat-form-field-label {\\n transform: translateY(-1.28121em) scale(0.75);\\n }\\n .mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\\n transform: translateY(-1.2812em) scale(0.75);\\n }\\n}\\n.mat-form-field-appearance-fill .mat-form-field-infix {\\n padding: 0.25em 0 0.75em 0;\\n}\\n.mat-form-field-appearance-fill .mat-form-field-label {\\n top: 1.09375em;\\n margin-top: -0.5em;\\n}\\n.mat-form-field-appearance-fill.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\\n.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\\n transform: translateY(-0.59375em) scale(0.75);\\n width: 133.3333333333%;\\n}\\n.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\\n transform: translateY(-0.59374em) scale(0.75);\\n width: 133.3333433333%;\\n}\\n\\n.mat-form-field-appearance-outline .mat-form-field-infix {\\n padding: 1em 0 1em 0;\\n}\\n.mat-form-field-appearance-outline .mat-form-field-label {\\n top: 1.84375em;\\n margin-top: -0.25em;\\n}\\n.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,\\n.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\\n transform: translateY(-1.59375em) scale(0.75);\\n width: 133.3333333333%;\\n}\\n.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper .mat-form-field-label {\\n transform: translateY(-1.59374em) scale(0.75);\\n width: 133.3333433333%;\\n}\\n\\n.mat-grid-tile-header,\\n.mat-grid-tile-footer {\\n font-size: 14px;\\n}\\n.mat-grid-tile-header .mat-line,\\n.mat-grid-tile-footer .mat-line {\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n display: block;\\n box-sizing: border-box;\\n}\\n.mat-grid-tile-header .mat-line:nth-child(n+2),\\n.mat-grid-tile-footer .mat-line:nth-child(n+2) {\\n font-size: 12px;\\n}\\n\\ninput.mat-input-element {\\n margin-top: -0.0625em;\\n}\\n\\n.mat-menu-item {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 14px;\\n font-weight: 400;\\n}\\n\\n.mat-paginator,\\n.mat-paginator-page-size .mat-select-trigger {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 12px;\\n}\\n\\n.mat-radio-button {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n\\n.mat-select {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n\\n.mat-select-trigger {\\n height: 1.125em;\\n}\\n\\n.mat-slide-toggle-content {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n\\n.mat-slider-thumb-label-text {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 12px;\\n font-weight: 500;\\n}\\n\\n.mat-stepper-vertical, .mat-stepper-horizontal {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n\\n.mat-step-label {\\n font-size: 14px;\\n font-weight: 400;\\n}\\n\\n.mat-step-sub-label-error {\\n font-weight: normal;\\n}\\n\\n.mat-step-label-error {\\n font-size: 14px;\\n}\\n\\n.mat-step-label-selected {\\n font-size: 14px;\\n font-weight: 500;\\n}\\n\\n.mat-tab-group {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n\\n.mat-tab-label, .mat-tab-link {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 14px;\\n font-weight: 500;\\n}\\n\\n.mat-toolbar,\\n.mat-toolbar h1,\\n.mat-toolbar h2,\\n.mat-toolbar h3,\\n.mat-toolbar h4,\\n.mat-toolbar h5,\\n.mat-toolbar h6 {\\n font: 500 20px/32px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: normal;\\n margin: 0;\\n}\\n\\n.mat-tooltip {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 10px;\\n padding-top: 6px;\\n padding-bottom: 6px;\\n}\\n\\n.mat-tooltip-handset {\\n font-size: 14px;\\n padding-top: 8px;\\n padding-bottom: 8px;\\n}\\n\\n.mat-list-item {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n\\n.mat-list-option {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n\\n.mat-list-base .mat-list-item {\\n font-size: 16px;\\n}\\n.mat-list-base .mat-list-item .mat-line {\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n display: block;\\n box-sizing: border-box;\\n}\\n.mat-list-base .mat-list-item .mat-line:nth-child(n+2) {\\n font-size: 14px;\\n}\\n.mat-list-base .mat-list-option {\\n font-size: 16px;\\n}\\n.mat-list-base .mat-list-option .mat-line {\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n display: block;\\n box-sizing: border-box;\\n}\\n.mat-list-base .mat-list-option .mat-line:nth-child(n+2) {\\n font-size: 14px;\\n}\\n.mat-list-base .mat-subheader {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 14px;\\n font-weight: 500;\\n}\\n\\n.mat-list-base[dense] .mat-list-item {\\n font-size: 12px;\\n}\\n.mat-list-base[dense] .mat-list-item .mat-line {\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n display: block;\\n box-sizing: border-box;\\n}\\n.mat-list-base[dense] .mat-list-item .mat-line:nth-child(n+2) {\\n font-size: 12px;\\n}\\n.mat-list-base[dense] .mat-list-option {\\n font-size: 12px;\\n}\\n.mat-list-base[dense] .mat-list-option .mat-line {\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n display: block;\\n box-sizing: border-box;\\n}\\n.mat-list-base[dense] .mat-list-option .mat-line:nth-child(n+2) {\\n font-size: 12px;\\n}\\n.mat-list-base[dense] .mat-subheader {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 12px;\\n font-weight: 500;\\n}\\n\\n.mat-option {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 16px;\\n}\\n\\n.mat-optgroup-label {\\n font: 500 14px/24px Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n letter-spacing: normal;\\n}\\n\\n.mat-simple-snackbar {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 14px;\\n}\\n\\n.mat-simple-snackbar-action {\\n line-height: 1;\\n font-family: inherit;\\n font-size: inherit;\\n font-weight: 500;\\n}\\n\\n.mat-tree {\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n\\n.mat-tree-node,\\n.mat-nested-tree-node {\\n font-weight: 400;\\n font-size: 14px;\\n}\\n\\n.mat-ripple {\\n overflow: hidden;\\n position: relative;\\n}\\n.mat-ripple:not(:empty) {\\n transform: translateZ(0);\\n}\\n\\n.mat-ripple.mat-ripple-unbounded {\\n overflow: visible;\\n}\\n\\n.mat-ripple-element {\\n position: absolute;\\n border-radius: 50%;\\n pointer-events: none;\\n transition: opacity, transform 0ms cubic-bezier(0, 0, 0.2, 1);\\n transform: scale(0);\\n}\\n.cdk-high-contrast-active .mat-ripple-element {\\n display: none;\\n}\\n\\n.cdk-visually-hidden {\\n border: 0;\\n clip: rect(0 0 0 0);\\n height: 1px;\\n margin: -1px;\\n overflow: hidden;\\n padding: 0;\\n position: absolute;\\n width: 1px;\\n outline: 0;\\n -webkit-appearance: none;\\n -moz-appearance: none;\\n}\\n\\n.cdk-overlay-container, .cdk-global-overlay-wrapper {\\n pointer-events: none;\\n top: 0;\\n left: 0;\\n height: 100%;\\n width: 100%;\\n}\\n\\n.cdk-overlay-container {\\n position: fixed;\\n z-index: 1000;\\n}\\n.cdk-overlay-container:empty {\\n display: none;\\n}\\n\\n.cdk-global-overlay-wrapper {\\n display: flex;\\n position: absolute;\\n z-index: 1000;\\n}\\n\\n.cdk-overlay-pane {\\n position: absolute;\\n pointer-events: auto;\\n box-sizing: border-box;\\n z-index: 1000;\\n display: flex;\\n max-width: 100%;\\n max-height: 100%;\\n}\\n\\n.cdk-overlay-backdrop {\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n z-index: 1000;\\n pointer-events: auto;\\n -webkit-tap-highlight-color: transparent;\\n transition: opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1);\\n opacity: 0;\\n}\\n.cdk-overlay-backdrop.cdk-overlay-backdrop-showing {\\n opacity: 1;\\n}\\n@media screen and (-ms-high-contrast: active) {\\n .cdk-overlay-backdrop.cdk-overlay-backdrop-showing {\\n opacity: 0.6;\\n }\\n}\\n\\n.cdk-overlay-dark-backdrop {\\n background: rgba(0, 0, 0, 0.32);\\n}\\n\\n.cdk-overlay-transparent-backdrop, .cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing {\\n opacity: 0;\\n}\\n\\n.cdk-overlay-connected-position-bounding-box {\\n position: absolute;\\n z-index: 1000;\\n display: flex;\\n flex-direction: column;\\n min-width: 1px;\\n min-height: 1px;\\n}\\n\\n.cdk-global-scrollblock {\\n position: fixed;\\n width: 100%;\\n overflow-y: scroll;\\n}\\n\\n@keyframes cdk-text-field-autofill-start {\\n /*!*/\\n}\\n@keyframes cdk-text-field-autofill-end {\\n /*!*/\\n}\\n.cdk-text-field-autofill-monitored:-webkit-autofill {\\n animation: cdk-text-field-autofill-start 0s 1ms;\\n}\\n\\n.cdk-text-field-autofill-monitored:not(:-webkit-autofill) {\\n animation: cdk-text-field-autofill-end 0s 1ms;\\n}\\n\\ntextarea.cdk-textarea-autosize {\\n resize: none;\\n}\\n\\ntextarea.cdk-textarea-autosize-measuring {\\n height: auto !important;\\n overflow: hidden !important;\\n padding: 2px 0 !important;\\n box-sizing: content-box !important;\\n}\\n\\n/*=======================*\\\\\\n|| MDS Colours ||\\n\\\\*=======================*/\\n/*=======================*\\\\\\n|| Application Colours ||\\n\\\\*=======================*/\\n/*===========*\\\\\\n|| Fonts ||\\n\\\\*===========*/\\n/*===================*\\\\\\n|| Media Queries ||\\n\\\\*===================*/\\n/*=======================*\\\\\\n|| MDS Colours ||\\n\\\\*=======================*/\\n/*=======================*\\\\\\n|| Application Colours ||\\n\\\\*=======================*/\\n/*===========*\\\\\\n|| Fonts ||\\n\\\\*===========*/\\n/*===================*\\\\\\n|| Media Queries ||\\n\\\\*===================*/\\n/*===================*\\\\\\n|| Media Queries ||\\n\\\\*===================*/\\n/**\\n * Spacing\\n */\\n/*===================*\\\\\\n|| Media Queries ||\\n\\\\*===================*/\\n:export {\\n primary: #1F40E6;\\n secondaryLabel: #767676;\\n}\\n\\n/*===================*\\\\\\n|| Icon sizes ||\\n\\\\*===================*/\\n/**\\n * Makes text have maximum lines with ellipsis. Works on most modern browsers except\\n * of Firefox..\\n */\\n/**\\n * Spacing\\n */\\n/*===================*\\\\\\n|| Media Queries ||\\n\\\\*===================*/\\n:export {\\n primary: #1F40E6;\\n secondaryLabel: #767676;\\n}\\n\\n/*===================*\\\\\\n|| Icon sizes ||\\n\\\\*===================*/\\n/* Theme for the ripple elements.*/\\n/* stylelint-disable material/no-prefixes */\\n/* stylelint-enable */\\n.mck-inherit-font {\\n font: inherit;\\n}\\n.mck-content-expand, .mck-content-page {\\n width: 100%;\\n height: 100%;\\n}\\n.mck-content-expand-width {\\n width: 100%;\\n}\\n.mck-content-expand-height {\\n height: 100%;\\n}\\n.mck-content-with-footer-height {\\n height: calc(100vh - 58px);\\n}\\n.mck-content-full-height, .mck-content-page-container {\\n height: 100vh;\\n}\\n.mck-content-page {\\n background: #F8F9FA;\\n}\\n.mck-content-body {\\n width: 100%;\\n display: block;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-content-body {\\n max-width: 1024px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-content-body {\\n max-width: 1024px;\\n }\\n}\\n.mck-content-group {\\n padding-left: 1rem;\\n padding-right: 1rem;\\n width: 100%;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-content-group {\\n max-width: 759px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-content-group {\\n max-width: 759px;\\n }\\n}\\n.mck-shadow {\\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mck-flex-1 {\\n flex: 1;\\n}\\n.mck-row, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix, .mck-row-flow {\\n display: flex;\\n flex-direction: row;\\n}\\n.mck-row.mck-center-justify, .mck-center-justify.mck-row-flow, .mck-row.mck-center, .mck-row.mck-button.mat-button, .mck-row.mat-button.mck-stroked-button, .mck-row.mat-button.mck-warning-button, .mck-row.mat-button.mck-secondary-button, .mck-row.mat-button.mck-primary-button, .mck-row.mck-button.mat-stroked-button, .mck-row.mat-stroked-button.mck-stroked-button, .mck-row.mat-stroked-button.mck-warning-button, .mck-row.mat-stroked-button.mck-secondary-button, .mck-row.mat-stroked-button.mck-primary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix, .mck-center.mck-row-flow, .mck-row-flow.mck-button.mat-button, .mck-row-flow.mat-button.mck-stroked-button, .mck-row-flow.mat-button.mck-warning-button, .mck-row-flow.mat-button.mck-secondary-button, .mck-row-flow.mat-button.mck-primary-button, .mck-row-flow.mck-button.mat-stroked-button, .mck-row-flow.mat-stroked-button.mck-stroked-button, .mck-row-flow.mat-stroked-button.mck-warning-button, .mck-row-flow.mat-stroked-button.mck-secondary-button, .mck-row-flow.mat-stroked-button.mck-primary-button {\\n justify-content: center;\\n}\\n.mck-row.mck-center-align, .mck-center-align.mck-row-flow, .mck-row.mck-center, .mck-row.mck-button.mat-button, .mck-row.mat-button.mck-stroked-button, .mck-row.mat-button.mck-warning-button, .mck-row.mat-button.mck-secondary-button, .mck-row.mat-button.mck-primary-button, .mck-row.mck-button.mat-stroked-button, .mck-row.mat-stroked-button.mck-stroked-button, .mck-row.mat-stroked-button.mck-warning-button, .mck-row.mat-stroked-button.mck-secondary-button, .mck-row.mat-stroked-button.mck-primary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix, .mck-center.mck-row-flow, .mck-row-flow.mck-button.mat-button, .mck-row-flow.mat-button.mck-stroked-button, .mck-row-flow.mat-button.mck-warning-button, .mck-row-flow.mat-button.mck-secondary-button, .mck-row-flow.mat-button.mck-primary-button, .mck-row-flow.mck-button.mat-stroked-button, .mck-row-flow.mat-stroked-button.mck-stroked-button, .mck-row-flow.mat-stroked-button.mck-warning-button, .mck-row-flow.mat-stroked-button.mck-secondary-button, .mck-row-flow.mat-stroked-button.mck-primary-button {\\n align-items: center;\\n}\\n.mck-row.mck-stretch, .mck-form-input mat-form-field.mck-center-suffix .mck-stretch.mat-form-field-infix, .mck-stretch.mck-row-flow {\\n align-items: stretch;\\n}\\n.mck-row-flow {\\n flex-wrap: wrap;\\n}\\n.mck-row.mck-scroll, .mck-form-input mat-form-field.mck-center-suffix .mck-scroll.mat-form-field-infix, .mck-scroll.mck-row-flow {\\n overflow-x: scroll;\\n}\\n.mck-column, .mck-button.mat-button.mat-button, .mat-button.mat-button.mck-stroked-button, .mat-button.mat-button.mck-warning-button, .mat-button.mat-button.mck-secondary-button, .mat-button.mat-button.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button, .mat-stroked-button.mat-stroked-button.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-primary-button {\\n display: flex;\\n flex-direction: column;\\n}\\n.mck-column.mck-center, .mck-column.mck-button.mat-button, .mck-column.mat-button.mck-stroked-button, .mck-column.mat-button.mck-warning-button, .mck-column.mat-button.mck-secondary-button, .mck-column.mat-button.mck-primary-button, .mck-column.mck-button.mat-stroked-button, .mck-column.mat-stroked-button.mck-stroked-button, .mck-column.mat-stroked-button.mck-warning-button, .mck-column.mat-stroked-button.mck-secondary-button, .mck-column.mat-stroked-button.mck-primary-button, .mck-center.mck-button.mat-button, .mck-center.mat-button.mck-stroked-button, .mck-center.mat-button.mck-warning-button, .mck-center.mat-button.mck-secondary-button, .mck-center.mat-button.mck-primary-button, .mck-button.mat-button, .mat-button.mck-stroked-button, .mat-button.mck-warning-button, .mat-button.mck-secondary-button, .mat-button.mck-primary-button, .mck-button.mat-button.mat-stroked-button, .mat-button.mat-stroked-button.mck-stroked-button, .mat-button.mat-stroked-button.mck-warning-button, .mat-button.mat-stroked-button.mck-secondary-button, .mat-button.mat-stroked-button.mck-primary-button, .mck-center.mck-button.mat-stroked-button, .mck-center.mat-stroked-button.mck-stroked-button, .mck-center.mat-stroked-button.mck-warning-button, .mck-center.mat-stroked-button.mck-secondary-button, .mck-center.mat-stroked-button.mck-primary-button, .mck-button.mat-stroked-button, .mat-stroked-button.mck-stroked-button, .mat-stroked-button.mck-warning-button, .mat-stroked-button.mck-secondary-button, .mat-stroked-button.mck-primary-button, .mck-form-input mat-form-field.mck-center-suffix .mck-column.mat-form-field-infix, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mck-button.mat-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-button.mck-stroked-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-button.mck-warning-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-button.mck-secondary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-button.mck-primary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mck-button.mat-stroked-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-stroked-button.mck-stroked-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-stroked-button.mck-warning-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-stroked-button.mck-secondary-button, .mck-form-input mat-form-field.mck-center-suffix .mat-form-field-infix.mat-stroked-button.mck-primary-button {\\n justify-content: center;\\n align-items: center;\\n}\\n.mck-column.mck-space-between, .mck-space-between.mck-button.mat-button, .mck-space-between.mat-button.mck-stroked-button, .mck-space-between.mat-button.mck-warning-button, .mck-space-between.mat-button.mck-secondary-button, .mck-space-between.mat-button.mck-primary-button, .mck-space-between.mck-button.mat-stroked-button, .mck-space-between.mat-stroked-button.mck-stroked-button, .mck-space-between.mat-stroked-button.mck-warning-button, .mck-space-between.mat-stroked-button.mck-secondary-button, .mck-space-between.mat-stroked-button.mck-primary-button {\\n justify-content: space-between;\\n}\\n.mck-column.mck-stretch, .mck-stretch.mck-button.mat-button, .mck-stretch.mat-button.mck-stroked-button, .mck-stretch.mat-button.mck-warning-button, .mck-stretch.mat-button.mck-secondary-button, .mck-stretch.mat-button.mck-primary-button, .mck-stretch.mck-button.mat-stroked-button, .mck-stretch.mat-stroked-button.mck-stroked-button, .mck-stretch.mat-stroked-button.mck-warning-button, .mck-stretch.mat-stroked-button.mck-secondary-button, .mck-stretch.mat-stroked-button.mck-primary-button {\\n align-items: stretch;\\n}\\n.mck-column.mck-scroll, .mck-scroll.mck-button.mat-button, .mck-scroll.mat-button.mck-stroked-button, .mck-scroll.mat-button.mck-warning-button, .mck-scroll.mat-button.mck-secondary-button, .mck-scroll.mat-button.mck-primary-button, .mck-scroll.mck-button.mat-stroked-button, .mck-scroll.mat-stroked-button.mck-stroked-button, .mck-scroll.mat-stroked-button.mck-warning-button, .mck-scroll.mat-stroked-button.mck-secondary-button, .mck-scroll.mat-stroked-button.mck-primary-button {\\n overflow-y: scroll;\\n overflow-y: overlay;\\n}\\n.mck-column.mck-flex-end, .mck-flex-end.mck-button.mat-button, .mck-flex-end.mat-button.mck-stroked-button, .mck-flex-end.mat-button.mck-warning-button, .mck-flex-end.mat-button.mck-secondary-button, .mck-flex-end.mat-button.mck-primary-button, .mck-flex-end.mck-button.mat-stroked-button, .mck-flex-end.mat-stroked-button.mck-stroked-button, .mck-flex-end.mat-stroked-button.mck-warning-button, .mck-flex-end.mat-stroked-button.mck-secondary-button, .mck-flex-end.mat-stroked-button.mck-primary-button {\\n justify-content: flex-end;\\n}\\n.mck-overflow {\\n overflow: auto;\\n}\\n.mck-bordered, .mck-input {\\n border-radius: 0;\\n border: 1px solid #B3B3B3;\\n}\\n.mck-bordered:hover, .mck-input:hover {\\n border-color: #464646;\\n}\\n.mck-bordered:focus, .mck-input:focus {\\n border-color: #1F40E6;\\n}\\n.mck-bordered[disabled=true], .mck-input[disabled=true] {\\n pointer-events: none;\\n border-color: #f0f0f0;\\n color: #ccc;\\n}\\n.mck-date-display {\\n position: relative;\\n display: flex;\\n align-items: center;\\n width: 100%;\\n height: 43px;\\n padding: 1rem 0.5rem;\\n transition: border 200ms, box-shadow 200ms;\\n}\\n.mck-form-input .mat-form-field-wrapper {\\n padding-bottom: 0.5rem;\\n}\\n.mck-form-input mat-form-field {\\n min-width: auto !important;\\n}\\n.mck-form-input mat-form-field .mat-form-field-infix {\\n width: 100%;\\n padding-top: 0.7rem !important;\\n padding-bottom: 0.5rem !important;\\n}\\n.mck-form-input mat-form-field .mat-form-field-outline {\\n min-height: 2.7rem;\\n color: rgba(0, 0, 0, 0.27);\\n}\\n.mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\\n margin-top: 2px;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-flex {\\n padding-left: 0.5rem;\\n padding-right: 0.5rem;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-flex {\\n padding-left: 0.5rem;\\n padding-right: 0.5rem;\\n }\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-outline, .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\\n height: 2rem;\\n min-height: 2rem;\\n }\\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\\n padding-top: 0 !important;\\n padding-bottom: 0 !important;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-outline, .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\\n height: 2rem;\\n min-height: 2rem;\\n }\\n .mck-form-input mat-form-field.mck-select-dropdown-button .mat-form-field-infix {\\n padding-top: 0 !important;\\n padding-bottom: 0 !important;\\n }\\n}\\n.mck-form-input mat-form-field.mat-s {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n text-align: left;\\n}\\n.mck-form-input mat-select {\\n margin-top: 0.2rem;\\n}\\n.mck-form-input mat-select .mat-select-arrow {\\n visibility: hidden;\\n}\\n.mck-form-input mat-select .mat-select-value > .mat-select-value-text > span {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n font-weight: 400;\\n font-family: \\\"McKinsey Sans\\\";\\n}\\n.mck-form-input .mat-form-field-outline > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input .mat-form-field-outline > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input .mat-form-field-outline > .mat-form-field-outline-end.mat-form-field-outline-end {\\n border-color: #B3B3B3;\\n border-width: 1px;\\n border-radius: 0;\\n}\\n.mck-form-input .available .mat-form-field-outline > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input .available .mat-form-field-outline > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input .available .mat-form-field-outline > .mat-form-field-outline-end.mat-form-field-outline-end {\\n border-color: #3aa537;\\n}\\n.mck-form-input .booked .mat-form-field-outline > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input .booked .mat-form-field-outline > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input .booked .mat-form-field-outline > .mat-form-field-outline-end.mat-form-field-outline-end {\\n border-color: #e12e41;\\n}\\n.mck-form-input .mat-form-field-outline-thick > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input .mat-form-field-outline-thick > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input .mat-form-field-outline-thick > .mat-form-field-outline-end.mat-form-field-outline-end {\\n border-color: #1F40E6;\\n border-width: 1px;\\n border-radius: 0;\\n}\\n.mck-form-input > mat-form-field.mck-error .mat-form-field-wrapper {\\n padding-bottom: 0;\\n}\\n.mck-form-input > mat-form-field.mck-error .mat-form-field-outline > .mat-form-field-outline-start.mat-form-field-outline-start, .mck-form-input > mat-form-field.mck-error .mat-form-field-outline > .mat-form-field-outline-gap.mat-form-field-outline-gap, .mck-form-input > mat-form-field.mck-error .mat-form-field-outline > .mat-form-field-outline-end.mat-form-field-outline-end {\\n border-color: #E12E40;\\n}\\n.mck-form-input mck-close-icon.mat-chip-remove.mat-chip-remove {\\n opacity: 1;\\n display: flex;\\n flex-direction: column;\\n justify-content: center;\\n align-items: center;\\n}\\n.mck-form-input mat-label {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n font-weight: 400;\\n text-align: left;\\n margin-bottom: 0.5rem;\\n}\\n.mck-form-input mat-radio-button {\\n margin-right: 1rem;\\n}\\n.mck-form-input .mat-radio-label-content {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n text-align: left;\\n}\\n.mck-form-input .mat-radio-outer-circle {\\n border-color: #1F40E6 !important;\\n border-width: 1px !important;\\n}\\n.mck-form-input .mat-radio-inner-circle {\\n background-color: #1F40E6 !important;\\n}\\n.mck-form-input mat-radio-group {\\n display: flex;\\n flex-direction: row;\\n flex-wrap: wrap;\\n}\\n.mck-form-input mat-radio-group > mat-radio-button:last-child {\\n margin-right: 0;\\n}\\n.mck-form-input-container > .mck-form-input, .mck-form-input-container > mck-select {\\n margin-bottom: 0.5rem;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 800px) {\\n .mck-form-input-container > .mck-form-input, .mck-form-input-container > mck-select {\\n margin-bottom: 1.75rem;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\\n .mck-form-input-container > .mck-form-input, .mck-form-input-container > mck-select {\\n margin-bottom: 1.75rem;\\n }\\n}\\n.mck-form-input-container .mck-radio-select {\\n margin-bottom: 1rem;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 800px) {\\n .mck-form-input-container .mck-radio-select {\\n margin-bottom: 1.5rem;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\\n .mck-form-input-container .mck-radio-select {\\n margin-bottom: 1.5rem;\\n }\\n}\\n.mck-form-input mat-chip.mat-standard-chip.mat-standard-chip {\\n border-radius: 3px;\\n min-height: 1.5rem;\\n background-color: #333333;\\n padding-top: 0.25rem;\\n padding-bottom: 0.25rem;\\n padding-left: 0.5rem;\\n font-family: \\\"McKinsey Sans\\\";\\n font-style: normal;\\n text-align: center;\\n font-size: 0.75rem;\\n line-height: 1.5rem;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-form-input mat-chip.mat-standard-chip.mat-standard-chip {\\n line-height: inherit;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-form-input mat-chip.mat-standard-chip.mat-standard-chip {\\n line-height: inherit;\\n }\\n}\\n.mck-form-input mat-checkbox.mat-checkbox.mat-checkbox {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n font-weight: 300;\\n color: black;\\n}\\n.mck-form-input mat-checkbox div.mat-checkbox-background.mat-checkbox-background {\\n background-color: #1F40E6;\\n}\\n.mck-form-input mat-checkbox div.mat-checkbox-background.mat-checkbox-background.mck-checkbox-disabled.mat-checkbox-disabled {\\n background-color: #D0D0D0;\\n}\\n.mck-form-input mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n font-weight: 300;\\n color: black;\\n color: #B3B3B3;\\n}\\n.mck-borderless {\\n border: none;\\n}\\n.mck-borderless:hover, .mck-borderless:focus, .mck-borderless:disabled {\\n border: none;\\n}\\n.mck-select-panel {\\n margin-top: 0 !important;\\n border-radius: unset !important;\\n margin-top: 35px !important;\\n margin-left: 5px;\\n}\\n.mck-select-panel mat-option {\\n padding-left: 0;\\n padding-right: 0;\\n}\\n.mck-select-panel mat-option.mat-option-text {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n text-align: left;\\n}\\n.mck-select-panel.mck-margin-top {\\n margin-top: 1.5rem !important;\\n}\\n.mck-checkbox-panel.mat-autocomplete-panel.mat-autocomplete-panel {\\n top: -10px;\\n max-height: 278px;\\n}\\n.mck-checkbox-panel mat-option.mck-truncated .mat-checkbox-label.mat-checkbox-label {\\n display: -webkit-box;\\n overflow: hidden;\\n -webkit-line-clamp: 2;\\n -webkit-box-orient: vertical;\\n}\\n.mck-checkbox-panel mat-option {\\n padding-left: 0;\\n padding-right: 0;\\n line-height: 24px;\\n height: unset;\\n min-height: 36px;\\n}\\n.mck-checkbox-panel mat-option .mat-checkbox-label.mat-checkbox-label {\\n flex: 1;\\n}\\n.mck-checkbox-panel mat-option .mat-checkbox-label.mat-checkbox-label {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n font-weight: 300;\\n color: black;\\n text-align: left;\\n}\\n.mck-checkbox-panel mat-option.mck-checkbox-group-header .mat-checkbox-label.mat-checkbox-label {\\n font-weight: 500;\\n}\\n.mck-checkbox-panel mat-option.mck-checkbox-group-child {\\n margin-left: 2rem;\\n}\\n.mck-checkbox-panel mat-option mat-checkbox label.mat-checkbox-layout {\\n width: 100%;\\n padding-left: 16px;\\n padding-right: 16px;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-checkbox-panel mat-option mat-checkbox label.mat-checkbox-layout {\\n padding-left: 2px;\\n padding-right: 2px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-checkbox-panel mat-option mat-checkbox label.mat-checkbox-layout {\\n padding-left: 2px;\\n padding-right: 2px;\\n }\\n}\\n.mck-checkbox-panel mat-option mat-checkbox div.mat-checkbox-frame.mat-checkbox-frame {\\n border: 1px solid #B3B3B3;\\n border-radius: 0;\\n}\\n.mck-checkbox-panel mat-option mat-checkbox.mat-checkbox-checked div.mat-checkbox-background.mat-checkbox-background {\\n background-color: #1F40E6;\\n}\\n.mck-checkbox-panel mat-option mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled div.mat-checkbox-background.mat-checkbox-background {\\n background-color: #D0D0D0;\\n}\\n.mck-checkbox-panel mat-option mat-checkbox.mck-checkbox-disabled.mat-checkbox-disabled .mat-checkbox-label.mat-checkbox-label {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n font-weight: 300;\\n color: black;\\n color: #B3B3B3;\\n text-align: left;\\n}\\n.mck-checkbox-panel mat-option mat-checkbox .mat-checkbox-inner-container {\\n width: 1.25rem;\\n height: 1.25rem;\\n}\\n.mck-select-option-selected {\\n font-weight: 500;\\n font-family: \\\"McKinsey Sans\\\";\\n color: black;\\n background-color: #E6E6E6;\\n}\\n.mck-select-option-selected .mck-spacer-content {\\n background-color: #1F40E6;\\n margin-right: 0.75rem;\\n}\\n.mck-select-option-unselected {\\n font-weight: 400;\\n font-family: \\\"McKinsey Sans\\\";\\n}\\n.mck-select-option-unselected.mck-ignore-disabled {\\n color: black;\\n}\\n.mck-select-option-unselected .mck-spacer-content {\\n visibility: hidden;\\n margin-right: 0.75rem;\\n}\\n.mck-button.mat-button.mat-button, .mat-button.mat-button.mck-stroked-button, .mat-button.mat-button.mck-warning-button, .mat-button.mat-button.mck-secondary-button, .mat-button.mat-button.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button, .mat-stroked-button.mat-stroked-button.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-primary-button {\\n height: 40px;\\n border-radius: 0;\\n border: none;\\n font-family: \\\"McKinsey Sans\\\";\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-button.mat-button.mat-button, .mat-button.mat-button.mck-stroked-button, .mat-button.mat-button.mck-warning-button, .mat-button.mat-button.mck-secondary-button, .mat-button.mat-button.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button, .mat-stroked-button.mat-stroked-button.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-primary-button {\\n height: 48px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-button.mat-button.mat-button, .mat-button.mat-button.mck-stroked-button, .mat-button.mat-button.mck-warning-button, .mat-button.mat-button.mck-secondary-button, .mat-button.mat-button.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button, .mat-stroked-button.mat-stroked-button.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-primary-button {\\n height: 48px;\\n }\\n}\\n.mck-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper, .mck-button.mat-stroked-button.mat-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n font-weight: normal;\\n padding-left: 0.25rem;\\n padding-right: 0.25rem;\\n font-family: \\\"McKinsey Sans\\\";\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper, .mck-button.mat-stroked-button.mat-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper {\\n font-size: 0.875rem;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-button.mat-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper, .mck-button.mat-stroked-button.mat-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-warning-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-secondary-button > .mat-button-wrapper.mat-button-wrapper, .mat-stroked-button.mat-stroked-button.mck-primary-button > .mat-button-wrapper.mat-button-wrapper {\\n font-size: 0.875rem;\\n }\\n}\\n.mck-button.mat-button.mat-button.mck-short, .mat-button.mat-button.mck-short.mck-stroked-button, .mat-button.mat-button.mck-short.mck-warning-button, .mat-button.mat-button.mck-short.mck-secondary-button, .mat-button.mat-button.mck-short.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short, .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button {\\n height: 32px;\\n min-width: 83px;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-button.mat-button.mat-button.mck-short, .mat-button.mat-button.mck-short.mck-stroked-button, .mat-button.mat-button.mck-short.mck-warning-button, .mat-button.mat-button.mck-short.mck-secondary-button, .mat-button.mat-button.mck-short.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short, .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button {\\n height: 48px;\\n min-width: 155px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-button.mat-button.mat-button.mck-short, .mat-button.mat-button.mck-short.mck-stroked-button, .mat-button.mat-button.mck-short.mck-warning-button, .mat-button.mat-button.mck-short.mck-secondary-button, .mat-button.mat-button.mck-short.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short, .mat-stroked-button.mat-stroked-button.mck-short.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-primary-button {\\n height: 48px;\\n min-width: 155px;\\n }\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-button.mat-button.mat-button.mck-short.mck-short-height, .mat-button.mat-button.mck-short.mck-short-height.mck-stroked-button, .mat-button.mat-button.mck-short.mck-short-height.mck-warning-button, .mat-button.mat-button.mck-short.mck-short-height.mck-secondary-button, .mat-button.mat-button.mck-short.mck-short-height.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short.mck-short-height, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-primary-button {\\n height: 40px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-button.mat-button.mat-button.mck-short.mck-short-height, .mat-button.mat-button.mck-short.mck-short-height.mck-stroked-button, .mat-button.mat-button.mck-short.mck-short-height.mck-warning-button, .mat-button.mat-button.mck-short.mck-short-height.mck-secondary-button, .mat-button.mat-button.mck-short.mck-short-height.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-short.mck-short-height, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-short.mck-short-height.mck-primary-button {\\n height: 40px;\\n }\\n}\\n.mck-button.mat-button.mat-button.mck-square, .mat-button.mat-button.mck-square.mck-stroked-button, .mat-button.mat-button.mck-square.mck-warning-button, .mat-button.mat-button.mck-square.mck-secondary-button, .mat-button.mat-button.mck-square.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-square, .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button {\\n height: 32px;\\n width: 32px;\\n min-width: 32px;\\n padding: 0;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-button.mat-button.mat-button.mck-square, .mat-button.mat-button.mck-square.mck-stroked-button, .mat-button.mat-button.mck-square.mck-warning-button, .mat-button.mat-button.mck-square.mck-secondary-button, .mat-button.mat-button.mck-square.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-square, .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button {\\n width: 40px;\\n height: 40px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-button.mat-button.mat-button.mck-square, .mat-button.mat-button.mck-square.mck-stroked-button, .mat-button.mat-button.mck-square.mck-warning-button, .mat-button.mat-button.mck-square.mck-secondary-button, .mat-button.mat-button.mck-square.mck-primary-button, .mck-button.mat-stroked-button.mat-stroked-button.mck-square, .mat-stroked-button.mat-stroked-button.mck-square.mck-stroked-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-warning-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-secondary-button, .mat-stroked-button.mat-stroked-button.mck-square.mck-primary-button {\\n width: 40px;\\n height: 40px;\\n }\\n}\\n.mck-primary-button.mat-button.mat-button {\\n background-color: #1F40E6;\\n}\\n.mck-primary-button.mat-button.mat-button[disabled], .mck-primary-button.mat-button.mat-button.disabled {\\n background-color: #D0D0D0;\\n color: #757575;\\n cursor: not-allowed;\\n}\\n.mck-primary-button.mat-button.mat-button[disabled] > .mat-button-wrapper.mat-button-wrapper, .mck-primary-button.mat-button.mat-button.disabled > .mat-button-wrapper.mat-button-wrapper {\\n color: #757575;\\n}\\n.mck-primary-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper {\\n color: white;\\n}\\n.mck-secondary-button.mat-stroked-button.mat-stroked-button {\\n border: 1px solid #D0D0D0;\\n border-radius: 0;\\n border: 1px solid #2251FF;\\n color: #2251FF;\\n}\\n.mck-secondary-button.mat-stroked-button.mat-stroked-button[disabled], .mck-secondary-button.mat-stroked-button.mat-stroked-button.disabled {\\n border: 1px solid #D0D0D0;\\n color: #333333;\\n cursor: not-allowed;\\n}\\n.mck-secondary-button.mat-button.mat-button {\\n background-color: white;\\n}\\n.mck-secondary-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper {\\n color: #333333;\\n}\\n.mck-warning-button.mat-button.mat-button {\\n background-color: #ffd048;\\n}\\n.mck-warning-button.mat-button.mat-button > .mat-button-wrapper.mat-button-wrapper {\\n color: black;\\n}\\n.mck-stroked-button.mat-stroked-button.mat-stroked-button {\\n border: 2px solid #B3B3B3;\\n border-radius: 0;\\n display: flex;\\n flex-direction: column;\\n justify-content: center;\\n padding-left: 1.75rem;\\n padding-right: 1.75rem;\\n}\\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short {\\n height: 32px;\\n min-width: 83px;\\n padding-left: 0.25rem;\\n padding-right: 0.25rem;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short {\\n height: 48px;\\n min-width: 155px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-short {\\n height: 48px;\\n min-width: 155px;\\n }\\n}\\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-primary {\\n border-width: 1px;\\n border-color: #1F40E6;\\n color: #1F40E6;\\n}\\n.mck-stroked-button.mat-stroked-button.mat-stroked-button.mck-thin-border-light {\\n border-color: #D0D0D0;\\n border-width: 1px;\\n}\\n.mck-stroked-button > .mat-button-wrapper.mat-button-wrapper {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n font-weight: normal;\\n color: #1F40E6;\\n}\\n.mck-toggle-button {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n border: 1px solid #B3B3B3;\\n border-color: #D0D0D0;\\n min-width: 59px;\\n background-color: white;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-toggle-button {\\n min-width: 132px;\\n padding-top: 0.5rem;\\n padding-bottom: 0.5rem;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-toggle-button {\\n min-width: 132px;\\n padding-top: 0.5rem;\\n padding-bottom: 0.5rem;\\n }\\n}\\n.mck-toggle-button-selected {\\n color: #1F40E6;\\n}\\n.mck-date-picker {\\n width: 100% !important;\\n height: 100% !important;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-date-picker {\\n max-width: 23rem;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-date-picker {\\n max-width: 23rem;\\n }\\n}\\n.mck-date-picker > .header.header {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n font-weight: 500;\\n color: #051C2C;\\n margin-top: 1.25rem;\\n}\\n.mck-date-picker > .header.header > .arrow.arrow {\\n width: 2.375rem;\\n height: 2rem;\\n}\\n.mck-date-picker > .header.header > .arrow.arrow > .icon.icon {\\n width: 1rem;\\n height: 1rem;\\n}\\n.mck-date-picker > .header.header > .arrow.arrow > .next.next {\\n background-image: url(\\\"libs/ui/src/lib/icons/arrow-forward.svg\\\");\\n}\\n.mck-date-picker > .header.header > .arrow.arrow > .previous.previous {\\n background-image: url(\\\"libs/ui/src/lib/icons/arrow-backward.svg\\\");\\n}\\n.mck-date-picker > .month {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n font-weight: 500;\\n}\\n.mck-date-picker > .week {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n font-weight: 500;\\n color: #767676;\\n}\\n.mck-date-picker > .body {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n}\\n.mck-date-picker > .body > div > div.date > .dot {\\n display: none;\\n}\\n.mck-date-picker > .body > div > div.date.disabled {\\n background-color: transparent;\\n border-radius: 0;\\n color: #767676;\\n}\\n.mck-date-picker > .body > div > div.date.active {\\n border-radius: 0;\\n background-color: #1F40E6;\\n}\\n.mck-date-picker > .body > div > div.date.non-month {\\n color: #767676;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-spacer-content-collapse-tablet {\\n display: none;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-spacer-content-collapse-tablet {\\n display: none;\\n }\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) and (max-width: 800px) {\\n .mck-spacer-content-collapse-tablet {\\n display: none;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) and (max-width: 1048px) {\\n .mck-spacer-content-collapse-tablet {\\n display: none;\\n }\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-spacer-content-expand-mobile {\\n display: none;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-spacer-content-expand-mobile {\\n display: none;\\n }\\n}\\n.mck-spacer-content-divider {\\n background-color: #E6E6E6;\\n}\\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel {\\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\\n border-radius: 0;\\n border-top: 1px solid #E6E6E6;\\n border-bottom: 1px solid #E6E6E6;\\n}\\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded {\\n background-color: #F0F0F0;\\n border-bottom: none;\\n}\\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded .mck-collapse-icon {\\n width: 24px;\\n height: 24px;\\n background-image: url(\\\"libs/ui/src/lib/icons/chevron-close.svg\\\");\\n background-size: contain;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded .mck-collapse-icon {\\n width: 48px;\\n height: 48px;\\n background-image: url(\\\"libs/ui/src/lib/icons/chevron-close-large.svg\\\");\\n background-size: contain;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel.mck-expanded .mck-collapse-icon {\\n width: 48px;\\n height: 48px;\\n background-image: url(\\\"libs/ui/src/lib/icons/chevron-close-large.svg\\\");\\n background-size: contain;\\n }\\n}\\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body {\\n padding-left: 0;\\n padding-right: 0;\\n}\\n.mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\\n font-family: \\\"McKinsey Sans\\\";\\n font-style: normal;\\n text-align: center;\\n font-size: 0.75rem;\\n line-height: 1.4;\\n padding-left: 1rem;\\n padding-right: 1rem;\\n text-align: left;\\n color: black;\\n font-weight: normal;\\n padding-bottom: 0.5rem;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\\n font-size: 1rem;\\n line-height: 1.6;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\\n font-size: 1rem;\\n line-height: 1.6;\\n }\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-expansion-panel.mat-expansion-panel.mat-expansion-panel .mat-expansion-panel-body > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n }\\n}\\n.mck-expansion-panel mat-expansion-panel-header {\\n padding-left: 1rem;\\n padding-right: 1rem;\\n}\\n.mck-expansion-panel mat-expansion-panel-header > span.mat-content {\\n align-items: center;\\n}\\n.mck-expansion-panel mat-panel-title {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n text-align: left;\\n color: black;\\n font-weight: normal;\\n}\\n.mck-expansion-panel .mck-collapse-icon {\\n width: 24px;\\n height: 24px;\\n background-image: url(\\\"libs/ui/src/lib/icons/chevron-open.svg\\\");\\n background-size: contain;\\n transform: rotate(0deg);\\n transition: transform 0.5s ease;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-expansion-panel .mck-collapse-icon {\\n width: 48px;\\n height: 48px;\\n background-image: url(\\\"libs/ui/src/lib/icons/chevron-open-large.svg\\\");\\n background-size: contain;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-expansion-panel .mck-collapse-icon {\\n width: 48px;\\n height: 48px;\\n background-image: url(\\\"libs/ui/src/lib/icons/chevron-open-large.svg\\\");\\n background-size: contain;\\n }\\n}\\n.mck-expansion-panel .mck-collapse-icon.expanded {\\n transform: rotate(180deg);\\n}\\n.mck-icon-fill-open {\\n fill: #1F40E6;\\n}\\n.mck-icon-fill-close {\\n fill: #767676;\\n}\\n.mck-icon-fill-black {\\n fill: black;\\n stroke: black;\\n}\\n.mck-icon-fill-white {\\n fill: white;\\n stroke: white;\\n}\\n.mck-icon-fill-gray {\\n fill: #333333;\\n stroke: #333333;\\n}\\n.mck-min {\\n max-width: 581px !important;\\n width: 80vw;\\n max-height: 100vh;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-min {\\n width: 100vw;\\n height: 100%;\\n max-height: 100vh;\\n }\\n .mck-min .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-min {\\n width: 100vw;\\n height: 100%;\\n max-height: 100vh;\\n }\\n .mck-min .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n}\\n.mck-noexpand {\\n max-width: 581px !important;\\n width: 80vw !important;\\n max-height: 100vh;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-noexpand {\\n width: calc(100vw - 32px) !important;\\n max-height: 100vh;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-noexpand {\\n width: calc(100vw - 32px) !important;\\n max-height: 100vh;\\n }\\n}\\n.mck-modal {\\n max-width: 800px !important;\\n width: 80vw;\\n max-height: 100vh;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-modal {\\n width: 100vw;\\n height: 100%;\\n max-height: 100vh;\\n }\\n .mck-modal .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-modal {\\n width: 100vw;\\n height: 100%;\\n max-height: 100vh;\\n }\\n .mck-modal .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n}\\n.mck-modal-mini {\\n max-width: 580px !important;\\n max-height: 100vh;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-modal-mini {\\n width: 100vw;\\n height: 100%;\\n max-height: 100vh;\\n }\\n .mck-modal-mini .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-modal-mini {\\n width: 100vw;\\n height: 100%;\\n max-height: 100vh;\\n }\\n .mck-modal-mini .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n}\\n.mck-modal-survey {\\n max-width: 691px !important;\\n max-height: 100vh;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-modal-survey .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-modal-survey .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n}\\n.mck-modal-wide {\\n max-width: 1024px !important;\\n width: 100vw;\\n height: 95vh;\\n max-height: 100vh;\\n}\\n.mck-modal-wide .mat-dialog-content {\\n background-color: #F8F9FA;\\n padding: 0 !important;\\n overflow: hidden;\\n}\\n.mck-modal-wide .mat-dialog-content .mat-icon-button[name=CloseButton] {\\n position: relative;\\n right: 32px;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-modal-wide .mat-dialog-content .mat-icon-button[name=CloseButton] .close-image {\\n height: 32px;\\n width: 32px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-modal-wide .mat-dialog-content .mat-icon-button[name=CloseButton] .close-image {\\n height: 32px;\\n width: 32px;\\n }\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-modal-wide {\\n width: 100vw;\\n height: 100%;\\n max-height: 100vh;\\n }\\n .mck-modal-wide .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-modal-wide {\\n width: 100vw;\\n height: 100%;\\n max-height: 100vh;\\n }\\n .mck-modal-wide .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n}\\n.mck-modal-wide-manage-booking {\\n max-width: 1024px !important;\\n width: 100vw;\\n max-height: 95vh;\\n}\\n.mck-modal-wide-manage-booking .mat-dialog-content {\\n background-color: #F8F9FA;\\n padding: 0 !important;\\n overflow: hidden;\\n}\\n.mck-modal-wide-manage-booking .mat-dialog-content .mat-icon-button[name=CloseButton] {\\n position: relative;\\n right: 32px;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-modal-wide-manage-booking .mat-dialog-content .mat-icon-button[name=CloseButton] .close-image {\\n height: 32px;\\n width: 32px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-modal-wide-manage-booking .mat-dialog-content .mat-icon-button[name=CloseButton] .close-image {\\n height: 32px;\\n width: 32px;\\n }\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-modal-wide-manage-booking {\\n width: 100vw;\\n height: 100%;\\n max-height: 100vh;\\n }\\n .mck-modal-wide-manage-booking .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-modal-wide-manage-booking {\\n width: 100vw;\\n height: 100%;\\n max-height: 100vh;\\n }\\n .mck-modal-wide-manage-booking .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-alert {\\n max-width: 100vw !important;\\n width: 100vw;\\n margin-left: 1rem;\\n margin-right: 1rem;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-alert {\\n max-width: 100vw !important;\\n width: 100vw;\\n margin-left: 1rem;\\n margin-right: 1rem;\\n }\\n}\\n.mck-alert-backdrop {\\n background: rgba(5, 28, 44, 0.85);\\n}\\n.mck-slide-toggle.mat-slide-toggle.mat-checked:not(.mat-disabled) .mat-slide-toggle-bar.mat-slide-toggle-bar {\\n background-color: #2251FF;\\n}\\n.mck-slide-toggle.mat-slide-toggle.mat-checked:not(.mat-disabled) .mat-slide-toggle-thumb.mat-slide-toggle-thumb {\\n background-color: white;\\n}\\n.mck-slide-toggle.mat-slide-toggle {\\n height: auto;\\n}\\n.mck-slide-toggle .mat-slide-toggle-content.mat-slide-toggle-content {\\n flex: 1;\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n text-align: left;\\n display: -webkit-box;\\n overflow: hidden;\\n -webkit-line-clamp: 2;\\n -webkit-box-orient: vertical;\\n white-space: normal;\\n}\\n.mck-slide-toggle .mat-slide-toggle-thumb.mat-slide-toggle-thumb {\\n width: 14px;\\n height: 14px;\\n transform: translate(50%, 50%);\\n}\\n.mck-slide-toggle .mat-slide-toggle-thumb-container.mat-slide-toggle-thumb-container {\\n top: -4px;\\n left: -4px;\\n}\\n.mck-slide-toggle .mat-slide-toggle-bar.mat-slide-toggle-bar {\\n height: 20px;\\n background-color: #D0D0D0;\\n border-radius: 20px;\\n}\\n.mck-skeleton {\\n background-color: #E6E6E6;\\n}\\n.mck-skeleton-checkbox {\\n float: left;\\n}\\n.mck-skeleton-checkbox > .loader.loader {\\n background-color: #E6E6E6;\\n width: 20px;\\n height: 20px;\\n margin-bottom: 0;\\n}\\n.mck-skeleton-header > .loader.loader {\\n background-color: #E6E6E6;\\n width: 100vw;\\n margin-bottom: 0;\\n max-width: 215px;\\n}\\n.mck-skeleton-image > .loader.loader {\\n background-color: #E6E6E6;\\n width: 81px;\\n height: 82px;\\n margin-bottom: 0;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 800px) {\\n .mck-skeleton-image > .loader.loader {\\n width: 219px;\\n height: 119px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\\n .mck-skeleton-image > .loader.loader {\\n width: 219px;\\n height: 119px;\\n }\\n}\\n.mck-skeleton-status > .loader.loader {\\n background-color: #E6E6E6;\\n width: 117px;\\n height: 78px;\\n margin-top: 10px;\\n margin-bottom: 0;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 800px) {\\n .mck-skeleton-status > .loader.loader {\\n width: 117px;\\n height: 78px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 1048px) {\\n .mck-skeleton-status > .loader.loader {\\n width: 117px;\\n height: 78px;\\n }\\n}\\n.mck-skeleton-line-1 > .loader.loader {\\n background-color: #E6E6E6;\\n height: 23px;\\n max-width: 176px;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-skeleton-line-1 > .loader.loader {\\n max-width: 219px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-skeleton-line-1 > .loader.loader {\\n max-width: 219px;\\n }\\n}\\n.mck-skeleton-line-2 > .loader.loader {\\n background-color: #E6E6E6;\\n height: 18px;\\n max-width: 165px;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-skeleton-line-2 > .loader.loader {\\n max-width: 189px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-skeleton-line-2 > .loader.loader {\\n max-width: 189px;\\n }\\n}\\n.mck-skeleton-line-3 > .loader.loader {\\n background-color: #E6E6E6;\\n height: 18px;\\n max-width: 147px;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-skeleton-line-3 > .loader.loader {\\n max-width: 189px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-skeleton-line-3 > .loader.loader {\\n max-width: 189px;\\n }\\n}\\n.mck-skeleton-line-30p > .loader.loader, .mck-skeleton-line-30p-thin > .loader.loader {\\n background-color: #E6E6E6;\\n height: 18px;\\n max-width: 30%;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-skeleton-line-30p > .loader.loader, .mck-skeleton-line-30p-thin > .loader.loader {\\n max-width: 30%;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-skeleton-line-30p > .loader.loader, .mck-skeleton-line-30p-thin > .loader.loader {\\n max-width: 30%;\\n }\\n}\\n.mck-skeleton-line-30p-thin > .loader.loader, .mck-skeleton-line-30p-thin-thin > .loader.loader {\\n height: 16px;\\n margin-bottom: 4px;\\n}\\n.mck-skeleton-line-45p > .loader.loader, .mck-skeleton-line-45p-thin > .loader.loader {\\n background-color: #E6E6E6;\\n height: 18px;\\n max-width: 45%;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-skeleton-line-45p > .loader.loader, .mck-skeleton-line-45p-thin > .loader.loader {\\n max-width: 45%;\\n margin-right: 45%;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-skeleton-line-45p > .loader.loader, .mck-skeleton-line-45p-thin > .loader.loader {\\n max-width: 45%;\\n margin-right: 45%;\\n }\\n}\\n.mck-skeleton-line-45p-thin > .loader.loader, .mck-skeleton-line-45p-thin-thin > .loader.loader {\\n height: 16px;\\n margin-bottom: 4px;\\n}\\n.mck-skeleton-line-50p > .loader.loader, .mck-skeleton-line-50p-thin > .loader.loader, .mck-skeleton-line-50p-thick > .loader.loader {\\n background-color: #E6E6E6;\\n height: 18px;\\n max-width: 50%;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-skeleton-line-50p > .loader.loader, .mck-skeleton-line-50p-thin > .loader.loader, .mck-skeleton-line-50p-thick > .loader.loader {\\n max-width: 50%;\\n margin-right: 45%;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-skeleton-line-50p > .loader.loader, .mck-skeleton-line-50p-thin > .loader.loader, .mck-skeleton-line-50p-thick > .loader.loader {\\n max-width: 50%;\\n margin-right: 45%;\\n }\\n}\\n.mck-skeleton-line-50p-thin > .loader.loader, .mck-skeleton-line-50p-thin-thin > .loader.loader, .mck-skeleton-line-50p-thick-thin > .loader.loader {\\n height: 16px;\\n margin-bottom: 4px;\\n}\\n.mck-skeleton-line-50p-thick > .loader.loader, .mck-skeleton-line-50p-thin-thick > .loader.loader, .mck-skeleton-line-50p-thick-thick > .loader.loader {\\n height: 32px;\\n margin-bottom: 4px;\\n}\\n.mck-skeleton-line-60p > .loader.loader, .mck-skeleton-line-60p-thin > .loader.loader, .mck-skeleton-line-60p-thick > .loader.loader {\\n background-color: #E6E6E6;\\n height: 18px;\\n max-width: 60%;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-skeleton-line-60p > .loader.loader, .mck-skeleton-line-60p-thin > .loader.loader, .mck-skeleton-line-60p-thick > .loader.loader {\\n max-width: 60%;\\n margin-right: 35%;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-skeleton-line-60p > .loader.loader, .mck-skeleton-line-60p-thin > .loader.loader, .mck-skeleton-line-60p-thick > .loader.loader {\\n max-width: 60%;\\n margin-right: 35%;\\n }\\n}\\n.mck-skeleton-line-60p-thin > .loader.loader, .mck-skeleton-line-60p-thin-thin > .loader.loader, .mck-skeleton-line-60p-thick-thin > .loader.loader {\\n height: 16px;\\n margin-bottom: 4px;\\n}\\n.mck-skeleton-line-60p-thick > .loader.loader, .mck-skeleton-line-60p-thin-thick > .loader.loader, .mck-skeleton-line-60p-thick-thick > .loader.loader {\\n height: 32px;\\n margin-bottom: 4px;\\n}\\n.mck-skeleton-line-70p > .loader.loader, .mck-skeleton-line-70p-thin > .loader.loader, .mck-skeleton-line-70p-thick > .loader.loader {\\n background-color: #E6E6E6;\\n height: 18px;\\n max-width: 70%;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-skeleton-line-70p > .loader.loader, .mck-skeleton-line-70p-thin > .loader.loader, .mck-skeleton-line-70p-thick > .loader.loader {\\n max-width: 70%;\\n margin-right: 25%;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-skeleton-line-70p > .loader.loader, .mck-skeleton-line-70p-thin > .loader.loader, .mck-skeleton-line-70p-thick > .loader.loader {\\n max-width: 70%;\\n margin-right: 25%;\\n }\\n}\\n.mck-skeleton-line-70p-thin > .loader.loader, .mck-skeleton-line-70p-thin-thin > .loader.loader, .mck-skeleton-line-70p-thick-thin > .loader.loader {\\n height: 16px;\\n margin-bottom: 4px;\\n}\\n.mck-skeleton-line-70p-thick > .loader.loader, .mck-skeleton-line-70p-thin-thick > .loader.loader, .mck-skeleton-line-70p-thick-thick > .loader.loader {\\n height: 32px;\\n margin-bottom: 4px;\\n}\\n.mck-skeleton-line-80p > .loader.loader, .mck-skeleton-line-80p-thin > .loader.loader, .mck-skeleton-line-80p-thick > .loader.loader {\\n background-color: #E6E6E6;\\n height: 18px;\\n max-width: 80%;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-skeleton-line-80p > .loader.loader, .mck-skeleton-line-80p-thin > .loader.loader, .mck-skeleton-line-80p-thick > .loader.loader {\\n max-width: 80%;\\n margin-right: 15%;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-skeleton-line-80p > .loader.loader, .mck-skeleton-line-80p-thin > .loader.loader, .mck-skeleton-line-80p-thick > .loader.loader {\\n max-width: 80%;\\n margin-right: 15%;\\n }\\n}\\n.mck-skeleton-line-80p-thin > .loader.loader, .mck-skeleton-line-80p-thin-thin > .loader.loader, .mck-skeleton-line-80p-thick-thin > .loader.loader {\\n height: 16px;\\n margin-bottom: 4px;\\n}\\n.mck-skeleton-line-80p-thick > .loader.loader, .mck-skeleton-line-80p-thin-thick > .loader.loader, .mck-skeleton-line-80p-thick-thick > .loader.loader {\\n height: 32px;\\n margin-bottom: 4px;\\n}\\n.mck-skeleton-line-90p > .loader.loader, .mck-skeleton-line-90p-thin > .loader.loader {\\n background-color: #E6E6E6;\\n height: 18px;\\n max-width: 90%;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-skeleton-line-90p > .loader.loader, .mck-skeleton-line-90p-thin > .loader.loader {\\n max-width: 90%;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-skeleton-line-90p > .loader.loader, .mck-skeleton-line-90p-thin > .loader.loader {\\n max-width: 90%;\\n }\\n}\\n.mck-skeleton-line-90p-thin > .loader.loader, .mck-skeleton-line-90p-thin-thin > .loader.loader {\\n height: 16px;\\n margin-bottom: 4px;\\n}\\n.mck-skeleton-load-more > .loader.loader {\\n background-color: #E6E6E6;\\n margin-top: 0.5rem;\\n margin-bottom: 0.5rem;\\n width: calc(100vw - (2 * 1rem));\\n height: 40px;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-skeleton-load-more > .loader.loader {\\n max-width: 320px;\\n height: 50px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-skeleton-load-more > .loader.loader {\\n max-width: 320px;\\n height: 50px;\\n }\\n}\\n.mck-skeleton-load-more-100p > .loader.loader, .mck-skeleton-header > .loader.loader, .mck-skeleton-room-availability > .loader.loader {\\n background-color: #E6E6E6;\\n margin-top: 0.5rem;\\n margin-bottom: 0.5rem;\\n width: calc(100vw - (2 * 1rem));\\n height: 40px;\\n max-width: none;\\n width: 100%;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-skeleton-load-more-100p > .loader.loader, .mck-skeleton-header > .loader.loader, .mck-skeleton-room-availability > .loader.loader {\\n max-width: none;\\n width: 100%;\\n height: 50px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-skeleton-load-more-100p > .loader.loader, .mck-skeleton-header > .loader.loader, .mck-skeleton-room-availability > .loader.loader {\\n max-width: none;\\n width: 100%;\\n height: 50px;\\n }\\n}\\n.mck-skeleton-load-more-100p > .loader.loader-room-availability > .loader.loader, .mck-skeleton-header > .loader.loader-room-availability > .loader.loader, .mck-skeleton-room-availability > .loader.loader-room-availability > .loader.loader {\\n height: 124px;\\n margin-bottom: 4px;\\n}\\n\\n.mck-heading-5 {\\n font-family: \\\"McKinsey Sans\\\";\\n font-style: normal;\\n text-align: center;\\n font-size: 1.5rem;\\n line-height: 1.333;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .mck-heading-5 {\\n font-size: 1.75rem;\\n line-height: 1.142;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .mck-heading-5 {\\n font-size: 1.75rem;\\n line-height: 1.142;\\n }\\n}\\n\\nngx-mat-select-search .mat-select-search-no-entries-found {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n text-align: left;\\n}\\nngx-mat-select-search .mat-select-search-input {\\n font-style: normal;\\n text-align: center;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n text-align: left;\\n}\\nngx-mat-select-search button.mat-button.mat-select-search-clear {\\n background-color: transparent;\\n border: none;\\n color: black;\\n}\\n\\n::-webkit-scrollbar {\\n width: 16px;\\n height: 18px;\\n}\\n\\n::-webkit-scrollbar-thumb {\\n height: 1.5rem;\\n border: 4px solid rgba(0, 0, 0, 0);\\n background-clip: padding-box;\\n border-radius: 8px;\\n background-color: #757575;\\n -webkit-box-shadow: inset -1px -1px 0px rgba(0, 0, 0, 0.05), inset 1px 1px 0px rgba(0, 0, 0, 0.05);\\n}\\n\\n::-webkit-scrollbar-button {\\n width: 0;\\n height: 0;\\n display: none;\\n}\\n\\n::-webkit-scrollbar-corner {\\n background-color: transparent;\\n}\\n\\nheader {\\n z-index: 2;\\n}\\n\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mb-block {\\n display: block;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mb-block {\\n display: block;\\n }\\n}\\n\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mb-bottom {\\n padding-bottom: 110px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mb-bottom {\\n padding-bottom: 110px;\\n }\\n}\\n\\n.map-filters-container .mck-form-input mat-form-field .mat-form-field-infix {\\n top: 5px;\\n}\\n.map-filters-container .mck-form-input mat-form-field .mat-form-field-outline {\\n height: 48px;\\n background-color: white;\\n}\\n.map-filters-container .mck-form-input mat-form-field .mat-form-field-infix {\\n padding-top: 0.5rem !important;\\n}\\n\\n.office-level-row .mat-select-placeholder {\\n color: #333333;\\n font-family: \\\"McKinsey Sans\\\";\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .office-level-row .legend-container .mat-form-field-outline, .office-level-row .mat-form-field-infix {\\n height: 45px !important;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .office-level-row .legend-container .mat-form-field-outline, .office-level-row .mat-form-field-infix {\\n height: 45px !important;\\n }\\n}\\n.office-level-row .select-divider {\\n display: block;\\n top: 0 !important;\\n width: 44px !important;\\n right: -11px !important;\\n background: transparent !important;\\n border-width: 0 0 0 1px;\\n border-color: #c6c6c6;\\n border-style: solid;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .office-level-row .select-divider {\\n height: calc(100% - 1px) !important;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .office-level-row .select-divider {\\n height: calc(100% - 1px) !important;\\n }\\n}\\n.office-level-row .disabled .select-divider {\\n background: #F0F0F0 !important;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 451px) {\\n .office-level-row .disabled .select-divider {\\n height: calc(100% - 2px) !important;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 801px) {\\n .office-level-row .disabled .select-divider {\\n height: calc(100% - 2px) !important;\\n }\\n}\\n.office-level-row .disabled .select-chevron {\\n opacity: 0.5;\\n margin-left: 10px;\\n}\\n\\n.office-level-row .legend-container .mat-form-field-outline, .office-level-row .mat-form-field-infix, .map-controls .legend-container .mat-form-field-outline, .map-controls .mat-form-field-infix {\\n display: flex !important;\\n width: 100% !important;\\n justify-content: space-between !important;\\n}\\n\\n.booking-form-container {\\n overflow-y: auto;\\n max-height: calc(100vh - 345px);\\n}\\n\\n.booking-form-container .mck-form-input mat-label, .booking-form-container .mck-form-input .mat-radio-label-content {\\n font-family: \\\"McKinsey Sans\\\" !important;\\n color: #333333;\\n}\\n.booking-form-container .mck-form-input input, .booking-form-container .mck-form-input input::placeholder {\\n font-family: \\\"McKinsey Sans\\\";\\n color: #B3B3B3;\\n}\\n\\n/*\\nStart Angular Calendar\\n*/\\n.cal-week-view {\\n /* stylelint-disable-next-line selector-type-no-unknown */\\n}\\n\\n.cal-week-view * {\\n -webkit-box-sizing: border-box;\\n box-sizing: border-box;\\n}\\n\\n.cal-week-view .cal-day-headers {\\n display: -webkit-box;\\n display: -ms-flexbox;\\n -js-display: flex;\\n display: flex;\\n padding-left: 70px;\\n border: 1px solid;\\n}\\n\\n.cal-week-view .cal-day-headers .cal-header {\\n -webkit-box-flex: 1;\\n -ms-flex: 1;\\n flex: 1;\\n text-align: left;\\n padding: 12px;\\n margin-top: 20px;\\n font-family: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n font-size: 16px;\\n font-weight: 400;\\n}\\n.cal-week-view .cal-day-headers .cal-header p {\\n font-size: 16px;\\n font-weight: 300;\\n margin: 0;\\n}\\n.cal-week-view .cal-day-headers .cal-header.show-weekend {\\n font-size: 12px;\\n}\\n.cal-week-view .cal-day-headers .cal-header.show-weekend p {\\n font-size: 12px;\\n}\\n\\n.cal-week-view .cal-day-headers .cal-header:not(:last-child) {\\n border-right: 1px solid;\\n}\\n\\n.cal-week-view .cal-day-headers .cal-header:first-child {\\n border-left: 1px solid;\\n}\\n\\n.cal-week-view .cal-day-headers span {\\n font-weight: 400;\\n opacity: 0.5;\\n}\\n\\n.cal-week-view .cal-day-column {\\n -webkit-box-flex: 1;\\n -ms-flex-positive: 1;\\n flex-grow: 1;\\n border-left: solid 1px;\\n padding-top: 5px;\\n}\\n\\n.cal-week-view .cal-event {\\n font-size: 12px;\\n border: 1px solid;\\n outline: none;\\n}\\n.cal-week-view .cal-event .berry {\\n position: absolute;\\n left: calc(50% - 7px);\\n display: none;\\n height: 14px;\\n width: 14px;\\n background-color: #00A9F4;\\n border-radius: 50%;\\n}\\n.cal-week-view .cal-event .berry.top {\\n top: -7px;\\n}\\n.cal-week-view .cal-event .berry.bot {\\n bottom: -7px;\\n}\\n.cal-week-view .cal-event .bumper {\\n position: absolute;\\n left: 3px;\\n display: block;\\n width: calc(100% - 6px);\\n border-radius: 3px;\\n z-index: -1;\\n opacity: 0.6;\\n}\\n.cal-week-view .cal-event.expanded:focus {\\n border-style: dashed;\\n border-width: 2px;\\n outline: none;\\n}\\n.cal-week-view .cal-event.expanded:focus .berry {\\n display: block;\\n}\\n\\n.cal-week-view .cal-time-label-column {\\n width: 70px;\\n height: 100%;\\n}\\n\\n.cal-week-view .cal-current-time-marker {\\n position: absolute;\\n width: 100%;\\n height: 2px;\\n z-index: 2;\\n}\\n\\n.cal-week-view .cal-all-day-events {\\n border: solid 1px;\\n border-top: 0;\\n border-bottom-width: 3px;\\n padding-top: 3px;\\n position: relative;\\n}\\n\\n.cal-week-view .cal-all-day-events .cal-day-columns {\\n height: 100%;\\n width: 100%;\\n display: -webkit-box;\\n display: -ms-flexbox;\\n -js-display: flex;\\n display: flex;\\n position: absolute;\\n top: 0;\\n z-index: 0;\\n}\\n\\n.cal-week-view .cal-all-day-events .cal-events-row {\\n position: relative;\\n height: 31px;\\n margin-left: 70px;\\n}\\n\\n.cal-week-view .cal-all-day-events .cal-event-container {\\n display: inline-block;\\n position: absolute;\\n}\\n\\n.cal-week-view .cal-all-day-events .cal-event-container.resize-active {\\n z-index: 1;\\n pointer-events: none;\\n}\\n\\n.cal-week-view .cal-all-day-events .cal-event {\\n padding: 0 5px;\\n margin-left: 2px;\\n margin-right: 2px;\\n height: 28px;\\n line-height: 28px;\\n}\\n\\n.cal-week-view .cal-all-day-events .cal-time-label-column {\\n display: -webkit-box;\\n display: -ms-flexbox;\\n -js-display: flex;\\n display: flex;\\n -webkit-box-align: center;\\n -ms-flex-align: center;\\n align-items: center;\\n -webkit-box-pack: center;\\n -ms-flex-pack: center;\\n justify-content: center;\\n font-size: 14px;\\n}\\n\\n.cal-week-view .cal-all-day-events .cal-resize-handle {\\n width: 6px;\\n height: 100%;\\n cursor: col-resize;\\n position: absolute;\\n top: 0;\\n}\\n\\n.cal-week-view .cal-all-day-events .cal-resize-handle.cal-resize-handle-after-end {\\n right: 0;\\n}\\n\\n.cal-week-view .cal-event,\\n.cal-week-view .cal-header {\\n overflow: hidden;\\n -o-text-overflow: ellipsis;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n\\n.cal-week-view .cal-drag-active {\\n pointer-events: none;\\n z-index: 1;\\n}\\n\\n.cal-week-view .cal-drag-active * {\\n pointer-events: none;\\n}\\n\\n.cal-week-view .cal-time-events {\\n position: relative;\\n border: solid 1px;\\n border-top: 0;\\n display: -webkit-box;\\n display: -ms-flexbox;\\n -js-display: flex;\\n display: flex;\\n}\\n\\n.cal-week-view .cal-time-events .cal-day-columns {\\n display: -webkit-box;\\n display: -ms-flexbox;\\n -js-display: flex;\\n display: flex;\\n -webkit-box-flex: 1;\\n -ms-flex-positive: 1;\\n flex-grow: 1;\\n /*\\n First and last item's hour visibility adjustment in the list \\n */\\n}\\n.cal-week-view .cal-time-events .cal-day-columns .cal-hour:nth-of-type(2) .cal-time, .cal-week-view .cal-time-events .cal-day-columns .cal-hour:nth-of-type(8) .cal-time {\\n top: -9px;\\n}\\n\\n.cal-week-view .cal-time-events .cal-day-column {\\n position: relative;\\n}\\n\\n.cal-week-view .cal-time-events .cal-events-container {\\n position: relative;\\n}\\n\\n.cal-week-view .cal-time-events .cal-event-container {\\n position: absolute;\\n z-index: 1;\\n}\\n\\n.cal-week-view .cal-time-events .cal-event {\\n overflow: visible;\\n width: 103%;\\n height: calc(100% - 2px);\\n margin: 1px;\\n padding: 0 5px;\\n line-height: 25px;\\n left: -3%;\\n position: relative;\\n}\\n\\n.expanded .cal-week-view .cal-time-events .cal-event {\\n width: 100%;\\n left: 0%;\\n}\\n\\n.cal-week-view .cal-time-events .cal-resize-handle {\\n width: 100%;\\n height: 8px;\\n cursor: row-resize;\\n position: absolute;\\n z-index: 10;\\n}\\n\\n.cal-week-view .cal-time-events .cal-resize-handle.cal-resize-handle-after-end {\\n bottom: -4px;\\n}\\n\\n.cal-week-view .cal-time-events .cal-resize-handle.cal-resize-handle-before-start {\\n top: -4px;\\n}\\n\\n.cal-week-view .cal-hour-segment {\\n position: relative;\\n}\\n\\n.cal-week-view .cal-hour-segment::after {\\n content: \\\" \\\";\\n}\\n\\n.cal-week-view .cal-draggable {\\n cursor: move;\\n}\\n\\n.cal-week-view mwl-calendar-week-view-hour-segment,\\n.cal-week-view .cal-hour-segment {\\n display: block;\\n}\\n\\n.cal-week-view .cal-hour .cal-time {\\n z-index: 2;\\n position: relative;\\n top: -14px;\\n background-color: #f4f4f4;\\n height: 5rem;\\n width: 4rem;\\n border-right: 1px solid #A19F9F;\\n border-width: thin;\\n}\\n.cal-week-view .cal-hour .cal-hour-start {\\n border: none !important;\\n}\\n\\n.expanded .cal-week-view .cal-hour .cal-time {\\n background-color: #f8f9fa;\\n width: 4.44rem;\\n}\\n\\n.cal-week-view .cal-hour:not(:last-child) .cal-hour-segment,\\n.cal-week-view .cal-hour:last-child :not(:last-child) .cal-hour-segment {\\n border-bottom: thin solid;\\n border-color: #DBDBDB;\\n}\\n\\n.cal-week-view .cal-time {\\n font-weight: bold;\\n padding-top: 5px;\\n width: 70px;\\n text-align: center;\\n}\\n\\n.cal-week-view .cal-hour-segment.cal-after-hour-start .cal-time {\\n display: none;\\n}\\n\\n.cal-week-view {\\n background-color: #fff;\\n border-top: solid 1px #e1e1e1;\\n}\\n\\n.cal-week-view .cal-day-headers {\\n border-color: #e1e1e1;\\n border-top: 0;\\n border-left-width: 0;\\n border-right-width: 0;\\n}\\n\\n.cal-week-view .cal-day-headers .cal-header:not(:last-child) {\\n border-right-color: #e1e1e1;\\n}\\n\\n.cal-week-view .cal-day-headers .cal-header:first-child {\\n border-left-color: #e1e1e1;\\n}\\n\\n.cal-week-view .cal-day-column {\\n border-left-color: #e1e1e1;\\n}\\n\\n.cal-week-view .cal-event {\\n background-color: #d1e8ff;\\n border-color: #1e90ff;\\n color: #1e90ff;\\n}\\n\\n.cal-week-view .cal-all-day-events {\\n border-color: #e1e1e1;\\n}\\n\\n.cal-week-view .cal-header.cal-event-date {\\n color: #2251FF;\\n}\\n\\n.cal-week-view .cal-header.cal-weekend span {\\n color: #8b0000;\\n}\\n\\n.cal-week-view .cal-time-events {\\n border-color: #e1e1e1;\\n}\\n\\n.expanded .cal-week-view .cal-time-events .cal-day-columns:not(.cal-resize-active) .cal-hour-segment:hover {\\n background-color: #C0DBF5;\\n}\\n\\n.cal-week-view .cal-hour-odd {\\n background-color: #fafafa;\\n}\\n\\n.cal-week-view .cal-drag-over .cal-hour-segment {\\n background-color: #ededed;\\n}\\n\\n.cal-week-view .cal-hour:not(:last-child) .cal-hour-segment,\\n.cal-week-view .cal-hour:last-child :not(:last-child) .cal-hour-segment {\\n border-bottom-color: #e1e1e1;\\n}\\n\\n.cal-week-view .cal-current-time-marker {\\n display: none;\\n}\\n\\n.cal-day-view mwl-calendar-week-view-header {\\n display: none;\\n}\\n\\n.cal-day-view .cal-events-container {\\n margin-left: 70px;\\n}\\n\\n.cal-day-view .cal-day-column {\\n border-left: 0;\\n}\\n\\n.cal-day-view .cal-current-time-marker {\\n margin-left: 70px;\\n width: calc(100% - 70px);\\n}\\n\\n.cal-tooltip {\\n position: absolute;\\n z-index: 1070;\\n display: block;\\n font-style: normal;\\n font-weight: normal;\\n letter-spacing: normal;\\n line-break: auto;\\n line-height: 1.5;\\n text-align: start;\\n text-decoration: none;\\n text-shadow: none;\\n text-transform: none;\\n white-space: normal;\\n word-break: normal;\\n word-spacing: normal;\\n font-size: 14px;\\n word-wrap: break-word;\\n opacity: 0.9;\\n margin-bottom: 4px;\\n}\\n\\n.cal-tooltip.cal-tooltip-top {\\n padding: 5px 0;\\n margin-top: -3px;\\n}\\n\\n.cal-tooltip.cal-tooltip-top .cal-tooltip-arrow {\\n bottom: 0;\\n left: 50%;\\n margin-left: -5px;\\n border-width: 5px 5px 0;\\n}\\n\\n.cal-tooltip.cal-tooltip-right {\\n padding: 0 5px;\\n margin-left: 3px;\\n}\\n\\n.cal-tooltip.cal-tooltip-right .cal-tooltip-arrow {\\n top: 50%;\\n left: 0;\\n margin-top: -5px;\\n border-width: 5px 5px 5px 0;\\n}\\n\\n.cal-tooltip.cal-tooltip-bottom {\\n padding: 5px 0;\\n margin-top: 3px;\\n}\\n\\n.cal-tooltip.cal-tooltip-bottom .cal-tooltip-arrow {\\n top: 0;\\n left: 50%;\\n margin-left: -5px;\\n border-width: 0 5px 5px;\\n}\\n\\n.cal-tooltip.cal-tooltip-left {\\n padding: 0 5px;\\n margin-left: -3px;\\n}\\n\\n.cal-tooltip.cal-tooltip-left .cal-tooltip-arrow {\\n top: 50%;\\n right: 0;\\n margin-top: -5px;\\n border-width: 5px 0 5px 5px;\\n}\\n\\n.cal-tooltip-inner {\\n max-width: 200px;\\n padding: 3px 8px;\\n text-align: center;\\n border-radius: 0.25rem;\\n}\\n\\n.cal-tooltip-arrow {\\n position: absolute;\\n width: 0;\\n height: 0;\\n border-color: transparent;\\n border-style: solid;\\n}\\n\\n.cal-tooltip.cal-tooltip-top .cal-tooltip-arrow {\\n border-top-color: #fff;\\n}\\n\\n.cal-tooltip.cal-tooltip-right .cal-tooltip-arrow {\\n border-right-color: #fff;\\n}\\n\\n.cal-tooltip.cal-tooltip-bottom .cal-tooltip-arrow {\\n border-bottom-color: #fff;\\n}\\n\\n.cal-tooltip.cal-tooltip-left .cal-tooltip-arrow {\\n border-left-color: #fff;\\n}\\n\\n.cal-tooltip-inner {\\n padding: 10px;\\n color: #000;\\n background-color: #fff;\\n box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.2);\\n}\\n\\n.cal-event-container .cal-event {\\n border-radius: 0 !important;\\n}\\n.cal-event-container .cal-event .cal-event-title {\\n font-size: 14px;\\n font-weight: 400;\\n padding: 10px 14px;\\n color: black;\\n display: block;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .cal-event-container .cal-event .cal-event-title {\\n font-size: 12px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .cal-event-container .cal-event .cal-event-title {\\n font-size: 12px;\\n }\\n}\\n.cal-event-container.selected {\\n width: 100% !important;\\n left: 0% !important;\\n z-index: 2 !important;\\n}\\n.cal-event-container.selected .cal-event {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n}\\n.cal-event-container.selected .cal-event .cal-event-title {\\n white-space: pre-wrap;\\n text-align: center;\\n}\\n.cal-event-container.selected.mobile {\\n left: 0% !important;\\n width: 100% !important;\\n}\\n.cal-event-container.selected.minimal .cal-event-title {\\n top: 0;\\n transform: none;\\n}\\n.cal-event-container.mobile {\\n left: 0% !important;\\n width: 100% !important;\\n}\\n.cal-event-container.booked {\\n width: 100% !important;\\n left: 0% !important;\\n}\\n.cal-event-container.booked .cal-event .cal-event-title {\\n width: 100%;\\n}\\n.cal-event-container.booked.mobile {\\n left: 0% !important;\\n width: 100% !important;\\n}\\n.cal-event-container.booked.minimal .cal-event-title {\\n padding: 1px 14px;\\n}\\n.cal-event-container.show-weekend .cal-event .cal-event-title {\\n font-size: 13px;\\n}\\n\\n.cal-week-view {\\n position: relative;\\n}\\n.cal-week-view .cal-time {\\n font-weight: 400;\\n}\\n.cal-week-view .cal-hour {\\n background-color: #ffffff;\\n}\\n.cal-week-view .cal-hour-odd {\\n background-color: #ffffff;\\n}\\n.cal-week-view .cal-time-events {\\n background-color: #ffffff;\\n}\\n\\n.cal-week-view .cal-day-headers {\\n position: fixed;\\n width: 100%;\\n max-width: 1008px;\\n background: #F8F9FA;\\n z-index: 3;\\n height: 82px;\\n}\\n@media only screen and (orientation: portrait) and (min-width: 801px) and (max-width: 1024px) {\\n .cal-week-view .cal-day-headers {\\n width: 100%;\\n }\\n}\\n@media only screen and (orientation: landscape) and (min-width: 1049px) and (max-width: 1280px) {\\n .cal-week-view .cal-day-headers {\\n width: 100%;\\n }\\n}\\n\\n.expanded .cal-week-view .cal-time-events {\\n padding-top: 87px;\\n position: relative;\\n top: 1px;\\n z-index: 1;\\n border: 1px solid #f0f0f0;\\n}\\n.expanded .cal-event-container.mobile {\\n left: 20% !important;\\n width: 80% !important;\\n}\\n\\n/*\\nEnd Start Angular Calendar\\n*/\\n.mat-ripple-element {\\n background-color: rgba(0, 0, 0, 0.1);\\n}\\n\\n.mat-option {\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-option:hover:not(.mat-option-disabled), .mat-option:focus:not(.mat-option-disabled) {\\n background: rgba(0, 0, 0, 0.04);\\n}\\n.mat-option.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled) {\\n background: rgba(0, 0, 0, 0.04);\\n}\\n.mat-option.mat-active {\\n background: rgba(0, 0, 0, 0.04);\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-option.mat-option-disabled {\\n color: rgba(0, 0, 0, 0.38);\\n}\\n\\n.mat-primary .mat-option.mat-selected:not(.mat-option-disabled) {\\n color: #3f51b5;\\n}\\n\\n.mat-accent .mat-option.mat-selected:not(.mat-option-disabled) {\\n color: #448aff;\\n}\\n\\n.mat-warn .mat-option.mat-selected:not(.mat-option-disabled) {\\n color: #f44336;\\n}\\n\\n.mat-optgroup-label {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n\\n.mat-optgroup-disabled .mat-optgroup-label {\\n color: rgba(0, 0, 0, 0.38);\\n}\\n\\n.mat-pseudo-checkbox {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n.mat-pseudo-checkbox::after {\\n color: #fafafa;\\n}\\n\\n.mat-pseudo-checkbox-disabled {\\n color: #b0b0b0;\\n}\\n\\n.mat-primary .mat-pseudo-checkbox-checked,\\n.mat-primary .mat-pseudo-checkbox-indeterminate {\\n background: #3f51b5;\\n}\\n\\n.mat-pseudo-checkbox-checked,\\n.mat-pseudo-checkbox-indeterminate,\\n.mat-accent .mat-pseudo-checkbox-checked,\\n.mat-accent .mat-pseudo-checkbox-indeterminate {\\n background: #448aff;\\n}\\n\\n.mat-warn .mat-pseudo-checkbox-checked,\\n.mat-warn .mat-pseudo-checkbox-indeterminate {\\n background: #f44336;\\n}\\n\\n.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,\\n.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled {\\n background: #b0b0b0;\\n}\\n\\n.mat-elevation-z0 {\\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-elevation-z1 {\\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-elevation-z2 {\\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-elevation-z3 {\\n box-shadow: 0px 3px 3px -2px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 0, 0, 0.14), 0px 1px 8px 0px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-elevation-z4 {\\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-elevation-z5 {\\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 5px 8px 0px rgba(0, 0, 0, 0.14), 0px 1px 14px 0px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-elevation-z6 {\\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-elevation-z7 {\\n box-shadow: 0px 4px 5px -2px rgba(0, 0, 0, 0.2), 0px 7px 10px 1px rgba(0, 0, 0, 0.14), 0px 2px 16px 1px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-elevation-z8 {\\n box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-elevation-z9 {\\n box-shadow: 0px 5px 6px -3px rgba(0, 0, 0, 0.2), 0px 9px 12px 1px rgba(0, 0, 0, 0.14), 0px 3px 16px 2px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-elevation-z10 {\\n box-shadow: 0px 6px 6px -3px rgba(0, 0, 0, 0.2), 0px 10px 14px 1px rgba(0, 0, 0, 0.14), 0px 4px 18px 3px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-elevation-z11 {\\n box-shadow: 0px 6px 7px -4px rgba(0, 0, 0, 0.2), 0px 11px 15px 1px rgba(0, 0, 0, 0.14), 0px 4px 20px 3px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-elevation-z12 {\\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-elevation-z13 {\\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 13px 19px 2px rgba(0, 0, 0, 0.14), 0px 5px 24px 4px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-elevation-z14 {\\n box-shadow: 0px 7px 9px -4px rgba(0, 0, 0, 0.2), 0px 14px 21px 2px rgba(0, 0, 0, 0.14), 0px 5px 26px 4px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-elevation-z15 {\\n box-shadow: 0px 8px 9px -5px rgba(0, 0, 0, 0.2), 0px 15px 22px 2px rgba(0, 0, 0, 0.14), 0px 6px 28px 5px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-elevation-z16 {\\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-elevation-z17 {\\n box-shadow: 0px 8px 11px -5px rgba(0, 0, 0, 0.2), 0px 17px 26px 2px rgba(0, 0, 0, 0.14), 0px 6px 32px 5px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-elevation-z18 {\\n box-shadow: 0px 9px 11px -5px rgba(0, 0, 0, 0.2), 0px 18px 28px 2px rgba(0, 0, 0, 0.14), 0px 7px 34px 6px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-elevation-z19 {\\n box-shadow: 0px 9px 12px -6px rgba(0, 0, 0, 0.2), 0px 19px 29px 2px rgba(0, 0, 0, 0.14), 0px 7px 36px 6px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-elevation-z20 {\\n box-shadow: 0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 20px 31px 3px rgba(0, 0, 0, 0.14), 0px 8px 38px 7px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-elevation-z21 {\\n box-shadow: 0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 21px 33px 3px rgba(0, 0, 0, 0.14), 0px 8px 40px 7px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-elevation-z22 {\\n box-shadow: 0px 10px 14px -6px rgba(0, 0, 0, 0.2), 0px 22px 35px 3px rgba(0, 0, 0, 0.14), 0px 8px 42px 7px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-elevation-z23 {\\n box-shadow: 0px 11px 14px -7px rgba(0, 0, 0, 0.2), 0px 23px 36px 3px rgba(0, 0, 0, 0.14), 0px 9px 44px 8px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-elevation-z24 {\\n box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-app-background {\\n background-color: #fafafa;\\n color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.mat-theme-loaded-marker {\\n display: none;\\n}\\n\\n.mat-autocomplete-panel {\\n background: white;\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-autocomplete-panel:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover) {\\n background: white;\\n}\\n.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover):not(.mat-option-disabled) {\\n color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.mat-badge-content {\\n color: white;\\n background: #3f51b5;\\n}\\n.cdk-high-contrast-active .mat-badge-content {\\n outline: solid 1px;\\n border-radius: 0;\\n}\\n\\n.mat-badge-accent .mat-badge-content {\\n background: #448aff;\\n color: white;\\n}\\n\\n.mat-badge-warn .mat-badge-content {\\n color: white;\\n background: #f44336;\\n}\\n\\n.mat-badge {\\n position: relative;\\n}\\n\\n.mat-badge-hidden .mat-badge-content {\\n display: none;\\n}\\n\\n.mat-badge-disabled .mat-badge-content {\\n background: #b9b9b9;\\n color: rgba(0, 0, 0, 0.38);\\n}\\n\\n.mat-badge-content {\\n position: absolute;\\n text-align: center;\\n display: inline-block;\\n border-radius: 50%;\\n transition: transform 200ms ease-in-out;\\n transform: scale(0.6);\\n overflow: hidden;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n pointer-events: none;\\n}\\n\\n.ng-animate-disabled .mat-badge-content,\\n.mat-badge-content._mat-animation-noopable {\\n transition: none;\\n}\\n\\n.mat-badge-content.mat-badge-active {\\n transform: none;\\n}\\n\\n.mat-badge-small .mat-badge-content {\\n width: 16px;\\n height: 16px;\\n line-height: 16px;\\n}\\n.mat-badge-small.mat-badge-above .mat-badge-content {\\n top: -8px;\\n}\\n.mat-badge-small.mat-badge-below .mat-badge-content {\\n bottom: -8px;\\n}\\n.mat-badge-small.mat-badge-before .mat-badge-content {\\n left: -16px;\\n}\\n[dir=rtl] .mat-badge-small.mat-badge-before .mat-badge-content {\\n left: auto;\\n right: -16px;\\n}\\n.mat-badge-small.mat-badge-after .mat-badge-content {\\n right: -16px;\\n}\\n[dir=rtl] .mat-badge-small.mat-badge-after .mat-badge-content {\\n right: auto;\\n left: -16px;\\n}\\n.mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content {\\n left: -8px;\\n}\\n[dir=rtl] .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content {\\n left: auto;\\n right: -8px;\\n}\\n.mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content {\\n right: -8px;\\n}\\n[dir=rtl] .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content {\\n right: auto;\\n left: -8px;\\n}\\n\\n.mat-badge-medium .mat-badge-content {\\n width: 22px;\\n height: 22px;\\n line-height: 22px;\\n}\\n.mat-badge-medium.mat-badge-above .mat-badge-content {\\n top: -11px;\\n}\\n.mat-badge-medium.mat-badge-below .mat-badge-content {\\n bottom: -11px;\\n}\\n.mat-badge-medium.mat-badge-before .mat-badge-content {\\n left: -22px;\\n}\\n[dir=rtl] .mat-badge-medium.mat-badge-before .mat-badge-content {\\n left: auto;\\n right: -22px;\\n}\\n.mat-badge-medium.mat-badge-after .mat-badge-content {\\n right: -22px;\\n}\\n[dir=rtl] .mat-badge-medium.mat-badge-after .mat-badge-content {\\n right: auto;\\n left: -22px;\\n}\\n.mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content {\\n left: -11px;\\n}\\n[dir=rtl] .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content {\\n left: auto;\\n right: -11px;\\n}\\n.mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content {\\n right: -11px;\\n}\\n[dir=rtl] .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content {\\n right: auto;\\n left: -11px;\\n}\\n\\n.mat-badge-large .mat-badge-content {\\n width: 28px;\\n height: 28px;\\n line-height: 28px;\\n}\\n.mat-badge-large.mat-badge-above .mat-badge-content {\\n top: -14px;\\n}\\n.mat-badge-large.mat-badge-below .mat-badge-content {\\n bottom: -14px;\\n}\\n.mat-badge-large.mat-badge-before .mat-badge-content {\\n left: -28px;\\n}\\n[dir=rtl] .mat-badge-large.mat-badge-before .mat-badge-content {\\n left: auto;\\n right: -28px;\\n}\\n.mat-badge-large.mat-badge-after .mat-badge-content {\\n right: -28px;\\n}\\n[dir=rtl] .mat-badge-large.mat-badge-after .mat-badge-content {\\n right: auto;\\n left: -28px;\\n}\\n.mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content {\\n left: -14px;\\n}\\n[dir=rtl] .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content {\\n left: auto;\\n right: -14px;\\n}\\n.mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content {\\n right: -14px;\\n}\\n[dir=rtl] .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content {\\n right: auto;\\n left: -14px;\\n}\\n\\n.mat-bottom-sheet-container {\\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\\n background: white;\\n color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.mat-button, .mat-icon-button, .mat-stroked-button {\\n color: inherit;\\n background: transparent;\\n}\\n.mat-button.mat-primary, .mat-icon-button.mat-primary, .mat-stroked-button.mat-primary {\\n color: #3f51b5;\\n}\\n.mat-button.mat-accent, .mat-icon-button.mat-accent, .mat-stroked-button.mat-accent {\\n color: #448aff;\\n}\\n.mat-button.mat-warn, .mat-icon-button.mat-warn, .mat-stroked-button.mat-warn {\\n color: #f44336;\\n}\\n.mat-button.mat-primary[disabled], .mat-button.mat-accent[disabled], .mat-button.mat-warn[disabled], .mat-button[disabled][disabled], .mat-icon-button.mat-primary[disabled], .mat-icon-button.mat-accent[disabled], .mat-icon-button.mat-warn[disabled], .mat-icon-button[disabled][disabled], .mat-stroked-button.mat-primary[disabled], .mat-stroked-button.mat-accent[disabled], .mat-stroked-button.mat-warn[disabled], .mat-stroked-button[disabled][disabled] {\\n color: rgba(0, 0, 0, 0.26);\\n}\\n.mat-button.mat-primary .mat-button-focus-overlay, .mat-icon-button.mat-primary .mat-button-focus-overlay, .mat-stroked-button.mat-primary .mat-button-focus-overlay {\\n background-color: #3f51b5;\\n}\\n.mat-button.mat-accent .mat-button-focus-overlay, .mat-icon-button.mat-accent .mat-button-focus-overlay, .mat-stroked-button.mat-accent .mat-button-focus-overlay {\\n background-color: #448aff;\\n}\\n.mat-button.mat-warn .mat-button-focus-overlay, .mat-icon-button.mat-warn .mat-button-focus-overlay, .mat-stroked-button.mat-warn .mat-button-focus-overlay {\\n background-color: #f44336;\\n}\\n.mat-button[disabled] .mat-button-focus-overlay, .mat-icon-button[disabled] .mat-button-focus-overlay, .mat-stroked-button[disabled] .mat-button-focus-overlay {\\n background-color: transparent;\\n}\\n.mat-button .mat-ripple-element, .mat-icon-button .mat-ripple-element, .mat-stroked-button .mat-ripple-element {\\n opacity: 0.1;\\n background-color: currentColor;\\n}\\n\\n.mat-button-focus-overlay {\\n background: black;\\n}\\n\\n.mat-stroked-button:not([disabled]) {\\n border-color: rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-flat-button, .mat-raised-button, .mat-fab, .mat-mini-fab {\\n color: rgba(0, 0, 0, 0.87);\\n background-color: white;\\n}\\n.mat-flat-button.mat-primary, .mat-raised-button.mat-primary, .mat-fab.mat-primary, .mat-mini-fab.mat-primary {\\n color: white;\\n}\\n.mat-flat-button.mat-accent, .mat-raised-button.mat-accent, .mat-fab.mat-accent, .mat-mini-fab.mat-accent {\\n color: white;\\n}\\n.mat-flat-button.mat-warn, .mat-raised-button.mat-warn, .mat-fab.mat-warn, .mat-mini-fab.mat-warn {\\n color: white;\\n}\\n.mat-flat-button.mat-primary[disabled], .mat-flat-button.mat-accent[disabled], .mat-flat-button.mat-warn[disabled], .mat-flat-button[disabled][disabled], .mat-raised-button.mat-primary[disabled], .mat-raised-button.mat-accent[disabled], .mat-raised-button.mat-warn[disabled], .mat-raised-button[disabled][disabled], .mat-fab.mat-primary[disabled], .mat-fab.mat-accent[disabled], .mat-fab.mat-warn[disabled], .mat-fab[disabled][disabled], .mat-mini-fab.mat-primary[disabled], .mat-mini-fab.mat-accent[disabled], .mat-mini-fab.mat-warn[disabled], .mat-mini-fab[disabled][disabled] {\\n color: rgba(0, 0, 0, 0.26);\\n}\\n.mat-flat-button.mat-primary, .mat-raised-button.mat-primary, .mat-fab.mat-primary, .mat-mini-fab.mat-primary {\\n background-color: #3f51b5;\\n}\\n.mat-flat-button.mat-accent, .mat-raised-button.mat-accent, .mat-fab.mat-accent, .mat-mini-fab.mat-accent {\\n background-color: #448aff;\\n}\\n.mat-flat-button.mat-warn, .mat-raised-button.mat-warn, .mat-fab.mat-warn, .mat-mini-fab.mat-warn {\\n background-color: #f44336;\\n}\\n.mat-flat-button.mat-primary[disabled], .mat-flat-button.mat-accent[disabled], .mat-flat-button.mat-warn[disabled], .mat-flat-button[disabled][disabled], .mat-raised-button.mat-primary[disabled], .mat-raised-button.mat-accent[disabled], .mat-raised-button.mat-warn[disabled], .mat-raised-button[disabled][disabled], .mat-fab.mat-primary[disabled], .mat-fab.mat-accent[disabled], .mat-fab.mat-warn[disabled], .mat-fab[disabled][disabled], .mat-mini-fab.mat-primary[disabled], .mat-mini-fab.mat-accent[disabled], .mat-mini-fab.mat-warn[disabled], .mat-mini-fab[disabled][disabled] {\\n background-color: rgba(0, 0, 0, 0.12);\\n}\\n.mat-flat-button.mat-primary .mat-ripple-element, .mat-raised-button.mat-primary .mat-ripple-element, .mat-fab.mat-primary .mat-ripple-element, .mat-mini-fab.mat-primary .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.mat-flat-button.mat-accent .mat-ripple-element, .mat-raised-button.mat-accent .mat-ripple-element, .mat-fab.mat-accent .mat-ripple-element, .mat-mini-fab.mat-accent .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.mat-flat-button.mat-warn .mat-ripple-element, .mat-raised-button.mat-warn .mat-ripple-element, .mat-fab.mat-warn .mat-ripple-element, .mat-mini-fab.mat-warn .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n\\n.mat-stroked-button:not([class*=mat-elevation-z]), .mat-flat-button:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-raised-button:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mat-raised-button:not([disabled]):active:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);\\n}\\n.mat-raised-button[disabled]:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-fab:not([class*=mat-elevation-z]), .mat-mini-fab:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mat-fab:not([disabled]):active:not([class*=mat-elevation-z]), .mat-mini-fab:not([disabled]):active:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);\\n}\\n.mat-fab[disabled]:not([class*=mat-elevation-z]), .mat-mini-fab[disabled]:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-button-toggle-standalone,\\n.mat-button-toggle-group {\\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\\n.mat-button-toggle-group-appearance-standard {\\n box-shadow: none;\\n}\\n\\n.mat-button-toggle {\\n color: rgba(0, 0, 0, 0.38);\\n}\\n.mat-button-toggle .mat-button-toggle-focus-overlay {\\n background-color: rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-button-toggle-appearance-standard {\\n color: rgba(0, 0, 0, 0.87);\\n background: white;\\n}\\n.mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay {\\n background-color: black;\\n}\\n\\n.mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\\n border-left: solid 1px rgba(0, 0, 0, 0.12);\\n}\\n\\n[dir=rtl] .mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\\n border-left: none;\\n border-right: solid 1px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle + .mat-button-toggle {\\n border-left: none;\\n border-right: none;\\n border-top: solid 1px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-button-toggle-checked {\\n background-color: #e0e0e0;\\n color: rgba(0, 0, 0, 0.54);\\n}\\n.mat-button-toggle-checked.mat-button-toggle-appearance-standard {\\n color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.mat-button-toggle-disabled {\\n color: rgba(0, 0, 0, 0.26);\\n background-color: #eeeeee;\\n}\\n.mat-button-toggle-disabled.mat-button-toggle-appearance-standard {\\n background: white;\\n}\\n.mat-button-toggle-disabled.mat-button-toggle-checked {\\n background-color: #bdbdbd;\\n}\\n\\n.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\\n.mat-button-toggle-group-appearance-standard {\\n border: solid 1px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-card {\\n background: white;\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-card:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mat-card.mat-card-flat:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-card-subtitle {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n\\n.mat-checkbox-frame {\\n border-color: rgba(0, 0, 0, 0.54);\\n}\\n\\n.mat-checkbox-checkmark {\\n fill: #fafafa;\\n}\\n\\n.mat-checkbox-checkmark-path {\\n stroke: #fafafa !important;\\n}\\n\\n.mat-checkbox-mixedmark {\\n background-color: #fafafa;\\n}\\n\\n.mat-checkbox-indeterminate.mat-primary .mat-checkbox-background, .mat-checkbox-checked.mat-primary .mat-checkbox-background {\\n background-color: #3f51b5;\\n}\\n.mat-checkbox-indeterminate.mat-accent .mat-checkbox-background, .mat-checkbox-checked.mat-accent .mat-checkbox-background {\\n background-color: #448aff;\\n}\\n.mat-checkbox-indeterminate.mat-warn .mat-checkbox-background, .mat-checkbox-checked.mat-warn .mat-checkbox-background {\\n background-color: #f44336;\\n}\\n\\n.mat-checkbox-disabled.mat-checkbox-checked .mat-checkbox-background, .mat-checkbox-disabled.mat-checkbox-indeterminate .mat-checkbox-background {\\n background-color: #b0b0b0;\\n}\\n.mat-checkbox-disabled:not(.mat-checkbox-checked) .mat-checkbox-frame {\\n border-color: #b0b0b0;\\n}\\n.mat-checkbox-disabled .mat-checkbox-label {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n\\n.mat-checkbox .mat-ripple-element {\\n background-color: black;\\n}\\n\\n.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element,\\n.mat-checkbox:active:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element {\\n background: #3f51b5;\\n}\\n.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element,\\n.mat-checkbox:active:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element {\\n background: #448aff;\\n}\\n.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element,\\n.mat-checkbox:active:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element {\\n background: #f44336;\\n}\\n\\n.mat-chip.mat-standard-chip {\\n background-color: #e0e0e0;\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-chip.mat-standard-chip .mat-chip-remove {\\n color: rgba(0, 0, 0, 0.87);\\n opacity: 0.4;\\n}\\n.mat-chip.mat-standard-chip:not(.mat-chip-disabled):active {\\n box-shadow: 0px 3px 3px -2px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 0, 0, 0.14), 0px 1px 8px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mat-chip.mat-standard-chip:not(.mat-chip-disabled) .mat-chip-remove:hover {\\n opacity: 0.54;\\n}\\n.mat-chip.mat-standard-chip.mat-chip-disabled {\\n opacity: 0.4;\\n}\\n.mat-chip.mat-standard-chip::after {\\n background: black;\\n}\\n\\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary {\\n background-color: #3f51b5;\\n color: white;\\n}\\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-chip-remove {\\n color: white;\\n opacity: 0.4;\\n}\\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn {\\n background-color: #f44336;\\n color: white;\\n}\\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-chip-remove {\\n color: white;\\n opacity: 0.4;\\n}\\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent {\\n background-color: #448aff;\\n color: white;\\n}\\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-chip-remove {\\n color: white;\\n opacity: 0.4;\\n}\\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n\\n.mat-table {\\n background: white;\\n}\\n\\n.mat-table thead, .mat-table tbody, .mat-table tfoot,\\nmat-header-row, mat-row, mat-footer-row,\\n[mat-header-row], [mat-row], [mat-footer-row],\\n.mat-table-sticky {\\n background: inherit;\\n}\\n\\nmat-row, mat-header-row, mat-footer-row,\\nth.mat-header-cell, td.mat-cell, td.mat-footer-cell {\\n border-bottom-color: rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-header-cell {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n\\n.mat-cell, .mat-footer-cell {\\n color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.mat-calendar-arrow {\\n border-top-color: rgba(0, 0, 0, 0.54);\\n}\\n\\n.mat-datepicker-toggle,\\n.mat-datepicker-content .mat-calendar-next-button,\\n.mat-datepicker-content .mat-calendar-previous-button {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n\\n.mat-calendar-table-header {\\n color: rgba(0, 0, 0, 0.38);\\n}\\n\\n.mat-calendar-table-header-divider::after {\\n background: rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-calendar-body-label {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n\\n.mat-calendar-body-cell-content {\\n color: rgba(0, 0, 0, 0.87);\\n border-color: transparent;\\n}\\n\\n.mat-calendar-body-disabled > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\\n color: rgba(0, 0, 0, 0.38);\\n}\\n\\n.mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected),\\n.cdk-keyboard-focused .mat-calendar-body-active > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected),\\n.cdk-program-focused .mat-calendar-body-active > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\\n background-color: rgba(0, 0, 0, 0.04);\\n}\\n\\n.mat-calendar-body-today:not(.mat-calendar-body-selected) {\\n border-color: rgba(0, 0, 0, 0.38);\\n}\\n\\n.mat-calendar-body-disabled > .mat-calendar-body-today:not(.mat-calendar-body-selected) {\\n border-color: rgba(0, 0, 0, 0.18);\\n}\\n\\n.mat-calendar-body-selected {\\n background-color: #3f51b5;\\n color: white;\\n}\\n\\n.mat-calendar-body-disabled > .mat-calendar-body-selected {\\n background-color: rgba(63, 81, 181, 0.4);\\n}\\n\\n.mat-calendar-body-today.mat-calendar-body-selected {\\n box-shadow: inset 0 0 0 1px white;\\n}\\n\\n.mat-datepicker-content {\\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\\n background-color: white;\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-datepicker-content.mat-accent .mat-calendar-body-selected {\\n background-color: #448aff;\\n color: white;\\n}\\n.mat-datepicker-content.mat-accent .mat-calendar-body-disabled > .mat-calendar-body-selected {\\n background-color: rgba(68, 138, 255, 0.4);\\n}\\n.mat-datepicker-content.mat-accent .mat-calendar-body-today.mat-calendar-body-selected {\\n box-shadow: inset 0 0 0 1px white;\\n}\\n.mat-datepicker-content.mat-warn .mat-calendar-body-selected {\\n background-color: #f44336;\\n color: white;\\n}\\n.mat-datepicker-content.mat-warn .mat-calendar-body-disabled > .mat-calendar-body-selected {\\n background-color: rgba(244, 67, 54, 0.4);\\n}\\n.mat-datepicker-content.mat-warn .mat-calendar-body-today.mat-calendar-body-selected {\\n box-shadow: inset 0 0 0 1px white;\\n}\\n\\n.mat-datepicker-content-touch {\\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-datepicker-toggle-active {\\n color: #3f51b5;\\n}\\n.mat-datepicker-toggle-active.mat-accent {\\n color: #448aff;\\n}\\n.mat-datepicker-toggle-active.mat-warn {\\n color: #f44336;\\n}\\n\\n.mat-dialog-container {\\n box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12);\\n background: white;\\n color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.mat-divider {\\n border-top-color: rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-divider-vertical {\\n border-right-color: rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-expansion-panel {\\n background: white;\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-expansion-panel:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-action-row {\\n border-top-color: rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-expansion-panel .mat-expansion-panel-header.cdk-keyboard-focused:not([aria-disabled=true]), .mat-expansion-panel .mat-expansion-panel-header.cdk-program-focused:not([aria-disabled=true]), .mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover:not([aria-disabled=true]) {\\n background: rgba(0, 0, 0, 0.04);\\n}\\n\\n@media (hover: none) {\\n .mat-expansion-panel:not(.mat-expanded):not([aria-disabled=true]) .mat-expansion-panel-header:hover {\\n background: white;\\n }\\n}\\n.mat-expansion-panel-header-title {\\n color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.mat-expansion-panel-header-description,\\n.mat-expansion-indicator::after {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n\\n.mat-expansion-panel-header[aria-disabled=true] {\\n color: rgba(0, 0, 0, 0.26);\\n}\\n.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title,\\n.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description {\\n color: inherit;\\n}\\n\\n.mat-form-field-label {\\n color: rgba(0, 0, 0, 0.6);\\n}\\n\\n.mat-hint {\\n color: rgba(0, 0, 0, 0.6);\\n}\\n\\n.mat-form-field.mat-focused .mat-form-field-label {\\n color: #3f51b5;\\n}\\n.mat-form-field.mat-focused .mat-form-field-label.mat-accent {\\n color: #448aff;\\n}\\n.mat-form-field.mat-focused .mat-form-field-label.mat-warn {\\n color: #f44336;\\n}\\n\\n.mat-focused .mat-form-field-required-marker {\\n color: #448aff;\\n}\\n\\n.mat-form-field-ripple {\\n background-color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.mat-form-field.mat-focused .mat-form-field-ripple {\\n background-color: #3f51b5;\\n}\\n.mat-form-field.mat-focused .mat-form-field-ripple.mat-accent {\\n background-color: #448aff;\\n}\\n.mat-form-field.mat-focused .mat-form-field-ripple.mat-warn {\\n background-color: #f44336;\\n}\\n\\n.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid) .mat-form-field-infix::after {\\n color: #3f51b5;\\n}\\n.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-accent .mat-form-field-infix::after {\\n color: #448aff;\\n}\\n.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-warn .mat-form-field-infix::after {\\n color: #f44336;\\n}\\n\\n.mat-form-field.mat-form-field-invalid .mat-form-field-label {\\n color: #f44336;\\n}\\n.mat-form-field.mat-form-field-invalid .mat-form-field-label.mat-accent,\\n.mat-form-field.mat-form-field-invalid .mat-form-field-label .mat-form-field-required-marker {\\n color: #f44336;\\n}\\n.mat-form-field.mat-form-field-invalid .mat-form-field-ripple,\\n.mat-form-field.mat-form-field-invalid .mat-form-field-ripple.mat-accent {\\n background-color: #f44336;\\n}\\n\\n.mat-error {\\n color: #f44336;\\n}\\n\\n.mat-form-field-appearance-legacy .mat-form-field-label {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n.mat-form-field-appearance-legacy .mat-hint {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n.mat-form-field-appearance-legacy .mat-form-field-underline {\\n background-color: rgba(0, 0, 0, 0.42);\\n}\\n.mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline {\\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.42) 0%, rgba(0, 0, 0, 0.42) 33%, transparent 0%);\\n background-size: 4px 100%;\\n background-repeat: repeat-x;\\n}\\n\\n.mat-form-field-appearance-standard .mat-form-field-underline {\\n background-color: rgba(0, 0, 0, 0.42);\\n}\\n.mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline {\\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.42) 0%, rgba(0, 0, 0, 0.42) 33%, transparent 0%);\\n background-size: 4px 100%;\\n background-repeat: repeat-x;\\n}\\n\\n.mat-form-field-appearance-fill .mat-form-field-flex {\\n background-color: rgba(0, 0, 0, 0.04);\\n}\\n.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-flex {\\n background-color: rgba(0, 0, 0, 0.02);\\n}\\n.mat-form-field-appearance-fill .mat-form-field-underline::before {\\n background-color: rgba(0, 0, 0, 0.42);\\n}\\n.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-label {\\n color: rgba(0, 0, 0, 0.38);\\n}\\n.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-underline::before {\\n background-color: transparent;\\n}\\n\\n.mat-form-field-appearance-outline .mat-form-field-outline {\\n color: rgba(0, 0, 0, 0.12);\\n}\\n.mat-form-field-appearance-outline .mat-form-field-outline-thick {\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick {\\n color: #3f51b5;\\n}\\n.mat-form-field-appearance-outline.mat-focused.mat-accent .mat-form-field-outline-thick {\\n color: #448aff;\\n}\\n.mat-form-field-appearance-outline.mat-focused.mat-warn .mat-form-field-outline-thick {\\n color: #f44336;\\n}\\n.mat-form-field-appearance-outline.mat-form-field-invalid.mat-form-field-invalid .mat-form-field-outline-thick {\\n color: #f44336;\\n}\\n.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-label {\\n color: rgba(0, 0, 0, 0.38);\\n}\\n.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline {\\n color: rgba(0, 0, 0, 0.06);\\n}\\n\\n.mat-icon.mat-primary {\\n color: #3f51b5;\\n}\\n.mat-icon.mat-accent {\\n color: #448aff;\\n}\\n.mat-icon.mat-warn {\\n color: #f44336;\\n}\\n\\n.mat-form-field-type-mat-native-select .mat-form-field-infix::after {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n\\n.mat-input-element:disabled,\\n.mat-form-field-type-mat-native-select.mat-form-field-disabled .mat-form-field-infix::after {\\n color: rgba(0, 0, 0, 0.38);\\n}\\n\\n.mat-input-element {\\n caret-color: #3f51b5;\\n}\\n.mat-input-element::placeholder {\\n color: rgba(0, 0, 0, 0.42);\\n}\\n.mat-input-element::-moz-placeholder {\\n color: rgba(0, 0, 0, 0.42);\\n}\\n.mat-input-element::-webkit-input-placeholder {\\n color: rgba(0, 0, 0, 0.42);\\n}\\n.mat-input-element:-ms-input-placeholder {\\n color: rgba(0, 0, 0, 0.42);\\n}\\n\\n.mat-accent .mat-input-element {\\n caret-color: #448aff;\\n}\\n\\n.mat-warn .mat-input-element,\\n.mat-form-field-invalid .mat-input-element {\\n caret-color: #f44336;\\n}\\n\\n.mat-form-field-type-mat-native-select.mat-form-field-invalid .mat-form-field-infix::after {\\n color: #f44336;\\n}\\n\\n.mat-list-base .mat-list-item {\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-list-base .mat-list-option {\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-list-base .mat-subheader {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n\\n.mat-list-item-disabled {\\n background-color: #eeeeee;\\n}\\n\\n.mat-list-option:hover, .mat-list-option:focus,\\n.mat-nav-list .mat-list-item:hover,\\n.mat-nav-list .mat-list-item:focus,\\n.mat-action-list .mat-list-item:hover,\\n.mat-action-list .mat-list-item:focus {\\n background: rgba(0, 0, 0, 0.04);\\n}\\n\\n.mat-list-single-selected-option, .mat-list-single-selected-option:hover, .mat-list-single-selected-option:focus {\\n background: rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-menu-panel {\\n background: white;\\n}\\n.mat-menu-panel:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-menu-item {\\n background: transparent;\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-menu-item[disabled], .mat-menu-item[disabled]::after {\\n color: rgba(0, 0, 0, 0.38);\\n}\\n\\n.mat-menu-item .mat-icon-no-color,\\n.mat-menu-item-submenu-trigger::after {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n\\n.mat-menu-item:hover:not([disabled]),\\n.mat-menu-item.cdk-program-focused:not([disabled]),\\n.mat-menu-item.cdk-keyboard-focused:not([disabled]),\\n.mat-menu-item-highlighted:not([disabled]) {\\n background: rgba(0, 0, 0, 0.04);\\n}\\n\\n.mat-paginator {\\n background: white;\\n}\\n\\n.mat-paginator,\\n.mat-paginator-page-size .mat-select-trigger {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n\\n.mat-paginator-decrement,\\n.mat-paginator-increment {\\n border-top: 2px solid rgba(0, 0, 0, 0.54);\\n border-right: 2px solid rgba(0, 0, 0, 0.54);\\n}\\n\\n.mat-paginator-first,\\n.mat-paginator-last {\\n border-top: 2px solid rgba(0, 0, 0, 0.54);\\n}\\n\\n.mat-icon-button[disabled] .mat-paginator-decrement,\\n.mat-icon-button[disabled] .mat-paginator-increment,\\n.mat-icon-button[disabled] .mat-paginator-first,\\n.mat-icon-button[disabled] .mat-paginator-last {\\n border-color: rgba(0, 0, 0, 0.38);\\n}\\n\\n.mat-progress-bar-background {\\n fill: #c5cae9;\\n}\\n\\n.mat-progress-bar-buffer {\\n background-color: #c5cae9;\\n}\\n\\n.mat-progress-bar-fill::after {\\n background-color: #3f51b5;\\n}\\n\\n.mat-progress-bar.mat-accent .mat-progress-bar-background {\\n fill: #82b1ff;\\n}\\n.mat-progress-bar.mat-accent .mat-progress-bar-buffer {\\n background-color: #82b1ff;\\n}\\n.mat-progress-bar.mat-accent .mat-progress-bar-fill::after {\\n background-color: #448aff;\\n}\\n\\n.mat-progress-bar.mat-warn .mat-progress-bar-background {\\n fill: #ffcdd2;\\n}\\n.mat-progress-bar.mat-warn .mat-progress-bar-buffer {\\n background-color: #ffcdd2;\\n}\\n.mat-progress-bar.mat-warn .mat-progress-bar-fill::after {\\n background-color: #f44336;\\n}\\n\\n.mat-progress-spinner circle, .mat-spinner circle {\\n stroke: #3f51b5;\\n}\\n.mat-progress-spinner.mat-accent circle, .mat-spinner.mat-accent circle {\\n stroke: #448aff;\\n}\\n.mat-progress-spinner.mat-warn circle, .mat-spinner.mat-warn circle {\\n stroke: #f44336;\\n}\\n\\n.mat-radio-outer-circle {\\n border-color: rgba(0, 0, 0, 0.54);\\n}\\n\\n.mat-radio-button.mat-primary.mat-radio-checked .mat-radio-outer-circle {\\n border-color: #3f51b5;\\n}\\n.mat-radio-button.mat-primary .mat-radio-inner-circle,\\n.mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .mat-radio-button.mat-primary.mat-radio-checked .mat-radio-persistent-ripple, .mat-radio-button.mat-primary:active .mat-radio-persistent-ripple {\\n background-color: #3f51b5;\\n}\\n.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle {\\n border-color: #448aff;\\n}\\n.mat-radio-button.mat-accent .mat-radio-inner-circle,\\n.mat-radio-button.mat-accent .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .mat-radio-button.mat-accent.mat-radio-checked .mat-radio-persistent-ripple, .mat-radio-button.mat-accent:active .mat-radio-persistent-ripple {\\n background-color: #448aff;\\n}\\n.mat-radio-button.mat-warn.mat-radio-checked .mat-radio-outer-circle {\\n border-color: #f44336;\\n}\\n.mat-radio-button.mat-warn .mat-radio-inner-circle,\\n.mat-radio-button.mat-warn .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .mat-radio-button.mat-warn.mat-radio-checked .mat-radio-persistent-ripple, .mat-radio-button.mat-warn:active .mat-radio-persistent-ripple {\\n background-color: #f44336;\\n}\\n.mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-outer-circle,\\n.mat-radio-button.mat-radio-disabled .mat-radio-outer-circle {\\n border-color: rgba(0, 0, 0, 0.38);\\n}\\n.mat-radio-button.mat-radio-disabled .mat-radio-ripple .mat-ripple-element,\\n.mat-radio-button.mat-radio-disabled .mat-radio-inner-circle {\\n background-color: rgba(0, 0, 0, 0.38);\\n}\\n.mat-radio-button.mat-radio-disabled .mat-radio-label-content {\\n color: rgba(0, 0, 0, 0.38);\\n}\\n.mat-radio-button .mat-ripple-element {\\n background-color: black;\\n}\\n\\n.mat-select-value {\\n color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.mat-select-placeholder {\\n color: rgba(0, 0, 0, 0.42);\\n}\\n\\n.mat-select-disabled .mat-select-value {\\n color: rgba(0, 0, 0, 0.38);\\n}\\n\\n.mat-select-arrow {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n\\n.mat-select-panel {\\n background: white;\\n}\\n.mat-select-panel:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\\n}\\n.mat-select-panel .mat-option.mat-selected:not(.mat-option-multiple) {\\n background: rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-form-field.mat-focused.mat-primary .mat-select-arrow {\\n color: #3f51b5;\\n}\\n.mat-form-field.mat-focused.mat-accent .mat-select-arrow {\\n color: #448aff;\\n}\\n.mat-form-field.mat-focused.mat-warn .mat-select-arrow {\\n color: #f44336;\\n}\\n.mat-form-field .mat-select.mat-select-invalid .mat-select-arrow {\\n color: #f44336;\\n}\\n.mat-form-field .mat-select.mat-select-disabled .mat-select-arrow {\\n color: rgba(0, 0, 0, 0.38);\\n}\\n\\n.mat-drawer-container {\\n background-color: #fafafa;\\n color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.mat-drawer {\\n background-color: white;\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-drawer.mat-drawer-push {\\n background-color: white;\\n}\\n.mat-drawer:not(.mat-drawer-side) {\\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-drawer-side {\\n border-right: solid 1px rgba(0, 0, 0, 0.12);\\n}\\n.mat-drawer-side.mat-drawer-end {\\n border-left: solid 1px rgba(0, 0, 0, 0.12);\\n border-right: none;\\n}\\n\\n[dir=rtl] .mat-drawer-side {\\n border-left: solid 1px rgba(0, 0, 0, 0.12);\\n border-right: none;\\n}\\n[dir=rtl] .mat-drawer-side.mat-drawer-end {\\n border-left: none;\\n border-right: solid 1px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-drawer-backdrop.mat-drawer-shown {\\n background-color: rgba(0, 0, 0, 0.6);\\n}\\n\\n.mat-slide-toggle.mat-checked .mat-slide-toggle-thumb {\\n background-color: #448aff;\\n}\\n.mat-slide-toggle.mat-checked .mat-slide-toggle-bar {\\n background-color: rgba(68, 138, 255, 0.54);\\n}\\n.mat-slide-toggle.mat-checked .mat-ripple-element {\\n background-color: #448aff;\\n}\\n.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-thumb {\\n background-color: #3f51b5;\\n}\\n.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-bar {\\n background-color: rgba(63, 81, 181, 0.54);\\n}\\n.mat-slide-toggle.mat-primary.mat-checked .mat-ripple-element {\\n background-color: #3f51b5;\\n}\\n.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-thumb {\\n background-color: #f44336;\\n}\\n.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-bar {\\n background-color: rgba(244, 67, 54, 0.54);\\n}\\n.mat-slide-toggle.mat-warn.mat-checked .mat-ripple-element {\\n background-color: #f44336;\\n}\\n.mat-slide-toggle:not(.mat-checked) .mat-ripple-element {\\n background-color: black;\\n}\\n\\n.mat-slide-toggle-thumb {\\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\\n background-color: #fafafa;\\n}\\n\\n.mat-slide-toggle-bar {\\n background-color: rgba(0, 0, 0, 0.38);\\n}\\n\\n.mat-slider-track-background {\\n background-color: rgba(0, 0, 0, 0.26);\\n}\\n\\n.mat-primary .mat-slider-track-fill,\\n.mat-primary .mat-slider-thumb,\\n.mat-primary .mat-slider-thumb-label {\\n background-color: #3f51b5;\\n}\\n.mat-primary .mat-slider-thumb-label-text {\\n color: white;\\n}\\n\\n.mat-accent .mat-slider-track-fill,\\n.mat-accent .mat-slider-thumb,\\n.mat-accent .mat-slider-thumb-label {\\n background-color: #448aff;\\n}\\n.mat-accent .mat-slider-thumb-label-text {\\n color: white;\\n}\\n\\n.mat-warn .mat-slider-track-fill,\\n.mat-warn .mat-slider-thumb,\\n.mat-warn .mat-slider-thumb-label {\\n background-color: #f44336;\\n}\\n.mat-warn .mat-slider-thumb-label-text {\\n color: white;\\n}\\n\\n.mat-slider-focus-ring {\\n background-color: rgba(68, 138, 255, 0.2);\\n}\\n\\n.mat-slider:hover .mat-slider-track-background,\\n.cdk-focused .mat-slider-track-background {\\n background-color: rgba(0, 0, 0, 0.38);\\n}\\n\\n.mat-slider-disabled .mat-slider-track-background,\\n.mat-slider-disabled .mat-slider-track-fill,\\n.mat-slider-disabled .mat-slider-thumb {\\n background-color: rgba(0, 0, 0, 0.26);\\n}\\n.mat-slider-disabled:hover .mat-slider-track-background {\\n background-color: rgba(0, 0, 0, 0.26);\\n}\\n\\n.mat-slider-min-value .mat-slider-focus-ring {\\n background-color: rgba(0, 0, 0, 0.12);\\n}\\n.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb,\\n.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb-label {\\n background-color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb,\\n.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb-label {\\n background-color: rgba(0, 0, 0, 0.26);\\n}\\n.mat-slider-min-value:not(.mat-slider-thumb-label-showing) .mat-slider-thumb {\\n border-color: rgba(0, 0, 0, 0.26);\\n background-color: transparent;\\n}\\n.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover .mat-slider-thumb, .mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused .mat-slider-thumb {\\n border-color: rgba(0, 0, 0, 0.38);\\n}\\n.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover.mat-slider-disabled .mat-slider-thumb, .mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused.mat-slider-disabled .mat-slider-thumb {\\n border-color: rgba(0, 0, 0, 0.26);\\n}\\n\\n.mat-slider-has-ticks .mat-slider-wrapper::after {\\n border-color: rgba(0, 0, 0, 0.7);\\n}\\n\\n.mat-slider-horizontal .mat-slider-ticks {\\n background-image: repeating-linear-gradient(to right, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent);\\n background-image: -moz-repeating-linear-gradient(0.0001deg, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent);\\n}\\n\\n.mat-slider-vertical .mat-slider-ticks {\\n background-image: repeating-linear-gradient(to bottom, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7) 2px, transparent 0, transparent);\\n}\\n\\n.mat-step-header.cdk-keyboard-focused, .mat-step-header.cdk-program-focused, .mat-step-header:hover {\\n background-color: rgba(0, 0, 0, 0.04);\\n}\\n@media (hover: none) {\\n .mat-step-header:hover {\\n background: none;\\n }\\n}\\n.mat-step-header .mat-step-label,\\n.mat-step-header .mat-step-optional {\\n color: rgba(0, 0, 0, 0.54);\\n}\\n.mat-step-header .mat-step-icon {\\n background-color: rgba(0, 0, 0, 0.54);\\n color: white;\\n}\\n.mat-step-header .mat-step-icon-selected,\\n.mat-step-header .mat-step-icon-state-done,\\n.mat-step-header .mat-step-icon-state-edit {\\n background-color: #3f51b5;\\n color: white;\\n}\\n.mat-step-header .mat-step-icon-state-error {\\n background-color: transparent;\\n color: #f44336;\\n}\\n.mat-step-header .mat-step-label.mat-step-label-active {\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-step-header .mat-step-label.mat-step-label-error {\\n color: #f44336;\\n}\\n\\n.mat-stepper-horizontal, .mat-stepper-vertical {\\n background-color: white;\\n}\\n\\n.mat-stepper-vertical-line::before {\\n border-left-color: rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-horizontal-stepper-header::before,\\n.mat-horizontal-stepper-header::after,\\n.mat-stepper-horizontal-line {\\n border-top-color: rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-sort-header-arrow {\\n color: #757575;\\n}\\n\\n.mat-tab-nav-bar,\\n.mat-tab-header {\\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-tab-group-inverted-header .mat-tab-nav-bar,\\n.mat-tab-group-inverted-header .mat-tab-header {\\n border-top: 1px solid rgba(0, 0, 0, 0.12);\\n border-bottom: none;\\n}\\n\\n.mat-tab-label, .mat-tab-link {\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-tab-label.mat-tab-disabled, .mat-tab-link.mat-tab-disabled {\\n color: rgba(0, 0, 0, 0.38);\\n}\\n\\n.mat-tab-header-pagination-chevron {\\n border-color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\\n border-color: rgba(0, 0, 0, 0.38);\\n}\\n\\n.mat-tab-group[class*=mat-background-] .mat-tab-header,\\n.mat-tab-nav-bar[class*=mat-background-] {\\n border-bottom: none;\\n border-top: none;\\n}\\n\\n.mat-tab-group.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.mat-tab-group.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.mat-tab-group.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\\n background-color: rgba(197, 202, 233, 0.3);\\n}\\n.mat-tab-group.mat-primary .mat-ink-bar, .mat-tab-nav-bar.mat-primary .mat-ink-bar {\\n background-color: #3f51b5;\\n}\\n.mat-tab-group.mat-primary.mat-background-primary .mat-ink-bar, .mat-tab-nav-bar.mat-primary.mat-background-primary .mat-ink-bar {\\n background-color: white;\\n}\\n.mat-tab-group.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.mat-tab-group.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.mat-tab-group.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\\n background-color: rgba(130, 177, 255, 0.3);\\n}\\n.mat-tab-group.mat-accent .mat-ink-bar, .mat-tab-nav-bar.mat-accent .mat-ink-bar {\\n background-color: #448aff;\\n}\\n.mat-tab-group.mat-accent.mat-background-accent .mat-ink-bar, .mat-tab-nav-bar.mat-accent.mat-background-accent .mat-ink-bar {\\n background-color: white;\\n}\\n.mat-tab-group.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.mat-tab-group.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.mat-tab-group.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\\n background-color: rgba(255, 205, 210, 0.3);\\n}\\n.mat-tab-group.mat-warn .mat-ink-bar, .mat-tab-nav-bar.mat-warn .mat-ink-bar {\\n background-color: #f44336;\\n}\\n.mat-tab-group.mat-warn.mat-background-warn .mat-ink-bar, .mat-tab-nav-bar.mat-warn.mat-background-warn .mat-ink-bar {\\n background-color: white;\\n}\\n.mat-tab-group.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.mat-tab-group.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.mat-tab-group.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\\n background-color: rgba(197, 202, 233, 0.3);\\n}\\n.mat-tab-group.mat-background-primary .mat-tab-header, .mat-tab-group.mat-background-primary .mat-tab-links, .mat-tab-group.mat-background-primary .mat-tab-header-pagination, .mat-tab-nav-bar.mat-background-primary .mat-tab-header, .mat-tab-nav-bar.mat-background-primary .mat-tab-links, .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination {\\n background-color: #3f51b5;\\n}\\n.mat-tab-group.mat-background-primary .mat-tab-label, .mat-tab-group.mat-background-primary .mat-tab-link, .mat-tab-nav-bar.mat-background-primary .mat-tab-label, .mat-tab-nav-bar.mat-background-primary .mat-tab-link {\\n color: white;\\n}\\n.mat-tab-group.mat-background-primary .mat-tab-label.mat-tab-disabled, .mat-tab-group.mat-background-primary .mat-tab-link.mat-tab-disabled, .mat-tab-nav-bar.mat-background-primary .mat-tab-label.mat-tab-disabled, .mat-tab-nav-bar.mat-background-primary .mat-tab-link.mat-tab-disabled {\\n color: rgba(255, 255, 255, 0.4);\\n}\\n.mat-tab-group.mat-background-primary .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-chevron {\\n border-color: white;\\n}\\n.mat-tab-group.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\\n border-color: rgba(255, 255, 255, 0.4);\\n}\\n.mat-tab-group.mat-background-primary .mat-ripple-element, .mat-tab-nav-bar.mat-background-primary .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.12);\\n}\\n.mat-tab-group.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.mat-tab-group.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.mat-tab-group.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\\n background-color: rgba(130, 177, 255, 0.3);\\n}\\n.mat-tab-group.mat-background-accent .mat-tab-header, .mat-tab-group.mat-background-accent .mat-tab-links, .mat-tab-group.mat-background-accent .mat-tab-header-pagination, .mat-tab-nav-bar.mat-background-accent .mat-tab-header, .mat-tab-nav-bar.mat-background-accent .mat-tab-links, .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination {\\n background-color: #448aff;\\n}\\n.mat-tab-group.mat-background-accent .mat-tab-label, .mat-tab-group.mat-background-accent .mat-tab-link, .mat-tab-nav-bar.mat-background-accent .mat-tab-label, .mat-tab-nav-bar.mat-background-accent .mat-tab-link {\\n color: white;\\n}\\n.mat-tab-group.mat-background-accent .mat-tab-label.mat-tab-disabled, .mat-tab-group.mat-background-accent .mat-tab-link.mat-tab-disabled, .mat-tab-nav-bar.mat-background-accent .mat-tab-label.mat-tab-disabled, .mat-tab-nav-bar.mat-background-accent .mat-tab-link.mat-tab-disabled {\\n color: rgba(255, 255, 255, 0.4);\\n}\\n.mat-tab-group.mat-background-accent .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-chevron {\\n border-color: white;\\n}\\n.mat-tab-group.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\\n border-color: rgba(255, 255, 255, 0.4);\\n}\\n.mat-tab-group.mat-background-accent .mat-ripple-element, .mat-tab-nav-bar.mat-background-accent .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.12);\\n}\\n.mat-tab-group.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-group.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.mat-tab-group.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.mat-tab-group.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\\n background-color: rgba(255, 205, 210, 0.3);\\n}\\n.mat-tab-group.mat-background-warn .mat-tab-header, .mat-tab-group.mat-background-warn .mat-tab-links, .mat-tab-group.mat-background-warn .mat-tab-header-pagination, .mat-tab-nav-bar.mat-background-warn .mat-tab-header, .mat-tab-nav-bar.mat-background-warn .mat-tab-links, .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination {\\n background-color: #f44336;\\n}\\n.mat-tab-group.mat-background-warn .mat-tab-label, .mat-tab-group.mat-background-warn .mat-tab-link, .mat-tab-nav-bar.mat-background-warn .mat-tab-label, .mat-tab-nav-bar.mat-background-warn .mat-tab-link {\\n color: white;\\n}\\n.mat-tab-group.mat-background-warn .mat-tab-label.mat-tab-disabled, .mat-tab-group.mat-background-warn .mat-tab-link.mat-tab-disabled, .mat-tab-nav-bar.mat-background-warn .mat-tab-label.mat-tab-disabled, .mat-tab-nav-bar.mat-background-warn .mat-tab-link.mat-tab-disabled {\\n color: rgba(255, 255, 255, 0.4);\\n}\\n.mat-tab-group.mat-background-warn .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-chevron {\\n border-color: white;\\n}\\n.mat-tab-group.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\\n border-color: rgba(255, 255, 255, 0.4);\\n}\\n.mat-tab-group.mat-background-warn .mat-ripple-element, .mat-tab-nav-bar.mat-background-warn .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.12);\\n}\\n\\n.mat-toolbar {\\n background: whitesmoke;\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.mat-toolbar.mat-primary {\\n background: #3f51b5;\\n color: white;\\n}\\n.mat-toolbar.mat-accent {\\n background: #448aff;\\n color: white;\\n}\\n.mat-toolbar.mat-warn {\\n background: #f44336;\\n color: white;\\n}\\n.mat-toolbar .mat-form-field-underline,\\n.mat-toolbar .mat-form-field-ripple,\\n.mat-toolbar .mat-focused .mat-form-field-ripple {\\n background-color: currentColor;\\n}\\n.mat-toolbar .mat-form-field-label,\\n.mat-toolbar .mat-focused .mat-form-field-label,\\n.mat-toolbar .mat-select-value,\\n.mat-toolbar .mat-select-arrow,\\n.mat-toolbar .mat-form-field.mat-focused .mat-select-arrow {\\n color: inherit;\\n}\\n.mat-toolbar .mat-input-element {\\n caret-color: currentColor;\\n}\\n\\n.mat-tooltip {\\n background: rgba(97, 97, 97, 0.9);\\n}\\n\\n.mat-tree {\\n background: white;\\n}\\n\\n.mat-tree-node,\\n.mat-nested-tree-node {\\n color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.mat-snack-bar-container {\\n color: rgba(255, 255, 255, 0.7);\\n background: #323232;\\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\\n}\\n\\n.mat-simple-snackbar-action {\\n color: #448aff;\\n}\\n\\n/* You can add global styles to this file, and also import other style files */\\n.dark-mode {\\n color: white;\\n}\\n.dark-mode .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.dark-mode .mat-option {\\n color: white;\\n}\\n.dark-mode .mat-option:hover:not(.mat-option-disabled), .dark-mode .mat-option:focus:not(.mat-option-disabled) {\\n background: rgba(255, 255, 255, 0.04);\\n}\\n.dark-mode .mat-option.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled) {\\n background: rgba(255, 255, 255, 0.04);\\n}\\n.dark-mode .mat-option.mat-active {\\n background: rgba(255, 255, 255, 0.04);\\n color: white;\\n}\\n.dark-mode .mat-option.mat-option-disabled {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-primary .mat-option.mat-selected:not(.mat-option-disabled) {\\n color: #00bcd4;\\n}\\n.dark-mode .mat-accent .mat-option.mat-selected:not(.mat-option-disabled) {\\n color: #2979ff;\\n}\\n.dark-mode .mat-warn .mat-option.mat-selected:not(.mat-option-disabled) {\\n color: #f44336;\\n}\\n.dark-mode .mat-optgroup-label {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-optgroup-disabled .mat-optgroup-label {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-pseudo-checkbox {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-pseudo-checkbox::after {\\n color: #303030;\\n}\\n.dark-mode .mat-pseudo-checkbox-disabled {\\n color: #686868;\\n}\\n.dark-mode .mat-primary .mat-pseudo-checkbox-checked,\\n.dark-mode .mat-primary .mat-pseudo-checkbox-indeterminate {\\n background: #00bcd4;\\n}\\n.dark-mode .mat-pseudo-checkbox-checked,\\n.dark-mode .mat-pseudo-checkbox-indeterminate,\\n.dark-mode .mat-accent .mat-pseudo-checkbox-checked,\\n.dark-mode .mat-accent .mat-pseudo-checkbox-indeterminate {\\n background: #2979ff;\\n}\\n.dark-mode .mat-warn .mat-pseudo-checkbox-checked,\\n.dark-mode .mat-warn .mat-pseudo-checkbox-indeterminate {\\n background: #f44336;\\n}\\n.dark-mode .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,\\n.dark-mode .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled {\\n background: #686868;\\n}\\n.dark-mode .mat-elevation-z0 {\\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z1 {\\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z2 {\\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z3 {\\n box-shadow: 0px 3px 3px -2px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 0, 0, 0.14), 0px 1px 8px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z4 {\\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z5 {\\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 5px 8px 0px rgba(0, 0, 0, 0.14), 0px 1px 14px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z6 {\\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z7 {\\n box-shadow: 0px 4px 5px -2px rgba(0, 0, 0, 0.2), 0px 7px 10px 1px rgba(0, 0, 0, 0.14), 0px 2px 16px 1px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z8 {\\n box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z9 {\\n box-shadow: 0px 5px 6px -3px rgba(0, 0, 0, 0.2), 0px 9px 12px 1px rgba(0, 0, 0, 0.14), 0px 3px 16px 2px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z10 {\\n box-shadow: 0px 6px 6px -3px rgba(0, 0, 0, 0.2), 0px 10px 14px 1px rgba(0, 0, 0, 0.14), 0px 4px 18px 3px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z11 {\\n box-shadow: 0px 6px 7px -4px rgba(0, 0, 0, 0.2), 0px 11px 15px 1px rgba(0, 0, 0, 0.14), 0px 4px 20px 3px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z12 {\\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z13 {\\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 13px 19px 2px rgba(0, 0, 0, 0.14), 0px 5px 24px 4px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z14 {\\n box-shadow: 0px 7px 9px -4px rgba(0, 0, 0, 0.2), 0px 14px 21px 2px rgba(0, 0, 0, 0.14), 0px 5px 26px 4px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z15 {\\n box-shadow: 0px 8px 9px -5px rgba(0, 0, 0, 0.2), 0px 15px 22px 2px rgba(0, 0, 0, 0.14), 0px 6px 28px 5px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z16 {\\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z17 {\\n box-shadow: 0px 8px 11px -5px rgba(0, 0, 0, 0.2), 0px 17px 26px 2px rgba(0, 0, 0, 0.14), 0px 6px 32px 5px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z18 {\\n box-shadow: 0px 9px 11px -5px rgba(0, 0, 0, 0.2), 0px 18px 28px 2px rgba(0, 0, 0, 0.14), 0px 7px 34px 6px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z19 {\\n box-shadow: 0px 9px 12px -6px rgba(0, 0, 0, 0.2), 0px 19px 29px 2px rgba(0, 0, 0, 0.14), 0px 7px 36px 6px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z20 {\\n box-shadow: 0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 20px 31px 3px rgba(0, 0, 0, 0.14), 0px 8px 38px 7px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z21 {\\n box-shadow: 0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 21px 33px 3px rgba(0, 0, 0, 0.14), 0px 8px 40px 7px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z22 {\\n box-shadow: 0px 10px 14px -6px rgba(0, 0, 0, 0.2), 0px 22px 35px 3px rgba(0, 0, 0, 0.14), 0px 8px 42px 7px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z23 {\\n box-shadow: 0px 11px 14px -7px rgba(0, 0, 0, 0.2), 0px 23px 36px 3px rgba(0, 0, 0, 0.14), 0px 9px 44px 8px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-elevation-z24 {\\n box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-app-background, .dark-mode.mat-app-background {\\n background-color: #303030;\\n color: white;\\n}\\n.mat-theme-loaded-marker {\\n display: none;\\n}\\n\\n.dark-mode .mat-autocomplete-panel {\\n background: #424242;\\n color: white;\\n}\\n.dark-mode .mat-autocomplete-panel:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover) {\\n background: #424242;\\n}\\n.dark-mode .mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover):not(.mat-option-disabled) {\\n color: white;\\n}\\n.dark-mode .mat-badge-content {\\n color: white;\\n background: #00bcd4;\\n}\\n.cdk-high-contrast-active .dark-mode .mat-badge-content {\\n outline: solid 1px;\\n border-radius: 0;\\n}\\n\\n.dark-mode .mat-badge-accent .mat-badge-content {\\n background: #2979ff;\\n color: white;\\n}\\n.dark-mode .mat-badge-warn .mat-badge-content {\\n color: white;\\n background: #f44336;\\n}\\n.dark-mode .mat-badge {\\n position: relative;\\n}\\n.dark-mode .mat-badge-hidden .mat-badge-content {\\n display: none;\\n}\\n.dark-mode .mat-badge-disabled .mat-badge-content {\\n background: #6e6e6e;\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-badge-content {\\n position: absolute;\\n text-align: center;\\n display: inline-block;\\n border-radius: 50%;\\n transition: transform 200ms ease-in-out;\\n transform: scale(0.6);\\n overflow: hidden;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n pointer-events: none;\\n}\\n.dark-mode .ng-animate-disabled .mat-badge-content,\\n.dark-mode .mat-badge-content._mat-animation-noopable {\\n transition: none;\\n}\\n.dark-mode .mat-badge-content.mat-badge-active {\\n transform: none;\\n}\\n.dark-mode .mat-badge-small .mat-badge-content {\\n width: 16px;\\n height: 16px;\\n line-height: 16px;\\n}\\n.dark-mode .mat-badge-small.mat-badge-above .mat-badge-content {\\n top: -8px;\\n}\\n.dark-mode .mat-badge-small.mat-badge-below .mat-badge-content {\\n bottom: -8px;\\n}\\n.dark-mode .mat-badge-small.mat-badge-before .mat-badge-content {\\n left: -16px;\\n}\\n[dir=rtl] .dark-mode .mat-badge-small.mat-badge-before .mat-badge-content {\\n left: auto;\\n right: -16px;\\n}\\n.dark-mode .mat-badge-small.mat-badge-after .mat-badge-content {\\n right: -16px;\\n}\\n[dir=rtl] .dark-mode .mat-badge-small.mat-badge-after .mat-badge-content {\\n right: auto;\\n left: -16px;\\n}\\n.dark-mode .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content {\\n left: -8px;\\n}\\n[dir=rtl] .dark-mode .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content {\\n left: auto;\\n right: -8px;\\n}\\n.dark-mode .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content {\\n right: -8px;\\n}\\n[dir=rtl] .dark-mode .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content {\\n right: auto;\\n left: -8px;\\n}\\n.dark-mode .mat-badge-medium .mat-badge-content {\\n width: 22px;\\n height: 22px;\\n line-height: 22px;\\n}\\n.dark-mode .mat-badge-medium.mat-badge-above .mat-badge-content {\\n top: -11px;\\n}\\n.dark-mode .mat-badge-medium.mat-badge-below .mat-badge-content {\\n bottom: -11px;\\n}\\n.dark-mode .mat-badge-medium.mat-badge-before .mat-badge-content {\\n left: -22px;\\n}\\n[dir=rtl] .dark-mode .mat-badge-medium.mat-badge-before .mat-badge-content {\\n left: auto;\\n right: -22px;\\n}\\n.dark-mode .mat-badge-medium.mat-badge-after .mat-badge-content {\\n right: -22px;\\n}\\n[dir=rtl] .dark-mode .mat-badge-medium.mat-badge-after .mat-badge-content {\\n right: auto;\\n left: -22px;\\n}\\n.dark-mode .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content {\\n left: -11px;\\n}\\n[dir=rtl] .dark-mode .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content {\\n left: auto;\\n right: -11px;\\n}\\n.dark-mode .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content {\\n right: -11px;\\n}\\n[dir=rtl] .dark-mode .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content {\\n right: auto;\\n left: -11px;\\n}\\n.dark-mode .mat-badge-large .mat-badge-content {\\n width: 28px;\\n height: 28px;\\n line-height: 28px;\\n}\\n.dark-mode .mat-badge-large.mat-badge-above .mat-badge-content {\\n top: -14px;\\n}\\n.dark-mode .mat-badge-large.mat-badge-below .mat-badge-content {\\n bottom: -14px;\\n}\\n.dark-mode .mat-badge-large.mat-badge-before .mat-badge-content {\\n left: -28px;\\n}\\n[dir=rtl] .dark-mode .mat-badge-large.mat-badge-before .mat-badge-content {\\n left: auto;\\n right: -28px;\\n}\\n.dark-mode .mat-badge-large.mat-badge-after .mat-badge-content {\\n right: -28px;\\n}\\n[dir=rtl] .dark-mode .mat-badge-large.mat-badge-after .mat-badge-content {\\n right: auto;\\n left: -28px;\\n}\\n.dark-mode .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content {\\n left: -14px;\\n}\\n[dir=rtl] .dark-mode .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content {\\n left: auto;\\n right: -14px;\\n}\\n.dark-mode .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content {\\n right: -14px;\\n}\\n[dir=rtl] .dark-mode .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content {\\n right: auto;\\n left: -14px;\\n}\\n.dark-mode .mat-bottom-sheet-container {\\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\\n background: #424242;\\n color: white;\\n}\\n.dark-mode .mat-button, .dark-mode .mat-icon-button, .dark-mode .mat-stroked-button {\\n color: inherit;\\n background: transparent;\\n}\\n.dark-mode .mat-button.mat-primary, .dark-mode .mat-icon-button.mat-primary, .dark-mode .mat-stroked-button.mat-primary {\\n color: #00bcd4;\\n}\\n.dark-mode .mat-button.mat-accent, .dark-mode .mat-icon-button.mat-accent, .dark-mode .mat-stroked-button.mat-accent {\\n color: #2979ff;\\n}\\n.dark-mode .mat-button.mat-warn, .dark-mode .mat-icon-button.mat-warn, .dark-mode .mat-stroked-button.mat-warn {\\n color: #f44336;\\n}\\n.dark-mode .mat-button.mat-primary[disabled], .dark-mode .mat-button.mat-accent[disabled], .dark-mode .mat-button.mat-warn[disabled], .dark-mode .mat-button[disabled][disabled], .dark-mode .mat-icon-button.mat-primary[disabled], .dark-mode .mat-icon-button.mat-accent[disabled], .dark-mode .mat-icon-button.mat-warn[disabled], .dark-mode .mat-icon-button[disabled][disabled], .dark-mode .mat-stroked-button.mat-primary[disabled], .dark-mode .mat-stroked-button.mat-accent[disabled], .dark-mode .mat-stroked-button.mat-warn[disabled], .dark-mode .mat-stroked-button[disabled][disabled] {\\n color: rgba(255, 255, 255, 0.3);\\n}\\n.dark-mode .mat-button.mat-primary .mat-button-focus-overlay, .dark-mode .mat-icon-button.mat-primary .mat-button-focus-overlay, .dark-mode .mat-stroked-button.mat-primary .mat-button-focus-overlay {\\n background-color: #00bcd4;\\n}\\n.dark-mode .mat-button.mat-accent .mat-button-focus-overlay, .dark-mode .mat-icon-button.mat-accent .mat-button-focus-overlay, .dark-mode .mat-stroked-button.mat-accent .mat-button-focus-overlay {\\n background-color: #2979ff;\\n}\\n.dark-mode .mat-button.mat-warn .mat-button-focus-overlay, .dark-mode .mat-icon-button.mat-warn .mat-button-focus-overlay, .dark-mode .mat-stroked-button.mat-warn .mat-button-focus-overlay {\\n background-color: #f44336;\\n}\\n.dark-mode .mat-button[disabled] .mat-button-focus-overlay, .dark-mode .mat-icon-button[disabled] .mat-button-focus-overlay, .dark-mode .mat-stroked-button[disabled] .mat-button-focus-overlay {\\n background-color: transparent;\\n}\\n.dark-mode .mat-button .mat-ripple-element, .dark-mode .mat-icon-button .mat-ripple-element, .dark-mode .mat-stroked-button .mat-ripple-element {\\n opacity: 0.1;\\n background-color: currentColor;\\n}\\n.dark-mode .mat-button-focus-overlay {\\n background: white;\\n}\\n.dark-mode .mat-stroked-button:not([disabled]) {\\n border-color: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-flat-button, .dark-mode .mat-raised-button, .dark-mode .mat-fab, .dark-mode .mat-mini-fab {\\n color: white;\\n background-color: #424242;\\n}\\n.dark-mode .mat-flat-button.mat-primary, .dark-mode .mat-raised-button.mat-primary, .dark-mode .mat-fab.mat-primary, .dark-mode .mat-mini-fab.mat-primary {\\n color: white;\\n}\\n.dark-mode .mat-flat-button.mat-accent, .dark-mode .mat-raised-button.mat-accent, .dark-mode .mat-fab.mat-accent, .dark-mode .mat-mini-fab.mat-accent {\\n color: white;\\n}\\n.dark-mode .mat-flat-button.mat-warn, .dark-mode .mat-raised-button.mat-warn, .dark-mode .mat-fab.mat-warn, .dark-mode .mat-mini-fab.mat-warn {\\n color: white;\\n}\\n.dark-mode .mat-flat-button.mat-primary[disabled], .dark-mode .mat-flat-button.mat-accent[disabled], .dark-mode .mat-flat-button.mat-warn[disabled], .dark-mode .mat-flat-button[disabled][disabled], .dark-mode .mat-raised-button.mat-primary[disabled], .dark-mode .mat-raised-button.mat-accent[disabled], .dark-mode .mat-raised-button.mat-warn[disabled], .dark-mode .mat-raised-button[disabled][disabled], .dark-mode .mat-fab.mat-primary[disabled], .dark-mode .mat-fab.mat-accent[disabled], .dark-mode .mat-fab.mat-warn[disabled], .dark-mode .mat-fab[disabled][disabled], .dark-mode .mat-mini-fab.mat-primary[disabled], .dark-mode .mat-mini-fab.mat-accent[disabled], .dark-mode .mat-mini-fab.mat-warn[disabled], .dark-mode .mat-mini-fab[disabled][disabled] {\\n color: rgba(255, 255, 255, 0.3);\\n}\\n.dark-mode .mat-flat-button.mat-primary, .dark-mode .mat-raised-button.mat-primary, .dark-mode .mat-fab.mat-primary, .dark-mode .mat-mini-fab.mat-primary {\\n background-color: #00bcd4;\\n}\\n.dark-mode .mat-flat-button.mat-accent, .dark-mode .mat-raised-button.mat-accent, .dark-mode .mat-fab.mat-accent, .dark-mode .mat-mini-fab.mat-accent {\\n background-color: #2979ff;\\n}\\n.dark-mode .mat-flat-button.mat-warn, .dark-mode .mat-raised-button.mat-warn, .dark-mode .mat-fab.mat-warn, .dark-mode .mat-mini-fab.mat-warn {\\n background-color: #f44336;\\n}\\n.dark-mode .mat-flat-button.mat-primary[disabled], .dark-mode .mat-flat-button.mat-accent[disabled], .dark-mode .mat-flat-button.mat-warn[disabled], .dark-mode .mat-flat-button[disabled][disabled], .dark-mode .mat-raised-button.mat-primary[disabled], .dark-mode .mat-raised-button.mat-accent[disabled], .dark-mode .mat-raised-button.mat-warn[disabled], .dark-mode .mat-raised-button[disabled][disabled], .dark-mode .mat-fab.mat-primary[disabled], .dark-mode .mat-fab.mat-accent[disabled], .dark-mode .mat-fab.mat-warn[disabled], .dark-mode .mat-fab[disabled][disabled], .dark-mode .mat-mini-fab.mat-primary[disabled], .dark-mode .mat-mini-fab.mat-accent[disabled], .dark-mode .mat-mini-fab.mat-warn[disabled], .dark-mode .mat-mini-fab[disabled][disabled] {\\n background-color: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-flat-button.mat-primary .mat-ripple-element, .dark-mode .mat-raised-button.mat-primary .mat-ripple-element, .dark-mode .mat-fab.mat-primary .mat-ripple-element, .dark-mode .mat-mini-fab.mat-primary .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.dark-mode .mat-flat-button.mat-accent .mat-ripple-element, .dark-mode .mat-raised-button.mat-accent .mat-ripple-element, .dark-mode .mat-fab.mat-accent .mat-ripple-element, .dark-mode .mat-mini-fab.mat-accent .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.dark-mode .mat-flat-button.mat-warn .mat-ripple-element, .dark-mode .mat-raised-button.mat-warn .mat-ripple-element, .dark-mode .mat-fab.mat-warn .mat-ripple-element, .dark-mode .mat-mini-fab.mat-warn .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.dark-mode .mat-stroked-button:not([class*=mat-elevation-z]), .dark-mode .mat-flat-button:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-raised-button:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-raised-button:not([disabled]):active:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-raised-button[disabled]:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-fab:not([class*=mat-elevation-z]), .dark-mode .mat-mini-fab:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-fab:not([disabled]):active:not([class*=mat-elevation-z]), .dark-mode .mat-mini-fab:not([disabled]):active:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-fab[disabled]:not([class*=mat-elevation-z]), .dark-mode .mat-mini-fab[disabled]:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-button-toggle-standalone,\\n.dark-mode .mat-button-toggle-group {\\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\\n.dark-mode .mat-button-toggle-group-appearance-standard {\\n box-shadow: none;\\n}\\n.dark-mode .mat-button-toggle {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-button-toggle .mat-button-toggle-focus-overlay {\\n background-color: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-button-toggle-appearance-standard {\\n color: white;\\n background: #424242;\\n}\\n.dark-mode .mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay {\\n background-color: white;\\n}\\n.dark-mode .mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\\n border-left: solid 1px rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode [dir=rtl] .mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\\n border-left: none;\\n border-right: solid 1px rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle + .mat-button-toggle {\\n border-left: none;\\n border-right: none;\\n border-top: solid 1px rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-button-toggle-checked {\\n background-color: #212121;\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-button-toggle-checked.mat-button-toggle-appearance-standard {\\n color: white;\\n}\\n.dark-mode .mat-button-toggle-disabled {\\n color: rgba(255, 255, 255, 0.3);\\n background-color: black;\\n}\\n.dark-mode .mat-button-toggle-disabled.mat-button-toggle-appearance-standard {\\n background: #424242;\\n}\\n.dark-mode .mat-button-toggle-disabled.mat-button-toggle-checked {\\n background-color: #424242;\\n}\\n.dark-mode .mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\\n.dark-mode .mat-button-toggle-group-appearance-standard {\\n border: solid 1px rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-card {\\n background: #424242;\\n color: white;\\n}\\n.dark-mode .mat-card:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-card.mat-card-flat:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-card-subtitle {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-checkbox-frame {\\n border-color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-checkbox-checkmark {\\n fill: #303030;\\n}\\n.dark-mode .mat-checkbox-checkmark-path {\\n stroke: #303030 !important;\\n}\\n.dark-mode .mat-checkbox-mixedmark {\\n background-color: #303030;\\n}\\n.dark-mode .mat-checkbox-indeterminate.mat-primary .mat-checkbox-background, .dark-mode .mat-checkbox-checked.mat-primary .mat-checkbox-background {\\n background-color: #00bcd4;\\n}\\n.dark-mode .mat-checkbox-indeterminate.mat-accent .mat-checkbox-background, .dark-mode .mat-checkbox-checked.mat-accent .mat-checkbox-background {\\n background-color: #2979ff;\\n}\\n.dark-mode .mat-checkbox-indeterminate.mat-warn .mat-checkbox-background, .dark-mode .mat-checkbox-checked.mat-warn .mat-checkbox-background {\\n background-color: #f44336;\\n}\\n.dark-mode .mat-checkbox-disabled.mat-checkbox-checked .mat-checkbox-background, .dark-mode .mat-checkbox-disabled.mat-checkbox-indeterminate .mat-checkbox-background {\\n background-color: #686868;\\n}\\n.dark-mode .mat-checkbox-disabled:not(.mat-checkbox-checked) .mat-checkbox-frame {\\n border-color: #686868;\\n}\\n.dark-mode .mat-checkbox-disabled .mat-checkbox-label {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-checkbox .mat-ripple-element {\\n background-color: white;\\n}\\n.dark-mode .mat-checkbox-checked:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element,\\n.dark-mode .mat-checkbox:active:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element {\\n background: #00bcd4;\\n}\\n.dark-mode .mat-checkbox-checked:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element,\\n.dark-mode .mat-checkbox:active:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element {\\n background: #2979ff;\\n}\\n.dark-mode .mat-checkbox-checked:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element,\\n.dark-mode .mat-checkbox:active:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element {\\n background: #f44336;\\n}\\n.dark-mode .mat-chip.mat-standard-chip {\\n background-color: #616161;\\n color: white;\\n}\\n.dark-mode .mat-chip.mat-standard-chip .mat-chip-remove {\\n color: white;\\n opacity: 0.4;\\n}\\n.dark-mode .mat-chip.mat-standard-chip:not(.mat-chip-disabled):active {\\n box-shadow: 0px 3px 3px -2px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 0, 0, 0.14), 0px 1px 8px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-chip.mat-standard-chip:not(.mat-chip-disabled) .mat-chip-remove:hover {\\n opacity: 0.54;\\n}\\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-disabled {\\n opacity: 0.4;\\n}\\n.dark-mode .mat-chip.mat-standard-chip::after {\\n background: white;\\n}\\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-primary {\\n background-color: #00bcd4;\\n color: white;\\n}\\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-chip-remove {\\n color: white;\\n opacity: 0.4;\\n}\\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-warn {\\n background-color: #f44336;\\n color: white;\\n}\\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-chip-remove {\\n color: white;\\n opacity: 0.4;\\n}\\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-accent {\\n background-color: #2979ff;\\n color: white;\\n}\\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-chip-remove {\\n color: white;\\n opacity: 0.4;\\n}\\n.dark-mode .mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.dark-mode .mat-table {\\n background: #424242;\\n}\\n.dark-mode .mat-table thead, .dark-mode .mat-table tbody, .dark-mode .mat-table tfoot,\\n.dark-mode mat-header-row, .dark-mode mat-row, .dark-mode mat-footer-row,\\n.dark-mode [mat-header-row], .dark-mode [mat-row], .dark-mode [mat-footer-row],\\n.dark-mode .mat-table-sticky {\\n background: inherit;\\n}\\n.dark-mode mat-row, .dark-mode mat-header-row, .dark-mode mat-footer-row,\\n.dark-mode th.mat-header-cell, .dark-mode td.mat-cell, .dark-mode td.mat-footer-cell {\\n border-bottom-color: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-header-cell {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-cell, .dark-mode .mat-footer-cell {\\n color: white;\\n}\\n.dark-mode .mat-calendar-arrow {\\n border-top-color: white;\\n}\\n.dark-mode .mat-datepicker-toggle,\\n.dark-mode .mat-datepicker-content .mat-calendar-next-button,\\n.dark-mode .mat-datepicker-content .mat-calendar-previous-button {\\n color: white;\\n}\\n.dark-mode .mat-calendar-table-header {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-calendar-table-header-divider::after {\\n background: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-calendar-body-label {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-calendar-body-cell-content {\\n color: white;\\n border-color: transparent;\\n}\\n.dark-mode .mat-calendar-body-disabled > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected),\\n.dark-mode .cdk-keyboard-focused .mat-calendar-body-active > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected),\\n.dark-mode .cdk-program-focused .mat-calendar-body-active > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\\n background-color: rgba(255, 255, 255, 0.04);\\n}\\n.dark-mode .mat-calendar-body-today:not(.mat-calendar-body-selected) {\\n border-color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-calendar-body-disabled > .mat-calendar-body-today:not(.mat-calendar-body-selected) {\\n border-color: rgba(255, 255, 255, 0.3);\\n}\\n.dark-mode .mat-calendar-body-selected {\\n background-color: #00bcd4;\\n color: white;\\n}\\n.dark-mode .mat-calendar-body-disabled > .mat-calendar-body-selected {\\n background-color: rgba(0, 188, 212, 0.4);\\n}\\n.dark-mode .mat-calendar-body-today.mat-calendar-body-selected {\\n box-shadow: inset 0 0 0 1px white;\\n}\\n.dark-mode .mat-datepicker-content {\\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\\n background-color: #424242;\\n color: white;\\n}\\n.dark-mode .mat-datepicker-content.mat-accent .mat-calendar-body-selected {\\n background-color: #2979ff;\\n color: white;\\n}\\n.dark-mode .mat-datepicker-content.mat-accent .mat-calendar-body-disabled > .mat-calendar-body-selected {\\n background-color: rgba(41, 121, 255, 0.4);\\n}\\n.dark-mode .mat-datepicker-content.mat-accent .mat-calendar-body-today.mat-calendar-body-selected {\\n box-shadow: inset 0 0 0 1px white;\\n}\\n.dark-mode .mat-datepicker-content.mat-warn .mat-calendar-body-selected {\\n background-color: #f44336;\\n color: white;\\n}\\n.dark-mode .mat-datepicker-content.mat-warn .mat-calendar-body-disabled > .mat-calendar-body-selected {\\n background-color: rgba(244, 67, 54, 0.4);\\n}\\n.dark-mode .mat-datepicker-content.mat-warn .mat-calendar-body-today.mat-calendar-body-selected {\\n box-shadow: inset 0 0 0 1px white;\\n}\\n.dark-mode .mat-datepicker-content-touch {\\n box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-datepicker-toggle-active {\\n color: #00bcd4;\\n}\\n.dark-mode .mat-datepicker-toggle-active.mat-accent {\\n color: #2979ff;\\n}\\n.dark-mode .mat-datepicker-toggle-active.mat-warn {\\n color: #f44336;\\n}\\n.dark-mode .mat-dialog-container {\\n box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12);\\n background: #424242;\\n color: white;\\n}\\n.dark-mode .mat-divider {\\n border-top-color: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-divider-vertical {\\n border-right-color: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-expansion-panel {\\n background: #424242;\\n color: white;\\n}\\n.dark-mode .mat-expansion-panel:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-action-row {\\n border-top-color: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-expansion-panel .mat-expansion-panel-header.cdk-keyboard-focused:not([aria-disabled=true]), .dark-mode .mat-expansion-panel .mat-expansion-panel-header.cdk-program-focused:not([aria-disabled=true]), .dark-mode .mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover:not([aria-disabled=true]) {\\n background: rgba(255, 255, 255, 0.04);\\n}\\n@media (hover: none) {\\n .dark-mode .mat-expansion-panel:not(.mat-expanded):not([aria-disabled=true]) .mat-expansion-panel-header:hover {\\n background: #424242;\\n }\\n}\\n.dark-mode .mat-expansion-panel-header-title {\\n color: white;\\n}\\n.dark-mode .mat-expansion-panel-header-description,\\n.dark-mode .mat-expansion-indicator::after {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-expansion-panel-header[aria-disabled=true] {\\n color: rgba(255, 255, 255, 0.3);\\n}\\n.dark-mode .mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title,\\n.dark-mode .mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description {\\n color: inherit;\\n}\\n.dark-mode .mat-form-field-label {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-hint {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-form-field.mat-focused .mat-form-field-label {\\n color: #00bcd4;\\n}\\n.dark-mode .mat-form-field.mat-focused .mat-form-field-label.mat-accent {\\n color: #2979ff;\\n}\\n.dark-mode .mat-form-field.mat-focused .mat-form-field-label.mat-warn {\\n color: #f44336;\\n}\\n.dark-mode .mat-focused .mat-form-field-required-marker {\\n color: #2979ff;\\n}\\n.dark-mode .mat-form-field-ripple {\\n background-color: white;\\n}\\n.dark-mode .mat-form-field.mat-focused .mat-form-field-ripple {\\n background-color: #00bcd4;\\n}\\n.dark-mode .mat-form-field.mat-focused .mat-form-field-ripple.mat-accent {\\n background-color: #2979ff;\\n}\\n.dark-mode .mat-form-field.mat-focused .mat-form-field-ripple.mat-warn {\\n background-color: #f44336;\\n}\\n.dark-mode .mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid) .mat-form-field-infix::after {\\n color: #00bcd4;\\n}\\n.dark-mode .mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-accent .mat-form-field-infix::after {\\n color: #2979ff;\\n}\\n.dark-mode .mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-warn .mat-form-field-infix::after {\\n color: #f44336;\\n}\\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-label {\\n color: #f44336;\\n}\\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-label.mat-accent,\\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-label .mat-form-field-required-marker {\\n color: #f44336;\\n}\\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-ripple,\\n.dark-mode .mat-form-field.mat-form-field-invalid .mat-form-field-ripple.mat-accent {\\n background-color: #f44336;\\n}\\n.dark-mode .mat-error {\\n color: #f44336;\\n}\\n.dark-mode .mat-form-field-appearance-legacy .mat-form-field-label {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-form-field-appearance-legacy .mat-hint {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-form-field-appearance-legacy .mat-form-field-underline {\\n background-color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline {\\n background-image: linear-gradient(to right, rgba(255, 255, 255, 0.7) 0%, rgba(255, 255, 255, 0.7) 33%, transparent 0%);\\n background-size: 4px 100%;\\n background-repeat: repeat-x;\\n}\\n.dark-mode .mat-form-field-appearance-standard .mat-form-field-underline {\\n background-color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline {\\n background-image: linear-gradient(to right, rgba(255, 255, 255, 0.7) 0%, rgba(255, 255, 255, 0.7) 33%, transparent 0%);\\n background-size: 4px 100%;\\n background-repeat: repeat-x;\\n}\\n.dark-mode .mat-form-field-appearance-fill .mat-form-field-flex {\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.dark-mode .mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-flex {\\n background-color: rgba(255, 255, 255, 0.05);\\n}\\n.dark-mode .mat-form-field-appearance-fill .mat-form-field-underline::before {\\n background-color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-label {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-underline::before {\\n background-color: transparent;\\n}\\n.dark-mode .mat-form-field-appearance-outline .mat-form-field-outline {\\n color: rgba(255, 255, 255, 0.3);\\n}\\n.dark-mode .mat-form-field-appearance-outline .mat-form-field-outline-thick {\\n color: white;\\n}\\n.dark-mode .mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick {\\n color: #00bcd4;\\n}\\n.dark-mode .mat-form-field-appearance-outline.mat-focused.mat-accent .mat-form-field-outline-thick {\\n color: #2979ff;\\n}\\n.dark-mode .mat-form-field-appearance-outline.mat-focused.mat-warn .mat-form-field-outline-thick {\\n color: #f44336;\\n}\\n.dark-mode .mat-form-field-appearance-outline.mat-form-field-invalid.mat-form-field-invalid .mat-form-field-outline-thick {\\n color: #f44336;\\n}\\n.dark-mode .mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-label {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline {\\n color: rgba(255, 255, 255, 0.15);\\n}\\n.dark-mode .mat-icon.mat-primary {\\n color: #00bcd4;\\n}\\n.dark-mode .mat-icon.mat-accent {\\n color: #2979ff;\\n}\\n.dark-mode .mat-icon.mat-warn {\\n color: #f44336;\\n}\\n.dark-mode .mat-form-field-type-mat-native-select .mat-form-field-infix::after {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-input-element:disabled,\\n.dark-mode .mat-form-field-type-mat-native-select.mat-form-field-disabled .mat-form-field-infix::after {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-input-element {\\n caret-color: #00bcd4;\\n}\\n.dark-mode .mat-input-element::placeholder {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-input-element::-moz-placeholder {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-input-element::-webkit-input-placeholder {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-input-element:-ms-input-placeholder {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-input-element option {\\n color: rgba(0, 0, 0, 0.87);\\n}\\n.dark-mode .mat-input-element option:disabled {\\n color: rgba(0, 0, 0, 0.38);\\n}\\n.dark-mode .mat-accent .mat-input-element {\\n caret-color: #2979ff;\\n}\\n.dark-mode .mat-warn .mat-input-element,\\n.dark-mode .mat-form-field-invalid .mat-input-element {\\n caret-color: #f44336;\\n}\\n.dark-mode .mat-form-field-type-mat-native-select.mat-form-field-invalid .mat-form-field-infix::after {\\n color: #f44336;\\n}\\n.dark-mode .mat-list-base .mat-list-item {\\n color: white;\\n}\\n.dark-mode .mat-list-base .mat-list-option {\\n color: white;\\n}\\n.dark-mode .mat-list-base .mat-subheader {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-list-item-disabled {\\n background-color: black;\\n}\\n.dark-mode .mat-list-option:hover, .dark-mode .mat-list-option:focus,\\n.dark-mode .mat-nav-list .mat-list-item:hover,\\n.dark-mode .mat-nav-list .mat-list-item:focus,\\n.dark-mode .mat-action-list .mat-list-item:hover,\\n.dark-mode .mat-action-list .mat-list-item:focus {\\n background: rgba(255, 255, 255, 0.04);\\n}\\n.dark-mode .mat-list-single-selected-option, .dark-mode .mat-list-single-selected-option:hover, .dark-mode .mat-list-single-selected-option:focus {\\n background: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-menu-panel {\\n background: #424242;\\n}\\n.dark-mode .mat-menu-panel:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-menu-item {\\n background: transparent;\\n color: white;\\n}\\n.dark-mode .mat-menu-item[disabled], .dark-mode .mat-menu-item[disabled]::after {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-menu-item .mat-icon-no-color,\\n.dark-mode .mat-menu-item-submenu-trigger::after {\\n color: white;\\n}\\n.dark-mode .mat-menu-item:hover:not([disabled]),\\n.dark-mode .mat-menu-item.cdk-program-focused:not([disabled]),\\n.dark-mode .mat-menu-item.cdk-keyboard-focused:not([disabled]),\\n.dark-mode .mat-menu-item-highlighted:not([disabled]) {\\n background: rgba(255, 255, 255, 0.04);\\n}\\n.dark-mode .mat-paginator {\\n background: #424242;\\n}\\n.dark-mode .mat-paginator,\\n.dark-mode .mat-paginator-page-size .mat-select-trigger {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-paginator-decrement,\\n.dark-mode .mat-paginator-increment {\\n border-top: 2px solid white;\\n border-right: 2px solid white;\\n}\\n.dark-mode .mat-paginator-first,\\n.dark-mode .mat-paginator-last {\\n border-top: 2px solid white;\\n}\\n.dark-mode .mat-icon-button[disabled] .mat-paginator-decrement,\\n.dark-mode .mat-icon-button[disabled] .mat-paginator-increment,\\n.dark-mode .mat-icon-button[disabled] .mat-paginator-first,\\n.dark-mode .mat-icon-button[disabled] .mat-paginator-last {\\n border-color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-progress-bar-background {\\n fill: #b2ebf2;\\n}\\n.dark-mode .mat-progress-bar-buffer {\\n background-color: #b2ebf2;\\n}\\n.dark-mode .mat-progress-bar-fill::after {\\n background-color: #00bcd4;\\n}\\n.dark-mode .mat-progress-bar.mat-accent .mat-progress-bar-background {\\n fill: #82b1ff;\\n}\\n.dark-mode .mat-progress-bar.mat-accent .mat-progress-bar-buffer {\\n background-color: #82b1ff;\\n}\\n.dark-mode .mat-progress-bar.mat-accent .mat-progress-bar-fill::after {\\n background-color: #2979ff;\\n}\\n.dark-mode .mat-progress-bar.mat-warn .mat-progress-bar-background {\\n fill: #ffcdd2;\\n}\\n.dark-mode .mat-progress-bar.mat-warn .mat-progress-bar-buffer {\\n background-color: #ffcdd2;\\n}\\n.dark-mode .mat-progress-bar.mat-warn .mat-progress-bar-fill::after {\\n background-color: #f44336;\\n}\\n.dark-mode .mat-progress-spinner circle, .dark-mode .mat-spinner circle {\\n stroke: #00bcd4;\\n}\\n.dark-mode .mat-progress-spinner.mat-accent circle, .dark-mode .mat-spinner.mat-accent circle {\\n stroke: #2979ff;\\n}\\n.dark-mode .mat-progress-spinner.mat-warn circle, .dark-mode .mat-spinner.mat-warn circle {\\n stroke: #f44336;\\n}\\n.dark-mode .mat-radio-outer-circle {\\n border-color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-radio-button.mat-primary.mat-radio-checked .mat-radio-outer-circle {\\n border-color: #00bcd4;\\n}\\n.dark-mode .mat-radio-button.mat-primary .mat-radio-inner-circle,\\n.dark-mode .mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .dark-mode .mat-radio-button.mat-primary.mat-radio-checked .mat-radio-persistent-ripple, .dark-mode .mat-radio-button.mat-primary:active .mat-radio-persistent-ripple {\\n background-color: #00bcd4;\\n}\\n.dark-mode .mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle {\\n border-color: #2979ff;\\n}\\n.dark-mode .mat-radio-button.mat-accent .mat-radio-inner-circle,\\n.dark-mode .mat-radio-button.mat-accent .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .dark-mode .mat-radio-button.mat-accent.mat-radio-checked .mat-radio-persistent-ripple, .dark-mode .mat-radio-button.mat-accent:active .mat-radio-persistent-ripple {\\n background-color: #2979ff;\\n}\\n.dark-mode .mat-radio-button.mat-warn.mat-radio-checked .mat-radio-outer-circle {\\n border-color: #f44336;\\n}\\n.dark-mode .mat-radio-button.mat-warn .mat-radio-inner-circle,\\n.dark-mode .mat-radio-button.mat-warn .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .dark-mode .mat-radio-button.mat-warn.mat-radio-checked .mat-radio-persistent-ripple, .dark-mode .mat-radio-button.mat-warn:active .mat-radio-persistent-ripple {\\n background-color: #f44336;\\n}\\n.dark-mode .mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-outer-circle,\\n.dark-mode .mat-radio-button.mat-radio-disabled .mat-radio-outer-circle {\\n border-color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-radio-button.mat-radio-disabled .mat-radio-ripple .mat-ripple-element,\\n.dark-mode .mat-radio-button.mat-radio-disabled .mat-radio-inner-circle {\\n background-color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-radio-button.mat-radio-disabled .mat-radio-label-content {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-radio-button .mat-ripple-element {\\n background-color: white;\\n}\\n.dark-mode .mat-select-value {\\n color: white;\\n}\\n.dark-mode .mat-select-placeholder {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-select-disabled .mat-select-value {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-select-arrow {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-select-panel {\\n background: #424242;\\n}\\n.dark-mode .mat-select-panel:not([class*=mat-elevation-z]) {\\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-select-panel .mat-option.mat-selected:not(.mat-option-multiple) {\\n background: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-form-field.mat-focused.mat-primary .mat-select-arrow {\\n color: #00bcd4;\\n}\\n.dark-mode .mat-form-field.mat-focused.mat-accent .mat-select-arrow {\\n color: #2979ff;\\n}\\n.dark-mode .mat-form-field.mat-focused.mat-warn .mat-select-arrow {\\n color: #f44336;\\n}\\n.dark-mode .mat-form-field .mat-select.mat-select-invalid .mat-select-arrow {\\n color: #f44336;\\n}\\n.dark-mode .mat-form-field .mat-select.mat-select-disabled .mat-select-arrow {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-drawer-container {\\n background-color: #303030;\\n color: white;\\n}\\n.dark-mode .mat-drawer {\\n background-color: #424242;\\n color: white;\\n}\\n.dark-mode .mat-drawer.mat-drawer-push {\\n background-color: #424242;\\n}\\n.dark-mode .mat-drawer:not(.mat-drawer-side) {\\n box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-drawer-side {\\n border-right: solid 1px rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-drawer-side.mat-drawer-end {\\n border-left: solid 1px rgba(255, 255, 255, 0.12);\\n border-right: none;\\n}\\n.dark-mode [dir=rtl] .mat-drawer-side {\\n border-left: solid 1px rgba(255, 255, 255, 0.12);\\n border-right: none;\\n}\\n.dark-mode [dir=rtl] .mat-drawer-side.mat-drawer-end {\\n border-left: none;\\n border-right: solid 1px rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-drawer-backdrop.mat-drawer-shown {\\n background-color: rgba(189, 189, 189, 0.6);\\n}\\n.dark-mode .mat-slide-toggle.mat-checked .mat-slide-toggle-thumb {\\n background-color: #2979ff;\\n}\\n.dark-mode .mat-slide-toggle.mat-checked .mat-slide-toggle-bar {\\n background-color: rgba(41, 121, 255, 0.54);\\n}\\n.dark-mode .mat-slide-toggle.mat-checked .mat-ripple-element {\\n background-color: #2979ff;\\n}\\n.dark-mode .mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-thumb {\\n background-color: #00bcd4;\\n}\\n.dark-mode .mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-bar {\\n background-color: rgba(0, 188, 212, 0.54);\\n}\\n.dark-mode .mat-slide-toggle.mat-primary.mat-checked .mat-ripple-element {\\n background-color: #00bcd4;\\n}\\n.dark-mode .mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-thumb {\\n background-color: #f44336;\\n}\\n.dark-mode .mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-bar {\\n background-color: rgba(244, 67, 54, 0.54);\\n}\\n.dark-mode .mat-slide-toggle.mat-warn.mat-checked .mat-ripple-element {\\n background-color: #f44336;\\n}\\n.dark-mode .mat-slide-toggle:not(.mat-checked) .mat-ripple-element {\\n background-color: white;\\n}\\n.dark-mode .mat-slide-toggle-thumb {\\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\\n background-color: #bdbdbd;\\n}\\n.dark-mode .mat-slide-toggle-bar {\\n background-color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-slider-track-background {\\n background-color: rgba(255, 255, 255, 0.3);\\n}\\n.dark-mode .mat-primary .mat-slider-track-fill,\\n.dark-mode .mat-primary .mat-slider-thumb,\\n.dark-mode .mat-primary .mat-slider-thumb-label {\\n background-color: #00bcd4;\\n}\\n.dark-mode .mat-primary .mat-slider-thumb-label-text {\\n color: white;\\n}\\n.dark-mode .mat-accent .mat-slider-track-fill,\\n.dark-mode .mat-accent .mat-slider-thumb,\\n.dark-mode .mat-accent .mat-slider-thumb-label {\\n background-color: #2979ff;\\n}\\n.dark-mode .mat-accent .mat-slider-thumb-label-text {\\n color: white;\\n}\\n.dark-mode .mat-warn .mat-slider-track-fill,\\n.dark-mode .mat-warn .mat-slider-thumb,\\n.dark-mode .mat-warn .mat-slider-thumb-label {\\n background-color: #f44336;\\n}\\n.dark-mode .mat-warn .mat-slider-thumb-label-text {\\n color: white;\\n}\\n.dark-mode .mat-slider-focus-ring {\\n background-color: rgba(41, 121, 255, 0.2);\\n}\\n.dark-mode .mat-slider:hover .mat-slider-track-background,\\n.dark-mode .cdk-focused .mat-slider-track-background {\\n background-color: rgba(255, 255, 255, 0.3);\\n}\\n.dark-mode .mat-slider-disabled .mat-slider-track-background,\\n.dark-mode .mat-slider-disabled .mat-slider-track-fill,\\n.dark-mode .mat-slider-disabled .mat-slider-thumb {\\n background-color: rgba(255, 255, 255, 0.3);\\n}\\n.dark-mode .mat-slider-disabled:hover .mat-slider-track-background {\\n background-color: rgba(255, 255, 255, 0.3);\\n}\\n.dark-mode .mat-slider-min-value .mat-slider-focus-ring {\\n background-color: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb,\\n.dark-mode .mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb-label {\\n background-color: white;\\n}\\n.dark-mode .mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb,\\n.dark-mode .mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb-label {\\n background-color: rgba(255, 255, 255, 0.3);\\n}\\n.dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing) .mat-slider-thumb {\\n border-color: rgba(255, 255, 255, 0.3);\\n background-color: transparent;\\n}\\n.dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover .mat-slider-thumb, .dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused .mat-slider-thumb {\\n border-color: rgba(255, 255, 255, 0.3);\\n}\\n.dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover.mat-slider-disabled .mat-slider-thumb, .dark-mode .mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused.mat-slider-disabled .mat-slider-thumb {\\n border-color: rgba(255, 255, 255, 0.3);\\n}\\n.dark-mode .mat-slider-has-ticks .mat-slider-wrapper::after {\\n border-color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-slider-horizontal .mat-slider-ticks {\\n background-image: repeating-linear-gradient(to right, rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0.7) 2px, transparent 0, transparent);\\n background-image: -moz-repeating-linear-gradient(0.0001deg, rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0.7) 2px, transparent 0, transparent);\\n}\\n.dark-mode .mat-slider-vertical .mat-slider-ticks {\\n background-image: repeating-linear-gradient(to bottom, rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0.7) 2px, transparent 0, transparent);\\n}\\n.dark-mode .mat-step-header.cdk-keyboard-focused, .dark-mode .mat-step-header.cdk-program-focused, .dark-mode .mat-step-header:hover {\\n background-color: rgba(255, 255, 255, 0.04);\\n}\\n@media (hover: none) {\\n .dark-mode .mat-step-header:hover {\\n background: none;\\n }\\n}\\n.dark-mode .mat-step-header .mat-step-label,\\n.dark-mode .mat-step-header .mat-step-optional {\\n color: rgba(255, 255, 255, 0.7);\\n}\\n.dark-mode .mat-step-header .mat-step-icon {\\n background-color: rgba(255, 255, 255, 0.7);\\n color: white;\\n}\\n.dark-mode .mat-step-header .mat-step-icon-selected,\\n.dark-mode .mat-step-header .mat-step-icon-state-done,\\n.dark-mode .mat-step-header .mat-step-icon-state-edit {\\n background-color: #00bcd4;\\n color: white;\\n}\\n.dark-mode .mat-step-header .mat-step-icon-state-error {\\n background-color: transparent;\\n color: #f44336;\\n}\\n.dark-mode .mat-step-header .mat-step-label.mat-step-label-active {\\n color: white;\\n}\\n.dark-mode .mat-step-header .mat-step-label.mat-step-label-error {\\n color: #f44336;\\n}\\n.dark-mode .mat-stepper-horizontal, .dark-mode .mat-stepper-vertical {\\n background-color: #424242;\\n}\\n.dark-mode .mat-stepper-vertical-line::before {\\n border-left-color: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-horizontal-stepper-header::before,\\n.dark-mode .mat-horizontal-stepper-header::after,\\n.dark-mode .mat-stepper-horizontal-line {\\n border-top-color: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-sort-header-arrow {\\n color: #c6c6c6;\\n}\\n.dark-mode .mat-tab-nav-bar,\\n.dark-mode .mat-tab-header {\\n border-bottom: 1px solid rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-tab-group-inverted-header .mat-tab-nav-bar,\\n.dark-mode .mat-tab-group-inverted-header .mat-tab-header {\\n border-top: 1px solid rgba(255, 255, 255, 0.12);\\n border-bottom: none;\\n}\\n.dark-mode .mat-tab-label, .dark-mode .mat-tab-link {\\n color: white;\\n}\\n.dark-mode .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-link.mat-tab-disabled {\\n color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-tab-header-pagination-chevron {\\n border-color: white;\\n}\\n.dark-mode .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\\n border-color: rgba(255, 255, 255, 0.5);\\n}\\n.dark-mode .mat-tab-group[class*=mat-background-] .mat-tab-header,\\n.dark-mode .mat-tab-nav-bar[class*=mat-background-] {\\n border-bottom: none;\\n border-top: none;\\n}\\n.dark-mode .mat-tab-group.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-group.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-group.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\\n background-color: rgba(178, 235, 242, 0.3);\\n}\\n.dark-mode .mat-tab-group.mat-primary .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-primary .mat-ink-bar {\\n background-color: #00bcd4;\\n}\\n.dark-mode .mat-tab-group.mat-primary.mat-background-primary .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-primary.mat-background-primary .mat-ink-bar {\\n background-color: white;\\n}\\n.dark-mode .mat-tab-group.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-group.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-group.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\\n background-color: rgba(130, 177, 255, 0.3);\\n}\\n.dark-mode .mat-tab-group.mat-accent .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-accent .mat-ink-bar {\\n background-color: #2979ff;\\n}\\n.dark-mode .mat-tab-group.mat-accent.mat-background-accent .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-accent.mat-background-accent .mat-ink-bar {\\n background-color: white;\\n}\\n.dark-mode .mat-tab-group.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-group.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-group.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\\n background-color: rgba(255, 205, 210, 0.3);\\n}\\n.dark-mode .mat-tab-group.mat-warn .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-warn .mat-ink-bar {\\n background-color: #f44336;\\n}\\n.dark-mode .mat-tab-group.mat-warn.mat-background-warn .mat-ink-bar, .dark-mode .mat-tab-nav-bar.mat-warn.mat-background-warn .mat-ink-bar {\\n background-color: white;\\n}\\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\\n background-color: rgba(178, 235, 242, 0.3);\\n}\\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-header, .dark-mode .mat-tab-group.mat-background-primary .mat-tab-links, .dark-mode .mat-tab-group.mat-background-primary .mat-tab-header-pagination, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-header, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-links, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination {\\n background-color: #00bcd4;\\n}\\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-label, .dark-mode .mat-tab-group.mat-background-primary .mat-tab-link, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-label, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-link {\\n color: white;\\n}\\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-group.mat-background-primary .mat-tab-link.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-link.mat-tab-disabled {\\n color: rgba(255, 255, 255, 0.4);\\n}\\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-chevron {\\n border-color: white;\\n}\\n.dark-mode .mat-tab-group.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\\n border-color: rgba(255, 255, 255, 0.4);\\n}\\n.dark-mode .mat-tab-group.mat-background-primary .mat-ripple-element, .dark-mode .mat-tab-nav-bar.mat-background-primary .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\\n background-color: rgba(130, 177, 255, 0.3);\\n}\\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-header, .dark-mode .mat-tab-group.mat-background-accent .mat-tab-links, .dark-mode .mat-tab-group.mat-background-accent .mat-tab-header-pagination, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-header, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-links, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination {\\n background-color: #2979ff;\\n}\\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-label, .dark-mode .mat-tab-group.mat-background-accent .mat-tab-link, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-label, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-link {\\n color: white;\\n}\\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-group.mat-background-accent .mat-tab-link.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-link.mat-tab-disabled {\\n color: rgba(255, 255, 255, 0.4);\\n}\\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-chevron {\\n border-color: white;\\n}\\n.dark-mode .mat-tab-group.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\\n border-color: rgba(255, 255, 255, 0.4);\\n}\\n.dark-mode .mat-tab-group.mat-background-accent .mat-ripple-element, .dark-mode .mat-tab-nav-bar.mat-background-accent .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-group.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled), .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),\\n.dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled) {\\n background-color: rgba(255, 205, 210, 0.3);\\n}\\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-header, .dark-mode .mat-tab-group.mat-background-warn .mat-tab-links, .dark-mode .mat-tab-group.mat-background-warn .mat-tab-header-pagination, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-header, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-links, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination {\\n background-color: #f44336;\\n}\\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-label, .dark-mode .mat-tab-group.mat-background-warn .mat-tab-link, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-label, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-link {\\n color: white;\\n}\\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-group.mat-background-warn .mat-tab-link.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-label.mat-tab-disabled, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-link.mat-tab-disabled {\\n color: rgba(255, 255, 255, 0.4);\\n}\\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-chevron {\\n border-color: white;\\n}\\n.dark-mode .mat-tab-group.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\\n border-color: rgba(255, 255, 255, 0.4);\\n}\\n.dark-mode .mat-tab-group.mat-background-warn .mat-ripple-element, .dark-mode .mat-tab-nav-bar.mat-background-warn .mat-ripple-element {\\n background-color: rgba(255, 255, 255, 0.12);\\n}\\n.dark-mode .mat-toolbar {\\n background: #212121;\\n color: white;\\n}\\n.dark-mode .mat-toolbar.mat-primary {\\n background: #00bcd4;\\n color: white;\\n}\\n.dark-mode .mat-toolbar.mat-accent {\\n background: #2979ff;\\n color: white;\\n}\\n.dark-mode .mat-toolbar.mat-warn {\\n background: #f44336;\\n color: white;\\n}\\n.dark-mode .mat-toolbar .mat-form-field-underline,\\n.dark-mode .mat-toolbar .mat-form-field-ripple,\\n.dark-mode .mat-toolbar .mat-focused .mat-form-field-ripple {\\n background-color: currentColor;\\n}\\n.dark-mode .mat-toolbar .mat-form-field-label,\\n.dark-mode .mat-toolbar .mat-focused .mat-form-field-label,\\n.dark-mode .mat-toolbar .mat-select-value,\\n.dark-mode .mat-toolbar .mat-select-arrow,\\n.dark-mode .mat-toolbar .mat-form-field.mat-focused .mat-select-arrow {\\n color: inherit;\\n}\\n.dark-mode .mat-toolbar .mat-input-element {\\n caret-color: currentColor;\\n}\\n.dark-mode .mat-tooltip {\\n background: rgba(97, 97, 97, 0.9);\\n}\\n.dark-mode .mat-tree {\\n background: #424242;\\n}\\n.dark-mode .mat-tree-node,\\n.dark-mode .mat-nested-tree-node {\\n color: white;\\n}\\n.dark-mode .mat-snack-bar-container {\\n color: rgba(0, 0, 0, 0.87);\\n background: #fafafa;\\n box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\\n}\\n.dark-mode .mat-simple-snackbar-action {\\n color: inherit;\\n}\\n\\n.mat-stroked-button.mat-black {\\n border: solid black 1px;\\n border-radius: 0;\\n display: flex;\\n align-items: center;\\n height: 2em;\\n padding-left: 2.5em;\\n padding-right: 2.5em;\\n}\\n.mat-stroked-button.mat-black .mat-button-wrapper {\\n font-weight: normal;\\n font-family: \\\"McKinsey Sans\\\", \\\"Helvetica Neue\\\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\\n color: black;\\n}\\n\\n.mat-stroked-button.mat-coachmark {\\n border: solid #6f4d00 1px;\\n border-radius: 0;\\n display: flex;\\n align-items: center;\\n height: 2em;\\n padding-left: 2.5em;\\n padding-right: 2.5em;\\n}\\n.mat-stroked-button.mat-coachmark .mat-button-wrapper {\\n font-weight: normal;\\n font-family: \\\"McKinsey Sans\\\", \\\"Helvetica Neue\\\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\\n color: #6f4d00;\\n}\\n\\n.mat-stroked-button.mat-blue-coachmark {\\n border: solid #1B1B19 1px;\\n border-radius: 0;\\n display: flex;\\n align-items: center;\\n height: 2em;\\n padding-left: 2.5em;\\n padding-right: 2.5em;\\n}\\n.mat-stroked-button.mat-blue-coachmark .mat-button-wrapper {\\n font-weight: normal;\\n font-family: \\\"McKinsey Sans\\\", \\\"Helvetica Neue\\\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\\n color: #1B1B19;\\n}\\n\\nhtml,\\nbody {\\n height: 100%;\\n width: 100%;\\n}\\n\\nbody {\\n background-color: #fff;\\n}\\n\\n.app,\\nbody {\\n font-family: \\\"Helvetica Neue\\\", \\\"Helvetica\\\", Arial, sans-serif;\\n font-weight: 300;\\n}\\n\\n.app {\\n position: absolute;\\n}\\n\\nhtml,\\nbody {\\n margin: 0;\\n padding: 0;\\n font-size: 16px;\\n}\\n\\n.app {\\n top: 0;\\n left: 0;\\n bottom: 0;\\n right: 0;\\n}\\n\\n* {\\n font-family: \\\"Helvetica Neue\\\", \\\"Helvetica\\\", Arial, sans-serif;\\n box-sizing: border-box;\\n}\\n\\n.center {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n -webkit-transform: translate(-50%, -50%);\\n -ms-transform: translate(-50%, -50%);\\n transform: translate(-50%, -50%);\\n margin: auto;\\n}\\n\\n.loading {\\n display: inline-block;\\n padding: 1.5em;\\n border-radius: 1em;\\n color: #000;\\n font-size: 10mm;\\n text-align: center;\\n}\\n\\n.bounce,\\n.bounce .circle,\\n.bounce .circle .inner {\\n height: 4em;\\n width: 4em;\\n border-radius: 100%;\\n}\\n\\n.bounce .circle {\\n -webkit-animation: sk-scaleout 0.8s infinite ease-in-out;\\n animation: sk-scaleout 0.8s infinite ease-in-out;\\n}\\n\\n.bounce .circle .inner {\\n background-color: #000;\\n}\\n\\n@-webkit-keyframes sk-scaleout {\\n 0% {\\n -webkit-transform: scale(0);\\n }\\n 20% {\\n opacity: 1;\\n }\\n 100% {\\n -webkit-transform: scale(1);\\n opacity: 0;\\n }\\n}\\n@keyframes sk-scaleout {\\n 0% {\\n -webkit-transform: scale(0);\\n transform: scale(0);\\n }\\n 20% {\\n opacity: 1;\\n }\\n 100% {\\n -webkit-transform: scale(1);\\n transform: scale(1);\\n opacity: 0;\\n }\\n}\\n.no-script {\\n height: 10em;\\n width: 15em;\\n padding: 0.5em 1em;\\n background-color: #FFF;\\n border-radius: 0.1em;\\n box-shadow: 0 0.1em 0.2em 0.1em rgba(0, 0, 0, 0.2);\\n text-align: center;\\n position: absolute;\\n top: 1em;\\n left: 50%;\\n transform: translateX(-50%);\\n}\\n\\n.no-script img {\\n border-radius: 0.2em;\\n height: 6em;\\n width: 6em;\\n}\\n\\n.no-script .title {\\n padding: 0 1em;\\n font-style: italic;\\n font-size: 1.2em;\\n}\\n\\n.no-script .content {\\n display: flex;\\n}\\n\\n.aca-coin {\\n position: relative;\\n height: 4em;\\n width: 4em;\\n padding: 0.5em;\\n margin: 0.5em;\\n border-radius: 100%;\\n background-color: #dd3d5e;\\n animation: coin-spin 2s infinite ease-in-out;\\n}\\n\\n.aca-logo {\\n height: 3em;\\n width: 3em;\\n background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDIwMDEwOTA0Ly9FTiIKICJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy1TVkctMjAwMTA5MDQvRFREL3N2ZzEwLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4wIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiB3aWR0aD0iNzc5LjAwMDAwMHB0IiBoZWlnaHQ9IjMyNC4wMDAwMDBwdCIgdmlld0JveD0iMCAwIDc3OS4wMDAwMDAgMzI0LjAwMDAwMCIKIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiPgo8bWV0YWRhdGE+CkNyZWF0ZWQgYnkgcG90cmFjZSAxLjE0LCB3cml0dGVuIGJ5IFBldGVyIFNlbGluZ2VyIDIwMDEtMjAxNwo8L21ldGFkYXRhPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjAwMDAwMCwzMjQuMDAwMDAwKSBzY2FsZSgwLjEwMDAwMCwtMC4xMDAwMDApIgpmaWxsPSIjZmZmIiBzdHJva2U9Im5vbmUiPgo8cGF0aCBkPSJNNDAwNSAzMjI4IGMtNDQ3IC0yNSAtODM5IC0yMzUgLTExMDkgLTU5NiAtMzE5IC00MjYgLTQxMSAtMTE0NQotMjE2IC0xNjk3IDE2NyAtNDcxIDU0OSAtODAzIDEwMzcgLTkwMiAxMTEgLTIzIDUwNSAtMjYgNjIzIC01IDEyNyAyMyAyODAgNjIKMzgyIDk5IGw5OCAzNSAwIDEwNSBjMCA5NiAtMiAxMDUgLTE3IDEwMCAtMTAgLTMgLTU3IC0yMiAtMTA2IC00MSAtMTkzIC04MAotMzczIC0xMTEgLTYzNyAtMTExIC0yNzQgMCAtNDAxIDI3IC01OTcgMTI5IC0xMTYgNjAgLTE5OSAxMjQgLTMwMyAyMzMgLTE3MgoxNzggLTI3NiAzODggLTMyNSA2NTYgLTM2IDE5NSAtMzYgNTA4IDAgNzAzIDEwMSA1NTUgNDY2IDk1MiA5ODIgMTA3MCA5MyAyMQo0MTUgMzAgNTI1IDE1IDEyNCAtMTggMjc2IC01NiAzNzkgLTk2IDUwIC0xOSA5MyAtMzUgOTUgLTM1IDIgMCA0IDUyIDQgMTE1CmwwIDExNCAtODcgMjcgYy0yMjggNjkgLTQ2OSA5NyAtNzI4IDgyeiIvPgo8cGF0aCBkPSJNNTkxIDE2MzMgYy0zMjEgLTg1MSAtNTg2IC0xNTU0IC01ODkgLTE1NjEgLTMgLTkgMjQgLTEyIDExNiAtMTIKbDEyMCAwIDYwIDE2MiBjMzMgOTAgMTEzIDMwOCAxNzggNDg2IGwxMTkgMzIyIDY3NSAwIDY3NSAwIDEwNCAtMjgyIGM1NyAtMTU2CjEzNyAtMzc0IDE3OCAtNDg2IGw3NSAtMjAyIDExOSAwIGM4OSAwIDExOSAzIDExOCAxMyAwIDYgLTI2MCA3MDcgLTU3NyAxNTU3CmwtNTc3IDE1NDUgLTEwNSAzIC0xMDYgMyAtNTgzIC0xNTQ4eiIvPgo8cGF0aCBkPSJNNjQwNSAzMTYzIGMtMzggLTk5IC0xMTU5IC0zMDcyIC0xMTYzIC0zMDg2IC00IC0xNSA2IC0xNyAxMTQgLTE3CmwxMTkgMCAxMDQgMjgzIGM1NyAxNTUgMTM3IDM3MyAxNzggNDg1IGw3NSAyMDIgNjc2IC0yIDY3NiAtMyAxNzYgLTQ4MCAxNzcKLTQ4MCAxMjIgLTMgMTIzIC0zIC04IDIzIGMtNCAxMiAtMjY0IDcxMyAtNTc5IDE1NTggbC01NzMgMTUzNSAtMTA1IDMgYy05MyAyCi0xMDUgMSAtMTEyIC0xNXoiLz4KPC9nPgo8L3N2Zz4K);\\n background-repeat: no-repeat;\\n background-position: center;\\n background-size: contain;\\n}\\n\\n@keyframes coin-spin {\\n 0% {\\n transform: rotateY(0deg) translateY(0%);\\n }\\n 49% {\\n transform: rotateY(179deg) translateY(20%);\\n }\\n 50% {\\n transform: rotateY(181deg) translateY(20%);\\n }\\n 100% {\\n transform: rotateY(359deg) translateY(0%);\\n }\\n}\\n.shadow {\\n position: absolute;\\n bottom: 0;\\n left: 50%;\\n animation: floating-shadow 2s infinite ease-in-out;\\n width: 48px;\\n height: 6px;\\n background-color: rgba(0, 0, 0, 0.2);\\n border-radius: 100%;\\n}\\n\\n@keyframes floating-shadow {\\n 0% {\\n transform: translateX(-50%) scale(1);\\n }\\n 45% {\\n transform: translateX(-50%) scale(1.3);\\n }\\n 55% {\\n transform: translateX(-50%) scale(1.3);\\n }\\n 100% {\\n transform: translateX(-50%) scale(1);\\n }\\n}\\nhtml, body {\\n height: 100%;\\n}\\n\\nbody {\\n margin: 0;\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n\\n.yellow-snackbar {\\n background: #ffd149;\\n color: rgba(0, 0, 0, 0.9);\\n text-align: center;\\n}\\n.yellow-snackbar span {\\n color: rgba(0, 0, 0, 0.9);\\n}\\n\\n.sub app-map-controls > div mck-legend-dropdown {\\n position: relative;\\n top: -6px;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .sub app-map-controls > div .map-info-button {\\n display: none !important;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .sub app-map-controls > div .map-info-button {\\n display: none !important;\\n }\\n}\\n\\n.mck-modal-backdrop {\\n background-color: rgba(5, 28, 44, 0.85);\\n}\\n\\n.pulsate {\\n animation: pulsate 2s ease-out;\\n animation-iteration-count: infinite;\\n opacity: 0.3;\\n}\\n\\n@keyframes pulsate {\\n 0% {\\n opacity: 0.3;\\n }\\n 50% {\\n opacity: 1;\\n }\\n 100% {\\n opacity: 0.3;\\n }\\n}\\n.mat-form-field-invalid .mat-form-field-outline > div, .mat-form-field-invalid .mat-form-field-outline-thick > div {\\n border-color: #f44336 !important;\\n}\\n\\n.mck-toggle {\\n position: relative;\\n}\\n.mck-toggle .mat-slide-toggle-thumb {\\n height: 0.875rem;\\n width: 0.875rem;\\n border-radius: 50%;\\n}\\n.mck-toggle .mat-slide-toggle-thumb-container {\\n top: 0.2rem;\\n left: 0.2rem;\\n}\\n.mck-toggle .mat-slide-toggle-bar {\\n position: relative;\\n width: 2.5rem;\\n height: 1.25rem;\\n flex-shrink: 0;\\n border-radius: 1.25rem;\\n background-color: #d0d0d0;\\n}\\n.mck-toggle .mat-slide-toggle-bar .mat-slide-toggle-ripple {\\n top: calc(50% - 23px);\\n}\\n.mck-toggle.mat-checked .mat-slide-toggle-thumb-container {\\n left: 0.42rem;\\n}\\n.mck-toggle.mat-checked .mat-slide-toggle-thumb {\\n background-color: white;\\n}\\n.mck-toggle.mat-checked .mat-slide-toggle-bar {\\n background-color: #2152fe;\\n}\\n\\n.mck-chevron-icon svg {\\n transform: rotate(180deg);\\n transition: transform 0.5s ease;\\n}\\n.mck-chevron-icon.turn-up svg {\\n transform: rotate(0deg);\\n}\\n\\n.mat-tab-label {\\n padding: 0 6px 0 2px !important;\\n min-width: auto !important;\\n margin-right: 40px;\\n font-family: \\\"McKinsey Sans\\\";\\n font-size: 20px;\\n font-weight: 400;\\n color: #333333;\\n opacity: 1 !important;\\n}\\n.mat-tab-label.mat-tab-label-active .mat-tab-label-content {\\n color: #2251FF;\\n}\\n.mat-tab-label .mat-tab-label-content {\\n color: #333333;\\n padding-bottom: 20px;\\n}\\n\\n.mat-tab-group.mat-primary .mat-ink-bar, .mat-tab-nav-bar.mat-primary .mat-ink-bar {\\n background-color: #2251FF;\\n height: 4px;\\n}\\n\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .mck-tab .mat-tab-header {\\n transform: scale(0.65) !important;\\n width: 100vw;\\n display: block;\\n position: relative;\\n left: -19%;\\n }\\n .mck-tab .mat-tab-header .mat-tab-header-pagination {\\n display: none;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .mck-tab .mat-tab-header {\\n transform: scale(0.65) !important;\\n width: 100vw;\\n display: block;\\n position: relative;\\n left: -19%;\\n }\\n .mck-tab .mat-tab-header .mat-tab-header-pagination {\\n display: none;\\n }\\n}\\n.status {\\n background: #fff;\\n color: #000;\\n}\\n.status.tentative, .status.pending, .status.requested {\\n background: #FFF3CE;\\n color: #6A4F00;\\n}\\n.status.accepted {\\n background: #D1F4DD;\\n color: #006200;\\n}\\n.status.approved {\\n background: #D1F4DD;\\n color: #006200;\\n}\\n.status.expired {\\n background: #F0F0F0;\\n color: #757575;\\n}\\n.status.declined, .status.cancelled {\\n background: #FFE5EA;\\n color: #B0001D;\\n}\\n\\n.banner {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n padding: 16px 26px;\\n box-sizing: border-box;\\n}\\n.banner .banner-text {\\n width: calc(100% - 50px);\\n padding: 0 20px;\\n box-sizing: border-box;\\n font-weight: 500;\\n font-family: \\\"McKinsey Sans\\\", \\\"Helvetica Neue\\\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\\n margin: 0;\\n text-align: left;\\n}\\n.banner img:last-child {\\n cursor: pointer;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .banner {\\n align-items: end;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .banner {\\n align-items: end;\\n }\\n}\\n.banner.advise {\\n background-color: #EBEBF6;\\n justify-content: start !important;\\n border: 1px solid rgba(106, 79, 0, 0.11);\\n}\\n.banner.advise .banner-text {\\n color: #1B1B19;\\n}\\n.banner.info {\\n background-color: #E6ECFF;\\n}\\n.banner.info .banner-text {\\n color: #1E32E6;\\n}\\n.banner.warning {\\n background-color: #fdf1f3;\\n}\\n.banner.warning .banner-text {\\n color: #B0001D;\\n}\\n.banner.fixed {\\n position: fixed;\\n top: 0;\\n left: 0;\\n width: 100%;\\n z-index: 5;\\n}\\n\\n.fullpage-modal {\\n position: fixed;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n z-index: 3;\\n background-color: #f8f9fa;\\n}\\n.fullpage-modal .header {\\n z-index: 1;\\n}\\n\\n.coachmark {\\n margin-top: 0;\\n position: relative;\\n top: -6px;\\n font-family: \\\"McKinsey Sans\\\";\\n font-style: normal;\\n font-weight: 400;\\n font-size: 14px;\\n line-height: 20px;\\n color: #333333;\\n}\\n\\n.bottom-panel-buttons {\\n position: fixed;\\n bottom: 0;\\n width: 100%;\\n min-height: 80px;\\n background-color: white;\\n border: 1px solid #E6E6E6;\\n z-index: 1002;\\n}\\n.bottom-panel-buttons .buttons {\\n padding: 24px 16px;\\n border: none;\\n background-color: transparent;\\n max-width: 684px;\\n margin: 0 auto;\\n display: flex;\\n}\\n.bottom-panel-buttons .buttons button {\\n flex: 1;\\n height: 48px;\\n font-size: 16px;\\n max-width: 332px;\\n}\\n.bottom-panel-buttons .buttons button:nth-child(1) {\\n margin-right: 5px;\\n border: 1px solid #D0D0D0;\\n}\\n.bottom-panel-buttons .buttons button:nth-child(2) {\\n margin-left: 5px;\\n}\\n@media only screen and (orientation: portrait) and (max-width: 450px) {\\n .bottom-panel-buttons .buttons {\\n padding: 16px 0;\\n }\\n .bottom-panel-buttons .buttons button {\\n margin: 0 16px;\\n }\\n .bottom-panel-buttons .buttons button:nth-child(1) {\\n margin-right: 8px;\\n }\\n .bottom-panel-buttons .buttons button:nth-child(2) {\\n margin-left: 8px;\\n }\\n}\\n@media only screen and (orientation: landscape) and (max-width: 800px) {\\n .bottom-panel-buttons .buttons {\\n padding: 16px 0;\\n }\\n .bottom-panel-buttons .buttons button {\\n margin: 0 16px;\\n }\\n .bottom-panel-buttons .buttons button:nth-child(1) {\\n margin-right: 8px;\\n }\\n .bottom-panel-buttons .buttons button:nth-child(2) {\\n margin-left: 8px;\\n }\\n}\\n\\n.modal_mask {\\n width: 100vw;\\n height: 100vh;\\n position: fixed;\\n top: 0;\\n left: 0;\\n background-color: white;\\n z-index: 3;\\n}\",\"// Import all the theming functionality.\\n// We want overlays to always appear over user content, so set a baseline\\n// very high z-index for the overlay container, which is where we create the new\\n// stacking context for all overlays.\\n$cdk-z-index-overlay-container: 1000 !default;\\n$cdk-z-index-overlay: 1000 !default;\\n$cdk-z-index-overlay-backdrop: 1000 !default;\\n\\n// Background color for all of the backdrops\\n$cdk-overlay-dark-backdrop-background: rgba(0, 0, 0, 0.32) !default;\\n\\n// Default backdrop animation is based on the Material Design swift-ease-out.\\n$backdrop-animation-duration: 400ms !default;\\n$backdrop-animation-timing-function: cubic-bezier(0.25, 0.8, 0.25, 1) !default;\\n\\n\\n@mixin cdk-overlay() {\\n .cdk-overlay-container, .cdk-global-overlay-wrapper {\\n // Disable events from being captured on the overlay container.\\n pointer-events: none;\\n\\n // The container should be the size of the viewport.\\n top: 0;\\n left: 0;\\n height: 100%;\\n width: 100%;\\n }\\n\\n // The overlay-container is an invisible element which contains all individual overlays.\\n .cdk-overlay-container {\\n position: fixed;\\n z-index: $cdk-z-index-overlay-container;\\n\\n &:empty {\\n // Hide the element when it doesn't have any child nodes. This doesn't\\n // include overlays that have been detached, rather than disposed.\\n display: none;\\n }\\n }\\n\\n // We use an extra wrapper element in order to use make the overlay itself a flex item.\\n // This makes centering the overlay easy without running into the subpixel rendering\\n // problems tied to using `transform` and without interfering with the other position\\n // strategies.\\n .cdk-global-overlay-wrapper {\\n display: flex;\\n position: absolute;\\n z-index: $cdk-z-index-overlay;\\n }\\n\\n // A single overlay pane.\\n .cdk-overlay-pane {\\n // Note: it's important for this one to start off `absolute`,\\n // in order for us to be able to measure it correctly.\\n position: absolute;\\n pointer-events: auto;\\n box-sizing: border-box;\\n z-index: $cdk-z-index-overlay;\\n\\n // For connected-position overlays, we set `display: flex` in\\n // order to force `max-width` and `max-height` to take effect.\\n display: flex;\\n max-width: 100%;\\n max-height: 100%;\\n }\\n\\n .cdk-overlay-backdrop {\\n // TODO(jelbourn): reuse sidenav fullscreen mixin.\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n\\n z-index: $cdk-z-index-overlay-backdrop;\\n pointer-events: auto;\\n -webkit-tap-highlight-color: transparent;\\n transition: opacity $backdrop-animation-duration $backdrop-animation-timing-function;\\n opacity: 0;\\n\\n &.cdk-overlay-backdrop-showing {\\n opacity: 1;\\n\\n // In high contrast mode the rgba background will become solid so we need to fall back\\n // to making it opaque using `opacity`. Note that we can't use the `cdk-high-contrast`\\n // mixin, because we can't normalize the import path to the _a11y.scss both for the\\n // source and when this file is distributed. See #10908.\\n @media screen and (-ms-high-contrast: active) {\\n opacity: 0.6;\\n }\\n }\\n }\\n\\n .cdk-overlay-dark-backdrop {\\n background: $cdk-overlay-dark-backdrop-background;\\n }\\n\\n .cdk-overlay-transparent-backdrop {\\n // Note: as of Firefox 57, having the backdrop be `background: none` will prevent it from\\n // capturing the user's mouse scroll events. Since we also can't use something like\\n // `rgba(0, 0, 0, 0)`, we work around the inconsistency by not setting the background at\\n // all and using `opacity` to make the element transparent.\\n &, &.cdk-overlay-backdrop-showing {\\n opacity: 0;\\n }\\n }\\n\\n // Overlay parent element used with the connected position strategy. Used to constrain the\\n // overlay element's size to fit within the viewport.\\n .cdk-overlay-connected-position-bounding-box {\\n position: absolute;\\n z-index: $cdk-z-index-overlay;\\n\\n // We use `display: flex` on this element exclusively for centering connected overlays.\\n // When *not* centering, a top/left/bottom/right will be set which overrides the normal\\n // flex layout.\\n display: flex;\\n\\n // We use the `column` direction here to avoid some flexbox issues in Edge\\n // when using the \\\"grow after open\\\" options.\\n flex-direction: column;\\n\\n // Add some dimensions so the element has an `innerText` which some people depend on in tests.\\n min-width: 1px;\\n min-height: 1px;\\n }\\n\\n // Used when disabling global scrolling.\\n .cdk-global-scrollblock {\\n position: fixed;\\n\\n // Necessary for the content not to lose its width. Note that we're using 100%, instead of\\n // 100vw, because 100vw includes the width plus the scrollbar, whereas 100% is the width\\n // that the element had before we made it `fixed`.\\n width: 100%;\\n\\n // Note: this will always add a scrollbar to whatever element it is on, which can\\n // potentially result in double scrollbars. It shouldn't be an issue, because we won't\\n // block scrolling on a page that doesn't have a scrollbar in the first place.\\n overflow-y: scroll;\\n }\\n}\\n\\n@mixin cdk-a11y {\\n .cdk-visually-hidden {\\n border: 0;\\n clip: rect(0 0 0 0);\\n height: 1px;\\n margin: -1px;\\n overflow: hidden;\\n padding: 0;\\n position: absolute;\\n width: 1px;\\n\\n // Avoid browsers rendering the focus ring in some cases.\\n outline: 0;\\n\\n // Avoid some cases where the browser will still render the native controls (see #9049).\\n -webkit-appearance: none;\\n -moz-appearance: none;\\n }\\n}\\n\\n/// Emits the mixin's content nested under `$selector-context` if `$selector-context`\\n/// is non-empty.\\n/// @param selector-context The selector under which to nest the mixin's content.\\n@mixin _cdk-optionally-nest-content($selector-context) {\\n @if ($selector-context == '') {\\n @content;\\n }\\n @else {\\n #{$selector-context} {\\n @content;\\n }\\n }\\n}\\n\\n/// Applies styles for users in high contrast mode. Note that this only applies\\n/// to Microsoft browsers. Chrome can be included by checking for the `html[hc]`\\n/// attribute, however Chrome handles high contrast differently.\\n///\\n/// @param target Which kind of high contrast setting to target. Defaults to `active`, can be\\n/// `white-on-black` or `black-on-white`.\\n/// @param encapsulation Whether to emit styles for view encapsulation. Values are:\\n/// * `on` - works for `Emulated`, `Native`, and `ShadowDom`\\n/// * `off` - works for `None`\\n/// * `any` - works for all encapsulation modes by emitting the CSS twice (default).\\n@mixin cdk-high-contrast($target: active, $encapsulation: 'any') {\\n @if ($target != 'active' and $target != 'black-on-white' and $target != 'white-on-black') {\\n @error 'Unknown cdk-high-contrast value \\\"#{$target}\\\" provided. ' +\\n 'Allowed values are \\\"active\\\", \\\"black-on-white\\\", and \\\"white-on-black\\\"';\\n }\\n\\n @if ($encapsulation != 'on' and $encapsulation != 'off' and $encapsulation != 'any') {\\n @error 'Unknown cdk-high-contrast encapsulation \\\"#{$encapsulation}\\\" provided. ' +\\n 'Allowed values are \\\"on\\\", \\\"off\\\", and \\\"any\\\"';\\n }\\n\\n // If the selector context has multiple parts, such as `.section, .region`, just doing\\n // `.cdk-high-contrast-xxx #{&}` will only apply the parent selector to the first part of the\\n // context. We address this by nesting the selector context under .cdk-high-contrast.\\n @at-root {\\n $selector-context: #{&};\\n\\n @if ($encapsulation != 'on') {\\n .cdk-high-contrast-#{$target} {\\n @include _cdk-optionally-nest-content($selector-context) {\\n @content;\\n }\\n }\\n }\\n\\n @if ($encapsulation != 'off') {\\n .cdk-high-contrast-#{$target} :host {\\n @include _cdk-optionally-nest-content($selector-context) {\\n @content;\\n }\\n }\\n }\\n }\\n}\\n\\n// Core styles that enable monitoring autofill state of text fields.\\n@mixin cdk-text-field {\\n // Keyframes that apply no styles, but allow us to monitor when an text field becomes autofilled\\n // by watching for the animation events that are fired when they start. Note: the /*!*/ comment is\\n // needed to prevent LibSass from stripping the keyframes out.\\n // Based on: https://medium.com/@brunn/detecting-autofilled-fields-in-javascript-aed598d25da7\\n @keyframes cdk-text-field-autofill-start {/*!*/}\\n @keyframes cdk-text-field-autofill-end {/*!*/}\\n\\n .cdk-text-field-autofill-monitored:-webkit-autofill {\\n // Since Chrome 80 we need a 1ms delay, or the animationstart event won't fire.\\n animation: cdk-text-field-autofill-start 0s 1ms;\\n }\\n\\n .cdk-text-field-autofill-monitored:not(:-webkit-autofill) {\\n // Since Chrome 80 we need a 1ms delay, or the animationstart event won't fire.\\n animation: cdk-text-field-autofill-end 0s 1ms;\\n }\\n\\n // Remove the resize handle on autosizing textareas, because whatever height\\n // the user resized to will be overwritten once they start typing again.\\n textarea.cdk-textarea-autosize {\\n resize: none;\\n }\\n\\n // This class is temporarily applied to the textarea when it is being measured. It is immediately\\n // removed when measuring is complete. We use `!important` rules here to make sure user-specified\\n // rules do not interfere with the measurement.\\n textarea.cdk-textarea-autosize-measuring {\\n height: auto !important;\\n overflow: hidden !important;\\n // Having 2px top and bottom padding seems to fix a bug where Chrome gets an incorrect\\n // measurement. We just have to account for it later and subtract it off the final result.\\n padding: 2px 0 !important;\\n box-sizing: content-box !important;\\n }\\n}\\n\\n// Used to generate UIDs for keyframes used to change the text field autofill styles.\\n$cdk-text-field-autofill-color-frame-count: 0;\\n\\n// Mixin used to apply custom background and foreground colors to an autofilled text field.\\n// Based on: https://stackoverflow.com/questions/2781549/\\n// removing-input-background-colour-for-chrome-autocomplete#answer-37432260\\n@mixin cdk-text-field-autofill-color($background, $foreground:'') {\\n @keyframes cdk-text-field-autofill-color-#{$cdk-text-field-autofill-color-frame-count} {\\n to {\\n background: $background;\\n @if $foreground != '' { color: $foreground; }\\n }\\n }\\n\\n &:-webkit-autofill {\\n animation: cdk-text-field-autofill-color-#{$cdk-text-field-autofill-color-frame-count} both;\\n }\\n\\n &.cdk-text-field-autofill-monitored:-webkit-autofill {\\n // Since Chrome 80 we need a 1ms delay for cdk-text-field-autofill-start, or the animationstart\\n // event won't fire.\\n animation: cdk-text-field-autofill-start 0s 1ms,\\n cdk-text-field-autofill-color-#{$cdk-text-field-autofill-color-frame-count} both;\\n }\\n\\n $cdk-text-field-autofill-color-frame-count:\\n $cdk-text-field-autofill-color-frame-count + 1 !global;\\n}\\n\\n\\n// Core styles that can be used to apply material design treatments to any element.\\n// Media queries\\n// TODO(josephperrott): Change $mat-xsmall and $mat-small usages to rely on BreakpointObserver,\\n$mat-xsmall: 'max-width: 599px';\\n$mat-small: 'max-width: 959px';\\n\\n// TODO: Revisit all z-indices before beta\\n// z-index master list\\n\\n$z-index-fab: 20 !default;\\n$z-index-drawer: 100 !default;\\n\\n// Global constants\\n$pi: 3.14159265;\\n\\n// Padding between input toggles and their labels\\n$mat-toggle-padding: 8px !default;\\n// Width and height of input toggles\\n$mat-toggle-size: 20px !default;\\n\\n// Easing Curves\\n// TODO(jelbourn): all of these need to be revisited\\n\\n// The default animation curves used by material design.\\n$mat-linear-out-slow-in-timing-function: cubic-bezier(0, 0, 0.2, 0.1) !default;\\n$mat-fast-out-slow-in-timing-function: cubic-bezier(0.4, 0, 0.2, 1) !default;\\n$mat-fast-out-linear-in-timing-function: cubic-bezier(0.4, 0, 1, 1) !default;\\n\\n$ease-in-out-curve-function: cubic-bezier(0.35, 0, 0.25, 1) !default;\\n\\n$swift-ease-out-duration: 400ms !default;\\n$swift-ease-out-timing-function: cubic-bezier(0.25, 0.8, 0.25, 1) !default;\\n$swift-ease-out: all $swift-ease-out-duration $swift-ease-out-timing-function !default;\\n\\n$swift-ease-in-duration: 300ms !default;\\n$swift-ease-in-timing-function: cubic-bezier(0.55, 0, 0.55, 0.2) !default;\\n$swift-ease-in: all $swift-ease-in-duration $swift-ease-in-timing-function !default;\\n\\n$swift-ease-in-out-duration: 500ms !default;\\n$swift-ease-in-out-timing-function: $ease-in-out-curve-function !default;\\n$swift-ease-in-out: all $swift-ease-in-out-duration $swift-ease-in-out-timing-function !default;\\n\\n$swift-linear-duration: 80ms !default;\\n$swift-linear-timing-function: linear !default;\\n$swift-linear: all $swift-linear-duration $swift-linear-timing-function !default;\\n\\n\\n\\n// A collection of mixins and CSS classes that can be used to apply elevation to a material\\n// element.\\n// See: https://material.io/design/environment/elevation.html\\n// Examples:\\n//\\n//\\n// .mat-foo {\\n// @include $mat-elevation(2);\\n//\\n// &:active {\\n// @include $mat-elevation(8);\\n// }\\n// }\\n//\\n//

Some content

\\n//\\n// For an explanation of the design behind how elevation is implemented, see the design doc at\\n// https://goo.gl/Kq0k9Z.\\n\\n// Colors for umbra, penumbra, and ambient shadows. As described in the design doc, each elevation\\n// level is created using a set of 3 shadow values, one for umbra (the shadow representing the\\n// space completely obscured by an object relative to its light source), one for penumbra (the\\n// space partially obscured by an object), and one for ambient (the space which contains the object\\n// itself). For a further explanation of these terms and their meanings, see\\n// https://en.wikipedia.org/wiki/Umbra,_penumbra_and_antumbra.\\n\\n// Maps for the different shadow sets and their values within each z-space. These values were\\n// created by taking a few reference shadow sets created by Google's Designers and interpolating\\n// all of the values between them.\\n\\n@function _get-umbra-map($color, $opacity) {\\n $shadow-color: if(type-of($color) == color, rgba($color, $opacity * 0.2), $color);\\n\\n @return (\\n 0: '0px 0px 0px 0px #{$shadow-color}',\\n 1: '0px 2px 1px -1px #{$shadow-color}',\\n 2: '0px 3px 1px -2px #{$shadow-color}',\\n 3: '0px 3px 3px -2px #{$shadow-color}',\\n 4: '0px 2px 4px -1px #{$shadow-color}',\\n 5: '0px 3px 5px -1px #{$shadow-color}',\\n 6: '0px 3px 5px -1px #{$shadow-color}',\\n 7: '0px 4px 5px -2px #{$shadow-color}',\\n 8: '0px 5px 5px -3px #{$shadow-color}',\\n 9: '0px 5px 6px -3px #{$shadow-color}',\\n 10: '0px 6px 6px -3px #{$shadow-color}',\\n 11: '0px 6px 7px -4px #{$shadow-color}',\\n 12: '0px 7px 8px -4px #{$shadow-color}',\\n 13: '0px 7px 8px -4px #{$shadow-color}',\\n 14: '0px 7px 9px -4px #{$shadow-color}',\\n 15: '0px 8px 9px -5px #{$shadow-color}',\\n 16: '0px 8px 10px -5px #{$shadow-color}',\\n 17: '0px 8px 11px -5px #{$shadow-color}',\\n 18: '0px 9px 11px -5px #{$shadow-color}',\\n 19: '0px 9px 12px -6px #{$shadow-color}',\\n 20: '0px 10px 13px -6px #{$shadow-color}',\\n 21: '0px 10px 13px -6px #{$shadow-color}',\\n 22: '0px 10px 14px -6px #{$shadow-color}',\\n 23: '0px 11px 14px -7px #{$shadow-color}',\\n 24: '0px 11px 15px -7px #{$shadow-color}'\\n );\\n}\\n\\n@function _get-penumbra-map($color, $opacity) {\\n $shadow-color: if(type-of($color) == color, rgba($color, $opacity * 0.14), $color);\\n\\n @return (\\n 0: '0px 0px 0px 0px #{$shadow-color}',\\n 1: '0px 1px 1px 0px #{$shadow-color}',\\n 2: '0px 2px 2px 0px #{$shadow-color}',\\n 3: '0px 3px 4px 0px #{$shadow-color}',\\n 4: '0px 4px 5px 0px #{$shadow-color}',\\n 5: '0px 5px 8px 0px #{$shadow-color}',\\n 6: '0px 6px 10px 0px #{$shadow-color}',\\n 7: '0px 7px 10px 1px #{$shadow-color}',\\n 8: '0px 8px 10px 1px #{$shadow-color}',\\n 9: '0px 9px 12px 1px #{$shadow-color}',\\n 10: '0px 10px 14px 1px #{$shadow-color}',\\n 11: '0px 11px 15px 1px #{$shadow-color}',\\n 12: '0px 12px 17px 2px #{$shadow-color}',\\n 13: '0px 13px 19px 2px #{$shadow-color}',\\n 14: '0px 14px 21px 2px #{$shadow-color}',\\n 15: '0px 15px 22px 2px #{$shadow-color}',\\n 16: '0px 16px 24px 2px #{$shadow-color}',\\n 17: '0px 17px 26px 2px #{$shadow-color}',\\n 18: '0px 18px 28px 2px #{$shadow-color}',\\n 19: '0px 19px 29px 2px #{$shadow-color}',\\n 20: '0px 20px 31px 3px #{$shadow-color}',\\n 21: '0px 21px 33px 3px #{$shadow-color}',\\n 22: '0px 22px 35px 3px #{$shadow-color}',\\n 23: '0px 23px 36px 3px #{$shadow-color}',\\n 24: '0px 24px 38px 3px #{$shadow-color}'\\n );\\n}\\n\\n@function _get-ambient-map($color, $opacity) {\\n $shadow-color: if(type-of($color) == color, rgba($color, $opacity * 0.12), $color);\\n\\n @return (\\n 0: '0px 0px 0px 0px #{$shadow-color}',\\n 1: '0px 1px 3px 0px #{$shadow-color}',\\n 2: '0px 1px 5px 0px #{$shadow-color}',\\n 3: '0px 1px 8px 0px #{$shadow-color}',\\n 4: '0px 1px 10px 0px #{$shadow-color}',\\n 5: '0px 1px 14px 0px #{$shadow-color}',\\n 6: '0px 1px 18px 0px #{$shadow-color}',\\n 7: '0px 2px 16px 1px #{$shadow-color}',\\n 8: '0px 3px 14px 2px #{$shadow-color}',\\n 9: '0px 3px 16px 2px #{$shadow-color}',\\n 10: '0px 4px 18px 3px #{$shadow-color}',\\n 11: '0px 4px 20px 3px #{$shadow-color}',\\n 12: '0px 5px 22px 4px #{$shadow-color}',\\n 13: '0px 5px 24px 4px #{$shadow-color}',\\n 14: '0px 5px 26px 4px #{$shadow-color}',\\n 15: '0px 6px 28px 5px #{$shadow-color}',\\n 16: '0px 6px 30px 5px #{$shadow-color}',\\n 17: '0px 6px 32px 5px #{$shadow-color}',\\n 18: '0px 7px 34px 6px #{$shadow-color}',\\n 19: '0px 7px 36px 6px #{$shadow-color}',\\n 20: '0px 8px 38px 7px #{$shadow-color}',\\n 21: '0px 8px 40px 7px #{$shadow-color}',\\n 22: '0px 8px 42px 7px #{$shadow-color}',\\n 23: '0px 9px 44px 8px #{$shadow-color}',\\n 24: '0px 9px 46px 8px #{$shadow-color}'\\n );\\n}\\n\\n// The default duration value for elevation transitions.\\n$mat-elevation-transition-duration: 280ms !default;\\n\\n// The default easing value for elevation transitions.\\n$mat-elevation-transition-timing-function: $mat-fast-out-slow-in-timing-function;\\n\\n// The default color for elevation shadows.\\n$mat-elevation-color: black !default;\\n\\n// The default opacity scaling value for elevation shadows.\\n$mat-elevation-opacity: 1 !default;\\n\\n// Prefix for elevation-related selectors.\\n$_mat-elevation-prefix: 'mat-elevation-z';\\n\\n// Applies the correct css rules to an element to give it the elevation specified by $zValue.\\n// The $zValue must be between 0 and 24.\\n@mixin mat-elevation($zValue, $color: $mat-elevation-color, $opacity: $mat-elevation-opacity) {\\n @if type-of($zValue) != number or not unitless($zValue) {\\n @error '$zValue must be a unitless number';\\n }\\n @if $zValue < 0 or $zValue > 24 {\\n @error '$zValue must be between 0 and 24';\\n }\\n\\n box-shadow: #{map-get(_get-umbra-map($color, $opacity), $zValue)},\\n #{map-get(_get-penumbra-map($color, $opacity), $zValue)},\\n #{map-get(_get-ambient-map($color, $opacity), $zValue)};\\n}\\n\\n@mixin _mat-theme-elevation($zValue, $theme, $opacity: $mat-elevation-opacity) {\\n $foreground: map-get($theme, foreground);\\n $elevation-color: map-get($foreground, elevation);\\n $elevation-color-or-default: if($elevation-color == null, $mat-elevation-color, $elevation-color);\\n\\n @include mat-elevation($zValue, $elevation-color-or-default, $opacity);\\n}\\n\\n// Applies the elevation to an element in a manner that allows\\n// consumers to override it via the Material elevation classes.\\n@mixin mat-overridable-elevation(\\n $zValue,\\n $color: $mat-elevation-color,\\n $opacity: $mat-elevation-opacity) {\\n &:not([class*='#{$_mat-elevation-prefix}']) {\\n @include mat-elevation($zValue, $color, $opacity);\\n }\\n}\\n\\n@mixin _mat-theme-overridable-elevation($zValue, $theme, $opacity: $mat-elevation-opacity) {\\n $foreground: map-get($theme, foreground);\\n $elevation-color: map-get($foreground, elevation);\\n $elevation-color-or-default: if($elevation-color == null, $mat-elevation-color, $elevation-color);\\n\\n @include mat-overridable-elevation($zValue, $elevation-color-or-default, $opacity);\\n}\\n\\n// Returns a string that can be used as the value for a transition property for elevation.\\n// Calling this function directly is useful in situations where a component needs to transition\\n// more than one property.\\n//\\n// .foo {\\n// transition: mat-elevation-transition-property-value(), opacity 100ms ease;\\n// }\\n@function mat-elevation-transition-property-value(\\n $duration: $mat-elevation-transition-duration,\\n $easing: $mat-elevation-transition-timing-function) {\\n @return box-shadow #{$duration} #{$easing};\\n}\\n\\n// Applies the correct css rules needed to have an element transition between elevations.\\n// This mixin should be applied to elements whose elevation values will change depending on their\\n// context (e.g. when active or disabled).\\n//\\n// NOTE(traviskaufman): Both this mixin and the above function use default parameters so they can\\n// be used in the same way by clients.\\n@mixin mat-elevation-transition(\\n $duration: $mat-elevation-transition-duration,\\n $easing: $mat-elevation-transition-timing-function) {\\n transition: mat-elevation-transition-property-value($duration, $easing);\\n}\\n\\n// Color palettes from the Material Design spec.\\n// See https://material.io/design/color/\\n//\\n// Contrast colors are hard-coded because it is too difficult (probably impossible) to\\n// calculate them. These contrast colors are pulled from the public Material Design spec swatches.\\n// While the contrast colors in the spec are not prescriptive, we use them for convenience.\\n\\n\\n// @deprecated renamed to $dark-primary-text.\\n// @breaking-change 8.0.0\\n$black-87-opacity: rgba(black, 0.87);\\n// @deprecated renamed to $light-primary-text.\\n// @breaking-change 8.0.0\\n$white-87-opacity: rgba(white, 0.87);\\n// @deprecated use $dark-[secondary-text,disabled-text,dividers,focused] instead.\\n// @breaking-change 8.0.0\\n$black-12-opacity: rgba(black, 0.12);\\n// @deprecated use $light-[secondary-text,disabled-text,dividers,focused] instead.\\n// @breaking-change 8.0.0\\n$white-12-opacity: rgba(white, 0.12);\\n// @deprecated use $dark-[secondary-text,disabled-text,dividers,focused] instead.\\n// @breaking-change 8.0.0\\n$black-6-opacity: rgba(black, 0.06);\\n// @deprecated use $light-[secondary-text,disabled-text,dividers,focused] instead.\\n// @breaking-change 8.0.0\\n$white-6-opacity: rgba(white, 0.06);\\n\\n$dark-primary-text: rgba(black, 0.87);\\n$dark-secondary-text: rgba(black, 0.54);\\n$dark-disabled-text: rgba(black, 0.38);\\n$dark-dividers: rgba(black, 0.12);\\n$dark-focused: rgba(black, 0.12);\\n$light-primary-text: white;\\n$light-secondary-text: rgba(white, 0.7);\\n$light-disabled-text: rgba(white, 0.5);\\n$light-dividers: rgba(white, 0.12);\\n$light-focused: rgba(white, 0.12);\\n\\n$mat-red: (\\n 50: #ffebee,\\n 100: #ffcdd2,\\n 200: #ef9a9a,\\n 300: #e57373,\\n 400: #ef5350,\\n 500: #f44336,\\n 600: #e53935,\\n 700: #d32f2f,\\n 800: #c62828,\\n 900: #b71c1c,\\n A100: #ff8a80,\\n A200: #ff5252,\\n A400: #ff1744,\\n A700: #d50000,\\n contrast: (\\n 50: $dark-primary-text,\\n 100: $dark-primary-text,\\n 200: $dark-primary-text,\\n 300: $dark-primary-text,\\n 400: $dark-primary-text,\\n 500: $light-primary-text,\\n 600: $light-primary-text,\\n 700: $light-primary-text,\\n 800: $light-primary-text,\\n 900: $light-primary-text,\\n A100: $dark-primary-text,\\n A200: $light-primary-text,\\n A400: $light-primary-text,\\n A700: $light-primary-text,\\n )\\n);\\n\\n$mat-pink: (\\n 50: #fce4ec,\\n 100: #f8bbd0,\\n 200: #f48fb1,\\n 300: #f06292,\\n 400: #ec407a,\\n 500: #e91e63,\\n 600: #d81b60,\\n 700: #c2185b,\\n 800: #ad1457,\\n 900: #880e4f,\\n A100: #ff80ab,\\n A200: #ff4081,\\n A400: #f50057,\\n A700: #c51162,\\n contrast: (\\n 50: $dark-primary-text,\\n 100: $dark-primary-text,\\n 200: $dark-primary-text,\\n 300: $dark-primary-text,\\n 400: $dark-primary-text,\\n 500: $light-primary-text,\\n 600: $light-primary-text,\\n 700: $light-primary-text,\\n 800: $light-primary-text,\\n 900: $light-primary-text,\\n A100: $dark-primary-text,\\n A200: $light-primary-text,\\n A400: $light-primary-text,\\n A700: $light-primary-text,\\n )\\n);\\n\\n$mat-purple: (\\n 50: #f3e5f5,\\n 100: #e1bee7,\\n 200: #ce93d8,\\n 300: #ba68c8,\\n 400: #ab47bc,\\n 500: #9c27b0,\\n 600: #8e24aa,\\n 700: #7b1fa2,\\n 800: #6a1b9a,\\n 900: #4a148c,\\n A100: #ea80fc,\\n A200: #e040fb,\\n A400: #d500f9,\\n A700: #aa00ff,\\n contrast: (\\n 50: $dark-primary-text,\\n 100: $dark-primary-text,\\n 200: $dark-primary-text,\\n 300: $light-primary-text,\\n 400: $light-primary-text,\\n 500: $light-primary-text,\\n 600: $light-primary-text,\\n 700: $light-primary-text,\\n 800: $light-primary-text,\\n 900: $light-primary-text,\\n A100: $dark-primary-text,\\n A200: $light-primary-text,\\n A400: $light-primary-text,\\n A700: $light-primary-text,\\n )\\n);\\n\\n$mat-deep-purple: (\\n 50: #ede7f6,\\n 100: #d1c4e9,\\n 200: #b39ddb,\\n 300: #9575cd,\\n 400: #7e57c2,\\n 500: #673ab7,\\n 600: #5e35b1,\\n 700: #512da8,\\n 800: #4527a0,\\n 900: #311b92,\\n A100: #b388ff,\\n A200: #7c4dff,\\n A400: #651fff,\\n A700: #6200ea,\\n contrast: (\\n 50: $dark-primary-text,\\n 100: $dark-primary-text,\\n 200: $dark-primary-text,\\n 300: $light-primary-text,\\n 400: $light-primary-text,\\n 500: $light-primary-text,\\n 600: $light-primary-text,\\n 700: $light-primary-text,\\n 800: $light-primary-text,\\n 900: $light-primary-text,\\n A100: $dark-primary-text,\\n A200: $light-primary-text,\\n A400: $light-primary-text,\\n A700: $light-primary-text,\\n )\\n);\\n\\n$mat-indigo: (\\n 50: #e8eaf6,\\n 100: #c5cae9,\\n 200: #9fa8da,\\n 300: #7986cb,\\n 400: #5c6bc0,\\n 500: #3f51b5,\\n 600: #3949ab,\\n 700: #303f9f,\\n 800: #283593,\\n 900: #1a237e,\\n A100: #8c9eff,\\n A200: #536dfe,\\n A400: #3d5afe,\\n A700: #304ffe,\\n contrast: (\\n 50: $dark-primary-text,\\n 100: $dark-primary-text,\\n 200: $dark-primary-text,\\n 300: $light-primary-text,\\n 400: $light-primary-text,\\n 500: $light-primary-text,\\n 600: $light-primary-text,\\n 700: $light-primary-text,\\n 800: $light-primary-text,\\n 900: $light-primary-text,\\n A100: $dark-primary-text,\\n A200: $light-primary-text,\\n A400: $light-primary-text,\\n A700: $light-primary-text,\\n )\\n);\\n\\n$mat-blue: (\\n 50: #e3f2fd,\\n 100: #bbdefb,\\n 200: #90caf9,\\n 300: #64b5f6,\\n 400: #42a5f5,\\n 500: #2196f3,\\n 600: #1e88e5,\\n 700: #1976d2,\\n 800: #1565c0,\\n 900: #0d47a1,\\n A100: #82b1ff,\\n A200: #448aff,\\n A400: #2979ff,\\n A700: #2962ff,\\n contrast: (\\n 50: $dark-primary-text,\\n 100: $dark-primary-text,\\n 200: $dark-primary-text,\\n 300: $dark-primary-text,\\n 400: $dark-primary-text,\\n 500: $light-primary-text,\\n 600: $light-primary-text,\\n 700: $light-primary-text,\\n 800: $light-primary-text,\\n 900: $light-primary-text,\\n A100: $dark-primary-text,\\n A200: $light-primary-text,\\n A400: $light-primary-text,\\n A700: $light-primary-text,\\n )\\n);\\n\\n$mat-light-blue: (\\n 50: #e1f5fe,\\n 100: #b3e5fc,\\n 200: #81d4fa,\\n 300: #4fc3f7,\\n 400: #29b6f6,\\n 500: #03a9f4,\\n 600: #039be5,\\n 700: #0288d1,\\n 800: #0277bd,\\n 900: #01579b,\\n A100: #80d8ff,\\n A200: #40c4ff,\\n A400: #00b0ff,\\n A700: #0091ea,\\n contrast: (\\n 50: $dark-primary-text,\\n 100: $dark-primary-text,\\n 200: $dark-primary-text,\\n 300: $dark-primary-text,\\n 400: $dark-primary-text,\\n 500: $light-primary-text,\\n 600: $light-primary-text,\\n 700: $light-primary-text,\\n 800: $light-primary-text,\\n 900: $light-primary-text,\\n A100: $dark-primary-text,\\n A200: $dark-primary-text,\\n A400: $dark-primary-text,\\n A700: $light-primary-text,\\n )\\n);\\n\\n$mat-cyan: (\\n 50: #e0f7fa,\\n 100: #b2ebf2,\\n 200: #80deea,\\n 300: #4dd0e1,\\n 400: #26c6da,\\n 500: #00bcd4,\\n 600: #00acc1,\\n 700: #0097a7,\\n 800: #00838f,\\n 900: #006064,\\n A100: #84ffff,\\n A200: #18ffff,\\n A400: #00e5ff,\\n A700: #00b8d4,\\n contrast: (\\n 50: $dark-primary-text,\\n 100: $dark-primary-text,\\n 200: $dark-primary-text,\\n 300: $dark-primary-text,\\n 400: $dark-primary-text,\\n 500: $light-primary-text,\\n 600: $light-primary-text,\\n 700: $light-primary-text,\\n 800: $light-primary-text,\\n 900: $light-primary-text,\\n A100: $dark-primary-text,\\n A200: $dark-primary-text,\\n A400: $dark-primary-text,\\n A700: $dark-primary-text,\\n )\\n);\\n\\n$mat-teal: (\\n 50: #e0f2f1,\\n 100: #b2dfdb,\\n 200: #80cbc4,\\n 300: #4db6ac,\\n 400: #26a69a,\\n 500: #009688,\\n 600: #00897b,\\n 700: #00796b,\\n 800: #00695c,\\n 900: #004d40,\\n A100: #a7ffeb,\\n A200: #64ffda,\\n A400: #1de9b6,\\n A700: #00bfa5,\\n contrast: (\\n 50: $dark-primary-text,\\n 100: $dark-primary-text,\\n 200: $dark-primary-text,\\n 300: $dark-primary-text,\\n 400: $dark-primary-text,\\n 500: $light-primary-text,\\n 600: $light-primary-text,\\n 700: $light-primary-text,\\n 800: $light-primary-text,\\n 900: $light-primary-text,\\n A100: $dark-primary-text,\\n A200: $dark-primary-text,\\n A400: $dark-primary-text,\\n A700: $dark-primary-text,\\n )\\n);\\n\\n$mat-green: (\\n 50: #e8f5e9,\\n 100: #c8e6c9,\\n 200: #a5d6a7,\\n 300: #81c784,\\n 400: #66bb6a,\\n 500: #4caf50,\\n 600: #43a047,\\n 700: #388e3c,\\n 800: #2e7d32,\\n 900: #1b5e20,\\n A100: #b9f6ca,\\n A200: #69f0ae,\\n A400: #00e676,\\n A700: #00c853,\\n contrast: (\\n 50: $dark-primary-text,\\n 100: $dark-primary-text,\\n 200: $dark-primary-text,\\n 300: $dark-primary-text,\\n 400: $dark-primary-text,\\n 500: $dark-primary-text,\\n 600: $light-primary-text,\\n 700: $light-primary-text,\\n 800: $light-primary-text,\\n 900: $light-primary-text,\\n A100: $dark-primary-text,\\n A200: $dark-primary-text,\\n A400: $dark-primary-text,\\n A700: $dark-primary-text,\\n )\\n);\\n\\n$mat-light-green: (\\n 50: #f1f8e9,\\n 100: #dcedc8,\\n 200: #c5e1a5,\\n 300: #aed581,\\n 400: #9ccc65,\\n 500: #8bc34a,\\n 600: #7cb342,\\n 700: #689f38,\\n 800: #558b2f,\\n 900: #33691e,\\n A100: #ccff90,\\n A200: #b2ff59,\\n A400: #76ff03,\\n A700: #64dd17,\\n contrast: (\\n 50: $dark-primary-text,\\n 100: $dark-primary-text,\\n 200: $dark-primary-text,\\n 300: $dark-primary-text,\\n 400: $dark-primary-text,\\n 500: $dark-primary-text,\\n 600: $dark-primary-text,\\n 700: $light-primary-text,\\n 800: $light-primary-text,\\n 900: $light-primary-text,\\n A100: $dark-primary-text,\\n A200: $dark-primary-text,\\n A400: $dark-primary-text,\\n A700: $dark-primary-text,\\n )\\n);\\n\\n$mat-lime: (\\n 50: #f9fbe7,\\n 100: #f0f4c3,\\n 200: #e6ee9c,\\n 300: #dce775,\\n 400: #d4e157,\\n 500: #cddc39,\\n 600: #c0ca33,\\n 700: #afb42b,\\n 800: #9e9d24,\\n 900: #827717,\\n A100: #f4ff81,\\n A200: #eeff41,\\n A400: #c6ff00,\\n A700: #aeea00,\\n contrast: (\\n 50: $dark-primary-text,\\n 100: $dark-primary-text,\\n 200: $dark-primary-text,\\n 300: $dark-primary-text,\\n 400: $dark-primary-text,\\n 500: $dark-primary-text,\\n 600: $dark-primary-text,\\n 700: $dark-primary-text,\\n 800: $dark-primary-text,\\n 900: $light-primary-text,\\n A100: $dark-primary-text,\\n A200: $dark-primary-text,\\n A400: $dark-primary-text,\\n A700: $dark-primary-text,\\n )\\n);\\n\\n$mat-yellow: (\\n 50: #fffde7,\\n 100: #fff9c4,\\n 200: #fff59d,\\n 300: #fff176,\\n 400: #ffee58,\\n 500: #ffeb3b,\\n 600: #fdd835,\\n 700: #fbc02d,\\n 800: #f9a825,\\n 900: #f57f17,\\n A100: #ffff8d,\\n A200: #ffff00,\\n A400: #ffea00,\\n A700: #ffd600,\\n contrast: (\\n 50: $dark-primary-text,\\n 100: $dark-primary-text,\\n 200: $dark-primary-text,\\n 300: $dark-primary-text,\\n 400: $dark-primary-text,\\n 500: $dark-primary-text,\\n 600: $dark-primary-text,\\n 700: $dark-primary-text,\\n 800: $dark-primary-text,\\n 900: $dark-primary-text,\\n A100: $dark-primary-text,\\n A200: $dark-primary-text,\\n A400: $dark-primary-text,\\n A700: $dark-primary-text,\\n )\\n);\\n\\n$mat-amber: (\\n 50: #fff8e1,\\n 100: #ffecb3,\\n 200: #ffe082,\\n 300: #ffd54f,\\n 400: #ffca28,\\n 500: #ffc107,\\n 600: #ffb300,\\n 700: #ffa000,\\n 800: #ff8f00,\\n 900: #ff6f00,\\n A100: #ffe57f,\\n A200: #ffd740,\\n A400: #ffc400,\\n A700: #ffab00,\\n contrast: (\\n 50: $dark-primary-text,\\n 100: $dark-primary-text,\\n 200: $dark-primary-text,\\n 300: $dark-primary-text,\\n 400: $dark-primary-text,\\n 500: $dark-primary-text,\\n 600: $dark-primary-text,\\n 700: $dark-primary-text,\\n 800: $dark-primary-text,\\n 900: $dark-primary-text,\\n A100: $dark-primary-text,\\n A200: $dark-primary-text,\\n A400: $dark-primary-text,\\n A700: $dark-primary-text,\\n )\\n);\\n\\n$mat-orange: (\\n 50: #fff3e0,\\n 100: #ffe0b2,\\n 200: #ffcc80,\\n 300: #ffb74d,\\n 400: #ffa726,\\n 500: #ff9800,\\n 600: #fb8c00,\\n 700: #f57c00,\\n 800: #ef6c00,\\n 900: #e65100,\\n A100: #ffd180,\\n A200: #ffab40,\\n A400: #ff9100,\\n A700: #ff6d00,\\n contrast: (\\n 50: $dark-primary-text,\\n 100: $dark-primary-text,\\n 200: $dark-primary-text,\\n 300: $dark-primary-text,\\n 400: $dark-primary-text,\\n 500: $dark-primary-text,\\n 600: $dark-primary-text,\\n 700: $dark-primary-text,\\n 800: $light-primary-text,\\n 900: $light-primary-text,\\n A100: $dark-primary-text,\\n A200: $dark-primary-text,\\n A400: $dark-primary-text,\\n A700: black,\\n )\\n);\\n\\n$mat-deep-orange: (\\n 50: #fbe9e7,\\n 100: #ffccbc,\\n 200: #ffab91,\\n 300: #ff8a65,\\n 400: #ff7043,\\n 500: #ff5722,\\n 600: #f4511e,\\n 700: #e64a19,\\n 800: #d84315,\\n 900: #bf360c,\\n A100: #ff9e80,\\n A200: #ff6e40,\\n A400: #ff3d00,\\n A700: #dd2c00,\\n contrast: (\\n 50: $dark-primary-text,\\n 100: $dark-primary-text,\\n 200: $dark-primary-text,\\n 300: $dark-primary-text,\\n 400: $dark-primary-text,\\n 500: $light-primary-text,\\n 600: $light-primary-text,\\n 700: $light-primary-text,\\n 800: $light-primary-text,\\n 900: $light-primary-text,\\n A100: $dark-primary-text,\\n A200: $dark-primary-text,\\n A400: $light-primary-text,\\n A700: $light-primary-text,\\n )\\n);\\n\\n$mat-brown: (\\n 50: #efebe9,\\n 100: #d7ccc8,\\n 200: #bcaaa4,\\n 300: #a1887f,\\n 400: #8d6e63,\\n 500: #795548,\\n 600: #6d4c41,\\n 700: #5d4037,\\n 800: #4e342e,\\n 900: #3e2723,\\n A100: #d7ccc8,\\n A200: #bcaaa4,\\n A400: #8d6e63,\\n A700: #5d4037,\\n contrast: (\\n 50: $dark-primary-text,\\n 100: $dark-primary-text,\\n 200: $dark-primary-text,\\n 300: $light-primary-text,\\n 400: $light-primary-text,\\n 500: $light-primary-text,\\n 600: $light-primary-text,\\n 700: $light-primary-text,\\n 800: $light-primary-text,\\n 900: $light-primary-text,\\n A100: $dark-primary-text,\\n A200: $dark-primary-text,\\n A400: $light-primary-text,\\n A700: $light-primary-text,\\n )\\n);\\n\\n$mat-grey: (\\n 50: #fafafa,\\n 100: #f5f5f5,\\n 200: #eeeeee,\\n 300: #e0e0e0,\\n 400: #bdbdbd,\\n 500: #9e9e9e,\\n 600: #757575,\\n 700: #616161,\\n 800: #424242,\\n 900: #212121,\\n A100: #ffffff,\\n A200: #eeeeee,\\n A400: #bdbdbd,\\n A700: #616161,\\n contrast: (\\n 50: $dark-primary-text,\\n 100: $dark-primary-text,\\n 200: $dark-primary-text,\\n 300: $dark-primary-text,\\n 400: $dark-primary-text,\\n 500: $dark-primary-text,\\n 600: $light-primary-text,\\n 700: $light-primary-text,\\n 800: $light-primary-text,\\n 900: $light-primary-text,\\n A100: $dark-primary-text,\\n A200: $dark-primary-text,\\n A400: $dark-primary-text,\\n A700: $light-primary-text,\\n )\\n);\\n\\n// Alias for alternate spelling.\\n$mat-gray: $mat-grey;\\n\\n$mat-blue-grey: (\\n 50: #eceff1,\\n 100: #cfd8dc,\\n 200: #b0bec5,\\n 300: #90a4ae,\\n 400: #78909c,\\n 500: #607d8b,\\n 600: #546e7a,\\n 700: #455a64,\\n 800: #37474f,\\n 900: #263238,\\n A100: #cfd8dc,\\n A200: #b0bec5,\\n A400: #78909c,\\n A700: #455a64,\\n contrast: (\\n 50: $dark-primary-text,\\n 100: $dark-primary-text,\\n 200: $dark-primary-text,\\n 300: $dark-primary-text,\\n 400: $light-primary-text,\\n 500: $light-primary-text,\\n 600: $light-primary-text,\\n 700: $light-primary-text,\\n 800: $light-primary-text,\\n 900: $light-primary-text,\\n A100: $dark-primary-text,\\n A200: $dark-primary-text,\\n A400: $light-primary-text,\\n A700: $light-primary-text,\\n )\\n);\\n\\n// Alias for alternate spelling.\\n$mat-blue-gray: $mat-blue-grey;\\n\\n\\n// Background palette for light themes.\\n$mat-light-theme-background: (\\n status-bar: map_get($mat-grey, 300),\\n app-bar: map_get($mat-grey, 100),\\n background: map_get($mat-grey, 50),\\n hover: rgba(black, 0.04), // TODO(kara): check style with Material Design UX\\n card: white,\\n dialog: white,\\n disabled-button: rgba(black, 0.12),\\n raised-button: white,\\n focused-button: $dark-focused,\\n selected-button: map_get($mat-grey, 300),\\n selected-disabled-button: map_get($mat-grey, 400),\\n disabled-button-toggle: map_get($mat-grey, 200),\\n unselected-chip: map_get($mat-grey, 300),\\n disabled-list-option: map_get($mat-grey, 200),\\n tooltip: map_get($mat-grey, 700),\\n);\\n\\n// Background palette for dark themes.\\n$mat-dark-theme-background: (\\n status-bar: black,\\n app-bar: map_get($mat-grey, 900),\\n background: #303030,\\n hover: rgba(white, 0.04), // TODO(kara): check style with Material Design UX\\n card: map_get($mat-grey, 800),\\n dialog: map_get($mat-grey, 800),\\n disabled-button: rgba(white, 0.12),\\n raised-button: map-get($mat-grey, 800),\\n focused-button: $light-focused,\\n selected-button: map_get($mat-grey, 900),\\n selected-disabled-button: map_get($mat-grey, 800),\\n disabled-button-toggle: black,\\n unselected-chip: map_get($mat-grey, 700),\\n disabled-list-option: black,\\n tooltip: map_get($mat-grey, 700),\\n);\\n\\n// Foreground palette for light themes.\\n$mat-light-theme-foreground: (\\n base: black,\\n divider: $dark-dividers,\\n dividers: $dark-dividers,\\n disabled: $dark-disabled-text,\\n disabled-button: rgba(black, 0.26),\\n disabled-text: $dark-disabled-text,\\n elevation: black,\\n hint-text: $dark-disabled-text,\\n secondary-text: $dark-secondary-text,\\n icon: rgba(black, 0.54),\\n icons: rgba(black, 0.54),\\n text: rgba(black, 0.87),\\n slider-min: rgba(black, 0.87),\\n slider-off: rgba(black, 0.26),\\n slider-off-active: rgba(black, 0.38),\\n);\\n\\n// Foreground palette for dark themes.\\n$mat-dark-theme-foreground: (\\n base: white,\\n divider: $light-dividers,\\n dividers: $light-dividers,\\n disabled: $light-disabled-text,\\n disabled-button: rgba(white, 0.3),\\n disabled-text: $light-disabled-text,\\n elevation: black,\\n hint-text: $light-disabled-text,\\n secondary-text: $light-secondary-text,\\n icon: white,\\n icons: white,\\n text: white,\\n slider-min: white,\\n slider-off: rgba(white, 0.3),\\n slider-off-active: rgba(white, 0.3),\\n);\\n\\n\\n\\n// For a given hue in a palette, return the contrast color from the map of contrast palettes.\\n// @param $color-map\\n// @param $hue\\n@function mat-contrast($palette, $hue) {\\n @return map-get(map-get($palette, contrast), $hue);\\n}\\n\\n\\n// Creates a map of hues to colors for a theme. This is used to define a theme palette in terms\\n// of the Material Design hues.\\n// @param $color-map\\n// @param $primary\\n// @param $lighter\\n@function mat-palette($base-palette, $default: 500, $lighter: 100, $darker: 700, $text: $default) {\\n $result: map_merge($base-palette, (\\n default: map-get($base-palette, $default),\\n lighter: map-get($base-palette, $lighter),\\n darker: map-get($base-palette, $darker),\\n text: map-get($base-palette, $text),\\n\\n default-contrast: mat-contrast($base-palette, $default),\\n lighter-contrast: mat-contrast($base-palette, $lighter),\\n darker-contrast: mat-contrast($base-palette, $darker)\\n ));\\n\\n // For each hue in the palette, add a \\\"-contrast\\\" color to the map.\\n @each $hue, $color in $base-palette {\\n $result: map_merge($result, (\\n '#{$hue}-contrast': mat-contrast($base-palette, $hue)\\n ));\\n }\\n\\n @return $result;\\n}\\n\\n\\n// Gets a color from a theme palette (the output of mat-palette).\\n// The hue can be one of the standard values (500, A400, etc.), one of the three preconfigured\\n// hues (default, lighter, darker), or any of the aforementioned prefixed with \\\"-contrast\\\".\\n//\\n// @param $color-map The theme palette (output of mat-palette).\\n// @param $hue The hue from the palette to use. If this is a value between 0 and 1, it will\\n// be treated as opacity.\\n// @param $opacity The alpha channel value for the color.\\n@function mat-color($palette, $hue: default, $opacity: null) {\\n // If hueKey is a number between zero and one, then it actually contains an\\n // opacity value, so recall this function with the default hue and that given opacity.\\n @if type-of($hue) == number and $hue >= 0 and $hue <= 1 {\\n @return mat-color($palette, default, $hue);\\n }\\n\\n $color: map-get($palette, $hue);\\n\\n @if (type-of($color) != color) {\\n // If the $color resolved to something different from a color (e.g. a CSS variable),\\n // we can't apply the opacity anyway so we return the value as is, otherwise Sass can\\n // throw an error or output something invalid.\\n @return $color;\\n }\\n\\n @return rgba($color, if($opacity == null, opacity($color), $opacity));\\n}\\n\\n\\n// Creates a container object for a light theme to be given to individual component theme mixins.\\n@function mat-light-theme($primary, $accent, $warn: mat-palette($mat-red)) {\\n @return (\\n primary: $primary,\\n accent: $accent,\\n warn: $warn,\\n is-dark: false,\\n foreground: $mat-light-theme-foreground,\\n background: $mat-light-theme-background,\\n );\\n}\\n\\n\\n// Creates a container object for a dark theme to be given to individual component theme mixins.\\n@function mat-dark-theme($primary, $accent, $warn: mat-palette($mat-red)) {\\n @return (\\n primary: $primary,\\n accent: $accent,\\n warn: $warn,\\n is-dark: true,\\n foreground: $mat-dark-theme-foreground,\\n background: $mat-dark-theme-background,\\n );\\n}\\n\\n\\n\\n$mat-ripple-color-opacity: 0.1;\\n\\n@mixin mat-ripple() {\\n\\n // The host element of an mat-ripple directive should always have a position of \\\"absolute\\\" or\\n // \\\"relative\\\" so that the ripples inside are correctly positioned relatively to the container.\\n .mat-ripple {\\n overflow: hidden;\\n\\n // By default, every ripple container should have position: relative in favor of creating an\\n // easy API for developers using the MatRipple directive.\\n position: relative;\\n\\n // Promote containers that have ripples to a new layer. We want to target `:not(:empty)`,\\n // because we don't want all ripple containers to have their own layer since they're used in a\\n // lot of places and the layer is only relevant while animating. Note that ideally we'd use\\n // the `contain` property here (see #13175), because `:empty` can be broken by having extra\\n // text inside the element, but it isn't very well supported yet.\\n &:not(:empty) {\\n transform: translateZ(0);\\n }\\n }\\n\\n .mat-ripple.mat-ripple-unbounded {\\n overflow: visible;\\n }\\n\\n .mat-ripple-element {\\n position: absolute;\\n border-radius: 50%;\\n pointer-events: none;\\n\\n transition: opacity, transform 0ms cubic-bezier(0, 0, 0.2, 1);\\n transform: scale(0);\\n\\n // In high contrast mode the ripple is opaque, causing it to obstruct the content.\\n @include cdk-high-contrast(active, off) {\\n display: none;\\n }\\n }\\n}\\n\\n/* Theme for the ripple elements.*/\\n@mixin mat-ripple-theme($theme) {\\n $foreground: map_get($theme, foreground);\\n $foreground-base: map_get($foreground, base);\\n\\n .mat-ripple-element {\\n // If the ripple color is resolves to a color *type*, we can use it directly, otherwise\\n // (e.g. it resolves to a CSS variable) we fall back to using the color and setting an opacity.\\n @if (type-of($foreground-base) == color) {\\n background-color: rgba($foreground-base, $mat-ripple-color-opacity);\\n }\\n @else {\\n background-color: $foreground-base;\\n opacity: $mat-ripple-color-opacity;\\n }\\n }\\n}\\n\\n\\n\\n// Utility for fetching a nested value from a typography config.\\n@function _mat-get-type-value($config, $level, $name) {\\n @return map-get(map-get($config, $level), $name);\\n}\\n\\n// Gets the font size for a level inside a typography config.\\n@function mat-font-size($config, $level) {\\n @return _mat-get-type-value($config, $level, font-size);\\n}\\n\\n// Gets the line height for a level inside a typography config.\\n@function mat-line-height($config, $level) {\\n @return _mat-get-type-value($config, $level, line-height);\\n}\\n\\n// Gets the font weight for a level inside a typography config.\\n@function mat-font-weight($config, $level) {\\n @return _mat-get-type-value($config, $level, font-weight);\\n}\\n\\n// Gets the letter spacing for a level inside a typography config.\\n@function mat-letter-spacing($config, $level) {\\n @return _mat-get-type-value($config, $level, letter-spacing);\\n}\\n\\n// Gets the font-family from a typography config and removes the quotes around it.\\n@function mat-font-family($config, $level: null) {\\n $font-family: map-get($config, font-family);\\n\\n @if $level != null {\\n $font-family: _mat-get-type-value($config, $level, font-family);\\n }\\n\\n // Guard against unquoting non-string values, because it's deprecated.\\n @return if(type-of($font-family) == string, unquote($font-family), $font-family);\\n}\\n\\n// Outputs the shorthand `font` CSS property, based on a set of typography values. Falls back to\\n// the individual properties if a value that isn't allowed in the shorthand is passed in.\\n@mixin mat-typography-font-shorthand($font-size, $font-weight, $line-height, $font-family) {\\n // If any of the values are set to `inherit`, we can't use the shorthand\\n // so we fall back to passing in the individual properties.\\n @if ($font-size == inherit or\\n $font-weight == inherit or\\n $line-height == inherit or\\n $font-family == inherit or\\n $font-size == null or\\n $font-weight == null or\\n $line-height == null or\\n $font-family == null) {\\n\\n font-size: $font-size;\\n font-weight: $font-weight;\\n line-height: $line-height;\\n font-family: $font-family;\\n }\\n @else {\\n // Otherwise use the shorthand `font`, because it's the least amount of bytes. Note\\n // that we need to use interpolation for `font-size/line-height` in order to prevent\\n // Sass from dividing the two values.\\n font: $font-weight #{$font-size}/#{$line-height} $font-family;\\n }\\n}\\n\\n// Converts a typography level into CSS styles.\\n@mixin mat-typography-level-to-styles($config, $level) {\\n $font-size: mat-font-size($config, $level);\\n $font-weight: mat-font-weight($config, $level);\\n $line-height: mat-line-height($config, $level);\\n $font-family: mat-font-family($config, $level);\\n\\n @include mat-typography-font-shorthand($font-size, $font-weight, $line-height, $font-family);\\n letter-spacing: mat-letter-spacing($config, $level);\\n}\\n\\n\\n@mixin mat-option-theme($theme) {\\n $foreground: map-get($theme, foreground);\\n $background: map-get($theme, background);\\n $primary: map-get($theme, primary);\\n $accent: map-get($theme, accent);\\n $warn: map-get($theme, warn);\\n\\n .mat-option {\\n color: mat-color($foreground, text);\\n\\n &:hover:not(.mat-option-disabled),\\n &:focus:not(.mat-option-disabled) {\\n background: mat-color($background, hover);\\n }\\n\\n // In multiple mode there is a checkbox to show that the option is selected.\\n &.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled) {\\n background: mat-color($background, hover);\\n }\\n\\n &.mat-active {\\n background: mat-color($background, hover);\\n color: mat-color($foreground, text);\\n }\\n\\n &.mat-option-disabled {\\n color: mat-color($foreground, hint-text);\\n }\\n }\\n\\n .mat-primary .mat-option.mat-selected:not(.mat-option-disabled) {\\n color: mat-color($primary, text);\\n }\\n\\n .mat-accent .mat-option.mat-selected:not(.mat-option-disabled) {\\n color: mat-color($accent, text);\\n }\\n\\n .mat-warn .mat-option.mat-selected:not(.mat-option-disabled) {\\n color: mat-color($warn, text);\\n }\\n}\\n\\n@mixin mat-option-typography($config) {\\n .mat-option {\\n font: {\\n family: mat-font-family($config);\\n size: mat-font-size($config, subheading-2);\\n }\\n }\\n}\\n\\n\\n\\n\\n\\n@mixin mat-optgroup-theme($theme) {\\n $foreground: map-get($theme, foreground);\\n\\n .mat-optgroup-label {\\n color: mat-color($foreground, secondary-text);\\n }\\n\\n .mat-optgroup-disabled .mat-optgroup-label {\\n color: mat-color($foreground, hint-text);\\n }\\n}\\n\\n@mixin mat-optgroup-typography($config) {\\n .mat-optgroup-label {\\n @include mat-typography-level-to-styles($config, body-2);\\n }\\n}\\n\\n\\n\\n@mixin mat-pseudo-checkbox-theme($theme) {\\n $is-dark-theme: map-get($theme, is-dark);\\n $primary: map-get($theme, primary);\\n $accent: map-get($theme, accent);\\n $warn: map-get($theme, warn);\\n $background: map-get($theme, background);\\n\\n // NOTE(traviskaufman): While the spec calls for translucent blacks/whites for disabled colors,\\n // this does not work well with elements layered on top of one another. To get around this we\\n // blend the colors together based on the base color and the theme background.\\n $white-30pct-opacity-on-dark: #686868;\\n $black-26pct-opacity-on-light: #b0b0b0;\\n $disabled-color: if($is-dark-theme, $white-30pct-opacity-on-dark, $black-26pct-opacity-on-light);\\n $colored-box-selector: '.mat-pseudo-checkbox-checked, .mat-pseudo-checkbox-indeterminate';\\n\\n .mat-pseudo-checkbox {\\n color: mat-color(map-get($theme, foreground), secondary-text);\\n\\n &::after {\\n color: mat-color($background, background);\\n }\\n }\\n\\n .mat-pseudo-checkbox-disabled {\\n color: $disabled-color;\\n }\\n\\n .mat-primary .mat-pseudo-checkbox-checked,\\n .mat-primary .mat-pseudo-checkbox-indeterminate {\\n background: mat-color(map-get($theme, primary));\\n }\\n\\n // Default to the accent color. Note that the pseudo checkboxes are meant to inherit the\\n // theme from their parent, rather than implementing their own theming, which is why we\\n // don't attach to the `mat-*` classes. Also note that this needs to be below `.mat-primary`\\n // in order to allow for the color to be overwritten if the checkbox is inside a parent that\\n // has `mat-accent` and is placed inside another parent that has `mat-primary`.\\n .mat-pseudo-checkbox-checked,\\n .mat-pseudo-checkbox-indeterminate,\\n .mat-accent .mat-pseudo-checkbox-checked,\\n .mat-accent .mat-pseudo-checkbox-indeterminate {\\n background: mat-color(map-get($theme, accent));\\n }\\n\\n .mat-warn .mat-pseudo-checkbox-checked,\\n .mat-warn .mat-pseudo-checkbox-indeterminate {\\n background: mat-color(map-get($theme, warn));\\n }\\n\\n .mat-pseudo-checkbox-checked,\\n .mat-pseudo-checkbox-indeterminate {\\n &.mat-pseudo-checkbox-disabled {\\n background: $disabled-color;\\n }\\n }\\n}\\n\\n\\n\\n// Represents a typography level from the Material design spec.\\n@function mat-typography-level(\\n $font-size,\\n $line-height: $font-size,\\n $font-weight: 400,\\n $font-family: null,\\n $letter-spacing: normal) {\\n\\n @return (\\n font-size: $font-size,\\n line-height: $line-height,\\n font-weight: $font-weight,\\n font-family: $font-family,\\n letter-spacing: $letter-spacing\\n );\\n}\\n\\n// Represents a collection of typography levels.\\n// Defaults come from https://material.io/guidelines/style/typography.html\\n// Note: The spec doesn't mention letter spacing. The values here come from\\n// eyeballing it until it looked exactly like the spec examples.\\n@function mat-typography-config(\\n $font-family: 'Roboto, \\\"Helvetica Neue\\\", sans-serif',\\n $display-4: mat-typography-level(112px, 112px, 300, $letter-spacing: -0.05em),\\n $display-3: mat-typography-level(56px, 56px, 400, $letter-spacing: -0.02em),\\n $display-2: mat-typography-level(45px, 48px, 400, $letter-spacing: -0.005em),\\n $display-1: mat-typography-level(34px, 40px, 400),\\n $headline: mat-typography-level(24px, 32px, 400),\\n $title: mat-typography-level(20px, 32px, 500),\\n $subheading-2: mat-typography-level(16px, 28px, 400),\\n $subheading-1: mat-typography-level(15px, 24px, 400),\\n $body-2: mat-typography-level(14px, 24px, 500),\\n $body-1: mat-typography-level(14px, 20px, 400),\\n $caption: mat-typography-level(12px, 20px, 400),\\n $button: mat-typography-level(14px, 14px, 500),\\n // Line-height must be unit-less fraction of the font-size.\\n $input: mat-typography-level(inherit, 1.125, 400)\\n) {\\n\\n // Declare an initial map with all of the levels.\\n $config: (\\n display-4: $display-4,\\n display-3: $display-3,\\n display-2: $display-2,\\n display-1: $display-1,\\n headline: $headline,\\n title: $title,\\n subheading-2: $subheading-2,\\n subheading-1: $subheading-1,\\n body-2: $body-2,\\n body-1: $body-1,\\n caption: $caption,\\n button: $button,\\n input: $input,\\n );\\n\\n // Loop through the levels and set the `font-family` of the ones that don't have one to the base.\\n // Note that Sass can't modify maps in place, which means that we need to merge and re-assign.\\n @each $key, $level in $config {\\n @if map-get($level, font-family) == null {\\n $new-level: map-merge($level, (font-family: $font-family));\\n $config: map-merge($config, ($key: $new-level));\\n }\\n }\\n\\n // Add the base font family to the config.\\n @return map-merge($config, (font-family: $font-family));\\n}\\n\\n// Adds the base typography styles, based on a config.\\n@mixin mat-base-typography($config, $selector: '.mat-typography') {\\n .mat-h1, .mat-headline, #{$selector} h1 {\\n @include mat-typography-level-to-styles($config, headline);\\n margin: 0 0 16px;\\n }\\n\\n .mat-h2, .mat-title, #{$selector} h2 {\\n @include mat-typography-level-to-styles($config, title);\\n margin: 0 0 16px;\\n }\\n\\n .mat-h3, .mat-subheading-2, #{$selector} h3 {\\n @include mat-typography-level-to-styles($config, subheading-2);\\n margin: 0 0 16px;\\n }\\n\\n .mat-h4, .mat-subheading-1, #{$selector} h4 {\\n @include mat-typography-level-to-styles($config, subheading-1);\\n margin: 0 0 16px;\\n }\\n\\n // Note: the spec doesn't have anything that would correspond to h5 and h6, but we add these for\\n // consistency. The font sizes come from the Chrome user agent styles which have h5 at 0.83em\\n // and h6 at 0.67em.\\n .mat-h5, #{$selector} h5 {\\n @include mat-typography-font-shorthand(\\n // calc is used here to support css variables\\n calc(#{mat-font-size($config, body-1)} * 0.83),\\n mat-font-weight($config, body-1),\\n mat-line-height($config, body-1),\\n mat-font-family($config, body-1)\\n );\\n\\n margin: 0 0 12px;\\n }\\n\\n .mat-h6, #{$selector} h6 {\\n @include mat-typography-font-shorthand(\\n // calc is used here to support css variables\\n calc(#{mat-font-size($config, body-1)} * 0.67),\\n mat-font-weight($config, body-1),\\n mat-line-height($config, body-1),\\n mat-font-family($config, body-1)\\n );\\n\\n margin: 0 0 12px;\\n }\\n\\n .mat-body-strong, .mat-body-2 {\\n @include mat-typography-level-to-styles($config, body-2);\\n }\\n\\n .mat-body, .mat-body-1, #{$selector} {\\n @include mat-typography-level-to-styles($config, body-1);\\n\\n p {\\n margin: 0 0 12px;\\n }\\n }\\n\\n .mat-small, .mat-caption {\\n @include mat-typography-level-to-styles($config, caption);\\n }\\n\\n .mat-display-4, #{$selector} .mat-display-4 {\\n @include mat-typography-level-to-styles($config, display-4);\\n margin: 0 0 56px;\\n }\\n\\n .mat-display-3, #{$selector} .mat-display-3 {\\n @include mat-typography-level-to-styles($config, display-3);\\n margin: 0 0 64px;\\n }\\n\\n .mat-display-2, #{$selector} .mat-display-2 {\\n @include mat-typography-level-to-styles($config, display-2);\\n margin: 0 0 64px;\\n }\\n\\n .mat-display-1, #{$selector} .mat-display-1 {\\n @include mat-typography-level-to-styles($config, display-1);\\n margin: 0 0 64px;\\n }\\n}\\n\\n\\n\\n\\n@mixin mat-autocomplete-theme($theme) {\\n $foreground: map-get($theme, foreground);\\n $background: map-get($theme, background);\\n\\n .mat-autocomplete-panel {\\n @include _mat-theme-overridable-elevation(4, $theme);\\n background: mat-color($background, card);\\n color: mat-color($foreground, text);\\n\\n // Selected options in autocompletes should not be gray, but we\\n // only want to override the background for selected options if\\n // they are *not* in hover or focus state. This change has to be\\n // made here because base option styles are shared between the\\n // autocomplete and the select.\\n .mat-option.mat-selected:not(.mat-active):not(:hover) {\\n background: mat-color($background, card);\\n\\n &:not(.mat-option-disabled) {\\n color: mat-color($foreground, text);\\n }\\n }\\n }\\n\\n}\\n\\n@mixin mat-autocomplete-typography($config) { }\\n\\n// This contains all of the styles for the badge\\n// rather than just the color/theme because of\\n// no style sheet support for directives.\\n\\n\\n\\n\\n\\n$mat-badge-font-size: 12px;\\n$mat-badge-font-weight: 600;\\n$mat-badge-default-size: 22px !default;\\n$mat-badge-small-size: $mat-badge-default-size - 6;\\n$mat-badge-large-size: $mat-badge-default-size + 6;\\n\\n// Mixin for building offset given different sizes\\n@mixin _mat-badge-size($size) {\\n .mat-badge-content {\\n width: $size;\\n height: $size;\\n line-height: $size;\\n }\\n\\n &.mat-badge-above {\\n .mat-badge-content {\\n top: -$size / 2;\\n }\\n }\\n\\n &.mat-badge-below {\\n .mat-badge-content {\\n bottom: -$size / 2;\\n }\\n }\\n\\n &.mat-badge-before {\\n .mat-badge-content {\\n left: -$size;\\n }\\n }\\n\\n [dir='rtl'] &.mat-badge-before {\\n .mat-badge-content {\\n left: auto;\\n right: -$size;\\n }\\n }\\n\\n &.mat-badge-after {\\n .mat-badge-content {\\n right: -$size;\\n }\\n }\\n\\n [dir='rtl'] &.mat-badge-after {\\n .mat-badge-content {\\n right: auto;\\n left: -$size;\\n }\\n }\\n\\n &.mat-badge-overlap {\\n &.mat-badge-before {\\n .mat-badge-content {\\n left: -$size / 2;\\n }\\n }\\n\\n [dir='rtl'] &.mat-badge-before {\\n .mat-badge-content {\\n left: auto;\\n right: -$size / 2;\\n }\\n }\\n\\n &.mat-badge-after {\\n .mat-badge-content {\\n right: -$size / 2;\\n }\\n }\\n\\n [dir='rtl'] &.mat-badge-after {\\n .mat-badge-content {\\n right: auto;\\n left: -$size / 2;\\n }\\n }\\n }\\n}\\n\\n@mixin mat-badge-theme($theme) {\\n $accent: map-get($theme, accent);\\n $warn: map-get($theme, warn);\\n $primary: map-get($theme, primary);\\n $background: map-get($theme, background);\\n $foreground: map-get($theme, foreground);\\n\\n .mat-badge-content {\\n color: mat-color($primary, default-contrast);\\n background: mat-color($primary);\\n\\n @include cdk-high-contrast(active, off) {\\n outline: solid 1px;\\n border-radius: 0;\\n }\\n }\\n\\n .mat-badge-accent {\\n .mat-badge-content {\\n background: mat-color($accent);\\n color: mat-color($accent, default-contrast);\\n }\\n }\\n\\n .mat-badge-warn {\\n .mat-badge-content {\\n color: mat-color($warn, default-contrast);\\n background: mat-color($warn);\\n }\\n }\\n\\n .mat-badge {\\n position: relative;\\n }\\n\\n .mat-badge-hidden {\\n .mat-badge-content {\\n display: none;\\n }\\n }\\n\\n .mat-badge-disabled {\\n .mat-badge-content {\\n $app-background: mat-color($background, 'background');\\n $badge-color: mat-color($foreground, disabled-button);\\n\\n // The disabled color usually has some kind of opacity, but because the badge is overlayed\\n // on top of something else, it won't look good if it's opaque. If it is a color *type*,\\n // we convert it into a solid color by taking the opacity from the rgba value and using\\n // the value to determine the percentage of the background to put into foreground when\\n // mixing the colors together.\\n @if (type-of($badge-color) == color and type-of($app-background) == color) {\\n $badge-opacity: opacity($badge-color);\\n background: mix($app-background, rgba($badge-color, 1), (1 - $badge-opacity) * 100%);\\n }\\n @else {\\n background: $badge-color;\\n }\\n\\n color: mat-color($foreground, disabled-text);\\n }\\n }\\n\\n .mat-badge-content {\\n position: absolute;\\n text-align: center;\\n display: inline-block;\\n border-radius: 50%;\\n transition: transform 200ms ease-in-out;\\n transform: scale(0.6);\\n overflow: hidden;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n pointer-events: none;\\n }\\n\\n .ng-animate-disabled .mat-badge-content,\\n .mat-badge-content._mat-animation-noopable {\\n transition: none;\\n }\\n\\n // The active class is added after the element is added\\n // so it can animate scale to default\\n .mat-badge-content.mat-badge-active {\\n // Scale to `none` instead of `1` to avoid blurry text in some browsers.\\n transform: none;\\n }\\n\\n .mat-badge-small {\\n @include _mat-badge-size($mat-badge-small-size);\\n }\\n .mat-badge-medium {\\n @include _mat-badge-size($mat-badge-default-size);\\n }\\n .mat-badge-large {\\n @include _mat-badge-size($mat-badge-large-size);\\n }\\n}\\n\\n@mixin mat-badge-typography($config) {\\n .mat-badge-content {\\n font-weight: $mat-badge-font-weight;\\n font-size: $mat-badge-font-size;\\n font-family: mat-font-family($config);\\n }\\n\\n .mat-badge-small .mat-badge-content {\\n // Set the font size to 75% of the original.\\n font-size: $mat-badge-font-size * 0.75;\\n }\\n\\n .mat-badge-large .mat-badge-content {\\n font-size: $mat-badge-font-size * 2;\\n }\\n}\\n\\n\\n\\n\\n\\n@mixin mat-bottom-sheet-theme($theme) {\\n $background: map-get($theme, background);\\n $foreground: map-get($theme, foreground);\\n\\n .mat-bottom-sheet-container {\\n @include _mat-theme-elevation(16, $theme);\\n background: mat-color($background, dialog);\\n color: mat-color($foreground, text);\\n }\\n}\\n\\n@mixin mat-bottom-sheet-typography($config) {\\n .mat-bottom-sheet-container {\\n @include mat-typography-level-to-styles($config, body-1);\\n }\\n}\\n\\n\\n\\n\\n\\n$_mat-button-ripple-opacity: 0.1;\\n\\n// Applies a focus style to an mat-button element for each of the supported palettes.\\n@mixin _mat-button-focus-overlay-color($theme) {\\n $primary: map-get($theme, primary);\\n $accent: map-get($theme, accent);\\n $warn: map-get($theme, warn);\\n\\n &.mat-primary .mat-button-focus-overlay {\\n background-color: mat-color($primary);\\n }\\n\\n &.mat-accent .mat-button-focus-overlay {\\n background-color: mat-color($accent);\\n }\\n\\n &.mat-warn .mat-button-focus-overlay {\\n background-color: mat-color($warn);\\n }\\n\\n &[disabled] .mat-button-focus-overlay {\\n background-color: transparent;\\n }\\n}\\n\\n// Applies the background color for a ripple. If the value provided is not a Sass color,\\n// we assume that we've been given a CSS variable. Since we can't perform alpha-blending\\n// on a CSS variable, we instead add the opacity directly to the ripple element.\\n@mixin _mat-button-ripple-background($palette, $hue, $opacity) {\\n $background-color: mat-color($palette, $hue, $opacity);\\n background-color: $background-color;\\n @if (type-of($background-color) != color) {\\n opacity: $opacity;\\n }\\n}\\n\\n@mixin _mat-button-ripple-color($theme, $hue, $opacity: $_mat-button-ripple-opacity) {\\n $primary: map-get($theme, primary);\\n $accent: map-get($theme, accent);\\n $warn: map-get($theme, warn);\\n\\n &.mat-primary .mat-ripple-element {\\n @include _mat-button-ripple-background($primary, $hue, $opacity);\\n }\\n\\n &.mat-accent .mat-ripple-element {\\n @include _mat-button-ripple-background($accent, $hue, $opacity);\\n }\\n\\n &.mat-warn .mat-ripple-element {\\n @include _mat-button-ripple-background($warn, $hue, $opacity);\\n }\\n}\\n\\n// Applies a property to an mat-button element for each of the supported palettes.\\n@mixin _mat-button-theme-property($theme, $property, $hue) {\\n $primary: map-get($theme, primary);\\n $accent: map-get($theme, accent);\\n $warn: map-get($theme, warn);\\n $background: map-get($theme, background);\\n $foreground: map-get($theme, foreground);\\n\\n &.mat-primary {\\n #{$property}: mat-color($primary, $hue);\\n }\\n &.mat-accent {\\n #{$property}: mat-color($accent, $hue);\\n }\\n &.mat-warn {\\n #{$property}: mat-color($warn, $hue);\\n }\\n\\n &.mat-primary, &.mat-accent, &.mat-warn, &[disabled] {\\n &[disabled] {\\n $palette: if($property == 'color', $foreground, $background);\\n #{$property}: mat-color($palette, disabled-button);\\n }\\n }\\n}\\n\\n@mixin mat-button-theme($theme) {\\n $primary: map-get($theme, primary);\\n $accent: map-get($theme, accent);\\n $warn: map-get($theme, warn);\\n $background: map-get($theme, background);\\n $foreground: map-get($theme, foreground);\\n\\n .mat-button, .mat-icon-button, .mat-stroked-button {\\n // Buttons without a background color should inherit the font color. This is necessary to\\n // ensure that the button is readable on custom background colors. It's wrong to always assume\\n // that those buttons are always placed inside of containers with the default background\\n // color of the theme (e.g. themed toolbars).\\n color: inherit;\\n background: transparent;\\n\\n @include _mat-button-theme-property($theme, 'color', text);\\n @include _mat-button-focus-overlay-color($theme);\\n\\n // Setup the ripple color to be based on the text color. This ensures that the ripples\\n // are matching with the current theme palette and are in contrast to the background color\\n // (e.g in themed toolbars).\\n .mat-ripple-element {\\n opacity: $_mat-button-ripple-opacity;\\n background-color: currentColor;\\n }\\n }\\n\\n .mat-button-focus-overlay {\\n background: map_get($foreground, base);\\n }\\n\\n // Note: this needs a bit extra specificity, because we're not guaranteed the inclusion\\n // order of the theme styles and the button reset may end up resetting this as well.\\n .mat-stroked-button:not([disabled]) {\\n border-color: mat-color($foreground, divider);\\n }\\n\\n .mat-flat-button, .mat-raised-button, .mat-fab, .mat-mini-fab {\\n // Default font and background color when not using any color palette.\\n color: mat-color($foreground, text);\\n background-color: mat-color($background, raised-button);\\n\\n @include _mat-button-theme-property($theme, 'color', default-contrast);\\n @include _mat-button-theme-property($theme, 'background-color', default);\\n @include _mat-button-ripple-color($theme, default-contrast);\\n }\\n\\n .mat-stroked-button, .mat-flat-button {\\n @include _mat-theme-overridable-elevation(0, $theme);\\n }\\n\\n .mat-raised-button {\\n @include _mat-theme-overridable-elevation(2, $theme);\\n\\n &:not([disabled]):active {\\n @include _mat-theme-overridable-elevation(8, $theme);\\n }\\n\\n &[disabled] {\\n @include _mat-theme-overridable-elevation(0, $theme);\\n }\\n }\\n\\n .mat-fab, .mat-mini-fab {\\n @include _mat-theme-overridable-elevation(6, $theme);\\n\\n &:not([disabled]):active {\\n @include _mat-theme-overridable-elevation(12, $theme);\\n }\\n\\n &[disabled] {\\n @include _mat-theme-overridable-elevation(0, $theme);\\n }\\n }\\n}\\n\\n@mixin mat-button-typography($config) {\\n .mat-button, .mat-raised-button, .mat-icon-button, .mat-stroked-button,\\n .mat-flat-button, .mat-fab, .mat-mini-fab {\\n font: {\\n family: mat-font-family($config, button);\\n size: mat-font-size($config, button);\\n weight: mat-font-weight($config, button);\\n }\\n }\\n}\\n\\n\\n\\n\\n\\n\\n@mixin mat-button-toggle-theme($theme) {\\n $foreground: map-get($theme, foreground);\\n $background: map-get($theme, background);\\n $divider-color: mat-color($foreground, divider);\\n\\n .mat-button-toggle-standalone,\\n .mat-button-toggle-group {\\n @include _mat-theme-elevation(2, $theme);\\n }\\n\\n .mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\\n .mat-button-toggle-group-appearance-standard {\\n box-shadow: none;\\n }\\n\\n .mat-button-toggle {\\n color: mat-color($foreground, hint-text);\\n\\n .mat-button-toggle-focus-overlay {\\n background-color: mat-color($background, focused-button);\\n }\\n }\\n\\n .mat-button-toggle-appearance-standard {\\n color: mat-color($foreground, text);\\n background: mat-color($background, card);\\n\\n .mat-button-toggle-focus-overlay {\\n background-color: mat-color($background, focused-button, 1);\\n }\\n }\\n\\n .mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\\n border-left: solid 1px $divider-color;\\n }\\n\\n [dir='rtl'] .mat-button-toggle-group-appearance-standard .mat-button-toggle + .mat-button-toggle {\\n border-left: none;\\n border-right: solid 1px $divider-color;\\n }\\n\\n .mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical {\\n .mat-button-toggle + .mat-button-toggle {\\n border-left: none;\\n border-right: none;\\n border-top: solid 1px $divider-color;\\n }\\n }\\n\\n .mat-button-toggle-checked {\\n background-color: mat-color($background, selected-button);\\n color: mat-color($foreground, secondary-text);\\n\\n &.mat-button-toggle-appearance-standard {\\n color: mat-color($foreground, text);\\n }\\n }\\n\\n .mat-button-toggle-disabled {\\n color: mat-color($foreground, disabled-button);\\n background-color: mat-color($background, disabled-button-toggle);\\n\\n &.mat-button-toggle-appearance-standard {\\n background: mat-color($background, card);\\n }\\n\\n &.mat-button-toggle-checked {\\n background-color: mat-color($background, selected-disabled-button);\\n }\\n }\\n\\n .mat-button-toggle-standalone.mat-button-toggle-appearance-standard,\\n .mat-button-toggle-group-appearance-standard {\\n border: solid 1px $divider-color;\\n }\\n}\\n\\n@mixin mat-button-toggle-typography($config) {\\n .mat-button-toggle {\\n font-family: mat-font-family($config);\\n }\\n}\\n\\n\\n\\n\\n\\n\\n\\n@mixin mat-card-theme($theme) {\\n $background: map-get($theme, background);\\n $foreground: map-get($theme, foreground);\\n\\n .mat-card {\\n @include _mat-theme-overridable-elevation(1, $theme);\\n background: mat-color($background, card);\\n color: mat-color($foreground, text);\\n\\n // Needs extra specificity to be able to override the elevation selectors.\\n &.mat-card-flat {\\n @include _mat-theme-overridable-elevation(0, $theme);\\n }\\n }\\n\\n .mat-card-subtitle {\\n color: mat-color($foreground, secondary-text);\\n }\\n}\\n\\n@mixin mat-card-typography($config) {\\n .mat-card {\\n font-family: mat-font-family($config);\\n }\\n\\n .mat-card-title {\\n font: {\\n size: mat-font-size($config, headline);\\n weight: mat-font-weight($config, title);\\n }\\n }\\n\\n .mat-card-header .mat-card-title {\\n font-size: mat-font-size($config, title);\\n }\\n\\n .mat-card-subtitle,\\n .mat-card-content {\\n font-size: mat-font-size($config, body-1);\\n }\\n}\\n\\n\\n\\n\\n\\n@mixin mat-checkbox-theme($theme) {\\n $is-dark-theme: map-get($theme, is-dark);\\n $primary: map-get($theme, primary);\\n $accent: map-get($theme, accent);\\n $warn: map-get($theme, warn);\\n $background: map-get($theme, background);\\n $foreground: map-get($theme, foreground);\\n\\n\\n // The color of the checkbox's checkmark / mixedmark.\\n $checkbox-mark-color: mat-color($background, background);\\n\\n // NOTE(traviskaufman): While the spec calls for translucent blacks/whites for disabled colors,\\n // this does not work well with elements layered on top of one another. To get around this we\\n // blend the colors together based on the base color and the theme background.\\n $white-30pct-opacity-on-dark: #686868;\\n $black-26pct-opacity-on-light: #b0b0b0;\\n $disabled-color: if($is-dark-theme, $white-30pct-opacity-on-dark, $black-26pct-opacity-on-light);\\n\\n .mat-checkbox-frame {\\n border-color: mat-color($foreground, secondary-text);\\n }\\n\\n .mat-checkbox-checkmark {\\n fill: $checkbox-mark-color;\\n }\\n\\n .mat-checkbox-checkmark-path {\\n // !important is needed here because a stroke must be set as an\\n // attribute on the SVG in order for line animation to work properly.\\n stroke: $checkbox-mark-color !important;\\n }\\n\\n .mat-checkbox-mixedmark {\\n background-color: $checkbox-mark-color;\\n }\\n\\n .mat-checkbox-indeterminate, .mat-checkbox-checked {\\n &.mat-primary .mat-checkbox-background {\\n background-color: mat-color($primary);\\n }\\n\\n &.mat-accent .mat-checkbox-background {\\n background-color: mat-color($accent);\\n }\\n\\n &.mat-warn .mat-checkbox-background {\\n background-color: mat-color($warn);\\n }\\n }\\n\\n .mat-checkbox-disabled {\\n &.mat-checkbox-checked,\\n &.mat-checkbox-indeterminate {\\n .mat-checkbox-background {\\n background-color: $disabled-color;\\n }\\n }\\n\\n &:not(.mat-checkbox-checked) {\\n .mat-checkbox-frame {\\n border-color: $disabled-color;\\n }\\n }\\n\\n .mat-checkbox-label {\\n color: mat-color($foreground, secondary-text);\\n }\\n }\\n\\n // Switch this to a solid color since we're using `opacity`\\n // to control how opaque the ripple should be.\\n .mat-checkbox .mat-ripple-element {\\n background-color: map_get(map-get($theme, foreground), base);\\n }\\n\\n .mat-checkbox-checked:not(.mat-checkbox-disabled),\\n .mat-checkbox:active:not(.mat-checkbox-disabled) {\\n &.mat-primary .mat-ripple-element {\\n background: mat-color($primary);\\n }\\n\\n &.mat-accent .mat-ripple-element {\\n background: mat-color($accent);\\n }\\n\\n &.mat-warn .mat-ripple-element {\\n background: mat-color($warn);\\n }\\n }\\n}\\n\\n@mixin mat-checkbox-typography($config) {\\n .mat-checkbox {\\n font-family: mat-font-family($config);\\n }\\n\\n // TODO(kara): Remove this style when fixing vertical baseline\\n .mat-checkbox-layout .mat-checkbox-label {\\n line-height: mat-line-height($config, body-2);\\n }\\n}\\n\\n\\n\\n\\n\\n\\n$mat-chip-remove-font-size: 18px;\\n\\n@mixin mat-chips-color($foreground, $background) {\\n background-color: $background;\\n color: $foreground;\\n\\n .mat-chip-remove {\\n color: $foreground;\\n opacity: 0.4;\\n }\\n}\\n\\n\\n// Applies the background color for a ripple element.\\n// If the color value provided is not a Sass color,\\n// we assume that we've been given a CSS variable.\\n// Since we can't perform alpha-blending on a CSS variable,\\n// we instead add the opacity directly to the ripple element.\\n@mixin _mat-chips-ripple-background($palette, $default-contrast, $opacity) {\\n $background-color: mat-color($palette, $default-contrast, $opacity);\\n background-color: $background-color;\\n @if (type-of($background-color) != color) {\\n opacity: $opacity;\\n }\\n}\\n\\n@mixin mat-chips-theme-color($palette) {\\n @include mat-chips-color(mat-color($palette, default-contrast), mat-color($palette));\\n\\n .mat-ripple-element {\\n @include _mat-chips-ripple-background($palette, default-contrast, 0.1);\\n }\\n}\\n\\n@mixin mat-chips-theme($theme) {\\n $is-dark-theme: map-get($theme, is-dark);\\n $primary: map-get($theme, primary);\\n $accent: map-get($theme, accent);\\n $warn: map-get($theme, warn);\\n $background: map-get($theme, background);\\n $foreground: map-get($theme, foreground);\\n\\n $unselected-background: mat-color($background, unselected-chip);\\n $unselected-foreground: mat-color($foreground, text);\\n\\n .mat-chip.mat-standard-chip {\\n @include mat-chips-color($unselected-foreground, $unselected-background);\\n\\n &:not(.mat-chip-disabled) {\\n &:active {\\n @include _mat-theme-elevation(3, $theme);\\n }\\n\\n .mat-chip-remove:hover {\\n opacity: 0.54;\\n }\\n }\\n\\n &.mat-chip-disabled {\\n opacity: 0.4;\\n }\\n\\n &::after {\\n background: map_get($foreground, base);\\n }\\n }\\n\\n .mat-chip.mat-standard-chip.mat-chip-selected {\\n &.mat-primary {\\n @include mat-chips-theme-color($primary);\\n }\\n\\n &.mat-warn {\\n @include mat-chips-theme-color($warn);\\n }\\n\\n &.mat-accent {\\n @include mat-chips-theme-color($accent);\\n }\\n }\\n}\\n\\n@mixin mat-chips-typography($config) {\\n .mat-chip {\\n font-size: mat-font-size($config, body-2);\\n font-weight: mat-font-weight($config, body-2);\\n\\n .mat-chip-trailing-icon.mat-icon,\\n .mat-chip-remove.mat-icon {\\n font-size: $mat-chip-remove-font-size;\\n }\\n }\\n}\\n\\n\\n\\n\\n\\n@mixin mat-table-theme($theme) {\\n $background: map-get($theme, background);\\n $foreground: map-get($theme, foreground);\\n\\n .mat-table {\\n background: mat-color($background, 'card');\\n }\\n\\n .mat-table thead, .mat-table tbody, .mat-table tfoot,\\n mat-header-row, mat-row, mat-footer-row,\\n [mat-header-row], [mat-row], [mat-footer-row],\\n .mat-table-sticky {\\n background: inherit;\\n }\\n\\n mat-row, mat-header-row, mat-footer-row,\\n th.mat-header-cell, td.mat-cell, td.mat-footer-cell {\\n border-bottom-color: mat-color($foreground, divider);\\n }\\n\\n .mat-header-cell {\\n color: mat-color($foreground, secondary-text);\\n }\\n\\n .mat-cell, .mat-footer-cell {\\n color: mat-color($foreground, text);\\n }\\n}\\n\\n@mixin mat-table-typography($config) {\\n .mat-table {\\n font-family: mat-font-family($config);\\n }\\n\\n .mat-header-cell {\\n font-size: mat-font-size($config, caption);\\n font-weight: mat-font-weight($config, body-2);\\n }\\n\\n .mat-cell, .mat-footer-cell {\\n font-size: mat-font-size($config, body-1);\\n }\\n}\\n\\n\\n\\n\\n\\n\\n\\n$mat-datepicker-selected-today-box-shadow-width: 1px;\\n$mat-datepicker-selected-fade-amount: 0.6;\\n$mat-datepicker-today-fade-amount: 0.2;\\n$mat-calendar-body-font-size: 13px !default;\\n$mat-calendar-weekday-table-font-size: 11px !default;\\n\\n@mixin _mat-datepicker-color($palette) {\\n .mat-calendar-body-selected {\\n background-color: mat-color($palette);\\n color: mat-color($palette, default-contrast);\\n }\\n\\n .mat-calendar-body-disabled > .mat-calendar-body-selected {\\n $background: mat-color($palette);\\n\\n @if (type-of($background) == color) {\\n background-color: fade-out($background, $mat-datepicker-selected-fade-amount);\\n }\\n @else {\\n // If we couldn't resolve to background to a color (e.g. it's a CSS variable),\\n // fall back to fading the content out via `opacity`.\\n opacity: $mat-datepicker-today-fade-amount;\\n }\\n }\\n\\n .mat-calendar-body-today.mat-calendar-body-selected {\\n box-shadow: inset 0 0 0 $mat-datepicker-selected-today-box-shadow-width\\n mat-color($palette, default-contrast);\\n }\\n}\\n\\n@mixin mat-datepicker-theme($theme) {\\n $foreground: map-get($theme, foreground);\\n $background: map-get($theme, background);\\n\\n .mat-calendar-arrow {\\n border-top-color: mat-color($foreground, icon);\\n }\\n\\n // The prev/next buttons need a bit more specificity to\\n // avoid being overwritten by the .mat-icon-button.\\n .mat-datepicker-toggle,\\n .mat-datepicker-content .mat-calendar-next-button,\\n .mat-datepicker-content .mat-calendar-previous-button {\\n color: mat-color($foreground, icon);\\n }\\n\\n .mat-calendar-table-header {\\n color: mat-color($foreground, hint-text);\\n }\\n\\n .mat-calendar-table-header-divider::after {\\n background: mat-color($foreground, divider);\\n }\\n\\n .mat-calendar-body-label {\\n color: mat-color($foreground, secondary-text);\\n }\\n\\n .mat-calendar-body-cell-content {\\n color: mat-color($foreground, text);\\n border-color: transparent;\\n }\\n\\n .mat-calendar-body-disabled > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\\n color: mat-color($foreground, disabled-text);\\n }\\n\\n .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover,\\n .cdk-keyboard-focused .mat-calendar-body-active,\\n .cdk-program-focused .mat-calendar-body-active {\\n & > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {\\n background-color: mat-color($background, hover);\\n }\\n }\\n\\n .mat-calendar-body-today:not(.mat-calendar-body-selected) {\\n // Note: though it's not text, the border is a hint about the fact that this is today's date,\\n // so we use the hint color.\\n border-color: mat-color($foreground, hint-text);\\n }\\n\\n .mat-calendar-body-disabled > .mat-calendar-body-today:not(.mat-calendar-body-selected) {\\n $color: mat-color($foreground, hint-text);\\n\\n @if (type-of($color) == color) {\\n border-color: fade-out($color, $mat-datepicker-today-fade-amount);\\n }\\n @else {\\n // If the color didn't resolve to a color value, but something like a CSS variable, we can't\\n // fade it out so we fall back to reducing the element opacity. Note that we don't use the\\n // $mat-datepicker-today-fade-amount, because hint text usually has some opacity applied\\n // to it already and we don't want them to stack on top of each other.\\n opacity: 0.5;\\n }\\n }\\n\\n @include _mat-datepicker-color(map-get($theme, primary));\\n\\n .mat-datepicker-content {\\n @include _mat-theme-elevation(4, $theme);\\n background-color: mat-color($background, card);\\n color: mat-color($foreground, text);\\n\\n &.mat-accent {\\n @include _mat-datepicker-color(map-get($theme, accent));\\n }\\n\\n &.mat-warn {\\n @include _mat-datepicker-color(map-get($theme, warn));\\n }\\n }\\n\\n .mat-datepicker-content-touch {\\n @include _mat-theme-elevation(0, $theme);\\n }\\n\\n .mat-datepicker-toggle-active {\\n color: mat-color(map-get($theme, primary), text);\\n\\n &.mat-accent {\\n color: mat-color(map-get($theme, accent), text);\\n }\\n\\n &.mat-warn {\\n color: mat-color(map-get($theme, warn), text);\\n }\\n }\\n}\\n\\n@mixin mat-datepicker-typography($config) {\\n .mat-calendar {\\n font-family: mat-font-family($config);\\n }\\n\\n .mat-calendar-body {\\n font-size: $mat-calendar-body-font-size;\\n }\\n\\n .mat-calendar-body-label,\\n .mat-calendar-period-button {\\n font: {\\n size: mat-font-size($config, button);\\n weight: mat-font-weight($config, button);\\n }\\n }\\n\\n .mat-calendar-table-header th {\\n font: {\\n size: $mat-calendar-weekday-table-font-size;\\n weight: mat-font-weight($config, body-1);\\n }\\n }\\n}\\n\\n\\n\\n\\n\\n\\n\\n@mixin mat-dialog-theme($theme) {\\n $background: map-get($theme, background);\\n $foreground: map-get($theme, foreground);\\n\\n .mat-dialog-container {\\n @include _mat-theme-elevation(24, $theme);\\n background: mat-color($background, dialog);\\n color: mat-color($foreground, text);\\n }\\n}\\n\\n@mixin mat-dialog-typography($config) {\\n .mat-dialog-title {\\n @include mat-typography-level-to-styles($config, title);\\n }\\n}\\n\\n\\n\\n\\n\\n\\n@mixin mat-expansion-panel-theme($theme) {\\n $background: map-get($theme, background);\\n $foreground: map-get($theme, foreground);\\n\\n .mat-expansion-panel {\\n @include _mat-theme-overridable-elevation(2, $theme);\\n background: mat-color($background, card);\\n color: mat-color($foreground, text);\\n }\\n\\n .mat-action-row {\\n border-top-color: mat-color($foreground, divider);\\n }\\n\\n .mat-expansion-panel {\\n & .mat-expansion-panel-header.cdk-keyboard-focused,\\n & .mat-expansion-panel-header.cdk-program-focused,\\n &:not(.mat-expanded) .mat-expansion-panel-header:hover {\\n &:not([aria-disabled='true']) {\\n background: mat-color($background, hover);\\n }\\n }\\n }\\n\\n // Disable the hover on touch devices since it can appear like it is stuck. We can't use\\n // `@media (hover)` above, because the desktop support browser support isn't great.\\n @media (hover: none) {\\n .mat-expansion-panel:not(.mat-expanded):not([aria-disabled='true'])\\n .mat-expansion-panel-header:hover {\\n background: mat-color($background, card);\\n }\\n }\\n\\n .mat-expansion-panel-header-title {\\n color: mat-color($foreground, text);\\n }\\n\\n .mat-expansion-panel-header-description,\\n .mat-expansion-indicator::after {\\n color: mat-color($foreground, secondary-text);\\n }\\n\\n .mat-expansion-panel-header[aria-disabled='true'] {\\n color: mat-color($foreground, disabled-button);\\n\\n .mat-expansion-panel-header-title,\\n .mat-expansion-panel-header-description {\\n color: inherit;\\n }\\n }\\n}\\n\\n@mixin mat-expansion-panel-typography($config) {\\n .mat-expansion-panel-header {\\n font: {\\n family: mat-font-family($config, subheading-1);\\n size: mat-font-size($config, subheading-1);\\n weight: mat-font-weight($config, subheading-1);\\n }\\n }\\n\\n .mat-expansion-panel-content {\\n @include mat-typography-level-to-styles($config, body-1);\\n }\\n}\\n\\n\\n\\n\\n// This mixin will ensure that lines that overflow the container will hide the overflow and\\n// truncate neatly with an ellipsis.\\n@mixin mat-truncate-line() {\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n}\\n\\n// Mixin to provide all mat-line styles, changing secondary font size based on whether the list\\n// is in dense mode.\\n@mixin mat-line-base($secondary-font-size) {\\n .mat-line {\\n @include mat-truncate-line();\\n display: block;\\n box-sizing: border-box;\\n\\n // all lines but the top line should have smaller text\\n &:nth-child(n+2) {\\n font-size: $secondary-font-size;\\n }\\n }\\n}\\n\\n// This mixin normalizes default element styles, e.g. font weight for heading text.\\n@mixin mat-normalize-text() {\\n & > * {\\n margin: 0;\\n padding: 0;\\n font-weight: normal;\\n font-size: inherit;\\n }\\n}\\n\\n// This mixin provides base styles for the wrapper around mat-line elements in a list.\\n@mixin mat-line-wrapper-base() {\\n @include mat-normalize-text();\\n\\n display: flex;\\n flex-direction: column;\\n width: 100%;\\n box-sizing: border-box;\\n overflow: hidden;\\n\\n // Must remove wrapper when lines are empty or it takes up horizontal\\n // space and pushes other elements to the right.\\n &:empty {\\n display: none;\\n }\\n}\\n\\n\\n\\n// Include this empty mixin for consistency with the other components.\\n@mixin mat-grid-list-theme($theme) { }\\n\\n@mixin mat-grid-list-typography($config) {\\n .mat-grid-tile-header,\\n .mat-grid-tile-footer {\\n @include mat-line-base(mat-font-size($config, caption));\\n font-size: mat-font-size($config, body-1);\\n }\\n}\\n\\n\\n\\n\\n// Include this empty mixin for consistency with the other components.\\n@mixin mat-icon-theme($theme) {\\n $primary: map-get($theme, primary);\\n $accent: map-get($theme, accent);\\n $warn: map-get($theme, warn);\\n $background: map-get($theme, background);\\n $foreground: map-get($theme, foreground);\\n\\n .mat-icon {\\n &.mat-primary {\\n color: mat-color($primary, text);\\n }\\n\\n &.mat-accent {\\n color: mat-color($accent, text);\\n }\\n\\n &.mat-warn {\\n color: mat-color($warn, text);\\n }\\n }\\n}\\n\\n@mixin mat-icon-typography($config) { }\\n\\n\\n\\n\\n\\n// Renders a gradient for showing the dashed line when the input is disabled.\\n// Unlike using a border, a gradient allows us to adjust the spacing of the dotted line\\n// to match the Material Design spec.\\n@mixin mat-control-disabled-underline($color) {\\n background-image: linear-gradient(to right, $color 0%, $color 33%, transparent 0%);\\n background-size: 4px 100%;\\n background-repeat: repeat-x;\\n}\\n\\n// Figures out the color of the placeholder for a form control.\\n// Used primarily to prevent the various form controls from\\n// becoming out of sync since these colors aren't in a palette.\\n@function _mat-control-placeholder-color($theme) {\\n $foreground: map-get($theme, foreground);\\n $is-dark-theme: map-get($theme, is-dark);\\n @return mat-color($foreground, secondary-text, if($is-dark-theme, 0.5, 0.42));\\n}\\n\\n\\n/* stylelint-disable material/no-prefixes */\\n@mixin user-select($value) {\\n -webkit-user-select: $value;\\n -moz-user-select: $value;\\n -ms-user-select: $value;\\n user-select: $value;\\n}\\n\\n@mixin input-placeholder {\\n &::placeholder {\\n @content;\\n }\\n\\n &::-moz-placeholder {\\n @content;\\n }\\n\\n &::-webkit-input-placeholder {\\n @content;\\n }\\n\\n &:-ms-input-placeholder {\\n @content;\\n }\\n}\\n\\n@mixin cursor-grab {\\n cursor: -webkit-grab;\\n cursor: grab;\\n}\\n\\n@mixin cursor-grabbing {\\n cursor: -webkit-grabbing;\\n cursor: grabbing;\\n}\\n\\n@mixin backface-visibility($value) {\\n -webkit-backface-visibility: $value;\\n backface-visibility: $value;\\n}\\n/* stylelint-enable */\\n\\n\\n\\n@mixin mat-input-theme($theme) {\\n $primary: map-get($theme, primary);\\n $accent: map-get($theme, accent);\\n $warn: map-get($theme, warn);\\n $foreground: map-get($theme, foreground);\\n\\n .mat-form-field-type-mat-native-select .mat-form-field-infix::after {\\n color: mat-color($foreground, secondary-text);\\n }\\n\\n .mat-input-element:disabled,\\n .mat-form-field-type-mat-native-select.mat-form-field-disabled .mat-form-field-infix::after {\\n color: mat-color($foreground, disabled-text);\\n }\\n\\n .mat-input-element {\\n caret-color: mat-color($primary, text);\\n\\n @include input-placeholder {\\n color: _mat-control-placeholder-color($theme);\\n }\\n\\n // On dark themes we set the native `select` color to some shade of white,\\n // however the color propagates to all of the `option` elements, which are\\n // always on a white background inside the dropdown, causing them to blend in.\\n // Since we can't change background of the dropdown, we need to explicitly\\n // reset the color of the options to something dark.\\n @if (map-get($theme, is-dark)) {\\n option {\\n color: $dark-primary-text;\\n }\\n\\n option:disabled {\\n color: $dark-disabled-text;\\n }\\n }\\n }\\n\\n .mat-accent .mat-input-element {\\n caret-color: mat-color($accent, text);\\n }\\n\\n .mat-warn .mat-input-element,\\n .mat-form-field-invalid .mat-input-element {\\n caret-color: mat-color($warn, text);\\n }\\n\\n .mat-form-field-type-mat-native-select.mat-form-field-invalid .mat-form-field-infix::after {\\n color: mat-color($warn, text);\\n }\\n}\\n\\n@mixin mat-input-typography($config) {\\n // The unit-less line-height from the font config.\\n $line-height: mat-line-height($config, input);\\n\\n // The amount of space between the top of the line and the top of the actual text\\n // (as a fraction of the font-size).\\n $line-spacing: ($line-height - 1) / 2;\\n\\n // elements seem to have their height set slightly too large on Safari causing the text to\\n // be misaligned w.r.t. the placeholder. Adding this margin corrects it.\\n input.mat-input-element {\\n margin-top: -$line-spacing * 1em;\\n }\\n}\\n\\n\\n\\n\\n\\n\\n\\n@mixin mat-list-theme($theme) {\\n $background: map-get($theme, background);\\n $foreground: map-get($theme, foreground);\\n\\n .mat-list-base {\\n .mat-list-item {\\n color: mat-color($foreground, text);\\n }\\n\\n .mat-list-option {\\n color: mat-color($foreground, text);\\n }\\n\\n .mat-subheader {\\n color: mat-color($foreground, secondary-text);\\n }\\n }\\n\\n .mat-list-item-disabled {\\n background-color: mat-color($background, disabled-list-option);\\n }\\n\\n .mat-list-option,\\n .mat-nav-list .mat-list-item,\\n .mat-action-list .mat-list-item {\\n &:hover, &:focus {\\n background: mat-color($background, 'hover');\\n }\\n }\\n\\n .mat-list-single-selected-option {\\n &, &:hover, &:focus {\\n background: mat-color($background, hover, 0.12);\\n }\\n }\\n}\\n\\n@mixin mat-list-typography($config) {\\n $font-family: mat-font-family($config);\\n\\n .mat-list-item {\\n font-family: $font-family;\\n }\\n\\n .mat-list-option {\\n font-family: $font-family;\\n }\\n\\n // Default list\\n .mat-list-base {\\n .mat-list-item {\\n font-size: mat-font-size($config, subheading-2);\\n @include mat-line-base(mat-font-size($config, body-1));\\n }\\n\\n .mat-list-option {\\n font-size: mat-font-size($config, subheading-2);\\n @include mat-line-base(mat-font-size($config, body-1));\\n }\\n\\n .mat-subheader {\\n font-family: mat-font-family($config, body-2);\\n font-size: mat-font-size($config, body-2);\\n font-weight: mat-font-weight($config, body-2);\\n }\\n }\\n\\n // Dense list\\n .mat-list-base[dense] {\\n .mat-list-item {\\n font-size: mat-font-size($config, caption);\\n @include mat-line-base(mat-font-size($config, caption));\\n }\\n\\n .mat-list-option {\\n font-size: mat-font-size($config, caption);\\n @include mat-line-base(mat-font-size($config, caption));\\n }\\n\\n .mat-subheader {\\n font-family: $font-family;\\n font-size: mat-font-size($config, caption);\\n font-weight: mat-font-weight($config, body-2);\\n }\\n }\\n}\\n\\n\\n\\n\\n\\n\\n\\n@mixin mat-menu-theme($theme) {\\n $background: map-get($theme, background);\\n $foreground: map-get($theme, foreground);\\n\\n .mat-menu-panel {\\n @include _mat-theme-overridable-elevation(4, $theme);\\n background: mat-color($background, 'card');\\n }\\n\\n .mat-menu-item {\\n background: transparent;\\n color: mat-color($foreground, 'text');\\n\\n &[disabled] {\\n &, &::after {\\n color: mat-color($foreground, 'disabled');\\n }\\n }\\n }\\n\\n .mat-menu-item .mat-icon-no-color,\\n .mat-menu-item-submenu-trigger::after {\\n color: mat-color($foreground, 'icon');\\n }\\n\\n .mat-menu-item:hover,\\n .mat-menu-item.cdk-program-focused,\\n .mat-menu-item.cdk-keyboard-focused,\\n .mat-menu-item-highlighted {\\n &:not([disabled]) {\\n background: mat-color($background, 'hover');\\n }\\n }\\n}\\n\\n@mixin mat-menu-typography($config) {\\n .mat-menu-item {\\n font: {\\n family: mat-font-family($config, body-1);\\n size: mat-font-size($config, body-1);\\n weight: mat-font-weight($config, body-1);\\n }\\n }\\n}\\n\\n\\n\\n\\n\\n\\n@mixin mat-paginator-theme($theme) {\\n $foreground: map-get($theme, foreground);\\n $background: map-get($theme, background);\\n\\n .mat-paginator {\\n background: mat-color($background, 'card');\\n }\\n\\n .mat-paginator,\\n .mat-paginator-page-size .mat-select-trigger {\\n color: mat-color($foreground, secondary-text);\\n }\\n\\n .mat-paginator-decrement,\\n .mat-paginator-increment {\\n border-top: 2px solid mat-color($foreground, 'icon');\\n border-right: 2px solid mat-color($foreground, 'icon');\\n }\\n\\n .mat-paginator-first,\\n .mat-paginator-last {\\n border-top: 2px solid mat-color($foreground, 'icon');\\n }\\n\\n .mat-icon-button[disabled] {\\n .mat-paginator-decrement,\\n .mat-paginator-increment,\\n .mat-paginator-first,\\n .mat-paginator-last {\\n border-color: mat-color($foreground, 'disabled');\\n }\\n }\\n}\\n\\n@mixin mat-paginator-typography($config) {\\n .mat-paginator,\\n .mat-paginator-page-size .mat-select-trigger {\\n font: {\\n family: mat-font-family($config, caption);\\n size: mat-font-size($config, caption);\\n }\\n }\\n}\\n\\n\\n\\n\\n\\n@mixin mat-progress-bar-theme($theme) {\\n $primary: map-get($theme, primary);\\n $accent: map-get($theme, accent);\\n $warn: map-get($theme, warn);\\n\\n .mat-progress-bar-background {\\n fill: mat-color($primary, lighter);\\n }\\n\\n .mat-progress-bar-buffer {\\n background-color: mat-color($primary, lighter);\\n }\\n\\n .mat-progress-bar-fill::after {\\n background-color: mat-color($primary);\\n }\\n\\n .mat-progress-bar.mat-accent {\\n .mat-progress-bar-background {\\n fill: mat-color($accent, lighter);\\n }\\n\\n .mat-progress-bar-buffer {\\n background-color: mat-color($accent, lighter);\\n }\\n\\n .mat-progress-bar-fill::after {\\n background-color: mat-color($accent);\\n }\\n }\\n\\n .mat-progress-bar.mat-warn {\\n .mat-progress-bar-background {\\n fill: mat-color($warn, lighter);\\n }\\n\\n .mat-progress-bar-buffer {\\n background-color: mat-color($warn, lighter);\\n }\\n\\n .mat-progress-bar-fill::after {\\n background-color: mat-color($warn);\\n }\\n }\\n}\\n\\n@mixin mat-progress-bar-typography($config) { }\\n\\n\\n\\n\\n\\n\\n@mixin mat-progress-spinner-theme($theme) {\\n $primary: map-get($theme, primary);\\n $accent: map-get($theme, accent);\\n $warn: map-get($theme, warn);\\n\\n .mat-progress-spinner, .mat-spinner {\\n circle {\\n stroke: mat-color($primary);\\n }\\n\\n &.mat-accent circle {\\n stroke: mat-color($accent);\\n }\\n\\n &.mat-warn circle {\\n stroke: mat-color($warn);\\n }\\n }\\n}\\n\\n@mixin mat-progress-spinner-typography($config) { }\\n\\n\\n\\n\\n\\n@mixin _mat-radio-color($palette) {\\n &.mat-radio-checked .mat-radio-outer-circle {\\n border-color: mat-color($palette);\\n }\\n\\n .mat-radio-inner-circle,\\n .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),\\n &.mat-radio-checked .mat-radio-persistent-ripple,\\n &:active .mat-radio-persistent-ripple {\\n background-color: mat-color($palette);\\n }\\n}\\n\\n@mixin mat-radio-theme($theme) {\\n $primary: map-get($theme, primary);\\n $accent: map-get($theme, accent);\\n $warn: map-get($theme, warn);\\n $background: map-get($theme, background);\\n $foreground: map-get($theme, foreground);\\n\\n .mat-radio-outer-circle {\\n border-color: mat-color($foreground, secondary-text);\\n }\\n\\n .mat-radio-button {\\n &.mat-primary {\\n @include _mat-radio-color($primary);\\n }\\n\\n &.mat-accent {\\n @include _mat-radio-color($accent);\\n }\\n\\n &.mat-warn {\\n @include _mat-radio-color($warn);\\n }\\n\\n // This needs extra specificity, because the classes above are combined\\n // (e.g. `.mat-radio-button.mat-accent`) which increases their specificity a lot.\\n // TODO: consider making the selectors into descendants (`.mat-primary .mat-radio-button`).\\n &.mat-radio-disabled {\\n &.mat-radio-checked .mat-radio-outer-circle,\\n .mat-radio-outer-circle {\\n border-color: mat-color($foreground, disabled);\\n }\\n\\n .mat-radio-ripple .mat-ripple-element,\\n .mat-radio-inner-circle {\\n background-color: mat-color($foreground, disabled);\\n }\\n\\n .mat-radio-label-content {\\n color: mat-color($foreground, disabled);\\n }\\n }\\n\\n // Switch this to a solid color since we're using `opacity`\\n // to control how opaque the ripple should be.\\n .mat-ripple-element {\\n background-color: map_get($foreground, base);\\n }\\n }\\n}\\n\\n@mixin mat-radio-typography($config) {\\n .mat-radio-button {\\n font-family: mat-font-family($config);\\n }\\n}\\n\\n\\n\\n\\n\\n\\n\\n\\n@mixin mat-select-theme($theme) {\\n $foreground: map-get($theme, foreground);\\n $background: map-get($theme, background);\\n $primary: map-get($theme, primary);\\n $accent: map-get($theme, accent);\\n $warn: map-get($theme, warn);\\n\\n .mat-select-value {\\n color: mat-color($foreground, text);\\n }\\n\\n .mat-select-placeholder {\\n color: _mat-control-placeholder-color($theme);\\n }\\n\\n .mat-select-disabled .mat-select-value {\\n color: mat-color($foreground, disabled-text);\\n }\\n\\n .mat-select-arrow {\\n color: mat-color($foreground, secondary-text);\\n }\\n\\n .mat-select-panel {\\n background: mat-color($background, card);\\n @include _mat-theme-overridable-elevation(4, $theme);\\n\\n .mat-option.mat-selected:not(.mat-option-multiple) {\\n background: mat-color($background, hover, 0.12);\\n }\\n }\\n\\n .mat-form-field {\\n &.mat-focused {\\n &.mat-primary .mat-select-arrow {\\n color: mat-color($primary, text);\\n }\\n\\n &.mat-accent .mat-select-arrow {\\n color: mat-color($accent, text);\\n }\\n\\n &.mat-warn .mat-select-arrow {\\n color: mat-color($warn, text);\\n }\\n }\\n\\n .mat-select.mat-select-invalid .mat-select-arrow {\\n color: mat-color($warn, text);\\n }\\n\\n .mat-select.mat-select-disabled .mat-select-arrow {\\n color: mat-color($foreground, disabled-text);\\n }\\n }\\n}\\n\\n@mixin mat-select-typography($config) {\\n // The unit-less line-height from the font config.\\n $line-height: mat-line-height($config, input);\\n\\n .mat-select {\\n font-family: mat-font-family($config);\\n }\\n\\n .mat-select-trigger {\\n height: $line-height * 1em;\\n }\\n}\\n\\n\\n\\n\\n\\n\\n@mixin mat-sidenav-theme($theme) {\\n $primary: map-get($theme, primary);\\n $accent: map-get($theme, accent);\\n $warn: map-get($theme, warn);\\n $background: map-get($theme, background);\\n $foreground: map-get($theme, foreground);\\n\\n $drawer-background-color: mat-color($background, dialog);\\n $drawer-container-background-color: mat-color($background, background);\\n $drawer-push-background-color: mat-color($background, dialog);\\n $drawer-side-border: solid 1px mat-color($foreground, divider);\\n\\n .mat-drawer-container {\\n background-color: $drawer-container-background-color;\\n color: mat-color($foreground, text);\\n }\\n\\n .mat-drawer {\\n background-color: $drawer-background-color;\\n color: mat-color($foreground, text);\\n\\n &.mat-drawer-push {\\n background-color: $drawer-push-background-color;\\n }\\n\\n &:not(.mat-drawer-side) {\\n // The elevation of z-16 is noted in the design specifications.\\n // See https://material.io/design/components/navigation-drawer.html\\n @include _mat-theme-elevation(16, $theme);\\n }\\n }\\n\\n .mat-drawer-side {\\n border-right: $drawer-side-border;\\n\\n &.mat-drawer-end {\\n border-left: $drawer-side-border;\\n border-right: none;\\n }\\n }\\n\\n [dir='rtl'] .mat-drawer-side {\\n border-left: $drawer-side-border;\\n border-right: none;\\n\\n &.mat-drawer-end {\\n border-left: none;\\n border-right: $drawer-side-border;\\n }\\n }\\n\\n .mat-drawer-backdrop.mat-drawer-shown {\\n $opacity: 0.6;\\n $backdrop-color: mat-color($background, card, $opacity);\\n\\n @if (type-of($backdrop-color) == color) {\\n // We use invert() here to have the darken the background color expected to be used. If the\\n // background is light, we use a dark backdrop. If the background is dark,\\n // we use a light backdrop.\\n background-color: invert($backdrop-color);\\n }\\n @else {\\n // If we couldn't resolve the backdrop color to a color value, fall back to using\\n // `opacity` to make it opaque since its end value could be a solid color.\\n background-color: $backdrop-color;\\n opacity: $opacity;\\n }\\n }\\n}\\n\\n@mixin mat-sidenav-typography($config) { }\\n\\n\\n\\n\\n\\n\\n@mixin _mat-slide-toggle-checked($palette, $thumb-checked-hue) {\\n &.mat-checked {\\n .mat-slide-toggle-thumb {\\n background-color: mat-color($palette, $thumb-checked-hue);\\n }\\n\\n .mat-slide-toggle-bar {\\n // Opacity is determined from the specs for the selection controls.\\n // See: https://material.io/design/components/selection-controls.html#specs\\n background-color: mat-color($palette, $thumb-checked-hue, 0.54);\\n }\\n\\n .mat-ripple-element {\\n // Set no opacity for the ripples because the ripple opacity will be adjusted dynamically\\n // based on the type of interaction with the slide-toggle (e.g. for hover, focus)\\n background-color: mat-color($palette, $thumb-checked-hue);\\n }\\n }\\n}\\n\\n@mixin mat-slide-toggle-theme($theme) {\\n $is-dark: map_get($theme, is-dark);\\n $primary: map-get($theme, primary);\\n $accent: map-get($theme, accent);\\n $warn: map-get($theme, warn);\\n $background: map-get($theme, background);\\n $foreground: map-get($theme, foreground);\\n\\n // Color hues are based on the specs which briefly show the hues that are applied to a switch.\\n // The 2018 specs no longer describe how dark switches should look like. Due to the lack of\\n // information for dark themed switches, we partially keep the old behavior that is based on\\n // the previous specifications. For the checked color we always use the `default` hue because\\n // that follows MDC and also makes it easier for people to create a custom theme without needing\\n // to specify each hue individually.\\n $thumb-unchecked-hue: if($is-dark, 400, 50);\\n $thumb-checked-hue: default;\\n\\n $bar-unchecked-color: mat-color($foreground, disabled);\\n $ripple-unchecked-color: mat-color($foreground, base);\\n\\n .mat-slide-toggle {\\n @include _mat-slide-toggle-checked($accent, $thumb-checked-hue);\\n\\n &.mat-primary {\\n @include _mat-slide-toggle-checked($primary, $thumb-checked-hue);\\n }\\n\\n &.mat-warn {\\n @include _mat-slide-toggle-checked($warn, $thumb-checked-hue);\\n }\\n\\n &:not(.mat-checked) .mat-ripple-element {\\n // Set no opacity for the ripples because the ripple opacity will be adjusted dynamically\\n // based on the type of interaction with the slide-toggle (e.g. for hover, focus)\\n background-color: $ripple-unchecked-color;\\n }\\n }\\n\\n .mat-slide-toggle-thumb {\\n @include _mat-theme-elevation(1, $theme);\\n background-color: mat-color($mat-grey, $thumb-unchecked-hue);\\n }\\n\\n .mat-slide-toggle-bar {\\n background-color: $bar-unchecked-color;\\n }\\n}\\n\\n@mixin mat-slide-toggle-typography($config) {\\n .mat-slide-toggle-content {\\n font-family: mat-font-family($config);\\n }\\n}\\n\\n\\n\\n\\n\\n@mixin _mat-slider-inner-content-theme($palette) {\\n .mat-slider-track-fill,\\n .mat-slider-thumb,\\n .mat-slider-thumb-label {\\n background-color: mat-color($palette);\\n }\\n\\n .mat-slider-thumb-label-text {\\n color: mat-color($palette, default-contrast);\\n }\\n}\\n\\n@mixin mat-slider-theme($theme) {\\n $primary: map-get($theme, primary);\\n $accent: map-get($theme, accent);\\n $warn: map-get($theme, warn);\\n $background: map-get($theme, background);\\n $foreground: map-get($theme, foreground);\\n\\n $mat-slider-off-color: mat-color($foreground, slider-off);\\n $mat-slider-off-focused-color: mat-color($foreground, slider-off-active);\\n $mat-slider-disabled-color: mat-color($foreground, slider-off);\\n $mat-slider-labeled-min-value-thumb-color: mat-color($foreground, slider-min);\\n $mat-slider-labeled-min-value-thumb-label-color: mat-color($foreground, slider-off);\\n $mat-slider-tick-opacity: 0.7;\\n $mat-slider-tick-color: mat-color($foreground, base, $mat-slider-tick-opacity);\\n $mat-slider-tick-size: 2px;\\n\\n .mat-slider-track-background {\\n background-color: $mat-slider-off-color;\\n }\\n\\n .mat-primary {\\n @include _mat-slider-inner-content-theme($primary);\\n }\\n\\n .mat-accent {\\n @include _mat-slider-inner-content-theme($accent);\\n }\\n\\n .mat-warn {\\n @include _mat-slider-inner-content-theme($warn);\\n }\\n\\n .mat-slider-focus-ring {\\n $opacity: 0.2;\\n $color: mat-color($accent, default, $opacity);\\n background-color: $color;\\n\\n // `mat-color` uses `rgba` for the opacity which won't work with\\n // CSS variables so we need to use `opacity` as a fallback.\\n @if (type-of($color) != color) {\\n opacity: $opacity;\\n }\\n }\\n\\n .mat-slider:hover,\\n .cdk-focused {\\n .mat-slider-track-background {\\n background-color: $mat-slider-off-focused-color;\\n }\\n }\\n\\n .mat-slider-disabled {\\n .mat-slider-track-background,\\n .mat-slider-track-fill,\\n .mat-slider-thumb {\\n background-color: $mat-slider-disabled-color;\\n }\\n\\n &:hover {\\n .mat-slider-track-background {\\n background-color: $mat-slider-disabled-color;\\n }\\n }\\n }\\n\\n .mat-slider-min-value {\\n .mat-slider-focus-ring {\\n $opacity: 0.12;\\n $color: mat-color($foreground, base, $opacity);\\n background-color: $color;\\n\\n // `mat-color` uses `rgba` for the opacity which won't work with\\n // CSS variables so we need to use `opacity` as a fallback.\\n @if (type-of($color) != color) {\\n opacity: $opacity;\\n }\\n }\\n\\n &.mat-slider-thumb-label-showing {\\n .mat-slider-thumb,\\n .mat-slider-thumb-label {\\n background-color: $mat-slider-labeled-min-value-thumb-color;\\n }\\n\\n &.cdk-focused {\\n .mat-slider-thumb,\\n .mat-slider-thumb-label {\\n background-color: $mat-slider-labeled-min-value-thumb-label-color;\\n }\\n }\\n }\\n\\n &:not(.mat-slider-thumb-label-showing) {\\n .mat-slider-thumb {\\n border-color: $mat-slider-off-color;\\n background-color: transparent;\\n }\\n\\n &:hover,\\n &.cdk-focused {\\n .mat-slider-thumb {\\n border-color: $mat-slider-off-focused-color;\\n }\\n\\n &.mat-slider-disabled .mat-slider-thumb {\\n border-color: $mat-slider-disabled-color;\\n }\\n }\\n }\\n }\\n\\n .mat-slider-has-ticks .mat-slider-wrapper::after {\\n border-color: $mat-slider-tick-color;\\n\\n // `mat-color` uses `rgba` for the opacity which won't work with\\n // CSS variables so we need to use `opacity` as a fallback.\\n @if (type-of($mat-slider-tick-color) != color) {\\n opacity: $mat-slider-tick-opacity;\\n }\\n }\\n\\n .mat-slider-horizontal .mat-slider-ticks {\\n background-image: repeating-linear-gradient(to right, $mat-slider-tick-color,\\n $mat-slider-tick-color $mat-slider-tick-size, transparent 0, transparent);\\n // Firefox doesn't draw the gradient correctly with 'to right'\\n // (see https://bugzilla.mozilla.org/show_bug.cgi?id=1314319).\\n background-image: -moz-repeating-linear-gradient(0.0001deg, $mat-slider-tick-color,\\n $mat-slider-tick-color $mat-slider-tick-size, transparent 0, transparent);\\n\\n // `mat-color` uses `rgba` for the opacity which won't work with\\n // CSS variables so we need to use `opacity` as a fallback.\\n @if (type-of($mat-slider-tick-color) != color) {\\n opacity: $mat-slider-tick-opacity;\\n }\\n }\\n\\n .mat-slider-vertical .mat-slider-ticks {\\n background-image: repeating-linear-gradient(to bottom, $mat-slider-tick-color,\\n $mat-slider-tick-color $mat-slider-tick-size, transparent 0, transparent);\\n\\n // `mat-color` uses `rgba` for the opacity which won't work with\\n // CSS variables so we need to use `opacity` as a fallback.\\n @if (type-of($mat-slider-tick-color) != color) {\\n opacity: $mat-slider-tick-opacity;\\n }\\n }\\n}\\n\\n@mixin mat-slider-typography($config) {\\n .mat-slider-thumb-label-text {\\n font: {\\n family: mat-font-family($config);\\n size: mat-font-size($config, caption);\\n weight: mat-font-weight($config, body-2);\\n }\\n }\\n}\\n\\n\\n\\n\\n\\n@mixin mat-stepper-theme($theme) {\\n $foreground: map-get($theme, foreground);\\n $background: map-get($theme, background);\\n $primary: map-get($theme, primary);\\n $warn: map-get($theme, warn);\\n\\n .mat-step-header {\\n &.cdk-keyboard-focused,\\n &.cdk-program-focused,\\n &:hover {\\n background-color: mat-color($background, hover);\\n }\\n\\n // On touch devices the :hover state will linger on the element after a tap.\\n // Reset it via `@media` after the declaration, because the media query isn't\\n // supported by all browsers yet.\\n @media (hover: none) {\\n &:hover {\\n background: none;\\n }\\n }\\n\\n .mat-step-label,\\n .mat-step-optional {\\n // TODO(josephperrott): Update to using a corrected disabled-text contrast\\n // instead of secondary-text.\\n color: mat-color($foreground, secondary-text);\\n }\\n\\n .mat-step-icon {\\n // TODO(josephperrott): Update to using a corrected disabled-text contrast\\n // instead of secondary-text.\\n background-color: mat-color($foreground, secondary-text);\\n color: mat-color($primary, default-contrast);\\n }\\n\\n .mat-step-icon-selected,\\n .mat-step-icon-state-done,\\n .mat-step-icon-state-edit {\\n background-color: mat-color($primary);\\n color: mat-color($primary, default-contrast);\\n }\\n\\n .mat-step-icon-state-error {\\n background-color: transparent;\\n color: mat-color($warn, text);\\n }\\n\\n .mat-step-label.mat-step-label-active {\\n color: mat-color($foreground, text);\\n }\\n\\n .mat-step-label.mat-step-label-error {\\n color: mat-color($warn, text);\\n }\\n }\\n\\n .mat-stepper-horizontal, .mat-stepper-vertical {\\n background-color: mat-color($background, card);\\n }\\n\\n .mat-stepper-vertical-line::before {\\n border-left-color: mat-color($foreground, divider);\\n }\\n\\n .mat-horizontal-stepper-header::before,\\n .mat-horizontal-stepper-header::after,\\n .mat-stepper-horizontal-line {\\n border-top-color: mat-color($foreground, divider);\\n }\\n}\\n\\n@mixin mat-stepper-typography($config) {\\n .mat-stepper-vertical, .mat-stepper-horizontal {\\n font-family: mat-font-family($config);\\n }\\n\\n .mat-step-label {\\n font: {\\n size: mat-font-size($config, body-1);\\n weight: mat-font-weight($config, body-1);\\n };\\n }\\n\\n .mat-step-sub-label-error {\\n font-weight: normal;\\n }\\n\\n .mat-step-label-error {\\n font-size: mat-font-size($config, body-2);\\n }\\n\\n .mat-step-label-selected {\\n font: {\\n size: mat-font-size($config, body-2);\\n weight: mat-font-weight($config, body-2);\\n };\\n }\\n}\\n\\n@mixin mat-sort-theme($theme) {\\n $background: map-get($theme, background);\\n $foreground: map-get($theme, foreground);\\n\\n .mat-sort-header-arrow {\\n $table-background: mat-color($background, 'card');\\n $text-color: mat-color($foreground, secondary-text);\\n\\n // Because the arrow is made up of multiple elements that are stacked on top of each other,\\n // we can't use the semi-trasparent color from the theme directly. If the value is a color\\n // *type*, we convert it into a solid color by taking the opacity from the rgba value and\\n // using the value to determine the percentage of the background to put into foreground\\n // when mixing the colors together. Otherwise, if it resolves to something different\\n // (e.g. it resolves to a CSS variable), we use the color directly.\\n @if (type-of($table-background) == color and type-of($text-color) == color) {\\n $text-opacity: opacity($text-color);\\n color: mix($table-background, rgba($text-color, 1), (1 - $text-opacity) * 100%);\\n }\\n @else {\\n color: $text-color;\\n }\\n }\\n}\\n\\n@mixin mat-sort-typography($config) { }\\n\\n\\n\\n\\n\\n@mixin mat-tabs-theme($theme) {\\n $primary: map-get($theme, primary);\\n $accent: map-get($theme, accent);\\n $warn: map-get($theme, warn);\\n $background: map-get($theme, background);\\n $foreground: map-get($theme, foreground);\\n $header-border: 1px solid mat-color($foreground, divider);\\n\\n .mat-tab-nav-bar,\\n .mat-tab-header {\\n border-bottom: $header-border;\\n }\\n\\n .mat-tab-group-inverted-header {\\n .mat-tab-nav-bar,\\n .mat-tab-header {\\n border-top: $header-border;\\n border-bottom: none;\\n }\\n }\\n\\n .mat-tab-label, .mat-tab-link {\\n color: mat-color($foreground, text);\\n\\n &.mat-tab-disabled {\\n color: mat-color($foreground, disabled-text);\\n }\\n }\\n\\n .mat-tab-header-pagination-chevron {\\n border-color: mat-color($foreground, text);\\n }\\n\\n .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\\n border-color: mat-color($foreground, disabled-text);\\n }\\n\\n // Remove header border when there is a background color\\n .mat-tab-group[class*='mat-background-'] .mat-tab-header,\\n .mat-tab-nav-bar[class*='mat-background-'] {\\n border-bottom: none;\\n border-top: none;\\n }\\n\\n .mat-tab-group, .mat-tab-nav-bar {\\n $theme-colors: (\\n primary: $primary,\\n accent: $accent,\\n warn: $warn\\n );\\n\\n @each $name, $color in $theme-colors {\\n // Set the foreground color of the tabs\\n &.mat-#{$name} {\\n @include _mat-tab-label-focus($color);\\n @include _mat-ink-bar($color);\\n\\n // Override ink bar when background color is the same\\n &.mat-background-#{$name} {\\n @include _mat-ink-bar($color, default-contrast);\\n }\\n }\\n }\\n\\n @each $name, $color in $theme-colors {\\n // Set background color of the tabs and override focus color\\n &.mat-background-#{$name} {\\n @include _mat-tab-label-focus($color);\\n @include _mat-tabs-background($color);\\n }\\n }\\n }\\n}\\n\\n@mixin _mat-ink-bar($color, $hue: default) {\\n .mat-ink-bar {\\n background-color: mat-color($color, $hue);\\n }\\n}\\n\\n@mixin _mat-tab-label-focus($tab-focus-color) {\\n .mat-tab-label,\\n .mat-tab-link {\\n &.cdk-keyboard-focused,\\n &.cdk-program-focused {\\n &:not(.mat-tab-disabled) {\\n background-color: mat-color($tab-focus-color, lighter, 0.3);\\n }\\n }\\n }\\n}\\n\\n@mixin _mat-tabs-background($background-color) {\\n // Set background color for the tab group\\n .mat-tab-header, .mat-tab-links, .mat-tab-header-pagination {\\n background-color: mat-color($background-color);\\n }\\n\\n // Set labels to contrast against background\\n .mat-tab-label, .mat-tab-link {\\n color: mat-color($background-color, default-contrast);\\n\\n &.mat-tab-disabled {\\n color: mat-color($background-color, default-contrast, 0.4);\\n }\\n }\\n\\n // Set pagination chevrons to contrast background\\n .mat-tab-header-pagination-chevron {\\n border-color: mat-color($background-color, default-contrast);\\n }\\n\\n .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {\\n border-color: mat-color($background-color, default-contrast, 0.4);\\n }\\n\\n // Set ripples color to be the contrast color of the new background. Otherwise the ripple\\n // color will be based on the app background color.\\n .mat-ripple-element {\\n background-color: mat-color($background-color, default-contrast, 0.12);\\n }\\n}\\n\\n@mixin mat-tabs-typography($config) {\\n .mat-tab-group {\\n font-family: mat-font-family($config);\\n }\\n\\n .mat-tab-label, .mat-tab-link {\\n font: {\\n family: mat-font-family($config, button);\\n size: mat-font-size($config, button);\\n weight: mat-font-weight($config, button);\\n }\\n }\\n}\\n\\n\\n\\n\\n\\n\\n@mixin _mat-toolbar-color($palette) {\\n background: mat-color($palette);\\n color: mat-color($palette, default-contrast);\\n}\\n\\n@mixin _mat-toolbar-form-field-overrides {\\n .mat-form-field-underline,\\n .mat-form-field-ripple,\\n .mat-focused .mat-form-field-ripple {\\n background-color: currentColor;\\n }\\n\\n .mat-form-field-label,\\n .mat-focused .mat-form-field-label,\\n .mat-select-value,\\n .mat-select-arrow,\\n .mat-form-field.mat-focused .mat-select-arrow {\\n color: inherit;\\n }\\n\\n .mat-input-element {\\n caret-color: currentColor;\\n }\\n}\\n\\n@mixin mat-toolbar-theme($theme) {\\n $primary: map-get($theme, primary);\\n $accent: map-get($theme, accent);\\n $warn: map-get($theme, warn);\\n $background: map-get($theme, background);\\n $foreground: map-get($theme, foreground);\\n\\n .mat-toolbar {\\n background: mat-color($background, app-bar);\\n color: mat-color($foreground, text);\\n\\n &.mat-primary {\\n @include _mat-toolbar-color($primary);\\n }\\n\\n &.mat-accent {\\n @include _mat-toolbar-color($accent);\\n }\\n\\n &.mat-warn {\\n @include _mat-toolbar-color($warn);\\n }\\n\\n @include _mat-toolbar-form-field-overrides;\\n }\\n}\\n\\n@mixin mat-toolbar-typography($config) {\\n .mat-toolbar,\\n .mat-toolbar h1,\\n .mat-toolbar h2,\\n .mat-toolbar h3,\\n .mat-toolbar h4,\\n .mat-toolbar h5,\\n .mat-toolbar h6 {\\n @include mat-typography-level-to-styles($config, title);\\n margin: 0;\\n }\\n}\\n\\n\\n\\n\\n\\n$mat-tooltip-target-height: 22px;\\n$mat-tooltip-font-size: 10px;\\n$mat-tooltip-vertical-padding: ($mat-tooltip-target-height - $mat-tooltip-font-size) / 2;\\n\\n$mat-tooltip-handset-target-height: 30px;\\n$mat-tooltip-handset-font-size: 14px;\\n$mat-tooltip-handset-vertical-padding:\\n ($mat-tooltip-handset-target-height - $mat-tooltip-handset-font-size) / 2;\\n\\n@mixin mat-tooltip-theme($theme) {\\n $background: map-get($theme, background);\\n\\n .mat-tooltip {\\n background: mat-color($background, tooltip, 0.9);\\n }\\n}\\n\\n@mixin mat-tooltip-typography($config) {\\n .mat-tooltip {\\n font-family: mat-font-family($config);\\n font-size: $mat-tooltip-font-size;\\n padding-top: $mat-tooltip-vertical-padding;\\n padding-bottom: $mat-tooltip-vertical-padding;\\n }\\n\\n .mat-tooltip-handset {\\n font-size: $mat-tooltip-handset-font-size;\\n padding-top: $mat-tooltip-handset-vertical-padding;\\n padding-bottom: $mat-tooltip-handset-vertical-padding;\\n }\\n}\\n\\n\\n\\n\\n\\n@mixin mat-snack-bar-theme($theme) {\\n $is-dark-theme: map-get($theme, is-dark);\\n $accent: map-get($theme, accent);\\n\\n .mat-snack-bar-container {\\n // Use the primary text on the dark theme, even though the lighter one uses\\n // a secondary, because the contrast on the light primary text is poor.\\n color: if($is-dark-theme, $dark-primary-text, $light-secondary-text);\\n background: if($is-dark-theme, map-get($mat-grey, 50), #323232);\\n\\n @include _mat-theme-elevation(6, $theme);\\n }\\n\\n .mat-simple-snackbar-action {\\n color: if($is-dark-theme, inherit, mat-color($accent, text));\\n }\\n}\\n\\n@mixin mat-snack-bar-typography($config) {\\n .mat-simple-snackbar {\\n font: {\\n family: mat-font-family($config, body-1);\\n size: mat-font-size($config, body-1);\\n }\\n }\\n\\n .mat-simple-snackbar-action {\\n line-height: 1;\\n font: {\\n family: inherit;\\n size: inherit;\\n weight: mat-font-weight($config, button);\\n }\\n }\\n}\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n// Theme styles that only apply to the fill appearance of the form-field.\\n\\n@mixin mat-form-field-fill-theme($theme) {\\n $foreground: map-get($theme, foreground);\\n $is-dark-theme: map-get($theme, is-dark);\\n\\n $fill-background: mat-color($foreground, base, if($is-dark-theme, 0.1, 0.04));\\n $fill-disabled-background: mat-color($foreground, base, if($is-dark-theme, 0.05, 0.02));\\n $underline-color: mat-color($foreground, divider, if($is-dark-theme, 0.5, 0.42));\\n $label-disabled-color: mat-color($foreground, disabled-text);\\n\\n .mat-form-field-appearance-fill {\\n .mat-form-field-flex {\\n background-color: $fill-background;\\n }\\n\\n &.mat-form-field-disabled .mat-form-field-flex {\\n background-color: $fill-disabled-background;\\n }\\n\\n .mat-form-field-underline::before {\\n background-color: $underline-color;\\n }\\n\\n &.mat-form-field-disabled {\\n .mat-form-field-label {\\n color: $label-disabled-color;\\n }\\n\\n .mat-form-field-underline::before {\\n background-color: transparent;\\n }\\n }\\n }\\n}\\n\\n// Used to make instances of the _mat-form-field-label-floating mixin negligibly different,\\n// and prevent Google's CSS Optimizer from collapsing the declarations. This is needed because some\\n// of the selectors contain pseudo-classes not recognized in all browsers. If a browser encounters\\n// an unknown pseudo-class it will discard the entire rule set.\\n$mat-form-field-fill-dedupe: 0;\\n\\n// Applies a floating label above the form field control itself.\\n@mixin _mat-form-field-fill-label-floating($font-scale, $infix-padding, $infix-margin-top) {\\n transform: translateY(-$infix-margin-top - $infix-padding + $mat-form-field-fill-dedupe)\\n scale($font-scale);\\n width: 100% / $font-scale + $mat-form-field-fill-dedupe;\\n\\n $mat-form-field-fill-dedupe: $mat-form-field-fill-dedupe + 0.00001 !global;\\n}\\n\\n@mixin mat-form-field-fill-typography($config) {\\n // The unit-less line-height from the font config.\\n $line-height: mat-line-height($config, input);\\n // The amount to scale the font for the floating label and subscript.\\n $subscript-font-scale: 0.75;\\n // The padding on top of the infix.\\n $infix-padding-top: 0.25em;\\n // The padding below the infix.\\n $infix-padding-bottom: 0.75em;\\n // The margin applied to the form-field-infix to reserve space for the floating label.\\n $infix-margin-top: 1em * $line-height * $subscript-font-scale;\\n // The amount we offset the label from the input text in the fill appearance.\\n $fill-appearance-label-offset: -0.5em;\\n\\n .mat-form-field-appearance-fill {\\n .mat-form-field-infix {\\n padding: $infix-padding-top 0 $infix-padding-bottom 0;\\n }\\n\\n .mat-form-field-label {\\n top: $infix-margin-top + $infix-padding-top;\\n margin-top: $fill-appearance-label-offset;\\n }\\n\\n &.mat-form-field-can-float {\\n &.mat-form-field-should-float .mat-form-field-label,\\n .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\\n @include _mat-form-field-fill-label-floating(\\n $subscript-font-scale, $infix-padding-top + $fill-appearance-label-offset,\\n $infix-margin-top);\\n }\\n\\n // Server-side rendered matInput with a label attribute but label not shown\\n // (used as a pure CSS stand-in for mat-form-field-should-float).\\n .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper\\n .mat-form-field-label {\\n @include _mat-form-field-fill-label-floating(\\n $subscript-font-scale, $infix-padding-top + $fill-appearance-label-offset,\\n $infix-margin-top);\\n }\\n }\\n }\\n}\\n\\n\\n\\n\\n\\n\\n\\n// Theme styles that only apply to the legacy appearance of the form-field.\\n\\n@mixin mat-form-field-legacy-theme($theme) {\\n $foreground: map-get($theme, foreground);\\n $is-dark-theme: map-get($theme, is-dark);\\n\\n $label-color: mat-color($foreground, secondary-text);\\n $underline-color: mat-color($foreground, divider, if($is-dark-theme, 0.7, 0.42));\\n\\n .mat-form-field-appearance-legacy {\\n .mat-form-field-label {\\n color: $label-color;\\n }\\n\\n .mat-hint {\\n color: $label-color;\\n }\\n\\n .mat-form-field-underline {\\n background-color: $underline-color;\\n }\\n\\n &.mat-form-field-disabled .mat-form-field-underline {\\n @include mat-control-disabled-underline($underline-color);\\n }\\n }\\n}\\n\\n// Used to make instances of the _mat-form-field-label-floating mixin negligibly different,\\n// and prevent Google's CSS Optimizer from collapsing the declarations. This is needed because some\\n// of the selectors contain pseudo-classes not recognized in all browsers. If a browser encounters\\n// an unknown pseudo-class it will discard the entire rule set.\\n$mat-form-field-legacy-dedupe: 0;\\n\\n// Applies a floating label above the form field control itself.\\n@mixin _mat-form-field-legacy-label-floating($font-scale, $infix-padding, $infix-margin-top) {\\n // We use perspective to fix the text blurriness as described here:\\n // http://www.useragentman.com/blog/2014/05/04/fixing-typography-inside-of-2-d-css-transforms/\\n // This results in a small jitter after the label floats on Firefox, which the\\n // translateZ fixes.\\n transform: translateY(-$infix-margin-top - $infix-padding) scale($font-scale) perspective(100px)\\n translateZ(0.001px + $mat-form-field-legacy-dedupe);\\n // The tricks above used to smooth out the animation on chrome and firefox actually make things\\n // worse on IE, so we don't include them in the IE version.\\n -ms-transform: translateY(-$infix-margin-top - $infix-padding + $mat-form-field-legacy-dedupe)\\n scale($font-scale);\\n\\n width: 100% / $font-scale + $mat-form-field-legacy-dedupe;\\n\\n $mat-form-field-legacy-dedupe: $mat-form-field-legacy-dedupe + 0.00001 !global;\\n}\\n\\n// Same as mixin above, but omits the translateZ for printing purposes.\\n@mixin _mat-form-field-legacy-label-floating-print($font-scale, $infix-padding, $infix-margin-top) {\\n // This results in a small jitter after the label floats on Firefox, which the\\n // translateZ fixes.\\n transform: translateY(-$infix-margin-top - $infix-padding + $mat-form-field-legacy-dedupe)\\n scale($font-scale);\\n // The tricks above used to smooth out the animation on chrome and firefox actually make things\\n // worse on IE, so we don't include them in the IE version.\\n $mat-form-field-legacy-dedupe: $mat-form-field-legacy-dedupe + 0.00001 !global;\\n}\\n\\n@mixin mat-form-field-legacy-typography($config) {\\n // The unit-less line-height from the font config.\\n $line-height: mat-line-height($config, input);\\n // The amount to scale the font for the floating label and subscript.\\n $subscript-font-scale: 0.75;\\n // The amount of space between the top of the line and the top of the actual text\\n // (as a fraction of the font-size).\\n $line-spacing: ($line-height - 1) / 2;\\n // The padding on the infix. Mocks show half of the text size, but seem to measure from the edge\\n // of the text itself, not the edge of the line; therefore we subtract off the line spacing.\\n $infix-padding: 0.5em - $line-spacing;\\n // The margin applied to the form-field-infix to reserve space for the floating label.\\n $infix-margin-top: 1em * $line-height * $subscript-font-scale;\\n // The space between the bottom of the .mat-form-field-flex area and the subscript wrapper.\\n // Mocks show half of the text size, but this margin is applied to an element with the subscript\\n // text font size, so we need to divide by the scale factor to make it half of the original text\\n // size. We again need to subtract off the line spacing since the mocks measure to the edge of the\\n // text, not the edge of the line.\\n $subscript-margin-top: 0.5em / $subscript-font-scale - ($line-spacing * 2);\\n // The padding applied to the form-field-wrapper to reserve space for the subscript, since it's\\n // absolutely positioned. This is a combination of the subscript's margin and line-height, but we\\n // need to multiply by the subscript font scale factor since the wrapper has a larger font size.\\n $wrapper-padding-bottom: ($subscript-margin-top + $line-height) * $subscript-font-scale;\\n\\n .mat-form-field-appearance-legacy {\\n .mat-form-field-wrapper {\\n padding-bottom: $wrapper-padding-bottom;\\n }\\n\\n .mat-form-field-infix {\\n padding: $infix-padding 0;\\n }\\n\\n &.mat-form-field-can-float {\\n &.mat-form-field-should-float .mat-form-field-label,\\n .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\\n @include _mat-form-field-legacy-label-floating(\\n $subscript-font-scale, $infix-padding, $infix-margin-top);\\n }\\n\\n // @breaking-change 8.0.0 will rely on AutofillMonitor instead.\\n .mat-form-field-autofill-control:-webkit-autofill + .mat-form-field-label-wrapper\\n .mat-form-field-label {\\n @include _mat-form-field-legacy-label-floating(\\n $subscript-font-scale, $infix-padding, $infix-margin-top);\\n }\\n\\n // Server-side rendered matInput with a label attribute but label not shown\\n // (used as a pure CSS stand-in for mat-form-field-should-float).\\n .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper\\n .mat-form-field-label {\\n @include _mat-form-field-legacy-label-floating(\\n $subscript-font-scale, $infix-padding, $infix-margin-top);\\n }\\n }\\n\\n .mat-form-field-label {\\n top: $infix-margin-top + $infix-padding;\\n }\\n\\n .mat-form-field-underline {\\n // We want the underline to start at the end of the content box, not the padding box,\\n // so we move it up by the padding amount.\\n bottom: $wrapper-padding-bottom;\\n }\\n\\n .mat-form-field-subscript-wrapper {\\n margin-top: $subscript-margin-top;\\n\\n // We want the subscript to start at the end of the content box, not the padding box,\\n // so we move it up by the padding amount (adjusted for the smaller font size);\\n top: calc(100% - #{$wrapper-padding-bottom / $subscript-font-scale});\\n }\\n }\\n\\n // translateZ causes the label to not appear while printing, so we override it to not\\n // apply translateZ while printing\\n @media print {\\n .mat-form-field-appearance-legacy {\\n &.mat-form-field-can-float {\\n &.mat-form-field-should-float .mat-form-field-label,\\n .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\\n @include _mat-form-field-legacy-label-floating-print(\\n $subscript-font-scale, $infix-padding, $infix-margin-top);\\n }\\n\\n // @breaking-change 8.0.0 will rely on AutofillMonitor instead.\\n .mat-form-field-autofill-control:-webkit-autofill + .mat-form-field-label-wrapper\\n .mat-form-field-label {\\n @include _mat-form-field-legacy-label-floating-print(\\n $subscript-font-scale, $infix-padding, $infix-margin-top);\\n }\\n\\n // Server-side rendered matInput with a label attribute but label not shown\\n // (used as a pure CSS stand-in for mat-form-field-should-float).\\n .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper\\n .mat-form-field-label {\\n @include _mat-form-field-legacy-label-floating-print(\\n $subscript-font-scale, $infix-padding, $infix-margin-top);\\n }\\n }\\n }\\n }\\n}\\n\\n\\n\\n\\n\\n\\n\\n// Theme styles that only apply to the outline appearance of the form-field.\\n\\n@mixin mat-form-field-outline-theme($theme) {\\n $primary: map-get($theme, primary);\\n $accent: map-get($theme, accent);\\n $warn: map-get($theme, warn);\\n $foreground: map-get($theme, foreground);\\n $is-dark-theme: map-get($theme, is-dark);\\n\\n $label-disabled-color: mat-color($foreground, disabled-text);\\n $outline-color: mat-color($foreground, divider, if($is-dark-theme, 0.3, 0.12));\\n $outline-color-hover: mat-color($foreground, divider, if($is-dark-theme, 1, 0.87));\\n $outline-color-primary: mat-color($primary);\\n $outline-color-accent: mat-color($accent);\\n $outline-color-warn: mat-color($warn);\\n $outline-color-disabled: mat-color($foreground, divider, if($is-dark-theme, 0.15, 0.06));\\n\\n .mat-form-field-appearance-outline {\\n .mat-form-field-outline {\\n color: $outline-color;\\n }\\n\\n .mat-form-field-outline-thick {\\n color: $outline-color-hover;\\n }\\n\\n &.mat-focused {\\n .mat-form-field-outline-thick {\\n color: $outline-color-primary;\\n }\\n\\n &.mat-accent .mat-form-field-outline-thick {\\n color: $outline-color-accent;\\n }\\n\\n &.mat-warn .mat-form-field-outline-thick {\\n color: $outline-color-warn;\\n }\\n }\\n\\n // Class repeated so that rule is specific enough to override focused accent color case.\\n &.mat-form-field-invalid.mat-form-field-invalid {\\n .mat-form-field-outline-thick {\\n color: $outline-color-warn;\\n }\\n }\\n\\n &.mat-form-field-disabled {\\n .mat-form-field-label {\\n color: $label-disabled-color;\\n }\\n\\n .mat-form-field-outline {\\n color: $outline-color-disabled;\\n }\\n }\\n }\\n}\\n\\n// Used to make instances of the _mat-form-field-label-floating mixin negligibly different,\\n// and prevent Google's CSS Optimizer from collapsing the declarations. This is needed because some\\n// of the selectors contain pseudo-classes not recognized in all browsers. If a browser encounters\\n// an unknown pseudo-class it will discard the entire rule set.\\n$mat-form-field-outline-dedupe: 0;\\n\\n// Applies a floating label above the form field control itself.\\n@mixin _mat-form-field-outline-label-floating($font-scale, $infix-padding, $infix-margin-top) {\\n transform: translateY(-$infix-margin-top - $infix-padding + $mat-form-field-outline-dedupe)\\n scale($font-scale);\\n width: 100% / $font-scale + $mat-form-field-outline-dedupe;\\n\\n $mat-form-field-outline-dedupe: $mat-form-field-outline-dedupe + 0.00001 !global;\\n}\\n\\n@mixin mat-form-field-outline-typography($config) {\\n // The unit-less line-height from the font config.\\n $line-height: mat-line-height($config, input);\\n // The amount to scale the font for the floating label and subscript.\\n $subscript-font-scale: 0.75;\\n // The padding above and below the infix.\\n $infix-padding: 1em;\\n // The margin applied to the form-field-infix to reserve space for the floating label.\\n $infix-margin-top: 1em * $line-height * $subscript-font-scale;\\n // The space between the bottom of the .mat-form-field-flex area and the subscript wrapper.\\n // Mocks show half of the text size, but this margin is applied to an element with the subscript\\n // text font size, so we need to divide by the scale factor to make it half of the original text\\n // size.\\n $subscript-margin-top: 0.5em / $subscript-font-scale;\\n // The padding applied to the form-field-wrapper to reserve space for the subscript, since it's\\n // absolutely positioned. This is a combination of the subscript's margin and line-height, but we\\n // need to multiply by the subscript font scale factor since the wrapper has a larger font size.\\n $wrapper-padding-bottom: ($subscript-margin-top + $line-height) * $subscript-font-scale;\\n // The amount we offset the label from the input text in the outline appearance.\\n $outline-appearance-label-offset: -0.25em;\\n\\n .mat-form-field-appearance-outline {\\n .mat-form-field-infix {\\n padding: $infix-padding 0 $infix-padding 0;\\n }\\n\\n .mat-form-field-label {\\n top: $infix-margin-top + $infix-padding;\\n margin-top: $outline-appearance-label-offset;\\n }\\n\\n &.mat-form-field-can-float {\\n &.mat-form-field-should-float .mat-form-field-label,\\n .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\\n @include _mat-form-field-outline-label-floating(\\n $subscript-font-scale, $infix-padding + $outline-appearance-label-offset,\\n $infix-margin-top);\\n }\\n\\n // Server-side rendered matInput with a label attribute but label not shown\\n // (used as a pure CSS stand-in for mat-form-field-should-float).\\n .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper\\n .mat-form-field-label {\\n @include _mat-form-field-outline-label-floating(\\n $subscript-font-scale, $infix-padding + $outline-appearance-label-offset,\\n $infix-margin-top);\\n }\\n }\\n }\\n}\\n\\n\\n\\n\\n\\n\\n\\n// Theme styles that only apply to the standard appearance of the form-field.\\n\\n@mixin mat-form-field-standard-theme($theme) {\\n $foreground: map-get($theme, foreground);\\n $is-dark-theme: map-get($theme, is-dark);\\n\\n $underline-color: mat-color($foreground, divider, if($is-dark-theme, 0.7, 0.42));\\n\\n .mat-form-field-appearance-standard {\\n .mat-form-field-underline {\\n background-color: $underline-color;\\n }\\n\\n &.mat-form-field-disabled .mat-form-field-underline {\\n @include mat-control-disabled-underline($underline-color);\\n }\\n }\\n}\\n\\n@mixin mat-form-field-standard-typography($config) {}\\n\\n\\n// Theme styles that apply to all appearances of the form-field.\\n@mixin mat-form-field-theme($theme) {\\n $primary: map-get($theme, primary);\\n $accent: map-get($theme, accent);\\n $warn: map-get($theme, warn);\\n $background: map-get($theme, background);\\n $foreground: map-get($theme, foreground);\\n $is-dark-theme: map-get($theme, is-dark);\\n\\n // Label colors. Required is used for the `*` star shown in the label.\\n $label-color: mat-color($foreground, secondary-text, if($is-dark-theme, 0.7, 0.6));\\n $focused-label-color: mat-color($primary, text);\\n $required-label-color: mat-color($accent, text);\\n\\n // Underline colors.\\n $underline-color-base: mat-color($foreground, divider, if($is-dark-theme, 1, 0.87));\\n $underline-color-accent: mat-color($accent, text);\\n $underline-color-warn: mat-color($warn, text);\\n $underline-focused-color: mat-color($primary, text);\\n\\n .mat-form-field-label {\\n color: $label-color;\\n }\\n\\n .mat-hint {\\n color: $label-color;\\n }\\n\\n .mat-form-field.mat-focused .mat-form-field-label {\\n color: $focused-label-color;\\n\\n &.mat-accent {\\n color: $underline-color-accent;\\n }\\n\\n &.mat-warn {\\n color: $underline-color-warn;\\n }\\n }\\n\\n .mat-focused .mat-form-field-required-marker {\\n color: $required-label-color;\\n }\\n\\n .mat-form-field-ripple {\\n background-color: $underline-color-base;\\n }\\n\\n .mat-form-field.mat-focused {\\n .mat-form-field-ripple {\\n background-color: $underline-focused-color;\\n\\n &.mat-accent {\\n background-color: $underline-color-accent;\\n }\\n\\n &.mat-warn {\\n background-color: $underline-color-warn;\\n }\\n }\\n }\\n\\n .mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid) {\\n .mat-form-field-infix::after {\\n color: $underline-focused-color;\\n }\\n\\n &.mat-accent .mat-form-field-infix::after {\\n color: $underline-color-accent;\\n }\\n\\n &.mat-warn .mat-form-field-infix::after {\\n color: $underline-color-warn;\\n }\\n }\\n\\n // Styling for the error state of the form field. Note that while the same can be\\n // achieved with the ng-* classes, we use this approach in order to ensure that the same\\n // logic is used to style the error state and to show the error messages.\\n .mat-form-field.mat-form-field-invalid {\\n .mat-form-field-label {\\n color: $underline-color-warn;\\n\\n &.mat-accent,\\n .mat-form-field-required-marker {\\n color: $underline-color-warn;\\n }\\n }\\n\\n .mat-form-field-ripple,\\n .mat-form-field-ripple.mat-accent {\\n background-color: $underline-color-warn;\\n }\\n }\\n\\n .mat-error {\\n color: $underline-color-warn;\\n }\\n\\n @include mat-form-field-legacy-theme($theme);\\n @include mat-form-field-standard-theme($theme);\\n @include mat-form-field-fill-theme($theme);\\n @include mat-form-field-outline-theme($theme);\\n}\\n\\n// Used to make instances of the _mat-form-field-label-floating mixin negligibly different,\\n// and prevent Google's CSS Optimizer from collapsing the declarations. This is needed because some\\n// of the selectors contain pseudo-classes not recognized in all browsers. If a browser encounters\\n// an unknown pseudo-class it will discard the entire rule set.\\n$mat-form-field-dedupe: 0;\\n\\n// Applies a floating label above the form field control itself.\\n@mixin _mat-form-field-label-floating($font-scale, $infix-padding, $infix-margin-top) {\\n transform: translateY(-$infix-margin-top - $infix-padding + $mat-form-field-dedupe)\\n scale($font-scale);\\n width: 100% / $font-scale + $mat-form-field-dedupe;\\n\\n $mat-form-field-dedupe: $mat-form-field-dedupe + 0.00001 !global;\\n}\\n\\n@mixin mat-form-field-typography($config) {\\n // The unit-less line-height from the font config.\\n $line-height: mat-line-height($config, input);\\n\\n // The amount to scale the font for the floating label and subscript.\\n $subscript-font-scale: 0.75;\\n // The amount to scale the font for the prefix and suffix icons.\\n $prefix-suffix-icon-font-scale: 1.5;\\n\\n // The padding on the infix. Mocks show half of the text size.\\n $infix-padding: 0.5em;\\n // The margin applied to the form-field-infix to reserve space for the floating label.\\n $infix-margin-top: 1em * $line-height * $subscript-font-scale;\\n // Font size to use for the label and subscript text.\\n $subscript-font-size: $subscript-font-scale * 100%;\\n // Font size to use for the for the prefix and suffix icons.\\n $prefix-suffix-icon-font-size: $prefix-suffix-icon-font-scale * 100%;\\n // The space between the bottom of the .mat-form-field-flex area and the subscript wrapper.\\n // Mocks show half of the text size, but this margin is applied to an element with the subscript\\n // text font size, so we need to divide by the scale factor to make it half of the original text\\n // size.\\n $subscript-margin-top: 0.5em / $subscript-font-scale;\\n // The padding applied to the form-field-wrapper to reserve space for the subscript, since it's\\n // absolutely positioned. This is a combination of the subscript's margin and line-height, but we\\n // need to multiply by the subscript font scale factor since the wrapper has a larger font size.\\n $wrapper-padding-bottom: ($subscript-margin-top + $line-height) * $subscript-font-scale;\\n\\n .mat-form-field {\\n @include mat-typography-level-to-styles($config, input);\\n }\\n\\n .mat-form-field-wrapper {\\n padding-bottom: $wrapper-padding-bottom;\\n }\\n\\n .mat-form-field-prefix,\\n .mat-form-field-suffix {\\n // Allow icons in a prefix or suffix to adapt to the correct size.\\n .mat-icon {\\n font-size: $prefix-suffix-icon-font-size;\\n line-height: $line-height;\\n }\\n\\n // Allow icon buttons in a prefix or suffix to adapt to the correct size.\\n .mat-icon-button {\\n height: $prefix-suffix-icon-font-scale * 1em;\\n width: $prefix-suffix-icon-font-scale * 1em;\\n\\n .mat-icon {\\n height: $line-height * 1em;\\n line-height: $line-height;\\n }\\n }\\n }\\n\\n .mat-form-field-infix {\\n padding: $infix-padding 0;\\n // Throws off the baseline if we do it as a real margin, so we do it as a border instead.\\n border-top: $infix-margin-top solid transparent;\\n }\\n\\n .mat-form-field-can-float {\\n &.mat-form-field-should-float .mat-form-field-label,\\n .mat-input-server:focus + .mat-form-field-label-wrapper .mat-form-field-label {\\n @include _mat-form-field-label-floating(\\n $subscript-font-scale, $infix-padding, $infix-margin-top);\\n }\\n\\n // Server-side rendered matInput with a label attribute but label not shown\\n // (used as a pure CSS stand-in for mat-form-field-should-float).\\n .mat-input-server[label]:not(:label-shown) + .mat-form-field-label-wrapper\\n .mat-form-field-label {\\n @include _mat-form-field-label-floating(\\n $subscript-font-scale, $infix-padding, $infix-margin-top);\\n }\\n }\\n\\n .mat-form-field-label-wrapper {\\n top: -$infix-margin-top;\\n padding-top: $infix-margin-top;\\n }\\n\\n .mat-form-field-label {\\n top: $infix-margin-top + $infix-padding;\\n }\\n\\n .mat-form-field-underline {\\n // We want the underline to start at the end of the content box, not the padding box,\\n // so we move it up by the padding amount.\\n bottom: $wrapper-padding-bottom;\\n }\\n\\n .mat-form-field-subscript-wrapper {\\n font-size: $subscript-font-size;\\n margin-top: $subscript-margin-top;\\n\\n // We want the subscript to start at the end of the content box, not the padding box,\\n // so we move it up by the padding amount (adjusted for the smaller font size);\\n top: calc(100% - #{$wrapper-padding-bottom / $subscript-font-scale});\\n }\\n\\n @include mat-form-field-legacy-typography($config);\\n @include mat-form-field-standard-typography($config);\\n @include mat-form-field-fill-typography($config);\\n @include mat-form-field-outline-typography($config);\\n}\\n\\n\\n\\n\\n\\n@mixin mat-tree-theme($theme) {\\n $background: map-get($theme, background);\\n $foreground: map-get($theme, foreground);\\n\\n .mat-tree {\\n background: mat-color($background, 'card');\\n }\\n\\n .mat-tree-node,\\n .mat-nested-tree-node {\\n color: mat-color($foreground, text);\\n }\\n}\\n\\n@mixin mat-tree-typography($config) {\\n .mat-tree {\\n font-family: mat-font-family($config);\\n }\\n\\n .mat-tree-node,\\n .mat-nested-tree-node {\\n font-weight: mat-font-weight($config, body-1);\\n font-size: mat-font-size($config, body-1);\\n }\\n}\\n\\n\\n\\n// Includes all of the typographic styles.\\n@mixin angular-material-typography($config: null) {\\n @if $config == null {\\n $config: mat-typography-config();\\n }\\n\\n @include mat-badge-typography($config);\\n @include mat-base-typography($config);\\n @include mat-autocomplete-typography($config);\\n @include mat-bottom-sheet-typography($config);\\n @include mat-button-typography($config);\\n @include mat-button-toggle-typography($config);\\n @include mat-card-typography($config);\\n @include mat-checkbox-typography($config);\\n @include mat-chips-typography($config);\\n @include mat-table-typography($config);\\n @include mat-datepicker-typography($config);\\n @include mat-dialog-typography($config);\\n @include mat-expansion-panel-typography($config);\\n @include mat-form-field-typography($config);\\n @include mat-grid-list-typography($config);\\n @include mat-icon-typography($config);\\n @include mat-input-typography($config);\\n @include mat-menu-typography($config);\\n @include mat-paginator-typography($config);\\n @include mat-progress-bar-typography($config);\\n @include mat-progress-spinner-typography($config);\\n @include mat-radio-typography($config);\\n @include mat-select-typography($config);\\n @include mat-sidenav-typography($config);\\n @include mat-slide-toggle-typography($config);\\n @include mat-slider-typography($config);\\n @include mat-stepper-typography($config);\\n @include mat-sort-typography($config);\\n @include mat-tabs-typography($config);\\n @include mat-toolbar-typography($config);\\n @include mat-tooltip-typography($config);\\n @include mat-list-typography($config);\\n @include mat-option-typography($config);\\n @include mat-optgroup-typography($config);\\n @include mat-snack-bar-typography($config);\\n @include mat-tree-typography($config);\\n}\\n\\n\\n// Mixin that renders all of the core styles that are not theme-dependent.\\n@mixin mat-core($typography-config: null) {\\n @include angular-material-typography($typography-config);\\n @include mat-ripple();\\n @include cdk-a11y();\\n @include cdk-overlay();\\n @include cdk-text-field();\\n}\\n\\n// Mixin that renders all of the core styles that depend on the theme.\\n@mixin mat-core-theme($theme) {\\n @include mat-ripple-theme($theme);\\n @include mat-option-theme($theme);\\n @include mat-optgroup-theme($theme);\\n @include mat-pseudo-checkbox-theme($theme);\\n\\n // Provides external CSS classes for each elevation value. Each CSS class is formatted as\\n // `mat-elevation-z$zValue` where `$zValue` corresponds to the z-space to which the element is\\n // elevated.\\n @for $zValue from 0 through 24 {\\n .#{$_mat-elevation-prefix}#{$zValue} {\\n @include _mat-theme-elevation($zValue, $theme);\\n }\\n }\\n\\n // Wrapper element that provides the theme background when the user's content isn't\\n // inside of a `mat-sidenav-container`. Note that we need to exclude the ampersand\\n // selector in case the mixin is included at the top level.\\n .mat-app-background#{if(&, ', &.mat-app-background', '')} {\\n $background: map-get($theme, background);\\n $foreground: map-get($theme, foreground);\\n\\n background-color: mat-color($background, background);\\n color: mat-color($foreground, text);\\n }\\n\\n // Marker that is used to determine whether the user has added a theme to their page.\\n @at-root {\\n .mat-theme-loaded-marker {\\n display: none;\\n }\\n }\\n}\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n@mixin mat-divider-theme($theme) {\\n $foreground: map-get($theme, foreground);\\n\\n .mat-divider {\\n border-top-color: mat-color($foreground, divider);\\n }\\n\\n .mat-divider-vertical {\\n border-right-color: mat-color($foreground, divider);\\n }\\n}\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n// Create a theme.\\n@mixin angular-material-theme($theme) {\\n @include mat-core-theme($theme);\\n @include mat-autocomplete-theme($theme);\\n @include mat-badge-theme($theme);\\n @include mat-bottom-sheet-theme($theme);\\n @include mat-button-theme($theme);\\n @include mat-button-toggle-theme($theme);\\n @include mat-card-theme($theme);\\n @include mat-checkbox-theme($theme);\\n @include mat-chips-theme($theme);\\n @include mat-table-theme($theme);\\n @include mat-datepicker-theme($theme);\\n @include mat-dialog-theme($theme);\\n @include mat-divider-theme($theme);\\n @include mat-expansion-panel-theme($theme);\\n @include mat-form-field-theme($theme);\\n @include mat-grid-list-theme($theme);\\n @include mat-icon-theme($theme);\\n @include mat-input-theme($theme);\\n @include mat-list-theme($theme);\\n @include mat-menu-theme($theme);\\n @include mat-paginator-theme($theme);\\n @include mat-progress-bar-theme($theme);\\n @include mat-progress-spinner-theme($theme);\\n @include mat-radio-theme($theme);\\n @include mat-select-theme($theme);\\n @include mat-sidenav-theme($theme);\\n @include mat-slide-toggle-theme($theme);\\n @include mat-slider-theme($theme);\\n @include mat-stepper-theme($theme);\\n @include mat-sort-theme($theme);\\n @include mat-tabs-theme($theme);\\n @include mat-toolbar-theme($theme);\\n @include mat-tooltip-theme($theme);\\n @include mat-tree-theme($theme);\\n @include mat-snack-bar-theme($theme);\\n}\\n\",\"/*=======================*\\\\\\n|| MDS Colours ||\\n\\\\*=======================*/\\n\\n$color-brand-electric-blue: #2251ff;\\n$color-brand-deep-blue: #051c2c;\\n$color-brand-cyan: #00a9f4;\\n\\n/*=======================*\\\\\\n|| Application Colours ||\\n\\\\*=======================*/\\n\\n$font-dark: #000;\\n$font-light: #fff;\\n\\n$success: #43a047;\\n$success-light: lighten($success, 10);\\n$success-dark: darken($success, 10);\\n$green1: #219653;\\n\\n$pending: #ffb300;\\n$pending-light: lighten($pending, 10);\\n$pending-dark: darken($pending, 10);\\n\\n$error: #e53935;\\n$error-light: lighten($error, 10);\\n$error-dark: darken($error, 10);\\n\\n$color-primary: #1937ea;\\n$color-primary-light: lighten($color-primary, 10);\\n$color-primary-dark: darken($color-primary, 10);\\n\\n$color-secondary: #4285F4;\\n$color-secondary-light: lighten($color-secondary, 10);\\n$color-secondary-dark: darken($color-secondary, 10);\\n\\n$background: #f0f0f0;\\n$footer-back: #263238;\\n$header-back: linear-gradient(to right, #051C2C, #051C2C 40%, #0B2453 60%, #1F40E6 100%);\\n\\n$color-ternary: #051c2c;\\n\\n/*===========*\\\\\\n|| Fonts ||\\n\\\\*===========*/\\n\\n$font-stack: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n\\n$heading-font: \\\"LarishMcKinsey\\\", 'Georgia', serif;\\n$font: $font-stack;\\n\\n$font-family-primary: \\\"McKinsey Sans\\\", \\\"Helvetica Neue\\\", Calibri, Corbel, Helvetica, Roboto, Droid, sans-serif;\\n$font-family-secondary: \\\"Bower\\\", Georgia, \\\"Times New Roman\\\" serif;\\n\\n$base-size: 16px;\\n$tablet-size: 16px;\\n$mobile-size: 16px;\\n\\n/*===================*\\\\\\n|| Media Queries ||\\n\\\\*===================*/\\n\\n$break-mobile: 450px;\\n$break-tablet: 800px;\\n$break-laptop: 1024px;\\n\\n$break-landscape-mobile: 800px;\\n$break-landscape-tablet: 1048px;\\n$break-landscape-laptop: 1280px;\\n\",\"@import './variables';\\n\\n@mixin hide-text-overflow {\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n}\\n\\n@mixin box-shadow($color: #000, $depth: 1) {\\n box-shadow: 0 1px 3px 1px * ($depth - 1) rgba(#000, .2),\\n 0 1px 1px 0 rgba(#000, .14),\\n 0 2px 1px -1px rgba(#000, .12);\\n}\\n\\n/*===================*\\\\\\n|| Media Queries ||\\n\\\\*===================*/\\n\\n@mixin respond-to($media) {\\n @if $media == mobile {\\n @media only screen and (orientation: portrait) and (max-width: $break-mobile) {\\n @content;\\n }\\n @media only screen and (orientation: landscape) and (max-width: $break-landscape-mobile) {\\n @content;\\n }\\n } @else if $media == mobile-landscape {\\n @media only screen and (orientation: landscape) and (max-width: $break-landscape-mobile) {\\n @content;\\n }\\n } @else if $media == mobile-portrait {\\n @media only screen and (orientation: portrait) and (max-width: $break-mobile) {\\n @content;\\n }\\n } @else if $media == not-mobile {\\n @media only screen and (orientation: portrait) and (min-width: $break-mobile + 1) {\\n @content;\\n }\\n @media only screen and (orientation: landscape) and (min-width: $break-landscape-mobile + 1) {\\n @content;\\n }\\n } @else if $media == laptop {\\n @media only screen and (orientation: portrait) and (min-width: $break-tablet + 1) and (max-width: $break-laptop) {\\n @content;\\n }\\n @media only screen and (orientation: landscape) and (min-width: $break-landscape-tablet + 1) and (max-width: $break-landscape-laptop) {\\n @content;\\n }\\n } @else if $media == laptop-landscape {\\n @media only screen and (orientation: landscape) and (min-width: $break-landscape-tablet + 1) and (max-width: $break-landscape-laptop) {\\n @content;\\n }\\n } @else if $media == laptop-portrait {\\n @media only screen and (orientation: portrait) and (min-width: $break-tablet + 1) and (max-width: $break-laptop) {\\n @content;\\n }\\n } @else if $media == lat {\\n @media only screen and (orientation: portrait) and (min-width: $break-mobile + 1) and (max-width: $break-tablet) {\\n @content;\\n }\\n @media only screen and (orientation: landscape) and (min-width: $break-landscape-mobile + 1) and (max-width: $break-landscape-tablet) {\\n @content;\\n }\\n } @else if $media == tablet {\\n @media only screen and (orientation: portrait) and (min-width: $break-mobile + 1) and (max-width: $break-tablet) {\\n @content;\\n }\\n @media only screen and (orientation: landscape) and (min-width: $break-landscape-mobile + 1) and (max-width: $break-landscape-tablet) {\\n @content;\\n }\\n } @else if $media == tablet-landscape {\\n @media only screen and (orientation: landscape) and (min-width: $break-landscape-mobile + 1) and (max-width: $break-landscape-tablet) {\\n @content;\\n }\\n } @else if $media == tablet-portrait {\\n @media only screen and (orientation: portrait) and (min-width: $break-mobile + 1) and (max-width: $break-tablet) {\\n @content;\\n }\\n } @else if ($media == tablet-mobile or $media == not-desktop) {\\n @media only screen and (orientation: portrait) and (max-width: $break-tablet) {\\n @content;\\n }\\n @media only screen and (orientation: landscape) and (max-width: $break-landscape-tablet) {\\n @content;\\n }\\n }@else if $media == tablet-landscape {\\n @media only screen and (orientation: landscape) and (min-width: $break-landscape-mobile + 1) and (max-width: $break-landscape-tablet) {\\n @content;\\n }\\n } @else if $media == tablet-portrait {\\n @media only screen and (orientation: portrait) and (min-width: $break-mobile + 1) and (max-width: $break-tablet) {\\n @content;\\n }\\n } @else if ($media == tablet-mobile or $media == not-desktop) {\\n @media only screen and (orientation: portrait) and (max-width: $break-tablet) {\\n @content;\\n }\\n @media only screen and (orientation: landscape) and (max-width: $break-landscape-tablet) {\\n @content;\\n }\\n } @else if $media == desktop {\\n @media only screen and (orientation: portrait) and (min-width: $break-tablet) {\\n @content;\\n }\\n @media only screen and (orientation: landscape) and (min-width: $break-landscape-tablet) {\\n @content;\\n }\\n } @else if $media == desktop-landscape {\\n @media only screen and (orientation: landscape) and (min-width: $break-landscape-tablet) {\\n @content;\\n }\\n } @else if $media == desktop-portrait {\\n @media only screen and (orientation: portrait) and (min-width: $break-tablet) {\\n @content;\\n }\\n } @else if $media == landscape {\\n @media only screen and (orientation: landscape) {\\n @content;\\n }\\n } @else if $media == portrait {\\n @media only screen and (orientation: portrait) {\\n @content;\\n }\\n }\\n}\\n\",\"$primary: #1F40E6;\\n$form-label: #051C2C;\\n$secondary-label: #767676;\\n$border: #B3B3B3;\\n$background-checkbox-disabled: #D0D0D0;\\n$chip-color: #333333;\\n$placeholder-color: #7F7F7F;\\n$background-color: #F0F0F0;\\n$page-background-color: #F8F9FA;\\n$selected-option: #E6E6E6;\\n$color-brand-yellow: #ffd048;\\n$light-yellow: #fff3ce;\\n$coachmark-text: #6f4d00;\\n$error-color: #E12E40;\\n$no-filters-color: #BCBCBC;\\n$results-list-background-color: #F4F4F4;\\n$primary-highlight: #2251FF;\\n$scrollbar-color: #757575;\\n\\n$available-color: #5D9D52;\\n$available-by-request-color: #F5B53F;\\n$in-use-color: #D4483E;\\n$not-bookable-color: #CCCCCC;\\n\\n$modal-body-heading: #4D4D4D;\\n$alert-overlay-bg: rgba(5, 28, 44, 0.85);\\n\\n$success: #43a047;\\n$success-light: lighten($success, 10);\\n$success-dark: darken($success, 10);\\n\\n$pending: #ffb300;\\n$pending-light: lighten($pending, 10);\\n$pending-dark: darken($pending, 10);\\n\\n$error: #e53935;\\n$error-light: lighten($error, 10);\\n$error-dark: darken($error, 10);\\n\\n$coachmark-bg: #EBEBF6;\\n$coachmark-dark-text: #1B1B19;\\n$error-text: #fff;\\n\\n/**\\n * Spacing\\n */\\n\\n// 4px\\n$spacing-smallest: 0.25rem;\\n\\n// 8px\\n$spacing-xxsmall: 0.5rem;\\n\\n// 12px\\n$spacing-xsmall: 0.75rem;\\n\\n// 16px\\n$spacing-small: 1rem;\\n\\n// 20px\\n$spacing-small-medium: 1.25rem;\\n\\n// 24px\\n$spacing-medium: 1.5rem;\\n\\n// 28px\\n$spacing-medium-large: 1.75rem;\\n\\n// 32px\\n$spacing-large: 2rem;\\n\\n// 48px\\n$spacing-xlarge: 3rem;\\n\\n// 64px\\n$spacing-xxlarge: 4rem;\\n\\n// 96px\\n$spacing-largest: 6rem;\\n\\n/*===================*\\\\\\n|| Media Queries ||\\n\\\\*===================*/\\n\\n$device-mobile-size: 450px;\\n$device-tablet-size: 800px;\\n$device-laptop-size: 1024px;\\n\\n$device-landscape-mobile-size: 800px;\\n$device-landscape-tablet-size: 1048px;\\n$device-landscape-laptop-size: 1280px;\\n\\n\\n:export {\\n primary: $primary;\\n secondaryLabel: $secondary-label;\\n}\\n\\n/*===================*\\\\\\n|| Icon sizes ||\\n\\\\*===================*/\\n$icon-small: 16px;\\n$icon-medium: 24px;\\n$icon-large: 32px;\\n$icon-xlarge: 48px;\\n\",\"@import \\\"vars\\\";\\n\\n@mixin query-select($orientation, $check-orientation, $size, $qualifier) {\\n @if $orientation == none or $orientation == $check-orientation {\\n @if ($qualifier == min-width) {\\n @media only screen and (orientation: $check-orientation) and (min-width: $size) {\\n @content;\\n }\\n } @else if ($qualifier == max-width) {\\n @media only screen and (orientation: $check-orientation) and (max-width: $size) {\\n @content;\\n }\\n }\\n }\\n}\\n\\n@mixin bounded-select($orientation, $check-orientation, $min, $max) {\\n @if $orientation == none or $orientation == $check-orientation {\\n @media only screen and (orientation: $check-orientation) and (min-width: $min) and (max-width: $max) {\\n @content;\\n }\\n }\\n}\\n\\n// this is a copy of respond-to. we don't want to preserve that method since the breakpoints may diverge from the old UI.\\n@mixin is-screen-size($media: all, $orientation: none) {\\n @if $media == mobile {\\n @include query-select($orientation, portrait, $device-mobile-size, max-width) {\\n @content;\\n }\\n @include query-select($orientation, landscape, $device-landscape-mobile-size, max-width) {\\n @content;\\n }\\n } @else if $media == not-mobile {\\n @include query-select($orientation, portrait, $device-mobile-size + 1, min-width) {\\n @content;\\n }\\n @include query-select($orientation, landscape, $device-landscape-mobile-size + 1, min-width) {\\n @content;\\n }\\n } @else if $media == laptop {\\n @include bounded-select($orientation, portrait, $device-tablet-size + 1, $device-laptop-size) {\\n @content;\\n }\\n @include bounded-select($orientation, landscape, $device-landscape-tablet-size + 1, $device-landscape-laptop-size) {\\n @content;\\n }\\n } @else if $media == tablet {\\n @include bounded-select($orientation, portrait, $device-mobile-size + 1, $device-tablet-size) {\\n @content;\\n }\\n @include bounded-select($orientation, landscape, $device-landscape-mobile-size + 1, $device-landscape-tablet-size) {\\n @content;\\n }\\n } @else if $media == desktop {\\n @include query-select($orientation, portrait, $device-tablet-size, min-width) {\\n @content;\\n }\\n @include query-select($orientation, landscape, $device-landscape-tablet-size, min-width) {\\n @content;\\n }\\n } @else if $orientation == landscape {\\n @media only screen and (orientation: landscape) {\\n @content;\\n }\\n } @else if $orientation == portrait {\\n @media only screen and (orientation: portrait) {\\n @content;\\n }\\n }\\n}\\n\\n\\n@mixin hide-text-overflow {\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n}\\n\\n\\n@mixin page-padding {\\n padding-left: $spacing-small;\\n padding-right: $spacing-small;\\n}\\n\\n// Font Mixins\\n$font-mckinsey-sans: \\\"McKinsey Sans\\\";\\n$font-theinhardt: \\\"Theinhardt\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n$font-bower: \\\"Bower\\\";\\n\\n@mixin bower-bold {\\n font-family: $font-bower;\\n font-style: normal;\\n font-weight: bold;\\n text-align: center;\\n}\\n\\n@mixin mckinsey-sans {\\n font-family: $font-mckinsey-sans;\\n font-style: normal;\\n text-align: center;\\n}\\n\\n@mixin display-1 {\\n @include bower-bold;\\n font-size: 3.75rem; // 60px\\n line-height: 1.2; // 72px\\n\\n @include is-screen-size(not-mobile) {\\n font-size: 4rem; // 64px\\n line-height: 1.187; // 76px\\n }\\n}\\n\\n@mixin display-2 {\\n @include bower-bold;\\n font-size: 3.5rem; // 56px\\n line-height: 1.214; // 68px\\n\\n @include is-screen-size(not-mobile) {\\n font-size: 3.75rem; // 60px\\n line-height: 1.2; // 72px\\n }\\n}\\n\\n@mixin display-3 {\\n @include bower-bold;\\n font-size: 3.25rem; // 52px\\n line-height: 1.153; // 60px\\n\\n @include is-screen-size(not-mobile) {\\n font-size: 3.5rem; // 56px\\n line-height: 1.214; // 68px\\n }\\n}\\n\\n@mixin display-4 {\\n @include bower-bold;\\n font-size: 3rem; // 48px\\n line-height: 1.166; // 56px\\n\\n @include is-screen-size(not-mobile) {\\n font-size: 3.25rem; // 52px\\n line-height: 1.153; // 64px\\n }\\n}\\n\\n@mixin display-5 {\\n @include bower-bold;\\n font-size: 2rem; // 30px\\n line-height: 1.833; // 34px\\n\\n @include is-screen-size(not-mobile) {\\n font-size: 2.25rem; // 36px\\n line-height: 1.642; // 40px\\n }\\n}\\n\\n@mixin display-7 {\\n @include bower-bold;\\n font-size: 1.5rem; // 24px\\n line-height: 1.333; // 28px\\n\\n @include is-screen-size(not-mobile) {\\n font-size: 1.75rem; // 28px\\n line-height: 1.142; // 32px\\n }\\n}\\n\\n@mixin heading-1 {\\n @include mckinsey-sans;\\n font-size: 2.5rem; // 40px\\n line-height: 1.2; // 48px\\n\\n @include is-screen-size(not-mobile) {\\n font-size: 2.75rem; // 44px\\n line-height: 1.181; // 52px\\n }\\n}\\n\\n@mixin heading-2 {\\n @include mckinsey-sans;\\n font-size: 2.25rem; // 36px\\n line-height: 1.111; // 44px\\n\\n @include is-screen-size(not-mobile) {\\n font-size: 2.5rem; // 40px\\n line-height: 1.181; // 48px\\n }\\n}\\n\\n@mixin heading-3 {\\n @include mckinsey-sans;\\n font-size: 2rem; // 32px\\n line-height: 1.125; // 36px\\n\\n @include is-screen-size(not-mobile) {\\n font-size: 2.25rem; // 36px\\n line-height: 1.222; // 44px\\n }\\n}\\n\\n@mixin heading-4 {\\n @include mckinsey-sans;\\n font-size: 1.75rem; // 28px\\n line-height: 1.142; // 32px\\n\\n @include is-screen-size(not-mobile) {\\n font-size: 2rem; // 32px\\n line-height: 1.125; // 36px\\n }\\n}\\n\\n@mixin heading-5 {\\n @include mckinsey-sans;\\n font-size: 1.5rem; // 24px\\n line-height: 1.333; // 288px\\n\\n @include is-screen-size(not-mobile) {\\n font-size: 1.75rem; // 28px\\n line-height: 1.142; // 32px\\n }\\n}\\n\\n@mixin heading-6 {\\n @include mckinsey-sans;\\n font-size: 1.25rem; // 20px\\n line-height: 1.4; // 24px\\n\\n @include is-screen-size(not-mobile) {\\n font-size: 1.5rem; // 24px\\n line-height: 1.155; // 28px\\n }\\n}\\n\\n@mixin body-default {\\n @include mckinsey-sans;\\n font-size: 1rem; // 16px\\n line-height: 1.4; // 24px\\n\\n @include is-screen-size(not-mobile) {\\n font-size: 1.25rem; // 20px\\n line-height: 1.6; // 26px\\n }\\n}\\n\\n/// Doesnt exist in MDS.\\n@mixin body-tiny {\\n @include mckinsey-sans;\\n font-size: 0.75rem; // 12px\\n line-height: 1.4; // 20px\\n\\n @include is-screen-size(not-mobile) {\\n font-size: 1rem; // 16px\\n line-height: 1.6; // 24px\\n }\\n}\\n\\n@mixin form-label {\\n font-style: normal;\\n text-align: center;\\n font-family: $font-theinhardt;\\n font-size: 1rem;\\n line-height: 1.5rem;\\n}\\n\\n@mixin placeholder-label {\\n @include form-label;\\n text-align: left;\\n color: $placeholder-color;\\n font-weight: 300;\\n}\\n\\n@mixin chip-label {\\n @include mckinsey-sans;\\n font-size: 0.75rem;\\n line-height: 1.5rem;\\n}\\n\\n@mixin checkbox-label {\\n @include form-label;\\n font-weight: 300;\\n color: black;\\n}\\n\\n// borders\\n\\n@mixin mck-checkbox-border {\\n border: 1px solid $border;\\n border-radius: 0;\\n}\\n\\n@mixin mck-button-border {\\n border: 2px solid $border;\\n border-radius: 0;\\n}\\n\\n@mixin mck-thin-button-border {\\n border: 1px solid $background-checkbox-disabled;\\n border-radius: 0;\\n}\\n\\n@mixin mck-content-border {\\n border: 1px solid $border;\\n}\\n\\n@mixin mck-content-border-light {\\n @include mck-content-border;\\n border-color: $selected-option;\\n}\\n\\n@mixin mck-card-content {\\n @include mck-content-border;\\n background-color: $results-list-background-color;\\n}\\n\\n@mixin mck-card-content-light {\\n @include mck-content-border-light;\\n background-color: $results-list-background-color;\\n}\\n\\n\\n// functions\\n\\n/**\\n * Makes text have maximum lines with ellipsis. Works on most modern browsers except\\n * of Firefox..\\n */\\n@mixin max-lines($count) {\\n display: -webkit-box;\\n overflow: hidden;\\n -webkit-line-clamp: $count;\\n -webkit-box-orient: vertical;\\n}\\n\\n// images\\n@mixin mck-icon($width, $asset, $height: $width, $assetPath: \\\"libs/ui/src/lib/icons\\\",) {\\n width: $width;\\n height: $height;\\n background-image: url(\\\"#{$assetPath}/#{$asset}\\\");\\n background-size: contain;\\n}\\n\\n\\n@mixin mck-small-icon($mobile-asset, $desktop-asset: $mobile-asset) {\\n @include mck-icon(16px, $asset: $mobile-asset);\\n\\n @include is-screen-size(not-mobile) {\\n @include mck-icon(24px, $asset: $desktop-asset);\\n }\\n}\\n\\n// skeleton\\n@mixin skeleton-bg {\\n background-color: $selected-option;\\n}\\n\\n@mixin placeholder-image-size {\\n width: 81px;\\n height: 82px;\\n\\n @include is-screen-size(desktop) {\\n width: 219px;\\n height: 119px;\\n }\\n}\\n\\n@mixin placeholder-status-size {\\n width: 117px;\\n height: 78px;\\n\\n @include is-screen-size(desktop) {\\n width: 117px;\\n height: 78px;\\n }\\n}\\n\",\"@import \\\"mixins\\\";\\n@import \\\"vars\\\";\\n@import \\\"~@angular/material/theming\\\";\\n\\n.mck {\\n &-inherit {\\n &-font {\\n // patches global font styling done by legacy ui\\n font: inherit;\\n }\\n }\\n\\n &-content {\\n &-expand {\\n width: 100%;\\n height: 100%;\\n\\n &-width {\\n width: 100%;\\n }\\n\\n &-height {\\n height: 100%;\\n }\\n }\\n\\n &-with-footer-height {\\n height: calc(100vh - 58px);\\n }\\n\\n &-full-height {\\n height: 100vh;\\n }\\n\\n &-page {\\n @extend .mck-content-expand;\\n background: $page-background-color;\\n\\n &-container {\\n @extend .mck-content-full-height;\\n }\\n }\\n\\n &-body {\\n width: 100%;\\n display: block;\\n @include is-screen-size(not-mobile) {\\n max-width: 1024px;\\n }\\n }\\n\\n &-group {\\n @include page-padding;\\n width: 100%;\\n\\n @include is-screen-size(not-mobile) {\\n max-width: 759px;\\n }\\n }\\n }\\n\\n &-shadow {\\n @include mat-elevation(1);\\n }\\n\\n &-flex-1 {\\n flex: 1;\\n }\\n\\n &-row {\\n display: flex;\\n flex-direction: row;\\n\\n &.mck-center {\\n &-justify {\\n justify-content: center;\\n }\\n\\n &-align {\\n align-items: center;\\n }\\n\\n @extend .mck-center-justify;\\n @extend .mck-center-align;\\n }\\n\\n &.mck-stretch {\\n align-items: stretch;\\n }\\n\\n &-flow {\\n @extend .mck-row;\\n flex-wrap: wrap;\\n }\\n\\n &.mck-scroll {\\n overflow-x: scroll;\\n }\\n }\\n\\n &-column {\\n display: flex;\\n flex-direction: column;\\n\\n &.mck-center {\\n justify-content: center;\\n align-items: center;\\n }\\n\\n &.mck-space-between {\\n justify-content: space-between;\\n }\\n\\n &.mck-stretch {\\n align-items: stretch;\\n }\\n\\n &.mck-scroll {\\n overflow-y: scroll;\\n overflow-y: overlay;\\n }\\n\\n &.mck-flex-end {\\n justify-content: flex-end;\\n }\\n }\\n\\n &-overflow {\\n overflow: auto;\\n }\\n\\n &-bordered, &-input {\\n border-radius: 0;\\n border: 1px solid $border;\\n\\n &:hover {\\n border-color: #464646;\\n }\\n\\n &:focus {\\n border-color: $primary;\\n }\\n\\n &[disabled=\\\"true\\\"] {\\n pointer-events: none;\\n border-color: #f0f0f0;\\n color: #ccc;\\n }\\n }\\n\\n &-date-display {\\n position: relative;\\n display: flex;\\n align-items: center;\\n width: 100%;\\n height: 43px;\\n padding: $spacing-small $spacing-xxsmall;\\n transition: border 200ms, box-shadow 200ms;\\n }\\n\\n &-form-input {\\n\\n .mat-form-field-wrapper {\\n padding-bottom: $spacing-xxsmall;\\n }\\n\\n mat-form-field {\\n min-width: auto !important;\\n\\n .mat-form-field-infix {\\n width: 100%;\\n padding-top: 0.7rem !important;\\n padding-bottom: $spacing-xxsmall !important;\\n }\\n\\n .mat-form-field-outline {\\n min-height: 2.7rem;\\n color: rgba(0, 0, 0, 0.27);\\n }\\n\\n &.mck-center-suffix {\\n .mat-form-field-infix {\\n @extend .mck-row;\\n @extend .mck-center;\\n }\\n }\\n\\n &.mck-select-dropdown-button {\\n .mat-form-field-infix {\\n margin-top: 2px;\\n }\\n\\n .mat-form-field-flex {\\n @include is-screen-size(mobile) {\\n padding-left: $spacing-xxsmall;\\n padding-right: $spacing-xxsmall;\\n }\\n }\\n\\n @include is-screen-size(mobile) {\\n .mat-form-field-outline, .mat-form-field-infix {\\n height: 2rem;\\n min-height: 2rem;\\n }\\n\\n .mat-form-field-infix {\\n padding-top: 0 !important;\\n padding-bottom: 0 !important;\\n }\\n }\\n }\\n }\\n\\n mat-form-field.mat-s {\\n @include form-label;\\n text-align: left;\\n }\\n\\n mat-select {\\n margin-top: 0.2rem;\\n\\n .mat-select-arrow {\\n visibility: hidden;\\n }\\n\\n & .mat-select-value > .mat-select-value-text > span {\\n @include form-label;\\n font-weight: 400;\\n // color: #333333 !important; //R--- blocks disabled state color\\n font-family: \\\"McKinsey Sans\\\";\\n }\\n }\\n\\n .mat-form-field-outline {\\n & > .mat-form-field-outline-start.mat-form-field-outline-start,\\n & > .mat-form-field-outline-gap.mat-form-field-outline-gap,\\n & > .mat-form-field-outline-end.mat-form-field-outline-end {\\n border-color: $border;\\n border-width: 1px;\\n border-radius: 0;\\n }\\n }\\n\\n .available {\\n .mat-form-field-outline {\\n & > .mat-form-field-outline-start.mat-form-field-outline-start,\\n & > .mat-form-field-outline-gap.mat-form-field-outline-gap,\\n & > .mat-form-field-outline-end.mat-form-field-outline-end {\\n border-color: #3aa537;\\n }\\n }\\n }\\n\\n .booked {\\n .mat-form-field-outline {\\n & > .mat-form-field-outline-start.mat-form-field-outline-start,\\n & > .mat-form-field-outline-gap.mat-form-field-outline-gap,\\n & > .mat-form-field-outline-end.mat-form-field-outline-end {\\n border-color: #e12e41;\\n }\\n }\\n }\\n\\n .mat-form-field-outline-thick {\\n & > .mat-form-field-outline-start.mat-form-field-outline-start,\\n & > .mat-form-field-outline-gap.mat-form-field-outline-gap,\\n & > .mat-form-field-outline-end.mat-form-field-outline-end {\\n border-color: $primary;\\n border-width: 1px;\\n border-radius: 0;\\n }\\n }\\n\\n > mat-form-field.mck-error {\\n .mat-form-field-wrapper {\\n // less jumping for error message.\\n padding-bottom: 0;\\n }\\n\\n .mat-form-field-outline {\\n & > .mat-form-field-outline-start.mat-form-field-outline-start,\\n & > .mat-form-field-outline-gap.mat-form-field-outline-gap,\\n & > .mat-form-field-outline-end.mat-form-field-outline-end {\\n border-color: $error-color;\\n }\\n }\\n }\\n\\n mck-close-icon.mat-chip-remove.mat-chip-remove {\\n opacity: 1;\\n display: flex;\\n flex-direction: column;\\n justify-content: center;\\n align-items: center;\\n }\\n\\n mat-label {\\n @include form-label;\\n font-weight: 400;\\n text-align: left;\\n margin-bottom: $spacing-xxsmall;\\n }\\n\\n mat-radio-button {\\n margin-right: $spacing-small;\\n }\\n\\n .mat-radio-label-content {\\n @include form-label;\\n text-align: left;\\n }\\n\\n .mat-radio {\\n &-outer-circle {\\n border-color: $primary !important;\\n border-width: 1px !important;\\n }\\n\\n &-inner-circle {\\n background-color: $primary !important;\\n }\\n }\\n\\n mat-radio-group {\\n display: flex;\\n flex-direction: row;\\n flex-wrap: wrap;\\n\\n & > mat-radio-button:last-child {\\n margin-right: 0;\\n }\\n }\\n\\n &-container {\\n > .mck-form-input, > mck-select {\\n margin-bottom: $spacing-xxsmall;\\n\\n @include is-screen-size(desktop) {\\n margin-bottom: $spacing-medium-large;\\n }\\n }\\n\\n .mck-radio-select {\\n margin-bottom: $spacing-small;\\n\\n @include is-screen-size(desktop) {\\n margin-bottom: $spacing-medium;\\n }\\n }\\n }\\n\\n mat-chip.mat-standard-chip.mat-standard-chip {\\n border-radius: 3px;\\n min-height: 1.5rem;\\n background-color: $chip-color;\\n padding-top: $spacing-smallest;\\n padding-bottom: $spacing-smallest;\\n padding-left: $spacing-xxsmall;\\n @include chip-label;\\n @include is-screen-size(mobile) {\\n line-height: inherit;\\n }\\n }\\n\\n mat-checkbox {\\n &.mat-checkbox.mat-checkbox {\\n @include checkbox-label;\\n }\\n\\n div.mat-checkbox-background.mat-checkbox-background {\\n background-color: $primary;\\n\\n &.mck-checkbox-disabled.mat-checkbox-disabled {\\n background-color: $background-checkbox-disabled;\\n }\\n }\\n\\n &.mck-checkbox-disabled.mat-checkbox-disabled {\\n @include checkbox-label;\\n color: $border;\\n }\\n }\\n }\\n\\n &-borderless {\\n border: none;\\n\\n &:hover, &:focus, &:disabled {\\n border: none;\\n }\\n }\\n\\n &-select-panel {\\n margin-top: 0 !important;\\n border-radius: unset !important;\\n margin-top: 35px !important;\\n margin-left: 5px;\\n\\n mat-option {\\n padding-left: 0;\\n padding-right: 0;\\n\\n &.mat-option-text {\\n @include form-label;\\n text-align: left;\\n }\\n }\\n\\n &.mck-margin-top {\\n margin-top: $spacing-medium !important;\\n }\\n }\\n\\n &-checkbox-panel {\\n &.mat-autocomplete-panel.mat-autocomplete-panel {\\n top: -10px;\\n max-height: 278px;\\n }\\n\\n mat-option.mck-truncated {\\n & .mat-checkbox-label.mat-checkbox-label {\\n @include max-lines(2);\\n }\\n }\\n\\n mat-option {\\n padding-left: 0;\\n padding-right: 0;\\n line-height: 24px;\\n height: unset;\\n min-height: 36px;\\n\\n & .mat-checkbox-label.mat-checkbox-label {\\n flex: 1;\\n }\\n\\n & .mat-checkbox-label.mat-checkbox-label {\\n @include checkbox-label;\\n text-align: left;\\n }\\n\\n &.mck-checkbox-group-header {\\n & .mat-checkbox-label.mat-checkbox-label {\\n font-weight: 500;\\n }\\n }\\n\\n &.mck-checkbox-group-child {\\n margin-left: $spacing-large;\\n }\\n\\n mat-checkbox {\\n label.mat-checkbox-layout {\\n width: 100%;\\n padding-left: 16px;\\n padding-right: 16px;\\n @include is-screen-size(mobile) {\\n padding-left: 2px;\\n padding-right: 2px;\\n }\\n }\\n\\n div.mat-checkbox-frame.mat-checkbox-frame {\\n @include mck-checkbox-border;\\n }\\n\\n &.mat-checkbox-checked {\\n div.mat-checkbox-background.mat-checkbox-background {\\n background-color: $primary;\\n }\\n }\\n\\n &.mck-checkbox-disabled.mat-checkbox-disabled {\\n div.mat-checkbox-background.mat-checkbox-background {\\n background-color: $background-checkbox-disabled;\\n }\\n }\\n\\n &.mck-checkbox-disabled.mat-checkbox-disabled {\\n & .mat-checkbox-label.mat-checkbox-label {\\n @include checkbox-label;\\n color: $border;\\n text-align: left;\\n }\\n }\\n\\n .mat-checkbox-inner-container {\\n width: $spacing-small-medium;\\n height: $spacing-small-medium;\\n }\\n }\\n }\\n }\\n\\n &-select-option {\\n &-selected {\\n font-weight: 500;\\n font-family: $font-mckinsey-sans;\\n color: black;\\n background-color: $selected-option;\\n\\n .mck-spacer-content {\\n background-color: $primary;\\n margin-right: $spacing-xsmall;\\n }\\n }\\n\\n &-unselected {\\n font-weight: 400;\\n font-family: $font-mckinsey-sans;\\n\\n &.mck-ignore-disabled {\\n color: black;\\n }\\n\\n .mck-spacer-content {\\n visibility: hidden;\\n margin-right: $spacing-xsmall;\\n }\\n }\\n }\\n\\n &-button {\\n &.mat-button.mat-button, &.mat-stroked-button.mat-stroked-button {\\n height: 40px;\\n border-radius: 0;\\n border: none;\\n @extend .mck-column;\\n @extend .mck-center;\\n font-family: $font-mckinsey-sans;\\n\\n @include is-screen-size(not-mobile) {\\n height: 48px;\\n }\\n\\n & > .mat-button-wrapper.mat-button-wrapper {\\n @include form-label;\\n font-weight: normal;\\n padding-left: $spacing-smallest;\\n padding-right: $spacing-smallest;\\n font-family: $font-mckinsey-sans;\\n\\n @include is-screen-size(mobile) {\\n font-size: 0.875rem;\\n }\\n }\\n\\n &.mck-short {\\n height: 32px;\\n min-width: 83px;\\n\\n @include is-screen-size(not-mobile) {\\n height: 48px;\\n min-width: 155px;\\n }\\n\\n // some cases buttons in desktop are 40 vs 48px\\n &.mck-short-height {\\n @include is-screen-size(not-mobile) {\\n height: 40px;\\n }\\n }\\n }\\n\\n &.mck-square {\\n height: 32px;\\n width: 32px;\\n min-width: 32px;\\n padding: 0;\\n\\n @include is-screen-size(not-mobile) {\\n width: 40px;\\n height: 40px;\\n }\\n }\\n }\\n }\\n\\n &-primary-button {\\n @extend .mck-button;\\n\\n &.mat-button.mat-button {\\n background-color: $primary;\\n\\n &[disabled], &.disabled {\\n background-color: $background-checkbox-disabled;\\n color: #757575;\\n cursor: not-allowed;\\n\\n & > .mat-button-wrapper.mat-button-wrapper {\\n color: #757575;\\n }\\n }\\n\\n & > .mat-button-wrapper.mat-button-wrapper {\\n color: white;\\n }\\n }\\n }\\n\\n &-secondary-button {\\n @extend .mck-button;\\n\\n &.mat-stroked-button.mat-stroked-button {\\n @include mck-thin-button-border;\\n border: 1px solid #2251FF;\\n color: #2251FF;\\n &[disabled], &.disabled {\\n border: 1px solid $background-checkbox-disabled;\\n color: #333333;\\n cursor: not-allowed;\\n }\\n }\\n\\n &.mat-button.mat-button {\\n background-color: white;\\n\\n & > .mat-button-wrapper.mat-button-wrapper {\\n color: $chip-color;\\n }\\n }\\n }\\n\\n &-warning-button {\\n @extend .mck-button;\\n\\n &.mat-button.mat-button {\\n background-color: $color-brand-yellow;\\n\\n & > .mat-button-wrapper.mat-button-wrapper {\\n color: black;\\n }\\n }\\n }\\n\\n &-stroked-button {\\n @extend .mck-button;\\n\\n &.mat-stroked-button.mat-stroked-button {\\n @include mck-button-border;\\n display: flex;\\n flex-direction: column;\\n justify-content: center;\\n padding-left: $spacing-medium-large;\\n padding-right: $spacing-medium-large;\\n\\n &.mck-short {\\n height: 32px;\\n min-width: 83px;\\n padding-left: $spacing-smallest;\\n padding-right: $spacing-smallest;\\n\\n @include is-screen-size(not-mobile) {\\n height: 48px;\\n min-width: 155px;\\n }\\n }\\n\\n // primary colors\\n &.mck-primary {\\n border-width: 1px;\\n border-color: $primary;\\n color: $primary;\\n }\\n\\n &.mck-thin-border-light {\\n border-color: $background-checkbox-disabled;\\n border-width: 1px;\\n }\\n }\\n\\n & > .mat-button-wrapper.mat-button-wrapper {\\n @include form-label;\\n font-weight: normal;\\n color: $primary;\\n }\\n }\\n\\n &-toggle-button {\\n @include form-label;\\n @include mck-content-border;\\n border-color: $background-checkbox-disabled;\\n min-width: 59px;\\n background-color: white;\\n\\n @include is-screen-size(not-mobile) {\\n min-width: 132px;\\n padding-top: $spacing-xxsmall;\\n padding-bottom: $spacing-xxsmall;\\n }\\n\\n &-selected {\\n color: $primary;\\n }\\n }\\n\\n &-date-picker {\\n width: 100% !important;\\n height: 100% !important;\\n\\n @include is-screen-size(not-mobile) {\\n max-width: 23rem;\\n }\\n\\n & > .header.header {\\n @include form-label;\\n font-weight: 500;\\n color: $form-label;\\n margin-top: $spacing-small-medium;\\n\\n & > .arrow.arrow {\\n width: 2.375rem;\\n height: 2rem;\\n\\n & > .icon.icon {\\n width: 1rem;\\n height: 1rem;\\n }\\n\\n\\n & > .next.next {\\n background-image: url('libs/ui/src/lib/icons/arrow-forward.svg');\\n }\\n\\n & > .previous.previous {\\n background-image: url('libs/ui/src/lib/icons/arrow-backward.svg');\\n }\\n }\\n\\n\\n }\\n\\n & > .month {\\n @include form-label;\\n font-weight: 500;\\n }\\n\\n & > .week {\\n @include form-label;\\n font-weight: 500;\\n color: $secondary-label;\\n }\\n\\n & > .body {\\n @include form-label;\\n\\n & > div > div.date {\\n & > .dot {\\n display: none;\\n }\\n\\n &.disabled {\\n background-color: transparent;\\n border-radius: 0;\\n color: $secondary-label;\\n }\\n\\n &.active {\\n border-radius: 0;\\n background-color: $primary;\\n }\\n\\n &.non-month {\\n color: $secondary-label;\\n }\\n }\\n }\\n }\\n\\n &-spacer-content {\\n &-collapse-tablet {\\n @include is-screen-size(mobile) {\\n display: none;\\n }\\n @include is-screen-size(tablet) {\\n display: none;\\n }\\n }\\n\\n &-expand-mobile {\\n @include is-screen-size(not-mobile) {\\n display: none;\\n }\\n }\\n\\n &-divider {\\n background-color: $selected-option;\\n }\\n }\\n\\n &-expansion-panel {\\n &.mat-expansion-panel.mat-expansion-panel {\\n @include mat-elevation(0);\\n border-radius: 0;\\n border-top: 1px solid $selected-option;\\n border-bottom: 1px solid $selected-option;\\n\\n &.mck-expanded {\\n background-color: $background-color;\\n border-bottom: none;\\n\\n & .mck-collapse-icon {\\n @include mck-icon(24px, 'chevron-close.svg');\\n @include is-screen-size(not-mobile) {\\n @include mck-icon(48px, 'chevron-close-large.svg');\\n }\\n }\\n }\\n\\n .mat-expansion-panel-body {\\n padding-left: 0;\\n padding-right: 0;\\n\\n & > .mat-expansion-panel-header-description.mat-expansion-panel-header-description {\\n @include body-tiny;\\n padding-left: $spacing-small;\\n padding-right: $spacing-small;\\n @include is-screen-size(not-mobile) {\\n @include form-label;\\n }\\n text-align: left;\\n color: black;\\n font-weight: normal;\\n padding-bottom: $spacing-xxsmall;\\n }\\n }\\n }\\n\\n & mat-expansion-panel-header {\\n padding-left: $spacing-small;\\n padding-right: $spacing-small;\\n\\n & > span.mat-content {\\n // center text and icons\\n align-items: center;\\n }\\n }\\n\\n & mat-panel-title {\\n @include form-label;\\n text-align: left;\\n color: black;\\n font-weight: normal;\\n }\\n\\n .mck-collapse-icon {\\n @include mck-icon(24px, 'chevron-open.svg');\\n @include is-screen-size(not-mobile) {\\n @include mck-icon(48px, 'chevron-open-large.svg');\\n }\\n transform: rotate(0deg);\\n transition: transform 0.5s ease;\\n &.expanded {\\n transform: rotate(180deg);\\n }\\n }\\n }\\n\\n &-icon-fill-open {\\n fill: $primary;\\n }\\n\\n &-icon-fill-close {\\n fill: $secondary-label;\\n }\\n\\n &-icon-fill-black {\\n fill: black;\\n stroke: black;\\n }\\n\\n &-icon-fill-white {\\n fill: white;\\n stroke: white;\\n }\\n\\n &-icon-fill-gray {\\n fill: #333333;\\n stroke: #333333;\\n }\\n\\n &-min {\\n max-width: 581px !important;\\n width: 80vw;\\n max-height: 100vh;\\n // Transform the modal into a more 'full-screen' appearance on mobile.\\n @include is-screen-size(mobile) {\\n width: 100vw;\\n height: 100%;\\n max-height: 100vh;\\n\\n .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n }\\n }\\n\\n &-noexpand {\\n max-width: 581px !important;\\n width: 80vw !important;\\n max-height: 100vh;\\n // Transform the modal into a more 'full-screen' appearance on mobile.\\n @include is-screen-size(mobile) {\\n width: calc(100vw - 32px) !important;\\n max-height: 100vh;\\n }\\n }\\n\\n &-modal {\\n max-width: 800px !important;\\n width: 80vw;\\n max-height: 100vh;\\n // Transform the modal into a more 'full-screen' appearance on mobile.\\n @include is-screen-size(mobile) {\\n width: 100vw;\\n height: 100%;\\n max-height: 100vh;\\n\\n .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n }\\n }\\n\\n &-modal-mini {\\n max-width: 580px !important;\\n max-height: 100vh;\\n // Transform the modal into a more 'full-screen' appearance on mobile.\\n @include is-screen-size(mobile) {\\n width: 100vw;\\n height: 100%;\\n max-height: 100vh;\\n\\n .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n }\\n }\\n\\n &-modal-survey {\\n max-width: 691px !important;\\n max-height: 100vh;\\n // Transform the modal into a more 'full-screen' appearance on mobile.\\n @include is-screen-size(mobile) {\\n .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n }\\n }\\n\\n &-modal-wide {\\n max-width: 1024px !important;\\n width: 100vw;\\n height: 95vh;\\n max-height: 100vh;\\n .mat-dialog-content {\\n background-color: #F8F9FA;\\n padding: 0 !important;\\n overflow: hidden;\\n .mat-icon-button[name=\\\"CloseButton\\\"] {\\n position: relative;\\n right: 32px;\\n @include is-screen-size(mobile) {\\n .close-image {\\n height: 32px;\\n width: 32px;\\n }\\n }\\n }\\n }\\n // Transform the modal into a more 'full-screen' appearance on mobile.\\n @include is-screen-size(mobile) {\\n width: 100vw;\\n height: 100%;\\n max-height: 100vh;\\n .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n }\\n\\n }\\n\\n &-modal-wide-manage-booking {\\n max-width: 1024px !important;\\n width: 100vw;\\n // height: 95vh;\\n max-height: 95vh;\\n .mat-dialog-content {\\n background-color: #F8F9FA;\\n padding: 0 !important;\\n overflow: hidden;\\n .mat-icon-button[name=\\\"CloseButton\\\"] {\\n position: relative;\\n right: 32px;\\n @include is-screen-size(mobile) {\\n .close-image {\\n height: 32px;\\n width: 32px;\\n }\\n }\\n }\\n }\\n // Transform the modal into a more 'full-screen' appearance on mobile.\\n @include is-screen-size(mobile) {\\n width: 100vw;\\n height: 100%;\\n max-height: 100vh;\\n .mat-dialog-container {\\n border-radius: 0 !important;\\n }\\n }\\n\\n }\\n\\n &-alert {\\n @include is-screen-size(mobile) {\\n max-width: 100vw !important;\\n width: 100vw;\\n margin-left: $spacing-small;\\n margin-right: $spacing-small;\\n }\\n\\n &-backdrop {\\n background: $alert-overlay-bg;\\n }\\n }\\n\\n &-slide-toggle {\\n &.mat-slide-toggle.mat-checked:not(.mat-disabled) {\\n & .mat-slide-toggle-bar.mat-slide-toggle-bar {\\n background-color: $primary-highlight;\\n }\\n\\n & .mat-slide-toggle-thumb.mat-slide-toggle-thumb {\\n background-color: white;\\n }\\n }\\n\\n &.mat-slide-toggle {\\n height: auto;\\n }\\n\\n .mat-slide-toggle-content.mat-slide-toggle-content {\\n flex: 1;\\n @include form-label;\\n text-align: left;\\n @include max-lines(2);\\n white-space: normal;\\n }\\n\\n .mat-slide-toggle-thumb.mat-slide-toggle-thumb {\\n width: 14px;\\n height: 14px;\\n transform: translate(50%, 50%);\\n }\\n\\n .mat-slide-toggle-thumb-container.mat-slide-toggle-thumb-container {\\n top: -4px;\\n left: -4px;\\n }\\n\\n .mat-slide-toggle-bar.mat-slide-toggle-bar {\\n height: 20px;\\n background-color: $background-checkbox-disabled;\\n border-radius: 20px;\\n }\\n }\\n\\n &-skeleton {\\n @include skeleton-bg;\\n\\n &-checkbox {\\n float: left;\\n > .loader.loader {\\n @include skeleton-bg;\\n width: 20px;\\n height: 20px;\\n margin-bottom: 0;\\n }\\n }\\n\\n &-header > .loader.loader {\\n @include skeleton-bg;\\n width: 100vw;\\n margin-bottom: 0;\\n max-width: 215px;\\n }\\n\\n &-image > .loader.loader {\\n @include skeleton-bg;\\n @include placeholder-image-size;\\n margin-bottom: 0;\\n }\\n\\n &-status > .loader.loader {\\n @include skeleton-bg;\\n @include placeholder-status-size;\\n margin-top: 10px;\\n margin-bottom: 0;\\n }\\n\\n &-line-1 > .loader.loader {\\n @include skeleton-bg;\\n height: 23px;\\n max-width: 176px;\\n\\n @include is-screen-size(not-mobile) {\\n max-width: 219px;\\n }\\n }\\n\\n &-line-2 > .loader.loader {\\n @include skeleton-bg;\\n height: 18px;\\n max-width: 165px;\\n\\n @include is-screen-size(not-mobile) {\\n max-width: 189px;\\n }\\n }\\n\\n &-line-3 > .loader.loader {\\n @include skeleton-bg;\\n height: 18px;\\n max-width: 147px;\\n\\n @include is-screen-size(not-mobile) {\\n max-width: 189px;\\n }\\n }\\n\\n &-line-30p, &-line-30p-thin {\\n > .loader.loader {\\n @include skeleton-bg;\\n height: 18px;\\n max-width: 30%;\\n @include is-screen-size(not-mobile) {\\n max-width: 30%;\\n }\\n }\\n &-thin {\\n > .loader.loader {\\n height: 16px;\\n margin-bottom: 4px;\\n }\\n }\\n }\\n\\n &-line-45p, &-line-45p-thin {\\n > .loader.loader {\\n @include skeleton-bg;\\n height: 18px;\\n max-width: 45%;\\n @include is-screen-size(not-mobile) {\\n max-width: 45%;\\n margin-right: 45%;\\n }\\n }\\n &-thin {\\n > .loader.loader {\\n height: 16px;\\n margin-bottom: 4px;\\n }\\n }\\n }\\n\\n &-line-50p, &-line-50p-thin, &-line-50p-thick {\\n > .loader.loader {\\n @include skeleton-bg;\\n height: 18px;\\n max-width: 50%;\\n @include is-screen-size(not-mobile) {\\n max-width: 50%;\\n margin-right: 45%;\\n }\\n }\\n &-thin {\\n > .loader.loader {\\n height: 16px;\\n margin-bottom: 4px;\\n }\\n }\\n &-thick {\\n > .loader.loader {\\n height: 32px;\\n margin-bottom: 4px;\\n }\\n }\\n }\\n\\n &-line-60p, &-line-60p-thin, &-line-60p-thick {\\n > .loader.loader {\\n @include skeleton-bg;\\n height: 18px;\\n max-width: 60%;\\n @include is-screen-size(not-mobile) {\\n max-width: 60%;\\n margin-right: 35%;\\n }\\n }\\n &-thin {\\n > .loader.loader {\\n height: 16px;\\n margin-bottom: 4px;\\n }\\n }\\n &-thick {\\n > .loader.loader {\\n height: 32px;\\n margin-bottom: 4px;\\n }\\n }\\n }\\n\\n &-line-70p, &-line-70p-thin, &-line-70p-thick {\\n > .loader.loader {\\n @include skeleton-bg;\\n height: 18px;\\n max-width: 70%;\\n @include is-screen-size(not-mobile) {\\n max-width: 70%;\\n margin-right: 25%;\\n }\\n }\\n &-thin {\\n > .loader.loader {\\n height: 16px;\\n margin-bottom: 4px;\\n }\\n }\\n &-thick {\\n > .loader.loader {\\n height: 32px;\\n margin-bottom: 4px;\\n }\\n }\\n }\\n\\n &-line-80p, &-line-80p-thin, &-line-80p-thick {\\n > .loader.loader {\\n @include skeleton-bg;\\n height: 18px;\\n max-width: 80%;\\n @include is-screen-size(not-mobile) {\\n max-width: 80%;\\n margin-right: 15%;\\n }\\n }\\n &-thin {\\n > .loader.loader {\\n height: 16px;\\n margin-bottom: 4px;\\n }\\n }\\n &-thick {\\n > .loader.loader {\\n height: 32px;\\n margin-bottom: 4px;\\n }\\n }\\n }\\n\\n &-line-90p, &-line-90p-thin {\\n > .loader.loader {\\n @include skeleton-bg;\\n height: 18px;\\n max-width: 90%;\\n @include is-screen-size(not-mobile) {\\n max-width: 90%;\\n }\\n }\\n &-thin {\\n > .loader.loader {\\n height: 16px;\\n margin-bottom: 4px;\\n }\\n }\\n }\\n\\n &-load-more > .loader.loader {\\n @include skeleton-bg;\\n margin-top: $spacing-xxsmall;\\n margin-bottom: $spacing-xxsmall;\\n width: calc(100vw - (2 * #{$spacing-small}));\\n height: 40px;\\n\\n @include is-screen-size(not-mobile) {\\n max-width: 320px;\\n height: 50px;\\n }\\n }\\n\\n &-load-more-100p, &-header, &-room-availability {\\n > .loader.loader {\\n @include skeleton-bg;\\n margin-top: $spacing-xxsmall;\\n margin-bottom: $spacing-xxsmall;\\n width: calc(100vw - (2 * #{$spacing-small}));\\n height: 40px;\\n max-width: none;\\n width: 100%;\\n @include is-screen-size(not-mobile) {\\n max-width: none;\\n width: 100%;\\n height: 50px;\\n }\\n &-room-availability {\\n > .loader.loader {\\n height: 124px;\\n margin-bottom: 4px;\\n }\\n }\\n }\\n }\\n\\n\\n }\\n}\\n\\n\\n.mck {\\n &-heading-5 {\\n @include heading-5;\\n }\\n}\\n\\nngx-mat-select-search {\\n .mat-select-search-no-entries-found {\\n @include form-label;\\n text-align: left;\\n }\\n\\n .mat-select-search-input {\\n @include form-label;\\n text-align: left;\\n }\\n\\n button.mat-button.mat-select-search-clear {\\n background-color: transparent;\\n border: none;\\n color: black;\\n }\\n}\\n\\n::-webkit-scrollbar {\\n width: 16px;\\n height: 18px;\\n}\\n::-webkit-scrollbar-thumb {\\n height: $spacing-medium;\\n border: 4px solid rgba(0, 0, 0, 0);\\n background-clip: padding-box;\\n border-radius: 8px;\\n background-color: $scrollbar-color;\\n -webkit-box-shadow: inset -1px -1px 0px rgba(0, 0, 0, 0.05), inset 1px 1px 0px rgba(0, 0, 0, 0.05);\\n}\\n::-webkit-scrollbar-button {\\n width: 0;\\n height: 0;\\n display: none;\\n}\\n::-webkit-scrollbar-corner {\\n background-color: transparent;\\n}\\nheader {\\n z-index: 2;\\n}\\n.mb-block {\\n @include is-screen-size(mobile) {\\n display: block;\\n }\\n}\\n.mb-bottom {\\n @include is-screen-size(mobile) {\\n padding-bottom: 110px;\\n }\\n}\\n\\n.map-filters-container .mck-form-input mat-form-field {\\n .mat-form-field-infix {\\n top: 5px;\\n }\\n .mat-form-field-outline{\\n height: 48px;\\n background-color: white;\\n }\\n\\n .mat-form-field-infix {\\n padding-top: $spacing-xxsmall !important;\\n }\\n}\\n\\n.office-level-row{\\n\\n .mat-select-placeholder{\\n color: #333333;\\n font-family: $font-mckinsey-sans;\\n }\\n\\n .legend-container .mat-form-field-outline, .mat-form-field-infix {\\n @include is-screen-size(mobile) {\\n height: 45px !important;\\n }\\n }\\n\\n .select-divider{\\n display: block;\\n top: 0 !important;\\n width: 44px !important;\\n right: -11px !important;\\n background: transparent !important;\\n border-width: 0 0 0 1px;\\n border-color: #c6c6c6;\\n border-style: solid;\\n @include is-screen-size(not-mobile) {\\n height: calc(100% - 1px) !important;\\n }\\n }\\n\\n .disabled{\\n .select-divider{\\n background: #F0F0F0 !important;\\n @include is-screen-size(not-mobile) {\\n height: calc(100% - 2px) !important;\\n }\\n }\\n .select-chevron{\\n opacity: 0.5;\\n margin-left: 10px;\\n }\\n }\\n}\\n\\n.office-level-row, .map-controls{\\n .legend-container .mat-form-field-outline, .mat-form-field-infix {\\n display: flex !important;\\n width: 100% !important;\\n justify-content: space-between !important;\\n }\\n}\\n\\n.booking-form-container {\\n overflow-y: auto;\\n max-height: calc(100vh - 345px);\\n}\\n.booking-form-container .mck-form-input{\\n\\n mat-select {\\n & .mat-select-value > .mat-select-value-text > span {\\n // color: #051c2c !important; //R--- blocks disabled state color\\n }\\n }\\n\\n mat-label, .mat-radio-label-content {\\n font-family: $font-mckinsey-sans !important;\\n color: #333333;\\n }\\n\\n input, input::placeholder{\\n font-family: $font-mckinsey-sans;\\n color: #B3B3B3;\\n }\\n}\",\"/*\\nStart Angular Calendar\\n*/\\n.cal-week-view {\\n /* stylelint-disable-next-line selector-type-no-unknown */\\n}\\n.cal-week-view * {\\n -webkit-box-sizing: border-box;\\n box-sizing: border-box;\\n}\\n.cal-week-view .cal-day-headers {\\n display: -webkit-box;\\n display: -ms-flexbox;\\n -js-display: flex;\\n display: flex;\\n padding-left: 70px;\\n border: 1px solid;\\n}\\n.cal-week-view .cal-day-headers .cal-header {\\n -webkit-box-flex: 1;\\n -ms-flex: 1;\\n flex: 1;\\n text-align: left;\\n padding: 12px;\\n margin-top: 20px;\\n font-family: $font;\\n font-size: 16px;\\n font-weight: 400;\\n p {\\n font-size: 16px;\\n font-weight: 300;\\n margin: 0;\\n }\\n &.show-weekend {\\n font-size: 12px;\\n p {\\n font-size: 12px;\\n }\\n }\\n}\\n.cal-week-view .cal-day-headers .cal-header:not(:last-child) {\\n border-right: 1px solid;\\n}\\n.cal-week-view .cal-day-headers .cal-header:first-child {\\n border-left: 1px solid;\\n}\\n.cal-week-view .cal-day-headers span {\\n font-weight: 400;\\n opacity: 0.5;\\n}\\n.cal-week-view .cal-day-column {\\n -webkit-box-flex: 1;\\n -ms-flex-positive: 1;\\n flex-grow: 1;\\n border-left: solid 1px;\\n padding-top: 5px;\\n}\\n.cal-week-view .cal-event {\\n font-size: 12px;\\n border: 1px solid;\\n outline: none;\\n .berry {\\n position: absolute;\\n left: calc(50% - 7px);\\n display: none;\\n height: 14px;\\n width: 14px;\\n background-color: #00A9F4;\\n border-radius: 50%;\\n &.top {\\n top: -7px;\\n }\\n &.bot {\\n bottom: -7px;\\n }\\n }\\n .bumper {\\n position: absolute;\\n left: 3px;\\n display: block;\\n width: calc(100% - 6px);\\n border-radius: 3px;\\n z-index: -1;\\n opacity: .60;\\n }\\n &.expanded {\\n &:focus {\\n border-style: dashed;\\n border-width: 2px;\\n outline: none;\\n .berry {\\n display: block;\\n }\\n }\\n }\\n}\\n.cal-week-view .cal-time-label-column {\\n width: 70px;\\n height: 100%;\\n}\\n.cal-week-view .cal-current-time-marker {\\n position: absolute;\\n width: 100%;\\n height: 2px;\\n z-index: 2;\\n}\\n.cal-week-view .cal-all-day-events {\\n border: solid 1px;\\n border-top: 0;\\n border-bottom-width: 3px;\\n padding-top: 3px;\\n position: relative;\\n}\\n.cal-week-view .cal-all-day-events .cal-day-columns {\\n height: 100%;\\n width: 100%;\\n display: -webkit-box;\\n display: -ms-flexbox;\\n -js-display: flex;\\n display: flex;\\n position: absolute;\\n top: 0;\\n z-index: 0;\\n}\\n.cal-week-view .cal-all-day-events .cal-events-row {\\n position: relative;\\n height: 31px;\\n margin-left: 70px;\\n}\\n.cal-week-view .cal-all-day-events .cal-event-container {\\n display: inline-block;\\n position: absolute;\\n}\\n.cal-week-view .cal-all-day-events .cal-event-container.resize-active {\\n z-index: 1;\\n pointer-events: none;\\n}\\n.cal-week-view .cal-all-day-events .cal-event {\\n padding: 0 5px;\\n margin-left: 2px;\\n margin-right: 2px;\\n height: 28px;\\n line-height: 28px;\\n}\\n.cal-week-view .cal-all-day-events .cal-time-label-column {\\n display: -webkit-box;\\n display: -ms-flexbox;\\n -js-display: flex;\\n display: flex;\\n -webkit-box-align: center;\\n -ms-flex-align: center;\\n align-items: center;\\n -webkit-box-pack: center;\\n -ms-flex-pack: center;\\n justify-content: center;\\n font-size: 14px;\\n}\\n.cal-week-view .cal-all-day-events .cal-resize-handle {\\n width: 6px;\\n height: 100%;\\n cursor: col-resize;\\n position: absolute;\\n top: 0;\\n}\\n.cal-week-view .cal-all-day-events .cal-resize-handle.cal-resize-handle-after-end {\\n right: 0;\\n}\\n.cal-week-view .cal-event,\\n.cal-week-view .cal-header {\\n overflow: hidden;\\n -o-text-overflow: ellipsis;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n.cal-week-view .cal-drag-active {\\n pointer-events: none;\\n z-index: 1;\\n}\\n.cal-week-view .cal-drag-active * {\\n pointer-events: none;\\n}\\n.cal-week-view .cal-time-events {\\n position: relative;\\n border: solid 1px;\\n border-top: 0;\\n display: -webkit-box;\\n display: -ms-flexbox;\\n -js-display: flex;\\n display: flex;\\n}\\n.cal-week-view .cal-time-events .cal-day-columns {\\n display: -webkit-box;\\n display: -ms-flexbox;\\n -js-display: flex;\\n display: flex;\\n -webkit-box-flex: 1;\\n -ms-flex-positive: 1;\\n flex-grow: 1;\\n /*\\n First and last item's hour visibility adjustment in the list \\n */\\n .cal-hour:nth-of-type(2), .cal-hour:nth-of-type(8){ \\n .cal-time {\\n top: -9px;\\n }\\n }\\n \\n}\\n.cal-week-view .cal-time-events .cal-day-column {\\n position: relative;\\n}\\n.cal-week-view .cal-time-events .cal-events-container {\\n position: relative;\\n}\\n.cal-week-view .cal-time-events .cal-event-container {\\n position: absolute;\\n z-index: 1;\\n}\\n.cal-week-view .cal-time-events .cal-event {\\n overflow: visible;\\n width: 103%;\\n height: calc(100% - 2px);\\n margin: 1px;\\n padding: 0 5px;\\n line-height: 25px;\\n left: -3%;\\n position: relative;\\n}\\n.expanded {\\n .cal-week-view .cal-time-events .cal-event {\\n width: 100%;\\n left: 0%;\\n }\\n}\\n.cal-week-view .cal-time-events .cal-resize-handle {\\n width: 100%;\\n height: 8px;\\n cursor: row-resize;\\n position: absolute;\\n z-index: 10;\\n}\\n.cal-week-view .cal-time-events .cal-resize-handle.cal-resize-handle-after-end {\\n bottom: -4px;\\n}\\n.cal-week-view .cal-time-events .cal-resize-handle.cal-resize-handle-before-start {\\n top: -4px;\\n}\\n.cal-week-view .cal-hour-segment {\\n position: relative;\\n}\\n.cal-week-view .cal-hour-segment::after {\\n content: '\\\\00a0';\\n}\\n.cal-week-view .cal-draggable {\\n cursor: move;\\n}\\n.cal-week-view mwl-calendar-week-view-hour-segment,\\n.cal-week-view .cal-hour-segment {\\n display: block;\\n}\\n.cal-week-view .cal-hour {\\n .cal-time {\\n z-index: 2;;\\n position: relative;\\n top: -14px;\\n background-color: #f4f4f4;\\n height: 5rem;\\n width: 4rem;\\n border-right: 1px solid #A19F9F;\\n border-width: thin;\\n }\\n .cal-hour-start {\\n border: none !important;\\n }\\n}\\n.expanded {\\n .cal-week-view .cal-hour {\\n .cal-time {\\n background-color: #f8f9fa;\\n width: 4.44rem;\\n }\\n }\\n}\\n.cal-week-view .cal-hour:not(:last-child) .cal-hour-segment,\\n.cal-week-view .cal-hour:last-child :not(:last-child) .cal-hour-segment {\\n border-bottom: thin solid;\\n border-color: #DBDBDB;\\n}\\n.cal-week-view .cal-time {\\n font-weight: bold;\\n padding-top: 5px;\\n width: 70px;\\n text-align: center;\\n}\\n.cal-week-view .cal-hour-segment.cal-after-hour-start .cal-time {\\n display: none;\\n}\\n.cal-week-view {\\n background-color: #fff;\\n border-top: solid 1px #e1e1e1;\\n}\\n.cal-week-view .cal-day-headers {\\n border-color: #e1e1e1;\\n border-top: 0;\\n border-left-width: 0;\\n border-right-width: 0;\\n}\\n.cal-week-view .cal-day-headers .cal-header:not(:last-child) {\\n border-right-color: #e1e1e1;\\n}\\n.cal-week-view .cal-day-headers .cal-header:first-child {\\n border-left-color: #e1e1e1;\\n}\\n.cal-week-view .cal-day-column {\\n border-left-color: #e1e1e1;\\n}\\n.cal-week-view .cal-event {\\n background-color: #d1e8ff;\\n border-color: #1e90ff;\\n color: #1e90ff;\\n}\\n.cal-week-view .cal-all-day-events {\\n border-color: #e1e1e1;\\n}\\n.cal-week-view .cal-header.cal-event-date {\\n color: $primary-highlight;\\n}\\n.cal-week-view .cal-header.cal-weekend span {\\n color: #8b0000;\\n}\\n.cal-week-view .cal-time-events {\\n border-color: #e1e1e1;\\n}\\n.expanded {\\n .cal-week-view .cal-time-events .cal-day-columns:not(.cal-resize-active) .cal-hour-segment:hover {\\n background-color: #C0DBF5;\\n }\\n}\\n.cal-week-view .cal-hour-odd {\\n background-color: #fafafa;\\n}\\n.cal-week-view .cal-drag-over .cal-hour-segment {\\n background-color: #ededed;\\n}\\n.cal-week-view .cal-hour:not(:last-child) .cal-hour-segment,\\n.cal-week-view .cal-hour:last-child :not(:last-child) .cal-hour-segment {\\n border-bottom-color: #e1e1e1;\\n}\\n.cal-week-view .cal-current-time-marker {\\n display: none;\\n}\\n.cal-day-view mwl-calendar-week-view-header {\\n display: none;\\n}\\n.cal-day-view .cal-events-container {\\n margin-left: 70px;\\n}\\n.cal-day-view .cal-day-column {\\n border-left: 0;\\n}\\n.cal-day-view .cal-current-time-marker {\\n margin-left: 70px;\\n width: calc(100% - 70px);\\n}\\n\\n.cal-tooltip {\\n position: absolute;\\n z-index: 1070;\\n display: block;\\n font-style: normal;\\n font-weight: normal;\\n letter-spacing: normal;\\n line-break: auto;\\n line-height: 1.5;\\n text-align: start;\\n text-decoration: none;\\n text-shadow: none;\\n text-transform: none;\\n white-space: normal;\\n word-break: normal;\\n word-spacing: normal;\\n font-size: 14px;\\n word-wrap: break-word;\\n opacity: 0.9;\\n margin-bottom: 4px;\\n}\\n\\n.cal-tooltip.cal-tooltip-top {\\n padding: 5px 0;\\n margin-top: -3px;\\n}\\n\\n.cal-tooltip.cal-tooltip-top .cal-tooltip-arrow {\\n bottom: 0;\\n left: 50%;\\n margin-left: -5px;\\n border-width: 5px 5px 0;\\n}\\n\\n.cal-tooltip.cal-tooltip-right {\\n padding: 0 5px;\\n margin-left: 3px;\\n}\\n\\n.cal-tooltip.cal-tooltip-right .cal-tooltip-arrow {\\n top: 50%;\\n left: 0;\\n margin-top: -5px;\\n border-width: 5px 5px 5px 0;\\n}\\n\\n.cal-tooltip.cal-tooltip-bottom {\\n padding: 5px 0;\\n margin-top: 3px;\\n}\\n\\n.cal-tooltip.cal-tooltip-bottom .cal-tooltip-arrow {\\n top: 0;\\n left: 50%;\\n margin-left: -5px;\\n border-width: 0 5px 5px;\\n}\\n\\n.cal-tooltip.cal-tooltip-left {\\n padding: 0 5px;\\n margin-left: -3px;\\n}\\n\\n.cal-tooltip.cal-tooltip-left .cal-tooltip-arrow {\\n top: 50%;\\n right: 0;\\n margin-top: -5px;\\n border-width: 5px 0 5px 5px;\\n}\\n\\n.cal-tooltip-inner {\\n max-width: 200px;\\n padding: 3px 8px;\\n text-align: center;\\n border-radius: 0.25rem;\\n}\\n\\n.cal-tooltip-arrow {\\n position: absolute;\\n width: 0;\\n height: 0;\\n border-color: transparent;\\n border-style: solid;\\n}\\n\\n.cal-tooltip.cal-tooltip-top .cal-tooltip-arrow {\\n border-top-color: #fff;\\n}\\n\\n.cal-tooltip.cal-tooltip-right .cal-tooltip-arrow {\\n border-right-color: #fff;\\n}\\n\\n.cal-tooltip.cal-tooltip-bottom .cal-tooltip-arrow {\\n border-bottom-color: #fff;\\n}\\n\\n.cal-tooltip.cal-tooltip-left .cal-tooltip-arrow {\\n border-left-color: #fff;\\n}\\n\\n.cal-tooltip-inner {\\n padding: 10px;\\n color: #000;\\n background-color: #fff;\\n box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.2);\\n}\\n\\n//// Incorporate overrides below into above @todo\\n.cal-event-container {\\n .cal-event {\\n border-radius: 0 !important;\\n .cal-event-title {\\n font-size: 14px;\\n font-weight: 400;\\n padding: 10px 14px;\\n color: black;\\n display: block;\\n @include is-screen-size(mobile) {\\n font-size: 12px;\\n }\\n }\\n }\\n &.selected {\\n width: 100% !important;\\n left: 0% !important;\\n .cal-event {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n .cal-event-title {\\n white-space: pre-wrap;\\n text-align: center;\\n }\\n }\\n z-index: 2 !important;\\n &.mobile {\\n left: 0% !important;\\n width: 100% !important;\\n }\\n &.minimal {\\n .cal-event-title {\\n top: 0;\\n transform: none;\\n }\\n }\\n }\\n &.mobile {\\n left: 0% !important;\\n width: 100% !important;\\n }\\n &.booked {\\n width: 100% !important;\\n left: 0% !important;\\n .cal-event {\\n .cal-event-title {\\n width: 100%;\\n }\\n }\\n &.mobile {\\n left: 0% !important;\\n width: 100% !important;\\n }\\n &.minimal {\\n .cal-event-title {\\n padding: 1px 14px;\\n }\\n }\\n }\\n &.show-weekend {\\n .cal-event {\\n .cal-event-title {\\n font-size: 13px;\\n }\\n }\\n\\n }\\n}\\n.cal-week-view {\\n position: relative;\\n .cal-time {\\n font-weight: 400;\\n }\\n .cal-hour {\\n background-color: #ffffff;\\n }\\n .cal-hour-odd {\\n background-color: #ffffff;\\n }\\n .cal-time-events {\\n background-color: #ffffff;\\n }\\n}\\n.cal-week-view .cal-day-headers {\\n position: fixed;\\n width: 100%;\\n max-width: 1008px;\\n background: $page-background-color;\\n z-index: 3;\\n height: 82px;\\n @include is-screen-size(laptop) {\\n width: 100%;\\n }\\n}\\n\\n.expanded {\\n .cal-week-view .cal-time-events {\\n padding-top: 87px;\\n position: relative;\\n top: 1px;\\n z-index: 1;\\n border: 1px solid #f0f0f0;\\n }\\n\\n\\n .cal-event-container {\\n &.mobile {\\n left: 20% !important;\\n width: 80% !important;\\n }\\n }\\n}\\n\\n/*\\nEnd Start Angular Calendar\\n*/\\n\",\"// Custom Theming for Angular Material\\n// For more information: https://material.angular.io/guide/theming\\n@import '~@angular/material/theming';\\n// Plus imports for other components in your app.\\n\\n// Include the common styles for Angular Material. We include this here so that you only\\n// have to load a single css file for Angular Material in your app.\\n// Be sure that you only ever include this mixin once!\\n@include mat-core();\\n\\n@import \\\"./variables\\\";\\n@import 'mixins';\\n\\n@import \\\"../../../libs/ui/src/lib/styles.scss\\\";\\n@import \\\"./calendar.scss\\\";\\n\\n// Define the palettes for your theme using the Material Design palettes available in palette.scss\\n// (imported above). For each palette, you can optionally specify a default, lighter, and darker\\n// hue. Available color palettes: https://material.io/design/color/\\n$mckinsey-staff-app-primary: mat-palette($mat-indigo);\\n$mckinsey-staff-app-accent: mat-palette($mat-blue, A200, A100, A400);\\n\\n// The warn palette is optional (defaults to red).\\n$mckinsey-staff-app-warn: mat-palette($mat-red);\\n\\n// Create the theme object (a Sass map containing all of the palettes).\\n$mckinsey-staff-app-theme: mat-light-theme($mckinsey-staff-app-primary, $mckinsey-staff-app-accent, $mckinsey-staff-app-warn);\\n\\n// Include theme styles for core and each component used in your app.\\n// Alternatively, you can import and @include the theme mixins for each component\\n// that you are using.\\n@include angular-material-theme($mckinsey-staff-app-theme);\\n\\n/* You can add global styles to this file, and also import other style files */\\n// Our dark theme\\n.dark-mode {\\n color: $light-primary-text;\\n $dark-primary: mat-palette($mat-cyan);\\n $dark-accent: mat-palette($mat-blue, A400, A100, A700);\\n $dark-warn: mat-palette($mat-red);\\n $dark-theme: mat-dark-theme($dark-primary, $dark-accent, $dark-warn);\\n\\n @include angular-material-theme($dark-theme);\\n}\\n\\n@mixin outlined-button-mds($color) {\\n border: solid $color 1px;\\n border-radius: 0;\\n display: flex;\\n align-items: center;\\n height: 2em;\\n padding-left: 2.5em;\\n padding-right: 2.5em;\\n .mat-button-wrapper {\\n font-weight: normal;\\n font-family: $font-family-primary;\\n color: $color;\\n }\\n}\\n\\n// TODO: this is not the ideal override. Really, we should be using material theming, or mixins to\\n// achieve this styling.\\n.mat-stroked-button.mat-black {\\n @include outlined-button-mds(black);\\n}\\n.mat-stroked-button.mat-coachmark {\\n @include outlined-button-mds($coachmark-text);\\n}\\n\\n.mat-stroked-button.mat-blue-coachmark {\\n @include outlined-button-mds($coachmark-dark-text);\\n }\\n\\nhtml,\\nbody {\\n height: 100%;\\n width: 100%;\\n}\\n\\nbody {\\n background-color: #fff;\\n}\\n\\n.app,\\nbody {\\n font-family: \\\"Helvetica Neue\\\", \\\"Helvetica\\\", Arial, sans-serif;\\n font-weight: 300;\\n}\\n\\n.app {\\n position: absolute;\\n}\\n\\nhtml,\\nbody {\\n margin: 0;\\n padding: 0;\\n font-size: 16px;\\n}\\n\\n.app {\\n top: 0;\\n left: 0;\\n bottom: 0;\\n right: 0\\n}\\n\\n* {\\n font-family: \\\"Helvetica Neue\\\", \\\"Helvetica\\\", Arial, sans-serif;\\n box-sizing: border-box;\\n}\\n\\n.center {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n -webkit-transform: translate(-50%, -50%);\\n -ms-transform: translate(-50%, -50%);\\n transform: translate(-50%, -50%);\\n margin: auto;\\n}\\n\\n.loading {\\n display: inline-block;\\n padding: 1.5em;\\n border-radius: 1em;\\n color: #000;\\n font-size: 10mm;\\n text-align: center;\\n}\\n\\n.bounce,\\n.bounce .circle,\\n.bounce .circle .inner {\\n height: 4em;\\n width: 4em;\\n border-radius: 100%;\\n}\\n\\n.bounce .circle {\\n -webkit-animation: sk-scaleout .8s infinite ease-in-out;\\n animation: sk-scaleout .8s infinite ease-in-out;\\n}\\n\\n.bounce .circle .inner {\\n background-color: #000;\\n}\\n\\n@-webkit-keyframes sk-scaleout {\\n 0% {\\n -webkit-transform: scale(0)\\n }\\n 20% {\\n opacity: 1\\n }\\n 100% {\\n -webkit-transform: scale(1);\\n opacity: 0\\n }\\n}\\n\\n@keyframes sk-scaleout {\\n 0% {\\n -webkit-transform: scale(0);\\n transform: scale(0)\\n }\\n 20% {\\n opacity: 1\\n }\\n 100% {\\n -webkit-transform: scale(1);\\n transform: scale(1);\\n opacity: 0\\n }\\n}\\n\\n.no-script {\\n height: 10em;\\n width: 15em;\\n padding: .5em 1em;\\n background-color: #FFF;\\n border-radius: .1em;\\n box-shadow: 0 .1em .2em .1em rgba(0, 0, 0, .2);\\n text-align: center;\\n position: absolute;\\n top: 1em;\\n left: 50%;\\n transform: translateX(-50%)\\n}\\n\\n.no-script img {\\n border-radius: .2em;\\n height: 6em;\\n width: 6em\\n}\\n\\n.no-script .title {\\n padding: 0 1em;\\n font-style: italic;\\n font-size: 1.2em\\n}\\n\\n.no-script .content {\\n display: flex\\n}\\n\\n.aca-coin {\\n position: relative;\\n height: 4.0em;\\n width: 4.0em;\\n padding: 0.5em;\\n margin: 0.5em;\\n border-radius: 100%;\\n background-color: #dd3d5e;\\n animation: coin-spin 2.0s infinite ease-in-out;\\n}\\n\\n.aca-logo {\\n height: 3.0em;\\n width: 3.0em;\\n background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDIwMDEwOTA0Ly9FTiIKICJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy1TVkctMjAwMTA5MDQvRFREL3N2ZzEwLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4wIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiB3aWR0aD0iNzc5LjAwMDAwMHB0IiBoZWlnaHQ9IjMyNC4wMDAwMDBwdCIgdmlld0JveD0iMCAwIDc3OS4wMDAwMDAgMzI0LjAwMDAwMCIKIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiPgo8bWV0YWRhdGE+CkNyZWF0ZWQgYnkgcG90cmFjZSAxLjE0LCB3cml0dGVuIGJ5IFBldGVyIFNlbGluZ2VyIDIwMDEtMjAxNwo8L21ldGFkYXRhPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjAwMDAwMCwzMjQuMDAwMDAwKSBzY2FsZSgwLjEwMDAwMCwtMC4xMDAwMDApIgpmaWxsPSIjZmZmIiBzdHJva2U9Im5vbmUiPgo8cGF0aCBkPSJNNDAwNSAzMjI4IGMtNDQ3IC0yNSAtODM5IC0yMzUgLTExMDkgLTU5NiAtMzE5IC00MjYgLTQxMSAtMTE0NQotMjE2IC0xNjk3IDE2NyAtNDcxIDU0OSAtODAzIDEwMzcgLTkwMiAxMTEgLTIzIDUwNSAtMjYgNjIzIC01IDEyNyAyMyAyODAgNjIKMzgyIDk5IGw5OCAzNSAwIDEwNSBjMCA5NiAtMiAxMDUgLTE3IDEwMCAtMTAgLTMgLTU3IC0yMiAtMTA2IC00MSAtMTkzIC04MAotMzczIC0xMTEgLTYzNyAtMTExIC0yNzQgMCAtNDAxIDI3IC01OTcgMTI5IC0xMTYgNjAgLTE5OSAxMjQgLTMwMyAyMzMgLTE3MgoxNzggLTI3NiAzODggLTMyNSA2NTYgLTM2IDE5NSAtMzYgNTA4IDAgNzAzIDEwMSA1NTUgNDY2IDk1MiA5ODIgMTA3MCA5MyAyMQo0MTUgMzAgNTI1IDE1IDEyNCAtMTggMjc2IC01NiAzNzkgLTk2IDUwIC0xOSA5MyAtMzUgOTUgLTM1IDIgMCA0IDUyIDQgMTE1CmwwIDExNCAtODcgMjcgYy0yMjggNjkgLTQ2OSA5NyAtNzI4IDgyeiIvPgo8cGF0aCBkPSJNNTkxIDE2MzMgYy0zMjEgLTg1MSAtNTg2IC0xNTU0IC01ODkgLTE1NjEgLTMgLTkgMjQgLTEyIDExNiAtMTIKbDEyMCAwIDYwIDE2MiBjMzMgOTAgMTEzIDMwOCAxNzggNDg2IGwxMTkgMzIyIDY3NSAwIDY3NSAwIDEwNCAtMjgyIGM1NyAtMTU2CjEzNyAtMzc0IDE3OCAtNDg2IGw3NSAtMjAyIDExOSAwIGM4OSAwIDExOSAzIDExOCAxMyAwIDYgLTI2MCA3MDcgLTU3NyAxNTU3CmwtNTc3IDE1NDUgLTEwNSAzIC0xMDYgMyAtNTgzIC0xNTQ4eiIvPgo8cGF0aCBkPSJNNjQwNSAzMTYzIGMtMzggLTk5IC0xMTU5IC0zMDcyIC0xMTYzIC0zMDg2IC00IC0xNSA2IC0xNyAxMTQgLTE3CmwxMTkgMCAxMDQgMjgzIGM1NyAxNTUgMTM3IDM3MyAxNzggNDg1IGw3NSAyMDIgNjc2IC0yIDY3NiAtMyAxNzYgLTQ4MCAxNzcKLTQ4MCAxMjIgLTMgMTIzIC0zIC04IDIzIGMtNCAxMiAtMjY0IDcxMyAtNTc5IDE1NTggbC01NzMgMTUzNSAtMTA1IDMgYy05MyAyCi0xMDUgMSAtMTEyIC0xNXoiLz4KPC9nPgo8L3N2Zz4K);\\n background-repeat: no-repeat;\\n background-position: center;\\n background-size: contain;\\n}\\n\\n@keyframes coin-spin {\\n 0% {\\n transform: rotateY(0deg) translateY(0%);\\n }\\n 49% {\\n transform: rotateY(179deg) translateY(20%);\\n }\\n 50% {\\n transform: rotateY(181deg) translateY(20%);\\n }\\n 100% {\\n transform: rotateY(359deg) translateY(0%);\\n }\\n}\\n\\n.shadow {\\n position: absolute;\\n bottom: 0;\\n left: 50%;\\n animation: floating-shadow 2s infinite ease-in-out;\\n width: 48px;\\n height: 6px;\\n background-color: rgba(0, 0, 0, 0.2);\\n border-radius: 100%;\\n}\\n\\n@keyframes floating-shadow {\\n 0% {\\n transform: translateX(-50%) scale(1.0)\\n }\\n 45% {\\n transform: translateX(-50%) scale(1.3);\\n }\\n 55% {\\n transform: translateX(-50%) scale(1.3);\\n }\\n 100% {\\n transform: translateX(-50%) scale(1.0);\\n }\\n}\\n\\nhtml, body {\\n height: 100%;\\n}\\n\\nbody {\\n margin: 0;\\n font-family: Roboto, \\\"Helvetica Neue\\\", sans-serif;\\n}\\n\\n.yellow-snackbar {\\n background: #ffd149;\\n color:rgba(0, 0, 0, .9);\\n text-align: center;\\n span {\\n color:rgba(0, 0, 0, .9);\\n }\\n}\\n\\n// Fix room-room-location-preview show legend input position, no idea why.\\n.sub {\\n app-map-controls > div {\\n mck-legend-dropdown {\\n position: relative;\\n top: -6px;\\n }\\n \\n .map-info-button {\\n @include respond-to(mobile) {\\n display: none !important;\\n }\\n }\\n } \\n} \\n\\n.mck-modal-backdrop {\\n background-color: rgba(#051C2C, 0.85);\\n}\\n\\n.pulsate {\\n animation: pulsate 2s ease-out;\\n animation-iteration-count: infinite; \\n opacity: 0.3;\\n}\\n@keyframes pulsate {\\n 0% { \\n opacity: 0.3;\\n }\\n 50% { \\n opacity: 1.0;\\n }\\n 100% { \\n opacity: 0.3;\\n }\\n}\\n\\n.mat-form-field-invalid {\\n .mat-form-field-outline, .mat-form-field-outline-thick {\\n >div {\\n border-color: #f44336 !important;\\n }\\n \\n }\\n}\\n\\n.mck-toggle {\\n position: relative;\\n .mat-slide-toggle-thumb {\\n height: 0.875rem;\\n width: 0.875rem;\\n border-radius: 50%;\\n }\\n .mat-slide-toggle-thumb-container {\\n top: 0.2rem;\\n left: 0.2rem;\\n }\\n .mat-slide-toggle-bar {\\n position: relative;\\n width: 2.5rem;\\n height: 1.25rem;\\n flex-shrink: 0;\\n border-radius: 1.25rem;\\n background-color: #d0d0d0;\\n .mat-slide-toggle-ripple{\\n top: calc(50% - 23px);\\n }\\n }\\n \\n &.mat-checked {\\n .mat-slide-toggle-thumb-container {\\n left: 0.42rem;\\n }\\n .mat-slide-toggle-thumb {\\n background-color: white;\\n } \\n .mat-slide-toggle-bar {\\n background-color: #2152fe;\\n }\\n } \\n \\n}\\n\\n.mck-chevron-icon {\\n svg {\\n transform: rotate(180deg);\\n transition: transform 0.5s ease; \\n }\\n\\n &.turn-up {\\n svg {\\n transform: rotate(0deg); \\n }\\n \\n }\\n}\\n\\n.mat-tab-label {\\n padding: 0 6px 0 2px !important;\\n min-width: auto !important;\\n margin-right: 40px;\\n font-family: $font-mckinsey-sans;\\n font-size: 20px;\\n font-weight: 400;\\n color: #333333;\\n opacity: 1 !important;\\n &.mat-tab-label-active {\\n \\n .mat-tab-label-content {\\n color: $primary-highlight;\\n \\n }\\n }\\n .mat-tab-label-content {\\n color: #333333;\\n padding-bottom: 20px;\\n }\\n}\\n\\n.mat-tab-group.mat-primary .mat-ink-bar, .mat-tab-nav-bar.mat-primary .mat-ink-bar {\\n background-color: $primary-highlight;\\n height: 4px;\\n}\\n\\n@include is-screen-size(mobile) {\\n .mck-tab {\\n .mat-tab-header {\\n transform: scale(.65) !important;\\n width: 100vw;\\n display: block;\\n position: relative;\\n left: -19%;\\n .mat-tab-header-pagination {\\n display: none;\\n }\\n } \\n } \\n}\\n\\n.status {\\n background: #fff;\\n color: #000;\\n &.tentative, &.pending, &.requested {\\n background: #FFF3CE;\\n color: #6A4F00;\\n }\\n &.accepted {\\n background: #D1F4DD;\\n color: #006200;\\n }\\n &.approved {\\n background: #D1F4DD;\\n color: #006200;\\n }\\n &.expired {\\n background: #F0F0F0;\\n color: #757575;\\n }\\n &.declined, &.cancelled {\\n background: #FFE5EA;\\n color: #B0001D;\\n }\\n}\\n\\n\\n.banner{\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n padding: 16px 26px;\\n box-sizing: border-box; \\n \\n .banner-text {\\n width: calc(100% - 50px);\\n padding: 0 20px;\\n box-sizing: border-box;\\n font-weight: 500;\\n font-family: $font-family-primary;\\n margin:0;\\n text-align: left;\\n }\\n \\n img:last-child{\\n cursor: pointer;\\n }\\n \\n @include is-screen-size(mobile) {\\n align-items: end;\\n }\\n\\n &.advise{\\n background-color: #EBEBF6;\\n justify-content: start !important;\\n border: 1px solid rgba(106, 79, 0, 0.11);\\n .banner-text {\\n color: #1B1B19;\\n }\\n }\\n\\n &.info {\\n background-color: #E6ECFF;\\n .banner-text {\\n color: #1E32E6;\\n }\\n }\\n &.warning {\\n background-color: #fdf1f3;\\n .banner-text {\\n color: #B0001D;\\n }\\n }\\n &.fixed {\\n position: fixed;\\n top: 0;\\n left: 0;\\n width: 100%;\\n z-index: 5;\\n }\\n }\\n\\n\\n .fullpage-modal {\\n position: fixed;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n z-index: 3;\\n background-color: #f8f9fa;\\n .header {\\n z-index: 1;\\n }\\n }\\n\\n\\n.coachmark {\\n margin-top: 0;\\n position: relative;\\n top: -6px;\\n font-family: $font-mckinsey-sans;\\n font-style: normal;\\n font-weight: 400;\\n font-size: 14px;\\n line-height: 20px;\\n color: #333333;\\n}\\n\\n.bottom-panel-buttons {\\n position: fixed;\\n bottom: 0;\\n width: 100%;\\n min-height: 80px;\\n background-color: white;\\n border: 1px solid #E6E6E6;\\n z-index: 1002;\\n \\n .buttons {\\n padding: 24px 16px;\\n border: none;\\n background-color: transparent;\\n max-width: 684px;\\n margin: 0 auto;\\n display: flex;\\n\\n button {\\n flex: 1;\\n height: 48px;\\n font-size: 16px;\\n max-width: 332px;\\n }\\n button:nth-child(1) {\\n margin-right: 5px;\\n border: 1px solid #D0D0D0;\\n }\\n button:nth-child(2) {\\n margin-left: 5px;\\n }\\n\\n @include is-screen-size(mobile) {\\n padding: 16px 0;\\n\\n button {\\n margin: 0 16px;\\n }\\n button:nth-child(1) {\\n margin-right: 8px;\\n }\\n button:nth-child(2) {\\n margin-left: 8px;\\n }\\n\\n }\\n }\\n }\\n\\n .modal_mask {\\n width: 100vw;\\n height: 100vh;\\n position: fixed;\\n top: 0;\\n left: 0;\\n background-color: white;\\n z-index: 3;\\n }\\n\\n// mat-radio-button[ng-reflect-value=\\\"4\\\"] {\\n// display: none;\\n// }\\n\"]}]);\n// Exports\nexports.locals = {\n\t\"primary\": \"#1F40E6\",\n\t\"secondaryLabel\": \"#767676\"\n};\nmodule.exports = exports;\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (useSourceMap) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item, useSourceMap);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n }\n\n return content;\n }).join('');\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === 'string') {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, '']];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring\n\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (useSourceMap && typeof btoa === 'function') {\n var sourceMapping = toComment(cssMapping);\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || '').concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n }\n\n return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n return \"/*# \".concat(data, \" */\");\n}","\"use strict\";\n\nvar isOldIE = function isOldIE() {\n var memo;\n return function memorize() {\n if (typeof memo === 'undefined') {\n // Test for IE <= 9 as proposed by Browserhacks\n // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n // Tests for existence of standard globals is to allow style-loader\n // to operate correctly into non-standard environments\n // @see https://github.com/webpack-contrib/style-loader/issues/177\n memo = Boolean(window && document && document.all && !window.atob);\n }\n\n return memo;\n };\n}();\n\nvar getTarget = function getTarget() {\n var memo = {};\n return function memorize(target) {\n if (typeof memo[target] === 'undefined') {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDom.length; i++) {\n if (stylesInDom[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var index = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3]\n };\n\n if (index !== -1) {\n stylesInDom[index].references++;\n stylesInDom[index].updater(obj);\n } else {\n stylesInDom.push({\n identifier: identifier,\n updater: addStyle(obj, options),\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction insertStyleElement(options) {\n var style = document.createElement('style');\n var attributes = options.attributes || {};\n\n if (typeof attributes.nonce === 'undefined') {\n var nonce = typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n\n if (nonce) {\n attributes.nonce = nonce;\n }\n }\n\n Object.keys(attributes).forEach(function (key) {\n style.setAttribute(key, attributes[key]);\n });\n\n if (typeof options.insert === 'function') {\n options.insert(style);\n } else {\n var target = getTarget(options.insert || 'head');\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n }\n\n return style;\n}\n\nfunction removeStyleElement(style) {\n // istanbul ignore if\n if (style.parentNode === null) {\n return false;\n }\n\n style.parentNode.removeChild(style);\n}\n/* istanbul ignore next */\n\n\nvar replaceText = function replaceText() {\n var textStore = [];\n return function replace(index, replacement) {\n textStore[index] = replacement;\n return textStore.filter(Boolean).join('\\n');\n };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n /* istanbul ignore if */\n\n if (style.styleSheet) {\n style.styleSheet.cssText = replaceText(index, css);\n } else {\n var cssNode = document.createTextNode(css);\n var childNodes = style.childNodes;\n\n if (childNodes[index]) {\n style.removeChild(childNodes[index]);\n }\n\n if (childNodes.length) {\n style.insertBefore(cssNode, childNodes[index]);\n } else {\n style.appendChild(cssNode);\n }\n }\n}\n\nfunction applyToTag(style, options, obj) {\n var css = obj.css;\n var media = obj.media;\n var sourceMap = obj.sourceMap;\n\n if (media) {\n style.setAttribute('media', media);\n } else {\n style.removeAttribute('media');\n }\n\n if (sourceMap && btoa) {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n while (style.firstChild) {\n style.removeChild(style.firstChild);\n }\n\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n var style;\n var update;\n var remove;\n\n if (options.singleton) {\n var styleIndex = singletonCounter++;\n style = singleton || (singleton = insertStyleElement(options));\n update = applyToSingletonTag.bind(null, style, styleIndex, false);\n remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n } else {\n style = insertStyleElement(options);\n update = applyToTag.bind(null, style, options);\n\n remove = function remove() {\n removeStyleElement(style);\n };\n }\n\n update(obj);\n return function updateStyle(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n return;\n }\n\n update(obj = newObj);\n } else {\n remove();\n }\n };\n}\n\nmodule.exports = function (list, options) {\n options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of
\n \n
\n \n
\n Booking Details\n Confirmed!\n Requested!\n
\n
Please await confirmation of room
\n
\n
\n \n
{{ title || 'No title' }}
\n
\n
\n \n
{{ when }}
\n
\n
\n \n
{{ recurrence }}
\n 0\"\n (click)=\"openConflictsModal()\"\n >\n Conflicts\n
\n \n
\n \n
{{ duration }}
\n
\n
\n Locations({{ spaces.length || '0' }})*:\n
\n
\n
\n
{{ item?.local_name }}
\n \n Notes\n
\n \n Code\n
\n
\n
No Locations
\n
\n 1\"\n (click)=\"toggleList('locations')\"\n >\n {{ show_locations ? 'Hide' : 'Show more' }} Locations\n \n \n \n
\n \n
{{ organiser?.name || organiser?.email }}
\n
\n
\n \n
\n {{ bookingDetails.bookedBy.value }}\n
\n
\n
\n \n
\n \n
\n Booking Details\n Confirmed!\n Requested!\n
\n
Please await confirmation of room
\n
\n
\n \n
{{ title || 'No title' }}
\n
\n
\n \n
{{ when }}
\n
\n
\n \n
{{ recurrence }}
\n 0\"\n (click)=\"openConflictsModal()\"\n >\n Conflicts\n
\n \n
\n \n
{{ duration }}
\n
\n
\n Locations({{ spaces.length || '0' }})*:\n
\n
\n
\n
{{ item?.local_name }}
\n \n Notes\n
\n \n Code\n
\n
\n
No Locations
\n
\n 1\"\n (click)=\"toggleList('locations')\"\n >\n {{ show_locations ? 'Hide' : 'Show more' }} Locations\n \n \n \n
\n \n
{{ organiser?.name || organiser?.email }}
\n
\n
\n \n
\n {{ bookingDetails.bookedBy.value }}\n
\n
\n